ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGFhNWY3NDIuLmRmMTc0ZWQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNjYsNiArNjYsNyBAQAogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogbGlidG9vbAogbG9jYWwvc25tcGNoZWNrCitsb2NhbC9zbm1wY29uZgogTWFrZWZpbGUKIG1hbi8qLlsxMzU4XQogbWFuL2RlZmF1bHRfc3RvcmUuMy5oCmRpZmYgLS1naXQgYS9BR0VOVC50eHQgYi9BR0VOVC50eHQKaW5kZXggNGQ4ZDMyMy4uMzdlYjI3OSAxMDA2NDQKLS0tIGEvQUdFTlQudHh0CisrKyBiL0FHRU5ULnR4dApAQCAtNDE4LDE0ICs0MTgsMTYgQEAKIAogICAgKiBhIG1hZ2ljIG51bWJlciAodGhlICNkZWZpbmVkIGludGVnZXIgY29uc3RhbnQgZGVzY3JpYmVkIGFib3ZlKQogICAgKiBhIHR5cGUgaW5kaWNhdG9yIChmcm9tIHRoZSB2YWx1ZXMgbGlzdGVkIGluIDxzbm1wbGliL3NubXBfaW1wbC5oPikKLSAgICogYW4gYWNjZXNzIGluZGljYXRvciAoZXNzZW50aWFsbHkgUldSSVRFIG9yIFJPTkxZKQorICAgKiBhbiBhY2Nlc3MgaW5kaWNhdG9yIChlc3NlbnRpYWxseSBORVRTTk1QX09MREFQSV9SV1JJVEUgb3IKKyAgICAgTkVUU05NUF9PTERBUElfUk9OTFkpCiAgICAqIHRoZSBuYW1lIG9mIHRoZSByb3V0aW5lIHVzZWQgdG8gaGFuZGxlIHRoaXMgZW50cnkKICAgICogdGhlIGxlbmd0aCBvZiB0aGUgT0lEIHN1ZmZpeCB1c2VkLCBhbmQKICAgICogYW4gYXJyYXkgb2YgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGlzIHN1ZmZpeCAobW9yZSBvbiB0aGlzIGluIGEgbW9tZW50KQogCiBUaHVzIGEgdHlwaWNhbCB2YXJpYWJsZSBlbnRyeSB3b3VsZCBsb29rIGxpa2U6CiAKLSAgICAgICAgeyBFWEFNUExFU1RSSU5HLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHsxfX0KKyAgICAgICAgeyBFWEFNUExFU1RSSU5HLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfZXhhbXBsZSwgMSwgezF9fQogCiBJZiB0aGUgbWFnaWMgbnVtYmVycyBoYXZlIG5vdCBiZWVuIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlLCB0aGVuIHRoZXkKIHNob3VsZCBiZSBkZWZpbmVkIGhlcmUsIHVzdWFsbHkgY29tbWluZyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcKZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IDhkOTY3NDcuLjEyMDZhNGEgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtMSw3MDYgKzEsMjYwMiBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGVjaWZpYyBidWdzIHRoYXQgaGF2ZSBiZWVuIGZpeGVkLCBhbmQgcGF0Y2hlcwogdGhhdCBoYXZlIGJlZW4gYXBwbGllZCBpbiByZWxlYXNlZCB2ZXJzaW9ucy4gIFBsZWFzZSBzZWUgdGhlIE5FV1MgZmlsZSBmb3IKIGEgc3VtbWFyeSBvZiB0aGUgbWFqb3IgY2hhbmdlcywgYW5kIHRoZSBDaGFuZ2VMb2cgZmlsZSBmb3IgYSBjb21wcmVoZW5zaXZlCi1saXN0aW5nIG9mIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvZGUuIAotICAgICAgCi0qIDUuNC40ICoKK2xpc3Rpbmcgb2YgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgY29kZS4KIAorKjUuNy4zKgogICAgIHNubXBsaWI6Ci0gICAgICAtIFtCVUcgMzEzNDMyM106IEZpeCBjcmFzaCB3aGVuIGNvbXBhcmluZyBpbnZhbGlkIE9JRHMKLSAgICAgIC0gW0JVRyAzMTcxODc4XTogVXNpbmcgU05NUHYzIGNvbnRleHQgZG9lcyBub3Qgd29yawotICAgICAgLSBbQlVHIDMxODI5ODVdOiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoCi0gICAgICAtIFtCVUcgMzIzNDc1NF06IEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTAotICAgICAgLSBbQlVHIDMyNjQ4NTJdOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKLSAgICAgIC0gW1BBVENIIDMwNTg2NDVdOiBVc2UgTVNHX0RPTlRXQUlUIGZvciB0aGUgdW5peCBkb21haW4gc29ja2V0Ci0gICAgICAtIFtQQVRDSCAzMDY3NTQwXTogRml4IElQdjQgT0lEIGluZGV4ZXMgb24gNjQtYml0IGJpZy1lbmRpYW4gc3lzdGVtcwotICAgICAgLSBbUEFUQ0ggMzE2NTg3OF06IENhdGNoIGJ1ZmZlciBvdmVycnVuIG9uIDY0LWJpdCBzeXN0ZW1zCi0gICAgICAtIFtQQVRDSCAzMTgzMDAwXTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aAotICAgICAgLSBBZGRlZCBwdWJsaWMgZGVjbGFyYXRpb24gZm9yIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKQotICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLgotICAgICAgLSBBZGRlZCBmdW5jdGlvbiBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKQotICAgICAgLSBBZGRlZCBtYWNybyBuZXRzbm1wX3N0YXRpY19hc3NlcnQoKQotICAgICAgLSBBdm9pZCBWYWxncmluZCBjb21wbGFpbnRzIGFib3V0IHVuaW5pdGlhbGl6ZWQgZGF0YQotICAgICAgLSBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0cmR1cCBpbiBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgIC0gRml4IGRvdWJsZS1mcmVlIGNyYXNoIHdoZW4gcmVsZWFzaW5nIGR1cGxpY2F0ZWQgaGFuZGxlcnMKLSAgICAgIC0gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBzbm1wX2ZyZWVfc2Vzc2lvbigpCi0gICAgICAtIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIHRyaWdnZXJlZCBieSBzbm1wZC5jb25mICJlbnVtIiBrZXl3b3JkCi0gICAgICAtIEZpeGVkIGJ1Z3MgaW4gYnVpbGRpbmcvcGFyc2luZyA2NC1iaXQgaW50ZWdlcnMKLSAgICAgIC0gRml4ZWQgbGVha3MtYXQtZXhpdCB0cmlnZ2VyZWQgYnkgdXNpbmcgdGhlIHNubXBfZW51bSBjb2RlCi0gICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIGluIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKQotICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZHVwbGljYXRlIHNlX2FkZF9wYWlyX3RvX2xpc3QoKQotICAgICAgLSBGaXggaXNzdWUgd2l0aCBVU00gdXNpbmcgaW5hY3RpdmUgdXNlcnMKLSAgICAgIC0gRml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGdlbmVyYXRpbmcgdGVtcCBmaWxlIG5hbWVzCi0gICAgICAtIEludm9raW5nIHNlX2NsZWFyX3NsaXN0KCkgbm8gbG9uZ2VyIGNyZWF0ZXMgYSBkYW5nbGluZyBwb2ludGVyCi0gICAgICAtIFVzZSByZWFsbG9jK2luaXQgaW5zdGVhZCBvZiBjYWxsb2MKKyAgICAgIC0gRml4ZWQgY3Jhc2ggd2hlbiBNRDUgaGFzaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wuCisgICAgICAtIEZpeGVkIHBhcnNpbmcgb2Ygc2VxdWVuY2VzLiBEb24ndCBvdmVyd3JpdGUgJ2RhdGEnIHZhcmlhYmxlLCBpdCdzCisJdXNlZCB3aGVuIHBhcnNpbmcgYnVsayByZXNwb25zZXMuCisgICAgICAtIFtCVUcgMTI2NyBdOiBzbm1wbGliOiByZWdpc3Rlcl9taWJfY29udGV4dCgpIGZpeCBmb3IgcmVhZC1vbmx5CisJdmFyaWFibGVzICAgVGhpcyBpcyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgYSBwYXRjaCBmcm9tCisJSGFyc2hhIFNoaXZhbm5hLgorCisgICAgc25tcDoKKyAgICAgIC0gVXNtLWRoLW9iamVjdHMtbWliOiBBdm9pZCB0cmlnZ2VyaW5nIGFuIGFzc2VydCBzdGF0ZW1lbnQgaW4KKwluZXRzbm1wX3JlYWR5X21vbm90b25pYygpIFRoZSBjYWNoZSB0aW1lb3V0IGZvcgorCXNubXAtdXNtLWRoLW9iamVjdHMtbWliIGlzIC0xLiBBbnkgY2FjaGUgdGltZW91dCB2YWx1ZSA8IDAgZGlzYWJsZXMKKwljYWNoaW5nLiBIb3dldmVyLCBzdHJpY3RseSBuZWdhdGl2ZSB2YWx1ZXMgdHJpZ2dlciB0aGUgYXNzZXJ0CisJc3RhdGVtZW50IGluIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkuIEF2b2lkIHRyaWdnZXJpbmcgdGhhdAorCWFzc2VydCBzdGF0ZW1lbnQuCisgICAgICAtIEZpeGVkIG1vbml0b3JpbmcgYmFzZWQgb24gbm9uLWRlbHRhIHRyaWdnZXIuICAgc25tcGQgY3Jhc2hlZCB3aXQKKwlmb2xsb3dpbmcgc25tcGQuY29uZjogbW9uaXRvciAtcyAtRCAtciAxMCAtZSBMT0dNQVRDSCAtbworCWxvZ01hdGNoQ3VycmVudENvdW50ICJMb2cgTWF0Y2giICE9IGxvZ01hdGNoQ3VycmVudENvdW50IGxvZ21hdGNoCisJTG9naW5GYWlsdXJlMSAvdmFyL2xvZy9zZWN1cmUgMTAgc3U6IC4qZmFpbC4qIFRoZSByZWFzb24gd2FzCisJdW5pdGlhbGl6ZWQgdmFyaWFibGUgc3lzVVRfdmFyIGluIG10ZVRyaWdnZXJfcnVuKCksIGl0IHdhcyBmaWxsZWQKKwlvbmx5IGlmIHRoZSB0cmlnZ2VyIHdhcyBkZWx0YS12YWx1ZWQsIHdoaWxlIGl0cyB2YWx1ZSB3YXMgdXNlZCBmb3IKKwlhbGwgdHJpZ2dlcnMuIFdpdGggdGhpcyBwYXRjaCwgc3lzVVRfdmFyIGlzIGZpbGxlZCBmb3IgYWxsIGNvZGUKKwlicmFuY2hlcyB3aGVyZSBpdCBpcyBuZWVkZWQuCiAKICAgICBzbm1wZDoKLSAgICAgIC0gW0JVRyAxODQwMjMwXTogRG9uJ3QgaW5jbHVkZSBubG1Mb2dWYXJpYWJsZUluZGV4IGFzIChwc2V1ZG8tKWFjY2Vzc2luZyBjb2x1bW4KLSAgICAgIC0gW0JVRyAyOTcyNTc5XTogZml4ZWQgY2hlY2tpbmcgb2Ygc25tcFRhcmdldEFkZHJSb3dTdGF0dXMgU0VUIHJlcXVlc3RzCi0gICAgICAtIFtCVUcgMzAwMzk4MV06IFByb3RlY3QgYWdhaW5zdCBjb25maWcgcGFyc2luZyBidWZmZXIgb3ZlcmZsb3cKLSAgICAgIC0gW0JVRyAzMDE5MjQzXTogUmVnaXN0ZXIgZXhlY0ZpeCBjb21wYXRhYmlsaXR5IGRpcmVjdGl2ZSBjb3JyZWN0bHkKLSAgICAgIC0gW0JVRyAzMDU4MTAxXTogV3JpdGVhYmxlICdpbnQnIGluc3RhbmNlcyBkb24ndCB3b3JrIG9uIDY0LWJpdCBzeXN0ZW1zCi0gICAgICAtIFtCVUcgMzA2MjUzOF06IEZpeCBjb20yc2VjKiBoYW5kbGluZyBvZiBub24tZGVmYXVsdCBjb250ZXh0cwotICAgICAgLSBbQlVHIDMxNTE4OTddOiBmZCBsZWFrIHdpdGggL3Byb2MvcGFydGl0aW9ucyByZWFkIGluIGRpc2tpbwotICAgICAgLSBbQlVHIDMxNzgzODldOiBGaXggaW5jb25zaXN0ZW50IGhhbmRsaW5nIG9mIFRaIG9mZnNldHMKLSAgICAgIC0gW0JVRyAzMTg1NTI4XTogc2h1dGRvd25fbWFzdGVyX2FnZW50IGRvZXNuJ3QgY2xvc2UgVURQIHNvY2tldHMKLSAgICAgIC0gW0JVRyAzMzA1MTU3XTogRml4IGlwQWRkcmVzc1ByZWZpeCBoYW5kbGluZyBvZiBJUHY2IGFkZHJlc3NlcwotICAgICAgLSBbUEFUQ0ggMjExOTcyNV06IEZpeCBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIGhhbmRsaW5nIG9mIGhyU3RvcmFnZVRhYmxlCi0gICAgICAtIFtQQVRDSCAyODI1NjUzXTogRml4IHNlbmRtYWlsLmNmIHBhcnNpbmcgaW4gY2VydGFpbiBjb25kaXRpb25zCi0gICAgICAtIFtQQVRDSCAyOTA0OTAwXTogRG9jdW1lbnRhdGlvbiBwbHVzIGFzc29ydGVkIGhhbmRsZXIgY29kZSBmaXhlcwotICAgICAgLSBbUEFUQ0ggMjkxMTM2MV06IFJlbW92ZSByZWR1bmRhbnQgdmFyaWFibGVzCi0gICAgICAtIFtQQVRDSCAyOTQxODExXTogSGFuZGxlIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2l0aCByZXFJRCAwCi0gICAgICAtIFtQQVRDSCAyOTc1MjU0XTogQXZvaWQgY2FsbGJhY2sgcmUtdXNlIG9mIGNsb3NlZCBzZXNzaW9ucwotICAgICAgLSBbUEFUQ0ggMzA1MzQzNl06IEZpeCB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MgaW52YWxpZCBtZW1vcnkgYWNjZXNzCi0gICAgICAtIFtQQVRDSCAzMDYyNTI2XTogRml4IHNlY3VyaXR5IGVuZ2luZUlEIHNldHRpbmcgaW4gdGhlIHRyYXBzZXNzIGRpcmVjdGl2ZQotICAgICAgLSBbUEFUQ0ggMzA2Njg2Ml06IEZpeCBjb21wYXJpc29uIG9mIGxhcmdlIHVuc2lnbmVkIGluZGV4ZXMgKGRpc2svZXh0ZW5kIHRhYmxlcykKLSAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBEb24ndCByZWdpc3RlciB2MVRyYXAgY2FsbGJhY2ssIGlmIFNOTVB2MSBub3Qgc3VwcG9ydGVkCi0gICAgICAtIFtQQVRDSCAzMDk2NzI1XTogc3lzT1JUYWJsZSByZWdpc3RhdGlvbiBmb3IgTm90aWZpY2F0aW9uIExvZyBtaWIKLSAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBJbmNsdWRlIFNOTVB2MSB0cmFwIE9JRHMgaW4gbmxtTG9nTm90aWZpY2F0aW9uSUQgY29sdW1uCi0gICAgICAtIFtQQVRDSCAzMTQxNDYyXTogRml4IGFnZW50eCBzdWJhZ2VudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZS1vYmplY3QgcmVxdWVzdHMKLSAgICAgIC0gW1BBVENIIDMxOTg3ODFdOiBFbnN1cmUgZGlzbWFuL3twaW5nLHRyYWNlcm91dGV9IGRvIGF0IGxlYXN0IGNvbXBpbGUKLSAgICAgIC0gW1BBVENIIDMyOTkzODRdOiBGaXggSU5GT1JNcyBzbyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlECisgICAgICAtIEFkZCBhIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb24KKyAgICAgIC0gQWRkZWQgYnRyZnMgc3VwcG9ydCB0byBockZTVGFibGUKKyAgICAgIC0gQ29ycmVjdCB0aGUgc2l6ZSBvZiBvZiB0aGUgRVhBTVBMRUlQQUREUkVTUyB2YWx1ZSBvbiBMNjQgaG9zdHMKKyAgICAgIC0gRml4ZWQgY3Jhc2ggaW4gVUNELVNOTVAtTUlCOjpleHRUYWJsZSBzbm1wZCBjcmFzaGVkIHdoZW4gdGhlCisJY29tbWFuZCB0byBleGVjdXRlIGhhZCBubyBhcmd1bWVudHMsIGkuZS4gZXh0ZW5kLT5hcmdzIHdhcyBOVUxMLgorICAgICAgLSBGaXhlZCB2YWx1ZSBvZiBVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQgdG8gY29udGFpbiBmdWxsIGNvbW1hbmQKKwlsaW5lLiBNSUIgZGVzY3JpcHRpb24gb2YgVUNELVNOTVAtTUlCOjpleHRDb21tYW5kIHN1Z2dlc3RzIGl0CisJc2hvdWxkIGNvbnRhaWwgZnVsbCBjb21tYW5kIGxpbmUuIEFsc28gaW4gTmV0LVNOTVAgNS4zLjIuMiwgd2hvbGUKKwljb21tYW5kIGxpbmUgd2FzIHNob3duLgorICAgICAgLSBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBOVUwgY2hhcmFjdGVycyBpbiB0aGUgaW5kaWNlcyBmb3IKKwlzbm1wVGFyZ2V0QWRkclRhYmxlCisgICAgICAtIFBBVENIIDI0NzI6IGZyb20gU3VuaWw6IGRvbid0IHVzZSBIQktUIGFzIGhlYXJ0YmVhdCBpbnRlcnZhbCBpbgorCVNDVFAtTUlCOjpzY3RwQXNzb2NUYWJsZS4KKyAgICAgIC0gUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzCisgICAgICAtIFNob3cgTGludXgga2VybmVsIHRocmVhZHMgaW4gaHJTV1J1blRhYmxlLgorICAgICAgLSBVc2UgMCBmb3IgdGhlIGlnbm9yZWQgbnVtdmFycyBhcmd1bWVudCB0byBuZXRzbm1wX3JlZ2lzdGVyX21pYiBUaGUKKwludW12YXJzIGFyZ3VtZW50IG9mIG5ldHNubXBfcmVnaXN0ZXJfbWliIGlzIGlnbm9yZWQgaWYgdGhlIHZhcgorCWFyZ3VtZW50IGlzIE5VTEwuIEluIG9yZGVyIHRvIHVuaWZ5IHRoaXMgdXNlIG9mIGl0IHdpdGggYWxsIG90aGVyCisJb25lcywgY2hhbmdlIGl0IGZyb20gMSB0byAwCisgICAgICAtIFNFQ1VSSVRZOiBhIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFjayB2ZWN0b3Igd2FzIGRpc2NvdmVyZWQgb24KKyAgICAgICAgdGhlIGxpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBJQ01QLU1JQi4gIFRoaXMgcmVsZWFzZSBmaXhlcworICAgICAgICB0aGlzIGJ1ZyBhbmQgYWxsIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVwZGF0ZSB0aGVpciBTTk1QCisgICAgICAgIGFnZW50IGlmIHRoZXkgbWFrZSB1c2Ugb2YgdGhlIElDTVAtTUlCIHRhYmxlIG9iamVjdHMuCisgICAgICAtIFBBVENIOiAxMjc1OiBmcm9tIFZpbGlhbSBQw7rEjWlrOiBmaXhlZCBQZXJsIHRyYXAgaGFuZGxlciB3aGVuCisJcHJvY2Vzc2luZyB0cmFwIHdpdGggZW1wdHkgY29tbXVuaXR5IHN0cmluZy4KIAotICAgICAgLSBBZGQgbmV3bHkgY3JlYXRlZC9kZXN0cm95ZWQgaW50ZXJmYWNlcyB0byBpcHY2SWZUYWJsZQotICAgICAgLSBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZCBzaHV0ZG93bl9hZ2VudCgpIGR1cmluZyBzaHV0ZG93bgotICAgICAgLSBEb24ndCBkZXJlZ2lzdGVyIGNsb3NlZCBzZXNzaW9ucwotICAgICAgLSBEb24ndCBzZWNvbmQtZ3Vlc3MgY2FjaGUgaGFuZGxlcgotICAgICAgLSBGaXggY2xlYW5fc3VidHJlZSgpIG1lbW9yeSBoYW5kbGluZwotICAgICAgLSBGaXhlZCBhIGRvdWJsZSBmcmVlLCB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgZW1iZWRkZWQgUGVybCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgIC0gRml4ZWQgYWRkaW5nIG5ldyBhZGRyZXNzZXMgdG8gaXBBZGRyZXNzVGFibGUKLSAgICAgIC0gRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4ge0lQLFRDUH0tTUlCCi0gICAgICAtIEZpeGVkIElQLU1JQjo6aXBJZlN0YXRzUmVhc21SZXFkcyB2YWx1ZQotICAgICAgLSBGaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHBhcnNpbmcgT0lEcyBpbiBjb25maWcgZmlsZXMKLSAgICAgIC0gRml4ZWQgcmFjZSBjb25kaXRpb25zIGluIGhyU1dSdW5UYWJsZSBhbmQgVUNEIHByVGFibGUKLSAgICAgIC0gRml4ZWQgYWdlbnQgYm9ndXMgNjQtYml0IHdyYXAgd2FybmluZyAoaXBTeXN0ZW1TdGF0cykKLSAgICAgIC0gRml4IGVuZ2luZWlkIGdlbmVyYXRpb24gb24gb3V0Z29pbmcgdjMgdHJhcHMgZnJvbSB0aGUgYWdlbnQKLSAgICAgIC0gRml4IFZBQ00gcGVyc2lzdGFudCBzdG9yYWdlLgotICAgICAgLSBPcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMKLSAgICAgIC0gVXNlIGNhY2hlLXVuaXF1ZSBpZCBpbnN0ZWFkIG9mIGhhbmRsZXIgbmFtZSBmb3Igc2hhcmVkIGNhY2hlIHJlbG9hZCBwcm90ZWN0aW9uCi0gICAgICAtIFZhcmlvdXMgTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KLQotICAgIHNubXB0cmFuc2xhdGU6Ci0gICAgICAtIEZpeGVkIHByaW50aW5nIG9mIHJhbmdlcyB3aXRoIFVOU0lHTkVEIHR5cGUKKyAgICBzbm1wZCwgc25tcHRyYXBkIGFuZCBhcHBzOgorICAgICAgLSBNYWtlIEVOVl9TRVBBUkFUT1JfQ0hBUiBjb25maWd1cmFibGUKIAogICAgIHNubXB0cmFwZDoKLSAgICAgIC0gW0JVRyAzMTUxMjU0XTogRml4IGNyYXNoIHdpdGggaW52YWxpZCB0cmFwaGFuZGxlIGRpcmVjdGl2ZQotICAgICAgLSBGaXhlZCBhIGRvdWJsZSBmcmVlLCB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgZW1iZWRkZWQgUGVybCBkYXRhIHN0cnVjdHVyZS4KIAotICAgIHNubXB1c206Ci0gICAgICAtIENvcnJlY3QgaWZkZWZzLCByZW1vdmUgZGVhZCB2YXJpYWJsZXMKKyAgICBhcHBzOgorICAgICAgLSBTdG9wIGFnZW50eHRyYXAgZnJvbSBhY2Nlc3NpbmcgdGhlIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiBUaGlzIGlzCisJbmVlZGVkIHRvIHByZXZlbnQgbW9hbmluZyBhYm91dCBub3QgYmVlaW5nIGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UKKwlmaWxlcyBkdWUgdG8gYmFkIHBlcm1pc3Npb25zLgorICAgICAgLSBTdG9wIHVzaW5nIHNubXBfcGVycm9yIHdoZW4gbG9nZ2luZyBhZnRlciBmdW5jdGlvbnMgdGhhdCBkb24ndCBzZXQKKwlzbm1wX2Vycm5vLgorCisgICAgYnVpbGRpbmc6CisgICAgICAtIE1ha2UgdGhlIC13aXRob3V0IG9wdGlvbnMgdG8gcnBtYnVpbGQgd29yaworICAgICAgLSBBdm9pZCBkdXBsaWNhdGUgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgZGVwZW5kZW5jeSBmaWxlcy4KKworICAgIGRvY3VtZW50YXRpb246CisgICAgICAtIEZyb20gIkVyaWMgUy4gUmF5bW9uZCI6IENvcnJlY3QgbWFuIHBhZ2UgbWFya3VwIHByb2JsZW0gQW1iaWd1b3VzCisJb3IgaW52YWxpZCBiYWNrc2xhc2guICBUaGlzIGRvZXNuJ3QgY2F1c2UgZ3JvZmYgYSBwcm9ibGVtLiBidXQgaXQKKwljb25mdXNlcyBkb2NsaWZ0ZXIgYW5kIG1heSBjb25mdXNlIG9sZGVyIHRyb2ZmIGltcGxlbWVudGF0aW9ucy4KKworICAgIHBlcmw6CisgICAgICAtIEJVRzogMjQwMjogQWRkIHN1cHBvcnQgZm9yIFNOTVB2MyB0cmFwcworCisgICAgcHl0aG9uOgorICAgICAgLSBGaXhlZCBJUEFERFJFU1Mgc2l6ZSBvbiA2NGJpdCBzeXN0ZW1zLgorICAgICAgLSBGaXhlZCByZXR1cm5pbmcgb2YgZW1wdHkgc3RyaW5ncy4gVmFyYmluZCB0eXBlIChTTk1QX05PU1VDSE9CSkVDVAorCWV0Yy4pIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBlcnJvcnMgaW5zdGVhZCBvZiBsZW5ndGggb2YgdGhlCisJdmFyaWFibGUgLSBpdCBjYW4gYmUgZW1wdHkgc3RyaW5nLgorICAgICAgLSBbUEFUQ0ggMTIzOV06IEZpeCBtZW1vcnkgbGVhaworCisgICAgdGVzdGluZzoKKyAgICAgIC0gTWFrZSBzdXJlIFRlc3Q6Okhhcm5lc3MgaXMgb2YgYXQgbGVhc3QgdmVyc2lvbiAxLjIxIFRlc3Q6Okhhcm5lc3MKKwkxLjIxIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRoYXQgaW1wbGVtZW50cyBUQVAgdjEyIHdoaWNoIGFsbG93cworCXB1dHRpbmcgdGhlIGhlYWRlciAoMS4uTikgYWZ0ZXIgdGhlIHRlc3RzIGFuZCBzaW5jZSBvdXIgdGVzdHMKKwl1dGlsaXplIHRoYXQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IHJ1bm5lciBzdXBwb3J0cyBpdC4KKworICAgIEFJWDoKKyAgICAgIC0gTWFrZSB0Y3AtbWliIGJ1aWxkCisgICAgICAtIE1ha2UgdWRwLW1pYiBidWlsZAorCisgICAgTGludXg6CisgICAgICAtIEJVRzogMjIzODogQWRkIGxpYm5sMyBzdXBwb3J0CisgICAgICAtIFJFU09VUkNFUy1NSUIsIGhyU1dSdW4gdGFibGU6IFBhcnNlIC9wcm9jLzxwaWQ+L3N0YXQgY29ycmVjdGx5IG9uCisJTGludXggVGhpcyBpc3N1ZSB3YXMgcmVwb3J0ZWQgYnkgVmluY2VudCBCZXJuYXQKKwk8dmluY2VudC5iZXJuYXRAZGFpbHltb3Rpb24uY29tPi4gU2VlIGFsc28KKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjU3Ly4KKworICAgIFdpbjMyOgorICAgICAgLSBQZXJsOiBCVUc6IDI0ODg6IEF2b2lkICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9yCisgICAgICAtIFBlcmw6IEJVRzogMjQ4ODogQXZvaWQgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3IiIFRoaXMgcmV2ZXJ0cworCWNvbW1pdCBiMjcyNTk2NGJkZTkyMWI2Mjg1ZTNhNTlhNTEyNTUyY2FlMGEwY2E1LgorCisgICAgV2luZG93czoKKyAgICAgIC0gQWRkIG11bHRpaG9taW5nIHN1cHBvcnQgT24gV2luZG93cyBWaXN0YSAvIFdpbmRvd3MgU2VydmVyIDIwMDggYW5kCisJbGF0ZXIgaXQgaXMgcG9zc2libGUgdG8gYWRkIG11bHRpaG9taW5nIHN1cHBvcnQgYnkgdXNpbmcgdGhlCisJSVBfUEtUSU5GTyBzb2NrZXQgb3B0aW9uLiBDb25mbGljdHM6CisJc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMKKyAgICAgIC0gTWFrZSB3aW5FeHRETEwgd29yayBvbiA2NC1iaXQgV2luZG93cyBzeXN0ZW1zCisgICAgICAtIFBvcnQgYmF0Y2ggYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgdG8gVmlzdWFsIFN0dWRpbyAyMDEwIGFuZCBsYXRlcgorCUZyb20gVmlzdWFsIFN0dWRpbyAyMDEwIG9uIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBzcGVjaWZ5CisJaW5jbHVkZSBvciBsaWJyYXJ5IGRpcmVjdG9yaWVzIGdsb2JhbGx5IC0gdGhlc2UgaGF2ZSB0byBiZQorCXNwZWNpZmllZCBwZXIgcHJvamVjdC4gSGVuY2UgdHdvIGFkZGl0aW9uYWwgbWVudSBlbnRyaWVzIGluCisJYnVpbGQuYmF0IHRoYXQgYWxsb3cgdG8gc3BlY2lmeSB0aGVzZSBkaXJlY3Rvcmllcy4KKyAgICAgIC0gUG9ydGVkIHVjZC1zbm1wL2RsbW9kIHRvIE1pbkdXIC8gTVNWQworCisgICAgTWluR1c6CisgICAgICAtIFBvcnQgVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMgdG8gTWluR1cKKworICAgIHVuc3BlY2lmaWVkOgorICAgICAgLSBBZGRlZCBzaW1mcyAoT3BlblZaIGZpbGVzeXN0ZW0pIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUuCisgICAgICAtIFVwcG9ydCBuZXcgTUlCIHN0cnVjdHVyZXMgYW5kIE1GRCByZXdyaXRlcyB1bmRlciBEYXJ3aW4KKyAgICAgIC0gW0JVRyAyNDcwXTogQWNjZXB0IDY1NTM1IGFzIGEgdmFsaWQgSVB2NiBwb3J0IG51bWJlcgorICAgICAgLSBbQlVHIDI0NzZdOiBzbm1wZCBmYWlscyB0byBzdGFydCBvbiBBSVggT24gYW4gQUlYIHN5c3RlbSB0aGVyZSBpcworCW5vIDxrdm0uaD4gaGVhZGVyIGZpbGUgbm9yIGRvIHRoZSAvZGV2L2RtZW0gb3IgL2Rldi9kcnVtIGRldmljZXMKKwlleGlzdCBhbmQgaGVuY2UgRE1FTV9MT0MgaXMgbm90IGRlZmluZWQuIEF2b2lkIHRoYXQgaW5pdF9rbWVtKCkKKwlmYWlscyBpbiB0aGF0IGNhc2UuCisgICAgICAtIFtCVUcgMjU2OF06IEF2b2lkIHRoYXQgZmlsZSBkZXNjcmlwdG9ycyBhYm92ZSBGRF9TRVRTSVpFIHRyaWdnZXIKKwlhYm9ydCgpCisKKyo1LjcuMioKKworICAgIHNubXBsaWI6CisgICAgICAtIEFkZCBEb3h5Z2VuLXN0eWxlIGZ1bmN0aW9uIGhlYWRlciBmb3IKKwluZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCkgYW5kCisJbmV0c25tcF9jbGVhcl9kZWZhdWx0X3RhcmdldCgpLgorICAgICAgLSBBZGQgbmV0c25tcF9zZXRlbnYoKS4KKyAgICAgIC0gQXZvaWQgdGhhdCBzeXN0ZW0gY2xvY2sgY2hhbmdlcyAoZS5nLiBieSBudHBkKSBhZmZlY3QgY29kZSB0aGF0CisJbmVlZHMgcmVsYXRpdmUgdGltZSBNYWtlIHN1cmUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIFNOTVB2MyB2YXJpYWJsZQorCXNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YKKwkwLi40Mjk0OTY3MiBvbiBzb21lIHN5c3RlbXMgKGkuZS4gd3JhcGFyb3VuZCBhZnRlciA0OTcgZGF5cykgQWRkCisJbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCksIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoKSwKKwluZXRzbm1wX3JlYWR5X21vbm90b25pYygpLCBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkKKyAgICAgIC0gQXZvaWQgdGhhdCBzeXN0ZW0gY2xvY2sgY2hhbmdlcyAoZS5nLiBieSBudHBkKSBhZmZlY3QgY29kZSB0aGF0CisJbmVlZHMgcmVsYXRpdmUgdGltZSBNYWtlIHN1cmUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIFNOTVB2MyB2YXJpYWJsZQorCXNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YKKwkwLi40Mjk0OTY3MiBvbiBzb21lIHN5c3RlbXMgKGkuZS4gd3JhcGFyb3VuZCBhZnRlciA0OTcgZGF5cykgQWRkCisJbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCksIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoKSwKKwluZXRzbm1wX3JlYWR5X21vbm90b25pYygpLCBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkgRGVwcmVjYXRlCisJYXRpbWVfZGlmZigpLCBhdGltZV9uZXdNYXJrZXIoKSwgYXRpbWVfcmVhZHkoKSwgYXRpbWVfc2V0TWFya2VyKCksCisJbWFya2VyX3R0aWNrcygpLCBuZXRzbm1wX21hcmtlcl91cHRpbWUoKSwgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpLAorCXRpbWV2YWxfdHRpY2tzKCksIHVhdGltZV9kaWZmKCksIHVhdGltZV9oZGlmZigpIGFuZCB1YXRpbWVfcmVhZHkoKS4KKyAgICAgIC0gQXZvaWQgd2FpdGluZyBpbmRlZmluaXRlbHkgaWYgYSBzZXNzaW9uIGhhcyB0aW1lb3V0IHplcm8KKyAgICAgIC0gRGVjbGFyZSAidHlwZSIgYXJndW1lbnQgb2Ygc2Vfc3RvcmVfbGlzdCgpIC8gc2Vfc3RvcmVfc2xpc3QoKSAvCisJc2Vfc3RvcmVfZW51bV9saXN0KCkgY29uc3QKKyAgICAgIC0gTWFrZSBpdCBleHBsaWNpdCB0aGF0IE1BWF9TVUJJRCBpcyBhbiB1bnNpZ25lZCBjb25zdGFudAorICAgICAgLSBNYWtlIG5ldHNubXBfY2FsbGJhY2tfYWNjZXB0KCkgcmV0dXJuIC0xIChmYWlsdXJlKSBpbnN0ZWFkIG9mIDAKKwkoU1RESU5fRklMRU5PKQorICAgICAgLSBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHJvYnVzdCBhZ2FpbnN0IG1lbW9yeSBhbGxvY2F0aW9uCisJZmFpbHVyZXMuIE1ha2UgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCkgdXNlIG1lbXNldCgpIG9uIFVuaXggc3lzdGVtcworCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcC4KKyAgICAgIC0gTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSByb2J1c3QgYWdhaW5zdCBtZW1vcnkgYWxsb2NhdGlvbgorCWZhaWx1cmVzLiBNYWtlIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygpIHVzZSBtZW1zZXQoKSBvbiBVbml4IHN5c3RlbXMKKwlpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IGxvb3AuIE1ha2Ugc3VyZSB0aGF0IG9uIFVuaXggc3lzdGVtcworCW5ldHNubXBfbGFyZ2VfZmRfY2xyKCkgZG9lc24ndCB0cnkgdG8gcmVhZCBtZW1vcnkgaXQgaXNuJ3QgYWxsb3dlZAorCXRvIHJlYWQgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGVxdWFscyAtMSAoYSB2YWx1ZSB0aGF0IHNob3VsZG4ndCBiZQorCXBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICAgIC0gTWVyZ2UgdG9nZXRoZXIgdGhlIExpbnV4IGFuZCAqQlNEIHZlcnNpb24gb2Ygc3JjIHBvcnQgc2VuZGluZy4KKyAgICAgIC0gT25seSB0cmFuc2Zvcm0gdGhlIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGZvcm0gd2hlbiBuZWVkZWQuCisgICAgICAtIFBBVENIIDM1MTA0NTQ6IEFsbG93IHRoZSB1c2Ugb2YgMC4wLjAuMC8wIGFzIGFsaWFzIGZvciBkZWZhdWx0CisgICAgICAtIFByZXZlbnQgZ2NjIHBlZC13YXJuaW5nIGZvciBORVRTTk1QX1JFTU9WRV9DT05TVCBnaXQtc3ZuLWlkOgorCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDEKKwk4MDUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorICAgICAgLSBSZWR1Y2Ugb3ZlcmhlYWQgb2YgY29uZmlnIGZpbGUgcGFyc2luZworICAgICAgLSBSZW1vdmUgb2Jzb2xldGUgc25tcF9nZXRfZmRfZm9yX3Nlc3Npb24oKSBkZWNsYXJhdGlvbgorICAgICAgLSBTZXBhcmF0ZSBvdXQgdGhlIGNtZXNnIGJ1ZmZlciBzaXplCisgICAgICAtIFNldCB0aGUgcnBhdGggZm9yIGxpYnBlcmwuc28gaW4gbGlibmV0c25tcG1pYnMuc28gc3VjaCB0aGF0IHRoZQorCWR5bmFtaWMgbGlua2VyIGNhbiBmaW5kIGxpYnBlcmwuc28gd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZXIgdG8KKwltb2RpZnkgdGhlIGR5bmFtaWMgbGlua2VyIHNldHRpbmdzLiBUaGlzIGNoYW5nZSBpbgorCWFnZW50L01ha2VmaWxlLmluIGlzIG5lY2Vzc2FyeSBvbiB0aGUgNS41IGJyYW5jaCBhbmQgbGF0ZXIgYnV0IG5vdAorCW9uIHRoZSA1LjQgYnJhbmNoLiBUaGF0IGlzIGJlY2F1c2UgdGhlIDUuNCBicmFuY2ggdXNlcyBhbiBvbGRlcgorCXZlcnNpb24gb2YgbGlidG9vbCB0aGF0IHByb3BhZ2F0ZXMgdGhlIHJwYXRoIG9mIGRlcGVuZGVudAorCWxpYnJhcmllcy4gVGhpcyBpcyBjYWxsZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmN5IHRyYWNraW5nIGluIHRoZQorCWxpYnRvb2wgbWFudWFsLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCBpbiBsaWJ0b29sIHZlcnNpb24gMQorCWJ1dCBub3QgaW4gbGlidG9vbCB2ZXJzaW9uIDIuIEZvciBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24gYWJvdXQKKwlkeW5hbWljIGxpYnJhcmllcyBhbmQgcnBhdGhzLCBzZWUgYWxzbyB0aGUgZG9jdW1lbnQgd2l0aCB0aGUgdGl0bGUKKwkiUnBhdGhJc3N1ZSIgb24gdGhlIERlYmlhbiB3aWtpCisJKGh0dHA6Ly93aWtpLmRlYmlhbi5vcmcvUnBhdGhJc3N1ZSkuCisgICAgICAtIFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgNjQtYml0IG51bWJlcnMuCisgICAgICAtIFNpbXBsaWZ5IHRoZSBzZV9zdG9yZV9lbnVtX2xpc3QoKSBpbXBsZW1lbnRhdGlvbgorICAgICAgLSBVc2UgU05NUF9BTExPQ19UWVBFREVGIHRvIGFsbG9jYXRlIHRyYW5zcG9ydHMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlCisJc2VwYXJhdGUgY2FsbCB0byBtZW1zZXQuCisgICAgICAtIFtQQVRDSCAzNDE0NzczXTogRW5jb2RlIGludGVnZXIgdmFsdWUgdXNpbmcgQVNOX0lOVEVHRVIKKyAgICAgIC0gW1BBVENIIDM1MjY1OTldOiBEb24ndCBoYW5nIG9uIHJldHJpZWQgZmFpbGluZyBTTk1QdjMgcmVzcG9uc2VzCisgICAgICAtIFBBVENIIDM1NjA0NzM6IGZyb20gZmVubmVyOiBIYW5kbGUgVGltZVRpY2tzIHdoZW4gcHJldHR5LXByaW50aW5nCisJT0lEICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgICAtIEFkZCB0aGUgc3ltYm9sIE5FVFNOTVBfUFJJbyB0byBoZWxwIGluIHByaW50aW5nIG9pZCB2YWx1ZXMuCisgICAgICAtIERvIG5vdCBjcmFzaCBmcm9tIGVtcHR5IHZhbHVlcyBpbiAtLXRva2VuPXZhbHVlIGFyZ3VtZW50cworICAgICAgLSBEbyBub3QgY3Jhc2ggb24gaW5jb21wbGV0ZSBjb25maWd1cmF0aW9uIHRva2Vucy4KKyAgICAgIC0gRG8gbm90IHRydW5jYXRlIHNpbmdsZSBkZWZhdWx0IHRyYW5zcG9ydCBkb21haW5zCisgICAgICAtIE1vdmUgdGhlIGNoZWNrIHRoYXQgdGhlIHBkdSB2YXJpYWJsZSBpcyBub24tTlVMTCB0byBiZWZvcmUgdGhlCisJZmlyc3QgZGVyZWZlcmVuY2Ugb2YgaXQuCisKKyAgICBzbm1wbGliICsgc25tcGQgKyBzbm1wd2FsazoKKyAgICAgIC0gQXZvaWQgdGhhdCBzeXN0ZW0gY2xvY2sgY2hhbmdlcyAoZS5nLiBieSBudHBkKSBhZmZlY3QgY29kZSB0aGF0CisJbmVlZHMgcmVsYXRpdmUgdGltZQorCisgICAgc25tcGxpYiwgc25tcGQsIHBlcmw6CisgICAgICAtIEVsaW1pbmF0ZSBkZWFkIHZhcmlhYmxlcyBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMKKwlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCisJYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjYworCWVzcy5jIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYworCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jCisJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMKKwlhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYworCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYworCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MKKwkuYyBhcHBzL3NubXB0bHMuYyBhcHBzL3NubXB0cmFwZF9sb2cuYyBzbm1wbGliL2Rpcl91dGlscy5jCisJc25tcGxpYi9zbm1wX2NsaWVudC5jIHNubXBsaWIvc25tcF9vcGVuc3NsLmMKKwlzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jCisgICAgICAtIEJVRzogMzUxNzAzMDogRW5zdXJlIGxhcmdlIHRhYmxlcyBhcmUgd2Fsa2VkIHByb3Blcmx5CisgICAgICAtIEJVRzogMzU0MTAxMjogRml4IGhhbmRsaW5nIG9mIGdldHRhYmxlIGNvbHVtbnMKKyAgICAgIC0gW1BBVENIIDM1Mjk1NDFdOiBEb24ndCByZWZlciB0byBpbnRlcm5hbCAnbXknIHZhcmlhYmxlcyBmcm9tCisJZXh0ZXJuYWwgc2NyaXB0cyBGaXggcHJvdmlkZWQgYnkgTGV6eiBHaWxlcworCisgICAgc25tcDoKKyAgICAgIC0gQnJpZGdlLW1pYjogRml4IGluZGV4IGludGVycHJldGF0aW9uLiBUaGlzIHBhdGNoIGNvcnJlY3RzIGEgd3JvbmcKKwlkYXRhIGludGVycHJldGF0aW9uLiBzbm1wLWJyaWRnZS1taWIgb2J0YWlucyB0aGUgaWZpbmRleCB2YWx1ZSBmcm9tCisJdGhlIHN5c2ZzIGF0dHJpYnV0ZSAnaWZpbmRleCcgVGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBzeXNmcworCWF0dHJpYnV0ZSBpcyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBoYW5kbGVkIGFzIGhleCBhbmQgbGVhZHMgdG8KKwlpbmNvcnJlY3QgZGF0YSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIGUuZy4gJCA+IHNubXB3YWxrIGxvY2FsaG9zdAorCUJSSURHRS1NSUI6OmRvdDFkQmFzZVBvcnRJZkluZGV4LjIKKwlCUklER0UtTUlCOjpkb3QxZEJhc2VQb3J0SWZJbmRleC4yID0gSU5URUdFUjogNTQgYWNjb3JkaW5nIHRvIHRoZQorCXN5c2ZzIGF0dHJpYnV0ZSB0aGUgdmFsdWUgaXMgMzYgJCA+IGNhdAorCS9zeXMvY2xhc3MvbmV0LzxkZXZpY2U+L2lmaW5kZXggMzYgU2lnbmVkLW9mZi1ieTogTWlqbyBTYWZyYWRpbgorCTxzYWZyYWRpbkBsaW51eC52bmV0LmlibS5jb20+CisKKyAgICBzbm1wZDoKKyAgICAgIC0gTG93ZXJlZCBzZXZlcml0eSBvZiAnRXJyb3IgZXhwYW5kaW5nIFhYWCB0byA2NGJpdHMnIG1lc3NhZ2VzLgorICAgICAgLSBSZW1vdmVkIGVycm9yIGxvZyBtZXNzYWdlcyB3aGVuIElQdjYgaXMgZGlzYWJsZWQuCisgICAgICAtIEFkZCBtaXNzaW5nIGRlYnVnIHRhZworICAgICAgLSBBZGQgbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKCkKKyAgICAgIC0gQXZvaWQgdGhhdCBzeXN0ZW0gY2xvY2sgY2hhbmdlcyAoZS5nLiBieSBudHBkKSBhZmZlY3QgY29kZSB0aGF0CisJbmVlZHMgcmVsYXRpdmUgdGltZSBNYWtlIHN1cmUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIFNOTVB2MyB2YXJpYWJsZQorCXNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YKKwkwLi40Mjk0OTY3MiBvbiBzb21lIHN5c3RlbXMgKGkuZS4gd3JhcGFyb3VuZCBhZnRlciA0OTcgZGF5cykKKyAgICAgIC0gQlVHIDM1NDIxODg6IENvcnJlY3Qgc3lzT1JEZXNjciBmb3Igc25tcFVzbU1JQi4gVGhhbmtzIHRvIERhdmUKKwlWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorICAgICAgLSBCVUcgMzU0MjMwNzogQ29ycmVjdCBzeXNPUklEIGZvciBzbm1wTVBEU3RhdHMuIFRoYW5rcyB0byBEYXZlCisJVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKyAgICAgIC0gQlVHOiAzNDM5MjM0OiBDb3JyZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdWNkLXNubXAvcGFzcyBhbmQKKwl1Y2Qtc25tcC9wYXNzX3BlcnNpc3QKKyAgICAgIC0gQlVHOiAzNDM5MjM0OiBNb3ZlIG5ldHNubXBfcGFzc19zdHJfdG9fZXJybm8gdG8gcGFzc19jb21tb24gYW5kCisJcmVuYW1lIGl0IHRvIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8KKyAgICAgIC0gQlVHOiAzNDYzNzY3OiBIYW5kbGUgcGFyc2luZyBzdWJpZGVudGlmaWVycyA+IDJeMzEKKyAgICAgIC0gQlVHOiAzNTMyMDkwOiBGaXggaGlnaCBpZkluZGV4IHZhbHVlcyBjcmFzaGluZyBockRldmljZURlc2NyCisgICAgICAtIENhbGwgc25tcF9vaWR0cmVlX2NvbXBhcmUgaW5zdGVhZCBvZiBzbm1wX29pZF9taW5fY29tcGFyZQorICAgICAgLSBESVNNQU4tUElORy1NSUI6IEF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIChiYXNlZCBvbiBwYXRjaCAzNTAzMjU5KQorICAgICAgLSBESVNNQU4tUElORy1NSUI6IEF2b2lkIHJlYWRpbmcgZnJlZWQgbWVtb3J5IHdoZW4gZGVsZXRpbmcgYSByb3cKKwlmcm9tIGEgdGFibGUKKyAgICAgIC0gRElTTUFOLVBJTkctTUlCOiBEbyBub3Qgc2VuZCB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrIG92ZXIgdGhlCisJbmV0d29yaworICAgICAgLSBESVNNQU4tUElORy1NSUI6IERvbid0IGNhbGwgZXhpdCgpIHVwb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICAgICAgLSBESVNNQU4tUElORy1NSUI6IEZpeCBJUHY2IHNvY2tldCBsZWFrIGluIGVycm9yIHBhdGhzCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogRml4IGEgc29ja2V0IGxlYWsgdHJpZ2dlcmVkIGJ5IHBpbmdpbmcgYSByZW1vdGUKKwlob3N0CisgICAgICAtIERJU01BTi1QSU5HLU1JQjogRml4IG1vcmUgbWVtb3J5IGxlYWtzCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogRml4IHNldmVyYWwgbWVtb3J5IGxlYWtzCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5nIGltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50IG9mIG50cGQgY2xvY2sKKwlqdW1wcworICAgICAgLSBESVNNQU4tUElORy1NSUI6IE1ha2UgcGluZ2luZyBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzc2VzIHdvcmsKKyAgICAgIC0gRElTTUFOLVNDSEVEVUxFUi1NSUI6IEhhbmRsZSAzMi1jaGFyYWN0ZXIgc2NoZWRDb250ZXh0TmFtZSB2YWx1ZXMKKwljb3JyZWN0bHkuIFNlZSBhbHNvIGNvbW1pdAorCWIzYzQ5ODI1NDJlMGFiMTUxZmIzODg0NzU0Y2RmYmNiNDcyZGE1MmQuCisgICAgICAtIERpc2FibGUgdGhlIHN1cHBvcnQgZm9yIGludGVnZXI2NCBpbiBwYXNzIHNjcmlwdHMgaWYgY29tcGlsaW5nCisJd2l0aG91dCBvcGFxdWUtc3BlY2lhbC10eXBlcy4KKyAgICAgIC0gRmFjdG9yIG91dCBhc2MyYmluIGFuZCBiaW4yYXNjLiBBZGQgYSBuZXRzbm1wX2ludGVybmFsXyBwcmVmaXggdG8KKwl0aGVtCisgICAgICAtIEZpeGVkIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgYWZ0ZXIgMzAgZGF5cyBvZiB1cHRpbWUuIEFmdGVyIDMwCisJZGF5cywgdmFsdWVzIGZyb20gL3Byb2Mvc3RhdCAob24gTGludXgpIGNhbiBnZXQgYmlnZ2VyIHRoYW4gMzJiaXRzCisJYW5kIHNubXBkIGNhbGN1bGF0aW9ucyBtaWdodCByZW5kZXIgY291bnRlcnMgbGlrZSBzc0NwdVVzZXIKKwluZWdhdGl2ZSBvciB6ZXJvLCB3aGlsZSB0aGUgcmVhbCB2YWx1ZSBpcyBoaWdoZXIuIFRoZXJlZm9yZSB0aGUKKwljb3VudGVycyBzaG91bGQgYmUgdHJhY2tlZCBhcyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIGF2YWlsYWJsZS4KKyAgICAgIC0gRml4ZWQgc25tcGQgJy1kJyBvcHRpb24uIE5vdyBpdCBkdW1wcyBwYWNrZXRzIGFnYWluLgorICAgICAgLSBJRi1NSUI6OmlmVHlwZTogUmVwb3J0IHR5cGUgImluZmluaWJhbmQgKDE5OSkiIGZvciBJbmZpbmlCYW5kCisJaW50ZXJmYWNlcyBpbnN0ZWFkIG9mIHR5cGUgIm90aGVyICgxKSIuCisgICAgICAtIEluaXRfYWdlbnQoKSArIGluaXRfa21lbSgpOiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgaW5zdGVhZCBvZgorCWludm9raW5nIGV4aXQoKSBpZiBhY2Nlc3MgdG8ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGlzIGRlbmllZAorICAgICAgLSBNYWtlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkbG1vZCBtb2R1bGUgZmFpbCByYXRoZXIgdGhhbgorCWdlbmVyYXRlIGEgZHVtbXkgbW9kdWxlIGlmIHRoZSBkbG9wZW4gZnVuY3Rpb24gaXNuJ3QgYXZhaWxhYmxlLgorICAgICAgLSBNYXRjaCBlYWNoIGdldHB3bmFtKCkvZ2V0cHd1aWQoKSBjYWxsIHdpdGggYW4gZW5kcHdlbnQoKSBjYWxsIGFuZAorCWVhY2ggZ2V0Z3JlbnQoKSBjYWxsIHdpdGggYW4gZW5kZ3JlbnQoKSBjYWxsLgorICAgICAgLSBQQVRDSCAzNDAyMzc2OiBmcm9tIExlb25hcmRvIENoaXF1aXR0bzogUmVjb2duaXNlIFJlaXNlckZTIEFsc28KKwltb3ZlIHZhcmlvdXMgRlNUeXBlIGRlZmluaXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBibG9ja3MKKyAgICAgIC0gUEFUQ0ggMzQ1Mzg2ODogZnJvbSAiQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+IjogRmFjdG9yIGNvbW1vbgorCWNvZGUgaW50byBwYXNzX2NvbW1vbiBNb3ZlIHRoZSBjb2RlIGZvciBwb3JtYXR0aW5nIGFuZCBwcmludGluZworCXZhbHVlcyBmcm9tIHBhc3MgYW5kIHBhc3NfcGVyc2lzdCBpbnRvIHBhc3NfY29tbW9uLgorICAgICAgLSBQQVRDSDogMzQ4Nzg2NzogRG9uJ3Qgc2tpcCBtaXNzaW5nIGlmWFRhYmxlIGVudHJpZXMKKwkoaWZDb25uZWN0b3JQcmVzZW50IEZBTFNFKQorICAgICAgLSBQYXNzX3BlcnNpc3Q6ICBGaXhlcyBhIHJhY2UgY29uZGl0aW9uIGludHJvZHVjZWQgaW4gY29tbWl0CisJMzFmYTA3Y2Q5ZmZkZTQ2ZDQxZDJiNTgzOGMzZmM0ZDAxNTQ4YmZiNS4gVGhlIGZvbGxvd2luZyByYWNlCisJY29uZGl0aW9uIGNvdWxkIGhhcHBlbjogLSBBIHN5c3RlbSBjYWxsIGZhaWxzIGFuZCBlcnJubyBpcyBzZXQKKwlhY2NvcmRpbmdseSBieSB0aGUgQyBsaWJyYXJ5LiAtIFNJR0NITEQgaGFuZGxlciBpbnZva2VzIGEgc3lzdGVtCisJY2FsbCB0aGF0IGZhaWxzIGFuZCBoZW5jZSBvdmVyd3JpdGVzIGVycm5vLiAtIFNJR0NITEQgaGFuZGxlcgorCWxlYXZlcy4gLSBvcmlnaW5hbCBjb250ZXh0IGNoZWNrcyBlcnJubyBhbmQgZmluZHMgdGhlIHZhbHVlIGZyb20KKwl0aGUgc3lzdGVtIGNhbGwgaW52b2tlZCBieSB0aGUgU0lHQ0hMRCBoYW5kbGVyIGluc3RlYWQgb2YgdGhlCisJc3lzdGVtIGNhbGwgdGhhdCBmYWlsZWQgb3JpZ2luYWxseS4gT3RoZXIgZml4ZXMgaW5jbHVkZWQgaW4gdGhpcworCXBhdGNoOiAtIFJlbmFtZWQgZGVpbml0X3Bhc3NfcGVyc2lzdCgpIGludG8gc2h1dGRvd25fcGFzc19wZXJzaXN0KCkKKwlzdWNoIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBkdXJpbmcgYWdlbnQgc2h1dGRvd24uIC0gTWFkZQorCXN1cmUgdGhhdCBzaHV0ZG93bl9wYXNzX3BlcnNpc3QoKSBpcyBjYWxsZWQgYnkgdGhlIFdpbmRvd3MKKwlzbm1wZC5leGUgdG9vLiAtIFdpbmRvd3M6IGF2b2lkIGNhbGxpbmcKKwlDbG9zZUhhbmRsZShJTlZBTElEX0hBTkRMRV9WQUxVRSkuIC0gV2luZG93czogYXZvaWQgdGhhdCBjbG9zaW5nIGEKKwlwYXNzX3BlcnNpc3QgcGlwZSB0cmlnZ2VycyBhIGNyYXNoLiAtIFdpbmRvd3M6IHBhc3NfcGVyc2lzdDogY2xvc2UKKwloYW5kbGVzIG9mIGZpbmlzaGVkIHByb2Nlc3Nlcy4KKwlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYyB3aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgKKyAgICAgIC0gU211eDogc2ltcGxpZnkgc211eF9saXN0X2RldGFjaCgpCisgICAgICAtIFVEUC1NSUI6IFJlcG9ydCB0aGUgcHJvcGVyIGFkZHJlc3MgaW4gdWRwTG9jYWxBZGRyZXNzIGluc3RlYWQgb2YKKwkwLjAuMC4wLiBNYWtlcyB0ZXN0IFQxNjBzbm1wbmV0c3RhdCBwYXNzIGFnYWluLiBGaXhlcyBhIGJ1ZworCWludHJvZHVjZWQgaW4gY29tbWl0IGM3NmZiOTZmNjVlMzNiYTJmZDIxMmE5MjFlOGMzODYxNTVlZTVjN2EuCisgICAgICAtIFtCVUcgMzQ2MDM2NF06IEZpeCB1c2Ugb2YgYmxvY2sgZmFjdG9yIHdoZW4gZGV0ZWN0aW5nIGVycm9yCisJY29uZGl0aW9ucworICAgICAgLSBbQlVHIDM0ODk2MzFdOiBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIFVDRCBtb25pdG9yaW5nIGZsYWcKKyAgICAgIC0gW1BBVENIIDM0MTAwNTBdOiBTa2lwIGFscmVhZHktJ3Byb2Nlc3NlZCcgdmFyYmluZHMgQmFzZWQgb24gbWliMmMKKwlwYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorICAgICAgLSBbUEFUQ0ggMzQxMDA1OV06IEZpeCBzcGFyc2VseSBhdWdtZW50aW5nIHRyaWdnZXIgdGFibGVzIFBhdGNoCisJcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKyAgICAgIC0gW1BBVENIIDM0NDc0NDRdOiBGaXggU0lHX1BJUEUgaGFuZGxpbmcgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbAorCUZlbm5lcgorICAgICAgLSBbUEFUQ0ggMzQ0NzY3MV06IEZpeCBvdmVycmlkZSBoYW5kbGluZyBvZiBPSUQgdmFsdWVzIFBhdGNoIHN1cHBsaWVkCisJYnkgUGhpbGxpcCBPJ0Rvbm5lbGwKKyAgICAgIC0gW1BBVENIIDM0Nzk3NDBdOiBGaXggaHJTV1J1blBlcmYgc3RhdGlzdGljcworICAgICAgLSBbUEFUQ0ggMzQ4NzkxOV06IEZpeCBjb21waWxhdGlvbiB3aGVuIGNhY2hpbmcgaXMgZGlzYWJsZWQKKyAgICAgIC0gW1BBVENIIDM0OTU2OTddOiBTdG9yZSBwZXJzaXN0ZW50IHNubXBUYXJnZXQgdGFibGUgY2hhbmdlcworICAgICAgLSBCVUcgMzU0MjE4ODogQ29ycmVjdCBzeXNPUkRlc2NyIGZvciBzbm1wVXNtTUlCLiBUaGFua3MgdG8gRGF2ZQorCVZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisgICAgICAtIEJVRyAzNTQyMzA3OiBDb3JyZWN0IHN5c09SSUQgZm9yIHNubXBNUERTdGF0cy4gVGhhbmtzIHRvIERhdmUKKwlWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorICAgICAgLSBCVUc6IDM1NDM4NjQ6IFJlbW92ZSBleHRyYW5lb3VzIGZ1bmN0aW9uIHR5cGUgKGFuZCBmaXggYSByZWxhdGVkCisJdHlwbykKKyAgICAgIC0gUmVtb3ZlZCBsaW1pdCBvZiAnZXhlYycgYW5kICdzaCcgZW50cmllcyBpbiBzbm1wZC5jb25mIFVzZSBkeW5hbWljCisJKHJlKWFsbG9jYXRpb24gaW5zdGVhZC4KKyAgICAgIC0gW1BBVENIIDM1NDMwMDBdOiBWYXJpb3VzIGZpeGVzIHRvIFJtb24gY29kZSBTdXBwbGllZCBieSBQYXRyaWNrCisJUml0dGVyCisKKyAgICBzbm1wZHg6CisgICAgICAtIFtQQVRDSCAzNDQ1NDM3XTogTG9nIEFnZW50WCBkaXNjb25uZWN0aW9ucyAoaW4gbGluZSB3aXRoCisJY29ubmVjdGlvbnMpIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKKyAgICBzbm1wdHJhcGQ6CisgICAgICAtIEF2b2lkIGNyYXNoIGR1cmluZyBzaHV0ZG93biBkdWUgdG8gaW52b2tpbmcgcGVybF9kZXN0cnVjdChOVUxMKQorICAgICAgLSBEbyBub3QgaW52b2tlIHNodXRkb3duX3BlcmwoKSBmcm9tIGluc2lkZSB0aGUgU0lHVEVSTSBoYW5kbGVyIHNpbmNlCisJdGhhdCBmYWlscyBpZiBTSUdURVJNIGlzIHJlY2VpdmVkIHdoaWxlIGEgUGVybCBoYW5kbGVyIGlzIGFjdGl2ZS4KKwlCYXNlZCBvbiBhIHBhdGNoIHBvc3RlZCBieSBKb2VsIEF2bmkgPGphdm5pQGFydWJhbmV0d29ya3MuY29tPgorICAgICAgLSBFbGltaW5hdGUgYW4gdW51c2VkIHZhcmlhYmxlIChOb3cpCisgICAgICAtIE1vdmUgdGhlIG1haW4gbG9vcCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24KKyAgICAgIC0gUmVtb3ZlIHN1cGVyZmx1b3VzIGNhc3RzCisKKyAgICBzbm1wdHJhcGRfc3FsOgorICAgICAgLSBBdm9pZCB0aGF0IGEgbGlua2VyIGVycm9yIGlzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdoZXJlIG15X3Byb2duYW1lCisJaXMgbWlzc2luZyBpbiBsaWJteXNxbGNsaWVudCAoZS5nLiBGZWRvcmEgMTUgYW5kIDE2KS4gVGhpcyBpcyBhCisJYmFja3BvcnQgb2YgY29tbWl0IDlmNjUzZjcuCisKKyAgICBhaXg6CisgICAgICAtIEVsaW1pbmF0ZSBjb25maWd1cmUgd2FybmluZyByZWdhcmRpbmcgbGlicGVyZnN0YXQuaCBvbiBBSVggNi4xIGFuZAorCXVwCisgICAgICAtIFBBVENIIDM0MDM0MzM6IGZyb20gYmxlbnR6OiBJc3N1ZXMgd2l0aCBoclNXUnVuTmFtZSBhbmQgUGFyYW1ldGVycworCW9uIEFJWAkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyCisJPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIGFwcHMsIHNubXBsaWI6CisgICAgICAtIFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbiBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTworCW9mIGFycmF5cyB3aXRoIGEgbWVtc2V0LiBnaXQtc3ZuLWlkOgorCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDEKKwk3Nzk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorICAgICAgLSBCVUc6IDM1Mjk3Njg6IEJlIG1vcmUgY2FyZWZ1bCB3aGVuIHN0cmlwcGluZyBvZmYgbnVtZXJpYyBzdWZmaXhlcwogCiAgICAgYnVpbGQ6Ci0gICAgICAtIFtCVUcgMzEwMjkwNF06IENvbXBpbGUgYWxsIHNvdXJjZSBmaWxlcyB3aXRoIC1mbm8tc3RyaWN0LWFsaWFzaW5nCi0gICAgICAtIERvIG5vdCBjYWxsIFZBQ00gQVBJcyBpZiBWQUNNIG1vZHVsZSBpcyBub3QgaW5jbHVkZWQKLSAgICAgIC0gRml4IGF1dG9jb25mIGRldGVjdGlvbiBvZiBzdHJjYXNlY21wCi0gICAgICAtIEZpeCBidWlsZGluZyBvZiBzdGF0aWMgYXBwbGljYXRpb25zIHVzaW5nIG5ldC1zbm1wLWNvbmZpZyAtKmxpYnMKLSAgICAgIC0gRml4IGRlZmluaXRpb24gb2YgVkVSU0lPTiAobnVtYmVyLCBub3QgZXhwcmVzc2lvbikKKyAgICAgIC0gRG8gbm90IGdlbmVyYXRlIGFuIG91dHB1dCBmaWxlIG9uIGZhaWx1cmUgbWFrZSBzdXBwb3NlcyB0aGF0IG5vCisJb3V0cHV0IGlzIGdlbmVyYXRlZCBpZiB0aGUgY29tbWFuZCBmYWlsZWQuIENoYW5nZSBmZWF0dXJlLXJlbW92ZSB0bworCWZvbGxvdyB0aGF0IHByZXN1bXB0aW9uLgorICAgICAgLSBCVUc6IDM1MzIyMzQ6IEZpeCB0eXBvIGluIGxpYnRvb2wgc2NyaXB0IChhZGRyZXNzZWQgcHJvcGVybHkgaW4KKwlsaWJ0b29sIDIuNC4yKQorCisgICAgYnVpbGRpbmc6CisgICAgICAtIEFkZCBkZXBlbmRlbmNpZXMgb24gQEZFQVRVUkVUQVJHU0AgdG8gbWFrZSB0aGUgc3VidGFyZ2V0IHdvcmsgYXMKKwl3ZWxsLgorICAgICAgLSBBZGQgbWlzc2luZyBlbmQgY29tbWVudHMgdG8gZmVhdHVyZSBpZm5kZWZzLgorICAgICAgLSBBZGQgdGFyZ2V0IHRvIGJ1aWxkIGFnZW50eHRyYXAgZnJvbSB0aGUgdG9wbGV2ZWwKKyAgICAgIC0gQnVpbGQgZml4IGZvciBzeXN0ZW1zIGxhY2tpbmcgZmllbGQgbXNnX2ZsYWdzIGluIHN0cnVjdCBtc2doZHIKKwkoZS5nLiBJUklYKQorICAgICAgLSBCdWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZHMgbXNnX2NvbnRyb2wvbXNnX2ZsYWdzIGluCisJc3RydWN0IG1zZ2hkciAoYmFja3BvcnQpCisgICAgICAtIENvcnJlY3QgZGVwZW5kZW5jaWVzIC0gc2luY2UKKwliZjc0ZmVhNjlmMjRkYzZlODVmOTA4ZjNmNDFkMTQyNmIyZTA5Njg4IHNubXBjb25mIGlzIGxvY2F0ZWQgaW4KKwlidWlsZGRpciwgbm90IHNyY2RpcgorICAgICAgLSBDb3JyZWN0IGRlcGVuZGVuY2llcyAtIHNpbmNlCisJYmY3NGZlYTY5ZjI0ZGM2ZTg1ZjkwOGYzZjQxZDE0MjZiMmUwOTY4OCBzbm1wY29uZiBpcyBsb2NhdGVkIGluCisJYnVpbGRkaXIsIG5vdCBzcmNkaXIiIFRoaXMgcmV2ZXJ0cyBjb21taXQKKwk5ZWZhNDY3YTk3MmJiNmUxYzdmYmRhZjJlMjc0MjlkMjlmNGFiODllLgorICAgICAgLSBNYWtlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb2RlIHdvcmsgYWdhaW4gUHJldmlvdXNseSB0aGUKKwl0cmFuc3BvcnQgaW5oZXJpdGFuY2UgcHJvY2Vzc2luZyBjb2RlIHJhbiB3aXRoCisJTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIHNldC4gSW4gdGhpcyBtb2RlIHRoZSBmaWxlCisJbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggaXMgcmVxdWllcmVkLiBUaGF0IGZpbGUgaXMgY3JlYXRlZAorCWR1cmluZyB0aGUgZmlyc3QgbWFrZSBydW4sIGFuZCB0aGF0IGhhcHBlbnMgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1bi4KKwlDaGFuZ2UgdGhpcyB0byB1bmRlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSwgZWZmZWN0aXZlbHkgdHVybmluZworCW9mZiBmZWF0dXJlIHN1cHBvcnQgZHVyaW5nIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIG1ha2UKKwlpdCB3b3JrIGF0IGFsbC4KKyAgICAgIC0gUnVuIGxpYnRvb2wgLS1tb2RlPWZpbmlzaCBvbiB0aGUgcmlnaHQgZGlyZWN0b3J5CisKKyAgICBsaWJuZXRzbm1wOgorICAgICAgLSBQQVRDSCAzMzk0NTg2OiBmcm9tIHJ3YS1jbzogZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gcmVhZF9jb25maWcKKwkoK2ZpeCkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBsaWJzbm1wOgorICAgICAgLSBDaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpCisJZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbgorCXBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgogCiAgICAgbWFuOgotICAgICAgLSBbQlVHIDMxOTA3MjVdOiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQgc25tcF9hc3luY19zZW5kCi0gICAgICAtIGNsZWFuIHVwIG1hbnVhbCBwYWdlcyAoZnJvbSBEZWJpYW4gcGF0Y2ggNTZfbWFucGFnZSkKKyAgICAgIC0gW0JVRyAzNDkwNzA4XTogQ2xhcmlmeSB1c2Ugb2YgY29tbW9uIGNvbW1hbmQtbGluZSBvcHRpb25zCisgICAgICAtIEJVRzogMzUzNTI2OTogRG9jdW1lbnQgdXNlIG9mIFtzbm1wXSBmb3IgY2xpZW50LXNpZGUgdG9vbHMuCisKKyAgICBwYXNzOgorCisgICAgcGVybDoKKyAgICAgIC0gQWRkIGFnZW50Ojp1cHRpbWUoKQorICAgICAgLSBFbmFibGUgc2VuZGluZyBTTk1QdjIgdHJhcHMgd2l0aCBhbiBlbXB0eSB2YXJiaW5kIGxpc3QKKyAgICAgIC0gRml4IHNwZWxsaW5nIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBTTk1QIG1vZHVsZQorICAgICAgLSBGaXhlZCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlscy4gV2hlbgorCW5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlciBmYWlscywgaXQgZnJlZXMgaXRzIHJlZ2luZm8gLT4KKwluc2Focl9ERVNUUk9ZIChhbmQgYW55IG90aGVyIGZ1bmN0aW9uKSBtdXN0IG5vdCBkZXJlZmVyZW5jZSBpdC4KKyAgICAgIC0gUGVybDogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbnN0YW50IFNOTVBfREVGQVVMVF9SRVRSSUVTIGlzCisJcmVjb2duaXplZC4gU05NUCBtb2R1bGU6IEFkZCBjb25zdGFudHMKKwlORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UgYW5kCisJTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQuIFdoZW4gdGhlIE5ldC1TTk1QIFBlcmwgbW9kdWxlcyBhcmUKKwlidWlsdCBvbiBXaW5kb3dzIHdpdGggTVNWQyBvciBNaW5HVyBpdCBpcyBwb3NzaWJsZSB0aGF0IGVhY2ggdGhlc2UKKwlhcmUgbGlua2VkIHdpdGggYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBNU1ZDIHJ1bnRpbWUgbGlicmFyeSB0aGFuCisJdGhlIFBlcmwgaW50ZXJwcmV0ZXIgaXRzZWxmLiBJbiB0aGF0IGNhc2UgdGhlICJlcnJubyIgdmFyaWFibGUgdXNlZAorCWluc2lkZSAueHMgc291cmNlIGZpbGVzIGlzIGFub3RoZXIgdmFyaWFibGUgdGhhbiB0aGUgJCEgdmFyaWFibGUgaW4KKwkucG0gZmlsZXMuIE9yOiBhc3NpZ25tZW50cyB0byAiZXJybm8iIGluIGEgLnhzIGZpbGUgZG8gbm90IG1vZGlmeQorCXRoZSAiJCEiIFBlcmwgdmFyaWFibGUgVGhpcyBwYXRjaCBhdm9pZHMgdXNpbmcgImVycm5vIiBieSBtb2RpZnlpbmcKKwl0aGUgZGlmZmVyZW50IGNvbnN0YW50KCkgZnVuY3Rpb25zIHN1Y2ggdGhhdCB0aGVzZSByZXR1cm4gYQorCXR3by1lbGVtZW50IGFycmF5IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgc2NhbGFyIGFuZCBzZXR0aW5nIGVycm5vLgorCisgICAgcHl0aG9uOgorICAgICAgLSBBdm9pZCB0aGF0IGFuIFNOTVAgc2V0IHdpdGggVXNlRW51bXMgZW5hYmxlZCBjYXVzZXMgYSBzZWdtZW50YXRpb24KKwlmYXVsdAorICAgICAgLSBbUEFUQ0ggMzQzMzg0Nl06IEZpeCBmb3IgdXNlIHdpdGggcHl0aG9uIDIuNAorICAgICAgLSBCVUc6IDM1MzU5Njc6IEZpeCBtZW1vcnkgbGVhayAtIHNubXBfe3Nlc3NffWVycm9yIGFsbG9jYXRlcyB0aGUKKwlvdXRwdXQgYnVmZmVyCisKKyAgICB0ZXN0aW5nOgorICAgICAgLSBBZGQgYSB0ZXN0IGZvciBzZV9zdG9yZV9saXN0KCkKKyAgICAgIC0gQWRkIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1NGRpc21hbnBpbmdtaWJfc2ltcGxlCisgICAgICAtIEF2b2lkIGZhbHNlIG5lZ2F0aXZlIGZvciBUMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUgY2F1c2VkIGJ5IHRoZQorCXRlc3QgcmVzdWx0IGJlaW5nIHByZXNlbnQgaW4gdGhlIGhleCBkdW1wICgibW9zdGx5X2hhcm1sZXNzIikKKyAgICAgIC0gQ29udmVydCBzbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMgaW50byB0d28gdW5pdCB0ZXN0cworICAgICAgLSBGaXggUGVybCByZWdyZXNzaW9uIHRlc3QgZmFpbHVyZXMgQWxsIFBlcmwgcmVncmVzc2lvbiB0ZXN0cyBwYXNzCisJbm93IG9uIExpbnV4IGFuZCBvbiBXaW5kb3dzIChNU1ZDKS4KKyAgICAgIC0gTWFrZSB0aGUgYXNuMSB0ZXN0IHBhc3MgZXZlbiBpZiBzdXBwb3J0IGZvciBvcGFxdWUgdHlwZXMgYXJlCisJcmVtb3ZlZC4KKyAgICAgIC0gUGVybCByZWdyZXNzaW9uIHRlc3RzOiBEb24ndCBmYWlsIHNraXBwZWQgdGVzdHMuCisgICAgICAtIFByb3RlY3QgdGhlIHVzZSBvZiAkT1NUWVBFIHRvIGVuc3VyZSB0aGF0ICd0ZXN0JyBnZXQgZW5vdWdoCisJcGFyYW1ldGVycy4KKyAgICAgIC0gUmVtb3ZlIGFuIGluY29ycmVjdCBjb21tZW50IGZyb20gc2ltcGxlX2V2YWxfdG9vbHMuc2gKKyAgICAgIC0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorICAgICAgLSBSZXF1aXJlIGEgc2VtaWNvbG9uIGFmdGVyIE9LKCksIE9LRigpIGFuZCBQTEFOKCkgQWxzbywgbGV0IE9LRigpCisJZW1pdCBhIHNpbmdsZSBsaW5lIG9mIG91dHB1dCBzdWNoIHRoYXQgYWxsIG91dHB1dCBpdCBwcm9kdWNlcyBpcworCXZpc2libGUgaW4gdGhlIG91dHB1dCBvZiAibWFrZSB0ZXN0Ii4KKyAgICAgIC0gW0JVRyAzNDc0NTkwXTogRG9uJ3QgbWF0Y2ggdW5kZXJzY29yZXMgd2l0aGluIHRoZSBzb3VyY2Ugcm9vdAorCWZpbGVuYW1lCisgICAgICAtIEFkZCB0ZXN0IGNhc2VzIGZvciBzbm1wX3NlcnZpY2UKKworICAgIHVuc3BlY2lmaWVkOgorICAgICAgLSBBZGRlZCBDVkZTIChDZW50cmFWaXNpb24gRmlsZSBTeXN0ZW0pIHRvIGhyU3RvcmFnZVRhYmxlIGFuZAorCWhyRlNUYWJsZS4KKyAgICAgIC0gUmVtb3ZlZCBjb3VudGVyLTY0IGVycm9yIG1lc3NhZ2VzLiAgIFRoZXNlIG1lc3NhZ2VzIGRvIG5vdCBzYXkKKwllbnl0aGluZyB1c2VmdWwsIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlaXIgcmV0dXJuIHZhbHVlIGFuZCByZXBvcnQKKwlpdC4KKyAgICAgIC0gQWRkZWQgT0NGUzIgKE9yYWNsZSBDbHVzdGVyIEZTKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlCisgICAgICAtIFtCVUcgMzQ0NDkzOV06IEJVRzogMTc5Njg4Njogc25tcGxpYjogQXZvaWQgdGhhdAorCXNwcmludF9yZWFsbG9jX29jdGV0X3N0cmluZygpIGVtYmVkcyB1bnByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlcnMKKwlvciBiaW5hcnkgemVyb2VzIGluIGl0cyBvdXRwdXQuIFRoaXMgYmVoYXZpb3IgY291bGQgY2F1c2UgdHJ1bmNhdGVkCisJb3V0cHV0IGluIHNubXB0cmFwZC4KKyAgICAgIC0gW0JVRyAzNDUyMDY5XTogRml4IHNubXB0cmFwX29pZCBkZWNsYXJhdGlvbiBpbiBtaWIyYyBnZW5lcmF0ZWQgY29kZQorCVRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGNvbnNpZGVyYWJsZSB0aW1lIGFnby4gSXQgZGlkIGFscmVhZHkgZXhpc3QKKwlhdCB0aGUgdGltZSB0aGUgNS42IGJyYW5jaCB3YXMgY3JlYXRlZCAoc2VlIGFsc28gY29tbWl0CisJMGVjMDg4YWZhMjdjZmRhNGU2ZWE3OGFhZTdjZmM1NTA3NTY0ZWRkZSkuCisgICAgICAtIFtCVUcgMzQ1NDE2OF06IGNvbmZpZ3VyZTogRml4IGJ1aWxkaW5nIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5CisgICAgICAtIFtQQVRDSCAzNDE4NjQ5XTogSE9TVC1SRVNPVVJDRVMtTUlCOiBVc2UgcGNsb3NlKCkgaW5zdGVhZCBvZgorCWZjbG9zZSgpIHRvIGNsb3NlIGEgcGlwZS4KKyAgICAgIC0gW0JVRyAzNTQwNjIxXTogZGlzdDogQWRkIG1pc3NpbmcgUHJvdmlkZXM6IHRvIG5ldC1zbm1wLXBlcmxtb2RzIFJQTQorCXNwZWMKKworICAgIEJTRDoKKworICAgIEJ1ZyAzMTUyODQxOgorICAgICAgLSBEbyBub3QgaW5zdGFsbCB0aGUgdXRpbF9mdW5jcyBzdWJoZWFkZXJzIHRoYXQgd2VyZSByZW1vdmVkIGluIDUuNworICAgICAgLSBJbnN0YWxsIHV0aWxfZnVuY3Mgc3ViaGVhZGVycworICAgICAgLSBJbnN0YWxsIHV0aWxfZnVuY3Mgc3ViaGVhZGVycyBpbnRyb2R1Y2VkIGluIDUuNgorCisgICAgQ3lnd2luOgorICAgICAgLSBNYWtlIGRhdGVfbl90aW1lKCkgcHJvZHVjZSB0aW1lIHpvbmUgaW5mb3JtYXRpb24KKworICAgIEN5d2luOgorICAgICAgLSBBZ2VudDogSW1wbGVtZW50IGdldF91cHRpbWUoKSBzdWNoIHRoYXQgcXVlcnlpbmcKKwlIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtVXB0aW1lIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KKworICAgIEZyZWVCU0Q6CisgICAgICAtIFJlc3RvcmUgSVBfUkVDVkRTVEFERFIgZnVuY3Rpb25hbGl0eS4KKyAgICAgIC0gU25tcGQgKyBhcHBzOiBTZW5kaW5nIFVEUCBwYWNrZXRzIHdvcmtzIGFnYWluIGZvciBub24tcm9vdCB1c2VycworICAgICAgLSBbUEFUQ0ggMzQ4OTM4N106IEluc3RhbGwgRnJlZUJTRCAxMCBoZWFkZXIgZmlsZSAocGx1cyBvdGhlciBtaXNzaW5nCisJdmVyc2lvbnMpCisKKyAgICBMaW51eDoKKyAgICAgIC0gUEFUQ0g6IDM1MjU5OTg6IERvbid0IHVzZSBhbiB1bmluaXRpYWxpc2VkIHZhbHVlIGluIGVycm9yIG1lc3NhZ2UKKyAgICAgIC0gW1BBVENIIDM1MzY0MjBdOiBFbnN1cmUgc25kL3JjdiBtZW1vcnkgYnVmZmVycyBhcmUgc3VpdGFibHkgYWxpZ25lZAorCVBhdGNoIHByb3ZpZGVkIGJ5IFR5bGVyIE9sbXN0ZWFkCisKKyAgICBNaW5HVzoKKyAgICAgIC0gTmV0LVNOTVAgUGVybCBtb2R1bGVzIGJ1aWxkIGFnYWluLgorICAgICAgLSBTdXBwb3J0IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHJlY2VudCBTaGluaW5nIExpZ2h0IE9wZW5TU0wKKwliaW5hcnkgZGlzdHJpYnV0aW9ucworICAgICAgLSBUZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBmcmFtZXdvcmsKKyAgICAgIC0gVGVzdGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHRlc3QgcnVubmVyCisgICAgICAtIFRlc3Rpbmc6IE1ha2UgdGVzdCBUMTMwc25tcHYxdmFjbWdldF9zaW1wbGUgcGFzcworICAgICAgLSBUZXN0aW5nOiBNYWtlIHRob3NlIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBmb3Igd2hpY2ggU05NUENPTkZQQVRICisJYW5kL29yIFNOTVBfUEVSU0lTVEVOVF9ESVIgbWF0dGVyCisgICAgICAtIFRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliIHBhc3MKKyAgICAgIC0gVGVzdGluZzogTWFrZSB1bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYiBwYXNzLgorICAgICAgLSBUZXN0aW5nOiBPYnRhaW4gdGhlIE1TWVMgcGF0aCBmcm9tIHRoZSBlbnZpcm9ubWVudAorCisgICAgV2luMzI6CisgICAgICAtIEF2b2lkIHRoYXQgY29tcGlsaW5nIHRoZSBoZWFkZXIgZmlsZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisJd2l0aCB0aGUgTWluR1cgZ2NjIGNvbXBpbGVyIHRyaWdnZXJzIHdhcm5pbmdzIGFib3V0ICJwcmFnbWEKKwljb21tZW50Ii4KKyAgICAgIC0gQXZvaWQgdGhhdCB0aGUgUEFDS0FHRV8qIG1hY3JvcyBkZWZpbmVkIGluCisJPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYXVzZSB0cm91YmxlIHdoZW4gaW5jbHVkaW5nIHRoaXMKKwloZWFkZXIgaW4gYSBwYWNrYWdlIHRoYXQgdXNlcyB0aGUgR05VIGF1dG90b29scy4KKyAgICAgIC0gQnVpbGRpbmc6IEJ1aWxkcyBub3cgY29ycmVjdGx5IHdpdGggYSA2NC1iaXQgY29tcGlsZXIuIGdpdC1zdm4taWQ6CisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMQorCTk0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisgICAgICAtIFNubXBkOiBSZW1vdmUgZGxtb2QKKworICAgIFdpbmRvd3M6CisgICAgICAtIEJ1aWxkaW5nIChidWlsZC5iYXQpOiBJbnN0YWxsIG5ldHNubXAuZGxsIGJlZm9yZSBydW5uaW5nIHRoZSBQZXJsCisJcmVncmVzc2lvbiB0ZXN0cyBzdWNoIHRoYXQgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHJ1biB3aXRoIHRoZQorCWNvcnJlY3QgdmVyc2lvbiBvZiBuZXRzbm1wLmRsbC4KKyAgICAgIC0gTVNWQzogQXZvaWQgdGhhdCB0aGUgdHlwZWRlZnMgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCWNvbmZsaWN0IHdpdGggdGhvc2UgaW4gPHN0ZGludC5oPiBmcm9tIHRoZSBtc2ludHR5cGVzIHByb2plY3QKKyAgICAgIC0gTVNWQzogTGluayB3aXRoIHByb3BlciBsaWJlYXkzMiBsaWJyYXJ5CisgICAgICAtIE1TVkM6IFdoZW4gbGlua2luZyB3aXRoIE9wZW5TU0wsIGxpbmsgd2l0aCB1c2VyMzIubGliIHRvbworICAgICAgLSBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHJvYnVzdCBhZ2FpbnN0IG1lbW9yeSBhbGxvY2F0aW9uCisJZmFpbHVyZXMuIE1ha2UgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCkgdXNlIG1lbXNldCgpIG9uIFVuaXggc3lzdGVtcworCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcC4gTWFrZSBzdXJlIHRoYXQgb24gVW5peCBzeXN0ZW1zCisJbmV0c25tcF9sYXJnZV9mZF9jbHIoKSBkb2Vzbid0IHRyeSB0byByZWFkIG1lbW9yeSBpdCBpc24ndCBhbGxvd2VkCisJdG8gcmVhZCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlCisJcGFzc2VkIGJ5IHRoZSBjYWxsZXIpLiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KCkgcmV0dXJuIGZhbHNlCisJb24gVW5peCBzeXN0ZW1zIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBlcXVhbHMgLTEgKGEgdmFsdWUgdGhhdAorCXNob3VsZG4ndCBiZSBwYXNzZWQgYnkgdGhlIGNhbGxlcikuIE1ha2UKKwluZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBzaHJpbmsgYmVoYXZpb3IgY29ycmVjdC4KKyAgICAgIC0gUGVybCAoYnVpbGQuYmF0KTogV2hlbiBpbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLCBpbnN0YWxsIHRoZQorCVBEQiBmaWxlcyB0b28uCisgICAgICAtIFJlbW92ZSBzdXBlcmZsdW91cyBsaW5rIGxpYnJhcmllcyBmcm9tIHByb2plY3QgZmlsZXMgKCouZHNwKQorICAgICAgLSBTbm1wdHJhcGQ6IE1ha2UgdGhlIElQIGFkZHJlc3MgdG8gaG9zdG5hbWUgY29udmVyc2lvbiB3b3JrCisgICAgICAtIFRlc3Rpbmc6IHBlcmw6IEZpeCBhbiBpbmNvcnJlY3QgbWVzc2FnZSBwcmludGVkIHdoaWxlIHJ1bm5pbmcgdGhlCisJUGVybCBtb2R1bGUgcmVncmVzc2lvbiB0ZXN0cworCisKKworCisqNS43LjEqCisKKyAgICBzbm1wbGliOgorICAgICAgLSBGaXggYSBjcmFzaCB0aGF0IGNvdWxkIGJlCisgICAgICAtIHR3ZWFrIHBhdGNoIDMwNDQ4ODggdG8gcmVzdG9yZQorCisgICAgc25tcGQ6CisgICAgICAtIFtQQVRDSCAzMzg2NjMzXTogZml4IGludGVnZXIgb3ZlcmZsb3cgaW4gZGlzayBwZXJjZW50IGNhbGN1bGF0aW9ucworICAgICAgLSBNYWtlCisgICAgICAtIFJlc3RvcmUgc3RvcmFnZSB0YWJsZXMgb24gTGludXgKKyAgICAgIC0gcnVuIHNpZ25hbCBoYW5kbGVycyB3aGVuIHNlbGVjdCgpCisKKyAgICBzbm1wdHJhcGQ6CisgICAgICAtIEFkZCBtaXNzaW5nIG5ld2xpbmUKKyAgICAgIC0gSW52b2tlIHNodXRkb3duX3BlcmwoKSB3aGVuCisKKyAgICBidWlsZGluZzoKKyAgICAgIC0gW1BBVENIIDMzODM5NTFdOiBGaXggLVd1bnVzZWQgY29tcGlsZSB3YXJuaW5ncyB3aXRoIEZyZWVCU0QvTmV0QlNECisJU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgICAtIGJ1aWxkIGZpeAorICAgICAgLSBidWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZworCisgICAgbGlibmV0c25tcDoKKyAgICAgIC0gW1BBVENIIDMzODcxMzldOiBmcm9tCisKKyAgICBtYW46CisgICAgICAtIFtQQVRDSCAzMzEyODYxXTogTWFuIHBhZ2VzCisKKyAgICB0ZXN0aW5nOgorICAgICAgLSBDaGFuZ2VkCisgICAgICAtIENoZWNrIFBJRCBmaWxlIGV4aXN0ZW5jZSBhZnRlciBoYXZpbmcgcmVhZCBpdCBpbnN0ZWFkIG9mIGJlZm9yZS4KKwlUaGlzIGZpeGVzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGZpbGUgZGlzYXBwZWFyZWQgYWZ0ZXIKKwl0aGUgZXhpc3RlbmNlIGNoZWNrIGFuZCBiZWZvcmUgaXQgd2FzIHJlYWQuCisgICAgICAtIE1ha2UgdGhlIFNOTVBfVkVSQk9TRT0xIG91dHB1dCBldmVuIG1vcmUgdmVyYm9zZS4KKworICAgIHVuc3BlY2lmaWVkOgorICAgICAgLSBtaW5vciBORVdTIHBvbGlzaAorCisgICAgUGVybDoKKyAgICAgIC0gUmVtb3ZlIGZpbGUgcGVybC9OZXRTTk1QLnhzCisKKyAgICBXaW4zMjoKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yCisgICAgICAtIERvY3VtZW50IGhvdyB0byBidWlsZCA2NC1iaXQKKyAgICAgIC0gRG9jdW1lbnRlZCBob3cgdG8gdXNlIGJ1aWxkLmJhdCB3aXRoCisgICAgICAtIHdpbkV4dERMTDogSW52b2tlCisKKyAgICBXaW5kb3dzOgorICAgICAgLSBBdm9pZCB0aGF0IGlmCisgICAgICAtIFJlbW92ZSBvdXRkYXRlZCBpbnN0cnVjdGlvbnMgYWJvdXQKKworKjUuNyoKKyAgICBzbm1wbGliOgorICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLgorICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLiBBZGRlZCBkZWNsYXJhdGlvbgorCWZvciB0aGUgZnVuY3Rpb24gbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpIGluIGEgcHVibGljCisJYWdlbnQgaGVhZGVyIGZpbGUuCisgICAgICAtIEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuIEFkZGVkIGRlY2xhcmF0aW9uCisJZm9yIHRoZSBmdW5jdGlvbiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkgaW4gYSBwdWJsaWMKKwlhZ2VudCBoZWFkZXIgZmlsZS4gRml4ZWQgbWVtb3J5IGxlYWsgaW4KKwluZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkuCisgICAgICAtIEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuIEFkZGVkIGRlY2xhcmF0aW9uCisJZm9yIHRoZSBmdW5jdGlvbiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkgaW4gYSBwdWJsaWMKKwlhZ2VudCBoZWFkZXIgZmlsZS4gRml4ZWQgbWVtb3J5IGxlYWsgaW4KKwluZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkuIEZpeGVkIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieQorCXVucmVnaXN0ZXJpbmcgYSB0YWJsZSBoYW5kbGVyLgorICAgICAgLSBBZGRlZCBtYWNybyBuZXRzbm1wX3N0YXRpY19hc3NlcnQoKS4KKyAgICAgIC0gQWRkZWQgbmV0c25tcF9taWJfaGFuZGxlci5kYXRhX2Nsb25lLCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdAorCWRlZmluZXMgaG93IHRvIGNsb25lIG5ldHNubXBfbWliX2hhbmRsZXIubXl2b2lkLiBNdXN0IGJlIGRlZmluZWQgaWYKKwlhbmQgb25seSBpZiBkYXRhX2ZyZWUgaXMgc2V0LiBUaGUgZnVuY3Rpb24gbmV0c25tcF9oYW5kbGVyX2R1cCgpCisJZG9lcyBub3cgY2xvbmUgTUlCIGhhbmRsZXIgcHJpdmF0ZSBkYXRhIGlmIGRhdGFfY2xvbmUoKSBpcyBzZXQuCisJUHJldmlvdXNseSBhZnRlciBkdXBsaWNhdGluZyBhIE1JQiBoYW5kbGVyIGFuZCB1bnJlZ2lzdGVyaW5nIG9uZSBvZgorCXRoZSB0d28gTUlCIGhhbmRsZXJzLCB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgKG15dm9pZCkgb2YgdGhlCisJb3RoZXIgYmVjYW1lIGEgZGFuZ2xpbmcgcG9pbnRlci4gTm90ZTogYWRkaXRpb24gb2YKKwluZXRzbm1wX21pYl9oYW5kbGVyLmRhdGFfY2xvbmUgaXMgYW4gQUJJIGNoYW5nZS4KKyAgICAgIC0gQWRkZWQgc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuCisgICAgICAtIEFkZGVkIHRoZSBmdW5jdGlvbiBuZXRzbm1wX2NoZWNrX2RlZmluZWRuZXNzKCksIHdoaWNoIGhlbHBzIHRvIGZpbmQKKwl0aGUgY2F1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIGVycm9ycyBhcyByZXBvcnRlZCBieSBWYWxncmluZC4KKyAgICAgIC0gQXZvaWQgdGhhdCBWYWxncmluZCBjb21wbGFpbnMgYWJvdXQgdW5pbml0aWFsaXplZCBkYXRhIGZvciB0aGUKKwlidWZmZXJzIHJldHVybmVkIGJ5IG5ldHNubXBfY2FsbGJhY2tfcmVjdigpIGFuZAorCW5ldHNubXBfY2FsbGJhY2tfaG9va19idWlsZCgpLgorICAgICAgLSBCZSBjb25zdCBjb3JyZWN0IG92ZXIgY2FsbHMgdG8gc3RyKiBmdW5jdGlvbnMuCisgICAgICAtIENoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUgb2YgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKCkgZnJvbSBjaGFyICoKKwlpbnRvIGNvbnN0IGNoYXIgKi4KKyAgICAgIC0gQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgdG8gbmV0c25tcF90cmFuc3BvcnRfY29weSBpcyBub24tTlVMTAorICAgICAgLSBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0cmR1cCBpbiBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QgYW5kCisJZmFpbCBpZiBzdHJkdXAgZmFpbHMuCisgICAgICAtIENvcnJlY3QgdGhlIGV4dGVybiAiQyIgZGVjbGFyYXRpb25zIHRvIGJlIGNvbnNpc3RlbnQuIFJlbW92ZQorCWNvbW1lbnRlZCBvdXQgY29kZS4KKyAgICAgIC0gRmVubmVyOiBmaXggc2VuZGluZyBvZiBVRFAgcmVzcG9uc2VzIGZyb20gbXVsdGlob21lZCBhZ2VudHMuIFRyeSB0bworCXNlbmQgdGhlIHJlc3BvbnNlIGFzIGl0IHdhcyBiZWZvcmUgTmV0LVNOTVAgNS42IChhc3N1bWluZyB0aGUKKwlhcHByb3ByaWF0ZSByZXF1ZXN0IHdhcyB1bmljYXN0KSBhbmQgb25seSBpZiBpdCBmYWlscyB0cnkgdG8gc2V0CisJaWZfaW5kZXggKHRoZSByZXF1ZXN0IG11c3QgYmUgYnJvYWRjYXN0KS4KKyAgICAgIC0gRml4ZWQgYnVncyBpbiBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoKSwKKwlhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoKSwgYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NCgpIGFuZAorCWFzbl9idWlsZF9zaWduZWRfaW50NjQoKS4gTW9zdCBidXQgbm90IGFsbCBvZiB0aGVzZSBidWdzIHdlcmUKKwlzcGVjaWZpYyB0byA2NC1iaXQgc3lzdGVtcy4gRml4ZXMgYnVnICMzMDkzMTk5LgorICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgY2FsbGluZyBzZV9hZGRfcGFpcl90b19saXN0KCkgd2l0aCBhCisJdmFsdWUgdGhhdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIGxpc3QuCisgICAgICAtIEludm9raW5nIHNlX2NsZWFyX3NsaXN0KCkgZG9lcyBubyBsb25nZXIgY3JlYXRlIGEgZGFuZ2xpbmcgcG9pbnRlci4KKyAgICAgIC0gSW52b2tpbmcgc2VfY2xlYXJfc2xpc3QoKSBkb2VzIG5vIGxvbmdlciBjcmVhdGUgYSBkYW5nbGluZyBwb2ludGVyLgorCUZpeGVkIGxlYWtzLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5IHVzaW5nIHRoZSBzbm1wX2VudW0gY29kZS4KKyAgICAgIC0gSW52b2tpbmcgc2VfY2xlYXJfc2xpc3QoKSBkb2VzIG5vIGxvbmdlciBjcmVhdGUgYSBkYW5nbGluZyBwb2ludGVyLgorCUZpeGVkIGxlYWtzLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5IHVzaW5nIHRoZSBzbm1wX2VudW0gY29kZS4KKwlEb2N1bWVudGVkIGJlaGF2aW9yIG9mIHNlX2FkZF9wYWlyKCksIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCkgYW5kCisJY2xlYXJfc25tcF9lbnVtKCkuIE1hZGUgc25tcF9lbnVtIGV4YW1wbGUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0CisJb2YgdGhlIGNvZGUgYnkgYWRkaW5nIHN0cmR1cCgpIGNhbGxzIGFuZCBhZGRlZCBhIGNhbGwgdG8KKwlzZV9jbGVhcl9hbGxfbGlzdHMoKS4KKyAgICAgIC0gSW52b2tpbmcgc2VfY2xlYXJfc2xpc3QoKSBkb2VzIG5vIGxvbmdlciBjcmVhdGUgYSBkYW5nbGluZyBwb2ludGVyLgorCUZpeGVkIGxlYWtzLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5IHVzaW5nIHRoZSBzbm1wX2VudW0gY29kZS4KKwlEb2N1bWVudGVkIGJlaGF2aW9yIG9mIHNlX2FkZF9wYWlyKCksIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCkgYW5kCisJY2xlYXJfc25tcF9lbnVtKCkuIE1hZGUgc25tcF9lbnVtIGV4YW1wbGUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0CisJb2YgdGhlIGNvZGUgYnkgYWRkaW5nIHN0cmR1cCgpIGNhbGxzIGFuZCBhZGRlZCBhIGNhbGwgdG8KKwlzZV9jbGVhcl9hbGxfbGlzdHMoKS4gRml4ZWQgYSBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtIHRyaWdnZXJlZAorCWJ5IHRoZSAodW5kb2N1bWVudGVkKSBzbm1wZC5jb25mICJlbnVtIiBrZXl3b3JkIGhhbmRsZXIgLSBzdG9yaW5nCisJcG9pbnRlcnMgdG8gc3RyaW5ncyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGEgZ2xvYmFsIGxpc3QgZG9lcworCW5vdCB3b3JrLgorICAgICAgLSBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIENNVSBjb21wYXRpYmlsaXR5IHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0bworCWVuYWJsZSBpdCBhbmQgbm9ib2R5IGhhdmUgbWlzc2VkIGl0LgorICAgICAgLSBbQlVHIDMxMzQzMjNdOiBGaXggY3Jhc2ggd2hlbiBjb21wYXJpbmcgaW52YWxpZCBPSURzCisgICAgICAtIFtQQVRDSCAzMTY1ODc4XTogQ2F0Y2ggYnVmZmVyIG92ZXJydW4gb24gNjQtYml0IHN5c3RlbXMKKyAgICAgIC0gW1BBVENIIDMxOTU1MzddOiBNaW5vciBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHNvcnQgb3B0aW1pemF0aW9uCisgICAgICAtIFtQQVRDSCAzMjAzODA2XTogQWRkIHRoZSBmdW5jdGlvbiBuZXRzbm1wX2xhcmdlX3NlbGVjdCgpLgorICAgICAgLSBbUEFUQ0ggMzIwMzgwNl06IE1ha2UgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgY2xlYXIgYWxsCisJcmVsZXZhbnQgZmlsZSBkZXNjcmlwdG9ycy4KKyAgICAgIC0gW1BBVENIIDMyMDM4MDZdOiBNaW5vciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb2YKKwluZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKS4KKyAgICAgIC0gYWRkIElQdjYgc3VwcG9ydCB0byBEVExTVURQIHRyYW5zcG9ydAorICAgICAgLSBhZGQgSVB2NiBzdXBwb3J0IHRvIERUTFNVRFAgdHJhbnNwb3J0IHVzZSBuZXcKKwluZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgaW4gbmV0c25tcF9hZGRyX3BhaXIKKyAgICAgIC0gYWRkIElQdjYgc3VwcG9ydCB0byBEVExTVURQIHRyYW5zcG9ydCB1c2UgbmV3CisJbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIGluIG5ldHNubXBfYWRkcl9wYWlyIGFkZCBiYXNlX3RyYW5zcG9ydAorCXB0ciBmb3IgdHVubmVsZWQgdHJhbnNwb3J0cworICAgICAgLSBhZGQgbW9yZSBvcGVuc3NsIGVycm9yIGNhc2VzIHdoZXJlIHdlIGNoZWNrIGZvciBsb2NhbCBjZXJ0CisgICAgICAtIGFkZCBuZXcgdHJhbnNwb3J0IGNvbmZpZyB0b2tlbnMgbG9jYWxDZXJ0L3BlZXJDZXJ0LCBkZXByZWNhdGUKKwlvdXJfaWRlbnRpdHksIHRoZWlyX2lkZW50aXR5CisgICAgICAtIGFkZCBvcHRpb25hbCBzdXBwb3J0IGZvciBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBvZiBob3N0bmFtZXMJLQorCW9wdGlvbmFsIGF0IGNvbmZpZ3VyZSB0aW1lOiAtLXdpdGgtbG9jYWwtZG5zc2VjLXZhbGlkYXRpb24gLQorCXJlcXVpcmVzIEROU1NFQy1Ub29sIHZhbGlkYXRpb24gbGlicmFyaWVzIC0gaW5pdGlhbCBzdXBwb3J0LCBmb3IKKwlzeXN0ZW1zIHdpdGggZ2V0YWRkcmluZm8uIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgcmVzb2x2ZXIKKwlpbnRlcmZhY2VzIGNvbWluZyBzb29uLiAtIGFsc28gVE9ETzogZmxhZyBmb3IgaWdub3JpbmcgdmFsaWRhdG9pbgorCWVycm9ycyAobG9nICYgY29udGludWUpCisgICAgICAtIGRvbnQgcmV0dXJuIGVtcHR5IGFycmF5CisgICAgICAtIGZvcmNlIGEgOyBhdCB0aGUgZW5kIG9mIHRoZSBzdGF0aWNfYXNzZXJ0IG1hY3JvLgorICAgICAgLSBpbnRyb2R1Y2UgbmV3IGxvY2FsQ2VydC9wZWVyQ2VydCwgZGVwcmVjYXRlIHNlcnZlckNlcnQsIGNsaWVudENlcnQsCisJZGVmWDUwOVNlcnZlclB1YiwgZGVmWDUwOUNsaWVudFB1YgorICAgICAgLSBuZXRzbm1wX2hhbmRsZXJfZHVwKCk6IGZyZWVpbmcgdGhlIGR1cGxpY2F0ZWQgaGFuZGxlciBubyBsb25nZXIKKwljYXVzZXMgYSBjcmFzaCAoZG91YmxlIGZyZWUpIHdoZW4gaGFuZGxlci0+bXl2b2lkIG9mIHRoZSBvcmlnaW5hbAorCWhhbmRsZXIgd2FzIG5vbi1OVUxMLgorICAgICAgLSByZWFsbG9jK2luaXQgaW5zdGVhZCBvZiBjYWxsb2MgaW5zcGlyZWQgYnkgcGF0Y2ggMzE5NTUzMiBmcm9tCisJU3RlcGhlbiBIZW1taW5nZXIKKyAgICAgIC0gcmVmaW5lIGNlcnQgZGVidWdnaW5nOyByZW1vdmUgdW51c2VkIGZ1bmN0aW9uCisgICAgICAtIHJlbW92ZSBpbmxpbmUgdmVyc2lvbnMgb2YgY29udGFpbmVyIGZ1bmNzCisgICAgICAtIHNubXBfc2h1dGRvd24oKTogYWRkZWQgY2FsbCB0byBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCkuCisgICAgICAtIDAgQXBwbGllZCB0aGUgaW50ZW50IG9mIHBhdGNoIDMwNDQ4ODggdG8gYWxsb3cgYXBwbGljYXRpb25zIHRvIHJlYWQKKwl0aGUgZXJyb3IgbWVzc2FnZXMgb2YgYSBNSUIgcGFyc2luZyBmYWlsdXJlLgorICAgICAgLSBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHNubXBfZnJlZV9zZXNzaW9uKCkuCisgICAgICAtIFtCVUcgMzE4NDY5N106IERvbid0IHJlZmVyZW5jZSBpbnRlcm5hbCBNRDUgd2hlbiBpdCdzIGV4cGxpY2l0bHkKKwlkaXNhYmxlZAorICAgICAgLSBbQlVHIDMyMzQ3NTRdOiBFbnN1cmUgb2xkIGZfY3JlYXRlX2Zyb21fdHN0cmluZyBob29rIGlzIGluaXRpYWxpemVkCisJdG8gTlVMTAorICAgICAgLSBbQlVHIDMyNjQ4NTJdOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKwkoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpCisgICAgICAtIF9taWJpbmRleF9hZGQoKSBubyBsb25nZXIgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljYWxseQorCWFsbG9jYXRlZCBhcnJheSBfbWliaW5kZXhlcy4KKyAgICAgIC0gW0JVRyAzMTUxODQ1XTogZml4IG11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgb2Ygc25tcCB0cmFuc3BvcnQgaGFuZGxlcgorCisgICAgc25tcDoKKyAgICAgIC0gcGF0Y2g6IDMwOTY3MjU6IHN5c09SVGFibGUgcmVnaXN0YXRpb24gZm9yIG5vdGlmaWNhdGlvbiBsb2cgbWliCisJb3JpZ2luYWwgcGF0Y2ggZml4ZWQgc2V2ZXJhbCBpc3N1ZXMsIG90aGVyIHBhcnRzIGFwcGxpZWQgZWFybGllcgorCisgICAgc25tcGQ6CisgICAgICAtIEFkZCBtaXNzaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisgICAgICAtIEFkZGVkIGZ1bmN0aW9ucyBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJyZXEoKSwKKwluZXRzbm1wX3JlZ2lzdHJhdGlvbl9vd25zX3RhYnJlcSgpLCBuZXRzbm1wX2l0ZXJhdG9yX2Nsb25lKCkuCisJRXhwb3J0ZWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZSgpLgorICAgICAgLSBBZGRlZCBmdW5jdGlvbnMgbmV0c25tcF9oYW5kbGVyX293bnNfdGFicmVxKCksCisJbmV0c25tcF9yZWdpc3RyYXRpb25fb3duc190YWJyZXEoKSwgbmV0c25tcF9pdGVyYXRvcl9jbG9uZSgpLgorCUV4cG9ydGVkIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fY2xvbmUoKS4gTW9kaWZpZWQKKwluZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZSgpIHN1Y2ggdGhhdCBpdCBmcmVlcyB0aGUgdGFibGUKKwlyZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gc3RvcmVkIGluIGEgdGFibGUgaXRlcmF0b3IgdG9vLiBNb2RpZmllZAorCW5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIoKSBzdWNoIHRoYXQgdGhlIHRhYmxlIGl0ZXJhdG9yCisJcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgZnJlZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBoYW5kbGVyIGlzCisJZnJlZWQuIFJlc3RvcmVkIHRoZSBiZWhhdmlvciBvZiBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKCkgdG8gdGhhdAorCW9mIHIxOTQ0OSwgdGhhdCBpcywgbm90IHNldHRpbmcgdXAgdGhlIGRhdGFfZnJlZSBwb2ludGVyIGJlY2F1c2UKKwlub3QgYWxsIGNhbGxlcnMgb2YgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcigpIGV4cGVjdCB0aGF0IHRhYmxlCisJcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcworCWZyZWVkLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcjIoKS4KKyAgICAgIC0gQWRkZWQgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3IyKCkuIEFkZGVkCisJbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoKS4KKyAgICAgIC0gQWRkZWQgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3IyKCkuIEFkZGVkCisJbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoKS4gQWRkZWQKKwluZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKCkuCisgICAgICAtIEFkZGVkIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yMigpLiBBZGRlZAorCW5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKCkuIEFkZGVkCisJbmV0c25tcF9oYW5kbGVyX293bnNfaXRlcmF0b3JfaW5mbygpLiBGaXhlZCBsZWFrLWF0LWV4aXQgdHJpZ2dlcmVkCisJYnkgc25tcE5vdGlmeVRhYmxlLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcjIoKS4gQWRkZWQKKwluZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigpLiBBZGRlZAorCW5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8oKS4gRml4ZWQgbGVhay1hdC1leGl0IHRyaWdnZXJlZAorCWJ5IHNubXBOb3RpZnlUYWJsZS4gRml4ZWQgbGVhay1hdC1leGl0IHRyaWdnZXJlZCBieQorCXNubXBUYXJnZXRBZGRyVGFibGUuIEFsc28sIHJlc3RvcmVkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9mCisJbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigpLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKCksCisJbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIoKSwgbmV0c25tcF9jbG9uZV93YXRjaGVyX2luZm8oKQorCWFuZCBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKCkuIFNlZSBhbHNvIHRoZSBEb3h5Z2VuIGNvbW1lbnRzIGZvcgorCW1vcmUgaW5mby4KKyAgICAgIC0gQWRkZWQgbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSgpLgorICAgICAgLSBBZGRlZCByZWZlcmVuY2UgY291bnQgaW4gdGhlIG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyBkYXRhCisJc3RydWN0dXJlIGFuZCBtYWRlIHN1cmUgdGhhdCB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGF1dG9tYXRpY2FsbHkKKwlmcmVlZCB3aGVuIHRoZSBoYW5kbGVyIHRoYXQgb3ducyBpdCBpcyB1bnJlZ2lzdGVyZWQuCisgICAgICAtIEFkZGVkIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLiBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZAorCXNodXRkb3duX2FnZW50KCkgZHVyaW5nIHNodXRkb3duLgorICAgICAgLSBBZGRlZCBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4gQ2FsbCBzaHV0ZG93bl9tYXN0ZXJfYWdlbnQoKSBhbmQKKwlzaHV0ZG93bl9hZ2VudCgpIGR1cmluZyBzaHV0ZG93bi4gVGhlIGZ1bmN0aW9uIGNsZWFuX3N1YnRyZWUoKSBkb2VzCisJbm8gbG9uZ2VyIHRyaWdnZXIgZG91YmxlIGZyZWVzIGFuZCBpbnZhbGlkIG1lbW9yeSByZWFkcy4gTm90ZTogdGhpcworCWZ1bmN0aW9uIHdhcyBhbHJlYWR5IHdyb25nIGF0IHRoZSB0aW1lIGl0IHdhcyBpbnRyb2R1Y2VkIChwYXRjaAorCSM3MjQ5MjUgLyByODUzMSwgSnVseSAyMDAzKS4KKyAgICAgIC0gQWRkZWQgc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuIENhbGwgc2h1dGRvd25fbWFzdGVyX2FnZW50KCkgYW5kCisJc2h1dGRvd25fYWdlbnQoKSBkdXJpbmcgc2h1dGRvd24uIFRoZSBmdW5jdGlvbiBjbGVhbl9zdWJ0cmVlKCkgZG9lcworCW5vIGxvbmdlciB0cmlnZ2VyIGRvdWJsZSBmcmVlcyBhbmQgaW52YWxpZCBtZW1vcnkgcmVhZHMuIE5vdGU6IHRoaXMKKwlmdW5jdGlvbiB3YXMgYWxyZWFkeSB3cm9uZyBhdCB0aGUgdGltZSBpdCB3YXMgaW50cm9kdWNlZCAocGF0Y2gKKwkjNzI0OTI1IC8gcjg1MzEsIEp1bHkgMjAwMykuIFJlbW92ZWQgYSBjb21tZW50IGluCisJbmV0c25tcF9oYW5kbGVyX2ZyZWUoKSB0aGF0IGlzIG5vdyBvYnNvbGV0ZSBiZWNhdXNlIG9mIHRoZQorCWNsZWFuX3N1YnRyZWUoKSBjaGFuZ2VzLgorICAgICAgLSBBZGRlZCBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4gQ2FsbCBzaHV0ZG93bl9tYXN0ZXJfYWdlbnQoKSBhbmQKKwlzaHV0ZG93bl9hZ2VudCgpIGR1cmluZyBzaHV0ZG93bi4gVGhlIGZ1bmN0aW9uIGNsZWFuX3N1YnRyZWUoKSBkb2VzCisJbm8gbG9uZ2VyIHRyaWdnZXIgZG91YmxlIGZyZWVzIGFuZCBpbnZhbGlkIG1lbW9yeSByZWFkcy4gTm90ZTogdGhpcworCWZ1bmN0aW9uIHdhcyBhbHJlYWR5IHdyb25nIGF0IHRoZSB0aW1lIGl0IHdhcyBpbnRyb2R1Y2VkIChwYXRjaAorCSM3MjQ5MjUgLyByODUzMSwgSnVseSAyMDAzKS4gUmVtb3ZlZCBhIGNvbW1lbnQgaW4KKwluZXRzbm1wX2hhbmRsZXJfZnJlZSgpIHRoYXQgaXMgbm93IG9ic29sZXRlIGJlY2F1c2Ugb2YgdGhlCisJY2xlYW5fc3VidHJlZSgpIGNoYW5nZXMuIE1vZGlmaWVkIG5ldHNubXBfZGVyZWdpc3Rlcl9hZ2VudF9uc2FwKCkKKwlzdWNoIHRoYXQgaXQgbmV2ZXIgZXhhbWluZXMgc2Vzc2lvbnMgdGhhdCBhbHJlYWR5IGhhdmUgYmVlbiBjbG9zZWQuCisJSXQgaXMgZm9yIHRoaXMgY2hhbmdlIHRoYXQgaXQgd2FzIG5lY2Vzc2FyeSB0byBpbnRyb2R1Y2UgdGhlIG5ldworCWZ1bmN0aW9uIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLgorICAgICAgLSBBZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKCkgYW5kCisJbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoKS4KKyAgICAgIC0gQWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZSgpIGFuZAorCW5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKCkuIE1lbW9yeSBhbGxvY2F0ZWQgYnkKKwluZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKSBmb3Igc3RvcmluZyBTTk1QIHZhcmlhYmxlcyBpcyBub3cgZnJlZWQKKwl3aGVuIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaXMgdW5yZWdpc3RlcmVkLgorICAgICAgLSBBZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKCkgYW5kCisJbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoKS4gTWVtb3J5IGFsbG9jYXRlZCBieQorCW5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpIGZvciBzdG9yaW5nIFNOTVAgdmFyaWFibGVzIGlzIG5vdyBmcmVlZAorCXdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcyB1bnJlZ2lzdGVyZWQuIENhbGxiYWNrIGZ1bmN0aW9uIGRhdGEKKwlkZWFsbG9jYXRpb24gZG9lcyBubyBsb25nZXIgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlCisJQWdlbnRYIHNlc3Npb24gLSB0aGUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBmb3IgQWdlbnRYIHNlc3Npb25zCisJaXMgbm93IGRlYWxsb2NhdGVkIGp1c3QgYXMgdGhhdCBmb3IgYW55IG90aGVyIHNlc3Npb24uIFRoaXMgZml4ZXMgYQorCWxlYWstYXQtZXhpdC4KKyAgICAgIC0gQWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZSgpIGFuZAorCW5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKCkuIE1lbW9yeSBhbGxvY2F0ZWQgYnkKKwluZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKSBmb3Igc3RvcmluZyBTTk1QIHZhcmlhYmxlcyBpcyBub3cgZnJlZWQKKwl3aGVuIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaXMgdW5yZWdpc3RlcmVkLiBDYWxsYmFjayBmdW5jdGlvbiBkYXRhCisJZGVhbGxvY2F0aW9uIGRvZXMgbm8gbG9uZ2VyIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZQorCUFnZW50WCBzZXNzaW9uIC0gdGhlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIEFnZW50WCBzZXNzaW9ucworCWlzIG5vdyBkZWFsbG9jYXRlZCBqdXN0IGFzIHRoYXQgZm9yIGFueSBvdGhlciBzZXNzaW9uLiBUaGlzIGZpeGVzIGEKKwlsZWFrLWF0LWV4aXQuIE5vdGlmeSBmaWx0ZXIgdGFibGU6IENhbGxiYWNrIGZ1bmN0aW9uIGRhdGEKKwlkZWFsbG9jYXRpb24gZG9lcyBubyBsb25nZXIgZnJlZSB0aGUgZGF0YSBpbiAqCSAgCisJKnNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyIC0gdGhpcyBpcyBub3cgZG9uZSBieSAgCisJc2h1dGRvd25fc25tcE5vdGlmeUZpbHRlclRhYmxlKCkgYW5kCisgICAgICAtIEF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0ZWQgYnkKKwluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCgpLgorICAgICAgLSBCdWlsZHMgd2l0aCBtb3N0IHJlY2VudCBNaW5HVyAoaGF2aW5nICNkZWZpbmUgbG9jYWx0aW1lX3IpLgorICAgICAgLSBDb3VudCB0aGUgbnVtYmVyIG9mIHVzZXJzIG9mIGEgbmV0c25tcF9jYWNoZSBkYXRhIHN0cnVjdHVyZSBpbnN0ZWFkCisJb2YgZHVwbGljYXRpbmcgaXQuCisgICAgICAtIERlY2xhcmUgdGhlIE9JRCBhcmd1bWVudCB0eXBlIG9mIE1JQiByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFzCisJJ2NvbnN0IG9pZCAqJyBpbnN0ZWFkIG9mICdvaWQgKicgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGRvIG5vdAorCW1vZGlmeSB0aGUgT0lELgorICAgICAgLSBEbyBub3QgbGVhayB0aGUgbGltaXRzIG9mIHNjYWxhcl9ncm91cCBvYmplY3RzIG9uIHNodXRkb3duLgorICAgICAgLSBFeHRlbmQgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRhdGFfY2xvbmUgYW5kIGRhdGFfZnJlZQorICAgICAgLSBGYWN0b3Igb3V0IGNvbW1vbiBjb25maWdfYWRkX21pYiBzdGF0bWVudHMKKyAgICAgIC0gRmluZCBvdXQgd2hldGhlciBsaWJycG0gaXMgYXZhaWxhYmxlIGJlZm9yZSBjb25maWd1cmluZyB0aGUgYWdlbnQKKwltb2R1bGVzIGJlY2F1c2UgaG9zdC9kYXRhL2FjY2Vzcy9zd2luc3QgbmVlZHMgc3ltYm9sIEhBVkVfTElCUlBNLgorCUFzIGEgcmVzdWx0LCBjb25maWd1cmUgaGFzIHRvIGJlIHJ1biBvbmx5IG9uY2UgaW5zdGVhZCBvZiB0d2ljZSB0bworCWVuYWJsZSB0aGUgaHJTV0luc3RhbGxlZCB0YWJsZSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBsaWJycG0uCisgICAgICAtIEZpeGVkIGEgZG91YmxlIGZyZWUgYXQgZXhpdCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgdGhlCisJZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4KKyAgICAgIC0gRml4ZWQgYSB5ZWFyLTIwMzggYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpcFJvdXRlVGFibGUuCisgICAgICAtIEludHJvZHVjZWQgbmV0c25tcF9waWRfdC4KKyAgICAgIC0gTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KKyAgICAgIC0gTWFrZSBpdCBwb3NzaWJsZSB0byBjb3B5IHdhdGNoZWQgZGF0YSBpdGVtcyB3aXRob3V0IG1lbW9yeSBsZWFrcy4KKyAgICAgIC0gTWFrZSB0aGUgc2V0dGluZyBvZiB0aGUgYXJndnJlc3RhcnQqIHZhcmlhYmxlcyBvcHRpb25hbCBvbgorCVVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUuCisgICAgICAtIE1ha2UgdGhlIHNldHRpbmcgb2YgdGhlIGFyZ3ZyZXN0YXJ0KiB2YXJpYWJsZXMgb3B0aW9uYWwgb24KKwlVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFLiBSZW1vdmUgdXRpbF9mdW5jcy9yZXN0YXJ0IGZyb20gdGhlCisJcmVxdWlyZW1lbnQgc2V0cyBvZiB1dGlsX2Z1bmNzIGFuZCBkZWZhdWx0X21vZHVsZXMuCisgICAgICAtIE1ha2UgdGhlIHNldHRpbmcgb2YgdGhlIGFyZ3ZyZXN0YXJ0KiB2YXJpYWJsZXMgb3B0aW9uYWwgb24KKwlVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFLiBSZW1vdmUgdXRpbF9mdW5jcy9yZXN0YXJ0IGZyb20gdGhlCisJcmVxdWlyZW1lbnQgc2V0cyBvZiB1dGlsX2Z1bmNzIGFuZCBkZWZhdWx0X21vZHVsZXMuIEFkZAorCXV0aWxfZnVuY3MvcmVzdGFydCB0byB0aGUgcmVxdWlyZW1lbnQgc2V0IG9mIHVjZC1zbm1wL3ZlcnNpb25pbmZvLgorICAgICAgLSBQYXRjaCAzMTQxNDYyOiBmcm9tIGZlbm5lcjogZml4IGFnZW50eCBzdWJhZ2VudCBpc3N1ZXMgd2l0aAorCW11bHRpcGxlLW9iamVjdCByZXF1ZXN0cworICAgICAgLSBQYXRjaCBmcm9tIE5pZWxzIHRvIGZpeCBWQUNNIHBlcnNpc3RhbnQgc3RvcmFnZS4KKyAgICAgIC0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBjbXAKKyAgICAgIC0gUmVtb3ZlIHV0aWxfZnVuY3MvRXhpdCBmcm9tIHRoZSByZXF1aXJlbWVudCBzZXRzIG9mIHV0aWxfZnVuY3MgYW5kCisJZGVmYXVsdF9tb2R1bGVzLgorICAgICAgLSBSZW1vdmUgdXRpbF9mdW5jcy9FeGl0IGZyb20gdGhlIHJlcXVpcmVtZW50IHNldHMgb2YgdXRpbF9mdW5jcyBhbmQKKwlkZWZhdWx0X21vZHVsZXMuIE5ldmVyIHVzZSBFeGl0IHRvIHRlcm1pbmF0ZSB0aGUgYWdlbnQuCisgICAgICAtIFJlbW92aW5nIHRoZSBsYXN0IGNhY2hlIHZpYSBuZXRzbm1wX2NhY2hlX3JlbW92ZSgpIGRvZXMgbm8gbG9uZ2VyCisJdHJpZ2dlciBhIGNyYXNoLgorICAgICAgLSBVcGRhdGUgdGhlIGxlbmd0aCBvZiBzeXNPYmplY3RJRCBhcyB3ZWxsIGFzIHRoZSBkYXRhIHdoZW4gaXQgaXMgc2V0CisJZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgIC0gVXNlIHRoZSBzYW1lIGF1dG9jb25mIHN5bWJvbCB0byBkZWNpZGUgYm90aCBpZiBzdHJjYXNlY21wIHNob3VsZCBiZQorCWRlY2xhcmVkIGFuZCBpZiBpdCBzaG91bGQgYmUgZGVmaW5lZC4KKyAgICAgIC0gW0JVRyAxODQwMjMwXTogRG9uJ3QgaW5jbHVkZSB0aGUgaW5kZXggb2JqZWN0IGFzCisJKHBzZXVkby0pYWNjZXNzaWJsZSBjb2x1bW4uCisgICAgICAtIFtCVUcgMzA1ODEwMV06IFdyaXRlYWJsZSAnbG9uZycgaW5zdGFuY2VzIHdvcmsgb24gNjQtYml0IHN5c3RlbXMsCisJYnV0IG5vdCB3cml0YWJsZSAnaW50J3MKKyAgICAgIC0gW0JVRyAzMDYyNTM4XTogRml4IGNvbTJzZWMqIGhhbmRsaW5nIG9mIG5vbi1kZWZhdWx0IGNvbnRleHRzCisgICAgICAtIFtCVUcgMzIwNTc2NV06IGhhbmRsZSByZWNvbmZpZyBmb3IgY2VydFNlY05hbWUgdG9rZW4KKyAgICAgIC0gW0JVRyBdOiBlbmZvcmNlIG1heCBsZW5ndGggb24gVExTIHNlY05hbWUgbWFwcworICAgICAgLSBbQlVHIF06IGVuZm9yY2UgbWF4IGxlbmd0aCBvbiBUTFMgc2VjTmFtZSBtYXBzIGFkZCBwcmlvcml0eSB0bworCXNlY25hbWUgZGVidWdnaW5nCisgICAgICAtIFtQQVRDSCAyMTE5NzI1XTogRml4IHNraXBORlNJbkhvc3RSZXNvdXJjZXMgaGFuZGxpbmcgb2YKKwloclN0b3JhZ2VUYWJsZQorICAgICAgLSBbUEFUQ0ggMjk0MTgxMV06IEhhbmRsZSBzdWNjZXNzZnVsIHJlcXVlc3RzIHdpdGggcmVxSUQgMAorICAgICAgLSBbUEFUQ0ggMjk3NTI1NF06IEF2b2lkIGNhbGxiYWNrIHJlLXVzZSBvZiBjbG9zZWQgc2Vzc2lvbnMgUW46CisJU2hvdWxkIHRoaXMgYWxzbyBiZSBhcHBsaWVkIHdoZW4gbWFpbiBzZXNzaW9uIGlzIE5VTEw/CisgICAgICAtIFtQQVRDSCAzMDUzNDM2XTogZnJvbTogdGFrZXZvczogZml4OiB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MKKwlpbnZhbGlkIG1lbW9yeSBhY2Nlc3MKKyAgICAgIC0gW1BBVENIIDMwNTcwOTBdOiBtYWtlIGV0aHRvb2wgc3VwcG9ydCBvbiBsaW51eCB1c2UgdGhlIGhpZ2ggc3BlZWQKKwlzdHJ1Y3QgaW5mbyBmb3IgMTAwRysuCisgICAgICAtIFtQQVRDSCAzMDU3MDkzXTogYWxsb3cgbGludXggdG8gdXNlIGxpYnBjaSBmb3IgY3JlYXRpbmcgdXNlZnVsCisJaWZEZXNjciBzdHJpbmdzCisgICAgICAtIFtQQVRDSCAzMDk2NzI1XTogRG9uJ3QgcmVnaXN0ZXIgdjFUcmFwIGNhbGxiYWNrLCBpZiBTTk1QdjEgaXMgbm90CisJc3VwcG9ydGVkCisgICAgICAtIFtQQVRDSCAzMDk2NzI1XTogSW5jbHVkZSBTTk1QdjEgdHJhcCBPSURzIGluIG5sbUxvZ05vdGlmaWNhdGlvbklECisJY29sdW1uCisgICAgICAtIFtQQVRDSCAzMTI1OTZdOiBsaXN0ZW4gZm9yIG5ldGxpbmsgY2hhbmdlIGV2ZW50cyBmb3IgdGhlCisJYXJwLXJlbGF0ZWQgdGFibGVzCisgICAgICAtIFtQQVRDSCAzMTUyNDEyXTogSGFuZGxlIChhbmQgcmVwb3J0KSBwcm9ibGVtcyByZWFkaW5nIC9wcm9jL3Ztc3RhdAorICAgICAgLSBbUEFUQ0ggMzIwMzgwNl06IEF2b2lkIHRoYXQgdGhlIG1haW4gYWdlbnQgcHJvY2Vzc2luZyBsb29wIC0gd2hlbgorCXVzaW5nIG1vcmUgdGhhbiBGRF9TRVRTSVpFIGZpbGUgZGVzY3JpcHRvcnMgLSBjYW4gY2F1c2UgbWVtb3J5CisJY29ycnVwdGlvbiBieSBpbnZva2luZyBzZWxlY3QoKS4KKyAgICAgIC0gW1BBVENIIF06IG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlIHRhYmxlcyBmcm9tIFN0ZXBoZW4KKwlIZW1taW5nZXIgYXBwbGllZCBwYXJ0cyAxLTMgb2YgNCBmcm9tIGhpbSAobXNncyB0byBjb2RlcnMgb24KKwkyLzI4LzExOyBzdWJqZWN0IGlwLWZvcndhcmQtbWliIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50czsgcGFydCA0CisJbmVlZHMgbW9yZSB3b3JrCisgICAgICAtIGFkZCBkZWJ1ZyBmb3IgY2VydCBmaW5kIGhpbnQgYXMgc3RyaW5nL2ludAorICAgICAgLSBhZGQgbmV3bHkgY3JlYXRlZC9kZXN0cm95ZWQgaW50ZXJmYWNlcyB0byBpcHY2SWZUYWJsZSBUaGUgbGlzdCBvZgorCWludGVyZmFjZXMgd2FzIG5ldmVyIHJlZnJlc2hlZCwgbm93IGl0IGlzIHJlbG9hZGVkIGV2ZXJ5IHRpbWUgdGhlCisJdGFibGUgaXMgYWNjZXNzZWQuIEkndmUgYWxzbyBmaXhlZCBhIG1lbW9yeSBsZWFrIGFuZCBvcHRpbWl6ZWQgdGhlCisJbG9hZGluZyBvZiB0aGUgbGlzdCBhIGJpdC4KKyAgICAgIC0gY29tMnNlYzYgZGlyZWN0aXZlOiBJZiBjb25maWd1cmUgaGFzIG5vdCBmb3VuZCBnZXRhZGRyaW5mbygpLAorCW5vbi1udW1lcmljIElQdjYgYWRkcmVzc2VzIGRvIG5vdyB0cmlnZ2VyIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgICAtIGRvbid0IHNlY29uZC1ndWVzcyBjYWNoZSBoYW5kbGVyICh3YXZlcyBoYW5kKSB0aGlzIGlzIG5vdCB0aGUKKwlmdW5jdGlvbiB5b3UgYXJlIGxvb2tpbmcgZm9yLiBuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKCkgaXMgbm90IG1lYW50CisJZm9yIG1pYiBtb2R1bGVzCisgICAgICAtIGV4YW1wbGUgTUlCOiBBZGRlZCBzaHV0ZG93biBmdW5jdGlvbiB0aGF0IGZyZWVzIGFsbCBtZW1vcnkgb3duZWQgYnkKKwl0aGlzIE1JQiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIC0gZml4IGRvdWJsZSBmcmVlIGluIFRMUyBlcnJvciBoYW5kbGluZworICAgICAgLSBmaXhlZCB0aGUgYWdlbnQgd3JpdGluZyAnbG9va3MgbGlrZSBhIDY0Yml0IHdyYXAsIGJ1dCBwcmV2IT1uZXcnIGluCisJc3lzbG9nIHdoZW4gY29tcHV0aW5nIGlwU3lzdGVtU3RhdHMgV2l0aG91dCB0aGUgbWVtY3B5LAorCXByZXZfdmFscy0+c3RhdHMgYW5kIG5ld192YWxzLT5zdGF0cyBjb3VsZCBnZXQgZGlmZmVyZW50LCB3aGljaAorCWNvdWxkIG11Y2ggbXVjaCBsYXRlciAod2hlbiBhIGNvdW50ZXIgZ2V0cyBiaWdnZXIgdGhhbiAzMiBiaXRzKQorCXJlc3VsdCBpbiAncHJldiE9bmV3JyBtZXNzYWdlIGluIHN5c2xvZy4gVHlwaWNhbGx5IHRoaXMgaGFwcGVucworCWFmdGVyIGxvbmcgdGltZSBvZiB1cHRpbWUgYW5kIGl0IGlzIHZlcnkgaGFyZCB0byByZXByb2R1Y2UuCisgICAgICAtIGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCW5ldHNubV9zd2luc3RfYXJjaF9pbml0KCkuCisgICAgICAtIGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogUGFzcyBjb3JyZWN0IHBhdGggdG8gcnBtZGJPcGVuKCkgc3VjaAorCXRoYXQgb3BlbmluZyB0aGUgZGF0YWJhc2Ugc3VjY2VlZHMuCisgICAgICAtIGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogUGFzcyBjb3JyZWN0IHBhdGggdG8gcnBtZGJPcGVuKCkgc3VjaAorCXRoYXQgb3BlbmluZyB0aGUgZGF0YWJhc2Ugc3VjY2VlZHMuIGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbToKKwlMb2cgYW4gZXJyb3IgbWVzc2FnZSBpZiBycG1kYk9wZW4oKSBmYWlscy4KKyAgICAgIC0gaW5zdGVhZCBvZiByZWx5aW5nIG9uIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUsIGJyZWFrIG91dCBjZXJ0IHRhYmxlCisJaW5pdHMgdG8gbmV3IGFnZW50IGNlcnQgaW5pdCBmdW5jdGlvbiwgY2FsbGVkIGZyb20gaW5pdF9hZ2VudC4KKyAgICAgIC0gbmV0c25tcF9jYWNoZV9mcmVlKCk6IEEgbW9yZSBkZXRhaWxlZCBtZXNzYWdlIGlzIG5vdyBsb2dnZWQgd2hlbgorCWF0dGVtcHRpbmcgdG8gZnJlZSBhIGNhY2hlIHRoYXQgaXMgc3RpbGwgaW4gdGhlIGNhY2hlIGxpc3QuCisgICAgICAtIHJld29ya2VkIGhyU3RvcmFnZVRhYmxlIHRvIHN1cHBvcnQgbGFyZ2UgZmlsZXN5c3RlbXMuIFRoZQorCWhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyBkb2VzIG5vdCByZXBvcnQgcmVhbCBhbGxvY2F0aW9uIHVuaXQgc2l6ZSwKKwlidXQgc29tZSBjYWxjdWxhdGVkIHZhbHVlIHNvIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyAqCisJaHJTdG9yYWdlU2l6ZSBnaXZlcyByZWFsIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0uIFRoaXMgY2FsY3VsYXRpb24KKwloYXBwZW5zIG9ubHkgd2hlbiBoclN0b3JhZ2VTaXplIGlzIHRvbyBzbWFsbCAoMzJiaXRzKSBmb3IKKwlmaWxlc3lzdGVtIHNpemUsIGUuZy4gZmlsZXN5c3RlbXMgbGFyZ2VyIHRoYW4gOFRCIHdpdGggNDA5NiBieXRlcworCWJsb2NrIHNpemUuIFRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIHR1cm5lZCBvZmYgYnkKKwkncmVhbFN0b3JhZ2VVbml0cycgY29uZmlnIG9wdGlvbi4KKyAgICAgIC0gc2tpcCBub24tQUZfSU5FVCBpbnRlcmZhY2VzIHdoZW4gbG9hZGluZyBpcHY0IGFkZHJzCisgICAgICAtIHNubXBkIGlzIGFnYWluIHNpbmdsZS10aHJlYWRlZC4gW1BBVENIIDI5NTk4MTFdOiBTYWZyYW5lazoKKwlSZWltcGxlbWVudCBMaW51eCBOZXRsaW5rIElQdjYgcHJlZml4IGxpc3RlbmVyLgorICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCIHRhYmxlcyBpbnRyb2R1Y2VkIGJ5IHBhdGNoICMzMDUzNDM2LgorICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCIHRhYmxlcyBpbnRyb2R1Y2VkIGJ5IHBhdGNoICMzMDUzNDM2LiIKKwlbUEFUQ0ggMzA1MzQzNl06IGZyb206IHRha2V2b3M6IGZpeDogdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzCisJaW52YWxpZCBtZW1vcnkgYWNjZXNzIiB0aGUgYnVnIDMwNTM0MzYgaXMgZml4aW5nIHdhcyBpbnRyb2R1Y2VkIGluCisJcjE3NzE5LCBhbmQgZml4ZWQgaW4gcjE3ODYxLgorICAgICAgLSBVc2UgcHJvcGVyIGZvcm1hdCBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cyBmb3IgcHJpbnRpbmcgdmFsdWVzCisJb2YgdHlwZSAnb2lkJy4KKyAgICAgIC0gW1BBVENIIDMwNjY4NjJdOiBmaXggdGhlIGFnZW50IGZvciBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcworCW9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLgorICAgICAgLSBmaXhlZCBoclNXUnVuUGF0aCBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24gTGludXguICAgZmdldHMoKQorCXJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0gc3dhcHBlZCBvdXQpCisJYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCisJL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLgorICAgICAgLSBmaXhlZCByYWNlIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUgVHJlYXQgdGhlIHJlYWRzIGZyb20KKwkvcHJvYy88cGlkPi8qIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQgaW4gdGhlIG1pZGRsZSBvZgorCXByb2Nlc3NpbmcuIChhbHJlYWR5IGZpeGVkIGluIFY1LTUtcGF0Y2hlcyBhbmQgVjUtNC1wYXRjaGVzIGluIFNWTgorCXJldi4gMjAxMTUsIGR1bm5vIHdoeSBJIGRpZCBub3QgcGF0Y2ggdHJ1bmspCisgICAgICAtIHBhdGNoIDMxMzEzOTc6IGZyb20gdGFrZXZvczogaHVnZSBzcGVlZHVwcyBvZiB0aGUgVENQL1VEUCBUYWJsZXMKKyAgICAgIC0gcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28gdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4KKyAgICAgIC0gcGF0Y2ggMzMwNjQ3NjogZnJvbSB0aW55cHlyYW1pZHM6IGZpeCBtZW1vcnkgbGVhayBpbiB0aGUgc3dydW4KKwljb250YWluZXIgbG9hZGluZworICAgICAgLSB1Y2Rfc25tcCBidWlsZHMgYWdhaW4gb24gTWluR1cgYW5kIEN5Z3dpbi4KKyAgICAgIC0gcGF0Y2ggMzMxMDI1MDogZnJvbSBmZW5uZXI6IG1pc2MgZml4ZXMgZm9yIGRlYnVnZ2luZyBvdXRwdXQgb2YKKwlhZ2VudHgKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gRml4ZWQgYSBkb3VibGUgZnJlZSBhdCBleGl0IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBjbGVhbmluZyB1cCB0aGUKKwlkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBGaXhlZCBhIGRvdWJsZSBmcmVlCisJYXQgZXhpdCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkCisJZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gVmFsZ3JpbmQgcmVwb3J0ZWQgdGhhdCBkb3VibGUgZnJlZSBhcworCWZvbGxvd3M6IEludmFsaWQgcmVhZCBvZiBzaXplIDQgYXQgMHg1OUQwNTAxOiBwZXJsX2Rlc3RydWN0IChpbgorCS91c3IvbGliL3Blcmw1LzUuMTIuMS94ODZfNjQtbGludXgtdGhyZWFkLW11bHRpL0NPUkUvbGlicGVybC5zbykgYnkKKwkweDU0NERGOEU6IHNodXRkb3duX3BlcmwgKHNubXBfcGVybC5jOjE2NikgYnkgMHg0MDM5NjY6CisJdGVybV9oYW5kbGVyIChzbm1wdHJhcGQuYzozMTgpIGJ5IDB4NkQ0M0E1RjogPz8/IChpbgorCS9saWI2NC9saWJjLTIuMTEuMi5zbykgQWRkcmVzcyAweDc2NjBmODggaXMgNTYgYnl0ZXMgaW5zaWRlIGEgYmxvY2sKKwlvZiBzaXplIDIsOTEyIGZyZWUnZCBhdCAweDRDMjY0OTY6IGZyZWUgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MzY2KQorCWJ5IDB4NTQ0REY5QTogc2h1dGRvd25fcGVybCAoc25tcF9wZXJsLmM6MTY3KSBieSAweDZEREFERjI6CisJX19zZWxlY3Rfbm9jYW5jZWwgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykgYnkgMHg0MDRFMjA6IG1haW4KKwkoc25tcHRyYXBkLmM6MTI1OCkKKworICAgIGFwcHM6CisgICAgICAtIFtQQVRDSCAzMDU0ODE3XTogQWRkcyBwZXItdmFyaWFibGUgdGltZWQgb3V0cHV0IHN1cHBvcnQgdG8gc25tcHdhbGsKKwl1c2luZyAtQ1QKKyAgICAgIC0gYWRkIHNubXAuY29uZiB0b2tlbnMgZm9yIHRpbWVvdXRzIGFuZCByZXRyaWVzCisKKyAgICBidWlsZDoKKyAgICAgIC0gW0JVRyAzMDg4MzYwXTogRW5zdXJlIHB5dGhvbiBtb2R1bGVzIGFyZSBidWlsdCBhZ2FpbnN0IHRoZSBjb3JyZWN0CisJbGlicmFyaWVzCisKKyAgICBidWlsZGluZzoKKyAgICAgIC0gRml4IC0td2l0aC1zZWN1cml0eS1tb2R1bGVzIGhhbmRsaW5nIEFsbG93IHJlcGVhdGVkIG1vZHVsZXMKKwkodHNtLHRzbSkgYXMgd2VsbCBhcyBkZWZhaWx0IG1vZHVsZXMgKHVzbSkgTW92ZSB0aGUgZ2VuZXJhdGlvbiBvZgorCXRoZSBmaWxlcyBhZnRlciB0aGUgY2hlY2tpbmcKKyAgICAgIC0gTWFrZSBpdCBwb3NzaWJsZSB0byByZWdlbmVyYXRlIHVzaW5nIGF1dG9jb25mIDIuNjguCisgICAgICAtIFNvbWUgc3lzdGVtcyBkbyBub3Qgc3VwcG9ydCB0aGUgLUUgZmxhZyB0byBncmVwLCB1c2UgYXV0b2NvbmYgdG8KKwlmaW5kIHRoZSByaWdodCBlZ3JlcCBhdCBhbGwgdGltZXMuCisgICAgICAtIGNoZWNrIGZvciAvZGV2L2ttZW0gaW5zdGVhZCBvZiBhc3N1bWluZyBpdCBleGlzdHMgYW5kIGhhcmRjb2RpbmcKKwl3aGVuIGl0IGlzIG5vdCB0aGVyZQorCisgICAgbGlibmV0c25tcDoKKyAgICAgIC0gbWFkZSB0aGUgU1NIIHRyYW5zcG9ydCBjb25maWd1cmFibGUgYXMgaXQgc2hvdWxkIGJlLgorCisgICAgbGlibmV0c25tcG1pYnM6CisgICAgICAtIE1ha2UgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZGxtb2QgbW9kdWxlIHRoYXQgZG9uJ3QgaGF2ZSB0byBiZSBwdWJsaWMKKwlzdGF0aWMKIAogICAgIG1pYjJjOgogICAgICAgLSBbUEFUQ0ggMzE3NTMyM106IEZpeCBoYW5kbGluZyBvZiAnd2hpbGUgKGZhbHNlKScgYmxvY2tzCiAgICAgICAtIFtQQVRDSCAzMjA0ODgzXTogRml4IGhhbmRsaW5nIG9mIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlCiAgICAgICAtIFtQQVRDSCAzMjExNDg0XTogU3VwcG9ydCBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzCi0gICAgICAtIE1ha2UgdGhlIG1pYjJjIGZvcmVhY2ggcmFuZ2VzIHdvcmsgYXMgYWR2ZXJ0aXNlZAorICAgICAgLSBtYWtlIHRoZSBtaWIyYyBmb3JlYWNoIHJhbmdlcyB3b3JrIGFzIGFkdmVydGlzZWQgaW4gdGhlIGNvbW1lbnRzLgogCi0gICAgbWliczoKLSAgICAgIC0gW1BBVENIIDI5NzQ3MTZdOiBGaXggaXNzdWVzIGluIHRoZSBTTVVYLU1JQgorICAgIHBhY2thZ2luZzoKKyAgICAgIC0gRW5hYmxlIG1pY3JvLWFuZC1tYWNyby1mZWF0dXJlIG1hbmFnZW1lbnQgd2l0aGluIE5ldC1TTk1QOyB0aGlzCisJYWRkcyBhIG51bWJlciBvZiBuZXcgZmxhZ3MgdG8gY29uZmlndXJlICgtLWVuYWJsZS1taW5pbWFsaXN0IGFuZAorCS0tZW5hYmxlLXJlYWQtb25seSkuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHJlbW92ZSBtdWNoIG9mCisJdGhlIGlubGluZSBjb2RlIHRoYXQgaXNuJ3QgYWx3YXlzIG5lY2Vzc2FyeSBvciBkZXNpcmVkLiBTY3JpcHRzCisJZXhpc3QgKGFuZCB3aWxsIGJlIGltcHJvdmVkKSB0byBzdGlwIG91dCB1bnVzZWQgY29tcG9uZW50cyBmcm9tIHRoZQorCWNvZGUgZW50aXJlbHkgdG8gZW5hYmxlIGEgc2hvcnRlciByZXZpZXcgcHJvY2VzcyBmb3IgdXBncmFkaW5nIHRvCisJbmV3IHJlbGVhc2VzLiBUaGlzIHdvcmsgd2FzIGRvbmUgYnkgV2VzIEhhcmRha2VyIGFuZCBNaWNoYWVsIEJhZXIKKwlmcm9tIFNQQVJUQSwgSW5jLiBidXQgaXMgYmVpbmcgY2hlY2tlZCBpbiBhcyBhIGxhcmdlIHBhdGNoIHNpbmNlCisJY29udmVydGluZyB0aGUgbWljcm8gcGF0Y2hlcyBmcm9tIGdpdCB0byBzdm4gdHVyZW5kIG91dCB0byBiZQorCWltcG9zc2libGUKKworICAgIHBhdGNoIDMxNDA4MzM6CisgICAgICAtIGZpeCBwcm94eSBHRVRORVhUIHJlcXVlc3RzIFdoZW4gT0lEcyByZXF1ZXN0ZWQgYXJlIGJlbG93IHRoZSBwcm94eQorCXJlcXVlc3QgcmVtYXAsIHdlIG5lZWQgdG8gbm90IGluY2x1ZGUgYW55IE9JRHMgdGhhdCBtaWdodCBiZSBpbiB0aGUKKwlzcGFjZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBPSUQgYW5kIHRoZSByZW1hcHBlZCBPSUQuIFRoaXMgcGF0Y2gKKwlmdWRnZXMgdGhlIHJlcXVlc3Qgc28gdGhhdCBpdCBmaXhlcyB0aGUgcmVxdWVzdCBPSUQgc28gaXQncyBqdXN0CisJYmVmb3JlIHRoZSByZW1hcHBlZCBwcm94eSByYW5nZS4KKworICAgIHBhdGNoIDMxODQwMjY6CisgICAgICAtIEF2b2lkIGNvbnN0YW50IHJlZnJlc2ggb2YgaW50ZXJmYWNlIHN0YXRpc3RpY3MKIAogICAgIHBlcmw6Ci0gICAgICAtIFtQQVRDSCAzMDQ2MzcxXTogRml4IG1lbW9yeSBsZWFrIGluIFNOTVB2MSB0cmFwIGhhbmRsaW5nCi0gICAgICAtIFtQQVRDSCAzMDQ5MDI5XTogRml4IGEgbWVtb3J5IGxlYWsgd2l0aCBzbm1wIGJ1bGt3YWxrcwotICAgICAgLSBEb24ndCBhbHdheXMgb3BlbiBzdGRlcnIgYXMgdGhlIGNhbGxzIHRvIHNubXBfbG9nIGFscmVhZHkgZG8gdGhpcwotICAgICAgICAgICBhbmQgaXQgbWVzc2VzIHVwIHRoZSBhZ2VudCB3aGVuIGVtYmVkZGVkCi0gICAgICAtIEhhbmRsZSBlbWJlZGRlZCAlJ3MgaW4gdGhlIHJlc3VsdCBtZXNzYWdlLgorICAgICAgLSBwYXRjaCAzMDQ5MDI5OiBmcm9tIGZlbm5lYzogZml4IGEgbWVtb3J5IGxlYWsgd2l0aCBzbm1wIGJ1bGt3YWxrcworICAgICAgLSBwYXRjaCBmcm9tIE1hcnRpbiBCdWNrOiBkb24ndCBhbHdheXMgb3BlbiBzdGRlcnIgYXMgdGhlIGNhbGxzIHRvCisJc25tcF9sb2cgYWxyZWFkeSBkbyB0aGlzIGFuZCBpdCBtZXNzZXMgdXAgdGhlIGFnZW50IHdoZW4gZW1iZWRkZWQKIAogICAgIHB5dGhvbjoKLSAgICAgIC0gW0JVRyAzMDg4MzYwXTogRW5zdXJlIG1vZHVsZXMgYXJlIGJ1aWx0IGFnYWluc3QgdGhlIGNvcnJlY3QgbGlicmFyaWVzCi0gICAgICAtIFtCVUcgMzI5NTQwN106IEZpeCBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIKLSAgICAgIC0gW1BBVENIIDMwMzUzMjhdOiBDaGVjayBmb3IgZmFpbHVyZXMgaW4gY3JlYXRpbmcgYSBzZXNzaW9uCi0gICAgICAtIFtQQVRDSCAzMDM1NTc4XTogS2VlcCBlcnJvciBjb2RlcyB1cCB0byBkYXRlCiAgICAgICAtIFtQQVRDSCAzMTg1MDg1XTogRml4IHNlZ2ZhdWx0IG9uIDY0LWJpdCBzeXN0ZW1zCisgICAgICAtIFtCVUcgMzI5NTQwN106IEZpeCBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIKIAogICAgIHRlc3Rpbmc6Ci0gICAgICAtIFN1cHBvcnQgZHluYW1pYyBhbmFseXNpcyBvZiByZWdyZXNzaW9uIHRlc3RzCisgICAgICAtIEFkZCBtaXNzaW5nIHByZWNvbmRpdGlvbnMKKyAgICAgIC0gQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4gQWRkZWQgZGVjbGFyYXRpb24KKwlmb3IgdGhlIGZ1bmN0aW9uIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYworCWFnZW50IGhlYWRlciBmaWxlLiBGaXhlZCBtZW1vcnkgbGVhayBpbgorCW5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4gRml4ZWQgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5CisJdW5yZWdpc3RlcmluZyBhIHRhYmxlIGhhbmRsZXIuIFVuaXQgdGVzdHMgY2FuIG5vdyBpbnZva2UgZnVuY3Rpb25zCisJZnJvbSBsaWJhZ2VudC4KKyAgICAgIC0gQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4gQWRkZWQgZGVjbGFyYXRpb24KKwlmb3IgdGhlIGZ1bmN0aW9uIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYworCWFnZW50IGhlYWRlciBmaWxlLiBGaXhlZCBtZW1vcnkgbGVhayBpbgorCW5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4gRml4ZWQgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5CisJdW5yZWdpc3RlcmluZyBhIHRhYmxlIGhhbmRsZXIuIFVuaXQgdGVzdHMgY2FuIG5vdyBpbnZva2UgZnVuY3Rpb25zCisJZnJvbSBsaWJhZ2VudC4gQWRkZWQgdW5pdCB0ZXN0IGZvciB0YWJsZV9kYXRhc2V0LgorICAgICAgLSBBZGRlZCBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkgdW5pdCB0ZXN0LgorICAgICAgLSBBZGRlZCBuZXRzbm1wX21pYl9oYW5kbGVyLmRhdGFfY2xvbmUsIGEgZnVuY3Rpb24gcG9pbnRlciB0aGF0CisJZGVmaW5lcyBob3cgdG8gY2xvbmUgbmV0c25tcF9taWJfaGFuZGxlci5teXZvaWQuIE11c3QgYmUgZGVmaW5lZCBpZgorCWFuZCBvbmx5IGlmIGRhdGFfZnJlZSBpcyBzZXQuIFRoZSBmdW5jdGlvbiBuZXRzbm1wX2hhbmRsZXJfZHVwKCkKKwlkb2VzIG5vdyBjbG9uZSBNSUIgaGFuZGxlciBwcml2YXRlIGRhdGEgaWYgZGF0YV9jbG9uZSgpIGlzIHNldC4KKwlQcmV2aW91c2x5IGFmdGVyIGR1cGxpY2F0aW5nIGEgTUlCIGhhbmRsZXIgYW5kIHVucmVnaXN0ZXJpbmcgb25lIG9mCisJdGhlIHR3byBNSUIgaGFuZGxlcnMsIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciAobXl2b2lkKSBvZiB0aGUKKwlvdGhlciBiZWNhbWUgYSBkYW5nbGluZyBwb2ludGVyLiBOb3RlOiBhZGRpdGlvbiBvZgorCW5ldHNubXBfbWliX2hhbmRsZXIuZGF0YV9jbG9uZSBpcyBhbiBBQkkgY2hhbmdlLiBhZGRlZCBtb3JlIHRlc3QKKwljYXNlcyB0byB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gdGVzdC4KKyAgICAgIC0gR2VuZXJhdGUgYSBub3JtYWwgI2xpbmUgZGlyZWN0aXZlIGFzIHBlciBDOTkgaW5zdGVhZCBvZiB0aGUKKwljb21waWxlci1zcGVjaWZpYyAjPG4+LWRpcmVjdGl2ZS4KKyAgICAgIC0gSW50cm9kdWNlZCBuZXcgdGVzdCB0eXBlIG5leHQgdG8gY2FwcCBhbmQgY2xpYjogY2FnZW50bGliLgorICAgICAgLSBJdCBpcyBhZ2FpbiBwb3NzaWJsZSB0byBydW4gYW4gaW5kaXZpZHVhbCB0ZXN0IHZpYSB0aGUgc2NyaXB0CisJdGVzdGluZy9SVU5URVNUUy4KKyAgICAgIC0gSXQgaXMgbm93IHBvc3NpYmxlIHRvIGFuYWx5emUgdGhlIHVuaXQgdGVzdHMgd2l0aCBWYWxncmluZCBieQorCXNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBTTk1QX1NBVkVfVE1QRElSIGFuZAorCURZTkFNSUNfQU5BTFlaRVIuIEFuIGV4YW1wbGU6IChleHBvcnQgU05NUF9TQVZFX1RNUERJUj15ZXMKKwlEWU5BTUlDX0FOQUxZWkVSPSJ2YWxncmluZCAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLWxlYWstY2hlY2s9ZnVsbCI7CisJY2QgdGVzdGluZyAmJiAuL1JVTkZVTExURVNUUyAtZyB1bml0LXRlc3RzKQorICAgICAgLSBUZXN0IDcxIChjb20yc2VjNl9zaW1wbGUpIGRvZXMgbm93IHN1Y2NlZWQgZXZlbiBpZiBJUHY2IEROUworCXJlc29sdXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgIC0gVGVzdCBUMDMwIGRvZXMgbm93IHBhc3Mgb24gTWluR1cuCisgICAgICAtIGF1dG8tY3JlYXRlIHVzZXIgc3BlY2lmaWVkIFNOTVBfVE1QRElSIGFuZCBTTk1QX1RNUF9QRVJTSVNURU5URElSCisJdG9vOyBkZWZhdWx0IFNOTVBfVE1QX1BFUlNJU1RFTkRJUiBiYXNlZCBvbiBTTk1QX1RNUERJUiBmb3IgdXNlcgorCXNwZWNpZmllZCBTTk1QX1RNUERJUgorCisgICAgbWFuOgorICAgICAgLSBbQlVHIDMxOTA3MjVdOiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQKKwlzbm1wX2FzeW5jX3NlbmQKKworICAgIEdlbmVyaWM6CisgICAgICAtIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgc3RhdGljIGFwcGxpY2F0aW9ucyB1c2luZyBuZXQtc25tcC1jb25maWcKKwlhbmQgdGhlIC0qbGlicyBmbGFncyBvbmNlIG1vcmUuCisgICAgICAtIFtCVUcgMzEwMjkwNF06IEFsbCBOZXQtU05NUCBDIHNvdXJjZSBmaWxlcyBhcmUgbm93IGNvbXBpbGVkIHdpdGgKKwktZm5vLXN0IHJpY3QtYWxpYXNpbmcsIGF0IGxlYXN0IGlmIHRoZSBjb25maWd1cmVkIGNvbXBpbGVyIHN1cHBvcnRzCisJdGhpcyBmbGFnLgorICAgICAgLSBbUEFUQ0ggMzA3NDkxOF06IGZyb20gd2Vpemhlbmc6IGNoZWNrIGZvciBDT05UQUlORVJfSU5TRVJUIGZhaWx1cmVzCisJYW5kIHJlYWN0IGFwcHJvcHJpYXRlbHkgdG8gYXZvaWQgbWVtb3J5IGxlYWtzCisgICAgICAtIFtQQVRDSCAzMTY3MzI1XTogZnJvbSBrcmlzenRvZm9ybzogVUNELVNOTVAvU3lzdGVtU3RhdHM6IGFkZAorCXZhcmlhYmxlcyB0byByZXBvcnQgY3B1c3RlYWwsIGNwdWd1ZXN0LCBjcHVndWVzdG5pY2UKKworICAgIEN5Z3dpbjoKIAogICAgIExpbnV4OgotICAgICAgLSBbUEFUQ0ggMzA3NDkxOF06IGNoZWNrIGZvciBDT05UQUlORVJfSU5TRVJUIGZhaWx1cmVzCiAgICAgICAtIFtQQVRDSCAzMDgzMDI3XTogRml4IFJQTSBzcGVjIGZpbGUgdG8gc3VwcG9ydCBDZW50T1MKLSAgICAgIC0gW1BBVENIIDMxNTI0MTJdOiBIYW5kbGUgKGFuZCByZXBvcnQpIHByb2JsZW1zIHJlYWRpbmcgL3Byb2Mvdm1zdGF0Ci0gICAgICAtIEZpeCBhIHN0cmxlbiBjYWxjdWxhdGlvbiBpbiBJRi1NSUIgc3VwcG9ydAotICAgICAgLSBGaXhlZCBoclNXUnVuUGF0aCBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMKLSAgICAgIC0gRml4ZWQgdmFsdWUgb2YgSVAtTUlCOjppcHY2SW50ZXJmYWNlRm9yd2FyZGluZwotCi0gICAgTmV0QlNEOgotICAgICAgLSBEcmFnb25GbHkgc3VwcG9ydAotICAgICAgLSBSZXRyaWV2ZSBNSUItSUkgbmV0d29yayBzdGF0aXN0aWNzIHZpYSBzeXNjdGwKLSAgICAgIC0gVXBkYXRlIG1lbW9yeSBhbmQgQ1BVIHN0YXRpc3RpY3MgaGFuZGxpbmcKLQotICAgIE9wZW5CU0Q6Ci0gICAgICAtIFN1cHBvcnQgdXBkYXRpbmcgdGhlIHJvdXRpbmcgdGFibGUgW0Zyb20gT3BlbkJTRCBwYXRjaCBhcmNoaXZlXQotCi0gICAgV2luMzI6Ci0gICAgICAtIFtQQVRDSCAzMjkzODQyXTogRWxpbWluYXRlIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNyBjaGFyYWN0ZXJzCi0gICAgICAtIEF2b2lkIE1TVkMgd2FybmluZyBhYm91dCByZWRlZmluaW5nIEVBRERSSU5VU0UKLSAgICAgIC0gRml4IG91dC1vZi1yYW5nZSBhcnJheSBhY2Nlc3NlcyBlcnJvcnMgaW4gbWliSUkgaW50ZXJmYWNlcyB0YWJsZQotICAgICAgLSBGaXggdGVzdCBUMDMwIG9uIE1pbkdXLgotICAgICAgLSBGaXggdGVzdCBUMjAwIGZhaWx1cmVzIG9uIGtub3duIE1pY3Jvc29mdCBTTk1QIGV4dGVuc2lvbiBETEwgYnVncwotICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayBpbiB0aGUgaW50ZXJuYWwgKG5vbi13aW5FeHRETEwpIGlwTmV0VG9NZWRpYVRhYmxlCi0gICAgICAtIEhhbHQgc25tcGQgcHJvY2VzcyBvbiBrZXkgcHJlc3Mgd2hlbiBydW4gZnJvbSBhIGNvbW1hbmQgcHJvbXB0Ci0gICAgICAgICAgKFRvIGFpZCBkZWJ1Z2dpbmcgc25tcGQuZXhlKQorICAgICAgLSBbUEFUQ0ggMzIwNTgxMV06IE9wdGlvbiB0byBza2lwIGZkL2xvb3AvcmFtIGRldmljZXMgaW4gZGlza0lPVGFibGUKKyAgICAgIC0gYWdlbnQ6IGlwTmV0VG9QaHlzaWNhbFRhYmxlOiBEbyBub3QgbG9nIGFuIGVycm9yIG1lc3NhZ2UgaWYgb25lIG9yCisJbW9yZSBpbnRlcmZhY2VzIGFyZSBwcmVzZW50IHRoYXQgZG8gbm90IGhhdmUgc3VjaCBpbmZvcm1hdGlvbgorCShOVURfTk9BUlApLCBlLmcuIHR1bm5lbHMuIFJlcG9ydGVkIGJ5IFN0ZXBoZW4gSGVtbWluZ2VyLiBTZWUgYWxzbworCXBhdGNoICMzMTA3MDAzLgorICAgICAgLSBzbm1wZCBpcyBhZ2FpbiBzaW5nbGUtdGhyZWFkZWQuCiAKICAgICBNaW5HVzoKLSAgICAgIC0gTWFrZSByZWdyZXNzaW9uIHRlc3RzIGluZGVwZW5kZW50IG9mIHJlZ2lzdHJ5IHNldHRpbmdzCi0gICAgICAtIFVzZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGhlYWRlciBmaWxlIHVuZGVyIFdpbkdXCisgICAgICAtIE1hZGUgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUgTmV0LVNOTVAgdmFyaWFibGVzCisJZGVmaW5lZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5CisJYWZ0ZXIgdGhlIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKSBoYWQgYmVlbiBpbnN0YWxsZWQgZG8gbm93CisJcGFzcy4KKyAgICAgIC0gY29uZmlndXJlOiBEZXRlY3Rpb24gb2YgdGhlIGZ1bmN0aW9ucyBnYWlfc3RyZXJyb3IoKSwKKwlnZXRhZGRyaW5mbygpLCBnZXRob3N0YnluYW1lKCkgYW5kIGdldGhvc3RuYW1lKCkgZG9lcyBub3cgc3VjY2VlZC4KKyAgICAgIC0gdGVzdGluZzogSWYgdGhlIGFnZW50IGhhcyBiZWVuIGFza2VkIHRvIHN0b3AsIHdhaXQgdW50aWwgdGhlIHNubXBkCisJcHJvY2VzcyBkaXNhcHBlYXJlZCBiZWZvcmUgcHJvY2VlZGluZy4KKyAgICAgIC0gVGVzdHMgMDI1IGFuZCAwMjYgcGFzcyBvbiBNaW5HVyBldmVuIGlmIHdpbkV4dERMTCBoYXMgYmVlbiBlbmFibGVkLgogCi0gICAgICAKLSogNS40LjMgKgorICAgIE5ldEJTRDoKKyAgICAgIC0gRHJhZ29uRmx5IHN1cHBvcnQgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCisKKyAgICBPcGVuQlNEOgorICAgICAgLSBVcGRhdGUgU1dSdW4gY29kZSB0byB1c2Uga3ZtX2dldHByb2MyIFtGcm9tIE9wZW5CU0QgcGF0Y2ggYXJjaGl2ZV0KKworICAgIFdpbjMyOgorICAgICAgLSBBdm9pZCB0aGF0IE1TVkMgcmVwb3J0cyBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dCByZWRlZmluaXRpb24gb2YgdGhlCisJbWFsbG9jKCkgbWFjcm8gZHVyaW5nIGJ1aWxkaW5nIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZS4KKyAgICAgIC0gRGVwcmVjYXRlZCBsaWJzbm1wLmRlZiAtIGFkZCBORVRTTk1QX0lNUE9SVCB0byBmdW5jdGlvbgorCWRlY2xhcmF0aW9ucyBpbnN0ZWFkIHRvIGV4cG9ydCBhIGZ1bmN0aW9uIGZyb20gbmV0c25tcC5kbGwuCisgICAgICAtIEd1YXJkIG5ldHNubXBfdWRwX3JlY3Zmcm9tKCkgZXRjLiBkZWNsYXJhdGlvbnMgY29uc2lzdGVudGx5LiBCdWlsZHMKKwl3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMC4KKyAgICAgIC0gSW50cm9kdWNlZCBuZXRzbm1wX3BpZF90LiBFbGltaW5hdGVkIGNhc3RzIGJldHdlZW4gaW50IGFuZCBIQU5ETEUKKwlpbiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMgYW5kCisJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMuCisgICAgICAtIFdoZW4gc25tcGQuZXhlIGlzIHN0YXJ0ZWQgaW4gYSBjb21tYW5kIHByb21wdCB3aW5kb3csIHRoZSBzbm1wZAorCXByb2Nlc3Mgbm93IHN0b3BzIHVwb24gdGhlIGZpcnN0IGtleSBwcmVzcy4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8KKwlkZWJ1ZyBzbm1wZC5leGUgZm9yIG1lbW9yeSBsZWFrcy4KKyAgICAgIC0gW1BBVENIIDMwODUxODddOiBCdWlsZGluZyB2aWEgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHByb2plY3QKKwlmaWxlICguZHN3Ly5kc3ApIHdvcmtzIGFnYWluLgorICAgICAgLSBbUEFUQ0ggMzI5Mzg0Ml06IEVsaW1pbmF0ZSByZWdpc3RyeSBhcmd1bWVudCBsaW1pdCBvZiAxMjcKKwljaGFyYWN0ZXJzICh0aGlzIGxpbWl0YXRpb24gd2FzIHJlcG9ydGVkIGJ5IFN5bHZhaW4gRGVyeSkuCisgICAgICAtIGJ1aWxkaW5nOiBBdm9pZCB0aGF0IE1TVkMgMjAxMCBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQKKwlyZWRlZmluaW5nIEVBRERSSU5VU0UuCisgICAgICAtIGJ1aWxkaW5nOiBCdWlsZHMgbm93IGNvcnJlY3RseSB3aXRoIGEgNjQtYml0IGNvbXBpbGVyLgorICAgICAgLSBidWlsZGluZzogYmF0Y2ggYnVpbGQgd2l0aCBPcGVuU1NMIGVuYWJsZWQgYW5kIHdpdGggcmVjZW50IE9wZW5TU0wKKwlkZXZlbG9wbWVudCBmaWxlcyB3b3JrcyBhZ2Fpbi4KKyAgICAgIC0gaGVhZGVyIGZpbGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYW4gbm93IGJlIHVzZWQgaW4gdGhlCisJTWluR1cgZW52aXJvbm1lbnQuCisgICAgICAtIHRlc3Rpbmc6IEF2b2lkIHRoYXQgVDIwMCBmYWlscyBvbiBrbm93biBNaWNyb3NvZnQgU05NUCBleHRlbnNpb24KKwlETEwgYnVncy4KKyAgICAgIC0gQnVpbGQgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jIG9ubHkgaWYKKwlORVRTTk1QX0VOQUJMRV9JUFY2IGhhcyBiZWVuIGRlZmluZWQuCisgICAgICAtIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbgorCW9mIHRoZSBNSUItSUkgaXBOZXRUb01lZGlhVGFibGUuCisgICAgICAtIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvOiBMaW5rIHdpdGggZ2RpMzIubGliIGlmIE9wZW5TU0wgaGFzIGJlZW4KKwllbmFibGVkIGJlY2F1c2UgZ2RpMzIubGliIGlzIGEgZGVwZW5kZW5jeSBvZiBPcGVuU1NMLgorCisqNS42KgogCiAgICAgc25tcGxpYjoKLSAgICAgIC0gW0JVRyAyODM4MjQzXTogQ29ycmVjdCB0aGUgb3V0cHV0IG9mIHVuc2lnbmVkIHZhbHVlcy4KLSAgICAgIC0gW0JVRyAyOTE5MzIwXTogQXZvaWQgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeQorICAgICAgLSBBZGQgY29uc3QgZGVjbGFyYXRpb25zIHRvIHRoZSBkaXNhYmxlZCB2ZXJzaW9ucyBvZiB0aGUgZGVidWdnaW5nCisJY29kZSBhcyB3ZWxsLgorICAgICAgLSBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLgorICAgICAgLSBBZGQgbWlzc2luZyBzeW1ib2wgbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbiwgbWFrZQorCW5ldHNubXBfc25tcFNTSERvbWFpbiBjb25zdC4KKyAgICAgIC0gQ2hhbmdlIG9pZCB0byBiZSBhIDMyLWJpdCB0eXBlIG9uIElMUDY0IGFuZCBMUDY0IHBsYXRmb3Jtcy4KKyAgICAgIC0gQ2hhbmdlIHRoZSBwYXJzaW5nIG9mIHJhbmdlcyB0byBhY2NlcHQgYWxsIHZhbGlkIHZhbHVlcy4KKyAgICAgIC0gQ29ycmVjdCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLiBSZW1vdmUgdW5uZWNlc3NhcnkKKwlpbmNsdWRlcy4KKyAgICAgIC0gQ29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgX19jcGx1c3BsdXMgd2hlbiBjaGVja2luZyBpZiB0aGUgZmlsZQorCXNob3VsZCBiZSB3cmFwcGVkIGluIGV4dGVybiAiQyIuCisgICAgICAtIERvIG5vdCByZXF1aXJlIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgaW5jbHVkZWQuCisgICAgICAtIEZpeCBhZ2VudCBjcmFzaCB3aGVuIHNlbmRpbmcgZW5jcnlwdGVkIFNOTVB2MyB0cmFwcy4gUmVwb3J0ZWQgYnkKKwlTcmlrYXBpbGFuIEdhbmRoaQorICAgICAgLSBGaXggcmVzcG9uZGluZyB0byBicm9hZGNhc3QgcmVxdWVzdHMuIFVEUCByZXNwb25zZXMgYXJlIHNlbnQgd2l0aAorCXNvdXJjZSBJUCBhZGRyZXNzIHdoaWNoIHdhcyBkZXN0aW5hdGlvbiBvZiBhcHByb3ByaWF0ZSByZXF1ZXN0cworCShpbXBsZW1lbnRlZCBpbiBTVk4gcmV2LiAxNTIxNSkuIEJ1dCBpZiB0aGUgZGVzdGluYXRpb24gb2YgYQorCXJlcXVlc3QgaXMgYnJvYWRjYXN0IElQIGFkZHJlc3MsIHRoZSByZXF1ZXN0IHdhcyBzZW50IHdpdGggdGhlCisJYnJvYWRjYXN0IGFkZHJlc3MgYXMgc291cmNlLiBzZW5kbXNnKCkgb24gTGludXggZG9lcyBub3Qgc3VwcG9ydAorCXRoaXMgYW5kIHJldHVybnMgZXJyb3IgLT4gcmVzcG9uc2UgaXMgbm90IHNlbnQuIEluIG9yZGVyIHRvIHNlbmQKKwlyZXNwb25zZXMgZnJvbSB0aGUgc2FtZSBpbnRlcmZhY2UsIGludGVyZmFjZSBpbmRleCBvZiB0aGUKKwlhcHByb3ByaWF0ZSBpbnRlcmZhY2UgbXVzdCBiZSB1c2VkLgorICAgICAgLSBJbnN0YWxsIGxpYnJhcnkvb2lkLmguIFRoYW5rcyB0byAiVG9tYXN6IExpcyIgd2hvIHNwb3R0ZWQgdGhlIGJ1Zy4KKyAgICAgIC0gTWFrZSB0aGUgY29udGV4dCBhcmd1bWVudCBvZiBzZW5kX3YzdHJhcCwKKwlzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQgYW5kIG5ldHNubXBfc2VuZF90cmFwcyByZWZlciB0byBhIGNvbnN0CisJY2hhciouCisgICAgICAtIE1ha2UgdGhlIG5hbWUgYXJndW1lbnQgdG8gZmluZF92YXJiaW5kX2luX2xpc3QgY29uc3QKKyAgICAgIC0gUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisgICAgICAtIFJlbW92ZSBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZXhpc3Qgb3IgYXJlIGRlY2xhcmVkCisJZWxzZXdoZXJlLgorICAgICAgLSBSZW1vdmUgdGhlIG9pZCB0eXBlZGVmIGZyb20gPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPi4gSXQgaXMgc3RpbGwKKwlwcmVzZW50IGluIDxuZXQtc25tcC90eXBlcy5oPiwgdXNlIHRoYXQgZmlsZS4KKyAgICAgIC0gUmVwbGFjZSB0aGUgZGVidWdnaW5nIGZ1bmN0aW9ucyB3aXRoIGR1bW1pZXMgd2hlbiBkZWJ1Z2dpbmcgaXMKKwlkaXNhYmxlZC4KKyAgICAgIC0gUmV2ZXJ0IDE3ODA4LCBpbnN0ZWFkIGZhY3RvciBvdXQgdGhlIGRlY2xhcmF0aW9uIG9mIG9pZCB0byBpdCdzIG93bgorCWZpbGUgYW5kIGluY2x1ZGUgdGhhdCBmaWxlIGZyb20gYm90aCB0eXBlcy5oIGFuZCBhc24xLmgKKyAgICAgIC0gVXNlIGEgdm9pZCBhcmd1bWVudCBmb3IgdGhlIGRhdGEgYXJndW1lbnQgb2YgeGR1bXAuCisgICAgICAtIFtCVUcgMjkxOTMyMF06IEF2b2lkIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgUmVwb3J0ZWQgYnkgVG9tYXN6IExpcwogICAgICAgLSBbQlVHIDI5MjIzOTBdOiBGaXggdGVzdCBmb3IgbWlzc2luZyBjb250ZXh0TmFtZSBwYXJhbWV0ZXIKLSAgICAgIC0gW1BBVENIIDIwNDMwMThdOiBmaXggcmVjdmZyb20gaGFuZ3MKLSAgICAgIC0gW1BBVENIIDIyNTgyMjldOiBSZW1vdmUgbWlzbGVhZGluZyBjb21tZW50Ci0gICAgICAtIFtQQVRDSCAyNDc5NzAwXTogRml4IHpvbmVkIElQIGFkZHJlc3MgdXNlZCBhcyB0YWJsZSBpbmRpY2VzCi0gICAgICAtIFtQQVRDSCAyNDkyMzc3XTogRml4IHR5cG8vYnVnIGluIHNubXBfZW5hYmxlX2NhbGxiYWNrKCkKLSAgICAgIC0gW1BBVENIIDI1MDU0ODhdOiBGaXggYWxhcm0gYmVoYXZpb3VyIG9uIGxhcmdlIGNsb2NrIHNrZXdzCi0gICAgICAtIFtQQVRDSCAyNTM4MTY5XTogUHJldmVudCBpbmZpbml0ZSByZXRyaWVzIGZvciBpbnZhbGlkIGVycm9yLWluZGV4Ci0gICAgICAtIFtQQVRDSCAyNjg4MzQ1XTogRml4IG5ldHNubXBfYXNzZXJ0KCkgZm9yIFZpc3VhbCBTdHVkaW8KLSAgICAgIC0gW1BBVENIIDI2ODkzNjJdOiBGaXggaGFuZGxpbmcgb2YgSVB2NiBob3N0bmFtZXMKLSAgICAgIC0gW1BBVENIIDI3MTM4NDFdOiBGaXggcnVudGltZSBlcnJvcnMgdHJpZ2dlcmVkIGJ5IGhpZ2gtQVNDSUkgY2hhcnMKLSAgICAgIC0gW1BBVENIIDI3ODA0MTFdOiBGaXggY29tcGlsZXIgd2FybmluZ3MKLSAgICAgIC0gW1BBVENIIDI3OTcyNTFdOiBGaXggbWVtb3J5IGxlYWtzCi0gICAgICAtIFtQQVRDSCAyODcxNzQ3XTogRml4IG1lbW9yeSBsZWFrIGluIE9JRCBwcm9jZXNzaW5nCi0gICAgICAtIFtQQVRDSCAyOTUyMTQwXTogT3ZlcmZsb3cgY291bnRlcjMyIGFuZCBnYXVnZTMyCi0gICAgICAtIFtQQVRDSCAyOTUyMDM0XTogUmV0dXJuIG9mIHRoZSBHcmVhdCBTdVNFICdzcHJpbnRmJyBIdW50Ci0gICAgICAtIENoYW5nZSB0aGUgcGFyc2luZyBvZiByYW5nZXMgdG8gYWNjZXB0IGFsbCB2YWxpZCB2YWx1ZXMKLSAgICAgIC0gRW5zdXJlIE9fQ1JFQVRFIG1hc2sgaXMgYWx3YXlzIHNwZWNpZmllZAotICAgICAgLSBGaXggZXh0ZXJuICJDIiB3cmFwcGluZwotICAgICAgLSBNYWtlIC1MTiBzdG9wIGR1bXBpbmcgY29yZS4KLSAgICAgIC0gTWFrZSBiYWQgZGVidWcgbGV2ZWxzIHJlcG9ydCB0aGUgb2ZmZW5kaW5nIHN5bWJvbAotICAgICAgLSBSZW1vdmUgaW5saW5lIGRlY2xhcmF0aW9ucyBmb3Igbm9uLWlubGluZSBkZWZpbmVkIGZ1bmN0aW9ucworICAgICAgLSBbUEFUQ0ggMjg3MTc0N106IHBsdWcgbWVtb3J5IGxlYWsgaW4gT0lEIHByb2Nlc3NpbmcuIFRoZSBtZW1vcnkKKwlsZWFrZWQgd2hlbiBzbWFsbCBPSUQsIHdoaWNoIGNvdWxkIGZpdCBwcmUtYWxsb2NhdGVkIHZwLT5uYW1lX2xvYywKKwl3YXMgcGxhY2VkIGluIGRpZmZlcmVudCAoYWxsb2NhdGVkKSBvbmUuCisgICAgICAtIFtQQVRDSCAyOTQyOTQwXTogQWRkIGEgbmV3IGZ1bmN0aW9uLCBuZXRzbm1wX3BhcnNlX2FyZ3MsIHRoYXQgaXMKKwlsaWtlIHNubXBfcGFyc2VfYXJncyBidXQgdGFrZXMgYW4gYWRkaXRpb25hbCBiaXRtYXNrLCBmbGFncywgdG8KKwlhZmZlY3QgdGhlIGJlaGF2aW91ci4gQWxzbyByZW1vdmUgdGhlIG1hZ2ljIGhhbmRsaW5nIG9mIHNvbWUKKwlhcHBsaWNhdGlvbiBuYW1lcy4KKyAgICAgIC0gW1BBVENIIDI5NzEyNzBdOiByZWZ1c2UgdG8gcGFyc2UgQVNOLjEgdG9rZW5zIHdpdGggd3JvbmcgdHlwZQorCWZpZWxkLiBUaGlzIG1heSB5aWVsZCB0byBwcm9ibGVtcyB3aXRoIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucworCXdoaWNoIG1heSBkZXBlbmQgb24gcGFyc2luZyB1Z2x5IEFTTi4xIGRhdGEgLSB3ZSdsbCBzZWUuLi4KKyAgICAgIC0gYWRkIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyBhbmQgU3RvcmFnZVR5cGUgdmFyYmluZHMgLSBhbHNvCisJcmVtb3ZlIHNvbWUgZHVwbGljYXRlIGNvZGUgYW5kIGZpeCBjb21tZW50cyBpbmRlbnQgbWFuZ2xlZAorICAgICAgLSBhZGQgZnVuY3Rpb25zIHRvIHJlbW92ZSBsaXN0L3JvdyBkYXRhIGZyb20gcmVxdWVzdCBsaXN0CisgICAgICAtIGFkZCBpbnRlcmZhY2UgZm9yIGR1cGxpY2F0aW5nIGEgY29udGFpbmVyCisgICAgICAtIGFkZCBpbnRlcmZhY2UgZm9yIGR1cGxpY2F0aW5nIGEgY29udGFpbmVyIGNvbnRhaW5lciBjaGFuZ2VzOiBhZGQKKwlmbGFncyBmaWVsZCB0byBjb250YWluZXIgbWV0YS1kYXRhOyBjaGcgYmluYXJ5X2FycmF5IGNvbnRhaW5lciB0bworCXVzZSBjb250YWluZXIgbWV0YS1kYXRhIGZsYWdzCisgICAgICAtIGFkZCByZW1vdmUgZnVuY3Rpb24gdG8gY29udGFpbmVyIGl0ZXJhdG9yOyBpbXBsZW1lbnQgaXQgZm9yCisJYmluYXJ5X2FycmF5CisgICAgICAtIGFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9tYWxsb2MoKSwgbmV0c25tcF9jYWxsb2MoKSwKKwluZXRzbm1wX3JlYWxsb2MoKSwgbmV0c25tcF9zdHJkdXAoKSBhbmQgbmV0c25tcF9mcmVlKCkuCisgICAgICAtIGJ1aWxkcyBhZ2FpbiB3aGVuIEhBVkVfR0VUQUREUklORk8gaXMgbm90IGRlZmluZWQuCisgICAgICAtIGNvbmYgZmlsZXMgY2FuIG5vdyBpbmNsdWRlIG90aGVyIGNvbmYgZmlsZXMgLSBhbHNvIHR3ZWFrZWQgZGVidWcKKwl0b2tlbnMgaGVyZSBhbmQgdGhlcmUKKyAgICAgIC0gY3JlYXRlIGluZGV4ZXMgZm9yIGNlcnRpZmljYXRlcyBpbiBjb25maWcgcGF0aAorICAgICAgLSBkaXJlY3RvcnkgY29udGFpbmVyIGVuaGFuY2VtZW50cyAtIGZpeCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgLSBhZGQKKwlmaWx0ZXIgY2FsbGJhY2sgdG8gZmlsdGVyIGZpbGVzIHJldHVybmVkIC0gYWRkIG9wdGlvbiB0byByZXR1cm4KKwlyZWxhdGl2ZSBhbmQgbm90IGZ1bGwgcGF0aHMgLSBhZGQgb3B0aW9uIHRvIHNvcnQgcmV0dXJuZWQgbGlzdCAtCisJYWRkIG9wdGlvbiB0byByZXR1cm4gZW1wdHkgY29udGFpbmVyIGluc3RlYWQgb2YgTlVMTCBpZiBubyBmaWxlcworCWZvdW5kIC0gY2hhbmdlIGRlZmF1bHQgY29udGFpbmVyIG5hbWUgdG8gZGlyZWN0b3J5IHRoYXQgd2FzIHNjYW5uZWQKKwktIHR3ZWFrIGRlYnVnL2xvZyBtZXNzYWdlcworICAgICAgLSBlbmhhbmNlIGZpbGUgdXRpbHMgYW5kIGRpciB1dGlscyAtIGFkZCBvcHRpb25hbCBzdGF0cyBzdHJ1Y3QgdG8KKwluZXRzbm1wX2ZpbGUgLSBnZW5lcmFsaXplIGRpciBjb250YWluZXIgZmlsdGVyLCBhZGQgY29udGV4dCB0bworCWNhbGxiYWNrIC0gYWRkIG9wdGlvbiB0byBzdG9yZSBuZXRzbm1wX2ZpbGVzICh3L3N0YXRzKSBpbiBjb250YWluZXIKKwlpbnN0ZWFkIG9mIGp1c3QgbmFtZQorICAgICAgLSBmaXggcG90ZW50aWFsIGRvdWJsZSBmcmVlIGluIENPTlRBSU5FUl9GUkVFIC0gYWxzbyBhZGRlZCBzZXZlcmFsCisJY29tcGFyZSByb3V0aW5lcworICAgICAgLSBuZXRzbm1wX2NvbnRhaW5lciBlbmhhbmNlbWVudHM6IC0gYWRkIGZyZWVfaXRlbSBmdW5jdGlvbjsgZGVmYXVsdHMKKwl0byBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZSAtIGFkZCBDT05UQUlORVJfRlJFRV9BTEwKKwltYWNyby9mdW5jdGlvbiAobGlrZSBDT05UQUlORVJfQ0xFQVIgYnV0IGNhbGxzIGNvbnRhaW5lciBmcmVlX2l0ZW0KKwlmb3IgZWFjaCBpdGVtIGluIHByaW1hcnkgY29udGFpbmVyKSAtIGFkZCBhYmlsaXR5IHRvIHNldCBvcHRpb25zIG9uCisJYmluYXJ5X2FycmF5IGNvbnRhaW5lcnMKKyAgICAgIC0gbmV3IGNlcnRpZmljYXRlIGFwaSB0byBzdXBwb3J0IHRscy9kdGxzCisgICAgICAtIG5ldyBzbm1wIHRva2VuIGxvZ09wdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyBsb2cgZGVzdGluYXRpb25zIHZpIGNvbmYKKwlmaWxlcyAtIGlmIHN0ZGVyciBsb2cgZW5hYmxlZCBiZWNhdXNlIG9mIG5vIGxvZyBkZXN0aW5hdGlvbiwgdHVybgorCWl0IG9mZiB3aGVuIGEgbG9nIGRlc3RpbmF0aW9uIGlzIGVuYWJsZWQgLSBkb24ndCBjYWxsCisJbmV0c25tcF9lbmFibGVfc3RkZXJybG9nKCkgZnJvbSBhcHBzIGFueW1vcmUKKyAgICAgIC0gb2Jzb2xldGVkIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRy4gRnJvbSBub3cgb24gdXNpbmcKKwlTSUdBTFJNIHRvIHRyaWdnZXIgTmV0LVNOTVAgYWxhcm0gaGFuZGxlcnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKwlNb3RpdmF0aW9uOiBhcyBrbm93biBsaWJuZXRzbm1wIHN1cHBvcnRzIHRpbWUtYmFzZWQgYWxhcm1zIHZpYSB0aGUKKwlmdW5jdGlvbnMgc25tcF9hbGFybV9yZWdpc3RlcigpLCBydW5fYWxhcm1zKCkgYW5kIG90aGVyIGZ1bmN0aW9ucy4KKwlUd28gZGlmZmVyZW50IHdheXMgdG8gdHJpZ2dlciB0aGUgZnVuY3Rpb24gcnVuX2FsYXJtcygpIGFyZQorCXN1cHBvcnRlZCBpbnNpZGUgbGlibmV0c25tcDogMS4gQnkgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZW91dAorCWFyZ3VtZW50IG9mIHNlbGVjdCgpIGlzIHNtYWxsIGVub3VnaCBzdWNoIHRoYXQgc2VsZWN0KCkgcmV0dXJucworCWJlZm9yZSB0aGUgbmV4dCBhbGFybSBtdXN0IGJlIGhhbmRsZWQgKHdoZW4gdGhlIHZhcmlhYmxlCisJTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldCB0byBvbmUsIHdoaWNoIGlzIHRoZQorCWRlZmF1bHQpLiAyLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBrZXJuZWwgZmlyZXMgU0lHQUxSTSBhdCB0aGUKKwl0aW1lIHdoZW4gcnVuX2FsYXJtcygpIHNob3VsZCBiZSBjYWxsZWQgKHdoZW4gdGhlIHZhcmlhYmxlCisJTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldCB0byB6ZXJvLCB3aGljaCBoYXMgdG8gYmUKKwljb25maWd1cmVkIGV4cGxpY2l0bHkpLiBUaGUgZm9sbG93aW5nIGlzc3VlcyBhcmUgYXNzb2NpYXRlZCB3aXRoCisJdGhlIHNlY29uZCBhcHByb2FjaDogMS4gQWxhcm0gZnVuY3Rpb25zIGFyZSB1c2VkIGluc2lkZSBOZXQtU05NUCB0bworCWUuZy4gcmVmcmVzaCBjYWNoZWQgdGFibGUgY29udGVudHMuIEFzIGZhciBhcyBJIGNhbiBzZWUgdGhlcmUgaXMKKwlub3RoaW5nIGluIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSB0aGF0IHByZXZlbnRzIHRoZSBmb2xsb3dpbmcKKwlmcm9tIGhhcHBlbmluZzogYSB0YWJsZSByZWZyZXNoIHRyaWdnZXJlZCB2aWEgU0lHQUxSTSB3aGlsZSBhIHJvdworCWlzIGJlaW5nIHJlbW92ZWQgZnJvbSBhIGNhY2hlZCB0YWJsZS4gVGhpcyBjYW4gcmVzdWx0IGluIGRhbmdsaW5nCisJcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGV2ZW4gYSBjcmFzaC4gMi4gUE9TSVggcmVzdHJpY3RzIHNpZ25hbAorCWhhbmRsZXJzIHRvIGNhbGxpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciByZWVudHJhbnQgb3IKKwlub24taW50ZXJydXB0aWJsZQorCShodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDIKKwlfMDQuaHRtbCN0YWdfMDJfMDQpLiBTdGFuZGFyZCBJL08gZnVuY3Rpb25zIGxpa2UgcHJpbnRmKCkgYW5kCisJZnByaW50ZigpIGFyZSBuZWl0aGVyIHJlZW50cmFudCBub3Igbm9uLWludGVycnVwdGlibGUuIHJ1bl9hbGFybXMoKQorCWlzIGNhbGxlZCBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyLCB3aGljaCBtZWFucyB0aGF0IHRoaXMKKwlyZXN0cmljdGlvbiBhcHBsaWVzIHRvIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkgaXRzZWxmIGFuZCBhbGwKKwlmdW5jdGlvbnMgY2FsbGVkIGJ5IGl0ICh3aGljaCBpbmNsdWRlcyB0aGUgYWxhcm0gY2FsbGJhY2sKKwlmdW5jdGlvbnMpLiBPcjogZS5nLiBzbm1wX2xvZygpIGFuZCBpdHMgY2FsbGVycyBtdXN0IG5vdCBiZSBjYWxsZWQKKwlmcm9tIGluc2lkZSBydW5fYWxhcm1zKCkgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBpbnNpZGUKKwlhIHNpZ25hbCBoYW5kbGVyLiBUaGlzIGlzIGEgc2V2ZXJlIHJlc3RyaWN0aW9uLCBhbmQgb25lIHRoYXQgaXMKKwloYXJkIHRvIHdvcmsgd2l0aC4gMy4gTm90IGFsbCBzb2Z0d2FyZSBkZXZlbG9wZXJzIGtub3cgaG93IHRvIG1ha2UKKwlzdXJlIHRoYXQgc2lnbmFsIGRlbGl2ZXJ5IHdvcmtzIGNvcnJlY3RseSBpbiBhIG11bHRpdGhyZWFkZWQKKwljb250ZXh0LiBQT1NJWCBkb2VzIG5vdCBndWFyYW50ZWUgdG8gd2hpY2ggdGhyZWFkIGEgc2lnbmFsIGxpa2UKKwlTSUdBTFJNIHdpbGwgYmUgZGVsaXZlcmVkLCB1bmxlc3MgdGhhdCBzaWduYWwgaGFzIGJlZW4gYmxvY2tlZAorCWJlZm9yZSB0aHJlYWQgY3JlYXRpb24gYW5kIGlzIHVuYmxvY2tlZCBhZnRlciB0aHJlYWQgY3JlYXRpb24gKHNlZQorCWFsc28KKwlodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3B0aHJlYWRfc2lnCisJbWFzay5odG1sKS4gVGhpcyBpcyByZWxldmFudCBmb3IgdGhlIE5ldC1TTk1QIHByb2plY3Qgbm90IG9ubHkKKwliZWNhdXNlIGEgd29ya2VyIHRocmVhZCBpcyBjcmVhdGVkIGluc2lkZQorCWFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYyBidXQgYWxzbworCWJlY2F1c2UgbGlibmV0c25tcCBpcyBvZnRlbiB1c2VkIGluc2lkZSBtdWx0aXRocmVhZGVkIHNvZnR3YXJlLgorCUN1cnJlbnRseSBubyBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSBzdXJlIHRoYXQgU0lHQUxSTSBpcyBwcm9jZXNzZWQKKwlieSB0aGUgTmV0LVNOTVAgZXZlbnQgcHJvY2Vzc2luZyBsb29wIHRocmVhZC4gSWYgU0lHQUxSTSBpcworCXByb2Nlc3NlZCBieSBhbm90aGVyIHRocmVhZCwgdGhpcyB3aWxsIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBkYXRhCisJcmFjZXMuIEJlY2F1c2UgYWxsIHRoZSBkaWZmaWN1bHRpZXMgYXNzb2NpYXRlZCB3aXRoIHByb2Nlc3NpbmcKKwlhbGFybXMgZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlciBmdW5jdGlvbiwgYW5kIGJlY2F1c2UgZml4aW5nCisJdGhlc2Ugd291bGQgcmVxdWlyZSBtb3JlIGVmZm9ydCB0aGFuIGl0IGlzIHdvcnRoLAorCU5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBmcm9tIG5vdworCW9uIGFwcHJvYWNoICgxKSBpcyB0aGUgb25seSBzdXBwb3J0ZWQgYXBwcm9hY2ggdG8gdHJpZ2dlciBhbGFybQorCWhhbmRsZXJzLgorICAgICAgLSBwbGl0IHNubXBJUEJhc2VEb21haW4gYW5kIG1vdmUgdGhlIElQdjQgcGFydHMgdG8gSVB2NEJhc2UgYW5kIHRoZQorCXNvY2tldCBnZW5lcmljIHBhcnRzIHRvIFNvY2tldEJhc2UuCisgICAgICAtIHdoZW4gZnJlZWluZyBhIGNhY2hlLCBzdG9wIHRpbWVyIGFuZCBjYWxsIGNhY2hlIGZyZWUgZnVuYyAtIGFsc28KKwlhZGQgbmV0c25tcF9jYWNoZV9yZW1vdmUKKyAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCBzaW1wbGUgc3RhdGUgbWFjaGluZQorICAgICAgLSBuZXcgZXhwZXJpbWVudGFsIHNpbXBsZSBzdGF0ZSBtYWNoaW5lIG5ldyBleHBlcmltZW50YWwgcm93IGNyZWF0aW9uCisJQVBJIHdoaWNoIHVzZXMgYSBzdGF0ZSBtYWNoaW5lIHRvIHRyeSByZWFsbHkgaGFyZCB0byBjcmVhdGUgYSByb3cKKwlmcm9tIGEgZ2l2ZW4gdmFyYmluZCBsaXN0CisgICAgICAtIGZpeCBpc3N1ZSB3aXRoIFVTTSB1c2luZyBpbmFjdGl2ZSB1c2VycworICAgICAgLSBmaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHdoZW4gZ2VuZXJhdGluZyB0ZW1wLiBmaWxlIG5hbWVzCisgICAgICAtIGltcGxlbWVudGVkIGEgZml4IGZvciB0aGUgaXNzdWUgcmVwb3J0ZWQgaW4gcGF0Y2ggIzMwNDI3NzAuIENyZWF0ZWQKKwlhIHNubXBfc2VsZWN0X2luZm9fZmxhZ3MgZnVuY3Rpb24sIGFuZCBzaW1pbGFyLCB0aGF0IGFsbG93IGZvcgorCWFsYXJtcyB0byBub3QgYmUgcnVuLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiB0aGUgc3luY2hfcmVzcG9uc2UKKwlmdW5jdGlvbnMgdG8gYXZvaWQgMTAwJSBDUFUgbG9vcHMKKyAgICAgIC0gcGF0Y2g6IDMwNDI3NzA6IGZyb20gbWVoYWY6IE1hZGUgcnVuX2FsYXJtcygpIHJlZW50cmFudAorICAgICAgLSB3aGVuIGRpc3BsYXlpbmcgYSBieXRlIGFzIHNpbmdsZSBkaWdpdCBoZXggdmFsdWUsIGRlZmF1bHQgdG8KKwlwcmVmaXhpbmcgd2l0aCAwIHVubGVzcyB0aGVyZSBpcyBhIHNlcGVyYXRvciBvciBhZGRpdGlvbiBoaW50IGRhdGEKKyAgICAgIC0gMCBwYXRjaCAzMDU4NjQ1OiBmcm9tIGpvcmlzZXNhdHVybnVzOiBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBwYXRjaAorCXRvIHVzZSBNU0dfRE9OVFdBSVQgZm9yIHRoZSB1bml4IGRvbWFpbiBzb2NrZXQKKyAgICAgIC0gW1BBVENIIDMwNjc1NDBdOiBGaXggSVB2NCBPSUQgaW5kZXhlcyBvbiA2NC1iaXQgYmlnLWVuZGlhbiBzeXN0ZW1zLgorCisgICAgc25tcGxpYiwgc25tcGQ6CisgICAgICAtIERvIG5vdCBjaGVjayBpZiB2YWx1ZXMgb2YgdHlwZSBzaXplX3QgYXJlIGxlc3MgdGhhbiAwLgorICAgICAgLSBNYWtlIHN1cmUgdGhhdCBhIG1hc2sgaXMgZ2l2ZW4gdG8gb3BlbiB3aGVuIE9fQ1JFQVQgaXMgc3BlY2lmaWVkCisKKyAgICBzbm1wbGliLCBzbm1wZCwgc25tcG5ldHN0YXQ6CisgICAgICAtIEFkZCBjb3JyZWN0IHNpemUgcHJlZml4ZXMgd2hlbiBwcmludGluZyB2YXJpYWJsZXMgb2YgdHlwZSBvaWQuCiAKICAgICBzbm1wZDoKLSAgICAgIC0gW0JVRyAxNjkzMDM5XTogQmUgc2lsZW50IHdoZW4gaW5zZXJ0IGZhaWxzLgorICAgICAgLSBBZGQgc3VwcG9ydCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2l0aCBIVyBhZGRyZXNzIGJpZ2dlciB0aGFuIDYKKwlieXRlcyB0byBpcE5ldFRvTWVkaWFUYWJsZSBhbmQgaXBOZXRUb1BoeXNpY2FsVGFibGUuIFNvbWUgSFcsIGxpa2UKKwlJbmZpbmlCYW5kLCB1c2VzIEhXIGFkZHJlc3NlcyB3aXRoIDkgYW5kIG1vcmUgYnl0ZXMuIFNubXBkIG9uIExpbnV4CisJd2FzIG5vdCBhYmxlIHRvIHBhcnNlIC9wcm9jL25ldC9hcnAgdGhlbiBhbmQgcHJvZHVjZWQgdWdseSAnaW9jdGwKKwkzNTEyMyByZXR1cm5lZCAtMScgdG8gbG9nLgorICAgICAgLSBDaGVjayB0aGUgcmFuZ2Ugb2Ygb2lkIHZhbHVlcyB0b3dhcmRzIHRoZSBtYXhpbXVtIG9pZCB2YWx1ZSwKKwlub3RVTE9OR19NQVgKKyAgICAgIC0gRXh0cmFjdCB0aGUgRXhpdCBhbmQgcmVzdGFydCogc3Vicm91dGluZXMgZnJvbSB1dGlsX2Z1bmMgaW4gb3JkZXIKKwl0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGxlc3MgY29kZSBmb3IgdGhlIG1pbmltYWwgY2FzZS4KKyAgICAgIC0gRml4ZWQgY3JlYXRpb24gb2Ygdmlld3MgdXNpbmcgc25tcHVzbSwgT0lEcyB3aXRoIGluZGV4ZXMgPiAyNTUgYXJlCisJYWxsb3dlZCBub3cuIFRoaXMgcmV2ZXJ0cyBTVk4gY29tbWl0ICM3NDkyLgorICAgICAgLSBGaXhlZCBpbnZhbGlkIGFjY2VzcyB0byBtZW1vcnkgaW4gVENQLU1JQiBUaGlzIHBhcnRseSByZXZlcnRzIHBhdGNoCisJMTc3MTkgLSB0aGUgZW50cmllcyAqYXJlKiB1c2VkIGFmdGVyIHJhd19kYXRhIGNvbnRhaW5lciBpcyBmcmVlZC4KKwlUaGVzZSBlbnRyaWVzIHNob3VsZCBiZSBmcmVlZCB3aGVuIGFzc29jaWF0ZWQgcm93cmVxX2N0eCBpcyBmcmVlZC4KKyAgICAgIC0gRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gSVAtTUlCIGFuZAorCVRDUC1NSUIgVGhlIGNvdW50ZXJzLCB3aGljaCBncm93IGZhc3QgYXJlIG5vdyBjdXQgdG8gMzJiaXRzLgorICAgICAgLSBGaXhlZCB1ZHBUYWJsZSBpbmRleGVzIG9uIGJpZy1lbmRpYW4gNjRiaXQgTGludXguIFRoZSBpbmRleCB3YXMKKwlhbHdheXMgJzAuMC4wLjAnIGluc3RlYWQgb2YgcmVhbCBsb2NhbCBJUCBhZGRyZXNzLgorICAgICAgLSBNYWRlIHN1YnRyZWVfY29udGV4dF9jYWNoZTo6Y29udGV4dF9uYW1lIGEgY29uc3QgY2hhciouCisgICAgICAtIE1ha2UgYWxsIHRoZSBvaWRzIGFuZCBvaWQgbGVuZ3RocyBpbiBhZ2VudF90cmFwLmMgY29uc3QgYW5kIHVzZQorCXRoZW0gZnJvbSBldmVyeXdoZXJlLgorICAgICAgLSBNYWtlIHRoZSBlbnRlcnByaXNlIGFyZ3VtZW50IG9mIG5ldHNubXBfc2VuZF90cmFwcyBhbmQKKwlzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIGNvbnN0CisgICAgICAtIE9ubHkgZW5hYmxlIGhvc3RTd0luc3QgcnBtIHN1cHBvcnQgb24gbGludXggaG9zdHMgd2l0aCBsaWJycG0uIFRoaXMKKwltYWtlcyBpdCBwb3NzaWJsZSB0byBidWlsZCBvbiBub24tcnBtIGxpbnV4IGRpc3RyaWJ1dGlvbnMuCisgICAgICAtIFJlbW92ZWQgdGhlIHVudXNlZCBmdW5jdGlvbiB4eF90b2tlbml6ZV9leGVjX2NvbW1hbmQgZnJvbQorCXV0aWxpdGllcy9leGVjdXRlLgogICAgICAgLSBbQlVHIDI4MjIzNjBdOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBidWlsZGluZyB0YWJsZSBPSURzCi0gICAgICAtIFtCVUcgMjg0MTAwOF06IFByb3RlY3QgYWdhaW5zdCBjcmFzaCBmb2xsb3dpbmcgZmFpbGVkIEFnZW50WCByZXNwb25zZQotICAgICAgLSBbQlVHIDI4NzM4NThdOiBGaXggaGFuZGxpbmcgb2Ygc2NoZWRPd25lciBpbmRleC4KKyAgICAgIC0gW0JVRyAyODQxMDA4XTogUHJvdGVjdCBhZ2FpbnN0IGNyYXNoIGZvbGxvd2luZyBmYWlsZWQgQWdlbnRYCisJcmVzcG9uc2UKKyAgICAgIC0gW0JVRyAyODczODU4XTogRml4IGhhbmRsaW5nIG9mIHNjaGVkT3duZXIgaW5kZXguIFBhdGNoIHByb3ZpZGVkIGJ5CisJTWF4IFNjaHViZXJ0LgogICAgICAgLSBbQlVHIDI4OTQwNTldOiBIYW5kbGUgZXJyb3JzIHdoZW4gY291bnRpbmcgaW50ZXJmYWNlcwogICAgICAgLSBbQlVHIDI4OTcwMDBdOiBTdXBwcmVzcyAzMi1iaXQgY291bnRlciB0cnVuY2F0aW9uIHdhcm5pbmdzLgotICAgICAgLSBbQlVHIDI5MTQ0MTBdOiBGaXggY3Jhc2ggb24gZW1wdHkgY29tbWFuZCBsaW5lcwotICAgICAgLSBbQlVHIDI5MjQxNDBdOiBGaXggdGVybWluYXRpb24gb2YgQ1BVL0ZQVSB0eXBlcwotICAgICAgLSBbUEFUQ0ggMTI1NzM0N106IE5vbi1maXhlZCBzaXplIGNvbm5lY3Rpb24gYnVmZmVyCi0gICAgICAtIFtQQVRDSCAxNTUwNzMwXTogUmVwb3J0IGVycm9ycyBmcm9tIGl0ZXJhdG9yLWJhc2VkIGhhbmRsZXJzCi0gICAgICAtIFtQQVRDSCAxOTc3NDM5XTogRml4IHBhc3MvX3BlcnNpc3QgYnVnIHdpdGggU0VUIG9pZCB2YWx1ZQotICAgICAgLSBbUEFUQ0ggMjAxMjQwMl06IEhhbmRsZSBmYWlsdXJlIHRvIGxvb2sgdXAgaW50ZXJmYWNlIGVycm9yIGNvdW50ZXJzCi0gICAgICAtIFtQQVRDSCAyMDgyNzI2XTogY29ycmVjdGx5IHJlcG9ydCBOSUMgc3BlZWRzIGhpZ2hlciB0aGFuIDRHYml0L3MKLSAgICAgIC0gW1BBVENIIDIxMjQyODhdOiBGaXggc2V0dGluZyBvZiB1c21Vc2VyUHJpdlByb3RvY29sIGF0IGNyZWF0aW9uCi0gICAgICAtIFtQQVRDSCAyMTYyNjUyXTogRml4IHNpbXBsZSBocmZzIGNoZWNrcyB3aGVuIE5GUyBpcyBpbiB1c2UKLSAgICAgIC0gW1BBVENIIDIzODQ3NzldOiBGaXggaGFuZGxpbmcgb2YgR2V0QnVsayB3aXRoIE4+MCxNPT0wCi0gICAgICAtIFtQQVRDSCAyNjg2MjgwXTogUmVwb3J0IGR1cGxpY2F0ZSByZWdpc3RyYXRpb25zIGFzIGFuIGVycm9yCi0gICAgICAtIFtQQVRDSCAyNjkzNjcwXTogRG9uJ3Qgb3BlbiBBZ2VudFggc29ja2V0cyBpZiBvdGhlciB0cmFuc3BvcnRzIGZhaWwKLSAgICAgIC0gW1BBVENIIDI3OTE0MTddOiBGaXggc25tcGQgc2VnZmF1bHQgd2hlbiBydW4gd2l0aCAtREFMTAotICAgICAgLSBbUEFUQ0ggMjc5NzI1MV06IFN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGlzYXRpb24gYW5kIHNodXRkb3duCi0gICAgICAtIFtQQVRDSCAyODIyMzM3XTogRml4IG1lbW9yeSBsZWFrIGluIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisgICAgICAtIFtCVUcgMjkwMDA3OF06IEFkZCBzdXBwb3J0IGZvciBPSUQgdmFyaWFibGVzIHdpdGggc2l6ZSBpbiBlbGVtZW50cworCWluc3RlYWQgb2YgYnl0ZXMsIGNvcnJlY3Qgc3lzT2JqZWN0SUQgdG8gdXNlIHRoaXMuCisgICAgICAtIFtQQVRDSCAyODM1NTc2XTogRml4IGVuZGlhbm5lc3MgaXNzdWVzIGluIHBhc3MvcGFzc19wZXJzaXN0CiAgICAgICAtIFtQQVRDSCAyODc3NTE4XTogRml4IGhhbmRsaW5nIG9mIHNjb3BlZCBBZ2VudFggdmFyaWFibGVzCi0gICAgICAtIFtQQVRDSCAyODgzMTU1XTogRml4IG1lbW9yeSBsZWFrIGluIHByb3h5IGhhbmRsaW5nLgorICAgICAgLSBbUEFUQ0ggMjg4MzA5Ml06IFN1cHBvcnQgbW9uaXRvcmluZyBwcm9jZXNzZXMgdGhhdCBzaG91bGQgbm90IGJlCisJcnVubmluZy4gUGF0Y2ggcHJvdmlkZWQgYnkgQ2hyaXN0aWFuIChjZzc1KS4gUW46IFNob3VsZCB0aGlzCisJZnVuY3Rpb25hbGl0eSBiZSBiYWNrLXBvcnRlZCB0byBlYXJsaWVyIGxpbmVzPworICAgICAgLSBbUEFUQ0ggMjg4MzIyMF06IEZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyB3aGVuIGlmWFRhYmxlIGlzIG5vdAorCWluY2x1ZGVkLgogICAgICAgLSBbUEFUQ0ggMjg4NzgxNl06IFByb3RlY3QgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGNyYXNoCi0gICAgICAtIFtQQVRDSCAyOTAxMDI5XTogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24gQ2xvc2VIYW5kbGUoKQotICAgICAgLSBbUEFUQ0ggMjkxMTMyM106IEZpeCBhZ2VudCBsb2NrdXAgd2hlbiBtb25pdG9yaW5nIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24KLSAgICAgIC0gW1BBVENIIDI5MTI1ODRdOiBGaXggbnVsbCBPSUQgaGFuZGxpbmcgaW4gQWdlbnR4IG9uIDY0Yml0Ci0gICAgICAtIFtQQVRDSCAyOTUwODQ1XTogRml4IGlmSGlnaFNwZWVkIGNhbGN1bGF0aW9uCi0gICAgICAtIFtQQVRDSCAyOTUyMDM0XTogUmV0dXJuIG9mIHRoZSBHcmVhdCBTdVNFICdzcHJpbnRmJyBIdW50Ci0gICAgICAtIFtQQVRDSCAyOTU2NjU3XTogSGFuZGxlIG92ZXItbGVuZ3RoIEFnZW50WCBPSURzCi0gICAgICAtIFtQQVRDSCAyOTY4NjQyXTogQ2F0Y2ggb3ZlcmZsb3cgb2YgcGFzcy10aHJvdWdoIGNvbW1hbmQgYnVmZmVyCi0gICAgICAtIEFsbG93ICJtb25pdG9yIiB0byBoYW5kbGUgbmVnYXRpdmUgdGhyZXNob2xkIHZhbHVlcwotICAgICAgLSBDaGFuZ2UgZGVmYXVsdCBBZ2VudFggdGFyZ2V0IGZyb20gMC4wLjAuMDo3MDUgdG8gbG9jYWxob3N0OjcwNQotICAgICAgLSBDbGVhbiB1cCBub3RpZmljYXRpb24KLSAgICAgIC0gRW5zdXJlIE9fQ1JFQVRFIG1hc2sgaXMgYWx3YXlzIHNwZWNpZmllZAotICAgICAgLSBGaXggYWdlbnQgY3Jhc2ggd2hlbiBzZW5kaW5nIGVuY3J5cHRlZCBTTk1QdjMgdHJhcHMKLSAgICAgIC0gRml4IENWRS0yMDA4LTQzMDkgKEdFVEJVTEsgaXNzdWUgcmVwb3J0ZWQgYnkgT3NjYXIgTWlyYS1TYW5jaGV6KQotICAgICAgLSBGaXggY3JlYXRpb24gb2Ygdmlld3MgdXNpbmcgc25tcHVzbQotICAgICAgLSBGaXggaGFuZGxpbmcgb2YgbXVsdGlwbGUgbWF0Y2hpbmcgVkFDTSBlbnRyaWVzCi0gICAgICAtIEZpeCBpbnZhbGlkIGFjY2VzcyB0byBtZW1vcnkgaW4gVENQLU1JQgotICAgICAgLSBGaXggbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlcycgaW4gSVAtTUlCIGFuZCBUQ1AtTUlCCi0gICAgICAtIEZpeCBtZW1vcnkgbGVhayB3aGVuIG11bHRpcGxlIGludGVyZmFjZXMgaGF2ZSB0aGUgc2FtZSBJUHY2IGFkZHJlc3MKLSAgICAgIC0gRml4IHBvc3NpYmxlIGNyYXNoIHdoZW4gNjQtYml0IGNvdW50ZXJzIGV4Y2VlZCAyXjMyCi0gICAgICAtIEZpeCB0d28gYnVncyB3aXRoIHNtdXggcGFzc3dvcmQgc3VwcG9ydAotICAgICAgLSBGaXggdWRwVGFibGUgaW5kZXhlcyBvbiBiaWctZW5kaWFuIDY0Yml0IExpbnV4LgotICAgICAgLSBJbXByb3ZlIHBhcnNpbmcgb2YgLUxTIGNvbW1hbmQgbGluZSBhcmd1bWVudAotICAgICAgLSBMYXRjaCBsYXJnZS1kaXNrIHN0YXRpc3RpY3MgYXQgMlRiIChyYXRoZXIgdGhhbiB3cmFwcGluZykKLSAgICAgIC0gUmVnaXN0ZXIgQ1BVL21lbW9yeSBoYXJkd2FyZSBtb2R1bGVzIHdpdGggbnNDYWNoZVRhYmxlCi0gICAgICAtIFJlbW92ZSBpbmxpbmUgZGVjbGFyYXRpb25zIGZvciBub24taW5saW5lIGRlZmluZWQgZnVuY3Rpb25zCi0gICAgICAtIFJlcG9ydCBpZlNwZWVkIG9mIGRvd24gbmV0d29yayBpbnRlcmZhY2VzCi0gICAgICAtIFN1cHBvcnQgbGFyZ2UgSFcgYWRkcmVzc2VzICg+NmJ5dGVzKQorICAgICAgLSBbUEFUQ0ggMjkwMTAyOV06IEZpeCBjb21waWxlciB3YXJuaW5nIG9uIENsb3NlSGFuZGxlKCkgRW5kaWFuCisJcHJvYmxlbXMgYWxyZWFkeSBhZGRyZXNzZWQgYnkgcGF0Y2ggIzI4MzU1NzYKKyAgICAgIC0gW1BBVENIIDI5MDMwOTJdOiBGaXggYnJva2VuIGhhbmRsaW5nIG9mIGJyb2FkY2FzdCBlbnRyaWVzLgorICAgICAgLSBbUEFUQ0ggMjkxMTMyM106IEZpeCBhZ2VudCBsb2NrdXAgd2hlbiBtb25pdG9yaW5nIEFnZW50WC1kZWxlZ2F0ZWQKKwlpbmZvcm1hdGlvbgorICAgICAgLSBbUEFUQ0ggMjkxMTk3MF06IFByb3Blcmx5IHRlcm1pbmF0ZSBsaW5rZWQgbGlzdCBvZiByZWdpc3RyYXRpb25zLgorCVBhdGNoIHByb3ZpZGVkIGJ5IE1pcmtvIERlY2tlcnQuCisgICAgICAtIFtQQVRDSCAyOTU2NjU3XTogSGFuZGxlIG92ZXItbGVuZ3RoIEFnZW50WCBPSURzLiBQYXRjaCBwcm92aWRlZCBieQorCVJvYiBXZXN0CisgICAgICAtIFtQQVRDSCAyOTY3NDAwXTogUmV0cmlldmUgZXJyb3IgY291bnRlcnMgZm9yIHRoZSBFdGhlckxpa2UtTUlCCisJUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMuCisgICAgICAtIFtQQVRDSCAyOTY4NjQyXTogQ2F0Y2ggb3ZlcmZsb3cgb2YgcGFzcy10aHJvdWdoIGNvbW1hbmQgYnVmZmVyLgorCVBhdGNoIGZyb20gQW5kcmVhcyBKYWVnZXIvTGVvbmFyZG8gQ2hpcXVpdHRvCisgICAgICAtIGFnZW50IHdpbGwgbm8gbG9uZ2VyIGNhbGwgdGFibGUgaGFuZGxlcnMgaWYgYSBzZXQgcmVxdWVzdCBmb3IgdGhlCisJaGFuZGxlciBoYXMgaW52YWxpZCBpbmRleGVzCisgICAgICAtIGFnZW50IHdpbGwgbm8gbG9uZ2VyIGNhbGwgdGFibGUgaGFuZGxlcnMgaWYgYSBzZXQgcmVxdWVzdCBmb3IgdGhlCisJaGFuZGxlciBoYXMgaW52YWxpZCBpbmRleGVzIGRvbid0IGNhbGwgY2xlYW51cCBvbiBmaXJzdCByZXF1ZXN0IG9uCisJYmFkIGluZGV4ZXMuIGluc3RlYWQsIHNldCBhY3R1YWwgZXJyb3IgbGF0ZXIsIGFuZCBmcmVlIHJlcXVlc3QgZGF0YQorCXNldHMgb24gZmlyc3QgcmVxdWVzdCBmb3Igc2V0cworICAgICAgLSBkZWZpbmUgYW5kIHVzZSBuZXcgTkVUU05NUF9MT0dPTkNFIG1hY3JvCisgICAgICAtIGZpeCBjcmFzaCBpbiBJRi1NSUIgYW5kIElQLU1JQiB3aGVuIHRoZXJlIGFyZSBzb21lIGludGVyZmFjZXMgd2l0aAorCWJyb2FkY2FzdCBJUCBhZGRyZXNzIGFuZCBzb21lIHdpdGhvdXQuIFJlc2V0IHRoZSBiY2FzdGVudHJ5IGluIHRoZQorCWxvb3AsIHNvIGl0IGNhbm5vdCBiZSBpbnNlcnRlZCB0byB0aGUgdHdpY2UuIFdpdGhvdXQgdGhpcyBwYXRjaCwKKwl3aGVuIGFuIGludGVyZmFjZSB3aXRob3V0IGJyb2FkY2FzdCBhZGRyZXNzIGlzIHByb2Nlc3NlZCwgdGhlCisJYmNhc3RhZGRyZXNzIGZyb20gcHJldmlvdXMgbG9vcCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIuCisJVGhpcyBvYnZpb3VzbHkgZmFpbHMgYW5kIHRoZSBiY2FzdGVudHJ5IGlzIGZyZWVkLCBidXQgdGhlIGNvbnRhaW5lcgorCXN0aWxsIGNvbnRhaW5zIHJlZmVyZW5jZSB0byBpdCAtPiBTSUdTRUdWLgorICAgICAgLSBmaXggbWVtb3J5IGxlYWsgaW4gaXBBZGRyZXNzUHJlZml4VGFibGUgLQorCW5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8gcmV0dXJucyBkaWZmZXJlbnQgY29kZSwgd2hlbiB0aGUKKwllbnRyeSB3YXMgbm90IGluc2VydGVkIHRvIGxpc3QgYW5kIGNhbiBiZSBmcmVlZC4KKyAgICAgIC0gZml4IHJhcmUgcmFjZSBjb25kaXRpb24gd2hlbiByZWFkaW5nIFJQTSBkYXRhYmFzZS4gT2xkIHJwbSB2ZXJzaW9ucworCXJldHVybiBOVUxMIGluc3RlYWQgb2YgSGVhZGVyIHdoZW4gYW5vdGhlciBSUE0gaW5zdGFuY2UgaG9sZHMKKwlkYXRhYmFzZSBsb2Nrcy4gSS5lLiBzbm1wZCBzb21ldGltZXMgY3Jhc2hlcyB3aGVuIHJlYWRpbmcgaHJfc3dJbnN0CisJYW5kIHJwbSBpcyBpbnN0YWxsaW5nL3VwZGF0aW5nL3JlbW92aW5nIGFub3RoZXIgcGFja2FnZS4gQXMgYQorCXNvbHV0aW9uLCB3aG9sZSBSUE0gY2FjaGUgaXMgdGhyb3duIGF3YXkgYW5kIHJlLXJlYWQgd2hlbiB3ZSBnb3QgYW4KKwllcnJvciBmcm9tIGxpYnJwbS4gVGhlIHdob2xlIHByb2Nlc3MgaXMgcmVzdGFydGVkIG9ubHkgdGhyZWUgdGltZXMsCisJdG8gcHJldmVudCBlbmRsZXNzIGxvb3AuCisgICAgICAtIGZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gVENQLU1JQi4KKyAgICAgIC0gZml4ZWQgZmlsZWRlc2NyaXB0b3IgbGVhayBpbiBFdGhlcmxpa2UtTUlCIGFuZCBSTU9OLU1JQgorICAgICAgLSBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIHJlYWRpbmcgc2Vuc29ycyBmb3IgTE0tU0VOU09SUy1NSUIuCisgICAgICAtIGZpeGVkIG9uZSBsZWFrLWF0LWV4aXQuCisgICAgICAtIGluY2x1ZGUgbG9jYWwgcG9ydCBudW1iZXIgaW4gcGFja2V0IGR1bXBzLiBBbiBleGFtcGxlOiBSZWNlaXZlZCAzNgorCWJ5dGUgcGFja2V0IGZyb20gVURQOiBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MSAwMDAwOiAzMAorCTIyIDAyIDAxIDAxIDA0IDA2IDcwIDc1IDYyIDZDIDY5IDYzIEExIDE1IDAyIDAiLi4uLi5wdWJsaWMuLi4gMDAxNjoKKwkwNCAzNyBGMiBENCA5QiAwMiAwMSAwMCAwMiAwMSAwMCAzMCAwNyAzMCAwNSAwNiAuNy4uLi4uLi4uLjAuMC4uCisJMDAzMjogMDEgMDEgMDUgMDAgLi4uLiBSZWNlaXZlZCBTTk1QIHBhY2tldChzKSBmcm9tIFVEUDogR0VUTkVYVAorCW1lc3NhZ2UgLS0gY2NpdHQuMSBTZW5kaW5nIDExOCBieXRlcyB0byBVRFA6CisJWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEgMDAwMDogMzAgNzQgMDIgMDEgMDEgMDQgMDYgNzAKKwk3NSA2MiA2QyA2OSA2MyBBMiA2NyAwMiAwdC4uLi4ucHVibGljLmcuIDAwMTY6IDA0IDM3IEYyIEQ0IDlCIDAyIDAxCisJMDAgMDIgMDEgMDAgMzAgNTkgMzAgNTcgMDYgLjcuLi4uLi4uLi4wWTBXLiAwMDMyOiAwOCAyQiAwNiAwMSAwMiAwMQorCTAxIDAxIDAwIDA0IDRCIDRDIDY5IDZFIDc1IDc4IC4rLi4uLi4uLi5LTGludXggMDA0ODogMjAgNjEgNzMgNzUgNzMKKwkyMCAzMiAyRSAzNiAyRSAzMyAzMyAyRSAzMiAyRCA3MyBhc3VzIDIuNi4zMy4yLXMgMDA2NDogNjMgNzMgNzQgMjAKKwkyMyAzMSAyMCA1MyA0RCA1MCAyMCA1MCA1MiA0NSA0NSA0RCBjc3QgIzEgU01QIFBSRUVNIDAwODA6IDUwIDU0IDIwCisJNTMgNjEgNzQgMjAgNDEgNzAgNzIgMjAgMzMgMjAgMzIgMzEgM0EgUFQgU2F0IEFwciAzIDIxOiAwMDk2OiAzMSAzMAorCTNBIDM1IDM4IDIwIDQzIDQ1IDUzIDU0IDIwIDMyIDMwIDMxIDMwIDIwIDEwOjU4IENFU1QgMjAxMCAwMTEyOiA3OAorCTM4IDM2IDVGIDM2IDM0IHg4Nl82NAorICAgICAgLSBtYWRlIHN1cmUgdGhhdCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIGRvZXMgbm90IGNyZWF0ZQorCWRhbmdsaW5nIHBvaW50ZXJzIGluIHRoZSBNSUIgc3VidHJlZSByZWdpc3RyeS4KKyAgICAgIC0gcmVwb3J0IHJlYWwgaWZTcGVlZCBvZiBuZXR3b3JrIGludGVyZmFjZSBldmVuIGl0IGlzIGRvd24uIFNvbWUKKwlpbnRlcmZhY2VzIGNhbiByZXBvcnQgdGhlaXIgcmVhbCBzcGVlZCwgZXZlbiB0aGV5IGFyZSBkb3duLiBBbmQgaWYKKwl0aGV5IGNhbid0LCB0aGUgZmFsbGJhY2sgdG8gMTBNYnBzIGlzIHN0aWxsIHRoZXJlLgorICAgICAgLSB0YWJsZV9kYXRhL3RkYXRhIG5leHQgaGFuZGxlciB3aWxsIG5vdCBiZSBjYWxsZWQgZHVyaW5nIGdldAorCXByb2Nlc3NpbmcgaWYgbm8gdmFsaWQgcm93cyBhcmUgZm91bmQgZm9yIHRoZSBoYW5kbGVyCisgICAgICAtIHRkYXRhIGhlbHBlciBub3cgc2F2ZXMgZmxhZ3MgcGFzc2VkIGR1cmluZyBjcmVhdGlvbjsgYWRkIHRkYXRhIGZsYWcKKwl0byBOT1QgY3JlYXRlIHRoZSB0YWJsZSBjb250YWluZXIKKyAgICAgIC0gdHJhbnNsYXRlIE5PU1VDSCovRU5ET0ZNSUIgZXJyb3JzIGR1cmluZyBSRVNFUlZFMSB0byBOT0NSRUFUSU9OCisgICAgICAtIHV0aWxpdGllcy9leGVjdXRlIGRvIG5vdCBuZWVkIGFueXRoaW5nIGZyb20gdXRpbF9mdW5jcywgc28gc3RvcAorCWRlcGVuZGluZyBvbiBpdC4KKyAgICAgIC0gZml4ZWQgdmFsdWUgb2YgSVAtTUlCOjppcHY2SW50ZXJmYWNlRm9yd2FyZGluZyBvbiBMaW51eCAgIFRoZSB2YWx1ZQorCXdhcyAwIChub3QgZm9yd2FyZGluZykgb3IgMSAoZm9yd2FyZGluZyksIHNob3VsZCBiZSAyIGFuZCAxIGluc3RlYWQKKwktIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5LmZvcndhcmRpbmdfdjYgaXMgYm9vbGVhbiwgbm90IFRydXRoVmFsdWUuCisgICAgICAtIG5ldyBBUEkgZm9yIGluZGljYXRpbmcgdGhhdCBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkCisJYWZ0ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBmaW5pc2hlcyBwcm9jZXNzaW5nCisgICAgICAtIFtCVUcgMzAwMzk4MV06IFByb3RlY3QgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3cKKyAgICAgIC0gW0JVRyAzMDE5MjQzXTogUmVnaXN0ZXIgZXhlY0ZpeCBjb21wYXRhYmlsaXR5IGRpcmVjdGl2ZSBjb3JyZWN0bHkuCisgICAgICAtIHBhdGNoIDI5MTI1MjA6IGZyb20gbGlzdG9tOiBGcmVlIGttZW0gcmVmZXJlbmNlcyBvbiBzaHV0ZG93bgorICAgICAgLSBwYXRjaDogMzAyODkyMzogZnJvbSBqZW5zbzogbmV3IGNvcHkgb2YgdGhlIGJyaWRnZS1taWIgcGVybAorCWltcGxlbWVudGF0aW9uCisgICAgICAtIHJlcG9ydCBnZnMgZmlsZXN5c3RlbXMgaW4gaHJTdG9yYWdlVGFibGUgYW5kIGhyRlNUYWJsZS4KKyAgICAgIC0gW1BBVENIIDI5MDQ5MDBdOiBEb2N1bWVudGF0aW9uIHBsdXMgYXNzb3J0ZWQgaGFuZGxlciBjb2RlIGZpeGVzCisgICAgICAtIFtQQVRDSCAyOTExMzYxXTogRG9jdW1lbnRhdGlvbiAoUHJvdmlkZWQgYnkgVG9tYXN6IExpcykKKyAgICAgIC0gW1BBVENIIDI5MTEzNjFdOiBSZS1vcmRlciBjb2RlIHRvIGdyb3VwIHJlbGF0ZWQgZnVuY3Rpb25zIHRvZ2V0aGVyCisgICAgICAtIFtQQVRDSCAyOTExMzYxXTogUmVtb3ZlIHJlZHVuZGFudCB2YXJpYWJsZXMKKyAgICAgIC0gW1BBVENIIDI5MzE0NDZdOiBtYWtlIHRoZSBsb2FkIGF2ZXJhZ2VzIHdyaXRhYmxlLgorICAgICAgLSBbUEFUQ0ggMzA0NDUxMl06IGZpeCBzeXNvYmplY3RpZCBkaXJlY3RpdmUuCisgICAgICAtIHBhdGNoIDI3OTAyNDk6IGZyb20gd2lsbHB3aWxscDogcmVkdWNlIGNhY2hlIHRpbWUgZm9yIHRoZSBpZnRhYmxlCisJdG8gM3NlY29uZHMgdG8gaW5jcmVhc2UgYWNjdXJhY3kKKyAgICAgIC0gcGF0Y2ggMjgyNTY1MzogZnJvbSBicnU1Y2U6IGZpeCBzZW5kbWFpbC5jZiBwYXJzaW5nIGluIGNlcnRhaW4KKwljb25kaXRpb25zCisgICAgICAtIExvZyBiZWZvcmUgcmV0dXJuaW5nLgorICAgICAgLSBbUEFUQ0ggMzA1MzQyOF06IGZpeCBnZXRfcGlkX2Zyb21faW5vZGUgd2hlbiB0aGUgaW5vZGUgaXMgbm90CisJZm91bmQuCisgICAgICAtIFtQQVRDSCAzMDU4MTQwXTogY2hlY2sgdGhhdCBpbm9kZSBpcyBub24temVybworICAgICAgLSBwYXRjaCAzMDYyNTI2OiBmcm9tIG1hcmlvZzg1OiBmaXggc2VjdXJpdHkgZW5naW5lSUQgc2V0dGluZyBpbiB0aGUKKwl0cmFwc2VzcyBkaXJlY3RpdmUKIAotICAgIHNubXB0cmFwZDoKLSAgICAgIC0gW1BBVENIIDI3MjYzMDJdOiBQYXNzIHJlc3VsdHMgb2YgUGVybCB0cmFwIGhhbmRsZXJzIHRvIHRyYXAgZGFlbW9uCi0gICAgICAtIFJlbW92ZSBnbGliYy1zcGVjaWZpYyBwcmludGYtZm9ybWF0dGluZyB0b2tlbnMKKyAgICBzbm1wZGxpYjoKKyAgICAgIC0gbmV3IGZ1bmN0aW9ucyB0byBtYWtlIHN0YXNoIHB0ciBhbmQgbmV3cm93IGF2YWlsYWJsZSB0bworCXRhYmxlX2RhdGFzZXQgaGFuZGxlcnMgbm9uZXdzOiBmaXggdHlwbzsgdGFicyB0byBzcGFjZXM7IHVzZSBzaXplb2YKKwlpbnN0ZWFkIG9mIGNvbnN0YW50CisKKyAgICBzbm1wZHg6CisgICAgICAtIGNoYW5nZWQgZGVmYXVsdCBUQ1AgdGFyZ2V0IGZyb20gMC4wLjAuMDo3MDUgdG8gbG9jYWxob3N0OjcwNS4gVGhpcworCWlzIG5vdCBvbmx5IGEgbW9yZSBzZWN1cmUgY2hvaWNlIGJ1dCBpdCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIG9uCisJV2luZG93cyBzeXN0ZW1zIHRvIGxldCBhbiBBZ2VudFggc3ViYWdlbnQgY29ubmVjdCB0byBhbiBBZ2VudFgKKwltYXN0ZXIgYWdlbnQgcnVubmluZyBvbiB0aGUgc2FtZSBzeXN0ZW0gd2l0aG91dCBoYXZpbmcgdG8gc2V0IHRoZQorCXZhcmlhYmxlIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQuCiAKICAgICBzbm1wdGFibGU6CiAgICAgICAtIFtCVUcgMjgzNzk5OF06IEhhbmRsZSBtaXNzaW5nIGluc3RhbmNlIHN1YmlkZW50aWZpZXJzIGluIHJlc3VsdHMKLSAgICAgIC0gW1BBVENIIDI4NTAwNjddOiBTdXBwcmVzcyBleHRyYW5lb3VzICJpbmRleCIgaGVhZGVyIHRva2VuCisgICAgICAtIFtQQVRDSCAyODUwMDY3XTogU3VwcHJlc3MgZXh0cmFuZW91cyAiaW5kZXgiIGhlYWRlciB0b2tlbiBQYXRjaAorCXN1cHBsaWVkIGJ5IERhbiBOZWxzb24KKworICAgIHNubXB1c206CisgICAgICAtIFByZWZlciB0byB1c2UgYSB2YXJpYWJsZSBvZiB0aGUgcmlnaHQgdHlwZSBvdmVyIGFuIHVnbHkgY2FzdC4KKwlMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcyB3ZWxsLgorICAgICAgLSBwYXRjaCBmcm9tIE1hcnRpbiBCam9ya2x1bmQgdG8gYWRkIGEgLUN3IG9wdGlvbiB0byB1c2UKKwljcmVhdGVBbmRXYWl0IGZvciBhZ2VudHMgdGhhdCBhcmUgc3RyaWN0IGFib3V0IG5vdCBhbGxvd2luZyBhIHJvdworCXRvIGJlIHNldCB0byBhY3RpdmUgdW50aWwgdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkIGhhcyBiZWVuCisJY2hhbmdlZDsgcGx1cyB3aGl0ZS1zcGFjZSBjbGVhbiB1cCwgbWFudWFsIGFkZGl0aW9ucyBhbmQgaGVscAorCW91dHB1dCBtb2RpZmljYXRpb25zIGJ5IGhhcmRha2VyCisgICAgICAtIENvcnJlY3QgaWZkZWZzLCByZW1vdmUgZGVhZCB2YXJpYWJsZXMuCisKKyAgICBtYW46CisgICAgICAtIGNsZWFuIHVwIG1hbnVhbCBwYWdlcyAoZnJvbSBEZWJpYW4gcGF0Y2ggNTZfbWFucGFnZSkKKworICAgIHNubXB3YWxrOgorICAgICAgLSBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgZW5kIG9pZCBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudCBvaWQKKwljb3JyZWN0bHkKIAogICAgIGFwcHM6Ci0gICAgICAtIFtCVUcgMjgxMTU3N106IEZpeCBidWcgaW4gR2V0QnVsayBoYW5kbGluZwotICAgICAgLSBbUEFUQ0ggMjkzNzk5Nl06IEFkZCBEYXRlOiBoZWFkZXIgdG8gZW1haWwgc2VuZCBieSB0cmFwdG9lbWFpbAotICAgICAgLSBJbXByb3ZlIHBhcnNpbmcgb2YgLUxTIGNvbW1hbmQgbGluZSBhcmd1bWVudAorICAgICAgLSBBZGQgY29tbWFuZCB0byBzZW5kIEFnZW50WCBub3RpZnkgcmVxdWVzdHMgdG8gYSBtYXN0ZXIgYWdlbnQuCisgICAgICAtIEdlbmVyaWMgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHNubXAuY29uZiBmaWxlcyBhcmUgbm93IHJlYWQuCisJU2VlIHRoZSBIT1NULVNQRUNJRklDIEZJTEVTIHNlY3Rpb24gb2YgdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZS4KKyAgICAgIC0gT25seSBidWlsZCBhZ2VudHh0cmFwIGlmIHRoZSBhZ2VudHggbGlicmFyaWVzIGFyZSBidWlsdC4gQWRkIGEgdGVzdAorCWNhc2UgZm9yIGFnZW50eHRyYXAuIFRoZSBlbmFibGVtZW50L2Rpc2FibGVtZW50IGlzIGluc3BpcmVkIGJ5CisJYXV0b21ha2UgY29uZGl0aW9uYWxzCisgICAgICAtIFQgY29tbWFuZCBsaW5lIGZsYWcgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRyYW5zcG9ydHMKKyAgICAgIC0gQSBuZXcgJ3NubXB0bHMnIGNvbW1hbmQgZm9yIG1hbmlwdWxhdGluZyB0aGUgYWdlbnQncyBUTFMgY29uZmlndXJhdGlvbgorCisgICAgYXBwcywgc25tcGxpYjoKKyAgICAgIC0gW1BBVENIIDI4MzU1NzddOiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbiBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTworCW9mIGFycmF5cyB3aXRoIGEgbWVtc2V0LgorCisgICAgc25tcHRyYW5zbGF0ZToKKyAgICAgIC0gZml4ZWQgcHJpbnRpbmcgb2YgcmFuZ2VzIHdpdGggVU5TSUdORUQgdHlwZS4KIAogICAgIGJ1aWxkOgotICAgICAgLSBbQlVHIDIwOTU5ODNdOiBGaXggZXJyb3JzIGluIGZpbmQtcmVxdWlyZXMgaGVscGVyIHNjcmlwdAotICAgICAgLSBbQlVHIDI3ODI3MDBdOiBCdWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgLS13aXRoLXBrY3Mgb24gU29sYXJpcwotICAgICAgLSBbUEFUQ0ggMjE4NDAzOV06IE1pc2MgZml4ZXMgZm9yIGZyZWVpbmcgbWVtb3J5Ci0gICAgICAtIFtQQVRDSCAyOTUyMDIwXTogU2V0IHBlcm1pc3Npb24gb24gdGVzdGluZyBkaXJlY3RvcmllcwotICAgICAgLSAnbWFrZSB0ZXN0IFRFU1RPUFRTPSItUCB0Y3AiJyB3b3JrcyBmaW5lIG5vdworICAgICAgLSBbUEFUQ0ggMjk1MjAyMF06IEV4cGxpY2l0bHkgc2V0IHBlcm1pc3Npb24gb24gdGVtcG9yYXJ5IHRlc3RpbmcKKwlvdXRwdXQgZGlyZWN0b3JpZXMuIFBhdGNoIHByb3ZpZGVkIGJ5IExlb25hcmRvIENoaXF1aXR0by4KKyAgICAgIC0gcnVuIHJwbSBjb25maWd1cmUgY2hlY2tzIGZvciBocl9zd2luc3QgcmV3cml0ZSAocnBtIHZlcnNpb24gb25seSkKKyAgICAgIC0gRG8gbm90IGNhbGwgdmFjbV9zdGFuZGFyZF92aWV3cygpIG9yIGluaXRfdmFjbV9jb25maWdfdG9rZW5zKCkgaWYKKwl0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgd2FzIG5vdCBjb21waWxlZCAoZnJvbSBEZWJpYW4gcGF0Y2gKKwk2MV92YWNtX21pc3NpbmdfZGVwZW5kZW5jeV9jaGVjaykKKyAgICAgIC0gRml4IGlwdjYgZ2VuZXJpYyBjYXNlIHNvIHRlc3QgbWF0Y2hlcyB2ZXJpZmljYXRpb24KIAotICAgIGRvY3M6Ci0gICAgICAtIFtQQVRDSCAyNzg4MDcyXTogRG9jdW1lbnQgJ2xvZ21hdGNoJyBmdW5jdGlvbmFsaXR5LgotICAgICAgLSBbUEFUQ0ggMjc5NTczOV06IEZpeCBpbmNvcnJlY3QgZGlzay9maWxlIHNpemUgZGVzY3JpcHRpb25zICYgdW5pdCBzcGVjaWZpZXJzCisgICAgYnVpbGRpbmc6CisgICAgICAtICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1QIHRjcCInIHdvcmtzIGZpbmUgbm93CisgICAgICAtIDAgSW4gY2FzZSBleGVjX3ByZWZpeCBpcyB1bnNldCB0aGVuIHNldCBpdCB0byAnJHtwcmVmaXh9JyBpbiBvcmRlcgorCXRvIHBpY2sgdXAgb3ZlcnJpZGVzIG9mICRwcmVmaXggaW4gbWFrZSBpbnN0YWxsLgorICAgICAgLSBCdWlsZGluZyBOZXQtU05NUCB3aXRoIGRtYWxsb2Mgc3VwcG9ydCBlbmFibGVkIGlzIGFnYWluIHBvc3NpYmxlLgorICAgICAgLSBEbyBub3QgbGluayB3aXRoIGxpYm5ldHNubXBoZWxwZXJzIGFueSBtb3JlIGFzIGl0IGlzIGVtcHR5LgorICAgICAgLSBGaXhlZCBjb21waWxhdGlvbiB3aXRoIHJwbS00LjYuIFR1cm4gb24gdGhlIGxlZ2FjeSBBUEkgd2hlbiBycG0tNC42CisJaXMgZGV0ZWN0ZWQuCisgICAgICAtIEludHJvZHVjZWQgdGhlIHZhcmlhYmxlICd3aXRoX3NvY2tsaWInIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCVRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJ3aW5zb2NrMiIgZm9yIE1pbkdXIGFuZCB0byAiZGVmYXVsdCIgZm9yCisJYWxsIG90aGVyIHN5c3RlbXMuIFdpbnNvY2syIHRlc3RzIGFyZSBvbmx5IHJ1biBpZiB0aGlzIHZhcmlhYmxlIGlzCisJc2V0IHRvICJ3aW5zb2NrMiIgKE1pbkdXKS4KKyAgICAgIC0gT1MgaGVhZGVyIGRldGVjdGlvbiBjaGVjayBpcyBub3cgcnVuIGJlZm9yZSBJUHY2IHN0YWNrIGRldGVjdGlvbi4KKyAgICAgIC0gVXNlIEFDX1JFUExBQ0VfRlVOQ1MgdG8gaGFuZGxlIGNvZGUgdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKwlwbGF0Zm9ybXMuCisgICAgICAtIFVzZSBhdXRvY29uZiB0byBkZWNpZGUgaWYgaW5ldF9udG9wLmMgYW5kIGluZXRfcHRvbi5jIGFyZSB0byBiZQorCWNvbXBpbGVkLgorICAgICAgLSBVc2UgdGhlIHNhbWUgY29tcGlsZXIgY29tbWFuZCBhbmQgZmxhZ3MgZm9yIGJ1aWxkaW5nIG9mIHRlc3RzIGFzCisJZm9yIGJ1aWxkaW5nIG9mIHRoZSBjb2RlLCB0aHVzIGVuYWJsaW5nIHRlc3Qgb2YgZS5nLiAzMi1iaXQgY29kZQorCWNvbXBpbGVkIG9uIGEgNjQtYml0IHBsYXRmb3JtLgorICAgICAgLSBhYm9ydCBpZiB0aGUgZmlsZSBwcm9ncmFtIGNvdWxkIG5vdCBiZSBmb3VuZCwgc2luY2UgdGhpcyBpcworCWVzc2VudGlhbCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBsaWJ0b29sLgorICAgICAgLSBhZGRlZCBkZXRlY3Rpb24gb2YgbG1fc2Vuc29ycyB2ZXJzaW9uLiBJIGFtIG5vdCBBdXRvY29uZiBndXJ1LCBzbyBJCisJaG9wZSBJIGdvdCBpdCByaWdodC4gVGhlIGdvYWwgaXMgdG8gZGVmaW5lIE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMKKwkqYmVmb3JlKiBjb25maWdfbW9kdWxlc19hZ2VudCBwcm9jZXNzZXMKKwlhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmguCisgICAgICAtIG1hZGUgc3VyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm8gbG9uZ2VyIGludm9rZSAidGFpbAorCS0xIiwgd2hpY2ggaXMgbm90IFBPU0lYLWNvbXBsaWFudC4KKyAgICAgIC0gc2F2ZSBjb25maWd1cmUgY2FjaGUgZXZlcnkgb25jZSBpbiB3aGlsZQorICAgICAgLSB1cGRhdGUgVmVyc2lvbi1NdW5nZSBmb3IgcmVuYW1lZCBjb25maWd1cmUuYWMKKyAgICAgIC0gd2hlbiBnZW5lcmF0aW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN5c3RlbSBsb2NhdGlvbiBhbmQgbm8KKwlkb21haW4gbmFtZSBpcyBmb3VuZCBpbiAvZXRjL3Jlc29sdi5jb25mLCB1c2UgIkBuby53aGVyZSIgaW5zdGVhZAorCW9mICIiLgorICAgICAgLSBBZGQgbmV3IHRlc3QqIGVudHJpZXMgZnJvbSB0aGUgdGVzdGluZyBNYWtlZmlsZS5pbiB0byB0aGUgdG9wLWxldmVsCisJTWFrZWZpbGUuaW4KKworICAgIGJ1aWxkaW5nLCBXaW4zMjoKKyAgICAgIC0gUmVtb3ZlIGEgZmV3IHVudXNlZCBjb25maWd1cmUgc3ltYm9scworCisgICAgaHB1eDoKKyAgICAgIC0gZml4IGJ1aWxkIGVycm9yIG9uIEhQLVVYIDEwLjIwCisKKyAgICBsaWJuZXRzbm1wOgorICAgICAgLSBTdXBwb3J0IGZvciBhIHN0cmVhbS1saW5lIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBpbnRlcm5hbCBPcGVuU1NMCisJc3VwcG9ydCB1c2luZyAtLXdpdGgtb3BlbnNzbD1pbnRlcm5hbAorCisgICAgbGlibmV0c25tcGFnZW50LCBsaWJuZXRzbm1waGVscGVyczoKKyAgICAgIC0gbW92ZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX2J1bGtfdG9fbmV4dF9maXhfcmVxdWVzdHMoKSwKKwluZXRzbm1wX2dldF9idWxrX3RvX25leHRfaGFuZGxlcigpLCBuZXRzbm1wX3JlZ2lzdGVyX251bGwoKSwKKwluZXRzbm1wX3JlZ2lzdGVyX251bGxfY29udGV4dCgpIGFuZCBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKSBmcm9tCisJbGlibmV0c25tcGhlbHBlcnMgdG8gbGlibmV0c25tcGFnZW50LiBOb3RlczogLSBUaGlzIGRvZXMgbm90IGFmZmVjdAorCWJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBhcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHdpdGgKKwkkKG5ldC1zbm1wLWNvbmZpZyAtLWFnZW50LWxpYnMpIHNpbmNlIHRoaXMgaW52b2x2ZXMgbGlua2luZyB3aXRoCisJYm90aCBsaWJuZXRzbm1waGVscGVycyBhbmQgbGlibmV0c25tcGFnZW50LiAtIEZ1bmN0aW9ucyBoYXZlIGJlZW4KKwltb3ZlZCBiZXR3ZWVuIGxpYnJhcmllcyBieSBtb3ZpbmcgZW50aXJlIHNvdXJjZSBmaWxlcy4KKworICAgIGxpYnJhcnk6CisgICAgICAtIFtQQVRDSCAyOTUyMTQwXTogT3ZlcmZsb3cgY291bnRlcjMyIGFuZCBnYXVnZTMyIG9uIDY0Yml0IHN5c3RlbXMKKwljb3JyZWN0bHkgUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvCisKKyAgICBsaWJzbm1wOgorICAgICAgLSBjaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpCisJZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbgorCXBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorCisgICAgbWFuOgorICAgICAgLSBbQlVHIDI5NzI4NjBdOiBVcGRhdGUgYnJva2VuIHJlZmVyZW5jZXMKIAogICAgIG1pYjJjOgotICAgICAgLSBbQlVHIDI4MjcyNjldOiBTdXBwcmVzcyBub24tb3JkZXJlZCBUT0RPIGNvbW1lbnRzCisgICAgICAtIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyB0byB1X2NoYXIqCiAgICAgICAtIFtCVUcgMjg4ODU2OV06IEZpeCBnZW5lcmF0aW9uIG9mIHRhYmxlIGNvbHVtbnMgYXJyYXkKLSAgICAgIC0gW1BBVENIIDIxMzY0MzddOiBJbXByb3ZlIDY0LWJpdCBoYW5kbGluZyBvZiBsYXJnZSB0YWJsZSBGTEFHIGRlZmluZXMgCi0gICAgICAtIFtQQVRDSCAyMzE2MTI3XTogRml4IGJ1ZyBpbiBpdGVyYXRlX2FjY2VzcyBnZW5lcmF0ZWQgY29kZS4KKyAgICAgIC0gbWliMmMgY2FuIG5vdyBvcHRpb25hbGx5IHJ1biBzZWQgb24gZ2VuZXJhdGVkIGNvZGUKKyAgICAgIC0gdGFibGVfZGF0YSB0ZW1wbGF0ZSBlbmhhbmNlbWVudHMgLSBhZGQgZXJyb3IgY2hlY2tzIGR1cmluZyB0YWJsZQorCWluaXQgLSBjcmVhdGUgY2FjaGUgZWFybGllciBzbyB3ZSBjYW4gYmFpbCBvbiBmYWlsdXJlIC0gYWRkIG9wdGlvbgorCXRvIGNyZWF0ZS9kZWxldGUgcm93IHcvb3V0IGFkZGluZy9yZW1vdmluZyBmcm9tIGNvbnRhaW5lcgorICAgICAgLSB1cGRhdGUgaW5saW5lIGRvY3VtZW50YXRpb247IGFkZCBzdG9yYWdldHlwZSB0ZXN0IGZvciBjb2x1bW5zCiAKICAgICBtaWJzOgogICAgICAgLSBbQlVHIDI5NzM4OTBdOiBGaXggaW1wb3J0cywgRGlza0lPRW50cnkgbGlzdCBhbmQgcmV2aXNpb24gaGlzdG9yaWVzCisgICAgICAtIHBhdGNoIDI5NzQ3MTY6IGZyb20gYnZhc3NjaGU6IGZpeCBpc3N1ZXMgaW4gdGhlIFNNVVgtTUlCCisKKyAgICBtaXNjOgorICAgICAgLSBbUEFUQ0ggMjgzNjExMl06IFVzZSB0aGUgcmlnaHQgbW9kaWZpZXIgd2hlbiBwcmludGluZyBzaXplX3QgYW5kCisJc3NpemVfdCB2YXJpYWJsZXMuCisgICAgICAtIFtQQVRDSCAyOTUyNzA4XTogT3N0ZXJrYW1wOiBBZGRlZCBQZXJsIGltcGxlbWVudGF0aW9uIG9mIEJSSURHRS1NSUIKIAogICAgIHBlcmw6Ci0gICAgICAtIFtCVUcgMTU1NDgxN106IEZpeCBjbGFzcyBhc3NpZ21lbnQgc28gZ2V0Um9vdE9JRCB3b3JrcyBwcm9wZXJseQotICAgICAgLSBbUEFUQ0ggMjAyMjk0OF06IEZpeCBmb3IgQ291bnRlcjY0IGluIHBlcmwgc3ViYWdlbnQKLSAgICAgIC0gW1BBVENIIDIxODIwNzldOiBGaXggdmFyaW91cyB3YXJuaW5ncyAmIGFsbG93IHVzZSBvZiAidXNlIHN0cmljdCIKLSAgICAgIC0gW1BBVENIIDIzNjE3MTJdOiBGaXggZ2V0YnVsayBvcHRpbWl6YXRpb24gZHVyaW5nIHdhbGtzCi0gICAgICAtIFtQQVRDSCAyNzkzODU3XTogUmVwb3J0IGZhaWxlZCBhc3luY2hyb25vdXMgcmVxdWVzdHMKLSAgICAgIC0gW1BBVENIIDI4OTA5MzFdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgQ291bnRlcjY0IHZhbHVlcy4KKyAgICAgIC0gTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyOjpnZXRWYWx1ZSgpOiBkb24ndCByZXR1cm4gYQorCXBvaW50ZXIgdG8gYSBidWZmZXIgb24gdGhlIHN0YWNrLiBIb3cgY2FuIHRoaXMgaGF2ZSB3b3JrZWQgcmVsaWFibHkKKwk/PyBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OnNldFZhbHVlKCksCisJQVNOX0NPVU5URVI2NDogZml4ZWQgYnVnIHRoYXQgY291bGQgY2F1c2UgdGhpcyBtZXRob2QgdG8gZmFpbCBldmVuCisJd2hlbiBhIHZhbGlkIG51bWJlciB3YXMgcHJvdmlkZWQuCisgICAgICAtIFtQQVRDSCAyODkwOTMxXTogQmV0dGVyIGhhbmRsaW5nIG9mIENvdW50ZXI2NCB2YWx1ZXMuIFBhdGNoCisJcHJvdmlkZWQgYnkgTWF4IFJvbWFub3YuCisgICAgICAtIGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGRlc3Ryb3lpbmcgYQorCU5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdC4KKyAgICAgIC0gZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZGVzdHJveWluZyBhCisJTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0LiBmaXhlZCBhIG1lbW9yeQorCWxlYWsgdHJpZ2dlcmVkIGJ5IGZhaWx1cmUgb2YgY3JlYXRpbmcgYSBOZXRTTk1QOjpPSUQgb2JqZWN0LgorICAgICAgLSBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBkZXN0cm95aW5nIGEKKwlOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QuIGZpeGVkIGEgbWVtb3J5CisJbGVhayB0cmlnZ2VyZWQgYnkgZmFpbHVyZSBvZiBjcmVhdGluZyBhIE5ldFNOTVA6Ok9JRCBvYmplY3QuIGZpeGVkCisJYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgdGhlIE5ldFNOTVA6Ok9JRDo6Z2V0dGFibGUoKSBzdWJyb3V0aW5lLgorICAgICAgLSBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBkZXN0cm95aW5nIGEKKwlOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QuIGZpeGVkIGEgbWVtb3J5CisJbGVhayB0cmlnZ2VyZWQgYnkgZmFpbHVyZSBvZiBjcmVhdGluZyBhIE5ldFNOTVA6Ok9JRCBvYmplY3QuIGZpeGVkCisJYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgdGhlIE5ldFNOTVA6Ok9JRDo6Z2V0dGFibGUoKSBzdWJyb3V0aW5lLgorCWZpeGVkIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIHRyaWdnZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24KKwlvZiBOZXRTTk1QOjpTTk1QLiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBhIFBEVSBwcm9jZXNzaW5nCisJZXJyb3IgaW4gTmV0U05NUDo6U05NUC4gZml4ZWQgbWVtb3J5IGxlYWtzIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbgorCVNOTVB2MyBzZXNzaW9uIHZpYSBOZXRTTk1QOjpTTk1QLiBBbHNvIGZpeGVkIHRoZSB1bmluaXRpYWxpemVkCisJdmFyaWFibGUgYWNjZXNzZXMgdHJpZ2dlcmVkIGJ5IGFkZGluZyBhIHZhcmJpbmQgdG8gYSBQRFUgdmlhCisJTmV0U05NUDo6U05NUCBpbnRyb2R1Y2VkIGEgZmV3IGRheXMgYWdvLiBUaGUgYnVncyBtZW50aW9uZWQgYWJvdmUKKwloYXZlIGJlZW4gZm91bmQgYnkgaW5zcGVjdGluZyB0aGUgb3V0cHV0IG9mIHRoZSBmb2xsb3dpbmcgc2hlbGwKKwljb21tYW5kOiBjZCBwZXJsICYmIHZhbGdyaW5kIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tbGVhay1jaGVjaz1mdWxsCisJbWFrZSB0ZXN0CiAKICAgICBweXRob246Ci0gICAgICAtIFtCVUcgMjI1ODkzNV06IFB5dGhvbiBFeHRlbnNpb24gTW9kdWxlIGZhaWxzIG9uIFNvbGFyaXMKLSAgICAgIC0gW0JVRyAyOTE5Mzc5XTogSW5pdGlhbGlzZSBTTk1QIHNlc3Npb25zIHByb3Blcmx5Ci0gICAgICAtIFtQQVRDSCAyMDc0ODE3XTogRml4IHJlZ2V4cCBlbmdpbmUgQ1BVIHBlcmZvcm1hbmNlIGlzc3VlcwotICAgICAgLSBbUEFUQ0ggMjI2MDgyOF06IEZpeCBweXRob24gc25tcHdhbGsgbWVtb3J5IGxlYWsKLSAgICAgIC0gW1BBVENIIDI1ODA5NzldOiBGaXggcHl0aG9uIHNlc3Npb24gcG9pbnRlcnMgb24gNjQtYml0IHN5c3RlbXMKLSAgICAgIC0gW1BBVENIIDI2Njc0MTVdOiBTdXBwb3J0ICJVc2VOdW1lcmljIiBvcHRpb24KLSAgICAgIC0gU3VwcG9ydCBudWxsLWJ5dGVzIGluIG9jdGV0IHN0cmluZ3MKKyAgICAgIC0gW0JVRyAyOTE5Mzc5XTogSW5pdGlhbGlzZSBTTk1QIHNlc3Npb25zIHByb3Blcmx5IFByb3ZpZGVkIGJ5IERpZWdvCisJQmlsbGkKKyAgICAgIC0gW1BBVENIIDIwMDE2NTZdOiBIYW5kbGUgbnVsbC10ZXJtaW5hdGlvbiBvZiBzdHJpbmcgdmFsdWVzIHByb3Blcmx5LgorCUJhc2VkIG9uIHRoZSBwcmluY2lwbGVzIG9mIHRoZSBwYXRjaCBmcm9tIFRvbW15IEJlYWRsZS4KKyAgICAgIC0gU3VwcG9ydCBudWxsLWJ5dGVzIGluIG9jdGV0IHN0cmluZ3MgUGF0Y2ggc3VwcGxpZWQgYnkgVG9tbXkgQmVhZGxlCisgICAgICAtIFtQQVRDSCAzMDM1MzI4XTogZnJvbTogc3dzOiBjaGVjayB0aGUgcmVzdWx0cyBvZiBzZXNzaW9uIGNyZWF0aW9uCisJZm9yIGEgZmFpbHVyZSBjYXNlLgorICAgICAgLSBwYXRjaCAzMDM1NTc4OiBmcm9tIHN3czoga2VlcCBlcnJvciBjb2RlcyB1cCB0byBkYXRlCiAKKyAgICB0ZXN0aW5nOgorICAgICAgLSBCcmFuZCBuZXcgdGVzdCBzdWl0ZSBkZXNpZ2VuZWQgdG8gZXZlbnR1YWxseSB0ZXN0IG1vcmUKKwlmdW5jdGlvbmFsaXR5LCBwcm92aWRlIGZvciBzdXBwb3J0IG9mIHVuaXQtdGVzdHMgYW5kIHN1cHBvcnQgb2YgQVBJCisJdGVzdHMKKyAgICAgIC0gQ2hhbmdlIHRoZSB0ZXN0IHN1aXRlIHRvIHdvcmsgZXZlbiBpZiBtaWIgbG9va3VwIGlzIGRpc2FibGVkLgorICAgICAgLSBDaGVjayB0aGUgc2l6ZSBvZiBzdW5fcGF0aCBhbmQgdXNlIHRoYXQgdG8gZ2VuZXJhdGUgdGhlIG1heGltYWwKKwlzaXplIHN0cmluZ3MgZm9yIHN0cmVzc2luZyBjb20yc2VjdW5peC4KKyAgICAgIC0gTWFrZSBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHRlc3Qgc3VpdGUgZnJvbSBhbnl3aGVyZS4gQ2hhbmdlIHRoZSAtRAorCW9wdGlvbiB0byBleHBlY3QgdGhlIHBhdGggb2YgdGhlIHRvcCBzb3VyY2UgZGlyZWN0b3J5LiBBZGQgYW4KKwktc3JjZGlyIG9wdGlvbiB0aGF0IGlzIGFuIGFsaWFzIGZvciAtRC4gQWRkIGFuIC1idWlsZGRpciBvcHRpb24gdG8KKwlkZXNpZ25hdGUgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdGVzdCBvYmplY3QgaXMuIFB1dCBzcmNkaXIgYW5kCisJYnVpbGRkaXIgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgdGVzdCBzY3JpcHRzIEZhY3RvciBvdXQgdGhlCisJZ3JlcCBwYXJ0IG9mIFNLSVBJRiBhbmQgU0tJUElGTk9UIHRvIElTREVGSU5FRCBVc2UgbW9yZSByZWFkYWJsZQorCWtleXMgaW4gdGhlIG9wdHMgaGFzaCBpbiBSVU5GVUxMVEVTVFMgQWRqdXN0IGV2ZXJ5dGhpbmcgdG8gdXNlCisJc3JjZGlyIGFuZCBidWlsZGRpcgorICAgICAgLSBNb3ZlIHRoZSBzZXR0aW5nIG9mIE1JQkRJUlMgZnJvbSB0aGUgc3VwcG9ydCBzY3JpcHQgdG8gdGhlIGRyaXZlcnMKKwlzaW5jZSBpdCBpcyBuZWVkZWQgZm9yIHRoZSBDIHRlc3RzIGFzIHdlbGwuCisgICAgICAtIFVzZSBvbGR1Y2RfcnVuLCBub3QgcnVuX29sZHVjZC4gQ2hhbmdlIHNyY2RpciB0byByZWZlciB0byB0aGUgdG9wCisJZGlyZWN0b3J5IGFuZCBub3QgdGhlIHRlc3Rpbmcgc3ViZGlyZWN0b3J5IGFzIHRoYXQgaXMgd2hhdCBpcworCWV4cGVjdGVkIGluIHRoZSB0ZXN0IHNjcmlwdHMuCisgICAgICAtIGFkZCB0aGUgdGVzdCBuYW1lIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZSAiaW52b2tlZCIuCisgICAgICAtIG1hZGUgaXQgcG9zc2libGUgdG8gYW5hbHl6ZSBhbGwgY29kZSBjb3ZlcmVkIGJ5IHRoZSByZWdyZXNzaW9uCisJdGVzdHMgd2l0aCBhIGR5bmFtaWMgYW5hbHl6ZXIsIGF0IGxlYXN0IGlmIHRoYXQgYW5hbHl6ZXIgc3VwcG9ydHMKKwlmb2xsb3dpbmcgY2hpbGQgcHJvY2Vzc2VzLiBBbiBleGFtcGxlOgkgcm0gLXJmIC90bXAvc25tcC10ZXN0LSoKKwltYWtlIC1zIFNOTVBfU0FWRV9UTVBESVI9eWVzIERZTkFNSUNfQU5BTFlaRVI9InZhbGdyaW5kCisJLS10cmFjZS1jaGlsZHJlbj15ZXMgLS10cmFjay1vcmlnaW5zPXllcyIgbWFrZSAtcyB0ZXN0IGdyZXAgLWkKKwl1bmluaXRpYWxpc2VkIC90bXAvc25tcC10ZXN0LSogfCB4YXJncyBsZXNzCiAKLSAgICBBSVg6Ci0gICAgICAtIFtCVUcgMjcxMjY3MF06IEFnZW50IGNyYXNoZXMgb24gQUlYIHdpdGggaHJTdG9yYWdlCisgICAgdW5zcGVjaWZpZWQ6CisgICAgICAtIENoYW5nZSB0aGUgdHlwZXMgb2YgdGhlIHJldHVybiB2YWx1ZXMgb2YgbmV0c25tcF8qX2dldFNlY05hbWUgZnJvbQorCWNoYXIqIHRvIGNvbnN0IGNoYXIqIHNpbmNlIHRoZXkgcG9pbnQgaW50byBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorICAgICAgLSBIaWRlIG1vc3QgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhlIGxvZ21hdGNoIG1vZHVsZS4gQ2xlYW5lZAorCXVwIHRoZSBoZWFkZXIgYWNjb3JkaW5nbHkuIFJlbW92ZSB0aGUgbmVlZCBmb3IgZm9yd2FyZCBkZWNsYXJhdGlvbnMKKwlieSByZW9yZGVyaW5nIHRoZSBmdW5jdGlvbnMuCisgICAgICAtIE1ha2UgdGhlIGxpc3RzIG9mIGNvbTJTZWMqRW50cmllcyBzdGF0aWMKKyAgICAgIC0gW0JVRyAyODM4MjQzXTogQ29ycmVjdCB0aGUgb3V0cHV0IG9mIHVuc2lnbmVkIHZhbHVlcy4gVGhhbmtzIHRvCisJSmFjayBIdWFuZyBvZiBRdWFsY29tbSB3aG8gcG9pbnRlZCBvdXQgdGhpcyBidWcuCisgICAgICAtIFtCVUcgMjk2OTg3Ml06IG1hZGUgc3VyZSB0aGF0IFNPQ0tfU1RBUlRVUCBpcyBpbnZva2VkIGJlZm9yZQorCWluaXRfYWdlbnQoKSBvbiBXaW5kb3dzLgorICAgICAgLSBbQlVHIDI5NzEyNTddOiBGaXhlZCB3aW5FeHRETEwgaGFuZGxpbmcgb2YgbXVsdGktdmFyYmluZCBnZXROZXh0CisJcmVxdWVzdHMgd2l0aCBPSURzIGluIHJldmVyc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyLgorICAgICAgLSBbUEFUQ0ggMjkyNjM3NF06IGZyb20gRWQgU3dpZXJrOiBmaXhlZCByZWFkaW5nIG9mIGlwQWRkcmVzc1RhYmxlCisJZnJvbSAvcHJvYy9uZXQvaWZfaW5ldDYgb24gTGludXggVGhlIGtlcm5lbCBtaWdodCBwcm92aWRlIGxvbmdlcgorCWZpZWxkcywgZXNwZWNpYWxseSBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICAgIC0gW1BBVENIIDI5NTIwMzRdOiBSZXR1cm4gb2YgdGhlIEdyZWF0IFN1U0UgJ3NwcmludGYnIEh1bnQuLi4gUGF0Y2gKKwlzdXBwbGllZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KKyAgICAgIC0gYWRkIGZ1bmN0aW9ucyB0byBnZXQgZmluZ2VycHJpbnQgZnJvbSBjZXJ0IGFuZCBsb2cgb3BlbnNzbCBlcnJzCisgICAgICAtIGFkZGVkIGEgbmV3IERFQlVHVFJBQ0VUT0soKSBtYWNybworICAgICAgLSBjb3JyZWN0bHkgY2FsY3VsYXRlIGlmWFRhYmxlLmlmSENJblVjYXN0UGt0cyBvbiAzMi1iaXQgTGludXggTGludXgKKwlkb2VzIG5vdCBwcm92aWRlIHN0YW5kYWxvbmUgY291bnRlciBmb3IgaW5jb21pbmcgdW5pY2FzdCBwYWNrZXRzCisJKGl1Y2FzdCkgLSBpdCBwcm92aWRlcyBjb3VudGVyIG9mIGFsbCBwYWNrZXRzIChpYWxsKSArIHNlcGFyYXRlCisJY291bnRlciBmb3IgdGhlIG11bHRpY2FzdCBvbmVzIChpbWNhc3QpLiBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZgorCWlmVGFibGUgcmVhZCB0aGVzZSBjb3VudGVycyBhbmQgY2FsY3VsYXRlZCBpdWNhc3QgPSBpYWxsIC0gaW1jYXN0CisJKmJlZm9yZSogdGhlc2UgdmFsdWVzIHdlcmUgZXhwYW5kZWQgaW50byA2NGJpdHMuIFRoaXMgcHJvZHVjZWQKKwllcnJvcnMgb24gMzJiaXQgc3lzdGVtcyB3aGVuIGlhbGwgb3ZlcmZsb3dlZCB0byB6ZXJvIGFuZCBpbWNhc3Qgd2FzCisJbm96ZXJvIC0+IGl1Y2FzdCBnb3QgbmVnYXRpdmUgYW5kICdjNjQgMzIgYml0IGNoZWNrIGZhaWxlZCcgZXJyb3IKKwlpbiBzbm1wZCBsb2cuIE5vdyB0aGUgYWdlbnQgZXhwYW5kcyB0aGVzZSB2YWx1ZXMgdG8gNjRiaXRzIGZpcnN0CisJYW5kICoJICAqdGhlbiogcGVyZm9ybXMgICAgdGhlIGNhbGN1bGF0aW9uLCB1c2luZyBhIG5ldyBmbGFnLiAKKwkyMDEwLTA1LTI3IDA4OjE4ICBtYWdmcgorICAgICAgLSBmaXhlZCBtZW1vcnkgbGVhayBpbiBSTU9OLU1JQiBhbmQgRVRIRVJMSUtFLU1JQiB3aGVuIHRoZXJlIGFyZQorCW11bHRpcGxlIGFsaWFzZXMgb2YgYW4gbmV0d29yayBpbnRlcmZhY2UgUmF0aW9uYWxlOiB0aGUgYWxpYXNlZAorCWludGVyZmFjZXMgaGF2ZSB0aGUgc2FtZSBpZkluZGV4IC0+IENPTlRBSU5FUl9JTlNFUlQgZmFpbHMsIGJ1dCB0aGUKKwlyZWplY3RlZCBlbnRyeSB3YXMgbm90IGZyZWVkLgorICAgICAgLSBnZW5lcmF0ZSB0aGUgdHJhbnNwb3J0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGxpc3QgZHluYW1pY2FsbHkgYW5kCisJdXNlIGl0CisgICAgICAtIG1vdmVkIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsaWJuZXRzbm1waGVscGVycyB0bworCWxpYm5ldHNubXBhZ2VudC4gbGlibmV0c25tcGhlbHBlcnMgaXMgbm93IGFuIGVtcHR5IGxpYnJhcnkuCisgICAgICAtIG1vdmVkIHRyYW5zcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4gc25tcGxpYgorICAgICAgLSBbQlVHIDMwMjc5MDBdOiB3aGVuIGNyb3NzLWNvbXBpbGluZyBpdCBpcyBub3cgYXNzdW1lZCB0aGF0IG1lbWNtcCgpCisJaXMgYXZhaWxhYmxlIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCBpdCBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgLSBEbyBubyBkb3VibGUgZGVjbGFyZSB0aGUgaW5kZXggdmFsdWVzLgorICAgICAgLSBIYW5kbGUgZW1iZWRkZWQgJSdzIGluIHRoZSByZXN1bHQgbWVzc2FnZS4KKyAgICAgIC0gaWxlbmNlIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MgZnJvbSB0ZXN0IGNhc2VzLgogCi0gICAgKkJTRDoKLSAgICAgIC0gW1BBVENIIDI0MzU3OTNdOiBTdXBwb3J0IDY0LWJpdCBJRi1NSUIgY291bnRlcnMgb24gc3lzY3RsIHN5c3RlbXMKLSAgICAgIC0gRml4IGEgbWFrZSB0ZXN0Ci0KLSAgICBIUC1VWDoKLSAgICAgIC0gW0JVRyAyNzc5NDcyXTogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UgdGFibGUgKEhQLVVYIDExLjMxKQotICAgICAgLSBbUEFUQ0ggMjA4ODcyNl06IEZpeCBhbiBpc3N1ZSByZXBvcnRpbmcgbmVnYXRpdmUgbWVtb3J5IHZhbHVlcworICAgIEN5Z3dpbjoKKyAgICAgIC0gSVB2NiBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBDeWd3aW4gMS43IG9yIGxhdGVyLiBUaGUgb2xkCisJaW1wbGVtZW50YXRpb24gb2YgSVB2NiBzdXBwb3J0IGluIE5ldC1TTk1QIHVuZGVyIEN5Z3dpbiBpbnZvbHZlZCBhCisJc3RyYW5nZSBtaXh0dXJlIG9mIEN5Z3dpbiBhbmQgV2luc29jazIgc29ja2V0IGNhbGxzLCB3aGljaCB3YXMgdG9vCisJaGFyZCB0byBtYWludGFpbi4KKyAgICAgIC0gSVB2NiBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBDeWd3aW4gMS43IG9yIGxhdGVyLiBUaGUgb2xkCisJaW1wbGVtZW50YXRpb24gb2YgSVB2NiBzdXBwb3J0IGluIE5ldC1TTk1QIHVuZGVyIEN5Z3dpbiBpbnZvbHZlZCBhCisJc3RyYW5nZSBtaXh0dXJlIG9mIEN5Z3dpbiBhbmQgV2luc29jazIgc29ja2V0IGNhbGxzLCB3aGljaCB3YXMgdG9vCisJaGFyZCB0byBtYWludGFpbi4gYnVpbGRzIGFnYWluIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQKKwkoLS1lbmFibGUtaXB2NikuIEF0IGxlYXN0IE5ldC1TTk1QIDUuNSBkb2Vzbid0IGJ1aWxkIHVuZGVyIEN5Z3dpbgorCXdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuIFRoZSBjb25maWd1cmUgc2NyaXB0IHJlcG9ydGVkICJjaGVja2luZworCWlwdjYgc3RhY2sgdHlwZSAuLi4gcmVzdWx0OiAidW5rbm93biwgbm8iIC4uLiBlcnJvcjogSVB2NgorCXRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiLgorICAgICAgLSBbQlVHIDI5MzkxNjhdOiBieXRlIG9yZGVyIG9mIHVkcExvY2FsUG9ydCBpcyBub3cgY29ycmVjdC4KKyAgICAgIC0gW0JVRyAyOTM5MTY4XTogZml4ZWQgdGVzdCBpbmZyYXN0cnVjdHVyZSAoIm1ha2UgdGVzdCIpLiBUaGlzIGhhcworCWJlZW4gZml4ZWQgYnkgdXNpbmcgdGhlIHByb3BlciBlbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIGFuZAorCWJ5IGFkZGluZyB0aGUgcGF0aCBvZiB0aGUgbmV0c3RhdCBleGVjdXRhYmxlIGZvciBDeWd3aW4gaW4KKwl0ZXN0aW5nL1RFU1RDT05GLnNoLgorICAgICAgLSBhYm9ydCBpZiB0aGUgZmlsZSBwcm9ncmFtIGNvdWxkIG5vdCBiZSBmb3VuZCwgc2luY2UgdGhpcyBpcworCWVzc2VudGlhbCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBsaWJ0b29sLiBuZWl0aGVyIGNvbXBpbGUgbm9yIGxpbmsKKwl3aW5waXBlLmMuCisgICAgICAtIGJ1aWxkaW5nIHdpdGggYW5vdGhlciBPcGVuU1NMIHBhY2thZ2UgdGhhbiB0aGUgQ3lnd2luLXByb3ZpZGVkCisJcGFja2FnZXMgb3BlbnNzbCBhbmQgb3BlbnNzbC1kZXZlbCBpcyBhZ2FpbiBwb3NzaWJsZS4KKyAgICAgIC0gYnVpbGRzIG5vdyBhbHNvIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgbG9jYXRlZCBvbiBhIFNhbWJhCisJZmlsZXN5c3RlbSBpbnN0ZWFkIG9mIGEgbG9jYWwgZmlsZXN5c3RlbS4KKyAgICAgIC0gZW5hYmxlZCBVbml4IHRyYW5zcG9ydC4gKEZvcndhcmQtcG9ydGVkIHIxODY4NyBmcm9tIHRoZSBWNS41CisJYnJhbmNoKS4KKyAgICAgIC0gbGlibmV0c25tcCBkb2VzIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuIGNvbmZpZ3VyZWQgd2l0aAorCS0tZW5hYmxlLXNoYXJlZC4KKyAgICAgIC0gbGlibmV0c25tcCBkb2VzIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuIGNvbmZpZ3VyZWQgd2l0aAorCS0tZW5hYmxlLXNoYXJlZC4gcGVybCBtb2R1bGVzIGRvIG5vdyBidWlsZCAoLS13aXRoLXBlcmwtbW9kdWxlcykuCisJTm90ZTogdGhlIFQwNjB0cmFwZHBlcmxfb2xkdWNkLCBUMDYxYWdlbnRwZXJsX29sZHVjZCBhbmQKKwlUMTE1YWdlbnR4cGVybF9vbGR1Y2QgdGVzdHMgc3RpbGwgZmFpbC4KKyAgICAgIC0gbGlibmV0c25tcG1pYnMsIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQgZG8gbm93IGJ1aWxkCisJYXMgYSBETEwgd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtc2hhcmVkLgorICAgICAgLSBwZXJsOiBidWlsZGluZyB0aGUgUGVybCBtb2R1bGVzIHdpdGggdGhlIEN5Z3dpbiBQZXJsIHBhY2thZ2UgaXMgbm93CisJcG9zc2libGUuIChGb3J3YXJkLXBvcnRlZCByMTg2ODggZnJvbSB0aGUgVjUuNSBicmFuY2guKQorICAgICAgLSB0aGUgbWVzc2FnZSAiY29uZmlndXJlOiBXQVJOSU5HOiB3aW5zb2NrLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZQorCWNvbXBpbGVkIiBkb2VzIG5vIGxvbmdlciBhcHBlYXIgd2hlbiBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCUZvbGxvdy11cCBmb3IgcjE4MDUwOiByZS1lbmFibGVkIGxpYmlwaGxwYXBpIGFuZCBpcGhscGFwaS5oIHRlc3RzCisJZm9yIG5vbi1NaW5HVyBwbGF0Zm9ybXMgc2luY2UgdGhlIEN5Z3dpbiBidWlsZCBuZWVkcyB0aGVzZS4KKyAgICAgIC0gY29ycmVjdGVkIGVycm9yIGhhbmRsaW5nIGluIG1pYklJL2F0LgogCiAgICAgTGludXg6Ci0gICAgICAtIFtCVUcgMjgyMjM1NV06IEZpeCBtZW1vcnkgbGVha3Mgb24gdWRwRW5kcG9pbnRUYWJsZQotICAgICAgLSBbUEFUQ0ggMjkyNjM3NF06IEZpeCAvcHJvYy9uZXQvaWZfaW5ldDYgcmVhZGluZyBvZiBpcEFkZHJlc3NUYWJsZQotICAgICAgLSBGaXggYnVpbGQgb24gbW9kZXJuIGRpc3RyaWJ1dGlvbnMgKHVzaW5nIHJwbS00LjYpCi0gICAgICAtIGZpeCByYXJlIHJhY2UgY29uZGl0aW9uIHdoZW4gcmVhZGluZyBSUE0gZGF0YWJhc2UKKyAgICAgIC0gSW1wcm92ZWQgRXRoZXJMaWtlLU1JQiBzdXBwb3J0IFBhdGNoIHN1cHBsaWVkIGJ5IEpvc2VmIE1vZWxsZXJzCisgICAgICAtIGJ1aWxkcyBhZ2FpbiB3aXRoIGVtYmVkZGVkIFBlcmwgZGlzYWJsZWQgKGJ1ZyAyOTg1OTE1KS4KKworICAgIE1pbkdXOgorICAgICAgLSBidWlsZGluZyB3aXRoIGFub3RoZXIgT3BlblNTTCBwYWNrYWdlIHRoYW4gdGhlIEN5Z3dpbi1wcm92aWRlZAorCXBhY2thZ2VzIG9wZW5zc2wgYW5kIG9wZW5zc2wtZGV2ZWwgaXMgYWdhaW4gcG9zc2libGUuIGJ1aWxkaW5nIHdpdGgKKwlPcGVuU1NMIHdvcmtzIGFnYWluLgorICAgICAgLSBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaXMgYWdhaW4gcG9zc2libGUgKCdtYWtlIHRlc3QnKS4KKyAgICAgIC0gc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIGNvbmZpZ3VyZSB0ZXN0IGRvZXMgbm93IHdvcmsuCisgICAgICAtIHdpbkV4dERMTCBjb21waWxlcyBub3cgdW5kZXIgTWluR1cuIGJ1aWxkaW5nIE5ldC1TTk1QIHdvcmtzIGFnYWluLgorCURldGFpbGVkIG92ZXJ2aWV3OiAqIENoYW5nZXMgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQ6CisgICAgICAtIHJlZnVzZSB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaWYga2lsbC5leGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgLSBydW5fc2hlbGxfY29tbWFuZCgpIHdpdGggZWl0aGVyIGlucHV0IG9yIG91dHB1dCAoYnV0IG5vdCBib3RoKSBkb2VzCisJbm93IHdvcmsuIFRoaXMgZGlkIG5vdCB3b3JrIHVudGlsIG5vdyBiZWNhdXNlIG9uIE1pbkdXIG1rc3RlbXAoKQorCWdlbmVyYXRlcyBhIE1pbkdXLXN0eWxlIHBhdGggKC90bXAvLi4uKSB3aGlsZSBzeXN0ZW0oKSBpbnZva2VzCisJY21kLmV4ZSBhbmQgaGVuY2UgZXhwZWN0cyBhIFdpbmRvd3Mtc3R5bGUgcGF0aCAoQzpcLi4uKS4KKyAgICAgIC0gdGVzdGluZzogc2tpcCB0aGUgdGVzdHMgdGhhdCByZXF1aXJlIFNJR0hVUCBzaW5jZSBNaW5HVyBkb2VzIG5vdAorCXN1cHBvcnQgU0lHSFVQLgorICAgICAgLSB0ZXN0cyBUMDU5IGFuZCBUMDY1IGRvIG5vdyBwYXNzLgorICAgICAgLSB0ZXN0cyBUMTEwLCBUMTExLCBUMTEyLCBUMTIwLCBUMTIxIGFuZCBUMTIyIGRvIG5vdyBwYXNzIHdoZW4gc25tcGQKKwlpcyBidWlsdCB3aXRoIHdpbkV4dERMTCBzdXBwb3J0IGVuYWJsZWQuCiAKICAgICBTb2xhcmlzOgotICAgICAgLSBbUEFUQ0ggMjAxMjQwNF06IERlYWwgd2l0aCBtb3JlIHRoYW4gMTAgaW50ZXJmYWNlcwotICAgICAgLSBbUEFUQ0ggMjQwNjM3OF06IEZpeCBoclNXUnVuUGVyZk1lbSBvbiA2NC1iaXQgU29sYXJpcyBzeXN0ZW1zCi0gICAgICAtIFtQQVRDSCAyNzUxNTg4XTogSW5jb25zaXN0ZW50IGRhdGEgKGUuZy4gVURQL1RDUCBNSUIgc2NhbGFyIHZhbHVlcwotCW9mIHplcm8pIGNhbiBiZSByZXBvcnRlZCBvbiBTb2xhcmlzIDEwVTQrCi0gICAgICAtIFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIHBhY2thZ2UgdmVyc2lvbgorICAgICAgLSBPUyBoZWFkZXIgZGV0ZWN0aW9uIGNoZWNrIGlzIG5vdyBydW4gYmVmb3JlIElQdjYgc3RhY2sgZGV0ZWN0aW9uLgorCXNvY2thZGRyX2luNi5zaW42X2FkZHIgY29uZmlndXJlIHRlc3QgZG9lcyBub3cgd29yay4KKyAgICAgIC0gUHJvdGVjdCBhZ2FpbnN0IG1pc3NpbmcgcGFja2FnZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNyYXNoaW5nIHRoZQorCWFnZW50LiBQcm9ibGVtIHJlcG9ydGVkIGJ5IElueWF2ZW4gU2FrYXJhaS4KIAotICAgIFdpbmRvd3M6Ci0gICAgICAtIFtCVUcgMjk5NzQ5Ml06IGJ5dGUgb3JkZXIgb2YgdWRwTG9jYWxQb3J0IGlzIG5vdyBjb3JyZWN0Ci0gICAgICAtIFtCVUcgMjk3MTI1N106IEZpeGVkIHdpbkV4dERMTCBoYW5kbGluZyBvZiBtdWx0aS12YXJiaW5kIGdldE5leHQgcmVxdWVzdHMuCi0gICAgICAtIFtCVUcgMjc3OTU0MV06IEZpeGVkIGhhbmRsZSBsZWFrIGluIHBhc3NfcGVyc2lzdAotICAgICAgLSBbUEFUQ0ggMjY4NjI0OF06IEFwcGxpZWQgcGF0Y2ggYnkgQmFydCBWYW4gQXNzY2hlCi0gICAgICAtIFtQQVRDSCAyNjg4MzQyXTogRml4IHZhcmlvdXMgVlMyMDA1IGNvbXBpbGVyIHdhcm5pbmdzCi0gICAgICAtIFtQQVRDSCAyNjkxODc2XTogQXBwbGllZCBwYXRjaCBieSByZGlleiB0byBhbGxvdwotICAgICAgLSBbUEFUQ0ggMjY5Mzc0Nl06IGltcHJvdmVkIHNvY2tldCBzdGFydHVwIHN1cHBvcnQKLSAgICAgIC0gRGV0ZWN0IGZyZWUgVURQIHBvcnRzIGNvcnJlY3RseSBmb3IgdXNlIGluIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCi0gICAgICAtIEZpeCBiYXRjaCBidWlsZCB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpby4KLSAgICAgIC0gRml4IGJ1aWxkcyB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkCi0gICAgICAtIEZpeCBidWlsZCB1bmRlciBNaW5HVwotICAgICAgLSBGaXggd2luRXh0RExMIGJ1aWxkIG9uIFdpbmRvd3MgVmlzdGEsIFdpbmRvd3MgNwotICAgICAgLSBGaXggd2luRXh0RExMIGJ1aWxkIHdpdGggTWluR1cKLSAgICAgIC0gU2ltcGxpZnkgYnVpbGRpbmcgTmV0LVNOTVAgKyB3aW5FeHRETEwgd2l0aCBNU1ZDCi0gICAgICAtIHdpbkV4dERMTDogRml4ZWQgYSBtZW1vcnkgbGVhayB3aGVuIFNubXBFeHRlbnNpb25RdWVyeShFeCkgZmFpbHMKLSAgICAgIC0gd2luRXh0RExMOiBMb2cgZXJyb3JzIHdoZW4gbG9hZGluZyBhbiBleHRlbnNpb24gRExMIGZhaWxzCi0gICAgICAtIHdpbkV4dERMTDogVXNlIFJGQy1jb21wbGlhbnQgZXJyb3IgY29kZXMgaW4gU05NUCByZXNwb25zZSBQRFVzCi0gICAgICAtIHdpbkV4dERMTDogRml4IGhhbmRsaW5nIG9mIG11bHRpcGxlIHZhcmJpbmQgU0VUIHJlcXVlc3RzCisgICAgV2luMzI6CisgICAgICAtIEZpeCBiYXRjaCBidWlsZCB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpby4gUGFydGlhbAorCWJhY2sgcG9ydCBvZiBTVk4gcmV2aXNpb25zIDE3NTczIGFuZCAxNzY5Ni4KKyAgICAgIC0gVGhlIGhlYWRlciBmaWxlIDxzeXMvdGltZWIuaD4gaXMgbm8gbG9uZ2VyIGluY2x1ZGVkIGZyb20KKwk8bmV0LXNubXAvdHlwZXMuaD4uIE9yOiB0aGUgaGVhZGVyIGZpbGUgPHN5cy90aW1lYi5oPiB3aWxsIGhhdmUgdG8KKwliZSBpbmNsdWRlZCBleHBsaWNpdGx5IGluIHNvdXJjZSBmaWxlcyB0aGF0IG5lZWQgdGhlIGRlY2xhcmF0aW9uIG9mCisJdGhlIGZ1bmN0aW9uIGZ0aW1lKCkuIE5vdGU6IGNvbXBhcmVkIHRvIHIxODAyNCBhbmQgYmVmb3JlLCB0aGlzCisJY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBCU0Qgc3lzdGVtcyAtLSA8c3lzL3RpbWViLmg+IHdhcyBvbmx5CisJaW5jbHVkZWQgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4gb24gQlNEIHN5c3RlbXMgaW4gcmV2aXNpb25zCisJcjE4MDI1Li5yMTgxNTIuCisgICAgICAtIGFkZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4gaW4gd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggc3VjaAorCXRoYXQgdGhlIE1TVkMgY29tcGlsZXIgZG9lc24ndCBnZXQgY29uZnVzZWQgYnkgdGhlIG1hbGxvYworCXJlZGVmaW5pdGlvbiB3aGVuIGJ1aWxkaW5nIGxpYnNubXAgYXMgYSBETEwuCisgICAgICAtIGFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9tYWxsb2MoKSwgbmV0c25tcF9jYWxsb2MoKSwKKwluZXRzbm1wX3JlYWxsb2MoKSwgbmV0c25tcF9zdHJkdXAoKSBhbmQgbmV0c25tcF9mcmVlKCkuIHNubXBsaWI6CisJcmVtb3ZlZCB0aGUgdHJvdWJsZXNvbWUgI2RlZmluZSBtYWxsb2MgbmV0c25tcF9tYWxsb2MgZXRjLiBUaGlzCisJbWVhbnMgdGhhdCB3aGVuIGNhbGxpbmcgZnVuY3Rpb25zIGZyb20gdGhlIE5ldC1TTk1QIERMTCBmcm9tIEMgb3IKKwlDKysgY29kZSB0aGF0IGlzIGJlaW5nIGxpbmtlZCBhZ2FpbnN0IGFub3RoZXIgdmVyc2lvbiBvZiB0aGUgTVNWQworCXJ1bnRpbWUgRExMIHRoYW4gdGhlIE5ldC1TTk1QIERMTCwgYW5kIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgdGhhdAorCXdpbGwgYmUgZnJlZWQgYnkgdGhlIE5ldC1TTk1QIERMTCwgeW91IHdpbGwgZWl0aGVyIGhhdmUgdG8gY2FsbCB0aGUKKwlOZXQtU05NUCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgZXhwbGljaXRseSBvciByZWRlZmluZQorCW1hbGxvYygpIGV0Yy4geW91cnNlbGYuCisgICAgICAtIGJhdGNoIGJ1aWxkOiByZXBsYWNlZCB0aGUgb2Jzb2xldGUgL0dYIGJ5IHRoZSBlcXVpdmFsZW50IC9FSHNjLgorICAgICAgLSBiYXRjaCBidWlsZDogcmVwbGFjZWQgdGhlIG9ic29sZXRlIC9HWCBieSB0aGUgZXF1aXZhbGVudCAvRUhzYy4KKwliYXRjaCBidWlsZDogYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRAorCSJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIHRvIG1ha2UgYnVpbGRpbmcgd2l0aCBNU1ZDIDIwMDggbW9yZQorCXNpbGVudC4KKyAgICAgIC0gYmF0Y2ggYnVpbGQ6IHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSAvR1ggYnkgdGhlIGVxdWl2YWxlbnQgL0VIc2MuCisJYmF0Y2ggYnVpbGQ6IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QKKwkiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiB0byBtYWtlIGJ1aWxkaW5nIHdpdGggTVNWQyAyMDA4IG1vcmUKKwlzaWxlbnQuIGJhdGNoIGJ1aWxkOiByZW1vdmVkIC9GcC4uLiBhbmQgL1lYLiBUaGVzZSBvcHRpb25zCisJaW5mbHVlbmNlIGhvdyBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIG5vdAorCXVzZWQgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0LiAvWVggaXMgbm90IHN1cHBvcnRlZCBieSBNU1ZDCisJMjAwOC4KKyAgICAgIC0gYmF0Y2ggYnVpbGQ6IHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSAvR1ggYnkgdGhlIGVxdWl2YWxlbnQgL0VIc2MuCisJYmF0Y2ggYnVpbGQ6IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QKKwkiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiB0byBtYWtlIGJ1aWxkaW5nIHdpdGggTVNWQyAyMDA4IG1vcmUKKwlzaWxlbnQuIGJhdGNoIGJ1aWxkOiByZW1vdmVkIC9GcC4uLiBhbmQgL1lYLiBUaGVzZSBvcHRpb25zCisJaW5mbHVlbmNlIGhvdyBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIG5vdAorCXVzZWQgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0LiAvWVggaXMgbm90IHN1cHBvcnRlZCBieSBNU1ZDCisJMjAwOC4gYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgYSBkdXBsaWNhdGUgb2NjdXJyZW5jZSBvZiBzdHJ0b3VsbC5vYmouCisgICAgICAtIGJ1aWxkaW5nOiBBZGRlZCBsaWJzbm1wLmRlZiB0byB0aGUgbGlzdCBvZiBsaWJzbm1wX2RsbC5kc3Agc291cmNlCisJZmlsZXMgc3VjaCB0aGF0IHRoZSBETEwgaXMgcmVidWlsdCB3aGVuIHRoZSAuZGVmIGZpbGUgaGFzIGJlZW4KKwltb2RpZmllZC4KKyAgICAgIC0gYnVpbGRpbmc6IGJ1aWxkaW5nIE5ldFNOTVAucG0gZG9lcyBubyBsb25nZXIgdHJpZ2dlciBjb21waWxlcgorCXdhcm5pbmdzIGFib3V0IHJlZGVmaW5pbmcgX1dJTjMyX1dJTk5UIG5vciBOVERESV9WRVJTSU9OLgorICAgICAgLSBidWlsZGluZzogY29udmVydGVkIC5kc3AvLmRzdyBmaWxlcyB0byAudmNwcm9qLy5zbG4gZmlsZXMuIFRoaXMKKwlpbXBsaWVzIHRoYXQgc3VwcG9ydCBmb3IgTVNWQyA2LjAgaGFzIGJlZW4gZHJvcHBlZCBhbmQgdGhlIG1pbmltdW0KKwlNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB2ZXJzaW9uIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBOZXQtU05NUAorCXNvdXJjZSBjb2RlIGlzIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgKDIwMDIpLgorICAgICAgLSBidWlsZGluZzogbWFkZSBidWlsZGluZyBOZXRTTk1QLnBtIG1vcmUgc2lsZW50IGJ5IGFkZGluZyB0aGUgTVNWQworCWNvbXBpbGVyIGZsYWdzIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKwktRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUy4KKyAgICAgIC0gYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbW9yZSBzaWxlbnQgYnkgbm90IHJlZGVmaW5pbmcgbWFsbG9jKCkgb3IKKwlmcmVlKCkgZHVyaW5nIGNvbXBpbGF0aW9uIG9mIFBlcmwgZXh0ZW5zaW9ucyAocmVzdWx0ZWQgaW4gd2FybmluZ3MKKwlhYm91dCBtYWxsb2MoKSAvIGZyZWUoKSByZWRlZmluaXRpb24gaW4gdGhlIFBlcmwgaGVhZGVyCisJQ09SRS9YU1VCLmgpLgorICAgICAgLSBidWlsZGluZzogcmVuYW1lZCBsaWJzZGxsLmRzdyBpbnRvIHdpbjMyZGxsLmRzdy4KKyAgICAgIC0gYnVpbGRpbmc6IHJlbmFtZWQgbGlic2RsbC5kc3cgaW50byB3aW4zMmRsbC5kc3cuIGJ1aWxkaW5nOgorCXNpbXBsaWZpZWQgbGlua2luZyB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zIHdpdGggbmV0c25tcC5kbGwgYnkKKwlhZGRpbmcgYWxsIGFwcGxpY2F0aW9uIHByb2plY3RzIHRvIHRoZSBzYW1lIHdvcmtzcGFjZSB0aGF0IGlzIHVzZWQKKwlmb3IgYnVpbGRpbmcgdGhlIERMTC4KKyAgICAgIC0gYnVpbGRpbmc6IHJlbmFtZWQgbGlic2RsbC5kc3cgaW50byB3aW4zMmRsbC5kc3cuIGJ1aWxkaW5nOgorCXNpbXBsaWZpZWQgbGlua2luZyB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zIHdpdGggbmV0c25tcC5kbGwgYnkKKwlhZGRpbmcgYWxsIGFwcGxpY2F0aW9uIHByb2plY3RzIHRvIHRoZSBzYW1lIHdvcmtzcGFjZSB0aGF0IGlzIHVzZWQKKwlmb3IgYnVpbGRpbmcgdGhlIERMTC4gYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbmV0c25tcC5kbGwgbGVzcworCWVycm9yIHByb25lIGJ5IGxldHRpbmcgdGhlIGNvbXBpbGVyIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlCisJcHJlcHJvY2Vzc29yIHN5bWJvbCBORVRTTk1QX1VTRV9ETEwgaGFzIG5vdCBiZWVuIGRlZmluZWQuCisgICAgICAtIGJ1aWxkaW5nOiBzaW1wbGlmaWVkIHRoZSBidWlsZCBwcm9jZXNzIGJ5IHJlbW92aW5nIHRoZSBmaWxlCisJd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4uIFdoaWNoIElQdjYgZnVuY3Rpb25zIGFyZSBleHBvcnRlZAorCWZyb20gbmV0c25tcC5kbGwgaXMgbm93IGRldGVybWluZWQgYnkgd2hpY2ggb2YgdGhlIGZ1bmN0aW9ucyBpbgorCXRoaXMgRExMIGhhdmUgYmVlbiBkZWNsYXJlZCBhcyBORVRTTk1QX0lNUE9SVC4KKyAgICAgIC0gYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIHByb2NlZHVyZSBmb3IgYnVpbGRpbmcgd2l0aCBTTk1QdjMgc3VwcG9ydAorCWVuYWJsZWQgKE9wZW5TU0wpLgorICAgICAgLSBjaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpCisJZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbgorCXBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLiBjaGFuZ2VkCisJaW5fYWRkcl90IGZyb20gdV9pbnQgdG8gdV9sb25nIHN1Y2ggdGhhdCBpdCBtYXRjaGVzIHRoZSBkYXRhdHlwZSBvZgorCXNvY2thZGRyX2luOjpzaW5fYWRkci4gQWxzbywgZml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncworCShtb3N0bHkgY2hhciAqIDw+IHVfY2hhciAqIG1pc21hdGNoZXMpIGFuZCByZW1vdmVkIHNvbWUgY2FzdHMuCisgICAgICAtIGRlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgZnJvbSB0aGUgTmV0LVNOTVAgRExMIGFzCisJTkVUU05NUF9JTVBPUlQuIFRoZSByZXN1bHQgaXMgYSBtaW5vciBvcHRpbWl6YXRpb246IGNvZGUgdGhhdCB1c2VzCisJdGhlIE5ldC1TTk1QIERMTCB3aWxsIG5vdyBjYWxsIHRoZSBETEwtZXhwb3J0ZWQgZnVuY3Rpb25zIGRpcmVjdGx5CisJaW5zdGVhZCBvZiBpbmRpcmVjdGx5IHZpYSB0aGUgc3R1YiBpbiB0aGUgaW1wb3J0IGxpYnJhcnkuCisgICAgICAtIGV4cG9ydGVkIG5ldHNubXBfcmVhZF9tb2R1bGUoKSBmcm9tIG5ldHNubXAuZGxsIHN1Y2ggdGhhdAorCU5ldFNOTVAucG0gYnVpbGRzIGFnYWluLgorICAgICAgLSBleHBvcnRlZCBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZygpIGZyb20gbmV0c25tcC5kbGwuCisgICAgICAtIGxpYnNubXAgYnVpbGRzIGFnYWluIGFzIGEgRExMIHdoZW4gSVB2NiBpcyBlbmFibGVkLgorICAgICAgLSBwZXJsOiBmaXhlZCBzZXZlcmFsICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycy4gTm90ZTogc2luY2UKKwljYWxsb2MoKSBpcyBub3QgcmVkZWZpbmVkIGluIDxDT1JFL1hTVUIuaD4gdXNpbmcgY2FsbG9jKCkgZGlyZWN0bHkKKwlvciBpbmRpcmVjdGx5IGxlYWRzIHRvICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycywgYXQgbGVhc3Qgb24KKwlXaW5kb3dzLgorICAgICAgLSB3aW5FeHRETEw6IGRvbid0IHRyaWdnZXIgYSBuZXRzbm1wX2Fzc2VydCgpIHdoZW4gbm8gZXh0ZW5zaW9uIERMTHMKKwloYXZlIGJlZW4gbG9hZGVkLgorICAgICAgLSB3aW5FeHRETEw6IGZpeGVkIGEgYnVnIGluIGdldE5leHQgaGFuZGxpbmcgdGhhdCBjb3VsZCBjYXVzZSB0aGUgTUlCCisJb3V0cHV0IHRvIGJlIHRydW5jYXRlZC4KKyAgICAgIC0gd2luRXh0RExMOiBtdWx0aXBsZSB2YXJiaW5kIHNldCByZXF1ZXN0cyBhcmUgbm93IHByb2Nlc3NlZAorCWNvcnJlY3RseS4KKyAgICAgIC0gd2luRXh0RExMOiBtdWx0aXBsZSB2YXJiaW5kIHNldCByZXF1ZXN0cyBhcmUgbm93IHByb2Nlc3NlZAorCWNvcnJlY3RseS4gd2luRXh0RExMOiBtYWRlIGVycm9yIGNvZGVzIGluIFNOTVAgcmVzcG9uc2UgUERVcyBhcworCVJGQy1jb21wbGlhbnQgYXMgcG9zc2libGUuCisgICAgICAtIHdpbkV4dERMTDogbXVsdGlwbGUgdmFyYmluZCBzZXQgcmVxdWVzdHMgYXJlIG5vdyBwcm9jZXNzZWQKKwljb3JyZWN0bHkuIHdpbkV4dERMTDogbWFkZSBlcnJvciBjb2RlcyBpbiBTTk1QIHJlc3BvbnNlIFBEVXMgYXMKKwlSRkMtY29tcGxpYW50IGFzIHBvc3NpYmxlLiB3aW5FeHRETEw6IGlmIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIERMTAorCWZhaWxzLCB0aGUgcmVhc29uIHdoeSBsb2FkaW5nIGZhaWxlZCBpcyBub3cgbG9nZ2VkLgorICAgICAgLSB3aW5FeHRETEw6IG11bHRpcGxlIHZhcmJpbmQgc2V0IHJlcXVlc3RzIGFyZSBub3cgcHJvY2Vzc2VkCisJY29ycmVjdGx5LiB3aW5FeHRETEw6IG1hZGUgZXJyb3IgY29kZXMgaW4gU05NUCByZXNwb25zZSBQRFVzIGFzCisJUkZDLWNvbXBsaWFudCBhcyBwb3NzaWJsZS4gd2luRXh0RExMOiBpZiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBETEwKKwlmYWlscywgdGhlIHJlYXNvbiB3aHkgbG9hZGluZyBmYWlsZWQgaXMgbm93IGxvZ2dlZC4gd2luRXh0RExMOgorCWZpeGVkIGEgbWVtb3J5IGxlYWsgdGhhdCBvY2N1cnJlZCB3aGVuIFNubXBFeHRlbnNpb25RdWVyeShFeCkKKwlmYWlsZWQuIFRoaXMgbWVtb3J5IGxlYWsgaGFzIGJlZW4gZm91bmQgdmlhIHNvdXJjZSByZWFkaW5nLiBOb3RlOgorCWl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIGl0IHdhcyBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgbWVtb3J5CisJbGVhay4gVGhpcyBsZWFrIGlzIGNlcnRhaW5seSBub3QgdHJpZ2dlcmVkIGJ5IGV2ZXJ5IHJlcXVlc3QgZm9yCisJd2hpY2ggYSByZXNwb25zZSB3aXRoIG5vbi16ZXJvIGVycm9yIHN0YXR1cyBpcyBzZW50IGJhY2suCisgICAgICAtIFN1cHByZXNzZWQgImltcGxpY2l0IGNhc3QgZnJvbSBpbnQgdG8gdV9jaGFyIiB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkKKwlNU1ZDLgorICAgICAgLSBtYWRlIHN1cmUgdGhhdCBhY2Nlc3NpbmcgdGhlIG1pYklJIGludGVyZmFjZXMgdGFibGUgZG9lcyBub3QKKwl0cmlnZ2VyIG91dC1vZi1yYW5nZSBhcnJheSBhY2Nlc3NlcyAod2FzIGRldGVjdGVkIGJ5CisJQm91bmRzQ2hlY2tlcikuCisgICAgICAtIEZpeCBidWlsZCB1bmRlciBNaW5HVyBiYWNrL2ZvcndhcmQgcG9ydCBvZiByZXZpc2lvbiAxODYzMQogCiAKLSogNS40LjIgKgorCisqNS41KgogCiAgICAgc25tcGxpYjoKLSAgICAgIC0gW0JVRyAxNzkzNTQ1XTogVGFrZSB0aGUgbmFtZSBmcm9tIHRoZSBzb2NrYWRkcl91bgorICAgICAgLSBbQlVHIDExNzE5MDRdOiBmaXggcmVjdmZyb20gaGFuZ3MgKGFscmVhZHkgY2xvc2VkKQorICAgICAgLSBbQlVHIDEzNDUyOTZdOiBmaXggcmVjdmZyb20gaGFuZ3MgKGFscmVhZHkgY2xvc2VkKQorICAgICAgLSBbQlVHIDE2MDAxNzFdOiBTdXBwb3J0IGxvbmdlciBjb21tdW5pdHkgc3RyaW5ncyBpbiBWQUNNIGNvbmZpZy4KKyAgICAgIC0gW0JVRyAxNjE5ODI3XTogaW1wcm92ZSBoYW5kbGluZyBvZiBsaW5rIGRlcGVuZGVuY2llcworICAgICAgLSBbQlVHIDE2NjAwNjFdOiBWYWxpZGF0ZSBlbmdpbmVJRHMgbW9yZSBzdHJpY3RseS4KICAgICAgIC0gW0JVRyAxNzk1ODQwXTogU2lnbmVkIDMyLWJpdCB0cnVuY2F0aW9uIGxvZ2dlZCBhcyBkZWJ1ZyBtZXNzYWdlCi0gICAgICAtIFtCVUcgMTgwMTgzNV06IFN1cHBvcnQgbXVsdGlwbGUgZGVmYXVsdCB0cmFuc3BvcnRzIGZvciBhbiBhcHAuCiAgICAgICAtIFtCVUcgMTg2NjY1NV06IEhhbmRsZSBwYXJzaW5nIGludmFsaWQgT0lEIHN1YmlkZW50aWZpZXJzCisgICAgICAtIFtCVUcgMTg5ODE5OF06IEF2b2lkIGEgc2VnZmF1bHQgd2hlbiBwYXJzaW5nIGJyb2tlbiBtaWJzLgogICAgICAgLSBbQlVHIDE5NTgwNDFdOiBFbnN1cmUgSURzIGFyZSBub3QgdHJ1bmNhdGVkLgotICAgICAgLSBbQlVHIDIwMjc4MzRdOiBFeHRlbmQgc3RyaW5nIHByaW50IGJ1ZmZlciBieSB0aGUgbWluaW11bSBuZWNlc3NhcnkKKyAgICAgIC0gW0JVRyAxOTc2NzcyXTogQ2hhbmdlZCBtaWIgcGFyc2VyIHRvIGhhbmRsZSBsb25nIGJpbmFyeS9oZXggc3RyaW5ncy4KKyAgICAgIC0gW0JVRyAyMDAxMTI0XTogQWxsb3cgZW1iZWRkZWQgTlVMIGNoYXJhY3RlcnMgaW4gdXNtVXNlclB1YmxpYworICAgICAgLSBbQlVHIDIwMjc4MzRdOiBFeHRlbmQgc3RyaW5nIHByaW50IGJ1ZmZlciBieSB0aGUgbWluaW11bSBuZWNlc3NhcnkuCisgICAgICAtIFtCVUcgMjA5OTk4NV06IEFkZGVkIGNvbnN0IHF1YWxpZmllcnMgdG8gdGltZSBjb252ZXJzaW9uIHJvdXRpbnMKKyAgICAgIC0gW1BBVENIIDI4Mjc3MjJdOiBJbXByb3ZlIHN0cnRvdWxsIHRvIGJlIGxlc3MgTVNWQy1zcGVjaWZpYwogICAgICAgLSBbQlVHIENvdmVyaXR5ICMxODNdOiBmaXggbWVtb3J5IGxlYWsgaWYgSVBfUEtUSU5GTyBmYWlscworICAgICAgLSBbUEFUQ0ggIDcwMDY4MV06IGxpbWl0ZWQgc3VwcG9ydCBmb3IgVURQdjQgYnJvYWRjYXN0IGFkZHJlc3NlcworICAgICAgLSBbUEFUQ0ggMTU0ODY3MF06IEZpeCByYW5nZSBjaGVja3MgZm9yIHVuc2lnbmVkIGludGVnZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgKERlYmlhbiBidWcgIzM4MzM4MCkKKyAgICAgIC0gW1BBVENIIDE1OTI3MDZdOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBjbG9uaW5nIHZhcmJpbmRzLgorICAgICAgLSBbUEFUQ0ggMTYxNjkxMl06IGZpeCBtZW1vcnkgbGVhayBpbiBzbm1wX3VkcF90cmFuc3BvcnQKKyAgICAgIC0gW1BBVENIIDE2MjA0MjRdOiBIb25vciBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgb3ZlciB0aGUgZGVmYXVsdCBzeXN0ZW0KKyAgICAgIC0gW1BBVENIIDE2MjcwNDldOiBOZXcgQVBJIHRvIGhhbmRsZSBsYXJnZSBudW1iZXJzIG9mIGZpbGUgZGVzY3JpcHRvcnMuCisgICAgICAtIFtQQVRDSCAxNjM0NjIwXTogRml4IGxlYWtzIGZyb20gY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uIGZhaWx1cmUuCisgICAgICAtIFtQQVRDSCAxNjQwMTE0XTogRG9uJ3Qgc3RvcmUgdHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAtIFtQQVRDSCAxNjQxODk1XTogRXh0ZW5kIHNob3J0IHZpZXcgbWFza3MgKGFzIHBlciBSRkMgc3BlY3MpCisgICAgICAtIFtQQVRDSCAxNjQxOTcyXTogYWRkIG1pc3NpbmcgY29uc3QKKyAgICAgIC0gW1BBVENIIDE2NDIwNzFdOiBEb24ndCBmaWRkbGUgd2l0aCB0aGUgc3RvcmFnZSBvZiBwcmUtZXhpc3RpbmcgdXNlcnMuCisgICAgICAtIFtQQVRDSCAxNjQ1Njk4XTogZml4IDY0LWJpdCBzaWduZWQgaW50ZWdlciBlbmNvZGluZworICAgICAgLSBbUEFUQ0ggMTY1MzY3MF06IENvbnNpc3RlbnQgU05NUHYzIGJlaGF2aW91ciB3aGVuIG9wZW5pbmcgc2Vzc2lvbnMuCisgICAgICAtIFtQQVRDSCAxNjY1NTQzXTogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KKyAgICAgIC0gW1BBVENIIDE2ODEwMzBdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1wdHkgYXBwdHlwZSBjb25maWdzLgorICAgICAgLSBbUEFUQ0ggMTY4MTk3N106IEFkZCBjYWxsYmFja3MgcHJpb3IgdG8gcmVhZGluZyBjb25maWcuCisgICAgICAtIFtQQVRDSCAxNjg3MzE2XTogRG9uJ3QgZHJvcCBjb25zdCBmcm9tIGNhc3RzLgorICAgICAgLSBbUEFUQ0ggMTY4NzMxN106IFJlbW92ZSBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUKKyAgICAgIC0gW1BBVENIIDE2ODczMThdOiBNYWtlIF9zZXNzX3NlbHBvbF9pbmZvIHN0YXRpYy4KKyAgICAgIC0gW1BBVENIIDE2ODczMTldOiBEZWNsYXJlIHNubXBfc2Vzc19yZWFkX2V4dGQoKQorICAgICAgLSBbUEFUQ0ggMTY4NzMyNV06IEZpeCBwcm9ibGVtIHdpdGggb3BlcmF0b3IgcHJlY2VkZW5jZS4KKyAgICAgIC0gW1BBVENIIDE2ODczMzddOiBJbXBsZW1lbnQgX3Nlc3Nfb3BlbiBpbiB0ZXJtcyBvZiBzbm1wX3Nlc3NfYWRkCisgICAgICAtIFtQQVRDSCAxNzI4MjQ3XTogQ2xlYW4gdXAgaW50NjQgdHlwZSBjaGVja2luZyBhbmQgdXNhZ2UgZm9yIGJ1aWxkaW5nIHBhY2tldHMKKyAgICAgIC0gW1BBVENIIDE3MzcwODVdOiBmaXggdGhlIC1NIHN3aXRjaCBmb3IgbWliIHBhcnNpbmcgdnMgZGVmYXVsdHMKICAgICAgIC0gW1BBVENIIDE3NjgyODVdOiBDb3VudCBNSUIgZmlsZXMgY29ycmVjdGx5IGluIGFkZF9taWJkaXIoKQogICAgICAgLSBbUEFUQ0ggMTc3NTEyNF06IEZpeCBjbGllbnRhZGRyIGZ1bmN0aW9uYWxpdHkKICAgICAgIC0gW1BBVENIIDE4MDYzMzZdOiBmaXggLUxTIG9wdGlvbiBwYXJzaW5nCiAgICAgICAtIFtQQVRDSCAxODA3NDg5XTogZml4IGlnbm9yaW5nIG9mIGRpc3BsYXkgaGludHMuCiAgICAgICAtIFtQQVRDSCAxODExNDY5XTogcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aCgpIHJlYWRzIHBhc3QgbWFsbG9jJ2QgYnVmZmVyCiAgICAgICAtIFtQQVRDSCAxODc1MDIyXTogaW1wcm92ZSBjYWxsYmFjayBsb2NraW5nIG1lY2hhbmlzbXMKKyAgICAgIC0gW1BBVENIIDE4ODIwNjldOiBBZGQgdG9rZW4gZm9yIHNwZWNpZnlpbmcgYW4gZXhhY3QgU05NUHYzIGVuZ2luZUlECiAgICAgICAtIFtQQVRDSCAxODk1OTI3XTogY2hhbmdlIG9ic29sZXRlIHJlY3Yvc2VuZCB0byByZWN2ZnJvbS9zZW5kdG8KLSAgICAgIC0gW1BBVENIIDE4OTgyMDRdLCBbQlVGIDE4OTgxOThdOiBmaXggc2VnZmF1bHQgd2hlbiBwYXJzaW5nIGJyb2tlbiBtaWJzLgorICAgICAgLSBbUEFUQ0ggMTg5ODIwNF06IEF2b2lkIGEgc2VnZmF1bHQgd2hlbiBwYXJzaW5nIGJyb2tlbiBtaWJzLgorICAgICAgLSBbUEFUQ0ggMTkxNjg0MF06IG5ldyBjb25maWcgb3B0aW9uIHRvIHNldCBTTk1QdjEgdHJhcCBhZ2VudCBhZGRyZXNzCisJW1BBVENIIDE5MTY4NDBdOiBpbnRyb2R1Y2UgbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0CiAgICAgICAtIFtQQVRDSCAxOTIxODYxXTogQXZvaWQgZW5kbGVzcyBsb29wIGFmdGVyIHRydW5jYXRpbmcgNjRiaXQgaW50Ci0gICAgICAtIFtQQVRDSCAyMDAzNDUwXTogRml4IGEgY291cGxlIG9mIDY0LWJpdCBwcm9ibGVtcwotICAgICAgLSBDaGFuZ2UgQ09OVEFJTkVSX0lOU0VSVCB0byBub3QgZG8gcGFydGlhbCBpbnNlcnRzIGluIGNvbnRhaW5lcnMKLQl3aXRoIG11bHRpcGxlIGluZGljZXMgd2hlbiBvbmUgaW5zZXJ0IGZhaWxzLgorICAgICAgLSBbUEFUQ0ggMjAwMzQ1MF06IEZpeCBhIGNvdXBsZSBvZiA2NC1iaXQgcHJvYmxlbXMuCisgICAgICAtIFtQQVRDSCAyMDQzMDE4XTogZml4IHJlY3Zmcm9tIGhhbmdzCisgICAgICAtIFtQQVRDSCAyMjU4MjI5XTogUmVtb3ZlIG1pc2xlYWRpbmcgY29tbWVudAorICAgICAgLSBbUEFUQ0ggMjQ3OTcwMF06IEZpeCB6b25lZCBJUCBhZGRyZXNzIHVzZWQgYXMgdGFibGUgaW5kaWNlcworICAgICAgLSBbUEFUQ0ggMjQ5MjM3N106IEZpeCB0eXBvL2J1ZyBpbiBzbm1wX2VuYWJsZV9jYWxsYmFjaygpCisgICAgICAtIFtQQVRDSCAyNTA1NDg4XTogRml4IGFsYXJtcyBub3QgdHJpZ2dlcmVkIGR1ZSB0byBsYXJnZSBjbG9jayBza2V3cy4KKyAgICAgIC0gW1BBVENIIDI1MzgxNjldOiBQcmV2ZW50IGluZmluaXRlIHJldHJpZXMgZm9yIGFuIGludmFsaWQgZXJyb3ItaW5kZXguCisgICAgICAtIFtQQVRDSCAyNjg5MzYyXTogRml4IGhhbmRsaW5nIG9mIElQdjYgaG9zdG5hbWVzLgorICAgICAgLSBbUEFUQ0ggMjcxMzg0MV06IEZpeCBydW50aW1lIGVycm9ycyB0cmlnZ2VyZWQgYnkgaGlnaC1BU0NJSSBjaGFycworICAgICAgLSBbUEFUQ0ggMjc3Mjc4N106IENsZWFuZXIgYXBwcm9hY2ggdG8gaGFuZGxpbmcgbGFyZ2UgZmRfc2V0cy4KKyAgICAgIC0gW1BBVENIIDI3ODA0MTFdOiBGaXggY29tcGlsZXIgd2FybmluZ3MKKyAgICAgIC0gW0ZFQVRVUkVTICA0NTQwMjhdOiBEZXRlY3QgZW1wdHkgTUlCIGluZGV4IGZpbGVzLgorICAgICAgLSBbRkVBVFVSRVMgIDg1MTg4N106IFJlcG9ydCByYW5nZSBpbmZvcm1hdGlvbiBmb3IgaW52YWxpZCBTRVQgcmVxdWVzdHMuCisgICAgICAtIFtGRUFUVVJFUyAxMDQxODg4XTogQ2hlY2sgZGlyZWN0b3J5IHBhdGhzIGZvciBjb25maWcgZmlsZXMuCisgICAgICAtIFtGRUFUVVJFUyAxNDA3NDc2XTogUmVuYW1lICdzdHJpY3RDb21tZW50VGVybScgdG8gcmVmbGVjdCBhY3R1YWwgYmVoYXZpb3VyLgorICAgICAgLSBBZGQgR0NDIGZvcm1hdCBjaGVja2luZyBhdHRyaWJ1dGVzIHRvIHRoZSBkZWJ1ZyBmdW5jdGlvbnMuCisgICAgICAtIEFkZCBpdGVyYXRvciBmb3Igc2luZ2x5IGxpbmtlZCBsaXN0cworICAgICAgLSBDb3JyZWN0IE1BWF9FTkdJTkVJRF9MRU5HVEggdG8gMzIgKGFzIHBlciBTbm1wRW5naW5lSUQgVEMpCisgICAgICAtIENvcnJlY3QgcmVnaXN0cmF0aW9uIG9mIG11bHRpcGxlIHByZW1pYiBjb25maWcgaGFuZGxlcnMuCisgICAgICAtIERlYWxsb2NhdGUgdmFyaW91cyByZXNvdXJjZXMgaW4gc2h1dGRvd25fbWliCiAgICAgICAtIERvIG5vdCBsZWFrIG1lbW9yeSB3aGVuZXZlciBhbiB1ZHAgYWRkcmVzcyBpcyBmb3JtYXR0ZWQuCiAgICAgICAtIERvIG5vdCB0cnkgdG8gbG9vayB1cCBlbXB0eSBzdHJpbmdzIGFzIGhvc3RuYW1lcyBmb3IgSVB2NgotICAgICAgLSBGaXggcmVnaXN0ZXJpbmcgb2YgbXVsdGlwbGUgcHJlbWliIGNvbmZpZyBoYW5kbGVycworICAgICAgLSBGaXggZm9yd2FyZGluZyBlbmNvZGluZwogICAgICAgLSBGaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzcHJpbnRmIGZvciBVRFAvSVB2NgorICAgICAgLSBIYW5kbGUgbWFwcGluZyBjb21wbGV4IHRyYW5zcG9ydCBzdHJpbmdzIHRvIHNpbXBsZSBuYW1lIGRlZmluaXRpb25zCisgICAgICAtIEhhcmRjb2RlIGRlZmF1bHQgcG9ydCBudW1iZXJzIChyYXRoZXIgdGhhbiB1c2UgZ2V0c2VydmJ5bmFtZSkKKyAgICAgIC0gSW1wbGVtZW50IFJGQzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2JpbmcuCisgICAgICAtIEltcHJvdmUgQ09OVEFJTkVSX0lOU0VSVCBoYW5kbGluZyBvZiBwYXJ0aWFsIGZhaWx1cmUgd2l0aCBtdWx0aXBsZSBpbmRleGVzCisgICAgICAtIEltcHJvdmUgbmV0c25tcF93YXRjaGVyX2luZm8gdG8gaGFuZGxlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRhdGEuCisgICAgICAtIEludHJvZHVjZSBwcmludGYtbGlrZSB2ZXJzaW9ucyBvZiBjb25maWdfcGVycm9yIGFuZCBjb25maWdfcHdhcm4KKyAgICAgIC0gTGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHMKKyAgICAgIC0gUmVhZCBkZWZ7VGFyZ2V0LERvbWFpbn0gZnJvbSBzbm1wLmNvbmYgYXMgd2VsbCBhcyA8YXBwPi5jb25mCisgICAgICAtIHJlbmFtZSBNSUIgbWFjcm8gdG8gTkVUU05NUF9NSUIyX09JRCwgTUlCIGlzIHRvbyBnZW5lcmljIGFuZCBtYXkKKwljb25mbGljdCB3aXRoIGFwcGxpY2F0aW9ucy4gICBUaGUgb2xkIE1JQiBtYWNybyBpcyBrZXB0IGZvcgorCWJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVubGVzcyBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyBpcworCWRlZmluZWQuCiAKICAgICBzbm1wZDoKLSAgICAgIC0gW0JVRyAxNTU3MzcyXTogUmVhbGlnbiBockZTU3RvcmFnZUluZGV4IHdpdGggaHJTdG9yYWdlVGFibGUKKyAgICAgIC0gW0JVRyAgOTAyNjEwXTogRG9uJ3QgZGlzY2FyZCBwZW5kaW5nIGRhdGEgZm9sbG93aW5nIGEgVFJBUC4KKyAgICAgIC0gW0JVRyAgOTAyODAxXTogRml4IG9yZGVyaW5nIG9mIFNNVVgtcmVnaXN0ZXJlZCBzdWJ0cmVlcy4KKyAgICAgIC0gW0JVRyAxMDQ2MzI3XTogUmVzZXQgImluY2x1ZGVBbGxEaXNrcyIgZmxhZyB3aGVuIHJlbG9hZGluZy4KKyAgICAgIC0gW0JVRyAxMTAyMDU4XTogU2tpcCBub24tbW91bnRlZCBkaXNrcyAoZS5nLiBzd2FwIHBhcnRpdGlvbnMpCisgICAgICAtIFtCVUcgMTM5Nzg5NV06IGluY2x1ZGUgbWlzc2luZyBpbnRlcmZhY2UgZGVjbGFyYXRpb25zCisgICAgICAtIFtCVUcgMTQwMDEwMV06IHJlbW92ZSBkZWxldGVkIGludGVyZmFjZXMgZnJvbSBpZlRhYmxlCisgICAgICAtIFtCVUcgMTQxMzcyOF06IFJlZmVyZW5jZSBpbmRleCB2YWx1ZXMgaW4gZGVidWcgb3V0cHV0IGNvcnJlY3RseS4KKyAgICAgIC0gW0JVRyAxNDE2Mjc2XTogSGFuZGxlIGRlcGVuZGVuY3kgb24gTUlCIHBhcnNpbmcgQVBJLgorICAgICAgLSBbQlVHIDE1NDY4MTddOiBGaXggc25tcEVudGVycHJpc2UgdmFyYmluZCB3aGVuIGZvcndhcmRpbmcgdjEgdHJhcHMuCisgICAgICAtIFtCVUcgMTU1ODgyM106IGZpeCBpcEFkZHJlc3NUYWJsZSBtZW1vcnkgbGVhaworICAgICAgLSBbQlVHIDE2MDAyNjFdOiBIYW5kbGUgbm9uLXg4NiAvcHJvYy9jcHVpbmZvIGZvcm1hdAorICAgICAgLSBbQlVHIDE2MDA0MzJdOiBIYW5kbGUgc2lnbmFscyBwcm9wZXJseSB3aGVuIHJlc3RhcnRpbmcgdGhlIGFnZW50LgorICAgICAgLSBbQlVHIDE2MDIyODZdOiBEb24ndCBsZXQgdGFibGUgaG9sZXMgYmxvY2sgbGF0ZXIgcm93cy4KKyAgICAgIC0gW0JVRyAxNjI4NjEzXTogUmVzdG9yZSBtZW1Ub3RhbEZyZWUuMCBvbiBTb2xhcmlzCisgICAgICAtIFtCVUcgMTYzMzU5NV06IEZpeCBBZ2VudFggaGFuZGxpbmcgb2YgQ291bnRlcjY0IHZhbHVlcworICAgICAgLSBbQlVHIDE2NzcwNjNdOiBDaGVjayBmb3IgZmFpbGVkIG1hbGxvYyBjYWxscy4KKyAgICAgIC0gW0JVRyAxNjg1MDY3XTogTW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mIFNOTVB2My1hZG1pbiBNSUIgdGFibGVzLgorICAgICAgLSBbQlVHIDE2ODUwODFdOiBDaGVjayBmb3IgdmFsaWQgT0lEIG9uIEZyZWUvVW5kbyBwYXNzZXMuCisgICAgICAtIFtCVUcgMTY5MzAzOV06IGJlIHNpbGVudCB3aGVuIGluc2VydCBmYWlscy4KKyAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdC9jb25maWd1cmFibGUgbWF4ICMgdmFyYmluZHMgcmV0dXJuZWQgYnkgR0VUQlVMSworICAgICAgLSBbQlVHIDE3NDUxMTNdOiBIYW5kbGUgc2luZ2xlLWxpbmUgb3V0cHV0IGluIFVDRCBjb21wYXRhYmlsaXR5IG1vZGUuCiAgICAgICAtIFtCVUcgMTc0ODIwNl06IFByb3RlY3QgYWdhaW5zdCBmYWlsdXJlcyB0byBvcGVuIC9ldGMvbXRhYiAob3IgZXF1aXYpCi0gICAgICAtIFtCVUcgMTc1ODIxMl06IEhhbmRsaW5nIG1pc3NpbmcgdmFyaWFibGUgdHlwZXMgKElwQWRkcmVzcyxDb3VudGVyLE9wYXF1ZSkKKyAgICAgIC0gW0JVRyAxNzU4MjEyXTogSGFuZGxlIG1pc3NpbmcgdmFyaWFibGUgdHlwZXMgKElwQWRkcmVzcyxDb3VudGVyLE9wYXF1ZSkKKyAgICAgIC0gW0JVRyAxNzYwNjMzXTogZml4IHR5cG8gaW4gZGVidWcgbWVzc2FnZQogICAgICAgLSBbQlVHIDE3NzEyMjFdOiBSZXRhaW4gaWZMYXN0Q2hhbmdlIGluZm9ybWF0aW9uIG9uIGRhdGEgcmVsb2FkLgogICAgICAgLSBbQlVHIDE3OTI4OTBdOiBpbmNsdWRlIENJRlMgbW91bnRzIHdoZW4gc2tpcHBpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zCiAgICAgICAtIFtCVUcgMTgyMjM2MF06IEZpeCBzcGlubG9jayBoZWxwZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgICAtIFtCVUcgMTg1MTA0N106IERvbid0IG92ZXItcHJvY2VzcyBmYWlsZWQgd2F0Y2hlciByZXF1ZXN0cwotICAgICAgLSBbQlVHIDE5MTI2NDddOiBGaXggbWVtb3J5IGxlYWsgZm9sbG93aW5nIGZhaWxlZCByZXF1ZXN0Ci0gICAgICAtIFtCVUcgMTkzMTM5MV06IEZpeCByZXBvcnRpbmcgb2YgTWVtb3J5IGJ1ZmZlcnMgYW5kIGNhY2hlZCBtZW1vcnkKLSAgICAgIC0gW0JVRyAyMDAzMTQ0XTogSW5jcmVhc2Ugc2l6ZSBvZiBBZ2VudFggcGFja2V0Ci0gICAgICAtIFtCVUcgMjAwNjc4Nl06IEludGVyZmFjZSBuYW1lIGNhbiBoYXZlIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMKLSAgICAgIC0gW0JVRyAyMDE4MDMxXTogRG9uJ3QgcHJvYmUgZW5naW5lSUQgaW4gaW50ZXJuYWwgbW9uaXRvciBzZXNzaW9ucwotICAgICAgLSBbQlVHIDIwMjM4MDNdOiBSZW1vdmUgaXJyZWxldmFudCBjb25maWd1cmUgZGVwZW5kZW5jeSAoSFAtVVggMTEpCi0gICAgICAtIFtQQVRDSCAxNzE2NTQ4XTogRml4IGhlbHAgb3V0cHV0IGZvciAtRAorICAgICAgLSBbQlVHIDE5MTI2NDddOiBGaXggbWVtb3J5IGxlYWsgZm9sbG93aW5nIGZhaWxlZCByZXF1ZXN0cy4KKyAgICAgIC0gW0JVRyAxOTMxMzkxXTogRml4IHJlcG9ydGluZyBvZiBNZW1vcnkgYnVmZmVycyBhbmQgY2FjaGVkIG1lbW9yeS4KKyAgICAgIC0gW0JVRyAyMDAxMTI0XTogQWxsb3cgZW1iZWRkZWQgTlVMIGNoYXJhY3RlcnMgaW4gdXNtVXNlclB1YmxpYworICAgICAgLSBbQlVHIDIwMDMxNDRdOiBJbmNyZWFzZSBzaXplIG9mIEFnZW50WCBwYWNrZXQgYnVpbGQgYnVmZmVyCisgICAgICAtIFtCVUcgMjAwNjc4Nl06IEludGVyZmFjZSBuYW1lIGNhbiBoYXZlIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMuCisgICAgICAtIFtCVUcgMjAxODAzMV06IERvbid0IHByb2JlIGVuZ2luZUlEIGluIGludGVybmFsIG1vbml0b3Igc2Vzc2lvbnMuCisgICAgICAtIFtCVUcgMjY5MzY3MF06IERvbid0IG9wZW4gKCYgY2xvYmJlcikgQWdlbnRYIHNvY2tldCBpZiBvdGhlciB0cmFuc3BvcnRzIGZhaWwKKyAgICAgIC0gW0JVRyAyODIyMzU1XTogRml4IG1lbW9yeSBsZWFrcyBvbiB1ZHBFbmRwb2ludFRhYmxlIChsaW51eCkgUGF0Y2gKKwlzdXBwbGllZCBieSBGcmFuayBMaWNodGVuaGVsZAorICAgICAgLSBbUEFUQ0ggMTIyNTQ0MF06IERlbGF5IHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCisgICAgICAtIFtQQVRDSCAxMjU3MzQ3XTogTm9uLWZpeGVkIHNpemUgY29ubmVjdGlvbiBidWZmZXIKKyAgICAgIC0gW1BBVENIIDE1NTA3MzBdOiBSZXBvcnQgZXJyb3JzIGZyb20gaXRlcmF0b3ItYmFzZWQgaGFuZGxlcnMuCisgICAgICAtIFtQQVRDSCAxNTg1MTQ2XTogRXh0ZW5kIHJhbmdlIG9mIGF2YWlsYWJsZSBlcnJvciBjb2RlcworICAgICAgLSBbUEFUQ0ggMTU5NTU2OF06IGZpeCBkZWxlZ2F0ZWQgU0VUIHJlcXVlc3RzIGZyb20gYWdlbnR4IHN1YmFnZW50cworICAgICAgLSBbUEFUQ0ggMTYwMTE4OF06IEhhbmRsZSBzaWduYWxzIHByb3Blcmx5IHdoZW4gcmVzdGFydGluZyB0aGUgYWdlbnQuCisgICAgICAtIFtQQVRDSCAxNjAxNDUzXTogRHluYW1pYyBNZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBpbXByb3ZlbWVudHMKKyAgICAgIC0gW1BBVENIIDE2MTcyNTVdOiBmaXggbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGFycmF5IHRvIG1hdGNoIGNvZGUuCisgICAgICAtIFtQQVRDSCAxNjIwNDI0XTogRml4IGRlZmF1bHQgcG9ydCBmb3Igc2VuZGluZyBub3RpZmljYXRpb24KKyAgICAgIC0gW1BBVENIIDE2MjUwNjldOiBzcGVlZCBpbXByb3ZlbWVudHMgZm9yIHNvbGFyaXMgcm91dGluZyB0YWJsZSBhY2Nlc3MKKyAgICAgIC0gW1BBVENIIDE2MzkyODJdOiBTYXZlIHBlcnNpc3RlbnQgc25tcFRhcmdldFBhcmFtc1RhYmxlIHNldHRpbmdzIGNvcnJlY3RseS4KKyAgICAgIC0gW1BBVENIIDE2Mzk3MjZdOiBSZXBvcnQgcGh5c2ljYWwgbWVtb3J5IGNvcnJlY3RseSBvbiAqQlNECisgICAgICAtIFtQQVRDSCAxNjQxMzMyXTogSW5jbHVkZSBtaXNzaW5nIGFnZW50IGNvbmZpZyBkZWZpbml0aW9ucy4KKyAgICAgIC0gW1BBVENIIDE2NDE2ODVdOiBIYW5kbGUgdW5yZXNwb25zaXZlIEFnZW50WCBzdWJhZ2VudHMgbW9yZSByZWxpYWJseS4KKyAgICAgIC0gW1BBVENIIDE2NDE4NjVdOiBEb24ndCBkb3VibGUgY2hlY2sgc25tcFRyYXBPSUQgaW4gdGhlIGZpbHRlciB0YWJsZS4KKyAgICAgIC0gW1BBVENIIDE2NDIyNTVdOiBIYW5kbGUgc2F2aW5nIGxvbmcgc25tcE5vdGlmeUZpbHRlclRhYmxlIGVudHJpZXMuCisgICAgICAtIFtQQVRDSCAxNjQ0MjgwXTogRG9uJ3QgYXV0b21hdGljYWxseSBwcm9iZSBmb3IgdjMgRW5naW5lSURzLgorICAgICAgLSBbUEFUQ0ggMTY0NDI4MF06IFVzZSB0aGUgY29ycmVjdCBlbmdpbmVJRCB3aGVuIHNlbmRpbmcgdjMgdHJhcHMuCisgICAgICAtIFtQQVRDSCAxNjQ0NzE0XTogcmVwbGFjZSBsYXN0IHVzZSBvZiBkZXByZWNhdGVkIGNvcHlfd29yZCBieSBjb3B5X253b3JkCisgICAgICAtIFtQQVRDSCAxNjU0NDI0XTogSGFuZGxlIHJvdyBkZWxldGlvbiBpc3N1ZXMgaW4gZGF0YXNldCB0YWJsZXMKKyAgICAgIC0gW1BBVENIIDE2NTc3NDFdOiBIYW5kbGUgNjQtYml0IHR5cGVzIHZpYSBwYXNzIG1lY2hhbmlzbS4KKyAgICAgIC0gW1BBVENIIDE2NTk2MjNdOiBIYW5kbGUgU01VWCBwZWVycyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkLgorICAgICAgLSBbUEFUQ0ggMTY2NTU0M106IEhhbmRsZSBWQUNNIGNoZWNrcyBjb3JyZWN0bHkuCisgICAgICAtIFtQQVRDSCAxNjY1NTQ5XTogSGFuZGxlIGNyZWF0aW5nIFZBQ00gZW50cmllcyBjb3JyZWN0bHkuCisgICAgICAtIFtQQVRDSCAxNjY1OTg1XTogSW1wbGVtZW50IGlwUmVhc21UaW1lb3V0CisgICAgICAtIFtQQVRDSCAxNjY2NzM3XTogaW5jbHVkZSBJUHY2IHRyYWZmaWMgaW4gdmFyaW91cyBVRFAgY291bnRlcnMuCisgICAgICAtIFtQQVRDSCAxNjY4MTkzXTogRml4IGNoZWNrIGZvciB2NiBSZWFzbU1heFNpemUgc3VwcG9ydC4KKyAgICAgIC0gW1BBVENIIDE2NjgxOTNdOiBVcGRhdGUgcmVnaXN0cmF0aW9uIG9mIFJlYXNtTWF4U2l6ZSBzdXBwb3J0LgorICAgICAgLSBbUEFUQ0ggMTY2ODk1Ml06IElnbm9yZSB6b21iaWUgcHJvY2Vzc2VzLgorICAgICAgLSBbUEFUQ0ggMTY2OTA0OF06IEFkZCBzdXBwb3J0IGZvciBpcHY2SW50ZXJmYWNlSWRlbnRpZmllcgorICAgICAgLSBbUEFUQ0ggMTY3NjQ3OF06IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKKyAgICAgIC0gW1BBVENIIDE2NzgzMDFdOiBEZWFsbG9jYXRlIGRvbWFpbiByZWdpc3RyeSBhdCBzaHV0ZG93bgorICAgICAgLSBbUEFUQ0ggMTY3ODMwNV06IERlYWxsb2NhdGUgY2FjaGUgaW4gaGFyZHdhcmUvY3B1L2NwdSBvbiBzaHV0ZG93bgorICAgICAgLSBbUEFUQ0ggMTY3ODMwNl06IERlYWxsb2NhdGUgbG9nIGluIG5vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cKKyAgICAgIC0gW1BBVENIIDE2Nzg3ODhdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgU01VWCBzb2NrZXQgZGVzY3JpcHRvcnMuCisgICAgICAtIFtQQVRDSCAxNjgxMDQzXTogY2xlYW4gdXAgaGVscGVyIGluY2x1ZGVzCisgICAgICAtIFtQQVRDSCAxNjgzMDU0XTogc2V0IHVkcEVuZHBvaW50SW5zdGFuY2UgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHByb2Nlc3Nlcy4KKyAgICAgIC0gW1BBVENIIDE2ODczMzZdOiBTdGFydCB1c2luZyB0aGUgZW5oYW5jZWQgcmVhZF9jb25maWcgaW50ZXJmYWNlCisgICAgICAtIFtQQVRDSCAxNjkyNzY4XTogRml4IGNvcHlpbmcgb2Ygbm9uLW9jdGV0LWFsaWduZWQgSVAgYWRkcmVzcyBwcmVmaXhlcy4KKyAgICAgIC0gW1BBVENIIDE2OTI4MTddOiBJbXByb3ZlZCBSRkMgNDI5MyBzdXBwb3J0IChpbmMuIG5vbi11bmljYXN0L3JhbmRvbSBJUCBhZGRyZXNzZXMpCisgICAgICAtIFtQQVRDSCAxNjk4MTg0XTogUmVnaXN0ZXIgbm9uLWRlZmF1bHQgY29udGV4dCBpbnRlZ2VycyBhcyB3cml0YWJsZS4KKyAgICAgIC0gW1BBVENIIDE3MDAxNTddOiBGaXggb3JkZXJpbmcgb2YgZXhlYyB0b2tlbnMgaW4gTUlCIG91dHB1dAorICAgICAgLSBbUEFUQ0ggMTcwMDczMF06IFJlbW92ZSB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorICAgICAgLSBbUEFUQ0ggMTcwMDczMl06IEZpeCBkZWJ1ZyBvdXRwdXQgc3RhdGVtZW50cy4KKyAgICAgIC0gW1BBVENIIDE3MDA3MzddOiBUaWR5IHVwIHNldFNlcmlhbE5vIGltcGxlbWVudGF0aW9ucy4KKyAgICAgIC0gW1BBVENIIDE3MDIzNjFdOiBSZWFkIHN0YXRzIGZyb20gL3Byb2MvbmV0L3NubXA2CisgICAgICAtIFtQQVRDSCAxNzAyMzY2XTogU3VwcG9ydCBmb3IgaWNtcFN0YXRzVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MDMwMDRdOiBDb25zb2xpZGF0ZSBzbm1wNiBoYW5kbGluZy4KKyAgICAgIC0gW1BBVENIIDE3MTA2MzJdOiBmaXggbWVtb3J5IGxlYWsgb24gYnJva2VuIGNvbnRhaW5lciBpbnNlcnRpb25zIGZvciB0aGUgaXBBZGRyZXNzVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MTUzOTVdOiBmaXggaWNtcCB0YWJsZSBlcnJvcnMgaW4gbmV3IGljbXAgY29kZQorICAgICAgLSBbUEFUQ0ggMTcxNTQwNl06IHJlZ2lzdHJhdGlvbiBvcmRlcmluZyBmaXhlcyBmb3IgaWNtcFN0YXRzVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MTY1NDhdOiBGaXggaGVscCBvdXRwdXQgc28gbm8gc3BhY2UgaXMgcHJpbnRlZCBiZXR3ZWVuIC1EIGFuZCBhcmd1bWVudHMuCisgICAgICAtIFtQQVRDSCAxNzE5MjUzXTogZml4IHNraXBORlNJbkhvc3RSZXNvdXJjZXMgZm9yIG11bHRpcGxlIHdhbGtzCisgICAgICAtIFtQQVRDSCAxNzIxMDk2XTogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBzdGF0cyBmcm9tIGtlcm5lbCBleHRyYWN0aW9uIGZvciBiZXR0ZXIgcG9ydGFiaWxpdHkuCisgICAgICAtIFtQQVRDSCAxNzIzNjExXTogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSTU9OIGFsYXJtVGFibGUKKyAgICAgIC0gW1BBVENIIDE3Mjk2MjldOiBGaXggbWVtb3J5IGxlYWsgaW4gZGlzbWFuIGFnZW50LgorICAgICAgLSBbUEFUQ0ggMTczNzQzOV06IGF1dG9tYXRpYyBsaW5rIHVwL2Rvd24gdHJhcHMgb24gYSB3YWxrCiAgICAgICAtIFtQQVRDSCAxNzQ0MTU3XTogUmVwb3J0IGR1cGxpY2F0ZSAiZXh0ZW5kL2V4ZWMiIGlkZW50aWZpZXJzLgotICAgICAgLSBbUEFUQ0ggMTc0NjgzMV06IGZpeCBwcm9jZXNzIGNoZWNraW5nIHJhY2UgY29uZGl0aW9uCisgICAgICAtIFtQQVRDSCAxNzQ2ODMxXTogZml4IHByb2Nlc3MgY2hlY2tpbmcgcmFjZSBjb25kaXRpb24gdW5kZXIgTGludXggYW5kIHBsYXRmb3JtICNpZmRlZnMKICAgICAgIC0gW1BBVENIIDE3NTI5MzRdOiBGaXggb2ZmLWJ5LW9uZSBxc29ydCBlcnJvciBpbiB0YWJsZSB1dGlsaXRpZXMuCiAgICAgICAtIFtQQVRDSCAxNzUzNDM3XTogRml4IGVycm9yIGluZGV4IG9uIGZhaWxpbmcgU0VUIHJlcXVlc3RzCiAgICAgICAtIFtQQVRDSCAxNzUzNDQ5XTogRml4IEFnZW50WCBlcnJvciBwcm9wYWdhdGlvbgogICAgICAgLSBbUEFUQ0ggMTc1MzQ2M106IEZpeCBBZ2VudFggc3ViYWdlbnQgcGluZyBhbGFybSBoYW5kbGluZwogICAgICAgLSBbUEFUQ0ggMTc1ODIwOF06IEZpeCBtZW1vcnkgbGVhawotICAgICAgLSBbUEFUQ0ggMTc3NDYxMl06IE1vcmUgcmVzaWxpZW50IHByb2Nlc3Mgc3RhdHVzIGhhbmRsaW5nCi0gICAgICAtIFtQQVRDSCAxNzgzNzMzXTogSW5jbHVkZSB2ZXJzaW9uIGluZm8gaW4gaHJTV0luc3QgdGFibGUgKHNvbGFyaXMpCi0gICAgICAtIFtQQVRDSCAxNzg0NzQ3XTogRml4IGlwIGFkcmVzc2VzIG9uIDY0IGJpdCBzeXN0ZW1zCisgICAgICAtIFtQQVRDSCAxNzgzNzMzXTogUHV0IHRoZSBwYWNrYWdlIHZlcnNpb24gbnVtYmVyIGludG8gdGhlIGhyU1dJbnN0IHRhYmxlIGZvciBzb2xhcmlzLgorICAgICAgLSBbUEFUQ0ggMTc4NDc0N106IEZpeCBsb25nIHVzYWdlIGZvciBpcCBhZHJlc3NlcyBvbiA2NCBiaXQgc3lzdGVtcyBpbiB2YXJpb3VzIE1JQi1JSSB0YWJsZXMuCisgICAgICAtIFtQQVRDSCAxNzk3MTExXTogaW1wbGVtZW50IElQLU1JQjo6aXBJZlN0YXRzVGFibGUKKyAgICAgIC0gW1BBVENIIDE4MDQ0NDVdOiBIaWdoIG9yZGVyIGJpdHMgb2YgSENJbk9jdGV0cyBub3Qgc2V0IG9uIFNvbGFyaXMKKyAgICAgIC0gW1BBVENIIDE4MDY1MDFdOiBBZGQgQVBJIGZvciBzZW5kaW5nIHRyYXBzIHdpdGggYSBzbm1wdjMgY29udGV4dAorICAgICAgLSBbUEFUQ0ggMTgyMzQ2NV06ICBmaXggaWNtcCBjYWNoZSByZWdpc3RyYXRpb24KICAgICAgIC0gW1BBVENIIDE4MjM4MDBdOiByZWxlYXNlIGFuZCByZWxvYWQgYWxsIHRyYXAgZGVzdGluYXRpb25zIG9uIFNJR0hVUAogICAgICAgLSBbUEFUQ0ggMTgyNjA4OF06IFVzZSB0aGUgcmlnaHQgaW50ZXJmYWNlIHRvIHJlYWQgdGhlIG5ldG1hc2sKLSAgICAgIC0gW1BBVENIIDE4MjYxMDJdOiBzdXBwb3J0IGxvbmdlciBpbnRlcmZhY2UgbmFtZXMgb24gbGludXgKLSAgICAgIC0gW1BBVENIIDE4Mjg4MzldOiBoYW5kbGUgb2YgZGlzayBtb3VudCBwYXRocyB3aXRoIGVtYmVkZGVkIHNwYWNlcworICAgICAgLSBbUEFUQ0ggMTgyODgzOV06IHRvIHByb3ZpZGUgYmV0dGVyIGhhbmRsaW5nIG9mIGRpc2tzIG1vdW50ZWQgb24gcGF0aHMgd2l0aCBlbWJlZGRlZCBzcGFjZXMKICAgICAgIC0gW1BBVENIIDE4NDk5MDNdOiBkbyBub3Qgc3BhbSBsb2cgd2l0aCBhc3NlcnRzIHdoZW4gWEVOIGlzIHVzZWQKLSAgICAgIC0gW1BBVENIIDE4NjY4MjNdOiB0cnVuY2F0ZSAzMiBiaXQgY291bnRlciB2YWx1ZXMgb24gNjQgYml0IG1hY2hpbmVzCi0gICAgICAtIFtQQVRDSCAxODc5MjYxXTogQWRkIGluYWN0aXZlIG1lbW9yeSB0byBjYWNoZWQgcmVwb3J0IChmcmVlYnNkKQorICAgICAgLSBbUEFUQ0ggMTg2NjgyM106IHRydW5jYXRlIDMyIGJpdCBjb3VudGVyIHZhbHVlcyBvbiA2NCBiaXQgbWFjaGluZXMgdG8gYXZvaWQgYm9ndXMgd2FybmluZ3MuCisgICAgICAtIFtQQVRDSCAxODc5MjYxXTogQWRkIGluIGluYWN0aXZlIG1lbW9yeSB0byB0aGUgY2FjaGVkIHJlcG9ydCBmb3IgZnJlZWJzZAorICAgICAgLSBbUEFUQ0ggMTg4MjYyMV06IEFkZCBMVk0gc3VwcG9ydCB0byB0aGUgcGFydGl0aW9uIHRhYmxlCiAgICAgICAtIFtQQVRDSCAxODkzNDY4XTogZml4ZWQgcmVnaXN0cmF0aW9uIG9mIE9JRHMgd2l0aCByYW5nZXMKLSAgICAgIC0gW1BBVENIIDE4OTYxMThdOiBmaXggaWZUYWJsZSAzMmJpdCBjb3VudGVycyBvbiBsaW51eAotICAgICAgLSBbUEFUQ0ggMTkwOTgxM106IGZpeCB0YWJsZV9pdGVyYXRvciBoaW50IGZvciBTT1JURUQgdGFibGVzCi0gICAgICAtIFtQQVRDSCAxOTQ0NTgxXTogRG9uJ3QgY29yZSBkdW1wIG9uIGxvbmcgc3RyaW5nIGluZGV4IHZhbHVlcy4KLSAgICAgIC0gW1BBVENIIDE5NTE5OTZdOiBGaXggZm9yIENQVSBzdGF0cyBvbiBGcmVlQlNECisgICAgICAtIFtQQVRDSCAxOTAxNzY0XTogZm9yIHN1cHBvcnRpbmcgbG9nd2F0Y2ggZmlsZXMgdGhhdCBhcmUgZGF0ZSBiYXNlZAorICAgICAgLSBbUEFUQ0ggMTkwOTgxM106IGZpeCB0YWJsZV9pdGVyYXRvciBoYW5kbGluZyBvZiBTT1JURUQgaGludAorICAgICAgLSBbUEFUQ0ggMTkxNjg0MF06IG5ldyBjb25maWcgb3B0aW9uIHRvIHNldCBTTk1QdjEgdHJhcCBhZ2VudCBhZGRyZXNzCisgICAgICAtIFtQQVRDSCAxOTQ0NTgxXTogUHJvdGVjdCBhZ2FpbnN0IGNvcmUgZHVtcHMgd2l0aCBsb25nIHN0cmluZyBpbmRleCB2YWx1ZXMuCiAgICAgICAtIFtQQVRDSCAxOTY3MTk0XTogUmVjb2duaXNlIE5GUzQgbW91bnRzCisgICAgICAtIFtQQVRDSCAxOTc3NDM5XTogRml4IHBhc3MvX3BlcnNpc3QgYnVnIHdpdGggU0VUIG9pZCB2YWx1ZQorICAgICAgLSBbUEFUQ0ggMTk5NTc1M106IG1pbm9yIGNsZWFudXAgYWdlbnQvYXV0b19ubGlzdC5jCisgICAgICAtIFtQQVRDSCAyMDEyNDAyXTogZG9uJ3QgZmFpbCBvbiBmYWlsdXJlIHRvIGxvb2sgdXAgaW50ZXJmYWNlIGVycm9yIGNvdW50ZXJzLgogICAgICAgLSBbUEFUQ0ggMjAxNDIwNF06IFN1cHBvcnQgLWcge2dyb3VwbmFtZX0KICAgICAgIC0gW1BBVENIIDIwMjI5MzZdOiBGaXggQWdlbnRYIENvdW50ZXI2NCBkZWNvZGluZyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXggb25seSkKKyAgICAgIC0gW1BBVENIIDIwODI3MjZdOiBjb3JyZWN0bHkgcmVwb3J0IE5JQyBzcGVlZHMgaGlnaGVyIHRoYW4gNEdiaXQvcworICAgICAgLSBbUEFUQ0ggMjEwMzQ5Ml06IGltcGxlbWVudCBSTU9OLU1JQjo6ZXRoZXJTdGF0c0phYmJlcnMKKyAgICAgIC0gW1BBVENIIDIxMjQyODhdOiBGaXggc2V0dGluZyBvZiB1c21Vc2VyUHJpdlByb3RvY29sIGF0IGNyZWF0aW9uLgorICAgICAgLSBbUEFUQ0ggMjE2MjY1Ml06IHBhdGNoIHRvIGZpeCBzaW1wbGUgaHJmcyBjaGVja3Mgd2hlbiBORlMgaXMgaW4gdXNlLgorICAgICAgLSBbUEFUQ0ggMjM4NDc3OV06IEZpeCBoYW5kbGluZyBvZiBHZXRCdWxrIHdpdGggTj4wLE09PTAKKyAgICAgIC0gW1BBVENIIDI0MDYzNzhdOiBGaXggaHJTV1J1blBlcmZNZW0gb24gNjQtYml0IFNvbGFyaXMgc3lzdGVtcworICAgICAgLSBbUEFUQ0ggMjQzMTM1M106IE1ha2Ugc29tZSBDKysgY29tcGlsZXJzIGhhcHBpZXIKKyAgICAgIC0gW1BBVENIIDI0MzU2ODFdOiBFbmFibGUgaWYtbWliIHJld3JpdGUgKHdpdGggc3lzY3RsIGJhY2tlbmQpIG9uIE5ldEJTRAorICAgICAgLSBbUEFUQ0ggMjQzNTc5M106IFN1cHBvcnQgNjQtYml0IElGLU1JQiBjb3VudGVycyBvbiBzeXNjdGwgKCpCU0QpIHN5c3RlbS4KKyAgICAgIC0gW1BBVENIIDI0NDkyMTBdOiBhZGQgNjQtYml0IGRpc2sgdXNhZ2Ugc3RhdGlzdGljcyB0byBVQ0QtU05NUC1NSUI6OmRza1RhYmxlCisgICAgICAtIFtQQVRDSCAyNTY0NTUyXTogcHJvdmlkZSBsaWJuZXRsaW5rIHN1cHBvcnQgZm9yIGxvYWRpbmcgdGhlIHRjcCB0YWJsZQorICAgICAgLSBbUEFUQ0ggMjY4NjI4MF06IFJlcG9ydCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9ucyBhcyBhbiBlcnJvcgorICAgICAgLSBbUEFUQ0ggMjc5MTQxN106IGZpeCBzbm1wZCBzZWdmYXVsdCB3aGVuIHJ1biB3aXRoIC1EQUxMIFBhdGNoCisgICAgICAtIFtQQVRDSCAyODIyMzM3XTogRml4IG1lbW9yeSBsZWFrIGluIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisgICAgICAtIFtGRUFUVVJFUyAxMDE5NDI5XTogU2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIHZpYSBpbml0Z3JvdXBzKDMpCisgICAgICAtIEFkZCBtaXNzaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAmIGluY2x1ZGUgZmlsZXMuCisgICAgICAtIEFkZCBzdXBwb3J0IGZvciBhIHVzZXIgcHJvdmlkZWQgbGVuZ3RoIHZhcmlhYmxlCisJICAgYW5kIEMgc3RyaW5nIHZhbHVlcyB0byB0aGUgd2F0Y2hlciBoZWxwZXIuCisgICAgICAtIEFsbG93ICJtb25pdG9yIiB0byBoYW5kbGUgbmVnYXRpdmUgdGhyZXNob2xkIHZhbHVlcy4KKyAgICAgIC0gQXV0b21hdGljYWxseSByZXJlZ2lzdGVyIHN5c09SVGFibGUgZW50cmllcyBmcm9tIEFnZW50WCBzdWJhZ2VudHMuCisgICAgICAtIENsZWFuIHVwIG5vdGlmaWNhdGlvbiByZWdpc3RyYXRpb25zIGR1cmluZyBFdmVudCBNSUIgY2xlYW51cAogICAgICAgLSBFbmZvcmNlIHRoZSBsb3dlciBsaW1pdCBvbiBzY2FsYXJfZ3JvdXBzCi0gICAgICAtIHN1cHByZXNzIGFubm95aW5nICJyZWdpc3RyYXRpb24gIT0gZHVwbGljYXRlIiB3YXJuaW5nIGZvciByb290IG9pZHMKLSAgICAgIC0gSGFuZGxlIGRldmljZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBpbiBVQ0QtU05NUC1NSUIgKGRza0RldmljZSkKKyAgICAgIC0gRml4IENWRS0yMDA4LTQzMDkgKEdFVEJVTEsgaXNzdWUgcmVwb3J0ZWQgYnkgT3NjYXIgTWlyYS1TYW5jaGV6KQorICAgICAgLSBGaXggbWVtb3J5IGxlYWsgd2hlbiBtdWx0aXBsZSBpbnRlcmZhY2VzIGhhdmUgdGhlIHNhbWUgSVB2NiBhZGRyZXNzCisgICAgICAtIEZpeCB0d28gYnVncyB3aXRoIHNtdXggcGFzc3dvcmQgc3VwcG9ydC4KKyAgICAgIC0gSGFuZGxlIGRldmljZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBpbiBVQ0QtU05NUC1NSUI6OmRza0RldmljZQorICAgICAgLSBJbXBsZW1lbnQgaXBOZXRUb1BoeXNpY2FsTGFzdFVwZGF0ZWQKKyAgICAgIC0gSW1wbGVtZW50IGlwQWRkcmVzc1NwaW5Mb2NrCisgICAgICAtIEltcHJvdmUgZWZmaWNpZW5jeSBvZiBzY2FsYXJfZ3JvdXAgaGVscGVyLgorICAgICAgLSBJbXByb3ZlIHBhcnNpbmcgb2YgLUxTIGNvbW1hbmQgbGluZSBhcmd1bWVudAorICAgICAgLSBSZWdpc3RlciBDUFUvbWVtb3J5IGhhcmR3YXJlIG1vZHVsZXMgd2l0aCBuc0NhY2hlVGFibGUuCisgICAgICAtIFJlaW1wbGVtZW50YXRpb24gb2YgTE0tU0VOU09SUy1NSUIKKyAgICAgIC0gUmVpbXBsZW1lbnRhdGlvbiBvZiBzbm1wTVBEU3RhdHMuCisgICAgICAtIFJlaW1wbGVtZW50YXRpb24gb2YgdXNtU3RhdHMuCisgICAgICAtIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgorICAgICAgLSBTdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIgd2FybmluZyBmb3Igcm9vdCBvaWRzCisgICAgICAtIFVuaWZ5IGFsbCBzbm1wZCBzdGF0aXN0aWMgdmFyaWFibGVzIHdpdGggYSBjb21tb24gaGFuZGxlci4KKyAgICAgIC0gVXNlIHRoZSB3b3JrZXIgaGVscGVycyBmcm9tIHRoZSByZWdpc3Rlcl8qX2luc3RhbmNlIGhlbHBlcnMgYW5kCisJc2NoZWR1bGUgdGhlIGluc3RhbmNlIGhlbHBlcnMgZm9yIHJlbW92YWwgaW4gNS42CisgICAgICAtIFVzZSBzdGF0aWMgd2F0Y2hlcl9pbmZvIGZvciBhbGwgd2F0Y2hlZCB2YXJpYWJsZXMgYW5kIGluIGludF93YXRjaC4KKyAgICAgIC0gZml4IHBvc3NpYmxlIGNyYXNoIHdoZW4gNjQtYml0IGNvdW50ZXJzIGluIGlwU3lzdGVtU3RhdHNUYWJsZSBnZXQKKwliaWdnZXIgdGhhbiAyXjMyCiAKICAgICBzbm1wdHJhcGQ6CisgICAgICAtIFtCVUcgMTYzODIyNV06IEZpeCBpbnRlcnByZXRhdGlvbiBvZiB0cmFuc3BvcnQgYWRkcmVzcyBkYXRhLgogICAgICAgLSBbQlVHIDE5NTUyMjddOiBNZW1vcnkgbGVhayBmb3IgZW1iZWRkZWQgUGVybCBvbiB4ODZfNjQKICAgICAgIC0gW1BBVENIIDE3NDY5OTJdOiBJbXByb3ZlIHNubXB0cmFwZCBhY2Nlc3MtY29udHJvbCBlcnJvciBtZXNzYWdlcy4KICAgICAgIC0gW1BBVENIIDE3Njc3MjVdOiBDbG9zZSBhbGwgbm9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcworICAgICAgLSBbUEFUQ0ggMTkwODI4OF06IFJ1biBwZXJsIEVORCBibG9jayBvbiB0ZXJtaW5hdGlvbgorICAgICAgLSBbUEFUQ0ggMjcyNjMwMl06IFBhc3MgcmVzdWx0cyBvZiBQZXJsIHRyYXAgaGFuZGxlcnMgdG8gdHJhcCBkYWVtb24KKyAgICAgIC0gW1BBVENIIDEyMjU0NDBdOiBEZWxheSBzaWdodXAgdGlsbCBpdCBpcyBzYWZlLgorICAgICAgLSBbRkVBVFVSRSAgNzQxMzc1XTogRXh0ZW5kIC1GIGZsYWcgdG8gY292ZXIgc3lzbG9nL2V4ZWN1dGUgZm9ybWF0IHN0cmluZ3MuCisgICAgICAtIFtGRUFUVVJFIDExNTk5NDddOiBBbGxvdyBjb250cm9sIG9mIHRyYXBoYW5kbGUgZGF0YSBmb3JtYXQKKyAgICAgIC0gQWRkIHRyYXAgaGFuZGxlciBmb3IgbG9nZ2luZyB0cmFwcyB0byBhIG15c3FsIGRhdGFiYXNlCisgICAgICAtIFN1cHBvcnQgZm9yIGZvcndhcmRpbmcgdHJhcHMgYnkgT0lEIHN1YnRyZWUuCisgICAgICAtIFN1cHBvcnQgcGVyLXRyYXAgZm9ybWF0IHNwZWNpZmljYXRpb25zCisgICAgICAtIFdpdGhkcmF3IGRlcHJlY2F0ZWQgb3B0aW9ucy4KKworICAgIGFwcHM6CisgICAgICAtIFtCVUcgMTk2NDEzNl06IERyb3AgTlVMTCB0eXBlIGZyb20gc25tcHNldCB1c2FnZSBtZXNzYWdlLgorICAgICAgLSBbQlVHIDI4MTE1NzddOiBGaXggYnVnIGluIEdldEJ1bGsgaGFuZGxpbmcuIERvbid0IGdldCBjb25mdXNlZCBieQorCWluZGV4IHZhbHVlcyB0aGF0IGNvbnRhaW4gYSAnOicgY2hhcmFjdGVyLgorICAgICAgLSBbUEFUQ0ggMTUyOTUyM106IENsb3NlIFNOTVAgc2Vzc2lvbiBvbiBmYWlsdXJlLgorICAgICAgLSBJbXByb3ZlIHBhcnNpbmcgb2YgLUxTIGNvbW1hbmQgbGluZSBhcmd1bWVudAorCisgICAgc25tcG5ldHN0YXQ6CisgICAgICAtIFtQQVRDSCAyNTY0NTM4XTogU3VwcG9ydCBHRVRCVUxLIGluIHYyYysgc25tcCB2ZXJzaW9ucworCisgICAgc25tcHVzbToKKyAgICAgIC0gW1BBVENIIDE1OTEzNTVdOiBBbGxvdyBjbG9uaW5nIHRvIGFyYml0cmFyeSBlbmdpbmVJRHMKKworICAgIHNubXB3YWxrOgorICAgICAgLSBbUEFUQ0ggMTcyMzYyMF06IFNwZWNpZnkgYW4gZXhwbGljaXQgZW5kLXBvaW50IGZvciB0aGUgd2Fsay4KIAogICAgIGJ1aWxkOgorICAgICAgLSBbQlVHIDEwOTYxNjZdOiBIYW5kbGUgLS13aXRob3V0LWxvZ2ZpbGUgY29ycmVjdGx5LgorICAgICAgLSBbQlVHIDE1NjczMjRdOiBDbGFyaWZ5IHByb21wdGluZyBmb3IgdXNlci1zdXBwbGllZCB2YWx1ZXMuCisgICAgICAtIFtCVUcgMTYwMDA5M106IGF1dG9jb25mIDIuNjAgYnJlYWtzIHRoZSBidWlsZAorICAgICAgLSBbQlVHIDE2NDc5NzZdOiBDeWd3aW4vTWluR1cgV2luZG93cyBidWlsZCBmYWlscyBkdWUgdG8gbGlidG9vbCBlcnJvcgorICAgICAgLSBbQlVHIDE3MDc0NjldOiBXaW4zMjogc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggbm90IGluc3RhbGxlZAogICAgICAgLSBbQlVHIDE4MDI4MzNdOiBFbnN1cmUgc25tcHRyYXBkIGJ1aWxkcyB3aXRoIC0tZGlzYWJsZS1zbm1wdjEvMmMKKyAgICAgIC0gW0JVRyAxODIzMzgxXTogVXNlIGEgc2Vuc2libGUgZGVmYXVsdCBNSUJESVIgcGF0aCBvbiBDeWd3aW4vTWluR1cKICAgICAgIC0gW0JVRyAxODIzMzgxXTogVmFsaWQgTUlCIGRpcmVjdG9yeSBzZWFyY2ggcGF0aCBvbiBXaW5kb3dzCiAgICAgICAtIFtCVUcgMTg3MjI2Nl06IFBFUkxDQyBjaGVjayBmYWlscyBmb3IgQ0Mgd2l0aCBvcHRpb25zCi0gICAgICAtIFtCVUcgMTk5NTE3Ml06IGZpeCAtLXdpdGhvdXQtZWxmIGNvbmZpZ3VyZSB1c2FnZQorICAgICAgLSBbQlVHIDE5OTUxNzJdOiBmaXggLS13aXRob3V0LWVsZiBjb25maWd1cmUgdXNhZ2UgbWVzc2FnZQogICAgICAgLSBbQlVHIDIwMTQ1MjZdOiBXaW4zMjogc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggbm90IGluc3RhbGxlZAogICAgICAgLSBbQlVHIDIwMjM4MDNdOiBDb21waWxhdGlvbiBwcm9ibGVtcyBvbiBIUC1VWCAxMS4zMQotICAgICAgLSBbUEFUQ0ggMTY4MTAzNV06IGltcHJvdmUgbmV0LXNubXAtY29uZmlnIC9iaW4vc2ggY29tcGF0aWJpbGl0eQorICAgICAgLSBbQlVHIDIwOTU5ODNdOiBmaXggc3ludGF4L3Blcm1pc3NpbmcgZXJyb3IgaW4gZmluZC1yZXF1aXJlcyBoZWxwZXIgc2NyaXB0CisgICAgICAtIFtCVUcgMjE2ODE4MF06IEltcHJvdmUgaGFuZGxpbmcgb2YgdmFyaW91cyAtLWVuYWJsZS8tLWRpc2FibGUgb3B0aW9ucy4KKyAgICAgIC0gW0JVRyAyNzgyNzAwXTogYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC0td2l0aC1wa2NzIG9uIFNvbGFyaXMKKyAgICAgIC0gW1BBVENIIDE1Nzc5MTddOlNpbXBsaWZ5IG1ha2VmaWxlIHRhcmdldCByZWZlcmVuY2VzIChwYXRjaCBmcm9tIEFwcGxlKQorICAgICAgLSBbUEFUQ0ggMTYwMDQ1M106IEZpeCBjcm9zcy1jb21waWxlIGJ1aWxkcyBpbiBhcHBsZXMgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAtIFtQQVRDSCAxNjI0NDA2XTogb3B0aW9uIHRvIGhhcmRjb2RlIGxvY2F0aW9uIG9mIG1vdW50IHRhYmxlCisgICAgICAtIFtQQVRDSCAxNjI1MTM1XTogY29uZmlndXJlIGxvY2F0aW9uIG9mIHB5dGhvbiBpbnRlcnByZXRlciAKKyAgICAgIC0gW1BBVENIIDE2NzgzMDBdOiBjb21waWxlLXN1YmFnZW50IGRvZXNuJ3QgY2FsbCBzaHV0ZG93bl8gbWV0aG9kcworICAgICAgLSBbUEFUQ0ggMTY4MTA3M106ICNpZmRlZiBiYXNlZCBjb25maWdfZXJyb3IgaW5zdGVhZCBvZiBzcGVjaWFsIGNhc2VzCisgICAgICAtIFtQQVRDSCAxNzI4MjQxXTogQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgPHN5cy91aW8uaD4KKyAgICAgIC0gW1BBVENIIDE3MjgyMzBdOiBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBnYWlfc3RyZXJyb3IoKQorICAgICAgLSBbUEFUQ0ggMTcyODIzM106IG1ha2Ugc3VyZSB0eXBlIG5mZHNfdCBpcyBkZWZpbmVkCisgICAgICAtIFtQQVRDSCAxNzI4MjM3XTogTW92ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBhdCB0aGUgdG9wIG9mIG5ldHNubXBfdWRwX3NlbmR0bworICAgICAgLSBbUEFUQ0ggMTcyODI0NF06IEFkZCBjb25maWd1cmUgY2hlY2sgZm9yIHNpbjZfc2NvcGVfaWQKKyAgICAgIC0gW1BBVENIIDE3MjgyNDddOiBBZGQgdHlwZSBjaGVjayBmb3IgaW50Pz9fdCBhbmQgdWludD8/X3QKICAgICAgIC0gW1BBVENIIDE4OTk3NjJdOiBUd2VhayBlbWJlZGRlZF9wZXJsIGNvbmZpZ3VyZSBjaGVja3MuCi0gICAgICAtIGFkZCAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gY29uZmlndXJlIG9wdGlvbgotICAgICAgLSBBZGQgc3VwcG9ydCBmb3Igd2luRXh0RExMIHRvIGJ1aWxkLmJhdCAod2luMzIpCi0gICAgICAtIERpc2FibGUgYWdlbnQgdGVzdHMgaWYgYnVpbHQgd2l0aG91dCBuZWNlc3NhcnkgbWliIG1vZHVsZXMKLSAgICAgIC0gTGltaXQgdGhlIHVzZSBvZiBfS0VSTkVMIGRlZmluaXRpb25zIGluIGNvbmZpZ3VyZSB0ZXN0cyB0byBtYXRjaAotICAgICAgICB0aGUgdXNlIG9mIF9LRVJORUwgaW4gb3VyIGNvZGViYXNlCi0gICAgICAtIFVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNgotCi0gICAgbWliMmM6Ci0gICAgICAtIFtCVUcgMTg3NDA1OSwxNzM3MDY4XTogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGggZW1iZWRkZWQgaHlwaGVucwotICAgICAgLSBbUEFUQ0ggMTkxNDM5OF06IGluc3RhbGwgbWliMmMucGVybC5jb25mCisgICAgICAtIFtQQVRDSCAyMDAwODc0XTogQ2xlYW51cCB0cmFuc3BvcnQgc2VsZWN0aW9uLgorICAgICAgLSBbUEFUQ0ggMjA5MTE1Nl06IGNvcnJlY3RseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBpbiBNYWtlZmlsZS4gJ21ha2UgLWogPE4+JyBzaG91bGQgd29yayBub3cuCisgICAgICAtIFtQQVRDSCAyMTg0MDM5XTogRml4ZXMgZm9yIGZyZWVpbmcgbWVtb3J5IGR1cmluZyBlcnJvciBjb25kaXRpb25zLgorICAgICAgLSBbUEFUQ0ggMjc5NzI1MV06IFN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGlzYXRpb24vc2h1dGRvd24sIGZpeCBtZW1vcnkgbGVha3MKKyAgICAgIC0gQWRkIGEgdmFyaWF0aW9uIG9mIEFDX1NFQVJDSF9MSUJTIHdoZXJlIHRoZSByZXN1bHQgaXMgc2V0dGFibGUuCisgICAgICAtIEFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIgdG8gdGhlIHNwZWMgZmlsZQorICAgICAgLSBBZGQgJy0td2l0aC10ZW1wLWZpbGUtcGF0dGVybicgY29uZmlndXJlIG9wdGlvbgorICAgICAgLSBBc3N1bWUgdGFyZ2V0IHBsYXRmb3JtIHN1cHBvcnRzIG1lbXtjcHksbW92ZSxzZXR9ICYgc3RyeyxyfWNocgorICAgICAgLSBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgKGR1ZSB0byBsaW5raW5nIGVycm9ycykKKyAgICAgIC0gRGlzYWJsZSBNSUItc3BlY2lmaWMgdGVzdHMgaWYgdGhlIGFnZW50IG9taXRzIHRoZSBuZWNlc3NhcnkgbW9kdWxlcy4KKyAgICAgIC0gJy0tZGlzYWJsZS1hcy1uZWVkZWQnIHJldmVydHMgdG8gbGlua2luZyBzeXN0ZW0gbGlicyBpbnRvIGFwcGxpY2F0aW9ucworICAgICAgLSBEbyBub3QgY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykgaWYgbm90aGluZyBmcm9tIHV0aWxfZnVuY3MgaXMgdXNlZAorICAgICAgLSBEbyBub3QgcmVxdWlyZSB1c2Ugb2YgLS13aXRoLWVuZGlhbm5lc3Mgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAtIEZpeCBidWlsZCBpc3N1ZXMgd2l0aCBldGh0b29sIChvbiBSSDkpLgorICAgICAgLSBGaXggY2hlY2tzIGZvciBzdXBwb3J0IG9mIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zCisgICAgICAtIEZpeCBjb21waWxhdGlvbiBvbiBJUklYCisgICAgICAtIEZpeCBtYWNybyBmb3IgJy0td2l0aC1mZWF0dXJlcy1vZicKKyAgICAgIC0gSW1wcm92ZSBsaWJyYXJ5IGxheWVyaW5nICYgZGVwZW5kZW5jeSBoYW5kbGluZyB3aGVuIGxpbmtpbmcgYXBwcworICAgICAgLSBJbXByb3ZlIHJvYnVzdG5lc3Mgb2Ygc2VkL2dyZXAvZXRjIGNvbW1hbnMgKHVzaW5nIGF1dG9jb25mIG1hY3JvcykKKyAgICAgIC0gSW1wcm92ZSBSUE0gc3BlYyBmaWxlcywgZm9yIGNvbnNpc3RlbmN5IHdpdGggdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzLgorICAgICAgLSBNZWNoYW5pc20gZm9yIHNlbGVjdGluZyBidWlsZCBlbnZpcm9ubWVudCBiYXNlZCBvbiB2ZXJzaW9uCisgICAgICAtIE5ldyBORVRTTk1QX0FSR19XSVRIL0VOQUJMRSBtYWNyb3MgdG8gY2F0Y2ggaW5jb3JyZWN0ICd3aXRoL2VuYWJsZScgdXNhZ2UKKyAgICAgIC0gJy0tZW5hYmxlLWlwdjYnIHNob3VsZCBvbmx5IGVuYWJsZSAnbWliSUkvaXB2Nicgb24gc3VwcG9ydGVkIHN5c3RlbXMKKyAgICAgIC0gUmVtb3ZlIE5ldC1TTk1QIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LgorICAgICAgLSBSZXN0cnVjdHVyZSBjb25maWd1cmUgdGVtcGxhdGUKKyAgICAgIC0gU3RyaWN0ZXIgY2hlY2tzIG9uICctLXdpdGgtcGVyc2lzdGVudC1tYXNrJyB2YWx1ZXMKKyAgICAgIC0gVXBkYXRlIHRvIGF1dG9jb25mIDIuNjMgJiBsaWJ0b29sIDIuMi42CisgICAgICAtIFVzZSAnY29uZmlnX2Vycm9yJyB0byBnZW5lcmF0ZSBlcnJvciBtZXNzYWdlcyBhdCBjb25maWd1cmUgdGltZS4KKyAgICAgIC0gVXNlIExERkxBR1Mgd2hlbiBidWlsZGluZyBhZ2VudCwgaGVscGVycyBhbmQgbWliIGxpYgorICAgICAgLSBVc2UgImxpYnRvb2wgY2xlYW4iIHRvIGVuc3VyZSByZW1vdmFsIG9mIGFsbCBsaWJ0b29sIHRlbXAgZmlsZXMuCisgICAgICAtIGFsbG93IGJ1aWxkaW5nIHdpdGggUGVybCB2ZXJzaW9ucyB0aGF0IGxhY2sgUEVSTF9FWElUX0RFU1RSVUNUX0VORAorICAgICAgLSBidWlsZCBmaXggZm9yIFRydTY0IFVuaXggYW5kIElSSVg6IG1vdmUgX1hPUEVOKiBkZWZpbml0aW9ucyB0bworCXdoZXJlIHRoZXkgYXJlIGluIDUuNC54IGFuZCBlYXJsaWVyCiAKICAgICBkb2N1bWVudGF0aW9uOgorICAgICAgLSBbQlVHIDEyNDcxNjRdOiBEb2N1bWVudCB1c2Ugb2YgT0lEIG1hY3JvcworICAgICAgLSBbQlVHIDE0MDc0NzZdOiBDbGFyaWZ5IE1JQiBwYXJzaW5nIHRvZ2dsZSBvcHRpb25zICYgY29tbWVudCBoYW5kbGluZy4KKyAgICAgIC0gW0JVRyAxNjE0MTA0XTogYnJva2VuIHNubXBkKDgpIG1hbnVhbCBwYWdlIGluIDUuNAogICAgICAgLSBbQlVHIDIwMjcxMjldOiBmaXggdHlwbyBpbiBzbm1wY21kLjEKKyAgICAgIC0gW1BBVENIIDE2MDQ1ODBdOiBTTk1QKDMpIG1hbnVhbCBwYWdlIGNvcnJlY3Rpb25zCisgICAgICAtIFtQQVRDSCAxNjQ0NzM1XTogQWRkIGdjYyBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIElSSVgKKyAgICAgIC0gRml4IG1pbm9yIGRvY3VtZW50YXRpb24gYnVncyAocGF0Y2ggZnJvbSBBcHBsZSkKKworICAgIG1pYjJjOgorICAgICAgLSBbQlVHICA4MzM2NzNdOiBNb3JlIGZvY3VzZWQgc2l6ZSBjaGVja3MuCisgICAgICAtIFtCVUcgMTQyOTQ3Ml06IFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIGluc3RhbmNlcyAoYW5kIGludmFsaWQgb2JqZWN0cykKKyAgICAgIC0gW0JVRyAxNTgyOTcyXTogSGFuZGxlIEB3aGlsZUAvQGVuZEAgcHJvcGVybHkuCisgICAgICAtIFtCVUcgMTczNzA2OF06IEhhbmRsZSBNSUIgb2JqZWN0cyB3aXRoIGVtYmVkZGVkIGh5cGhlbnMKKyAgICAgIC0gW0JVRyAxODc0MDU5XTogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGggZW1iZWRkZWQgaHlwaGVucworICAgICAgLSBbUEFUQ0ggMTY2ODE3MV06IHNraXAgdW5rbm93biBjb2xzIGluIG1pbi9tYXggcmFuZ2UgZm9yIHRhYmxlcworICAgICAgLSBbUEFUQ0ggMTcxOTI0NF06IEZpeCBtZmQgZ2VuZXJhdGluZyBtYXAgZnVuY3Rpb24KKyAgICAgIC0gW1BBVENIIDE5MTQzOThdOiBpbnN0YWxsIG1pYjJjLnBlcmwuY29uZgorICAgICAgLSBbUEFUQ0ggMjEzNjQzN106IEltcHJvdmUgRkxBRyBkZWZpbmVzIGZvciBodWdlIHRhYmxlcyBvbiA2NGJpdCBzeXN0ZW1zCisgICAgICAtIFtQQVRDSCAyMzE2MTI3XTogRml4IGJ1ZyBpbiBpdGVyYXRlX2FjY2VzcyBnZW5lcmF0ZWQgY29kZS4KIAogICAgIG1pc2M6Ci0gICAgICAtIEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIGZldy9tYW55IGFyZ3VtZW50cy4KLSAgICAgIC0gZW5oYW5jZSBzbm1wbmV0c3RhdCB0ZXN0IHRvIGNoZWNrIHRjcFRhYmxlIGluIFRDUCBtb2RlCisgICAgICAtIFtQQVRDSCAxNzM3NzI3XTogQWRkIGEgTkVUU05NUF9PTERBUElfIHByZWZpeCB0byBvbGQtYXBpIGFjY2VzcyBtYWNyb3MuCisgICAgICAtIFtQQVRDSCAxNzM3NzI3XTogUmVwbGFjZSBORVRTTk1QX0NMRUFOX05BTUVTUEFDRSB3aXRoIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisgICAgICAtIEFkZCBjb25maWcgcmVyZWFkIHN1cHBvcnQgdG8gIm5ldC1zbm1wLWNvbmZpZyAtLWNvbXBpbGUtc3ViYWdlbnQiIGNvZGUuCisgICAgICAtIEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICAgIC0gRG9uJ3QgdXNlIHRoZSBsZWdhY3kgc3ltYm9sIFNOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBTU0ggYW5kIERUTFMvVURQLgorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIHRoZSBUU00gc2VjdXJpdHkgbW9kZWwKKyAgICAgIC0gU2VwYXJhdGUgdXNlciBtYW5hZ2VtZW50IGludG8gbmV3IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIHNjcmlwdAorCisgICAgdW5zcGVjaWZpZWQ6CisgICAgICAtIFtCVUcgMTU5NjYzOF06IG1lbW9yeSBsZWFrIGluIGlwQ2lkclJvdXRlVGFibGUsIGluZXRDaWRyUm91dGVUYWJsZQorICAgICAgLSBbQlVHIDE2MTE1MjRdOiBmaXggdGNwIGNvbm5lY3Rpb24gdGFibGUgZmQgbGVhaworICAgICAgLSBbQlVHIDE3OTM1NDVdOiBUYWtlIHRoZSBuYW1lIGZyb20gdGhlIHNvY2thZGRyX3VuIGluIG9yZGVyIHRvIGF2b2lkCisJICAgICAgICAgICAgICAgdHJhbnNwb3J0IHNwZWNpZmllcnMgYW5kIG90aGVyIGRlY29yYXRpb25zLgorICAgICAgLSBbQlVHIDE4MDE4MzVdOiBNdWx0aXBsZSBkZWZhdWx0IHRyYW5zcG9ydHMgZm9yIGFuIGFwcGxpY2F0aW9uLgorICAgICAgLSBbQlVHIDE4NTEwNDddOiBEb24ndCBjb250aW51ZSB0byBwcm9jZXNzIGEgY29ycnVwdCB3YXRjaGVkIHZhbHVlLgorICAgICAgLSBbUEFUQ0ggMTYwMTQ1M106IER5bmFtaWMgTWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW1wcm92ZW1lbnRzCisgICAgICAtIFtQQVRDSCAxNjc0Mjk4XTogUmVtb3ZlIHVudXNlZCBzaW5rcG9ydCB2YXJpYWJsZQorICAgICAgLSBbUEFUQ0ggMTY3NDI5OV06IExlc3NlbiBzY29wZSBvZiB6b25lIHZhcmlhYmxlIGluIGR1bXBfcmVhbGxvY19vaWRfdG9faW5ldGFkZHJlc3MKKyAgICAgIC0gW1BBVENIIDE2NzQzMDJdOiBMZXNzZW4gc2NvcGUgb2YgbGVuIHZhcmlhYmxlIGluIGNvbnZlcnRfdjJwZHVfdG9fdjEKKyAgICAgIC0gW1BBVENIIDE2NzgyOThdOiBjb21waWxlLXN1YmFnZW50IGNoZWNrcyBmb3IgYmFkIEhBVkVfU0lHTkFMX0gKKyAgICAgIC0gW1BBVENIIDE2NzgzMDJdOiBuZXRzbm1wX21pYmluZGV4X2xvYWQgbGVha3MgbWVtb3J5CisgICAgICAtIFtQQVRDSCAxNjgxMDM1XTogSW1wcm92ZSBuZXQtc25tcC1jb25maWcgL2Jpbi9zaCBjb21wYXRpYmlsaXR5CisgICAgICAtIFtQQVRDSCAxOTAyMTA1XTogSGlkZSBhbmQgaW1wcm92ZSBkZWJ1ZyBsb2cgbWVzc2FnZXMKKyAgICAgIC0gW1BBVENIIDE5MDIxMTNdOiBGaXggZXJyb3IgbG9nIGluIGluZXROZXRUb01lZGlhdGFibGUKKyAgICAgIC0gRml4IGZvciByZWZzIHRvIE9CSkVDVC1HUk9VUCBpbiBhbm90aGVyIE1JQgorICAgICAgLSBJbml0YWxpemUgbG9nIHN1YnN5c3RlbQorICAgICAgLSBSZW1vdmUgc3VwcG9ydCBmb3IgdXNlIG9mIHZhcmFyZ3MuaC4KIAogICAgIHBlcmw6CisgICAgICAtIFtCVUcgMTQ1MDY2OV06IGEgcGVybCBhZ2VudHggY29uc3VtZXMgbWVtb3J5CisgICAgICAtIFtCVUcgMTU1NDgxN106IEZpeCBjbGFzcyBhc3NpZ21lbnQgc28gZ2V0Um9vdE9JRCB3b3JrcyBwcm9wZXJseS4KICAgICAgIC0gW0JVRyAxNjA2MDYyXTogcGVybCBidWxrd2FsayAoYXN5bmMpIGNvcmVkdW1wCisgICAgICAtIFtCVUcgMTYxOTgyN106IGltcHJvdmUgaGFuZGxpbmcgb2YgbGluayBkZXBlbmRlbmNpZXMKICAgICAgIC0gW0JVRyAxNzQ3NzMzXTogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgdW5kZWZpbmVkIHZhbHVlcy4KLSAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcy4KICAgICAgIC0gW0JVRyAxODM0NTM5XTogQ29uc2lzdGVudCBoYW5kbGluZyBvZiBPSUQgcGFyc2luZy4KKyAgICAgIC0gW1BBVENIIDE2Mjc5NDldOiBhIHBlcmwgYWdlbnR4IGNvbnN1bWVzIG1lbW9yeQorICAgICAgLSBbUEFUQ0ggMTcyNTA0OV06IEZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIgdXNhZ2UuCiAgICAgICAtIFtQQVRDSCAxODExNDYzXTogcGVybCBhc3luYyBjYWxsYmFjayBjb3JlZHVtcAorICAgICAgLSBbUEFUQ0ggMTgzNDk4M106IENvbnNpc3RlbnQgaGFuZGxpbmcgb2YgT0lEIHBhcnNpbmcuCiAgICAgICAtIFtQQVRDSCAxOTE0MzkzXTogcmVnaXN0ZXJBZ2VudCBjYW4gbm93IGJlIHJ1biBtdWx0aXBsZSB0aW1lcwogICAgICAgLSBbUEFUQ0ggMTkxNDY0M106IGZpeCBpc3N1ZXMgd2l0aCBlbWJlZGRlZCBwZXJsCiAgICAgICAtIFtQQVRDSCAxOTE0NjQ1XTogYmV0dGVyIGVuZCBvZiBtaWIgc3VwcG9ydAogICAgICAgLSBbUEFUQ0ggMTkyMDM5MF06IGZpeCByZWdpc3RyYXRpb24gb2YgdGFibGVzIHdpdGggLjAgYXMgSUlEcwotICAgICAgLSBbUEFUQ0ggMjAyMTQ0NF06IFN1cHBvcnQgU05NUHYyYyBpbiBnZXR0YWJsZQotICAgICAgLSBmaXhlZCBhbiBleHRyYSBicmFjZSBpbiB0aGUgZG9jcyBwb2ludGVkIG91dCBieSBKYXNvbiBNYXJ0aW4KLQotICAgIHB5dGhvbjoKLSAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcwotICAgICAgLSBbQlVHIDE4NjgyNzhdOiBQeXRob24gc2VnZmF1bHQgKGludHJvZHVjZWQgYnkgcjE2OTYyKQotICAgICAgLSBbUEFUQ0ggMTg2MjE3N106IG1hZGUgY29kZSBtb3JlIHdpbmRvd3MvY3lnd2luIGNvbXBpbGVyIGZyaWVuZGx5Ci0gICAgICAtIFtQQVRDSCAxODc3ODQwXTogZml4IE1JQiBsYWJlbCBhbmQgaW5kZXhpbmcgZHVlIHRvIGJyb2tlbiByZWdleHAKLQotICAgIEFJWDoKLSAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIEFJWCA2LnguCi0KLSAgICBMaW51eDoKLSAgICAgIC0gW1BBVENIIDE5Njk2MjddOiBIYW5kbGUgZW1wdHkgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlCi0gICAgICAtIEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5IHdpdGgKLSAgICAgICAgdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzCi0KLSAgICBTb2xhcmlzOgotICAgICAgLSBbQlVHIDE4MTA4MTRdOiB0Y3BUYWJsZSBtaXNzaW5nIGVudHJpZXMgYW5kIHdyb25nIHBvcnRzCi0gICAgICAtIFtQQVRDSCAxODI0MTk2XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKLSAgICAgIC0gW1BBVENIIDE4MzQ2OTldOiBGaXggMTgzMzI5NDogRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgotICAgICAgLSAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcyAxMFU0KwotCi0qIDUuNC4xICoKLQotICAgIHNubXBsaWI6Ci0gICAgICAtIENoYW5nZSBzbm1wX3Nlc3NfYWRkX2V4IHRvIGNvbnNpc3RlbnRseSBjbG9zZSBhbmQKLSAgICAgIC0gRGVhbGxvY2F0ZSB0aGUgY29uZm1pYnMgYW5kIGNvbmZtaWJkaXJzCi0gICAgICAtIEZFQVRVUkVTOiAxMDQxODg4OiBDaGVjayBkaXJlY3RvcnkgcGF0aHMgZm9yCi0gICAgICAtIEZFQVRVUkVTOiA4NTE4ODc6IFJlcG9ydCByYW5nZSBpbmZvcm1hdGlvbiBmb3IKLSAgICAgIC0gUmVhZCB0aGUgY29uZmlnIHBhcmFtZXRlcnMgZGVmVGFyZ2V0IGFuZAotICAgICAgLSBVc2UgdGhlIGRlZmF1bHRfdGFyZ2V0IGFyZ3VtZW50IGlmIGl0IGlzCi0gICAgICAtIFtCVUcgMTYwMDE3MV06IFN1cHBvcnQgbG9uZ2VyIGNvbW11bml0eSBzdHJpbmdzCi0gICAgICAtIFtCVUcgMTYxOTgyN106IGxpbmsgYWdhaW5zdCBuZWVkZWQgZXh0ZXJuYWwKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogbGluayBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzCi0gICAgICAtIFtCVUcgMTY2MDA2MV06IFZhbGlkYXRlIGVuZ2luZUlEcyBtb3JlIHN0cmljdGx5LgotICAgICAgLSBbUEFUQ0ggMTU0ODY3MF06IEZpeCByYW5nZSBjaGVja3MgZm9yIHVuc2lnbmVkCi0gICAgICAtIFtQQVRDSCAxNTkyNzA2XTogRml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZwotICAgICAgLSBbUEFUQ0ggMTYxNjkxMl06IGZpeAotICAgICAgLSBbUEFUQ0ggMTYyMDQyNF06IEhvbm9yCi0gICAgICAtIFtQQVRDSCAxNjM0NjIwXTogRml4IGxlYWtzIGZyb20KLSAgICAgIC0gW1BBVENIIDE2NDAxMTRdOiBEb24ndCBzdG9yZSB0cmFpbGluZyBudWxsCi0gICAgICAtIFtQQVRDSCAxNjQxODk1XTogRXh0ZW5kIHNob3J0IHZpZXcgbWFza3MgKGFzIHBlcgotICAgICAgLSBbUEFUQ0ggMTY0MTk3Ml06IGFkZCBtaXNzaW5nIGNvbnN0Ci0gICAgICAtIFtQQVRDSCAxNjUzNjcwXTogQ29uc2lzdGVudCBTTk1QdjMgYmVoYXZpb3VyCi0gICAgICAtIFtQQVRDSCAxNjgxMDMwXTogQmV0dGVyIGhhbmRsaW5nIG9mIGVtcHR5Ci0gICAgICAtIFtQQVRDSCAxNjg3MzE2XTogRG9uJ3QgZHJvcCBjb25zdCBmcm9tIGNhc3RzLgotICAgICAgLSBbUEFUQ0ggMTY4NzMyNV06IEZpeCBwcm9ibGVtIHdpdGggb3BlcmF0b3IKLSAgICAgIC0gaW5jcmVtZW50ICJjdXJyZW50IiBhbmQgImFnZSIgYWNjb3JkaW5nIHRvCi0gICAgICAtIGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiBpbnRyb2R1Y2UKLSAgICAgIC0gcGF0Y2g6IDE2NDU2OTg6IGZpeCA2NC1iaXQgc2lnbmVkIGludGVnZXIKLQotICAgIHNubXBhcGk6Ci0gICAgICAtIERvIG5vdCB1c2UgZ2V0c2VydmJ5bmFtZSB0byBmaW5kIGRlZmF1bHQgcG9ydAotCi0gICAgc25tcGQ6Ci0gICAgICAtIENvcnJlY3QgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yCi0gICAgICAtIFtCVUcgMTA0NjMyN106IFJlc2V0ICJpbmNsdWRlQWxsRGlza3MiIGZsYWcgd2hlbgotICAgICAgLSBbQlVHIDEwNzM3ODJdOiBSZXN0b3JlIFBlcmZTdGF0IHZhbHVlcyBmb3IgRnJlZUJTRAotICAgICAgLSBbQlVHIDExMDIwNThdOiBTa2lwIG5vbi1tb3VudGVkIGRpc2tzIChlLmcuIHN3YXAKLSAgICAgIC0gW0JVRyAxMTU5OTA4XTogRml4IG1lbW9yeSBsZWFrCi0gICAgICAtIFtCVUcgMTM5Nzg5NV06IGluY2x1ZGUgbWlzc2luZyBpbnRlcmZhY2UKLSAgICAgIC0gW0JVRyAxNDEzNzI4XTogUmVmZXJlbmNlIGluZGV4IHZhbHVlcyBpbiBkZWJ1ZwotICAgICAgLSBbQlVHIDE0MTYyNzZdOiBIYW5kbGUgZGVwZW5kZW5jeSBvbiBNSUIgcGFyc2luZwotICAgICAgLSBbQlVHIDE1NDY4MTddOiBGaXggc25tcEVudGVycHJpc2UgdmFyYmluZCB3aGVuCi0gICAgICAtIFtCVUcgMTU1ODgyM106IGZpeCBpcEFkZHJlc3NUYWJsZSBtZW1vcnkgbGVhawotICAgICAgLSBbQlVHIDE2MDAyNjFdOiBIYW5kbGUgbm9uLXg4NiAvcHJvYy9jcHVpbmZvIGZvcm1hdAotICAgICAgLSBbQlVHIDE2MDIyODZdOiBEb24ndCBsZXQgdGFibGUgaG9sZXMgYmxvY2sgbGF0ZXIKLSAgICAgIC0gW0JVRyAxNjI4NjEzXTogUmVzdG9yZSBtZW1Ub3RhbEZyZWUuMCBvbiBTb2xhcmlzCi0gICAgICAtIFtCVUcgMTYzMzU5NV06IEZpeCBBZ2VudFggaGFuZGxpbmcgb2YgQ291bnRlcjY0Ci0gICAgICAtIFtCVUcgMTY3NzA2M106IENoZWNrIGZvciBmYWlsZWQgbWFsbG9jIGNhbGxzLgotICAgICAgLSBbQlVHIDE2ODUwNjddOiBNb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YKLSAgICAgIC0gW0JVRyAxNjg1MDgxXTogQ2hlY2sgZm9yIHZhbGlkIE9JRCBvbiBGcmVlL1VuZG8KLSAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0KLSAgICAgIC0gW0JVRyAxNzQ1MTEzXTogSGFuZGxlIHNpbmdsZS1saW5lIChhbmQgemVyby1saW5lKQotICAgICAgLSBbQlVHIDE3NjA2MzNdOiBmaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCi0gICAgICAtIFtCVUcgOTAyNjEwXTogRG9uJ3QgZGlzY2FyZCBwZW5kaW5nIGRhdGEgZm9sbG93aW5nCi0gICAgICAtIFtCVUcgOTAyODAxXTogRml4IG9yZGVyaW5nIG9mIFNNVVgtcmVnaXN0ZXJlZAotICAgICAgLSBbUEFUQ0ggMTYwMTE4OCwgXTogQlVHOiAxNjAwNDMyOiBIYW5kbGUgc2lnbmFscwotICAgICAgLSBbUEFUQ0ggMTYyMDQyNF06IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0Ci0gICAgICAtIFtQQVRDSCAxNjM3Mjg3XTogSGFuZGxlIG11bHRpcGxlIHRhcmdldCB0YWdzCi0gICAgICAtIFtQQVRDSCAxNjM5MjgyXTogU2F2ZSBwZXJzaXN0ZW50Ci0gICAgICAtIFtQQVRDSCAxNjM5MzYwXTogRml4IHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUKLSAgICAgIC0gW1BBVENIIDE2Mzk3MjZdOiBSZXBvcnQgcGh5c2ljYWwgbWVtb3J5Ci0gICAgICAtIFtQQVRDSCAxNjQxMzMyXTogSW5jbHVkZSBtaXNzaW5nIGFnZW50IGNvbmZpZwotICAgICAgLSBbUEFUQ0ggMTY0MTY4NV06IEhhbmRsZSB1bnJlc3BvbnNpdmUgQWdlbnRYCi0gICAgICAtIFtQQVRDSCAxNjQxODY1XTogRG9uJ3QgZG91YmxlIGNoZWNrIHNubXBUcmFwT0lECi0gICAgICAtIFtQQVRDSCAxNjQyMjU1XTogSGFuZGxlIHNhdmluZyBsb25nCi0gICAgICAtIFtQQVRDSCAxNjQ0MjgwXTogRG9uJ3QgYXV0b21hdGljYWxseSBwcm9iZSBmb3IKLSAgICAgIC0gW1BBVENIIDE2NDQyODBdOiBVc2UgdGhlIGNvcnJlY3QgZW5naW5lSUQgd2hlbgotICAgICAgLSBbUEFUQ0ggMTY0NDcxNF06IHJlcGxhY2UKLSAgICAgIC0gW1BBVENIIDE2NTk2MjNdOiBIYW5kbGUgU01VWCBwZWVycyB3aXRoIGFuIGVtcHR5Ci0gICAgICAtIFtQQVRDSCAxNjY1NTQ5XTogSGFuZGxlIGNyZWF0aW5nIFZBQ00gZW50cmllcwotICAgICAgLSBbUEFUQ0ggMTY2NTk4NV06IEltcGxlbWVudCBpcFJlYXNtVGltZW91dAotICAgICAgLSBbUEFUQ0ggMTY2NjczN106IGluY2x1ZGUgaXB2NiBjb3VudHMgaW4KLSAgICAgIC0gW1BBVENIIDE2NjgxOTNdOiBGaXggY2hlY2sgZm9yIHY2IFJlYXNtTWF4U2l6ZQotICAgICAgLSBbUEFUQ0ggMTY2ODE5M106IFVwZGF0ZSByZWdpc3RyYXRpb24gb2YKLSAgICAgIC0gW1BBVENIIDE2Njg5NTJdOiBJZ25vcmUgem9tYmllIHByb2Nlc3Nlcy4KLSAgICAgIC0gW1BBVENIIDE2NzY0NzhdOiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCi0gICAgICAtIFtQQVRDSCAxNjc4Nzg4XTogQmV0dGVyIGhhbmRsaW5nIG9mIFNNVVggc29ja2V0Ci0gICAgICAtIFtQQVRDSCAxNjgzMDU0XTogc2V0IHVkcEVuZHBvaW50SW5zdGFuY2UgdG8KLSAgICAgIC0gW1BBVENIIDE2ODczMzZdOiBTdGFydCB1c2luZyB0aGUgZW5oYW5jZWQKLSAgICAgIC0gW1BBVENIIDE2OTI3NjhdOiBGaXggY29weWluZyBvZiBub24tb2N0ZXQtYWxpZ25lZAotICAgICAgLSBbUEFUQ0ggMTY5ODE4NF06IFJlZ2lzdGVyIG5vbi1kZWZhdWx0IGNvbnRleHQKLSAgICAgIC0gW1BBVENIIDE3MDA3MzBdOiBSZW1vdmUgdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KLSAgICAgIC0gW1BBVENIIDE3MDA3MzJdOiBGaXggZGVidWcgb3V0cHV0IHN0YXRlbWVudHMuCi0gICAgICAtIFtQQVRDSCAxNzAwNzM3XTogVGlkeSB1cCBzZXRTZXJpYWxObwotICAgICAgLSBbUEFUQ0ggMTcyOTYyOV06IEZpeCBtZW1vcnkgbGVhayBpbiBkaXNtYW4KLSAgICAgIC0gcGF0Y2ggZnJvbSBXb2p0ZWsgSmF3b3IgdG8gaGFuZGxlIHJvdyBkZWxldGlvbgotICAgICAgLSBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0byBkZWxheQotICAgICAgLSBwYXRjaDogMTU5NTU2ODogZnJvbSBjeXJpbF9tYXJnYXJpYTogZml4Ci0gICAgICAtIHBhdGNoOiAxNjE3MjU1OiBmaXggbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGFycmF5Ci0gICAgICAtIHBhdGNoOiAxNzAwMTU3OiBmcm9tIGFmcmlrYTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYwotICAgICAgLSBwYXRjaDogMTcxMDYzMjogZnJvbSBtYXZhcmxleTogZml4IG1lbW9yeSBsZWFrIG9uCi0gICAgICAtIHBhdGNoOiAxNzE5MjUzOiBmcm9tICJDaHJpc3RpYW4gSnVuZyI6IGZpeAotICAgICAgLSBwYXRjaDogMTcxOTI1NDogZnJvbSAiQ2hyaXN0YW4gSnVuZyI6IHVwZGF0ZQotCi0gICAgc25tcHRyYXBkOgotICAgICAgLSBbQlVHIDE2MzgyMjVdOiBGaXggaW50ZXJwcmV0YXRpb24gb2YgdHJhbnNwb3J0Ci0gICAgICAtIFtQQVRDSCAxNjIwNDI0XTogRml4IG5vdGlmaWNhdGlvbiByZWNlcHRpb24gc28KLSAgICAgIC0gcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8KLSAgICAgIC0gdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRyYXBzIGJ5IE9JRCBzdWJ0cmVlLgotCi0gICAgYXBwczoKLSAgICAgIC0gW0JVRyAxOTY0MTM2XTogRHJvcCBOVUxMIHR5cGUgZnJvbSBzbm1wc2V0IHVzYWdlCi0gICAgICAtIFtQQVRDSCAxNTI5NTIzXTogQ2xvc2UgU05NUCBzZXNzaW9uIG9uIGZhaWx1cmUuCi0KLSAgICBidWlsZDoKLSAgICAgIC0gTGluayBsaWJkbCBhZ2FpbnN0IGxpYm5ldHNubXBtaWJzIGluc3RlYWQgb2YKLSAgICAgIC0gTGluayBsaWJrdm0gYW5kIGxpYndyYXAgdG8gbGlibmV0c25tcGFnZW50Ci0gICAgICAtIFtCVUcgMTA5NjE2Nl06IEhhbmRsZSAtLXdpdGhvdXQtbG9nZmlsZSBjb3JyZWN0bHkuCi0gICAgICAtIFtCVUcgMTY0Nzk3Nl06IEN5Z3dpbi9NaW5HVyBXaW5kb3dzIGJ1aWxkIGZhaWxzCi0gICAgICAtIFtQQVRDSCAxNjI1MTM1XTogY29uZmlndXJlIGxvY2F0aW9uIG9mIHB5dGhvbgotICAgICAgLSBbUEFUQ0ggMTY4MTA3M106ICNpZmRlZiBiYXNlZCBjb25maWdfZXJyb3IgaW5zdGVhZAotICAgICAgLSBbUEFUQ0ggMTcyODIyNl06IG1ha2Ugc3VyZQotICAgICAgLSBbUEFUQ0ggMTcyODIzMF06IGFkZAotICAgICAgLSBbUEFUQ0ggMTcyODIzN106IE1vdmUKLSAgICAgIC0gW1BBVENIIDE3MjgyNDRdOiBBZGQKLSAgICAgIC0gW1BBVENIIDE3MjgyNDddOiBBZGQgdHlwZQotICAgICAgLSBhZGQgIkJ1aWxkUmVxdWlyZXM6IHBlcmwtRXh0VXRpbHMtRW1iZWQiIHRvIHRoZQotICAgICAgLSBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBoYXNtbnRvcHQgdG8gZml4IHRoZQotICAgICAgLSBvbmx5IGVuYWJsZSBtaWJJSS9pcHY2IHRocm91Z2ggLS1lbmFibGUtaXB2NiBvbgotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIHNpbXBsaWZ5IG1ha2VmaWxlIHRhcmdldAotICAgICAgLSB1cGRhdGUgdG8gbGlidG9vbCAxLjUuMjQgKGZyb20gMS41LjIyKQotICAgICAgLSB1c2UgTERGTEFHUyB3aGVuIGJ1aWxkaW5nIGFnZW50LCBoZWxwZXJzIGFuZCBtaWIKLSAgICAgIC0gdXNlIGxpYnRvb2wgY2xlYW4gZm9yIHJlbW92aW5nIGZpbGVzIHRvIGVuc3VyZSB3ZQotICAgICAgLSB3b3JrIGFyb3VuZCBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcGhlbHBlcnMKLSAgICAgIC0geWV0IGFub3RoZXIgZml4IHRvIGFkZHJlc3MgYnVpbGQgaXNzdWVzIHdpdGgKLQotICAgIGJ1aWxkaW5nOgotICAgICAgLSBDaGVjayBmb3Igc3VwcG9ydCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucwotICAgICAgLSBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgYXMgdGhlcmUgYXJlIHNvbWUKLQotICAgIGNvbmZpZ3VyZToKLSAgICAgIC0gW0JVRyAxNTY3MzI0XTogQ2xhcmlmeSBwcm9tcHRpbmcgZm9yCi0KLSAgICBkb2N1bWVudGF0aW9uOgotICAgICAgLSBbQlVHIDEyNDcxNjRdOiBEb2N1bWVudCB1c2Ugb2YgT0lEIG1hY3JvcwotICAgICAgLSBbQlVHIDE0MDc0NzZdOiBDbGFyaWZ5IE1JQiBwYXJzaW5nIHRvZ2dsZQotICAgICAgLSBbQlVHIDE2MTQxMDRdOiBicm9rZW4gc25tcGQoOCkgbWFudWFsIHBhZ2UKLSAgICAgIC0gW1BBVENIIDE2MDQ1ODBdOiBTTk1QKDMpIG1hbnVhbCBwYWdlCi0KLSAgICBpcml4OgotICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cwotCi0gICAgbGlicmFyeToKLSAgICAgIC0gRkVBVFVSRVM6IDQ1NDAyODogRGV0ZWN0IGFuZCBoYW5kbGUgZW1wdHkgTUlCCi0gICAgICAtIFBhdGNoIGZyb20gIk1pdHN1cnUgQ2hpbmVuIjogY2xlYW5zIHVwIHRoZQotICAgICAgLSBbUEFUQ0ggMTY0MjA3MV06IERvbid0IGZpZGRsZSB3aXRoIHRoZSBzdG9yYWdlCi0gICAgICAtIFtQQVRDSCAxNjY1NTQzXTogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KLQotICAgIG1pYjJjOgotICAgICAgLSBbQlVHIDE0Mjk0NzJdOiBQcm90ZWN0IGFnYWluc3QgbWlzc2luZyBpbnN0YW5jZXMKLSAgICAgIC0gW0JVRyAxNTgyOTcyXTogSGFuZGxlIEB3aGlsZUAvQGVuZEAgcHJvcGVybHkuCi0gICAgICAtIFtCVUcgODMzNjczXTogTW9yZSBmb2N1c2VkIHNpemUgY2hlY2tzLgotICAgICAgLSBbUEFUQ0ggMTY2ODE3MV06IHNraXAgdW5rbm93biBjb2xzIGluIG1pbi9tYXgKLQotICAgIG1pc2M6Ci0gICAgICAtIERvbid0IHVzZSB0aGUgbGVnYWN5IHN5bWJvbAotCi0gICAgcGF0Y2g6Ci0gICAgICAtIGZpeCB0aGUgLU0gc3dpdGNoIGZvcgotCi0gICAgcGVybDoKLSAgICAgIC0gW0JVRyAxNDUwNjY5XTogUEFUQ0g6IDE2Mjc5NDk6IGZyb20gbWFydGluOTg3OiBhCi0gICAgICAtIFtCVUcgMTYxOTgyN106IGxpbmsgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXB0cmFwZAorICAgICAgLSBbUEFUQ0ggMTk1NjE5M106IGJldGEgdGhyZWFkYWJsZSBwZXJsIG1vZHVsZSBjb2RlIGZvciBTTk1QdjEvMmMgdXNhZ2UuCisgICAgICAtIFtQQVRDSCAyMDIxNDQ0XTogU3VwcG9ydCBTTk1QdjJjIGluIGdldHRhYmxlIHByb2Nlc3NpbmcKKyAgICAgIC0gW1BBVENIIDIwMjI5NDhdOiBGaXggZm9yIENvdW50ZXI2NCBpbiBwZXJsIHN1YmFnZW50CisgICAgICAtIFtQQVRDSCAyMTgyMDc5XTogRml4IHZhcmlvdXMgcGVybCB3YXJuaW5ncyAmIGFsbG93IHVzZSBvZiAidXNlIHN0cmljdCIKKyAgICAgIC0gW1BBVENIIDIyNzIzNDddOiBJbXBsZW1lbnQgImltcGxpZWQiIGluIE1JQiBoYXNoCisgICAgICAtIFtQQVRDSCAyMzYxNzEyXTogRml4IGdldGJ1bGsgb3B0aW1pemF0aW9uIGR1cmluZyB3YWxrcworICAgICAgLSBbUEFUQ0ggMjcwOTcwNV06IFJldHJpZXZlIHNyYy90YXJnZXQgSVAgYWRkcmVzcyBpbiBQZXJsLWJhc2VkIGFnZW50cworICAgICAgLSBbUEFUQ0ggMjc2MzcxN106IEFsbG93IHBlcmwgdG8gdXNlIE9QQVFVRXMKKyAgICAgIC0gW1BBVENIIDI3OTM4NTddOiBSZXBvcnQgZmFpbGVkIGFzeW5jaHJvbm91cyByZXF1ZXN0cy4KICAgICAgIC0gZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0CiAgICAgICAtIGZpeCBwcmVyZXF1aXNpdGVzIGZvciBOZXRTTk1QOjpUcmFwUmVjZWl2ZXIKICAgICAgIC0gZml4IHN5bnRheCBlcnJvciBpbiBOZXRTTk1QOjphZ2VudDo6U3VwcG9ydAotICAgICAgLSBpbnN0YWxsIGVtYmVkZGVkIHBlcmwgaW5pdCBmaWxlcyBmb3IKLSAgICAgIC0gcGF0Y2g6IDE3MjUwNDk6IGZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIKLQotICAgIHBvcnRzOgotICAgICAgLSBwYXRjaDogMTcwNjM0NDogZnJvbSBuYXlsb3I6IGZpeCBjb21waWxhdGlvbiB3aXRoCisgICAgICAtIGluc3RhbGwgZW1iZWRkZWQgcGVybCBpbml0IGZpbGVzIHdpdGggY29ycmVjdCBwZXJtaXNzaW9ucwogCiAgICAgcHl0aG9uOgotICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUKKyAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcy4KKwkgICAgICAgICAgICAgICBBZGRyZXNzZXMgQ1ZFLTIwMDgtMjI5MgorICAgICAgLSBbQlVHIDE4NjgyNzhdOiBQeXRob24gc2VnZmF1bHQKKyAgICAgIC0gW0JVRyAyMjU4OTM1XTogUHl0aG9uIEV4dGVuc2lvbiBNb2R1bGUgZmFpbHMgb24gU29sYXJpcworICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUgIChEZWJpYW4gcGF0Y2gjMzgpCisgICAgICAtIFtQQVRDSCAxODYyMTc3XTogbWFkZSBjb2RlIG1vcmUgd2luZG93cy9jeWd3aW4gY29tcGlsZXIgZnJpZW5kbHkKKyAgICAgIC0gW1BBVENIIDE4Nzc4NDBdOiBGaXggTUlCIGxhYmVsIGFuZCBpbmRleGluZyBkdWUgdG8gc2wsIGJyb2tlbiByZWdleHAKKyAgICAgIC0gW1BBVENIIDIwNzQ4MTddOiBGaXggcmVnZXhwIGVuZ2luZSBDUFUgcGVyZm9ybWFuY2UgaXNzdWVzCisgICAgICAtIFtQQVRDSCAyMjYwODI4XTogRml4IHB5dGhvbiBzbm1wd2FsayBtZW1vcnkgbGVhaworICAgICAgLSBbUEFUQ0ggMjU4MDk3OV06IEZpeCBweXRob24gc2Vzc2lvbiBwb2ludGVycyBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICAgIC0gW1BBVENIIDI2Njc0MTVdOiBTdXBwb3J0ICJVc2VOdW1lcmljIiBvcHRpb24uCisgICAgICAtIFtQQVRDSCAyNzc1ODAwXTogQWxsb3cgdGhyZWFkaW5nIHRvIGNvbnRpbnVlIHdoZW4gYSByZXF1ZXN0IGlzIHNlbnQKIAogICAgIHRlc3Q6Ci0gICAgICAtIHN1cHBvcnQgYSAtbiBmbGFnIHRvIFJVTlRFU1RTIHRvIHByaW50IHRoZSB0ZXN0CisgICAgICAtIGVuaGFuY2Ugc25tcG5ldHN0YXQgdGVzdCB0byBjaGVjayB0Y3BUYWJsZSBpbiBUQ1AgbW9kZQorICAgICAgLSBzdXBwb3J0IGEgLW4gZmxhZyB0byBSVU5URVNUUyB0byBwcmludCB0aGUgdGVzdCBudW1iZXIgZm91bmQgaW4gdGhlCisJdGVzdCBmaWxlIGFzIG9wcG9zZWQgdG8gdGhlIG51bWVyaWNhbCBjb3VudAorICAgICAgLSBEbyBub3QgdGVybWluYXRlIG9uIFNJR0NITEQgc2luY2UgZGFzaCBhbmQgc291bWUgYm91cm5lIHNoZWxscyB3aWxsCisJZXhpdCB0aGUgbWFpbiBzaGVsbCB3aGVuIGEgc3Vic2hlbGwgdGVybWluYXRlcyBpbiB0aGF0IGNhc2UuCiAKLSAgICB1bnNwZWNpZmllZDoKLSAgICAgIC0gW0JVRyAxNTk2NjM4XTogbWVtb3J5IGxlYWsgaW4gaXBDaWRyUm91dGVUYWJsZSwKLSAgICAgIC0gW0JVRyAxNjAwMDkzXTogYXV0b2NvbmYgMi42MCBicmVha3MgdGhlIGJ1aWxkCi0gICAgICAtIFtCVUcgMTYxMTUyNF06IGZpeCB0Y3AgY29ubmVjdGlvbiB0YWJsZSBmZCBsZWFrCi0gICAgICAtIFtCVUcgMTYzMzQ4M106IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CisgICAgUG9ydHM6CiAgICAgICAtIFtCVUcgMTcxMDkxMF06IGluaXRpYWwgc3VwcG9ydCBmb3IgRHJhZ29uRmx5IEJTRAotICAgICAgLSBbUEFUQ0ggMTY3ODI5OF06IGZyb20gbWFnZnI6IGNvbXBpbGUtc3ViYWdlbnQgY2hlY2tzIGZvcgotICAgICAgLSBbUEFUQ0ggMTY3ODMwMV06IGZyb20gbWFnZnI6IGRlYWxsb2NhdGUgZG9tYWluIHJlZ2lzdHJ5Ci0gICAgICAtIFtQQVRDSCAxNjc4MzAyXTogZnJvbSBtYWdmcjogbmV0c25tcF9taWJpbmRleF9sb2FkIGxlYWtzCi0gICAgICAtIFtQQVRDSCAxNjc4MzA1XTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KLSAgICAgIC0gW1BBVENIIDE2NzgzMDZdOiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBsb2cgaW4KLSAgICAgIC0gW1BBVENIIDE3MTkyNDRdOiBmaXggbWZkIGdlbmVyYXRpbmcgbWFwIGZ1bmN0aW9uCi0gICAgICAtIFtQQVRDSCAxNzI4MjQxXTogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkIGNvbmZpZ3VyZSBjaGVjawotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBjcm9zcy1jb21waWxlIGJ1aWxkcyBpbiBhcHBsZXMKLSAgICAgIC0gcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzLgotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIGltcHJvdmUgbWVtb3J5IHJlcG9ydGluZworICAgICAgLSBbUEFUQ0ggMTYyMzg3NF06IGFkZCBHTlUva0ZyZWVCU0Qgc3VwcG9ydAogCiAgICAgQUlYOgotICAgICAgLSBbUEFUQ0ggMTY2NTA3OV06IEFJWCBwYXRjaGVzCi0gICAgICAtIGJ1aWxkIGZpeGVzIGZvciBlbWJlZGRlZCBQZXJsCi0gICAgICAtIGZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZwotICAgICAgLSB1c2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKyAgICAgIC0gW1BBVENIIDE2NjUwNzldOiBBSVggcGF0Y2hlcyBmb3IgY3B1IHN0YXRzIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIEFJWCA2LngKKyAgICAgIC0gQnVpbGQgZml4ZXMgZm9yIGVtYmVkZGVkIFBlcmwKKyAgICAgIC0gRml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nIHN0YXRpYworICAgICAgLSBVc2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKyAgICAgIC0gW1BBVENIIDI4ODY1OThdOiBIZWFkZXIgZml4ZXMgZm9yIGNvbXBpbGluZyBvbiBBSVg2CiAKICAgICBGcmVlQlNEOgotICAgICAgLSBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKLSAgICAgIC0gZml4IGNvbmZpZ3VyZSB3YXJuaW5nIGZvciBzeXMvY29uZi5oCisgICAgICAtIFtCVUcgMTA3Mzc4Ml06IFJlc3RvcmUgUGVyZlN0YXQgdmFsdWVzIGZvciBGcmVlQlNEIDUueCBzeXN0ZW1zLgorICAgICAgLSBbQlVHIDE2MzM0ODNdOiBTdXBwb3J0IENQVSBIQUwgb24gRnJlZUJTRDQueAorICAgICAgLSBbUEFUQ0ggMTk1MTk5Nl06IEZpeCBmb3IgQ1BVIHN0YXRzIG9uIEZyZWVCU0QKKyAgICAgIC0gW1BBVENIIDI1MDcyNDldOiBzY3RwLW1pYiBzdXBwb3J0IGZvciBGcmVlQlNELgorICAgICAgLSBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKKyAgICAgIC0gRml4IGNvbmZpZ3VyZSB3YXJuaW5nIGZvciBzeXMvY29uZi5oCisgICAgICAtIHBhdGNoIGZyb20gQ2V6YXJ5IE1vcmdhIHRvIGZpeCBhIG1ha2UgdGVzdCBvbiBmcmVlYnNkCiAKLSAgICBIUDoKLSAgICAgIC0gVVg6IEJVRzogMTc0MjI3ODogY29tcGlsZSBlcnJvciBvbiBIUC1VWCAxMS4yMyAoSUE2NCkKLSAgICAgIC0gVVg6IEhQLVVYIG5lZWRzIF9SRUVOVFJBTlQgZGVmaW5lZCB0byBwaWNrIHVwCisgICAgSFAtVVg6CisgICAgICAtIFtCVUcgMjc3OTQ3Ml06IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlIHRhYmxlCisgICAgICAtIFtQQVRDSCAyMDg4NzI2XTogRml4IGFuIGlzc3VlIHJlcG9ydGluZyBtZW1vcnkgaW4gbmVnYXRpdmUgdmFsdWVzLgorICAgICAgLSBOZWVkcyBfUkVFTlRSQU5UIGRlZmluZWQgdG8gcGljayB1cCBzdHJ0b2tfci4KIAogICAgIElSSVg6Ci0gICAgICAtIFtQQVRDSCAxNjc1ODY5XTogQ1BVIHN0YXRpc3RpY3MgZm9yIElSSVgKKyAgICAgIC0gW1BBVENIIDE2NzU4NjldOiBDUFUgc3RhdGlzdGljcyBmb3IgSVJJWCBiYXNlZCBvbiBQQ1AKKyAgICAgIC0gW1BBVENIIDE3MDk3NDhdOiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKIAogICAgIExpbnV4OgotICAgICAgLSBbQlVHIDE2NjYwMDVdOiBGYWlsIHRvIHdhbGsgaXB2NkludGVyZmFjZVRhYmxlIG9uCi0gICAgICAtIFtQQVRDSCAxNTgxMjk0XTogCi0gICAgICAtIGZpeCBldGh0b29sIGNvbmZpZ3VyZSBjaGVjayBmb3IgcmVjZW50IHN5c3RlbXMKKyAgICAgIC0gW0JVRyAxNjY2MDA1XTogRmFpbCB0byB3YWxrIGlwdjZJbnRlcmZhY2VUYWJsZSBvbiBMaW51eAorICAgICAgLSBbUEFUQ0ggMTU4MTI5NF06IGhvc3QtcmVzb3VyY2VzIGltcHJvdmVtZW50cworICAgICAgLSBbUEFUQ0ggMTk2OTYyN106IEhhbmRsZSBpbnN0YWxsIHdpdGggZW1wdHkgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlIAorICAgICAgLSBbUEFUQ0ggMTcwNDEwNV06IEFkZCBJUHY2IHN1cHBvcnQgdG8gdGhlIGluZXROZXRUb01lZGlhVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MDU1OTRdOiBWYXJpb3VzIGZpeGVzIHRvIGlwQWRkcmVzc1ByZWZpeFRhYmxlIHJlcG9ydGluZworICAgICAgLSBbUEFUQ0ggMTcwODI0M106IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZVRhYmxlCisgICAgICAtIFtQQVRDSCAxNzE1NDA1XTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgICAgICAtIFtQQVRDSCAxNzE5MjU0XTogdXBkYXRlIEhSRlNfaWdub3JlIGxpc3QgdG8gY3VycmVudCBsaW51eCBsaWtlbHlob29kcworICAgICAgLSBbUEFUQ0ggMTcyNDYwMl06IE1mRC1iYXNlZCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgLSBbUEFUQ0ggMTc4MzQyM106IHJldHVybiBhIGNvcnJlY3QgaXB2NkludGVyZmFjZUlkZW50aWZpZXIgb2YgbG9vcGJhY2sKKyAgICAgIC0gW1BBVENIIDE4MjYxMDJdOiBzdXBwb3J0IGxvbmdlciBpbnRlcmZhY2UgbmFtZXMKKyAgICAgIC0gW1BBVENIIDE4Mjg2MDJdOiBTdXBwb3J0IGlwRGVmYXVsdFRUTCBhbmQgaXBGb3J3YXJkaW5nIFNFVHMKKyAgICAgIC0gW1BBVENIIDE4OTYxMThdOiBGaXggaWZUYWJsZSAzMmJpdCBjb3VudGVycworICAgICAgLSBbUEFUQ0ggMTkyNzc1MV06IEltcGxlbWVudCBpY21wTXNnU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IEltcGxlbWVudCBTQ1RQLU1JQgorICAgICAgLSBbUEFUQ0ggMjA1MzI3M106IEltcGxlbWVudCBFdGhlckxpa2UgTUlCCiAKICAgICBNYWNPU1g6Ci0gICAgICAtIFtQQVRDSCAxNjAwNDUzXTogT1MgWAotICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwKLQotICAgIFBlcmw6Ci0gICAgICAtIGxpbmsgUGVybCBtb2R1bGVzIGFnYWluc3QgdGhlIGV4YWN0IHNldCBvZiBsaWJyYXJpZXMKKyAgICAgIC0gW1BBVENIIDE2MDA0NTNdOiBPUyBYIGNvbXBpbGUtdGltZSBlbmRpYW4gZGV0ZXJtaW5hdGlvbgorICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCisgICAgICAtIEltcHJvdmUgbWVtb3J5IHJlcG9ydGluZyAocGF0Y2ggZnJvbSBBcHBsZSkKKyAgICAgIC0gUGF0Y2g6IDM1MTQwNDkgZnJvbSB0d29iaXRzLWdpdGh1YjogZml4IGNvbXBpbGF0aW9uIG9uIGRhcndpbjExCiAKICAgICBTb2xhcmlzOgotICAgICAgLSBJRi1NSUIgZml4OiBhZGQgbWlzc2luZyByZXR1cm4gYXQgZW5kIG9mCi0gICAgICAtIFtCVUcgMTYyNjE1M106IG5vIGhyU1dSdW4gaW5mb3JtYXRpb25zIG9uCi0gICAgICAtIFtQQVRDSCAxNjIzNDQ3XTogaHJTV1J1bgorICAgICAgLSBbQlVHIDE2MjYxNTNdOiBObyBoclNXUnVuIGluZm9ybWF0aW9ucyBvbiBTb2xhcmlzIHpvbmVzCisgICAgICAtIFtCVUcgMTgxMDgxNF06IHRjcFRhYmxlIG1pc3NpbmcgZW50cmllcyBhbmQgd3JvbmcgcG9ydHMKKyAgICAgIC0gW0JVRyAxODE5MTg5XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW0JVRyAxODIyMjc1XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW1BBVENIIDE2MjM0NDddOiBGaXggaHJTV1J1biBmb3IgdGVybWluYXRlZCBwcm9jZXNzZXMKKyAgICAgIC0gW1BBVENIIDE3MTk3MzBdOiBTdXBwb3J0IGZvciBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwQWRkcmVzc1RhYmxlCisgICAgICAtIFtQQVRDSCAxODI0MTk2XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW1BBVENIIDE4MzQ2OTldOiBGaXggMTgzMzI5NDogRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgorICAgICAgLSBbUEFUQ0ggMjAxMjQwNF06IERlYWwgd2l0aCBtb3JlIHRoYW4gMTAgaW50ZXJmYWNlcy4KKyAgICAgIC0gW1BBVENIIDI3NTE1ODhdOiBJbmNvbnNpc3RlbnQgZGF0YSBjYW4gYmUgcmVwb3J0ZWQgb24gU29sYXJpcyAxMFU0KworICAgICAgLSAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcyAxMFU0KworICAgICAgLSBJRi1NSUIgZml4OiBhZGQgbWlzc2luZyByZXR1cm4gYXQgZW5kIG9mIGdldF9pZl9zdGF0cwogCiAgICAgV2luMzI6CiAgICAgICAtIFtCVUcgMTY2Mjk4N106IGNvbXBpbGUgZXJyb3Igb24gQ3lnd2luCi0gICAgICAtIFtQQVRDSCAxNjIyMDgwXTogQTogcGFzcyBXaW4zMgorICAgICAgLSBbQlVHIDI3Nzk1NDFdOiBGaXhlZCBoYW5kbGUgbGVhayBpbiBwYXNzX3BlcnNpc3QuCisgICAgICAtIFtQQVRDSCAxNjIyMDgwXTogQTogcGFzcyBXaW4zMiBoYW5kbGVzIHJlbWFpbiBvcGVuLgorICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IEZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgICAgLSBbUEFUQ0ggMjY4NjI0OF06IEZpeCBzZXZlcmFsIHdpbkV4dERMTCBidWdzLgorICAgICAgLSBbUEFUQ0ggMjY4ODM0Ml06IEZpeCBWUzIwMDUgdmFyaW91cyBjb21waWxlciB3YXJuaW5nCisgICAgICAtIFtQQVRDSCAyNjkxODc2XTogQWxsb3cgY29tcGlsaW5nIHRoZSBzZXJ2aWNlcyB1c2luZyB1bmljb2RlLgorICAgICAgLSBbUEFUQ0ggMjY5Mzc0Nl06IGltcHJvdmVkIHNvY2tldCBzdGFydHVwIHN1cHBvcnQKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIHdpbkV4dERMTCB0byBidWlsZC5iYXQKKyAgICAgIC0gQnVpbGQgZml4ZXMgZm9yIE1TVkMgMjAwOC4KICAgICAgIC0gZml4IEFFUyBzdXBwb3J0CiAgICAgICAtIGZpeCB3aW4zMi9Db25maWd1cmUgLS13aXRoLWlwdjYKIAorKjUuNCoKKworICAgIGJ1aWxkOgorICAgICAgLSBbQlVHIDE0MTY0ODFdOiBTdXBwb3J0IHNwZWNpZnlpbmcgYW4gZXhwbGljaXQgbGlua2VyLgorICAgICAgLSBlbmFibGUtYXMtbmVlZGVkIHdpbGwgdHJ5IHRvIGxpbmsgYnVpbHQgbGlicmFyaWVzIGFnYWluc3QgbmVlZGVkCisJbGlicmFyaWVzIGF0IGxpYnJhcnkgbGluayB0aW1lLCByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbiBsaW5rIHRpbWUuCisKKyAgICBzbm1wbGliOgorICAgICAgLSBbUEFUQ0ggMTI4MjU2Nl06IHRvIHJld29yayB0cmFuc3BvcnQgY3JlYXRpb24gdG8gYWxsb3cgZm9yCisJYWx0ZXJuYXRpdmUgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBhZGRyZXNzIGFuZCBhIG1vcmUgZmxleGlibGUKKwl0cmFuc3BvcnQgcmVnaXN0cmF0aW9uIHN5c3RlbQorICAgICAgLSBbQlVHUzogMTUzNzQ1OSwgQlVHUzogMTU0MDc0NV0gRml4IG1pc3NpbmcgTUlCIHBhcnNpbmcgdG9rZW5zCisgICAgICAtIFtQQVRDSCAxNTYyMTY4XTogY2hlY2sgZm9yIGEgc29jayBmZCBsZXNzIHRoYW4gMC4KKyAgICAgIC0gW1BBVENIIDE1NzA2NTBdOiBjcmVhdGUgYSBsb2dnaW5nIHNodXRkb3duIGZ1bmN0aW9uIHRvIHByb3BlbHJ5CisJY2xlYW4gdXAgbG9nIHJlZ2lzdHJhdGlvbnMgaWYgbmVlZGVkLgorICAgICAgLSBbUEFUQ0ggMTU2NTI5M106IFVEUElQdjYgdHJhbnNwb3J0IHJlcG9ydHMgd3JvbmcgcG9ydCBudW1iZXIKKyAgICAgIC0gcmVuYW1lIGluaXRfbWliIHRvIG5ldHNubXBfaW5pdF9taWIgdG8gYXZvaWQgc3ltYm9sIGNsYXNoIHdpdGgKKwlIUC1VWCdzIGxpYm5tCisgICAgICAtIFtQQVRDSCAxNTA5OTQzXTogcmVzcG9uc2VzIHdpbGwgZ2V0IHNlbnQgZnJvbSB0aGUgb3JpZ2luYWwgZGVzdCBJUAorCWFkZHJlc3Mgd2hlbiBwb3NzaWJsZS4KKworICAgIHNubXBkOgorICAgICAgLSBbUEFUQ0ggMTU1MDcyNV06IEEgbmV3IHVpbnQgaW5zdGFuY2UgaGVscGVyIHRvIG1hdGNoIHRoZSBleGlzdGluZworCWludCwgbG9uZyBhbmQgdWxvbmcgaGVscGVycworICAgICAgLSBbQlVHIDE1Mjc5MzBdOiBmaXggc211eCBhdXRoZW50aWNhdGlvbgorICAgICAgLSBbUEFUQ0ggMTU2MTI3N106IHVzZSBuZXQuaXB2Ni5uZWlnaC5sby5iYXNlX3JlYWNoYWJsZV90aW1lX21zCisJaW5zdGVhZCBvZiBkZXByZWNhdGVkIGJhc2VfcmVhY2hhYmxlX3RpbWUKKyAgICAgIC0gW0JVRyAxNDc0NDY4XTogaWZDb25uZWN0b3JQcmVzZW50IGFsd2F5cyByZXR1cm5zIDAKKyAgICAgIC0gW1BBVENIIDE1MjQ3NTVdOiB0byBiZXR0ZXIgc3VwcG9ydCB0aGUgVURQVGFibGUgZm9yIHVua25vd24gYWRkcmVzcworCXR5cGVzCisgICAgICAtIFtQQVRDSCAxNTM0ODc3XTogdG8gYWRkIHN1cHBvcnQgZm9yIHNraXBwaW5nIE5GUyBlbnRyaWVzIGluIHRoZQorCWhvc3QgcmVzb3VyY2VzIGhyU3RvcmFnZVRhYmxlLglTZWUgdGhlIHNraXBORlNJbkhvc3RSZXNvdXJjZXMKKwl0b2tlbiBpbiB0aGUgc25tcGQuY29uZiBmaWxlIGZvciBkZXRhaWxzLgorICAgICAgLSBbUEFUQ0ggMTU1NzUxNCBdOiBEbyBub3QgYXR0ZW1wdCB0byBjb2xsZWN0IGRhdGEgZHVyaW5nIFNFVAorCXByb2Nlc3NpbmcuCisgICAgICAtIFtCVUcgMTUzNTkwM106IFN1cHBvcnQgc3BhY2VzIHdpdGhpbiBzZWN1cml0eSBuYW1lcworICAgICAgLSBBZ2VudCBidWlsZHMgZGVmYXVsdCBtb2R1bGUgbGlzdCBmcm9tIGEgZGVmYXVsdF9taWJzLmggcmF0aGVyIHRoYW4KKwlhIGhhcmQgY29kZWQgY29uZmlndXJlIGxpc3QKKyAgICAgIC0gW0JVRyAxNTU5MzU4XTogY2hlY2sgc2NhbmYgcmVzdWx0cyBmb3IgZGlza2lvIHNjYW5uaW5nCisgICAgICAtIFtCVUcgMTU2NDIzM106IEhhdmUgY29uZmlndXJlIHRlc3QgZm9yIHJwbSBoZWFkZXJzIG5vdCBqdXN0IHRoZQorCWxpYnJhcmllcworICAgICAgLSBbUEFUQ0ggMTU3OTM2NF06IFVwZGF0ZWQgZGFyd2luIHBhdGNoIHRvIGZpeCBjb21waWxhdGlvbiBvbiBUaWdlcgorCWFuZCBMZWFwb3JkCisgICAgICAtIFtQQVRDSCAxNTY1NzAzXTogcGF0Y2ggdG8gZml4IHJhcGlkIHJlZ2lzdHJhdGlvbnMvZGVyZWdpc3RyYXRpb24KKwlpc3N1ZXMKKyAgICAgIC0gW1BBVENIIDE1NjI2ODhdOiBmaXggcGluZy9yZWF0dGFjaCBhZ2VudHggY29kZQorICAgICAgLSBbUEFUQ0ggMTU1MTk0OF06IE1ha2UgcGFzc19wZXJzaXN0IHVzYWJsZSBvbiB1Q2xpbnV4CisgICAgICAtIFtQQVRDSCAxNTY4MTUwXTogRXh0ZW5kIHBhc3NfcGVyc2lzdCBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZQorCXBhc3NlZCBiYWNrIGZyb20gdGhlIHNjcmlwdAorICAgICAgLSBbUEFUQ0ggMTU3MDY1MF06IG1ha2UgZGVsZXRlIHRhYmxlIGZ1bmN0aW9uIHB1YmxpYworICAgICAgLSBbUEFUQ0ggMTU3NTk4NF06IGJsb2NrIFNJR0hVUCBkdXJpbmcgcmVjb25maWcKKyAgICAgIC0gW1BBVENIIDE1NzA5ODIgXTogU29sYXJpcyBJRi1NSUI6IFN1cHBvcnQgZm9yIElQdjYtb25seSBpbnRlcmZhY2VzCisgICAgICAtIG1lbVRvdGFsRnJlZSBzaG91bGQgcmVwb3J0IHRvdGFsIHZpcnR1YWwgaW5zdGVhZCBvZiBwaHlzaWNhbCBtZW1vcnkKKyAgICAgIC0gYnVpbGQgZml4IGZvciAtLXdpdGhvdXQta21lbS11c2FnZQorICAgICAgLSBbQlVHIDE1ODU4MTVdOiBmaXggbWZkIGJpdHMgbGVuZ3RoIGNhbGN1bGF0aW9uCisgICAgICAtIFtCVUcgMTQyNzQxMF06IFNldCBhdXRoIGVuZ2luZUlEIGZvciBTTk1QdjMgdHJhcHMuCisgICAgICAtIFtCVUcgMTUwMjI2N106IEJ1aWxkIGFjY2VzcyBsaXN0IGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgLSBbUEFUQ0ggMTU1NDgyN106IGZyb20gcnR5bGU6IGZpeCBoYW5kbGluZyBvZiBmYWlsZWQgcHJveHkgU0VUCisJcmVxdWVzdHMKKyAgICAgIC0gW1BBVENIIDE1OTg5NjZdOiBGaXggYnVnICMxNTk4OTI3OiAjZWxpZiBidWlsZCBmaXgKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gdGhlIHRyYXBoYW5kbGUgZGlyZWN0aXZlIG5vdyBzdXBwb3J0cyBhIC10IHN3aXRjaCB0byBpbmRpY2F0ZQorCW1hdGNoaW5nIGFueSBPSUQgaW4gdGhlIHRyZWUgYmVsb3cgdGhlIHNwZWNpZmllZCBPSUQKKyAgICAgIC0gW1BBVENIIDE1MzY3NzNdOiBzdXBwb3J0IHBhcnRpYWwgb2lkIG1hdGNoaW5nCisgICAgICAtIFtQQVRDSCAxNTk4OTY4XTogRml4IGJ1ZyAjMTU4Nzc1OTogc25tcHRyYXBkIGRvZXNuJ3QgcmVjb2duaXplIC1BCisJb3B0aW9uCisKKyAgICBzbm1wZGY6CisgICAgICAtIFtCVUcgMTUxNTUwN106IEhhbmRsZSBmYWlsZWQgcmVxdWVzdHMgYmV0dGVyCisKKyAgICBwZXJsOgorICAgICAgLSBGaXhlZCB0aGUgcGVybCBidWxrd2FsayBmdW5jdGlvbgorICAgICAgLSBbUEFUQ0ggMTU3NTkzN106IGZpeCB1c2VudW1lcmljIG91dHB1dCBpbiBhc3luYyB2YXJiaW5kcyBzbyB0aGV5CisJcmV0dXJuIE9JRHMgaW5zdGVhZCBvZiBlbXB0eSBzdHJpbmdzLgorICAgICAgLSB1cGRhdGUgZGVmYXVsdF9zdG9yZSBtb2R1bGUgdG8gbGF0ZXN0IGRlZmF1bHRfc3RvcmUgYy1iaW5kaW5nCisJdG9rZW5zCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIFNvbGFyaXMgMi42IGFuZCBlYXJsaWVyCisgICAgICAtIGZpeGVzIGZvciA2NC1iaXQgcGxhdGZvcm1zCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIEhQLVVYCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIElSSVgKKyAgICAgIC0gW1BBVENIIDI5OTUwOThdOiBGaXggY3JlYXRpb24gb2YgU05NUHYzIHNlc3Npb25zIHdpdGggQVBJX1NJTkdMRQorICAgICAgLSBwYXRjaCAzMDQ2MzcxOiBmcm9tIGNocmlzdG9waGI0OiBGaXggbWVtb3J5IGxlYWsgaW4gU05NUHYxIHRyYXAKKwloYW5kbGluZy4KKworICAgIG1pYjJjOgorICAgICAgLSBbQlVHIDE0Nzk5MTZdOiBSZXN0b3JlIGNvbnNpc3RlbmN5IGluIHJvdyBjcmVhdGlvbiBjb2RlLgorICAgICAgLSBbQlVHIDI4MjcyNjldOiBTdXBwcmVzcyBub24tb3JkZXJlZCBUT0RPIGNvbW1lbnRzLgorCisgICAgbWlzYzoKKyAgICAgIC0gTW9zdCBuZXQtc25tcCBzcGVjaWZpYyBkZWZpbmVzIGFyZSBub3cgKGFsc28pIGF2YWlsYWJsZSB1bmRlciBhCisJcHJvcGVyIE5FVFNOTVBfIHByZWZpeC4gVGhlIG9sZGVyLCBwb3RlbnRpYWxseSBjb25mbGljdGluZyBuYW1lcyBhcworCXdlbGwgYXMgdGhlIGF1dG9jb25mIHZhcmlhYmxlcyBjYW4gbm93IGJlIHR1cm5lZCBvZmYgYnkgYSBzcGVjaWFsCisJZGVmaW5lLgorICAgICAgLSBbQlVHIDE1ODUyNTBdOiBkb24ndCB1c2UgZGVwcmVjYXRlZCBvcHRpb25zIGluIHN0YXJ0IHNjcmlwdAorICAgICAgLSAibWFrZSB0ZXN0IiBmaXhlcyBmb3Igbm9uLVVEUCB0cmFuc3BvcnRzCisgICAgICAtIFtCVUcgMTU3NzkxM106IGFkZCBtaXNzaW5nIG1hbnVhbCBwYWdlcyBmb3IgZXhlY3V0YWJsZXMsIHN1cHBsaWVkCisJYnkgRGViaWFuCisgICAgICAtIFtQQVRDSCAxNTk2MDI4XTogZnJvbSAiU3RlcGhlbiBKLiBGcmllZGwiOiBjb25zdCBmaXhlcyBmb3IgdGhlCisJbWliX2FwaSgzKSBtYW51YWwgcGFnZQorICAgICAgLSBSUE0gc3BlYyBmaWxlIGZpeGVzIGZvciA2NC1iaXQgcGxhdGZvcm1zCisKKyAgICBNYWNPU1g6CisgICAgICAtIFtQQVRDSCAxNTY2Nzc3XTogYnVpbGQgZml4ZXMgZm9yIG1lbW9yeV9kYXJ3aW4uYworICAgICAgLSBidWlsZCBmaXggZm9yIG1pYklJL3VkcFRhYmxlCisKKyAgICBUcnU2NDoKKyAgICAgIC0gZml4ICJhdXRvX25saXN0IGZhaWxlZCBvbiBhcnB0YWJfc2l6ZSBhdCBsb2NhdGlvbiAwIiBlcnJvcnMKKworICAgIElSSVg6CisgICAgICAtIHByb3BlciBpbXBsZW1lbnRhdGlvbiBmb3IgVUNELVNOTVAtTUlCOjpsYVRhYmxlIChhdm9pZGluZyBubGlzdCkKKworICAgIFNvbGFyaXM6CisgICAgICAtIFtQQVRDSCAxNTY5NTM3LDE1Njk1MzldOiBuZXcgVURQLU1JQiBhbmQgVENQLU1JQiBpbXBsZW1lbnRhdGlvbgorCShlbmFibGUgdGhyb3VnaCAtLXdpdGgtbWliLW1vZHVsZXM9dWRwLW1pYix0Y3AtbWliKQorCisgICAgQUlYOgorICAgICAgLSB1c2UgY29ycmVjdCBBUlBUQUJfU1lNQk9MIGFuZCBBUlBUQUJfU0laRV9TWU1CT0wKKyAgICAgIC0gW0JVRyAxMjA1MzAwXTogbmxpc3QgZXJyOiBuZWl0aGVyIG5wcm9jIG5vciBfbnByb2MgZm91bmQgKHNhbWUgZm9yCisJcnRfdGFibGUsIHJ0aGFzaHNpemUsIHJ0aG9zdCwgcnRuZXQpCisKKyAgICBxbng2OgorICAgICAgLSBbUEFUQ0ggMjgzNjg5NV06IHN1cHBvcnQgZm9yIFFOWDYKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCmluZGV4IDI2ZGI2MDYuLjNlZWY0NDAgMTAwNjQ0Ci0tLSBhL0NPUFlJTkcKKysrIGIvQ09QWUlORwpAQCAtMjI5LDMgKzIyOSw5OSBAQAogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKKy0tLS0gUGFydCA4OiBBcHBsZSBJbmMuIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0ICAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAgCithcmUgbWV0OgorCisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgIAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgIAorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgIAorZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkICAKK3dpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YgaXRzICAKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCAgCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgIAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgIAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgIAorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgIAorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsICAKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgIAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiAgCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EICAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCAgCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GICAKK1NVQ0ggREFNQUdFLgorCistLS0tIFBhcnQgOTogU2NpZW5jZUxvZ2ljLCBMTEMgY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDksIFNjaWVuY2VMb2dpYywgTExDCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisgCisqICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorKiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgCisqICBOZWl0aGVyIHRoZSBuYW1lIG9mIFNjaWVuY2VMb2dpYywgTExDIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKKy0tLS0gUGFydCAxMDogSUVURiBjb3B5cmlnaHQgbm90aWNlIChCU0QpIC0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMyBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucyBpZGVudGlmaWVkIGFzIGF1dGhvcnMgb2YKK3RoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKK8K3IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKK8K3IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCivCtyBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVybmV0IFNvY2lldHksIElFVEYgb3IgSUVURiBUcnVzdCwgbm9yIHRoZQorbmFtZXMgb2Ygc3BlY2lmaWMgY29udHJpYnV0b3JzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyDigJxBUworSVPigJ0gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSCitPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMWRmMDIwYy4uZTY1YjE4YyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwxMDUgKzEsMzAyMzUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNoYW5nZXM6IFY1LjQuMyAtPiBWNS40LjQKKyMgLSotIHRleHQgLSotCiAKLTIwMTEtMDYtMjQgMTI6MzggIGR0czEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CitDaGFuZ2VzOiBWNS43LjMucHJlNSAtPiBWNS43LjMucmMxCiAKLSAgIE1pc3NpbmcgY2hlY2sgZm9yIHJwbXRzLmgKK2NvbW1pdCA4ZmM3NTE0YjU5ZGM0NmI4ZjNlMzZjODFhOTJhZjAwOGRjOGRjMTg4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDEgMDk6NTk6MjYgMjAxNCAtMDcwMAogCi0yMDExLTA2LTI0IDEyOjIwICBkdHMxMgorICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5yYzEKKworY29tbWl0IDNlYTUxNDQyM2Q5MzczYWY3N2NiYzRiODMzNmIxNzAxNDM4NjQzODkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMzAgMjM6MTI6NDAgMjAxNCAtMDcwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTctcGF0Y2hlcworCitjb21taXQgYWJiN2YyZWVjMTczYzhkMjYyYmY2ZWYxYjdkZWI1YjcwODM5ZDE1ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAzMCAyMzoxMjozOSAyMDE0IC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnJjMQorCitjb21taXQgYmNhYWI0OGQ5ZDQ5ODM2MWZkZDQ1MTY1Mjc3M2IzYjk1NmM3ZjEwYworQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CitEYXRlOiAgIFRodSBTZXAgMjUgMDk6MzY6MDAgMjAxNCAtMDQwMAorCisgICAgcmVtb3ZlIGJhZCBhc3NlcnQgY2hlY2sKKworY29tbWl0IDVkMWVjZjZkMTU5MWE1M2U3MTFjNWZlZWExNThkMTBkZDkwZmFiM2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMSAxNDo0Njo1MCAyMDE0ICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogUG9ydCBUMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYyB0byBNaW5HVworCitjb21taXQgYWY4YzE3ZTY0ODJjYjU1MjA2YzUwMjcwOTgzNjZmNjBhZDhmN2NjNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIFNlcCAxIDEzOjI0OjE4IDIwMTQgKzAyMDAKKworICAgIENIQU5HRVM6IEJVRzogMjU2ODogQXZvaWQgdGhhdCBmaWxlIGRlc2NyaXB0b3JzIGFib3ZlIEZEX1NFVFNJWkUgdHJpZ2dlciBhYm9ydCgpCisKK2NvbW1pdCA0MjI0Y2FiY2IxMTJkMGQ0MzdmOWNhOWY0ZDM0MzA1MDFkMWM4NzUwCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDIyIDA2OjQ5OjI4IDIwMTQgLTA3MDAKKworICAgIFdoZW4gZW5sYXJnaW5nIGEgbGFyZ2VfZmRfc2V0LCB1c2UgRkRfWkVSTyBpZiBwb3NzaWJsZQorICAgIAorICAgIFRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIGNyZWF0aW5nIGEgbGFyZ2VfZmRfc2V0IG9uIFVOSVgKKyAgICBpcyB0byBjcmVhdGUgaXQgd2l0aCBzaXplIHplcm8sIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGVubGFyZ2UKKyAgICBpdCB0byBzaXplIEZEX1NFVFNJWkUuICBJbnN0ZWFkIG9mIGxvb3BpbmcgYW5kIGNhbGxpbmcKKyAgICBGRF9DTFIoKSwgd2UgY2FuIG9wdGltaXplIHRoaXMgY29tbW9uIGNhc2Ugd2l0aCB0aGUgT1MncworICAgIEZEX1pFUk8uCisKK2NvbW1pdCAzNTI0YTkyZjIyN2ViM2U3MzY5MDhiMWYxZjUyNWRhMmRjOTQ5ZDIyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSmFuIDIzIDE3OjQyOjQxIDIwMTAgKzAwMDAKKworICAgIEZpeGVkIGEgU29sYXJpcy1zcGVjaWZpYyBjb21waWxlciB3YXJuaW5nLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE4MDI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgOTU0ZWE0ZDcwODQwYWE1Zjc1M2EwNmU1ZGY3NjUyYjI1OGQ5MjA0MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDIxIDA4OjAxOjQzIDIwMTAgKzAwMDAKKworICAgIEVuc3VyZSB0aGF0IGZkc2V0IHN0cnVjdHVyZSBpcyByZXNpemVkIHN1ZmZpY2llbnRseQorICAgIHRvIGFjY29tb2RhdGUgdGhlIHNwZWNpZmllZCBzb2NrZXQgSUQuCisgICAgUHJvYmxlbSByZXBvcnRlZCBieSBTaGl5YWxlaS4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTA2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDNkYTBjMzc4YjVjYjFiYmYzNWQwNWE2MjEyYTQ4M2FiZGE4NGEyMDEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMSAwODo1OTowNCAyMDE0ICswMjAwCisKKyAgICBGaXggY29tbWl0IDdmNGE3Yjg5MTMzMjg5OWNlYTI2ZTk1YmUwMzM3YWFlMDE2NDg3NDI6IGRvbnQgbWl4IGNvZGUgYW5kIGRlY2xhcmF0aW9ucy4KKworY29tbWl0IDA4MzdiMjFlNzk4YTk4NTZjMGE5ZjQzOGVjNDRhODNiZWQxZjg1MzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBBdWcgMjkgMDg6MTg6MjAgMjAxNCArMDIwMAorCisgICAgRW1wdHkgaW5pdGlhbGl6ZXJzIGFyZSAoc2FkbHkpIG5vdCBwYXJ0IG9mIEMuCisgICAgU3RvcCB1c2luZyB0aGVtLgorCitjb21taXQgNWU0ZjZlM2Y0MzAzNWE2ODljOWZhMjg5MDI3ZWVkNjBhMjJkYmZhZgorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyAyOCAxMjoxMjoyMSAyMDE0IC0wNDAwCisKKyAgICBBZGQgYSBkZWJ1ZyBtZXNzYWdlIHdoZW4gc2tpcHBpbmcgYSBrZXkKKworY29tbWl0IGU1NzA2MTUwYzQ1MzJkN2ZjMTgzMjcxODU2OGJiNTBiYjBmZmMwMWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDMxIDE1OjQ0OjMxIDIwMTQgKzAyMDAKKworICAgIEFkZGVkIHRlc3QgZm9yIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlIHdpdGggLU9RIGNtZGxpbmUgYXJndW1lbnQuCisKK2NvbW1pdCA3ZjRhN2I4OTEzMzI4OTljZWEyNmU5NWJlMDMzN2FhZTAxNjQ4NzQyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAzMSAxMzo0Njo0OSAyMDE0ICswMjAwCisKKyAgICBBZGRlZCBjaGVja3MgZm9yIHByaW50aW5nIHZhcmlhYmxlcyB3aXRoIHdyb25nIHR5cGVzLgorICAgIAorICAgIFdoZW4gLU9RIGNvbW1hbmQgbGluZSBhcmd1bWVudCBpcyB1c2VkLCB2YXJpYWJsZSBmb3JtYXR0ZXIgcHJlZmZlcnMgdGhlIHR5cGUKKyAgICBvZiB0aGUgdmFyaWJsZSBwYXJzZWQgZnJvbSBhIE1JQiBmaWxlIGluc3RlYWQgb2YgY2hlY2tpbmcgdHlwZSBvZiB0aGUgdmFyaWFibGUKKyAgICBhcyBwYXJzZWQgZnJvbSBTTk1QIG1lc3NhZ2UuCisgICAgCisgICAgVGhpcyBjYW4gbGVhZCB0byBjcmFzaGVzIHdoZW4gaW5jb21pbmcgcGFja2V0cyBjb250YWlucyBhIHZhcmlhYmxlIHdpdGgKKyAgICBOVUxMIHR5cGUsIHdoaWxlIHRoZSBNSUIgc2F5cyB0aGUgdmFyaWFibGUgc2hvdWxkIGJlIG5vbi1OVUxMLCBsaWtlIEludGVnZXIuCisgICAgVGhlIGZvcm1hdHRlciB0aGVuIHRyaWVzIHRvIGludGVycHJldCB0aGUgTlVMTCAoZnJvbSBwYWNrZXQpIGFzIEludGVnZXIgKGZyb20KKyAgICBNSUIgZmlsZSkuCisKK2NvbW1pdCA5YzRkZGNhOTYwODJjMTM5Y2ZjZTkyOGVlYTNjZmU3OTNkMzRmNWMyCitBdXRob3I6IEplZmYgR2VobGJhY2ggPGplZmZnQG9wZW5ubXMub3JnPgorRGF0ZTogICBUaHUgSnVsIDMxIDExOjUyOjE4IDIwMTQgLTA0MDAKKworICAgIEFkZCBhIHNjYWxhciBvYmplY3QgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgc2VlbiBieSB0aGUgYWdlbnQuIFBsYWNlZCB0aGlzIGluIHRoZSBzeXN0ZW1TdGF0cyBncm91cCBmb3IgbGFjayBvZiBhbiBvYnZpb3VzbHkgYmV0dGVyIGxvY2F0aW9uLiBVcGRhdGVkIFVDRC1TTk1QLU1JQiBhY2NvcmRpbmdseS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDY2NGVkOTQzZjYzZGZlOTM5M2U5NTk4NDBlY2QyM2MzMWM5ZDhmODkKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFdlZCBBdWcgMjcgMTY6MDI6NTcgMjAxNCAtMDQwMAorCisgICAgSGFuZGxlIGR1cGxpY2F0ZXMgaW4gYSBiaW5hcnlfYXJyYXkgY29udGFpbmVyCisgICAgCisgICAgVGhlIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyBzZXR0aW5nIGlzIGZ1bmRhbWVudGFsbHkgZmxhd2VkOworICAgIGl0IHJlYWxseSBlZmZlY3RpdmVseSBtZWFudCAiSSBwcm9taXNlIEkgd29uJ3QgaW5zZXJ0IGR1cGxpY2F0ZXMKKyAgICBzbyBkb24ndCBjaGVjayBhdCBpbnNlcnQgdGltZSIuICBIb3dldmVyLCB0aGUgaXAtZm9yd2FyZC1taWIKKyAgICBzZXRzIHRoaXMgZmxhZyBidXQgcmVsaWVzIG9uIHRoZSBkdXBsaWNhdGUgcHJldmVudGlvbiBhdCBpbnNlcnQKKyAgICB0aW1lIHVuZGVyIGNlcnRhaW4gc2NlbmFyaW9zIChlLmcuLCBtdWx0aXBsZSBhdHRhY2htZW50cyB0byB0aGUKKyAgICBzYW1lIHN1Ym5ldCBvbiBNYWNPUyksIHJlc3VsdGluZyBpbiBhIGxvb3AgaW4gaXAtZm9yd2FyZC1taWIKKyAgICBpbiB0aGVzZSBzY2VuYXJpb3MuICBTbywgbm93IGl0IG1lYW5zICJjaGVjayBmb3IgZHVwbGljYXRlcyBhdAorICAgIGdldG5leHQgdGltZSIgLSB0aGUgYmluYXJ5IHNlYXJjaCB3aWxsIGZpbmQgYW4gYXJiaXRyYXJ5IG9uZQorICAgIG9mIHRoZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUga2V5LCBhbmQgd2hlbiB3ZSd2ZSBpbmNyZW1lbnRlZAorICAgIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciBvciBub3Qgd2UndmUgYWN0dWFsbHkgaW5jcmVtZW50ZWQgcGFzdAorICAgIGFueSBkdXBsaWNhdGVzLiAgVGhpcyBjb3N0cyBhbiBleHRyYSBrZXkgY29tcGFyZSBwZXIgZ2V0bmV4dC4KKyAgICAKKyAgICBJZiB0aGVyZSdzIGEgc2NlbmFyaW8gaW4gdGhlIGZ1dHVyZSB3aGVyZSBhIE1JQiBpbXBsZW1lbnRhdGlvbgorICAgIGNhbiByZWFsbHkgZ3VhcmFudGVlIHRoYXQgaXQgaXNuJ3QgaW5zZXJ0aW5nIGR1cGxpY2F0ZXMsIHdlCisgICAgbWlnaHQgd2FudCB0byBhZGQgYSAiQ09OVEFJTkVSX0tFWV9JX1BST01JU0VfSV9XT05UX0lOU0VSVF9EVVBMSUNBVEVTIiwKKyAgICB0aGF0IGRpc2FibGVzIHRoZSBpbnNlcnRpb24gY2hlY2sgYnV0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgZ2V0bmV4dAorICAgIGNoZWNrLgorCitjb21taXQgZjgyZDJkNjM0OTNmNDA3OWMxNjdiYTM2YjIwM2U0OWNkYTNiZGU4ZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOCAyMTo1NTowNCAyMDE0ICswMjAwCisKKyAgICBGaXggZm9yIEZyZWVCU0Q5IGxvc2luZyBtaWItbW9kdWxlcyBsaXN0IGJlY2F1c2Ugb2YgbWlzc2luZyBOTCBpbiBzZWQgaW5wdXQuCisKK2NvbW1pdCA1MmIwNzJiY2ZmMzJlMzUxMmZiZjk1NmI3MmQxYTM1M2U1MGE5NjJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDE4IDIxOjUzOjM4IDIwMTQgKzAyMDAKKworICAgIFVwZGF0ZXMgZm9yIEJGRCBtaWJzLgorCitjb21taXQgMDNkYjY3YjMyMmQ3NmQ3MTdiZTE3YTg3ZTc3N2M5MWRkMGZkZDNhYworQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAxMiAyMzo1NTowNyAyMDE0IC0wNDAwCisKKyAgICBJZiBzZGxfYWxlbiBpcyB0b28gbG9uZyBmb3IgdGhlIHN0YXRpYyBidWZmZXIsIGNhbGwgaXQgaW5jb21wbGV0ZSBpbnN0ZWFkIG9mIG92ZXJydW5uaW5nIHRoZSBidWZmZXIKKworY29tbWl0IDhhZTc4ZGEzOTFkNWI2YjYxY2MyNTE2ZWIxYTY1MjBiMGRhYmI2YmYKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTIgMjI6NTU6NDUgMjAxNCAtMDQwMAorCisgICAgVXNlIHZtX3JlZ2lvbl82NCBvbiA2NC1iaXQgYXJjaDsgY2FjaGUgbWVtb3J5IGZvciBsb25nZXIKKyAgICAKKyAgICBUaGlzIGlzIGEgcG9ydCBvZiB0aGUgQXBwbGUgcGF0Y2hlcyBhdAorICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL25ldF9zbm1wL25ldF9zbm1wLTE0MC4xL3BhdGNoZXMvZGFyd2luNjQucGF0Y2gKKyAgICAxLiBVc2Ugdm1fcmVnaW9uXzY0IGluc3RlYWQgb2Ygdm1fcmVnaW9uIG9uIF9fcHBjNjRfXyBvciBfX3g4Nl82NF9fCisgICAgMi4gVXNlIDMwMCBzZWNvbmQgdGltZW91dCBmb3IgdGhlIGNhY2hlLgorICAgIAorICAgIFRoaXMgY29tbWVudCBhYm91dCB0aGUgY29kZSBiZWluZyBpbmNyZWRpYmx5IGV4cGVuc2l2ZSBpcworICAgIHZlcnkgdHJ1ZTogb24gYSAxLjcgR0h6IGk3IHdpdGggOCBHQiBvZiBSQU0gKGFkbWl0dGVkbHkgYQorICAgIHNtYWxsIG1hY2hpbmUpIGl0IHRvb2sgMTcgc2Vjb25kcyB0byBjYWxjdWxhdGUgYW5kCisgICAgcmV0dXJuIEhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJNZW1vcnlTaXplLjAuICBNb3N0IFNOTVAKKyAgICBjbGllbnRzIHdvdWxkIGdpdmUgdXAgbG9uZyBiZWZvcmUgZ2V0dGluZyB0aGlzIGFuc3dlci4KKworY29tbWl0IDYxM2U5MzcwNGJhOTVmM2M2NDQwMTE0ZWI3M2JmMDlmNzc3NTU2MGUKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTIgMjI6MzQ6MDYgMjAxNCAtMDQwMAorCisgICAgZGFyd2luMTMgYWxzbyB1c2VzIGtlcm5lbF9zeXNjdGwKKworY29tbWl0IGMxM2RkOTdkN2JkZGU3MzAyZDAwMjc4N2VlZjAzZDc3MmYyOWJjZDQKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTIgMTI6MzA6MjMgMjAxNCAtMDcwMAorCisgICAgVXNlIHRoZSByaWdodCBoZWFkZXIgZ3VhcmQuCisgICAgCisgICAgQmVsaWV2ZSBpdCBvciBub3QsIGNsYW5nIGZvdW5kIHRoaXMgZGV0YWlsIHdpdGggLVdoZWFkZXItZ3VhcmQuCisKK2NvbW1pdCBkNWQ0MDMwMmIwYWIzNDBlMjExYWQ3NmQ3ZjE5NWI4MDdmMzg3ZWYzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDExIDEyOjMzOjUwIDIwMTQgLTA3MDAKKworICAgIHVwZGF0ZSB0byBuZXcga2V5IElECisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4zLnByZTQgLT4gVjUuNy4zLnByZTUKKworY29tbWl0IGYzZjM3MWIyNzZkMjY1YjQ1NWZjNDkwZmNlMTk0N2RhZGY4OWU5YzIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgOCAxOTo0OTowNiAyMDE0IC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucHJlNQorCitjb21taXQgNDE4MTMyZjQzY2M0MzIzMTk2NmE4Yjk2NzJjNjI2ZjYwYjk5MTAzOQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyA4IDE0OjI0OjUyIDIwMTQgLTA3MDAKKworICAgIGZpeCB0aGUgcnVuLWF1dG9jb25mIHByb2dyYW0KKworY29tbWl0IDdkYjc5NTk0OTA3NWVmYjQ4OTM3M2Y1MWY3MDY2MzZmZTU0YTk4MzUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgOCAxNDoyNDo1MiAyMDE0IC0wNzAwCisKKyAgICBmaXggdGhlIHJ1bi1hdXRvY29uZiBwcm9ncmFtCisKK2NvbW1pdCA3OGYxZWY4MTZkZGFkMDhlN2Q3YzllMWIxMWU0YjRhYjI2ZjZlNGIwCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTM6Mjg6NDcgMjAxNCAtMDcwMAorCisgICAgdXNlZCB0aGUgcmlnaHQgYXV0b2NvbmYKKworY29tbWl0IDFlYWVhYzgwMWEzNjI1YjcyYjA5YzdkYTU4MDM4NDA5Y2Q4ZGM2ODEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgOCAxMzoyNjoxMSAyMDE0IC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnByZTUKKworY29tbWl0IDdlY2ZkM2VkZTE5ZTljMjIxOGM5YmY1OTU5YzA5NWNlOWZhNmM4YWIKK0F1dGhvcjogQnJpYW4gU2lwb3MgPGJzaXBvc3JrZkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgNiAxMDozMDo1NCAyMDE0IC0wNzAwCisKKyAgICBGaXggZGV0ZWN0aW9uIG9mIHNoYTIyNCBhbmQgc2hhMzg0LCBwYXRjaCBmcm9tIEJyaWFuIFNpcG9zCisgICAgCisgICAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9idWdzLzI1NjQvCisgICAgCisgICAgTHVja2lseSBub2JvZHkncyBuZWVkZWQgdG8gYnVpbGQgdXNpbmcgYW4gT3BlblNTTCB2ZXJzaW9uCisgICAgdGhhdCBkb2Vzbid0IHN1cHBvcnQgc2hhMjI0IG9yIHNoYTM4NCwgc2luY2UgdGhlIGludmVyc2lvbgorICAgIG9mIHRoZSB0ZXN0IGhlcmUgd291bGQgdHJ5IHRvIHVzZSBzaGEyMjQvc2hhMzg0IHN1cHBvcnQgb25seQorICAgIG9uIE9wZW5TU0wgdmVyc2lvbnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0hCisKK2NvbW1pdCBhOTM5OTFlYWY1M2IxOTliMTljNTgyYjYzMGRhMjUxNTgzMDBhOWQxCitBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGxvY2FsaG9zdD4KK0RhdGU6ICAgRnJpIEF1ZyAxIDEwOjA3OjQ1IDIwMTQgLTA0MDAKKworICAgIGZpeCAjMjQ4MiBzbm1wIHJlc3BvbnNlOiBUb28gbG9uZworCitjb21taXQgOWY0MWQzMGIwOWU3Yzg1YjgyNjgxMDNjYTMyMGFjNmNjMzJkNWIwNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1bCAyNiAwODoyODo0MyAyMDE0ICswMjAwCisKKyAgICBGaXggYnVnIDI1NDY6IG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbCB1c2VzIHdyb25nIHBvcnQgZm9yIHNubXB0cmFwICsgdWRwNgorCitjb21taXQgZGIxZjIxNzU0MWUwMGI1MzgxM2Q5NGY2YmVmYjlhNDJkNDgzOGU5NQorQXV0aG9yOiBKZWZmIEdlaGxiYWNoIDxqZWZmZ0BvcGVubm1zLm9yZz4KK0RhdGU6ICAgRnJpIEp1bCAyNSAxNjoxMToyMyAyMDE0IC0wNDAwCisKKyAgICBGaXggYnVnIDI1NjI6IFdpbmRvd3MgeDY0IGJ1aWxkIGJyb2tlbiBvbiA1LjcuMy5wcmU0CisKK2NvbW1pdCA5NzQxZjA4ZTc1YjQxNjJiYjNjOGI0NDkyNzlmMTgyZDk0OWRhMzczCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUaHUgSnVsIDI0IDA4OjEwOjQwIDIwMTQgLTA0MDAKKworICAgIFVzZSB0aGUgc3RhbmRhcmQgZXhwciAiOiIgc3ludGF4CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4zLnByZTMgLT4gVjUuNy4zLnByZTQKKworY29tbWl0IDg2NGFiYjViYTFlYjMyNGU0MjMxNTdkYjVmYjE3MjNmODU1OTczYjIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMjMgMTU6MDc6NDEgMjAxNCAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnByZTQKKworY29tbWl0IDVmYzhmOTljOWY3N2RkYWRlZWFjZWRhZTdmMDZmZWExNzY3ZDRhOWYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMjMgMTU6MDI6MTkgMjAxNCAtMDcwMAorCisgICAgZml4IEMrKyBzdHlsZSBjb21tZW50CisKK2NvbW1pdCA1NGE0YTkwYTU1MjllYTU4YWRkOWU2YWY2YTdlOGFkMDY1NDQwODI4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDIzIDE0OjQ5OjQxIDIwMTQgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucHJlNAorCitjb21taXQgYzBkNjY4MjZiNzFmMDU0MDNmMzZjN2Y4MjM0ZmY4ZjdlY2JkMTU5MAorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyMiAwNjo0OToyOCAyMDE0IC0wNzAwCisKKyAgICBXaGVuIGVubGFyZ2luZyBhIGxhcmdlX2ZkX3NldCwgdXNlIEZEX1pFUk8gaWYgcG9zc2libGUKKyAgICAKKyAgICBUaGUgbW9zdCBjb21tb24gY2FzZSBvZiBjcmVhdGluZyBhIGxhcmdlX2ZkX3NldCBvbiBVTklYCisgICAgaXMgdG8gY3JlYXRlIGl0IHdpdGggc2l6ZSB6ZXJvLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBlbmxhcmdlCisgICAgaXQgdG8gc2l6ZSBGRF9TRVRTSVpFLiAgSW5zdGVhZCBvZiBsb29waW5nIGFuZCBjYWxsaW5nCisgICAgRkRfQ0xSKCksIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNvbW1vbiBjYXNlIHdpdGggdGhlIE9TJ3MKKyAgICBGRF9aRVJPLgorCitjb21taXQgZGNhZDMxYWViNDQyMzY5YTZmYjUyZjRkYzdkNGY3ODFiYzU2MDA2YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxNyAyMzo0MDoxMyAyMDE0ICswMjAwCisKKyAgICBTb2xhcmlzIGRvZXMgbm90IGxpa2UgImdyZXAgLUUiIG9yICJpZiAhIi4KKyAgICBQcm9wYWdhdGUgY29uZmlndXJlcyBFR1JFUCB0byBtYW4vTWFrZWZpbGUuaW4gYW5kIGFsc28gdXNlZCBjb25maWd1cmVkIFNFRC4KKworY29tbWl0IGE1MWNiZWRmN2QxZDQyNDM0MmFiNWNhM2E0YjY3MjE3YTM2NDQwOWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMTUgMjE6NDU6NTQgMjAxNCArMDIwMAorCisgICAgc25tcG5ldHN0YXQvaWYuYzogcHJvcGVybHkgZGV0ZWN0IHNubXAgZXhjZXB0aW9ucworCitjb21taXQgZWVlOTI1MTlmMzhlOTM3ZjIyN2JlYTc3MDFkZGIxMTU3YzhiY2NjYworQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAxNSAwNzoyNzoxOCAyMDE0IC0wNzAwCisKKyAgICBDbG9zZSBwaXBlcyB3aGVuIGZyZWVpbmcgY29uZmlnIGFuZCBraWxsIGNoaWxkIHByb2Nlc3Mgb24gZXJyb3IKKyAgICAKKyAgICBXaGVuIGZyZWVpbmcgdGhlIGNvbmZpZywgY2xvc2UgdGhlIHBpcGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhhdAorICAgIGNvbmZpZywgc28gdGhleSBkb24ndCBnZXQgbGVha2VkLiAgQWxzbywgaWYgd2UgaGF2ZSBhbiBlcnJvciwKKyAgICBzZW5kIGEgU0lHS0lMTCB0byB0aGUgY2hpbGQgcHJvY2VzcyBpbiBjYXNlIGl0IGlzIGJsb2NrZWQgYW5kCisgICAgd29uJ3QgZGllIGp1c3QgYmVjYXVzZSB3ZSBjbG9zZWQgdGhlIHBpcGVzIHRvIGl0LgorCitjb21taXQgODQzMWY5MTM1NTRlMGNjY2M0OGJlZGNlMWZkNGE4YTI4OGI2YzI3ZAorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAxNSAwNzoxOTozMyAyMDE0IC0wNzAwCisKKyAgICBJZiB0aGUgYXNwIGxvb2t1cCByZXR1cm5zIE5VTEwsIGRvbid0IHRyeSB0byB1c2UgaXQKKyAgICAKKyAgICBJZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGFzcCwgd2Ugc2V0IHRoZSByZXN1bHQgcHJvcGVybHkKKyAgICBidXQgc3RpbGwgZmFsbCB0aHJvdWdoIGFuZCBhdHRlbXB0IHRvIHVzZSBpdC4gIEluc3RlYWQsIGp1c3QKKyAgICBjb250aW51ZS4KKworY29tbWl0IDE0NmZhMzg0ZDhiMDVlMWU1YTJjNjdmODhkMGVjYTBhMzA0ZmExZjAKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBKdWwgMTQgMTU6MjY6MTQgMjAxNCAtMDcwMAorCisgICAgRml4IGRlcGVuZGVuY2llcyBmb3IgYXV0by1nZW5lcmF0ZWQgbWFuIHBhZ2VzCisgICAgCisgICAgQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgYXV0by1nZW5lcmF0ZWQgLnNvIGZpbGVzIGFyZSBsaXN0ZWQKKyAgICBpbiB0aGUgcmlnaHQgTWFrZWZpbGUgdmFyaWFibGVzLCBhbmQgdXBkYXRlIHRoZSB2YXJpYWJsZXMKKyAgICB0byBpbmNsdWRlIHRoZSBvbmVzIHRoYXQgaGFkIGJlZW4gbGVmdCBvdXQgYWxyZWFkeS4KKworY29tbWl0IDQ0MzE3MjhjZjdhMDk1MGFlZDI5M2Q0OGMwMmU2OTAwMGY1YjgzZTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdWwgMTMgMDM6MDc6MjEgMjAxNCAtMDcwMAorCisgICAgQUlYOiBGaXggbW9yZSBjb21waWxlciB3YXJuaW5ncworICAgIAorICAgIEF2b2lkIHRoYXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3QsIGFib3V0CisgICAgdW51c2VkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMsIGFib3V0IG1pc3NpbmcgZnVuY3Rpb24gcHJvdG90eXBlcworICAgIGFuZCBhbHNvIGF2b2lkIHRoYXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyB0aGF0IHRoZSB0eXBlIG9mIHRoZQorICAgIHRoaXJkIGFyZ3VtZW50IG9mIG1udGN0bCgpIGlzIHdyb25nLgorCitjb21taXQgNDJhNjVmMTFlM2VkNTY5NjNmNzhhNWMxNTYxZWRkNjc2NThjY2QwMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1bCAxMyAwOTo0NzoyNiAyMDE0ICswMjAwCisKKyAgICBSZW1vdmUgQzk5IGxlbmd0aCBzcGVjaWZpZXIgJ3onIGFuZCB1c2UgYSBjYXN0IGluc3RlYWQKKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgYjRlYWIxMTEzOWViMTIyYzlhZDNjMTNhYjhiOTQ1M2UwNGU0Njg0Mi4KKworY29tbWl0IDM1ZDBmNTljZGQ4ODk0YjhmYmJhZDY1MzcwYjVlMzAxZTM3N2EzN2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKdWwgMTEgMjE6MjY6MzMgMjAxNCArMDIwMAorCisgICAgVXBkYXRlZCBET0NTLUlGLU1JQiByZWZlcmVuY2UKKworY29tbWl0IDdhNGQyZWEyYjNlMTYzZmRkOThmMDY3YWU0NDBmYWEzMTUyYzgwYzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKdWwgMTEgMjE6MjU6MjcgMjAxNCArMDIwMAorCisgICAgVXBkYXRlZCBJQU5BIG1pYnMKKworY29tbWl0IDAxYjNiNjY0NjQxM2MxNGEwNTA3NDI3MjZiOTdjZjMwOGI4ZmUwOWIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgOSAyMzo1MToyNyAyMDE0ICswMjAwCisKKyAgICBBZGQgUkZDIDcyNTcgdnBscyBtaWJzCisKK2NvbW1pdCBiMGJlMWQ4YWQyY2NiY2FhMjlmZmM3Y2Y4ODRkMDI0MzhjNGMxNjY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDkgMjM6NTA6MjEgMjAxNCArMDIwMAorCisgICAgYWRqdXN0IGRlYnVnIHRva2VuIGZvciBuZXRzbm1wX3NvY2thZGRyX2luNl8yCisKK2NvbW1pdCA5OTIwZTllNzY3YjEwZjAyOWFiNGIwMjBlODI1OTY3NmQxYTMyYjJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSnVsIDggMTA6MjU6MjIgMjAxNCArMDIwMAorCisgICAgQUlYOiBTdXBwcmVzcyBhIGNvbmZpZ3VyZSB3YXJuaW5nCisgICAgCisgICAgQXZvaWQgdGhhdCB0aGUgJ3NvcnQnIGNvbW1hbmQgY29tcGxhaW5zIGR1cmluZyB0aGUgY29uZmlndXJlIHByb2Nlc3MKKyAgICB0aGF0IGl0cyBpbnB1dCBpcyBub3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuIFNlZSBhbHNvIGNvbW1pdAorICAgIGE2M2UzODFkOWMxYzljODcyMTBiZjJiMDIyZTNkNmFjNzFkMjdhN2UuCisKK2NvbW1pdCBiNGVhYjExMTM5ZWIxMjJjOWFkM2MxM2FiOGI5NDUzZTA0ZTQ2ODQyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gSnVsIDcgMTQ6MDQ6NDUgMjAxNCAtMDcwMAorCisgICAgQUlYOiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKKyAgICAKKyAgICBBdm9pZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29tcGlsZXIgd2FybmluZ3MgYXJlIHJlcG9ydGVkOgorICAgIC0gQXNzaWdubWVudCBkaXNjYXJkcyBjb25zdC4KKyAgICAtIFVudXNlZCBsb2NhbCB2YXJpYWJsZS4KKyAgICAtIE1pc21hdGNoIGJldHdlZW4gZm9ybWF0IHN0cmluZyBhbmQgYXJndW1lbnQgbGlzdC4KKyAgICAKKyAgICBBbHNvIGNvcnJlY3QgdGhlIGluZGVudGF0aW9uIG9mIHR3byBTb2xhcmlzLXNwZWNpZmljIGNvZGUgc3RhdGVtZW50cy4KKworY29tbWl0IDBkZDI3ODNiNzQ3ZmI5NmQ3NDk3OGUxMWM4MmE1MDRjMGRmMWQ1NTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdWwgNiAxMToxMjozMCAyMDE0ICswMjAwCisKKyAgICBIUCBVWCwgQ1BVIHN0YXRpc3RpY3M6IEZpeCBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2UKKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMDAzNDU4MWRlYjNlNjc2ZDMyODgyNGM4NzYzN2FhY2EzMTg1MGM2YS4KKworY29tbWl0IGRiZDU5MzEzMmY3MTljYzNkOWJiNTAxN2VjOGJjNWM4Y2JiMDYzYjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMyAyMzoyMzoyOSAyMDE0ICswMjAwCisKKyAgICBUMDcxY29tMnNlYzZfc2ltcGxlOiB1c2UgcHJpdmF0ZSBob3N0IHRvIGNoZWNrIGlwdjYgYWRkcmVzcyByZXNvbHV0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIGV4cGVjdGVkIHJlc3VsdAorCitjb21taXQgMDAzNDU4MWRlYjNlNjc2ZDMyODgyNGM4NzYzN2FhY2EzMTg1MGM2YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAzMCAyMjowODozNCAyMDE0ICswMjAwCisKKyAgICBCVUcgI2EyNTUxOiBmaXggbm9uLXNlcXVlbnRpYWwgY3B1IG51bWJlcnMgb24gSFAtVVguCisgICAgVGhhbmtzIHRvIERhdmUgT2xrZXIuCisKK2NvbW1pdCBiMGY0OWJhMjFmYjgxMGVmY2IwOTkyZjAxYzRmYzVmZDMwY2Y2OWFmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVuIDI2IDIxOjQyOjQ4IDIwMTQgKzAyMDAKKworICAgIGNwdV9wc3RhdC5jOiBmaXggbWlzc2luZyBicmVhayhzKSBpbiBzd2l0Y2ggc3RhdGVtZW50CisKK2NvbW1pdCBhNjNlMzgxZDljMWM5Yzg3MjEwYmYyYjAyMmUzZDZhYzcxZDI3YTdlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSnVuIDIwIDEwOjU3OjM5IDIwMTQgKzAyMDAKKworICAgIFJlY2VudCBwYXRjaCBmcm9tIEJhcnQgKERpc3BsYXkgbW9kdWxlIG5hbWVzIHNvcnRlZCkgbWFrZSBjb25maWd1cmUgbG9zZSBhbGwgbW9kdWxlIG5hbWVzIG9uIFNvbGFyaXMgOCBhbmQgMTAuCisgICAgVGhpcyBjaGFuZ2VzIHRoZSB3YXkgdGhlIHNvcnRpbmcgaXMgZG9uZS4KKworY29tbWl0IDYwY2Y2YTA2ZmY3M2FlN2Q0ZjI0NTRmMmVmNDBjNTZmY2QzOTRiZmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMTggMjI6MTk6MzIgMjAxNCArMDIwMAorCisgICAgbWFrZSB0ZXN0OiBiYWlsIG91dCBpZiBuZXRzdGF0IG5vdCBmb3VuZC4KKworY29tbWl0IGMxMGYyYWNiZmNjMzgzNGNkOTM4NjQxZGMxYTJjNzJhY2E3Zjc4NDUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdW4gMTAgMTY6MDY6NTkgMjAxNCArMDIwMAorCisgICAgRml4IHN0dXBpZCBidWcgaW4gcGtnLW5nIHBhdGNoCisKK2NvbW1pdCBlMmRhNTQ4OWMzYmI4Mjk3NjI2MDRjOWQ0MWYwOGNiM2FlZGZkOGE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDIgMTU6NDE6NTYgMjAxNCArMDIwMAorCisgICAgUEFUQ0ggI2ExMjgzOiBSZWNvZ25pemUgT3JhY2xlIEFDRlMgZmlsZSBzeXN0ZW0gKFRoYW5rcyBKb2huIEhheGJ5KQorCitjb21taXQgNTRjMmNjMjY1NWMxYjZjNTQ4NWQ5OTQ0MWFlZDJhYzE2OWVlZTVmOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAyIDE1OjI2OjAwIDIwMTQgKzAyMDAKKworICAgIEluc3RhbGwgU05NUC1UU00tTUlCIGFuZCBTTk1QLVRMUy1UTS1NSUIKKworY29tbWl0IGNlMzA5MWNiYzQ4YmM0MDVjNmViMWFmN2RkYWViMzcwZWQ3ODY0NzEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMiAxNToyMzoyNCAyMDE0ICswMjAwCisKKyAgICBCVUcgI2EyNTM3OiBTdXBwb3J0ICpCU0QgcGtnLW5nCisKK2NvbW1pdCA0OWU0ZTQ5YjEyYWFlMGQ4Zjc1NzI4MzkzNjVkNDZjZjkzMmJmZWM5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDIgMTU6MTg6NDYgMjAxNCArMDIwMAorCisgICAgRml4IEZyZWVCU0Qgc3lzdGVtIGRlZmluZSBjaGFpbgorCitjb21taXQgM2M1ZTcxMjRiMzVmZDZhY2E0Mjg0ZWFjMzY1ZDc0YjY5ODEwNzg1YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1biAxIDExOjI3OjI1IDIwMTQgKzAyMDAKKworICAgIENIQU5HRVM6IEJVRzogMTI2NyBzbm1wbGliOiByZWdpc3Rlcl9taWJfY29udGV4dCgpIGZpeCBmb3IgcmVhZC1vbmx5IHZhcmlhYmxlcworICAgIAorICAgIFRoaXMgaXMgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIGEgcGF0Y2ggZnJvbSBIYXJzaGEgU2hpdmFubmEuCisKK2NvbW1pdCA1NmVjYzQzM2IwOWU5ODVmMWZkZDc4NmFhZTYwYjA2MWZmYWMwMzgyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVuIDEgMTE6MTI6NDcgMjAxNCArMDIwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgYzljZjhmZDg2OWYzNzkxYTU4YTcxYjhhNjNmNWQ2MWQ2NzI5MWZhZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1biAxIDEwOjA5OjI4IDIwMTQgKzAyMDAKKworICAgIGNvbmZpZ3VyZTogRGlzcGxheSBtb2R1bGVzIG5hbWVzIHNvcnRlZAorCitjb21taXQgMjdhMTYwNTRkNjU2ZWIxMGFiZDAzMmRiYWM2OGViYmMyNmM3NjAwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1biAxIDA5OjIyOjUyIDIwMTQgKzAyMDAKKworICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4OiBSZXdvcmsgbmV0bGluayBidWZmZXIgYWxpZ25tZW50CisgICAgCisgICAgQmFzZWQgb24gYSBwYXRjaCBmcm9tIEpvc2h1YSBIb2tlLiBTZWUgYWxzbworICAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvYnVncy8yNTQ3Ly4KKworY29tbWl0IGJkMTNmMDA0ZjZkYzE2ZGJlNTZlYTUzODE2NjI0OTU3NDVkOTM3ZTEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBNYXkgMzEgMjA6MTY6MjAgMjAxNCArMDIwMAorCisgICAgV2luZG93czogNjQtYml0IGZpeCBmb3IgYnVpbGQtYmluYXJ5LnBsCisKK2NvbW1pdCAxZmE0ZGExYzZjZjk2NzYwNjMzM2Y3ZTc3ZTQwOGI3ZjUxZWY2MjU2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgTWF5IDMwIDE3OjQyOjA3IDIwMTQgKzAyMDAKKworICAgIFdpbmRvd3M6IFN1cHByZXNzIFZpc3VhbCBTdHVkaW8gMjAxMyB3YXJuaW5ncyBhYm91dCBzdHJ0b3VsbCgpCisKK2NvbW1pdCBiMzFhZWRlOWM4YjYzNDYxYjUwOTJlMTZkNjI2YTY3NmIxNzJmOGFhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIyIDIzOjA1OjE5IDIwMTQgKzAyMDAKKworICAgIFBBVENIICMxMjc3OiBGaXggaWZzcGVlZCBmb3IgU29sYXJpcyB6b25lcy4gVGhhbmtzIHRvIGxpam8KKworY29tbWl0IDg2OWY3ODU1NDFhMWVhM2I0Mjc4MTQ1ODY3YjE1MmJlYzUwZDNlYjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBcHIgMzAgMTQ6NTI6MzEgMjAxNCArMDIwMAorCisgICAgd2luRXh0RExMOiBUcmFuc2xhdGUgU25tcEV4dGVuc2lvblF1ZXJ5KCkgUERVIHR5cGUgY29ycmVjdGx5CisKK2NvbW1pdCBlMDEwN2MyNmIzYTBlMzBhZTgzMjM1YmIyMjVmZWI3OGExYTE1NjM4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXByIDMwIDE1OjM4OjU1IDIwMTQgKzAyMDAKKworICAgIFdpbmRvd3M6IFNpbGVuY2UgYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAzYTlmODc1NDIzY2NhYThiYWVlN2UxNjRiYjhhNzVkZDhlMGI3MzQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDYgMDY6Mjc6MTAgMjAxNCArMDIwMAorCisgICAgUEFUQ0ggIzEyNzk6IE1vZGlmaWVkIHBhdGNoIGZyb20gTW9oYW4gZm9yIGNvcmVkdW1wIGFmdGVyIGNhbGxpbmcKKyAgICBmcmVlIHdpdGggYSBiYWQgcmVnZXguCisKK2NvbW1pdCA1MTMwMmJhNTcyODVkNGQ0Nzk5MmVkMTVhNDYwNTgwMTEyYTNlOTI0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDYgMDY6MjE6MjQgMjAxNCArMDIwMAorCisgICAgQlVHICMyNTIxOiBBSVg6IGRvbnQgZGllIHdoZW4gQ1BVIGlzIGR5bmFtaWNhbGx5IGFkZGVkIHRvIHN5c3RlbS4KKworY29tbWl0IDEzMWM5M2JhOTJlNDZkZGRlYzRlYjNhODIwOGFiNWEzYzEwMjY1MDgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgNiAwNjoyMDoyOCAyMDE0ICswMjAwCisKKyAgICBDb21wbGFpbiBhYm91dCAtRCBvcHRpb24gaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLgorCitjb21taXQgOTZhN2E2YTg2ODk1ZmRiZjg5MTc5OWUzNzY5YjI3YTdlNTRhZjA4NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSA2IDA2OjE5OjQyIDIwMTQgKzAyMDAKKworICAgIHNubXB0cmFwZC44OiBhZGQgc29tZSBtaXNzaW5nIGZvcm1hdCB0b2tlbnMgdG8gbWFuIHBhZ2UuCisKK2NvbW1pdCA4MGJlOTA3YmU5ZjRmMWRmNmExNDcwZmVhZmFhOTE2YjljOWM0OTkxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXByIDI3IDE1OjI1OjMwIDIwMTQgKzAyMDAKKworICAgIEZpeCBidWcgMjMxMyBmb3IgY3Jvc3MgY29tcGlsYXRpb24uCisKK2NvbW1pdCA5YWU1OTgxNTMwZmQyYmRkOWYyYTVjODZiN2Q2OTk0Yjg3MzAzM2Q3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXByIDI2IDIyOjM2OjI2IDIwMTQgKzAyMDAKKworICAgIFByZXBhcmUgZm9yIEZyZWVCU0QgMTEgYW5kIDEyCisKK2NvbW1pdCBlMzJmNzBiMTJmNTdkMjZkNjlkNDkxZjFjNzQyYjAxMzJhY2E3NjYwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXByIDI2IDIxOjQyOjIxIDIwMTQgKzAyMDAKKworICAgIEZpeCBhIGNvdXBsZSBvZiBzdHJ1Y3Qgc2l6ZXMgdG8gYmV0dGVyIG1hdGNoIGRlY2xhcmF0aW9uLgorCitjb21taXQgN2NjMmRlYjVkOTE1ZDI1NzIzMjgzMTdkMzcwMWQzNWQ4NjFkM2Q5MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyNiAyMTozNDoyNiAyMDE0ICswMjAwCisKKyAgICBVc2UgaW5ldF9wdG9uIG9ucGxhY2Ugb2YgaW5ldF9hdG9uIHRvIGhlbHAgcG9ydGFiaWxpdHkuCisKK2NvbW1pdCBhMDg3ZmM5ZjE2NDAyM2RlNDE0YjA5YmZkMzc0N2M3MmYxYmNhMDdmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXByIDI2IDIxOjMwOjU0IDIwMTQgKzAyMDAKKworICAgIFVwZGF0ZSB0byBjdXJyZW50IElBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIgYW5kIGN1cnJlbnQgUkZDcy4KKworY29tbWl0IDg1NzAzN2E4ZDI0NTdhYzlhYTJhNTI1MTA5NTc2NDc5NzFhNDY2MzQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBcHIgMjYgMjE6Mjg6MDAgMjAxNCArMDIwMAorCisgICAgUHJlcGFyZSBmb3IgRnJlZUJTRCAxMSBhbmQgMTIuCisKK2NvbW1pdCBiOTkzMDg0MTdkNGJlN2UxMzlmNjEwM2Q0NGYxMWI1NTQzM2E2YmYxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWFyIDE2IDA4OjA0OjE1IDIwMTQgKzAxMDAKKworICAgIEJldHRlciBkb2N1bWVudGF0aW9uIGZvciB0cmFwIGxvZ2dpbmcgZm9ybWF0cy4KKworY29tbWl0IGE2ZTRlYjI2ZjVjMDRkMTU3NjFjZWFmOTI0NTgwZTBjNDBmNzJkZmUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXIgOSAwODo0Njo1NyAyMDE0ICswMTAwCisKKyAgICBzd3J1bl8qOiBTaW1wbGlmeSBjb21taXQgZGEwMGJhMQorCitjb21taXQgMzdhZjc5MjNiODMyZjJlYzgwODM3ZmEyOGVkY2FjOGViMGM3ZThlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE1hciA5IDA4OjM0OjEyIDIwMTQgKzAxMDAKKworICAgIHN3cnVuXyo6IFJlc3RvcmUgYnVmZmVyIG92ZXJmbG93IHByZXZlbnRpb24gY29kZSB0aGF0IHdhcyByZW1vdmVkIGluIGRhMDBiYTEKKworY29tbWl0IGY0MzZjZTI4ZmRhM2VkYzcwMTBjZDg2ZWNmM2MzODZjNWFmNTIxOTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgOCAxNDowNzo1NyAyMDE0ICswMTAwCisKKyAgICB1dGlsX2Z1bmM6IGZpeCBza2lwcGluZyBvZiBkaWdpdHMgd2hpY2ggd291bGQgcnVuIG9uZSB0b28gZmFyCisKK2NvbW1pdCBkYTAwYmExNDJkNmI1MDQyNTU4ODlmMDllYjlmN2QyMjJlZjQwYWRhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDggMTQ6MDQ6MTkgMjAxNCArMDEwMAorCisgICAgc3dydW5fKjogc25wcmludCBtYXkgaGF2ZSBzZXQgYSB0b28gbG9uZyBzdHJpbmcgbGVuZ3RoLiBGaXggaXQgaWYgbmVlZGVkLgorCitjb21taXQgM2IyMDJlYjA1ZWM0ZTVmNmY4ZjU0YmM4YWNiNDM3MzczZTZiNWQwMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciA4IDE0OjAyOjE4IDIwMTQgKzAxMDAKKworICAgIHN3aW5zdF9hcHQ6IGVuc3VyZSByb29tIGZvciBzdHJpbmcgdGVybWluYXRvcgorCitjb21taXQgOGE2NjgxNGVkYWQ1YTI4ZmRiYzg2NDVmYjBlMTQ0NTliZjkxNWRhMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciA4IDE0OjAwOjI4IDIwMTQgKzAxMDAKKworICAgIG10YV9zZW5kbWFpbDogaXNzcGFjZSBjYW5ub3QgdGFrZSBhIGNoYXIgYXJndW1lbnQKKworY29tbWl0IDNlNzM0ZmIzYmRkZjExYjk5YjZiYTdkZGNiMzBhZTkzMmQ4YmEzYjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgOCAxMzo1ODowNyAyMDE0ICswMTAwCisKKyAgICBleHBFeHByZXNzaW9uQ29uZiwgZXhwVmFsdWU6IGlzc3BhY2UgY2Fubm90IHRha2UgYSBjaGFyIGFyZ3VtZW50LgorCitjb21taXQgNzZlOGQ2ZDEwMDMyMDYyOWQ4YTIzYmU0YjAxMjg2MTk2MDBjOTE5ZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNiAwOToyMTo1MSAyMDE0ICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDEyNzU6IGZyb20gVmlsaWFtIFDDusSNaWs6IGZpeGVkIFBlcmwgdHJhcCBoYW5kbGVyIHdoZW4gcHJvY2Vzc2luZyB0cmFwIHdpdGggZW1wdHkgY29tbXVuaXR5IHN0cmluZy4KKworY29tbWl0IDVkMDZhNWZiYjVlZDNjYTJiNTgyMGU4ZWYyZDViNWI4OGI5ZDdkZjgKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBGZWIgMyAxMTo1ODowMyAyMDE0IC0wODAwCisKKyAgICBBbGxvdyB0aGUgbm9kZW1hcCB0byBjb250YWluIG11bHRpcGxlIG5vZGVzIGZvciBtaWJzIGxpa2UgSUYtTUlCCisgICAgCisgICAgSW4gdGhlIElGLU1JQiwgImludGVyZmFjZXMiIGFuZCAiaWZNSUJPYmplY3RzIiBib3RoIGNvbnRhaW4KKyAgICBzaWduaWZpY2FudCBzdWJ0cmVlcy4gIEFsbG93IG5vZGVtYXAgdG8gY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZAorICAgIGxpc3Qgb2Ygbm9kZXMsIHRvIGhhbmRsZSBNSUJzIGxpa2UgdGhpcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjMucHJlMiAtPiBWNS43LjMucHJlMworCitjb21taXQgNTQxNjZjZjZjN2E5OGJmOGU1ZDBkYmFiZjliNWU1YTI1NWM0YzQyMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNSAxMjo0NToxNCAyMDE0IC0wODAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucHJlMworCitjb21taXQgM2Q0ZTNhNjZiZDA5N2UzNzIwZmU1ZGUyZjJlMDU3NDFiMzMwNjMwNQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNSAxMTo0MjoxNSAyMDE0IC0wODAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnByZTMKKworY29tbWl0IGExZmQ2NDcxNmY2Nzk0YzU1YzM0ZDc3ZTYxODIxMDIzOGE3M2JmYTEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgMTkgMTU6MjE6NTcgMjAxNCAtMDgwMAorCisgICAgYnVnIGZpeCBmcm9tIGZlbm5lcjogZml4IElDTVAgbWliIHRhYmxlIGhhbmRsaW5nIG9uIGxpbnV4CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjMucHJlMSAtPiBWNS43LjMucHJlMgorCitjb21taXQgYmYwYTFjMzdkOGI4YzY0NGU4MzcwNDFkMDkwYWFiZThmZDgxMzFlOAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNSAwNzo0OTowNCAyMDE0IC0wODAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucHJlMgorCitjb21taXQgZGVjZmQ4ZDc5YjU0ZDI5OGRlZDk3NDM5ZWZiNzEwZThmNmJhNTI0YworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNSAwNzozMzo1MiAyMDE0IC0wODAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnByZTIKKworY29tbWl0IDhhZWNjZWYzOWJiYWViOGI4MDI1YTY4ZWM0NzYxYmM4MmVjOWFlYWEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjUgMDc6Mjc6NDcgMjAxNCAtMDgwMAorCisgICAgTkVXUzogc25tcGQ6IHBhdGNoIDI1MjU6IGZyb20gUnlhbiBTdGVpbm1ldHo6IEZpeCBhcmd1bWVudCBsZW5ndGggcGFyc2luZyBvZiB0aGUgaG9zdCByZXNvdXJjZXMgbWliCisKK2NvbW1pdCBiMjIyZTdhM2VlZjU5Y2JiNjhhNDUzNDc2Y2IzNjQzNDJjNzRlNjQwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDE5IDIyOjI2OjA4IDIwMTQgKzAxMDAKKworICAgIEZpeCBzcGVsaW5nIGVycm9yCisKK2NvbW1pdCBmOGZjYjNiYzM4MTg4Y2NiZTliYWNlZTU4ZDZmZDJiOTgzZDA5OTI3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDE5IDIyOjI0OjI2IDIwMTQgKzAxMDAKKworICAgIEZpeCBzcGVsaW5nIGVycm9yCisKK2NvbW1pdCBkMjE0ZDcwYzQ1MjRlNjJmY2NhZjEwODNhYmM1YmExYTQzOWE0NjNlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDE5IDIyOjIxOjU1IDIwMTQgKzAxMDAKKworICAgIHNubXBzdGF0dXM6IGRldGVjdCBTTk1QIGV4Y2VwdGlvbiByZXNwb25zZXMuCisKK2NvbW1pdCBiZjc1ZWM2Njk2NWQxNTdjYjA0NDJmN2RmZjU2NTZmOTljZDcwNjM1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDE5IDIyOjIwOjA1IDIwMTQgKzAxMDAKKworICAgIEZpeCB0ZXN0IGZvciBjb20yc2VjNiBhY2Nlc3MuCisKK2NvbW1pdCA2NTY3YTM3ZmEzMDFiOGZhMWI2ODAwOWQ1YTBiM2EzY2JmYjllOGYxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDE3IDIxOjQ5OjEzIDIwMTQgKzAxMDAKKworICAgIHRlc3RpbmcvTWFrZWZpbGUuaW46IG1ha2Ugc3VyZSAnJCcgc3Vydml2ZXMgZm9yIHBlcmwgdGVzdC4KKworY29tbWl0IDA1YjU1MWJjMzMxMTg1ZWRhMWMwODFkMzEzOGQwYWM2MjViMDdkNmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTcgMjE6MzY6NDggMjAxNCArMDEwMAorCisgICAgRml4IHNvbWUgbWFuIHBhZ2Ugc3BlbGxpbmdzLgorCitjb21taXQgOGIwNTU1ZDk1Y2JjMjM4Y2JlOTgzNjQzOWI4ODA3MGM4MGE5Y2E1ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxNyAyMTozNToyOCAyMDE0ICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZml4IGNhbGwgb2YgbWVtY3B5IHdpdGggb3ZlcmxhcHBpbmcgYXJlYXMuCisKK2NvbW1pdCAzYzZhN2E2Yzk0NzQyNDgyNGU3MjRlMjk0NDgzYTdlY2Q3MGQ5ZDQxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDE3IDIxOjMzOjQ3IDIwMTQgKzAxMDAKKworICAgIHJvdXRlX2lvY3RsLmM6IHNldCBwcm9wZXIgbWFzayBiZWZvcmUgU0lPQ0RFTFJULgorCitjb21taXQgZjk5ZWY1Y2VmMjAzZWEzNzg1NTNhMmFiNDkyNWZjZDg2OWU3ZjVhMworQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiAxMSAwODo0Nzo1MSAyMDE0IC0wODAwCisKKyAgICBEYXZpZCBKYXJ2aWUncyBwYXRjaCBmb3IgYnVnIDI1MDcKKworY29tbWl0IGQ3MGYyZTkxZTJjNzI1OGU3NjhlMzJiNjgzZDgxNGE5NDE1NjRhYzEKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBGZWIgMyAxMTo1ODowMyAyMDE0IC0wODAwCisKKyAgICBBbGxvdyB0aGUgbm9kZW1hcCB0byBjb250YWluIG11bHRpcGxlIG5vZGVzIGZvciBtaWJzIGxpa2UgSUYtTUlCCisgICAgCisgICAgSW4gdGhlIElGLU1JQiwgImludGVyZmFjZXMiIGFuZCAiaWZNSUJPYmplY3RzIiBib3RoIGNvbnRhaW4KKyAgICBzaWduaWZpY2FudCBzdWJ0cmVlcy4gIEFsbG93IG5vZGVtYXAgdG8gY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZAorICAgIGxpc3Qgb2Ygbm9kZXMsIHRvIGhhbmRsZSBNSUJzIGxpa2UgdGhpcy4KKworY29tbWl0IDk4NzgxYWUzZGE0M2I3YjE1ODNlY2RlM2UyMWJiNjUyNWEyYzBiODAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMjcgMjI6MjQ6MTggMjAxNCArMDEwMAorCisgICAgcm91dGVfaW9jdGwuYzogRml4IHNldHRpbmcgdGhlIG5ldG1hc2sgd2hlbiBjcmVhdGluZyByb3V0ZSB0aHJvdWdoCisgICAgaW5ldENpZHJSb3V0ZVRhYmxlIGFuZCBpcENpZHJSb3V0ZVRhYmxlLgorCitjb21taXQgMmU5NDc3NzY5M2YxODUzNDc5ZGVkNjcwYmUzMDdlY2U3MTM4ZmViNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAyNyAyMjoxMzowNSAyMDE0ICswMTAwCisKKyAgICBGaXggY29tcGlsZSBmb3IgU29sYXJpcyB3aXRob3V0IElQdjYuCisKK2NvbW1pdCA4ZjY5OTFhMjExNGZkMjFiYTU1MTllZTk1NzZiZWIwODJmNjAzZGVjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDIzIDE2OjMwOjQ2IDIwMTQgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBzZWFyY2ggaWZOYW1lIGFuZCBpZkFsaWFzIHdoZW4gbG9va2luZyBmb3IgaW50ZXJmYWNlCisgICAgbmFtZSBmcm9tIC1DSSBvcHRpb24uCisKK2NvbW1pdCA0YTM2MDEwNDY1OWMxNjljZTIzMjI1NmUxMzhkOTM4ZDk0ZTQzNWY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDIzIDE2OjI4OjMyIDIwMTQgKzAxMDAKKworICAgIGxvZ21hdGNoOiBmaXggb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoYW5rcyB0byBnY2Mgb3IgY2xhbmcKKyAgICB3aXRoIC1mc2FuaXRpemU9YWRkcmVzcyAocmVjb21tZW5kZWQhKQorCitjb21taXQgZWVmMmY2NGI0NjM1N2IzNTNjNzk1MDRiYzU5MzUzNWViZTc0MjFlNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAyMyAxNjoyNzowNyAyMDE0ICswMTAwCisKKyAgICBjcHVfbGludXg6IHN1cHBvcnQgc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiAxMDAgY3B1cy4KKworY29tbWl0IDNiZDY4M2M5NmQ2YTg4NjRmYmQ4MDc4NTc0YWVlOGNkNDMxY2UzMDIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTUgMTg6MzY6MDEgMjAxNCArMDEwMAorCisgICAgVXBkYXRlIG9wdGlvbnMgbGlzdHMgaW4gbWFudWFsIHBhZ2VzIGFuZCBjb21tYW5kcyBoZWxwLgorCitjb21taXQgYTVlZmU4ZGYxN2RkYzRmNjY5M2M3ZGE5YTUyYzQwMWY0ZGIyYmU2MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxNSAxODoyODoyNCAyMDE0ICswMTAwCisKKyAgICB0ZXN0IFQwMjc6IG1ha2Ugc3VyZSBpdCB3b3JrcyBhbHNvIHdoZW4gY29uZmlndXJlZCB3aXRoIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbiAhPSAzLgorCitjb21taXQgNTdkMTA4MjkwMGY5YWM5MzE0NDQzMTZhNmY5NWYxOWVkYTA2OTA3NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxNSAxODoyNjoyNCAyMDE0ICswMTAwCisKKyAgICBjcHVfbGludXg6IHJlbW92ZSByZWR1bmRhbnQgY2FzdHMuCisKK2NvbW1pdCA5ZjRjNTcyNjE0MDkxNDA0ZGVjYmEwZDRlZjFhNGNiYWY5ZmM1YmQyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjM1OjI3IDIwMTQgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBtb25pdG9yaW5nIGJhc2VkIG9uIG5vbi1kZWx0YSB0cmlnZ2VyLgorICAgIAorICAgIHNubXBkIGNyYXNoZWQgd2l0IGZvbGxvd2luZyBzbm1wZC5jb25mOgorICAgICAgICBtb25pdG9yIC1zIC1EIC1yIDEwIC1lIExPR01BVENIIC1vIGxvZ01hdGNoQ3VycmVudENvdW50ICJMb2cgTWF0Y2giICE9IGxvZ01hdGNoQ3VycmVudENvdW50CisgICAgICAgIGxvZ21hdGNoIExvZ2luRmFpbHVyZTEgL3Zhci9sb2cvc2VjdXJlIDEwIHN1OiAuKmZhaWwuKgorICAgIAorICAgIFRoZSByZWFzb24gd2FzIHVuaXRpYWxpemVkIHZhcmlhYmxlIHN5c1VUX3ZhciBpbiBtdGVUcmlnZ2VyX3J1bigpLCBpdCB3YXMKKyAgICBmaWxsZWQgb25seSBpZiB0aGUgdHJpZ2dlciB3YXMgZGVsdGEtdmFsdWVkLCB3aGlsZSBpdHMgdmFsdWUgd2FzIHVzZWQgZm9yIGFsbAorICAgIHRyaWdnZXJzLgorICAgIAorICAgIFdpdGggdGhpcyBwYXRjaCwgc3lzVVRfdmFyIGlzIGZpbGxlZCBmb3IgYWxsIGNvZGUgYnJhbmNoZXMgd2hlcmUgaXQgaXMgbmVlZGVkLgorCitjb21taXQgYzc1MTJhZmU1NjQzZWNhYWU5NzQ1YWMxOTliODM5YzNhYWQ4NDU3YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxNzozNDo1MSAyMDEzICswMTAwCisKKyAgICBSZWdlbmVyYXRlIGRlcGVuZGVuY2llcworCitjb21taXQgYzkxZjg0MGQ4Mzk4MWY2NjBiNzUyNzRkYmNjMzg3Y2I1YzVmOTlhZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxNzoyOToyNiAyMDEzICswMTAwCisKKyAgICBSZWdlbmVyYXRlIGRlcGVuZGVuY2llcworCitjb21taXQgMmRkN2RiYTc2ZDFkMGI0Zjg2NjgzNGUwZmQ2MDE0OGMyODFhMTUzYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxNzoyNTowNSAyMDEzICswMTAwCisKKyAgICBSZWdlbmVyYXRlIGRlcGVuZGVuY2llcworCitjb21taXQgNTkxNDMxZjc5OTFmODNkMjM4NWFkYmM1YTIyYzRhODk1NzZiYzMxMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxNzoyMTo1NiAyMDEzICswMTAwCisKKyAgICBSZWdlbmVyYXRlIGNvbmZpZ3VyZSB1c2luZyB0aGUgcmlnaHQgYXV0b2NvbmYgdmVyc2lvbgorCitjb21taXQgODViYjRiNWM5ZjQ4OTY4NzY3MTVjYjFmMTRmNGYxYjU4MmQyMjNiZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxNzoxMjowMyAyMDEzICswMTAwCisKKyAgICBSZWdlbmVyYXRlIGRlcGVuZGVuY2llcworCitjb21taXQgZDI1NWNhNDI2ZDFlM2Q0YmM0OGI4ZjNkYjkzNzQzNTc4ODkzNGM0MgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyOSAxMjozNTozMCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQXZvaWQgZHVwbGljYXRlIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlIGRlcGVuZGVuY3kgZmlsZXMuCisKK2NvbW1pdCBkMTVjZDJiOTc0M2NjY2I1MDJkZWFmZDE0M2FkZTBhYTkwY2YzMWU0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDA5OjA1OjEzIDIwMTMgKzAyMDAKKworICAgIE1pbkdXOiBCdWlsZCBmaXgKKyAgICAKKyAgICBBcHBhcmVudGx5IHdpdGggcmVjZW50IE1pbkdXIGhlYWRlciBmaWxlcyA8d2luc29jazIuaD4gc2hvdWxkIGJlCisgICAgaW5jbHVkZWQgaW5zdGVhZCBvZiA8d2luc29jay5oPi4gTW9kaWZ5IDxuZXQtc25tcC90eXBlcy5oPiBhY2NvcmRpbmdseS4KKworY29tbWl0IDdiYTIzZTU3MDc2NDk5ZWY4ZWViMjM4ODUzODM0NzNjY2Y0NDczNjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMTUgMTA6NTg6MjUgMjAxMyArMDEwMAorCisgICAgV2luMzI6IGJhdGNoIGJ1aWxkOiBDaGVjayB3aGV0aGVyIFBlcmwgYXJjaGl0ZWN0dXJlIG1hdGNoZXMgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgIAorICAgIEJ1aWxkaW5nIHRoZSBQZXJsIG1vZHVsZXMgZmFpbHMgaW4gYSBzdWJ0bGUgd2F5IGlmIGUuZy4gYSAzMi1iaXQgUGVybAorICAgIGludGVycHJldGVyIGlzIHByZXNlbnQgaW4gJVBBVEglIGFuZCBhIDY0LWJpdCBDIGNvbXBpbGVyIG9yIHZpY2UgdmVyc2EuCisgICAgSGVuY2UgY2hlY2sgd2hldGhlciBQZXJsIGludGVycHJldGVyIGFuZCBDIGNvbXBpbGVyIHRhcmdldCBhcmNoaXRlY3R1cmUKKyAgICBtYXRjaCBiZWZvcmUgc3RhcnRpbmcgYSBidWlsZC4KKworY29tbWl0IDZiNzA2YzUzZDRjZjc1MWU0OTVhYWI2NmZlMzlmZDUxYzMyY2U5MzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMTUgMTA6MDY6MjEgMjAxMyArMDEwMAorCisgICAgV2luMzI6IFZpc3VhbCBTdHVkaW8gMjAxMyBidWlsZCBmaXgKKyAgICAKKyAgICBBcHBhcmVudGx5IFZpc3VhbCBTdHVkaW8gMjAxMyBkb2VzIG5vdCBzdXBwb3J0IGdvdG8gPHR5cGVkZWYgbmFtZT4uCisgICAgSGVuY2UgcmVuYW1lIHRoZSBVSU5UIGxhYmVsLiBGb3IgY29uc2lzdGVuY3kgcmVhc29ucywgYWxzbyByZW5hbWUKKyAgICB0aGUgT0NUIGxhYmVsLgorCitjb21taXQgMTNjODU5MGUzODI2OWE5MjY1ZWFkNWM4NWYwNWM4ODk0ZTg2ZDg0YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAxNSAwOTozMTo0NCAyMDEzICswMTAwCisKKyAgICBSZW1vdmUgdGhlIE5FVFNOTVBfRE9OVFdBSVQgLyBORVRTTk1QX05PU0lHTkFMIGFsaWFzZXMgZm9yIHNlbmR0by9zZW5kbXNnIGZsYWdzCisgICAgCisgICAgTm90ZTogdGhpcyBwYXRjaCBpcyBhIG1vcmUgZWxhYm9yYXRlIHZlcnNpb24gb2YgdGhlIFY1LTctcGF0Y2hlcyBjb21taXQKKyAgICA4OWE1MDRmZTMzMWUwOWE1NGY2YjAxYzI4NzdjZjAyMjkwMDcwNWE4ICgyMDExLTEyLTE5KS4KKworY29tbWl0IGUwZWFkMmQ1NGViZjQzNTMzZTU2MmMzNDAyZTEyMTg4Y2ZkYzA3OWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBEZWMgMTQgMTg6NTQ6MDEgMjAxMyArMDEwMAorCisgICAgd2luMzIvYnVpbGQucGw6IEFkZCBzdXBwb3J0IGZvciB0aGUgVmlzdWFsIFN0dWRpbyAyMDEzIGNvbW1hbmQtbGluZSBlbnZpcm9ubWVudAorCitjb21taXQgODg4NjA5NWE5OTA5MDI5M2IwNmEwNzE5ZTdiODY4ZjFlZGMxNDkzMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IERlYyAxNCAxODoyOTowMSAyMDEzICswMTAwCisKKyAgICBsaWJhZ2VudDogV2luMzIgYnVpbGQgZml4IChzZWUgYWxzbyBjb21taXQgMDE3MjNjNikKKworY29tbWl0IDVmMzJiNGFhYThiY2QyMmViYTljNjQ5MjIzZmUwODBkNTQ3OWJjOGUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBEZWMgMTQgMTc6MTc6MzAgMjAxMyArMDEwMAorCisgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmg6IEFkZCBhIG1pc3NpbmcgZGVjbGFyYXRpb24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIgLT4gVjUuNy4zLnByZTEKKworY29tbWl0IGQwMTE3YWRlZTg0ZWZjYjU4YTVlNDE4M2Y3ZDdjYzZlNzAwZjAyNjQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgNSAyMzozMzo1MSAyMDEzIC0wODAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucHJlMQorCitjb21taXQgYjFkYmRhOGJiY2NhODIzNzc2NjRkY2E5Y2I2YmIwNmY5Y2U2MzdhMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyA1IDIzOjMzOjM3IDIwMTMgLTA4MDAKKworICAgIFJlcGxhY2UgLy8gY29tbWVudHMgd2l0aCAvKiBjb21tZW50cworCitjb21taXQgOWVlMzk2Y2VjMTgxMTUxMmZiY2IyNDQ5MGIzYmUwYjk3MGY2OWZmYgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyA1IDIzOjA2OjEzIDIwMTMgLTA4MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucHJlMQorCitjb21taXQgNmMzOTJmZWQ2Y2Q1ZDdhMzJlZDEwYzgxNzBhZWQ4NTFjZWU3Nzk4NQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyA1IDIzOjA0OjI1IDIwMTMgLTA4MDAKKworICAgIGluY3JlbWVudCB0aGUgcmV2aXNpb24KKworY29tbWl0IGY1NDAzZTc1NjdlYjA3MWJlZDhkYWRiYTM4YTJjZGE2MDMzMmI4ZmMKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFN1biBEZWMgMSAxODoyNDoxMiAyMDEzIC0wODAwCisKKyAgICBEb24ndCBzZXQgdGhlIGlmaW5kZXggd2hlbiBzZW5kaW5nIGEgbm9ybWFsIHJlcGx5LgorICAgIAorICAgIFNldHRpbmcgdGhlIGlmaW5kZXggaW4gdGhlIElQX1BLVElORk8gcmVzdWx0cyBpbiBzZXR0aW5nCisgICAgdGhlIHNvdXJjZSBhZGRyZXNzIHRvbyAoaWdub3JpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIHRoYXQKKyAgICB3ZSBhbHNvIHN1cHBseSkuICBUaGUgc2VxdWVuY2UgaGVyZSBpcyB0aGF0IHdlIHNlbmQgd2l0aAorICAgIG5vIGludGVyZmFjZSBzcGVjaWZpZWQgYnV0IHRoZSByZXF1ZXN0J3MgZGVzdGluYXRpb24KKyAgICBzcGVjaWZpZWQgYXMgb3VyIHNvdXJjZS4gIElmIHdlIGdldCBFSU5WQUwsIGl0J3MgYmVjYXVzZQorICAgIHRoZSByZXF1ZXN0J3MgZGVzdGluYXRpb24gd2FzIGEgYnJvYWRjYXN0IGFkZHJlc3Mgd2hpY2gKKyAgICBpcyBhbiBpbnZhbGlkIHNvdXJjZSBhZGRyZXNzLCBzbyB3ZSB0cnkgYWdhaW4gd2l0aCB0aGUKKyAgICBpbmNvbWluZyBpbnRlcmZhY2UncyBpZl9pbmRleCBhbmQgc3BlY2lmeSB0aGUgc291cmNlCisgICAgYXMgSU5BRERSX0FOWS4KKyAgICAKKyAgICBJZiB3ZSBzdXBwbHkgdGhlIGlmaW5kZXggaW4gdGhlIGZpcnN0IGNhbGwsIGEgcmVwbHkgZnJvbQorICAgIGEgbXVsdGktaG9tZWQgYWdlbnQgbWF5IGNvbWUgZnJvbSBhIGRpZmZlcmVudCBzb3VyY2UgYWRkcmVzcworICAgIHRoYW4gdGhlIHJlcXVlc3Qgd2FzIHNlbnQgdG8sIHBvdGVudGlhbGx5IGNvbmZ1c2luZyBhIG1hbmFnZXIuCisgICAgVGhpcyBidWcgd2FzIGZpcnN0IGludHJvZHVjZWQgaW4gU1ZOIHIxNzg1NSBhbmQgd2FzIGZpeGVkCisgICAgaW4gU1ZOIHIxOTc2NzsgYWxzbyBzZWUgdGhlIG1haWxpbmcgbGlzdCB0aHJlYWQKKyAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfbmFtZT1BQU5Ma1RpbTM3SDdNN0JhMDEwTG1kazFZR1lLd1BUa0R5UktvRHI3NnVxRFQlNDBtYWlsLmdtYWlsLmNvbSZmb3J1bV9uYW1lPW5ldC1zbm1wLWNvZGVycworCitjb21taXQgMTQ0YTEzMjA4YjRmYTZmMGExY2Q5NzFmNDFhNzI3OTcxNmIyN2VlZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAyOSAwODowNzoyOCAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZml4aW5nIHRoZSBzdGF0cyBvdXRwdXQgYnJva2UgdGhlIGNvbm4gb3V0cHV0IDotKC4gRml4ZWQuCisKK2NvbW1pdCBmNGU1ZWU2ZjM5NjMwYjczZjhhZDk5NDZjOTkwZTk2OTA1ODBkN2NmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgTm92IDI3IDAxOjEyOjAwIDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCB0ZXN0cyBmb3IgYXNuX3JlYWxsb2NfcmJ1aWxkXyppbnQqIGFuZCB0ZXN0cyBmb3Igb3BhcXVlIHVuc2lnbmVkIDY0LWJpdCB0eXBlcy4KKworY29tbWl0IDIwZTRiMzc5MzJhOWU5Y2M1NmIzNjBhMjM2ZTlkODE4MDc5M2EyOTcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBOb3YgMjcgMDA6NTQ6NTggMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCB0aGUgdHlwZSBjaGVjayBmb3Igb3BhcXVlIHZhcmlhYmxlcyB3aGVuIGRlY29kaW5nIGNvdW50ZXI2NCB2YWx1ZXMuCisgICAgCisgICAgVGhhbmtzIHRvIHJrakBzb2Z0aG9tZS5uZXQgZm9yIHJlcG9ydGluZyB0aGlzIGlzc3VlLgorCitjb21taXQgNmU3NmNiYmIyYTA3ODNmMjJmNThmYjdkMzIzZTlmNzIxN2NjNjA0YQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIE5vdiAyNyAwMTowMTowNCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBdm9pZCBmYWlsdXJlIHRvIHRyaWdnZXIgc2lnbiBleHRlbnNpb24gZHVlIHRvIG92ZXJsb25nIHR5cGVzCisgICAgCisgICAgSW4gYXNuX3JlYWxsb2NfcmJ1aWxkX3NpZ25lZF9pbnQ2NCB0aGUgYWxnb3JpdGhtIGFzc3VtZXMgdGhhdCBzaGlmdGluZworICAgIHZhbHVlcyBncmVhdGVyIHRoYW4gMHg3ZmZmZmZmZiByaWdodCBpcyBhbiBhcml0aG1ldGljIHNoaWZ0IHRoYXQgd2lsbAorICAgIHNoaWZ0IGluIDEncy4gT24gaG9zdHMgd2hlcmUgbG9uZyBpcyBtb3JlIHRoYW4gMzIgYml0cyB0aGUgdXNlIG9mIGxvbmcKKyAgICBmb3IgJ2xvdycgYW5kICdoaWdoJyBtYWtlcyB0aGlzIGFzc3VtcHRpb24gZmFsc2UuCisgICAgCisgICAgVGhhbmtzIHRvIHJrakBzb2Z0aG9tZS5uZXQgZm9yIHJlcG9ydGluZyB0aGlzIGlzc3VlLgorCitjb21taXQgNGE0Yjc4ZTYzZGQ2ODg4OTJiNzM5OWI1ODRlMjZlMDQ3ZDM2NzUwMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyNyAyMjoxNjo0NCAyMDEzICswMTAwCisKKyAgICBBZGRpdGlvbmFsIGZpeCBmb3IgZGFyd2luMTMKKworY29tbWl0IDkxYmQ1ZDRjNWY0MWI1NGM0NjI0Mjg4M2RiOTJhYTRlNDk0NTUyOTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMjcgMjI6MTM6MDMgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZpeCB0cnVuY2F0ZWQgc3RhdGlzdGljcyB3aGVuIHVzaW5nIC12MQorCitjb21taXQgMGNiMTRkNGU1YzM5YTA3Yzc4NDc0ODgxZTZjNzNmYTYxNzUwN2JkYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyNyAyMjowNjo1OCAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZml4IHN0YXRpc3RpY3MgZm9yIGlwdjYKKworY29tbWl0IDJkNGRlZmU3N2JkZWJiYmMxYTc3M2ViOGQ0ODQ5OGI2ZjI1NThmMjMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBOb3YgNSAwNjo0OTozNSAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogVXNlIDAgZm9yIHRoZSBpZ25vcmVkIG51bXZhcnMgYXJndW1lbnQgdG8gbmV0c25tcF9yZWdpc3Rlcl9taWIKKyAgICAKKyAgICBUaGUgbnVtdmFycyBhcmd1bWVudCBvZiBuZXRzbm1wX3JlZ2lzdGVyX21pYiBpcyBpZ25vcmVkIGlmIHRoZSB2YXIKKyAgICBhcmd1bWVudCBpcyBOVUxMLiBJbiBvcmRlciB0byB1bmlmeSB0aGlzIHVzZSBvZiBpdCB3aXRoIGFsbCBvdGhlciBvbmVzLAorICAgIGNoYW5nZSBpdCBmcm9tIDEgdG8gMAorCitjb21taXQgYjk5MzNlNjE4M2IxNzE1YzkwZDdjZjZkZmFjMTg5MTAwMDc5NmJjZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE5vdiAyMiAyMzowNDowOCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzCisKK2NvbW1pdCBhNzgzMDcwMzhiZjBiNDg1OWUxMWJkODZjYTMwNDljMzM5YWJlMTI2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDIzIDA5OjQ5OjAxIDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgYSBtaXNzaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisKK2NvbW1pdCBkOGQ2MDc4YjNlNjViNWJhMTMxZGY4NDJkOTJjNzc0MzczN2ZmOTU1CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgTm92IDE5IDA4OjA2OjM0IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1hcmsgcmVnaXN0ZXJfc2lnbmFsIGFuZCB1bnJlZ2lzdGVyX3NpZ25hbCBhcyB1bnVzZWQuCisKK2NvbW1pdCBiZjA4M2Y1YjY5Y2NiOTVmZjcwZTJhMjhhN2M2NGZlYzdkN2U0MjJlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDE4IDIyOjQxOjI4IDIwMTMgKzAxMDAKKworICAgIFBhdGNoIGExMjcwOiBtYW4gcGFnZSBmaXh1cHMgKHRobmtzIEFsZWtzYW5kcnMgU2F2ZWxqZXZzKQorCitjb21taXQgNjJhNjM0Y2U2NzFjMzhhZGU5NzkxNzA3NzAzOWUzNGFlM2Q5MjczNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE5vdiAzIDE2OjAyOjM5IDIwMTMgLTA4MDAKKworICAgIFdpbjMyOiBVbmJyZWFrIHRoZSBidWlsZCAoc2VlIGFsc28gY29tbWl0IDI1M2Y5MDc0MykKKworY29tbWl0IGE4MTNiNTExMTI1NWY3NWZlZjY5NDRjZWRkNjQ4ZGJmOGMzNGE5YWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTEgMTc6NTQ6NDQgMjAxMyArMDEwMAorCisgICAgV2luMzI6IHBlcmw6IEF2b2lkIHRyYW5zcG9ydCBpbml0aWFsaXphdGlvbiBmYWlsdXJlIGluIFBlcmwgU05NUCBhZ2VudHMKKyAgICAKKyAgICBBdm9pZCB0aGF0IHRoZSBmb2xsb3dpbmduIG1lc3NhZ2UgaXMgcHJpbnRlZCBkdXJpbmcgc3RhcnR1cCBvZiBhIFBlcmwgU05NUAorICAgIGFnZW50OgorICAgIAorICAgIG5ldHNubXBfYXNzZXJ0IHMgIT0gKC0xKSBmYWlsZWQgLi5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBCYXNlRG9tYWluLmM6NDg0CisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IDM2YTdkZTcyMzBmYmJiYjUyY2MzN2NiYmVkMjgxZWI1NTk0MDRiZTkuCisKK2NvbW1pdCBhMmEzYTFhYTY3ZmYzOGRhYThmMTM5NTE4YWJiMzU0ODQ3NWVkNTkxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDggMjI6MzI6MjkgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZpeCB1c2FnZSBtZXNzYWdlIHRvIGJlIGNsb3NlciB0byByZWFsaXR5LiBGaXggaGFuZGxpbmcgb2YgLUNwIGFuZCAtQ2Ygb3B0aW9ucyB3aXRoIG5ldyB0YWJsZXMuCisKK2NvbW1pdCA3Mjc3NDAwMTAyZGZjYTkyMWVhYzBiZDljZWY4NmIzMmY1OTgwMDNkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDggMjI6MzA6MTQgMjAxMyArMDEwMAorCisgICAgQ2xlYW4gdXAgc25tcG5ldHN0YXQgbWFuIHBhZ2UsIHJlbW92aW5nIHNvbWUgbGVmdCBvdmVyIGNydWZ0IG1hbgorICAgIG9yaWdpbmFsIGJzZCBuZXRzdGF0IHBhZ2UuCisKK2NvbW1pdCBlYjAzNzlkYjM4NTNmYWQxMzhmOTJmNDc5MmE4MDM0MTc3ZDk2MjlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDQgMjI6MDk6NTUgMjAxMyArMDEwMAorCisgICAgRml4IGxlbmd0aCBvZiBkZWZhdWx0IHJvdXRlciBhZGRkcmVzcyB1c2luZyBzeXNjdGwuCisKK2NvbW1pdCA4ZmE0NmYyOTYxM2MxNzkyYzRhMTQ0MzI5NDQyNzNiNmQ3NGUzZjNjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDQgMjI6MDc6NTYgMjAxMyArMDEwMAorCisgICAgRml4IGhhbmRsaW5nIG9mIGNvbW1hbmQgbmFtZXMgd2l0aCBibGFua3Mgb24gTGludXguCisKK2NvbW1pdCA2ZmNiMzgxZGNkNDYwYjc5NTU2MzM5ZWIzNmZiZTU3OWJmNDlkYzAzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDQgMjI6MDU6NTYgMjAxMyArMDEwMAorCisgICAgQWRkIExJU1AtTUlCIHRvIHJmY2xpc3QuCisKK2NvbW1pdCAxYzUxMDQ3NDEwNzAyMTlmMTM4MDBkNzZhZmQ1N2EwZDYzNmMyNDNiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDQgMjE6NTQ6MzYgMjAxMyArMDEwMAorCisgICAgRml4IHBhZ2luZyBzdGF0aXN0aWNzIGZvciBPcGVuQlNEIDUuNAorCitjb21taXQgMmY1N2I4MDRlODNiOGY4OWI4OTY5NjM3ZjgzZDg4ODYwMTA4MzhmZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAzMCAyMTozNTozMyAyMDEzICswMTAwCisKKyAgICBBZGQgZGFyd2luMTMgc3VwcG9ydCBmaWxlCisKK2NvbW1pdCA4MjNkNTFmNzliODRlMTM1OTNlNWIxYWM5YjQwNzYzNGM1NDM0NmY0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIxIDIwOjQ5OjUzIDIwMTMgKzAyMDAKKworICAgIEZpeCBtYWtlIGluc3RhbGwgaW4gbWFuIGRpcmVjdG9yeSBmb3IgU29sYXJpcyBjYXVzZWQgYnkgVlBBVEggb2RkaXR5LgorCitjb21taXQgYzU3NTIwNGEwMjA1OTE5OTQyOGNlMTM1YmMxMmVjYjM4NWUzNjc2MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMSAyMDo0NzozMSAyMDEzICswMjAwCisKKyAgICBDaGFuZ2UgYW4gb2NjdXJyZW5jZW9mIHNwcmludGYgdG8gc25wcmludGYuCisKK2NvbW1pdCBhMmJkYTk5NDAxOTI4MDI3OGJlZGVkNzkxN2M4NzdmY2I0NDg4NzNkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIxIDIwOjQ2OjMwIDIwMTMgKzAyMDAKKworICAgIEJldHRlciB3b3JkaW5nIGZvciBzdGF0aXN0aWMgZW50cnkuCisKK2NvbW1pdCA2NjQ0YjA1ZDNjZjM0MTIzY2VkYTc0YjdiODRmMTY5NDQzNTllN2NhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIxIDIwOjQ1OjE1IDIwMTMgKzAyMDAKKworICAgIEZpeCB3YXJuaW5ncyBmb3IgbGlibmwxLgorCitjb21taXQgOTQwODE2ZTAxOTE3MWEwNDE0ZWUwMGE0NmNkYTRjZTYwYmMwMWY3MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IE9jdCA1IDExOjA1OjEyIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxMjY1OiBGaXggYSBidWZmZXIgb3ZlcmZsb3cgaW4gZHVtcF9yZWFsbG9jX29pZF90b19pbmV0YWRkcmVzcygpCisKK2NvbW1pdCAwOTkyZWNmOGZjNWQ4NzgzNzAwNmQ0YmMzYTg2ODFlNTczNmUzNTczCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgT2N0IDE3IDA3OjE2OjIzIDIwMTMgKzAyMDAKKworICAgIHBhc3NfcGVyc2lzdDogemFwIHBvc3NpYmxlIENSIGF0IGVuZCBvZiBsaW5lLgorCitjb21taXQgZWI4OGUwMjRiNGMyNjc5OTRkZTQwNDAxZThiN2Q3N2UzMmRlYzZjZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCAxNSAyMTozMzo1NiAyMDEzICswMjAwCisKKyAgICBNYWludGFpbiBieXRlIG9yZGVyIGZvciBJUHY2IHBvcnQgbnVtYmVycyBpbiB0cmFuc3BvcnQgZGF0YSAocHJvYmxlbSBzdXJmYWNlZCBpbiBzbm1wVGFyZ2V0QWRkckVudHJ5KQorCitjb21taXQgZjJlNTdiOGU2MzhhMWZjZGM4NWZkMGZkMmY2NTUyYTMzZmNhYjNmOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCAxNSAyMToxNzoyMSAyMDEzICswMjAwCisKKyAgICBzbm1wbmV0c3RhdDogYmV0dGVyIGhhbmRsaW5nIG9mIHNubXAgZXhjZXB0aW9ucy4KKworY29tbWl0IGUwMjgwMjk0ZTdlNmJlYmQ2MmZiYWI5OTI4YjFiNWYwMWI3MzVlNzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMjE6MTU6MzkgMjAxMyArMDIwMAorCisgICAgRml4IERJU1BMQVktSElOVCBmb3IgbmVnYXRpdmUgdmFsdWVzIGFuZCBoaW50ICJkLW4iLgorCitjb21taXQgMWFiYjVhMDk0ZDI3NTE0YjgxNDdiMTEyOGRiMmNkZGNiMTcwM2JiOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE5vdiAyIDE0OjQ1OjQyIDIwMTIgKzAxMDAKKworICAgIFVzZSBORVRTTk1QX1BSSXogdG8gcHJpbnQgc2l6ZV90IHZhbHVlcyBpbiBfc2Vzc19yZWFkCisKK2NvbW1pdCBhY2I3MjU4OWFjYjMwMThlNDQzZjVlM2Y2NTRkZDAzZjdjMjYzMTZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDEgMTg6NDE6NTEgMjAxMyArMDIwMAorCisgICAgQWRkIGZvcmdvdHRlbiBpY21wT3V0RWNob3MgdG8gaWNtcE1zZ1RhYmxlLgorCitjb21taXQgMjUzZjkwNzQzOTE1MTAyM2E5MmEzYWM0M2E5ZjMxN2UzYTRlMTdmYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAzMCAyMjoxMzo0MyAyMDEzICswMjAwCisKKyAgICBTb2xhcmlzOiBzdXBwb3J0IGljbXBNc2dTdGF0c1RhYmxlCisKK2NvbW1pdCA2ZWU5MWYwNmI1YmQwZTBjYmQyYjY5ZjNkYWUwYmY2MTQxY2M5NTU2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDMwIDA2OjU5OjEwIDIwMTMgKzAyMDAKKworICAgIFNvbGFyaXMgc3VwcG9ydCBmb3IgSVAtRk9SV0FSRC1NSUIKKworY29tbWl0IDRlYmRmM2ZiMDQ0NWY5MDY3ZWNiMzgzOTRjMmRmMmJkM2I3MzgxODIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMzAgMDY6NTQ6MjggMjAxMyArMDIwMAorCisgICAgUHJvcGVybHkgaGFuZGxlIHRoZSAnYicgZGlzcGxheSBoaW50LgorCitjb21taXQgN2YyZWRiZjY4MzQ4Y2FiZWFmOTk1YWFiYTFiMmE3ODkzZDE4YzVlNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIEF1ZyAzMCAwODo1MDowOSAyMDEzICswMjAwCisKKyAgICBSZW1vdmUgc29tZSBjb21tZW50ZWQgb3V0IGRlZmluZXMKKworY29tbWl0IDQzNWVlMWY0MDIzY2IwMDIyNDVjM2E1NmRiZWFiYTM3YTNkM2VkYmUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBTZXAgMjggMTQ6MjY6MTAgMjAxMyArMDIwMAorCisgICAgUGF0Y2ggYTEyNTkgKGJ1ZyBhMjQ1Nik6IHByb2JsZW1zIHdpdGggaXBDaWRyUm91dGVUYWJsZSBvbiA2NC1iaXQgYmlnZW5kaWFuIG1hY2hpbmVzLiBUaGFua3MgdG8gQ2hyaXN0b3BoZXIgV3UuCisKK2NvbW1pdCA5YTZmNTY2MzkyYTNjZjEyZGFiNDg4YTc2ZDY5ZmM4NzNkYmVjMmFjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gQXVnIDI1IDEwOjE4OjUzIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFJlbmFtZSBtZW1kdXAoKSBpbnRvIG5ldHNubXBfbWVtZHVwKCkKKyAgICAKKyAgICBSZW5hbWUgdGhlIGZ1bmN0aW9uIG1lbWR1cCgpIGRlZmluZWQgaW4gbGlibmV0c25tcC5zbyBpbnRvCisgICAgbmV0c25tcF9tZW1kdXAoKS4gVGhpcyBhdm9pZHMgY29uZmxpY3RzIHdpdGggbWVtZHVwKCkgZnVuY3Rpb25zCisgICAgZGVmaW5lZCBpbiBvdGhlciBsaWJyYXJpZXMgdGhhdCBkZWZpbmUgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lCisgICAgbmFtZS4gQXMgYW4gZXhhbXBsZSwgaWYgV0lOUyBuYW1lIHJlc29sdXRpb24gaGFzIGJlZW4gZW5hYmxlZCB2aWEKKyAgICAvZXRjL25zc3dpdGNoLmNvbmYgdGhlbiBwZXJmb3JtaW5nIGEgaG9zdCBuYW1lIGxvb2t1cCBjYW4gdHJpZ2dlcgorICAgIGEgY3Jhc2ggaW4gdGhlIFNBTUJBIFdJTlMgbmFtZSBsb29rdXAgbGlicmFyeSBiZWNhdXNlIGNhbGxzIHRvCisgICAgbWVtZHVwKCkgZnJvbSB0aGF0IGxpYnJhcnkgZ2V0IHJlZGlyZWN0ZWQgdG8gdGhlIGluY29tcGF0aWJsZQorICAgIE5ldC1TTk1QIG1lbWR1cCgpIGZ1bmN0aW9uLiBTZWUgYWxzbworICAgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTAwMDc4MCBmb3IgdGhlIGRldGFpbHMuCisgICAgVGhpcyBwYXRjaCBpbnRlbnRpb25hbGx5IGNoYW5nZXMgdGhlIE5ldC1TTk1QIEFCSS4KKworY29tbWl0IDNkZGU0MTk5ODYyNWZlMGUyNDExOWEyZTFmNDUwOWJhM2JhMmZkOWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgNSAyMDoyNzoyMiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBMaW51eDogQlVHOiAyMjM4OiBBZGQgbGlibmwzIHN1cHBvcnQKKworY29tbWl0IGEzNzk1N2JlZTlmNzlkYjE5YmJhOTNmMTFmYWEwMzc5MjFkNmU1ODQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMjMgMjI6MjQ6MTUgMjAxMyArMDIwMAorCisgICAgcm91dGVfc3lzY3RsLmM6IEZpeCBmb3IgbGlua2xvY2FsIHJvdXRlcyBvbiBGcmVlQlNEIDEwCisKK2NvbW1pdCBkOWE3ZjlmYzY3OTQ1NWIwZmEzMjhmYmFlNjdlYzJlZTI5MDZiOTRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE5OjQyOjUxIDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBBdXRvbWF0ZSBidWlsZGluZyB0aGUgaW5zdGFsbGVyCisKK2NvbW1pdCBlYjFhMTY0MTUwMGQ2YmNmMzlmOWI4NDdhMmMwNmM5ZWRhMGM4OGM0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE5OjMyOjMxIDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBhbiBpbnN0YWxsZXIgd2l0aG91dCBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzCisKK2NvbW1pdCBhOTc3N2VjOWFmYjM3Y2E2NDQyMTY2MDc5YmQ1YjJlMDM0OWJlM2UzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE4OjM1OjU1IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IE9wZW5TU0wgdmVyc2lvbiBjaGVjaworCitjb21taXQgNWNiMmNjN2FiMjBiMjkwYTZjNzQ1ODVmOTg1ZjljOTEyY2RlYzhjZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxMDoyNTowMCAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IFJlbW92ZSBNU1ZDIHJlZGlzdHJpYnV0YWJsZSBmaWxlcyBmcm9tIHRoZSBpbnN0YWxsZXIKKworY29tbWl0IDE3ODEyMDA2MWVjZTQ4Y2NkOTdhM2FlMzZiODgwZGE2YjEwOTUyMDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMDk6NTA6MTggMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0OiBHZW5lcmFsaXplCisKK2NvbW1pdCA4NWExYzUwMjZmMTBmZjE0M2Y0MzdmMDAzODk0YTZjNGFhMTg3YTk2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE4OjQzOjA1IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBGaXggeDY0IGRldGVjdGlvbgorCitjb21taXQgYTBjMmE3YWI0Mjk5NzQzM2U3MDdjMTBmOGFjZjYxZjkxMjQ0MmY3MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxNzoyODo1NCAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogRXhhbWluZSB0d28gbG9jYXRpb25zIGZvciBNaW5HVyBiaW4gZGlyCisKK2NvbW1pdCBjZjEwMDZlNjdmOWM3N2ZiZGE5NGQ0NTIxZTc4ZjAwOThjOGEwZTE5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDEwOjExOjEzIDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBGaXggU1NMIGJ1aWxkCisKK2NvbW1pdCBiNDdmMTM2YmVhOGVmNTQ2OGEyMGQ5NDUyYjEyMzE4ZGI2YzM0OWViCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE3OjA1OjM3IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBBZGQgV1NESyBzdXBwb3J0CisKK2NvbW1pdCAwZTE4YTIwNmFhYTQ5MGZkZWIyYzcwYTBlNmU1MmM5MWViNWYzZWQ5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDA5OjQ4OjA2IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbgorCitjb21taXQgODVkZjAyYjgzNjMyMGNjNDVlNWQyZGI0NTQ4M2JjNTA4NjMxNDQ2YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxMDowMjoyMSAyMDEzICswMjAwCisKKyAgICB3aW4zMi9Db25maWd1cmU6IEZpeCBidWlsZCB3aXRob3V0IE9wZW5TU0wKKworY29tbWl0IDNmOWFkYjk4N2I1YmY1ZDJkMDk1Y2ZkNmVhMmRhOWNkODFkMWJlYzQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMDk6MTU6NDEgMjAxMyArMDIwMAorCisgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IFdpbjMyIGJ1aWxkIGZpeAorCitjb21taXQgYTZlMTg1MWZiZTc0N2NmMTVlZDA3NTgwNzc4MWNlODlhMzRlOTZjMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAxOTo1NTowMiAyMDEzICswMjAwCisKKyAgICBSZXN0b3JlICJDSEFOR0VTOiBXaW4zMjogcGVybDogQlVHOiAyNDg4OiBBdm9pZCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvciIKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGIyNzI1OTY0YmRlOTIxYjYyODVlM2E1OWE1MTI1NTJjYWUwYTBjYTUuCisKK2NvbW1pdCBiMjcyNTk2NGJkZTkyMWI2Mjg1ZTNhNTlhNTEyNTUyY2FlMGEwY2E1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDE5OjQ5OjU4IDIwMTMgKzAyMDAKKworICAgIFJldmVydCAiQ0hBTkdFUzogV2luMzI6IHBlcmw6IEJVRzogMjQ4ODogQXZvaWQgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3IiCisgICAgCisgICAgVGhpcyBwYXRjaCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB2NS40IGJyYW5jaC4KKworY29tbWl0IDY0NTM3MTdmNmFjNjY1YmY1MzI3NDRhODZjZGI4OThhYWY4M2Q2YmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMTk6MzQ6MjUgMjAxMyArMDIwMAorCisgICAgQWRkIHJlcHJvZHVjZXIgZm9yIGJ1ZyAyNDg4CisKK2NvbW1pdCAwZDBhNDYyOTcwMmViOWY5ZmU5OTU2YzFiYWM0YjQ0NTYxMGZmM2M3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDMxIDE3OjIxOjIyIDIwMTMgKzAyMDAKKworICAgIFNpbXBsaWZ5IHNubXBUYXJnZXRBZGRyX3Jvd1N0YXR1c0NoZWNrKCkKKworY29tbWl0IDRiODdlM2NiNGQzNjc5YWI2MGMzNTNiYTRmZjMwMWY2ODQyYjg0YmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMTY6Mzc6MDkgMjAxMyArMDIwMAorCisgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY4ZXhlY2ZpeF9zaW1wbGU6IFNpbXBsaWZ5CisKK2NvbW1pdCA2NWM4OGUyZWNmNWRlOTM2NWM4M2M0NmVmM2JiNGNkODljZGM0NGU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDE1IDExOjExOjQzIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBwZXJsOiBCVUc6IDI0ODg6IEF2b2lkICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9yCisKK2NvbW1pdCAxYTQ4NTVkYTRiMWRkNjkzYTJiMDM3N2I5MWU5YzMzZTNjN2YyYTRkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDE3OjExOjQ1IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMjQwMjogQWRkIHN1cHBvcnQgZm9yIFNOTVB2MyB0cmFwcworCitjb21taXQgM2QwNTE1NjkzZjZhMGQyOWQzOWRkMGM4NjhkMzc4Yzc0YmM0Zjg3YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAwOToxNjozMyAyMDEzICswMjAwCisKKyAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjhleGVjZml4X3NpbXBsZTogUG9ydCB0byBNaW5HVyBhbmQgRnJlZUJTRAorCitjb21taXQgNWI2ZTQzMWQ5ZjY2M2EzYzMyN2Q3MWRhYzk1MzkyY2ZkODZiMzI5MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAwOTowMzo1OSAyMDEzICswMjAwCisKKyAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgOWYyZThmYzhkOWEyNmY1N2FiMDg5YWJhM2QxYWUyNmIzZThmMmQ1NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAxNyAyMjozMDozOCAyMDEzICswMjAwCisKKyAgICBGaXggZGVwZW5kZW5jeSBmb3IgRnJlZUJTRDEwCisKK2NvbW1pdCBhNTA2ZWZkZDFkYjgyNGE5ZWVlZTAzZDAwMjFjOTBmYWYzYjYyOTI0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDE3IDIyOjI5OjM0IDIwMTMgKzAyMDAKKworICAgIHNubXBkZiBtYW4gcGFnZTogZml4IGZvcm1hdHRpbmcgb2YgLUNoLy1DSCBvcHRpb25zCisKK2NvbW1pdCBhMmU5N2JlYmZjNTIxNzBmOWVjMTAzNmQyNGFhODRmNTljZjJlNTA4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDE3IDIyOjI3OjQ5IDIwMTMgKzAyMDAKKworICAgIFVwZGF0ZSB0aGUgQlNEIG11bHRpLWNwdSBjb3VudGVycyBjb2RlIHRvIHdvcmsgd2l0aG91dCBjb25maWd1cmUgaGVscC4KKworY29tbWl0IGM4NWQ2NGQ1NGIwNjg3OWEzYTY5MWRhZGZmYzAzYmZiMWY1OTA5NmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBTZXAgMTcgMDY6Mzc6MTggMjAxMyArMDIwMAorCisgICAgT25seSB0ZXN0IHRoZSBleGVjZml4IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIGlmIGl0IGlzIGVuYWJsZWQKKworY29tbWl0IGVkOGI2OTdjZWEwNjc5ZGU3YmU1YjNmNWQ0NjkxMzRlMWNkYWVkNTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgNyAxMDoyNzowMiAyMDEzICswMjAwCisKKyAgICBtNC9hY19hZGRfc2VhcmNoX3BhdGgubTQ6IEZpeCBhIGNvbW1lbnQKKworY29tbWl0IGY3NzljNWU5NDY3ODg1ODUyZjE2YzU1NDFhMzgwMTExZjllYWQwNjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgNyAyMDoyODoyOSAyMDEzICswMjAwCisKKyAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9hcHQuYzogRml4IGNvbXBpbGVyIHdhcm5pbmdzCisgICAgCisgICAgUmVtb3ZlIHRoZSB1bnVzZWQgdmFyaWFibGUgJ3JjJyBhbmQgZml4IGEgZm9ybWF0IHN0cmluZy4KKworY29tbWl0IGM2NDM5NjI3ZDA5ZjUwM2ZkYzhjZmEzMmQ4ODRlODM0NzM4MzE3NTQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXIgOCAwMDoxMzowNSAyMDExICswMDAwCisKKyAgICBhbGxvdyBmb3IgdjJjIFNFVCBzdXBwb3J0IHRlc3RpbmcKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDVjYmQ1NDM0MWEyYTc5YmY4NTM3Mzc3ZDExMzcyNDgzZjA4NjQ3YWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTQgMTQ6Mjg6MjEgMjAxMyArMDIwMAorCisgICAgcmVncmVzc2lvbiB0ZXN0czogQWRkIGEgdGVzdCBmb3IgdGhlIGV4ZWNmaXggY29uZmlndXJhdGlvbiBkaXJlY3RpdmUKKworY29tbWl0IDFjNzU2MzQ5ZTRkMzFkMzllYzJmYzUzYzY0NDBhZTUzYjNiMDNkZjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgNyAyMDoyODo1NiAyMDEzICswMjAwCisKKyAgICBzbm1wZDogdWNkLXNubXA6IEZpeCBhIHBvdGVudGlhbCBjcmFzaCBpbiBmaXhFeGVjRXJyb3IoKQorICAgIAorICAgIERvIG5vdCBpbnRlcnByZXQgYSBjb21tYW5kIHNwZWNpZmllZCB2aWEgdGhlIGV4ZWNmaXggY29uZmlndXJhdGlvbgorICAgIGRpcmVjdGl2ZSBhcyBhIHByaW50ZigpIGZvcm1hdCBzdHJpbmcuCisKK2NvbW1pdCA4YjE0MGQwOTY1ZTExZjU5MjE3NjhiZjA1ZDBjMmIxOTQxYzBkMzM1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDMxIDE3OjEwOjU1IDIwMTMgKzAyMDAKKworICAgIFNOTVAtVEFSR0VULU1JQjogRGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgYXQgZmlsZSBzY29wZSBzdGF0aWMKKyAgICAKKyAgICBBbHNvLCBkZWNsYXJlIHRob3NlIHZhcmlhYmxlcyBjb25zdCB0aGF0IGFyZSBub3QgbW9kaWZpZWQuCisKK2NvbW1pdCA3YjgyYzYxZTc1M2UxNTdjNGI4Njk4MjE5MDA2ZjJmODNkZjUyODAxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDMxIDE2OjUxOjE1IDIwMTMgKzAyMDAKKworICAgIFNOTVAtVEFSR0VULU1JQjogRWxpbWluYXRlIHR3byBzdXBlcmZsdW91cyBjYXN0cworCitjb21taXQgZGJjZjQ3ZGQ0ZmU1MjYyYWQwZmFkN2M5Nzc0NTIwOTU4OTU0MGM0MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgMTEgMTA6MjE6MzIgMjAxMyArMDIwMAorCisgICAgUmV3b3JkIHRoZSBpbmNsdWRlRmlsZSBzZWFyY2ggcHJvY2VzcyB0byBmaXQgdGhlIGltcGxlbWVudGF0aW9uLgorCitjb21taXQgODUwNzMwODVkNjdlZDY2YWI3NDYxMWM4ZTVmODEwMTkyNDkxYmE2OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCA5IDIyOjI2OjIzIDIwMTMgKzAyMDAKKworICAgIFBhdGNoIGExMjYzOiBNYWtlIGRhdGFiYXNlIG5hbWUgY29uZmlndXJhYmxlIGZvciB0cmFwZCBzcWwgbG9nZ2luZy4KKyAgICBUaGFua3MgdG8gUm9iaW4gU29uZWZvcnMuCisKK2NvbW1pdCA3ZTcyNThlZjhiMzJmOTc0MDQ4ZjNmZDA5OGE5ZGE1MjZkYTJlNjEzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDkgMjI6MTc6MTUgMjAxMyArMDIwMAorCisgICAgUGF0Y2ggYTEyNjI6IEZpeCBtZW1vcnkgZXJyb3IgY2F1c2VkIGJ5IGNvbmZ1c2luZyBzaXplIG9mIHBvaW50ZXIKKyAgICB3aXRoIHNpdXplIG9mIHBvaW50ZWQgYXJlYS4gVGhhbmtzIHRvIFJvYmluIFNvbmVmb3JzLgorCitjb21taXQgNTg2ZTA3YjhkZTUxYjA1NDAwZDU4MmZhY2Q5MWQ0NDEwZGQzNzcwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAzMSAxNzowOTo1OSAyMDEzICswMjAwCisKKyAgICBzbm1wZDogQ29uc3RpZnkgYSBmZXcgYXJndW1lbnRzIG9mIE1JQiByZWdpc3RyYXRpb24gZnVuY3Rpb25zCisgICAgCisgICAgTm90ZTogdGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIEFCSS4KKworY29tbWl0IDQ0YzM2NzFkZDkzZmUwZjA4Mjk5ZTYxZDBhNDIyZmQwNzJiNDkwZTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgOCAwNzozNTo0NiAyMDEzICswMjAwCisKKyAgICBSdW4gYXV0b3JlY29uZgorCitjb21taXQgNjJkYWRlZmExYjI2ODhjMDI3OTJlOWZkMmQzZmMzMWM3OWVkMTFjMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIFNlcCA2IDExOjU0OjEzIDIwMTMgKzAyMDAKKworICAgIHN3cnVuX2RhcndpbjogRml4IGJ1ZmZlciBvdmVycnVuIHdoZW4gY29sbGVjdGluZyBoclNXUnVuUGFyYW1ldGVycworCitjb21taXQgMWUwNTI2Zjg1ZWQ2MTU2N2NhNmVhNTNiNTY2Yzc3Mjk5MjExMWM5ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCA0IDIyOjMwOjQwIDIwMTMgKzAyMDAKKworICAgIEFkZCBhIGNvdXBsZSBvZiBjb250cmlidXRvcnMgdG8gUkVBRE1FCisKK2NvbW1pdCBlZGM2MDhlYmQ1ZDAyMTk4NjNiYzVmNjU2ZDE3N2IxZDU2MTA0OGMyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDQgMjE6NTk6MTggMjAxMyArMDIwMAorCisgICAgRml4IGEgcHJpbnRmIGZvcm1hdCB3YXJuaW5nLgorCitjb21taXQgZmIyNGY3MzNjYjMxNmMzNWNjZmRjNTlmNDg3YjY1ZTBjZDk3NGM2OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCA0IDIxOjU0OjI3IDIwMTMgKzAyMDAKKworICAgIHNubXBuZXRzdGF0OiBJbmRlbnQgSUNNUCBoaXN0b2dyYW0gZm9yIHJlYWRhYmlsaXR5LgorCitjb21taXQgZjc5NDNhNWQ1OGE2Zjk1M2M3OWZiNTVhYjg5N2M4NDkyMjhlZGI4YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCA0IDIxOjQ1OjE5IDIwMTMgKzAyMDAKKworICAgIFJlY29nbml6ZSB6ZnMgZmlsZSBzeXN0ZW1zCisKK2NvbW1pdCBhYjQzNzBiYWY1Y2NjMTQ2ZjhkMWM4MzliYjBmNDE5ZWUzN2U3MWMyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDIgMjE6MjE6MjUgMjAxMyArMDIwMAorCisgICAgUGF0Y2ggYTEyNjEgKEJpbGwgRmVubmVyKTogRml4IGNyYXNoIHdoZW4gbWliLWluZGV4ZXMgYXJlIG5vdCBhbGwgcmVhZGFibGUKKworY29tbWl0IGM2Y2FhMzAwN2Y2MGY2Y2RlYWExMzQxNTI3NTg2NDVhNzNhN2ZlNjQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMiAxOTozOToxNCAyMDEzICswMjAwCisKKyAgICBzbm1wbmV0c3RhdDogUHJvcGVyIHRlc3RzIGZvciB2Mi92MyBleGNlcHRpb24gcmVzdWx0cyAoQnVnIGEyNDc3KQorCitjb21taXQgMzk0MjBiZDQwYjdhMWJhNzIwYTljYmI5MjI2NGQzZjljYzBhN2UyZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyMSAyMjowODo0MSAyMDEzICswMjAwCisKKyAgICBQQVRDSCBhMTI2MDogU3VwcG9ydCBtdWx0aS1jcHUgdXNhZ2UgZm9yIEZyZWUvTmV0L09wZW4tQlNELgorICAgIFRoYW5rcyB0byBQYWJsbyBDYXJib25pIGZvciBmaXJzdCBzdGFiIGF0IHRoaXMuCisKK2NvbW1pdCA2MjMwNWNkMDI4ZDhhYmY0MzAxMjFlOTAwOGFjYzhmMGQxODcxZTFjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDIxIDIyOjA4OjQxIDIwMTMgKzAyMDAKKworICAgIFBBVENIIGExMjYwOiBTdXBwb3J0IG11bHRpLWNwdSB1c2FnZSBmb3IgRnJlZS9OZXQvT3Blbi1CU0QuCisgICAgVGhhbmtzIHRvIFBhYmxvIENhcmJvbmkgZm9yIGZpcnN0IHN0YWIgYXQgdGhpcy4KKworY29tbWl0IGNjMmZlNmJkZTZhM2MyOGIzYzFhZDE2NWM5YmEzZmMxZDU4M2MyNTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBBdWcgMjUgMDg6MjM6NDMgMjAxMyArMDIwMAorCisgICAgSVAtTUlCOiBGaXggRG94eWdlbiBoZWFkZXIgb2YgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuKCkKKworY29tbWl0IDk2MzAyYWY3ZmMzMTA4YzIwODIyNzQzMmYwZjBiNzVmM2U3YjkwNmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBBdWcgMjggMTA6NTk6MDUgMjAxMyArMDIwMAorCisgICAgQ29ycmVjdCBjb252ZXJzaW9uIGZhY3RvciBmcm9tIG1pY3Jvc2Vjb25kcyB0byBjZW50aXNlY29uZHMuCisKK2NvbW1pdCBlOGNmNzY2ZTA4MzgzNGFmN2ZkZmVkODc3ZGJlODgxMGJmMDBhNGVhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDE5IDIyOjE3OjExIDIwMTMgKzAyMDAKKworICAgIEZpeCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4gdG8gdGFrZSBhbiBhcmd1bWVudCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgYXMgZG9rdW1lbnRldAorCitjb21taXQgYTBjNTlhM2I0NThlOGE4ZGZiMDU5YTYyNzkyZDI1YTRjNWM5ZmM5ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOSAyMjoxNDoxNSAyMDEzICswMjAwCisKKyAgICBGaXggbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuIHRvIHRha2UgYW4gYXJndW1lbnQgaW4gbmV0d29yayBieXRlIG9yZGVyIGFzIGRva3VtZW50ZXQKKworY29tbWl0IDY2YjliZmJhNGVhZTg0OTQ0YWJmNGU2ZDA3NDg5NGFjZDA1MTNjNmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTkgMjI6MTI6NTcgMjAxMyArMDIwMAorCisgICAgRml4IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbiB0byB0YWtlIGFuIGFyZ3VtZW50IGluIG5ldHdvcmsgYnl0ZSBvcmRlciBhcyBkb2t1bWVudGV0CisKK2NvbW1pdCBlYzk2YjM1ZDUwNjBjMDliOWY1M2Q0ZGVjNzNmYjc5NjVjMmFjMTQ1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDE5IDIyOjExOjM2IDIwMTMgKzAyMDAKKworICAgIEZpeCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4gdG8gdGFrZSBhbiBhcmd1bWVudCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgYXMgZG9rdW1lbnRldAorCitjb21taXQgYjI3YjQ3YjU3OTg0NjllOWFiNWJkNGI1MWFjMzlkNDNmY2Q5NTYwOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEF1ZyAxNyAxMDoxMjoxNCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIHN1cmUgVGVzdDo6SGFybmVzcyBpcyBvZiBhdCBsZWFzdCB2ZXJzaW9uIDEuMjEKKyAgICAKKyAgICBUZXN0OjpIYXJuZXNzIDEuMjEgaXMgdGhlIGZpcnN0IHZlcnNpb24gdGhhdCBpbXBsZW1lbnRzIFRBUCB2MTIgd2hpY2ggYWxsb3dzCisgICAgcHV0dGluZyB0aGUgaGVhZGVyICgxLi5OKSBhZnRlciB0aGUgdGVzdHMgYW5kIHNpbmNlIG91ciB0ZXN0cyB1dGlsaXplIHRoYXQKKyAgICB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHRlc3QgcnVubmVyIHN1cHBvcnRzIGl0LgorCitjb21taXQgMTRmOGQ0YWQ2ZjA2ZDA5ZDg3MDk2ZGQ2ODEzN2ExMjVhMDM5YzU2MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyOSAxNzo0Mjo1NCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBBSVg6IE1ha2UgdWRwLW1pYiBidWlsZAorCitjb21taXQgMzhkNzdjN2MyMGEzZTc5NzljMDljNTE0NGY4NjkzNGVkNDY1NDBkYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyOSAxNzozOTozOCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBBSVg6IE1ha2UgdGNwLW1pYiBidWlsZAorCitjb21taXQgNThmZDIzYjcxMTBjOTNlZTQ5NmZmYWZlODY4NTM5YzJhZjg1NDNiZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEF1ZyAxNiAxMDozOTowMyAyMDEzICswMjAwCisKKyAgICBXaW4zMjogQnVpbGQgZml4OiBFeHBvcnQgc2tpcF93aGl0ZV9jb25zdCgpLCBza2lwX25vdF93aGl0ZV9jb25zdCgpIGFuZCByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCgpCisKK2NvbW1pdCAwYWI5Y2QxNjU1ZDQ2Zjk2OGRjMTJiZDY3MTRhYzE3YjliY2U1ZTcxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgQXVnIDE2IDA4OjI4OjA4IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXAtdXNtLWRoLW9iamVjdHMtbWliOiBBdm9pZCB0cmlnZ2VyaW5nIGFuIGFzc2VydCBzdGF0ZW1lbnQgaW4gbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoKQorICAgIAorICAgIFRoZSBjYWNoZSB0aW1lb3V0IGZvciBzbm1wLXVzbS1kaC1vYmplY3RzLW1pYiBpcyAtMS4gQW55IGNhY2hlIHRpbWVvdXQKKyAgICB2YWx1ZSA8IDAgZGlzYWJsZXMgY2FjaGluZy4gSG93ZXZlciwgc3RyaWN0bHkgbmVnYXRpdmUgdmFsdWVzIHRyaWdnZXIKKyAgICB0aGUgYXNzZXJ0IHN0YXRlbWVudCBpbiBuZXRzbm1wX3JlYWR5X21vbm90b25pYygpLiBBdm9pZCB0cmlnZ2VyaW5nIHRoYXQKKyAgICBhc3NlcnQgc3RhdGVtZW50LgorCitjb21taXQgMWZhNTg0YjIyMmM1NjcyNDM3OGY1Yzg1OTkzZWVlZTY1MTUyNjBhYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEF1ZyAxNiAxMDowMjo0NyAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBGaXggTkVUU05NUF9GRF9TRVRfQllURVMoKQorICAgIAorICAgIFRoaXMgcGF0Y2ggYXZvaWRzIHRoYXQgdW5pdCB0ZXN0IFQwMDlsYXJnZV9mZF9zZXRfY2xpYiBjcmFzaGVzIG9uIEFJWC4KKworY29tbWl0IDk1YWMxOTBiNTI2ZGJhNTIwNTYzNzQxMWE4OTJiNTJiOWVkNmI5NGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdWwgMjEgMTc6MTY6NDIgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogQlVHOiAyNDc2OiBzbm1wZCBmYWlscyB0byBzdGFydCBvbiBBSVgKKyAgICAKKyAgICBPbiBhbiBBSVggc3lzdGVtIHRoZXJlIGlzIG5vIDxrdm0uaD4gaGVhZGVyIGZpbGUgbm9yIGRvIHRoZSAvZGV2L2RtZW0KKyAgICBvciAvZGV2L2RydW0gZGV2aWNlcyBleGlzdCBhbmQgaGVuY2UgRE1FTV9MT0MgaXMgbm90IGRlZmluZWQuIEF2b2lkCisgICAgdGhhdCBpbml0X2ttZW0oKSBmYWlscyBpbiB0aGF0IGNhc2UuCisKK2NvbW1pdCA1MDQ4MWI3NjllMjlmYzVjZTZiMWU0MGNlNTY4MTg1YmIwODk4NDU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgQXVnIDE2IDA3OjIyOjAyIDIwMTMgKzAyMDAKKworICAgIHNubXBkOiBSZWZhY3RvciBpbml0X2ttZW0oKQorICAgIAorICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsaXR5LgorCitjb21taXQgY2Q3ZWY3YmUzOTEwMzVkOWRmMDVlZGM2YWM5ZTZmMzUxOWI0NmY4YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEF1ZyAxNCAyMzozODoyMSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBCZSBtb3JlIHJvYnVzdCBpZiBjbG9ja19nZXR0aW1lIGZhaWxzLgorICAgIAorICAgIE9uIFJIRUwzIGl0IHNlZW1zIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCApIGFsd2F5cyByZXR1cm5zIEVJTlZBTCBidXQKKyAgICBpdCB3b3JrcyBmb3IgdGhlIG90aGVyIGNsb2Nrcy4KKyAgICAKKyAgICBGdXJ0aGVyLCB0aGUgb2xkIGNvZGUgd2hpY2ggcmV0dXJuZWQgYSBjb25zdGFudCB7IDAsIDAgfSBjYXVzZWQgdGhlIHRlc3Qgc3VpdGUKKyAgICB0byBnZXQgc3R1Y2sgaW4gYSBsb29wIGlmIG5vIHJlc3BvbnNlIGFycml2ZWQgLSB0aHVzIHRoaXMgY29kZSBoYXZlIHRoZQorICAgIGFkdmFudGFnZSBvZiB3b3JraW5nIGxlc3MgYmFkLgorCitjb21taXQgOWQ3MWZlZWEyNzFmOTFjYzliN2FkZWU2NjEzYWYxOWViYTdlYzZjZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMTQgMTU6NTY6NTYgMjAxMyArMDIwMAorCisgICAgRml4ZWQgcmV0dXJuIHZhbHVlIG9uIGVycm9yLgorCitjb21taXQgOTYyMWY0Y2RjNWExOWNlZTRlMTFiZjI3MDk0YWJmMzMzOWRkYzMwZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMTQgMTU6NDg6MzkgMjAxMyArMDIwMAorCisgICAgUmVtb3ZpbmcgdXNlbGVzcyBjaGVjaywgZW50cnktPmRfbmFtZSBpcyBhcnJheSBhbmQgY2FuJ3QgYmUgTlVMTC4KKworY29tbWl0IGU0MWMyZjU3NGMyNWQ4ZGQyNzNmMjQwNmVlZWFjMTliYzJhZTE2ZGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDEyIDE0OjMwOjUxIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIHBhcnNpbmcgb2Ygc2VxdWVuY2VzLgorICAgIAorICAgIERvbid0IG92ZXJ3cml0ZSAnZGF0YScgdmFyaWFibGUsIGl0J3MgdXNlZCB3aGVuIHBhcnNpbmcgYnVsayByZXNwb25zZXMuCisKK2NvbW1pdCAzOTAzMDMwNTlmYmQ5OGIxZWU3NjIxZGRkNGFkNGMxMWQxMDBmZmY5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSnVsIDI4IDIxOjI4OjE0IDIwMTMgKzAyMDAKKworICAgIFJldmVydCA3OGRhYzZlMzc5NDNkMWFkOTk4NDE4OTg4MDZlYTYwYjBlZWRlNjM2IGFuZCByZXNvbHZlIGEyNDc4IGluIGEgd2F5IHRoYXQgYXZvaWRzIHRydW5jYXRpbmcgc25tcFRhcmdldEFkZHJUaW1lb3V0LgorCitjb21taXQgZTU5ZDVkYjZkNmU3MmQxMzQ1OTFiYmFhYTZmYWE1OWIyOTMzODE5MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEp1bCAyOCAyMToxNzo1OCAyMDEzICswMjAwCisKKyAgICBDaGVjayB0aGF0IHRoZSB0aW1lb3V0IHZhbHVlIGlzIGluIHJhbmdlLgorCitjb21taXQgNGVjYjM2YTdhYmEzYWIwZWZhODkzNTE2NTBjZTA1M2ViY2Y0OGI2YQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEp1bCAyOSAyMTo1NDoyNSAyMDEzICswMjAwCisKKyAgICBDaGVjayB0aGF0IHNubXBUYXJnZXRBZGRyVGltZW91dCBoYW5kbGVzIHNldHRpbmcgcHJvcGVybHkKKworY29tbWl0IDFhZTg1YjY3MmViMDdkMGMwMWE1NGUwNmQzZGRkNGY0ZGM1OGZmMmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKdWwgMjggMTA6NDM6MTcgMjAxMyArMDIwMAorCisgICAgQWRkIHNvbWUgbW9yZSB0ZXN0cyBmb3Igc25tcFRhcmdldEFkZHIKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA2ZTEzZWJiODVlNDQwNDk4NDZlYWU3ZjYwZTA1MDM3NWY5YWNmNThlKQorICAgIFNhbml0aXplZAorCitjb21taXQgNmE1YTA0N2NiYzExZDYyZGYwNGE5NjY2OTA4Zjc2NTJiMjE3YzFhYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEF1ZyAxIDIzOjE5OjM0IDIwMTMgKzAyMDAKKworICAgIFJlaW5zdGF0ZSB0aGUgY2hlY2sgZm9yIGNyZWF0aW9uIG9mIGVudHJpZXMgd2l0aCBlbWJlZGRlZCBOVUwncyBpbiB0aGUgbmFtZQorCitjb21taXQgNTMzYmI4MGE1YTQzMDViMzVkYmI3OTc0NDRiZDU5NmQ3ZDU5OTUxYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEF1ZyAxIDIyOjU1OjQ1IDIwMTMgKzAyMDAKKworICAgIFNhbml0aXplLgorICAgIAorICAgIENoYW5nZSB0byB1c2UgU05NUHYzIHNpbmNlIHRoYXQgaXMgd3JpdGVhYmxlIGluIFY1LTYtcGF0Y2hlcy4KKyAgICBDaGFuZ2UgdG8gY2hlY2sgdmFsdWVzIG9uIGluZGV4ICdBJworICAgIFJlbW92ZSB0aGUgY2hlY2sgZm9yIGVtYmVkZGVkIE5VTCBpbiBpbmRpY2VzLgorCitjb21taXQgYjI0YmY0NjIyMGFhYWY1Nzk0ZTk0MGY1ZDQ2NzNkYjcxMzM5ZjljMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEp1bCAyMCAxMjozOTo1OSAyMDEzICswMjAwCisKKyAgICBBZGQgdGVzdHMgZm9yIHNubXBUYXJnZXRBZGRyCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNzFmMzE5Y2QyMzQ0NWM2ZTIyYTYwYTFhODVmMzFjMmI2OTA0YjNmYikKKworY29tbWl0IDZlMTNlYmI4NWU0NDA0OTg0NmVhZTdmNjBlMDUwMzc1ZjlhY2Y1OGUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKdWwgMjggMTA6NDM6MTcgMjAxMyArMDIwMAorCisgICAgQWRkIHNvbWUgbW9yZSB0ZXN0cyBmb3Igc25tcFRhcmdldEFkZHIKKworY29tbWl0IDA3NjlmNDIwZDhmNDI3OTkzYjEzNDBmZGI3ZWNiM2JjMDQ5ZDNmNmMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgMjUgMDg6MTU6MzIgMjAxMyArMDIwMAorCisgICAgRmlyc3Qgc2hvdCBvbiBoYW5kbGluZyBjZXJ0aWZpY2F0ZXMgd2l0aCBlbWJlZGRlZCBudWwgY2hhcmFjdGVycworCitjb21taXQgZDgzM2IwYzhiZTUwOWJmYTNiODAwMWFlNmY1NTIyODljZTk1NjdkMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEp1bCAyMCAxMjo0MTo0MCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgTlVMIGNoYXJhY3RlcnMgaW4gdGhlIGluZGljZXMgZm9yIHNubXBUYXJnZXRBZGRyVGFibGUKKworY29tbWl0IDcxZjMxOWNkMjM0NDVjNmUyMmE2MGExYTg1ZjMxYzJiNjkwNGIzZmIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBKdWwgMjAgMTI6Mzk6NTkgMjAxMyArMDIwMAorCisgICAgQWRkIHRlc3RzIGZvciBzbm1wVGFyZ2V0QWRkcgorCitjb21taXQgZWEzOWUzNjc2NjY1YjdlOGNjNWRmZWI1YmJiY2QwYWQ0MzRhZDkxMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCAxOCAwMTozNjoyNiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHRoZSBkYXRhIGFyZ3VtZW50IHRvIHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nIGFjY2VwdCBjb25zdGFudCB2YWx1ZXMKKworY29tbWl0IDc4ZGFjNmUzNzk0M2QxYWQ5OTg0MTg5ODgwNmVhNjBiMGVlZGU2MzYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMjIgMTI6Mzk6MDAgMjAxMyAtMDcwMAorCisgICAgZml4IGJ1ZyBudW1iZXIgI2EyNDc4OiBmaXggbWliIHJlcHJlc2VudGF0aW9uIG9mIHRpbWVvdXQgdmFsdWVzCisKK2NvbW1pdCBhN2UzYmM4ZGRiZTM4N2ViZjZmM2Y2YjA1MGUyOTkyOTU2YmQyZTYxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjE0OjQ3IDIwMTMgKzAyMDAKKworICAgIEZpeGVzIGZvciBtZW1vcnkgc3RhdGlzdGljcyBmcm9tICpCU0QKKworY29tbWl0IDlkYmUxMjQwM2NlYWFmZTYxN2Y3ZDQ5OTkzMzE2YTI0OWZjYmI5OWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MTM6MzYgMjAxMyArMDIwMAorCisgICAgRml4IGEgbWlzc2luZyBuZXdmaWxlIGluIGEgZGVidWcgbWVzc2FnZQorCitjb21taXQgMDQxZGVlZGY4MTUzN2JjNjE2OTI5ODc1M2Y5ZGNhM2Y2Y2Q2MWEzNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDoxMjoxMiAyMDEzICswMjAwCisKKyAgICBNYWtlIHN1cmUgd2UgZG9uJ3QgbWFrZSBJUHY2IG1hc2sgbG9uZ2VyIHRoZW4gMTI4CisKK2NvbW1pdCBjNjdjNzg5NDAzMzlmYWVhYjQyYjFiMWEwYTZiZTZjZDZkZmUyZTIyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjA2OjMxIDIwMTMgKzAyMDAKKworICAgIEltcGxhbWVudCBpcEFkZHJlc3NUYWJsZSBmb3IgKkJTRAorCitjb21taXQgYjE4MWU0M2E2ZDFmNTY3YmZkMTA3MTdhNzdkZjE4NDhlM2JiMGY0MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDowNTowOCAyMDEzICswMjAwCisKKyAgICBNYXJrIE9TIHRocmVhZHMgYXMgc3VjaC4KKworY29tbWl0IGUzNmE1Y2M1ZjIwMjcyYWZmZjQyMjhlN2U0MzkxZGQ1ZTZjMDYzYjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MDM6MzYgMjAxMyArMDIwMAorCisgICAgRmljIHNvbWUgbWFuIHBhZ2UgY3Jvc3MgcmVmZXJlbmNlcworCitjb21taXQgZWNmODY4MmQ4NjRkMmYwODUyNTA3ODU0Mzg1OGQzNjFiM2FkY2E1YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTAgMTA6NDc6MzMgMjAxMyArMDIwMAorCisgICAgTG93ZXIgaW1wb3J0YW5jZSBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXMsIHRoZXkgc3BhbSBzeXNsb2cuCisKK2NvbW1pdCBlZjk2MzA2M2RlNDk0ODViZDkxYzEyOWUwNTNmMDZkMDc0NDQ4M2UxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCA0IDExOjM0OjI1IDIwMTMgKzAyMDAKKworICAgIEZpeGVkIHNpemUgb2YgbmV0bGluayBtZXNzYWdlLgorICAgIAorICAgIFByZXZlbnRpbmcga2VybmVsIHRvIGxvZyAnbmV0bGluazogMTIgYnl0ZXMgbGVmdG92ZXIgYWZ0ZXIgcGFyc2luZyBhdHRyaWJ1dGVzLicgbWVzc2FnZS4KKworY29tbWl0IDJlMGQxMDg3MzEzYjBmYTA4M2UyYjFjYTQ4OTVmYmYyNDhkNjNjYTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgNCAyMjowNDoxMiAyMDEzICswMjAwCisKKyAgICBSdW4gYXV0b3JlY29uZgorCitjb21taXQgYzdmYmE3OGUxMjI1MjU0YTBmNjU2MDVmMzgxYWVkZDdkOGEyMTJjYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCA0IDIxOjQ3OjA5IDIwMTMgKzAyMDAKKworICAgIFJ1biBhdXRvcmVjb25mCisKK2NvbW1pdCA1NzFiZDQwN2Y4YmU5Yzk0Y2M1NTJkNGQzYjdmNWI2YjA5ODRkMjM3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDQgMjE6Mzk6NTkgMjAxMyArMDIwMAorCisgICAgUnVuIGF1dG9yZWNvbmYKKworY29tbWl0IDhhYTUwZWRiYTdhMmQ5NjZkOGRmYzdmZjRkN2M3OGVmZGRlOGM1YmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgNCAwODo1Mzo1NiAyMDEzICswMjAwCisKKyAgICBVc2UgQUNfTElOS19JRkVMU0UgaW5zdGVhZCBvZiBBQ19UUllfTElOSyBhcyB0aGUgbGF0dGVyIGlzIGRlcHJlY2F0ZWQKKworY29tbWl0IDU5YzZhZTM0NjI1ZWUwNGFjZTM4MjRlYzQwNDYxM2UwYjUxZGMxYjAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNzo0MDo1NCAyMDEzICswMjAwCisKKyAgICBVc2UgdGhlIGNwcCBhbmQgbGlua2VyIGZsYWdzIGZyb20gbXlzcWxfY29uZmlnIHdoZW4gY2hlY2tpbmcgZm9yIG15c3FsIGhlYWRlcnMuCisKK2NvbW1pdCBmODljZmNhZmRhZTIxZmFiNTBhNzBiZGRmMTU4ZmZkOWU0ZTAwMWQyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgSnVsIDIgMTc6Mzk6MjUgMjAxMyArMDIwMAorCisgICAgVXNlIHRoZSBvdXRwdXQgb2YgbXlzcWxfY29uZmlnIC0taW5jbHVkZSBpbnN0cmVhZCBvZiB0aGUgb3V0cHV0IG9mIG15c3FsX2NvbmZpZyAtLWNmbGFncyBpdG8gZmluZCBpbmNsdWRlIGZpbGVzLgorICAgIAorICAgIEFjY29yZGluZyB0byB0aGUgbXlzcWxfY29uZmlnIG1hbiBwYWdlLCAtLWluY2x1ZGUgaXMgcmVjb21tZW5kZWQgZm9yIGdyZWF0ZXIKKyAgICBwb3J0YWJpbGl0eSBzaW5jZSAtLWNmbGFncyBtaWdodCBjb250YWluIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUgY29tcGlsZXIgdGhhdAorICAgIHdhcyB1c2VkIHRvIGJ1aWxkIGxpYm15c3FsY2xpZW50IHdoaWNoIG1pZ2h0IGNsYXNoIHdpdGggdGhlIG9uZXMgdXNlZCB0bworICAgIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbi4KKworY29tbWl0IDY4YTZhMWNhNmRjNGNhODkwMWJhY2FiNTk4MzI2YWY3M2I0NDQ2NTQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNzozMDoyOSAyMDEzICswMjAwCisKKyAgICBPbmx5IGNoZWNrIGZvciBteXNxbC9teXNxbC5oIG9uY2UuIFJlbW92ZSBIQVZFX01ZU1FMX01ZU1FMX0ggc2luY2Ugbm90aGluZyB1c2VzIGl0LgorCitjb21taXQgYWQ4N2JiNjA4YjMwNTU2N2EzYzVlYWYwNDZiN2M5OGVhM2U0YmRkNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgNCAxMTozMDowNCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMjQ3MjogZnJvbSBTdW5pbDogZG9uJ3QgdXNlIEhCS1QgYXMgaGVhcnRiZWF0IGludGVydmFsIGluIFNDVFAtTUlCOjpzY3RwQXNzb2NUYWJsZS4KKworY29tbWl0IDRjNGE0MjgxZmQ1YjJjNjE1NmM1MTIwZjlhMmU4YjcwOGY0NjZjY2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDQgMTE6MDg6NDggMjAxMyArMDIwMAorCisgICAgaW5jbHVkZURpciBpcyBub3QgcHJlZGljdGFibGUgd2l0aCByZWxhdGl2ZSBwYXRocworCitjb21taXQgNzllOGRkMmEzNzJhMjBlZTk3ZGUxYzcxMDdiNTlhZDRhYWY4OWEzNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgNCAxMDo0NzoyOSAyMDEzICswMjAwCisKKyAgICBVcGRhdGUgY29uZmlndXJhdGlvbiBkb2N1bWVudGF0aW9uIHdpdGggaW5jbHVkZUZpbGUgYW5kIGluY2x1ZGVEaXIuCisKK2NvbW1pdCBlMGU4MDQ0ODJiZWM3MGY0YzQxNmEzNWZjYjMyM2E0MTY5OTY1YzVmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSnVsIDMgMTU6MDg6MTQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogQlVHOiAyNDcwOiBBY2NlcHQgNjU1MzUgYXMgYSB2YWxpZCBJUHY2IHBvcnQgbnVtYmVyCisKK2NvbW1pdCBkZDMzMmEwMzVlODUzYzcyYTgzMjc0ODQ2OWJhYjdiODgyZTI3YjdjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDIgMDc6MDA6NTEgMjAxMyArMDIwMAorCisgICAgQlVHIGEjMjQ2MzogRml4IGNvbmZpZ3VyZSB0byByZXNwZWN0IGRhdGEgZnJvbSBteXNxbF9jb25maWcuCisKK2NvbW1pdCA0MDhjYzk3MzJjMzQ2MTExZmMxZmRhMjNlMTM2ZDYwODgzY2RiN2U0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAxIDE0OjI1OjQxIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogY29ycmVjdGx5IHJlcG9ydCBlcnJvciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIE9JRC4KKworY29tbWl0IDlhMmJmYzhmOTVkNmU5MjZkY2JmMTZmZjQ0YjUzYjI3ZTM4Yzg0MzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDEgMTM6NTQ6MzggMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBGaXhlZCByZXR1cm5pbmcgb2YgZW1wdHkgc3RyaW5ncy4KKyAgICAKKyAgICBWYXJiaW5kIHR5cGUgKFNOTVBfTk9TVUNIT0JKRUNUIGV0Yy4pIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBlcnJvcnMgaW5zdGVhZCBvZiBsZW5ndGggb2YgdGhlIHZhcmlhYmxlIC0gaXQgY2FuIGJlIGVtcHR5IHN0cmluZy4KKworY29tbWl0IDFhMGYwNzU3NGE4MGQxZDZhNjc4OGNhZWIzOTFhMWQyZmVmOTU3MTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSnVuIDI4IDEwOjM3OjQ2IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBzaG93IExpbnV4IGtlcm5lbCB0aHJlYWRzIGluIGhyU1dSdW5UYWJsZS4KKworY29tbWl0IDI2NTljMGY2YmQ4NmYwMTcxODY5ZDM0ZmY4YTdkNDgxOTRlYTRiMzEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDIxIDA5OjEzOjQxIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGRlZCBidHJmcyBzdXBwb3J0IHRvIGhyRlNUYWJsZQorCitjb21taXQgYTg0MDM5ZDBhMWQ2ZjU1MGI0NzNkMjk1OTIxMDEwZDgwZTE4ZDgzZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1biAyNSAxNDo1NToyNiAyMDEzICswMjAwCisKKyAgICBzbm1wX3N0cmNhdDogZG9udCB0ZXN0ICpidWYgYmVmb3JlIHdlIGhhdmUgdHJpZWQgcmVhbGxvYworCitjb21taXQgNTU1M2VmNDM2MmQ1MjRhMDg4YjUxOWUxMzU1NjE1OGU1ZDYyNWVjNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEp1biAzIDAyOjQ4OjA2IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBwcmludGYoIiVzIiwgTlVMTCkgYXMgdGhhdCBpcyB1bmRlZmluZWQgYmVoYXZpb3VyLgorCitjb21taXQgODk0MTZlNzlmNWM1MDU2OGU5OWMwN2ZhYjA2YTlhZTlmOTc2YmJlZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEp1biAyNCAyMjoyMjowMyAyMDEzICswMjAwCisKKyAgICBCVUc6IEEyNDQxOiBDb3JyZWN0IGNvbW1lbnQKKworY29tbWl0IDFhM2FlNjQ3N2I4MTYzYTFiNDNiODM0YWJiMzBiMWYwMzE0NWFiNjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMjA6Mjc6MzQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogSE9TVC1SRVNPVVJDRVMtTUlCLCBoclNXUnVuIHRhYmxlOiBQYXJzZSAvcHJvYy88cGlkPi9zdGF0IGNvcnJlY3RseSBvbiBMaW51eAorICAgIAorICAgIFRoaXMgaXNzdWUgd2FzIHJlcG9ydGVkIGJ5IFZpbmNlbnQgQmVybmF0IDx2aW5jZW50LmJlcm5hdEBkYWlseW1vdGlvbi5jb20+LgorICAgIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTcvLgorCitjb21taXQgZjkyZmZlOTE3YTMwMGM0MWViZTA3ZTI0YzY0MTg4NTVlNzU5ZjkzOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxOTozNzowMyAyMDEzICswMjAwCisKKyAgICBzbm1wdHJhcGQ6IEZpeCBhIGRvdWJsZSBmcmVlIGluIGFuIGVycm9yIHBhdGgKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCBjNWYzYTFkOGJiNTgwNDc5OWI2MDJkMjc2OWIwMzFkNmZhZjVmMGVkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE3OjUxOjQzIDIwMTMgKzAyMDAKKworICAgIHNubXBsaWI6IGhleF90b19iaW5hcnkyKCk6IFJldHVybiAtMSBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscworCitjb21taXQgZjhmMDhlMWQ2ZDNlYzgxOTRmYWJkNmFiMDAyYWI5MTdhZmJhOTFhMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNzoxMzowMSAyMDEzICswMjAwCisKKyAgICBzbm1wbGliOiBTaW1wbGlmeSB0aGUgY29kZSBmb3IgZGVsZXRpbmcgYSByZXF1ZXN0IGZyb20gdGhlIHJlcXVlc3QgbGlzdAorICAgIAorICAgIFRoZSBnb2FsIGlzIChob3BlZnVsbHkpIHRoYXQgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjb25mdXNlCisgICAgQ292ZXJpdHkgYW55bW9yZS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCBlZjZkNWM3YTAzMTMyNDdhNmM5NDczMjYxNzc3ZTk2M2Y3YTQ5NTI5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjQ4OjIyIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IHNubXBfc3RyY2F0KCk6IENoZWNrICpidWYgYmVmb3JlIHVzaW5nIGl0CisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgMjU2NmI4M2ViZWIwZTM0ZWVhOTA3OTI4YzU0YzJiNGU3NGZmMzdmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDoyMzozMyAyMDEzICswMjAwCisKKyAgICBoclNXSW5zdGFsbGVkIHRhYmxlOiBDaGVjayBzdGF0KCkgcmV0dXJuIHZhbHVlICgyLzIpCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgNDljZmU0ZDg0MGM1OGUxMjAyZmEyNzFmYmU3NjBiZDc1MjZhODNhOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDoyMzowMyAyMDEzICswMjAwCisKKyAgICBoclNXSW5zdGFsbGVkIHRhYmxlOiBDaGVjayBzdGF0KCkgcmV0dXJuIHZhbHVlICgxLzIpCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgNWRmNTQ2MjYzOWYyNDNkNTkyOWZhOWJhMTRkMjBiMzcxMWY3Y2FjZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDoyMToxOCAyMDEzICswMjAwCisKKyAgICB1Y2Qtc25tcDogZmluZF9kZXZpY2UoKTogUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZQorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLworCitjb21taXQgMTNjZTE5OTZhODJlMGI0NThiMjZhZTM5YWJmMjAxMmRiNTljOGE1NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDoyMDoxNSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBfaW5zZXJ0X25zZmlsZSgpOiBDaGVjayBzdGF0KCkgcmV0dXJuIHZhbHVlCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgODFhMGQ4NTkxNjNmOGQ1NDkwODUyNWI1MjI0MzI5NWQ3YjQxNDU1MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDowNzozNyAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBGaXggYSBiYWQgZnJlZSgpCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgZDM0YzgzZTkzNDI0MTlhZWVjZmY1ZmZkN2RlYWI4Mzk4N2RiZWJjYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDowMDozOSAyMDEzICswMjAwCisKKyAgICBldGhlcmxpa2UtbWliLCBybW9uLW1pYjogRml4IG1hbGxvYyguLi4pIDwgMCB0ZXN0cworICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IDQzYzQ0MDE3NmIzZTRmOWNlOTk1ZTQ4MmVjNjk3NWJhMGM4NTliZjMKK0F1dGhvcjogTWljaGFlbCBTaGN3YXJjeiA8TWljaGFlbC5TaGN3YXJjekBjb21wYXNzLWVvcy5jb20+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTI6NDY6MDQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBGaXggYSBkb3VibGUgZnJlZSBhdCBleGl0CisgICAgCisgICAgQSBxdW90ZSBmcm9tIGEgbWVzc2FnZSBmcm9tIE1pY2hhZWwgU2hjd2FyY3o6CisgICAgCisgICAgSSBhbSBydW5uaW5nIG5ldC1zbm1wIDUuNy4yIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzIGEgZG91YmxlCisgICAgZnJlZSBwcm9ibGVtIGluIHNubXB0cmFwZCwgaW4gZnJlZV90cmFwZF9hZGRyZXNzKCkgYW5kCisgICAgcGFyc2VfdHJhcGRfYWRkcmVzcygpLiBJIGdldCBhIFNJR0FCT1JUIG9uIHRoZSBzZWNvbmQgU0lHSFVQCisgICAgKGxvb2tzIGxpa2UgaXQgZG9lcyBhIGRvdWJsZSBmcmVlIG9uIHRoZSBmaXJzdCBTSUdIVVAgYW5kIG9uCisgICAgdGhlIHNlY29uZCBpdCBjcmFzaGVzKS4KKyAgICAKKyAgICBJIGhhdmUgdGhpcyBzbm1wdHJhcGQuY29uZiBjb25maWd1cmF0aW9uOgorICAgICAgc25tcFRyYXBkQWRkciB1ZHA6MTYyLHVkcDY6MTYyCisgICAgICBhdXRoQ29tbXVuaXR5IGxvZyxleGVjdXRlLG5ldCBwdWJsaWMKKyAgICAKKyAgICBBbmQgdGhpcyBpcyB0aGUgYmFjay10cmFjZSBmcm9tIGdkYjoKKyAgICAqKiogZ2xpYmMgZGV0ZWN0ZWQgKioqIC9vcHQvY29tcGFzcy9iaW4vc25tcHRyYXBkOiBmcmVlKCk6IGludmFsaWQgbmV4dCBzaXplIChmYXN0KTogMHgwODBjMTdhOCAqKioKKyAgICA9PT09PT09IEJhY2t0cmFjZTogPT09PT09PT09CisgICAgL2xpYi9saWJjLnNvLjZbMHhmNzIwNDg0NV0KKyAgICAvbGliL2xpYmMuc28uNihjZnJlZSsweDljKVsweGY3MjA2NmVjXQorICAgIC9vcHQvY29tcGFzcy9iaW4vc25tcHRyYXBkKGZyZWVfdHJhcGRfYWRkcmVzcysweDJhKVsweDgwNGE2YmFdCisgICAgL3Vzci9saWIvbGlibmV0c25tcC5zby4zMChmcmVlX2NvbmZpZysweDMyKVsweGY3NGFlNGMyXQorICAgIC9vcHQvY29tcGFzcy9iaW4vc25tcHRyYXBkWzB4ODA0YTU1N10KKyAgICAvb3B0L2NvbXBhc3MvYmluL3NubXB0cmFwZFsweDgwNGJmYTldCisgICAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHhlNSlbMHhmNzFiMDQ1NV0KKyAgICAKKyAgICBJIGhhdmUgYSBwYXRjaCB0aGF0IGZpeGVzIHRoaXMgaXNzdWUsIGhlcmUgaXMgdGhlIGRpZmY6CisgICAgQEAgLTQ0Niw2ICs0NDYsNyBAQCBmcmVlX3RyYXBkX2FkZHJlc3Modm9pZCkKKyAgICB7CisgICAgICAgICBpZiAoZGVmYXVsdF9wb3J0ICE9IGRkZWZhdWx0X3BvcnQpIHsKKyAgICAgICAgICAgIGZyZWUoZGVmYXVsdF9wb3J0KTsKKyAgICArICAgICAgIGRlZmF1bHRfcG9ydCA9IGRkZWZhdWx0X3BvcnQ7CisgICAgICAgICB9CisgICAgfQorCitjb21taXQgMmRiNTQ4NWZjMWNjY2UzOWVmYTY5YTM3N2JiOGQ2ZjYyMzFlYjBiMgorQXV0aG9yOiBFcmljIFMuIFJheW1vbmQgPGVzckB0aHlyc3VzLmNvbT4KK0RhdGU6ICAgRnJpIEp1biAyMSAxMDo0NzozMiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBkb2N1bWVudGF0aW9uOiBmcm9tICJFcmljIFMuIFJheW1vbmQiOiBDb3JyZWN0IG1hbiBwYWdlIG1hcmt1cCBwcm9ibGVtCisgICAgQW1iaWd1b3VzIG9yIGludmFsaWQgYmFja3NsYXNoLiAgVGhpcyBkb2Vzbid0IGNhdXNlIGdyb2ZmIGEgcHJvYmxlbS4KKyAgICBidXQgaXQgY29uZnVzZXMgZG9jbGlmdGVyIGFuZCBtYXkgY29uZnVzZSBvbGRlciB0cm9mZiBpbXBsZW1lbnRhdGlvbnMuCisKK2NvbW1pdCBkNjc3MTQ2NGYxNmRjNmZlNjRkZDI0YzA4YWY0YmU3MjU4ODVhZGFkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgSnVuIDE4IDIzOjQ1OjI4IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IGFwcHM6IFN0b3AgYWdlbnR4dHJhcCBmcm9tIGFjY2Vzc2luZyB0aGUgcGVyc2lzdGVudCBjb25maWd1cmF0aW9uCisgICAgVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBtb2FuaW5nIGFib3V0IG5vdCBiZWVpbmcgYWxsb3dlZCB0byB3cml0ZSB0aG9zZQorICAgIGZpbGVzIGR1ZSB0byBiYWQgcGVybWlzc2lvbnMuCisKK2NvbW1pdCAxNGFjNWQ1ZDJjNGQ5ZjNhNzk5ZDQwMWNjMWU0MDNhOGEyOTJkNDI1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDEyIDIyOjM3OjIzIDIwMTMgKzAyMDAKKworICAgIERhcndpbiBmaXhlczogVURQIGFuZCBUQ1AgdGFibGVzLCBtZW1vcnkgZGF0YSwgYW5kIHNvbWUgZXJyb3IgY2hlY2tpbmcuCisKK2NvbW1pdCBiYWJkMzFkMTA0OWUyMzNjNDU0ZjFjYmQ4OGJiYTc1ZjJmNDA3ODFlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDEyIDIyOjI1OjE5IDIwMTMgKzAyMDAKKworICAgIEZpeCBzb21lIG1hbiBwYWdlcyByZWZlcmVuY2VzIHRvIG90aGVyIHBhZ2VzCisKK2NvbW1pdCBiZGVmY2UwNmExZWExYzE0MzA4MDI3MTRmYzgzN2I1NThlMWE2NzVhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDEyIDIyOjIzOjU3IDIwMTMgKzAyMDAKKworICAgIFVwZGF0ZWQgRU5USVRZLU1JQiBpbiByZmMgNjkzMworCitjb21taXQgZGY4NjNhNTM0OGFhYmY3MWJiY2E3YmZlZmNmOGJlYjhiYjllNzc2MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAxMiAyMjoxNzo0NiAyMDEzICswMjAwCisKKyAgICBGaXggQnVnICMyNDI3OiBDYW5ub3QgcmVzb2x2ZSBJUHY2IG9ubHkgaG9zdG5hbWVzLCBieSBhY2NlcHRpbmcgYSBsaXN0CisgICAgb2YgdHJhbnNwb3J0IGRvbWFpbnMuCisKK2NvbW1pdCBkYTFmZWYzODI1OTFmZjQ1ZGM5MmViM2I5NWE2YmZlZmY5ZWNmYTRmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSAyMSAwOToxMzo0MSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkZWQgYnRyZnMgc3VwcG9ydCB0byBockZTVGFibGUKKworY29tbWl0IDkzMWM4N2EwNWY1ZjY2Mjg5NjEzZmVkNzdhYzc4ODQ0YjYxY2I3OWYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXkgMTUgMjA6MTg6MTQgMjAxMyArMDIwMAorCisgICAgQlVHIDI0NTg6IEZpeCBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGF1dG9fbmxpc3Qgc3RydWN0dXJlIChUaGFua3MgUnlhbiBTdGVpbm1ldHopCisKK2NvbW1pdCA5MTA0ZTJhM2YxOTU1MDZhNDc3MzM5ODNkOGNiYTM4ZWQ1OTJhOTg4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDE1IDIwOjEzOjA1IDIwMTMgKzAyMDAKKworICAgIFBBVENIIDEyNTM6IEZpeCBwYXJzaW5nIG9mIERFRlZBTCBCSVRTIChUaGFua3MgTWlrZSkKKworY29tbWl0IDg1NWU1NGUzNDVjNTVlYTIyYjdlN2FjMTJhMjQ5ZDc0MDlmYmIzMDkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXkgMTUgMjA6MTE6MjkgMjAxMyArMDIwMAorCisgICAgcmZjbGlzdDogYWRkIFJGQyA2OTQ1CisKK2NvbW1pdCAzNjUyN2NkOGNjYTY1MDcxM2M4NWUwMzI4YzBjMmExY2QwOTVjMzU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gTWF5IDEyIDEwOjA0OjA4IDIwMTMgKzAyMDAKKworICAgIFdpbmRvd3MsIFZpc3VhbCBTdHVkaW86IFVuYnJlYWsgY29tcGlsYXRpb24gd2l0aCB0aGUgV2luZG93cyBYUCBQbGF0Zm9ybSBTREsKKyAgICAKKyAgICBUaGlzIHdhcyByZXBvcnRlZCBieSBXaW0gRGV2b3MKKworY29tbWl0IDUxN2E1NTEyMTAyZDMzOTQ4OWM5YTcwZWE4ZDA4N2EwZTEwMDM1YTkKK0F1dGhvcjogV2ltIERldm9zIDxXaW0uRGV2b3NAbWV1Y2NpLXNvbHV0aW9ucy5jb20+CitEYXRlOiAgIFN1biBNYXkgMTIgMDk6NDA6NTMgMjAxMyArMDIwMAorCisgICAgV2luZG93czogVW5icmVhayB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZAorICAgIAorICAgICJzdGF0aWMgTkVUU05NUF9JTkxJTkUiIHRyaWdnZXJzIHRoZSBlcnJvciBtZXNzYWdlICJlcnJvciBDMjE1OTogbW9yZQorICAgIHRoYW4gb25lIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVkIiwgc28gdXNlIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnN0ZWFkLgorCitjb21taXQgNGRmMDJmOTY3ZDBiOWQxNmNhMTJiNTgyMTVlOTgzNWJjOWYzOTFjYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE1heSA0IDE0OjU0OjQ4IDIwMTMgKzAyMDAKKworICAgIFJlbW92ZSBjb21waWxlciB3YXJuaW5nIGFib3V0IG1pc3NpbmcgcHJvdG90eXBlCisKK2NvbW1pdCAxOGRhZmE1OGQ4MTIxOTYxYjA1OGQ2ZDQxNjcwN2RmMWQ2YTA0MmFjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTWF5IDQgMTQ6NTM6MTAgMjAxMyArMDIwMAorCisgICAgUmVtb3ZlIG9uZSBjb3B5IG9mIHRoZSBsaW51eF9zdGF0ZXMgYXJyYXkuIE1ha2UgdGhlIHdob2xlIHRoaW5nIGNvbnN0LgorCitjb21taXQgMDJhZDgxZWEyZGUyZDQ2ODc3OTQwNTdlMmU4MTA0YTY1MjM5MjU0ZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1heSAzIDA4OjA4OjAxIDIwMTMgKzAyMDAKKworICAgIFJldmVydCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGZyb20gJ0ZpeCBtaXhpbmcgb2YgY29kZSBhbmQgZGVjbGFyYXRpb25zJ1sxXQorICAgIGluIG9yZGVyIHRvIG5vdCB1c2UgdmFyaWFibGVzIGJlZm9yZSB0aGV5IGFyZSBzZXQgYW5kIG5vdCBpbmNyZWFzZSB0aGUKKyAgICBwcm9iYWJpbGl0eSBmb3IgbWVtb3J5IGxlYWtzLgorICAgIAorICAgIDEpIHJldiBlZWZjMjVjYTY3MDVhMmQxYThmNTIxNjA3NmY0MzllMGQzZTNlZjc2CisKK2NvbW1pdCA0ZmQwNTI1ZDZhNjVhY2ZlYTNkN2I0MzFjOTc4OTNkYzQ3OTI3ZGE4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIgMjI6NDU6NTEgMjAxMyArMDIwMAorCisgICAgYXV0b2NvbmYKKworY29tbWl0IDU1ZGRkODI5NWFlNjVlNDdmMjIwZjQ4MDc3OTRmYmFjOWI2OWYwZmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMiAyMjoyMDo0NiAyMDEzICswMjAwCisKKyAgICB0ZXN0aW5nOiBEb2N1bWVudCB3aHkgd2Ugc2tpcCB0ZXN0cworCitjb21taXQgZWVmYzI1Y2E2NzA1YTJkMWE4ZjUyMTYwNzZmNDM5ZTBkM2UzZWY3NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyIDIyOjEzOjQyIDIwMTMgKzAyMDAKKworICAgIEZpeCBtaXhpbmcgb2YgY29kZSBhbmQgZGVjbGFyYXRpb25zLgorCitjb21taXQgYjk0YjczNGRkMzUzYmNmNzkzYzhiNjVhMjczYTEzODdiZmQyNTZlYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyIDIyOjEyOjExIDIwMTMgKzAyMDAKKworICAgIERhcndpbjogc3VwcG9ydCA2NC1iaXQgY291bnRlcnMgZm9yIGRpc2tpbyB0YWJsZQorCitjb21taXQgOGQ4NDFjMWQ5YjFiNGVlYzI2NGQ2ODJhYzEyNjAzMmFhMDhmMmU4MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyIDIyOjA5OjE3IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IFN1cHBvcnQgbmV3IE1JQiBzdHJ1Y3R1cmVzIGFuZCBNRkQgcmV3cml0ZXMgdW5kZXIgRGFyd2luCisKK2NvbW1pdCAyNzY0MGZjZmIyMDUyNmJlZjJmNmViNDBjMmE1NDU2NmRmYzZjNGM2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDI3IDEwOjU4OjI5IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBDb3JyZWN0IHRoZSBzaXplIG9mIG9mIHRoZSBFWEFNUExFSVBBRERSRVNTIHZhbHVlIG9uIEw2NCBob3N0cworCitjb21taXQgZWJiZTJhMzk5MGVmNmRjYmRjYjk5YTM5YWRkNDY1Mzk4MzU0YzM0YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEFwciAyMyAwNzoyNToyMSAyMDEzICswMjAwCisKKyAgICBidWlsZGluZzogTWFrZSAtLWVuYWJsZS1taW5pbWFsaXN0IGNvbXBpbGF0aW9uIHdvcmsgYWdhaW4KKworY29tbWl0IDRiZDdkNzNiMWZlNjBiYjUzNmJmMzllYjRhMzg1OTZlODk2NWMzZjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMjI6MjU6MzggMjAxMyArMDIwMAorCisgICAgdHlwZWNhc3QgdG8gc2lsZW5jZSB3YXJuaW5nIGZvciBmb3JtYXQKKworY29tbWl0IGRiMDcxZDBhNmY0ODc0MjE3NjliNjlmMjJjY2YwOWNjMjQyZDk0NTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMjI6MjM6NTIgMjAxMyArMDIwMAorCisgICAgT25seSBkZWNsYXJlIEhSUF9tYXhuYW1lcyB3aGVuIG5lZWRlZAorCitjb21taXQgZmFmMDBjZTNiMGZlYjRkMzdmYWJlZjZkNDEzNWUzNjgwM2IwMDM3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAyMjoyMjoyNCAyMDEzICswMjAwCisKKyAgICBpcC5jOiBmaXggaW5jb25zaXN0ZW5zIGRlY2xhcmF0aW9ucyBvZiBpcF9tb2R1bGVfb2lkX2xlbgorCitjb21taXQgN2Y2YjU5NTMzY2RmYTA2NDUwYWVlNDE1NzAyMjNiMWNkZDJjYTZiOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAyMjoxOTo0NCAyMDEzICswMjAwCisKKyAgICBSZWNvdmVyIGZyb20gZmFpbHVyZXMgaW4gbGlicGNpCisKK2NvbW1pdCA0MDkzOGE2MjYxOTU5MGI0ZWEwNzFhZTg1YmFhMmY0MmEwYjdmY2IyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAxNTowMDowMCAyMDEzICswMjAwCisKKyAgICBDaGVjayBpZiAnYXNuX3BhcnNlXyogJyBhY3R1YWxseSBzdWNjZWVkZWQuCisgICAgCisgICAgSWYgbm90LCBkaXNjYXJkIHRoZSBwYWNrZXQgaW5zdGVhZCBvZiB1c2luZyB3cm9uZyBkYXRhLgorCitjb21taXQgYWE0ZmI5NDkwMTJkN2MwMjJhNDM2OTkyYWMyMDNjMDY1ZmQ3NDIwYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMTQ6NTg6NDEgMjAxMyArMDIwMAorCisgICAgSW50ZWdlciB2YWx1ZXMgZW5jb2RlZCBpbiBCRVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuCisgICAgCisgICAgSWYgYXNuX2xlbmd0aCA9PSAwLCB3ZSB3b3VsZCByZWFkIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBuZXh0IHZhcmJpbmQgb24gbmV4dCBsaW5lOgorICAgICAgICBpZiAoKmJ1ZnAgJiAweDgwKQorICAgIC0+IHJlYWRpbmcgcGFzdCB0aGUgYnVmZmVyIGlmIHRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgLT4gc2lnc2Vndi4KKworY29tbWl0IGY2ZWVkNmUyMzg0Y2JmODU3NzY4ZjBlZThjNjYwMmViN2NkMmYwM2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBBcHIgMjIgMDg6MTg6NTQgMjAxMyArMDIwMAorCisgICAgUmVnZW5lcmF0ZSBjb25maWd1cmUKKworY29tbWl0IGE1ODdkMTFmYjY3ZmFkM2FmMjQ1MTdhNDA4YWJjMzcwMDU2NWVkZjUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBBcHIgMjIgMDg6MTg6MzUgMjAxMyArMDIwMAorCisgICAgUmVnZW5lcmF0ZSBjb25maWd1cmUKKworY29tbWl0IGNlM2M5MjE0MTI4YjFjZGJlYmQyOTc1ZGEwZjM2YTU1ZTI1ODRmYTAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBBcHIgMjIgMDg6MTY6MDIgMjAxMyArMDIwMAorCisgICAgUmVwb3J0IHRoZSByZXN1bHQgb2YgdGhlIFBPU0lYIHNoZWxsIHRlc3QsIG5vdCBhIGNvbnN0YW50IHllcworCitjb21taXQgMGM4NzBmNzRiMmU0MzM3YjRiZjNiN2YxMWY1NWIxMmU4MGRmNDlmZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEFwciAyMiAwODowMDozMiAyMDEzICswMjAwCisKKyAgICBDaGFuZ2UgdGhlIGNoZWNrIG9mIHBlcmwgc2hlbGwgZGV0ZWN0aW9uIHRvIHdvcmsgd2l0aCBBSVggc2ggYXMgd2VsbAorCitjb21taXQgNWYwODE5ZjEwMmQxY2RlMzg5OWQwODcwOGM5YzEyNjI2ODg5OTMxOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEFwciAxIDA3OjM4OjA5IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHVwZGF0ZS1jb250cm9sbGVkIGNoYW5nZXMgdHJpZ2dlciBwZXJpb2RpYyBzYXZlcy4gVGhhbmtzIHRvIENsYXVzIEtsZWluIGZvciBub3RpY2luZyB0aGF0IHRoaXMgd2FzIG1pc3NpbmcuCisKK2NvbW1pdCBhOGZmMjY4ODNkNjM4NjFkODc2OTg1ZGRlODlmMzg5MTU3N2Q2MDI2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWFyIDMxIDEzOjMzOjAyIDIwMTMgKzAyMDAKKworICAgIHNubXBkOiBNYWtlIHRoZSB1cGRhdGUgaGFuZGxlciBjYWxsIGFueSBjaGlsZCBoYW5kbGVycworCitjb21taXQgMmJjNjJiOTcyYTJiZDBiOTFkZGQ0ZjdjMTFkNDdkYmU1YmY2ZmYwMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAzMSAxMzozMjoyOSAyMDEzICswMjAwCisKKyAgICBzbm1wZDogRG8gbm90IGxlYWsgbWVtb3J5IGlmIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxzLgorCitjb21taXQgYWU5MTQ4YjUxYjliMDIyNzBmZGRiYjc0MTExYmEyYzAyYThlYTY3YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEFwciAxNiAyMjowMzowMCAyMDEzICswMjAwCisKKyAgICBleHRlbmQuYzogZml4IG1pc3Npbmcgc2VtaWNvbG9uIGFuZCB3YXJuaW5nCisKK2NvbW1pdCA0NjQyMmQxN2RmZGI0MTZlYjI0YWQ3ZGI3NDUzZWM0NzNkYjIwODIwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEFwciAxNiAxMzo0ODoyNiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgY3Jhc2ggaW4gVUNELVNOTVAtTUlCOjpleHRUYWJsZQorICAgIAorICAgIHNubXBkIGNyYXNoZWQgd2hlbiB0aGUgY29tbWFuZCB0byBleGVjdXRlIGhhZCBubyBhcmd1bWVudHMsIGkuZS4gZXh0ZW5kLT5hcmdzIHdhcyBOVUxMLgorCitjb21taXQgOGI1N2JkYjBhMDk0NzJhMTZkM2FmNjlmZDJiMTM3NGMwOWU2YTNhZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciA4IDIwOjM2OjM1IDIwMTMgKzAyMDAKKworICAgIHJlcnVuIGF1dG9oZWFkZXIvYXV0b2NvbmYKKworY29tbWl0IDlhOWVhMjU3ZTZlYjQ3ODAwZDM0ZjFhODZlYzBhMmE2ZTkwODVmMzEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgOCAyMDozNToyNCAyMDEzICswMjAwCisKKyAgICByZXJ1biBhdXRvaGVhZGVyL2F1dG9jb25mCisKK2NvbW1pdCA1OWEzMjE0Mzk4YmNlYjIyYzQ4ZDU4YzBmZTljNTUyYjJlMWVjYjhjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDggMjA6MzE6NDkgMjAxMyArMDIwMAorCisgICAgcmVydW4gYXV0b2hlYWRlci9hdXRvY29uZgorCitjb21taXQgZTRkNzJkYjExZDNmYjdhNDQ0MjUwOTdiNWVjMjZiOWY5MTdhOWM4MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciA4IDE5OjE0OjA0IDIwMTMgKzAyMDAKKworICAgIHNubXBrc206IGhhbmRsZSBkZXByZWNhdGVkIGtyYjVfYXV0aF9jb25fZ2V0e2xvY2FsLHJlbW90ZX1zdWJrZXkKKworY29tbWl0IDk5ZmY5NTM2NzNmNzM2MTQ0NjNhY2UxMjEwYzRhYzA3M2ExZjJhODEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgOCAxOTowNTo0NyAyMDEzICswMjAwCisKKyAgICBzbm1wa3NtOiBmaXggc29tZSBjb25zdCBjYXN0IHdhcm5pbmdzCisKK2NvbW1pdCBjZjBkNGVmMjI0YmFkMDAwOTk1MzcwNDgzYTVjOThkYzE3ODM5YTQxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXByIDUgMjI6MDU6MzMgMjAxMyArMDIwMAorCisgICAgSW5pdGlhbGl6ZSBhIGNvdXBsZSBvZiB2YXJpYWJsZXMgdG8gcGxlYXNlIGNsYW5nCisKK2NvbW1pdCA3MWY1OWU5ZTZjOThlOGRiZmFiMWZmYjBkMWU0NjhjMTJlM2Q5MmNlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXByIDUgMjE6Mzg6NDQgMjAxMyArMDIwMAorCisgICAgTWFrZSBzdXJlIHNubXBrc20gaW5jbHVkZXMgY29tX2Vyci5oICh3aGVyZXZlciBpdCBpcykgdG8gZGVjbGFyZSBlcnJvcl9tZXNzYWdlCisKK2NvbW1pdCA4YzAxZjY0NzI4YTQzNjU2ZGMzYWM1ZmJlZmRmOGVjZWM4ZGExNTA2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXByIDUgMjE6MTM6MzAgMjAxMyArMDIwMAorCisgICAgTWlub3IgZml4IHRvIGlubGluZSB0byBhbGxvdyBjb21waWxhdGlvbiB3aXRoIGNsYW5nCisKK2NvbW1pdCAyZGIxMmY2ODhlMWYyZWVlYmI1ODllYzczZGE4MmViODk3ZjM0YmQxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gTWFyIDE4IDA4OjU0OjQ5IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHRoZSBsb2NhbCB0cnV0aHZhbHVlIGhhbmRsZXIgY2FsbCBhbnkgc3ViaGFuZGxlcnMgaXQgbWlnaHQgaGF2ZS4gVGhhbmtzIHRvIENsYXVzIEtsZWluIGZvciBub3RpY2luZyB0aGlzIHByb2JsZW0uCisKK2NvbW1pdCA5MDUxMmEzMmJkMWMyYmU1ZDE3YjIzZjEwOTU2Mjc4Mzk1ZGUzNzU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWFyIDE5IDIyOjI4OjM0IDIwMTMgKzAxMDAKKworICAgIFBhdGNoIDEyNTAgZnJvbSBzdGhlbjogaW5jbHVkZSA8c3lzL3Byb2MuaD4gaW4gc3dydW5fa2luZm8uYyBmb3IgT3BlbkJTRCA1LjMKKworY29tbWl0IDM5MTkzNjAwZWMzOGRlYjUxMzc5YTEwOTY0OGQ2OWU3ZTkwMDE3MDIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMTo0NDo1OSAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogcHJvdG90eXBlIHJvdXRlNnByCisKK2NvbW1pdCBhY2NlODI5NmRjNWI2OGQyMTJmNzQwNGVkYzJhZmRiOGIwMjgxN2MwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6Mzk6MTYgMjAxMyArMDEwMAorCisgICAgY2xlYW4gdGFicyB0cCBzcGFjZXMKKworY29tbWl0IDQwMmJkYWU5NmE2ZDc5YjNiNjNiNjcyNjFiMzdhODQ3YWI0ODE3ZTMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMTozNzo0MyAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZmFsbCBiYWNrIHRvIGlwdjRSb3V0ZVRhYmxlIChUaGFua3MgdG8gZmVubmVyKQorCitjb21taXQgZTY5MTdlMzcyYTA2ZGRkNzc2MWIzMTAzYjMyOWJjZjY5NmU5M2ExZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjI5OjQ0IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBzaG93IEFTIGluIHJvdXRpbmcgdGFibGUgaWYgYXZhaWxhYmxlIChUaGFua3MgdG8gZmVubmVyKQorCitjb21taXQgOWViOGQwZjkwN2VkOGQ3OGRlOTBkY2Y2NjIzYzMzMDYwOTkzZjJhMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjI4OjI2IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBlYXJseSBkZXRlY3QgaWYgd2Ugd2FudCBpcHY0IHJvdXRlIHRhYmxlIChUaGFua3MgdG8gZmVubmVyKQorCitjb21taXQgNDA4MzczNGVmN2Y0YmVhZjFiOWExMzI1NzM4YmExODVlYjdjYzcxNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjI1OjUzIDIwMTMgKzAxMDAKKworICAgIEZpeCBtaXNwbGFjZWQgbmV3bGluZXMgaW4gZXJyb3IgbWVzc2FnZXMKKworY29tbWl0IDViMGVkM2I3NmY2ZTQ2NjlmMjM4YjVjODJjZDNjYzZjYjZjYWE1Y2QKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgNSAxNzoxNjoyNiAyMDEzICswMTAwCisKKyAgICBVbml0IHRlc3QgVDAxNDogRml4IGEgQ3lnd2luIGJ1aWxkIHdhcm5pbmcKKworY29tbWl0IDEwNmFkMjQ1MGYyYjc4ODQ4ZjI5MmFkMDM0NDVhOTdjN2Y4N2U2ZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgNSAxNzoxNzowNSAyMDEzICswMTAwCisKKyAgICBVbml0IHRlc3QgVDAxNDogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgcHJvcGVybHkKKworY29tbWl0IGE3ZGVhNTczNDg1OTMxNTYxMDUxYTIwMTkwMjdkN2VkMDlkMTU1NjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNCAyMjozNTowNiAyMDEzICswMTAwCisKKyAgICByZmNsaXN0OiBhZGQgRzk5OHggbWlicworCitjb21taXQgNDYwNGNmNjFlN2NmNmVhNjRlNzgyZjRhM2Q3MmQ0ZmIwMjRjMWY5YgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA0IDIyOjIzOjIzIDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0IC1DczogY29uc2lzdGVudCBmaWVsZCB3aWR0aHMgZm9yIHN0YXRpc3RpY3MuIERvY3VtZW50CisgICAgc25tcG5ldHN0YXQgLUNzcyB2YXJpYW50LgorCitjb21taXQgNGFhOTIxNTdjZTU1ZDFlNTI4ZDdkZTUyNDkxZDNlYjcwMjA4NjllNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA0IDIyOjE3OjE5IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0LjE6IHJlbW92ZSBpbnZhbGlkIHJlZmVyZW5jZXMgdG8gcm91dGluZyBzdGF0aXN0aWNzIG91dHB1dC4KKworY29tbWl0IDc1MWY0YTZjN2ZjODlhNWNmMmIyODc5ZjZmOTE1YjMxNDY2YTA0YjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNCAyMjoxNDoyOSAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZmFsbCBiYWNrIGZpcnN0IHRvIGlwQ2lkclJvdXRlVGFibGUuIFRoYW5rcyB0bworICAgIEJpbGwgRmVubmVyIGZvciBpbml0aWFsIHBhdGNoIGZvciB0aGlzLgorCitjb21taXQgOTNjODZlNmUxY2YzMDFiZDI2OWZkZmZiNWU5YWFhY2U4YWExOTNmNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEphbiAzIDA3OjIxOjAzIDIwMTIgKzAxMDAKKworICAgIERvIG5vdCBsZWFrIG1lbW9yeSBvbiBlcnJvcgorICAgIAorICAgIElmIGFsbG9jYXRpb24gb2YgaWluZm8gZmFpbHMgdGhlbiB0YWJsZV9pbmZvIGlzIGxlYWtlZC4KKyAgICBEZWFsbG9jYXRlIHRhYmxlX2luZm8gaW4gdGhpcyBjYXNlLgorCitjb21taXQgMzZhN2RlNzIzMGZiYmJiNTJjYzM3Y2JiZWQyODFlYjU1OTQwNGJlOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiAyNSAyMDo0MDowOSAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBBZGQgbXVsdGlob21pbmcgc3VwcG9ydAorICAgIAorICAgIE9uIFdpbmRvd3MgVmlzdGEgLyBXaW5kb3dzIFNlcnZlciAyMDA4IGFuZCBsYXRlciBpdCBpcyBwb3NzaWJsZSB0byBhZGQKKyAgICBtdWx0aWhvbWluZyBzdXBwb3J0IGJ5IHVzaW5nIHRoZSBJUF9QS1RJTkZPIHNvY2tldCBvcHRpb24uCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYworCitjb21taXQgN2JiYWJhYjIzNjJkYWE2ZDc2YWQ3MzAzM2IzZjMyYjJjYmE3MjUzZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEZlYiAyMiAxODo1NTo0NyAyMDEzICswMTAwCisKKyAgICBSZXdvcmsgSVBfUEtUSU5GTyAvIElQX1JFQ1ZEU1RBRERSIGRldGVjdGlvbgorICAgIAorICAgIERldGVjdCBJUF9QS1RJTkZPIC8gSVBfUkVDVkRTVEFERFIgc3VwcG9ydCBkdXJpbmcgdGhlIGNvbmZpZ3VyZQorICAgIHBoYXNlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHRoZSBmb2xsb3dpbmcgdGVzdCBpbiBlaWdodCBkaWZmZXJlbnQKKyAgICBwbGFjZXM6CisgICAgCisgICAgICNpZiAoZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChJUF9QS1RJTkZPKSkgXAorICAgICAgICAgfHwgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19DT05UUk9MIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfRkxBR1MKKyAgICAgLi4uCisgICAgICNlbmRpZgorICAgIAorICAgIFR3byBzaWRlLWVmZmVjdHMgb2YgdGhpcyBwYXRjaCBhcmU6CisgICAgKiBJUF9QS1RJTkZPIHN1cHBvcnQgaXMgZW5hYmxlZCBvbiBDeWd3aW4uCisgICAgKiBzZXRzb2Nrb3B0KElQX1JFQ1ZEU1RBRERSKSBpcyBubyBsb25nZXIgaW52b2tlZCBvbiBXaW5kb3dzIHdoZW4KKyAgICAgIGJ1aWx0IHdpdGggVmlzdWFsIFN0dWRpbyBvciBNaW5HVy1nY2MuCisKK2NvbW1pdCAxYTE5NmFkOWYxNTE3ODY4YjkzYTZiZWM5M2EwY2ZlMWQyOWUyODNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRmViIDIzIDE0OjAzOjI5IDIwMTMgKzAxMDAKKworICAgIFRlc3Rpbmc6IE1ha2UgdW5pdCB0ZXN0IFQwMTQgbW9yZSByb2J1c3QKKworY29tbWl0IDliZTIyYWFhZjgzOTM3MTNmYmMzOTAyNWY3MDIxMTFmNTBmMWU0ZWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMjMgMTE6MDM6MjAgMjAxMyArMDEwMAorCisgICAgV2luZG93czogQXZvaWQgY29sbGlzaW9ucyB3aXRoIHRoZSBXaW5kb3dzIFZpc3RhIG9yIGxhdGVyIFNESworCitjb21taXQgMGI2YmZlZjJjYTlhZTllMWMyYmVhZmU3MDAxMDBmYWU1ZjZmNGMxYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAyMyAxMToyMDoyMyAyMDEzICswMTAwCisKKyAgICBpbmV0X250b3AoKSAvIGluZXRfcHRvbigpOiBDb252ZXJ0IHByb3RvdHlwZXMgZnJvbSBLJlIgdG8gQU5TSSBDCisKK2NvbW1pdCAyYmI1MWQ3MWVlYzRlNzg5OTgyYzJhNzQxMTg2ZGNlNmRmMjM4NTQyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDIwOjU5OjI1IDIwMTMgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgdGltZSBuZWVkZWQgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3RzICh3YXMgZW5sYXJnZWQgYnkgY29tbWl0IGIzZDVlZDg3KQorCitjb21taXQgY2Y2NDBjY2Q2OGU5NjM2ODA1Yjc1MDc5OTI4YzcyNzdmYTI2MDgzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxMTo1NTowMyAyMDEzICswMDAwCisKKyAgICBVbml0IHRlc3QgVDAxNDogQWNjZXB0ICJsb2NhbGhvc3QubG9jYWxkb21haW4iIHRvbworCitjb21taXQgYmRhNDM1NzM3NWFkMjk5Y2YxODQ3NTc5ZTFhMWJjM2M2MTE4OTVjMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxNjowNzo0MSAyMDEzICswMTAwCisKKyAgICBSZWdyZXNzaW9uIHRlc3QgVDA2MDogRXNjYXBlIGJhY2tzbGFzaGVzIHBhc3NlZCB0byBDT05GSUdUUkFQRAorCitjb21taXQgNmI1ZDc4NGY0ZDZkMDAwMzkwMDE0ZDEyMGYxNWI5MzczNjJmOGMwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAyMDozMzowMiAyMDEzICswMTAwCisKKyAgICBQeXRob24gYmluZGluZ3M6IEZpeCBhIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZworCitjb21taXQgNmQyNThlZmEyYWNjYWRmY2NjNTBkODZiZDQ2Mzc5NzQ1NDQ5Y2E0YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxNToyNzoxOSAyMDEzICswMTAwCisKKyAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDJjMmUxZjQxNjM5M2Q0ODVmOWFjOTBjODdmNzIwNjVjNjY4YjczMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMTU6NDg6MzQgMjAxMyArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogRml4IGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMWJjNzk5ZGU2Y2FiMDEwYjI1YzBjNGQzZjUxNTViNWZiYWY1MjdmMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAyMDowNToxNCAyMDEzICswMTAwCisKKyAgICBQeXRob24gYmluZGluZ3M6IEZpeCB0aGUgb3V0LW9mLWJvdW5kcyB3cml0ZQorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCAyMzQxNThiOGU4NGNjMjA0Y2JhYzk2ZTZlOWJlNjk1OTYzNTQwNGI4CisKK2NvbW1pdCA0ZjRlYWViOTIwYWQxNWM5MjljNjY3ODJjYzBhNjQyOTEyY2FiZDA2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxNyAxMjoyNDoyNiAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBweXRob246IGZpeGVkIElQQUREUkVTUyBzaXplIG9uIDY0Yml0IHN5c3RlbXMuCisKK2NvbW1pdCA0ODZmMTFkZGVlOWYxYzJkZDgwNTY0NDllOTAzMWUyNGI4NjQ2ODcyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxMDowNjoxMiAyMDEzICswMTAwCisKKyAgICBBZGRlZCBJRVRGIEJTRCBsaWNlbnNlIGZvciBNSUIgZmlsZXMuCisgICAgCisgICAgTUlCcyBpbmNsdWRlZCBpbiBOZXQtU05NUCB0YWtlbiBmcm9tIElFVEYgRG9jdW1lbnRzIGFyZSBjb25zaWRlcmVkCisgICAgQ29kZSBDb21wb25lbnRzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgSUVURiBUcnVzdCBMaWNlbnNlIFBvbGljeSwgYXMgZm91bmQKKyAgICBoZXJlOgorICAgIAorICAgIGh0dHA6Ly90cnVzdGVlLmlldGYub3JnL2xpY2Vuc2UtaW5mby8KKworY29tbWl0IGQyNGVmYjA0Nzc4ZDg3MGVmYTI3Mzk0OTM5NDlkYjY1ZjNmZGQ0ZjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMTIgMjA6NDQ6NDYgMjAxMyArMDEwMAorCisgICAgU29sYXJpczogRml4IGZldGNoaW5nIG9mIGxhcmdlIGNodW5rcyBvZiBkYXRhIChsYXJnZXIgdGhhbiBvbmUgYnVmZmVyKQorICAgIFRoaXMgZml4ZXMgcHJvYmxlbSB3aXRoIG1hbnkgaW50ZXJmYWNlcywgYnV0IGNvdWxkIGFsc28gZml4IG90aGVyIGxhcmdlIHRhYmxlcy4KKworY29tbWl0IDQ1MDAxZmQ5OGM3MjlkZjlmZjA1MzYyN2M0MTZhYjVmMmU0YzYwZjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMTIgMjA6Mzk6NTAgMjAxMyArMDEwMAorCisgICAgRml4IGJ1ZyAyMjg2LDI0Mzk6IEJvdW5kIGJ1ZmZlcnNpemUgZm9yIHN3cnVuIGRhdGEgb24gRnJlZUJTRAorCitjb21taXQgOWJkMDQxM2JmYmRjZDg0NTQxM2MxMzViYmZmODc3MWZhNzEzMDgwOQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTEgMTE6NTc6MDEgMjAxMyArMDEwMAorCisgICAgRXhwbGljaXRseSBlbnVtZXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAKKyAgICBUaGUgZ2VuZXJpYyBjb25mIGFuZCBsb2NhbC5jb25mIGV4dGVuc2lvbnMgd2VyZSBpbnRlcnByZXRlZCBhcyBteS5zbm1wLmNvbmYgYW5kIG15Lm90aGVyLnNubXAubG9jYWwuY29uZiBieSBzb21lIGN1c3RvbWVycy4KKworY29tbWl0IDBiZGQwOTg4OWQwODExZjg2NGRmMTMxYjg0NGYyMGIwMDM5MjA2MmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBGZWIgNyAwMDowNTowMyAyMDEzICswMTAwCisKKyAgICBzbm1wX2NsaWVudC5jOjpuZXRzbm1wX3F1ZXJ5X3dhbGs6IGhhbmRsZSBTTk1QdjIgZXhjZXB0aW9uIHJlc3VsdHMKKworY29tbWl0IDg2NGI0YWNhOGRmYTQ4MGE3OGI3NDVmYWUyMDkxZWRjNTM3M2EwYzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgNiAxNjowMDo1NCAyMDEzICswMTAwCisKKyAgICBzbm1wdHJhcGQ6IEFkZCAtWCBvcHRpb24gdG8gZGlzYWJsZSBBZ2VudFgKKworY29tbWl0IDExMmYzZDRmYTUzNmIyYzUzMWQwNzgwNjc2MTk4OTE1YTFmNTgxNzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgNiAxNTo1OTo1MyAyMDEzICswMTAwCisKKyAgICByZmNsaXN0OiBBZGQgUkJSSURHRS1NSUIKKworY29tbWl0IGMwYTY1NDk1OTc5NDdmMjljMzZlZmFkYjA0OTI3ZmY2OTAxODllYmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMzAgMTU6NTM6MTUgMjAxMyArMDEwMAorCisgICAgUlVOVEVTVFM6IGRvbid0IHRyYXAgb24gU0lHQ0hMRC4gSXQgY29uZnVzZXMgZGFzaCwgbWtzaCBhbmQgbWF5YmUgb3RoZXIgc2hlbGxzLgorICAgIChkYXNoIGlzIC9iaW4vc2ggb24gVWJ1bnR1KQorCitjb21taXQgYjk1YWMzODZlNmMyMzU2YTFlYzI5ZjFjNDA5YjJlYzNlOTAxNTljMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAyOSAwODo1OTowMSAyMDEzICswMTAwCisKKyAgICByZmNsaXN0OiBhZGQgVEVELU1JQgorCitjb21taXQgMjNiZGY2ZDI2ZjQzMzdkMDdlYTZlOTkwMWE3NzM4ZDExODZkMTZkNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAyOSAwODo1ODowNyAyMDEzICswMTAwCisKKyAgICBzbm1wZGY6IGFkZCAtQ0ggYXMgYWx0ZXJuYXRpdmUgdG8gLUNoCisKK2NvbW1pdCA0MDI1OGU5YzA2MGFlY2FjNjU1NWFlZGZmM2U3MGJkZTdkMmFiODQ2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDI4IDE3OjA1OjA4IDIwMTMgKzAxMDAKKworICAgIFQwNzJjb20yc2VjdW5peF9zaW1wbGU6IGF3ayBzdHJpbmcgaW5kaWNlcyBzdGFydCBhdCAxIQorICAgIEZpeCB0ZXN0IHRvIHdvcmsgd2l0aCBtYXdrIChkZWZhdWx0IGZvciBEZWJpYW4vVWJ1bnR1KQorCitjb21taXQgZTM3ZjJiNmJkZmZhN2FmYWExZGMwYjhhZWU1NjVhNGRhODJkNmZlNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyNSAxNjoyNDoxMCAyMDEzICswMTAwCisKKyAgICBzbm1wZGY6IEFkZCAtQ2ggKGh1bWFuIHVuaXRzKSBvcHRpb24KKworY29tbWl0IDdhNDA3YWQzNDUwNWVkNGRiYWEyZTg0ZTA2YTFkYmY0OGMzYzc3ZTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjUgMTU6Mjg6NDMgMjAxMyArMDEwMAorCisgICAgc25tcGRmOiBIYW5kbGUgU05NUCAodjJjL3YzKSBleGNlcHRpb25zCisKK2NvbW1pdCBjNzM5Y2IzODc1ZmI1ZDRjYWQ0MTM4NjYxY2MwYTQxNzEzODRjMzQxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDI1IDEwOjE0OjAyIDIwMTMgKzAxMDAKKworICAgIEFwcGx5IHBhdGNoIzEyNDY6IEZpeCBwYXNzaW5nIGEgU0VUIG9mIGEgc3RyaW5nIHRvIG5vdCBjdXQgaXQgYXQKKyAgICBmb3VyIGNoYXJhY3RlcnMgdG8gYSBwYXNzL3Bhc3NfcGVyc2lzdCBoZWxwZXIuCisKK2NvbW1pdCAyMzQxNThiOGU4NGNjMjA0Y2JhYzk2ZTZlOWJlNjk1OTYzNTQwNGI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxNyAxMjoyNDoyNiAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBweXRob246IGZpeGVkIElQQUREUkVTUyBzaXplIG9uIDY0Yml0IHN5c3RlbXMuCisKK2NvbW1pdCA5ZTBhMGUzNWQ4ZDFiMzZmYTQ3Y2VjOTM4ZDZjODc0ZGUwMDcxYmI2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEphbiA5IDIyOjM3OjQ3IDIwMTMgKzAwMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMTIzOTogRml4IG1lbW9yeSBsZWFrCisKK2NvbW1pdCA1NTYwNWVlMzQ1MmFlZjVhYWJlNGVkMTVhODMzNzRhOTc3MjhlNjRhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA5IDA5OjI2OjU2IDIwMTMgKzAxMDAKKworICAgIEZpeGVkIG1lbW9yeSBsZWFrIG9uIGZhaWxlZCByZWFsbG9jLgorCitjb21taXQgYTMyY2E5M2E5YjkxNjc0YThjMWU4OWUxYTM4M2E3NjEzNmI4YWMzOAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBKYW4gOCAxNjo0Mjo1NCAyMDEzICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTI0MDogRml4IGRlYWxsb2NhdGlvbiBvZiBpbnRlZ2VyIGluZGV4ZXMKKworY29tbWl0IDg3NjgxZjBmYjI4NWEwMjE2MzZlMDZhNmYyMzUxZDc2NDA5ZWViYzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKYW4gNSAxNTowNjoxMiAyMDEzICswMTAwCisKKyAgICBBdm9pZCB1c2luZyAibG9jYWwiIHNpbmNlIFNvbGFyaXMnIC9iaW4vc2ggZG9lcyBub3QgdW5kZXJzdGFuZCBpdAorCitjb21taXQgNTliNGQ0MGYzOTcwYmE4MmYzZGYyYTM5OTk3MTI1NGIwNDgyNzQ0MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA0IDE4OjAwOjUzIDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1ha2Ugd2luRXh0RExMIHdvcmsgb24gNjQtYml0IFdpbmRvd3Mgc3lzdGVtcworCitjb21taXQgMzk1OTcxMDYwMzhmNmUxYzVlZDQ5YjNmY2UwMDIxYTZjNTllYzFmZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA0IDE4OjA1OjM4IDIwMTMgKzAxMDAKKworICAgIHdpbkV4dERMTDogQWRkIG1vcmUgZGVidWdnaW5nCisKK2NvbW1pdCA4NWNlOTA2MjkxMWQzMWI0MmUwYzFlMTM1YWJkM2JkYTgxM2UzMDAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDQgMTg6MDI6MzAgMjAxMyArMDEwMAorCisgICAgd2luRXh0RExMOiBJbnZva2UgU25tcEV4dGVuc2lvbkNsb3NlKCkgYmVmb3JlIHVubG9hZGluZyBhbiBleHRlbnNpb24gYWdlbnQKKworY29tbWl0IDdlMDMxMjI5NTQzNTc5ZDM3YjAwNjI5NmUyZjQ0NTQ4MmQwNTEyY2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKYW4gNSAxMzowNDowMiAyMDEzICswMTAwCisKKyAgICB3aW5FeHRETEw6IFJlbW92ZSBzb3VyY2UgZmlsZSB3aW4zMi9NZ210QXBpLXdpbkV4dERMTC5oCisKK2NvbW1pdCAyZTg5NjI0ZTU1ZTczNTU3ODYyNTk0ZjFmNTI1ZjlkZmZjODI3OTg2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDQgMjI6MjY6NDcgMjAxMyArMDEwMAorCisgICAgU29sYXJpcyAvYmluL3NoIGRvZXMgbm90IHVuZGVyc3RhbmQgJ2xvY2FsJyBidWlsdGluLgorCitjb21taXQgNjI1N2RlYTQ4MjdlODVjN2FmODQ1YWU5Y2RlZDQ4ZDQ0YWE3YmIzZAorQXV0aG9yOiBKYW4gUG9rb3Ju776D7729IDxqcG9rb3JueUByZWRoYXQuY29tPgorRGF0ZTogICBUaHUgRGVjIDIwIDE0OjQ1OjQ1IDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21tZW50IHR5cG9zIGluIGV4YW1wbGUuYworICAgIAorICAgIFBhdGNoIGZyb20gUG9rb3Ju776D7729IDxqcG9rb3JueSBhdCByZWRoYXQuY29tPgorCitjb21taXQgOWRmYzQ0YzkxZDdhMjlhNGM0M2Y3NzkwODVkZGUzNGM1ZmU2ZDVhYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiAzIDEwOjMwOjI3IDIwMTMgKzAxMDAKKworICAgIE1pbkdXLCB0ZXN0IGhhcm5lc3M6IEZpeCBhIGxvZyBtZXNzYWdlCisKK2NvbW1pdCAxZDA5OWM3YjkxOWVmMjVlZmEwM2MxNGFhNzdjY2JlYzhlNWJiMDA5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDMgMTA6MjQ6NDggMjAxMyArMDEwMAorCisgICAgYXBwcy9hZ2VudHh0cmFwLmMsIFdpbmRvd3M6IEZpeCB1c2FnZSB0ZXh0CisKK2NvbW1pdCBmMDIxZTZmZDRiYzJhY2I2ZmZhYzMzOWQzZjM4ZTRjMTViYjViZDdkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEgMTc6NTM6MTYgMjAxMyArMDEwMAorCisgICAgTWluR1c6IFVwZGF0ZSB0ZXN0IGhhcm5lc3MuIEluc3RhbGxhdGlvbiBvZiBwc2xpc3QuZXhlIGlzIG5vdyByZXF1aXJlZC4KKworY29tbWl0IDRiYzNjMDU0N2UwYjMzZWVhNzFmM2MxYTA5ZWZkZDU5NjlkN2UyNzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBEZWMgMzEgMTc6MjQ6MzMgMjAxMiArMDEwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IEVuYWJsZSBpbiBNU1ZDIGJhdGNoIGJ1aWxkCisKK2NvbW1pdCBlOWVmYjIwMDk1NDY4ZTY0MTU3Yjg0ZjE4YjZjY2Q5OTFlMTA4MmUzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEgMTU6MDQ6MzcgMjAxMyArMDEwMAorCisgICAgV2luZG93czogTGluayB3aXRoIHNubXBhcGkubGliIGFuZCBtZ210YXBpLmxpYiBldmVuIGlmIG5vdCB1c2luZyB0aGUgcGxhdGZvcm0gU0RLCisKK2NvbW1pdCA5MDBhYWU4ZWE2OTNmYjg0MGQ1NzUyNmZiNjcxZDIxNWY4NjViZWRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEgMDE6MzM6MDEgMjAxMyAtMDgwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IEZpeCBhbiBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDM2M2UzZmExYTQzY2E2MjIzZmUzYjA4MDhlNjYyOTViM2Q5Mzg2YjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMSAwMToyNzo0MiAyMDEzIC0wODAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogQWRkIGRsbW9kLmMgdG8gTVNWQyBwcm9qZWN0CisKK2NvbW1pdCBlMzU0MmMwNGE4NDYxNzg1NzY4OGFiOGU4NzE4Y2RjNGM2YTY4Y2Y1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEgMDk6MTQ6MzMgMjAxMyArMDEwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IFJlbW92ZSBtb3JlIHN1cGVyZmx1b3VzIGNhc3RzCisKK2NvbW1pdCAxZTNiMGFlMmIwMmNmMWZhY2NhZDQ4OTZiYzNiZGJlYTFkYjRhNjhmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRGVjIDMxIDEzOjE5OjM2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IFBvcnRlZCB1Y2Qtc25tcC9kbG1vZCB0byBNaW5HVyAvIE1TVkMKKworY29tbWl0IDk4NmZiOWI4NWUxMzgzYjgxZWFlYTQwZDJjYjdjMTQ0OTJkZGJkYWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBEZWMgMzEgMTI6MzI6NTYgMjAxMiArMDEwMAorCisgICAgTWluR1c6IEF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIE1pbkdXJ3Mga2lsbC5leGUgYW5kIHRoZSBTeXNJbnRlcm5hbHMgcHNraWxsLmV4ZSAoYmFja3BvcnQgY29tbWl0IDliNDI3YjM1M2YxY2ViOGZlODdlNmZjOGVkM2I2Y2ZhYjNjZTdmMjApCisKK2NvbW1pdCA3OThiNzNjZjU5ZTM2ODdmNjViZDU0YTdhOGFjMjlmZTI0OThjNjlmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDE3IDEzOjA1OjUzIDIwMDkgKzAwMDAKKworICAgIFVuYnJlYWsgdGhlIE1pbkdXIGJ1aWxkIGZvciB0aGUgNS40IGJyYW5jaCAtIHRpbWVyYWRkKCkgaXMgbm90IEFOU0kgQworICAgIAorICAgIFJlbW92ZSBESUZGVElNRVZBTCgpIGJlY2F1c2UgaXQncyBidWdneTogaW4gImRpZmYudHZfdXNlYyA+IDEwMDAwMDBMIiB0aGUgIj4iCisgICAgc2hvdWxkIGhhdmUgYmVlbiAiPj0iIGluc3RlYWQuCisgICAgCisgICAgVGhpcyBpcyBhIHBhcnRpYWwgYmFja3BvcnQgb2YgY29tbWl0IDg1ODUwOWM5ZTE5OThmNmQyNmU5MGNiNjIyZTRiMTdlYjI0ODhhNGYuCisKK2NvbW1pdCAxZTU1NmNjNzc0MGMwNjM2N2ZmMzM2MWFhOTZiZjQ1MzM5YzJlOGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDMwIDE3OjU5OjQ0IDIwMTIgKzAxMDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDUxZGZhNmU2N2ZkODQ4N2I4ODgyYzE2MzJlODExMTk1ZDk0OTZlNDEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMzAgMTA6NDI6MTYgMjAxMiArMDEwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IE1lbnRpb24gbGlicmFyeSBwYXRoIGluIGVycm9yIG1lc3NhZ2VzCisKK2NvbW1pdCAwMmEzNTdkNmI5NTM4YTQ4ODk2MzY4OTAwYmJiNTkzZGJiNGRjMzc0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDMwIDEwOjQwOjU1IDIwMTIgKzAxMDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBSZW1vdmUgYSBzdXBlcmZsdW91cyBpbml0aWFsaXplcgorCitjb21taXQgZWY3NDg4NDViMTRjMDk1MDQ5ZWQ1NDgwM2VhNzRjZjQ1N2VmZDE4OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAzMCAwOTo1NzozOCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBGaXggZW52aXJvbm1lbnQgc2VwYXJhdG9yIGluIHNubXBkL3NubXB0cmFwZC9zbm1wdHJhbnNsYXRlIGhlbHAgdGV4dC4gUmVwb3J0ZWQgYnkgSmFzb24gTWNDb2xsdW0gPGptY2NvbGx1bUBjb210ZWNoZWZkYXRhLmNvbT4uCisKK2NvbW1pdCBiYzBhYmFlNTVkZDg2N2RiYmY0ZTQyZTY3YTM2MjM0MDg4YzkzNzcxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDIgMDk6MjU6MzMgMjAxMyAtMDgwMAorCisgICAgY29weXJpZ2h0IHVwZGF0ZQorCitjb21taXQgNDA4NmFmOTViMjk4ZjFjZjEzMGQwOGRlYjdlMDkwMDU4YjMyMWFmOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMCAwNzozNzoxNCAyMDEyICswMTAwCisKKyAgICBGaXggdGhlIE1JQiBuYW1lcyB0byBhY3R1YWxseSB3b3JrCisKK2NvbW1pdCA3OTUyNzRmYzIxZTFiYTAzZWZiZTliNjA0MmM2YTM1MTNkODlkZWJmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIwIDA3OjI0OjQ3IDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIGFuZCB2YWx1ZSBjaGVja2luZyBmb3IgaXBEZWZhdWx0VFRMLCBpcHY2SXBEZWZhdWx0SG9wTGltaXQKKworY29tbWl0IDQzOWQ1MGM2NzllOWYwOWIxMDZiZmRmNjRmOGNjNzY2NDE5ZTEzNDQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjAgMDc6MjQ6MTYgMjAxMiArMDEwMAorCisgICAgRml4IGljbXBNc2dTdGF0c1RhYmxlIGZvciBTb2xhcmlzCisKK2NvbW1pdCAwMDdhN2QyNGJjNWYyNzkzOTJmZDBlYzQzNjE0NzdjZDhmMTRlNWFmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDE5IDIyOjE0OjA2IDIwMTIgKzAxMDAKKworICAgIGdpdCBpZ25vcmUgdGlsZGUgZmlsZXMKKworY29tbWl0IGFmZjAyZjI0ZTE5OGEyOTIzMTI3M2Q0OTQ4MjBkZDZlMzU0MTU1Y2EKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBEZWMgMTcgMjI6NDQ6MTggMjAxMiArMDEwMAorCisgICAgUnVubmluZyBhdXRvaGVhZGVyL2F1dG9jb25mCisKK2NvbW1pdCA5Y2ZkNjgwZjJmMmY0NWNmNzZjZDQyMTY2OTNiODYyZmFhMjdjYmMxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRGVjIDE3IDIyOjQyOjAwIDIwMTIgKzAxMDAKKworICAgIENvbmZpZyBjaGVjayBmb3IgQlNEIHVkcHN0YXQudWRwc19pcGFja2V0cworCitjb21taXQgNTNjMmZkZDViNjYwMjExNDRhZDI2NTM5YjUzYmU5YzE1OTNiNDg4NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIERlYyAxNyAyMjoyNzowMyAyMDEyICswMTAwCisKKyAgICBBZGQgU0Qgc3VwcG9ydCBmb3IgaXAtZm9yd2FyZC1taWIKKworY29tbWl0IGNhN2IxN2E0MWQ0ZDE2YmQyN2FhY2Y5MjExNmJlYTM1NjJlZWVhMzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRGVjIDE3IDEyOjQwOjMyIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiB1c2UgY2FjaGUgZm9yIGRza1RhYmxlIHRvIHNwZWVkIGl0IHVwLgorICAgIAorICAgIFVDRC1TTk1QOjpkc2tUYWJsZSB3YXMgc2xvdyBvbiBORlMgbW91bnRzLiBOb3cgaXQgdXNlcyBmc3lzIGNhY2hlCisgICAgdG8gcmVsb2FkIG1vdW50cyBldmVyeSA1IHNlY29uZHMuCisKK2NvbW1pdCAwYjcxODE4NGUwNzBkMjU3NGMwOWIxOGY1Njg5NTBhOGM5ZmY3NjU5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDE2IDIwOjU3OjI5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGFwcHM6IFN0b3AgdXNpbmcgc25tcF9wZXJyb3Igd2hlbiBsb2dnaW5nIGFmdGVyIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHNldCBzbm1wX2Vycm5vLgorCitjb21taXQgN2VkY2UwYzMxMWE3ZGQ1NDI4ZTBlZGI3MDFkYWJlOWRjNzlkMDk2NworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAxNSAxMjo0MDoxMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWFrZSB0aGUgLXdpdGhvdXQgb3B0aW9ucyB0byBycG1idWlsZCB3b3JrCisKK2NvbW1pdCBjNjAzNzU0OGZiNGI0Nzk5NjMzMGZlMWJjMWU4MjY1YWNlYTVkZDU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRGVjIDEwIDAwOjQxOjQyIDIwMTIgKzAxMDAKKworICAgIFRoZSBwcm9wZXIgcm91dGVyIGZpbGVzIGZvciBCU0QKKworY29tbWl0IDJiMzU5ZTQ1MDk4NmJiODc0NGJiZmYyMWUwY2FiNDkzYWNhY2VhOTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMzowMjowMiAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGZvciBpcFN5c3RlbVN0YXRzVGFibGUgZm9yICpCU0QuIE1vc3Qgb2YgdGhlIGNvZGUgYnkgR2FycmV0dAorICAgIENvb3Blci4gUGFydGlhbGx5IGZ1bmRlZCBieSBDaXNjbyBJcm9ucG9ydC4KKworY29tbWl0IDlhMDQ0MTI4ZThiMzMxNzk2MjIxMTY2MzU4NzY5ZWIwNTM1ZGZjMWYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMjozNjoyMSAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGZvciBpcE5ldFRvTWVkaWFUYWJsZSBmb3IgKkJTRC4gTW9zdCBvZiB0aGUgY29kZSBieSBHYXJyZXR0IENvb3Blci4KKyAgICBQYXJ0aWFsbHkgZnVuZGVkIGJ5IENpc2NvIElyb25wb3J0LgorCitjb21taXQgZjljYjI5OGRkMjBlZjZkNGJjNjgzY2UwNjdmMjMzMDczN2JlNGUwOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIyOjE3OjIyIDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlIGZvciAqQlNELiBNb3N0IG9mIHRoZSBjb2RlIGJ5IEdhcnJldHQKKyAgICBDb29wZXIuIFBhcnRpYWxseSBmdW5kZWQgYnkgQ2lzY28gSXJvbnBvcnQuCisKK2NvbW1pdCAxZGVlNDE1NjJjNTRlMGI1NGIzMDFhMzc4MzhiM2JhNjUwOWRjYzM4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjE6NTQ6MTQgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlIGZvciAqQlNELiBNb3N0IG9mIHRoZSBjb2RlIGJ5IEdhcnJldHQgQ29vcGVyLgorICAgIFBhcnRpYWxseSBmdW5kZWQgYnkgQ2lzY28gSXJvbnBvcnQuCisKK2NvbW1pdCAzZGJhYmM5NzA2OGI2YzY5MGIzZmRmOTdiNWFiM2FlMGQ5ZWFiMjhjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjE6NDc6NDUgMjAxMiArMDEwMAorCisgICAgQ2hhbmdlIHNvbWUgZGVidWcgb3V0cHV0IGludG8gZXJyb3IgbG9nZ2luZy4gRmFpbHVyZSB0byBleHBhbmQgMzIgdG8gNjQKKyAgICBJUyBhbiBlcnJvci4KKworY29tbWl0IDkwNzM2MGUwOWZmZjMzOTBkNjI2OWY4Y2I0NzQwYmRiY2Q5NTgxNjYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMTo0NTo0NCAyMDEyICswMTAwCisKKyAgICBGaXggc29tZSBsYWJlbHMgZm9yIG5ldHN0YXQgaWNtcCBvdXRwdXQuCisKK2NvbW1pdCA5ZjJmMDU0MDVjN2JiNDk5ZWJlMDgzOWIwZDc5YmEyNWM2MWMwZjU1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6NDk6NTEgMjAxMiArMDEwMAorCisgICAgUnVubmluZyBhdXRvY29uZgorCitjb21taXQgZDI3ZjM2NDUyNTgzZDI5MWYyNTVlZjA5MGUyYWVhZWFmMzlhOWUwZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjQ5OjAyIDIwMTIgKzAxMDAKKworICAgIFJ1bm5pbmcgYXV0b2NvbmYKKworY29tbWl0IDU2MzUyYzJlYmU5NTQxZjZhYmY5ZDJiOWViYzQ3MDVkODE4ZDg5YjgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOTo0ODoyMSAyMDEyICswMTAwCisKKyAgICBSdW5uaW5nIGF1dG9jb25mCisKK2NvbW1pdCAzOTc5MjNlMGFhZTEzODVhMGFmM2E4MDNlNjBlYmU4MTI0Zjk2MWQyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6MjY6MjEgMjAxMiArMDEwMAorCisgICAgRml4ZXMgZm9yIGNvbmZpZ3VyZSBvZiBrc20gbW9kdWxlLiBQcmV2aW91c2x5IGtzbSBoYWQgdG8gYmUgdGhlCisgICAgZmlyc3Qgc2VjdXJpdHkgbW9kdWxlIGluIGxpc3QgdG8gYmUgaW5jbHVkZWQuCisKK2NvbW1pdCA0MzBkMTBkMjk2YjhkOGM5OGEzYWFmZDI3YThjNmZmNGY2NDA4MTE0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6MjQ6MzkgMjAxMiArMDEwMAorCisgICAgRml4IHNwZWxpbmcgd2hpY2ggaGFzIHByZXZlbnRlZCBrc20gbW9kdWxlIGZyb20gY29tcGlsaW5nIGZvciBtYW55IHllYXJzIDotKAorICAgIEFsc28gc29tZSBmaXhlcyB0byBzdXBwb3J0IEhlaW1kYWwgS2VyYmVyb3MuIFRoaXMgc3VwcG9ydHMgRnJlZS9OZXRCU0QuCisKK2NvbW1pdCBiZmY4MzJhYjI0OGUwODYyOGJlNDZlYmY3NjExMTkxMWU3ZjM5ZTUyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6MTc6MjIgMjAxMiArMDEwMAorCisgICAgQWRhcHQgZm9yIGxvbmdlciBsaW5lcyBmcm9tIC9wcm9jL25ldC90Y3A2LiBBbmQgaXNzdWUgYW4gZXJyb3IgaWYKKyAgICBpdCBoYXBwZW5zIHRvIGZhaWwgYWdhaW4uIFBhdGNoIGZyb20gYnVnICMyNDI1IChUaGFua3MgWmhpeHUgTGl1KQorCitjb21taXQgOTY4N2U0ZDUwNzgxYmEwMTY4NDE2ZjE1YzRmMmQ5ZmM4MzcxMDUwYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjE1OjQ4IDIwMTIgKzAxMDAKKworICAgIGljbXAgc3VwcG9ydCBmaWxlcyBmb3IgKkJTRCAoZXhjZXB0TmV0QlNEKQorCitjb21taXQgZjIxNWJhMWUzN2E4YzNlMDc2OTU4ZWZkODNjMGY1ZDM5M2ExNGMyMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjEzOjI0IDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgZm9yIGljbXBTdGF0c1RhYmxlL2ljbXBNc2dTdGF0c1RhYmxlIGZvciAqQlNEIGFuZCBTb2xhcmlzCisKK2NvbW1pdCBhN2I3YzNjMGMzYmUzZjZjZjJkMDlmNjQ3MGQzZmEwODYxNTNkMDM2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDMwIDE1OjM1OjMzIDIwMTIgKzAxMDAKKworICAgIFNodWZmbGUgaW4gcHJlcGFyYXRpb24gZm9yIGJyb2FkZXIgc3VwcG9ydCBmb3IgaWNtcFN0YXRzL2ljbXBNc2dTdGF0cworCitjb21taXQgYmQyOTZhYzE4NDIzNTAzZWRhOGVmZmViODZhZmIxOWUwMDE0Mzg4OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAzMCAxNTozNDo1MiAyMDEyICswMTAwCisKKyAgICBTaHVmZmxlIGluIHByZXBhcmF0aW9uIGZvciBicm9hZGVyIHN1cHBvcnQgZm9yIGljbXBTdGF0cy9pY21wTXNnU3RhdHMKKworY29tbWl0IDJlMjNlYTBmMjkzYmI4ZTljZWFmNTYzNmRiN2I3ZDA3ZjZkNjJjN2EKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgMjAgMjM6MzM6NTggMjAxMiArMDEwMAorCisgICAgQWRkIG1pc3Npbmcgc3NJT1Jhd1NlbnQvcmVjZWl2ZWQgZm9yIFNvbGFyaXMuCisKK2NvbW1pdCA1OWVlYmM0MWE5NDM1ODExMDczZmVjNTBkNzZkZDZhZWY5ZGQ1OGE3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTm92IDIwIDIzOjMyOjUzIDIwMTIgKzAxMDAKKworICAgIEFkZCBzb21lIGVycm9yIGNoZWNraW5nIHRvIGdpdHRvb2xzCisKK2NvbW1pdCA4MGIxODM3NTgyNjY1MzYyNmMyZDcwNDUxYzJiNTRhMWM1MGEzY2U2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTm92IDEzIDEzOjU1OjQ3IDIwMTIgKzAxMDAKKworICAgIFJlbWVtYmVyIHRvIGluaXQgdGhlIHN5c3RlbXN0YXRzIHByb3ZpZGVyCisKK2NvbW1pdCA3NDNjYjY2NzE4OTA0OTc5ZjU1ODk1NDcyNTAxNTg0YzMwYzY2ZjEwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0OToxNSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBjcmFzaCB3aGVuIE1ENSBhbmQvb3IgU0hBLTEgaGFzaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wuCisKK2NvbW1pdCAxODk4Y2ZjNzFiZGIzZjRhMTY4NWM2ZDIxYjU0ZGQxYTM0ODI1OTFjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ4OjE1IDIwMTIgKzAxMDAKKworICAgIE9wZW5CU0QgNS4yIHN1cHBvcnQuCisKK2NvbW1pdCBkZDUzZmZiYWZlYjMxY2RlNjE2YTg5OTQ5ZTcwZTNkNWZlMGNjMWIzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0Njo0MyAyMDEyICswMTAwCisKKyAgICBGYWxsIGJhY2sgdG8gU0hBLTEgaWYgTUQ1IGlzIG5vdCBhdmFpbGFibGUuCisgICAgCisgICAgT24gcGFyYW5vaWQgc3lzdGVtcyB3aGVyZSBNRDUgaXMgZGlzYWJsZWQgdXNlIFNIQS0xIGluc3RlYWQgb2YgTUQ1IGFuZCBkb24ndCBjcmFzaC4KKworY29tbWl0IGVhOGY3NGM4MWY4MmMxMDViOWZjMDE5NjVhZGNlMTRiMGQ4MTg2ZGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDY6MzQgMjAxMiArMDEwMAorCisgICAgRml4IE5ldEJTRCBtZW1vcnkgZGF0YSB0eXBpbmcKKworY29tbWl0IGRkZTNhMzViYWFlYjY4M2NmMTQ0MWExNmExNTQ0MWY4YjQ1NmM1MjAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ1OjI3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGNyYXNoIHdoZW4gTUQ1IGhhc2ggaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitjb21taXQgYjc3YjY3ZDhkNjI5Zjc4NTYzOWU0MDJmYTRmYmVlNmNjZmUxOGZhNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0NDo0OSAyMDEyICswMTAwCisKKyAgICBLZXJuZWwgcHJvY2Vzc2VzIGluIERyYWdvbkZseSwgYW5kIGZpeGVkIGNwdSB1c2FnZSBkYXRhCisKK2NvbW1pdCBkNmM2MjAxMmM4MDgyZmM4ODZmNzQ3ZTBlMmM5YmI4YTZjNjZjNjYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQxOjU1IDIwMTIgKzAxMDAKKworICAgIERpc2tpbyBmb3IgT3BlbkJTRCwgYW5kIHNvbWUgY2xlYW4tdXAgZm9yIEZyZWVCU0QvRHJhZ29uRmx5CisKK2NvbW1pdCA0YTVlMGY0Yzk1ZmI2Y2QxMjNhNDkwMTc4NzM3NmU0NDdkMzMyYzAyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDE0OjIzOjQ4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IGFkZGVkIHNpbWZzIChPcGVuVlogZmlsZXN5c3RlbSkgdG8gaHJTdG9yYWdlVGFibGUgYW5kIGhyRlNUYWJsZS4KKworY29tbWl0IDJhMGNkMzVhY2YzMzI1YTZmZGMwYTEwNDIzZjU0Y2I4YjVjZTUyMmIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgU2VwIDEzIDE1OjI1OjUyIDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBpbmZpbml0ZSBsb29wIHdoZW4gU0lHVEVNIGFycml2ZXMgaW4gbWlkZGxlIG9mIGludGVybmFsIHF1ZXJ5IHByb2Nlc3NpbmcuCisgICAgCisgICAgV2hlbiBzbm1wZCBzdGFydHMgaW50ZXJuYWwgcXVlcnksIGUuZy4gZm9yICdtb25pdG9yJyBjb25maWcgb3B0aW9ucywgaXQgY2FsbHMKKyAgICBuZXRzbm1wX3F1ZXJ5X3dhbGsoKS4gVGhpcyBmdW5jdGlvbiBsb29wcyB1bnRpbCBlaXRoZXIgZXJyb3Igb2NjdXJzIG9yIHRoZQorICAgIGludGVybmFsIHJlcXVlc3QgaXMgcHJvY2Vzc2VkLiBBbmQgaWYgU0lHVEVSTSBjb21lcyB0byB0aGlzIGxvb3AsIHRoZSByZXF1ZXN0CisgICAgaXMgbm90IG1hcmtlZCBhcyBmYWlsZWQuCisgICAgCisgICAgUGF0Y2ggb3JpZ2luYWxseSBmcm9tIE1hc2FoaXJvIE1hdHN1eWEsIG1tYXRzdXlhIFthdF0gcmVkaGF0LmNvbQorCitjb21taXQgYmM0NDljMGY4NWFlOWZhMDhhYzRmY2U2NzI4MmY0OGViN2FiMTk4NAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTAgMTM6MjU6MzggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHZhbHVlIG9mIFVDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZCB0byBjb250YWluIGZ1bGwgY29tbWFuZCBsaW5lLgorICAgIAorICAgIE1JQiBkZXNjcmlwdGlvbiBvZiBVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQgc3VnZ2VzdHMgaXQgc2hvdWxkIGNvbnRhaWwgZnVsbCBjb21tYW5kIGxpbmUuCisgICAgQWxzbyBpbiBOZXQtU05NUCA1LjMuMi4yLCB3aG9sZSBjb21tYW5kIGxpbmUgd2FzIHNob3duLgorCitjb21taXQgYTM5NzhmMmNjMjA1NmM5N2E0YzNmMzM4ZjcwOWEyMDI5MWFlZDQ3MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAwNjo0ODozNyAyMDEyICswMTAwCisKKyAgICBQcm9wZXIgaGFuZGxpbmcgb2YgY29uZmlndXJlLWdlbmVyYXRlZCBzbm1wY29uZgorCitjb21taXQgMGY0Njk5MjkyNGRlNWE0YWIwNzYzYThkNDRhMWNlY2U0YTk5MWQ4MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA1IDIxOjE2OjM3IDIwMTIgKzAxMDAKKworICAgIFBhdGNoIGZvciBPcGVuQlNEIDUuMiAoUGF0Y2ggMzU1OTQyMCkKKworY29tbWl0IDllZDBiMmUwYWMwYzhlNTQ5YjhmOWE1ODQ1ZTlkMWZhYWNhYjczYzUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNSAyMDowODo0MSAyMDEyICswMTAwCisKKyAgICByZmM2Nzc5CisKK2NvbW1pdCBhZWY3NmNhMGNiYTJjYTU2ZjZhYTFkYjVjNWI1OGE1NDkzOWYzODliCitBdXRob3I6IHFxc2hrYSA8cXFzaGthQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAzMSAyMDowMDowNCAyMDEyICswMTAwCisKKyAgICBBZ2VudFgsIElQWDogUmVzdG9yZSBkZWZhdWx0IHBvcnQgKGJ1ZyAjMzU4MjI4MykuCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCA3YjllMDM0NDFjM2RjM2EwNzY3MGVkMDFmNWQwNDc5MWE4MmM3NTBjLgorCitjb21taXQgZDdkOThlNWFhOWVlOGNhNzkxOGI3Njc1MDQzZDQ3OWNmNzdiODNjNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAxIDEwOjMzOjA2IDIwMTEgKzAyMDAKKworICAgIC5naXRpZ25vcmU6IEFkZCBsb2NhbC9zbm1wY29uZgorCitjb21taXQgNzFkODNiYTQxMTdhMmNmYjc4NzRlOTE4MzJlNDU5NzNkYTQyZWU5OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAxIDEwOjM0OjMwIDIwMTEgKzAyMDAKKworICAgIFdpbjMyLCBNU1ZDOiBNYWtlIGJ1aWxkLmJhdCB3b3JrIGFnYWluIG5vdyB0aGF0IEVOVl9TRVBBUkFUT1IgaXMgY29uZmlndXJhYmxlCisKK2NvbW1pdCA1ZTUwMDA4MjcyOGY0NTM1OTVmNTAyNGQyNDEyMDhjNTFmMDhkMjJjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDI5IDE4OjEyOjQxIDIwMTIgKzAxMDAKKworICAgIFJFQURNRS53aW4zMjogUmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBDeWd3aW4gY29tcGlsZXIgb3B0aW9uIC0tbW5vLWN5Z3dpbgorCitjb21taXQgMWEzNmRlZTE2NWI4YmQ3ZGYzZWY2OTRiN2MzZjI2MjFhNTQ0OWRhYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAyMDo1NDowMCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZCwgc25tcHRyYXBkIGFuZCBhcHBzOiBNYWtlIEVOVl9TRVBBUkFUT1JfQ0hBUiBjb25maWd1cmFibGUKKworY29tbWl0IDBlMWNhNDVhNmY4ZDhhY2Y0NGFhMjFhMDA5YTllNTExOTJlODQ3ODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBPY3QgMjggMTA6MTE6MjIgMjAxMiAtMDcwMAorCisgICAgc25tcG5ldHN0YXQ6IEZpeCBNU1ZDIGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCA0YTZkMDM3OGEzOTE2NTcxY2U3NjA0YzRhM2Q1NGE4Yzk2YThmODA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gT2N0IDI4IDA5OjU0OjEyIDIwMTIgLTA3MDAKKworICAgIFdpbmRvd3M6IFZpc3VhbCBTdHVkaW8gNiBidWlsZCBmaXggZm9yIHN0cmxjYXQoKQorCitjb21taXQgNDFiNDhhNjM3MDk1MmJmNGIxMmQzNGZiMDVlYzU1ZmIwNzAyZThjZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE9jdCAyOCAxNDozNzo1MiAyMDEyICswMTAwCisKKyAgICBXaW5kb3dzOiBNYWtlIHNubXBuZXRzdGF0IGJ1aWxkIGFnYWluCisKK2NvbW1pdCAyNDUxZjgyNjQ3OTg4MWE0OTI2ZmNmODg4NTVmNTgyNTg1ZWI4MTNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gT2N0IDI4IDEwOjIzOjE3IDIwMTIgKzAxMDAKKworICAgIHdpbjMyL2J1aWxkLnBsOiBSZWR1Y2UgY29kZSByZWR1bmRhbmN5CisKK2NvbW1pdCA2ZTk5Mzg4NjgzYTZjODU0MDM1ZjA0MmE5ZDA3YzA3MjMxMTdlOGE2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gT2N0IDI4IDA5OjQxOjIwIDIwMTIgKzAxMDAKKworICAgIFdpbmRvd3MsIGJhdGNoIGJ1aWxkOiBSZW1vdmUgdGhlIG9ic29sZXRlIHZhcmlhYmxlICJTU0wiCisKK2NvbW1pdCA3NTQ0YWRjNWExYzc2ODg5ZTRhOWVkNTFlOTZkMjJkMDJmZDU2OTVlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDIyIDE1OjM1OjA0IDIwMTIgKzAwMDAKKworICAgIE5FV1M6IFdpbmRvd3M6IFBvcnQgYmF0Y2ggYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgdG8gVmlzdWFsIFN0dWRpbyAyMDEwIGFuZCBsYXRlcgorICAgIAorICAgIEZyb20gVmlzdWFsIFN0dWRpbyAyMDEwIG9uIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBzcGVjaWZ5CisgICAgaW5jbHVkZSBvciBsaWJyYXJ5IGRpcmVjdG9yaWVzIGdsb2JhbGx5IC0gdGhlc2UgaGF2ZSB0byBiZSBzcGVjaWZpZWQKKyAgICBwZXIgcHJvamVjdC4gSGVuY2UgdHdvIGFkZGl0aW9uYWwgbWVudSBlbnRyaWVzIGluIGJ1aWxkLmJhdCB0aGF0CisgICAgYWxsb3cgdG8gc3BlY2lmeSB0aGVzZSBkaXJlY3Rvcmllcy4KKworY29tbWl0IDFiOGE3OWMxYzJlYjEzZjhiMjA3YzEyYWE2ZTcxYTI5ZmYwMDM5NmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMjIgMTk6MTA6MDcgMjAxMiArMDAwMAorCisgICAgd2luMzIvQ29uZmlndXJlOiBGYWN0b3Igb3V0IGNvbW1vbiBjb2RlCisKK2NvbW1pdCAyYWY3YTczYjBjYThjZGJkMzZhN2YxOWRkOGU1NTc2NGM4NDk4NTUyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgT2N0IDI3IDE4OjI3OjQyIDIwMTIgKzAyMDAKKworICAgIFdpbmRvd3M6IE1ha2Ugc25tcG5ldHN0YXQgYnVpbGQgYWdhaW4gKHNlZSBhbHNvIGNvbW1pdCBhYTU5MTJiODk4NmNkZTc0MDkwYmExNWJlMTk2NDI2MzA5YTFlMWYwKQorCitjb21taXQgZmE5OGI0Y2JkNmRjMTVhYTkyNjE2NmVlZjA0ZDViYzhkZmJhYWFkNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE9jdCAyNiAwNzo1NjowNiAyMDEyICswMjAwCisKKyAgICBDb3BlIHdpdGggYWRkaXRpb25hbCBzdGF0aXN0aWNzIGluIC9wcm9jL25ldC9zY3RwL3NubXAgaW4gUkg2CisKK2NvbW1pdCA1NDI5MGJlZGUzMzgxNjRjYTY1YTNlZWQyMjRmYTUwNDBkN2RkODU3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgT2N0IDI2IDA3OjUwOjExIDIwMTIgKzAyMDAKKworICAgIEJldHRlciBjbGVhbnVwIG9mICJleGVjIiBjb25maWcgdG8gYXZvaWQgY3Jhc2ggZHVyaW5nIHJlbG9hZCBvZiBjb25maWcKKworY29tbWl0IDgyYWEyNDY2NzExOTRmMDRiZTUyYzYyMWU5ZjgzZDBmYWJkMjRmYTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMjQgMTU6MzA6MTEgMjAxMiArMDIwMAorCisgICAgRG9uJ3QgbWl4IGNvZGUgYW5kIGRlY2xhcmF0aW9ucyEKKworY29tbWl0IDRlOWVhODQ1NTkyZmZmOGIyYWFlNWQzMThkY2FiZjQxZjk1NzA2MzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMjQgMTU6MjU6MzUgMjAxMiArMDIwMAorCisgICAgRG9uJ3QgbWl4IGNvZGUgYW5kIGRlY2xhcmF0aW9ucyEKKworY29tbWl0IDIxZDVjNjc4NWU5MTZiNTEwMTQ0MGVkMWE0ZjcxYjQxYmEyZWI4MDkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMjQgMDk6Mjc6MjMgMjAxMiArMDIwMAorCisgICAgUmVtZW1iZXIgdG8gZnJlZSB0aGUgZGVzY3JpcHRpb24gKGlmIHNhdmVkKSBkdXJpbmcgdW5sb2FkX2FsbF9taWJzCisgICAgKHBhdGNoIDM1NjU5MjIpCisKK2NvbW1pdCAyYjk5NDBjYTU2ZmM4ZDNkNjEwZWZkMmViYTlhZTRlYmI3NDFlNjcxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDI0IDA2OjQxOjQ2IDIwMTIgKzAyMDAKKworICAgIENsZWFuIHVwIGRpc2tpbyBjb25maWcgYmVmb3JlIHJlbG9hZGluZy4KKworY29tbWl0IGY3NzY4ZmI2NDNiZTI4MmQ2MzUyODliNTdmODhhMDdkMDcwNDg3YjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBPY3QgMjMgMTE6NDg6MzEgMjAxMiArMDIwMAorCisgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0eC5jOiBFbGltaW5hdGUgZGVhZCBjb2RlIChzZWUgYWxzbyBjb21taXQgYWE1OTEyYjgpCisKK2NvbW1pdCA2NGM1NmYyN2M1ZWQ0MzJjZThkZTQ0ZTI1NzljYTBjODA2YTUxN2VhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDIyIDE3OjQ1OjE5IDIwMTIgKzAwMDAKKworICAgIGJ1aWxkLnBsOiBFbGltaW5hdGUgYSB0ZW1wb3JhcnkgdmFyaWFibGUKKworY29tbWl0IDMwYTVkMDEzYTgwZTlmZDUwYjhmZDBmNzBmZmQ5NmZmMjZiNmU0NTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMjA6Mjk6MDkgMjAxMiArMDIwMAorCisgICAgVXBkYXRlIHRvIGN1cnJlbnQgSUFOQSB2ZXJzaW9uCisKK2NvbW1pdCBmNDBkNDQwNjg5MDY3ZWY2YzRkYTdkZGFkZmIzNzNhNDUyMTk3ZmJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDIyIDE5OjQ3OjA2IDIwMTIgKzAyMDAKKworICAgIHdpbjMyL0NvbmZpZ3VyZTogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorCitjb21taXQgZDM0ZTA1Nzc3OWNiMzJlOTQzMjQwODlkYzQ2MjU2MzgzMDljZmU4OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxODozNjo1OSAyMDEyICswMjAwCisKKyAgICB3aW4zMi9idWlsZC5wbDogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorCitjb21taXQgMzBkYWVmMTg2MDM5N2YwNDVjNDA1NWNkNjFkNjYzZDI5MGRkNDdmMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxODozMjozOCAyMDEyICswMjAwCisKKyAgICBGaXggTVNZUyBraWxsL3Bza2lsbCBjb25mdXNpb24KKworY29tbWl0IDE0YmU5MTMyYjkxMTU4YjA1MTIwNzEwYjFmZjZhNGIyYWNjYzUzMWQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTg6MTA6NDQgMjAxMiArMDIwMAorCisgICAgRml4IG5ldDAvbmV0eCBjb25mdXNpb24KKworY29tbWl0IDgxMDdhNjM1MmRmMjQ3ODY2MDk5NGVmMTAzZDUyODAxYTY2MDdjYzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTc6MDM6NDcgMjAxMiArMDIwMAorCisgICAgRml4IHNwZWxpbmcgZXJyb3JzCisKK2NvbW1pdCBhYTU5MTJiODk4NmNkZTc0MDkwYmExNWJlMTk2NDI2MzA5YTFlMWYwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE2OjU4OjUwIDIwMTIgKzAyMDAKKworICAgIEltcGxlbWVudCB0aGUgbW9kZXJuIElQIHZlcnNpb24gYWdub3N0aWMgdGFibGUgaW4gc25tcG5ldHN0YXQuCisgICAgSWYgdGhlIG1vZGVybiB0YWJsZSBpcyBub3QgYXZhaWxhYmxlIChvciB0aGUgLUNMIG9wdGlvbiBpcyB1c2VkKQorICAgIGZhbGwgYmFjayB0byB0aGUgbGVnYWN5IHRhYmxlcy4KKworY29tbWl0IDFhMzRkMjI0OWVmMGQyMjE1ZTU4ODZmOWIzYzk3ZWNmYTdlYjUxOTAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTY6Mzk6NDEgMjAxMiArMDIwMAorCisgICAgUGljayB1cCBpZkRlc2NyIGZyb20gaWZYVGFibGUgd2hlbiBhdmFpbGFibGUsIGFuZCB1c2UgdGhhdCBhcyB0aGUgbmFtZS4KKyAgICBWZXJ5IHVzZWZ1bCBpZiBwY2ktdXRpbHMgd2VyZSBhdmFsYWJsZSB3aGVuIGNvbXBpbGluZyB0aGUgYWdlbnQgYXMgdGhlCisgICAgbmFtZSBvdGhlcndpc2Ugd2lsbCBiZSB0aGUgdmVyeSBvYnNjdXJlIGNoaXAgbmFtZQorCitjb21taXQgYjRjYWY1NDNjZmY3ZGJhOGY5YWNjYTJiOWVhODhjOWI3OWRjMzllZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxNjozMjoxMiAyMDEyICswMjAwCisKKyAgICBQaWNrIHVwIEhDIG9jdGV0cyBhbmQgTWNhc3RPY3RldHMgZnJvbSAvcHJvYy9uZXQvbmV0c3RhdCBvZiBjdXJyZW50IFJIRUw2CisgICAgYW5kIEZlZG9yYSBrZXJuZWxzLgorCitjb21taXQgYzY1NWZjZTc4NDUzMmE1MjNmN2RiNTgyZDBjZDA3ZGVlNGFkN2FjNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxNjoyNTo1OSAyMDEyICswMjAwCisKKyAgICBUcnkgdG8gYmV0dGVyIGNsYXNzaWZ5IExpbnV4IGtlcm5lbCB0aHJlYWRzIGFzIGhyU1dSdW5UeXBlPU9zCisKK2NvbW1pdCBlMWE4Yzk1Y2E1NWY1Njk1ODVjODhlMTc0YTQzZjZkNDEyOWM0MzlkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgT2N0IDIwIDA5OjU5OjQxIDIwMTIgKzAyMDAKKworICAgIENvcnJlY3QgdGhlIG5lc3Rpbmcgb3JkZXIgb2YgdGhlIGRveHlnZW4gZW5kIHNlY3Rpb24gY29tbWVudCBhbmQgdGhlIGZlYXR1cmUgcmVtb3ZhbCBlbmRpZi4KKworY29tbWl0IGY2N2FkZjJhMzdhOGMxODJlYWNiY2ZlNTJkNWI3ODkxOTFhNjU5MjkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAxNjozMjo0NyAyMDEyIC0wNzAwCisKKyAgICByZW1vdmUgcmVsZWFzZSByZXF1aXJlbWVudHMKKworY29tbWl0IDNlNTQzMzAzOTNjY2M4NjUyNWVkNmZiOWEwZmMxOWMwNjgzMDY2MTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZUByZWRoYXQuY29tPgorRGF0ZTogICBUdWUgT2N0IDkgMDY6MzQ6MTAgMjAxMiAtMDcwMAorCisgICAgZml4IGRvdWJsZS1uZWdhdGl2ZSB0eXBvCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnJjMyAtPiBWNS43LjIKKworY29tbWl0IDUwNTRiNTcwNjE5ZGYwYTgxOTU4YTA0NWJlZjEzNWIyMDIwNWYwMzYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAxNToyNjowNSAyMDEyIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjIKKworY29tbWl0IDU2YTc5N2ZmM2U3MWRjODg2NDY3ZDE3Y2UwMjViMDIzN2M4YzFjYzMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAxNDo0MjoyMyAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yCisKK2NvbW1pdCAwODEzZjhiNjJkZjBlODQ0MGZmZWYxNjFjZTEzNGZmOTQ1NWU3ZGU5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVHVlIE9jdCA5IDA2OjMzOjU4IDIwMTIgLTA3MDAKKworICAgIGZpeCBkb3VibGUtbmVnYXRpdmUgdHlwbworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgYTZhODg5Mjc1MzQ2ODRlMjc1Y2NmMGU3ODA1MTMwOTRhNzNmYzZiYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDA2OjMxOjIxIDIwMTIgLTA3MDAKKworICAgIEFJWCBuZXQtc25tcDUuNy4xIGhyU1dSdW5QYXRoIG5vdCBjb21wbGV0ZQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNThhNGQ4ODM5MDIxZjc3MmMzNWE3MzJiZDA5NmQxZTI5MGRjMGE2MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDA2OjMwOjU3IDIwMTIgLTA3MDAKKworICAgIEFJWCBuZXQtc25tcDUuNy4xIGhyU1dSdW5QYXRoIG5vdCBjb21wbGV0ZQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNjI2ZWFiZWM0ZWE5OGU1MzU5MDg5NzkwODU4NDc5YTU5YTI2Y2RjYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIFNlcCAzMCAyMzozMDoyOCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNb3ZlIHRoZSBjaGVjayB0aGF0IHRoZSBwZHUgdmFyaWFibGUgaXMgbm9uLU5VTEwgdG8gYmVmb3JlIHRoZSBmaXJzdCBkZXJlZmVyZW5jZSBvZiBpdC4KKworY29tbWl0IDY4YWFiNTcyYzJkMjc0NmI1MWE5NWViYTExMDU2OGMzOGIwNTA4MDgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjUgMTk6MDc6NDIgMjAxMiAtMDcwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTctcGF0Y2hlcworCitjb21taXQgMGE0MTUzM2IxYjQ5ZjAwZDczNTdhM2QyYmVhNWRmYTc1ZThlZGNkNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIFNlcCAyNCAwMDowNzoxOSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdGVzdCBjYXNlcyBmb3Igc25tcF9zZXJ2aWNlCisKK2NvbW1pdCBhNjFiNDhkNzhlMTFkOTQ1ZGVmNDZmZGUwZjdkNTVmNzkxOWMzMzVhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gU2VwIDIzIDA3OjUzOjA5IDIwMTIgKzAyMDAKKworICAgIFByZWZlciBjb3B5X253b3JkX2NvbnN0IG92ZXIgY29weV9ud29yZChORVRTTk1QX1JFTU9WRV9DT05TVAorCitjb21taXQgOWJmZmM1NDEzZDBkODgyMzk4YjA2ZjQxMDlhYzgwN2FmMmY3ODM0NworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIFNlcCAyMyAwMDoyOTo0NCAyMDEyICswMjAwCisKKyAgICBTaW1wbGlmeSBsb2dnaW5nIHRocm91Z2ggdGhlIHVzZSBvZiBuZXRzbm1wX2NvbmZpZ19lcnJvcgorCitjb21taXQgZDA5ZDUzYTBmYTZkZjYzYjIxZTZmMTI3MzFiZWU1MWEzNjI0ZTg1ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IFNlcCAyMiAyMTozMDowOCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgY3Jhc2ggb24gaW5jb21wbGV0ZSBjb25maWd1cmF0aW9uIHRva2Vucy4KKworY29tbWl0IDAyZGNlNmY0M2I5OWY4NTk0MTYyNzkyOGMxYTUwMjJkNjcyNWQxMjQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBTZXAgMjIgMjE6Mjg6NTEgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IHRydW5jYXRlIHNpbmdsZSBkZWZhdWx0IHRyYW5zcG9ydCBkb21haW5zCisKK2NvbW1pdCAyMTFlM2M3MDYyNTk2NTQ0MWIyYTAyOWE2MTEzODAyOTc0NjczYzQzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgU2VwIDIyIDExOjIzOjE5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBjcmFzaCBmcm9tIGVtcHR5IHZhbHVlcyBpbiAtLXRva2VuPXZhbHVlIGFyZ3VtZW50cworCitjb21taXQgYWYzZDJkOTczYjFlOGUyOWQyMDVkOGEwN2FjZDgyYjFmODU0ODE5ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IFNlcCAyMiAxMDozMDoxNiAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgdGhlIHN5bWJvbCBORVRTTk1QX1BSSW8gdG8gaGVscCBpbiBwcmludGluZyBvaWQgdmFsdWVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5yYzIgLT4gVjUuNy4yLnJjMworCitjb21taXQgOGI0NTI5MjMwMWYwMzQ5ZmZiNjlkNGZkODU5NWYyZDViMTk5ZTZiNgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNSAxOTozNTozOSAyMDEyIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjIucmMzCisKK2NvbW1pdCAwY2JmZmI1NjVlNjJhZWY5MzdmYzcwMGQ4ZDNjM2I4YzY1ZGRmYTY1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI1IDE5OjA3OjQwIDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucmMzCisKK2NvbW1pdCA0MDUwNTk3MWFkZDZhM2I2ZjU5NTRjZmJkZTUzMjc0OWJmYmNiMTZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjM0OjM3IDIwMTIgLTA3MDAKKworICAgIGZpeCBmb3IgaGlkZGVuIENNU0dfeHh4IG1hY3JvcyBvbiBBSVgKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDYwZjBhOWU5ODNhYjgyN2M4MjRlMzk3ZDYyYWVmZjQ4YTYwZjAxMzMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6MzE6MTIgMjAxMiAtMDcwMAorCisgICAgRml4IHBzdGF0IG1lbW9yeSBsZWFrIG9uIGhwdXggMTFpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAxM2JkNGQ1NmJhYTk4ODYwMThhMDA0NzdlMzIxNGViZTAyNzA1ZmZlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjMxOjA0IDIwMTIgLTA3MDAKKworICAgIEZpeCBwc3RhdCBtZW1vcnkgbGVhayBvbiBocHV4IDExaQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMDgwNTQyMDgxM2RlMTU2YzdmYzUxNDI1MzRmYjQyMGEwZmNjMzU3MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzoyODo1OSAyMDEyIC0wNzAwCisKKyAgICBmaXhlcyBBVCBjb2RlIG9uIGhwdXggMTFpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBiZGIzYjE0NjM4MGRiMTMxNmNhYmQ1OGI3MDQ0MzZlN2VlY2RkOWY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjI4OjUwIDIwMTIgLTA3MDAKKworICAgIGZpeGVzIEFUIGNvZGUgb24gaHB1eCAxMWkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGU5MzZjZjgxMGE0NzM3OTE1NmQ5MTNhNzE0ZTM4MTYxODFhMGQzZGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6MjU6MjAgMjAxMiAtMDcwMAorCisgICAgZml4ZXMgZGlzQXZhaWwgb24gRnJlZUJTRCB1ZnMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDYwOGFiNTc4ODdlNTU2NmU2MzUwOWEzZjdlNWQwYTNlMjg5MmY0YTcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6MjU6MDIgMjAxMiAtMDcwMAorCisgICAgZml4ZXMgZGlzQXZhaWwgb24gRnJlZUJTRCB1ZnMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucmMxIC0+IFY1LjcuMi5yYzIKKworY29tbWl0IDA3ZjkxNDU2NGUwOTcyMjRkNjc3NTE1YzJmNWZkMWYzYzBjOWViNDIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBTZXAgMSAwOTo1NDo0MiAyMDEyIC0wNzAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNy1wYXRjaGVzCisKK2NvbW1pdCBhZWUyMTdjMDdlYTlmMzRhMzIyNjhlOTY2YzdlY2VmMDM2ZWM0YTk2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgU2VwIDEgMDk6NTQ6MzggMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5yYzIKKworY29tbWl0IDExOWIwZDNjZjEyYzk3Y2EzYzc0ZDZkMWU3MjMxOTY3MGE4Mzc4YWEKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBTZXAgMSAwOTo1MTowOCAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTYwNDczOiBmcm9tIGZlbm5lcjogSGFuZGxlIFRpbWVUaWNrcyB3aGVuIHByZXR0eS1wcmludGluZyBPSUQKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGM5NGM2MmVhMGVkY2ViYmZiYjczZmFiNmVjZGRjNjc5Zjc2OTRkYWIKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBTZXAgMSAwOTo1MTowOCAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTYwNDczOiBmcm9tIGZlbm5lcjogSGFuZGxlIFRpbWVUaWNrcyB3aGVuIHByZXR0eS1wcmludGluZyBPSUQKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDZkN2Y5ZWIwZGVjZGI5NjgyODM2ZmZkMDNmMTk3NDIxOTdhZDg3ZGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMjkgMjE6MTQ6NDYgMjAxMiArMDIwMAorCisgICAgRml4IHBvc3NpYmxlIG1lbW9yeSBvdmVycnVuIGluIGZzeXNfZ2V0ZnNzdGF0cy5jIChwYXRjaCAzNTU5NDE3KQorCitjb21taXQgZjIzNWVlOGIzMmVlZDFkZTNmMWU0MjAyZWY0NWI2Mzc3ZmJjZTE2MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyOSAyMTowNzoxNCAyMDEyICswMjAwCisKKyAgICBGaXggZm9yIGhyU3RvcmFnZVRhYmxlIG9uIEFJWCAoYnVnIDM1NTcxNTkpCisKK2NvbW1pdCA3OGNjOWQ1Y2NkODZiMTcwNjIyYWFjNTQzYzM0NWMwMjA3NTVjNzhhCitBdXRob3I6IHN0aGVuIDxzdGhlbjIzOTM0QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNzoxODowOSAyMDEyIC0wNzAwCisKKyAgICBhZGQgbWlzc2luZyBwcm9jZXNzIHN0YXR1cyB2YWx1ZXMgdW5kZXIgbmV0L29wZW4tYnNkCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA0ZWY5ZGNkODBiMGJkYTFlMThiN2UzNDlhMDhiYzBmMjJhN2U3NTVlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE3OjE2OjM3IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IE9wZW5CU0Q6IFBBVENIIDM1NTk0MTQ6IGZyb20gbmJhOiBzdXBwb3J0IE9wZW5CU0QgZm9yIGhyX3N3aW5zdAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMGI1NjlmY2NlYTk0MTRjNTBjZmQ2YjBlODNlMTgzMWJhMTI5MWNlMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNzoxNDo0NSAyMDEyIC0wNzAwCisKKyAgICBhZGQgbWlzc2luZyBwcm9jZXNzIHN0YXR1cyB2YWx1ZXMgdW5kZXIgbmV0L29wZW4tYnNkCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAxZDNjN2JlN2ZhN2EzOGZkM2ZjMzk3MjBiYjVjYjcwZjhiZDcxMTYwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE3OjE0OjIyIDIwMTIgLTA3MDAKKworICAgIGFkZCBtaXNzaW5nIHByb2Nlc3Mgc3RhdHVzIHZhbHVlcyB1bmRlciBuZXQvb3Blbi1ic2QKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGZmNDM4NDMzYWNhMDk2YmJiZWEyOWRkMzBkZmQ1YzU1MjM3NjFhNzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTY6NTA6NDYgMjAxMiAtMDcwMAorCisgICAgRml4IHJlYWwgbWVtb3J5IHJlcG9ydGluZyBvbiBCU0Qgc3lzdGVtcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgYzQyOWE0ZjM5ODRkYWU3OTFlMzA3ZGY3MDIyNTFmOTZlZjA0N2Q4OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNjo0OToxMCAyMDEyIC0wNzAwCisKKyAgICBGaXggcmVhbCBtZW1vcnkgcmVwb3J0aW5nIG9uIEJTRCBzeXN0ZW1zCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA0MWQ5ODBjMDE1NTY0ZGI3ZjIyZjc2MzE5MGY2MWFjMGQ1NmJhM2IyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgQXVnIDI0IDE0OjM1OjUzIDIwMTIgKzAwMDAKKworICAgIFdpbmRvd3M6IFVuYnJlYWsgRExMIGJ1aWxkCisKK2NvbW1pdCAyNzkzOTIzYmZlMmIwMjZmY2FlYWY1MzhhZTUwM2YxMDVjYjMxNWJjCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDMgMjI6MjY6MjAgMjAxMSArMDAwMAorCisgICAgYWRkZWQgbWlzc2luZyBUTFNUQ1AgbWVudGlvbiBpbiB0aGUgaGVscCBvdXRwdXQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucHJlMyAtPiBWNS43LjIucmMxCisKK2NvbW1pdCA5ZWM1YzU5OTc4MDI1MWRjZDMxNTVmOWFjOTgwNmVjZTdlZDZiYTIyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXVnIDExIDEyOjAwOjM3IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5yYzEKKworY29tbWl0IDMzNThiNjViMTFlMmMwZWU3MTJmNjA5ZjAyMDcxMjYwZjc1ZjliYjMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBdWcgMTEgMTE6Mzk6MzggMjAxMiAtMDcwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTctcGF0Y2hlcworCitjb21taXQgNDg0OWE0MzBkYWFmYjkxYzdhNjFiZmJiYzE3ZjkyOTllNThmY2Y2NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEF1ZyAxMSAxMTozOTozNSAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnJjMQorCitjb21taXQgMWJjMjY4NDI4ZTgyOTg1MmM5ZWYwYTc5NTUyY2E0MDQ1YWRkMjhhMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDIyOjQyOjUyIDIwMTIgKzAyMDAKKworICAgIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGluaXRpYWxpemVkIGt2bSBzdHJ1Y3R1cmUgd2hlbiBxdWVyeWluZyBwcm9jIHRhYmxlIG9uIEJTRC4KKworY29tbWl0IDdlNjdjNTAzOGI2YWFiZmRhMTkzOWVhODFkOTQwYjI0MDAwY2ZiNTEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTQ6Mjc6MDggMjAxMiArMDIwMAorCisgICAgUmVtb3ZlZCBlcnJvciBtZXNzYWdlIHdoZW4gZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorICAgIAorICAgIFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgY2FsbGVyLCBub3QgaW4gdGhlIGZ1bmN0aW9uLiBUaGVyZSBpcyBvbmx5IG9uZSBjYWxsZXIgbm93LCB1ZHBfZW5kcG9pbnRfbGludXguYy4KKworY29tbWl0IDU5YjBkZTBiOGZhNzNlYjQwMzAwNmNlZTc1ZmY4NjUxZTE1ODVlMjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTQ6MjM6MTQgMjAxMiArMDIwMAorCisgICAgRml4IGNvbXBpbGF0aW9uIGVycm9ycyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBmOTVkZjYzNDFiMWQwNjI0OTQ0M2U1MTZiNTlhNDNjZGZhM2Q0Nzc3LgorICAgIAorICAgIFRoaXMgaXMgZW1iYXJhc3NpbmcsIEkgY29tcGlsZWQgdGhlIHNvdXJjZXMgd2l0aG91dCAtLWVuYWJsZS1pcHY2LiBTb3JyeSBmb3IgaW5jb252ZW5pZW5jZS4KKworY29tbWl0IDVkN2VkYWRkNDc2MTY4MGI2NmQxZGYzYmZkZTdjYTViMTZjYTVhMTYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTI6NDY6MzUgMjAxMiArMDIwMAorCisgICAgRml4IGNvbXBpbGF0aW9uIGVycm9yIGludHJvZHVjZWQgYnkgY29tbWl0IGY5NWRmNjM0MWIxZDA2MjQ5NDQzZTUxNmI1OWE0M2NkZmEzZDQ3NzcuCisKK2NvbW1pdCA0M2M5N2JiYWFmMjExZjRjN2Y3YzcwNGNmY2I5MDFkZmJmODM0ODc0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDEyOjMwOjA5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBMb3dlcmVkIHNldmVyaXR5IG9mICdFcnJvciBleHBhbmRpbmcgWFhYIHRvIDY0Yml0cycgbWVzc2FnZXMuCisKK2NvbW1pdCA4ZTVjZjJhNzJhNDZjZDQ4M2QyMmU2MjkwYTZjOGM0YzI2YWY2YWQyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDEyOjI1OjQ4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHJlbW92ZWQgY291bnRlci02NCBlcnJvciBtZXNzYWdlcy4KKyAgICAKKyAgICBUaGVzZSBtZXNzYWdlcyBkbyBub3Qgc2F5IGVueXRoaW5nIHVzZWZ1bCwgY2FsbGVyIHNob3VsZCBjaGVjayB0aGVpciByZXR1cm4gdmFsdWUgYW5kIHJlcG9ydCBpdC4KKworY29tbWl0IGY5NWRmNjM0MWIxZDA2MjQ5NDQzZTUxNmI1OWE0M2NkZmEzZDQ3NzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTI6MDE6MjUgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHJlbW92ZWQgZXJyb3IgbG9nIG1lc3NhZ2VzIHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4KKworY29tbWl0IDE4ZGFjZThlNGEzNmIwODNkNmVmNzE3NzM1YzYzZTdmNDAyMjRkYjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTA6NDE6NDUgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogYWRkZWQgQ1ZGUyAoQ2VudHJhVmlzaW9uIEZpbGUgU3lzdGVtKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlLgorCitjb21taXQgOTBmNDMxYjQ1ZDIxNTA2NDI3YmMwYmQxZDRlZTY5ZTBiOGVhMzBiYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA4IDIzOjEwOjUwIDIwMTIgKzAyMDAKKworICAgIFVwZGF0ZSB0byBjdXJyZW50IE1JQiB2ZXJzaW9ucworCitjb21taXQgOWU3YTBiOWU1ODBkM2IxZWE2MTk4YTc0MTRjODE2YzIzYjEyM2IxMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA4IDIyOjI3OjE2IDIwMTIgKzAyMDAKKworICAgIFVzZSBhIHdya2luZyBhd2sgZm9yIFNvbGFyaXMKKworY29tbWl0IDBlMzkyMmFlMjFlNGI3ZWM1Mzg4NjdhZmQyMmNlNzRkNzQxZTBmMWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgOCAyMjoxNzozNCAyMDEyICswMjAwCisKKyAgICBmaXggcHJvdG90eXBlIGZvciBrbG9va3VwCisKK2NvbW1pdCBhMjIxMDk3MTFhNmQxZWMxNGI2YTNmMWNhYzIyMWQ3MDI2M2YxMDRhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDggMjI6MDg6MTMgMjAxMiArMDIwMAorCisgICAgZml4IHByb3RvdHlwZXMgZm9yIGtsb29rdXAKKworY29tbWl0IGFjMDYyOTcyYzU4NTE3NGY5NWQ3YmE4N2FhNWVjNTRjNDJmZGVjNTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgOCAyMjowMDoyNiAyMDEyICswMjAwCisKKyAgICBmaXggcHJvdG90eXBlcyBmb3Iga2xvb2t1cAorCitjb21taXQgN2NkZDhlYmVmOTUwN2ZlNzY2MTA3Y2E5ZmVlMDU0YzQ0Y2MwYmFjNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEF1ZyA1IDA4OjEzOjU5IDIwMTIgKzAwMDAKKworICAgIE1ha2Ugc25tcF9hbGFybV9yZXNldCgpIHVzZSB0aGUgbW9ub3RvbmljIGNsb2NrLiBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCAzN2JhN2UyLgorCitjb21taXQgMDIzZjYxZWE3ODNiZmNjNTNmZTkwYWE2NjU0NWM1YWVhMmRiODA2MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyA4IDE2OjI2OjU0IDIwMTIgKzAwMDAKKworICAgIEZpeCBidWlsZCBicmVha2FnZSBjYXVzZWQgYnkgY29tbWl0IDAyODYxNGVjZjJkNjczOTg2OTlkYzNiZDc4NDAyOWYzMzYwZjJlMTMKKworY29tbWl0IGNkODIwOTQ5YTE0OTFhZjEwM2E4NTU1ZjZiZGFlMDQ4NTFmM2QyODUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgOCAxNjoxNjo0MyAyMDEyICswMDAwCisKKyAgICBVbmRvIGJ1aWxkIGJyZWFrYWdlIGNhdXNlZCBieSBjb21taXQgMzdiYTdlMjBhNTIxZmJmMDQ1OGEwYzc3ZWVhMmU1ZTM2YmQ3ZWMwYQorCitjb21taXQgZjE0MzAwOGNjYzU3ZWExMGNiYjg4YWIzNTU0ODIyYjE3YjYyNzBhYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEF1ZyA1IDA4OjQ1OjQyIDIwMTIgKzAwMDAKKworICAgIE1ha2UgZ2V0X2V4ZWNfb3V0cHV0KCkgd29yayBvbiBiaWcgZW5kaWFuIHN5c3RlbXMuCisgICAgCisgICAgVW5kbyBBUEkgYnJlYWthZ2UgaW50cm9kdWNlZCBieSBjb21taXQgNzM3NGI4NGZlNGMyZWY4NDk3ZmRlM2RhZTgwYTY5YWE4OWViYTE5Yy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucHJlMiAtPiBWNS43LjIucHJlMworCitjb21taXQgODQzMjJlMGRjMmE4OTc0NjQ2NTQyZDk4ODFiYzAxYjQzZGMzYTEyZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxNjoyNDowNyAyMDEyIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjIucHJlMworCitjb21taXQgOGZlYzdhODFkNjEzM2E1ZjA1ZWQzNGE1YWY5ODA2YWY1ZDEyODIyMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxNTo1Nzo1NiAyMDEyIC0wNzAwCisKKyAgICBmaXggdGhlIGFzc2VydCBjaGVjayB0byBhbGxvdyBmb3Igc29tZSBrbm93biBhc3NlcnRzCisKK2NvbW1pdCBkZmRlNmQyZGRkNTE5YzhjMmFlMTc4ODc3NGZkZjkwZDhiZWEwMmIxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDMwIDEwOjA4OjI0IDIwMTIgLTA3MDAKKworICAgIGluY2x1ZGUgZXJybm8uaCBhbmQgZG9uJ3QgdXNlIGNvbnRpbnVlIG91dHNpZGUgYSBsb29wCisKK2NvbW1pdCA3Y2ZmZTAyMjJjZDk4YTIxZTMwZjQ0YzNkZjlmMGQ5MGJmMDk2ZmU5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDE0OjEzOjUwIDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucHJlMworCitjb21taXQgMjJhZjdmZDQ2Nzc2YThkYjIzNjJlODhhY2IxYjY5YjE2NWMwMzRiNgorQXV0aG9yOiBibGVudHogPGJsZW50ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTM6NTI6NDAgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogYWl4OiBQQVRDSCAzNDAzNDMzOiBmcm9tIGJsZW50ejogSXNzdWVzIHdpdGggaHJTV1J1bk5hbWUgYW5kIFBhcmFtZXRlcnMgb24gQUlYCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA1MTZiOWY4Mjc1YjhkYjAzY2RjNDEwNzhlNjVjMjE3MDMwOWEzZjhiCitBdXRob3I6IEp1bGllbiBQaW5vbiA8anBpbm9uQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMzoyNTozMSAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSCAzNDEyOTM5OiBmcm9tIGpwaW5vbjogUmVwYWlyIHRrbWliCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA4ZjIzMGY0MDFjNjRkODIyODgzYWM0NDQ2MjRhMmMyZmQ3MTI4ZDhlCitBdXRob3I6IEhhcnNoYSBTaGl2YW5uYSA8bmFhbnVoc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTM6MjI6MTEgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzU1Mjc0NTogZnJvbSBuYWFudWhzOiBmaXggdG8gc3VwcG9ydCAzMiBjaGFycyBmb3IgVkFDTSBuYW1lcyBhcyBwZXIgUkZDLTI1NzUKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDM0MDA4ZDMyYWVmNDNkOGJiZTEwMDBmYjliZjk0NjQyYzA1MTRmNmYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTM6MjA6MzEgMjAxMiAtMDcwMAorCisgICAgZml4IHRoZSBhZ2VudHggcGluZyBwYXRjaCBzbyBpdCB3b3JrcyB3aXRoIHRoZSBuZXdlciBhbGFybSBzdHJ1Y3R1cmUgbmFtZXMKKworY29tbWl0IDk2MjY3NjM5NGQzZmU1NTdlYWQ5MTA1N2I0ZDc4MDIyNmRjMGQ2YjMKK0F1dGhvcjogTWlqbyBTYWZyYWRpbiA8bWlqb3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEyOjQ4OjAxIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDE0MDUxOiBmcm9tIG1pam9zOiBzbm1wLWJyaWRnZS1taWI6IGZpeCBmb3IgZG90MWRCYXNlVGFibGUKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDM3YmE3ZTIwYTUyMWZiZjA0NThhMGM3N2VlYTJlNWUzNmJkN2VjMGEKK0F1dGhvcjogVmluY2VudCBCZXJuYXQgPHZiZXJuYXRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEyOjI3OjI4IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDgxNjg2OiBmcm9tIHZiZXJuYXQ6IERvbnQgcGluZyBtYXN0ZXIgYWdlbnQgdW5sZXNzIHRoZXJlIGlzIG5vIGluY29taW5nIHRyYWZmaWMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDJiZTVmZWFkYjA1NDA4NDZlMGUzYWRhMjdlZmI5Nzg5NGE0Y2JkNTIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMDc6Mjk6MTcgMjAxMiAtMDcwMAorCisgICAgYWRkZWQgYSBkYXJ3aW4gMTIgdmVyc2lvbgorCitjb21taXQgMWY5YmNkMjFlN2MyZDVlZmZiNjJhYTAxYjdiODdlNDNkYzg2MjE0YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTQ6NDM6MjcgMjAxMiArMDIwMAorCisgICAgRml4ZWQgU0NUUC1NSUI6OnNjdHBBc3NvY1ByaW1Qcm9jZXNzLCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgd2FzIG5vdCBpbml0aWFsaXplZC4KKworY29tbWl0IDQ4YmU1ZTg5YWEwNGFkYjBkZjdlMDk0YjJmZTQ2MzAxNTQyOWZjOTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEzOjQ4OjMxIDIwMTIgKzAyMDAKKworICAgIEFkZGVkIGxvZyBtZXNzYWdlIHdoZW4gaXBUYWJsZSBtaXNzZXMgc29tZSBpbnRlcmZhY2VzLgorCitjb21taXQgNzUyM2YwZjAxYmE0ZGI2NWFjMTY0N2EyMzIyOGNmMDZjMGI3MmEwMworQXV0aG9yOiBNYXJpdXN6IENlaWVyIDxtY2VpZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDMwIDEwOjE5OjMzIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1MzY2OTI6IGZyb20gbWNlaWVyOiBjcmVhdGUgYSB1bml0IHRlc3QgZm9yIHJlYWRfY29uZmlnIEFQSXMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGMwN2I4ZDliMzc3MGI2MTVjOGUxNjJkYmRmNzY0MzgwNWYzNzJkNzUKK0F1dGhvcjogTWFyaXVzeiBDZWllciA8bWNlaWVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAzMCAxMDoxODo0MiAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTM2NjkyOiBmcm9tIG1jZWllcjogRml4IGZvciBjYWxsYmFjayBjYWxsaW5nIHdoZW4gdW5yZWdpc3RlcmluZyBjb25maWcgaGFuZGxlcgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNWMyNDI0ZjA3ZDg1YzBjNGY3OWQ2YzVmYWY2NGQ3ZjNlZTg2MTcyNgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAzMCAxMDowODo0MiAyMDEyIC0wNzAwCisKKyAgICBkb24ndCBkdXBsaWNhdGUgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyBkZWYKKworY29tbWl0IDczNzRiODRmZTRjMmVmODQ5N2ZkZTNkYWU4MGE2OWFhODllYmExOWMKK0F1dGhvcjogR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAzMCAwOTo0MToxNyAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzgzOTcwOiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsZSBlcnJvciBvbiBGcmVlQlNEIDkueC9QT1NJWGlmeSBhdXRvX25saXN0LCBldGMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDY3MGQ5NmU3ODY1OTBmZGQzMGExNmEzMzAwYzBlZDViZDZlNTMyMTQKK0F1dGhvcjogTWFyayBSdXNrIDx1c2VyX2lkPTM0OTg5NUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKdWwgMjkgMjM6Mzk6MjIgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDM0MjQ5MzM6IGZyb20gdXNlcl9pZD0zNDk4OTU6IFVzZSBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9USU1FT1VUIGZvciB0aGUgZGVmYXVsdCB0aW1lb3V0CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBmMWVhZWMxNWVmNjAzYjhjZTU0MjkzMmZmZGJkODc4OGMzZDFhY2M1CitBdXRob3I6IERhbmllbCBIb2JpIDxob2JpZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKdWwgMjkgMjM6Mjg6MDEgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDM1MzA3OTQ6IGZyb20gaG9iaWQ6IHBhc3MvcGFzc19wZXJzaXN0OiB1bnJlZ2lzdGVyIE1JQiB3aXRoIGNvcnJlY3QgcHJpb3JpdHkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGQ3ODNhZDk5MGU5MTRjMGVlMWM5OGQwYTkzYTQyOWViMmIyZjQ5OTcKK0F1dGhvcjogRG91ZyBNYW5sZXkgPHRla2thbWFuZW5kbGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKdWwgMjkgMjM6MjU6NDAgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzUyNjU5OTogZnJvbSB0ZWtrYW1hbmVuZGxlc3M6IEEgYnVnZ3kgU05NUHYzIGFnZW50IGNhbiBjYXVzZSBhIG5ldC1zbm1wIGNsaWVudCB0byBoYW5nCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBlOTg1MTUyMGMxOGQ3ZWQxNzI0MDRhMzdkYzBkYzdhMTM2YmZhZWRkCitBdXRob3I6IERhbmllbCBFdmVycyA8ZGFuaWVsLWV2ZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEp1bCAyOSAyMzoxNDoxOSAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTQ4MjU3OiBmcm9tIGRhbmllbC1ldmVyczogZml4IGZvciByZWN1cnNpdmUgcHRocmVhZCBtdXRleGVzCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBlN2EzNzY3OGMyYjczNTlhZmQ0NGEzMDdlODI0YzFmN2Q3YTBjODdkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSnVsIDI5IDIxOjM1OjM1IDIwMTIgLTA3MDAKKworICAgIE5FV1M6IG9zeDogcGF0Y2g6IDM1MTQwNDkgZnJvbSB0d29iaXRzLWdpdGh1YjogZml4IGNvbXBpbGF0aW9uIG9uIGRhcndpbjExCisKK2NvbW1pdCAxMjIxNDI2YWJhZDE1YjliMmZjZWU4ZjFlMzJhYjUyZWYyNjkyOTUyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxNDoxODoyNCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSEVTOiAzNTI5NTQxOiBEb24ndCByZWZlciB0byBpbnRlcm5hbCAnbXknIHZhcmlhYmxlcyBmcm9tIGV4dGVybmFsIHNjcmlwdHMKKyAgICAKKyAgICBGaXggcHJvdmlkZWQgYnkgTGV6eiBHaWxlcworCitjb21taXQgOWMwNmMyMjAyZGMwNTY3MDNjODA5NTlhMGVjYTlhNzE2ODRjMjhkZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTM6Mjk6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogTGludXg6IFBBVENIRVM6IDM1MzY0MjA6IEVuc3VyZSBzbmQvcmN2IG1lbW9yeSBidWZmZXJzIGFyZSBzdWl0YWJseSBhbGlnbmVkCisgICAgCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgVHlsZXIgT2xtc3RlYWQKKworY29tbWl0IDg5YjgyYzU1ZjllZmQyZThhYjhjNmQ2NWZhNTY3YzViMWZhYzE4NDMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDEzOjE0OjA3IDIwMTIgKzAxMDAKKworICAgICJJZGxlIiBwcm9jZXNzZXMgKGkuZS4gaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCkgYXJlIHByb2JhYmx5CisgICAgYmVzdCByZWdhcmRlZCBhcyAid2FpdGluZyBmb3IgYW4gZXZlbnQiIHRvIGJlY29tZSBydW5uYWJsZSAtIGkuZS4gJ25vdFJ1bm5hYmxlKDMpJworICAgIFRoYXQgZXZlbnQgYmVpbmcgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGNyZWF0aW9uIHByb2Nlc3MuCisgICAgICAgSXQncyBhcmd1YWJsZSB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBzdHJpY3RseSAibG9hZGVkIiwgYnV0CisgICAgdGhpcyBmZWVscyBsZXNzIG1pc2xlYWRpbmcgdGhhbiByZXBvcnRpbmcgdGhlbSBhcyAnaW52YWxpZCg0KScKKworY29tbWl0IDZlNzgwYTViZjBkNjRiZjQ3ZGZiZjQ3OWFlN2Y1NmMxMGZmODE2NmUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDEyOjU3OjU0IDIwMTIgKzAxMDAKKworICAgIENsYXJpZnkgbWVhbmluZyBvZiBoclNXUnVuU3RhdHVzICdpbnZhbGlkKDQpJworICAgIEVuc3VyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYWx0ZXJuYXRpdmVzIGRvbid0IGNvbmZ1c2UgY29kZSBzeW50YXgKKworY29tbWl0IDk5YjM1M2Y3MjUzYTViYjM4Yjg2ZjMxYzI3MDhlMTZiMzRhNDZjZTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDEyOjUwOjUxIDIwMTIgKzAxMDAKKworICAgIEFkZGl0aW9uYWwgcGF0Y2ggZnJvbSBQYXRjaCBJRCAjMzU0MzAwMAorCitjb21taXQgZDBlMDNmZTRhMjM2OTQ1ZGFmNDJhZjdhNDcwOTRlNjg2ZjliZGI5ZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTI6NDE6MDIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM1NDMwMDA6IFZhcmlvdXMgZml4ZXMgdG8gUm1vbiBjb2RlCisgICAgU3VwcGxpZWQgYnkgUGF0cmljayBSaXR0ZXIKKworY29tbWl0IDY2MzJhMmI5YjlmYWQxYTBiMGQ2YmFlZGYyYTJiMzkxZjVkNGU5MTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDE0OjM5OjQyIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMzUxNzAzMDogRW5zdXJlIGxhcmdlIHRhYmxlcyBhcmUgd2Fsa2VkIHByb3Blcmx5CisKK2NvbW1pdCBiOGQxNjYwNGRiYjJmODBlYmUyODUyMzIyYWE4MzM2MWEwMzIzNzk2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxNDoxOTowNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBhcHBzOiBCVUc6IDM1Mjk3Njg6IEJlIG1vcmUgY2FyZWZ1bCB3aGVuIHN0cmlwcGluZyBvZmYgbnVtZXJpYyBzdWZmaXhlcworCitjb21taXQgMGIzYWQ0NGVjNGMxYjlmNDFkYzNlZjcwZTZhMzhhNTNlZjI2OGFkZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTM6MzQ6MTAgMjAxMiArMDEwMAorCisgICAgRml4IGNvbW1lbnRzIGRlc2NyaWJpbmcgRnJlZUJTRCByZWxhdGlvbnNoaXBzCisKK2NvbW1pdCA4Y2Y3YTg5MTg3YTk5NmZhZmYwNDA0MTQ5ODZmZmE1ZDc4ZDU2ODNlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMzoyMTo1NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAzNTMyMjM0OiBGaXggdHlwbyBpbiBsaWJ0b29sIHNjcmlwdAorICAgIChhZGRyZXNzZWQgcHJvcGVybHkgaW4gbGlidG9vbCAyLjQuMikKKworY29tbWl0IDQyNThkODUyY2E3YjZhZWFlOTNhZDczMDY0ZDQzYWE4MDdlYjYxMDQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEzOjE2OjIwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGRvYzogQlVHOiAzNTM1MjY5OiBEb2N1bWVudCB1c2Ugb2YgW3NubXBdIGZvciBjbGllbnQtc2lkZSB0b29scy4KKworY29tbWl0IDI2ZWQ0MGNiZDA3Y2YyNzFhOWNmYzQ1MTdkOTY0Nzc0NzEyYWQ3N2MKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEyOjU3OjU2IDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgbG9jYWwgcm9sbHVwIG9mIHBhdGNoZXMgd2l0aG91dCBmaXJzdCBzeW5jaHJvbmlzaW5nIHdpdGggZXh0ZW5hbCByZXBvLgorCitjb21taXQgOTA0YzQ0MmQ2MGM1Yjk5YWFjZDdmNjAzMDdjMjg2ODRlZmFlODU0YworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTI6NTM6MzcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDM1MzU5Njc6IEZpeCBtZW1vcnkgbGVhayAtIHNubXBfe3Nlc3NffWVycm9yIGFsbG9jYXRlcyB0aGUgb3V0cHV0IGJ1ZmZlcgorCitjb21taXQgNTk3ZWNkYTY4ZWUyYjU4MGI2NjYyODg5NzdiMDRhYTEzMzIwNzUxNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTI6MTc6MTQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNTQwNjIxOiBkaXN0OiBBZGQgbWlzc2luZyBQcm92aWRlczogdG8gbmV0LXNubXAtcGVybG1vZHMgUlBNIHNwZWMKKworY29tbWl0IDQzZDViYTIyNGMzZjI5ZmQ4ZTdmZDFkMDYwYTE3MDQ1YWFkN2VmZjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDExOjI1OjQzIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMzU0MTAxMjogRml4IGhhbmRsaW5nIG9mIGdldHRhYmxlIGNvbHVtbnMKKworY29tbWl0IGJjMjkzYWNhZDhkMzQ4N2NkZGVmM2M3MGNlYTc0MzY4ZjM0ZDkzNTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDExOjIwOjIwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM1NDM4NjQ6IFJlbW92ZSBleHRyYW5lb3VzIGZ1bmN0aW9uIHR5cGUKKyAgICAoYW5kIGZpeCBhIHJlbGF0ZWQgdHlwbykKKworY29tbWl0IDAyODYxNGVjZjJkNjczOTg2OTlkYzNiZDc4NDAyOWYzMzYwZjJlMTMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDI0IDE1OjM3OjE2IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBzbm1wZCBleGl0aW5nIHNob3J0bHkgYWZ0ZXIgc3RhcnQgZHVlIHRvIGluY29taW5nIHNpZ25hbC4KKworY29tbWl0IDRkMzg4OTVmNDU5YTFkZjI0ZjY4YzRhNjBlNGNhZjZhNzc4ZDhjMWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDI3IDA5OjM1OjQ0IDIwMTIgLTA0MDAKKworICAgIENIQU5HRVM6IHNubXBkOiByZW1vdmVkIGxpbWl0IG9mICdleGVjJyBhbmQgJ3NoJyBlbnRyaWVzIGluIHNubXBkLmNvbmYKKyAgICAKKyAgICBVc2UgZHluYW1pYyAocmUpYWxsb2NhdGlvbiBpbnN0ZWFkLgorCitjb21taXQgZGNlZWFjYzk5OGZlMjMyMjg4MmU3ZWVkZWMwYTcxYTc5ZGM0OTRhYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBKdWwgMjQgMDk6MDA6MjMgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgYmUgc3VycHJpc2VkIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHZhcmlvdXMgZmlsZXMKKworY29tbWl0IDU2YzNjMDc4MzM2Y2JmMWJmMDlmZDFiMDEwNzhhOTAzMDcxNzYxM2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBKdWwgMTEgMDg6NDc6MTMgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAzNTQyMzA3OiBDb3JyZWN0IHN5c09SSUQgZm9yIHNubXBNUERTdGF0cy4gVGhhbmtzIHRvIERhdmUgVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKworY29tbWl0IDYxZWNlZGMwODNmODgxZGI4YTlhNTBkNTBiZGVlZDM2NjI0ZWQzMDcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBKdWwgMTEgMDA6MjE6MjcgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAzNTQyMTg4OiBDb3JyZWN0IHN5c09SRGVzY3IgZm9yIHNubXBVc21NSUIuIFRoYW5rcyB0byBEYXZlIFZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK2NvbW1pdCAyZjllZGU0MTlmNDBlODQ4YTI0MjUzODkyODhjYWMwZTIzMzFiOTkyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAxOSAxNzoxMDo1MiAyMDEyICswMTAwCisKKyAgICBGaXggZXhhbXBsZSAncnN5bmMnIGNvbW1hbmQgZm9yIGZ1bGwgcmVsZWFzZXMKKworY29tbWl0IDZkZDc4ODRkOTllNzU2ZTJmMjJiNjg4ODIzY2UxYjFkNTI2YWQxNjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDE1OjU5OjU5IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMgorCitjb21taXQgOTc2Njk2YTEyOGU1N2I1MTJiZjdhZDQwMGQwMDIzNjhiNGE5YTg3MQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTQ6MzQ6MzEgMjAxMiArMDEwMAorCisgICAgVjUtNi1wYXRjaGVzIG91dCBvZiBSZWxlYXNlIENhbmRpZGF0ZQorCitjb21taXQgNTdjNTY4ZDNkMzk4MTcyYzU1NDFmYjMxYmI3NWQxOGZjY2UyZTI2ZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTQ6MzQ6MTUgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMgorCitjb21taXQgNzNkOTA2YmM3Yzk4NTA2ZmEyYjRkNmQyOTBmN2IzYmViYTJlNGEwZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTE6MTI6NTggMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yCisKK2NvbW1pdCA0MmI1YWZiM2NkNmQwNmFkYjQyNmYxZGJhYTk4MzU4ZjJiMmU4YTUzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxMDo0Njo0NyAyMDEyICswMTAwCisKKyAgICBWNS01LXBhdGNoZXMgb3V0IG9mIFJlbGVhc2UgQ2FuZGlkYXRlCisKK2NvbW1pdCA4YmQ0NDBjNDNlMzY1YTBiNzdkNDdmNTgyY2FkZTlmOTdjN2JmY2U3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxMDo0NjoyOCAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yCisKK2NvbW1pdCA2ZTA4NTVhMzE1NzE5ODQ5OTQxMWFjNTJiNDZkNWYzMmFhZDViOWZhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAwOTo1MTozMiAyMDEyICswMTAwCisKKyAgICBBZGQgbWlzc2luZyByZXR1cm4gdHlwZSBpbiBmdW5jdGlvbiBkZWNsYXJhdGlvbgorCitjb21taXQgMDdkODI1ZThiYjM1ZWVhOWFjNmIxY2I4MmNiYjIzNGZlNjZiMWFiNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMDk6NTE6MzIgMjAxMiArMDEwMAorCisgICAgQWRkIG1pc3NpbmcgcmV0dXJuIHR5cGUgaW4gZnVuY3Rpb24gZGVjbGFyYXRpb24KKworY29tbWl0IDVkYjcwMDM2ZWY2NzU2MzU2NDdlNWI3YzcyNTM0NTY4Mzg4MzY2NDcKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTEgMTQ6NTU6MzggMjAxMiAtMDcwMAorCisgICAgZG9uJ3QgdXNlIC0tcmViYXNlCisKK2NvbW1pdCBkNGMxNTQ5NTkzY2UyYzJjYWViOThlNWY4YWJmZDdhNWFlNWEwMjczCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAyNyAwOTozNTo0NCAyMDEyIC0wNDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogcmVtb3ZlZCBsaW1pdCBvZiAnZXhlYycgYW5kICdzaCcgZW50cmllcyBpbiBzbm1wZC5jb25mCisgICAgCisgICAgVXNlIGR5bmFtaWMgKHJlKWFsbG9jYXRpb24gaW5zdGVhZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucHJlMSAtPiBWNS43LjIucHJlMgorCitjb21taXQgZmZjZTQ5ZmIxYWI0YTc4ZDRmMjk0N2JlMDZkNjIwZjE0MjQ1MjhmZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMSAxNzoxMjozMSAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnByZTIKKworY29tbWl0IGJkN2M3Mjk3MTg3ODE4ZTVlZWY3MzI3NjY3ZTRhODFmNmM5ZmM4OWIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTEgMTQ6NTU6MzggMjAxMiAtMDcwMAorCisgICAgZG9uJ3QgdXNlIC0tcmViYXNlCisKK2NvbW1pdCBhNzE1MzEyZTJjZTQ5ZDRkYTkzZmMxNDBjYzM5ZmMxMDBiMGI3OTc4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDExIDE1OjQ3OjIyIDIwMTIgLTA3MDAKKworICAgIHVwZGF0ZWQgZm9yIHRoZSBwcmV2aW91cyA1LjcuMi5wcmUxIHJlbGVhc2UKKworY29tbWl0IDE3Mjc3Njg5YjYyOWY0NTg2ZDVkNzE0ZDg3Y2U2YmMxMWY4ODc2NjgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTEgMTQ6NTU6MzggMjAxMiAtMDcwMAorCisgICAgZG9uJ3QgdXNlIC0tcmViYXNlCisKK2NvbW1pdCA2Nzg2ZmZjNzZmYWNmNzQ2YWZiNmFmMjUxNThmNzk0MDY1NmFiMzljCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSnVsIDExIDA4OjQ3OjEzIDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUcgMzU0MjMwNzogQ29ycmVjdCBzeXNPUklEIGZvciBzbm1wTVBEU3RhdHMuIFRoYW5rcyB0byBEYXZlIFZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK2NvbW1pdCBmMGUzNWQ2MWY5MjU4ZGM2MDhkYTliZjcxOGFmMTQ1N2E4NTlmYTE5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSnVsIDExIDAwOjIxOjI3IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUcgMzU0MjE4ODogQ29ycmVjdCBzeXNPUkRlc2NyIGZvciBzbm1wVXNtTUlCLiBUaGFua3MgdG8gRGF2ZSBWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorCitjb21taXQgNTIwNmQyNWQ0Y2I5NGQ0YjBkZDMzMWE1YTQxMTNkNGQ4Nzc4MmM0MgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAyIDEyOjE0OjM5IDIwMTIgLTA3MDAKKworICAgIGJldHRlciBkZXNjcmlwdGlvbiBvZiAtLWRpc2FibGUtc2V0LXN1cHBvcnQKKworY29tbWl0IGY5Mjg1MzI4MTQ3N2VlNzI0YTUxYTk5NjdmMzdkM2YxZGQxYjBmN2UKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMiAxMjowOTo1MCAyMDEyIC0wNzAwCisKKyAgICByZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb25zIGNhdXNpbmcgYSBwcm9ibGVtCisKK2NvbW1pdCA1YmUyNzM2ODc1MTY5MWZjMWFiNTVmZTYyYjQxMDZkOGQ5OWI4NzA0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDIgMTI6MDY6NTggMjAxMiAtMDcwMAorCisgICAgYWZ0ZXIgcHVsbGluZyBhbGwgdGhlIGJyYW5jaGVzLCBzd2l0Y2ggYmFjayB0byB0aGUgaW5pdGlhbCBvbmUKKworY29tbWl0IDgyNTk2YTY5ZjVjZTUzZDVhNmYwYWY0MjE1Yzk4ZDYxODRkYWI0ZDQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDE0OjA0OjUwIDIwMTIgKzAxMDAKKworICAgIFVucGljayBtZXJnZSBjb25mbGljdC4KKyAgICAoTm90IHN1cmUgd2h5IHRoaXMgd2Fzbid0IGZsYWdnZWQgdXAgZWFybGllciAtIG9yIG1heWJlIEkganVzdCBtaXNzZWQgaXQhKQorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGIwNWJkNzhmOWYyMzRiYjU3YTAwYjU0YzViZmIxZGUzMmEwOWY0YTQpCisKK2NvbW1pdCA2YTA3NWFlNDk0Yzc2YjgyZWVhOTYzMjdjZjUyNDJkZjA0ODc0M2RiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxNDoyMTowOCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMzCisKK2NvbW1pdCBhMzdlN2UwMjk0NTE0N2JmZTZjYWRiOTU3MTcwNmM2YjJlYzc0M2JmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxNDoxNzo0MiAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMzCisKK2NvbW1pdCBiMDViZDc4ZjlmMjM0YmI1N2EwMGI1NGM1YmZiMWRlMzJhMDlmNGE0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxNDowNDo1MCAyMDEyICswMTAwCisKKyAgICBVbnBpY2sgbWVyZ2UgY29uZmxpY3QuCisgICAgKE5vdCBzdXJlIHdoeSB0aGlzIHdhc24ndCBmbGFnZ2VkIHVwIGVhcmxpZXIgLSBvciBtYXliZSBJIGp1c3QgbWlzc2VkIGl0ISkKKworY29tbWl0IDRkMTU3NDJjNzUwYTk2YTRkYmIzZGE4NzQ3NDFhZTE1MjQ4OWY4ZDUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjU4OjA3IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS02LXBhdGNoZXMKKworY29tbWl0IGY2YjVlMzM3NmVkM2E4ZTllYWY3NGI3ZDY4MjJiM2E3NjU3NzJlZTgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjU3OjU2IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucmMzCisKK2NvbW1pdCA1Y2ZiMDgxMTEyN2E2NTNkZmYwZjRlNTNhZDYwMjllMjI5OGE2YzYyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzoyODozNyAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCBlNzJlMjA1ZmRjZWY3ODdlZjg0MGM4YzkyOGVkMjczNTFhNjk1NDRiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzo1ODowNyAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBmNzlhNTRmMjQ3MjUwOGIxNjdkOTc3ZjM2N2MzODY0YjU2MjFlODlkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzo0Mjo1MyAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMzCisKK2NvbW1pdCA1NmVmNWYwZGI1MWNmZDU1MjI2ZjgyZjk0ZjNmM2QyNDUwZTRmZWI1CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzozOTozMiAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMzCisKK2NvbW1pdCBhZjFkMDBhYjAyNDYyNzVkYWRiNWYwY2QzYTIzYTc3ZDVmNTU5OGNkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzoyODozNyAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCBmMTg3NzZkNjNhNTE2MDIwMzE3ZTU4ODc1YWIyNDM1MmQ1ZGI4NjUxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzoyODoyNiAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnJjMworCitjb21taXQgZmUxMDc3OTRlNzQwMGQyMzllOGFmM2RhOGI0YTNmYmVmMDZiNWRhOQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTUtcGF0Y2hlcworCitjb21taXQgMGY4NGZiY2Y3MTk5NWJkZGFmYWI1MDBkODdjOWM1YTZmNDYxYTczNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTI6Mjk6MzQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM0Nzk3NDA6IEZpeCBoclNXUnVuUGVyZiBzdGF0aXN0aWNzCisKK2NvbW1pdCAxZTNiYjYwNjBiZTYxNTZkM2ZmMzE2YzVhN2U0ZmQ3ZjA1ZTM3Y2ZmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMjoxMTo1NiAyMDEyICswMTAwCisKKyAgICBORVdTOiBzbm1wZDogQlVHOiAzNTMyMDkwOiBGaXggaGlnaCBpZkluZGV4IHZhbHVlcyBjcmFzaGluZyBockRldmljZURlc2NyCisKK2NvbW1pdCBlODY2M2ZhYzhiODg2NjMyODI2Njk3MjZhMDhmMTZkYjE2YjVmNGRiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAxOCAxMzozMDoyNSAyMDEyICswMjAwCisKKyAgICBSZXZlcnQgIkNITkFHRVM6IHNubXBkOiBmaXhlZCBzbm1wZCBleGl0aW5nIHNob3J0bHkgYWZ0ZXIgc3RhcnQgZHVlIHRvIGluY29taW5nIHNpZ25hbC4iCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBiMTFhNGU5M2Y1MGQ4YTU0NGY4MzVmMzc2YzNhNGI4YzA2NDFhMzFhLAorICAgIHdlJ3JlIGluIFJDLXBoYXNlIGFuZCBjb2RlIGlzIGZyb3plbgorICAgIAorICAgIChzb3JyeSBmb3Igbm9pc2UpCisKK2NvbW1pdCBiMTFhNGU5M2Y1MGQ4YTU0NGY4MzVmMzc2YzNhNGI4YzA2NDFhMzFhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAxMSAxNjoyNjowOSAyMDEyICswMjAwCisKKyAgICBDSE5BR0VTOiBzbm1wZDogZml4ZWQgc25tcGQgZXhpdGluZyBzaG9ydGx5IGFmdGVyIHN0YXJ0IGR1ZSB0byBpbmNvbWluZyBzaWduYWwuCisKK2NvbW1pdCBhNTcwMjM4ZDU4ZWI1YTk5NmI1NmYwMWEyN2ExOGRmNmYzN2QwZjYwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAxMSAxNDoyMDoyNSAyMDEyICswMjAwCisKKyAgICBNb3JlIHByZWNpc2VseSBkZXNjcmliZSAtYyBvcHRpb24uCisKK2NvbW1pdCA0OGNjMzlmMWFhMGZhNmNlOTU1ZWY3NmIyNWRiOGY5ZGNhMDZiODBkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDk6Mjc6MTAgMjAxMiAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IDgxMDE4NWFlMGIwY2QyYWQ0ZDQyNGExYmE3NzVlZjVjZWFmNTBmMDMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwOToyNDoxOSAyMDEyIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjIucHJlMQorCitjb21taXQgNjI3MTQ3MWUwMTI4MmYzNjc1NzI0ZWFmMTM1OGNlYjBlOTVkZGQ0ZQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA4OjMyOjQwIDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucHJlMQorCitjb21taXQgZmNiNzgyYWE4ODkzMTM0Yzc0MTRhOTI2ZDkyNjg1OTRmNzI1YjkxNQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA4OjMyOjE4IDIwMTIgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMi5wcmUxCisKK2NvbW1pdCBlM2JjZDg3YzcyZmNlYTc3MDZlODY4YjVhY2U3NTI5NjA5M2Y3NDk3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxNDowOTo0MiAyMDEyICswMTAwCisKKyAgICBGaXggZGlzdC9yZWxlYXNlIGZvcm1hdAorCitjb21taXQgZDgxM2NlMmVlZWZjNjgyMjljZmNhZjIwNjAzMjQ0Y2RkNmQwOWQzYworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTQ6MDc6NTIgMjAxMiArMDEwMAorCisgICAgRml4IGRpc3QvcmVsZWFzZSBmb3JtYXQKKworY29tbWl0IGZhN2JkNTgxZTM3ODM2ODVkYjM5YzliNGVhZjg0N2JlNWFjODZmZDMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjUzOjEwIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5yYzIKKworY29tbWl0IDA3MzllMjM4MmQzMTE0NmFjYTMyMDUyNDRjZjcwNzg4YjQwYTQyOGQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjUxOjQ1IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5yYzIKKworY29tbWl0IGQ5YTE1NDQ1YWE3NGY1MzE2YmZjNzExYzE1NTg0Njc4NzJjMjk1OGMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjUwOjEyIDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjYuMi5yYzIKKworY29tbWl0IGJjYWJkMmM5NTQyZGJlYmQxZDMxOWI0NDk0NDEzYmRjY2EwNjYxNGUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjM4OjM4IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS02LXBhdGNoZXMKKworY29tbWl0IGI0NzM4OThjMGM1YWM5ZWI0N2M3YzA1YTNmNzQ1ZTRmZjJhNzZhYWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjM4OjI4IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucmMyCisKK2NvbW1pdCAxMzE0MjllNzA2MmZiYWE2NWI4MmFmZmVkMWZiOTJkZjJjMGNjODEzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODozOCAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAxYzgxMTBiMzNiODEwNWNhNjE5MDk0NWEzNWZlN2FlOTAzMjUyZDY4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzoyMTozOCAyMDEyICswMTAwCisKKyAgICBBdm9pZCBwZXJsIHZlcnNpb25pbmcgcHJvYmxlbXMgd2hlbiBzZXR0aW5nIHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorCitjb21taXQgNTA4ZWNlMTZlNmY2ZjQ5NTYyZGEyMDQ3OTJhZTA2NDQyNjk5OTRkMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6MjA6NTggMjAxMiArMDEwMAorCisgICAgRml4IGhhbmRsaW5nIG9mIGRpc3QvcmVsZWFzZSBtZXJnZQorCitjb21taXQgNWI4YTg1NDdiMWE0N2QyZjViMjA3ZjQ4ZjI0OTZlNDI0MWQ5MDJjNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTE6MTA6NDggMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMgorCitjb21taXQgNmMzMjkxNGJmMjhkNjk1ZGYzNDlkY2EyNjllNDg4YjUwMTcwMDMxNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTE6MDc6MjIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMgorCitjb21taXQgOWY1YTgyYTVhZmRiYjNkYWViMmZkNDM3YTMwOWYwYjhkMzU3Y2Y0YgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTE6MDU6MzkgMjAxMiArMDEwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNS4yLnJjMgorCitjb21taXQgMzkyMDNmMjk0NzdhM2JlZGYwMTJkNDExMzVkOGFiZDZiY2FkMDhiMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTA6NTQ6MjcgMjAxMiArMDEwMAorCisgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMgorCitjb21taXQgMTdlNzllZjBmYWQ3OTYwOWM1YmEyZmViNGU4YjllYjVkN2RiNjg4NgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTA6NDY6MTEgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTUtcGF0Y2hlcworCitjb21taXQgNTgyMWJlNWJiYjQwMThkZWQyODJmYmJiZDQ4MzBjZjJlZWFkZDllMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTA6NDU6NTkgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5yYzIKKworY29tbWl0IDNmMjExMWRlNjczM2EwNGUxMmQ5MTBkMzA2YTM0ZDY3MWUwMDg3NjIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ2OjExIDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IGNjZjhmZjJjNGRiNjAxMjJkNDEzMDJlNGFlYjcwMGUwYjg2ODEwNWYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDI4IDEwOjE4OjQzIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDM1MjY1OTk6IERvbid0IGhhbmcgb24gcmV0cmllZCBmYWlsaW5nIFNOTVB2MyByZXNwb25zZXMKKworY29tbWl0IGM4MWM4NDgzOTkwOTExZjQ3NDM1ZDMwMDUyNTVkOTFjMzdhYjkyYjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBNYXkgMjcgMTQ6MDk6MjYgMjAxMiArMDIwMAorCisgICAgRml4IEJTRCB0aGF0IGRvd25ub3QgYWx3YXlzIGxpa2UgSVBfU0VORFNSQ0FERFIgLSBzbyByZXRyeSB3aXRob3V0CisKK2NvbW1pdCBmZmNlMWYyZGMyZjhiMzFhYmQwMWY5M2IyNmRhNzhmNDcyNmExZTY0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDE0OjAzOjU4IDIwMTIgKzAyMDAKKworICAgIEZpeCBPUyBtaXNzaW5nIE1TR19ET05UV0FJVCAoQUlYKS4gQmFja3BvcnQgZnJvbSA1LjcKKworY29tbWl0IGM1NzUyMTY4NTAxODViNTY0NTRkYWQwMjUzZTMxNjQ5NzllMTM1MTMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBNYXkgMjcgMTM6NTY6MDEgMjAxMiArMDIwMAorCisgICAgRml4IG1pc3NpbmcgaW5jbHVkZS4gRml4ZXMgU0lHU0VHViBvbiBGcmVlQlNEOSB4NjQKKworY29tbWl0IDU4MDU4Nzg3NDljMDgwNjJkZWJmMGE5ZDc5OGQwOGZiOTE2Y2FhMmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXkgMjcgMDY6MjM6MTkgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBtaXNzaW5nIGRlYnVnIHRhZworCitjb21taXQgZDFhNDJiYmNjN2IxNDczMGM5YTZkOTljNGYwNDcwOTc4NDNhNTQ5YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1heSAyNSAwOTowMjoyNyAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogUnVuIGxpYnRvb2wgLS1tb2RlPWZpbmlzaCBvbiB0aGUgcmlnaHQgZGlyZWN0b3J5CisKK2NvbW1pdCAxZmJmMzM3MTFhMTllYWM5NzM5YWQyM2Y2ZjYyNTFlYWNjNDFmMWM0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1heSAyMiAxNDo1NDo0NSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBMaW51eDogUEFUQ0g6IDM1MjU5OTg6IERvbid0IHVzZSBhbiB1bmluaXRpYWxpc2VkIHZhbHVlIGluIGVycm9yIG1lc3NhZ2UKKworY29tbWl0IDMyYzE2ODZiNjdkYzg1YzRhMTg5NTc2MzYzMDY1NjA5ZGZlZDVlNjEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWF5IDIyIDE0OjUyOjU2IDIwMTIgKzAxMDAKKworICAgIEF0dGVtcHQgdG8gbWFyayByZWxlYXNlLWNhbmRpZGF0ZSBicmFuY2hlcyBhcyBzdWNoLgorICAgIE9taXQgZmluYWwtcmVsZWFzZS1vbmx5IHN0ZXBzIHdoZW4gcHJlcGFyaW5nIHByZU4vcmNOIHJlbGVhc2VzCisgICAgKFJlbGllcyBvbiBhIHR3ZWFrIHRvIHRoZSBNYWtlcmVsZWFzZSBwZXJsIG1vZHVsZXMpCisKK2NvbW1pdCA0YzU2MzNmMTYwM2U0YmQwM2VkMDVjMzdkNzgyZWM4OTExNzU5YzQ3CitBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KK0RhdGU6ICAgTW9uIE1heSAxNCAxMTo0MDowNiAyMDEyIC0wNDAwCisKKyAgICBORVdTOiBzbm1wOiBCVUc6IDM1MjY1NDk6IENWRS0yMDEyLTIxNDEgQXJyYXkgaW5kZXggZXJyb3IgbGVhZGluZyB0byBjcmFzaAorCitjb21taXQgNjVkZDgzYzIyNTVlZTU4ZWRiZjBlMjU4NjNlNTViNThhNDExMzY3OQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAyMDozMDo0MiAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMxCisKK2NvbW1pdCBhYzRiYzY1ZTI5MDlmM2JkODVmMzJmMDRiNTA0ZmE2NWQyZjY0NTUzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDIwOjI4OjA2IDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjYuMi5yYzEKKworY29tbWl0IGI3NDk5NDg2NDE5NTExOWVkYjZlMTljODUxNDdmYWMwMGJjYjkzZTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMjA6MTM6NDYgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5yYzEKKworY29tbWl0IDkxMzUwMDkyYzQ2ZTY2ZDA2ZDc0MTQzZjQ4MTY0NzNkYjRkMjUxNjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTk6NTY6MzMgMjAxMiArMDEwMAorCisgICAgTWFyayB2ZXJzaW9uLXNwZWNpZmljIGNoYW5nZXMgX2JlZm9yZV8gcHVzaGluZyB0byBjZW50cmFsIHJlcG9zaXRvcnkKKworY29tbWl0IDcyNDFhY2NkNzBiODJkMGZjZDQ0ZDVhNTIzOGIyZWU5NDQ1OTAwZGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6NTM6MTcgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMQorCitjb21taXQgN2M3OTZhMTVhMWQxYmI4NWZlZWE5NDBiZDRlMzUxNjg3NzkyMDkxOQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzo1MDo0OSAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMxCisKK2NvbW1pdCAwN2UyNjhiZmI2NGIwZWM2NDViM2Y3ZTg3MjY2OTg0ZjkyMTdjZjEyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjQ0OjM3IDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjUuMi5yYzEKKworY29tbWl0IDE2ZWFhZjZjM2JhMTQ1OTZjYTllZmFmNGIxMTRmMWI3MDlmNDJiNjgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6Mjk6MDMgMjAxMiArMDEwMAorCisgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMQorCitjb21taXQgYzcyOTQ2OWVmMTIxNTQ5MzBjZjlkMTU5NjdlMTYxODZmYjQ0NWYzMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzoyNzoyMCAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnJjMQorCitjb21taXQgMTQyNTcxZDNjZWEwOGYwYzA3MmQyNGMxZDM5YTQzYzc0NDZmOGNlNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzowMTowMyAyMDEyICswMTAwCisKKyAgICBXaGVuIGJ1aWxkaW5nIGEgbmV3IHJlbGVhc2UsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgcGVybAorICAgIG1vZHVsZXMgbWF5IHdlbGwgYmUgZGlmZmVyZW50IHRvIHRoZSB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgIFRoYXQgc2hvdWxkIG5vdCBicmVhayB0aGUgYnVpbGQuCisKK2NvbW1pdCBlYmE4NmI2ZjdhZmYyNjFlZTBlNjEzMzRkZjcwZGU3MTU2ZTVjM2NiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjAxOjAzIDIwMTIgKzAxMDAKKworICAgIFdoZW4gYnVpbGRpbmcgYSBuZXcgcmVsZWFzZSwgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBwZXJsCisgICAgbW9kdWxlcyBtYXkgd2VsbCBiZSBkaWZmZXJlbnQgdG8gdGhlIHZlcnNpb24gYmVpbmcgYnVpbHQuCisgICAgVGhhdCBzaG91bGQgbm90IGJyZWFrIHRoZSBidWlsZC4KKworY29tbWl0IDVjMGY2NGQ2ZGIyYjU5M2Y3Y2MwZWQyZDRmNTViN2M1OTJiNzc0YTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjMgMjI6MjU6MTUgMjAxMiArMDIwMAorCisgICAgT25seSBvdXRwdXQgY3B1IHdhcm5pbmdzIG9uY2UuCisKK2NvbW1pdCBlZTU4ZTQ4MjdiOWZhMTZlNjYzNWNhMDAzZThhNGYxMWRjYjVmYjdhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjE3OjQyIDIwMTIgKzAyMDAKKworICAgIEZpeCBzcGVsaW5nIGluIGVycm9ybWVzc2FnZS4KKworY29tbWl0IDAzZjQ4NWRmMjJmMjBlMTQ5Y2ZhZTk0YzU3Y2I4MmZlZWNiNWQ3NGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjMgMjI6MTI6MTEgMjAxMiArMDIwMAorCisgICAgTm90IGFsbCBMaW51eGVzIHVzZSBycG0gKGRlYmlhbi91YnVudHUgY29tZXMgdG8gbWluZCkKKworY29tbWl0IDkzMDgzODIyNGY3ODE2OTZiZDM1MjI1ZjIyNTY5MzQ3NDE2ZjFiMTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjMgMjI6MTA6MTUgMjAxMiArMDIwMAorCisgICAgQ2hlY2sgbmVlZCBmb3IgLWxtIHRvIHVzZSByb3VuZC9leHAKKworY29tbWl0IGEwNjA5Y2YxZjNhNjkxN2QyNjM3MjU3MzIyNDhjZDkzN2E0NWFkOTQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgNyAwODo0MDo0NCAyMDEyICswMjAwCisKKyAgICBSZW1vdmUgbGltaXRhdGlvbiBvbiBjb25maWd1cmF0aW9uIGxpbmUgbGVuZ3RoLgorCitjb21taXQgMzA1OTczMzM4YTYzYWU1NGM1ZTAyYTg2MjZmYmU5YTgwNjRkY2I3ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciA3IDAwOjMyOjE5IDIwMTIgKzAyMDAKKworICAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZXMuCisKK2NvbW1pdCBjY2FiNGU5ZDNlZDQyNGMzOWQwZGMyN2JlNjNmYTc2Yzc0NjFlYTgxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDcgMDA6MTU6MjIgMjAxMiArMDIwMAorCisgICAgSW50ZXJuYWxpemUgdGhlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSBjdXJyZXQgY29uZmlndXJhdGlvbiBmaWxlCisKK2NvbW1pdCBjZjg3NGFkN2I5ZGFmNGZjYzBkNDZjZGQwMzQ0NzRiNDc4MDA1MzQxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgQXByIDYgMjE6NDc6MjggMjAxMiArMDIwMAorCisgICAgUmVwbGFjZSAjaWYgKEEpIEIgI2Vsc2UgQiAjZW5kaWYgd2l0aCBCLgorCitjb21taXQgZWY5ZWE2NDFiYzI5MGVlYzUwNjg1YjYwNTE5YjMxYmVlOGIxNGE2OQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgOSAyMTowNDowNiAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucHJlMgorCitjb21taXQgMzVhYmExOTU5ZGUxMTlmMWZiODkyMDNjMzcxMDlhYTZmMGUyMWM1NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgOSAyMTowMDo0MCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucHJlMgorCitjb21taXQgZTQxZmJhZmYxOGFjOTA5NWNmNGE3MzlhMDZlYzM5YTFhNmNjZmRjMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgOSAyMDozNTozNSAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnByZTIKKworY29tbWl0IDEzN2ZlNTgyZDZjYzU2MTE0MzBkYWI0NmVmMTQ0ZWZkODRjZmM4MDMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgQXByIDYgMjA6NDY6NTYgMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0IGNvbW1pdCAxZjRhODI5YjE4Mjc1ZTQ5NTZjYTkxZTVlYzM3MGRmMDE1ZjA2MTMzCisgICAgKHNubXBfc3RvcmVfbmVlZGVkKCkgQVBJIGlzIG5vdCBhdmFpbGFibGUgaW4gNS5bNDVdLngpCisKK2NvbW1pdCAyYjdlNjQyODhjMDFhOGEwNjIwMjZjNTIxY2EzMWE1ZTg4NWYzMGNjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDE2OjEyOjEyIDIwMTIgKzAxMDAKKworICAgIEZyZWVCU0QtOTogRml4IGZvciAnY29uc3QnaWZ5ZWQgbmxpc3QgYXJndW1lbnRzCisgICAgQmFja3BvcnQgb2YgZWQ2NWVjYTZlN2Y5Y2ZhNzM4MGE3OGQ1NmMwMWVkMzE0NzQ1YjE2OSBmcm9tIFY1LTYtcGF0Y2hlcworCitjb21taXQgN2U5NWQ4MGI2OTgwNTEyNTk2NDVjMDc0YTUzZmZkMjY0YTZmYTkxNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxNjowNjo1NiAyMDEyICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgJ2NvbnN0J2lmeWVkIG5saXN0IGFyZ3VtZW50cworICAgIEJhY2twb3J0IG9mIGVkNjVlY2E2ZTdmOWNmYTczODBhNzhkNTZjMDFlZDMxNDc0NWIxNjkgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IDFhOWI3YjdjMDJlMmRlZWZlOTk0ZDU5NWE3Y2MxZGQyZmZiZWVlMWQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTU6NTE6MjAgMjAxMiArMDEwMAorCisgICAgRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggJ3JlY2VudCcgaGVhZGVyIHNodWZmbGluZworICAgIEJhY2twb3J0IG9mIGM1M2Q4YzM1MjVmNTkwZjIyMTNkMzViMGRhOTQxMjM4NjJmM2UzNjYgZnJvbSBWNS01LXBhdGNoZXMKKyAgICAoUGF0Y2ggIzMzNjMzMDggLSBvbWl0dGluZyB0d2Vha3MgdG8gY29uZmlndXJlKQorCitjb21taXQgM2Q5ZGRiNDFlMjYzYmMxYTc4ZjlmOTQ0MGI4ZDRhZDRmODZjODJlMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxMDozNjoxOCAyMDEyICswMTAwCisKKyAgICBGaXggdHlwbworICAgIEJhY2twb3J0IG9mIDViNzAyYjAyNGI2MDE3NmQ3ZjU2OTliOTJlNTVkYTUwYThkZWFlNzEgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IDBkMzVjNjA5NTY0YjY2YTFmZmU4MTU1NmQzN2FkZjA1MDNjMzg5Y2UKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTA6MTU6MDggMjAxMiArMDEwMAorCisgICAgUHJvdmlkZSBtaXNzaW5nIGRlZmluaXRpb24gb2YgTkVUU05NUF9QUklvCisgICAgKHVzZWQgaW4gYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jKQorCitjb21taXQgYTc5MTQxYTQxOTk1M2QwMTBhNjk4OWU4Yjg4ZjRkZjEyNzM5NGQzOAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAwOToxOToyNiAyMDEyICswMTAwCisKKyAgICBIZWFkZXIgZmlkZGxpbmcgZm9yIEZyZWVCU0QsT3BlbkJTRCxEcmFnb25mbHkKKyAgICBCYWNrcG9ydCBvZiBmN2IwZGUxNTE4MDAyYzZlOGY5Yjk0ZWYzZGViODg4MmUxZTkzMzhlIGZyb20gVjUtNy1wYXRjaGVzCisKK2NvbW1pdCBhZGY3NGJmNzUzZDM5NzAzNTdhZmQ2MzM4MDMyNTYyNDFkOWM3Yjg3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDA4OjIwOjQ2IDIwMTIgKzAxMDAKKworICAgIEZpeCBJUHY2IFRDUCAmIFVEUCB0YWJsZXMsICpCU0Qgc3VwcG9ydCAoaW5jbHVkaW5nIE9wZW5CU0QpCisgICAgQmFja3BvcnQgb2YgY29tbWl0cyA1Y2QxNTczNjI1NDcxYzA1ODNlOTA4N2FlYzY4MDJiNzcxNTdkNWEyCisgICAgICBhbmQgNTBkNzNmMGQ1NmZlMjJjNTkwNTMwYjNlMzA1ZDQxZGNkYWMzY2UwMCBmcm9tIFY1LTYtcGF0Y2hlcworCitjb21taXQgZDk1NTVhY2I5ZjQ3YzNhYThmZGU0YmMyMGE0NGQ3Y2E2MTgxYThhOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE1hciAyNSAxODo0ODoxMiAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCBkYW5nbGluZyBwb2ludGVycyAoYmFzZWQgb24gcGF0Y2ggMzUwMzI1OSkKKworY29tbWl0IDgyYThiNDdlZTk2ZTVkMjlhMmI3YWMzY2EwMDcyMmQ3MzdkNWI0NzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgMjkgMjI6MzE6NTYgMjAxMiArMDIwMAorCisgICAgUnVubmluZyBhdXRvaGVhZGVyIC8gYXV0b2NvbmYKKworY29tbWl0IDljYThkOTM5YWIzOTMzMDZhMWQwZjE0NmM5Y2I3MGVhMGNiMTlkNDkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgMjkgMjI6MzA6MzggMjAxMiArMDIwMAorCisgICAgUnVubmluZyBhdXRvaGVhZGVyIC8gYXV0b2NvbmYKKworY29tbWl0IGNlY2Q0ODY5ZGViNjhmM2Q0YzcxZTc2OGQ1YjQwZGQ1NzY0NDY5MjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgMjkgMjI6Mjk6MzEgMjAxMiArMDIwMAorCisgICAgUnVubmluZyBhdXRvaGVhZGVyIC8gYXV0b2NvbmYKKworY29tbWl0IGExYTQ1MTNiZDNlNGU2MTQyMDBmNmRiNWEwMmY2MWQ2YzhlZWZiMzIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDI4IDA5OjQ3OjQ1IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoYmFja3BvcnQgb2YgZ2l0IGNvbW1pdCBjMDk5MDNhNDJlOWQ5NzMzMWZkOWU0OGVlODMxYTg1YWZkZjljNzBhKQorCitjb21taXQgOWJkYmNjYTEyMmMzN2RhMzA0ZmM2YWE2OTM5NzI5NDc1ZjkwZjVmZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjggMDk6MzA6NDkgMjAxMiArMDEwMAorCisgICAgRG94eWdlbi1zdHlsZSBkb2N1bWVudGF0aW9uIGZpeGVzIChiYWNrLXBvcnQgb2YgR0lUIGNvbW1pdCBjMDk5MDNhNDJlOWQ5NzMzMWZkOWU0OGVlODMxYTg1YWZkZjljNzBhKQorCitjb21taXQgMWY0YTgyOWIxODI3NWU0OTU2Y2E5MWU1ZWMzNzBkZjAxNWYwNjEzMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMjE6NDE6MjQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM0OTU2OTc6IFN0b3JlIHBlcnNpc3RlbnQgc25tcFRhcmdldCB0YWJsZSBjaGFuZ2VzCisKK2NvbW1pdCAxZjc1ZjM3N2QwZGIwMTc1NGMwYzE2MWRjNDQzNzMwODFiZWVmNTIwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyNyAyMToxNDowNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBGcmVlQlNEOiBQQVRDSEVTOiAzNDg5Mzg3OiBJbnN0YWxsIEZyZWVCU0QgMTAgaGVhZGVyIGZpbGUgKHBsdXMgb3RoZXIgbWlzc2luZyB2ZXJzaW9ucykKKworY29tbWl0IDNkNzJjOWU3OGYyYWQ4MTdjOWQxZDgyOTc3MzI3YmJiMjBkNjNhYjkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDI3IDIxOjA2OjMxIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzQ4Nzg2NzogRG9uJ3Qgc2tpcCBtaXNzaW5nIGlmWFRhYmxlIGVudHJpZXMgKGlmQ29ubmVjdG9yUHJlc2VudCBGQUxTRSkKKworY29tbWl0IDEyOTA2NTc4YWIzMGNmNzc2ZDA4MGMwZWYzMDI1YjMwMzM0ZDc2NTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTY6MTc6NDUgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBGaXggZXZlbiBtb3JlIG1lbW9yeSBsZWFrcworCitjb21taXQgY2NmZDVjYTZmZTEwMzEzZDYxODFkMjRiYmIxNzk3ODI1YTk3ZGExMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxNTo1MToxNiAyMDEyICswMjAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IEVsaW1pbmF0ZSBkdXBsaWNhdGUgY29kZQorCitjb21taXQgOWZkYTI2Njg3MjJmMDhkZGJmZGQ2N2EyMjM5ZDhiMDIxZGI2NGE4MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxNTo0ODo0NiAyMDEyICswMjAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IFdyaXRlIGEgbG9vcCBhcyBhIGxvb3AKKworY29tbWl0IGNiYzE4ZWI3NjNiYTZkZjY5ZWY3MDY2OGE1NGQ3NWJmMzVlNzk1MDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6MjQ6MDggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRml4IG1vcmUgbWVtb3J5IGxlYWtzCisKK2NvbW1pdCBjNzcyNTE5MjQ3OGFlYzAxOGZiNGFlZmE2MDk0NmUwNGE0MDZjMDBjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDEzOjQzOjI0IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEF2b2lkIHJlYWRpbmcgZnJlZWQgbWVtb3J5IHdoZW4gZGVsZXRpbmcgYSByb3cgZnJvbSBhIHRhYmxlCisKK2NvbW1pdCBhNmJlNzM5NTY2ZjMxMGQ3NDQxZmQ3ZjU0OTg5ZTM5NDQ2ZjdhMTQzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDEzOjQyOjI4IDIwMTIgKzAyMDAKKworICAgIEV4dGVuZCBESVNNQU4tUElORy1NSUIgdGVzdAorCitjb21taXQgOGE5YjU3MjkxNDUzY2I4YWVjMjhlNzY2YzU5NDcwMWVkMTljNGZjNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciAyNiAyMTowMzo0MSAyMDEyICswMjAwCisKKyAgICBGaXggZm9yIERyYWdvbkZseSAzCisKK2NvbW1pdCBlNWM5YTMyZjc5ZWFjMmU4NTUyN2M5Y2YwNTA4N2NkYWU5YjM1YTZjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDI2IDIwOjU5OjUzIDIwMTIgKzAyMDAKKworICAgIERyYWdvbkZseSBuZWVkcyBfS0VSTkVMX1NUUlVDVFVSRVMgdG8gY29tcGlsZSBpcHY2IGNvZGUKKworY29tbWl0IGNkNDNiYzA5YTM5YmQ5N2ZmNWU3MTlhMmNlMjMyY2U0MjQ2MDBhNjUKK0F1dGhvcjogRGF2aWQgSW1ob2ZmIDxkaW1ob2ZmQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNTo0NzoxNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSCAzNTEwNDU0OiBBbGxvdyB0aGUgdXNlIG9mIDAuMC4wLjAvMCBhcyBhbGlhcyBmb3IgZGVmYXVsdAorCitjb21taXQgZTJmYzE1ZjllNWE2ZTNlMzZiZTVmNDg5NjAxY2JmNmJmNzMxOTE3ZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNToyMTozOCAyMDEyICswMTAwCisKKyAgICBGaXggVENQIHN0YXRlIHZhbHVlcyBmb3IgRHJhZ29uRmx5CisKK2NvbW1pdCA0MzJmZTNkZGY1NGYyYzk4ZjkzNjk1OTQ2OWNiOWIwMTRkNTk5ZjA2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDI0IDE1OjEwOjUyIDIwMTIgKzAxMDAKKworICAgIFJlcXVpcmUgcGVybCB0byBkbyBwYXNzX3BlcnNpc3QgdGVzdAorCitjb21taXQgMzdkMjc3MGNmNTBjOTgwMjNlZWJhOTBlMjVkMzcyYmZmNzMxNmFkYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXIuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDI0IDE1OjA2OjQwIDIwMTIgKzAxMDAKKworICAgIEZpeCBUQ1Agc3RhdGUgdmFsdWVzIGZvciBEcmFnb25GbHkKKworY29tbWl0IDg2YTk0OGQ4NjkxZTg4MWQ1NTU5MWRjYWJkZGMyNzM5Y2U3MmIzMGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUBuYmEtbGludXguc2Iuc3RhdHNiaWJsaW90ZWtldC5kaz4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNTowMTozNyAyMDEyICswMTAwCisKKyAgICBQcm9wZXJseSBmaW5kIHBhc3MgaGVscGVycyBmb3IgdGVzdGluZy4KKworY29tbWl0IGZlMjZhM2M0ZjI5ZjA0NmJmNjVlZDUyZTlkOTQwNTRiNjc1ZmJjNGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBNYXIgMjIgMDk6MDQ6NDIgMjAxMiArMDEwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBMaW1pdCBzb3VyY2UgY29kZSBsaW5lcyB0byA4MCBjb2x1bW5zCisKK2NvbW1pdCA3NDViYWZjZGNjOWM4ZTg0NjE2ZDRlMjc0ZGIyYTM4NGJmMjM0ZGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA4OjU1OjA1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IE1ha2UgcGluZyBpbXBsZW1lbnRhdGlvbiBpbmRlcGVuZGVudCBvZiBudHBkIGNsb2NrIGp1bXBzCisKK2NvbW1pdCBkYTY5MjVlNjc2M2NhZGJlMDJmNGE4YmJmZTY4YTM2MmU1MzVhZDVlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDEwOjM4OjM2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTRkaXNtYW5waW5nbWliX3NpbXBsZQorCitjb21taXQgZmE2MDZkZDdjYTZhZmY5MzA4ZDRlOGIwMWJiY2RlMTQ4ZjQ0MTI3MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxNjo0OToyMSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBNYWtlIHBpbmdpbmcgbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3NlcyB3b3JrCisKK2NvbW1pdCA2MTdhODNiYTc5OTU3NWM4NGM2NmY2YjFjNDgwZWY2MzMxNjFhNjRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDE2OjI4OjQ2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBhIHNvY2tldCBsZWFrIHRyaWdnZXJlZCBieSBwaW5naW5nIGEgcmVtb3RlIGhvc3QKKworY29tbWl0IDYyNWY1NWMyNzJlYzYyODFlMzhkOGUzMGViNTNmZDUxNTE2YjAwYWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBNYXIgMjIgMDk6NTQ6NTUgMjAxMiArMDEwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBDb252ZXJ0IGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHZhcmlhYmxlIGludG8gYSBzdGFjayB2YXJpYWJsZQorCitjb21taXQgYjQ4ZjE5YWQ0YjRhYTY4YzNlMTZlMmE3MmRmMzdiOWMwY2QzNmM0YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxNjoyNDowNyAyMDEyICswMTAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IEFkZCBtb3JlIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCisKK2NvbW1pdCBkNzRjYjM5NjYxNzU4OTI1NjJmNWUzYTliMTY4M2FjYmEyYzIyZTA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDExOjQ1OjE4IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBzZXZlcmFsIG1lbW9yeSBsZWFrcworCitjb21taXQgMGIxYTc3Njc0Njc4Y2M5YTE1YmUzZTc3MDBkM2NlZjY1MGVkMDJjNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMjowMDozMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBEbyBub3Qgc2VuZCB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrIG92ZXIgdGhlIG5ldHdvcmsKKworY29tbWl0IDEzOTAyM2NkM2FiNTE2MzFjYzEwZTI4NjZkNzFhYmNmOTlhZTRjMWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6NTY6MDcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRG9uJ3QgY2FsbCBleGl0KCkgdXBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCisKK2NvbW1pdCAxNjliNmFhYTdiNjE4MjdjYzFhZDBiM2FlZWFlM2E3MjI5ZGQyNWQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjUzOjI2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBJUHY2IHNvY2tldCBsZWFrIGluIGVycm9yIHBhdGhzCisKK2NvbW1pdCBhMGJlMzJhZDA1M2E3MWZhOTYxMzRkNTVlNTQyYmIwN2Q0ZjAyOTdkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDExOjQzOjQ2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEF2b2lkIHRoYXQgaG9zdCBuYW1lIHJlc29sdXRpb24gZmFpbHVyZSBjYXVzZXMgYSBjcmFzaAorCitjb21taXQgYmY5YmZmNjQ1NTY3ODdkNzY2ZWUyZWYyZDU3OGFmYjkyMDcxOWYzYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODo1MTo1NSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBDb252ZXJ0IHByaW50ZigpIHN0YXRlbWVudHMgaW50byBzbm1wX2xvZygpIGFuZCBERUJVR01TRygpLXN0YXRlbWVudHMuCisKK2NvbW1pdCA1ZDc0YzAxMjQ1NTIzYTlkOGRiMWVkYTI3ZDFlZmFlMmViYzEwNGZiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjQwOjAyIDIwMTIgKzAxMDAKKworICAgIE5ldyBNSUI6IFZSUlBWMy1NSUIKKworY29tbWl0IDViMzhmMDYyYjk5YjZlZjM2NzA4ZTJjN2RlNDk2NWEzMTkyNjEyZTkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6MzQ6NDggMjAxMiArMDEwMAorCisgICAgRm9yIHNhZmV0eSwgc2l6ZW9mIHRoZSByaWdodCB2YXJpYWJsZSBpbiBtZW1jcHkKKworY29tbWl0IGU1ZjgyNzgyZGEwNWVmYTdjMGU2ZGMyYmY1YTQxZWUxMTg2OGY0NjkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6MzM6MjEgMjAxMiArMDEwMAorCisgICAgRml4IGZvciBoclNXUnVuIGRhdGEgZm9yIEZyZWVCU0QKKworY29tbWl0IDgzMjc1NjVlODIzMjcwZDEwYTQ1MDQ1NjhlZGJlNWI1YWUzMjNhNTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6MzE6NTQgMjAxMiArMDEwMAorCisgICAgQ2xlYW4gdXAgdmFyaWFibGVzIGZvciBPcGVuQlNEL05ldEJTRAorCitjb21taXQgMTcwZjZmMDI3YmY0ZjkxNzRiNzA3MzUzMGRhNGQwN2Y0MDBiYmE1OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODoyODo1OCAyMDEyICswMTAwCisKKyAgICBNb3ZlIGRlY2xhcmF0aW9ucyBpbiBmcm9udCBvZiBzdGF0ZW1lbnRzCisKK2NvbW1pdCBkYmI0NTczYjY5ZmFlODVjZGM5MzFiMjg5MmI1Y2U0ZTViMTZiMzIxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjIzOjM2IDIwMTIgKzAxMDAKKworICAgIFJlcXVpcmUga2VybmVsX25ldGJzZCBmb3IgTmV0QlNENgorCitjb21taXQgZjExNjgxZjE1YWFkN2Q5YTUyZmEyOTgxMmVjYmI1MDdmMWI3ZmUyNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTI6MzY6MzggMjAxMiArMDAwMAorCisgICAgQ2hlY2sgZm9yIG9sZCB0YXJiYWxscyAoYW5kIHVucGFja2VkIGRpc3RyaWJ1dGlvbnMpIGJlZm9yZSBzdGFydGluZy4KKyAgICBUaGVzZSBjYW4gY29uZnVzZSBzdGVwcyBzdWNoIGFzICJtYWtlIGRlcGVuZGNoZWNrIiwgdGhhdCBkbyBhICdmaW5kJworICAgIG9uIHRoZSBjdXJyZW50IHRyZWUsIGFuZCB3b3VsZCBkZXNjZW5kIGludG8gc3VjaCB1bnBhY2tlZCBzb3VyY2UgdHJlZXMuCisKK2NvbW1pdCA0NzBkY2Q0YjZjM2ZmMTFmZjBhMzUzMmE3MzQwYTU2Y2ZmZDY5MDk4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyMSAxMjozMjoxMyAyMDEyICswMDAwCisKKyAgICBEb24ndCBydW4gIm1ha2UgZG9jczsgbWFrZSBtYW5jcCIgaWYgdGhlcmUncyBubyBNYWtlZmlsZSBwcmVzZW50CisKK2NvbW1pdCBjOWFjNDIwMzQzZTE2ZGYyYjcwNjVmNWJmMjc5MGRmNDRlMjQ3ZmJhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMDoyNjoxMCAyMDEyICswMDAwCisKKyAgICBBbGxvdyBkaXN0cmlidXRpb24gYXMgcGFydCBvZiBub3JtYWwgTmV0LVNOTVAgcGFja2FnZXMuCisKK2NvbW1pdCA1OTk5ZjYwYzU3NzIzZjIzZjNjMjU0YWY1N2ZkYjEwYWYzMDFhOGViCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWFyIDE4IDE5OjAzOjA4IDIwMTIgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUKKworY29tbWl0IDI3NWQyMDQwMzZhNjA3ZTNkZjUwZTg0NDdkNGJjNzU1ZTlkYjAyZmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBBdWcgMjggMjE6Mjk6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMvLS1kaXNhYmxlLWFnZW50IHRvZ2V0aGVyIHdpdGggLS1lbmFibGUtbWluaW1hbGlzdAorCitjb21taXQgYmRjY2M4NzU3MTAyOTVhYWNmNTBmNzFlYjFjMWQyZWU5N2YzMzZmZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAxNiAyMDoxMDo1OCAyMDEyICswMTAwCisKKyAgICBEbyBub3QgZGVjbGFyZSB0aGUgbG9jYWwgdmFyaWFibGVzIGZvciBvcGFxdWVfc3BlY2lhbF90eXBlcyB1bmxlc3MgdGhhdCBvcHRpb24gaXMgc2V0LgorCitjb21taXQgYjgwYTY3ZGEwNTJhZGNhMWI1YTY0NGRiODNhNzgyZTE1YzIyMzdjMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAxNiAxOTo1MDowMyAyMDEyICswMTAwCisKKyAgICBDaGVjayB0aGF0IHRoZSBkYXRhIGV4aXN0IGJlZm9yZSB0cnlpbmcgdG8gcmVhZCBpdAorCitjb21taXQgZWZhZTg2YmJhNTk2MjQ5MWQ0MmI3N2I5MzUxOTFhM2ViMjVkZDkzOQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIE1hciAxNCAwMTowNTozMyAyMDEyICswMTAwCisKKyAgICBQYXJ0aWFsbHkgcmV2ZXJ0ICJNZXJnZSByZW1vdGUgYnJhbmNoICdvcmlnaW4vVjUtNy1wYXRjaGVzJyBpbnRvIFY1LTctcGF0Y2hlcyIKKyAgICAKKyAgICBDb21taXQgZDM1YTE4NjAyMTdlNzIzZTRmODY2ZGQ5OGVmNjYyMTY2NTkzNGM0YSBhY2NpZGVudGFsbHkgcmV2ZXJ0ZWQKKyAgICAKKyAgICA0YTJlNWJjZDU2Y2QyYWZiMzZlYjE1ZDc1NGUyZmVlODg4ZGQ1MGMwIChocmhfc3RvcmFnZSBpcyBhIHByb3BlciByZXBsYWNlbWVudCBmb3IgaHJfc3RvcmFnZSkKKyAgICAwZGQxZTU0NTU3ZDFiYTQ5OGI1NWQwMTdiMGE5M2U4Y2NmOWJkNTIyIChDSEFOR0VTOiBzbm1wZDogVURQLU1JQjogUmVwb3J0IHRoZSBwcm9wZXIgYWRkcmVzcyBpbiB1ZHBMb2NhbEFkZHJlc3MpCisgICAgNTExNmQ0ODM3OGVjZjAzZTcyMmYzMDEwYWQ0N2JmMjJhM2ZiY2I4YyAoUmVkdWNlIHNjb3BlIG9mIHByZWZpeF92YWwgc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IHdhcm4gYWJvdXQgYW4gdW5zZWQgdmFyaWFibGUpCisgICAgMTBmNTY2ZjRkNGNiYjNlMjA1MDIzYzIzNjY5Mjg5ZTRiZmQwODljYiAocGVybC9TTk1QL1NOTVAueHM6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcpCisgICAgCisgICAgYW5kIHBhcnQgb2YKKyAgICAKKyAgICA2ZTc0ZDY0Zjg1YTU5ZDUwZTQ2MWRiNGMzNGFjNzZmOWRlNDY4YmZiIChBdm9pZCB1c2luZyBncmVwIG9wdGlvbnMgLXEgYW5kIC13IGJlY2F1c2UgZ3JlcCBpbiBTb2xhcmlzKQorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyB0aG9zZSByZXZlcnRzLgorCitjb21taXQgYWFlZGQ1OWNjMmRhNzAxNTI3ZGMyZDI2MWQ0ZTlmODVmMTZlNzUwNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAxMSAyMDo1NzozOCAyMDEyICswMTAwCisKKyAgICBBbGxvdyBtYWtlIHRlc3Qgd2hlcmUgdGhlIHNvdXJjZSBwYXRoIGNvbnRhaW5zIHRoZSBzdHJpbmcgTmV0LVNOTVAgdG8gc3VjY2VlZC4KKworY29tbWl0IDRiOTRkNzk2OTE4YTRlZWFlNjhhYjIxYWE1M2Q0NDRhOGI1YzI5MjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBNYXIgOSAwODowNDo1OSAyMDEyICswMTAwCisKKyAgICBVbmJyZWFrIGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgNAorCitjb21taXQgMTBmZTZiODMzMjRhZDM3ZDE4YjkzN2NjOGM2ZGU5NGRlNTM0ZDAzNQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgOCAxMzowNDowNyAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucHJlMQorCitjb21taXQgZTExMjJlZGMxYTVmZTc5NzZiMDY1MDQ0MTM0ZDM5ZTdkYjU5ODVlYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgOCAxMjo0MzoxOSAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucHJlMQorCitjb21taXQgYTYxM2QzYTgzNDkxMjIwNmQxYmE1OTcxZTQ0MWEzZWE2YjM2YWYyMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgOCAxMjozMzowMyAyMDEyICswMDAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucHJlMQorCitjb21taXQgMGVmMzRlNjUxOWRmY2I4MmM5N2RmODQyNzU0N2MwOGRjZjgxZTY5YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgOCAxMDoxMTozMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgc25tcGQgJy1kJyBvcHRpb24uCisgICAgCisgICAgTm93IGl0IGR1bXBzIHBhY2tldHMgYWdhaW4uCisKK2NvbW1pdCA4ZTY5NzQyZjE0M2U0ZmMxMTE5NmU1YjJlZDY2YzhmN2Y1M2ZkMDJmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciA2IDA5OjI0OjIxIDIwMTIgKzAwMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucHJlMQorCitjb21taXQgYzRlMDBiOGMzZTEwMTBjZGNhYjVlNmMwMmQ2MGQ3NWRmOWM2ZGNmMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgNiAwOToyNDowNSAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucHJlMQorCitjb21taXQgMzk0OTAxMDRhM2FiNTgyMzVhYWNlMmY5ZDg3MWMyNjZkYzQ0ODVlZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXIgNSAwOTowNjo1MiAyMDEyICswMDAwCisKKyAgICBNYXJrIHRoZSBjaGFuZ2VzIG1ha2UgYXMgcGFydCBvZiB0aGUgcmVsZWFzZSBwcm9jZXNzIGFzIHNwZWNpZmljIHRvCisgICAgdGhlIHBhcnRpY3VsYXIgYnJhbmNoIGJlaW5nIHJlbGVhc2VkLiAgVmVyc2lvbiB0YWdzLCBjaGFuZ2Vsb2cgZW50cmllcworICAgIGFuZCB0aGUgbGlrZSBzaG91bGRuJ3QgcHJvcGFnYXRlIHRvIGxhdGVyIGJyYW5jaGVzLgorCitjb21taXQgNGEyZTViY2Q1NmNkMmFmYjM2ZWIxNWQ3NTRlMmZlZTg4OGRkNTBjMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDIwOjU5OjM4IDIwMTIgKzAxMDAKKworICAgIGhyaF9zdG9yYWdlIGlzIGEgcHJvcGVyIHJlcGxhY2VtZW50IGZvciBocl9zdG9yYWdlCisKK2NvbW1pdCBjZTg1ODMyOTMyY2NkOTE2YzQyMzE5MTE0YzQwODg1YTQ2NmE5ZDBlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDUgMjA6NTY6NDAgMjAxMiArMDEwMAorCisgICAgTW9yZSBmaXhlcyBmb3IgU29sYXJpcyBzaAorCitjb21taXQgMGRkMWU1NDU1N2QxYmE0OThiNTVkMDE3YjBhOTNlOGNjZjliZDUyMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDE1OjA4OjI2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBVRFAtTUlCOiBSZXBvcnQgdGhlIHByb3BlciBhZGRyZXNzIGluIHVkcExvY2FsQWRkcmVzcyBpbnN0ZWFkIG9mIDAuMC4wLjAuIE1ha2VzIHRlc3QgVDE2MHNubXBuZXRzdGF0IHBhc3MgYWdhaW4uIEZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gY29tbWl0IGM3NmZiOTZmNjVlMzNiYTJmZDIxMmE5MjFlOGMzODYxNTVlZTVjN2EuCisKK2NvbW1pdCA1MTg5MTdlOWYzOWY3YTlkM2MzYmYzYTg2NWU4YWMwZTMwMjZkNjAwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMTQ6MDQ6NTQgMjAxMiArMDEwMAorCisgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6IEZpeCBzb3VyY2UgY29kZSBpbmRlbnRhdGlvbgorCitjb21taXQgMjY1MTkwOWNjY2VhYmZjZmFkYWY5NDJjMDI0NTBlMjhmZTgzN2RjOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE5vdiA5IDEyOjA0OjA0IDIwMTAgKzAwMDAKKworICAgIFBhc3NlcyBub3cgb24gTWluR1cgdG9vLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5NjUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgZTQxZjExNWU0MDMwNGM5NDFiYTE3ZDY3ZTI0NzEwNzIyZDkwNzQxYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEzOjM5OjE3IDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IEF2b2lkIHVzaW5nIGdyZXAgb3B0aW9ucyAtdyBhbmQgLXEgYmVjYXVzZSBncmVwIGluIFNvbGFyaXMnIGRlZmF1bHQgcGF0aCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlc2UuCisKK2NvbW1pdCA1MTE2ZDQ4Mzc4ZWNmMDNlNzIyZjMwMTBhZDQ3YmYyMmEzZmJjYjhjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMTA6NDc6MjAgMjAxMiArMDEwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOiBSZWR1Y2Ugc2NvcGUgb2YgcHJlZml4X3ZhbCBzdWNoIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgd2FybiBhYm91dCBhbiB1bnNlZCB2YXJpYWJsZSBpZiBpdCBpc24ndCBuZWVkZWQuCisKK2NvbW1pdCA2ZTc0ZDY0Zjg1YTU5ZDUwZTQ2MWRiNGMzNGFjNzZmOWRlNDY4YmZiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MjI6MzEgMjAxMiArMDEwMAorCisgICAgdGVzdGluZy9ldmFsX3Rvb2xzLnNoOiBBdm9pZCB1c2luZyBncmVwIG9wdGlvbnMgLXEgYW5kIC13IGJlY2F1c2UgZ3JlcCBpbiBTb2xhcmlzJyBkZWZhdWx0IHBhdGggZG9lc24ndCB1bmRlcnN0YW5kIHRoZXNlIG9wdGlvbnMuCisKK2NvbW1pdCAxMGY1NjZmNGQ0Y2JiM2UyMDUwMjNjMjM2NjkyODllNGJmZDA4OWNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMTA6NDc6MzkgMjAxMiArMDEwMAorCisgICAgcGVybC9TTk1QL1NOTVAueHM6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDQ0YWEyNjU4OTFjZDU2M2Y3ZjQxMTRlZjI1ZGNmN2FhZjNiMTRlOWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IGRhZTRlMTZiZTg2MTE3ODYxZjYzZDFhMmY5ODFhZDM2MTQxOGY1YzYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IDI4ZjYyMjZmMmUyMjhiOGNhMjQ4NDg5NzM1Zjg2NTAyYjJjY2UwYTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IDQwMDIyYTY5Nzk1ODI1OWNjZmJiM2ZlZDQ0ZWIzYzQ3MmY1ZTgzN2UKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBNYXIgNCAxMDozNzo0MSAyMDEyICswMTAwCisKKyAgICBTb2xhcmlzIHNoIGRvZXMgbm90IHVuZGVyc3RhbmQgInRlc3QgLWUiCisKK2NvbW1pdCA3NzNhZjBjNDJlMDc3YmViZGFlY2YxYzBjYWYzOTMyODVhNzY4OGYxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDMgMTc6MTk6MzAgMjAxMiArMDEwMAorCisgICAgQ2xlYW4gdXAgbnNyb2xsdXAgY29tcGxpY2F0aW9ucworCitjb21taXQgZWU3MTA0OWMzZTIxYzFkMGUzNDI0Mjk3MTM2NjUyYmJlMGUzOWQ4NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAzIDE2OjQ5OjQxIDIwMTIgKzAxMDAKKworICAgIG1pYmdyb3VwL2ljbXAuYzogYWRqdXN0IGlmZGVmcyB0byBtYWtlIGl0IGNvbXBpbGUgb24gQlNEJ3MKKworY29tbWl0IGNlOTYwMDM2MWU2NjVkZGUxN2FmOWQ4YWIxNmQ3Y2U4NWRjMDU2NDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozOTo1NSAyMDEyICswMTAwCisKKyAgICBkb3QzU3RhdHNUYWJsZSBoYXMgYnVncyA6LSgKKworY29tbWl0IGRmZmFjZjZmYTA3NTVlMTcwMGNiYWMyNWI4NDQxODVhYmQ4MDdhMGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozODoxMCAyMDEyICswMTAwCisKKyAgICBwYXNzcGVyc2lzdCB0ZXN0IG5lZWRzIC91c3IvYmluL3BlcmwKKworY29tbWl0IDg3MjY5OTVjN2E4YWVmNjc0YzRmMTY0YjE4NzFjMzdiYmRjZGFkNTAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozNjo1OCAyMDEyICswMTAwCisKKyAgICBncmVwIC13IGZhaWxzIHdpdGggT3BlbkJTRCBhbmQgU29sYXJpcyAxMC02NAorCitjb21taXQgMWViNDc0NWIyM2NjM2E4Mzk4NjRlN2Y2ZWEyODM1NWIwNTY2ZWI2NworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjM1OjQ5IDIwMTIgKzAxMDAKKworICAgIFNvbGFyaXMgbmVlZHMgL3Vzci94cGc0L2Jpbi9ncmVwIHRvIHVuZGVyc3RhbmQgLXEKKworY29tbWl0IDk5NTRiNGI3NDFmZDhjNjNkNjEyOGJkMDUyNzI5OGM4ZTRlOTg5ZmMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozNDo0NSAyMDEyICswMTAwCisKKyAgICBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcHJvcGVyIHNyY2RpciBmb3Igb3V0LW9mLXNvdXJjZSBidWlsZHMKKworY29tbWl0IDc4MzY5MDAyYmUyNzExZjBhYTg3NmI2NGE0ZTEwYjA5MGNjMjQxY2QKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozMzozMSAyMDEyICswMTAwCisKKyAgICBOb3QgYWxsIG1ha2UgdmVyc2lvbnMgZGVmaW5lICQoUk0pCisKK2NvbW1pdCA5NDI0NWIyOWEzY2RhODk0NzVjNmVhYjVkOTQ5M2M2NjU3ZmYzOGUzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MjQ6MjQgMjAxMiArMDEwMAorCisgICAgTWFrZSBhdXRvY29uZiAyLjY4IGhhcHB5CisKK2NvbW1pdCA0NGFjZDZjMjg1ZmI1NjE0YjRjOTYxMWIxYWJkZWNhOWRkMjhlNGJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MTI6NDcgMjAxMiArMDEwMAorCisgICAgRml4IHNwZWxsaW5nIG9mIG1pYiBtb2R1bGUgZnN5c19nZXRmc3N0YXRzCisKK2NvbW1pdCAxZmExZmVlMzY5M2Y2N2I4MjAyMjM4MDZiM2Q3M2FmZDRjNTBlYzE4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWFyIDIgMDE6Mzc6MjAgMjAxMiArMDEwMAorCisgICAgU2lsZW5jZSBhIGNsYW5nIHdhcm5pbmcuCisKK2NvbW1pdCA5MzI2M2I5OGE1ZGIzNDRjZjJjNGQ0ODljNDM5NzFlN2IyOWNkYjAzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciAxIDEzOjM3OjIwIDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5wcmUxCisKK2NvbW1pdCA1YTE3NTQyOGI5NzNkMmVhODU1M2UyOWZlY2Y5NGNmMTU2NmFhODU4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciAxIDExOjQ4OjE4IDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5wcmUxCisKK2NvbW1pdCAzNjQyNzZhMWM1YWE2NmNhYTIzZWI1YjdmMTExZmRlYjVhZjcxZmE3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciAxIDExOjQ1OjEwIDIwMTIgKzAwMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjUuMi5wcmUxCisKK2NvbW1pdCA3MzU5ODM0MDE3MmVmZjc1NzI5YTZkNTcxOTJiODE3MWQ1YmJmMDBlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciAxIDEwOjQyOjU2IDIwMTIgKzAwMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucHJlMQorCitjb21taXQgZjMyMTQ0MDI2NzJjYTE5OWZkNTMxZTY2MTIyYmY5NmM0ZDlhNGViNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMDo0MjozOSAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgMmU3NGFjYjZmMTllNDcyOWNlZGUwYWI0M2U5MzE5NjFjYjIzYWFlYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE1hciAxIDA5OjE4OjM5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEJ1ZyAzMTUyODQxOiBEbyBub3QgaW5zdGFsbCB0aGUgdXRpbF9mdW5jcyBzdWJoZWFkZXJzIHRoYXQgd2VyZSByZW1vdmVkIGluIDUuNworCitjb21taXQgYjcxMDk2NDZiOTVhNzA3MTNkMWFkOTkxZDQxYmNjZDU3YzBiYjNlYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE1hciAxIDA4OjQ4OjQ4IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEJ1ZyAzMTUyODQxOiBJbnN0YWxsIHV0aWxfZnVuY3Mgc3ViaGVhZGVycyBpbnRyb2R1Y2VkIGluIDUuNgorCitjb21taXQgNDMyY2JiN2E1NTAxYWI5MGQ2NmQwYTgzZTczMWU3MzQzYmMwNGIzNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEZlYiAyNSAxMDoxMzoxNSAyMDEyICswMTAwCisKKyAgICBDb3JyZWN0IHR5cG9zCisKK2NvbW1pdCA2YTZjOWJiYzc1ODRmMTk2YTExODVjYzE5MzUyMDRmMTIwNjgxMWVkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgRmViIDI5IDA4OjU1OjM1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEJ1ZyAzMTUyODQxOiBJbnN0YWxsIHV0aWxfZnVuY3Mgc3ViaGVhZGVycworCitjb21taXQgZDUxNWUyYTZlNGMyYTFjNGQ4NDczNGNjN2IyZDBiMmZjNWE4OTRhZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTU6NTY6MjEgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM0ODc5MTk6IEZpeCBjb21waWxhdGlvbiB3aGVuIGNhY2hpbmcgaXMgZGlzYWJsZWQKKworY29tbWl0IGFmODM2OGVkODg5OGE3OGQwODY4YjQ3YWY0NmJjOWRiMDdkMWM3NjQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDE1OjUwOjU2IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDM0MTQ3NzM6IEVuY29kZSBpbnRlZ2VyIHZhbHVlIHVzaW5nIEFTTl9JTlRFR0VSCisKK2NvbW1pdCAxOWUyNzE1ODA3ZmUwNmZkMGJhZWRmODgxNjUwMTFhZWU5MzNlNzU1CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxNDowNTozNCAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBtYW46IEJVR1M6IDM0OTA3MDg6IENsYXJpZnkgdXNlIG9mIGNvbW1vbiBjb21tYW5kLWxpbmUgb3B0aW9ucworCitjb21taXQgNjVmNzk2MmY5MzJjOWI3NWM1YmJiYjA0N2QxZTI2YWU2MDk3OGU1MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTI6MjM6MzQgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVR1M6IDM0ODk2MzE6IEZpeCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgVUNEIG1vbml0b3JpbmcgZmxhZworCitjb21taXQgYWMxNjYwNTFiNmEwOTJkZDRhNTk0MzI2ZWM4NWUyZjY5OWI2MjU0NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTE6NTc6NDEgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQlVHUzogMzQ3NDU5MDogRG9uJ3QgbWF0Y2ggdW5kZXJzY29yZXMgd2l0aGluIHRoZSBzb3VyY2Ugcm9vdCBmaWxlbmFtZQorCitjb21taXQgODc5YmY3MDc5ZDM0ZmE0NmY2ZmNmNTRhMDFjODUwMGJlYWVjZTU5YQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTA6NDQ6NDEgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVR1M6IDM0NjAzNjQ6IEZpeCB1c2Ugb2YgYmxvY2sgZmFjdG9yIHdoZW4gZGV0ZWN0aW5nIGVycm9yIGNvbmRpdGlvbnMKKworY29tbWl0IDAzNGYxYzU3MmY2ODNlYTQyODU4MzA3NDQ3MWU1ZDVkMTNiNTE4MzcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEwOjIyOjIwIDIwMTIgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIHRlc3RzIHdoZW4gY29uZmlndXJlZCB1c2luZyAtLWVuYWJsZS1yZWFkLW9ubHkKKworY29tbWl0IDM2NDIzZTIxMGJmYjY1ZWYxMjFjNmE2NmFlYzQzOGM3YzIzN2QzZGYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEwOjAzOjI1IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IEJVRzogMzQ1NDE2ODogY29uZmlndXJlOiBGaXggYnVpbGRpbmcgd2l0aCAtLWVuYWJsZS1yZWFkLW9ubHkKKworY29tbWl0IGVlZDBiY2JjNDNmZWExODI1OWYwZjYzYjIwODFiNmQxMDUzNWEwNTIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDA5OjI3OjExIDIwMTIgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIGJhYnktc3RlcHMgd2hlbiBjb21waWxlZCB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydC4KKyAgICBJbnNwaXJlZCBieSBidWcgIzM0NTQxNjgKKworY29tbWl0IGVjNmEyMzAzMGU1YTIwNzJjMTljMThjMWQ5YzEyNDM4N2RhNTZiN2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTg6NDI6NTggMjAxMiArMDAwMAorCisgICAgQWRkIC1scnQgdG8gTkVUU05NUExJQlMgc3VjaCB0aGF0IGNsb2NrX2dldHRpbWUoKSBjYW4gYmUgZm91bmQKKworY29tbWl0IGYxMzMyMDUwMDI5NGJiMjQwZjYzYzZkZDdkMmU5YTIyMDhlYjc0MGQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gRmViIDI3IDE2OjUyOjUxIDIwMTIgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIHRlc3RzIHdoZW4gY29tcGlsZWQgdXNpbmcgLS1kaXNhYmxlLXNldC1zdXBwb3J0CisKK2NvbW1pdCBjNDI3NmI2MjMyYzI5MTQ1YzAzOTg4NGU2YjVhNmI2ZGE0YjkzODM3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxNTo1NDo0NSAyMDEyICswMDAwCisKKyAgICBPbWl0IFNFVC1yZWxhdGVkIGNvZGUgd2hlbiBjb21waWxpbmcgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQgKGluc3BpcmVkIGJ5IHBhdGNoICMzNDI0OTMwKQorCitjb21taXQgMDFjOTMwZWRjYzI1NzAwZDZiNWZiMDM3NmY1NWEyNjQyNWUxM2ZiMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTU6MTc6MjIgMjAxMiArMDAwMAorCisgICAgT21pdCBTRVQtcmVsYXRlZCBjb2RlIHdoZW4gY29tcGlsaW5nIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0CisgICAgKGluc3BpcmVkIGJ5IHBhdGNoICMzNDI0OTMwKQorCitjb21taXQgOTQ4NGQ4MzIwM2M0ZTJkODIwNDE2YmU2NjVmYTgzM2FhNzA0NDRkMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEZlYiAyNCAxNDowMDozMiAyMDEyICswMTAwCisKKyAgICBSZXdvcmsgY29tbWl0IGI0YTE5NTA1YTA1ODE2ZTk0ZTAxZGU5N2JmOTlhYzM3ZmNkYzZkMjMuCisKK2NvbW1pdCAyYjdmMTM0OTUyMjg2MzVkODE2ZTU4YjIxNzRkYzEyNGRkMGNmMzlmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRmViIDI0IDA3OjQzOjIyIDIwMTIgLTA4MDAKKworICAgIHNldCBNRVJHRV9BVVRPRURJVCBiZWZvcmUgbWVyZ2luZyB0byBhdm9pZCB0aGUgZnV0dXJlIGdpdCAxLjcuMTAgZm9yY2VkIG1zZworCitjb21taXQgZTFiOTEwYjBiZTkzNDM1ODZhZTllZGJhNmY0NjA0MGFmMzE1ZmNkZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAxMDoyNzo1NCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogaW5pdF9hZ2VudCgpICsgaW5pdF9rbWVtKCk6IFJldHVybiBhbiBlcnJvciB2YWx1ZSBpbnN0ZWFkIG9mIGludm9raW5nIGV4aXQoKSBpZiBhY2Nlc3MgdG8ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGlzIGRlbmllZAorCitjb21taXQgNDYzZWVkMjEyMGY5ZDE5MWJjMjI2NzM0OTZhNDllODE3NDY2NGU0YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAxMDowMzozMSAyMDEyICswMTAwCisKKyAgICBSZW1vdmUgb2Jzb2xldGUgc3ltYm9sIE5FVFNOTVBfRVhJVF9PTl9CQURfS0xSRUFECisKK2NvbW1pdCBjMzZhYjcxYTRlMDk2ZjE2Y2M1YTU1NTMzZjA4MGM5YTk0MDA5OTE0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIzIDA4OjUzOjU2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEZyZWVCU0Q6IHNubXBkICsgYXBwczogU2VuZGluZyBVRFAgcGFja2V0cyB3b3JrcyBhZ2FpbiBmb3Igbm9uLXJvb3QgdXNlcnMKKworY29tbWl0IGVkZWJkZGJhOTMwZjhiMTQ3MmZhMGJkMjBmYzQxM2VmOGNmNDY0YTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBGZWIgMjEgMTE6MzE6NDYgMjAxMiArMDEwMAorCisgICAgdGVzdGluZy9SVU5URVNUUzogRml4IGEgYmFzaGlzbQorCitjb21taXQgYjRhMTk1MDVhMDU4MTZlOTRlMDFkZTk3YmY5OWFjMzdmY2RjNmQyMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiAyMCAxNjo1ODo0NyAyMDEyICswMTAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgJWxkIHZlcnN1cyB0aW1lX3Qgb24gc3lzdGVtcyB3aGVyZSB0aW1lX3QgaXMgYSBzeW5vbnltIGZvciBsb25nIGxvbmcgaW5zdGVhZCBvZiBsb25nLgorCitjb21taXQgZDg5NzhlY2M4MjExYmU3YzFlNzkwNWYxZTIxNWJiMDZkZWQyNjZiNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEZlYiAyMSAxMjozMjoyNSAyMDEyICswMTAwCisKKyAgICBGaXggc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMgZmlsZSBoZWFkZXIKKworY29tbWl0IGFhNzY2ZDE5NmU1Mjg3ZjZjYTc5YjU4YTM0NWIwMjQyNjBhYmEzNTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjAgMTc6MDc6MTMgMjAxMiArMDEwMAorCisgICAgSUYtTUlCOiBkbyBub3QgdHJpZ2dlciB1bmRlZmluZWQgYmVoYXZpb3IgKD4+IDMyIG9mIGEgMzItYml0IHZhcmlhYmxlKSB3aGVuIHVwZGF0aW5nIGEgY291bnRlciBhbmQgaWZpX2lwYWNrZXRzIGlzIGEgMzItYml0IHZhcmlhYmxlCisKK2NvbW1pdCBjM2ZiNmRkOWU2Yjk5ZTk1NDI0OTMxODg5ODc4NzFmYzUwMTdjYjNjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIzIDA5OjQ1OjQ1IDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgb24gc3lzdGVtcyB3aGVyZSBtb2RlX3QgaXMgdW5zaWduZWQKKworY29tbWl0IGY4YTNlZjBkM2Q0ZTUzMDI3OTkwMDEwMTA0OWI4ZGU5OGE0NGE2ZmIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo0ODo1MiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliICsgc25tcGQgKyBzbm1wd2FsazogQXZvaWQgdGhhdCBzeXN0ZW0gY2xvY2sgY2hhbmdlcyAoZS5nLiBieSBudHBkKSBhZmZlY3QgY29kZSB0aGF0IG5lZWRzIHJlbGF0aXZlIHRpbWUKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBzdXJlIHRoYXQgdGhlIHJhbmdlIG9mIHRoZSBTTk1QdjMgdmFyaWFibGUgc25tcEVuZ2luZVRpbWUgaXMgMC4uMjE0NzQ4MzY0NyBvbiBhbGwgc3VwcG9ydGVkIHN5c3RlbXMgaW5zdGVhZCBvZiAwLi40Mjk0OTY3MiBvbiBzb21lIHN5c3RlbXMgKGkuZS4gd3JhcGFyb3VuZCBhZnRlciA0OTcgZGF5cykKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCksIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoKSwgbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoKSwgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSgpCisgICAgQ0hBTkdFUzogc25tcGxpYjogRGVwcmVjYXRlIGF0aW1lX2RpZmYoKSwgYXRpbWVfbmV3TWFya2VyKCksIGF0aW1lX3JlYWR5KCksIGF0aW1lX3NldE1hcmtlcigpLCBtYXJrZXJfdHRpY2tzKCksIG5ldHNubXBfbWFya2VyX3VwdGltZSgpLCBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCksIHRpbWV2YWxfdHRpY2tzKCksIHVhdGltZV9kaWZmKCksIHVhdGltZV9oZGlmZigpIGFuZCB1YXRpbWVfcmVhZHkoKS4KKyAgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2UgdGhlIG5hbWVzIG9mIHRoZSBzdHJ1Y3QgdGltZXZhbCBtZW1iZXJzIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdlcmUgdXNlZCB0byBzdG9yZSBhIHdhbGwgY2xvY2sgdGltZSBidXQgdGhhdCBkbyBub3cgY29udGFpbiBhIG1vbm90b25pYyBjbG9jayB2YWx1ZQorCitjb21taXQgYzE5NzYwZjMzMzNjOTJmYWM1ZDUwZTk3NjhjZGY5MzkyMThiYzQ4NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEZlYiAxNSAwOTo0NTowMyAyMDEyICswMTAwCisKKyAgICBzbm1wbGliL3NubXB2My5jOiBGaXggc291cmNlIGNvZGUgaW5kZW50YXRpb24KKworY29tbWl0IGE2ZGIyMzk5NDVlMTk1ZGU1YTkwZmExODM3MDBiMjdhNmVjYjI4ZDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgNyAwMDoxMToxNCAyMDEyICswMTAwCisKKyAgICBGaXggcG9zc2libGUgbWVtb3J5IGxlYWsgZnJvbSByZWNlbnQgZGVjbGFyYXRpb25zIHBhdGNoCisKK2NvbW1pdCAwZmJiYjlhOWUyOTA2YTdhZjk1Njk1NzA2MWQ0ODU4NzQ0NjJhZWE5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDYgMjA6NDM6MDQgMjAxMiArMDEwMAorCisgICAgRG8gbm90IG1peCBkZWNsYXJhdGlvbnMgYW5kIHN0YXRlbWVudHMKKworY29tbWl0IGYzMDhkNWJhZmIwNWQ3OGVkNDAzMGM0ZWNmZjMyNGI2Y2JkYTY4MGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNToyNTozMCAyMDEyICswMTAwCisKKyAgICBGaXggdHdvIGNvbXBpbGVyIHdhcm5pbmdzIGluIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jCisKK2NvbW1pdCA0NmYwZmMxYjdmYzI2YTIyNTc2M2JjNjVjY2E1MjBhMWM1OWYwMjUxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDYgMjA6NTQ6MzIgMjAxMiArMDEwMAorCisgICAgc2VuZG1zZyBkb2VzIG5vdCBsaWtlIElQX1NFTkRTUkNBRERSIGlmIGFkZHIgaXMgSU5BRERSX0FOWQorCitjb21taXQgZGViYWM0OThmZTg0MTAxMTAxMDdhMmZlNjRmOGFmYjc0OGVkYWEwNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgNiAxNjo0ODowOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBhZGRlZCBPQ0ZTMiAoT3JhY2xlIENsdXN0ZXIgRlMpIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUKKworY29tbWl0IGZhZmM5OWNkODllNzNlYzdlMDBiZjczNjBkMGI0ZmE2MTk0NGE0ZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMToxODozNCAyMDEyICswMTAwCisKKyAgICBTaW1wbGlmeSBjYWxjdWxhdGVfdGltZV9kaWZmKCkgYW5kIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoKQorCitjb21taXQgN2FmMjAxM2RlOGJmMWIzNzljMDc2ZGI0ZTEwNDUwOGUxNzg3NGQzZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjU1OjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBvcmRlciBvZiBmZWF0dXJlICNpZm5kZWYgYW5kIERveHlnZW4gY29tbWVudCBibG9jaworCitjb21taXQgYmJkNjdmNjM1MzBmNWVmMGJmYzk0OGZjNThkZmU2YTkzZjhmODY3OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE1OjI1OjMwIDIwMTIgKzAxMDAKKworICAgIEZpeCB0d28gY29tcGlsZXIgd2FybmluZ3MgaW4gYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMKKworY29tbWl0IDQyYTY2YWVmZjI1YjllOWVmNjM1YTQwNGFkMmY1MjEyZjllOGNmMGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo0Nzo1NCAyMDEyICswMTAwCisKKyAgICBSZW5hbWUgdHdvIGZ1bmN0aW9uIGFyZ3VtZW50cworCitjb21taXQgM2ZlNzJiM2I5OWI3ZTRiMmI5ODIzNjNkZmM0ZjJkOGQxM2Y0MDU5MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDEzOjQ5OjIyIDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgc25tcF9zZWxlY3RfaW5mbygpIGRvY3VtZW50YXRpb24gdG8gRG94eWdlbiBmb3JtYXQKKworY29tbWl0IGU5ZGIyNjZhZTQ4ZDA1YTdhNmNiNWQ3MWI0YmRlYTdhZDgwOGVmNWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMToxNzo1NyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkIG5ldHNubXBfZ2V0X25leHRfYWxhcm1fdGltZSgpCisKK2NvbW1pdCBkMDgwNDRjYjllNTcwMmZiZjU0OWUxNDQyNWY0Mjc5NDI1OWQ4YTIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMDk6Mzg6MDcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkKKworY29tbWl0IGEwNWMyN2MyNzExY2I0MTU4MmEzYjRjMzFlMzhiMGU5MzUzMGI2MmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo1MTozMyAyMDEyICswMTAwCisKKyAgICBGaXggc3BlbGxpbmcgaW4gYSBzb3VyY2UgY29kZSBjb21tZW50CisKK2NvbW1pdCA5MTBkN2IwZDk5MTgzNjA5Yjk1MjliMDRjM2YyOTMzMGViNjYxMDIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6Mzg6MTIgMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCkgYnkgbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkKKworY29tbWl0IDQzYTgzZjZjNmE5NmNjMjMxNmI3MGVlY2FjZjEyN2ViNjkxM2M3YTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMToxOToxNSAyMDEyICswMTAwCisKKyAgICBVc2UgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgaW5zdGVhZCBvZiBtZW1jcHkoKSBmb3IgY29weWluZyBzdHJ1Y3QgdGltZXZhbAorCitjb21taXQgMmZlNTc5ZWZiMWNiM2E3NGY4MjgwM2NhMzIzOTI4ZjZiOGU0YjVjMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEZlYiAzIDE0OjA0OjAyIDIwMTIgKzAxMDAKKworICAgIE1ha2UgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jIGJ1aWxkIGFnYWluIG9uIG5vbi1MaW51eCBzeXN0ZW1zLgorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCAzNDVhMWU0MjU0ODEyY2I5ZWRjMWQyNzQ0OTFiNzY2ODFhOWRiYTFlLgorCitjb21taXQgODgxZGU2YWI3MzU1Mjc3YTVjMTE2YTAwOGZiZTUxMzI5M2IwNTAzOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEZlYiAzIDEwOjA4OjIxIDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIFJtb24gTUlCIGltcGxlbWVudGF0aW9uCisKK2NvbW1pdCA0NjI5OTMzYzBkM2IzZjlmNGJhNTgzNTM0Zjc5YTM3ZmI5NjMzODE3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMjA6MDU6MzEgMjAxMiArMDAwMAorCisgICAgTW9yZSBjb21waWxlciB3YXJuaW5nIGZpeGVzCisKK2NvbW1pdCBlOWI1YTNkZWU2ZjlhZmFiOGI5MGEyOTM5MjA0MDYzMmIwNzVhZDdhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTY6NTY6NTUgMjAxMiArMDEwMAorCisgICAgVXNlIFNOTVBfTUlOKCkgaW5zdGVhZCBvZiBtaW4oKQorCitjb21taXQgYWU0NTJjNzdiNDExMTM5ZDZiNTgwMGZmY2Y4OGQ0OGU5YjQ3OTJhOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE1OjIzOjM4IDIwMTIgKzAxMDAKKworICAgIFJlc3RvcmUgY29tbWl0IGRiYjg3OTVhN2RmNTk1ZjA2MDNmMmVjNjE3MDQ3OTlmNGM0ODI2NjcuCisKK2NvbW1pdCBjN2QxMWZhMDBmOTk5NWRkYjlmZTNkNDk5NGEzZTk3OTBkYTJlMTg5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTU6MTg6NDAgMjAxMiArMDEwMAorCisgICAgUmVzdG9yZSBjb21taXQgZGJiODc5NWE3ZGY1OTVmMDYwM2YyZWM2MTcwNDc5OWY0YzQ4MjY2NyBwYXJ0aWFsbHkuCisKK2NvbW1pdCAwMGZkNjI3MjBlYzQ1NGY1YTY5MGRlNGZlYmEwODIyM2NmYjJjM2Y4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTQ6NDg6NDQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBBdm9pZCBjcmFzaCBkdXJpbmcgc2h1dGRvd24gZHVlIHRvIGludm9raW5nIHBlcmxfZGVzdHJ1Y3QoTlVMTCkKKworY29tbWl0IGQ5ZTIyOWQ4MWFiZWFmMTkxZWYyY2NiMDc3ODQyODg1YzIzMGQ2MjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNDo0Nzo0MSAyMDEyICswMTAwCisKKyAgICBSZW1vdmUgYSBzdXBlcmZsdW91cyBkZWNsYXJhdGlvbgorCitjb21taXQgMWUyZTJhZjZjYWU4MzBmMzgxZTg3YTI0NGQwMjllYjg2YmYzZmNjZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDEzOjIwOjM3IDIwMTIgKzAxMDAKKworICAgIHBlcmwvU05NUC9leGFtcGxlcy9waW5nbWliLnBsOiBBZGQgZXJyb3IgY2hlY2tpbmcKKworY29tbWl0IDI0MWExNDFlMzFmMTY4NGZjNmNmNzBjYzRhMDBjY2U2MzZmZDM1MjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMToyODozNyAyMDEyICswMTAwCisKKyAgICBNYWtlIGNvbmZpZ3VyZS10aW1lIEVWUF9NRF9DVFhfY3JlYXRlKCkgZGV0ZWN0aW9uIHdvcmsgb24gdGhlIDUuNCBicmFuY2guCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IDQ2ZWFjMDJlOWEyN2JmNGYzMDY4ZTc5NWNhYjg5MWYwNWE4NDg4NzAuCisKK2NvbW1pdCA2ZDlkMTRmZWFhYTJkMGZlYzY4YjRkMTU4OTQ0ZDMyY2IwNGZmMWJjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTE6MTI6MDAgMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0IHRoZSBjaGFuZ2VzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkIG9uIHRoZSA1LjQgYnJhbmNoIGZyb20gY29tbWl0IGRiYjg3OTVhN2RmNTk1ZjA2MDNmMmVjNjE3MDQ3OTlmNGM0ODI2NjcuCisKK2NvbW1pdCA4YWJlNDllMzBjOTdjODk4M2U4M2I0NWEzNWM3MTZmZTkxZjY2YmVhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgRmViIDEgMTE6NTY6NTggMjAxMiArMDEwMAorCisgICAgRml4IHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gdGhlIERJU01BTiBNSUIgaW1wbGVtZW50YXRpb25zLgorCitjb21taXQgZjlmYjBhNTMzMzc1ZTE0ZGMzNzAwMjVhMGIyZmJjNzYxYmYyN2JlNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDA5OjU2OjAyIDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiSE9TVC1SRVNPVVJDRVNfTUlCOiBmaXggYSBjb21waWxlciB3YXJuaW5nIiBiZWNhdXNlIGl0J3Mgd3JvbmcuCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBhYTZiNzliYzEyNGE3YjdhODg1ZDdlNTAzNWFiMDZhYTNlY2VmNjEzLgorCitjb21taXQgY2E0YTRmZTI1ZWZkMjcxNGY4ZjE5NjFiOTc4NTY2MTY1NjNmNDJjOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDEwOjIxOjQ5IDIwMTIgKzAxMDAKKworICAgIC5naXRpZ25vcmU6IEFkZCBweXRob24vYnVpbGQKKworY29tbWl0IDEzYWRhNTY1NThiNDRlMjhkMTM1NWMwZGNlMWQ5MjFmMzc0NmQ1NDgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjUzOjQ5IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiUmV2ZXJ0ICJGaXggZm9ybWF0IHNwZWNpZmllcnMgdG8gYXZvaWQgd2FybmluZ3MiIiAtIHRoZXJlICppcyogTkVUU05NUF9QUklvIGluIFY1LTYrIGJyYW5jaGVzCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBhYTUyOGJkMjJjNzQ5M2NhOGQ2N2U2NzhmYmY2MTVjYTBmNjNlYTZkLgorCitjb21taXQgYWE1MjhiZDIyYzc0OTNjYThkNjdlNjc4ZmJmNjE1Y2EwZjYzZWE2ZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6MTM6MTggMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0ICJGaXggZm9ybWF0IHNwZWNpZmllcnMgdG8gYXZvaWQgd2FybmluZ3MiIC0gdGhlcmUgaXMgbm8gTkVUU05NUF9QUklvIGluIFY1LTQgb3IgVjUtNSBicmFuY2hlcworICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMzkwYzAxMTRjOGVjMGJkYjI3YjA4YjZmNzRlM2Y2ZWYzYTYyOTgxYi4KKworY29tbWl0IDJmYjk5YmU5YWE4NmE2Y2EzNDliODZkNGVmOGJjNzI2ZWQ5ZjJhODIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjU4OjM1IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgZTVjMzU1ODllMGJmNDE2YmZkMDM2YmQ0NjhmNDJhYWVhYjI1ZTc4OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6NTU6NTYgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAzNDVhMWU0MjU0ODEyY2I5ZWRjMWQyNzQ0OTFiNzY2ODFhOWRiYTFlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDo1MToyNiAyMDEyICswMTAwCisKKyAgICBGaXhlZCBlcnJvciBoYW5kbGluZyBpbiBpbml0X2ljbXAoKS4KKworY29tbWl0IGMzMDM1NDlhNTlmYThjMmYyMGE5ZDhiZjFlOTg1ZmJjOGFiZGU2YTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjQ2OjI5IDIwMTIgKzAxMDAKKworICAgIFJld29ya2VkIF9yZWdpc3Rlcl9leHRlbmQoKSBlcnJvciBoYW5kbGluZy4KKworY29tbWl0IDljMjBlMjdhNzAyNmZjMDMwZGEzYjMyOGI5YTJlMWI0ZjM2NjcwY2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjIxOjI4IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgMjJmZDBiZmMyZGYwZTFmNjAyMGRjM2M1MGE3NTNkZGYyOGE0NTk5YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MjA6MjIgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCA1ZDYxZTU3YmFmNTgwYzc4MjUyYzBhYmIwMDk4YzA3YmIwNWFmMTdjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNToxNzowNSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDNjM2VlYWU4MGQ3OTZmMjc1OTdjOTAxZTdmZjIwNDZjNzY5ZWY0YjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjA4OjA5IDIwMTIgKzAxMDAKKworICAgIE1hcmsgcm93cmVxX2N0eCBhcyBmcmVlZCBzbyBuZXh0IGl0ZXJhdGlvbiBhbGxvY2F0ZXMgbmV3IG9uZSBpbnN0ZWFkIG9mIHJldXNpbmcgdGhlIGZyZWVkIG9uZS4KKworY29tbWl0IGFmOWFiZDUzYzIzMzdjOTBhNjkxYTdiMDQ0ZmYzZjk3YzEwMDMxNjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjA1OjEwIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgY2Y5NDY1ZjU0MTgxZTYyZTIxYTliMTAyMTkxMzExMDdhM2QyZWJmNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDQ6MDYgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCA3ODcxZjJiMDliOGI1MmYzNGE5ZTU3Nzg0MjY2NDU5MDUzMTY1YmNiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowMjo1MCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDdhMzdmMzNkMzEwYzk1OTg2MDdiYzMyM2Q5YmRiZjkxYWFmNzJjOTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjAwOjUxIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgM2U0NWY3MDI2MjQ5ZTQ1MzUwZWRhYWM4NTMzNzQyM2FhMGU5NWQ4YgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6MTM6MTggMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0ICJGaXggZm9ybWF0IHNwZWNpZmllcnMgdG8gYXZvaWQgd2FybmluZ3MiIC0gdGhlcmUgaXMgbm8gTkVUU05NUF9QUklvIGluIFY1LTQgb3IgVjUtNSBicmFuY2hlcworICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMzkwYzAxMTRjOGVjMGJkYjI3YjA4YjZmNzRlM2Y2ZWYzYTYyOTgxYi4KKworY29tbWl0IDYxOTM2NzYyZTY0MWMxOGRiNzVhYTUxMjVhMzNlNzc2YzY3N2FkYzUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDExOjEzOjM5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGZyZWVpbmcgcmVnaW5mbyB0d2ljZSBvbiBlcnJvciBpbiBhIHRlbXBsYXRlIGFuZCBhbGwgaXRzIGluc3RhbmNlcy4KKworY29tbWl0IDQ5NjQzNzQzMDQxNWZiYWZlYjFjY2Q0Nzc0ZjFjYTAwZDYyN2VhMWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTE6MDQ6MTMgMjAxMiArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGludHJvZHVjZWQgb24gVjUuNiBicmFuY2gKKworY29tbWl0IDViNGEyNGNkY2VlMWJjM2Q4MjYzM2NjYWZlYjk2ZmNlOTUzNDljNTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gMjAgMDk6MjI6MjcgMjAxMiArMDEwMAorCisgICAgdW5pdCB0ZXN0czogZml4IGEgNjQtYml0IGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IGNiZjFjOTFiYWY3MTkxYmU1ZmEyN2Q4MWJjZjg3MTQzMzFhMmMxMmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gMjAgMDk6MjA6NDIgMjAxMiArMDEwMAorCisgICAgVXNlIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2UoKSB0byBmcmVlIGEgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0LgorICAgIAorICAgIEZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gY29tbWl0IGRiZjI2YTA1YTA0ZWYyNGM0NzM0NmU1YWRkYTQ4ZTMzODQ5OGU3MWYuCisKK2NvbW1pdCBhYTZiNzliYzEyNGE3YjdhODg1ZDdlNTAzNWFiMDZhYTNlY2VmNjEzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIwOjMxIDIwMTIgKzAxMDAKKworICAgIEhPU1QtUkVTT1VSQ0VTX01JQjogZml4IGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgM2E3NmI0M2UxMWZmZmFkYTYzMmZjY2I4NDhhYjUwMGU4NzZhZDQ4YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNjoyMTowNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBweXRob246IEF2b2lkIHRoYXQgYW4gU05NUCBzZXQgd2l0aCBVc2VFbnVtcyBlbmFibGVkIGNhdXNlcyBhIHNlZ21lbnRhdGlvbiBmYXVsdAorCitjb21taXQgODRkZWM5ZmE5MmIwYWEyZDU4ZWI3MDIwMzMwZjRmOThlNTE1NDMyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNDozODoyMSAyMDEyICswMTAwCisKKyAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBGaXggbW9zdCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgMzhjZjIxOGMzZjFhNzI3Nzg2ZTIyN2E1ZDNmYjE4NmZkMGYxYTE1ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTQ6NTA6MTMgMjAxMiArMDEwMAorCisgICAgRml4IGEgdHlwbworCitjb21taXQgNDU0MTIyMjQ0MTIyYmZkYjZmNjdjYWIzMTI1NmQ3YjQ2MzcyZTllMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTQ6MzA6MTggMjAxMiArMDEwMAorCisgICAgRnJlZSB0bVN0YXRlUmVmIG9uIGVycm9ycy4KKworY29tbWl0IDAxMTkwMjJkYWE1OWM3M2JmZWMwZGEyMzg2ZDA2MjhmMTRlNmRhYjcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjA5OjEyIDIwMTIgKzAxMDAKKworICAgIEZyZWUgZmluZ2VycHJpbnQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisKK2NvbW1pdCAwZTg0Y2QzMDNhMDgyNjdkZWM3OGY2ZDgxYzliYjA3ZTNkODNhMTFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzo0ODoyNiAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA2M2RjODQ2YTc5NDljZTY5N2IzZTI4YzU0M2RjMTEwNWU2M2EyMjUwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzowODoyOCAyMDEyICswMTAwCisKKyAgICBGcmVlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50LgorCitjb21taXQgY2UxZjI4NGE2M2ViODE2NDRiM2UzMjYwNmNiZTM5YjY3ZTFkZmYyYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTQ6Mzc6MDkgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgN2UyMTQxM2NhNmYyZWZkN2EzYWZiNjJjNjJiNjQ0ODgxYjhiZDFlNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6NDY6MzAgMjAxMiArMDEwMAorCisgICAgUHJvcGVybHkgYWxsb2NhdGUgYW5kIGZyZWUgZW5naW5lSUQuCisKK2NvbW1pdCAzNGM5NjI4ODI2MDdjMzYzOGEyZmEyNWEyYWM1MzE0OTJkNzFjNzg3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzozNzoyNSAyMDEyICswMTAwCisKKyAgICBGcmVlIGxvY2FsbHkgYWxsb2NhdGVkIHRtU3RhdGVSZWYuCisKK2NvbW1pdCBmNTdhZTUzMWRjNTY1OGFiY2Q2NWIxNjI3NjE1NTI1MjM4ZDE2ZDJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzoyMDoyNCAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA1MzZiYzU3NTU2YzMxNDE1NjFlYTRhMTk0ODEwYjE2MjkwYTY5MWVlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzoxNTo0NyAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBpZiB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcyBzb21ldGhpbmcuCisKK2NvbW1pdCBhMDc3N2QzMDdkYmNhZjIxOWVlMDE4NGEwZmJhYjlkNGU1ZDZhYTBiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzowMTo0NSAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA4Yjk3YTcxYzhlNzk1OTQyOGViNGQ0ZThkOTBlOTA5NmQ0M2ZmMDlmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMjo1NzoyNiAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCAyYzE1MDdjMjIwMzA1NDlhZTY2MGMwZTIxMWZiZGM1Yzc1ZWM1YzU3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMjo1Mzo0NyAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA2NWYyYjdiY2Q0ZmUwMzkwNmFhMWExMTVhYjYwYTg5YjhhZTkzM2Q1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMjo1MTozNiAyMDEyICswMTAwCisKKyAgICBDbG9zZSBvcGVuIGZpbGVzIG9uIGVycm9yLgorCitjb21taXQgMGU1MmU0ZjY2ZDQ0NzY2YmVhMzc0NzM1NTZjNzhlNTIxOWI5NTQ2MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6NDU6MzMgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgZGJmMjZhMDVhMDRlZjI0YzQ3MzQ2ZTVhZGRhNDhlMzM4NDk4ZTcxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6NDI6MTcgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNzQ4ZGE4NGIxZmQ2NTRlMzM4YmM3MDFlOGY5ZTVkYTIyOTE4N2YxYworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MzI6MDQgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgZWIyMTcxNDZmZDU0MDM2ZWE0MjAyYmZlZjc4YmJmNzc0ZDdlMzgyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MjM6MTAgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgOWJhMzhlZWM2NjEzOGVjMWY2MTNlYThkMDRlMTU4MTMwYzcxMjFiYworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MTg6NTUgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgZDlkOTM4ZDMwMThjMjdmNTMyNzdiYzVlNTk1Nzg1MDA0OTBjMWQwOQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MTY6MzggMjAxMiArMDEwMAorCisgICAgQ2xvc2Ugb3BlbiBmaWxlIG9uIGVycm9yLgorCitjb21taXQgZDVlODE3ZDViZDUxOGQ5YWM2YTBkNjBlMGUxNDFkZDY0ZjI3YWQxOQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MTQ6MTIgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgMmFlNjhmMDU5ZGY5ZDc0YjA3NGQxMmY1OWMxODQ3NDY2ZWQ1NzZjZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTU6MDM6MTcgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgYTAwZjNkNDYxMTIxYjU0NWFlZDcyYWMxMmIyNDM4NzkxZGNmYzRiYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTggMTQ6NTg6MzkgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNTk4ODRiYjRkMzVhZDEzNzQ3ZmZhNjcyMzQzNmRjYTU4N2E5YWI3NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTc6MDk6MTIgMjAxMiArMDEwMAorCisgICAgSW4gYWJvdmUgY29kZSwgb2xlbmd0aCBpcyBjaGVja2VkLCBzbyBsZXQncyBjaGVjayBpdCBhbHNvIGhlcmUuCisKK2NvbW1pdCBiYTVkNTI5MmIwNDM5M2IwYzdkN2Q3ZWQ5NjEyNDE5Mjk0MThjNmU0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNzowNToxNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIE5VTEwuCisKK2NvbW1pdCBkYTJkNmE3MDI4YTEzYjllZGYzYTVjODQzMTRkMGYxZmVlZjc2NzE0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjo0NDo1NiAyMDEyICswMTAwCisKKyAgICBQcmV2ZW50IGRlcmVmZXJlbmNpbmcgTlVMTC4KKworY29tbWl0IGY4ODA1NGE5YjY5YjZkZTI3NGY3YTE0YTU5YjQ3MzIzZTVlNGU0YzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjM3OjM1IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlcmVmZXJlbmNlIGNvbnRleHQgaWYgaXQncyBOVUxMLgorCitjb21taXQgN2M0ZDQ1OWU4ZjFmNjUyY2MyMDk4YzNkNGM4MWRlOTBhODRlZDcxMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MzA6MDkgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgZGVmZXJlbmNlIE5VTEwuCisKK2NvbW1pdCBmYzE5YjdmMzNiNTg3OTI3ZDJhMDFlNzJkMjNkMjFiOWIxNjk2YWIzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjoyNToyNiAyMDEyICswMTAwCisKKyAgICBEb24ndCBjbG9zZSBOVUxMIGZpbGUuCisKK2NvbW1pdCA1ZTk1Y2E2NzkwMDc2Yjc4ODA3MmE4MDFlZTdjODI5NjlkOTk1YmNiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjoxNzowOSAyMDEyICswMTAwCisKKyAgICBQcmV2ZW50IGRlcmVmZXJlbmNpbmcgTlVMTCB3aGVuIGEgdHJhbnNwb3J0IGRvZXMgbm90IGhhdmUgZl9mbXRhZGRyLgorCitjb21taXQgZWVkNmY1ZjliOWFlNTRkMmNlYWI2N2FkODVhZGRlMWY2YThhMjFkNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTM6MTMgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwuCisKK2NvbW1pdCA0MWNkZTY4YjVmYTRiMzhkODE0NTBjZjkxZTA4MmNkZmE4MjVlN2NmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjoxMDoxMCAyMDEyICswMTAwCisKKyAgICBDaGVjayBpZiBhIHJlZ2lzdHJhdGlvbiB3YXMgcmVhbGx5IGZvdW5kLgorCitjb21taXQgNWI3MmE0MDg1Mzg3NmExODZlZmNjMDA5MGE0ZTMyYzIzNWI5YzA1ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MDM6NTggMjAxMiArMDEwMAorCisgICAgRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCB3aGVuIGRpZmZsZW4gaXMgU01VWF9NQVhfUFJJT1JJVFkgKHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseSwgYnV0Li4uKQorCitjb21taXQgZmE2YTkxMmU0MWM1ZDBmZDJhNjM2ODk0ZTg2YjY0MjZjMDczNzVhYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6Mzc6NDQgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG1pc3NpbmcgdmFsdWUgaW4gc2V0RXZlbnQuCisKK2NvbW1pdCA0MTBiNzFkYTQyNTM4OWZlY2MyNWQxNGY0OWYyMzc1MzU4MTU3NmFkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNToyODo0MSAyMDEyICswMTAwCisKKyAgICBEZXJlZmVyZW5jZSBlcmVnIG9ubHkgaWYgaXQgaXMgbm90IE5VTEwuCisKK2NvbW1pdCAxODUyNzJkMWEwYjkxMzc3NDE4NmYxYjkxMzVhZWFmNjM3ZWJlZDUyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNToxNzoyMSAyMDEyICswMTAwCisKKyAgICBBcyBwZXIgYWJvdmUgY29kZSwgdGVtcGxhdGVfdjJwZHUgY2FuIGJlIE5VTEwsIHNvIGNoZWNrIGl0IGJlZm9yZSBkZXJlZmVyZW5jaW5nLgorCitjb21taXQgNDhlNWVhZDNmZDJjMmIzODVkZjY5NzJjNjc1MjZmZjZiZGMzMDc2OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTQ6NDI6MjIgMjAxMiArMDEwMAorCisgICAgVXBkYXRlZCBsYXN0IGZpeCB0byBuZXcgZXJyb3IgcmVwb3J0aW5nIHN0eWxlLgorCitjb21taXQgZjMzZDMzNjE1ZDZkODVkMDA3MzcyNjQ3M2M0MTQ2Y2JjZGYxMWNlZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTQ6MzA6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgc2lnc2VndiB3aGVuIGVtcHR5IGNvbmZpZyBsaW5lIGlzIHBhcnNlZC4KKworY29tbWl0IGI1ZGYxZWViNDdlZDM1NTliNmY0ZDllY2NjZGIyNDIxMjZlNmM5OTIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjExOjU4IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIChoaWdobHkgdGhlb3JldGljYWwpIHNpZ3NlZ3Ygd2hlbiBzcC0+c2VjdXJpdHlFbmdpbmVJRCBpcyBOVUxMLgorCitjb21taXQgNmZlZWQ2MjlhNzE4OTljMTEzMDk2OTU5ZDg1NDlkYzEyMDFlOGY5YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTM6NDM6MzcgMjAxMiArMDEwMAorCisgICAgQWRkZWQgTlVMTCBhbmQgbGVuIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21lb25lIHByb3ZpZGVzIHZhbHVlID0gTlVMTCBhbmQgbm96ZXJvIGxlbiAoLT4gTlVMTCBpcyB0aGVuIGRlcmVmZXJlbmNlZCkuCisKK2NvbW1pdCAzNTVjNWFiMjY0YWYyYTYwMjBhMWQ4YTkyM2Y4MGYxMWI5NDIyOTVlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxMzozNjo0MSAyMDEyICswMTAwCisKKyAgICBFeHRlbmQgdGhlIE5VTEwgY2hlY2ssIGkuZS4gcmV0dXJuIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVtb3ZlLgorCitjb21taXQgZGRkNzk0OGFjYWQ5MzhjZDQyOTc0NTA1ZGRjYTRmMDM3MjExNjcwOQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAxMToxMToyOSAyMDEyIC0wODAwCisKKyAgICB1cGRhdGUgc3BhcnRhJ3MgY29weXJpZ2h0CisKK2NvbW1pdCA0MTI1NjA4NmE3YTUwNDE0NTM0MTljZmQ2ZTU2MmM3YjU1YzU2YjBhCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDEwOjMyOjA0IDIwMTIgLTA4MDAKKworICAgIHB1bGxlZCBmdWxsIGNvcHkgb2YgZXh0cmFjdG5ld3MgZnJvbSBtYXN0ZXIKKworY29tbWl0IDYyNWE3MGRiZGZkOTkwMmRhNzllZmEyOTNmZTZkMmFjOGNjZjJiMmUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMTA6MjQ6MTkgMjAxMiAtMDgwMAorCisgICAgdXBkYXRlIHRvIGNoYW5nZSB0byB0aGUgbmV3ZXIgbG9nIGdlbmVyYXRpbmcvcGFyc2luZworCitjb21taXQgNjJlMzJiMTMwODliMjllZGNmMjc2ZjYxNWRhNjdlNDUwOGZlN2JiNQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAwOToyOTo0MiAyMDEyIC0wODAwCisKKyAgICBjb25mbGljdGluZyBtZXJnZSBmcm9tIG1hc3RlciBmb3IgZXh0cmFjdG5ld3MKKworY29tbWl0IDcwMDg0ZGE2MWQyYmNiZDJjZjFlZDgxYmRjM2JmNjc5NGMyYWZmYjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gMTMgMTE6NDk6MTYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1TQ0hFRFVMRVItTUlCOiBIYW5kbGUgMzItY2hhcmFjdGVyIHNjaGVkQ29udGV4dE5hbWUgdmFsdWVzIGNvcnJlY3RseS4KKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgYjNjNDk4MjU0MmUwYWIxNTFmYjM4ODQ3NTRjZGZiY2I0NzJkYTUyZC4KKworY29tbWl0IDA0YmYzZTI4ODE1OGVlODgwZWRmMjM3ZTQwMDdmZWUzN2QyMDQ0ZGQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjM5OjM3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGVuZGxlc3MgbG9vcCB3aGVuIFNTTF9yZWFkIHJldHVybnMgZXJyb3IuCisKK2NvbW1pdCBjMTUyNmZjY2MwNDc0YzFkYjE4Y2FhOWRiYjgzMzg1M2NkZGRlM2NjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNToxMzoyMSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBhIHR5cG8uCisKK2NvbW1pdCBhMjdhYTE5ZGYyODMxNTZjMDMyYzgxZWFlZTVlMTE1ODU5ZDM4YzE3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNToxMTozMiAyMDEyICswMTAwCisKKyAgICBEb24ndCByZXBsYWNlICdyYycgdmFyaWFibGUsIGl0J3MgdmFsdWUgaXMgbmVlZGVkIG91dHNpZGUgdGhlIGxvb3AuCisKK2NvbW1pdCA5ODVkZmYyYjA4NzZkOTQ4M2M0MTRmY2NlYTNlZjZiYzYzZTE0NTYxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNTowMTozMiAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgorCitjb21taXQgMmZkNzgxODMxOGU3YTVkZmU5OGY1MmNjZjc1MGMyYTYzZTgyNWRlZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MDA6MjIgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCBkdXBsaWNhdGUgY29kZS4KKworY29tbWl0IDE1ZjIxMTMwYmEzM2RjOWFmZDE2NGU1MmRmZDc0YzljZWMwZTkyMzIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE0OjU4OjE0IDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgZHVwbGljYXRlIGNvZGUuCisKK2NvbW1pdCAyYThhOGYyYWI3Y2Q3NTgyNmM1ZDQxZWMzY2ZkNWNlM2U5NjM0Y2YzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDozOToyOCAyMDEyICswMTAwCisKKyAgICByZW1vdmUgZGVhZCBjb2RlLCAnY3AnIGlzIGFsd2F5cyAhPSBOVUxMIGhlcmUuCisKK2NvbW1pdCAzOGZkNjM3OGNjMzI3NTE4MGY2M2I4ZDliOWE0MDcyYjNkYWJmOGU0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDoyNTowNiAyMDEyICswMTAwCisKKyAgICBGaXhlZCBhIHR5cG8uCisKK2NvbW1pdCBlYmQ5MmUxOWIxMGMwYTM4ZTE3Y2RlNDA3ODY0YjQ1YzI2ZTE3MzI3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDowNzo0MyAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IGlmICh2YWx1ZSkgY2hlY2sgLSB2YWx1ZSBpcyBjaGVja2VkIGZldyBsaW5lcyBiZWZvcmUuCisKK2NvbW1pdCBjNWNhY2Y1Y2FmOTc5ZDAxOGVhNmNhZTFjMDNiOGZkZjBiMTE4ZGZkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxMzo0NDo0MyAyMDEyICswMTAwCisKKyAgICBQcmV2ZW50IGRvdWJsZSBmcmVlKCksICdkaXJuYW1lJyBpcyBhbHJlYWR5IGZyZWVkIGluc2lkZSBzZV9hZGRfcGFpcl90b19saXN0KCkgaWYgaXQgZmFpbHMuCisKK2NvbW1pdCBhY2RjZWI1MGVhNjZkNmIzMjNjNzRlZTAyMWZiNzdlODEwZTRlN2FmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxMzo0MzoxOSAyMDEyICswMTAwCisKKyAgICBQcmV2ZW50IG1lbW9yeSBsZWFrIHdoZW4gbWFsbG9jIGZhaWxzLgorCitjb21taXQgMTcwNTNlMzRjZmU5YThhYjM5NWZiNTBmNWMzZjFkYWZjNzI0N2FlYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6MzI6NTcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZG91YmxlIGZjbG9zZSgpLgorICAgIExpbnV4IG1hbiBwYWdlIGZvciBmY2xvc2UoMykgc2F5czogSW4gZWl0aGVyIGNhc2UgYW55IGZ1cnRoZXIgYWNjZXNzIChpbmNsdWRpbmcgYW5vdGhlciBjYWxsIHRvIGZjbG9zZSgpKSB0byB0aGUgc3RyZWFtIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgorCitjb21taXQgYTY2NDFlZGI5Y2I3NGZjMjIzNmI0MmNlNTU1NGZjMzMyOTk1NjU1MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxNToyMjozNCAyMDEyICswMTAwCisKKyAgICBNaW5HVzogU2tpcCB0ZXN0IFQwNjUgaWYgbm90IHN0YXJ0ZWQgZnJvbSBpbnNpZGUgYW4gTVNZUyBzaGVsbAorCitjb21taXQgYTg4M2VmMTk4MmYzMDFiMTQ4NWQyMjczMDE2NzQ5MjczMzBmNWI2NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTU6MTQ6NTMgMjAxMiArMDEwMAorCisgICAgTW92ZWQgZGVidWcgb3B1dHB1dCBiZWZvcmUgcmV0dXJuLgorCitjb21taXQgNDU3NTE5NjcyODdkOTc2NDBlZmRjZGY4ZTc3ZThkNDkwOTM5ZDhlYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxNDoxNzoxOCAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHN0cnRvdWxsKCkgdW5pdCB0ZXN0IGludG8gYSBOZXQtU05NUCB1bml0IHRlc3QKKworY29tbWl0IDJjMmZhNDgzMzZhNGYxZjE3N2MyOTkxZDY1MTVkMjlmMzk1MzNjNDQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTM6NTA6NDQgMjAxMiArMDEwMAorCisgICAgQ29udmVydCByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCgpIHVuaXQgdGVzdCBpbnRvIGEgTmV0LVNOTVAgdW5pdCB0ZXN0CisKK2NvbW1pdCAwN2M2NjZmNmNlYTI3ZjJiMmFiOWJjMDhhZWQwY2I2MTMzZmUzNzU4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMzoxNzo0NSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBjb21taXQgNzNhNTIzZTQ2ODI3N2Y2ZGYyZTk4NDg5MTMxM2I4YmU4YmNlMTkyMToKKyAgICBGaWRleCBkZXJlZmVyZW5jaW5nIGtleS0+aW5mbyB3aGVuIGtleSBpcyBrbm93biB0byBiZSBOVUxMLgorCitjb21taXQgM2I2ODY1NjYyOTZkZDg3YmM0MmI3ZjExNjlkYWFjZGIzYzQ1Y2M1OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAxOCAwNjoyNTo1NiAyMDEwICswMDAwCisKKyAgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGhvdXQgd2FybmluZ3Mgd2l0aCBNU1ZDIDYuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5NDg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgZjNhN2QxYjA5NjA5ZGFkNjQ5ZjU4YmJkYjViN2UxMGQzOWIzOThjMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE9jdCAxNyAxMTowNDowNiAyMDEwICswMDAwCisKKyAgICBGb2xsb3ctdXAgZm9yIHIxOTQ3NjogZml4ZWQgYSB0eXBvLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTQ3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDJkZTczYmQzNjVhMzgxYjljMzUzY2E1MjMwNzY5ZWVmYjFhYzcxZWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTE6NDI6NDIgMjAxMiArMDEwMAorCisgICAgbG9jYWwvcGFzc3Rlc3Q6IFJlbW92ZSBhbiBpbmNvcnJlY3QgUEFUSD0gc3RhdGVtZW50CisKK2NvbW1pdCA2OTk1MTNmMTIzOGUwYWRjZTFmMWNlYzk4ZTBkMTQ3MjkzZmM1MDQ3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gT2N0IDE3IDA5OjI1OjUxIDIwMTAgKzAwMDAKKworICAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCktcmVsYXRlZCBjbGVhbnVwLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTQ3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDYzNThkZWU3MmZiMzQ3ZTI2MDBhMGE3YmQyMWYyMzI3MGQzYTAwZjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6NTg6MTUgMjAxMiArMDEwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYzogQWRkIGEgY29tbWVudAorCitjb21taXQgNTM5NmJmZTAzMmM4Y2JjNzNjOGZmNWQ0YjA4NWViYWRhOWY1OTg0NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMDozMDoxNiAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIHN0cm5jcHkoKS9zdHJuY2F0KCkgYnkgc3RybGNweSgpL3N0cmxjYXQoKQorCitjb21taXQgZmViM2FmMjhkY2FlMjIwMTVhZTg2NWEyZTVkZDhjNDE2ZTk5OTFkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMDowMjowOCAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIHN0cm5jcHkoKS9zdHJuY2F0KCkgYnkgc3RybGNweSgpL3N0cmxjYXQoKQorCitjb21taXQgYjdlMWFhMjU1YmFlNGEzNDUzZjllY2E2NDRhODc2NjM0MzUxZjExZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyMCAxOTozNjoyOCAyMDEwICswMDAwCisKKyAgICBDSEFOR0VTOiBsaWJzbm1wOiBjaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpIGZyb20gY29uc3QgY2hhciogdG8gY29uc3Qgdm9pZCogc3VjaCB0aGF0IG5vIGNhc3QgaXMgbmVjZXNzYXJ5IHdoZW4gcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4gY2hhciogb3IgY29uc3QgY2hhciouCisgICAgQ0hBTkdFUzogV2luMzI6IGNoYW5nZWQgaW5fYWRkcl90IGZyb20gdV9pbnQgdG8gdV9sb25nIHN1Y2ggdGhhdCBpdCBtYXRjaGVzIHRoZSBkYXRhdHlwZSBvZiBzb2NrYWRkcl9pbjo6c2luX2FkZHIuCisgICAgQWxzbywgZml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyAobW9zdGx5IGNoYXIgKiA8PiB1X2NoYXIgKiBtaXNtYXRjaGVzKSBhbmQgcmVtb3ZlZCBzb21lIGNhc3RzLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE4MzQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJYWdlbnQvYWdlbnRfcmVnaXN0cnkuYworICAgIAlhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jCisgICAgCWFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYworICAgIAlhcHBzL3NubXB0cmFwZC5jCisgICAgCXNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMKKyAgICAJc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jCisgICAgCXNubXBsaWIvc3lzdGVtLmMKKworY29tbWl0IGY0N2EzNzUyODQ5ZGIwNzVlNmYyMDUzYjg1OTViN2I3OTJmYjY0NjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBPY3QgMTUgMTA6NTY6MDkgMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBCdWlsZHMgbm93IGNvcnJlY3RseSB3aXRoIGEgNjQtYml0IGNvbXBpbGVyLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5NDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgMDJiNjA1NmRmOTVkYThiNjczMDM0ZTM5YzJjN2MzODZlZDBmMzY5YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMTo0NDo1MyAyMDEyICswMTAwCisKKyAgICBGaXggYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGNhc3RpbmcgYXdheSBjb25zdAorCitjb21taXQgYTE5ODY1ODMyZmM3N2Y0YzA0ODE0NGQ5MWE0MzFiMWU5NGQzMjlmMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMTQgMjM6MTI6MDUgMjAwOSArMDAwMAorCisgICAgQ0hBTkdFUzogYXBwcywgc25tcGxpYjogUEFUQ0g6IDI4MzU1Nzc6IGlkZW50aWZpZWQgYnkgIkJhcnQgVmFuIEFzc2NoZSI6IFJlcGxhY2UgU05NUF9aRVJPIG9mIGFycmF5cyB3aXRoIGEgbWVtc2V0LgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE3Nzk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgNjdhM2UyZWNjYjk1ZjljOWQwODA5ZWZjYmRkY2Q4NjZlZTMwNjJkNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA2IDE0OjI3OjE1IDIwMTAgKzAwMDAKKworICAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTc5NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAzZGNkZTJlOGE1OTVhNTI3ZjA2MTQyYzNiODUyZGU4NDMzYTFjZjI4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEphbiAyNCAxNDoyNzo1NSAyMDEwICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQcmV2ZW50IGdjYyBwZWQtd2FybmluZyBmb3IgTkVUU05NUF9SRU1PVkVfQ09OU1QKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxODA1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGMyZTE1MjVhODViZGE1Mjk5YTNiOWYyNDE2MTRmN2U2NTA5YWVlYmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNiAxMzozNToxMSAyMDEwICswMDAwCisKKyAgICBCYWNrcG9ydCBjb21taXQgMjk1ZjQ3M2M4MzU0NjIyMWIyYTcxZDgxNWM2MWUzM2E2N2Y5OGFlMzogcmVmaW5lIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkgaW1wbGVtZW50YXRpb24uCisKK2NvbW1pdCBjYjQyM2IwYWU5ZWQwMDU5YWExMDBkYzRlMmZkOTNhZDFiOTdmYWY4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDYgMTE6NTc6NTEgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGUyZmIwOWUwMDkzZTJmNjQ4ZmUyNjM4ZGEyZjNhZjE4ZmRiMzJiZjAgLSBpbnRyb2R1Y2UgTkVUU05NUF9SRU1PVkVfQ09OU1QoKS4KKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCWFnZW50L3NubXBfcGVybC5jCisgICAgCXNubXBsaWIvc25tcF9zZXJ2aWNlLmMKKworY29tbWl0IGFmYzM5NmFiMTYxOGE4NTk1YTI1MTlmYmMyNWY3YTQ5OGUxNzQ0MTEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMDg6NDk6MzQgMjAxMiArMDEwMAorCisgICAgVW5icmVhayBuZXRzbm1wX21rdGVtcCgpIGFuZCBtYWtlX3RlbXAoKS4KKyAgICAKKyAgICBUaGVzZSB3ZXJlIGJyb2tlbiBieSBjb21taXQgYmI4ZmNiYjg3NDk5ODAwMGY5NDVmMDU4ZDFhYTZmZTE0ZTkyNTg5OS4KKyAgICBBbHNvIHJlcGxhY2UgYSBzdHJuY3B5KCkgY2FsbCBieSBhIGNhbGwgdG8gc3RybGNweSgpIGFuZCByZXBsYWNlIHRoZQorICAgIG1ha2VfdGVtcGZpbGUoKSBpbXBsZW1lbnRhdGlvbiBieSBhIGNhbGwgdG8gbmV0c25tcF9ta3RlbXAoKS4KKworY29tbWl0IDIxMDE4NWMxNWQwZDY1ZjBlYTk4YjVlM2MyZTA3NzZmNjIyMmQxNzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMDg6Mjc6NDMgMjAxMiArMDEwMAorCisgICAgRml4IGEgY3Jhc2ggZHVyaW5nIHN0YXJ0dXAgb2Ygc25tcGQgaW50cm9kdWNlZCBieSBjb21taXQgODg1MDYxNjg3ZDljYWEzODQ3MDk3OTY2N2Q3ZDhhZDY1NjNjZWRhZC4KKyAgICAKKyAgICBBbHNvLCBtYWtlIHN1cmUgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBjb3B5IG9mIHRoZSBjbGVhbnVwIGNvZGUgaW4gZnVuY3Rpb24KKyAgICBta2RpcmhpZXIoKS4KKworY29tbWl0IDhiYjRlODZhYmNmOThmZjI4NzQ4YWYwYWY4OWM5OGU2NGQ1Y2Q5NjEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBKYW4gMTEgMDc6NDc6MTIgMjAxMiArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgb2xkbWFzayB2YXJpYWJsZS4KKworY29tbWl0IDY2ODAxNDdiMTM4ZWMxMTRmODFjNWQxMjhhYzkzNTBjODQ1MGQwODEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTg6NDQ6MzEgMjAxMiArMDAwMAorCisgICAgTWFrZSB0ZXN0IFQwMTVpbnQ2NF9jbGliIHBhc3Mgb24gNjQtYml0IHN5c3RlbXMKKworY29tbWl0IDNhYWQxNWFlNTYwYWM4NTdlNzNjOTA3NjRlOTAzZTdjYTAyYjMyOTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjQwOjU5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyBmb3IgbGFyZ2UgT0lEIG5hbWVzCisKK2NvbW1pdCBmYmExODhlZTgyMDEwYjJmMmQ4Y2EyZTQyNmJhNjU0NDk5YWIzZDBhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTozMTozMyAyMDEyICswMTAwCisKKyAgICBmaXhlZCBidWZmZXIgb3ZlcmZsb3cgaW4gX19jb25jYXRfb2lkX3N0cgorCitjb21taXQgMjFkMjVkODZiOGU0OTA0ZDc5OGRjOGM5NmRhZGU5ZTUwNDg0NTdhOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MjY6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gcGFyc2luZyBwb3J0IG51bWJlcnMuCisKK2NvbW1pdCBkMzY5MzE4NDFiMmZjMmNlYmM2MzY0YjI5NDkxMjlhMGFkNDJhZDFkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTowNTo1MSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBhIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGxhcmdlIFN1bUZpbGUgaXMgdXNlZC4KKworY29tbWl0IDBlZmRkMDIyZGEwOWFmMWI1ZTE2MTcxZmE3YTJiNTIzYzVkNmVjNTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjAxOjUzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBiaWcgdGVtcCBmaWxlIHBhdHRlcm4gaXMgdXNlZC4KKworY29tbWl0IDU2MGJjNmMwOWI3NTE1NTZlZmQ2YjRjNDQ5NTc1MWIxMDlhOTNmOTIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjU5OjI0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdywganVzdCB0byBiZSBzdXJlLgorCitjb21taXQgODI5MWQ3YzViOTJhMzFkZDRmNTgyYjQ5N2Q0YjJhMDg1MzM2N2E1NgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6NTU6MTYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93LgorCitjb21taXQgODhlMWYzNGRlNzMwMDU3NWZhNmRhYjg1N2VjZGRiMjQyYTg3ZGU4MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6NDg6NTUgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gdG9vIGxvbmcgaW50ZXJmYWNlIG5hbWVzIGFyZSB1c2VkLgorCitjb21taXQgYmUxMzc1YTk5MjZlYmUwY2Q1Yjc4YTQwNDVjM2JkMTFjODM2NjRiMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6NDY6NDkgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gYSBzZW5zb3IgbmFtZSBpcyB0b28gbG9uZy4KKworY29tbWl0IDFjYjI0NjI1MzcyMDYyYjE0YzcxZDdkZDUxZTIwZmVmNzczZTI3NDMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQxOjAwIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGEgQ1BVIGhhcyB0b28gbG9uZyBuYW1lLgorCitjb21taXQgODRjODA3ZWUwMzI1MWU1NDg1NmU4M2Q2MmQwNmVhMDhiOGRmNTI3YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6MzY6NTAgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gdG9vIGxvbmcgaW50ZXJmYWNlIG5hbWVzIGFyZSB1c2VkLgorCitjb21taXQgYzMxMGUzOTBiNWRkMDVmMjRiZTdlYjE5MDRjNzRlNDEyNTljOTNkYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6MjQ6NTQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gdG9vIGJpZyB0ZW1wIGZpbGUgcGF0dGVybiBpcyB1c2VkLgorCitjb21taXQgNDYwMGQxMTQzNGU4M2I4NjUzY2Y5ZjgxM2EzZDhiNjMwNDU1YjQyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6MTc6MDggMjAxMiArMDEwMAorCisgICAgRml4ZWQgcGxhdXNpYmxlIHN0cmluZyBvdmVyZmxvdyBiZWZvcmUgcGFyc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKworY29tbWl0IDg4NTA2MTY4N2Q5Y2FhMzg0NzA5Nzk2NjdkN2Q4YWQ2NTYzY2VkYWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjExOjAyIDIwMTIgKzAxMDAKKworICAgIEdldCByaWQgb2YgKGluc2VjdXJlKSBTTk1QX01BWFBBVEggaW4gbWtkaXJoaWVyKCkKKworY29tbWl0IDgwMTY4OTBhNDQ1ZjZhN2UyYTg3M2EwNDg3M2Q0ZTI3YjZlZTY0ZTMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDEzOjQ4OjM0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIGludGVnZXIgc2l6ZSBvbiA2NCBiaXQgcGxhdGZvcm0uCisKK2NvbW1pdCBiYjhmY2JiODc0OTk4MDAwZjk0NWYwNThkMWFhNmZlMTRlOTI1ODk5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzozMTozNiAyMDEyICswMTAwCisKKyAgICBTZWN1cmUgbWtzdGVtcCgpIHdpdGggdW1hc2soKSAtIG9uIHNvbWUgaW1wbGVtZW50YXRpb25zIGl0IGRvZXMgbm90IHNldCAwNjAwIHBlcm1pc3Npb25zIGF1dG9tYXRpY2FsbHkuCisKK2NvbW1pdCAyMDI1MjNjYTcwNGJkNzIyZGMxYWMwZTFlNmIwZTRiNGU1NDI0NDk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzoxMTo1NyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nICdjJyBiZWZvcmUgTlVMTCBjaGVjay4KKworY29tbWl0IDczYTUyM2U0NjgyNzdmNmRmMmU5ODQ4OTEzMTNiOGJlOGJjZTE5MjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDEzOjA4OjI0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRlcmVmZXJlbmNpbmcga2V5LT5pbmZvIHdoZW4ga2V5IGlzIGtub3duIHRvIGJlIE5VTEwuCisKK2NvbW1pdCAyZjRlNmFjZDcxNDE4M2YwMTViNzYzNjU3ZjhmMDg0NTkzMzU3ZTI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDEwOjM4OjE2IDIwMTIgKzAxMDAKKworICAgIC5naXRpZ25vcmU6IElnbm9yZSBwZXJsLyoueW1sIGZpbGVzCisKK2NvbW1pdCBjMzY1ZDgwYzE2YzJkMTdiMTYwMDExZThjMWY5Y2I5NTg5NTRlOWRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDA4OjM0OjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogRG8gbm90IGludm9rZSBzaHV0ZG93bl9wZXJsKCkgZnJvbSBpbnNpZGUgdGhlIFNJR1RFUk0gaGFuZGxlciBzaW5jZSB0aGF0IGZhaWxzIGlmIFNJR1RFUk0gaXMgcmVjZWl2ZWQgd2hpbGUgYSBQZXJsIGhhbmRsZXIgaXMgYWN0aXZlLiBCYXNlZCBvbiBhIHBhdGNoIHBvc3RlZCBieSBKb2VsIEF2bmkgPGphdm5pQGFydWJhbmV0d29ya3MuY29tPgorCitjb21taXQgZDA1OWZiODc4YjE0MzY1OTk5NTNjZWE1YTA3NzQ5OWRkY2RjYmNiNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE3OjAzOjU1IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IEJVRzogMzQ0MDc1MjogSUYtTUlCOiBSZXBvcnQgaW50ZXJmYWNlIHNwZWVkIGNvcnJlY3RseSBmb3IgRXRoZXJuZXQgaW50ZXJmYWNlcyBpZiBvdGhlciB0aGFuIDEwIE1icHMsIDEwMCBNYnBzLCAxIEdicHMsIDIuNSBHYnBzIG9yIDEwIEdicHMuIEFkZCBzdXBwb3J0IGZvciBOSUNzIGZhc3RlciB0aGFuIDY1IEdicHMuCisKK2NvbW1pdCBjMDk5MDNhNDJlOWQ5NzMzMWZkOWU0OGVlODMxYTg1YWZkZjljNzBhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gSmFuIDkgMTM6MjY6MTcgMjAxMiArMDEwMAorCisgICAgRG94eWdlbi1zdHlsZSBkb2N1bWVudGF0aW9uIGZpeGVzCisKK2NvbW1pdCBlMzI1ZWNiZmNlNzdmMDBhYzVjZjZmYmQ5NTdmOTU0OTVmNjFjNTliCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gSmFuIDkgMTM6MjU6MTAgMjAxMiArMDEwMAorCisgICAgU3VwcHJlc3MgdW5pbnRlcmVzdGluZyBEb3h5Z2VuIHdhcm5pbmdzCisKK2NvbW1pdCBiZTkxNjFkM2E1ODk4ZTg2Mzc2N2Y5MjY2MTM0ODYxMjZjMmNiZjY3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTI6MzU6MzkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIG1hbmlwdWxhdGluZyA2NC1iaXQgbnVtYmVycy4KKworY29tbWl0IDg2ZTRjMmJlMDg1MmEwYTEzYjA2MDMwNzU3MjBiMzI2NGVjNzBkZGUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxMjoyOToxMSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIGl0IGV4cGxpY2l0IHRoYXQgTUFYX1NVQklEIGlzIGFuIHVuc2lnbmVkIGNvbnN0YW50CisKK2NvbW1pdCAzN2UyNzJkOGY3YjcxODBiYTE0MGZhMzg2YTVmZjA1ODk2OGEwOGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTg6MjE6NDggMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IElGLU1JQjo6aWZUeXBlOiBSZXBvcnQgdHlwZSAiaW5maW5pYmFuZCAoMTk5KSIgZm9yIEluZmluaUJhbmQgaW50ZXJmYWNlcyBpbnN0ZWFkIG9mIHR5cGUgIm90aGVyICgxKSIuCisKK2NvbW1pdCAyNjk5MzJmYTMyYzdjZDQ3OTU3NDg5Njk4ZTA5YmVlMzFmNjNiN2FmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTQ6MzQ6NDIgMjAxMiArMDEwMAorCisgICAgRml4IGFuIE1TVkMgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMGQxYzIxZjk5OTFkMTMwOWQwNTdlM2U0MDU2ZDU0N2RmN2Q0MGVjZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE2OjA2OjMxIDIwMTIgKzAxMDAKKworICAgIE1ha2UgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gb2Ygc3RybGNhdCgpIGNvbnNpc3RlbnQuCisKK2NvbW1pdCAwYzNkNGRiYjBhOWNmNWIzNTlmNzBiMmYxOTkxNTQ5NTU1NGY4NDBmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTU6MjM6MTYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogV2luMzI6IHNubXBkOiBSZW1vdmUgZGxtb2QKKworY29tbWl0IDg5M2VjYzk3YjU4NzY2MTA0NWJlY2JlMDlhMzIwYzFiY2JjNzFjN2MKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNDozNjo1OSAyMDEyICswMTAwCisKKyAgICBBZGQgc3RybGNhdCgpIHRvIHRoZSBNU1ZDIGJ1aWxkIGluZnJhc3RydWN0dXJlLgorCitjb21taXQgM2QxMjY0MjJlNjI1NzAyYjlkM2ZhMDY3NmE5N2VjNWNiMjBkOWQxMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE1OjAxOjA2IDIwMTIgKzAxMDAKKworICAgIE1ha2Ugd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggY29uc2lzdGVudCB3aXRoIGl0cyAuaW4gZmlsZQorCitjb21taXQgYWY1M2I3NmMyZmZhNzUxZTM5NThkMGZjNWQ4Mjc5Zjc4YzJjMWMyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE0OjQzOjU1IDIwMTIgKzAxMDAKKworICAgIFNraXAgVDA2NnBhc3Nfc2ltcGxlIGFuZCBUMDY3cGFzc3BlcnNpc3Rfc2ltcGxlIG9uIE1pbkdXCisKK2NvbW1pdCAzNWE5MmU2OTNkMTMzYTViMTFlOWU5YjU5OWRiZjQ3ZWRlZjQ5MzNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMDg6MTY6MzYgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYyBhZ2Fpbiwgd2hpY2ggd2FzIGFkZGVkIGFjY2lkZW50YWxseSB3aGlsZSByZXNvbHZpbmcgbWVyZ2UgY29uZmxpY3RzIChjb21taXQgMWQ3OGY3ZDViNThhZWQyYjUyYzRkMzg2YTdiYTgwYTQ0NzExYmFjYSkKKworY29tbWl0IGE5YjA3M2VhM2I2Y2VkZjcxM2UzMDVlN2IxNWYyOGFlNTdiZmRmMWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNzo0NzoxMSAyMDEyICswMDAwCisKKyAgICBGaXggNjQtYml0IGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCA3ZTg5MGRhZDk1ZjU2NjA2OWVlMjgwMjE1YTRmZWEzZjBlMmUzOTgwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTY6Mzg6NTAgMjAxMiArMDEwMAorCisgICAgQXZvaWQgYSBTSUdTRUdWIGlmIGNwID09IE5VTEwuIFRoaXMgaXMgYSBmb2xsb3ctdXAgZm9yIGNvbW1pdCAwODliY2IzNjBhYTI2NzkwYWQyYThjZWRkZjU4M2I3YmE1ZGRmZDQ4LgorCitjb21taXQgMWY2MjAwY2ZlMWIwYjI3ZWJiMDkzYTE2MDZiNTkyZjllOTY4NGJlOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE1OjUzOjM0IDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgc3RybmNweSgpIGNhbGxzIGludHJvZHVjZWQgaW4gdjUuNgorCitjb21taXQgYzMxMjZiMTQzOTIxZmFiZWFjNDQyMTY2ZWNhNWI1Yjc0MmZkNDJjMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE1OjAyOjM5IDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2UgbW9zdCBzdHJuY3B5KCkgY2FsbHMgaW50cm9kdWNlZCBpbiB2NS41CisKK2NvbW1pdCBiMjRlZTdjOTA5NjU3ZGI0M2JkOGM1ZDhjMDEwNTVjYTA4ODNjOWNmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMDg6NDA6MzkgMjAxMiArMDEwMAorCisgICAgRWxpbWluYXRlIG1vc3Qgc3RybmNweSgpIGFuZCBzdHJuY2F0KCkgY2FsbHMKKyAgICAKKyAgICBVc2luZyBzdHJuY3B5KCkgYW5kIHN0cm5jYXQoKSBpcyBlcnJvciBwcm9uZSAtLSBzZWUgYWxzbworICAgIGh0dHA6Ly93d3cuZ3JhdGlzb2Z0LnVzL3RvZGQvcGFwZXJzL3N0cmxjcHkuaHRtbC4gSGVuY2UgcmVwbGFjZQorICAgIGFsbCBpbnZvY2F0aW9ucyBvZiBzdHJuY3B5KCkgYW5kIHN0cm5jYXQoKS4gUmVwbGFjZQorICAgIHN0cm5jcHkoZHN0LCBzcmMsIG4pIGNhbGxzIGJ5OgorICAgICogc3RybGNweShkc3QsIHNyYywgbikgaWYgdGhlIGdvYWwgd2FzIHRvIGF2b2lkIG91dHB1dCBidWZmZXIgb3ZlcmZsb3cuCisgICAgKiBzcHJpbnRmKGRzdCwgIiUuKnMiLCBuLCBzcmMpIHRvIGNvcHkgYSBwcmVmaXggb2Ygc3JjIHRvIGRzdCBvciBpZiBzcmMgaXMKKyAgICAgICAgbm90ICdcMCctdGVybWluYXRlZC4KKyAgICAqIG1lbWNweShkc3QsIHNyYywgbikgaWYgc3RybGVuKHNyYykgPj0gbiBhbmQgbiA8IHNpemUgb2YgZHN0LgorICAgICogc3RyY3B5KGRzdCwgc3JjKSBpZiBuID4gc3RybGVuKHNyYykgYW5kIG4gPCBzaXplIG9mIGRzdC4KKworY29tbWl0IDZkOTViYzQxNDk0NzI5MzEwMDU0NzVjMzBhNTQxZmVkNTUzNGRhMzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxMToxOToxNiAyMDEyICswMTAwCisKKyAgICBGaXggd2FybmluZ3MgdHJpZ2dlcmVkIGR1cmluZyBjb21waWxhdGlvbiBvZiB0aGUgUGVybCB4cyBzb3VyY2UgZmlsZXMKKworY29tbWl0IGJhZDA2MDBmNmVjOTQ0ZWY4NDU1ZTMyN2NlNzg0YjliMDdkMjQ3YzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxMDowMDoxMyAyMDEyICswMTAwCisKKyAgICBBZGQgY29uZmlndXJlIHRlc3QgZm9yIHNvY2thZGRyX3VuLnN1bl9wYXRoIHN1Y2ggdGhhdCB0aGUgY29tMnNlYyB0ZXN0IGlzIHJ1bgorCitjb21taXQgOTJhMzJhYzQ4NjZhNWVkYzdmMzQ3ZDM3OTQyYmYwMjhkZTAyNzYyZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDEwOjAwOjI5IDIwMTIgKzAxMDAKKworICAgIEdldCByaWQgb2YgYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCA4M2U0YzBlMzA0ZjYxN2NjYWM2NjEwZWRkNzRkMTcwNjc5N2JiZjUyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMDk6MTU6MzcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIGEgdGVzdCBmb3Igc2Vfc3RvcmVfbGlzdCgpCisKK2NvbW1pdCA0ZmFlNTg1MjEwM2VjMzg5M2FkNDg4YmMwZDkwNWNhNjkxNDU5NWVmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMDk6MTc6MTUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2ltcGxpZnkgdGhlIHNlX3N0b3JlX2VudW1fbGlzdCgpIGltcGxlbWVudGF0aW9uCisKK2NvbW1pdCBiMzIyMmJiMjc1ZjJmMjM0NmUwZmQwNDc4YWZhMmVmYjYwMDc3M2U1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMDk6MTY6NDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRGVjbGFyZSAidHlwZSIgYXJndW1lbnQgb2Ygc2Vfc3RvcmVfbGlzdCgpIC8gc2Vfc3RvcmVfc2xpc3QoKSAvIHNlX3N0b3JlX2VudW1fbGlzdCgpIGNvbnN0CisKK2NvbW1pdCAwMjJmODQwZmJmY2IwZTI2YjA4ZjBlNTU3MjgyMzFmNjExNDk1ODAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTk6NTU6NTYgMjAxMiArMDAwMAorCisgICAgQXZvaWQgdGhhdCBWYWxncmluZCBjb21wbGFpbnMgYWJvdXQgc2VuZGluZyBVRFAgZGF0YQorCitjb21taXQgNjcyYTgwOWMyMjhlOTU1MGI5OWI4OTEwYmU3NWQwYjE2MTk4NTQwMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE3OjMzOjA5IDIwMTIgKzAwMDAKKworICAgIEZpeCBhIDY0LWJpdCBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAyNGZmMjYwYWQ4OWNlMmFhMzYxYTU1YzdjNzJlOTE2MDMxZGVmZTM1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTc6MTE6MjQgMjAxMiArMDEwMAorCisgICAgQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Ygc25tcF9zZXRfdmFyX3ZhbHVlKCkgYW5kIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSgpIGZyb20gdV9jaGFyKiB0byB2b2lkKiwgbGlrZSBvbiBtb3JlIHJlY2VudCBicmFuY2hlcworCitjb21taXQgYzZjYTczN2ZiNDZmOTBhNGJkYTVkNDM3MzRhYWMzNGU4MzdhMDVmNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAxMyAxOTowNzozNyAyMDEwICswMDAwCisKKyAgICBCYWNrcG9ydCBjb21taXQgZjUwNGNlMmQ3NGE0YmM4OGY2OGNjOTUxNWZhNzA1MzM3M2NiMTViNS4KKyAgICAoRml4ZWQgbW9zdCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZSBjb2RlIGluIHRoZSBwZXJsIHN1YmRpcmVjdG9yeS4gTm90ZTogdGhlc2UgY2hhbmdlcyBtYXkgY29udGFpbiBzb21lIHJlYWwgYnVnIGZpeGVzLikKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCXBlcmwvQVNOL0FTTi54cworICAgIAlwZXJsL09JRC9PSUQueHMKKyAgICAJcGVybC9TTk1QL1NOTVAueHMKKyAgICAJcGVybC9hZ2VudC9hZ2VudC54cworCitjb21taXQgZDIxMmRjOTg0ZWMzNGU0ZDIzMDYyNWU0NmU1OGIwYzYyOGE1MGRmNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE2OjQ2OjQ5IDIwMTIgKzAxMDAKKworICAgIFNOTVAueHMgY29tcGlsZXIgd2FybmluZyBmaXhlcworCitjb21taXQgYmFjZWViYjEwZDhjYWY1ZGI2M2NjMzY5MzVmZWQ2NWVlOTMxMDI5ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE2OjIyOjQ0IDIwMTIgKzAxMDAKKworICAgIEFkZCBkZWNsYXJhdGlvbiBmb3Igc2h1dGRvd25fc25tcE5vdGlmeVRhYmxlKCkKKworY29tbWl0IGY3Zjk2NmFiZDZkMjg0OWIxMzMxMjUyYWZlNWM0NzNlNWM0MGIzMmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNDoyNDozMyAyMDEyICswMTAwCisKKyAgICBGaXggZm9ybWF0IHNwZWNpZmljYXRpb24gbWlzbWF0Y2hlcy4KKworY29tbWl0IDMwM2MwMTViY2ZlOWFmMGIxNTRlOTg4MWM3YjRmNDQ5ZTA4ZjMwYmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXkgNiAyMjowNjoyMyAyMDA5ICswMDAwCisKKyAgICBCYWNrcG9ydCBjb21taXQgZDNlYjJiNWNlZDIyYTg0ODAwNTNjZTQzYWNmOTczOTcyOTA1NTQwNAorICAgIChTcHJpbmtsZSBzb21lIGNvbnN0LW5lc3Mgd2hlcmUgcmVsZXZhbnQgLyBmaXggZm9ybWF0IHN0cmluZyBtaXNtYXRjaGVzLAorICAgIE5pZWxzIEJhZ2dlc2VuLCBNYXkgMjAwOSkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L2FnZW50X3N5c09SVGFibGUuYworICAgIAlhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMKKyAgICAJaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisgICAgCWluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisKK2NvbW1pdCBkOTViNDA0MDY5MTZiZGE1YjQ4YjVhNjEzMWJlYzI3Yjg2NmIwYTc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDYgMjE6NTk6MjAgMjAwOSArMDAwMAorCisgICAgQmFja3BvcnQgYTJhNzMxNmMzMTBmMGZjYzM3Mjg2NzNmYTA0NzA1MWMyM2I3MTk2MAorICAgIChUcml2aWFsIHdhcm5pbmcgZml4ZXMsIE5pZWxzIEJhZ2dlc2VuLCBNYXkgMjAwOSkuCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jCisgICAgCWFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYworICAgIAlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jCisgICAgCWFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMKKyAgICAJYWdlbnQvc25tcGQuYworICAgIAlzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYworCitjb21taXQgZDg2YzQ3ZjAwM2ZkYzE5MmJjZTdiNDZhYzRmMDZiMDllMzg3YzEyYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMzoyOTowOCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBhIHR5cG8KKworY29tbWl0IGJlZTRkNzljZjRlYjdlMGE0NTM5N2Y1OWI1Mjk4ZGE2MzNhOGUxYmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTM6MTQ6NTcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgcmVhZGluZyBwYXN0IGVuZCBvZiBidWZmZXIuCisKK2NvbW1pdCAzZGMwZTAwYTJmZDhlMzRmZTFhZTMzZWNhYmYzNmUxNDY0NjBhMzFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEyOjQwOjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGxhcmdlICd0b2tlbicgaXMgdXNlZC4KKworY29tbWl0IGIzYzQ5ODI1NDJlMGFiMTUxZmIzODg0NzU0Y2RmYmNiNDcyZGE1MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTI6Mjg6NTIgMjAxMiArMDEwMAorCisgICAgRml4ZWQgb2ZmLWJ5LW9uZSBtZW1zZXQuCisKK2NvbW1pdCAwZjUzNjk1MDQ0ZGQzZjBjMzUwNzc1M2UzZjhjMjlkOTdlOTY4NzJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDMgMjE6Mzg6MjYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQsIHBlcmw6IEVsaW1pbmF0ZSBkZWFkIHZhcmlhYmxlcworICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jCisgICAgCWFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCisgICAgCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYworICAgIAlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYworICAgIAlhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCisgICAgCWFwcHMvc25tcHRscy5jCisgICAgCWFwcHMvc25tcHRyYXBkX2xvZy5jCisgICAgCXNubXBsaWIvZGlyX3V0aWxzLmMKKyAgICAJc25tcGxpYi9zbm1wX2NsaWVudC5jCisgICAgCXNubXBsaWIvc25tcF9vcGVuc3NsLmMKKyAgICAJc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYworCitjb21taXQgMDE1MzgwNWM5OWI5MTk3MzY1OTM1YzVkMTFhZTljM2Q0YmZhYTBmMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA5OjQ4OjQxIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIHNldC1idXQtbm90LXVzZWQgd2FybmluZworCitjb21taXQgM2Y4ODg1ZmJlZTk0MDc3NDhmYzJmMDU3MzcyOGExMWJhMmJjMDIzYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBcHIgMjggMDU6NTE6MTMgMjAwOSArMDAwMAorCisgICAgUmV0dXJuIGEgdmFsdWUgZnJvbSBzcHJpbnRfcmVhbGxvY192YWx1ZSBldmVuIGlmIG5vIHN1YnRyZWUgaXMgbG9jYXRlZC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxNzU3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGIxZWFhZjMwMjM2OWZkNDU1MmU4ZmVlN2I2YTgwNTA5MWVjMGE5YjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6Mzg6NTEgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2YgZmluZF9zZWNfbW9kKCkgcmV0dXJuIHZhbHVlLgorCitjb21taXQgYWVlNGU4OTVmZTNiZDVmNGE2MWUzNDI3NWJmY2EwMzY4YjU2MDU1NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMTozMToyMiAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBvZiBzbm1wX3Nlc3NfdHJhbnNwb3J0KCkgcmV0dXJuIHZhbHVlLgorCitjb21taXQgNWQxZDBhNzQ0YWIzMGM4ZTY0NWMzYjg1MDZjYmJkMmNjZWIzZDI3NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMTowNDo0OCAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBvZiBuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IDI5OWVhOWE4OWMzZjE3NThhNzc0OGJiOWIzNDExZjYyZjJjNzBmODgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTA6NTQ6NTUgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2YgZm9wZW4oKSByZXR1cm4gdmFsdWUsIGp1c3QgaW4gY2FzZSBvZiBzb21lIHJhY2UuCisKK2NvbW1pdCA5MGYxYWU2NzU3OTE3NDgxNjM2ZWVmNzcxMDBjYWVlYjUzZWRmZTAxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDMgMTA6MDY6NTYgMjAxMiArMDEwMAorCisgICAgQWRkIHN0cmxjYXQuYy4gU291cmNlOiBodHRwOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9jdnN3ZWIuY2dpL3NyYy9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jLgorCitjb21taXQgMDg5YmNiMzYwYWEyNjc5MGFkMmE4Y2VkZGY1ODNiN2JhNWRkZmQ0OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDo1MDo1NiAyMDEyICswMTAwCisKKyAgICBBZGRlZCBzdHJyY2hyIHJldHVybiB2YWx1ZSBjaGVjaywganVzdCB0byBiZSBzdXJlLgorCitjb21taXQgMTk5YTA1MTFmNmViMGVmM2ZmMWQ5ZjkyMmI3OTBhYjY3ZGZkZTAxZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjMxOjI2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBzbXV4OiBzaW1wbGlmeSBzbXV4X2xpc3RfZGV0YWNoKCkKKworY29tbWl0IGQ4ODM1NzNhYTczZTBmNWZjMTg4YWNlZGVlNjQ1MWY5NWRhZTkwMGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDoyMzowNiAyMDEyICswMTAwCisKKyAgICBGaXggYSBjb21waWxlciB3YXJuaW5nIGludHJvZHVjZWQgYnkgY29tbWl0IGE4MDlmZTUwNzVjOWYzNzQ3MTVmN2QxYTY4Mjk0OWEwNzMwMTcyYzEuCisKK2NvbW1pdCA3YjdhM2ViMjUwMDUyN2VhYTE2OTkyODdhNmNhNmZjYzRjYzJlMDhhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMDk6NDA6MDIgMjAxMiArMDEwMAorCisgICAgRml4IGEgYnVpbGQgZXJyb3IgY2F1c2VkIGJ5IGNvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxLgorCitjb21taXQgMmI2YzExOWZlZDQ4NDhkYTY2NjNjMTFmMGMyY2JkYzI5OTIxYjVjNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNTo1MToxMCAyMDEyICswMTAwCisKKyAgICBDaGVjayBmb3IgbmV0c25tcF9kc19nZXRfaW50KCkgZXJyb3JzLgorCitjb21taXQgNmNlNTM2MGNhYTRjOWRlNTFhZGU1Nzg3OWU4M2Y5NmJkMDRiNGM1YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNTo0MjoyMyAyMDEyICswMTAwCisKKyAgICBDaGVjayBmb3IgbWlzc2luZyB2aWV3LgorCitjb21taXQgYjNiYzU0YmVkMzE2OTBhODVkZjJhY2ZiZjMyOTZkYTkzYTllODliNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNToyMzoxNyAyMDEyICswMTAwCisKKyAgICBDaGVjayBzb2NrZXQoKSByZXN1bHQuCisgICAgQWxzbyBjbG9zZSB0aGUgc29ja2V0IG9uIGVycm9yLgorCitjb21taXQgOTIwNzVmNTFjZDQ1YTM4Y2EzODc2MGIzZmZlODJlMTY1NTllOWMyZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNToxODoyNiAyMDEyICswMTAwCisKKyAgICBDaGVjayBvcGVuKCkgcmVzdWx0LgorCitjb21taXQgNjY2NWQ1ZmUyZmM1NjlkNmZhODU0ZDFkNzhlMzQ3YmJhYzY5ZTA3MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDoyMjoyMiAyMDEyICswMTAwCisKKyAgICBGaXhlZCBtaXNzaW5nIGJyZWFrLgorCitjb21taXQgYTY2NDhjNTQ1M2UxZWY4ZGFjNTdhMzhlZmNjMDBjY2U1M2JmOWU0ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDoyMDoyNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBtaXNzaW5nIGJyZWFrLgorCitjb21taXQgZDY4ZGNhZTBmMThkNTU0NTcxYWVmMzIxOTQ0YTUyOTA1NDhkZGU4NgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDoxNjoxMSAyMDEyICswMTAwCisKKyAgICBBZGRlZCAnZmFsbHRocm91Z2gnIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgZmI2ZjgwYzBmZTNiYTM2ZTU2ZjViOTExYTQ3ZTNmNmYzMmJhMjY2ZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDoxNDowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBleGl0IGNvZGUgb2YgZW5jb2RlX2tleWNoYW5nZSB3aXRoIHdyb25nIGFyZ3VtZW50cy4KKyAgICBBbHNvIGFkZGVkIGEgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCAzMTMwZTI0ZmRjMjMyNDY0ZGQ3YmIyMTZmNDZjYWZhMmUwZTc3NWE2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjA5OjU0IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIG1pc3NpbmcgYnJlYWsKKworY29tbWl0IDE4YzEyNmE5NTY1Y2I0ZDY5ZDc1MTNiOTQ0YTIxMDU1ODgwNDVkMzUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MDc6MjkgMjAxMiArMDEwMAorCisgICAgQWRkZWQgJ2ZhbGx0aHJvdWdoJyBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IDZkMzFjODIwNzBhMmM2OGZlM2M1MTllOWQ1NmZhMjc3OTU1NGQwMWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MDE6NTMgMjAxMiArMDEwMAorCisgICAgQWRkZWQgJ2ZhbGx0aHJvdWdoJyBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IGRjNmYwZTJlNTQ5YjRjZDA2MWViYzE5MDA4NGIxZmM3N2E1NWY0MGYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTM6MzI6NTkgMjAxMiArMDEwMAorCisgICAgRml4ZWQgd3Jvbmcgb3BlcmF0b3IKKworY29tbWl0IGRhYjMyODY3ZWQwYjk5MzAxZWZkN2I4ZDg1MmFkMTI4OGExODRiZTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTM6MzA6MzMgMjAxMiArMDEwMAorCisgICAgRml4ZWQgUVVJVEZVTiB1c2FnZS4KKworY29tbWl0IGIxYTJiY2Y2NDYxNWViNjZiYzI0ZDViZTQ5NTBlNDUwMTI5NjIwNDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTM6MTg6MDMgMjAxMiArMDEwMAorCisgICAgRml4ZWQgd3Jvbmcgb3BlcmF0b3IKKworY29tbWl0IGIyYjFjODUxYjk0ZmVkMzdjMzg2ZWFhMWJmZWFkNWM3NzY5NmUzZWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTM6MTQ6NTIgMjAxMiArMDEwMAorCisgICAgRml4ZWQgd3Jvbmcgb3BlcmF0b3IKKworY29tbWl0IGE4MDlmZTUwNzVjOWYzNzQ3MTVmN2QxYTY4Mjk0OWEwNzMwMTcyYzEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTA6NTg6NDYgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgZm9yIGZhaWxlZCByZWdpc3Rlcl9taWIuCisKK2NvbW1pdCA1OTQ5ZjA1NWMxNmFlNjUwNjE1YWFlN2ExZmVlM2YyZDdiMTZkOTQwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjI5OjU5IDIwMTIgKzAxMDAKKworICAgIE1ha2UgTUlCIGZpbGUgcGFyc2luZyBhbmQgZGV0ZWN0aW9uIG1vcmUgc3RyaWN0IC0gTEFCRUwgaXMgcmVxdWlyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBNSUIgZmlsZXMuCisKK2NvbW1pdCBlNGI2NzM2ODNjNjhiYThiM2FiYzA0MGI5MTI1ZWMzMDQ2NDNjYzdjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSmFuIDEgMjM6MDA6MjQgMjAxMiArMDEwMAorCisgICAgQXNzdW1lIHRoYXQgbGliZGwgbWlnaHQgYmUgaW4gQUdFTlRMSUJTIG9yIFNOTVBMSUJTIHNvIHByZWFkZCB0aGVtLgorCitjb21taXQgYjEzYzFlNTdiZWRiYTc5YjgwNjEwM2M3NGYxOTIxZDUzYTcwNmIzOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEphbiAxIDIyOjU1OjA2IDIwMTIgKzAxMDAKKworICAgIERvIG5vdCByZXF1aXJlIHVjZC1zbm1wL2RsbW9kIHVubGVzcyBpdCB3aWxsIHdvcmsuCisKK2NvbW1pdCAyN2RjZWEwZDVmODAxZGY0OTRhYjJjYjVjNWMwZWJlNTRlYjBkY2QzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDMxIDE0OjQ4OjI5IDIwMTEgKzAxMDAKKworICAgIEFkanVzdCBwYXRocyBmb3IgdGVzdCByZXN0cnVjdHVyZQorCitjb21taXQgMTRiNjBlODVhMWI1NzAwZTkzZDEyNmUyZjI5MWQ1YzQ4NWYzNGUzNgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxNDoxNDoyOSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGxtb2QgbW9kdWxlIGZhaWwgcmF0aGVyIHRoYW4gZ2VuZXJhdGUgYSBkdW1teSBtb2R1bGUgaWYgdGhlIGRsb3BlbiBmdW5jdGlvbiBpc24ndCBhdmFpbGFibGUuCisKK2NvbW1pdCA5OGE5NzUzOGZjMWU5ZmY0NmI2MGQ1ZDk2OTM0NzQ0NDU3ODM3OGMwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDMxIDEzOjM1OjEzIDIwMTEgKzAxMDAKKworICAgIEFkanVzdCB0aGUgcGF0aHMgdG8gc3VwcG9ydCB0ZXN0aW5nIGV2ZW4gaWYgYnVpbGRkaXIgIT0gc3JjZGlyCisKK2NvbW1pdCA4OGYwYWYzY2ZiOTE2YWU1ODYzY2MyOTg2MDcxZDQzNWYyMGMzMDY0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDMxIDExOjM3OjUyIDIwMTEgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlcyAncCcgYW5kICdsZW4nLgorCitjb21taXQgMDgxNWE3NTM2Yzc2ZjdlNDg0MjYzODY4M2Y2NzQ4OTRhMWE4Y2UxNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjkgMTQ6NDI6NTQgMjAxMSArMDAwMAorCisgICAgUmVwb3J0IHByb2JsZW1zIHdpdGggU2V0VW5kbyBwcm9jZXNzaW5nCisgICAgTWlzc2VkIHdoZW4gYXBwbHlpbmcgcGF0Y2ggIzM0NDU0NDAKKworY29tbWl0IGViMmFiMjM3NDJjYTg2YzBiODljY2ZlOTFlYjZlYTM3NGJmM2FjYzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDI5IDE0OjM3OjMxIDIwMTEgKzAwMDAKKworICAgIENoZWNrIGZvciB0aGUgZXhwZWN0ZWQgZXJyb3IgKEVQSVBFKSBvbiBjbG9zdXJlLgorICAgIE1pc3NlZCB3aGVuIGFwcGx5aW5nIHBhdGNoICMzNDQ3NDQ0CisKK2NvbW1pdCBhYWMxMGJjNGYwNTNjMDE0ZjM4MmQ2NTkzZmMzMmFiOTVlMGIxYTU3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyOSAxMjo1OTo1MiAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzNDYzNzY3OiBIYW5kbGUgcGFyc2luZyBzdWJpZGVudGlmaWVycyA+IDJeMzEKKworY29tbWl0IGJiYzAyZTM2ZTkwYzFhYWI3ODk4NTYyZjk2M2Y1Y2FkYjI2ZTEwYmQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgRGVjIDI4IDE3OjE1OjE2IDIwMTEgKzAwMDAKKworICAgIE1vdmUgcGFzcy9wYXNzX3BlcnNpc3QgdGVzdHMgdG8gdGhlIG5ldyBsb2NhdGlvbgorCitjb21taXQgMzg5OGMwNGZkNmY4OTg2NzA2MmZkZmViZjM2ODU3YWI2MTljMDQ1MAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBEZWMgMjggMTY6NTM6MjQgMjAxMSArMDAwMAorCisgICAgQWRkIHRlc3RzIGZvciBwYXNzL3Bhc3NfcGVyc2lzdCwgc3VwcGxpZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IGQ1ZWUzZjBhMWE2M2JiMTc1MmM3NGNiY2E1NWFhM2Q0MGJmOWJmMTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDIxOjU4OjUxIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDQ3NDQ0OiBGaXggU0lHX1BJUEUgaGFuZGxpbmcKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgMmExN2IzNzQzMGMxODUyOTk4YzM1ODhlNTQ3ZDdlYjYxYzA2ZGE3MQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMjE6NDU6MzggMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogYWdlbnR4OiBQQVRDSEVTOiAzNDQ1NDQwOiBNb3JlIHJvYnVzdCBoYW5kbGluZyBvZiBBZ2VudFggZXJyb3JzCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IGZlNThhMGU1ZjRkNGUyZTJlY2JjYjQ3MzgyYjA4Y2IxZTRkZjM1MmMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE4OjE2OjIzIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDM0NTY3NzA6IEhhbmRsZSAob2Jzb2xldGUpIFVJbnRlZ2VyIHR5cGUgcHJvcGVybHkKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgMWJlOGNmMDhhNjdhOTE4NTVmZWUxZWM0YTJkOGUwODdjNzgxMjQ1NgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTg6MDQ6MTAgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogYWdlbnR4OiBQQVRDSEVTOiAzNDQ1NDM3OiBMb2cgQWdlbnRYIGRpc2Nvbm5lY3Rpb25zCisgICAgKGluIGxpbmUgd2l0aCBjb25uZWN0aW9ucykgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDA2ODAzNzI4OTEwN2ZhYTJiYTNmNWNkMmZiMDBjMTk0OTRiYjlhMDQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE3OjI3OjQ2IDIwMTEgKzAwMDAKKworICAgIEhhbmRsZSBhbnkgR0VUTkVYVCByZXF1ZXN0IE9JRCwgbm90IGp1c3QgYSBzaW1wbGUgd2Fsay4KKworY29tbWl0IGE3NGZhNTI4OTgzMTIzZDM1NWE4Y2RjYWE3N2RkNGViNGI4YzY5NTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE3OjAwOjE4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHBhc3M6IFBBVENIRVM6IDM0OTM5NDogQnJpbmcgcGFzc19wZXJzaXN0dGVzdCBzY3JpcHQgaW50byBsaW5lIHdpdGggcGFzc3Rlc3QqCisgICAgKGkuZS4gdXNpbmcgdGhlIGxlZ2l0aW1hdGUgc3RydWN0dXJlIG9mIE5FVC1TTk1QLVBBU1MtTUlCKQorICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBiYmU2NDllYmZhNjFlYTIyMzk5MTcwYjM2Yjk5ZGIzMGExZGU4MDEyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNjo1NDozOCAyMDExICswMDAwCisKKyAgICBSZXdvcmsgInBhc3N0ZXN0IiBleGFtcGxlIHRvIGZ1bGx5IHZhbGlkYXRlIEdFVE5FWFQgcmVxdWVzdHMKKyAgICBhbmQgdXNlIGEgbGVnaXRpbWF0ZSBzdHJ1Y3R1cmUgZm9yIG91dHB1dC4gIEJhY2twb3J0IG9mIFNWTgorICAgIHJldmlzaW9uIDE3NjMyICh3aGljaCB1cGRhdGVkICdwYXNzdGVzdC5wbCcgYnV0IG1pc3NlZCAncGFzc3Rlc3QnKQorICAgIENvcnJlY3QgaW4gYnJhbmNoZXMgNS41IGFuZCBhYm92ZQorCitjb21taXQgODJkMDZjNzI0N2IyMmM4YjAxZDQ1YmY1NTA0MWQyZjFlNjQyN2Q0OQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTM6NDU6MTggMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM0NDc2NzE6IEZpeCBvdmVycmlkZSBoYW5kbGluZyBvZiBPSUQgdmFsdWVzCisgICAgUGF0Y2ggc3VwcGxpZWQgYnkgUGhpbGxpcCBPJ0Rvbm5lbGwKKworY29tbWl0IGJhNGE5Y2U1MWM5NjAwZjlmZGExNjhmMWU2ZWZmMzJhMWRiNjNjYjkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEzOjI0OjI2IDIwMTEgKzAwMDAKKworICAgIFR3ZWFrIC0tZGlzYWJsZS1zbm1wLXNldCBjaGFuZ2VzCisKK2NvbW1pdCA4MjdjOGIyODgzMDE3MWZhYTljNjFkNTNlZmNhOWViNjYwMDU2MWMyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMToyNTo0MyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDM0MzM4NDY6IEZpeCBmb3IgdXNlIHdpdGggcHl0aG9uIDIuNAorCitjb21taXQgZjk4YTU0YTk5Y2FmN2I0NmIxMDBhOTIwZGI5NDJjYmNhOWM0MzkyNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTA6MTA6MzYgMjAxMSArMDAwMAorCisgICAgU2tpcCBTRVQtYmFzZWQgdGVzdHMgd2hlbiBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0CisKK2NvbW1pdCAyMzBkZjE0Zjk0YzM3MzZmZjM0Mzc5YTRlMjgxZWVhMzUzYjQ3ZjgwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gRGVjIDI2IDIzOjM0OjIzIDIwMTEgKzAxMDAKKworICAgIERvIG5vdCBhc3NpZ24gdG1TdGF0ZVJlZiB0d2ljZQorCitjb21taXQgYzk2YjNiNGQ4NTMwYWQ1ZTBlZmIwM2YyNGRhYjVlNWYxYTQ2MDAzMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyNSAxMToxODoyMSAyMDExICswMTAwCisKKyAgICBDb3JyZWN0IHVzZS1hZnRlci1mcmVlLgorCitjb21taXQgYzU5NzhjODljZGUyNDQwZjRkMjBkYWRiYzlkMWRkOGRiNTYyZDU2ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAyNSAxMToxNTo0NCAyMDExICswMTAwCisKKyAgICBDb3JyZWN0IGRvdWJsZS1mcmVlLgorICAgIAorICAgIG5ldHNubXBfdGxzdG1BZGRyX2FkZCB0YWtlcyBvd25lcnNoaXAgb2YgaXQncyBhcmd1bWVudCBzbyBjYWxsaW5nIGZyZWUgb24gdGhlCisgICAgYXJndW1lbnQgb24gZmFpbHVyZSBpcyBpbmNvcnJlY3QuCisKK2NvbW1pdCBjMTM5Y2ExMjNiNDRiYjNiOWI2YmY5MjFlMTYwOWNjNDVmNjNhNjYwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgU2F0IERlYyAyNCAxNjo1NTozMCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUyAzNDEwMDU5OiBGaXggc3BhcnNlbHkgYXVnbWVudGluZyB0cmlnZ2VyIHRhYmxlcworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisKK2NvbW1pdCBjNGFlMDIxYjJlNjM4NDQzNzA4MWM1NjIzZjM2MGM4ODk2MzkwMTg4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgU2F0IERlYyAyNCAxNjoyOTo1NCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUyAzNDEwMDUwOiBTa2lwIGFscmVhZHktJ3Byb2Nlc3NlZCcgdmFyYmluZHMKKyAgICBCYXNlZCBvbiBtaWIyYyBwYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorCitjb21taXQgYzZhY2NmOGM2NjI1NGZhOGM0ODc2N2VkN2RlYzc5NWRkYWZjNTIyZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6Mjc6MTEgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogbWliMmM6IFBBVENIRVMgMzQxMDA1MDogU2tpcCBhbHJlYWR5LSdwcm9jZXNzZWQnIHZhcmJpbmRzCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKworY29tbWl0IGE2MTgyNmFkOGNhNTQ2NjFkMWQ5MDk3MTI1MDNiZDNhOGIzMmVlZDAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBEZWMgMjIgMTg6MzU6NDYgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKyAgICAKKyAgICBteU1hdGNoIGlzIHVudXNlZCBhcyBubWF0Y2ggaXMgemVybyBhbmQgYWxzbyBzaW5jZSByZWdleEJ1ZmZlciBpcyBjcmVhdGVkCisgICAgd2l0aCBSRUdfTk9TVUIgc2V0LgorCitjb21taXQgYmE0ZmM4MGZlMmNmZDVhNWQ4OTIzMGQ4ZjM3MDNlNGZlMDFlNjAxOQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjIgMTk6MjQ6NDAgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDM0MDIzNzY6IGZyb20gTGVvbmFyZG8gQ2hpcXVpdHRvOiBSZWNvZ25pc2UgUmVpc2VyRlMKKyAgICBBbHNvIG1vdmUgdmFyaW91cyBGU1R5cGUgZGVmaW5pdGlvbnMgdG8gdGhlIGFwcHJvcHJpYXRlIGJsb2NrcworCitjb21taXQgYjVhYzRhMDRkY2Q1NDcwZDA4ZDAzMzIxYWJjZDFlOTgyNjIxZTZlMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6Mzk6NDYgMjAxMSArMDEwMAorCisgICAgRml4ZWQgdW50ZXJtaW5hdGVkIHN0cmluZ3MgYWZ0ZXIgc3RybmNweQorCitjb21taXQgMmIzN2U0ZThmMjUwYTBkODgyMTE5OWE3NGFjM2Y0ZTViN2I3YmFiYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6MzE6NTEgMjAxMSArMDEwMAorCisgICAgRml4ZWQgdW50ZXJtaW5hdGVkIHN0cmluZ3MgYWZ0ZXIgc3RybmNweQorCitjb21taXQgM2QwODM0NTE1NmM0MTkzMzNkZTk2OWYxM2QyMWZjZWM3ZTE4ZTk0ZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6MzI6MjkgMjAxMSArMDEwMAorCisgICAgRml4ZWQgdW50ZXJtaW5hdGVkIHN0cmluZ3MgYWZ0ZXIgc3RybmNweQorCitjb21taXQgY2Q4NTlhZDUxYzRmMThkNWIwZmM2OWRkNjY5ZmNiMDUxYzc5ODk2OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6Mzk6MzMgMjAxMSArMDEwMAorCisgICAgRml4ZWQgd3JvbmcgbWVtbW92ZSBzaXplCisKK2NvbW1pdCAzMGZmNThkMDlkNGM5ZDU0MzhiYjYyMTA1NGZkN2FkN2EyYTU5N2U0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMiAxNDowNzoxOSAyMDExICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBsZW5ndGggb2YgYnVmZmVyIHdoZW4gcHJpbnRpbmcgQVNOX0JJVF9TVFIKKworY29tbWl0IDZjMTQ4N2UxZDM2MGQzZDI2MGEzOWNiMWY1YjE1ZGE5NzgzOTUwNTMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE1OjQ3OjM0IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHBvdGVudGlhbCBmcmVlIG9mIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciBpbiBlcnJvciBjYXNlcworCitjb21taXQgYzc2ZmI5NmY2NWUzM2JhMmZkMjEyYTkyMWU4YzM4NjE1NWVlNWM3YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTU6NDQ6NDYgMjAxMSArMDEwMAorCisgICAgRml4ZWQgdW5pdGlhbGl6ZWQgdmFsdWVzIGluIHVkcFRhYmxlCisKK2NvbW1pdCBjNDQ2MDg2NzliODk3NTExNzZmMjhhMmU1NGQ1MjgyYjQ2ZTJhMDVjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNDo1NjoxMyAyMDExICswMTAwCisKKyAgICBVc2UgY2FsbG9jIGluc3RlYWQgb2YgbWFsbG9jIGFuZCBtYW51YWwgY2xlYXJpbmcKKworY29tbWl0IGEwNWM1Zjk1MTM0NjE4MjRlNzkwM2FlOWFlOWE2YzMzODZlMzM4NzkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE0OjQwOjUwIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHByaW50aW5nIG9mIHVuaXRpYWxpemVkIHZhcmlhYmxlIHdoZW4gc2Vuc29yc19nZXRfbGFiZWwoKSBmYWlscworCitjb21taXQgZTRhNWVkYzcyMzkzYmQzZGU5YmYxMmJjZWJhOWQ4M2JiZjdkZTcwYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTQ6MzE6MjUgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUKKworY29tbWl0IGZhZTJlNWI4MzViOGRmMWVhZTQ3ZTRjZWJiNGViNDA0ZDcyODIzNzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDEzOjMxOjIxIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIGRlcmVmZXJlbmNpbmcgdW5pdGlhbGl6ZWQgaWlkIGluIGVycm9yIGNhc2VzIGFuZCB3aXRoIGRlYnVnIGluZm8gZW5hYmxlZC4KKworY29tbWl0IDlkNThmODFhOTIzOWNmYmNmYzhlYmNlMzY3ZDIxZTliM2RjYjAyOGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDEzOjMzOjMzIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIGRlcmVmZXJlbmNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gZXJyb3IgY2FzZXMKKworY29tbWl0IDBiYzhjMDhlZGVhZTdhZTA5NWYxMTYyNThjMjBhZTU3NjdkNjA2NTIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDEzOjIwOjUyIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHJldHVybmluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlICdzdGF0dXMnIHdoZW4gc3MgPT0gTlVMTAorCitjb21taXQgNzMwNGM1M2NmOGFkZWU4ZWNjZWYxYThmMjY3NTZmYzA3ZjA5ODcyMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxOCAyMzozMTo1MyAyMDExICswMTAwCisKKyAgICBPbiBzb2xhcmlzIDEwIHRlc3QgaW4gL2Jpbi9zaCBkb2Vzbid0IHN1cHBvcnQgdGhlIC1lIHRlc3QuIFJlcGxhY2UgaXQgd2l0aCAtZgorCitjb21taXQgOGNkM2JlNjBkNjkzYzljMzZmZmI5N2QzZDliY2I0OWMxYjRhYmUzNQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAxNyAwODo1MjoyNCAyMDExICswMTAwCisKKyAgICBBdm9pZCByZXBldGl0aW9uIG9mIHRoZSBjb21wbGV4IGV4cHJlc3Npb24gZGV0ZXJtaW5pbmcgaWYgaXQgaXMgcG9zc2libGUgdG8gZ2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgIAorICAgIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byBidWlsZCBvbiBwbGF0Zm9ybXMgbGlrZSBTb2xhcmlzIDEwIHRoYXQgZGVmaW5lCisgICAgSVBfUkVDVkRTVEFERFIgYnV0IGxhY2sgZWl0aGVyIG9mIG1zZ2hkci5tc2dfY29udHJvbCBhbmQgbXNnaGRyLm1zZ19mbGFncy4KKworY29tbWl0IDk1M2YyZTNkNDI1ZWRlM2I4NjNhMmU3Y2NiMGI0YmM4NjI5MjhiNTcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgNSAyMjoxMzowNyAyMDExICswMTAwCisKKyAgICBNb3ZlIHRoZSB1c2Ugb2YgX3NlbmR0byBhbmQgX3JlY3Zmcm9tIGJlbG93IHRoZWlyIGRlZmluaXRpb25zLgorCitjb21taXQgNjhhMTE3M2M0NmNmNzc2MDE0MjZjZjM5MWQ5YTg1Mjc5NGYyMDU3ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE5vdiAyMCAyMDowNToxOCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBTZXBhcmF0ZSBvdXQgdGhlIGNtZXNnIGJ1ZmZlciBzaXplCisKK2NvbW1pdCA0NjFkZDE2ZjNiMjY0NzMyMmNkY2U2MzYzMDgxY2M0NGJhNWE0OWI1CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDI2IDIxOjUxOjAxIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1lcmdlIHRvZ2V0aGVyIHRoZSBMaW51eCBhbmQgKkJTRCB2ZXJzaW9uIG9mIHNyYyBwb3J0IHNlbmRpbmcuCisKK2NvbW1pdCA3YWNjYjY5YmFhMWZjMGI2YTM0MzlkMmU1NDljODZkYTM0NTNiYWQyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjMwOjMxIDIwMTEgKzAxMDAKKworICAgIFVzZSBhIGJhcmUgc3RydWN0IGlvdmVjIGluIGluc3RlYWQgb2YgYSBvbmUgZWxlbWVudCBhcnJheS4KKyAgICAKKyAgICBUaGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0byBtYWtlIF9yZWN2ZnJvbSBtb3JlIHNpbWlsYXIgdG8gX3NlbmR0by4KKworY29tbWl0IDM5ODUyY2Q0Yzg1ZWYyYmZjNzVjZGVhMjgyNTI2MWVlOTNlNzY4YzIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6Mjk6MjAgMjAxMSArMDEwMAorCisgICAgQWRkIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCB0byBnZXRzb2NrbmFtZSBhZnRlciBhbG1vc3QgcmVtb3ZpbmcgaXQuCisKK2NvbW1pdCAxYjI5MmNhMjdlYWI1Y2FhNzNmZWFhYTgzZGM5YzEyYWJjMGYyZTcwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI3OjU5IDIwMTEgKzAxMDAKKworICAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZS4KKworY29tbWl0IGJjODc5NTcxZWNhOTUyMGJjMTMyZjg0MGMzZTY1OWQzNzkzMTQ0ZDcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MjU6MzYgMjAxMSArMDEwMAorCisgICAgSW50cm9kdWNlIHRlbXBvcmFyeSB2YXJpYWJsZXMgdG8gZWFzZSB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgc2VydmVyIGFkZHJlc3MuCisKK2NvbW1pdCBiN2VlYTZjZmZiZDg3MjkzMmNlMmMwNGZlZmI2ZjQzZGUzMzlmMzc0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjE4OjMzIDIwMTEgKzAxMDAKKworICAgIFJlbmFtZSB0aGUgY21lc2dwdHIgdmFyaWFibGUgdG8gY20uCisgICAgCisgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBpbmNyZWFzZSB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIGNvZGUuCisKK2NvbW1pdCAwYTc0NjFlNzI4ODA1YzYyYTFjYWI5ZDg3YmZjNzRjNzkyN2E5ZmNjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjE1OjIyIDIwMTEgKzAxMDAKKworICAgIEZhY3RvciBvdXQgYSBjb21tb24gbG9vcCBpbiByZWN2bXNnIG9wdGlvbiBwcm9jZXNzaW5nLgorCitjb21taXQgYjNjNjI0OGQwMjAxYWIxNjEwODQwZDZkMGU3NDliM2I2YzRhZDc5MgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxMzo0MyAyMDExICswMTAwCisKKyAgICBVbmlmeSB0aGUgc3RydWN0dXJlIG9mIExpbnV4IGFuZCBCU0QgcmVjdm1zZyBvcHRpb24gcGFyc2luZyBzb21ld2hhdC4KKworY29tbWl0IDM1NjQwMGQ2MjkwYTQyM2I1MmViZWVhNWE1ZTk3NmZiMTViYjczYjQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MDQ6NTYgMjAxMSArMDEwMAorCisgICAgVXNlIENNU0dfREFUQSBvbiB0aGUgcmVzdWx0IG9mIENNU0dfRklSU1QvTkVYVEhEUiwgbm90IG9uIHRoZSBidWZmZXIuCisKK2NvbW1pdCAzYjM1MTcwOGM2MmRlNDZhYTFiOTBlZDIzMmNmZDhjN2M1YjAyMjMxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMTI6MDA6MzIgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIGEgY2FzdAorCitjb21taXQgZGU5MjUwZDlkYWU5NzI3YTZjYzdmNjQ3Njg4ZGRkZjFiODU5NzEyOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDExOjU4OjA0IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHNwcmludF9taWJfb2lkKCkgdHJlYXQgT0lEIGNvbXBvbmVudHMgYXMgdW5zaWduZWQgaW5zdGVhZCBvZiBzaWduZWQgaW50ZWdlcnMKKworY29tbWl0IDBlMzNiM2I2ZDU4NTRhNGJhYzE1ZDRlYTVlMDE2YzUzZDE2MWQwY2QKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAxMDowMjoyOCAyMDExICswMTAwCisKKyAgICBGaXggcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgYjdlNTBkNWY5YTY3NTU5ODJkMmFmMzE5MTQ3M2NiMzQ2NDNiYzAzZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDA4OjM3OjIyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFJlZHVjZSBvdmVyaGVhZCBvZiBjb25maWcgZmlsZSBwYXJzaW5nCisKK2NvbW1pdCA3M2M5ZWU0MmQyOGFmZTJlMTA3YTdkNjYxNmI2ZDAxMTg5MGMzNmVhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMDk6MDk6NTkgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDNkYjk3OTYyYjM3ZWIxMmQyNTRkNjFlNmJlMjM0YjA2YTM5MWM4YmIKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBEZWMgOCAwNzo0Mzo0NSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzQ1Mzg2ODogZnJvbSAiQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+IjogRmFjdG9yIGNvbW1vbiBjb2RlIGludG8gcGFzc19jb21tb24KKyAgICAKKyAgICBNb3ZlIHRoZSBjb2RlIGZvciBwb3JtYXR0aW5nIGFuZCBwcmludGluZyB2YWx1ZXMgZnJvbSBwYXNzIGFuZCBwYXNzX3BlcnNpc3QKKyAgICBpbnRvIHBhc3NfY29tbW9uLgorCitjb21taXQgYjY1NjhjODNmMTc1NmU5YTY1NDM0ZWRlZWViNDBkMjNkZGJiYjY1MgorQXV0aG9yOiBjY2NoaXUgPGNjY2hpdUBzb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgNyAxNjoyNToyNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NTIwNjk6IEZpeCBzbm1wdHJhcF9vaWQgZGVjbGFyYXRpb24gaW4gbWliMmMgZ2VuZXJhdGVkIGNvZGUKKyAgICAKKyAgICBUaGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCBjb25zaWRlcmFibGUgdGltZSBhZ28uIEl0IGRpZCBhbHJlYWR5IGV4aXN0IGF0IHRoZQorICAgIHRpbWUgdGhlIDUuNiBicmFuY2ggd2FzIGNyZWF0ZWQgKHNlZSBhbHNvIGNvbW1pdAorICAgIDBlYzA4OGFmYTI3Y2ZkYTRlNmVhNzhhYWU3Y2ZjNTUwNzU2NGVkZGUpLgorCitjb21taXQgZDQ5NGRiNjRjMjA4YjRkYzYyODEzMTMyZjg4NjNiZDVjMWEzOWQ3NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDEwOjM4OjE3IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogRWxpbWluYXRlIGFuIHVudXNlZCB2YXJpYWJsZSAoTm93KQorCitjb21taXQgMjhmMjU2MWJjMjkzNWQ4ZTFjYmY0NmQyODIwMTU4MTczZTdhNGNmNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDEwOjM3OjExIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogTW92ZSB0aGUgbWFpbiBsb29wIGNvZGUgaW50byBhIG5ldyBmdW5jdGlvbgorCitjb21taXQgMzk2ZTEyMmRkYzQyYTkxNmYwNmEwMjg4NGMwZThhMjU4ZWRiZTIzOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDA5OjMyOjE2IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYXRjaCBlYWNoIGdldHB3bmFtKCkvZ2V0cHd1aWQoKSBjYWxsIHdpdGggYW4gZW5kcHdlbnQoKSBjYWxsIGFuZCBlYWNoIGdldGdyZW50KCkgY2FsbCB3aXRoIGFuIGVuZGdyZW50KCkgY2FsbC4KKworY29tbWl0IDNlZmVmYmMwMDI0Mzk5Nzg2ZjhiNjhiMWU5M2IwYThmZGRkZGM3ZGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDo0MTowMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFJlbW92ZSBzdXBlcmZsdW91cyBjYXN0cworCitjb21taXQgN2YwNWRhYThlMGUwZjUzM2IwZjEyYTNlMWNmMDc2NDE1MTk5MDlkNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDExOjU4OjMyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEJVRzogMzQ0NDkzOTogQlVHOiAxNzk2ODg2OiBzbm1wbGliOiBBdm9pZCB0aGF0IHNwcmludF9yZWFsbG9jX29jdGV0X3N0cmluZygpIGVtYmVkcyB1bnByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgb3IgYmluYXJ5IHplcm9lcyBpbiBpdHMgb3V0cHV0LiBUaGlzIGJlaGF2aW9yIGNvdWxkIGNhdXNlIHRydW5jYXRlZCBvdXRwdXQgaW4gc25tcHRyYXBkLgorCitjb21taXQgZGI4ZjU1OGZkMmYzYjdjMTA5ZWEzYTFjMjEzM2I3NWI2ZjhjYjJhZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDEwOjA0OjQxIDIwMTEgKzAxMDAKKworICAgIENvbXBpbGVyIHdhcm5pbmcgZml4OiBwYXNzIHVuc2lnbmVkIGNoYXJzIHRvIGlzcHJpbnQoKSBpbnN0ZWFkIG9mIHNpZ25lZCBjaGFycy4KKworY29tbWl0IDgwMGRjMTAyOGU3ZTBjZDhjYzE0ZDg0ZGQzMTcyM2Q0N2FjMDczZGIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBEZWMgMSAxMDoxODo1OCAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSBoaW50IHZhcmlhYmxlCisKK2NvbW1pdCA4M2VhNGEwODBjOTBhNzRiOTc0M2QzZjI0Y2YwZDRiOGExZThjODQ5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTm92IDI3IDIxOjE2OjUyIDIwMTEgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlIHFvcworCitjb21taXQgN2I5ZTAzNDQxYzNkYzNhMDc2NzBlZDAxZjVkMDQ3OTFhODJjNzUwYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNDowNDowMSAyMDExICswMTAwCisKKyAgICBSZW1vdmUgI2RlZmluZSB2YWwoeCkgX19TVFJJTkcoeCkgYW5kIGNoYW5nZSB2YWwoeCkgaW50byBfX1NUUklORyh4KS4KKworY29tbWl0IDJmMzc5YjBlNGVjYWRmYTRlNTQxZTMwMDVjOGZjODI4MTg4MmI3NDEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTU6NTg6NDcgMjAxMSArMDEwMAorCisgICAgRm9sbG93LXVwIGZvciBjb21taXQgMWFhNzA0ZTogdW5icmVhayB0aGUgTVNWQyBidWlsZAorCitjb21taXQgNjRlZjBmNzExMjc2MTc4MzcwMjdmYjJjZmFmMTc0Yjk1YmE3OWUwZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNDoxOTo1MCAyMDExICswMTAwCisKKyAgICBBZGQgU05NUDo6cmVnaXN0ZXJfZGVidWdfdG9rZW5zKCkKKworY29tbWl0IDdiZWFkOWNhOTE3YzY3NTY2ZDVlZDk4YWI1MDdiYmMwMjgxNjIxN2QKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDg6MDggMjAxMSArMDEwMAorCisgICAgQWdlbnRYIHN1YmFnZW50OiBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbgorCitjb21taXQgMGVkNzE1NDFmODdlN2Q3OGJjOTk4ZWViZGEzMjE3YzU5ZTFkZjgzMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNDowMzoxOSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgRG94eWdlbi1zdHlsZSBmdW5jdGlvbiBoZWFkZXIgZm9yIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoKSBhbmQgbmV0c25tcF9jbGVhcl9kZWZhdWx0X3RhcmdldCgpLgorCitjb21taXQgOGMyOTcyYjYxZTQwMTY5YjQ3YzUwOTg4YjZhZTllOGMyODVmODRmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNDowMjo1NCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBGaXggc3BlbGxpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFNOTVAgbW9kdWxlCisKK2NvbW1pdCA1ZGYyYmFjNmJkNzE3Nzk5MzExZjAwMWFjN2I3M2RiODhmMTFiZGRhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgTm92IDI5IDA4OjU5OjU4IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE9ubHkgdHJhbnNmb3JtIHRoZSBhZGRyZXNzIHRvIHByaW50YWJsZSBmb3JtIHdoZW4gbmVlZGVkLgorCitjb21taXQgMTcxZThkNDhkNGFmMDQwMTNjZmY4ZmQyOGY1MzQxYTJhZWYyMWQ4OAorQXV0aG9yOiBNaWpvIFNhZnJhZGluIDxzYWZyYWRpbkBsaW51eC52bmV0LmlibS5jb20+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMTY6NDk6NDYgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcC1icmlkZ2UtbWliOiBGaXggaW5kZXggaW50ZXJwcmV0YXRpb24uCisgICAgCisgICAgVGhpcyBwYXRjaCBjb3JyZWN0cyBhIHdyb25nIGRhdGEgaW50ZXJwcmV0YXRpb24uCisgICAgc25tcC1icmlkZ2UtbWliIG9idGFpbnMgdGhlIGlmaW5kZXggdmFsdWUgZnJvbSB0aGUgc3lzZnMKKyAgICBhdHRyaWJ1dGUgJ2lmaW5kZXgnIFRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgc3lzZnMgYXR0cmlidXRlCisgICAgaXMgYW4gaW50ZWdlciwgd2hpY2ggaXMgaGFuZGxlZCBhcyBoZXggYW5kIGxlYWRzIHRvCisgICAgaW5jb3JyZWN0IGRhdGEgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorICAgIAorICAgIGUuZy4KKyAgICAgICAgJCA+IHNubXB3YWxrIGxvY2FsaG9zdCBCUklER0UtTUlCOjpkb3QxZEJhc2VQb3J0SWZJbmRleC4yCisgICAgICAgIEJSSURHRS1NSUI6OmRvdDFkQmFzZVBvcnRJZkluZGV4LjIgPSBJTlRFR0VSOiA1NAorICAgIAorICAgIGFjY29yZGluZyB0byB0aGUgc3lzZnMgYXR0cmlidXRlIHRoZSB2YWx1ZSBpcyAzNgorICAgIAorICAgICAgICAkID4gY2F0IC9zeXMvY2xhc3MvbmV0LzxkZXZpY2U+L2lmaW5kZXgKKyAgICAgICAgMzYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaWpvIFNhZnJhZGluIDxzYWZyYWRpbkBsaW51eC52bmV0LmlibS5jb20+CisKK2NvbW1pdCA4MmUzOWZiNjcwNmRmOTBlY2YyZmM5ZTEwYWRhMmI5NjJlZTE5NmYzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE5vdiAyOSAxMjoyNzo0NiAyMDExICswMDAwCisKKyAgICBGaXggbXVsdGktbGluZSBjYXNlIHRlc3Rpbmcgb2YgaW5jb21pbmcgT0lECisKK2NvbW1pdCBiMTVkYTFhNDUxNjA2MTEwNWExZWFjNzQ1MGNmNjUwZWM0NDI2NmIyCitBdXRob3I6IE5pa29sYXkgRGVuZXYgPG5kZW5ldkBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMDg6Mjk6NDkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogRnJlZUJTRDogUmVzdG9yZSBJUF9SRUNWRFNUQUREUiBmdW5jdGlvbmFsaXR5LgorCitjb21taXQgN2Y0N2Y1MmU0ODFiYWE5YWFmYjU3ODQyNDRiMGRkMjY1M2U3ZGNmZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIE5vdiAyOCAwODo1MTozOSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBVc2UgU05NUF9BTExPQ19UWVBFREVGIHRvIGFsbG9jYXRlIHRyYW5zcG9ydHMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIHNlcGFyYXRlIGNhbGwgdG8gbWVtc2V0LgorCitjb21taXQgY2Y4NjAzOWUzMDg2MjI1YzMwODViYjlhZGYwODhiOGJhNWJhNjk3OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE5vdiAyMiAxNTowMjo1OCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogTWFrZSB1bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYiBwYXNzLgorCitjb21taXQgMWE4N2U3NmUwMGVlM2Q1Y2QzN2EwN2JmYzNkODQ0OTBkM2MyYTRlYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE5vdiAyMiAxNDo1NTo0MiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogTWFrZSB1bml0LXRlc3RzL1QwMTRnZXRob3N0YnlhZGRyX2NsaWIgcGFzcworCitjb21taXQgODg2N2ZkMWRjZmU3MmI1OWQwNzMyMmZmMzhhNjk5YjY2ZWM0ZjMyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE5vdiAyMiAwOTo0NDozOCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHJvYnVzdCBhZ2FpbnN0IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLgorICAgIAorICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCkgdXNlIG1lbXNldCgpIG9uIFVuaXggc3lzdGVtcyBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IGxvb3AuCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBzdXJlIHRoYXQgb24gVW5peCBzeXN0ZW1zIG5ldHNubXBfbGFyZ2VfZmRfY2xyKCkgZG9lc24ndCB0cnkgdG8gcmVhZCBtZW1vcnkgaXQgaXNuJ3QgYWxsb3dlZCB0byByZWFkIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBlcXVhbHMgLTEgKGEgdmFsdWUgdGhhdCBzaG91bGRuJ3QgYmUgcGFzc2VkIGJ5IHRoZSBjYWxsZXIpLgorICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoKSByZXR1cm4gZmFsc2Ugb24gVW5peCBzeXN0ZW1zIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBlcXVhbHMgLTEgKGEgdmFsdWUgdGhhdCBzaG91bGRuJ3QgYmUgcGFzc2VkIGJ5IHRoZSBjYWxsZXIpLgorICAgIENIQU5HRVM6IFdpbmRvd3M6IE1ha2UgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgc2hyaW5rIGJlaGF2aW9yIGNvcnJlY3QuCisKK2NvbW1pdCAyM2RiMGNmMDliOGIwZWFiMzdiNzQ5ZWYwYzNjM2YzMDY5MDAyNDVjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDIxIDIzOjAyOjU3IDIwMTEgKzAxMDAKKworICAgIEZpeCBjYXN0aW5nIHR2X3VzZWMgdG8gaW50IHdoaWNoIG1heSBiZSB0b28gc2hvcnQKKworY29tbWl0IDgwZWU0MDIyZTUzNGU2NGFhZDVhNWYyNzE5Mjg0M2I0MmFjYjg1ZTAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDk6MTQ6MDIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQzOTIzNDogTW92ZSBuZXRzbm1wX3Bhc3Nfc3RyX3RvX2Vycm5vIHRvIHBhc3NfY29tbW9uIGFuZCByZW5hbWUgaXQgdG8gbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubworCitjb21taXQgMGJhYTkyOTZjMDcyYmIzNzM1NzYwYjBkZDk5MmYyZDFkM2NhMjdmYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwOTowNToyNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzNDM5MjM0OiBDb3JyZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdWNkLXNubXAvcGFzcyBhbmQgdWNkLXNubXAvcGFzc19wZXJzaXN0CisKK2NvbW1pdCAxYWE3MDRlNGEyOTQ0MzBiMjhlMzliNmY5ZTQ2ODNiOGE0OGJjZTA0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDA4OjM1OjIxIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBGYWN0b3Igb3V0IGFzYzJiaW4gYW5kIGJpbjJhc2MuIEFkZCBhIG5ldHNubXBfaW50ZXJuYWxfIHByZWZpeCB0byB0aGVtCisKK2NvbW1pdCBjZGE4ZmU5MTAxM2YxMmNiZjY0YTA3NzVhYmI1NTcyMDAzNWFmOTMxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDAwOjU1OjI0IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBDYWxsIHNubXBfb2lkdHJlZV9jb21wYXJlIGluc3RlYWQgb2Ygc25tcF9vaWRfbWluX2NvbXBhcmUKKyAgICBDSEFOR0VTOiBzbm1wZDogUmVtb3ZlIHNubXBfb2lkX21pbl9jb21wYXJlIHNpbmNlIGl0IGlzIGludGVybmFsIGFuZCB1bnVzZWQKKworY29tbWl0IDg1Zjg5M2UyYjYwNWU2N2Y5YmQwNDQzYzc0ZTJlZDI2OWFhNjg1NjQKK0F1dGhvcjogTmlraSBEZW5ldiA8bmlraV9kQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE5vdiAxNyAyMjo0MjozMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzE3NTY0MDogVXNlIElQX1JFQ1ZEU1RBRERSIHNvY2tvcHQgd2hlcmUgYXZhaWxhYmxlICgqQlNEKQorICAgIAorICAgIFRoaXMgaHVuayBmZWxsIG9mIHdoZW4gdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHdhcyBtZXJnZWQuCisKK2NvbW1pdCA1YzkxM2U1NDY1NmFlMDA5NmIxZmViNmRhOThiNWZjOWNhODFmMjc2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjMzOjA3IDIwMTEgKzAxMDAKKworICAgIERlZmluZSB0aGUgZnVsbCBOZXRCU0QgaGllcmFyY2h5IGRvd253YXJkcworCitjb21taXQgYjg4MTg0MWJkMDQ5M2RkNzFkNjMyNTliZGRlZDQ0OWIwNmYwMmMzMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzozMDozMyAyMDExICswMTAwCisKKyAgICBGaXggc2l6ZV90L2ludCBtaXNtYXRjaGVzCisKK2NvbW1pdCBjYTI5NGNmNzViYmM4ZTkwZGJmNDRlZTQwNDc4OTM1ZTkxZGIxNDg3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjE4OjAzIDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCBjZDMyYzJkZmYwNmI5YjQ1MmNjMThkNTUyZDJmMjIzNDA5MmM4MjljCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjE3OjA5IDIwMTEgKzAxMDAKKworICAgIEZpeCBmb3JtYXQgd2FybmluZworCitjb21taXQgODgzMTM2YzJiMmZhMDczOWY0MzdhOGNmYjY2MTRhY2NjNzZlMjY4ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxNTo1OCAyMDExICswMTAwCisKKyAgICBNb3JlIG5lZWRzIGZvciBORVRTTk1QX1BSSW8gZm9ybWF0IHNwZWNpZmllcgorCitjb21taXQgYjgwODRhN2NjYzkwOWI2ZDZkYjdjMGU4ZTU5NmQ3ODY3MWY1Njc4YgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxNDoyNiAyMDExICswMTAwCisKKyAgICBGaXggdXNpbmcgY2hhciBhcyBhcnJheSBpbmRleCAoY3R5cGUuaCkKKworY29tbWl0IDg0NTI5ZTYzMjBhODlkOTdmMTMxNGFlYmFkODA2MjU1ZDJhMWIxOGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MDA6NTcgMjAxMSArMDEwMAorCisgICAgRml4IG1pc3NpbmcgZm9ybWF0IGZvciBGcmVlQlNEIDQKKworY29tbWl0IDRiZDAzNTI5NTVhMjU1MWJmZTAyMzA4ZGQxMzRiOTEyOGM5OGI5ZTkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjI6NTk6MzYgMjAxMSArMDEwMAorCisgICAgRml4IHBhcmFudGhlc2lzIHByb2JsZW0KKworY29tbWl0IGZlNjI2OWIxOTAwY2Y0NGRjMjdhMTk5YTc2MWQxNWEwMWMzZjMwOTIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjI6NTg6MzQgMjAxMSArMDEwMAorCisgICAgRml4IHNpemVfdC9pbnQgbWlzbWF0Y2hlcworCitjb21taXQgYTRkYjlmOWZjMTNkMjFlY2ZmNDg4ZWI0MTAzNzZlZGRhNmMyODIzMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAxMzo0MzozNCAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcworCitjb21taXQgMzkwYzAxMTRjOGVjMGJkYjI3YjA4YjZmNzRlM2Y2ZWYzYTYyOTgxYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAxMzozNzo0OSAyMDExICswMTAwCisKKyAgICBGaXggZm9ybWF0IHNwZWNpZmllcnMgdG8gYXZvaWQgd2FybmluZ3MKKworY29tbWl0IDI1Y2ZjMTk2MmFlNTc2Y2NiMTU1OGRhMWUzZWY4YjZjMTdmNjNjMTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTE6Mjc6NTMgMjAxMSArMDEwMAorCisgICAgUmVhbGx5IHVwLXRvLWRhdGUgbWlicworCitjb21taXQgMGU4NmM3ODFmMzk4OWJmMDIyYzg5OTNhMTE4NjE3Yjc0YTc1NDIwYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAwOToxNzoxOSAyMDExICswMTAwCisKKyAgICBtZW1vcnlfbGludXg6IGdldCBTaG1lbSBmcm9tIC9wcm9jL21lbWluZm8gZm9yIDIuNiAob3IgbmV3ZXIpIGtlcm5lbHMKKworY29tbWl0IGJmMjY0ZDE1ZGVkN2FjYmJmMmUzODcxYjk4ZmQxZmNlZjQzZDllYzMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTY6MTYgMjAxMSArMDEwMAorCisgICAgbWVtb3J5X2xpbnV4OiBjbG9zZSBzb2NrZXRzIGluIGVycm9yIHNpdHVhdGlvbnMKKworY29tbWl0IDU3ZmY4YTQwYmFlNWQ5YmNhZDE2MDg5MTQyYTljZjMyOGM5ZmExZjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTQ6NTcgMjAxMSArMDEwMAorCisgICAgZGlzbWFuL3BpbmcsIGRpc21hbi90cmFjZXJvdXRlOiBDbG9zZSBzb2NrZXRzIGluIGVycm9yIHNpdHVhdGlvbnMKKworY29tbWl0IDhhMjUwMmExNWMzMjE3Yjk1OTM5YTNjODM2MTY3ZDIzMGFjMzVmMDIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTM6NTMgMjAxMSArMDEwMAorCisgICAgVXAtdG8tZGF0ZSBsaXN0IG9mIFJGQ3Mgd2l0IG1pYnMKKworY29tbWl0IGRjZGQ3MDIxMTFkOGRhNWY1MzgwNGNmY2YwZGZkYWQ3MzE0NjhiZGUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTm92IDE1IDEwOjU3OjM0IDIwMTEgKzAwMDAKKworICAgIERvbid0IHRyeSB0byBpbnN0YWxsIGFuIGVtcHR5IGxpc3Qgb2YgbWFuIHBhZ2VzIChNQU4zKQorCitjb21taXQgYmE2MTk4MDRlNTk3OGE4ZGY3NTQ4NDRlZmNjYTUyYjY5YjUwMTVmYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE5vdiAxNCAxMzozNDoyMCAyMDExICswMTAwCisKKyAgICBNaW5HVzogTWFrZSBzdXJlIHRoYXQgdGhlIGJhY2tzbGFzaGVzIGluIHRoZSBwc2tpbGwgbWVzc2FnZSBhcmUgZGlzcGxheWVkLgorCitjb21taXQgOTIzZWVjYzUwN2Y3NTA0M2I2MGM1ZTY4MDUzYTRmMzk2YWIwYjBkMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE5vdiAxNCAxMjozNjozOCAyMDExICswMTAwCisKKyAgICBDb21waWxlciB3YXJuaW5nIGZpeCBmb3Igc3lzdGVtcyB3aGVyZSB1aW50NjRfdCA9IHVuc2lnbmVkIGxvbmcgKGUuZy4gUkhFTCA2LjEveDg2XzY0KQorCitjb21taXQgNDM0YmZjMWY3NDU3NTUwYjZmODdkNWJjZDUxMTI3NmIyNzBiNTk2NAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTE6MjI6NTMgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGZyb20gTWFydGluIFdpbGNrOiBmaXhlZCBzbm1wZCBjcmFzaGluZyB3aXRoICdzZWxlY3Q6IGJhZCBmaWxlIGRlc2NyaXB0b3InLgorICAgIAorICAgIE9uIDMyLWJpdCBzeXN0ZW1zLCBzbm1wZCBkaWVzIHdpdGggYWZvcmVtZW50aW9uZWQgbWVzc2FnZSB3aGVuIHVzaW5nIGZpbGUgZGVzY3JpcHRpb25zID4gMzIsIGUuZy4gd2hlbiBoYXZpbmcgPjMyIEFnZW50WCBzdWJhZ2VudHMuCisKK2NvbW1pdCBlZDY1ZWNhNmU3ZjljZmE3MzgwYTc4ZDU2YzAxZWQzMTQ3NDViMTY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE5OjAxOjIxIDIwMTEgKzAxMDAKKworICAgIEZyZWVCU0QtOTogRml4IGZvciBjb25zdCdpZnllZCBubGlzdCBhcmd1bWVudHMKKworY29tbWl0IGVhY2E3OTgzZTM2NTVhYjY5NmZjYzQ0NjFjYTBjZWRiYWM2Y2U2OWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTk6MDA6MTIgMjAxMSArMDEwMAorCisgICAgTmV0QlNELTY6IE9uZSBtb3JlIGluc3RhbmNlIG9mIHRpbWVzcGVjIHJlcGxhY2luZyB0aW1ldmFsCisKK2NvbW1pdCA4YWQ2YzUzZmRlYzVhZGVhZTRlNTJmMTc1MWVjZWM0YTM0NWJhYjA1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE4OjU5OjAxIDIwMTEgKzAxMDAKKworICAgIEZpeCBidWlnICMzNDM2NTI3OiBhcnBfbmV0bGluazogZml4IGR5aW5nIHJlbG9hZCBvZiBjYWNoZQorCitjb21taXQgMzc4ZmZlZDAzYmE3OWE4MzQ2ZDZjNjI3ODFlMmRkZjVjZTkyYTQ3OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxODo1NTo0MyAyMDExICswMTAwCisKKyAgICBGaXggYnVnICMzNDM2NTI4OiBzd2luc3RfcGtnaW5mbzogcmVjb3ZlciBmcm9tIE5VTEwgcmV0dXJuIGZyb20gb3BlbmRpcgorCitjb21taXQgZDdhZDhmNWY5ZjNmNjdmMTZmNjVjMjUxNWQxMWUxOTRkMmNkZDEyYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE5vdiAxMCAxNDowNDo0MSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBDeWd3aW46IE1ha2UgZGF0ZV9uX3RpbWUoKSBwcm9kdWNlIHRpbWUgem9uZSBpbmZvcm1hdGlvbgorCitjb21taXQgYmEzNWM1MGIyZjQ1OWJkOWMxMWVkNTljYzdkMWIxNjIxNTY0NGZhMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE5vdiAxMCAxNDoxNzowNCAyMDExICswMTAwCisKKyAgICBSZXBsYWNlIEFDX1RSWV9MSU5LKCkgYnkgQUNfTElOS19JRkVMU0UoKQorICAgIAorICAgIE5vdGU6IHRoZXNlIGNoYW5nZXMgZG8gbm90IGFmZmVjdCB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQuCisKK2NvbW1pdCBmNjE1YmYyNGY1ZDBmMjNjZTkzMDFkYTU1NjE4NGQ2NDYwNzQwNDU2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDkgMjA6MzI6NDkgMjAxMSArMDEwMAorCisgICAgRmlzIEJ1ZyAjMzQzNDgyNDogU0lHU0VHViB3aGVuIHJlYWRpbmcgZGlzayBkaXJlY3RpdmUgYWZ0ZXIgU0lHSFVQCisKK2NvbW1pdCBhOTRhMTc5ZDkzNDBmNTFmYTdjMjM0MzE2MzBiYzBmZmQ2ZDc1OWU4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDkgMjA6MzA6NTEgMjAxMSArMDEwMAorCisgICAgRml4IGJ1ZyAjMzQzMzYxNjogZG9udCB0cmVhdCBEYXRlQW5kVGltZSBhcyBhIHN0cmluZworCitjb21taXQgYjI5ZTQxNjQ1MzFkMjU4ZmUzNGE2ZmUyYjllMWVjNjBjNTZmOTU0NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIE5vdiA3IDAxOjI1OjU3IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworY29tbWl0IGUyMjFlNjVmZGMxYzY4ZjE5Njg2NTE3MTdkY2M5Y2NmYjY0MTQ3ODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMyAxNTowNTowMCAyMDExICswMTAwCisKKyAgICBGaXggd2FybmluZ3MgYWJvdXQgY29udmVydGluZyBzb2NrYWRkcl9pbiAqIGludG8gc29ja2FkZHIgKi4KKyAgICAKKyAgICBUaGlzIGlzIGEgZm9sbG93LXVwIGZvciBjb21taXQgYTBhZjM4NS4KKworY29tbWl0IDJlN2U5ZWRhMGIwZDYyYTc2NDVhOWE4ZjcwZWYzZmI2ZjNkZDY5NDEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMyAxMToxNzo0OCAyMDExICswMTAwCisKKyAgICBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5ncy4KKworY29tbWl0IDM0NjJlYmNkZDBiN2MyOThjYjE1YzMwOTk3MzZmNGY5NTIyNTc4NDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgMjggMTY6MDc6MTUgMjAxMSArMDIwMAorCisgICAgUmVtb3ZlIHRob3NlIHN1cGVyZmx1b3VzIHBhcmVudGhlc2VzIHRoYXQgdHJpZ2dlciBhIGNsYW5nIHdhcm5pbmcuCisKK2NvbW1pdCAzZTVmZWRkM2U3ZDFlZjMxNjgzNjA0YmY3M2RjNTZlOTQ0Y2FkMzQ5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE5vdiAzIDA5OjQ1OjI3IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIGFmdGVyIDMwIGRheXMgb2YgdXB0aW1lLgorICAgIAorICAgIEFmdGVyIDMwIGRheXMsIHZhbHVlcyBmcm9tIC9wcm9jL3N0YXQgKG9uIExpbnV4KSBjYW4gZ2V0IGJpZ2dlciB0aGFuIDMyYml0cyBhbmQgc25tcGQgY2FsY3VsYXRpb25zIG1pZ2h0IHJlbmRlciBjb3VudGVycyBsaWtlIHNzQ3B1VXNlciBuZWdhdGl2ZSBvciB6ZXJvLCB3aGlsZSB0aGUgcmVhbCB2YWx1ZSBpcyBoaWdoZXIuIFRoZXJlZm9yZSB0aGUgY291bnRlcnMgc2hvdWxkIGJlIHRyYWNrZWQgYXMgdGhlIGxhcmdlc3QgaW50ZWdlciBhdmFpbGFibGUuCisKK2NvbW1pdCAwZmM4MjIxYjI0OTg4YzRhZTYxODBlZDQyYjg2Yjk4NTJmZDU4NmFkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDIgMjI6NTk6MDggMjAxMSArMDEwMAorCisgICAgZHNrSW5kZXggd2FzIG9mZiBieSBvbmUKKworY29tbWl0IGE1YjI4ODI5ZTY0ZDVmM2I4N2U0YjliMWVmOGNjMjA0ZjMzYTYxYjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMiAyMToyNTowNyAyMDExICswMTAwCisKKyAgICBTb2xhcmlzIG5lZWRzICRBV0sgdG8gZ2V0IGEgdXNhYmxlIG5hd2sKKworY29tbWl0IDI4MDFhMjEzOWYyNzAyMWUxYWIxNWUzNjJlMmQzZDYyNGZmYWE0OTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMzEgMjI6NTU6NTMgMjAxMSArMDEwMAorCisgICAgUGF0Y2ggIzM0MDYzNjQ6IEZpeCB1bnN0YWJsZSBkYXRhIGZvciBOZXRCU0QuCisKK2NvbW1pdCA4MjFhNThkMTEyZDdhYzQ5NTE0OWUyNjJkNzA0NDEyYmEyODAwNDM4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDMxIDIyOjQzOjUyIDIwMTEgKzAxMDAKKworICAgIEZpeCBpcHY2IHN0YXRpc3RpY3MgbG9vcGluZyB0b28gZmFyIHdoZW4gc2Nhbm5pbmcgaW50ZXJmYWNlcy4KKyAgICBGaXggVENQIHNlc3Npb24gdGFibGUgcmVwZWF0aW5nIGRhdGEgZnJvbSBmaXJzdCBlbnRyeSBmb3IgYWxsLgorCitjb21taXQgMzQ5NTkxZDAzZTE3YTU1YjQzZWFjYzZhNjg3YjAyZmQ4ZDRlOTUyOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIE9jdCAzMSAwODo1OTozNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHBlcmwgc3VwcG9ydCB3aXRob3V0IHN1cHBvcnQgZm9yIG9wYXF1ZSB0eXBlcy4KKworY29tbWl0IDFlYzcxMTBlNzJiY2UxNTYxZjc0NjUxNzQ1OWQ2ZjA0MzAxNmI2MGUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMzAgMTk6MDU6MzAgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSB0aGUgYXNuMSB0ZXN0IHBhc3MgZXZlbiBpZiBzdXBwb3J0IGZvciBvcGFxdWUgdHlwZXMgYXJlIHJlbW92ZWQuCisKK2NvbW1pdCA2ZDI2OTE4YWY1NWFhMzY2MmE3MjA1NDJkZTc3YmJmMzliMGEzZTkxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgT2N0IDI5IDA4OjM0OjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBEaXNhYmxlIHRoZSBzdXBwb3J0IGZvciBpbnRlZ2VyNjQgaW4gcGFzcyBzY3JpcHRzIGlmIGNvbXBpbGluZyB3aXRob3V0IG9wYXF1ZS1zcGVjaWFsLXR5cGVzLgorCitjb21taXQgMjliZjY5ZDcwNDI0ZjM1OWQ5Yzg3ZjA3YTk2NGEwOTk0MTU2NDlhNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxMzowMjoyNSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGRfc3FsOiBBdm9pZCB0aGF0IGEgbGlua2VyIGVycm9yIGlzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdoZXJlIG15X3Byb2duYW1lIGlzIG1pc3NpbmcgaW4gbGlibXlzcWxjbGllbnQgKGUuZy4gRmVkb3JhIDE1IGFuZCAxNikuCisgICAgCisgICAgVGhpcyBpcyBhIGJhY2twb3J0IG9mIGNvbW1pdCA5ZjY1M2Y3LgorCitjb21taXQgMmNjOTUwNGI5YmI4NjI1Yjk0YmU2Y2RhN2U2MDk5M2QwNTljZDkyOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAwOTowMToyMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDM0Mjg1MDY6IEZpeCBuZXRzbm1wX2dldGhvc3RieWFkZHIoKQorICAgIAorICAgIFRoaXMgcGF0Y2ggc2hvdWxkIGZpeCB0aGUgcmVncmVzc2lvbnMgaW50cm9kdWNlZCBieSBjb21taXQgODVkOTZjNCAoTWF5IDEzLCAyMDExKS4KKworY29tbWl0IDliNDI3YjM1M2YxY2ViOGZlODdlNmZjOGVkM2I2Y2ZhYjNjZTdmMjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBPY3QgMjcgMDg6MjA6MDAgMjAxMSArMDIwMAorCisgICAgTWluR1c6IEF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIE1pbkdXJ3Mga2lsbC5leGUgYW5kIHRoZSBTeXNJbnRlcm5hbHMgcHNraWxsLmV4ZQorCitjb21taXQgMmM0NWY5MmNmY2I1YjA1ZTA0OTIyNmE1YTc4ODNhMGIxMDYwMTFhZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAxMDo0MjoyOSAyMDExICswMjAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgcGFzc2luZyBhIGNvbnN0IHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBhY2NlcHRpbmcgYSBub24tY29uc3QgcG9pbnRlci4KKworY29tbWl0IDI3NWQyM2VkZmRlYmUwNTc3YjA4NDIxZTRjNmM5MzZhZTM5YjdmZGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMDk6MzM6MDkgMjAxMSArMDIwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHNldC1idXQtbm90LXVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCA0NDk1ZTE3YzA3OGFjNjk5N2E5YzdmYTFhODhkYjA2NDRlOTE5NDkxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDA5OjMyOjQ2IDIwMTEgKzAyMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3QKKworY29tbWl0IDEzOTUyZjZiZWU5ZjQwODg2N2FiNmQyZmRmZGRlNGYyODQwNzQ5NTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDI2IDE0OjA1OjE2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IGZyb20gU2lkZGhlc2ggUG95YXJla2FyOiBwcm9wZXJseSBjbGVhbiB1cCBvbGQgcmVxdWVzdHMgaW4gYSBzdWJhZ2VudCB3aGVuIHdlIHJlY29ubmVjdCB0byBtYXN0ZXIuCisgICAgCisgICAgQW4gc25tcCBzdWJhZ2VudCBsaW5rZWQgYWdhaW5zdCBuZXQtc25tcC1saWJzIG1heSBjcmFzaCBpZiBpdCBoYW5kbGVzIGEKKyAgICByZXNwb25zZSB3aGljaCBoYXMgbWFnaWMgcmVmZXJyaW5nIHRvIGFuIG9sZGVyIGRpc2Nvbm5lY3RlZCBtYWluIHNlc3Npb24uIFRoaXMKKyAgICBtYXkgaGFwcGVuIHdoZW4gdGhlIHN1YmFnZW50CisgICAgYXR0ZW1wdHMgdG8gY2xlYW4gdXAgb2xkIHJlcXVlc3RzIG9uIHJlY29ubmVjdGlvbiBvZiB0aGUgZGlzY29ubmVjdGVkIG1hc3RlcgorICAgIHNlc3Npb24uCisKK2NvbW1pdCBhZTA1MjQ3MmIyMjcyMGQwODM2OWU4NTEyN2RiMjE0MjQ1ZGYyZTNmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCAyNSAxNjoxNToxNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlscy4KKyAgICAKKyAgICBXaGVuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlciBmYWlscywgaXQgZnJlZXMgaXRzIHJlZ2luZm8gLT4gbnNhaHJfREVTVFJPWSAoYW5kIGFueSBvdGhlciBmdW5jdGlvbikgbXVzdCBub3QgZGVyZWZlcmVuY2UgaXQuCisKK2NvbW1pdCBjMTk5YmY5MWI2MjM5ZjI2YjJhYWIzNGU4NTc1ZTBmMGRmOWNkZTliCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyNCAxNDoyNToyOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogeGZzLCBqZnMgYW5kIHZ4ZnMgZmlsZXN5c3RlbXMgYXJlIG5vdyByZWNvZ25pemVkIGluIGhyU3RvcmFnZVRhYmxlCisKK2NvbW1pdCA3NDdmZGM3MWU2NGQwOWUwODA5MjhlYmJiNGQwNGNiZGUzOTA2Nzk5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCA1IDE1OjU3OjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBMb3dlcmVkIHNldmVyaXR5IG9mICdlcnJvciBmaW5kaW5nIHJvdyBpbmRleCBpbiBfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlJyBtZXNzYWdlLgorICAgIAorICAgIFRoZSBtZXNzYWdlIGlzIHNob3dzIHVwIHdoZW4gc25tcGQgaXMgc3RhcnRlZCBhbmQgdGhlcmUgaXMgZGlmZmVyZW50IHNldCBvZiBuZXR3b3JrIGludGVyZmFjZXMgdGhhbiBpdCB3YXMgd2hlbiBzbm1wZCB3YXN0IGxhc3Qgc3RvcHBlZC4gVGhpcyBpcyBjb21tb24gb24gcHBwLXNlcnZlcnMgb3IgdmlydHVhbCBob3N0cy4KKworY29tbWl0IDI1MGY2OThlNTllYWI5ZjFmZmQzMzJmZjU5ZmRiNzJlYTBkZjA2ZmYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMjMgMDg6NTE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1ha2UgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvZGUgd29yayBhZ2FpbgorICAgIAorICAgIFByZXZpb3VzbHkgdGhlIHRyYW5zcG9ydCBpbmhlcml0YW5jZSBwcm9jZXNzaW5nIGNvZGUgcmFuIHdpdGgKKyAgICBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgc2V0LiBJbiB0aGlzIG1vZGUgdGhlIGZpbGUgbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKyAgICBpcyByZXF1aWVyZWQuIFRoYXQgZmlsZSBpcyBjcmVhdGVkIGR1cmluZyB0aGUgZmlyc3QgbWFrZSBydW4sIGFuZCB0aGF0IGhhcHBlbnMKKyAgICBhZnRlciBjb25maWd1cmUgaXMgcnVuLgorICAgIENoYW5nZSB0aGlzIHRvIHVuZGVmaW5lIE5FVFNOTVBfTUlOSU1BTF9DT0RFLCBlZmZlY3RpdmVseSB0dXJuaW5nIG9mZiBmZWF0dXJlCisgICAgc3VwcG9ydCBkdXJpbmcgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gbWFrZSBpdCB3b3JrIGF0IGFsbC4KKworY29tbWl0IDZlZjY5MDc2NDIyNDdjNjYzYjliODk2NGI5ZmQ0NGEyMTFkYmNhYTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBPY3QgMjAgMjA6MzA6NTQgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQwODM5ODogRml4IGEgbWVtb3J5IGxlYWsgaW4gYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy4KKyAgICAKKyAgICBUaGlzIG1lbW9yeSBsZWFrIHdhcyBpbnRyb2R1Y2VkIHZpYSBjb21taXQKKyAgICA5YmYzZDk2ZDk2YThlY2Q0YTVmYzM1YzMyNmRjOTM3NDY3MDAyYjZjOiBJbml0aWFsIEhBTAorICAgIGltcGxlbWVudGF0aW9uIG9mIEZpbGVTeXN0ZW0gaW5mb3JtYXRpb24gKE1hcmNoIDcsIDIwMDgpLgorCitjb21taXQgY2Y4MmI4OTRiMjIxN2MyNmVkYzZmMTM1NjM1MWM5MzI0MTU2MDRlMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IE9jdCAxNSAxNDo0NTowOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDM0MjM5MTU6IENoYW5nZSBkZWZhdWx0IG51bWJlciBvZiByZXRyaWVzIGJhY2sgZnJvbSAwIHRvIDUKKyAgICAKKyAgICBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGludHJvZHVjZWQgdmlhIGNvbW1pdCA2Y2FjMDUwIChNYXkgNSwgMjAxMSwKKyAgICBhZGRlZCBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZiByZXRyaWVzIGluCisgICAgc25tcGQuY29uZikuCisKK2NvbW1pdCBjMTFhZGFhMTI5MTVhYmZlZTYyOWJiNmMwMjZjMjFmMjE4NWIyMTZlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDE3IDEwOjI0OjQ2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBBdm9pZCB0aGF0IGNvbXBpbGluZyB0aGUgaGVhZGVyIGZpbGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiB3aXRoIHRoZSBNaW5HVyBnY2MgY29tcGlsZXIgdHJpZ2dlcnMgd2FybmluZ3MgYWJvdXQgInByYWdtYSBjb21tZW50Ii4KKworY29tbWl0IGIxN2E3MmE3OTM0ODNhZWU0YTViYjJmMmUyYzdmNGZkODY5ODE3ZTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTcgMTA6MjI6MjAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luMzI6IEF2b2lkIHRoYXQgdGhlIFBBQ0tBR0VfKiBtYWNyb3MgZGVmaW5lZCBpbiA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhdXNlIHRyb3VibGUgd2hlbiBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgaW4gYSBwYWNrYWdlIHRoYXQgdXNlcyB0aGUgR05VIGF1dG90b29scy4KKworY29tbWl0IDY2NGQzYWUxMDdkNzU0MDUxYjhjNDIyNzlkNDU5YWE1N2ExYmUxYzMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTY6NDc6MTYgMjAxMSArMDIwMAorCisgICAgTWluR1csIGh3X2ZzeXM6IFVzZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmllcnMgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQuCisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbnRyb2R1Y2VkIGluIGNvbW1pdCA3NmZmMjVkLgorCitjb21taXQgMjExZGNiNDkzMDY1NjFlMzViYTNjMjEzYmU3Y2ZhMjU3YjQwYThlNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxNTo1Mjo0MyAyMDExICswMjAwCisKKyAgICBBdm9pZCB0aGF0IGdjYyA0LjYgY29tcGxhaW5zIGFib3V0IHNldCBidXQgbm90IHVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCA5ZjY1M2Y3M2U1YWE3MGYwYmVmMTE3NDYzMmU5NTU5NGY4N2Y2NjlmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDEzOjAyOjI1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZF9zcWw6IEF2b2lkIHRoYXQgYSBsaW5rZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIG9uIHN5c3RlbXMgd2hlcmUgbXlfcHJvZ25hbWUgaXMgbWlzc2luZyBpbiBsaWJteXNxbGNsaWVudCAoZS5nLiBGZWRvcmEgMTUgYW5kIDE2KS4KKworY29tbWl0IDRjODNiOTIyOWE3NDU0ZjM0ZjZmZjc1ZjY5ZTY3ZTQwMzBjNDE5YjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgNyAxNTo1ODo0NSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBTZXQgdGhlIHJwYXRoIGZvciBsaWJwZXJsLnNvIGluIGxpYm5ldHNubXBtaWJzLnNvIHN1Y2ggdGhhdCB0aGUgZHluYW1pYyBsaW5rZXIgY2FuIGZpbmQgbGlicGVybC5zbyB3aXRob3V0IHJlcXVpcmluZyB0aGUgdXNlciB0byBtb2RpZnkgdGhlIGR5bmFtaWMgbGlua2VyIHNldHRpbmdzLgorICAgIAorICAgIFRoaXMgY2hhbmdlIGluIGFnZW50L01ha2VmaWxlLmluIGlzIG5lY2Vzc2FyeSBvbiB0aGUgNS41IGJyYW5jaCBhbmQKKyAgICBsYXRlciBidXQgbm90IG9uIHRoZSA1LjQgYnJhbmNoLiBUaGF0IGlzIGJlY2F1c2UgdGhlIDUuNCBicmFuY2ggdXNlcworICAgIGFuIG9sZGVyIHZlcnNpb24gb2YgbGlidG9vbCB0aGF0IHByb3BhZ2F0ZXMgdGhlIHJwYXRoIG9mIGRlcGVuZGVudAorICAgIGxpYnJhcmllcy4gVGhpcyBpcyBjYWxsZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmN5IHRyYWNraW5nIGluIHRoZQorICAgIGxpYnRvb2wgbWFudWFsLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCBpbiBsaWJ0b29sIHZlcnNpb24gMQorICAgIGJ1dCBub3QgaW4gbGlidG9vbCB2ZXJzaW9uIDIuIEZvciBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24gYWJvdXQKKyAgICBkeW5hbWljIGxpYnJhcmllcyBhbmQgcnBhdGhzLCBzZWUgYWxzbyB0aGUgZG9jdW1lbnQgd2l0aCB0aGUgdGl0bGUKKyAgICAiUnBhdGhJc3N1ZSIgb24gdGhlIERlYmlhbiB3aWtpIChodHRwOi8vd2lraS5kZWJpYW4ub3JnL1JwYXRoSXNzdWUpLgorCitjb21taXQgODkyNWM5MTJkMjYzOTc1MmE4NGJjZmZlZWYxYjcwYTgxMDI2NDQ5YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCA3IDE0OjIxOjI4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBIT1NULVJFU09VUkNFUy1NSUI6IEFkZCBtaXNzaW5nIGJyYWNlIGluIGEgZGVidWcgc3RhdGVtZW50CisKK2NvbW1pdCA3NmZmMjVkOWJmOTc1NzllNzIxMzEwMjA2NWZkNTA5NmYwNDlhNGM1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDcgMTQ6MTM6MTggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJTdG9yYWdlVGFibGU6IGZpeCBidWcgaW4gaGFuZGxpbmcgbGFyZ2UgZmlsZXN5c3RlbXMsIHdoZXJlIGxhcmdlIG1lYW5zIGFib3ZlIDggVEIgKD0gMioqMzEgKiA0MDk2IGJ5dGVzKS4KKyAgICAKKyAgICBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gY29tbWl0CisgICAgNzFkODI5M2YzODdhNmNkNjZiYjBkYmIxM2MwZjUwMTc0ZDJlNjc4Yi4KKyAgICBGb3IgdGhlIG9yaWdpbmFsIGJ1ZyByZXBvcnQsIHNlZSBhbHNvCisgICAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYXRpZD0xMTI2OTQmYWlkPTM0MTk4MjUmZ3JvdXBfaWQ9MTI2OTQuCisKK2NvbW1pdCA4NjYwMzNkYjk5MDRmZmIxMjAzZjI4M2Y4MzgwOTJlNGNmNjhkZTZiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgT2N0IDYgMDc6MzM6MjcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSBzcHVyaW91cyAjZW5kaWYgdGhhdCBzZWVtcyB0byBiZSB0aGUgcmVzdWx0IG9mIGEgbWlzbWVyZ2UuCisKK2NvbW1pdCAyMGY0ZjMyNjdlZTIwZDU1NzA1YjdhNDM3ODk4NzljMTAzZjk2NjIwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgT2N0IDYgMDA6MDg6NTkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IEFkZCBtaXNzaW5nIGVuZCBjb21tZW50cyB0byBmZWF0dXJlIGlmbmRlZnMuCisKK2NvbW1pdCBlNWRlMmNjNTdiZjMwNGYzMzIwY2FkMDAzNGQyZWEyZDhhZWRjNDM2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDUgMDk6MTU6MTAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IExvZyBhIG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSBpZiBlbWJlZGRlZCBwZXJsIGluaXRpYWxpemF0aW9uIGZhaWxzCisKK2NvbW1pdCA1ZWVmOTk5MGRlMjhmNjMxMTFlNmMwOTNiZTBmM2M3YWUyZDUxM2ExCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDUgMDg6NDU6NDkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogQWRkIGFnZW50Ojp1cHRpbWUoKQorCitjb21taXQgNjgxMGVkNDJmOWJjNTYwNzUwZDZkYmZiN2U1MGI2ZTJhYzExODk5YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAzMCAxMTowMToyMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBDeXdpbjogYWdlbnQ6IEltcGxlbWVudCBnZXRfdXB0aW1lKCkgc3VjaCB0aGF0IHF1ZXJ5aW5nIEhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJTeXN0ZW1VcHRpbWUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLgorCitjb21taXQgOTcxNzJiMzExZDIwZjQ0NDFjN2E3ZTkwMDkyYjU5YzFlMGRhOTlmNworQXV0aG9yOiBUaG9tYXMgSmFyb3NjaCA8dGphcm9zY2hAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDUgMDg6NDY6MzkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogUEFUQ0g6IDM0MTg2NDk6IEhPU1QtUkVTT1VSQ0VTLU1JQjogVXNlIHBjbG9zZSgpIGluc3RlYWQgb2YgZmNsb3NlKCkgdG8gY2xvc2UgYSBwaXBlLgorCitjb21taXQgNjU5MTkzN2FkYjg1MDAwYzI3MDY5YzRiZTg0Y2Y0Njg4ODM4ZWJjZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDE2OjE4OjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgZGVwZW5kZW5jaWVzIG9uIEBGRUFUVVJFVEFSR1NAIHRvIG1ha2UgdGhlIHN1YnRhcmdldCB3b3JrIGFzIHdlbGwuCisKK2NvbW1pdCBiOWM4MDEyZWMwMzViYzA4NGYxNzU4NzZmZWNjMzc1MTk1ZjliZTgxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIgMTQ6MDI6NTggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IEFkZCB0YXJnZXQgdG8gYnVpbGQgYWdlbnR4dHJhcCBmcm9tIHRoZSB0b3BsZXZlbAorCitjb21taXQgOTk1NjQ3YzBjZmUwMDQxMjI2MmNjNTc5N2JkZmFlOWQwMGI3MGM3NgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDE1OjQ0OjM2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSZW1vdmUgdGhlIHVzZSBvZiAtTCBmbGFncyBmb3IgaW50ZXJuYWwgbGlicmFyaWVzIGFzIGl0IGNvbmZ1c2VzIGxpYnRvb2wuCisKK2NvbW1pdCA5M2RjMTIzNWEwZGI1OGZmZDI5NjE3Y2ZmMDBkYzExMjYzNzgwMjAyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIgMTE6MzE6NDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1ha2UgbWFrZSBhcHBzIHdvcmsgYWdhaW4KKyAgICAKKyAgICBhcHBzIGluY2x1ZGUgc25tcHRyYXBkIGFuZCB0aGF0IHJlcXVpcmUgdGhlIGFnZW50IGxpYnJhcmllcyBhcyB3ZWxsLgorCitjb21taXQgYmE0MTQ4OGVkNDRjZDIzYzI1OTYzZDRmYzU2YzQ3Njg1M2IyYWI1OQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDExOjI5OjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBXaGVuIHlvdSBzYXkgbWFrZSBsaWJzIHlvdSBleHBlY3QgYWxsIHRoZSBsaWJzIHRvIGJlIGJ1aWx0LgorICAgIAorICAgIFRoaXMgaXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBzbm1wdHJhcGQgdGFyZ2V0IGF0IHRoZSB0b3AgbGV2ZWwgd2hpY2ggb2J2aW91c2x5CisgICAgZXhwZWN0ZWQgYm90aCBsaWJzIHRvIGJlIGJ1aWx0IGFuZCBzbyBmYWlsZWQgdG8gY29tcGlsZSBiZWZvcmUgdGhpcyBwYXRjaC4KKworY29tbWl0IDMwNTdjNzNlMDkzNDczYmU0NjI1NGJjZGZiNGNhNzg4ZTQzMmQxYjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDMwIDA3OjMyOjUyIDIwMDggKzAwMDAKKworICAgIE5FV1M6IGJ1aWxkaW5nOiBQQVRDSDogMjA5MTE1NjogY29ycmVjdGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIGluIE1ha2VmaWxlLgorICAgICdtYWtlIC1qIDxOPicgc2hvdWxkIHdvcmsgbm93LgorICAgIAorICAgIEJhY2twb3J0IHRoaXMgdG8gVjUtNCBhcyBpdCBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uIGluIHRoZSBzaW5nbGUKKyAgICB0aHJlYWRlZCBjYXNlIG9mIG1ha2UgbWlibGliIGFzIHdlbGwuCisKK2NvbW1pdCA2ZWFlMzQwZmEyYTY0MDg2NTkyOTgyY2M1MjczNWJjMDE0ODdkOTc4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgT2N0IDEgMTk6MzM6NTAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFNpbGVuY2UgbGliYnNkIDAuMy4wIG5hZ2dpbmcKKyAgICAKKyAgICBJZiB5b3UgaGF2ZSBsaWJic2QgMC4zLjAgaW5zdGFsbGVkIHRoZW4gdGhlaXIgdmVyc2lvbiBvZiBubGlzdC5oIHdhcm5zIGFuZAorICAgIHRyaWVzIHRvIG1ha2UgeW91IGluY2x1ZGUgYnNkL25saXN0LmggaW5zdGVhZC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkb24ndAorICAgIG5lZWQgdGhhdCBjb21wYXRpYmlsaXR5IGxpYnJhcnkgYXMgd2Uga25vdyBob3cgdG8gZG8gaXQgb3Vyc2VsZiBzbyBpdCBiZWNvbWVzCisgICAgcHVyZSBuYWdnaW5nLiBUaGlzIHBhdGNoIGFkZHMgYSBkZWZpbmUgdGhhdCBjaGFuZ2VzIHRoZSB3YXJuaW5nIGludG8gYW4KKyAgICBlcnJvciBhbmQgdGhlbiBmaWd1cmVzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHVzYWJsZSBubGlzdC5oIGFuZCBpZ25vcmVzIGl0CisgICAgZm9yIHRoZSBmdXR1cmUuCisKK2NvbW1pdCBhYzM4Y2I1MzFiZWU1MGVkYzhkNGM4MzRmMzAwNWY1OTkyYzc3MWQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDE5OjAzOjAyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEVuYWJsZSBzZW5kaW5nIFNOTVB2MiB0cmFwcyB3aXRoIGFuIGVtcHR5IHZhcmJpbmQgbGlzdAorCitjb21taXQgYTc1ZGUyOTcxNTI3YWMyZDJlODEyMDI0Mjk4NjAyYmIyNDEyZjMzNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAzMCAxMDo0MTo0NCAyMDExICswMjAwCisKKyAgICBwZXJsL1NOTVAvU05NUC54czogVXBkYXRlIGVtYWNzIG1vZGVsaW5lCisKK2NvbW1pdCA4NDhmNjMwMGVmZTM4NDkyZmI0NTQ0NTFhMDMwZjBiN2U2ZmY4YzlkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDMwIDEwOjQxOjQ0IDIwMTEgKzAyMDAKKworICAgIHBlcmwvU05NUC9TTk1QLnhzOiBVcGRhdGUgZW1hY3MgbW9kZWxpbmUKKworY29tbWl0IGMxMzc0NDczZWNkOGVjOWUwMzEwMDEzODYxZWUxOGM4M2U1ZDZjNWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBTZXAgMzAgMDM6Mjk6MzYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUHJvdGVjdCB0aGUgdXNlIG9mICRPU1RZUEUgdG8gZW5zdXJlIHRoYXQgJ3Rlc3QnIGdldCBlbm91Z2ggcGFyYW1ldGVycy4KKworY29tbWl0IDdlOTdhMjA2MzNhNTdlYWUzOWQwMTViMjMzMzk0NjNjMzJmNWY4NDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMTA6MjI6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQ29udmVydCBzbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMgaW50byB0d28gdW5pdCB0ZXN0cworCitjb21taXQgOWMwZGQ5ODE3NjQ1NzM0MmZmZmFhNWU3NGQ4MDJlMzE0NWVkNzBlNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAwODo1NjoxNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdW5pdCB0ZXN0IGZvciBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKQorCitjb21taXQgNWZkMjZlNGZhM2UwMDBlYTljODFjMzhhYjk3NWI3OTQ2ZWZlMjE1NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIFNlcCAyOCAxNzo0OTo1NSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogQXZvaWQgdGhhdCBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKSBmYWlsdXJlIHRyaWdnZXJzIGEgZG91YmxlIGZyZWUuCisgICAgCisgICAgRml4ZXMgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgdmlhIGNvbW1pdAorICAgIGFhNGQ0N2MyNjA5ZTUyODE4YzljZGYxYThlMjIwNWRlOWEzMzVhMGEgKHN2biByMTk1MTUpLgorCitjb21taXQgZDIyNTJkMDE2NjkzODA3MzI2ZjcyYjY2MTIzNjQ5ZGVhMDBhZjkxNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAxMDoyMDowOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBSZXF1aXJlIGEgc2VtaWNvbG9uIGFmdGVyIE9LKCksIE9LRigpIGFuZCBQTEFOKCkKKyAgICAKKyAgICBBbHNvLCBsZXQgT0tGKCkgZW1pdCBhIHNpbmdsZSBsaW5lIG9mIG91dHB1dCBzdWNoIHRoYXQgYWxsIG91dHB1dCBpdAorICAgIHByb2R1Y2VzIGlzIHZpc2libGUgaW4gdGhlIG91dHB1dCBvZiAibWFrZSB0ZXN0Ii4KKworY29tbWl0IDE0MjE5MjRiNDg1MjE0MjE5MmM1YmI5ZTkzZGRiZmVkNjllOTA4ZmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBTZXAgMjEgMjI6MjA6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQXZvaWQgd2FpdGluZyBpbmRlZmluaXRlbHkgaWYgYSBzZXNzaW9uIGhhcyB0aW1lb3V0IHplcm8KKworY29tbWl0IDVmMjdmNGY3NGFlMmJkNWJhZjUwM2NmMzA2YjRmOWEyODQxYTU3Y2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDozMjowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHRlc3QgcnVubmVyCisKK2NvbW1pdCAwOTcwMzk1OGNjNWVhODQ1OTI5YWUxOWVmOWUwODA0YWVjYWE1MTJlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDI3IDEyOjQyOjQxIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEF2b2lkIGZhbHNlIG5lZ2F0aXZlIGZvciBUMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUgY2F1c2VkIGJ5IHRoZSB0ZXN0IHJlc3VsdCBiZWluZyBwcmVzZW50IGluIHRoZSBoZXggZHVtcCAoIm1vc3RseV9oYXJtbGVzcyIpCisKK2NvbW1pdCA0MzkzMDAyNzlmNmYzMTQzODYzOGQyZjIyMmMyNGMzYzg0MWZhNmFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDI3IDExOjE2OjMyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNaWNyby1vcHRpbWl6ZSBhZ2VudCBtb2R1bGUgZGVwZW5kZW5jeSBhbmFseXNpcworICAgIAorICAgIFRoaXMgbWFrZXMgdGhlIGFnZW50IG1vZHVsZSBkZXBlbmRlbmN5IGFuYWx5c2lzIGNhcnJpZWQgb3V0IGJ5IHRoZQorICAgIGNvbmZpZ3VyZSBzY3JpcHQgc2xpZ2h0bHkgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIHRob3NlIHN5c3RlbXMgd2hlcmUKKyAgICBmb3JrKCkgaXMgZXhwZW5zaXZlIChDeWd3aW4pLgorCitjb21taXQgYmJjNjgwMDA0YTEzNzYwMzhkZmRjNDE3MmRiZTdiOWUzMTFmYmE2OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIFNlcCAyNiAxMDoxNDo0NSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogTWFrZSB0ZXN0IFQxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSBwYXNzCisKK2NvbW1pdCA3MGIwNmNmNzg5MjA4ZWFhODkwYmZiY2Q2MzhiZGI3NzVmODE3MDU0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDIwIDA5OjUwOjU3IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IHRlc3Rpbmc6IHBlcmw6IEZpeCBhbiBpbmNvcnJlY3QgbWVzc2FnZSBwcmludGVkIHdoaWxlIHJ1bm5pbmcgdGhlIFBlcmwgbW9kdWxlIHJlZ3Jlc3Npb24gdGVzdHMKKworY29tbWl0IDcwYmNjOGRlMmQwZmM5MmJiYjg0ODE4MjM2MzBmYWI5YmM4N2FmNzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMTYgMTY6MTQ6MjQgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE9idGFpbiB0aGUgTVNZUyBwYXRoIGZyb20gdGhlIGVudmlyb25tZW50CisKK2NvbW1pdCA2MjYyNzVlMmQxYWNhZmFlNzE0NGEzM2VkMzAxYTQwZjU5NmIzN2IwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgU2VwIDE0IDEzOjE0OjE3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IFJlbW92ZSBzdXBlcmZsdW91cyBsaW5rIGxpYnJhcmllcyBmcm9tIHByb2plY3QgZmlsZXMgKCouZHNwKQorCitjb21taXQgMzhmYzNjYWE5ZWViMzgwMDI1NGI0ZjZhZDZmOGY0NzY0YzBmODNkYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyMCAwOTozNDowOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIG5ldHNubXBfY2FsbGJhY2tfYWNjZXB0KCkgcmV0dXJuIC0xIChmYWlsdXJlKSBpbnN0ZWFkIG9mIDAgKFNURElOX0ZJTEVOTykKKworY29tbWl0IDZjOGM3ZThhY2E4ZmMyZWViNTIwMTBhZTNlOWZlZTZkZDgzZWY3ODAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMTMgMDk6NTg6MjYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUmVtb3ZlIG9ic29sZXRlIHNubXBfZ2V0X2ZkX2Zvcl9zZXNzaW9uKCkgZGVjbGFyYXRpb24KKworY29tbWl0IDA4NjBkMTFmZDhmYzVkYmRhYWFlMjI2MWZhZTJjMDdmYjljMmM4MmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgOCAxMzo1NDo1NSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNU1ZDOiBBdm9pZCB0aGF0IHRoZSB0eXBlZGVmcyBpbiA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNvbmZsaWN0IHdpdGggdGhvc2UgaW4gPHN0ZGludC5oPiBmcm9tIHRoZSBtc2ludHR5cGVzIHByb2plY3QKKworY29tbWl0IGY4YTAzNmY2M2ZmNjhmMDgzNDM2MTIwZTBhYmQ0NzhiNjkyYTJmNjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgOCAxMzoyMTowNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNU1ZDOiBXaGVuIGxpbmtpbmcgd2l0aCBPcGVuU1NMLCBsaW5rIHdpdGggdXNlcjMyLmxpYiB0b28KKworY29tbWl0IDgzNmEyM2UxMGNhODEwYzM4OTk5MDJkMzI1ODc2MTZhOWQxMjAzZGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKdWwgMTQgMTg6Mzg6MTMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogTGluayB3aXRoIHByb3BlciBsaWJlYXkzMiBsaWJyYXJ5CisKK2NvbW1pdCA3YjA3ZmQ2Y2RlZjQ5ZWM3YmIwNGIxNjZlMmE0ZmJiMzdiNTgyODQwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTE6MTA6MzggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUmVtb3ZlIGFuIGluY29ycmVjdCBjb21tZW50IGZyb20gc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworY29tbWl0IDk4ZjZkMjlkOTgxZmY4ZTYwNzYwMGM2M2RhZGIyNDA1MzU2Mjk4MDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDo0OTowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIElTREVGSU5FRCgpIGNoZWNrIGZvciBhbiBleGFjdCBtYXRjaCBpbnN0ZWFkIG9mIGEgcHJlZml4IG1hdGNoCisKK2NvbW1pdCA1MmNkMDAzMWEzMWY2OTJmMTMyNjNhOTRjMzM1ZDA2YmUxNDU0ODAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MTI6NTkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdGhvc2UgcmVncmVzc2lvbiB0ZXN0cyBwYXNzIGZvciB3aGljaCBTTk1QQ09ORlBBVEggYW5kL29yIFNOTVBfUEVSU0lTVEVOVF9ESVIgbWF0dGVyCisKK2NvbW1pdCBmNWNkODliZDMzNTZkZDc0ZTE1NTZjMGI1MDk2NmE2NDNmMTkyMDg1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MTI6NTkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0ZXN0IGZyYW1ld29yaworCitjb21taXQgZGVlZGQ1MmM4MzRhNjQ0ODg1MmEwNjc4NTUzNmUxMzg2NTk2OTY5NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiBTdXBwb3J0IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHJlY2VudCBTaGluaW5nIExpZ2h0IE9wZW5TU0wgYmluYXJ5IGRpc3RyaWJ1dGlvbnMKKworY29tbWl0IGQ1NWJkNGUwNTQ5ZjAzYjZmZDMyNTYyYzJhYTdmZTM5MjcyYTllZjcKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTkgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCBhYzJhZWQzYzk0YmIyZWJiNDczYWYwYTFlMjBmMDU2MWFkNjI5OTU2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjExIDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgNDAwNzkyMDU5NjdiOGU1YWVlZGIxOWZhM2NiMmU3YjJmNzk4ODU3NworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNyAyMTo1Mzo0NyAyMDExIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZAorCitjb21taXQgY2YxNGEyMjg1ODNhZmYzYzVhYjJmMGQ0NGMyZjRjMGZhNWJkNjZhZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNyAyMTo1MzoxOCAyMDExIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEKKworY29tbWl0IDEwMTRkZDhkZmI0OGE1YmQwNTNmMDQ1NDFlYjk3MjhmMGJlMDdmNDcKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMjE6NDU6MDQgMjAxMSAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xCisKK2NvbW1pdCAxOGQxMTZiYTM4OGMxZGM5NDk1Mjg4ODRiYjAwNjk4ZjFiYWNhYTk0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI3IDIxOjExOjUyIDIwMTEgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEKKworY29tbWl0IDQ2ZWFjMDJlOWEyN2JmNGYzMDY4ZTc5NWNhYjg5MWYwNWE4NDg4NzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMjE6NDk6MjcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEF2b2lkIHRoYXQgc25tcGQgY3Jhc2hlcyBpZiBzdGFydGVkIG9uIGEgc3lzdGVtIHdpdGggYW5vdGhlciBPcGVuU1NMIGxpYnJhcnkgdmVyc2lvbiB0aGFuIHRoZSBvbmUgaXQgaGFzIGJlZW4gYnVpbHQgd2l0aC4KKworY29tbWl0IGE1ZjA2NGRkODI5OTZlMmJlM2YxZTk2MTY3MDNhZDAzOTVmYjVhYmEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBTZXAgMjIgMDc6MzM6MDEgMjAxMSAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnJjMworCitjb21taXQgNTY5Nzk0ZmNlYjk5ZWVkN2JlODE3YzY0Zjg1Y2Q5NDVjYWY5OTU5MgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IFNlcCAyMiAwNzoyMDowNyAyMDExIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMworCitjb21taXQgYzU1ZjYwOGYxNmYxNjBmNWU3OWRjMDU3Zjg4NzhkZWY0NjI5NzNlMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBTZXAgMjIgMTA6MzU6MjQgMjAxMSArMDEwMAorCisgICAgRml4IHRoZSBjb2RlIGZvciBwb3B1bGF0aW5nIHRoZSB0YWJsZV90ZGF0YSBjYWNoZSwKKyAgICBhbmQgY2xhcmlmeSBhcmVhcyBuZWVkaW5nIE1JQi1zcGVjaWZpYyBhZGRpdGlvbnMuCisKK2NvbW1pdCAxMzc2M2NmMmM3MWJmOTNmZWMwOTZlZWUwMDQ4NTdjMTViMmNmZmZmCitBdXRob3I6IFN0ZXZlIEZyaWVkbCA8c3RldmVAdW5peHdpei5uZXQ+CitEYXRlOiAgIFRodSBTZXAgMjIgMTA6MDY6NDUgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IDM0MDk2OTI6IENhbGN1bGF0ZSBkaXNrIHBlcmNlbnRhZ2UgdXNhZ2UgdmlhIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMKKyAgICB0byBhdm9pZCBpbnRlZ2VyIGFyaXRobWV0aWMgZXJyb3JzLgorICAgIChDb2RlIGJhc2VkIG9uIHBhdGNoLCByYXRoZXIgdGhhbiBhcHBsaWVkIHZlcmJhdGltKQorCitjb21taXQgZWUwZDNhZGIwNzgyOTFiNzQzYzllY2I3NmQyMGI1OTFiN2IxNTk3MgorQXV0aG9yOiBTdGV2ZSBGcmllZGwgPHN0ZXZlQHVuaXh3aXoubmV0PgorRGF0ZTogICBUaHUgU2VwIDIyIDA5OjU4OjM5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiAzNDA5NjkyOiBDYWxjdWxhdGUgZGlzayBwZXJjZW50YWdlIHVzYWdlIHZpYSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljCisgICAgdG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdyBlcnJvcnMuCisgICAgKENvZGUgYmFzZWQgb24gdGhlIHN1Ym1pdHRlZCBwYXRjaCwgcmF0aGVyIHRoYW4gYXBwbGllZCB2ZXJiYXRpbSkKKworY29tbWl0IDM2N2RhMTRmY2RiMTQ2NTkyZGU2N2MxZDY5OTdhMDk3NzQyNTk2NzMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjIgMDg6MDk6MTcgMjAxMSArMDIwMAorCisgICAgVGhlIG9ubHkgY2hhbmdlIGJldHdlZW4gVjUuNy5yYzEgYW5kIFY1LjcuMS5yYzIgaXMgdGhlIHZlcnNpb24gbnVtYmVyLiBNYWtlIHRoaXMgY2xlYXIgaW4gdGhlIENoYW5nZUxvZyBmaWxlLgorCitjb21taXQgYzI3NmVlYjhmMDQ1NWEwODcwYzRiNDc4ZGRlNjQ4ZTg2NTI5YWRkMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyMSAxMzo1MTo1OCAyMDExIC0wNzAwCisKKyAgICBjaGFuZ2Vsb2cgdXBkYXRlCisKK2NvbW1pdCA2MzA1MDgzODY2NmY2NDVmYzMwNmRjMmVlNGY3M2Y1ZWZjZTYzZmVkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDIxIDEzOjM4OjE4IDIwMTEgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMyCisKK2NvbW1pdCBiYmUyYzE5YTAxZWNlYzAyNGY3NDFlMmU1NDcwMWFlNjIxMmY0YzNlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gU2VwIDQgMTQ6NDQ6MzggMjAxMSArMDIwMAorCisgICAgVGhpcyBzaG91bGQgaGF2ZSBnb25lIG9ubHkgdG8gbWFzdGVyLgorICAgIAorICAgIFJldmVydCAiQ0hBTkdFUzogYnVpbGRpbmc6IENvcnJlY3QgZGVwZW5kZW5jaWVzIC0gc2luY2UgYmY3NGZlYTY5ZjI0ZGM2ZTg1ZjkwOGYzZjQxZDE0MjZiMmUwOTY4OCBzbm1wY29uZiBpcyBsb2NhdGVkIGluIGJ1aWxkZGlyLCBub3Qgc3JjZGlyIgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOWVmYTQ2N2E5NzJiYjZlMWM3ZmJkYWYyZTI3NDI5ZDI5ZjRhYjg5ZS4KKworY29tbWl0IDllZmE0NjdhOTcyYmI2ZTFjN2ZiZGFmMmUyNzQyOWQyOWY0YWI4OWUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBTZXAgNCAxNDowMDoxMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQ29ycmVjdCBkZXBlbmRlbmNpZXMgLSBzaW5jZSBiZjc0ZmVhNjlmMjRkYzZlODVmOTA4ZjNmNDFkMTQyNmIyZTA5Njg4IHNubXBjb25mIGlzIGxvY2F0ZWQgaW4gYnVpbGRkaXIsIG5vdCBzcmNkaXIKKworY29tbWl0IDc4MzU5NjRkMzU5M2U1YzZhMWFlN2RlMGI0MTE0YjdkZjFhZTBmZTEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTk6MjE6NTEgMjAxMSAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnJjMQorCitjb21taXQgY2I2YTBjMGJkNmY4YzJjN2NkNWZkODYwODBkYzYzMjRlN2Y3Mzg1OAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxOToyMDozNSAyMDExIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjEucmMxCisKK2NvbW1pdCBlNWZmMmViODNiYmJlZDkyZGFjNzUxYzVhNjY0M2Q3OGY4MzdjZjljCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE5OjE5OjQ2IDIwMTEgLTA3MDAKKworICAgIGZpeCBDKysgY29tbWVudAorCitjb21taXQgY2IxZjVjZmZjNmZiNTJjMmE2YzBmN2I0MDhhZmViNDdmY2ZlNTVlNAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxOTowOTo1NiAyMDExIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMQorCitjb21taXQgNDIyYjA4MmE5NTkzY2E5YzY1YWFjNDQ5ZTZkMTI4YTllOTdlOTRmYgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxOTowNjo1NiAyMDExIC0wNzAwCisKKyAgICBhZGRlZCA3IGFzIGEgcmMgc2VyaWVzIGJyYW5jaAorCitjb21taXQgNzFjMGQ3NjUwNDkzNzEwNjMxZmEwOGQ1ZGM0ZGFkNTAxYTlhYTc3MQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxNjozNzo0MSAyMDExIC0wNzAwCisKKyAgICBkZWFsIHByb3Blcmx5IHdpdGggaW52ZXJ0ZWQgZXJyb3IgY2FzZXMKKworY29tbWl0IGNmNGNmN2YzMmFkNThmMzI2ZmZlZDUwNDk0NTgzMjMxNjQ4ZDc5ZDIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMjYgMTE6MDg6MDkgMjAxMSAtMDcwMAorCisgICAgYWRkZWQgLmZ0IGFuZCAuZnQuMSBmb3IgZmVhdHVyZSBmaWxlcworCitjb21taXQgNDFiMmNkZTE5ZDIyMjA5YjQ4MzIwNzYxNGUwMjc0ODNjMzcwNjg3NworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxMTowMzoxNSAyMDExIC0wNzAwCisKKyAgICBhdXRvLWRldGVybWluZSBwYXRjaCBhcmd1bWVudHMgaWYgcG9zc2libGUgZm9yIG5zcGF0Y2h0cnkKKworY29tbWl0IDk2YmI1ODljMmU1MDU0ODkwZTk4NzA1YWI1ZjQzMDhhZTZhMTMwYmIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTA6MTM6MDYgMjAxMSAtMDcwMAorCisgICAgbWFrZSBpdCBzbyB0aGUgZ2l0IGNvbW1pdCBsaW5lIGNhbiBiZSBjdXQvcGFzdGUgd2l0aG91dCBsaW5lYnJlYWtzCisKK2NvbW1pdCAzZmUzNmY3YWQ3MWMwOGUxMjg2Y2U4ZTQ4N2U5MzUyZTI3Y2Q5NmNjCitBdXRob3I6IFJvbmFsZCBXYWhsIDxyd2EtY29AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDEwOjEyOjExIDIwMTEgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzOTQ1ODY6IGZyb20gcndhLWNvOiBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiByZWFkX2NvbmZpZyAoK2ZpeCkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDZlNTRjNDEzMWFmNzMxZmY5MDQ2N2E3NWJjYzgxN2M5NTdmOGY3MmEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMDk6NTU6MTQgMjAxMSAtMDcwMAorCisgICAgZGVzY3JpYmUgdGhhdCBuc3JvbGx1cCBuZWVkcyB0byBiZSBydW4gbm93LgorCitjb21taXQgODZlZmVlMjM0MzJjY2IwZDJlMGM3MzZkMzRkYzEwNTExMzBjZGMwZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTA6NTI6MzAgMjAxMSArMDEwMAorCisgICAgQXBwYXJlbnRseSBJUklYIGhhcyBhIGRpZmZlcmVudCBBUEkgZm9yIHN0YXRmcworCitjb21taXQgZjdlMjFmMjYzMzM5MGI3YTI3YzUwMjI3YmVlNmQ4Njk2YWUzZmJjZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAyOSAxNjowMTozMSAyMDExIC0wNzAwCisKKyAgICBkb24ndCBwcm92aWRlIGEgZmVhdHVyZSB3aGVuIHlvdXIgYSBjaGlsZCBvZiBhbm90aGVyIGZlYXR1cmUKKworY29tbWl0IGNhYzIzYzBiMjU3NGU3MjgwYmQxMjhjNjIyNjg3NWFkMGY2YjRiZmMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBBdWcgMjggMDk6Mzg6MTQgMjAxMSArMDIwMAorCisgICAgTWFrZSBzdXJlIHRoYXQgZmVhdHVyZS1kZXRhaWxzLmggZXhpc3RzIGJlZm9yZSB0cnlpbmcgdG8gaW5jbHVkZSBpdAorCitjb21taXQgNzgxZjRjZTJhY2IzNzE1NjA3OTdkOGIyOWE4OWVkMDY3NGU5MzVmOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEF1ZyAyOCAwOTozNjozNiAyMDExICswMjAwCisKKyAgICBVc2UgdGhlIGZlYXR1cmUgdGFyZ2V0IGluc3RlYWQgb2YgdGhlIHRhcmdldCB3aGVuIGJ1aWxkaW5nIHRoZSBmZWF0dXJlIHNldAorCitjb21taXQgMTFiZmY0NzJjYTdiMWZjZmYwYzE2MTg3YTFiOGExMzA5M2JjOTFjNAorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAyOSAwMDozMzo1NSAyMDExICswMjAwCisKKyAgICB0aGUgaXJpeDYgYnVpbGQgb25seSBkZWZpbmVzIGlyaXg2LCBub3QgaXJpeAorCitjb21taXQgM2M3M2ExNDA3YTA4MWQ0MmViZGQ5MWRmYmNiMWU0ZjE1MmI3ZGY0YQorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAyOSAwMDowNToxMyAyMDExICswMjAwCisKKyAgICByZS1hZGQgc29ja2FkZHJfdW4uc3VuX3BhdGggY29uZmlndXJlIGNoZWNrIChsb3N0IGluIHByZXZpb3VzIGNvbW1pdCkKKworY29tbWl0IDJlM2YwMmUwM2FlZDEyNTM4NGJhNGZlM2Q4MzQ5NGQ0M2YzYTI5ZTkKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjggMjM6NTM6MzAgMjAxMSArMDIwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jIGRvZXNuJ3QgYnVpbGQgb24gSVJJWCB5ZXQKKworY29tbWl0IGY5NWFhMzEzNzdkNTcyYjA0OWIwYjMxNmRiYjE2M2JmN2FjYTkzZDUKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjggMjM6MjU6NDAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nIGZpZWxkcyBtc2dfY29udHJvbC9tc2dfZmxhZ3MgaW4gc3RydWN0IG1zZ2hkciAoYmFja3BvcnQpCisKK2NvbW1pdCA3ZjQ3ZDkzNzY1YWEzNWE1ODY4N2ViOWI0ZjlmNzAwZTQzNDNlMTNjCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDI2IDExOjExOjM1IDIwMTEgLTA3MDAKKworICAgIGFkZGVkIHJlcXVpcmVkIGZlYXR1cmVzIGZvciBtZmQgaGFuZGxpbmcKKworY29tbWl0IDliMmU0MmE2ZTA1NTBmYjc4OWM2MDdjMzUyMDg4MGQ0ZGJjMGNmMjQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMjYgMTE6MDg6MDkgMjAxMSAtMDcwMAorCisgICAgYWRkZWQgLmZ0IGFuZCAuZnQuMSBmb3IgZmVhdHVyZSBmaWxlcworCitjb21taXQgMzNkY2JmNTZmYzA2MjZhM2U0ZjEzNTkwOTViZDIxN2QxYTU2Nzc5NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAyNiAxMTowNzo1OCAyMDExIC0wNzAwCisKKyAgICBub193cml0ZV9zdXBwb3J0IHN1cHBvcnRlZAorCitjb21taXQgOTdkNDJlZmQ3NjkzN2NlN2U0YmM0OGE3MmVkNWExMTBlNDIzMTAyZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAyNiAxMDowODo1MSAyMDExIC0wNzAwCisKKyAgICBoYW5kbGUgbm8td3JpdGUtc3VwcG9ydCB3aXRoIGlmZGVmcworCitjb21taXQgZWE4YmVkNzllODFjNDJlMzNjYmYzN2NhNmYzYzAzYzU0OTk4N2IyMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAyNSAwNjo1NjoyMiAyMDExIC0wNzAwCisKKyAgICBpbXBvcnQgc3RkZXJyCisKK2NvbW1pdCBmZDZkODA0ZGMzZTcwM2M0MDU5ZGJlNzc1MDAxYTNiZTliOTMzMDlmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDI1IDA2OjU1OjM4IDIwMTEgLTA3MDAKKworICAgIHVzZSA+PiB0byBwcmludCB0byBzdGRlcnIKKworY29tbWl0IGNlZTAzNTljNmZhZTJiODVkN2I5MzE4NTllNTE3ZDg5Y2UwNzIyYmIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDIzIDIzOjQzOjE5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkOiBEbyBub3QgZ2VuZXJhdGUgYW4gb3V0cHV0IGZpbGUgb24gZmFpbHVyZQorICAgIAorICAgIG1ha2Ugc3VwcG9zZXMgdGhhdCBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkIGlmIHRoZSBjb21tYW5kIGZhaWxlZC4gQ2hhbmdlCisgICAgZmVhdHVyZS1yZW1vdmUgdG8gZm9sbG93IHRoYXQgcHJlc3VtcHRpb24uCisKK2NvbW1pdCBmZTM5ZTcyODhjYTkzMGQyYzlhYWE4MzAxY2M5ZDk1ZjBjMzhmMzZiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAyMTo0ODoxNyAyMDExICswMjAwCisKKyAgICBDb3JyZWN0IHR5cG8KKworY29tbWl0IDFmMDgyYTMxY2QxMzhmMWY1ZTI3YmU2ZDkwYTFkNTc5MGRjMGZmZTQKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjMgMjM6MzU6NDIgMjAxMSArMDIwMAorCisgICAgbWFrZSBzdXJlIHRoYXQgX0tFUk5FTCBpcyBkZWZpbmVkIHRvIDEgc28gdGhhdCAiI2lmIF9LRVJORUwiIHdvcmtzIG9uIHN5c3RlbXMgdGhhdCBuZWVkIGl0IChlLmcuIElSSVgpCisKK2NvbW1pdCAyNmJiMjQ3MGMxMDZmODM0NDQyYTJhZGJjNzYxMWJmMTY2NTdmYmRmCitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDIzIDIzOjIyOjQ0IDIwMTEgKzAyMDAKKworICAgIG1ha2Ugc3VyZSB0aGF0IF9LRVJORUwgaXMgZGVmaW5lZCB0byAxIHNvIHRoYXQgIiNpZiBfS0VSTkVMIiB3b3JrcyBvbiBzeXN0ZW1zIHRoYXQgbmVlZCBpdCAoZS5nLiBJUklYKQorCitjb21taXQgZmM1NTYwYzA1Zjg0ODMyMWRhMGNhMGMyZTg3MDAxZDVmMjI5NTE2NworQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAyMiAxODo1NDozMCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4IGZvciBzeXN0ZW1zIGxhY2tpbmcgZmllbGQgbXNnX2ZsYWdzIGluIHN0cnVjdCBtc2doZHIgKGUuZy4gSVJJWCkKKworY29tbWl0IDk2ZWEyZDFhOGViZmZiMzQ4NjczYTg2NWQ0ODZmMzFlNjM1ZTYyYmQKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMDE6NTE6NDkgMjAxMSArMDIwMAorCisgICAgYXV0b3JlY29uZgorCitjb21taXQgMWEyNjQ4ZWFmNzFjYjAxODk1MTU5NjY4OWM1MTU4OGRjYTgwNjNjNQorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAwMTo0ODo1NyAyMDExICswMjAwCisKKyAgICBhdXRvcmVjb25mCisKK2NvbW1pdCAzZjJmNjFiMGU2MTNkNjEwNWVjZjJjZWIzOTVkZTBiZGUzN2YzY2UzCitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDAxOjQ3OjEzIDIwMTEgKzAyMDAKKworICAgIGF1dG9yZWNvbmYKKworY29tbWl0IGI2MmNiMDg2NGY1NzdiYTg1NTczZDBkMjUwZDEyYTM5Mzg3YzA3YjQKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMDA6NTU6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWl4OiBlbGltaW5hdGUgY29uZmlndXJlIHdhcm5pbmcgcmVnYXJkaW5nIGxpYnBlcmZzdGF0Lmggb24gQUlYIDYuMSBhbmQgdXAKKworY29tbWl0IDcxYjkwYjZmMjE3OTQ0YjRmZmMxODM2ZTUxNjBkNDBlMzNiNDQyM2QKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMDA6NDA6MjggMjAxMSArMDIwMAorCisgICAgZml4IGJyb2tlbiBsaW5lIHdyYXAKKworY29tbWl0IDViNTkwMGE0ZjdkZmVlNmUxZWM4NjllMzIzMTBiODBjYTZmYjIzZmUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMTI6Mjg6MDcgMjAxMSAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnByZTIKKworY29tbWl0IDNiN2UyZTM5OTQ5Zjg4ZDljNTZlZDVmOTk0MDI4Yjk0ODE2YWI3NWMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMTI6MjM6MjggMjAxMSAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4xLnByZTIKKworY29tbWl0IGVjZTYzYmZlNDk5YzYzMGJkYWFlNjIwMDY0OGQyOTE4MGNlM2ExNzkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMTI6MDM6MTcgMjAxMSAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5wcmUyCisKK2NvbW1pdCAyOGI1NDA3MDUxNDc1M2U4ZDhhYmI3MThiMjI0ZDY1N2FiN2E4YWI4CitBdXRob3I6IEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMTE6NDk6NTYgMjAxMSAtMDcwMAorCisgICAgQ0hBTkdFUzogQlNEOiBQQVRDSCAzMzgzOTY1OiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggaWYtbWliIGFnZW50IGNvbXBpbGUgd2FybmluZ3Mgb24gKkJTRAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZjczZTYzNjRiYjM0MDcwNjIyZTlmNDQ4OGNkMDQ4N2QyZmI3NDAyYQorQXV0aG9yOiBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMTE6NDU6MjkgMjAxMSAtMDcwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDMzODkyMjg6IGZyb20gd3VsZjIwMDE6IGluY29tcGxldGUgY29tbWl0IChwYXRjaCAzMzg2NjMzOiBmaXggaW50ZWdlciBvdmVyZmxvdykKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGU2Y2Y4MjA2ZjBjNjc2NTAwMDFlMzRiNTI2YjM3ZjY0ZTRhNTkyOWMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMDk6NDY6MzMgMjAxMSAtMDcwMAorCisgICAgUGF0Y2ggZnJvbSBDbGF1cyBLbGVpbiBvbiAtY29kZXJzIGZvciBmaXhpbmcgbWFuIHBhZ2UgdHlwb3MKKworY29tbWl0IDZhODQxZDU2NTE4YTcyNzE5NmU2NmI1OWU3ZTViMzMwNGY1NGIwYTEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMTggMDg6MzE6MDYgMjAxMSAtMDcwMAorCisgICAgY2hhbmdlZCBjbGllbnRhZGRyIHNvIGl0IHJlZ2lzdGVycyBhcyBwcmUtbWliIHRvIGJlIHBpY2tlZCB1cCBiZWZvcmUgdGhlIHRyYW5zcG9ydHMgZ2V0IGNyZWF0ZWQKKworY29tbWl0IGMwMjEzMWU1YjM1ZDI5Njc1NWJhZWM5OWJkMzYzMjA1YTg2MzA3ZGQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMTcgMDk6MzQ6MDAgMjAxMSAtMDcwMAorCisgICAgZGV0ZWN0IHJlYWxseSBvbGQgdmVyc2lvbnMgb2YgTG9uZy5wbQorCitjb21taXQgNTAwZDZkZTA2YWE0ZmYzMzBhZWU0ZDc0OWE0Y2MzNzdiZWM4OWUwOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAxNyAxODoxMTo0NyAyMDExICswMjAwCisKKyAgICBGaXggdGhlIGxvZyBtZXNzYWdlIHRoYXQgcmVwb3J0cyB0aGF0IGdldGhvc3RieWFkZHIoKSBpcyBtaXNzaW5nCisKK2NvbW1pdCA2NTgwNTU2Y2M3YmQ4MzNhZjczMWI2MmNlMWVkMjAxNzU2NGZlN2ViCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDE3IDE4OjA4OjAxIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IHNubXB0cmFwZDogTWFrZSB0aGUgSVAgYWRkcmVzcyB0byBob3N0bmFtZSBjb252ZXJzaW9uIHdvcmsKKworY29tbWl0IDNjYjNmMWVkZTM4OGQ4NGUzOTJlMWQ4MTVkNTk5NGE0YmYwZjEwZjkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBBdWcgMTQgMDc6NTk6MjUgMjAxMSArMDIwMAorCisgICAgV2luZG93cywgYnVpbGQuYmF0OiBSZXN0b3JlIG9yaWdpbmFsIGJ1aWxkIGFuZCBpbnN0YWxsIG9yZGVyLiBBcHBhcmVudGx5IHRoZSBjb3JyZWN0IG5ldHNubXAuZGxsIGlzIHVzZWQgZHVyaW5nIHRoZSBQZXJsIHRlc3RzIGJ5IHNldHRpbmcgUEFUSCBwcm9wZXJseS4KKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGMxYjVhMDMwZDhmMDQ4NzZjZDViOWFmMDA4Yzg3OWNjNDY4YjIxMmYuCisKK2NvbW1pdCBkYWZmNDlkOWIzMzY5ZWZjYzg3ZjA1ZGM4NTkxMzYyZTgxYTQ1ZmRmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDE4OjQzOjQ4IDIwMTEgKzAyMDAKKworICAgIFdpbmRvd3M6IE1ha2UgdGhlIFBlcmwgYWdlbnQgbW9kdWxlIHdvcmsgYWdhaW4gd2l0aCB0aGUgb3JpZ2luYWwgU05NUF9GUkVFKCkgZGVmaW5pdGlvbi4KKworY29tbWl0IDNjNzNiNDgzOGU2MDViMTUwYmMzMTczMTNmMTRlYjMzNDQ0NzI5ZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMTc6Mzg6MjcgMjAxMSArMDIwMAorCisgICAgUmV2ZXJ0IHRoZSB0d28gbW9zdCByZWNlbnQgU05NUF9GUkVFKCkgY2hhbmdlcyAoY29tbWl0cyA0N2M4ZWYxYjg5YzZjY2I0MjQ3ZDk2MzM0Nzc5MjU5MDhjNjhjMWE1IGFuZCA3ZjQyZDBkOTMzMjA0ODQxNTIyNzE0MjdjYzk4MDhjYmRhNDliYmQwKS4KKworY29tbWl0IDNlNTBjM2UwMGU5ZjMyMWZiNzA4YmM1NzllYjRkYzFhMGYxZTdjNGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMTE6MzE6NDAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHBhc3NfcGVyc2lzdDogIEZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW50cm9kdWNlZCBpbiBjb21taXQgMzFmYTA3Y2Q5ZmZkZTQ2ZDQxZDJiNTgzOGMzZmM0ZDAxNTQ4YmZiNS4KKyAgICAKKyAgICBUaGUgZm9sbG93aW5nIHJhY2UgY29uZGl0aW9uIGNvdWxkIGhhcHBlbjoKKyAgICAtIEEgc3lzdGVtIGNhbGwgZmFpbHMgYW5kIGVycm5vIGlzIHNldCBhY2NvcmRpbmdseSBieSB0aGUgQyBsaWJyYXJ5LgorICAgIC0gU0lHQ0hMRCBoYW5kbGVyIGludm9rZXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxzIGFuZCBoZW5jZSBvdmVyd3JpdGVzIGVycm5vLgorICAgIC0gU0lHQ0hMRCBoYW5kbGVyIGxlYXZlcy4KKyAgICAtIG9yaWdpbmFsIGNvbnRleHQgY2hlY2tzIGVycm5vIGFuZCBmaW5kcyB0aGUgdmFsdWUgZnJvbSB0aGUgc3lzdGVtIGNhbGwgaW52b2tlZAorICAgICAgYnkgdGhlIFNJR0NITEQgaGFuZGxlciBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZCBvcmlnaW5hbGx5LgorICAgIAorICAgIE90aGVyIGZpeGVzIGluY2x1ZGVkIGluIHRoaXMgcGF0Y2g6CisgICAgLSBSZW5hbWVkIGRlaW5pdF9wYXNzX3BlcnNpc3QoKSBpbnRvIHNodXRkb3duX3Bhc3NfcGVyc2lzdCgpIHN1Y2ggdGhhdCB0aGlzCisgICAgICBmdW5jdGlvbiBnZXRzIGNhbGxlZCBkdXJpbmcgYWdlbnQgc2h1dGRvd24uCisgICAgLSBNYWRlIHN1cmUgdGhhdCBzaHV0ZG93bl9wYXNzX3BlcnNpc3QoKSBpcyBjYWxsZWQgYnkgdGhlIFdpbmRvd3Mgc25tcGQuZXhlIHRvby4KKyAgICAtIFdpbmRvd3M6IGF2b2lkIGNhbGxpbmcgQ2xvc2VIYW5kbGUoSU5WQUxJRF9IQU5ETEVfVkFMVUUpLgorICAgIC0gV2luZG93czogYXZvaWQgdGhhdCBjbG9zaW5nIGEgcGFzc19wZXJzaXN0IHBpcGUgdHJpZ2dlcnMgYSBjcmFzaC4KKyAgICAtIFdpbmRvd3M6IHBhc3NfcGVyc2lzdDogY2xvc2UgaGFuZGxlcyBvZiBmaW5pc2hlZCBwcm9jZXNzZXMuCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYworICAgIAl3aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgKKworY29tbWl0IGUxNDdlNGI5Njc1NTIwN2RlMWNlMzA5OTBkNjdiNGI3Yzc2ZGQ0ODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6Mzk6MTQgMjAxMSArMDIwMAorCisgICAgVW5icmVhayB0aGUgV2luZG93cyBidWlsZC4gVGhpcyBpcyBhIGZvbGxvdy11cCBmb3IgY29tbWl0IDFlMTAwMGE4ODE1OTIxYjVlYzJlNzk5N2I1MzU5MmE1NDRiM2RmYzIuCisKK2NvbW1pdCBjMWI1YTAzMGQ4ZjA0ODc2Y2Q1YjlhZjAwOGM4NzljYzQ2OGIyMTJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IGJ1aWxkaW5nIChidWlsZC5iYXQpOiBJbnN0YWxsIG5ldHNubXAuZGxsIGJlZm9yZSBydW5uaW5nIHRoZSBQZXJsIHJlZ3Jlc3Npb24gdGVzdHMgc3VjaCB0aGF0IHRoZSByZWdyZXNzaW9uIHRlc3RzIGFyZSBydW4gd2l0aCB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIG5ldHNubXAuZGxsLgorCitjb21taXQgMWU5ZDIwMDNiYWVkMjI3ZjY4YjY4NTI4ZjFlOTdlNmY1ZWE4NmMxYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBwZXJsIChidWlsZC5iYXQpOiBXaGVuIGluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMsIGluc3RhbGwgdGhlIFBEQiBmaWxlcyB0b28uCisKK2NvbW1pdCBhOGQ5NDAwN2UzMmQwMzcxMDY5MmM4ZjFiNDE3ZDViZGZlMzY1MGZhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEZpeCBQZXJsIHJlZ3Jlc3Npb24gdGVzdCBmYWlsdXJlcworICAgIAorICAgIEFsbCBQZXJsIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBub3cgb24gTGludXggYW5kIG9uIFdpbmRvd3MgKE1TVkMpLgorCitjb21taXQgYjZkMGI0OTAxODFjNmRmOGMxMWVjZjE1NWYxZTZlYWYxMWIxZWM1OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBQZXJsIHJlZ3Jlc3Npb24gdGVzdHM6IERvbid0IGZhaWwgc2tpcHBlZCB0ZXN0cy4KKworY29tbWl0IGNhM2FjZjJiMDcwMzlkOTZhMTE3ZjA5MGY3ZWM3NmI2ZThiNTQxZTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogQWRkIFNOTVA6OmdldGVudigpIGFuZCBTTk1QOjpzZXRlbnYoKS4KKworY29tbWl0IDU2NzU5ZTVhZDUzN2YwMWI0YTUxZTdmZjk5OTRlYzRiNTVjMzIxMzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTQ6NDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG5ldHNubXBfc2V0ZW52KCkuCisKK2NvbW1pdCA5ODQzZTViY2Y0NzI4NzdlODViMDMxYjVlNWRhZmFhOWQ1ZmM2M2M1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMyIDIwMTEgKzAyMDAKKworICAgIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3Q6IGRvY3VtZW50IGhvdyB0byB1c2Ugb24gV2luZG93cworCitjb21taXQgNjA1Nzg2NmI3M2EwMjI3NzFlOTBlOTk2N2RkMjViZGM3MTkyZmJkYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMiAyMDExICswMjAwCisKKyAgICBTZXQgZXhlY3V0ZSBmbGFnIG9uIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3Qgc3VjaCB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhhdCBmaWxlIHdvcmsKKworY29tbWl0IGMyZGFmNTk0MGYyMWExM2U4OTg5ZGQwNTViMTdmMzE4MTExMmY4NTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzIgMjAxMSArMDIwMAorCisgICAgLmdpdGlnbm9yZTogRml4IGEgc3VwcHJlc3Npb24gcGF0dGVybgorCitjb21taXQgMWYwYTkyOGEyOTEzY2ZhN2Y1Y2VhYWY0Njk2YzY5ZmJkYzY4NzYyMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAxMiAwOTowOToxMSAyMDExIC0wNzAwCisKKyAgICBhZGRlZCB0aGUgbWlzc2luZyAtZSBvcHRpb24gdG8gdGhlIGNyZWF0ZVVzZXIgZG9jcworCitjb21taXQgMWUxMDAwYTg4MTU5MjFiNWVjMmU3OTk3YjUzNTkyYTU0NGIzZGZjMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEF1ZyAxMSAxNTo0NjozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogTmV0LVNOTVAgUGVybCBtb2R1bGVzIGJ1aWxkIGFnYWluLgorCitjb21taXQgOTdkNjQzMmY5NWUxY2RjZjZmZDg1ZTdjYTFkMGM1NTU3ZWI2ZDkxOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEF1ZyAxMSAxODoxNjo0NCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBwZXJsOiBNYWtlIHN1cmUgdGhhdCB0aGUgY29uc3RhbnQgU05NUF9ERUZBVUxUX1JFVFJJRVMgaXMgcmVjb2duaXplZC4KKyAgICAKKyAgICBDSEFOR0VTOiBwZXJsOiBTTk1QIG1vZHVsZTogQWRkIGNvbnN0YW50cyBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UgYW5kIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VULgorICAgIAorICAgIFdoZW4gdGhlIE5ldC1TTk1QIFBlcmwgbW9kdWxlcyBhcmUgYnVpbHQgb24gV2luZG93cyB3aXRoIE1TVkMgb3IgTWluR1cgaXQKKyAgICBpcyBwb3NzaWJsZSB0aGF0IGVhY2ggdGhlc2UgYXJlIGxpbmtlZCB3aXRoIGFub3RoZXIgdmVyc2lvbiBvZiB0aGUgTVNWQworICAgIHJ1bnRpbWUgbGlicmFyeSB0aGFuIHRoZSBQZXJsIGludGVycHJldGVyIGl0c2VsZi4gSW4gdGhhdCBjYXNlIHRoZSAiZXJybm8iCisgICAgdmFyaWFibGUgdXNlZCBpbnNpZGUgLnhzIHNvdXJjZSBmaWxlcyBpcyBhbm90aGVyIHZhcmlhYmxlIHRoYW4gdGhlICQhIHZhcmlhYmxlCisgICAgaW4gLnBtIGZpbGVzLiBPcjogYXNzaWdubWVudHMgdG8gImVycm5vIiBpbiBhIC54cyBmaWxlIGRvIG5vdCBtb2RpZnkgdGhlICIkISIKKyAgICBQZXJsIHZhcmlhYmxlIFRoaXMgcGF0Y2ggYXZvaWRzIHVzaW5nICJlcnJubyIgYnkgbW9kaWZ5aW5nIHRoZSBkaWZmZXJlbnQKKyAgICBjb25zdGFudCgpIGZ1bmN0aW9ucyBzdWNoIHRoYXQgdGhlc2UgcmV0dXJuIGEgdHdvLWVsZW1lbnQgYXJyYXkgaW5zdGVhZCBvZgorICAgIHJldHVybmluZyBhIHNjYWxhciBhbmQgc2V0dGluZyBlcnJuby4KKworY29tbWl0IDc2OTA4OTRiN2I4NDY0ZjA1YzdjOTAyYmQ3Y2Y3NTFjYzI2OTk3N2EKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMTAgMDk6MjY6MzcgMjAxMSAtMDcwMAorCisgICAgZG9uJ3QgYXNzZXJ0IG9uIGEgZG91YmxlIGluaXQ7IGp1c3QgZG9uJ3QgZG8gaXQgdHdpY2UKKworY29tbWl0IDQ3YzhlZjFiODljNmNjYjQyNDdkOTYzMzQ3NzkyNTkwOGM2OGMxYTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMTAgMTY6NDQ6MzYgMjAxMSArMDIwMAorCisgICAgU05NUF9GUkVFKCk6IGNhc3QgYXJndW1lbnQgdG8gKHZvaWQgKikgYmVmb3JlIHBhc3NpbmcgaXQgdG8gbmV0c25tcF9mcmVlKCkKKworY29tbWl0IDAyMjAzOTJkODk5YTljYWI3MDFmNzRhZjEyMDMwYmIxZDRjYzVlMmUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKdWwgMSAxMzowMjoxNSAyMDExICswMjAwCisKKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgKi5leGUgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBXaW4zMiBidWlsZAorCitjb21taXQgMDM0NGRmOTJlNDYyZjNiZWM5OTQ2MDhjMzM4MWZjYTUzNDhhYmNkYgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyA4IDE1OjEyOjU1IDIwMTEgLTA3MDAKKworICAgIGZpeCBDKysgY29tbWVudHMKKworY29tbWl0IDA5YTY2MWQ1ZGM2MGM3MzBmZTAzODRiMDJlZDY3MjgzMGVmNzRlMzAKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgOCAxNToxMjo1NSAyMDExIC0wNzAwCisKKyAgICBmaXggQysrIGNvbW1lbnRzCisKK2NvbW1pdCA2OWNiNDJhNGVhMDU4M2NlNmY1ZmY4ZjgzODM1MTZkMzRiYzRjMzQ0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDggMTU6MTI6NTUgMjAxMSAtMDcwMAorCisgICAgZml4IEMrKyBjb21tZW50cworCitjb21taXQgNDQ3ZGRjNjZkOTBkZDllNWMzMTA1YjI2OGI2YTYzYmZjNTgwYjkyNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBdWcgOCAyMjowMzo1OCAyMDExICswMTAwCisKKyAgICBEZWZpbmUgX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiB0b2tlbgorICAgIChhcyBwZXIgQWxleCcgYnVpbGQgaW5zdHJ1Y3Rpb25zKQorCitjb21taXQgYjBhNjJlYjE5NzYzYWI0ZjBiNzc2NDMwMjQyYTYxMTdjY2FlNWRkMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBdWcgOCAyMTo1OToxNyAyMDExICswMTAwCisKKyAgICBEZWZpbmUgX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiB0b2tlbgorICAgIChhcyBwZXIgQWxleCcgYnVpbGQgaW5zdHJ1Y3Rpb25zKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMSAtPiBWNS43LjIucHJlMQorCitjb21taXQgODEwMTg1YWUwYjBjZDJhZDRkNDI0YTFiYTc3NWVmNWNlYWY1MGYwMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA5OjI0OjE5IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5wcmUxCisKK2NvbW1pdCA2MjcxNDcxZTAxMjgyZjM2NzU3MjRlYWYxMzU4Y2ViMGU5NWRkZDRlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6NDAgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5wcmUxCisKK2NvbW1pdCBmY2I3ODJhYTg4OTMxMzRjNzQxNGE5MjZkOTI2ODU5NGY3MjViOTE1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6MTggMjAxMiAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IGUzYmNkODdjNzJmY2VhNzcwNmU4NjhiNWFjZTc1Mjk2MDkzZjc0OTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA5OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBkODEzY2UyZWVlZmM2ODIyOWNmY2FmMjA2MDMyNDRjZGQ2ZDA5ZDNjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxNDowNzo1MiAyMDEyICswMTAwCisKKyAgICBGaXggZGlzdC9yZWxlYXNlIGZvcm1hdAorCitjb21taXQgZmE3YmQ1ODFlMzc4MzY4NWRiMzljOWI0ZWFmODQ3YmU1YWM4NmZkMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+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+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTEgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gU2VwIDI2IDIxOjQ5OjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBdm9pZCB0aGF0IHNubXBkIGNyYXNoZXMgaWYgc3RhcnRlZCBvbiBhIHN5c3RlbSB3aXRoIGFub3RoZXIgT3BlblNTTCBsaWJyYXJ5IHZlcnNpb24gdGhhbiB0aGUgb25lIGl0IGhhcyBiZWVuIGJ1aWx0IHdpdGguCisJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMSAtPiBWNS43LjIucHJlMgorCitjb21taXQgODEwMTg1YWUwYjBjZDJhZDRkNDI0YTFiYTc3NWVmNWNlYWY1MGYwMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA5OjI0OjE5IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5wcmUxCisKK2NvbW1pdCA2MjcxNDcxZTAxMjgyZjM2NzU3MjRlYWYxMzU4Y2ViMGU5NWRkZDRlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6NDAgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5wcmUxCisKK2NvbW1pdCBmY2I3ODJhYTg4OTMxMzRjNzQxNGE5MjZkOTI2ODU5NGY3MjViOTE1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6MTggMjAxMiAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IGUzYmNkODdjNzJmY2VhNzcwNmU4NjhiNWFjZTc1Mjk2MDkzZjc0OTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA5OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBkODEzY2UyZWVlZmM2ODIyOWNmY2FmMjA2MDMyNDRjZGQ2ZDA5ZDNjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxNDowNzo1MiAyMDEyICswMTAwCisKKyAgICBGaXggZGlzdC9yZWxlYXNlIGZvcm1hdAorCitjb21taXQgZmE3YmQ1ODFlMzc4MzY4NWRiMzljOWI0ZWFmODQ3YmU1YWM4NmZkMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+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+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTEgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gU2VwIDI2IDIxOjQ5OjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBdm9pZCB0aGF0IHNubXBkIGNyYXNoZXMgaWYgc3RhcnRlZCBvbiBhIHN5c3RlbSB3aXRoIGFub3RoZXIgT3BlblNTTCBsaWJyYXJ5IHZlcnNpb24gdGhhbiB0aGUgb25lIGl0IGhhcyBiZWVuIGJ1aWx0IHdpdGguCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzMgLT4gVjUuNy4xCisKKzIwMTEtMDktMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xCisKKworMjAxMS0wOS0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucmMzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzIgLT4gVjUuNy4xLnJjMworCisyMDExLTA5LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzMKKworCisyMDExLTA5LTIyICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgMDdmNjFhMDJhMjQwOTA5NmU1Yzk2MmNkMjExMTI2Mzk2YWQwOWQyYiBNZXJnZTogZWUwZDNhZAorCisgYmRhMzI0YiBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBUaHUKKyBTZXAgMjIgMTA6Mzk6NTkgMjAxMSArMDEwMAorCisyMDExLTA5LTIyICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgYzU1ZjYwOGYxNmYxNjBmNWU3OWRjMDU3Zjg4NzhkZWY0NjI5NzNlMSBBdXRob3I6IERhdmUKKworIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgVGh1IFNlcCAyMiAxMDozNToyNCAyMDExCisgKzAxMDAKKworMjAxMS0wOS0yMiAgU3RldmUgRnJpZWRsIDxzdGV2ZUB1bml4d2l6Lm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6IENIQU5HRVM6IHNubXBkOiAzNDA5NjkyOgorCisgQ2FsY3VsYXRlIGRpc2sgcGVyY2VudGFnZSB1c2FnZSB2aWEgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0bworIGF2b2lkIGludGVnZXIgYXJpdGhtZXRpYyBlcnJvcnMuICAoQ29kZSBiYXNlZCBvbiBwYXRjaCwgcmF0aGVyIHRoYW4KKyBhcHBsaWVkIHZlcmJhdGltKQorCisyMDExLTA5LTIyICBTdGV2ZSBGcmllZGwgPHN0ZXZlQHVuaXh3aXoubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzogQ0hBTkdFUzogc25tcGQ6IDM0MDk2OTI6CisKKyBDYWxjdWxhdGUgZGlzayBwZXJjZW50YWdlIHVzYWdlIHZpYSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRvCisgYXZvaWQgaW50ZWdlciBvdmVyZmxvdyBlcnJvcnMuICAoQ29kZSBiYXNlZCBvbiB0aGUgc3VibWl0dGVkIHBhdGNoLAorIHJhdGhlciB0aGFuIGFwcGxpZWQgdmVyYmF0aW0pCisKKzIwMTEtMDktMjIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIENoYW5nZUxvZzogVGhlIG9ubHkgY2hhbmdlIGJldHdlZW4gVjUuNy5yYzEgYW5kIFY1LjcuMS5yYzIgaXMgdGhlCisKKyB2ZXJzaW9uIG51bWJlci4gTWFrZSB0aGlzIGNsZWFyIGluIHRoZSBDaGFuZ2VMb2cgZmlsZS4KKworMjAxMS0wOS0yMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiBjaGFuZ2Vsb2cgdXBkYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzEgLT4gVjUuNy4xLnJjMgorCisyMDExLTA5LTIxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzIKKworCisyMDExLTA5LTA0ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KKworICAgKiA6IGNvbW1pdCA0ZDZkZWZkYWU3MmMzNWIxMDgwMDc2MTgwMzEzZDI5MTA1Njg0NzViIE1lcmdlOiBkM2E3NThjCisKKyAzYjdmZGM0IEF1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+IERhdGU6ICAgU3VuCisgU2VwIDQgMTQ6NDY6MDIgMjAxMSArMDIwMAorCisyMDExLTA5LTA0ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KKworICAgKiA6IGNvbW1pdCBiYmUyYzE5YTAxZWNlYzAyNGY3NDFlMmU1NDcwMWFlNjIxMmY0YzNlIEF1dGhvcjogTWFnbnVzCisKKyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPiBEYXRlOiAgIFN1biBTZXAgNCAxNDo0NDozOCAyMDExCisgKzAyMDAKKworMjAxMS0wOS0wNCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CisKKyAgICogOiBjb21taXQgZDNhNzU4Y2YzMDI1NGI4MDcwNmE0M2YxOTFjMTUyMzhiMmNiNzNjOSBNZXJnZTogYzEwN2NlMAorCisgMjI3ZGJkNyBBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPiBEYXRlOiAgIFN1bgorIFNlcCA0IDE0OjA4OjM1IDIwMTEgKzAyMDAKKworMjAxMS0wOS0wNCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CisKKyAgICogOiBjb21taXQgOWVmYTQ2N2E5NzJiYjZlMWM3ZmJkYWYyZTI3NDI5ZDI5ZjRhYjg5ZSBBdXRob3I6IE1hZ251cworCisgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4gRGF0ZTogICBTdW4gU2VwIDQgMTQ6MDA6MTIgMjAxMQorICswMjAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5wcmUyIC0+IFY1LjcuMS5yYzEKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBmb3IgNS43LjEucmMxCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzogZml4IEMrKyBjb21tZW50CisKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMxCisKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzEwN2NlMDc4NDA5ZDI2NWI5YjIxOGQ0OWYzODE1Yjc5NWRiMWRjMyBNZXJnZTogZWE0YjNiMgorCisgOTE1YWE4ZCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMzAgMTk6MDc6MDcgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0MjJiMDgyYTk1OTNjYTljNjVhYWM0NDllNmQxMjhhOWU5N2U5NGZiIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBBdWcgMzAKKyAxOTowNjo1NiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGVhNGIzYjIzZjM1MDU4M2U1NjI2MzI4YjUzNjdlNmM2MTcyNTVmOTUgTWVyZ2U6IGJjZjM4YjgKKworIGIzNGQ1ZGMgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDMwIDE2OjM4OjI1IDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNzFjMGQ3NjUwNDkzNzEwNjMxZmEwOGQ1ZGM0ZGFkNTAxYTlhYTc3MSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgQXVnIDMwCisgMTY6Mzc6NDEgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiMTNmNGQ4ODg2YjZhNGU3M2JjMDdkZjJiOTBkMWE2MTE1Y2YzZGZjIE1lcmdlOiBmN2UyMWYyCisKKyA2NGU5Nzc4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAzMCAxMTowOTozMCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGI1ZDJhNDNmOTdhNTk4NThjOTQ0ZWJhMjI5MGI1OWI5M2MyMzBhNmEgTWVyZ2U6IDg2ZWZlZTIKKworIGNmNGNmN2YgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDMwIDExOjA5OjI5IDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNi1wYXRjaGVzJyBpbnRvCisKKyBWNS02LXBhdGNoZXMKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdXRvLWRldGVybWluZSBwYXRjaCBhcmd1bWVudHMgaWYKKworIHBvc3NpYmxlIGZvciBuc3BhdGNodHJ5CisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbWFrZSBpdCBzbyB0aGUgZ2l0IGNvbW1pdCBsaW5lIGNhbgorCisgYmUgY3V0L3Bhc3RlIHdpdGhvdXQgbGluZWJyZWFrcworCisyMDExLTA4LTMwICBSb25hbGQgV2FobCA8cndhLWNvQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzOTQ1ODY6IGZyb20KKworIHJ3YS1jbzogZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gcmVhZF9jb25maWcgKCtmaXgpIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogZGVzY3JpYmUgdGhhdCBuc3JvbGx1cCBuZWVkcyB0byBiZSBydW4gbm93LgorCisKKzIwMTEtMDgtMzAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCAyYjkyYTBhMWUzYTA2MThjNTE1ZWJkOTAyMjcxYjk1YzA4OTMxYWZhIE1lcmdlOiBhMDg2MzQ3CisKKyA4NmVmZWUyIEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIFR1ZQorIEF1ZyAzMCAxMToyODoxNCAyMDExICswMTAwCisKKzIwMTEtMDgtMzAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6IEFwcGFyZW50bHkgSVJJWCBoYXMgYQorCisgZGlmZmVyZW50IEFQSSBmb3Igc3RhdGZzCisKKzIwMTEtMDgtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzogZG9uJ3QgcHJvdmlkZSBhIGZlYXR1cmUgd2hlbiB5b3VyIGEKKworIGNoaWxkIG9mIGFub3RoZXIgZmVhdHVyZQorCisyMDExLTA4LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS03LXBhdGNoZXMnIGludG8KKworIFY1LTctcGF0Y2hlcworCisyMDExLTA4LTI4ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KKworICAgKiBhcHBzL01ha2VmaWxlLmluOiBVc2UgdGhlIGZlYXR1cmUgdGFyZ2V0IGluc3RlYWQgb2YgdGhlIHRhcmdldAorCisgd2hlbiBidWlsZGluZyB0aGUgZmVhdHVyZSBzZXQKKworMjAxMS0wOC0yOSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oOiB0aGUgaXJpeDYgYnVpbGQgb25seSBkZWZpbmVzCisKKyBpcml4Niwgbm90IGlyaXgKKworMjAxMS0wOC0yOSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHJlLWFkZCBzb2NrYWRkcl91bi5zdW5fcGF0aAorCisgY29uZmlndXJlIGNoZWNrIChsb3N0IGluIHByZXZpb3VzIGNvbW1pdCkKKworMjAxMS0wOC0yOCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oOiAKKworIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYyBkb2Vzbid0IGJ1aWxkIG9uIElSSVggeWV0CisKKzIwMTEtMDgtMjggIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGEwODYzNDc5ZDgwOTYyYzY1Mjk0N2RmZGVlMTFiZGQxMzZjMGUwMTMgTWVyZ2U6IDUyNTA4OTMKKworIGY5NWFhMzEgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBTdW4gQXVnIDI4IDIzOjM3OjI3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0yOCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4CisKKyBmb3Igc3lzdGVtcyBsYWNraW5nIGZpZWxkcyBtc2dfY29udHJvbC9tc2dfZmxhZ3MgaW4gc3RydWN0IG1zZ2hkcgorIChiYWNrcG9ydCkKKworMjAxMS0wOC0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOiBhZGRlZCByZXF1aXJlZCBmZWF0dXJlcyBmb3IKKworIG1mZCBoYW5kbGluZworCisyMDExLTA4LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAuZ2l0aWdub3JlOiBhZGRlZCAuZnQgYW5kIC5mdC4xIGZvciBmZWF0dXJlIGZpbGVzCisKKworMjAxMS0wOC0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czogbm9fd3JpdGVfc3VwcG9ydCBzdXBwb3J0ZWQKKworCisyMDExLTA4LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6IGhhbmRsZSBuby13cml0ZS1zdXBwb3J0IHdpdGgKKworIGlmZGVmcworCisyMDExLTA4LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1MjUwODkzMjdhYmE3ZDAxZDYzM2M2MzRjNmI2ZjA2ZGU0MmFjYmI4IE1lcmdlOiAxYmIyMzRhCisKKyAwNGZkNzFhIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyAyNSAwNjo1NzoyMSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGVhOGJlZDc5ZTgxYzQyZTMzY2JmMzdjYTZmM2MwM2M1NDk5ODdiMjIgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyAyNQorIDA2OjU2OjIyIDIwMTEgLTA3MDAKKworMjAxMS0wOC0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50LnB5OiB1c2UgPj4gdG8gcHJpbnQgdG8gc3RkZXJyCisKKworMjAxMS0wOC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmU6IENIQU5HRVM6IGJ1aWxkOiBEbyBub3QgZ2VuZXJhdGUKKworIGFuIG91dHB1dCBmaWxlIG9uIGZhaWx1cmUgbWFrZSBzdXBwb3NlcyB0aGF0IG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGNvbW1hbmQgZmFpbGVkLgorIENoYW5nZSBmZWF0dXJlLXJlbW92ZSB0byBmb2xsb3cgdGhhdCBwcmVzdW1wdGlvbi4KKworMjAxMS0wOC0yMSAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmU6IENvcnJlY3QgdHlwbworCisKKzIwMTEtMDgtMjMgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDFiYjIzNGE2Y2MzNmU2YTRlZmJlM2ZiMjljNDgwMjEwZGMyYjljMTMgTWVyZ2U6IDM1YTk4YzMKKworIDFmMDgyYTMgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDIzIDIzOjM4OjA3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0yMyAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6IG1ha2Ugc3VyZSB0aGF0CisKKyBfS0VSTkVMIGlzIGRlZmluZWQgdG8gMSBzbyB0aGF0ICIjaWYgX0tFUk5FTCIgd29ya3Mgb24gc3lzdGVtcyB0aGF0CisgbmVlZCBpdCAoZS5nLiBJUklYKQorCisyMDExLTA4LTIzICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAzNWE5OGMzZDdjNWEzYzVkZjM1NmFkZDllOGI4MDgyODc4OTliNjlhIE1lcmdlOiAxZjM3ZjU3CisKKyBhMjdmNzQ0IEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAyMyAyMzozMDoyNyAyMDExICswMjAwCisKKzIwMTEtMDgtMjMgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI2YmIyNDcwYzEwNmY4MzQ0NDJhMmFkYmM3NjExYmYxNjY1N2ZiZGYgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEF1ZyAyMyAyMzoyMjo0NAorIDIwMTEgKzAyMDAKKworMjAxMS0wOC0yMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhdXRvcmVjb25mCisKKworMjAxMS0wOC0yMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeAorCisgZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZCBtc2dfZmxhZ3MgaW4gc3RydWN0IG1zZ2hkciAoZS5nLiBJUklYKQorCisyMDExLTA4LTIxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IGF1dG9yZWNvbmYKKworCisyMDExLTA4LTIxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IGF1dG9yZWNvbmYKKworCisyMDExLTA4LTIxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IGF1dG9yZWNvbmYKKworCisyMDExLTA4LTIxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiNjJjYjA4NjRmNTc3YmE4NTU3M2QwZDI1MGQxMmEzOTM4N2MwN2I0IEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBBdWcgMjEgMDA6NTU6MzMKKyAyMDExICswMjAwCisKKzIwMTEtMDgtMjEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDcxYjkwYjZmMjE3OTQ0YjRmZmMxODM2ZTUxNjBkNDBlMzNiNDQyM2QgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEF1ZyAyMSAwMDo0MDoyOAorIDIwMTEgKzAyMDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnByZTEgLT4gVjUuNy4xLnByZTIKKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBmb3IgNS43LjEucHJlMgorCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5wcmUyCisKKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMDMwNTM0Nzk2MDRiYzgzZWZiZWE1NzliNDU2MmIxODMxY2VhMWNiNiBNZXJnZTogZjczZTYzNgorCisgZDk0ZGYzOSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgMTggMTE6NTc6NDYgMjAxMSAtMDcwMAorCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyOGI1NDA3MDUxNDc1M2U4ZDhhYmI3MThiMjI0ZDY1N2FiN2E4YWI4IEF1dGhvcjogR2FycmV0dAorCisgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyAxOAorIDExOjQ5OjU2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0xOCAgVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzogQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDMzODkyMjg6CisKKyBmcm9tIHd1bGYyMDAxOiBpbmNvbXBsZXRlIGNvbW1pdCAocGF0Y2ggMzM4NjYzMzogZml4IGludGVnZXIKKyBvdmVyZmxvdykgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6IFBhdGNoIGZyb20gQ2xhdXMgS2xlaW4gb24gLWNvZGVycyBmb3IgZml4aW5nCisKKyBtYW4gcGFnZSB0eXBvcworCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IGNoYW5nZWQgY2xpZW50YWRkciBzbyBpdCByZWdpc3RlcnMgYXMgcHJlLW1pYgorCisgdG8gYmUgcGlja2VkIHVwIGJlZm9yZSB0aGUgdHJhbnNwb3J0cyBnZXQgY3JlYXRlZAorCisyMDExLTA4LTE3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjMDIxMzFlNWIzNWQyOTY3NTViYWVjOTliZDM2MzIwNWE4NjMwN2RkIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBBdWcgMTcKKyAwOTozNDowMCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IEZpeCB0aGUgbG9nIG1lc3NhZ2UgdGhhdCByZXBvcnRzIHRoYXQKKworIGdldGhvc3RieWFkZHIoKSBpcyBtaXNzaW5nCisKKzIwMTEtMDgtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDE4MmUxZGMwYzNlYWNmYTRlOWNjZGIyODYwMGZmMGYyMzcwMjExYWUgTWVyZ2U6IDQ5OWI3OTYKKworIDUxN2I2YjAgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnCisgMTcgMTg6MDk6MzAgMjAxMSArMDIwMAorCisyMDExLTA4LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2NTgwNTU2Y2M3YmQ4MzNhZjczMWI2MmNlMWVkMjAxNzU2NGZlN2ViIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcgMTcgMTg6MDg6MDEgMjAxMSArMDIwMAorCisyMDExLTA4LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA0OTliNzk2Y2JkNzgwNjVjMzM1NDc3OTEzNmJkM2Q5ZDFmNTQ4YTU4IE1lcmdlOiAwNDE4ZmYwCisKKyBhOWNiMjY3IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZworIDE0IDA4OjAyOjM4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgM2NiM2YxZWRlMzg4ZDg0ZTM5MmUxZDgxNWQ1OTk0YTRiZjBmMTBmOSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnIDE0IDA3OjU5OjI1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogcGVybC9PSUQvT0lELnhzLCBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC54czogV2luZG93czoKKworIE1ha2UgdGhlIFBlcmwgYWdlbnQgbW9kdWxlIHdvcmsgYWdhaW4gd2l0aCB0aGUgb3JpZ2luYWwgU05NUF9GUkVFKCkKKyBkZWZpbml0aW9uLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwNDE4ZmYwY2RhMjE0MTFhNDdmYTg5NzhjM2UwZDA0M2ExOWQyNGI2IE1lcmdlOiAyNmIwYWEzCisKKyAzYzczYjQ4IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEF1ZworIDEzIDE4OjQyOjA1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6IFJldmVydCB0aGUgdHdvIG1vc3QgcmVjZW50CisKKyBTTk1QX0ZSRUUoKSBjaGFuZ2VzIChjb21taXRzCisgNDdjOGVmMWI4OWM2Y2NiNDI0N2Q5NjMzNDc3OTI1OTA4YzY4YzFhNSBhbmQKKyA3ZjQyZDBkOTMzMjA0ODQxNTIyNzE0MjdjYzk4MDhjYmRhNDliYmQwKS4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMjZiMGFhMzAxMGZhMTgyYjYwMzlhOGMyY2FkOGNjYjQ1NzE2NTJkZSBNZXJnZTogMmYzZDYwNworCisgMGM4ZTFhOSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBBdWcKKyAxMyAxMTo0MzoyMCAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDNlNTBjM2UwMGU5ZjMyMWZiNzA4YmM1NzllYjRkYzFhMGYxZTdjNGQgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEF1ZyAxMyAxMTozMTo0MCAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDJmM2Q2MDc5ZGMzNmFhZDk1NTlkOTFjNWMzMjRlMmNlNTM1NTczZGQgTWVyZ2U6IGUzMmFhOTcKKworIGZmMTczNGQgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgQXVnCisgMTMgMDk6MDg6MDYgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBlMTQ3ZTRiOTY3NTUyMDdkZTFjZTMwOTkwZDY3YjRiN2M3NmRkNDgzIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBBdWcgMTMgMDg6Mzk6MTQgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB3aW4zMi9idWlsZC5wbDogQ0hBTkdFUzogV2luZG93czogYnVpbGRpbmcgKGJ1aWxkLmJhdCk6IEluc3RhbGwKKworIG5ldHNubXAuZGxsIGJlZm9yZSBydW5uaW5nIHRoZSBQZXJsIHJlZ3Jlc3Npb24gdGVzdHMgc3VjaCB0aGF0IHRoZQorIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHJ1biB3aXRoIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgbmV0c25tcC5kbGwuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHdpbjMyL01ha2VmaWxlLmluOiBDSEFOR0VTOiBXaW5kb3dzOiBwZXJsIChidWlsZC5iYXQpOiBXaGVuCisKKyBpbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLCBpbnN0YWxsIHRoZSBQREIgZmlsZXMgdG9vLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgcGVybC9TTk1QL3QvYXN5bmMudCwgcGVybC9TTk1QL3QvY29uZi50LCBwZXJsL1NOTVAvdC9taWIudCwgCisgICAgICBwZXJsL2FnZW50L3Rlc3QucGw6IENIQU5HRVM6IHRlc3Rpbmc6IEZpeCBQZXJsIHJlZ3Jlc3Npb24gdGVzdAorCisgZmFpbHVyZXMgQWxsIFBlcmwgcmVncmVzc2lvbiB0ZXN0cyBwYXNzIG5vdyBvbiBMaW51eCBhbmQgb24gV2luZG93cyAoTVNWQykuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHBlcmwvU05NUC90L2FzeW5jLnQsIHBlcmwvU05NUC90L2J1bGt3YWxrLnQ6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBQZXJsIHJlZ3Jlc3Npb24gdGVzdHM6IERvbid0IGZhaWwgc2tpcHBlZCB0ZXN0cy4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOiBDSEFOR0VTOiBwZXJsOiBBZGQKKworIFNOTVA6OmdldGVudigpIGFuZCBTTk1QOjpzZXRlbnYoKS4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEFkZCBuZXRzbm1wX3NldGVudigpLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0OiBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0OiBkb2N1bWVudCBob3cgdG8KKworIHVzZSBvbiBXaW5kb3dzCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3Q6IFNldCBleGVjdXRlIGZsYWcgb24gbG9jYWwvcGFzc19wZXJzaXN0dGVzdAorCisgc3VjaCB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhhdCBmaWxlIHdvcmsKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogRml4IGEgc3VwcHJlc3Npb24gcGF0dGVybgorCisKKzIwMTEtMDgtMTIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGUzMmFhOTc3NDIyMzJjZWQzYTcyZjhiODQ1YWNlNWNlM2Q1M2I4ZGYgTWVyZ2U6IDRhZGZlYzgKKworIDg2ZmJkMzMgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBGcmkgQXVnIDEyIDA5OjExOjE0IDIwMTEgLTA3MDAKKworMjAxMS0wOC0xMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYTczZWI0MGVjMjYzYTBmZGY1M2E3NGU3MjBkZGY0MWM0YTdlZTNkNCBNZXJnZTogNzY5MDg5NAorCisgMjk0MGVlMyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIEZyaSBBdWcgMTIgMDk6MTE6MTMgMjAxMSAtMDcwMAorCisyMDExLTA4LTEyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAxZjBhOTI4YTI5MTNjZmE3ZjVjZWFhZjQ2OTZjNjlmYmRjNjg3NjIxIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIEZyaSBBdWcgMTIKKyAwOTowOToxMSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDRhZGZlYzgxMjE2ZjZjNWJmMjVjOWFjNmIyYjc0NzhkMWJlOGU4NDIgTWVyZ2U6IDI4MWI4NjkKKworIDI5NDBlZTMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgMTEgMTg6NTc6MjkgMjAxMSArMDIwMAorCisyMDExLTA4LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxZTEwMDBhODgxNTkyMWI1ZWMyZTc5OTdiNTM1OTJhNTQ0YjNkZmMyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcgMTEgMTU6NDY6MzIgMjAxMSArMDIwMAorCisyMDExLTA4LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyODFiODY5NjFiMTAyNjZkZGYzODgzOTQyZDRkYzNiNmI5OGQzMjI3IE1lcmdlOiBkOGQyMjVjCisKKyBmMTgxMDk5IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDExIDE4OjQ2OjA2IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBNZXJnZSBWNS00LXBhdGNoZXMuCisKKworMjAxMS0wOC0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jOiBkb24ndCBhc3NlcnQgb24gYSBkb3VibGUKKworIGluaXQ7IGp1c3QgZG9uJ3QgZG8gaXQgdHdpY2UKKworMjAxMS0wOC0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZDhkMjI1Y2EzNGE4ZjIyNzUyMTUzYWNiNzk0NGY5NDM1ZjU2NGQyYyBNZXJnZTogMDZiNDE4NgorCisgNDdjOGVmMSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcKKyAxMCAxODowNToyMSAyMDExICswMjAwCisKKzIwMTEtMDgtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOiBTTk1QX0ZSRUUoKTogY2FzdCBhcmd1bWVudCB0bworCisgKHZvaWQgKikgYmVmb3JlIHBhc3NpbmcgaXQgdG8gbmV0c25tcF9mcmVlKCkKKworMjAxMS0wOC0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMDZiNDE4NjVlYzMwMmMzOTMxYjEwODNkM2ZkZTg5ZjkzNDVlYzA2ZiBNZXJnZTogMTE0MjZmYgorCisgYTRmNmFjNyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgOSAwNjo0NDo0MSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDExNDI2ZmIzYzZmMzI3ODIwYjliYjg2YTc2ZWNjOWUyYzM3ZTc5MzQgTWVyZ2U6IDAzNDRkZjkKKworIDliZjA2ODEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDkgMDY6NDQ6MTEgMjAxMSAtMDcwMAorCisyMDExLTA4LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA5YmYwNjgxMjE4ZWRmNDNjZGI1ZmM2OGYxNzIxMjNiYzRhMmQwMTg4IE1lcmdlOiBmOWRiNjExCisKKyBjY2IwZWI2IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEF1ZworIDkgMDg6MTk6MzMgMjAxMSArMDIwMAorCisyMDExLTA4LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkZTdlMzQ4ZWNlMDNkMjM4MGMyYTg4MDZlYmJhZDVkOWI1NDg3NjgyIE1lcmdlOiBkNTM4YmNiCisKKyBjY2IwZWI2IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEF1ZworIDkgMDg6MDc6MjIgMjAxMSArMDIwMAorCisyMDExLTA4LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwMjIwMzkyZDg5OWE5Y2FiNzAxZjc0YWYxMjAzMGJiMWQ0Y2M1ZTJlIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgMSAxMzowMjoxNSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVMsIE5FV1M6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5wcmUxCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucHJlMQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IGZpeCBDKysgY29tbWVudHMKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBmaXggQysrIGNvbW1lbnRzCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogZml4IEMrKyBjb21tZW50cworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IGZpeCBDKysgY29tbWVudHMKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLAorICAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbTogVmVyc2lvbiBudW1iZXIgdXBkYXRlOgorCisgNS43LjEucHJlMQorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS50b3A6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5wcmUxCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgY2Y0Y2NlNGMxODljZjQ3ZjRjNDg5ZGI0M2I3ZmE1MTBmODkwNmExYSBNZXJnZTogZGY5MWE5ZgorCisgOTNlOTdkYyBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24KKyBBdWcgOCAyMjoxNToyOCAyMDExICswMTAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS02LXBhdGNoZXMnIGludG8KKworIFY1LTYtcGF0Y2hlcworCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIAorICAgICAgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjogRGVmaW5lCisKKyBfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIHRva2VuIChhcyBwZXIgQWxleCcgYnVpbGQKKyBpbnN0cnVjdGlvbnMpCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiwgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOiBEZWZpbmUKKworIF9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04gdG9rZW4gKGFzIHBlciBBbGV4JyBidWlsZAorIGluc3RydWN0aW9ucykKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZGYxNmRjMjIyMWU5OTNkZDNjNjY2NTBkNWU4NzI1NzdmZmU2YzAxYiBNZXJnZTogNzE0YmM4MgorCisgOGU1YTI4ZCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMzo1Njo0MyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGZmYTA1YjA1MWFjM2UyYjE5NzE5NWE5OTg5Y2M3YTkxZmU4ZDkyODIgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyA4IDEzOjU1OjM4CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgNzE0YmM4MmZhMDFlMjFhMzY1NTgyNDk2M2ZhNTRlOWI4MDQyZmZiMCBNZXJnZTogNmZlOGZlNQorCisgM2VmMWRiNSBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24KKyBBdWcgOCAyMToyMTo0NiAyMDExICswMTAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCBiNDUxNjA3ZGNhMDE1YzExMWU5NmZkZmViMmRkYjA2NjFmYjRmNzI0IEF1dGhvcjogRGF2ZQorCisgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24gQXVnIDggMjE6MjA6MzIgMjAxMQorICswMTAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDZmZThmZTUyOTRhNDViYzdlNGVhMzc1MWExYWQ3YWE0N2I1Y2FiYjIgTWVyZ2U6IDM2NGY4ZmYKKworIGY2OWFiZTMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAyMjowMjozOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGM5NDgxMzA0NGE0YzRhNjA4ZTk4ZTgwMjIzMDc1YzZmYWYwNGVlMTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDIxOjU2OjE1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMzY0ZjhmZmFlYjkwYjRlYjAxNjVmYzg1NTY4OGNkMDYyNjYzMjc5NCBNZXJnZTogMzI4NzI5NQorCisgN2FiYjkyNiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMToyNDoyNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTYtcGF0Y2hlcycgaW50bworCisgVjUtNi1wYXRjaGVzCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZGlzcGxheSB0aGUgYnJhbmNoIHdlJ2xsIGNvbW1pdCB0bworCisKKzIwMTEtMDgtMDggIFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMzg2NjMzOgorCisgZnJvbSB3dWxmMjAwMTogZml4IGludGVnZXIgb3ZlcmZsb3cgaW4gZGlzayBwZXJjZW50IGNhbGN1bGF0aW9ucyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODRhNzc1ZDA1NTdmZWE5NzU3MGU0MTcxNWEzMTY0OTcwYjRjMDNhMiBNZXJnZTogNmZmZjFjMQorCisgZDM3M2M0ZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDIwOjEyOjMyIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzODcxMzk6IGZyb20KKworIHlhYmVyYXVuZXlhOiBBdm9pZCBzZWdmYXVsdCBpZiB0cmFwc2VzcyB0cmFuc3BvcnQgZWxlbWVudCBjYW50IGJlCisgcGFyc2VkIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG5zc2ZwYXRjaGFwcGx5OiBzcGxpdCB0aGUKKworIGRpc3BsYXllZCBnaXQgY29tbWl0IGNvbW1hbmQgaW50byBtdWx0aXBsZSBzZWdtZW50cworCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzM4Njk2MToKKworIE1ha2UgU05NUCBHRVQgd29yayBpbiBhbiBBZ2VudFggc3ViYWdlbnQgaWYgd3JpdGUgc3VwcG9ydCBpcworIGRpc2FibGVkIHZpYSBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKE1hcmsgUnVzaykuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeCBhIGNyYXNoIHRoYXQgY291bGQgYmUKKworIHRyaWdnZXJlZCBieSBjYWxsaW5nIF9taWJpbmRleF9hZGQoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgbm90CisgZXF1YWwgdG8gLTEuCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDZmZmYxYzFhZTUxYjA2YzlkODBmYWYxNTM3M2E5NjNkMTczZjE0ZTggTWVyZ2U6IDgzN2M1MmUKKworIDhjYzkwMDQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6NTg6NTkgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4Y2E3ZmYxZTY5MmNhZWM0MTg2Yjc4OGM5YWUyZDI3YmUyMTMyOTBmIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgOCAxMDozMzo1NgorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjhmNTI5Y2JhMjdjMDExNGI0Y2I3MzQwY2ZkNDQ5NTA0ZmEwNzUwNiBNZXJnZTogMDgyMmYyZAorCisgNTU2ZTkzOCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDowNTozNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZml4IGZ1bmN0aW9uIG5hbWUgdHlwbworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI5ODgyYTA3OGE5NTlhMGY3OGIwM2UwMTk2OGYxZDE3YjdmNmEyOTkgTWVyZ2U6IDVlOWJkMmYKKworIDA0MDljMGEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6MDM6MzQgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZSBvZiBwdWxsL3B1c2gKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1ha2UgbnNwdWxsL25zcHVzaCBjaGVjayBmb3IgYQorCisgY2xlYW4gcmVwbworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG5ldyBmdW5jdGlvbiAibnNtYWtlYWxsIiB0byB0ZXN0CisKKyBidWlsZGluZyBvbiBldmVyeSBicmFuY2gKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBkZWZhdWx0IHRvIG1lcmdlCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNy1wYXRjaGVzJyBpbnRvCisKKyBWNS03LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6IENIQU5HRVM6IFdpbmRvd3M6IEF2b2lkIHRoYXQgaWYKKworIHRoZSBOZXQtU05NUCBQZXJsIG1vZHVsZXMgaGF2ZSBiZWVuIGJ1aWx0IHdpdGggYW5vdGhlciB2ZXJzaW9uIG9mCisgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gdGhhbiBBY3RpdmVQZXJsIHRoYXQgdXNpbmcgb25lIG9mIHRoZXNlIFBlcmwKKyBtb2R1bGVzIHRyaWdnZXJzIGEgIkZyZWUgdG8gd3JvbmcgcG9vbCIgY3Jhc2guIFRoaXMgcmVncmVzc2lvbiB3YXMKKyBjYXVzZWQgYnkgY29tbWl0IDNiMTRjNTljZjgyNzhkNDEwMjA3ZmY0MmRlYmRhMjYzNjQyNmE0NjggKHRoZQorIG5ldHNubXBfZnJlZSgpIGludG8gU05NUF9GUkVFKCkgY2hhbmdlcyBpbiB0aGUgKi54cyBmaWxlcykuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGUxMDk1Mzk5MzA3MDNjYjMwNTJkNTI0MWIxOGFjNmZjMDYyZmFhY2EgTWVyZ2U6IDBjOWI2Y2IKKworIGU0NmIxNzAgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAxODozNDoxMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeCBhIGNyYXNoIHRoYXQgY291bGQgYmUKKworIHRyaWdnZXJlZCBieSBjYWxsaW5nIF9taWJpbmRleF9hZGQoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgbm90CisgZXF1YWwgdG8gLTEuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDdmNDJkMGQ5MzMyMDQ4NDE1MjI3MTQyN2NjOTgwOGNiZGE0OWJiZDAgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDA5OjUwOjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGM5YjZjYmU5ZGJlMmVjNTIxN2E5NWI2NzgxZmQ3ZGMxZjZlYmRhNyBNZXJnZTogZmE2Y2VmNQorCisgOTYzMzIwZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDE4OjE0OjM2IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTNiODY1NGEyMzJjNTYzYmM5N2NjOTkyNWNkOTg1OTBhMzBjNWJjNSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMTc6MjQ6MTggMjAxMSArMDIwMAorCisyMDExLTA4LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmYTZjZWY1Y2E5MWRmM2EwYjAzNDU1YjY4NTU5ZDJiZWUyNDgxMDFjIE1lcmdlOiBmNWZlNTM2CisKKyA4YWRkMGRhIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZworIDcgMTA6MTg6NTQgMjAxMSArMDIwMAorCisyMDExLTA4LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhMGRkM2NhZjI1OTI2ZTQzNDY1NzE4YmY0MTdhNDY0YzJmYjM2MzY2IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcgNyAxMDoxNzowMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IDMyIGlzIHRvbyBsaW1pdGVkIGZvcgorCisgYmlnZ2VyIHRhYmxlczsgaW5jcmVhc2UgdGhlIG1heCBtc2cgY291bnQgdG8gMTI4CisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbWFrZSByb2xsdXAgYW5kIHN5bmMgc3VwcG9ydAorCisgLS1yZWJhc2UgYW5kIGNoYW5nZSB0aGUgZGVmYXVsdCBiYWNrIHRvIG1lcmdlCisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luMzI6IERvY3VtZW50ZWQgaG93IHRvIHVzZSBidWlsZC5iYXQgd2l0aAorCisgT3BlblNTTCBlbmFibGVkCisKKzIwMTEtMDctMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luZG93czogUmVtb3ZlIG91dGRhdGVkIGluc3RydWN0aW9ucyBhYm91dAorCisgZWRpdGluZyB3aW4zMlxsaWJzbm1wX2RsbFxsaWJzbm1wLmRlZiBmcm9tIFJFQURNRS53aW4zMgorCisyMDExLTA3LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbjMyOiBEb2N1bWVudCBob3cgdG8gYnVpbGQgNjQtYml0CisKKyBleGVjdXRhYmxlcyBmb3IgdGhlIHg2NC9hbWQ2NCBhcmNoaXRlY3R1cmUKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZjVmZTUzNmU4ZmQ2YzQ4ZmUyNDNkZWNkMzFmYWM5Y2YxYzkyZjRjYyBNZXJnZTogNzg1MGVhMQorCisgODA5MjhhOCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDE1OjEzOjI3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODA5MjhhODkwOWNmYWIzN2YwMWIzOWEwNzFhM2U4YWQ4NTk1NjIyMiBNZXJnZTogZjE2YTA5NAorCisgMGRiYzg2OSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEzOjU3OjMwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGRiYzg2OWZlYzA3ZDhlOTBkYmQxYzk1NDkzZWU3Y2JjNjIzYzk1YyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTI6NDA6MzEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQKKworIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLmRlZiBhbmQgcGVybC9TTk1QL3QKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODZjMWUyYjk2NzlmZWMyY2Q3OTliYTc2MDA1YzNkNjBlOWQ0NzYzNCBNZXJnZTogYmNkODYzNQorCisgZjE2YTA5NCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEyOjIwOjUwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMmY4ZDRmNTc5NmNiYzFjN2U5NjdhY2RhYTgwMTliMjRmMTUyMGEzNiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTI6MDI6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcyAtIHJldmVydCBjb21taXQKKworIGQyYzQ3NjhiZDJlZmI0ODY2NDQzNGE4MzE0MjVjMmRkYTg1ZDcxMzMgKENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENICisgMzM2MjIzMzogZnJvbSB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUKKyBub2lzZSkuCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmg6IAorCisgVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzIGJyYW5jaCAtIHdhcyBicm9rZW4gYnkgY29tbWl0CisgYmY3MTc4YjBiMjI1ODdkNDNkMWE4MGMyNjljZDIxNmJkNTkzMDIxNCAoYWdlbnQ6IGNoYW5nZSB0eXBlIG9mCisgc25tcF9lbmFibGVhdXRoZW50cmFwcyB0byBsb25nKQorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oOiBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMKKworIGJyYW5jaCAtIHdhcyBicm9rZW4gYnkgY29tbWl0CisgMGU2ODQyZmUwODBjZWM4NTNiMDhjZDIzMjMwMTVhYmFiYzM4MWNlMSAoQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSAorIDMzODM0NDE6IGZyb20gc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZgorIGZyZWVkIG1lbW9yeSkuCisKKzIwMTEtMDgtMDUgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IG1pbm9yIE5FV1MgcG9saXNoCisKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYmNkODYzNTA3MTM4MjI5NjNkMzc2ZWZmNTgyYTkyZjQzZTQyNmQ2YyBNZXJnZTogOWM4MTBhMworCisgN2EyMGY3MSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEwOjI4OjU1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgM2FhOTQ5ZmJkZmMxYTk0YTgzNDBhZDhiYWY4YjMxNDc1NmEwYmI5ZCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTA6MjY6MTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5YzgxMGEzYjM3YjY4NTczYzQwMzM3ZTI0NmUyZmFmMjk5Yjc3ZDMxIE1lcmdlOiA3MWNiMmU4CisKKyA2MTBkNjNmIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDEwOjQyOjA4IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOTQzOTMwZTFlMTI0Mzg1ZmQ5NDczOGI2ZGNkYTM3ZDI5ZGM3YWM3ZiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDQgMTA6NDE6NDEKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDRlZGNiODhkYWU4YjJlNTlkYzY4M2U4MGQ0MTRmYTdlY2VjMzY4ODUgTWVyZ2U6IDY1ZjNlZWYKKworIDJkZDllZDAgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMTA6MjQ6MTEgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS01LXBhdGNoZXMnIGludG8KKworIFY1LTUtcGF0Y2hlcworCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiYzVjYTAzYTA0YWIxOWM2MzRhMzRkMDYwYjBiMTZiNzQ4NGNiNTIwIE1lcmdlOiA4OGZkZGI3CisKKyA5MGMwZTc1IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTk6MTM6MDcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHVzbS5jOiBzbm1wdXNtOiBGaXggcmVjZW50bHkKKworIGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMS0wOC0wNCAgU3R1YXJ0IEhlbmRlcnNvbiA8dDBqdzJmdTBrbWdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbmV0YnNkLmM6IENIQU5HRVM6IG9wZW5ic2Q6CisKKyBQQVRDSCAzMzU3OTMyOiBmcm9tIHQwancyZnUwa21nOiBDbGVhbmluZyBpbiBtZW1vcnlfbmV0YnNkLmMgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jOiBDSEFOR0VTOiBhZ2VudDoKKworIFBBVENIIDMzODYxNDc6IGZyb20gd3VsZjIwMDE6IGZpeCBVQ0QtU05NUC1NSUI6OmRza1VzZWQgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQ3M2Q3ZTVjZDRkNDExYmJhMjBlYjg1MzU5ZDg3MjgwNjMzMDFjYmQgTWVyZ2U6IGE0ZThiNjIKKworIDg4ZmRkYjcgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6Mjg6MjIgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyMTAxYmIyZDdhZDZkYjAzOGM3NTVhYTkxOTNjOGFjZTBkYmQ0ZjU4IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgNCAwOToyODowNgorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogLmdpdGlnbm9yZTogaWdub3JlICoub3JpZyBhbmQgKi5yZWoKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGhlbHAgb3V0cHV0IGRlc2NyaWJlcyByZWJhc2UgdnMKKworIG1lcmdlIGJldHRlcgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmMTI2YTE3YzZhMzA2MzQ1NWE1MTE5NDBiMDIzMDQ3YWJkOWI0OGVlIE1lcmdlOiBhZDc2NWY0CisKKyA3N2E0Nzg0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI1OjE2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDUyZTE3MDdmMjA5ZWM0NWU3YzdmMmEzMDQwZWY1OTVmYjlkMWFmNiBNZXJnZTogZGM3NTVhNgorCisgYjM3MmU1YSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyNTowMyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFN0dWFydCBIZW5kZXJzb24gPHQwancyZnUwa21nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW4sIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkNC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2Q1Lmg6IENIQU5HRVM6IG9wZW5ic2Q6IFBBVENICisgICAgICAzMzU3OTI3OgorCisgZnJvbSB0MGp3MmZ1MGttZzogUmVjb2duaXNlIG9wZW5ic2Q1IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGZpeCB3aGVyZSBhcmd1bWVudHMgYXJlIHNldAorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogc3BsaXQgbnNzZnBhdGNoYXBwbHkgaW50byB0d28KKworIHBhcnRzOiBhcHBseSBhbmQgY29tbWl0aW5nCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogcGF0Y2ggdXNpbmcgLU4KKworCisyMDExLTA4LTA0ICBEYXZpZCBBcm5vbGQgPGRqYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9kZWZhdWx0X3N0b3JlLjMuYm90LCBtYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiwgCisgICAgICBtYW4vZml4cHJvYy4xLmRlZiwgbWFuL21pYjJjLmNvbmYuNS5pbiwgbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiwKKyAgICAgICBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsIAorICAgICAgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBidWxrZ2V0LjEuZGVmLAorICAgICAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGNvbmYuMS5kZWYsCisgICAgICBtYW4vc25tcGQuOC5kZWYsICBtYW4vc25tcGQuY29uZi41LmRlZiwgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCAKKyAgICAgIG1hbi9zbm1wZGVsdGEuMS5kZWYsIG1hbi9zbm1wZGYuMS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBuZXRzdGF0LjEuZGVmLCBtYW4vc25tcHNldC4xLmRlZiwgCisgICAgICBtYW4vc25tcHN0YXR1cy4xLmRlZiwgbWFuL3NubXB0YWJsZS4xLmRlZiwgbWFuL3NubXB0ZXN0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsIAorICAgICAgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLCBtYW4vc25tcHVzbS4xLmRlZiwgbWFuL3NubXB2YWNtLjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZjogQ0hBTkdFUzogbWFuOiBQQVRDSCAzMzEyODYxOiBmcm9tIGRqYTogTWFuCisgICAgICBwYWdlcworCisgaHlwaGVuLXZzLW1pbnVzIGNsZWFudXAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBEZXRlY3QgKGFuZCByZWplY3QpIE9wZW5TU0wKKworIDEuMC4wCisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3Igc2lsZW50CisKKyBpbnN0YWxsCisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBFbnN1cmUgV2luZG93cyBwYWNrYWdlCisKKyB1bmluc3RhbGxzIGNvbXBsZXRlbHkuCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDgxYzYzZmI1YzVlNGFiYjljMjlhY2E4OWJmOWQ2OTQ0MTAwODZlOTcgTWVyZ2U6IDRhNjkyMGEKKworIGRjNzU1YTYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDg6MzM6MzQgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6IGFkZGVkIHNwYWNpbmcgdG8gbWF0Y2ggdGhlIGxhdGVyIGJyYW5jaGVzCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6IHJlbW92ZWQgYWNjaWRlbnRpYWxseSBkdXBsaWNhdGVkIGNvZGUKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMyODogZnJvbSB5YWJlcmF1bmV5YToKKworIEFkZCBGcmVlQlNEIDkueCB0byBzdXBwb3J0ZWQgT1NlcyBsaXN0IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzI4OiBmcm9tIHlhYmVyYXVuZXlhOgorCisgQWRkIEZyZWVCU0QgOS54IHRvIHN1cHBvcnRlZCBPU2VzIGxpc3QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIHNubXBsaWIva2V5dG9vbHMuYywKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworIENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSCAzMzgzOTUxOiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggLVd1bnVzZWQKKyBjb21waWxlIHdhcm5pbmdzIHdpdGggRnJlZUJTRC9OZXRCU0QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIHNubXBsaWIva2V5dG9vbHMuYywKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworIENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSCAzMzgzOTUxOiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggLVd1bnVzZWQKKyBjb21waWxlIHdhcm5pbmdzIHdpdGggRnJlZUJTRC9OZXRCU0QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGU4NzhhYmJkYjE4MDhlZjgzZTBhODA3NDUzNmZiNTRlMTMyMTlhOGIgTWVyZ2U6IDQwM2RlNDIKKworIDg3OGZiZjQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTU6MDAgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyNTBhZmEwNjg5MmZkODk3YWMzMWUzODM2YTdmZmM5ZTJiNGNmN2I5IE1lcmdlOiAyYzE0YzFjCisKKyAzYWZjNWUwIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjUxOjMzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNTc4Y2Q3Y2NlMzUxYWU4ZDkwNGVjM2Q4MGJlOWJhNmQxZDQ4YTcxMiBNZXJnZTogMjU5ODhiZQorCisgZjNiYzU1MSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1MDo1NiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYXV0b2NvbmYKKworCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczogQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENICisKKyAzMzgzOTQ5OiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggYXV0b2NvbmYgdGVzdHMgZm9yIHN5cy9tYnVmLmggU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogcHJvbXB0IGZvciBwYXRjaCBhbmQgYW4gYXJlYSwgYW5kCisKKyB1c2UgdGhlIHByb3BlciBDSEFOR0VTIGxpbmUgZm9ybWF0CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogVXNlIGZldGNoIC0tYWxsIGFuZCByZWJhc2UgYXMKKworIHN1Z2dlc3RlZCBieSBCYXJ0IGZvciBzcGVlZCBpbXByb3ZlbWVudHMKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZDZhMWE4OWU2ZjY0ODk1MWE5YjgzMTkzMmQzY2MyMzA4MjFmMmQzNyBNZXJnZTogZGNiNzEyZgorCisgODcyZTAxMyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDEyOjA2OjE4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNDQ5NjliNGU1N2MyNzE5NGU1YmQzNTdiYzQ1Mjc1ZmViODY5NWQyMiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDggMjA6NTI6MjUgMjAxMSArMDIwMAorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzogQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogSW52b2tlCisKKyBTbm1wVXRpbE9pZEZyZWUoKSBiZWZvcmUgU25tcFV0aWxPaWRDcHkoKS4gSXQncyBub3QgY2xlYXIgeWV0IHdoeQorIHRoZSBvcmlnaW5hbCBjb2RlIGRpZCBub3QgbWFrZSBzbm1wd2FsayB0cmlnZ2VyIGEgbWVtb3J5IGxlYWsuCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGRjYjcxMmZmYzg2YjMzNTgzMDAwZWY0YWU5YTUxY2VkMjVjZDE1YmYgTWVyZ2U6IGU4NWNmYTUKKworIDk4NjIzZWYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxMTozNjoxNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDhhMDFlYzY0MjNkNDAwYzRhMTNjY2FjNjhhMzc5MWQwMjE4YTA4ODUgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZyA0IDExOjE5OjE3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZTg1Y2ZhNTk5YjIzYjc2ZDk3OTEzYzk2YjVkNzAzYmZmNmJhNDk0NCBNZXJnZTogYjA1NmVlNgorCisgZTIxZWVmMiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDA4OjQ0OjQzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBDSEFOR0VTOiBhZ2VudDoKKworIEF2b2lkIHRoYXQgYSBNSUIgd2FsayBvbiB0aGUgaG9zdCByZXNvdXJjZXMgTUlCIHRyaWdnZXJzIGEgY3Jhc2ggb24KKyBGZWRvcmEgMTUKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYjA1NmVlNmViNTM5MDlhZDA0ZjE2ZWMyNmQyNjkwZDdhMDgzMTkyYSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnIDQgMDc6NTk6MDQgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjYworICAgICAgIGVzcy5jLCBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzCisgICAgICAgLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsIGFnZW50L3NubXBfYWdlbnQuYywgCisgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcHRscy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXBfZW51bS5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3NubXB1c20uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDoKKworIHBlcmw6IEVsaW1pbmF0ZSBkZWFkIHZhcmlhYmxlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBhZThlM2VjZDJkZjRjZjM3NjI1OTQ0YWRlZDFkZmU0NzM1ZDQ0ZWVhIE1lcmdlOiA3MzE4N2NlCisKKyA5MzM1ZTE5IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEF1ZyAzIDE0OjM3OjM2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNzk0ZjlhNjlkN2ViNjQyMjY4MjAwYjBhNGIxOTkxNTFkZWY2NmVkMCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgQXVnIDMgMTQ6MzY6MjUKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IFJlZW5hYmxlIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUKKyAgICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBSZWVuYWJsZSBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDctMTggIElseWEgWWFub2sgPHlhbm9rQGVtY3JhZnQuY29tPgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYzogYWdlbnQ6IGNoYW5nZQorCisgdHlwZSBvZiBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHRvIGxvbmcgVHlwZSBvZiBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHZhcmlhYmxlIGlzIGNoYW5nZWQgZnJvbSBpbnQgdG8gbG9uZy4KKyBUaGlzIGZpeGVzIHRoZSBidWcgd2l0aCB3cml0aW5nIHRvIHNubXBFbmFibGVBdXRoZW5UcmFwcyBpZiBzZXJ2ZXIKKyBpcyBjb21waWxlZCBmb3IgNjRiaXQgKHNubXBzZXQgcmVwb3J0cyB3cm9uZyBsZW5ndGgpLiBUaGlzIGJ1ZyB3YXMKKyBpbnRyb2R1Y2VkIGEgbG9uZyB0aW1lIGFnbyAoYnkgZmFlZWNkMCBjb21taXQpLiAgQWN0dWFsbHkgdGhpcyBpcyBhICdsZXNzIGVmZm9ydCcgdHlwZSBvZiBmaXggYnV0IEkgd29uZGVyIHdoeSB3ZQorIG5lZWQgYSBsb25nIHRvIHN0b3JlIGFuIElOVEVHRVIgaW4gdGhlIGZpcnN0IHBsYWNlPyBTaWduZWQtb2ZmLWJ5OiBJbHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4gU2lnbmVkLW9mZi1ieTogV2VzCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDZhZDdlMjhmZjllNWU0ZWJjMTM1OGVlMzljYzk3OTZhNDRhMWJlZTcgTWVyZ2U6IGYyODMyZTMKKworIDFlMTU0Y2UgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnCisgMyAxOToxNToyNCAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDYxYjE3OGYxZWU4OTUyYWEwM2FhM2IxYmE1MWY0YTY2NTVlNDdmMDEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZyAzIDE4OjA5OjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOiBXaGl0ZXNwYWNlLW9ubHkgY2hhbmdlOiBmaXggaW5kZW50YXRpb24KKworIG9mIGFuICNpbmNsdWRlIGRpcmVjdGl2ZQorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBwZXJsL05ldFNOTVAueHM6IENIQU5HRVM6IFBlcmw6IFJlbW92ZSBmaWxlIHBlcmwvTmV0U05NUC54cworCisgYmVjYXVzZSBpdCBicmVha3MgdGhlIFdpbmRvd3MgYnVpbGQuICBUbyBXZXM6IGlmIHlvdSBjYW4gdGVsbCBtZSBob3cgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHlvdSBvYnNlcnZlZAorIEknbGwgdHJ5IHRvIGZpbmQgYSBwb3J0YWJsZSBmaXguICBUaGlzIHJldmVydHMgY29tbWl0IGQ1NDg3MWY1MjkzNjc1YzgwNThlY2NlODhmZWQ1YjY0NmM4MzYzMjMgKCJBZGRlZAorIGEgYm9ndXMgZW1wdHkgLnhzIGZpbGUgZm9yIGJ1bmRsaW5nIG9uIG5ld2VyIHBlcmwgdGhhdCB3YW50cworICJzb21ldGhpbmciIikuCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBmNDg5YjE5OWFkYWI0OGIxNjMzZWJjYWY1ZmY1YTdjMjJjNGNiODkgTWVyZ2U6IGY0ZWFhMDIKKworIDcyYTU5YmMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgQXVnCisgMiAxMDoxMTo1MyAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDdmY2MwYjgwMzJmOGRhNWI3YmMzMDA1OWFmMGJhNjU2ZWFlNzEwOTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyAxIDE0OjExOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmM6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgaW4KKworCisgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMKKworMjAxMS0wOC0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGZpbGUgbmFtZXMgYW5kIHBhdHRlcm5zIGZvciBvdXRwdXQKKworIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIFdpbmRvd3MgYnVpbGQKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogU29ydCBhbHBoYWJldGljYWxseQorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBhcHBzL3NzaHRvc25tcAorCisKKzIwMTEtMDgtMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICAuZ2l0aWdub3JlLCBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC1jLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC14cy5pbmM6IFJlbW92ZSB0d28gZ2VuZXJhdGVkIFBlcmwgZmlsZXMuCisKKworMjAxMS0wOC0wMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjRlYWEwMmQ5YjA3NmE2N2Q3MjcyZGU3ZWVmOGU5ZGZiZjE4OWJiZiBNZXJnZTogNDAxMjVkOAorCisgYWRhZGNiOSBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMiAwMDo1Nzo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9uczogc3VwcHJlc3MgIm9rIiB0ZXN0IG91dHB1dCBpbiBuc2IKKworCisyMDExLTA4LTAxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDAxMjVkODUzOWNkODlmOTUyZmJjMjQ1ODhjNWU4MWU5Y2Q4MjFmZSBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyAxCisgMTM6NTg6MzMgMjAxMSArMDIwMAorCisyMDExLTA4LTAxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1YWNmMGQyY2ViMzk3Nzk2NGVkMzlmMDAzMDczYmE2NDEzOGMyZWJkIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBKdWwgMzEgMjM6NTc6NDEKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGE3NzIyYTgxZjljYjdhYTg2NzBlN2MyMzg2MDEzNjJhMzEwODdhY2MgTWVyZ2U6IDI0MmUxNzkKKworIGFlOWFjNmMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gSnVsCisgMzEgMDk6MTE6NDUgMjAxMSArMDIwMAorCisyMDExLTA3LTMxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NzaHRvc25tcC5jOiBGaXggYW4gaW5jb3JyZWN0IHNvdXJjZSBjb2RlIGNvbW1lbnQ6IHRoZXJlIGlzCisKKyBubyByZXF1aXJlbWVudCBpbiB0aGUgQU5TSSBDIHN0YW5kYXJkIHRoYXQgc3RhY2sgdmFyaWFibGVzIHNob3VsZCBiZQorIGluaXRpYWxpemVkIHRvIHplcm8uCisKKzIwMTEtMDctMzEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI0MmUxNzk3YjI2OTRhMDY4OTg1NmFlMzZkMDVkMzQxM2FhZjhkNzcgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEp1bCAzMSAwMTo0NDowOQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nCisKKyBnZXRhZGRyaW5mbygpIGFuZCBFQUlfRkFJTCAoZS5nLiBIUC1VWCAxMC4yMC8xMS4wMCkKKworMjAxMS0wNy0zMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMThkZjc1OWYxOWI5NzVjNDQ5ZDAxMGJiMGExNjIxMTliYjY4MzYwZCBNZXJnZTogNTRhNDRjYgorCisgNzA1MDcxOCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBKdWwKKyAzMCAxNjozOToxMyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDgyZDczZmIxMWJlM2FlMzFmMzljOWQ2MThkNTM4OGRjOWIxMDA2ZDcgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCAyOSAyMDo1MToyNyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IGF1dG9yZWNvbmYKKworCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBhdXRvcmVjb25mCisKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMTA5ZjY2OTRkNzg4ZjQ4ZWJkOWZjMGExZTkwYzQ1YWJjMzdiZWEyMCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTYXQgSnVsIDMwIDE0OjIyOjE5CisgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3ZDgxMDBlZWQ0NTlhMWZmMWEyMGMwNjczNjRmYTZjYjQ3NDkxMzA5IE1lcmdlOiAxMTZjMjRmCisKKyA5ZTQ3YWM0IEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgU2F0IEp1bCAzMCAwMDoyMDowMSAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9ucywgZGlzdC9uc2ItbmlnaHRseSwgZGlzdC9uc2ItcGFja2FnZTogbWlub3IgbnNiCisKKyBmaXhlcy9lbmhhbmNlbWVudHMgZnJvbSBteSBvbGQgc3ZuIHRyZWUKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMTE2YzI0ZjBmN2ZiM2Y5OWJhNjQ2NzMwZjYxYzU2ZDFhZTIzYmE0MSBNZXJnZTogOTgyZmI3ZgorCisgNGZjMGI4YiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwKKyAyOSAxMTozMToyMCAyMDExICswMjAwCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGM0ODE3M2MwNmE5ZWFhZGJmODFlNmI0OTYyZDU1ZWYwYTU0ZGIyNTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCAyOSAxMDoyNzozOSAyMDExICswMjAwCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgbHRtYWluLnNoLCBtNC9saWJ0b29sLm00OiBSZXJ1biBhdXRvcmVjb25mCisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogU29ydCBhbHBoYWJldGljYWxseQorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBhcHBzL3NzaHRvc25tcAorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmM6IEZpeCB0d28gZmlsZW5hbWVzIGluIGhvc3QgbWliCisKKyBzb3VyY2UgY29kZSBjb21tZW50cy4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDk4MmZiN2ZkOGJhYjI1YzQzMjJhYTYyYzUwNDM3MDM2Y2UyOTZlM2UgTWVyZ2U6IDFlZGE2NzUKKworIDM0NTgxMjggQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEp1bCAyOCAxNjoyNDowMyAyMDExICswMjAwCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEZpeCBwb3RlbnRpYWwKKworIHNpZ3NlZ3Ygd2hlbiBhbiBpZlRhYmxlIGVudHJ5IGlzIHJlbW92ZWQgYXMgcmVzdWx0IG9mIGJvdGgKKyBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgYW5kIGludGVyZmFjZV9mYWRlb3V0IGF0IHRoZSBzYW1lIHRpbWUuCisKKzIwMTEtMDctMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc3NodG9zbm1wLmM6IE1ha2UgYXBwcy9zc2h0b3NubXAuYyBidWlsZCBhZ2FpbiAod2FzIGJyb2tlbiBieQorCisgY29tbWl0IDYxMjI0N2NkZjE0YzFlNzQ1YzM4NGNlZmUxZjNmZGUzZTQ0NWIzNDcgdGhhdCBjaGFuZ2VkCisgTVNHX05PU0lHTkFMIGludG8gTkVUU05NUF9OT1NJR05BTCkKKworMjAxMS0wNy0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMWVkYTY3NTNiN2ZlN2QzYjNmMjE3YzA5MjU0ZWMwMmQwZWUxZDBjZSBNZXJnZTogZGI4Yjg2MAorCisgYTJmOWVjZSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwKKyAyOCAxNTozMjoyOCAyMDExICswMjAwCisKKzIwMTEtMDctMjggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMTogCisKKyBDSEFOR0VTOiBzbm1wZDogUmVzdG9yZSBzdG9yYWdlIHRhYmxlcyBvbiBMaW51eAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IGludGVyZmFjZV9yZXBsYWNlX29sZCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX3JlcGxhY2Vfb2xkJyBvcHRpb24gdG8gcmVtb3ZlIG9sZCBlbnRyaWVzIGluCisgaWZUYWJsZSB3aGVuIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYWxyZWFkeSBleGlzaW5nIG9uZQorIGFwcGVhcnMuICBFLmcuIHJlbW92ZSBvbGQgcHBwMCBpbnRlcmZhY2Ugd2hlbiBuZXcgcHBwMCBzaG93cyB1cC4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCB0aGUgaW50ZXJmYWNlX2ZhZGVvdXQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEFsbG93IGlmVGFibGUKKworIGVudHJpZXMgdG8gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGFwcHJvcHJpYXRlIGludGVyZmFjZQorIGRpc2FwcGVhcnMgKGkuZS4gaW50ZXJmYWNlX2ZhZGVvdXQgPSAwIHdvcmtzIGFzIGV4cGVjdGVkKS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX2ZhZGVvdXQnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldAorIGxpZmV0aW1lIG9mIGlmVGFibGUgZW50cmllcyBvZiByZW1vdmVkIGludGVyZmFjZXMuICBQcmV2aW91cyBsaWZldGltZSB3YXMgaGFyZGNvZGVkIDUgbWludXRlcywgbm93IGl0J3MgY29uZmlndXJhYmxlLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZDYyYTBlYjkwNzBiNGQ4ZDlmZTJiY2ZkYjRkNTNkMzdlZjgxNGY5YiBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEp1bCAyOAorIDE0OjQ5OjA4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX3JlcGxhY2Vfb2xkJyBvcHRpb24gdG8gcmVtb3ZlIG9sZCBlbnRyaWVzIGluCisgaWZUYWJsZSB3aGVuIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYWxyZWFkeSBleGlzaW5nIG9uZQorIGFwcGVhcnMuICBFLmcuIHJlbW92ZSBvbGQgcHBwMCBpbnRlcmZhY2Ugd2hlbiBuZXcgcHBwMCBzaG93cyB1cC4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCB0aGUgaW50ZXJmYWNlX2ZhZGVvdXQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEFsbG93IGlmVGFibGUKKworIGVudHJpZXMgdG8gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGFwcHJvcHJpYXRlIGludGVyZmFjZQorIGRpc2FwcGVhcnMgKGkuZS4gaW50ZXJmYWNlX2ZhZGVvdXQgPSAwIHdvcmtzIGFzIGV4cGVjdGVkKS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX2ZhZGVvdXQnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldAorIGxpZmV0aW1lIG9mIGlmVGFibGUgZW50cmllcyBvZiByZW1vdmVkIGludGVyZmFjZXMuICBQcmV2aW91cyBsaWZldGltZSB3YXMgaGFyZGNvZGVkIDUgbWludXRlcywgbm93IGl0J3MgY29uZmlndXJhYmxlLgorCisyMDExLTA3LTI4ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYXBwcy9zc2h0b3NubXAuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQKKyAgICAgIGZpeAorCisgZm9yIHN5c3RlbXMgbGFja2luZyBNU0dfRE9OVFdBSVQKKworMjAxMS0wNy0yNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmM6IENIQU5HRVM6IHNubXBkOiBNYWtlCisKKyBUQ1AtTUlCOjp0Y3BDdXJyRXN0YWIgd29yayBhZ2Fpbi4gV2FzIGJyb2tlbiBpbiA1LjcgYnkgdGhlCisgaW50cm9kdWN0aW9uIG9mIHRoZSAiZmVhdHVyZXMiIGZlYXR1cmUuCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmYjg4MDc0ZmJiYzI2OGM3ZjA1MDk0OTE1MzVhZWM1ZmVjYjA1Njg0IE1lcmdlOiBhNzQzYWU1CisKKyAzODIxMjczIEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBKdWwgMjcgMTQ6NDc6MjUgMjAxMSArMDIwMAorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMzFmYTA3Y2Q5ZmZkZTQ2ZDQxZDJiNTgzOGMzZmM0ZDAxNTQ4YmZiNSBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1bCAyNworIDE0OjQ1OjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IENIQU5HRVM6IHNubXBkOiBydW4gc2lnbmFsIGhhbmRsZXJzIHdoZW4gc2VsZWN0KCkKKworIGlzIGludGVycnVwdGVkLiAgVGhpcyBiZWhhdmlvciBpcyBpbmRpY2F0ZWQgaW4gY29tbWVudCBvbiBsaW5lIDEyNDQsIGJ1dCBpdCB3YXMgbm90CisgYWN0dWFsbHkgZG9uZS4KKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMmU5NDY2ZDdmNTlkNjVkMDUwMjc3NzM1ZTRlZDlkMzA3MTlmZjc1MiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDI2IDEzOjEwOjA0IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNzcwODI5Njc2MGVhZjVhODBkODU0MDc0NmM5YzI0OTgyNmZkMWJmZSBNZXJnZTogZWExMWU1ZQorCisgY2Q2ZTM4MiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAyNiAxNjoyMTo0MSAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzogQ2xhcmlmeSBhbiBJUHY2IHNvdXJjZSBjb2RlIGNvbW1lbnQKKworCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMzogU3BlbGxpbmcgZml4OgorCisgZGVmaW5lZHkgLT4gZGVmaW5lZAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjM6IFNwZWxsaW5nCisKKyBmaXg6IGFsZXZpYXRlIC0+IGFsbGV2aWF0ZQorCisyMDExLTA3LTI2ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZGQyYzQ3MTMzNDkzZDVhMDBkZTZiM2NkYmNmYWM3ZTlkNDRiNmZmZSBNZXJnZTogZjljY2JjNworCisgZWExMWU1ZSBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgSnVsIDI2IDE0OjI1OjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGM1YTg0NjRjNDJhOTRjMjUwZWUyZGZhMmE0NzMxMDlhNzM0MjAzZDggQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMjYKKyAxNDoyNDo1NSAyMDExICswMjAwCisKKzIwMTEtMDctMjUgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmOWNjYmM3NzI2NjYxMzRkMWQxNzhiNTA1YWY5ZGRjZGQ5ZWQ0MjQ0IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gSnVsIDI1CisgMTU6MDI6MTUgMjAxMSArMDIwMAorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiMGMwYTM1NWQ1ZjYwMWExMWJlNDkxNGZiZjcxMzcxNmFiZDMwYTI5IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMTkKKyAxODozNjoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGMxNGZjMzg2MTRiYWYxMGQ1MTcxMzZmMDQ4MDkwN2I3ZjAzZDhkNzQgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1bCAyMAorIDEzOjQ0OjU5IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYzogcmVtb3ZlIGJyb2tlbiB3aGl0ZXNwYWNlIGxpbmVzIHRoYXQKKworIGxlYWRzIHRvIHJlYWRpbmcgY29uZnVzaW9uCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGViZGQyMTZjMDc0YmY0MWNkM2EwODRiZDE0Njg5Y2YwMWM4ODdiMzEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAxOQorIDE4OjM2OjExIDIwMTEgLTA3MDAKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogLmdpdGlnbm9yZTogdXBkYXRlZCBnaXRpZ25vcmUgdG8gaWdub3JlIGEgbnVtYmVyIG9mIGF1dG8tZ2VuZXJhdGVkCisKKyBmaWxlcworCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jOiByZW1vdmUgYnJva2VuIHdoaXRlc3BhY2UgbGluZXMgdGhhdAorCisgbGVhZHMgdG8gcmVhZGluZyBjb25mdXNpb24KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZGY1ZjcwMDU1Y2Y5YmUzM2YwNWZiNTBhYmUyZjVhODFlYWMwOTJhZCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDE5IDExOjA3OjE5IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZjU5NmYxODI0MmRjZGZkNmNmNDljODhkYTFkODM2YzE2ZTI2MGNhYyBNZXJnZTogMGYzMDliNAorCisgNzBkZWU0YiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAxOSAxMTozMzoyOCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDoKKyAgICAgIDMzNjk2ODA6CisKKyBmcm9tIElseWEgWWFub2s6IGNoYW5nZSBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIGZyb20gaW50IHRvIGxvbmcgc3VjaAorIHRoYXQgbW9kaWZ5aW5nIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QgZG9lcyBub3Qgb3ZlcndyaXRlCisgbWVtb3J5IGluIDY0LWJpdCBidWlsZHMuCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMzNzA2NDU6CisKKyBmcm9tIEJpbGwgRmVubmVyOiBGaXggQWdlbnRYIHN1YmFnZW50IGZvdXIgYnl0ZSBsZWFrCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczogZG8KKworIG5vdCBpbnZva2UgSVNSVU5OSU5HKCkgb24gTWluR1cuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczoKKworIGNsZWFudXAgLSByZW1vdmUgY29kZSB0aGF0IGJlY2FtZSBzdXBlcmZsdW91cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogTWluR1c6IERvIG5vdAorCisgYXNzdW1lIHRoYXQga2lsbC5leGUgcmVwb3J0cyB2aWEgaXRzIGV4aXQgc3RhdHVzIHdoZXRoZXIgdGhlCisgc2lnbmFsbGVkIHByb2Nlc3Mgc3RpbGwgZXhpc3RzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgUmVtb3ZlIHRoZSBmdW5jdGlvbiBXQUlUT1JESUUoKSBmcm9tIHNpbXBsZV9ldmFsX3Rvb2xzLnNoIHNpbmNlIGl0CisgaXMgbmV2ZXIgaW52b2tlZC4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFNpbXBsaWZ5IFdBSVRGT1IoKSBpbiBzaW1wbGVfZXZhbF90b29scy5zaC4gVGhlIGNvZGUgdGhhdCBoYW5kbGVkCisgaW52b2NhdGlvbiBvZiBXQUlURk9SKCkgd2l0aCB6ZXJvIG9yIG9uZSBhcmd1bWVudHMgaGFzIGJlZW4gZHJvcHBlZAorIHNpbmNlIFdBSVRGT1IoKSBpcyBhbHdheXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczoKKworIG1pbm9yIHNpbXBsaWZpY2F0aW9uLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOiBDSEFOR0VTOgorCisgdGVzdGluZzogU2tpcCB0ZXN0IDU5IGlmIFNJR0hVUCBpcyBub3Qgc3VwcG9ydGVkLiBNYWtlcyB0ZXN0IDU5IHBhc3MKKyBvbiBNaW5HVy4KKworMjAxMS0wNy0wNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogTWluR1cgZml4CisKKworMjAxMS0wNy0wNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBmcmFtZXdvcmsKKworIHJlZmFjdG9yaW5nOiBJbnRyb2R1Y2UgV0FJVEZPUk5PVENPTkQoKS4KKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIE1ha2UgU1RPUFBST0cgc2VuZCBTSUdURVJNIHJlcGVhdGVkbHkuIFRoaXMgZml4ZXMgYSByYWNlIHdoZXJlCisgU0lHVEVSTSBjb3VsZCBiZSBzZW50IGJlZm9yZSB0aGUgU0lHVEVSTSBzaWduYWwgaGFuZGxlciB3YXMgc2V0IHVwLAorIGVzcGVjaWFsbHkgd2hlbiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIFZhbGdyaW5kLgorIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgdGhlIFNOTVBfVkVSQk9TRT0xIG91dHB1dCBldmVuIG1vcmUgdmVyYm9zZS4KKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzCisKKyByZWZhY3RvcmluZzogaW50cm9kdWNlIEVDSE9TRU5EU0lHVEVSTSgpIGFuZCBFQ0hPU0VORFNJR0tJTEwoKQorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBGaXggYSBidWcgaW4KKworIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2ggdGhhdCB3YXMgaW50cm9kdWNlZAorIGluIGNvbW1pdCA5MzhkNzVjLgorCisyMDExLTA3LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBJZ25vcmUgKi5leGUgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBXaW4zMgorCisgYnVpbGQKKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFRlc3Qgb25seSBvbmNlIGR1cmluZyBhIHRlc3Qgd2hldGhlciB0aGUgc2hlbGwgc3VwcG9ydHMgc3ViLXNlY29uZAorIHNsZWVwaW5nIGluc3RlYWQgb2YgcmVwZWF0ZWRseS4KKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOiBDSEFOR0VTOiB0ZXN0aW5nOiBDaGFuZ2VkCisKKyBkZWZhdWx0IHRpbWVvdXQgZnJvbSAxcyB0byAxMHMgd2hlbiB0aGUgcmVncmVzc2lvbiB0ZXN0cyBhcmUgcnVuCisgdW5kZXIgVmFsZ3JpbmQKKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIEFmdGVyIGhhdmluZyBzZW50IFNJR1RFUk0gdG8gc25tcGQgb3Igc25tcHRyYXBkLCB3YWl0IHVudGlsIHRoZQorIHByb2Nlc3MgaGFzIHN0b3BwZWQgYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhpcyByYWNlIGNvbmRpdGlvbiB3YXMKKyBoaXQgbW9zdCBlYXNpbHkgd2hlbiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIFZhbGdyaW5kLgorIENIQU5HRVM6IHRlc3Rpbmc6IENoZWNrIFBJRCBmaWxlIGV4aXN0ZW5jZSBhZnRlciBoYXZpbmcgcmVhZCBpdAorIGluc3RlYWQgb2YgYmVmb3JlLiBUaGlzIGZpeGVzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGZpbGUKKyBkaXNhcHBlYXJlZCBhZnRlciB0aGUgZXhpc3RlbmNlIGNoZWNrIGFuZCBiZWZvcmUgaXQgd2FzIHJlYWQuCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKworIGludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisgdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIFRoaXMgcGF0Y2ggaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHRvIFY1LjYgU1ZOIHBhdGNoZXM6IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGYzMDliNDkzYzIxZDNjNjkxNDQ4NzUxNGI0MTU2MDc1NGZmY2RmOSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDE5IDA4OjM3OjUwIDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMWI3NDU0YmMyODE1Njg0NzBhMTMwMDQ3NmQyZWRiNGY0MTFlNjAyOSBNZXJnZTogOGQ5ZGNjOAorCisgNjkwZWE3ZCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAxOSAwODozMToyOCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6IENIQU5HRVM6IHNubXB0cmFwZDogQWRkIG1pc3NpbmcgbmV3bGluZQorCisgY2hhcmFjdGVyIGluIGEgbG9nIG1lc3NhZ2UKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzogQ0hBTkdFUzogc25tcHRyYXBkOiBJbnZva2Ugc2h1dGRvd25fcGVybCgpIHdoZW4KKworIHNodXR0aW5nIGRvd24KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOiBTcGVsbGluZyBmaXg6IGJyYW5rZXQgLT4gYnJhY2tldAorCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogUnVuIGF1dG9yZWNvbmYuCisKKyBGaXhlcyBidWlsZCBicmVha2FnZSBjYXVzZWQgYnkgcGF0Y2gKKyBkNTg4ZWM4NTNiZDA1MzFmMjEyZmNiZjUxYjk2MmI5NmM2ODI4YjU5IChSUE0gNC45IHN1cHBvcnQpCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGQ2MTdkODRmODNmYTY5ZWQ5ZmE5Zjk4ZWZjNGFmYWY4ODBkMTIxZjIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bCAxNCAxNjo0Mzo0NyAyMDExICswMjAwCisKKzIwMTEtMDctMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogTWFrZQorCisgbmV0c25tcF9pcHY2X2ZtdGFkZHIoKSBzaG93IHRoZSBJUHY2IHNjb3BlIElECisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBBZGQgc3VwcG9ydAorICAgICAgZm9yCisKKyBJUHY2IGFkZHJlc3Mgc2NvcGUgSUQKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBSdW4gYXV0b3JlY29uZgorCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGE1NjcyMWEzZTc3NTRlMzg5ZGFhN2U4YTNkNTc5Mjg5OWVkYzlkZTMgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bCAxNCAxNjoxODozMiAyMDExICswMjAwCisKKzIwMTEtMDctMTUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDg0NGQ0Y2U4NjdiZjNhYmU3Yjc1MzZjNWRiZmJhNDAxOTM3YThkNGEgTWVyZ2U6IGVlZDAxOTgKKworIDYxMDM2YTggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBGcmkgSnVsIDE1IDE1OjMzOjEwIDIwMTEgLTA3MDAKKworMjAxMS0wNy0xNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODUxYmNmNTNmY2QxM2NkZjBiYTlmMTJlNWQ2MDNlNzNmOGJiOTYxMSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBGcmkgSnVsIDE1CisgMTU6MzI6NDkgMjAxMSAtMDcwMAorCisyMDExLTA3LTE0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogZml4IGEgdHlwbworCisKKzIwMTEtMDctMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QGxvY2FsaG9zdD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IHNubXBsaWI6ICB0d2VhayBwYXRjaCAzMDQ0ODg4IHRvIHJlc3RvcmUKKworIHByb3BlciBub24tZXJyb3IgcmV0dXJuIGR1cmluZyBtaWIgbG9hZGluZworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGFkZGVkIDUuNyBwYXRjaGVzIHRvIHRoZSBicmFuY2ggbGlzdCBhbmQgZml4IHRoZSByZWxlYXNlIGZpbGUKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGFkZGVkIDUuNyBwYXRjaGVzIHRvIHRoZSBicmFuY2ggbGlzdAorCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcmVsZWFzZTogYSBjb3B5IG9mIHRoZSByZWxlYXNlIGZpbGUgYXBwbGllZCB0byB0aGUgb2xkZXIKKworIGJyYW5jaGVzCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgNS43IHBhdGNoZXMKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjNDMxMjMxZThmMGEzOWQxOTUwYmM3MmMzMmUzNDAyZjkwZmE4MDMwIE1lcmdlOiA1NmZlZTQwCisKKyBhMmFjMjRkIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEp1bCAxMSAxOTozMzoxNyAyMDExIC0wNzAwCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb3B5IG9mIHRoZQorCisgc2hlbGwtZnVuY3Rpb25zIHRvIHRoZSBvbGRlciBicmFuY2gKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9yZWxlYXNlOiBhIGNvcHkgb2YgdGhlIHJlbGVhc2UgZmlsZSBhcHBsaWVkIHRvIHRoZSBvbGRlcgorCisgYnJhbmNoZXMKKworMjAxMS0wNy0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43CisKKworMjAxMS0wNy0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43CisKKworMjAxMS0wNy0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IFJldmVydCAiZml4IGR0bHN1ZHAKKworIHRyYW5zcG9ydCBhZGRyZXNzIGZvcm1hdCBmdW5jdGlvbiIgVGhpcyByZXZlcnRzIGNvbW1pdCAyYWIzYTZlNmYyZmNjMWZmM2U1ZjBmYjVkYzVkMDVlNDk4ODIwZDg5LiAgIC0gZm9yIHNvbWUgcmVhc29uIEkgc2F3ICdyYycgYW5kIG15IGJyYWluIGludGVycHJldGVkIGl0IGFzICAgICdwcmUtcmVsZWFzZScuIFdoYXQgY2FuIEkgc2F5LCBpdCB3YXMgbGF0ZS4gOi0vCisKKzIwMTEtMDctMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QGxvY2FsaG9zdD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBmaXggZHRsc3VkcCB0cmFuc3BvcnQKKworIGFkZHJlc3MgZm9ybWF0IGZ1bmN0aW9uICAtIHVwZGF0ZSBpcHY0IGZtdGFkZHIgdG8gaGFuZGxlIHNvY2thZGRyIGFuZCB0byBjaGVjayAgICBzaXplIGJlZm9yZSBhc3N1bWluZyBkYXRhIGlzIGFkZHIgcGFpciAgLSBtb3ZlIGR0bHN1ZHAgZnVuY3Rpb25zIHRvIGV4dHJhY3QgYWRkcihzKSB0byB0bHNiYXNlCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDU2ZmVlNDAxMThiMjFhOWY0ZGMwMmE2ZjI0N2Y3ZGE2ZmM2OWEwMDUgTWVyZ2U6IGQzOTE5NGIKKworIDlmZjQ3MTQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgSnVuIDI5IDIzOjE4OjEzIDIwMTEgLTA3MDAKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IGZpeCB0YWcgcHVzaGluZworCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBmaXggdGFnIHB1c2hpbmcKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogbWlzYyBwdWJsaWNhdGlvbiBmaXhlcyBmb3VuZCB3aGlsZQorCisgcHVibGlzaGluZworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcucmMzCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LnJjMworCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiByZW1vdmUgdW5uZWVkZWQgY29tbWVudAorCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBtaXNjIHB1YmxpY2F0aW9uIGZpeGVzIGZvdW5kIHdoaWxlCisKKyBwdWJsaXNoaW5nCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHJhbiBhdXRvaGVhZGVyIHRvIGFkZCB0aGUKKworIG1pc3NpbmcgdGVtcGxhdGUgaWZkZWZzCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy5yYzIKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcucmMyCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNjRiNmM2OGE4NDkzMGFiMDFlM2UxNDZjNDlmM2FiNTM4MmVmZGEzZSBNZXJnZTogMTI3ZWVjMgorCisgZDM5MTk0YiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBKdW4gMjkgMTc6MTI6NDYgMjAxMSAtMDcwMAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkZjljZjlhMWUyOTNkMDVhMjQ3ODY2OTRmNjhjMDVhMmJlMTNhOWIzIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdW4gMjkKKyAxNjozNDoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiB1c2UgZ2l0MmNsIHRvIGdlbmVyYXRlIHRoZSBDaGFuZ2VMb2cgZmlsZTsKKworIG5lZWRzIG11Y2ggbW9yZSB3b3JrLgorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogdXNlIHRoZSBuZXcgcnVuLWF1dG9jb25mIHNjcmlwdAorCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcnVuLWF1dG9jb25mOiBBIHNjcmlwdCB0byBpbnZva2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiB0aGUKKworIGF1dG9jb25mIHRvb2wKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHJlbWFpbmluZyBjb21tYW5kIGxpbmUgY2hhbmdlcyBmb3Igc3ZuIC0+CisKKyBnaXQKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IG1ha2UgdGhlIGJyYW5jaCBlY2hvIG91dHB1dCBhbmQgc3ZuIHVwZGF0ZQorCisgY29udmVydGVkIHRvIGdpdCBlcXVpdmFsZW50cworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcHVsbCB0aGUgYnJhbmNoIGluZm8gZnJvbSBnaXQKKworCisyMDExLTA2LTI5ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMTogVHdlYWsgUlBNIGhhbmRsaW5nIHRvIHdvcmsgd2l0aAorICAgICAgbGlicmFyeQorCisgdmVyc2lvbiA0LjkKKworMjAxMS0wNi0yOSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGQ1ODhlYzg1M2JkMDUzMWYyMTJmY2JmNTFiOTYyYjk2YzY4MjhiNTkgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdW4gMjkKKyAxNjowNzowMCAyMDExICswMjAwCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcmVsZWFzZTogbm90ZWQgdGhhdCB0aGUgbWFzdGVyIGJyYW5jaCBpcyBpbiByYyBzdGF0ZQorCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IDhiMjNiNGMxMzkyM2I4Y2FmNGQ0YWVkMzJhNDUwOTMzOTM0ZmY0NjEgTWVyZ2U6IDE1Mzc4MWQKKworIDQ3ZjUwNDggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4gRGF0ZTogICBUdWUKKyBKdW4gMjggMTM6MTQ6NTIgMjAxMSAtMDcwMAorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCBhZjhiMjM1MjM0ZjcyOTQ0YTY0OWE3NmYwZDMwY2ZmOTVhYzJlODk1IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PiBEYXRlOiAgIFR1ZSBKdW4gMjggMTM6MTE6MTkgMjAxMQorIC0wNzAwCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogdXNlIGdpdCBtZXJnZSB3aXRoIHRoZSAtLWxvZworCisgb3B0aW9uCisKKzIwMTEtMDYtMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDE1Mzc4MWRiZmIyYWZjMDAwM2JhNGU1OGZmY2NhNTMwMDFlNDg2ZDYgTWVyZ2U6IGIzZTgwZGUKKworIDNjNWE0MDkgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVuCisgMjggMTk6NDM6MTMgMjAxMSArMDIwMAorCisyMDExLTA2LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA5YmM4MmU0Y2E0ODM3ZjAwMDcyZGJhODZiOTQ5N2EyNzE4NjkwOWY5IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdW4gMjggMTk6MTM6MzUgMjAxMSArMDIwMAorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiBGQVE6IFdlJ3JlIG5vdyB1c2luZyBnaXQhCisKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgYjNlODBkZTliMDdkMjgyZmYxMWFmOGIwNmE5MWQ2NDI3OWQzMjYxZCBNZXJnZTogYzRhZDI3OAorCisgNmE1ZTVhNiBBdXRob3I6IFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PiBEYXRlOiAgIE1vbgorIEp1biAyNyAyMTozNDo1OSAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IDM4ZmU4MTc3ZDUzMzEzNWE2Y2M2ODI3MjRmMTZhOTExMTNiY2Q3ZjMgTWVyZ2U6IDdkOTE3Y2YKKworIGRkNThiYWYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4gRGF0ZTogICBNb24KKyBKdW4gMjcgMjE6MzQ6NTYgMjAxMSAtMDcwMAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCA1YzE3N2Y1MTdkMTZmMDU1NDViMjc5ZDE2ZjBlNGZkNTY5NmJlNjUxIE1lcmdlOiBmMGQ2YmYwCisKKyBjMmJjZWJjIEF1dGhvcjogV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+IERhdGU6ICAgTW9uCisgSnVuIDI3IDIxOjM0OjU1IDIwMTEgLTA3MDAKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgOWM5NzY5NTcyZWI4YzAzYjY5NTU2YzFjNWFhYjliNGQ1NmM2ZDFkMyBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gSnVuIDI3CisgMTQ6MTE6MTQgMjAxMSArMDAwMAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgZmVhdHVyZSB0byBub3Qgcm9sbAorCisgYnJhbmNoZXMgY3VycmVubHkgaW4gcmMgcGhhc2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgbnNyb2xsdXAgZnVuY3Rpb24gZm9yCisKKyByb2xsaW5nIGJyYW5jaGVzIHVwd2FyZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBjcmVhdGVkIGFuIG5zcGF0Y2hhcHBseSBmdW5jdGlvbgorCisgdG8gYXBwbHkgYSBwcmV2aW91c2x5IHRlc3RlZCBwYXRjaCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBuc3RyeXBhdGNoIGZ1bmN0aW9uIHRvCisKKyB0ZXN0IHBhdGNoIGFwcGxpY2F0aW9uIGFnYWluc3QgdmFyaW91cyBicmFuY2hlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgdmVyYm9zZSBvdXRwdXQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbW9yZSBwcmVmaXggY2hhbmdlcyBhbmQgYmV0dGVyCisKKyBzZXR0aW5nIG9mIGRlZmF1bHQgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiB1c2UgbnMgcHJlZml4ZXMgaW5zdGVhZCBvZiBnZW5lcmljCisKKyBzbm1wIHByZWZpeGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogCisKKyBNaXNzaW5nIGNoZWNrIGZvciBycG10cy5oIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBUd2VhayBSUE0gaGFuZGxpbmcgdG8gd29yaworCisgd2l0aCBsaWJyYXJ5IHZlcnNpb24gNC45IEJhc2VkIG9uIGEgcGF0Y2ggYnkgSmFuIFNhZnJhbmVrIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzogUHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcmVhZGluZworCisgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeSAocmF0aGVyIHRoYW4gcXVlcnlpbmcKKyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisgZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisKKyBmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorIChyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisgZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKworIGZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKyBmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCisgZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKyAocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworIGZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDUxMTogcmVhbGx5IHVzZQorCisgdGhlIHByb3BlciBmb3JtYXQgc3BlY2lmaWNhdGlvbi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDUxMTogcmVhbGx5IHVzZQorCisgdGhlIHByb3BlciBmb3JtYXQgc3BlY2lmaWNhdGlvbi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKworIGludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisgdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKworIGludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisgdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBVc2UgJXAgdG8gcHJpbnQgYSBwb2ludGVyIGluc3RlYWQKKworIG9mICVsZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogVXNlICVwIHRvIHByaW50IGEgcG9pbnRlciBpbnN0ZWFkCisKKyBvZiAlbGQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogcnVuIGNvcnJlY3QgdmVyc2lvbiBvZiBhdXRvY29uZiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiByYW4gYXV0b2NvbmYgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTAgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jOiBJbmNsdWRlIHN0ZGxpYi5oIHRvIG1ha2UgZG1hbGxvYyBoYXBweQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEwICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzOiBGaXggYnVpbGQgb2Ygc25tcHVzbQorCisgd2hlbiBhZGRpdGlvbmFsIHNlYyBtb2R1bGVzIHJlcXVlc3RlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jOiBJbmNsdWRlIHN0ZOeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLT1gJKRYi5oIHRvIG1ha2UgZG1hbGxvYyBoYXBweQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDkgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6IENIQU5HRVM6IEJVRzogMzE1MTg0NTogZml4IG11bHRpcGxlCisKKyByZWdpc3RyYXRpb25zIG9mIHNubXAgdHJhbnNwb3J0IGhhbmRsZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wOSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzogQ0hBTkdFUzogQlVHOiAzMTUxODQ1OiBmaXggbXVsdGlwbGUKKworIHJlZ2lzdHJhdGlvbnMgb2Ygc25tcCB0cmFuc3BvcnQgaGFuZGxlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDggIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmM6IG1vcmUgZG5zc2VjIHR3ZWFrcyAgLSBjcmVhdGUgYW4gYXBwLWdsb2JhbAorICAgICAgdmFsaWRhdG9yIGNvbnRleHQgZm9yIHVzZSB3aXRoIGFsbCAgICB2YWxpZGF0aW9uIHJvdXRpbmVzLiBtYWlubHkKKyAgICAgIHVzZWZ1bCBmb3IgbG9uZy1saXZlZCBhcHBzLiAgIC0gdXNlIHRoZSBhcHB0eXBlIGFzIHRoZSB2YWxpZGF0b3IKKyAgICAgICdzY29wZScsIGFsbG93aW5nICAgIGZvciBhcHAtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiB2YWxpZGF0aW9uCisgICAgICB2aWEgbGlidmFsJ3MgICAgZG5zdmFsLmNvbmYgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDcgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOiBhZGQgYSBtYXggZGVmaW5lIGZvcgorCisgZWFjaCBkZWZhdWx0IHN0b3JlIHR5cGUgICBub3QgYWN0dWFsbHkgdXNlZCwganVzdCBhIGhlbHBmdWwgcmVtaW5kZXIgZm9yIHRob3NlIGFkZGluZyAgIG5ldyBpZHMgd2hvIG1pZ2h0IG5vdCB0aGluayB0byBjaGVjayBORVRTTk1QX0RTX01BWF9TVUJJRFMuICAgICh0aGUgYm9vbCBsaXN0IGlzIHJhcGlkbHkgYXBwcm9hY2hpbmcgdGhlIGN1cnJlbnQgbGltaXQuKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDcgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46IG1lbnRpb24gYnVpbGRkaXIgd2hlbgorCisgY29tcGxhaW5pbmcgYWJvdXQgbm90IGJlaW5nIHJ1biBmcm9tIHNvdXJjZSB0cmVlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6IFJldmVydGVkIHIyMDM2MjogdGhhdCBwYXRjaCBtYWtlcyBzZW5zZSBvbiB0aGUKKworIHRydW5rIGFuZCB0aGUgNS42IGJyYW5jaCBidXQgbm90IG9uIHRoZSA1LjUgbm9yIG9uIHRoZSA1LjQgYnJhbmNoLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ5NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMzEwMjUwOiBmcm9tIGZlbm5lcjogbWlzYyBmaXhlcyBmb3IgZGVidWdnaW5nCisgb3V0cHV0IG9mIGFnZW50eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMzMTAyNTA6IGZyb20gZmVubmVyOiBtaXNjIGZpeGVzIGZvciBkZWJ1Z2dpbmcKKyBvdXRwdXQgb2YgYWdlbnR4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMzEwMjUwOiBmcm9tIGZlbm5lcjogbWlzYyBmaXhlcyBmb3IgZGVidWdnaW5nCisgb3V0cHV0IG9mIGFnZW50eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTLCBORVdTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UgZGVwZW5kIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IGZpeGVkIGF1dG9jb25mIHZlcnNpb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0ODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDg3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDg2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL1NOTVAvU05NUC54czogUmVpbnN0YXRlIGFuICJ1bnVzZWQiIGxhYmVsIHRoYXQgaXMgYWN0dWFsbHkKKworIHN0aWxsIHJlcXVpcmVkLiAgKHJlZmVyZW5jZWQgaW4gbGluZSAyNzEwKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogRml4IHR5cG8gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UgZGVwZW5kIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgQ0hBTkdFUywgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBmaXggeG1sIHF1b3RpbmcgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3BhcnNlLmM6IGZpeCBub24gZXhpc3RlbnQgbWFsbG9jIG1hY3JvIHRvIHVzZSBjYWxsb2MKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQXBwbGllZCB0aGUgaW50ZW50IG9mIHBhdGNoIDMwNDQ4ODggdG8gYWxsb3cgYXBwbGljYXRpb25zCisgdG8gcmVhZCB0aGUgZXJyb3IgbWVzc2FnZXMgb2YgYSBNSUIgcGFyc2luZyBmYWlsdXJlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiAKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCisgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiAKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCisgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiAKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCisgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiAKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCisgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiAKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCisgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCBoclNXUnVuUGF0aAorCisgb2Ygc3dhcHBlZC1vdXQgcHJvY2Vzc2VzIG9uIExpbnV4LiAgZmdldHMoKSByZXR1cm5zIE5VTEwgYm90aCB3aGVuIC9wcm9jL1BJRC9jbWRsaW5lIGlzIGVtcHR5ICg9IHN3YXBwZWQKKyBvdXQpIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRlZCBhZnRlciBmb3BlbigpLCBzbyBjaGVjaworIC9wcm9jL1BJRC9zdGF0dXMgaW4gYm90aCBjYXNlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCBoclNXUnVuUGF0aAorCisgb2Ygc3dhcHBlZC1vdXQgcHJvY2Vzc2VzIG9uIExpbnV4LiAgZmdldHMoKSByZXR1cm5zIE5VTEwgYm90aCB3aGVuIC9wcm9jL1BJRC9jbWRsaW5lIGlzIGVtcHR5ICg9IHN3YXBwZWQKKyBvdXQpIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRlZCBhZnRlciBmb3BlbigpLCBzbyBjaGVjaworIC9wcm9jL1BJRC9zdGF0dXMgaW4gYm90aCBjYXNlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCBoclNXUnVuUGF0aAorCisgb2Ygc3dhcHBlZC1vdXQgcHJvY2Vzc2VzIG9uIExpbnV4LiAgZmdldHMoKSByZXR1cm5zIE5VTEwgYm90aCB3aGVuIC9wcm9jL1BJRC9jbWRsaW5lIGlzIGVtcHR5ICg9IHN3YXBwZWQKKyBvdXQpIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRlZCBhZnRlciBmb3BlbigpLCBzbyBjaGVjaworIC9wcm9jL1BJRC9zdGF0dXMgaW4gYm90aCBjYXNlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCBoclNXUnVuUGF0aAorCisgb2Ygc3dhcHBlZC1vdXQgcHJvY2Vzc2VzIG9uIExpbnV4LiAgZmdldHMoKSByZXR1cm5zIE5VTEwgYm90aCB3aGVuIC9wcm9jL1BJRC9jbWRsaW5lIGlzIGVtcHR5ICg9IHN3YXBwZWQKKyBvdXQpIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRlZCBhZnRlciBmb3BlbigpLCBzbyBjaGVjaworIC9wcm9jL1BJRC9zdGF0dXMgaW4gYm90aCBjYXNlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHVwIHRoZSBhbnRlIGFuZCBydW4gb3RoZXIgdGVzdCBzdWl0ZXMKKworIGJlc2lkZXMganVzdCB0aGUgZGVmYXVsdCBzZXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvCisKKyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB1c20uYzogQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZAorCisgcmV3cml0aW5nIGV4aXN0aW5nIGF1dGhrZXkvcHJpdmtleS9ldGNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6IEFwcGxpZWQgdGhlIGludGVudAorICAgICAgb2YKKworIHBhdGNoIDMyOTkzODYgd2hpY2ggZml4ZXMgZHVwbGljYXRlIGVudHJpZXMgb24gYSBTSUdIVVAuICBUbyBhY2hpZXZlCisgdGhpcyBzb21lIG5ldyBoZWFkZXJfY29tcGxleCBmdW5jdGlvbnMgbmVlZGVkIHRvIGJlIGNyZWF0ZWQgdGhhdAorIGRpZG4ndCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBvbGRlciBvbmVzLiAgVGhlIG5vdGlmaWNhdGlvbiBjb2RlCisgbm93IGNhbGxzIHRoZXNlIG5ld2VyIGZ1bmN0aW9ucy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28KKworIHRoZXkgcmV0cnkgcHJvYmluZyBmb3IgYW4gZW5naW5lSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbworCisgdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvCisKKyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28KKworIHRoZXkgcmV0cnkgcHJvYmluZyBmb3IgYW4gZW5naW5lSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQKKworIHJld3JpdGluZyBleGlzdGluZyBhdXRoa2V5L3ByaXZrZXkvZXRjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQKKworIHJld3JpdGluZyBleGlzdGluZyBhdXRoa2V5L3ByaXZrZXkvZXRjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQKKworIHJld3JpdGluZyBleGlzdGluZyBhdXRoa2V5L3ByaXZrZXkvZXRjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQKKworIHJld3JpdGluZyBleGlzdGluZyBhdXRoa2V5L3ByaXZrZXkvZXRjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgsIHBlcmwvTWFrZWZpbGUuUEw6CisKKyBORVdTOiBzbm1wZDogcGF0Y2ggMzEzMTM5NzogZnJvbSB0YWtldm9zOiBodWdlIHNwZWVkdXBzIG9mIHRoZQorIFRDUC9VRFAgVGFibGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9OZXRTTk1QLnhzOiBBZGRlZCBhIGJvZ3VzIGVtcHR5IC54cyBmaWxlIGZvciBidW5kbGluZyBvbgorCisgbmV3ZXIgcGVybCB0aGF0IHdhbnRzICJzb21ldGhpbmciIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogcGF0Y2ggMzMwNjQ3NjogZnJvbSB0aW55cHlyYW1pZHM6IGZpeCBtZW1vcnkgbGVhayBpbiB0aGUKKyBzd3J1biBjb250YWluZXIgbG9hZGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzogQ0hBTkdFUzoKKworIHNubXBkOiBwYXRjaCAzMzA2NDc2OiBmcm9tIHRpbnlweXJhbWlkczogZml4IG1lbW9yeSBsZWFrIGluIHRoZQorIHN3cnVuIGNvbnRhaW5lciBsb2FkaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDQ0OTogdXNlCisKKyBORVRTTk1QX1BSSW8gInUiIGZvciBwcmludGluZyBzdWJpZHMgaW5zdGVhZCBvZiBvbmx5IE5FVFNOTVBfUFJJby4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogRm9sbG93LXVwIGZvciByMjA0NDk6IHVzZQorCisgTkVUU05NUF9QUklvICJ1IiBmb3IgcHJpbnRpbmcgc3ViaWRzIGluc3RlYWQgb2Ygb25seSBORVRTTk1QX1BSSW8uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IE1pY3Jvc29mdAorCisgVmlzdWFsIFN0dWRpbzogTGluayB3aXRoIGdkaTMyLmxpYiBpZiBPcGVuU1NMIGhhcyBiZWVuIGVuYWJsZWQKKyBiZWNhdXNlIGdkaTMyLmxpYiBpcyBhIGRlcGVuZGVuY3kgb2YgT3BlblNTTC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IE1pY3Jvc29mdAorCisgVmlzdWFsIFN0dWRpbzogTGluayB3aXRoIGdkaTMyLmxpYiBpZiBPcGVuU1NMIGhhcyBiZWVuIGVuYWJsZWQKKyBiZWNhdXNlIGdkaTMyLmxpYiBpcyBhIGRlcGVuZGVuY3kgb2YgT3BlblNTTC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IE1pY3Jvc29mdAorCisgVmlzdWFsIFN0dWRpbzogTGluayB3aXRoIGdkaTMyLmxpYiBpZiBPcGVuU1NMIGhhcyBiZWVuIGVuYWJsZWQKKyBiZWNhdXNlIGdkaTMyLmxpYiBpcyBhIGRlcGVuZGVuY3kgb2YgT3BlblNTTC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiBGb2xsb3ctdXAgZm9yIHIyMDQ0ODogc2luY2UgdGhlCisKKyAib2lkIiB0eXBlZGVmIGhhcyBiZWVuIGNoYW5nZWQgYmFjayBmcm9tIHVpbnQzMl90IHRvIHVfbG9uZywgY2hhbmdlCisgTkVUU05NUF9QUklvIGZyb20gTkVUU05NUF9QUkkzMiBpbnRvICJsIi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogRm9sbG93LXVwIGZvciByMjA0NDg6IHNpbmNlIHRoZQorCisgIm9pZCIgdHlwZWRlZiBoYXMgYmVlbiBjaGFuZ2VkIGJhY2sgZnJvbSB1aW50MzJfdCB0byB1X2xvbmcsIGNoYW5nZQorIE5FVFNOTVBfUFJJbyBmcm9tIE5FVFNOTVBfUFJJMzIgaW50byAibCIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogQ0hBTkdFUzogc25tcGQ6IFVzZSBwcm9wZXIgZm9ybWF0CisKKyBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cyBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHR5cGUgJ29pZCcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IENIQU5HRVM6IHNubXBkOiBVc2UgcHJvcGVyIGZvcm1hdAorCisgc3BlY2lmaWVyIGluIGRlYnVnIHN0YXRlbWVudHMgZm9yIHByaW50aW5nIHZhbHVlcyBvZiB0eXBlICdvaWQnLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBDSEFOR0VTOiBzbm1wZDogVXNlIHByb3BlciBmb3JtYXQKKworIHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzIGZvciBwcmludGluZyB2YWx1ZXMgb2YgdHlwZSAnb2lkJy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogQ0hBTkdFUzogc25tcGQ6IFVzZSBwcm9wZXIgZm9ybWF0CisKKyBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cyBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHR5cGUgJ29pZCcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogcmV2ZXJ0IE9JRCB0eXBlZGVmIHRvIHVfbG9uZyBhcworCisgYWdyZWVkIHRvIG9uIC1jb2RlcnMgYW5kIGluIHRoZSBhZG1pbiBtZWV0aW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogcmV2ZXJ0IE9JRCB0eXBlZGVmIHRvIHVfbG9uZyBhcworCisgYWdyZWVkIHRvIG9uIC1jb2RlcnMgYW5kIGluIHRoZSBhZG1pbiBtZWV0aW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc3lzdGVtLmM6IFJlbWVtYmVyIHRvIHJldHVybiBpbmZvIGFsc28gd2l0aG91dCBETlNTRUMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQ3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYzogQWRkZWQgTlVMTC1jaGVja3MKKworIGFmdGVyIG1hbGxvYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYzogQWRkZWQgTlVMTC1jaGVja3MKKworIGFmdGVyIG1hbGxvYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYzogQWRkZWQgTlVMTC1jaGVja3MKKworIGFmdGVyIG1hbGxvYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYzogQWRkZWQgTlVMTC1jaGVja3MKKworIGFmdGVyIG1hbGxvYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOiBDSEFOR0VTOgorCisgYWdlbnQ6IEJVRzogMzMwNTE1NzogRml4IGlwQWRkcmVzc1ByZWZpeCBoYW5kbGluZyBvZiBJUHY2IGFkZHJlc3NlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzogQ0hBTkdFUzoKKworIGFnZW50OiBCVUc6IDMzMDUxNTc6IEZpeCBpcEFkZHJlc3NQcmVmaXggaGFuZGxpbmcgb2YgSVB2NiBhZGRyZXNzZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IEJVRzogMzI5NTQwNzogRml4CisKKyBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IEJVRzogMzI5NTQwNzogRml4CisKKyBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IEJVRzogMzI5NTQwNzogRml4CisKKyBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogQlVHOiAzMjk1NDA3OiBGaXgKKworIGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKyAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCisgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzIzNDc1NDogRW5zdXJlCisgICAgICBvbGQKKworIGZfY3JlYXRlX2Zyb21fdHN0cmluZyBob29rIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBCVUc6CisgICAgICAzMjM0NzU0OgorCisgRW5zdXJlIG9sZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcgaG9vayBpcyBpbml0aWFsaXplZCB0byBOVUxMIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogQlVHOgorICAgICAgMzIzNDc1NDoKKworIEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyMzQ3NTQ6IEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMKKyBpbml0aWFsaXplZCB0byBOVUxMIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVzZSAjaWZkZWYKKworIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVzZSAjaWZkZWYKKworIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVzZSAjaWZkZWYKKworIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVzZSAjaWZkZWYKKworIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXNlICNpZmRlZgorCisgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcF9hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOiBDSEFOR0VTOiBtYW46IEJVRzoKKworIDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZCBzbm1wX2FzeW5jX3NlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOiBDSEFOR0VTOiBtYW46IEJVRzoKKworIDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZCBzbm1wX2FzeW5jX3NlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWY6IAorCisgQ0hBTkdFUzogbWFuOiBCVUc6IDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZAorIHNubXBfYXN5bmNfc2VuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZjogCisKKyBDSEFOR0VTOiBtYW46IEJVRzogMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UgYW5kCisgc25tcF9hc3luY19zZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcF9hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOiBDSEFOR0VTOiBtYW46IEJVRzoKKworIDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZCBzbm1wX2FzeW5jX3NlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHJhY2UKKworIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUgVHJlYXQgdGhlIHJlYWRzIGZyb20gL3Byb2MvPHBpZD4vKgorIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nLiAgKGFscmVhZHkKKyBmaXhlZCBpbiBWNS01LXBhdGNoZXMgYW5kIFY1LTQtcGF0Y2hlcyBpbiBTVk4gcmV2LiAyMDExNSwgZHVubm8gd2h5CisgSSBkaWQgbm90IHBhdGNoIHRydW5rKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcmFjZQorCisgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZSBUcmVhdCB0aGUgcmVhZHMgZnJvbSAvcHJvYy88cGlkPi8qCisgY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdCBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcuICAoYWxyZWFkeQorIGZpeGVkIGluIFY1LTUtcGF0Y2hlcyBhbmQgVjUtNC1wYXRjaGVzIGluIFNWTiByZXYuIDIwMTE1LCBkdW5ubyB3aHkKKyBJIGRpZCBub3QgcGF0Y2ggdHJ1bmspIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc2NhcGkuYzogQ0hBTkdFUzogc25tcGxpYjogQlVHOgorCisgMzE4NDY5NzogRG9uJ3QgcmVmZXJlbmNlIGludGVybmFsIE1ENSB3aGVuIGl0J3MgZXhwbGljaXRseSBkaXNhYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zY2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBCVUc6CisKKyAzMTg0Njk3OiBEb24ndCByZWZlcmVuY2UgaW50ZXJuYWwgTUQ1IHdoZW4gaXQncyBleHBsaWNpdGx5IGRpc2FibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIGhpbnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6IEZvbGxvdy11cCBmb3IgcjIwNDMyOiB0ZXN0aW5nL1JVTlRFU1RTIHdpdGhvdXQKKworIGFyZ3VtZW50cyB3b3JrcyBhZ2FpbiBhcyBpdCBzaG91bGQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOiBGb2xsb3ctdXAgZm9yIHIyMDQzMjogdGVzdGluZy9SVU5URVNUUyB3aXRob3V0CisKKyBhcmd1bWVudHMgd29ya3MgYWdhaW4gYXMgaXQgc2hvdWxkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IFJhbgorCisgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jIHRocm91Z2ggZG9zMnVuaXguICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZTogRml4ZWQgYSB0eXBvIGluIGEKKworIGNvbW1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGU6IEZpeGVkIGEgdHlwbyBpbiBhCisKKyBjb21tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOiBSVU5URVNUUyB3b3JrcyBhZ2FpbiBmb3IgdGVzdHMgd2l0aCBhIGZvdXItZGlnaXQKKworIG51bWJlci4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6IFJVTlRFU1RTIHdvcmtzIGFnYWluIGZvciB0ZXN0cyB3aXRoIGEgZm91ci1kaWdpdAorCisgbnVtYmVyLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBGaXhlZCBhIHJlY2VudGx5IGludHJvZHVjZWQgYnVnIGluCisKKyBuZXRzbm1wX2dldGFkZHJpbmZvKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOiBEb2N1bWVudCB0aGF0IHRoZSB1Y2Qtc25tcAorCisgZGlza2lvIGNvZGUgc3RpbGwgaGFzIHRvIGJlIG1vZGlmaWVkIHN1Y2ggdGhhdCBkaXNraW9fZnJlZV9jb25maWcoKQorIGdldHMgaW52b2tlZCB1cG9uIFNJR0hVUC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOiBEb2N1bWVudCB0aGF0IHRoZSB1Y2Qtc25tcAorCisgZGlza2lvIGNvZGUgc3RpbGwgaGFzIHRvIGJlIG1vZGlmaWVkIHN1Y2ggdGhhdCBkaXNraW9fZnJlZV9jb25maWcoKQorIGdldHMgaW52b2tlZCB1cG9uIFNJR0hVUC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IGZpeCBjYXN0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuYzogUmV2ZXJ0IDIwNDIwICJDSEFOR0VTOiBzbm1wZDogRml4ZWQgbWVtb3J5IGxlYWsgaW4gVENQLU1JQgorCisgdGFibGVzIGludHJvZHVjZWQgYnkgcGF0Y2ggIzMwNTM0MzYuIiBSZXZlcnQgMTk3MDggIkNIQU5HRVM6IHNubXBkOgorIFBBVENIOiAzMDUzNDM2OiBmcm9tOiB0YWtldm9zOiBmaXg6IHRjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2VzcworIGludmFsaWQgbWVtb3J5IGFjY2VzcyIgdGhlIGJ1ZyAzMDUzNDM2IGlzIGZpeGluZyB3YXMgaW50cm9kdWNlZCBpbiByMTc3MTksIGFuZCBmaXhlZCBpbgorIHIxNzg2MS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zeXN0ZW0uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOiBtb3JlIGRucyByZWxhdGVkIHR3ZWFrcyAgLQorICAgICAgYWRkIG5ldHNubXBfZ2V0aG9zdGJ5YWRkciAgLSBhbHdheXMgZGVmaW5lIG5ldHNubXBfKiB2ZXJzaW9uczsKKyAgICAgIGxvZ29uY2UgaWYgdW5kZXJseWluZyAgICBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlICAtIHVzZSBuZXcKKyAgICAgIGZ1bmN0aW9ucyBpbiBkaXNtYW4gbWlicyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsIHNubXBsaWIvc25tcHYzLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOiB1c2UgbmV3IG5ldHNubXAgZG5zCisKKyBmdW5jdGlvbnMgaW4gYXBwcy9zbm1wbGliIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgc25tcGxpYi9zeXN0ZW0uYzogbW92ZSBETlNTRUMKKworIHZhbGlkYXRpb24gaW50byByZXNvbHZlciB3cmFwcGVyIGZ1bmN0aW9ucyAgIC0gYWxsb3dzIG90aGVyIGNvZGUgdG8gYmVuZWZpdCBmcm9tIHZhbGlkYXRpb24gICAtIG5ldyBuZXRzbm1wX2dldGhvc3RieW5hbWUsIG5ldHNubXBfZ2V0YWRkcmluZm8gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBGb2xsb3ctdXAgZm9yIHIyMDQxNzogcmVwbGFjZWQgYSBtYWxsb2MoKS9mcmVlKCkKKworIHBhaXIgYnkgYSBjYWxsIHRvIHJlYWxsb2MoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IEZvbGxvdy11cCBmb3IgcjIwNDE3OiByZXBsYWNlZCBhIG1hbGxvYygpL2ZyZWUoKQorCisgcGFpciBieSBhIGNhbGwgdG8gcmVhbGxvYygpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogRm9sbG93LXVwIGZvciByMjA0MTc6IHJlcGxhY2VkIGEgbWFsbG9jKCkvZnJlZSgpCisKKyBwYWlyIGJ5IGEgY2FsbCB0byByZWFsbG9jKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYzogRml4IGZvciBSSEVMNAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogSGVhZGVyIGZpZGRsaW5nIGZvciB0aGUKKworIGJlbmVmaXQgb2YgUkhFTDQsIFNvbGFyaXMsIE9wZW5CU0QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuYzogQ0hBTkdFUzogc25tcGQ6IEZpeGVkIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIgdGFibGVzCisgICAgICBpbnRyb2R1Y2VkCisKKyBieSBwYXRjaCAjMzA1MzQzNi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0MjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5jOiBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbWVtb3J5IGxlYWsgaW4gVENQLU1JQiB0YWJsZXMKKyAgICAgIGludHJvZHVjZWQKKworIGJ5IHBhdGNoICMzMDUzNDM2LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDogUmV2ZXJ0ZWQgYWNjaWRlbnRhbGx5IGNvbW1pdHRlZAorCisgY2hhbmdlcyBvZiByMjA0MTIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgc25tcF9mcmVlX3Nlc3Npb24oKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgc25tcF9mcmVlX3Nlc3Npb24oKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgc25tcF9mcmVlX3Nlc3Npb24oKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgc25tcF9mcmVlX3Nlc3Npb24oKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogX21pYmluZGV4X2FkZCgpIG5vIGxvbmdlciByZWFkcworCisgcGFzdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgX21pYmluZGV4ZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBfbWliaW5kZXhfYWRkKCkgbm8gbG9uZ2VyIHJlYWRzCisKKyBwYXN0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSBfbWliaW5kZXhlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IF9taWJpbmRleF9hZGQoKSBubyBsb25nZXIgcmVhZHMKKworIHBhc3QgdGhlIGVuZCBvZiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IF9taWJpbmRleGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2xjZF90aW1lLmM6IEF2b2lkIHRoYXQgTVNWQyB0cmlnZ2VycyBhIGNvbXBpbGVyIHdhcm5pbmcgb24KKworIHRoZSBjb2RlIGluIHNubXBsaWIvbGNkX3RpbWUuYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYzogQXZvaWQKKworIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwTmV0VG9NZWRpYVRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwTmV0VG9NZWRpYVRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwTmV0VG9NZWRpYVRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwTmV0VG9NZWRpYVRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeQorCisgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpZlRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkKKworIGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaWZUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5CisKKyBsZWFrIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlmVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeQorCisgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpZlRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsKKworIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwQWRkclRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrCisKKyBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcEFkZHJUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhaworCisgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBBZGRyVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6IAorCisgQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKQorIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkgaXBBZGRyVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogRG9jdW1lbnRhdGlvbiAvIHNvdXJjZSBjb2RlIGNvbW1lbnQgc3BlbGxpbmcgZml4OgorCisgZXhpdGVudCAtPiBleGlzdGVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZywgc25tcGxpYi9taWIuYzogRG9jdW1lbnRhdGlvbiAvIHNvdXJjZSBjb2RlIGNvbW1lbnQKKworIHNwZWxsaW5nIGZpeDogZXhpdGVudCAtPiBleGlzdGVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZywgc25tcGxpYi9taWIuYzogRG9jdW1lbnRhdGlvbiAvIHNvdXJjZSBjb2RlIGNvbW1lbnQKKworIHNwZWxsaW5nIGZpeDogZXhpdGVudCAtPiBleGlzdGVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZywgc25tcGxpYi9taWIuYzogRG9jdW1lbnRhdGlvbiAvIHNvdXJjZSBjb2RlIGNvbW1lbnQKKworIHNwZWxsaW5nIGZpeDogZXhpdGVudCAtPiBleGlzdGVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBXaW4zMjogQnVpbGQKKworIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYyBvbmx5IGlmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyBoYXMgYmVlbiBkZWZpbmVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBjb25maWd1cmUsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IGluc3RhbGwgdGhlIGJ1aWx0IGZlYXR1cmUKKworIGhlYWRlcnMgdG9vIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZTogQ0hBTkdFUzoKKworIHRlc3Rpbmc6IFRlc3RzIDAyNSBhbmQgMDI2IHBhc3Mgb24gTWluR1cgZXZlbiBpZiB3aW5FeHRETEwgaGFzIGJlZW4KKyBlbmFibGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGU6IFQwNjUgcm9idXN0bmVzcworCisgaW1wcm92ZW1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX3ZvaWQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3Lmg6IENIQU5HRVM6IHNubXBkOiB1Y2Rfc25tcCBidWlsZHMKKworIGFnYWluIG9uIE1pbkdXIGFuZCBDeWd3aW4uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBpbnN0YWxsIHRoZSBuZXQtc25tcC1mZWF0dXJlcy5oIGZpbGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZTogSW1wcm92ZWQgdGVzdAorCisgcm9idXN0bmVzcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzogQ29tcGlsZXIgd2FybmluZyBmaXhlcy4gIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDAzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogTWluR1c6IGF2b2lkIHRoYXQgZ2NjIGNvbXBsYWlucyBhYm91dCBwYXNpbmcKKworIGEgKGNoYXIgKikgYXJndW1lbnQgd2hpbGUgKHVuc2lnbmVkIGNoYXIgKikgaXMgZXhwZWN0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogTWluR1c6IGF2b2lkIHRoYXQgZ2NjIGNvbXBsYWlucyBhYm91dCBwYXNpbmcKKworIGEgKGNoYXIgKikgYXJndW1lbnQgd2hpbGUgKHVuc2lnbmVkIGNoYXIgKikgaXMgZXhwZWN0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogTWluR1c6IGF2b2lkIHRoYXQgZ2NjIGNvbXBsYWlucyBhYm91dCBwYXNpbmcKKworIGEgKGNoYXIgKikgYXJndW1lbnQgd2hpbGUgKHVuc2lnbmVkIGNoYXIgKikgaXMgZXhwZWN0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogTWluR1c6IGF2b2lkIHRoYXQgZ2NjIGNvbXBsYWlucyBhYm91dCBwYXNpbmcKKworIGEgKGNoYXIgKikgYXJndW1lbnQgd2hpbGUgKHVuc2lnbmVkIGNoYXIgKikgaXMgZXhwZWN0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYzogQXZvaWQgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaWYgdGhlIGxhc3QgY2hhcgorCisgb2YgdGltZV9zdHJpbmcgaXMgaW4gdGhlIHJhbmdlIDB4ODAuLjB4ZmUgYW5kIGNoYXIgaXMgYSBzaWduZWQgdHlwZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiBSZXZlcnRlZCByMjAzODAgYmVjYXVzZSBpdCBicmVha3MKKworIGFsbCBzdGF0ZW1lbnRzIHRoYXQgcHJpbnQgYW4gT0lEIHN1Yi1JRCBvbiBhbnkgNjQtYml0IHBsYXRmb3JtLiBUaGUKKyBlZmZlY3Qgb2YgcjIwMzgwIG9uIGJpZyBlbmRpYW4gYXJjaGl0ZWN0dXJlcyB3YXMgdGhhdCBhICIwIiB3b3VsZCBiZQorIHByaW50ZWQgaW5zdGVhZCBvZiB0aGUgT0lEIHN1Yi1JRCAoYXQgbGVhc3Qgd2l0aCB0aGUgTFA2NCBhbmQgdGhlCisgSUxQNjQgbW9kZWxzKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUywgTkVXUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOiBDKysgLT4gQyBjb21tZW50cworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IE5FV1MgdXBkYXRlIGZvciA1LjcgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogcmV2ZXJ0IHRoZSBvaWQgdHlwZWRlZiByZXNpemluZworCisgZnJvbSByMTc4MDkgYmVjYXVzZSBpdCBicm9rZSBiYWNrd2FyZHMgY29tcGF0LCBhcyBwb2ludGVkIG91dCBieQorIHVzZXJzIG9uIHRoZSAtY29kZXJzIGxpc3QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IHVzZSBwcm9wZXIgYXV0b2NvbmYgdmVyc2lvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwKKyAgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06IFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnRvcDogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IGFkZGVkIGEgbWlzc2luZyAwIGluIHRoZSByZXZpc2lvbiBkYXRlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jOiBVc2Ugc3ltYm9saWMKKworIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYzogVXNlIHN5bWJvbGljCisKKyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmM6IFVzZSBzeW1ib2xpYworCisgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDM3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jOiBVc2Ugc3ltYm9saWMKKworIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYzogVXNlIHN5bWJvbGljCisKKyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvcmZjbWlicy5kaWZmOiBJQU5BIGhhcyBmaXhlZCB0aGUKKworIElBTkEtSVBQTS1NRVRSSUNTLVJFR0lTVFJZLU1JQiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL3JmY21pYnMuZGlmZjogSUFOQSBoYXMgZml4ZWQgdGhlCisKKyBJQU5BLUlQUE0tTUVUUklDUy1SRUdJU1RSWS1NSUIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IGFkZGVkIGEgbmV3IFJFVklTSU9OIGNsYXVzZSB0byBsaXN0IHRoZQorCisgY2hhbmdlcyBpbiB0aGUgdGhlIHJlY2VudCB1cGRhdGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBhZGRlZCBwaW5nL3RyYWNlcm91dGUgbWlicyBub3RlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOiB3ZSBhY3R1YWxseSB3YW50IHRvIHVzZSB0aGUgYmFzZQorCisgT0lEIGFzIHRoZSBzdGFydGluZyBwb2ludCwgbm90IHRoZSByZWcgT0lELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOiBmaXhlZCB0aGUgcHJveHkgc3VwcG9ydCB0byBkbyBhCisKKyBwcm9wZXIgT0lEIGxlc3MgdGhhbiBPSUQgY29tcGFyZS4gIFdlIGFjdHVhbGx5IGRvbid0IGNhcmUgYWJvdXQgdGhlCisgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0LCBvbmx5IHRoYXQgaXQgd2FzIGJlZm9yZSB0aGUKKyByZWdpc3RlcmVkIHJlYmFzZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6IENIQU5HRVM6IHBhdGNoIDMxNDA4MzM6IGZyb20KKworIGpzYWZyYW5lazogZml4IHByb3h5IEdFVE5FWFQgcmVxdWVzdHMgV2hlbiBPSURzIHJlcXVlc3RlZCBhcmUgYmVsb3cKKyB0aGUgcHJveHkgcmVxdWVzdCByZW1hcCwgd2UgbmVlZCB0byBub3QgaW5jbHVkZSBhbnkgT0lEcyB0aGF0IG1pZ2h0CisgYmUgaW4gdGhlIHNwYWNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIE9JRCBhbmQgdGhlIHJlbWFwcGVkIE9JRC4gIFRoaXMKKyBwYXRjaCBmdWRnZXMgdGhlIHJlcXVlc3Qgc28gdGhhdCBpdCBmaXhlcyB0aGUgcmVxdWVzdCBPSUQgc28gaXQncworIGp1c3QgYmVmb3JlIHRoZSByZW1hcHBlZCBwcm94eSByYW5nZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMsCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oLCBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisgICAgICBORVdTOgorCisgUEFUQ0ggMzE2NzMyNTogZnJvbSBrcmlzenRvZm9ybzogVUNELVNOTVAvU3lzdGVtU3RhdHM6IGFkZCB2YXJpYWJsZXMKKyB0byByZXBvcnQgY3B1c3RlYWwsIGNwdWd1ZXN0LCBjcHVndWVzdG5pY2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmM6IENIQU5HRVM6IHBhdGNoCisKKyAzMTg0MDI2OiBmcm9tIGVpdm5hZXM6IEF2b2lkIGNvbnN0YW50IHJlZnJlc2ggb2YgaW50ZXJmYWNlCisgc3RhdGlzdGljcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGFwcHMvc25tcGRlbHRhLmMsIHNubXBsaWIvc2NhcGkuYywgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYzogRml4ZWQKKyAgICAgIHNldmVyYWwKKworIGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IHRoZSBNU1ZDIGNvbXBpbGVyLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9nZXR0aW1lb2ZkYXkuYzogV2luMzIvTVNWQzogRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzogQ0hBTkdFUzogYWdlbnQ6IEZpeGVkIGEKKworIHllYXItMjAzOCBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGlwUm91dGVUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jOiBGaXgKKworIHdhcm5pbmdzIGFuZCBkYXRhIGZvcm1hdCBmb3IgRGF0ZUFuZFRpbWUgb2JqZWN0cy4gIFRoZXNlIG1vZHVsZXMKKyB3b3JrLCBidXQ6IC0gVGhleSBhcmUgTGludXggb25seSAtIFJvd3MgbXVzdCBiZSBjcmVhdGVkIHdpdGggcm93U3RhdHVzIGNyZWF0ZUFuZFdhaXQgYmVmb3JlIHRoZXkgYXJlCisgcG9wdWxhdGVkIC0gQWdlbnQgbXVzdCBydW4gYXMgcm9vdCAtIEFnZW50IGlzIGJsb2NrZWQgd2hpbGUgdGVzdHMgcnVuIC0gRGF0YSBmb3JtYXQgZm9yIEluZXRBZGRyZXNzIG9iamVjdHMgaXMgd3JvbmcuIEl0IGlzIEFTQ0lJLCBub3QKKyAgIGJpbmFyeSAobWFraW5nIGl0IGVhc2llciB0byB1c2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgLi4uKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmM6IEZpeAorCisgd2FybmluZ3MgYW5kIGRhdGEgZm9ybWF0IGZvciBEYXRlQW5kVGltZSBvYmplY3RzLiAgVGhlc2UgbW9kdWxlcworIHdvcmssIGJ1dDogLSBUaGV5IGFyZSBMaW51eCBvbmx5IC0gUm93cyBtdXN0IGJlIGNyZWF0ZWQgd2l0aCByb3dTdGF0dXMgY3JlYXRlQW5kV2FpdCBiZWZvcmUgdGhleSBhcmUKKyBwb3B1bGF0ZWQgLSBBZ2VudCBtdXN0IHJ1biBhcyByb290IC0gQWdlbnQgaXMgYmxvY2tlZCB3aGlsZSB0ZXN0cyBydW4gLSBEYXRhIGZvcm1hdCBmb3IgSW5ldEFkZHJlc3Mgb2JqZWN0cyBpcyB3cm9uZy4gSXQgaXMgQVNDSUksIG5vdAorICAgYmluYXJ5IChtYWtpbmcgaXQgZWFzaWVyIHRvIHVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCAuLi4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYzogRml4CisKKyB3YXJuaW5ncyBhbmQgZGF0YSBmb3JtYXQgZm9yIERhdGVBbmRUaW1lIG9iamVjdHMuICBUaGVzZSBtb2R1bGVzCisgd29yaywgYnV0OiAtIFRoZXkgYXJlIExpbnV4IG9ubHkgLSBSb3dzIG11c3QgYmUgY3JlYXRlZCB3aXRoIHJvd1N0YXR1cyBjcmVhdGVBbmRXYWl0IGJlZm9yZSB0aGV5IGFyZQorIHBvcHVsYXRlZCAtIEFnZW50IG11c3QgcnVuIGFzIHJvb3QgLSBBZ2VudCBpcyBibG9ja2VkIHdoaWxlIHRlc3RzIHJ1biAtIERhdGEgZm9ybWF0IGZvciBJbmV0QWRkcmVzcyBvYmplY3RzIGlzIHdyb25nLiBJdCBpcyBBU0NJSSwgbm90CisgICBiaW5hcnkgKG1ha2luZyBpdCBlYXNpZXIgdG8gdXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IC4uLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDM2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jOiBGaXgKKworIHdhcm5pbmdzIGFuZCBkYXRhIGZvcm1hdCBmb3IgRGF0ZUFuZFRpbWUgb2JqZWN0cy4gIFRoZXNlIG1vZHVsZXMKKyB3b3JrLCBidXQ6IC0gVGhleSBhcmUgTGludXggb25seSAtIFJvd3MgbXVzdCBiZSBjcmVhdGVkIHdpdGggcm93U3RhdHVzIGNyZWF0ZUFuZFdhaXQgYmVmb3JlIHRoZXkgYXJlCisgcG9wdWxhdGVkIC0gQWdlbnQgbXVzdCBydW4gYXMgcm9vdCAtIEFnZW50IGlzIGJsb2NrZWQgd2hpbGUgdGVzdHMgcnVuIC0gRGF0YSBmb3JtYXQgZm9yIEluZXRBZGRyZXNzIG9iamVjdHMgaXMgd3JvbmcuIEl0IGlzIEFTQ0lJLCBub3QKKyAgIGJpbmFyeSAobWFraW5nIGl0IGVhc2llciB0byB1c2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgLi4uKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmM6IEZpeAorCisgd2FybmluZ3MgYW5kIGRhdGEgZm9ybWF0IGZvciBEYXRlQW5kVGltZSBvYmplY3RzLiAgVGhlc2UgbW9kdWxlcworIHdvcmssIGJ1dDogLSBUaGV5IGFyZSBMaW51eCBvbmx5IC0gUm93cyBtdXN0IGJlIGNyZWF0ZWQgd2l0aCByb3dTdGF0dXMgY3JlYXRlQW5kV2FpdCBiZWZvcmUgdGhleSBhcmUKKyBwb3B1bGF0ZWQgLSBBZ2VudCBtdXN0IHJ1biBhcyByb290IC0gQWdlbnQgaXMgYmxvY2tlZCB3aGlsZSB0ZXN0cyBydW4gLSBEYXRhIGZvcm1hdCBmb3IgSW5ldEFkZHJlc3Mgb2JqZWN0cyBpcyB3cm9uZy4gSXQgaXMgQVNDSUksIG5vdAorICAgYmluYXJ5IChtYWtpbmcgaXQgZWFzaWVyIHRvIHVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCAuLi4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvU05NUC9TTk1QLnhzOiBSZW1vdmVkIGFuIHVudXNlZCBsYWJlbCBmcm9tIHBlcmwvU05NUC9TTk1QLnhzLgorICAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvU05NUC9TTk1QLnhzOiBSZW1vdmVkIGFuIHVudXNlZCBsYWJlbCBmcm9tIHBlcmwvU05NUC9TTk1QLnhzLgorICAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDM2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvU05NUC9TTk1QLnhzOiBSZW1vdmVkIGFuIHVudXNlZCBsYWJlbCBmcm9tIHBlcmwvU05NUC9TTk1QLnhzLgorICAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvU05NUC9TTk1QLnhzOiBSZW1vdmVkIGFuIHVudXNlZCBsYWJlbCBmcm9tIHBlcmwvU05NUC9TTk1QLnhzLgorICAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oOiBDSEFOR0VTOiBzbm1wZDogRGVjbGFyZSB0aGUgT0lECisKKyBhcmd1bWVudCB0eXBlIG9mIE1JQiByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFzICdjb25zdCBvaWQgKicgaW5zdGVhZAorIG9mICdvaWQgKicgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBtb2RpZnkgdGhlIE9JRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOiBVc2UgdGhlIGNvcnJlY3QgZGF0YSB0eXBlIGZvcgorCisgdGhlICdjYWNoZSBleHBpcmVkJyB2YXJpYWJsZTogY2hhciBpbnN0ZWFkIG9mIGludC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzCisKKyBpbnRyb2R1Y2VkIGluIHIyMDE1MS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFdpbjMyOiBpbXByb3ZlZCBzb3VyY2UgY29kZSBjb25zaXN0ZW5jeSBieQorCisgdXNpbmcgTFBDVFNUUiBpbnN0ZWFkIG9mIExQQ1NUUi4gTm90ZTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQKKyBVbmljb2RlIGJ1aWxkcyBhcmUgc3VwcG9ydGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFdpbjMyOiBpbXByb3ZlZCBzb3VyY2UgY29kZSBjb25zaXN0ZW5jeSBieQorCisgdXNpbmcgTFBDVFNUUiBpbnN0ZWFkIG9mIExQQ1NUUi4gTm90ZTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQKKyBVbmljb2RlIGJ1aWxkcyBhcmUgc3VwcG9ydGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYzogQWRkIGZpbGUKKworIGZvcmdvdHRlbiBpbiByMjAzNTMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDogUmV2ZXJ0ZWQgYSBjaGFuZ2UgdGhhdCB3YXMKKworIGNvbW1pdHRlZCBhY2NpZGVudGFsbHkgaW4gcjIwMjc2LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IEZpeGVkIHR3byBjb21waWxlcgorCisgd2FybmluZ3MuICAoQmFja3BvcnRlZCByMjAyMzYgZnJvbSB0aGUgdHJ1bmsuKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzogQ29tbWVudGVkIG91dCBhbiB1bnVzZWQgZnVuY3Rpb24KKworIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNvbXBsYWluZWQgYWJvdXQgaXQuICAoQmFja3BvcnRlZCByMjAyMzcgZnJvbQorIHRoZSB0cnVuay4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV8KKyAgICAgICBhY2Nlc3MuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDogQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMxMjU5NjoKKworIGZyb20gZmFibGVkODA6IGxpc3RlbiBmb3IgbmV0bGluayBjaGFuZ2UgZXZlbnRzIGZvciB0aGUgYXJwLXJlbGF0ZWQKKyB0YWJsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmg6IE5FV1M6IFBBVENICisKKyAzMTk4NzgxOiBmcm9tIGZlbm5lcjogR2V0IGRpc21hbi9waW5nIGFuZCBkaXNtYW4vdHJhY2Vyb3V0ZSB0byBhdAorIGxlYXN0IGNvbXBpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDM1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oOiBORVdTOiBQQVRDSAorCisgMzE5ODc4MTogZnJvbSBmZW5uZXI6IEdldCBkaXNtYW4vcGluZyBhbmQgZGlzbWFuL3RyYWNlcm91dGUgdG8gYXQKKyBsZWFzdCBjb21waWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaDogTkVXUzogUEFUQ0gKKworIDMxOTg3ODE6IGZyb20gZmVubmVyOiBHZXQgZGlzbWFuL3BpbmcgYW5kIGRpc21hbi90cmFjZXJvdXRlIHRvIGF0CisgbGVhc3QgY29tcGlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmg6IE5FV1M6IFBBVENICisKKyAzMTk4NzgxOiBmcm9tIGZlbm5lcjogR2V0IGRpc21hbi9waW5nIGFuZCBkaXNtYW4vdHJhY2Vyb3V0ZSB0byBhdAorIGxlYXN0IGNvbXBpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IE5FV1M6IHNubXBsaWI6IGFkZCBvcHRpb25hbCBzdXBwb3J0IGZvciBsb2NhbAorCisgRE5TU0VDIHZhbGlkYXRpb24gb2YgaG9zdG5hbWVzICAtIG9wdGlvbmFsIGF0IGNvbmZpZ3VyZSB0aW1lOiAtLXdpdGgtbG9jYWwtZG5zc2VjLXZhbGlkYXRpb24gIC0gcmVxdWlyZXMgRE5TU0VDLVRvb2wgdmFsaWRhdGlvbiBsaWJyYXJpZXMgIC0gaW5pdGlhbCBzdXBwb3J0LCBmb3Igc3lzdGVtcyB3aXRoIGdldGFkZHJpbmZvLiBzdXBwb3J0IGZvcgorICAgIGFkZGl0aW9uYWwgcmVzb2x2ZXIgaW50ZXJmYWNlcyBjb21pbmcgc29vbi4gICAtIGFsc28gVE9ETzogZmxhZyBmb3IgaWdub3JpbmcgdmFsaWRhdG9pbiBlcnJvcnMgKGxvZyAmIGNvbnRpbnVlKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaDogbW92ZSB1bnVzZWQgKGFuZCB0b28gZ2VuZXJpYykKKworIHRva2VuIHdpdGhpbiBVQ0RfQ09NUEFUSUJMRSBpZmRlZiAgIC0gTUFYTEFCRUwgY29uZmxpY3RzIHdpdGggPGFycGEvbmFtZXNlci5oPiAgIC0gYWRkZWQgTkVUU05NUF9NQVhMQUJFTCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1cGRhdGUgY29uZmlndXJlL01ha2VmaWxlcworCisgZm9yIEROU1NFQyBsb2NhbCB2YWxpZGF0aW9uIG9wdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzQ3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDogbWFrZSBkZXBlbmQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOiByZW1vdmVkIHRoZQorCisgYWNjaWRlbnRhbCBicm9rZW4gZmVhdHVyZSByZXF1aXJlIGxpbmUgdGhhdCBnb3QgaGFsZiBpbnNlcnRlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzM5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDogbWFrZSBkZXBlbmQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzM2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IGluY29tcGxldGUgdW5pbnN0YWxsCisKKyBjb25maWd1cmF0aW9uOiAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IGluY29tcGxldGUgdW5pbnN0YWxsCisKKyBjb25maWd1cmF0aW9uOiAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IGluY29tcGxldGUgdW5pbnN0YWxsCisKKyBjb25maWd1cmF0aW9uOiAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IGluY29tcGxldGUgdW5pbnN0YWxsCisKKyBjb25maWd1cmF0aW9uOiAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggaW5jb21wbGV0ZSB1bmluc3RhbGwKKworIGNvbmZpZ3VyYXRpb246IC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTCAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFN1cHBvcnQgVGFyL0daaXAgY29tbWFuZCBwYXRocworCisgY29udGFpbmluZyBzcGFjZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDMzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogU3VwcG9ydCBUYXIvR1ppcCBjb21tYW5kIHBhdGhzCisKKyBjb250YWluaW5nIHNwYWNlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBTdXBwb3J0IFRhci9HWmlwIGNvbW1hbmQgcGF0aHMKKworIGNvbnRhaW5pbmcgc3BhY2VzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFJlcG9ydCBHWmlwIGNvbW1hbmQgY29ycmVjdGx5CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBSZXBvcnQgR1ppcCBjb21tYW5kIGNvcnJlY3RseQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogUmVwb3J0IEdaaXAgY29tbWFuZCBjb3JyZWN0bHkKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYzogRml4IGZvciBEcmFnb25GbHkgQlNEIChkb2VzCisgICAgICBub3QKKworIGRlZmluZSBJUF9TRU5EU1JDQUREUikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmM6IEZpeCBmb3IgRHJhZ29uRmx5IEJTRCAoZG9lcworICAgICAgbm90CisKKyBkZWZpbmUgSVBfU0VORFNSQ0FERFIpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaDogRml4IHNwZWxsaW5nIG9mCisKKyBTT19SRUNWRFNUQUREUiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oOiBGaXggc3BlbGxpbmcgb2YKKworIFNPX1JFQ1ZEU1RBRERSIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCBtYW4vc25tcC5jb25mLjUuZGVmLCAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzogTkVXUzogYXBwczogYWRkIHNubXAuY29uZiB0b2tlbnMgZm9yIHRpbWVvdXRzCisKKyBhbmQgcmV0cmllcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9URVNUQ09ORi5zaDogQ0hBTkdFUzogTWluR1c6IE1hZGUKKworIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlIE5ldC1TTk1QIHZhcmlhYmxlcyBkZWZpbmVkCisgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIFNvbWUgdGVzdHMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSBhZnRlciB0aGUKKyBOZXQtU05NUCBiaW5hcmllcyAoTVNWQyBidWlsZCkgaGFkIGJlZW4gaW5zdGFsbGVkIGRvIG5vdyBwYXNzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDMyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL1RFU1RDT05GLnNoOiBDSEFOR0VTOiBNaW5HVzogTWFkZQorCisgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUgTmV0LVNOTVAgdmFyaWFibGVzIGRlZmluZWQKKyBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IGFmdGVyIHRoZQorIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKSBoYWQgYmVlbiBpbnN0YWxsZWQgZG8gbm93IHBhc3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOiAKKworIENIQU5HRVM6IE1pbkdXOiBNYWRlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlCisgTmV0LVNOTVAgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIFNvbWUgdGVzdHMgdGhhdAorIGZhaWxlZCBwcmV2aW91c2x5IGFmdGVyIHRoZSBOZXQtU05NUCBiaW5hcmllcyAoTVNWQyBidWlsZCkgaGFkIGJlZW4KKyBpbnN0YWxsZWQgZG8gbm93IHBhc3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOiAKKworIENIQU5HRVM6IE1pbkdXOiBNYWRlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlCisgTmV0LVNOTVAgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIFNvbWUgdGVzdHMgdGhhdAorIGZhaWxlZCBwcmV2aW91c2x5IGFmdGVyIHRoZSBOZXQtU05NUCBiaW5hcmllcyAoTVNWQyBidWlsZCkgaGFkIGJlZW4KKyBpbnN0YWxsZWQgZG8gbm93IHBhc3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMi5zbG4sCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyBSZW1vdmVkIFZpc3VhbCBTdHVkaW8gMjAwNSBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBhZ2FpbiBzaW5jZQorIFZpc3VhbCBTdHVkaW8gMjAxMCByZWZ1c2VzIHRvIGxvYWQgdGhlc2UuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBjbGVhbiB0aGUgcGVybC9weXRob24gZmVhdHVyZSBsZWZ0b3ZlcnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBmaXggbWliIG1vZHVsZSBpbnZvY2F0aW9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6IGZpeCBpZmRlZgorCisgdHlwbyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBmaXggcGVybC9weXRob24gZmVhdHVyZSBkZXBlbmRlbmNpZXMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzogcmV2ZXJ0ZWQgYXV0b19ubGlzdCBtYWNybyB1c2FnZTsgdGhlIGZ1bmN0aW9uCisKKyBpcyB1c2VkIGluIGhlYWRlcnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IEFkZCBhIC1UIG9wdGlvbiB0byBydW4gJ21ha2UgdGVzdCcKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL01ha2VmaWxlLmluOiBmaXggdGhlIGVuY29kZV9rZXljaGFuZ2UgLmZ0IGZpbGVuYW1lIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgc25tcGxpYi90b29scy5jOiAKKworIGZpeCB0aGUgZmVhdHVyZXMgcmVxdWlyZWQgYnkgdGhlIFRyYXBSZWNlaXZlciBtb2R1bGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW46IEFkZCB0aGUgVHJhcFJlY2VpdmVyIHRvIHRoZSBsaXN0IG9mIHBlcmwgbW9kdWxlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOiB1c2UgdGhlIG5ld2VyIE5ldC1TTk1QIEFQSXMsIHJhdGhlciB0aGFuIHRoZQorCisgb2xkZXIgVUNEIG9uZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9TTk1QL1NOTVAueHM6IHJlbW92ZSBTRVQgY29kZSB3aGVuIHVuZGVyIC0tcmVhZC1vbmx5IG1vZGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmM6IHJlcXVpcmUKKworIGNoZWNrX3ZiX3VpbnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VuCisgICAgICAgdC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMsIAorICAgICAgcHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzogbGFzdCBvZiB0aGUgcGVybC11c2VkIGZlYXR1cmUgZnVuY3Rpb25zCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbgorICAgICAgIHQuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jOgorCisgc3RhcnRlZCB0aGUgZmluYWwgc2V0IG9mIGZ1bmN0aW9uIHJlbW92YWxzIGZvciBmZWF0dXJlcyByZXF1aXJlZCBieQorIHBlcmwvcHl0aG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaTogYWRkZWQgdGhlCisKKyBuZXQtc25tcC1mZWF0dXJlcy5oIGhlYWRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaDogQWRkZWQgcGVybCBmZWF0dXJlCisKKyByZXF1aXJlbWVudHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBjb25maWd1cmUsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sIAorICAgICAgcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oOiBob3BlZnVsbHkKKyAgICAgIHdvcmtpbmcKKworIHJ1bGVzIHRvIGFwcGx5IGZlYXR1cmUgcmVxdWlyZW1lbnRzIHRvIHBlcmwgYW5kIHB5dGhvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYzogbW9yZSBjaGFuZ2VzIHRvIHJlbW92ZSB1bm5lZWRlZCBmdW5jdGlvbnMKKworIHByaW1hcmlseSB3aGVuIHdyaXRlIG1vZGUgaXMgdHVybmVkIG9mZiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6IGNoYW5nZSB0aGUgd2FudCBpbnZvY2F0aW9uIHRvIG9ubHkgZGVmYXVsdAorCisgdG8gZXhjbHVkZSBleHRlcm5hbCBob29rcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZTogc2VhcmNoIHRocm91Z2ggLnhzIGZpbGVzIGZvcgorCisgZnVuY3Rpb24gaW52b2NhdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6IGZvcmdvdCBhIHNlbWljb2xvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jOiBpcXVlcnkgcGR1CisgICAgICBzZXNzaW9ucworCisgYXJlIG9ubHkgbmVlZGVkIGluIHdyaXRlIG1vZGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW46IGZpeCBmZWF0dXJlIGRldGVjdGlvbiBvZiBzb21ldGltZXMtYnVpbHQKKworIGFwcGxpY2F0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzogdXNlIHRoZSBmZWF0dXJlX3VudXNlZCBtYWNybyBmb3IgbWFraW5nIGFuCisKKyBlbXB0eSBmaWxlIGZvciBjb25zaXN0ZW5jeSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU04KKyAgICAgICBUYWJsZS5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBhcHBzL3NubXB0bHMuYywgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBBbm90aGVyIHN3ZWVwIGZvciB1bnVzZWQKKworIGZ1bmN0aW9ucyB3aGVuIHJlYWRfb25seSBtb2RlIGlzIHR1cm5lZCBvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jCisgICAgICAgLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTgorICAgICAgIFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLgorICAgICAgIGMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jOiBtYXJrIGEgc2xldyBvZiBmdW5jdGlvbnMgYXMgZmVhdHVyZXMKKworIHRoYXQgYXJlIG9ubHkgbmVlZGVkIHdpdGggd3JpdGVfc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZTogcnVuIGdyZXAgd2l0aCAtbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogCisKKyBmZWF0dXJpemUgbmV0c25tcF9zb2NrYWRkcl9zaXplIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOiByZW1vdmUgYQorCisgZmVhdHVyZV9yZXF1aXJlIG5vdCBhY3R1YWxseSBuZWVkZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6IG1hcmsgU1VCQ09OVEFJTkVSX0ZJTkQKKworIGFzIGEgZmVhdHVyZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdHNtLmM6IHRoZSByb3cgY3JlYXRpb24gQVBJIGlzCisKKyBvbmx5IHVzZWQgaW4gdGhlIFRTTSBpbXBsZW1lbnRhdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wdHNtLmM6IHRoZSBuZXdlciBjb250ZXh0IGVuZ2luZUlECisKKyBwcm9iaW5nIGlzIG9ubHkgbmVlZGVkIGlmZiBUU00gaXMgaW4gdXNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9kaXJfdXRpbHMuYzogZml4IGFuIGlmZGVmIHR5cG8gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IG1vdmVkIGZldGF1cmUgY2hpbGRfb2Ygc3RhdGVtZW50cyB0byB0aGUKKworIHRvcCBvZiB0aGUgZmlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2Rpcl91dGlscy5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IG1hcmtlZCBhIGNvdXBsZSBvZiByYXJlbHkgdXNlZCBjb250YWluZXIKKworIGZ1bmN0aW9ucy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOiBzcGxpdCBvdXQgdGhlIHByZWZpeF9pbmZvIGZlYXR1cmUKKyAgICAgIGludG8KKworIHN1Yi1mZWF0dXJlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYzogbWFyayB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIGFzIHVubmVlZGVkIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jOiBmaXggYSBjaGlsZF9vZiBzdGF0ZW1lbnQKKworIHdpdGggYSBjb3B5L3Bhc3RlIGVycm9yIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOiB0aGUgY29udGFpbmVyIHJvdy1yZW1vdmUgaXMgb25seQorCisgbmVlZGVkIGlmIHRoZSB0ZGF0YSByZW1vdmVfcm93IGlzIG5lZWRlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTgorICAgICAgIFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLgorICAgICAgIGM6IGZlYXR1cmUgbWFya2luZyBvZiB1bnVzZWQgdGRhdGEgZnVuY3Rpb25zICAgIAorICAgICAgdGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlICAgICB0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlICAgIAorICAgICAgdGFibGVfdGRhdGFfcmVtb3ZlX3JvdyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jOiByZW1vdmFsIG9mIHNvbWUgcmFyZWx5IHVzZWQKKworIAlmdW5jdGlvbnMgdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdyAJdGFibGVfZGF0YXNldF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBBZGRlZCBhIGRlZmluaXRpb24gdG8gaW5jb3Jwb3JhdGUKKworIHJlYWRfb25seS9ub3RpZnlfb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOiBhZGRlZCBhIG1pc3NpbmcgZmVhdHVyZSBkZWZpbml0aW9uCisKKyBsaW5lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46IGFkZGVkIGJhY2sgaW4gbWlzc2luZyBtaWJncm91cCBmZWF0dXJlCisKKyBkZWZpbml0aW9uIGxpc3QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogSW5jbHVkZSB0aGUgb3JpZ2luYWwgYmFzZSBmbGFncyB0bworCisgZW5zdXJlIC0td2l0aC1kZWZhdWx0cyBnZXRzIHBpY2tlZCB1cCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBmaXggdXNhZ2UgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBBZGRlZCBhIC1iIGZsYWcgZm9yIGJhc2UgYXJndW1lbnRzIHRvCisKKyBzdGFydCBmcm9tIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGRlZmF1bHQgdG8gYSBsaW5lYXIgc2VhY2ggb2Ygc2l6ZQorCisgdGVzdHMsIHJhdGhlciB0aGFuIGV4cG9uZW50aWFsIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6IAorCisgQ0hBTkdFUzogc25tcGxpYjogR3VhcmQgbmV0c25tcF91ZHBfcmVjdmZyb20oKSBldGMuIGRlY2xhcmF0aW9ucworIGNvbnNpc3RlbnRseS4gIENIQU5HRVM6IFdpbjMyOiBCdWlsZHMgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6CisgICAgICBHdWFyZAorCisgbmV0c25tcF91ZHBfcmVjdmZyb20oKSBldGMuIGRlY2xhcmF0aW9ucyBjb25zaXN0ZW50bHkuICBDSEFOR0VTOgorIFdpbjMyOiBCdWlsZHMgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6CisgICAgICBHdWFyZAorCisgbmV0c25tcF91ZHBfcmVjdmZyb20oKSBldGMuIGRlY2xhcmF0aW9ucyBjb25zaXN0ZW50bHkuICBDSEFOR0VTOgorIFdpbjMyOiBCdWlsZHMgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBDSEFOR0VTOiBXaW4zMjogUEFUQ0g6IDMyOTM4NDI6IEVsaW1pbmF0ZQorCisgcmVnaXN0cnkgYXJndW1lbnQgbGltaXQgb2YgMTI3IGNoYXJhY3RlcnMgKHRoaXMgbGltaXRhdGlvbiB3YXMKKyByZXBvcnRlZCBieSBTeWx2YWluIERlcnkpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDI3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IENIQU5HRVM6IFdpbjMyOiBQQVRDSDogMzI5Mzg0MjogRWxpbWluYXRlCisKKyByZWdpc3RyeSBhcmd1bWVudCBsaW1pdCBvZiAxMjcgY2hhcmFjdGVycyAodGhpcyBsaW1pdGF0aW9uIHdhcworIHJlcG9ydGVkIGJ5IFN5bHZhaW4gRGVyeSkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogQ0hBTkdFUzogV2luMzI6IFBBVENIOiAzMjkzODQyOiBFbGltaW5hdGUKKworIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNyBjaGFyYWN0ZXJzICh0aGlzIGxpbWl0YXRpb24gd2FzCisgcmVwb3J0ZWQgYnkgU3lsdmFpbiBEZXJ5KS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBDSEFOR0VTOiBXaW4zMjogUEFUQ0g6IDMyOTM4NDI6IEVsaW1pbmF0ZQorCisgcmVnaXN0cnkgYXJndW1lbnQgbGltaXQgb2YgMTI3IGNoYXJhY3RlcnMgKHRoaXMgbGltaXRhdGlvbiB3YXMKKyByZXBvcnRlZCBieSBTeWx2YWluIERlcnkpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBoZWFkZXIgZmlsZQorCisgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYW4gbm93IGJlIHVzZWQgaW4gdGhlIE1pbkdXCisgZW52aXJvbm1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMjc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBoZWFkZXIgZmlsZQorCisgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYW4gbm93IGJlIHVzZWQgaW4gdGhlIE1pbkdXCisgZW52aXJvbm1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBoZWFkZXIgZmlsZQorCisgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYW4gbm93IGJlIHVzZWQgaW4gdGhlIE1pbkdXCisgZW52aXJvbm1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBoZWFkZXIgZmlsZQorCisgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYW4gbm93IGJlIHVzZWQgaW4gdGhlIE1pbkdXCisgZW52aXJvbm1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaDogV2luMzIgRExMIGJ1aWxkIGZpeGVzLgorCisgKEJhY2twb3J0ZWQgcjIwMTg0IGZyb20gdHJ1bmsuKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg6IFdpbjMyIERMTCBidWlsZCBmaXhlcy4KKworIChCYWNrcG9ydGVkIHIyMDE4NCBmcm9tIHRydW5rLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFNwZWxsaW5nIGFuZCBncmFtbWFyIGZpeGVzIGZvciB0aGUgc291cmNlCisKKyBjb2RlIGNvbW1lbnRzIGluIHNubXBsaWIvd2luc2VydmljZS5jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDI3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFNwZWxsaW5nIGFuZCBncmFtbWFyIGZpeGVzIGZvciB0aGUgc291cmNlCisKKyBjb2RlIGNvbW1lbnRzIGluIHNubXBsaWIvd2luc2VydmljZS5jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogU3BlbGxpbmcgYW5kIGdyYW1tYXIgZml4ZXMgZm9yIHRoZSBzb3VyY2UKKworIGNvZGUgY29tbWVudHMgaW4gc25tcGxpYi93aW5zZXJ2aWNlLmMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogU3BlbGxpbmcgYW5kIGdyYW1tYXIgZml4ZXMgZm9yIHRoZSBzb3VyY2UKKworIGNvZGUgY29tbWVudHMgaW4gc25tcGxpYi93aW5zZXJ2aWNlLmMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBhZGRlZCBub3RlIGFib3V0IHRoZSBuZXcgdGltaW5nIGZ1bmN0aW9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogVXBkYXRlIHRoZSBtYW51YWwgcGFnZSB0byByZWZsZWN0IHRoZSBuZXcKKworIHRpbWluZyBvcHRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jOiBiZXR0ZXIgZG9jdW1lbnRhdGlvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYzogdXNlIHRoZQorCisgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZm9yIHBhcnNpbmcgZnJlcXVlbmNpZXMvdGltZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmM6IGZpeCBwZHUKKworIGJ1aWxkaW5nIHRlc3RzIHVuZGVyIHZhcmlvdXMgZGlzYWJsZWQgbW9kZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jOiBkb24ndCB0cnkgdG8KKworIGJ1aWxkIHRoZSBHRVQgcGR1IHVuZGVyIG5vdGlmeV9vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzogZml4IGEgYnVnIHdpdGgKKworIG5vLXN1ZmZpeCBzdHJpbmdzIGFuZCB1c2UgYSBjb25zdCBpbnB1dCBzdHJpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3NfY2xpYi5jOgorCisgQSBuZXcgdW5pdCB0ZXN0IGZvciB0aGUgdGltZSBjb252ZXJzaW9uIHJvdXRpbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiB1c2UgdGhlCisKKyBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmdW5jdGlvbiBmb3IgY29tcHV0aW5nIGludGVydmFsCisgcGVyaW9kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6IEFkZGVkIGEKKworIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZ1bmN0aW9ucyB0byBjb252ZXJ0LCBlLmcuLCAxaCB0byAzNjAwIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiByZW1vdmUgY29kZSB0byBidWlsZC9wYXJzZSBHRVQvZXRjIHJlcXVlc3RzCisKKyB3aGVuIE5PVElGWV9PTkxZIGlzIHR1cm5lZCBvbi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogdXBkYXRlIHRoZSBORVdTIHRvIHJlZmxlY3QgdGhlIG5ldyAtLWVuYWJsZS1yZWFkLW9ubHkgYW5kCisKKyAtLWVuYWJsZS1ub3RpZnktb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogbWlub3IKKworIGltcHJvdmVtZW50cyBmb3Igcm9ubHkgdnMgcndyaXRlIGhhbmRsaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYzogc3RpbGwgZW5hYmxlCisKKyBST05MWSB3aGVuIFJXUklURSBpc24ndCBwb3NzaWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBmaXggR0VUIHN1cHBvcnQgd2hlbiBub193cml0ZSBpcworCisgZW5hYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IG1hcmsgYSBmdXR1cmUKKworIG1vZGlmaWNhdGlvbiBuZWVkIGluIGEgY29tbWVudCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYzogZml4IGhhbmRsaW5nIG9mIG5vX3dyaXRlIHN1cHBvcnQKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBkLmM6IAorCisgZG9uJ3Qgb3BlbiBhbnkgbGlzdGVuaW5nIHRyYW5zcG9ydHMgd2hlbiBub3RpZnktb25seSBpcyBzcGVjaWZpZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBzZXQgdGhlCisKKyBuby1saXN0ZW4gYW5kIHJlYWQtb25seSBmbGFncyB3aGVuIC0tZW5hYmxlLW5vdGlmeS1vbmx5IGlzIHNldCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHJhbiBhdXRvaGVhZGVyIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6IGltcGxlbWVudCB0aGUKKworIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgaW4gdGhlc2UgdHJhbnNwb3J0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogcnVuIGF1dG9jb25mIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogbW92ZSB0aGUgcmVhZC1vbmx5IGZsYWcKKworIGRlZmluaXRpb24gYmVsb3cgdGhlIG5vdGlmeS1vbmx5LCBzaW5jZSBub3RpZnktb25seSBuZWVkcyB0byBpbXBseQorIHJlYWQtb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IERlZmluZWQgYSBuZXcKKworIC0tZW5hYmxlLW5vdGlmeS1vbmx5IGZsYWcgZm9yIGJ1aWxkaW5nIGEgdG9vbHNldCB0aGF0IG9ubHkgYWxsb3dzCisgZm9yIG5vdGlmaWNhdGlvbnMgd2l0aCBubyByZWFkL3dyaXRlIHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjUwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBEZWZpbmVkIGEgbmV3CisKKyAtLW5vLWxpc3RlbiBmbGFnIHRvIHJlbW92ZSBsaXN0ZW5pbmcgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oOiB0aGUgZGlzbWFuIHNjaGVkdWxlIG1pYiBpcyBvbmx5CisKKyB1c2VmdWwgd2hlbiBTRVRzIGFyZSB0dXJuZWQgb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4uaDogdGhlIGRpc21hbiBzY2hlZHVsZSBtaWIgaXMgb25seSB1c2VmdWwKKworIHdoZW4gU0VUcyBhcmUgdHVybmVkIG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcgorICAgICAgIGZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZgorICAgICAgIGFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjOiBmaW5pc2hlZCBub193cml0ZSBzdXBwb3J0IGZvciBjb21tb24gaW5jbHVkZWQgdGFibGVzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6IEFkZCBiYWNrIGluCisKKyAnbmV0c25tcF9zZXRfcm93X2NvbHVtbicgd2hlbiBub193cml0ZSBzdXBwb3J0IGlzIGVuYWJsZWQgVGhpcworIGZ1bmN0aW9uIGlzIGEgZ2VuZXJpYyBkYXRhIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiwgbm90IFNFVCBzcGVjaWZpYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOiBkb24ndCB1c2UgbWFya19yb3dfY29sdW1uX3dyaXRhYmxlCisKKyB3aGVuIHJlYWQtb25seSBzdXBwb3J0IGlzIGVuYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOiBmaXggbm9fd3JpdGUgc3VwcG9ydAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOiBmaXggbm9fd3JpdGUgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBEb24ndCBmcmVlCisKKyB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDI0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBEb24ndCBmcmVlCisKKyB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDI0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBEb24ndCBmcmVlCisKKyB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBEb24ndCBmcmVlCisKKyB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBEb24ndCBmcmVlCisKKyB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGdpdCBiYXNoLXNoZWxsIGZ1bmN0aW9ucyB0byBlbmFibGUKKworIGJyYW5jaCBzd2l0Y2hpbmcgYW5kIGV4dGVybmFsIGJ1aWxkaW5nIFRoZXNlIGxvY2FsIHNoZWxsIGZ1bmN0aW9ucworIChzbm1wY29uZmlndXJlIGFuZCBzbm1wbWFrZSkgbGV0IHlvdSBjb25maWd1cmUgYW5kIGJ1aWxkIHRoZQorIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGluIGV4dGVybmFsIGRpcmVjdG9yaWVzIHRoYXQgYXJlCisgYXV0by1jYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBleGlzdGluZyBicmFuY2ggbmFtZSAod2l0aCBhbiBvcHRpb25hbAorIHN1ZmZpeCkuICBUaGlzIGxldHMgeW91IHJ1biAnc25tcG1ha2UnIGZyb20gd2l0aGluIHRoZSBzb3VyY2UKKyBkaXJlY3RvcnkgYW5kIGhhdmUgaXQgYWN0dWFsbHkgZXh0ZXJuYWxseSBrZWVwIHRyYWNrIG9mIG1vZGlmaWVkCisgZmlsZXMsIGV0Yywgc28gYnVpbGRpbmcgaW4gbXVsdGlwbGUgYnJhbmNoZXMgY2FuIGJlIGRvbmUgZnJvbSBhCisgc2luZ2xlIGdpdCBjaGVja291dC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGNsZWFuIHVwIHRoZSBpdGVyYXRvcnMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBmcmVlIHZhcmJpbmRzIGFmdGVyCisKKyBzZW5kaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6IENvbW1lbnRlZCBvdXQgYW4gdW51c2VkIGZ1bmN0aW9uCisKKyBiZWNhdXNlIHRoZSBjb21waWxlciBjb21wbGFpbmVkIGFib3V0IGl0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogRml4ZWQgdHdvIGNvbXBpbGVyCisKKyB3YXJuaW5ncy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IG51bGwgY2hlY2sKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYzogTW92ZSBwb2ludGVyIGRlcmVmZXJlbmNlIHRvIGFmdGVyCisKKyB0aGUgY2hlY2sgZm9yIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiBvZiB0aGUgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOiBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBtZW50aW9uIHdoaWNoIG1vZHVsZSBpcyByZXF1aXJlZCB3aGVuCisKKyBidWlsZGluZyB0byBnZXQgdGhlIGRlbGl2ZXIgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGRlbGV0ZWQgYW4gdW5uZWVkZWQKKworIGRlYnVnZ2luZyBzdGF0ZW1lbnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBwcm9wZXJseSB1cGRhdGUgdGhlIG1heAorCisgY291bnQgaW4gdGhlIG91dGdvaW5nIG5vdGlmaWNhdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBiZXR0ZXIgcGFja2V0IGVzdGltYXRpb24KKworIHRvIGVuc3VyZSB3ZSBkb24ndCBvdmVycnVuLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBlc3RpbWF0ZSB0aGUgcGFja2V0IHNpemUKKworIGFuZCBicmVhayB0aGUgbm90aWZpY2F0aW9uIHVwIGJhc2VkIG9uIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogdHJhbnNmb3JtIHRoZQorCisgbm90aWZpY2F0aW9uIHNlbmRpbmcgaW50byBhIGxhcmdlciBsb29wIGZvciBsYXRlciBtdWx0aS1ub3RpZnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTkVXUzogZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBmZWF0dXJlIG1hcmtpbmcvc2VsZWN0aW9uCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogbWVudGlvbiB0aGUgbmV3IGRlbGl2ZXJ5IGJ5IG5vdGlmaWNhdGlvbnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IGRvY3VtZW50IHRoZSBtaW5pbWFsaXN0IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBkb2N1bWVudCB0aGUgbmV3IGRlbGl2ZXJCeU5vdGlmeSBjb25maWcKKworIHRva2VucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGFsbG93IHJ1biB0aW1lCisKKyBtb2RpZmljYXRpb25zIG9mIHRoZSBPSURzIHRvIHVzZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IGFkZCBjb25maWcgZmxhZ3MgdG8gbm90CisKKyBpbmNsdWRlIHRoZSBwZXJpb2QgY29uZmlnIGFuZCBtc2cgY291bnQgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogaW5jbHVkZSB0aGUgcGVyaW9kaWMKKworIGNvdW50LCB0aGUgbWVzc2FnZSBudW1iZXIgYW5kIHRoZSBtYXggbWVzc2FnZSBudW1iZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBkZWxldGVkIGRlYnVnZ2luZworCisgY29tbWVudCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIG1pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQ6IE1vdmUgdGhlIG5vdGlmaWNhdGlvbgorCisgZGVmaW5pdGlvbiB0byB3aXRoaW4gdGhlIHN1Yi1taWIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBkZWxldGUgYW4gdW51c2VkCisKKyB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IGxvYWQgdGhlIE1JQiBpbnRvIHRoZQorCisgZGVmYXVsdCBzZXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0OiBBIG5ldyBtaWIgdG8gaG9sZCB0aGUKKworIHBlcmlvZGljIG5vdGlmeSBvYmplY3RzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZmlsbCBvdXQgdGhlIGNvbmZpZyBmcmVlCisKKyByb3V0aW5lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogcHJvcGVybHkgbW9uaXRvciB0aGUKKworIHdob2xlIGNvbnRhaW5lciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IHBhcnNlIHRoZSBjb25mIGZpbGVzIGFuZAorCisgY3JlYXRlIGFuZCBpbnNlcnQgb2JqZWN0cyBpbnRvIHRoZSBjb250YWluZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBkZWZpbmVkIGEgY29udGFpbmVyIHRvCisKKyBzdG9yZSBhIGxpc3Qgb2YgZGVsaXZlciBvYmplY3RzIGluIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogYWRkZWQgYSBuZXh0X3J1bgorCisgdGltZXN0YW1wIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogYWN0dWFsbHkgc2VuZCBhCisKKyBub3RpZmljYXRpb24gd2l0aCB0aGUgcmVzdWx0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IG1ha2UgdGhlIHdhbGsgb24gdGhlCisKKyB0ZXN0IG9iamVjdCBmdW5jdGlvbi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogY3JlYXRlIGEgbWF4IHBhY2tldCBzaXplCisKKyBjb25maWcgdG9rZW4gYW5kIHBhcnNlIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogbWluaW1hbCBzdGFydGluZyB0ZXN0CisKKyBvYmplY3QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjAxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBhZGRlZCBhIGZ1bmN0aW9uIHRvCisKKyBjYWxjdWxhdGUgdGhlIHRpbWUgdW50aWwgdGhlIG5leHQgcnVuIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogcmVtb3ZlIGxlZnQgaW4gdGVtcGxhdGUKKworIGxpbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiB1c2UgYW4gYWxhcm0gY2FsbGJhY2sKKworIHByb3RvdHlwZSBmb3IgZXhlY3V0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IGJlZ2lubmluZyB0ZW1wbGF0ZSBjb2RlCisKKyBmb3IgZGVsaXZlcnkgb2YgZGF0YSBieSBub3RpZmljYXRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCB3aW4zMi93aW4zMi5zbG46IEFkZGVkIFZpc3VhbCBTdHVkaW8KKworIDIwMDUgcHJvamVjdCBhbmQgc29sdXRpb24gZmlsZSBmb3IgYnVpbGRpbmcgdGhlIE5ldC1TTk1QIGxpYnJhcnkgYXMKKyBhIHN0YXRpYyBsaWJyYXJ5LiBCb3RoIHRoZSBXaW4zMiBhbmQgdGhlIHg2NCBjb25maWd1cmF0aW9ucyBhcmUKKyBpbmNsdWRlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvajogTW9yZSBWaXN1YWwgU3R1ZGlvIDIwMDUgcHJvamVjdAorICAgICAgZmlsZQorCisgY2xlYW51cC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvajogQ2xlYW5lZCB1cCBXaW4zMiBWUzIwMDUgcHJvamVjdAorCisgZmlsZXMgLSByZW1vdmVkIHN1cGVyZmx1b3VzIGxpYnJhcnkgcmVmZXJlbmNlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzJkbGwuc2xuOiBBZGRlZCB4NjQKKworIGNvbmZpZ3VyYXRpb25zLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTg4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMmRsbC5zbG46IEFkZGVkCisKKyB3aW4zMmRsbC1yZWxhdGVkIFZpc3VhbCBTdHVkaW8gMjAwNSBwcm9qZWN0IGFuZCBzb2x1dGlvbiBmaWxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oOiBXaW4zMiBETEwgYnVpbGQgZml4ZXMuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTcgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzMTc1NjQwOiBVc2UKKworIElQX1JFQ1ZEU1RBRERSIHNvY2tvcHQgd2hlcmUgYXZhaWxhYmxlICgqQlNEKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE3ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGQ6CisgICAgICBQQVRDSEVTOgorCisgMzE3NTY0MDogVXNlIElQX1JFQ1ZEU1RBRERSIHNvY2tvcHQgd2hlcmUgYXZhaWxhYmxlICgqQlNEKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE3ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGQ6CisgICAgICBQQVRDSEVTOgorCisgMzE3NTY0MDogVXNlIElQX1JFQ1ZEU1RBRERSIHNvY2tvcHQgd2hlcmUgYXZhaWxhYmxlICgqQlNEKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzMTgzMDAwOiBGaXgKKworIGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOgorIDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDMxODMwMDA6IEZpeAorCisgY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6CisgMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzE4MzAwMDogRml4CisKKyBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggQ0hBTkdFUzogc25tcGxpYjogQlVHUzoKKyAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzMTgzMDAwOiBGaXgKKworIGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOgorIDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDMxODMwMDA6IEZpeAorCisgY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6CisgMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCBhcHBzL3NubXB0cmFwZF9kcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6IENIQU5HRVM6CisKKyBMaW51eDogUEFUQ0hFUzogMzIwNTgxMTogT3B0aW9uIHRvIHNraXAgZmQvbG9vcC9yYW0gZGV2aWNlcyBpbgorIGRpc2tJT1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCBhcHBzL3NubXB0cmFwZF9kcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6IENIQU5HRVM6CisKKyBMaW51eDogUEFUQ0hFUzogMzIwNTgxMTogT3B0aW9uIHRvIHNraXAgZmQvbG9vcC9yYW0gZGV2aWNlcyBpbgorIGRpc2tJT1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDMxODUwODU6CisKKyBGaXggc2VnZmF1bHQgb24gNjQtYml0IHN5c3RlbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDMxODUwODU6CisKKyBGaXggc2VnZmF1bHQgb24gNjQtYml0IHN5c3RlbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDMxODUwODU6CisKKyBGaXggc2VnZmF1bHQgb24gNjQtYml0IHN5c3RlbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDMxODUwODU6CisKKyBGaXggc2VnZmF1bHQgb24gNjQtYml0IHN5c3RlbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzE3NTMyMzogRml4IGhhbmRsaW5nIG9mCisKKyAnd2hpbGUgKGZhbHNlKScgYmxvY2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMTc1MzIzOiBGaXggaGFuZGxpbmcgb2YKKworICd3aGlsZSAoZmFsc2UpJyBibG9ja3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMxNzUzMjM6IEZpeCBoYW5kbGluZyBvZgorCisgJ3doaWxlIChmYWxzZSknIGJsb2NrcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzE3NTMyMzogRml4IGhhbmRsaW5nIG9mCisKKyAnd2hpbGUgKGZhbHNlKScgYmxvY2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMTc1MzIzOiBGaXggaGFuZGxpbmcgb2YKKworICd3aGlsZSAoZmFsc2UpJyBibG9ja3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIwNDg4MzogRml4IGhhbmRsaW5nIG9mCisKKyBub24tdGFibGUgb2JqZWN0cyBuYW1lZCBmb29UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIwNDg4MzogRml4IGhhbmRsaW5nIG9mCisKKyBub24tdGFibGUgb2JqZWN0cyBuYW1lZCBmb29UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIwNDg4MzogRml4IGhhbmRsaW5nIG9mCisKKyBub24tdGFibGUgb2JqZWN0cyBuYW1lZCBmb29UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIwNDg4MzogRml4IGhhbmRsaW5nIG9mCisKKyBub24tdGFibGUgb2JqZWN0cyBuYW1lZCBmb29UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIwNDg4MzogRml4IGhhbmRsaW5nIG9mCisKKyBub24tdGFibGUgb2JqZWN0cyBuYW1lZCBmb29UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjExNDg0OiBTdXBwb3J0CisKKyBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjExNDg0OiBTdXBwb3J0CisKKyBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjExNDg0OiBTdXBwb3J0CisKKyBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjExNDg0OiBTdXBwb3J0CisKKyBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjExNDg0OiBTdXBwb3J0CisKKyBlbnVtZXJhdGlvbnMgaW4gbm90aWZpY2F0aW9uIHZhcmJpbmRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBBZGQgbWlzc2luZyBzeXN0ZW0gb2lkcyB0byBtaWIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IEFkZCBtaXNzaW5nIHN5c3RlbSBvaWRzIHRvIG1pYiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogQWRkIG1pc3Npbmcgc3lzdGVtIG9pZHMgdG8gbWliIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBBZGQgbWlzc2luZyBzeXN0ZW0gb2lkcyB0byBtaWIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IEFkZCBtaXNzaW5nIHN5c3RlbSBvaWRzIHRvIG1pYiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGZvciBnYXJiYWdlIG91dHB1dCB3aGVuIGFnZW50IHByZXNlbnRzIG1vcmUKKworIGNvbHVtbnMgaW4gYnVsayByZXNwb25zZSB0aGFuIG91ciBsb2NhbCBNSUIgZmlsZSAgc3BlY2lmaWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGZvciBnYXJiYWdlIG91dHB1dCB3aGVuIGFnZW50IHByZXNlbnRzIG1vcmUKKworIGNvbHVtbnMgaW4gYnVsayByZXNwb25zZSB0aGFuIG91ciBsb2NhbCBNSUIgZmlsZSAgc3BlY2lmaWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGZvciBnYXJiYWdlIG91dHB1dCB3aGVuIGFnZW50IHByZXNlbnRzIG1vcmUKKworIGNvbHVtbnMgaW4gYnVsayByZXNwb25zZSB0aGFuIG91ciBsb2NhbCBNSUIgZmlsZSAgc3BlY2lmaWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGZvciBnYXJiYWdlIG91dHB1dCB3aGVuIGFnZW50IHByZXNlbnRzIG1vcmUKKworIGNvbHVtbnMgaW4gYnVsayByZXNwb25zZSB0aGFuIG91ciBsb2NhbCBNSUIgZmlsZSAgc3BlY2lmaWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGZvciBnYXJiYWdlIG91dHB1dCB3aGVuIGFnZW50IHByZXNlbnRzIG1vcmUKKworIGNvbHVtbnMgaW4gYnVsayByZXNwb25zZSB0aGFuIG91ciBsb2NhbCBNSUIgZmlsZSAgc3BlY2lmaWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOiBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuCisKKyAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOiBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuCisKKyAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOiBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuCisKKyAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOiBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuCisKKyAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOiBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuCisKKyAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYzogUmVtb3ZlIGJvZ3VzCisKKyAoTGludXgpIGRlZmluZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jOiBSZW1vdmUgYm9ndXMKKworIChMaW51eCkgZGVmaW5lcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmM6IFJlbW92ZSBib2d1cworCisgKExpbnV4KSBkZWZpbmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc25tcC10Yy5jOiBIQVZFX1RNX1RNX0dNVE9GRiBpcyBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc25tcC10Yy5jOiBIQVZFX1RNX1RNX0dNVE9GRiBpcyBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc25tcC10Yy5jOiBIQVZFX1RNX1RNX0dNVE9GRiBpcyBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIGNvbmZpZ3VyZSwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBCaWxsIEZlbm5lcnMgcGF0Y2ggdG8gbWFrZQorCisgRElTTUFOIFBJTkcgYW5kIFRSQUNFUk9VVEUgTUlCUyBjb21waWxlIHVuZGVyIExpbnV4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jOiBTb2xhcmlzIHN1cHBvcnQgZm9yCisKKyBTQ1RQLU1JQiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmM6IFNvbGFyaXMgc3VwcG9ydCBmb3IKKworIFNDVFAtTUlCIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYzogU29sYXJpcyBzdXBwb3J0IGZvcgorCisgU0NUUC1NSUIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogVFogaXMgb25lIGhvdXIgb2ZmIGlmIEhBVkVfVE1fVE1fR01UT0ZGIGFuZAorCisgU1lTViAoc3VjaCBpcyBMaW51eCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IFRaIGlzIG9uZSBob3VyIG9mZiBpZiBIQVZFX1RNX1RNX0dNVE9GRiBhbmQKKworIFNZU1YgKHN1Y2ggaXMgTGludXgpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBUWiBpcyBvbmUgaG91ciBvZmYgaWYgSEFWRV9UTV9UTV9HTVRPRkYgYW5kCisKKyBTWVNWIChzdWNoIGlzIExpbnV4KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogZHRsczoKKworIG92ZXJoYXVsIG9mIGRlYnVnICAgLSBkcmFzdGljIHJlZHVjdGlvbiBpbiBudW1iZXIgb2YgbWVzc2FnZXMgYW5kIG1zZyBjb21wbGV4aXR5ICAgICBmb3IgYmFzaWMgZHRsc3VkcCB0b2tlbiAgIC0gcHJldmlvdXMgbGV2ZWwgb2YgZGV0YWlsIGF2YWlsYWJsZSBieSBhZGRpbmcgOTpkdGxzZHVwIHRva2VuIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogZHRsczoKKworIG92ZXJoYXVsIG9mIGRlYnVnICAgLSBkcmFzdGljIHJlZHVjdGlvbiBpbiBudW1iZXIgb2YgbWVzc2FnZXMgYW5kIG1zZyBjb21wbGV4aXR5ICAgICBmb3IgYmFzaWMgZHRsc3VkcCB0b2tlbiAgIC0gcHJldmlvdXMgbGV2ZWwgb2YgZGV0YWlsIGF2YWlsYWJsZSBieSBhZGRpbmcgOTpkdGxzZHVwIHRva2VuIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOgorCisgY2xlYW4gdXAgY2xvc2U7IGNhdGNoICdjb25uZWN0Jy8nZGlzY29ubmVjdCcgICBjb25uZWN0ID0gd2UgZ2V0IHN1Y2Nlc3NmdWxseSBkZWNvZGVkIHNubXAgZGF0YSAgIGRpc2Nvbm5lY3QgPSAwIGJ5dGUgcmVhZCwgc3NoIHNodXRkb3duIGZsYWcgc2V0ICAgYWRkIGJpb19jYWNoZSBmbGFncyBmb3IgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCAgIGNoZWNrIGZvciBudWxsIHB0ciBiZWZvcmUgZGVyZWZlcmVuY2luZyAgIGNsb3NlIGhhbmRsaW5nOiAgIC0gIG9ubHkgc2VuZCBxdWV1ZWQgZGF0YSBpZiB3ZSBnb3QgdG8gY29ubmVjdGVkIHN0YXRlICAgLSAgc2VyaW91c2x5IHJlZHVjZSB0aW1lb3V0IHRvIHdhaXQgZm9yIGp1bmsgcmVhZC4gaSB0aGluayAgICAgIHdlIHNob3VsZG4ndCBldmVuIGJvdGhlciAgIC0gcmV0dXJuIGVhcmx5IGlmIGNhY2hlcCBpcyBOVUxMLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRlc3QgaXQgICAgIHJlcGVhdGVkbHkgICAtIHVzZSBjb3JyZWN0IG5mZHMgdmFsdWUgaW4gc2VsZWN0IGNhbGwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOgorCisgY2xlYW4gdXAgY2xvc2U7IGNhdGNoICdjb25uZWN0Jy8nZGlzY29ubmVjdCcgICBjb25uZWN0ID0gd2UgZ2V0IHN1Y2Nlc3NmdWxseSBkZWNvZGVkIHNubXAgZGF0YSAgIGRpc2Nvbm5lY3QgPSAwIGJ5dGUgcmVhZCwgc3NoIHNodXRkb3duIGZsYWcgc2V0ICAgYWRkIGJpb19jYWNoZSBmbGFncyBmb3IgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCAgIGNoZWNrIGZvciBudWxsIHB0ciBiZWZvcmUgZGVyZWZlcmVuY2luZyAgIGNsb3NlIGhhbmRsaW5nOiAgIC0gIG9ubHkgc2VuZCBxdWV1ZWQgZGF0YSBpZiB3ZSBnb3QgdG8gY29ubmVjdGVkIHN0YXRlICAgLSAgc2VyaW91c2x5IHJlZHVjZSB0aW1lb3V0IHRvIHdhaXQgZm9yIGp1bmsgcmVhZC4gaSB0aGluayAgICAgIHdlIHNob3VsZG4ndCBldmVuIGJvdGhlciAgIC0gcmV0dXJuIGVhcmx5IGlmIGNhY2hlcCBpcyBOVUxMLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRlc3QgaXQgICAgIHJlcGVhdGVkbHkgICAtIHVzZSBjb3JyZWN0IG5mZHMgdmFsdWUgaW4gc2VsZWN0IGNhbGwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTMxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IG1ha2UgdHJ1bmsgYW5kCisKKyB2NS02LXBhdGNoZXMgY2xvc2VseSBhbGlnbmVkICAgbW9zdGx5IGNoYW5nZXMgaW4gZGVidWcsIGNvb2tpZSB0cmFja2luZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTMxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IG1ha2UgdHJ1bmsgYW5kCisKKyB2NS02LXBhdGNoZXMgY2xvc2VseSBhbGlnbmVkICAgbW9zdGx5IGNoYW5nZXMgaW4gZGVidWcsIGNvb2tpZSB0cmFja2luZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMzEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogYWRkIGNvb2tpZSBoYW5kbGluZzsKKworIHJlbW92ZSBpZmRlZidkIGNvZGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE2NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBTaW1wbGlmeSBhcnJheSByZXNpemluZyBzb21ld2hhdAorCisgZnVydGhlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjcgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogRG8gbm90IGFzc2lnbiBuZXdfZGF0YSBpZiB0aGUKKworIHZhbHVlIHdvbid0IGJlIHVzZWQuICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI3ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2xlYXIgYQorCisgY2h1bmsgb2YgbWVtb3J5IGlmIHRoZSBuZXh0IGFjdGlvbiBvbiBpdCBpcyB0byBmaWxsIGl0IHNvIHVzZSBtYWxsb2MKKyBpbnN0ZWFkIG9mIGNhbGxvYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDb250YWluZXJCaW5hcnlBcnJheSByZWFsbHkKKworIGNhbid0IGhvbGQgYW55dGhuZyBidXQgcG9pbnRlcnMgYW5kIHRoYXQgbWVhbnMgdGhlIGRhdGFfc2l6ZSBmaWVsZAorIGlzIHVubmVjZXNzYXJ5IHNvIEkgcmVtb3ZlZCBpdC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIGFwcHMvc25tcHRyYXBkLmMsIAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3NubXBfc2VjbW9kLmMsIAorICAgICAgc25tcGxpYi9zbm1wdjMuYzogQWRkIG1pc3NpbmcgaW5jbHVkZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBVc2UgdGhlIHJpZ2h0IGZlYXR1cmUKKworIG1hY3JvIGluIG9yZGVyIHRvIG1ha2UgYnVpbGRzIHdpdGggLS1lbmFibGUtaXB2NgorIC0td2l0aC1vdXQtdHJhbnNwb3J0cz1VRFBJUHY2IHN1Y2NlZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogUmVtb3ZlIGR1cGxpY2F0ZSBjb3BpZXMgb2YKKworIGZ1bmN0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OiB0d2VhayBkZWJ1ZyBtZXNzYWdlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IHVwZGF0ZQorCisgY2VydCB0b2tlbiBoYW5kbGluZyAgLSByZW1vdmUgZGVmWDUwOSBjZXJ0IHRva2VucyAoc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZSA1LjYpICAtIHdhcm5pbmdzIGZvciBvdXIvdGhlaXIgdG9rZW5zLCByZWNvbW1lbmQgdXNpbmcgbG9jYWwvcGVlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IG1lcmdlIG5ldHNubXBfZHRsc3VkcDYKKyAgICAgIGludG8KKworIG5ldHNubXBfZHRsc3VkcCAgICB1c2UgYWRkciBzaXplIHRvIHRlbGwgdGhlbSBhcGFydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6IGxvZyAob25jZSkgd2FybmluZyB3aGVuIGRlcHJlY2F0ZWQKKworIGZfY3JlYXRlX2Zyb21fdHN0cmluZyB0cmFuc3BvcnQgZnVuY3Rpb24gdXNlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jOiByZWR1Y2UgY2FzdGluZzsgbWFrZSBzdXJlIHRvCisKKyBmcmVlIHRoZSByaWdodCBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiByZWR1Y2UgY2FzdGluZyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IFJlcGxhY2UgYSB2YXJpYWJsZSB3aXRoIGEKKworIGNvbnN0YW50LiBNYWtlIG9uZSBtb3JlIG9pZCBjb25zdC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xOCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTggIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTggIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZSBkZXBlbmQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE4ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24KKworIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE4ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGRlbHRhLjEuZGVmOiBGb3JtYXR0aW5nIGJvdGNoIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkZWx0YS4xLmRlZjogRm9ybWF0dGluZyBib3RjaCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9NYWtlZmlsZS5pbjogSW5zdGFsbCByZXF1aXJlZCBtaWJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9NYWtlZmlsZS5pbjogSW5zdGFsbCByZXF1aXJlZCBtaWJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL3JmY2xpc3Q6IE5ldyBSRkMgbWlicyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvcmZjbGlzdDogTmV3IFJGQyBtaWJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVMsIE5FV1M6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIHBlcmwvYWdlbnQvYWdlbnQucG0sIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAgICBWZXJzaW9uCisKKyBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUudG9wOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jOiBTcGVsbGluZyBmaXg6IHJlZ2luZXJhdGVkIC0+IHJlZ2VuZXJhdGVkLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmM6IFNwZWxsaW5nIGZpeDogcmVnaW5lcmF0ZWQgLT4gcmVnZW5lcmF0ZWQuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jOiBTaW1wbGlmaWVkIHIxOTU5NCAobGVhay1hdC1leGl0IGZpeCkuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcworCisgaW50cm9kdWNlZCBpbiByMjAxMTMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMKKworIGludHJvZHVjZWQgaW4gcjIwMTEzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVMsIE5FV1M6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAgICBWZXJzaW9uCisKKyBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUudG9wOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogRml4IG1haW4gYWdlbnQgc2VsZWN0IGNhbGwgdG8gdXNlIHRoZSByZW5hbWVkIEFQSQorCisgcm91dGluZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogRml4IG1haW4gYWdlbnQgc2VsZWN0IGNhbGwgdG8gdXNlIHRoZSByZW5hbWVkIEFQSQorCisgcm91dGluZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQnJpbmcgdGhlIG5hbWluZyBvZiB0aGUgbGFyZ2VfZmRfc2V0IHNlbGVjdCBjYWxsIGludG8gbGluZSB3aXRoIHRoZQorIHJlc3Qgb2YgdGhlIEFQSS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIEJyaW5nIHRoZSBuYW1pbmcgb2YgdGhlIGxhcmdlX2ZkX3NldCBzZWxlY3QgY2FsbCBpbnRvIGxpbmUgd2l0aCB0aGUKKyByZXN0IG9mIHRoZSBBUEkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBCcmluZyB0aGUgbmFtaW5nIG9mIHRoZSBsYXJnZV9mZF9zZXQgc2VsZWN0IGNhbGwgaW50byBsaW5lIHdpdGggdGhlCisgcmVzdCBvZiB0aGUgQVBJLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogQWRkIHRoZSBmdW5jdGlvbgorIG5ldHNubXBfbGFyZ2Vfc2VsZWN0KCkgKHBsdXMgdHdlYWtzIHRvIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDEyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDSEFOR0VTOiBzbm1wbGliOiByZWFsbG9jK2luaXQKKworIGluc3RlYWQgb2YgY2FsbG9jICBpbnNwaXJlZCBieSBwYXRjaCAzMTk1NTMyIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDExOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDSEFOR0VTOiBzbm1wbGliOiByZWFsbG9jK2luaXQKKworIGluc3RlYWQgb2YgY2FsbG9jICBpbnNwaXJlZCBieSBwYXRjaCAzMTk1NTMyIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDSEFOR0VTOiBzbm1wbGliOiByZWFsbG9jK2luaXQKKworIGluc3RlYWQgb2YgY2FsbG9jICBpbnNwaXJlZCBieSBwYXRjaCAzMTk1NTMyIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oOgorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMgZnJvbQorIFN0ZXBoZW4gSGVtbWluZ2VyICBhcHBsaWVkIHBhcnRzIDEtMyBvZiA0IGZyb20gaGltIChtc2dzIHRvIGNvZGVycyBvbiAyLzI4LzExOyBzdWJqZWN0ICBpcC1mb3J3YXJkLW1pYiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHM7IHBhcnQgNCBuZWVkcyBtb3JlIHdvcmsgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDExOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZQorCisgdGFibGVzIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgIGFwcGxpZWQgcGFydHMgMS0zIG9mIDQgZnJvbSBoaW0gKG1zZ3MgdG8gY29kZXJzIG9uIDIvMjgvMTE7IHN1YmplY3QgIGlwLWZvcndhcmQtbWliIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50czsgcGFydCA0IG5lZWRzIG1vcmUgd29yayBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlCisKKyB0YWJsZXMgZnJvbSBTdGVwaGVuIEhlbW1pbmdlciAgYXBwbGllZCBwYXJ0cyAxLTMgb2YgNCBmcm9tIGhpbSAobXNncyB0byBjb2RlcnMgb24gMi8yOC8xMTsgc3ViamVjdCAgaXAtZm9yd2FyZC1taWIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOyBwYXJ0IDQgbmVlZHMgbW9yZSB3b3JrIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBhZGQgbW9yZQorCisgb3BlbnNzbCBlcnJvciBjYXNlcyB3aGVyZSB3ZSBjaGVjayBmb3IgbG9jYWwgY2VydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGFkZCBtb3JlCisKKyBvcGVuc3NsIGVycm9yIGNhc2VzIHdoZXJlIHdlIGNoZWNrIGZvciBsb2NhbCBjZXJ0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiBNaW5HVzogZHNrVGFibGU6IFJlcG9ydCB6ZXJvIGZvcgorCisgdW5pbXBsZW1lbnRlZCBmaWVsZHMgaW5zdGVhZCBvZiByYW5kb20gZGF0YS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogTWluR1c6IGRza1RhYmxlOiBSZXBvcnQgemVybyBmb3IKKworIHVuaW1wbGVtZW50ZWQgZmllbGRzIGluc3RlYWQgb2YgcmFuZG9tIGRhdGEuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCByYWNlCisKKyBjb25kaXRpb24gaW4gaHJTV1J1blRhYmxlIFRyZWF0IHRoZSByZWFkcyBmcm9tIC9wcm9jLzxwaWQ+LyoKKyBjYXJlZnVseSwgcHJvY2Vzc2VzIGNhbiBleGl0IGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxMTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCByYWNlCisKKyBjb25kaXRpb24gaW4gaHJTV1J1blRhYmxlIFRyZWF0IHRoZSByZWFkcyBmcm9tIC9wcm9jLzxwaWQ+LyoKKyBjYXJlZnVseSwgcHJvY2Vzc2VzIGNhbiBleGl0IGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzogQ0hBTkdFUzogc25tcGQ6IEJ1aWxkcworCisgd2l0aCBtb3N0IHJlY2VudCBNaW5HVyAoaGF2aW5nICNkZWZpbmUgbG9jYWx0aW1lX3IpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOiBDSEFOR0VTOiBzbm1wZDogQnVpbGRzCisKKyB3aXRoIG1vc3QgcmVjZW50IE1pbkdXIChoYXZpbmcgI2RlZmluZSBsb2NhbHRpbWVfcikuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBDSEFOR0VTOiBzbm1wbGliOgorCisgcmVmaW5lIGNlcnQgZGVidWdnaW5nOyByZW1vdmUgdW51c2VkIGZ1bmN0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBDSEFOR0VTOiBzbm1wbGliOgorCisgcmVmaW5lIGNlcnQgZGVidWdnaW5nOyByZW1vdmUgdW51c2VkIGZ1bmN0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMyMDU3NjU6IGhhbmRsZSByZWNvbmZpZworCisgZm9yIGNlcnRTZWNOYW1lIHRva2VuIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMjA1NzY1OiBoYW5kbGUgcmVjb25maWcKKworIGZvciBjZXJ0U2VjTmFtZSB0b2tlbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IFNwZWxsaW5nIGZpeCBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQ6IG1lc3NnZXMgLT4KKworIG1lc3NhZ2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogU3BlbGxpbmcgZml4IGluIGEgc291cmNlIGNvZGUgY29tbWVudDogbWVzc2dlcyAtPgorCisgbWVzc2FnZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNaW5vcgorCisgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1pbm9yCisKKyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb2YgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzIwMzgwNjogQXZvaWQgdGhhdCB0aGUgbWFpbgorCisgYWdlbnQgcHJvY2Vzc2luZyBsb29wIC0gd2hlbiB1c2luZyBtb3JlIHRoYW4gRkRfU0VUU0laRSBmaWxlCisgZGVzY3JpcHRvcnMgLSBjYW4gY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gYnkgaW52b2tpbmcgc2VsZWN0KCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMyMDM4MDY6IEF2b2lkIHRoYXQgdGhlIG1haW4KKworIGFnZW50IHByb2Nlc3NpbmcgbG9vcCAtIHdoZW4gdXNpbmcgbW9yZSB0aGFuIEZEX1NFVFNJWkUgZmlsZQorIGRlc2NyaXB0b3JzIC0gY2FuIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGJ5IGludm9raW5nIHNlbGVjdCgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IEFkZCB0aGUgZnVuY3Rpb24KKyBuZXRzbm1wX2xhcmdlX3NlbGVjdCgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBBZGQgdGhlIGZ1bmN0aW9uCisgbmV0c25tcF9sYXJnZV9zZWxlY3QoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmM6IAorCisgRml4ZWQgdHdvIGNvbXBpbGVyIHdhcm5pbmdzIChiYWNrcG9ydGVkIHIyMDA5OCBmcm9tIHRoZSB0cnVuaykuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmM6IEFkZGVkIGEKKworIG1pbmltYWwgdW5pdCB0ZXN0IGZvciBuZXRzbm1wX2xhcmdlX2ZkX3NldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jOiBBZGRlZCBhCisKKyBtaW5pbWFsIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9sYXJnZV9mZF9zZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWFrZQorCisgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgY2xlYXIgYWxsIHJlbGV2YW50IGZpbGUgZGVzY3JpcHRvcnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNYWtlCisKKyBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBjbGVhciBhbGwgcmVsZXZhbnQgZmlsZSBkZXNjcmlwdG9ycy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQKKworIGhhbmRsaW5nIG9mIFRaIG9mZnNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudAorCisgaGFuZGxpbmcgb2YgVFogb2Zmc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50CisKKyBoYW5kbGluZyBvZiBUWiBvZmZzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQKKworIGhhbmRsaW5nIG9mIFRaIG9mZnNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50CisKKyBoYW5kbGluZyBvZiBUWiBvZmZzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOiBtYWtlCisKKyB2YXJpYWJsZSBuYW1lcyBtYXRjaCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jOiAKKworIEZpeGVkIHR3byBjb21waWxlciB3YXJuaW5ncy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6IGZpeGVkIGluc3RhbGxhdGlvbgorCisgdmFyaWFibGVzIGZvciB0aGUgb3B0aW9uYWwgU0VUIHByb2dyYW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczogY2htb2QgYSt4IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDogcHJpbnQgYW4gZXJyb3IgaWYgdGhlIGVuZCBvZgorCisgYSBmaWxlIHdhcyByZWFjaGVkIGFuZCB3ZSdyZSBub3QgYmFjayBpbnRvIHRoZSBzdGF0ZSB3ZSBjYW4gd3JpdGU7Cisgb3RoZXJ3aXNlIGEgY2xvc2luZyAjaWZkZWYgaXMgbWlzc2luZy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6IGZpeCBlbmRpZiBjb21tZW50IHRvIG1hdGNoCisKKyB0aGUgb3BlbmluZyBpZmRlZiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOiByZXNldCB0aGUgY2Fud3JpdGUgZmxhZyBmb3IKKworIGV2ZXJ5IGZpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDkzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOiB0ZW1wb3JhcmlseSBsZWF2ZSBpbgorCisgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6IGNoYW5nZSB0aGUgdW5pcXVlIGZpbGUgY2hlY2sgdG8gb25lIHRoYXQKKworIGlzIG5vdCBpbiB0aGUgbWliZ3JvdXAgZGlyZWN0b3J5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5L1QwMTQxc25tcHYyY3NldGZhaWxfc2ltcGxlOiBhIHRlc3QgZm9yCisKKyBlbnN1cmluZyB0aGUgYWdlbnQgcmVqZWN0cyBTRVQgcmVxdWVzdHMgd2l0aCAtLWVuYWJsZS1yZWFkLW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDkwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6IGFkZCBiYWNrIGluIHRoZQorCisgc3RvcGFnZW50IGNvbW1hbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAxcGR1X3R5cGVfY2xpYi5jLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmMsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAzcGR1X3BhcnNlX2NsaWIuYzogdW5pdCB0ZXN0cworICAgICAgd3JpdGVuCisKKyBmb3IgdGhlIHJlYWQtb25seSBzdXBwb3J0IGNvbnZlcnRlZCB0byB3b3JrIHdpdGggb3Igd2l0aG91dAorIHJlYWQtb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZTogZG9uJ3QgcnVuIHRoZQorCisgc2V0IHRlc3QgaWYgbm9fd3JpdGVfc3VwcG9ydCBpcyB0dXJuZWQgb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlOiBza2lwIGlmCisKKyBub193cml0ZV9zdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOiBBIG5ldyB0ZXN0IHRvCisKKyBjaGVjayB3aGV0aGVyIFNOTVB2MmMgU0VUcyB0byBzeXNDb250YWN0IHdvcmsgYXMgZXhwZWN0ZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnOiBhbGxvdyBmb3IgdjJjIFNFVCBzdXBwb3J0CisKKyB0ZXN0aW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6IEFsbG93IGZvciBzaW5nbGUgcXVvdGVzIGZvciB2YWNtCisKKyBjb250ZXh0IG5hbWUgcXVvdGluZyB0b28gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IGZpeCB0aGUgY29uZmlndXJlIHRlc3RzIHRvIGluY2x1ZGUgdGhlIHdvcmQgdGVzdCBpbiB0aGUKKworIHRlc3QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6IGZpeCB0aGUgY29uZmlndXJlIHRlc3RzIHRvIGluY2x1ZGUKKworIHRoZSB3b3JkIHRlc3QgaW4gdGhlIHRlc3QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOiBBZGRlZCBhbiBhbm5veWluZ2x5IGxvbmcKKworIGxpc3Qgb2YgZXhjZXB0aW9ucyB0aGF0IG5lZWRzIHRvIGJlIGF1dG9tYXRlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6IEEgcXVpY2sgcGVybCBzY3JpcHQgdG8KKworIHJlbW92ZSB1bm5lZWRlZCBjb2RlIG1vZHVsZXMgZnJvbSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOiBtb3JlCisKKyBpbXByb3ZlbWVudHMgKHJlbW92ZW1lbnRzKSBmb3IgZmVhdHVyaXphdGlvbiBhbmQgcmVhZC1vbmx5IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6CisKKyAzMTk1NTM3OiBNaW5vciBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHNvcnQgb3B0aW1pemF0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDoKKworIDMxOTU1Mzc6IE1pbm9yIGJpbmFyeV9hcnJheSBjb250YWluZXIgc29ydCBvcHRpbWl6YXRpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA2ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6IFRhYnMgdG8gc3BhY2VzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDYgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzogVGFicyB0byBzcGFjZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA2ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczogQ29uZmlndXJlIGNoZWNrIGZvciBnZXRob3N0bmFtZTIKKworIFVzZSBnZXRhZGRyaW5mbyBpZiBhdmFpbGFibGUuIE5vdyB3b3JrcyBmb3IgU29sYXJpcyAoYW5kIFdpbmRvd3M/KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA2ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczogQ29uZmlndXJlIGNoZWNrIGZvciBnZXRob3N0bmFtZTIKKworIFVzZSBnZXRhZGRyaW5mbyBpZiBhdmFpbGFibGUuIE5vdyB3b3JrcyBmb3IgU29sYXJpcyAoYW5kIFdpbmRvd3M/KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0ZXN0LmM6IEFkZCBkcm9wcGVkIHx8J3MgZnJvbSByMjAwNzIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmM6IENsZWFuIHVwLCBhbmQKKworIGNvc29saWRhdGUgcmVzdWx0IHRhYmxlIHJvdyBjcmVhdGlvbiBpbnRvIGEgbmV3IGZ1bmN0aW9uLiAgU2F2ZXMgMjAwCisgbGluZXMgb2YgY29kZSwgd2l0aCAoaG9wZWZ1bGx5KSBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jOiBDbGVhbiB1cCwgYW5kCisKKyBjb3NvbGlkYXRlIHJlc3VsdCB0YWJsZSByb3cgY3JlYXRpb24gaW50byBhIG5ldyBmdW5jdGlvbi4gIFNhdmVzIDIwMAorIGxpbmVzIG9mIGNvZGUsIHdpdGggKGhvcGVmdWxseSkgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wdGVzdC5jLCBjb25maWd1cmUsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOiBkb24ndCBidWlsZCBTRVQgcmVsYXRlZCBhcHBzIHdpdGgKKworIC0tZW5hYmxlLXJlYWQtb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzogZml4CisKKyBpc3N1ZXMgd2l0aCBjb21iaW5pbmcgLS1lbmFibGUtbWluaW1hbGlzdCBhbmQgLS1lbmFibGUtcmVhZC1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOiBiZXR0ZXIgb3V0cHV0IGZvciBmaW5kaW5nCisKKyBvYmplY3Qgc3ltYm9scy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOiBsYXN0IGNvbW1pdDogY2hhbmdlcyB0byBhbGxvdworCisgcGFyc2luZyBvZiBmZWF0dWVycyBmaWxlcyB0byBnZXQgYWxsIG1pbmltYWxpc3QgdGFncyB3aGljaCBhcmUgdGhlbgorIHByb2Nlc3NlZCBmb3IgcmVtb3ZhbCB0aGlzIGNvbW1pdDogY2hhbmdlZCBjb21tZW50cy93aGl0ZSBzcGFjZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6IGFkZGVkIG5vX3dyaXRlIHN1cHBvcnQgdG8gZXh0ZW5kLmMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOiBBZGRlZCBtaXNzaW5nICNlbmRpZiBjb21tZW50IGZvciByZW1vdmUKKworIGlmZGVmIGNvZGUgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDogYWRkZWQgY2hhbmdlcyB0byBhbGxvdyBjb2RlCisKKyByZW1vdmFsIGluLXBsYWNlIChpLmUuIGRvZXMgbm90IHJlcXVpcmUgY3JlYXRpbmcgYSBuZXcgZmlsZSkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9pZ25vcmUucmVnZXhwOiBhZGRpbmcgYSBpZ25vcmUucmVnZXhwIGZpbGUgdGhhdAorCisgY2FuIGJlIHVzZWQgd2l0aCByZW1vdmVpZmRlZmNvZGUucGwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IGFkZCBhIG91dGdvaW5nIGxpbmsgdG8gdGhlCisKKyBwYXJlbnQgbWFya2luZyBwYWdlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogQWRkZWQgYSB3aWtpIG91dHB1dCBtb2RlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBOb3RlIHRoYXQgdGhlIG9yZyBvdXRwdXQgaXMgdGhlCisKKyBkZWZhdWx0IGluIHRoZSBoZWxwIG91dHB1dCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkCisKKyAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBvbgorIExpbnV4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAwNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkCisKKyAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBvbgorIExpbnV4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAwNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkCisKKyAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBvbgorIExpbnV4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkCisKKyAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBvbgorIExpbnV4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgcmVjbGFzc2lmaWNhdGlvbiBvZiB0aGUgcmVtYWluaW5nIGZlYXR1cmVzIGludG8gYSBoaWVyYXJjaHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBkb24ndCBkb3VibGUtZGVjbGFyZSBjZXJ0X3V0aWxzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6IHRoZQorCisgaXBhZGRyZXNzX2xpbnV4IHdhcyBpbmNvcnJlY3RseSBtYXJrZWQgYXMgbmVlZGluZyBjZXJ0X2ZpbmdlcnByaW50cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6IHB1dCB0aGUgYWdlbnRfcmVnaXN0cnkgZmVhdHVyZSBpbgorCisgbGlibmV0c25tcGFnZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjogQ0hBTkdFUzogV2luMzI6IERlcHJlY2F0ZWQKKworIGxpYnNubXAuZGVmIC0gYWRkIE5FVFNOTVBfSU1QT1JUIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbnN0ZWFkIHRvCisgZXhwb3J0IGEgZnVuY3Rpb24gZnJvbSBuZXRzbm1wLmRsbC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOiBDSEFOR0VTOiBXaW4zMjogRGVwcmVjYXRlZAorCisgbGlic25tcC5kZWYgLSBhZGQgTkVUU05NUF9JTVBPUlQgdG8gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluc3RlYWQgdG8KKyBleHBvcnQgYSBmdW5jdGlvbiBmcm9tIG5ldHNubXAuZGxsLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOiBNb3ZlZCBhIHNvdXJjZSBjb2RlIGNvbW1lbnQKKworIHN1Y2ggdGhhdCBpdCBpcyBhZ2FpbiBpbW1lZGlhdGVseSBhYm92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGl0CisgYXBwbGllcyB0by4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDogQWRkZWQgbWlzc2luZworICAgICAgTkVUU05NUF9JTVBPUlQKKworIGRlY2xhcmF0aW9ucy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOiBBZGRlZCBtaXNzaW5nCisgICAgICBORVRTTk1QX0lNUE9SVAorCisgZGVjbGFyYXRpb25zLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmLCB3aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmOiAKKworIFJlbW92ZWQgdHdvIG9ic29sZXRlIFdpbjMyIGZpbGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYsIHdpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWY6IAorCisgUmVtb3ZlZCB0d28gb2Jzb2xldGUgV2luMzIgZmlsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IFRyaXZpYWwgY29tbWVudCBmaXg6CisKKyBzbm1wSVB2NkJhc2VEb21haW4uYyBjb250YWlucyBJUHY2IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgaW5zdGVhZCBvZiBJUHY0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IFRyaXZpYWwgY29tbWVudCBmaXg6CisKKyBzbm1wSVB2NkJhc2VEb21haW4uYyBjb250YWlucyBJUHY2IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgaW5zdGVhZCBvZiBJUHY0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvY29uZmlnLmg6IFJlbW92ZWQgYW4gb2Jzb2xldGUgZmlsZS4gIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDUwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsIHdpbjMyL3NubXBzbV9zaHV0ZG93bi5oLCAKKyAgICAgIHdpbjMyL3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oOiBCdWlsZHMgYWdhaW4gd2l0aCBWaXN1YWwgU3R1ZGlvCisKKyBhZnRlciB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSAiZmVhdHVyZSIgZmVhdHVyZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvc25tcHNtX2luaXQuaDogUmVtb3ZlZCBhIG1pc2xlYWRpbmcgY29tbWVudC4gIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6IENvcnJlY3QgdGhlIGNoZWNrIG9mCisKKyB3ZXRoZXIgdXNtIHNlY3VyaXR5IGlzIGVuYWJsZWQuICBSZWdlbmVyYXRlIGNvbmZpZ3VyZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFJlZ2VuZXJhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYzogQWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6IElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKworIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOiBTcGxpdCB0aGUgY29udGFpbmVyX2NvbXBhcmVfZnVuY3Rpb25zIGZlYXR1cmUKKworIGludG8gY29udGFpbmVyX2NvbXBhcmVfbWVtLCBjb250YWluZXJfY29tcGFyZV9sb25nLAorIGNvbnRhaW5lcl9jb21wYXJlX3Vsb25nLCBjb250YWluZXJfY29tcGFyZV9pbnQzMiBhbmQKKyBjb250YWluZXJfY29tcGFyZV91aW50MzIgVW5pZnkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29tcGFyZQorIGZ1bmN0aW9ucyBmdXJ0aGVyLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzogQ2hhbmdlIHRoZSBzcGVsbGluZyBvZiB0aGUKKworIGNvbnRhaW5lcl9jb21wYXJlX2NzdHJpbmcgZmVhdHVyZSB0byBjb250YWluZXJfbmNvbXBhcmVfY3N0cmluZyBhcworIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgZ3VhcmRlZCBieSB0aGF0IGF0dHJpYnV0ZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOiBBZGQgdGhlIG1pc3NpbmcgcmVwbGFjZW1lbnQKKworIG1hY3JvIGZvciBzbm1wX2luaXRfc3RhdGlzdGljcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDogc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5CisKKyB0YWtlcyB0d28gYXJndW1lbnRzIHNvIGxldCB0aGUgcmVwbGFjZW1lbnQgbWFjcm8gdGFrZSB0d28gYXJndW1lbnRzCisgYXMgd2VsbC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6IEZpeCB0eXBvIGluCisKKyByMTk5OTAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrOiBSZW1vdmUgbGluZXMgc3RhcnRpbmcgd2l0aCAjZGVmaW5lCisKKyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IgV2hlbiBnY2MgLUUgaXMgY2FsbGVkIHdpdGggLWdnZGIzCisgKG9yIC1kRCkgdGhlbiBhbGwgdGhlIG1hY3JvIGRlZmluaXRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCB0aGUKKyBwcmVwcm9jZXNzb3IgYW5kIHRoYXQgbWVzc2VzIHVwIG91ciBwcm9jZXNzaW5nLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUucnVsZXM6IFB1dCB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gdGhlIGJ1aWxkIHRyZWUsIG5vdCB0aGUKKworIHNvdXJjZSB0cmVlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXIKKyAgICAgICBmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZgorICAgICAgIGFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGM6IG1vdmVkIGEgYnVuY2ggb2YgZmVhdHVyZXMgaW50byB0aGUgbGlibmV0c25tcG1pYnMgZmVhdHVyZSBzZXQuCisgICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzLCBzbm1wbGliL21pYi5jOgorCisgY2xhc3NpZmllZCBsaWJuZXRzbm1wYWdlbnQgZmVhdHVyZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGxpYnJhcmllcworCisgKHNubXBsaWIgZmlyc3QpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IG91dHB1dCBjbGVhbnVwIGFuZCBhZGRlZCBhZ2VudC1taWJzCisKKyBhbmQgbG9nZ2luZyBvcHRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGFkZCBhIGRlZmF1bHQgc2V0IG9mIGFyZ3VtZW50cworCisgY2FsY3VsYXRlIHJlc3VsdGluZyBzaXplcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvZGlyX3V0aWxzLmM6IEFkZGVkIGEgbWlzc2luZyA7IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogcHJlZml4IHRoZSBvdXRwdXQgZmlsZXMgd2l0aCBhIG51bWJlcgorCisgdG8gaW5kaWNhdGUgb3JkZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgc3lzdGVtCisKKyBleGVjdXRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGVuYWJsZSBidWlsZGluZyBvZiB0aGUgcmVzdWx0aW5nCisKKyBjb21iaW5hdGlvbnMgQWRkIGEgLW4gZmxhZyBmb3IgZHJ5LXJ1bnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGVuYWJsZSB0aGUgLXQgdGFnIGZvciBsaW1pdGluZyB0eXBlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBBZGRlZCBhcmd1bWVudCBwYXJzaW5nIGFuZCBhcmd1bWVudHMKKworIGZvciBzZWxlY3RpbmcgYW5kIGxpc3RpbmcgdHlwZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZ2VuZXJhdGUgY29uZmlndXJlIHNjcmlwdCBhcmd1bWVudHMKKworIGZyb20gc3BlY3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogYWRkZWQgYSBidW5jaCBvZiBuZXcgZmVhdHVyZSBvcHRpb25zCisKKyBhbmQgY2xlYW5lZCB1cCBhIGJpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBhZGRlZCBhIG5ldyAobm90IHlldCB3b3JraW5nKSBzY3JpcHQKKworIHRvIHRlc3Qgc2l6aW5nIG9mIHZhcmlvdXMgYXJndW1lbnQgc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBTaW1wbGlmeSB0aGUgY29kZS4gVW5pZnkgc29tZQorCisgZGVidWcgbG9ncy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IFJlZHVjZSB0aGUgc2NvcGUgb2YgYSBmZXcKKworIHZhcmlhYmxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogTWFrZSBpdCBwb3NzaWJsZSB0bworCisgaW5pdGlhbGl6ZS91bmluaXRpYWxpemUgbW9kdWxlcyB3aXRoIDY0IGNoYXJhY3RlciBuYW1lcyBhbmQgbm90Cisgc3VmZmVyIHdpbGQgd3JpdGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogQ29kZSByZXN0cnVjdHVyaW5nIC0gcHV0IHRoZQorCisgbWFuYWdlZCByb3V0aW5lcyBiZWZvcmUgdGhlIG1hbmFnbWVudCBjb2RlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaDogCisKKyBDSEFOR0VTOiBsaWJuZXRzbm1wbWliczogTWFrZSBhbGwgZnVuY3Rpb25zIGluIHRoZSBkbG1vZCBtb2R1bGUgdGhhdAorIGRvbid0IGhhdmUgdG8gYmUgcHVibGljIHN0YXRpYyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBSZW5hbWUgZGVpbml0X2RsbW9kIHRvCisKKyBzaHV0ZG93bl9kbG1vZCBhcyB0aGF0IGlzIHdoYXQgaXQgcmVhbGx5IGlzIGFib3V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYzogYWRkaW5nIG1pbmltYWxpc3QgaWZkZWZzCisKKyB0byBuZXQtc25tcC12YWNtIG1pYiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogcHJvcGVybHkgaGFuZGxlIHR3aW4gY2hpbGRyZW47CisKKyBhbHNvIHNvcnQgdGhlIGNoaWxkIGxpc3QgYWxwaGFiZXRpY2FsbHkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6IEkgc3VwcG9zZSBsb2dnaW5nIHNob3VsZCBwcm9iYWJseSBkZWZhdWx0CisKKyB0byBiZWluZyBhIHdhbnRlZCBvcHRpb24gOi0pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBvcmctbGluayB0aGUgZmlsZXMgaW4gdGhlCisKKyBvdXRwdXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUucnVsZXMsIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiwgCisgICAgICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjaywgc25tcGxpYi9NYWtlZmlsZS5pbjogbWFrZSB0aGUKKworIGZlYXR1cmVzLWNoZWNrIHNjcmlwdCB0cmFjayB0aGUgZnVsbCBzb3VyY2UgcGF0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogY2hhbmdlIHRoZSBmdW5jdGlvbiBuYW1lcyB0bworCisgbWF0Y2ggdGhhdCBpdCdzIHByaW50aW5nIHRvIG9yZy1tb2RlIGF0IHRoZSBtb21lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2ZpbGVfdXRpbHMuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9vaWRfc3Rhc2guYywgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvdG9vbHMuYzogbGFzdAorICAgICAgb2YKKworIHRoZSBmZWF0dXJlIGNsYXNzaWZpY2F0aW9uIGluIGxpYm5ldHNubXAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9zY2FwaS5jOiBtYWtlIHRoZQorCisgdXNtX3N1cHBvcnQgdXRpbGl0aWVzIHNlbGYtZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGNoaWxkcmVuIHRvIG1ha2UKKyBzdXJlIHRoZXkncmUgcHJvcGVybHkgaW5jbHVkZWQgZHVyaW5nIGRlcGVuZGVuY3kgb3JkZXJpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2RhdGFfbGlzdC5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywKKyAgICAgICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9maWxlX3V0aWxzLmMsIAorICAgICAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NubXB1c20uYzogc3VwZXJzdHJ1Y3R1cmFsaXphdGlvbml6aW5nCisKKyB0aGUgZmVhdHVyZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9lbnVtLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi9zeXN0ZW0uYywgCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYywgc25tcGxpYi90b29scy5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3VjZF9jb21wYXQuYzoKKworIHNpZ25pZmljYW50IHBhcmVudC9jaGlsZCBmZWF0dXJlIGNsYXNzaWZpY2F0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXB1c20uYzogY2xhc3NpZnkgYSBmZXcgY29tcG9uZW50cworCisgaW50byBhIHRvcC1sZXZlbCBsaWJuZXRzbm1wIGNvbXBvbmVudCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9zY2FwaS5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBzdHJ1Y3R1cml6ZSB0aGUgdXNtIGZlYXR1cmVzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmM6IHN0cnVjdHVyZSB0aGUgY29udGFpbmVyIGZlYXR1cmVzIGludG8gYQorCisgaGllcmFyY2h5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzogZ3JvdXAgdGhlIGxvZ2dpbmcgaGFuZGxlcnMgdW5kZXIgYSBwYXJlbnQKKworIGZlYXR1cmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBmaXggdGhlIGV4cGVjdCBhcmd1bWVudCBjb3VudAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogZml4IHRoZSBuYW1lIG9mIHRoZSBleHBlY3RlZAorCisgaW5wdXQgZmlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogYXJndW1lbnQgcGFyc2luZyBhbmQgdXNhZ2UoKQorCisgb3V0cHV0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgc25tcGxpYi9vaWRfc3Rhc2guYzogLQorICAgICAgYWRkZWQgdHdvIG9pZF9zdGFzaCBmdW5jdGlvbnMgYXMgaW5kaXZpZHVhbCBmZWF0dXJlcyAtIGNsZWFuZWQgdXAKKyAgICAgIHNvbWUgd2FybmluZ3MgaW4gdGhlIHRhYmxlX2l0ZXJhdG9yIGNvZGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5OTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBGaXggdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IFNWTiB0YWcgbGluZQorICAgICAgKEhhdmluZyBicm91Z2h0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIDUuNS54IGJyYW5jaCAgaW50byBsaW5lIHdpdGgKKyAgICAgIHRoZSBvdGhlciBicmFuY2hlcywgdGhlIHByZXZpb3VzICBjb21tYW5kIGlzIG5vdyB3cm9uZyBmb3IgKmFsbCoKKyAgICAgIGJyYW5jaGVzLCByYXRoZXIgIHRoYW4ganVzdCBtb3N0IG9mIHRoZW0hKSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBGaXggdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IFNWTiB0YWcgbGluZQorICAgICAgKEhhdmluZyBicm91Z2h0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIDUuNS54IGJyYW5jaCAgaW50byBsaW5lIHdpdGgKKyAgICAgIHRoZSBvdGhlciBicmFuY2hlcywgdGhlIHByZXZpb3VzICBjb21tYW5kIGlzIG5vdyB3cm9uZyBmb3IgKmFsbCoKKyAgICAgIGJyYW5jaGVzLCByYXRoZXIgIHRoYW4ganVzdCBtb3N0IG9mIHRoZW0hKSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMTk5OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBGaXggdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IFNWTiB0YWcgbGluZQorICAgICAgKEhhdmluZyBicm91Z2h0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIDUuNS54IGJyYW5jaCAgaW50byBsaW5lIHdpdGgKKyAgICAgIHRoZSBvdGhlciBicmFuY2hlcywgdGhlIHByZXZpb3VzICBjb21tYW5kIGlzIG5vdyB3cm9uZyBmb3IgKmFsbCoKKyAgICAgIGJyYW5jaGVzLCByYXRoZXIgIHRoYW4ganVzdCBtb3N0IG9mIHRoZW0hKSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBGaXggdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IFNWTiB0YWcgbGluZQorICAgICAgKEhhdmluZyBicm91Z2h0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIDUuNS54IGJyYW5jaCAgaW50byBsaW5lIHdpdGgKKyAgICAgIHRoZSBvdGhlciBicmFuY2hlcywgdGhlIHByZXZpb3VzICBjb21tYW5kIGlzIG5vdyB3cm9uZyBmb3IgKmFsbCoKKyAgICAgIGJyYW5jaGVzLCByYXRoZXIgIHRoYW4ganVzdCBtb3N0IG9mIHRoZW0hKSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uCisKKyB1cGRhdGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLAorICAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbTogVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwKKyAgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06IFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTkyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHYzLmM6IEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdAorCisgYXZhaWxhYmxlIG9yIHNldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMTk5OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdjMuYzogQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90CisKKyBhdmFpbGFibGUgb3Igc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AxOTk5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB2My5jOiBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QKKworIGF2YWlsYWJsZSBvciBzZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHYzLmM6IEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdAorCisgYXZhaWxhYmxlIG9yIHNldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB2My5jOiBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QKKworIGF2YWlsYWJsZSBvciBzZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmg6IGFkZGluZyBpZmRlZiBjb2RlCisKKyBmb3IgbWluaW1hbGlzdCBzdXBwb3J0IG9mIGRpZmZtYW4gbWliIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk5MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmg6CisKKyBBZGRpbmcgbWluaW1hbGlzdCBpZmRlZnMgdG8gaG9zdCByZXNvdXJjZSBtaWIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIHNubXBsaWIvZGF0YV9saXN0LmM6IG1hcmsgdGhlCisKKyBkYXRhX2xpc3QgZnVuY3Rpb24gdGhhdCdzIG9ubHkgdXNlZCBpbiBzdGFjaF9jYWNoaW5nIGFzIGEgZmVhdHVyZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzogd2hvb3BzLiAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6IG1vcmUgbWlzc2luZyBzdGFzaCByZWZlcmVuY2VzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOiBpZmRlZmVkL2ZlYXR1cmVkIG91dCBhIG1pc3NpbmcKKworIHN0YXNoX2NhY2hlIHNlY3Rpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6IG1ha2UgdGhlIHByZWZpeF9pbmZvIG1vcmUKKworIGhpZXJhcmNoaWNhbCBhbmQgc3ViLWZlYXR1cmUgdGhlIHVudXNlZCBvbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6IGRvIGluY2x1ZGUgdGhlIHBlcmwvcHl0aG9uIGNvZGUKKworIHdoZW4gc2VhcmNoaW5nIGZvciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzogbWFrZSB0aGUgc2VtaS11c2VkIHRhYmxlX3RkYXRhCisKKyBmdW5jdGlvbnMgY2hpbGRyZW4gb2YgdGFibGVfdGRhdGFfYWxsIGluc3RlYWQgb2YganVzdCB0YWJsZV90ZGF0YSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6IENvcnJlY3QgdHlwbyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ29ycmVjdCB0eXBvIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzogcHJvcGVyIGluY2x1ZGUgb2YgcHJvdG90eXBlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBjb21wYXQgc29tZSBmZWF0dXJlIGhlYWRlcgorCisgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6IEluY2x1ZGUgcmVxdWlyZWQgcHJvdG90eXBlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6IHVuc2lnbmVkIGp1Z2dsaW5nIHRvIHJlbW92ZSB3YXJuaW5ncyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgdW5zaWduZWQganVnZ2xpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworIHVuc2lnbmVkIGp1Z2dsaW5nIHRvIHJlbW92ZSB3YXJuaW5ncyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBFbmFibGUgKHByb2JhYmx5IGZvcmdvdHRlbikKKworIGlwQWRkcmVzc1ByZWZpeFRhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBFbmFibGUgKHByb2JhYmx5IGZvcmdvdHRlbikKKworIGlwQWRkcmVzc1ByZWZpeFRhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjaywgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3MsCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlLCAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZSwgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDogYWRkZWQgb3RoZXIgbWlzc2luZyAnbmV3JworICAgICAgZmlsZXMKKworIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWluaW1hbGlzdCBwYXRjaCBmaWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jOiBMb2FkaW5nCisKKyBJUHY2IGRhdGEgaXMgYSBuby1ubyB3aGVuIElQdjYgbm90IGVuYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jOiBMb2FkaW5nCisKKyBJUHY2IGRhdGEgaXMgYSBuby1ubyB3aGVuIElQdjYgbm90IGVuYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggYnVnIDMxMTg2MzE6IHNubXB0YWJsZSBzZWdmYXVsdHMgaWYgaW5kZXgKKworIGNvbnRhaW5zIDogY2hhcmFjdGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMTk5NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBidWcgMzExODYzMTogc25tcHRhYmxlIHNlZ2ZhdWx0cyBpZiBpbmRleAorCisgY29udGFpbnMgOiBjaGFyYWN0ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AxOTk3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGJ1ZyAzMTE4NjMxOiBzbm1wdGFibGUgc2VnZmF1bHRzIGlmIGluZGV4CisKKyBjb250YWlucyA6IGNoYXJhY3RlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggYnVnIDMxMTg2MzE6IHNubXB0YWJsZSBzZWdmYXVsdHMgaWYgaW5kZXgKKworIGNvbnRhaW5zIDogY2hhcmFjdGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBidWcgMzExODYzMTogc25tcHRhYmxlIHNlZ2ZhdWx0cyBpZiBpbmRleAorCisgY29udGFpbnMgOiBjaGFyYWN0ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOiBGcmVlQlNEIDggc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMTk5NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6IEZyZWVCU0QgOCBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDogRnJlZUJTRCA4IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOiBGcmVlQlNEIDggc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oOiBhZGRlZCBtaXNzaW5nCisKKyBuZXQtc25tcC1mZWF0dXJlcy5oIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgTWFrZWZpbGUudG9wLCBhZ2VudC9NYWtlZmlsZS5pbiwgCisgICAgICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsIAorICAgICAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgCisgICAgICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjCisgICAgICAgZS5jLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV8KKyAgICAgICBhY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyCisgICAgICAgZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2ludGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYworICAgICAgICwgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfaW50ZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZgorICAgICAgIGFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTgorICAgICAgIFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLgorICAgICAgIGMsIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgIGFnZW50L3NubXBkLmMsCisgICAgICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL2FnZW50eHRyYXAuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaCwgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCAKKyAgICAgIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIGNvbmZpZ3VyZSwgCisgICAgICBjb25maWd1cmUuYWMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMsCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBwZXJsL09JRC9PSUQueHMsIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQueHMsIHNubXBsaWIvTWFrZWZpbGUuaW4sIAorICAgICAgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsCisgICAgICAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvZmlsZV91dGlscy5jLAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmMsCisgICAgICBzbm1wbGliL21pYi5jLCAgc25tcGxpYi9vaWRfc3Rhc2guYywgc25tcGxpYi9wYXJzZS5jLAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXAtdGMuYywKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2VudW0uYywKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgIHNubXBsaWIvc25tcF9zZWNtb2QuYywKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi9zbm1wa3NtLmMsICBzbm1wbGliL3NubXB0c20uYywKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgc25tcGxpYi9zeXN0ZW0uYywKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jLCBzbm1wbGliL3Rvb2xzLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3VjZF9jb21wYXQuYywgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZywgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGU6IE5FV1M6CisKKyBwYWNrYWdpbmc6IEVuYWJsZSBtaWNyby1hbmQtbWFjcm8tZmVhdHVyZSBtYW5hZ2VtZW50IHdpdGhpbgorIE5ldC1TTk1QOyB0aGlzIGFkZHMgYSBudW1iZXIgb2YgbmV3IGZsYWdzIHRvIGNvbmZpZ3VyZQorICgtLWVuYWJsZS1taW5pbWFsaXN0IGFuZCAtLWVuYWJsZS1yZWFkLW9ubHkpLiAgVGhlc2UgY2hhbmdlcyBhcmUKKyBkZXNpZ25lZCB0byByZW1vdmUgbXVjaCBvZiB0aGUgaW5saW5lIGNvZGUgdGhhdCBpc24ndCBhbHdheXMKKyBuZWNlc3Nhcnkgb3IgZGVzaXJlZC4gIFNjcmlwdHMgZXhpc3QgKGFuZCB3aWxsIGJlIGltcHJvdmVkKSB0byBzdGlwCisgb3V0IHVudXNlZCBjb21wb25lbnRzIGZyb20gdGhlIGNvZGUgZW50aXJlbHkgdG8gZW5hYmxlIGEgc2hvcnRlcgorIHJldmlldyBwcm9jZXNzIGZvciB1cGdyYWRpbmcgdG8gbmV3IHJlbGVhc2VzLiAgVGhpcyB3b3JrIHdhcyBkb25lIGJ5CisgV2VzIEhhcmRha2VyIGFuZCBNaWNoYWVsIEJhZXIgZnJvbSBTUEFSVEEsIEluYy4gYnV0IGlzIGJlaW5nIGNoZWNrZWQKKyBpbiBhcyBhIGxhcmdlIHBhdGNoIHNpbmNlIGNvbnZlcnRpbmcgdGhlIG1pY3JvIHBhdGNoZXMgZnJvbSBnaXQgdG8KKyBzdm4gdHVyZW5kIG91dCB0byBiZSBpbXBvc3NpYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogRkFROiB1c2UgdGhlIHdpa2kgVVJMIGluc3RlYWQgb2YgdGhlIHR1dG9yaWFsLTUgVVJMIGZvciB0aGUKKworIHNubXB0cmFwIHR1dG9yaWFsIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOiBSZXZlcnQgYSBib2d1cyBjaGFuZ2UgdGhhdCBjcmVwdAorCisgaW50byB0aGUgY29kZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5NjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEFHRU5ULnR4dCwgQ0hBTkdFUywgQ09QWUlORywgQ2hhbmdlTG9nLCBDb2RpbmdTdHlsZSwgCisgICAgICBFWEFNUExFLmNvbmYuZGVmLCBGQVEsIElOU1RBTEwsIE1ha2VmaWxlLmFtLCBNYWtlZmlsZS5pbiwgCisgICAgICBNYWtlZmlsZS5ydWxlcywgTWFrZWZpbGUudG9wLCBORVdTLCBQT1JUSU5HLCBSRUFETUUsIAorICAgICAgUkVBRE1FLlBhbmFzb25pY19BTTNYLnR4dCwgUkVBRE1FLmFnZW50LW1pYnMsIFJFQURNRS5hZ2VudHgsIAorICAgICAgUkVBRE1FLmFpeCwgUkVBRE1FLmhwdXgxMSwgUkVBRE1FLmlyaXgsIFJFQURNRS5rcmI1LCBSRUFETUUub3NYLCAKKyAgICAgIFJFQURNRS5zbm1wdjMsIFJFQURNRS5zb2xhcmlzLCBSRUFETUUuc3FsLCBSRUFETUUudGhyZWFkLCAKKyAgICAgIFJFQURNRS50cnU2NCwgUkVBRE1FLndpbjMyLCBUT0RPLCBhY2NvbmZpZy5oLCBhY2xvY2FsLm00LCAKKyAgICAgIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2FnZW50X2hhbmRsZXIuYywgCisgICAgICBhZ2VudC9hZ2VudF9pbmRleC5jLCBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3N5c09SVGFibGUuYywgCisgICAgICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvYXV0b25saXN0LmgsIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIAorICAgICAgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jLCBhZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9udWxsLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZ2VuZXJpYy5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9rZXJuZWwuYywgYWdlbnQva2VybmVsLmgsIAorICAgICAgYWdlbnQvbTJtLmgsIGFnZW50L21pYl9tb2R1bGVzLmMsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvUkVBRE1FLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1JFQURNRS5zbXV4LCBhZ2VudC9taWJncm91cC9SbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9SRUFETUUsIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuaCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWxfYXBpLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaCwgIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaCwgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmgsICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmgsCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3Rlc3RfYWxhcm0uc2gsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi90ZXN0X2hpc3Quc2gsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmgsIGFnZW50L21pYmdyb3VwL2FnZW50eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50LW1pYi5oLCBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwU2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBfZW51bS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9vbGQtZXZlbnQtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmctbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2MKKyAgICAgICBlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjCisgICAgICAgZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldAorICAgICAgIC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQKKyAgICAgICAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0CisgICAgICAgLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldAorICAgICAgIC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhYworICAgICAgIGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjCisgICAgICAgZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfb2lkcy5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzLmgsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL01ha2VmaWxlLmRsbW9kLAorICAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY29sdW1ucy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbm90aWZpY2F0aW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbm90aWZpY2F0aW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jbWRzLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuY29uZiwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tlcm5kYXRhLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rZXJuZGF0YS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbWFjaC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbWFjaC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9udWxsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9udWxsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wc3RhdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcHN0YXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tb3VudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2R5bml4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9ocHV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9pcml4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbnVsbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0LmgsIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2Rhcndpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9ubGlzdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5oLCAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYywgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jLCAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmgsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5oLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5oLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmgsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgsIGFnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kZWZzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2NvbgorICAgICAgIHN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3QKKyAgICAgICBhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhXworICAgICAgIGFjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV8KKyAgICAgICBhY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyCisgICAgICAgZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXIKKyAgICAgICBmYWNlLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbgorICAgICAgIHN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50CisgICAgICAgZXJmYWNlLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2dldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2dldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnUKKyAgICAgICBtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50CisgICAgICAgZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX29pZAorICAgICAgIHMuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnN0YW4KKyAgICAgICB0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfY29uc3RhbgorICAgICAgIHRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW4KKyAgICAgICB0LmMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfY29uc3RhbgorICAgICAgIHRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5oLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9vaWRzLmgsIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvUkVBRE1FLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWZUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NvbHVtbnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oLCAgYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oLCAgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMsCisgICAgICBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcworICAgICAgIC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MKKyAgICAgICAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMKKyAgICAgICAsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAorICAgICAgICwgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9vaWRzLmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMsIGFnZW50L21pYmdyb3VwL3NtdXguaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXhfZ2F0ZWQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy91c21ESFBhcmFtZXQKKyAgICAgICBlcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMvdXNtREhQYXJhbWV0CisgICAgICAgZXJzLmgsCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9nZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX2dldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfc2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9zZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kb3h5Z2VuLmNvbmYsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9vaWRzLmgsIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtQ29uZi5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtQ29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaCwgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvTWFrZWZpbGUsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9wcml2YXRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9jb25zdGEKKyAgICAgICBudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmCisgICAgICAgYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZgorICAgICAgIGFjZS5oLCBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfY29uc3RhbnRzLgorICAgICAgIGgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBoLCBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jLCBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC5oLCBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywKKyAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZF9zbm1wLmgsIGFnZW50L21pYmdyb3VwL3VkcC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy4KKyAgICAgICBoLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy5oLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3ZlcnNpb250YWcsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5oLCBhZ2VudC9vYmplY3RfbW9uaXRvci5jLCAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcF9wZXJsLmMsIGFnZW50L3NubXBfcGVybC5oLCAKKyAgICAgIGFnZW50L3NubXBfcGVybC5wbCwgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIAorICAgICAgYWdlbnQvc25tcGQuaCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuaW4sIAorICAgICAgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIGFwcHMvc25tcF9wZXJsX3RyYXBkLnBsLCAKKyAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvZmZzLmMsIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBuZXRzdGF0L21haW4uaCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaCwgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jLCBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaCwgCisgICAgICBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsIGFwcHMvc25tcHRhYmxlLmMsIAorICAgICAgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgYXBwcy9zbm1wdHJhcC5jLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5oLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2RzLmgsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaCwgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIAorICAgICAgYXBwcy9zbm1wdHJhcGRfbG9nLmgsIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBhcHBzL3NubXB1c20uYywgCisgICAgICBhcHBzL3NubXB2YWNtLmMsIGFwcHMvc25tcHdhbGsuYywgYXBwcy9zc2h0b3NubXAuYywgY29uZmlnLmd1ZXNzLCAKKyAgICAgIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsCisgICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9SRUFETUUuYnVpbGQtc2NyaXB0cywgZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUywgCisgICAgICBkaXN0L2F1dG9jb25mLXZlcnNpb24sIGRpc3QvY2hhbmdlbG9nZml4LCBkaXN0L2NoZWNrLWFwaS1jaGFuZ2UsIAorICAgICAgZGlzdC9jdnNzaG93LCBkaXN0L2N2c3VwLCBkaXN0L2V4dHJhY3RuZXdzLCBkaXN0L2ZpbmQtcmVxdWlyZXMsIAorICAgICAgZGlzdC9tYWtlcmVsZWFzZS54bWwsIGRpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9ERVZFTlYsIAorICAgICAgZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRSwgCisgICAgICBkaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvYnVpbGRwYWNrYWdlLXNvbGFyaXMsIAorICAgICAgZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2VsZmRlcGVuZC5zaCwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIGRpc3QvbnNiLWNvbmZpZywgZGlzdC9uc2ItZnVuY3Rpb25zLCBkaXN0L25zYi1uaWdodGx5LCAKKyAgICAgIGRpc3QvbnNiLXBhY2thZ2UsIGRpc3QvbnNiLXBsYXRmb3JtLCBkaXN0L3BhdG1lLCAKKyAgICAgIGRpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwsIGRpc3Qvc25tcGQtaW5pdC5kLCAKKyAgICAgIGRpc3Qvc25tcHRyYXBkLWluaXQuZCwgZGlzdC9zdm51cCwgZG9jL3JmYy9hZ2VudHgvcmZjMjc0MS50eHQsIAorICAgICAgZG9jL3JmYy9taXNjL3JmYzM1MTIudHh0LCBkb2MvcmZjL21pc2MvcmZjMzU4NC50eHQsIAorICAgICAgZG9jL3JmYy9zbWlWMi9yZmMyNTc4LnR4dCwgZG9jL3JmYy9zbWlWMi9yZmMyNTc5LmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NtaVYyL3JmYzI1NzkudHh0LCBkb2MvcmZjL3NtaVYyL3JmYzI1ODAudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYxL3JmYzExNTUudHh0LCBkb2MvcmZjL3NubXBWMS9yZmMxMTU3LnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMS9yZmMxMjEyLnR4dCwgZG9jL3JmYy9zbm1wVjEvcmZjMTIxMy50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjIvcmZjMTkwMS50eHQsIGRvYy9yZmMvc25tcFYyL3JmYzE5MDIudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYyL3JmYzE5MDMudHh0LCBkb2MvcmZjL3NubXBWMi9yZmMxOTA0LnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMi9yZmMxOTA1LnR4dCwgZG9jL3JmYy9zbm1wVjIvcmZjMTkwNi50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjIvcmZjMTkwNy50eHQsIGRvYy9yZmMvc25tcFYyL3JmYzE5MDgudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYyL3JmYzIwODkudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDEwLmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDEwLnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMS50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMi50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTMuZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTMudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDE0LmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDE0LnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNS5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNS50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTYudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTcudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDE4LmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDE4LnR4dCwgZG90Z2RiaW5pdCwgZG94eWdlbi5jb25mLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9pbmRleC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vYmplY3RfbW9uaXRvci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NldF9oZWxwZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX3RvX25leHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaCwgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9uZXQtc25tcC1kYXRhLWFjY2Vzcy1pbmNsdWRlcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3RjcENvbm4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L1JFQURNRSwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oLCAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGV4dF91dGlscy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaCwgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4LmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2JzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2JzZGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYnNkaTMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ic2RpNC5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaCwKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kcmFnb25mbHkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9keW5peC5oLAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDYuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oLAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaCwKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2tmcmVlYnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaCwKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMybXN2Yy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pcHMuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vc2Y1LmgsCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi40LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuNS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjYuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdW5vcy5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS91bHRyaXg0LmgsCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBpbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9SRUFETUUsIGluY2x1ZGUvdWNkLXNubXAvYWdlbnRfaW5kZXguaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2FnZW50X3JlYWRfY29uZmlnLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9hZ2VudF9yZWdpc3RyeS5oLCBpbmNsdWRlL3VjZC1zbm1wL2FnZW50X3RyYXAuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2FzbjEuaCwgaW5jbHVkZS91Y2Qtc25tcC9hdXRvX25saXN0LmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9jYWxsYmFjay5oLCBpbmNsdWRlL3VjZC1zbm1wL2RlZmF1bHRfc3RvcmUuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2RzX2FnZW50LmgsIGluY2x1ZGUvdWNkLXNubXAvaGVhZGVyX2NvbXBsZXguaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2ludDY0LmgsIGluY2x1ZGUvdWNkLXNubXAva2V5dG9vbHMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL21pYi5oLCBpbmNsdWRlL3VjZC1zbm1wL21pYl9tb2R1bGVfY29uZmlnLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9taWJpbmNsLmgsIGluY2x1ZGUvdWNkLXNubXAvcGFyc2UuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3JlYWRfY29uZmlnLmgsIGluY2x1ZGUvdWNkLXNubXAvc2NhcGkuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXAtdGMuaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2FnZW50LmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcF9hbGFybS5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcF9hcGkuaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2NsaWVudC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcF9kZWJ1Zy5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXBfaW1wbC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcF9sb2dnaW5nLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX3BhcnNlX2FyZ3MuaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX3ZhcnMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXB1c20uaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wdjMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3N0cnVjdC5oLCBpbmNsdWRlL3VjZC1zbm1wL3N5c3RlbS5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdG9vbHMuaCwgaW5jbHVkZS91Y2Qtc25tcC90cmFuc2Zvcm1fb2lkcy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdWNkLXNubXAtYWdlbnQtaW5jbHVkZXMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3VjZC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdWNkLXNubXAtaW5jbHVkZXMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3V0aWxfZnVuY3MuaCwgaW5jbHVkZS91Y2Qtc25tcC92YXJfc3RydWN0LmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC92ZXJzaW9uLmgsIGluc3RhbGwtc2gsIGxvY2FsL0ZBUTJIVE1MLCAKKyAgICAgIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9SRUFETUUubWliMmMsIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGwsIAorICAgICAgbG9jYWwvY29udmVydGNvZGUsIGxvY2FsL2ZpeHByb2MsIGxvY2FsL2h0bWwtYWRkLWhlYWRlci1mb290ZXIucGwsCisgICAgICAgbG9jYWwvaHRtbC10ZXh0ZmlsZS1maXgucGwsIGxvY2FsL2lwZi1tb2QucGwsIGxvY2FsL21pYjJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9kZWZhdWx0LW1mZC10b3AubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9kZXRhaWxzLWVudW1zLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZGV0YWlscy1ub2RlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZGV0YWlscy10YWJsZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWNvcHkubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1zZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWRhdGEtYWxsb2NhdGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWRhdGEtY29udGV4dC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LWNoYXIubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1kZWNsLWJvdC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LWRlY2wubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1sb25nLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtb2lkLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1oZWFkZXItYm90dG9tLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1oZWFkZXItdG9wLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWNvbnN0YW50cy5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtZW51bXMubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtZnJvbS1vaWQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtc2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy12YXJiaW5kLXNldHVwLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1vaWRzLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy12YWx1ZS1tYXAtZnVuYy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdmFsdWUtbWFwLXJldmVyc2UubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXZhbHVlLW1hcC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL20yYy1pbnRlcm5hbC13YXJuaW5nLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbTJjX3NldHVwX2VudW0ubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tMmNfc2V0dXBfbm9kZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL20yY19zZXR1cF90YWJsZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL20yY190YWJsZV9zYXZlX2RlZmF1bHRzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWFjY2Vzcy1jb250YWluZXItY2FjaGVkLWRlZmluZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtYWNjZXNzLXVuc29ydGVkLWV4dGVybmFsLWRlZmluZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtZGF0YS1hY2Nlc3MubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtZGF0YS1nZXQubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtZGF0YS1zZXQubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtZG94eWdlbi5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtbWFrZWZpbGUubTJtLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcmVhZG1lLm0yYywgbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjLAorICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9ub2RlLWdldC5tMmksIGxvY2FsL21pYjJjLWNvbmYuZC9ub2RlLXNldC5tMmksCisgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL25vZGUtc3RvcmFnZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL25vZGUtdmFsaWRhdGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9ub2RlLXZhcmJpbmQtdmFsaWRhdGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9wYXJlbnQtZGVwZW5kZW5jaWVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvcGFyZW50LXNldC5tMmksCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtQ09VTlRFUjY0LWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1EYXRlQW5kVGltZS1nZXQubTJkLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtRGF0ZUFuZFRpbWUtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LURhdGVBbmRUaW1lLXJlYWRtZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1JbmV0QWRkcmVzcy1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtSW5ldEFkZHJlc3Mtc2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LUluZXRBZGRyZXNzVHlwZS1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtSW5ldEFkZHJlc3NUeXBlLXNldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1Sb3dTdGF0dXMtZGVwZW5kZW5jaWVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LVJvd1N0YXR1cy1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtUm93U3RhdHVzLXZhcmJpbmQtdmFsaWRhdGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtU3RvcmFnZVR5cGUtZGVwZW5kZW5jaWVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LVRlc3RBbmRJbmNyLWdldC5tMmksIGxvY2FsL21pYjJjLXVwZGF0ZSwKKyAgICAgICBsb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYsIGxvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5jaGVja192YWx1ZXMuY29uZiwKKyAgICAgIGxvY2FsL21pYjJjLmNoZWNrX3ZhbHVlc19sb2NhbC5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmNvbHVtbl9kZWZpbmVzLmNvbmYsIGxvY2FsL21pYjJjLmNvbHVtbl9lbnVtcy5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmNvbHVtbl9zdG9yYWdlLmNvbmYsIGxvY2FsL21pYjJjLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsIGxvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuZW11bGF0aW9uLmNvbmYsIGxvY2FsL21pYjJjLmdlbmh0bWwuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIGxvY2FsL21pYjJjLm1mZC5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLm5vdGlmeS5jb25mLCBsb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMucGVybC5jb25mLCBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5yb3cuY29uZiwgbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mLCBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0LCAKKyAgICAgIGxvY2FsL3Bhc3N0ZXN0LCBsb2NhbC9wYXNzdGVzdC5wbCwgbG9jYWwvc25tcC11Y2Quc2gsIAorICAgICAgbG9jYWwvc25tcGNoZWNrLmRlZiwgbG9jYWwvc25tcGNvbmYsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXAtZGF0YS9hdXRob3B0cywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcC1kYXRhL2RlYnVnZ2luZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcC1kYXRhL21pYnMsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXAtZGF0YS9vdXRwdXQsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXAtZGF0YS9zbm1wY29uZi1jb25maWcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvYWNsLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL2Jhc2ljX3NldHVwLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL2V4dGVuZGluZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9tb25pdG9yLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL29wZXJhdGlvbiwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9zbm1wY29uZi1jb25maWcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvc3lzdGVtLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL3RyYXBzaW5rcywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvYXV0aGVudGljYXRpb24sIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL2Zvcm1hdHRpbmcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL2xvZ2dpbmcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL3J1bnRpbWUsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL3NubXBjb25mLWNvbmZpZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvdHJhcGhhbmRsZSwgbG9jYWwvc25tcGR1bXAucGwsIAorICAgICAgbG9jYWwvdGttaWIsIGxvY2FsL3RyYXB0b2VtYWlsLCBsdG1haW4uc2gsIAorICAgICAgbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00LCBtNC9hY19tc2dfY2FjaGUubTQsIAorICAgICAgbTQvYWNfbXNnX21vZHVsZV9kYmcubTQsIG00L2FjX3Byb21wdF91c2VyLm00LCBtNC9saWJ0b29sLm00LCAKKyAgICAgIG00L2x0b3B0aW9ucy5tNCwgbTQvbHRzdWdhci5tNCwgbTQvbHR2ZXJzaW9uLm00LAorICAgICAgbTQvbHR+b2Jzb2xldGUubTQsICBtNC9uZXRzbm1wX2FyZy5tNCwgbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNCwKKyAgICAgIG1ha2VkZXBlbmQuaW4sICBtYWtlZmlsZWluZGVwZW5kLnBsLCBtYWtlbm9zeXNkZXBlbmQucGwsCisgICAgICBtYWtldGFyZ2V0LCAgbWFuL01ha2VmaWxlLmluLCBtYW4vYWRkX21pYmRpci4zLAorICAgICAgbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMywgIG1hbi9jb25maWdfYXBpLjMuZGVmLAorICAgICAgbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QsICBtYW4vZGVmYXVsdF9zdG9yZS4zLnRvcCwKKyAgICAgIG1hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmLCAgbWFuL2ZpeHByb2MuMS5kZWYsCisgICAgICBtYW4vZ2V0X21vZHVsZV9ub2RlLjMsIG1hbi9pbml0X21pYi4zLCAgbWFuL2luaXRfbWliX2ludGVybmFscy4zLAorICAgICAgbWFuL21ha2VfaW5kZXgucGwsIG1hbi9tYW5fc2VjdGlvbnMudHh0LCAgbWFuL21pYjJjLXVwZGF0ZS4xLmRlZiwKKyAgICAgIG1hbi9taWIyYy4xLmRlZiwgbWFuL21pYjJjLmNvbmYuNS5pbiwgIG1hbi9taWIyYy5leHRyYWN0LnBsLAorICAgICAgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9uZXQtc25tcC1jb25maWcuMS5kZWYsIAorICAgICAgbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbGVhZi4zLCBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc2V0X2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93LjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgCisgICAgICBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMywgbWFuL3BkdV9hcGkuMy5kZWYsIG1hbi9wcmludF9kZXNjcmlwdGlvbi4zLAorICAgICAgIG1hbi9wcmludF9taWIuMywgbWFuL3ByaW50X29iamlkLjMsIG1hbi9wcmludF92YWx1ZS4zLCAKKyAgICAgIG1hbi9wcmludF92YXJpYWJsZS4zLCBtYW4vcmVhZF9hbGxfbWlicy4zLCBtYW4vcmVhZF9taWIuMywgCisgICAgICBtYW4vcmVhZF9tb2R1bGUuMywgbWFuL3JlYWRfbW9kdWxlX25vZGUuMywgbWFuL3JlYWRfb2JqaWQuMywgCisgICAgICBtYW4vc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zaHV0ZG93bl9taWIuMywgbWFuL3NubXAuY29uZi41LmRlZiwgCisgICAgICBtYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9zbm1wX2FsYXJtLjMuZGVmLCAKKyAgICAgIG1hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMywgbWFuL3NubXBfY2xvc2UuMywgbWFuL3NubXBfY29uZmlnLjUuZGVmLAorICAgICAgIG1hbi9zbm1wX2Vycm9yLjMsIG1hbi9zbm1wX2ZyZWVfcGR1LjMsIG1hbi9zbm1wX29wZW4uMywgCisgICAgICBtYW4vc25tcF9wZXJyb3IuMywgbWFuL3NubXBfcmVhZC4zLCBtYW4vc25tcF9zZWxlY3RfaW5mby4zLCAKKyAgICAgIG1hbi9zbm1wX3NlbmQuMywgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYsIAorICAgICAgbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMsIG1hbi9zbm1wX3Nlc3NfY2xvc2UuMywgCisgICAgICBtYW4vc25tcF9zZXNzX2Vycm9yLjMsIG1hbi9zbm1wX3Nlc3NfaW5pdC4zLCBtYW4vc25tcF9zZXNzX29wZW4uMywKKyAgICAgICBtYW4vc25tcF9zZXNzX3BlcnJvci4zLCBtYW4vc25tcF9zZXNzX3JlYWQuMywgCisgICAgICBtYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMsIG1hbi9zbm1wX3Nlc3Nfc2VuZC4zLCAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zLCBtYW4vc25tcF9zZXNzX3RpbWVvdXQuMywgCisgICAgICBtYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMsIG1hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zLCAKKyAgICAgIG1hbi9zbm1wX3RpbWVvdXQuMywgbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYsCisgICAgICBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGNtZC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wY29uZi4xLmRlZiwgIG1hbi9zbm1wZC44LmRlZiwgbWFuL3NubXBkLmNvbmYuNS5kZWYsCisgICAgICBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsICBtYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYsCisgICAgICBtYW4vc25tcGRlbHRhLjEuZGVmLCBtYW4vc25tcGRmLjEuZGVmLCAgbWFuL3NubXBnZXQuMS5kZWYsCisgICAgICBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1waW5mb3JtLjEsICBtYW4vc25tcG5ldHN0YXQuMS5kZWYsCisgICAgICBtYW4vc25tcHNldC4xLmRlZiwgbWFuL3NubXBzdGF0dXMuMS5kZWYsICBtYW4vc25tcHRhYmxlLjEuZGVmLAorICAgICAgbWFuL3NubXB0ZXN0LjEuZGVmLCBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgIG1hbi9zbm1wdHJhcC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wdHJhcGQuOC5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwgIG1hbi9zbm1wdXNtLjEuZGVmLAorICAgICAgbWFuL3NubXB2YWNtLjEuZGVmLCBtYW4vc25tcHdhbGsuMS5kZWYsICBtYW4vdGttaWIuMS5kZWYsCisgICAgICBtYW4vdHJhcHRvZW1haWwuMS5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZiwgCisgICAgICBtYW4vdmFyaWFibGVzLjUuZGVmLCBtaWJzL0FHRU5UWC1NSUIudHh0LCAKKyAgICAgIG1pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQsIG1pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dCwgCisgICAgICBtaWJzL0RJU01BTi1OU0xPT0tVUC1NSUIudHh0LCBtaWJzL0RJU01BTi1QSU5HLU1JQi50eHQsIAorICAgICAgbWlicy9ESVNNQU4tU0NIRURVTEUtTUlCLnR4dCwgbWlicy9ESVNNQU4tU0NSSVBULU1JQi50eHQsIAorICAgICAgbWlicy9ESVNNQU4tVFJBQ0VST1VURS1NSUIudHh0LCBtaWJzL0V0aGVyTGlrZS1NSUIudHh0LCAKKyAgICAgIG1pYnMvSENOVU0tVEMudHh0LCBtaWJzL0hPU1QtUkVTT1VSQ0VTLU1JQi50eHQsIAorICAgICAgbWlicy9IT1NULVJFU09VUkNFUy1UWVBFUy50eHQsIAorICAgICAgbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dCwgCisgICAgICBtaWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dCwgbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dCwgCisgICAgICBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dCwgbWlicy9JRi1JTlZFUlRFRC1TVEFDSy1NSUIudHh0LCAKKyAgICAgIG1pYnMvSUYtTUlCLnR4dCwgbWlicy9JTkVULUFERFJFU1MtTUlCLnR4dCwgCisgICAgICBtaWJzL0lQLUZPUldBUkQtTUlCLnR4dCwgbWlicy9JUC1NSUIudHh0LCAKKyAgICAgIG1pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQsIG1pYnMvSVBWNi1JQ01QLU1JQi50eHQsIAorICAgICAgbWlicy9JUFY2LU1JQi50eHQsIG1pYnMvSVBWNi1UQy50eHQsIG1pYnMvSVBWNi1UQ1AtTUlCLnR4dCwgCisgICAgICBtaWJzL0lQVjYtVURQLU1JQi50eHQsIG1pYnMvTE0tU0VOU09SUy1NSUIudHh0LCBtaWJzL01UQS1NSUIudHh0LCAKKyAgICAgIG1pYnMvTWFrZWZpbGUuaW4sIG1pYnMvTWFrZWZpbGUubWliLCBtaWJzL05FVC1TTk1QLUFHRU5ULU1JQi50eHQsIAorICAgICAgbWlicy9ORVQtU05NUC1FWEFNUExFUy1NSUIudHh0LCBtaWJzL05FVC1TTk1QLUVYVEVORC1NSUIudHh0LCAKKyAgICAgIG1pYnMvTkVULVNOTVAtTUlCLnR4dCwgbWlicy9ORVQtU05NUC1NT05JVE9SLU1JQi50eHQsIAorICAgICAgbWlicy9ORVQtU05NUC1QQVNTLU1JQi50eHQsIG1pYnMvTkVULVNOTVAtU1lTVEVNLU1JQi50eHQsIAorICAgICAgbWlicy9ORVQtU05NUC1UQy50eHQsIG1pYnMvTkVULVNOTVAtVkFDTS1NSUIudHh0LCAKKyAgICAgIG1pYnMvTkVUV09SSy1TRVJWSUNFUy1NSUIudHh0LCBtaWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dCwgCisgICAgICBtaWJzL1JFQURNRS5taWJzLCBtaWJzL1JGQy0xMjE1LnR4dCwgbWlicy9SRkMxMTU1LVNNSS50eHQsIAorICAgICAgbWlicy9SRkMxMjEzLU1JQi50eHQsIG1pYnMvUk1PTi1NSUIudHh0LCBtaWJzL1NDVFAtTUlCLnR4dCwgCisgICAgICBtaWJzL1NNVVgtTUlCLnR4dCwgbWlicy9TTk1QLUNPTU1VTklUWS1NSUIudHh0LCAKKyAgICAgIG1pYnMvU05NUC1GUkFNRVdPUkstTUlCLnR4dCwgbWlicy9TTk1QLU1QRC1NSUIudHh0LCAKKyAgICAgIG1pYnMvU05NUC1OT1RJRklDQVRJT04tTUlCLnR4dCwgbWlicy9TTk1QLVBST1hZLU1JQi50eHQsIAorICAgICAgbWlicy9TTk1QLVRBUkdFVC1NSUIudHh0LCBtaWJzL1NOTVAtVVNFUi1CQVNFRC1TTS1NSUIudHh0LCAKKyAgICAgIG1pYnMvU05NUC1VU00tQUVTLU1JQi50eHQsIG1pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0LCAKKyAgICAgIG1pYnMvU05NUC1WSUVXLUJBU0VELUFDTS1NSUIudHh0LCBtaWJzL1NOTVB2Mi1DT05GLnR4dCwgCisgICAgICBtaWJzL1NOTVB2Mi1NSUIudHh0LCBtaWJzL1NOTVB2Mi1TTUkudHh0LCBtaWJzL1NOTVB2Mi1UQy50eHQsIAorICAgICAgbWlicy9TTk1QdjItVE0udHh0LCBtaWJzL1RDUC1NSUIudHh0LCAKKyAgICAgIG1pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dCwgbWlicy9UVU5ORUwtTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1ERU1PLU1JQi5pbmMsIG1pYnMvVUNELURFTU8tTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1ESVNLSU8tTUlCLmluYywgbWlicy9VQ0QtRElTS0lPLU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtRExNT0QtTUlCLmluYywgbWlicy9VQ0QtRExNT0QtTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1JUEZJTFRFUi1NSUIuaW5jLCBtaWJzL1VDRC1JUEZJTFRFUi1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELUlQRldBQ0MtTUlCLmluYywgbWlicy9VQ0QtSVBGV0FDQy1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELVNOTVAtTUlCLU9MRC50eHQsIG1pYnMvVUNELVNOTVAtTUlCLmluYywgCisgICAgICBtaWJzL1VDRC1TTk1QLU1JQi50eHQsIG1pYnMvVURQLU1JQi50eHQsIG1pYnMvaWFuYWxpc3QsIAorICAgICAgbWlicy9tYWtlaHRtbC5wbCwgbWlicy9taWJmZXRjaCwgbWlicy9ub2RlbWFwLCBtaWJzL3JmY2xpc3QsIAorICAgICAgbWlicy9yZmNtaWJzLmRpZmYsIG1pYnMvc21pc3RyaXAsIG1raW5zdGFsbGRpcnMsIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluLCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbiwgb3YvTWFrZWZpbGUuaW4sIAorICAgICAgb3YvUkVBRE1FLCBvdi9VQ0QtQ29tcHV0ZXIsIG92L1VDRC1maWVsZHMsIG92L2JpdG1hcHMvVUNELjIwLm0sIAorICAgICAgb3YvYml0bWFwcy9VQ0QuMjAucCwgb3YvYml0bWFwcy9VQ0QuMjYubSwgb3YvYml0bWFwcy9VQ0QuMjYucCwgCisgICAgICBvdi9iaXRtYXBzL1VDRC4zMi5tLCBvdi9iaXRtYXBzL1VDRC4zMi5wLCBvdi9iaXRtYXBzL1VDRC4zOC5tLCAKKyAgICAgIG92L2JpdG1hcHMvVUNELjM4LnAsIG92L2JpdG1hcHMvVUNELjQ0Lm0sIG92L2JpdG1hcHMvVUNELjQ0LnAsIAorICAgICAgb3YvYml0bWFwcy9VQ0QuNTAubSwgb3YvYml0bWFwcy9VQ0QuNTAucCwgb3YvYml0bWFwcy9VQ0QuZmllbGRzLCAKKyAgICAgIG92L29pZF90b19zeW0uaW4sIG92L29pZF90b190eXBlLmluLCBwZXJsL0FTTi9BU04ucG0sIAorICAgICAgcGVybC9BU04vQVNOLnhzLCBwZXJsL0FTTi9DaGFuZ2VzLCBwZXJsL0FTTi9NQU5JRkVTVCwgCisgICAgICBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgcGVybC9BU04vdGVzdC5wbCwgcGVybC9BbnlEYXRhX1NOTVAvQ2hhbmdlcywKKyAgICAgICBwZXJsL0FueURhdGFfU05NUC9EQkRfQW55RGF0YS5wYXRjaCwgcGVybC9BbnlEYXRhX1NOTVAvRm9ybWF0LnBtLAorICAgICAgIHBlcmwvQW55RGF0YV9TTk1QL0lOU1RBTEwsIHBlcmwvQW55RGF0YV9TTk1QL01BTklGRVNULCAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL01ha2VmaWxlLlBMLCBwZXJsL0FueURhdGFfU05NUC9SRUFETUUsIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9BbnlEYXRhX1NOTVAvY29uZmlncy9zY2xpLCAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL2NvbmZpZ3MvdW5peCwgcGVybC9BbnlEYXRhX1NOTVAvbmV0c2gsIAorICAgICAgcGVybC9NYWtlZmlsZS5QTCwgcGVybC9NYWtlZmlsZS5tYWtlZmlsZXMsIHBlcmwvTWFrZWZpbGUuc3Vicy5wbCwgCisgICAgICBwZXJsL09JRC9DaGFuZ2VzLCBwZXJsL09JRC9NQU5JRkVTVCwgcGVybC9PSUQvTWFrZWZpbGUuUEwsIAorICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL09JRC9PSUQueHMsIHBlcmwvT0lEL1JFQURNRSwgCisgICAgICBwZXJsL09JRC90ZXN0LnBsLCBwZXJsL09JRC90eXBlbWFwLCBwZXJsL1NOTVAvQlVHLCAKKyAgICAgIHBlcmwvU05NUC9NQU5JRkVTVCwgcGVybC9TTk1QL01BTklGRVNULlNLSVAsCisgICAgICBwZXJsL1NOTVAvTWFrZWZpbGUuUEwsICBwZXJsL1NOTVAvUkVBRE1FLCBwZXJsL1NOTVAvU05NUC5wbSwKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCAgcGVybC9TTk1QL1RPRE8sIHBlcmwvU05NUC9leGFtcGxlcy9hc3luYzEucGwsIAorICAgICAgcGVybC9TTk1QL2V4YW1wbGVzL2FzeW5jMi5wbCwgcGVybC9TTk1QL2V4YW1wbGVzL2J1bGt3YWxrLnBsLCAKKyAgICAgIHBlcmwvU05NUC9leGFtcGxlcy9pcGZvcndhcmQucGwsIHBlcmwvU05NUC9leGFtcGxlcy9taWJ0cmVlLnBsLCAKKyAgICAgIHBlcmwvU05NUC9leGFtcGxlcy9taWJ3YWxrLnBsLCBwZXJsL1NOTVAvZXhhbXBsZXMvcGluZ21pYi5wbCwgCisgICAgICBwZXJsL1NOTVAvZXhhbXBsZXMvdGFibGV3YWxrLnBsLCBwZXJsL1NOTVAvZXhhbXBsZXMvdGVzdGxlYWsucGwsIAorICAgICAgcGVybC9TTk1QL2V4YW1wbGVzL3RyYXAtZXhhbXBsZS5wbCwgcGVybC9TTk1QL2hpbnRzL2lyaXgucGwsIAorICAgICAgcGVybC9TTk1QL2hpbnRzL3NvbGFyaXMucGwsIHBlcmwvU05NUC9wZXJsc25tcC5oLCAKKyAgICAgIHBlcmwvU05NUC90L1JFQURNRSwgcGVybC9TTk1QL3QvYXN5bmMudCwgcGVybC9TTk1QL3QvYnVsa3dhbGsudCwgCisgICAgICBwZXJsL1NOTVAvdC9jb25mLnQsIHBlcmwvU05NUC90L2NvbmZ0ZXN0LmNvbmYsIHBlcmwvU05NUC90L2dldC50LCAKKyAgICAgIHBlcmwvU05NUC90L2dldG5leHQudCwgcGVybC9TTk1QL3QvbWliLnQsIHBlcmwvU05NUC90L21pYi50eHQsIAorICAgICAgcGVybC9TTk1QL3QvbWlibG9hZC50LCBwZXJsL1NOTVAvdC9ub3RpZnkudCwKKyAgICAgIHBlcmwvU05NUC90L3Nlc3Npb24udCwgIHBlcmwvU05NUC90L3NldC50LAorICAgICAgcGVybC9TTk1QL3Qvc25tcHRlc3QuY29uZiwgIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGwsCisgICAgICBwZXJsL1NOTVAvdHlwZW1hcCwgIHBlcmwvVHJhcFJlY2VpdmVyL0NoYW5nZXMsCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NQU5JRkVTVCwgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvUkVBRE1FLCAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QtYy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QteHMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2ZhbGxiYWNrL2NvbnN0LWMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2ZhbGxiYWNrL2NvbnN0LXhzLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9wZXJsX3NubXB0cmFwZC5oLCBwZXJsL1RyYXBSZWNlaXZlci9wcHBvcnQuaCwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci90LzEudCwgcGVybC9UcmFwUmVjZWl2ZXIvdHlwZW1hcCwgCisgICAgICBwZXJsL2FnZW50L0NoYW5nZXMsIHBlcmwvYWdlbnQvTUFOSUZFU1QsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2FnZW50LnhzLCAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZ2VuLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvdGVzdC5wbCwgCisgICAgICBwZXJsL2FnZW50L25ldHNubXBfcmVxdWVzdF9pbmZvUHRyLnBtLCBwZXJsL2FnZW50L3Rlc3QucGwsIAorICAgICAgcGVybC9hZ2VudC90eXBlbWFwLCBwZXJsL2RlZmF1bHRfc3RvcmUvQ2hhbmdlcywgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTUFOSUZFU1QsIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvUkVBRE1FLCBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywgcGVybC9kZWZhdWx0X3N0b3JlL2dlbiwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbCwgcGVybC9kZWZhdWx0X3N0b3JlL3R5cGVtYXAsIAorICAgICAgcGVybC9tYWtlLXBlcmwtbWFrZWZpbGVzLCBwZXJsL21hbmFnZXIvSU5TVEFMTCwgCisgICAgICBwZXJsL21hbmFnZXIvTWFrZWZpbGUuUEwsIHBlcmwvbWFuYWdlci9kaXNwbGF5dGFibGUucG0sIAorICAgICAgcGVybC9tYW5hZ2VyL2dldFZhbHVlcy5wbSwgcGVybC9tYW5hZ2VyL21hbmFnZXIucG0sIAorICAgICAgcGVybC9tYW5hZ2VyL3NldHVwYXV0aCwgcGVybC9tYW5hZ2VyL3NldHVwZGIsIAorICAgICAgcGVybC9tYW5hZ2VyL3NldHVwdXNlciwgcGVybC9tYW5hZ2VyL3NubXB0b3NxbCwgcHl0aG9uL0xJQ0VOU0UsIAorICAgICAgcHl0aG9uL1JFQURNRSwgcHl0aG9uL25ldHNubXAvX19pbml0X18ucHksIAorICAgICAgcHl0aG9uL25ldHNubXAvY2xpZW50LnB5LCBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL19faW5pdF9fLnB5LCBweXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mLAorICAgICAgIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHksIHB5dGhvbi9zZXR1cC5weSwgcmVtb3ZlLWZpbGVzLCAKKyAgICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuaW4sIAorICAgICAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsIAorICAgICAgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvY29udGFpbmVyLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgc25tcGxpYi9kaXJfdXRpbHMuYywKKyAgICAgICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9maWxlX3V0aWxzLmMsCisgICAgICBzbm1wbGliL2dldG9wdC5jLCAgc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYywKKyAgICAgIHNubXBsaWIvaW50NjQuYywgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYywgIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvbWliLmMsCisgICAgICBzbm1wbGliL210X3N1cHBvcnQuYywgIHNubXBsaWIvb2lkX3N0YXNoLmMsIHNubXBsaWIvcGFyc2UuYywKKyAgICAgIHNubXBsaWIvcGtjcy5jLCAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsCisgICAgICBzbm1wbGliL3NubXAtdGMuYywgIHNubXBsaWIvc25tcC5jLCBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCBzbm1wbGliL3NubXBTVEREb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgIHNubXBsaWIvc25tcF9hdXRoLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywKKyAgICAgIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAgc25tcGxpYi9zbm1wX2VudW0uYywKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgIHNubXBsaWIvc25tcF9zZWNtb2QuYywKKyAgICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmMsICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jLCAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHRzbS5jLAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsICBzbm1wbGliL3NubXB2My5jLCBzbm1wbGliL3NucHJpbnRmLmMsCisgICAgICBzbm1wbGliL3N0cmxjcHkuYywgIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b2wuYywKKyAgICAgIHNubXBsaWIvc3RydG91bC5jLCAgc25tcGxpYi9zdHJ0b3VsbC5jLCBzbm1wbGliL3N5c3RlbS5jLAorICAgICAgc25tcGxpYi90ZXN0X2JpbmFyeV9hcnJheS5jLCAgc25tcGxpYi90ZXh0X3V0aWxzLmMsCisgICAgICBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdWNkLXNubXAtaW5jbHVkZXMuaCwgCisgICAgICBzbm1wbGliL3VjZF9jb21wYXQuYywgc25tcGxpYi92YWNtLmMsIHNubXBsaWIvd2lucGlwZS5jLCAKKyAgICAgIHNubXBsaWIvd2luc2VydmljZS5jLCBzbm1wbGliL3dpbnNlcnZpY2UubWMsCisgICAgICBzbm1wbGliL3dpbnNlcnZpY2UucmMsICBzbm1wbGliL3dpbnNlcnZpY2VyYy5yYywgc3RhbXAtaCwKKyAgICAgIHN0YW1wLWguaW4sIHRlc3RpbmcvTWFrZWZpbGUuaW4sICB0ZXN0aW5nL1JFQURNRSwKKyAgICAgIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvVC5jLCB0ZXN0aW5nL1QyLnNoLCAKKyAgICAgIHRlc3RpbmcvVEVTVENPTkYuc2gsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2UtbWQ1LCAKKyAgICAgIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMSwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLWRlcywgCisgICAgICB0ZXN0aW5nL2RhdGEua3VsLW1kNSwgdGVzdGluZy9kYXRhLmt1bC1zaGExLCB0ZXN0aW5nL2V0aW1ldGVzdC5jLCAKKyAgICAgIHRlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoLCB0ZXN0aW5nL2V2YWxfb25lc2NyaXB0LnNoLCAKKyAgICAgIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaCwgdGVzdGluZy9ldmFsX3Rlc3RsaXN0LCAKKyAgICAgIHRlc3RpbmcvZXZhbF90b29scy5zaCwgdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMsCisgICAgICB0ZXN0aW5nL21pc2N0ZXN0LmMsICB0ZXN0aW5nL3JmYzEyMTMvUkVBRE1FLCB0ZXN0aW5nL3JmYzEyMTMvcnVuLCAKKyAgICAgIHRlc3RpbmcvcmZjMTIxMy9zbm1wZnVuLnNoLCB0ZXN0aW5nL3JmYzEyMTMvdGVzdF9mdW4sIAorICAgICAgdGVzdGluZy9yZmMxMjEzL3Rlc3RtaWIxLnNoLCB0ZXN0aW5nL3JmYzEyMTMvdGVzdG1pYjIuc2gsIAorICAgICAgdGVzdGluZy9yZmMxMjEzL3Rlc3RtaWIzLnNoLCB0ZXN0aW5nL3NjYXBpdGVzdC5jLCAKKyAgICAgIHRlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2gsIHRlc3RpbmcvdGVzdF9rdWwuc2gsIAorICAgICAgdGVzdGluZy90ZXN0cy9TdHJhbnNwb3J0LCB0ZXN0aW5nL3Rlc3RzL1N2MWNvbmZpZywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2MmNjb25maWcsIHRlc3RpbmcvdGVzdHMvU3YzY29uZmlnLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYWdlbnQsIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZSwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ3RyYXBkLCB0ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcsIAorICAgICAgdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMDBjb25maWd1cmUsIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQsCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1LAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUywKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUywKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2LCB0ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MiwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsICB0ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwsICB0ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCAgdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0LAorICAgICAgdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0LCAgdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsLAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsICB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgIHRlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2ssIHRlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAsIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsLCB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzNjBkdGxzdWRwLCB0ZXN0aW5nL3Rlc3RzL1QzOTlhbGlhcywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LmNlcnQsIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5jZXJ0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLnByaXYsIHdpbjMyL0NvbmZpZ3VyZSwgCisgICAgICB3aW4zMi9FWEFNUExFLmNvbmYud2luMzIsIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIAorICAgICAgd2luMzIvTWFrZWZpbGUuaW4sIHdpbjMyL01nbXRBcGktd2luRXh0RExMLmgsIAorICAgICAgd2luMzIvU25tcC13aW5FeHRETEwuaCwgd2luMzIvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgsIAorICAgICAgd2luMzIvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgsIHdpbjMyL2FnZW50X21vZHVsZV9pbml0cy5oLCAKKyAgICAgIHdpbjMyL2J1aWxkLmJhdCwgd2luMzIvYnVpbGQucGwsIHdpbjMyL2NvbmZpZy5oLCAKKyAgICAgIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgCisgICAgICB3aW4zMi9kaXN0L1JFQURNRS50eHQsIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdCwgCisgICAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0NvbmZpZ3VyYXRpb25fT3ZlcnZpZXcuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0RldmVsb3Blcl9GQVEuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0ZBUS5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvSGVscF9DYXZlYXRzLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9JbnRyb2R1Y3Rpb24uaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL05ldC1TTk1QLmhoYywKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvTmV0LVNOTVAuaGhwLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvc25tcC5jb25mLndpbjMyLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9zbm1wZC5jb25mLndpbjMyLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9zbm1wdHJhcGQuY29uZi53aW4zMi5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaSwgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9TZXRFblZhci5uc2ksIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpLCB3aW4zMi9kaXN0L3NjcmlwdHMvY3JlYXRlLXRvYywgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL25ldC1zbm1wLXBlcmwtdGVzdC5wbCwgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvcG9kZGlyMmh0bWwsIHdpbjMyL2Rpc3Qvc2NyaXB0cy9yZWFkbWUyaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvdHh0Mmh0bWwsIHdpbjMyL2Rpc3QvdG9zb2NrMS5zaCwgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAKKyAgICAgIHdpbjMyL2luc3RhbGwtbmV0LXNubXAuYmF0LCB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYsIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluLCB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsCisgICAgICB3aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmLCAgd2luMzIvbG9jYWwvTWFrZWZpbGUuaW4sCisgICAgICB3aW4zMi9sb2NhbC9taWIyYy5iYXQsICB3aW4zMi9sb2NhbC9zbm1wY29uZi5iYXQsCisgICAgICB3aW4zMi9sb2NhbC90cmFwdG9lbWFpbC5iYXQsICB3aW4zMi9taWJfbW9kdWxlX2RvdF9jb25mLmgsCisgICAgICB3aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgsICB3aW4zMi9taWJfbW9kdWxlX2luaXRzLmgsCisgICAgICB3aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLAorICAgICAgd2luMzIvbm1ha2VwZXJsLmJhdCwgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvc25tcGQvc25tcGQuZHNwLCB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgCisgICAgICB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgCisgICAgICB3aW4zMi9zbm1wc21faW5pdC5oLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbiwKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwKKyAgICAgIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJkbGwuZHN3OgorCisgRml4IDUuNS54IGJyYW5jaCBzdHJ1Y3R1cmUgKHBhcnQgMikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk2NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jOiBwcm9wZXIgcHJvY2VzcworCisgc3RhdHVzIHZhbHVlcyBmb3IgbmV0YnNkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYzogcHJvcGVyIHByb2Nlc3MKKworIHN0YXR1cyB2YWx1ZXMgZm9yIG5ldGJzZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc2NhcGkuYzogY29uZGl0aW9uYWxpemUgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NjYXBpLmM6IGNvbmRpdGlvbmFsaXplIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaDogdGNwLW1pYi91ZHAtbWliCisKKyBzdXBwb3J0IGZvciB0aGUgKmJzZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmg6IHRjcC1taWIvdWRwLW1pYgorCisgc3VwcG9ydCBmb3IgdGhlICpic2RzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYzogdGNwLW1pYi91ZHAtbWliIHN1cHBvcnQgZm9yIHRoZSAqYnNkcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGM6IHRjcC1taWIvdWRwLW1pYiBzdXBwb3J0IGZvciB0aGUgKmJzZHMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jOiBQcm9wZXJseSBlbmQgZGVidWcgbWVzc2FnZSB3aXRoIG5ld2xpbmUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYzogUHJvcGVybHkgZW5kIGRlYnVnIG1lc3NhZ2Ugd2l0aCBuZXdsaW5lIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYzogcmVtb3ZlIHZhcgorCisgdGhhdCBzaGFkb3dzIHRoZSB1c2VmdWwgb25lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jOiByZW1vdmUgdmFyCisKKyB0aGF0IHNoYWRvd3MgdGhlIHVzZWZ1bCBvbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmM6IG1ham9yIGZpZGRsaW5nIHRvIGdldCB0aGluZ3Mgd29ya2luZworCisgZm9yIG9wZW5ic2QgdG9vLiBUaGlzIHNob3VsZCByZWFsbHkgYmUgcmV3b3JrZWQgdG8gdXNlIHRoZQorIHRjcC1taWIvdWRwLW1pYi9kYXRhX2FjY2VzcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmM6IG1ham9yIGZpZGRsaW5nIHRvIGdldCB0aGluZ3Mgd29ya2luZworCisgZm9yIG9wZW5ic2QgdG9vLiBUaGlzIHNob3VsZCByZWFsbHkgYmUgcmV3b3JrZWQgdG8gdXNlIHRoZQorIHRjcC1taWIvdWRwLW1pYi9kYXRhX2FjY2VzcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOiBmaXggdGNwIHN0YXRlcyBmb3IgZHJhZ29uZmx5YnNkCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOiBmaXggdGNwIHN0YXRlcyBmb3IgZHJhZ29uZmx5YnNkCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJLmg6IGVuYWJsZSBuZXcgdGNwL3VkcCBtaWJzIGZvciBzb2xhcmlzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43IC0+IFY1LjcuMS5wcmUxCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IGZpeCBDKysgY29tbWVudHMKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLAorICAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbTogVmVyc2lvbiBudW1iZXIgdXBkYXRlOgorCisgNS43LjEucHJlMQorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS50b3A6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5wcmUxCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgY2Y0Y2NlNGMxODljZjQ3ZjRjNDg5ZGI0M2I3ZmE1MTBmODkwNmExYSBNZXJnZTogZGY5MWE5ZgorCisgOTNlOTdkYyBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24KKyBBdWcgOCAyMjoxNToyOCAyMDExICswMTAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS02LXBhdGNoZXMnIGludG8KKworIFY1LTYtcGF0Y2hlcworCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgCisgICAgICB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOiBEZWZpbmUKKworIF9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04gdG9rZW4gKGFzIHBlciBBbGV4JyBidWlsZAorIGluc3RydWN0aW9ucykKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZGYxNmRjMjIyMWU5OTNkZDNjNjY2NTBkNWU4NzI1NzdmZmU2YzAxYiBNZXJnZTogNzE0YmM4MgorCisgOGU1YTI4ZCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMzo1Njo0MyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGZmYTA1YjA1MWFjM2UyYjE5NzE5NWE5OTg5Y2M3YTkxZmU4ZDkyODIgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyA4IDEzOjU1OjM4CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgNzE0YmM4MmZhMDFlMjFhMzY1NTgyNDk2M2ZhNTRlOWI4MDQyZmZiMCBNZXJnZTogNmZlOGZlNQorCisgM2VmMWRiNSBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24KKyBBdWcgOCAyMToyMTo0NiAyMDExICswMTAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCBiNDUxNjA3ZGNhMDE1YzExMWU5NmZkZmViMmRkYjA2NjFmYjRmNzI0IEF1dGhvcjogRGF2ZQorCisgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBNb24gQXVnIDggMjE6MjA6MzIgMjAxMQorICswMTAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDZmZThmZTUyOTRhNDViYzdlNGVhMzc1MWExYWQ3YWE0N2I1Y2FiYjIgTWVyZ2U6IDM2NGY4ZmYKKworIGY2OWFiZTMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAyMjowMjozOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGM5NDgxMzA0NGE0YzRhNjA4ZTk4ZTgwMjIzMDc1YzZmYWYwNGVlMTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDIxOjU2OjE1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMzY0ZjhmZmFlYjkwYjRlYjAxNjVmYzg1NTY4OGNkMDYyNjYzMjc5NCBNZXJnZTogMzI4NzI5NQorCisgN2FiYjkyNiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMToyNDoyNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTYtcGF0Y2hlcycgaW50bworCisgVjUtNi1wYXRjaGVzCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZGlzcGxheSB0aGUgYnJhbmNoIHdlJ2xsIGNvbW1pdCB0bworCisKKzIwMTEtMDgtMDggIFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMzg2NjMzOgorCisgZnJvbSB3dWxmMjAwMTogZml4IGludGVnZXIgb3ZlcmZsb3cgaW4gZGlzayBwZXJjZW50IGNhbGN1bGF0aW9ucyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODRhNzc1ZDA1NTdmZWE5NzU3MGU0MTcxNWEzMTY0OTcwYjRjMDNhMiBNZXJnZTogNmZmZjFjMQorCisgZDM3M2M0ZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDIwOjEyOjMyIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzODcxMzk6IGZyb20KKworIHlhYmVyYXVuZXlhOiBBdm9pZCBzZWdmYXVsdCBpZiB0cmFwc2VzcyB0cmFuc3BvcnQgZWxlbWVudCBjYW50IGJlCisgcGFyc2VkIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG5zc2ZwYXRjaGFwcGx5OiBzcGxpdCB0aGUKKworIGRpc3BsYXllZCBnaXQgY29tbWl0IGNvbW1hbmQgaW50byBtdWx0aXBsZSBzZWdtZW50cworCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzM4Njk2MToKKworIE1ha2UgU05NUCBHRVQgd29yayBpbiBhbiBBZ2VudFggc3ViYWdlbnQgaWYgd3JpdGUgc3VwcG9ydCBpcworIGRpc2FibGVkIHZpYSBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKE1hcmsgUnVzaykuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeCBhIGNyYXNoIHRoYXQgY291bGQgYmUKKworIHRyaWdnZXJlZCBieSBjYWxsaW5nIF9taWJpbmRleF9hZGQoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgbm90CisgZXF1YWwgdG8gLTEuCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDZmZmYxYzFhZTUxYjA2YzlkODBmYWYxNTM3M2E5NjNkMTczZjE0ZTggTWVyZ2U6IDgzN2M1MmUKKworIDhjYzkwMDQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6NTg6NTkgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4Y2E3ZmYxZTY5MmNhZWM0MTg2Yjc4OGM5YWUyZDI3YmUyMTMyOTBmIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgOCAxMDozMzo1NgorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjhmNTI5Y2JhMjdjMDExNGI0Y2I3MzQwY2ZkNDQ5NTA0ZmEwNzUwNiBNZXJnZTogMDgyMmYyZAorCisgNTU2ZTkzOCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDowNTozNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZml4IGZ1bmN0aW9uIG5hbWUgdHlwbworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI5ODgyYTA3OGE5NTlhMGY3OGIwM2UwMTk2OGYxZDE3YjdmNmEyOTkgTWVyZ2U6IDVlOWJkMmYKKworIDA0MDljMGEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6MDM6MzQgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZSBvZiBwdWxsL3B1c2gKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1ha2UgbnNwdWxsL25zcHVzaCBjaGVjayBmb3IgYQorCisgY2xlYW4gcmVwbworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG5ldyBmdW5jdGlvbiAibnNtYWtlYWxsIiB0byB0ZXN0CisKKyBidWlsZGluZyBvbiBldmVyeSBicmFuY2gKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBkZWZhdWx0IHRvIG1lcmdlCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNy1wYXRjaGVzJyBpbnRvCisKKyBWNS03LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6IENIQU5HRVM6IFdpbmRvd3M6IEF2b2lkIHRoYXQgaWYKKworIHRoZSBOZXQtU05NUCBQZXJsIG1vZHVsZXMgaGF2ZSBiZWVuIGJ1aWx0IHdpdGggYW5vdGhlciB2ZXJzaW9uIG9mCisgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gdGhhbiBBY3RpdmVQZXJsIHRoYXQgdXNpbmcgb25lIG9mIHRoZXNlIFBlcmwKKyBtb2R1bGVzIHRyaWdnZXJzIGEgIkZyZWUgdG8gd3JvbmcgcG9vbCIgY3Jhc2guIFRoaXMgcmVncmVzc2lvbiB3YXMKKyBjYXVzZWQgYnkgY29tbWl0IDNiMTRjNTljZjgyNzhkNDEwMjA3ZmY0MmRlYmRhMjYzNjQyNmE0NjggKHRoZQorIG5ldHNubXBfZnJlZSgpIGludG8gU05NUF9GUkVFKCkgY2hhbmdlcyBpbiB0aGUgKi54cyBmaWxlcykuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGUxMDk1Mzk5MzA3MDNjYjMwNTJkNTI0MWIxOGFjNmZjMDYyZmFhY2EgTWVyZ2U6IDBjOWI2Y2IKKworIGU0NmIxNzAgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAxODozNDoxMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeCBhIGNyYXNoIHRoYXQgY291bGQgYmUKKworIHRyaWdnZXJlZCBieSBjYWxsaW5nIF9taWJpbmRleF9hZGQoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgbm90CisgZXF1YWwgdG8gLTEuCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDdmNDJkMGQ5MzMyMDQ4NDE1MjI3MTQyN2NjOTgwOGNiZGE0OWJiZDAgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDA5OjUwOjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGM5YjZjYmU5ZGJlMmVjNTIxN2E5NWI2NzgxZmQ3ZGMxZjZlYmRhNyBNZXJnZTogZmE2Y2VmNQorCisgOTYzMzIwZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDE4OjE0OjM2IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTNiODY1NGEyMzJjNTYzYmM5N2NjOTkyNWNkOTg1OTBhMzBjNWJjNSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMTc6MjQ6MTggMjAxMSArMDIwMAorCisyMDExLTA4LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmYTZjZWY1Y2E5MWRmM2EwYjAzNDU1YjY4NTU5ZDJiZWUyNDgxMDFjIE1lcmdlOiBmNWZlNTM2CisKKyA4YWRkMGRhIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZworIDcgMTA6MTg6NTQgMjAxMSArMDIwMAorCisyMDExLTA4LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhMGRkM2NhZjI1OTI2ZTQzNDY1NzE4YmY0MTdhNDY0YzJmYjM2MzY2IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcgNyAxMDoxNzowMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IDMyIGlzIHRvbyBsaW1pdGVkIGZvcgorCisgYmlnZ2VyIHRhYmxlczsgaW5jcmVhc2UgdGhlIG1heCBtc2cgY291bnQgdG8gMTI4CisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbWFrZSByb2xsdXAgYW5kIHN5bmMgc3VwcG9ydAorCisgLS1yZWJhc2UgYW5kIGNoYW5nZSB0aGUgZGVmYXVsdCBiYWNrIHRvIG1lcmdlCisKKzIwMTEtMDgtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luMzI6IERvY3VtZW50ZWQgaG93IHRvIHVzZSBidWlsZC5iYXQgd2l0aAorCisgT3BlblNTTCBlbmFibGVkCisKKzIwMTEtMDctMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luZG93czogUmVtb3ZlIG91dGRhdGVkIGluc3RydWN0aW9ucyBhYm91dAorCisgZWRpdGluZyB3aW4zMlxsaWJzbm1wX2RsbFxsaWJzbm1wLmRlZiBmcm9tIFJFQURNRS53aW4zMgorCisyMDExLTA3LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbjMyOiBEb2N1bWVudCBob3cgdG8gYnVpbGQgNjQtYml0CisKKyBleGVjdXRhYmxlcyBmb3IgdGhlIHg2NC9hbWQ2NCBhcmNoaXRlY3R1cmUKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZjVmZTUzNmU4ZmQ2YzQ4ZmUyNDNkZWNkMzFmYWM5Y2YxYzkyZjRjYyBNZXJnZTogNzg1MGVhMQorCisgODA5MjhhOCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDE1OjEzOjI3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODA5MjhhODkwOWNmYWIzN2YwMWIzOWEwNzFhM2U4YWQ4NTk1NjIyMiBNZXJnZTogZjE2YTA5NAorCisgMGRiYzg2OSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEzOjU3OjMwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGRiYzg2OWZlYzA3ZDhlOTBkYmQxYzk1NDkzZWU3Y2JjNjIzYzk1YyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTI6NDA6MzEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQKKworIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLmRlZiBhbmQgcGVybC9TTk1QL3QKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODZjMWUyYjk2NzlmZWMyY2Q3OTliYTc2MDA1YzNkNjBlOWQ0NzYzNCBNZXJnZTogYmNkODYzNQorCisgZjE2YTA5NCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEyOjIwOjUwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMmY4ZDRmNTc5NmNiYzFjN2U5NjdhY2RhYTgwMTliMjRmMTUyMGEzNiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTI6MDI6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcyAtIHJldmVydCBjb21taXQKKworIGQyYzQ3NjhiZDJlZmI0ODY2NDQzNGE4MzE0MjVjMmRkYTg1ZDcxMzMgKENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENICisgMzM2MjIzMzogZnJvbSB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUKKyBub2lzZSkuCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmg6IAorCisgVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzIGJyYW5jaCAtIHdhcyBicm9rZW4gYnkgY29tbWl0CisgYmY3MTc4YjBiMjI1ODdkNDNkMWE4MGMyNjljZDIxNmJkNTkzMDIxNCAoYWdlbnQ6IGNoYW5nZSB0eXBlIG9mCisgc25tcF9lbmFibGVhdXRoZW50cmFwcyB0byBsb25nKQorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oOiBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMKKworIGJyYW5jaCAtIHdhcyBicm9rZW4gYnkgY29tbWl0CisgMGU2ODQyZmUwODBjZWM4NTNiMDhjZDIzMjMwMTVhYmFiYzM4MWNlMSAoQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSAorIDMzODM0NDE6IGZyb20gc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZgorIGZyZWVkIG1lbW9yeSkuCisKKzIwMTEtMDgtMDUgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IG1pbm9yIE5FV1MgcG9saXNoCisKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYmNkODYzNTA3MTM4MjI5NjNkMzc2ZWZmNTgyYTkyZjQzZTQyNmQ2YyBNZXJnZTogOWM4MTBhMworCisgN2EyMGY3MSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcKKyA1IDEwOjI4OjU1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgM2FhOTQ5ZmJkZmMxYTk0YTgzNDBhZDhiYWY4YjMxNDc1NmEwYmI5ZCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnIDUgMTA6MjY6MTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5YzgxMGEzYjM3YjY4NTczYzQwMzM3ZTI0NmUyZmFmMjk5Yjc3ZDMxIE1lcmdlOiA3MWNiMmU4CisKKyA2MTBkNjNmIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDEwOjQyOjA4IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOTQzOTMwZTFlMTI0Mzg1ZmQ5NDczOGI2ZGNkYTM3ZDI5ZGM3YWM3ZiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDQgMTA6NDE6NDEKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDRlZGNiODhkYWU4YjJlNTlkYzY4M2U4MGQ0MTRmYTdlY2VjMzY4ODUgTWVyZ2U6IDY1ZjNlZWYKKworIDJkZDllZDAgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMTA6MjQ6MTEgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS01LXBhdGNoZXMnIGludG8KKworIFY1LTUtcGF0Y2hlcworCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiYzVjYTAzYTA0YWIxOWM2MzRhMzRkMDYwYjBiMTZiNzQ4NGNiNTIwIE1lcmdlOiA4OGZkZGI3CisKKyA5MGMwZTc1IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTk6MTM6MDcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHVzbS5jOiBzbm1wdXNtOiBGaXggcmVjZW50bHkKKworIGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMS0wOC0wNCAgU3R1YXJ0IEhlbmRlcnNvbiA8dDBqdzJmdTBrbWdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbmV0YnNkLmM6IENIQU5HRVM6IG9wZW5ic2Q6CisKKyBQQVRDSCAzMzU3OTMyOiBmcm9tIHQwancyZnUwa21nOiBDbGVhbmluZyBpbiBtZW1vcnlfbmV0YnNkLmMgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jOiBDSEFOR0VTOiBhZ2VudDoKKworIFBBVENIIDMzODYxNDc6IGZyb20gd3VsZjIwMDE6IGZpeCBVQ0QtU05NUC1NSUI6OmRza1VzZWQgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQ3M2Q3ZTVjZDRkNDExYmJhMjBlYjg1MzU5ZDg3MjgwNjMzMDFjYmQgTWVyZ2U6IGE0ZThiNjIKKworIDg4ZmRkYjcgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6Mjg6MjIgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyMTAxYmIyZDdhZDZkYjAzOGM3NTVhYTkxOTNjOGFjZTBkYmQ0ZjU4IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgNCAwOToyODowNgorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogLmdpdGlnbm9yZTogaWdub3JlICoub3JpZyBhbmQgKi5yZWoKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGhlbHAgb3V0cHV0IGRlc2NyaWJlcyByZWJhc2UgdnMKKworIG1lcmdlIGJldHRlcgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmMTI2YTE3YzZhMzA2MzQ1NWE1MTE5NDBiMDIzMDQ3YWJkOWI0OGVlIE1lcmdlOiBhZDc2NWY0CisKKyA3N2E0Nzg0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI1OjE2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDUyZTE3MDdmMjA5ZWM0NWU3YzdmMmEzMDQwZWY1OTVmYjlkMWFmNiBNZXJnZTogZGM3NTVhNgorCisgYjM3MmU1YSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyNTowMyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFN0dWFydCBIZW5kZXJzb24gPHQwancyZnUwa21nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW4sIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkNC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2Q1Lmg6IENIQU5HRVM6IG9wZW5ic2Q6IFBBVENICisgICAgICAzMzU3OTI3OgorCisgZnJvbSB0MGp3MmZ1MGttZzogUmVjb2duaXNlIG9wZW5ic2Q1IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGZpeCB3aGVyZSBhcmd1bWVudHMgYXJlIHNldAorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogc3BsaXQgbnNzZnBhdGNoYXBwbHkgaW50byB0d28KKworIHBhcnRzOiBhcHBseSBhbmQgY29tbWl0aW5nCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogcGF0Y2ggdXNpbmcgLU4KKworCisyMDExLTA4LTA0ICBEYXZpZCBBcm5vbGQgPGRqYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9kZWZhdWx0X3N0b3JlLjMuYm90LCBtYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiwgCisgICAgICBtYW4vZml4cHJvYy4xLmRlZiwgbWFuL21pYjJjLmNvbmYuNS5pbiwgbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiwKKyAgICAgICBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsIAorICAgICAgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBidWxrZ2V0LjEuZGVmLAorICAgICAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGNvbmYuMS5kZWYsCisgICAgICBtYW4vc25tcGQuOC5kZWYsICBtYW4vc25tcGQuY29uZi41LmRlZiwgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCAKKyAgICAgIG1hbi9zbm1wZGVsdGEuMS5kZWYsIG1hbi9zbm1wZGYuMS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBuZXRzdGF0LjEuZGVmLCBtYW4vc25tcHNldC4xLmRlZiwgCisgICAgICBtYW4vc25tcHN0YXR1cy4xLmRlZiwgbWFuL3NubXB0YWJsZS4xLmRlZiwgbWFuL3NubXB0ZXN0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsIAorICAgICAgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLCBtYW4vc25tcHVzbS4xLmRlZiwgbWFuL3NubXB2YWNtLjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZjogQ0hBTkdFUzogbWFuOiBQQVRDSCAzMzEyODYxOiBmcm9tIGRqYTogTWFuCisgICAgICBwYWdlcworCisgaHlwaGVuLXZzLW1pbnVzIGNsZWFudXAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBEZXRlY3QgKGFuZCByZWplY3QpIE9wZW5TU0wKKworIDEuMC4wCisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3Igc2lsZW50CisKKyBpbnN0YWxsCisKKzIwMTEtMDgtMDQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBFbnN1cmUgV2luZG93cyBwYWNrYWdlCisKKyB1bmluc3RhbGxzIGNvbXBsZXRlbHkuCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDgxYzYzZmI1YzVlNGFiYjljMjlhY2E4OWJmOWQ2OTQ0MTAwODZlOTcgTWVyZ2U6IDRhNjkyMGEKKworIGRjNzU1YTYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDg6MzM6MzQgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6IGFkZGVkIHNwYWNpbmcgdG8gbWF0Y2ggdGhlIGxhdGVyIGJyYW5jaGVzCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6IHJlbW92ZWQgYWNjaWRlbnRpYWxseSBkdXBsaWNhdGVkIGNvZGUKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMyODogZnJvbSB5YWJlcmF1bmV5YToKKworIEFkZCBGcmVlQlNEIDkueCB0byBzdXBwb3J0ZWQgT1NlcyBsaXN0IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzI4OiBmcm9tIHlhYmVyYXVuZXlhOgorCisgQWRkIEZyZWVCU0QgOS54IHRvIHN1cHBvcnRlZCBPU2VzIGxpc3QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIHNubXBsaWIva2V5dG9vbHMuYywKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworIENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSCAzMzgzOTUxOiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggLVd1bnVzZWQKKyBjb21waWxlIHdhcm5pbmdzIHdpdGggRnJlZUJTRC9OZXRCU0QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIHNubXBsaWIva2V5dG9vbHMuYywKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworIENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSCAzMzgzOTUxOiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggLVd1bnVzZWQKKyBjb21waWxlIHdhcm5pbmdzIHdpdGggRnJlZUJTRC9OZXRCU0QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGU4NzhhYmJkYjE4MDhlZjgzZTBhODA3NDUzNmZiNTRlMTMyMTlhOGIgTWVyZ2U6IDQwM2RlNDIKKworIDg3OGZiZjQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTU6MDAgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyNTBhZmEwNjg5MmZkODk3YWMzMWUzODM2YTdmZmM5ZTJiNGNmN2I5IE1lcmdlOiAyYzE0YzFjCisKKyAzYWZjNWUwIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjUxOjMzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNTc4Y2Q3Y2NlMzUxYWU4ZDkwNGVjM2Q4MGJlOWJhNmQxZDQ4YTcxMiBNZXJnZTogMjU5ODhiZQorCisgZjNiYzU1MSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1MDo1NiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYXV0b2NvbmYKKworCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczogQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENICisKKyAzMzgzOTQ5OiBmcm9tIHlhYmVyYXVuZXlhOiBGaXggYXV0b2NvbmYgdGVzdHMgZm9yIHN5cy9tYnVmLmggU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogcHJvbXB0IGZvciBwYXRjaCBhbmQgYW4gYXJlYSwgYW5kCisKKyB1c2UgdGhlIHByb3BlciBDSEFOR0VTIGxpbmUgZm9ybWF0CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogVXNlIGZldGNoIC0tYWxsIGFuZCByZWJhc2UgYXMKKworIHN1Z2dlc3RlZCBieSBCYXJ0IGZvciBzcGVlZCBpbXByb3ZlbWVudHMKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZDZhMWE4OWU2ZjY0ODk1MWE5YjgzMTkzMmQzY2MyMzA4MjFmMmQzNyBNZXJnZTogZGNiNzEyZgorCisgODcyZTAxMyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDEyOjA2OjE4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNDQ5NjliNGU1N2MyNzE5NGU1YmQzNTdiYzQ1Mjc1ZmViODY5NWQyMiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDggMjA6NTI6MjUgMjAxMSArMDIwMAorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzogQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogSW52b2tlCisKKyBTbm1wVXRpbE9pZEZyZWUoKSBiZWZvcmUgU25tcFV0aWxPaWRDcHkoKS4gSXQncyBub3QgY2xlYXIgeWV0IHdoeQorIHRoZSBvcmlnaW5hbCBjb2RlIGRpZCBub3QgbWFrZSBzbm1wd2FsayB0cmlnZ2VyIGEgbWVtb3J5IGxlYWsuCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGRjYjcxMmZmYzg2YjMzNTgzMDAwZWY0YWU5YTUxY2VkMjVjZDE1YmYgTWVyZ2U6IGU4NWNmYTUKKworIDk4NjIzZWYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxMTozNjoxNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDhhMDFlYzY0MjNkNDAwYzRhMTNjY2FjNjhhMzc5MWQwMjE4YTA4ODUgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZyA0IDExOjE5OjE3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZTg1Y2ZhNTk5YjIzYjc2ZDk3OTEzYzk2YjVkNzAzYmZmNmJhNDk0NCBNZXJnZTogYjA1NmVlNgorCisgZTIxZWVmMiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDA4OjQ0OjQzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBDSEFOR0VTOiBhZ2VudDoKKworIEF2b2lkIHRoYXQgYSBNSUIgd2FsayBvbiB0aGUgaG9zdCByZXNvdXJjZXMgTUlCIHRyaWdnZXJzIGEgY3Jhc2ggb24KKyBGZWRvcmEgMTUKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYjA1NmVlNmViNTM5MDlhZDA0ZjE2ZWMyNmQyNjkwZDdhMDgzMTkyYSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnIDQgMDc6NTk6MDQgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjYworICAgICAgIGVzcy5jLCBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzCisgICAgICAgLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsIGFnZW50L3NubXBfYWdlbnQuYywgCisgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcHRscy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXBfZW51bS5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3NubXB1c20uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDoKKworIHBlcmw6IEVsaW1pbmF0ZSBkZWFkIHZhcmlhYmxlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBhZThlM2VjZDJkZjRjZjM3NjI1OTQ0YWRlZDFkZmU0NzM1ZDQ0ZWVhIE1lcmdlOiA3MzE4N2NlCisKKyA5MzM1ZTE5IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEF1ZyAzIDE0OjM3OjM2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNzk0ZjlhNjlkN2ViNjQyMjY4MjAwYjBhNGIxOTkxNTFkZWY2NmVkMCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgQXVnIDMgMTQ6MzY6MjUKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IFJlZW5hYmxlIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUKKyAgICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBSZWVuYWJsZSBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDctMTggIElseWEgWWFub2sgPHlhbm9rQGVtY3JhZnQuY29tPgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYzogYWdlbnQ6IGNoYW5nZQorCisgdHlwZSBvZiBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHRvIGxvbmcgVHlwZSBvZiBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHZhcmlhYmxlIGlzIGNoYW5nZWQgZnJvbSBpbnQgdG8gbG9uZy4KKyBUaGlzIGZpeGVzIHRoZSBidWcgd2l0aCB3cml0aW5nIHRvIHNubXBFbmFibGVBdXRoZW5UcmFwcyBpZiBzZXJ2ZXIKKyBpcyBjb21waWxlZCBmb3IgNjRiaXQgKHNubXBzZXQgcmVwb3J0cyB3cm9uZyBsZW5ndGgpLiBUaGlzIGJ1ZyB3YXMKKyBpbnRyb2R1Y2VkIGEgbG9uZyB0aW1lIGFnbyAoYnkgZmFlZWNkMCBjb21taXQpLiAgQWN0dWFsbHkgdGhpcyBpcyBhICdsZXNzIGVmZm9ydCcgdHlwZSBvZiBmaXggYnV0IEkgd29uZGVyIHdoeSB3ZQorIG5lZWQgYSBsb25nIHRvIHN0b3JlIGFuIElOVEVHRVIgaW4gdGhlIGZpcnN0IHBsYWNlPyBTaWduZWQtb2ZmLWJ5OiBJbHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4gU2lnbmVkLW9mZi1ieTogV2VzCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDZhZDdlMjhmZjllNWU0ZWJjMTM1OGVlMzljYzk3OTZhNDRhMWJlZTcgTWVyZ2U6IGYyODMyZTMKKworIDFlMTU0Y2UgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnCisgMyAxOToxNToyNCAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDYxYjE3OGYxZWU4OTUyYWEwM2FhM2IxYmE1MWY0YTY2NTVlNDdmMDEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZyAzIDE4OjA5OjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOiBXaGl0ZXNwYWNlLW9ubHkgY2hhbmdlOiBmaXggaW5kZW50YXRpb24KKworIG9mIGFuICNpbmNsdWRlIGRpcmVjdGl2ZQorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBwZXJsL05ldFNOTVAueHM6IENIQU5HRVM6IFBlcmw6IFJlbW92ZSBmaWxlIHBlcmwvTmV0U05NUC54cworCisgYmVjYXVzZSBpdCBicmVha3MgdGhlIFdpbmRvd3MgYnVpbGQuICBUbyBXZXM6IGlmIHlvdSBjYW4gdGVsbCBtZSBob3cgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHlvdSBvYnNlcnZlZAorIEknbGwgdHJ5IHRvIGZpbmQgYSBwb3J0YWJsZSBmaXguICBUaGlzIHJldmVydHMgY29tbWl0IGQ1NDg3MWY1MjkzNjc1YzgwNThlY2NlODhmZWQ1YjY0NmM4MzYzMjMgKCJBZGRlZAorIGEgYm9ndXMgZW1wdHkgLnhzIGZpbGUgZm9yIGJ1bmRsaW5nIG9uIG5ld2VyIHBlcmwgdGhhdCB3YW50cworICJzb21ldGhpbmciIikuCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBmNDg5YjE5OWFkYWI0OGIxNjMzZWJjYWY1ZmY1YTdjMjJjNGNiODkgTWVyZ2U6IGY0ZWFhMDIKKworIDcyYTU5YmMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgQXVnCisgMiAxMDoxMTo1MyAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDdmY2MwYjgwMzJmOGRhNWI3YmMzMDA1OWFmMGJhNjU2ZWFlNzEwOTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyAxIDE0OjExOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmM6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgaW4KKworCisgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMKKworMjAxMS0wOC0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGZpbGUgbmFtZXMgYW5kIHBhdHRlcm5zIGZvciBvdXRwdXQKKworIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIFdpbmRvd3MgYnVpbGQKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogU29ydCBhbHBoYWJldGljYWxseQorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBhcHBzL3NzaHRvc25tcAorCisKKzIwMTEtMDgtMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICAuZ2l0aWdub3JlLCBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC1jLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC14cy5pbmM6IFJlbW92ZSB0d28gZ2VuZXJhdGVkIFBlcmwgZmlsZXMuCisKKworMjAxMS0wOC0wMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjRlYWEwMmQ5YjA3NmE2N2Q3MjcyZGU3ZWVmOGU5ZGZiZjE4OWJiZiBNZXJnZTogNDAxMjVkOAorCisgYWRhZGNiOSBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMiAwMDo1Nzo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9uczogc3VwcHJlc3MgIm9rIiB0ZXN0IG91dHB1dCBpbiBuc2IKKworCisyMDExLTA4LTAxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDAxMjVkODUzOWNkODlmOTUyZmJjMjQ1ODhjNWU4MWU5Y2Q4MjFmZSBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyAxCisgMTM6NTg6MzMgMjAxMSArMDIwMAorCisyMDExLTA4LTAxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1YWNmMGQyY2ViMzk3Nzk2NGVkMzlmMDAzMDczYmE2NDEzOGMyZWJkIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBKdWwgMzEgMjM6NTc6NDEKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGE3NzIyYTgxZjljYjdhYTg2NzBlN2MyMzg2MDEzNjJhMzEwODdhY2MgTWVyZ2U6IDI0MmUxNzkKKworIGFlOWFjNmMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gSnVsCisgMzEgMDk6MTE6NDUgMjAxMSArMDIwMAorCisyMDExLTA3LTMxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NzaHRvc25tcC5jOiBGaXggYW4gaW5jb3JyZWN0IHNvdXJjZSBjb2RlIGNvbW1lbnQ6IHRoZXJlIGlzCisKKyBubyByZXF1aXJlbWVudCBpbiB0aGUgQU5TSSBDIHN0YW5kYXJkIHRoYXQgc3RhY2sgdmFyaWFibGVzIHNob3VsZCBiZQorIGluaXRpYWxpemVkIHRvIHplcm8uCisKKzIwMTEtMDctMzEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI0MmUxNzk3YjI2OTRhMDY4OTg1NmFlMzZkMDVkMzQxM2FhZjhkNzcgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEp1bCAzMSAwMTo0NDowOQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nCisKKyBnZXRhZGRyaW5mbygpIGFuZCBFQUlfRkFJTCAoZS5nLiBIUC1VWCAxMC4yMC8xMS4wMCkKKworMjAxMS0wNy0zMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMThkZjc1OWYxOWI5NzVjNDQ5ZDAxMGJiMGExNjIxMTliYjY4MzYwZCBNZXJnZTogNTRhNDRjYgorCisgNzA1MDcxOCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBKdWwKKyAzMCAxNjozOToxMyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDgyZDczZmIxMWJlM2FlMzFmMzljOWQ2MThkNTM4OGRjOWIxMDA2ZDcgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCAyOSAyMDo1MToyNyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IGF1dG9yZWNvbmYKKworCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBhdXRvcmVjb25mCisKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMTA5ZjY2OTRkNzg4ZjQ4ZWJkOWZjMGExZTkwYzQ1YWJjMzdiZWEyMCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTYXQgSnVsIDMwIDE0OjIyOjE5CisgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3ZDgxMDBlZWQ0NTlhMWZmMWEyMGMwNjczNjRmYTZjYjQ3NDkxMzA5IE1lcmdlOiAxMTZjMjRmCisKKyA5ZTQ3YWM0IEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgU2F0IEp1bCAzMCAwMDoyMDowMSAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9ucywgZGlzdC9uc2ItbmlnaHRseSwgZGlzdC9uc2ItcGFja2FnZTogbWlub3IgbnNiCisKKyBmaXhlcy9lbmhhbmNlbWVudHMgZnJvbSBteSBvbGQgc3ZuIHRyZWUKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMTE2YzI0ZjBmN2ZiM2Y5OWJhNjQ2NzMwZjYxYzU2ZDFhZTIzYmE0MSBNZXJnZTogOTgyZmI3ZgorCisgNGZjMGI4YiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwKKyAyOSAxMTozMToyMCAyMDExICswMjAwCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGM0ODE3M2MwNmE5ZWFhZGJmODFlNmI0OTYyZDU1ZWYwYTU0ZGIyNTEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCAyOSAxMDoyNzozOSAyMDExICswMjAwCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgbHRtYWluLnNoLCBtNC9saWJ0b29sLm00OiBSZXJ1biBhdXRvcmVjb25mCisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogU29ydCBhbHBoYWJldGljYWxseQorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBhcHBzL3NzaHRvc25tcAorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmM6IEZpeCB0d28gZmlsZW5hbWVzIGluIGhvc3QgbWliCisKKyBzb3VyY2UgY29kZSBjb21tZW50cy4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDk4MmZiN2ZkOGJhYjI1YzQzMjJhYTYyYzUwNDM3MDM2Y2UyOTZlM2UgTWVyZ2U6IDFlZGE2NzUKKworIDM0NTgxMjggQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEp1bCAyOCAxNjoyNDowMyAyMDExICswMjAwCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEZpeCBwb3RlbnRpYWwKKworIHNpZ3NlZ3Ygd2hlbiBhbiBpZlRhYmxlIGVudHJ5IGlzIHJlbW92ZWQgYXMgcmVzdWx0IG9mIGJvdGgKKyBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgYW5kIGludGVyZmFjZV9mYWRlb3V0IGF0IHRoZSBzYW1lIHRpbWUuCisKKzIwMTEtMDctMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc3NodG9zbm1wLmM6IE1ha2UgYXBwcy9zc2h0b3NubXAuYyBidWlsZCBhZ2FpbiAod2FzIGJyb2tlbiBieQorCisgY29tbWl0IDYxMjI0N2NkZjE0YzFlNzQ1YzM4NGNlZmUxZjNmZGUzZTQ0NWIzNDcgdGhhdCBjaGFuZ2VkCisgTVNHX05PU0lHTkFMIGludG8gTkVUU05NUF9OT1NJR05BTCkKKworMjAxMS0wNy0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMWVkYTY3NTNiN2ZlN2QzYjNmMjE3YzA5MjU0ZWMwMmQwZWUxZDBjZSBNZXJnZTogZGI4Yjg2MAorCisgYTJmOWVjZSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwKKyAyOCAxNTozMjoyOCAyMDExICswMjAwCisKKzIwMTEtMDctMjggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMTogCisKKyBDSEFOR0VTOiBzbm1wZDogUmVzdG9yZSBzdG9yYWdlIHRhYmxlcyBvbiBMaW51eAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IGludGVyZmFjZV9yZXBsYWNlX29sZCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX3JlcGxhY2Vfb2xkJyBvcHRpb24gdG8gcmVtb3ZlIG9sZCBlbnRyaWVzIGluCisgaWZUYWJsZSB3aGVuIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYWxyZWFkeSBleGlzaW5nIG9uZQorIGFwcGVhcnMuICBFLmcuIHJlbW92ZSBvbGQgcHBwMCBpbnRlcmZhY2Ugd2hlbiBuZXcgcHBwMCBzaG93cyB1cC4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCB0aGUgaW50ZXJmYWNlX2ZhZGVvdXQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEFsbG93IGlmVGFibGUKKworIGVudHJpZXMgdG8gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGFwcHJvcHJpYXRlIGludGVyZmFjZQorIGRpc2FwcGVhcnMgKGkuZS4gaW50ZXJmYWNlX2ZhZGVvdXQgPSAwIHdvcmtzIGFzIGV4cGVjdGVkKS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX2ZhZGVvdXQnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldAorIGxpZmV0aW1lIG9mIGlmVGFibGUgZW50cmllcyBvZiByZW1vdmVkIGludGVyZmFjZXMuICBQcmV2aW91cyBsaWZldGltZSB3YXMgaGFyZGNvZGVkIDUgbWludXRlcywgbm93IGl0J3MgY29uZmlndXJhYmxlLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZDYyYTBlYjkwNzBiNGQ4ZDlmZTJiY2ZkYjRkNTNkMzdlZjgxNGY5YiBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEp1bCAyOAorIDE0OjQ5OjA4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX3JlcGxhY2Vfb2xkJyBvcHRpb24gdG8gcmVtb3ZlIG9sZCBlbnRyaWVzIGluCisgaWZUYWJsZSB3aGVuIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYWxyZWFkeSBleGlzaW5nIG9uZQorIGFwcGVhcnMuICBFLmcuIHJlbW92ZSBvbGQgcHBwMCBpbnRlcmZhY2Ugd2hlbiBuZXcgcHBwMCBzaG93cyB1cC4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCB0aGUgaW50ZXJmYWNlX2ZhZGVvdXQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IEFsbG93IGlmVGFibGUKKworIGVudHJpZXMgdG8gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGFwcHJvcHJpYXRlIGludGVyZmFjZQorIGRpc2FwcGVhcnMgKGkuZS4gaW50ZXJmYWNlX2ZhZGVvdXQgPSAwIHdvcmtzIGFzIGV4cGVjdGVkKS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQ0hBTkdFUzoKKworIHNubXBkOiBhZGRlZCAnaW50ZXJmYWNlX2ZhZGVvdXQnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldAorIGxpZmV0aW1lIG9mIGlmVGFibGUgZW50cmllcyBvZiByZW1vdmVkIGludGVyZmFjZXMuICBQcmV2aW91cyBsaWZldGltZSB3YXMgaGFyZGNvZGVkIDUgbWludXRlcywgbm93IGl0J3MgY29uZmlndXJhYmxlLgorCisyMDExLTA3LTI4ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYXBwcy9zc2h0b3NubXAuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQKKyAgICAgIGZpeAorCisgZm9yIHN5c3RlbXMgbGFja2luZyBNU0dfRE9OVFdBSVQKKworMjAxMS0wNy0yNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmM6IENIQU5HRVM6IHNubXBkOiBNYWtlCisKKyBUQ1AtTUlCOjp0Y3BDdXJyRXN0YWIgd29yayBhZ2Fpbi4gV2FzIGJyb2tlbiBpbiA1LjcgYnkgdGhlCisgaW50cm9kdWN0aW9uIG9mIHRoZSAiZmVhdHVyZXMiIGZlYXR1cmUuCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmYjg4MDc0ZmJiYzI2OGM3ZjA1MDk0OTE1MzVhZWM1ZmVjYjA1Njg0IE1lcmdlOiBhNzQzYWU1CisKKyAzODIxMjczIEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBKdWwgMjcgMTQ6NDc6MjUgMjAxMSArMDIwMAorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMzFmYTA3Y2Q5ZmZkZTQ2ZDQxZDJiNTgzOGMzZmM0ZDAxNTQ4YmZiNSBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1bCAyNworIDE0OjQ1OjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IENIQU5HRVM6IHNubXBkOiBydW4gc2lnbmFsIGhhbmRsZXJzIHdoZW4gc2VsZWN0KCkKKworIGlzIGludGVycnVwdGVkLiAgVGhpcyBiZWhhdmlvciBpcyBpbmRpY2F0ZWQgaW4gY29tbWVudCBvbiBsaW5lIDEyNDQsIGJ1dCBpdCB3YXMgbm90CisgYWN0dWFsbHkgZG9uZS4KKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMmU5NDY2ZDdmNTlkNjVkMDUwMjc3NzM1ZTRlZDlkMzA3MTlmZjc1MiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDI2IDEzOjEwOjA0IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNzcwODI5Njc2MGVhZjVhODBkODU0MDc0NmM5YzI0OTgyNmZkMWJmZSBNZXJnZTogZWExMWU1ZQorCisgY2Q2ZTM4MiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAyNiAxNjoyMTo0MSAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzogQ2xhcmlmeSBhbiBJUHY2IHNvdXJjZSBjb2RlIGNvbW1lbnQKKworCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMzogU3BlbGxpbmcgZml4OgorCisgZGVmaW5lZHkgLT4gZGVmaW5lZAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjM6IFNwZWxsaW5nCisKKyBmaXg6IGFsZXZpYXRlIC0+IGFsbGV2aWF0ZQorCisyMDExLTA3LTI2ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZGQyYzQ3MTMzNDkzZDVhMDBkZTZiM2NkYmNmYWM3ZTlkNDRiNmZmZSBNZXJnZTogZjljY2JjNworCisgZWExMWU1ZSBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgSnVsIDI2IDE0OjI1OjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGM1YTg0NjRjNDJhOTRjMjUwZWUyZGZhMmE0NzMxMDlhNzM0MjAzZDggQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMjYKKyAxNDoyNDo1NSAyMDExICswMjAwCisKKzIwMTEtMDctMjUgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmOWNjYmM3NzI2NjYxMzRkMWQxNzhiNTA1YWY5ZGRjZGQ5ZWQ0MjQ0IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gSnVsIDI1CisgMTU6MDI6MTUgMjAxMSArMDIwMAorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiMGMwYTM1NWQ1ZjYwMWExMWJlNDkxNGZiZjcxMzcxNmFiZDMwYTI5IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMTkKKyAxODozNjoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGMxNGZjMzg2MTRiYWYxMGQ1MTcxMzZmMDQ4MDkwN2I3ZjAzZDhkNzQgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1bCAyMAorIDEzOjQ0OjU5IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYzogcmVtb3ZlIGJyb2tlbiB3aGl0ZXNwYWNlIGxpbmVzIHRoYXQKKworIGxlYWRzIHRvIHJlYWRpbmcgY29uZnVzaW9uCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGViZGQyMTZjMDc0YmY0MWNkM2EwODRiZDE0Njg5Y2YwMWM4ODdiMzEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAxOQorIDE4OjM2OjExIDIwMTEgLTA3MDAKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogLmdpdGlnbm9yZTogdXBkYXRlZCBnaXRpZ25vcmUgdG8gaWdub3JlIGEgbnVtYmVyIG9mIGF1dG8tZ2VuZXJhdGVkCisKKyBmaWxlcworCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jOiByZW1vdmUgYnJva2VuIHdoaXRlc3BhY2UgbGluZXMgdGhhdAorCisgbGVhZHMgdG8gcmVhZGluZyBjb25mdXNpb24KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZGY1ZjcwMDU1Y2Y5YmUzM2YwNWZiNTBhYmUyZjVhODFlYWMwOTJhZCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDE5IDExOjA3OjE5IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZjU5NmYxODI0MmRjZGZkNmNmNDljODhkYTFkODM2YzE2ZTI2MGNhYyBNZXJnZTogMGYzMDliNAorCisgNzBkZWU0YiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAxOSAxMTozMzoyOCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDoKKyAgICAgIDMzNjk2ODA6CisKKyBmcm9tIElseWEgWWFub2s6IGNoYW5nZSBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIGZyb20gaW50IHRvIGxvbmcgc3VjaAorIHRoYXQgbW9kaWZ5aW5nIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QgZG9lcyBub3Qgb3ZlcndyaXRlCisgbWVtb3J5IGluIDY0LWJpdCBidWlsZHMuCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMzNzA2NDU6CisKKyBmcm9tIEJpbGwgRmVubmVyOiBGaXggQWdlbnRYIHN1YmFnZW50IGZvdXIgYnl0ZSBsZWFrCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczogZG8KKworIG5vdCBpbnZva2UgSVNSVU5OSU5HKCkgb24gTWluR1cuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczoKKworIGNsZWFudXAgLSByZW1vdmUgY29kZSB0aGF0IGJlY2FtZSBzdXBlcmZsdW91cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogTWluR1c6IERvIG5vdAorCisgYXNzdW1lIHRoYXQga2lsbC5leGUgcmVwb3J0cyB2aWEgaXRzIGV4aXQgc3RhdHVzIHdoZXRoZXIgdGhlCisgc2lnbmFsbGVkIHByb2Nlc3Mgc3RpbGwgZXhpc3RzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgUmVtb3ZlIHRoZSBmdW5jdGlvbiBXQUlUT1JESUUoKSBmcm9tIHNpbXBsZV9ldmFsX3Rvb2xzLnNoIHNpbmNlIGl0CisgaXMgbmV2ZXIgaW52b2tlZC4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFNpbXBsaWZ5IFdBSVRGT1IoKSBpbiBzaW1wbGVfZXZhbF90b29scy5zaC4gVGhlIGNvZGUgdGhhdCBoYW5kbGVkCisgaW52b2NhdGlvbiBvZiBXQUlURk9SKCkgd2l0aCB6ZXJvIG9yIG9uZSBhcmd1bWVudHMgaGFzIGJlZW4gZHJvcHBlZAorIHNpbmNlIFdBSVRGT1IoKSBpcyBhbHdheXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzczoKKworIG1pbm9yIHNpbXBsaWZpY2F0aW9uLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOiBDSEFOR0VTOgorCisgdGVzdGluZzogU2tpcCB0ZXN0IDU5IGlmIFNJR0hVUCBpcyBub3Qgc3VwcG9ydGVkLiBNYWtlcyB0ZXN0IDU5IHBhc3MKKyBvbiBNaW5HVy4KKworMjAxMS0wNy0wNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogTWluR1cgZml4CisKKworMjAxMS0wNy0wNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBmcmFtZXdvcmsKKworIHJlZmFjdG9yaW5nOiBJbnRyb2R1Y2UgV0FJVEZPUk5PVENPTkQoKS4KKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIE1ha2UgU1RPUFBST0cgc2VuZCBTSUdURVJNIHJlcGVhdGVkbHkuIFRoaXMgZml4ZXMgYSByYWNlIHdoZXJlCisgU0lHVEVSTSBjb3VsZCBiZSBzZW50IGJlZm9yZSB0aGUgU0lHVEVSTSBzaWduYWwgaGFuZGxlciB3YXMgc2V0IHVwLAorIGVzcGVjaWFsbHkgd2hlbiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIFZhbGdyaW5kLgorIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgdGhlIFNOTVBfVkVSQk9TRT0xIG91dHB1dCBldmVuIG1vcmUgdmVyYm9zZS4KKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzCisKKyByZWZhY3RvcmluZzogaW50cm9kdWNlIEVDSE9TRU5EU0lHVEVSTSgpIGFuZCBFQ0hPU0VORFNJR0tJTEwoKQorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBGaXggYSBidWcgaW4KKworIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2ggdGhhdCB3YXMgaW50cm9kdWNlZAorIGluIGNvbW1pdCA5MzhkNzVjLgorCisyMDExLTA3LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBJZ25vcmUgKi5leGUgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBXaW4zMgorCisgYnVpbGQKKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFRlc3Qgb25seSBvbmNlIGR1cmluZyBhIHRlc3Qgd2hldGhlciB0aGUgc2hlbGwgc3VwcG9ydHMgc3ViLXNlY29uZAorIHNsZWVwaW5nIGluc3RlYWQgb2YgcmVwZWF0ZWRseS4KKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOiBDSEFOR0VTOiB0ZXN0aW5nOiBDaGFuZ2VkCisKKyBkZWZhdWx0IHRpbWVvdXQgZnJvbSAxcyB0byAxMHMgd2hlbiB0aGUgcmVncmVzc2lvbiB0ZXN0cyBhcmUgcnVuCisgdW5kZXIgVmFsZ3JpbmQKKworMjAxMS0wNy0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIEFmdGVyIGhhdmluZyBzZW50IFNJR1RFUk0gdG8gc25tcGQgb3Igc25tcHRyYXBkLCB3YWl0IHVudGlsIHRoZQorIHByb2Nlc3MgaGFzIHN0b3BwZWQgYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhpcyByYWNlIGNvbmRpdGlvbiB3YXMKKyBoaXQgbW9zdCBlYXNpbHkgd2hlbiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIFZhbGdyaW5kLgorIENIQU5HRVM6IHRlc3Rpbmc6IENoZWNrIFBJRCBmaWxlIGV4aXN0ZW5jZSBhZnRlciBoYXZpbmcgcmVhZCBpdAorIGluc3RlYWQgb2YgYmVmb3JlLiBUaGlzIGZpeGVzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGZpbGUKKyBkaXNhcHBlYXJlZCBhZnRlciB0aGUgZXhpc3RlbmNlIGNoZWNrIGFuZCBiZWZvcmUgaXQgd2FzIHJlYWQuCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKworIGludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisgdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIFRoaXMgcGF0Y2ggaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHRvIFY1LjYgU1ZOIHBhdGNoZXM6IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGYzMDliNDkzYzIxZDNjNjkxNDQ4NzUxNGI0MTU2MDc1NGZmY2RmOSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsIDE5IDA4OjM3OjUwIDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMWI3NDU0YmMyODE1Njg0NzBhMTMwMDQ3NmQyZWRiNGY0MTFlNjAyOSBNZXJnZTogOGQ5ZGNjOAorCisgNjkwZWE3ZCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwKKyAxOSAwODozMToyOCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6IENIQU5HRVM6IHNubXB0cmFwZDogQWRkIG1pc3NpbmcgbmV3bGluZQorCisgY2hhcmFjdGVyIGluIGEgbG9nIG1lc3NhZ2UKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzogQ0hBTkdFUzogc25tcHRyYXBkOiBJbnZva2Ugc2h1dGRvd25fcGVybCgpIHdoZW4KKworIHNodXR0aW5nIGRvd24KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOiBTcGVsbGluZyBmaXg6IGJyYW5rZXQgLT4gYnJhY2tldAorCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogUnVuIGF1dG9yZWNvbmYuCisKKyBGaXhlcyBidWlsZCBicmVha2FnZSBjYXVzZWQgYnkgcGF0Y2gKKyBkNTg4ZWM4NTNiZDA1MzFmMjEyZmNiZjUxYjk2MmI5NmM2ODI4YjU5IChSUE0gNC45IHN1cHBvcnQpCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGQ2MTdkODRmODNmYTY5ZWQ5ZmE5Zjk4ZWZjNGFmYWY4ODBkMTIxZjIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bCAxNCAxNjo0Mzo0NyAyMDExICswMjAwCisKKzIwMTEtMDctMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogTWFrZQorCisgbmV0c25tcF9pcHY2X2ZtdGFkZHIoKSBzaG93IHRoZSBJUHY2IHNjb3BlIElECisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBBZGQgc3VwcG9ydAorICAgICAgZm9yCisKKyBJUHY2IGFkZHJlc3Mgc2NvcGUgSUQKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBSdW4gYXV0b3JlY29uZgorCisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGE1NjcyMWEzZTc3NTRlMzg5ZGFhN2U4YTNkNTc5Mjg5OWVkYzlkZTMgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bCAxNCAxNjoxODozMiAyMDExICswMjAwCisKKzIwMTEtMDctMTUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDg0NGQ0Y2U4NjdiZjNhYmU3Yjc1MzZjNWRiZmJhNDAxOTM3YThkNGEgTWVyZ2U6IGVlZDAxOTgKKworIDYxMDM2YTggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBGcmkgSnVsIDE1IDE1OjMzOjEwIDIwMTEgLTA3MDAKKworMjAxMS0wNy0xNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODUxYmNmNTNmY2QxM2NkZjBiYTlmMTJlNWQ2MDNlNzNmOGJiOTYxMSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBGcmkgSnVsIDE1CisgMTU6MzI6NDkgMjAxMSAtMDcwMAorCisyMDExLTA3LTE0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogZml4IGEgdHlwbworCisKKzIwMTEtMDctMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QGxvY2FsaG9zdD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IHNubXBsaWI6ICB0d2VhayBwYXRjaCAzMDQ0ODg4IHRvIHJlc3RvcmUKKworIHByb3BlciBub24tZXJyb3IgcmV0dXJuIGR1cmluZyBtaWIgbG9hZGluZworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGFkZGVkIDUuNyBwYXRjaGVzIHRvIHRoZSBicmFuY2ggbGlzdCBhbmQgZml4IHRoZSByZWxlYXNlIGZpbGUKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGFkZGVkIDUuNyBwYXRjaGVzIHRvIHRoZSBicmFuY2ggbGlzdAorCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcmVsZWFzZTogYSBjb3B5IG9mIHRoZSByZWxlYXNlIGZpbGUgYXBwbGllZCB0byB0aGUgb2xkZXIKKworIGJyYW5jaGVzCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgNS43IHBhdGNoZXMKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjNDMxMjMxZThmMGEzOWQxOTUwYmM3MmMzMmUzNDAyZjkwZmE4MDMwIE1lcmdlOiA1NmZlZTQwCisKKyBhMmFjMjRkIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEp1bCAxMSAxOTozMzoxNyAyMDExIC0wNzAwCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb3B5IG9mIHRoZQorCisgc2hlbGwtZnVuY3Rpb25zIHRvIHRoZSBvbGRlciBicmFuY2gKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9yZWxlYXNlOiBhIGNvcHkgb2YgdGhlIHJlbGVhc2UgZmlsZSBhcHBsaWVkIHRvIHRoZSBvbGRlcgorCisgYnJhbmNoZXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMyAtPiBWNS43CisKKzIwMTEtMDctMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNworCisKKzIwMTEtMDctMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBSZXZlcnQgImZpeCBkdGxzdWRwCisKKyB0cmFuc3BvcnQgYWRkcmVzcyBmb3JtYXQgZnVuY3Rpb24iIFRoaXMgcmV2ZXJ0cyBjb21taXQgMmFiM2E2ZTZmMmZjYzFmZjNlNWYwZmI1ZGM1ZDA1ZTQ5ODgyMGQ4OS4gICAtIGZvciBzb21lIHJlYXNvbiBJIHNhdyAncmMnIGFuZCBteSBicmFpbiBpbnRlcnByZXRlZCBpdCBhcyAgICAncHJlLXJlbGVhc2UnLiBXaGF0IGNhbiBJIHNheSwgaXQgd2FzIGxhdGUuIDotLworCisyMDExLTA3LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogZml4IGR0bHN1ZHAgdHJhbnNwb3J0CisKKyBhZGRyZXNzIGZvcm1hdCBmdW5jdGlvbiAgLSB1cGRhdGUgaXB2NCBmbXRhZGRyIHRvIGhhbmRsZSBzb2NrYWRkciBhbmQgdG8gY2hlY2sgICAgc2l6ZSBiZWZvcmUgYXNzdW1pbmcgZGF0YSBpcyBhZGRyIHBhaXIgIC0gbW92ZSBkdGxzdWRwIGZ1bmN0aW9ucyB0byBleHRyYWN0IGFkZHIocykgdG8gdGxzYmFzZQorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogZml4IHRhZyBwdXNoaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzIgLT4gVjUuNy5yYzMKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwKKwlkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LnJjMworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHJlbW92ZSB1bm5lZWRlZCBjb21tZW50CisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogbWlzYyBwdWJsaWNhdGlvbiBmaXhlcyBmb3VuZCB3aGlsZQorCXB1Ymxpc2hpbmcKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHJhbiBhdXRvaGVhZGVyIHRvIGFkZCB0aGUKKwltaXNzaW5nIHRlbXBsYXRlIGlmZGVmcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMxIC0+IFY1LjcucmMyCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogdXNlIHRoZSBuZXcgcnVuLWF1dG9jb25mIHNjcmlwdAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9ydW4tYXV0b2NvbmY6IEEgc2NyaXB0IHRvIGludm9rZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZQorCWF1dG9jb25mIHRvb2wKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiByZW1haW5pbmcgY29tbWFuZCBsaW5lIGNoYW5nZXMgZm9yIHN2biAtPgorCWdpdAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IG1ha2UgdGhlIGJyYW5jaCBlY2hvIG91dHB1dCBhbmQgc3ZuIHVwZGF0ZQorCWNvbnZlcnRlZCB0byBnaXQgZXF1aXZhbGVudHMKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBwdWxsIHRoZSBicmFuY2ggaW5mbyBmcm9tIGdpdAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9yZWxlYXNlOiBub3RlZCB0aGF0IHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGluIHJjIHN0YXRlCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisJKiBGQVE6IE1lbnRpb24gdGhlIEdpdCB3aWtpIHBhZ2UKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogdXNlIGdpdCBtZXJnZSB3aXRoIHRoZSAtLWxvZworCW9wdGlvbgorCisyMDExLTA2LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworCSogLmdpdGlnbm9yZTogQWRkIC5naXRpZ25vcmUKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKwkqIEZBUTogV2UncmUgbm93IHVzaW5nIGdpdCEKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogdXNlIHJlYmFzZSB0byBwdXQgbG9jYWwgY2hhbmdlcyBhdAorCXRoZSB0b3Agb2YgdGhlIHJlbW90ZSBicmFuY2hlcyBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgZmVhdHVyZSB0byBub3Qgcm9sbAorCWJyYW5jaGVzIGN1cnJlbmx5IGluIHJjIHBoYXNlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBuc3JvbGx1cCBmdW5jdGlvbiBmb3IKKwlyb2xsaW5nIGJyYW5jaGVzIHVwd2FyZC4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogY3JlYXRlZCBhbiBuc3BhdGNoYXBwbHkgZnVuY3Rpb24KKwl0byBhcHBseSBhIHByZXZpb3VzbHkgdGVzdGVkIHBhdGNoIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBuc3RyeXBhdGNoIGZ1bmN0aW9uIHRvCisJdGVzdCBwYXRjaCBhcHBsaWNhdGlvbiBhZ2FpbnN0IHZhcmlvdXMgYnJhbmNoZXMgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCB2ZXJib3NlIG91dHB1dCBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1vcmUgcHJlZml4IGNoYW5nZXMgYW5kIGJldHRlcgorCXNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiB1c2UgbnMgcHJlZml4ZXMgaW5zdGVhZCBvZiBnZW5lcmljCisJc25tcCBwcmVmaXhlcyBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IAorCU1pc3NpbmcgY2hlY2sgZm9yIHJwbXRzLmggZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogY29uZmlndXJlOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKKwltYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCisJbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKKwltYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCisJbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAorCW1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKKwltYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCisJbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKKwltYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAorCW1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAorCW1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAorCW1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCisJbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCisJbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAorCW1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKKwltYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKKwltYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKKwltYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKKwltYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCisJbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKKwltYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAorCW1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAorCW1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKKwltYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCisJbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisJbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywKKwltYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAorCXNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKKwlpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBUd2VhayBSUE0gaGFuZGxpbmcgdG8gd29yaworCXdpdGggbGlicmFyeSB2ZXJzaW9uIDQuOSBCYXNlZCBvbiBhIHBhdGNoIGJ5IEphbiBTYWZyYW5layBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOiBQcm92aWRlIGEgZnJhbWV3b3JrIGZvciByZWFkaW5nCisJUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeSAocmF0aGVyIHRoYW4gcXVlcnlpbmcKKwl0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisJZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogY29uZmlndXJlOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCisJc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsCisJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKwlmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorCShyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisJZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsCisJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKwlmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorCShyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisJZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsCisJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKwlmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorCShyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisJZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDUxMTogcmVhbGx5IHVzZQorCXRoZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmljYXRpb24uICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZvbGxvdy11cCBmb3IgcjIwNTExOiByZWFsbHkgdXNlCisJdGhlIHByb3BlciBmb3JtYXQgc3BlY2lmaWNhdGlvbi4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisJaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKwl0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKwlpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorCXR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IFVzZSAlcCB0byBwcmludCBhIHBvaW50ZXIgaW5zdGVhZAorCW9mICVsZCBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IFVzZSAlcCB0byBwcmludCBhIHBvaW50ZXIgaW5zdGVhZAorCW9mICVsZCBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucHJlMiAtPiBWNS43LnJjMQorCisyMDExLTA2LTEzIDE2OjExICBoYXJkYWtlcgogCiAgICAqIGNvbmZpZ3VyZToKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICBydW4gY29ycmVjdCB2ZXJzaW9uIG9mIGF1dG9jb25mCiAKLTIwMTEtMDYtMjQgMTI6MDggIGR0czEyCisyMDExLTA2LTEzIDE2OjEwICBoYXJkYWtlcgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDExLTA2LTI0IDEyOjAyICBkdHMxMgotCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CiAKICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQogCi0yMDExLTA2LTIzIDE1OjQxICBkdHMxMgorMjAxMS0wNi0xMyAxNjowNCAgaGFyZGFrZXIKIAotICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorICAgKiBjb25maWd1cmU6CiAKLSAgIFR3ZWFrIFJQTSBoYW5kbGluZyB0byB3b3JrIHdpdGggbGlicmFyeSB2ZXJzaW9uIDQuOQotICAgQmFzZWQgb24gYSBwYXRjaCBieSBKYW4gU2FmcmFuZWsKKyAgIHJhbiBhdXRvY29uZgogCi0yMDExLTA2LTIyIDE0OjI3ICBkdHMxMgorMjAxMS0wNi0xMCAwNjowMyAgbmJhCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlczoKIAotICAgUHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tCi0gICBhIGNhY2hlIGRpcmVjdG9yeSAocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4KKyAgIEZpeCBidWlsZCBvZiBzbm1wdXNtIHdoZW4gYWRkaXRpb25hbCBzZWMgbW9kdWxlcyByZXF1ZXN0ZWQKKworMjAxMS0wNi0wOSAyMToxMyAgbmJhCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgSW5jbHVkZSBzdGTniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy09YCSkWIuaCB0byBtYWtlIGRtYWxsb2MgaGFwcHkKKworMjAxMS0wNi0wOSAxNDozNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBDSEFOR0VTOiBCVUc6IDMxNTE4NDU6IGZpeCBtdWx0aXBsZSByZWdpc3RyYXRpb25zIG9mIHNubXAKKyAgIHRyYW5zcG9ydCBoYW5kbGVyCisKKzIwMTEtMDYtMDggMTY6MzQgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jOgorCisgICBtb3JlIGRuc3NlYyB0d2Vha3MKICAgIAotICAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCi0gICBmdW5jdGlvbmFsaXR5LgorICAgLSBjcmVhdGUgYW4gYXBwLWdsb2JhbCB2YWxpZGF0b3IgY29udGV4dCBmb3IgdXNlIHdpdGggYWxsCisgICB2YWxpZGF0aW9uIHJvdXRpbmVzLiBtYWlubHkgdXNlZnVsIGZvciBsb25nLWxpdmVkIGFwcHMuCisgICAtIHVzZSB0aGUgYXBwdHlwZSBhcyB0aGUgdmFsaWRhdG9yICdzY29wZScsIGFsbG93aW5nCisgICBmb3IgYXBwLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2YgdmFsaWRhdGlvbiB2aWEgbGlidmFsJ3MKKyAgIGRuc3ZhbC5jb25mCiAKLTIwMTEtMDYtMTcgMTk6MDYgIGJ2YXNzY2hlCisyMDExLTA2LTA3IDE2OjQ4ICByc3RvcnkKIAotICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDoKIAotICAgVXNlICVwIHRvIHByaW50IGEgcG9pbnRlciBpbnN0ZWFkIG9mICVsZAorICAgYWRkIGEgbWF4IGRlZmluZSBmb3IgZWFjaCBkZWZhdWx0IHN0b3JlIHR5cGUKKyAgIAorICAgbm90IGFjdHVhbGx5IHVzZWQsIGp1c3QgYSBoZWxwZnVsIHJlbWluZGVyIGZvciB0aG9zZSBhZGRpbmcKKyAgIG5ldyBpZHMgd2hvIG1pZ2h0IG5vdCB0aGluayB0byBjaGVjayBORVRTTk1QX0RTX01BWF9TVUJJRFMuCisgICAodGhlIGJvb2wgbGlzdCBpcyByYXBpZGx5IGFwcHJvYWNoaW5nIHRoZSBjdXJyZW50IGxpbWl0LikKIAotMjAxMS0wNi0wMSAxNTo1NyAgZHRzMTIKKzIwMTEtMDYtMDcgMTY6NDYgIHJzdG9yeQogCi0gICAqIENIQU5HRVM6CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIG1lbnRpb24gYnVpbGRkaXIgd2hlbiBjb21wbGFpbmluZyBhYm91dCBub3QgYmVpbmcgcnVuIGZyb20gc291cmNlCisgICB0cmVlCiAKLTIwMTEtMDYtMDEgMTU6NDggIGR0czEyCisyMDExLTA2LTAxIDIyOjI0ICBoYXJkYWtlcgogCi0gICAqIENoYW5nZUxvZzoKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzMxMDI1MDogZnJvbSBmZW5uZXI6IG1pc2MgZml4ZXMgZm9yCisgICBkZWJ1Z2dpbmcgb3V0cHV0IG9mIGFnZW50eAogCi0yMDExLTA2LTAxIDE1OjQ3ICBkdHMxMgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNiAtPiBWNS43LnByZTIKKworMjAxMS0wNS0xMCAwMDoyMCAgaGFyZGFrZXIKIAogICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKICAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCkBAIC0xMDcsMTk3ICszMDIzNyw1NiBAQAogCiAgICBtYWtlIGRlcGVuZAogCi0yMDExLTA2LTAxIDE1OjQyICBkdHMxMgorMjAxMS0wNS0xMCAwMDoyMCAgaGFyZGFrZXIKIAotICAgKiBwZXJsL1NOTVAvU05NUC54czoKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CiAKLSAgIFJlaW5zdGF0ZSBhbiAidW51c2VkIiBsYWJlbCB0aGF0IGlzIGFjdHVhbGx5IHN0aWxsIHJlcXVpcmVkLgotICAgKHJlZmVyZW5jZWQgaW4gbGluZSAyNzEwKQorICAgQysrIC0+IEMgY29tbWVudHMKIAotMjAxMS0wNi0wMSAxNTozMiAgZHRzMTIKKzIwMTEtMDUtMTAgMDA6MTcgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorICAgKiBORVdTOgogCi0gICBGaXggdHlwbworICAgTkVXUyB1cGRhdGUgZm9yIDUuNwogCi0yMDExLTA2LTAxIDE1OjA4ICBkdHMxMgorMjAxMS0wNS0wOSAyMzoxNCAgaGFyZGFrZXIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgcmV2ZXJ0IHRoZSBvaWQgdHlwZWRlZiByZXNpemluZyBmcm9tIHIxNzgwOSBiZWNhdXNlIGl0IGJyb2tlCisgICBiYWNrd2FyZHMgY29tcGF0LCBhcyBwb2ludGVkIG91dCBieSB1c2VycyBvbiB0aGUgLWNvZGVycyBsaXN0CiAKLTIwMTEtMDYtMDEgMTQ6NTEgIGR0czEyCisyMDExLTA1LTA5IDIyOjUxICBoYXJkYWtlcgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIGNvbmZpZ3VyZToKKworICAgdXNlIHByb3BlciBhdXRvY29uZiB2ZXJzaW9uCisKKzIwMTEtMDUtMDkgMjI6MzggIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCAgIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAgICBwZXJsL2FnZW50L2FnZW50LnBtLAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbToKIAogICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCiAKLTIwMTEtMDUtMzEgMjI6NDkgIGhhcmRha2VyCisyMDExLTA1LTA5IDIyOjM4ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisgICAqIE1ha2VmaWxlLnRvcDoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKLSAgIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLgorICAgdmVyc2lvbiB1cGRhdGUKIAotMjAxMS0wNS0zMSAxMjozMCAganNhZnJhbmVrCisyMDExLTA1LTA5IDIyOjEwICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgogCi0gICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaHJTV1J1blBhdGggb2Ygc3dhcHBlZC1vdXQgcHJvY2Vzc2VzIG9uCi0gICBMaW51eC4KLSAgIAotICAgZmdldHMoKSByZXR1cm5zIE5VTEwgYm90aCB3aGVuIC9wcm9jL1BJRC9jbWRsaW5lIGlzIGVtcHR5ICg9Ci0gICBzd2FwcGVkIG91dCkgYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCi0gICAvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuCi0KLTIwMTEtMDUtMjYgMTY6MTIgIGhhcmRha2VyCi0KLSAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotCi0gICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28gdGhleSByZXRyeSBwcm9iaW5nCi0gICBmb3IgYW4gZW5naW5lSUQuCi0KLTIwMTEtMDUtMjYgMTY6MDYgIGhhcmRha2VyCi0KLSAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotCi0gICBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkIHJld3JpdGluZyBleGlzdGluZwotICAgYXV0aGtleS9wcml2a2V5L2V0Y3MKLQotMjAxMS0wNS0yNSAwOToyMSAgYnZhc3NjaGUKLQotICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6Ci0KLSAgIENIQU5HRVM6IHNubXBkOiBVc2UgcHJvcGVyIGZvcm1hdCBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cwotICAgZm9yIHByaW50aW5nIHZhbHVlcyBvZiB0eXBlICdvaWQnLgotCi0yMDExLTA1LTI0IDEyOjUxICBqc2FmcmFuZWsKLQotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jOgotCi0gICBBZGRlZCBOVUxMLWNoZWNrcyBhZnRlciBtYWxsb2MKLQotMjAxMS0wNS0yMiAxOTozNCAgZHRzMTIKLQotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6Ci0KLSAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDMzMDUxNTc6IEZpeCBpcEFkZHJlc3NQcmVmaXggaGFuZGxpbmcgb2YKLSAgIElQdjYgYWRkcmVzc2VzCi0KLTIwMTEtMDUtMjIgMTk6MDcgIGR0czEyCi0KLSAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKLQotICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDMyOTU0MDc6IEZpeCBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIKLQotMjAxMS0wNS0yMiAxODo1NyAgZHRzMTIKLQotICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgotCi0gICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcwotICAgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKQotCi0yMDExLTA1LTIwIDE1OjQxICBkdHMxMgotCi0gICAqICBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAgIAotICAgICAgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAotICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKLSAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgotCi0gICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDMyMzQ3NTQ6IEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nCi0gICBob29rIGlzIGluaXRpYWxpemVkIHRvIE5VTEwKLQotMjAxMS0wNS0xOSAxOTo0NiAgaGFyZGFrZXIKLQotICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotCi0gICB1c2UgI2lmZGVmIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4KLQotMjAxMS0wNS0xOSAxNzoxOSAgZHRzMTIKLQotICAgKiBtYW4vc25tcF9hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOgotCi0gICBDSEFOR0VTOiBtYW46IEJVRzogMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UKLSAgIGFuZCBzbm1wX2FzeW5jX3NlbmQKLQotMjAxMS0wNS0xMiAwOTowMyAgYnZhc3NjaGUKLQotICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0KLSAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gc25tcF9mcmVlX3Nlc3Npb24oKS4KLQotMjAxMS0wNS0xMiAwODoxMiAgYnZhc3NjaGUKLQotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgotCi0gICBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgTmV0LVNOTVAKLSAgIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJIGlwTmV0VG9NZWRpYVRhYmxlLgotCi0yMDExLTA1LTEyIDA4OjA4ICBidmFzc2NoZQotCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzoKLQotICAgQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5ldC1TTk1QCi0gICAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSSBpZlRhYmxlLgotCi0yMDExLTA1LTEyIDA3OjMzICBidmFzc2NoZQotCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jOgotCi0gICBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgTmV0LVNOTVAKLSAgIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJIGlwQWRkclRhYmxlLgotCi0yMDExLTA1LTEyIDA2OjU0ICBidmFzc2NoZQotCi0gICAqIENoYW5nZUxvZzoKLQotICAgRG9jdW1lbnRhdGlvbiAvIHNvdXJjZSBjb2RlIGNvbW1lbnQgc3BlbGxpbmcgZml4OiBleGl0ZW50IC0+Ci0gICBleGlzdGVudC4KLQotMjAxMS0wNS0xMCAxNTowMiAgYnZhc3NjaGUKLQotICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzoKLQotICAgTWluR1c6IGF2b2lkIHRoYXQgZ2NjIGNvbXBsYWlucyBhYm91dCBwYXNpbmcgYSAoY2hhciAqKSBhcmd1bWVudAotICAgd2hpbGUgKHVuc2lnbmVkIGNoYXIgKikgaXMgZXhwZWN0ZWQuCisgICBhZGRlZCBhIG1pc3NpbmcgMCBpbiB0aGUgcmV2aXNpb24gZGF0ZQogCiAyMDExLTA1LTA5IDIwOjUyICBuYmEKIApAQCAtMzA1LDYgKzMwMjk0LDk0IEBACiAKICAgIFVzZSBzeW1ib2xpYyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcwogCisyMDExLTA1LTA5IDIwOjQzICBuYmEKKworICAgKiBtaWJzL3JmY21pYnMuZGlmZjoKKworICAgSUFOQSBoYXMgZml4ZWQgdGhlIElBTkEtSVBQTS1NRVRSSUNTLVJFR0lTVFJZLU1JQgorCisyMDExLTA1LTA5IDE1OjI0ICBoYXJkYWtlcgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgYWRkZWQgYSBuZXcgUkVWSVNJT04gY2xhdXNlIHRvIGxpc3QgdGhlIGNoYW5nZXMgaW4gdGhlIHRoZSByZWNlbnQKKyAgIHVwZGF0ZQorCisyMDExLTA1LTA5IDE0OjE5ICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGFkZGVkIHBpbmcvdHJhY2Vyb3V0ZSBtaWJzIG5vdGUKKworMjAxMS0wNS0wOSAxNDoxOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOgorCisgICB3ZSBhY3R1YWxseSB3YW50IHRvIHVzZSB0aGUgYmFzZSBPSUQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QKKyAgIHRoZSByZWcgT0lELgorCisyMDExLTA1LTA5IDE0OjE4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6CisKKyAgIGZpeGVkIHRoZSBwcm94eSBzdXBwb3J0IHRvIGRvIGEgcHJvcGVyIE9JRCBsZXNzIHRoYW4gT0lEIGNvbXBhcmUuCisgICBXZSBhY3R1YWxseSBkb24ndCBjYXJlIGFib3V0IHRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QsCisgICBvbmx5CisgICB0aGF0IGl0IHdhcyBiZWZvcmUgdGhlIHJlZ2lzdGVyZWQgcmViYXNlCisKKzIwMTEtMDUtMDkgMTQ6MTggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzoKKworICAgQ0hBTkdFUzogcGF0Y2ggMzE0MDgzMzogZnJvbSBqc2FmcmFuZWs6IGZpeCBwcm94eSBHRVRORVhUCisgICByZXF1ZXN0cworICAgV2hlbiBPSURzIHJlcXVlc3RlZCBhcmUgYmVsb3cgdGhlIHByb3h5IHJlcXVlc3QgcmVtYXAsIHdlIG5lZWQgdG8KKyAgIG5vdAorICAgaW5jbHVkZSBhbnkgT0lEcyB0aGF0IG1pZ2h0IGJlIGluIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbAorICAgT0lECisgICBhbmQgdGhlIHJlbWFwcGVkIE9JRC4gVGhpcyBwYXRjaCBmdWRnZXMgdGhlIHJlcXVlc3Qgc28gdGhhdCBpdAorICAgZml4ZXMKKyAgIHRoZSByZXF1ZXN0IE9JRCBzbyBpdCdzIGp1c3QgYmVmb3JlIHRoZSByZW1hcHBlZCBwcm94eSByYW5nZS4KKworMjAxMS0wNS0wOSAxNDoxOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgsIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgTkVXUzogUEFUQ0ggMzE2NzMyNTogZnJvbSBrcmlzenRvZm9ybzogVUNELVNOTVAvU3lzdGVtU3RhdHM6IGFkZAorICAgdmFyaWFibGVzCisgICB0byByZXBvcnQgY3B1c3RlYWwsIGNwdWd1ZXN0LCBjcHVndWVzdG5pY2UKKworMjAxMS0wNS0wOSAxNDoxNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmM6CisKKyAgIENIQU5HRVM6IHBhdGNoIDMxODQwMjY6IGZyb20gZWl2bmFlczogQXZvaWQgY29uc3RhbnQgcmVmcmVzaCBvZgorICAgaW50ZXJmYWNlIHN0YXRpc3RpY3MKKworMjAxMS0wNS0wOSAxMDo0NCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBhcHBzL3NubXBkZWx0YS5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSB0aGUgTVNWQyBjb21waWxlci4KKworMjAxMS0wNS0wOSAxMDozNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2dldHRpbWVvZmRheS5jOgorCisgICBXaW4zMi9NU1ZDOiBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTEtMDUtMDkgMTA6MzMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBGaXhlZCBhIHllYXItMjAzOCBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICBpcFJvdXRlVGFibGUuCisKIDIwMTEtMDUtMDggMjA6MDEgIG5iYQogCiAgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKQEAgLTMzNCw4MyArMzA0MTEsOTkgQEAKIAogICAgUmVtb3ZlZCBhbiB1bnVzZWQgbGFiZWwgZnJvbSBwZXJsL1NOTVAvU05NUC54cy4KIAotMjAxMS0wNS0wNiAyMTozMiAgaGFyZGFrZXIKKzIwMTEtMDUtMDcgMTQ6NDggIGJ2YXNzY2hlCiAKLSAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oOgorICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaDoKIAotICAgTkVXUzogUEFUQ0ggMzE5ODc4MTogZnJvbSBmZW5uZXI6IEdldCBkaXNtYW4vcGluZyBhbmQKLSAgIGRpc21hbi90cmFjZXJvdXRlIHRvIGF0IGxlYXN0IGNvbXBpbGUKKyAgIENIQU5HRVM6IHNubXBkOiBEZWNsYXJlIHRoZSBPSUQgYXJndW1lbnQgdHlwZSBvZiBNSUIgcmVnaXN0cmF0aW9uCisgICBmdW5jdGlvbnMgYXMgJ2NvbnN0IG9pZCAqJyBpbnN0ZWFkIG9mICdvaWQgKicgc2luY2UgdGhlc2UKKyAgIGZ1bmN0aW9ucyBkbyBub3QgbW9kaWZ5IHRoZSBPSUQuCiAKLTIwMTEtMDUtMDYgMTc6NDYgIGR0czEyCisyMDExLTA1LTA3IDE0OjQ0ICBidmFzc2NoZQogCi0gICAqIENIQU5HRVM6CisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBVc2UgdGhlIGNvcnJlY3QgZGF0YSB0eXBlIGZvciB0aGUgJ2NhY2hlIGV4cGlyZWQnIHZhcmlhYmxlOiBjaGFyCisgICBpbnN0ZWFkIG9mIGludC4KIAotMjAxMS0wNS0wNiAxNzozNyAgZHRzMTIKKzIwMTEtMDUtMDcgMTQ6NDMgIGJ2YXNzY2hlCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjIwMTUxLgogCi0yMDExLTA1LTA2IDE3OjM1ICBkdHMxMgorMjAxMS0wNS0wNyAxMzoxNSAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOgogCi0gICBtYWtlIGRlcGVuZAorICAgV2luMzI6IGltcHJvdmVkIHNvdXJjZSBjb2RlIGNvbnNpc3RlbmN5IGJ5IHVzaW5nIExQQ1RTVFIgaW5zdGVhZAorICAgb2YgTFBDU1RSLiBOb3RlOiB0aGlzIGRvZXMgbm90IG1lYW4gdGhhdCBVbmljb2RlIGJ1aWxkcyBhcmUKKyAgIHN1cHBvcnRlZC4KIAotMjAxMS0wNS0wNiAxNzoyMiAgZHRzMTIKKzIwMTEtMDUtMDcgMTM6MTQgIG5iYQogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYzoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIEFkZCBmaWxlIGZvcmdvdHRlbiBpbiByMjAzNTMKIAotMjAxMS0wNS0wNiAxNzoxNyAgZHRzMTIKKzIwMTEtMDUtMDYgMjM6MzIgIGhhcmRha2VyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMxMjU5NjogZnJvbSBmYWJsZWQ4MDogbGlzdGVuIGZvciBuZXRsaW5rCisgICBjaGFuZ2UgZXZlbnRzIGZvciB0aGUgYXJwLXJlbGF0ZWQgdGFibGVzCisKKzIwMTEtMDUtMDYgMTg6MzYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCBvcHRpb25hbCBzdXBwb3J0IGZvciBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbgorICAgb2YgaG9zdG5hbWVzCisgICAKKyAgIC0gb3B0aW9uYWwgYXQgY29uZmlndXJlIHRpbWU6IC0td2l0aC1sb2NhbC1kbnNzZWMtdmFsaWRhdGlvbgorICAgLSByZXF1aXJlcyBETlNTRUMtVG9vbCB2YWxpZGF0aW9uIGxpYnJhcmllcworICAgLSBpbml0aWFsIHN1cHBvcnQsIGZvciBzeXN0ZW1zIHdpdGggZ2V0YWRkcmluZm8uIHN1cHBvcnQgZm9yCisgICBhZGRpdGlvbmFsCisgICByZXNvbHZlciBpbnRlcmZhY2VzIGNvbWluZyBzb29uLgorICAgLSBhbHNvIFRPRE86IGZsYWcgZm9yIGlnbm9yaW5nIHZhbGlkYXRvaW4gZXJyb3JzIChsb2cgJiBjb250aW51ZSkKKworMjAxMS0wNS0wNiAxODozNiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmg6CisKKyAgIG1vdmUgdW51c2VkIChhbmQgdG9vIGdlbmVyaWMpIHRva2VuIHdpdGhpbiBVQ0RfQ09NUEFUSUJMRSBpZmRlZgorICAgCisgICAtIE1BWExBQkVMIGNvbmZsaWN0cyB3aXRoIDxhcnBhL25hbWVzZXIuaD4KKyAgIC0gYWRkZWQgTkVUU05NUF9NQVhMQUJFTAorCisyMDExLTA1LTA2IDE4OjM2ICByc3RvcnkKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIHVwZGF0ZSBjb25maWd1cmUvTWFrZWZpbGVzIGZvciBETlNTRUMgbG9jYWwgdmFsaWRhdGlvbiBvcHRpb24KKworMjAxMS0wNS0wNiAxNDozOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgorCisgICByZW1vdmVkIHRoZSBhY2NpZGVudGFsIGJyb2tlbiBmZWF0dXJlIHJlcXVpcmUgbGluZSB0aGF0IGdvdCBoYWxmCisgICBpbnNlcnRlZAogCiAyMDExLTA1LTA2IDEzOjUwICBkdHMxMgogCkBAIC00MjAsMTUgKzMwNTEzLDQ5MiBAQAogICAgLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMCiAgICAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzCiAKKzIwMTEtMDUtMDYgMTI6NTggIGR0czEyCisKKyAgICogd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6CisKKyAgIFN1cHBvcnQgVGFyL0daaXAgY29tbWFuZCBwYXRocyBjb250YWluaW5nIHNwYWNlcworCisyMDExLTA1LTA2IDEyOjU3ICBkdHMxMgorCisgICAqIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOgorCisgICBSZXBvcnQgR1ppcCBjb21tYW5kIGNvcnJlY3RseQorCisyMDExLTA1LTA1IDIxOjQ4ICBuYmEKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jOgorCisgICBGaXggZm9yIERyYWdvbkZseSBCU0QgKGRvZXMgbm90IGRlZmluZSBJUF9TRU5EU1JDQUREUikKKworMjAxMS0wNS0wNSAyMDoyOSAgbmJhCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oOgorCisgICBGaXggc3BlbGxpbmcgb2YgU09fUkVDVkRTVEFERFIKKworMjAxMS0wNS0wNSAxODo1NCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIG1hbi9zbm1wLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE5FV1M6IGFwcHM6IGFkZCBzbm1wLmNvbmYgdG9rZW5zIGZvciB0aW1lb3V0cyBhbmQgcmV0cmllcworCiAyMDExLTA1LTA1IDA2OjA3ICBidmFzc2NoZQogCi0gICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9URVNUQ09ORi5zaDoKKyAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKIAogICAgQ0hBTkdFUzogTWluR1c6IE1hZGUgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUKICAgIE5ldC1TTk1QIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzCiAgICB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IGFmdGVyIHRoZSBOZXQtU05NUCBiaW5hcmllcyAoTVNWQyBidWlsZCkKICAgIGhhZCBiZWVuIGluc3RhbGxlZCBkbyBub3cgcGFzcy4KIAorMjAxMS0wNS0wNSAwNTo1NyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyLnNsbiwgICAKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgUmVtb3ZlZCBWaXN1YWwgU3R1ZGlvIDIwMDUgc29sdXRpb24gYW5kIHByb2plY3QgZmlsZXMgYWdhaW4gc2luY2UKKyAgIFZpc3VhbCBTdHVkaW8gMjAxMCByZWZ1c2VzIHRvIGxvYWQgdGhlc2UuCisKKzIwMTEtMDUtMDQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIGNsZWFuIHRoZSBwZXJsL3B5dGhvbiBmZWF0dXJlIGxlZnRvdmVycworCisyMDExLTA1LTA0IDIzOjQyICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBmaXggbWliIG1vZHVsZSBpbnZvY2F0aW9uCisKKzIwMTEtMDUtMDQgMjA6NTcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBmaXggaWZkZWYgdHlwbworCisyMDExLTA1LTA0IDIwOjU2ICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBmaXggcGVybC9weXRob24gZmVhdHVyZSBkZXBlbmRlbmNpZXMKKworMjAxMS0wNS0wNCAyMDo1NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6CisKKyAgIHJldmVydGVkIGF1dG9fbmxpc3QgbWFjcm8gdXNhZ2U7IHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIGhlYWRlcnMKKworMjAxMS0wNS0wNCAyMDo1NiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgQWRkIGEgLVQgb3B0aW9uIHRvIHJ1biAnbWFrZSB0ZXN0JworCisyMDExLTA1LTA0IDIwOjU2ICBoYXJkYWtlcgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW46CisKKyAgIGZpeCB0aGUgZW5jb2RlX2tleWNoYW5nZSAuZnQgZmlsZW5hbWUKKworMjAxMS0wNS0wNCAxNjoyMCAgaGFyZGFrZXIKKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBmaXggdGhlIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IHRoZSBUcmFwUmVjZWl2ZXIgbW9kdWxlCisKKzIwMTEtMDUtMDQgMTY6MjAgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIEFkZCB0aGUgVHJhcFJlY2VpdmVyIHRvIHRoZSBsaXN0IG9mIHBlcmwgbW9kdWxlcworCisyMDExLTA1LTA0IDE0OjQyICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICB1c2UgdGhlIG5ld2VyIE5ldC1TTk1QIEFQSXMsIHJhdGhlciB0aGFuIHRoZSBvbGRlciBVQ0Qgb25lcworCisyMDExLTA1LTA0IDE0OjQxICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICByZW1vdmUgU0VUIGNvZGUgd2hlbiB1bmRlciAtLXJlYWQtb25seSBtb2RlCisKKzIwMTEtMDUtMDQgMTQ6NDEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jOgorCisgICByZXF1aXJlIGNoZWNrX3ZiX3VpbnQKKworMjAxMS0wNS0wNCAxNDo0MSAgaGFyZGFrZXIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMsCisgICAgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMsICAgCisgICAgICBweXRob24vbmV0c25tcC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIGxhc3Qgb2YgdGhlIHBlcmwtdXNlZCBmZWF0dXJlIGZ1bmN0aW9ucworCisyMDExLTA1LTA0IDE0OjQwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAgIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jOgorCisgICBzdGFydGVkIHRoZSBmaW5hbCBzZXQgb2YgZnVuY3Rpb24gcmVtb3ZhbHMgZm9yIGZlYXR1cmVzIHJlcXVpcmVkCisgICBieSBwZXJsL3B5dGhvbgorCisyMDExLTA1LTA0IDE0OjM5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmk6CisKKyAgIGFkZGVkIHRoZSBuZXQtc25tcC1mZWF0dXJlcy5oIGhlYWRlcgorCisyMDExLTA1LTA0IDE0OjM5ICBoYXJkYWtlcgorCisgICAqICBwZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaDoKKworICAgQWRkZWQgcGVybCBmZWF0dXJlIHJlcXVpcmVtZW50cworCisyMDExLTA1LTA0IDE0OjM5ICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAgIAorICAgICAgcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmg6CisKKyAgIGhvcGVmdWxseSB3b3JraW5nIHJ1bGVzIHRvIGFwcGx5IGZlYXR1cmUgcmVxdWlyZW1lbnRzIHRvIHBlcmwgYW5kCisgICBweXRob24KKworMjAxMS0wNS0wNCAxNDozOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgbW9yZSBjaGFuZ2VzIHRvIHJlbW92ZSB1bm5lZWRlZCBmdW5jdGlvbnMgcHJpbWFyaWx5IHdoZW4gd3JpdGUKKyAgIG1vZGUgaXMgdHVybmVkIG9mZgorCisyMDExLTA1LTA0IDE0OjM3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIGNoYW5nZSB0aGUgd2FudCBpbnZvY2F0aW9uIHRvIG9ubHkgZGVmYXVsdCB0byBleGNsdWRlIGV4dGVybmFsCisgICBob29rcworCisyMDExLTA1LTA0IDE0OjM3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZToKKworICAgc2VhcmNoIHRocm91Z2ggLnhzIGZpbGVzIGZvciBmdW5jdGlvbiBpbnZvY2F0aW9ucworCisyMDExLTA1LTA0IDE0OjM3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzoKKworICAgZm9yZ290IGEgc2VtaWNvbG9uCisKKzIwMTEtMDUtMDQgMTQ6MzcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jOgorCisgICBpcXVlcnkgcGR1IHNlc3Npb25zIGFyZSBvbmx5IG5lZWRlZCBpbiB3cml0ZSBtb2RlLgorCisyMDExLTA1LTA0IDE0OjM2ICBoYXJkYWtlcgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW46CisKKyAgIGZpeCBmZWF0dXJlIGRldGVjdGlvbiBvZiBzb21ldGltZXMtYnVpbHQgYXBwbGljYXRpb25zCisKKzIwMTEtMDUtMDQgMTQ6MzYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOgorCisgICB1c2UgdGhlIGZlYXR1cmVfdW51c2VkIG1hY3JvIGZvciBtYWtpbmcgYW4gZW1wdHkgZmlsZSBmb3IKKyAgIGNvbnNpc3RlbmN5CisKKzIwMTEtMDUtMDQgMTQ6MzYgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIGFwcHMvc25tcHRscy5jLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBBbm90aGVyIHN3ZWVwIGZvciB1bnVzZWQgZnVuY3Rpb25zIHdoZW4gcmVhZF9vbmx5IG1vZGUgaXMgdHVybmVkCisgICBvbgorCisyMDExLTA1LTA0IDE0OjM0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYzoKKworICAgbWFyayBhIHNsZXcgb2YgZnVuY3Rpb25zIGFzIGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgbmVlZGVkIHdpdGgKKyAgIHdyaXRlX3N1cHBvcnQKKworMjAxMS0wNS0wNCAxNDozMiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6CisKKyAgIHJ1biBncmVwIHdpdGggLW4KKworMjAxMS0wNS0wNCAxNDozMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmZWF0dXJpemUgbmV0c25tcF9zb2NrYWRkcl9zaXplCisKKzIwMTEtMDUtMDQgMTQ6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICByZW1vdmUgYSBmZWF0dXJlX3JlcXVpcmUgbm90IGFjdHVhbGx5IG5lZWRlZC4KKworMjAxMS0wNS0wNCAxNDozMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBtYXJrIFNVQkNPTlRBSU5FUl9GSU5EIGFzIGEgZmVhdHVyZQorCisyMDExLTA1LTA0IDE0OjMxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHRoZSByb3cgY3JlYXRpb24gQVBJIGlzIG9ubHkgdXNlZCBpbiB0aGUgVFNNIGltcGxlbWVudGF0aW9uCisKKzIwMTEtMDUtMDQgMTQ6MzEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgdGhlIG5ld2VyIGNvbnRleHQgZW5naW5lSUQgcHJvYmluZyBpcyBvbmx5IG5lZWRlZCBpZmYgVFNNIGlzIGluCisgICB1c2UKKworMjAxMS0wNS0wNCAxNDozMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBmaXggYW4gaWZkZWYgdHlwbworCisyMDExLTA1LTA0IDE0OjMwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIG1vdmVkIGZldGF1cmUgY2hpbGRfb2Ygc3RhdGVtZW50cyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlCisKKzIwMTEtMDUtMDQgMTQ6MzAgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBtYXJrZWQgYSBjb3VwbGUgb2YgcmFyZWx5IHVzZWQgY29udGFpbmVyIGZ1bmN0aW9ucy4KKworMjAxMS0wNS0wNCAxNDoyOSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBzcGxpdCBvdXQgdGhlIHByZWZpeF9pbmZvIGZlYXR1cmUgaW50byBzdWItZmVhdHVyZXMKKworMjAxMS0wNS0wNCAxNDoyOSAgaGFyZGFrZXIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgbWFyayB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIGFzIHVubmVlZGVkCisKKzIwMTEtMDUtMDQgMTQ6MjkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYzoKKworICAgZml4IGEgY2hpbGRfb2Ygc3RhdGVtZW50IHdpdGggYSBjb3B5L3Bhc3RlIGVycm9yCisKKzIwMTEtMDUtMDQgMTQ6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICB0aGUgY29udGFpbmVyIHJvdy1yZW1vdmUgaXMgb25seSBuZWVkZWQgaWYgdGhlIHRkYXRhIHJlbW92ZV9yb3cKKyAgIGlzIG5lZWRlZAorCisyMDExLTA1LTA0IDE0OjI4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgZmVhdHVyZSBtYXJraW5nIG9mIHVudXNlZCB0ZGF0YSBmdW5jdGlvbnMKKyAgIHRhYmxlX3RkYXRhX2RlbGV0ZV90YWJsZQorICAgdGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZQorICAgdGFibGVfdGRhdGFfcmVtb3ZlX3JvdworCisyMDExLTA1LTA0IDE0OjI3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYzoKKworICAgcmVtb3ZhbCBvZiBzb21lIHJhcmVseSB1c2VkIGZ1bmN0aW9ucworICAgdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdworICAgdGFibGVfZGF0YXNldF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZQorCisyMDExLTA1LTA0IDE0OjI3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBBZGRlZCBhIGRlZmluaXRpb24gdG8gaW5jb3Jwb3JhdGUgcmVhZF9vbmx5L25vdGlmeV9vbmx5CisKKzIwMTEtMDUtMDQgMTQ6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6CisKKyAgIGFkZGVkIGEgbWlzc2luZyBmZWF0dXJlIGRlZmluaXRpb24gbGluZQorCisyMDExLTA1LTA0IDE0OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICBhZGRlZCBiYWNrIGluIG1pc3NpbmcgbWliZ3JvdXAgZmVhdHVyZSBkZWZpbml0aW9uIGxpc3QKKworMjAxMS0wNS0wNCAxNDoyNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgSW5jbHVkZSB0aGUgb3JpZ2luYWwgYmFzZSBmbGFncyB0byBlbnN1cmUgLS13aXRoLWRlZmF1bHRzIGdldHMKKyAgIHBpY2tlZCB1cAorCisyMDExLTA1LTA0IDE0OjI2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBmaXggdXNhZ2UKKworMjAxMS0wNS0wNCAxNDoyNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgQWRkZWQgYSAtYiBmbGFnIGZvciBiYXNlIGFyZ3VtZW50cyB0byBzdGFydCBmcm9tCisKKzIwMTEtMDUtMDQgMTQ6MjUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGRlZmF1bHQgdG8gYSBsaW5lYXIgc2VhY2ggb2Ygc2l6ZSB0ZXN0cywgcmF0aGVyIHRoYW4gZXhwb25lbnRpYWwKKworMjAxMS0wNS0wMyAxODo1NSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBHdWFyZCBuZXRzbm1wX3VkcF9yZWN2ZnJvbSgpIGV0Yy4gZGVjbGFyYXRpb25zCisgICBjb25zaXN0ZW50bHkuCisgICBDSEFOR0VTOiBXaW4zMjogQnVpbGRzIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLgorCiAyMDExLTA1LTAzIDE1OjI5ICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvd2luc2VydmljZS5jOgpAQCAtNDUxLDYgKzMxMDIxLDI0OCBAQAogICAgU3BlbGxpbmcgYW5kIGdyYW1tYXIgZml4ZXMgZm9yIHRoZSBzb3VyY2UgY29kZSBjb21tZW50cyBpbgogICAgc25tcGxpYi93aW5zZXJ2aWNlLmMuCiAKKzIwMTEtMDQtMjkgMDA6MjMgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgYWRkZWQgbm90ZSBhYm91dCB0aGUgbmV3IHRpbWluZyBmdW5jdGlvbgorCisyMDExLTA0LTI5IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBVcGRhdGUgdGhlIG1hbnVhbCBwYWdlIHRvIHJlZmxlY3QgdGhlIG5ldyB0aW1pbmcgb3B0aW9ucworCisyMDExLTA0LTI5IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgYmV0dGVyIGRvY3VtZW50YXRpb24KKworMjAxMS0wNC0yOSAwMDoxNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYzoKKworICAgdXNlIHRoZSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmb3IgcGFyc2luZworICAgZnJlcXVlbmNpZXMvdGltZQorCisyMDExLTA0LTI5IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmM6CisKKyAgIGZpeCBwZHUgYnVpbGRpbmcgdGVzdHMgdW5kZXIgdmFyaW91cyBkaXNhYmxlZCBtb2RlcworCisyMDExLTA0LTI5IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmM6CisKKyAgIGRvbid0IHRyeSB0byBidWlsZCB0aGUgR0VUIHBkdSB1bmRlciBub3RpZnlfb25seQorCisyMDExLTA0LTI5IDAwOjEyICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIGZpeCBhIGJ1ZyB3aXRoIG5vLXN1ZmZpeCBzdHJpbmdzIGFuZCB1c2UgYSBjb25zdCBpbnB1dCBzdHJpbmcKKworMjAxMS0wNC0yOSAwMDoxMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3NfY2xpYi5jOgorCisgICBBIG5ldyB1bml0IHRlc3QgZm9yIHRoZSB0aW1lIGNvbnZlcnNpb24gcm91dGluZQorCisyMDExLTA0LTI5IDAwOjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIHVzZSB0aGUgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZnVuY3Rpb24gZm9yIGNvbXB1dGluZworICAgaW50ZXJ2YWwgcGVyaW9kcworCisyMDExLTA0LTI5IDAwOjExICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEFkZGVkIGEgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZnVuY3Rpb25zIHRvIGNvbnZlcnQsIGUuZy4sCisgICAxaCB0byAzNjAwCisKKzIwMTEtMDQtMjkgMDA6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZW1vdmUgY29kZSB0byBidWlsZC9wYXJzZSBHRVQvZXRjIHJlcXVlc3RzIHdoZW4gTk9USUZZX09OTFkgaXMKKyAgIHR1cm5lZCBvbi4KKworMjAxMS0wNC0yNyAyMTozMyAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICB1cGRhdGUgdGhlIE5FV1MgdG8gcmVmbGVjdCB0aGUgbmV3IC0tZW5hYmxlLXJlYWQtb25seSBhbmQKKyAgIC0tZW5hYmxlLW5vdGlmeS1vbmx5CisKKzIwMTEtMDQtMjcgMjE6MzMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIG1pbm9yIGltcHJvdmVtZW50cyBmb3Igcm9ubHkgdnMgcndyaXRlIGhhbmRsaW5nCisKKzIwMTEtMDQtMjcgMjE6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgc3RpbGwgZW5hYmxlIFJPTkxZIHdoZW4gUldSSVRFIGlzbid0IHBvc3NpYmxlCisKKzIwMTEtMDQtMjcgMjE6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIGZpeCBHRVQgc3VwcG9ydCB3aGVuIG5vX3dyaXRlIGlzIGVuYWJsZWQKKworMjAxMS0wNC0yNyAyMTozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBtYXJrIGEgZnV0dXJlIG1vZGlmaWNhdGlvbiBuZWVkIGluIGEgY29tbWVudAorCisyMDExLTA0LTI3IDIxOjMxICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jOgorCisgICBmaXggaGFuZGxpbmcgb2Ygbm9fd3JpdGUgc3VwcG9ydAorCisyMDExLTA0LTI3IDIxOjMxICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcGQuYzoKKworICAgZG9uJ3Qgb3BlbiBhbnkgbGlzdGVuaW5nIHRyYW5zcG9ydHMgd2hlbiBub3RpZnktb25seSBpcyBzcGVjaWZpZWQKKworMjAxMS0wNC0yNyAyMTozMSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBzZXQgdGhlIG5vLWxpc3RlbiBhbmQgcmVhZC1vbmx5IGZsYWdzIHdoZW4gLS1lbmFibGUtbm90aWZ5LW9ubHkKKyAgIGlzIHNldAorCisyMDExLTA0LTI3IDIxOjMwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIHJhbiBhdXRvaGVhZGVyCisKKzIwMTEtMDQtMjcgMjE6MzAgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBpbXBsZW1lbnQgdGhlIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgaW4gdGhlc2UgdHJhbnNwb3J0cworCisyMDExLTA0LTI3IDIxOjMwICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZToKKworICAgcnVuIGF1dG9jb25mCisKKzIwMTEtMDQtMjcgMjE6MjkgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIG1vdmUgdGhlIHJlYWQtb25seSBmbGFnIGRlZmluaXRpb24gYmVsb3cgdGhlIG5vdGlmeS1vbmx5LCBzaW5jZQorICAgbm90aWZ5LW9ubHkgbmVlZHMgdG8gaW1wbHkgcmVhZC1vbmx5CisKKzIwMTEtMDQtMjcgMjE6MjkgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgRGVmaW5lZCBhIG5ldyAtLWVuYWJsZS1ub3RpZnktb25seSBmbGFnIGZvciBidWlsZGluZyBhIHRvb2xzZXQKKyAgIHRoYXQgb25seSBhbGxvd3MgZm9yIG5vdGlmaWNhdGlvbnMgd2l0aCBubyByZWFkL3dyaXRlIHN1cHBvcnQKKworMjAxMS0wNC0yNyAyMToyOSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBEZWZpbmVkIGEgbmV3IC0tbm8tbGlzdGVuIGZsYWcgdG8gcmVtb3ZlIGxpc3RlbmluZyBzdXBwb3J0CisKKzIwMTEtMDQtMjcgMjE6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmg6CisKKyAgIHRoZSBkaXNtYW4gc2NoZWR1bGUgbWliIGlzIG9ubHkgdXNlZnVsIHdoZW4gU0VUcyBhcmUgdHVybmVkIG9uCisKKzIwMTEtMDQtMjcgMjE6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmg6CisKKyAgIHRoZSBkaXNtYW4gc2NoZWR1bGUgbWliIGlzIG9ubHkgdXNlZnVsIHdoZW4gU0VUcyBhcmUgdHVybmVkIG9uCisKKzIwMTEtMDQtMjcgMjE6MjggIGhhcmRha2VyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgZmluaXNoZWQgbm9fd3JpdGUgc3VwcG9ydCBmb3IgY29tbW9uIGluY2x1ZGVkIHRhYmxlcworCisyMDExLTA0LTI3IDIxOjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBBZGQgYmFjayBpbiAnbmV0c25tcF9zZXRfcm93X2NvbHVtbicgd2hlbiBub193cml0ZSBzdXBwb3J0IGlzCisgICBlbmFibGVkCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgZ2VuZXJpYyBkYXRhIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiwgbm90IFNFVAorICAgc3BlY2lmaWMKKworMjAxMS0wNC0yNyAyMToyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgZG9uJ3QgdXNlIG1hcmtfcm93X2NvbHVtbl93cml0YWJsZSB3aGVuIHJlYWQtb25seSBzdXBwb3J0IGlzCisgICBlbmFibGVkCisKKzIwMTEtMDQtMjcgMjE6MjYgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgZml4IG5vX3dyaXRlIHN1cHBvcnQKKworMjAxMS0wNC0yNyAyMToyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKKworICAgZml4IG5vX3dyaXRlIHN1cHBvcnQKKwogMjAxMS0wNC0yNyAyMToxNiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6CkBAIC00NTgsNiArMzEyNzAsNDYzIEBACiAgICBEb24ndCBmcmVlIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93bgogICAgaXQKIAorMjAxMS0wNC0yNiAxODoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9naXR0b29scywgbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOgorCisgICBnaXQgYmFzaC1zaGVsbCBmdW5jdGlvbnMgdG8gZW5hYmxlIGJyYW5jaCBzd2l0Y2hpbmcgYW5kIGV4dGVybmFsCisgICBidWlsZGluZworICAgVGhlc2UgbG9jYWwgc2hlbGwgZnVuY3Rpb25zIChzbm1wY29uZmlndXJlIGFuZCBzbm1wbWFrZSkgbGV0IHlvdQorICAgY29uZmlndXJlIGFuZCBidWlsZCB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaW4gZXh0ZXJuYWwKKyAgIGRpcmVjdG9yaWVzCisgICB0aGF0IGFyZSBhdXRvLWNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGJyYW5jaCBuYW1lICh3aXRoCisgICBhbgorICAgb3B0aW9uYWwgc3VmZml4KS4gVGhpcyBsZXRzIHlvdSBydW4gJ3NubXBtYWtlJyBmcm9tIHdpdGhpbiB0aGUKKyAgIHNvdXJjZQorICAgZGlyZWN0b3J5IGFuZCBoYXZlIGl0IGFjdHVhbGx5IGV4dGVybmFsbHkga2VlcCB0cmFjayBvZiBtb2RpZmllZAorICAgZmlsZXMsIGV0Yywgc28gYnVpbGRpbmcgaW4gbXVsdGlwbGUgYnJhbmNoZXMgY2FuIGJlIGRvbmUgZnJvbSBhCisgICBzaW5nbGUKKyAgIGdpdCBjaGVja291dC4KKworMjAxMS0wNC0yNSAyMDo1NyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBjbGVhbiB1cCB0aGUgaXRlcmF0b3JzCisKKzIwMTEtMDQtMjUgMjA6NTcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZnJlZSB2YXJiaW5kcyBhZnRlciBzZW5kaW5nCisKKzIwMTEtMDQtMjUgMTg6NDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIENvbW1lbnRlZCBvdXQgYW4gdW51c2VkIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNvbXBsYWluZWQKKyAgIGFib3V0IGl0LgorCisyMDExLTA0LTI1IDE4OjQ2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBGaXhlZCB0d28gY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTEtMDQtMjMgMTQ6MzEgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBudWxsIGNoZWNrCisKKzIwMTEtMDQtMjMgMTQ6MDUgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYzoKKworICAgTW92ZSBwb2ludGVyIGRlcmVmZXJlbmNlIHRvIGFmdGVyIHRoZSBjaGVjayBmb3Igc3VjY2Vzc2Z1bAorICAgYWxsb2NhdGlvbiBvZiB0aGUgcG9pbnRlcgorCisyMDExLTA0LTIzIDA4OjIwICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZQorCisyMDExLTA0LTIzIDA4OjE2ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wNC0yMyAwODowNiAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUKKworMjAxMS0wNC0yMyAwNzo1NSAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUKKworMjAxMS0wNC0yMiAxOTozNSAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZQorCisyMDExLTA0LTIyIDE5OjMwICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDExLTA0LTIyIDE3OjI5ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBtZW50aW9uIHdoaWNoIG1vZHVsZSBpcyByZXF1aXJlZCB3aGVuIGJ1aWxkaW5nIHRvIGdldCB0aGUgZGVsaXZlcgorICAgc3VwcG9ydAorCisyMDExLTA0LTIyIDE2OjMzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGRlbGV0ZWQgYW4gdW5uZWVkZWQgZGVidWdnaW5nIHN0YXRlbWVudAorCisyMDExLTA0LTIyIDE2OjMzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIHByb3Blcmx5IHVwZGF0ZSB0aGUgbWF4IGNvdW50IGluIHRoZSBvdXRnb2luZyBub3RpZmljYXRpb25zCisKKzIwMTEtMDQtMjIgMTY6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgYmV0dGVyIHBhY2tldCBlc3RpbWF0aW9uIHRvIGVuc3VyZSB3ZSBkb24ndCBvdmVycnVuLgorCisyMDExLTA0LTIyIDE2OjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGVzdGltYXRlIHRoZSBwYWNrZXQgc2l6ZSBhbmQgYnJlYWsgdGhlIG5vdGlmaWNhdGlvbiB1cCBiYXNlZCBvbgorICAgaXQKKworMjAxMS0wNC0yMiAxNjozMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICB0cmFuc2Zvcm0gdGhlIG5vdGlmaWNhdGlvbiBzZW5kaW5nIGludG8gYSBsYXJnZXIgbG9vcCBmb3IgbGF0ZXIKKyAgIG11bHRpLW5vdGlmcworCisyMDExLTA0LTIyIDE2OjMxICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgZmVhdHVyZSBtYXJraW5nL3NlbGVjdGlvbgorCisyMDExLTA0LTIyIDE2OjMxICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIG1lbnRpb24gdGhlIG5ldyBkZWxpdmVyeSBieSBub3RpZmljYXRpb25zCisKKzIwMTEtMDQtMjIgMTY6MzEgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgZG9jdW1lbnQgdGhlIG1pbmltYWxpc3Qgc3VwcG9ydAorCisyMDExLTA0LTIyIDE2OjMwICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCB0aGUgbmV3IGRlbGl2ZXJCeU5vdGlmeSBjb25maWcgdG9rZW5zCisKKzIwMTEtMDQtMjIgMTY6MzAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgYWxsb3cgcnVuIHRpbWUgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT0lEcyB0byB1c2UKKworMjAxMS0wNC0yMiAxNjozMCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIGFkZCBjb25maWcgZmxhZ3MgdG8gbm90IGluY2x1ZGUgdGhlIHBlcmlvZCBjb25maWcgYW5kIG1zZyBjb3VudAorICAgdmFsdWVzCisKKzIwMTEtMDQtMjIgMTY6MjkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgaW5jbHVkZSB0aGUgcGVyaW9kaWMgY291bnQsIHRoZSBtZXNzYWdlIG51bWJlciBhbmQgdGhlIG1heAorICAgbWVzc2FnZSBudW1iZXIKKworMjAxMS0wNC0yMiAxNjoyOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBkZWxldGVkIGRlYnVnZ2luZyBjb21tZW50CisKKzIwMTEtMDQtMjIgMTY6MjkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBtaWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0OgorCisgICBNb3ZlIHRoZSBub3RpZmljYXRpb24gZGVmaW5pdGlvbiB0byB3aXRoaW4gdGhlIHN1Yi1taWIKKworMjAxMS0wNC0yMiAxNjoyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBkZWxldGUgYW4gdW51c2VkIHZhcmlhYmxlCisKKzIwMTEtMDQtMjIgMTY6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgbG9hZCB0aGUgTUlCIGludG8gdGhlIGRlZmF1bHQgc2V0CisKKzIwMTEtMDQtMjIgMTY6MjggIGhhcmRha2VyCisKKyAgICogbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dDoKKworICAgQSBuZXcgbWliIHRvIGhvbGQgdGhlIHBlcmlvZGljIG5vdGlmeSBvYmplY3RzCisKKzIwMTEtMDQtMjIgMTY6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZmlsbCBvdXQgdGhlIGNvbmZpZyBmcmVlIHJvdXRpbmUKKworMjAxMS0wNC0yMiAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBwcm9wZXJseSBtb25pdG9yIHRoZSB3aG9sZSBjb250YWluZXIKKworMjAxMS0wNC0yMiAxNjoyNyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIHBhcnNlIHRoZSBjb25mIGZpbGVzIGFuZCBjcmVhdGUgYW5kIGluc2VydCBvYmplY3RzIGludG8gdGhlCisgICBjb250YWluZXIKKworMjAxMS0wNC0yMiAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBkZWZpbmVkIGEgY29udGFpbmVyIHRvIHN0b3JlIGEgbGlzdCBvZiBkZWxpdmVyIG9iamVjdHMgaW4KKworMjAxMS0wNC0yMiAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBhZGRlZCBhIG5leHRfcnVuIHRpbWVzdGFtcAorCisyMDExLTA0LTIyIDE2OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGFjdHVhbGx5IHNlbmQgYSBub3RpZmljYXRpb24gd2l0aCB0aGUgcmVzdWx0cworCisyMDExLTA0LTIyIDE2OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIG1ha2UgdGhlIHdhbGsgb24gdGhlIHRlc3Qgb2JqZWN0IGZ1bmN0aW9uLgorCisyMDExLTA0LTIyIDE2OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGNyZWF0ZSBhIG1heCBwYWNrZXQgc2l6ZSBjb25maWcgdG9rZW4gYW5kIHBhcnNlIGl0CisKKzIwMTEtMDQtMjIgMTY6MjUgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBtaW5pbWFsIHN0YXJ0aW5nIHRlc3Qgb2JqZWN0CisKKzIwMTEtMDQtMjIgMTY6MjUgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBhZGRlZCBhIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgdGltZSB1bnRpbCB0aGUgbmV4dCBydW4KKworMjAxMS0wNC0yMiAxNjoyNSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICByZW1vdmUgbGVmdCBpbiB0ZW1wbGF0ZSBsaW5lCisKKzIwMTEtMDQtMjIgMTY6MjUgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICB1c2UgYW4gYWxhcm0gY2FsbGJhY2sgcHJvdG90eXBlIGZvciBleGVjdXRlCisKKzIwMTEtMDQtMjIgMTY6MjQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIsIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBiZWdpbm5pbmcgdGVtcGxhdGUgY29kZSBmb3IgZGVsaXZlcnkgb2YgZGF0YSBieSBub3RpZmljYXRpb25zCisKKzIwMTEtMDQtMjIgMDk6MTMgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUKKworMjAxMS0wNC0yMiAwOTowNyAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZXMKKworMjAxMS0wNC0yMiAwOTowMyAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wNC0xOSAwODozOCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCB3aW4zMi93aW4zMi5zbG46CisKKyAgIEFkZGVkIFZpc3VhbCBTdHVkaW8gMjAwNSBwcm9qZWN0IGFuZCBzb2x1dGlvbiBmaWxlIGZvciBidWlsZGluZworICAgdGhlIE5ldC1TTk1QIGxpYnJhcnkgYXMgYSBzdGF0aWMgbGlicmFyeS4gQm90aCB0aGUgV2luMzIgYW5kIHRoZQorICAgeDY0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZC4KKworMjAxMS0wNC0xOSAwNzo1NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTEtMDQtMTkgMDc6MzkgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2o6CisKKyAgIE1vcmUgVmlzdWFsIFN0dWRpbyAyMDA1IHByb2plY3QgZmlsZSBjbGVhbnVwLgorCisyMDExLTA0LTE5IDA2OjU3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2JpbjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDExLTA0LTE4IDE1OjM0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvajoKKworICAgQ2xlYW5lZCB1cCBXaW4zMiBWUzIwMDUgcHJvamVjdCBmaWxlcyAtIHJlbW92ZWQgc3VwZXJmbHVvdXMKKyAgIGxpYnJhcnkgcmVmZXJlbmNlcy4KKworMjAxMS0wNC0xOCAxNToyNSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICBBZGRlZCB4NjQgY29uZmlndXJhdGlvbnMuCisKKzIwMTEtMDQtMTggMTU6MTQgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGliOgorCisgICBBbm90aGVyIFdpbjMyLXJlbGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdCB1cGRhdGUuCisKKzIwMTEtMDQtMTggMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgQWRkZWQgd2luMzJkbGwtcmVsYXRlZCBWaXN1YWwgU3R1ZGlvIDIwMDUgcHJvamVjdCBhbmQgc29sdXRpb24KKyAgIGZpbGVzLgorCisyMDExLTA0LTE4IDEzOjM3ICBidmFzc2NoZQorCisgICAqICB3aW4zMiwgd2luMzIvZW5jb2RlX2tleWNoYW5nZSwgd2luMzIvbGliLCB3aW4zMi9saWJhZ2VudCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZCwgd2luMzIvbGlic25tcCwgd2luMzIvbGlic25tcF9kbGwsICAgCisgICAgICB3aW4zMi9saWJ1Y2RtaWJzLCB3aW4zMi9uZXQtc25tcCwgd2luMzIvbmV0c25tcG1pYnMsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldCwgd2luMzIvc25tcGJ1bGt3YWxrLCB3aW4zMi9zbm1wZCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YSwgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZ2V0LCB3aW4zMi9zbm1wZ2V0bmV4dCwgIAorICAgICAgIHdpbjMyL3NubXBuZXRzdGF0LCB3aW4zMi9zbm1wc2V0LCB3aW4zMi9zbm1wc3RhdHVzLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlLCB3aW4zMi9zbm1wdGVzdCwgd2luMzIvc25tcHRyYW5zbGF0ZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwLCB3aW4zMi9zbm1wdHJhcGQsIHdpbjMyL3NubXB1c20sIHdpbjMyL3NubXB2YWNtLCAgIAorICAgICAgd2luMzIvc25tcHdhbGs6CisKKyAgIEFkZGVkICoudmNwcm9qLioudXNlciBhbmQgeDY0IHRvIHRoZSB3aW4zMiBTdWJ2ZXJzaW9uIGlnbm9yZQorICAgbGlzdHMuIFJhbiB0aGVzZSB0aHJvdWdoIExDX0FMTD1DIHNvcnQgLWZ1IHRvby4KKworMjAxMS0wNC0xOCAxMjoxMCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oOgorCisgICBXaW4zMiBETEwgYnVpbGQgZml4ZXMuCisKKzIwMTEtMDQtMTcgMjA6NTYgIGR0czEyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0CisgICB3aGVyZSBhdmFpbGFibGUgKCpCU0QpCisKIDIwMTEtMDQtMTUgMTM6NDIgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtNDY3LDYgKzMxNzM2LDE0IEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOiAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRAogICAgcHJlZml4IGxlbmd0aAogCisyMDExLTA0LTE1IDEzOjE3ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgYXBwcy9zbm1wdHJhcGRfZHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIENIQU5HRVM6IExpbnV4OiBQQVRDSEVTOiAzMjA1ODExOiBPcHRpb24gdG8gc2tpcCBmZC9sb29wL3JhbQorICAgZGV2aWNlcyBpbiBkaXNrSU9UYWJsZQorCiAyMDExLTA0LTE0IDIxOjMxICBkdHMxMgogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CkBAIC01MTMsNDIgKzMxNzkwLDIzNCBAQAogCiAgICBGaXggd3JvbmcgbmFtZSBmb3IgY29uZmlnIHRva2VuICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnCiAKLTIwMTEtMDMtMTUgMTI6MzcgIGR0czEyCisyMDExLTA0LTA5IDIxOjU5ICBuYmEKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBSZW1vdmUgYm9ndXMgKExpbnV4KSBkZWZpbmVzCiAKLTIwMTEtMDMtMTUgMTA6NTcgIGR0czEyCisyMDExLTA0LTA5IDIxOjU2ICBuYmEKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIHNubXBsaWIvc25tcC10Yy5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgSEFWRV9UTV9UTV9HTVRPRkYgaXMgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCiAKLTIwMTEtMDMtMTUgMTA6NTYgIGR0czEyCisyMDExLTA0LTA5IDIwOjA4ICBuYmEKIAotICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgY29uZmlndXJlLCAKKyAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgbWFrZSBkZXBlbmQKKyAgIEJpbGwgRmVubmVycyBwYXRjaCB0byBtYWtlIERJU01BTiBQSU5HIGFuZCBUUkFDRVJPVVRFIE1JQlMKKyAgIGNvbXBpbGUgdW5kZXIgTGludXgKIAotMjAxMS0wMy0xNSAxMDo0MiAgZHRzMTIKKzIwMTEtMDQtMDkgMjA6MDQgIG5iYQogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCAgIAotICAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgICAKLSAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCBwZXJsL2FnZW50L2FnZW50LnBtLCAgIAotICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCi0gICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmM6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgU29sYXJpcyBzdXBwb3J0IGZvciBTQ1RQLU1JQgogCi0yMDExLTAzLTE1IDEwOjQxICBkdHMxMgorMjAxMS0wNC0wOSAxOTo1MCAgbmJhCiAKLSAgICogTWFrZWZpbGUudG9wOgorICAgKiBzbm1wbGliL3NubXAtdGMuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFRaIGlzIG9uZSBob3VyIG9mZiBpZiBIQVZFX1RNX1RNX0dNVE9GRiBhbmQgU1lTViAoc3VjaCBpcyBMaW51eCkKKworMjAxMS0wNC0wMSAwMToxMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGR0bHM6IG92ZXJoYXVsIG9mIGRlYnVnCisgICAKKyAgIC0gZHJhc3RpYyByZWR1Y3Rpb24gaW4gbnVtYmVyIG9mIG1lc3NhZ2VzIGFuZCBtc2cgY29tcGxleGl0eQorICAgZm9yIGJhc2ljIGR0bHN1ZHAgdG9rZW4KKyAgIC0gcHJldmlvdXMgbGV2ZWwgb2YgZGV0YWlsIGF2YWlsYWJsZSBieSBhZGRpbmcgOTpkdGxzZHVwIHRva2VuCisKKzIwMTEtMDQtMDEgMDA6NTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOiBjbGVhbiB1cCBjbG9zZTsgY2F0Y2gKKyAgICdjb25uZWN0Jy8nZGlzY29ubmVjdCcKKyAgIAorICAgY29ubmVjdCA9IHdlIGdldCBzdWNjZXNzZnVsbHkgZGVjb2RlZCBzbm1wIGRhdGEKKyAgIGRpc2Nvbm5lY3QgPSAwIGJ5dGUgcmVhZCwgc3NoIHNodXRkb3duIGZsYWcgc2V0CisgICBhZGQgYmlvX2NhY2hlIGZsYWdzIGZvciBjb25uZWN0ZWQvZGlzY29ubmVjdGVkCisgICBjaGVjayBmb3IgbnVsbCBwdHIgYmVmb3JlIGRlcmVmZXJlbmNpbmcKKyAgIGNsb3NlIGhhbmRsaW5nOgorICAgLSBvbmx5IHNlbmQgcXVldWVkIGRhdGEgaWYgd2UgZ290IHRvIGNvbm5lY3RlZCBzdGF0ZQorICAgLSBzZXJpb3VzbHkgcmVkdWNlIHRpbWVvdXQgdG8gd2FpdCBmb3IganVuayByZWFkLiBpIHRoaW5rCisgICB3ZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIKKyAgIC0gcmV0dXJuIGVhcmx5IGlmIGNhY2hlcCBpcyBOVUxMLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRlc3QgaXQKKyAgIHJlcGVhdGVkbHkKKyAgIC0gdXNlIGNvcnJlY3QgbmZkcyB2YWx1ZSBpbiBzZWxlY3QgY2FsbAorCisyMDExLTAzLTMxIDA1OjE3ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbWFrZSB0cnVuayBhbmQgdjUtNi1wYXRjaGVzIGNsb3NlbHkgYWxpZ25lZAorICAgCisgICBtb3N0bHkgY2hhbmdlcyBpbiBkZWJ1ZywgY29va2llIHRyYWNraW5nCisKKzIwMTEtMDMtMjcgMTE6MDggIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIFNpbXBsaWZ5IGFycmF5IHJlc2l6aW5nIHNvbWV3aGF0IGZ1cnRoZXIKKworMjAxMS0wMy0yNyAxMDoyMSAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgRG8gbm90IGFzc2lnbiBuZXdfZGF0YSBpZiB0aGUgdmFsdWUgd29uJ3QgYmUgdXNlZC4KKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZXMuCisKKzIwMTEtMDMtMjcgMTA6MTQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2xlYXIgYSBjaHVuayBvZiBtZW1vcnkgaWYgdGhlIG5leHQgYWN0aW9uCisgICBvbiBpdCBpcyB0bworICAgZmlsbCBpdCBzbyB1c2UgbWFsbG9jIGluc3RlYWQgb2YgY2FsbG9jLgorCisyMDExLTAzLTI3IDEwOjA5ICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBDb250YWluZXJCaW5hcnlBcnJheSByZWFsbHkgY2FuJ3QgaG9sZCBhbnl0aG5nIGJ1dCBwb2ludGVycyBhbmQKKyAgIHRoYXQgbWVhbnMgdGhlCisgICBkYXRhX3NpemUgZmllbGQgaXMgdW5uZWNlc3Nhcnkgc28gSSByZW1vdmVkIGl0LgorCisyMDExLTAzLTI2IDE5OjU1ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi9zbm1wX3NlY21vZC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdjMuYzoKKworICAgQWRkIG1pc3NpbmcgaW5jbHVkZQorCisyMDExLTAzLTI2IDA4OjA3ICBtYWdmcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBVc2UgdGhlIHJpZ2h0IGZlYXR1cmUgbWFjcm8gaW4gb3JkZXIgdG8gbWFrZSBidWlsZHMgd2l0aAorICAgLS1lbmFibGUtaXB2NiAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9VURQSVB2NiBzdWNjZWVkLgorCisyMDExLTAzLTI2IDA4OjAyICBtYWdmcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBSZW1vdmUgZHVwbGljYXRlIGNvcGllcyBvZiBmdW5jdGlvbnMKKworMjAxMS0wMy0yNSAyMDozNSAgcnN0b3J5CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgdHdlYWsgZGVidWcgbWVzc2FnZQorCisyMDExLTAzLTI1IDIwOjMyICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogdXBkYXRlIGNlcnQgdG9rZW4gaGFuZGxpbmcKKyAgIAorICAgLSByZW1vdmUgZGVmWDUwOSBjZXJ0IHRva2VucyAoc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZQorICAgNS42KQorICAgLSB3YXJuaW5ncyBmb3Igb3VyL3RoZWlyIHRva2VucywgcmVjb21tZW5kIHVzaW5nIGxvY2FsL3BlZXIKKworMjAxMS0wMy0yNSAyMDozMSAgcnN0b3J5CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIG1lcmdlIG5ldHNubXBfZHRsc3VkcDYgaW50byBuZXRzbm1wX2R0bHN1ZHAKKyAgIAorICAgdXNlIGFkZHIgc2l6ZSB0byB0ZWxsIHRoZW0gYXBhcnQKKworMjAxMS0wMy0yNSAyMDozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBsb2cgKG9uY2UpIHdhcm5pbmcgd2hlbiBkZXByZWNhdGVkIGZfY3JlYXRlX2Zyb21fdHN0cmluZworICAgdHJhbnNwb3J0IGZ1bmN0aW9uIHVzZWQKKworMjAxMS0wMy0yNSAyMDozMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYzoKKworICAgcmVkdWNlIGNhc3Rpbmc7IG1ha2Ugc3VyZSB0byBmcmVlIHRoZSByaWdodCBwb2ludGVyCisKKzIwMTEtMDMtMjUgMjA6MjkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICByZWR1Y2UgY2FzdGluZworCisyMDExLTAzLTI0IDA2OjE5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIFJlcGxhY2UgYSB2YXJpYWJsZSB3aXRoIGEgY29uc3RhbnQuIE1ha2Ugb25lIG1vcmUgb2lkIGNvbnN0LgorCisyMDExLTAzLTE3IDIxOjA5ICBuYmEKKworICAgKiBtYW4vc25tcGRlbHRhLjEuZGVmOgorCisgICBGb3JtYXR0aW5nIGJvdGNoCisKKzIwMTEtMDMtMTcgMjE6MDcgIG5iYQorCisgICAqIG1pYnMvTWFrZWZpbGUuaW46CisKKyAgIEluc3RhbGwgcmVxdWlyZWQgbWlicworCisyMDExLTAzLTE3IDIxOjA1ICBuYmEKKworICAgKiBtaWJzL3JmY2xpc3Q6CisKKyAgIE5ldyBSRkMgbWlicworCisyMDExLTAzLTE1IDEwOjMxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIFNwZWxsaW5nIGZpeDogcmVnaW5lcmF0ZWQgLT4gcmVnZW5lcmF0ZWQuCisKKzIwMTEtMDMtMTUgMTA6MTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgU2ltcGxpZmllZCByMTk1OTQgKGxlYWstYXQtZXhpdCBmaXgpLgorCisyMDExLTAzLTE1IDA5OjU5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIyMDExMy4KKworMjAxMS0wMy0xNCAwOTozMSAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBGaXggbWFpbiBhZ2VudCBzZWxlY3QgY2FsbCB0byB1c2UgdGhlIHJlbmFtZWQgQVBJIHJvdXRpbmUuCisKKzIwMTEtMDMtMTMgMjA6MDkgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBCcmluZyB0aGUgbmFtaW5nIG9mIHRoZSBsYXJnZV9mZF9zZXQgc2VsZWN0IGNhbGwgaW50bworICAgbGluZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBBUEkuCiAKIDIwMTEtMDMtMTIgMDY6NTkgIHJzdG9yeQogCkBAIC01NjMsOCArMzIwMzIsNyBAQAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAogICAgICAgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKLSAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5Lmg6CisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmM6CiAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2Ugcm91dGUgdGFibGVzIGZyb20KICAgIFN0ZXBoZW4gSGVtbWluZ2VyCkBAIC01NzMsMTMgKzMyMDQxLDgyIEBACiAgICBzdWJqZWN0CiAgICBpcC1mb3J3YXJkLW1pYiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHM7IHBhcnQgNCBuZWVkcyBtb3JlIHdvcmsKIAotMjAxMS0wMy0xMSAxMToxMSAganNhZnJhbmVrCisyMDExLTAzLTExIDE0OjQzICByc3RvcnkKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcmFjZSBjb25kaXRpb24gaW4gaHJTV1J1blRhYmxlCi0gICBUcmVhdCB0aGUgcmVhZHMgZnJvbSAvcHJvYy88cGlkPi8qIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQKLSAgIGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZy4KKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBtb3JlIG9wZW5zc2wgZXJyb3IgY2FzZXMgd2hlcmUgd2UgY2hlY2sgZm9yCisgICBsb2NhbCBjZXJ0CisKKzIwMTEtMDMtMTEgMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorCisgICBNaW5HVzogZHNrVGFibGU6IFJlcG9ydCB6ZXJvIGZvciB1bmltcGxlbWVudGVkIGZpZWxkcyBpbnN0ZWFkIG9mCisgICByYW5kb20gZGF0YS4KKworMjAxMS0wMy0xMSAwODo0MiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCdWlsZHMgd2l0aCBtb3N0IHJlY2VudCBNaW5HVyAoaGF2aW5nICNkZWZpbmUKKyAgIGxvY2FsdGltZV9yKS4KKworMjAxMS0wMy0xMSAwMzowOCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcmVmaW5lIGNlcnQgZGVidWdnaW5nOyByZW1vdmUgdW51c2VkIGZ1bmN0aW9uCisKKzIwMTEtMDMtMTAgMjE6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMyMDU3NjU6IGhhbmRsZSByZWNvbmZpZyBmb3IgY2VydFNlY05hbWUKKyAgIHRva2VuCisKKzIwMTEtMDMtMTAgMjA6MDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgU3BlbGxpbmcgZml4IGluIGEgc291cmNlIGNvZGUgY29tbWVudDogbWVzc2dlcyAtPiBtZXNzYWdlcy4KKworMjAxMS0wMy0xMCAxOTo1NSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWlub3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uCisgICBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKS4KKworMjAxMS0wMy0xMCAxOTo0OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMyMDM4MDY6IEF2b2lkIHRoYXQgdGhlIG1haW4gYWdlbnQKKyAgIHByb2Nlc3NpbmcgbG9vcCAtIHdoZW4gdXNpbmcgbW9yZSB0aGFuIEZEX1NFVFNJWkUgZmlsZQorICAgZGVzY3JpcHRvcnMgLSBjYW4gY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gYnkgaW52b2tpbmcgc2VsZWN0KCkuCisKKzIwMTEtMDMtMTAgMTk6NDMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogQWRkIHRoZSBmdW5jdGlvbgorICAgbmV0c25tcF9sYXJnZV9zZWxlY3QoKS4KKworMjAxMS0wMy0xMCAxODo1NSAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYzoKKworICAgQWRkZWQgYSBtaW5pbWFsIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9sYXJnZV9mZF9zZXQuCisKKzIwMTEtMDMtMTAgMTg6NTIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1ha2UKKyAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIGNsZWFyIGFsbCByZWxldmFudCBmaWxlCisgICBkZXNjcmlwdG9ycy4KIAogMjAxMS0wMy0xMCAxNTo1MSAgZHRzMTIKIApAQCAtNTg4LDYgKzMyMTI1LDI4OCBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudCBoYW5kbGluZyBvZiBUWgogICAgb2Zmc2V0cwogCisyMDExLTAzLTEwIDE1OjQwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlOgorCisgICBJZ25vcmUgb2JqZWN0IGZpbGVzIGFuZCBsaWJyYXJpZXMKKworMjAxMS0wMy0xMCAxNTowNSAgZHRzMTIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHM6CisKKyAgIElnbm9yZSBvYmplY3QgZmlsZXMgYW5kIGxpYnJhcmllcworCisyMDExLTAzLTEwIDE0OjMyICBoYXJkYWtlcgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBtYWtlIHZhcmlhYmxlIG5hbWVzIG1hdGNoCisKKzIwMTEtMDMtMTAgMTQ6MjggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmM6CisKKyAgIEZpeGVkIHR3byBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMS0wMy0xMCAxNDoyNCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgZml4ZWQgaW5zdGFsbGF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIG9wdGlvbmFsIFNFVCBwcm9ncmFtcworCisyMDExLTAzLTA4IDAwOjUzICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6CisKKyAgIGNobW9kIGEreAorCisyMDExLTAzLTA4IDAwOjE1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOgorCisgICBwcmludCBhbiBlcnJvciBpZiB0aGUgZW5kIG9mIGEgZmlsZSB3YXMgcmVhY2hlZCBhbmQgd2UncmUgbm90CisgICBiYWNrCisgICBpbnRvIHRoZSBzdGF0ZSB3ZSBjYW4gd3JpdGU7IG90aGVyd2lzZSBhIGNsb3NpbmcgI2lmZGVmIGlzCisgICBtaXNzaW5nLgorCisyMDExLTAzLTA4IDAwOjE1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBmaXggZW5kaWYgY29tbWVudCB0byBtYXRjaCB0aGUgb3BlbmluZyBpZmRlZgorCisyMDExLTAzLTA4IDAwOjE1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOgorCisgICByZXNldCB0aGUgY2Fud3JpdGUgZmxhZyBmb3IgZXZlcnkgZmlsZQorCisyMDExLTAzLTA4IDAwOjE1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6CisKKyAgIHRlbXBvcmFyaWx5IGxlYXZlIGluIGhlYWRlciBmaWxlcworCisyMDExLTAzLTA4IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOgorCisgICBjaGFuZ2UgdGhlIHVuaXF1ZSBmaWxlIGNoZWNrIHRvIG9uZSB0aGF0IGlzIG5vdCBpbiB0aGUgbWliZ3JvdXAKKyAgIGRpcmVjdG9yeQorCisyMDExLTAzLTA4IDAwOjE0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHksICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHkvVDAxNDFzbm1wdjJjc2V0ZmFpbF9zaW1wbGU6CisKKyAgIGEgdGVzdCBmb3IgZW5zdXJpbmcgdGhlIGFnZW50IHJlamVjdHMgU0VUIHJlcXVlc3RzIHdpdGgKKyAgIC0tZW5hYmxlLXJlYWQtb25seQorCisyMDExLTAzLTA4IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZToKKworICAgYWRkIGJhY2sgaW4gdGhlIHN0b3BhZ2VudCBjb21tYW5kCisKKzIwMTEtMDMtMDggMDA6MTQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMXBkdV90eXBlX2NsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDNwZHVfcGFyc2VfY2xpYi5jOgorCisgICB1bml0IHRlc3RzIHdyaXRlbiBmb3IgdGhlIHJlYWQtb25seSBzdXBwb3J0IGNvbnZlcnRlZCB0byB3b3JrCisgICB3aXRoIG9yIHdpdGhvdXQgcmVhZC1vbmx5CisKKzIwMTEtMDMtMDggMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOgorCisgICBkb24ndCBydW4gdGhlIHNldCB0ZXN0IGlmIG5vX3dyaXRlX3N1cHBvcnQgaXMgdHVybmVkIG9uCisKKzIwMTEtMDMtMDggMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZToKKworICAgc2tpcCBpZiBub193cml0ZV9zdXBwb3J0CisKKzIwMTEtMDMtMDggMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOgorCisgICBBIG5ldyB0ZXN0IHRvIGNoZWNrIHdoZXRoZXIgU05NUHYyYyBTRVRzIHRvIHN5c0NvbnRhY3Qgd29yayBhcworICAgZXhwZWN0ZWQKKworMjAxMS0wMy0wOCAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnOgorCisgICBhbGxvdyBmb3IgdjJjIFNFVCBzdXBwb3J0IHRlc3RpbmcKKworMjAxMS0wMy0wOCAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgQWxsb3cgZm9yIHNpbmdsZSBxdW90ZXMgZm9yIHZhY20gY29udGV4dCBuYW1lIHF1b3RpbmcgdG9vCisKKzIwMTEtMDMtMDcgMTk6MTkgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlOgorCisgICBmaXggdGhlIGNvbmZpZ3VyZSB0ZXN0cyB0byBpbmNsdWRlIHRoZSB3b3JkIHRlc3QgaW4gdGhlIHRlc3QKKworMjAxMS0wMy0wNyAxOToxOCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIGZpeCB0aGUgY29uZmlndXJlIHRlc3RzIHRvIGluY2x1ZGUgdGhlIHdvcmQgdGVzdCBpbiB0aGUgdGVzdAorCisyMDExLTAzLTA3IDE5OjE4ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6CisKKyAgIEFkZGVkIGFuIGFubm95aW5nbHkgbG9uZyBsaXN0IG9mIGV4Y2VwdGlvbnMgdGhhdCBuZWVkcyB0byBiZQorICAgYXV0b21hdGVkCisKKzIwMTEtMDMtMDcgMTk6MTggIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczoKKworICAgQSBxdWljayBwZXJsIHNjcmlwdCB0byByZW1vdmUgdW5uZWVkZWQgY29kZSBtb2R1bGVzIGZyb20gdGhlCisgICBtb2R1bGVzIGRpcmVjdG9yeQorCisyMDExLTAzLTA3IDE5OjE4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBtb3JlIGltcHJvdmVtZW50cyAocmVtb3ZlbWVudHMpIGZvciBmZWF0dXJpemF0aW9uIGFuZCByZWFkLW9ubHkKKyAgIHN1cHBvcnQKKworMjAxMS0wMy0wNyAxNzoxOSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMxOTU1Mzc6IE1pbm9yIGJpbmFyeV9hcnJheSBjb250YWluZXIKKyAgIHNvcnQgb3B0aW1pemF0aW9uCisKKzIwMTEtMDMtMDYgMTk6NDcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOgorCisgICBUYWJzIHRvIHNwYWNlcworCisyMDExLTAzLTA2IDExOjI4ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBDb25maWd1cmUgY2hlY2sgZm9yIGdldGhvc3RuYW1lMgorICAgVXNlIGdldGFkZHJpbmZvIGlmIGF2YWlsYWJsZS4gTm93IHdvcmtzIGZvciBTb2xhcmlzIChhbmQKKyAgIFdpbmRvd3M/KQorCisyMDExLTAzLTA1IDE5OjE2ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRlc3QuYzoKKworICAgQWRkIGRyb3BwZWQgfHwncyBmcm9tIHIyMDA3MgorCisyMDExLTAzLTA1IDEyOjUwICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYzoKKworICAgQ2xlYW4gdXAsIGFuZCBjb3NvbGlkYXRlIHJlc3VsdCB0YWJsZSByb3cgY3JlYXRpb24gaW50byBhIG5ldworICAgZnVuY3Rpb24uCisgICBTYXZlcyAyMDAgbGluZXMgb2YgY29kZSwgd2l0aCAoaG9wZWZ1bGx5KSBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZQorCisyMDExLTAzLTA1IDA2OjE3ICBoYXJkYWtlcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXB0ZXN0LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgZG9uJ3QgYnVpbGQgU0VUIHJlbGF0ZWQgYXBwcyB3aXRoIC0tZW5hYmxlLXJlYWQtb25seQorCisyMDExLTAzLTA1IDA2OjE2ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgZml4IGlzc3VlcyB3aXRoIGNvbWJpbmluZyAtLWVuYWJsZS1taW5pbWFsaXN0IGFuZAorICAgLS1lbmFibGUtcmVhZC1vbmx5CisKKzIwMTEtMDMtMDUgMDY6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOgorCisgICBiZXR0ZXIgb3V0cHV0IGZvciBmaW5kaW5nIG9iamVjdCBzeW1ib2xzLgorCisyMDExLTAzLTA0IDIxOjU2ICBiYWVybQorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOgorCisgICBsYXN0IGNvbW1pdDogY2hhbmdlcyB0byBhbGxvdyBwYXJzaW5nIG9mIGZlYXR1ZXJzIGZpbGVzIHRvIGdldAorICAgYWxsIG1pbmltYWxpc3QgdGFncyB3aGljaCBhcmUgdGhlbiBwcm9jZXNzZWQgZm9yIHJlbW92YWwKKyAgIAorICAgdGhpcyBjb21taXQ6IGNoYW5nZWQgY29tbWVudHMvd2hpdGUgc3BhY2UKKworMjAxMS0wMy0wNCAxOToyNyAgYmFlcm0KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKKworICAgYWRkZWQgbm9fd3JpdGUgc3VwcG9ydCB0byBleHRlbmQuYworCisyMDExLTAzLTA0IDE5OjI2ICBiYWVybQorCisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKKworICAgQWRkZWQgbWlzc2luZyAjZW5kaWYgY29tbWVudCBmb3IgcmVtb3ZlIGlmZGVmIGNvZGUgc3VwcG9ydAorCisyMDExLTAzLTA0IDE5OjI0ICBiYWVybQorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOgorCisgICBhZGRlZCBjaGFuZ2VzIHRvIGFsbG93IGNvZGUgcmVtb3ZhbCBpbi1wbGFjZQorICAgKGkuZS4gZG9lcyBub3QgcmVxdWlyZSBjcmVhdGluZyBhIG5ldyBmaWxlKQorCisyMDExLTAzLTA0IDE5OjIzICBiYWVybQorCisgICAqIGxvY2FsL21pbmltYWxpc3QvaWdub3JlLnJlZ2V4cDoKKworICAgYWRkaW5nIGEgaWdub3JlLnJlZ2V4cCBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgd2l0aAorICAgcmVtb3ZlaWZkZWZjb2RlLnBsCisKKzIwMTEtMDMtMDQgMTk6MjAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBhZGQgYSBvdXRnb2luZyBsaW5rIHRvIHRoZSBwYXJlbnQgbWFya2luZyBwYWdlCisKKzIwMTEtMDMtMDQgMTk6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBBZGRlZCBhIHdpa2kgb3V0cHV0IG1vZGUKKworMjAxMS0wMy0wNCAxOToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIE5vdGUgdGhhdCB0aGUgb3JnIG91dHB1dCBpcyB0aGUgZGVmYXVsdCBpbiB0aGUgaGVscCBvdXRwdXQKKwogMjAxMS0wMy0wNCAxNTowOSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmM6CkBAIC01OTUsNiArMzI0MTQsNDgwIEBACiAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluCiAgICBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIG9uIExpbnV4CiAKKzIwMTEtMDMtMDQgMTQ6NDkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZWNsYXNzaWZpY2F0aW9uIG9mIHRoZSByZW1haW5pbmcgZmVhdHVyZXMgaW50byBhIGhpZXJhcmNoeQorCisyMDExLTAzLTA0IDE0OjQ5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGRvbid0IGRvdWJsZS1kZWNsYXJlIGNlcnRfdXRpbHMKKworMjAxMS0wMy0wNCAxNDo0OSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIHRoZSBpcGFkZHJlc3NfbGludXggd2FzIGluY29ycmVjdGx5IG1hcmtlZCBhcyBuZWVkaW5nCisgICBjZXJ0X2ZpbmdlcnByaW50cworCisyMDExLTAzLTA0IDE0OjQ4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIHB1dCB0aGUgYWdlbnRfcmVnaXN0cnkgZmVhdHVyZSBpbiBsaWJuZXRzbm1wYWdlbnQuCisKKzIwMTEtMDMtMDMgMTA6NTYgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBEZXByZWNhdGVkIGxpYnNubXAuZGVmIC0gYWRkIE5FVFNOTVBfSU1QT1JUIHRvCisgICBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zdGVhZCB0byBleHBvcnQgYSBmdW5jdGlvbiBmcm9tCisgICBuZXRzbm1wLmRsbC4KKworMjAxMS0wMy0wMyAxMDo0OCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgQWRkZWQgbWlzc2luZyBORVRTTk1QX0lNUE9SVCBkZWNsYXJhdGlvbnMuCisKKzIwMTEtMDMtMDMgMTA6MjQgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmLCB3aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmOgorCisgICBSZW1vdmVkIHR3byBvYnNvbGV0ZSBXaW4zMiBmaWxlcy4KKworMjAxMS0wMy0wMyAxMDowOSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIFRyaXZpYWwgY29tbWVudCBmaXg6IHNubXBJUHY2QmFzZURvbWFpbi5jIGNvbnRhaW5zIElQdjYgYmFzZQorICAgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zIGluc3RlYWQgb2YgSVB2NC4KKworMjAxMS0wMy0wMiAxOToxMCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliOgorCisgICBBZGRlZCBzbm1wc21fc2h1dGRvd24uaCB0byB0aGUgU3VidmVyc2lvbiBpZ25vcmUgbGlzdCBiZWNhdXNlCisgICBpdCdzIGEgZ2VuZXJhdGVkIGZpbGUuCisKKzIwMTEtMDMtMDIgMTU6NTggIGJ2YXNzY2hlCisKKyAgICogd2luMzIvY29uZmlnLmg6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgZmlsZS4KKworMjAxMS0wMy0wMiAxNTo1MiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsIHdpbjMyL3NubXBzbV9zaHV0ZG93bi5oLCAgCisgICAgICAgd2luMzIvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmg6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIFZpc3VhbCBTdHVkaW8gYWZ0ZXIgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUKKyAgICJmZWF0dXJlIiBmZWF0dXJlLgorCisyMDExLTAzLTAyIDE1OjQ4ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3NubXBzbV9pbml0Lmg6CisKKyAgIFJlbW92ZWQgYSBtaXNsZWFkaW5nIGNvbW1lbnQuCisKKzIwMTEtMDMtMDIgMDg6NDAgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIENvcnJlY3QgdGhlIGNoZWNrIG9mIHdldGhlciB1c20gc2VjdXJpdHkgaXMgZW5hYmxlZC4KKyAgIFJlZ2VuZXJhdGUgY29uZmlndXJlLgorCisyMDExLTAzLTAyIDA4OjM5ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlZ2VuZXJhdGUKKworMjAxMS0wMy0wMiAwODoyMSAgbWFnZnIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMKKworMjAxMS0wMy0wMiAwNzoxOSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMKKworMjAxMS0wMy0wMiAwNzoxOSAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBTcGxpdCB0aGUgY29udGFpbmVyX2NvbXBhcmVfZnVuY3Rpb25zIGZlYXR1cmUgaW50bworICAgY29udGFpbmVyX2NvbXBhcmVfbWVtLAorICAgY29udGFpbmVyX2NvbXBhcmVfbG9uZywgY29udGFpbmVyX2NvbXBhcmVfdWxvbmcsCisgICBjb250YWluZXJfY29tcGFyZV9pbnQzMiBhbmQKKyAgIGNvbnRhaW5lcl9jb21wYXJlX3VpbnQzMgorICAgVW5pZnkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29tcGFyZSBmdW5jdGlvbnMgZnVydGhlci4KKworMjAxMS0wMy0wMiAwNzoxOSAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBDaGFuZ2UgdGhlIHNwZWxsaW5nIG9mIHRoZSBjb250YWluZXJfY29tcGFyZV9jc3RyaW5nIGZlYXR1cmUgdG8KKyAgIGNvbnRhaW5lcl9uY29tcGFyZV9jc3RyaW5nIGFzIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMKKyAgIGd1YXJkZWQgYnkgdGhhdAorICAgYXR0cmlidXRlLgorCisyMDExLTAzLTAyIDA3OjE3ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBBZGQgdGhlIG1pc3NpbmcgcmVwbGFjZW1lbnQgbWFjcm8gZm9yIHNubXBfaW5pdF9zdGF0aXN0aWNzCisKKzIwMTEtMDMtMDIgMDc6MTYgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieSB0YWtlcyB0d28gYXJndW1lbnRzIHNvIGxldCB0aGUKKyAgIHJlcGxhY2VtZW50IG1hY3JvCisgICB0YWtlIHR3byBhcmd1bWVudHMgYXMgd2VsbC4KKworMjAxMS0wMi0yNyAxMzo1NSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6CisKKyAgIEZpeCB0eXBvIGluIHIxOTk5MAorCisyMDExLTAyLTI2IDEwOjUzICBtYWdmcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjazoKKworICAgUmVtb3ZlIGxpbmVzIHN0YXJ0aW5nIHdpdGggI2RlZmluZSBpbiB0aGUgb3V0cHV0IG9mIHRoZQorICAgcHJlcHJvY2Vzc29yCisgICBXaGVuIGdjYyAtRSBpcyBjYWxsZWQgd2l0aCAtZ2dkYjMgKG9yIC1kRCkgdGhlbiBhbGwgdGhlIG1hY3JvCisgICBkZWZpbml0aW9ucyBhcmUKKyAgIHBhc3NlZCB0aHJvdWdoIHRoZSBwcmVwcm9jZXNzb3IgYW5kIHRoYXQgbWVzc2VzIHVwIG91cgorICAgcHJvY2Vzc2luZy4KKworMjAxMS0wMi0yNiAxMDo1MiAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5ydWxlczoKKworICAgUHV0IHRoZSBnZW5lcmF0ZWQgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSwgbm90IHRoZSBzb3VyY2UgdHJlZS4KKworMjAxMS0wMi0yNiAwMToyMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBtb3ZlZCBhIGJ1bmNoIG9mIGZlYXR1cmVzIGludG8gdGhlIGxpYm5ldHNubXBtaWJzIGZlYXR1cmUgc2V0LgorCisyMDExLTAyLTI2IDAxOjIyICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF90cmFwLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsICAgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzLCBzbm1wbGliL21pYi5jOgorCisgICBjbGFzc2lmaWVkIGxpYm5ldHNubXBhZ2VudCBmZWF0dXJlcworCisyMDExLTAyLTI2IDAxOjIxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGlicmFyaWVzIChzbm1wbGliIGZpcnN0KQorCisyMDExLTAyLTI2IDAxOjIxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBvdXRwdXQgY2xlYW51cCBhbmQgYWRkZWQgYWdlbnQtbWlicyBhbmQgbG9nZ2luZyBvcHRpb25zCisKKzIwMTEtMDItMjYgMDE6MjEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGFkZCBhIGRlZmF1bHQgc2V0IG9mIGFyZ3VtZW50cworICAgY2FsY3VsYXRlIHJlc3VsdGluZyBzaXplcworCisyMDExLTAyLTI2IDAxOjIxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIEFkZGVkIGEgbWlzc2luZyA7CisKKzIwMTEtMDItMjYgMDE6MjAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIHByZWZpeCB0aGUgb3V0cHV0IGZpbGVzIHdpdGggYSBudW1iZXIgdG8gaW5kaWNhdGUgb3JkZXIKKworMjAxMS0wMi0yNiAwMToyMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgc3lzdGVtIGV4ZWN1dGlvbnMKKworMjAxMS0wMi0yNiAwMToyMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZW5hYmxlIGJ1aWxkaW5nIG9mIHRoZSByZXN1bHRpbmcgY29tYmluYXRpb25zCisgICBBZGQgYSAtbiBmbGFnIGZvciBkcnktcnVucworCisyMDExLTAyLTI2IDAxOjIwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBlbmFibGUgdGhlIC10IHRhZyBmb3IgbGltaXRpbmcgdHlwZXMKKworMjAxMS0wMi0yNiAwMToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgQWRkZWQgYXJndW1lbnQgcGFyc2luZyBhbmQgYXJndW1lbnRzIGZvciBzZWxlY3RpbmcgYW5kIGxpc3RpbmcKKyAgIHR5cGVzCisKKzIwMTEtMDItMjYgMDE6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGdlbmVyYXRlIGNvbmZpZ3VyZSBzY3JpcHQgYXJndW1lbnRzIGZyb20gc3BlY3MKKworMjAxMS0wMi0yNiAwMToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgYWRkZWQgYSBidW5jaCBvZiBuZXcgZmVhdHVyZSBvcHRpb25zIGFuZCBjbGVhbmVkIHVwIGEgYml0CisKKzIwMTEtMDItMjYgMDE6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGFkZGVkIGEgbmV3IChub3QgeWV0IHdvcmtpbmcpIHNjcmlwdCB0byB0ZXN0IHNpemluZyBvZiB2YXJpb3VzCisgICBhcmd1bWVudCBzZXRzCisKKzIwMTEtMDItMjYgMDA6MjYgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgU2ltcGxpZnkgdGhlIGNvZGUuIFVuaWZ5IHNvbWUgZGVidWcgbG9ncy4KKworMjAxMS0wMi0yNiAwMDoxOSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIGEgZmV3IHZhcmlhYmxlcworCisyMDExLTAyLTI2IDAwOjE2ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIFJlbW92ZSBzb21lIHVudXNlZCBpbmNsdWRlcy4KKworMjAxMS0wMi0yNiAwMDoxNSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGluaXRpYWxpemUvdW5pbml0aWFsaXplIG1vZHVsZXMgd2l0aCA2NAorICAgY2hhcmFjdGVyIG5hbWVzIGFuZCBub3Qgc3VmZmVyIHdpbGQgd3JpdGVzLgorCisyMDExLTAyLTI2IDAwOjEyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIENvZGUgcmVzdHJ1Y3R1cmluZyAtIHB1dCB0aGUgbWFuYWdlZCByb3V0aW5lcyBiZWZvcmUgdGhlCisgICBtYW5hZ21lbnQgY29kZS4KKworMjAxMS0wMi0yNiAwMDoxMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oOgorCisgICBDSEFOR0VTOiBsaWJuZXRzbm1wbWliczogTWFrZSBhbGwgZnVuY3Rpb25zIGluIHRoZSBkbG1vZCBtb2R1bGUKKyAgIHRoYXQgZG9uJ3QgaGF2ZSB0byBiZSBwdWJsaWMgc3RhdGljCisKKzIwMTEtMDItMjYgMDA6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgUmVuYW1lIGRlaW5pdF9kbG1vZCB0byBzaHV0ZG93bl9kbG1vZCBhcyB0aGF0IGlzIHdoYXQgaXQgcmVhbGx5CisgICBpcyBhYm91dC4KKworMjAxMS0wMi0yNSAxODoyNCAgYmFlcm0KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jOgorCisgICBhZGRpbmcgbWluaW1hbGlzdCBpZmRlZnMgdG8gbmV0LXNubXAtdmFjbSBtaWIKKworMjAxMS0wMi0yNSAxNjowOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIHByb3Blcmx5IGhhbmRsZSB0d2luIGNoaWxkcmVuOyBhbHNvIHNvcnQgdGhlIGNoaWxkIGxpc3QKKyAgIGFscGhhYmV0aWNhbGx5LgorCisyMDExLTAyLTI1IDE2OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIEkgc3VwcG9zZSBsb2dnaW5nIHNob3VsZCBwcm9iYWJseSBkZWZhdWx0IHRvIGJlaW5nIGEgd2FudGVkCisgICBvcHRpb24gOi0pCisKKzIwMTEtMDItMjUgMTY6MDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBvcmctbGluayB0aGUgZmlsZXMgaW4gdGhlIG91dHB1dAorCisyMDExLTAyLTI1IDE2OjA4ICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5ydWxlcywgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluLCAgIAorICAgICAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjaywgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgbWFrZSB0aGUgZmVhdHVyZXMtY2hlY2sgc2NyaXB0IHRyYWNrIHRoZSBmdWxsIHNvdXJjZSBwYXRoCisKKzIwMTEtMDItMjUgMTY6MDggIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBjaGFuZ2UgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIG1hdGNoIHRoYXQgaXQncyBwcmludGluZyB0byBvcmctbW9kZQorICAgYXQgdGhlIG1vbWVudC4KKworMjAxMS0wMi0yNSAxNjowOCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9maWxlX3V0aWxzLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvb2lkX3N0YXNoLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgbGFzdCBvZiB0aGUgZmVhdHVyZSBjbGFzc2lmaWNhdGlvbiBpbiBsaWJuZXRzbm1wCisKKzIwMTEtMDItMjUgMTY6MDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvc2NhcGkuYzoKKworICAgbWFrZSB0aGUgdXNtX3N1cHBvcnQgdXRpbGl0aWVzIHNlbGYtZGVjbGFyZSB0aGVtc2VsdmVzIGFzCisgICBjaGlsZHJlbiB0bworICAgbWFrZSBzdXJlIHRoZXkncmUgcHJvcGVybHkgaW5jbHVkZWQgZHVyaW5nIGRlcGVuZGVuY3kgb3JkZXJpbmcKKworMjAxMS0wMi0yNSAxNjowNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgCisgICAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvZGF0YV9saXN0LmMsICAgCisgICAgICBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsICAgCisgICAgICBzbm1wbGliL2ZpbGVfdXRpbHMuYywgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NubXB1c20uYzoKKworICAgc3VwZXJzdHJ1Y3R1cmFsaXphdGlvbml6aW5nIHRoZSBmZWF0dXJlcworCisyMDExLTAyLTI1IDE2OjA3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsICAKKyAgICAgICBzbm1wbGliL3NubXBfZW51bS5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvc3lzdGVtLmMsIAorICAgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jOgorCisgICBzaWduaWZpY2FudCBwYXJlbnQvY2hpbGQgZmVhdHVyZSBjbGFzc2lmaWNhdGlvbgorCisyMDExLTAyLTI1IDE2OjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIGNsYXNzaWZ5IGEgZmV3IGNvbXBvbmVudHMgaW50byBhIHRvcC1sZXZlbCBsaWJuZXRzbm1wIGNvbXBvbmVudAorCisyMDExLTAyLTI1IDE2OjA2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIHN0cnVjdHVyaXplIHRoZSB1c20gZmVhdHVyZXMKKworMjAxMS0wMi0yNSAxNjowNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBzdHJ1Y3R1cmUgdGhlIGNvbnRhaW5lciBmZWF0dXJlcyBpbnRvIGEgaGllcmFyY2h5CisKKzIwMTEtMDItMjUgMTY6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgZ3JvdXAgdGhlIGxvZ2dpbmcgaGFuZGxlcnMgdW5kZXIgYSBwYXJlbnQgZmVhdHVyZQorCisyMDExLTAyLTI1IDE2OjA1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgZml4IHRoZSBleHBlY3QgYXJndW1lbnQgY291bnQKKworMjAxMS0wMi0yNSAxNjowNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIGZpeCB0aGUgbmFtZSBvZiB0aGUgZXhwZWN0ZWQgaW5wdXQgZmlsZQorCisyMDExLTAyLTI1IDE2OjA1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgYXJndW1lbnQgcGFyc2luZyBhbmQgdXNhZ2UoKSBvdXRwdXQKKworMjAxMS0wMi0yNSAxNjowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCBzbm1wbGliL29pZF9zdGFzaC5jOgorCisgICAtIGFkZGVkIHR3byBvaWRfc3Rhc2ggZnVuY3Rpb25zIGFzIGluZGl2aWR1YWwgZmVhdHVyZXMKKyAgIC0gY2xlYW5lZCB1cCBzb21lIHdhcm5pbmdzIGluIHRoZSB0YWJsZV9pdGVyYXRvciBjb2RlCisKIDIwMTEtMDItMjUgMTI6NTUgIGR0czEyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CkBAIC02MTIsNiArMzI5MDUsMTYxIEBACiAKICAgIEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdCBhdmFpbGFibGUgb3Igc2V0LgogCisyMDExLTAyLTI1IDAwOjQwICBiYWVybQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaDoKKworICAgYWRkaW5nIGlmZGVmIGNvZGUgZm9yIG1pbmltYWxpc3Qgc3VwcG9ydCBvZiBkaWZmbWFuIG1pYgorCisyMDExLTAyLTI0IDE5OjIxICBiYWVybQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaDoKKworICAgQWRkaW5nIG1pbmltYWxpc3QgaWZkZWZzIHRvIGhvc3QgcmVzb3VyY2UgbWliCisKKzIwMTEtMDItMjQgMDU6NDYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBtYXJrIHRoZSBkYXRhX2xpc3QgZnVuY3Rpb24gdGhhdCdzIG9ubHkgdXNlZCBpbiBzdGFjaF9jYWNoaW5nIGFzCisgICBhIGZlYXR1cmUKKworMjAxMS0wMi0yNCAwNTo0NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6CisKKyAgIHdob29wcy4KKworMjAxMS0wMi0yNCAwNTo0NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6CisKKyAgIG1vcmUgbWlzc2luZyBzdGFzaCByZWZlcmVuY2VzCisKKzIwMTEtMDItMjQgMDU6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOgorCisgICBpZmRlZmVkL2ZlYXR1cmVkIG91dCBhIG1pc3Npbmcgc3Rhc2hfY2FjaGUgc2VjdGlvbgorCisyMDExLTAyLTI0IDA1OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgbWFrZSB0aGUgcHJlZml4X2luZm8gbW9yZSBoaWVyYXJjaGljYWwgYW5kIHN1Yi1mZWF0dXJlIHRoZSB1bnVzZWQKKyAgIG9uZQorCisyMDExLTAyLTI0IDA1OjQ1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZToKKworICAgZG8gaW5jbHVkZSB0aGUgcGVybC9weXRob24gY29kZSB3aGVuIHNlYXJjaGluZyBmb3IgZmlsZXMKKworMjAxMS0wMi0yNCAwNTo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIG1ha2UgdGhlIHNlbWktdXNlZCB0YWJsZV90ZGF0YSBmdW5jdGlvbnMgY2hpbGRyZW4gb2YKKyAgIHRhYmxlX3RkYXRhX2FsbAorICAgaW5zdGVhZCBvZiBqdXN0IHRhYmxlX3RkYXRhCisKKzIwMTEtMDItMjMgMjI6MDAgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBDb3JyZWN0IHR5cG8KKworMjAxMS0wMi0yMyAyMTo1NCAgbWFnZnIKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIENvcnJlY3QgdHlwbworCisyMDExLTAyLTIzIDIxOjEwICBuYmEKKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgcHJvcGVyIGluY2x1ZGUgb2YgcHJvdG90eXBlCisKKzIwMTEtMDItMjMgMjE6MDcgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIGNvbXBhdCBzb21lIGZlYXR1cmUgaGVhZGVyIGNoaWNrZW4gYW5kIGVnZyBwcm9ibGVtcworCisyMDExLTAyLTIzIDE1OjI3ICBuYmEKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgdW5zaWduZWQganVnZ2xpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzCisKKzIwMTEtMDItMjMgMTU6MjMgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgdW5zaWduZWQganVnZ2xpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzCisKKzIwMTEtMDItMjMgMTU6MjAgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOgorCisgICBFbmFibGUgKHByb2JhYmx5IGZvcmdvdHRlbikgaXBBZGRyZXNzUHJlZml4VGFibGUKKworMjAxMS0wMi0yMyAxNDozMCAgaGFyZGFrZXIKKworICAgKiAgbG9jYWwvbWluaW1hbGlzdCwgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrLCAgIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzLCAgIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZSwgICAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZSwgICAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOgorCisgICBhZGRlZCBvdGhlciBtaXNzaW5nICduZXcnIGZpbGVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWluaW1hbGlzdAorICAgcGF0Y2ggZmlsZQorCisyMDExLTAyLTIzIDA5OjU0ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jOgorCisgICBMb2FkaW5nIElQdjYgZGF0YSBpcyBhIG5vLW5vIHdoZW4gSVB2NiBub3QgZW5hYmxlZAorCiAyMDExLTAyLTIzIDA5OjM2ICBuYmEKIAogICAgKiBhcHBzL3NubXB0YWJsZS5jOgpAQCAtNjI1LDQ0ICszMzA3MywzNDcgQEAKIAogICAgRnJlZUJTRCA4IHN1cHBvcnQKIAorMjAxMS0wMi0yMyAwMTo0OCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg6CisKKyAgIGFkZGVkIG1pc3NpbmcgbmV0LXNubXAtZmVhdHVyZXMuaAorCisyMDExLTAyLTIzIDAwOjAxICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIE1ha2VmaWxlLnRvcCwgYWdlbnQvTWFrZWZpbGUuaW4sICAgCisgICAgICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgCisgICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCwgCisgICAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgYXBwcy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFwcHMvYWdlbnR4dHJhcC5jLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCAgCisgICAgICAgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIAorICAgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgcGVybC9PSUQvT0lELnhzLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQueHMsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAKKyAgICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsICAgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCAgIAorICAgICAgc25tcGxpYi9maWxlX3V0aWxzLmMsIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9rZXl0b29scy5jLCAgIAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL29pZF9zdGFzaC5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9lbnVtLmMsIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3NlY21vZC5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvc25tcHVzbS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdjMuYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90ZXh0X3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3VjZF9jb21wYXQuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGU6CisKKyAgIE5FV1M6IHBhY2thZ2luZzogRW5hYmxlIG1pY3JvLWFuZC1tYWNyby1mZWF0dXJlIG1hbmFnZW1lbnQgd2l0aGluCisgICBOZXQtU05NUDsgdGhpcyBhZGRzIGEgbnVtYmVyIG9mIG5ldyBmbGFncyB0byBjb25maWd1cmUKKyAgICgtLWVuYWJsZS1taW5pbWFsaXN0IGFuZCAtLWVuYWJsZS1yZWFkLW9ubHkpLiBUaGVzZSBjaGFuZ2VzIGFyZQorICAgZGVzaWduZWQgdG8gcmVtb3ZlIG11Y2ggb2YgdGhlIGlubGluZSBjb2RlIHRoYXQgaXNuJ3QgYWx3YXlzCisgICBuZWNlc3Nhcnkgb3IgZGVzaXJlZC4gU2NyaXB0cyBleGlzdCAoYW5kIHdpbGwgYmUgaW1wcm92ZWQpIHRvCisgICBzdGlwIG91dCB1bnVzZWQgY29tcG9uZW50cyBmcm9tIHRoZSBjb2RlIGVudGlyZWx5IHRvIGVuYWJsZSBhCisgICBzaG9ydGVyIHJldmlldyBwcm9jZXNzIGZvciB1cGdyYWRpbmcgdG8gbmV3IHJlbGVhc2VzLiBUaGlzIHdvcmsKKyAgIHdhcyBkb25lIGJ5IFdlcyBIYXJkYWtlciBhbmQgTWljaGFlbCBCYWVyIGZyb20gU1BBUlRBLCBJbmMuIGJ1dAorICAgaXMgYmVpbmcgY2hlY2tlZCBpbiBhcyBhIGxhcmdlIHBhdGNoIHNpbmNlIGNvbnZlcnRpbmcgdGhlIG1pY3JvCisgICBwYXRjaGVzIGZyb20gZ2l0IHRvIHN2biB0dXJlbmQgb3V0IHRvIGJlIGltcG9zc2libGUKKworMjAxMS0wMi0yMiAyMzo1NSAgaGFyZGFrZXIKKworICAgKiBGQVE6CisKKyAgIHVzZSB0aGUgd2lraSBVUkwgaW5zdGVhZCBvZiB0aGUgdHV0b3JpYWwtNSBVUkwgZm9yIHRoZSBzbm1wdHJhcAorICAgdHV0b3JpYWwKKworMjAxMS0wMi0yMSAyMjo0MCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jOgorCisgICBwcm9wZXIgcHJvY2VzcyBzdGF0dXMgdmFsdWVzIGZvciBuZXRic2QKKworMjAxMS0wMi0yMSAyMjozOSAgbmJhCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICBjb25kaXRpb25hbGl6ZSB2YXJpYWJsZQorCisyMDExLTAyLTIxIDIyOjIwICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaDoKKworICAgdGNwLW1pYi91ZHAtbWliIHN1cHBvcnQgZm9yIHRoZSAqYnNkcworCisyMDExLTAyLTIxIDIyOjE2ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgdGNwLW1pYi91ZHAtbWliIHN1cHBvcnQgZm9yIHRoZSAqYnNkcworCisyMDExLTAyLTIxIDIyOjA1ICBuYmEKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBQcm9wZXJseSBlbmQgZGVidWcgbWVzc2FnZSB3aXRoIG5ld2xpbmUKKworMjAxMS0wMi0yMSAyMjowNCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmM6CisKKyAgIHJlbW92ZSB2YXIgdGhhdCBzaGFkb3dzIHRoZSB1c2VmdWwgb25lCisKKzIwMTEtMDItMjEgMjI6MDIgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYzoKKworICAgbWFqb3IgZmlkZGxpbmcgdG8gZ2V0IHRoaW5ncyB3b3JraW5nIGZvciBvcGVuYnNkIHRvby4gVGhpcyBzaG91bGQKKyAgIHJlYWxseSBiZSByZXdvcmtlZCB0byB1c2UgdGhlIHRjcC1taWIvdWRwLW1pYi9kYXRhX2FjY2VzcworCisyMDExLTAyLTIxIDIxOjU5ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOgorCisgICBmaXggdGNwIHN0YXRlcyBmb3IgZHJhZ29uZmx5YnNkCisKKzIwMTEtMDItMjEgMjE6NTcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJLmg6CisKKyAgIGVuYWJsZSBuZXcgdGNwL3VkcCBtaWJzIGZvciBzb2xhcmlzCisKKzIwMTEtMDItMjEgMjE6NTMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYzoKKworICAgRG8gbm90IHVzZSBjOTkKKwogMjAxMS0wMi0yMSAxOTowOCAgaGFyZGFrZXIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKIAogICAgVXBkYXRlZCBjb21tZW50IGFib3V0IHdoZXJlIG1ha2VyZWxlYXNlIGNvbWVzIGZyb20gKG5vdyBnaXRodWIpCiAKLTIwMTEtMDItMjEgMTE6MTQgIGJ2YXNzY2hlCi0KLSAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6Ci0KLSAgIEJhY2twb3J0ZWQgcjE5NDU0IGZyb20gdGhlIHRydW5rIGFuZCB0aGVyZWJ5IGZpeGVkIHRoaXMgVmFsZ3JpbmQKLSAgIGNvbXBsYWludDoKLSAgIAotICAgPT02Mjg3PT0gSW52YWxpZCByZWFkIG9mIHNpemUgOAotICAgPT02Mjg3PT0gYXQgMHg0RTZDQ0FFOiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldAotICAgKHRhYmxlX2RhdGFzZXQuYzoxODYpCi0gICA9PTYyODc9PSBieSAweDUxMjE5NzQ6IHNodXRkb3duX25vdGlmaWNhdGlvbl9sb2cKLSAgIChub3RpZmljYXRpb25fbG9nLmM6NTY0KQotICAgPT02Mjg3PT0gYnkgMHg1MTk0MURCOiBfc2h1dGRvd25fbWliX21vZHVsZXMKLSAgIChtaWJfbW9kdWxlX3NodXRkb3duLmg6MzIpCi0gICA9PTYyODc9PSBieSAweDU0QjE0RjQ6IHNubXBfY2FsbF9jYWxsYmFja3MgKGNhbGxiYWNrLmM6MzQ0KQotICAgPT02Mjg3PT0gYnkgMHg1NDhCNThCOiBzbm1wX3NodXRkb3duIChzbm1wX2FwaS5jOjg2MikKLSAgID09NjI4Nz09IGJ5IDB4NDA0QzA2OiBtYWluIChzbm1wZC5jOjEwNjApCi0gICA9PTYyODc9PSBBZGRyZXNzIDB4Njg2ZjMxOCBpcyAyNCBieXRlcyBpbnNpZGUgYSBibG9jayBvZiBzaXplIDQwCi0gICBmcmVlJ2QKLSAgID09NjI4Nz09IGF0IDB4NEEwNjBFMDogZnJlZSAodmdfcmVwbGFjZV9tYWxsb2MuYzozNjYpCi0gICA9PTYyODc9PSBieSAweDRFNkFCMTY6IG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUKLSAgICh0YWJsZV9kYXRhLmM6MzIwKQotICAgPT02Mjg3PT0gYnkgMHg0RTZDQzg0OiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldAotICAgKHRhYmxlX2RhdGFzZXQuYzoxODApCi0gICA9PTYyODc9PSBieSAweDUxMjE5NzQ6IHNodXRkb3duX25vdGlmaWNhdGlvbl9sb2cKLSAgIChub3RpZmljYXRpb25fbG9nLmM6NTY0KQotICAgPT02Mjg3PT0gYnkgMHg1MTk0MURCOiBfc2h1dGRvd25fbWliX21vZHVsZXMKLSAgIChtaWJfbW9kdWxlX3NodXRkb3duLmg6MzIpCi0gICA9PTYyODc9PSBieSAweDU0QjE0RjQ6IHNubXBfY2FsbF9jYWxsYmFja3MgKGNhbGxiYWNrLmM6MzQ0KQotICAgPT02Mjg3PT0gYnkgMHg1NDhCNThCOiBzbm1wX3NodXRkb3duIChzbm1wX2FwaS5jOjg2MikKLSAgID09NjI4Nz09IGJ5IDB4NDA0QzA2OiBtYWluIChzbm1wZC5jOjEwNjApCi0KIDIwMTEtMDItMjAgMDk6MjQgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvc25tcF9hZ2VudC5jOgpAQCAtNjcxLDYgKzMzNDIyLDYxIEBACiAgICBVRFAgc29ja2V0CiAgICAoRml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiByMTk1MTEuKQogCisyMDExLTAyLTE4IDE0OjQzICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBDSEFOR0VTOiBzbm1wZDogcmV3b3JrZWQgaHJTdG9yYWdlVGFibGUgdG8gc3VwcG9ydCBsYXJnZQorICAgZmlsZXN5c3RlbXMuCisgICAKKyAgIFRoZSBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMgZG9lcyBub3QgcmVwb3J0IHJlYWwgYWxsb2NhdGlvbiB1bml0CisgICBzaXplLAorICAgYnV0IHNvbWUgY2FsY3VsYXRlZCB2YWx1ZSBzbyBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMgKgorICAgaHJTdG9yYWdlU2l6ZQorICAgZ2l2ZXMgcmVhbCBzaXplIG9mIHRoZSBmaWxlc3lzdGVtLgorICAgCisgICBUaGlzIGNhbGN1bGF0aW9uIGhhcHBlbnMgb25seSB3aGVuIGhyU3RvcmFnZVNpemUgaXMgdG9vIHNtYWxsCisgICAoMzJiaXRzKQorICAgZm9yIGZpbGVzeXN0ZW0gc2l6ZSwgZS5nLiBmaWxlc3lzdGVtcyBsYXJnZXIgdGhhbiA4VEIgd2l0aCA0MDk2CisgICBieXRlcworICAgYmxvY2sgc2l6ZS4KKyAgIAorICAgVGhpcyBjYWxjdWxhdGlvbiBjYW4gYmUgdHVybmVkIG9mZiBieSAncmVhbFN0b3JhZ2VVbml0cycgY29uZmlnCisgICBvcHRpb24uCisKKzIwMTEtMDItMTggMTQ6MjkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmg6CisKKyAgIEFkZCBKRlMgYW5kIFhGUyB0byBsaXN0IG9mIGtub3duIGZpbGVzdXN0ZW1zCisKKzIwMTEtMDItMTcgMTE6MjggIGpzYWZyYW5laworCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgRml4ZWQgc25tcC1icmlkZ2UtbWliIGluIHN0YW5kYWxvbmUgKGFnZW50eCkgdmVyc2lvbi4KKyAgIERvbid0IGRlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGluc2lkZSBibG9jay4gUGF0Y2ggcHJvdmlkZWQgYnkKKyAgIEplbnMgT3N0ZXJrYW1wLgorCisyMDExLTAyLTE2IDE0OjU2ICBqc2FmcmFuZWsKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIEZpeGVkIHNubXAtYnJpZGdlLW1pYiB3aGVuIHdvcmtpbmcgaW4gdGhlIGVtYmVkZGVkIHBlcmwuCisKKzIwMTEtMDItMTYgMTM6MTYgIGpzYWZyYW5laworCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgRml4ZWQgR0VUTkVYVCBwcm9jZXNzaW5nIGluIHNubXAtYnJpZGdlLW1pYi4KKwogMjAxMS0wMi0xNSAyMjoyNCAgbmJhCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYzoKQEAgLTY4MywxMiArMzM0ODksMjQgQEAKIAogICAgcmVtb3ZlIHJlZHVuZGFudCBpbmNsdWRlcwogCi0yMDExLTAyLTE1IDIxOjQ4ICBuYmEKKzIwMTEtMDItMTUgMjE6NDYgIG5iYQogCi0gICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKyAgICogY29uZmlndXJlOgogCiAgICByZXJ1biBhdXRvaGVhZGVyL2F1dG9jb25mCiAKKzIwMTEtMDItMTUgMjE6MzMgIG5iYQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBpbmNsdWRlIHN5cy90eXBlcy5oIGJlZm9yZSBzeXMvc29ja2V0LmgKKworMjAxMS0wMi0xNSAyMToyNiAgbmJhCisKKyAgICogbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNDoKKworICAgVG9vIG11Y2ggcXVvdGluZyBpcyBiYWQKKwogMjAxMS0wMi0xNSAyMToxMSAgbmJhCiAKICAgICogIGFnZW50L21pYmdyb3VwL21pYklJLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKQEAgLTcxMCw2ICszMzUyOCwzOCBAQAogCiAgICBGaWx0ZXIgSVB2NiBlbnRyaWVzIGZyb20gSVB2NCB0YWJsZQogCisyMDExLTAyLTE1IDIwOjQyICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jOgorCisgICBQcm9wZXIgdXNlIG9mIGdldHByb2MyIGFuZCBkcmFnb25mbHkgc3VwcG9ydAorCisyMDExLTAyLTE1IDIwOjQxICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jOgorCisgICBnZXR2ZnNzdGF0IGlzIG9ubHkgZm9yIE5ldEJTRAorCisyMDExLTAyLTE1IDIwOjM5ICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgRGV0ZWN0IG5lZWQgZm9yIC1sa3ZtIGluIHByb3BlciB0aW1lCisKKzIwMTEtMDItMTUgMTk6NDIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgcmVtb3ZlIHRoZSBzdGF0ZW1lbnQgYWJvdXQgZW5hYmxpbmcgc3RkZXJyIGJ5IGRlZmF1bHQuCisKKzIwMTEtMDItMTUgMTk6NDIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CisKKyAgIHJlbW92ZSAzIGZ1bmN0aW9ucyB0aGF0IGFzIGZhciBhcyBJIGNhbiB0ZWxsIGhhdmUgcG9zc2libHkgbmV2ZXIKKyAgIGJlZW4gdXNlZAorCiAyMDExLTAyLTE0IDE0OjM4ICBidmFzc2NoZQogCiAgICAqIGFnZW50L3NubXBkLmM6CkBAIC03MzgsNiArMzM1ODgsMTkgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzMTUyNDEyOiBIYW5kbGUgKGFuZCByZXBvcnQpIHByb2JsZW1zCiAgICByZWFkaW5nIC9wcm9jL3Ztc3RhdAogCisyMDExLTAyLTA5IDA3OjM0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaDoKKworICAgQnVpbGRpbmcgRExMIGFuZCBQZXJsIG1vZHVsZXMgd2l0aCB3aW4zMi9idWlsZC5iYXQgd29ya3MgYWdhaW4uCisKKzIwMTEtMDItMDggMTk6MzggIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg6CisKKyAgIFJlbW92ZSB0aGUgZnVuY3Rpb25zIG1hcmtlZCBhcyBkZXByZWNhdGVkIGFuZCBzYWZlIGZvciByZW1vdmFsIGluCisgICA1LjYuCisKIDIwMTEtMDItMDggMTc6NDEgIGhhcmRha2VyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQucG06CkBAIC03NTMsNiArMzM2MTYsMzEgQEAKICAgIENIQU5HRVM6IHNubXBkOiBGaXggYSBzdHJsZW4gY2FsY3VsYXRpb24gYXMgcG9pbnRlZCBvdXQgYnkKICAgIEtvbnN0YW50aW4gQmF5ZGFyb3YKIAorMjAxMS0wMi0wNyAyMDowNyAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCB0aGUgMyBuZXcgU1NIIGNvbmZpZyB0b2tlbnMKKworMjAxMS0wMi0wNyAyMDowNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBtYWRlIHRoZSBTU0ggdHJhbnNwb3J0IGNvbmZpZ3VyYWJsZSBhcyBpdAorICAgc2hvdWxkIGJlLgorCisyMDExLTAyLTA3IDIwOjA3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6CisKKyAgIEFkZGVkIGRlZmF1bHRfc3RvcmUgc3RyaW5ncyBmb3Igc3NoOiB1c2VybmFtZSwgcHVia2V5LCBwcml2a2V5CisKKzIwMTEtMDItMDYgMDY6MzQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBTaW1wbGlmeSB0aGUgY29udHJvbCBmbG93IHRvIGFsbG93IGZvciBtb3JlIG9wdGltaXphdGlvbi4KKwogMjAxMS0wMi0wMyAyMjo0MiAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTc2MCw2ICszMzY0OCwyMCBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzMTcxODc4OiBVc2luZyBTTk1QdjMgY29udGV4dCBkb2VzIG5vdAogICAgd29yawogCisyMDExLTAyLTAyIDA3OjA5ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIEluY2x1ZGUgdGhlIFVTSU5HXyB2YXJpYWJsZXMgZnJvbSB0aGUgYWdlbnQgbGlicmFyeSBhcyB3ZWxsLCBpbgorICAgcGFydGljdWxhciB0aGUKKyAgIFVTSU5HX0FHRU5UWF8qIHZhcmlhYmxlcy4KKworMjAxMS0wMi0wMSAxMzowNyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jOgorCisgICBEb24ndCBjaGVjayBmb3IgMzIvNjRiaXQgd3JhcCBpbiBjYWxjdWxhdGVkIGVudHJpZXMuCisKIDIwMTEtMDItMDEgMDk6NDEgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYzoKQEAgLTc3NSw2ICszMzY3NywxMiBAQAogICAgbG9uZyB0aW1lIG9mCiAgICB1cHRpbWUgYW5kIGl0IGlzIHZlcnkgaGFyZCB0byByZXByb2R1Y2UuCiAKKzIwMTEtMDItMDEgMDc6MTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzCisKIDIwMTEtMDEtMzEgMjI6MzkgIG5iYQogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOgpAQCAtODA0LDYgKzMzNzEyLDE4IEBACiAKICAgIHByb3Blcmx5IG5hbWUgaW5pdGFsaXplciBmdW5jdGlvbiBmb3IgY3B1X2tpbmZvCiAKKzIwMTEtMDEtMzAgMTU6MjEgIG1hZ2ZyCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIFJlZHVjZSB0aGUgbnVtYmVyIG9mIHVzZWQgaW5jbHVkZSBmaWxlcy4KKworMjAxMS0wMS0zMCAwOTozNSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBmdW5jdGlvbiBkZWNsYXJhdGlvbgorCiAyMDExLTAxLTMwIDAxOjA2ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CkBAIC04MTEsNiArMzM3MzEsMTIgQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNTE4OTc6IGZkIGxlYWsgdy8gL3Byb2MvcGFydGl0aW9ucwogICAgcmVhZCBpbiBkaXNraW8KIAorMjAxMS0wMS0yOSAyMzozNiAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmM6CisKKyAgIE5FV1M6IHNubXBkOiBCVUc6IDMxNjY1Njg6IGhyU3lzdGVtUHJvY2Vzc2VzIG1pc3NpbmcgaW4gNS42LzUuNi4xCisKIDIwMTEtMDEtMjcgMDk6MzUgIGR0czEyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTgyNSw2ICszMzc1MSwxOCBAQAogICAgQ0hBTkdFUzogbWliMmM6IG1ha2UgdGhlIG1pYjJjIGZvcmVhY2ggcmFuZ2VzIHdvcmsgYXMgYWR2ZXJ0aXNlZAogICAgaW4gdGhlIGNvbW1lbnRzLgogCisyMDExLTAxLTI2IDE2OjQ5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyN3NubXB2M0RlZmF1bHRzX3NpbXBsZToKKworICAgYSB0ZXN0IHRvIGVuc3VyZSB2My9VU00gc25tcC5jb25mIHNldHRpbmdzIHdvcmsKKworMjAxMS0wMS0yNiAxNjo0OSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgcmVtb3ZlIHRlc3RvcHRzCisKIDIwMTEtMDEtMjYgMDk6MTIgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKQEAgLTgzNiwxMSArMzM3NzQsNTQgQEAKICAgIGZnZXRzKCkgZnJvbSBpdC4gc25tcGQgc2hvdWxkIGNvbnRpbnVlIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFuZAogICAgbm90IHRvIHN0b3AuCiAKLTIwMTEtMDEtMTkgMDY6MjAgIG5iYQorMjAxMS0wMS0xOSAxMzo1NyAganNhZnJhbmVrCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6CisKKyAgIE1ha2UgdXMgY29tcGF0aWJsZSB3aXRoIHJwbS00LjksIHJwbUdldEZpbGVzeXN0ZW1MaXN0IGRvZXMgbm90CisgICBleGlzdCBhbnltb3JlLCBzbyB0aGUgY29uZmlndXJlIHNjcmlwdCBzaG91bGQgbm90IGNoZWNrIGl0LgorCisyMDExLTAxLTE5IDA2OjMxICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6CisKKyAgIGRpc2tJT0xBeCByZXF1aXJlcyBleHAgd2hpY2ggbWF5IHJlcXVpcmUgLWxtCisKKzIwMTEtMDEtMTggMjI6MzkgIG5iYQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGF1dG9oZWFkZXIKKworMjAxMS0wMS0xOCAyMjozNyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oOgorCisgICBGaW5kIHByb3BlciBpZi1taWIgaW50ZXJmYWNlIGZvciBOZXRCU0QKKworMjAxMS0wMS0xOCAyMjozNiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgorCisgICB0eXBvCisKKzIwMTEtMDEtMTggMjI6MzUgIG5iYQogCiAgICAqIGFjY29uZmlnLmg6CiAKLSAgIERlZmluZSBEUkFHT05GTFlJRAorICAgZGVmaW5lIGRyYWdvbmZseWlkCisKKzIwMTEtMDEtMTQgMTM6MjQgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQWRkIElQdjYgc3VwcG9ydCBmb3IgY3JlYXRpbmcgcm93cyBpbiBpcEFkZHJlc3N0YWJsZS4KKyAgIAorICAgVXNpbmcgU05NUCBTRVQsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgSVB2NgorICAgYWRkcmVzc2VzIG9uIGFuIGludGVyZmFjZS4KIAogMjAxMS0wMS0xNCAxMjoyOCAganNhZnJhbmVrCiAKQEAgLTg2Niw2ICszMzg0NywxMiBAQAogCiAgICByZW1vdmUgY29tcGxldGVseSB1c2VsZXNzIGFuZCBub25zZW5zaWNhbCBjb2RlCiAKKzIwMTEtMDEtMTMgMTc6MjQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBhbGxvY2F0ZSBzcGFjZSBmb3IgYXJyYXkgTlVMTCB0ZXJtaW5hdGlvbgorCiAyMDExLTAxLTEzIDE1OjU2ICBkdHMxMgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgpAQCAtODc5LDkgKzMzODY2LDE2IEBACiAKICAgIFJlbW92ZSBDKysgY29tbWVudHMKIAorMjAxMS0wMS0xMyAxMzoxNyAgZHRzMTIKKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6CisKKyAgIEZpeCBicm9rZW4gcGF0Y2gKKwogMjAxMS0wMS0xMyAxMjoxNCAgZHRzMTIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6CiAKICAgIENvbmZpZ3VyZSBmaXhlcyBmb3IgRHJhZ29uRmx5IHN1cHBvcnQKIApAQCAtOTAwLDYgKzMzODk0LDMwIEBACiAKICAgIEZpeCB0eXBvCiAKKzIwMTEtMDEtMTIgMjE6MjMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKKworICAgbWVyZ2UgZHVwbGljYXRlZCBzaHV0ZG93biBmdW5jdGlvbnMKKworMjAxMS0wMS0xMiAyMDoxMSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oOgorCisgICBSZWltcGxlbWVudCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigpIGJ5IGFkZGluZyB0aGUgZmxhZworICAgTkVUU05NUF9JVEVSQVRPUl9PV05TX0lJTkZPIGZvcgorICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvLiBSZW1vdmUKKyAgIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIyKCkgYmVjYXVzZSBpdCBpcyBub3cKKyAgIHN1cGVyZmx1b3VzLgorCisyMDExLTAxLTEyIDE5OjIyICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfdmFycy5jOgorCisgICBBdm9pZCB0aGF0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uIGZvcgorICAgbmV0c25tcF9jZXJ0c19hZ2VudF9pbml0KCkuCisKIDIwMTEtMDEtMTIgMTk6MjAgIGJ2YXNzY2hlCiAKICAgICogCkBAIC05MjcsMjggKzMzOTQ1LDExIEBACiAgICAKICAgIG9yaWdpbmFsIHBhdGNoIGZpeGVkIHNldmVyYWwgaXNzdWVzLCBvdGhlciBwYXJ0cyBhcHBsaWVkIGVhcmxpZXIKIAotMjAxMS0wMS0xMiAxNDozNyAgcnN0b3J5CisyMDExLTAxLTExIDE3OjI3ICByc3RvcnkKIAotICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMsCi0gICAgICAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCi0gICAgICAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jLCAgCi0gICAgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAotICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAotICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBNSUItc3BlY2lmaWMgbGVhay1hdC1leGl0IGZpeGVzLgotICAgCi0gICBiYWNrcG9ydCBhcHBsaWNhYmxlIHBhcnRzIG9mIHIxOTUzMyBmcm9tIHRydW5rCisgICBkbyBub3QgaW5jbHVkZSBpcHY2IHN0cnVjdCBpZiBpcHY2IGlzIG5vdCBlbmFibGVkCiAKIDIwMTEtMDEtMTEgMTY6MDQgIGR0czEyCiAKQEAgLTk5MywyNCArMzM5OTQsMjIgQEAKIAogMjAxMS0wMS0xMSAxNDozNiAgZHRzMTIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6CiAKICAgIE5ldEJTRC9EcmFnb25GbHkgJ3N0cnVjdCBpZm5ldCcgcmVxdWlyZXMgS0VSTkVMLCBidXQgbm90IF9LRVJORUwKICAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQogICAgKEkgaG9wZSBJJ3ZlIGdvdCB0aGlzIG9uZSByaWdodCEpCiAKLTIwMTEtMDEtMTEgMTQ6MTQgIHJzdG9yeQorMjAxMS0wMS0xMSAxMzozNCAganNhZnJhbmVrCiAKLSAgICogCi0gICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYywKLSAgICAgICAgCi0gICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKIAotICAgcmV2ZXJ0IFBBVENIIDMwNTM0MzY6IHRjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2VzcyBpbnZhbGlkCi0gICBtZW1vcnkgYWNjZXNzCisgICBDSEFOR0VTOiBzbm1wbGliOiBmcm9tIEJpbGwgRmVubmVyOiBmaXggc2VuZGluZyBvZiBVRFAgcmVzcG9uc2VzCisgICBmcm9tIG11bHRpaG9tZWQgYWdlbnRzLgogICAgCi0gICB0aGUgYnVnIHRoaXMgaXMgZml4aW5nIHdhcyBpbnRyb2R1Y2VkIGluIHIxNzcxOSwgYW5kIGZpeGVkIGluCi0gICByMTc4NjEuCisgICBUcnkgdG8gc2VuZCB0aGUgcmVzcG9uc2UgYXMgaXQgd2FzIGJlZm9yZSBOZXQtU05NUCA1LjYgKGFzc3VtaW5nCisgICB0aGUgYXBwcm9wcmlhdGUgcmVxdWVzdCB3YXMgdW5pY2FzdCkgYW5kIG9ubHkgaWYgaXQgZmFpbHMgdHJ5IHRvCisgICBzZXQgaWZfaW5kZXggKHRoZSByZXF1ZXN0IG11c3QgYmUgYnJvYWRjYXN0KS4KIAogMjAxMS0wMS0xMSAxMzoyMiAgZHRzMTIKIApAQCAtMTAyMSwyMSArMzQwMjAsMjggQEAKIAogMjAxMS0wMS0xMSAxMjoyNCAgZHRzMTIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKIAogICAgQWRkaXRpb25hbCBoZWFkZXJzIHdoZW4gdGVzdGluZyBmb3IgSVB2NiBoZWFkZXJzCiAgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KIAogMjAxMS0wMS0xMSAxMjoxNCAgZHRzMTIKIAotICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgogCiAgICBNaXNzaW5nIHR5cGUgdW5kZXIgZGFyd2luCiAgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KIAorMjAxMS0wMS0xMSAxMjoxMCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgTmV0QlNEIHN1cHBvcnQgZm9yIERpc2sgSS9PIHN0YXRzCisgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KKwogMjAxMS0wMS0xMSAxMjowMSAgZHRzMTIKIAotICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKICAgIEhhbmRsZSBzeXN0ZW1zIHdpdGggJ3N0cnVjdCB0aW1lc3BlYyBpZm5ldC5pZl9sYXN0Y2hhbmdlJyAocmF0aGVyCkBAIC0xMDYxLDYgKzM0MDY3LDEyIEBACiAgICBDSEFOR0VTOiBOZXRCU0Q6IFJldHJpZXZlIE1JQi1JSSBuZXR3b3JrIHN0YXRpc3RpY3MgdmlhIHN5c2N0bAogICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCiAKKzIwMTEtMDEtMTEgMDc6MDQgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgRml4IGZvciBwY2lfbG9va3VwX25hbWUgYW5kIFJIRUw0CisKIDIwMTEtMDEtMTAgMTY6NTYgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYzoKQEAgLTEwOTEsNiArMzQxMDMsMjMgQEAKICAgIEZpeCBkaXZpZGUtYnktemVybyBlcnJvciBpbiBDUFUgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcwogICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCiAKKzIwMTEtMDEtMDkgMjI6NTQgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBDSEFOR0VTOiBPcGVuQlNEOiBVcGRhdGUgU1dSdW4gY29kZSB0byB1c2Uga3ZtX2dldHByb2MyCisgICBbRnJvbSBPcGVuQlNEIHBhdGNoIGFyY2hpdmVdCisKKzIwMTEtMDEtMDkgMjE6MzAgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgQ0hBTkdFUzogYnVpbGQ6IE9wZW5CU0Q6IEZpeCBvcmRlciBvZiBoZWFkZXJzIHdoZW4gY2hlY2tpbmcKKyAgIDxuZXRpbmV0L2luX3BjYi5oPgorICAgW0Zyb20gT3BlbkJTRCBwYXRjaCBhcmNoaXZlXQorCiAyMDExLTAxLTA5IDE5OjQ0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6CkBAIC0xMTE1LDEzICszNDE0NCwyMiBAQAogCiAgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QuYzoKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbmV0YnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmM6CiAKICAgIHN5c2N0bCB0YWtlcyBhICdzaXplX3QnIHZhcmlhYmxlIGZvciB0aGUgc2l6ZSBwYXJhbWV0ZXIKIAorMjAxMS0wMS0wOCAwODozMCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBGaXggLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMgaGFuZGxpbmcKKyAgIEFsbG93IHJlcGVhdGVkIG1vZHVsZXMgKHRzbSx0c20pIGFzIHdlbGwgYXMgZGVmYWlsdCBtb2R1bGVzICh1c20pCisgICBNb3ZlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBmaWxlcyBhZnRlciB0aGUgY2hlY2tpbmcKKwogMjAxMS0wMS0wOCAwMDo0NyAgbWFnZnIKIAotICAgKiBhY2NvbmZpZy5oOgorICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCiAgICBVcGRhdGUgYWNjb25maWcuaCB3aXRoIGNoYW5nZXMgZnJvbSByMTk4MTkuCiAgICBSZXJ1biBhdXRvaGVhZGVyLgpAQCAtMTI3NywxMiArMzQzMTUsNDUgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyOTQxODExOiBIYW5kbGUgc3VjY2Vzc2Z1bCByZXF1ZXN0cyB3aXRoCiAgICByZXFJRCAwCiAKLTIwMTEtMDEtMDUgMTY6MzEgIGR0czEyCisyMDExLTAxLTA2IDA5OjM4ICBidmFzc2NoZQogCi0gICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYzoKIAotICAgVXNlIHRoZSBhcHByb3ByaWF0ZSBBUEkgY2FsbCBmb3IgcmVwb3J0aW5nIGNvbmZpZyBlcnJvcnMuCi0gICAoIkRvbid0IGJlIHNvIGltcGF0aWVudCwgRGF2ZS4uLi4iKQorICAgU3BlbGxpbmcgZml4OiBJbml0aWFsemllcyAtPiBJbml0aWFsaXplcy4KKworMjAxMS0wMS0wNiAwOTozNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3IyKCkuCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoKS4KKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBuZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKCkuCisgICBDSEFOR0VTOiBhZ2VudDogRml4ZWQgbGVhay1hdC1leGl0IHRyaWdnZXJlZCBieSBzbm1wTm90aWZ5VGFibGUuCisgICBDSEFOR0VTOiBhZ2VudDogRml4ZWQgbGVhay1hdC1leGl0IHRyaWdnZXJlZCBieQorICAgc25tcFRhcmdldEFkZHJUYWJsZS4KKyAgIEFsc28sIHJlc3RvcmVkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9mCisgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKCkuCisKKzIwMTEtMDEtMDYgMDQ6NDUgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBpbmNsdWRlIHN5cy9zb2NrZXQuaCBpZiBhdmFpbGFibGUKIAogMjAxMS0wMS0wNSAxNDowNiAgZHRzMTIKIApAQCAtMTI5OCwxMiArMzQzNjksMTY0IEBACiAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEJVR1M6IDMxNTEyNTQ6IEZpeCBjcmFzaCB3aXRoIGludmFsaWQKICAgIHRyYXBoYW5kbGUgZGlyZWN0aXZlCiAKKzIwMTEtMDEtMDUgMDk6NTUgIGR0czEyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jOgorCisgICBFeHBhbmQgdGFiIGNoYXJhY3RlcnMKKworMjAxMS0wMS0wNCAyMjowNiAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoZWNrIHRoYXQgdGhlIGFyZ3VtZW50IHRvCisgICBuZXRzbm1wX3RyYW5zcG9ydF9jb3B5IGlzIG5vbi1OVUxMCisKIDIwMTEtMDEtMDQgMTg6MjQgIGhhcmRha2VyCiAKICAgICogQ09QWUlORzoKIAogICAgQ29weXJpZ2h0IHVwZGF0ZSBmb3IgMjAxMQogCisyMDExLTAxLTA0IDEyOjAxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgorCisgICBGaXggY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBXaW4zMiBNSUItSUkKKyAgIGltcGxlbWVudGF0aW9uLgorCisyMDExLTAxLTAzIDE5OjQ4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmM6CisKKyAgIFJlbW92ZWQgdHdvIHVudXNlZCB2YXJpYWJsZXMuCisKKzIwMTEtMDEtMDMgMTk6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBGaXhlZCBhIHJlY2VudGx5IGludHJvZHVjZWQgbWlzbWF0Y2ggYmV0d2VlbiBmb3JtYXQgc3BlY2lmaWNhdGlvbgorICAgYW5kIGFyZ3VtZW50IGxpc3QuCisKKzIwMTEtMDEtMDMgMTk6NDcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEdldCByaWQgb2YgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncyBieSBhZGRpbmcgdHdvCisgICAjaW5jbHVkZSBkaXJlY3RpdmVzIGFuZCBjb21tZW50aW5nIG91dCB0d28gdW51c2VkIGZ1bmN0aW9ucy4KKworMjAxMS0wMS0wMiAwNTo0OCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZG9uJ3QgZnJlZSBjYWxsZXJzIHB0cgorCisyMDExLTAxLTAyIDA1OjQ4ICByc3RvcnkKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsICAgCisgICAgICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHYzLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmM6CisKKyAgIGNsZWFuIHVwIFNOTVBfRlJFRSB1c2FnZQorCisyMDExLTAxLTAyIDA1OjQ3ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBjdXQtbi1wYXN0ZSBlcnJvciBpbiBkZWJ1ZyB0b2tlbgorCisyMDExLTAxLTAyIDA1OjQ3ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaDoKKworICAgZml4IGZ1bmN0aW9uIG5hbWUgaW4gcHJvdG90eXBlCisKKzIwMTEtMDEtMDIgMDU6NDYgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZworCisyMDExLTAxLTAyIDA1OjQ2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHJlbW92ZSBpbmxpbmUgdmVyc2lvbnMgb2YgY29udGFpbmVyIGZ1bmNzCisKKzIwMTEtMDEtMDIgMDU6NDYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGRvbnQgcmV0dXJuIGVtcHR5IGFycmF5CisKKzIwMTEtMDEtMDIgMDU6NDYgIHJzdG9yeQorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgZml4IHR5cG9zL2dyYW1tYXIgaW4gbWFuIHBhZ2VzL2NvbW1lbnRzIChubyBjb2RlIGNoYW5nZXMpCisKKzIwMTEtMDEtMDIgMDU6NDUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIG5ldyB0cmFuc3BvcnQgY29uZmlnIHRva2VucworICAgbG9jYWxDZXJ0L3BlZXJDZXJ0LAorICAgZGVwcmVjYXRlIG91cl9pZGVudGl0eSwgdGhlaXJfaWRlbnRpdHkKKworMjAxMS0wMS0wMiAwNTo0NSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIG1hbi9zbm1wY21kLjEuZGVmLCAgIAorICAgICAgbWFuL3NubXBkLmNvbmYuNS5kZWYsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgTkVXUzogc25tcGxpYjogaW50cm9kdWNlIG5ldyBsb2NhbENlcnQvcGVlckNlcnQsIGRlcHJlY2F0ZQorICAgc2VydmVyQ2VydCwgY2xpZW50Q2VydCwgZGVmWDUwOVNlcnZlclB1YiwgZGVmWDUwOUNsaWVudFB1YgorCisyMDExLTAxLTAyIDA1OjQ0ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgSVB2NiBzdXBwb3J0IHRvIERUTFNVRFAgdHJhbnNwb3J0CisgICBDSEFOR0VTOiBzbm1wbGliOiB1c2UgbmV3IG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSBpbgorICAgbmV0c25tcF9hZGRyX3BhaXIKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBiYXNlX3RyYW5zcG9ydCBwdHIgZm9yIHR1bm5lbGVkIHRyYW5zcG9ydHMKKworMjAxMS0wMS0wMiAwNTo0MiAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogc2tpcCBub24tQUZfSU5FVCBpbnRlcmZhY2VzIHdoZW4gbG9hZGluZyBpcHY0CisgICBhZGRycworCiAyMDEwLTEyLTI5IDAxOjM3ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgpAQCAtMTMyMyw2ICszNDU0NiwyNiBAQAogCiAgICBCcmluZyBhbGwgdmVyc2lvbnMgb2YgbWFrZXJlbGVhc2UueG1sIGludG8gbGluZQogCisyMDEwLTEyLTIxIDA2OjE0ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmg6CisKKyAgIGZpeCBjb25maWd1cmluZyB3aXRoIC0tZGlzYWJsZS1kZWJ1Z2dpbmcKKworMjAxMC0xMi0yMCAyMzoyNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgUGF0Y2ggZnJvbSBNYWdudXMgdG8gZml4IGlmICEgdGVzdHMgb24gc29sYXJpcworCisyMDEwLTEyLTE0IDIwOjEwICByc3RvcnkKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgZml4IHR5cG8gaW4gbWFuIHBhZ2UKKwogMjAxMC0xMi0xMCAxNTo1MCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIHNubXBsaWIvc25tcHVzbS5jOgpAQCAtMTM0Myw2ICszNDU4NiwyNyBAQAogICAgdGhlIGxvYWRpbmcKICAgIG9mIHRoZSBsaXN0IGEgYml0LgogCisyMDEwLTEyLTA2IDIzOjIzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmM6CisKKyAgIFBhdGNoIGZyb20gTmllbHMgdG8gcmVtb3ZlIGV4dHJhIGhlYWRlcnMgZnJvbSB0aGUgbGludXggZG90M3N0YXRzCisgICBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTEyLTA2IDIyOjA4ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgQ2hlY2sgZm9yIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGZ1bmN0aW9uIGluIE9wZW5TU0wgZm9yIERUTFMKKyAgIHN1cHBvcnQKKworMjAxMC0xMi0wNiAxNjozNCAgcnN0b3J5CisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIGNhbGwgbmV0c25tcF9jZXJ0c19hZ2VudF9pbml0IHNvb25lciwgZml4aW5nIHNubXB0cmFwZCAoRClUTFMKKyAgIHN1cHBvcnQKKwogMjAxMC0xMi0wNiAxNjoyNCAgaGFyZGFrZXIKIAogICAgKiBhcHBzL3NubXB0cmFwLmM6CkBAIC0xMzUwLDEyICszNDYxNCwzMSBAQAogICAgZml4IGNvbnRleHRFbmdpbmVJRHMgZm9yIG91dGdvaW5nIGluZm9ybXMgZnJvbSBzbm1waW5mb3JtIHRvIGJlCiAgICB0aGUgbG9jYWwgZW5naW5lSUQKIAorMjAxMC0xMi0wMSAyMToxOCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBGaXggY29uZmxpY3RpbmcgZGVjbGFyYXRpb25zCisKKzIwMTAtMTItMDEgMDE6MjMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIFBhdGNoIGZyb20gbWFnZnIgdG8gZml4IGJ1aWxkaW5nIHdpdGhvdXQgb3BlbnNzbAorCiAyMDEwLTEyLTAxIDAxOjA2ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L3NubXBkLmM6CiAKICAgIHVzZSBuZXRzbm1wX2Fzc2VydCBpbnN0ZWFkIG9mIGFzc2VydAogCisyMDEwLTExLTMwIDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBpbXBsZW1lbnQgRFRMUyBjb29raWVzIHNlbWktcHJvcGVybHkgKHN0YXRlIGlzIHN0aWxsIHNhdmVkLCB3aGljaAorICAgc3RpbGwgbmVlZHMgdG8gY2hhbmdlKQorCiAyMDEwLTExLTMwIDIzOjI3ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgpAQCAtMTM3OSw2ICszNDY2Miw1NyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDUzNDM2OiBmcm9tOiB0YWtldm9zOiBmaXg6CiAgICB0Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzIGludmFsaWQgbWVtb3J5IGFjY2VzcwogCisyMDEwLTExLTMwIDIyOjE4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIHJldmVydGVkIDE5NzAxIChldGh0b29sKSBhcyBpdCBicm9rZSB0aGluZ3MKKworMjAxMC0xMS0zMCAyMTowOCAgbmJhCisKKyAgICogYXBwcy9zbm1wdGxzLmMsIGFwcHMvc25tcHRyYXBkX3NxbC5jOgorCisgICB1X2ludDMyX3QgaXMgbGVzcyBwb3J0YWJsZSB0aGFuIHVpbnQzMl90IChTb2xhcmlzIDExKQorCisyMDEwLTExLTMwIDIwOjUyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgYSBjb21waWxlIHdhcm5pbmcgYWJvdXQgYSBuZXN0ZWQgaWYgd2l0aG91dCBhIGJsb2NrCisKKzIwMTAtMTEtMzAgMTk6NTcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGVycm9yIGNoZWNrIHRoZSByaWdodCBwb2ludGVyIGFmdGVyIGF0dGVtcHRpbmcgYWxsb2NhdGlvbgorCisyMDEwLTExLTMwIDA1OjU4ICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHdhbGsuYzoKKworICAgTkVXUzogYXBwczogUEFUQ0ggMzA1NDgxNzogZnJvbSBuaWdodGNvZGluZzogQWRkcyBwZXItdmFyaWFibGUKKyAgIHRpbWVkIG91dHB1dCBzdXBwb3J0IHRvIHNubXB3YWxrIHVzaW5nIC1DVAorCisyMDEwLTExLTMwIDA1OjU2ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1NzA5MDogZnJvbSBzaGVtbWluZ2VyOiBtYWtlIGV0aHRvb2wKKyAgIHN1cHBvcnQgb24gbGludXggdXNlIHRoZSBoaWdoIHNwZWVkIHN0cnVjdCBpbmZvIGZvciAxMDBHKy4KKworMjAxMC0xMS0zMCAwNTo0NyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0ggMzA1NzA5MzogZnJvbSBzaGVtbWluZ2VyOiBhbGxvdyBsaW51eCB0byB1c2UKKyAgIGxpYnBjaSBmb3IgY3JlYXRpbmcgdXNlZnVsIGlmRGVzY3Igc3RyaW5ncworCiAyMDEwLTExLTMwIDA0OjU4ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jOgpAQCAtMTM4Niw3ICszNDcyMCwzNyBAQAogICAgQ0hBTkdFUzogUEFUQ0ggMzA3NDkxODogZnJvbSB3ZWl6aGVuZzogY2hlY2sgZm9yIENPTlRBSU5FUl9JTlNFUlQKICAgIGZhaWx1cmVzIGFuZCByZWFjdCBhcHByb3ByaWF0ZWx5IHRvIGF2b2lkIG1lbW9yeSBsZWFrcwogCi0yMDEwLTExLTI5IDIyOjE0ICByc3RvcnkKKzIwMTAtMTEtMzAgMDQ6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBhZGQgZGVidWcgZm9yIGNlcnQgZmluZCBoaW50IGFzIHN0cmluZy9pbnQKKworMjAxMC0xMS0zMCAwNDozMCAgcnN0b3J5CisKKyAgICogIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogaW5zdGVhZCBvZiByZWx5aW5nIG9uIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUsCisgICBicmVhayBvdXQKKyAgIGNlcnQgdGFibGUgaW5pdHMgdG8gbmV3IGFnZW50IGNlcnQgaW5pdCBmdW5jdGlvbiwgY2FsbGVkIGZyb20KKyAgIGluaXRfYWdlbnQuCisKKzIwMTAtMTEtMzAgMDQ6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IGVuZm9yY2UgbWF4IGxlbmd0aCBvbiBUTFMgc2VjTmFtZSBtYXBzCisgICBDSEFOR0VTOiBzbm1wZDogYWRkIHByaW9yaXR5IHRvIHNlY25hbWUgZGVidWdnaW5nCisKKzIwMTAtMTEtMjkgMjI6MjAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogYWRkIGRlYnVnIGZvciBzc2wgY2lwaGVycywgY2xhcmlmeSBmaW5nZXJwcmludAorICAgbWF0Y2ggZGVidWcKKworMjAxMC0xMS0yOSAyMjoxOCAgcnN0b3J5CiAKICAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CiAKQEAgLTEzOTQsNiArMzQ3NTgsMjIgQEAKICAgIHNoYXJlZAogICAgY2FjaGUgcmVsb2FkIHByb3RlY3Rpb24KIAorMjAxMC0xMS0xOSAxNToyNSAgbmJhCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmM6CisKKyAgIE5pZWxzLCBOaWVscywgeW91IHNob3VsZCBrbm93IGJldHRlciB0aGFuIG1ha2luZyBsYXN0IG1pbnV0ZQorICAgY2hhbmdlcyB0byBhCisgICBwYXRjaCBhbmQgdGhlbiBjb21taXQgaXQgd2l0aG91dCB0ZXN0aW5nIDotKAorCisyMDEwLTExLTE4IDExOjA0ICBidmFzc2NoZQorCisgICAqICAuLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jOgorCisgICBBcHBsaWVkIHIxOTY4OCBvbiB0aGUgdHJ1bmsgdG9vIChmb2xsb3ctdXAgZm9yIHIxOTY4NSkuCisKIDIwMTAtMTEtMTggMDM6NDkgIHJzdG9yeQogCiAgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCkBAIC0xNDA2LDYgKzM0Nzg2LDU5IEBACiAgICAKICAgIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQoKSBpcyBub3QgbWVhbnQgZm9yIG1pYiBtb2R1bGVzCiAKKzIwMTAtMTEtMTcgMTk6NTkgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzoKKworICAgTW9yZSBwcm9jdGlvbiBhZ2FpbnN0IG92ZXJmbG93aW5nIHNucHJpbnRmCisKKzIwMTAtMTEtMTcgMTk6NTcgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oOgorCisgICBEb250IHVzZSBmaXJzdCBlbGVtZW50IG9mIG9pZCB0byBzYXZlIGlmSW5kZXggLSBpdCBjYW4gb25seSBiZQorICAgMC4uMgorICAgU2Vjb25kIGVsZW1lbnQgaXMgb25seSAwLi4zOSwgc28gd2UgaGF2ZSB0byB1c2UgYSB0aGlyZCBlbGVtZW50LgorCisyMDEwLTExLTE3IDE5OjM5ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgCisgICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIFRlc3QgZ2V0ZnNzdGF0L2dldHZmc3N0YXQgaW4gdGltZSBmb3IgbW9kdWxlIHNlbGVjdGlvbgorCisyMDEwLTExLTE3IDE5OjM3ICBuYmEKKworICAgKiBzbm1wbGliL2ZpbGVfdXRpbHMuYzoKKworICAgUmVtb3ZlIGJvZ3VzIHRlc3QgZm9yIGZsYWdzPT0wIChPX1JET05MWT09MCkuIE1ha2VzCisgICB1ZHBFbmRwb2ludFRhYmxlIHdvcmsgYWdhaW4KKworMjAxMC0xMS0xNyAwNDo1NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCBkb3VibGUgZnJlZSBpbiBUTFMgZXJyb3IgaGFuZGxpbmcKKworMjAxMC0xMS0xNiAxMDozOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGU6CisKKyAgIFJldmVydGVkIE1pbkdXLXNwZWNpZmljIGNoYW5nZXMgZnJvbSByMTk1NDkgc3VjaCB0aGF0IHRlc3QgVDA2NQorICAgcGFzc2VzIGFnYWluIG9uIE1pbkdXLgorCisyMDEwLTExLTE2IDEwOjA0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgQ0hBTkdFUzogTGludXg6IGFnZW50OiBpcE5ldFRvUGh5c2ljYWxUYWJsZTogRG8gbm90IGxvZyBhbiBlcnJvcgorICAgbWVzc2FnZSBpZiBvbmUgb3IgbW9yZSBpbnRlcmZhY2VzIGFyZSBwcmVzZW50IHRoYXQgZG8gbm90IGhhdmUKKyAgIHN1Y2ggaW5mb3JtYXRpb24gKE5VRF9OT0FSUCksIGUuZy4gdHVubmVscy4gUmVwb3J0ZWQgYnkgU3RlcGhlbgorICAgSGVtbWluZ2VyLiBTZWUgYWxzbyBwYXRjaCAjMzEwNzAwMy4KKwogMjAxMC0xMS0xNSAxNDoxNSAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKQEAgLTE0MTUsMTEgKzM0ODQ4LDM4IEBACiAgICBhc25fYnVpbGRfc2lnbmVkX2ludDY0KCkuIE1vc3QgYnV0IG5vdCBhbGwgb2YgdGhlc2UgYnVncyB3ZXJlCiAgICBzcGVjaWZpYyB0byA2NC1iaXQgc3lzdGVtcy4gRml4ZXMgYnVnICMzMDkzMTk5LgogCi0yMDEwLTExLTE1IDE0OjEyICBidmFzc2NoZQorMjAxMC0xMS0xNSAxMzozMiAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaDoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmM6CiAKLSAgIEJ1aWxkcyBhZ2Fpbi4KKyAgIEF2b2lkIHRyaWdnZXJpbmcgdHJ1bmNhdGlvbiB3YXJuaW5ncy4KKworMjAxMC0xMS0xNSAxMzoxNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYzoKKworICAgUmVzdHJpY3RlZCBhbGwgY29uc3RhbnRzIHRvIDMyIGJpdHMuCisKKzIwMTAtMTEtMTUgMTI6MzUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NjY1LgorCisyMDEwLTExLTE1IDEyOjMzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oLCBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlZCB0aGUgYXJndW1lbnQgdHlwZSBvZgorICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKCkgZnJvbSBjaGFyICogaW50byBjb25zdCBjaGFyICouCisKKzIwMTAtMTEtMTUgMTA6NTYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmM6CisKKyAgIEFkZGVkIHVuaXQgdGVzdCBmb3IgQVNOLjEgZW5jb2RpbmcgYW5kIGRlY29kaW5nIChvbmx5IDMyLWJpdCBhbmQKKyAgIDY0LWJpdAorICAgaW50ZWdlcnMgc28gZmFyKS4KIAogMjAxMC0xMS0xMSAyMjo0OCAgbmJhCiAKQEAgLTE0MjgsOSArMzQ4ODgsNDEgQEAKICAgIEZpeCByMTk2MzY6IFRyYXBPSUQgaXMgbm90IHRoZSBmaXJzdCB2YXJiaW5kIGluIHRoZSBjb252ZXJ0ZWQgdjIKICAgIHRyYXAKIAorMjAxMC0xMS0xMSAwODozOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmg6CisKKyAgIENsZWFudXA6IFJlbW92ZWQgc3VwZXJmbHVvdXMgcmVmZXJlbmNlcyB0byB0aGUgUE9TSVggdGhyZWFkcworICAgbGlicmFyeS4KKworMjAxMC0xMS0xMSAwODoyMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NjYwOiBVc2UgcGlkX3QgY29uc2lzdGVudGx5LgorCisyMDEwLTExLTEwIDE2OjM2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEludHJvZHVjZWQgbmV0c25tcF9waWRfdC4KKyAgIENIQU5HRVM6IFdpbjMyOiBFbGltaW5hdGVkIGNhc3RzIGJldHdlZW4gaW50IGFuZCBIQU5ETEUgaW4KKyAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYyBhbmQKKyAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLgorCisyMDEwLTExLTEwIDE1OjQ5ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgRm9sbG93LXVwIGZvciByMTk2MDY6IGNtdV9jb21wYXQgcmVtb3ZhbC4KKwogMjAxMC0xMS0xMCAxMjozMSAgYnZhc3NjaGUKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CiAKICAgIENIQU5HRVM6IEJVRzogMzEwMjkwNDogQWxsIE5ldC1TTk1QIEMgc291cmNlIGZpbGVzIGFyZSBub3cKICAgIGNvbXBpbGVkIHdpdGggLWZuby1zdApAQCAtMTQzOSwxNiArMzQ5MzEsOTkgQEAKIAogMjAxMC0xMS0wOSAxMzo0NyAgYnZhc3NjaGUKIAotICAgKiB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb246CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGU6CiAKICAgIENIQU5HRVM6IHRlc3Rpbmc6IFRlc3QgVDAzMCBkb2VzIG5vdyBwYXNzIG9uIE1pbkdXLgogCisyMDEwLTExLTA5IDEzOjQwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIHNpbXBsZV9ldmFsX3Rvb2xzLnNoOiBSZW1vdmVkIGEgc3VwZXJmbHVvdXMgSVNERUZJTkVEIGludm9jYXRpb24uCisKKzIwMTAtMTEtMDkgMTI6MDQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlOgorCisgICBQYXNzZXMgbm93IG9uIE1pbkdXIHRvby4KKworMjAxMC0xMS0wOSAxMTozMSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NjQ2LgorCisyMDEwLTExLTA5IDExOjMwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBJZiB0aGUgYWdlbnQgaGFzIGJlZW4gYXNrZWQgdG8gc3RvcCwKKyAgIHdhaXQgdW50aWwgdGhlIHNubXBkIHByb2Nlc3MgZGlzYXBwZWFyZWQgYmVmb3JlIHByb2NlZWRpbmcuCisKKzIwMTAtMTEtMDkgMTA6MDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBjb20yc2VjNiBkaXJlY3RpdmU6IElmIGNvbmZpZ3VyZSBoYXMgbm90IGZvdW5kCisgICBnZXRhZGRyaW5mbygpLCBub24tbnVtZXJpYyBJUHY2IGFkZHJlc3NlcyBkbyBub3cgdHJpZ2dlciBhbiBlcnJvcgorICAgbWVzc2FnZS4KKworMjAxMC0xMS0wOCAxNTozNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGU6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IFRlc3QgNzEgKGNvbTJzZWM2X3NpbXBsZSkgZG9lcyBub3cgc3VjY2VlZCBldmVuCisgICBpZiBJUHY2IEROUyByZXNvbHV0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKzIwMTAtMTEtMDggMTU6MDIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBNaW5HVywgdGVzdGluZzogY2xpYiB0ZXN0cyBidWlsZCBhZ2FpbiB3aXRob3V0IHdhcm5pbmdzLgorCisyMDEwLTExLTA4IDE0OjUyICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENIQU5HRVM6IE1pbkdXOiBjb25maWd1cmU6IERldGVjdGlvbiBvZiB0aGUgZnVuY3Rpb25zCisgICBnYWlfc3RyZXJyb3IoKSwgZ2V0YWRkcmluZm8oKSwgZ2V0aG9zdGJ5bmFtZSgpIGFuZCBnZXRob3N0bmFtZSgpCisgICBkb2VzIG5vdyBzdWNjZWVkLgorCisyMDEwLTExLTA4IDE0OjQ4ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwN2luZXRfcHRvbl9jbGliLmM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZGVkIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKSB1bml0IHRlc3QuCisKKzIwMTAtMTEtMDggMTQ6NDcgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICB0ZXN0aW5nOiBjbGliX2J1aWxkOiBBZGRlZCAjaW5jbHVkZSBkaXJlY3RpdmVzICg8YXJwYS9pbmV0Lmg+IGFuZAorICAgPG5ldGluZXQvaXA2Lmg+KS4KKwogMjAxMC0xMS0wOCAwODo0NiAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgogCiAgICBXaW4zMjogYWdlbnQ6IGVsaW1pbmF0ZWQgY2FzdHMgZnJvbS90byBpbnQgZm9yIHRocmVhZCBoYW5kbGVzLgogCisyMDEwLTExLTA4IDA3OjU4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBSZW1vdmVkIE5FVFNOTVBfU1RBVElDX0lOTElORSBmcm9tIHRoZSBkZWNsYXJhdGlvbiBvZgorICAgX2J1aWxkX2NhY2hlX25hbWUgLSBhdCBsZWFzdCBnY2MgaXMgYmV0dGVyIHRoYW4gYSBodW1hbiBhdAorICAgZGVjaWRpbmcgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBiZSBpbmxpbmVkIGFuZCB3aGljaCBvbmVzIG5vdC4KKworMjAxMC0xMS0wOCAwNzo1NiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzoKKworICAgbmV0c25tcF90YWJsZV9kYXRhX2Nsb25lX3JvdygpOiBBZGRlZCBtaXNzaW5nIGZyZWUoKSBzdGF0ZW1lbnQgaW4KKyAgIGFuIGVycm9yIHBhdGguCisKIDIwMTAtMTEtMDcgMjE6MTUgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CkBAIC0xNDg0LDE5ICszNTA1OSw2IEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzA5NjcyNTogSW5jbHVkZSBTTk1QdjEgdHJhcCBPSURzIGluCiAgICBubG1Mb2dOb3RpZmljYXRpb25JRCBjb2x1bW4KIAotMjAxMC0xMS0wNyAxOToyNiAgZHRzMTIKLQotICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKLQotICAgU3VwcG9ydCBob2xlcyBpbiBkYXRhc2V0IHRhYmxlcy4KLSAgIChQYXJ0aWFsIGJhY2stcG9ydCBvZiByZXZpc2lvbiAxNzkyOSkKLQotMjAxMC0xMS0wNyAxOToyMiAgZHRzMTIKLQotICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6Ci0KLSAgIEZpeCBhIHR5cG8sIGFuZCBkcm9wIGEgY291cGxlIG9mIHJlZHVuZGFudCB2YXJpYWJsZXMuCi0KIDIwMTAtMTEtMDcgMTY6MzUgIG1hZ2ZyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CkBAIC0xNTA0LDEyICszNTA2Niw2MiBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogZm9yY2UgYSA7IGF0IHRoZSBlbmQgb2YgdGhlIHN0YXRpY19hc3NlcnQKICAgIG1hY3JvLgogCi0yMDEwLTExLTA3IDE2OjIxICBkdHMxMgorMjAxMC0xMS0wNSAxNTo0MSAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKIAotICAgQmFja3BvcnQgb2YgcmV2aXNpb24gMTc1OTYKLSAgIFRyaXZpYWwgd2FybmluZyBmaXhlcworICAgTWFkZSBzdXJlIHRoYXQgcnBtR2V0UGF0aCgpIGNhbiBiZSBmb3VuZCBieSBjb25maWd1cmUuCisKKzIwMTAtMTEtMDUgMTQ6NTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6CisKKyAgIFJlbW92ZWQgc3VwZXJmbHVvdXMgLUkvdXNyL2luY2x1ZGUvcnBtLgorCisyMDEwLTExLTA1IDEyOjE4ICBidmFzc2NoZQorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEZpbmQgb3V0IHdoZXRoZXIgbGlicnBtIGlzIGF2YWlsYWJsZSBiZWZvcmUKKyAgIGNvbmZpZ3VyaW5nIHRoZSBhZ2VudCBtb2R1bGVzIGJlY2F1c2UgaG9zdC9kYXRhL2FjY2Vzcy9zd2luc3QKKyAgIG5lZWRzIHN5bWJvbCBIQVZFX0xJQlJQTS4gQXMgYSByZXN1bHQsIGNvbmZpZ3VyZSBoYXMgdG8gYmUgcnVuCisgICBvbmx5IG9uY2UgaW5zdGVhZCBvZiB0d2ljZSB0byBlbmFibGUgdGhlIGhyU1dJbnN0YWxsZWQgdGFibGUgb24KKyAgIHN5c3RlbXMgdGhhdCBoYXZlIGxpYnJwbS4KKworMjAxMC0xMS0wNSAxMjoxMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmM6CisKKyAgIFN1cHByZXNzIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0xMS0wNSAxMDowMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogRml4ZWQgYSBtZW1vcnkgbGVhaworICAgaW4gbmV0c25tX3N3aW5zdF9hcmNoX2luaXQoKS4KKworMjAxMC0xMS0wNSAwOToyMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogUGFzcyBjb3JyZWN0IHBhdGggdG8KKyAgIHJwbWRiT3BlbigpIHN1Y2ggdGhhdCBvcGVuaW5nIHRoZSBkYXRhYmFzZSBzdWNjZWVkcy4KKyAgIENIQU5HRVM6IGFnZW50OiBob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG06IExvZyBhbiBlcnJvciBtZXNzYWdlCisgICBpZiBycG1kYk9wZW4oKSBmYWlscy4KKworMjAxMC0xMS0wNSAwODo1MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLCBhZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYzoKKworICAgUm1vbiAvIGRpc21hbiBjb21waWxlciB3YXJuaW5nIGZpeGVzLgogCiAyMDEwLTExLTA1IDA4OjQ4ICBidmFzc2NoZQogCkBAIC0xNTE3LDYgKzM1MTI5LDE4IEBACiAKICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIG1hY3JvIG5ldHNubXBfc3RhdGljX2Fzc2VydCgpLgogCisyMDEwLTExLTA1IDA4OjQwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTU2Ni4KKworMjAxMC0xMS0wNSAwODozNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oOgorCisgICBSZW1vdmVkIGEgKGhhcm1sZXNzID8pIGNpcmN1bGFyIHJlZmVyZW5jZS4KKwogMjAxMC0xMS0wNCAxMzowOSAgZHRzMTIKIAogICAgKiBkaXN0L25ldC1zbm1wLnNwZWM6CkBAIC0xNTI0LDI1ICszNTE0OCwyMyBAQAogICAgQ0hBTkdFUzogTGludXg6IFBBVENIRVM6IDMwODMwMjc6IEZpeCBSUE0gc3BlYyBmaWxlIHRvIHN1cHBvcnQKICAgIENlbnRPUwogCi0yMDEwLTExLTA0IDA3OjA5ICBidmFzc2NoZQorMjAxMC0xMS0wMyAxMzoyMiAgcnN0b3J5CiAKLSAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlOgogCi0gICBCYWNrcG9ydGVkIHIxOTYwMiwgd2hpY2ggZml4ZXMgdGhlIGRvdWJsZSBmcmVlIGF0IGV4aXQgdGhhdCB3YXMKLSAgIGludHJvZHVjZWQgYnkgcjE5NDYyLgorICAgc2tpcCB0bHNpcHY2IHRlc3QgaWYgbm90IHRsc3RjcC90Y3BpcHY2IGRvbWFpbnMKIAotMjAxMC0xMS0wMyAxNDo1OSAgYnZhc3NjaGUKKzIwMTAtMTEtMDEgMjM6MDMgIG1hZ2ZyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqICBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgogCi0gICBDSEFOR0VTOiBidWlsZGluZzogVkVSU0lPTiBpcyBhZ2FpbiBhIG51bWJlciBpbnN0ZWFkIG9mIGEgQwotICAgZXhwcmVzc2lvbiwgc3VjaCB0aGF0IHRoZSBQZXJsIG1vZHVsZXMgYnVpbGQgYWdhaW4uCi0KLTIwMTAtMTEtMDMgMTQ6NDcgIGJ2YXNzY2hlCi0KLSAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oOgotCi0gICBGaXhlZCBhbiBpbmNvcnJlY3QgZmlsZSBoZWFkZXIgKGEgc291cmNlIGNvZGUgY29tbWVudCkuCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIENNVSBjb21wYXRpYmlsaXR5IHNpbmNlCisgICB0aGVyZSBpcyBubyB3YXkgdG8gZW5hYmxlIGl0IGFuZCBub2JvZHkgaGF2ZSBtaXNzZWQgaXQuCiAKIDIwMTAtMTEtMDEgMTY6NTAgIGR0czEyCiAKQEAgLTE1NTMsNjggKzM1MTc1LDI3OCBAQAogCiAyMDEwLTExLTAxIDE2OjQ3ICBkdHMxMgogCi0gICAqIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWY6CisgICAqIG1hbi9zbm1wZ2V0LjEuZGVmOgogCiAgICBEb2N1bWVudCAtQ2YgaW4gdGhlIHR3byBtYW4gcGFnZXMgc2VwYXJhdGVseS4KIAotMjAxMC0xMS0wMSAxNjozMCAgZHRzMTIKKzIwMTAtMTAtMjkgMjI6MzEgIHJzdG9yeQogCi0gICAqICBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCAgIAotICAgICAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgCi0gICAgICAgIG1hbi9zbm1wc2V0LjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsICAgCi0gICAgICBtYW4vc25tcHdhbGsuMS5kZWY6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgogCi0gICBSZW1vdmUgQ01VIGNvcHlyaWdodCBub3RpY2UgZnJvbSBtYW4gcGFnZXMgdGhhdAotICAgd2VyZSBub3QgaW5oZXJpdGVkIGZyb20gQ01VLVNOTVAKLSAgIChhbmQgcXVhbGlmeSB0aGUgY29weXJpZ2h0IGZvciB0aG9zZSB0aGF0IHdlcmUpLgorICAgbnVsbCBvdXQgYmlvIHBvaW50ZXJzIGFmdGVyIGJlaW5nIGZyZWVkOyBiYWlsIG9uIGNvbm5lY3Rpb24KKyAgIHdpdGggbm8gc3NsIHBvaW50ZXIKIAotMjAxMC0xMS0wMSAxMzo1NSAgZHRzMTIKKzIwMTAtMTAtMjkgMTQ6MzUgIGJ2YXNzY2hlCiAKLSAgICogIG1hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmLCBtYW4vZml4cHJvYy4xLmRlZiwgICAKLSAgICAgIG1hbi9taWIyYy11cGRhdGUuMS5kZWYsIG1hbi9taWIyYy4xLmRlZiwgbWFuL21pYl9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmLCBtYW4vcmVhZF9jb25maWcuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcF9hbGFybS4zLmRlZiwgbWFuL3NubXBfYXBpLjMuZGVmLCBtYW4vc25tcF9jb25maWcuNS5kZWYsICAKLSAgICAgICBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wY21kLjEuZGVmLCAKLSAgICAgICAgbWFuL3NubXBjb25mLjEuZGVmLCBtYW4vc25tcGQuOC5kZWYsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAotICAgICAgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCBtYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYsICAgCi0gICAgICBtYW4vc25tcGRlbHRhLjEuZGVmLCBtYW4vc25tcGRmLjEuZGVmLCBtYW4vc25tcGdldC4xLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBuZXRzdGF0LjEuZGVmLCBtYW4vc25tcHNldC4xLmRlZiwgIAotICAgICAgIG1hbi9zbm1wc3RhdHVzLjEuZGVmLCBtYW4vc25tcHRhYmxlLjEuZGVmLCBtYW4vc25tcHRlc3QuMS5kZWYsICAgCi0gICAgICBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAKLSAgICAgICAgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLCBtYW4vc25tcHVzbS4xLmRlZiwgbWFuL3NubXB2YWNtLjEuZGVmLAotICAgICAgICAgbWFuL3NubXB3YWxrLjEuZGVmLCBtYW4vdGttaWIuMS5kZWYsIG1hbi90cmFwdG9lbWFpbC4xLmRlZiwgICAKLSAgICAgIG1hbi92YXJpYWJsZXMuNS5kZWY6CisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYzoKIAotICAgU3VwcHJlc3MgZm9yY2luZyBvZiAiQmVya2VsZXkgRGlzdHJpYnV0aW9uIiBmb290ZXIKLSAgIChBbGxvd3MgTmV0LVNOTVAgdmVyc2lvbiBpbmZvcm1hdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1hbgotICAgcGFnZSkKKyAgIFJldmVydGVkIGluY29ycmVjdCBjaGFuZ2VzIGZyb20gcjE5NTc1LgogCi0yMDEwLTExLTAxIDEzOjQyICBkdHMxMgorMjAxMC0xMC0yOSAxNDoyMSAgYnZhc3NjaGUKIAotICAgKiAgbWFuL21pYjJjLjEuZGVmLCBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL3JlYWRfY29uZmlnLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXBfYWxhcm0uMy5kZWYsIG1hbi9zbm1wX2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vc25tcF90cmFwX2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBjbWQuMS5kZWYsIAotICAgICAgICBtYW4vc25tcGNvbmYuMS5kZWYsIG1hbi9zbm1wZC44LmRlZiwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCi0gICAgICBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsIG1hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwgIAotICAgICAgIG1hbi9zbm1wc2V0LjEuZGVmLCBtYW4vc25tcHRhYmxlLjEuZGVmLCBtYW4vc25tcHRlc3QuMS5kZWYsICAgCi0gICAgICBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAKLSAgICAgICAgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLCBtYW4vc25tcHVzbS4xLmRlZiwgbWFuL3NubXB2YWNtLjEuZGVmLAotICAgICAgICAgbWFuL3NubXB3YWxrLjEuZGVmLCBtYW4vdmFyaWFibGVzLjUuZGVmOgorICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKIAotICAgVXBkYXRlIG1hbiBwYWdlIGRhdGVzdGFtcHMgdG8gbWF0Y2ggdGhlIGxhdGVzdCAobm9uLXRyaXZpYWwpCi0gICBjb250ZW50IGNoYW5nZS4KKyAgIEZpeGVkIGEgYnVnIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5NTE1LgorCisyMDEwLTEwLTI5IDE0OjAwICBidmFzc2NoZQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBSZXZlcnRlZCB0aGUgaW5jb3JyZWN0IGNoYW5nZXMgZnJvbSByMTk1OTMuCisKKzIwMTAtMTAtMjkgMTM6MzggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgUmVkdWNlZCBudW1iZXIgb2YgbGVhay1hdC1leGl0IGNvbXBsYWludHMgdHJpZ2dlcmVkIGJ5CisgICBzbm1wbGliL2NlcnRfdXRpbC5jLgorCisyMDEwLTEwLTI5IDEzOjM3ICBidmFzc2NoZQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIE1vcmUgbGVhay1hdC1leGl0IGZpeGVzLgorCisyMDEwLTEwLTI5IDEzOjM1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaDoKKworICAgTW9yZSBsZWFrLWF0LWV4aXQgZml4ZXMuCiAKIDIwMTAtMTAtMjkgMTI6MTggIGJ2YXNzY2hlCiAKLSAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgogCiAgICBTcGVsbGluZyBmaXggaW4gbG9nIHRleHRzOiBjb250YWludGVyIC0+IGNvbnRhaW5lci4KIAorMjAxMC0xMC0yOSAwOTo1OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIFJhbiBmaWxsdXBfZW50cnlfaW5mbygpIHRocm91Z2ggaW5kZW50LgorCisyMDEwLTEwLTI5IDA5OjU2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgTmV0bGluayBJUHY2IHByZWZpeCBwcm9jZXNzaW5nOiBBZGRlZCBtb3JlIGRlYnVnIHN0YXRlbWVudHMuCisKKzIwMTAtMTAtMjkgMDk6NTQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBNYWRlIGFyZ3VtZW50IGNoZWNraW5nIG9mIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8oKSBtb3JlCisgICBzdHJpY3QuCisKKzIwMTAtMTAtMjkgMDk6NTIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaDoKKworICAgTW9yZSBNSUItc3BlY2lmaWMgbGVhay1hdC1leGl0IGZpeGVzLgorCisyMDEwLTEwLTI5IDA3OjU2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jOgorCisgICBNb3JlIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMuCisKKzIwMTAtMTAtMjggMTg6MzEgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIEZpeCBjb25zdCBxdWFsaWZpZXIgd2FybmluZworCisyMDEwLTEwLTI4IDE3OjUzICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jOgorCisgICBDbGVhbiBvdXQgU29sYXJpcyB3YXJuaW5ncworCisyMDEwLTEwLTI4IDE3OjUyICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKKworICAgTFZNIGlzIExpbnV4IG9ubHkKKworMjAxMC0xMC0yOCAxNzo1MSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBBdm9pZCBjaGFyIHN1YnNjcmlwdHMgKHNpZ25lZCBjaGFyc1whKQorCisyMDEwLTEwLTI4IDE3OjQzICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgY2FzdHMgYW5kIGZvcm1hdCBzcGVjaWZpZXJzIGluIGRlYnVnIG91dHB1dAorCisyMDEwLTEwLTI4IDE3OjQxICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgQ2FzdCB0byBzb2NrYWRkciB0byBhdm9pZCB3YXJuaW5nCisKKzIwMTAtMTAtMjggMTc6NDAgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBVbnRhbmdsZSBwaWNsIGZyb20ga3N0YXQgYWNjZXNzIHNvIGl0IGNvbXBpbGVzIG9uIHg4NiBTb2xyYWlzCisgICAxMC9PcGVuU29sYXJpcworCisyMDEwLTEwLTI4IDE1OjE1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgTW9yZSBsZWFrLWF0LWV4aXQgZml4ZXMuCisKKzIwMTAtMTAtMjggMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigpLAorICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIoKSwgbmV0c25tcF9jbG9uZV93YXRjaGVyX2luZm8oKQorICAgYW5kIG5ldHNubXBfb3duc193YXRjaGVyX2luZm8oKS4gU2VlIGFsc28gdGhlIERveHlnZW4gY29tbWVudHMKKyAgIGZvciBtb3JlIGluZm8uCisKIDIwMTAtMTAtMjggMTQ6MDIgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmMuY2hlY2tfdmFsdWVzLmNvbmY6CkBAIC0xNjIyLDYgKzM1NDU0LDEzIEBACiAgICBGaXggbG9naWMgb2YgdGVzdGluZyBmb3Igb3V0LW9mLXJhbmdlIGVudW0gdmFsdWVzLgogICAgUmVwb3J0ZWQgYnkgQm9yaXMgWndlaW11ZWxsZXIuCiAKKzIwMTAtMTAtMjggMTI6MjMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEdldCByaWQgb2YgT3BlblNTTC1yZWxhdGVkIGNvbXBpbGF0aW9uIHdhcm5pbmdzLiBTaG91bGQgd29yayBmb3IKKyAgIGJvdGggT3BlblNTTCB2ZXJzaW9ucyAwLjkueCBhbmQgMS4wLnguCisKIDIwMTAtMTAtMjggMTE6NDYgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jOgpAQCAtMTYyOSw2ICszNTQ2OCwxOSBAQAogICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIChtaXNtYXRjaCBiZXR3ZWVuIGZvcm1hdCBzcGVjaWZpY2F0aW9uCiAgICBhbmQgYXJndW1lbnQpIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjY1NjIuCiAKKzIwMTAtMTAtMjggMTE6NDMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIEdldCByaWQgb2YgcmVjZW50bHkgaW50cm9kdWNlZCBtZW1kdXAoKSBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0xMC0yOCAxMTo0MSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5NTUwLgorCiAyMDEwLTEwLTI4IDExOjMyICBidmFzc2NoZQogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CkBAIC0xNjM2LDYgKzM1NDg4LDIzIEBACiAgICBSZXZlcnRlZCByMTk1NjUgYmVjYXVzZSBpdCBjYXVzZWQgZ2NjIHRvIHJlcG9ydCBtb3JlIHdhcm5pbmdzCiAgICBpbnN0ZWFkIG9mIGxlc3MuCiAKKzIwMTAtMTAtMjggMTE6MTggIGJ2YXNzY2hlCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5NTY2LgorCisyMDEwLTEwLTI4IDEwOjQwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsIHNubXBsaWIvY2FsbGJhY2suYzoKKworICAgUGFydGlhbGx5IHJldmVydGVkIHIxOTUxNTogcmVtb3ZlZCB0aGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMKKyAgIGFuZCBkYXRhIG1lbWJlcnMgYWdhaW4sIGJ1dCB3aXRob3V0IHJlaW50cm9kdWNpbmcgdGhlCisgICBsZWFrLWF0LWV4aXQuCisKIDIwMTAtMTAtMjggMTA6MzIgIGJ2YXNzY2hlCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKQEAgLTE2NDQsMTEgKzM1NTEzLDgyIEBACiAgICBsb25nZXIgbmVjZXNzYXJ5IHRvIGNhc3QgdGhlc2UgdHdvIGFyZ3VtZW50cyAoaGFzIGJlZW4gcmV2ZXJ0ZWQKICAgIHZpYSByMTk1NjgpLgogCi0yMDEwLTEwLTI4IDEwOjA2ICBidmFzc2NoZQorMjAxMC0xMC0yOCAwOTo0NyAgYnZhc3NjaGUKIAotICAgKiB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgogCi0gICBCYWNrcG9ydGVkIElTREVGSU5FRCBmcm9tIHIxODY3MC4KKyAgIEZpeGVkIHlldCBhbm90aGVyIGNyYXNoIGluIG5ldHNubXBfY2FjaGVfcmVtb3ZlKCkuCisKKzIwMTAtMTAtMjggMDg6NDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgTWFkZSBpdCBlYXNpZXIgdG8gZW5hYmxlIHRoZSBtZW1vcnkgbGVhayBjaGVja2VyIGJ1aWx0LWluIGluCisgICBNU1ZDJ3MgQyBydW50aW1lIGxpYnJhcnkuCisKKzIwMTAtMTAtMjcgMjA6MzcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIFNpemVvZiBoYXMgdHlwZSBzaXplX3QKKworMjAxMC0xMC0yNyAyMDozNSAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdAorCisyMDEwLTEwLTI3IDE4OjQwICBuYmEKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgU3ByaW5rbGUgc29tZSB1bnNpZ25lZG5lc3Mgc28gdmFycyBhbmQgcGFyYW1zIGFncmVlIG9uIHR5cGUKKworMjAxMC0xMC0yNyAxODozOCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIEluaXRpYWxpemUgdmFycyB0aGF0IGdjYyB0aGlua3MgYXJlIHVuaW5pdGlhbGl6ZWQKKworMjAxMC0xMC0yNyAxODozNiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBBIG1vcmUgbWVhbmluZ2Z1bCB0ZXN0IGZvciBNTERfTElTVEVORVJfUVVFUlkKKworMjAxMC0xMC0yNyAxODozNSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5oOgorCisgICBwcm90b3R5cGVzIGFuZCBpbmNsdWRlcyB3ZXJlIG1pc3NpbmcKKworMjAxMC0xMC0yNyAxODozMyAgbmJhCisKKyAgICogYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIGFwcHMvc25tcHRlc3QuYzoKKworICAgQ2hlY2sgZmdldHMgcmV0dXJuCiAKIDIwMTAtMTAtMjUgMjA6NTkgIGR0czEyCiAKQEAgLTE2NjQsNiArMzU2MDQsMTQgQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMwNTgxMDE6IFdyaXRlYWJsZSAnbG9uZycgaW5zdGFuY2VzIHdvcmsgb24KICAgIDY0LWJpdCBzeXN0ZW1zLCBidXQgbm90IHdyaXRhYmxlICdpbnQncwogCisyMDEwLTEwLTI1IDE2OjA1ICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRG9uJ3QgYXR0ZW1wdCB0byBwcm9jZXNzIHVucmVjb2duaXNlZCAiaWdub3JlKiIgZGlyZWN0aXZlcy4KKyAgIFBhc3MgdGhlc2UgdGhyb3VnaCB0byB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJlZCBjb25maWcgaGFuZGxlcnMKKyAgIChpZiBhbnkpCisKIDIwMTAtMTAtMjUgMTU6NTYgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CkBAIC0xNjc5LDE3ICszNTYyNywyOTkgQEAKIAogMjAxMC0xMC0yNSAxMjo1NCAgYnZhc3NjaGUKIAotICAgKiB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbDoKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZToKIAogICAgQ0hBTkdFUzogV2luMzI6IHRlc3Rpbmc6IEF2b2lkIHRoYXQgVDIwMCBmYWlscyBvbiBrbm93biBNaWNyb3NvZnQKICAgIFNOTVAgZXh0ZW5zaW9uIERMTCBidWdzLgogCi0yMDEwLTEwLTIyIDA5OjE5ICBidmFzc2NoZQorMjAxMC0xMC0yNSAwODowNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBORVdTOiBMaW51eDogc25tcGQgaXMgYWdhaW4gc2luZ2xlLXRocmVhZGVkLgorICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTU5ODExOiBmcm9tIEphbiBTYWZyYW5lazogUmVpbXBsZW1lbnQKKyAgIExpbnV4IE5ldGxpbmsgSVB2NiBwcmVmaXggbGlzdGVuZXIuCisKKzIwMTAtMTAtMjUgMDc6MTUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEF2b2lkIHRoYXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBjYXN0aW5nIGF3YXkgdGhlICdjb25zdCcKKyAgIGF0dHJpYnV0ZSBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHNzbGN0eF9jbGllbnRfc2V0dXAoKSBhbmQKKyAgIHNzbGN0eF9zZXJ2ZXJfc2V0dXAoKS4KKworMjAxMC0xMC0yNSAwNjoyOCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oOgorCisgICBpbmNsdWRlIG5lZWRlZCBwcm90b3R5cGVzCisKKzIwMTAtMTAtMjUgMDY6MTYgIG5iYQorCisgICAqICBhcHBzL3NubXB0bHMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgQWRqdXN0IHR5cGVzIHRvIGJldHRlciBtYXRjaCB1c2FnZQorCisyMDEwLTEwLTI1IDA2OjE1ICBuYmEKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgUmV2ZWFsIGhpZGRlbiAtZSBhbmQgLXUgb3B0aW9ucworCisyMDEwLTEwLTI1IDA2OjE0ICBuYmEKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgaW5jbHVkZSBuZWVkZWQgcHJvdG90eXBlcworCisyMDEwLTEwLTI1IDA2OjAxICBuYmEKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmMsIGFwcHMvc25tcHRyYXBkLmMsCisgICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgaW5jbHVkZSBuZWVkZWQgcHJvdG90eXBlcworCisyMDEwLTEwLTI1IDA2OjAwICBuYmEKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAgYXBwcy9zbm1wdHJhcGRfc3FsLmM6CisKKyAgIGNvbnN0LWp1Z2dsaW5nIC0gd2UgZG9udCBsaWtlIHdhcm5pbmdzCisKKzIwMTAtMTAtMjMgMTE6NTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIFJlZW5hYmxlZCBjYWNoZSByZW1vdmFsIGFuZCBmcmVlaW5nIC8gbW92ZWQgY2FjaGUgcmVmY291bnQKKyAgIGluY3JlbWVudGluZyB0byBuZXRzbm1wX2NhY2hlX293bnNfY2FjaGUoKSAvIGNvbnZlcnRlZCB0YWJzIHRvCisgICBzcGFjZXMuCisKKzIwMTAtMTAtMjMgMTE6MDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIEZpeGVkIGFub3RoZXIgY3Jhc2ggaW4gbmV0c25tcF9jYWNoZV9yZW1vdmUoKS4KKworMjAxMC0xMC0yMyAxMTowMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFJlbW92aW5nIHRoZSBsYXN0IGNhY2hlIHZpYQorICAgbmV0c25tcF9jYWNoZV9yZW1vdmUoKSBkb2VzIG5vIGxvbmdlciB0cmlnZ2VyIGEgY3Jhc2guCisKKzIwMTAtMTAtMjMgMTA6NTcgIGJ2YXNzY2hlCisKKyAgICogCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jOgorCisgICBUMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWI6IEludHJvZHVjZWQKKyAgIG5ldHNubXBfY2FjaGVfY3JlYXRlKCkuCisKKzIwMTAtMTAtMjIgMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIERpc2FibGVkIGNhY2hlIGRlYWxsb2NhdGlvbiBiZWNhdXNlIGl0IG1ha2VzIHR3byB1bml0IHRlc3RzIGZhaWwKKyAgIC0gdG8gYmUgYW5hbHl6ZWQgZnVydGhlci4KKworMjAxMC0xMC0yMiAxNTowMyAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmM6CisKKyAgIEJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0xMC0yMiAxNDo0OSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBNSUItc3BlY2lmaWMgbGVhay1hdC1leGl0IGZpeGVzLgorCisyMDEwLTEwLTIyIDE0OjQyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGV4YW1wbGUgTUlCOiBBZGRlZCBzaHV0ZG93biBmdW5jdGlvbiB0aGF0IGZyZWVzCisgICBhbGwgbWVtb3J5IG93bmVkIGJ5IHRoaXMgTUlCIGltcGxlbWVudGF0aW9uLgorCisyMDEwLTEwLTIyIDE0OjQwICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBdXRvbWF0aWNhbGx5IGZyZWUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAgIGFsbG9jYXRlZCBieSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCgpLgorCisyMDEwLTEwLTIyIDE0OjM4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQ291bnQgdGhlIG51bWJlciBvZiB1c2VycyBvZiBhIG5ldHNubXBfY2FjaGUgZGF0YQorICAgc3RydWN0dXJlIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQuCisKKzIwMTAtMTAtMjIgMTQ6MzYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgcmVmZXJlbmNlIGNvdW50IGluIHRoZQorICAgbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzIGRhdGEgc3RydWN0dXJlIGFuZCBtYWRlIHN1cmUgdGhhdCB0aGlzCisgICBkYXRhIHN0cnVjdHVyZSBpcyBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIGhhbmRsZXIgdGhhdCBvd25zCisgICBpdCBpcyB1bnJlZ2lzdGVyZWQuCisKKzIwMTAtMTAtMjIgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBuZXRzbm1wX3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKCkuCisKKzIwMTAtMTAtMjIgMDg6NTEgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKIAotICAgQmFja3BvcnRlZCByMTk1MjU6IG1hZGUgc3VyZSB0aGF0IGNsZWFuX3N1YnRyZWUoKSBkZWFsbG9jYXRlcyBhbGwKLSAgIGNvbnRleHQgY2FjaGUgbm9kZXMuCisgICBGb2xsb3ctdXAgZm9yIHIxOTUxMTogbWFkZSBzdXJlIHRoYXQgY2xlYW5fc3VidHJlZSgpIGRlYWxsb2NhdGVzCisgICBhbGwgY29udGV4dCBjYWNoZSBub2Rlcy4KKworMjAxMC0xMC0yMiAwODo0OSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IG5ldHNubXBfY2FjaGVfZnJlZSgpOiBBIG1vcmUgZGV0YWlsZWQgbWVzc2FnZSBpcworICAgbm93IGxvZ2dlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZnJlZSBhIGNhY2hlIHRoYXQgaXMgc3RpbGwgaW4gdGhlCisgICBjYWNoZSBsaXN0LgorCisyMDEwLTEwLTIyIDA2OjM5ICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgUmV2ZXJ0ZWQgbHRtYWluLnNoIGNoYW5nZXMgZnJvbSByMTk1MjIuCisKKzIwMTAtMTAtMjIgMDY6MzQgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBsdG1haW4uc2g6CisKKyAgIFJlZ2VuZXJhdGVkIGF1dG9jb25mL2F1dG9tYWtlL2xpYnRvb2wtZ2VuZXJhdGVkIGZpbGVzIGJ5IHJ1bm5pbmcKKyAgIGF1dG9yZWNvbmYgLWYuCisKKzIwMTAtMTAtMjEgMDc6NTEgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBSZWFwcGxpZWQgcjE4NzI2K3IxODc2NjogbWFrZSBsaWJ0b29sIHN1cHBvcnQgLWZzdGFjay1wcm90ZWN0b3IqLgorICAgU2VlIGFsc28KKyAgIGh0dHA6Ly9ibG9nLmdtYW5lLm9yZy9nbWFuZS5jb21wLmdudS5saWJ0b29sLmJ1Z3MvbW9udGg9MjAxMDA2MDEKKyAgIGZvciB0aGUgY29uZmlybWF0aW9uIHRoYXQgdGhpcyBpcyBhIGxpYnRvb2wgYnVnLgorCisyMDEwLTEwLTIwIDIwOjE2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgQXZvaWQgdGhhdCBuZXRzbm1wX2NoZWNrX2RlZmluZWRuZXNzKCkgdHJpZ2dlcnMgYSBidWlsZCBmYWlsdXJlCisgICB3aGVuIGNvbXBpbGVkIGFnYWluc3Qgb2xkIFZhbGdyaW5kIGhlYWRlcnMuIE5vdGU6IHRoZSBpbnRyb2R1Y2VkCisgICBjaGVjayBpcyBzdHJpY3RlciB0aGFuIG5lY2Vzc2FyeSAtIFZBTEdSSU5EX1BSSU5URl9CQUNLVFJBQ0UoKQorICAgd2FzIGludHJvZHVjZWQgaW4gVmFsZ3JpbmQgMy41LjAgb3IgYmVmb3JlIChub3Qgc3VyZSB3aGljaAorICAgdmVyc2lvbikuCisKKzIwMTAtMTAtMjAgMTc6MTMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBhZGRlZCBhIGNvbW1lbnQgaW4gY29kZSBub3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhIGZhaXJseSByZWNlbnQKKyAgIHZhbGdyaW5kCisKKzIwMTAtMTAtMjAgMTc6MDAgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlOgorCisgICByZXJhbiBhdXRvY29uZiBhZnRlciB1cGRhdGluZyBsaWJ0b29sCisKKzIwMTAtMTAtMjAgMTY6NTkgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgaW5zdGFsbC1zaCwgbHRtYWluLnNoLCBtNC9saWJ0b29sLm00LCAgIAorICAgICAgbTQvbHRvcHRpb25zLm00LCBtNC9sdHZlcnNpb24ubTQsIG00L2x0fm9ic29sZXRlLm00OgorCisgICB1cGRhdGUgdG8gbGlidG9vbCAyLjQKKworMjAxMC0xMC0yMCAxNjo1OSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGRpc3QvYXV0b2NvbmYtdmVyc2lvbjoKKworICAgdXBkYXRlZCB0byBhdXRvY29uZiAyLjY4CisKKzIwMTAtMTAtMjAgMTQ6MjYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCBzbm1wbGliL2NhbGxiYWNrLmMsICAgCisgICAgICB3aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKCkKKyAgIGFuZCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZSgpLgorICAgQ0hBTkdFUzogYWdlbnQ6IE1lbW9yeSBhbGxvY2F0ZWQgYnkgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKyAgIGZvciBzdG9yaW5nIFNOTVAgdmFyaWFibGVzIGlzIG5vdyBmcmVlZCB3aGVuIHRoZSBhc3NvY2lhdGVkCisgICBoYW5kbGVyIGlzIHVucmVnaXN0ZXJlZC4KKyAgIENIQU5HRVM6IGFnZW50OiBDYWxsYmFjayBmdW5jdGlvbiBkYXRhIGRlYWxsb2NhdGlvbiBkb2VzIG5vCisgICBsb25nZXIgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIEFnZW50WCBzZXNzaW9uIC0gdGhlCisgICBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciBBZ2VudFggc2Vzc2lvbnMgaXMgbm93IGRlYWxsb2NhdGVkCisgICBqdXN0IGFzIHRoYXQgZm9yIGFueSBvdGhlciBzZXNzaW9uLiBUaGlzIGZpeGVzIGEgbGVhay1hdC1leGl0LgorICAgQ0hBTkdFUzogYWdlbnQ6IE5vdGlmeSBmaWx0ZXIgdGFibGU6IENhbGxiYWNrIGZ1bmN0aW9uIGRhdGEKKyAgIGRlYWxsb2NhdGlvbiBkb2VzIG5vIGxvbmdlciBmcmVlIHRoZSBkYXRhIGluCisgICAqICAgICAqc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC5jb250YWluZXIgLSB0aGlzIGlzIG5vdyBkb25lIGJ5ICAKKyAgICAgICBzaHV0ZG93bl9zbm1wTm90aWZ5RmlsdGVyVGFibGUoKS4gICAgQ0hBTkdFUzogV2luMzI6CisgICAgICBzaHV0ZG93bl9zbm1wTm90aWZ5RmlsdGVyVGFibGUoKSBhbmQKKworICAgc2h1dGRvd25fd2luRXh0RExMKCkgYXJlIG5vdyBpbnZva2VkIHdoZW4gdGhlIE5ldC1TTk1QIHNlcnZpY2UgaXMKKyAgIHN0b3BwZWQuCisKKzIwMTAtMTAtMjAgMTM6NDcgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYzoKKworICAgVW5pdC10ZXN0aW5nLCBUMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWI6IGFkZGVkIGluaXRfYWdlbnQoKSBhbmQKKyAgIHNodXRkb3duX2FnZW50KCkgY2FsbHMuCisKKzIwMTAtMTAtMjAgMTM6MTIgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6CisKKyAgIEZpeCBub24tQU5TSSBmdW5jdGlvbiBoZWFkaW5nCiAKIDIwMTAtMTAtMjAgMTI6NTEgIHJzdG9yeQogCkBAIC0xNzAxLDcgKzM1OTMxLDcgQEAKIAogICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAogICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wZC5jLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4KICAgIENIQU5HRVM6IGFnZW50OiBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZCBzaHV0ZG93bl9hZ2VudCgpCkBAIC0xNzE3LDE0ICszNTk0Nyw4MiBAQAogICAgaXMgZm9yIHRoaXMgY2hhbmdlIHRoYXQgaXQgd2FzIG5lY2Vzc2FyeSB0byBpbnRyb2R1Y2UgdGhlIG5ldwogICAgZnVuY3Rpb24gc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuCiAKLTIwMTAtMTAtMjAgMDc6NTQgIGJ2YXNzY2hlCisyMDEwLTEwLTE5IDIzOjQ5ICBtYWdmcgogCi0gICAqIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZToKIAotICAgQ0hBTkdFUzogdGVzdGluZzogTWFkZSBpdCBwb3NzaWJsZSB0byBhbmFseXplIGFsbCBjb2RlIGNvdmVyZWQgYnkKLSAgIHRoZSByZWdyZXNzaW9uIHRlc3RzIHdpdGggYSBkeW5hbWljIGFuYWx5emVyLCBhdCBsZWFzdCBpZiB0aGF0Ci0gICBhbmFseXplciBzdXBwb3J0cyBmb2xsb3dpbmcgY2hpbGQgcHJvY2Vzc2VzLgotICAgKEJhY2twb3J0ZWQgcjE5MjgzIGZyb20gdGhlIHRydW5rLikKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCBtaXNzaW5nIHByZWNvbmRpdGlvbnMKKworMjAxMC0xMC0xOSAyMjoxMSAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBkb24ndCBkZWZhdWx0IHRvIGFwcGx5aW5nIHRvIDUuMgorCisyMDEwLTEwLTE5IDIyOjEwICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGFkZGVkIHRoZSA1LjYgYnJhbmNoCisKKzIwMTAtMTAtMTkgMjE6MTMgIG5iYQorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgQlVHIDMwNzkwNzIgZnJvbSBEYXZlIEJlYWw6IGZpeCBidWZmZXIgb3ZlcmZsb3cgZnJvbSBiYWQgdXNlIG9mCisgICBzdHJuY2F0CisKKzIwMTAtMTAtMTkgMjA6NTUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6CisKKyAgIFBBVENIOiAzMDg1Mjk1IGZyb20gQmlsbCBGZW5uZXI6IHJlY29nbml6ZSBMSVNURU4gc3RhdGUgYWdhaW4KKworMjAxMC0xMC0xOSAyMDowOSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmM6CisKKyAgIEZpeCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTEwLTE5IDIwOjA4ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYzoKKworICAgRml4IHJldHVybmluZyBnYXJiYWdlIGluIGhyU1dJbnN0YWxsZWROYW1lIChzZWUgcmV2IDE5NDg0IGZvcgorICAgZnVydGhlciBub3RlcykKKworMjAxMC0xMC0xOSAxOTo1OCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jOgorCisgICBQcm90ZWN0IGFnYWluc3QgdW5zYWZlICglKSBkZXZpY2UgbmFtZXMKKworMjAxMC0xMC0xOSAxOTo1NyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIFNvbGFyaXMgZG9lcyBub3QgdXNlIGdldHN0YXQsIHNvIGRvbnQgZGVjbGFyZSBpdAorCisyMDEwLTEwLTE5IDE5OjU2ICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYzoKKworICAgdWRwL3RjcCBjb25mdXNpb24gaW4gZGVidWcgaGFuZGxlCisKKzIwMTAtMTAtMTkgMTk6NTQgIG5iYQorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIEFib3J0IGFmdGVyIGJhZCAtQz8gb3B0aW9uCisKKzIwMTAtMTAtMTkgMTk6NTMgIG5iYQorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIERlbGV0ZSByZWR1bmRhbnQgZXh0ZXJuIGRlY2xhcmF0aW9ucwogCiAyMDEwLTEwLTE5IDE4OjA4ICBidmFzc2NoZQogCkBAIC0xNzM0LDYgKzM2MDMyLDY2IEBACiAgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IEF2b2lkIHRoYXQgTVNWQyAyMDEwIHByaW50cyBhIHdhcm5pbmcKICAgIG1lc3NhZ2UgYWJvdXQgcmVkZWZpbmluZyBFQUREUklOVVNFLgogCisyMDEwLTEwLTE5IDE4OjA1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IEF2b2lkIHRoYXQgTVNWQyByZXBvcnRzIGEgd2FybmluZyBtZXNzYWdlIGFib3V0CisgICByZWRlZmluaXRpb24gb2YgdGhlIG1hbGxvYygpIG1hY3JvIGR1cmluZyBidWlsZGluZyB0aGUgTmV0LVNOTVAKKyAgIHNvdXJjZSBjb2RlLgorCisyMDEwLTEwLTE5IDA3OjA0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogRmFjdG9yIG91dCBjb21tb24gY29uZmlnX2FkZF9taWIgc3RhdG1lbnRzCisKKzIwMTAtMTAtMTggMTQ6MjIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIE1hcmsgdGhlIHByb3BlciBoYW5kbGVyIHRoYXQgb3ducyB0aGUgdGFibGUgcmVnaXN0cmF0aW9uCisgICBpbmZvcm1hdGlvbi4KKworMjAxMC0xMC0xOCAxMDo1NCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIGZ1bmN0aW9ucyBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJyZXEoKSwKKyAgIG5ldHNubXBfcmVnaXN0cmF0aW9uX293bnNfdGFicmVxKCksIG5ldHNubXBfaXRlcmF0b3JfY2xvbmUoKS4KKyAgIEV4cG9ydGVkIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fY2xvbmUoKS4KKyAgIENIQU5HRVM6IGFnZW50OiBNb2RpZmllZCBuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZSgpIHN1Y2gKKyAgIHRoYXQgaXQgZnJlZXMgdGhlIHRhYmxlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gYQorICAgdGFibGUgaXRlcmF0b3IgdG9vLgorICAgQ0hBTkdFUzogYWdlbnQ6IE1vZGlmaWVkIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIoKQorICAgc3VjaCB0aGF0IHRoZSB0YWJsZSBpdGVyYXRvciBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBmcmVlZAorICAgd2hlbiB0aGUgYXNzb2NpYXRlZCBoYW5kbGVyIGlzIGZyZWVkLgorICAgCisgICBSZXN0b3JlZCB0aGUgYmVoYXZpb3Igb2YgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcigpIHRvIHRoYXQgb2YKKyAgIHIxOTQ0OSwgdGhhdCBpcywgbm90IHNldHRpbmcgdXAgdGhlIGRhdGFfZnJlZSBwb2ludGVyIGJlY2F1c2Ugbm90CisgICBhbGwgY2FsbGVycyBvZiBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKCkgZXhwZWN0IHRoYXQgdGFibGUKKyAgIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBpcyBmcmVlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaXMKKyAgIGZyZWVkLgorCisyMDEwLTEwLTE4IDEwOjM0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3RuZXNzLgorCiAyMDEwLTEwLTE4IDA4OjUyICBidmFzc2NoZQogCiAgICAqIGFnZW50L3NubXBkLmM6CkBAIC0xNzQyLDYgKzM2MTAwLDEzIEBACiAgICB3aW5kb3csIHRoZSBzbm1wZCBwcm9jZXNzIG5vdyBzdG9wcyB1cG9uIHRoZSBmaXJzdCBrZXkgcHJlc3MuCiAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkZWJ1ZyBzbm1wZC5leGUgZm9yIG1lbW9yeSBsZWFrcy4KIAorMjAxMC0xMC0xOCAwNjoyNSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRob3V0IHdhcm5pbmdzIHdpdGggTVNWQyA2LgorCiAyMDEwLTEwLTE4IDA2OjE1ICBtYWdmcgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKQEAgLTE3NzcsMTIgKzM2MTQyLDY1IEBACiAKIDIwMTAtMTAtMTcgMTc6MzMgIGJ2YXNzY2hlCiAKLSAgICogc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYzoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBBdm9pZCB0aGF0IFZhbGdyaW5kIGNvbXBsYWlucyBhYm91dAogICAgdW5pbml0aWFsaXplZCBkYXRhIGZvciB0aGUgYnVmZmVycyByZXR1cm5lZCBieQogICAgbmV0c25tcF9jYWxsYmFja19yZWN2KCkgYW5kIG5ldHNubXBfY2FsbGJhY2tfaG9va19idWlsZCgpLgogCisyMDEwLTEwLTE3IDE2OjU3ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IHRhYmxlX2hlbHBlcl9oYW5kbGVyKCksIDY0LWJpdCBhcmNoaXRlY3R1cmVzOgorICAgYXZvaWQgcGFzc2luZyBhIHBvaW50ZXIgdG8gYSAzMi1iaXQgdmFsdWUgdG8gYSBmdW5jdGlvbiB0aGF0CisgICBleHBlY3RzIGEgcG9pbnRlciB0byBhIDY0LWJpdCB2YWx1ZSAocGFyc2Vfb25lX29pZF9pbmRleCgpKS4gTm90CisgICBzdXJlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGJ1ZyB3ZXJlLiBJdCBtaWdodCBoYXZlIGNhdXNlZAorICAgdmVyeSBzdHJhbmdlIHRhYmxlIGJlaGF2aW9yIG9uIDY0LWJpdCBiaWcgZW5kaWFuIHN5c3RlbXMuCisgICBGb3VuZCB0aGlzIHZpYSBWYWxncmluZC4KKworMjAxMC0xMC0xNyAxNjo1MSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEF2b2lkIHRoYXQgaHJTV1J1blBhdGggY29udGFpbnMgdHJhaWxpbmcgZ2FyYmFnZQorICAgY2hhcmFjdGVycyBvbiBMaW51eCBzeXN0ZW1zLgorICAgRm91bmQgdGhpcyBieSBhbmFseXppbmcgYSBWYWxncmluZCBjb21wbGFpbnQuIEZvciBhbnlvbmUgd2hvIGlzCisgICB3b25kZXJpbmcgd2h5IHRoaXMgcGF0Y2ggbWFrZXMgc2Vuc2UsIGEgcXVvdGUgZnJvbSB0aGUgZ2xpYmMKKyAgIHNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbgorICAgKGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL21hbnVhbC9odG1sX25vZGUvRm9ybWF0dGVkLU91dHB1dC1GdW5jdGlvbnMuaHRtbCk6CisgICA8cXVvdGU+CisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZCBiZQorICAgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgbnVsbC4gSWYKKyAgIHRoaXMgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0byBzaXplLCBub3QgYWxsIGNoYXJhY3RlcnMgZnJvbQorICAgdGhlIHJlc3VsdCBoYXZlIGJlZW4gc3RvcmVkIGluIHMuCisgICA8L3F1b3RlPgorICAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRpZmZlcnMgZnJvbSB0aGUgc3RhbmRhcmQgYmVoYXZpb3IuIEEgcXVvdGUKKyAgIGZyb20gaHR0cDovL29wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDc5MDg3OTkveHNoL3NucHJpbnRmLmh0bWw6CisgICA8cXVvdGU+CisgICBSRVRVUk4gVkFMVUUKKyAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAgIGJ5dGVzIHRyYW5zbWl0dGVkIGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBpbiB0aGUgY2FzZSBvZgorICAgc3ByaW50ZigpIG9yIHNucHJpbnRmKCkgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBhbiBvdXRwdXQgZXJyb3IKKyAgIHdhcyBlbmNvdW50ZXJlZC4KKyAgIDwvcXVvdGU+CisKKzIwMTAtMTAtMTcgMTQ6MzEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogSXQgaXMgYWdhaW4gcG9zc2libGUgdG8gcnVuIGFuIGluZGl2aWR1YWwgdGVzdAorICAgdmlhIHRoZSBzY3JpcHQgdGVzdGluZy9SVU5URVNUUy4KKworMjAxMC0xMC0xNyAxNDoyOCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCB0aGUgZnVuY3Rpb24gbmV0c25tcF9jaGVja19kZWZpbmVkbmVzcygpLAorICAgd2hpY2ggaGVscHMgdG8gZmluZCB0aGUgY2F1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIGVycm9ycyBhcworICAgcmVwb3J0ZWQgYnkgVmFsZ3JpbmQuCisKIDIwMTAtMTAtMTcgMTQ6MjQgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmg6CkBAIC0xNzkwLDI5ICszNjIwOCwxNTggQEAKICAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgZGVjbGFyYXRpb246IHRoZSBmdW5jdGlvbiBhZ2VudHhfYnVpbGQoKSBoYXMKICAgIGJlZW4gcmVtb3ZlZCBhIGxvbmcgdGltZSBhZ28uCiAKKzIwMTAtMTAtMTcgMTQ6MDUgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgdGhlIFZhbGdyaW5kIGhlYWRlciBmaWxlcy4KKworMjAxMC0xMC0xNyAxMjowMSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTQ3NzogbWFkZSB0aGUgaW5zZXJ0ZWQgdHlwZWNhc3RzIHBvcnRhYmxlLgorCisyMDEwLTEwLTE3IDExOjA0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTQ3NjogZml4ZWQgYSB0eXBvLgorCisyMDEwLTEwLTE3IDA5OjM2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIGJ5IGluc2VydGluZyBhcHByb3ByaWF0ZSBjYXN0cy4KKworMjAxMC0xMC0xNyAwOToyNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpLXJlbGF0ZWQgY2xlYW51cC4KKworMjAxMC0xMC0xNyAwMTo0MSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGFnZW50L3NubXBkLmM6CisKKyAgIE5FV1M6IHNubXBkOiBSZW1vdmUgdXRpbF9mdW5jcy9FeGl0IGZyb20gdGhlIHJlcXVpcmVtZW50IHNldHMgb2YKKyAgIHV0aWxfZnVuY3MgYW5kIGRlZmF1bHRfbW9kdWxlcy4KKyAgIE5FV1M6IHNubXBkOiBOZXZlciB1c2UgRXhpdCB0byB0ZXJtaW5hdGUgdGhlIGFnZW50LgorCisyMDEwLTEwLTE2IDIyOjMyICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCBhZ2VudC9zbm1wZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB0aGUgc2V0dGluZyBvZiB0aGUgYXJndnJlc3RhcnQqIHZhcmlhYmxlcworICAgb3B0aW9uYWwgb24gVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRS4KKyAgIE5FV1M6IHNubXBkOiBSZW1vdmUgdXRpbF9mdW5jcy9yZXN0YXJ0IGZyb20gdGhlIHJlcXVpcmVtZW50IHNldHMKKyAgIG9mIHV0aWxfZnVuY3MgYW5kIGRlZmF1bHRfbW9kdWxlcy4KKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgdXRpbF9mdW5jcy9yZXN0YXJ0IHRvIHRoZSByZXF1aXJlbWVudCBzZXQgb2YKKyAgIHVjZC1zbm1wL3ZlcnNpb25pbmZvLgorCisyMDEwLTEwLTE2IDIyOjA1ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogRXh0ZW5kIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkYXRhX2Nsb25lIGFuZAorICAgZGF0YV9mcmVlCisKKzIwMTAtMTAtMTYgMjI6MDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvcHkgd2F0Y2hlZCBkYXRhIGl0ZW1zCisgICB3aXRob3V0IG1lbW9yeSBsZWFrcy4KKworMjAxMC0xMC0xNiAyMjowMSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgY21wCisKKzIwMTAtMTAtMTYgMTk6NDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IERvIG5vdCBsZWFrIHRoZSBsaW1pdHMgb2Ygc2NhbGFyX2dyb3VwIG9iamVjdHMgb24KKyAgIHNodXRkb3duLgorCiAyMDEwLTEwLTE2IDA4OjM3ICBidmFzc2NoZQogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudDoKIAogICAgU3BlbGxpbmcgZml4OiBkdWxwaWNhdGUgLT4gZHVwbGljYXRlLgogCi0yMDEwLTEwLTE1IDEyOjUzICBidmFzc2NoZQorMjAxMC0xMC0xNiAwODozNCAgYnZhc3NjaGUKIAotICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgICAKLSAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaDoKKyAgICogCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLgotICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbgotICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpIGluIGEgcHVibGljIGFnZW50IGhlYWRlciBmaWxlLgotICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgbWVtb3J5IGxlYWsgaW4KLSAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4KLSAgIChCYWNrcG9ydGVkIHIxOTQ1MCBhbmQgcjE5NDU0IGZyb20gdHJ1bmsuKQorICAgQWRkZWQgbW9yZSB0ZXN0IGNvZGUuCisKKzIwMTAtMTAtMTYgMDg6MzMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NDY1OiBoYW5kbGUgb3V0LW9mLW1lbW9yeSBwcm9wZXJseSAvIHJlbW92ZWQgYQorICAgZHVwbGljYXRlIGZ1bmN0aW9uLgorCisyMDEwLTEwLTE1IDE5OjE3ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMsCisgICAgICAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jbGliLmM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEludHJvZHVjZWQgbmV3IHRlc3QgdHlwZSBuZXh0IHRvIGNhcHAgYW5kIGNsaWI6CisgICBjYWdlbnRsaWIuCisKKzIwMTAtMTAtMTUgMTg6NTYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NsaWIuYzoKKworICAgTkVXUzogc25tcGxpYjogQWRkZWQgbmV0c25tcF9taWJfaGFuZGxlci5kYXRhX2Nsb25lLCBhIGZ1bmN0aW9uCisgICBwb2ludGVyIHRoYXQgZGVmaW5lcyBob3cgdG8gY2xvbmUgbmV0c25tcF9taWJfaGFuZGxlci5teXZvaWQuCisgICBNdXN0IGJlIGRlZmluZWQgaWYgYW5kIG9ubHkgaWYgZGF0YV9mcmVlIGlzIHNldC4gVGhlIGZ1bmN0aW9uCisgICBuZXRzbm1wX2hhbmRsZXJfZHVwKCkgZG9lcyBub3cgY2xvbmUgTUlCIGhhbmRsZXIgcHJpdmF0ZSBkYXRhIGlmCisgICBkYXRhX2Nsb25lKCkgaXMgc2V0LiBQcmV2aW91c2x5IGFmdGVyIGR1cGxpY2F0aW5nIGEgTUlCIGhhbmRsZXIKKyAgIGFuZCB1bnJlZ2lzdGVyaW5nIG9uZSBvZiB0aGUgdHdvIE1JQiBoYW5kbGVycywgdGhlIHByaXZhdGUgZGF0YQorICAgcG9pbnRlciAobXl2b2lkKSBvZiB0aGUgb3RoZXIgYmVjYW1lIGEgZGFuZ2xpbmcgcG9pbnRlci4gTm90ZToKKyAgIGFkZGl0aW9uIG9mIG5ldHNubXBfbWliX2hhbmRsZXIuZGF0YV9jbG9uZSBpcyBhbiBBQkkgY2hhbmdlLgorICAgQ0hBTkdFUzogdGVzdGluZzogYWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvIHRoZSBoYW5kbGVyCisgICByZWdpc3RyYXRpb24gdGVzdC4KKworMjAxMC0xMC0xNSAxODozMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KIAogMjAxMC0xMC0xNSAxMjozMCAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NsaWIuYzoKIAogICAgUmV2ZXJ0ZWQgcjE5NDYwIGJlY2F1c2UgaXQgbWFrZXMgc29tZSByZWdyZXNzaW9uIHRlc3RzIGZhaWwKICAgIChUMTIwcHJveHlnZXRfc2ltcGxlLCBUMTIxcHJveHlzZXRfc2ltcGxlLApAQCAtMTgyOCwxNyArMzYzNzUsMTA4IEBACiAgICBoYW5kbGVyIG5vIGxvbmdlciBjYXVzZXMgYSBjcmFzaCAoZG91YmxlIGZyZWUpIHdoZW4KICAgIGhhbmRsZXItPm15dm9pZCBvZiB0aGUgb3JpZ2luYWwgaGFuZGxlciB3YXMgbm9uLU5VTEwuCiAKLTIwMTAtMTAtMTUgMTA6MDIgIGJ2YXNzY2hlCisyMDEwLTEwLTE1IDExOjMyICBidmFzc2NoZQogCi0gICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYywgbWFuL25ldHNubXBfaGFuZGxlci4zOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NsaWIuYzoKIAotICAgU3BlbGxpbmcgZml4OiBkdWxwaWNhdGVzIC0+IGR1cGxpY2F0ZXMuCisgICBBZGRlZCBhIHVuaXQgdGVzdCBmb3IgaGFuZGxlciByZWdpc3RyYXRpb24gYW5kIGRlcmVnaXN0cmF0aW9uLgogCi0yMDEwLTEwLTE1IDA5OjUzICBidmFzc2NoZQorMjAxMC0xMC0xNSAxMDo1NiAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIEZpeGVkIGEgc3BlbGxpbmcgZXJyb3IgaW4gYSBzb3VyY2UgY29kZSBjb21tZW50LgorICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBCdWlsZHMgbm93IGNvcnJlY3RseSB3aXRoIGEgNjQtYml0CisgICBjb21waWxlci4KKworMjAxMC0xMC0xNSAwOTo0NSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHNubXBfc2h1dGRvd24oKTogYWRkZWQgY2FsbCB0bworICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpLgorCisyMDEwLTEwLTE1IDA2OjQ1ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTQ1MDogbGV0IG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkgZnJlZQorICAgYWxsIHRhYmxlX2RhdGFzZXQtcmVsYXRlZCBtZW1vcnkuCisKKzIwMTAtMTAtMTQgMjM6MTUgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1ha2UgaXQgcG9zc2libGUgdG8gcmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZgorICAgMi42OC4KKworMjAxMC0xMC0xNCAyMzowMSAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQmUgY29uc3QgY29ycmVjdCBvdmVyIGNhbGxzIHRvIHN0ciogZnVuY3Rpb25zLgorCisyMDEwLTEwLTE0IDE1OjE5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jbGliLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBkZWNsYXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uCisgICBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkgaW4gYSBwdWJsaWMgYWdlbnQgaGVhZGVyIGZpbGUuCisgICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBtZW1vcnkgbGVhayBpbgorICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpLgorICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IHVucmVnaXN0ZXJpbmcgYQorICAgdGFibGUgaGFuZGxlci4KKyAgIENIQU5HRVM6IHRlc3Rpbmc6IFVuaXQgdGVzdHMgY2FuIG5vdyBpbnZva2UgZnVuY3Rpb25zIGZyb20KKyAgIGxpYmFnZW50LgorICAgQ0hBTkdFUzogdGVzdGluZzogQWRkZWQgdW5pdCB0ZXN0IGZvciB0YWJsZV9kYXRhc2V0LgorCisyMDEwLTEwLTE0IDE0OjA1ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIFVuaXQgdGVzdCBUMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzogRml4ZWQgbGVha3MtYXQtZXhpdC4KKworMjAxMC0xMC0xNCAwODo0MyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9ydW46CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byBhbmFseXplIHRoZSB1bml0IHRlc3RzCisgICB3aXRoIFZhbGdyaW5kIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgU05NUF9TQVZFX1RNUERJUiBhbmQgRFlOQU1JQ19BTkFMWVpFUi4gQW4gZXhhbXBsZTogKGV4cG9ydAorICAgU05NUF9TQVZFX1RNUERJUj15ZXMgRFlOQU1JQ19BTkFMWVpFUj0idmFsZ3JpbmQKKyAgIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tbGVhay1jaGVjaz1mdWxsIjsgY2QgdGVzdGluZyAmJgorICAgLi9SVU5GVUxMVEVTVFMgLWcgdW5pdC10ZXN0cykKKworMjAxMC0xMC0xNCAwODo0MCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgorCisgICBVbml0IHRlc3QgVDAwNHNubXBfZW51bV9jbGliLmM6IGFkZGVkIHRlc3QgaGVhZGVyIC8gYWRkZWQgYSB0ZXN0CisgICBjYXNlLgorCisyMDEwLTEwLTE0IDA4OjM5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBGaXhlZCBsZWFrcy1hdC1leGl0IGluIHVuaXQgdGVzdCBUMDAyY29udGFpbmVyc19jbGliLmMuCisKKzIwMTAtMTAtMTQgMDg6MzggIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgRml4ZWQgYSBsZWFrLWF0LWV4aXQgaW4gdW5pdCB0ZXN0IFQwMDFkZWZhdWx0c3RvcmVfY2xpYi5jLgogCiAyMDEwLTEwLTE0IDA4OjM2ICBidmFzc2NoZQogCkBAIC0xODQ4LDE5ICszNjQ4NiwxOTcgQEAKICAgIHNlX2FkZF9wYWlyX3RvX2xpc3QoKSB3aXRoIGEgdmFsdWUgdGhhdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlCiAgICBsaXN0LgogCisyMDEwLTEwLTE0IDA3OjE2ICBidmFzc2NoZQorCisgICAqIHRlc3Rpbmc6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0xMC0xNCAwNzoxMiAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAwY29uZmlndXJlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAwY29uZmlndXJlX3NpbXBsZToKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIHZhcmlhYmxlICRTTk1QX0JBU0VESVIgaXMgYXZhaWxhYmxlIGluIHRoZQorICAgVDAwMGNvbmZpZ3VyZSB0ZXN0LgorCisyMDEwLTEwLTE0IDA2OjE5ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVnZW5lcmF0ZWQKKworMjAxMC0xMC0xNCAwNTozNiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIFF1ZWxsIHdhcm5pbmdzCisKKzIwMTAtMTAtMTQgMDM6NTAgIHJzdG9yeQorCisgICAqICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIHRlc3QgZm9yIG9wZW5zc2wgc2hhIDIyNC8yNTYvMzg1LzUxMiBzdXBwb3J0IGluc3RlYWQgb2YKKyAgIGhhcmRjb2RpbmcKKworMjAxMC0xMC0xNCAwMzo1MCAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgYWRkIE9VVFBVVEVOVlZBUlMgdG8gc2F2ZSBpbXBvcnRhbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzOyB3aGVuCisgICBTTk1QX1ZFUkJPU0UKKyAgIGlzIHNldCwgc2F2ZSBlbnYgdmFycyBhbmQgY29tbWFuZCB0byBpbmRpdmlkdWFsIGludm9rZWQgZmlsZSBmb3IKKyAgIGVhY2ggdGVzdDsKKyAgIHNhdmUgZW52IHZhcnMgYW5kIGNvbW1hbmQgZm9yIGVhY2ggU1RBUlRQUk9HCisKKzIwMTAtMTAtMTQgMDM6NTAgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBhdXRvLWNyZWF0ZSB1c2VyIHNwZWNpZmllZCBTTk1QX1RNUERJUiBhbmQKKyAgIFNOTVBfVE1QX1BFUlNJU1RFTlRESVIgdG9vOyBkZWZhdWx0IFNOTVBfVE1QX1BFUlNJU1RFTkRJUiBiYXNlZAorICAgb24gU05NUF9UTVBESVIKKyAgIGZvciB1c2VyIHNwZWNpZmllZCBTTk1QX1RNUERJUgorCisyMDEwLTEwLTE0IDAzOjQ5ICByc3RvcnkKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGNoZWNrIGZvciAvZGV2L2ttZW0gaW5zdGVhZCBvZiBhc3N1bWluZyBpdAorICAgZXhpc3RzIGFuZCBoYXJkY29kaW5nIHdoZW4gaXQgaXMgbm90IHRoZXJlCisKKzIwMTAtMTAtMTQgMDM6MjggIHJzdG9yeQorCisgICAqICBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNldCB0cmFuc3BvcnRTZWN1cml0eUxldmVsIGJhc2VkIG9uIHNzbCBzZXNzaW9uIGFsZ29yaXRobXMKKworMjAxMC0xMC0xNCAwMzoyNiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBhZGQgbmV0c25tcF9vcGVuc3NsX251bGxfY2hlY2tzCisKKzIwMTAtMTAtMTQgMDM6MjMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNsZWFudXAgc3NsL2JpbyBvbiBmYWlsZWQgY29ubmVjdGlvbgorCisyMDEwLTEwLTE0IDAzOjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBxdWlldCBjb21waWxlciB3YXJuaW5nCisKKzIwMTAtMTAtMTQgMDM6MTggIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bnVzZWQgdmFyCisKKzIwMTAtMTAtMTQgMDM6MTYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdHlwbworCisyMDEwLTEwLTE0IDAzOjEyICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBjaGVjayBmb3IgbnVsbCBiZWZvcmUgZGVyZWYKKworMjAxMC0xMC0xMyAyMDoxMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEdlbmVyYXRlIGEgbm9ybWFsICNsaW5lIGRpcmVjdGl2ZSBhcyBwZXIgQzk5CisgICBpbnN0ZWFkIG9mIHRoZSBjb21waWxlci1zcGVjaWZpYyAjPG4+LWRpcmVjdGl2ZS4KKwogMjAxMC0xMC0xMyAxNjo1MyAgaGFyZGFrZXIKIAotICAgKiBkaXN0L2F1dG9jb25mLXZlcnNpb24sIHRlc3RpbmcvdGVzdHMvVDAwMGNvbmZpZ3VyZToKKyAgICogZGlzdC9hdXRvY29uZi12ZXJzaW9uLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDBjb25maWd1cmU6CiAKICAgIGFkZGVkIGEgYXV0b2NvbmYgdmVyc2lvbiBjaGVja2luZyB0ZXN0IHRvIGNhdGNoIGRldmVsb3BlcnMgYW5kCiAgICBzY3JpcHRzIHRoYXQgZmFpbCB0byB1c2UgdGhlIGNvcnJlY3QgYXV0b2NvbmYgdmVyc2lvbgogCisyMDEwLTEwLTEzIDE2OjMwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBQYXRjaCBmcm9tIEJpbGwgRmVubmVyIHRvIGZpeCBvbmx5IGluY2x1ZGluZyB0aGUgc2Vzc2lvbl9hcGkuaAorICAgZmlsZQorCisyMDEwLTEwLTEzIDE2OjI5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgRm9sbG93LXVwIGZvciByMTk0MjE6IE1hZGUgc3VyZSB0aGF0IHRoZSBjb21waWxlciBhZ2FpbiByZXBvcnRzCisgICB0aGUgcHJvcGVyIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiB3aGlsZSBjb21waWxpbmcKKyAgIHVuaXQgdGVzdHMuCisKKzIwMTAtMTAtMTMgMTE6NTMgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IGJhdGNoIGJ1aWxkIHdpdGggT3BlblNTTCBlbmFibGVkIGFuZAorICAgd2l0aCByZWNlbnQgT3BlblNTTCBkZXZlbG9wbWVudCBmaWxlcyB3b3JrcyBhZ2Fpbi4KKworMjAxMC0xMC0xMyAwOTo1OCAgYnZhc3NjaGUKKworICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfcnVuOgorCisgICBDSEFOR0VTOiBDeWd3aW46IFJ1bm5pbmcgdGhlIHVuaXQgdGVzdHMgZG9lcyBub3cgd29yayAoY2QgdGVzdGluZworICAgJiYgLi9SVU5GVUxMVEVTVFMgLWcgdW5pdC10ZXN0cykuCisgICBDSEFOR0VTOiBNaW5HVzogUnVubmluZyB0aGUgdW5pdCB0ZXN0cyBkb2VzIG5vdyB3b3JrIChjZCB0ZXN0aW5nCisgICAmJiAuL1JVTkZVTExURVNUUyAtZyB1bml0LXRlc3RzKS4KKworMjAxMC0xMC0xMyAwODowMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBGaXhlZCBhIHNwZWxsaW5nIGVycm9yIGluIGEgc291cmNlIGNvZGUgY29tbWVudC4KKwogMjAxMC0xMC0xMyAwNzo0MyAgYnZhc3NjaGUKIAogICAgKiBuZXQtc25tcC1jb25maWcuaW46CiAKICAgIFNwZWxsaW5nIGZpeGVzLgogCisyMDEwLTEwLTEyIDE0OjAyICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaDoKKworICAgQWRkZWQgZGVjbGFyYXRpb24gZm9yIHNlX2NsZWFyX3NsaXN0KCkuCisKKzIwMTAtMTAtMTIgMTE6MTIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKKworICAgQWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvCisgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jLgorICAgVmVyaWZpZWQgd2l0aCBWYWxncmluZCB0aGF0IGV2ZXJ5dGhpbmcgZG9lcyBub3cgd29yayBjb3JyZWN0bHkKKyAgIGFuZCB0aGF0IHRoZQorICAgdGVzdCBwcm9ncmFtIGlzIGZyZWUgb2YgbGVha3MtYXQtZXhpdC4KKwogMjAxMC0xMC0xMiAxMToxMSAgYnZhc3NjaGUKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgsIHNubXBsaWIvc25tcF9lbnVtLmM6CkBAIC0xODc5LDEzICszNjY5NSwxODkgQEAKICAgIG5vdCB3b3JrLgogICAgQ0hBTkdFUzogc25tcGxpYjoKIAotMjAxMC0wOS0yMSAwMDowNiAgaGFyZGFrZXIKKzIwMTAtMTAtMTIgMDY6MjcgIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvbGliaGVscGVycywgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi93aW4zMi5kc3c6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBQQVRDSDogMzA4NTE4NzogQnVpbGRpbmcgdmlhIHRoZSBNaWNyb3NvZnQgVmlzdWFsCisgICBTdHVkaW8gcHJvamVjdCBmaWxlICguZHN3Ly5kc3ApIHdvcmtzIGFnYWluLgorCisyMDEwLTEwLTEyIDA1OjM1ICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IHRoZSBleHRlcm4gIkMiIGRlY2xhcmF0aW9ucyB0byBiZQorICAgY29uc2lzdGVudC4gUmVtb3ZlIGNvbW1lbnRlZCBvdXQgY29kZS4KKworMjAxMC0xMC0xMSAyMTo0MSAgbmJhCisKKyAgICogY29uZmlndXJlOgorCisgICBydW4gYXV0b2NvbmYKKworMjAxMC0xMC0xMSAyMTozOSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9hcHQuYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgU3VwcG9ydCBmb3IgaHJTV0luc3RhbGxlZFRhYmxlIGZvciBkcGtnL2FwdC1iYXNlZCBzeXN0ZW1zCisKKzIwMTAtMTAtMTEgMjA6NDYgIG5iYQorCisgICAqIG1pYnMvTWFrZWZpbGUubWliLCBtaWJzL3JmY2xpc3Q6CisKKyAgIFVwZGF0ZSBzb3VyY2VzIGZvciBTTk1QLVRMUy1UTS1NSUIKKworMjAxMC0xMC0xMSAyMDo0MiAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIENoZWNrIGVhcmx5IGZvciBwaWNsLmgKKworMjAxMC0xMC0xMSAyMDozMSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oOgorCisgICBGaXggd2FybmluZ3MgZnJvbSBsbXNlbnNvck1pYgorCisyMDEwLTEwLTExIDIwOjMwICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmM6CisKKyAgIEZpeCBuZXcgc3R5bGUgbG1zZW5zb3JNaWIgZm9yIFNvbGFyaXMgKHdhcyBpdCBldmVyIGNvbXBpbGVkCisgICBiZWZvcmUpCisKKzIwMTAtMTAtMTEgMjA6MjggIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBGaXggbG1TZW5zb3JzIGZvciBTb2xhcmlzCisKKzIwMTAtMTAtMTEgMjA6MjcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jOgorCisgICBGaXggYSBTb2xhcmlzIGZpbGUgZGVzY3JpcHRvciBsZWFrCisKKzIwMTAtMTAtMTEgMjA6MjUgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBNYWtlIC0tZGlzYWJsZS1kZXZlbG9wZXIgd29yaworCisyMDEwLTEwLTExIDE4OjIzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHN5c09iamVjdElEIGFzIHdlbGwgYXMgdGhlCisgICBkYXRhIHdoZW4gaXQgaXMgc2V0IGZyb20gYSBjb25maWd1cmF0aW9uIGZpbGUuCisKKzIwMTAtMTAtMTEgMTc6NTggIG1hZ2ZyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogZnJvbSAiTmllbHMgQmFnZ2VzZW4iOiBTb21lIHN5c3RlbXMgZG8gbm90CisgICBzdXBwb3J0IHRoZSAtRSBmbGFnIHRvIGdyZXAsIHVzZSBhdXRvY29uZiB0byBmaW5kIHRoZSByaWdodCBlZ3JlcAorICAgYXQgYWxsIHRpbWVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYuUkMzIC0+IFY1LjYKKworMjAxMC0xMC0wNyAyMDozMyAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0xMC0wNiAxMTozMSAgbmJhCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzOgorCisgICBGaXggaXB2NiBnZW5lcmljIGNhc2Ugc28gdGVzdCBtYXRjaGVzIHZlcmlmaWNhdGlvbgorCisyMDEwLTEwLTAxIDE2OjQ0ICBkdHMxMgorCisgICAqIG1hbi92YXJpYWJsZXMuNS5kZWY6CisKKyAgIFJld29yayBkZXNjcmlwdGlvbiBvZiBPSUQgbmFtZSBoYW5kbGluZyB0byBiZQorICAgbm90IHF1aXRlIHNvIGluY3JlZGlibHkgb3V0IG9mIGRhdGUuCisKKzIwMTAtMDktMjIgMTQ6MDIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlOgorCisgICBlcmcuLi4gcmVhbGx5IHVzZSB0aGUgcmlnaHQgYXV0b2NvbmYgdmVyc2lvbiBieSBzZXR0aW5nIHRoZSBwYXRoCisgICByaWdodAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYucmMyIC0+IFY1LjYucmMzCisKKzIwMTAtMDktMjEgMjM6NTMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlOgorCisgICByZWdlbmVyYXRlZCB3aXRoIHByb3BlciBhdXRvY29uZiB2ZXJzaW9uCisKKzIwMTAtMDktMjEgMjM6NDkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDktMjEgMjM6NDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdmVyaWZpZWQgcGF0Y2ggZnJvbSByc3RvcnkgdG8gZml4IGNlcnRpZmljYXRlIGxvYWRpbmcgb2YKKyAgIGluY29tcGxldGUgY2hhaW5zCisKKzIwMTAtMDktMjEgMTg6MDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaCAzMDU4Mzg4OiBmcm9tIGNocmlzYm9sdDogZG9uJ3QgcGFyc2UKKyAgIGluY2x1ZGVBbGxEaXNrcyBpbiB0aGUgbWFpbiBzbm1wbGliIHJvdXRpbmVzCisKKzIwMTAtMDktMjEgMTg6MDYgIGhhcmRha2VyCiAKICAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgogCiAgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzA2MjUyNjogZnJvbSBtYXJpb2c4NTogZml4IHNlY3VyaXR5CiAgICBlbmdpbmVJRCBzZXR0aW5nIGluIHRoZSB0cmFwc2VzcyBkaXJlY3RpdmUKIAorMjAxMC0wOS0yMSAxNToxMyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFVwZGF0ZWQgV2luMzIgZG9jdW1lbnRhdGlvbi4KKworMjAxMC0wOS0yMCAyMzoyMCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIFBhdGNoIGZyb20gRnVsa28gSGV3IHRvIGZpeCBwYXRjaCAyOTAwMDc4IHdoaWNoIGJyb2tlIHN5c09iamVjdElECisgICBsZW5ndGhzCisKKzIwMTAtMDktMjAgMjE6MzIgIGR0czEyCisKKyAgICogbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZjoKKworICAgRG9jdW1lbnQgLUNmIGluIHRoZSB0d28gbWFuIHBhZ2VzIHNlcGFyYXRlbHkuCisKIDIwMTAtMDktMjAgMjA6MjMgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi9taWIuYzoKQEAgLTE4OTMsMjAgKzM2ODg1LDMxMSBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMwNjc1NDA6IGZyb20gam95Y2Vhbm1hY2hpbmU6IEZpeCBJUHY0CiAgICBPSUQgaW5kZXhlcyBvbiA2NC1iaXQgYmlnLWVuZGlhbiBzeXN0ZW1zLgogCisyMDEwLTA5LTIwIDE5OjI1ICBidmFzc2NoZQorCisgICAqICBhcHBzL3NubXBuZXRzdGF0L21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaCwgd2luMzIvQ29uZmlndXJlLCAgIAorICAgICAgd2luMzIvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvc25tcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJkbGwuZHN3OgorCisgICBVbi1icmVhayB0aGUgTVNWQyBidWlsZC4KKworMjAxMC0wOS0yMCAwOToxOCAgYnZhc3NjaGUKKworICAgKiBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cywgbWFuLCB0ZXN0aW5nLCB3aW4zMjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0cy4KKworMjAxMC0wOS0xNyAxMDozNCAgZHRzMTIKKworICAgKiAgbWFuL2FnZW50eHRyYXAuMS5kZWYsIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWYsIAorICAgICAgICBtYW4vc25tcHNldC4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAgIAorICAgICAgbWFuL3NubXB3YWxrLjEuZGVmOgorCisgICBSZW1vdmUgQ01VIGNvcHlyaWdodCBub3RpY2UgZnJvbSBtYW4gcGFnZXMgdGhhdCB3ZXJlIG5vdAorICAgaW5oZXJpdGVkIGZyb20gQ01VLVNOTVAgKGFuZCBxdWFsaWZ5IHRoZSBjb3B5cmlnaHQgZm9yCisgICB0aG9zZSB0aGF0IHdlcmUpLgorCisyMDEwLTA5LTE3IDA5OjUxICBkdHMxMgorCisgICAqICBtYW4vZGVmYXVsdF9zdG9yZS4zLmJvdCwgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBfYWxhcm0uMy5kZWYsIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgCisgICAgICAgIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsICAgCisgICAgICBtYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKKworICAgVXBkYXRlIG1hbiBwYWdlIHJlZmVyZW5jZXMgdG8gcmVmbGVjdCBuZXcgQVBJIGRvY3VtZW50YXRpb24KKyAgIHN0cnVjdHVyZS4KKworMjAxMC0wOS0xMCAwNDoyMyAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEFkZCBuZXcgdGVzdCogZW50cmllcyBmcm9tIHRoZSB0ZXN0aW5nCisgICBNYWtlZmlsZS5pbiB0byB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLmluCisKKzIwMTAtMDktMDggMTU6NDEgIGR0czEyCisKKyAgICogIG1hbi9hZ2VudHh0cmFwLjEuZGVmLCBtYW4vZGVmYXVsdF9zdG9yZS4zLnRvcCwgICAKKyAgICAgIG1hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmLCBtYW4vZml4cHJvYy4xLmRlZiwgICAKKyAgICAgIG1hbi9taWIyYy11cGRhdGUuMS5kZWYsIG1hbi9taWIyYy4xLmRlZiwgbWFuL21pYjJjLmNvbmYuNS5pbiwgICAKKyAgICAgIG1hbi9uZXQtc25tcC1jb25maWcuMS5kZWYsIG1hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vc25tcC1icmlkZ2UtbWliLjEsIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wX2FsYXJtLjMuZGVmLCAKKyAgICAgICAgbWFuL3NubXBfY29uZmlnLjUuZGVmLCBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsICAgCisgICAgICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBjb25mLjEuZGVmLCAgIAorICAgICAgbWFuL3NubXBkLjguZGVmLCBtYW4vc25tcGQuY29uZi41LmRlZiwgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCAgCisgICAgICAgbWFuL3NubXBkLmludGVybmFsLjUuZGVmLCBtYW4vc25tcGRlbHRhLjEuZGVmLCBtYW4vc25tcGRmLjEuZGVmLCAKKyAgICAgICAgbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBuZXRzdGF0LjEuZGVmLAorICAgICAgICAgbWFuL3NubXBzZXQuMS5kZWYsIG1hbi9zbm1wc3RhdHVzLjEuZGVmLCBtYW4vc25tcHRhYmxlLjEuZGVmLCAgCisgICAgICAgbWFuL3NubXB0ZXN0LjEuZGVmLCBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCAKKyAgICAgICAgbWFuL3NubXB0cmFwZC44LmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLAorICAgICAgbWFuL3NubXB1c20uMS5kZWYsICAgIG1hbi9zbm1wdmFjbS4xLmRlZiwgbWFuL3NubXB3YWxrLjEuZGVmLAorICAgICAgbWFuL3RrbWliLjEuZGVmLCAgICBtYW4vdHJhcHRvZW1haWwuMS5kZWYsIG1hbi92YXJpYWJsZXMuNS5kZWY6CisKKyAgIFVwZGF0ZSBtYW4gcGFnZSBkYXRlc3RhbXBzIHRvIG1hdGNoIHRoZSBsYXRlc3QgKG5vbi10cml2aWFsKQorICAgY29udGVudCBjaGFuZ2UuCisgICBTdXBwcmVzcyBmb3JjaW5nIG9mICJCZXJrZWxleSBEaXN0cmlidXRpb24iIGZvb3RlcgorICAgKEFsbG93cyBOZXQtU05NUCB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWFuCisgICBwYWdlKQorCisyMDEwLTA5LTA4IDA1OjM3ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVnZW5lcmF0ZWQKKworMjAxMC0wOS0wNCAwNjozOCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5MzU2IGJ5CisgICBjaGFuZ2luZyB0aGUgcmV0dXJuCisgICB0eXBlIG9mIG5ldHNubXBfdGxzYmFzZV9mcmVlX3Rsc2RhdGEoKSBmcm9tIHZvaWQqIHRvIHZvaWQuCisKKzIwMTAtMDktMDQgMDY6MzcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTkzMjIgKHBhdGNoCisgICAzMDQ0NTEyKS4KKyAgIFRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gcmVhZF9vYmppZCgpIHdhcyBhbiBpbnQgaW5zdGVhZCBvZgorICAgc2l6ZV90LgorICAgVGhpcyBjb3VsZCBoYXZlIGNhdXNlZCBtZW1vcnkgY29ycnVwdGlvbiBvbiA2NC1iaXQgc3lzdGVtcy4KKworMjAxMC0wOS0wNCAwMzowOSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA5LTA0IDAzOjA4ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wOS0wNCAwMTo1NyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDktMDQgMDA6NTkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDktMDMgMjI6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IHRsc3RjcCBwYXJzaW5nIG9mIGhvc3QgbmFtZXMuCisKKzIwMTAtMDktMDMgMjI6MTMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6CisKKyAgIGNoZWNrIHRoZSByZXR1cm4gY29kZSBvZiBmZ2V0cyBhbmQgZm9wZW4gYmVmb3JlIGluc2VydGluZyB0aGUKKyAgIHJlc3VsdHMuCisKKzIwMTAtMDktMDMgMjI6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIFBhdGNoIGZyb20gdGFuZGVycyB0byBmaXggYnJva2VuIGFsYXJtcyBhZnRlciB0aGUgcHJldmlvdXMKKyAgIHJlLWVudHJhbnQgcGF0Y2gKKwogMjAxMC0wOS0wMyAyMjowNSAgaGFyZGFrZXIKIAotICAgKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaCAzMDU4NjQ1OiBmcm9tIGpvcmlzZXNhdHVybnVzOiBtb2RpZmllZAogICAgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggdG8gdXNlIE1TR19ET05UV0FJVCBmb3IgdGhlIHVuaXggZG9tYWluCiAgICBzb2NrZXQKIAorMjAxMC0wOS0wMyAyMTo1NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTgxNDA6IGZyb20gdGFrZXZvczogY2hlY2sgdGhhdCBpbm9kZSBpcworICAgbm9uLXplcm8KKworMjAxMC0wOS0wMyAyMTo1MCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTM0Mjg6IGZyb20gdGFrZXZvczogZml4CisgICBnZXRfcGlkX2Zyb21faW5vZGUgd2hlbiB0aGUgaW5vZGUgaXMgbm90IGZvdW5kLgorCisyMDEwLTA5LTAzIDIwOjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVtb3ZlIHRoZSBkdXBsaWNhdGUgcmV0dXJuIGJlZm9yZSB0aGUgZXJyb3IgY29kZXMgZ2V0IHNldC4KKworMjAxMC0wOS0wMSAxODowNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBMb2cgYmVmb3JlIHJldHVybmluZy4KKworMjAxMC0wOS0wMSAwMjo0MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgVExTIHNlbmRfbm90aWZ5IG9uIGNsb3N1cmUgYW5kIHNvbWUgbWVtb3J5IGNsZWFuLXVwIHBhdGNoZXMKKworMjAxMC0wOC0zMSAxNzo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE9ubHkgcHJpbnQgdGhlIHNlY3VyaXR5L2NvbnRleHQgRW5naW5lSUQgbWlzbWF0Y2ggbm90ZSB1bmRlciBVU00KKworMjAxMC0wOC0yNSAxNToxMyAgcnN0b3J5CisKKyAgICogQ0hBTkdFUzoKKworICAgcmVtb3ZlIHJlZmVyZW5jZSB0byByZXZlcnRlZCBwYXRjaCAzMDQyNzY1CisKKzIwMTAtMDgtMjUgMTU6MTMgIHJzdG9yeQorCisgICAqIGFjY29uZmlnLmg6CisKKyAgIGFkZCBub3RlIG9uIHdoZXJlIHRvIGZpbmQgY29udGVudCB1c2VkIHRvIGdlbmVyYXRlCisgICBuZXQtc25tcC1jb25maWcuaC5pbgorCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIHJldmVydCByMTkzNDIsIHBhdGNoIDMwNDI3NjUsIHdoaWNoIGJyb2tlIGNsaWVudCB0Y3AgZGlzY29ubmVjdAorICAgaGFuZGxpbmcKKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IG1vcmUgY29kZSBicm9rZW4gYnkgJ2NvbXBpbGVyIHdhcm5pbmcgZml4JyBpbiByMTkxNzkKKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgY2hlY2sgZm9yIGNvbmYgZXJyb3JzIGFmdGVyIGFnZW50IHN0YXJ0dXA7IGVuYWJsZSBsb2dUaW1lc3RhbXA7CisgICBtYWtlIHN1cmUKKyAgIGFsbCBjZXJ0IG5hbWUvdGFncyBhcmUgdW5pcXVlCisKKzIwMTAtMDgtMjQgMjE6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCBlcnJvciBzdHJpbmcgdG8gZGlzY3VzcyB0aGUgcmlnaHQgZmFpbGVkIG9wZW5zc2wgbmV3CisgICBpbnZvY2F0aW9uCisKIDIwMTAtMDgtMjQgMDU6MzcgIG1hZ2ZyCiAKICAgICogYXBwcy9zbm1wdXNtLmM6CiAKICAgIENIQU5HRVM6IHNubXB1c206IENvcnJlY3QgaWZkZWZzLCByZW1vdmUgZGVhZCB2YXJpYWJsZXMuCiAKKzIwMTAtMDgtMTkgMjE6MjIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wOC0xOSAyMToyMCAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDgtMTkgMjE6MTEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDgtMTkgMjE6MTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaDoKKworICAgLy8gLT4gQyBjb21tZW50cworCisyMDEwLTA4LTE5IDIwOjM2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA4LTE5IDIwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0ggMzA0Mjc2NTogZnJvbSBtZWhhZjogbWFrZQorICAgc25tcF9zeW5jaF9yZXNwb25zZV9jYigpIHJlLWVudHJhbnQKKworMjAxMC0wOC0xOSAyMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgdHVybiBvZmYgY29va2llIGV4Y2hhbmdlcyB1bnRpbCBhIGNvbXBsZXRlIGNvZGUgc2V0IGNhbiBiZQorICAgd3JpdHRlbiB0byBzdXBwb3J0IGl0IGJhc2VkIG9uIHRoZSByZXF1aXJlZCBmdW5jdGlvbiBjYWxsYmFja3MKKworMjAxMC0wOC0xNyAxODozMSAgcnN0b3J5CisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgYWRkIG1pc3NpbmcgY2FsbCB0byBzdG9yZSBwZXJzaXN0ZW50IGRhdGEgYXMgbmVlZGVkCisKKzIwMTAtMDgtMTcgMTg6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHdoZW4gZGlzcGxheWluZyBhIGJ5dGUgYXMgc2luZ2xlIGRpZ2l0IGhleAorICAgdmFsdWUsIGRlZmF1bHQgdG8KKyAgIHByZWZpeGluZyB3aXRoIDAgdW5sZXNzIHRoZXJlIGlzIGEgc2VwZXJhdG9yIG9yIGFkZGl0aW9uIGhpbnQKKyAgIGRhdGEKKwogMjAxMC0wOC0xNyAxMDozMSAgYnZhc3NjaGUKIAogICAgKiBhcHBzL3NubXB1c20uYzoKQEAgLTE5MTUsNiArMzcxOTgsMTMgQEAKICAgIHdoZW4KICAgIGNvbXBpbGluZyB3aXRob3V0IFNTTCBzdXBwb3J0LgogCisyMDEwLTA4LTE2IDIzOjExICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI3OTAyNDk6IGZyb20gd2lsbHB3aWxscDogcmVkdWNlIGNhY2hlIHRpbWUKKyAgIGZvciB0aGUgaWZ0YWJsZSB0byAzc2Vjb25kcyB0byBpbmNyZWFzZSBhY2N1cmFjeQorCiAyMDEwLTA4LTE2IDE2OjI2ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKQEAgLTE5MjksNiArMzcyMTksMzMgQEAKICAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyODI1NjUzOiBmcm9tIGJydTVjZTogZml4IHNlbmRtYWlsLmNmCiAgICBwYXJzaW5nIGluIGNlcnRhaW4gY29uZGl0aW9ucwogCisyMDEwLTA4LTE2IDEwOjE2ICBkdHMxMgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgQnVpbGQgbmV0c25tcF9hZ2VudF9hcGkuMyBtYW4gcGFnZSBmcm9tIHRlbXBsYXRlCisKKzIwMTAtMDgtMTYgMDk6MjAgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTExMzYxOiBEb2N1bWVudGF0aW9uIChQcm92aWRlZCBieSBUb21hc3oKKyAgIExpcykKKworMjAxMC0wOC0xNiAwODowNiAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTEzNjE6IFJlLW9yZGVyIGNvZGUgdG8gZ3JvdXAgcmVsYXRlZAorICAgZnVuY3Rpb25zIHRvZ2V0aGVyCisKKzIwMTAtMDgtMTYgMDc6NDIgIGR0czEyCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyOTk1MDk4OiBGaXggY3JlYXRpb24gb2YgU05NUHYzIHNlc3Npb25zCisgICB3aXRoIEFQSV9TSU5HTEUKKwogMjAxMC0wOC0xNCAxNjozMCAgZHRzMTIKIAogICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jOgpAQCAtMTk0MiwzMSArMzcyNTksNTQ1IEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MDQ5MDA6IERvY3VtZW50YXRpb24gcGx1cyBhc3NvcnRlZAogICAgaGFuZGxlciBjb2RlIGZpeGVzCiAKLTIwMTAtMDgtMTMgMTI6MjIgIGR0czEyCisyMDEwLTA4LTE0IDA5OjI4ICBkdHMxMgogCi0gICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vc25tcF9hbGFybS4zLmRlZjoKIAotICAgRml4IGhhbmRsaW5nIG9mIGluZGV4IHZhbHVlcyBpbiBjYWNoZSBsb2FkIGZ1bmN0aW9uLgorICAgUmVzdG9yZSBhZ2VudCBBUEkgbWFuIHBhZ2UKKyAgIERvbid0IHRyeSB0byBleHRyYWN0IG11bHRpcGxlIG1hbiBwYWdlIGxpbmtzIHBlciBsaW5lCisgICAod2hpY2ggcnVucyBpbnRvIHByb2JsZW1zIHdpdGggT1Mtc3BlY2lmaWMgbGluZSBlbmRpbmdzKS4KKyAgIEluc3RlYWQsIGVuc3VyZSB0aGUgbWFuIHBhZ2UgTkFNRSBzZWN0aW9uIGxpc3RzIG9uZQorICAgcm91dGluZSBwZXIgbGluZQogCi0yMDEwLTA4LTEwIDA0OjU5ICBtYWdmcgorMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIGZpeCBicm9rZW4gTWFrZWZpbGUgYWZ0ZXIgbWFuIHBhZ2UgbW92ZXMKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQsIG1pYnMvcmZjbGlzdDoKKworICAgdXBkYXRlZCBUTFMgTUlCIHRvIGN1cnJlbnQgY29weQorCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcmVwbGFjZWQgUkZDIGNvbW1lbnQgbnVtYmVyCisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCwgc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoOiAzMDQyNzcwOiBmcm9tIG1laGFmOiBNYWRlIHJ1bl9hbGFybXMoKQorICAgcmVlbnRyYW50CisKKzIwMTAtMDgtMTMgMjM6NDQgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNDQ1MTI6IGZyb20gcGhpbHdlYnN0ZXI6IGZpeCBzeXNvYmplY3RpZAorICAgZGlyZWN0aXZlLgorCisyMDEwLTA4LTEzIDE5OjAwICByc3RvcnkKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeDoKKworICAgdXNlIDEyNy4wLjAuMSBpbnN0ZWFkIG9mIGxvY2FsaG9zdCBhcyBkZWZhdWx0IFNOTVBfVEVTVF9ERVNUIHNvCisgICBUTFMgdGVzdHMgd29yaworCisyMDEwLTA4LTEzIDE4OjUwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogaW1wbGVtZW50ZWQgYSBmaXggZm9yIHRoZSBpc3N1ZSByZXBvcnRlZCBpbgorICAgcGF0Y2ggIzMwNDI3NzAuIENyZWF0ZWQgYSBzbm1wX3NlbGVjdF9pbmZvX2ZsYWdzIGZ1bmN0aW9uLCBhbmQKKyAgIHNpbWlsYXIsIHRoYXQgYWxsb3cgZm9yIGFsYXJtcyB0byBub3QgYmUgcnVuLiBUaGlzIGlzIHRoZW4gdXNlZAorICAgaW4gdGhlIHN5bmNoX3Jlc3BvbnNlIGZ1bmN0aW9ucyB0byBhdm9pZCAxMDAlIENQVSBsb29wcworCisyMDEwLTA4LTEzIDE4OjUwICBoYXJkYWtlcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgICBhcHBzL3NubXB0cmFwZC5jOgorCisgICBtYWtlIHNubXB0cmFwZCByZWdpc3RlciB0aGUgY2VydHRvc2VjbmFtZSB0YWJsZSBpbiB0aGUgYWdlbnR4CisgICByZWdpc3RyYXRpb25zCisKKzIwMTAtMDgtMTMgMTg6NDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWliMmMuY29uZjoKKworICAgbWlub3Igd29yZGluZyBhZGRpdGlvbnMKKworMjAxMC0wOC0xMyAxNTowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jOgorCisgICBDSEFOR0VTOiBhaXg6IFBBVENIOiAyODg2NTk4OiBmcm9tIGV4c25hZnU6IEhlYWRlciBmaXhlcyBmb3IKKyAgIGNvbXBpbGluZyBvbiBBSVg2CisKKzIwMTAtMDgtMTMgMTU6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oOgorCisgICBORVdTOiBwb3J0czogUEFUQ0g6IDI4MzY4OTU6IGZyb20gc2VhbmJvdWRyZWF1OiBzdXBwb3J0IGZvciBRTlg2CisKKzIwMTAtMDgtMTMgMTQ6MzMgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgICdlbmZvcmNlIG5ldHNubXAgcHJlZml4ZXMKKworMjAxMC0wOC0xMyAxNDoyOSAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjkgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsIG1hbi9zbm1wX3RyYXBfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vc25tcF9hZ2VudF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3Nlc3Npb25fYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgbWFuL3BkdV9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9jb25maWdfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjAgIGR0czEyCisKKyAgICogTWFrZWZpbGUuaW4sIGRveHlnZW4uY29uZjoKKworICAgRG9uJ3QgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBtYW4gcGFnZXMKKworMjAxMC0wOC0xMyAxNDoxOCAgZHRzMTIKKworICAgKiAgbWFuL3NubXBfYXBpX2VycnN0cmluZy4zLCBtYW4vc25tcF9jbG9zZS4zLCBtYW4vc25tcF9lcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfZnJlZV9wZHUuMywgbWFuL3NubXBfb3Blbi4zLCBtYW4vc25tcF9wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3JlYWQuMywgbWFuL3NubXBfc2VsZWN0X2luZm8uMywgbWFuL3NubXBfc2VuZC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMsIG1hbi9zbm1wX3Nlc3NfY2xvc2UuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfZXJyb3IuMywgbWFuL3NubXBfc2Vzc19pbml0LjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX29wZW4uMywgbWFuL3NubXBfc2Vzc19wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfcmVhZC4zLCBtYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3NlbmQuMywgbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3RpbWVvdXQuMywgbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zLCAgIAorICAgICAgbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMsIG1hbi9zbm1wX3RpbWVvdXQuMzoKKworICAgUmVtb3ZlIHJlZHVuZGFudCBtYW4gcGFnZSBsaW5rcworICAgKFNob3VsZCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgYnV0IGRvbid0IGV4aXN0IGFueSBtb3JlCisgICBhbnl3YXkpCisKKzIwMTAtMDgtMTMgMTQ6MTMgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL2FkZF9taWJkaXIuMywgbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMywgIAorICAgICAgIG1hbi9nZXRfbW9kdWxlX25vZGUuMywgbWFuL2luaXRfbWliLjMsIG1hbi9pbml0X21pYl9pbnRlcm5hbHMuMywgCisgICAgICAgIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMywgbWFuL25ldHNubXBfaGFuZGxlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9sZWFmLjMsIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc2V0X2RhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKKyAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zLCBtYW4vcHJpbnRfZGVzY3JpcHRpb24uMywgbWFuL3ByaW50X21pYi4zLCAgCisgICAgICAgbWFuL3ByaW50X29iamlkLjMsIG1hbi9wcmludF92YWx1ZS4zLCBtYW4vcHJpbnRfdmFyaWFibGUuMywgICAKKyAgICAgIG1hbi9yZWFkX2FsbF9taWJzLjMsIG1hbi9yZWFkX21pYi4zLCBtYW4vcmVhZF9tb2R1bGUuMywgICAKKyAgICAgIG1hbi9yZWFkX21vZHVsZV9ub2RlLjMsIG1hbi9yZWFkX29iamlkLjMsIG1hbi9zaHV0ZG93bl9taWIuMzoKKworICAgUmVtb3ZlIERveHlnZW4tZ2VuZXJhdGVkIG1hbiBwYWdlcywgYW5kIHRob3NlIGxpbmtpbmcKKyAgIGluZGl2aWR1YWwgcm91dGluZXMgdG8gdGhlIGFwcHJvcHJpYXRlIG1hbiBwYWdlLgorICAgKFRoZXNlIGFyZSBiZXR0ZXIgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5KQorCisyMDEwLTA4LTEzIDEyOjE5ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBQcm9tcHQgZm9yIHdoZXRoZXIgdG8gZ2VuZXJhdGUgY2FjaGluZyBjb2RlIG9yIG5vdC4KKworMjAxMC0wOC0xMyAxMjoxOSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5jb25mOgorCisgICBSZXdvcmsgZ3VpZGFuY2UgcXVlc3Rpb25zIHdoZW4gc2VsZWN0aW5nIHRoZSBiZXN0IHRhYmxlIGZyYW1ld29yaworICAgdG8gdXNlLgorICAgRW5zdXJlIHRhYmxlIGhhbmRsaW5nIGNvZGUgZG9lc24ndCBvdmVyd3JpdGUgc2NhbGFyIGhhbmRsaW5nCisgICBjb2RlLgorICAgQ2hlY2sgdGhhdCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgc3VpdGFibGUgZm9yIE1mRCBmcmFtZXdvcmsuCisKKzIwMTAtMDgtMTIgMTU6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBjb2RlIGJyb2tlbiBieSAnY29tcGlsZXIgd2FybmluZyBmaXgnIGluIHIxOTE3OQorCisyMDEwLTA4LTEyIDE1OjM5ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmg6CisKKyAgIGZpeCB0eXBvIGluIGNvbW1lbnQKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIGEgZHVwbGljYXRlIHZhbHVlIGNoZWNrCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgYWRkIGEgdGVzdCB3aGVyZSB3ZSBjYW4gdHJ1c3QgYSBDQS1zaWduZWQgY2VydCBhbmQgd2UgZG9uJ3QgdHJ1c3QKKyAgIHRoZSBDQQorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIHRlc3QgYSBkaXJlY3RseSBtYXBwZWQgQ0EgY2VydGlmaWNhdGUKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIGNoYW5nZSB0aGUgbGFDb25maWcgdG8gcmVhZC13cml0ZSB0byBtYXRjaCB0aGUgcGF0Y2gKKworMjAxMC0wOC0xMSAyMjowNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjkzMTQ0NjogZnJvbSBhaG1ha2U6IG1ha2UgdGhlIGxvYWQgYXZlcmFnZXMKKyAgIHdyaXRhYmxlLgorCisyMDEwLTA4LTExIDA2OjQzICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jOgorCisgICBDSEFOR0VTOiBTaWxlbmNlIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MgZnJvbSB0ZXN0IGNhc2VzLgorCisyMDEwLTA4LTA5IDIxOjA5ICBtYWdmcgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgogCiAgICBDSEFOR0VTOiBIYW5kbGUgZW1iZWRkZWQgJSdzIGluIHRoZSByZXN1bHQgbWVzc2FnZS4KIAorMjAxMC0wOC0wOSAyMTowNyAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgQ0hBTkdFUzogRG8gbm8gZG91YmxlIGRlY2xhcmUgdGhlIGluZGV4IHZhbHVlcy4KKwogMjAxMC0wOC0wNSAxMTo0OSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKIAogICAgVXBkYXRlICJhdXRoKiIgdXNhZ2UgbWVzc2FnZSB3aXRoIGNvbnRleHQgc3VwcG9ydAogCisyMDEwLTA4LTAyIDIwOjA4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgRml4IHR3byBzaWxseSBtaXN0YWtlcy4KKworMjAxMC0wOC0wMiAxNDoxOCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEFJWCBmaWxlc3lzdGVtIHR5cGVzIGFyZSB0YWdnZWQgYXMgaW50ZWdlcnMsIG5vdCBzdHJpbmdzLgorCisyMDEwLTA4LTAyIDEzOjQ5ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIGZpeCBQZXJsIHN5c3RlbSgpIGNvbmZpZ3VyZSBjaGVjayB0byB3b3JrIHJlbGlhYmx5IG9uIHN5c3RlbXMKKyAgIHRoYXQgbGFjaworICAgUGVybAorCisyMDEwLTA4LTAyIDExOjA4ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IG1hZGUgaXQgcG9zc2libGUgdG8gYW5hbHl6ZSBhbGwgY29kZSBjb3ZlcmVkIGJ5CisgICB0aGUgcmVncmVzc2lvbiB0ZXN0cyB3aXRoIGEgZHluYW1pYyBhbmFseXplciwgYXQgbGVhc3QgaWYgdGhhdAorICAgYW5hbHl6ZXIgc3VwcG9ydHMgZm9sbG93aW5nIGNoaWxkIHByb2Nlc3Nlcy4gQW4gZXhhbXBsZToKKyAgIAorICAgcm0gLXJmIC90bXAvc25tcC10ZXN0LSoKKyAgIG1ha2UgLXMKKyAgIFNOTVBfU0FWRV9UTVBESVI9eWVzIERZTkFNSUNfQU5BTFlaRVI9InZhbGdyaW5kCisgICAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLXRyYWNrLW9yaWdpbnM9eWVzIiBtYWtlIC1zIHRlc3QKKyAgIGdyZXAgLWkgdW5pbml0aWFsaXNlZCAvdG1wL3NubXAtdGVzdC0qIHwgeGFyZ3MgbGVzcworCisyMDEwLTA4LTAyIDExOjAyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYzoKKworICAgRml4ZWQgdGhlIGZvbGxvd2luZyB0d28gVmFsZ3JpbmQgY29tcGxhaW50czoKKyAgIAorICAgQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHg2RDcwMkUwOiB2ZnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RDk5RDExOiB2c25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkQ3QTQxMjogc25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkUxNDQzNzogaW5ldF9udG9hIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDVFNUUyMTk6IG5ldHNubXBfaXB2NF9mbXRhZGRyIChzbm1wSVB2NEJhc2VEb21haW4uYzoyMTUpCisgICBieSAweDVFNjU3MTc6IG5ldHNubXBfdGNwX2ZtdGFkZHIgKHNubXBUQ1BEb21haW4uYzo3MCkKKyAgIGJ5IDB4NUU1NjdFQzogbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjIyNCkKKyAgIGJ5IDB4NUUyNDc5QTogX3Nlc3NfcHJvY2Vzc19wYWNrZXQgKHNubXBfYXBpLmM6NTQ0MSkKKyAgIGJ5IDB4NUUyNUUzNzogX3Nlc3NfcmVhZCAoc25tcF9hcGkuYzo2MDM3KQorICAgYnkgMHg1RTI2MURBOiBzbm1wX3Nlc3NfcmVhZDIgKHNubXBfYXBpLmM6NjE0OSkKKyAgIGJ5IDB4NUUyNjI4Mjogc25tcF9yZWFkMiAoc25tcF9hcGkuYzo1NzQwKQorICAgYnkgMHg0MDRERTQ6IG1haW4gKHNubXBkLmM6MTIyNykKKyAgIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQgYnkgYSBoZWFwIGFsbG9jYXRpb24KKyAgIGF0IDB4NEMyNzBBNTogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOjIzNikKKyAgIGJ5IDB4NUU2NTczOTogbmV0c25tcF90Y3BfYWNjZXB0IChzbm1wVENQRG9tYWluLmM6ODIpCisgICBieSAweDVFMjUzODM6IF9zZXNzX3JlYWQgKHNubXBfYXBpLmM6NTc4NikKKyAgIGJ5IDB4NUUyNjFEQTogc25tcF9zZXNzX3JlYWQyIChzbm1wX2FwaS5jOjYxNDkpCisgICBieSAweDVFMjYyODI6IHNubXBfcmVhZDIgKHNubXBfYXBpLmM6NTc0MCkKKyAgIGJ5IDB4NDA0REU0OiBtYWluIChzbm1wZC5jOjEyMjcpCisgICAKKyAgIENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4NkY3QjJFMDogdmZwcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkZBNEQxMTogdnNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZGODU0MTI6IHNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDcwMUY0Mzc6IGluZXRfbnRvYSAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg1NkZBMjE5OiBuZXRzbm1wX2lwdjRfZm10YWRkciAoc25tcElQdjRCYXNlRG9tYWluLmM6MjE1KQorICAgYnkgMHg1NzAxNzE3OiBuZXRzbm1wX3RjcF9mbXRhZGRyIChzbm1wVENQRG9tYWluLmM6NzApCisgICBieSAweDU2RjI3RUM6IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nCisgICAoc25tcF90cmFuc3BvcnQuYzoyMjQpCisgICBieSAweDU2RjI5NEY6IG5ldHNubXBfdHJhbnNwb3J0X3NlbmQgKHNubXBfdHJhbnNwb3J0LmM6MjQ4KQorICAgYnkgMHg1NkJDNDg3OiBzbm1wX3Nlc3NfYXN5bmNfc2VuZCAoc25tcF9hcGkuYzo1MjA0KQorICAgYnkgMHg1NkJDNjUxOiBzbm1wX2FzeW5jX3NlbmQgKHNubXBfYXBpLmM6NDk5OCkKKyAgIGJ5IDB4NTZCQzY3Nzogc25tcF9zZW5kIChzbm1wX2FwaS5jOjQ5ODQpCisgICBieSAweDU2OTg0NDA6IHNubXBfc3luY2hfcmVzcG9uc2VfY2IgKHNubXBfY2xpZW50LmM6MTAwNikKKyAgIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQgYnkgYSBoZWFwIGFsbG9jYXRpb24KKyAgIGF0IDB4NEMyNzBBNTogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOjIzNikKKyAgIGJ5IDB4NTcwMUIzRTogbmV0c25tcF90Y3BfdHJhbnNwb3J0IChzbm1wVENQRG9tYWluLmM6MTYzKQorICAgYnkgMHg1NzAxRTZGOiBuZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZyAoc25tcFRDUERvbWFpbi5jOjMwNSkKKyAgIGJ5IDB4NTZGMzgwNDogbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsCisgICAoc25tcF90cmFuc3BvcnQuYzo2MDEpCisgICBieSAweDU2RjNBQ0M6IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50CisgICAoc25tcF90cmFuc3BvcnQuYzo2NjkpCisgICBieSAweDU0MzQ0RjY6IHN1YmFnZW50X29wZW5fbWFzdGVyX3Nlc3Npb24gKHN1YmFnZW50LmM6NzU4KQorICAgYnkgMHg1NDM0OUM4OiBhZ2VudHhfcmVvcGVuX3Nlc3Npb24gKHN1YmFnZW50LmM6ODY5KQorICAgYnkgMHg1NDM0RDAwOiBzdWJhZ2VudF9zdGFydHVwIChzdWJhZ2VudC5jOjk5KQorICAgYnkgMHg1NkVBRUI3OiBzbm1wX2NhbGxfY2FsbGJhY2tzIChjYWxsYmFjay5jOjMzOCkKKyAgIGJ5IDB4NTZERTZGQjogcmVhZF9jb25maWdzIChyZWFkX2NvbmZpZy5jOjEwMTgpCisgICBieSAweDU2QzI4N0U6IGluaXRfc25tcCAoc25tcF9hcGkuYzo4NTApCisgICBieSAweDQwNDc3QjogbWFpbiAoc25tcHRyYXBkLmM6MTA0OCkKKworMjAxMC0wOC0wMSAwNjoxMSAgYnZhc3NjaGUKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBGaXhlZCBzcGVsbGluZyBlcnJvcnMgcmVwb3J0ZWQgYnkgaXNwZWxsIC1sLgorCiAyMDEwLTA4LTAxIDA2OjAwICBidmFzc2NoZQogCi0gICAqIHNubXBsaWIvc25tcF9lbnVtLmM6CisgICAqICBzbm1wbGliL3NubXBfZW51bS5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKIAogICAgRml4ZWQgYSB0eXBvIGluIGEgdGV4dCBzdHJpbmcgaW4gYSB1bml0IHRlc3Q6IHJlc3R1cmFudCAtPgogICAgcmVzdGF1cmFudC4KIAorMjAxMC0wOC0wMSAwNTo1MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmg6CisKKyAgIERvY3VtZW50ZWQgYmVoYXZpb3Igb2Ygc2VfYWRkX3BhaXJfdG9fc2xpc3QoKS4KKworMjAxMC0wNy0zMSAyMzo1MCAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5MjY2OiBhZGQgbWlzc2luZyBoZWFkZXIgZmlsZSB0byBzdXBwb3J0IE1hYyBPUyBYCisgICAxMC42CisgICAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKworMjAxMC0wNy0zMSAyMDozOCAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjM1ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDctMzEgMjA6MjQgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MTEgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlIHJlYWRtZSBzZWN0aW9uIHRvIGNhbGwgb3V0IE5FV1MtdG9vCisKKzIwMTAtMDctMzEgMjA6MTAgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgYWRkZWQgbWlzc2luZyBuZXdzIGl0ZW1zCisKIDIwMTAtMDctMzAgMTM6MDYgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgpAQCAtMTk4MSw2ICszNzgxMiw4NyBAQAogICAgQ0hBTkdFUzogcHl0aG9uOiBwYXRjaCAzMDM1NTc4OiBmcm9tIHN3czoga2VlcCBlcnJvciBjb2RlcyB1cCB0bwogICAgZGF0ZQogCisyMDEwLTA3LTI5IDE1OjQ4ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZToKKworICAgQWRkIHN1cHBvcnQgZm9yIE1hYyBPUyBYIDEwLjYgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisgICAoT24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIE1hYyBPUyBYIDEwLjUKKyAgIChMZW9wYXJkIC0gImRhcndpbjkiKSkKKworMjAxMC0wNy0yOSAxNTo0NyAgZHRzMTIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uOgorCisgICBBZGQgc3VwcG9ydCBmb3IgTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKyAgIChPbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgTWFjIE9TIFggMTAuNQorICAgKExlb3BhcmQgLSAiZGFyd2luOSIpKQorCisyMDEwLTA3LTI5IDE1OjAzICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oOgorCisgICBQcm92aWRlIGEgZGVmaW5pdGlvbiBvZiAndmFfbGlzdCcgZm9yIHZhcmFyZ3MtYmFzZWQgQVBJcworCisyMDEwLTA3LTI5IDE0OjU4ICBkdHMxMgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIEFkZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBBSVggNworICAgKG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBpZGVudGljYWwgdG8gQUlYIDYpCisKKzIwMTAtMDctMjkgMTQ6NTYgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbjoKKworICAgRGlzYWJsZSBlbWJlZGRlZCBwZXJsIGJ5IGRlZmF1bHQgb24gYXJjaGl0ZWN1cmVzIHdoZXJlCisgICB0aGlzIHNlZW1zIHRvIGNhdXNlIHByb2JsZW1zIChIUC1VWCAmIE1hYyBPUyBYKQorCisyMDEwLTA3LTI5IDExOjEzICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgR3VhcmQgYWdhaW5zdCBibGFuayAnaW5jbHVkZSonIGxpbmVzLgorICAgSGFuZGxlIHJlbGF0aXZlICdpbmNsdWRlRmlsZScgcGF0aHMKKworMjAxMC0wNy0yOSAxMDo0NyAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBSZXR1cm4gYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIGNvbmZpZyBmaWxlcyBhcmUgYWN0dWFsbHkKKyAgIHByb2Nlc3NlZC4KKyAgIFJlcG9ydCBwcm9ibGVtcyB3aXRoIGZhaWxpbmcgdG8gaW5jbHVkZSBjb25maWcgZmlsZXMuCisKKzIwMTAtMDctMjggMTQ6NDQgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oLCBtYW4vY29uZmlnX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZiwgIAorICAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBCcmluZyBtYW4gcGFnZSBkb2N1bWVudGF0aW9uLCBoZWFkZXIgZmlsZXMgYW5kIFdpbmRvd3MgRExMCisgICBkZWZpbml0aW9ucworICAgb2YgdG9wLWxldmVsIHB1YmxpYyBBUEkgY2FsbHMgaW50byBsaW5lIHdpdGggZWFjaCBvdGhlci4KKwogMjAxMC0wNy0yOCAxNDo0MCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC0xOTg5LDEzICszNzkwMSwzOSBAQAogCiAyMDEwLTA3LTI4IDE0OjM2ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgogCiAgICBEb24ndCBtaXggU01JdjEgYW5kIFNNSXYyIE1JQnMgaW4gdGhlIGxpc3Qgb2YgZGVmYXVsdCBNSUJzIHRvCiAgICBsb2FkLgogICAgVXNlIG5ld2VyIFNNSXYyIHZlcnNpb25zICh3aGljaCBpbmNsdWRlIHN1aXRhYmxlIGRpc3BsYXkgaGludHMpCiAgICByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgUkZDMTIxMyBNSUIgKHdoaWNoIGRvZXNuJ3QpCiAKKzIwMTAtMDctMjggMTQ6MTAgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXggaW5kZW50YXRpb24gZm9yICdpbmNsdWRlU2VhcmNoJyBwcm9jZXNzaW5nIGNvZGUuCisKKzIwMTAtMDctMjggMTQ6MDkgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBFeHRlbmQgJ2luY2x1ZGUnIGNvbmZpZyBmaWxlIHByb2Nlc3NpbmcgdG8gY292ZXIgdGhyZWUKKyAgIGRpZmZlcmVudCBtb2RlcyBvZiB3b3JraW5nOgorICAgLSBsb29rIGZvciB0aGUgZmlsZSBvbiB0aGUgY29uZmlnIHNlYXJjaCBwYXRoCisgICAtIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBmaWxlIGJ5IG5hbWUKKyAgIC0gaW9hZCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKKyAgIFVzZSBkaWZmZXJlbnQgY29uZmlnIHRva2VucyB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KKworMjAxMC0wNy0yNyAxMToxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9rZXJuZWwuYywgYWdlbnQva2VybmVsLmgsIGFnZW50L3NubXBfdmFycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjkxMjUyMDogZnJvbSBsaXN0b206IEZyZWUga21lbSByZWZlcmVuY2VzCisgICBvbiBzaHV0ZG93bgorCiAyMDEwLTA3LTI3IDEwOjU0ICBoYXJkYWtlcgogCiAgICAqIG1pYnMvU01VWC1NSUIudHh0OgpAQCAtMjAwMyw2ICszNzk0MSw2NCBAQAogICAgQ0hBTkdFUzogbWliczogcGF0Y2ggMjk3NDcxNjogZnJvbSBidmFzc2NoZTogZml4IGlzc3VlcyBpbiB0aGUKICAgIFNNVVgtTUlCCiAKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBpbmNsdWRlIHRoZSBuZXcgc2VjdXJpdHktaGVkYWVycyBtb2R1bGUKKworMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIHJlbW90ZSBkZWJ1Z2dpbmcvcHJvY2Vzc2luZyBzdGRlcnIgb3V0cHV0CisKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDMwMjg5MjM6IGZyb20gamVuc286IG5ldyBjb3B5IG9mIHRoZQorICAgYnJpZGdlLW1pYiBwZXJsIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDctMjcgMDg6MzEgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW46CisKKyAgIHNlcGFyYXRlIG91dCB0aGUgc2VjdXJpdHkgaGVhZGVyL2luaXQgZ2VuZXJhdGlvbgorCisyMDEwLTA3LTI3IDA4OjMxICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHM6CisKKyAgIHRyYW5zcG9ydCBjb25maWd1cmUgcG9ydGlvbgorCisyMDEwLTA3LTI3IDA4OjMwICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbjoKKworICAgbW92ZSB0cmFuc3BvcnQgaGVhZGVyIGdlbmVyYXRpb24gdG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBjcmVhdGUgYW4KKyAgIGV4dGVybmFsIHNlcGFyYXRlIHNjcmlwdCBmb3IgZ2VuZXJhdGluZyBpdAorCisyMDEwLTA3LTI3IDA4OjE0ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcmVwb3J0IGdmcyBmaWxlc3lzdGVtcyBpbiBoclN0b3JhZ2VUYWJsZSBhbmQKKyAgIGhyRlNUYWJsZS4KKworMjAxMC0wNy0yNCAxNTo0MiAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIERvbid0IGxvc2UgdHJhY2sgb2Ygd2hpY2ggY29uZmlnIGZpbGUgd2FzIGJlaW5nIHBhcnNlZCwKKyAgIHdoZW4gcHJvY2Vzc2luZyBhbiBpbmNsdWRlZCBjb25maWcgZmlsZS4KKyAgIEZpeGVzIGEgYnVnIHdpdGggcmVwb3J0aW5nIGxhdGVyIGNvbmZpZyBlcnJvcnMuCisKIDIwMTAtMDctMjQgMTU6MzYgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgpAQCAtMjAxMSw2ICszODAwNyw3OSBAQAogICAgd2hlbiBvcGVuaW5nIGEgbmV3IFNOTVAgc2Vzc2lvbi4KICAgIEZpeGVzIGEgYnVnIHdpdGggcmVwb3J0aW5nIGxhdGVyIGNvbmZpZyBlcnJvcnMuCiAKKzIwMTAtMDctMjMgMDM6MTIgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGFkZCB0aGUgVExTIG1vZHVsZXMgdG8gdGhlIGxpc3Qgb2YgdGVzdCBtb2R1bGVzCisKKzIwMTAtMDctMjEgMTk6MjUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jOgorCisgICBGaXggdHlwbyBpbiBkb3h5Z2VuIGNvbW1lbnQKKworMjAxMC0wNy0yMSAxOToyNCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKKworICAgRml4IHR5cG8gaW4gc3BlZWQgY29tcHV0YXRpb24KKworMjAxMC0wNy0yMSAxOToyMSAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX3NlY21vZC5jOgorCisgICBJbmNsdWRlIGdlbmVyYXRlZCBzZWN1cml0eS1pbmNsdWRlcy5oCisKKzIwMTAtMDctMjEgMTk6MjAgIG5iYQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaDoKKworICAgRml4IGluaXQgZnVuYyBuYW1lIChjb3B5LXBhc3RlIGdsaXRjaCkKKworMjAxMC0wNy0yMSAxOToxOCAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIFJlbW92ZSBzdXBlcmZsdW91cyBzZW1pY29sb24KKworMjAxMC0wNy0yMSAxOToxOCAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIE91dCBvZiBvcmRlciBkZWNsYXJhdGlvbgorCisyMDEwLTA3LTIxIDE5OjE3ICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBMb2cgZXJyb3Igb24gZmlsZSBvcGVuIGVycm9yCisKKzIwMTAtMDctMjEgMTk6MTYgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgU3BlbGluZyBlcnJvcgorCisyMDEwLTA3LTIxIDE4OjEwICBuYmEKKworICAgKiBtaWJzL2lhbmFsaXN0LCBtaWJzL3JmY2xpc3QsIG1pYnMvcmZjbWlicy5kaWZmOgorCisgICBVcGRhdGUgZm9yIGN1cnJlbnQgUkZDcworCisyMDEwLTA3LTIxIDE4OjA4ICBuYmEKKworICAgKiBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgQ3VycmVudCB2ZXJzaW9uIGZyb20gSUFOQQorCisyMDEwLTA3LTIxIDE4OjA1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgcjE3NDk1IGVycm9uZW91c2x5IGRpc2FibGVkIGRpc2tJT0xBeCBmb3IgbGludXgKKwogMjAxMC0wNy0yMCAxMDozOCAganNhZnJhbmVrCiAKICAgICogc25tcGxpYi9zeXN0ZW0uYzoKQEAgLTIwMjAsMTggKzM4MDg5LDE2MCBAQAogCiAyMDEwLTA3LTIwIDA3OjMyICBqc2FmcmFuZWsKIAotICAgKiAgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCi0gICAgICBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsICAKLSAgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorICAgKiAgYWdlbnQvc25tcGQuYywgYXBwcy9hZ2VudHh0cmFwLmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGQuYywgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCAgIAorICAgICAgbWFuL3NubXB0cmFwZC44LmRlZiwgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKIAogICAgRGVzY3JpYmUgLUQgdXNhZ2UgYXMgLURbVE9LRU5dIGluc3RlYWQgb2YgLUQgW1RPS0VOXQogCisyMDEwLTA3LTE3IDE1OjEwICByc3RvcnkKKworICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQ6CisKKyAgIHVwZGF0ZSBkaXNwbGF5IGhpbnQgdG8gc29tZSBsZXNzIGFtYmlndW91cyAoYW5kIHRoYXQgd29ya3Mgd2l0aAorICAgb3VyIGxpYikKKworMjAxMC0wNy0xNyAwNDoxMyAgcnN0b3J5CisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IHRlc3RzaW1wbGUgZm9yIGJ1aWxkZGlyIT1zcmNkaXIKKworMjAxMC0wNy0xNyAwNDoxMiAgcnN0b3J5CisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgYWRkIHRlc3RzaW1wbGUgdGFyZ2V0CisKKzIwMTAtMDctMTYgMTk6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZWxlYXNlIGl0ZXJhdG9yIHdoZW4gZG9uZSB3aXRoIGl0CisKIDIwMTAtMDctMTUgMTg6MjggIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zbm1wdXNtLmM6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IGZpeCBpc3N1ZSB3aXRoIFVTTSB1c2luZyBpbmFjdGl2ZSB1c2VycwogCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBkb24ndCB1c2Ugc3RybmR1cCAocG9ydGFiaWxpdHkpCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGluY2x1ZGUgYXBwcm9wcmlhdGUgc3RyaW5nIGhlYWRlcjsgZGVmaW5lIE5BTUVfTUFYIGlmIG5vdCBhbHJlYWR5CisgICBkZWZpbmVkOworICAgZG9uJ3QgdXNlIHN0cm5kdXAgKHBvcnRhYmlsaXR5KQorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hlY2sgdGhhdCBzb21lIG5ld2VyIG9wZW5zc2wgbWFjcm9zIGFyZSBkZWZpbmVkIGJlZm9yZSB1c2luZworICAgdGhlbTsgaW5jbHVkZQorICAgYXBwcm9wcmlhdGUgc3RyaW5nIGhlYWRlcgorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGNoZWNrIGZvciBkdGxzIHN1cHBvcnQgaW4gb3BlbnNzbAorCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZG9uJ3QgY29tcGlsZSBkdGxzIGRvbWFpbiBpZiBubyBkdGxzIHN1cHBvcnQgaW4gb3BlbnNzbAorCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBpZmRlZiBwcm90ZWN0aW9uIGZvciBsYXRlciBzaGEgYWxnb3JpdGhtcworCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6CisKKyAgIGRhcndpbiBvcGVuc3NsIGRvZXMgbm90IHN1cHBvcnQgbW9yZSByZWNlbnQgc2hhIGFsZ29yaXRobXMKKworMjAxMC0wNy0xNSAwMTozMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBmaXggdHlwbyBpbiBpZmRlZiB0ZXN0CisKKzIwMTAtMDctMTUgMDE6MzMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYzoKKworICAgZml4IGN1dC1uLXBhc3RlIGVycm9yIGluIGluY2x1ZGVkIGZpbGUgbmFtZQorCisyMDEwLTA3LTE0IDE1OjA4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBmaXggdGhlIGZpeDogcHV0IFBSSXogc3BlYyBpbiBjb3JyZWN0IHBsYWNlCisKKzIwMTAtMDctMTQgMTU6MDMgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIHNwZWNpZnkgU05NUCB2ZXJzaW9uIG9uIGNvbW1hbmRsaW5lCisKKzIwMTAtMDctMTQgMTU6MDMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBxdWlldCBjb21waWxlcgorCisyMDEwLTA3LTE0IDE1OjAyICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgcXVpZXQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wNy0xMyAyMDowMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBhcHBzL3NubXB0bHMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBpbmNsdWRlIHNzbC5oIGJlZm9yZSBjZXJ0X3V0aWwuaAorCisyMDEwLTA3LTEzIDIwOjAzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZGVidWcgb3V0cHV0IGZvciBmb3VuZCBjZXJ0CisKKzIwMTAtMDctMTMgMTY6MjQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdHlwbyBpbiBsb2cgbXNnCisKIDIwMTAtMDctMTIgMTA6MjYgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOgpAQCAtMjA0MCw2ICszODI1MSwxMDkgQEAKICAgIGludGVyZmFjZXMgdGFibGUgZG9lcyBub3QgdHJpZ2dlciBvdXQtb2YtcmFuZ2UgYXJyYXkgYWNjZXNzZXMKICAgICh3YXMgZGV0ZWN0ZWQgYnkgQm91bmRzQ2hlY2tlcikuCiAKKzIwMTAtMDctMTIgMTA6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CisKKyAgIEZpeGVkIGEgZGFuZ2xpbmctcG9pbnRlci1yZWFkIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5MDE4LiBJbgorICAgcjE5MDE4IHRoZSB0eXBlIG9mIGdyb3VwU3VidHJlZUxlbiB3YXMgY2hhbmdlZCBmcm9tIGludCB0bworICAgc2l6ZV90LCB3aGljaCBjaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiB0aGUgbG9vcCAid2hpbGUKKyAgIChncm91cFN1YnRyZWVMZW4tLSA+IDApIC4uLiI6IGluc3RlYWQgb2Ygbm90IGV4ZWN1dGluZyB0aGUgbG9vcAorICAgYm9keSB3aGVuIGdyb3VwU3VidHJlZUxlbiB3YXMgbmVnYXRpdmUsIHIxOTAxOCBjYXVzZWQgdGhlIGJvZHkgb2YKKyAgIHRoYXQgbG9vcCB0byBiZSBleGVjdXRlZC4gRGV0ZWN0ZWQgYnkgcnVubmluZyBzbm1wZCB1bmRlcgorICAgQm91bmRzQ2hlY2tlciB3aGlsZSBwZXJmb3JtaW5nIGEgTUlCIHdhbGsuCisKKzIwMTAtMDctMTIgMTA6MTIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKKworICAgUmV2ZXJ0ZWQgcjE5MDQ3ICh3aGljaCB3YXMgd3JvbmcpIGFuZCBpbXBsZW1lbnRlZCBhIHByb3BlciBmaXgKKyAgIGZvciB0aGUgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoZXMuCisKKzIwMTAtMDctMTIgMTA6MDkgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIGNvbW1lbnQuCisKKzIwMTAtMDctMTIgMTA6MDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oOgorCisgICBTdXBwcmVzc2VkIG1vcmUgTVNWQyBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNy0xMiAwNDo0NSAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzOgorCisgICBhZGQgY29tbWVudCB3aXRoIG9iamVjdCBuYW1lIGZvciBudW1lcmljIGlkcworCisyMDEwLTA3LTEyIDA0OjQ1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBuZXcgZnVuY3Rpb24gdG8gZ2V0IHNlcnZlcklkIGZyb20gc25tcFRsc3RtQWRkclRhYmxlIGRhdGE7IHVzZQorICAgbmV3IGFwaQorICAgdG8gY29uZmlnIHNlcnZpY2VJZCBmb3IgdHJhcCB0cmFuc3BvcnQgd2hlbiBzZW5kaW5nIHRyYXBzCisKKzIwMTAtMDctMTEgMTE6MTggIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBDSEFOR0VTOiBCVUc6IDMwMjc5MDA6IHdoZW4gY3Jvc3MtY29tcGlsaW5nIGl0IGlzIG5vdyBhc3N1bWVkCisgICB0aGF0IG1lbWNtcCgpIGlzIGF2YWlsYWJsZSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgaXQgaXMgbm90CisgICBhdmFpbGFibGUuCisKKzIwMTAtMDctMTEgMTA6MzAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSByMTkxOTcuCisKKzIwMTAtMDctMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzeW5jIHVwIGhlbHAgb3V0cHV0IGFuZCBvcHRpb25zIHByb2Nlc3NpbmcKKworMjAxMC0wNy0wOSAxNToxMyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFVwZGF0ZWQgQ3lnd2luIHNlY3Rpb24gaW4gUkVBRE1FLndpbjMyLgorCisyMDEwLTA3LTA5IDE1OjEzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBTdXBwcmVzc2VkICJpbXBsaWNpdCBjYXN0IGZyb20gaW50IHRvIHVfY2hhciIKKyAgIHdhcm5pbmdzIGdlbmVyYXRlZCBieSBNU1ZDLgorCisyMDEwLTA3LTA5IDE1OjExICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIFRlc3Rpbmc6IG1hZGUgdGhlIGRlYnVnIG91dHB1dCB0aGF0IGFwcGVhcnMgaW4gdGhlICJpbnZva2VkIiBmaWxlCisgICBldmVuIG1vcmUgdmVyYm9zZS4KKworMjAxMC0wNy0wOSAxNToxMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzIgTVNWQyBidWlsZCBmaXhlcy4KKworMjAxMC0wNy0wOCAxOTozMCAgbWFyegorCisgICAqICBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQsICAgCisgICAgICBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CisKKyAgIGFkZHMgcGVyIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwb3J0IHNvIGRlZmF1bHRzIGNhbiBiZQorICAgY3VzdG9taXNlZCBvbiBjbWRsaW5lIHcgLWkgPGlkZW50aXR5PiAtIHNlZSBuZXQtc25tcC1jZXJ0LmNvbmYKKyAgIGZvciBleGFtcGxlcyBhbmQgc29tZSBoZWxwIGluZm8KKwogMjAxMC0wNy0wOCAxMjoxNyAgZHRzMTIKIAogICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jOgpAQCAtMjA1MywzOSArMzgzNjcsNzgyIEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMDE5MjQzOiBSZWdpc3RlciBleGVjRml4IGNvbXBhdGFiaWxpdHkKICAgIGRpcmVjdGl2ZSBjb3JyZWN0bHkuCiAKKzIwMTAtMDctMDcgMTA6MTkgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlOgorCisgICBDSEFOR0VTOiBDeWd3aW4gYW5kIE1pbkdXOiB0ZXN0cyBUMTEwLCBUMTExLCBUMTEyLCBUMTIwLCBUMTIxIGFuZAorICAgVDEyMiBkbyBub3cgcGFzcyB3aGVuIHNubXBkIGlzIGJ1aWx0IHdpdGggd2luRXh0RExMIHN1cHBvcnQKKyAgIGVuYWJsZWQuCisKKzIwMTAtMDctMDYgMTg6NTkgIGJ2YXNzY2hlCisKKyAgICogIENoYW5nZUxvZywgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIE1hZGUgcmVncmVzc2lvbiB0ZXN0cyBlYXNpZXIgdG8gZGVidWcgYnkgaW5jbHVkaW5nIG9rIC8gbm90IG9rCisgICBzdGF0dXMgaW4gdGhlICJpbnZva2VkIiBmaWxlLgorICAgU3BlbGxpbmcgZml4ZXM6IHJlbWViZXIgLT4gcmVtZW1iZXI7IHNlcGVyYXRvciAtPiBzZXBhcmF0b3IuCisKKzIwMTAtMDctMDYgMTU6MDQgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBUZXN0IFQwNjUgZG9lcyBub3cgcmVhbGx5IHBhc3Mgb24gTWluR1cuCisKKzIwMTAtMDctMDUgMTA6MDEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgY3VybHkgYnJhY2VzIHN1Y2ggdGhhdCAnfHwnIGFuZCAnJiYnIGFyZSBldmFsdWF0ZWQgaW4gdGhlCisgICBjb3JyZWN0IG9yZGVyLgorCisyMDEwLTA3LTA0IDExOjM3ICBidmFzc2NoZQorCisgICAqIGFwcHM6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wNy0wNCAxMTozNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBGYWxsIGJhY2sgZnJvbSBSVU5GVUxMVEVTVFMgdG8gUlVOVEVTVFMgaWYgbmVpdGhlciBUQVA6Okhhcm5lc3MKKyAgIG5vciBUZXN0OjpIYXJuZXNzIGlzIGF2YWlsYWJsZS4KKworMjAxMC0wNy0wNCAxMToyMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSB0ZXN0IG51bWJlciBpbiAvdG1wL3NubXAtdGVzdHMtJHRlc3RudW0gaXMgc2V0CisgICB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsIHRoYW4ganVzdCAiMCIuCisKKzIwMTAtMDctMDQgMTE6MjAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgU3BsaXQgYSBsb25nIGNvbW1lbnQgbGluZS4KKworMjAxMC0wNy0wNCAxMDo1MiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBCdWcgZml4OiBtYWRlIHN1cmUgdGhhdCBzcmNkaXIgaXMgY29tcHV0ZWQgY29ycmVjdGx5IGlmIGBkaXJuYW1lCisgICAkMGAgPSAuCisKKzIwMTAtMDctMDIgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgU2ltcGxpZmllZCByMTkxODEgKEZpeGVkIFRMU1RDUC1lbmFibGVkIGJ1aWxkIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgbm9uLWVtcHR5ICQoRVhFRVhUKSwgaS5lLiBDeWd3aW4gYW5kIE1pbkdXKS4KKworMjAxMC0wNy0wMSAxODoxNSAgYnZhc3NjaGUKKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGaXhlZCBUTFNUQ1AtZW5hYmxlZCBidWlsZCBmb3IgcGxhdGZvcm1zIHdpdGggbm9uLWVtcHR5CisgICAkKEVYRUVYVCksIGkuZS4gQ3lnd2luIGFuZCBNaW5HVy4KKworMjAxMC0wNy0wMSAxODoxMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0bHMuYzoKKworICAgRml4ZWQgeWV0IGFub3RoZXIgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA3LTAxIDE3OjUzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIEZpeGVkIHR3byByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA3LTAxIDAwOjE5ICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMDEgMDA6MTMgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTAxIDAwOjAzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDYtMzAgMjM6NTUgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDYtMzAgMjM6NDggIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZjoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDYtMzAgMjM6NDUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIG1pc3NlZCB0d28gdG9rZW5zIGluIHRoZSBtYW4gcGdhZXMKKworMjAxMC0wNi0zMCAyMzo0NSAgaGFyZGFrZXIKKworICAgKiAgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wZC44LmRlZiwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcmVuYW1lIHRoZSBkZWZYNTA5IHRva2VucyB0byBzb21ldGhpbmcgbW9yZSBmcmllbmRseTogY2xpZW50Q2VydAorICAgYW5kIHNlcnZlckNlcnQKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB0b3AtZmlsZSBjb21tZW50IHVwZGF0ZXMKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkb24ndCBjYWxsIGNlcnRfZmluZCB3aXRoIGEgTlVMTCBhcmd1bWVudAorCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFsbG93IGRlZiBjZXJ0cyB0byBiZSBzcGVjaWZpZWQgdXNpbmcgYSBmaWxlbmFtZQorCisyMDEwLTA2LTMwIDIzOjQxICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBmaXggc3ludGF4IGVycm9yCisKKzIwMTAtMDYtMzAgMjM6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdHVybiBhIGNvdXBsZSBvZiBub24tY3JpdGljYWwgZXJyb3JzIGludG8gZGVidWcgc3RhdGVtZW50cyBwZXIKKyAgIGRpc2N1c3Npb24gd2l0aCByc3RvcnkKKworMjAxMC0wNi0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWFrZSB0aGUgcmVnZXhwIHBhdHRlcm4gbWF0Y2ggZm9yIHRlc3RzIHRvIHJ1biBjYXNlIGluc2Vuc2l0aXZlCisKKzIwMTAtMDYtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50LnB5OgorCisgICBpbXBvcnQgc3RkZXJyIGZyb20gc3lzLCBwZXIgZGlzY3Vzc2lvbiBvbiAtdXNlcnMKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGQgYmFjayBpbiB0aGUgZGVmYXVsdCBwb3J0IHNwZWNpZmllcgorCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGVuYWJsZSBwdWxsaW5nIHRoZSBwcml2YXRlIGtleSBvdmVyIGh0dHAKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtb3ZlIFVSTCBjb2xsZWN0aW9uIGludG8gYSBzdWIgZnVuY3Rpb24KKworMjAxMC0wNi0zMCAyMjoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCBhYmlsaXR5IHRvIHB1bGwgYSBjZXJ0IGZyb20gYSBVUkwKKworMjAxMC0wNi0zMCAyMjoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggYXJndW1lbnQgYnVnIGluIHRoZSBpc191cmwgZnVuY3Rpb24KKworMjAxMC0wNi0zMCAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB0bHMuYzoKKworICAgcmVtb3ZlIGRlYnVnZ2luZyBjb2RlCisKKzIwMTAtMDYtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3RHRsc0NOU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN2R0bHNDTlNlc3Npb25fc2ltcGxlOgorCisgICByZW5hbWUgZmlsZSBmb3IgY29uc2lzdGVuY3kKKworMjAxMC0wNi0zMCAyMDowMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlOgorCisgICB1cGRhdGUgZm9yIG5ldyBzbm1wdGxzIGFwcAorCisyMDEwLTA2LTMwIDIwOjAwICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICByZW1vdmUgYWNjaWRlbnRhbGx5IGNoZWNrZWQgaW50IGRlYnVnIGNvZGUKKworMjAxMC0wNi0zMCAxOTo1OSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgZGVmaW5lIE9JRHMgYmFzZWQgb24gU05NUF9UTFNfVE1fQkFTRQorCisyMDEwLTA2LTMwIDE5OjU5ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBhdXRvLXRyYW5zaXN0aW9uIGJldHdlZW4gbm90UmVhZHkvbm90SW5TZXJ2aWNlCisKKzIwMTAtMDYtMzAgMTk6NTcgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGF1dG8tdHJhbnNpc3Rpb24gYmV0d2VlbiBub3RSZWFkeS9ub3RJblNlcnZpY2U7IGFkZAorICAgc25tcF9zdG9yZV9uZWVkZWQgb24gY29tbWl0CisKKzIwMTAtMDYtMzAgMTk6NTYgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVzZSBuZXcgZmluZ2VycHJpbnQgcGFyc2UvYnVpbGQgZnVuY3Rpb25zOyByZW1vdmUgYmFkIGxlbmd0aAorICAgY2hlY2s7IGF1dG8KKyAgIHRyYW5zaXRpb24gYmV0d2VlbiBub3RSZWFkeSBhbmQgbm90SW5TZXJ2aWNlCisKKzIwMTAtMDYtMzAgMTk6NTUgIHJzdG9yeQorCisgICAqIG1pYnMvVExTVE0tTUlCLnR4dDoKKworICAgcmVtb3ZlIHByZS1yZmMgbWliOyBzZWUgU05NUC1UTFMtVE0tTUlCLnR4dCBpbnN0ZWFkCisKKzIwMTAtMDYtMzAgMTk6NTQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIGNvbnNvbGlkYXRlIG11bHRpcGxlIGZpbGVzCisKKzIwMTAtMDYtMzAgMTk6NTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFrZSBoYXNoIHR5cGUgcGFyc2Ugcm91dGluZSBwdWJsaWM7IGFkZCByb3V0aW5lcyB0byBidWlsZC9wYXJzZQorICAgU25tcFRMU0ZpbmdlcnByaW50CisKKzIwMTAtMDYtMzAgMTk6NTEgIHJzdG9yeQorCisgICAqICBNYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wdGxzLmMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgTkVXUzogc25tcHRsczogbmV3IGFwcCBmb3IgbWFuYWdpbmcgKEQpVExTIGNvbmZpZyB2aWEKKyAgIFNOTVAtVExTLVRNLU1JQiB0YWJsZXMKKworMjAxMC0wNi0zMCAxOTo1MCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmM6CisKKyAgIGNhbGwgbmV3IHNubXBfc3RvcmVfbmVlZGVkKCkgZnVuY3Rpb24gYWZ0ZXIgYSBjb21taXQgaW4gdGFibGVzCisgICB0aGF0CisgICBoYXZlIHBlcnNpc3RlbnQgc3RvcmUKKworMjAxMC0wNi0zMCAxOTo0OSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IGV4cGVyaW1lbnRhbCBzaW1wbGUgc3RhdGUgbWFjaGluZQorICAgTkVXUzogc25tcGxpYjogbmV3IGV4cGVyaW1lbnRhbCByb3cgY3JlYXRpb24gQVBJIHdoaWNoIHVzZXMgYQorICAgc3RhdGUgbWFjaGluZQorICAgdG8gdHJ5IHJlYWxseSBoYXJkIHRvIGNyZWF0ZSBhIHJvdyBmcm9tIGEgZ2l2ZW4gdmFyYmluZCBsaXN0CisKKzIwMTAtMDYtMzAgMTk6NDggIHJzdG9yeQorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBORVdTOiBzbm1wZDogbmV3IEFQSSBmb3IgaW5kaWNhdGluZyB0aGF0IHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMKKyAgIHRvIGJlIHNhdmVkIGFmdGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgZmluaXNoZXMgcHJvY2Vzc2luZworCisyMDEwLTA2LTMwIDE5OjQ2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgYWRkIHNvbWUgbmV3IHdyYXBwZXIgbWFjcm9zCisKKzIwMTAtMDYtMzAgMTU6NTkgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQ05TZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW5TZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTVEdGxzU2FuU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNlRsc1NhblNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdkdGxzQ05TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE4VGxzQ05TZXNzaW9uX3NpbXBsZToKKworICAgYWRkZWQgY2hlY2tzIGZvciBjaGVja2luZyBkaXJlY3QgcGFzc2luZyBvZiBsb2NhbGhvc3QgdG8gdGhlCisgICBleHBlY3RlZCBuYW1lCisKKzIwMTAtMDYtMzAgMTU6NTkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXI6CisKKyAgIGNoZWNrIGZvciB3aWxkY2FyZCBzdXBwb3J0CisKKzIwMTAtMDYtMzAgMTU6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHN1cHBvcnQgU0FOIGFuZCBDTiB3aWxkY2FyZCBtYXRjaGluZyBwZXIgc3BlYworCisyMDEwLTA2LTMwIDE1OjAwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNOYW1lLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnMsICAKKyAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY2lwaGVyVGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzbmFtZXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzYW50ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeCwgCisgICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxRHRsc1VzZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAyVGxzVXNlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMUR0bHNTZXJ2ZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJUbHNTZXJ2ZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM0R0bHNTYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNkdGxzdWRwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0VGxzU2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0dGxzdGNwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxRHRsc1RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIyVGxzVHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMUR0bHNBZ2VudFRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFkdGxzdWRwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJUbHNBZ2VudFRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJ0bHN0Y3BhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MUR0bHNDcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFkdGxzdWRwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQyVGxzQ3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQydGxzdGNwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxRHRsc0NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFkdGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MlRsc0NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJ0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMHRsc2lwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDBUbHNQZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMHRsc3RjcHBlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxRHRsc1BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxZHRsc3BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxRHRsc1RzbVByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMWR0bHN0c21wcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJUbHNUc21QcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJ0bHN0c21wcmVmaXhfc2ltcGxlOgorCisgICBtb3ZlZCB0ZXN0IGZpbGVzIGFyb3VuZCBmb3IgYmV0dGVyIG5hbWluZworCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IGR0bHMgdHJhbnNwb3J0IGFkZHJlc3MgdG8gdGhlIGV4cGVjdGVkIGhvc3RuYW1lCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2V0IHRoZSBleHBlY3RlZCBob3N0bmFtZSBmcm9tIHRoZSB0cmFuc3BvcnQgc3RyaW5nIGlmIHBvc3NpYmxlCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYSBiaXQgbW9yZSBoZWxwIG91dHB1dCBieSBkZWZhdWx0CisKIDIwMTAtMDYtMjkgMjI6MjkgIHRhbmRlcnMKIAogICAgKiBhcHBzL3NubXB0cmFwZF9hdXRoLmM6CiAKICAgIEZvbGxvdy11cCBmb3IgcjE5MTE2OiBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhZ2VudCBjb25maWcKIAorMjAxMC0wNi0yOSAyMjoxOCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oOgorCisgICBBZGQgbWlzc2luZyBjb25maWdfcmVxdWlyZXMKKworMjAxMC0wNi0yOSAxNzozMyAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgcmV3b3JrIHRoZSBzbm1wY21kIG1hbnVhbCBwYWdlIHRvIHNlcGFyYXRlIG91dCB0aGUgZmxhZ3MgaW50bworICAgc2VjdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHRoZWlyIHVzYWdlIHR5cGUKKworMjAxMC0wNi0yOSAxNjo1MSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHBvZCBkb2NzLCBzb21lIGRlZmF1bHQgdmFsIGZpeGVzLCBpbmZvIG91dHB1dCBub3JtYWxpemVkCisKKzIwMTAtMDYtMjkgMTY6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBhZGRlZCBzc2guaCBpbmNsdWRlCisKKzIwMTAtMDYtMjkgMTY6MjcgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIHJlb3JnYW5pemUgdGhlIG1hbnVhbCBwYWdlIGEgYml0IGZvciBTTk1QdjMgYW5kIFRMUworCisyMDEwLTA2LTI5IDE2OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBkZWZhdWx0IHRscyByZWdpc3RyYXRpb25zCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBjaGVjayBmb3IgTlVMTCB0cmFuc3BvcnRzIGFmdGVyIGFuIG9wZW4gZmFpbHMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92aW5nIGxvZ2dpbmcgYXJvdW5kIHNvIHRoYXQgb3BlbnNzbCBlcnJvcnMgYXJlIHByaW50ZWQgb24KKyAgIGZhaWx1cmVzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeDoKKworICAgZml4IHNvbWUgbm9uLWludGVyYWN0aXZlIGludm9jYXRpb24gaXNzdWVzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgc29tZSBjb21tb24gY29kZSBpbnRvIGEgY29tbW9uIGZ1bmN0aW9uCisKKzIwMTAtMDYtMjggMTk6MTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY2lwaGVyVGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MWR0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUydGxzY2lwaGVyc19zaW1wbGU6CisKKyAgIGNpcGhlciBzdWl0ZSBzZWxlY3Rpb24gYW5kIHRlc3RzIGZvciBpdAorCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9MSUNFTlNFOgorCisgICBsaWNlbnNlIHVwZGF0ZXMKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiAgcHl0aG9uL1JFQURNRSwgcHl0aG9uL25ldHNubXAvY2xpZW50LnB5LCAgIAorICAgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgU05NUHYzIG92ZXIgVExTIHN1cHBvcnQKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICBiZXR0ZXIgb3V0cHV0IHNob3dpbmcgdGVzdCB0eXBlcworCiAyMDEwLTA2LTI4IDAwOjU0ICB0YW5kZXJzCiAKICAgICogIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9jb250YWluZXIuMywgIAogICAgICAgIG1hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMsICAgCiAgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CiAKICAgIENIQU5HRVM6IG1hbjogY2xlYW4gdXAgbWFudWFsIHBhZ2VzCiAgICAoZnJvbSBEZWJpYW4gcGF0Y2ggNTZfbWFucGFnZSkKIAotMjAxMC0wNi0yOCAwMDoyMSAgdGFuZGVycwotCi0gICAqIGFnZW50L29iamVjdF9tb25pdG9yLmM6Ci0KLSAgIGZpeCBjcHAgc3ludGF4IGVycm9yCi0KIDIwMTAtMDYtMjcgMjM6MjkgIHRhbmRlcnMKIAotICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKLSAgICAgIGFwcHMvc25tcHRyYXBkX2F1dGguYzoKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5jOgogCiAgICBDSEFOR0VTOiBidWlsZDogRG8gbm90IGNhbGwgdmFjbV9zdGFuZGFyZF92aWV3cygpIG9yCiAgICBpbml0X3ZhY21fY29uZmlnX3Rva2VucygpIGlmIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSB3YXMgbm90CiAgICBjb21waWxlZAogICAgKGZyb20gRGViaWFuIHBhdGNoIDYxX3ZhY21fbWlzc2luZ19kZXBlbmRlbmN5X2NoZWNrKQogCisyMDEwLTA2LTI3IDAzOjIzICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGFwcCB0YWcgY29tcGxldGlvbnMKKworMjAxMC0wNi0yNyAwMDo1NiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQsIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKKworICAgaGFuZGxlIGNvbmZpZyBmaWxlIHNldHRpbmcgaW50ZXJhY3RpdmUsIHRydWUvZmFsc2UgdmFsdWVzIGhhbmRsZWQKKyAgIGluIGNvbmZpZworCisyMDEwLTA2LTI2IDIwOjU4ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IHNvbWUgYnVncyB3LyBzcGFjZXMgaW4gbmFtZXMgYW5kIGFwcCB0YWcgaGVscAorCisyMDEwLTA2LTI2IDE5OjM4ICBtYXJ6CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggdGVzdHMgdG8gdXNlIG5vbi1pbnRlcmFjdGl2ZSAtSQorCisyMDEwLTA2LTI2IDE3OjQ2ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBiZXR0ZXIgaW50ZXJhY3RpdmUsID89aGVscCwgPHRhYj4gY29tcGwsIG1vcmUgaGVscCwgU0FOIGxvb3AKKyAgIGZvcm1hdCBhbmQgdGVybWluYXRpb24gZml4LCB0b2xlcmF0ZSBzcGFjZXMgaW4gZmllbGRzIGFuZAorICAgZmlsZW5hbWVzLCBtb3JlIGNvbXBsZXRlIGVycm9yIG91dHB1dCwgZW1icnlvbmljIGltcG9ydCBmcm9tIHVybAorCisyMDEwLTA2LTI2IDEzOjQ4ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgTW9yZSBjb21waWxlciB3YXJuaW5nIGZpeGVzLgorCisyMDEwLTA2LTI2IDEzOjQ3ICBidmFzc2NoZQorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZpeGVkIHRoZSBlcnJvcnMgaW4gYWNjb25maWcuaCBhbmQgcmVnZW5lcmF0ZWQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluLgorCisyMDEwLTA2LTI2IDEzOjQ0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgU01VWCBNSUIgaW1wbGVtZW50YXRpb24uCisKKzIwMTAtMDYtMjYgMDA6NDUgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NhbnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNkdGxzdWRwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0dGxzdGNwc2FuX3NpbXBsZToKKworICAgZml4ZXMgYW5kIHRlc3RpbmcgZm9yIGNoZWNraW5nIFNBTiBETlMgbmFtZXMgZnJvbSB0aGUgc2VydmVyCisKKzIwMTAtMDYtMjYgMDA6NDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzbmFtZXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlOgorCisgICBnZW5lcmljaXplIHRoZSBzZXJ2ZXIgbmFtZSB0ZXN0cworCisyMDEwLTA2LTI1IDIzOjAxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC90c20tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMWR0bHN0c21wcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJ0bHN0c21wcmVmaXhfc2ltcGxlOgorCisgICB1c2VwcmVmaXggc2NhbGFyIHRlc3RpbmcgYW5kIHN1cHBvcnQKKworMjAxMC0wNi0yNSAyMzowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzOgorCisgICByZW1vdmUgZGVidWdnaW5nIGxpbmVzCisKKzIwMTAtMDYtMjUgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0czoKKworICAgcHV0IGluIG9ubHkgbWluaW1pYWwgZGVidWcgZmxhZ3MKKworMjAxMC0wNi0yNSAyMzowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFkdGxzdWRwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQydGxzdGNwY3JsX3NpbXBsZToKKworICAgY29kZSBhbmQgdGVzdCBjYXNlcyBmb3IgQ1JMIGhhbmRsaW5nCisKKzIwMTAtMDYtMjUgMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZToKKworICAgQWRkZWQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIHByaW50ZWQgYnkgdGhlIFBlcmwKKyAgIGludGVycHJldGVyLgorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZWR1Y2UgbnVtYmVyIG9mIHJlc2VuZCBhdHRlbXB0cyBhbmQgdGltZW91dAorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsIHNubXBsaWIvY2VydF91dGlsLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgd2FybmluZyBmaXhlcworCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHJlbW92ZSBsb2dpYyB0eXBvIGZyb20gcHJldmlvdXMgY29tbWl0CisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwdGxzaXB2Nl9zaW1wbGU6CisKKyAgIElQdjYgZml4ZXMgZm9yIFRDUAorCiAyMDEwLTA2LTI1IDEzOjAxICBqc2FmcmFuZWsKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC0yMDk5LDYgKzM5MTU2LDg0IEBACiAgICBDSEFOR0VTOiBzbm1wdHJhbnNsYXRlOiBmaXhlZCBwcmludGluZyBvZiByYW5nZXMgd2l0aCBVTlNJR05FRAogICAgdHlwZS4KIAorMjAxMC0wNi0yNCAyMzo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGZ1bmN0aW9uIG5hbWVzIGZvciBzdGF0IGluY3JlYXNlcworCisyMDEwLTA2LTI0IDIzOjUyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggZXJyb3JzIGluIGNvbW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvbW1lbnRzIGZvciA1LjQgZm9yIGR0bHMKKworMjAxMC0wNi0yNCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29tbWVudHMgZm9yIDUuMy4yCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNsaWVudCBzaWRlIGNvbm5lY3QgY29tbWVudHMKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY291bnRlciBhbmQgY29tbWVudCBpbXByb3ZlbWVudHMKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgdXBkYXRlIGNvdW50ZXIgY2FsbHMgYW5kIGNvbW1lbnQgdGV4dAorCisyMDEwLTA2LTI0IDE5OjAzICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgTW92ZWQgTERfTElCUkFSWV9QQVRIIHNldHVwIGZyb20gaW5kaXZpZHVhbCB0ZXN0cyBzY3JpcHRzIHRvCisgICBzaW1wbGVfVEVTVENPTkYuc2guCisKKzIwMTAtMDYtMjQgMTk6MDIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBGaXhlZCBhIGNvbW1lbnQuCisKKzIwMTAtMDYtMjQgMTc6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIFNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gcjE5MDg0LgorCisyMDEwLTA2LTI0IDE3OjQ3ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA2LTI0IDEyOjMwICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgICJ0ZXN0IC1lIiBpc24ndCBwb3J0YWJsZTsgdXNlICJ0ZXN0IC14IiBpbnN0ZWFkIGZvciB0aGUgUGVybAorICAgc3lzdGVtKCkKKyAgIGNoZWNrCisKIDIwMTAtMDYtMjMgMTE6MTQgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmM6CkBAIC0yMTExLDE4ICszOTI0NiwxMTIyIEBACiAgICBpbnN0ZWFkIC0gbmV0c25tcF9pbnRlcmZhY2VfZW50cnkuZm9yd2FyZGluZ192NiBpcyBib29sZWFuLCBub3QKICAgIFRydXRoVmFsdWUuCiAKKzIwMTAtMDYtMjIgMjM6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBzdXBwb3J0IGZvciBjZXJ0U2VjTmFtZSBtYXBwaW5nIGZyb20gYSBsb2NhbCBjZXJ0IGZpbGUgbmFtZSBhbmQgYQorICAgdGVzdCBmb3IgaXQKKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbToKKworICAgZG9jdW1lbmF0aW9uIHVwZGF0ZSB0byBjbGVhbiB1cCBhbmQgaW5jbHVkZSBUTFMgcGFyYW1ldGVycworCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgc3VwcG9ydCBmb3IgcGFzc2luZyBpZGVudGl0aWVzIGFuZCBmdWxsIHdvcmtpbmcgdmVyc2lvbgorCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMHRsc3RjcHBlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxZHRsc3BlcmwudDoKKworICAgcGVybCBUTFMvRFRMUyB0ZXN0cworCisyMDEwLTA2LTIyIDIyOjQzICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgZmlyc3QgcHRhY2ggb24gU05NUC9UTFMgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbiBmdW5jdGlvbgorCisyMDEwLTA2LTIyIDIyOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXJzdCB3b3JraW5nIHN1cHBvcnQgZm9yIGEgZGVsYXllZCBjbG9zZSgpIHRvIGF0dGVtcHQgdG8gc2VuZGluZworICAgb3V0c3RhbmRpbmcgcGFja2V0cyBpbiB0aGUgcXVldWU7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIHNubXB0cmFwCisgICB0byB3b3JrIGF0IGFsbCB3aGVuIHNlbmRpbmcgdHJhcHMgKG5vdCBpbmZvcm1zKSBvdmVyIERUTFMKKworMjAxMC0wNi0yMiAxOTowMyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBDSEFOR0VTOiBNaW5HVzogdGVzdHMgVDA1OXRyYXBoYW5kbGVfc2ltcGxlIGFuZAorICAgVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSBkbyBub3cgcGFzcy4KKworMjAxMC0wNi0yMiAxOTowMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmM6CisKKyAgIFRoZSB3aWR0aCBhcmd1bWVudCBmb3IgJS4qZCBtdXN0IGhhdmUgdHlwZSBpbnQsIG5vdCBzaXplX3QuIFRoaXMKKyAgIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiByMTkwMTQuCisKKzIwMTAtMDYtMjIgMTg6NTcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYzoKKworICAgTkVXUzogTWluR1c6IHRoZSBzbm1wZC5jb25mIGtleXdvcmQgZXh0ZW5kIGRvZXMgbm93IHdvcmsuCisgICBORVdTOiBNaW5HVzogdGhlIHNubXB0cmFwZC5jb25mIGtleXdvcmQgdHJhcGhhbmRsZSBkb2VzIG5vdyB3b3JrLgorICAgQ0hBTkdFUzogTWluR1c6IHJ1bl9zaGVsbF9jb21tYW5kKCkgd2l0aCBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0CisgICAoYnV0IG5vdCBib3RoKSBkb2VzIG5vdyB3b3JrLgorICAgVGhpcyBkaWQgbm90IHdvcmsgdW50aWwgbm93IGJlY2F1c2Ugb24gTWluR1cgbWtzdGVtcCgpIGdlbmVyYXRlcworICAgYSBNaW5HVy1zdHlsZSBwYXRoICgvdG1wLy4uLikgd2hpbGUgc3lzdGVtKCkgaW52b2tlcyBjbWQuZXhlIGFuZAorICAgaGVuY2UgZXhwZWN0cyBhIFdpbmRvd3Mtc3R5bGUgcGF0aCAoQzpcLi4uKS4KKworMjAxMC0wNi0yMiAxNzozOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBBbHNvIHJlcG9ydCB0aGUgcG9ydCBzcGVjaWZpY2F0aW9uIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdLgorCisyMDEwLTA2LTIyIDE3OjM4ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBSZXBsYWNlZCBhbiBleHBsaWNpdCB0ZXN0IGZvciBNaW5HVyBieSBhIHRlc3Qgb24gSEFWRV9TSUdIVVAuCisKKzIwMTAtMDYtMjIgMTc6MzYgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIFNJR0hVUC4KKworMjAxMC0wNi0yMiAxNzozNSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBSZXBvcnQgd2hpY2ggdGVzdHMgZmFpbGVkLCBpZiBhbnkuCisKIDIwMTAtMDYtMjIgMDg6MzcgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6CiAKICAgIEZpeGVkIGFuIGVycm9yIGluIGEgY29tbWVudCBibG9jay4KIAorMjAxMC0wNi0yMSAxOToyNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOgorCisgICBSZWFycmFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHRlc3Qgc3VjaCB0aGF0IGl0IGlzIG5vCisgICBsb25nZXIgbmVjZXNzYXJ5CisgICB0byBpbnZva2Ugc2ltcGxlX2V2YWxfdG9vbHMuc2ggd2hlbiB0aGlzIHNjcmlwdCBpcyBpbnZva2VkIGFzIGEKKyAgIHRyYXAgaGFuZGxlcgorICAgYnkgc25tcHRyYXBkLgorCisyMDEwLTA2LTIxIDA4OjAxICBkdHMxMgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIEVuc3VyZSB0aGF0IGZkc2V0IHN0cnVjdHVyZSBpcyByZXNpemVkIHN1ZmZpY2llbnRseQorICAgdG8gYWNjb21vZGF0ZSB0aGUgc3BlY2lmaWVkIHNvY2tldCBJRC4KKyAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgU2hpeWFsZWkuCisKKzIwMTAtMDYtMjAgMTk6MzIgIGR0czEyCisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL3BrY3MuYywgICAKKyAgICAgIHNubXBsaWIvc25wcmludGYuYzoKKworICAgQXZvaWQgZHVwbGljYXRlICh1bnVzZWQpIHN5bWJvbHMuCisKKzIwMTAtMDYtMjAgMTk6MzEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZToKKworICAgQ29tbWVudGVkIG91dCBkZWJ1ZyBjb2RlLgorCisyMDEwLTA2LTIwIDE5OjMwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgUmVzdG9yZWQgc3VtbWFyeSBzdWNjZXNzL2ZhaWx1cmUgY291bnQgcmVwb3J0aW5nLgorICAgQWxzbywgbW92ZWQga2lsbC5leGUgdGVzdCBiYWNrIHRvIFJVTlRFU1RTLgorCisyMDEwLTA2LTIwIDE5OjI5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IGFkZCB0aGUgdGVzdCBuYW1lIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgImludm9rZWQiLgorCisyMDEwLTA2LTIwIDE5OjI3ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogc2tpcCB0aGUgdGVzdHMgdGhhdCByZXF1aXJlIFNJR0hVUCBzaW5jZQorICAgTWluR1cgZG9lcyBub3Qgc3VwcG9ydCBTSUdIVVAuCisKKzIwMTAtMDYtMjAgMTU6MTkgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGEgY29uZmlndXJlIHRlc3QgdGhhdCBkZXRlY3RzIHdoZXRoZXIgb3Igbm90IFBlcmwncworICAgc3lzdGVtKCkgZnVuY3Rpb24KKyAgIGludm9rZXMgYSBQT1NJWCBzaGVsbC4gIm1ha2UgdGVzdCIgZG9lcyBub3cgZmFsbCBiYWNrIHRvIFJVTlRFU1RTCisgICBpZiBub3QuCisKKzIwMTAtMDYtMjAgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQnVpbGRzIGFnYWluIG9uIE1pbkdXIC0tIGFkZGVkICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPiB3aGVyZQorICAgbmVjZXNzYXJ5LgorICAgTm90ZTogYWx0aG91Z2ggPG5ldC1zbm1wL3R5cGVzLmg+IGlzIGluY2x1ZGVkIGluZGlyZWN0bHkgZnJvbSB0aGUKKyAgICogICAgICp0cmFuc3BvcnQuaCAgICBoZWFkZXIgZmlsZXMsIHRoZXNlICNpbmNsdWRlIHN0YXRlbWVudHMgYXJlCisgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBvZiAgICBhIHBlc2t5ICAgIGNpcmN1bGFyIGRlcGVuZGVuY2UgYmV0d2VlbgorICAgICAgPG5ldC1zbm1wL3R5cGVzLmg+IGFuZCAgICA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPi4gCisgICAgICAyMDEwLTA2LTIwIDE1OjEyICBidmFzc2NoZQorCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBDSEFOR0VTOiBNaW5HVzogcmVmdXNlIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpZiBraWxsLmV4ZQorICAgY2Fubm90IGJlIGZvdW5kLgorCisyMDEwLTA2LTIwIDE1OjExICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFNob3J0ZW5lZCB0aGUgc3JjZGlyIHBhdGggYnkgbWFraW5nIHN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluCisgICAvLi4KKworMjAxMC0wNi0xOSAxODozMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgQWRkZWQgc3VwcG9ydCBmb3IgcnVubmluZyBSVU5GVUxMVEVTVFMgd2l0aCBUZXN0OjpIYXJuZXNzIGluCisgICBhbm90aGVyIGRpcmVjdG9yeSB0aGFuIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorCisyMDEwLTA2LTE5IDE2OjQxICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBjb21wbGV0ZSByZXdyaXRlIG9mIHBhcmFtcyB0byB1c2UgdGFibGVfZGF0YXNldCBpbnN0ZWFkIG9mCisgICBjcmVhdGUtZGF0YXNldAorCisyMDEwLTA2LTE5IDE2OjQxICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgdXNlIHRleHQgZm9yIGhhc2ggdHlwZSBpbiBwZXJzaXN0ZW50IHN0b3JlCisKKzIwMTAtMDYtMTkgMTY6NDAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYzoKKworICAgcXVpZXQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wNi0xOSAxNjo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBtaXNzaW5nIHNwZWNpZmllciBpbiBkZWJ1ZworCisyMDEwLTA2LTE5IDE2OjM5ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1c2UgZGVmaW5lIGluc3RlYWQgb2YgY29uc3RhbnQ7IGZpeCBjaGVjayBmb3Igcm93cyB0byBzYXZlCisKKzIwMTAtMDYtMTkgMTY6MzkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIHJlbW92ZS9maW5kIGZ1bmN0aW9uIGZvciBtYXBzL2FkZHJzL3BhcmFtczsgcmVuYW1lIHBhcmFtcworICAgdGFnLT5uYW1lOworICAgZGVzdHJveSAtPiBmcmVlOyBncm91cCByZWNlbnQgdHJ1c3QgZnVuY3Rpb25zIHRvZ2V0aGVyIGluIHNyYzsKKyAgIGRvbid0IHN0b3JlCisgICBwYXJhbXMgZnAgYXMgYmluYXJ5OyBoYW5kIHRleHQgYXJncyBmb3IgaGFzaCB0eXBlIChlLmcgLS1zaGExKQorCisyMDEwLTA2LTE4IDE1OjM1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogY29ycmVjdGVkIGVycm9yIGhhbmRsaW5nIGluIG1pYklJL2F0LgorCisyMDEwLTA2LTE4IDA3OjIzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDYtMTggMDE6NDIgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBEbyBub3QgZGVmaW5lIHJldCB0d2ljZSB3aGVuIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTyBpcyBzZXQuCisKKzIwMTAtMDYtMTggMDE6MzkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgQ29ycmVjdGVkIHR5cG8uCisKKzIwMTAtMDYtMTggMDA6MzEgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgYmV0dGVyIE5FV1MgYW5kIENIQU5HRVMgZmlsZXMKKworMjAxMC0wNi0xNyAyMDozOSAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMjA6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA2LTE3IDE4OjU5ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjU1ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjU0ICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLnRvcDoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAxODozOSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgcmUtZW5hYmxlIHNvbWUgY29tbWFuZHMKKworMjAxMC0wNi0xNyAxNzo0NiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIGZvcmdvdCBtaXNzaW5nIHF1b3RlcyBpbiBTRVQgb3V0cHV0CisKKzIwMTAtMDYtMTcgMTc6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIHRscyB0ZXN0aW5nIGNsZWFudXAKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGZpeGVzIGZvciBhZGRyZXNzIHByaW50aW5nOyBtb3JlIHRvIGNvbWUKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3N0bHkgcHJvcGVybHkgc2V0IHJlbW90ZS9sb2NhbCB0cmFuc3BvcnQgcGFyYW1ldGVycworCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFkdGxzdWRwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJ0bHN0Y3BhZ2VudHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIHRlc3RzIGZvciBhZ2VudHMgc2VuZGluZyBvZiB0cmFwcyBvdmVyIChEKVRMUworCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlOgorCisgICBtb3ZlIGV4cG9ydCBzdGF0ZW1lbnRzIHRvIHRoZSBzdXBwb3J0IGZpbGUgZm9yIHNpbXBsaWNpdHkKKworMjAxMC0wNi0xNyAxNzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSB0bHMgYm9vdHN0cmFwcGluZyB0byBwb3N0X3ByZW1pYiBzbyBvdGhlciBjb25maWcgdG9rZW5zIGNhbgorICAgdXNlIHRoZSBjZXJ0IGxvYWRpbmcgcmVzdWx0cworCisyMDEwLTA2LTE3IDE3OjQ0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CisKKyAgIGFkZGVkIHNubXBfZW51bSB0ZXN0cyBwdWxsZWQgZnJvbSB0aGUgbWFpbigpIHRlc3QgYXQgdGhlIGJvdHRvbQorICAgb2YgdGhlIG9yaWdpbmFsIC5jIGZpbGUKKworMjAxMC0wNi0xNyAxNjowMCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgRWxpbWluYXRlICJkaWZmZXIgaW4gc2lnbmVkbmVzcyIgd2FybmluZworCisyMDEwLTA2LTE3IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICByZXZlcnQgVURQIGNoYW5nZXMgZnJvbSByMTg5ODQgc2luY2UgaXQgYnJva2UgdGhlIFVEUCB0cmFuc3BvcnQ7CisgICB0aGUgc3RydWN0IHByb2JhYmx5IG5lZWRzIHRvIG1hdGNoIGFub3RoZXIgc3RydWN0IHNvbWV3aGVyZSBlbHNlCisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGEgbmV3IEtFWVdPUkQgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIHVzZSBjb25maWdfYW5kX29wZW4gZm9yIG9wZW5pbmcgdGhlIHRyYW5zcG9ydAorCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBleHRyYSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCisyMDEwLTA2LTE2IDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgZXhwbGljaXRseSBkZWNsYXJlIHRydXN0IGNlcnRpZmljYXRlcyB0byB0cmFuc3BvcnQKKworMjAxMC0wNi0xNiAyMjoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjbGVhbnVwIHNvbWUgbG9zdCBtZW1vcnkgb24gY2xvc2luZworCisyMDEwLTA2LTE2IDIxOjU2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdHlwb3MKKworMjAxMC0wNi0xNiAyMTozNCAgZHRzMTIKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiB3YXJuaW5ncyBmcm9tCisgICBhZ2VudCBjb2RlIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAyMDoxNiAgZHRzMTIKKworICAgKiAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIHdhcm5pbmdzIGZyb20KKyAgIGxpYnJhcnkgY29kZSBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTk6MzYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBvbGRlciBuby1sb25nZXItbmVlZGVkLWR1cGxpY2F0ZS1jb25maWcgZW50cmllcworCiAyMDEwLTA2LTE2IDE5OjE0ICBkdHMxMgogCiAgICAqIHNubXBsaWIvdmFjbS5jOgogCiAgICBGaXggcHJvY2Vzc2luZyBvZiB2aWV3IG1hc2tzIChtaXNwbGFjZWQgcGFyZW50aGVzZXMpCiAKKzIwMTAtMDYtMTYgMTg6NDUgIGR0czEyCisKKyAgICogIGFwcHMvYWdlbnR4dHJhcC5jLCBhcHBzL3NubXBuZXRzdGF0L2lmLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIGFwcHMvc25tcHVzbS5jOgorCisgICBFbGltaW5hdGUgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgZnJvbSBhcHAgY29kZQorICAgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE3OjIyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHM6CisKKyAgIGNoZWNrIGZvciBpbmZvcm1zIHNlbnQgb3ZlciB0bHMgdHJhbnNwb3J0cworCisyMDEwLTA2LTE2IDE3OjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IG90aGVyIHZhbHVzZSBmcm9tIHBhcmVudCB0bHNiYXNlIGRhdGEKKworMjAxMC0wNi0xNiAxNzoyMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIGFkZGVkIGJhc2ljIHRyYXAgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHRlc3RzCisKKzIwMTAtMDYtMTYgMTc6MjEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICByZW1vdmUgbm8gbG9uZ2VyIG5lZWRlZCB0ZW1wIGZpbGUgdG91Y2hlcworCisyMDEwLTA2LTE2IDE3OjIwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBhZGRlZCBhIG5ldyBmdW5jdGlvbiBhbmQgdHJhbnNwb3J0IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGZfb3BlbgorICAgY2FsbCBoYXMgYmVlbiBjYWxsZWQgeWV0CisKKzIwMTAtMDYtMTYgMTc6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVudXNlZCB2YXIgd2FybmluZyBjbGVhbnVwCisKKzIwMTAtMDYtMTYgMTc6MTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhZGRlZCB0cnVzdENlcnQgY29uZmlndXJhdGlvbiB0b2tlbgorCisyMDEwLTA2LTE2IDE3OjE5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgbWlub3IgdHdlYWtzIGZvciB0ZXN0aW5nIGNsYXJpdHkKKworMjAxMC0wNi0xNiAxNzoxOCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlOgorCisgICBtb3ZlZCBjb21wbGV4IChEKVRMUyB0byBhIHNlcGFyYXRlIHNlY3Rpb24gYW5kIG1hZGUgdGhlIHRyYW5zcG9ydAorICAgdGVzdHMgb25seSB0ZXN0IG1pbmltYWwgc3VwcG9ydAorCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkIG1lY2hhbmlzbXMgZm9yIHNwZWNpZnlpbmcgYW5kIGV4cGVjdGluZyB0aGUgaG9zdG5hbWUgb2YgdGhlCisgICBmYXIgc2lkZQorCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICB0ZXN0cyBmb3IgdmVyaWZ5aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsdXJlcworCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZToKKworICAgdGVzdGluZyBmb3IgY2hlY2tpbmcgY2xpZW50IHNpZGUgdmVyaWZpY2F0aW9uIG9mIHNlcnZlcgorICAgY2VydGlmaWNhdGVzCisKKzIwMTAtMDYtMTYgMTc6MTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIHNldHVwIGZvciBhIGhvc3RuYW1lIGNvbmZpZyBvcHRpb24KKworMjAxMC0wNi0xNiAxNzoxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2V0dXAgZm9yIGEgaG9zdG5hbWUgY29uZmlnIG9wdGlvbgorCisyMDEwLTA2LTE2IDE3OjE1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoZWNrIHRvIG1ha2Ugc3VlciBzc2wgcG9pbnRlciBoYXMgYmVlbiBjcmVhdGVkIHZpYSBmX29wZW4gY2FsbAorCisyMDEwLTA2LTE2IDE1OjAyICBkdHMxMgorCisgICAqIGFnZW50L3NubXBfcGVybC5oLCBhcHBzL3NubXB0cmFwZC5jOgorCisgICBEZWNsYXJlICdzaHV0ZG93bl9wZXJsJyBwcm9wZXJseS4KKworMjAxMC0wNi0xNiAxNDozNyAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYzoKKworICAgRWxpbWluYXRlICJzaWduZWQgYW5kIHVuc2lnbmVkIHR5cGUgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiIKKyAgIHdhcm5pbmdzIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxNDoyNyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIEVsaW1pbmF0ZSAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5nCisKKzIwMTAtMDYtMTYgMTQ6MjIgIGR0czEyCisKKyAgICogIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgRWxpbWluYXRlIHZhcmlvdXMgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTYgMTM6MTMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFwcHMvc25tcHZhY20uYywgc25tcGxpYi90b29scy5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpIHNpZ25lZC12cy11bnNpZ25lZCB3YXJuaW5ncyBmcm9tIG51bWVyaWMgc2NhbmYKKyAgIHByb2Nlc3NpbmcgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNiAwMzoyOCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgdGhlIGdyZWF0IHVuLW5hbWVkIGNvbnRhaW5lciBodW50CisKKzIwMTAtMDYtMTYgMDM6MjcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgc2hhcmUgY2FjaGUgYmV0d2VlbiB0YWJsZSBhbmQgY291bnQgc2NhbGFyOyB3aGVuIHJlYWRpbmcgY29uZmlnLAorICAgYWRkIHRvCisgICBsaWJyYXJ5IGNvbnRhaW5lcnMgZm9yIGFjdGl2ZSByb3dzLCB0YWJsZSBjb250YWluZXJzIGZvciBpbmFjdGl2ZQorICAgcm93czsKKyAgIHVzZXIgY2VydF91dGlsIGFwaXMgaW5zdGVhZCBvZiBkaXJlY3QgY29udGFpbmVyIG1hbmlwdWxhdGlvbjsKKyAgIHdoZW4KKyAgIHNhdmluZyBpbmFjdGl2ZSBtYXAgcm93cywgc2tpcCBhbGwgYnV0IG5vblZvbGF0aWxlCisKKzIwMTAtMDYtMTYgMDM6MjYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBkZWJ1ZyB0b2tlbiB0eXBvCisKKzIwMTAtMDYtMTYgMDM6MjUgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGFwaSBmb3IgYWRkaW5nIGVudHJpZXMgdG8gdGx0c20gYWRkciwgcGFyYW1zIGFuZCBjZXJ0IG1hcAorICAgY29udGFpbmVyczsKKyAgIHJlZ2lzdGVyIHNlIHNsaXN0IHBhaXIgZWFybGllciBzbyB0aGV5IGFyZSBhdmFpbGFibGUgZHVyaW5nCisgICBjb25maWcgcGFyc2luZzsKKyAgIG1ha2Ugc3VyZSBjb25maWcgc3RyaW5ncyBhcmUgbnVsbCB0ZXJtaW5hdGVkCisKKzIwMTAtMDYtMTUgMjE6NDIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBTdXBwcmVzcyB3YXJuaW5nczoKKyAgICdzdHJ1Y3Qgbmxtc2doZHIgZGVmaW5lZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3QnIGFuZAorICAgJ2Z1bmN0aW9uIF9sb2FkX3Y2IGRlY2xhcmVkIGJ1dCBuZXZlciBkZWZpbmVkJworCisyMDEwLTA2LTE1IDIxOjMwICBkdHMxMgorCisgICAqICBhZ2VudC9rZXJuZWwuYywgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9wa2NzLmMsIHNubXBsaWIvc25wcmludGYuYzoKKworICAgRWxpbWluYXRlICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IiB3YXJuaW5ncyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE1IDA3OjA3ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwM2NvcHlfbndvcmRfY2xpYi5jOgorCisgICBBZGQgdGVzdCBvZiBjb3B5X253b3JkCisKKzIwMTAtMDYtMTQgMjE6MzIgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgRWxpbWluYXRlICJvdmVyZmxvdyBpbiBpbXBsaWNpdCBjb25zdGFudCBjb252ZXJzaW9uIiB3YXJuaW5ncworICAgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xNCAxNTo1MSAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBFbGltaW5hdGUgInN0cmluZyBsZW5ndGggZ3JlYXRlciB0aGFuIDUwOSIgd2FybmluZ3MgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNCAxNToxOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgRWxpbWluYXRlICJpbml0aWFsaXplciBlbGVtZW50IGlzIG5vdCBjb21wdXRhYmxlIiB3YXJuaW5ncworICAgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNCAwNToyNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSBjb3VudCBoYW5kbGVycyB0byBjb3VudCBub24tYWN0aXZlIHJvd3MgdG9vCisKKzIwMTAtMDYtMTQgMDU6MTIgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIG9ubHkgdHdlYWsgc3RvcmFnZVR5cGUgZm9yIGFjdGl2ZSByb3dzOyByZXNldCBlbnRyeSBmbGFncyB3aGVuCisgICByZW1vdmluZyBmcm9tCisgICBjZXJ0X3V0aWwgbWFwczsgd2hlbiBjcmVhdGVpbmcgcm93cyBmcm9tIGNlcnRfdXRpbCBtYXBzLCBzZXQKKyAgIHN0cmFnZXRUeXBlIHRvCisgICB2b2xhdGlsZSBpZiBub25Wb2xhdGlsZSBmbGFnIG5vdCBzZXQ7IGRvbnQgZnJlZSBjYWNoZSBpbgorICAgY2FjaGVfbG9hZCBvbiBlcnIKKworMjAxMC0wNi0xNCAwNToxMCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIG1vdmUgdGxzdG1BZGRyIHRhYmxlIGNvbmZpZyBwYXJzaW5nIHRvIGNlcnRfdXRpbDsgYWRkIGNhY2hlIHRvCisgICBtZXJnZSBjZXJ0X3V0aWwKKyAgIGFkZHJzIChhY3RpdmUpIGFuZCBub24tYWN0aXZlIHJvd3M7CisKKzIwMTAtMDYtMTQgMDU6MTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIG5vblZvbGF0aWxlIGZsYWcgdG8gdGxzdG1BZGRyIHRhYmxlOyBzZXQgY29udGFpbmVyIG5hbWU7IHNraXAKKyAgICcweCcgaW4gZnAKKworMjAxMC0wNi0xNCAwNTowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoYW5nZSBMT0dfRVJSIHRvIExPR19JTkZPIGZvciBub24tZXJyb3IgbG9nIG1zZworCisyMDEwLTA2LTEzIDIxOjAyICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20KKyAgIE1mRC1iYXNlZCBNSUIgbW9kdWxlIGNvZGUsIGFuZCBNZkQgdGVtcGxhdGUgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMiAyMTozMyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20gKG5vbi1NZkQpCisgICBNSUIgbW9kdWxlIGNvZGUuIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTIgMTA6MjYgIGR0czEyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9maWxlX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20gbGlicmFyeSwKKyAgIGFwcHMgYW5kIGFnZW50IGZyYW1ld29yaytoZWxwZXJzIGNvZGUuIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTAgMjA6MDEgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgbG9va3VwIGNlcnQga2V5cyBmb3IgdGxzIGRvbWFpbnM7IHVzZSBTRUNfTU9ERUwgZGVmaW5lIGluc3RlYWQgb2YKKyAgIGhhcmRjb2RlZAorICAgY29uc3RhbnQ7IGFkZCBTRUNfTU9ERUxfVFNNIHRvIGFsbG93ZWQgc2VjIG1vZGVscyBmb3IgbXBNb2RlbAorICAgU05NUF9WRVJTSU9OXzMKKworMjAxMC0wNi0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgorCisgICBkZWZhdWx0IHRvIHJlYWRPbmx5L2FjdGl2ZSBmb3IgYmFkIGNvbmZpZworCisyMDEwLTA2LTEwIDIwOjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWRkIGRlYnVnOyBzd2l0Y2ggdG8gU0VDX01PREVMX1RTTSBhbmQgd2FybiBpZiBvdGhlciBzZWNtb2RlIHNldCwKKyAgIGluc3RlYWQKKyAgIG9mIHNpbXBseSBsb2dnaW5nIHRoYXQgaXQgd29uJ3Qgd29yaworCisyMDEwLTA2LTEwIDE5OjU5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2hlY2sgcHRycyBiZWZvcmUgZGVyZWZlcmVuY2UKKworMjAxMC0wNi0xMCAxOTo1OCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhIG1hbmFnZW1lbnQgdG8gY2VydF91dGlsOyBpbXBsZW1lbnQKKyAgIFRBUkdFVF9BRERSCisgICBhbmQgVEFSR0VUX1BBUkFNUyBsb29rdXAgaW4gY2VydCBBUEkKKworMjAxMC0wNi0xMCAxOTo0NyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICB1cGRhdGUgc2VjIG1vZGVsIGRlZmluZSBtaXNzZWQgaW4gZWFybGllciBjaGVja2luCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgY29uZmlnIHRyYXBzZXNzIHRyYW5zcG9ydHMgb24gY3JlYXRpb247IHNpbXBsaWZ5IGlmZGVmcyBmb3IKKyAgIERJU0FCTEVfU05NUFYxCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBrc20uYywgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYXV0byBzd2l0Y2ggdG8gdjMgZm9yIChkKXRscyBzZXNzaW9ucyBpbnN0ZWFkIG9mIGxvZ2dpbmcgdGhhdAorICAgb3RoZXJzIHdvbnQKKyAgIHdvcms7IGRlZmluZSBUU00gc2VjIG1vZGVsIHdpdGggb3RoZXIgc2VjIG1vZGVsczsgY29uc2lzdGVudGx5CisgICB1c2UKKyAgIFNOTVBfU0VDX01PREVMXyogaW4gdGhlIGNvZGUsIHVzaW5nICNkZWZpbmVzIGZvciBiYWNrd2FyZHMKKyAgIGNvbXBhdGliaWxpdHkKKyAgIHcvKl9TRUNVUklUWV9NT0RFTAorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjZXJ0VG9UU046IG1vdmUgbWliIHJlbGF0ZWQgcGVyc2lzdGVuY2UgYmFjayBpbnRvIG1pYiBtb2R1bGU7CisgICBjZXJ0X3V0aWw6IGFkZCB0bHN0bVBhcmFtcyBwZXJzaXN0ZW5jZTsgdXNlIHNsaXN0IGZvciBjZXJ0IG1hcAorICAgdHlwZSBuYW1lCisgICBtYXBwaW5nOworCisyMDEwLTA2LTEwIDE5OjQ1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmcgKGNvbnN0KQorCisyMDEwLTA2LTEwIDA0OjU4ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKworICAgQWRkIG1pc3NpbmcgaW5kZW50YXRpb24gb2YgYSBkby13aGlsZSBsb29wIHRvIG1ha2UgdGhlIGNvZGUKKyAgIHJlYWRhYmxlLgorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGNvbW1lbnQgb3V0IGtleVVzYWdlIHNvIHByb3BlciBzZWxmLXNpZ25lZCBjZXJ0cyBhcmUgZ2VuZXJhdGVkCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNvbGlkaWZ5IGNlcnRpZmljYXRlIGFjY2VwdGFuY2UgZm9yIHRoZSBjbGllbnQgc2lkZQorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBhcnJheSB0eXBvCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbG9nIG9wZW5zc2wgZXJyb3JzIG9uIGFjY2VwdCBmYWlsdXJlCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZWdpc3RlciBkZWZhdWx0IHBvcnRzIGZvciB0bHMvZHRscworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvIHByb3BlciBTVE9SRSBsb2FkaW5nIG9mIHRydXN0ZWQgY2VydGlmaWNhdGVzIHJhdGhlciB0aGFuIGZpbGUKKyAgIGJhc2VkIGxvYWRpbmcKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZGVkIHR3byBuZXcgQVBJczogbmV0c25tcF9jZXJ0X3RydXN0IGFuZCBuZXRzbm1wX2NlcnRfdHJ1c3RfY2EKKworMjAxMC0wNi0wOSAyMjo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGRlZCBzdHJhaWdodCAndGxzJyB0cmFuc3BvcnQgbmFtZQorCisyMDEwLTA2LTA5IDIyOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBhZGRlZCBzdHJhaWdodCAnZHRscycgdHJhbnNwb3J0IG5hbWUKKworMjAxMC0wNi0wOCAyMTowNSAgbWFnZnIKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgSW5zdGFsbCBhZ2VudF9yZWFkX2NvbmZpZy5oIGluIDUuNiBhcyB3ZWxsLiBJdCBkaXNhcHBlYXJlZCBpbgorICAgcjE4ODQzLgorCisyMDEwLTA2LTA4IDA5OjI1ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzoKKworICAgUmVtb3ZlIChvciBhY3RpdmF0ZSkgdW51c2VkIHZhcmlhYmxlcy4KKyAgIEZpeCBtaXNuYW1lZCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKworMjAxMC0wNi0wOCAwNzoxMSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgQVBJIGNoYW5nZXMgZm9yIHByZWxpbWluYXJ5IEhBTF9iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBVQ0QgZGlzaworICAgbW9kdWxlLgorICAgKE9taXR0ZWQgZnJvbSByZXZpc2lvbiAxODkzMiBjaGVja2luKQorCisyMDEwLTA2LTA4IDA0OjE4ICByc3RvcnkKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgdXBkYXRlIG1ha2VmaWxlIGZvciBtb3ZlZCBoZWxwZXIgaGVhZGVycworCiAyMDEwLTA2LTA3IDIwOjE4ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYzoKQEAgLTIxMzAsNiArNDAzNjksMTY5IEBACiAgICBSZXZlcnRpbmcgcmV2LiAxNzYxNiwgdGhlIG5lY2Vzc2FyeSBjaGVjayBpcyBhbHJlYWR5IGluIHJldi4KICAgIDE3NDE1LgogCisyMDEwLTA2LTA2IDAzOjQ1ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBJbiBjYXNlIGV4ZWNfcHJlZml4IGlzIHVuc2V0IHRoZW4gc2V0IGl0IHRvCisgICAnJHtwcmVmaXh9JyBpbiBvcmRlciB0byBwaWNrIHVwIG92ZXJyaWRlcyBvZiAkcHJlZml4IGluIG1ha2UKKyAgIGluc3RhbGwuCisKKzIwMTAtMDYtMDQgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGRvIGEgYmV0dGVyIGpvYiBvZiB2ZXJpZnlpbmcgZmluZ2VycHJpbnRzIG9mIHJlbW90ZSBzZXJ2ZXJzCisgICBwdWxsaW5nIGZpbmdlcnByaW50cyBmcm9tIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHBsYWNlcworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIGdvIGFoZWFkIGFuZCBsb2cgb3V0cHV0IGZpbGUgZm9yIGVhc2llciBkZWJ1Z2dpbmcgaW4gZXJyb3JzCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCB0eXBvCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICByZW1vdmUgY29tbWVudCBhYm91dCByYW5kb20gYmVpbmcgaW5hZGVxdWF0ZTsgd2UncmUgZG9pbmcgdGhlCisgICBiZXN0IHdlIGNhbiBiYXNlZCBvbiB3aGF0IHdlIGhhdmUKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSBhbm90aGVyIHVzZXIgZm9yIHRlc3Rpbmcgc25tcGFwcCBkZWZhdWx0IGNlcnRpZmljYXRlCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBydW4gYSBkZWZhdWx0IHRlc3Qgd2l0aG91dCBhIGxvY2FsIGtleSB0byBlbnN1cmUgdGhlIHNubXBhcHAgdHlwZQorICAgaXMgcGlja2VkIHVwCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgbG9jYWwgaWRlbnRpdHkgYW5kIHB1bGwgaXQgZnJvbSBhCisgICBmaWxlbmFtZSBvZiB0aGUgaW5pdF9zbm1wKCkgcmVnaXN0ZXJlZCB0eXBlIG5hbWUKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBkb2MgdXBkYXRlCisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA1dW5peC50OgorCisgICB1bml4IHNvY2tldCB0ZXN0CisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwM3VkcDYudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNHRjcDYudDoKKworICAgaXB2NiB0ZXN0cworCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBtZW50aW9uIHRlc3QgbmFtZSBpcyBJUHY0CisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIGNoZWNrIHRoYXQgdHJhbnNwb3J0IHdhcyBjb25maWd1cmVkCisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgYWRkIHN1cHBvcnQgZm9yIG5ldC1zbm1wLWNvbmZpZy5oIGNoZWNrcworCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL05ldFNOTVBUZXN0VHJhbnNwb3J0LnBtLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgc29tZSBiYXNpYyB0cmFuc3BvcnQgY2hlY2tpbmcgZm9yIHBlcmw6IHVkcCBhbmQgdGNwCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvcGVybCwgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMDAxYmFzaWMudDoKKworICAgYmFzaWMgdGVzdHMgZm9yIHBlcmwKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBpbmZyYXN0cnVjdHVyZSBtb2R1bGUgZm9yIHRlc3RpbmcgcGVybCBzdXBwb3J0CisKKzIwMTAtMDYtMDMgMTU6NTYgIGR0czEyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIFBvaW50IExJQntDVVJSRU5ULEFHRSxSRVZJU0lPTn0gZG9jdW1lbnRhdGlvbiB0byB0aGUgY29ycmVjdAorICAgZmlsZS4KKyAgIFdhcm4gYWJvdXQgJ21ha2VkZXBlbmQnIHBpY2tpbmcgdXAgdGVzdGluZyBtb2R1bGUgY29kZS4KKyAgIEVtcGhhc2lzIHVwZGF0ZSBvZiAnZG93bmxvYWQuaHRtbCcgcGFnZQorICAgTWVudGlvbiB1cGRhdGUgb2YgT2ZmaWNpYWwgUGF0Y2hlcworICAgU3VwcHJlc3MgYnJva2VuIGNvbW1hbmRzCisKKzIwMTAtMDYtMDMgMTU6MTYgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaCwgYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaDoKKworICAgUHJlbGltaW5hcnkgSEFMX2Jhc2VkIGltcGxlbWVudGF0aW9uIG9mIFVDRCBkaXNrIG1vZHVsZS4KKyAgIEVuc3VyZXMgY29uc2lzdGVudCByZXBvcnRpbmcgYmV0d2VlbiBVQ0QgYW5kIEhvc3RSZXMgRlN5cyB1c2FnZQorICAgYW5kIGV4dGVuZHMgJ3NraXBORlNJbkhvc3RSZXNvdXJjZXMnIGNvbmZpZyB0byBVQ0QgZGlzayBzdGF0cy4KKworMjAxMC0wNi0wMyAxNToxMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYzoKKworICAgRml4IGJyb2tlbiBzaXplIGNhbGN1bGF0aW9ucy4KKyAgIFN1cHBvcnQgNjQtYml0IHNpemUvdXNhZ2UgdmFsdWVzLgorCisyMDEwLTA2LTAyIDE0OjUyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIC0td2l0aC1jYSBpbnN0ZWFkIG9mIC0tY2EKKworMjAxMC0wNi0wMiAxNDo1MSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSB0aGUgbmV3IC1icmllZiBvcHRpb24gZm9yIGZpbmdlcnByaW50IGNhcHR1cmluZworCisyMDEwLTA2LTAyIDE0OjQwICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IC0td2l0aC1jYSBoYW5kbGluZywgZml4IENBIG5ld2NlcnRzIGJvb2trZWVwaW5nCisKIDIwMTAtMDYtMDIgMTA6NTcgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAgIApAQCAtMjEzOCw2ICs0MDU0MCw3MyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gcGFyc2luZyBPSURzCiAgICBpbiBjb25maWcgZmlsZXMuCiAKKzIwMTAtMDYtMDIgMDA6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBjaGVjayB0aGF0IENBIGNlcnRpZmljYXRlcyBjcmVhdGVkIGFmdGVyIHNubXBkIHN0YXJ0cyBhcmUgc3RpbGwKKyAgIHVzYWJsZTsgY2hlY2sgYWxsIG91dHB1dCBmaW5nZXJwcmludHMgdG8gZW5zdXJlIHRoZXkgd2VyZQorICAgcHJvcGVybHkgY3JlYXRlZAorCisyMDEwLTA2LTAyIDAwOjIzICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZCBtaXNzaW5nIGRpcmVjdG9yeSBhbmQgZmlsZSBzdWZmaXggdG8gY2EgaW52b2NhdGlvbnMKKworMjAxMC0wNi0wMiAwMDoyMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGNoZWNrIHRoYXQgY2VydGlmaWNhdGUgb3V0cHV0IGZpbmdlcnByaW50cyB3ZXJlIGZvdW5kCisKKzIwMTAtMDYtMDIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgdHdvIG5ldyBmdW5jdGlvbnMgZm9yIHZhbHVlIGNvbXBhcmlzb24gdGVzdCBvdXRwdXQKKworMjAxMC0wNi0wMiAwMDoxNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICByZW1vdmUgbm8tbG9uZ2VyLXVzZWQgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG9rZW4gc3BlY2lmaWVyICh3ZQorICAgcmVxdWlyZSBhIGNvcHkgb2YgdGhlIGtleSkKKworMjAxMC0wNi0wMiAwMDowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICAtIGNoYW5nZWQgJ2ZpbmdlcnByaW50JyB0b2tlbiB0byBtb3JlIGdlbmVyaWMgJ2lkZW50aXR5JyBrZXl3b3JkCisgICAtIGFkZGVkIHRoZSBhYmlsaXR5IGZvciBuZXRzbm1wX2NlcnRfZmluZCB0byB0cnkgbXVsdGlwbGUgdHlwZXMKKyAgIChGUCAmIGZpbGUpCisgICAtIGFuZCBwcm92aWRlIHRlc3Qgc3VpdGUgdGVzdCBmb3IgaXQuCisKKzIwMTAtMDYtMDEgMjA6MTIgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBQZXJsIGV4dGVuc2lvbiBtb2R1bGVzIGNhbiBsb2FkIHRoZSBOZXQtU05NUAorICAgRExMcyB3aGlsZSBydW5uaW5nIHRoZSBOZXQtU05NUCByZWdyZXNzaW9uIHRlc3RzLgorCisyMDEwLTA2LTAxIDE2OjQ3ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtYWpvciB1cGRhdGUgYnVnIGZpeGVzIGFuZCBmZWF0dXJlcyAtIGludGVyYWN0aXZlIG1vZGUsIHNlcGFyYXRlCisgICBDQSBkaXJzLCBnZW4gY3NyIGZyb20gY2VydCwgZmluZ2VycHJpbnQgZGlzcGxheSAtLWJyaWVmLAorICAgZWxpbWluYXRlIHNlZCwgb3BlbnNzbC5jb25mIG92ZXJ3cml0ZSBhbmQgdGVtcGxhdGluZworCiAyMDEwLTA2LTAxIDE0OjQ4ICBidmFzc2NoZQogCiAgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKQEAgLTIxNTIsNiArNDA2MjEsNDU3IEBACiAgICAKICAgIEp1c3QgZml4aW5nIGEgc3R1cGlkIHR5cG8uCiAKKzIwMTAtMDUtMzEgMTA6NDMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogZW5hYmxlZCBVbml4IHRyYW5zcG9ydC4KKyAgIChGb3J3YXJkLXBvcnRlZCByMTg2ODcgZnJvbSB0aGUgVjUuNSBicmFuY2gpLgorCisyMDEwLTA1LTMwIDIyOjUyICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGVuYWJsZSB0byBydW4gd2l0aCBvbGRlciBQZXJsIChlLmcuIFBlcmwgNS4wMDQwNSBhcyBzaGlwcGVkIHdpdGgKKyAgIElSSVgKKyAgIDYuNSkKKworMjAxMC0wNS0zMCAyMjo0OSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBwb2xpc2ggZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTMwIDIwOjE5ICBtYWdmcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbiwgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4sICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IERvIG5vdCBsaW5rIHdpdGggbGlibmV0c25tcGhlbHBlcnMgYW55IG1vcmUgYXMKKyAgIGl0IGlzIGVtcHR5LgorCisyMDEwLTA1LTMwIDE5OjE4ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsIHNubXBsaWIvc25tcC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBVc2UgYSB2b2lkIGFyZ3VtZW50IGZvciB0aGUgZGF0YSBhcmd1bWVudCBvZgorICAgeGR1bXAuCisKKzIwMTAtMDUtMzAgMTk6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmM6CisKKyAgIENIQU5HRVM6IEJVRzogMjA1MTc0MjogYWRkZWQgbWlzc2luZyBQRVJMX1NZU19JTklUMygpIGNhbGwgKHNlZQorICAgYWxzbyBtYW4gcGVybGVtYmVkKS4KKworMjAxMC0wNS0zMCAxOToxNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyAoZnJlZSgpIGNhbGxlZCB3aXRob3V0IGJlaW5nIGRlY2xhcmVkCisgICBmaXJzdCkuCisKKzIwMTAtMDUtMzAgMTY6NTYgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IHNubXBsaWI6IERvIG5vdCByZXF1aXJlIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgaW5jbHVkZWQuCisKKzIwMTAtMDUtMzAgMTI6MDAgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLiBSZW1vdmUKKyAgIHVubmVjZXNzYXJ5IGluY2x1ZGVzLgorCisyMDEwLTA1LTMwIDA2OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvZHVtbXkuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgbGlibmV0c25tcGhlbHBlcnMgaXMgbm90IGVtcHR5IHN1Y2ggdGhhdCBidWlsZGluZworICAgTmV0LVNOTVAgb24gQUlYIGFuZCBJUklYIGlzIGFnYWluIHBvc3NpYmxlLgorCisyMDEwLTA1LTI5IDA5OjUyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODkwMjogd29ya3MgYWdhaW4gd2l0aG91dCBUQVA6Okhhcm5lc3MuCisKKzIwMTAtMDUtMjggMjM6MjMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBsb25nLWFnbyBicm9rZW4gdmVyYm9zaXR5CisKKzIwMTAtMDUtMjggMjM6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBtb3JlIHByZXZpb3VzbHkgYnJva2VuIG9wdGlvbiByZW5hbWVzOyBjaGFuZ2UgLWQgdG8KKyAgIG1hc3Rlci1kaXJlY3RvcnkgYW5kIGFkZCBhcyBhIHJlYWwgYXJndW1lbnQKKworMjAxMC0wNS0yOCAyMzowNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlOgorCisgICBtb3JlIG1pc3Npbmcgb2xkdWNkIHJlbmFtZXMKKworMjAxMC0wNS0yOCAyMjo1NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X29sZHVjZCwgCisgICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlOgorCisgICByZW5hbWVkICdvbGR1Y2QnIHRvICdzaW1wbGUnIHRvIHB1dCBhIG1vcmUgcG9zaXRpdmUgc3BpbiBvbiB0aGVtCisKKzIwMTAtMDUtMjggMjI6NTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SRUFETUUsIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgdGVzdCBzdWl0ZQorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIHJldmVydCB1bmludGVudGlvbmFuYWxseSBjb21taXR0ZWQgdGVzdCB0ZXN0CisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgZnJlZSB2YXJpYWJsZXMgYWdhaW4KKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBmaXggd2Fsa3Mgc28gdGhhdCBtdWx0aXBsZSB3YWxrcyB0ZXJtaW5hdGUgcHJvcGVybHkKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBwYXRjaCB0byBoYW5kbGUgdGVzdGluZyBvZiBsb29waW5nIG9mIG11bHRpcGxlIHZhcmJpbmRzIGluIGEgd2FsaworCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIGluaXRhbCBwYXRjaCB0byBwcmV2ZW50IGxvb3Bpbmcgd2Fsa3MKKworMjAxMC0wNS0yOCAyMDo1MyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBpbXBsZW1lbnQgY2VydCBsb29rdXAgYnkgZmlsZW5hbWUKKworMjAxMC0wNS0yOCAwNzowMiAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIGNvbnN0IGRlY2xhcmF0aW9ucyB0byB0aGUgZGlzYWJsZWQgdmVyc2lvbnMKKyAgIG9mIHRoZSBkZWJ1Z2dpbmcgY29kZSBhcyB3ZWxsLgorCisyMDEwLTA1LTI4IDAyOjEyICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBhZGQgcGVyc2lzdGVuY2U7IGNoZWNrIGZvciBjb2wgbW9kcyB3aGlsZSByb3cgYWN0aXZlCisKKzIwMTAtMDUtMjggMDI6MTEgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oOgorCisgICBDSEFOR0VTOiBhZ2VudGxpYjogbmV3IGZ1bmN0aW9ucyB0byBtYWtlIHN0YXNoIHB0ciBhbmQgbmV3cm93CisgICBhdmFpbGFibGUgdG8KKyAgIHRhYmxlX2RhdGFzZXQgaGFuZGxlcnMKKyAgIG5vbmV3czogZml4IHR5cG87IHRhYnMgdG8gc3BhY2VzOyB1c2Ugc2l6ZW9mIGluc3RlYWQgb2YgY29uc3RhbnQKKworMjAxMC0wNS0yNyAxODo1OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgV2luMzIgYnVpbGQgZml4ZXMuCisKKzIwMTAtMDUtMjcgMTg6MjQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgICJtYWtlIHRlc3QiIHdpdGhvdXQgVEFQOjpIYXJuZXNzICh3YXMgYnJva2VuIGJ5IHIxODgwMikuCisKKzIwMTAtMDUtMjcgMTU6MTUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgCisgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuIE1vc3QgZml4ZXMgaW52b2x2ZWQgYWRkaW5nIHRoZQorICAgImNvbnN0IiBrZXl3b3JkLgorCiAyMDEwLTA1LTI3IDEzOjUyICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jOgpAQCAtMjE1OSwxNTAgKzQxMDc5LDEzNTAgQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDI5NzI1Nzk6IGZpeGVkIGNoZWNraW5nIG9mCiAgICBzbm1wVGFyZ2V0QWRkclJvd1N0YXR1cyBTRVQgcmVxdWVzdHMuCiAKLTIwMTAtMDUtMjcgMDY6NDkgIGJ2YXNzY2hlCisyMDEwLTA1LTI3IDEzOjQxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1bjoKKworICAgcmV2ZXJ0IHBhcnQgb2YgMTg4ODU6IHRlc3QgZmlsZXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGJ5CisgICB0aGVtc2VsdmVzIHRvbworCisyMDEwLTA1LTI3IDExOjE5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaDoKKworICAgQ0hBTkdFUzogY29ycmVjdGx5IGNhbGN1bGF0ZSBpZlhUYWJsZS5pZkhDSW5VY2FzdFBrdHMgb24gMzItYml0CisgICBMaW51eAorICAgCisgICBMaW51eCBkb2VzIG5vdCBwcm92aWRlIHN0YW5kYWxvbmUgY291bnRlciBmb3IgaW5jb21pbmcgdW5pY2FzdAorICAgcGFja2V0cyAoaXVjYXN0KQorICAgLSBpdCBwcm92aWRlcyBjb3VudGVyIG9mIGFsbCBwYWNrZXRzIChpYWxsKSArIHNlcGFyYXRlIGNvdW50ZXIKKyAgIGZvciB0aGUgbXVsdGljYXN0CisgICBvbmVzIChpbWNhc3QpLiBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiBpZlRhYmxlIHJlYWQgdGhlc2UKKyAgIGNvdW50ZXJzIGFuZAorICAgY2FsY3VsYXRlZCBpdWNhc3QgPSBpYWxsIC0gaW1jYXN0ICpiZWZvcmUqIHRoZXNlIHZhbHVlcyB3ZXJlCisgICBleHBhbmRlZCBpbnRvCisgICA2NGJpdHMuIFRoaXMgcHJvZHVjZWQgZXJyb3JzIG9uIDMyYml0IHN5c3RlbXMgd2hlbiBpYWxsCisgICBvdmVyZmxvd2VkIHRvIHplcm8gYW5kCisgICBpbWNhc3Qgd2FzIG5vemVybyAtPiBpdWNhc3QgZ290IG5lZ2F0aXZlIGFuZCAnYzY0IDMyIGJpdCBjaGVjaworICAgZmFpbGVkJyBlcnJvciBpbgorICAgc25tcGQgbG9nLiBOb3cgdGhlIGFnZW50IGV4cGFuZHMgdGhlc2UgdmFsdWVzIHRvIDY0Yml0cyBmaXJzdCBhbmQKKyAgICogICAgICp0aGVuKiBwZXJmb3JtcyAgICB0aGUgY2FsY3VsYXRpb24sIHVzaW5nIGEgbmV3IGZsYWcuIAorICAgICAgMjAxMC0wNS0yNyAwODoxOCAgbWFnZnIKKworCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9SVU5URVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBNb3ZlIHRoZSBzZXR0aW5nIG9mIE1JQkRJUlMgZnJvbSB0aGUgc3VwcG9ydAorICAgc2NyaXB0IHRvIHRoZSBkcml2ZXJzIHNpbmNlIGl0IGlzIG5lZWRlZCBmb3IgdGhlIEMgdGVzdHMgYXMgd2VsbC4KKworMjAxMC0wNS0yNyAwODowOSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBVc2Ugb2xkdWNkX3J1biwgbm90IHJ1bl9vbGR1Y2QuIENoYW5nZSBzcmNkaXIKKyAgIHRvIHJlZmVyIHRvIHRoZSB0b3AgZGlyZWN0b3J5IGFuZCBub3QgdGhlIHRlc3Rpbmcgc3ViZGlyZWN0b3J5IGFzCisgICB0aGF0IGlzIHdoYXQgaXMgZXhwZWN0ZWQgaW4gdGhlIHRlc3Qgc2NyaXB0cy4KKworMjAxMC0wNS0yNyAwNToxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgd2FybmluZyBzcXVhc2hpbmcKKworMjAxMC0wNS0yNyAwNToxNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgc25tcGxpYi9rZXl0b29scy5jLCAgIAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jOgorCisgICBtb3JlIGNvbnN0IGNvcnJlY3RuZXNzCisKKzIwMTAtMDUtMjcgMDQ6MTggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHRlc3RzIGZvciBhZ2VudC1ub3Qta25vd24tdXNlci1jZXJ0aWZpY2F0ZXMKKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBSRUFETUUuc25tcHYzOgorCisgICByZWZlcmVuY2UgdGhlIGl0bmVybmFsIHN1cHBvcnQgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbC9PUEVOU1NMLUxJQ0VOU0UsIHNubXBsaWIvb3BlbnNzbC9SRUFETUU6CisKKyAgIGludGVybmFsIE9wZW5TU0wgc3VwcG9ydCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgTkVXUzogbGlibmV0c25tcDogU3VwcG9ydCBmb3IgYSBzdHJlYW0tbGluZSBzdHJpcHBlZCBkb3duIHZlcnNpb24KKyAgIG9mIGludGVybmFsIE9wZW5TU0wgc3VwcG9ydCB1c2luZyAtLXdpdGgtb3BlbnNzbD1pbnRlcm5hbAorCisyMDEwLTA1LTI3IDA0OjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYywgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgsIAorICAgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHJlbW92ZSBtb3JlIGRlcGVuZGVuY2llcyBmb3IgZXh0ZXJuYWwgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MTUgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIHNubXBsaWIvb3BlbnNzbCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jLCBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGEuaCwgCisgICAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgsIHNubXBsaWIvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYywgc25tcGxpYi9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2NiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYywgc25tcGxpYi9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kMzJfY29tbW9uLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDVfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX21vZGVzLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGEuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGFfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX3Nwci5oOgorCisgICBtb3ZlIG9wZW5zc2wgY29kZSBpbnRvIGEgc3ViZGlyZWN0b3J5CisKKzIwMTAtMDUtMjcgMDQ6MTMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2Q6CisKKyAgIGZpeCB0ZXN0aW5nIHNvIGl0IHVzZXMgbXVsdGlwbGUgdHlwZXMgb2YgY3J5cHRvCisKKzIwMTAtMDUtMjcgMDQ6MTMgIGhhcmRha2VyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBkZWZpbml0aW9ucyBhbmQgZmlsZXMgZm9yIGRvaW5nIGludGVybmFsIGNyeXB0byBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICBpbmNsdWRlIGludGVybmFsIGFlcy9kZXMgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYzoKKworICAgbG9jYWxpemUKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmMsIHNubXBsaWIvb3BlbnNzbF9tb2Rlcy5oOgorCisgICBpbml0YWwgY29waWVzIG9mIGNmYjEyOCBtb2RlcyBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYzoKKworICAgbG9jYWxpemUKKworMjAxMC0wNS0yNyAwNDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYywgc25tcGxpYi9vcGVuc3NsX2Flc19sb2NhbC5oOgorCisgICBpbml0aWFsIHZlcnNpb25zIG9mIGFlc19jb3JlLmMgYW5kIGFlc19sb2NsLmgKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaDoKKworICAgaW5pdGlhbCBjb3B5IG9mIGFlcy5oIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY2ZiLmM6CisKKyAgIGluaXRpYWwgY29weSBvZiB0aGUgb3BlbnNzbCBhZXNfY2ZiLmMgZmlsZQorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmM6CisKKyAgIGluY2x1ZGUgbG9jYWxpemVkIGNvcGllcyBvZiB0aGUgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHVzZSBpbnRlcm5hbCBERVMKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2JjX2VuYy5jOgorCisgICBsb2NhbGl6ZWQgY29weSBvZiB0aGUgY2JjX2VuYy5jIGZpbGUgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX3Nwci5oOgorCisgICBkZXMvc3ByLmggZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYzoKKworICAgYWRkZWQgZGVzX2VuYy5jIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmg6CisKKyAgIGxvY2FsIGNvcGllcyBvZiB0aGUgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmg6CisKKyAgIGluaXRpYWwgY29weSBvZiBvcGVuc3NsJ3MgZGVzLmgKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYzoKKworICAgbG9jYWxpemVkIGhlYWRlciBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL29wZW5zc2xfZGVzX2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYzoKKworICAgaW5pdGFsIGNvcGllcyBvZiBzb21lIG9mIHRoZSBvcGVuc3NsIERFUyBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zY2FwaS5jOgorCisgICBmaW5pc2hpbmcgcG9ydGluZyBvZiBpbnRlcm5hbCBhdXRoIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBhZGQgaW50ZXJuYWwgY3J5cHRvIGZpbGVzIHRvIHRoZSBjaGVjay91c2UgbGlzdAorCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL21kMzJfY29tbW9uLmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1X2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhX2xvY2FsLmgsIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgbG9jYWxpemVkIGZpbGUgbmFtZXMgd2l0aCBvcGVuc3NsIHByZWZpeGVzCisKKzIwMTAtMDUtMjcgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaCwgc25tcGxpYi9tZDVfbG9jbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNS5jOgorCisgICBsb2NhbGl6ZSB0aGUgbWQ1IGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvb3BlbnNzbF9zaGEuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgY29tcGxldGVseSBsb2NhbGl6ZSB0aGUgb3BlbnNzbCBTSEEgc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9zaGEuaDoKKworICAgaW5pdGlhbCB2ZXJpc29uIG9mIHNoYS5oIGNvcHkKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL21kNV9sb2NsLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgCisgICAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgYWRkZWQgbG9jYWwgY29waWVzIG9mIHRoZSBvcGVuc3NsIGNyeXB0byBmdW5jdGlvbnMKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIG1ha2UgdXNlIG9mIGludGVybmFsIGNyeXB0byBoYXNoIGZ1bmN0aW9ucworCisyMDEwLTA1LTI3IDA0OjAzICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBjb25maWd1cmUgY2hlY2tzIGZvciBpbnRlcm5hbC1jcnlwdG8gc3VwcG9ydAorCisyMDEwLTA1LTI2IDIyOjE3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBwcm9wZXJseSB2ZXJpZnkgZXhwZWN0ZWQgc2VydmVyIGNlcnRpZmljYXRlcyB1bmRlciBEVExTOyBhZGQgYQorICAgbmV3IGZsYWcgaW4gdGxzYmFzZSB0byBpbmRpY2F0ZSB2ZXJpZmljYXRpb24gaGFzIG9jY3VycmVkCisKKzIwMTAtMDUtMjYgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgY29tcGlsZXIgd2FybmluZyBzcXVhc2hpbmcKKworMjAxMC0wNS0yNiAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgICBhZGQgY29uc3QgcXVhbGlmaWVycyB0byBhIGZldyBwbGFjZXMKKworMjAxMC0wNS0yNiAxOTo0NiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGxpYm5ldHNubXBtaWJzLCBsaWJuZXRzbm1waGVscGVycyBhbmQKKyAgIGxpYm5ldHNubXBhZ2VudCBkbyBub3cgYnVpbGQgYXMgYSBETEwgd2hlbiBjb25maWd1cmVkIHdpdGgKKyAgIC0tZW5hYmxlLXNoYXJlZC4KKworMjAxMC0wNS0yNiAxNzo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKKworICAgTkVXUzogbW92ZWQgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGxpYm5ldHNubXBoZWxwZXJzIHRvCisgICBsaWJuZXRzbm1wYWdlbnQuIGxpYm5ldHNubXBoZWxwZXJzIGlzIG5vdyBhbiBlbXB0eSBsaWJyYXJ5LgorCisyMDEwLTA1LTI2IDE3OjIwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9udWxsLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9udWxsLmMsICAgCisgICAgICBhZ2VudC9vbGRfYXBpLmM6CisKKyAgIFJldmVydGVkIHIxODgyOSBpbiBvcmRlciB0byBtaW5pbWl6ZSBkaWZmcyB3aXRoIG9sZGVyIGJyYW5jaGVzLgorCisyMDEwLTA1LTI1IDA3OjIzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgVGVsbCBuZXQtc25tcC1jZXJ0IHdoZXJlIG5ldC1zbm1wLWNvbmZpZyBpcyBsb2NhdGVkCisKKzIwMTAtMDUtMjUgMDc6MTQgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBDb3JyZWN0IHRoZSBzaWduYXR1cmUgb2YgbWFpbi4gVXNlICNpbmNsdWRlIGluc3RlYWQgb2Ygc291cmNpbmcKKyAgIHRvIGdldCB0aGUgY29kZSB1bmRlciB0ZXN0IGluIG9yZGVyIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMKKworMjAxMC0wNS0yNSAwNzoxMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBBZGQgYXJndW1lbnRzIHRvIHNwcmludGYgc3RhdGVtZW50cyB0byBtYWtlIHRoZSB0ZXN0IHdvcmsKKworMjAxMC0wNS0yNSAwNzowNyAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGFuZCBkaXNhYmxlZCBjb2RlCisKKzIwMTAtMDUtMjUgMDU6MjAgIG1hZ2ZyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogU3BsaXQgc25tcElQQmFzZURvbWFpbiBhbmQgbW92ZSB0aGUgSVB2NCBwYXJ0cworICAgdG8gSVB2NEJhc2UgYW5kIHRoZSBzb2NrZXQgZ2VuZXJpYyBwYXJ0cyB0byBTb2NrZXRCYXNlLgorCisyMDEwLTA1LTI0IDIwOjI0ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmc7IGZpbmlzaCB0bHN0bVBhcmFtc1RhYmxlIGxhc3RDaGFuZ2VkIHNjYWxhcgorCisyMDEwLTA1LTI0IDE5OjI4ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIEFkZCAtLWV4dGVybmFsLWxpYnMgaW4gb3JkZXIgdG8gc3VwcG9ydCBidWlsZGluZyB0aGUgdGVzdHMgb24KKyAgIHNvbGFyaXMKKworMjAxMC0wNS0yNCAxMzozMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGFyZ2guLiBmaXggZmFsbG91dCBmcm9tIG1hbnVhbGx5IChtaXMpYXBwbHlpbmcgcGF0Y2gKKworMjAxMC0wNS0yNCAxMjo1OSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGZpcnN0IHBhc3MgYXQgdGxzdG1QYXJhbXNUYWJsZQorCisyMDEwLTA1LTI0IDEyOjU5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgdXBkYXRlIGRlZmluZXMgdG8gbWF0Y2ggTUlCIG5hbWVzLCBwZXIgZ3JhbmQtcG9vYmFoCisKKzIwMTAtMDUtMjQgMTI6NTggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYzoKKworICAgdXBkYXRlIE9JRCB0byBtYXRjaCB1cGNvbWluZyBSRkMKKworMjAxMC0wNS0yNCAxMTo0OCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbnVsbC5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvbnVsbC5jLCAgIAorICAgICAgYWdlbnQvb2xkX2FwaS5jOgorCisgICBDSEFOR0VTOiBsaWJuZXRzbm1wYWdlbnQsIGxpYm5ldHNubXBoZWxwZXJzOiBtb3ZlZCB0aGUgZnVuY3Rpb25zCisgICBuZXRzbm1wX2J1bGtfdG9fbmV4dF9maXhfcmVxdWVzdHMoKSwKKyAgIG5ldHNubXBfZ2V0X2J1bGtfdG9fbmV4dF9oYW5kbGVyKCksIG5ldHNubXBfcmVnaXN0ZXJfbnVsbCgpLAorICAgbmV0c25tcF9yZWdpc3Rlcl9udWxsX2NvbnRleHQoKSBhbmQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKyAgIGZyb20gbGlibmV0c25tcGhlbHBlcnMgdG8gbGlibmV0c25tcGFnZW50LgorICAgTm90ZXM6CisgICAtIFRoaXMgZG9lcyBub3QgYWZmZWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBhcHBsaWNhdGlvbnMKKyAgIHRoYXQgbGluayB3aXRoICQobmV0LXNubXAtY29uZmlnIC0tYWdlbnQtbGlicykgc2luY2UgdGhpcworICAgaW52b2x2ZXMgbGlua2luZyB3aXRoIGJvdGggbGlibmV0c25tcGhlbHBlcnMgYW5kIGxpYm5ldHNubXBhZ2VudC4KKyAgIC0gRnVuY3Rpb25zIGhhdmUgYmVlbiBtb3ZlZCBiZXR3ZWVuIGxpYnJhcmllcyBieSBtb3ZpbmcgZW50aXJlCisgICBzb3VyY2UgZmlsZXMuCisKKzIwMTAtMDUtMjQgMTA6MTAgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOgorCisgICBVc2UgcHJvcGVyIHN0cmluZyBzaXplcyBhbmQgbWFrZSBzdXJlIHN0cmluZ3MgYXJlCisgICB6ZXJvLXRlcm1pbmF0ZWQuCisKKzIwMTAtMDUtMjQgMDg6MDEgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCBuZXQtc25tcC1jb25maWcuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGxpYm5ldHNubXAgZG9lcyBub3cgYnVpbGQgYXMgYSBETEwgd2hlbgorICAgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKyAgIENIQU5HRVM6IEN5Z3dpbjogcGVybCBtb2R1bGVzIGRvIG5vdyBidWlsZCAoLS13aXRoLXBlcmwtbW9kdWxlcykuCisgICBOb3RlOiB0aGUgVDA2MHRyYXBkcGVybF9vbGR1Y2QsIFQwNjFhZ2VudHBlcmxfb2xkdWNkIGFuZAorICAgVDExNWFnZW50eHBlcmxfb2xkdWNkIHRlc3RzIHN0aWxsIGZhaWwuCisKKzIwMTAtMDUtMjMgMjM6MDYgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgdXBkYXRlIGZpbGVuYW1lcy9wYXRzaCBmb3IgcmVjZW50IGZpbGUgcmVuYW1lczsgZml4IHR5cG9zCisKKzIwMTAtMDUtMjMgMjI6MDggIG1hZ2ZyCisKKyAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIHRoZSBzYW1lIGNvbXBpbGVyIGNvbW1hbmQgYW5kIGZsYWdzIGZvcgorICAgYnVpbGRpbmcgb2YgdGVzdHMgYXMgZm9yIGJ1aWxkaW5nIG9mIHRoZSBjb2RlLCB0aHVzIGVuYWJsaW5nIHRlc3QKKyAgIG9mIGUuZy4gMzItYml0IGNvZGUgY29tcGlsZWQgb24gYSA2NC1iaXQgcGxhdGZvcm0uCisKKzIwMTAtMDUtMjMgMjE6NDEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgdXBkYXRlIGluY2x1ZGUvY29uZmlnIGZpbGUvcGF0aHMgZm9yIHJlY2VudCByZW5hbWVzCisKKzIwMTAtMDUtMjMgMjE6MzEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgcmVuYW1lIGZpbGVzIGZvciBNSUIgcmVuYW1lcworCisyMDEwLTA1LTIzIDIxOjI1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlOgorCisgICByZW5hbWUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggcmVuYW1lcyBpbiBNSUIKKworMjAxMC0wNS0yMCAwODo0OCAgYnZhc3NjaGUKKworICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIFN3YXBwZWQgbGluayBvcmRlciBvZiAtbG5ldHNubXBoZWxwZXJzIC1sbmV0c25tcG1pYnM6IG5ldHNubXBtaWJzCisgICBkZXBlbmRzIG9uIG5ldHNubXBoZWxwZXJzIGFuZCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKzIwMTAtMDUtMjAgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIG1vcmUgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTkgMTg6MjYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBzdGFzaGluZworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIG91dHB1dCBmaWxlbmFtZXMgb2YgZmFpbGVkIHRlc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHdpcGUgdHJhaWxpbmcgY29tbWVudCBDIG1hcmtlciBpZiBpdCBleGlzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgdGl0bGUgdGhlIFNOTVB2MyB0ZXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggdGVzdGluZyBvZiBidWlsdCB0aXRsZXMKKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgb25seSBwcmludCBmYWlsdXJlIGhlYWRlciBpZiB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2Q6CisKKyAgIG1ha2UgZGVzY3JpcHRpdmUgdGl0bGVzIHdvcmsgYWdhaW4KKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2xpYiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgcmVuYW1lIGZpbGVzIHNvIHByZWZpeGluZyBpcyBiYXNlZCBvbiB0aGUgc3VpdGUgbmFtZSwgbm90IGZpbGUKKyAgIHR5cGUKKworMjAxMC0wNS0xOSAxNzo1MiAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vTWFrZWZpbGUuUEwsIHBlcmwvTWFrZWZpbGUuUEwsIHBlcmwvTWFrZWZpbGUuc3Vicy5wbCwgICAKKyAgICAgIHBlcmwvT0lEL01ha2VmaWxlLlBMLCBwZXJsL1NOTVAvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBwZXJsOiBidWlsZGluZyB0aGUgUGVybCBtb2R1bGVzIHdpdGggdGhlIEN5Z3dpbgorICAgUGVybCBwYWNrYWdlIGlzIG5vdyBwb3NzaWJsZS4KKyAgIChGb3J3YXJkLXBvcnRlZCByMTg2ODggZnJvbSB0aGUgVjUuNSBicmFuY2guKQorCisyMDEwLTA1LTE5IDE3OjUwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYzoKKworICAgRml4ZWQgeWV0IGFub3RoZXIgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNS0xOSAxMjowNSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBGaXJzdC1kcmFmdCBzdXBwb3J0IGZvciBBSVggZmlsZXN5c3RlbSBIQUwgbW9kdWxlICh1bnRlc3RlZCkKKworMjAxMC0wNS0xOSAxMToyNSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6CisKKyAgIFN1cHBvcnQgZm9yIFNvbGFyaXMtc3R5bGUgJ2dldG1udGVudCcgQVBJLgorCisyMDEwLTA1LTE5IDA5OjU3ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmg6CisKKyAgIFNpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiB1bmtub3duL3Vud2FudGVkIGZpbGUgc3lzdGVtcy4KKworMjAxMC0wNS0xOSAwOTozMCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBGaXggbWlzc2luZy9icm9rZW4gQVBJIGRlY2xhcmF0aW9ucy4KKworMjAxMC0wNS0xOSAwODo0NiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIE1hZGUgZXJyb3IgbWVzc2FnZXMgbW9yZSBjbGVhciBpbiBjYXNlIG9mIGZhaWx1cmUgb3Igd3JvbmcKKyAgIGludm9jYXRpb24uCisKKzIwMTAtMDUtMTkgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCB0ZXN0IGZvciB1c2luZyBhIGNlcnRpZmljYXRlIHNpZ25lZCBieSBhIENBIGNlcnRpZmljYXRlCisKKzIwMTAtMDUtMTggMjM6MzEgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBtYWtlIHN1cmUgd2UgY2FsbCB0aGUgcmlnaHQgUGVybAorCisyMDEwLTA1LTE4IDIwOjM5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogaW5jbHVkZSBsb2NhbCBwb3J0IG51bWJlciBpbiBwYWNrZXQgZHVtcHMuIEFuCisgICBleGFtcGxlOgorICAgCisgICBSZWNlaXZlZCAzNiBieXRlIHBhY2tldCBmcm9tIFVEUDoKKyAgIFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICAwMDAwOiAzMCAyMiAwMiAwMSAwMSAwNCAwNiA3MCA3NSA2MiA2QyA2OSA2MyBBMSAxNSAwMgorICAgMCIuLi4uLnB1YmxpYy4uLgorICAgMDAxNjogMDQgMzcgRjIgRDQgOUIgMDIgMDEgMDAgMDIgMDEgMDAgMzAgMDcgMzAgMDUgMDYKKyAgIC43Li4uLi4uLi4uMC4wLi4KKyAgIDAwMzI6IDAxIDAxIDA1IDAwIC4uLi4KKyAgIAorICAgUmVjZWl2ZWQgU05NUCBwYWNrZXQocykgZnJvbSBVRFA6CisgICBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgR0VUTkVYVCBtZXNzYWdlCisgICAtLSBjY2l0dC4xCisgICAKKyAgIFNlbmRpbmcgMTE4IGJ5dGVzIHRvIFVEUDogWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIDAwMDA6IDMwIDc0IDAyIDAxIDAxIDA0IDA2IDcwIDc1IDYyIDZDIDY5IDYzIEEyIDY3IDAyCisgICAwdC4uLi4ucHVibGljLmcuCisgICAwMDE2OiAwNCAzNyBGMiBENCA5QiAwMiAwMSAwMCAwMiAwMSAwMCAzMCA1OSAzMCA1NyAwNgorICAgLjcuLi4uLi4uLi4wWTBXLgorICAgMDAzMjogMDggMkIgMDYgMDEgMDIgMDEgMDEgMDEgMDAgMDQgNEIgNEMgNjkgNkUgNzUgNzgKKyAgIC4rLi4uLi4uLi5LTGludXgKKyAgIDAwNDg6IDIwIDYxIDczIDc1IDczIDIwIDMyIDJFIDM2IDJFIDMzIDMzIDJFIDMyIDJEIDczIGFzdXMKKyAgIDIuNi4zMy4yLXMKKyAgIDAwNjQ6IDYzIDczIDc0IDIwIDIzIDMxIDIwIDUzIDREIDUwIDIwIDUwIDUyIDQ1IDQ1IDREIGNzdCAjMSBTTVAKKyAgIFBSRUVNCisgICAwMDgwOiA1MCA1NCAyMCA1MyA2MSA3NCAyMCA0MSA3MCA3MiAyMCAzMyAyMCAzMiAzMSAzQSBQVCBTYXQgQXByCisgICAzIDIxOgorICAgMDA5NjogMzEgMzAgM0EgMzUgMzggMjAgNDMgNDUgNTMgNTQgMjAgMzIgMzAgMzEgMzAgMjAgMTA6NTggQ0VTVAorICAgMjAxMAorICAgMDExMjogNzggMzggMzYgNUYgMzYgMzQgeDg2XzY0CisKKzIwMTAtMDUtMTggMTk6NDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdGxzdG1BZGRyVGFibGUKKyAgIC0gZGVhbCB3aXRoIGhhc2ggdHlwZSBwcm9wZXJseSBmb3IgZ2V0L3NldCBhbmQgcGVyc2lzdGVuY2UKKyAgIC0gYWRkIGNvdW50IGFuZCBsYXN0IGNoYW5nZWQgc2NhbGFycworCisyMDEwLTA1LTE4IDE5OjA4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYzoKKworICAgdXBkYXRlIHRvIG9mZmljYWwgT0lEIGZyb20gdXBjb21pbmcgcmZjCisKKzIwMTAtMDUtMTggMTY6MTYgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRvIG9mZmljaWFsIE9JRHMgZnJvbSB1cGNvbWluZyBSRkM7IGFkZCBjb3VudC9sYXN0IGNoYW5nZWQKKyAgIHNjYWxhcnMKKworMjAxMC0wNS0xOCAxNDo1NiAgZHRzMTIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyMDAxNjU2OiBIYW5kbGUgbnVsbC10ZXJtaW5hdGlvbiBvZgorICAgc3RyaW5nIHZhbHVlcyBwcm9wZXJseS4KKyAgIEJhc2VkIG9uIHRoZSBwcmluY2lwbGVzIG9mIHRoZSBwYXRjaCBmcm9tIFRvbW15IEJlYWRsZS4KKworMjAxMC0wNS0xOCAxNDozOCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgsIGFnZW50L21pYmdyb3VwL2hvc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBXb3JraW5nKD8pIEhBTC1iYXNlZCB2ZXJzaW9uIG9mIGhyRlNUYWJsZS4KKworMjAxMC0wNS0xOCAxNDoxMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNS0xNyAyMTowMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaDoKKworICAgdXNlIHByb3BlciBUU00gc2VjdXJpdHkgY29kZSAoNCkgbm93IHRoYXQgaXQncyBvZmZpY2lhbAorCisyMDEwLTA1LTE3IDE4OjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBiZWdpbm5pbmcgb2YgYSBjb250YWluZXIgdW5pdCB0ZXN0CisKKzIwMTAtMDUtMTcgMTg6NDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaDoKKworICAgYSBiYXNpYyBDLWNvZGUgYmFzZWQgdGVzdCByZXBvcnRpbmcgbWVjaGFuaXNtCisKKzIwMTAtMDUtMTcgMTg6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBiYXNpYyBkZWZhdWx0X3N0b3JlIHRlc3RzCisKKzIwMTAtMDUtMTcgMTg6NDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jbGliOgorCisgICBhIGJ1aWxkIHN5c3RlbSBmb3IgYmFzaWMgbGlibmV0c25tcCB0ZXN0cworCisyMDEwLTA1LTE3IDE4OjE0ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgZml4IGZpbmdlcnByaW50IGJpbi9oZXggY29udmVyc2lvbjsgYWRkL3JlbW92ZSBjZXJ0IHNlYyBtYXBzIHZpYQorICAgbWliIG5vdyB3b3JrcworCisyMDEwLTA1LTE3IDE4OjEzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBuZXcgZnVuY3Rpb24gbmV0c25tcF9iaW5hcnlfdG9faGV4CisKKzIwMTAtMDUtMTcgMTg6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmcHJpbnRmKHN0ZGVyciAtPiBERUJVR01TR1RMKCgKKworMjAxMC0wNS0xNyAxODoxMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBjaGVjayBmb3IgaGFzaCB0eXBlCisKKzIwMTAtMDUtMTcgMTY6MzQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgbWFrZSBSVU5URVNUUyB3b3JrIG91dHNpZGUgdGhlIHNvdXJjZWRpcgorCisyMDEwLTA1LTE3IDE1OjM3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIG1hZGUgYSBsaW1pdGVkIHJ1biB0ZXN0IHBvc3NpYmxlIGFnYWluIHdpdGhvdXQgcGVybAorCisyMDEwLTA1LTE3IDE1OjMyICBkdHMxMgorCisgICAqICB3aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgsIHdpbjMyL21pYl9tb2R1bGVfaW5pdHMuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBVc2UgbmV3ZXIgRGlzTWFuIEV2ZW50IE1JQiBjb2RlIGZvciBNU1ZDLWJhc2VkIGJ1aWxkcworICAgKGluIGxpbmUgd2l0aCBhbGwgY29uZmlndXJlLWJhc2VkIGJ1aWxkcykKKworMjAxMC0wNS0xNyAxNToyMyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSB0aGUgcmV0dXJuIG91dHNpZGUgdGhlIGlmIHN0YXRlbWVudAorCisyMDEwLTA1LTE3IDE1OjE4ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBQcm92aWRlIG1pc3NpbmcgcHVibGljIGludGVyZmFjZSB0byBIQUwtYmFzZWQgZmlsZXN0b3JlIG1vZHVsZS4KKworMjAxMC0wNS0xNyAxMDo0MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4NzU0IChyZXZlcnQgcjE4NzM4KTogcjE4NzU0IG9ubHkgcGFydGlhbGx5CisgICByZXZlcnRlZCByMTg3MzgKKyAgIGFuZCBoZW5jZSBicm9rZSB0aGUgV2luMzItYnVpbGQuIEZpbmlzaGVkIHJldmVyc2FsIG9mIHIxODczOCBieQorICAgcmVzdG9yaW5nCisgICB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmguCisKKzIwMTAtMDUtMTYgMTg6MTcgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODcyNjogb25seSBwYXNzIC1mc3RhY2stcHJvdGVjdG9yKiBmbGFncyB0byB0aGUKKyAgIGxpbmtlciBpbnN0ZWFkIG9mIGFsbCAtZiogZmxhZ3Mgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcyBsaWtlbHkKKyAgIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gY2F1c2VzIHRyb3VibGUgd2l0aCBub24tR05VIHRvb2xjaGFpbnMuCisKKzIwMTAtMDUtMTYgMTg6MTQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZDoKKworICAgTWFkZSBzaGVsbCBjb2RlIGZvciBjb252ZXJ0aW5nIGEgcmVsYXRpdmUgcGF0aCB0byBhbiBhYnNvbHV0ZQorICAgcGF0aCBtb3JlCisgICByb2J1c3QgYW5kIGNvbnZlcnRlZCAiJHsuLi4jLi4ufSIgY29uc3RydWN0IGludG8gZWNobyArIGN1dC4KKworMjAxMC0wNS0xNiAxODoxMiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIE1vcmUgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUgdG8KKyAgIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRSBzdWJzdGl0dXRpb25zLCBuZWNlc3NhcnkgdG8gbWFrZQorICAgdGVzdCAwNTkgYW5kIDA2NSBwYXNzLgorCisyMDEwLTA1LTE2IDE3OjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIGZpeCB0ZXN0cyBmb3IgY2hlY2tpbmcgc2h1dGRvd24gb2YgYXBwbGljYXRpb25zIHRvIG5vdCByZXBvcnQKKyAgIGZhbHNlIG5lZ2F0aXZlcworCisyMDEwLTA1LTE2IDEyOjE1ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2Q6CisKKyAgIE1hZGUgdGVzdCBUMDU5IHBhc3MgYWdhaW4uIFRoaXMgdGVzdCB3YXMgcmVjZW50bHkgYnJva2VuIGJ5CisgICBwYXNzaW5nIGFyZ3VtZW50cyB0byBpdCB3aXRoIGFic29sdXRlIHBhdGhzIGluc3RlYWQgb2YgcmVsYXRpdmUKKyAgIHBhdGhzLgorCisyMDEwLTA1LTE2IDEyOjE0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZDoKKworICAgQWRkZWQgJ1NLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUnLgorCisyMDEwLTA1LTE2IDExOjQyICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xNiAxMTo0MSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFwcHMvc3NodG9zbm1wLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gb2xkIGNvZGUuCisKKzIwMTAtMDUtMTYgMDk6NTkgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKLSAgIENIQU5HRVM6IHdpbkV4dERMTDogY29udmVydCBhc3NlcnQoKSBzdGF0ZW1lbnRzIGludG8KLSAgIG5ldHNubXBfYXNzZXJ0KCkgc3RhdGVtZW50cy4KKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGRvbid0IHRyaWdnZXIgYSBuZXRzbm1wX2Fzc2VydCgpIHdoZW4KKyAgIG5vIGV4dGVuc2lvbiBETExzIGhhdmUgYmVlbiBsb2FkZWQuCiAKLTIwMTAtMDUtMjMgMjE6MDcgIGR0czEyCisyMDEwLTA1LTE1IDE3OjMxICB0YW5kZXJzCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIHN0b3AtZ2FwIGZpeCB0byB1bmJyZWFrICJtYWtlIHRlc3QiIGZvciB0aGUgbmlnaHRseSBidWlsZHMKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2hhbmdlczogVjUuNC4yIC0+IFY1LjQuMworMjAxMC0wNS0xNSAxMDo1OSAgYnZhc3NjaGUKIAotMjAxMC0wNS0yMyAyMDo0MiAgZHRzMTIKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgIFJldmVydGVkIHIxODcyNyBiZWNhdXNlIGl0IGNhdXNlZCBidWlsZCBlcnJvcnMgb24gU29sYXJpcywgQUlYCisgICBhbmQgSFAtVVguCiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisyMDEwLTA1LTE1IDAwOjQyICBoYXJkYWtlcgogCi0yMDEwLTA1LTIzIDIwOjM5ICBkdHMxMgorICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsOgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgIHJldmVydCByMTg3Mzggc2luY2UgbmV3IHRyYW5zcG9ydCByZXF1aXJlIGR5bmFtaWNseSBidWlsdCBoZWFkZXIKKyAgIGZpbGVzCiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorMjAxMC0wNS0xNSAwMDo0MCAgaGFyZGFrZXIKIAotMjAxMC0wNS0xNCAxMjo0NiAgZHRzMTIKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgbG9nIGVudiB2YXJpYWJsZXMgdXNlZCB0byB0aGUgaW52b2tlZCBmaWxlCiAKLSAgIHZlcnNpb24gdXBkYXRlCisyMDEwLTA1LTE0IDIxOjI5ICBoYXJkYWtlcgogCi0yMDEwLTA1LTE0IDEyOjQxICBkdHMxMgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CiAKLSAgICogQ2hhbmdlTG9nOgorICAgZml4IHNjcmlwdCBzbyBpdCBjYW4gYmUgaW52b2tlZCBvdXRzaWRlIHRoZSB0ZXN0IGVudmlyb25tZW50CisgICBhZ2FpbgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorMjAxMC0wNS0xNCAyMToyOCAgaGFyZGFrZXIKIAotMjAxMC0wNS0xNCAxMjoyOCAgZHRzMTIKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0OgogCi0gICAqIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorICAgYWRkZWQgdGhlIFNOTVAtVExTLVRNLU1JQiB3aXRoIGZpbmFsIElBTkEgYXNzaWdubWVudCBzbG90cwogCi0gICBtYWtlIGRlcGVuZAorMjAxMC0wNS0xNCAyMToyNyAgaGFyZGFrZXIKIAotMjAxMC0wNS0xNCAxMjoxOSAgZHRzMTIKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICB1c2UgZmluYWwgSUFOQSBhc3NpZ25lZCBUU00gcHJlZml4ZXMKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKzIwMTAtMDUtMTQgMjE6MjYgIGhhcmRha2VyCiAKLTIwMTAtMDUtMTQgMTI6MTAgIGR0czEyCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg6CiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgIHVzZSBmaW5hbCBJQU5BIGFzc2lnbmVkIERvbWFpbiBudW1iZXJzCiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorMjAxMC0wNS0xNCAyMToyNSAgaGFyZGFrZXIKIAotMjAxMC0wNS0xMSAxNzoyNiAgYnZhc3NjaGUKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2V0IGRlZmF1bHQgdmVyc2lvbiBhbmQgc2VjbGV2ZWwgaWYgdGxzL2R0bHMKKworMjAxMC0wNS0xNCAxNToyNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoZWNrIHJjIGZyb20gc2VjbmFtZSBtYXBwaW5nOyBjbGFyaWZ5IGNvbW1lbnQKKworMjAxMC0wNS0xNCAxNToyMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG9uJ3QgdXNlIHVuc29ydGVkIGNvbnRhaW5lcjsgZG9uJ3QgZnJlZSBjYWxsZXIncyBjb250YWluZXIKKworMjAxMC0wNS0xNCAxNToyMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIGFkZCBsaW5lYXJfc2VhcmNoIGZvciB1bnNvcnRlZCBjb250YWluZXJzCisKKzIwMTAtMDUtMTQgMTE6NTYgIGJ2YXNzY2hlCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbCwgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBJbXByb3ZlZCBwb3J0YWJpbGl0eSBieSByZW1vdmluZyB0aGUgZ2VuZXJhdGVkIGZpbGUKKyAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oLgorICAgQ29tbWVudGVkIG91dCB0aGUgY29kZSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBmb3IgZ2VuZXJhdGluZworICAgdGhpcyBoZWFkZXIgZmlsZS4KKyAgIEFkZGVkIGNvbmZpZ3VyZS10aW1lIGNvZGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbnN0cnVjdG9ycworICAgZm9yIGFsbCBjb25maWd1cmVkCisgICB0cmFuc3BvcnRzIGFyZSBpbnZva2VkIGZyb20gc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLgorCisyMDEwLTA1LTE0IDExOjAwICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgRG9jdW1lbnRhdGlvbjogdXBkYXRlZCBDeWd3aW4gYnVpbGQgaW5zdHJ1Y3Rpb25zLgorCisyMDEwLTA1LTE0IDA5OjE1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgIAorICAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE0IDA4OjUwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIC1uby11bmRlZmluZWQgZmxhZyB0byBsaWJyYXJ5IGxpbmsgY29tbWFuZHMgc3VjaCB0aGF0CisgICBsaWJ0b29sIGNhbiBidWlsZCBETExzIG9uIFdpbjMyLgorICAgTm90ZTogYnVpbGRpbmcgRExMcyBvbiBXaW4zMiBkb2VzIG5vdCB5ZXQgd29yayBiZWNhdXNlIG9mIHRoZQorICAgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICBsaWJuZXRzbm1waGVscGVycyBhbmQgbGlibmV0c25tcGFnZW50CisgICAoc2VlIGFsc28KKyAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0xpYnJhcnlfbGF5ZXJpbmcpLgorCisyMDEwLTA1LTE0IDA4OjQyICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgbGlidG9vbCBidWcgZml4OiBhbHNvIHBhc3MgZmxhZ3Mgc3RhcnRpbmcgd2l0aCAtZiB0byB0aGUgbGlua2VyCisgICBzaW5jZSB0aGVzZSBjYW4gYWZmZWN0IGxpbmtpbmcuIFRoZSBmbGFnIC1mc3RhY2stcHJvdGVjdG9yIGUuZy4KKyAgIHRyaWdnZXJzIGluY2x1c2lvbiBvZiBsaWJzc3AuCisKKzIwMTAtMDUtMTQgMDg6NDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogYWJvcnQgaWYgdGhlIGZpbGUgcHJvZ3JhbSBjb3VsZCBub3QgYmUgZm91bmQsCisgICBzaW5jZSB0aGlzIGlzIGVzc2VudGlhbCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBsaWJ0b29sLgorICAgQ0hBTkdFUzogQ3lnd2luOiBuZWl0aGVyIGNvbXBpbGUgbm9yIGxpbmsgd2lucGlwZS5jLgorCisyMDEwLTA1LTEzIDA4OjU4ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmFuIGF1dG9yZWNvbmYuCisKKzIwMTAtMDUtMTIgMjA6MTYgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogTGludXg6IGJ1aWxkcyBhZ2FpbiB3aXRoIGVtYmVkZGVkIFBlcmwgZGlzYWJsZWQgKGJ1ZworICAgMjk4NTkxNSkuCisKKzIwMTAtMDUtMTIgMTk6NDcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgRm9sbG93LXVwIGZvciByMTg2ODQ6IHVuLWJyZWFrIHRoZSBXaW4zMiBNU1ZDIGJ1aWxkLgorCisyMDEwLTA1LTEyIDE5OjQzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgV2luMzI6IGZpeGVkIGEgdHlwbyBhbmQgbWFkZSBpbmRlbnRhdGlvbiBjb25zaXN0ZW50LgorCisyMDEwLTA1LTEyIDE5OjExICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjb25zdHJ1Y3QgdGVtcCBidWlsZCBmaWxlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeQorCisyMDEwLTA1LTEyIDE5OjEwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggcmVjZW50bHkgYnJva2VuIG9sZCBwZXJsIGZ1bmN0aW9uYWxpdHkKKworMjAxMC0wNS0xMiAxODowMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCBhIC0tc2hvcnQgb3B0aW9uIHRvIHNob3J0ZW4gdGhlIHNob3cgb3V0cHV0IHRvIG1pbmltYWxpc3RpYworCisyMDEwLTA1LTEyIDE0OjE0ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCLgorCisyMDEwLTA1LTEyIDEzOjAyICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgbWVtb3J5IGxlYWsgd2hlbiByZWFkaW5nIHNlbnNvcnMgZm9yCisgICBMTS1TRU5TT1JTLU1JQi4KKworMjAxMC0wNS0xMiAxMjo1NyAgZHRzMTIKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgogCi0gICBCdWlsZHMgYWdhaW4gd2l0aCB0aGUgTWljcm9zb2Z0IFZpc3VhbCBDIGNvbXBpbGVycywgd2hpY2ggZG8gbm90Ci0gICByZWNvZ25pemUgdGhlIEM5OSBVTEwgc3VmZml4LgorICAgUmV2ZXJ0IHJldmlzaW9uIDE4Njg5CisgICBMYXRlc3QgV2luMzIgYnVpbGRzIGluY2x1ZGUgc3VwcG9ydCBmb3Igc3RydG91bGwuCisKKzIwMTAtMDUtMTIgMTI6MDUgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogYWRkZWQgZGV0ZWN0aW9uIG9mIGxtX3NlbnNvcnMgdmVyc2lvbi4KKyAgIEkgYW0gbm90IEF1dG9jb25mIGd1cnUsIHNvIEkgaG9wZSBJIGdvdCBpdCByaWdodC4gVGhlIGdvYWwgaXMgdG8KKyAgIGRlZmluZSBORVRTTk1QX1VTRV9TRU5TT1JTX1YzICpiZWZvcmUqIGNvbmZpZ19tb2R1bGVzX2FnZW50CisgICBwcm9jZXNzZXMgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLgorCisyMDEwLTA1LTEyIDA3OjAzICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLgorCisyMDEwLTA1LTEyIDAzOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggdGl0bGUgZ2VuZXJhdGlvbiBhZnRlciBjaGFuZ2UgdG8gd2hhdCBzcmNkaXIgbWVhbnQKKworMjAxMC0wNS0xMiAwMjozMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICB1bmRvIGxhc3QgY2hhbmdlIHdoaWNoIHR1cm5lZCBvdXQgdG8gb25seSBjYXVzZSBlcnJvcnMgaWYgeW91IGhhZAorICAgYSBvbGQgLmNvbmYgZmlsZSBhcm91bmQKKworMjAxMC0wNS0xMiAwMjoxMyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggdjNfY2EgY3JlYXRpb24gZXh0ZW5zaW9uIG5hbWUKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAga2VlcCBmb3JtYXQgdmVyc2lvbiAjIGluIGNlcnQgaW5kZXhlczsgZG9uJ3Qgc3RvcmUgaGFzaCB0eXBlCisgICBzdHJpbmcgaW4gaW5kZXg7CisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBpbnZlcnRlZCBjb252ZXJzaW9uIGNhbGw7IGxlc3MgdmVyYm9zZSBkZWZhdWx0IGRlYnVnCisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIGZpeCBwYXJzaW5nIG9mIC1UIG5hbWUvdmFsdWUgcGFpcnMKKworMjAxMC0wNS0xMSAyMzozMyAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBidWcgZml4aW5nIGFuZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yICJtYWtlIHRlc3QiIHdpdGgKKyAgIFRlc3Q6Okhhcm5lc3MKKyAgIChzdGlsbCBkb2Vzbid0IHdvcmsgZm9yIG1lLCB0aG91Z2gpCisKKzIwMTAtMDUtMTEgMjI6MzQgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgRG8gTk9UIGhhcmRjb2RlIC91c3IvYmluL3BlcmwgYXMgdGhlIFBlcmwgcGF0aAorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggc3Rhc2ggZmlsZSBoYW5kbGluZworCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBsb25nIG9wdGlvbnMgc3VjayA7LSkuIHByZWZlciBkb3VibGUgZGFzaGVzIGZvciBsb25nIG9wdGlvbnMgdG8KKyAgIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBOZXQtU05NUCBjb2RlIGJhc2UKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYWRkZWQgYWJpbGl0eSB0byBydW4gb25seSB0aGUgZmFpbGVkIHRlc3RzIGZyb20gdGhlIGxhc3QgcnVuCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGRvbid0IGZvcmNlIGNvbG9yCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNsZWFudXAgb2Ygb2xkZXIKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgTWluaW1hbGx5IHN1cHBvcnQgdGhlIG9sZGVyIFRlc3Q6Okhhcm5lc3MgcGVybCBtb2R1bGUgZm9yIHJ1bm5pbmcKKyAgIHRoZSBvbGRlciB0ZXN0cyBhdCBsZWFzdAorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2V0IGEgZGVmYXVsdCBzZWN1cml0eU5hbWUgYW5kIHNlY3VyaXR5TW9kZWwgaWYgVExTIG9yIERUTFMgaXMgaW4KKyAgIHVzZSBvbiB0aGUgY2xpZW50IHNpZGUKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYzoKKworICAgYWxsb3cgc2VjdXJpdHkgbW9kZWxzIHRvIHBlcmZvcm0gbW9yZSBvZiB0aGUgc2Vzc2lvbiBzZXR1cDsgbW92ZWQKKyAgIG1vcmUgVVNNIHNwZWNpZmljIHNldHVwIGludG8gaXQncyBzZXR1cCByb3V0aW5lCisKKzIwMTAtMDUtMTEgMTg6MDIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggcGFyYW0gdG8gbG9va3VwIHBlZXIgY2VydAorCisyMDEwLTA1LTExIDE2OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFsbG93ICctJyBpbiBmcWRuOyBhZGQgZGVidWcgb3V0cHV0IGZvciBob3N0IHNwZWNpZmljIGNvbmZpZwogCiAyMDEwLTA1LTExIDE1OjQ2ICBkdHMxMgogCi0gICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CiAKICAgIEVuc3VyZSAnbmV0c25tcF9yZWFkX21vZHVsZScgaXMgYXZhaWxhYmxlIGZvciBwZXJsIGJ1aWxkLgogCkBAIC0yMzEyLDEyICs0MjQzMiwyMTcgQEAKIAogICAgRml4IHBlcmwgYnVpbGQgdW5kZXIgV2luZG93cyAoc3RydG91bGwgbm90IGF2YWlsYWJsZSkKIAotMjAxMC0wNS0wOSAxNjozNCAgYnZhc3NjaGUKKzIwMTAtMDUtMTAgMDc6MDcgIG1hZ2ZyCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmg6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYzoKIAotICAgQ0hBTkdFUzogQ3lnd2luOiBCVUc6IDI5OTc0OTI6IGJ5dGUgb3JkZXIgb2YgdWRwTG9jYWxQb3J0IGlzIG5vdyBjb3JyZWN0Ci0gICAoQmFja3BvcnRlZCByMTgwNzQgZnJvbSB0cnVuay4pCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbWlzc2luZyBzeW1ib2wgbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbiwKKyAgIG1ha2UgbmV0c25tcF9zbm1wU1NIRG9tYWluIGNvbnN0LgorCisyMDEwLTA1LTA5IDIyOjAzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZDoKKworICAgRG8gbm90IHJlcXVpcmUgcXVvdGVzIGFyb3VuZCB0aGUgQ1BVIHN0cmluZyBhcyB0aGF0IGRlcGVuZHMgb24KKyAgIGhvdyB0aGUgYWdlbnQgaXMgY29uZmlndXJlZC4KKworMjAxMC0wNS0wOSAyMTo0MyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBFeHRyYWN0IHRoZSBFeGl0IGFuZCByZXN0YXJ0KiBzdWJyb3V0aW5lcyBmcm9tCisgICB1dGlsX2Z1bmMgaW4gb3JkZXIgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBsZXNzIGNvZGUgZm9yIHRoZQorICAgbWluaW1hbCBjYXNlLgorCisyMDEwLTA1LTA5IDE2OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24KKyAgIGdldF9leGVjX291dHB1dCgpIHJldHVybnMgYSB2YWx1ZSB3aGVuIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCisgICBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRSBoYXMgbm90IGJlZW4gZGVmaW5lZC4KKworMjAxMC0wNS0wOSAxNjo0NSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBidWlsZHMgbm93IGFsc28gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZQorICAgbG9jYXRlZCBvbiBhIFNhbWJhIGZpbGVzeXN0ZW0gaW5zdGVhZCBvZiBhIGxvY2FsIGZpbGVzeXN0ZW0uCisKKzIwMTAtMDUtMDkgMTM6MDUgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgQ29ycmVjdCB0aGUgaWYgdGhhdCB0cmllcyB0byBmaWd1cmUgb3V0IGlmIGEgc3VmZmljaWVudGx5IG5ldyBnY2MKKyAgIGlzIGluIHVzZS4KKworMjAxMC0wNS0wOSAxMjo1MCAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDaGVjayBmb3IgdGhlIG5lZWRlZCBtb2R1bGUgYW5kIG5vdCBzb21lIG90aGVyIG9uZS4KKyAgIExvZyB0aGUgY29ycmVjdCBtaXNzaW5nIHN5bWJvbC4KKworMjAxMC0wNS0wOSAwOToyMSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiB1dGlsaXRpZXMvZXhlY3V0ZSBkbyBub3QgbmVlZCBhbnl0aGluZyBmcm9tCisgICB1dGlsX2Z1bmNzLCBzbyBzdG9wIGRlcGVuZGluZyBvbiBpdC4KKworMjAxMC0wNS0wOSAwOToxMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jOgorCisgICBORVdTOiBzbm1wZDogUmVtb3ZlZCB0aGUgdW51c2VkIGZ1bmN0aW9uIHh4X3Rva2VuaXplX2V4ZWNfY29tbWFuZAorICAgZnJvbSB1dGlsaXRpZXMvZXhlY3V0ZS4KKworMjAxMC0wNS0wOSAwOTowMSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVwbGFjZSB0aGUgZGVidWdnaW5nIGZ1bmN0aW9ucyB3aXRoIGR1bW1pZXMKKyAgIHdoZW4gZGVidWdnaW5nIGlzIGRpc2FibGVkLgorCisyMDEwLTA1LTA5IDA4OjAyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2Q6CisKKyAgIENoZWNrIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgZW5hYmxlZAorCisyMDEwLTA1LTA5IDA4OjAxICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICBGYWN0b3Igb3V0IGNoZWNrIGZvciBtaWJJSS9zeXN0ZW1fbWliCisKKzIwMTAtMDUtMDkgMDc6NTkgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluY2x1ZGVzCisKKzIwMTAtMDUtMDggMjM6MTYgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEFkZGl0aW9uYWxseSBmaXggbWFrZSB0ZXN0IGZvciB0aGUgdW5jb21tb24gY2FzZSB3aGVyZSBidWlsZGRpcgorICAgPT0gc3JjZGlyCisKKzIwMTAtMDUtMDggMjI6NTUgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSBmcm9tCisgICBhbnl3aGVyZS4KKyAgIENoYW5nZSB0aGUgLUQgb3B0aW9uIHRvIGV4cGVjdCB0aGUgcGF0aCBvZiB0aGUgdG9wIHNvdXJjZQorICAgZGlyZWN0b3J5LgorICAgQWRkIGFuIC1zcmNkaXIgb3B0aW9uIHRoYXQgaXMgYW4gYWxpYXMgZm9yIC1ELgorICAgQWRkIGFuIC1idWlsZGRpciBvcHRpb24gdG8gZGVzaWduYXRlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRlc3QKKyAgIG9iamVjdCBpcy4KKyAgIFB1dCBzcmNkaXIgYW5kIGJ1aWxkZGlyIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHRlc3Qgc2NyaXB0cworICAgRmFjdG9yIG91dCB0aGUgZ3JlcCBwYXJ0IG9mIFNLSVBJRiBhbmQgU0tJUElGTk9UIHRvIElTREVGSU5FRAorICAgVXNlIG1vcmUgcmVhZGFibGUga2V5cyBpbiB0aGUgb3B0cyBoYXNoIGluIFJVTkZVTExURVNUUworICAgQWRqdXN0IGV2ZXJ5dGhpbmcgdG8gdXNlIHNyY2RpciBhbmQgYnVpbGRkaXIKKworMjAxMC0wNS0wOCAyMjo0MiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jOgorCisgICBVc2UgY29ycmVjdCBhcmd1bWVudCB0eXBlcworCisyMDEwLTA1LTA4IDIyOjA3ICBtYWdmcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBDb25zb2xpZGF0ZSB0aGUgdGVzdCBhbmQgdGVzdC1taWJzIHRhcmdldHMuCisgICBFeHBvc2UgdGhlIHRlc3RhbGwgdGFyZ2V0IGluIHRoZSB0b3AgbWFrZWZpbGUuCisKKzIwMTAtMDUtMDggMjI6MDUgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBEbyBub3QgYWJvcnQgd2hlbiBzdHIgaXMgTlVMTCBhcyB0aGF0IGlzIGEgcGVyZmVjdGx5IHZhbGlkIGlucHV0LgorCisyMDEwLTA1LTA4IDIyOjAzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYzoKKworICAgVXNlIGNvcnJlY3QgYXJndW1lbnQgdHlwZXMKKworMjAxMC0wNS0wOCAyMjowMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIEFkZCBtaXNzaW5nIG5ld2xpbmUKKworMjAxMC0wNS0wNyAyMToxMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlOgorCisgICB1cGRhdGUgZm9yIG5ldyBjb25maWd1cmUuYWMKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBmaXggaGFuZGxpbmcgb2YgY2VydCBhbGdvcml0aG0gaW4gZmluZ2VycHJpbnRzOyBjb252ZXJ0IGluL291dAorICAgZmluZ2VycGludHMKKyAgIGZyb20vdG8gaGV4CisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBkb250IHNwZWNpZnkgaGFzaCB0eXBlIGZvciBmaW5nZXJwcmludAorCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgaGFuZGxlIGZpbmdlcnByaW50IHR5cGVzOyBkcm9wIHNhbiBmaWVsZHMgZnJvbSBjZXJ0IHN0cnVjdDsKKyAgIGNvbnNpZGVyIGRpcmVjdG9yeQorICAgd2hlbiBwYXJ0bmVyaW5nIGtleXMvY2VydHMKKworMjAxMC0wNS0wNyAxOToyMCAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLmFjOgorCisgICBtb3ZlIGRlZmF1bHQgcHJvbXB0cyBlYXJsaWVyCisKKzIwMTAtMDUtMDYgMTU6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGJldHRlciBTQU4gZXh0cmFjdGlvbjsgdHdlYWsgZHViZ3VzIG1lc3NhZ2VzOyBxdWlldCBjb21waWxlcgorICAgd2FybmluZ3MKKworMjAxMC0wNS0wNiAxNTozOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgcmVkdWNlIGNlcnQgZGVidWcgb3V0cHV0OyBkZWJ1ZyBpbnN0ZWFkIG9mIGxvZ19pbmZvIGluIGR1bXBzCiAKIDIwMTAtMDUtMDYgMTQ6NDkgIGR0czEyCiAKQEAgLTIzMjYsNzYgKzQyNjUxLDY3NSBAQAogICAgRG9uJ3QgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiA8c3RyaW5nLmg+CiAgICAoYnJpbmcgaW50byBsaW5lIHdpdGggYWxsIG90aGVyIG9jY3VyYW5jZXMpCiAKLTIwMTAtMDUtMDYgMTQ6NDQgIGR0czEyCisyMDEwLTA1LTA2IDE0OjQxICBkdHMxMgogCi0gICAqIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJzZGsuZHN3OgotCi0gICBBZGQgcHJvamVjdCBkZXBlbmRlbmNpZXMgZm9yIE1TVkMgYnVpbGRzLgotCi0yMDEwLTA1LTA2IDA2OjMzICBidmFzc2NoZQotCi0gICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvVEVTVENPTkYuc2gsICAgCi0gICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCi0gICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsOgotCi0gICBDSEFOR0VTOiBDeWd3aW46IERldGVjdCBmcmVlIFVEUCBwb3J0cyBjb3JyZWN0bHkgZm9yIHVzZSBpbiB0ZXN0IGluZnJhc3RydWN0dXJlLgotICAgKEJhY2twb3J0ZWQgdHJ1bmsgcjE4MDczIGFuZCByMTgwODApLgotCi0yMDEwLTA0LTMwIDE5OjEwICBidmFzc2NoZQotCi0gICAqICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCi0gICAgICBhcHBzL3NubXB0cmFwZF9sb2cuYywgc25tcGxpYi9jYWxsYmFjay5jOgorICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgc25tcGxpYi9jYWxsYmFjay5jOgogCiAgICBDSEFOR0VTOiBXaW5kb3dzOiBGaXggYnVpbGQgdW5kZXIgTWluR1cKKyAgIGJhY2svZm9yd2FyZCBwb3J0IG9mIHJldmlzaW9uIDE4NjMxCiAKLTIwMTAtMDQtMzAgMTg6NDQgIGJ2YXNzY2hlCisyMDEwLTA1LTA1IDE3OjQzICByc3RvcnkKIAotICAgKiBjb25maWd1cmU6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CiAKLSAgIFNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gcjE4NjI3LgorICAgZml4IHR5cGUgaW4gbG9nIG1zZwogCi0yMDEwLTA0LTMwIDE4OjI3ICBidmFzc2NoZQorMjAxMC0wNS0wNSAxNzo0MyAgcnN0b3J5CiAKLSAgICogY29uZmlndXJlLmluOgorICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgogCi0gICBtYWRlIHN1cmUgdGhhdCBjcm9zcy1jb21waWxpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBlbmRpYW5uZXNzCi0gICBkb2VzIG5vdCB0cmlnZ2VyIGEgc3ludGF4IGVycm9yIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgcmVtb3ZlIGltcG9ydCBmb3IgdW51c2VkIGZ1bmN0aW9uCiAKLTIwMTAtMDQtMjggMTA6NDggIGJ2YXNzY2hlCisyMDEwLTA1LTA0IDA3OjEyICBtYWdmcgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgogCi0gICBsZWZ0IG91dCBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkgZnJvbSBsaWJuZXRzbm1wIHNpbmNlIHRoZXNlCi0gICBmdW5jdGlvbnMgYXJlIGFscmVhZHkgcHJlc2VudCBpbiBDeWd3aW5zIEMgbGlicmFyeS4KKyAgIE5lZ2F0ZSByZWFzb24gZ2l2ZW4gZnJvbSBTS0lQSUYKIAotMjAxMC0wNC0yOCAxMDoyNiAgYnZhc3NjaGUKKzIwMTAtMDUtMDMgMjI6MzggIHJzdG9yeQogCi0gICAqIFJFQURNRS53aW4zMjoKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKIAotICAgRml4ZWQgYSBkb2N1bWVudGF0aW9uIGJ1ZyB3aXRoIHJlZ2FyZCB0byB0aGUgQ3lnd2luIGJ1aWxkOgotICAgbGlua2luZyB3aXRoIHdzMl8zMiBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgcmVhbGx5IGFuY2llbnQgQ3lnd2luIHZlcnNpb25zLgorICAgZml4IGxlbiBpbiBlbWFpbCBjbXA7IG1vcmUgZXh0cmFjdCBkZWJ1Z2dpbmcKIAotMjAxMC0wNC0yOCAwNzoyOSAgYnZhc3NjaGUKKzIwMTAtMDUtMDMgMjI6MzggIHJzdG9yeQogCi0gICAqICBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jLCAgIAotICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CiAKLSAgIENIQU5HRVM6IEN5Z3dpbjogYnVpbGRzIG5vdyB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkLgorICAgY29weSBvY2VydCB0byBhZGRpb25hbCBtYXBzCiAKLTIwMTAtMDQtMjcgMTY6NTUgIGJ2YXNzY2hlCisyMDEwLTA1LTAzIDE0OjIwICBtYXJ6CiAKLSAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAotICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CiAKLSAgIENIQU5HRVM6IFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4KKyAgIHJlbW92ZSBkZXBlbmRlbmN5IG9uIHBlcmwgbW9kdWxlIG5vdCBwcmVzZW50IGluIENlbnRPUwogCi0yMDEwLTA0LTI3IDE1OjQyICBkdHMxMgorMjAxMC0wNS0wMyAwMzo0OSAgcnN0b3J5CiAKLSAgICogIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsICAgCi0gICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbjoKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKIAotICAgUmUtaW5zdGF0ZSBOb3RpZmljYXRpb24tTG9nIE1JQiBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aAotICAgV2luZG93cyBQbGF0Zm9ybSBTREsuCisgICBkb24ndCBhY2Nlc3Mgc3RydWN0IGludGVybmFscyBkaXJlY3RseQorCisyMDEwLTA1LTAzIDAzOjQ4ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIGZpeCBjb21waWxpbmcgd2l0aC1vdXQtbWlibW9kdWxlcz11dGlsaXRpZXMvZXhlY3V0ZQorCisyMDEwLTA1LTAxIDE5OjA4ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZDoKKworICAgQ29ycmVjdCB0aGUgc291Z2h0IHN0cmluZyB0byBtYWtlIHRoZSB0ZXN0IHBhc3Mgd2hlbiBvay4KKworMjAxMC0wNS0wMSAxNzoxNSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1vcmUgY29uc2lzdGVudCB0cmVhdG1lbnQgb2Yga2V5VXNhZ2UsIGJhc2ljQ29uc3RyYWludHMsIG90aGVyCisgICB4NTA5djMgb3B0aW9ucworCisyMDEwLTA0LTMwIDIzOjM3ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsOgorCisgICBsYW1lIHRlc3Qgc2NyaXB0IGJ1dCBjb3ZlcnMgYSBjaHVuayBvZiB0aGUgY29kZQorCisyMDEwLTA0LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBta2luc3RhbGxkaXJzIGluc3RlYWQgaW5zdGVhZCBvZiBGaWxlOjpQYXRoCisKKzIwMTAtMDQtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBlbnN1cmUgbmV0LXNubXAtY29uZmlnIHNjcmlwdCBjYW4gYmUgcnVuIGZyb20gdGhlIGJ1aWxkIGRpcgorCisyMDEwLTA0LTMwIDIxOjMxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaGFuZGxlIGdlbmNlcnQgLS1jYQorCisyMDEwLTA0LTMwIDIxOjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgaGVscCBmb3IgY2VydFNlY05hbWU7IGNvbnRpbnVlIGJ1aWxkaW5nIGNlcnQgaW5kZXhlcyBldmVuIGlmCisgICB3ZSBjYW50IHNhdmUKKyAgIHRvIHBlcnNpc3RlbnQgZGlyCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCBjaGVjayBjb3VudCBmb3IgODIyIG5hbWVzIGluIHRoZSBzbm1wZC5sb2cKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IG1hbGxvYyB1bm5kZXJsZW5ndGggYnkgMSBlcnJvcgorCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBjb21tZW50IG91dCB0aGUgODIyIHRlc3RzOyB0aGV5J3JlIGJyb2tlbiBhdCB0aGUgbW9tZW50CisKKzIwMTAtMDQtMzAgMTk6MzYgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBkb24ndCBsb3NlIFNBTiB3aGVuIHNpZ25pbmcgdy8gQ0EKKworMjAxMC0wNC0zMCAxODo0NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYWtlIG5hbWUgY2hhbmdlIHRvIHJmYzgyMiBmcm9tIHR5cG9lZCA4MjIwCisKKzIwMTAtMDQtMzAgMTg6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCB0ZXN0cyB0byBkbyBvdGhlciBzdWJqZWN0QWx0TmFtZSBtYXBwaW5nCisKKzIwMTAtMDQtMzAgMTc6MzEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggaXNzdWVzIDEsMiw0IGFuZCAtQyBoYW5kbGluZworCisyMDEwLTA0LTI5IDAzOjMyICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0bHN0bUNlcnRUb1RTTlRhYmxlIHRvIHVzZSBjYWNoZSArIGNlcnRfdXRpbCBtYXBzCisgICBjb250YWluZXIKKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBjaGVjayBpbnNlcnQgcmV0dXJuCisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIHJlbW92ZSBmdW5jdGlvbiB0byBjb250YWluZXIgaXRlcmF0b3I7CisgICBpbXBsZW1lbnQgaXQgZm9yCisgICBiaW5hcnlfYXJyYXkKKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIG1ha2Ugc3VyZSBjb250YWluZXIgc3luYyBpbmNyZW1lbnRlZCBvbiBzb3J0LCBpbnNlcnQgYW5kIHJlbW92ZQorCisyMDEwLTA0LTI4IDA3OjIwICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9udG9wLmM6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgY29tbWVudC4KKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggbWFrZWZpbGUgZm9yIHRlc3QgdGFyZ2V0CisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwOgorCisgICBtYWtlIHRoZSB0ZXN0IHN1aXRlIHJ1biBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFnYWluLgorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgZGVhbCB3aXRoIG91dC1vZi1zb3VyY2UgdHJlZSBidWlsZGluZworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdGVzdGluZyB0byBjaGVjayBjZXJ0aWZpY2F0ZSB0byBzZWN1cml0eW5hbWUgbWFwcGluZ3MgYW5kIGRlbmlhbHMKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGNyZWF0ZWQgYSBtYXBwZWQgdXNlcgorCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcDoKKworICAgZ2VuZXJhdGUgb2JqZWN0IGNvZGUgd2l0aCAtZyBkZWJ1Z2dpbmcKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmM6CisKKyAgIG1vcmUgYWNjdXJhdGUgY3VycmVudCBBUEkgdXNhZ2UgZm9yIHNjYXBpIGNvZGUKKworMjAxMC0wNC0yNyAyMToxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IGNlcnQgaW5pdCBkdXBsaWNhdGUgY2FsbCBjaGVjaworCisyMDEwLTA0LTI3IDIwOjU4ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGNvbnZlcnQgdXNlciBmaW5nZXJwcmludCB0byBsb3dlciBhbmQgc3RyaXAgY29sb25zOyBhZGQgZXh0ZXJuCisgICBwcm90b3R5cGUKKyAgIGZvciBjZXJ0IGluaXQgc28gd2UgZG9uJ3QgbmVlZCBoZWFkZXIKKworMjAxMC0wNC0yNyAyMDoxNSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2VwYXJhdGUgY2VydCBpbml0IGFuZCBjZXJ0IGxvYWRpbmc7IGFkZCBjZXJ0U2VjTmFtZSBjb25maWcgdG9rZW4KKworMjAxMC0wNC0yNyAwMzoxOCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIG1lcmdlIE5FVFNOTVBfRlVOQ1RJT04gYW5kICFORVRTTk1QX0ZVTkNUSU9OIGFzc2VydCBjYXNlcworCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGxvdHMgb2YgbmV3IGNlcnQgZnVuY3Rpb25hbGl0eQorICAgLSBhZGQgc3NsIGZ1bmNzIGZvciBjZXJ0IGV4dGVuc2lvbnMgYW5kIHNzbCBjZXJ0IGNoYWlucworICAgLSBmdW5jdGlvbnMgYW5kIG5ldyBuZXRzbXBfY2VydF9tYXAgc3RydWN0IGZvciBsb29raW5nIHVwIGNlcnQKKyAgIG1hcHBpbmdzCisgICAtIGFkZCBjZXJ0aWZpY2F0ZSBtYXBwaW5nIGZvciBzZWNuYW1lCisgICAtIGFkZCBjb2RlIHRvIGJ1aWxkIGNlcnQgY2hhaW5zCisgICAtIGFkZCBzdWJqZWN0IHRvIGNlcnQgaW5kZXggY2FjaGUKKyAgIC0gcmVidWlsZCBpbmRleGVzIGlmIGFueSBlcnJvciB3aGlsZSBwYXJzaW5nIGluZGV4CisgICAtIHJlZm9ybWF0IGR1bXAgb3V0cHV0CisgICAtIGFkZCBOU19DRVJUX0NBIGFsbG93ZWRfdXNlIGZsYWcKKyAgIC0gYWRkIHN1YmplY3QsIGlzc3VlciBhbmQgaXNzdWVyX2NlcnQgdG8gbmV0c25tcF9jZXJ0CisgICAtIG1vdmUgY2VydCBjb250YWluZXIgc2V0dXAgdG8gaXRzIG93biBmdW5jdGlvbgorICAgLSBhZGQgY2VydCBzdWJqZWN0IG5hbWUgc3ViY29udGFpbmVyCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmM6CisKKyAgIG1vdmUgaXB2NiBzcGVjaWZpYyB2YXIgZGVjbCBpbnNpZGUgaWZkZWYKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IHRkYXRhIGhlbHBlciBub3cgc2F2ZXMgZmxhZ3MgcGFzc2VkIGR1cmluZworICAgY3JlYXRpb247IGFkZCB0ZGF0YQorICAgZmxhZyB0byBOT1QgY3JlYXRlIHRoZSB0YWJsZSBjb250YWluZXIKKworMjAxMC0wNC0yNyAwMzowMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgaW50ZXJmYWNlIGZvciBkdXBsaWNhdGluZyBhIGNvbnRhaW5lcgorICAgQ0hBTkdFUzogc25tcGxpYjogY29udGFpbmVyIGNoYW5nZXM6IGFkZCBmbGFncyBmaWVsZCB0byBjb250YWluZXIKKyAgIG1ldGEtZGF0YTsKKyAgIGNoZyBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHRvIHVzZSBjb250YWluZXIgbWV0YS1kYXRhIGZsYWdzCisKKzIwMTAtMDQtMjYgMjI6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIGEgdGVzdCB0byB2ZXJpZnkgdGhhdCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgY29uZmlndXJlZCB3aXRoCisgICBhIHJlbW90ZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB0aGUgY29ubmVjdGlvbiBpcyBkZW5pZWQKKworMjAxMC0wNC0yNiAyMjozMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIGFkZGVkIHRlc3RzIGZvciAtVCBmbGFnIHVzYWdlIGFuZCBpbnZhbGlkIHVzZXIgdXNhZ2UKKworMjAxMC0wNC0yNiAyMDo1NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2Q6CisKKyAgIGhhdmUgdGhlIGFsaWFzIHRyYW5zcG9ydCBzb3VyY2UgdGhlIHJpZ2h0IFN2M2NvbmZpZyBmaWxlCisKKzIwMTAtMDQtMjYgMjA6NTAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgd29ya2luZyBzdXBwb3J0IG9mIFRMUy9EVExTIHRlc3RpbmcgaW5jbHVkaW5nIGNlcnQgZ2VuZXJhdGlvbgorCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhvbm9yIHRoZSBjb25maWcgZGlyIGlmIHNwZWNpZmllZCB2aWEgLUMKKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IHJlYWxsb2MgY2FsbCBmb3IgYnVmZmVyZWQgcGFja2V0cworCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHByb3BlciBza2lwIG91dHB1dCBmb3IgcmVwb3J0aW5nIHJlYXNvbgorCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhZnRlciBiYWNrc2xhc2ggaW4gbWFjcm8KKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LnByaXYsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5jZXJ0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIucHJpdjoKKworICAgdGVzdHMgZm9yIG1pbmltYWxseSB0ZXN0aW5nIGFsbCB0aGUgdHJhbnNwb3J0cworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUkVBRE1FOgorCisgICBtaW5pbWFsbHkgZG9jdW1lbnQgbmV3IFJVTkZVTExURVNUUyBzY3JpcHQKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9ULmMsIHRlc3RpbmcvVDIuc2gsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2UtbWQ1LCAgIAorICAgICAgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEtZGVzLCAgIAorICAgICAgdGVzdGluZy9kYXRhLmt1bC1tZDUsIHRlc3RpbmcvZGF0YS5rdWwtc2hhMSwgdGVzdGluZy9taXNjdGVzdC5jLCAgCisgICAgICAgdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaCwgdGVzdGluZy90ZXN0X2t1bC5zaDoKKworICAgZGVsZXRlZCBvbGQgZmlsZXMgbm90IHdvcnRoIHJlc3RvcmluZworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZXZhbF90ZXN0bGlzdDoKKworICAgcmVtb3ZlIG9ic29sdXRlIHRlc3QgbGlzdAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYzoKKworICAgYSBoYXNoLXRlc3RpbmcgLmMgZmlsZSBJIGhhZCBsYXlpbmcgYXJvdW5kCisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgbWFrZSB0ZXN0YWxsIHRhcmdldAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9ldGltZXRlc3QuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2MywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMsIHRlc3Rpbmcvc2NhcGl0ZXN0LmM6CisKKyAgIG1vdmUgb2xkIEMtY29kZSB0ZXN0cyBpbiBwbGFjZQorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkOgorCisgICBza2lwIHNvbGFyaXMgY29tbWVudHMKKworMjAxMC0wNC0yNiAyMDo0NiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggaW52b2NhdGlvbiBvZiBSVU5GVUxMVEVTVFMKKworMjAxMC0wNC0yNiAyMDo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YxY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjJjY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2FnZW50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWd0cmFwZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N0cmFuc3BvcnQsIHRlc3RpbmcvdGVzdHMvU3YxY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjJjY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYWdlbnQsIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlndHJhcGQsIHRlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiwgdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwsIHRlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peCwgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQsIHRlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrLCB0ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAsIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LnByaXYsIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLmNlcnQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5wcml2OgorCisgICBORVdTOiB0ZXN0aW5nOiBCcmFuZCBuZXcgdGVzdCBzdWl0ZSBkZXNpZ2VuZWQgdG8gZXZlbnR1YWxseSB0ZXN0CisgICBtb3JlIGZ1bmN0aW9uYWxpdHksIHByb3ZpZGUgZm9yIHN1cHBvcnQgb2YgdW5pdC10ZXN0cyBhbmQgc3VwcG9ydAorICAgb2YgQVBJIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgcmVtb3ZlZCBhIGRlYnVnZ2luZyBlY2hvCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgbW9yZSBidWcgZml4ZXMgZm9yIHN0cmluZyBzZWFyY2hlcworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIGFkZGVkIGEgbmV3IG1hY3JvIHRvIGNoZWNrIGEgdHJhcGQgY291bnQKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICB1c2UgaW5kaXZpZHVhbCBvdXRwdXQgZmlsZXMgYW5kIGZpeCBzb21lIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgbWFkZSBleGlzdGluZyB0ZXN0IHN1aXRlIHB1dCBvdXQgVEFQIG91dHB1dAorCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9ldmFsX29uZXByb2dyYW0uc2gsIHRlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2gsICAgCisgICAgICB0ZXN0aW5nL2V2YWxfc3VpdGUuc2gsIHRlc3RpbmcvZXZhbF90b29scy5zaCwgdGVzdGluZy9mdWxsdGVzdHMsICAKKyAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBiZWdpbm5pbmcgb2YgbW92aW5nIFVDRCB0ZXN0IHN1aXRlIGludG8gYSBsYXJnZXIgc3ViZGlyZWN0b3J5CisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGFsbG93IHJ1bm5pbmcgdGVzdHMgdGhhdCBtYXRjaCBhIHJlZ2V4cAorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdW1tYXJpemUgdGVzdHMgdGhhdCBmYWlsZWQKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY3JlYXRlZCB0aGUgYWJpbGl0eSB0byBoYXZlIHJ1bl8gc2NyaXB0cyBmb3IgZXhlY3V0aW5nIGNlcnRhaW4KKyAgIHR5cGVzCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1hZGUgdGhlIGJ1aWxkLXNjcmlwdC1jaGVjayByb3V0aW5lIGdlbmVyaWMKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VwcG9ydCBmb3IgYnVpbGQgc2NyaXB0cworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBwcm92aWRlIGluZnJhc3RydWN0dXJlIGZvciBidWlsZGluZyBhbmQgcmVuYW1pbmcgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbW9yZSB0ZXN0IGluZnJhc3RydWN0dXJlIHNldHVwCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1cHBvcnQgdGhlIGtleXdvcmQgJ2FsbCcKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZW5hYmxlIGdyb3VwIGdhdGhlcmluZworCisyMDEwLTA0LTI2IDIwOjM5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjcmVhdGlubyBvZiBhIG5ldyB0ZXN0aW5nIGhhcm5lc3MKIAogMjAxMC0wNC0yNSAxNzozNyAgYnZhc3NjaGUKIApAQCAtMjQwMywzNCArNDMzMjcsNDAzIEBACiAKICAgIERvY3VtZW50YXRpb24gdXBkYXRlLgogCi0yMDEwLTA0LTIxIDExOjA1ICBidmFzc2NoZQotCi0gICAqIHNubXBsaWIvc3RydG91bGwuYzoKLQotICAgQ29waWVkIHRoZSBzb3VyY2UgZmlsZSBzbm1wbGliL3N0cnRvdWxsLmMgZnJvbSB0aGUgdHJ1bmsgdG8gdGhlCi0gICBWNS40IGJyYW5jaC4KLQotMjAxMC0wNC0xOCAxMzo0MCAgYnZhc3NjaGUKLQotICAgKiBzbm1wbGliL3dpbnBpcGUuYzoKLQotICAgQWRkZWQgI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBpbiBmaWxlCi0gICBzbm1wbGliL3dpbnBpcGUuYyBzdWNoCi0gICB0aGF0IGJ1aWxkaW5nIG9uIFdpbmRvd3MgZG9lc24ndCB0cmlnZ2VyIGEgd2FybmluZyBhYm91dAotICAgaW5jbHVkaW5nIGJvdGgKLSAgIDxzdGRhcmdzLmg+IGFuZCA8dmFyYXJncy5oPiBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZS4KLQotMjAxMC0wNC0xOCAxMzoyNCAgYnZhc3NjaGUKKzIwMTAtMDQtMjUgMTU6MjEgIGJ2YXNzY2hlCiAKICAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAogICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIFJldmVydGVkIGFub3RoZXIgY2hhbmdlIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE4NDk1IGFuZCB0aGF0J3MKLSAgIG9idmlvdXNseSBicm9rZW4uCisgICBXaW4zMjogcmV2ZXJ0ZWQgYSByZWNlbnQgdW5uZWNlc3NhcnkgbW9kaWZpY2F0aW9uLgorCisyMDEwLTA0LTI1IDE1OjAwICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaGFuZGxlIG11bHRpcGxlIC0tc2FuIGFyZ3MsIGNoZWNrIGVycm9yIGNvZGVzIG9uIG9wZW5zc2wgY21kcyBhbmQKKyAgIGRpZSBvbiBmYWlsdXJlCisKKzIwMTAtMDQtMjUgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRoIFNESyBzdXBwb3J0IGRpc2FibGVkLgorCisyMDEwLTA0LTI1IDE0OjE4ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAKKyAgICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgV2luMzI6IHJlc3RvcmVkIGNvbnNpc3RlbmN5IGJldHdlZW4gd29ya3NwYWNlLWJ1aWxkIGFuZCBiYXRjaAorICAgYnVpbGQgLS0gbWFkZSBzdXJlIHRoYXQgbm90aWZpY2F0aW9uX2xvZy5jIGlzIG9ubHkgaW5jbHVkZWQgaW4KKyAgIHRoZSBuZXRzbm1wbWlicyBwcm9qZWN0LgorCisyMDEwLTA0LTI1IDEzOjU4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgCisgICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIFdpbjMyOiBmaXhlcyBmb3IgcmVjZW50bHkgaW50cm9kdWNlZCBidWlsZCBicmVha2FnZS4KKworMjAxMC0wNC0yNSAxMzo1MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRoIFNESyBzdXBwb3J0IGRpc2FibGVkLgorCisyMDEwLTA0LTI1IDEzOjQ4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIHNubXBsaWIvY2xvc2VkaXIuYywgc25tcGxpYi9vcGVuZGlyLmMsICAKKyAgICAgICBzbm1wbGliL3JlYWRkaXIuYywgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBXaW4zMiBNU1ZDIDYgbm9uLVNESyBidWlsZCB3b3JrcyBhZ2Fpbi4KKworMjAxMC0wNC0yNSAxMzo0MiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Db25maWd1cmU6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgdHJhbnNmb3JtYXRpb24gcnVsZS4KKworMjAxMC0wNC0yNSAxMjowNSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTWFkZSBpdCBhZ2FpbiBwb3NzaWJsZSB0byBkaXNhYmxlIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIHdoZW4KKyAgIGJ1aWxkaW5nIHZpYSB3aW4zMi9idWlsZC5iYXQuCisKKzIwMTAtMDQtMjMgMTM6MTQgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCAtLXNhbiBETlM6YS5iLmMgaGFuZGxpbmcsIGhlbHAgdGV4dCBmaXhlcywgb3RoZXIgYnVnIGZpeGVzLgorICAgTm90ZSBtdWx0aXBsZSAtLXNhbiBub3Qgc3VwcG9ydGVkIHlldAorCisyMDEwLTA0LTIxIDIyOjMxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluOgorCisgICBidWlsZCB0aGUgLm1hZGUgdmVyc2lvbiBvZiBuZXQtc25tcC1jZXJ0CisKKzIwMTAtMDQtMjEgMjI6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZCBhZnRlciBtb3ZpbmcgYWxsIHRoZSBmaWxlcyBhcm91bmQKKworMjAxMC0wNC0yMSAyMDoxNiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBidWlsZCB0cnVzdCBjaGFpbiBmb3IgY2xpZW50IGNlcnQ7IGFkZCBzdWJqZWN0IHRvIGluZGV4IGNhY2hlOworICAgcmVidWlsZCBpbmRleGVzCisgICBpZiBhbnkgZXJyb3Igd2hpbGUgcGFyc2luZyBpbmRleDsgcmVmb3JtYXQgZHVtcCBvdXRwdXQKKyAgIC0gYWRkIE5TX0NFUlRfQ0EgYWxsb3dlZF91c2UgZmxhZworICAgLSBhZGQgc3ViamVjdCwgaXNzdWVyIGFuZCBpc3N1ZXJfY2VydCB0byBuZXRzbm1wX2NlcnQKKyAgIC0gbW92ZSBjZXJ0VG9UU05fZW50cnkgdG8gY2VydF91dGlsIGhlYWRlcgorICAgLSBtb3ZlIGNvbnRhaW5lciBzZXR1cCB0byBpdHMgb3duIGZ1bmN0aW9uCisgICAtIGFkZCBzdWJqZWN0IG5hbWUgc3ViY29udGFpbmVyCisgICAtIGFkZCBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMsCisgICBuZXRzbm1wX29wZW5zc2xfY2VydF9pc3N1ZWRfYnkKKworMjAxMC0wNC0yMSAxNjoxNiAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgZG9jdW1lbnQgdGhlIHNpbmdsZS1kYXNoIC8gc25tcC5jb25mIC8gZG91YmxlLWRhc2ggcHJlY2lkZW5jZQorCisyMDEwLTA0LTIxIDE2OjE1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IGluIHRoZSBzbm1wLmNvbmYgZmlsZSB0aGF0IHRoZSB0b2tlbnMgY2FuIGJlIHVzZWQgZm9yCisgICBjb21tYW5kIGxpbmUgYXBwbGljYXRpb25zIHRvbworCisyMDEwLTA0LTIxIDE2OjE1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBmaWxlIGxvYWRpbmcgb3JkZXIgYW5kIGhvdyB0byB0dXJuIG9mZiBob3N0LXNwZWNpZmljCisgICBjb25maWcKKworMjAxMC0wNC0yMSAxNTo1MiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIG1hbi9zbm1wLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTkVXUzogYXBwczogR2VuZXJpYyBob3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc25tcC5jb25mIGZpbGVzCisgICBhcmUgbm93IHJlYWQuIFNlZSB0aGUgSE9TVC1TUEVDSUZJQyBGSUxFUyBzZWN0aW9uIG9mIHRoZQorICAgc25tcC5jb25mIG1hbnVhbCBwYWdlLgorCisyMDEwLTA0LTIwIDEyOjQ0ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL2FzbjEuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI5NzEyNzA6IHJlZnVzZSB0byBwYXJzZSBBU04uMSB0b2tlbnMKKyAgIHdpdGggd3JvbmcgdHlwZSBmaWVsZC4KKyAgIFRoaXMgbWF5IHlpZWxkIHRvIHByb2JsZW1zIHdpdGggdGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHdoaWNoCisgICBtYXkgZGVwZW5kIG9uIHBhcnNpbmcgdWdseSBBU04uMSBkYXRhIC0gd2UnbGwgc2VlLi4uCisKKzIwMTAtMDQtMjAgMDA6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbWJpbmUgcmVtb3RlIGZpbmdlcnByaW50IGNoZWNraW5nIGFuZCBjaGVjayBib3RoIHNpZGVzCisKKzIwMTAtMDQtMjAgMDA6MDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBpZiB0aGUgcmVtb3RlIGZpbmdlcnByaW50IGlzIHNwZWNpZmllZCwgcmVxdWlyZSBhbiBleGFjdCBtYXRjaAorCisyMDEwLTA0LTE5IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggdmFyaW91cyBtaW5vciBidWdzLCBlc3BlY2lhbGx5IGluIG91dHB1dCBtZXNzYWdlcworCisyMDEwLTA0LTE5IDIxOjE0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBkb2N1bWVudGF0aW9uIGFuZCBwcm90b3R5cGluZyBvZiBuZWVkZWQgUkZDIHN0ZXBzCisKKzIwMTAtMDQtMTkgMjE6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY29udmVydCBpZiBlcnJvciBjaGVjayB0byByZXR1cm4gaW1tZWRpYXRlbHkgc28gb3RoZXIgY29kZSBjYW4gYmUKKyAgIG91dGRlbnRlZAorCisyMDEwLTA0LTE5IDIxOjEzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBjb21tZW50cyBmcm9tIHRoZSBSRkMgdGV4dAorCisyMDEwLTA0LTE4IDE1OjI1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi90cmFuc3BvcnRzLCAgIAorICAgICAgd2luMzIvYnVpbGQucGwsIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIAorICAgICAgICB3aW4zMi90cmFuc3BvcnRzLCB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNyZWF0ZWQgYSBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBzZWN1cml0eU5hbWUgZnJvbSB0aGUgY2VydAorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBhY2NlcHQgc3RhdGUgZm9yIFRMUyAoanVzdCBEVExTKQorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBUTFMgY29tbWVudCBkb2N1bWVudGF0aW9uIGFuZCBzdGVwcyB0YWtlbiBmcm9tIHRoZSBSRkMKKworMjAxMC0wNC0xNiAxMzo1NSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG51bWVyb3VzIGZpeGVzLCBtb3JlIHZlcmJvc2UgZGVmYXVsdCBvdXRwdXQsIGFkZGl0aXZlIHNob3cgZmxhZ3MsCisgICBhcmJpdHJhcnkgY29uZmlnIHBhcmFtIGhhbmRsaW5nLCBiZXR0ZXIgaGVscCB0ZXh0CisKKzIwMTAtMDQtMTYgMTM6MDggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGRvbid0IGRvdWJsZSBkZWNsYXJlIGEgc3RydWN0CisKKzIwMTAtMDQtMTYgMDM6MzAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNlcnQgdXRpbCBmaXhlcworICAgLSByZW1vdmUgdW51c2VkIHZhcnMgYW5kIGR1cGxpY2F0ZSBjb2RlCisgICAtIGNoZWNrIHBydCBiZWZvcmUgZnJlZQorICAgLSBuZXcgZnVuYyBmb3IgdHlwZSBmcm9tIGZpbGVuYW1lCisgICAtIG5ldyBmdW5jdGlvbnMgZm9yIGZpbmRpbmcgc3Vic2V0cyBmcm9tIGZpbGVuYW1lCisgICAtIGZpeCB0eXBlcyBpbiBrZXkgc2VhcmNoIGZ1bmN0aW9uIGJ1dCB0aGVuIGlmZGVmIGlmICh1bnVzZWQKKyAgIGZ1bmN0aW9uKQorCisyMDEwLTA0LTE1IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICB1c2UgYSBzdHJ1Y3R1cmUgcmVmZXJlbmNlIHRvIHByZWRlY2xhcmUgdGhlIHN0cnVjdHVyZQorCisyMDEwLTA0LTE1IDIxOjI1ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBjb3JyZWN0IGRlY2xhcmF0aW9uIG9mIHRoZSBmX29wZW4gY29tbWFuZCBub3cgcmVxdWlyaW5nIHJldHVybmluZworICAgYSB0cmFuc3BvcnQKKworMjAxMC0wNC0xNSAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIHVubmVlZGVkIGNvbmZpZyBjb250YWluZXIKKworMjAxMC0wNC0xNSAyMTowMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBmaW5nZXJwcmludCB0cmFuc3BvcnQgaW5mb3JtYXRpb24gaW50byBuZXcgdGxzIHN0cnVjdHVyZQorICAgd2l0aGluIERUTFNVRFAgc28gcGVyLXRyYW5zcG9ydCBmaW5nZXJwcmludHMgY2FuIGJlIHNwZWNpZmllZAorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBwcm9wZXJseSBjaGVjayBmb3IgdGxzYmFzZSBwb2ludGVycyBpbiBkdGxzdWRwX3NlbmQoKQorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBncmVwIHRoZSB0cmFuc3BvcnQgbGlzdCBmb3IgVExTIG5vdCBqdXN0IERUTFMgZm9yIGNoZWNraW5nIGZvcgorICAgLWxzc2wKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgYnVnIGZpeGVzIGFuZCBtYWRlIFRMU1RDUCB3b3JrIHdpdGggdGhlIC1UIGZsYWcKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1ha2UgdGhlIGZfb3BlbiBjYWxsIGFzc2lnbiB0aGUgbmV3IHRyYW5zcG9ydCBwb2ludGVyIHRvIHVzZSAoYW5kCisgICBjaGVjayBpZiBOVUxMIGFzIGEgZmFpbHVyZSBjb25kaXRpb24KKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmVnaW4gd29yayBtb3ZpbmcgRFRMUyBjb25maWcgcm91dGluZSBpbiBwbGFjZQorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcGFzcyB0aGUgZW50aXJlIHRsc2Jhc2UgdG8gdGhlIGNsaWVudF9zZXR1cAorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHN0YXJ0aW5nIHRoZSBzdG9yaW5nIG9mIGNvbmZpZyBkYXRhIGludG8gdGhlIHRsc2Jhc2UKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hhbmdlIGNsaWVudCBzc2wgc2V0dXAgdG8gYWxsb3cgZm9yIGRpcmVjdCBmaW5nZXJwcmludAorICAgc3BlY2lmaWNhdGlvbiBvZiBteS90aGVpciBjZXJ0cworCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzcGxpdCBUTFMgaW50byBjcmVhdGlvbi9jbG9zZSBmdW5jdGlvbnMgZm9yIGV2ZW50dWFsIGNvbmZpZworICAgcGFzc2luZyBzdXBwb3J0CisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcGFzcyB0cmFuc3BvcnQgY29uZmlnIGRhdGEgdG8gdGhlIHRyYW5zcG9ydCBmX2NvbmZpZygpIGZ1bmN0aW9uCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZXR1cm4gTlVMTCBvbiB0cmFuc3BvcnQgY29uZmlnIGVycm9yCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBORVdTOiBhcHBzOiAtVCBjb21tYW5kIGxpbmUgZmxhZyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUKKyAgIHRyYW5zcG9ydHMKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGNoZWNrIHRyYW5zcG9ydCBOVUxMbmVzcyBiZWZvcmUgdXNpbmcKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBiZWdpbm5pbmcgb2Ygd29yayB0byBtYWtlIHRyYW5zcG9ydHMgY29uZmlndXJhYmxlIHdpdGgKKyAgIHN1cHBsaW1lbnRhbCBjb25maWd1cmF0aW9uIGRhdGEgYW5kIG5ldyBjYWxscyBmb3IgZl9vcGVuL2ZfY29uZmlnCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkZWQgdGV4dCBpbiBjb21tZW50cyBmcm9tIGZ1dHVyZSBSRkMgdG8gZG9jdW1lbnQgdGhlCisgICBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA0LTE1IDE4OjUxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYXJrIHBlbSB3L2tleSBhcyBpZGVudGl0eTsgdHdlYWsgcGFydG5lciBkZWJ1ZzsgY29tcGFyZSBmaWxlCisgICBjdGltZSBhZ2FpbnN0IGluZGV4IHRvbworCisyMDEwLTA0LTE1IDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB1c2UgbG9jYWwgc3BhY2UgdG8gcmVmb3JtYXQgY2VydCBmb3Igc2VhcmNoCiAKIDIwMTAtMDQtMTUgMTY6NTUgIGJ2YXNzY2hlCiAKLSAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CiAKICAgIFBhcnRpYWxseSByZXZlcnRlZCByMTg0OTY6CiAgICAtIENvbW1lbnRlZCBvdXQgI2RlZmluZSBORVRTTk1QX1VTRV9ETEwgYWdhaW4gaW4gZmlsZQpAQCAtMjQ0NCw2ICs0MzczNyw1NSBAQAogICAgb3IgVjUuNSBicmFuY2hlcyBhbmQgaGVuY2UgdGhlcmUgd2FzIG5vIHJlYXNvbiB0byBkaXNhYmxlIHRoaXMKICAgIHByZXByb2Nlc3NvciBzeW1ib2wuCiAKKzIwMTAtMDQtMTUgMTU6MDggIG1hcnoKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbjoKKworICAgYWRkIG5ldC1zbm1wLWNlcnQgdG8gbWFrZS9pbnN0YWxsCisKKzIwMTAtMDQtMTUgMTA6NTIgIGpzYWZyYW5laworCisgICAqIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldDoKKworICAgVGVzdHMgbm90IHdvcmtpbmcgZm9yIFRDUCBzaG91bGQgYmUgc2tpcHBlZCBhbHNvIGZvciBUQ1A2LgorCisyMDEwLTA0LTE0IDE4OjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggdmFycy90ZXh0IGZyb20gY3V0LW4tcGFzdGUKKworMjAxMC0wNC0xNCAxNzo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGNvbW1lbnRzCisKKzIwMTAtMDQtMTQgMTc6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGxvdHMgb2YgY2VydCB1cGRhdGVzCisgICAtIGNoYW5nZSBjZXJ0IHN1YmRpciBzZWFyY2hpbmcgdG8gbWF0Y2ggbmV0LXNubXAtY2VydAorICAgLSB1cGRhdGUga2V5IHR5cGUgaGFuZGxpbmcKKyAgIC0gaWdub3JlIHdvcmxkIHJlYWRhYmxlIGtleXMKKyAgIC0ga2VlcCB0eXBlIGluIGluZGV4ZXMKKyAgIC0gdHdlYWsgY2VydC9rZXkgcHJpbnQgZm9ybWF0CisKKzIwMTAtMDQtMTQgMTc6NDQgIHJzdG9yeQorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1ha2UgbmV0LXNubXAtY2VydCBleGVjdXRhYmxlCisKKzIwMTAtMDQtMTQgMTM6MTIgIGpzYWZyYW5laworCisgICAqICB0ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWw6CisKKyAgIEZpeGVkIHRlc3RzICdQcm94eSBHRVQvU0VUIHN1cHBvcnQnIGFuZCAnU05NUHYyIHZhY20gZGVuaWFsCisgICBzdXBwb3J0JyB3aXRoIHVkcDYgdHJhbnNwb3J0LgorCiAyMDEwLTA0LTE0IDA5OjQ3ICBkdHMxMgogCiAgICAqICB3aW4zMiwgd2luMzIvYmluLCB3aW4zMi9kaXN0LCB3aW4zMi9kaXN0L2h0bWxoZWxwLCAgIApAQCAtMjQ1MiwxMDEgKzQzNzk0LDE3MiBAQAogICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkLCB3aW4zMi9saWJzbm1wLCB3aW4zMi9saWJzbm1wX2RsbCwgICAKICAgICAgIHdpbjMyL2xpYnVjZG1pYnMsIHdpbjMyL2xvY2FsLCB3aW4zMi9uZXQtc25tcCwgICAKICAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50LCB3aW4zMi9uZXQtc25tcC9saWJyYXJ5LCB3aW4zMi9uZXRzbm1wbWlicywgIAotICAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrLCB3aW4zMi9zbm1wYnVsa2dldCwgd2luMzIvc25tcGJ1bGt3YWxrLCAgIAotICAgICAgd2luMzIvc25tcGQsIHdpbjMyL3NubXBkZWx0YSwgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZHNkaywgICAKLSAgICAgIHdpbjMyL3NubXBnZXQsIHdpbjMyL3NubXBnZXRuZXh0LCB3aW4zMi9zbm1wbmV0c3RhdCwgICAKLSAgICAgIHdpbjMyL3NubXBzZXQsIHdpbjMyL3NubXBzdGF0dXMsIHdpbjMyL3NubXB0YWJsZSwgd2luMzIvc25tcHRlc3QsIAotICAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlLCB3aW4zMi9zbm1wdHJhcCwgd2luMzIvc25tcHRyYXBkLCAgIAotICAgICAgd2luMzIvc25tcHVzbSwgd2luMzIvc25tcHZhY20sIHdpbjMyL3NubXB3YWxrOgorICAgICAgIHdpbjMyL3NubXBidWxrZ2V0LCB3aW4zMi9zbm1wYnVsa3dhbGssIHdpbjMyL3NubXBkLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhLCB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBnZXQsIHdpbjMyL3NubXBnZXRuZXh0LCAgCisgICAgICAgd2luMzIvc25tcG5ldHN0YXQsIHdpbjMyL3NubXBzZXQsIHdpbjMyL3NubXBzdGF0dXMsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUsIHdpbjMyL3NubXB0ZXN0LCB3aW4zMi9zbm1wdHJhbnNsYXRlLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAsIHdpbjMyL3NubXB0cmFwZCwgd2luMzIvc25tcHVzbSwgd2luMzIvc25tcHZhY20sICAgCisgICAgICB3aW4zMi9zbm1wd2FsazoKIAogICAgRG9uJ3QgdHJ5IHRvIFNWTi1tYW5hZ2UgdGhlIFdpbmRvd3MgYmF0Y2ggYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKICAgIChhZGQgcmVsZWFzZSwgZGVidWcsIE1ha2VmaWxlIHRvIHRoZSBwcmV2aW91cyBpZ25vcmUgbGlzdCkKIAogMjAxMC0wNC0xNCAwODoxNiAgZHRzMTIKIAotICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgogCiAgICBGaXggV2luZG93cyBiYXRjaCBidWlsZCB1c2luZyBWaXN1YWwgU3R1ZGlvIHdpdGggZHluYW1pYyBsaW5raW5nLgogICAgVW5yZWZlcmVuY2VkIHN5bWJvbCBpbnRyb2R1Y2VkIGJ5IFNWTiByZXZpc2lvbiAxODM5MwogCi0yMDEwLTA0LTE0IDA4OjExICBkdHMxMgotCi0gICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmg6Ci0KLSAgIEZpeCBXaW5kb3dzIGJhdGNoIGJ1aWxkIHVzaW5nIFZpc3VhbCBTdHVkaW8gMjAwOCB3aXRoIFBsYXRmb3JtCi0gICBTREsgZW5hYmxlZC4KLQogMjAxMC0wNC0xNCAwODowOCAgZHRzMTIKIAotICAgKiAgd2luMzIvYnVpbGQucGwsIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsICAgCi0gICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKLSAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgogCi0gICBDSEFOR0VTOiBXaW4zMjogRml4IGJhdGNoIGJ1aWxkIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvLgorICAgQ0hBTkdFUzogV2luMzI6IEZpeCBiYXRjaCBidWlsZCB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgVmlzdWFsCisgICBTdHVkaW8uCiAgICBQYXJ0aWFsIGJhY2sgcG9ydCBvZiBTVk4gcmV2aXNpb25zIDE3NTczIGFuZCAxNzY5Ni4KIAotMjAxMC0wNC0wNyAxNDozNyAgZHRzMTIKKzIwMTAtMDQtMTQgMDE6NDcgIG1hcnoKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgZml4IHBlcm1zIG9uIGNyZWF0ZWQgZmlsZXMgLXJ3LS0tLS0tLSwgdW1hc2soMDc3KQogCi0yMDEwLTA0LTA3IDE0OjIyICBkdHMxMgorMjAxMC0wNC0xMyAyMjoxNSAgbWFyegogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0LCBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBmaXggcGVybXMsIGFkZCAtLWNuLy1jLCBiZXR0ZXIgZGF0ZXMgZGVmYXVsdHMsIHNubXAtdGxzIG9yZ191bml0LAorICAgYWRkZWQgaW5pdGlhbCBkdW1teSBjb25maWcgZmlsZQogCi0yMDEwLTA0LTA3IDE0OjEyICBkdHMxMgorMjAxMC0wNC0xMyAxNDoyMSAgbWFyegogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgZml4ZXMgZm9yIHNob3cgY21kcywgY21kbGluZSwgaGVscAogCi0yMDEwLTA0LTA3IDE0OjA4ICBkdHMxMgorMjAxMC0wNC0xMyAwMjoxNyAgcnN0b3J5CiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICBhZGQgc3VwcG9ydCBmb3Iga2V5K2NlcnQgaW4gLnBlbSBmaWxlczsgbWlzYyB0d2Vha3MKKworMjAxMC0wNC0xMCAyMzoyNCAgdGFuZGVycworCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgYnVpbGQgZml4IGZvciBDODkgY29tcGlsZXJzIChlLmcuIG9uIEhQLVVYIDEwLjIwKQorCisyMDEwLTA0LTEwIDIyOjI1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICBpbml0aWFsIGN1dCBhdCB0bHN0bUNlcnRUb1RTTlRhYmxlCisKKzIwMTAtMDQtMTAgMjI6MjQgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgYWRkIGRlZmluZSBvZiBtYXggaGFzaCBjb25zdGFudAorCisyMDEwLTA0LTEwIDIyOjI0ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYzoKKworICAgdXNlIGNlcnQgdXRpbCBjaGVjayBmb3IgZmluZ2VycHJpbnQgbGVuL2FsZ29yaXRobQorCisyMDEwLTA0LTEwIDEyOjU5ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgc2hvdyBjbWQgZml4ZXMKKworMjAxMC0wNC0wOSAyMTozMiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZhaXJseSBmdW5jdGlvbmFsIChub24taW50ZXJhY3RpdmUpIC0gYmUgaXQga25vd246IHRoZXJlIGFyZSBidWdzCisKKzIwMTAtMDQtMDkgMjA6NTQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmg6CisKKyAgIG1lcmdlIHNvbWUgdGFibGVfZGF0YS5jb25mIGNoYW5nZXM7IHJlbW92ZSB1bnVzZWQgY29kZSBhbmQgYQorICAgYnVuY2ggb2YgdmVyYm9zZSBjb21tZW50cworCisyMDEwLTA0LTA4IDE0OjU3ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy11cGRhdGU6CisKKyAgIHVzZSBmdWxsIHBhdGgKKworMjAxMC0wNC0wOCAxMDo1NSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQ2hlY2sgcmVzdWx0cyBvZiBjYWxscyB0byBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUgYW5kIGxvZworICAgYW4gZXJyb3IuCisgICBUaGlzIGFsbG93cyB1c2VycyB0byByZWxhdGUgdmFyaW91cyAnYzY0IDMyIGJpdCBjaGVjayBmYWlsZWQnCisgICBlcnJvcnMgd2l0aCBzcGVjaWZpYyBjb3VudGVyLgorCisyMDEwLTA0LTA4IDAxOjA5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg6CisKKyAgIGFkZCBwcm90b3R5cGUgZm9yIG5ldyBmdW5jdGlvbgorCisyMDEwLTA0LTA4IDAxOjA1ICByc3RvcnkKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiB0cmFuc2xhdGUgTk9TVUNIKi9FTkRPRk1JQiBlcnJvcnMgZHVyaW5nIFJFU0VSVkUxCisgICB0byBOT0NSRUFUSU9OCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgTkVXUzogc25tcGQ6IHRhYmxlX2RhdGEvdGRhdGEgbmV4dCBoYW5kbGVyIHdpbGwgbm90IGJlIGNhbGxlZAorICAgZHVyaW5nIGdldAorICAgcHJvY2Vzc2luZyBpZiBubyB2YWxpZCByb3dzIGFyZSBmb3VuZCBmb3IgdGhlIGhhbmRsZXIKKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBORVdTOiBzbm1wZDogYWdlbnQgd2lsbCBubyBsb25nZXIgY2FsbCB0YWJsZSBoYW5kbGVycyBpZiBhIHNldAorICAgcmVxdWVzdCBmb3IKKyAgIHRoZSBoYW5kbGVyIGhhcyBpbnZhbGlkIGluZGV4ZXMKKyAgIENIQU5HRVM6IHNubXBkOiBkb24ndCBjYWxsIGNsZWFudXAgb24gZmlyc3QgcmVxdWVzdCBvbiBiYWQKKyAgIGluZGV4ZXMuIGluc3RlYWQsCisgICBzZXQgYWN0dWFsIGVycm9yIGxhdGVyLCBhbmQgZnJlZSByZXF1ZXN0IGRhdGEgc2V0cyBvbiBmaXJzdAorICAgcmVxdWVzdCBmb3Igc2V0cworCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBmdW5jdGlvbiB0byB2YWxpZGF0ZSBmaW5nZXJwcmludCB2YXJiaW5kCisKKzIwMTAtMDQtMDcgMjI6NTYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIFNvbGFyaXMgdHIgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciByYW5nZXMgcmVsaWFibHkgKHNlZSB0aGUKKyAgIGF1dG9jb25mIG1hbnVhbCksIGNoYW5nZSB0aGUgZXhwcmVzc2lvbiB0byBvbmUgdGhhdCBpcyBzaW1wbGUKKyAgIGVub3VnaCB0byBiIHN1cHBvcnRlZC4KIAogMjAxMC0wNC0wNyAxNDowNSAgZHRzMTIKIApAQCAtMjU1NCwyNyArNDM5NjcsNTEwIEBACiAKICAgIEluc2VydCB0aGUgY2FjaGUgaGVscGVyIGNvcnJlY3RseS4KIAorMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIGZ1bmN0aW9ucyB0byByZW1vdmUgbGlzdC9yb3cgZGF0YSBmcm9tCisgICByZXF1ZXN0IGxpc3QKKworMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBpZmRlZiB2YXIgZGVjbCBmb3IgdmFycyBvbmx5IHVzZWQgaW4gbGF0ZXIgaWZkZWYgYmxvY2sKKworMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcC10Yy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgZnVuY3Rpb24gdG8gdmFsaWRhdGUgUm93U3RhdHVzIGFuZAorICAgU3RvcmFnZVR5cGUgdmFyYmluZHMKKyAgIC0gYWxzbyByZW1vdmUgc29tZSBkdXBsaWNhdGUgY29kZSBhbmQgZml4IGNvbW1lbnRzIGluZGVudCBtYW5nbGVkCisKKzIwMTAtMDQtMDcgMTA6MzkgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLXVwZGF0ZSwgbWFuL21pYjJjLXVwZGF0ZS4xLmRlZjoKKworICAgdXBkYXRlIG1hbiBwYWdlOyBmaXggc2hlbGwgcmVkaXJlY3Q7IGNyZWF0ZSBleGFtcGxlIHJjZmlsZSBpZgorICAgbWlzc2luZworCisyMDEwLTA0LTA3IDA3OjE1ICBtYWdmcgorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBVc2UgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HIGluc3RlYWQgb2YgRElTQUJMRV9NSUJfTE9BRElORworCisyMDEwLTA0LTA3IDAwOjM4ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBPbmx5IGVuYWJsZSBob3N0U3dJbnN0IHJwbSBzdXBwb3J0IG9uIGxpbnV4IGhvc3RzCisgICB3aXRoIGxpYnJwbS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBidWlsZCBvbiBub24tcnBtIGxpbnV4CisgICBkaXN0cmlidXRpb25zLgorCisyMDEwLTA0LTA3IDAwOjE0ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2LCB0ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBDaGFuZ2UgdGhlIHRlc3Qgc3VpdGUgdG8gd29yayBldmVuIGlmIG1pYgorICAgbG9va3VwIGlzIGRpc2FibGVkLgorCisyMDEwLTA0LTA3IDAwOjExICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2OgorCisgICBDaGVjayBmb3IgY29tMnNlYzYsIG5vdCBjb20yc2VjLgorCisyMDEwLTA0LTA2IDIyOjUxICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBNb3ZlIGRpcmVjdG9yeSBjcmVhdGlvbiBiZWZvcmUgdGhlIGRpcmVjdG9yaWVzIGFyZSB1c2VkLgorCiAyMDEwLTA0LTA2IDExOjAzICBkdHMxMgogCiAgICAqIEZBUToKIAogICAgUHl0aG9uIGlzIGFwcGFyZW50bHkgY2xpZW50LXNpZGUgb25seS4KIAotMjAxMC0wNC0wNiAwODo1NiAgZHRzMTIKKzIwMTAtMDQtMDYgMTA6MDYgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisgICAqIGFnZW50L3NubXBkLmM6CiAKLSAgIE5FV1M6IHNubXBkOiBMYXRjaCBsYXJnZS1kaXNrIHN0YXRpc3RpY3MgYXQgMlRiIChyYXRoZXIgdGhhbgotICAgd3JhcHBpbmcuCisgICBTZXQgc3VwcGxlbWVudGFyeSBncm91cHMgYmVmb3JlIGNoYW5naW5nIFVJRAorICAgKHdoaWNoIHByb2JhYmx5IGludm9sdmVzIGdpdmluZyB1cCBwcml2aWxlZ2VzKQogCi0yMDEwLTAzLTI5IDE1OjI2ICBkdHMxMgorMjAxMC0wNC0wNiAwODo1NyAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgc25tcGxpYi9wYXJzZS5jOgorICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CiAKLSAgIEluY2x1ZGUgTUlCIGRpcmVjdG9yeSBzZWFyY2ggcGF0aCBpbiByZXBvcnRzIG9mIG1pc3NpbmcgTUlCCi0gICBmaWxlcy4KLSAgIEluY2x1ZGUgY29uZmlnIGZpbGUgc2VhcmNoIHBhdGggaW4gcmVwb3J0cyBvZiBtaXNzaW5nIGFjY2VzcwotICAgY29udHJvbCBzZXR0aW5ncy4KKyAgIERvY3VtZW50IGxhcmdlLWRpc2sgc3RhdGlzdGljcyBhcyBsYXRjaGluZyBhdCAyVGIgKHJhdGhlciB0aGFuCisgICB3cmFwcGluZykuCisKKzIwMTAtMDQtMDYgMDE6NTIgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLCBtYW4vbWliMmMuMS5kZWY6CisKKyAgIE5FV1M6IG1pYjJjOiBtaWIyYyBjYW4gbm93IG9wdGlvbmFsbHkgcnVuIHNlZCBvbiBnZW5lcmF0ZWQgY29kZQorCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29udmVydCBDKysgY29tbWVudHMgdG8gQyBjb21tZW50cworCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbW92ZSBwdHIgY2hlY2sgYmVmb3JlIHBydCB1c2UKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGZpbGVuYW1lIHRvIGRlYnVnIG9uIG5ldyBjZXJ0czsgbWFrZSBzdGF0aWMgZnVuYyB0byByZXR1cm4KKyAgIG1vZGUgbmFtZXMKKworMjAxMC0wNC0wNiAwMDo0NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWxsb3cgYSBmb3VuZCBmaW5nZXJwcmludCBzZWxmLXNpZ25lZCBjZXJ0IGZvciBub3c7IGV2ZW50dWFsbHkKKyAgIG5lZWQgdG8gcmVzcGVjdCB0aGUgTUlCIGNvbmZpZyB0YWJsZQorCisyMDEwLTA0LTA2IDAwOjEyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBta2RpciBzbm1wbGliL3RyYW5zcG9ydHMgd2hlbiBETkUgZm9yIGJ1aWxkaW5nIG91dHNpZGUgdGhlIHNvdXJjZQorICAgZGlyCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bnVzZWQgdmFycworCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBlcnJvciBjb2RlIGNsZWFudXAgZm9yIHRsc2Jhc2Vfd3JhcHVwX3JlY3YKKworMjAxMC0wNC0wNSAyMzoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3JlIGJldHRlciBlcnJvci9kZWJ1ZyBjb2RlcworCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGNvbW1lbnRzIGZyb20gdGhlIGZ1dHVyZS1SRkMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uOyB1c2UKKyAgIGZsYWdzIGZvciBzZXJ2ZXIvY2xpZW50IHNwZWNpZmljYXRpb24gZm9yIGV4cGFuc2lvbgorCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGJldHRlciBlcnJvciBtZXNzYWdlcyBmb3IgdXNhZ2UgY29uc3RyYWludHMKKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3ZlIGZ1bmN0aW9uIHByb3RlY3Rpb24gbG9naWMgaW4gYSB0b3AtbGV2ZWwgY2hlY2sKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZml4IGluaXQgb3JkZXJpbmcKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG12IHRsc2Jhc2UgaW5pdCBmdW5jdGlvbiB0byBhIHByb3BlciBjdG9yIGZvciBhdXRvLWNhbGxpbmcKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBnZW5lcmF0ZSB0aGUgdHJhbnNwb3J0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGxpc3QKKyAgIGR5bmFtaWNhbGx5IGFuZCB1c2UgaXQKKworMjAxMC0wNC0wMiAxNjozNSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdHJhbnNwb3J0cywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IG1vdmVkIHRyYW5zcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4KKyAgIHNubXBsaWIKKworMjAxMC0wNC0wMiAwOTowMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYzoKKworICAgRG8gbm90IGF0dGVtcHQgdG8gY2hlY2sgc2l6ZW9mIHZvaWQgdG8gb2J0YWluIHRoZSBhbW91bnQgb2YKKyAgIG1lbW9yeSB0byBjb3B5LgorCisyMDEwLTA0LTAxIDE3OjExICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGluc3RlYWQgb2YgZndkIGRlY2xhcmVzLCByZXF1aXJlIG90aGVyIGhlYWRlcgorCisyMDEwLTA0LTAxIDE3OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmcKKworMjAxMC0wNC0wMSAxNzoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgb3V0ZGF0ZWQgZGVidWcgbXNnCisKKzIwMTAtMDQtMDEgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdXNlIGNlcnRhcGkgdG8gZmluZCBjZXJ0cy9rZXlzCisKKzIwMTAtMDQtMDEgMTQ6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVnaXN0ZXIgZXh0cmFYNTA5U3ViRGlyIHRva2VuCisKKzIwMTAtMDQtMDEgMTQ6MTggIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgY2hlY2sgcHRyIGJlZm9yZSB1c2UKKworMjAxMC0wNC0wMSAxNDoxOCAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBjaGVjayBwdHIgYmVmb3JlIHVzZQorCisyMDEwLTA0LTAxIDEzOjEzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgYWRkIHBlcnNpc3RlbnQgc3RvcmFnZTsgdG9rZW4gZm9yIGNyZWF0aW5nIGVudHJpZXMgaW4gc25tcGQuY29uZjsKKyAgIGZpeCBpbmRleAorCisyMDEwLTA0LTAxIDEzOjEyICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBjZXJ0aWZpY2F0ZSBhcGkgdG8gc3VwcG9ydCB0bHMvZHRscworCisyMDEwLTA0LTAxIDEzOjEyICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIENIQU5HRVM6IGFkZCBmdW5jdGlvbnMgdG8gZ2V0IGZpbmdlcnByaW50IGZyb20gY2VydCBhbmQgbG9nCisgICBvcGVuc3NsIGVycnMKKworMjAxMC0wNC0wMSAxMjo0NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgZml4IHR5cG8KKworMjAxMC0wNC0wMSAxMDozMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIHByZS1DOTAgY29tcGlsZXJzLgorCisyMDEwLTA0LTAxIDEwOjAxICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIENIQU5HRVM6IG1pYjJjOiB0YWJsZV9kYXRhIHRlbXBsYXRlIGVuaGFuY2VtZW50cworICAgLSBhZGQgZXJyb3IgY2hlY2tzIGR1cmluZyB0YWJsZSBpbml0CisgICAtIGNyZWF0ZSBjYWNoZSBlYXJsaWVyIHNvIHdlIGNhbiBiYWlsIG9uIGZhaWx1cmUKKyAgIC0gYWRkIG9wdGlvbiB0byBjcmVhdGUvZGVsZXRlIHJvdyB3L291dCBhZGRpbmcvcmVtb3ZpbmcgZnJvbQorICAgY29udGFpbmVyCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaDoKKworICAgYWRkIGhlbHBmdWwgcGFyYW0gbmFtZXMgYXMgaGludHMgaW4gcHJvdG90eXBlCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgc2VhcmNoIGZvciBjb250YWluZXIgc3BlY2lmaWMgY29udGFpbmVyIGJlZm9yZSBnZW5lcmljCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCBzbm1wbGliL2Rpcl91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9maWxlX3V0aWxzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGVuaGFuY2UgZmlsZSB1dGlscyBhbmQgZGlyIHV0aWxzCisgICAtIGFkZCBvcHRpb25hbCBzdGF0cyBzdHJ1Y3QgdG8gbmV0c25tcF9maWxlCisgICAtIGdlbmVyYWxpemUgZGlyIGNvbnRhaW5lciBmaWx0ZXIsIGFkZCBjb250ZXh0IHRvIGNhbGxiYWNrCisgICAtIGFkZCBvcHRpb24gdG8gc3RvcmUgbmV0c25tcF9maWxlcyAody9zdGF0cykgaW4gY29udGFpbmVyCisgICBpbnN0ZWFkIG9mIGp1c3QgbmFtZQorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIGFkZCBwcm90b3R5cGUgdG8gaGVhZGVyOyBjaGVjayBwdHIgYmVmb3JlIGRlcmVmZXJlbmNpbmcKKworMjAxMC0wMy0zMSAxNTozNCAganNhZnJhbmVrCisKKyAgICogIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9zbm1wLWJyaWRnZS1taWIsIG1hbi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1hbi9zbm1wLWJyaWRnZS1taWIuMSwgbWlicy9CUklER0UtTUlCLnR4dCwgbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1pYnMvTWFrZWZpbGUubWliOgorCisgICBORVdTOiBtaXNjOiBQQVRDSDogMjk1MjcwODogZnJvbSBKZW5zIE9zdGVya2FtcDogQWRkZWQgUGVybAorICAgaW1wbGVtZW50YXRpb24gb2YgQlJJREdFLU1JQgorCisyMDEwLTAzLTMxIDAyOjEyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcHJvcGVyIHBhY2tldCBsYWJlbGluZyBmb3IgRFRMU1VEUAorCisyMDEwLTAzLTMxIDAyOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1c2UgY29tbW9uIGNvbnRleHQgY3JlYXRpb24gY29kZQorCisyMDEwLTAzLTMwIDIzOjI0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGFuZ2UgVExTIG1ldGhvZCB0byBUTFN2MSBmcm9tIFNTTHYyMworCisyMDEwLTAzLTMwIDIzOjIzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vdmUgbW9yZSBjb21tb24gZGF0YSBhbmQgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBUTFMgYmFzZQorCisyMDEwLTAzLTMwIDIzOjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtaW5vciBUTFMgY29kZSBjbGVhbnVwCisKKzIwMTAtMDMtMzAgMjA6MjggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZXdvcmsgaWYoKSB3cmFwcGluZyBmb3IgbGVzcyBjb25mdXNpb24gaW4gZXJyb3IgaGFuZGxpbmcKKworMjAxMC0wMy0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvZGUgY29uc29saWRhdGlvbiBpbiBzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3RpbworCisyMDEwLTAzLTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVuYW1lIGdlbmVyaWMgJ2JpbycgcG9pbnRlciB0byAncmVhZF9iaW8nIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKKworMjAxMC0wMy0zMCAyMDoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1vdmUgYnVmZmVyZWQgZGF0YSBjcmVhdGlvbiB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciByZXVzZQorCisyMDEwLTAzLTMwIDE3OjUyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaW5pdGlhbCBjZXJ0IGdlbiB3cmFwcGVyIHNjcmlwdCAtIG5vdCB3b3JraW5nCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjbGVhbiB1cCBlcnJvciBvdXRwdXQgc28gaXQgZG9lc24ndCByZXBvcnQgd2FudF9yZWFkIGFuZAorICAgd2FudF93cml0ZSBlcnJvcnMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbmFtaW5nIG9mIHNlbmRpbmcgZnVuY3Rpb24gZm9yIGNsYXJpdHkgYW5kIGNoZWNrIG9uZSBtb3JlCisgICBsb2NhdGlvbiBmb3IgbmVlZGVkIG91dGdvaW5nIHBhY2tldHMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGFkZGVkIGR0bHN1ZHAgdHJhY2luZyB0b2tlbnMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBDSEFOR0VTOiBhZGRlZCBhIG5ldyBERUJVR1RSQUNFVE9LKCkgbWFjcm8KKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJldHRlciBjb21tZW50cyBhbmQgbW9yZSB3b3JrIG9uIHNlbmRpbmcgYnVmZmVyZWQgZGF0YSBpbiB0aGUKKyAgIHJpZ2h0IHNwb3RzCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBhcmd1bWVudHMgdG8gZ2V0X2NvbW1vbk5hbWUKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJlZ2lubmluZyBvZiBjYWNoaW5nIG9mIHBhY2tldHMgYmVmb3JlIHRoZXkgY2FuIGJlIHNlbnQgdmlhIERUTFMKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGhhbmRsZSBTU0xfV0FOVF9SRUFEL1dSSVRFIGJldHRlcjsgc3RpbGwgbmVlZCB0byBidWZmZXIgb3V0Z29pbmcKKyAgIHdyaXRlIGRhdGEKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1pbm9yIGNoYW5nZSB0byBvdXRwdXQgZXJyb3IgcHJpbnRpbmcKIAogMjAxMC0wMy0yOSAxNToyMCAgZHRzMTIKIApAQCAtMjU4Niw2ICs0NDQ4MiwxOSBAQAogICAgTm90ZSB0aGF0IHRoaXMgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoZSBiZWhhdmlvdXIgb2YKICAgIGV4aXN0aW5nIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb25zLgogCisyMDEwLTAzLTI5IDE1OjE2ICBidmFzc2NoZQorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6CisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OmdldFZhbHVlKCk6IGRvbid0IHJldHVybgorICAgYSBwb2ludGVyIHRvIGEgYnVmZmVyIG9uIHRoZSBzdGFjay4gSG93IGNhbiB0aGlzIGhhdmUgd29ya2VkCisgICByZWxpYWJseSA/PworICAgQ0hBTkdFUzogcGVybDoKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cjo6c2V0VmFsdWUoKSwKKyAgIEFTTl9DT1VOVEVSNjQ6IGZpeGVkIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgbWV0aG9kIHRvIGZhaWwKKyAgIGV2ZW4gd2hlbiBhIHZhbGlkIG51bWJlciB3YXMgcHJvdmlkZWQuCisKIDIwMTAtMDMtMjkgMTU6MTUgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wdXNtLmM6CkBAIC0yNTk0LDYgKzQ0NTAzLDE0NyBAQAogICAgdHJhcHMuCiAgICBSZXBvcnRlZCBieSBTcmlrYXBpbGFuIEdhbmRoaQogCisyMDEwLTAzLTI5IDEyOjQ2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIENhdGNoIHN0ZGVyciBvbiBXaW5kb3dzIHRvby4KKworMjAxMC0wMy0yOSAxMTo0OCAgYnZhc3NjaGUKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBwcmUtQzkwIGNvbXBpbGVycy4KKworMjAxMC0wMy0yOSAxMToxOSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHBlcmwvT0lEL09JRC54cywgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBkZXN0cm95aW5nIGEKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGZhaWx1cmUgb2YKKyAgIGNyZWF0aW5nIGEgTmV0U05NUDo6T0lEIG9iamVjdC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IHRoZQorICAgTmV0U05NUDo6T0lEOjpnZXR0YWJsZSgpIHN1YnJvdXRpbmUuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyB0cmlnZ2VyZWQgYnkKKyAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBOZXRTTk1QOjpTTk1QLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgYSBQRFUgcHJvY2Vzc2luZworICAgZXJyb3IgaW4gTmV0U05NUDo6U05NUC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIG1lbW9yeSBsZWFrcyB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW4gU05NUHYzCisgICBzZXNzaW9uIHZpYSBOZXRTTk1QOjpTTk1QLgorICAgCisgICBBbHNvIGZpeGVkIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzIHRyaWdnZXJlZCBieQorICAgYWRkaW5nIGEgdmFyYmluZCB0byBhIFBEVSB2aWEgTmV0U05NUDo6U05NUCBpbnRyb2R1Y2VkIGEgZmV3IGRheXMKKyAgIGFnby4KKyAgIAorICAgVGhlIGJ1Z3MgbWVudGlvbmVkIGFib3ZlIGhhdmUgYmVlbiBmb3VuZCBieSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQKKyAgIG9mIHRoZSBmb2xsb3dpbmcgc2hlbGwgY29tbWFuZDoKKyAgIGNkIHBlcmwgJiYgdmFsZ3JpbmQgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS1sZWFrLWNoZWNrPWZ1bGwgbWFrZQorICAgdGVzdAorCisyMDEwLTAzLTI5IDEwOjU5ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIFN3aXRjaGVkIGJhY2sgdG8gdGhlIHByZXZpb3VzIHdheSBvZiBzdGFydGluZyBwcm9jZXNzZXMKKyAgIGFzeW5jaHJvbm91c2x5IGJlY2F1c2UgaXQgaXMgbW9yZSByZWxpYWJsZS4KKworMjAxMC0wMy0yOSAwOToyNyAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBEbyBub3Qgb25seSBzYXZlIHNubXBkIC8gc25tcHRyYXBkIGxvZ3MgYnV0IGFsc28gdGhlIHN0ZG91dCAvCisgICBzdGRlcnIgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGVzZSBwcm9jZXNzZXMuCisKKzIwMTAtMDMtMjggMTY6MDkgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgQ2hhbmdlcyBpbiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorICAgLSBBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIC1kIGZvciBzbm1wZCBhbmQgc25tcHRyYXBkLgorICAgLSBzbm1wZCBhbmQgc25tcHRyYXBkIG91dHB1dCBpcyBub3cgc2F2ZWQgdG8gYSBsb2cgZmlsZSAob25lIHBlcgorICAgdGVzdCkuCisgICAtIFJld3JvdGUgUGVybCBjb2RlIGZvciBzdGFydGluZyB0aGUgc25tcGQvc25tcHRyYXBkIHByb2Nlc3NlcworICAgc3VjaCB0aGF0IHRoZSBzYW1lIGNvZGUgd29ya3Mgb24gVW5peCBhbmQgb24gV2luZG93cy4KKworMjAxMC0wMy0yOCAxMzozNyAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9tYWxsb2MoKSwKKyAgIG5ldHNubXBfY2FsbG9jKCksIG5ldHNubXBfcmVhbGxvYygpLCBuZXRzbm1wX3N0cmR1cCgpIGFuZAorICAgbmV0c25tcF9mcmVlKCkuCisgICBDSEFOR0VTOiBXaW4zMjogc25tcGxpYjogcmVtb3ZlZCB0aGUgdHJvdWJsZXNvbWUgI2RlZmluZSBtYWxsb2MKKyAgIG5ldHNubXBfbWFsbG9jIGV0Yy4gVGhpcyBtZWFucyB0aGF0IHdoZW4gY2FsbGluZyBmdW5jdGlvbnMgZnJvbQorICAgdGhlIE5ldC1TTk1QIERMTCBmcm9tIEMgb3IgQysrIGNvZGUgdGhhdCBpcyBiZWluZyBsaW5rZWQgYWdhaW5zdAorICAgYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBNU1ZDIHJ1bnRpbWUgRExMIHRoYW4gdGhlIE5ldC1TTk1QIERMTCwKKyAgIGFuZCB3aGVuIGFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgd2lsbCBiZSBmcmVlZCBieSB0aGUgTmV0LVNOTVAKKyAgIERMTCwgeW91IHdpbGwgZWl0aGVyIGhhdmUgdG8gY2FsbCB0aGUgTmV0LVNOTVAgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZ1bmN0aW9ucyBleHBsaWNpdGx5IG9yIHJlZGVmaW5lIG1hbGxvYygpIGV0Yy4geW91cnNlbGYuCisKKzIwMTAtMDMtMjggMTI6NDYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIEZpeGVkIGEgcmVjZW50bHkgcmVpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDMtMjcgMTg6NDIgIGJ2YXNzY2hlCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGEgY2hlY2sgZm9yIGludm9jYXRpb24gb2YgY2FsbG9jKCkgZnJvbSBYU1VCcy4KKworMjAxMC0wMy0yNiAxOToxNiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHBlcmwvT0lEL09JRC54cywgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MzY4IGFuZCByMTgzNjk6IG1hZGUgc3VyZSB0aGF0IHRoZSBOZXQtU05NUCBQZXJsCisgICBleHRlbnNpb25zIGNvbXBpbGUgd2l0aG91dCB0cmlnZ2VyaW5nIHByZXByb2Nlc3NvciB3YXJuaW5ncyBhYm91dAorICAgcmVkZWZpbmluZyBtYWxsb2MgZXRjLiBub3IgdHJpZ2dlciAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcnMgb24KKyAgIFdpbmRvd3MuCisKKzIwMTAtMDMtMjYgMTQ6NDQgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uOgorICAgbmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUoKS4KKworMjAxMC0wMy0yNiAxMTo1OCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAgCisgICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgCisgICAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1c2luZyB2YXJpYWJsZXMgb2YgdHlwZSBjaGFyIGFzIGFuCisgICBhcnJheSBzdWJzY3JpcHQuIE5vdGU6IGFzIGZhciBhcyBJIGtub3cgdGhlc2Ugd2FybmluZ3MgYXJlIG9ubHkKKyAgIHJlcG9ydGVkIHdoZW4gdXNpbmcgdGhlIEN5Z3dpbiBnbGliYyBoZWFkZXJzLgorCisyMDEwLTAzLTI2IDEwOjQxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQWRkZWQgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmUgKG9uIFdpbmRvd3MgTVNWQyB3YXMgY29tcGxhaW5pbmcKKyAgIGFib3V0IHNpemVfdCB3aGlsZSBwcm9jZXNzaW5nIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPikuCisKIDIwMTAtMDMtMjUgMjA6MDcgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYzoKQEAgLTI2MDQsNiArNDQ2NTQsMTE3IEBACiAgICBjb25uZWN0IHRvIGFuIEFnZW50WCBtYXN0ZXIgYWdlbnQgcnVubmluZyBvbiB0aGUgc2FtZSBzeXN0ZW0KICAgIHdpdGhvdXQgaGF2aW5nIHRvIHNldCB0aGUgdmFyaWFibGUgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVC4KIAorMjAxMC0wMy0yNSAxNjoxMSAgYnZhc3NjaGUKKworICAgKiAgcGVybC9PSUQvT0lELnhzLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogV2luMzI6IHBlcmw6IGZpeGVkIHNldmVyYWwgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzLgorICAgTm90ZTogc2luY2UgY2FsbG9jKCkgaXMgbm90IHJlZGVmaW5lZCBpbiA8Q09SRS9YU1VCLmg+IHVzaW5nCisgICBjYWxsb2MoKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGxlYWRzIHRvICJGcmVlIHRvIHdyb25nIHBvb2wiCisgICBlcnJvcnMsIGF0IGxlYXN0IG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjUgMTY6MDQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBtb3JlIHNpbGVudCBieSBub3QKKyAgIHJlZGVmaW5pbmcgbWFsbG9jKCkgb3IgZnJlZSgpIGR1cmluZyBjb21waWxhdGlvbiBvZiBQZXJsCisgICBleHRlbnNpb25zIChyZXN1bHRlZCBpbiB3YXJuaW5ncyBhYm91dCBtYWxsb2MoKSAvIGZyZWUoKQorICAgcmVkZWZpbml0aW9uIGluIHRoZSBQZXJsIGhlYWRlciBDT1JFL1hTVUIuaCkuCisKKzIwMTAtMDMtMjUgMTU6MDYgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBCVUc6IDI5Njk4NzI6IG1hZGUgc3VyZSB0aGF0IFNPQ0tfU1RBUlRVUCBpcyBpbnZva2VkCisgICBiZWZvcmUgaW5pdF9hZ2VudCgpIG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjUgMTM6MzkgIGpzYWZyYW5laworCisgICAqICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcC5jLCAgIAorICAgICAgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgYXBwcy9zbm1wd2Fsay5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgVXNlIG1hY3JvcyBpbnN0ZWFkIG9mIG1hZ2ljIG51bWJlcnMgYXMgbmV0c25tcF9wYXJzZV9hcmdzIHJldHVybgorICAgY29kZXMuCisKKzIwMTAtMDMtMjUgMTM6MzAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIHRoZSBidWlsZCBwcm9jZXNzIGJ5CisgICByZW1vdmluZyB0aGUgZmlsZSB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbi4gV2hpY2ggSVB2NgorICAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmcm9tIG5ldHNubXAuZGxsIGlzIG5vdyBkZXRlcm1pbmVkIGJ5CisgICB3aGljaCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgRExMIGhhdmUgYmVlbiBkZWNsYXJlZCBhcworICAgTkVUU05NUF9JTVBPUlQuCisKKzIwMTAtMDMtMjQgMjA6MTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9lbnVtLmM6CisKKyAgIGRvbid0IHVzZSBwYXNzZWQgcHRyIGFzIHRlbXAgdmFyOyB1c2Ugc25tcF9lbnVtX2xpc3RzIGluIGluaXQKKyAgIHRlc3QKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDoKKworICAgYWRkIE5FVFNOTVBfRFNfTElCX0NFUlRfRVhUUkFfU1VCRElSCisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNlcnQgaW5pdCBlYXJsaWVyIChoYXZlIHRsc19ib290c3RyYXAgY2FsbCBpdCkKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3M7IGFkZCBjZXJ0IGRlYnVnIG1zZ3MgaW4gc2VydmVyIHNldHVwOyBmcmVlCisgICBzc2wgbG9nIGRhdGEKKworMjAxMC0wMy0yNCAxMDo0NyAganNhZnJhbmVrCisKKyAgICogIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwLmMsICAgCisgICAgICBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCBhcHBzL3NubXB3YWxrLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBDSEFOR0VTOiBhcHBzOiByZXR1cm4gbm96ZXJvIGV4aXQgY29kZSB3aGVuIHBhcnNpbmcgb2YgY2VydGFpbgorICAgcGFyYW1ldGVyIGZhaWxzLgorICAgRS5nLiAnLUEnIHBhcmFtZXRlciB3aXRoIHRvbyBzaG9ydCBwYXNzcGhyYXNlIG9yIEt1IGtleQorICAgZ2VuZXJhdGlvbiBpbiBnZW5lcmFsLgorCisyMDEwLTAzLTI0IDA3OjExICBtYWdmcgorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBDb3JyZWN0IHRoZSB0eXBlIG9mIHRoZSBpZC9kZXNjcmlwdGlvbiBvZiB0aGUgT3Blbi1QRFUuCisKKzIwMTAtMDMtMjIgMTg6MjkgIGJ2YXNzY2hlCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIFVwZGF0ZXMgZm9yICJtYWtlIGNoZWNrcyI6CisgICAtIE1hZGUgc3VyZSB0aGF0IGV4aXQgY29kZSAwIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBjaGVjayBpcworICAgc3VjY2Vzc2Z1bCBhbmQgdGhhdAorICAgZXhpdCBjb2RlIDEgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIGNoZWNrIGZhaWxlZC4KKyAgIC0gTWFkZSAibWFrZWZpbGVjaGVjayIgc2tpcCBTdWJ2ZXJzaW9uIGJvb2trZWVwaW5nIGZpbGVzIGFuZCBhbHNvCisgICB0aGUgbWFrZWZpbGUKKyAgIHRoYXQgY29udGFpbnMgIm1ha2VmaWxlY2hlY2siLgorCiAyMDEwLTAzLTIyIDE2OjEwICBkdHMxMgogCiAgICAqIG1pYnMvTkVULVNOTVAtUEFTUy1NSUIudHh0OgpAQCAtMjYxMSw2ICs0NDc3MiwxNiBAQAogICAgRml4IHR5cG8gaW4gZGVmYXVsdCBJcEFkZHJlc3MgdmFsdWUKICAgIChTZWUgQnVnICMyOTcyMTQxKQogCisyMDEwLTAzLTIyIDE1OjQ0ICByc3RvcnkKKworICAgKiAgTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgc25tcGxpYi9jYWxsYmFjay5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgY2hhbmdlIGFsbCBhc3NlcnQoKSB0byBuZXRzbm1wX2Fzc2VydCgpOyBhZGQgYXNzZXJ0Y2hlY2sgdG8gdG9wCisgICBsZXZlbCBtYWtlZmlsZQorCiAyMDEwLTAzLTIyIDE1OjI0ICBidmFzc2NoZQogCiAgICAqIG1pYnMvVUNELURJU0tJTy1NSUIudHh0OgpAQCAtMjYxOCw2ICs0NDc4OSwyMyBAQAogICAgRm9sbG93LXVwIGZvciByMTgzNDk6IGFkZGVkIG1pc3NpbmcgY29tbWEgc3VjaCB0aGF0IGl0IGlzIGFnYWluCiAgICBwb3NzaWJsZSB0byBjb21waWxlIFVDRC1ESVNLSU8tTUlCLgogCisyMDEwLTAzLTIyIDE0OjM2ICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIEZpeCBidWlsZCB3aGVuIE1JQiBsb2FkaW5nIGlzIGRpc2FibGVkIChicm9rZW4gYnkgU1ZOIHJldmlzaW9uCisgICAxODM0MSkKKyAgIFJlcG9ydCBkZWZhdWx0IE1JQiBwYXRoIGZvciBjbGllbnQgYXBwcyB0b28uCisKKzIwMTAtMDMtMjIgMTM6NTkgIGR0czEyCisKKyAgICogIG1hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMywgbWFuL3NubXBfY2xvc2UuMywgbWFuL3NubXBfZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX2ZyZWVfcGR1LjMsIG1hbi9zbm1wX29wZW4uMywgbWFuL3NubXBfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9yZWFkLjMsIG1hbi9zbm1wX3NlbGVjdF9pbmZvLjMsIG1hbi9zbm1wX3NlbmQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfcGVycm9yLjMsIG1hbi9zbm1wX3RpbWVvdXQuMzoKKworICAgQ0hBTkdFUzogbWFuOiBCVUc6IDI5NzI4NjA6IFVwZGF0ZSBicm9rZW4gcmVmZXJlbmNlcworCiAyMDEwLTAzLTIyIDEzOjQ5ICBkdHMxMgogCiAgICAqICBtaWJzL1VDRC1ESVNLSU8tTUlCLnR4dCwgbWlicy9VQ0QtRExNT0QtTUlCLnR4dCwgICAKQEAgLTI2MzUsMTIgKzQ0ODIzLDEwNCBAQAogICAgQVNOIHZhcmJpbmRzIHdpdGggQVNOIHR5cGUgemVyby4gTm90ZTogdGhpcyBjb2RlIGNoYW5nZSBkb2VzIG5vdAogICAgY2hhbmdlIHRoZSBhZ2VudCBiZWhhdmlvci4KIAorMjAxMC0wMy0yMCAyMDoyMSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmg6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIE1TVkMuCisKKzIwMTAtMDMtMjAgMjA6MjAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jOgorCisgICBBZGRlZCBhIHRyYWlsaW5nIGJhY2tzbGFzaCAoc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCkuCisKKzIwMTAtMDMtMjAgMTk6MzYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvc25tcGQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIAorICAgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvd2lucGlwZS5jLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgQ0hBTkdFUzogbGlic25tcDogY2hhbmdlZCB0aGUgdHlwZSBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IG9mCisgICBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkgZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoCisgICB0aGF0IG5vIGNhc3QgaXMgbmVjZXNzYXJ5IHdoZW4gcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4KKyAgIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorICAgQ0hBTkdFUzogV2luMzI6IGNoYW5nZWQgaW5fYWRkcl90IGZyb20gdV9pbnQgdG8gdV9sb25nIHN1Y2ggdGhhdAorICAgaXQgbWF0Y2hlcyB0aGUgZGF0YXR5cGUgb2Ygc29ja2FkZHJfaW46OnNpbl9hZGRyLgorICAgQWxzbywgZml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyAobW9zdGx5IGNoYXIgKiA8PiB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKwogMjAxMC0wMy0yMCAxOToxNiAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAogICAgRml4ZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IGdjYyAoTWluR1cpLgogCisyMDEwLTAzLTIwIDE5OjA1ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3Igc2lncHJvY21hc2suCisKKzIwMTAtMDMtMjAgMDk6MTQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW50byBhIG5ldyBmdW5jdGlvbi4KKworMjAxMC0wMy0xOSAyMjo1NiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYWdlbnQvc25tcGQuYywgc25tcGxpYi9wYXJzZS5jOgorCisgICBSZXBvcnQgTUlCIGFuZCBjb25maWcgZGlyZWN0b3JpZXMgc2VhcmNoIHBhdGhzIG9uIGVycm9ycworICAgKGFuZCBpbiB0aGUgaGVscCBtZXNzYWdlKQorCisyMDEwLTAzLTE5IDEzOjEyICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBtYWRlIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgaXMgbG9nZ2VkIHdoZW4KKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gaXMgYXR0ZW1wdGVkIG1vcmUgZGV0YWlsZWQuCisgICAKKyAgIEFuIGV4YW1wbGU6CisgICAoYmVmb3JlKQorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiAobWliSUkvc25tcCwKKyAgIEM6XFdJTkRPV1NcU3lzdGVtMzJcc25tcG1pYi5kbGwpCisgICBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuCisgICAoYWZ0ZXIpCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uOiBNSUIgbW9kdWxlcyBtaWJJSS9zbm1wIGFuZAorICAgQzpcV0lORE9XU1xTeXN0ZW0zMlxzbm1wbWliLmRsbCAob2lkIC4xLjMuNi4xLjIuMS4xMSkuCisgICBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuCisKIDIwMTAtMDMtMTkgMTI6NDAgIGJ2YXNzY2hlCiAKICAgICogIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgICAKQEAgLTI2NTksMTggKzQ0OTM5LDk0IEBACiAgICBieSBldmVyeSByZXF1ZXN0IGZvciB3aGljaCBhIHJlc3BvbnNlIHdpdGggbm9uLXplcm8gZXJyb3Igc3RhdHVzCiAgICBpcyBzZW50IGJhY2suCiAKLTIwMTAtMDMtMTkgMTE6NDEgIGJ2YXNzY2hlCisyMDEwLTAzLTE4IDE2OjI5ICByc3RvcnkKIAotICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKIAotICAgUmV2ZXJ0ZWQgcjE4MzI0IHNpbmNlIHRoZSA1LjQgYnJhbmNoIGlzIGluIFJDIHN0YWdlIGFuZCBhCi0gICBsZWFrLWF0LWV4aXQgaXMgbm90IGEgc2hvd3N0b3BwZXIuCisgICBrZWVwIGNvdW50IG9mIGVuYWJsZWQgbG9nczsgdXNlIHRoaXMgY291bnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8KKyAgIGxvZyB0byBzdGRlcnIKIAotMjAxMC0wMy0xNyAxMzo0MSAgYnZhc3NjaGUKKzIwMTAtMDMtMTggMTY6MjggIHJzdG9yeQorCisgICAqICBhcHBzL3NubXB0cmFuc2xhdGUuYywgYXBwcy9zbm1wdHJhcGQuYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBzbm1wIHRva2VuIGxvZ09wdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyBsb2cKKyAgIGRlc3RpbmF0aW9ucyB2aSBjb25mIGZpbGVzCisgICAtIGlmIHN0ZGVyciBsb2cgZW5hYmxlZCBiZWNhdXNlIG9mIG5vIGxvZyBkZXN0aW5hdGlvbiwgdHVybiBpdAorICAgb2ZmIHdoZW4gYQorICAgbG9nIGRlc3RpbmF0aW9uIGlzIGVuYWJsZWQKKyAgIC0gZG9uJ3QgY2FsbCBuZXRzbm1wX2VuYWJsZV9zdGRlcnJsb2coKSBmcm9tIGFwcHMgYW55bW9yZQorCisyMDEwLTAzLTE4IDE1OjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICB1ZHAgdHJhbnNwb3J0IGluaGVyaXRhbmNlIHR3ZWFrcworICAgLSBtb3ZlIGJhc2ljIHVkcCByZWN2ZnJvbS9zZW5kdG8gY29kZSBmcm9tIFVEUERvbWFpbiB0bworICAgVURQQmFzZURvbWFpbgorICAgLSB0d2VhayB1cGQgcmVjdmZyb20vc2VuZHRvIHRvIGNhbGwgdWRwYmFzZSB2ZXJzdGlvbgorICAgLSB0d2VhayB1ZHBpcHY0IHJlY3Zmcm9tL3NlbmR0byB0byBjYWxsIHVkcGJhc2UgdmVyc2lvbgorICAgLSBhbHNvIGZpeGVkIG5ldHNubXBfaXB2NF8qIC0+IG5ldHNubXBfdWRwaXB2NF8qCisgICAtIHR3ZWFrIERUTFNVRFBEb21haW4gb3QgdXNlIHVkcGJhc2VfKiBpbnN0ZWFkIG9mIHVkcF8qCisKKzIwMTAtMDMtMTggMTU6MjEgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBwcm90ZWN0IGNlcnQgaGVhZGVyIGFuZCBpbml0IGNhbGwgd2l0aCBpZmRlZnMKKworMjAxMC0wMy0xNyAxOTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgdXNlIG5ldyB1dGlsaXR5IHJvdXRpbmUgZm9yIGNlcnQgbmFtZXMKKworMjAxMC0wMy0xNyAxOTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBzbm1wX29wZW5zc2wgaGVhZGVyIGFmdGVyIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGFkZCByb3V0aW5lcyB0byBwdWxsL2R1bXAgbmFtZXMgZnJvbSBYNTA5IGNlcnRzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHVzZSBlbnVtIGxpc3RzIHRvIG1hbmFnZSBkaXJlY3RvcnkgaW5kZXhlcworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfZW51bS5jOgorCisgICBpbml0aWFsaXplIHN0YXRpYyBzdG9yYWdlIGJlZm9yZSB1c2U7IHByb3RlY3QgZW51bSBpbml0IGZyb20KKyAgIG11bHRpcGxlIGNhbGxzCisKKzIwMTAtMDMtMTcgMTg6NTQgIHJzdG9yeQorCisgICAqIFJFQURNRS5hZ2VudC1taWJzOgorCisgICBhZGQgaW5mbyBhYm91dCBuZXcgdHNtL3RscyBtaWJzCisKKzIwMTAtMDMtMTcgMTg6NTQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNlcnQgaW5pdCB0byBzbm1wIGluaXQKKworMjAxMC0wMy0xNyAxMzozNyAgYnZhc3NjaGUKIAogICAgKiBtaWJzL05FVC1TTk1QLUFHRU5ULU1JQi50eHQsIG1pYnMvTkVULVNOTVAtRVhURU5ELU1JQi50eHQ6CiAKLSAgIE1pbm9yIE1JQiBmaXhlcyAoYmFja3BvcnRlZCByMTgzMjAsIHIxODMyMSBhbmQgcjE4MzI1KS4KKyAgIFVwZGF0ZWQgTUlCIHJldmlzaW9uIGhpc3RvcnkuCiAKIDIwMTAtMDMtMTcgMTM6MjkgIGJ2YXNzY2hlCiAKQEAgLTI2ODUsODUgKzQ1MDQxLDI5NyBAQAogICAgQ0hBTkdFUzogQlVHOiAyOTcxMjU3OiBGaXhlZCB3aW5FeHRETEwgaGFuZGxpbmcgb2YgbXVsdGktdmFyYmluZAogICAgZ2V0TmV4dCByZXF1ZXN0cyB3aXRoIE9JRHMgaW4gcmV2ZXJzZSBsZXhpY29ncmFwaGljYWwgb3JkZXIuCiAKLTIwMTAtMDMtMTQgMjI6NTYgIGR0czEyCisyMDEwLTAzLTE3IDEwOjI1ICBidmFzc2NoZQogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgTW9yZSB3aW5FeHRETEwgZGVidWcgb3V0cHV0IHR1bmluZy4KIAotMjAxMC0wMy0xNCAyMjozMSAgZHRzMTIKKzIwMTAtMDMtMTYgMTk6MzEgIGJ2YXNzY2hlCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBtaWJzL05FVC1TTk1QLUFHRU5ULU1JQi50eHQ6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDb21waWxlcyBub3cgd2l0aCBNSUIgY29tcGlsZXJzIHRoYXQgZG8gbm90IHJlY29nbml6ZSBhIGRvdWJsZQorICAgZGFzaCBhcyB0aGUgZW5kIG9mIGEgTUlCIGNvbW1lbnQuCiAKLTIwMTAtMDMtMTQgMjI6MjggIGR0czEyCisyMDEwLTAzLTE2IDE5OjI3ICBidmFzc2NoZQogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBtaWJzL05FVC1TTk1QLUVYVEVORC1NSUIudHh0OgogCi0gICBtYWtlIGRlcGVuZAorICAgRml4ZWQgdHdvIHN5bnRheCBlcnJvcnMuCiAKLTIwMTAtMDMtMTQgMjI6MTkgIGR0czEyCisyMDEwLTAzLTE2IDE5OjE4ICBidmFzc2NoZQogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAotICAgbWFrZSBkZXBlbmQKKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGZpeGVkIGEgYnVnIGluIGdldE5leHQgaGFuZGxpbmcgdGhhdAorICAgY291bGQgY2F1c2UgdGhlIE1JQiBvdXRwdXQgdG8gYmUgdHJ1bmNhdGVkLgogCi0yMDEwLTAzLTE0IDIyOjE5ICBkdHMxMgorMjAxMC0wMy0xNiAxODo1MCAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBNYWRlIHdpbkV4dERMTCBkZWJ1ZyBvdXRwdXQgbW9yZSBkZXRhaWxlZC4KIAotMjAxMC0wMy0xNCAyMjoxMCAgZHRzMTIKKzIwMTAtMDMtMTYgMTU6MjQgIGJ2YXNzY2hlCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgTWFkZSBzdXJlIHRoYXQgQysrIHByb2dyYW1zIHRoYXQgaW5jbHVkZSBOZXQtU05NUCBoZWFkZXIgZmlsZXMKKyAgIGNvbXBpbGUgYWdhaW4uCiAKLTIwMTAtMDMtMTQgMjI6MDcgIGR0czEyCisyMDEwLTAzLTE1IDA3OjIwICBtYWdmcgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICBNYWtlIGl0IGNvbXBpbGUgd2l0aCAtLWRpc2FibGUtZGVwcmVjYXRlZCBhZ2Fpbi4KKworMjAxMC0wMy0xNSAwNzoxOSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYzoKKworICAgRGlzYWJsZSBhbGwgdGhlIHByaW50aW5nIGlmIGRlYnVnIG91dHB1dCBpcyBvZmYuCisKKzIwMTAtMDMtMTUgMDA6MTcgIHRhbmRlcnMKKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5ncyByZWdhcmRpbmcgcHJpbnRmIGZvcm1hdAorCisyMDEwLTAzLTE1IDAwOjA3ICB0YW5kZXJzCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3MgcmVnYXJkaW5nIHByaW50ZiBmb3JtYXQKKworMjAxMC0wMy0xNCAyMTowNSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIG1ha2Ugc3VyZSBoZWFkZXIgaWZkZWYgbmFtZSBpcyB1bmlxdWUKKworMjAxMC0wMy0xNCAyMTowNCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgYWRkIG1pc3NpbmcgaW5pdC9zaHV0ZG93biBwcm90b3R5cGVzIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTAzLTE0IDIxOjAzICByc3RvcnkKKworICAgKiBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBtb3ZlIGRlYnVnIG1lc3NhZ2UgZWFybGllcgorCisyMDEwLTAzLTE0IDIxOjAyICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmM6CisKKyAgIGFkZCBwcm90b3R5cGUgZm9yIG5ldHNubXBfaW5pdF9jb250YWluZXI7IGZpeCBjb21wbGVyIHdhcm5pbmcKKworMjAxMC0wMy0xNCAyMDo1MSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgQ29ycmVjdCBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4gYW5kIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybgorICAgZm9yIHRoZSBORVRTTk1QX05PX0RFQlVHR0lORyBjYXNlCisKKzIwMTAtMDMtMTQgMTk6MTAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbmFtZSBjZXJ0IGluaXQvc2h1dGRvd24gZnVuY3M7IG9ubHkgY29tcGlsZSBjZXJ0X3V0aWxzIGlmCisgICB1c2luZy9oYXZlIFNTTDsgaW5pdCBjZXJ0cyBmcm9tIHRscyBiYXNlCisKKzIwMTAtMDMtMTQgMTk6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNhbGwgbmV0c25tcF9pbml0X29wZW5zc2wgaW5zdGVhZCBvZiBuZXRzbm1wX2luaXRfdGxzYmFzZQorCisyMDEwLTAzLTE0IDE5OjA5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgdXBkYXRlIGZvciByZW5hbWVkIG9iamVjdHMgaW4gdmVyc2lvbiAwOCBvZiB0aGUgZHRscyBkcmFmdAorCisyMDEwLTAzLTE0IDE5OjA4ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLCBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIsIGFnZW50L21pYmdyb3VwL3RzbS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIGltcG9ydCBpbml0aWFsIGNvZGUgZm9yIGR0bHMgbWlicworCisyMDEwLTAzLTE0IDE5OjA4ICByc3RvcnkKKworICAgKiBtaWJzL1RMU1RNLU1JQi50eHQ6CisKKyAgIFRMU1RNLU1JQiBmcm9tIGRyYWZ0LWlldGYtaXNtcy1kdGxzLXRtLTA5LnR4dAorCisyMDEwLTAzLTE0IDE3OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgRml4ZWQgYSBmZXcgbW9yZSBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xNCAxNDoxMCAgYnZhc3NjaGUKKworICAgKiBwZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbDoKKworICAgRm9sbG93LXVwIGZvciByMTczODQ6IGNoYW5nZWQgTkVUU05NUF9EU19NQVhfU1VCSURTIGZyb20gNDAgdG8KKyAgIDQ4LgorCisyMDEwLTAzLTE0IDEzOjUzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDaGFuZ2VzOgorICAgLSBSZW1vdmVkIC1Xbm8tY2hhci1zdWJzY3JpcHRzIGZyb20gREVWRkxBR1MuIFVzaW5nIGEgdmFyaWFibGUgb3IKKyAgIGV4cHJlc3Npb24gb2YKKyAgIHR5cGUgY2hhciBhcyBhbiBhcnJheSBpbmRleCBpcyBhbG1vc3QgYWx3YXlzIGFuIGVycm9yLgorICAgRnVydGhlcm1vcmUsCisgICAtV2NoYXItc3Vic2NyaXB0IGRvZXMgbm90IHRyaWdnZXIgYW55IHdhcm5pbmdzIG9uIHRoZSBOZXQtU05NUAorICAgY29kZSBiYXNlLgorICAgLSBSZW1vdmVkIC1XaW5saW5lIGZyb20gREVWRkxBR1MuIE5vdCBvbmx5IHdhcyBub2JvZHkgcGF5aW5nCisgICBhdHRlbnRpb24gdG8gdGhlCisgICBtZXNzYWdlcyB0cmlnZ2VyZWQgYnkgLVdpbmxpbmUsIGJ1dCByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGdjYworICAgY29tcGlsZXIgYXJlCisgICBiZXR0ZXIgdGhhbiBodW1hbnMgYXQgZGVjaWRpbmcgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBiZSBpbmxpbmVkCisgICBhbmQgd2hpY2gKKyAgIG9uZXMgbm90LgorCisyMDEwLTAzLTE0IDEzOjM5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlcmFuIGF1dG9yZWNvbmYuCisKKzIwMTAtMDMtMTQgMTM6MzkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xNCAxMzozNiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgUmVtb3ZlZCB0aGUgJzB4JyBwcmVmaXggYWdhaW4gZnJvbSBhIGRlYnVnIHN0YXRlbWVudCB0aGF0IHdhcworICAgaW50cm9kdWNlZCBpbiByMTgyODIuCisKKzIwMTAtMDMtMTMgMTk6MDcgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL0FTTi54cywgcGVybC9PSUQvT0lELnhzLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9UcmFwUmVjZWl2ZXIvcHBwb3J0LmgsICAgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBGaXhlZCBtb3N0IGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgc291cmNlIGNvZGUgaW4gdGhlCisgICBwZXJsIHN1YmRpcmVjdG9yeS4KKyAgIE5vdGU6IHRoZXNlIGNoYW5nZXMgbWF5IGNvbnRhaW4gc29tZSByZWFsIGJ1ZyBmaXhlcy4KKworMjAxMC0wMy0xMyAwOTo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xMyAwMToxNiAgaGFyZGFrZXIKKworICAgKiBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGRlZmluZSB0aGUgVExTVENQIERPTUFJTgorCisyMDEwLTAzLTEzIDAxOjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgZml4IGlmZGVmIHR5cG8KKworMjAxMC0wMy0xMiAyMDoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoYW5nZSBkZWJ1Z2dpbmcgc3ltYm9sIG5hbWVzIHRvIGEgZ2VuZXJpYyB0bHMgc3RyaW5nCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGluaXRpYWwgd29ya2luZyBTTk1QIG92ZXIgVExTIG92ZXIgVENQIGNvbm5lY3Rpb24KKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHByaW50IGEgbW9yZSBjb21wbGV0ZSBPcGVuU1NMIHN0YWNrCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZpeCBhc3NlcnQgc3RhdGVtZW50cworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBhZGRlZCBhbiBhY2NlcHRlZF9iaW8gcG9pbnRlciBmb3IgdGhlIGJpbyBhZnRlciBTU0xfYWNjZXB0CisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhZGQgdGhlIGFiaWxpdHkgZm9yIGZfY29weSBhbmQgZl9jb25maWcKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgbWlzc2luZyA7CisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZCBhIGZfY29weSBwb2ludGVyCisKKzIwMTAtMDMtMTIgMjA6MjAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHJldHVybiBpbnQgbm90IGludCAqIG9uIGVycm9yCisKKzIwMTAtMDMtMTIgMjA6MjAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZGVkIGEgZl9jb25maWcgZnVuY3Rpb24gZm9yIHRyYW5zcG9ydHMKIAogMjAxMC0wMy0xMiAxMTo1MyAgZHRzMTIKIApAQCAtMjc3Myw2ICs0NTM0MSwxMyBAQAogICAgaGVhZGVyIHRva2VuCiAgICBQYXRjaCBzdXBwbGllZCBieSBEYW4gTmVsc29uCiAKKzIwMTAtMDMtMTIgMTE6NDMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYzoKKworICAgUmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mCisgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MoKQorCiAyMDEwLTAzLTExIDE2OjUyICBkdHMxMgogCiAgICAqIG1hbi9zbm1wY21kLjEuZGVmOgpAQCAtMjc4NSwxMiArNDUzNjAsMjQgQEAKIAogICAgUmVtb3ZlIG1lbnRpb24gb2YgdGhlIChhYmFuZG9uZWQpICdkYXRhc2V0MicgaGVscGVyLgogCi0yMDEwLTAzLTExIDE2OjAzICBkdHMxMgorMjAxMC0wMy0xMSAxNTo1OSAgZHRzMTIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBEb24ndCBpbml0aWFsaXNlIHRoZSBUTFMgdHJhbnNwb3J0IHVubGVzcyBpdCdzIGFjdHVhbGx5IGJlZW4KKyAgIGNvbmZpZ3VyZWQgaW4uCisKKzIwMTAtMDMtMTEgMTU6NDcgIHJzdG9yeQogCiAgICAqIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaDoKIAotICAgVXNlIFNOTVBfVE1QRElSIGluc3RlYWQgb2YgVE1QRElSCi0gICBCYWNrcG9ydCBvZiByZXZpc2lvbiAxODI2MgorICAgdXNlIFNOTVBfVE1QRElSIGluc3RlYWQgb2YgVE1QRElSCisKKzIwMTAtMDMtMTEgMTU6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBxdWVyeSByaWdodCBib29sICh0c20gcHJlZml4IGlzIGxpYiBib29sLCBub3QgYXBwKQogCiAyMDEwLTAzLTExIDE1OjA4ICBkdHMxMgogCkBAIC0yODA4LDYgKzQ1Mzk1LDE1IEBACiAgICBDSEFOR0VTOiBQQVRDSDogMjkzNzk5NjogQWRkIERhdGU6IGhlYWRlciB0byBlbWFpbCBzZW5kIGJ5CiAgICB0cmFwdG9lbWFpbAogCisyMDEwLTAzLTExIDE0OjUwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5Njc0MDA6IFJldHJpZXZlIGVycm9yIGNvdW50ZXJzIGZvciB0aGUKKyAgIEV0aGVyTGlrZS1NSUIKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEpvc2VmIE1vZWxsZXJzLgorCiAyMDEwLTAzLTExIDE0OjIzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYzoKQEAgLTI4MjMsNiArNDU0MTksMjEgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk1NjY1NzogSGFuZGxlIG92ZXItbGVuZ3RoIEFnZW50WCBPSURzLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgUm9iIFdlc3QKIAorMjAxMC0wMy0xMSAxMjoyMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYzoKKworICAgUHJvdmlkZSBtaXNzaW5nIGRlYnVnIHBhcmFtZXRlci4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCisyMDEwLTAzLTExIDEyOjIxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jOgorCisgICBQcm92aWRlIG1pc3NpbmcgKGR1bW15KSByZXR1cm4gdmFsdWUsIHRvIHN1cHByZXNzIGNvbXBpbGVyCisgICB3YXJuaW5nLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kcmVhcyBKYWVnZXIuCisKIDIwMTAtMDMtMTEgMTI6MTkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jOgpAQCAtMjgzNyw3ICs0NTQ0OCw3IEBACiAKIDIwMTAtMDMtMTEgMTE6NTcgIGR0czEyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0OgogCiAgICBSZXBsYWNlIGJhY2txdW90ZSB3aXRoIHNpbmdsZSBxdW90ZSBpbiBjb25maWd1cmUgb3V0cHV0IG1lc3NhZ2UuCiAgICBXaGlsZSB0aGlzIGNoYW5nZSBpcyBwcm9iYWJseSBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBpdCBmZWVscwpAQCAtMjg2OCwyMSArNDU0NzksOTUyIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5NTA4NDU6IEZpeCBpZkhpZ2hTcGVlZCBjYWxjdWxhdGlvbgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvCiAKLTIwMTAtMDMtMDMgMTY6MTEgIGpzYWZyYW5laworMjAxMC0wMy0xMSAwODoyNiAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vQVNOLnhzLCBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgcGVybC9PSUQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL09JRC9PSUQueHMsIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L2FnZW50LnhzLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54czoKKworICAgTWFkZSBjb21waWxhdGlvbiBvZiB0aGUgUGVybCBtb2R1bGUgTmV0U05NUC5wbSBvbiBXaW5kb3dzIG1vcmUKKyAgIHNpbGVudDogYWRkZWQgY29tcGlsZXIgZmxhZ3MgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworICAgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MgYW5kIG1hZGUgc3VyZSB0aGF0ICNpbmNsdWRlCisgICA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IG9jY3VycyBiZWZvcmUgYW55IG90aGVyIGluY2x1ZGUgZmlsZQorICAgdGhhdCBkZWZpbmVzIF9XSU4zMl9XSU5OVC4KKworMjAxMC0wMy0xMCAyMzozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGNyZWF0ZSBpbmRleGVzIGZvciBjZXJ0aWZpY2F0ZXMgaW4gY29uZmlnIHBhdGgKKworMjAxMC0wMy0xMCAxODo0OCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmM6CisKKyAgIEFkZGVkICIjaW5jbHVkZSA8dW5pc3RkLmg+IiBzdWNoIHRoYXQgb24gVW5peCBzeXN0ZW1zIHRoZQorICAgY29tcGlsZXIgZG9lcyBub3QgcHJpbnQgYSB3YXJuaW5nIGFib3V0IGEgbWlzc2luZyBkZWNsYXJhdGlvbiBmb3IKKyAgIHRoZSBmdW5jdGlvbiBjbG9zZSgpLgorCisyMDEwLTAzLTEwIDE4OjMwICByc3RvcnkKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sICAgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOgorCisgICB1cGRhdGUgdmVyc2lvbiB0byA1LjYuZGV2CisKKzIwMTAtMDMtMTAgMTg6MjkgIHJzdG9yeQorCisgICAqIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiB1cGRhdGUgVmVyc2lvbi1NdW5nZSBmb3IgcmVuYW1lZCBjb25maWd1cmUuYWMKKworMjAxMC0wMy0xMCAxODoyOSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLmFjOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogc2F2ZSBjb25maWd1cmUgY2FjaGUgZXZlcnkgb25jZSBpbiB3aGlsZQorCisyMDEwLTAzLTEwIDE2OjEyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW46CisKKyAgIFJlb3JkZXJlZCBzb21lIG9mIHRoZSBNYWtlZmlsZSBydWxlcyBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUKKyAgIGRpZmZzIHdpdGggbGlic25tcF9kbGwvTWFrZWZpbGUuaW4uCisKKzIwMTAtMDMtMTAgMTY6MTAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyLCBiYXRjaCBidWlsZGluZzogRExMIGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMy0xMCAxNjowNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgRml4ZWQgYSByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcgYnkgYWRkaW5nIGEgZm9yd2FyZAorICAgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBfY2FjaGVfZnJlZSgpLgorCisyMDEwLTAzLTEwIDE2OjA2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBXaW4zMi4KKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogUkVBRE1FOgorCisgICBhZGQgbWlzc2luZyBjb250cmlidXRvcnMKKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBmaXggcG90ZW50aWFsIGRvdWJsZSBmcmVlIGluIENPTlRBSU5FUl9GUkVFCisgICAtIGFsc28gYWRkZWQgc2V2ZXJhbCBjb21wYXJlIHJvdXRpbmVzCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiB3aGVuIGZyZWVpbmcgYSBjYWNoZSwgc3RvcCB0aW1lciBhbmQgY2FsbCBjYWNoZQorICAgZnJlZSBmdW5jCisgICAtIGFsc28gYWRkIG5ldHNubXBfY2FjaGVfcmVtb3ZlCisKKzIwMTAtMDMtMTAgMDM6NTIgIHJzdG9yeQorCisgICAqICBSRUFETUUsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICB1bmRvIGNvbW1pdCAxODIzNAorCisyMDEwLTAzLTEwIDAzOjQxICByc3RvcnkKKworICAgKiAgUkVBRE1FLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgTWVyZ2UgYnJhbmNoICdwdWxsbWUnIG9mIC4uL3RydW5rLXN0YWdpbmcKKworMjAxMC0wMy0wOSAxNzo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGV4cG9ydGVkIG5ldHNubXBfcmVhZF9tb2R1bGUoKSBmcm9tIG5ldHNubXAuZGxsCisgICBzdWNoIHRoYXQgTmV0U05NUC5wbSBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDMtMDkgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBTaW1wbGlmaWVkIHR3byBtYWtlZmlsZXMgdXNlZCBieSBidWlsZC5iYXQgKFdpbjMyKS4KKworMjAxMC0wMy0wOSAxNzoyNCAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBidWlsZGluZyBOZXRTTk1QLnBtIGRvZXMgbm8gbG9uZ2VyCisgICB0cmlnZ2VyIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHJlZGVmaW5pbmcgX1dJTjMyX1dJTk5UIG5vcgorICAgTlRERElfVkVSU0lPTi4KKworMjAxMC0wMy0wOSAxNzoyMiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBOZXRTTk1QLnBtIG1vcmUgc2lsZW50IGJ5CisgICBhZGRpbmcgdGhlIE1TVkMgY29tcGlsZXIgZmxhZ3MgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworICAgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MuCisKKzIwMTAtMDMtMDkgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgcmVtb3ZlIGRlYnVnIG1zZyB1c2VkIGR1cmluZyBkZWJ1Z2dpbmcKKworMjAxMC0wMy0wOSAxNzowMiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGluaXRpYWwgY2VydCB3cmFwcGVyIC0gdGVzdGluZyByZXBvIHdyaXRlIHByaXZzCisKKzIwMTAtMDMtMDkgMTA6MjAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW46CisKKyAgIFJlbW92ZWQgZHVwbGljYXRlIGJ1aWxkIHJ1bGVzLiBUaGVzZSBkdXBsaWNhdGUgcnVsZXMgd2VyZQorICAgaGFybWxlc3MgYnV0IHRyaWdnZXJlZCBhIHdhcm5pbmcuCisKKzIwMTAtMDMtMDkgMDI6MzggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZGlyZWN0b3J5IGNvbnRhaW5lciBlbmhhbmNlbWVudHMKKyAgIC0gZml4IHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgLSBhZGQgZmlsdGVyIGNhbGxiYWNrIHRvIGZpbHRlciBmaWxlcyByZXR1cm5lZAorICAgLSBhZGQgb3B0aW9uIHRvIHJldHVybiByZWxhdGl2ZSBhbmQgbm90IGZ1bGwgcGF0aHMKKyAgIC0gYWRkIG9wdGlvbiB0byBzb3J0IHJldHVybmVkIGxpc3QKKyAgIC0gYWRkIG9wdGlvbiB0byByZXR1cm4gZW1wdHkgY29udGFpbmVyIGluc3RlYWQgb2YgTlVMTCBpZiBubworICAgZmlsZXMgZm91bmQKKyAgIC0gY2hhbmdlIGRlZmF1bHQgY29udGFpbmVyIG5hbWUgdG8gZGlyZWN0b3J5IHRoYXQgd2FzIHNjYW5uZWQKKyAgIC0gdHdlYWsgZGVidWcvbG9nIG1lc3NhZ2VzCisKKzIwMTAtMDMtMDggMjM6MDcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogZGVmaW5lIGFuZCB1c2UgbmV3IE5FVFNOTVBfTE9HT05DRSBtYWNybworCisyMDEwLTAzLTA4IDIyOjQ0ICByc3RvcnkKKworICAgKiBtYW4vc25tcF9jb25maWcuNS5kZWYsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgTkVXUzogc25tcGxpYjogY29uZiBmaWxlcyBjYW4gbm93IGluY2x1ZGUgb3RoZXIgY29uZiBmaWxlcworICAgLSBhbHNvIHR3ZWFrZWQgZGVidWcgdG9rZW5zIGhlcmUgYW5kIHRoZXJlCisKKzIwMTAtMDMtMDggMjI6NDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgZml4IHR5cG8gKGNhdXNlZCBleHRlcm5hbCByZWZlcmVuY2Ugd2hlbiBEVExTVURQIGNvbmZpZ3VyZWQKKyAgIHdpdGhvdXQgZHRsc3RjcCkKKworMjAxMC0wMy0wNiAwMjoyNyAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV0c25tcF9jb250YWluZXIgZW5oYW5jZW1lbnRzOgorICAgLSBhZGQgZnJlZV9pdGVtIGZ1bmN0aW9uOyBkZWZhdWx0cyB0bworICAgbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWUKKyAgIC0gYWRkIENPTlRBSU5FUl9GUkVFX0FMTCBtYWNyby9mdW5jdGlvbiAobGlrZSBDT05UQUlORVJfQ0xFQVIgYnV0CisgICBjYWxscyBjb250YWluZXIgZnJlZV9pdGVtIGZvciBlYWNoIGl0ZW0gaW4gcHJpbWFyeSBjb250YWluZXIpCisgICAtIGFkZCBhYmlsaXR5IHRvIHNldCBvcHRpb25zIG9uIGJpbmFyeV9hcnJheSBjb250YWluZXJzCisKKzIwMTAtMDMtMDIgMTc6NTUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbjoKKworICAgTWFkZSBzdXJlIHRoYXQgd2luMzIvYnVpbGQuYmF0IHdvcmtzIGFnYWluIGJ5IGFkZGluZyBtaXNzaW5nCisgICBzb3VyY2UgZmlsZSBuYW1lcy4gU29ydGVkIHNvdXJjZSBmaWxlIG5hbWVzIGFscGhhYmV0aWNhbGx5IHRvby4KKworMjAxMC0wMy0wMiAxNjo1NCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE2NyAobWVyZ2Ugb2Ygc25tcGQgYW5kIHNubXBkc2RrIGFuZCBhbHNvIG9mCisgICBuZXRzbm1wbWlicyBhbmQgbmV0c25tcG1pYnNzZGspOiB0aGUgYmF0Y2ggZmlsZSB3aW4zMi9idWlsZC5iYXQKKyAgIHdvcmtzIGFnYWluIHdpdGggdGhlIFBsYXRmb3JtIFNESyBlbmFibGVkLgorCisyMDEwLTAzLTAyIDE2OjUyICBidmFzc2NoZQorCisgICAqIHdpbjMyL01ha2VmaWxlLWFwcHMuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MjE1IChyZXBsYWNlZCB0aGUgb2Jzb2xldGUgY2wuZXhlIG9wdGlvbiAvR1ggYnkKKyAgIHRoZSBlcXVpdmFsZW50IC9FSHNjOyBhZGRlZCAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiLCBhZGRlZAorICAgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgYW5kIHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVgpLgorCisyMDEwLTAyLTI4IDE1OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBXaW4zMjogZml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IHJlZGVmaW5pdGlvbiBvZgorICAgX1dJTjMyX1dJTk5UIGJ5IG1ha2luZyBzdXJlIHRoYXQgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBpcworICAgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+LgorCisyMDEwLTAyLTI4IDE1OjI0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZXBsYWNlZCB0aGUgb2Jzb2xldGUgL0dYIGJ5IHRoZQorICAgZXF1aXZhbGVudCAvRUhzYy4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIgorICAgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgdG8gbWFrZSBidWlsZGluZyB3aXRoIE1TVkMgMjAwOAorICAgbW9yZSBzaWxlbnQuCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVguIFRoZXNlCisgICBvcHRpb25zIGluZmx1ZW5jZSBob3cgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIGFyZSBnZW5lcmF0ZWQsCisgICB3aGljaCBhcmUgbm90IHVzZWQgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0LiAvWVggaXMgbm90CisgICBzdXBwb3J0ZWQgYnkgTVNWQyAyMDA4LgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZW1vdmVkIGEgZHVwbGljYXRlIG9jY3VycmVuY2Ugb2YKKyAgIHN0cnRvdWxsLm9iai4KKworMjAxMC0wMi0yOCAxNDoxMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Db25maWd1cmUsIHdpbjMyL01ha2VmaWxlLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE2NyAobWVyZ2Ugb2Ygc25tcGQgYW5kIHNubXBkc2RrIGFuZCBhbHNvIG9mCisgICBuZXRzbm1wbWlicyBhbmQgbmV0c25tcG1pYnNzZGspOiBhcHBsaWVkIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyB0bworICAgdGhlIHdpbjMyL0NvbmZpZ3VyZSBzY3JpcHQgYW5kIHdpbjMyL01ha2VmaWxlLmluLgorCisyMDEwLTAyLTI3IDEzOjExICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaCwgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCwgICAKKyAgICAgIHNubXBsaWIvZ2V0b3B0LmMsIHNubXBsaWIvZ2V0dGltZW9mZGF5LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zdHJsY3B5LmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b3VsbC5jLCAgIAorICAgICAgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3VjZF9jb21wYXQuYywgc25tcGxpYi93aW5waXBlLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogZGVjbGFyZWQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCBmcm9tIHRoZQorICAgTmV0LVNOTVAgRExMIGFzIE5FVFNOTVBfSU1QT1JULiBUaGUgcmVzdWx0IGlzIGEgbWlub3IKKyAgIG9wdGltaXphdGlvbjogY29kZSB0aGF0IHVzZXMgdGhlIE5ldC1TTk1QIERMTCB3aWxsIG5vdyBjYWxsIHRoZQorICAgRExMLWV4cG9ydGVkIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnN0ZWFkIG9mIGluZGlyZWN0bHkgdmlhIHRoZQorICAgc3R1YiBpbiB0aGUgaW1wb3J0IGxpYnJhcnkuCisKKzIwMTAtMDItMjcgMTE6NTAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBSZW1vdmVkIGEgcmVkdW5kYW50IHN0cm5jYXNlY21wKCkgZGVjbGFyYXRpb24uCisKKzIwMTAtMDItMjcgMDk6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zdHJ0b2tfci5jOgorCisgICBGaXhlZCBhIHR5cG8gaW4gYSBzb3VyY2UgY29kZSBjb21tZW50LgorCisyMDEwLTAyLTI3IDA5OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTgxODkgKHJzdG9yeSk6IGJ1aWxkcyBhZ2FpbiBvbiBXaW5kb3dzLgorCisyMDEwLTAyLTI1IDE3OjUzICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgIAorICAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgIAorICAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyLnNsbiwgd2luMzIvd2luMzJkbGwuZHN3LCAgIAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICBSZXZlcnRlZCByMTgyMDcgKGRzcC9kc3cgdG8gdmNwcm9qL3NsbiBjb252ZXJzaW9uKSBleGNlcHQgdGhlCisgICBzdXBwcmVzc2lvbgorICAgbGlzdCBjaGFuZ2VzLiBUaGUgZ29hbCBvZiB0aGlzIGNvbnZlcnNpb24gd2FzIHR3b2ZvbGQ6IG5vdCBvbmx5CisgICB0byBiZSBhYmxlCisgICB0byBsb2FkIHRoZSBwcm9qZWN0IGZpbGVzIGluIE1TVkMgMjAwMiAtIDIwMDggYnV0IGFsc28gdG8gYmUgYWJsZQorICAgdG8gY29tbWl0CisgICBjaGFuZ2VzIG1hZGUgZnJvbSBpbnNpZGUgdGhlIE1TVkMgMjAwOCBJREUuIFVuZm9ydHVuYXRlbHkKKyAgIGNvbnZlcnRpbmcgZHNwL2RzdworICAgZmlsZXMgdG8gdmNwcm9qL3NsbiBmaWxlcyB3aXRoIE1TVkMgMjAwOCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvCisgICBsb2FkIHRoZQorICAgdmNwcm9qL3NsbiBmaWxlcyB3aXRoIGVhcmxpZXIgTVNWQyB2ZXJzaW9ucy4gV2h5IG9uIGVhcnRoIGRpZAorICAgTWljcm9zb2Z0CisgICBkZWNpZGUgdG8gcHV0IGEgdmVyc2lvbiBudW1iZXIgaW4gWE1MIGZpbGVzID8KKworMjAxMC0wMi0yNCAxOTo0MSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgd2luMzIvbGliYWdlbnQsICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMsIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMudmNwcm9qLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCB3aW4zMi9saWJzbm1wLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIHdpbjMyL25ldHNubXBtaWJzLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCB3aW4zMi9zbm1wYnVsa2dldCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgd2luMzIvc25tcGJ1bGt3YWxrLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQsICAgCisgICAgICB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgd2luMzIvc25tcGRlbHRhLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLAorICAgICAgICAgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCB3aW4zMi9zbm1wZ2V0LCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0LCB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIHdpbjMyL3NubXBuZXRzdGF0LCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCB3aW4zMi9zbm1wc2V0LCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMsIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCB3aW4zMi9zbm1wdGFibGUsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdGVzdCwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCB3aW4zMi9zbm1wdHJhbnNsYXRlLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIHdpbjMyL3NubXB0cmFwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIHdpbjMyL3NubXB1c20sICAgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHZhY20sIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgd2luMzIvc25tcHdhbGssICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzIuc2xuLCB3aW4zMi93aW4zMmRsbC5kc3csICAgCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIChyZXZlcnRlZCkgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBjb252ZXJ0ZWQgLmRzcC8uZHN3IGZpbGVzIHRvCisgICAudmNwcm9qLy5zbG4gZmlsZXMuIFRoaXMgaW1wbGllcyB0aGF0IHN1cHBvcnQgZm9yIE1TVkMgNi4wIGhhcworICAgYmVlbiBkcm9wcGVkIGFuZCB0aGUgbWluaW11bSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB2ZXJzaW9uCisgICByZXF1aXJlZCB0byBidWlsZCB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaXMgTWljcm9zb2Z0IFZpc3VhbAorICAgU3R1ZGlvIC5ORVQgKDIwMDIpLgorCisyMDEwLTAyLTIzIDE5OjAzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogd2hlbiBnZW5lcmF0aW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN5c3RlbQorICAgbG9jYXRpb24gYW5kIG5vIGRvbWFpbiBuYW1lIGlzIGZvdW5kIGluIC9ldGMvcmVzb2x2LmNvbmYsIHVzZQorICAgIkBuby53aGVyZSIgaW5zdGVhZCBvZiAiIi4KKworMjAxMC0wMi0yMyAxODo1MCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIG00L2FjX3Byb21wdF91c2VyLm00OgorCisgICBDSEFOR0VTOiBidWlsZGluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBubworICAgbG9uZ2VyIGludm9rZSAidGFpbCAtMSIsIHdoaWNoIGlzIG5vdCBQT1NJWC1jb21wbGlhbnQuCisKKzIwMTAtMDItMjMgMTg6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgdGVzdGluZy90ZXN0cy9UMzYwZHRsc3VkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM5OWFsaWFzOgorCisgICBSZW1vdmVkIGFsbCB0cmFuc3BvcnQgdGVzdHMgc2luY2UgaXQncyBpbXBvc3NpYmxlIHRvIGRldGVybWluZQorICAgd2hlcmUgdGhleSBjYW4gc2FmZWx5IG9wZXJhdGUgKHdhcyBzdG9wcGluZyB0YW5kZXJzJyBuaWdodGx5CisgICB0ZXN0cyBmcm9tIHN1Y2NlZWRpbmcpCisKKzIwMTAtMDItMjMgMTg6NDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZXJyb3IgYW5kIGRlYnVnZ2luZyBvdXRwdXQKKworMjAxMC0wMi0yMyAxODo0MCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0aGUgc2VydmVyIGNvbnRleHQgZ2VuZXJhdG9yIHRvIGFjdHVhbGx5LCB1bSwgcmV0dXJuIHRoZQorICAgY29udGV4dC4KKworMjAxMC0wMi0yMyAxODo0MCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIGluaXRpYWxpemUgdGhlICdyZXMnIHZhcmlhYmxlIHNpbmNlIGl0J3MgY2hlY2tlZAorCisyMDEwLTAyLTIzIDE4OjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIHByb2dyZXNzIHRvd2FyZCBhIHJlYWwgaW1wbGVtZW50YXRpb24KKworMjAxMC0wMi0yMyAxODozOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIHRsc3RjcCBjdG9yIGludm9jYXRpb24KKworMjAxMC0wMi0yMyAxODozOCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oOgorCisgICByZXF1aXJlIFRMU0Jhc2UKKworMjAxMC0wMi0yMyAxODozNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkZWQgaG9zdCBpZGVudGlmaWVyIGFzIG91dHB1dAorCisyMDEwLTAyLTIzIDE4OjM1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzaWduaWZpY2FudCBtb3JlIHdvcmsgb24gdGhlIFRMUyBUQ1AgZG9tYWluCisKKzIwMTAtMDItMjMgMTc6NDMgIGJ2YXNzY2hlCiAKICAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICBSZWdlcmF0ZSBjb25maWd1cmUgc2NyaXB0IGFmdGVyIHJldi4gMTgxOTMgKGF1dG9tYXRpYyBSUE0gdmVyc2lvbgotICAgZGV0ZWN0aW9uKS4KLSAgIE5ldC1TTk1QIHNob3VsZCBjb21waWxlIHdpdGggcnBtLTQuNiBhdXRvbWF0aWNhbGx5LgorICAgRm9sbG93LXVwIGZvciByMTgxOTMgKGpzYWZyYW5layk6IHJlcmFuIGF1dG9yZWNvbmYgZm9yIHRoZSB0cnVuaworICAgYW5kIHRoZSA1LjUgYnJhbmNoLgorCisyMDEwLTAyLTIzIDE0OjU4ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHVzZSBORVRTTk1QX1BSSXogaW5zdGVhZCBvZiAlegogCiAyMDEwLTAyLTIzIDEyOjI3ICBqc2FmcmFuZWsKIAotICAgKiBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgogCiAgICBDSEFOR0VTOiBidWlsZGluZzogRml4ZWQgY29tcGlsYXRpb24gd2l0aCBycG0tNC42LgogICAgVHVybiBvbiB0aGUgbGVnYWN5IEFQSSB3aGVuIHJwbS00LjYgaXMgZGV0ZWN0ZWQuCiAKKzIwMTAtMDItMjMgMDc6MzggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmV2ZXJ0ZWQgcjE4MDAwIChkaXNhYmxpbmcgU0lHQUxSTSBzdXBwb3J0KSBiZWNhdXNlIHRoaXMgaW52b2x2ZXMKKyAgIGEgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UuCisKKzIwMTAtMDItMjMgMDA6MzYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRDUERvbWFpbi5jOgorCisgICBmaXggdHlwbyBpbiBjb21tZW50CisKKzIwMTAtMDItMjMgMDA6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgZGVidWcgbXNnIHR3ZWFrczsgdXNlIG5ldyB0cmFucG9ydCBmdW5jdGlvbnMKKyAgIC0gYWRkIGRlYnVnIGhlYWRlciBmb3Igc25tcCB2ZXJzaW9uCisgICAtIGFkZCBsZW5ndGggdG8gZGVidWcgc2VuZC9yZWNlaXZlIG1lc3NhZ2VzCisgICAtIHVzZSBuZXcgdHJhbnBvcnQgZnVuY3Rpb25zIGZvciBzZW5kL3JlY3YvZmluZGluZyBwZWVyIGFkZHJlc3MKKworMjAxMC0wMi0yMyAwMDoyNSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhZGQgbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcsIG5ldHNubXBfdHJhbnNwb3J0X3NlbmQgJgorICAgbmV0c25tcF90cmFuc3BvcnRfcmVjdgorICAgLSBtb3ZlcyB0cmFuc3BvcnQgbWFuaXB1bGF0aW9uIGludG8gdHJhbnNwb3J0IGNvZGUKKyAgIC0gY2VudHJhbCBwbGFjZSBmb3IgbG9nZ2luZy9kZWJ1Z2dpbmcgc2VudC9yZWNlaXZlZCBkYXRhCisKKzIwMTAtMDItMjIgMTk6MzMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vCisgICBsb25nZXIgaW52b2tlICJ0YWlsIC0xIiwgd2hpY2ggaXMgbm90IFBPU0lYLWNvbXBsaWFudC4KKworMjAxMC0wMi0yMiAxOToyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE4Ni4gUmVncmVzc2lvbiB0ZXN0IDM0ICh3aGV0aGVyIGF1dGhlbnRpY2F0aW9uCisgICBmYWlsdXJlIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkKSBwYXNzZXMgbm93IGFnYWluLgorCisyMDEwLTAyLTIyIDA5OjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBtYWRlIHN1cmUgdGhhdCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIGRvZXMKKyAgIG5vdCBjcmVhdGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIE1JQiBzdWJ0cmVlIHJlZ2lzdHJ5LgorCisyMDEwLTAyLTIyIDA5OjExICBidmFzc2NoZQorCisgICAqIGFnZW50LCBhcHBzLCBhcHBzL3NubXBuZXRzdGF0OgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDItMjIgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgbGliZWF5MzIgKE9wZW5TU0wpIGNvbmZpZ3VyZSB0ZXN0IGZvcgorICAgTWluR1cuCisKKzIwMTAtMDItMjIgMDg6MzEgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBsaWJlYXkzMiAoT3BlblNTTCkgY29uZmlndXJlIHRlc3QgZm9yCisgICBNaW5HVy4KKworMjAxMC0wMi0yMiAwODoxMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQnVpbGRzIGFnYWluIHdpdGggTWluR1cgd2hlbiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKworMjAxMC0wMi0yMSAxODo1OCAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9saWJzZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHdpbjMyL3dpbjMyZGxsLmRzdzoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiByZW5hbWVkIGxpYnNkbGwuZHN3IGludG8gd2luMzJkbGwuZHN3LgorICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIGxpbmtpbmcgdGhlIE5ldC1TTk1QCisgICBhcHBsaWNhdGlvbnMgd2l0aCBuZXRzbm1wLmRsbCBieSBhZGRpbmcgYWxsIGFwcGxpY2F0aW9uIHByb2plY3RzCisgICB0byB0aGUgc2FtZSB3b3Jrc3BhY2UgdGhhdCBpcyB1c2VkIGZvciBidWlsZGluZyB0aGUgRExMLgorICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIG5ldHNubXAuZGxsIGxlc3MgZXJyb3IKKyAgIHByb25lIGJ5IGxldHRpbmcgdGhlIGNvbXBpbGVyIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlCisgICBwcmVwcm9jZXNzb3Igc3ltYm9sIE5FVFNOTVBfVVNFX0RMTCBoYXMgbm90IGJlZW4gZGVmaW5lZC4KKworMjAxMC0wMi0yMSAxODo1MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQWRkZWQgbGlic25tcC5kZWYgdG8gdGhlIGxpc3Qgb2YKKyAgIGxpYnNubXBfZGxsLmRzcCBzb3VyY2UgZmlsZXMgc3VjaCB0aGF0IHRoZSBETEwgaXMgcmVidWlsdCB3aGVuCisgICB0aGUgLmRlZiBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLgorCisyMDEwLTAyLTIxIDE4OjQ1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGV4cG9ydGVkIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKCkgZnJvbQorICAgbmV0c25tcC5kbGwuCisKKzIwMTAtMDItMjEgMTc6MzkgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1vcmUgV2luMzIgSVB2NiBzb3VyY2UgY29kZSBjb25zaXN0ZW5jeSBpbXByb3ZlbWVudHM6CisgICAtIE1vdmVkICN1bmRlZiBIQVZFX0lGX05BTUVUT0lOREVYIGZyb20gc25tcGxpYi8qLmMgdG8KKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLgorICAgLSBDaGFuZ2VkIHRoZSBnbG9iYWwgaW42YWRkcl9hbnkgdmFyaWFibGUgaW50byBhIHN0YXRpYyB2YXJpYWJsZQorICAgc3VjaCB0aGF0CisgICBtdWx0aXBsZSBkZWZpbml0aW9ucyBkbyBub3QgdHJpZ2dlciBhIGxpbmtlciBlcnJvci4KKyAgIC0gQWRkZWQgdHlwZWRlZnMgZm9yIHVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QgYW5kIGludDE2X3QuCisgICAtIFJlcGxhY2VkICcjaWYgTkVUU05NUF9FTkFCTEVfSVBWNicgYnkgJyNpZmRlZgorICAgTkVUU05NUF9FTkFCTEVfSVBWNicuCisKKzIwMTAtMDItMjEgMDg6MzAgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYzoKKworICAgbWFrZSBzdXJlIHRoYXQgSU5BRERSX05PTkUgaXMgZGVmaW5lZCAoZml4ZXMgYnVpbGQgZXJyb3Igb24KKyAgIFNvbGFyaXMpCisKKzIwMTAtMDItMTkgMTk6MzkgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFN5bmNocm9uaXplZCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBhbmQKKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLgorCisyMDEwLTAyLTE5IDE0OjE4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGxpYnNubXAgYnVpbGRzIGFnYWluIGFzIGEgRExMIHdoZW4gSVB2NiBpcworICAgZW5hYmxlZC4KKworMjAxMC0wMi0xOSAxMzoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRm9sbG93IHVwIGZvciByMTgxNjQ6IHN5bmNocm9uaXplZCBsaWJzbm1wLmRlZi5pbiB3aXRoCisgICBsaWJzbm1wLmRlZgorCisyMDEwLTAyLTE5IDA5OjA1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogYWRkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiBpbgorICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggc3VjaCB0aGF0IHRoZSBNU1ZDIGNvbXBpbGVyCisgICBkb2Vzbid0IGdldCBjb25mdXNlZCBieSB0aGUgbWFsbG9jIHJlZGVmaW5pdGlvbiB3aGVuIGJ1aWxkaW5nCisgICBsaWJzbm1wIGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjU5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgRXhwb3J0ZWQgbmV0c25tcF9wYXJzZV9hcmdzKCkgc3VjaCB0aGF0IHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMKKyAgIGJ1aWxkIGFnYWluIHdoZW4gbGlic25tcCBpcyBidWlsdCBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1vdmVkIE1TVkMgT3BlblNTTCBsaW5rZXIgc2V0dGluZ3MgZnJvbQorICAgc25tcGxpYi9rZXl0b29scy5jIHRvIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIHN1Y2ggdGhhdAorICAgdGhlc2Ugc2V0dGluZ3MgYXJlIG5vdCBvbmx5IGVmZmVjdGl2ZSB3aGVuIGJ1aWxkaW5nIHNubXBsaWIgYXMgYQorICAgc3RhdGljIGxpYnJhcnkgYnV0IGFsc28gd2hlbiBhbnkgTmV0LVNOTVAgYXBwbGljYXRpb24gaXMgYnVpbHQKKyAgIHRoYXQgbGlua3Mgd2l0aCBzbm1wbGliIGFzIGEgc3RhdGljIGxpYnJhcnkgb3IgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6MzIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBXaW4zMiBjbGVhbnVwOiBNU1ZDIC8gRExMIHRlc3RzIG5vdyB1c2UgdGhlIG9mZmljaWFsbHkgZW5kb3JzZWQKKyAgIG1hY3JvIG5hbWVzLgorCisyMDEwLTAyLTE5IDA3OjUwICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgQnVpbGRzIGFnYWluLgorCisyMDEwLTAyLTE5IDA2OjQ3ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBORVdTOiBzbm1wbGliOiBQQVRDSDogMjk0Mjk0MDogZnJvbSAiQmlsbCBGZW5uZXIiOiBBZGQgYSBuZXcKKyAgIGZ1bmN0aW9uLCBuZXRzbm1wX3BhcnNlX2FyZ3MsIHRoYXQgaXMgbGlrZSBzbm1wX3BhcnNlX2FyZ3MgYnV0CisgICB0YWtlcyBhbiBhZGRpdGlvbmFsIGJpdG1hc2ssIGZsYWdzLCB0byBhZmZlY3QgdGhlIGJlaGF2aW91ci4gQWxzbworICAgcmVtb3ZlIHRoZSBtYWdpYyBoYW5kbGluZyBvZiBzb21lIGFwcGxpY2F0aW9uIG5hbWVzLgorCisyMDEwLTAyLTE4IDE0OjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2JpbjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAyLTE4IDE0OjIwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIFNvcnRlZCBuYW1lcyBvZiBzb3VyY2UgZmlsZXMgYWxwaGFiZXRpY2FsbHkuCisKKzIwMTAtMDItMTggMTM6MDMgIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgc25tcGxpYi93aW5zZXJ2aWNlLmMsIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgd2luMzIvbmV0c25tcG1pYnNzZGssICAgCisgICAgICB3aW4zMi9zbm1wZHNkaywgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBkcm9wcGVkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIE5ldC1TTk1QIHdpdGgKKyAgIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuMCB3aXRob3V0IHBsYXRmb3JtIFNESy4gQnVpbGRpbmcKKyAgIE5ldC1TTk1QIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wICsgUFNESyBvciBhbnkgbGF0ZXIKKyAgIHZlcnNpb24gb2YgTVNWQyBpcyBzdGlsbCBwb3NzaWJsZSBob3dldmVyLgorICAgCisgICBOb3RlOiBpZiBpbiB0aGUgZnV0dXJlIGZvciB3aGF0ZXZlciByZWFzb24gaXQgc2hvdWxkIGJlY29tZQorICAgbmVjZXNzYXJ5IGFnYWluIHRvIGJlIGFibGUgdG8gYnVpbGQgTmV0LVNOTVAgd2l0aCBNU1ZDIHdpdGhvdXQKKyAgIHJlbHlpbmcgb24gdGhlIHBsYXRmb3JtIFNESyBoZWFkZXJzLCBwbGVhc2UgI2lmZGVmIG91dCB0aGUgTUlCCisgICBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZSBQU0RLIGhlYWRlcnMgaW5zdGVhZCBvZiBzcGxpdHRpbmcgdGhlCisgICB3b3Jrc3BhY2UgZmlsZXMgYWdhaW4uCisKKzIwMTAtMDItMTggMTI6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgZG9zMnVuaXguCisKKzIwMTAtMDItMTggMDk6NDUgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIFNvdXJjZSBjb2RlIGNsZWFudXA6CisgICAtIE1vdmVkIGRvY3VtZW50YXRpb24gb2YgbmV0c25tcF9sYXJnZV9mZF9zZXQgbWVtYmVycyB0byB0aGUKKyAgIGNvbW1lbnQKKyAgIGJsb2NrIGp1c3QgYWJvdmUgdGhlIGRlZmluaXRpb24gb2YgdGhpcyB0eXBlLgorICAgLSBSZW1vdmVkIHN1cGVyZmx1b3VzICdleHRlcm4gIkMiJyBzcGVjaWZpZXI6IHRoaXMgbGlua2FnZQorICAgc3BlY2lmaWVyCisgICBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gZGVjbGFyYXRpb25zIG9mIHZhcmlhYmxlcyBvZiBmdW5jdGlvbnMgYW5kCisgICBub3QKKyAgIG9uIHR5cGVkZWZzIG9yIHN0cnVjdCBkZWZpbml0aW9ucy4KKyAgIC0gUmFuIHRoaXMgaGVhZGVyIGZpbGUgdGhyb3VnaCBpbmRlbnQuCisKKzIwMTAtMDItMTggMDk6MjYgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgQ2hhbmdlczoKKyAgIC0gQnVpbGRzIGFnYWluIHdpdGggTVNWQy4KKyAgIC0gRml4ZWQgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgTVNWQyAocGFzc2luZyBpbnQKKyAgIGluc3RlYWQgb2YgdV9zaG9ydCB0byBodG9ucygpIC8gZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgd2VyZQorICAgbWlzc2luZyBiZWNhdXNlIG9mIG1pc3NpbmcgI2luY2x1ZGUgZGlyZWN0aXZlcykuCisKKzIwMTAtMDItMTYgMTc6MTYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogVGhlIGhlYWRlciBmaWxlIDxzeXMvdGltZWIuaD4gaXMgbm8gbG9uZ2VyCisgICBpbmNsdWRlZCBmcm9tIDxuZXQtc25tcC90eXBlcy5oPi4gT3I6IHRoZSBoZWFkZXIgZmlsZQorICAgPHN5cy90aW1lYi5oPiB3aWxsIGhhdmUgdG8gYmUgaW5jbHVkZWQgZXhwbGljaXRseSBpbiBzb3VyY2UgZmlsZXMKKyAgIHRoYXQgbmVlZCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGZ0aW1lKCkuCisgICAKKyAgIE5vdGU6IGNvbXBhcmVkIHRvIHIxODAyNCBhbmQgYmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QKKyAgIEJTRCBzeXN0ZW1zIC0tIDxzeXMvdGltZWIuaD4gd2FzIG9ubHkgaW5jbHVkZWQgZnJvbQorICAgPG5ldC1zbm1wL3R5cGVzLmg+IG9uIEJTRCBzeXN0ZW1zIGluIHJldmlzaW9ucyByMTgwMjUuLnIxODE1Mi4KKworMjAxMC0wMi0xNCAxOToyOSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOgorCisgICBCdWlsZHMgbm93IG9uIEZyZWVCU0QgdmVyc2lvbiA4LjAuCisKKzIwMTAtMDItMTMgMjA6NTkgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oOgorCisgICBBZGp1c3QgdGhlIHBsYWNlbWVudCBvZiA7J3MgaW4gb3JkZXIgdG8KKyAgIGEpIEF2b2lkIHdhcm5pbmdzIGFib3V0IHNwdXJpb3VzIHNlbWljb2xvbnMKKyAgIGIpIE5vdCBoYXZlIHVudGVybWluYXRlZCBkZWNsYXJhdGlvbnMgaW4gaGVhZGVycworCisyMDEwLTAyLTEyIDAyOjU3ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYzoKKworICAgQ0hBTkdFUzogbWliMmM6IHVwZGF0ZSBpbmxpbmUgZG9jdW1lbnRhdGlvbjsgYWRkIHN0b3JhZ2V0eXBlIHRlc3QKKyAgIGZvciBjb2x1bW5zCisKKzIwMTAtMDItMTIgMDE6NTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBmaXggdHlwbyBpbiBkZWZpbmUKKworMjAxMC0wMi0xMiAwMTowNSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZml4IHNlZCBwcm9jZXNzaW5nIG9uIHdoaXRlLXNwYWNlIGFkZGluZyBzb2xhcmlzIG1hY2hpbmVzCisKKzIwMTAtMDItMTAgMjM6NTYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGFkZCB0b3Agc3JjZGlyIHRvIGNwcCBzZWFyY2ggcGF0aAorCisyMDEwLTAyLTEwIDIzOjUyICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgZnJlZWJzZCBuZWVkcyB0aW1lLmggYWJvdmUgdGltZWIuaAorCisyMDEwLTAyLTEwIDIzOjM3ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICB1c2Ugc2VkIHdpdGggbXVsdGlyZXBsYWNlIG9uIGEgbGluZSB0byBmaXggcG9zc2libGUgd2hpdGVzcGFjZQorICAgaXNzdWUgb24gc29sYXJpcworCisyMDEwLTAyLTEwIDIzOjIyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBiZWdpbm5pbmcgd29yayBmb3IgVExTIHNlcGFyYXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB3aXRoIGEgYmFzZQorICAgZmlsZQorCisyMDEwLTAyLTEwIDIzOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaDoKKworICAgbW92ZSBiYXNlIHRyYW5zcG9ydCBjcmVhdGlvbiBmdW5jdGlvbiBvdXQgb2YgbGludXggaWZkZWZzCisKKzIwMTAtMDItMTAgMjM6MjEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmVkIGFub3RoZXIgZXJyb3IgbG9nZ2luZyBmdW5jdGlvbgorCisyMDEwLTAyLTEwIDIzOjIwICBoYXJkYWtlcgorCisgICAqIG1pYnMvTkVULVNOTVAtVEMudHh0OgorCisgICBhZGRlZCBUTFMgb3ZlciBUQ1AKKworMjAxMC0wMi0xMCAxNjozOSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogTGludXg6IEltcHJvdmVkIEV0aGVyTGlrZS1NSUIgc3VwcG9ydAorICAgUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMKKwogMjAxMC0wMi0xMCAxMDowNCAgZHRzMTIKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgpAQCAtMjg5MCw1MSArNDY0MzIsMjg1IEBACiAgICBDSEFOR0VTOiBweXRob246IFN1cHBvcnQgbnVsbC1ieXRlcyBpbiBvY3RldCBzdHJpbmdzCiAgICBQYXRjaCBzdXBwbGllZCBieSBUb21teSBCZWFkbGUKIAotMjAxMC0wMi0wOSAxNTowNSAgYnZhc3NjaGUKKzIwMTAtMDItMTAgMDA6NTkgIGhhcmRha2VyCiAKLSAgICogIC4sIFJFQURNRS53aW4zMiwgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuaCwgd2luMzIvTWdtdEFwaS13aW5FeHRETEwuaCwgICAKLSAgICAgIHdpbjMyL1NubXAtd2luRXh0RExMLmg6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IHdvcmtzIG5vdyBvbiBXaW5kb3dzIFZpc3RhLCBXaW5kb3dzIDcKLSAgIGFuZCBXaW5kb3dzIDIwMDggdG9vLgotICAgQ0hBTkdFUzogV2luMzI6IHNpbXBsaWZpZWQgYnVpbGRpbmcgTmV0LVNOTVAgKyB3aW5FeHRETEwgd2l0aAotICAgTVNWQy4KLSAgIENIQU5HRVM6IE1pbkdXOiB3aW5FeHRETEw6IGJ1aWxkcyBub3cuCi0gICBOb3RlOiBhbGwgdGhlc2UgY2hhbmdlcyBoYXZlIGJlZW4gYmFja3BvcnRlZCBmcm9tIHRoZSB0cnVuay4KKyAgIG1vdmVkIFRMUyBpbmZyYXN0cnVjdHVyZSBpbnRvIGEgYmFzZSBkb21haW4gZmlsZQogCi0yMDEwLTAyLTA5IDE0OjI5ICBidmFzc2NoZQorMjAxMC0wMi0xMCAwMDowNCAgaGFyZGFrZXIKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKIAotICAgQ0hBTkdFUzogV2luMzI6IGFkZGVkICNpbmNsdWRlIDxzdGRpby5oPiBpbgotICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oIHN1Y2ggdGhhdCBOZXQtU05NUCA1LjUKLSAgIGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuCisgICBtb3ZlZCBzb2NrZXQ2IGZ1bmN0aW9ucyB0byB0aGUgaXB2NiBiYXNlCiAKLTIwMTAtMDItMDggMTk6NDcgIGJ2YXNzY2hlCisyMDEwLTAyLTEwIDAwOjAzICBoYXJkYWtlcgogCi0gICAqICAuLCBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0Lmg6CisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKIAotICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWI6IFJlbW92ZSB0aGUgaW5saW5lIGRlY2xhcmF0aW9ucyBmb3IKLSAgIGZ1bmN0aW9ucyB0aGF0IGxhY2sgYW4gaW5saW5lIGRlZmluaXRpb24uCi0gICAKLSAgIEJhY2twb3J0ZWQgcjE2OTI2IGZyb20gdGhlIHRydW5rIHRvIHRoZSA1LjQgYnJhbmNoIGJlY2F1c2UgTWFyaW8KLSAgIEdhcnRuZXIgcG9zdGVkCi0gICBwYXRjaCAyOTQ1MjAyIGluIHdoaWNoIGhlIHJlcG9ydGVkIHRoYXQgZ2NjIHByaW50ZWQgc2V2ZXJhbAotICAgd2FybmluZ3MgbGlrZSB0aGUKLSAgIGZvbGxvd2luZyBmb3IgdGhlIGNvZGUgb24gdGhlIDUuNCBicmFuY2g6Ci0gICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaDoyNDE6IHdhcm5pbmc6IGlubGluZQotICAgZnVuY3Rpb24gJ3ZvaWQqCi0gICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyosIGNvbnN0Ci0gICBjaGFyKiknIHVzZWQgYnV0Ci0gICBuZXZlciBkZWZpbmVkCisgICB3aGl0ZSBzcGFjZSBmb3JtYXR0aW5nCiAKLTIwMTAtMDItMDUgMDk6NDggIGpzYWZyYW5laworMjAxMC0wMi0xMCAwMDowMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCB1ZHBfc2VuZC9yZWN2IHRvIHVkcGJhc2UKKworMjAxMC0wMi0xMCAwMDowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZSBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCBpbnRvIHNvY2tldGJhc2UKKworMjAxMC0wMi0xMCAwMDowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBtb3ZlIGlwdjQgc3BlY2lmaWMgVURQIHRyYW5zcG9ydCBjcmVhdGlvbiB0byB1ZHBpcHY0IGJhc2UKKworMjAxMC0wMi0xMCAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIG1hZGUgY29tbW9uIGZ1bmN0aW9ucyBiZSByZWZlcmVuY2VkIGRpcmVjdGx5IGJ5IHRoZSB0cmFuc3BvcnRzCisgICBhbmQgcmVtb3ZlZCBvcmlnaW5hbCBmdW5jdGlvbmFsaXR5OyB0aGV5IHdlcmUgc3RhdGljIHNvIHRoZXJlIGlzCisgICBubyBiYWNrd2FyZHMgY29tcGF0IGlzc3VlcworCisyMDEwLTAyLTEwIDAwOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIHNvY2tldCBiYXNlZCBjbG9zZSB0byBhIHNvY2tldCBiYXNlZCBkb21haW4gY29tbW9uIHRvIG1hbnkKKyAgIHRoaW5ncworCisyMDEwLTAyLTA5IDIzOjU5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmM6CisKKyAgIG1vdmUgVENQIGNvbW1vbiBmdW5jdGlvbnMgdG8gYSBUQ1BCYXNlIGRvbWFpbiBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAyLTA5IDIzOjU3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB3YXJuaW5nIGNsZWFudXAKKworMjAxMC0wMi0wOSAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgdG1TdGF0ZVJlZmVyZW5jZSBzaG91bGQgYmUgdXNpbmcgdGhlIGluZGV4ZWQgYWRkcl9wYWlyCisKKzIwMTAtMDItMDkgMjM6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtYWtlIG5ldHNubXBfZHRsc3VkcF9jbG9zZSBtYWtlIHVzZSBvZiBuZXRzbm1wX2Jhc2V1ZHBfY2xvc2UKKworMjAxMC0wMi0wOSAyMzo1NSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBiYXNlIFVEUCBzb2NrZXQgY3JlYXRpb24gaW50byBhIGNvbW1vbiBiYXNlIGZ1bmN0aW9uIGFuZAorICAgbWFkZSB1c2Ugb2YgaXQKKworMjAxMC0wMi0wOSAyMzo1NCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oOgorCisgICBwcm9wZXIgX0ggaWZkZWYgY2hlY2tzCisKKzIwMTAtMDItMDkgMjM6NTQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgYWRkZWQgYSByYXcgVURQIGJhc2UgZG9tYWluCisKKzIwMTAtMDItMDkgMjM6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIGNyZWF0ZWQgYSBVRFAgSVB2NCBiYXNlOyBtb3ZlZCBhbmQgcmV1c2VkIG1vcmUgaW5mcmFzdHJ1Y3R1cmUKKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgaXB2NCBhZGRyZXNzIGZvcm1hdHRpbmcgaW50byBzbm1wSVB2NEJhc2VEb21haW4KKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICB2NiBkb21haW4gaW5mcmFzdHJ1Y3R1cmUgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBWNEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmM6CisKKyAgIHY2IGRvbWFpbiBpbmZyYXN0cnVjdHVyZSBmaWxlcworCisyMDEwLTAyLTA5IDIzOjUwICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQVjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgTmV3IElQdjQgYW5kIElQIGJhc2UgdHJhbnNwb3J0IGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NDggIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBkb24ndCBkb3VibGUgaW5jbHVkZSB0cmFuc3BvcnQgbW9kdWxlcworCisyMDEwLTAyLTA5IDIzOjQ4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmg6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQ1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaDoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGNoZWNrIGZvciBhbmQgcmVwb3J0IGNvbmZpZ19lcnJvcnMgaW4gdHJhbnNwb3J0IGhlYWRlcnMKKworMjAxMC0wMi0wOSAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgYWxsb3cgYSBORVRTTk1QX1FVSUNLX0NIRUNLIGVudiB2YXJpYWJsZSB0byBieXBhc3MgaGVhZGVyIGNoZWNrcworCisyMDEwLTAyLTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgYmV0dGVyIGNvbW1lbnRzCisKKzIwMTAtMDItMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBjaGVjayBmb3IgY29uZmlnX3JlcXVpcmUgbWFjcm9zIGluIHRyYW5zcG9ydCBoZWFkZXJzIGZvcgorICAgZm9yY2UtaW5jbHVkaW5nIG9mIG90aGVyIHRoaW5ncworCisyMDEwLTAyLTA5IDIzOjQxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgcGVybC9hZ2VudC9hZ2VudC54cywgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgZGVmaW5lIGEgc3RhbmRhcmRpemVkIGluZGV4ZWQgYWRkcl9wYWlyIGluc3RlYWQgb2YgdXNpbmcgb25lCisgICBsYWJlbGVkIG9ubHkgZm9yIFVEUCBldmVyeXdoZXJlCisKKzIwMTAtMDItMDkgMjM6NDAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZpeCB0cmFuc3BvcnQgcHJlZml4IGxpc3QgZm9yIGluY29taW5nIG1lc3NhZ2VzCisKKzIwMTAtMDItMDkgMjM6NDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHJlbW92ZSB0aGUgc2VjdXJpdHkgbGV2ZWwgZnJvbSB0aGUgVFNNIGNhY2hlOyBwcmV2aW91cyBleGlzdGVuY2UKKyAgIGZyb20gZnJvbSBhIGRyYWZ0IGNvcHkgb2YgdGhlIFRTTSBSRkMgYW5kIGlzIG5vdyBzdG9yZWQgZW50aXJlbHkKKyAgIGluIHRoZSB0bSByZWZlcmVuY2UKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgaW1wbGVtZW50IGluY29taW5nIFRTTSBwcm9jZWR1cmVzIGFjY29yZGluZyB0byBSRkMgdGV4dAorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBpbXBsZW1lbnQgb3V0Z29pbmcgVFNNIHByb2NlZHVyZXMgYWNjb3JkaW5nIHRvIFJGQyB0ZXh0CisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg6CisKKyAgIGNyZWF0ZSBkZWZpbmVkIHNpemVkIGFycmF5IGFuZCBsZW5ndGggdmFyaWFibGUKKworMjAxMC0wMi0wNSAwOTo1MiAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgZmlsZWRlc2NyaXB0aW9yIGxlYWsgaW4gRXRoZXJsaWtlLU1JQiBhbmQKKyAgIFJNT04tTUlCCisKKzIwMTAtMDItMDQgMTU6NTcgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCkBAIC0yOTQ1LDI2ICs0NjcyMSw2NCBAQAogICAgU29tZSBpbnRlcmZhY2VzIGNhbiByZXBvcnQgdGhlaXIgcmVhbCBzcGVlZCwgZXZlbiB0aGV5IGFyZSBkb3duLgogICAgQW5kIGlmIHRoZXkgY2FuJ3QsIHRoZSBmYWxsYmFjayB0byAxME1icHMgaXMgc3RpbGwgdGhlcmUuCiAKLTIwMTAtMDItMDEgMDE6MDcgIHRhbmRlcnMKKzIwMTAtMDItMDEgMTQ6NDcgIGJ2YXNzY2hlCiAKLSAgICogdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXA6CisgICAqIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYzoKIAotICAgRm9sbG93LXVwIGZvciByMTgwOTM6IHNhbWUgY2hhbmdlcyBmb3IgYWxsIGJyYW5jaGVzCisgICBGaXhlZCB0aGUgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgZmlsZQorICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLgorCisyMDEwLTAyLTAxIDE0OjQ1ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMiwgc25tcGxpYi9rZXl0b29scy5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIHByb2NlZHVyZSBmb3IgYnVpbGRpbmcKKyAgIHdpdGggU05NUHYzIHN1cHBvcnQgZW5hYmxlZCAoT3BlblNTTCkuCisKKzIwMTAtMDItMDEgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgIAorICAgICAgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9tZDUuYywgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFsbCBjYWxscyB0byBmcmVlKCkgYXJlIGludGVyY2VwdGVkIHdoZW4gYnVpbGRpbmcKKyAgIHdpdGggZG1hbGxvYworICAgc3VwcG9ydCBlbmFibGVkLiBJbmNsdWRlZCA8ZG1hbGxvYy5oPiBpbiB0aG9zZSBzb3VyY2UgZmlsZXMgd2hlcmUKKyAgIGl0IHdhcyBub3QKKyAgIHlldCBpbmNsdWRlZCwgYW5kIHByb3ZpZGVkIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgZnJlZSgpIHdoZXJlCisgICB0aGUgYWRkcmVzcyBvZgorICAgdGhpcyBmdW5jdGlvbiB3YXMgdGFrZW4gKERtYWxsb2MgY2FuIG9ubHkgaW50ZXJjZXB0IGZyZWUoKSB3aGVuCisgICBpdCBpcyBjYWxsZWQKKyAgIGRpcmVjdGx5IGJ1dCBub3Qgd2hlbiBpdCBpcyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIpLgorCisyMDEwLTAyLTAxIDEwOjQ5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgTkVXUzogYnVpbGRpbmc6IEJ1aWxkaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBzdXBwb3J0IGVuYWJsZWQgaXMKKyAgIGFnYWluIHBvc3NpYmxlLgogCiAyMDEwLTAyLTAxIDAxOjA1ICB0YW5kZXJzCiAKICAgICogIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAgCi0gICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXA6CisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CiAKICAgIENIQU5HRVM6IGJ1aWxkaW5nOiAnbWFrZSB0ZXN0IFRFU1RPUFRTPSItUCB0Y3AiJyB3b3JrcyBmaW5lIG5vdwogCi0yMDEwLTAxLTMxIDAxOjQyICB0YW5kZXJzCisyMDEwLTAxLTMxIDA4OjAyICBidmFzc2NoZQogCi0gICAqIG1hbi9NYWtlZmlsZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzI6CiAKLSAgIEZvbGxvdy11cCBmb3IgcjE3NzEwIC8gYmFja3BvcnQgb2YgcjE3NzEyOiByZW1vdmUgYW4gb2Jzb2xldGUKLSAgIG1hbnVhbAotICAgcGFnZSBmcm9tIHRoZSBzZXQgb2YgZmlsZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgYW4gc2ggc3ludGF4IGVycm9yIGluIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdAorICAgdGhhdCB3YXMgdHJpZ2dlcmVkIG9uIHN5c3RlbXMgd2l0aG91dCBsaWJjcnlwdG8gYW5kIHdpdGhvdXQKKyAgIGxpYmVheTMyLgorICAgVGhlIGZvbGxvd2luZyBlcnJvciB3YXMgcmVwb3J0ZWQ6CisgICBjb25maWd1cmVbMzMxMzZdOiB4OiB1bmtub3duIHRlc3Qgb3BlcmF0b3IKIAogMjAxMC0wMS0yOSAyMDowNyAganNhZnJhbmVrCiAKQEAgLTI5NzksNiArNDY3OTMsMTI4IEBACiAgICBGaXggdGVzdCAzNSB3aGVuIGNvbmZpZ3VyZSBvcHRpb24gJy0td2l0aC10ZW1wLWZpbGUtcGF0dGVybicgd2FzCiAgICB1c2VkIGFuZCB0aGUgZGlyZWN0b3J5IGZvciB0ZW1wLiBmaWxlcyBkb2VzIG5vdCBleGlzdCB5ZXQuCiAKKzIwMTAtMDEtMjkgMTU6MDcgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvY2xvc2VkaXIuYywgICAKKyAgICAgIHNubXBsaWIvZ2V0dGltZW9mZGF5LmMsIHNubXBsaWIvb3BlbmRpci5jLCBzbm1wbGliL3JlYWRkaXIuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIE1vdmVkIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgb3BlbmRpcigpLCByZWFkZGlyKCksIGNsb3NlZGlyKCkgYW5kCisgICBnZXR0aW1lb2ZkYXkoKSByZXBsYWNlbWVudHMgZm9yIE1TVkMgZnJvbSBzbm1wbGliL3N5c3RlbS5jIHRvCisgICBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMgaW4gc25tcGxpYi4KKworMjAxMC0wMS0yOSAwODo1NyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDb25maWd1cmUgc2NyaXB0IGNvbnNpc3RlbmN5IGltcHJvdmVtZW50OiByZW5hbWVkIHRoZSB2YXJpYWJsZQorICAgInNhdmVkX0xJQlMiIGludG8gIm5ldHNubXBfc2F2ZV9MSUJTIi4KKworMjAxMC0wMS0yOSAwNjozOSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IENoZWNrIHRoZSBzaXplIG9mIHN1bl9wYXRoIGFuZCB1c2UgdGhhdCB0bworICAgZ2VuZXJhdGUgdGhlIG1heGltYWwgc2l6ZSBzdHJpbmdzIGZvciBzdHJlc3NpbmcgY29tMnNlY3VuaXguCisKKzIwMTAtMDEtMjcgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorCisgICBORVdTOiBNaW5HVzogcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIGlzIGFnYWluIHBvc3NpYmxlCisgICAoJ21ha2UgdGVzdCcpLgorCisyMDEwLTAxLTI3IDE0OjQzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogQ3lnd2luOiBidWlsZGluZyB3aXRoIGFub3RoZXIgT3BlblNTTCBwYWNrYWdlIHRoYW4gdGhlCisgICBDeWd3aW4tcHJvdmlkZWQgcGFja2FnZXMgb3BlbnNzbCBhbmQgb3BlbnNzbC1kZXZlbCBpcyBhZ2FpbgorICAgcG9zc2libGUuCisgICBORVdTOiBNaW5HVzogYnVpbGRpbmcgd2l0aCBPcGVuU1NMIHdvcmtzIGFnYWluLgorCisyMDEwLTAxLTI2IDIxOjI3ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdGhlIGNvbnRleHQgYXJndW1lbnQgb2Ygc2VuZF92M3RyYXAsCisgICBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQgYW5kIG5ldHNubXBfc2VuZF90cmFwcyByZWZlciB0byBhCisgICBjb25zdCBjaGFyKi4KKworMjAxMC0wMS0yNiAyMToyNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6CisKKyAgIENvcnJlY3QgbWlzc3BlbGxpbmcgLSAjZWxzaWYgdG8gI2VsaWYKKworMjAxMC0wMS0yNiAyMToyMSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQXBwYXJlbnRseSBub3QgYWxsIHN5c3RlbXMgZGVmaW5lIElORVRfQUREUlNUUkxFTiBzbyBhZGQgaXQgaWYgaXQKKyAgIGlzIG1pc3NpbmcuCisKKzIwMTAtMDEtMjYgMTU6NDYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9URVNUQ09ORi5zaDoKKworICAgQWRkZWQgbmV0c3RhdCBwYXRoIGZvciBNaW5HVy4KKworMjAxMC0wMS0yNiAxNTowMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgZml4IHN0YXQgbmFtZXMKKworMjAxMC0wMS0yNiAxNTowMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB1c2UgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgdXBkYXRlIGNvbW1lbnRzIHRvIHJlZmxlY3QgUkZDNTU5MSBhcyB0aGUgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUKKyAgIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDEtMjYgMTE6NDMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmg6CisKKyAgIE5FV1M6IEN5Z3dpbjogQlVHOiAyOTM5MTY4OiBieXRlIG9yZGVyIG9mIHVkcExvY2FsUG9ydCBpcyBub3cKKyAgIGNvcnJlY3QuCisKKzIwMTAtMDEtMjYgMTA6NDYgIGJ2YXNzY2hlCisKKyAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmw6CisKKyAgIE5FV1M6IEN5Z3dpbjogQlVHOiAyOTM5MTY4OiBmaXhlZCB0ZXN0IGluZnJhc3RydWN0dXJlICgibWFrZQorICAgdGVzdCIpLiBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IHVzaW5nIHRoZSBwcm9wZXIgZW52aXJvbm1lbnQKKyAgIHNlcGFyYXRvciBjaGFyYWN0ZXIgYW5kIGJ5IGFkZGluZyB0aGUgcGF0aCBvZiB0aGUgbmV0c3RhdAorICAgZXhlY3V0YWJsZSBmb3IgQ3lnd2luIGluIHRlc3RpbmcvVEVTVENPTkYuc2guCisKIDIwMTAtMDEtMjYgMDk6MjcgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CkBAIC0yOTk1LDEyICs0NjkzMSw2MjggQEAKICAgIHdob2xlIHByb2Nlc3MKICAgIGlzIHJlc3RhcnRlZCBvbmx5IHRocmVlIHRpbWVzLCB0byBwcmV2ZW50IGVuZGxlc3MgbG9vcC4KIAorMjAxMC0wMS0yNSAyMjoxNiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IERvIG5vdCBjaGVjayBpZiB2YWx1ZXMgb2YgdHlwZSBzaXplX3QKKyAgIGFyZSBsZXNzIHRoYW4gMC4KKworMjAxMC0wMS0yNSAyMjoxMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IENoZWNrIHRoZSByYW5nZSBvZiBvaWQgdmFsdWVzIHRvd2FyZHMgdGhlIG1heGltdW0KKyAgIG9pZCB2YWx1ZSwgbm90VUxPTkdfTUFYCisKKzIwMTAtMDEtMjUgMjA6MDEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIG9ubHkgYmFpbCBvbiBtaXNzaW5nIGxpYmlwaGxwYXBpIGZvciB4d2luc29jazIKKworMjAxMC0wMS0yNSAxOTo1NyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVuYW1lIE1BWF9TVEFUUyB0byBORVRTTk1QX1NUQVRfTUFYX1NUQVRTCisKKzIwMTAtMDEtMjUgMTk6NTMgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmM6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHBhdGggdG8gc25tcF9nZXRfc3RhdGlzdGljczsgY2hlY2sgZm9yIGluZGV4CisgICBvdmVyZmxvdworCisyMDEwLTAxLTI1IDE5OjQ0ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81Lmg6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHBhdGggdG8gc25tcF9nZXRfc3RhdGlzdGljcworCisyMDEwLTAxLTI1IDE2OjAzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICB1c2UgKmN1cnJlbnQqIGNvcHkgb2YgdGhlIE1JQiB3aGVuIGdlbmVyYXRpbmcgc3RhdHMKKworMjAxMC0wMS0yNSAxNjowMSAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oOgorCisgICBtb3ZlIHNubXBfZ2V0X3N0YXRpc3RpYyBoZWxwZXIgdG8gaGVscGVycyBkaXI7IHVwZGF0ZSBhbGxfaGVscGVycworICAgaGVhZGVyCisKKzIwMTAtMDEtMjUgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIFJlcGxhY2VkIGV4cGxpY2l0IGRlY2xhcmF0aW9ucyBvZiBvcHRpbmQsIG9wdG9wdCBhbmQgb3B0YXJnIGJ5CisgICAjaW5jbHVkZSA8dW5pc3RkLmg+IGJlY2F1c2UgZXhwbGljaXRseSBkZWNsYXJpbmcgdGhlc2UgdmFyaWFibGVzCisgICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEN5Z3dpbi4KKworMjAxMC0wMS0yNSAxNDoyNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgTkVXUzogQ3lnd2luOiBJUHY2IGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIEN5Z3dpbiAxLjcgb3IgbGF0ZXIuCisgICBUaGUgb2xkIGltcGxlbWVudGF0aW9uIG9mIElQdjYgc3VwcG9ydCBpbiBOZXQtU05NUCB1bmRlciBDeWd3aW4KKyAgIGludm9sdmVkIGEgc3RyYW5nZSBtaXh0dXJlIG9mIEN5Z3dpbiBhbmQgV2luc29jazIgc29ja2V0IGNhbGxzLAorICAgd2hpY2ggd2FzIHRvbyBoYXJkIHRvIG1haW50YWluLgorICAgTkVXUzogQ3lnd2luOiBidWlsZHMgYWdhaW4gd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZAorICAgKC0tZW5hYmxlLWlwdjYpLiBBdCBsZWFzdCBOZXQtU05NUCA1LjUgZG9lc24ndCBidWlsZCB1bmRlciBDeWd3aW4KKyAgIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuIFRoZSBjb25maWd1cmUgc2NyaXB0IHJlcG9ydGVkCisgICAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIC4uLiByZXN1bHQ6ICJ1bmtub3duLCBubyIgLi4uIGVycm9yOgorICAgSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIi4KKworMjAxMC0wMS0yNSAxNDoxMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBBZGRlZCBtaXNzaW5nICNpbmNsdWRlIDxzdHJpbmcuaD4uCisKKzIwMTAtMDEtMjUgMTQ6MTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgdGhlIElQdjYgc3RhY2sgaW5jbHVkZWQgaW4gQ3lnd2luCisgICB2ZXJzaW9uIDEuNy4KKyAgIElQdjYgc3VwcG9ydCBpcyBvbmUgb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiBDeWd3aW4gMS43LiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24sCisgICBzZWUgYWxzbyBodHRwOi8vY3lnd2luLmNvbS9jeWd3aW4tdWctbmV0L292LW5ldzEuNy5odG1sLgorCisyMDEwLTAxLTI1IDEyOjQwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogdGhlIG1lc3NhZ2UgImNvbmZpZ3VyZTogV0FSTklORzogd2luc29jay5oOgorICAgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiBkb2VzIG5vIGxvbmdlciBhcHBlYXIgd2hlbgorICAgcnVubmluZyB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgIEZvbGxvdy11cCBmb3IgcjE4MDUwOiByZS1lbmFibGVkIGxpYmlwaGxwYXBpIGFuZCBpcGhscGFwaS5oIHRlc3RzCisgICBmb3Igbm9uLU1pbkdXIHBsYXRmb3JtcyBzaW5jZSB0aGUgQ3lnd2luIGJ1aWxkIG5lZWRzIHRoZXNlLgorCisyMDEwLTAxLTI1IDA3OjI4ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIHNubXBsaWIvaW5ldF9udG9wLmMsICAKKyAgICAgICBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIGF1dG9jb25mIHRvIGRlY2lkZSBpZiBpbmV0X250b3AuYyBhbmQKKyAgIGluZXRfcHRvbi5jIGFyZSB0byBiZSBjb21waWxlZC4KKworMjAxMC0wMS0yNSAwNzowOSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczoKKworICAgQ0hBTkdFUzogTWluR1c6IHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZCBjb25maWd1cmUgdGVzdAorICAgZG9lcyBub3cgd29yay4KKworMjAxMC0wMS0yNSAwNToxNCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgVExTVE0gY291bnRlciBzdGF0cworCisyMDEwLTAxLTI1IDA1OjEzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBhZGQgaW4gVFNNIG5lZWRlZCBjb3VudGVyIGRlZmluaXRpb25zCisKKzIwMTAtMDEtMjUgMDU6MTIgIGhhcmRha2VyCisKKyAgICogbWlicy9TTk1QLVRTTS1NSUIudHh0LCBtaWJzL3JmY2xpc3Q6CisKKyAgIGFkZGVkIHRoZSBTTk1QLVRTTS1NSUIKKworMjAxMC0wMS0yNCAxNDo0MyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5Lmg6CisKKyAgIE5FV1M6IHNubXBkOiBNYWRlIHN1YnRyZWVfY29udGV4dF9jYWNoZTo6Y29udGV4dF9uYW1lIGEgY29uc3QKKyAgIGNoYXIqLgorCisyMDEwLTAxLTI0IDE0OjI3ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQcmV2ZW50IGdjYyBwZWQtd2FybmluZyBmb3IKKyAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisKKzIwMTAtMDEtMjQgMTM6MjcgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXB1c206IFByZWZlciB0byB1c2UgYSB2YXJpYWJsZSBvZiB0aGUgcmlnaHQgdHlwZSBvdmVyCisgICBhbiB1Z2x5IGNhc3QuIExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlIGFzIHdlbGwuCisKKzIwMTAtMDEtMjQgMTI6NTkgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogSW50cm9kdWNlZCB0aGUgdmFyaWFibGUgJ3dpdGhfc29ja2xpYicgaW4gdGhlCisgICBjb25maWd1cmUgc2NyaXB0LiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byAid2luc29jazIiIGZvciBNaW5HVworICAgYW5kIHRvICJkZWZhdWx0IiBmb3IgYWxsIG90aGVyIHN5c3RlbXMuIFdpbnNvY2syIHRlc3RzIGFyZSBvbmx5CisgICBydW4gaWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIndpbnNvY2syIiAoTWluR1cpLgorCisyMDEwLTAxLTI0IDEyOjUzICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgUmVtb3ZlIHN1cGVyZmx1b3VzIGRlYnVnIGxvZ3MuCisKKzIwMTAtMDEtMjQgMTI6NDUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXM6IGZpeGVkIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvCisgICB1bnNpZ25lZCBjaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMjQgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4OiBtYWtlIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKQorICAgZGVjbGFyYXRpb25zCisgICBhdmFpbGFibGUgdG8gdGhlIGNvbXBpbGVyLgorCisyMDEwLTAxLTI0IDEyOjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4OiBtYWRlIHN1cmUgdGhhdCA8d3MydGNwaXAuaD4gd2lsbAorICAgYmUgaW5jbHVkZWQKKyAgIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+IHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBjb21wbGFpbgorICAgYWJvdXQgc3RydWN0CisgICBzb2NrYWRkcl9pbjYgYmVpbmcgdXNlZCBiZWZvcmUgYmVpbmcgZGVmaW5lZC4KKworMjAxMC0wMS0yNCAxMTo0MiAgYnZhc3NjaGUKKworICAgKiBtYW46CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMS0yNCAxMTo0MSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfaW5kZXguYywgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliX21vZHVsZXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsIGFnZW50L21pYmdyb3VwL21pYmluY2wuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcGJ1bGtnZXQuYywgICAKKyAgICAgIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsIGFwcHMvc25tcGRmLmMsICAgCisgICAgICBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCBhcHBzL3NubXBzZXQuYywgICAKKyAgICAgIGFwcHMvc25tcHN0YXR1cy5jLCBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsICAgCisgICAgICBhcHBzL3NubXB3YWxrLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9hdXRoLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBDbGVhbnVwIChXaW5kb3dzKTogcmVtb3ZlZCBzdXBlcmZsdW91cyAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisgICBkaXJlY3RpdmVzLiBUaGlzIGhlYWRlciBmaWxlCisgICBoYXMgb25seSB0byBiZSBpbmNsdWRlZCBmcm9tIHNubXBsaWIvc3lzdGVtLmMgYmVjYXVzZSBvZiB0aGUKKyAgIF9mdGltZSgpIGNhbGwgaW4gdGhhdCBmaWxlLgorCisyMDEwLTAxLTI0IDEwOjQzICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jOgorCisgICBUaGUgbWFjcm8gJ0MoKScgbm93IGNhc3RzIGl0cyByZXN1bHQgZnJvbSB1bnNpZ25lZCBsb25nIHRvCisgICB1bnNpZ25lZCBpbnQuCisgICBUaGlzIGNoYW5nZSBmaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGZvcm1hdCBzcGVjaWZpY2F0aW9uCisgICBtaXNtYXRjaGVzCisgICBhbmQgZml4ZXMgYSBidWcgKGluY29ycmVjdCBzbm1wbmV0c3RhdCBvdXRwdXQpIG9uIGJpZyBlbmRpYW4KKyAgIHN5c3RlbXMuCisKKzIwMTAtMDEtMjQgMTA6MzMgIGJ2YXNzY2hlCisKKyAgICogbWFuL2NvbmZpZ19hcGkuMzoKKworICAgRm9sbG93LXVwIGZvciByMTc5NDY6IHJlbW92ZWQgZ2VuZXJhdGVkIG1hbiBwYWdlcyBmcm9tCisgICByZXBvc2l0b3J5LgorCisyMDEwLTAxLTI0IDEwOjMxICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBNb3ZlZCB0d28gZGVjbGFyYXRpb25zIG9mIHN0YXRpYyBmdW5jdGlvbnMgZnJvbSAuaCB0byAuYy4KKworMjAxMC0wMS0yNCAxMDoyMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cy4KKworMjAxMC0wMS0yNCAxMDoxOSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGJ1aWxkcyBhZ2FpbiB3aGVuIEhBVkVfR0VUQUREUklORk8gaXMgbm90CisgICBkZWZpbmVkLgorCisyMDEwLTAxLTI0IDEwOjAzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL2luZXRfbnRvcC5jLCAgIAorICAgICAgc25tcGxpYi9pbmV0X250b3AuaCwgc25tcGxpYi9pbmV0X3B0b24uYywgc25tcGxpYi9pbmV0X3B0b24uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0cyBmb3IgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpLgorICAgLSBBZGRlZCBoZWFkZXIgZmlsZXMgc25tcGxpYi9pbmV0X250b3AuaCBhbmQgc25tcGxpYi9pbmV0X3B0b24uaC4KKyAgIC0gUmVwbGFjZWQgImV4dGVybiBpbmV0X250b3AoLi4uKTsiIGFuZCAiZXh0ZXJuIGluZXRfcHRvbiguLi4pOyIKKyAgIGJ5ICNpbmNsdWRlICJpbmV0X250b3AvcHRvbi5oIi4KKyAgIC0gQ29udmVydGVkIHNubXBsaWIvaW5ldF9udG9wLmMgYW5kIHNubXBsaWIvaW5ldF9wdG9uLmMgZnJvbSBLJlIKKyAgIEMgdG8gQU5TSSBDLgorICAgLSBSZXBsYWNlZCB0aGUgaW5ldF9hdG9uKCkgY2FsbHMgdGhhdCB3ZXJlIGludHJvZHVjZWQgaW4gcjE4MDMzCisgICBpbiBzbm1wbGliL3NubXBVRFBEb21haW4uYyBieSBpbmV0X3B0b24oKSBjYWxscyBzdWNoIHRoYXQgaXQgaXMKKyAgIGFnYWluIHBvc3NpYmxlIHRvIGJ1aWxkIE5ldC1TTk1QIG9uIFdpbmRvd3MuCisKKzIwMTAtMDEtMjQgMDY6MDggIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHRoYXQgZG9uJ3QKKyAgIGV4aXN0IG9yIGFyZSBkZWNsYXJlZCBlbHNld2hlcmUuCisKKzIwMTAtMDEtMjQgMDU6NDggIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmVkIHRoZSB1bnVzZWQgdmFyaWFibGVzIHdhcm1fc3RhcnRfb2lkLAorICAgbGlua19kb3duX29pZCwgbGlua191cF9vaWQsIGF1dGhfZmFpbF9vaWQgYW5kIGVncF94eHhfb2lkLgorCisyMDEwLTAxLTIzIDIyOjA2ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBCZXR0ZXIgc2V0IG9mIFNLSVBJRi9TS0lQSUZOT1RTCisKKzIwMTAtMDEtMjMgMjA6MzEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBCZSBjb3JyZWN0IGluIHdoYXQgaXQgaXMgdGhhdCBpcyB0ZXN0ZWQgaW4gdGhlIGhlYWRlci4KKworMjAxMC0wMS0yMyAyMDoyNyAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlZCB0aGUgY29tMnNlYyBkaXJlY3RpdmVzIHRvIGZhaWwgaWYgdGhlcmUKKyAgIGFyZSB0b28gZmV3IGFyZ3VtZW50cy4gQWRkaXRpb25hbGx5IGNoYW5nZWQgdGhlIHN0b3JhZ2Ugc3RydWN0dXJlCisgICB0byBub3QgYWxsb2NhdGUgbW9yZSBzcGFjZSB0aGFuIG5lY2Vzc2FyeS4KKworMjAxMC0wMS0yMyAyMDoyMiAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgbmV3IHRlc3RzIGNoZWNraW5nIHRoZSBlcnJvciBoYW5kbGluZyBvZiB0aGUgY29tMnNlYyogZGlyZWN0aXZlcworCisyMDEwLTAxLTIzIDE5OjE3ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODAyNTogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uCisKKzIwMTAtMDEtMjMgMTc6NTEgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBPUyBoZWFkZXIgZGV0ZWN0aW9uIGNoZWNrIGlzIG5vdyBydW4gYmVmb3JlCisgICBJUHY2IHN0YWNrIGRldGVjdGlvbi4KKyAgIENIQU5HRVM6IFNvbGFyaXM6IHNvY2thZGRyX2luNi5zaW42X2FkZHIgY29uZmlndXJlIHRlc3QgZG9lcyBub3cKKyAgIHdvcmsuCisKKzIwMTAtMDEtMjMgMTc6NDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgRml4ZWQgYSBTb2xhcmlzLXNwZWNpZmljIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDEtMjMgMTc6MDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oOgorCisgICBNaW5HVzogYWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIDxzeXMvdGltZWIuaD4gYW5kIGFsc28gZm9yIHN0cnVjdAorICAgdGltZXpvbmUuCisKKzIwMTAtMDEtMjMgMTY6MzIgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIE1pbkdXOiBtYWRlIHN1cmUgdGhhdCB0aGUgSVB2Ni1yZWxhdGVkIGRhdGF0eXBlcyBhcmUgYXZhaWxhYmxlCisgICBiZWZvcmUgYmVpbmcgdXNlZC4KKworMjAxMC0wMS0yMyAxNjozMCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCAjdW5kZWYgSEFWRV9XSU5ET1dTX0guCisKKzIwMTAtMDEtMjMgMTY6MjggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBNaW5HVzogbWFkZSBnZXR0aW1lb2ZkYXkoKSBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZQorICAgY29tcGlsZXIuCisKKzIwMTAtMDEtMjMgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBNaW5HVzogbWFkZSBnZXR0aW1lb2ZkYXkoKSBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZQorICAgY29tcGlsZXIuCisKKzIwMTAtMDEtMjMgMTY6MjYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGNvbXBsYWluIGFib3V0IGEgbWlzc2luZworICAgcHJvdG90eXBlIGZvciBpc2RpZ2l0KCkuCisKKzIwMTAtMDEtMjMgMTY6MjQgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgTWluR1c6IGlwaGxwYXBpLmggY29uZmlndXJlIHRlc3QgZG9lcyBub3cgd29yay4KKworMjAxMC0wMS0yMyAxNToxMCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXM6CisKKyAgIFJlbmFtZWQgdGhlIFdpbnNvY2syIElQdjYgc3RhY2sgZnJvbSAnbWluZ3cnIGludG8gJ3dpbnNvY2syJy4KKworMjAxMC0wMS0yMyAxNTowNyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCBhZ2VudC9zbm1wZC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgIAorICAgICAgIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmMsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBJbXByb3ZlZCBwb3J0YWJpbGl0eSBiZXR3ZWVuIHRoZSBzdXBwb3J0ZWQgV2luMzIgY29tcGlsYXRpb24KKyAgIGVudmlyb25tZW50cyBhcyBmb2xsb3dzOgorICAgLSBNYWRlIHN1cmUgdGhhdCB0aGUgPHdpbnNvY2syLmg+IGFuZCA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGVzCisgICBhcmUgb25seSBpbmNsdWRlZCBmcm9tIDxuZXQtc25tcC90eXBlcy5oPi4KKyAgIC0gQWRkZWQgY29uZmlndXJlIGNoZWNrIGZvciA8aXBobHBhcGkuaD4uCisgICAtIFJlcGxhY2VkIHNldmVyYWwgV0lOMzIgLyBjeWd3aW4gdGVzdHMgYnkgYSBIQVZFX0lQSExQQVBJX0gKKyAgIHRlc3QuCisgICAtIERvY3VtZW50ZWQgdGhhdCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBpcyBvbmx5IHVzZWQKKyAgIGZvciB0aGUgTVNWQyBidWlsZC4KKworMjAxMC0wMS0yMiAxNjo0NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTEwOiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbworICAgNi4KKworMjAxMC0wMS0yMiAxNjo0MSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgd2luMzIvTWdtdEFwaS13aW5FeHRETEwuaDoKKworICAgRm9sbG93IHVwIGZvciByMTgwMTY6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorCisyMDEwLTAxLTIyIDE0OjEzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDE2OiBtYWRlIE1pbkdXIGxpYmlwaGxwYXBpIGNoZWNrIG1vcmUgcm9idXN0LgorCisyMDEwLTAxLTIyIDEzOjMyICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIGFjbG9jYWwubTQsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJfbW9kdWxlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmgsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgICAKKyAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9zcWwuYywgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgICAKKyAgICAgIGFwcHMvc25tcHdhbGsuYywgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgICAKKyAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCAgIAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL21kNS5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcC5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2F1dGguYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgCisgICAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdmFjbS5jLCAgIAorICAgICAgc25tcGxpYi93aW5waXBlLmMsIHdpbjMyL1NubXAtd2luRXh0RExMLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBNaW5HVzogd2luRXh0RExMIGNvbXBpbGVzIG5vdyB1bmRlciBNaW5HVy4KKyAgIENIQU5HRVM6IE1pbkdXOiBidWlsZGluZyBOZXQtU05NUCB3b3JrcyBhZ2Fpbi4KKyAgIAorICAgRGV0YWlsZWQgb3ZlcnZpZXc6CisgICAqIENoYW5nZXMgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQ6CisKKyAgIC0gc29ja2V0KCkgbGlicmFyeSBjaGVjayBwYXNzZXMgYWdhaW4gb24gTWluR1cuCisgICAtIEFkZGVkIGxpYnJhcnkgY2hlY2tzIGZvciBsaWJ3czJfMzIsIGxpYnJlZ2V4IGFuZCBsaWJzbm1wYXBpLgorICAgLSBBZGRlZCBjaGVjayBmb3IgdGhlIHdpbnNvY2syLmggYW5kIHdzMnRjcGlwLmggaGVhZGVyIGZpbGVzLgorICAgLSBBZGRlZCBjaGVjayBmb3IgdGhlIGNob3duKCkgYW5kIGxvY2FsdGltZV9yKCkgZnVuY3Rpb25zLgorICAgLSBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZCBjaGVjayBkb2VzIG5vdyB3b3JrIG9uIE1pbkdXLgorICAgLSBBZGRlZCBJUHY2IHN0YWNrIHR5cGUgY2FsbGVkICJtaW5ndyIuCisgICAqIFNvdXJjZSBjb2RlIGNoYW5nZXM6CisKKyAgIC0gSW5jbHVkZSA8d2luc29jazIuaD4gZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4gaW5zdGVhZCBvZgorICAgPHdpbnNvY2suaD4KKyAgIHVuZGVyIE1pbkdXIHN1Y2ggdGhhdCBJUHY2IHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorICAgLSBNb3ZlZCAjaW5jbHVkZSA8d2luc29jay5oPiBmcm9tIC5jIGZpbGVzIHRvIDxuZXQtc25tcC90eXBlcy5oPi4KKyAgIC0gQWRkZWQgYSBjb3B5IG9mIHRoZSBNaW5HVyBoZWFkZXIgZmlsZSA8c25tcC5oPiAod2hpY2ggaXMgbm90CisgICBjb3B5cmlnaHRlZCkKKyAgIGFzIHdpbjMyL1NubXAtd2luRXh0RExMLmguCisgICAtIGFnZW50OiBvbmx5IGNhbGwgY2hvd24oKSB3aGVuIGF2YWlsYWJsZSAoSEFWRV9DSE9XTikuCisgICAqIERvY3VtZW50YXRpb24gY2hhbmdlczogdXBkYXRlZCBSRUFETUUud2luMzIuCisKKworMjAxMC0wMS0yMiAwODozNCAgbWFnZnIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBjYXN0IGZyb20gY2hhciogdG8gY2hhcioKKwogMjAxMC0wMS0yMiAwMDozOSAgaGFyZGFrZXIKIAogICAgKiBDT1BZSU5HOgogCiAgICBDb3B5cmlnaHQgZmlsZSB1cGRhdGUgZm9yIFNQQVJUQSwgSW5jLgogCisyMDEwLTAxLTIyIDAwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBhZGQgcHJvcGVyIHByZWZpeGVzIGluIFRTTSBmb3IgU1NILCBEVExTLCBldGMsIGJhc2VkIG9uIHRoZQorICAgZG9tYWluCisKKzIwMTAtMDEtMjIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgYWRkZWQgNS41IGJyYW5jaAorCisyMDEwLTAxLTIyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBtaW5vciBlY2hvIG91dHB1dCBjaGFuZ2UKKworMjAxMC0wMS0yMSAyMDo1MSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNvbW1lbnQgbmV4dCB0byBjb2RlIGl0IGlzIHRhbGtpbmcgYWJvdXQ7IE5vIGNvZGUgY2hhbmdlCisKIDIwMTAtMDEtMjEgMTQ6NTUgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKQEAgLTMwMTEsOTcgKzQ3NTYzLDQxOCBAQAogICAgVGhlIGtlcm5lbCBtaWdodCBwcm92aWRlIGxvbmdlciBmaWVsZHMsIGVzcGVjaWFsbHkgb24gNjQtYml0CiAgICBzeXN0ZW1zLgogCisyMDEwLTAxLTIwIDEyOjQyICBidmFzc2NoZQorCisgICAqIFBPUlRJTkcsIGxvY2FsL3NubXBjaGVjay5kZWY6CisKKyAgIEZpeGVkIHR5cG86IHJlcGxhY2VkICduZWNpc3NhcnknIGJ5ICduZWNlc3NhcnknLgorCiAyMDEwLTAxLTIwIDA4OjUzICBqc2FmcmFuZWsKIAogICAgKiBtYW4vc25tcG5ldHN0YXQuMS5kZWY6CiAKICAgIEZpeCBtaW5vciB0eXBvIGluIG1hbiBwYWdlLCBpdCdzIHNubXBuZXRzdGF0IC1DcCwgbm90IC1DUC4KIAorMjAxMC0wMS0xNCAxMjozNCAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBmaXhlZCBtZW1vcnkgbGVhayBpbiBSTU9OLU1JQiBhbmQgRVRIRVJMSUtFLU1JQiB3aGVuCisgICB0aGVyZSBhcmUgbXVsdGlwbGUgYWxpYXNlcyBvZiBhbiBuZXR3b3JrIGludGVyZmFjZQorICAgUmF0aW9uYWxlOiB0aGUgYWxpYXNlZCBpbnRlcmZhY2VzIGhhdmUgdGhlIHNhbWUgaWZJbmRleCAtPgorICAgQ09OVEFJTkVSX0lOU0VSVCBmYWlscywgYnV0IHRoZSByZWplY3RlZCBlbnRyeSB3YXMgbm90IGZyZWVkLgorCisyMDEwLTAxLTEzIDExOjIxICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggbWVtb3J5IGxlYWsgaW4gaXBBZGRyZXNzUHJlZml4VGFibGUKKyAgIC0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyByZXR1cm5zIGRpZmZlcmVudCBjb2RlLCB3aGVuCisgICB0aGUgZW50cnkgd2FzIG5vdCBpbnNlcnRlZCB0byBsaXN0IGFuZCBjYW4gYmUgZnJlZWQuCisKKzIwMTAtMDEtMTIgMDA6NTIgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBidWlsZDogcnVuIHJwbSBjb25maWd1cmUgY2hlY2tzIGZvciBocl9zd2luc3QgcmV3cml0ZQorICAgKHJwbQorICAgdmVyc2lvbiBvbmx5KQorCisyMDEwLTAxLTExIDIzOjU4ICB0YW5kZXJzCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjoKKworICAgYWRkIFBFUkxMRE9QVFNfRk9SX0FQUFMgdG8gYWdlbnR4dHJhcCBsaW5rIGxpbmUgKGZpeGVzCisgICAibGlicGVybC5zbyBub3QKKyAgIGZvdW5kIiBlcnJvcnMpCisKKzIwMTAtMDEtMTEgMDA6MTEgIHRhbmRlcnMKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKKworICAgZ2V0IHJpZCBvZiB1c2luZyBkZXByZWNhdGVkIHN5bnRheCBmb3IgdHJhcC9pbmZvcm0gc2lua3MKKworMjAxMC0wMS0wOCAwODo0MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBvYnNvbGV0ZWQgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHLgorICAgRnJvbSBub3cgb24gdXNpbmcgU0lHQUxSTSB0byB0cmlnZ2VyIE5ldC1TTk1QIGFsYXJtIGhhbmRsZXJzIGlzCisgICBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgCisgICBNb3RpdmF0aW9uOiBhcyBrbm93biBsaWJuZXRzbm1wIHN1cHBvcnRzIHRpbWUtYmFzZWQgYWxhcm1zIHZpYQorICAgdGhlIGZ1bmN0aW9ucworICAgc25tcF9hbGFybV9yZWdpc3RlcigpLCBydW5fYWxhcm1zKCkgYW5kIG90aGVyIGZ1bmN0aW9ucy4gVHdvCisgICBkaWZmZXJlbnQgd2F5cyB0bworICAgdHJpZ2dlciB0aGUgZnVuY3Rpb24gcnVuX2FsYXJtcygpIGFyZSBzdXBwb3J0ZWQgaW5zaWRlCisgICBsaWJuZXRzbm1wOgorICAgMS4gQnkgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZW91dCBhcmd1bWVudCBvZiBzZWxlY3QoKSBpcyBzbWFsbAorICAgZW5vdWdoIHN1Y2gKKyAgIHRoYXQgc2VsZWN0KCkgcmV0dXJucyBiZWZvcmUgdGhlIG5leHQgYWxhcm0gbXVzdCBiZSBoYW5kbGVkICh3aGVuCisgICB0aGUKKyAgIHZhcmlhYmxlIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBpcyBzZXQgdG8gb25lLCB3aGljaAorICAgaXMgdGhlCisgICBkZWZhdWx0KS4KKyAgIDIuIEJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGtlcm5lbCBmaXJlcyBTSUdBTFJNIGF0IHRoZSB0aW1lIHdoZW4KKyAgIHJ1bl9hbGFybXMoKQorICAgc2hvdWxkIGJlIGNhbGxlZCAod2hlbiB0aGUgdmFyaWFibGUKKyAgIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBpcyBzZXQKKyAgIHRvIHplcm8sIHdoaWNoIGhhcyB0byBiZSBjb25maWd1cmVkIGV4cGxpY2l0bHkpLgorICAgCisgICBUaGUgZm9sbG93aW5nIGlzc3VlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWNvbmQgYXBwcm9hY2g6CisgICAxLiBBbGFybSBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zaWRlIE5ldC1TTk1QIHRvIGUuZy4gcmVmcmVzaAorICAgY2FjaGVkIHRhYmxlCisgICBjb250ZW50cy4gQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBOZXQtU05NUAorICAgc291cmNlIGNvZGUKKyAgIHRoYXQgcHJldmVudHMgdGhlIGZvbGxvd2luZyBmcm9tIGhhcHBlbmluZzogYSB0YWJsZSByZWZyZXNoCisgICB0cmlnZ2VyZWQgdmlhCisgICBTSUdBTFJNIHdoaWxlIGEgcm93IGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBhIGNhY2hlZCB0YWJsZS4gVGhpcworICAgY2FuIHJlc3VsdAorICAgaW4gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGV2ZW4gYSBjcmFzaC4KKyAgIDIuIFBPU0lYIHJlc3RyaWN0cyBzaWduYWwgaGFuZGxlcnMgdG8gY2FsbGluZyBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgIGVpdGhlciByZWVudHJhbnQKKyAgIG9yIG5vbi1pbnRlcnJ1cHRpYmxlCisgICAoaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0KS4KKyAgIFN0YW5kYXJkIEkvTyBmdW5jdGlvbnMgbGlrZSBwcmludGYoKSBhbmQgZnByaW50ZigpIGFyZSBuZWl0aGVyCisgICByZWVudHJhbnQgbm9yCisgICBub24taW50ZXJydXB0aWJsZS4gcnVuX2FsYXJtcygpIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBhIHNpZ25hbAorICAgaGFuZGxlciwgd2hpY2gKKyAgIG1lYW5zIHRoYXQgdGhpcyByZXN0cmljdGlvbiBhcHBsaWVzIHRvIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkKKyAgIGl0c2VsZiBhbmQKKyAgIGFsbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IGl0ICh3aGljaCBpbmNsdWRlcyB0aGUgYWxhcm0gY2FsbGJhY2sKKyAgIGZ1bmN0aW9ucykuCisgICBPcjogZS5nLiBzbm1wX2xvZygpIGFuZCBpdHMgY2FsbGVycyBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQorICAgaW5zaWRlIHJ1bl9hbGFybXMoKQorICAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlci4gVGhpcworICAgaXMgYSBzZXZlcmUKKyAgIHJlc3RyaWN0aW9uLCBhbmQgb25lIHRoYXQgaXMgaGFyZCB0byB3b3JrIHdpdGguCisgICAzLiBOb3QgYWxsIHNvZnR3YXJlIGRldmVsb3BlcnMga25vdyBob3cgdG8gbWFrZSBzdXJlIHRoYXQgc2lnbmFsCisgICBkZWxpdmVyeSB3b3JrcworICAgY29ycmVjdGx5IGluIGEgbXVsdGl0aHJlYWRlZCBjb250ZXh0LiBQT1NJWCBkb2VzIG5vdCBndWFyYW50ZWUgdG8KKyAgIHdoaWNoIHRocmVhZAorICAgYSBzaWduYWwgbGlrZSBTSUdBTFJNIHdpbGwgYmUgZGVsaXZlcmVkLCB1bmxlc3MgdGhhdCBzaWduYWwgaGFzCisgICBiZWVuIGJsb2NrZWQKKyAgIGJlZm9yZSB0aHJlYWQgY3JlYXRpb24gYW5kIGlzIHVuYmxvY2tlZCBhZnRlciB0aHJlYWQgY3JlYXRpb24KKyAgIChzZWUgYWxzbworICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9wdGhyZWFkX3NpZ21hc2suaHRtbCkuCisgICBUaGlzIGlzIHJlbGV2YW50IGZvciB0aGUgTmV0LVNOTVAgcHJvamVjdCBub3Qgb25seSBiZWNhdXNlIGEKKyAgIHdvcmtlciB0aHJlYWQgaXMKKyAgIGNyZWF0ZWQgaW5zaWRlCisgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMgYnV0IGFsc28KKyAgIGJlY2F1c2UgbGlibmV0c25tcCBpcyBvZnRlbiB1c2VkIGluc2lkZSBtdWx0aXRocmVhZGVkIHNvZnR3YXJlLgorICAgQ3VycmVudGx5IG5vCisgICBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSBzdXJlIHRoYXQgU0lHQUxSTSBpcyBwcm9jZXNzZWQgYnkgdGhlCisgICBOZXQtU05NUCBldmVudAorICAgcHJvY2Vzc2luZyBsb29wIHRocmVhZC4gSWYgU0lHQUxSTSBpcyBwcm9jZXNzZWQgYnkgYW5vdGhlcgorICAgdGhyZWFkLCB0aGlzIHdpbGwKKyAgIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBkYXRhIHJhY2VzLgorICAgCisgICBCZWNhdXNlIGFsbCB0aGUgZGlmZmljdWx0aWVzIGFzc29jaWF0ZWQgd2l0aCBwcm9jZXNzaW5nIGFsYXJtcworICAgZnJvbSBpbnNpZGUgYQorICAgc2lnbmFsIGhhbmRsZXIgZnVuY3Rpb24sIGFuZCBiZWNhdXNlIGZpeGluZyB0aGVzZSB3b3VsZCByZXF1aXJlCisgICBtb3JlIGVmZm9ydCB0aGFuCisgICBpdCBpcyB3b3J0aCwgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGhhcyBiZWVuCisgICBkZXByZWNhdGVkIGFuZCBmcm9tIG5vdworICAgb24gYXBwcm9hY2ggKDEpIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBhcHByb2FjaCB0byB0cmlnZ2VyIGFsYXJtCisgICBoYW5kbGVycy4KKwogMjAxMC0wMS0wNyAxOTo0MiAgaGFyZGFrZXIKIAotICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6CiAKICAgIFBhdGNoIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgdG8gZml4IGEgbWlub3IgbWVtbGVhayBpbiBjcHUKICAgIHN5c2N0cmwgZmV0Y2hpbmcKIAotMjAxMC0wMS0wNiAxNzo1NiAgZHRzMTIKKzIwMTAtMDEtMDcgMTY6MjEgIGJ2YXNzY2hlCiAKLSAgICogQ0hBTkdFUzoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBSZW1vdmVkIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCksIGFuZCBtYWRlIHN1cmUgdGhhdAorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSAnXDAnLXRlcm1pbmF0ZXMgdGhlIG91dHB1dCBidWZmZXIKKyAgIGluIGFsbCBjYXNlcy4KKyAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cy4KIAotMjAxMC0wMS0wNiAxNzoyNSAgZHRzMTIKKzIwMTAtMDEtMDcgMTQ6NDEgIGJ2YXNzY2hlCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBzbm1wbGliL3NubXB1c20uYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFJlbW92ZWQgdGhyZWUgc3VwZXJmbHVvdXMgY2FzdHMgYmVjYXVzZSB0aGVzZSB0cmlnZ2VyZWQgYQorICAgY29tcGlsZXIgd2FybmluZworICAgd2hlbiBjb21waWxlZCB3aXRoIE1TVkMuCiAKLTIwMTAtMDEtMDYgMTc6MDYgIGR0czEyCisyMDEwLTAxLTA3IDEzOjI4ICBidmFzc2NoZQogCi0gICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgogCi0gICBtYWtlIGRlcGVuZAorICAgUmV2ZXJ0ZWQgdGhlIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgY2hhbmdlcyBmcm9tIHIxNzk5MgorICAgYmVjYXVzZSB0aGVzZQorICAgY2F1c2VkIHRoZSBmb2xsb3dpbmcgVmFsZ3JpbmQgY29tcGxhaW50IGR1cmluZyBzbm1wZCBzdGFydHVwOgorICAgCisgICA9PTI1MjAxPT0gQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZAorICAgdmFsdWUocykKKyAgID09MjUyMDE9PSBhdCAweDQwNDdCMTQ6IG5ldHNubXBfc2VuZF90cmFwcyAoYWdlbnRfdHJhcC5jOjc5OCkKKyAgID09MjUyMDE9PSBieSAweDQwNDgxMjg6IHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMKKyAgIChhZ2VudF90cmFwLmM6ODUzKQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODE5RDogc2VuZF90cmFwX3ZhcnMgKGFnZW50X3RyYXAuYzo5NjMpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MjVCOiBzZW5kX2Vhc3lfdHJhcCAoYWdlbnRfdHJhcC5jOjEwMTEpCisgICA9PTI1MjAxPT0gYnkgMHg4MDRCNUQyOiBtYWluIChzbm1wZC5jOjM5NCkKIAotMjAxMC0wMS0wNiAxNzowNiAgZHRzMTIKKzIwMTAtMDEtMDcgMTI6MzAgIGJ2YXNzY2hlCiAKLSAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmM6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBGaXhlZCBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoLgogCi0yMDEwLTAxLTA2IDE2OjU1ICBkdHMxMgorMjAxMC0wMS0wNyAxMjoxOSAgYnZhc3NjaGUKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGFzc2lnbmluZyBhIGNoYXIgKiBwb2ludGVyIHRvCisgICBzeXNPUlRhYmxlOjpPUl9kZXNjciBkb2VzIG9yIGRvZXMgbm90IHRyYW5zZmVyCisgICBvd25lcnNoaXAuIFNvIHdoZXRoZXIgT1JfZGVzY3IgaXMgZGVjbGFyZWQgYXMgY2hhciAqIG9yIGFzIGNvbnN0CisgICBjaGFyICosIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0CisgICBsZWFzdCBvbmUgc3RhdGVtZW50IG9uIHdoaWNoIHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgYSBjaGFyCisgICAqICAvIGNvbnN0IGNoYXIgKiBtaXNtYXRjaC4gVGhlIG9ubHkgICAgc29sdXRpb24gaXMgdG8gY2FzdCBhd2F5CisgICAgICBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZSB0byBtYWtlIHN1cmUgICAgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QKKyAgICAgIGNvbXBsYWluLCAgICBhcyBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLiAgMjAxMC0wMS0wNyAxMTo0NiAKKyAgICAgIGJ2YXNzY2hlCiAKLTIwMTAtMDEtMDYgMTY6NDMgIGR0czEyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgdXNtX3NhdmVfdXNlcigpOiB3aGVuIHdyaXRpbmcgdXNlci0+bmFtZSBhbmQgdXNlci0+c2VjTmFtZSwgb25seQorICAgd3JpdGUgdGhlIEFTQ0lJIGRhdGEgYW5kIG5vdCB0aGUKKyAgIHRlcm1pbmF0aW5nICdcMCcuIFNpbmNlIGJvdGggaXRlbXMgYXJlIHJlYWQgYnkgY2FsbGluZworICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSwgd3JpdGluZworICAgdGhlIHRlcm1pbmF0aW5nICdcMCcgaXMgbm90IG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgdGhhdCB0aGUgZGF0YQorICAgcmVhZCBiYWNrIGlzIHRlcm1pbmF0ZWQgcHJvcGVybHkuCisKKzIwMTAtMDEtMDcgMDk6MTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpOiB1bnRpbAorICAgbm93IHRoaXMKKyAgIGZ1bmN0aW9uIHRlcm1pbmF0ZWQgdGhlIG91dHB1dCBidWZmZXIgaW4gc29tZSBjYXNlcyB3aXRoICdcMCcKKyAgICh3aGVuIHRoZQorICAgaW5wdXQgd2FzIGluIHRoZSBmb3JtYXQgMHguLi4gYW5kIGEgYnVmZmVyIG92ZXJmbG93IG9jY3VycmVkIGFuZAorICAgYWxzbworICAgd2hlbiB0aGUgaW5wdXQgd2FzIGluIEFTQ0lJIGZvcm1hdCwgYnV0IG5vdCB3aGVuIHRoZSBpbnB1dCB3YXMgaW4KKyAgIGZvcm1hdAorICAgMHguLi4gYW5kIG5vIGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCkuIENoYW5nZWQgdGhpcyBzdWNoIHRoYXQKKyAgIHRoaXMKKyAgIGZ1bmN0aW9uIGRvZXMgbm8gbG9uZ2VyIHRlcm1pbmF0ZSB0aGUgaW5wdXQgYnVmZmVyIHdpdGggJ1wwJy4KKyAgIFRoaXMKKyAgIGNoYW5nZSB3YXMgcG9zc2libGUgYmVjYXVzZSBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QgYWxsCisgICBjYWxsZXJzIHRoYXQKKyAgIG5lZWRlZCBhICdcMCcgdGVybWluYXRlZCBzdHJpbmcgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgaW5zdGVhZC4KKworMjAxMC0wMS0wNiAxNzo1MiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKKworICAgUmV2ZXJ0ZWQgcjE3OTY4IGFuZCByMTc5NzIuCisKKzIwMTAtMDEtMDYgMTU6NDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIEZpeGVkIG1vcmUgY29tcGlsZXIgd2FybmluZ3MgcmVsYXRlZCB0byB0aGUgdXNlIG9mIHRoZSBjb25zdAorICAga2V5d29yZC4KKworMjAxMC0wMS0wNiAxNTozOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jOgorCisgICBGaXhlZCBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoLgorCisyMDEwLTAxLTA2IDE1OjM2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg6CisKKyAgIENoYW5nZWQgYXJndW1lbnQgdHlwZSBmcm9tIGNoYXIgKiBpbnRvIGNvbnN0IGNoYXIgKi4gU2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQgaW4gcjE3OTc1LgorCisyMDEwLTAxLTA2IDE1OjMzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMTU6MzEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCB0aGUgZnVuY3Rpb25zIHJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCkgYW5kCisgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigpLCB3aGljaAorICAgYWNjZXB0IGEgcGFyc2VyIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBzdHJpbmcgdGhhdCBpdAorICAgcGFyc2VzLiBVc2luZyB0aGVzZSBmdW5jdGlvbnMgcmVzdWx0cworICAgaW4gZWFzaWVyIHRvIHJlYWQgY29kZSB0aGFuIHVzaW5nIHRoZSBub24tY29uc3QgaGFuZGxlcgorICAgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgY2FzdGluZyB0aGUgcGFyc2VyCisgICBmdW5jdGlvbiBleHBsaWNpdGx5IGZyb20gKHZvaWQoKikoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSkgdG8KKyAgICh2b2lkKCopKGNvbnN0IGNoYXIqLCBjaGFyKikpLgorCisyMDEwLTAxLTA2IDE1OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QoKS4KKworMjAxMC0wMS0wNiAxNDo0MiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6CisKKyAgIER1cGxpY2F0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBSRUdJU1RFUl9TWVNPUl9UQUJMRSgpIC8KKyAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKCkKKyAgIHNpbmNlIHRoYXQgYXJndW1lbnQgaXMgZnJlZWQgd2hpbGUgdW5yZWdpc3RlcmluZyBzdWNoIGFuIGVudHJ5LgorICAgTm90IHN1cmUgd2hldGhlcgorICAgdGhpcyBjb3VsZCBhY3R1YWxseSB0cmlnZ2VyIGEgY2FsbCBvZiBmcmVlKCkgd2l0aCBhIGNvbnN0YW50CisgICBzdHJpbmcgYXMgYXJndW1lbnQKKyAgIGFuZCBJJ20gbmVpdGhlciBzdXJlIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgY291bGQgaGF2ZQorICAgdHJpZ2dlcmVkIGEgY3Jhc2guCisKKzIwMTAtMDEtMDYgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCwgc25tcGxpYi92YWNtLmM6CisKKyAgIEZvciB0aG9zZSBWQUNNIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBtb2RpZnkgdGhlIHN0cmluZ3MgcGFzc2VkIGFzCisgICBhcmd1bWVudHMsCisgICBjaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlIGZyb20gY2hhciAqIHRvIGNvbnN0IGNoYXIgKi4KKworMjAxMC0wMS0wNiAxNDoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjI2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jOgorCisgICBSZW1vdmVkIGFuIHVudXNlZCB2YXJpYWJsZS4KKworMjAxMC0wMS0wNiAxNDoxNCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYzoKKworICAgRHVwbGljYXRlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIFJFR0lTVEVSX1NZU09SX1RBQkxFKCkgLworICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoKQorICAgc2luY2UgdGhhdCBhcmd1bWVudCBpcyBmcmVlZCB3aGlsZSB1bnJlZ2lzdGVyaW5nIHN1Y2ggYW4gZW50cnkuCisgICBOb3Qgc3VyZSB3aGV0aGVyCisgICB0aGlzIGNvdWxkIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIG9mIGZyZWUoKSB3aXRoIGEgY29uc3RhbnQKKyAgIHN0cmluZyBhcyBhcmd1bWVudAorICAgYW5kIEknbSBuZWl0aGVyIHN1cmUgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyBjb3VsZCBoYXZlCisgICB0cmlnZ2VyZWQgYSBjcmFzaC4KKworMjAxMC0wMS0wNiAxNDowOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuaDoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdAorICAgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjA2ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMTQ6MDQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgbmV3IGZ1bmN0aW9ucyBza2lwX3doaXRlX2NvbnN0KCksIHNraXBfbm90X3doaXRlX2NvbnN0KCksCisgICBza2lwX3Rva2VuX2NvbnN0KCksIGNvcHlfbndvcmRfY29uc3QoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KCkuCisgICAtIENoYW5nZWQgcmV0dXJuIHR5cGUgb2YgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBmcm9tCisgICBjaGFyICogdG8KKyAgIGNvbnN0IGNoYXIgKi4gTm90ZTogdGhpcyBkb2VzIG5vdCBhZmZlY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgIHNpbmNlIHRoaXMKKyAgIGZ1bmN0aW9uIGhhcyBub3QgeWV0IGJlZW4gaW5jbHVkZWQgaW4gYW55IHJlbGVhc2UuCisgICAtIEZpeGVkIGRvY3VtZW50YXRpb24gb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkuCisgICAtIFJlZHVjZWQgbnVtYmVyIG9mIGNhc3QtYXdheS1jb25zdCBjb25zdHJ1Y3RzIGluIHJlYWRfY29uZmlnLmMuCisKKzIwMTAtMDEtMDYgMTM6MzUgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6CisKKyAgIFJlZmluZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWNybyBORVRTTk1QX1JFTU9WRV9DT05TVCgpOgorICAgd2hlbiB1c2luZworICAgdGhlIGdjYyBjb21waWxlciwgaXQgaXMgbm93IHZlcmlmaWVkIHdoZXRoZXIgdGhlIHR5cGVzIChjb25zdCB0KQorICAgYW5kIHR5cGVvZihlKQorICAgYXJlIGNvbXBhdGlibGUsIHdoZXJlIHQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBlIHRoZSBzZWNvbmQKKyAgIGFyZ3VtZW50IG9mCisgICB0aGlzIG1hY3JvLgogCiAyMDEwLTAxLTA2IDEzOjMzICBqc2FmcmFuZWsKIApAQCAtMzEyMSw3ICs0Nzk5NCw5NiBAQAogCiAgICAqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYjogQlVHUzogMjkyMjM5MDogRml4IHRlc3QgZm9yIG1pc3NpbmcgY29udGV4dE5hbWUgcGFyYW1ldGVyCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOiAyOTIyMzkwOiBGaXggdGVzdCBmb3IgbWlzc2luZyBjb250ZXh0TmFtZQorICAgcGFyYW1ldGVyCisKKzIwMTAtMDEtMDYgMTE6NTcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L3NubXBfcGVybC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEludHJvZHVjZWQgYSBuZXcgbWFjcm8gTkVUU05NUF9SRU1PVkVfQ09OU1QoKSB0aGF0IGFsbG93cyB0bworICAgY2FzdAorICAgYXdheSBjb25zdG5lc3Mgd2l0aG91dCB0aGF0IGdjYyAtV2Nhc3QtcXVhbCByZXBvcnRzIGEgd2FybmluZy4KKyAgIC0gTWFkZSBjYXN0aW5nIGF3YXkgY29uc3RuZXNzIGV4cGxpY2l0IGJ5IGludHJvZHVjaW5nIHRoZQorICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoKSBtYWNyby4gVGhpcyBzdXBwcmVzc2VzIHRoZSB3YXJuaW5nCisgICBnY2MgLVdjYXN0LXF1YWwgcHJpbnRlZCBmb3IgdGhlc2Ugc3RhdGVtZW50cy4KKworMjAxMC0wMS0wNiAxMTo0NiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDA5OjE0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFwcHMvYWdlbnR4dHJhcC5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIERvIG5vdCB1c2UgMCB3aGVuIHJlZmVycmluZyB0byBOVUxMLgorCisyMDEwLTAxLTA2IDA4OjI2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQ2hhbmdlZCBhcmd1bWVudCB0eXBlcyBvZiBjYWxjdWxhdGVfdGltZV9kaWZmKCkgYW5kCisgICBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkKKyAgIGZyb20gc3RydWN0IHRpbWV2YWwgKiB0byBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqLiBOb3RlOiB0aGlzIGRvZXMKKyAgIG5vdCBhZmZlY3QKKyAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisyMDEwLTAxLTA2IDA4OjIzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBDaGFuZ2VzIChubyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vZGlmaWVkKToKKyAgIC0gUmVtb3ZlZCBkaXNraW9fcGFyc2VfY29uZmlnKCkgZGVjbGFyYXRpb24gYmVjYXVzZSB0aGF0IGZ1bmN0aW9uCisgICBpcyBuZWl0aGVyIGNhbGxlZCBub3IgZGVmaW5lZCBpbiB0aGUgc291cmNlIGZpbGUgZGlza2lvLmMuCisgICAtIEFkZGVkIGRlY2xhcmF0aW9uIGZvciBnZXRzdGF0cygpIHN1Y2ggdGhhdCBnY2MgZG9lcyBub3QKKyAgIGNvbXBsYWluIGFib3V0IGEgbWlzc2luZyBkZWNsYXJhdGlvbi4KKyAgIC0gTGludXg6IGNoYW5nZWQgdmlzaWJpbGl0eSBvZiBnZXRzdGF0cygpIGZyb20gZ2xvYmFsIHRvIHN0YXRpYworICAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIEJTRCBhbmQgRGFyd2luIGltcGxlbWVudGF0aW9ucyBvZgorICAgZ2V0c3RhdHMoKS4KKworMjAxMC0wMS0wNiAwODowMCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKiBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDAyOjE4ICBtYWdmcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgbWFuL01ha2VmaWxlLmluLCB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgorCisgICBDSEFOR0VTOiBhcHBzOiBPbmx5IGJ1aWxkIGFnZW50eHRyYXAgaWYgdGhlIGFnZW50eCBsaWJyYXJpZXMgYXJlCisgICBidWlsdC4gQWRkIGEgdGVzdCBjYXNlIGZvciBhZ2VudHh0cmFwLgorICAgCisgICBUaGUgZW5hYmxlbWVudC9kaXNhYmxlbWVudCBpcyBpbnNwaWVyZWQgYnkgYXV0b21ha2UgY29uZGl0aW9uYWxzCisKKzIwMTAtMDEtMDYgMDE6NTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHN0YXJ0dGltZS4KKworMjAxMC0wMS0wNSAyMjo1NCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmg6CisKKyAgIENIQU5HRVM6IEhpZGUgbW9zdCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiB0aGUgbG9nbWF0Y2gKKyAgIG1vZHVsZS4gQ2xlYW5lZCB1cCB0aGUgaGVhZGVyIGFjY29yZGluZ2x5LiBSZW1vdmUgdGhlIG5lZWQgZm9yCisgICBmb3J3YXJkIGRlY2xhcmF0aW9ucyBieSByZW9yZGVyaW5nIHRoZSBmdW5jdGlvbnMuCiAKIDIwMTAtMDEtMDUgMjI6MzMgIGR0czEyCiAKQEAgLTMxNDcsOSArNDgxMDksMTc1IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMjU4NDogRml4IG51bGwgT0lEIGhhbmRsaW5nIGluIEFnZW50eCBvbiA2NGJpdAorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTEyNTg0OiBGaXggbnVsbCBPSUQgaGFuZGxpbmcgaW4gQWdlbnR4CisgICBvbiA2NGJpdAogICAgUGF0Y2ggc3VwcGxpZWQgYnkgTHV0eiBKYWVuaWNrZQogCisyMDEwLTAxLTA1IDEwOjExICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oOgorCisgICBDSEFOR0VTOiBocHV4OiBmaXggYnVpbGQgZXJyb3Igb24gSFAtVVggMTAuMjAKKworMjAxMC0wMS0wNSAwODo0MiAganNhZnJhbmVrCisKKyAgICogbWFuLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFJlbW92ZSBnZW5lcmF0ZWQgbWFuIHBhZ2VzIGZyb20gcmVwb3NpdG9yeS4KKworMjAxMC0wMS0wNCAxNjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeGVkIGEgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWQgdGhhdCBvY2N1cnJlZCB3aGVuIGFuIEFTQ0lJCisgICBzdHJpbmcgd2FzCisgICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgLworICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50ICgqbGVuKQorICAgZXF1YWxzIDAuCisKKzIwMTAtMDEtMDQgMTY6NDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjYXN0aW5nIGF3YXkgJ2NvbnN0Jy4KKworMjAxMC0wMS0wNCAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHVuaXQgdGVzdCBmb3IgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkuCisKKzIwMTAtMDEtMDQgMTA6NDUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIFVzZSBjb3JyZWN0IG9pZCBsZW5ndGggaW4gdGFibGUgaW5kZXhlcy4KKworMjAxMC0wMS0wNCAwODoxMCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgTWFkZSBzdXJlIHRoYXQgc25tcF9hbGFybS5jIGNhbiBiZSBjb21waWxlZCBhZ2FpbiB3aXRoIEM4OQorICAgY29tcGlsZXJzOiBmb3IgQzg5CisgICBpdCBpcyByZXF1aXJlZCB0aGF0IGluaXRpYWxpemVycyBhcmUgY29uc3RhbnQgZXhwcmVzc2lvbnMuCisKKzIwMTAtMDEtMDMgMTY6MjggIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmM6CisKKyAgIFJlbmFtZSBuZXRzbm1wX2FyY2hfdGNwY29ubl9kZWxldGUgdG8KKyAgIG5ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZSBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGgKKyAgIHRoZSBoZWFkZXIgZmlsZSBhbmQgYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS4KKworMjAxMC0wMS0wMyAxNjoyNiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIEFkZCBtaXNzaW5nIGRlY2xhcmF0aW9ucy4KKworMjAwOS0xMi0zMCAxMjo0OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgRm9sbG93LXVwIGZvciByMTc5MzM6IGZpeGVkIHRoZSBpc3N1ZSB0aGF0IGluY2x1ZGluZyB0aGUgaGVhZGVyCisgICBmaWxlCisgICA8bmV0LXNubXAvbGlicmFyeS90eXBlcy5oPiBmcm9tIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisgICB0cmlnZ2VycworICAgY29tcGlsZXIgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJlIHByb2Nlc3MgKGNvbXBsYWludHMgYWJvdXQKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBub3QgYmVpbmcgaW5jbHVkZWQgYmVmb3JlCisgICA8bmV0LXNubXAvdHlwZXMuaD4pLgorICAgTm90ZTogdGhpcyBkb2VzIG5vdCBzb2x2ZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIHRoYXQgTUlCIGNvZGUKKyAgIG11c3Qgbm90CisgICBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZSA8bmV0LXNubXAvdHlwZXMuaD4gYmVjYXVzZSBkb2luZyBzbyB3b3VsZAorICAgdHJpZ2dlciBhCisgICBjaXJjdWxhciBkZXBlbmRlbmN5IGR1cmluZyB0aGUgY29uZmlndXJlIHN0ZXAgKE1JQiBjb2RlIGlzCisgICBjb21waWxlZCBkdXJpbmcKKyAgIHRoZSBjb25maWd1cmUgc3RlcCwgd2hpbGUgdGhlIGNvbmZpZ3VyZSBzdGVwIGdlbmVyYXRlcworICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+IGFuZCA8bmV0LXNubXAvdHlwZXMuaD4gbmVlZHMKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPikuCisKKzIwMDktMTItMzAgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogYXBwcywgbWFuOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxOTogdXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0cy4KKworMjAwOS0xMi0yOCAxODowMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9pbmRleC5jOgorCisgICBGaXhlZCBhIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkLiBGb3VuZCB0aGlzIGJ5IGFuYWx5emluZyBjb21waWxlcgorICAgd2FybmluZ3MuCisgICBOb3RlOiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb24sIHJlZ2lzdGVyX3N0cmluZ19pbmRleCgpLCBpc24ndAorICAgY2FsbGVkIGZyb20KKyAgIGFueXdoZXJlIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdCBpdHNlbGYuCisKKzIwMDktMTItMjMgMDk6NDkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIEZpeCBpbnZhbGlkIHJlYWQgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQ6CisgICBJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBtZW1jcHkgKG1jX3JlcGxhY2Vfc3RybWVtLmM6NDAyKQorICAgX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkX3Y0CisgICAoaXBhZGRyZXNzX2lvY3RsLmM6MjQwKQorICAgbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jb250YWluZXJfbG9hZCAoaXBhZGRyZXNzX2xpbnV4LmM6MTU4KQorICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkIChpcGFkZHJlc3NfY29tbW9uLmM6MTEyKQorICAgCisgICBSZXR1cm5pbmcgc3RydWN0dXJlIHdpdGggcG9pbnRlcnMgaW5zaWRlIGlzIG5vdCB0aGUgYmVzdCB0aGluZyB0bworICAgZG8uCisKKzIwMDktMTItMjIgMTY6MDUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWRzLgorCisyMDA5LTEyLTIyIDEyOjAyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAKKyAgICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIFJldmVydGVkIHRoZSBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZXMgb2YgcjE3OTEzOgorICAgLSBSZXN0b3JlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgRElGRlRJTUVWQUwoKSBtYWNyby4KKyAgIC0gUmVzdG9yZWQgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBmdW5jdGlvbnMKKyAgIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSwKKyAgIHVhdGltZV9yZWFkeSgpLCBtYXJrZXJfdHRpY2tzKCkgYW5kIHRpbWV2YWxfdHRpY2tzKCkuCisgICAtIHN0YXJ0dGltZSBpcyBhZ2FpbiBhIGdsb2JhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc3RhdGljIG9uZS4KKyAgIEFsc28gaW1wbGVtZW50ZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgLSBNb3ZlZCB0aGUgbWFya2VyX3QgdHlwZWRlZiBmcm9tIG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCB0bworICAgbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLgorICAgLSBBZGRlZCBhIG5ldyB0eXBlZGVmLCBjb25zdF9tYXJrZXJfdC4KKyAgIC0gRm9yIHRob3NlIGF0aW1lXyooKSAvIHVhdGltZV8qKCkgLyAqX3R0aWNrcygpIGZ1bmN0aW9ucyB0aGF0IGRvCisgICBub3QgY2hhbmdlCisgICB0aGVpciBhcmd1bWVudHMsIGRlY2xhcmVkIHRoZXNlIGFyZ3VtZW50cyBjb25zdF9tYXJrZXJfdCBpbnN0ZWFkCisgICBvZiBtYXJrZXJfdC4KKyAgIC0gUmVuYW1lZCBuZXRzbm1wX2dldF9zdGFydHRpbWUoKSBhbmQgbmV0c25tcF9zZXRfc3RhcnR0aW1lKCkgdG8KKyAgIG5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpIGFuZCBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoKQorICAgcmVzcGVjdGl2ZWx5LiBNb3ZlZCB0aGVzZSBmdW5jdGlvbnMgZnJvbSB0b29scy5jIHRvIHN5c3RlbS5jLgorICAgLSBSZW1vdmVkIHRoZSBmdW5jdGlvbiBhdGltZV9oc3VidHJhY3QoKSAod2FzIGludHJvZHVjZWQgaW4KKyAgIHIxNzkxMykgYW5kCisgICBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uLCBuZXRzbm1wX3NldF9hZ2VudF91cHRpbWUoKS4KKwogMjAwOS0xMi0yMiAwNzo1OSAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CkBAIC0zMTYzLDYgKzQ4MjkxLDI1IEBACiAgICBzdHJpbmcKICAgIHJlYWQgYnkgdGhpcyBmdW5jdGlvbi4KIAorMjAwOS0xMi0yMSAxNDoyOSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IGNyYXNoIGluIElGLU1JQiBhbmQgSVAtTUlCIHdoZW4gdGhlcmUgYXJlCisgICBzb21lIGludGVyZmFjZXMgd2l0aCBicm9hZGNhc3QgSVAgYWRkcmVzcyBhbmQgc29tZSB3aXRob3V0LgorICAgCisgICBSZXNldCB0aGUgYmNhc3RlbnRyeSBpbiB0aGUgbG9vcCwgc28gaXQgY2Fubm90IGJlIGluc2VydGVkIHRvIHRoZQorICAgY29udGFpbmVyCisgICB0d2ljZS4KKyAgIAorICAgV2l0aG91dCB0aGlzIHBhdGNoLCB3aGVuIGFuIGludGVyZmFjZSB3aXRob3V0IGJyb2FkY2FzdCBhZGRyZXNzCisgICBpcyBwcm9jZXNzZWQsCisgICB0aGUgYmNhc3RhZGRyZXNzIGZyb20gcHJldmlvdXMgbG9vcCBpcyBpbnNlcnRlZCBpbnRvIHRoZQorICAgY29udGFpbmVyLiBUaGlzCisgICBvYnZpb3VzbHkgZmFpbHMgYW5kIHRoZSBiY2FzdGVudHJ5IGlzIGZyZWVkLCBidXQgdGhlIGNvbnRhaW5lcgorICAgc3RpbGwgY29udGFpbnMKKyAgIHJlZmVyZW5jZSB0byBpdCAtPiBTSUdTRUdWLgorCiAyMDA5LTEyLTIxIDEzOjUyICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKQEAgLTMxNzcsNiArNDgzMjQsMzAgQEAKICAgIHRyaWdnZXJlZCBieQogICAgcGFyc2luZyB0aGUgcGVyc2lzdGVudERpciBrZXl3b3JkLgogCisyMDA5LTEyLTIxIDEzOjMyICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBBcHBsaWVkIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBwYXRjaCAjMjkwMTEyMi4gQ2hhbmdlczoKKyAgIC0gTmV3IGZlYXR1cmU6IHNwZWNpZnlpbmcgQVNOIHR5cGUgU05NUF9OT1NVQ0hJTlNUQU5DRSBhcyB0aGUKKyAgIHRoaXJkIGFyZ3VtZW50CisgICBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkgd2lsbCBjYXVzZSBhbiBTTk1QIEdldFJlcXVlc3QgLworICAgR2V0TmV4dFJlcXVlc3QgdG8KKyAgIHJldHVybiB0aGUgZXJyb3IgY29kZSBub1N1Y2hJbnN0YW5jZSAoU05NUHYyKSBvciBub1N1Y2hOYW1lCisgICAoU05NUHYxKS4gVGhpcworICAgbWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZSBhIGNhY2hlZCB0YWJsZSB3aXRoIG9uZSBvciBtb3JlCisgICAiaG9sZXMiLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvIG5vdCBmcmVlKCkgLyBtYWxsb2MoKSB0aGUgbWVtb3J5CisgICBmb3Igc3RvcmluZworICAgdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgdmFsdWUgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvIG5vdCBmcmVlKCkgLyBtYWxsb2MoKSB0aGUgbWVtb3J5CisgICBmb3Igc3RvcmluZworICAgdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4KKyAgIG1vZGlmaWVkLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGlmIHRoZSBzaXplIG9mIHRoZSBjYWNoZWQgdmFsdWUKKyAgIHNocnVuaywgdXNlCisgICByZWFsbG9jKCkgaW5zdGVhZCBvZiBmcmVlKCkgYW5kIG1hbGxvYygpLgorCiAyMDA5LTEyLTIxIDEyOjIzICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKQEAgLTMyMTcsNyArNDgzODgsOCBAQAogICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmM6CiAKICAgIEFwcGxpZWQgcGF0Y2ggIzI5MTIwNjgsIHdoaWNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgZHVyaW5nIHN0YXJ0dXAuCi0gICBUaGUgZnVuY3Rpb24gbG9nX25vdGlmaWNhdGlvbigpIGFkZHMgYSByb3cgdG8gdGhlIHRhYmxlCisgICBUaGUKKyAgIGZ1bmN0aW9uIGxvZ19ub3RpZmljYXRpb24oKSBhZGRzIGEgcm93IHRvIHRoZSB0YWJsZQogICAgbmxtTG9nVmFyVGFibGUsIGJ1dAogICAgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGF0IHRhYmxlIGhhcyBiZWVuCiAgICBpbml0aWFsaXplZC4gSWYKQEAgLTMyNDIsMTEgKzQ4NDE0LDExOSBAQAogICAgdmFyYmluZCBpbmNsdWRlZCBpbiB0cmFwcyBnZW5lcmF0ZWQgYnkgTmV0LVNOTVAgaXRzZWxmIChlLmcuCiAgICBjb2xkU3RhcnQpLiIKIAotMjAwOS0xMi0yMSAxMDo1MCAgYnZhc3NjaGUKKzIwMDktMTItMjEgMTA6MDkgIGJ2YXNzY2hlCiAKLSAgICogUkVBRE1FLndpbjMyOgorICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsICAgCisgICAgICBzbm1wbGliL3NubXBfYWxhcm0uYzoKIAotICAgQmFja3BvcnRlZCByMTc5MDEgKHNwZWxsaW5nIGZpeGVzIGFuZCBoclN5c3RlbVVwdGltZSBkb2N1bWVudGF0aW9uKS4KKyAgIFNwZWxsaW5nIGZpeDogcmVwbGFjZWQgYWxsIG9jY3VycmVuY2VzIG9mICdzcGVjaWZjJyBieQorICAgJ3NwZWNpZmljJy4KKworMjAwOS0xMi0yMSAxMDowNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgUmVmYWN0b3Jpbmc6IGVsaW1pbmF0ZWQgZHVwbGljYXRlZCBjb2RlIGJ5IHJlaW1wbGVtZW50aW5nCisgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCkgdXNpbmcgc25tcF9hbGFybV9yZWdpc3Rlcl9ocigpLiBOZWl0aGVyIHRoZQorICAgTmV0LVNOTVAgQVBJIG5vciB0aGUgYmVoYXZpb3Igb2Ygc25tcF9hbGFybV9yZWdpc3RlcigpIGhhcyBiZWVuCisgICBjaGFuZ2VkLgorCisyMDA5LTEyLTIwIDExOjEwICBtYWdmcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL2FnZW50eHRyYXAuYywgbWFuL01ha2VmaWxlLmluLCAgIAorICAgICAgbWFuL2FnZW50eHRyYXAuMS5kZWY6CisKKyAgIE5FV1M6IGFwcHM6IEFkZCBjb21tYW5kIHRvIHNlbmQgQWdlbnRYIG5vdGlmeSByZXF1ZXN0cyB0byBhCisgICBtYXN0ZXIgYWdlbnQuCisKKzIwMDktMTItMTcgMTY6NDQgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxNyAtLSBidWlsZHMgYWdhaW4gb24gV2luZG93cyBzeXN0ZW1zLgorCisyMDA5LTEyLTE3IDE2OjAzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkwMyAvIHBhdGNoIDI5MTEzMjMgIkZpeCBhZ2VudCBsb2NrdXAgd2hlbgorICAgbW9uaXRvcmluZworICAgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbiIgKHN1Ym1pdHRlZCBieSBteXNlbGYpLiBUaGF0IHBhdGNoCisgICBkaWQgbm90IG9ubHkKKyAgIGZpeCB0aGUgbG9ja3VwIGJ1dCBhbHNvIG1hZGUgc25tcGQgcHJpbnQgYSB3YXJuaW5nIGR1cmluZyBzdGFydHVwCisgICB3aGVuCisgICBpcXVlcnlTZWNOYW1lIHdhcyBub3QgY29uZmlndXJlZC4gVGhpcyB3YXJuaW5nIHdhcyBwcmludGVkIGV2ZW4KKyAgIHdoZW4gbm8KKyAgIGludGVybmFsIHF1ZXJpZXMgd2VyZSBwZXJmb3JtZWQuIFRoaXMgd2FybmluZyBpcyBub3cgb25seSBwcmludGVkCisgICBqdXN0IGJlZm9yZQorICAgdGhlIGZpcnN0IGludGVybmFsIHF1ZXJ5IGlzIG1hZGUgKGR1cmluZyB0aGUgZmlyc3QgY2FsbCBvZgorICAgbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCkgaW5zdGVhZCBvZiBkdXJpbmcgY3JlYXRpb24gb2YKKyAgIHRoZSBpbnRlcm5hbAorICAgc2Vzc2lvbikuCisKKzIwMDktMTItMTcgMTM6NTUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYzoKKworICAgUk1PTiBNSUIgc291cmNlIGNvZGUgY29tcGlsZXMgYWdhaW4gLS0gc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3OTEzLgorCisyMDA5LTEyLTE3IDEzOjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIE1vZGlmaWVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkgYW5kCisgICBBR1VUSUxfc3lzX3VwX3RpbWUoKSBzdWNoIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG5vcm1hbGl6ZSB0aGUKKyAgIHR2X3VzZWMgZmllbGQgb2YKKyAgIHN0cnVjdCB0aW1ldmFsIHByb3Blcmx5LiBOb3RlOiB0aGlzIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbiBkb2VzCisgICBub3QgYWZmZWN0CisgICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBhZm9yZW1lbnRpb25lZCB0d28gZnVuY3Rpb25zLgorCisyMDA5LTEyLTE3IDEzOjExICBidmFzc2NoZQorCisgICAqIG1hbi9uZXRzbm1wX3V0aWwuMzoKKworICAgUmVtb3ZlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBESUZGVElNRVZBTCgpIG1hY3JvIC0tIHNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc5MTMuCisKKzIwMDktMTItMTcgMTM6MDUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDb252ZXJ0ZWQgc3RhcnR0aW1lIGZyb20gYSBnbG9iYWwgdmFyaWFibGUgaW50byBhIHN0YXRpYyB2YXJpYWJsZQorICAgYW5kIGFwcGxpZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgLSBBZGRlZCB0d28gbmV3IG1hY3JvczogTkVUU05NUF9USU1FUkFERCgpIGFuZAorICAgTkVUU05NUF9USU1FUlNVQigpLgorICAgLSBBZGRlZCB0aHJlZSBuZXcgZnVuY3Rpb25zOiBuZXRzbm1wX2dldF9zdGFydHRpbWUoKSwKKyAgIG5ldHNubXBfc2V0X3N0YXJ0dGltZSgpIGFuZCBhdGltZV9oc3VidHJhY3QoKS4KKyAgIC0gUmVwbGFjZWQgZ2V0dGltZW9mZGF5KCkgKyBjYWxjdWxhdGVfdGltZV9kaWZmKCkgY2FsbHMgYnkgYSBjYWxsCisgICB0byBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKS4KKyAgIC0gUmVtb3ZlZCB0aGUgbWFjcm8gRElGRlRJTUVWQUwoKSBiZWNhdXNlIGl0IHdhcyBub3QgdXNlZCBpbnNpZGUKKyAgIHRoZSBOZXQtU05NUCBwcm9qZWN0IGFuZCBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhIGJ1Zy4KKyAgIC0gUmVtb3ZlZCB0aGUgZnVuY3Rpb25zIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSwgdWF0aW1lX3JlYWR5KCksCisgICBtYXJrZXJfdHRpY2tzKCkgYW5kIHRpbWV2YWxfdHRpY2tzKCkuCisKKzIwMDktMTItMTcgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQnVnIGZpeDogYWNjb3JkaW5nIHRvIFJGQyAyNTcxIHRoZSB1bml0IG9mIHNubXBFbmdpbmVUaW1lIGlzIG9uZQorICAgc2Vjb25kLAorICAgbm90IG9uZSBodW5kcmVkdGggb2YgYSBzZWNvbmQuCiAKIDIwMDktMTItMTcgMTA6MDMgIGR0czEyCiAKQEAgLTMyNTQsNiArNDg1MzQsNTUgQEAKIAogICAgRml4IHR5cG8uCiAKKzIwMDktMTItMTYgMTI6MzAgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvdG9vbHMuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93cy1vbmx5IGJ1ZyBmaXhlczoKKyAgIC0gRml4ZWQgdGhlIHN0cmFuZ2UgYnVpbGQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgd2hlbiBjb21waWxpbmcKKyAgIGxpYm5ldHNubXAgYXMgYSBETEwgYW5kIHdoZW4gZWl0aGVyIDxzdGRsaWIuaD4gb3IgPHN0cmluZy5oPiB3YXMKKyAgIGluY2x1ZGVkIGFmdGVyIDxuZXQtc25tcC1jb25maWcuaD4gaW5zdGVhZCBvZiBiZWZvcmUuCisgICAtIEZvciBkZWJ1ZyBidWlsZHMgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbywgZml4ZWQgdGhlCisgICBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIF9tYWxsb2NfZGJnKCkgY2FsbCBpbnZva2VkIGJ5IHN0cmR1cCgpIGFuZAorICAgZnJlZSgpLWluZyBzdHJkdXAoKS1lZCBtZW1vcnkgYnkgaW5jbHVkaW5nIHRoZSA8Y3J0ZGJnLmg+IGhlYWRlcgorICAgaW4gdG9vbHMuYyBhbmQgYnkgZGVmaW5pbmcgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wKKyAgIF9DUlREQkdfTUFQX0FMTE9DLiBEZXRlY3RlZCB2aWEgdGhlIG1lbW9yeSBjaGVja2VyIGluY2x1ZGVkIGluCisgICBJbnRlbCBQYXJhbGxlbCBTdHVkaW8uCisKKzIwMDktMTItMTQgMTc6MjMgIHRhbmRlcnMKKworICAgKiAgcGVybC9hZ2VudC9hZ2VudC54cywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgc3luYyBkZWZpbml0aW9uIG9mIG5ldHNubXBfdWRwX2FkZHJfcGFpciBpbiBQZXJsIHdpdGggdGhlIGNoYW5nZXMKKyAgIGluCisgICByMTc4NTUgYW5kIHIxNzkwOAorCisyMDA5LTEyLTE0IDEzOjU1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBUQ1BEb21haW4uYzoKKworICAgRml4IFRDUCB0cmFuc3BvcnQgYnJva2VuIGJ5IHJldi4gMTc4NTUgLSBjb3BpZXMgb2YKKyAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciBpbiBzbm1wVENQRG9tYWluLmMgYW5kIHNubXBVRFBEb21haW4uYyBtdXN0CisgICBiZSB0aGUgc2FtZS4KKworMjAwOS0xMi0xMSAxNDo0MyAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB1c20uYywgbWFuL3NubXB1c20uMS5kZWY6CisKKyAgIENIQU5HRVM6IHNubXB1c206IHBhdGNoIGZyb20gTWFydGluIEJqb3JrbHVuZCB0byBhZGQgYSAtQ3cgb3B0aW9uCisgICB0byB1c2UgY3JlYXRlQW5kV2FpdCBmb3IgYWdlbnRzIHRoYXQgYXJlIHN0cmljdCBhYm91dCBub3QKKyAgIGFsbG93aW5nIGEgcm93IHRvIGJlIHNldCB0byBhY3RpdmUgdW50aWwgdGhlIGF1dGhlbnRpY2F0aW9uCisgICBwYXNzd29yZCBoYXMgYmVlbiBjaGFuZ2VkOyBwbHVzIHdoaXRlLXNwYWNlIGNsZWFuIHVwLCBtYW51YWwKKyAgIGFkZGl0aW9ucyBhbmQgaGVscCBvdXRwdXQgbW9kaWZpY2F0aW9ucyBieSBoYXJkYWtlcgorCisyMDA5LTEyLTExIDE0OjM1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGEgZm9ybWF0IHNwZWNpZmllciBtaXNtYXRjaC4KKwogMjAwOS0xMi0xMSAxNDowNiAgYnZhc3NjaGUKIAogICAgKiBSRUFETUUud2luMzIsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgpAQCAtMzI2NywxMiArNDg1OTYsMzYgQEAKICAgIHRyYXBzIGlzIG5vdwogICAgY29ycmVjdC4KIAorMjAwOS0xMi0xMCAxNTo1MiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIRVM6IDI5MTE5NzA6IFByb3Blcmx5IHRlcm1pbmF0ZSBsaW5rZWQgbGlzdAorICAgb2YgcmVnaXN0cmF0aW9ucy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1pcmtvIERlY2tlcnQuCisKIDIwMDktMTItMTAgMTU6NDMgIGR0czEyCiAKICAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI5MTEzMjM6IEZpeCBhZ2VudCBsb2NrdXAgd2hlbiBtb25pdG9yaW5nIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyOTExMzIzOiBGaXggYWdlbnQgbG9ja3VwIHdoZW4KKyAgIG1vbml0b3JpbmcgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbgorCisyMDA5LTEyLTEwIDEzOjU5ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgTWljcm9zb2Z0J3MgaW1wbGVtZW50YXRpb24gb2YKKyAgIGhyU3lzdGVtVXB0aW1lLjAuCisgICAtIEZpeGVkIGEgZmV3IHR5cG9zLgorCisyMDA5LTEyLTEwIDEzOjAxICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgbmV3bGluZSBpbiBhIGxvZ2dpbmcgc3RhdGVtZW50LgogCiAyMDA5LTEyLTEwIDEyOjU0ICBidmFzc2NoZQogCkBAIC0zMjg3LDIxICs0ODY0MCwyOTQgQEAKICAgIGhhcyBiZWVuCiAgICBkZXRlY3RlZC4KIAorMjAwOS0xMi0xMCAxMjozNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgT0lEcyBpbiBkZWJ1ZyBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIHdpbkV4dERMTCBtb2R1bGUgYXJlIG5vdworICAgcHJpbnRlZCBpbgorICAgc3ltYm9saWMgZm9ybSBpbnN0ZWFkIG9mIG51bWVyaWMgZm9ybS4KKworMjAwOS0xMi0xMCAwODo1NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIFByb2plY3QgZGVwZW5kZW5jaWVzIHNob3VsZCBub3cgcmVhbGx5IGJlIGNvcnJlY3QuIFNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc4NzMuCisKKzIwMDktMTItMTAgMDg6NDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENoYW5nZXMgKG9ubHkgc291cmNlIGNvZGUgY29tbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQpOgorICAgLSBSZW1vdmVkIGEgbm90ZSB0aGF0IGNvbnRyYWRpY3RlZCB0aGUgaW5zdHJ1Y3Rpb25zIGluCisgICBSRUFETUUud2luMzIuCisgICAtIFVwZGF0ZWQgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiB0aGUgZmlsZQorICAgd2luMzIvU25tcC13aW5FeHRETEwuaCBpbiByMTc4MzAuCisKKzIwMDktMTItMTAgMDg6MTcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wc3RhdHVzLmM6CisKKyAgIE1hZGUgZmlsZSBoZWFkZXIgY29tbWVudHMgY29uc2lzdGVudCB3aXRoIHRoZSBkZXNjcmlwdGlvbnMgaW4gdGhlCisgICByZXNwZWN0aXZlIG1hbiBwYWdlcy4KKworMjAwOS0xMi0xMCAwMzowNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWdlbnRfc3lzT1JfY2FsbGJhY2sgd29uJ3QgdHJpZ2dlciBhIHdhcm5pbmcgd2hlbgorICAgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLiBDaGFuZ2UgYWdlbnR4X3Jlb3Blbl9zeXNPUlRhYmxlIGluCisgICBvcmRlciB0byBhdm9pZCB3YXJuaW5ncyBvZiBjb25zdCByZW1vdmFsLgorCisyMDA5LTEyLTA5IDE1OjA1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIC0gTW92ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSB2YXJpYWJsZSAnbmV3bGluZScgaW5zaWRlIHRoZQorICAgZnVuY3Rpb24KKyAgIGxvZ19oYW5kbGVyX3N0ZG91dGVycigpIGJlY2F1c2UgdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgYnkKKyAgIHRoYXQgZnVuY3Rpb24uCisgICAtIERvY3VtZW50ZWQgdGhlIHB1cnBvc2Ugb2YgdGhlIHZhcmlhYmxlICduZXdsaW5lJy4KKyAgIC0gQnVnIGZpeDogbWFkZSBzdXJlIHRoYXQgdGhlIGNhbGwgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCkgZG9lcworICAgbm90IHRyaWdnZXIgYW4KKyAgIGludmFsaWQgbWVtb3J5IGFjY2VzcyAoc3RyWy0xXSkgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIHRvCisgICB0aGlzIGZ1bmN0aW9uLgorCiAyMDA5LTEyLTA5IDE0OjM3ICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAogICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDoKIAotICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBzdXBwb3J0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoIEhXIGFkZHJlc3MgYmlnZ2VyIHRoYW4gNiBieXRlcyB0byBpcE5ldFRvTWVkaWFUYWJsZSBhbmQgaXBOZXRUb1BoeXNpY2FsVGFibGUuCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIHN1cHBvcnQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHdpdGggSFcgYWRkcmVzcworICAgYmlnZ2VyIHRoYW4gNiBieXRlcyB0byBpcE5ldFRvTWVkaWFUYWJsZSBhbmQKKyAgIGlwTmV0VG9QaHlzaWNhbFRhYmxlLgogICAgU29tZSBIVywgbGlrZSBJbmZpbmlCYW5kLCB1c2VzIEhXIGFkZHJlc3NlcyB3aXRoIDkgYW5kIG1vcmUKICAgIGJ5dGVzLiBTbm1wZCBvbiBMaW51eCB3YXMgbm90IGFibGUgdG8gcGFyc2UgL3Byb2MvbmV0L2FycCB0aGVuCiAgICBhbmQgcHJvZHVjZWQgdWdseSAnaW9jdGwgMzUxMjMgcmV0dXJuZWQgLTEnIHRvIGxvZy4KIAorMjAwOS0xMi0wOSAxMjoyNyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIEFkZGVkIG1pc3NpbmcgLUxvIGluIGEgY29tbWFuZCBsaW5lIGV4YW1wbGUuCisKKzIwMDktMTItMDkgMTI6MTYgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvc25tcGRzZGsvc25tcGQuZHNwOgorCisgICBBZGRlZCBzbm1wYXBpLmxpYiB0byB0aGUgbGlua2VyIGlucHV0IGxpc3Qgb2Ygc25tcGQuZXhlLgorICAgQXBwYXJlbnRseSBWaXN1YWwKKyAgIFN0dWRpbyAyMDA1IGFuZCAyMDA4IG5lZWQgdGhpcyBsaWJyYXJ5IGluIHRoZSBsaW5rZXIgaW5wdXQgbGlzdAorICAgd2hlbiBsaW5raW5nCisgICB0aGUgZXhlLCB3aGlsZSBmb3IgVmlzdWFsIFN0dWRpbyA2IGl0IGlzIHN1ZmZpY2llbnQgd2hlbiB0aGlzCisgICBsaWJyYXJ5IGlzCisgICBwcmVzZW50IGluIHRoZSBsaW5rZXIgaW5wdXQgbGlzdCBvZiBuZXRzbm1wbWlicy5saWIuCisKKzIwMDktMTItMDkgMDg6NDUgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBVcGRhdGVkIFJFQURNRS53aW4zMjogYmVjYXVzZSBvZiByMTc4ODQgYW5kIHIxNzg3MywgdGhlIGJ1aWxkCisgICBwcm9jZXNzIGJlY2FtZSBzaW1wbGVyLgorCisyMDA5LTEyLTA5IDA4OjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBFeHBvcnQgc3RydG91bGwgLS0gc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiByMTc4ODYuCisKKzIwMDktMTItMDkgMDg6MjEgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBSZXZlcnRlZCByMTc3MDAgZm9yIFJFQURNRS53aW4zMjogYmVjYXVzZSBvZiByMTc4ODYsIG1vZGlmeWluZworICAgdGhlCisgICBzdHJ0b3VsbCBsaW5lIGluIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmIGlzIG5vIGxvbmdlcgorICAgbmVjZXNzYXJ5LgorCisyMDA5LTEyLTA5IDA4OjEyICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAKKyAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93czogc3dpdGNoZWQgZnJvbSBfc3RydG91aTY0KCkgdG8gc3RydG91bGwoKSBmb3IgTWljcm9zb2Z0CisgICBWaXN1YWwgU3R1ZGlvCisgICAyMDAyIGFuZCBsYXRlciBiZWNhdXNlIHRoZSBmb3JtZXIgaXMgbm90IGZ1bGx5IFBPU0lYIGNvbXBsaWFudC4KKyAgIFRoZSBzdHJ0b3VsbCgpCisgICB1bml0IHRlc3QgcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgZm9yIF9zdHJ0b3VpNjQoKSB3aXRoCisgICBNU1ZDIDIwMDg6CisgICB0ZXN0IDE0IGZhaWxlZCAoaW5wdXQgIjB4Iik6IGV4cGVjdGVkIGVuZCAxLCBnb3QgZW5kIDAKKyAgIHRlc3QgMTYgZmFpbGVkIChpbnB1dCAiMHgiKTogZXhwZWN0ZWQgZW5kIDEsIGdvdCBlbmQgMAorCiAyMDA5LTEyLTA4IDIxOjU0ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgc25tcGxpYi9zeXN0ZW0uYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IGEgbWFzayBpcyBnaXZlbiB0byBvcGVuIHdoZW4gT19DUkVBVCBpcyBzcGVjaWZpZWQKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBNYWtlIHN1cmUgdGhhdCBhIG1hc2sgaXMgZ2l2ZW4gdG8gb3BlbgorICAgd2hlbiBPX0NSRUFUIGlzIHNwZWNpZmllZAorCisyMDA5LTEyLTA4IDE2OjIwICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyLmRzdzoKKworICAgTWFkZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBleGUncyBhbmQgbGliJ3MgZXhwbGljaXQgc3VjaCB0aGF0CisgICBWaXN1YWwKKyAgIFN0dWRpbyBjYW4gZmlndXJlIG91dCB0aGUgcHJvcGVyIGJ1aWxkIG9yZGVyIGluc3RlYWQgb2YgdGhlIHVzZXIKKyAgIGhhdmluZworICAgdG8gZmlndXJlIHRoaXMgb3V0LgorCisyMDA5LTEyLTA4IDE1OjQ3ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBVbml4IHN5c3RlbXMgKGZpeGVkIGEgdHlwbyBpbnRyb2R1Y2VkIGluIHIxNzg4MSkuCisKKzIwMDktMTItMDggMTU6MzcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwOgorCisgICBBZGRlZCBtaXNzaW5nICNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuIFdpdGhvdXQgdGhpcworICAgZGVmaW5lIHRoZSBNaWNyb3NvZnQKKyAgIFZpc3VhbCBTdHVkaW8gY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGEgYmVuaWduIHJlZGVmaW5pdGlvbiBvZgorICAgdHlwZSBzb2NrbGVuX3QuCisKKzIwMDktMTItMDggMTU6MjggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgQ2xlYW5lZCB1cCB0aGUgY29kZSBmb3Igc2V0dGluZyBsaW5lIGJ1ZmZlcmluZzoKKyAgIC0gSW5zdGVhZCBvZiBoYXZpbmcgY2FsbHMgdG8gc2V0dmJ1ZigpIGluIG11bHRpcGxlIGZpbGVzLCB0aGVyZQorICAgaXMgbm93IG9uZSBjYWxsCisgICB0byBzZXR2YnVmKCkgZnJvbSB0aGUgbmV3IGZ1bmN0aW9uIG5ldHNubXBfc2V0X2ZpbGVsb2cuIFRoZXNlCisgICBzb3VyY2UgZmlsZXMKKyAgIGFyZTogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYywKKyAgIGFwcHMvc25tcHRhYmxlLmMKKyAgIGFuZCBhZ2VudFxtaWJncm91cFxkaXNtYW5cdHJhY2Vyb3V0ZVx0cmFjZVJvdXRlQ3RsVGFibGUuYy4KKyAgIC0gVXNpbmcgLUxvIC8gLUxlIGRvZXMgbm93IGVuYWJsZSBsaW5lIGJ1ZmZlcmluZyBmb3Igc3Rkb3V0IC8KKyAgIHN0ZGVyciByZXNwZWN0aXZlbHkuCisgICAtIFJlbW92ZWQgY29kZSBpbiBzbm1wZC5jIGFuZCBzbm1wdHJhcGQuYyBmb3Igc2V0dGluZyBsaW5lCisgICBidWZmZXJpbmcgb24gc3Rkb3V0CisgICBzaW5jZSBzZXR0aW5nIGxpbmUgYnVmZmVyaW5nIG9uIHN0ZG91dCBpcyBub3cgdHJpZ2dlcmVkIGJ5IHRoZQorICAgY29tbWFuZC1saW5lCisgICBvcHRpb24gLUxvLgorICAgQnVncyBmaXhlZDoKKyAgIC0gTGluZSBidWZmZXJpbmcgbW9kZSBpcyBub3cgYWxzbyBzZXQgZm9yIHN0ZGVyciB3aGVuIHRoZQorICAgY29tbWFuZC1saW5lIG9wdGlvbgorICAgLUxlIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAgIC0gTGluZSBidWZmZXJpbmcgbW9kZSBpcyBub3cgc2V0IGNvcnJlY3RseSBmb3Igc3Rkb3V0IG9uIFdpbmRvd3MKKyAgIHN5c3RlbXMKKyAgIChjb21tYW5kLWxpbmUgb3B0aW9uIC1MbykuCisKKzIwMDktMTItMDggMTI6MzIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgbG9jYWwgdmFyaWFibGVzIHRoYXQgd2VyZSBkZWZpbmVkCisgICBidXQKKyAgIG5vdCB1c2VkIGJ5IG9ubHkgZW5hYmxpbmcgdGhlIGxvY2FsIHZhcmlhYmxlIGRlZmluaXRpb25zIG9uIHRoZQorICAgcGxhdGZvcm0gdGhhdCB1c2VzIHRoZXNlIHZhcmlhYmxlcyAoTGludXgpLgorCisyMDA5LTEyLTA4IDEyOjI2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgQWRkZWQgI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIuIEZpeGVzIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAwOS0xMi0wOCAxMjoyNSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L21haW4uYzoKKworICAgSW5jbHVkZSB0aGUgZ2V0aG9zdGVudCgpIC8gc2V0aG9zdGVudCgpIGRlY2xhcmF0aW9ucyBiZWZvcmUgdXNpbmcKKyAgIHRoZXNlCisgICBmdW5jdGlvbnMuIEZpeGVzIGEgY29tcGlsZXIgd2FybmluZyBvbiBXaW5kb3dzIHN5c3RlbXMuCisKKzIwMDktMTItMDggMTI6MTEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgRml4ZWQgYW4gaW5jb25zaXN0ZW5jeSAod2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgQU5TSSBDIHN0YW5kYXJkKQorICAgYmV0d2VlbgorICAgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YKKyAgIG5ldHNubXBfYWRkX2dsb2JhbF90cmFwaGFuZGxlciBhbmQKKyAgIG5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIgc3VjaAorICAgdGhhdCB0aGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gY29tcGlsZXIgZG9lcyBubyBsb25nZXIgY29tcGxhaW4KKyAgIGFib3V0CisgICB0aGlzLgorCisyMDA5LTEyLTA4IDEyOjA4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90CisgICBjb21wbGFpbiBhYm91dCBpbXBsaWNpdGx5IGNhc3RpbmcgYXdheSBjb25zdG5lc3MuCisKKzIwMDktMTItMDggMTI6MDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE9ubHkgY29tcGlsZSB0aGUgd2luRXh0RExMIHNvdXJjZSBjb2RlIGlmIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8KKyAgIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUgaGFzIGJlZW4gZGVmaW5lZC4KKworMjAwOS0xMi0wOCAxMjowMyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBBZGRlZCBtaXNzaW5nICNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuCisKKzIwMDktMTItMDggMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBNYWRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGV4ZSdzIGFuZCBsaWIncyBleHBsaWNpdCBzdWNoIHRoYXQKKyAgIFZpc3VhbAorICAgU3R1ZGlvIGNhbiBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgYnVpbGQgb3JkZXIgaW5zdGVhZCBvZiB0aGUgdXNlcgorICAgaGF2aW5nCisgICB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBvcmRlci4KKworMjAwOS0xMi0wOCAwOTo0NiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93cyAvIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvOiBkaXNhYmxlZCB0aGUgY29tcGlsZXIgd2FybmluZworICAgYWJvdXQKKyAgIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaGVzICg0MDE4KSBiZWNhdXNlIHRoaXMgd2FybmluZyBkb2VzIG5vdAorICAgeWllbGQKKyAgIGFueSB1c2VmdWwgaW5mb3JtYXRpb24uCisKKzIwMDktMTItMDggMDk6MTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3NjM5IChwYXRjaCAyNzgwNDExIC0tIGZpeCBjb21waWxlciB3YXJuaW5ncyk6CisgICBhcHBsaWVkCisgICB0aGlzIHBhdGNoIHRvIG5ldC1zbm1wLWNvbmZpZy5oLmluIHRvbyBzdWNoIHRoYXQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oIGFuZAorICAgbmV0LXNubXAtY29uZmlnLmguaW4gbWF0Y2ggYWdhaW4uCisKKzIwMDktMTItMDggMDg6MTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFnZW50eF9zeXNPUl9jYWxsYmFjaygpIGRvZXMgbm90IHRyaWdnZXIgYQorICAgY29tcGlsZXIKKyAgIHdhcm5pbmcgd2hlbiB0aGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4KKyAgIGRlY2xhcmVkIGNvbnN0LgorCisyMDA5LTEyLTA4IDA4OjE0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgQ2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RydG91bGwoKSBmcm9tICd1bnNpZ25lZCBsb25nIGxvbmcnCisgICAod2hpY2gKKyAgIGlzIG5vdCB2YWxpZCBDODkpIHRvICd1aW50NjRfdCcgKGRlY2xhcmVkIGluCisgICA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+KS4KKyAgIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBjb21waWxlIGFnYWluIHdpdGgKKyAgIE1TVkMgNi4wLgogCiAyMDA5LTEyLTA3IDEwOjQ2ICBkdHMxMgogCkBAIC0zMzEwLDE4ICs0ODkzNiw0NiBAQAogICAgVHdlYWsgbWlzc2luZyBzdWJpZGVudGlmaWVyIHByb2Nlc3NpbmcgdG8gYmUgbW9yZSB0eXBlLWF3YXJlLgogICAgKEFuIGlzc3VlIHdpdGggQUlYLCBhdCBsZWFzdCkKIAorMjAwOS0xMi0wNiAxODozOCAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogTWFrZSB0aGUgbGlzdHMgb2YgY29tMlNlYypFbnRyaWVzIHN0YXRpYworCisyMDA5LTEyLTA2IDE4OjM0ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBNYWtlIHRoZSBpdGVyYXRvciB2YXJpYWJsZSBpbiBuZXRzbm1wXypfZ2V0U2VjTmFtZSBjb25zdAorCisyMDA5LTEyLTA2IDE4OjI5ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogQ2hhbmdlIHRoZSB0eXBlcyBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZgorICAgbmV0c25tcF8qX2dldFNlY05hbWUgZnJvbSBjaGFyKiB0byBjb25zdCBjaGFyKiBzaW5jZSB0aGV5IHBvaW50CisgICBpbnRvIGludGVybmFsIHN0cnVjdHVyZXMuCisKKzIwMDktMTItMDUgMjA6MTkgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIGZpeCBkZWNsYXJhdGlvbiBvZiBzdHJ0b3VsbAorCiAyMDA5LTEyLTA1IDE3OjQyICB0YW5kZXJzCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6CiAKICAgIGNhbGwgbmV0c25tcF9yZWFkX21vZHVsZSBpbnN0ZWFkIG9mIHJlYWRfbW9kdWxlIHRvIG1ha2UgaXQKLSAgIGNvbXBpbGUgd2l0aCBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQotCi0yMDA5LTEyLTA1IDE3OjE5ICB0YW5kZXJzCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgotCi0gICBhcHBseSByMTc4NTQgYnVpbGQgZml4IHRvIGFsbCBhZmZlY3RlZCBicmFuY2hlcworICAgY29tcGlsZSB3aXRoCisgICBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQogCiAyMDA5LTEyLTAyIDE1OjM5ICBqc2FmcmFuZWsKIApAQCAtMzM0NCw3ICs0ODk5OCw3IEBACiAKIDIwMDktMTItMDEgMTI6MzYgIGR0czEyCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKIAogICAgVXBkYXRlIGEgcmVkdW5kYW50IChhbmQgcHJvYmFibHkgaW5hY2N1cmF0ZSkgY29tbWVudC4KIApAQCAtMzM1MiwxOSArNDkwMDYsNTIgQEAKIAogICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODIyMzYwOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBidWlsZGluZyB0YWJsZSBPSURzCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjgyMjM2MDogRml4IG1lbW9yeSBsZWFrIHdoZW4gYnVpbGRpbmcKKyAgIHRhYmxlIE9JRHMKIAogMjAwOS0xMi0wMSAxMjowOCAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0YWJsZS5jOgogCi0gICBDSEFOR0VTOiBzbm1wdGFibGU6IEJVR1M6IDI4Mzc5OTg6IEhhbmRsZSBtaXNzaW5nIGluc3RhbmNlIHN1YmlkZW50aWZpZXJzIGluIHJlc3VsdHMKKyAgIENIQU5HRVM6IHNubXB0YWJsZTogQlVHUzogMjgzNzk5ODogSGFuZGxlIG1pc3NpbmcgaW5zdGFuY2UKKyAgIHN1YmlkZW50aWZpZXJzIGluIHJlc3VsdHMKIAogMjAwOS0xMi0wMSAxMTo1NiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODQxMDA4OiBQcm90ZWN0IGFnYWluc3QgY3Jhc2ggZm9sbG93aW5nIGZhaWxlZCBBZ2VudFggcmVzcG9uc2UKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODQxMDA4OiBQcm90ZWN0IGFnYWluc3QgY3Jhc2ggZm9sbG93aW5nCisgICBmYWlsZWQgQWdlbnRYIHJlc3BvbnNlCisKKzIwMDktMTItMDEgMDc6MzQgIGpzYWZyYW5laworCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRml4IHJlc3BvbmRpbmcgdG8gYnJvYWRjYXN0IHJlcXVlc3RzLgorICAgVURQIHJlc3BvbnNlcyBhcmUgc2VudCB3aXRoIHNvdXJjZSBJUCBhZGRyZXNzIHdoaWNoIHdhcworICAgZGVzdGluYXRpb24gb2YKKyAgIGFwcHJvcHJpYXRlIHJlcXVlc3RzIChpbXBsZW1lbnRlZCBpbiBTVk4gcmV2LiAxNTIxNSkuIEJ1dCBpZiB0aGUKKyAgIGRlc3RpbmF0aW9uCisgICBvZiBhIHJlcXVlc3QgaXMgYnJvYWRjYXN0IElQIGFkZHJlc3MsIHRoZSByZXF1ZXN0IHdhcyBzZW50IHdpdGgKKyAgIHRoZSBicm9hZGNhc3QKKyAgIGFkZHJlc3MgYXMgc291cmNlLiBzZW5kbXNnKCkgb24gTGludXggZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGFuZAorICAgcmV0dXJucyBlcnJvcgorICAgLT4gcmVzcG9uc2UgaXMgbm90IHNlbnQuIEluIG9yZGVyIHRvIHNlbmQgcmVzcG9uc2VzIGZyb20gdGhlIHNhbWUKKyAgIGludGVyZmFjZSwKKyAgIGludGVyZmFjZSBpbmRleCBvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIG11c3QgYmUgdXNlZC4KKworMjAwOS0xMi0wMSAwMDoyOSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWN0dWFsbHkgY29tcGlsZSBhZnRlciAxNzg1Mi4KKworMjAwOS0xMi0wMSAwMDoyNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWN0dWFsbHkgY29tcGlsZSBhZnRlciAxNzg0Mi4KIAogMjAwOS0xMS0zMCAxNjo1NSAgZHRzMTIKIApAQCAtMzM3Nyw1MiArNDkwNjQsOTIgQEAKIAogICAgKiBsb2NhbC9taWIyYy5vbGQtYXBpLmNvbmY6CiAKLSAgIENIQU5HRVM6IG1pYjJjOiBCVUdTOiAyODg4NTY5OiBGaXggZ2VuZXJhdGlvbiBvZiB0YWJsZSBjb2x1bW5zIGFycmF5CisgICBDSEFOR0VTOiBtaWIyYzogQlVHUzogMjg4ODU2OTogRml4IGdlbmVyYXRpb24gb2YgdGFibGUgY29sdW1ucworICAgYXJyYXkKIAogMjAwOS0xMS0zMCAxNjozMCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODk0MDU5OiBIYW5kbGUgZXJyb3JzIHdoZW4gY291bnRpbmcgaW50ZXJmYWNlcworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4OTQwNTk6IEhhbmRsZSBlcnJvcnMgd2hlbiBjb3VudGluZworICAgaW50ZXJmYWNlcwogCiAyMDA5LTExLTMwIDE2OjA3ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyODk3MDAwOiBTdXBwcmVzcyAzMi1iaXQgY291bnRlciB0cnVuY2F0aW9uIHdhcm5pbmdzLgorICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjg5NzAwMDogU3VwcHJlc3MgMzItYml0IGNvdW50ZXIgdHJ1bmNhdGlvbgorICAgd2FybmluZ3MuCisKKzIwMDktMTEtMzAgMTU6MzQgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5MDMwOTI6IEZpeCBicm9rZW4gaGFuZGxpbmcgb2YgYnJvYWRjYXN0CisgICBlbnRyaWVzLgogCiAyMDA5LTExLTMwIDE1OjE5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5MDEwMjk6IEZpeCBjb21waWxlciB3YXJuaW5nIG9uIENsb3NlSGFuZGxlKCkKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjkwMTAyOTogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24KKyAgIENsb3NlSGFuZGxlKCkKICAgIEVuZGlhbiBwcm9ibGVtcyBhbHJlYWR5IGFkZHJlc3NlZCBieSBwYXRjaCAjMjgzNTU3NgogCiAyMDA5LTExLTMwIDE1OjEzICBkdHMxMgogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CiAKLSAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyODkwOTMxOiBCZXR0ZXIgaGFuZGxpbmcgb2YgQ291bnRlcjY0IHZhbHVlcy4KKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyODkwOTMxOiBCZXR0ZXIgaGFuZGxpbmcgb2YgQ291bnRlcjY0CisgICB2YWx1ZXMuCiAgICBQYXRjaCBwcm92aWRlZCBieSBNYXggUm9tYW5vdi4KIAogMjAwOS0xMS0zMCAxNTowNyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODg3ODE2OiBQcm90ZWN0IGFnYWluc3QgZGl2aXNpb24tYnktemVybyBjcmFzaAorICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODg3ODE2OiBQcm90ZWN0IGFnYWluc3QgZGl2aXNpb24tYnktemVybworICAgY3Jhc2gKKworMjAwOS0xMS0zMCAxNTowMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzIyMDogRml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoZW4KKyAgIGlmWFRhYmxlIGlzIG5vdCBpbmNsdWRlZC4KIAogMjAwOS0xMS0zMCAxNDo0OSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMxNTU6IEZpeCBtZW1vcnkgbGVhayBpbiBwcm94eSBoYW5kbGluZy4KKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzE1NTogRml4IG1lbW9yeSBsZWFrIGluIHByb3h5CisgICBoYW5kbGluZy4KICAgIFBhdGNoIHN1cHBsaWVkIGJ5IEdvd3RoYW0gVGhvbW1hbmRyYS4KIAorMjAwOS0xMS0zMCAxNDozMiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMwOTI6IFN1cHBvcnQgbW9uaXRvcmluZyBwcm9jZXNzZXMgdGhhdAorICAgc2hvdWxkIG5vdCBiZSBydW5uaW5nLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQ2hyaXN0aWFuIChjZzc1KS4KKyAgIAorICAgUW46IFNob3VsZCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgYmFjay1wb3J0ZWQgdG8gZWFybGllciBsaW5lcz8KKwogMjAwOS0xMS0zMCAxNDoxMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODc3NTE4OiBGaXggaGFuZGxpbmcgb2Ygc2NvcGVkIEFnZW50WCB2YXJpYWJsZXMKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg3NzUxODogRml4IGhhbmRsaW5nIG9mIHNjb3BlZCBBZ2VudFgKKyAgIHZhcmlhYmxlcworCisyMDA5LTExLTMwIDE0OjAxICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODM1NTc2OiBGaXggZW5kaWFubmVzcyBpc3N1ZXMgaW4KKyAgIHBhc3MvcGFzc19wZXJzaXN0CiAKIDIwMDktMTEtMjcgMDg6NTQgIGpzYWZyYW5lawogCkBAIC0zNDMwLDEzICs0OTE1NywxNzMgQEAKIAogICAgUmVtb3ZlIGV4ZWN1dGFibGUgYXR0cmlidXRlIGZyb20gc291cmNlIGZpbGVzLgogCisyMDA5LTExLTI1IDIwOjM1ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgbG9jYWwvbWliMmMubm90aWZ5LmNvbmY6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIGFsbCB0aGUgb2lkcyBhbmQgb2lkIGxlbmd0aHMgaW4gYWdlbnRfdHJhcC5jCisgICBjb25zdCBhbmQgdXNlIHRoZW0gZnJvbSBldmVyeXdoZXJlLgorCisyMDA5LTExLTI1IDIwOjI3ICBtYWdmcgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEluc3RhbGwgbGlicmFyeS9vaWQuaC4gVGhhbmtzIHRvICJUb21hc3ogTGlzIgorICAgd2hvIHNwb3R0ZWQgdGhlIGJ1Zy4KKworMjAwOS0xMS0yNSAwOTo0NyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg6CisKKyAgIENvbW1lbnQtb25seSBjaGFuZ2U6IGNoYW5nZWQgdGhlIG5hbWUgaW4gdGhlIGZpbGUgaGVhZGVyIGZyb20KKyAgIHRlc3RoYW5kbGVyLmgKKyAgIHRvIGluc3RhbmNlLmggc3VjaCB0aGF0IGl0IG5vdyBtYXRjaGVzIHRoZSBmaWxlbmFtZS4KKworMjAwOS0xMS0yNCAwNzo0OSAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0CisKKzIwMDktMTEtMjMgMDc6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGVudGVycHJpc2UgYXJndW1lbnQgb2YKKyAgIG5ldHNubXBfc2VuZF90cmFwcyBhbmQgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyBjb25zdAorCisyMDA5LTExLTIzIDA3OjAyICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdGhlIG5hbWUgYXJndW1lbnQgdG8gZmluZF92YXJiaW5kX2luX2xpc3QKKyAgIGNvbnN0CisKKzIwMDktMTEtMjIgMjM6MjUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaDoKKworICAgUmVtb3ZlIHNvbWUgbG9jYWwgcmVkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zCisKKzIwMDktMTEtMjIgMDE6MDMgIG1hZ2ZyCisKKyAgICogIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nLCBXaW4zMjogUmVtb3ZlIGEgZmV3IHVudXNlZCBjb25maWd1cmUgc3ltYm9scworCisyMDA5LTExLTIxIDA4OjAxICBidmFzc2NoZQorCisgICAqIHdpbjMyL1NubXAtd2luRXh0RExMLmgsIHdpbjMyL3NubXAtd2luZXh0ZGxsLmg6CisKKyAgIFJlcGxhY2VkIGFuIGFjY2lkZW50YWxseSBjb21taXR0ZWQgZmlsZSBieSB0aGUgcHJvcGVyIGNvbnRlbnRzLgorCisyMDA5LTExLTIwIDE2OjI5ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBSZXZlcnRlZCBhY2NpZGVudGFsbHkgbWVyZ2VkIGNoYW5nZXMuCisKKzIwMDktMTEtMjAgMTY6MjYgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9zbm1wLXdpbmV4dGRsbC5oOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMDktMTEtMjAgMTY6MTggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMsICAgCisgICAgICBsb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFNwZWxsaW5nIGZpeCBpbiBDIHNvdXJjZSBjb2RlIGNvbW1lbnRzOiByZXBsYWNlZCAncmV0cml2YWwnIGJ5CisgICAncmV0cmlldmFsJy4KKworMjAwOS0xMS0yMCAxNjoxNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgRml4ZWQgYSBuYW1pbmcgaW5jb25zaXN0ZW5jeTogcmVwbGFjZWQgdHdvIG9jY3VycmVuY2VzIHdpbkV4dERsbAorICAgYnkgd2luRXh0RExMIGluIHNvdXJjZSBjb2RlIGNvbW1lbnRzLgorCisyMDA5LTExLTE5IDIyOjUyICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDI5MDAwNzg6IEFkZCBzdXBwb3J0IGZvciBPSUQgdmFyaWFibGVzIHdpdGgKKyAgIHNpemUgaW4gZWxlbWVudHMgaW5zdGVhZCBvZiBieXRlcywgY29ycmVjdCBzeXNPYmplY3RJRCB0byB1c2UKKyAgIHRoaXMuCisKIDIwMDktMTEtMTMgMTI6NTkgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4gSVAtTUlCIGFuZCBUQ1AtTUlCCisgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIKKyAgIGJpdHMnIGluIElQLU1JQiBhbmQgVENQLU1JQgogICAgVGhlIGNvdW50ZXJzLCB3aGljaCBncm93IGZhc3QgYXJlIG5vdyBjdXQgdG8gMzJiaXRzLgogCisyMDA5LTExLTEyIDA4OjI2ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIFVzZSBiaWcgcHJpbnRmJ3MgaW5zdGVhZCBvZiBtYW55IHNtYWxsIG9uZXMgdG8gc2F2ZSBhIGZldyBodW5kcmVkCisgICBieXRlcyBvbiB0aGUgZmluYWwgZXhlY3V0YWJsZSBzaXplLgorCisyMDA5LTExLTEyIDAyOjI0ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9zdHJsY3B5LmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b2wuYywgICAKKyAgICAgIHNubXBsaWIvc3RydG91bC5jLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgQUNfUkVQTEFDRV9GVU5DUyB0byBoYW5kbGUgY29kZSB0aGF0IGlzCisgICBtaXNzaW5nIG9uIHNvbWUgcGxhdGZvcm1zLgorCiAyMDA5LTExLTExIDA5OjAwICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgpAQCAtMzQ0NSw5MCArNDkzMzIsODQgQEAKICAgIFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgdmFsdWVzIGZyb20gY2FjaGUgbG9hZCByb3V0aW5lLgogICAgUHJvYmxlbSBpZGVudGlmaWVkIGJ5IFh1YW4uCiAKLTIwMDktMTAtMjkgMTY6MDUgIGR0czEyCisyMDA5LTEwLTMwIDA5OjUxICBtYWdmcgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCAgIAotICAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgICAKLSAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCBwZXJsL2FnZW50L2FnZW50LnBtLCAgIAotICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCi0gICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc2Vkc2NyaXB0LmluLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaCwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4zLnByZTEgKQorICAgTkVXUzogc25tcGxpYjogUmV2ZXJ0IDE3ODA4LCBpbnN0ZWFkIGZhY3RvciBvdXQgdGhlIGRlY2xhcmF0aW9uCisgICBvZiBvaWQgdG8gaXQncyBvd24gZmlsZSBhbmQgaW5jbHVkZSB0aGF0IGZpbGUgZnJvbSBib3RoIHR5cGVzLmgKKyAgIGFuZCBhc24xLmgKIAotMjAwOS0xMC0yOSAxNDoyNCAgZHRzMTIKKzIwMDktMTAtMzAgMDg6MjggIG1hZ2ZyCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAKKyAgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL29pZF9zdGFzaC5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfZGVidWcuYywgc25tcGxpYi9zbm1wdXNtLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQsIHNubXBuZXRzdGF0OiBBZGQgY29ycmVjdCBzaXplIHByZWZpeGVzCisgICB3aGVuIHByaW50aW5nIHZhcmlhYmxlcyBvZiB0eXBlIG9pZC4KIAotMjAwOS0xMC0yOSAxMTo0NiAgZHRzMTIKKzIwMDktMTAtMzAgMDg6MDcgIG1hZ2ZyCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2Ugb2lkIHRvIGJlIGEgMzItYml0IHR5cGUgb24gSUxQNjQgYW5kCisgICBMUDY0IHBsYXRmb3Jtcy4KIAotMjAwOS0xMC0yOSAxMDozMCAgZHRzMTIKKzIwMDktMTAtMzAgMDg6MDUgIG1hZ2ZyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmg6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmUgdGhlIG9pZCB0eXBlZGVmIGZyb20KKyAgIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4uIEl0IGlzIHN0aWxsIHByZXNlbnQgaW4KKyAgIDxuZXQtc25tcC90eXBlcy5oPiwgdXNlIHRoYXQgZmlsZS4KIAotMjAwOS0xMC0yOSAxMDoyOCAgZHRzMTIKKzIwMDktMTAtMjggMTY6NDggIGhhcmRha2VyCiAKLSAgICogZG94eWdlbi5jb25mOgorICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4zLnByZTEgKQorICAgZG9uJ3QgcmVxdWlyZSBzdWJhZ2VudF9pbml0KCkgaWYgbm90IG9ubHkgYnVpbGRpbmcgbWFzdGVyIGFnZW50CisgICBjb2RlCiAKLTIwMDktMTAtMjkgMDk6NTUgIGR0czEyCisyMDA5LTEwLTI3IDA2OjQ0ICBtYWdmcgogCi0gICAqIE1ha2VmaWxlLnRvcDoKKyAgICogIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaSwgICAKKyAgICAgIGxvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiwgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5yb3cuY29uZiwgbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDSEFOR0VTOiBtaWIyYzogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzIHRvIHVfY2hhcioKKworMjAwOS0xMC0xNCAyMzoxMiAgbWFnZnIKKworICAgKiBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgc25tcGxpYi9zY2FwaS5jOgorCisgICBDSEFOR0VTOiBhcHBzLCBzbm1wbGliOiBQQVRDSDogMjgzNTU3NzogaWRlbnRpZmllZCBieSAiQmFydCBWYW4KKyAgIEFzc2NoZSI6IFJlcGxhY2UgU05NUF9aRVJPIG9mIGFycmF5cyB3aXRoIGEgbWVtc2V0LgorCisyMDA5LTEwLTEyIDIwOjI4ICBtYWdmcgorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgcnAgdmFyaWFibGUgdG8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG9uZS4KIAogMjAwOS0xMC0wOSAxMjozOCAganNhZnJhbmVrCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjg3MTc0NzogcGx1ZyBtZW1vcnkgbGVhayBpbiBPSUQgcHJvY2Vzc2luZy4KKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOjI4NzE3NDc6IHBsdWcgbWVtb3J5IGxlYWsgaW4gT0lECisgICBwcm9jZXNzaW5nLgogICAgVGhlIG1lbW9yeSBsZWFrZWQgd2hlbiBzbWFsbCBPSUQsIHdoaWNoIGNvdWxkIGZpdCBwcmUtYWxsb2NhdGVkCiAgICB2cC0+bmFtZV9sb2MsIHdhcyBwbGFjZWQgaW4gZGlmZmVyZW50IChhbGxvY2F0ZWQpIG9uZS4KIApAQCAtMzU0Niw2ICs0OTQyNywxOCBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIHRoZSBwYXJzaW5nIG9mIHJhbmdlcyB0byBhY2NlcHQgYWxsCiAgICB2YWxpZCB2YWx1ZXMuCiAKKzIwMDktMTAtMDcgMjI6MjQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBtaXNjOiBQQVRDSDogMjgzNjExMjogVXNlIHRoZSByaWdodCBtb2RpZmllciB3aGVuCisgICBwcmludGluZyBzaXplX3QgYW5kIHNzaXplX3QgdmFyaWFibGVzLgorCiAyMDA5LTEwLTA3IDEyOjUwICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKQEAgLTM1NTYsMTIgKzQ5NDQ5LDIwIEBACiAKIDIwMDktMTAtMDUgMTk6MTkgIG1hZ2ZyCiAKLSAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsICAgCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCAgIAogICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RleHRfdXRpbHMuaDoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgX19jcGx1c3BsdXMgd2hlbgogICAgY2hlY2tpbmcgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIHdyYXBwZWQgaW4gZXh0ZXJuICJDIi4KIAorMjAwOS0xMC0wNSAwNjoxMyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB3YWxrLmM6CisKKyAgIENIQU5HRVM6IHNubXB3YWxrOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgZW5kIG9pZCBpcyBsb25nZXIKKyAgIHRoYW4gdGhlIGN1cnJlbnQgb2lkIGNvcnJlY3RseQorCiAyMDA5LTA5LTMwIDEwOjEyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CkBAIC0zNTcwLDE4ICs0OTQ3MSwzNTEgQEAKICAgIGluZm9ybWF0aW9uIGNyYXNoaW5nIHRoZSBhZ2VudC4KICAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgSW55YXZlbiBTYWthcmFpLgogCisyMDA5LTA5LTI3IDE0OjU5ICBhbGV4X2IKKworICAgKiAgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCwgICAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbDoKKworICAgV2luMzI6IEJpbmFyeSBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIHNjcmlwdCB1cGRhdGVzLgorCisyMDA5LTA5LTI0IDAwOjA4ICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDktMjMgMjM6NTQgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA5LTIzIDIzOjQyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCiAyMDA5LTA5LTIzIDIzOjQwICBoYXJkYWtlcgogCiAgICAqIEZBUToKIAorICAgcmVtb3ZlIFNWTiBicmFuY2ggd29yZGluZworCisyMDA5LTA5LTIzIDIzOjM2ICBoYXJkYWtlcgorCisgICAqIEZBUToKKwogICAgcHJvcGVyIHByb2plY3QgY2FwaXRhbGl6YXRpb24KIAorMjAwOS0wOS0yMyAyMzozNSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOS0yMyAyMzozMCAgaGFyZGFrZXIKKworICAgKiBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKIDIwMDktMDktMjIgMjE6NTEgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuc29sYXJpczoKIAogICAgZml4IHR5cG9zCiAKKzIwMDktMDktMTQgMjI6NDkgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjo0OCAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDktMTQgMjI6MzkgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDktMTQgMjI6MzYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsICAgCisgICAgICBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDktMTQgMjI6MTggIGhhcmRha2VyCisKKyAgICogUkVBRE1FLmFpeCwgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaDoKKworICAgUGF0Y2ggZnJvbSBtYWdmciBmb3IgNS41IHNwZWNpZmljIGFpeCBidWlsZCBmaXhlcworCisyMDA5LTA5LTAyIDA3OjEyICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiByZW5hbWUgTUlCIG1hY3JvIHRvIE5FVFNOTVBfTUlCMl9PSUQsIE1JQiBpcworICAgdG9vIGdlbmVyaWMgYW5kIG1heSBjb25mbGljdCB3aXRoIGFwcGxpY2F0aW9ucy4KKyAgIAorICAgVGhlIG9sZCBNSUIgbWFjcm8gaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdW5sZXNzCisgICBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyBpcyBkZWZpbmVkLgorCisyMDA5LTA4LTMxIDE5OjM4ICBuYmEKKworICAgKiBtaWJzL3JmY2xpc3Q6CisKKyAgIEFkZGl0aW9uYWwgUkZDIG1pYnMKKworMjAwOS0wOC0zMSAxOTozNyAgbmJhCisKKyAgICogbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIElBTkEgZml4ZWQgYSBidWcKKworMjAwOS0wOC0yOSAwNzoyOSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4KKworMjAwOS0wOC0yOSAwNzoyOCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IHJldCBpcyBvbmx5IHVzZWQgaW4gc2V0dGFibGUgdGFibGVzIHNvIG9ubHkgZGVjbGFyZSBpdAorICAgdGhlbi4KKworMjAwOS0wOC0yOSAwNzoyNCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlcGxhY2UgdGhlIF9vaWRfbGVuIHZhcmlhYmxlIHdpdGggYW4gZXhwbGljaXQgY2FsbCBvZgorICAgT0lEX0xFTkdUSC4KKworMjAwOS0wOC0yOSAwNzoyMSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IE1ha2UgZXZlcnkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgc3RhdGljIHN0YXRpYy4gUmVtb3ZlIHRoZQorICAgZGVjbGFyYXRpb25zIG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFuZCB0aGUgcHJpdmF0ZSBkZWZpbmVzIGZyb20KKyAgIHRoZSBoZWFkZXIuCisKKzIwMDktMDgtMjkgMDc6MTkgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZW9yZGVyIHRoZSBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCisgICBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworMjAwOS0wOC0yOSAwNzoxNiAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IG5ldHNubXBfdGFibGVfcmVnaXN0ZXIgc2hvdWxkIGJlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUKKyAgIGFuZCB0YWtlIG9ubHkgdHdvIGFyZ21lbnRzLgorCisyMDA5LTA4LTI5IDA3OjE0ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogYnVpbGRfb2lkIGV4cGVjdHMgYSBwb2ludGVyIHRvIGFsbG9jYXRlZCBvaWQuIENoYW5nZSB0bworICAgdXNlIGJ1aWxkX29pZF9ub2FsbG9jIGFuZCByZW1vdmUgb25lIGNvcHkgb2YgdGhlIGluZGljZXMuCisKKzIwMDktMDgtMjkgMDc6MTAgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBUaGVyZSBpcyBubyBpbmRleF9vaWRfbGVuIG1lbWJlciBpbiBzdHJ1Y3QgZW50cnkuIFVzZSB0aGUKKyAgIGludGVuZGVkIGxvY2FsIHZhcmlhYmxlIGluZGV4X29pZF9sZW4uCisKKzIwMDktMDgtMjkgMDc6MDYgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBDb3JyZWN0IHRoZSByZXR1cm4gdHlwZSBvZiAke2l9X2dldCplbnRyeSB0byBtYXRjaCB0aGUKKyAgIHJldHVybmVkIHR5cGUuCisKKzIwMDktMDgtMjYgMjI6MzcgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB3aHdvb3BzOyBibGV3IHRoZSBjaGFuZ2Vsb2cgZm9yIHJjMgorCisyMDA5LTA4LTI2IDE3OjM4ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA4LTI2IDE3OjI5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA4LTI2IDE3OjI4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICB1cGRhdGVkIGJhc2VkIG9uIG5ldyBTRiB1cGxvYWQgbWV0aG9kczsgbm8gbG9uZ2VyIGFzIGF1dG9tYXRhYmxlCisKKzIwMDktMDgtMjYgMTc6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIGZyb20gSmFuIHRvIGVuZGxlc3MgbG9vcCBpbiBkZWZhdWx0IHJvdXRlcworICAgb24gbGludXgKKworMjAwOS0wOC0yNiAxNzoyNSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgYXBwbHkgcGF0Y2ggZnJvbSBKYW4gdG8gZml4IEMrKyB3cmFwcGVyCisKKzIwMDktMDgtMjYgMTQ6NTMgIGR0czEyCisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBJbml0aWFsIHN0YWIgYXQgYSBtaW5pbWFsLWhlbHBlciAocmF3KSB0YWJsZSB0ZW1wbGF0ZSwKKyAgIGxlYXZpbmcgbW9zdCBvZiB0aGUgd29yayB0byB0aGUgdXNlci1wcm92aWRlZCBNSUIgaGFuZGxlci4KKwogMjAwOS0wOC0yNiAxNDo1MCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC0zNTkxLDYgKzQ5ODI1LDExMyBAQAogICAgZHVlIHRvIDE1LS8zMS1iaXQgbWFza2luZyB3aGVuIHNlbGVjdGluZyByZXF1ZXN0IElEcy4gSWRlbnRpZmllZAogICAgYnkga3JvbWVza3kuCiAKKzIwMDktMDgtMjAgMTM6MzAgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGx1ZyBsZWFrcyBpbiBpcElmU3RhdHNUYWJsZSwKKyAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlLCBpcFN5c3RlbVN0YXRzVGFibGUgYW5kCisgICBpcERlZmF1bHRSb3V0ZXJUYWJsZS4KKyAgIAorICAgSXQgc2VlbXMgdG8gbWUgdGhlIHRhYmxlcyB3ZXJlIHdyb25nbHkgZ2VuZXJhdGVkIHdpdGgKKyAgIG0yY19kYXRhX2FsbG9jYXRlIG9yCisgICBzb21lb25lIGZvcmdvdCB0byByZWxlYXNlIHRoZSB1c2VyIHByb3ZpZGVkIGRhdGEuCisKKzIwMDktMDgtMTIgMTU6MDAgIHRhbmRlcnMKKworICAgKiBORVdTOgorCisgICBmaXggbGlidG9vbCB2ZXJzaW9uIGluIE5FV1MKKworMjAwOS0wOC0xMSAwMDo0MiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBDaGFuZ2VMb2c6CisKKyAgIHdob29wczsgYWRkIHJlYWwgY2hhbmdlbG9nIGVudGVyaWVzIGZvciAucmMxCisKKzIwMDktMDgtMTAgMjM6MTAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGZpeCB0eXBvIGluIHN2bjJjbCBsaW5lCisKKzIwMDktMDgtMTAgMjM6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDgtMTAgMjE6MzIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDgtMTAgMjE6MjEgIGhhcmRha2VyCisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgICAKKyAgICAgIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOC0wNyAxMDozMiAgZHRzMTIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBDb3JyZWN0LCBjb25zb2xpZGF0ZSwgY2xhcmlmeSBhbmQgY2xlYW51cCB0aGUgY2F0YWxvZyBvZiBjdXJyZW50CisgICBjaGFuZ2VzLgorCisyMDA5LTA4LTA2IDA3OjU3ICBkdHMxMgorCisgICAqIEZBUToKKworICAgRXhwYW5kIG9uIGV4ZWMgdnMgZXh0ZW5kLgorCiAyMDA5LTA4LTA1IDIwOjA3ICBkdHMxMgogCiAgICAqICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIApAQCAtMzYwOCw2ICs0OTk0OSwyMiBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI4MjIzMzc6IEZpeCBtZW1vcnkgbGVhayBpbgogICAgaXBBZGRyZXNzUHJlZml4VGFibGUKIAorMjAwOS0wOC0wNSAxNToxNiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jOgorCisgICBGaXggbWVtb3J5IGxlYWsgaW4gTmV0VG9NZWRpYVRhYmxlLgorICAgV2hlbiBkZWxldGluZyByb3cgY29udGV4dCwgZGVsZXRlIGFsc28gYXNzb2NpYXRlZCBkYXRhLgorCisyMDA5LTA4LTA1IDE1OjE1ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgRml4IG1lbW9yeSBsZWFrIGluIE5ldFRvTWVkaWFUYWJsZS4KKyAgIFRoZSBjb250YWluZXIgdXNlZCB0byB0cmFjayBlbnRyaWVzIHRvIGRlbGV0ZSBmcm9tIGNhY2hlIHNob3VsZAorICAgYmUgcmVsZWFzZWQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisKIDIwMDktMDgtMDUgMTU6MTIgIGpzYWZyYW5lawogCiAgICAqIApAQCAtMzY0MiwzMiArNDk5OTksMTkyIEBACiAgICBhcyB3ZWxsIGFzIGEgbGFyZ2VyIGdyb3VwLgogICAgQWxzbyBhZGRyZXNzZXMgYnVnIDIxNTAyODUKIAorMjAwOS0wOC0wNCAyMToxNiAgbWFnZnIKKworICAgKiBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIHNubXBsaWI6IGZyb20gIkJhcnQgdmFuIEFzc2NoZSAmIE1hZ251cyBGcm9tcmVpZGUiOiBNb3JlIHVwZGF0ZXMKKyAgIHRvIHN0cnRvdWxsLmMKKwogMjAwOS0wOC0wNCAxMDo1NyAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogZnJvbSAiTWFyY3VzIFL8Y2tlcnQiOiBmaXggcG9zc2libGUgY3Jhc2ggd2hlbgorICAgQ0hBTkdFUzogc25tcGQ6IGZyb20gIk1hcmN1cyBS54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOaei2tlcnQiOiBmaXggcG9zc2libGUgY3Jhc2ggd2hlbgogICAgNjQtYml0IGNvdW50ZXJzIGluIGlwU3lzdGVtU3RhdHNUYWJsZSBnZXQgYmlnZ2VyIHRoYW4gMl4zMgogCi0yMDA5LTA3LTI3IDEyOjEzICBoYXJkYWtlcgorMjAwOS0wOC0wMyAxOToyNyAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI4Mjc3MjI6IGZyb20gIkJhcnQgVmFuIEFzc2NoZSI6IEltcHJvdmUKKyAgIHN0cnRvdWxsIHRvIGJlIGxlc3MgTVNWQy1zcGVjaWZpYworCisyMDA5LTA4LTAzIDE4OjM4ICBtYWdmcgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgcmVtb3ZlIGFuIG9ic29sZXRlIG1hbnVhbCBwYWdlIGZyb20gdGhlIHNldCBvZiBmaWxlcyB0aGF0IHNob3VsZAorICAgYmUgaW5zdGFsbGVkCisKKzIwMDktMDctMjcgMTI6NDEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA3LTI3IDEyOjExICBoYXJkYWtlcgogCiAgICAqIG1hbi9uZXRzbm1wX0NvbnRhaW5lcl9pdGVyYXRvci4zOgogCi0gICByZW1vdmUgb3V0ZGF0ZSBjYXNlLWNvbmZsaWN0aW5nIG1hbnVhbCBwYWdlCisgICByZW1vdmUgYW4gb2Jzb2xldGUgbWFudWFsIHBhZ2UKIAotMjAwOS0wNy0yNyAxMjowNiAgaGFyZGFrZXIKKzIwMDktMDctMjcgMTI6MDMgIGhhcmRha2VyCiAKICAgICogcGVybC9TTk1QL3QvYnVsa3dhbGsudDoKIAogICAgQ0hBTkdFUzogZnJlZWJzZDogcGF0Y2ggZnJvbSBDZXphcnkgTW9yZ2EgdG8gZml4IGEgbWFrZSB0ZXN0IG9uCiAgICBmcmVlYnNkCiAKKzIwMDktMDctMjcgMTI6MDIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDctMjcgMTE6NTIgIGhhcmRha2VyCisKKyAgICogIEZBUSwgTkVXUywgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDctMjcgMDg6MzkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgcmV2ZXJ0IGFjY2lkZW50aWFsbHkgYXBwbGllZCBwYXRjaAorCisyMDA5LTA3LTI3IDA4OjM3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCB0ZXN0aW5nL3Rlc3RzL1QzNjBkdGxzdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5jZXJ0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIucHJpdjoKKworICAgYWRkZWQgYSB0ZXN0IGNhc2UgZm9yIHVkcC9kdGxzCisKKzIwMDktMDctMjcgMDg6MzYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBkb24ndCByZXF1aXJlIGEgc2Vzc2lvbiB0byBjYXJyeSBhIHNlY05hbWUKKworMjAwOS0wNy0yNiAyMTozNCAgYWxleF9iCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIFdpbjMyOiBNU1ZDIDYgY29tcGlsZSBmaXhlcyBmb3IgV29ya3NwYWNlIGJ1aWxkLgorCisyMDA5LTA3LTI2IDE4OjIwICBhbGV4X2IKKworICAgKiAgUkVBRE1FLndpbjMyLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N0cnRvdWxsLmMsICAgCisgICAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQsIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsLCAgIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIC1BZGRlZCBzdHJ0b3VsbCBmdW5jdGlvbiBhbmQgY29uZmlndXJlIGNoZWNrIGZvciBzeXN0ZW1zIHdpdGhvdXQKKyAgIGl0IHN1Y2ggYXMgV2luMzIgTVNWQyA2CisgICAtV2luMzI6IE1TVkMgNiBjb21waWxlIGZpeGVzIC0gcmVxdWlyZXMgbmV3IHN0cnRvdWxsLmMgZmlsZQorICAgLVdpbjMyOiBOZXcgYnVpbGQtYmluYXJ5IHNjcmlwdCB0byBzaW1wbGlmeSBidWlsZGluZyB0aGUgV2luZG93cworICAgYmluYXJ5IHBhY2thZ2UuCisKKzIwMDktMDctMjUgMDU6MzEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQ6CisKKyAgIE1ha2Ugc3VyZSBhIG1lc3NhZ2UgaXMgd3JpdHRlbiBpZiB0aGUgcmVsZXZhbnQgdGFibGUgaXMgbWlzc2luZy4KKwogMjAwOS0wNy0yMyAyMToyOSAgYWxleF9iCiAKICAgICogUkVBRE1FOgogCiAgICBVcGRhdGUgZW1haWwgYWRkcmVzcyBpbiBSRUFETUUuCiAKKzIwMDktMDctMjMgMDE6MDcgIGFsZXhfYgorCisgICAqICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIFdpbjMyIE1TVkMgMjAwOCsgZml4ZXMuCisKKzIwMDktMDctMjMgMDA6NTUgIGFsZXhfYgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgV2luMzIgTVNWQyAyMDA1KyBidWlsZCBmaXhlcy4gVGhhbmtzIHRvIEJhcnQgVmFuIEFzc2NoZS4KKworMjAwOS0wNy0yMSAxMjoyMiAgZHRzMTIKKworICAgKiAgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIGxvY2FsL21pYjJjLnJvdy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBBZGQgc2ltcGxlIGRlYnVnIG91dHB1dCB0byBtaWIyYyB0ZW1wbGF0ZXMuCisKIDIwMDktMDctMjEgMTI6MTMgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgpAQCAtMzY4NiwxMiArNTAyMDMsNTIgQEAKIAogICAgVXBkYXRlcyB0byBDT0RJTkcgc2VjdGlvbi4KIAorMjAwOS0wNy0yMCAxMTowOSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi5oOgorCisgICBBZGQgbWlzc2luZyBoZWFkZXIgZmlsZSBmcm9tIHBhdGNoICMyMDUzMjczLgorCiAyMDA5LTA3LTE5IDE1OjA5ICBkdHMxMgogCiAgICAqIEZBUToKIAogICAgVXBkYXRlcyB0byBDT01QSUxJTkcgc2VjdGlvbi4KIAorMjAwOS0wNy0xNiAxMjozOCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmM6CisKKyAgIEFkZCBJUHY2IG9jdGV0IGNvdW50ZXJzLgorICAgTmV3IExpbnV4IGtlcm5lbHMgKGUuZy4gMi42LjMxLXJjMiwgbWF5YmUgc29tZSBlYXJsaWVyKSBwcm92aWRlCisgICBjb3VudGVycyBmb3IKKyAgIGluY29taW5nL291dGdvaW5nIElQdjYgdHJhZmZpYyBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZAorICAgaXBJZlN0YXRzVGFibGUuCisKKzIwMDktMDctMTUgMjI6NDYgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICBwdXQgdGVtcG9yYXJ5IGRhdGEgdG8gd2hlcmUgdGhleSBiZWxvbmcKKworMjAwOS0wNy0xMSAyMTo1MCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZToKKworICAgcmVnZW5lcmF0ZSBjb25maWd1cmUKKworMjAwOS0wNy0xMSAyMTowNCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBidWlsZCBmaXggKGUuZy4gZm9yIEZyZWVCU0QpOiBhZGp1c3Qga3ZtIGNvbmZpZ3VyZSB0ZXN0cworCisyMDA5LTA3LTEwIDEyOjM1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENoZWNrIElQdjYgcG9ydCByYW5nZXMgaW4gdGhlIHNhbWUgd2F5IGFzIElQdjQgcG9ydHMgYXJlIGNoZWNrZWQuCisKIDIwMDktMDctMTAgMDc6NDYgIGpzYWZyYW5lawogCiAgICAqIApAQCAtMzcwMiw2ICs1MDI1OSw0MyBAQAogICAgQWxzbyBmaXggdGhlIGRlZmF1bHQgdHlwZSBmb15DQVNOX0lQQUREUkVTUyBpbiBtaWIyYywgc28gdGhlCiAgICBpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jIGNhbiBiZSBzYWZlbHkgcmVnZW5lcmF0ZWQuCiAKKzIwMDktMDctMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgY2xlYW51cCBvZiB0ZXN0aW5nIGNhc2VzIHRvIHJlbW92ZSBkb3VibGUgaW5jbHVkZSBhbmQgZG91YmxlCisgICBleHBvcnRzCisKKzIwMDktMDctMDkgMjM6MDcgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHA6CisKKyAgIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgVENQL0lQdjQgdGVzdAorCisyMDA5LTA3LTA5IDIyOjE4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1N0cmFuc3BvcnQsIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM5OWFsaWFzOgorCisgICBuZXcgdGVzdHMgZm9yIHRlc3RpbmcgZGVmaW5lZCB0cmFuc3BvcnRzCisKKzIwMDktMDctMDkgMjI6MTcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9URVNUQ09ORi5zaCwgdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorCisgICBhIENPTkZJR0FQUCBtYWNybyBmb3IgYWRkaW5nIHN0dWZmIHRvIHNubXAuY29uZgorCisyMDA5LTA3LTA4IDE1OjEyICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgRml4IGdldGhvc3RieWFkZHIgcGFyYW1ldGVyLCBuZXRzbm1wX3VkcF9mbXRhZGRyIG5ldmVyIHJldHVybmVkIGEKKyAgIGhvc3RuYW1lLgorCiAyMDA5LTA3LTA3IDE1OjQ2ICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuYywgICAKQEAgLTM3MTksMjMgKzUwMzEzLDEzNjgyIEBACiAgICBwcm9jZXNzaW5nIC0gdV9sb25nIGNhbiBtYWtlIHByb2JsZW1zIG9uIGJpbiBlbmRpYW4gNjQgYml0CiAgICBzeXN0ZW1zCiAKLTIwMDktMDYtMTYgMTU6MTkgIHJzdG9yeQorMjAwOS0wNi0yOSAxMzo1MiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTOgorCisgICByZW1vdmUgZW50cnkgZm9yIGEgcGF0Y2ggdGhhdCBnb3QgcmV2ZXJ0ZWQKKworMjAwOS0wNi0yNSAxNToyNCAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIE1vdmUgbm9uLWNvcmUgZGF0YSB0eXBlcyBpbnRvIGEgc2VwYXJhdGUgKGxpYnJhcnkgaW50ZXJuYWxzKQorICAgaGVhZGVyIGZpbGUuCisgICBNb3ZlIHRoZSBsYXJnZV9mZF9zZXQgZGF0YSBzdHJ1Y3R1cmUgaW50byB0aGlzIGhlYWRlciBmaWxlLgorCisyMDA5LTA2LTE4IDIyOjI5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBhbGxvdyBidWlsZGluZyB3aXRoIFBlcmwgdmVyc2lvbnMgdGhhdCBsYWNrCisgICBQRVJMX0VYSVRfREVTVFJVQ1RfRU5ECisKKzIwMDktMDYtMTggMjI6MTMgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2lmLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBidWlsZCBmaXggZm9yIFRydTY0IFVuaXggYW5kIElSSVg6IG1vdmUgX1hPUEVOKgorICAgZGVmaW5pdGlvbnMgdG8gd2hlcmUgdGhleSBhcmUgaW4gNS40LnggYW5kIGVhcmxpZXIKKworMjAwOS0wNi0xOCAwNjowMiAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ2xlYW4gdXAgLS13aXRoLW5sIGNvbmZpZ3VyYXRpb24KKyAgICogIE1vdmUgdGhlIF9BUkdfV0lUSCB0byBjb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSAgMjAwOS0wNi0xNiAxNToxNworICAgICAgIHJzdG9yeQorCiAKICAgICogc25tcGxpYi9jb250YWluZXIuYzoKIAogICAgY2hlY2sgZm9yIG51bGwgcG9pbnRlciBiZWZvcmUgZGVyZWYKIAorMjAwOS0wNi0xNSAyMzo1MiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBhZGQgY29tbWVudCBleHBsYWluaW5nIG5vdCBxdWl0ZSBvYnZpb3VzIGxhY2sgb2YgbWVtbW92ZQorCisyMDA5LTA2LTE1IDE5OjMyICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgUmVtb3ZlICNpZiAwIGNvbW1lbnRlZCBjb2RlCisKIDIwMDktMDYtMTUgMTU6MjUgIGR0czEyCiAKICAgICogRkFROgogCiAgICBVcGRhdGVzIHRvIEFHRU5UIHNlY3Rpb24uCiAKLTIwMDktMDYtMTQgMjI6MDEgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CiAKLSAgIHBvcnRhYmlsaXR5IGZpeCAoc3luYyB3aXRoIDUuNSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5yYzEgLT4gVjUuNi5yYzIKKworMjAxMC0wOS0wNCAwMTo1NyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDktMDQgMDA6NTkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDktMDMgMjI6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IHRsc3RjcCBwYXJzaW5nIG9mIGhvc3QgbmFtZXMuCisKKzIwMTAtMDktMDMgMjI6MTMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6CisKKyAgIGNoZWNrIHRoZSByZXR1cm4gY29kZSBvZiBmZ2V0cyBhbmQgZm9wZW4gYmVmb3JlIGluc2VydGluZyB0aGUKKyAgIHJlc3VsdHMuCisKKzIwMTAtMDktMDMgMjI6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIFBhdGNoIGZyb20gdGFuZGVycyB0byBmaXggYnJva2VuIGFsYXJtcyBhZnRlciB0aGUgcHJldmlvdXMKKyAgIHJlLWVudHJhbnQgcGF0Y2gKKworMjAxMC0wOS0wMyAyMjowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2ggMzA1ODY0NTogZnJvbSBqb3Jpc2VzYXR1cm51czogbW9kaWZpZWQKKyAgIHZlcnNpb24gb2YgdGhlIHBhdGNoIHRvIHVzZSBNU0dfRE9OVFdBSVQgZm9yIHRoZSB1bml4IGRvbWFpbgorICAgc29ja2V0CisKKzIwMTAtMDktMDMgMjE6NTYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDU4MTQwOiBmcm9tIHRha2V2b3M6IGNoZWNrIHRoYXQgaW5vZGUgaXMKKyAgIG5vbi16ZXJvCisKKzIwMTAtMDktMDMgMjE6NTAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDUzNDI4OiBmcm9tIHRha2V2b3M6IGZpeAorICAgZ2V0X3BpZF9mcm9tX2lub2RlIHdoZW4gdGhlIGlub2RlIGlzIG5vdCBmb3VuZC4KKworMjAxMC0wOS0wMyAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlbW92ZSB0aGUgZHVwbGljYXRlIHJldHVybiBiZWZvcmUgdGhlIGVycm9yIGNvZGVzIGdldCBzZXQuCisKKzIwMTAtMDktMDEgMTg6MDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogTG9nIGJlZm9yZSByZXR1cm5pbmcuCisKKzIwMTAtMDktMDEgMDI6NDMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIFRMUyBzZW5kX25vdGlmeSBvbiBjbG9zdXJlIGFuZCBzb21lIG1lbW9yeSBjbGVhbi11cCBwYXRjaGVzCisKKzIwMTAtMDgtMzEgMTc6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBPbmx5IHByaW50IHRoZSBzZWN1cml0eS9jb250ZXh0IEVuZ2luZUlEIG1pc21hdGNoIG5vdGUgdW5kZXIgVVNNCisKKzIwMTAtMDgtMjUgMTU6MTMgIHJzdG9yeQorCisgICAqIENIQU5HRVM6CisKKyAgIHJlbW92ZSByZWZlcmVuY2UgdG8gcmV2ZXJ0ZWQgcGF0Y2ggMzA0Mjc2NQorCisyMDEwLTA4LTI1IDE1OjEzICByc3RvcnkKKworICAgKiBhY2NvbmZpZy5oOgorCisgICBhZGQgbm90ZSBvbiB3aGVyZSB0byBmaW5kIGNvbnRlbnQgdXNlZCB0byBnZW5lcmF0ZQorICAgbmV0LXNubXAtY29uZmlnLmguaW4KKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICByZXZlcnQgcjE5MzQyLCBwYXRjaCAzMDQyNzY1LCB3aGljaCBicm9rZSBjbGllbnQgdGNwIGRpc2Nvbm5lY3QKKyAgIGhhbmRsaW5nCisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBtb3JlIGNvZGUgYnJva2VuIGJ5ICdjb21waWxlciB3YXJuaW5nIGZpeCcgaW4gcjE5MTc5CisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIGNoZWNrIGZvciBjb25mIGVycm9ycyBhZnRlciBhZ2VudCBzdGFydHVwOyBlbmFibGUgbG9nVGltZXN0YW1wOworICAgbWFrZSBzdXJlCisgICBhbGwgY2VydCBuYW1lL3RhZ3MgYXJlIHVuaXF1ZQorCisyMDEwLTA4LTI0IDIxOjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggZXJyb3Igc3RyaW5nIHRvIGRpc2N1c3MgdGhlIHJpZ2h0IGZhaWxlZCBvcGVuc3NsIG5ldworICAgaW52b2NhdGlvbgorCisyMDEwLTA4LTI0IDA1OjM3ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wdXNtOiBDb3JyZWN0IGlmZGVmcywgcmVtb3ZlIGRlYWQgdmFyaWFibGVzLgorCisJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYucHJlMyAtPiBWNS42LnJjMQorCisyMDEwLTA4LTE5IDIxOjExICBoYXJkYWtlcgorCisgICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA4LTE5IDIxOjEwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2Lmg6CisKKyAgIC8vIC0+IEMgY29tbWVudHMKKworMjAxMC0wOC0xOSAyMDozNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wOC0xOSAyMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIIDMwNDI3NjU6IGZyb20gbWVoYWY6IG1ha2UKKyAgIHNubXBfc3luY2hfcmVzcG9uc2VfY2IoKSByZS1lbnRyYW50CisKKzIwMTAtMDgtMTkgMjA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHR1cm4gb2ZmIGNvb2tpZSBleGNoYW5nZXMgdW50aWwgYSBjb21wbGV0ZSBjb2RlIHNldCBjYW4gYmUKKyAgIHdyaXR0ZW4gdG8gc3VwcG9ydCBpdCBiYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnVuY3Rpb24gY2FsbGJhY2tzCisKKzIwMTAtMDgtMTcgMTg6MzEgIHJzdG9yeQorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIGFkZCBtaXNzaW5nIGNhbGwgdG8gc3RvcmUgcGVyc2lzdGVudCBkYXRhIGFzIG5lZWRlZAorCisyMDEwLTA4LTE3IDE4OjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiB3aGVuIGRpc3BsYXlpbmcgYSBieXRlIGFzIHNpbmdsZSBkaWdpdCBoZXgKKyAgIHZhbHVlLCBkZWZhdWx0IHRvCisgICBwcmVmaXhpbmcgd2l0aCAwIHVubGVzcyB0aGVyZSBpcyBhIHNlcGVyYXRvciBvciBhZGRpdGlvbiBoaW50CisgICBkYXRhCisKKzIwMTAtMDgtMTcgMTA6MzEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhbiB1bnVzZWQgbGFiZWwgdGhhdCB3YXMgdHJpZ2dlcmVkCisgICB3aGVuCisgICBjb21waWxpbmcgd2l0aG91dCBTU0wgc3VwcG9ydC4KKworMjAxMC0wOC0xNiAyMzoxMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyNzkwMjQ5OiBmcm9tIHdpbGxwd2lsbHA6IHJlZHVjZSBjYWNoZSB0aW1lCisgICBmb3IgdGhlIGlmdGFibGUgdG8gM3NlY29uZHMgdG8gaW5jcmVhc2UgYWNjdXJhY3kKKworMjAxMC0wOC0xNiAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IHBhdGNoIDMwNDYzNzE6IGZyb20gY2hyaXN0b3BoYjQ6IEZpeCBtZW1vcnkgbGVhaworICAgaW4gU05NUHYxIHRyYXAgaGFuZGxpbmcuCisKKzIwMTAtMDgtMTYgMTY6MDMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyODI1NjUzOiBmcm9tIGJydTVjZTogZml4IHNlbmRtYWlsLmNmCisgICBwYXJzaW5nIGluIGNlcnRhaW4gY29uZGl0aW9ucworCisyMDEwLTA4LTE2IDEwOjE2ICBkdHMxMgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgQnVpbGQgbmV0c25tcF9hZ2VudF9hcGkuMyBtYW4gcGFnZSBmcm9tIHRlbXBsYXRlCisKKzIwMTAtMDgtMTYgMDk6MjAgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTExMzYxOiBEb2N1bWVudGF0aW9uIChQcm92aWRlZCBieSBUb21hc3oKKyAgIExpcykKKworMjAxMC0wOC0xNiAwODowNiAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTEzNjE6IFJlLW9yZGVyIGNvZGUgdG8gZ3JvdXAgcmVsYXRlZAorICAgZnVuY3Rpb25zIHRvZ2V0aGVyCisKKzIwMTAtMDgtMTYgMDc6NDIgIGR0czEyCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyOTk1MDk4OiBGaXggY3JlYXRpb24gb2YgU05NUHYzIHNlc3Npb25zCisgICB3aXRoIEFQSV9TSU5HTEUKKworMjAxMC0wOC0xNCAxNjozMCAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTEzNjE6IFJlbW92ZSByZWR1bmRhbnQgdmFyaWFibGVzCisKKzIwMTAtMDgtMTQgMTY6MjMgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MDQ5MDA6IERvY3VtZW50YXRpb24gcGx1cyBhc3NvcnRlZAorICAgaGFuZGxlciBjb2RlIGZpeGVzCisKKzIwMTAtMDgtMTQgMDk6MjggIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vc25tcF9hbGFybS4zLmRlZjoKKworICAgUmVzdG9yZSBhZ2VudCBBUEkgbWFuIHBhZ2UKKyAgIERvbid0IHRyeSB0byBleHRyYWN0IG11bHRpcGxlIG1hbiBwYWdlIGxpbmtzIHBlciBsaW5lCisgICAod2hpY2ggcnVucyBpbnRvIHByb2JsZW1zIHdpdGggT1Mtc3BlY2lmaWMgbGluZSBlbmRpbmdzKS4KKyAgIEluc3RlYWQsIGVuc3VyZSB0aGUgbWFuIHBhZ2UgTkFNRSBzZWN0aW9uIGxpc3RzIG9uZQorICAgcm91dGluZSBwZXIgbGluZQorCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgZml4IGJyb2tlbiBNYWtlZmlsZSBhZnRlciBtYW4gcGFnZSBtb3ZlcworCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dCwgbWlicy9yZmNsaXN0OgorCisgICB1cGRhdGVkIFRMUyBNSUIgdG8gY3VycmVudCBjb3B5CisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICByZXBsYWNlZCBSRkMgY29tbWVudCBudW1iZXIKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oLCBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2g6IDMwNDI3NzA6IGZyb20gbWVoYWY6IE1hZGUgcnVuX2FsYXJtcygpCisgICByZWVudHJhbnQKKworMjAxMC0wOC0xMyAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA0NDUxMjogZnJvbSBwaGlsd2Vic3RlcjogZml4IHN5c29iamVjdGlkCisgICBkaXJlY3RpdmUuCisKKzIwMTAtMDgtMTMgMTk6MDAgIHJzdG9yeQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4OgorCisgICB1c2UgMTI3LjAuMC4xIGluc3RlYWQgb2YgbG9jYWxob3N0IGFzIGRlZmF1bHQgU05NUF9URVNUX0RFU1Qgc28KKyAgIFRMUyB0ZXN0cyB3b3JrCisKKzIwMTAtMDgtMTMgMTg6NTAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBpbXBsZW1lbnRlZCBhIGZpeCBmb3IgdGhlIGlzc3VlIHJlcG9ydGVkIGluCisgICBwYXRjaCAjMzA0Mjc3MC4gQ3JlYXRlZCBhIHNubXBfc2VsZWN0X2luZm9fZmxhZ3MgZnVuY3Rpb24sIGFuZAorICAgc2ltaWxhciwgdGhhdCBhbGxvdyBmb3IgYWxhcm1zIHRvIG5vdCBiZSBydW4uIFRoaXMgaXMgdGhlbiB1c2VkCisgICBpbiB0aGUgc3luY2hfcmVzcG9uc2UgZnVuY3Rpb25zIHRvIGF2b2lkIDEwMCUgQ1BVIGxvb3BzCisKKzIwMTAtMDgtMTMgMTg6NTAgIGhhcmRha2VyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIG1ha2Ugc25tcHRyYXBkIHJlZ2lzdGVyIHRoZSBjZXJ0dG9zZWNuYW1lIHRhYmxlIGluIHRoZSBhZ2VudHgKKyAgIHJlZ2lzdHJhdGlvbnMKKworMjAxMC0wOC0xMyAxODo0OSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taWIyYy5jb25mOgorCisgICBtaW5vciB3b3JkaW5nIGFkZGl0aW9ucworCisyMDEwLTA4LTEzIDE1OjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmM6CisKKyAgIENIQU5HRVM6IGFpeDogUEFUQ0g6IDI4ODY1OTg6IGZyb20gZXhzbmFmdTogSGVhZGVyIGZpeGVzIGZvcgorICAgY29tcGlsaW5nIG9uIEFJWDYKKworMjAxMC0wOC0xMyAxNTowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2Lmg6CisKKyAgIE5FV1M6IHBvcnRzOiBQQVRDSDogMjgzNjg5NTogZnJvbSBzZWFuYm91ZHJlYXU6IHN1cHBvcnQgZm9yIFFOWDYKKworMjAxMC0wOC0xMyAxNDozMyAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgJ2VuZm9yY2UgbmV0c25tcCBwcmVmaXhlcworCisyMDEwLTA4LTEzIDE0OjI5ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOSAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgbWFuL3NubXBfdHJhcF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9zbm1wX2FnZW50X2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc2Vzc2lvbl9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCBtYW4vcGR1X2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL2NvbmZpZ19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyMCAgZHRzMTIKKworICAgKiBNYWtlZmlsZS5pbiwgZG94eWdlbi5jb25mOgorCisgICBEb24ndCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG1hbiBwYWdlcworCisyMDEwLTA4LTEzIDE0OjE4ICBkdHMxMgorCisgICAqICBtYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMsIG1hbi9zbm1wX2Nsb3NlLjMsIG1hbi9zbm1wX2Vycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9mcmVlX3BkdS4zLCBtYW4vc25tcF9vcGVuLjMsIG1hbi9zbm1wX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfcmVhZC4zLCBtYW4vc25tcF9zZWxlY3RfaW5mby4zLCBtYW4vc25tcF9zZW5kLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMywgbWFuL3NubXBfc2Vzc19jbG9zZS4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19lcnJvci4zLCBtYW4vc25tcF9zZXNzX2luaXQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfb3Blbi4zLCBtYW4vc25tcF9zZXNzX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19yZWFkLjMsIG1hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfc2VuZC4zLCBtYW4vc25tcF9zZXNzX3Nlc3Npb24uMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfdGltZW91dC4zLCBtYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMsICAgCisgICAgICBtYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMywgbWFuL3NubXBfdGltZW91dC4zOgorCisgICBSZW1vdmUgcmVkdW5kYW50IG1hbiBwYWdlIGxpbmtzCisgICAoU2hvdWxkIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LCBidXQgZG9uJ3QgZXhpc3QgYW55IG1vcmUKKyAgIGFueXdheSkKKworMjAxMC0wOC0xMyAxNDoxMyAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vYWRkX21pYmRpci4zLCBtYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zLCAgCisgICAgICAgbWFuL2dldF9tb2R1bGVfbm9kZS4zLCBtYW4vaW5pdF9taWIuMywgbWFuL2luaXRfbWliX2ludGVybmFscy4zLCAKKyAgICAgICAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xlYWYuMywgbWFuL25ldHNubXBfbGlicmFyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zZXRfZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAorICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjMsIG1hbi9wcmludF9kZXNjcmlwdGlvbi4zLCBtYW4vcHJpbnRfbWliLjMsICAKKyAgICAgICBtYW4vcHJpbnRfb2JqaWQuMywgbWFuL3ByaW50X3ZhbHVlLjMsIG1hbi9wcmludF92YXJpYWJsZS4zLCAgIAorICAgICAgbWFuL3JlYWRfYWxsX21pYnMuMywgbWFuL3JlYWRfbWliLjMsIG1hbi9yZWFkX21vZHVsZS4zLCAgIAorICAgICAgbWFuL3JlYWRfbW9kdWxlX25vZGUuMywgbWFuL3JlYWRfb2JqaWQuMywgbWFuL3NodXRkb3duX21pYi4zOgorCisgICBSZW1vdmUgRG94eWdlbi1nZW5lcmF0ZWQgbWFuIHBhZ2VzLCBhbmQgdGhvc2UgbGlua2luZworICAgaW5kaXZpZHVhbCByb3V0aW5lcyB0byB0aGUgYXBwcm9wcmlhdGUgbWFuIHBhZ2UuCisgICAoVGhlc2UgYXJlIGJldHRlciBnZW5lcmF0ZWQgZHluYW1pY2FsbHkpCisKKzIwMTAtMDgtMTMgMTI6MTkgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIFByb21wdCBmb3Igd2hldGhlciB0byBnZW5lcmF0ZSBjYWNoaW5nIGNvZGUgb3Igbm90LgorCisyMDEwLTA4LTEzIDEyOjE5ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLmNvbmY6CisKKyAgIFJld29yayBndWlkYW5jZSBxdWVzdGlvbnMgd2hlbiBzZWxlY3RpbmcgdGhlIGJlc3QgdGFibGUgZnJhbWV3b3JrCisgICB0byB1c2UuCisgICBFbnN1cmUgdGFibGUgaGFuZGxpbmcgY29kZSBkb2Vzbid0IG92ZXJ3cml0ZSBzY2FsYXIgaGFuZGxpbmcKKyAgIGNvZGUuCisgICBDaGVjayB0aGF0IHRoZSBzdGFydGluZyBwb2ludCBpcyBzdWl0YWJsZSBmb3IgTWZEIGZyYW1ld29yay4KKworMjAxMC0wOC0xMiAxNTo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IGNvZGUgYnJva2VuIGJ5ICdjb21waWxlciB3YXJuaW5nIGZpeCcgaW4gcjE5MTc5CisKKzIwMTAtMDgtMTIgMTU6MzkgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaDoKKworICAgZml4IHR5cG8gaW4gY29tbWVudAorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgYSBkdXBsaWNhdGUgdmFsdWUgY2hlY2sKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBhZGQgYSB0ZXN0IHdoZXJlIHdlIGNhbiB0cnVzdCBhIENBLXNpZ25lZCBjZXJ0IGFuZCB3ZSBkb24ndCB0cnVzdAorICAgdGhlIENBCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgdGVzdCBhIGRpcmVjdGx5IG1hcHBlZCBDQSBjZXJ0aWZpY2F0ZQorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgY2hhbmdlIHRoZSBsYUNvbmZpZyB0byByZWFkLXdyaXRlIHRvIG1hdGNoIHRoZSBwYXRjaAorCisyMDEwLTA4LTExIDIyOjA3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyOTMxNDQ2OiBmcm9tIGFobWFrZTogbWFrZSB0aGUgbG9hZCBhdmVyYWdlcworICAgd3JpdGFibGUuCisKKzIwMTAtMDgtMTEgMDY6NDMgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmM6CisKKyAgIENIQU5HRVM6IFNpbGVuY2Ugc29tZSBjb21waWxhdGlvbiB3YXJuaW5ncyBmcm9tIHRlc3QgY2FzZXMuCisKKzIwMTAtMDgtMDkgMjE6MDkgIG1hZ2ZyCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IEhhbmRsZSBlbWJlZGRlZCAlJ3MgaW4gdGhlIHJlc3VsdCBtZXNzYWdlLgorCisyMDEwLTA4LTA5IDIxOjA3ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBDSEFOR0VTOiBEbyBubyBkb3VibGUgZGVjbGFyZSB0aGUgaW5kZXggdmFsdWVzLgorCisyMDEwLTA4LTA1IDExOjQ5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBVcGRhdGUgImF1dGgqIiB1c2FnZSBtZXNzYWdlIHdpdGggY29udGV4dCBzdXBwb3J0CisKKzIwMTAtMDgtMDIgMjA6MDggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBGaXggdHdvIHNpbGx5IG1pc3Rha2VzLgorCisyMDEwLTA4LTAyIDE0OjE4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgQUlYIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIHRhZ2dlZCBhcyBpbnRlZ2Vycywgbm90IHN0cmluZ3MuCisKKzIwMTAtMDgtMDIgMTM6NDkgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgZml4IFBlcmwgc3lzdGVtKCkgY29uZmlndXJlIGNoZWNrIHRvIHdvcmsgcmVsaWFibHkgb24gc3lzdGVtcworICAgdGhhdCBsYWNrCisgICBQZXJsCisKKzIwMTAtMDgtMDIgMTE6MDggIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogbWFkZSBpdCBwb3NzaWJsZSB0byBhbmFseXplIGFsbCBjb2RlIGNvdmVyZWQgYnkKKyAgIHRoZSByZWdyZXNzaW9uIHRlc3RzIHdpdGggYSBkeW5hbWljIGFuYWx5emVyLCBhdCBsZWFzdCBpZiB0aGF0CisgICBhbmFseXplciBzdXBwb3J0cyBmb2xsb3dpbmcgY2hpbGQgcHJvY2Vzc2VzLiBBbiBleGFtcGxlOgorICAgCisgICBybSAtcmYgL3RtcC9zbm1wLXRlc3QtKgorICAgbWFrZSAtcworICAgU05NUF9TQVZFX1RNUERJUj15ZXMgRFlOQU1JQ19BTkFMWVpFUj0idmFsZ3JpbmQKKyAgIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tdHJhY2stb3JpZ2lucz15ZXMiIG1ha2UgLXMgdGVzdAorICAgZ3JlcCAtaSB1bmluaXRpYWxpc2VkIC90bXAvc25tcC10ZXN0LSogfCB4YXJncyBsZXNzCisKKzIwMTAtMDgtMDIgMTE6MDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jOgorCisgICBGaXhlZCB0aGUgZm9sbG93aW5nIHR3byBWYWxncmluZCBjb21wbGFpbnRzOgorICAgCisgICBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMpCisgICBhdCAweDZENzAyRTA6IHZmcHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZEOTlEMTE6IHZzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RDdBNDEyOiBzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RTE0NDM3OiBpbmV0X250b2EgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NUU1RTIxOTogbmV0c25tcF9pcHY0X2ZtdGFkZHIgKHNubXBJUHY0QmFzZURvbWFpbi5jOjIxNSkKKyAgIGJ5IDB4NUU2NTcxNzogbmV0c25tcF90Y3BfZm10YWRkciAoc25tcFRDUERvbWFpbi5jOjcwKQorICAgYnkgMHg1RTU2N0VDOiBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZworICAgKHNubXBfdHJhbnNwb3J0LmM6MjI0KQorICAgYnkgMHg1RTI0NzlBOiBfc2Vzc19wcm9jZXNzX3BhY2tldCAoc25tcF9hcGkuYzo1NDQxKQorICAgYnkgMHg1RTI1RTM3OiBfc2Vzc19yZWFkIChzbm1wX2FwaS5jOjYwMzcpCisgICBieSAweDVFMjYxREE6IHNubXBfc2Vzc19yZWFkMiAoc25tcF9hcGkuYzo2MTQ5KQorICAgYnkgMHg1RTI2MjgyOiBzbm1wX3JlYWQyIChzbm1wX2FwaS5jOjU3NDApCisgICBieSAweDQwNERFNDogbWFpbiAoc25tcGQuYzoxMjI3KQorICAgVW5pbml0aWFsaXNlZCB2YWx1ZSB3YXMgY3JlYXRlZCBieSBhIGhlYXAgYWxsb2NhdGlvbgorICAgYXQgMHg0QzI3MEE1OiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MjM2KQorICAgYnkgMHg1RTY1NzM5OiBuZXRzbm1wX3RjcF9hY2NlcHQgKHNubXBUQ1BEb21haW4uYzo4MikKKyAgIGJ5IDB4NUUyNTM4MzogX3Nlc3NfcmVhZCAoc25tcF9hcGkuYzo1Nzg2KQorICAgYnkgMHg1RTI2MURBOiBzbm1wX3Nlc3NfcmVhZDIgKHNubXBfYXBpLmM6NjE0OSkKKyAgIGJ5IDB4NUUyNjI4Mjogc25tcF9yZWFkMiAoc25tcF9hcGkuYzo1NzQwKQorICAgYnkgMHg0MDRERTQ6IG1haW4gKHNubXBkLmM6MTIyNykKKyAgIAorICAgQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHg2RjdCMkUwOiB2ZnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RkE0RDExOiB2c25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkY4NTQxMjogc25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NzAxRjQzNzogaW5ldF9udG9hIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDU2RkEyMTk6IG5ldHNubXBfaXB2NF9mbXRhZGRyIChzbm1wSVB2NEJhc2VEb21haW4uYzoyMTUpCisgICBieSAweDU3MDE3MTc6IG5ldHNubXBfdGNwX2ZtdGFkZHIgKHNubXBUQ1BEb21haW4uYzo3MCkKKyAgIGJ5IDB4NTZGMjdFQzogbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjIyNCkKKyAgIGJ5IDB4NTZGMjk0RjogbmV0c25tcF90cmFuc3BvcnRfc2VuZCAoc25tcF90cmFuc3BvcnQuYzoyNDgpCisgICBieSAweDU2QkM0ODc6IHNubXBfc2Vzc19hc3luY19zZW5kIChzbm1wX2FwaS5jOjUyMDQpCisgICBieSAweDU2QkM2NTE6IHNubXBfYXN5bmNfc2VuZCAoc25tcF9hcGkuYzo0OTk4KQorICAgYnkgMHg1NkJDNjc3OiBzbm1wX3NlbmQgKHNubXBfYXBpLmM6NDk4NCkKKyAgIGJ5IDB4NTY5ODQ0MDogc25tcF9zeW5jaF9yZXNwb25zZV9jYiAoc25tcF9jbGllbnQuYzoxMDA2KQorICAgVW5pbml0aWFsaXNlZCB2YWx1ZSB3YXMgY3JlYXRlZCBieSBhIGhlYXAgYWxsb2NhdGlvbgorICAgYXQgMHg0QzI3MEE1OiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MjM2KQorICAgYnkgMHg1NzAxQjNFOiBuZXRzbm1wX3RjcF90cmFuc3BvcnQgKHNubXBUQ1BEb21haW4uYzoxNjMpCisgICBieSAweDU3MDFFNkY6IG5ldHNubXBfdGNwX2NyZWF0ZV90c3RyaW5nIChzbm1wVENQRG9tYWluLmM6MzA1KQorICAgYnkgMHg1NkYzODA0OiBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjYwMSkKKyAgIGJ5IDB4NTZGM0FDQzogbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjY2OSkKKyAgIGJ5IDB4NTQzNDRGNjogc3ViYWdlbnRfb3Blbl9tYXN0ZXJfc2Vzc2lvbiAoc3ViYWdlbnQuYzo3NTgpCisgICBieSAweDU0MzQ5Qzg6IGFnZW50eF9yZW9wZW5fc2Vzc2lvbiAoc3ViYWdlbnQuYzo4NjkpCisgICBieSAweDU0MzREMDA6IHN1YmFnZW50X3N0YXJ0dXAgKHN1YmFnZW50LmM6OTkpCisgICBieSAweDU2RUFFQjc6IHNubXBfY2FsbF9jYWxsYmFja3MgKGNhbGxiYWNrLmM6MzM4KQorICAgYnkgMHg1NkRFNkZCOiByZWFkX2NvbmZpZ3MgKHJlYWRfY29uZmlnLmM6MTAxOCkKKyAgIGJ5IDB4NTZDMjg3RTogaW5pdF9zbm1wIChzbm1wX2FwaS5jOjg1MCkKKyAgIGJ5IDB4NDA0NzdCOiBtYWluIChzbm1wdHJhcGQuYzoxMDQ4KQorCisyMDEwLTA4LTAxIDA2OjExICBidmFzc2NoZQorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIEZpeGVkIHNwZWxsaW5nIGVycm9ycyByZXBvcnRlZCBieSBpc3BlbGwgLWwuCisKKzIwMTAtMDgtMDEgMDY6MDAgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcF9lbnVtLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgorCisgICBGaXhlZCBhIHR5cG8gaW4gYSB0ZXh0IHN0cmluZyBpbiBhIHVuaXQgdGVzdDogcmVzdHVyYW50IC0+CisgICByZXN0YXVyYW50LgorCisyMDEwLTA4LTAxIDA1OjUzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaDoKKworICAgRG9jdW1lbnRlZCBiZWhhdmlvciBvZiBzZV9hZGRfcGFpcl90b19zbGlzdCgpLgorCisyMDEwLTA3LTMxIDIzOjUwICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaDoKKworICAgRm9sbG93LXVwIGZvciByMTkyNjY6IGFkZCBtaXNzaW5nIGhlYWRlciBmaWxlIHRvIHN1cHBvcnQgTWFjIE9TIFgKKyAgIDEwLjYKKyAgIChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LnByZTIgLT4gVjUuNi5wcmUzCisKKzIwMTAtMDctMzEgMjA6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA3LTMxIDIwOjI0ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjE2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjExICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSByZWFkbWUgc2VjdGlvbiB0byBjYWxsIG91dCBORVdTLXRvbworCisyMDEwLTA3LTMxIDIwOjEwICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGFkZGVkIG1pc3NpbmcgbmV3cyBpdGVtcworCisyMDEwLTA3LTMwIDEzOjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSCAzMDM1MzI4OiBmcm9tOiBzd3M6IGNoZWNrIHRoZSByZXN1bHRzIG9mCisgICBzZXNzaW9uIGNyZWF0aW9uIGZvciBhIGZhaWx1cmUgY2FzZS4KKworMjAxMC0wNy0zMCAxMzowMCAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IHBhdGNoIDMwMzU1Nzg6IGZyb20gc3dzOiBrZWVwIGVycm9yIGNvZGVzIHVwIHRvCisgICBkYXRlCisKKzIwMTAtMDctMjkgMTU6NDggIGR0czEyCisKKyAgICogY29uZmlndXJlOgorCisgICBBZGQgc3VwcG9ydCBmb3IgTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKyAgIChPbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgTWFjIE9TIFggMTAuNQorICAgKExlb3BhcmQgLSAiZGFyd2luOSIpKQorCisyMDEwLTA3LTI5IDE1OjQ3ICBkdHMxMgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob246CisKKyAgIEFkZCBzdXBwb3J0IGZvciBNYWMgT1MgWCAxMC42IChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorICAgKE9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyBNYWMgT1MgWCAxMC41CisgICAoTGVvcGFyZCAtICJkYXJ3aW45IikpCisKKzIwMTAtMDctMjkgMTU6MDMgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmg6CisKKyAgIFByb3ZpZGUgYSBkZWZpbml0aW9uIG9mICd2YV9saXN0JyBmb3IgdmFyYXJncy1iYXNlZCBBUElzCisKKzIwMTAtMDctMjkgMTQ6NTggIGR0czEyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIEFJWCA3CisgICAob24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGlkZW50aWNhbCB0byBBSVggNikKKworMjAxMC0wNy0yOSAxNDo1NiAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uOgorCisgICBEaXNhYmxlIGVtYmVkZGVkIHBlcmwgYnkgZGVmYXVsdCBvbiBhcmNoaXRlY3VyZXMgd2hlcmUKKyAgIHRoaXMgc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMgKEhQLVVYICYgTWFjIE9TIFgpCisKKzIwMTAtMDctMjkgMTE6MTMgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBHdWFyZCBhZ2FpbnN0IGJsYW5rICdpbmNsdWRlKicgbGluZXMuCisgICBIYW5kbGUgcmVsYXRpdmUgJ2luY2x1ZGVGaWxlJyBwYXRocworCisyMDEwLTA3LTI5IDEwOjQ3ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFJldHVybiBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgY29uZmlnIGZpbGVzIGFyZSBhY3R1YWxseQorICAgcHJvY2Vzc2VkLgorICAgUmVwb3J0IHByb2JsZW1zIHdpdGggZmFpbGluZyB0byBpbmNsdWRlIGNvbmZpZyBmaWxlcy4KKworMjAxMC0wNy0yOCAxNDo0NCAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgsIG1hbi9jb25maWdfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmLCAgCisgICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEJyaW5nIG1hbiBwYWdlIGRvY3VtZW50YXRpb24sIGhlYWRlciBmaWxlcyBhbmQgV2luZG93cyBETEwKKyAgIGRlZmluaXRpb25zCisgICBvZiB0b3AtbGV2ZWwgcHVibGljIEFQSSBjYWxscyBpbnRvIGxpbmUgd2l0aCBlYWNoIG90aGVyLgorCisyMDEwLTA3LTI4IDE0OjQwICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRml4IG1pc25hbWVkIGNvbW1lbnQKKworMjAxMC0wNy0yOCAxNDozNiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIERvbid0IG1peCBTTUl2MSBhbmQgU01JdjIgTUlCcyBpbiB0aGUgbGlzdCBvZiBkZWZhdWx0IE1JQnMgdG8KKyAgIGxvYWQuCisgICBVc2UgbmV3ZXIgU01JdjIgdmVyc2lvbnMgKHdoaWNoIGluY2x1ZGUgc3VpdGFibGUgZGlzcGxheSBoaW50cykKKyAgIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBSRkMxMjEzIE1JQiAod2hpY2ggZG9lc24ndCkKKworMjAxMC0wNy0yOCAxNDoxMCAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeCBpbmRlbnRhdGlvbiBmb3IgJ2luY2x1ZGVTZWFyY2gnIHByb2Nlc3NpbmcgY29kZS4KKworMjAxMC0wNy0yOCAxNDowOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEV4dGVuZCAnaW5jbHVkZScgY29uZmlnIGZpbGUgcHJvY2Vzc2luZyB0byBjb3ZlciB0aHJlZQorICAgZGlmZmVyZW50IG1vZGVzIG9mIHdvcmtpbmc6CisgICAtIGxvb2sgZm9yIHRoZSBmaWxlIG9uIHRoZSBjb25maWcgc2VhcmNoIHBhdGgKKyAgIC0gaW5jbHVkZSB0aGUgc3BlY2lmaWVkIGZpbGUgYnkgbmFtZQorICAgLSBpb2FkIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorICAgVXNlIGRpZmZlcmVudCBjb25maWcgdG9rZW5zIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgorCisyMDEwLTA3LTI3IDExOjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L2tlcm5lbC5jLCBhZ2VudC9rZXJuZWwuaCwgYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyOTEyNTIwOiBmcm9tIGxpc3RvbTogRnJlZSBrbWVtIHJlZmVyZW5jZXMKKyAgIG9uIHNodXRkb3duCisKKzIwMTAtMDctMjcgMTA6NTQgIGhhcmRha2VyCisKKyAgICogbWlicy9TTVVYLU1JQi50eHQ6CisKKyAgIENIQU5HRVM6IG1pYnM6IHBhdGNoIDI5NzQ3MTY6IGZyb20gYnZhc3NjaGU6IGZpeCBpc3N1ZXMgaW4gdGhlCisgICBTTVVYLU1JQgorCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgaW5jbHVkZSB0aGUgbmV3IHNlY3VyaXR5LWhlZGFlcnMgbW9kdWxlCisKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICByZW1vdGUgZGVidWdnaW5nL3Byb2Nlc3Npbmcgc3RkZXJyIG91dHB1dAorCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAzMDI4OTIzOiBmcm9tIGplbnNvOiBuZXcgY29weSBvZiB0aGUKKyAgIGJyaWRnZS1taWIgcGVybCBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA3LTI3IDA4OjMxICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcywgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluOgorCisgICBzZXBhcmF0ZSBvdXQgdGhlIHNlY3VyaXR5IGhlYWRlci9pbml0IGdlbmVyYXRpb24KKworMjAxMC0wNy0yNyAwODozMSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzOgorCisgICB0cmFuc3BvcnQgY29uZmlndXJlIHBvcnRpb24KKworMjAxMC0wNy0yNyAwODozMCAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cywgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiwgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW46CisKKyAgIG1vdmUgdHJhbnNwb3J0IGhlYWRlciBnZW5lcmF0aW9uIHRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgY3JlYXRlIGFuCisgICBleHRlcm5hbCBzZXBhcmF0ZSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcgaXQKKworMjAxMC0wNy0yNyAwODoxNCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHJlcG9ydCBnZnMgZmlsZXN5c3RlbXMgaW4gaHJTdG9yYWdlVGFibGUgYW5kCisgICBockZTVGFibGUuCisKKzIwMTAtMDctMjQgMTU6NDIgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBEb24ndCBsb3NlIHRyYWNrIG9mIHdoaWNoIGNvbmZpZyBmaWxlIHdhcyBiZWluZyBwYXJzZWQsCisgICB3aGVuIHByb2Nlc3NpbmcgYW4gaW5jbHVkZWQgY29uZmlnIGZpbGUuCisgICBGaXhlcyBhIGJ1ZyB3aXRoIHJlcG9ydGluZyBsYXRlciBjb25maWcgZXJyb3JzLgorCisyMDEwLTA3LTI0IDE1OjM2ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgRG9uJ3QgbG9zZSB0cmFjayBvZiB3aGljaCBjb25maWcgZmlsZSBpcyBiZWluZyBwYXJzZWQsCisgICB3aGVuIG9wZW5pbmcgYSBuZXcgU05NUCBzZXNzaW9uLgorICAgRml4ZXMgYSBidWcgd2l0aCByZXBvcnRpbmcgbGF0ZXIgY29uZmlnIGVycm9ycy4KKworMjAxMC0wNy0yMyAwMzoxMiAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgYWRkIHRoZSBUTFMgbW9kdWxlcyB0byB0aGUgbGlzdCBvZiB0ZXN0IG1vZHVsZXMKKworMjAxMC0wNy0yMSAxOToyNSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmM6CisKKyAgIEZpeCB0eXBvIGluIGRveHlnZW4gY29tbWVudAorCisyMDEwLTA3LTIxIDE5OjI0ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgorCisgICBGaXggdHlwbyBpbiBzcGVlZCBjb21wdXRhdGlvbgorCisyMDEwLTA3LTIxIDE5OjIxICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfc2VjbW9kLmM6CisKKyAgIEluY2x1ZGUgZ2VuZXJhdGVkIHNlY3VyaXR5LWluY2x1ZGVzLmgKKworMjAxMC0wNy0yMSAxOToyMCAgbmJhCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oOgorCisgICBGaXggaW5pdCBmdW5jIG5hbWUgKGNvcHktcGFzdGUgZ2xpdGNoKQorCisyMDEwLTA3LTIxIDE5OjE4ICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgUmVtb3ZlIHN1cGVyZmx1b3VzIHNlbWljb2xvbgorCisyMDEwLTA3LTIxIDE5OjE4ICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgT3V0IG9mIG9yZGVyIGRlY2xhcmF0aW9uCisKKzIwMTAtMDctMjEgMTk6MTcgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIExvZyBlcnJvciBvbiBmaWxlIG9wZW4gZXJyb3IKKworMjAxMC0wNy0yMSAxOToxNiAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBTcGVsaW5nIGVycm9yCisKKzIwMTAtMDctMjEgMTg6MTAgIG5iYQorCisgICAqIG1pYnMvaWFuYWxpc3QsIG1pYnMvcmZjbGlzdCwgbWlicy9yZmNtaWJzLmRpZmY6CisKKyAgIFVwZGF0ZSBmb3IgY3VycmVudCBSRkNzCisKKzIwMTAtMDctMjEgMTg6MDggIG5iYQorCisgICAqIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBDdXJyZW50IHZlcnNpb24gZnJvbSBJQU5BCisKKzIwMTAtMDctMjEgMTg6MDUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICByMTc0OTUgZXJyb25lb3VzbHkgZGlzYWJsZWQgZGlza0lPTEF4IGZvciBsaW51eAorCisyMDEwLTA3LTIwIDEwOjM4ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3N5c3RlbS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBmaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHdoZW4gZ2VuZXJhdGluZworICAgdGVtcC4gZmlsZSBuYW1lcworCisyMDEwLTA3LTIwIDA3OjMyICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvc25tcGQuYywgYXBwcy9hZ2VudHh0cmFwLmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGQuYywgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCAgIAorICAgICAgbWFuL3NubXB0cmFwZC44LmRlZiwgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgRGVzY3JpYmUgLUQgdXNhZ2UgYXMgLURbVE9LRU5dIGluc3RlYWQgb2YgLUQgW1RPS0VOXQorCisyMDEwLTA3LTE3IDE1OjEwICByc3RvcnkKKworICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQ6CisKKyAgIHVwZGF0ZSBkaXNwbGF5IGhpbnQgdG8gc29tZSBsZXNzIGFtYmlndW91cyAoYW5kIHRoYXQgd29ya3Mgd2l0aAorICAgb3VyIGxpYikKKworMjAxMC0wNy0xNyAwNDoxMyAgcnN0b3J5CisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IHRlc3RzaW1wbGUgZm9yIGJ1aWxkZGlyIT1zcmNkaXIKKworMjAxMC0wNy0xNyAwNDoxMiAgcnN0b3J5CisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgYWRkIHRlc3RzaW1wbGUgdGFyZ2V0CisKKzIwMTAtMDctMTYgMTk6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZWxlYXNlIGl0ZXJhdG9yIHdoZW4gZG9uZSB3aXRoIGl0CisKKzIwMTAtMDctMTUgMTg6MjggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZpeCBpc3N1ZSB3aXRoIFVTTSB1c2luZyBpbmFjdGl2ZSB1c2VycworCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBkb24ndCB1c2Ugc3RybmR1cCAocG9ydGFiaWxpdHkpCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGluY2x1ZGUgYXBwcm9wcmlhdGUgc3RyaW5nIGhlYWRlcjsgZGVmaW5lIE5BTUVfTUFYIGlmIG5vdCBhbHJlYWR5CisgICBkZWZpbmVkOworICAgZG9uJ3QgdXNlIHN0cm5kdXAgKHBvcnRhYmlsaXR5KQorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hlY2sgdGhhdCBzb21lIG5ld2VyIG9wZW5zc2wgbWFjcm9zIGFyZSBkZWZpbmVkIGJlZm9yZSB1c2luZworICAgdGhlbTsgaW5jbHVkZQorICAgYXBwcm9wcmlhdGUgc3RyaW5nIGhlYWRlcgorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGNoZWNrIGZvciBkdGxzIHN1cHBvcnQgaW4gb3BlbnNzbAorCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZG9uJ3QgY29tcGlsZSBkdGxzIGRvbWFpbiBpZiBubyBkdGxzIHN1cHBvcnQgaW4gb3BlbnNzbAorCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBpZmRlZiBwcm90ZWN0aW9uIGZvciBsYXRlciBzaGEgYWxnb3JpdGhtcworCisyMDEwLTA3LTE1IDAxOjM0ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6CisKKyAgIGRhcndpbiBvcGVuc3NsIGRvZXMgbm90IHN1cHBvcnQgbW9yZSByZWNlbnQgc2hhIGFsZ29yaXRobXMKKworMjAxMC0wNy0xNSAwMTozMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBmaXggdHlwbyBpbiBpZmRlZiB0ZXN0CisKKzIwMTAtMDctMTUgMDE6MzMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYzoKKworICAgZml4IGN1dC1uLXBhc3RlIGVycm9yIGluIGluY2x1ZGVkIGZpbGUgbmFtZQorCisyMDEwLTA3LTE0IDE1OjA4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBmaXggdGhlIGZpeDogcHV0IFBSSXogc3BlYyBpbiBjb3JyZWN0IHBsYWNlCisKKzIwMTAtMDctMTQgMTU6MDMgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIHNwZWNpZnkgU05NUCB2ZXJzaW9uIG9uIGNvbW1hbmRsaW5lCisKKzIwMTAtMDctMTQgMTU6MDMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBxdWlldCBjb21waWxlcgorCisyMDEwLTA3LTE0IDE1OjAyICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgcXVpZXQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wNy0xMyAyMDowMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBhcHBzL3NubXB0bHMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBpbmNsdWRlIHNzbC5oIGJlZm9yZSBjZXJ0X3V0aWwuaAorCisyMDEwLTA3LTEzIDIwOjAzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZGVidWcgb3V0cHV0IGZvciBmb3VuZCBjZXJ0CisKKzIwMTAtMDctMTMgMTY6MjQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdHlwbyBpbiBsb2cgbXNnCisKKzIwMTAtMDctMTIgMTA6MjYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOgorCisgICBDSEFOR0VTOiBXaW4zMiBhbmQgQ3lnd2luOiBtYWRlIHN1cmUgdGhhdCBhY2Nlc3NpbmcgdGhlIG1pYklJCisgICBpbnRlcmZhY2VzIHRhYmxlIGRvZXMgbm90IHRyaWdnZXIgb3V0LW9mLXJhbmdlIGFycmF5IGFjY2Vzc2VzCisgICAod2FzIGRldGVjdGVkIGJ5IEJvdW5kc0NoZWNrZXIpLgorCisyMDEwLTA3LTEyIDEwOjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgorCisgICBGaXhlZCBhIGRhbmdsaW5nLXBvaW50ZXItcmVhZCB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTAxOC4gSW4KKyAgIHIxOTAxOCB0aGUgdHlwZSBvZiBncm91cFN1YnRyZWVMZW4gd2FzIGNoYW5nZWQgZnJvbSBpbnQgdG8KKyAgIHNpemVfdCwgd2hpY2ggY2hhbmdlZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGxvb3AgIndoaWxlCisgICAoZ3JvdXBTdWJ0cmVlTGVuLS0gPiAwKSAuLi4iOiBpbnN0ZWFkIG9mIG5vdCBleGVjdXRpbmcgdGhlIGxvb3AKKyAgIGJvZHkgd2hlbiBncm91cFN1YnRyZWVMZW4gd2FzIG5lZ2F0aXZlLCByMTkwMTggY2F1c2VkIHRoZSBib2R5IG9mCisgICB0aGF0IGxvb3AgdG8gYmUgZXhlY3V0ZWQuIERldGVjdGVkIGJ5IHJ1bm5pbmcgc25tcGQgdW5kZXIKKyAgIEJvdW5kc0NoZWNrZXIgd2hpbGUgcGVyZm9ybWluZyBhIE1JQiB3YWxrLgorCisyMDEwLTA3LTEyIDEwOjEyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6CisKKyAgIFJldmVydGVkIHIxOTA0NyAod2hpY2ggd2FzIHdyb25nKSBhbmQgaW1wbGVtZW50ZWQgYSBwcm9wZXIgZml4CisgICBmb3IgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaGVzLgorCisyMDEwLTA3LTEyIDEwOjA5ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisyMDEwLTA3LTEyIDEwOjA4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIHdpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaDoKKworICAgU3VwcHJlc3NlZCBtb3JlIE1TVkMgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDctMTIgMDQ6NDUgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFyczoKKworICAgYWRkIGNvbW1lbnQgd2l0aCBvYmplY3QgbmFtZSBmb3IgbnVtZXJpYyBpZHMKKworMjAxMC0wNy0xMiAwNDo0NSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbmV3IGZ1bmN0aW9uIHRvIGdldCBzZXJ2ZXJJZCBmcm9tIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhOyB1c2UKKyAgIG5ldyBhcGkKKyAgIHRvIGNvbmZpZyBzZXJ2aWNlSWQgZm9yIHRyYXAgdHJhbnNwb3J0IHdoZW4gc2VuZGluZyB0cmFwcworCisyMDEwLTA3LTExIDExOjE4ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgQ0hBTkdFUzogQlVHOiAzMDI3OTAwOiB3aGVuIGNyb3NzLWNvbXBpbGluZyBpdCBpcyBub3cgYXNzdW1lZAorICAgdGhhdCBtZW1jbXAoKSBpcyBhdmFpbGFibGUgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGF0IGl0IGlzIG5vdAorICAgYXZhaWxhYmxlLgorCisyMDEwLTA3LTExIDEwOjMwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgcjE5MTk3LgorCisyMDEwLTA3LTEwIDIwOjAwICByc3RvcnkKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3luYyB1cCBoZWxwIG91dHB1dCBhbmQgb3B0aW9ucyBwcm9jZXNzaW5nCisKKzIwMTAtMDctMDkgMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBVcGRhdGVkIEN5Z3dpbiBzZWN0aW9uIGluIFJFQURNRS53aW4zMi4KKworMjAxMC0wNy0wOSAxNToxMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogU3VwcHJlc3NlZCAiaW1wbGljaXQgY2FzdCBmcm9tIGludCB0byB1X2NoYXIiCisgICB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkgTVNWQy4KKworMjAxMC0wNy0wOSAxNToxMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBUZXN0aW5nOiBtYWRlIHRoZSBkZWJ1ZyBvdXRwdXQgdGhhdCBhcHBlYXJzIGluIHRoZSAiaW52b2tlZCIgZmlsZQorICAgZXZlbiBtb3JlIHZlcmJvc2UuCisKKzIwMTAtMDctMDkgMTU6MTAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyIE1TVkMgYnVpbGQgZml4ZXMuCisKKzIwMTAtMDctMDggMTk6MzAgIG1hcnoKKworICAgKiAgbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0LCAgIAorICAgICAgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgorCisgICBhZGRzIHBlciBpZGVudGl0eSBjb25maWd1cmF0aW9uIGZpbGUgc3VwcG9ydCBzbyBkZWZhdWx0cyBjYW4gYmUKKyAgIGN1c3RvbWlzZWQgb24gY21kbGluZSB3IC1pIDxpZGVudGl0eT4gLSBzZWUgbmV0LXNubXAtY2VydC5jb25mCisgICBmb3IgZXhhbXBsZXMgYW5kIHNvbWUgaGVscCBpbmZvCisKKzIwMTAtMDctMDggMTI6MTcgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzAwMzk4MTogUHJvdGVjdCBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvdworCisyMDEwLTA3LTA4IDExOjE5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMDE5MjQzOiBSZWdpc3RlciBleGVjRml4IGNvbXBhdGFiaWxpdHkKKyAgIGRpcmVjdGl2ZSBjb3JyZWN0bHkuCisKKzIwMTAtMDctMDcgMTA6MTkgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlOgorCisgICBDSEFOR0VTOiBDeWd3aW4gYW5kIE1pbkdXOiB0ZXN0cyBUMTEwLCBUMTExLCBUMTEyLCBUMTIwLCBUMTIxIGFuZAorICAgVDEyMiBkbyBub3cgcGFzcyB3aGVuIHNubXBkIGlzIGJ1aWx0IHdpdGggd2luRXh0RExMIHN1cHBvcnQKKyAgIGVuYWJsZWQuCisKKzIwMTAtMDctMDYgMTg6NTkgIGJ2YXNzY2hlCisKKyAgICogIENoYW5nZUxvZywgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIE1hZGUgcmVncmVzc2lvbiB0ZXN0cyBlYXNpZXIgdG8gZGVidWcgYnkgaW5jbHVkaW5nIG9rIC8gbm90IG9rCisgICBzdGF0dXMgaW4gdGhlICJpbnZva2VkIiBmaWxlLgorICAgU3BlbGxpbmcgZml4ZXM6IHJlbWViZXIgLT4gcmVtZW1iZXI7IHNlcGVyYXRvciAtPiBzZXBhcmF0b3IuCisKKzIwMTAtMDctMDYgMTU6MDQgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBUZXN0IFQwNjUgZG9lcyBub3cgcmVhbGx5IHBhc3Mgb24gTWluR1cuCisKKzIwMTAtMDctMDUgMTA6MDEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgY3VybHkgYnJhY2VzIHN1Y2ggdGhhdCAnfHwnIGFuZCAnJiYnIGFyZSBldmFsdWF0ZWQgaW4gdGhlCisgICBjb3JyZWN0IG9yZGVyLgorCisyMDEwLTA3LTA0IDExOjM3ICBidmFzc2NoZQorCisgICAqIGFwcHM6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wNy0wNCAxMTozNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBGYWxsIGJhY2sgZnJvbSBSVU5GVUxMVEVTVFMgdG8gUlVOVEVTVFMgaWYgbmVpdGhlciBUQVA6Okhhcm5lc3MKKyAgIG5vciBUZXN0OjpIYXJuZXNzIGlzIGF2YWlsYWJsZS4KKworMjAxMC0wNy0wNCAxMToyMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSB0ZXN0IG51bWJlciBpbiAvdG1wL3NubXAtdGVzdHMtJHRlc3RudW0gaXMgc2V0CisgICB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsIHRoYW4ganVzdCAiMCIuCisKKzIwMTAtMDctMDQgMTE6MjAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgU3BsaXQgYSBsb25nIGNvbW1lbnQgbGluZS4KKworMjAxMC0wNy0wNCAxMDo1MiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBCdWcgZml4OiBtYWRlIHN1cmUgdGhhdCBzcmNkaXIgaXMgY29tcHV0ZWQgY29ycmVjdGx5IGlmIGBkaXJuYW1lCisgICAkMGAgPSAuCisKKzIwMTAtMDctMDIgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgU2ltcGxpZmllZCByMTkxODEgKEZpeGVkIFRMU1RDUC1lbmFibGVkIGJ1aWxkIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgbm9uLWVtcHR5ICQoRVhFRVhUKSwgaS5lLiBDeWd3aW4gYW5kIE1pbkdXKS4KKworMjAxMC0wNy0wMSAxODoxNSAgYnZhc3NjaGUKKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGaXhlZCBUTFNUQ1AtZW5hYmxlZCBidWlsZCBmb3IgcGxhdGZvcm1zIHdpdGggbm9uLWVtcHR5CisgICAkKEVYRUVYVCksIGkuZS4gQ3lnd2luIGFuZCBNaW5HVy4KKworMjAxMC0wNy0wMSAxODoxMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0bHMuYzoKKworICAgRml4ZWQgeWV0IGFub3RoZXIgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA3LTAxIDE3OjUzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIEZpeGVkIHR3byByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA3LTAxIDAwOjE5ICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMDEgMDA6MTMgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTAxIDAwOjAzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDYtMzAgMjM6NTUgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5wcmUxIC0+IFY1LjYucHJlMgorCisyMDEwLTA2LTMwIDIzOjU1ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA2LTMwIDIzOjQ4ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmY6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA2LTMwIDIzOjQ1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBtaXNzZWQgdHdvIHRva2VucyBpbiB0aGUgbWFuIHBnYWVzCisKKzIwMTAtMDYtMzAgMjM6NDUgIGhhcmRha2VyCisKKyAgICogIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGQuOC5kZWYsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHJlbmFtZSB0aGUgZGVmWDUwOSB0b2tlbnMgdG8gc29tZXRoaW5nIG1vcmUgZnJpZW5kbHk6IGNsaWVudENlcnQKKyAgIGFuZCBzZXJ2ZXJDZXJ0CisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgdG9wLWZpbGUgY29tbWVudCB1cGRhdGVzCisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG9uJ3QgY2FsbCBjZXJ0X2ZpbmQgd2l0aCBhIE5VTEwgYXJndW1lbnQKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhbGxvdyBkZWYgY2VydHMgdG8gYmUgc3BlY2lmaWVkIHVzaW5nIGEgZmlsZW5hbWUKKworMjAxMC0wNi0zMCAyMzo0MSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgZml4IHN5bnRheCBlcnJvcgorCisyMDEwLTA2LTMwIDIzOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHR1cm4gYSBjb3VwbGUgb2Ygbm9uLWNyaXRpY2FsIGVycm9ycyBpbnRvIGRlYnVnIHN0YXRlbWVudHMgcGVyCisgICBkaXNjdXNzaW9uIHdpdGggcnN0b3J5CisKKzIwMTAtMDYtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1ha2UgdGhlIHJlZ2V4cCBwYXR0ZXJuIG1hdGNoIGZvciB0ZXN0cyB0byBydW4gY2FzZSBpbnNlbnNpdGl2ZQorCisyMDEwLTA2LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weToKKworICAgaW1wb3J0IHN0ZGVyciBmcm9tIHN5cywgcGVyIGRpc2N1c3Npb24gb24gLXVzZXJzCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkIGJhY2sgaW4gdGhlIGRlZmF1bHQgcG9ydCBzcGVjaWZpZXIKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBlbmFibGUgcHVsbGluZyB0aGUgcHJpdmF0ZSBrZXkgb3ZlciBodHRwCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbW92ZSBVUkwgY29sbGVjdGlvbiBpbnRvIGEgc3ViIGZ1bmN0aW9uCisKKzIwMTAtMDYtMzAgMjI6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgYWJpbGl0eSB0byBwdWxsIGEgY2VydCBmcm9tIGEgVVJMCisKKzIwMTAtMDYtMzAgMjI6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGFyZ3VtZW50IGJ1ZyBpbiB0aGUgaXNfdXJsIGZ1bmN0aW9uCisKKzIwMTAtMDYtMzAgMjA6NDkgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdGxzLmM6CisKKyAgIHJlbW92ZSBkZWJ1Z2dpbmcgY29kZQorCisyMDEwLTA2LTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN0R0bHNDTlNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdkdGxzQ05TZXNzaW9uX3NpbXBsZToKKworICAgcmVuYW1lIGZpbGUgZm9yIGNvbnNpc3RlbmN5CisKKzIwMTAtMDYtMzAgMjA6MDEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZToKKworICAgdXBkYXRlIGZvciBuZXcgc25tcHRscyBhcHAKKworMjAxMC0wNi0zMCAyMDowMCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgcmVtb3ZlIGFjY2lkZW50YWxseSBjaGVja2VkIGludCBkZWJ1ZyBjb2RlCisKKzIwMTAtMDYtMzAgMTk6NTkgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIGRlZmluZSBPSURzIGJhc2VkIG9uIFNOTVBfVExTX1RNX0JBU0UKKworMjAxMC0wNi0zMCAxOTo1OSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgYXV0by10cmFuc2lzdGlvbiBiZXR3ZWVuIG5vdFJlYWR5L25vdEluU2VydmljZQorCisyMDEwLTA2LTMwIDE5OjU3ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBhdXRvLXRyYW5zaXN0aW9uIGJldHdlZW4gbm90UmVhZHkvbm90SW5TZXJ2aWNlOyBhZGQKKyAgIHNubXBfc3RvcmVfbmVlZGVkIG9uIGNvbW1pdAorCisyMDEwLTA2LTMwIDE5OjU2ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1c2UgbmV3IGZpbmdlcnByaW50IHBhcnNlL2J1aWxkIGZ1bmN0aW9uczsgcmVtb3ZlIGJhZCBsZW5ndGgKKyAgIGNoZWNrOyBhdXRvCisgICB0cmFuc2l0aW9uIGJldHdlZW4gbm90UmVhZHkgYW5kIG5vdEluU2VydmljZQorCisyMDEwLTA2LTMwIDE5OjU1ICByc3RvcnkKKworICAgKiBtaWJzL1RMU1RNLU1JQi50eHQ6CisKKyAgIHJlbW92ZSBwcmUtcmZjIG1pYjsgc2VlIFNOTVAtVExTLVRNLU1JQi50eHQgaW5zdGVhZAorCisyMDEwLTA2LTMwIDE5OjU0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBjb25zb2xpZGF0ZSBtdWx0aXBsZSBmaWxlcworCisyMDEwLTA2LTMwIDE5OjUzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1ha2UgaGFzaCB0eXBlIHBhcnNlIHJvdXRpbmUgcHVibGljOyBhZGQgcm91dGluZXMgdG8gYnVpbGQvcGFyc2UKKyAgIFNubXBUTFNGaW5nZXJwcmludAorCisyMDEwLTA2LTMwIDE5OjUxICByc3RvcnkKKworICAgKiAgTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcHRscy5jLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIE5FV1M6IHNubXB0bHM6IG5ldyBhcHAgZm9yIG1hbmFnaW5nIChEKVRMUyBjb25maWcgdmlhCisgICBTTk1QLVRMUy1UTS1NSUIgdGFibGVzCisKKzIwMTAtMDYtMzAgMTk6NTAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jOgorCisgICBjYWxsIG5ldyBzbm1wX3N0b3JlX25lZWRlZCgpIGZ1bmN0aW9uIGFmdGVyIGEgY29tbWl0IGluIHRhYmxlcworICAgdGhhdAorICAgaGF2ZSBwZXJzaXN0ZW50IHN0b3JlCisKKzIwMTAtMDYtMzAgMTk6NDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBleHBlcmltZW50YWwgc2ltcGxlIHN0YXRlIG1hY2hpbmUKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBleHBlcmltZW50YWwgcm93IGNyZWF0aW9uIEFQSSB3aGljaCB1c2VzIGEKKyAgIHN0YXRlIG1hY2hpbmUKKyAgIHRvIHRyeSByZWFsbHkgaGFyZCB0byBjcmVhdGUgYSByb3cgZnJvbSBhIGdpdmVuIHZhcmJpbmQgbGlzdAorCisyMDEwLTA2LTMwIDE5OjQ4ICByc3RvcnkKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTkVXUzogc25tcGQ6IG5ldyBBUEkgZm9yIGluZGljYXRpbmcgdGhhdCBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzCisgICB0byBiZSBzYXZlZCBhZnRlciB0aGUgY3VycmVudCByZXF1ZXN0IGZpbmlzaGVzIHByb2Nlc3NpbmcKKworMjAxMC0wNi0zMCAxOTo0NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGFkZCBzb21lIG5ldyB3cmFwcGVyIG1hY3JvcworCisyMDEwLTA2LTMwIDE1OjU5ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0NOU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE1RHRsc1NhblNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTZUbHNTYW5TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3ZHRsc0NOU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExOFRsc0NOU2Vzc2lvbl9zaW1wbGU6CisKKyAgIGFkZGVkIGNoZWNrcyBmb3IgY2hlY2tpbmcgZGlyZWN0IHBhc3Npbmcgb2YgbG9jYWxob3N0IHRvIHRoZQorICAgZXhwZWN0ZWQgbmFtZQorCisyMDEwLTA2LTMwIDE1OjU5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyOgorCisgICBjaGVjayBmb3Igd2lsZGNhcmQgc3VwcG9ydAorCisyMDEwLTA2LTMwIDE1OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzdXBwb3J0IFNBTiBhbmQgQ04gd2lsZGNhcmQgbWF0Y2hpbmcgcGVyIHNwZWMKKworMjAxMC0wNi0zMCAxNTowMCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzTmFtZSwgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzLCAgCisgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NpcGhlclRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc25hbWV0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2FudGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXgsIAorICAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMUR0bHNVc2VyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMlRsc1VzZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFEdGxzU2VydmVyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEyVGxzU2VydmVyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNEdGxzU2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzZHRsc3VkcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNFRsc1Nhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNHRsc3RjcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMUR0bHNUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMlRsc1RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFEdGxzQWdlbnRUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxZHRsc3VkcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMyVGxzQWdlbnRUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMydGxzdGNwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFEdGxzQ3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxZHRsc3VkcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MlRsc0NybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MnRsc3RjcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MUR0bHNDaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxZHRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJUbHNDaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUydGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDB0bHNpcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwVGxzUGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDB0bHN0Y3BwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMUR0bHNQZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMWR0bHNwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMUR0bHNUc21QcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFkdGxzdHNtcHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAyVGxzVHNtUHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAydGxzdHNtcHJlZml4X3NpbXBsZToKKworICAgbW92ZWQgdGVzdCBmaWxlcyBhcm91bmQgZm9yIGJldHRlciBuYW1pbmcKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBkdGxzIHRyYW5zcG9ydCBhZGRyZXNzIHRvIHRoZSBleHBlY3RlZCBob3N0bmFtZQorCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNldCB0aGUgZXhwZWN0ZWQgaG9zdG5hbWUgZnJvbSB0aGUgdHJhbnNwb3J0IHN0cmluZyBpZiBwb3NzaWJsZQorCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGEgYml0IG1vcmUgaGVscCBvdXRwdXQgYnkgZGVmYXVsdAorCisyMDEwLTA2LTI5IDIyOjI5ICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wdHJhcGRfYXV0aC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTExNjogbWFrZSBzdXJlIHdlIGluY2x1ZGUgYWdlbnQgY29uZmlnCisKKzIwMTAtMDYtMjkgMjI6MTggIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaDoKKworICAgQWRkIG1pc3NpbmcgY29uZmlnX3JlcXVpcmVzCisKKzIwMTAtMDYtMjkgMTc6MzMgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIHJld29yayB0aGUgc25tcGNtZCBtYW51YWwgcGFnZSB0byBzZXBhcmF0ZSBvdXQgdGhlIGZsYWdzIGludG8KKyAgIHNlY3Rpb25zIGFwcHJvcHJpYXRlIGZvciB0aGVpciB1c2FnZSB0eXBlCisKKzIwMTAtMDYtMjkgMTY6NTEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBwb2QgZG9jcywgc29tZSBkZWZhdWx0IHZhbCBmaXhlcywgaW5mbyBvdXRwdXQgbm9ybWFsaXplZAorCisyMDEwLTA2LTI5IDE2OjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgYWRkZWQgc3NoLmggaW5jbHVkZQorCisyMDEwLTA2LTI5IDE2OjI3ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICByZW9yZ2FuaXplIHRoZSBtYW51YWwgcGFnZSBhIGJpdCBmb3IgU05NUHYzIGFuZCBUTFMKKworMjAxMC0wNi0yOSAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggZGVmYXVsdCB0bHMgcmVnaXN0cmF0aW9ucworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgY2hlY2sgZm9yIE5VTEwgdHJhbnNwb3J0cyBhZnRlciBhbiBvcGVuIGZhaWxzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmluZyBsb2dnaW5nIGFyb3VuZCBzbyB0aGF0IG9wZW5zc2wgZXJyb3JzIGFyZSBwcmludGVkIG9uCisgICBmYWlsdXJlcworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXg6CisKKyAgIGZpeCBzb21lIG5vbi1pbnRlcmFjdGl2ZSBpbnZvY2F0aW9uIGlzc3VlcworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHNvbWUgY29tbW9uIGNvZGUgaW50byBhIGNvbW1vbiBmdW5jdGlvbgorCisyMDEwLTA2LTI4IDE5OjEzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NpcGhlclRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFkdGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MnRsc2NpcGhlcnNfc2ltcGxlOgorCisgICBjaXBoZXIgc3VpdGUgc2VsZWN0aW9uIGFuZCB0ZXN0cyBmb3IgaXQKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiBweXRob24vTElDRU5TRToKKworICAgbGljZW5zZSB1cGRhdGVzCisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogIHB5dGhvbi9SRUFETUUsIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weSwgICAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIFNOTVB2MyBvdmVyIFRMUyBzdXBwb3J0CisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgYmV0dGVyIG91dHB1dCBzaG93aW5nIHRlc3QgdHlwZXMKKworMjAxMC0wNi0yOCAwMDo1NCAgdGFuZGVycworCisgICAqICBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfY29udGFpbmVyLjMsICAKKyAgICAgICBtYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMywgbWFuL25ldHNubXBfaGFuZGxlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgorCisgICBDSEFOR0VTOiBtYW46IGNsZWFuIHVwIG1hbnVhbCBwYWdlcworICAgKGZyb20gRGViaWFuIHBhdGNoIDU2X21hbnBhZ2UpCisKKzIwMTAtMDYtMjcgMjM6MjkgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBEbyBub3QgY2FsbCB2YWNtX3N0YW5kYXJkX3ZpZXdzKCkgb3IKKyAgIGluaXRfdmFjbV9jb25maWdfdG9rZW5zKCkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIHdhcyBub3QKKyAgIGNvbXBpbGVkCisgICAoZnJvbSBEZWJpYW4gcGF0Y2ggNjFfdmFjbV9taXNzaW5nX2RlcGVuZGVuY3lfY2hlY2spCisKKzIwMTAtMDYtMjcgMDM6MjMgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggYXBwIHRhZyBjb21wbGV0aW9ucworCisyMDEwLTA2LTI3IDAwOjU2ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydCwgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgorCisgICBoYW5kbGUgY29uZmlnIGZpbGUgc2V0dGluZyBpbnRlcmFjdGl2ZSwgdHJ1ZS9mYWxzZSB2YWx1ZXMgaGFuZGxlZAorICAgaW4gY29uZmlnCisKKzIwMTAtMDYtMjYgMjA6NTggIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggc29tZSBidWdzIHcvIHNwYWNlcyBpbiBuYW1lcyBhbmQgYXBwIHRhZyBoZWxwCisKKzIwMTAtMDYtMjYgMTk6MzggIG1hcnoKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCB0ZXN0cyB0byB1c2Ugbm9uLWludGVyYWN0aXZlIC1JCisKKzIwMTAtMDYtMjYgMTc6NDYgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGJldHRlciBpbnRlcmFjdGl2ZSwgPz1oZWxwLCA8dGFiPiBjb21wbCwgbW9yZSBoZWxwLCBTQU4gbG9vcAorICAgZm9ybWF0IGFuZCB0ZXJtaW5hdGlvbiBmaXgsIHRvbGVyYXRlIHNwYWNlcyBpbiBmaWVsZHMgYW5kCisgICBmaWxlbmFtZXMsIG1vcmUgY29tcGxldGUgZXJyb3Igb3V0cHV0LCBlbWJyeW9uaWMgaW1wb3J0IGZyb20gdXJsCisKKzIwMTAtMDYtMjYgMTM6NDggIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBNb3JlIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMuCisKKzIwMTAtMDYtMjYgMTM6NDcgIGJ2YXNzY2hlCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRml4ZWQgdGhlIGVycm9ycyBpbiBhY2NvbmZpZy5oIGFuZCByZWdlbmVyYXRlZAorICAgbmV0LXNubXAtY29uZmlnLmguaW4uCisKKzIwMTAtMDYtMjYgMTM6NDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSBTTVVYIE1JQiBpbXBsZW1lbnRhdGlvbi4KKworMjAxMC0wNi0yNiAwMDo0NSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2FudGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM2R0bHN1ZHBzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTR0bHN0Y3BzYW5fc2ltcGxlOgorCisgICBmaXhlcyBhbmQgdGVzdGluZyBmb3IgY2hlY2tpbmcgU0FOIEROUyBuYW1lcyBmcm9tIHRoZSBzZXJ2ZXIKKworMjAxMC0wNi0yNiAwMDo0NCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNuYW1ldGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGU6CisKKyAgIGdlbmVyaWNpemUgdGhlIHNlcnZlciBuYW1lIHRlc3RzCisKKzIwMTAtMDYtMjUgMjM6MDEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RzbS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaCwgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxZHRsc3RzbXByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMnRsc3RzbXByZWZpeF9zaW1wbGU6CisKKyAgIHVzZXByZWZpeCBzY2FsYXIgdGVzdGluZyBhbmQgc3VwcG9ydAorCisyMDEwLTA2LTI1IDIzOjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHM6CisKKyAgIHJlbW92ZSBkZWJ1Z2dpbmcgbGluZXMKKworMjAxMC0wNi0yNSAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzOgorCisgICBwdXQgaW4gb25seSBtaW5pbWlhbCBkZWJ1ZyBmbGFncworCisyMDEwLTA2LTI1IDIzOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MWR0bHN1ZHBjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJ0bHN0Y3Bjcmxfc2ltcGxlOgorCisgICBjb2RlIGFuZCB0ZXN0IGNhc2VzIGZvciBDUkwgaGFuZGxpbmcKKworMjAxMC0wNi0yNSAxNToyNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlOgorCisgICBBZGRlZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgcHJpbnRlZCBieSB0aGUgUGVybAorICAgaW50ZXJwcmV0ZXIuCisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlZHVjZSBudW1iZXIgb2YgcmVzZW5kIGF0dGVtcHRzIGFuZCB0aW1lb3V0CisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB3YXJuaW5nIGZpeGVzCisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcmVtb3ZlIGxvZ2ljIHR5cG8gZnJvbSBwcmV2aW91cyBjb21taXQKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDB0bHNpcHY2X3NpbXBsZToKKworICAgSVB2NiBmaXhlcyBmb3IgVENQCisKKzIwMTAtMDYtMjUgMTM6MDEgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmV2ZXJ0aW5nIDE5MDk1LCBpdCBicmVha3MgdGVzdHMKKworMjAxMC0wNi0yNSAwOTo0MCAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wdHJhbnNsYXRlOiBmaXhlZCBwcmludGluZyBvZiByYW5nZXMgd2l0aCBVTlNJR05FRAorICAgdHlwZS4KKworMjAxMC0wNi0yNCAyMzo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGZ1bmN0aW9uIG5hbWVzIGZvciBzdGF0IGluY3JlYXNlcworCisyMDEwLTA2LTI0IDIzOjUyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggZXJyb3JzIGluIGNvbW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvbW1lbnRzIGZvciA1LjQgZm9yIGR0bHMKKworMjAxMC0wNi0yNCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29tbWVudHMgZm9yIDUuMy4yCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNsaWVudCBzaWRlIGNvbm5lY3QgY29tbWVudHMKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY291bnRlciBhbmQgY29tbWVudCBpbXByb3ZlbWVudHMKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgdXBkYXRlIGNvdW50ZXIgY2FsbHMgYW5kIGNvbW1lbnQgdGV4dAorCisyMDEwLTA2LTI0IDE5OjAzICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgTW92ZWQgTERfTElCUkFSWV9QQVRIIHNldHVwIGZyb20gaW5kaXZpZHVhbCB0ZXN0cyBzY3JpcHRzIHRvCisgICBzaW1wbGVfVEVTVENPTkYuc2guCisKKzIwMTAtMDYtMjQgMTk6MDIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBGaXhlZCBhIGNvbW1lbnQuCisKKzIwMTAtMDYtMjQgMTc6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIFNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gcjE5MDg0LgorCisyMDEwLTA2LTI0IDE3OjQ3ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA2LTI0IDEyOjMwICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgICJ0ZXN0IC1lIiBpc24ndCBwb3J0YWJsZTsgdXNlICJ0ZXN0IC14IiBpbnN0ZWFkIGZvciB0aGUgUGVybAorICAgc3lzdGVtKCkKKyAgIGNoZWNrCisKKzIwMTAtMDYtMjMgMTE6MTQgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCB2YWx1ZSBvZiBJUC1NSUI6OmlwdjZJbnRlcmZhY2VGb3J3YXJkaW5nIG9uCisgICBMaW51eAorICAgCisgICBUaGUgdmFsdWUgd2FzIDAgKG5vdCBmb3J3YXJkaW5nKSBvciAxIChmb3J3YXJkaW5nKSwgc2hvdWxkIGJlIDIKKyAgIGFuZCAxCisgICBpbnN0ZWFkIC0gbmV0c25tcF9pbnRlcmZhY2VfZW50cnkuZm9yd2FyZGluZ192NiBpcyBib29sZWFuLCBub3QKKyAgIFRydXRoVmFsdWUuCisKKzIwMTAtMDYtMjIgMjM6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBzdXBwb3J0IGZvciBjZXJ0U2VjTmFtZSBtYXBwaW5nIGZyb20gYSBsb2NhbCBjZXJ0IGZpbGUgbmFtZSBhbmQgYQorICAgdGVzdCBmb3IgaXQKKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbToKKworICAgZG9jdW1lbmF0aW9uIHVwZGF0ZSB0byBjbGVhbiB1cCBhbmQgaW5jbHVkZSBUTFMgcGFyYW1ldGVycworCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgc3VwcG9ydCBmb3IgcGFzc2luZyBpZGVudGl0aWVzIGFuZCBmdWxsIHdvcmtpbmcgdmVyc2lvbgorCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMHRsc3RjcHBlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxZHRsc3BlcmwudDoKKworICAgcGVybCBUTFMvRFRMUyB0ZXN0cworCisyMDEwLTA2LTIyIDIyOjQzICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgZmlyc3QgcHRhY2ggb24gU05NUC9UTFMgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbiBmdW5jdGlvbgorCisyMDEwLTA2LTIyIDIyOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXJzdCB3b3JraW5nIHN1cHBvcnQgZm9yIGEgZGVsYXllZCBjbG9zZSgpIHRvIGF0dGVtcHQgdG8gc2VuZGluZworICAgb3V0c3RhbmRpbmcgcGFja2V0cyBpbiB0aGUgcXVldWU7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIHNubXB0cmFwCisgICB0byB3b3JrIGF0IGFsbCB3aGVuIHNlbmRpbmcgdHJhcHMgKG5vdCBpbmZvcm1zKSBvdmVyIERUTFMKKworMjAxMC0wNi0yMiAxOTowMyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBDSEFOR0VTOiBNaW5HVzogdGVzdHMgVDA1OSBhbmQgVDA2NSBkbyBub3cgcGFzcy4KKworMjAxMC0wNi0yMiAxOTowMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmM6CisKKyAgIFRoZSB3aWR0aCBhcmd1bWVudCBmb3IgJS4qZCBtdXN0IGhhdmUgdHlwZSBpbnQsIG5vdCBzaXplX3QuIFRoaXMKKyAgIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiByMTkwMTQuCisKKzIwMTAtMDYtMjIgMTg6NTcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYzoKKworICAgQ0hBTkdFUzogTWluR1c6IHJ1bl9zaGVsbF9jb21tYW5kKCkgd2l0aCBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0CisgICAoYnV0IG5vdCBib3RoKSBkb2VzIG5vdyB3b3JrLgorICAgVGhpcyBkaWQgbm90IHdvcmsgdW50aWwgbm93IGJlY2F1c2Ugb24gTWluR1cgbWtzdGVtcCgpIGdlbmVyYXRlcworICAgYSBNaW5HVy1zdHlsZSBwYXRoICgvdG1wLy4uLikgd2hpbGUgc3lzdGVtKCkgaW52b2tlcyBjbWQuZXhlIGFuZAorICAgaGVuY2UgZXhwZWN0cyBhIFdpbmRvd3Mtc3R5bGUgcGF0aCAoQzpcLi4uKS4KKworMjAxMC0wNi0yMiAxNzozOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBBbHNvIHJlcG9ydCB0aGUgcG9ydCBzcGVjaWZpY2F0aW9uIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdLgorCisyMDEwLTA2LTIyIDE3OjM4ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBSZXBsYWNlZCBhbiBleHBsaWNpdCB0ZXN0IGZvciBNaW5HVyBieSBhIHRlc3Qgb24gSEFWRV9TSUdIVVAuCisKKzIwMTAtMDYtMjIgMTc6MzYgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIFNJR0hVUC4KKworMjAxMC0wNi0yMiAxNzozNSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBSZXBvcnQgd2hpY2ggdGVzdHMgZmFpbGVkLCBpZiBhbnkuCisKKzIwMTAtMDYtMjIgMDg6MzcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6CisKKyAgIEZpeGVkIGFuIGVycm9yIGluIGEgY29tbWVudCBibG9jay4KKworMjAxMC0wNi0yMSAxOToyNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOgorCisgICBSZWFycmFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHRlc3Qgc3VjaCB0aGF0IGl0IGlzIG5vCisgICBsb25nZXIgbmVjZXNzYXJ5CisgICB0byBpbnZva2Ugc2ltcGxlX2V2YWxfdG9vbHMuc2ggd2hlbiB0aGlzIHNjcmlwdCBpcyBpbnZva2VkIGFzIGEKKyAgIHRyYXAgaGFuZGxlcgorICAgYnkgc25tcHRyYXBkLgorCisyMDEwLTA2LTIxIDA4OjAxICBkdHMxMgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIEVuc3VyZSB0aGF0IGZkc2V0IHN0cnVjdHVyZSBpcyByZXNpemVkIHN1ZmZpY2llbnRseQorICAgdG8gYWNjb21vZGF0ZSB0aGUgc3BlY2lmaWVkIHNvY2tldCBJRC4KKyAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgU2hpeWFsZWkuCisKKzIwMTAtMDYtMjAgMTk6MzIgIGR0czEyCisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL3BrY3MuYywgICAKKyAgICAgIHNubXBsaWIvc25wcmludGYuYzoKKworICAgQXZvaWQgZHVwbGljYXRlICh1bnVzZWQpIHN5bWJvbHMuCisKKzIwMTAtMDYtMjAgMTk6MzEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZToKKworICAgQ29tbWVudGVkIG91dCBkZWJ1ZyBjb2RlLgorCisyMDEwLTA2LTIwIDE5OjMwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgUmVzdG9yZWQgc3VtbWFyeSBzdWNjZXNzL2ZhaWx1cmUgY291bnQgcmVwb3J0aW5nLgorICAgQWxzbywgbW92ZWQga2lsbC5leGUgdGVzdCBiYWNrIHRvIFJVTlRFU1RTLgorCisyMDEwLTA2LTIwIDE5OjI5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IGFkZCB0aGUgdGVzdCBuYW1lIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgImludm9rZWQiLgorCisyMDEwLTA2LTIwIDE5OjI3ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogc2tpcCB0aGUgdGVzdHMgdGhhdCByZXF1aXJlIFNJR0hVUCBzaW5jZQorICAgTWluR1cgZG9lcyBub3Qgc3VwcG9ydCBTSUdIVVAuCisKKzIwMTAtMDYtMjAgMTU6MTkgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGEgY29uZmlndXJlIHRlc3QgdGhhdCBkZXRlY3RzIHdoZXRoZXIgb3Igbm90IFBlcmwncworICAgc3lzdGVtKCkgZnVuY3Rpb24KKyAgIGludm9rZXMgYSBQT1NJWCBzaGVsbC4gIm1ha2UgdGVzdCIgZG9lcyBub3cgZmFsbCBiYWNrIHRvIFJVTlRFU1RTCisgICBpZiBub3QuCisKKzIwMTAtMDYtMjAgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQnVpbGRzIGFnYWluIG9uIE1pbkdXIC0tIGFkZGVkICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPiB3aGVyZQorICAgbmVjZXNzYXJ5LgorICAgTm90ZTogYWx0aG91Z2ggPG5ldC1zbm1wL3R5cGVzLmg+IGlzIGluY2x1ZGVkIGluZGlyZWN0bHkgZnJvbSB0aGUKKyAgICogICAgICp0cmFuc3BvcnQuaCAgICBoZWFkZXIgZmlsZXMsIHRoZXNlICNpbmNsdWRlIHN0YXRlbWVudHMgYXJlCisgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBvZiAgICBhIHBlc2t5ICAgIGNpcmN1bGFyIGRlcGVuZGVuY2UgYmV0d2VlbgorICAgICAgPG5ldC1zbm1wL3R5cGVzLmg+IGFuZCAgICA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPi4gCisgICAgICAyMDEwLTA2LTIwIDE1OjEyICBidmFzc2NoZQorCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBDSEFOR0VTOiBNaW5HVzogcmVmdXNlIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpZiBraWxsLmV4ZQorICAgY2Fubm90IGJlIGZvdW5kLgorCisyMDEwLTA2LTIwIDE1OjExICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFNob3J0ZW5lZCB0aGUgc3JjZGlyIHBhdGggYnkgbWFraW5nIHN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluCisgICAvLi4KKworMjAxMC0wNi0xOSAxODozMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgQWRkZWQgc3VwcG9ydCBmb3IgcnVubmluZyBSVU5GVUxMVEVTVFMgd2l0aCBUZXN0OjpIYXJuZXNzIGluCisgICBhbm90aGVyIGRpcmVjdG9yeSB0aGFuIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorCisyMDEwLTA2LTE5IDE2OjQxICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBjb21wbGV0ZSByZXdyaXRlIG9mIHBhcmFtcyB0byB1c2UgdGFibGVfZGF0YXNldCBpbnN0ZWFkIG9mCisgICBjcmVhdGUtZGF0YXNldAorCisyMDEwLTA2LTE5IDE2OjQxICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgdXNlIHRleHQgZm9yIGhhc2ggdHlwZSBpbiBwZXJzaXN0ZW50IHN0b3JlCisKKzIwMTAtMDYtMTkgMTY6NDAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYzoKKworICAgcXVpZXQgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wNi0xOSAxNjo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBtaXNzaW5nIHNwZWNpZmllciBpbiBkZWJ1ZworCisyMDEwLTA2LTE5IDE2OjM5ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1c2UgZGVmaW5lIGluc3RlYWQgb2YgY29uc3RhbnQ7IGZpeCBjaGVjayBmb3Igcm93cyB0byBzYXZlCisKKzIwMTAtMDYtMTkgMTY6MzkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIHJlbW92ZS9maW5kIGZ1bmN0aW9uIGZvciBtYXBzL2FkZHJzL3BhcmFtczsgcmVuYW1lIHBhcmFtcworICAgdGFnLT5uYW1lOworICAgZGVzdHJveSAtPiBmcmVlOyBncm91cCByZWNlbnQgdHJ1c3QgZnVuY3Rpb25zIHRvZ2V0aGVyIGluIHNyYzsKKyAgIGRvbid0IHN0b3JlCisgICBwYXJhbXMgZnAgYXMgYmluYXJ5OyBoYW5kIHRleHQgYXJncyBmb3IgaGFzaCB0eXBlIChlLmcgLS1zaGExKQorCisyMDEwLTA2LTE4IDE1OjM1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogY29ycmVjdGVkIGVycm9yIGhhbmRsaW5nIGluIG1pYklJL2F0LgorCisyMDEwLTA2LTE4IDA3OjIzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDYtMTggMDE6NDIgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBEbyBub3QgZGVmaW5lIHJldCB0d2ljZSB3aGVuIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTyBpcyBzZXQuCisKKzIwMTAtMDYtMTggMDE6MzkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgQ29ycmVjdGVkIHR5cG8uCisKKzIwMTAtMDYtMTggMDA6MzEgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgYmV0dGVyIE5FV1MgYW5kIENIQU5HRVMgZmlsZXMKKworMjAxMC0wNi0xNyAyMDozOSAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMjA6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA2LTE3IDE4OjU5ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41IC0+IFY1LjYucHJlMQorCisyMDEwLTA2LTE3IDIwOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNi0xNyAxODo1OSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAxODo1NSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNi0xNyAxODo1NCAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS50b3A6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6MzkgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHJlLWVuYWJsZSBzb21lIGNvbW1hbmRzCisKKzIwMTAtMDYtMTcgMTc6NDYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICBmb3Jnb3QgbWlzc2luZyBxdW90ZXMgaW4gU0VUIG91dHB1dAorCisyMDEwLTA2LTE3IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICB0bHMgdGVzdGluZyBjbGVhbnVwCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBmaXhlcyBmb3IgYWRkcmVzcyBwcmludGluZzsgbW9yZSB0byBjb21lCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9zdGx5IHByb3Blcmx5IHNldCByZW1vdGUvbG9jYWwgdHJhbnNwb3J0IHBhcmFtZXRlcnMKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxZHRsc3VkcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMydGxzdGNwYWdlbnR0cmFwdGVzdHNfc2ltcGxlOgorCisgICB0ZXN0cyBmb3IgYWdlbnRzIHNlbmRpbmcgb2YgdHJhcHMgb3ZlciAoRClUTFMKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZToKKworICAgbW92ZSBleHBvcnQgc3RhdGVtZW50cyB0byB0aGUgc3VwcG9ydCBmaWxlIGZvciBzaW1wbGljaXR5CisKKzIwMTAtMDYtMTcgMTc6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgdGxzIGJvb3RzdHJhcHBpbmcgdG8gcG9zdF9wcmVtaWIgc28gb3RoZXIgY29uZmlnIHRva2VucyBjYW4KKyAgIHVzZSB0aGUgY2VydCBsb2FkaW5nIHJlc3VsdHMKKworMjAxMC0wNi0xNyAxNzo0NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgorCisgICBhZGRlZCBzbm1wX2VudW0gdGVzdHMgcHVsbGVkIGZyb20gdGhlIG1haW4oKSB0ZXN0IGF0IHRoZSBib3R0b20KKyAgIG9mIHRoZSBvcmlnaW5hbCAuYyBmaWxlCisKKzIwMTAtMDYtMTcgMTY6MDAgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIEVsaW1pbmF0ZSAiZGlmZmVyIGluIHNpZ25lZG5lc3MiIHdhcm5pbmcKKworMjAxMC0wNi0xNyAwMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgcmV2ZXJ0IFVEUCBjaGFuZ2VzIGZyb20gcjE4OTg0IHNpbmNlIGl0IGJyb2tlIHRoZSBVRFAgdHJhbnNwb3J0OworICAgdGhlIHN0cnVjdCBwcm9iYWJseSBuZWVkcyB0byBtYXRjaCBhbm90aGVyIHN0cnVjdCBzb21ld2hlcmUgZWxzZQorCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhIG5ldyBLRVlXT1JEIG91dHB1dCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICB1c2UgY29uZmlnX2FuZF9vcGVuIGZvciBvcGVuaW5nIHRoZSB0cmFuc3BvcnQKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZXh0cmEgZGVidWdnaW5nIHN0YXRlbWVudHMKKworMjAxMC0wNi0xNiAyMjoxNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIGV4cGxpY2l0bHkgZGVjbGFyZSB0cnVzdCBjZXJ0aWZpY2F0ZXMgdG8gdHJhbnNwb3J0CisKKzIwMTAtMDYtMTYgMjI6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2xlYW51cCBzb21lIGxvc3QgbWVtb3J5IG9uIGNsb3NpbmcKKworMjAxMC0wNi0xNiAyMTo1NiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHR5cG9zCisKKzIwMTAtMDYtMTYgMjE6MzQgIGR0czEyCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgd2FybmluZ3MgZnJvbQorICAgYWdlbnQgY29kZSBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMjA6MTYgIGR0czEyCisKKyAgICogIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCBzbm1wbGliL2Rpcl91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiB3YXJuaW5ncyBmcm9tCisgICBsaWJyYXJ5IGNvZGUgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE5OjM2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgb2xkZXIgbm8tbG9uZ2VyLW5lZWRlZC1kdXBsaWNhdGUtY29uZmlnIGVudHJpZXMKKworMjAxMC0wNi0xNiAxOToxNCAgZHRzMTIKKworICAgKiBzbm1wbGliL3ZhY20uYzoKKworICAgRml4IHByb2Nlc3Npbmcgb2YgdmlldyBtYXNrcyAobWlzcGxhY2VkIHBhcmVudGhlc2VzKQorCisyMDEwLTA2LTE2IDE4OjQ1ICBkdHMxMgorCisgICAqICBhcHBzL2FnZW50eHRyYXAuYywgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBhcHBzL3NubXB1c20uYzoKKworICAgRWxpbWluYXRlICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIGZyb20gYXBwIGNvZGUKKyAgIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxNzoyMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzOgorCisgICBjaGVjayBmb3IgaW5mb3JtcyBzZW50IG92ZXIgdGxzIHRyYW5zcG9ydHMKKworMjAxMC0wNi0xNiAxNzoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBvdGhlciB2YWx1c2UgZnJvbSBwYXJlbnQgdGxzYmFzZSBkYXRhCisKKzIwMTAtMDYtMTYgMTc6MjEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlOgorCisgICBhZGRlZCBiYXNpYyB0cmFwIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB0ZXN0cworCisyMDEwLTA2LTE2IDE3OjIxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgcmVtb3ZlIG5vIGxvbmdlciBuZWVkZWQgdGVtcCBmaWxlIHRvdWNoZXMKKworMjAxMC0wNi0xNiAxNzoyMCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYWRkZWQgYSBuZXcgZnVuY3Rpb24gYW5kIHRyYW5zcG9ydCBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBmX29wZW4KKyAgIGNhbGwgaGFzIGJlZW4gY2FsbGVkIHlldAorCisyMDEwLTA2LTE2IDE3OjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1bnVzZWQgdmFyIHdhcm5pbmcgY2xlYW51cAorCisyMDEwLTA2LTE2IDE3OjE5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWRkZWQgdHJ1c3RDZXJ0IGNvbmZpZ3VyYXRpb24gdG9rZW4KKworMjAxMC0wNi0xNiAxNzoxOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIG1pbm9yIHR3ZWFrcyBmb3IgdGVzdGluZyBjbGFyaXR5CisKKzIwMTAtMDYtMTYgMTc6MTggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZToKKworICAgbW92ZWQgY29tcGxleCAoRClUTFMgdG8gYSBzZXBhcmF0ZSBzZWN0aW9uIGFuZCBtYWRlIHRoZSB0cmFuc3BvcnQKKyAgIHRlc3RzIG9ubHkgdGVzdCBtaW5pbWFsIHN1cHBvcnQKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZCBtZWNoYW5pc21zIGZvciBzcGVjaWZ5aW5nIGFuZCBleHBlY3RpbmcgdGhlIGhvc3RuYW1lIG9mIHRoZQorICAgZmFyIHNpZGUKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgdGVzdHMgZm9yIHZlcmlmeWluZyBzZXJ2ZXIgY2VydGlmaWNhdGUgY2hlY2sgZmFpbHVyZXMKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGU6CisKKyAgIHRlc3RpbmcgZm9yIGNoZWNraW5nIGNsaWVudCBzaWRlIHZlcmlmaWNhdGlvbiBvZiBzZXJ2ZXIKKyAgIGNlcnRpZmljYXRlcworCisyMDEwLTA2LTE2IDE3OjE2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBzZXR1cCBmb3IgYSBob3N0bmFtZSBjb25maWcgb3B0aW9uCisKKzIwMTAtMDYtMTYgMTc6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNldHVwIGZvciBhIGhvc3RuYW1lIGNvbmZpZyBvcHRpb24KKworMjAxMC0wNi0xNiAxNzoxNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGVjayB0byBtYWtlIHN1ZXIgc3NsIHBvaW50ZXIgaGFzIGJlZW4gY3JlYXRlZCB2aWEgZl9vcGVuIGNhbGwKKworMjAxMC0wNi0xNiAxNTowMiAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuaCwgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgRGVjbGFyZSAnc2h1dGRvd25fcGVybCcgcHJvcGVybHkuCisKKzIwMTAtMDYtMTYgMTQ6MzcgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmM6CisKKyAgIEVsaW1pbmF0ZSAic2lnbmVkIGFuZCB1bnNpZ25lZCB0eXBlIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iCisgICB3YXJuaW5ncyBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTQ6MjcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBFbGltaW5hdGUgInVudXNlZCB2YXJpYWJsZSIgd2FybmluZworCisyMDEwLTA2LTE2IDE0OjIyICBkdHMxMgorCisgICAqICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvc25tcGQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIEVsaW1pbmF0ZSB2YXJpb3VzICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTE2IDEzOjEzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhcHBzL3NubXB2YWNtLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSBzaWduZWQtdnMtdW5zaWduZWQgd2FybmluZ3MgZnJvbSBudW1lcmljIHNjYW5mCisgICBwcm9jZXNzaW5nIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTYgMDM6MjggIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIHRoZSBncmVhdCB1bi1uYW1lZCBjb250YWluZXIgaHVudAorCisyMDEwLTA2LTE2IDAzOjI3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHNoYXJlIGNhY2hlIGJldHdlZW4gdGFibGUgYW5kIGNvdW50IHNjYWxhcjsgd2hlbiByZWFkaW5nIGNvbmZpZywKKyAgIGFkZCB0bworICAgbGlicmFyeSBjb250YWluZXJzIGZvciBhY3RpdmUgcm93cywgdGFibGUgY29udGFpbmVycyBmb3IgaW5hY3RpdmUKKyAgIHJvd3M7CisgICB1c2VyIGNlcnRfdXRpbCBhcGlzIGluc3RlYWQgb2YgZGlyZWN0IGNvbnRhaW5lciBtYW5pcHVsYXRpb247CisgICB3aGVuCisgICBzYXZpbmcgaW5hY3RpdmUgbWFwIHJvd3MsIHNraXAgYWxsIGJ1dCBub25Wb2xhdGlsZQorCisyMDEwLTA2LTE2IDAzOjI2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggZGVidWcgdG9rZW4gdHlwbworCisyMDEwLTA2LTE2IDAzOjI1ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhcGkgZm9yIGFkZGluZyBlbnRyaWVzIHRvIHRsdHNtIGFkZHIsIHBhcmFtcyBhbmQgY2VydCBtYXAKKyAgIGNvbnRhaW5lcnM7CisgICByZWdpc3RlciBzZSBzbGlzdCBwYWlyIGVhcmxpZXIgc28gdGhleSBhcmUgYXZhaWxhYmxlIGR1cmluZworICAgY29uZmlnIHBhcnNpbmc7CisgICBtYWtlIHN1cmUgY29uZmlnIHN0cmluZ3MgYXJlIG51bGwgdGVybWluYXRlZAorCisyMDEwLTA2LTE1IDIxOjQyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgU3VwcHJlc3Mgd2FybmluZ3M6CisgICAnc3RydWN0IG5sbXNnaGRyIGRlZmluZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0JyBhbmQKKyAgICdmdW5jdGlvbiBfbG9hZF92NiBkZWNsYXJlZCBidXQgbmV2ZXIgZGVmaW5lZCcKKworMjAxMC0wNi0xNSAyMTozMCAgZHRzMTIKKworICAgKiAgYWdlbnQva2VybmVsLmMsIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvcGtjcy5jLCBzbm1wbGliL3NucHJpbnRmLmM6CisKKyAgIEVsaW1pbmF0ZSAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZ3MgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNSAwNzowNyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDNjb3B5X253b3JkX2NsaWIuYzoKKworICAgQWRkIHRlc3Qgb2YgY29weV9ud29yZAorCisyMDEwLTA2LTE0IDIxOjMyICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIEVsaW1pbmF0ZSAib3ZlcmZsb3cgaW4gaW1wbGljaXQgY29uc3RhbnQgY29udmVyc2lvbiIgd2FybmluZ3MKKyAgIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTQgMTU6NTEgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRWxpbWluYXRlICJzdHJpbmcgbGVuZ3RoIGdyZWF0ZXIgdGhhbiA1MDkiIHdhcm5pbmdzIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTQgMTU6MTkgIGR0czEyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIEVsaW1pbmF0ZSAiaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29tcHV0YWJsZSIgd2FybmluZ3MKKyAgIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTQgMDU6MjcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgY291bnQgaGFuZGxlcnMgdG8gY291bnQgbm9uLWFjdGl2ZSByb3dzIHRvbworCisyMDEwLTA2LTE0IDA1OjEyICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBvbmx5IHR3ZWFrIHN0b3JhZ2VUeXBlIGZvciBhY3RpdmUgcm93czsgcmVzZXQgZW50cnkgZmxhZ3Mgd2hlbgorICAgcmVtb3ZpbmcgZnJvbQorICAgY2VydF91dGlsIG1hcHM7IHdoZW4gY3JlYXRlaW5nIHJvd3MgZnJvbSBjZXJ0X3V0aWwgbWFwcywgc2V0CisgICBzdHJhZ2V0VHlwZSB0bworICAgdm9sYXRpbGUgaWYgbm9uVm9sYXRpbGUgZmxhZyBub3Qgc2V0OyBkb250IGZyZWUgY2FjaGUgaW4KKyAgIGNhY2hlX2xvYWQgb24gZXJyCisKKzIwMTAtMDYtMTQgMDU6MTAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBtb3ZlIHRsc3RtQWRkciB0YWJsZSBjb25maWcgcGFyc2luZyB0byBjZXJ0X3V0aWw7IGFkZCBjYWNoZSB0bworICAgbWVyZ2UgY2VydF91dGlsCisgICBhZGRycyAoYWN0aXZlKSBhbmQgbm9uLWFjdGl2ZSByb3dzOworCisyMDEwLTA2LTE0IDA1OjEwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBub25Wb2xhdGlsZSBmbGFnIHRvIHRsc3RtQWRkciB0YWJsZTsgc2V0IGNvbnRhaW5lciBuYW1lOyBza2lwCisgICAnMHgnIGluIGZwCisKKzIwMTAtMDYtMTQgMDU6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGFuZ2UgTE9HX0VSUiB0byBMT0dfSU5GTyBmb3Igbm9uLWVycm9yIGxvZyBtc2cKKworMjAxMC0wNi0xMyAyMTowMiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tCisgICBNZkQtYmFzZWQgTUlCIG1vZHVsZSBjb2RlLCBhbmQgTWZEIHRlbXBsYXRlIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTIgMjE6MzMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tIChub24tTWZEKQorICAgTUlCIG1vZHVsZSBjb2RlLiBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEyIDEwOjI2ICBkdHMxMgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvZmlsZV91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tIGxpYnJhcnksCisgICBhcHBzIGFuZCBhZ2VudCBmcmFtZXdvcmsraGVscGVycyBjb2RlLiBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEwIDIwOjAxICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGxvb2t1cCBjZXJ0IGtleXMgZm9yIHRscyBkb21haW5zOyB1c2UgU0VDX01PREVMIGRlZmluZSBpbnN0ZWFkIG9mCisgICBoYXJkY29kZWQKKyAgIGNvbnN0YW50OyBhZGQgU0VDX01PREVMX1RTTSB0byBhbGxvd2VkIHNlYyBtb2RlbHMgZm9yIG1wTW9kZWwKKyAgIFNOTVBfVkVSU0lPTl8zCisKKzIwMTAtMDYtMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKKworICAgZGVmYXVsdCB0byByZWFkT25seS9hY3RpdmUgZm9yIGJhZCBjb25maWcKKworMjAxMC0wNi0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFkZCBkZWJ1Zzsgc3dpdGNoIHRvIFNFQ19NT0RFTF9UU00gYW5kIHdhcm4gaWYgb3RoZXIgc2VjbW9kZSBzZXQsCisgICBpbnN0ZWFkCisgICBvZiBzaW1wbHkgbG9nZ2luZyB0aGF0IGl0IHdvbid0IHdvcmsKKworMjAxMC0wNi0xMCAxOTo1OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNoZWNrIHB0cnMgYmVmb3JlIGRlcmVmZXJlbmNlCisKKzIwMTAtMDYtMTAgMTk6NTggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YSBtYW5hZ2VtZW50IHRvIGNlcnRfdXRpbDsgaW1wbGVtZW50CisgICBUQVJHRVRfQUREUgorICAgYW5kIFRBUkdFVF9QQVJBTVMgbG9va3VwIGluIGNlcnQgQVBJCisKKzIwMTAtMDYtMTAgMTk6NDcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgdXBkYXRlIHNlYyBtb2RlbCBkZWZpbmUgbWlzc2VkIGluIGVhcmxpZXIgY2hlY2tpbgorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIGNvbmZpZyB0cmFwc2VzcyB0cmFuc3BvcnRzIG9uIGNyZWF0aW9uOyBzaW1wbGlmeSBpZmRlZnMgZm9yCisgICBESVNBQkxFX1NOTVBWMQorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wa3NtLmMsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGF1dG8gc3dpdGNoIHRvIHYzIGZvciAoZCl0bHMgc2Vzc2lvbnMgaW5zdGVhZCBvZiBsb2dnaW5nIHRoYXQKKyAgIG90aGVycyB3b250CisgICB3b3JrOyBkZWZpbmUgVFNNIHNlYyBtb2RlbCB3aXRoIG90aGVyIHNlYyBtb2RlbHM7IGNvbnNpc3RlbnRseQorICAgdXNlCisgICBTTk1QX1NFQ19NT0RFTF8qIGluIHRoZSBjb2RlLCB1c2luZyAjZGVmaW5lcyBmb3IgYmFja3dhcmRzCisgICBjb21wYXRpYmlsaXR5CisgICB3LypfU0VDVVJJVFlfTU9ERUwKKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2VydFRvVFNOOiBtb3ZlIG1pYiByZWxhdGVkIHBlcnNpc3RlbmNlIGJhY2sgaW50byBtaWIgbW9kdWxlOworICAgY2VydF91dGlsOiBhZGQgdGxzdG1QYXJhbXMgcGVyc2lzdGVuY2U7IHVzZSBzbGlzdCBmb3IgY2VydCBtYXAKKyAgIHR5cGUgbmFtZQorICAgbWFwcGluZzsKKworMjAxMC0wNi0xMCAxOTo0NSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nIChjb25zdCkKKworMjAxMC0wNi0xMCAwNDo1OCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluZGVudGF0aW9uIG9mIGEgZG8td2hpbGUgbG9vcCB0byBtYWtlIHRoZSBjb2RlCisgICByZWFkYWJsZS4KKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBjb21tZW50IG91dCBrZXlVc2FnZSBzbyBwcm9wZXIgc2VsZi1zaWduZWQgY2VydHMgYXJlIGdlbmVyYXRlZAorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzb2xpZGlmeSBjZXJ0aWZpY2F0ZSBhY2NlcHRhbmNlIGZvciB0aGUgY2xpZW50IHNpZGUKKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggYXJyYXkgdHlwbworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGxvZyBvcGVuc3NsIGVycm9ycyBvbiBhY2NlcHQgZmFpbHVyZQorCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVnaXN0ZXIgZGVmYXVsdCBwb3J0cyBmb3IgdGxzL2R0bHMKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkbyBwcm9wZXIgU1RPUkUgbG9hZGluZyBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyByYXRoZXIgdGhhbiBmaWxlCisgICBiYXNlZCBsb2FkaW5nCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGRlZCB0d28gbmV3IEFQSXM6IG5ldHNubXBfY2VydF90cnVzdCBhbmQgbmV0c25tcF9jZXJ0X3RydXN0X2NhCisKKzIwMTAtMDYtMDkgMjI6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkZWQgc3RyYWlnaHQgJ3RscycgdHJhbnNwb3J0IG5hbWUKKworMjAxMC0wNi0wOSAyMjo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYWRkZWQgc3RyYWlnaHQgJ2R0bHMnIHRyYW5zcG9ydCBuYW1lCisKKzIwMTAtMDYtMDggMjE6MDUgIG1hZ2ZyCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIEluc3RhbGwgYWdlbnRfcmVhZF9jb25maWcuaCBpbiA1LjYgYXMgd2VsbC4gSXQgZGlzYXBwZWFyZWQgaW4KKyAgIHIxODg0My4KKworMjAxMC0wNi0wOCAwOToyNSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6CisKKyAgIFJlbW92ZSAob3IgYWN0aXZhdGUpIHVudXNlZCB2YXJpYWJsZXMuCisgICBGaXggbWlzbmFtZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKKzIwMTAtMDYtMDggMDc6MTEgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIEFQSSBjaGFuZ2VzIGZvciBwcmVsaW1pbmFyeSBIQUxfYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgVUNEIGRpc2sKKyAgIG1vZHVsZS4KKyAgIChPbWl0dGVkIGZyb20gcmV2aXNpb24gMTg5MzIgY2hlY2tpbikKKworMjAxMC0wNi0wOCAwNDoxOCAgcnN0b3J5CisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIHVwZGF0ZSBtYWtlZmlsZSBmb3IgbW92ZWQgaGVscGVyIGhlYWRlcnMKKworMjAxMC0wNi0wNyAyMDoxOCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmM6CisKKyAgIFJldmVydGluZyByZXYuIDE3NjE2LCB0aGUgbmVjZXNzYXJ5IGNoZWNrIGlzIGFscmVhZHkgaW4gcmV2LgorICAgMTc0MTUuCisKKzIwMTAtMDYtMDYgMDM6NDUgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRoczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEluIGNhc2UgZXhlY19wcmVmaXggaXMgdW5zZXQgdGhlbiBzZXQgaXQgdG8KKyAgICcke3ByZWZpeH0nIGluIG9yZGVyIHRvIHBpY2sgdXAgb3ZlcnJpZGVzIG9mICRwcmVmaXggaW4gbWFrZQorICAgaW5zdGFsbC4KKworMjAxMC0wNi0wNCAwNDowNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZG8gYSBiZXR0ZXIgam9iIG9mIHZlcmlmeWluZyBmaW5nZXJwcmludHMgb2YgcmVtb3RlIHNlcnZlcnMKKyAgIHB1bGxpbmcgZmluZ2VycHJpbnRzIGZyb20gYSBudW1iZXIgb2YgcG9zc2libGUgcGxhY2VzCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgZ28gYWhlYWQgYW5kIGxvZyBvdXRwdXQgZmlsZSBmb3IgZWFzaWVyIGRlYnVnZ2luZyBpbiBlcnJvcnMKKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IHR5cG8KKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHJlbW92ZSBjb21tZW50IGFib3V0IHJhbmRvbSBiZWluZyBpbmFkZXF1YXRlOyB3ZSdyZSBkb2luZyB0aGUKKyAgIGJlc3Qgd2UgY2FuIGJhc2VkIG9uIHdoYXQgd2UgaGF2ZQorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIGFub3RoZXIgdXNlciBmb3IgdGVzdGluZyBzbm1wYXBwIGRlZmF1bHQgY2VydGlmaWNhdGUKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHJ1biBhIGRlZmF1bHQgdGVzdCB3aXRob3V0IGEgbG9jYWwga2V5IHRvIGVuc3VyZSB0aGUgc25tcGFwcCB0eXBlCisgICBpcyBwaWNrZWQgdXAKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBsb2NhbCBpZGVudGl0eSBhbmQgcHVsbCBpdCBmcm9tIGEKKyAgIGZpbGVuYW1lIG9mIHRoZSBpbml0X3NubXAoKSByZWdpc3RlcmVkIHR5cGUgbmFtZQorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGRvYyB1cGRhdGUKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDV1bml4LnQ6CisKKyAgIHVuaXggc29ja2V0IHRlc3QKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAzdWRwNi50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA0dGNwNi50OgorCisgICBpcHY2IHRlc3RzCisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIG1lbnRpb24gdGVzdCBuYW1lIGlzIElQdjQKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgY2hlY2sgdGhhdCB0cmFuc3BvcnQgd2FzIGNvbmZpZ3VyZWQKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBhZGQgc3VwcG9ydCBmb3IgbmV0LXNubXAtY29uZmlnLmggY2hlY2tzCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvTmV0U05NUFRlc3RUcmFuc3BvcnQucG0sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBzb21lIGJhc2ljIHRyYW5zcG9ydCBjaGVja2luZyBmb3IgcGVybDogdWRwIGFuZCB0Y3AKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QwMDFiYXNpYy50OgorCisgICBiYXNpYyB0ZXN0cyBmb3IgcGVybAorCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGluZnJhc3RydWN0dXJlIG1vZHVsZSBmb3IgdGVzdGluZyBwZXJsIHN1cHBvcnQKKworMjAxMC0wNi0wMyAxNTo1NiAgZHRzMTIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgUG9pbnQgTElCe0NVUlJFTlQsQUdFLFJFVklTSU9OfSBkb2N1bWVudGF0aW9uIHRvIHRoZSBjb3JyZWN0CisgICBmaWxlLgorICAgV2FybiBhYm91dCAnbWFrZWRlcGVuZCcgcGlja2luZyB1cCB0ZXN0aW5nIG1vZHVsZSBjb2RlLgorICAgRW1waGFzaXMgdXBkYXRlIG9mICdkb3dubG9hZC5odG1sJyBwYWdlCisgICBNZW50aW9uIHVwZGF0ZSBvZiBPZmZpY2lhbCBQYXRjaGVzCisgICBTdXBwcmVzcyBicm9rZW4gY29tbWFuZHMKKworMjAxMC0wNi0wMyAxNToxNiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oLCBhZ2VudC9taWJncm91cC91Y2Rfc25tcC5oOgorCisgICBQcmVsaW1pbmFyeSBIQUxfYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgVUNEIGRpc2sgbW9kdWxlLgorICAgRW5zdXJlcyBjb25zaXN0ZW50IHJlcG9ydGluZyBiZXR3ZWVuIFVDRCBhbmQgSG9zdFJlcyBGU3lzIHVzYWdlCisgICBhbmQgZXh0ZW5kcyAnc2tpcE5GU0luSG9zdFJlc291cmNlcycgY29uZmlnIHRvIFVDRCBkaXNrIHN0YXRzLgorCisyMDEwLTA2LTAzIDE1OjEzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jOgorCisgICBGaXggYnJva2VuIHNpemUgY2FsY3VsYXRpb25zLgorICAgU3VwcG9ydCA2NC1iaXQgc2l6ZS91c2FnZSB2YWx1ZXMuCisKKzIwMTAtMDYtMDIgMTQ6NTIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgLS13aXRoLWNhIGluc3RlYWQgb2YgLS1jYQorCisyMDEwLTA2LTAyIDE0OjUxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIHRoZSBuZXcgLWJyaWVmIG9wdGlvbiBmb3IgZmluZ2VycHJpbnQgY2FwdHVyaW5nCisKKzIwMTAtMDYtMDIgMTQ6NDAgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggLS13aXRoLWNhIGhhbmRsaW5nLCBmaXggQ0EgbmV3Y2VydHMgYm9va2tlZXBpbmcKKworMjAxMC0wNi0wMiAxMDo1NyAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gcGFyc2luZyBPSURzCisgICBpbiBjb25maWcgZmlsZXMuCisKKzIwMTAtMDYtMDIgMDA6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBjaGVjayB0aGF0IENBIGNlcnRpZmljYXRlcyBjcmVhdGVkIGFmdGVyIHNubXBkIHN0YXJ0cyBhcmUgc3RpbGwKKyAgIHVzYWJsZTsgY2hlY2sgYWxsIG91dHB1dCBmaW5nZXJwcmludHMgdG8gZW5zdXJlIHRoZXkgd2VyZQorICAgcHJvcGVybHkgY3JlYXRlZAorCisyMDEwLTA2LTAyIDAwOjIzICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZCBtaXNzaW5nIGRpcmVjdG9yeSBhbmQgZmlsZSBzdWZmaXggdG8gY2EgaW52b2NhdGlvbnMKKworMjAxMC0wNi0wMiAwMDoyMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGNoZWNrIHRoYXQgY2VydGlmaWNhdGUgb3V0cHV0IGZpbmdlcnByaW50cyB3ZXJlIGZvdW5kCisKKzIwMTAtMDYtMDIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgdHdvIG5ldyBmdW5jdGlvbnMgZm9yIHZhbHVlIGNvbXBhcmlzb24gdGVzdCBvdXRwdXQKKworMjAxMC0wNi0wMiAwMDoxNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICByZW1vdmUgbm8tbG9uZ2VyLXVzZWQgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG9rZW4gc3BlY2lmaWVyICh3ZQorICAgcmVxdWlyZSBhIGNvcHkgb2YgdGhlIGtleSkKKworMjAxMC0wNi0wMiAwMDowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICAtIGNoYW5nZWQgJ2ZpbmdlcnByaW50JyB0b2tlbiB0byBtb3JlIGdlbmVyaWMgJ2lkZW50aXR5JyBrZXl3b3JkCisgICAtIGFkZGVkIHRoZSBhYmlsaXR5IGZvciBuZXRzbm1wX2NlcnRfZmluZCB0byB0cnkgbXVsdGlwbGUgdHlwZXMKKyAgIChGUCAmIGZpbGUpCisgICAtIGFuZCBwcm92aWRlIHRlc3Qgc3VpdGUgdGVzdCBmb3IgaXQuCisKKzIwMTAtMDYtMDEgMjA6MTIgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBQZXJsIGV4dGVuc2lvbiBtb2R1bGVzIGNhbiBsb2FkIHRoZSBOZXQtU05NUAorICAgRExMcyB3aGlsZSBydW5uaW5nIHRoZSBOZXQtU05NUCByZWdyZXNzaW9uIHRlc3RzLgorCisyMDEwLTA2LTAxIDE2OjQ3ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtYWpvciB1cGRhdGUgYnVnIGZpeGVzIGFuZCBmZWF0dXJlcyAtIGludGVyYWN0aXZlIG1vZGUsIHNlcGFyYXRlCisgICBDQSBkaXJzLCBnZW4gY3NyIGZyb20gY2VydCwgZmluZ2VycHJpbnQgZGlzcGxheSAtLWJyaWVmLAorICAgZWxpbWluYXRlIHNlZCwgb3BlbnNzbC5jb25mIG92ZXJ3cml0ZSBhbmQgdGVtcGxhdGluZworCisyMDEwLTA2LTAxIDE0OjQ4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgRml4ZWQgYSB0eXBvIGluIGEgc291cmNlIGNvZGUgY29tbWVudC4KKworMjAxMC0wNi0wMSAxNDoyNSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgSVAtTUlCOjppcElmU3RhdHNSZWFzbVJlcWRzIHZhbHVlLgorICAgCisgICBKdXN0IGZpeGluZyBhIHN0dXBpZCB0eXBvLgorCisyMDEwLTA1LTMxIDEwOjQzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGVuYWJsZWQgVW5peCB0cmFuc3BvcnQuCisgICAoRm9yd2FyZC1wb3J0ZWQgcjE4Njg3IGZyb20gdGhlIFY1LjUgYnJhbmNoKS4KKworMjAxMC0wNS0zMCAyMjo1MiAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBlbmFibGUgdG8gcnVuIHdpdGggb2xkZXIgUGVybCAoZS5nLiBQZXJsIDUuMDA0MDUgYXMgc2hpcHBlZCB3aXRoCisgICBJUklYCisgICA2LjUpCisKKzIwMTAtMDUtMzAgMjI6NDkgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgcG9saXNoIGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0zMCAyMDoxOSAgbWFnZnIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sICAgCisgICAgICBuZXQtc25tcC1jb25maWcuaW4sIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEbyBub3QgbGluayB3aXRoIGxpYm5ldHNubXBoZWxwZXJzIGFueSBtb3JlIGFzCisgICBpdCBpcyBlbXB0eS4KKworMjAxMC0wNS0zMCAxOToxOCAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCBzbm1wbGliL3NubXAuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIGEgdm9pZCBhcmd1bWVudCBmb3IgdGhlIGRhdGEgYXJndW1lbnQgb2YKKyAgIHhkdW1wLgorCisyMDEwLTA1LTMwIDE5OjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfcGVybC5jOgorCisgICBDSEFOR0VTOiBCVUc6IDIwNTE3NDI6IGFkZGVkIG1pc3NpbmcgUEVSTF9TWVNfSU5JVDMoKSBjYWxsIChzZWUKKyAgIGFsc28gbWFuIHBlcmxlbWJlZCkuCisKKzIwMTAtMDUtMzAgMTk6MTYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgKGZyZWUoKSBjYWxsZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZAorICAgZmlyc3QpLgorCisyMDEwLTA1LTMwIDE2OjU2ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBzbm1wbGliOiBEbyBub3QgcmVxdWlyZSB0aGF0IHRoZSBVRFAgdHJhbnNwb3J0IGlzIGluY2x1ZGVkLgorCisyMDEwLTA1LTMwIDEyOjAwICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgZGVwZW5kZW5jaWVzIGJldHdlZW4gdHJhbnNwb3J0cy4gUmVtb3ZlCisgICB1bm5lY2Vzc2FyeSBpbmNsdWRlcy4KKworMjAxMC0wNS0zMCAwNjoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2R1bW15LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGxpYm5ldHNubXBoZWxwZXJzIGlzIG5vdCBlbXB0eSBzdWNoIHRoYXQgYnVpbGRpbmcKKyAgIE5ldC1TTk1QIG9uIEFJWCBhbmQgSVJJWCBpcyBhZ2FpbiBwb3NzaWJsZS4KKworMjAxMC0wNS0yOSAwOTo1MiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgRm9sbG93LXVwIGZvciByMTg5MDI6IHdvcmtzIGFnYWluIHdpdGhvdXQgVEFQOjpIYXJuZXNzLgorCisyMDEwLTA1LTI4IDIzOjIzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggbG9uZy1hZ28gYnJva2VuIHZlcmJvc2l0eQorCisyMDEwLTA1LTI4IDIzOjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggbW9yZSBwcmV2aW91c2x5IGJyb2tlbiBvcHRpb24gcmVuYW1lczsgY2hhbmdlIC1kIHRvCisgICBtYXN0ZXItZGlyZWN0b3J5IGFuZCBhZGQgYXMgYSByZWFsIGFyZ3VtZW50CisKKzIwMTAtMDUtMjggMjM6MDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZToKKworICAgbW9yZSBtaXNzaW5nIG9sZHVjZCByZW5hbWVzCisKKzIwMTAtMDUtMjggMjI6NTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9vbGR1Y2QsIAorICAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZToKKworICAgcmVuYW1lZCAnb2xkdWNkJyB0byAnc2ltcGxlJyB0byBwdXQgYSBtb3JlIHBvc2l0aXZlIHNwaW4gb24gdGhlbQorCisyMDEwLTA1LTI4IDIyOjU0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUkVBRE1FLCB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHRlc3Qgc3VpdGUKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICByZXZlcnQgdW5pbnRlbnRpb25hbmFsbHkgY29tbWl0dGVkIHRlc3QgdGVzdAorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIGZyZWUgdmFyaWFibGVzIGFnYWluCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgZml4IHdhbGtzIHNvIHRoYXQgbXVsdGlwbGUgd2Fsa3MgdGVybWluYXRlIHByb3Blcmx5CisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgcGF0Y2ggdG8gaGFuZGxlIHRlc3Rpbmcgb2YgbG9vcGluZyBvZiBtdWx0aXBsZSB2YXJiaW5kcyBpbiBhIHdhbGsKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBpbml0YWwgcGF0Y2ggdG8gcHJldmVudCBsb29waW5nIHdhbGtzCisKKzIwMTAtMDUtMjggMjA6NTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgaW1wbGVtZW50IGNlcnQgbG9va3VwIGJ5IGZpbGVuYW1lCisKKzIwMTAtMDUtMjggMDc6MDIgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBjb25zdCBkZWNsYXJhdGlvbnMgdG8gdGhlIGRpc2FibGVkIHZlcnNpb25zCisgICBvZiB0aGUgZGVidWdnaW5nIGNvZGUgYXMgd2VsbC4KKworMjAxMC0wNS0yOCAwMjoxMiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgYWRkIHBlcnNpc3RlbmNlOyBjaGVjayBmb3IgY29sIG1vZHMgd2hpbGUgcm93IGFjdGl2ZQorCisyMDEwLTA1LTI4IDAyOjExICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaDoKKworICAgQ0hBTkdFUzogYWdlbnRsaWI6IG5ldyBmdW5jdGlvbnMgdG8gbWFrZSBzdGFzaCBwdHIgYW5kIG5ld3JvdworICAgYXZhaWxhYmxlIHRvCisgICB0YWJsZV9kYXRhc2V0IGhhbmRsZXJzCisgICBub25ld3M6IGZpeCB0eXBvOyB0YWJzIHRvIHNwYWNlczsgdXNlIHNpemVvZiBpbnN0ZWFkIG9mIGNvbnN0YW50CisKKzIwMTAtMDUtMjcgMTg6NTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIFdpbjMyIGJ1aWxkIGZpeGVzLgorCisyMDEwLTA1LTI3IDE4OjI0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICAibWFrZSB0ZXN0IiB3aXRob3V0IFRBUDo6SGFybmVzcyAod2FzIGJyb2tlbiBieSByMTg4MDIpLgorCisyMDEwLTA1LTI3IDE1OjE1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsIAorICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL21kNS5jLCBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLiBNb3N0IGZpeGVzIGludm9sdmVkIGFkZGluZyB0aGUKKyAgICJjb25zdCIga2V5d29yZC4KKworMjAxMC0wNS0yNyAxMzo1MiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjk3MjU3OTogZml4ZWQgY2hlY2tpbmcgb2YKKyAgIHNubXBUYXJnZXRBZGRyUm93U3RhdHVzIFNFVCByZXF1ZXN0cy4KKworMjAxMC0wNS0yNyAxMzo0MSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW46CisKKyAgIHJldmVydCBwYXJ0IG9mIDE4ODg1OiB0ZXN0IGZpbGVzIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBieQorICAgdGhlbXNlbHZlcyB0b28KKworMjAxMC0wNS0yNyAxMToxOSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg6CisKKyAgIENIQU5HRVM6IGNvcnJlY3RseSBjYWxjdWxhdGUgaWZYVGFibGUuaWZIQ0luVWNhc3RQa3RzIG9uIDMyLWJpdAorICAgTGludXgKKyAgIAorICAgTGludXggZG9lcyBub3QgcHJvdmlkZSBzdGFuZGFsb25lIGNvdW50ZXIgZm9yIGluY29taW5nIHVuaWNhc3QKKyAgIHBhY2tldHMgKGl1Y2FzdCkKKyAgIC0gaXQgcHJvdmlkZXMgY291bnRlciBvZiBhbGwgcGFja2V0cyAoaWFsbCkgKyBzZXBhcmF0ZSBjb3VudGVyCisgICBmb3IgdGhlIG11bHRpY2FzdAorICAgb25lcyAoaW1jYXN0KS4gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgaWZUYWJsZSByZWFkIHRoZXNlCisgICBjb3VudGVycyBhbmQKKyAgIGNhbGN1bGF0ZWQgaXVjYXN0ID0gaWFsbCAtIGltY2FzdCAqYmVmb3JlKiB0aGVzZSB2YWx1ZXMgd2VyZQorICAgZXhwYW5kZWQgaW50bworICAgNjRiaXRzLiBUaGlzIHByb2R1Y2VkIGVycm9ycyBvbiAzMmJpdCBzeXN0ZW1zIHdoZW4gaWFsbAorICAgb3ZlcmZsb3dlZCB0byB6ZXJvIGFuZAorICAgaW1jYXN0IHdhcyBub3plcm8gLT4gaXVjYXN0IGdvdCBuZWdhdGl2ZSBhbmQgJ2M2NCAzMiBiaXQgY2hlY2sKKyAgIGZhaWxlZCcgZXJyb3IgaW4KKyAgIHNubXBkIGxvZy4gTm93IHRoZSBhZ2VudCBleHBhbmRzIHRoZXNlIHZhbHVlcyB0byA2NGJpdHMgZmlyc3QgYW5kCisgICAqICAgICAqdGhlbiogcGVyZm9ybXMgICAgdGhlIGNhbGN1bGF0aW9uLCB1c2luZyBhIG5ldyBmbGFnLiAKKyAgICAgIDIwMTAtMDUtMjcgMDg6MTggIG1hZ2ZyCisKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvUlVOVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1bjoKKworICAgQ0hBTkdFUzogdGVzdGluZzogTW92ZSB0aGUgc2V0dGluZyBvZiBNSUJESVJTIGZyb20gdGhlIHN1cHBvcnQKKyAgIHNjcmlwdCB0byB0aGUgZHJpdmVycyBzaW5jZSBpdCBpcyBuZWVkZWQgZm9yIHRoZSBDIHRlc3RzIGFzIHdlbGwuCisKKzIwMTAtMDUtMjcgMDg6MDkgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogVXNlIG9sZHVjZF9ydW4sIG5vdCBydW5fb2xkdWNkLiBDaGFuZ2Ugc3JjZGlyCisgICB0byByZWZlciB0byB0aGUgdG9wIGRpcmVjdG9yeSBhbmQgbm90IHRoZSB0ZXN0aW5nIHN1YmRpcmVjdG9yeSBhcworICAgdGhhdCBpcyB3aGF0IGlzIGV4cGVjdGVkIGluIHRoZSB0ZXN0IHNjcmlwdHMuCisKKzIwMTAtMDUtMjcgMDU6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHdhcm5pbmcgc3F1YXNoaW5nCisKKzIwMTAtMDUtMjcgMDU6MTYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsIHNubXBsaWIva2V5dG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYzoKKworICAgbW9yZSBjb25zdCBjb3JyZWN0bmVzcworCisyMDEwLTA1LTI3IDA0OjE4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB0ZXN0cyBmb3IgYWdlbnQtbm90LWtub3duLXVzZXItY2VydGlmaWNhdGVzCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogUkVBRE1FLnNubXB2MzoKKworICAgcmVmZXJlbmNlIHRoZSBpdG5lcm5hbCBzdXBwb3J0IGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2wvT1BFTlNTTC1MSUNFTlNFLCBzbm1wbGliL29wZW5zc2wvUkVBRE1FOgorCisgICBpbnRlcm5hbCBPcGVuU1NMIHN1cHBvcnQgZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIE5FV1M6IGxpYm5ldHNubXA6IFN1cHBvcnQgZm9yIGEgc3RyZWFtLWxpbmUgc3RyaXBwZWQgZG93biB2ZXJzaW9uCisgICBvZiBpbnRlcm5hbCBPcGVuU1NMIHN1cHBvcnQgdXNpbmcgLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwKKworMjAxMC0wNS0yNyAwNDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMsIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oLCAKKyAgICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgICByZW1vdmUgbW9yZSBkZXBlbmRlbmNpZXMgZm9yIGV4dGVybmFsIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjE1ICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBzbm1wbGliL29wZW5zc2wsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jZmIxMjguYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYywgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhLmgsIAorICAgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oLCBzbm1wbGliL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmMsIHNubXBsaWIvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1X2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9tb2Rlcy5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhX2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9zcHIuaDoKKworICAgbW92ZSBvcGVuc3NsIGNvZGUgaW50byBhIHN1YmRpcmVjdG9yeQorCisyMDEwLTA1LTI3IDA0OjEzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkOgorCisgICBmaXggdGVzdGluZyBzbyBpdCB1c2VzIG11bHRpcGxlIHR5cGVzIG9mIGNyeXB0bworCisyMDEwLTA1LTI3IDA0OjEzICBoYXJkYWtlcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgZGVmaW5pdGlvbnMgYW5kIGZpbGVzIGZvciBkb2luZyBpbnRlcm5hbCBjcnlwdG8gc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgaW5jbHVkZSBpbnRlcm5hbCBhZXMvZGVzIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmM6CisKKyAgIGxvY2FsaXplCisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jLCBzbm1wbGliL29wZW5zc2xfbW9kZXMuaDoKKworICAgaW5pdGFsIGNvcGllcyBvZiBjZmIxMjggbW9kZXMgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmM6CisKKyAgIGxvY2FsaXplCisKKzIwMTAtMDUtMjcgMDQ6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmMsIHNubXBsaWIvb3BlbnNzbF9hZXNfbG9jYWwuaDoKKworICAgaW5pdGlhbCB2ZXJzaW9ucyBvZiBhZXNfY29yZS5jIGFuZCBhZXNfbG9jbC5oCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmg6CisKKyAgIGluaXRpYWwgY29weSBvZiBhZXMuaCBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NmYi5jOgorCisgICBpbml0aWFsIGNvcHkgb2YgdGhlIG9wZW5zc2wgYWVzX2NmYi5jIGZpbGUKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jOgorCisgICBpbmNsdWRlIGxvY2FsaXplZCBjb3BpZXMgb2YgdGhlIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICB1c2UgaW50ZXJuYWwgREVTCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NiY19lbmMuYzoKKworICAgbG9jYWxpemVkIGNvcHkgb2YgdGhlIGNiY19lbmMuYyBmaWxlIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9zcHIuaDoKKworICAgZGVzL3Nwci5oIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmM6CisKKyAgIGFkZGVkIGRlc19lbmMuYyBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oOgorCisgICBsb2NhbCBjb3BpZXMgb2YgdGhlIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oOgorCisgICBpbml0aWFsIGNvcHkgb2Ygb3BlbnNzbCdzIGRlcy5oCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmM6CisKKyAgIGxvY2FsaXplZCBoZWFkZXIgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9vcGVuc3NsX2Rlc19sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmM6CisKKyAgIGluaXRhbCBjb3BpZXMgb2Ygc29tZSBvZiB0aGUgb3BlbnNzbCBERVMgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc2NhcGkuYzoKKworICAgZmluaXNoaW5nIHBvcnRpbmcgb2YgaW50ZXJuYWwgYXV0aCBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgYWRkIGludGVybmFsIGNyeXB0byBmaWxlcyB0byB0aGUgY2hlY2svdXNlIGxpc3QKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL21kNV9sb2NsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQzMl9jb21tb24uaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYV9sb2NhbC5oLCBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGxvY2FsaXplZCBmaWxlIG5hbWVzIHdpdGggb3BlbnNzbCBwcmVmaXhlcworCisyMDEwLTA1LTI3IDA0OjA1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDUuYzoKKworICAgbG9jYWxpemUgdGhlIG1kNSBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjA1ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL29wZW5zc2xfc2hhLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGNvbXBsZXRlbHkgbG9jYWxpemUgdGhlIG9wZW5zc2wgU0hBIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfc2hhLmg6CisKKyAgIGluaXRpYWwgdmVyaXNvbiBvZiBzaGEuaCBjb3B5CisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvbWQzMl9jb21tb24uaCwgc25tcGxpYi9tZDVfbG9jbC5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsIAorICAgICAgICBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGFkZGVkIGxvY2FsIGNvcGllcyBvZiB0aGUgb3BlbnNzbCBjcnlwdG8gZnVuY3Rpb25zCisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBtYWtlIHVzZSBvZiBpbnRlcm5hbCBjcnlwdG8gaGFzaCBmdW5jdGlvbnMKKworMjAxMC0wNS0yNyAwNDowMyAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgY29uZmlndXJlIGNoZWNrcyBmb3IgaW50ZXJuYWwtY3J5cHRvIHN1cHBvcnQKKworMjAxMC0wNS0yNiAyMjoxNyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcHJvcGVybHkgdmVyaWZ5IGV4cGVjdGVkIHNlcnZlciBjZXJ0aWZpY2F0ZXMgdW5kZXIgRFRMUzsgYWRkIGEKKyAgIG5ldyBmbGFnIGluIHRsc2Jhc2UgdG8gaW5kaWNhdGUgdmVyaWZpY2F0aW9uIGhhcyBvY2N1cnJlZAorCisyMDEwLTA1LTI2IDIxOjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIGNvbXBpbGVyIHdhcm5pbmcgc3F1YXNoaW5nCisKKzIwMTAtMDUtMjYgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworICAgYWRkIGNvbnN0IHF1YWxpZmllcnMgdG8gYSBmZXcgcGxhY2VzCisKKzIwMTAtMDUtMjYgMTk6NDYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBsaWJuZXRzbm1wbWlicywgbGlibmV0c25tcGhlbHBlcnMgYW5kCisgICBsaWJuZXRzbm1wYWdlbnQgZG8gbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4gY29uZmlndXJlZCB3aXRoCisgICAtLWVuYWJsZS1zaGFyZWQuCisKKzIwMTAtMDUtMjYgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46CisKKyAgIE5FV1M6IG1vdmVkIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsaWJuZXRzbm1waGVscGVycyB0bworICAgbGlibmV0c25tcGFnZW50LiBsaWJuZXRzbm1waGVscGVycyBpcyBub3cgYW4gZW1wdHkgbGlicmFyeS4KKworMjAxMC0wNS0yNiAxNzoyMCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbnVsbC5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvbnVsbC5jLCAgIAorICAgICAgYWdlbnQvb2xkX2FwaS5jOgorCisgICBSZXZlcnRlZCByMTg4MjkgaW4gb3JkZXIgdG8gbWluaW1pemUgZGlmZnMgd2l0aCBvbGRlciBicmFuY2hlcy4KKworMjAxMC0wNS0yNSAwNzoyMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIFRlbGwgbmV0LXNubXAtY2VydCB3aGVyZSBuZXQtc25tcC1jb25maWcgaXMgbG9jYXRlZAorCisyMDEwLTA1LTI1IDA3OjE0ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQ29ycmVjdCB0aGUgc2lnbmF0dXJlIG9mIG1haW4uIFVzZSAjaW5jbHVkZSBpbnN0ZWFkIG9mIHNvdXJjaW5nCisgICB0byBnZXQgdGhlIGNvZGUgdW5kZXIgdGVzdCBpbiBvcmRlciB0byBnZXQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzCisKKzIwMTAtMDUtMjUgMDc6MTEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgQWRkIGFyZ3VtZW50cyB0byBzcHJpbnRmIHN0YXRlbWVudHMgdG8gbWFrZSB0aGUgdGVzdCB3b3JrCisKKzIwMTAtMDUtMjUgMDc6MDcgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBhbmQgZGlzYWJsZWQgY29kZQorCisyMDEwLTA1LTI1IDA1OjIwICBtYWdmcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFNwbGl0IHNubXBJUEJhc2VEb21haW4gYW5kIG1vdmUgdGhlIElQdjQgcGFydHMKKyAgIHRvIElQdjRCYXNlIGFuZCB0aGUgc29ja2V0IGdlbmVyaWMgcGFydHMgdG8gU29ja2V0QmFzZS4KKworMjAxMC0wNS0yNCAyMDoyNCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nOyBmaW5pc2ggdGxzdG1QYXJhbXNUYWJsZSBsYXN0Q2hhbmdlZCBzY2FsYXIKKworMjAxMC0wNS0yNCAxOToyOCAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBBZGQgLS1leHRlcm5hbC1saWJzIGluIG9yZGVyIHRvIHN1cHBvcnQgYnVpbGRpbmcgdGhlIHRlc3RzIG9uCisgICBzb2xhcmlzCisKKzIwMTAtMDUtMjQgMTM6MzMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBhcmdoLi4gZml4IGZhbGxvdXQgZnJvbSBtYW51YWxseSAobWlzKWFwcGx5aW5nIHBhdGNoCisKKzIwMTAtMDUtMjQgMTI6NTkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBmaXJzdCBwYXNzIGF0IHRsc3RtUGFyYW1zVGFibGUKKworMjAxMC0wNS0yNCAxMjo1OSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHVwZGF0ZSBkZWZpbmVzIHRvIG1hdGNoIE1JQiBuYW1lcywgcGVyIGdyYW5kLXBvb2JhaAorCisyMDEwLTA1LTI0IDEyOjU4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmM6CisKKyAgIHVwZGF0ZSBPSUQgdG8gbWF0Y2ggdXBjb21pbmcgUkZDCisKKzIwMTAtMDUtMjQgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL251bGwuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L251bGwuYywgICAKKyAgICAgIGFnZW50L29sZF9hcGkuYzoKKworICAgQ0hBTkdFUzogbGlibmV0c25tcGFnZW50LCBsaWJuZXRzbm1waGVscGVyczogbW92ZWQgdGhlIGZ1bmN0aW9ucworICAgbmV0c25tcF9idWxrX3RvX25leHRfZml4X3JlcXVlc3RzKCksCisgICBuZXRzbm1wX2dldF9idWxrX3RvX25leHRfaGFuZGxlcigpLCBuZXRzbm1wX3JlZ2lzdGVyX251bGwoKSwKKyAgIG5ldHNubXBfcmVnaXN0ZXJfbnVsbF9jb250ZXh0KCkgYW5kIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpCisgICBmcm9tIGxpYm5ldHNubXBoZWxwZXJzIHRvIGxpYm5ldHNubXBhZ2VudC4KKyAgIE5vdGVzOgorICAgLSBUaGlzIGRvZXMgbm90IGFmZmVjdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgYXBwbGljYXRpb25zCisgICB0aGF0IGxpbmsgd2l0aCAkKG5ldC1zbm1wLWNvbmZpZyAtLWFnZW50LWxpYnMpIHNpbmNlIHRoaXMKKyAgIGludm9sdmVzIGxpbmtpbmcgd2l0aCBib3RoIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQuCisgICAtIEZ1bmN0aW9ucyBoYXZlIGJlZW4gbW92ZWQgYmV0d2VlbiBsaWJyYXJpZXMgYnkgbW92aW5nIGVudGlyZQorICAgc291cmNlIGZpbGVzLgorCisyMDEwLTA1LTI0IDEwOjEwICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzoKKworICAgVXNlIHByb3BlciBzdHJpbmcgc2l6ZXMgYW5kIG1ha2Ugc3VyZSBzdHJpbmdzIGFyZQorICAgemVyby10ZXJtaW5hdGVkLgorCisyMDEwLTA1LTI0IDA4OjAxICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgbmV0LXNubXAtY29uZmlnLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBsaWJuZXRzbm1wIGRvZXMgbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4KKyAgIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1zaGFyZWQuCisgICBDSEFOR0VTOiBDeWd3aW46IHBlcmwgbW9kdWxlcyBkbyBub3cgYnVpbGQgKC0td2l0aC1wZXJsLW1vZHVsZXMpLgorICAgTm90ZTogdGhlIFQwNjB0cmFwZHBlcmxfb2xkdWNkLCBUMDYxYWdlbnRwZXJsX29sZHVjZCBhbmQKKyAgIFQxMTVhZ2VudHhwZXJsX29sZHVjZCB0ZXN0cyBzdGlsbCBmYWlsLgorCisyMDEwLTA1LTIzIDIzOjA2ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIHVwZGF0ZSBmaWxlbmFtZXMvcGF0c2ggZm9yIHJlY2VudCBmaWxlIHJlbmFtZXM7IGZpeCB0eXBvcworCisyMDEwLTA1LTIzIDIyOjA4ICBtYWdmcgorCisgICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSB0aGUgc2FtZSBjb21waWxlciBjb21tYW5kIGFuZCBmbGFncyBmb3IKKyAgIGJ1aWxkaW5nIG9mIHRlc3RzIGFzIGZvciBidWlsZGluZyBvZiB0aGUgY29kZSwgdGh1cyBlbmFibGluZyB0ZXN0CisgICBvZiBlLmcuIDMyLWJpdCBjb2RlIGNvbXBpbGVkIG9uIGEgNjQtYml0IHBsYXRmb3JtLgorCisyMDEwLTA1LTIzIDIxOjQxICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHVwZGF0ZSBpbmNsdWRlL2NvbmZpZyBmaWxlL3BhdGhzIGZvciByZWNlbnQgcmVuYW1lcworCisyMDEwLTA1LTIzIDIxOjMxICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHJlbmFtZSBmaWxlcyBmb3IgTUlCIHJlbmFtZXMKKworMjAxMC0wNS0yMyAyMToyNSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZToKKworICAgcmVuYW1lIGRpcmVjdG9yaWVzIHRvIG1hdGNoIHJlbmFtZXMgaW4gTUlCCisKKzIwMTAtMDUtMjAgMDg6NDggIGJ2YXNzY2hlCisKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBTd2FwcGVkIGxpbmsgb3JkZXIgb2YgLWxuZXRzbm1waGVscGVycyAtbG5ldHNubXBtaWJzOiBuZXRzbm1wbWlicworICAgZGVwZW5kcyBvbiBuZXRzbm1waGVscGVycyBhbmQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisyMDEwLTA1LTIwIDA4OjQyICBidmFzc2NoZQorCisgICAqICBhcHBzL3NubXB0cmFwZF9sb2cuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE5IDE4OjI2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggc3Rhc2hpbmcKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBvdXRwdXQgZmlsZW5hbWVzIG9mIGZhaWxlZCB0ZXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICB3aXBlIHRyYWlsaW5nIGNvbW1lbnQgQyBtYXJrZXIgaWYgaXQgZXhpc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHRpdGxlIHRoZSBTTk1QdjMgdGVzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHRlc3Rpbmcgb2YgYnVpbHQgdGl0bGVzCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG9ubHkgcHJpbnQgZmFpbHVyZSBoZWFkZXIgaWYgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZQorCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkOgorCisgICBtYWtlIGRlc2NyaXB0aXZlIHRpdGxlcyB3b3JrIGFnYWluCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NsaWIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIHJlbmFtZSBmaWxlcyBzbyBwcmVmaXhpbmcgaXMgYmFzZWQgb24gdGhlIHN1aXRlIG5hbWUsIG5vdCBmaWxlCisgICB0eXBlCisKKzIwMTAtMDUtMTkgMTc6NTIgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL01ha2VmaWxlLlBMLCBwZXJsL01ha2VmaWxlLlBMLCBwZXJsL01ha2VmaWxlLnN1YnMucGwsICAgCisgICAgICBwZXJsL09JRC9NYWtlZmlsZS5QTCwgcGVybC9TTk1QL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogcGVybDogYnVpbGRpbmcgdGhlIFBlcmwgbW9kdWxlcyB3aXRoIHRoZSBDeWd3aW4KKyAgIFBlcmwgcGFja2FnZSBpcyBub3cgcG9zc2libGUuCisgICAoRm9yd2FyZC1wb3J0ZWQgcjE4Njg4IGZyb20gdGhlIFY1LjUgYnJhbmNoLikKKworMjAxMC0wNS0xOSAxNzo1MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmM6CisKKyAgIEZpeGVkIHlldCBhbm90aGVyIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDUtMTkgMTI6MDUgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgRmlyc3QtZHJhZnQgc3VwcG9ydCBmb3IgQUlYIGZpbGVzeXN0ZW0gSEFMIG1vZHVsZSAodW50ZXN0ZWQpCisKKzIwMTAtMDUtMTkgMTE6MjUgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOgorCisgICBTdXBwb3J0IGZvciBTb2xhcmlzLXN0eWxlICdnZXRtbnRlbnQnIEFQSS4KKworMjAxMC0wNS0xOSAwOTo1NyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oOgorCisgICBTaW1wbGlmeSB0aGUgaGFuZGxpbmcgb2YgdW5rbm93bi91bndhbnRlZCBmaWxlIHN5c3RlbXMuCisKKzIwMTAtMDUtMTkgMDk6MzAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgRml4IG1pc3NpbmcvYnJva2VuIEFQSSBkZWNsYXJhdGlvbnMuCisKKzIwMTAtMDUtMTkgMDg6NDYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBNYWRlIGVycm9yIG1lc3NhZ2VzIG1vcmUgY2xlYXIgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIHdyb25nCisgICBpbnZvY2F0aW9uLgorCisyMDEwLTA1LTE5IDAwOjAxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgdGVzdCBmb3IgdXNpbmcgYSBjZXJ0aWZpY2F0ZSBzaWduZWQgYnkgYSBDQSBjZXJ0aWZpY2F0ZQorCisyMDEwLTA1LTE4IDIzOjMxICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgbWFrZSBzdXJlIHdlIGNhbGwgdGhlIHJpZ2h0IFBlcmwKKworMjAxMC0wNS0xOCAyMDozOSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGluY2x1ZGUgbG9jYWwgcG9ydCBudW1iZXIgaW4gcGFja2V0IGR1bXBzLiBBbgorICAgZXhhbXBsZToKKyAgIAorICAgUmVjZWl2ZWQgMzYgYnl0ZSBwYWNrZXQgZnJvbSBVRFA6CisgICBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgMDAwMDogMzAgMjIgMDIgMDEgMDEgMDQgMDYgNzAgNzUgNjIgNkMgNjkgNjMgQTEgMTUgMDIKKyAgIDAiLi4uLi5wdWJsaWMuLi4KKyAgIDAwMTY6IDA0IDM3IEYyIEQ0IDlCIDAyIDAxIDAwIDAyIDAxIDAwIDMwIDA3IDMwIDA1IDA2CisgICAuNy4uLi4uLi4uLjAuMC4uCisgICAwMDMyOiAwMSAwMSAwNSAwMCAuLi4uCisgICAKKyAgIFJlY2VpdmVkIFNOTVAgcGFja2V0KHMpIGZyb20gVURQOgorICAgWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIEdFVE5FWFQgbWVzc2FnZQorICAgLS0gY2NpdHQuMQorICAgCisgICBTZW5kaW5nIDExOCBieXRlcyB0byBVRFA6IFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICAwMDAwOiAzMCA3NCAwMiAwMSAwMSAwNCAwNiA3MCA3NSA2MiA2QyA2OSA2MyBBMiA2NyAwMgorICAgMHQuLi4uLnB1YmxpYy5nLgorICAgMDAxNjogMDQgMzcgRjIgRDQgOUIgMDIgMDEgMDAgMDIgMDEgMDAgMzAgNTkgMzAgNTcgMDYKKyAgIC43Li4uLi4uLi4uMFkwVy4KKyAgIDAwMzI6IDA4IDJCIDA2IDAxIDAyIDAxIDAxIDAxIDAwIDA0IDRCIDRDIDY5IDZFIDc1IDc4CisgICAuKy4uLi4uLi4uS0xpbnV4CisgICAwMDQ4OiAyMCA2MSA3MyA3NSA3MyAyMCAzMiAyRSAzNiAyRSAzMyAzMyAyRSAzMiAyRCA3MyBhc3VzCisgICAyLjYuMzMuMi1zCisgICAwMDY0OiA2MyA3MyA3NCAyMCAyMyAzMSAyMCA1MyA0RCA1MCAyMCA1MCA1MiA0NSA0NSA0RCBjc3QgIzEgU01QCisgICBQUkVFTQorICAgMDA4MDogNTAgNTQgMjAgNTMgNjEgNzQgMjAgNDEgNzAgNzIgMjAgMzMgMjAgMzIgMzEgM0EgUFQgU2F0IEFwcgorICAgMyAyMToKKyAgIDAwOTY6IDMxIDMwIDNBIDM1IDM4IDIwIDQzIDQ1IDUzIDU0IDIwIDMyIDMwIDMxIDMwIDIwIDEwOjU4IENFU1QKKyAgIDIwMTAKKyAgIDAxMTI6IDc4IDM4IDM2IDVGIDM2IDM0IHg4Nl82NAorCisyMDEwLTA1LTE4IDE5OjQyICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRsc3RtQWRkclRhYmxlCisgICAtIGRlYWwgd2l0aCBoYXNoIHR5cGUgcHJvcGVybHkgZm9yIGdldC9zZXQgYW5kIHBlcnNpc3RlbmNlCisgICAtIGFkZCBjb3VudCBhbmQgbGFzdCBjaGFuZ2VkIHNjYWxhcnMKKworMjAxMC0wNS0xOCAxOTowOCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0byBvZmZpY2FsIE9JRCBmcm9tIHVwY29taW5nIHJmYworCisyMDEwLTA1LTE4IDE2OjE2ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0byBvZmZpY2lhbCBPSURzIGZyb20gdXBjb21pbmcgUkZDOyBhZGQgY291bnQvbGFzdCBjaGFuZ2VkCisgICBzY2FsYXJzCisKKzIwMTAtMDUtMTggMTQ6NTYgIGR0czEyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjAwMTY1NjogSGFuZGxlIG51bGwtdGVybWluYXRpb24gb2YKKyAgIHN0cmluZyB2YWx1ZXMgcHJvcGVybHkuCisgICBCYXNlZCBvbiB0aGUgcHJpbmNpcGxlcyBvZiB0aGUgcGF0Y2ggZnJvbSBUb21teSBCZWFkbGUuCisKKzIwMTAtMDUtMTggMTQ6MzggIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oLCBhZ2VudC9taWJncm91cC9ob3N0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgV29ya2luZyg/KSBIQUwtYmFzZWQgdmVyc2lvbiBvZiBockZTVGFibGUuCisKKzIwMTAtMDUtMTggMTQ6MTIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDUtMTcgMjE6MDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg6CisKKyAgIHVzZSBwcm9wZXIgVFNNIHNlY3VyaXR5IGNvZGUgKDQpIG5vdyB0aGF0IGl0J3Mgb2ZmaWNpYWwKKworMjAxMC0wNS0xNyAxODo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgYmVnaW5uaW5nIG9mIGEgY29udGFpbmVyIHVuaXQgdGVzdAorCisyMDEwLTA1LTE3IDE4OjQzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmg6CisKKyAgIGEgYmFzaWMgQy1jb2RlIGJhc2VkIHRlc3QgcmVwb3J0aW5nIG1lY2hhbmlzbQorCisyMDEwLTA1LTE3IDE4OjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgYmFzaWMgZGVmYXVsdF9zdG9yZSB0ZXN0cworCisyMDEwLTA1LTE3IDE4OjQyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2xpYjoKKworICAgYSBidWlsZCBzeXN0ZW0gZm9yIGJhc2ljIGxpYm5ldHNubXAgdGVzdHMKKworMjAxMC0wNS0xNyAxODoxNCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGZpeCBmaW5nZXJwcmludCBiaW4vaGV4IGNvbnZlcnNpb247IGFkZC9yZW1vdmUgY2VydCBzZWMgbWFwcyB2aWEKKyAgIG1pYiBub3cgd29ya3MKKworMjAxMC0wNS0xNyAxODoxMyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgbmV3IGZ1bmN0aW9uIG5ldHNubXBfYmluYXJ5X3RvX2hleAorCisyMDEwLTA1LTE3IDE4OjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZnByaW50ZihzdGRlcnIgLT4gREVCVUdNU0dUTCgoCisKKzIwMTAtMDUtMTcgMTg6MTIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgY2hlY2sgZm9yIGhhc2ggdHlwZQorCisyMDEwLTA1LTE3IDE2OjM0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIG1ha2UgUlVOVEVTVFMgd29yayBvdXRzaWRlIHRoZSBzb3VyY2VkaXIKKworMjAxMC0wNS0xNyAxNTozNyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBtYWRlIGEgbGltaXRlZCBydW4gdGVzdCBwb3NzaWJsZSBhZ2FpbiB3aXRob3V0IHBlcmwKKworMjAxMC0wNS0xNyAxNTozMiAgZHRzMTIKKworICAgKiAgd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oLCB3aW4zMi9taWJfbW9kdWxlX2luaXRzLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgVXNlIG5ld2VyIERpc01hbiBFdmVudCBNSUIgY29kZSBmb3IgTVNWQy1iYXNlZCBidWlsZHMKKyAgIChpbiBsaW5lIHdpdGggYWxsIGNvbmZpZ3VyZS1iYXNlZCBidWlsZHMpCisKKzIwMTAtMDUtMTcgMTU6MjMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgdGhlIHJldHVybiBvdXRzaWRlIHRoZSBpZiBzdGF0ZW1lbnQKKworMjAxMC0wNS0xNyAxNToxOCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgUHJvdmlkZSBtaXNzaW5nIHB1YmxpYyBpbnRlcmZhY2UgdG8gSEFMLWJhc2VkIGZpbGVzdG9yZSBtb2R1bGUuCisKKzIwMTAtMDUtMTcgMTA6NDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODc1NCAocmV2ZXJ0IHIxODczOCk6IHIxODc1NCBvbmx5IHBhcnRpYWxseQorICAgcmV2ZXJ0ZWQgcjE4NzM4CisgICBhbmQgaGVuY2UgYnJva2UgdGhlIFdpbjMyLWJ1aWxkLiBGaW5pc2hlZCByZXZlcnNhbCBvZiByMTg3MzggYnkKKyAgIHJlc3RvcmluZworICAgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oLgorCisyMDEwLTA1LTE2IDE4OjE3ICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgRm9sbG93LXVwIGZvciByMTg3MjY6IG9ubHkgcGFzcyAtZnN0YWNrLXByb3RlY3RvciogZmxhZ3MgdG8gdGhlCisgICBsaW5rZXIgaW5zdGVhZCBvZiBhbGwgLWYqIGZsYWdzIHN1Y2ggdGhhdCBpdCBiZWNvbWVzIGxlc3MgbGlrZWx5CisgICB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGNhdXNlcyB0cm91YmxlIHdpdGggbm9uLUdOVSB0b29sY2hhaW5zLgorCisyMDEwLTA1LTE2IDE4OjE0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2Q6CisKKyAgIE1hZGUgc2hlbGwgY29kZSBmb3IgY29udmVydGluZyBhIHJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUKKyAgIHBhdGggbW9yZQorICAgcm9idXN0IGFuZCBjb252ZXJ0ZWQgIiR7Li4uIy4uLn0iIGNvbnN0cnVjdCBpbnRvIGVjaG8gKyBjdXQuCisKKzIwMTAtMDUtMTYgMTg6MTIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBNb3JlIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFIHRvCisgICBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUgc3Vic3RpdHV0aW9ucywgbmVjZXNzYXJ5IHRvIG1ha2UKKyAgIHRlc3QgMDU5IGFuZCAwNjUgcGFzcy4KKworMjAxMC0wNS0xNiAxNzozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBmaXggdGVzdHMgZm9yIGNoZWNraW5nIHNodXRkb3duIG9mIGFwcGxpY2F0aW9ucyB0byBub3QgcmVwb3J0CisgICBmYWxzZSBuZWdhdGl2ZXMKKworMjAxMC0wNS0xNiAxMjoxNSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkOgorCisgICBNYWRlIHRlc3QgVDA1OSBwYXNzIGFnYWluLiBUaGlzIHRlc3Qgd2FzIHJlY2VudGx5IGJyb2tlbiBieQorICAgcGFzc2luZyBhcmd1bWVudHMgdG8gaXQgd2l0aCBhYnNvbHV0ZSBwYXRocyBpbnN0ZWFkIG9mIHJlbGF0aXZlCisgICBwYXRocy4KKworMjAxMC0wNS0xNiAxMjoxNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2Q6CisKKyAgIEFkZGVkICdTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFJy4KKworMjAxMC0wNS0xNiAxMTo0MiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTYgMTE6NDEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhcHBzL3NzaHRvc25tcC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGluIG9sZCBjb2RlLgorCisyMDEwLTA1LTE2IDA5OjU5ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBkb24ndCB0cmlnZ2VyIGEgbmV0c25tcF9hc3NlcnQoKSB3aGVuCisgICBubyBleHRlbnNpb24gRExMcyBoYXZlIGJlZW4gbG9hZGVkLgorCisyMDEwLTA1LTE1IDE3OjMxICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN0b3AtZ2FwIGZpeCB0byB1bmJyZWFrICJtYWtlIHRlc3QiIGZvciB0aGUgbmlnaHRseSBidWlsZHMKKworMjAxMC0wNS0xNSAxMDo1OSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBSZXZlcnRlZCByMTg3MjcgYmVjYXVzZSBpdCBjYXVzZWQgYnVpbGQgZXJyb3JzIG9uIFNvbGFyaXMsIEFJWAorICAgYW5kIEhQLVVYLgorCisyMDEwLTA1LTE1IDAwOjQyICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgd2luMzIvYnVpbGQucGw6CisKKyAgIHJldmVydCByMTg3Mzggc2luY2UgbmV3IHRyYW5zcG9ydCByZXF1aXJlIGR5bmFtaWNseSBidWlsdCBoZWFkZXIKKyAgIGZpbGVzCisKKzIwMTAtMDUtMTUgMDA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgbG9nIGVudiB2YXJpYWJsZXMgdXNlZCB0byB0aGUgaW52b2tlZCBmaWxlCisKKzIwMTAtMDUtMTQgMjE6MjkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBmaXggc2NyaXB0IHNvIGl0IGNhbiBiZSBpbnZva2VkIG91dHNpZGUgdGhlIHRlc3QgZW52aXJvbm1lbnQKKyAgIGFnYWluCisKKzIwMTAtMDUtMTQgMjE6MjggIGhhcmRha2VyCisKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0OgorCisgICBhZGRlZCB0aGUgU05NUC1UTFMtVE0tTUlCIHdpdGggZmluYWwgSUFOQSBhc3NpZ25tZW50IHNsb3RzCisKKzIwMTAtMDUtMTQgMjE6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHVzZSBmaW5hbCBJQU5BIGFzc2lnbmVkIFRTTSBwcmVmaXhlcworCisyMDEwLTA1LTE0IDIxOjI2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg6CisKKyAgIHVzZSBmaW5hbCBJQU5BIGFzc2lnbmVkIERvbWFpbiBudW1iZXJzCisKKzIwMTAtMDUtMTQgMjE6MjUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2V0IGRlZmF1bHQgdmVyc2lvbiBhbmQgc2VjbGV2ZWwgaWYgdGxzL2R0bHMKKworMjAxMC0wNS0xNCAxNToyNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoZWNrIHJjIGZyb20gc2VjbmFtZSBtYXBwaW5nOyBjbGFyaWZ5IGNvbW1lbnQKKworMjAxMC0wNS0xNCAxNToyMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG9uJ3QgdXNlIHVuc29ydGVkIGNvbnRhaW5lcjsgZG9uJ3QgZnJlZSBjYWxsZXIncyBjb250YWluZXIKKworMjAxMC0wNS0xNCAxNToyMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIGFkZCBsaW5lYXJfc2VhcmNoIGZvciB1bnNvcnRlZCBjb250YWluZXJzCisKKzIwMTAtMDUtMTQgMTE6NTYgIGJ2YXNzY2hlCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbCwgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBJbXByb3ZlZCBwb3J0YWJpbGl0eSBieSByZW1vdmluZyB0aGUgZ2VuZXJhdGVkIGZpbGUKKyAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oLgorICAgQ29tbWVudGVkIG91dCB0aGUgY29kZSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBmb3IgZ2VuZXJhdGluZworICAgdGhpcyBoZWFkZXIgZmlsZS4KKyAgIEFkZGVkIGNvbmZpZ3VyZS10aW1lIGNvZGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbnN0cnVjdG9ycworICAgZm9yIGFsbCBjb25maWd1cmVkCisgICB0cmFuc3BvcnRzIGFyZSBpbnZva2VkIGZyb20gc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLgorCisyMDEwLTA1LTE0IDExOjAwICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgRG9jdW1lbnRhdGlvbjogdXBkYXRlZCBDeWd3aW4gYnVpbGQgaW5zdHJ1Y3Rpb25zLgorCisyMDEwLTA1LTE0IDA5OjE1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgIAorICAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE0IDA4OjUwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIC1uby11bmRlZmluZWQgZmxhZyB0byBsaWJyYXJ5IGxpbmsgY29tbWFuZHMgc3VjaCB0aGF0CisgICBsaWJ0b29sIGNhbiBidWlsZCBETExzIG9uIFdpbjMyLgorICAgTm90ZTogYnVpbGRpbmcgRExMcyBvbiBXaW4zMiBkb2VzIG5vdCB5ZXQgd29yayBiZWNhdXNlIG9mIHRoZQorICAgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICBsaWJuZXRzbm1waGVscGVycyBhbmQgbGlibmV0c25tcGFnZW50CisgICAoc2VlIGFsc28KKyAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0xpYnJhcnlfbGF5ZXJpbmcpLgorCisyMDEwLTA1LTE0IDA4OjQyICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgbGlidG9vbCBidWcgZml4OiBhbHNvIHBhc3MgZmxhZ3Mgc3RhcnRpbmcgd2l0aCAtZiB0byB0aGUgbGlua2VyCisgICBzaW5jZSB0aGVzZSBjYW4gYWZmZWN0IGxpbmtpbmcuIFRoZSBmbGFnIC1mc3RhY2stcHJvdGVjdG9yIGUuZy4KKyAgIHRyaWdnZXJzIGluY2x1c2lvbiBvZiBsaWJzc3AuCisKKzIwMTAtMDUtMTQgMDg6NDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogYWJvcnQgaWYgdGhlIGZpbGUgcHJvZ3JhbSBjb3VsZCBub3QgYmUgZm91bmQsCisgICBzaW5jZSB0aGlzIGlzIGVzc2VudGlhbCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBsaWJ0b29sLgorICAgQ0hBTkdFUzogQ3lnd2luOiBuZWl0aGVyIGNvbXBpbGUgbm9yIGxpbmsgd2lucGlwZS5jLgorCisyMDEwLTA1LTEzIDA4OjU4ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmFuIGF1dG9yZWNvbmYuCisKKzIwMTAtMDUtMTIgMjA6MTYgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogTGludXg6IGJ1aWxkcyBhZ2FpbiB3aXRoIGVtYmVkZGVkIFBlcmwgZGlzYWJsZWQgKGJ1ZworICAgMjk4NTkxNSkuCisKKzIwMTAtMDUtMTIgMTk6NDcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgRm9sbG93LXVwIGZvciByMTg2ODQ6IHVuLWJyZWFrIHRoZSBXaW4zMiBNU1ZDIGJ1aWxkLgorCisyMDEwLTA1LTEyIDE5OjQzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgV2luMzI6IGZpeGVkIGEgdHlwbyBhbmQgbWFkZSBpbmRlbnRhdGlvbiBjb25zaXN0ZW50LgorCisyMDEwLTA1LTEyIDE5OjExICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjb25zdHJ1Y3QgdGVtcCBidWlsZCBmaWxlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeQorCisyMDEwLTA1LTEyIDE5OjEwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggcmVjZW50bHkgYnJva2VuIG9sZCBwZXJsIGZ1bmN0aW9uYWxpdHkKKworMjAxMC0wNS0xMiAxODowMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCBhIC0tc2hvcnQgb3B0aW9uIHRvIHNob3J0ZW4gdGhlIHNob3cgb3V0cHV0IHRvIG1pbmltYWxpc3RpYworCisyMDEwLTA1LTEyIDE0OjE0ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCLgorCisyMDEwLTA1LTEyIDEzOjAyICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgbWVtb3J5IGxlYWsgd2hlbiByZWFkaW5nIHNlbnNvcnMgZm9yCisgICBMTS1TRU5TT1JTLU1JQi4KKworMjAxMC0wNS0xMiAxMjo1NyAgZHRzMTIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBSZXZlcnQgcmV2aXNpb24gMTg2ODkKKyAgIExhdGVzdCBXaW4zMiBidWlsZHMgaW5jbHVkZSBzdXBwb3J0IGZvciBzdHJ0b3VsbC4KKworMjAxMC0wNS0xMiAxMjowNSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBhZGRlZCBkZXRlY3Rpb24gb2YgbG1fc2Vuc29ycyB2ZXJzaW9uLgorICAgSSBhbSBub3QgQXV0b2NvbmYgZ3VydSwgc28gSSBob3BlIEkgZ290IGl0IHJpZ2h0LiBUaGUgZ29hbCBpcyB0bworICAgZGVmaW5lIE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMgKmJlZm9yZSogY29uZmlnX21vZHVsZXNfYWdlbnQKKyAgIHByb2Nlc3NlcyBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmguCisKKzIwMTAtMDUtMTIgMDc6MDMgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuCisKKzIwMTAtMDUtMTIgMDM6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCB0aXRsZSBnZW5lcmF0aW9uIGFmdGVyIGNoYW5nZSB0byB3aGF0IHNyY2RpciBtZWFudAorCisyMDEwLTA1LTEyIDAyOjMwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHVuZG8gbGFzdCBjaGFuZ2Ugd2hpY2ggdHVybmVkIG91dCB0byBvbmx5IGNhdXNlIGVycm9ycyBpZiB5b3UgaGFkCisgICBhIG9sZCAuY29uZiBmaWxlIGFyb3VuZAorCisyMDEwLTA1LTEyIDAyOjEzICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCB2M19jYSBjcmVhdGlvbiBleHRlbnNpb24gbmFtZQorCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBrZWVwIGZvcm1hdCB2ZXJzaW9uICMgaW4gY2VydCBpbmRleGVzOyBkb24ndCBzdG9yZSBoYXNoIHR5cGUKKyAgIHN0cmluZyBpbiBpbmRleDsKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGludmVydGVkIGNvbnZlcnNpb24gY2FsbDsgbGVzcyB2ZXJib3NlIGRlZmF1bHQgZGVidWcKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgZml4IHBhcnNpbmcgb2YgLVQgbmFtZS92YWx1ZSBwYWlycworCisyMDEwLTA1LTExIDIzOjMzICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGJ1ZyBmaXhpbmcgYW5kIGJldHRlciBlcnJvciBtZXNzYWdlcyBmb3IgIm1ha2UgdGVzdCIgd2l0aAorICAgVGVzdDo6SGFybmVzcworICAgKHN0aWxsIGRvZXNuJ3Qgd29yayBmb3IgbWUsIHRob3VnaCkKKworMjAxMC0wNS0xMSAyMjozNCAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBEbyBOT1QgaGFyZGNvZGUgL3Vzci9iaW4vcGVybCBhcyB0aGUgUGVybCBwYXRoCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBzdGFzaCBmaWxlIGhhbmRsaW5nCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGxvbmcgb3B0aW9ucyBzdWNrIDstKS4gcHJlZmVyIGRvdWJsZSBkYXNoZXMgZm9yIGxvbmcgb3B0aW9ucyB0bworICAgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIE5ldC1TTk1QIGNvZGUgYmFzZQorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBhZGRlZCBhYmlsaXR5IHRvIHJ1biBvbmx5IHRoZSBmYWlsZWQgdGVzdHMgZnJvbSB0aGUgbGFzdCBydW4KKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZG9uJ3QgZm9yY2UgY29sb3IKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY2xlYW51cCBvZiBvbGRlcgorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBNaW5pbWFsbHkgc3VwcG9ydCB0aGUgb2xkZXIgVGVzdDo6SGFybmVzcyBwZXJsIG1vZHVsZSBmb3IgcnVubmluZworICAgdGhlIG9sZGVyIHRlc3RzIGF0IGxlYXN0CisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzZXQgYSBkZWZhdWx0IHNlY3VyaXR5TmFtZSBhbmQgc2VjdXJpdHlNb2RlbCBpZiBUTFMgb3IgRFRMUyBpcyBpbgorICAgdXNlIG9uIHRoZSBjbGllbnQgc2lkZQorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBhbGxvdyBzZWN1cml0eSBtb2RlbHMgdG8gcGVyZm9ybSBtb3JlIG9mIHRoZSBzZXNzaW9uIHNldHVwOyBtb3ZlZAorICAgbW9yZSBVU00gc3BlY2lmaWMgc2V0dXAgaW50byBpdCdzIHNldHVwIHJvdXRpbmUKKworMjAxMC0wNS0xMSAxODowMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBwYXJhbSB0byBsb29rdXAgcGVlciBjZXJ0CisKKzIwMTAtMDUtMTEgMTY6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWxsb3cgJy0nIGluIGZxZG47IGFkZCBkZWJ1ZyBvdXRwdXQgZm9yIGhvc3Qgc3BlY2lmaWMgY29uZmlnCisKKzIwMTAtMDUtMTEgMTU6NDYgIGR0czEyCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEVuc3VyZSAnbmV0c25tcF9yZWFkX21vZHVsZScgaXMgYXZhaWxhYmxlIGZvciBwZXJsIGJ1aWxkLgorCisyMDEwLTA1LTExIDE1OjQ0ICBkdHMxMgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIEZpeCBwZXJsIGJ1aWxkIHVuZGVyIFdpbmRvd3MgKHN0cnRvdWxsIG5vdCBhdmFpbGFibGUpCisKKzIwMTAtMDUtMTAgMDc6MDcgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbWlzc2luZyBzeW1ib2wgbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbiwKKyAgIG1ha2UgbmV0c25tcF9zbm1wU1NIRG9tYWluIGNvbnN0LgorCisyMDEwLTA1LTA5IDIyOjAzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZDoKKworICAgRG8gbm90IHJlcXVpcmUgcXVvdGVzIGFyb3VuZCB0aGUgQ1BVIHN0cmluZyBhcyB0aGF0IGRlcGVuZHMgb24KKyAgIGhvdyB0aGUgYWdlbnQgaXMgY29uZmlndXJlZC4KKworMjAxMC0wNS0wOSAyMTo0MyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBFeHRyYWN0IHRoZSBFeGl0IGFuZCByZXN0YXJ0KiBzdWJyb3V0aW5lcyBmcm9tCisgICB1dGlsX2Z1bmMgaW4gb3JkZXIgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBsZXNzIGNvZGUgZm9yIHRoZQorICAgbWluaW1hbCBjYXNlLgorCisyMDEwLTA1LTA5IDE2OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24KKyAgIGdldF9leGVjX291dHB1dCgpIHJldHVybnMgYSB2YWx1ZSB3aGVuIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCisgICBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRSBoYXMgbm90IGJlZW4gZGVmaW5lZC4KKworMjAxMC0wNS0wOSAxNjo0NSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBidWlsZHMgbm93IGFsc28gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZQorICAgbG9jYXRlZCBvbiBhIFNhbWJhIGZpbGVzeXN0ZW0gaW5zdGVhZCBvZiBhIGxvY2FsIGZpbGVzeXN0ZW0uCisKKzIwMTAtMDUtMDkgMTM6MDUgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgQ29ycmVjdCB0aGUgaWYgdGhhdCB0cmllcyB0byBmaWd1cmUgb3V0IGlmIGEgc3VmZmljaWVudGx5IG5ldyBnY2MKKyAgIGlzIGluIHVzZS4KKworMjAxMC0wNS0wOSAxMjo1MCAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDaGVjayBmb3IgdGhlIG5lZWRlZCBtb2R1bGUgYW5kIG5vdCBzb21lIG90aGVyIG9uZS4KKyAgIExvZyB0aGUgY29ycmVjdCBtaXNzaW5nIHN5bWJvbC4KKworMjAxMC0wNS0wOSAwOToyMSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiB1dGlsaXRpZXMvZXhlY3V0ZSBkbyBub3QgbmVlZCBhbnl0aGluZyBmcm9tCisgICB1dGlsX2Z1bmNzLCBzbyBzdG9wIGRlcGVuZGluZyBvbiBpdC4KKworMjAxMC0wNS0wOSAwOToxMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jOgorCisgICBORVdTOiBzbm1wZDogUmVtb3ZlZCB0aGUgdW51c2VkIGZ1bmN0aW9uIHh4X3Rva2VuaXplX2V4ZWNfY29tbWFuZAorICAgZnJvbSB1dGlsaXRpZXMvZXhlY3V0ZS4KKworMjAxMC0wNS0wOSAwOTowMSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVwbGFjZSB0aGUgZGVidWdnaW5nIGZ1bmN0aW9ucyB3aXRoIGR1bW1pZXMKKyAgIHdoZW4gZGVidWdnaW5nIGlzIGRpc2FibGVkLgorCisyMDEwLTA1LTA5IDA4OjAyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2Q6CisKKyAgIENoZWNrIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgZW5hYmxlZAorCisyMDEwLTA1LTA5IDA4OjAxICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICBGYWN0b3Igb3V0IGNoZWNrIGZvciBtaWJJSS9zeXN0ZW1fbWliCisKKzIwMTAtMDUtMDkgMDc6NTkgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluY2x1ZGVzCisKKzIwMTAtMDUtMDggMjM6MTYgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEFkZGl0aW9uYWxseSBmaXggbWFrZSB0ZXN0IGZvciB0aGUgdW5jb21tb24gY2FzZSB3aGVyZSBidWlsZGRpcgorICAgPT0gc3JjZGlyCisKKzIwMTAtMDUtMDggMjI6NTUgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSBmcm9tCisgICBhbnl3aGVyZS4KKyAgIENoYW5nZSB0aGUgLUQgb3B0aW9uIHRvIGV4cGVjdCB0aGUgcGF0aCBvZiB0aGUgdG9wIHNvdXJjZQorICAgZGlyZWN0b3J5LgorICAgQWRkIGFuIC1zcmNkaXIgb3B0aW9uIHRoYXQgaXMgYW4gYWxpYXMgZm9yIC1ELgorICAgQWRkIGFuIC1idWlsZGRpciBvcHRpb24gdG8gZGVzaWduYXRlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRlc3QKKyAgIG9iamVjdCBpcy4KKyAgIFB1dCBzcmNkaXIgYW5kIGJ1aWxkZGlyIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHRlc3Qgc2NyaXB0cworICAgRmFjdG9yIG91dCB0aGUgZ3JlcCBwYXJ0IG9mIFNLSVBJRiBhbmQgU0tJUElGTk9UIHRvIElTREVGSU5FRAorICAgVXNlIG1vcmUgcmVhZGFibGUga2V5cyBpbiB0aGUgb3B0cyBoYXNoIGluIFJVTkZVTExURVNUUworICAgQWRqdXN0IGV2ZXJ5dGhpbmcgdG8gdXNlIHNyY2RpciBhbmQgYnVpbGRkaXIKKworMjAxMC0wNS0wOCAyMjo0MiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jOgorCisgICBVc2UgY29ycmVjdCBhcmd1bWVudCB0eXBlcworCisyMDEwLTA1LTA4IDIyOjA3ICBtYWdmcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBDb25zb2xpZGF0ZSB0aGUgdGVzdCBhbmQgdGVzdC1taWJzIHRhcmdldHMuCisgICBFeHBvc2UgdGhlIHRlc3RhbGwgdGFyZ2V0IGluIHRoZSB0b3AgbWFrZWZpbGUuCisKKzIwMTAtMDUtMDggMjI6MDUgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBEbyBub3QgYWJvcnQgd2hlbiBzdHIgaXMgTlVMTCBhcyB0aGF0IGlzIGEgcGVyZmVjdGx5IHZhbGlkIGlucHV0LgorCisyMDEwLTA1LTA4IDIyOjAzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYzoKKworICAgVXNlIGNvcnJlY3QgYXJndW1lbnQgdHlwZXMKKworMjAxMC0wNS0wOCAyMjowMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIEFkZCBtaXNzaW5nIG5ld2xpbmUKKworMjAxMC0wNS0wNyAyMToxMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlOgorCisgICB1cGRhdGUgZm9yIG5ldyBjb25maWd1cmUuYWMKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBmaXggaGFuZGxpbmcgb2YgY2VydCBhbGdvcml0aG0gaW4gZmluZ2VycHJpbnRzOyBjb252ZXJ0IGluL291dAorICAgZmluZ2VycGludHMKKyAgIGZyb20vdG8gaGV4CisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBkb250IHNwZWNpZnkgaGFzaCB0eXBlIGZvciBmaW5nZXJwcmludAorCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgaGFuZGxlIGZpbmdlcnByaW50IHR5cGVzOyBkcm9wIHNhbiBmaWVsZHMgZnJvbSBjZXJ0IHN0cnVjdDsKKyAgIGNvbnNpZGVyIGRpcmVjdG9yeQorICAgd2hlbiBwYXJ0bmVyaW5nIGtleXMvY2VydHMKKworMjAxMC0wNS0wNyAxOToyMCAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLmFjOgorCisgICBtb3ZlIGRlZmF1bHQgcHJvbXB0cyBlYXJsaWVyCisKKzIwMTAtMDUtMDYgMTU6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGJldHRlciBTQU4gZXh0cmFjdGlvbjsgdHdlYWsgZHViZ3VzIG1lc3NhZ2VzOyBxdWlldCBjb21waWxlcgorICAgd2FybmluZ3MKKworMjAxMC0wNS0wNiAxNTozOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgcmVkdWNlIGNlcnQgZGVidWcgb3V0cHV0OyBkZWJ1ZyBpbnN0ZWFkIG9mIGxvZ19pbmZvIGluIGR1bXBzCisKKzIwMTAtMDUtMDYgMTQ6NDkgIGR0czEyCisKKyAgICogc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgRG9uJ3QgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiA8c3RyaW5nLmg+CisgICAoYnJpbmcgaW50byBsaW5lIHdpdGggYWxsIG90aGVyIG9jY3VyYW5jZXMpCisKKzIwMTAtMDUtMDYgMTQ6NDEgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIHNubXBsaWIvY2FsbGJhY2suYzoKKworICAgQ0hBTkdFUzogV2luZG93czogRml4IGJ1aWxkIHVuZGVyIE1pbkdXCisgICBiYWNrL2ZvcndhcmQgcG9ydCBvZiByZXZpc2lvbiAxODYzMQorCisyMDEwLTA1LTA1IDE3OjQzICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggdHlwZSBpbiBsb2cgbXNnCisKKzIwMTAtMDUtMDUgMTc6NDMgIHJzdG9yeQorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHJlbW92ZSBpbXBvcnQgZm9yIHVudXNlZCBmdW5jdGlvbgorCisyMDEwLTA1LTA0IDA3OjEyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIE5lZ2F0ZSByZWFzb24gZ2l2ZW4gZnJvbSBTS0lQSUYKKworMjAxMC0wNS0wMyAyMjozOCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGxlbiBpbiBlbWFpbCBjbXA7IG1vcmUgZXh0cmFjdCBkZWJ1Z2dpbmcKKworMjAxMC0wNS0wMyAyMjozOCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY29weSBvY2VydCB0byBhZGRpb25hbCBtYXBzCisKKzIwMTAtMDUtMDMgMTQ6MjAgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICByZW1vdmUgZGVwZW5kZW5jeSBvbiBwZXJsIG1vZHVsZSBub3QgcHJlc2VudCBpbiBDZW50T1MKKworMjAxMC0wNS0wMyAwMzo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZG9uJ3QgYWNjZXNzIHN0cnVjdCBpbnRlcm5hbHMgZGlyZWN0bHkKKworMjAxMC0wNS0wMyAwMzo0OCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBmaXggY29tcGlsaW5nIHdpdGgtb3V0LW1pYm1vZHVsZXM9dXRpbGl0aWVzL2V4ZWN1dGUKKworMjAxMC0wNS0wMSAxOTowOCAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2Q6CisKKyAgIENvcnJlY3QgdGhlIHNvdWdodCBzdHJpbmcgdG8gbWFrZSB0aGUgdGVzdCBwYXNzIHdoZW4gb2suCisKKzIwMTAtMDUtMDEgMTc6MTUgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtb3JlIGNvbnNpc3RlbnQgdHJlYXRtZW50IG9mIGtleVVzYWdlLCBiYXNpY0NvbnN0cmFpbnRzLCBvdGhlcgorICAgeDUwOXYzIG9wdGlvbnMKKworMjAxMC0wNC0zMCAyMzozNyAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbDoKKworICAgbGFtZSB0ZXN0IHNjcmlwdCBidXQgY292ZXJzIGEgY2h1bmsgb2YgdGhlIGNvZGUKKworMjAxMC0wNC0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWtpbnN0YWxsZGlycyBpbnN0ZWFkIGluc3RlYWQgb2YgRmlsZTo6UGF0aAorCisyMDEwLTA0LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgZW5zdXJlIG5ldC1zbm1wLWNvbmZpZyBzY3JpcHQgY2FuIGJlIHJ1biBmcm9tIHRoZSBidWlsZCBkaXIKKworMjAxMC0wNC0zMCAyMTozMSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhhbmRsZSBnZW5jZXJ0IC0tY2EKKworMjAxMC0wNC0zMCAyMTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGhlbHAgZm9yIGNlcnRTZWNOYW1lOyBjb250aW51ZSBidWlsZGluZyBjZXJ0IGluZGV4ZXMgZXZlbiBpZgorICAgd2UgY2FudCBzYXZlCisgICB0byBwZXJzaXN0ZW50IGRpcgorCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggY2hlY2sgY291bnQgZm9yIDgyMiBuYW1lcyBpbiB0aGUgc25tcGQubG9nCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYywgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCBtYWxsb2MgdW5uZGVybGVuZ3RoIGJ5IDEgZXJyb3IKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgY29tbWVudCBvdXQgdGhlIDgyMiB0ZXN0czsgdGhleSdyZSBicm9rZW4gYXQgdGhlIG1vbWVudAorCisyMDEwLTA0LTMwIDE5OjM2ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZG9uJ3QgbG9zZSBTQU4gd2hlbiBzaWduaW5nIHcvIENBCisKKzIwMTAtMDQtMzAgMTg6NDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFrZSBuYW1lIGNoYW5nZSB0byByZmM4MjIgZnJvbSB0eXBvZWQgODIyMAorCisyMDEwLTA0LTMwIDE4OjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgdGVzdHMgdG8gZG8gb3RoZXIgc3ViamVjdEFsdE5hbWUgbWFwcGluZworCisyMDEwLTA0LTMwIDE3OjMxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGlzc3VlcyAxLDIsNCBhbmQgLUMgaGFuZGxpbmcKKworMjAxMC0wNC0yOSAwMzozMiAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdGxzdG1DZXJ0VG9UU05UYWJsZSB0byB1c2UgY2FjaGUgKyBjZXJ0X3V0aWwgbWFwcworICAgY29udGFpbmVyCisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgY2hlY2sgaW5zZXJ0IHJldHVybgorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCByZW1vdmUgZnVuY3Rpb24gdG8gY29udGFpbmVyIGl0ZXJhdG9yOworICAgaW1wbGVtZW50IGl0IGZvcgorICAgYmluYXJ5X2FycmF5CisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBtYWtlIHN1cmUgY29udGFpbmVyIHN5bmMgaW5jcmVtZW50ZWQgb24gc29ydCwgaW5zZXJ0IGFuZCByZW1vdmUKKworMjAxMC0wNC0yOCAwNzoyMCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfbnRvcC5jOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIGNvbW1lbnQuCisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IG1ha2VmaWxlIGZvciB0ZXN0IHRhcmdldAorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcDoKKworICAgbWFrZSB0aGUgdGVzdCBzdWl0ZSBydW4gb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSBhZ2Fpbi4KKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGRlYWwgd2l0aCBvdXQtb2Ytc291cmNlIHRyZWUgYnVpbGRpbmcKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHRlc3RpbmcgdG8gY2hlY2sgY2VydGlmaWNhdGUgdG8gc2VjdXJpdHluYW1lIG1hcHBpbmdzIGFuZCBkZW5pYWxzCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBjcmVhdGVkIGEgbWFwcGVkIHVzZXIKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHA6CisKKyAgIGdlbmVyYXRlIG9iamVjdCBjb2RlIHdpdGggLWcgZGVidWdnaW5nCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jOgorCisgICBtb3JlIGFjY3VyYXRlIGN1cnJlbnQgQVBJIHVzYWdlIGZvciBzY2FwaSBjb2RlCisKKzIwMTAtMDQtMjcgMjE6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBjZXJ0IGluaXQgZHVwbGljYXRlIGNhbGwgY2hlY2sKKworMjAxMC0wNC0yNyAyMDo1OCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBjb252ZXJ0IHVzZXIgZmluZ2VycHJpbnQgdG8gbG93ZXIgYW5kIHN0cmlwIGNvbG9uczsgYWRkIGV4dGVybgorICAgcHJvdG90eXBlCisgICBmb3IgY2VydCBpbml0IHNvIHdlIGRvbid0IG5lZWQgaGVhZGVyCisKKzIwMTAtMDQtMjcgMjA6MTUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNlcGFyYXRlIGNlcnQgaW5pdCBhbmQgY2VydCBsb2FkaW5nOyBhZGQgY2VydFNlY05hbWUgY29uZmlnIHRva2VuCisKKzIwMTAtMDQtMjcgMDM6MTggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBtZXJnZSBORVRTTk1QX0ZVTkNUSU9OIGFuZCAhTkVUU05NUF9GVU5DVElPTiBhc3NlcnQgY2FzZXMKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBsb3RzIG9mIG5ldyBjZXJ0IGZ1bmN0aW9uYWxpdHkKKyAgIC0gYWRkIHNzbCBmdW5jcyBmb3IgY2VydCBleHRlbnNpb25zIGFuZCBzc2wgY2VydCBjaGFpbnMKKyAgIC0gZnVuY3Rpb25zIGFuZCBuZXcgbmV0c21wX2NlcnRfbWFwIHN0cnVjdCBmb3IgbG9va2luZyB1cCBjZXJ0CisgICBtYXBwaW5ncworICAgLSBhZGQgY2VydGlmaWNhdGUgbWFwcGluZyBmb3Igc2VjbmFtZQorICAgLSBhZGQgY29kZSB0byBidWlsZCBjZXJ0IGNoYWlucworICAgLSBhZGQgc3ViamVjdCB0byBjZXJ0IGluZGV4IGNhY2hlCisgICAtIHJlYnVpbGQgaW5kZXhlcyBpZiBhbnkgZXJyb3Igd2hpbGUgcGFyc2luZyBpbmRleAorICAgLSByZWZvcm1hdCBkdW1wIG91dHB1dAorICAgLSBhZGQgTlNfQ0VSVF9DQSBhbGxvd2VkX3VzZSBmbGFnCisgICAtIGFkZCBzdWJqZWN0LCBpc3N1ZXIgYW5kIGlzc3Vlcl9jZXJ0IHRvIG5ldHNubXBfY2VydAorICAgLSBtb3ZlIGNlcnQgY29udGFpbmVyIHNldHVwIHRvIGl0cyBvd24gZnVuY3Rpb24KKyAgIC0gYWRkIGNlcnQgc3ViamVjdCBuYW1lIHN1YmNvbnRhaW5lcgorCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jOgorCisgICBtb3ZlIGlwdjYgc3BlY2lmaWMgdmFyIGRlY2wgaW5zaWRlIGlmZGVmCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiB0ZGF0YSBoZWxwZXIgbm93IHNhdmVzIGZsYWdzIHBhc3NlZCBkdXJpbmcKKyAgIGNyZWF0aW9uOyBhZGQgdGRhdGEKKyAgIGZsYWcgdG8gTk9UIGNyZWF0ZSB0aGUgdGFibGUgY29udGFpbmVyCisKKzIwMTAtMDQtMjcgMDM6MDEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIKKyAgIENIQU5HRVM6IHNubXBsaWI6IGNvbnRhaW5lciBjaGFuZ2VzOiBhZGQgZmxhZ3MgZmllbGQgdG8gY29udGFpbmVyCisgICBtZXRhLWRhdGE7CisgICBjaGcgYmluYXJ5X2FycmF5IGNvbnRhaW5lciB0byB1c2UgY29udGFpbmVyIG1ldGEtZGF0YSBmbGFncworCisyMDEwLTA0LTI2IDIyOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCBhIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aAorICAgYSByZW1vdGUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgdGhlIGNvbm5lY3Rpb24gaXMgZGVuaWVkCisKKzIwMTAtMDQtMjYgMjI6MzIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICBhZGRlZCB0ZXN0cyBmb3IgLVQgZmxhZyB1c2FnZSBhbmQgaW52YWxpZCB1c2VyIHVzYWdlCisKKzIwMTAtMDQtMjYgMjA6NTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkOgorCisgICBoYXZlIHRoZSBhbGlhcyB0cmFuc3BvcnQgc291cmNlIHRoZSByaWdodCBTdjNjb25maWcgZmlsZQorCisyMDEwLTA0LTI2IDIwOjUwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIHdvcmtpbmcgc3VwcG9ydCBvZiBUTFMvRFRMUyB0ZXN0aW5nIGluY2x1ZGluZyBjZXJ0IGdlbmVyYXRpb24KKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBob25vciB0aGUgY29uZmlnIGRpciBpZiBzcGVjaWZpZWQgdmlhIC1DCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCByZWFsbG9jIGNhbGwgZm9yIGJ1ZmZlcmVkIHBhY2tldHMKKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBwcm9wZXIgc2tpcCBvdXRwdXQgZm9yIHJlcG9ydGluZyByZWFzb24KKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgYmFja3NsYXNoIGluIG1hY3JvCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLnByaXY6CisKKyAgIHRlc3RzIGZvciBtaW5pbWFsbHkgdGVzdGluZyBhbGwgdGhlIHRyYW5zcG9ydHMKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JFQURNRToKKworICAgbWluaW1hbGx5IGRvY3VtZW50IG5ldyBSVU5GVUxMVEVTVFMgc2NyaXB0CisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvVC5jLCB0ZXN0aW5nL1QyLnNoLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLW1kNSwgICAKKyAgICAgIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMSwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLWRlcywgICAKKyAgICAgIHRlc3RpbmcvZGF0YS5rdWwtbWQ1LCB0ZXN0aW5nL2RhdGEua3VsLXNoYTEsIHRlc3RpbmcvbWlzY3Rlc3QuYywgIAorICAgICAgIHRlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2gsIHRlc3RpbmcvdGVzdF9rdWwuc2g6CisKKyAgIGRlbGV0ZWQgb2xkIGZpbGVzIG5vdCB3b3J0aCByZXN0b3JpbmcKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2V2YWxfdGVzdGxpc3Q6CisKKyAgIHJlbW92ZSBvYnNvbHV0ZSB0ZXN0IGxpc3QKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmM6CisKKyAgIGEgaGFzaC10ZXN0aW5nIC5jIGZpbGUgSSBoYWQgbGF5aW5nIGFyb3VuZAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIG1ha2UgdGVzdGFsbCB0YXJnZXQKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvZXRpbWV0ZXN0LmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3Rpbmcva2V5bWFuYWdldGVzdC5jLCB0ZXN0aW5nL3NjYXBpdGVzdC5jOgorCisgICBtb3ZlIG9sZCBDLWNvZGUgdGVzdHMgaW4gcGxhY2UKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZDoKKworICAgc2tpcCBzb2xhcmlzIGNvbW1lbnRzCisKKzIwMTAtMDQtMjYgMjA6NDYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IGludm9jYXRpb24gb2YgUlVORlVMTFRFU1RTCisKKzIwMTAtMDQtMjYgMjA6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YyY2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdhZ2VudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlndHJhcGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdHJhbnNwb3J0LCB0ZXN0aW5nL3Rlc3RzL1N2MWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YyY2NvbmZpZywgdGVzdGluZy90ZXN0cy9TdjNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2FnZW50LCB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ3RyYXBkLCB0ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldCwgdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1LCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYsIHRlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsLCB0ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXgsIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcCwgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaywgdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwLCB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5jZXJ0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIucHJpdjoKKworICAgTkVXUzogdGVzdGluZzogQnJhbmQgbmV3IHRlc3Qgc3VpdGUgZGVzaWdlbmVkIHRvIGV2ZW50dWFsbHkgdGVzdAorICAgbW9yZSBmdW5jdGlvbmFsaXR5LCBwcm92aWRlIGZvciBzdXBwb3J0IG9mIHVuaXQtdGVzdHMgYW5kIHN1cHBvcnQKKyAgIG9mIEFQSSB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHJlbW92ZWQgYSBkZWJ1Z2dpbmcgZWNobworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIG1vcmUgYnVnIGZpeGVzIGZvciBzdHJpbmcgc2VhcmNoZXMKKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBhZGRlZCBhIG5ldyBtYWNybyB0byBjaGVjayBhIHRyYXBkIGNvdW50CisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgdXNlIGluZGl2aWR1YWwgb3V0cHV0IGZpbGVzIGFuZCBmaXggc29tZSB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIG1hZGUgZXhpc3RpbmcgdGVzdCBzdWl0ZSBwdXQgb3V0IFRBUCBvdXRwdXQKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoLCB0ZXN0aW5nL2V2YWxfb25lc2NyaXB0LnNoLCAgIAorICAgICAgdGVzdGluZy9ldmFsX3N1aXRlLnNoLCB0ZXN0aW5nL2V2YWxfdG9vbHMuc2gsIHRlc3RpbmcvZnVsbHRlc3RzLCAgCisgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgYmVnaW5uaW5nIG9mIG1vdmluZyBVQ0QgdGVzdCBzdWl0ZSBpbnRvIGEgbGFyZ2VyIHN1YmRpcmVjdG9yeQorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBhbGxvdyBydW5uaW5nIHRlc3RzIHRoYXQgbWF0Y2ggYSByZWdleHAKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VtbWFyaXplIHRlc3RzIHRoYXQgZmFpbGVkCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNyZWF0ZWQgdGhlIGFiaWxpdHkgdG8gaGF2ZSBydW5fIHNjcmlwdHMgZm9yIGV4ZWN1dGluZyBjZXJ0YWluCisgICB0eXBlcworCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtYWRlIHRoZSBidWlsZC1zY3JpcHQtY2hlY2sgcm91dGluZSBnZW5lcmljCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1cHBvcnQgZm9yIGJ1aWxkIHNjcmlwdHMKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgcHJvdmlkZSBpbmZyYXN0cnVjdHVyZSBmb3IgYnVpbGRpbmcgYW5kIHJlbmFtaW5nIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1vcmUgdGVzdCBpbmZyYXN0cnVjdHVyZSBzZXR1cAorCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdXBwb3J0IHRoZSBrZXl3b3JkICdhbGwnCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGVuYWJsZSBncm91cCBnYXRoZXJpbmcKKworMjAxMC0wNC0yNiAyMDozOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY3JlYXRpbm8gb2YgYSBuZXcgdGVzdGluZyBoYXJuZXNzCisKKzIwMTAtMDQtMjUgMTc6MzcgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBEb2N1bWVudGF0aW9uIHVwZGF0ZS4KKworMjAxMC0wNC0yNSAxNToyMSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzI6IHJldmVydGVkIGEgcmVjZW50IHVubmVjZXNzYXJ5IG1vZGlmaWNhdGlvbi4KKworMjAxMC0wNC0yNSAxNTowMCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhhbmRsZSBtdWx0aXBsZSAtLXNhbiBhcmdzLCBjaGVjayBlcnJvciBjb2RlcyBvbiBvcGVuc3NsIGNtZHMgYW5kCisgICBkaWUgb24gZmFpbHVyZQorCisyMDEwLTA0LTI1IDE0OjE4ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aCBTREsgc3VwcG9ydCBkaXNhYmxlZC4KKworMjAxMC0wNC0yNSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgCisgICAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyOiByZXN0b3JlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHdvcmtzcGFjZS1idWlsZCBhbmQgYmF0Y2gKKyAgIGJ1aWxkIC0tIG1hZGUgc3VyZSB0aGF0IG5vdGlmaWNhdGlvbl9sb2cuYyBpcyBvbmx5IGluY2x1ZGVkIGluCisgICB0aGUgbmV0c25tcG1pYnMgcHJvamVjdC4KKworMjAxMC0wNC0yNSAxMzo1OCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgIAorICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBXaW4zMjogZml4ZXMgZm9yIHJlY2VudGx5IGludHJvZHVjZWQgYnVpbGQgYnJlYWthZ2UuCisKKzIwMTAtMDQtMjUgMTM6NTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aCBTREsgc3VwcG9ydCBkaXNhYmxlZC4KKworMjAxMC0wNC0yNSAxMzo0OCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBzbm1wbGliL2Nsb3NlZGlyLmMsIHNubXBsaWIvb3BlbmRpci5jLCAgCisgICAgICAgc25tcGxpYi9yZWFkZGlyLmMsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgV2luMzIgTVNWQyA2IG5vbi1TREsgYnVpbGQgd29ya3MgYWdhaW4uCisKKzIwMTAtMDQtMjUgMTM6NDIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvQ29uZmlndXJlOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIHRyYW5zZm9ybWF0aW9uIHJ1bGUuCisKKzIwMTAtMDQtMjUgMTI6MDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1hZGUgaXQgYWdhaW4gcG9zc2libGUgdG8gZGlzYWJsZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyB3aGVuCisgICBidWlsZGluZyB2aWEgd2luMzIvYnVpbGQuYmF0LgorCisyMDEwLTA0LTIzIDEzOjE0ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgLS1zYW4gRE5TOmEuYi5jIGhhbmRsaW5nLCBoZWxwIHRleHQgZml4ZXMsIG90aGVyIGJ1ZyBmaXhlcy4KKyAgIE5vdGUgbXVsdGlwbGUgLS1zYW4gbm90IHN1cHBvcnRlZCB5ZXQKKworMjAxMC0wNC0yMSAyMjozMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbjoKKworICAgYnVpbGQgdGhlIC5tYWRlIHZlcnNpb24gb2YgbmV0LXNubXAtY2VydAorCisyMDEwLTA0LTIxIDIyOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgZmlsZXMgYXJvdW5kCisKKzIwMTAtMDQtMjEgMjA6MTYgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYnVpbGQgdHJ1c3QgY2hhaW4gZm9yIGNsaWVudCBjZXJ0OyBhZGQgc3ViamVjdCB0byBpbmRleCBjYWNoZTsKKyAgIHJlYnVpbGQgaW5kZXhlcworICAgaWYgYW55IGVycm9yIHdoaWxlIHBhcnNpbmcgaW5kZXg7IHJlZm9ybWF0IGR1bXAgb3V0cHV0CisgICAtIGFkZCBOU19DRVJUX0NBIGFsbG93ZWRfdXNlIGZsYWcKKyAgIC0gYWRkIHN1YmplY3QsIGlzc3VlciBhbmQgaXNzdWVyX2NlcnQgdG8gbmV0c25tcF9jZXJ0CisgICAtIG1vdmUgY2VydFRvVFNOX2VudHJ5IHRvIGNlcnRfdXRpbCBoZWFkZXIKKyAgIC0gbW92ZSBjb250YWluZXIgc2V0dXAgdG8gaXRzIG93biBmdW5jdGlvbgorICAgLSBhZGQgc3ViamVjdCBuYW1lIHN1YmNvbnRhaW5lcgorICAgLSBhZGQgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zLAorICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfaXNzdWVkX2J5CisKKzIwMTAtMDQtMjEgMTY6MTYgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBzaW5nbGUtZGFzaCAvIHNubXAuY29uZiAvIGRvdWJsZS1kYXNoIHByZWNpZGVuY2UKKworMjAxMC0wNC0yMSAxNjoxNSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCBpbiB0aGUgc25tcC5jb25mIGZpbGUgdGhhdCB0aGUgdG9rZW5zIGNhbiBiZSB1c2VkIGZvcgorICAgY29tbWFuZCBsaW5lIGFwcGxpY2F0aW9ucyB0b28KKworMjAxMC0wNC0yMSAxNjoxNSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCB0aGUgZmlsZSBsb2FkaW5nIG9yZGVyIGFuZCBob3cgdG8gdHVybiBvZmYgaG9zdC1zcGVjaWZpYworICAgY29uZmlnCisKKzIwMTAtMDQtMjEgMTU6NTIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBtYW4vc25tcC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE5FV1M6IGFwcHM6IEdlbmVyaWMgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHNubXAuY29uZiBmaWxlcworICAgYXJlIG5vdyByZWFkLiBTZWUgdGhlIEhPU1QtU1BFQ0lGSUMgRklMRVMgc2VjdGlvbiBvZiB0aGUKKyAgIHNubXAuY29uZiBtYW51YWwgcGFnZS4KKworMjAxMC0wNC0yMCAxMjo0NCAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9hc24xLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyOTcxMjcwOiByZWZ1c2UgdG8gcGFyc2UgQVNOLjEgdG9rZW5zCisgICB3aXRoIHdyb25nIHR5cGUgZmllbGQuCisgICBUaGlzIG1heSB5aWVsZCB0byBwcm9ibGVtcyB3aXRoIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB3aGljaAorICAgbWF5IGRlcGVuZCBvbiBwYXJzaW5nIHVnbHkgQVNOLjEgZGF0YSAtIHdlJ2xsIHNlZS4uLgorCisyMDEwLTA0LTIwIDAwOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb21iaW5lIHJlbW90ZSBmaW5nZXJwcmludCBjaGVja2luZyBhbmQgY2hlY2sgYm90aCBzaWRlcworCisyMDEwLTA0LTIwIDAwOjA1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgaWYgdGhlIHJlbW90ZSBmaW5nZXJwcmludCBpcyBzcGVjaWZpZWQsIHJlcXVpcmUgYW4gZXhhY3QgbWF0Y2gKKworMjAxMC0wNC0xOSAyMzo0NCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IHZhcmlvdXMgbWlub3IgYnVncywgZXNwZWNpYWxseSBpbiBvdXRwdXQgbWVzc2FnZXMKKworMjAxMC0wNC0xOSAyMToxNCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgcHJvdG90eXBpbmcgb2YgbmVlZGVkIFJGQyBzdGVwcworCisyMDEwLTA0LTE5IDIxOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNvbnZlcnQgaWYgZXJyb3IgY2hlY2sgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IHNvIG90aGVyIGNvZGUgY2FuIGJlCisgICBvdXRkZW50ZWQKKworMjAxMC0wNC0xOSAyMToxMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgY29tbWVudHMgZnJvbSB0aGUgUkZDIHRleHQKKworMjAxMC0wNC0xOCAxNToyNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvdHJhbnNwb3J0cywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAKKyAgICAgICAgd2luMzIvdHJhbnNwb3J0cywgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluLgorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjcmVhdGVkIGEgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgc2VjdXJpdHlOYW1lIGZyb20gdGhlIGNlcnQKKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBkb24ndCBuZWVkIHRvIHNldCB0aGUgYWNjZXB0IHN0YXRlIGZvciBUTFMgKGp1c3QgRFRMUykKKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgVExTIGNvbW1lbnQgZG9jdW1lbnRhdGlvbiBhbmQgc3RlcHMgdGFrZW4gZnJvbSB0aGUgUkZDCisKKzIwMTAtMDQtMTYgMTM6NTUgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBudW1lcm91cyBmaXhlcywgbW9yZSB2ZXJib3NlIGRlZmF1bHQgb3V0cHV0LCBhZGRpdGl2ZSBzaG93IGZsYWdzLAorICAgYXJiaXRyYXJ5IGNvbmZpZyBwYXJhbSBoYW5kbGluZywgYmV0dGVyIGhlbHAgdGV4dAorCisyMDEwLTA0LTE2IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBkb24ndCBkb3VibGUgZGVjbGFyZSBhIHN0cnVjdAorCisyMDEwLTA0LTE2IDAzOjMwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjZXJ0IHV0aWwgZml4ZXMKKyAgIC0gcmVtb3ZlIHVudXNlZCB2YXJzIGFuZCBkdXBsaWNhdGUgY29kZQorICAgLSBjaGVjayBwcnQgYmVmb3JlIGZyZWUKKyAgIC0gbmV3IGZ1bmMgZm9yIHR5cGUgZnJvbSBmaWxlbmFtZQorICAgLSBuZXcgZnVuY3Rpb25zIGZvciBmaW5kaW5nIHN1YnNldHMgZnJvbSBmaWxlbmFtZQorICAgLSBmaXggdHlwZXMgaW4ga2V5IHNlYXJjaCBmdW5jdGlvbiBidXQgdGhlbiBpZmRlZiBpZiAodW51c2VkCisgICBmdW5jdGlvbikKKworMjAxMC0wNC0xNSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgdXNlIGEgc3RydWN0dXJlIHJlZmVyZW5jZSB0byBwcmVkZWNsYXJlIHRoZSBzdHJ1Y3R1cmUKKworMjAxMC0wNC0xNSAyMToyNSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgY29ycmVjdCBkZWNsYXJhdGlvbiBvZiB0aGUgZl9vcGVuIGNvbW1hbmQgbm93IHJlcXVpcmluZyByZXR1cm5pbmcKKyAgIGEgdHJhbnNwb3J0CisKKzIwMTAtMDQtMTUgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bm5lZWRlZCBjb25maWcgY29udGFpbmVyCisKKzIwMTAtMDQtMTUgMjE6MDIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgZmluZ2VycHJpbnQgdHJhbnNwb3J0IGluZm9ybWF0aW9uIGludG8gbmV3IHRscyBzdHJ1Y3R1cmUKKyAgIHdpdGhpbiBEVExTVURQIHNvIHBlci10cmFuc3BvcnQgZmluZ2VycHJpbnRzIGNhbiBiZSBzcGVjaWZpZWQKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcHJvcGVybHkgY2hlY2sgZm9yIHRsc2Jhc2UgcG9pbnRlcnMgaW4gZHRsc3VkcF9zZW5kKCkKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgZ3JlcCB0aGUgdHJhbnNwb3J0IGxpc3QgZm9yIFRMUyBub3QganVzdCBEVExTIGZvciBjaGVja2luZyBmb3IKKyAgIC1sc3NsCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGJ1ZyBmaXhlcyBhbmQgbWFkZSBUTFNUQ1Agd29yayB3aXRoIHRoZSAtVCBmbGFnCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtYWtlIHRoZSBmX29wZW4gY2FsbCBhc3NpZ24gdGhlIG5ldyB0cmFuc3BvcnQgcG9pbnRlciB0byB1c2UgKGFuZAorICAgY2hlY2sgaWYgTlVMTCBhcyBhIGZhaWx1cmUgY29uZGl0aW9uCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJlZ2luIHdvcmsgbW92aW5nIERUTFMgY29uZmlnIHJvdXRpbmUgaW4gcGxhY2UKKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHBhc3MgdGhlIGVudGlyZSB0bHNiYXNlIHRvIHRoZSBjbGllbnRfc2V0dXAKKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIHNubXBsaWIvc25tcF9hcGkuYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzdGFydGluZyB0aGUgc3RvcmluZyBvZiBjb25maWcgZGF0YSBpbnRvIHRoZSB0bHNiYXNlCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoYW5nZSBjbGllbnQgc3NsIHNldHVwIHRvIGFsbG93IGZvciBkaXJlY3QgZmluZ2VycHJpbnQKKyAgIHNwZWNpZmljYXRpb24gb2YgbXkvdGhlaXIgY2VydHMKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc3BsaXQgVExTIGludG8gY3JlYXRpb24vY2xvc2UgZnVuY3Rpb25zIGZvciBldmVudHVhbCBjb25maWcKKyAgIHBhc3Npbmcgc3VwcG9ydAorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHBhc3MgdHJhbnNwb3J0IGNvbmZpZyBkYXRhIHRvIHRoZSB0cmFuc3BvcnQgZl9jb25maWcoKSBmdW5jdGlvbgorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmV0dXJuIE5VTEwgb24gdHJhbnNwb3J0IGNvbmZpZyBlcnJvcgorCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTkVXUzogYXBwczogLVQgY29tbWFuZCBsaW5lIGZsYWcgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlCisgICB0cmFuc3BvcnRzCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBjaGVjayB0cmFuc3BvcnQgTlVMTG5lc3MgYmVmb3JlIHVzaW5nCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYmVnaW5uaW5nIG9mIHdvcmsgdG8gbWFrZSB0cmFuc3BvcnRzIGNvbmZpZ3VyYWJsZSB3aXRoCisgICBzdXBwbGltZW50YWwgY29uZmlndXJhdGlvbiBkYXRhIGFuZCBuZXcgY2FsbHMgZm9yIGZfb3Blbi9mX2NvbmZpZworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZGVkIHRleHQgaW4gY29tbWVudHMgZnJvbSBmdXR1cmUgUkZDIHRvIGRvY3VtZW50IHRoZQorICAgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNC0xNSAxODo1MSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFyayBwZW0gdy9rZXkgYXMgaWRlbnRpdHk7IHR3ZWFrIHBhcnRuZXIgZGVidWc7IGNvbXBhcmUgZmlsZQorICAgY3RpbWUgYWdhaW5zdCBpbmRleCB0b28KKworMjAxMC0wNC0xNSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdXNlIGxvY2FsIHNwYWNlIHRvIHJlZm9ybWF0IGNlcnQgZm9yIHNlYXJjaAorCisyMDEwLTA0LTE1IDE2OjU1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CisKKyAgIFBhcnRpYWxseSByZXZlcnRlZCByMTg0OTY6CisgICAtIENvbW1lbnRlZCBvdXQgI2RlZmluZSBORVRTTk1QX1VTRV9ETEwgYWdhaW4gaW4gZmlsZQorICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggb24gdGhlIDUuNCBicmFuY2guIFRoaXMgY2hhbmdlCisgICBoYWQgYmVlbiBjb21taXR0ZWQgdW5pbnRlbnRpb25hbGx5LgorICAgLSBSZS1lbmFibGVkICNkZWZpbmUKKyAgIFVTSU5HX05PVElGSUNBVElPTl9MT0dfTUlCX05PVElGSUNBVElPTl9MT0dfTU9EVUxFIGluCisgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oIG9uIHRoZSB0cnVuayBhbmQgdGhlCisgICBWNS41IGJyYW5jaC4gV2hpbGUgYnVpbGQuYmF0IHJlcG9ydHMgYW4gZXJyb3Igb24gZWFybGllciBicmFuY2hlcworICAgd2l0aCB0aGlzIHN5bWJvbCBlbmFibGVkLCB0aGVyZSBpcyBubyBzdWNoIHByb2JsZW0gb24gdGhlIHRydW5rCisgICBvciBWNS41IGJyYW5jaGVzIGFuZCBoZW5jZSB0aGVyZSB3YXMgbm8gcmVhc29uIHRvIGRpc2FibGUgdGhpcworICAgcHJlcHJvY2Vzc29yIHN5bWJvbC4KKworMjAxMC0wNC0xNSAxNTowOCAgbWFyegorCisgICAqIGxvY2FsL01ha2VmaWxlLmluOgorCisgICBhZGQgbmV0LXNubXAtY2VydCB0byBtYWtlL2luc3RhbGwKKworMjAxMC0wNC0xNSAxMDo1MiAganNhZnJhbmVrCisKKyAgICogdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0OgorCisgICBUZXN0cyBub3Qgd29ya2luZyBmb3IgVENQIHNob3VsZCBiZSBza2lwcGVkIGFsc28gZm9yIFRDUDYuCisKKzIwMTAtMDQtMTQgMTg6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCB2YXJzL3RleHQgZnJvbSBjdXQtbi1wYXN0ZQorCisyMDEwLTA0LTE0IDE3OjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggY29tbWVudHMKKworMjAxMC0wNC0xNCAxNzo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbG90cyBvZiBjZXJ0IHVwZGF0ZXMKKyAgIC0gY2hhbmdlIGNlcnQgc3ViZGlyIHNlYXJjaGluZyB0byBtYXRjaCBuZXQtc25tcC1jZXJ0CisgICAtIHVwZGF0ZSBrZXkgdHlwZSBoYW5kbGluZworICAgLSBpZ25vcmUgd29ybGQgcmVhZGFibGUga2V5cworICAgLSBrZWVwIHR5cGUgaW4gaW5kZXhlcworICAgLSB0d2VhayBjZXJ0L2tleSBwcmludCBmb3JtYXQKKworMjAxMC0wNC0xNCAxNzo0NCAgcnN0b3J5CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbWFrZSBuZXQtc25tcC1jZXJ0IGV4ZWN1dGFibGUKKworMjAxMC0wNC0xNCAxMzoxMiAganNhZnJhbmVrCisKKyAgICogIHRlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbDoKKworICAgRml4ZWQgdGVzdHMgJ1Byb3h5IEdFVC9TRVQgc3VwcG9ydCcgYW5kICdTTk1QdjIgdmFjbSBkZW5pYWwKKyAgIHN1cHBvcnQnIHdpdGggdWRwNiB0cmFuc3BvcnQuCisKKzIwMTAtMDQtMTQgMDk6NDcgIGR0czEyCisKKyAgICogIHdpbjMyLCB3aW4zMi9iaW4sIHdpbjMyL2Rpc3QsIHdpbjMyL2Rpc3QvaHRtbGhlbHAsICAgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlciwgd2luMzIvZGlzdC9zY3JpcHRzLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLCAKKyAgICAgICAgd2luMzIvbGliLCB3aW4zMi9saWJhZ2VudCwgd2luMzIvbGliaGVscGVycywgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZCwgd2luMzIvbGlic25tcCwgd2luMzIvbGlic25tcF9kbGwsICAgCisgICAgICB3aW4zMi9saWJ1Y2RtaWJzLCB3aW4zMi9sb2NhbCwgd2luMzIvbmV0LXNubXAsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudCwgd2luMzIvbmV0LXNubXAvbGlicmFyeSwgd2luMzIvbmV0c25tcG1pYnMsICAKKyAgICAgICB3aW4zMi9zbm1wYnVsa2dldCwgd2luMzIvc25tcGJ1bGt3YWxrLCB3aW4zMi9zbm1wZCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YSwgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZ2V0LCB3aW4zMi9zbm1wZ2V0bmV4dCwgIAorICAgICAgIHdpbjMyL3NubXBuZXRzdGF0LCB3aW4zMi9zbm1wc2V0LCB3aW4zMi9zbm1wc3RhdHVzLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlLCB3aW4zMi9zbm1wdGVzdCwgd2luMzIvc25tcHRyYW5zbGF0ZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwLCB3aW4zMi9zbm1wdHJhcGQsIHdpbjMyL3NubXB1c20sIHdpbjMyL3NubXB2YWNtLCAgIAorICAgICAgd2luMzIvc25tcHdhbGs6CisKKyAgIERvbid0IHRyeSB0byBTVk4tbWFuYWdlIHRoZSBXaW5kb3dzIGJhdGNoIGJ1aWxkIGluZnJhc3RydWN0dXJlCisgICAoYWRkIHJlbGVhc2UsIGRlYnVnLCBNYWtlZmlsZSB0byB0aGUgcHJldmlvdXMgaWdub3JlIGxpc3QpCisKKzIwMTAtMDQtMTQgMDg6MTYgIGR0czEyCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEZpeCBXaW5kb3dzIGJhdGNoIGJ1aWxkIHVzaW5nIFZpc3VhbCBTdHVkaW8gd2l0aCBkeW5hbWljIGxpbmtpbmcuCisgICBVbnJlZmVyZW5jZWQgc3ltYm9sIGludHJvZHVjZWQgYnkgU1ZOIHJldmlzaW9uIDE4MzkzCisKKzIwMTAtMDQtMTQgMDg6MDggIGR0czEyCisKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IEZpeCBiYXRjaCBidWlsZCB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgVmlzdWFsCisgICBTdHVkaW8uCisgICBQYXJ0aWFsIGJhY2sgcG9ydCBvZiBTVk4gcmV2aXNpb25zIDE3NTczIGFuZCAxNzY5Ni4KKworMjAxMC0wNC0xNCAwMTo0NyAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBwZXJtcyBvbiBjcmVhdGVkIGZpbGVzIC1ydy0tLS0tLS0sIHVtYXNrKDA3NykKKworMjAxMC0wNC0xMyAyMjoxNSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQsIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKKworICAgZml4IHBlcm1zLCBhZGQgLS1jbi8tYywgYmV0dGVyIGRhdGVzIGRlZmF1bHRzLCBzbm1wLXRscyBvcmdfdW5pdCwKKyAgIGFkZGVkIGluaXRpYWwgZHVtbXkgY29uZmlnIGZpbGUKKworMjAxMC0wNC0xMyAxNDoyMSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeGVzIGZvciBzaG93IGNtZHMsIGNtZGxpbmUsIGhlbHAKKworMjAxMC0wNC0xMyAwMjoxNyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIHN1cHBvcnQgZm9yIGtleStjZXJ0IGluIC5wZW0gZmlsZXM7IG1pc2MgdHdlYWtzCisKKzIwMTAtMDQtMTAgMjM6MjQgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIGJ1aWxkIGZpeCBmb3IgQzg5IGNvbXBpbGVycyAoZS5nLiBvbiBIUC1VWCAxMC4yMCkKKworMjAxMC0wNC0xMCAyMjoyNSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgaW5pdGlhbCBjdXQgYXQgdGxzdG1DZXJ0VG9UU05UYWJsZQorCisyMDEwLTA0LTEwIDIyOjI0ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGFkZCBkZWZpbmUgb2YgbWF4IGhhc2ggY29uc3RhbnQKKworMjAxMC0wNC0xMCAyMjoyNCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmM6CisKKyAgIHVzZSBjZXJ0IHV0aWwgY2hlY2sgZm9yIGZpbmdlcnByaW50IGxlbi9hbGdvcml0aG0KKworMjAxMC0wNC0xMCAxMjo1OSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHNob3cgY21kIGZpeGVzCisKKzIwMTAtMDQtMDkgMjE6MzIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmYWlybHkgZnVuY3Rpb25hbCAobm9uLWludGVyYWN0aXZlKSAtIGJlIGl0IGtub3duOiB0aGVyZSBhcmUgYnVncworCisyMDEwLTA0LTA5IDIwOjU0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oOgorCisgICBtZXJnZSBzb21lIHRhYmxlX2RhdGEuY29uZiBjaGFuZ2VzOyByZW1vdmUgdW51c2VkIGNvZGUgYW5kIGEKKyAgIGJ1bmNoIG9mIHZlcmJvc2UgY29tbWVudHMKKworMjAxMC0wNC0wOCAxNDo1NyAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMtdXBkYXRlOgorCisgICB1c2UgZnVsbCBwYXRoCisKKzIwMTAtMDQtMDggMTA6NTUgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIENoZWNrIHJlc3VsdHMgb2YgY2FsbHMgdG8gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlIGFuZCBsb2cKKyAgIGFuIGVycm9yLgorICAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVsYXRlIHZhcmlvdXMgJ2M2NCAzMiBiaXQgY2hlY2sgZmFpbGVkJworICAgZXJyb3JzIHdpdGggc3BlY2lmaWMgY291bnRlci4KKworMjAxMC0wNC0wOCAwMTowOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oOgorCisgICBhZGQgcHJvdG90eXBlIGZvciBuZXcgZnVuY3Rpb24KKworMjAxMC0wNC0wOCAwMTowNSAgcnN0b3J5CisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogdHJhbnNsYXRlIE5PU1VDSCovRU5ET0ZNSUIgZXJyb3JzIGR1cmluZyBSRVNFUlZFMQorICAgdG8gTk9DUkVBVElPTgorCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIE5FV1M6IHNubXBkOiB0YWJsZV9kYXRhL3RkYXRhIG5leHQgaGFuZGxlciB3aWxsIG5vdCBiZSBjYWxsZWQKKyAgIGR1cmluZyBnZXQKKyAgIHByb2Nlc3NpbmcgaWYgbm8gdmFsaWQgcm93cyBhcmUgZm91bmQgZm9yIHRoZSBoYW5kbGVyCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgTkVXUzogc25tcGQ6IGFnZW50IHdpbGwgbm8gbG9uZ2VyIGNhbGwgdGFibGUgaGFuZGxlcnMgaWYgYSBzZXQKKyAgIHJlcXVlc3QgZm9yCisgICB0aGUgaGFuZGxlciBoYXMgaW52YWxpZCBpbmRleGVzCisgICBDSEFOR0VTOiBzbm1wZDogZG9uJ3QgY2FsbCBjbGVhbnVwIG9uIGZpcnN0IHJlcXVlc3Qgb24gYmFkCisgICBpbmRleGVzLiBpbnN0ZWFkLAorICAgc2V0IGFjdHVhbCBlcnJvciBsYXRlciwgYW5kIGZyZWUgcmVxdWVzdCBkYXRhIHNldHMgb24gZmlyc3QKKyAgIHJlcXVlc3QgZm9yIHNldHMKKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZnVuY3Rpb24gdG8gdmFsaWRhdGUgZmluZ2VycHJpbnQgdmFyYmluZAorCisyMDEwLTA0LTA3IDIyOjU2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBTb2xhcmlzIHRyIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgcmFuZ2VzIHJlbGlhYmx5IChzZWUgdGhlCisgICBhdXRvY29uZiBtYW51YWwpLCBjaGFuZ2UgdGhlIGV4cHJlc3Npb24gdG8gb25lIHRoYXQgaXMgc2ltcGxlCisgICBlbm91Z2ggdG8gYiBzdXBwb3J0ZWQuCisKKzIwMTAtMDQtMDcgMTQ6MDUgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBJbnNlcnQgdGhlIGNhY2hlIGhlbHBlciBjb3JyZWN0bHkuCisKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBmdW5jdGlvbnMgdG8gcmVtb3ZlIGxpc3Qvcm93IGRhdGEgZnJvbQorICAgcmVxdWVzdCBsaXN0CisKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgaWZkZWYgdmFyIGRlY2wgZm9yIHZhcnMgb25seSB1c2VkIGluIGxhdGVyIGlmZGVmIGJsb2NrCisKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgc25tcGxpYi9jaGVja192YXJiaW5kLmMsICAgCisgICAgICBzbm1wbGliL3NubXAtdGMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyBhbmQKKyAgIFN0b3JhZ2VUeXBlIHZhcmJpbmRzCisgICAtIGFsc28gcmVtb3ZlIHNvbWUgZHVwbGljYXRlIGNvZGUgYW5kIGZpeCBjb21tZW50cyBpbmRlbnQgbWFuZ2xlZAorCisyMDEwLTA0LTA3IDEwOjM5ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy11cGRhdGUsIG1hbi9taWIyYy11cGRhdGUuMS5kZWY6CisKKyAgIHVwZGF0ZSBtYW4gcGFnZTsgZml4IHNoZWxsIHJlZGlyZWN0OyBjcmVhdGUgZXhhbXBsZSByY2ZpbGUgaWYKKyAgIG1pc3NpbmcKKworMjAxMC0wNC0wNyAwNzoxNSAgbWFnZnIKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgVXNlIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyBpbnN0ZWFkIG9mIERJU0FCTEVfTUlCX0xPQURJTkcKKworMjAxMC0wNC0wNyAwMDozOCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogT25seSBlbmFibGUgaG9zdFN3SW5zdCBycG0gc3VwcG9ydCBvbiBsaW51eCBob3N0cworICAgd2l0aCBsaWJycG0uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYnVpbGQgb24gbm9uLXJwbSBsaW51eAorICAgZGlzdHJpYnV0aW9ucy4KKworMjAxMC0wNC0wNyAwMDoxNCAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiwgdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCwgdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogQ2hhbmdlIHRoZSB0ZXN0IHN1aXRlIHRvIHdvcmsgZXZlbiBpZiBtaWIKKyAgIGxvb2t1cCBpcyBkaXNhYmxlZC4KKworMjAxMC0wNC0wNyAwMDoxMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNjoKKworICAgQ2hlY2sgZm9yIGNvbTJzZWM2LCBub3QgY29tMnNlYy4KKworMjAxMC0wNC0wNiAyMjo1MSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgTW92ZSBkaXJlY3RvcnkgY3JlYXRpb24gYmVmb3JlIHRoZSBkaXJlY3RvcmllcyBhcmUgdXNlZC4KKworMjAxMC0wNC0wNiAxMTowMyAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFB5dGhvbiBpcyBhcHBhcmVudGx5IGNsaWVudC1zaWRlIG9ubHkuCisKKzIwMTAtMDQtMDYgMTA6MDYgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgU2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIGJlZm9yZSBjaGFuZ2luZyBVSUQKKyAgICh3aGljaCBwcm9iYWJseSBpbnZvbHZlcyBnaXZpbmcgdXAgcHJpdmlsZWdlcykKKworMjAxMC0wNC0wNiAwODo1NyAgZHRzMTIKKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIERvY3VtZW50IGxhcmdlLWRpc2sgc3RhdGlzdGljcyBhcyBsYXRjaGluZyBhdCAyVGIgKHJhdGhlciB0aGFuCisgICB3cmFwcGluZykuCisKKzIwMTAtMDQtMDYgMDE6NTIgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLCBtYW4vbWliMmMuMS5kZWY6CisKKyAgIE5FV1M6IG1pYjJjOiBtaWIyYyBjYW4gbm93IG9wdGlvbmFsbHkgcnVuIHNlZCBvbiBnZW5lcmF0ZWQgY29kZQorCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29udmVydCBDKysgY29tbWVudHMgdG8gQyBjb21tZW50cworCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbW92ZSBwdHIgY2hlY2sgYmVmb3JlIHBydCB1c2UKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGZpbGVuYW1lIHRvIGRlYnVnIG9uIG5ldyBjZXJ0czsgbWFrZSBzdGF0aWMgZnVuYyB0byByZXR1cm4KKyAgIG1vZGUgbmFtZXMKKworMjAxMC0wNC0wNiAwMDo0NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWxsb3cgYSBmb3VuZCBmaW5nZXJwcmludCBzZWxmLXNpZ25lZCBjZXJ0IGZvciBub3c7IGV2ZW50dWFsbHkKKyAgIG5lZWQgdG8gcmVzcGVjdCB0aGUgTUlCIGNvbmZpZyB0YWJsZQorCisyMDEwLTA0LTA2IDAwOjEyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBta2RpciBzbm1wbGliL3RyYW5zcG9ydHMgd2hlbiBETkUgZm9yIGJ1aWxkaW5nIG91dHNpZGUgdGhlIHNvdXJjZQorICAgZGlyCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bnVzZWQgdmFycworCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBlcnJvciBjb2RlIGNsZWFudXAgZm9yIHRsc2Jhc2Vfd3JhcHVwX3JlY3YKKworMjAxMC0wNC0wNSAyMzoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3JlIGJldHRlciBlcnJvci9kZWJ1ZyBjb2RlcworCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGNvbW1lbnRzIGZyb20gdGhlIGZ1dHVyZS1SRkMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uOyB1c2UKKyAgIGZsYWdzIGZvciBzZXJ2ZXIvY2xpZW50IHNwZWNpZmljYXRpb24gZm9yIGV4cGFuc2lvbgorCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGJldHRlciBlcnJvciBtZXNzYWdlcyBmb3IgdXNhZ2UgY29uc3RyYWludHMKKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3ZlIGZ1bmN0aW9uIHByb3RlY3Rpb24gbG9naWMgaW4gYSB0b3AtbGV2ZWwgY2hlY2sKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZml4IGluaXQgb3JkZXJpbmcKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG12IHRsc2Jhc2UgaW5pdCBmdW5jdGlvbiB0byBhIHByb3BlciBjdG9yIGZvciBhdXRvLWNhbGxpbmcKKworMjAxMC0wNC0wMiAxNjozNiAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBnZW5lcmF0ZSB0aGUgdHJhbnNwb3J0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGxpc3QKKyAgIGR5bmFtaWNhbGx5IGFuZCB1c2UgaXQKKworMjAxMC0wNC0wMiAxNjozNSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdHJhbnNwb3J0cywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IG1vdmVkIHRyYW5zcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4KKyAgIHNubXBsaWIKKworMjAxMC0wNC0wMiAwOTowMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYzoKKworICAgRG8gbm90IGF0dGVtcHQgdG8gY2hlY2sgc2l6ZW9mIHZvaWQgdG8gb2J0YWluIHRoZSBhbW91bnQgb2YKKyAgIG1lbW9yeSB0byBjb3B5LgorCisyMDEwLTA0LTAxIDE3OjExICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGluc3RlYWQgb2YgZndkIGRlY2xhcmVzLCByZXF1aXJlIG90aGVyIGhlYWRlcgorCisyMDEwLTA0LTAxIDE3OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmcKKworMjAxMC0wNC0wMSAxNzoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgb3V0ZGF0ZWQgZGVidWcgbXNnCisKKzIwMTAtMDQtMDEgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdXNlIGNlcnRhcGkgdG8gZmluZCBjZXJ0cy9rZXlzCisKKzIwMTAtMDQtMDEgMTQ6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVnaXN0ZXIgZXh0cmFYNTA5U3ViRGlyIHRva2VuCisKKzIwMTAtMDQtMDEgMTQ6MTggIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgY2hlY2sgcHRyIGJlZm9yZSB1c2UKKworMjAxMC0wNC0wMSAxNDoxOCAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBjaGVjayBwdHIgYmVmb3JlIHVzZQorCisyMDEwLTA0LTAxIDEzOjEzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgYWRkIHBlcnNpc3RlbnQgc3RvcmFnZTsgdG9rZW4gZm9yIGNyZWF0aW5nIGVudHJpZXMgaW4gc25tcGQuY29uZjsKKyAgIGZpeCBpbmRleAorCisyMDEwLTA0LTAxIDEzOjEyICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBjZXJ0aWZpY2F0ZSBhcGkgdG8gc3VwcG9ydCB0bHMvZHRscworCisyMDEwLTA0LTAxIDEzOjEyICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIENIQU5HRVM6IGFkZCBmdW5jdGlvbnMgdG8gZ2V0IGZpbmdlcnByaW50IGZyb20gY2VydCBhbmQgbG9nCisgICBvcGVuc3NsIGVycnMKKworMjAxMC0wNC0wMSAxMjo0NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgZml4IHR5cG8KKworMjAxMC0wNC0wMSAxMDozMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIHByZS1DOTAgY29tcGlsZXJzLgorCisyMDEwLTA0LTAxIDEwOjAxICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIENIQU5HRVM6IG1pYjJjOiB0YWJsZV9kYXRhIHRlbXBsYXRlIGVuaGFuY2VtZW50cworICAgLSBhZGQgZXJyb3IgY2hlY2tzIGR1cmluZyB0YWJsZSBpbml0CisgICAtIGNyZWF0ZSBjYWNoZSBlYXJsaWVyIHNvIHdlIGNhbiBiYWlsIG9uIGZhaWx1cmUKKyAgIC0gYWRkIG9wdGlvbiB0byBjcmVhdGUvZGVsZXRlIHJvdyB3L291dCBhZGRpbmcvcmVtb3ZpbmcgZnJvbQorICAgY29udGFpbmVyCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaDoKKworICAgYWRkIGhlbHBmdWwgcGFyYW0gbmFtZXMgYXMgaGludHMgaW4gcHJvdG90eXBlCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgc2VhcmNoIGZvciBjb250YWluZXIgc3BlY2lmaWMgY29udGFpbmVyIGJlZm9yZSBnZW5lcmljCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCBzbm1wbGliL2Rpcl91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9maWxlX3V0aWxzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGVuaGFuY2UgZmlsZSB1dGlscyBhbmQgZGlyIHV0aWxzCisgICAtIGFkZCBvcHRpb25hbCBzdGF0cyBzdHJ1Y3QgdG8gbmV0c25tcF9maWxlCisgICAtIGdlbmVyYWxpemUgZGlyIGNvbnRhaW5lciBmaWx0ZXIsIGFkZCBjb250ZXh0IHRvIGNhbGxiYWNrCisgICAtIGFkZCBvcHRpb24gdG8gc3RvcmUgbmV0c25tcF9maWxlcyAody9zdGF0cykgaW4gY29udGFpbmVyCisgICBpbnN0ZWFkIG9mIGp1c3QgbmFtZQorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIGFkZCBwcm90b3R5cGUgdG8gaGVhZGVyOyBjaGVjayBwdHIgYmVmb3JlIGRlcmVmZXJlbmNpbmcKKworMjAxMC0wMy0zMSAxNTozNCAganNhZnJhbmVrCisKKyAgICogIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9zbm1wLWJyaWRnZS1taWIsIG1hbi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1hbi9zbm1wLWJyaWRnZS1taWIuMSwgbWlicy9CUklER0UtTUlCLnR4dCwgbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1pYnMvTWFrZWZpbGUubWliOgorCisgICBORVdTOiBtaXNjOiBQQVRDSDogMjk1MjcwODogZnJvbSBKZW5zIE9zdGVya2FtcDogQWRkZWQgUGVybAorICAgaW1wbGVtZW50YXRpb24gb2YgQlJJREdFLU1JQgorCisyMDEwLTAzLTMxIDAyOjEyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcHJvcGVyIHBhY2tldCBsYWJlbGluZyBmb3IgRFRMU1VEUAorCisyMDEwLTAzLTMxIDAyOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1c2UgY29tbW9uIGNvbnRleHQgY3JlYXRpb24gY29kZQorCisyMDEwLTAzLTMwIDIzOjI0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGFuZ2UgVExTIG1ldGhvZCB0byBUTFN2MSBmcm9tIFNTTHYyMworCisyMDEwLTAzLTMwIDIzOjIzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vdmUgbW9yZSBjb21tb24gZGF0YSBhbmQgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBUTFMgYmFzZQorCisyMDEwLTAzLTMwIDIzOjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtaW5vciBUTFMgY29kZSBjbGVhbnVwCisKKzIwMTAtMDMtMzAgMjA6MjggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZXdvcmsgaWYoKSB3cmFwcGluZyBmb3IgbGVzcyBjb25mdXNpb24gaW4gZXJyb3IgaGFuZGxpbmcKKworMjAxMC0wMy0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvZGUgY29uc29saWRhdGlvbiBpbiBzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3RpbworCisyMDEwLTAzLTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVuYW1lIGdlbmVyaWMgJ2JpbycgcG9pbnRlciB0byAncmVhZF9iaW8nIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKKworMjAxMC0wMy0zMCAyMDoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1vdmUgYnVmZmVyZWQgZGF0YSBjcmVhdGlvbiB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciByZXVzZQorCisyMDEwLTAzLTMwIDE3OjUyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaW5pdGlhbCBjZXJ0IGdlbiB3cmFwcGVyIHNjcmlwdCAtIG5vdCB3b3JraW5nCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjbGVhbiB1cCBlcnJvciBvdXRwdXQgc28gaXQgZG9lc24ndCByZXBvcnQgd2FudF9yZWFkIGFuZAorICAgd2FudF93cml0ZSBlcnJvcnMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbmFtaW5nIG9mIHNlbmRpbmcgZnVuY3Rpb24gZm9yIGNsYXJpdHkgYW5kIGNoZWNrIG9uZSBtb3JlCisgICBsb2NhdGlvbiBmb3IgbmVlZGVkIG91dGdvaW5nIHBhY2tldHMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGFkZGVkIGR0bHN1ZHAgdHJhY2luZyB0b2tlbnMKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBDSEFOR0VTOiBhZGRlZCBhIG5ldyBERUJVR1RSQUNFVE9LKCkgbWFjcm8KKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJldHRlciBjb21tZW50cyBhbmQgbW9yZSB3b3JrIG9uIHNlbmRpbmcgYnVmZmVyZWQgZGF0YSBpbiB0aGUKKyAgIHJpZ2h0IHNwb3RzCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBhcmd1bWVudHMgdG8gZ2V0X2NvbW1vbk5hbWUKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJlZ2lubmluZyBvZiBjYWNoaW5nIG9mIHBhY2tldHMgYmVmb3JlIHRoZXkgY2FuIGJlIHNlbnQgdmlhIERUTFMKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGhhbmRsZSBTU0xfV0FOVF9SRUFEL1dSSVRFIGJldHRlcjsgc3RpbGwgbmVlZCB0byBidWZmZXIgb3V0Z29pbmcKKyAgIHdyaXRlIGRhdGEKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1pbm9yIGNoYW5nZSB0byBvdXRwdXQgZXJyb3IgcHJpbnRpbmcKKworMjAxMC0wMy0yOSAxNToyMCAgZHRzMTIKKworICAgKiBzbm1wbGliL3ZhY20uYzoKKworICAgTkVXUzogc25tcGQ6IEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMuCisgICAoVXNlIHRoZSAiYmVzdCIgbWF0Y2gsIHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUpLgorICAgUmVwb3J0ZWQgYnkgQWRhbSBMZXdpcy4KKyAgIE5vdGUgdGhhdCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mCisgICBleGlzdGluZyBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9ucy4KKworMjAxMC0wMy0yOSAxNToxNiAgYnZhc3NjaGUKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOgorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyOjpnZXRWYWx1ZSgpOiBkb24ndCByZXR1cm4KKyAgIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvbiB0aGUgc3RhY2suIEhvdyBjYW4gdGhpcyBoYXZlIHdvcmtlZAorICAgcmVsaWFibHkgPz8KKyAgIENIQU5HRVM6IHBlcmw6CisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OnNldFZhbHVlKCksCisgICBBU05fQ09VTlRFUjY0OiBmaXhlZCBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byBmYWlsCisgICBldmVuIHdoZW4gYSB2YWxpZCBudW1iZXIgd2FzIHByb3ZpZGVkLgorCisyMDEwLTAzLTI5IDE1OjE1ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBGaXggYWdlbnQgY3Jhc2ggd2hlbiBzZW5kaW5nIGVuY3J5cHRlZCBTTk1QdjMKKyAgIHRyYXBzLgorICAgUmVwb3J0ZWQgYnkgU3Jpa2FwaWxhbiBHYW5kaGkKKworMjAxMC0wMy0yOSAxMjo0NiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBDYXRjaCBzdGRlcnIgb24gV2luZG93cyB0b28uCisKKzIwMTAtMDMtMjkgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQnVpbGRzIGFnYWluIHdpdGggcHJlLUM5MCBjb21waWxlcnMuCisKKzIwMTAtMDMtMjkgMTE6MTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBwZXJsL09JRC9PSUQueHMsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZGVzdHJveWluZyBhCisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBmYWlsdXJlIG9mCisgICBjcmVhdGluZyBhIE5ldFNOTVA6Ok9JRCBvYmplY3QuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSB0aGUKKyAgIE5ldFNOTVA6Ok9JRDo6Z2V0dGFibGUoKSBzdWJyb3V0aW5lLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgdHJpZ2dlcmVkIGJ5CisgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgTmV0U05NUDo6U05NUC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGEgUERVIHByb2Nlc3NpbmcKKyAgIGVycm9yIGluIE5ldFNOTVA6OlNOTVAuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBtZW1vcnkgbGVha3MgdHJpZ2dlcmVkIGJ5IGNyZWF0aW5nIGFuIFNOTVB2MworICAgc2Vzc2lvbiB2aWEgTmV0U05NUDo6U05NUC4KKyAgIAorICAgQWxzbyBmaXhlZCB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3NlcyB0cmlnZ2VyZWQgYnkKKyAgIGFkZGluZyBhIHZhcmJpbmQgdG8gYSBQRFUgdmlhIE5ldFNOTVA6OlNOTVAgaW50cm9kdWNlZCBhIGZldyBkYXlzCisgICBhZ28uCisgICAKKyAgIFRoZSBidWdzIG1lbnRpb25lZCBhYm92ZSBoYXZlIGJlZW4gZm91bmQgYnkgaW5zcGVjdGluZyB0aGUgb3V0cHV0CisgICBvZiB0aGUgZm9sbG93aW5nIHNoZWxsIGNvbW1hbmQ6CisgICBjZCBwZXJsICYmIHZhbGdyaW5kIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tbGVhay1jaGVjaz1mdWxsIG1ha2UKKyAgIHRlc3QKKworMjAxMC0wMy0yOSAxMDo1OSAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBTd2l0Y2hlZCBiYWNrIHRvIHRoZSBwcmV2aW91cyB3YXkgb2Ygc3RhcnRpbmcgcHJvY2Vzc2VzCisgICBhc3luY2hyb25vdXNseSBiZWNhdXNlIGl0IGlzIG1vcmUgcmVsaWFibGUuCisKKzIwMTAtMDMtMjkgMDk6MjcgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgRG8gbm90IG9ubHkgc2F2ZSBzbm1wZCAvIHNubXB0cmFwZCBsb2dzIGJ1dCBhbHNvIHRoZSBzdGRvdXQgLworICAgc3RkZXJyIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlc2UgcHJvY2Vzc2VzLgorCisyMDEwLTAzLTI4IDE2OjA5ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIENoYW5nZXMgaW4gcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKyAgIC0gQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiAtZCBmb3Igc25tcGQgYW5kIHNubXB0cmFwZC4KKyAgIC0gc25tcGQgYW5kIHNubXB0cmFwZCBvdXRwdXQgaXMgbm93IHNhdmVkIHRvIGEgbG9nIGZpbGUgKG9uZSBwZXIKKyAgIHRlc3QpLgorICAgLSBSZXdyb3RlIFBlcmwgY29kZSBmb3Igc3RhcnRpbmcgdGhlIHNubXBkL3NubXB0cmFwZCBwcm9jZXNzZXMKKyAgIHN1Y2ggdGhhdCB0aGUgc2FtZSBjb2RlIHdvcmtzIG9uIFVuaXggYW5kIG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjggMTM6MzcgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfbWFsbG9jKCksCisgICBuZXRzbm1wX2NhbGxvYygpLCBuZXRzbm1wX3JlYWxsb2MoKSwgbmV0c25tcF9zdHJkdXAoKSBhbmQKKyAgIG5ldHNubXBfZnJlZSgpLgorICAgQ0hBTkdFUzogV2luMzI6IHNubXBsaWI6IHJlbW92ZWQgdGhlIHRyb3VibGVzb21lICNkZWZpbmUgbWFsbG9jCisgICBuZXRzbm1wX21hbGxvYyBldGMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGNhbGxpbmcgZnVuY3Rpb25zIGZyb20KKyAgIHRoZSBOZXQtU05NUCBETEwgZnJvbSBDIG9yIEMrKyBjb2RlIHRoYXQgaXMgYmVpbmcgbGlua2VkIGFnYWluc3QKKyAgIGFub3RoZXIgdmVyc2lvbiBvZiB0aGUgTVNWQyBydW50aW1lIERMTCB0aGFuIHRoZSBOZXQtU05NUCBETEwsCisgICBhbmQgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IHdpbGwgYmUgZnJlZWQgYnkgdGhlIE5ldC1TTk1QCisgICBETEwsIHlvdSB3aWxsIGVpdGhlciBoYXZlIHRvIGNhbGwgdGhlIE5ldC1TTk1QIG1lbW9yeSBhbGxvY2F0aW9uCisgICBmdW5jdGlvbnMgZXhwbGljaXRseSBvciByZWRlZmluZSBtYWxsb2MoKSBldGMuIHlvdXJzZWxmLgorCisyMDEwLTAzLTI4IDEyOjQ2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBGaXhlZCBhIHJlY2VudGx5IHJlaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTAzLTI3IDE4OjQyICBidmFzc2NoZQorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBBZGRlZCBhIGNoZWNrIGZvciBpbnZvY2F0aW9uIG9mIGNhbGxvYygpIGZyb20gWFNVQnMuCisKKzIwMTAtMDMtMjYgMTk6MTYgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBwZXJsL09JRC9PSUQueHMsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODM2OCBhbmQgcjE4MzY5OiBtYWRlIHN1cmUgdGhhdCB0aGUgTmV0LVNOTVAgUGVybAorICAgZXh0ZW5zaW9ucyBjb21waWxlIHdpdGhvdXQgdHJpZ2dlcmluZyBwcmVwcm9jZXNzb3Igd2FybmluZ3MgYWJvdXQKKyAgIHJlZGVmaW5pbmcgbWFsbG9jIGV0Yy4gbm9yIHRyaWdnZXIgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzIG9uCisgICBXaW5kb3dzLgorCisyMDEwLTAzLTI2IDE0OjQ0ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jOgorCisgICBSZWZhY3RvcmluZzogaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbjoKKyAgIG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKCkuCisKKzIwMTAtMDMtMjYgMTE6NTggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgIAorICAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIAorICAgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdXNpbmcgdmFyaWFibGVzIG9mIHR5cGUgY2hhciBhcyBhbgorICAgYXJyYXkgc3Vic2NyaXB0LiBOb3RlOiBhcyBmYXIgYXMgSSBrbm93IHRoZXNlIHdhcm5pbmdzIGFyZSBvbmx5CisgICByZXBvcnRlZCB3aGVuIHVzaW5nIHRoZSBDeWd3aW4gZ2xpYmMgaGVhZGVycy4KKworMjAxMC0wMy0yNiAxMDo0MSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgZGlyZWN0aXZlIChvbiBXaW5kb3dzIE1TVkMgd2FzIGNvbXBsYWluaW5nCisgICBhYm91dCBzaXplX3Qgd2hpbGUgcHJvY2Vzc2luZyA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4pLgorCisyMDEwLTAzLTI1IDIwOjA3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IGFnZW50eDogY2hhbmdlZCBkZWZhdWx0IFRDUCB0YXJnZXQgZnJvbSAwLjAuMC4wOjcwNSB0bworICAgbG9jYWxob3N0OjcwNS4gVGhpcyBpcyBub3Qgb25seSBhIG1vcmUgc2VjdXJlIGNob2ljZSBidXQgaXQgYWxzbworICAgbWFrZXMgaXQgcG9zc2libGUgb24gV2luZG93cyBzeXN0ZW1zIHRvIGxldCBhbiBBZ2VudFggc3ViYWdlbnQKKyAgIGNvbm5lY3QgdG8gYW4gQWdlbnRYIG1hc3RlciBhZ2VudCBydW5uaW5nIG9uIHRoZSBzYW1lIHN5c3RlbQorICAgd2l0aG91dCBoYXZpbmcgdG8gc2V0IHRoZSB2YXJpYWJsZSBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VULgorCisyMDEwLTAzLTI1IDE2OjExICBidmFzc2NoZQorCisgICAqICBwZXJsL09JRC9PSUQueHMsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBXaW4zMjogcGVybDogZml4ZWQgc2V2ZXJhbCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcnMuCisgICBOb3RlOiBzaW5jZSBjYWxsb2MoKSBpcyBub3QgcmVkZWZpbmVkIGluIDxDT1JFL1hTVUIuaD4gdXNpbmcKKyAgIGNhbGxvYygpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGVhZHMgdG8gIkZyZWUgdG8gd3JvbmcgcG9vbCIKKyAgIGVycm9ycywgYXQgbGVhc3Qgb24gV2luZG93cy4KKworMjAxMC0wMy0yNSAxNjowNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIG1vcmUgc2lsZW50IGJ5IG5vdAorICAgcmVkZWZpbmluZyBtYWxsb2MoKSBvciBmcmVlKCkgZHVyaW5nIGNvbXBpbGF0aW9uIG9mIFBlcmwKKyAgIGV4dGVuc2lvbnMgKHJlc3VsdGVkIGluIHdhcm5pbmdzIGFib3V0IG1hbGxvYygpIC8gZnJlZSgpCisgICByZWRlZmluaXRpb24gaW4gdGhlIFBlcmwgaGVhZGVyIENPUkUvWFNVQi5oKS4KKworMjAxMC0wMy0yNSAxNTowNiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IEJVRzogMjk2OTg3MjogbWFkZSBzdXJlIHRoYXQgU09DS19TVEFSVFVQIGlzIGludm9rZWQKKyAgIGJlZm9yZSBpbml0X2FnZW50KCkgb24gV2luZG93cy4KKworMjAxMC0wMy0yNSAxMzozOSAganNhZnJhbmVrCisKKyAgICogIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwLmMsICAgCisgICAgICBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCBhcHBzL3NubXB3YWxrLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBVc2UgbWFjcm9zIGluc3RlYWQgb2YgbWFnaWMgbnVtYmVycyBhcyBuZXRzbm1wX3BhcnNlX2FyZ3MgcmV0dXJuCisgICBjb2Rlcy4KKworMjAxMC0wMy0yNSAxMzozMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIGJ1aWxkIHByb2Nlc3MgYnkKKyAgIHJlbW92aW5nIHRoZSBmaWxlIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLiBXaGljaCBJUHY2CisgICBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gbmV0c25tcC5kbGwgaXMgbm93IGRldGVybWluZWQgYnkKKyAgIHdoaWNoIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBETEwgaGF2ZSBiZWVuIGRlY2xhcmVkIGFzCisgICBORVRTTk1QX0lNUE9SVC4KKworMjAxMC0wMy0yNCAyMDoxMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2VudW0uYzoKKworICAgZG9uJ3QgdXNlIHBhc3NlZCBwdHIgYXMgdGVtcCB2YXI7IHVzZSBzbm1wX2VudW1fbGlzdHMgaW4gaW5pdAorICAgdGVzdAorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOgorCisgICBhZGQgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY2VydCBpbml0IGVhcmxpZXIgKGhhdmUgdGxzX2Jvb3RzdHJhcCBjYWxsIGl0KQorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nczsgYWRkIGNlcnQgZGVidWcgbXNncyBpbiBzZXJ2ZXIgc2V0dXA7IGZyZWUKKyAgIHNzbCBsb2cgZGF0YQorCisyMDEwLTAzLTI0IDEwOjQ3ICBqc2FmcmFuZWsKKworICAgKiAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXAuYywgICAKKyAgICAgIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsIGFwcHMvc25tcHdhbGsuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIENIQU5HRVM6IGFwcHM6IHJldHVybiBub3plcm8gZXhpdCBjb2RlIHdoZW4gcGFyc2luZyBvZiBjZXJ0YWluCisgICBwYXJhbWV0ZXIgZmFpbHMuCisgICBFLmcuICctQScgcGFyYW1ldGVyIHdpdGggdG9vIHNob3J0IHBhc3NwaHJhc2Ugb3IgS3Uga2V5CisgICBnZW5lcmF0aW9uIGluIGdlbmVyYWwuCisKKzIwMTAtMDMtMjQgMDc6MTEgIG1hZ2ZyCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIENvcnJlY3QgdGhlIHR5cGUgb2YgdGhlIGlkL2Rlc2NyaXB0aW9uIG9mIHRoZSBPcGVuLVBEVS4KKworMjAxMC0wMy0yMiAxODoyOSAgYnZhc3NjaGUKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgVXBkYXRlcyBmb3IgIm1ha2UgY2hlY2tzIjoKKyAgIC0gTWFkZSBzdXJlIHRoYXQgZXhpdCBjb2RlIDAgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIGNoZWNrIGlzCisgICBzdWNjZXNzZnVsIGFuZCB0aGF0CisgICBleGl0IGNvZGUgMSBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgY2hlY2sgZmFpbGVkLgorICAgLSBNYWRlICJtYWtlZmlsZWNoZWNrIiBza2lwIFN1YnZlcnNpb24gYm9va2tlZXBpbmcgZmlsZXMgYW5kIGFsc28KKyAgIHRoZSBtYWtlZmlsZQorICAgdGhhdCBjb250YWlucyAibWFrZWZpbGVjaGVjayIuCisKKzIwMTAtMDMtMjIgMTY6MTAgIGR0czEyCisKKyAgICogbWlicy9ORVQtU05NUC1QQVNTLU1JQi50eHQ6CisKKyAgIEZpeCB0eXBvIGluIGRlZmF1bHQgSXBBZGRyZXNzIHZhbHVlCisgICAoU2VlIEJ1ZyAjMjk3MjE0MSkKKworMjAxMC0wMy0yMiAxNTo0NCAgcnN0b3J5CisKKyAgICogIE1ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIHNubXBsaWIvY2FsbGJhY2suYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIGNoYW5nZSBhbGwgYXNzZXJ0KCkgdG8gbmV0c25tcF9hc3NlcnQoKTsgYWRkIGFzc2VydGNoZWNrIHRvIHRvcAorICAgbGV2ZWwgbWFrZWZpbGUKKworMjAxMC0wMy0yMiAxNToyNCAgYnZhc3NjaGUKKworICAgKiBtaWJzL1VDRC1ESVNLSU8tTUlCLnR4dDoKKworICAgRm9sbG93LXVwIGZvciByMTgzNDk6IGFkZGVkIG1pc3NpbmcgY29tbWEgc3VjaCB0aGF0IGl0IGlzIGFnYWluCisgICBwb3NzaWJsZSB0byBjb21waWxlIFVDRC1ESVNLSU8tTUlCLgorCisyMDEwLTAzLTIyIDE0OjM2ICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIEZpeCBidWlsZCB3aGVuIE1JQiBsb2FkaW5nIGlzIGRpc2FibGVkIChicm9rZW4gYnkgU1ZOIHJldmlzaW9uCisgICAxODM0MSkKKyAgIFJlcG9ydCBkZWZhdWx0IE1JQiBwYXRoIGZvciBjbGllbnQgYXBwcyB0b28uCisKKzIwMTAtMDMtMjIgMTM6NTkgIGR0czEyCisKKyAgICogIG1hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMywgbWFuL3NubXBfY2xvc2UuMywgbWFuL3NubXBfZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX2ZyZWVfcGR1LjMsIG1hbi9zbm1wX29wZW4uMywgbWFuL3NubXBfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9yZWFkLjMsIG1hbi9zbm1wX3NlbGVjdF9pbmZvLjMsIG1hbi9zbm1wX3NlbmQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfcGVycm9yLjMsIG1hbi9zbm1wX3RpbWVvdXQuMzoKKworICAgQ0hBTkdFUzogbWFuOiBCVUc6IDI5NzI4NjA6IFVwZGF0ZSBicm9rZW4gcmVmZXJlbmNlcworCisyMDEwLTAzLTIyIDEzOjQ5ICBkdHMxMgorCisgICAqICBtaWJzL1VDRC1ESVNLSU8tTUlCLnR4dCwgbWlicy9VQ0QtRExNT0QtTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvVUNELUlQRklMVEVSLU1JQi50eHQsIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgQ0hBTkdFUzogbWliczogQlVHOiAyOTczODkwOiBGaXggaW1wb3J0cywgRGlza0lPRW50cnkgbGlzdCBhbmQKKyAgIHJldmlzaW9uIGhpc3RvcmllcworCisyMDEwLTAzLTIyIDExOjU1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgV2luMzIsIHdpbkV4dERMTDogc29sdmVkIHRoZSBteXN0ZXJ5IG9mICJBU04gdHlwZSB6ZXJvIi4gVGhlCisgICB3aW5FeHRETEwgY29kZSBkb2VzIG5vdyBubyBsb25nZXIgdHJpZ2dlciBjb252ZXJzaW9ucyBvZiBXaW5kb3dzCisgICBBU04gdmFyYmluZHMgd2l0aCBBU04gdHlwZSB6ZXJvLiBOb3RlOiB0aGlzIGNvZGUgY2hhbmdlIGRvZXMgbm90CisgICBjaGFuZ2UgdGhlIGFnZW50IGJlaGF2aW9yLgorCisyMDEwLTAzLTIwIDIwOjIxICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaDoKKworICAgQnVpbGRzIGFnYWluIHdpdGggTVNWQy4KKworMjAxMC0wMy0yMCAyMDoyMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmM6CisKKyAgIEFkZGVkIGEgdHJhaWxpbmcgYmFja3NsYXNoIChzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoZQorICAgcHJldmlvdXMgY29tbWl0KS4KKworMjAxMC0wMy0yMCAxOTozNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9zbm1wZC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgCisgICAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgc25tcGxpYi93aW5waXBlLmMsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBDSEFOR0VTOiBsaWJzbm1wOiBjaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YKKyAgIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSBmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2gKKyAgIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbiBwYXNzaW5nIGFub3RoZXIgZGF0YXR5cGUgdGhlbgorICAgY2hhciogb3IgY29uc3QgY2hhciouCisgICBDSEFOR0VTOiBXaW4zMjogY2hhbmdlZCBpbl9hZGRyX3QgZnJvbSB1X2ludCB0byB1X2xvbmcgc3VjaCB0aGF0CisgICBpdCBtYXRjaGVzIHRoZSBkYXRhdHlwZSBvZiBzb2NrYWRkcl9pbjo6c2luX2FkZHIuCisgICBBbHNvLCBmaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIChtb3N0bHkgY2hhciAqIDw+IHVfY2hhciAqCisgICBtaXNtYXRjaGVzKSBhbmQgcmVtb3ZlZCBzb21lIGNhc3RzLgorCisyMDEwLTAzLTIwIDE5OjE2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBGaXhlZCB0aGUgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgZ2NjIChNaW5HVykuCisKKzIwMTAtMDMtMjAgMTk6MDUgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciBzaWdwcm9jbWFzay4KKworMjAxMC0wMy0yMCAwOToxNCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgUmVmYWN0b3Jpbmc6IG1vdmVkIGR1cGxpY2F0ZWQgY29kZSBpbnRvIGEgbmV3IGZ1bmN0aW9uLgorCisyMDEwLTAzLTE5IDIyOjU2ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIFJlcG9ydCBNSUIgYW5kIGNvbmZpZyBkaXJlY3RvcmllcyBzZWFyY2ggcGF0aHMgb24gZXJyb3JzCisgICAoYW5kIGluIHRoZSBoZWxwIG1lc3NhZ2UpCisKKzIwMTAtMDMtMTkgMTM6MTIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IG1hZGUgdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBpcyBsb2dnZWQgd2hlbgorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBpcyBhdHRlbXB0ZWQgbW9yZSBkZXRhaWxlZC4KKyAgIAorICAgQW4gZXhhbXBsZToKKyAgIChiZWZvcmUpCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIChtaWJJSS9zbm1wLAorICAgQzpcV0lORE9XU1xTeXN0ZW0zMlxzbm1wbWliLmRsbCkKKyAgIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxlZC4KKyAgIChhZnRlcikKKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb246IE1JQiBtb2R1bGVzIG1pYklJL3NubXAgYW5kCisgICBDOlxXSU5ET1dTXFN5c3RlbTMyXHNubXBtaWIuZGxsIChvaWQgLjEuMy42LjEuMi4xLjExKS4KKyAgIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxlZC4KKworMjAxMC0wMy0xOSAxMjo0MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IG11bHRpcGxlIHZhcmJpbmQgc2V0IHJlcXVlc3RzIGFyZSBub3cKKyAgIHByb2Nlc3NlZCBjb3JyZWN0bHkuCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBtYWRlIGVycm9yIGNvZGVzIGluIFNOTVAgcmVzcG9uc2UgUERVcworICAgYXMgUkZDLWNvbXBsaWFudCBhcyBwb3NzaWJsZS4KKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGlmIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIERMTCBmYWlscywgdGhlCisgICByZWFzb24gd2h5IGxvYWRpbmcgZmFpbGVkIGlzIG5vdyBsb2dnZWQuCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRoYXQgb2NjdXJyZWQgd2hlbgorICAgU25tcEV4dGVuc2lvblF1ZXJ5KEV4KSBmYWlsZWQuIFRoaXMgbWVtb3J5IGxlYWsgaGFzIGJlZW4gZm91bmQKKyAgIHZpYSBzb3VyY2UgcmVhZGluZy4gTm90ZTogaXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgaXQgd2FzIHBvc3NpYmxlCisgICB0byB0cmlnZ2VyIHRoaXMgbWVtb3J5IGxlYWsuIFRoaXMgbGVhayBpcyBjZXJ0YWlubHkgbm90IHRyaWdnZXJlZAorICAgYnkgZXZlcnkgcmVxdWVzdCBmb3Igd2hpY2ggYSByZXNwb25zZSB3aXRoIG5vbi16ZXJvIGVycm9yIHN0YXR1cworICAgaXMgc2VudCBiYWNrLgorCisyMDEwLTAzLTE4IDE2OjI5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIGtlZXAgY291bnQgb2YgZW5hYmxlZCBsb2dzOyB1c2UgdGhpcyBjb3VudCB0byBkZXRlcm1pbmUgd2hlbiB0bworICAgbG9nIHRvIHN0ZGVycgorCisyMDEwLTAzLTE4IDE2OjI4ICByc3RvcnkKKworICAgKiAgYXBwcy9zbm1wdHJhbnNsYXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgc25tcCB0b2tlbiBsb2dPcHRpb24gYWxsb3dzIHNwZWNpZnlpbmcgbG9nCisgICBkZXN0aW5hdGlvbnMgdmkgY29uZiBmaWxlcworICAgLSBpZiBzdGRlcnIgbG9nIGVuYWJsZWQgYmVjYXVzZSBvZiBubyBsb2cgZGVzdGluYXRpb24sIHR1cm4gaXQKKyAgIG9mZiB3aGVuIGEKKyAgIGxvZyBkZXN0aW5hdGlvbiBpcyBlbmFibGVkCisgICAtIGRvbid0IGNhbGwgbmV0c25tcF9lbmFibGVfc3RkZXJybG9nKCkgZnJvbSBhcHBzIGFueW1vcmUKKworMjAxMC0wMy0xOCAxNTozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgdWRwIHRyYW5zcG9ydCBpbmhlcml0YW5jZSB0d2Vha3MKKyAgIC0gbW92ZSBiYXNpYyB1ZHAgcmVjdmZyb20vc2VuZHRvIGNvZGUgZnJvbSBVRFBEb21haW4gdG8KKyAgIFVEUEJhc2VEb21haW4KKyAgIC0gdHdlYWsgdXBkIHJlY3Zmcm9tL3NlbmR0byB0byBjYWxsIHVkcGJhc2UgdmVyc3Rpb24KKyAgIC0gdHdlYWsgdWRwaXB2NCByZWN2ZnJvbS9zZW5kdG8gdG8gY2FsbCB1ZHBiYXNlIHZlcnNpb24KKyAgIC0gYWxzbyBmaXhlZCBuZXRzbm1wX2lwdjRfKiAtPiBuZXRzbm1wX3VkcGlwdjRfKgorICAgLSB0d2VhayBEVExTVURQRG9tYWluIG90IHVzZSB1ZHBiYXNlXyogaW5zdGVhZCBvZiB1ZHBfKgorCisyMDEwLTAzLTE4IDE1OjIxICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcHJvdGVjdCBjZXJ0IGhlYWRlciBhbmQgaW5pdCBjYWxsIHdpdGggaWZkZWZzCisKKzIwMTAtMDMtMTcgMTk6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHVzZSBuZXcgdXRpbGl0eSByb3V0aW5lIGZvciBjZXJ0IG5hbWVzCisKKzIwMTAtMDMtMTcgMTk6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgc25tcF9vcGVuc3NsIGhlYWRlciBhZnRlciBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBhZGQgcm91dGluZXMgdG8gcHVsbC9kdW1wIG5hbWVzIGZyb20gWDUwOSBjZXJ0cworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB1c2UgZW51bSBsaXN0cyB0byBtYW5hZ2UgZGlyZWN0b3J5IGluZGV4ZXMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2VudW0uYzoKKworICAgaW5pdGlhbGl6ZSBzdGF0aWMgc3RvcmFnZSBiZWZvcmUgdXNlOyBwcm90ZWN0IGVudW0gaW5pdCBmcm9tCisgICBtdWx0aXBsZSBjYWxscworCisyMDEwLTAzLTE3IDE4OjU0ICByc3RvcnkKKworICAgKiBSRUFETUUuYWdlbnQtbWliczoKKworICAgYWRkIGluZm8gYWJvdXQgbmV3IHRzbS90bHMgbWlicworCisyMDEwLTAzLTE3IDE4OjU0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjZXJ0IGluaXQgdG8gc25tcCBpbml0CisKKzIwMTAtMDMtMTcgMTM6MzcgIGJ2YXNzY2hlCisKKyAgICogbWlicy9ORVQtU05NUC1BR0VOVC1NSUIudHh0LCBtaWJzL05FVC1TTk1QLUVYVEVORC1NSUIudHh0OgorCisgICBVcGRhdGVkIE1JQiByZXZpc2lvbiBoaXN0b3J5LgorCisyMDEwLTAzLTE3IDEzOjI5ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIG9uZSBsZWFrLWF0LWV4aXQuCisKKzIwMTAtMDMtMTcgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENIQU5HRVM6IEJVRzogMjk3MTI1NzogRml4ZWQgd2luRXh0RExMIGhhbmRsaW5nIG9mIG11bHRpLXZhcmJpbmQKKyAgIGdldE5leHQgcmVxdWVzdHMgd2l0aCBPSURzIGluIHJldmVyc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyLgorCisyMDEwLTAzLTE3IDEwOjI1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBNb3JlIHdpbkV4dERMTCBkZWJ1ZyBvdXRwdXQgdHVuaW5nLgorCisyMDEwLTAzLTE2IDE5OjMxICBidmFzc2NoZQorCisgICAqIG1pYnMvTkVULVNOTVAtQUdFTlQtTUlCLnR4dDoKKworICAgQ29tcGlsZXMgbm93IHdpdGggTUlCIGNvbXBpbGVycyB0aGF0IGRvIG5vdCByZWNvZ25pemUgYSBkb3VibGUKKyAgIGRhc2ggYXMgdGhlIGVuZCBvZiBhIE1JQiBjb21tZW50LgorCisyMDEwLTAzLTE2IDE5OjI3ICBidmFzc2NoZQorCisgICAqIG1pYnMvTkVULVNOTVAtRVhURU5ELU1JQi50eHQ6CisKKyAgIEZpeGVkIHR3byBzeW50YXggZXJyb3JzLgorCisyMDEwLTAzLTE2IDE5OjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBmaXhlZCBhIGJ1ZyBpbiBnZXROZXh0IGhhbmRsaW5nIHRoYXQKKyAgIGNvdWxkIGNhdXNlIHRoZSBNSUIgb3V0cHV0IHRvIGJlIHRydW5jYXRlZC4KKworMjAxMC0wMy0xNiAxODo1MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgTWFkZSB3aW5FeHRETEwgZGVidWcgb3V0cHV0IG1vcmUgZGV0YWlsZWQuCisKKzIwMTAtMDMtMTYgMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmg6CisKKyAgIE1hZGUgc3VyZSB0aGF0IEMrKyBwcm9ncmFtcyB0aGF0IGluY2x1ZGUgTmV0LVNOTVAgaGVhZGVyIGZpbGVzCisgICBjb21waWxlIGFnYWluLgorCisyMDEwLTAzLTE1IDA3OjIwICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKKworICAgTWFrZSBpdCBjb21waWxlIHdpdGggLS1kaXNhYmxlLWRlcHJlY2F0ZWQgYWdhaW4uCisKKzIwMTAtMDMtMTUgMDc6MTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmM6CisKKyAgIERpc2FibGUgYWxsIHRoZSBwcmludGluZyBpZiBkZWJ1ZyBvdXRwdXQgaXMgb2ZmLgorCisyMDEwLTAzLTE1IDAwOjE3ICB0YW5kZXJzCisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3MgcmVnYXJkaW5nIHByaW50ZiBmb3JtYXQKKworMjAxMC0wMy0xNSAwMDowNyAgdGFuZGVycworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzIHJlZ2FyZGluZyBwcmludGYgZm9ybWF0CisKKzIwMTAtMDMtMTQgMjE6MDUgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBtYWtlIHN1cmUgaGVhZGVyIGlmZGVmIG5hbWUgaXMgdW5pcXVlCisKKzIwMTAtMDMtMTQgMjE6MDQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIGFkZCBtaXNzaW5nIGluaXQvc2h1dGRvd24gcHJvdG90eXBlcyB0byBmaXggY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wMy0xNCAyMTowMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgbW92ZSBkZWJ1ZyBtZXNzYWdlIGVhcmxpZXIKKworMjAxMC0wMy0xNCAyMTowMiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jOgorCisgICBhZGQgcHJvdG90eXBlIGZvciBuZXRzbm1wX2luaXRfY29udGFpbmVyOyBmaXggY29tcGxlciB3YXJuaW5nCisKKzIwMTAtMDMtMTQgMjA6NTEgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIENvcnJlY3QgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuIGFuZCBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4KKyAgIGZvciB0aGUgTkVUU05NUF9OT19ERUJVR0dJTkcgY2FzZQorCisyMDEwLTAzLTE0IDE5OjEwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW5hbWUgY2VydCBpbml0L3NodXRkb3duIGZ1bmNzOyBvbmx5IGNvbXBpbGUgY2VydF91dGlscyBpZgorICAgdXNpbmcvaGF2ZSBTU0w7IGluaXQgY2VydHMgZnJvbSB0bHMgYmFzZQorCisyMDEwLTAzLTE0IDE5OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjYWxsIG5ldHNubXBfaW5pdF9vcGVuc3NsIGluc3RlYWQgb2YgbmV0c25tcF9pbml0X3Rsc2Jhc2UKKworMjAxMC0wMy0xNCAxOTowOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIHVwZGF0ZSBmb3IgcmVuYW1lZCBvYmplY3RzIGluIHZlcnNpb24gMDggb2YgdGhlIGR0bHMgZHJhZnQKKworMjAxMC0wMy0xNCAxOTowOCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYiwgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbiwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliLCBhZ2VudC9taWJncm91cC90c20tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBpbXBvcnQgaW5pdGlhbCBjb2RlIGZvciBkdGxzIG1pYnMKKworMjAxMC0wMy0xNCAxOTowOCAgcnN0b3J5CisKKyAgICogbWlicy9UTFNUTS1NSUIudHh0OgorCisgICBUTFNUTS1NSUIgZnJvbSBkcmFmdC1pZXRmLWlzbXMtZHRscy10bS0wOS50eHQKKworMjAxMC0wMy0xNCAxNzoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEZpeGVkIGEgZmV3IG1vcmUgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTQgMTQ6MTAgIGJ2YXNzY2hlCisKKyAgICogcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGw6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3Mzg0OiBjaGFuZ2VkIE5FVFNOTVBfRFNfTUFYX1NVQklEUyBmcm9tIDQwIHRvCisgICA0OC4KKworMjAxMC0wMy0xNCAxMzo1MyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ2hhbmdlczoKKyAgIC0gUmVtb3ZlZCAtV25vLWNoYXItc3Vic2NyaXB0cyBmcm9tIERFVkZMQUdTLiBVc2luZyBhIHZhcmlhYmxlIG9yCisgICBleHByZXNzaW9uIG9mCisgICB0eXBlIGNoYXIgYXMgYW4gYXJyYXkgaW5kZXggaXMgYWxtb3N0IGFsd2F5cyBhbiBlcnJvci4KKyAgIEZ1cnRoZXJtb3JlLAorICAgLVdjaGFyLXN1YnNjcmlwdCBkb2VzIG5vdCB0cmlnZ2VyIGFueSB3YXJuaW5ncyBvbiB0aGUgTmV0LVNOTVAKKyAgIGNvZGUgYmFzZS4KKyAgIC0gUmVtb3ZlZCAtV2lubGluZSBmcm9tIERFVkZMQUdTLiBOb3Qgb25seSB3YXMgbm9ib2R5IHBheWluZworICAgYXR0ZW50aW9uIHRvIHRoZQorICAgbWVzc2FnZXMgdHJpZ2dlcmVkIGJ5IC1XaW5saW5lLCBidXQgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBnY2MKKyAgIGNvbXBpbGVyIGFyZQorICAgYmV0dGVyIHRoYW4gaHVtYW5zIGF0IGRlY2lkaW5nIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW5saW5lZAorICAgYW5kIHdoaWNoCisgICBvbmVzIG5vdC4KKworMjAxMC0wMy0xNCAxMzozOSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZXJhbiBhdXRvcmVjb25mLgorCisyMDEwLTAzLTE0IDEzOjM5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTQgMTM6MzYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIFJlbW92ZWQgdGhlICcweCcgcHJlZml4IGFnYWluIGZyb20gYSBkZWJ1ZyBzdGF0ZW1lbnQgdGhhdCB3YXMKKyAgIGludHJvZHVjZWQgaW4gcjE4MjgyLgorCisyMDEwLTAzLTEzIDE5OjA3ICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9BU04ueHMsIHBlcmwvT0lEL09JRC54cywgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvVHJhcFJlY2VpdmVyL3BwcG9ydC5oLCAgIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgRml4ZWQgbW9zdCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZSBjb2RlIGluIHRoZQorICAgcGVybCBzdWJkaXJlY3RvcnkuCisgICBOb3RlOiB0aGVzZSBjaGFuZ2VzIG1heSBjb250YWluIHNvbWUgcmVhbCBidWcgZml4ZXMuCisKKzIwMTAtMDMtMTMgMDk6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTMgMDE6MTYgIGhhcmRha2VyCisKKyAgICogYWNjb25maWcuaCwgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBkZWZpbmUgdGhlIFRMU1RDUCBET01BSU4KKworMjAxMC0wMy0xMyAwMToxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGZpeCBpZmRlZiB0eXBvCisKKzIwMTAtMDMtMTIgMjA6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGFuZ2UgZGVidWdnaW5nIHN5bWJvbCBuYW1lcyB0byBhIGdlbmVyaWMgdGxzIHN0cmluZworCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBpbml0aWFsIHdvcmtpbmcgU05NUCBvdmVyIFRMUyBvdmVyIFRDUCBjb25uZWN0aW9uCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBwcmludCBhIG1vcmUgY29tcGxldGUgT3BlblNTTCBzdGFjaworCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmaXggYXNzZXJ0IHN0YXRlbWVudHMKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgYWRkZWQgYW4gYWNjZXB0ZWRfYmlvIHBvaW50ZXIgZm9yIHRoZSBiaW8gYWZ0ZXIgU1NMX2FjY2VwdAorCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWRkIHRoZSBhYmlsaXR5IGZvciBmX2NvcHkgYW5kIGZfY29uZmlnCisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIG1pc3NpbmcgOworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGQgYSBmX2NvcHkgcG9pbnRlcgorCisyMDEwLTAzLTEyIDIwOjIwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICByZXR1cm4gaW50IG5vdCBpbnQgKiBvbiBlcnJvcgorCisyMDEwLTAzLTEyIDIwOjIwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGRlZCBhIGZfY29uZmlnIGZ1bmN0aW9uIGZvciB0cmFuc3BvcnRzCisKKzIwMTAtMDMtMTIgMTE6NTMgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcHRhYmxlOiBQQVRDSDogMjg1MDA2NzogU3VwcHJlc3MgZXh0cmFuZW91cyAiaW5kZXgiCisgICBoZWFkZXIgdG9rZW4KKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IERhbiBOZWxzb24KKworMjAxMC0wMy0xMiAxMTo0MyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jOgorCisgICBSZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb24gb2YKKyAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcygpCisKKzIwMTAtMDMtMTEgMTY6NTIgIGR0czEyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIERvY3VtZW50IHRoZSBmb3JtYXQgb2YgdGhlIC1lLy1FIGNvbW1hbmQgbGluZSBvcHRpb25zLgorCisyMDEwLTAzLTExIDE2OjQ3ICBkdHMxMgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBSZW1vdmUgbWVudGlvbiBvZiB0aGUgKGFiYW5kb25lZCkgJ2RhdGFzZXQyJyBoZWxwZXIuCisKKzIwMTAtMDMtMTEgMTU6NTkgIGR0czEyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgRG9uJ3QgaW5pdGlhbGlzZSB0aGUgVExTIHRyYW5zcG9ydCB1bmxlc3MgaXQncyBhY3R1YWxseSBiZWVuCisgICBjb25maWd1cmVkIGluLgorCisyMDEwLTAzLTExIDE1OjQ3ICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2V2YWxfc3VpdGUuc2g6CisKKyAgIHVzZSBTTk1QX1RNUERJUiBpbnN0ZWFkIG9mIFRNUERJUgorCisyMDEwLTAzLTExIDE1OjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgcXVlcnkgcmlnaHQgYm9vbCAodHNtIHByZWZpeCBpcyBsaWIgYm9vbCwgbm90IGFwcCkKKworMjAxMC0wMy0xMSAxNTowOCAgZHRzMTIKKworICAgKiAgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhcHBzL3NubXB0ZXN0LmMsIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi90b29scy5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMjk1MjAzNDogUmV0dXJuIG9mIHRoZSBHcmVhdCBTdVNFICdzcHJpbnRmJworICAgSHVudC4uLgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvCisKKzIwMTAtMDMtMTEgMTQ6NTUgIGR0czEyCisKKyAgICogbG9jYWwvdHJhcHRvZW1haWw6CisKKyAgIENIQU5HRVM6IFBBVENIOiAyOTM3OTk2OiBBZGQgRGF0ZTogaGVhZGVyIHRvIGVtYWlsIHNlbmQgYnkKKyAgIHRyYXB0b2VtYWlsCisKKzIwMTAtMDMtMTEgMTQ6NTAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk2NzQwMDogUmV0cmlldmUgZXJyb3IgY291bnRlcnMgZm9yIHRoZQorICAgRXRoZXJMaWtlLU1JQgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMuCisKKzIwMTAtMDMtMTEgMTQ6MjMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5Njg2NDI6IENhdGNoIG92ZXJmbG93IG9mIHBhc3MtdGhyb3VnaAorICAgY29tbWFuZCBidWZmZXIuCisgICBQYXRjaCBmcm9tIEFuZHJlYXMgSmFlZ2VyL0xlb25hcmRvIENoaXF1aXR0bworCisyMDEwLTAzLTExIDEyOjM3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5NTY2NTc6IEhhbmRsZSBvdmVyLWxlbmd0aCBBZ2VudFggT0lEcy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IFJvYiBXZXN0CisKKzIwMTAtMDMtMTEgMTI6MjMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmM6CisKKyAgIFByb3ZpZGUgbWlzc2luZyBkZWJ1ZyBwYXJhbWV0ZXIuCisgICBQYXRjaCBwcm92aWRlZCBieSBBbmRyZWFzIEphZWdlci4KKworMjAxMC0wMy0xMSAxMjoyMSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYzoKKworICAgUHJvdmlkZSBtaXNzaW5nIChkdW1teSkgcmV0dXJuIHZhbHVlLCB0byBzdXBwcmVzcyBjb21waWxlcgorICAgd2FybmluZy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCisyMDEwLTAzLTExIDEyOjE5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYzoKKworICAgU3VwcHJlc3Mgd2FybmluZ3Mgb2YgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93LgorICAgVGhpcyBkb2Vzbid0IF9hY3R1YWxseV8gcHJvdGVjdCBhZ2FpbnN0IHN1Y2ggYW4gb3ZlcmZsb3csCisgICBzaW5jZSB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyBub24tZW1wdHksIHNvIHN0cm5jYXQgY2FuJ3QKKyAgIHVzZSBpdCBhbGwgYW55d2F5LiBCdXQgdGhpcyBzaG91bGQgYXQgbGVhc3QgbWlzbGVhZCB0aGUKKyAgIGNvbXBpbGVyIHN1ZmZpY2llbnRseSB0byBzaHV0IGl0IHVwIQorICAgCisgICBQYXRjaCBwcm92aWRlZCBieSBBbmRyZWFzIEphZWdlci4KKworMjAxMC0wMy0xMSAxMTo1NyAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNDoKKworICAgUmVwbGFjZSBiYWNrcXVvdGUgd2l0aCBzaW5nbGUgcXVvdGUgaW4gY29uZmlndXJlIG91dHB1dCBtZXNzYWdlLgorICAgV2hpbGUgdGhpcyBjaGFuZ2UgaXMgcHJvYmFibHkgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgaXQgZmVlbHMKKyAgIHNlbnNpYmxlIHRvIGF2b2lkIHRoaXMgcGFydGljdWxhciB1c2Ugb2YgYmFja3F1b3RlcywgSnVzdCBJbgorICAgQ2FzZS4KKyAgIFNlZSBkaXNjdXNzaW9uIGluIFBhdGNoICMyOTUyMTY5CisKKzIwMTAtMDMtMTEgMTE6NDMgIGR0czEyCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0g6IDI5NTIxNDA6IE92ZXJmbG93IGNvdW50ZXIzMiBhbmQgZ2F1Z2UzMgorICAgb24gNjRiaXQgc3lzdGVtcyBjb3JyZWN0bHkKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IExlb25hcmRvIENoaXF1aXR0bworCisyMDEwLTAzLTExIDExOjM2ICBkdHMxMgorCisgICAqIHRlc3RpbmcvVEVTVENPTkYuc2gsIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaDoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAyOTUyMDIwOiBFeHBsaWNpdGx5IHNldCBwZXJtaXNzaW9uIG9uCisgICB0ZW1wb3JhcnkgdGVzdGluZyBvdXRwdXQgZGlyZWN0b3JpZXMuCisgICBQYXRjaCBwcm92aWRlZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8uCisKKzIwMTAtMDMtMTEgMTE6MjYgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk1MDg0NTogRml4IGlmSGlnaFNwZWVkIGNhbGN1bGF0aW9uCisgICBQYXRjaCBwcm92aWRlZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KKworMjAxMC0wMy0xMSAwODoyNiAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vQVNOLnhzLCBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgcGVybC9PSUQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL09JRC9PSUQueHMsIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L2FnZW50LnhzLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54czoKKworICAgTWFkZSBjb21waWxhdGlvbiBvZiB0aGUgUGVybCBtb2R1bGUgTmV0U05NUC5wbSBvbiBXaW5kb3dzIG1vcmUKKyAgIHNpbGVudDogYWRkZWQgY29tcGlsZXIgZmxhZ3MgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworICAgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MgYW5kIG1hZGUgc3VyZSB0aGF0ICNpbmNsdWRlCisgICA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IG9jY3VycyBiZWZvcmUgYW55IG90aGVyIGluY2x1ZGUgZmlsZQorICAgdGhhdCBkZWZpbmVzIF9XSU4zMl9XSU5OVC4KKworMjAxMC0wMy0xMCAyMzozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGNyZWF0ZSBpbmRleGVzIGZvciBjZXJ0aWZpY2F0ZXMgaW4gY29uZmlnIHBhdGgKKworMjAxMC0wMy0xMCAxODo0OCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmM6CisKKyAgIEFkZGVkICIjaW5jbHVkZSA8dW5pc3RkLmg+IiBzdWNoIHRoYXQgb24gVW5peCBzeXN0ZW1zIHRoZQorICAgY29tcGlsZXIgZG9lcyBub3QgcHJpbnQgYSB3YXJuaW5nIGFib3V0IGEgbWlzc2luZyBkZWNsYXJhdGlvbiBmb3IKKyAgIHRoZSBmdW5jdGlvbiBjbG9zZSgpLgorCisyMDEwLTAzLTEwIDE4OjMwICByc3RvcnkKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sICAgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOgorCisgICB1cGRhdGUgdmVyc2lvbiB0byA1LjYuZGV2CisKKzIwMTAtMDMtMTAgMTg6MjkgIHJzdG9yeQorCisgICAqIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiB1cGRhdGUgVmVyc2lvbi1NdW5nZSBmb3IgcmVuYW1lZCBjb25maWd1cmUuYWMKKworMjAxMC0wMy0xMCAxODoyOSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLmFjOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogc2F2ZSBjb25maWd1cmUgY2FjaGUgZXZlcnkgb25jZSBpbiB3aGlsZQorCisyMDEwLTAzLTEwIDE2OjEyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW46CisKKyAgIFJlb3JkZXJlZCBzb21lIG9mIHRoZSBNYWtlZmlsZSBydWxlcyBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUKKyAgIGRpZmZzIHdpdGggbGlic25tcF9kbGwvTWFrZWZpbGUuaW4uCisKKzIwMTAtMDMtMTAgMTY6MTAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyLCBiYXRjaCBidWlsZGluZzogRExMIGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMy0xMCAxNjowNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgRml4ZWQgYSByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcgYnkgYWRkaW5nIGEgZm9yd2FyZAorICAgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBfY2FjaGVfZnJlZSgpLgorCisyMDEwLTAzLTEwIDE2OjA2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBXaW4zMi4KKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogUkVBRE1FOgorCisgICBhZGQgbWlzc2luZyBjb250cmlidXRvcnMKKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBmaXggcG90ZW50aWFsIGRvdWJsZSBmcmVlIGluIENPTlRBSU5FUl9GUkVFCisgICAtIGFsc28gYWRkZWQgc2V2ZXJhbCBjb21wYXJlIHJvdXRpbmVzCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiB3aGVuIGZyZWVpbmcgYSBjYWNoZSwgc3RvcCB0aW1lciBhbmQgY2FsbCBjYWNoZQorICAgZnJlZSBmdW5jCisgICAtIGFsc28gYWRkIG5ldHNubXBfY2FjaGVfcmVtb3ZlCisKKzIwMTAtMDMtMTAgMDM6NTIgIHJzdG9yeQorCisgICAqICBSRUFETUUsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICB1bmRvIGNvbW1pdCAxODIzNAorCisyMDEwLTAzLTEwIDAzOjQxICByc3RvcnkKKworICAgKiAgUkVBRE1FLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgTWVyZ2UgYnJhbmNoICdwdWxsbWUnIG9mIC4uL3RydW5rLXN0YWdpbmcKKworMjAxMC0wMy0wOSAxNzo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGV4cG9ydGVkIG5ldHNubXBfcmVhZF9tb2R1bGUoKSBmcm9tIG5ldHNubXAuZGxsCisgICBzdWNoIHRoYXQgTmV0U05NUC5wbSBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDMtMDkgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBTaW1wbGlmaWVkIHR3byBtYWtlZmlsZXMgdXNlZCBieSBidWlsZC5iYXQgKFdpbjMyKS4KKworMjAxMC0wMy0wOSAxNzoyNCAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBidWlsZGluZyBOZXRTTk1QLnBtIGRvZXMgbm8gbG9uZ2VyCisgICB0cmlnZ2VyIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHJlZGVmaW5pbmcgX1dJTjMyX1dJTk5UIG5vcgorICAgTlRERElfVkVSU0lPTi4KKworMjAxMC0wMy0wOSAxNzoyMiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBOZXRTTk1QLnBtIG1vcmUgc2lsZW50IGJ5CisgICBhZGRpbmcgdGhlIE1TVkMgY29tcGlsZXIgZmxhZ3MgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworICAgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MuCisKKzIwMTAtMDMtMDkgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgcmVtb3ZlIGRlYnVnIG1zZyB1c2VkIGR1cmluZyBkZWJ1Z2dpbmcKKworMjAxMC0wMy0wOSAxNzowMiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGluaXRpYWwgY2VydCB3cmFwcGVyIC0gdGVzdGluZyByZXBvIHdyaXRlIHByaXZzCisKKzIwMTAtMDMtMDkgMTA6MjAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW46CisKKyAgIFJlbW92ZWQgZHVwbGljYXRlIGJ1aWxkIHJ1bGVzLiBUaGVzZSBkdXBsaWNhdGUgcnVsZXMgd2VyZQorICAgaGFybWxlc3MgYnV0IHRyaWdnZXJlZCBhIHdhcm5pbmcuCisKKzIwMTAtMDMtMDkgMDI6MzggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZGlyZWN0b3J5IGNvbnRhaW5lciBlbmhhbmNlbWVudHMKKyAgIC0gZml4IHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgLSBhZGQgZmlsdGVyIGNhbGxiYWNrIHRvIGZpbHRlciBmaWxlcyByZXR1cm5lZAorICAgLSBhZGQgb3B0aW9uIHRvIHJldHVybiByZWxhdGl2ZSBhbmQgbm90IGZ1bGwgcGF0aHMKKyAgIC0gYWRkIG9wdGlvbiB0byBzb3J0IHJldHVybmVkIGxpc3QKKyAgIC0gYWRkIG9wdGlvbiB0byByZXR1cm4gZW1wdHkgY29udGFpbmVyIGluc3RlYWQgb2YgTlVMTCBpZiBubworICAgZmlsZXMgZm91bmQKKyAgIC0gY2hhbmdlIGRlZmF1bHQgY29udGFpbmVyIG5hbWUgdG8gZGlyZWN0b3J5IHRoYXQgd2FzIHNjYW5uZWQKKyAgIC0gdHdlYWsgZGVidWcvbG9nIG1lc3NhZ2VzCisKKzIwMTAtMDMtMDggMjM6MDcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogZGVmaW5lIGFuZCB1c2UgbmV3IE5FVFNOTVBfTE9HT05DRSBtYWNybworCisyMDEwLTAzLTA4IDIyOjQ0ICByc3RvcnkKKworICAgKiBtYW4vc25tcF9jb25maWcuNS5kZWYsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgTkVXUzogc25tcGxpYjogY29uZiBmaWxlcyBjYW4gbm93IGluY2x1ZGUgb3RoZXIgY29uZiBmaWxlcworICAgLSBhbHNvIHR3ZWFrZWQgZGVidWcgdG9rZW5zIGhlcmUgYW5kIHRoZXJlCisKKzIwMTAtMDMtMDggMjI6NDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgZml4IHR5cG8gKGNhdXNlZCBleHRlcm5hbCByZWZlcmVuY2Ugd2hlbiBEVExTVURQIGNvbmZpZ3VyZWQKKyAgIHdpdGhvdXQgZHRsc3RjcCkKKworMjAxMC0wMy0wNiAwMjoyNyAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV0c25tcF9jb250YWluZXIgZW5oYW5jZW1lbnRzOgorICAgLSBhZGQgZnJlZV9pdGVtIGZ1bmN0aW9uOyBkZWZhdWx0cyB0bworICAgbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWUKKyAgIC0gYWRkIENPTlRBSU5FUl9GUkVFX0FMTCBtYWNyby9mdW5jdGlvbiAobGlrZSBDT05UQUlORVJfQ0xFQVIgYnV0CisgICBjYWxscyBjb250YWluZXIgZnJlZV9pdGVtIGZvciBlYWNoIGl0ZW0gaW4gcHJpbWFyeSBjb250YWluZXIpCisgICAtIGFkZCBhYmlsaXR5IHRvIHNldCBvcHRpb25zIG9uIGJpbmFyeV9hcnJheSBjb250YWluZXJzCisKKzIwMTAtMDMtMDIgMTc6NTUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbjoKKworICAgTWFkZSBzdXJlIHRoYXQgd2luMzIvYnVpbGQuYmF0IHdvcmtzIGFnYWluIGJ5IGFkZGluZyBtaXNzaW5nCisgICBzb3VyY2UgZmlsZSBuYW1lcy4gU29ydGVkIHNvdXJjZSBmaWxlIG5hbWVzIGFscGhhYmV0aWNhbGx5IHRvby4KKworMjAxMC0wMy0wMiAxNjo1NCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE2NyAobWVyZ2Ugb2Ygc25tcGQgYW5kIHNubXBkc2RrIGFuZCBhbHNvIG9mCisgICBuZXRzbm1wbWlicyBhbmQgbmV0c25tcG1pYnNzZGspOiB0aGUgYmF0Y2ggZmlsZSB3aW4zMi9idWlsZC5iYXQKKyAgIHdvcmtzIGFnYWluIHdpdGggdGhlIFBsYXRmb3JtIFNESyBlbmFibGVkLgorCisyMDEwLTAzLTAyIDE2OjUyICBidmFzc2NoZQorCisgICAqIHdpbjMyL01ha2VmaWxlLWFwcHMuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MjE1IChyZXBsYWNlZCB0aGUgb2Jzb2xldGUgY2wuZXhlIG9wdGlvbiAvR1ggYnkKKyAgIHRoZSBlcXVpdmFsZW50IC9FSHNjOyBhZGRlZCAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiLCBhZGRlZAorICAgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgYW5kIHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVgpLgorCisyMDEwLTAyLTI4IDE1OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBXaW4zMjogZml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IHJlZGVmaW5pdGlvbiBvZgorICAgX1dJTjMyX1dJTk5UIGJ5IG1ha2luZyBzdXJlIHRoYXQgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBpcworICAgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+LgorCisyMDEwLTAyLTI4IDE1OjI0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZXBsYWNlZCB0aGUgb2Jzb2xldGUgL0dYIGJ5IHRoZQorICAgZXF1aXZhbGVudCAvRUhzYy4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIgorICAgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgdG8gbWFrZSBidWlsZGluZyB3aXRoIE1TVkMgMjAwOAorICAgbW9yZSBzaWxlbnQuCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVguIFRoZXNlCisgICBvcHRpb25zIGluZmx1ZW5jZSBob3cgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIGFyZSBnZW5lcmF0ZWQsCisgICB3aGljaCBhcmUgbm90IHVzZWQgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0LiAvWVggaXMgbm90CisgICBzdXBwb3J0ZWQgYnkgTVNWQyAyMDA4LgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZW1vdmVkIGEgZHVwbGljYXRlIG9jY3VycmVuY2Ugb2YKKyAgIHN0cnRvdWxsLm9iai4KKworMjAxMC0wMi0yOCAxNDoxMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Db25maWd1cmUsIHdpbjMyL01ha2VmaWxlLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE2NyAobWVyZ2Ugb2Ygc25tcGQgYW5kIHNubXBkc2RrIGFuZCBhbHNvIG9mCisgICBuZXRzbm1wbWlicyBhbmQgbmV0c25tcG1pYnNzZGspOiBhcHBsaWVkIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyB0bworICAgdGhlIHdpbjMyL0NvbmZpZ3VyZSBzY3JpcHQgYW5kIHdpbjMyL01ha2VmaWxlLmluLgorCisyMDEwLTAyLTI3IDEzOjExICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaCwgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCwgICAKKyAgICAgIHNubXBsaWIvZ2V0b3B0LmMsIHNubXBsaWIvZ2V0dGltZW9mZGF5LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zdHJsY3B5LmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b3VsbC5jLCAgIAorICAgICAgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3VjZF9jb21wYXQuYywgc25tcGxpYi93aW5waXBlLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogZGVjbGFyZWQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCBmcm9tIHRoZQorICAgTmV0LVNOTVAgRExMIGFzIE5FVFNOTVBfSU1QT1JULiBUaGUgcmVzdWx0IGlzIGEgbWlub3IKKyAgIG9wdGltaXphdGlvbjogY29kZSB0aGF0IHVzZXMgdGhlIE5ldC1TTk1QIERMTCB3aWxsIG5vdyBjYWxsIHRoZQorICAgRExMLWV4cG9ydGVkIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnN0ZWFkIG9mIGluZGlyZWN0bHkgdmlhIHRoZQorICAgc3R1YiBpbiB0aGUgaW1wb3J0IGxpYnJhcnkuCisKKzIwMTAtMDItMjcgMTE6NTAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBSZW1vdmVkIGEgcmVkdW5kYW50IHN0cm5jYXNlY21wKCkgZGVjbGFyYXRpb24uCisKKzIwMTAtMDItMjcgMDk6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zdHJ0b2tfci5jOgorCisgICBGaXhlZCBhIHR5cG8gaW4gYSBzb3VyY2UgY29kZSBjb21tZW50LgorCisyMDEwLTAyLTI3IDA5OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTgxODkgKHJzdG9yeSk6IGJ1aWxkcyBhZ2FpbiBvbiBXaW5kb3dzLgorCisyMDEwLTAyLTI1IDE3OjUzICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgIAorICAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgIAorICAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyLnNsbiwgd2luMzIvd2luMzJkbGwuZHN3LCAgIAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICBSZXZlcnRlZCByMTgyMDcgKGRzcC9kc3cgdG8gdmNwcm9qL3NsbiBjb252ZXJzaW9uKSBleGNlcHQgdGhlCisgICBzdXBwcmVzc2lvbgorICAgbGlzdCBjaGFuZ2VzLiBUaGUgZ29hbCBvZiB0aGlzIGNvbnZlcnNpb24gd2FzIHR3b2ZvbGQ6IG5vdCBvbmx5CisgICB0byBiZSBhYmxlCisgICB0byBsb2FkIHRoZSBwcm9qZWN0IGZpbGVzIGluIE1TVkMgMjAwMiAtIDIwMDggYnV0IGFsc28gdG8gYmUgYWJsZQorICAgdG8gY29tbWl0CisgICBjaGFuZ2VzIG1hZGUgZnJvbSBpbnNpZGUgdGhlIE1TVkMgMjAwOCBJREUuIFVuZm9ydHVuYXRlbHkKKyAgIGNvbnZlcnRpbmcgZHNwL2RzdworICAgZmlsZXMgdG8gdmNwcm9qL3NsbiBmaWxlcyB3aXRoIE1TVkMgMjAwOCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvCisgICBsb2FkIHRoZQorICAgdmNwcm9qL3NsbiBmaWxlcyB3aXRoIGVhcmxpZXIgTVNWQyB2ZXJzaW9ucy4gV2h5IG9uIGVhcnRoIGRpZAorICAgTWljcm9zb2Z0CisgICBkZWNpZGUgdG8gcHV0IGEgdmVyc2lvbiBudW1iZXIgaW4gWE1MIGZpbGVzID8KKworMjAxMC0wMi0yNCAxOTo0MSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgd2luMzIvbGliYWdlbnQsICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMsIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMudmNwcm9qLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCB3aW4zMi9saWJzbm1wLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIHdpbjMyL25ldHNubXBtaWJzLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCB3aW4zMi9zbm1wYnVsa2dldCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgd2luMzIvc25tcGJ1bGt3YWxrLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQsICAgCisgICAgICB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgd2luMzIvc25tcGRlbHRhLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLAorICAgICAgICAgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCB3aW4zMi9zbm1wZ2V0LCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0LCB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIHdpbjMyL3NubXBuZXRzdGF0LCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCB3aW4zMi9zbm1wc2V0LCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMsIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCB3aW4zMi9zbm1wdGFibGUsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdGVzdCwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCB3aW4zMi9zbm1wdHJhbnNsYXRlLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIHdpbjMyL3NubXB0cmFwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIHdpbjMyL3NubXB1c20sICAgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHZhY20sIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgd2luMzIvc25tcHdhbGssICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzIuc2xuLCB3aW4zMi93aW4zMmRsbC5kc3csICAgCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIChyZXZlcnRlZCkgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBjb252ZXJ0ZWQgLmRzcC8uZHN3IGZpbGVzIHRvCisgICAudmNwcm9qLy5zbG4gZmlsZXMuIFRoaXMgaW1wbGllcyB0aGF0IHN1cHBvcnQgZm9yIE1TVkMgNi4wIGhhcworICAgYmVlbiBkcm9wcGVkIGFuZCB0aGUgbWluaW11bSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB2ZXJzaW9uCisgICByZXF1aXJlZCB0byBidWlsZCB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaXMgTWljcm9zb2Z0IFZpc3VhbAorICAgU3R1ZGlvIC5ORVQgKDIwMDIpLgorCisyMDEwLTAyLTIzIDE5OjAzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogd2hlbiBnZW5lcmF0aW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN5c3RlbQorICAgbG9jYXRpb24gYW5kIG5vIGRvbWFpbiBuYW1lIGlzIGZvdW5kIGluIC9ldGMvcmVzb2x2LmNvbmYsIHVzZQorICAgIkBuby53aGVyZSIgaW5zdGVhZCBvZiAiIi4KKworMjAxMC0wMi0yMyAxODo1MCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIG00L2FjX3Byb21wdF91c2VyLm00OgorCisgICBDSEFOR0VTOiBidWlsZGluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBubworICAgbG9uZ2VyIGludm9rZSAidGFpbCAtMSIsIHdoaWNoIGlzIG5vdCBQT1NJWC1jb21wbGlhbnQuCisKKzIwMTAtMDItMjMgMTg6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgdGVzdGluZy90ZXN0cy9UMzYwZHRsc3VkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM5OWFsaWFzOgorCisgICBSZW1vdmVkIGFsbCB0cmFuc3BvcnQgdGVzdHMgc2luY2UgaXQncyBpbXBvc3NpYmxlIHRvIGRldGVybWluZQorICAgd2hlcmUgdGhleSBjYW4gc2FmZWx5IG9wZXJhdGUgKHdhcyBzdG9wcGluZyB0YW5kZXJzJyBuaWdodGx5CisgICB0ZXN0cyBmcm9tIHN1Y2NlZWRpbmcpCisKKzIwMTAtMDItMjMgMTg6NDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZXJyb3IgYW5kIGRlYnVnZ2luZyBvdXRwdXQKKworMjAxMC0wMi0yMyAxODo0MCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0aGUgc2VydmVyIGNvbnRleHQgZ2VuZXJhdG9yIHRvIGFjdHVhbGx5LCB1bSwgcmV0dXJuIHRoZQorICAgY29udGV4dC4KKworMjAxMC0wMi0yMyAxODo0MCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIGluaXRpYWxpemUgdGhlICdyZXMnIHZhcmlhYmxlIHNpbmNlIGl0J3MgY2hlY2tlZAorCisyMDEwLTAyLTIzIDE4OjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIHByb2dyZXNzIHRvd2FyZCBhIHJlYWwgaW1wbGVtZW50YXRpb24KKworMjAxMC0wMi0yMyAxODozOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIHRsc3RjcCBjdG9yIGludm9jYXRpb24KKworMjAxMC0wMi0yMyAxODozOCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oOgorCisgICByZXF1aXJlIFRMU0Jhc2UKKworMjAxMC0wMi0yMyAxODozNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkZWQgaG9zdCBpZGVudGlmaWVyIGFzIG91dHB1dAorCisyMDEwLTAyLTIzIDE4OjM1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzaWduaWZpY2FudCBtb3JlIHdvcmsgb24gdGhlIFRMUyBUQ1AgZG9tYWluCisKKzIwMTAtMDItMjMgMTc6NDMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE5MyAoanNhZnJhbmVrKTogcmVyYW4gYXV0b3JlY29uZiBmb3IgdGhlIHRydW5rCisgICBhbmQgdGhlIDUuNSBicmFuY2guCisKKzIwMTAtMDItMjMgMTQ6NTggIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgdXNlIE5FVFNOTVBfUFJJeiBpbnN0ZWFkIG9mICV6CisKKzIwMTAtMDItMjMgMTI6MjcgIGpzYWZyYW5laworCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRml4ZWQgY29tcGlsYXRpb24gd2l0aCBycG0tNC42LgorICAgVHVybiBvbiB0aGUgbGVnYWN5IEFQSSB3aGVuIHJwbS00LjYgaXMgZGV0ZWN0ZWQuCisKKzIwMTAtMDItMjMgMDc6MzggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmV2ZXJ0ZWQgcjE4MDAwIChkaXNhYmxpbmcgU0lHQUxSTSBzdXBwb3J0KSBiZWNhdXNlIHRoaXMgaW52b2x2ZXMKKyAgIGEgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UuCisKKzIwMTAtMDItMjMgMDA6MzYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRDUERvbWFpbi5jOgorCisgICBmaXggdHlwbyBpbiBjb21tZW50CisKKzIwMTAtMDItMjMgMDA6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgZGVidWcgbXNnIHR3ZWFrczsgdXNlIG5ldyB0cmFucG9ydCBmdW5jdGlvbnMKKyAgIC0gYWRkIGRlYnVnIGhlYWRlciBmb3Igc25tcCB2ZXJzaW9uCisgICAtIGFkZCBsZW5ndGggdG8gZGVidWcgc2VuZC9yZWNlaXZlIG1lc3NhZ2VzCisgICAtIHVzZSBuZXcgdHJhbnBvcnQgZnVuY3Rpb25zIGZvciBzZW5kL3JlY3YvZmluZGluZyBwZWVyIGFkZHJlc3MKKworMjAxMC0wMi0yMyAwMDoyNSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhZGQgbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcsIG5ldHNubXBfdHJhbnNwb3J0X3NlbmQgJgorICAgbmV0c25tcF90cmFuc3BvcnRfcmVjdgorICAgLSBtb3ZlcyB0cmFuc3BvcnQgbWFuaXB1bGF0aW9uIGludG8gdHJhbnNwb3J0IGNvZGUKKyAgIC0gY2VudHJhbCBwbGFjZSBmb3IgbG9nZ2luZy9kZWJ1Z2dpbmcgc2VudC9yZWNlaXZlZCBkYXRhCisKKzIwMTAtMDItMjIgMTk6MzMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vCisgICBsb25nZXIgaW52b2tlICJ0YWlsIC0xIiwgd2hpY2ggaXMgbm90IFBPU0lYLWNvbXBsaWFudC4KKworMjAxMC0wMi0yMiAxOToyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE4Ni4gUmVncmVzc2lvbiB0ZXN0IDM0ICh3aGV0aGVyIGF1dGhlbnRpY2F0aW9uCisgICBmYWlsdXJlIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkKSBwYXNzZXMgbm93IGFnYWluLgorCisyMDEwLTAyLTIyIDA5OjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBtYWRlIHN1cmUgdGhhdCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIGRvZXMKKyAgIG5vdCBjcmVhdGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIE1JQiBzdWJ0cmVlIHJlZ2lzdHJ5LgorCisyMDEwLTAyLTIyIDA5OjExICBidmFzc2NoZQorCisgICAqIGFnZW50LCBhcHBzLCBhcHBzL3NubXBuZXRzdGF0OgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDItMjIgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgbGliZWF5MzIgKE9wZW5TU0wpIGNvbmZpZ3VyZSB0ZXN0IGZvcgorICAgTWluR1cuCisKKzIwMTAtMDItMjIgMDg6MzEgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBsaWJlYXkzMiAoT3BlblNTTCkgY29uZmlndXJlIHRlc3QgZm9yCisgICBNaW5HVy4KKworMjAxMC0wMi0yMiAwODoxMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQnVpbGRzIGFnYWluIHdpdGggTWluR1cgd2hlbiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKworMjAxMC0wMi0yMSAxODo1OCAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9saWJzZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHdpbjMyL3dpbjMyZGxsLmRzdzoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiByZW5hbWVkIGxpYnNkbGwuZHN3IGludG8gd2luMzJkbGwuZHN3LgorICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIGxpbmtpbmcgdGhlIE5ldC1TTk1QCisgICBhcHBsaWNhdGlvbnMgd2l0aCBuZXRzbm1wLmRsbCBieSBhZGRpbmcgYWxsIGFwcGxpY2F0aW9uIHByb2plY3RzCisgICB0byB0aGUgc2FtZSB3b3Jrc3BhY2UgdGhhdCBpcyB1c2VkIGZvciBidWlsZGluZyB0aGUgRExMLgorICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIG5ldHNubXAuZGxsIGxlc3MgZXJyb3IKKyAgIHByb25lIGJ5IGxldHRpbmcgdGhlIGNvbXBpbGVyIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlCisgICBwcmVwcm9jZXNzb3Igc3ltYm9sIE5FVFNOTVBfVVNFX0RMTCBoYXMgbm90IGJlZW4gZGVmaW5lZC4KKworMjAxMC0wMi0yMSAxODo1MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQWRkZWQgbGlic25tcC5kZWYgdG8gdGhlIGxpc3Qgb2YKKyAgIGxpYnNubXBfZGxsLmRzcCBzb3VyY2UgZmlsZXMgc3VjaCB0aGF0IHRoZSBETEwgaXMgcmVidWlsdCB3aGVuCisgICB0aGUgLmRlZiBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLgorCisyMDEwLTAyLTIxIDE4OjQ1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGV4cG9ydGVkIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKCkgZnJvbQorICAgbmV0c25tcC5kbGwuCisKKzIwMTAtMDItMjEgMTc6MzkgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1vcmUgV2luMzIgSVB2NiBzb3VyY2UgY29kZSBjb25zaXN0ZW5jeSBpbXByb3ZlbWVudHM6CisgICAtIE1vdmVkICN1bmRlZiBIQVZFX0lGX05BTUVUT0lOREVYIGZyb20gc25tcGxpYi8qLmMgdG8KKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLgorICAgLSBDaGFuZ2VkIHRoZSBnbG9iYWwgaW42YWRkcl9hbnkgdmFyaWFibGUgaW50byBhIHN0YXRpYyB2YXJpYWJsZQorICAgc3VjaCB0aGF0CisgICBtdWx0aXBsZSBkZWZpbml0aW9ucyBkbyBub3QgdHJpZ2dlciBhIGxpbmtlciBlcnJvci4KKyAgIC0gQWRkZWQgdHlwZWRlZnMgZm9yIHVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QgYW5kIGludDE2X3QuCisgICAtIFJlcGxhY2VkICcjaWYgTkVUU05NUF9FTkFCTEVfSVBWNicgYnkgJyNpZmRlZgorICAgTkVUU05NUF9FTkFCTEVfSVBWNicuCisKKzIwMTAtMDItMjEgMDg6MzAgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYzoKKworICAgbWFrZSBzdXJlIHRoYXQgSU5BRERSX05PTkUgaXMgZGVmaW5lZCAoZml4ZXMgYnVpbGQgZXJyb3Igb24KKyAgIFNvbGFyaXMpCisKKzIwMTAtMDItMTkgMTk6MzkgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFN5bmNocm9uaXplZCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBhbmQKKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLgorCisyMDEwLTAyLTE5IDE0OjE4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGxpYnNubXAgYnVpbGRzIGFnYWluIGFzIGEgRExMIHdoZW4gSVB2NiBpcworICAgZW5hYmxlZC4KKworMjAxMC0wMi0xOSAxMzoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRm9sbG93IHVwIGZvciByMTgxNjQ6IHN5bmNocm9uaXplZCBsaWJzbm1wLmRlZi5pbiB3aXRoCisgICBsaWJzbm1wLmRlZgorCisyMDEwLTAyLTE5IDA5OjA1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogYWRkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiBpbgorICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggc3VjaCB0aGF0IHRoZSBNU1ZDIGNvbXBpbGVyCisgICBkb2Vzbid0IGdldCBjb25mdXNlZCBieSB0aGUgbWFsbG9jIHJlZGVmaW5pdGlvbiB3aGVuIGJ1aWxkaW5nCisgICBsaWJzbm1wIGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjU5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgRXhwb3J0ZWQgbmV0c25tcF9wYXJzZV9hcmdzKCkgc3VjaCB0aGF0IHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMKKyAgIGJ1aWxkIGFnYWluIHdoZW4gbGlic25tcCBpcyBidWlsdCBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1vdmVkIE1TVkMgT3BlblNTTCBsaW5rZXIgc2V0dGluZ3MgZnJvbQorICAgc25tcGxpYi9rZXl0b29scy5jIHRvIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIHN1Y2ggdGhhdAorICAgdGhlc2Ugc2V0dGluZ3MgYXJlIG5vdCBvbmx5IGVmZmVjdGl2ZSB3aGVuIGJ1aWxkaW5nIHNubXBsaWIgYXMgYQorICAgc3RhdGljIGxpYnJhcnkgYnV0IGFsc28gd2hlbiBhbnkgTmV0LVNOTVAgYXBwbGljYXRpb24gaXMgYnVpbHQKKyAgIHRoYXQgbGlua3Mgd2l0aCBzbm1wbGliIGFzIGEgc3RhdGljIGxpYnJhcnkgb3IgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6MzIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBXaW4zMiBjbGVhbnVwOiBNU1ZDIC8gRExMIHRlc3RzIG5vdyB1c2UgdGhlIG9mZmljaWFsbHkgZW5kb3JzZWQKKyAgIG1hY3JvIG5hbWVzLgorCisyMDEwLTAyLTE5IDA3OjUwICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgQnVpbGRzIGFnYWluLgorCisyMDEwLTAyLTE5IDA2OjQ3ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBORVdTOiBzbm1wbGliOiBQQVRDSDogMjk0Mjk0MDogZnJvbSAiQmlsbCBGZW5uZXIiOiBBZGQgYSBuZXcKKyAgIGZ1bmN0aW9uLCBuZXRzbm1wX3BhcnNlX2FyZ3MsIHRoYXQgaXMgbGlrZSBzbm1wX3BhcnNlX2FyZ3MgYnV0CisgICB0YWtlcyBhbiBhZGRpdGlvbmFsIGJpdG1hc2ssIGZsYWdzLCB0byBhZmZlY3QgdGhlIGJlaGF2aW91ci4gQWxzbworICAgcmVtb3ZlIHRoZSBtYWdpYyBoYW5kbGluZyBvZiBzb21lIGFwcGxpY2F0aW9uIG5hbWVzLgorCisyMDEwLTAyLTE4IDE0OjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2JpbjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAyLTE4IDE0OjIwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIFNvcnRlZCBuYW1lcyBvZiBzb3VyY2UgZmlsZXMgYWxwaGFiZXRpY2FsbHkuCisKKzIwMTAtMDItMTggMTM6MDMgIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgc25tcGxpYi93aW5zZXJ2aWNlLmMsIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgd2luMzIvbmV0c25tcG1pYnNzZGssICAgCisgICAgICB3aW4zMi9zbm1wZHNkaywgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBkcm9wcGVkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIE5ldC1TTk1QIHdpdGgKKyAgIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuMCB3aXRob3V0IHBsYXRmb3JtIFNESy4gQnVpbGRpbmcKKyAgIE5ldC1TTk1QIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wICsgUFNESyBvciBhbnkgbGF0ZXIKKyAgIHZlcnNpb24gb2YgTVNWQyBpcyBzdGlsbCBwb3NzaWJsZSBob3dldmVyLgorICAgCisgICBOb3RlOiBpZiBpbiB0aGUgZnV0dXJlIGZvciB3aGF0ZXZlciByZWFzb24gaXQgc2hvdWxkIGJlY29tZQorICAgbmVjZXNzYXJ5IGFnYWluIHRvIGJlIGFibGUgdG8gYnVpbGQgTmV0LVNOTVAgd2l0aCBNU1ZDIHdpdGhvdXQKKyAgIHJlbHlpbmcgb24gdGhlIHBsYXRmb3JtIFNESyBoZWFkZXJzLCBwbGVhc2UgI2lmZGVmIG91dCB0aGUgTUlCCisgICBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZSBQU0RLIGhlYWRlcnMgaW5zdGVhZCBvZiBzcGxpdHRpbmcgdGhlCisgICB3b3Jrc3BhY2UgZmlsZXMgYWdhaW4uCisKKzIwMTAtMDItMTggMTI6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgZG9zMnVuaXguCisKKzIwMTAtMDItMTggMDk6NDUgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIFNvdXJjZSBjb2RlIGNsZWFudXA6CisgICAtIE1vdmVkIGRvY3VtZW50YXRpb24gb2YgbmV0c25tcF9sYXJnZV9mZF9zZXQgbWVtYmVycyB0byB0aGUKKyAgIGNvbW1lbnQKKyAgIGJsb2NrIGp1c3QgYWJvdmUgdGhlIGRlZmluaXRpb24gb2YgdGhpcyB0eXBlLgorICAgLSBSZW1vdmVkIHN1cGVyZmx1b3VzICdleHRlcm4gIkMiJyBzcGVjaWZpZXI6IHRoaXMgbGlua2FnZQorICAgc3BlY2lmaWVyCisgICBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gZGVjbGFyYXRpb25zIG9mIHZhcmlhYmxlcyBvZiBmdW5jdGlvbnMgYW5kCisgICBub3QKKyAgIG9uIHR5cGVkZWZzIG9yIHN0cnVjdCBkZWZpbml0aW9ucy4KKyAgIC0gUmFuIHRoaXMgaGVhZGVyIGZpbGUgdGhyb3VnaCBpbmRlbnQuCisKKzIwMTAtMDItMTggMDk6MjYgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgQ2hhbmdlczoKKyAgIC0gQnVpbGRzIGFnYWluIHdpdGggTVNWQy4KKyAgIC0gRml4ZWQgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgTVNWQyAocGFzc2luZyBpbnQKKyAgIGluc3RlYWQgb2YgdV9zaG9ydCB0byBodG9ucygpIC8gZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgd2VyZQorICAgbWlzc2luZyBiZWNhdXNlIG9mIG1pc3NpbmcgI2luY2x1ZGUgZGlyZWN0aXZlcykuCisKKzIwMTAtMDItMTYgMTc6MTYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogVGhlIGhlYWRlciBmaWxlIDxzeXMvdGltZWIuaD4gaXMgbm8gbG9uZ2VyCisgICBpbmNsdWRlZCBmcm9tIDxuZXQtc25tcC90eXBlcy5oPi4gT3I6IHRoZSBoZWFkZXIgZmlsZQorICAgPHN5cy90aW1lYi5oPiB3aWxsIGhhdmUgdG8gYmUgaW5jbHVkZWQgZXhwbGljaXRseSBpbiBzb3VyY2UgZmlsZXMKKyAgIHRoYXQgbmVlZCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGZ0aW1lKCkuCisgICAKKyAgIE5vdGU6IGNvbXBhcmVkIHRvIHIxODAyNCBhbmQgYmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QKKyAgIEJTRCBzeXN0ZW1zIC0tIDxzeXMvdGltZWIuaD4gd2FzIG9ubHkgaW5jbHVkZWQgZnJvbQorICAgPG5ldC1zbm1wL3R5cGVzLmg+IG9uIEJTRCBzeXN0ZW1zIGluIHJldmlzaW9ucyByMTgwMjUuLnIxODE1Mi4KKworMjAxMC0wMi0xNCAxOToyOSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOgorCisgICBCdWlsZHMgbm93IG9uIEZyZWVCU0QgdmVyc2lvbiA4LjAuCisKKzIwMTAtMDItMTMgMjA6NTkgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oOgorCisgICBBZGp1c3QgdGhlIHBsYWNlbWVudCBvZiA7J3MgaW4gb3JkZXIgdG8KKyAgIGEpIEF2b2lkIHdhcm5pbmdzIGFib3V0IHNwdXJpb3VzIHNlbWljb2xvbnMKKyAgIGIpIE5vdCBoYXZlIHVudGVybWluYXRlZCBkZWNsYXJhdGlvbnMgaW4gaGVhZGVycworCisyMDEwLTAyLTEyIDAyOjU3ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYzoKKworICAgQ0hBTkdFUzogbWliMmM6IHVwZGF0ZSBpbmxpbmUgZG9jdW1lbnRhdGlvbjsgYWRkIHN0b3JhZ2V0eXBlIHRlc3QKKyAgIGZvciBjb2x1bW5zCisKKzIwMTAtMDItMTIgMDE6NTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBmaXggdHlwbyBpbiBkZWZpbmUKKworMjAxMC0wMi0xMiAwMTowNSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZml4IHNlZCBwcm9jZXNzaW5nIG9uIHdoaXRlLXNwYWNlIGFkZGluZyBzb2xhcmlzIG1hY2hpbmVzCisKKzIwMTAtMDItMTAgMjM6NTYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGFkZCB0b3Agc3JjZGlyIHRvIGNwcCBzZWFyY2ggcGF0aAorCisyMDEwLTAyLTEwIDIzOjUyICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgZnJlZWJzZCBuZWVkcyB0aW1lLmggYWJvdmUgdGltZWIuaAorCisyMDEwLTAyLTEwIDIzOjM3ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICB1c2Ugc2VkIHdpdGggbXVsdGlyZXBsYWNlIG9uIGEgbGluZSB0byBmaXggcG9zc2libGUgd2hpdGVzcGFjZQorICAgaXNzdWUgb24gc29sYXJpcworCisyMDEwLTAyLTEwIDIzOjIyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBiZWdpbm5pbmcgd29yayBmb3IgVExTIHNlcGFyYXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB3aXRoIGEgYmFzZQorICAgZmlsZQorCisyMDEwLTAyLTEwIDIzOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaDoKKworICAgbW92ZSBiYXNlIHRyYW5zcG9ydCBjcmVhdGlvbiBmdW5jdGlvbiBvdXQgb2YgbGludXggaWZkZWZzCisKKzIwMTAtMDItMTAgMjM6MjEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmVkIGFub3RoZXIgZXJyb3IgbG9nZ2luZyBmdW5jdGlvbgorCisyMDEwLTAyLTEwIDIzOjIwICBoYXJkYWtlcgorCisgICAqIG1pYnMvTkVULVNOTVAtVEMudHh0OgorCisgICBhZGRlZCBUTFMgb3ZlciBUQ1AKKworMjAxMC0wMi0xMCAxNjozOSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogTGludXg6IEltcHJvdmVkIEV0aGVyTGlrZS1NSUIgc3VwcG9ydAorICAgUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMKKworMjAxMC0wMi0xMCAxMDowNCAgZHRzMTIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IFN1cHBvcnQgbnVsbC1ieXRlcyBpbiBvY3RldCBzdHJpbmdzCisgICBQYXRjaCBzdXBwbGllZCBieSBUb21teSBCZWFkbGUKKworMjAxMC0wMi0xMCAwMDo1OSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlZCBUTFMgaW5mcmFzdHJ1Y3R1cmUgaW50byBhIGJhc2UgZG9tYWluIGZpbGUKKworMjAxMC0wMi0xMCAwMDowNCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIG1vdmVkIHNvY2tldDYgZnVuY3Rpb25zIHRvIHRoZSBpcHY2IGJhc2UKKworMjAxMC0wMi0xMCAwMDowMyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHdoaXRlIHNwYWNlIGZvcm1hdHRpbmcKKworMjAxMC0wMi0xMCAwMDowMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCB1ZHBfc2VuZC9yZWN2IHRvIHVkcGJhc2UKKworMjAxMC0wMi0xMCAwMDowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZSBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCBpbnRvIHNvY2tldGJhc2UKKworMjAxMC0wMi0xMCAwMDowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBtb3ZlIGlwdjQgc3BlY2lmaWMgVURQIHRyYW5zcG9ydCBjcmVhdGlvbiB0byB1ZHBpcHY0IGJhc2UKKworMjAxMC0wMi0xMCAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIG1hZGUgY29tbW9uIGZ1bmN0aW9ucyBiZSByZWZlcmVuY2VkIGRpcmVjdGx5IGJ5IHRoZSB0cmFuc3BvcnRzCisgICBhbmQgcmVtb3ZlZCBvcmlnaW5hbCBmdW5jdGlvbmFsaXR5OyB0aGV5IHdlcmUgc3RhdGljIHNvIHRoZXJlIGlzCisgICBubyBiYWNrd2FyZHMgY29tcGF0IGlzc3VlcworCisyMDEwLTAyLTEwIDAwOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIHNvY2tldCBiYXNlZCBjbG9zZSB0byBhIHNvY2tldCBiYXNlZCBkb21haW4gY29tbW9uIHRvIG1hbnkKKyAgIHRoaW5ncworCisyMDEwLTAyLTA5IDIzOjU5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmM6CisKKyAgIG1vdmUgVENQIGNvbW1vbiBmdW5jdGlvbnMgdG8gYSBUQ1BCYXNlIGRvbWFpbiBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAyLTA5IDIzOjU3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB3YXJuaW5nIGNsZWFudXAKKworMjAxMC0wMi0wOSAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgdG1TdGF0ZVJlZmVyZW5jZSBzaG91bGQgYmUgdXNpbmcgdGhlIGluZGV4ZWQgYWRkcl9wYWlyCisKKzIwMTAtMDItMDkgMjM6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtYWtlIG5ldHNubXBfZHRsc3VkcF9jbG9zZSBtYWtlIHVzZSBvZiBuZXRzbm1wX2Jhc2V1ZHBfY2xvc2UKKworMjAxMC0wMi0wOSAyMzo1NSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBiYXNlIFVEUCBzb2NrZXQgY3JlYXRpb24gaW50byBhIGNvbW1vbiBiYXNlIGZ1bmN0aW9uIGFuZAorICAgbWFkZSB1c2Ugb2YgaXQKKworMjAxMC0wMi0wOSAyMzo1NCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oOgorCisgICBwcm9wZXIgX0ggaWZkZWYgY2hlY2tzCisKKzIwMTAtMDItMDkgMjM6NTQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgYWRkZWQgYSByYXcgVURQIGJhc2UgZG9tYWluCisKKzIwMTAtMDItMDkgMjM6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIGNyZWF0ZWQgYSBVRFAgSVB2NCBiYXNlOyBtb3ZlZCBhbmQgcmV1c2VkIG1vcmUgaW5mcmFzdHJ1Y3R1cmUKKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgaXB2NCBhZGRyZXNzIGZvcm1hdHRpbmcgaW50byBzbm1wSVB2NEJhc2VEb21haW4KKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICB2NiBkb21haW4gaW5mcmFzdHJ1Y3R1cmUgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo1MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBWNEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmM6CisKKyAgIHY2IGRvbWFpbiBpbmZyYXN0cnVjdHVyZSBmaWxlcworCisyMDEwLTAyLTA5IDIzOjUwICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQVjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgTmV3IElQdjQgYW5kIElQIGJhc2UgdHJhbnNwb3J0IGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NDggIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBkb24ndCBkb3VibGUgaW5jbHVkZSB0cmFuc3BvcnQgbW9kdWxlcworCisyMDEwLTAyLTA5IDIzOjQ4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmg6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQ1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaDoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGNoZWNrIGZvciBhbmQgcmVwb3J0IGNvbmZpZ19lcnJvcnMgaW4gdHJhbnNwb3J0IGhlYWRlcnMKKworMjAxMC0wMi0wOSAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgYWxsb3cgYSBORVRTTk1QX1FVSUNLX0NIRUNLIGVudiB2YXJpYWJsZSB0byBieXBhc3MgaGVhZGVyIGNoZWNrcworCisyMDEwLTAyLTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgYmV0dGVyIGNvbW1lbnRzCisKKzIwMTAtMDItMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBjaGVjayBmb3IgY29uZmlnX3JlcXVpcmUgbWFjcm9zIGluIHRyYW5zcG9ydCBoZWFkZXJzIGZvcgorICAgZm9yY2UtaW5jbHVkaW5nIG9mIG90aGVyIHRoaW5ncworCisyMDEwLTAyLTA5IDIzOjQxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgcGVybC9hZ2VudC9hZ2VudC54cywgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgZGVmaW5lIGEgc3RhbmRhcmRpemVkIGluZGV4ZWQgYWRkcl9wYWlyIGluc3RlYWQgb2YgdXNpbmcgb25lCisgICBsYWJlbGVkIG9ubHkgZm9yIFVEUCBldmVyeXdoZXJlCisKKzIwMTAtMDItMDkgMjM6NDAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZpeCB0cmFuc3BvcnQgcHJlZml4IGxpc3QgZm9yIGluY29taW5nIG1lc3NhZ2VzCisKKzIwMTAtMDItMDkgMjM6NDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHJlbW92ZSB0aGUgc2VjdXJpdHkgbGV2ZWwgZnJvbSB0aGUgVFNNIGNhY2hlOyBwcmV2aW91cyBleGlzdGVuY2UKKyAgIGZyb20gZnJvbSBhIGRyYWZ0IGNvcHkgb2YgdGhlIFRTTSBSRkMgYW5kIGlzIG5vdyBzdG9yZWQgZW50aXJlbHkKKyAgIGluIHRoZSB0bSByZWZlcmVuY2UKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgaW1wbGVtZW50IGluY29taW5nIFRTTSBwcm9jZWR1cmVzIGFjY29yZGluZyB0byBSRkMgdGV4dAorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBpbXBsZW1lbnQgb3V0Z29pbmcgVFNNIHByb2NlZHVyZXMgYWNjb3JkaW5nIHRvIFJGQyB0ZXh0CisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg6CisKKyAgIGNyZWF0ZSBkZWZpbmVkIHNpemVkIGFycmF5IGFuZCBsZW5ndGggdmFyaWFibGUKKworMjAxMC0wMi0wNSAwOTo1MiAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgZmlsZWRlc2NyaXB0aW9yIGxlYWsgaW4gRXRoZXJsaWtlLU1JQiBhbmQKKyAgIFJNT04tTUlCCisKKzIwMTAtMDItMDQgMTU6NTcgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcmVwb3J0IHJlYWwgaWZTcGVlZCBvZiBuZXR3b3JrIGludGVyZmFjZSBldmVuIGl0CisgICBpcyBkb3duLgorICAgU29tZSBpbnRlcmZhY2VzIGNhbiByZXBvcnQgdGhlaXIgcmVhbCBzcGVlZCwgZXZlbiB0aGV5IGFyZSBkb3duLgorICAgQW5kIGlmIHRoZXkgY2FuJ3QsIHRoZSBmYWxsYmFjayB0byAxME1icHMgaXMgc3RpbGwgdGhlcmUuCisKKzIwMTAtMDItMDEgMTQ6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jOgorCisgICBGaXhlZCB0aGUgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgZmlsZQorICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLgorCisyMDEwLTAyLTAxIDE0OjQ1ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMiwgc25tcGxpYi9rZXl0b29scy5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIHByb2NlZHVyZSBmb3IgYnVpbGRpbmcKKyAgIHdpdGggU05NUHYzIHN1cHBvcnQgZW5hYmxlZCAoT3BlblNTTCkuCisKKzIwMTAtMDItMDEgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgIAorICAgICAgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9tZDUuYywgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFsbCBjYWxscyB0byBmcmVlKCkgYXJlIGludGVyY2VwdGVkIHdoZW4gYnVpbGRpbmcKKyAgIHdpdGggZG1hbGxvYworICAgc3VwcG9ydCBlbmFibGVkLiBJbmNsdWRlZCA8ZG1hbGxvYy5oPiBpbiB0aG9zZSBzb3VyY2UgZmlsZXMgd2hlcmUKKyAgIGl0IHdhcyBub3QKKyAgIHlldCBpbmNsdWRlZCwgYW5kIHByb3ZpZGVkIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgZnJlZSgpIHdoZXJlCisgICB0aGUgYWRkcmVzcyBvZgorICAgdGhpcyBmdW5jdGlvbiB3YXMgdGFrZW4gKERtYWxsb2MgY2FuIG9ubHkgaW50ZXJjZXB0IGZyZWUoKSB3aGVuCisgICBpdCBpcyBjYWxsZWQKKyAgIGRpcmVjdGx5IGJ1dCBub3Qgd2hlbiBpdCBpcyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIpLgorCisyMDEwLTAyLTAxIDEwOjQ5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgTkVXUzogYnVpbGRpbmc6IEJ1aWxkaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBzdXBwb3J0IGVuYWJsZWQgaXMKKyAgIGFnYWluIHBvc3NpYmxlLgorCisyMDEwLTAyLTAxIDAxOjA1ICB0YW5kZXJzCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiAnbWFrZSB0ZXN0IFRFU1RPUFRTPSItUCB0Y3AiJyB3b3JrcyBmaW5lIG5vdworCisyMDEwLTAxLTMxIDA4OjAyICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgYW4gc2ggc3ludGF4IGVycm9yIGluIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdAorICAgdGhhdCB3YXMgdHJpZ2dlcmVkIG9uIHN5c3RlbXMgd2l0aG91dCBsaWJjcnlwdG8gYW5kIHdpdGhvdXQKKyAgIGxpYmVheTMyLgorICAgVGhlIGZvbGxvd2luZyBlcnJvciB3YXMgcmVwb3J0ZWQ6CisgICBjb25maWd1cmVbMzMxMzZdOiB4OiB1bmtub3duIHRlc3Qgb3BlcmF0b3IKKworMjAxMC0wMS0yOSAyMDowNyAganNhZnJhbmVrCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlOgorCisgICBFbGFib3JhdGUgb24gcmV2LiAxODA4OSBhbmQgYWRqdXN0IHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHRoZQorICAgKiAgICAqcmVhbGx5IHdvcmtpbmcgb25lKi4gIDIwMTAtMDEtMjkgMTk6MTEgIGpzYWZyYW5laworCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlOgorCisgICBGaXggdGVzdCAzNSB3aGVuIGNvbmZpZ3VyZSBvcHRpb24gJy0td2l0aC10ZW1wLWZpbGUtcGF0dGVybicgd2FzCisgICB1c2VkIGFuZCB0aGUgZGlyZWN0b3J5IGZvciB0ZW1wLiBmaWxlcyBkb2VzIG5vdCBleGlzdCB5ZXQuCisKKzIwMTAtMDEtMjkgMTU6MDcgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvY2xvc2VkaXIuYywgICAKKyAgICAgIHNubXBsaWIvZ2V0dGltZW9mZGF5LmMsIHNubXBsaWIvb3BlbmRpci5jLCBzbm1wbGliL3JlYWRkaXIuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIE1vdmVkIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgb3BlbmRpcigpLCByZWFkZGlyKCksIGNsb3NlZGlyKCkgYW5kCisgICBnZXR0aW1lb2ZkYXkoKSByZXBsYWNlbWVudHMgZm9yIE1TVkMgZnJvbSBzbm1wbGliL3N5c3RlbS5jIHRvCisgICBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMgaW4gc25tcGxpYi4KKworMjAxMC0wMS0yOSAwODo1NyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDb25maWd1cmUgc2NyaXB0IGNvbnNpc3RlbmN5IGltcHJvdmVtZW50OiByZW5hbWVkIHRoZSB2YXJpYWJsZQorICAgInNhdmVkX0xJQlMiIGludG8gIm5ldHNubXBfc2F2ZV9MSUJTIi4KKworMjAxMC0wMS0yOSAwNjozOSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IENoZWNrIHRoZSBzaXplIG9mIHN1bl9wYXRoIGFuZCB1c2UgdGhhdCB0bworICAgZ2VuZXJhdGUgdGhlIG1heGltYWwgc2l6ZSBzdHJpbmdzIGZvciBzdHJlc3NpbmcgY29tMnNlY3VuaXguCisKKzIwMTAtMDEtMjcgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorCisgICBORVdTOiBNaW5HVzogcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIGlzIGFnYWluIHBvc3NpYmxlCisgICAoJ21ha2UgdGVzdCcpLgorCisyMDEwLTAxLTI3IDE0OjQzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogQ3lnd2luOiBidWlsZGluZyB3aXRoIGFub3RoZXIgT3BlblNTTCBwYWNrYWdlIHRoYW4gdGhlCisgICBDeWd3aW4tcHJvdmlkZWQgcGFja2FnZXMgb3BlbnNzbCBhbmQgb3BlbnNzbC1kZXZlbCBpcyBhZ2FpbgorICAgcG9zc2libGUuCisgICBORVdTOiBNaW5HVzogYnVpbGRpbmcgd2l0aCBPcGVuU1NMIHdvcmtzIGFnYWluLgorCisyMDEwLTAxLTI2IDIxOjI3ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdGhlIGNvbnRleHQgYXJndW1lbnQgb2Ygc2VuZF92M3RyYXAsCisgICBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQgYW5kIG5ldHNubXBfc2VuZF90cmFwcyByZWZlciB0byBhCisgICBjb25zdCBjaGFyKi4KKworMjAxMC0wMS0yNiAyMToyNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6CisKKyAgIENvcnJlY3QgbWlzc3BlbGxpbmcgLSAjZWxzaWYgdG8gI2VsaWYKKworMjAxMC0wMS0yNiAyMToyMSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQXBwYXJlbnRseSBub3QgYWxsIHN5c3RlbXMgZGVmaW5lIElORVRfQUREUlNUUkxFTiBzbyBhZGQgaXQgaWYgaXQKKyAgIGlzIG1pc3NpbmcuCisKKzIwMTAtMDEtMjYgMTU6NDYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9URVNUQ09ORi5zaDoKKworICAgQWRkZWQgbmV0c3RhdCBwYXRoIGZvciBNaW5HVy4KKworMjAxMC0wMS0yNiAxNTowMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgZml4IHN0YXQgbmFtZXMKKworMjAxMC0wMS0yNiAxNTowMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB1c2UgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgdXBkYXRlIGNvbW1lbnRzIHRvIHJlZmxlY3QgUkZDNTU5MSBhcyB0aGUgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUKKyAgIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDEtMjYgMTE6NDMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmg6CisKKyAgIE5FV1M6IEN5Z3dpbjogQlVHOiAyOTM5MTY4OiBieXRlIG9yZGVyIG9mIHVkcExvY2FsUG9ydCBpcyBub3cKKyAgIGNvcnJlY3QuCisKKzIwMTAtMDEtMjYgMTA6NDYgIGJ2YXNzY2hlCisKKyAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmw6CisKKyAgIE5FV1M6IEN5Z3dpbjogQlVHOiAyOTM5MTY4OiBmaXhlZCB0ZXN0IGluZnJhc3RydWN0dXJlICgibWFrZQorICAgdGVzdCIpLiBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IHVzaW5nIHRoZSBwcm9wZXIgZW52aXJvbm1lbnQKKyAgIHNlcGFyYXRvciBjaGFyYWN0ZXIgYW5kIGJ5IGFkZGluZyB0aGUgcGF0aCBvZiB0aGUgbmV0c3RhdAorICAgZXhlY3V0YWJsZSBmb3IgQ3lnd2luIGluIHRlc3RpbmcvVEVTVENPTkYuc2guCisKKzIwMTAtMDEtMjYgMDk6MjcgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggcmFyZSByYWNlIGNvbmRpdGlvbiB3aGVuIHJlYWRpbmcgUlBNCisgICBkYXRhYmFzZS4KKyAgIE9sZCBycG0gdmVyc2lvbnMgcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBIZWFkZXIgd2hlbiBhbm90aGVyIFJQTQorICAgaW5zdGFuY2UgaG9sZHMKKyAgIGRhdGFiYXNlIGxvY2tzLiBJLmUuIHNubXBkIHNvbWV0aW1lcyBjcmFzaGVzIHdoZW4gcmVhZGluZworICAgaHJfc3dJbnN0IGFuZCBycG0gaXMKKyAgIGluc3RhbGxpbmcvdXBkYXRpbmcvcmVtb3ZpbmcgYW5vdGhlciBwYWNrYWdlLiBBcyBhIHNvbHV0aW9uLAorICAgd2hvbGUgUlBNIGNhY2hlCisgICBpcyB0aHJvd24gYXdheSBhbmQgcmUtcmVhZCB3aGVuIHdlIGdvdCBhbiBlcnJvciBmcm9tIGxpYnJwbS4gVGhlCisgICB3aG9sZSBwcm9jZXNzCisgICBpcyByZXN0YXJ0ZWQgb25seSB0aHJlZSB0aW1lcywgdG8gcHJldmVudCBlbmRsZXNzIGxvb3AuCisKKzIwMTAtMDEtMjUgMjI6MTYgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBEbyBub3QgY2hlY2sgaWYgdmFsdWVzIG9mIHR5cGUgc2l6ZV90CisgICBhcmUgbGVzcyB0aGFuIDAuCisKKzIwMTAtMDEtMjUgMjI6MTEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBDaGVjayB0aGUgcmFuZ2Ugb2Ygb2lkIHZhbHVlcyB0b3dhcmRzIHRoZSBtYXhpbXVtCisgICBvaWQgdmFsdWUsIG5vdFVMT05HX01BWAorCisyMDEwLTAxLTI1IDIwOjAxICByc3RvcnkKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBvbmx5IGJhaWwgb24gbWlzc2luZyBsaWJpcGhscGFwaSBmb3IgeHdpbnNvY2syCisKKzIwMTAtMDEtMjUgMTk6NTcgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlbmFtZSBNQVhfU1RBVFMgdG8gTkVUU05NUF9TVEFUX01BWF9TVEFUUworCisyMDEwLTAxLTI1IDE5OjUzICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jOgorCisgICB1cGRhdGUgZm9yIG5ldyBwYXRoIHRvIHNubXBfZ2V0X3N0YXRpc3RpY3M7IGNoZWNrIGZvciBpbmRleAorICAgb3ZlcmZsb3cKKworMjAxMC0wMS0yNSAxOTo0NCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oOgorCisgICB1cGRhdGUgZm9yIG5ldyBwYXRoIHRvIHNubXBfZ2V0X3N0YXRpc3RpY3MKKworMjAxMC0wMS0yNSAxNjowMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgdXNlICpjdXJyZW50KiBjb3B5IG9mIHRoZSBNSUIgd2hlbiBnZW5lcmF0aW5nIHN0YXRzCisKKzIwMTAtMDEtMjUgMTY6MDEgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaDoKKworICAgbW92ZSBzbm1wX2dldF9zdGF0aXN0aWMgaGVscGVyIHRvIGhlbHBlcnMgZGlyOyB1cGRhdGUgYWxsX2hlbHBlcnMKKyAgIGhlYWRlcgorCisyMDEwLTAxLTI1IDE0OjM0ICBidmFzc2NoZQorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBSZXBsYWNlZCBleHBsaWNpdCBkZWNsYXJhdGlvbnMgb2Ygb3B0aW5kLCBvcHRvcHQgYW5kIG9wdGFyZyBieQorICAgI2luY2x1ZGUgPHVuaXN0ZC5oPiBiZWNhdXNlIGV4cGxpY2l0bHkgZGVjbGFyaW5nIHRoZXNlIHZhcmlhYmxlcworICAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBDeWd3aW4uCisKKzIwMTAtMDEtMjUgMTQ6MjUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIE5FV1M6IEN5Z3dpbjogSVB2NiBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBDeWd3aW4gMS43IG9yIGxhdGVyLgorICAgVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBJUHY2IHN1cHBvcnQgaW4gTmV0LVNOTVAgdW5kZXIgQ3lnd2luCisgICBpbnZvbHZlZCBhIHN0cmFuZ2UgbWl4dHVyZSBvZiBDeWd3aW4gYW5kIFdpbnNvY2syIHNvY2tldCBjYWxscywKKyAgIHdoaWNoIHdhcyB0b28gaGFyZCB0byBtYWludGFpbi4KKyAgIE5FV1M6IEN5Z3dpbjogYnVpbGRzIGFnYWluIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQKKyAgICgtLWVuYWJsZS1pcHY2KS4gQXQgbGVhc3QgTmV0LVNOTVAgNS41IGRvZXNuJ3QgYnVpbGQgdW5kZXIgQ3lnd2luCisgICB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkLiBUaGUgY29uZmlndXJlIHNjcmlwdCByZXBvcnRlZAorICAgImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSAuLi4gcmVzdWx0OiAidW5rbm93biwgbm8iIC4uLiBlcnJvcjoKKyAgIElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIuCisKKzIwMTAtMDEtMjUgMTQ6MTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgQWRkZWQgbWlzc2luZyAjaW5jbHVkZSA8c3RyaW5nLmg+LgorCisyMDEwLTAxLTI1IDE0OjEwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlczoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIHRoZSBJUHY2IHN0YWNrIGluY2x1ZGVkIGluIEN5Z3dpbgorICAgdmVyc2lvbiAxLjcuCisgICBJUHY2IHN1cHBvcnQgaXMgb25lIG9mIHRoZSBuZXcgZmVhdHVyZXMgb2YgQ3lnd2luIDEuNy4gRm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uLAorICAgc2VlIGFsc28gaHR0cDovL2N5Z3dpbi5jb20vY3lnd2luLXVnLW5ldC9vdi1uZXcxLjcuaHRtbC4KKworMjAxMC0wMS0yNSAxMjo0MCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBDeWd3aW46IHRoZSBtZXNzYWdlICJjb25maWd1cmU6IFdBUk5JTkc6IHdpbnNvY2suaDoKKyAgIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgZG9lcyBubyBsb25nZXIgYXBwZWFyIHdoZW4KKyAgIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICBGb2xsb3ctdXAgZm9yIHIxODA1MDogcmUtZW5hYmxlZCBsaWJpcGhscGFwaSBhbmQgaXBobHBhcGkuaCB0ZXN0cworICAgZm9yIG5vbi1NaW5HVyBwbGF0Zm9ybXMgc2luY2UgdGhlIEN5Z3dpbiBidWlsZCBuZWVkcyB0aGVzZS4KKworMjAxMC0wMS0yNSAwNzoyOCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBzbm1wbGliL2luZXRfbnRvcC5jLCAgCisgICAgICAgc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBhdXRvY29uZiB0byBkZWNpZGUgaWYgaW5ldF9udG9wLmMgYW5kCisgICBpbmV0X3B0b24uYyBhcmUgdG8gYmUgY29tcGlsZWQuCisKKzIwMTAtMDEtMjUgMDc6MDkgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6CisKKyAgIENIQU5HRVM6IE1pbkdXOiBzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQgY29uZmlndXJlIHRlc3QKKyAgIGRvZXMgbm93IHdvcmsuCisKKzIwMTAtMDEtMjUgMDU6MTQgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIFRMU1RNIGNvdW50ZXIgc3RhdHMKKworMjAxMC0wMS0yNSAwNToxMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgYWRkIGluIFRTTSBuZWVkZWQgY291bnRlciBkZWZpbml0aW9ucworCisyMDEwLTAxLTI1IDA1OjEyICBoYXJkYWtlcgorCisgICAqIG1pYnMvU05NUC1UU00tTUlCLnR4dCwgbWlicy9yZmNsaXN0OgorCisgICBhZGRlZCB0aGUgU05NUC1UU00tTUlCCisKKzIwMTAtMDEtMjQgMTQ6NDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oOgorCisgICBORVdTOiBzbm1wZDogTWFkZSBzdWJ0cmVlX2NvbnRleHRfY2FjaGU6OmNvbnRleHRfbmFtZSBhIGNvbnN0CisgICBjaGFyKi4KKworMjAxMC0wMS0yNCAxNDoyNyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yCisgICBORVRTTk1QX1JFTU9WRV9DT05TVAorCisyMDEwLTAxLTI0IDEzOjI3ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wdXNtOiBQcmVmZXIgdG8gdXNlIGEgdmFyaWFibGUgb2YgdGhlIHJpZ2h0IHR5cGUgb3ZlcgorICAgYW4gdWdseSBjYXN0LiBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcyB3ZWxsLgorCisyMDEwLTAxLTI0IDEyOjU5ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEludHJvZHVjZWQgdGhlIHZhcmlhYmxlICd3aXRoX3NvY2tsaWInIGluIHRoZQorICAgY29uZmlndXJlIHNjcmlwdC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIndpbnNvY2syIiBmb3IgTWluR1cKKyAgIGFuZCB0byAiZGVmYXVsdCIgZm9yIGFsbCBvdGhlciBzeXN0ZW1zLiBXaW5zb2NrMiB0ZXN0cyBhcmUgb25seQorICAgcnVuIGlmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJ3aW5zb2NrMiIgKE1pbkdXKS4KKworMjAxMC0wMS0yNCAxMjo1MyAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIFJlbW92ZSBzdXBlcmZsdW91cyBkZWJ1ZyBsb2dzLgorCisyMDEwLTAxLTI0IDEyOjQ1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeGVzOiBmaXhlZCB3YXJuaW5ncyBhYm91dCBjaGFyICogLworICAgdW5zaWduZWQgY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTI0IDEyOjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeDogbWFrZSBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkKKyAgIGRlY2xhcmF0aW9ucworICAgYXZhaWxhYmxlIHRvIHRoZSBjb21waWxlci4KKworMjAxMC0wMS0yNCAxMjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeDogbWFkZSBzdXJlIHRoYXQgPHdzMnRjcGlwLmg+IHdpbGwKKyAgIGJlIGluY2x1ZGVkCisgICBmcm9tIDxuZXQtc25tcC90eXBlcy5oPiBzdWNoIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgY29tcGxhaW4KKyAgIGFib3V0IHN0cnVjdAorICAgc29ja2FkZHJfaW42IGJlaW5nIHVzZWQgYmVmb3JlIGJlaW5nIGRlZmluZWQuCisKKzIwMTAtMDEtMjQgMTE6NDIgIGJ2YXNzY2hlCisKKyAgICogbWFuOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDEtMjQgMTE6NDEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X2luZGV4LmMsIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYl9tb2R1bGVzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLCBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCBhZ2VudC9taWJncm91cC9taWJpbmNsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXBidWxrZ2V0LmMsICAgCisgICAgICBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCBhcHBzL3NubXBkZi5jLCAgIAorICAgICAgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgYXBwcy9zbm1wc2V0LmMsICAgCisgICAgICBhcHBzL3NubXBzdGF0dXMuYywgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCAgIAorICAgICAgYXBwcy9zbm1wd2Fsay5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfYXV0aC5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgQ2xlYW51cCAoV2luZG93cyk6IHJlbW92ZWQgc3VwZXJmbHVvdXMgI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorICAgZGlyZWN0aXZlcy4gVGhpcyBoZWFkZXIgZmlsZQorICAgaGFzIG9ubHkgdG8gYmUgaW5jbHVkZWQgZnJvbSBzbm1wbGliL3N5c3RlbS5jIGJlY2F1c2Ugb2YgdGhlCisgICBfZnRpbWUoKSBjYWxsIGluIHRoYXQgZmlsZS4KKworMjAxMC0wMS0yNCAxMDo0MyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2luZXQuYzoKKworICAgVGhlIG1hY3JvICdDKCknIG5vdyBjYXN0cyBpdHMgcmVzdWx0IGZyb20gdW5zaWduZWQgbG9uZyB0bworICAgdW5zaWduZWQgaW50LgorICAgVGhpcyBjaGFuZ2UgZml4ZXMgYSBjb21waWxlciB3YXJuaW5ncyBhYm91dCBmb3JtYXQgc3BlY2lmaWNhdGlvbgorICAgbWlzbWF0Y2hlcworICAgYW5kIGZpeGVzIGEgYnVnIChpbmNvcnJlY3Qgc25tcG5ldHN0YXQgb3V0cHV0KSBvbiBiaWcgZW5kaWFuCisgICBzeXN0ZW1zLgorCisyMDEwLTAxLTI0IDEwOjMzICBidmFzc2NoZQorCisgICAqIG1hbi9jb25maWdfYXBpLjM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTQ2OiByZW1vdmVkIGdlbmVyYXRlZCBtYW4gcGFnZXMgZnJvbQorICAgcmVwb3NpdG9yeS4KKworMjAxMC0wMS0yNCAxMDozMSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgTW92ZWQgdHdvIGRlY2xhcmF0aW9ucyBvZiBzdGF0aWMgZnVuY3Rpb25zIGZyb20gLmggdG8gLmMuCisKKzIwMTAtMDEtMjQgMTA6MjEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMuCisKKzIwMTAtMDEtMjQgMTA6MTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBidWlsZHMgYWdhaW4gd2hlbiBIQVZFX0dFVEFERFJJTkZPIGlzIG5vdAorICAgZGVmaW5lZC4KKworMjAxMC0wMS0yNCAxMDowMyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9pbmV0X250b3AuYywgICAKKyAgICAgIHNubXBsaWIvaW5ldF9udG9wLmgsIHNubXBsaWIvaW5ldF9wdG9uLmMsIHNubXBsaWIvaW5ldF9wdG9uLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBjb25maWd1cmUgdGVzdHMgZm9yIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKS4KKyAgIC0gQWRkZWQgaGVhZGVyIGZpbGVzIHNubXBsaWIvaW5ldF9udG9wLmggYW5kIHNubXBsaWIvaW5ldF9wdG9uLmguCisgICAtIFJlcGxhY2VkICJleHRlcm4gaW5ldF9udG9wKC4uLik7IiBhbmQgImV4dGVybiBpbmV0X3B0b24oLi4uKTsiCisgICBieSAjaW5jbHVkZSAiaW5ldF9udG9wL3B0b24uaCIuCisgICAtIENvbnZlcnRlZCBzbm1wbGliL2luZXRfbnRvcC5jIGFuZCBzbm1wbGliL2luZXRfcHRvbi5jIGZyb20gSyZSCisgICBDIHRvIEFOU0kgQy4KKyAgIC0gUmVwbGFjZWQgdGhlIGluZXRfYXRvbigpIGNhbGxzIHRoYXQgd2VyZSBpbnRyb2R1Y2VkIGluIHIxODAzMworICAgaW4gc25tcGxpYi9zbm1wVURQRG9tYWluLmMgYnkgaW5ldF9wdG9uKCkgY2FsbHMgc3VjaCB0aGF0IGl0IGlzCisgICBhZ2FpbiBwb3NzaWJsZSB0byBidWlsZCBOZXQtU05NUCBvbiBXaW5kb3dzLgorCisyMDEwLTAxLTI0IDA2OjA4ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyB0aGF0IGRvbid0CisgICBleGlzdCBvciBhcmUgZGVjbGFyZWQgZWxzZXdoZXJlLgorCisyMDEwLTAxLTI0IDA1OjQ4ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgTkVXUzogc25tcGxpYjogUmVtb3ZlZCB0aGUgdW51c2VkIHZhcmlhYmxlcyB3YXJtX3N0YXJ0X29pZCwKKyAgIGxpbmtfZG93bl9vaWQsIGxpbmtfdXBfb2lkLCBhdXRoX2ZhaWxfb2lkIGFuZCBlZ3BfeHh4X29pZC4KKworMjAxMC0wMS0yMyAyMjowNiAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQmV0dGVyIHNldCBvZiBTS0lQSUYvU0tJUElGTk9UUworCisyMDEwLTAxLTIzIDIwOjMxICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQmUgY29ycmVjdCBpbiB3aGF0IGl0IGlzIHRoYXQgaXMgdGVzdGVkIGluIHRoZSBoZWFkZXIuCisKKzIwMTAtMDEtMjMgMjA6MjcgIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZWQgdGhlIGNvbTJzZWMgZGlyZWN0aXZlcyB0byBmYWlsIGlmIHRoZXJlCisgICBhcmUgdG9vIGZldyBhcmd1bWVudHMuIEFkZGl0aW9uYWxseSBjaGFuZ2VkIHRoZSBzdG9yYWdlIHN0cnVjdHVyZQorICAgdG8gbm90IGFsbG9jYXRlIG1vcmUgc3BhY2UgdGhhbiBuZWNlc3NhcnkuCisKKzIwMTAtMDEtMjMgMjA6MjIgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIG5ldyB0ZXN0cyBjaGVja2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGNvbTJzZWMqIGRpcmVjdGl2ZXMKKworMjAxMC0wMS0yMyAxOToxNyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgwMjU6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorCisyMDEwLTAxLTIzIDE3OjUxICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogT1MgaGVhZGVyIGRldGVjdGlvbiBjaGVjayBpcyBub3cgcnVuIGJlZm9yZQorICAgSVB2NiBzdGFjayBkZXRlY3Rpb24uCisgICBDSEFOR0VTOiBTb2xhcmlzOiBzb2NrYWRkcl9pbjYuc2luNl9hZGRyIGNvbmZpZ3VyZSB0ZXN0IGRvZXMgbm93CisgICB3b3JrLgorCisyMDEwLTAxLTIzIDE3OjQyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIEZpeGVkIGEgU29sYXJpcy1zcGVjaWZpYyBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTAxLTIzIDE3OjAwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaDoKKworICAgTWluR1c6IGFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciA8c3lzL3RpbWViLmg+IGFuZCBhbHNvIGZvciBzdHJ1Y3QKKyAgIHRpbWV6b25lLgorCisyMDEwLTAxLTIzIDE2OjMyICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBNaW5HVzogbWFkZSBzdXJlIHRoYXQgdGhlIElQdjYtcmVsYXRlZCBkYXRhdHlwZXMgYXJlIGF2YWlsYWJsZQorICAgYmVmb3JlIGJlaW5nIHVzZWQuCisKKzIwMTAtMDEtMjMgMTY6MzAgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgI3VuZGVmIEhBVkVfV0lORE9XU19ILgorCisyMDEwLTAxLTIzIDE2OjI4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgTWluR1c6IG1hZGUgZ2V0dGltZW9mZGF5KCkgZGVjbGFyYXRpb24gYXZhaWxhYmxlIGZvciB0aGUKKyAgIGNvbXBpbGVyLgorCisyMDEwLTAxLTIzIDE2OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTWluR1c6IG1hZGUgZ2V0dGltZW9mZGF5KCkgZGVjbGFyYXRpb24gYXZhaWxhYmxlIGZvciB0aGUKKyAgIGNvbXBpbGVyLgorCisyMDEwLTAxLTIzIDE2OjI2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCBjb21wbGFpbiBhYm91dCBhIG1pc3NpbmcKKyAgIHByb3RvdHlwZSBmb3IgaXNkaWdpdCgpLgorCisyMDEwLTAxLTIzIDE2OjI0ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIE1pbkdXOiBpcGhscGFwaS5oIGNvbmZpZ3VyZSB0ZXN0IGRvZXMgbm93IHdvcmsuCisKKzIwMTAtMDEtMjMgMTU6MTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzOgorCisgICBSZW5hbWVkIHRoZSBXaW5zb2NrMiBJUHY2IHN0YWNrIGZyb20gJ21pbmd3JyBpbnRvICd3aW5zb2NrMicuCisKKzIwMTAtMDEtMjMgMTU6MDcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgYWdlbnQvc25tcGQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAKKyAgICAgICBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgSW1wcm92ZWQgcG9ydGFiaWxpdHkgYmV0d2VlbiB0aGUgc3VwcG9ydGVkIFdpbjMyIGNvbXBpbGF0aW9uCisgICBlbnZpcm9ubWVudHMgYXMgZm9sbG93czoKKyAgIC0gTWFkZSBzdXJlIHRoYXQgdGhlIDx3aW5zb2NrMi5oPiBhbmQgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlcworICAgYXJlIG9ubHkgaW5jbHVkZWQgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4uCisgICAtIEFkZGVkIGNvbmZpZ3VyZSBjaGVjayBmb3IgPGlwaGxwYXBpLmg+LgorICAgLSBSZXBsYWNlZCBzZXZlcmFsIFdJTjMyIC8gY3lnd2luIHRlc3RzIGJ5IGEgSEFWRV9JUEhMUEFQSV9ICisgICB0ZXN0LgorICAgLSBEb2N1bWVudGVkIHRoYXQgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggaXMgb25seSB1c2VkCisgICBmb3IgdGhlIE1TVkMgYnVpbGQuCisKKzIwMTAtMDEtMjIgMTY6NDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxMDogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8KKyAgIDYuCisKKzIwMTAtMDEtMjIgMTY6NDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIHdpbjMyL01nbXRBcGktd2luRXh0RExMLmg6CisKKyAgIEZvbGxvdyB1cCBmb3IgcjE4MDE2OiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KKworMjAxMC0wMS0yMiAxNDoxMyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODAxNjogbWFkZSBNaW5HVyBsaWJpcGhscGFwaSBjaGVjayBtb3JlIHJvYnVzdC4KKworMjAxMC0wMS0yMiAxMzozMiAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCBhY2xvY2FsLm00LCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliX21vZHVsZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIGFnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5oLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsICAgCisgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsICAgCisgICAgICBhcHBzL3NubXB3YWxrLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsICAgCisgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgICAKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9tZDUuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXAuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hdXRoLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsIAorICAgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3ZhY20uYywgICAKKyAgICAgIHNubXBsaWIvd2lucGlwZS5jLCB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogTWluR1c6IHdpbkV4dERMTCBjb21waWxlcyBub3cgdW5kZXIgTWluR1cuCisgICBDSEFOR0VTOiBNaW5HVzogYnVpbGRpbmcgTmV0LVNOTVAgd29ya3MgYWdhaW4uCisgICAKKyAgIERldGFpbGVkIG92ZXJ2aWV3OgorICAgKiBDaGFuZ2VzIGluIHRoZSBjb25maWd1cmUgc2NyaXB0OgorCisgICAtIHNvY2tldCgpIGxpYnJhcnkgY2hlY2sgcGFzc2VzIGFnYWluIG9uIE1pbkdXLgorICAgLSBBZGRlZCBsaWJyYXJ5IGNoZWNrcyBmb3IgbGlid3MyXzMyLCBsaWJyZWdleCBhbmQgbGlic25tcGFwaS4KKyAgIC0gQWRkZWQgY2hlY2sgZm9yIHRoZSB3aW5zb2NrMi5oIGFuZCB3czJ0Y3BpcC5oIGhlYWRlciBmaWxlcy4KKyAgIC0gQWRkZWQgY2hlY2sgZm9yIHRoZSBjaG93bigpIGFuZCBsb2NhbHRpbWVfcigpIGZ1bmN0aW9ucy4KKyAgIC0gc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQgY2hlY2sgZG9lcyBub3cgd29yayBvbiBNaW5HVy4KKyAgIC0gQWRkZWQgSVB2NiBzdGFjayB0eXBlIGNhbGxlZCAibWluZ3ciLgorICAgKiBTb3VyY2UgY29kZSBjaGFuZ2VzOgorCisgICAtIEluY2x1ZGUgPHdpbnNvY2syLmg+IGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+IGluc3RlYWQgb2YKKyAgIDx3aW5zb2NrLmg+CisgICB1bmRlciBNaW5HVyBzdWNoIHRoYXQgSVB2NiBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKyAgIC0gTW92ZWQgI2luY2x1ZGUgPHdpbnNvY2suaD4gZnJvbSAuYyBmaWxlcyB0byA8bmV0LXNubXAvdHlwZXMuaD4uCisgICAtIEFkZGVkIGEgY29weSBvZiB0aGUgTWluR1cgaGVhZGVyIGZpbGUgPHNubXAuaD4gKHdoaWNoIGlzIG5vdAorICAgY29weXJpZ2h0ZWQpCisgICBhcyB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLgorICAgLSBhZ2VudDogb25seSBjYWxsIGNob3duKCkgd2hlbiBhdmFpbGFibGUgKEhBVkVfQ0hPV04pLgorICAgKiBEb2N1bWVudGF0aW9uIGNoYW5nZXM6IHVwZGF0ZWQgUkVBRE1FLndpbjMyLgorCisKKzIwMTAtMDEtMjIgMDg6MzQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgY2FzdCBmcm9tIGNoYXIqIHRvIGNoYXIqCisKKzIwMTAtMDEtMjIgMDA6MzkgIGhhcmRha2VyCisKKyAgICogQ09QWUlORzoKKworICAgQ29weXJpZ2h0IGZpbGUgdXBkYXRlIGZvciBTUEFSVEEsIEluYy4KKworMjAxMC0wMS0yMiAwMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgYWRkIHByb3BlciBwcmVmaXhlcyBpbiBUU00gZm9yIFNTSCwgRFRMUywgZXRjLCBiYXNlZCBvbiB0aGUKKyAgIGRvbWFpbgorCisyMDEwLTAxLTIyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGFkZGVkIDUuNSBicmFuY2gKKworMjAxMC0wMS0yMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgbWlub3IgZWNobyBvdXRwdXQgY2hhbmdlCisKKzIwMTAtMDEtMjEgMjA6NTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjb21tZW50IG5leHQgdG8gY29kZSBpdCBpcyB0YWxraW5nIGFib3V0OyBObyBjb2RlIGNoYW5nZQorCisyMDEwLTAxLTIxIDE0OjU1ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAyOTI2Mzc0OiBmcm9tIEVkIFN3aWVyazogZml4ZWQgcmVhZGluZyBvZgorICAgaXBBZGRyZXNzVGFibGUgZnJvbSAvcHJvYy9uZXQvaWZfaW5ldDYgb24gTGludXgKKyAgIAorICAgVGhlIGtlcm5lbCBtaWdodCBwcm92aWRlIGxvbmdlciBmaWVsZHMsIGVzcGVjaWFsbHkgb24gNjQtYml0CisgICBzeXN0ZW1zLgorCisyMDEwLTAxLTIwIDEyOjQyICBidmFzc2NoZQorCisgICAqIFBPUlRJTkcsIGxvY2FsL3NubXBjaGVjay5kZWY6CisKKyAgIEZpeGVkIHR5cG86IHJlcGxhY2VkICduZWNpc3NhcnknIGJ5ICduZWNlc3NhcnknLgorCisyMDEwLTAxLTIwIDA4OjUzICBqc2FmcmFuZWsKKworICAgKiBtYW4vc25tcG5ldHN0YXQuMS5kZWY6CisKKyAgIEZpeCBtaW5vciB0eXBvIGluIG1hbiBwYWdlLCBpdCdzIHNubXBuZXRzdGF0IC1DcCwgbm90IC1DUC4KKworMjAxMC0wMS0xNCAxMjozNCAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBmaXhlZCBtZW1vcnkgbGVhayBpbiBSTU9OLU1JQiBhbmQgRVRIRVJMSUtFLU1JQiB3aGVuCisgICB0aGVyZSBhcmUgbXVsdGlwbGUgYWxpYXNlcyBvZiBhbiBuZXR3b3JrIGludGVyZmFjZQorICAgUmF0aW9uYWxlOiB0aGUgYWxpYXNlZCBpbnRlcmZhY2VzIGhhdmUgdGhlIHNhbWUgaWZJbmRleCAtPgorICAgQ09OVEFJTkVSX0lOU0VSVCBmYWlscywgYnV0IHRoZSByZWplY3RlZCBlbnRyeSB3YXMgbm90IGZyZWVkLgorCisyMDEwLTAxLTEzIDExOjIxICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggbWVtb3J5IGxlYWsgaW4gaXBBZGRyZXNzUHJlZml4VGFibGUKKyAgIC0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyByZXR1cm5zIGRpZmZlcmVudCBjb2RlLCB3aGVuCisgICB0aGUgZW50cnkgd2FzIG5vdCBpbnNlcnRlZCB0byBsaXN0IGFuZCBjYW4gYmUgZnJlZWQuCisKKzIwMTAtMDEtMTIgMDA6NTIgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBidWlsZDogcnVuIHJwbSBjb25maWd1cmUgY2hlY2tzIGZvciBocl9zd2luc3QgcmV3cml0ZQorICAgKHJwbQorICAgdmVyc2lvbiBvbmx5KQorCisyMDEwLTAxLTExIDIzOjU4ICB0YW5kZXJzCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjoKKworICAgYWRkIFBFUkxMRE9QVFNfRk9SX0FQUFMgdG8gYWdlbnR4dHJhcCBsaW5rIGxpbmUgKGZpeGVzCisgICAibGlicGVybC5zbyBub3QKKyAgIGZvdW5kIiBlcnJvcnMpCisKKzIwMTAtMDEtMTEgMDA6MTEgIHRhbmRlcnMKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKKworICAgZ2V0IHJpZCBvZiB1c2luZyBkZXByZWNhdGVkIHN5bnRheCBmb3IgdHJhcC9pbmZvcm0gc2lua3MKKworMjAxMC0wMS0wOCAwODo0MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBvYnNvbGV0ZWQgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHLgorICAgRnJvbSBub3cgb24gdXNpbmcgU0lHQUxSTSB0byB0cmlnZ2VyIE5ldC1TTk1QIGFsYXJtIGhhbmRsZXJzIGlzCisgICBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgCisgICBNb3RpdmF0aW9uOiBhcyBrbm93biBsaWJuZXRzbm1wIHN1cHBvcnRzIHRpbWUtYmFzZWQgYWxhcm1zIHZpYQorICAgdGhlIGZ1bmN0aW9ucworICAgc25tcF9hbGFybV9yZWdpc3RlcigpLCBydW5fYWxhcm1zKCkgYW5kIG90aGVyIGZ1bmN0aW9ucy4gVHdvCisgICBkaWZmZXJlbnQgd2F5cyB0bworICAgdHJpZ2dlciB0aGUgZnVuY3Rpb24gcnVuX2FsYXJtcygpIGFyZSBzdXBwb3J0ZWQgaW5zaWRlCisgICBsaWJuZXRzbm1wOgorICAgMS4gQnkgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZW91dCBhcmd1bWVudCBvZiBzZWxlY3QoKSBpcyBzbWFsbAorICAgZW5vdWdoIHN1Y2gKKyAgIHRoYXQgc2VsZWN0KCkgcmV0dXJucyBiZWZvcmUgdGhlIG5leHQgYWxhcm0gbXVzdCBiZSBoYW5kbGVkICh3aGVuCisgICB0aGUKKyAgIHZhcmlhYmxlIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBpcyBzZXQgdG8gb25lLCB3aGljaAorICAgaXMgdGhlCisgICBkZWZhdWx0KS4KKyAgIDIuIEJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGtlcm5lbCBmaXJlcyBTSUdBTFJNIGF0IHRoZSB0aW1lIHdoZW4KKyAgIHJ1bl9hbGFybXMoKQorICAgc2hvdWxkIGJlIGNhbGxlZCAod2hlbiB0aGUgdmFyaWFibGUKKyAgIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBpcyBzZXQKKyAgIHRvIHplcm8sIHdoaWNoIGhhcyB0byBiZSBjb25maWd1cmVkIGV4cGxpY2l0bHkpLgorICAgCisgICBUaGUgZm9sbG93aW5nIGlzc3VlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWNvbmQgYXBwcm9hY2g6CisgICAxLiBBbGFybSBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zaWRlIE5ldC1TTk1QIHRvIGUuZy4gcmVmcmVzaAorICAgY2FjaGVkIHRhYmxlCisgICBjb250ZW50cy4gQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBOZXQtU05NUAorICAgc291cmNlIGNvZGUKKyAgIHRoYXQgcHJldmVudHMgdGhlIGZvbGxvd2luZyBmcm9tIGhhcHBlbmluZzogYSB0YWJsZSByZWZyZXNoCisgICB0cmlnZ2VyZWQgdmlhCisgICBTSUdBTFJNIHdoaWxlIGEgcm93IGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBhIGNhY2hlZCB0YWJsZS4gVGhpcworICAgY2FuIHJlc3VsdAorICAgaW4gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGV2ZW4gYSBjcmFzaC4KKyAgIDIuIFBPU0lYIHJlc3RyaWN0cyBzaWduYWwgaGFuZGxlcnMgdG8gY2FsbGluZyBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgIGVpdGhlciByZWVudHJhbnQKKyAgIG9yIG5vbi1pbnRlcnJ1cHRpYmxlCisgICAoaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0KS4KKyAgIFN0YW5kYXJkIEkvTyBmdW5jdGlvbnMgbGlrZSBwcmludGYoKSBhbmQgZnByaW50ZigpIGFyZSBuZWl0aGVyCisgICByZWVudHJhbnQgbm9yCisgICBub24taW50ZXJydXB0aWJsZS4gcnVuX2FsYXJtcygpIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBhIHNpZ25hbAorICAgaGFuZGxlciwgd2hpY2gKKyAgIG1lYW5zIHRoYXQgdGhpcyByZXN0cmljdGlvbiBhcHBsaWVzIHRvIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkKKyAgIGl0c2VsZiBhbmQKKyAgIGFsbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IGl0ICh3aGljaCBpbmNsdWRlcyB0aGUgYWxhcm0gY2FsbGJhY2sKKyAgIGZ1bmN0aW9ucykuCisgICBPcjogZS5nLiBzbm1wX2xvZygpIGFuZCBpdHMgY2FsbGVycyBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQorICAgaW5zaWRlIHJ1bl9hbGFybXMoKQorICAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlci4gVGhpcworICAgaXMgYSBzZXZlcmUKKyAgIHJlc3RyaWN0aW9uLCBhbmQgb25lIHRoYXQgaXMgaGFyZCB0byB3b3JrIHdpdGguCisgICAzLiBOb3QgYWxsIHNvZnR3YXJlIGRldmVsb3BlcnMga25vdyBob3cgdG8gbWFrZSBzdXJlIHRoYXQgc2lnbmFsCisgICBkZWxpdmVyeSB3b3JrcworICAgY29ycmVjdGx5IGluIGEgbXVsdGl0aHJlYWRlZCBjb250ZXh0LiBQT1NJWCBkb2VzIG5vdCBndWFyYW50ZWUgdG8KKyAgIHdoaWNoIHRocmVhZAorICAgYSBzaWduYWwgbGlrZSBTSUdBTFJNIHdpbGwgYmUgZGVsaXZlcmVkLCB1bmxlc3MgdGhhdCBzaWduYWwgaGFzCisgICBiZWVuIGJsb2NrZWQKKyAgIGJlZm9yZSB0aHJlYWQgY3JlYXRpb24gYW5kIGlzIHVuYmxvY2tlZCBhZnRlciB0aHJlYWQgY3JlYXRpb24KKyAgIChzZWUgYWxzbworICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9wdGhyZWFkX3NpZ21hc2suaHRtbCkuCisgICBUaGlzIGlzIHJlbGV2YW50IGZvciB0aGUgTmV0LVNOTVAgcHJvamVjdCBub3Qgb25seSBiZWNhdXNlIGEKKyAgIHdvcmtlciB0aHJlYWQgaXMKKyAgIGNyZWF0ZWQgaW5zaWRlCisgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMgYnV0IGFsc28KKyAgIGJlY2F1c2UgbGlibmV0c25tcCBpcyBvZnRlbiB1c2VkIGluc2lkZSBtdWx0aXRocmVhZGVkIHNvZnR3YXJlLgorICAgQ3VycmVudGx5IG5vCisgICBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSBzdXJlIHRoYXQgU0lHQUxSTSBpcyBwcm9jZXNzZWQgYnkgdGhlCisgICBOZXQtU05NUCBldmVudAorICAgcHJvY2Vzc2luZyBsb29wIHRocmVhZC4gSWYgU0lHQUxSTSBpcyBwcm9jZXNzZWQgYnkgYW5vdGhlcgorICAgdGhyZWFkLCB0aGlzIHdpbGwKKyAgIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBkYXRhIHJhY2VzLgorICAgCisgICBCZWNhdXNlIGFsbCB0aGUgZGlmZmljdWx0aWVzIGFzc29jaWF0ZWQgd2l0aCBwcm9jZXNzaW5nIGFsYXJtcworICAgZnJvbSBpbnNpZGUgYQorICAgc2lnbmFsIGhhbmRsZXIgZnVuY3Rpb24sIGFuZCBiZWNhdXNlIGZpeGluZyB0aGVzZSB3b3VsZCByZXF1aXJlCisgICBtb3JlIGVmZm9ydCB0aGFuCisgICBpdCBpcyB3b3J0aCwgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGhhcyBiZWVuCisgICBkZXByZWNhdGVkIGFuZCBmcm9tIG5vdworICAgb24gYXBwcm9hY2ggKDEpIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBhcHByb2FjaCB0byB0cmlnZ2VyIGFsYXJtCisgICBoYW5kbGVycy4KKworMjAxMC0wMS0wNyAxOTo0MiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgorCisgICBQYXRjaCBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyIHRvIGZpeCBhIG1pbm9yIG1lbWxlYWsgaW4gY3B1CisgICBzeXNjdHJsIGZldGNoaW5nCisKKzIwMTAtMDEtMDcgMTY6MjEgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6CisKKyAgIFJlbW92ZWQgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSwgYW5kIG1hZGUgc3VyZSB0aGF0CisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpICdcMCctdGVybWluYXRlcyB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgaW4gYWxsIGNhc2VzLgorICAgVXBkYXRlZCBkb2N1bWVudGF0aW9uIGFuZCB1bml0IHRlc3RzLgorCisyMDEwLTAxLTA3IDE0OjQxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBSZW1vdmVkIHRocmVlIHN1cGVyZmx1b3VzIGNhc3RzIGJlY2F1c2UgdGhlc2UgdHJpZ2dlcmVkIGEKKyAgIGNvbXBpbGVyIHdhcm5pbmcKKyAgIHdoZW4gY29tcGlsZWQgd2l0aCBNU1ZDLgorCisyMDEwLTAxLTA3IDEzOjI4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUmV2ZXJ0ZWQgdGhlIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgY2hhbmdlcyBmcm9tIHIxNzk5MgorICAgYmVjYXVzZSB0aGVzZQorICAgY2F1c2VkIHRoZSBmb2xsb3dpbmcgVmFsZ3JpbmQgY29tcGxhaW50IGR1cmluZyBzbm1wZCBzdGFydHVwOgorICAgCisgICA9PTI1MjAxPT0gQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZAorICAgdmFsdWUocykKKyAgID09MjUyMDE9PSBhdCAweDQwNDdCMTQ6IG5ldHNubXBfc2VuZF90cmFwcyAoYWdlbnRfdHJhcC5jOjc5OCkKKyAgID09MjUyMDE9PSBieSAweDQwNDgxMjg6IHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMKKyAgIChhZ2VudF90cmFwLmM6ODUzKQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODE5RDogc2VuZF90cmFwX3ZhcnMgKGFnZW50X3RyYXAuYzo5NjMpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MjVCOiBzZW5kX2Vhc3lfdHJhcCAoYWdlbnRfdHJhcC5jOjEwMTEpCisgICA9PTI1MjAxPT0gYnkgMHg4MDRCNUQyOiBtYWluIChzbm1wZC5jOjM5NCkKKworMjAxMC0wMS0wNyAxMjozMCAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEZpeGVkIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gbWlzbWF0Y2guCisKKzIwMTAtMDEtMDcgMTI6MTkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg6CisKKyAgIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgYXNzaWduaW5nIGEgY2hhciAqIHBvaW50ZXIgdG8KKyAgIHN5c09SVGFibGU6Ok9SX2Rlc2NyIGRvZXMgb3IgZG9lcyBub3QgdHJhbnNmZXIKKyAgIG93bmVyc2hpcC4gU28gd2hldGhlciBPUl9kZXNjciBpcyBkZWNsYXJlZCBhcyBjaGFyICogb3IgYXMgY29uc3QKKyAgIGNoYXIgKiwgdGhlcmUgd2lsbCBhbHdheXMgYmUgYXQKKyAgIGxlYXN0IG9uZSBzdGF0ZW1lbnQgb24gd2hpY2ggdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBhIGNoYXIKKyAgICogIC8gY29uc3QgY2hhciAqIG1pc21hdGNoLiBUaGUgb25seSAgICBzb2x1dGlvbiBpcyB0byBjYXN0IGF3YXkKKyAgICAgIGNvbnN0IHdoZXJlIGFwcHJvcHJpYXRlIHRvIG1ha2Ugc3VyZSAgICB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorICAgICAgY29tcGxhaW4sICAgIGFzIGltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2guICAyMDEwLTAxLTA3IDExOjQ2IAorICAgICAgYnZhc3NjaGUKKworCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICB1c21fc2F2ZV91c2VyKCk6IHdoZW4gd3JpdGluZyB1c2VyLT5uYW1lIGFuZCB1c2VyLT5zZWNOYW1lLCBvbmx5CisgICB3cml0ZSB0aGUgQVNDSUkgZGF0YSBhbmQgbm90IHRoZQorICAgdGVybWluYXRpbmcgJ1wwJy4gU2luY2UgYm90aCBpdGVtcyBhcmUgcmVhZCBieSBjYWxsaW5nCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLCB3cml0aW5nCisgICB0aGUgdGVybWluYXRpbmcgJ1wwJyBpcyBub3QgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBkYXRhCisgICByZWFkIGJhY2sgaXMgdGVybWluYXRlZCBwcm9wZXJseS4KKworMjAxMC0wMS0wNyAwOToxMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCk6IHVudGlsCisgICBub3cgdGhpcworICAgZnVuY3Rpb24gdGVybWluYXRlZCB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBzb21lIGNhc2VzIHdpdGggJ1wwJworICAgKHdoZW4gdGhlCisgICBpbnB1dCB3YXMgaW4gdGhlIGZvcm1hdCAweC4uLiBhbmQgYSBidWZmZXIgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kCisgICBhbHNvCisgICB3aGVuIHRoZSBpbnB1dCB3YXMgaW4gQVNDSUkgZm9ybWF0LCBidXQgbm90IHdoZW4gdGhlIGlucHV0IHdhcyBpbgorICAgZm9ybWF0CisgICAweC4uLiBhbmQgbm8gYnVmZmVyIG92ZXJmbG93IG9jY3VycmVkKS4gQ2hhbmdlZCB0aGlzIHN1Y2ggdGhhdAorICAgdGhpcworICAgZnVuY3Rpb24gZG9lcyBubyBsb25nZXIgdGVybWluYXRlIHRoZSBpbnB1dCBidWZmZXIgd2l0aCAnXDAnLgorICAgVGhpcworICAgY2hhbmdlIHdhcyBwb3NzaWJsZSBiZWNhdXNlIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdCBhbGwKKyAgIGNhbGxlcnMgdGhhdAorICAgbmVlZGVkIGEgJ1wwJyB0ZXJtaW5hdGVkIHN0cmluZyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZQorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBpbnN0ZWFkLgorCisyMDEwLTAxLTA2IDE3OjUyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgorCisgICBSZXZlcnRlZCByMTc5NjggYW5kIHIxNzk3Mi4KKworMjAxMC0wMS0wNiAxNTo0MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgRml4ZWQgbW9yZSBjb21waWxlciB3YXJuaW5ncyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgdGhlIGNvbnN0CisgICBrZXl3b3JkLgorCisyMDEwLTAxLTA2IDE1OjM4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIEZpeGVkIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gbWlzbWF0Y2guCisKKzIwMTAtMDEtMDYgMTU6MzYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaDoKKworICAgQ2hhbmdlZCBhcmd1bWVudCB0eXBlIGZyb20gY2hhciAqIGludG8gY29uc3QgY2hhciAqLiBTaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZCBpbiByMTc5NzUuCisKKzIwMTAtMDEtMDYgMTU6MzMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAxNTozMSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHRoZSBmdW5jdGlvbnMgcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoKSBhbmQKKyAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCksIHdoaWNoCisgICBhY2NlcHQgYSBwYXJzZXIgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBtb2RpZnkgdGhlIHN0cmluZyB0aGF0IGl0CisgICBwYXJzZXMuIFVzaW5nIHRoZXNlIGZ1bmN0aW9ucyByZXN1bHRzCisgICBpbiBlYXNpZXIgdG8gcmVhZCBjb2RlIHRoYW4gdXNpbmcgdGhlIG5vbi1jb25zdCBoYW5kbGVyCisgICByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCBjYXN0aW5nIHRoZSBwYXJzZXIKKyAgIGZ1bmN0aW9uIGV4cGxpY2l0bHkgZnJvbSAodm9pZCgqKShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopKSB0bworICAgKHZvaWQoKikoY29uc3QgY2hhciosIGNoYXIqKSkuCisKKzIwMTAtMDEtMDYgMTU6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdCgpLgorCisyMDEwLTAxLTA2IDE0OjQyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKKworICAgRHVwbGljYXRlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIFJFR0lTVEVSX1NZU09SX1RBQkxFKCkgLworICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoKQorICAgc2luY2UgdGhhdCBhcmd1bWVudCBpcyBmcmVlZCB3aGlsZSB1bnJlZ2lzdGVyaW5nIHN1Y2ggYW4gZW50cnkuCisgICBOb3Qgc3VyZSB3aGV0aGVyCisgICB0aGlzIGNvdWxkIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIG9mIGZyZWUoKSB3aXRoIGEgY29uc3RhbnQKKyAgIHN0cmluZyBhcyBhcmd1bWVudAorICAgYW5kIEknbSBuZWl0aGVyIHN1cmUgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyBjb3VsZCBoYXZlCisgICB0cmlnZ2VyZWQgYSBjcmFzaC4KKworMjAxMC0wMS0wNiAxNDozNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oLCBzbm1wbGliL3ZhY20uYzoKKworICAgRm9yIHRob3NlIFZBQ00gZnVuY3Rpb25zIHRoYXQgZG8gbm90IG1vZGlmeSB0aGUgc3RyaW5ncyBwYXNzZWQgYXMKKyAgIGFyZ3VtZW50cywKKyAgIGNoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUgZnJvbSBjaGFyICogdG8gY29uc3QgY2hhciAqLgorCisyMDEwLTAxLTA2IDE0OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6MjYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmM6CisKKyAgIFJlbW92ZWQgYW4gdW51c2VkIHZhcmlhYmxlLgorCisyMDEwLTAxLTA2IDE0OjE0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jOgorCisgICBEdXBsaWNhdGVkIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgUkVHSVNURVJfU1lTT1JfVEFCTEUoKSAvCisgICBSRUdJU1RFUl9TWVNPUl9FTlRSWSgpCisgICBzaW5jZSB0aGF0IGFyZ3VtZW50IGlzIGZyZWVkIHdoaWxlIHVucmVnaXN0ZXJpbmcgc3VjaCBhbiBlbnRyeS4KKyAgIE5vdCBzdXJlIHdoZXRoZXIKKyAgIHRoaXMgY291bGQgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgb2YgZnJlZSgpIHdpdGggYSBjb25zdGFudAorICAgc3RyaW5nIGFzIGFyZ3VtZW50CisgICBhbmQgSSdtIG5laXRoZXIgc3VyZSBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvdWxkIGhhdmUKKyAgIHRyaWdnZXJlZCBhIGNyYXNoLgorCisyMDEwLTAxLTA2IDE0OjA4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0CisgICBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6MDYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAxNDowNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBuZXcgZnVuY3Rpb25zIHNraXBfd2hpdGVfY29uc3QoKSwgc2tpcF9ub3Rfd2hpdGVfY29uc3QoKSwKKyAgIHNraXBfdG9rZW5fY29uc3QoKSwgY29weV9ud29yZF9jb25zdCgpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKS4KKyAgIC0gQ2hhbmdlZCByZXR1cm4gdHlwZSBvZiByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGZyb20KKyAgIGNoYXIgKiB0bworICAgY29uc3QgY2hhciAqLiBOb3RlOiB0aGlzIGRvZXMgbm90IGFmZmVjdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgc2luY2UgdGhpcworICAgZnVuY3Rpb24gaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiBhbnkgcmVsZWFzZS4KKyAgIC0gRml4ZWQgZG9jdW1lbnRhdGlvbiBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKS4KKyAgIC0gUmVkdWNlZCBudW1iZXIgb2YgY2FzdC1hd2F5LWNvbnN0IGNvbnN0cnVjdHMgaW4gcmVhZF9jb25maWcuYy4KKworMjAxMC0wMS0wNiAxMzozNSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKKworICAgUmVmaW5lZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hY3JvIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCk6CisgICB3aGVuIHVzaW5nCisgICB0aGUgZ2NjIGNvbXBpbGVyLCBpdCBpcyBub3cgdmVyaWZpZWQgd2hldGhlciB0aGUgdHlwZXMgKGNvbnN0IHQpCisgICBhbmQgdHlwZW9mKGUpCisgICBhcmUgY29tcGF0aWJsZSwgd2hlcmUgdCBpcyB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIGUgdGhlIHNlY29uZAorICAgYXJndW1lbnQgb2YKKyAgIHRoaXMgbWFjcm8uCisKKzIwMTAtMDEtMDYgMTM6MzMgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2F0Lmg6CisKKyAgIEFkZCBzdXBwb3J0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoIEhXIGFkZHJlc3MgYmlnZ2VyIHRoYW4gNgorICAgYnl0ZXMgdG8gYXRUYWJsZS4gU29tZSBIVywgbGlrZSBJbmZpbmlCYW5kLCB1c2VzIEhXIGFkZHJlc3NlcworICAgd2l0aCA5IGFuZCBtb3JlIGJ5dGVzLgorCisyMDEwLTAxLTA2IDEyOjQ1ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVR1M6IDI5MjQxNDA6IEZpeCB0ZXJtaW5hdGlvbiBvZiBDUFUvRlBVIHR5cGVzCisKKzIwMTAtMDEtMDYgMTI6MzMgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOiAyOTIyMzkwOiBGaXggdGVzdCBmb3IgbWlzc2luZyBjb250ZXh0TmFtZQorICAgcGFyYW1ldGVyCisKKzIwMTAtMDEtMDYgMTE6NTcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L3NubXBfcGVybC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEludHJvZHVjZWQgYSBuZXcgbWFjcm8gTkVUU05NUF9SRU1PVkVfQ09OU1QoKSB0aGF0IGFsbG93cyB0bworICAgY2FzdAorICAgYXdheSBjb25zdG5lc3Mgd2l0aG91dCB0aGF0IGdjYyAtV2Nhc3QtcXVhbCByZXBvcnRzIGEgd2FybmluZy4KKyAgIC0gTWFkZSBjYXN0aW5nIGF3YXkgY29uc3RuZXNzIGV4cGxpY2l0IGJ5IGludHJvZHVjaW5nIHRoZQorICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoKSBtYWNyby4gVGhpcyBzdXBwcmVzc2VzIHRoZSB3YXJuaW5nCisgICBnY2MgLVdjYXN0LXF1YWwgcHJpbnRlZCBmb3IgdGhlc2Ugc3RhdGVtZW50cy4KKworMjAxMC0wMS0wNiAxMTo0NiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDA5OjE0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFwcHMvYWdlbnR4dHJhcC5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIERvIG5vdCB1c2UgMCB3aGVuIHJlZmVycmluZyB0byBOVUxMLgorCisyMDEwLTAxLTA2IDA4OjI2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQ2hhbmdlZCBhcmd1bWVudCB0eXBlcyBvZiBjYWxjdWxhdGVfdGltZV9kaWZmKCkgYW5kCisgICBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkKKyAgIGZyb20gc3RydWN0IHRpbWV2YWwgKiB0byBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqLiBOb3RlOiB0aGlzIGRvZXMKKyAgIG5vdCBhZmZlY3QKKyAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisyMDEwLTAxLTA2IDA4OjIzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBDaGFuZ2VzIChubyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vZGlmaWVkKToKKyAgIC0gUmVtb3ZlZCBkaXNraW9fcGFyc2VfY29uZmlnKCkgZGVjbGFyYXRpb24gYmVjYXVzZSB0aGF0IGZ1bmN0aW9uCisgICBpcyBuZWl0aGVyIGNhbGxlZCBub3IgZGVmaW5lZCBpbiB0aGUgc291cmNlIGZpbGUgZGlza2lvLmMuCisgICAtIEFkZGVkIGRlY2xhcmF0aW9uIGZvciBnZXRzdGF0cygpIHN1Y2ggdGhhdCBnY2MgZG9lcyBub3QKKyAgIGNvbXBsYWluIGFib3V0IGEgbWlzc2luZyBkZWNsYXJhdGlvbi4KKyAgIC0gTGludXg6IGNoYW5nZWQgdmlzaWJpbGl0eSBvZiBnZXRzdGF0cygpIGZyb20gZ2xvYmFsIHRvIHN0YXRpYworICAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIEJTRCBhbmQgRGFyd2luIGltcGxlbWVudGF0aW9ucyBvZgorICAgZ2V0c3RhdHMoKS4KKworMjAxMC0wMS0wNiAwODowMCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKiBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDAyOjE4ICBtYWdmcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgbWFuL01ha2VmaWxlLmluLCB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgorCisgICBDSEFOR0VTOiBhcHBzOiBPbmx5IGJ1aWxkIGFnZW50eHRyYXAgaWYgdGhlIGFnZW50eCBsaWJyYXJpZXMgYXJlCisgICBidWlsdC4gQWRkIGEgdGVzdCBjYXNlIGZvciBhZ2VudHh0cmFwLgorICAgCisgICBUaGUgZW5hYmxlbWVudC9kaXNhYmxlbWVudCBpcyBpbnNwaWVyZWQgYnkgYXV0b21ha2UgY29uZGl0aW9uYWxzCisKKzIwMTAtMDEtMDYgMDE6NTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHN0YXJ0dGltZS4KKworMjAxMC0wMS0wNSAyMjo1NCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmg6CisKKyAgIENIQU5HRVM6IEhpZGUgbW9zdCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiB0aGUgbG9nbWF0Y2gKKyAgIG1vZHVsZS4gQ2xlYW5lZCB1cCB0aGUgaGVhZGVyIGFjY29yZGluZ2x5LiBSZW1vdmUgdGhlIG5lZWQgZm9yCisgICBmb3J3YXJkIGRlY2xhcmF0aW9ucyBieSByZW9yZGVyaW5nIHRoZSBmdW5jdGlvbnMuCisKKzIwMTAtMDEtMDUgMjI6MzMgIGR0czEyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBCVUdTOiAyOTE5Mzc5OiBJbml0aWFsaXNlIFNOTVAgc2Vzc2lvbnMgcHJvcGVybHkKKyAgIFByb3ZpZGVkIGJ5IERpZWdvIEJpbGxpCisKKzIwMTAtMDEtMDUgMjI6MjAgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHUzogMjkxOTMyMDogQXZvaWQgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeQorICAgUmVwb3J0ZWQgYnkgVG9tYXN6IExpcworCisyMDEwLTAxLTA1IDE4OjU4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVR1M6IDI5MTQ0MTA6IEZpeCBjcmFzaCBvbiBlbXB0eSBjb21tYW5kIGxpbmVzCisKKzIwMTAtMDEtMDUgMTU6MzEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMjU4NDogRml4IG51bGwgT0lEIGhhbmRsaW5nIGluIEFnZW50eAorICAgb24gNjRiaXQKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEx1dHogSmFlbmlja2UKKworMjAxMC0wMS0wNSAxMDoxMSAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaDoKKworICAgQ0hBTkdFUzogaHB1eDogZml4IGJ1aWxkIGVycm9yIG9uIEhQLVVYIDEwLjIwCisKKzIwMTAtMDEtMDUgMDg6NDIgIGpzYWZyYW5laworCisgICAqIG1hbiwgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBSZW1vdmUgZ2VuZXJhdGVkIG1hbiBwYWdlcyBmcm9tIHJlcG9zaXRvcnkuCisKKzIwMTAtMDEtMDQgMTY6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXhlZCBhIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkIHRoYXQgb2NjdXJyZWQgd2hlbiBhbiBBU0NJSQorICAgc3RyaW5nIHdhcworICAgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIC8KKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCAoKmxlbikKKyAgIGVxdWFscyAwLgorCisyMDEwLTAxLTA0IDE2OjQxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2FzdGluZyBhd2F5ICdjb25zdCcuCisKKzIwMTAtMDEtMDQgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCB1bml0IHRlc3QgZm9yIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLgorCisyMDEwLTAxLTA0IDEwOjQ1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBVc2UgY29ycmVjdCBvaWQgbGVuZ3RoIGluIHRhYmxlIGluZGV4ZXMuCisKKzIwMTAtMDEtMDQgMDg6MTAgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHNubXBfYWxhcm0uYyBjYW4gYmUgY29tcGlsZWQgYWdhaW4gd2l0aCBDODkKKyAgIGNvbXBpbGVyczogZm9yIEM4OQorICAgaXQgaXMgcmVxdWlyZWQgdGhhdCBpbml0aWFsaXplcnMgYXJlIGNvbnN0YW50IGV4cHJlc3Npb25zLgorCisyMDEwLTAxLTAzIDE2OjI4ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jOgorCisgICBSZW5hbWUgbmV0c25tcF9hcmNoX3RjcGNvbm5fZGVsZXRlIHRvCisgICBuZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoCisgICB0aGUgaGVhZGVyIGZpbGUgYW5kIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuCisKKzIwMTAtMDEtMDMgMTY6MjYgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbnMuCisKKzIwMDktMTItMzAgMTI6NDkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTMzOiBmaXhlZCB0aGUgaXNzdWUgdGhhdCBpbmNsdWRpbmcgdGhlIGhlYWRlcgorICAgZmlsZQorICAgPG5ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaD4gZnJvbSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorICAgdHJpZ2dlcnMKKyAgIGNvbXBpbGVyIGVycm9ycyBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBwcm9jZXNzIChjb21wbGFpbnRzIGFib3V0CisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4gbm90IGJlaW5nIGluY2x1ZGVkIGJlZm9yZQorICAgPG5ldC1zbm1wL3R5cGVzLmg+KS4KKyAgIE5vdGU6IHRoaXMgZG9lcyBub3Qgc29sdmUgdGhlIHVuZGVybHlpbmcgcHJvYmxlbSB0aGF0IE1JQiBjb2RlCisgICBtdXN0IG5vdAorICAgaW5jbHVkZSB0aGUgaGVhZGVyIGZpbGUgPG5ldC1zbm1wL3R5cGVzLmg+IGJlY2F1c2UgZG9pbmcgc28gd291bGQKKyAgIHRyaWdnZXIgYQorICAgY2lyY3VsYXIgZGVwZW5kZW5jeSBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBzdGVwIChNSUIgY29kZSBpcworICAgY29tcGlsZWQgZHVyaW5nCisgICB0aGUgY29uZmlndXJlIHN0ZXAsIHdoaWxlIHRoZSBjb25maWd1cmUgc3RlcCBnZW5lcmF0ZXMKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBhbmQgPG5ldC1zbm1wL3R5cGVzLmg+IG5lZWRzCisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4pLgorCisyMDA5LTEyLTMwIDExOjQ4ICBidmFzc2NoZQorCisgICAqIGFwcHMsIG1hbjoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTk6IHVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdHMuCisKKzIwMDktMTItMjggMTg6MDMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfaW5kZXguYzoKKworICAgRml4ZWQgYSBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZC4gRm91bmQgdGhpcyBieSBhbmFseXppbmcgY29tcGlsZXIKKyAgIHdhcm5pbmdzLgorICAgTm90ZTogdGhlIGFmZmVjdGVkIGZ1bmN0aW9uLCByZWdpc3Rlcl9zdHJpbmdfaW5kZXgoKSwgaXNuJ3QKKyAgIGNhbGxlZCBmcm9tCisgICBhbnl3aGVyZSBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QgaXRzZWxmLgorCisyMDA5LTEyLTIzIDA5OjQ5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICBGaXggaW52YWxpZCByZWFkIHJlcG9ydGVkIGJ5IHZhbGdyaW5kOgorICAgSW52YWxpZCByZWFkIG9mIHNpemUgMQorICAgbWVtY3B5IChtY19yZXBsYWNlX3N0cm1lbS5jOjQwMikKKyAgIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19jb250YWluZXJfbG9hZF92NAorICAgKGlwYWRkcmVzc19pb2N0bC5jOjI0MCkKKyAgIG5ldHNubXBfYXJjaF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWQgKGlwYWRkcmVzc19saW51eC5jOjE1OCkKKyAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19jb250YWluZXJfbG9hZCAoaXBhZGRyZXNzX2NvbW1vbi5jOjExMikKKyAgIAorICAgUmV0dXJuaW5nIHN0cnVjdHVyZSB3aXRoIHBvaW50ZXJzIGluc2lkZSBpcyBub3QgdGhlIGJlc3QgdGhpbmcgdG8KKyAgIGRvLgorCisyMDA5LTEyLTIyIDE2OjA1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBGaXhlZCBzZXZlcmFsIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkcy4KKworMjAwOS0xMi0yMiAxMjowMiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCwgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgCisgICAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBSZXZlcnRlZCB0aGUgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2VzIG9mIHIxNzkxMzoKKyAgIC0gUmVzdG9yZWQgdGhlIGRlZmluaXRpb24gb2YgdGhlIERJRkZUSU1FVkFMKCkgbWFjcm8uCisgICAtIFJlc3RvcmVkIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuY3Rpb25zCisgICBjYWxjdWxhdGVfdGltZV9kaWZmKCksCisgICB1YXRpbWVfcmVhZHkoKSwgbWFya2VyX3R0aWNrcygpIGFuZCB0aW1ldmFsX3R0aWNrcygpLgorICAgLSBzdGFydHRpbWUgaXMgYWdhaW4gYSBnbG9iYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHN0YXRpYyBvbmUuCisgICBBbHNvIGltcGxlbWVudGVkIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKyAgIC0gTW92ZWQgdGhlIG1hcmtlcl90IHR5cGVkZWYgZnJvbSBuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmggdG8KKyAgIG5ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaC4KKyAgIC0gQWRkZWQgYSBuZXcgdHlwZWRlZiwgY29uc3RfbWFya2VyX3QuCisgICAtIEZvciB0aG9zZSBhdGltZV8qKCkgLyB1YXRpbWVfKigpIC8gKl90dGlja3MoKSBmdW5jdGlvbnMgdGhhdCBkbworICAgbm90IGNoYW5nZQorICAgdGhlaXIgYXJndW1lbnRzLCBkZWNsYXJlZCB0aGVzZSBhcmd1bWVudHMgY29uc3RfbWFya2VyX3QgaW5zdGVhZAorICAgb2YgbWFya2VyX3QuCisgICAtIFJlbmFtZWQgbmV0c25tcF9nZXRfc3RhcnR0aW1lKCkgYW5kIG5ldHNubXBfc2V0X3N0YXJ0dGltZSgpIHRvCisgICBuZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKSBhbmQgbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKCkKKyAgIHJlc3BlY3RpdmVseS4gTW92ZWQgdGhlc2UgZnVuY3Rpb25zIGZyb20gdG9vbHMuYyB0byBzeXN0ZW0uYy4KKyAgIC0gUmVtb3ZlZCB0aGUgZnVuY3Rpb24gYXRpbWVfaHN1YnRyYWN0KCkgKHdhcyBpbnRyb2R1Y2VkIGluCisgICByMTc5MTMpIGFuZAorICAgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiwgbmV0c25tcF9zZXRfYWdlbnRfdXB0aW1lKCkuCisKKzIwMDktMTItMjIgMDc6NTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBSZXZlcnRlZCByMTc5MjYsIHdoaWNoIG1hZGUgdGhlIHN0cmluZyByZXR1cm5lZCBieQorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSB6ZXJvLXRlcm1pbmF0ZWQuIEEgbmV3IHBhdGNoIHdpbGwKKyAgIGZvbGxvdworICAgdGhhdCBmaXhlcyB0aGUgY2FsbGVycyBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIHRoYXQKKyAgIHdlcmUKKyAgIGFzc3VtaW5nIHRoYXQgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSB6ZXJvLXRlcm1pbmF0ZXMgdGhlCisgICBzdHJpbmcKKyAgIHJlYWQgYnkgdGhpcyBmdW5jdGlvbi4KKworMjAwOS0xMi0yMSAxNDoyOSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IGNyYXNoIGluIElGLU1JQiBhbmQgSVAtTUlCIHdoZW4gdGhlcmUgYXJlCisgICBzb21lIGludGVyZmFjZXMgd2l0aCBicm9hZGNhc3QgSVAgYWRkcmVzcyBhbmQgc29tZSB3aXRob3V0LgorICAgCisgICBSZXNldCB0aGUgYmNhc3RlbnRyeSBpbiB0aGUgbG9vcCwgc28gaXQgY2Fubm90IGJlIGluc2VydGVkIHRvIHRoZQorICAgY29udGFpbmVyCisgICB0d2ljZS4KKyAgIAorICAgV2l0aG91dCB0aGlzIHBhdGNoLCB3aGVuIGFuIGludGVyZmFjZSB3aXRob3V0IGJyb2FkY2FzdCBhZGRyZXNzCisgICBpcyBwcm9jZXNzZWQsCisgICB0aGUgYmNhc3RhZGRyZXNzIGZyb20gcHJldmlvdXMgbG9vcCBpcyBpbnNlcnRlZCBpbnRvIHRoZQorICAgY29udGFpbmVyLiBUaGlzCisgICBvYnZpb3VzbHkgZmFpbHMgYW5kIHRoZSBiY2FzdGVudHJ5IGlzIGZyZWVkLCBidXQgdGhlIGNvbnRhaW5lcgorICAgc3RpbGwgY29udGFpbnMKKyAgIHJlZmVyZW5jZSB0byBpdCAtPiBTSUdTRUdWLgorCisyMDA5LTEyLTIxIDEzOjUyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5Mjg6IHdoaWxlIHIxNzkyOCBmaXhlZCBhIGRhbmdsaW5nIHBvaW50ZXIKKyAgIGRlcmVmZXJlbmNlCisgICBkZXRlY3RlZCBieSBydW5uaW5nIHRoZSBOZXQtU05NUCBzb2Z0d2FyZSBvbiBXaW5kb3dzLCB0aGF0IHBhdGNoCisgICBpbnRyb2R1Y2VkCisgICBhIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgYWJvdXQgd2hpY2ggb25seSBWYWxncmluZCBvbiBMaW51eAorICAgY29tcGxhaW5lZC4KKyAgIFRoaXMgZm9sbG93LXVwIHBhdGNoIGZpeGVzIGJvdGggZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAgIHRyaWdnZXJlZCBieQorICAgcGFyc2luZyB0aGUgcGVyc2lzdGVudERpciBrZXl3b3JkLgorCisyMDA5LTEyLTIxIDEzOjMyICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBBcHBsaWVkIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBwYXRjaCAjMjkwMTEyMi4gQ2hhbmdlczoKKyAgIC0gTmV3IGZlYXR1cmU6IHNwZWNpZnlpbmcgQVNOIHR5cGUgU05NUF9OT1NVQ0hJTlNUQU5DRSBhcyB0aGUKKyAgIHRoaXJkIGFyZ3VtZW50CisgICBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkgd2lsbCBjYXVzZSBhbiBTTk1QIEdldFJlcXVlc3QgLworICAgR2V0TmV4dFJlcXVlc3QgdG8KKyAgIHJldHVybiB0aGUgZXJyb3IgY29kZSBub1N1Y2hJbnN0YW5jZSAoU05NUHYyKSBvciBub1N1Y2hOYW1lCisgICAoU05NUHYxKS4gVGhpcworICAgbWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZSBhIGNhY2hlZCB0YWJsZSB3aXRoIG9uZSBvciBtb3JlCisgICAiaG9sZXMiLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvIG5vdCBmcmVlKCkgLyBtYWxsb2MoKSB0aGUgbWVtb3J5CisgICBmb3Igc3RvcmluZworICAgdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgdmFsdWUgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvIG5vdCBmcmVlKCkgLyBtYWxsb2MoKSB0aGUgbWVtb3J5CisgICBmb3Igc3RvcmluZworICAgdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4KKyAgIG1vZGlmaWVkLgorICAgLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGlmIHRoZSBzaXplIG9mIHRoZSBjYWNoZWQgdmFsdWUKKyAgIHNocnVuaywgdXNlCisgICByZWFsbG9jKCkgaW5zdGVhZCBvZiBmcmVlKCkgYW5kIG1hbGxvYygpLgorCisyMDA5LTEyLTIxIDEyOjIzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQXBwbGllZCBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgcGF0Y2ggIzI5MTIwNTU6IG1ha2Ugc3VyZQorICAgdGhhdAorICAgcGFyc2luZyB0aGUgInBlcnNpc3RlbnREaXIiIGtleXdvcmQgaW4gc25tcC5jb25mIGRvZXMgbm90IHRyaWdnZXIKKyAgIGEKKyAgIGRhbmdsaW5nIHBvaW50ZXIuIFRvIG15IHN1cnByaXNlIEJvdW5kc0NoZWNrZXIgY29tcGxhaW5lZCBhYm91dAorICAgdGhpcworICAgKG9uIFdpbmRvd3MpLCBidXQgVmFsZ3JpbmQgZGlkIG5vdCByZXBvcnQgdGhpcyBpc3N1ZSAob24gTGludXgpLgorCisyMDA5LTEyLTIxIDEyOjA4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5MjUgKGZpeCBtZW1vcnkgbGVhayBkdXJpbmcgc3RhcnR1cCk6IHdoaWxlCisgICByMTc5MjUgZml4ZWQKKyAgIG9ubHkgdGhlIGxlYWsgdHJpZ2dlcmVkIGZyb20gaW5zaWRlIHRoZSBmb3ItbG9vcCwgdGhpcyBwYXRjaCBkb2VzCisgICBub3cgYWxzbworICAgZml4IHRoZSBsZWFrIHRyaWdnZXJlZCBieSB0aGUgbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9yb3coKQorICAgY2FsbCBuZWFyCisgICB0aGUgZW5kIG9mIGxvZ19ub3RpZmljYXRpb24oKS4KKworMjAwOS0xMi0yMSAxMjowMSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFwcGxpZWQgcGF0Y2ggIzI5MTIwNjI6IG1ha2Ugc3VyZSB0aGF0IHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgaXMgcHJvcGVybHkgdGVybWluYXRlZCwgc3VjaCB0aGF0CisgICB0aGUKKyAgIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBkbyBub3QgdHJpZ2dlciBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZHMuCisgICBGb3VuZAorICAgdGhpcyBpc3N1ZSB2aWEgQm91bmRzQ2hlY2tlci4KKworMjAwOS0xMi0yMSAxMTowNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmM6CisKKyAgIEFwcGxpZWQgcGF0Y2ggIzI5MTIwNjgsIHdoaWNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgZHVyaW5nIHN0YXJ0dXAuCisgICBUaGUKKyAgIGZ1bmN0aW9uIGxvZ19ub3RpZmljYXRpb24oKSBhZGRzIGEgcm93IHRvIHRoZSB0YWJsZQorICAgbmxtTG9nVmFyVGFibGUsIGJ1dAorICAgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGF0IHRhYmxlIGhhcyBiZWVuCisgICBpbml0aWFsaXplZC4gSWYKKyAgIHRoYXQgaGFwcGVucywgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgYSByb3cgYnV0IHRoYXQgbWVtb3J5IGlzCisgICBuZXZlcgorICAgYWRkZWQgdG8gdGhlIGNhY2hlZCB0YWJsZSBkYXRhLiBUaGUgQm91bmRzQ2hlY2tlciB0b29sIHJlcG9ydGVkCisgICB0aGlzIGFzCisgICBhICJtZW1vcnkgbGVhayBsZWF2aW5nIHNjb3BlIi4KKworMjAwOS0xMi0yMSAxMDo1NCAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIEFkZGVkIHRoZSBmb2xsb3dpbmcgdGV4dCB0byB0aGUgIkxpbWl0YXRpb25zIiBzZWN0aW9uIG9mCisgICBSRUFETUUud2luMzI6CisgICAiV2hlbiB1c2luZyB3aW5FeHRETEwsIHRoZXJlIGlzIGFuIG9mZnNldCBvZiB1cCB0byBvbmUgc2Vjb25kCisgICBiZXR3ZWVuIHRoZQorICAgdmFsdWUgb2YgdGhlIHN5c1VwVGltZSB2YXJiaW5kIGluY2x1ZGVkIGluIHRoZSB0cmFwcyBnZW5lcmF0ZWQgYnkKKyAgIFNOTVAKKyAgIGV4dGVuc2lvbiBETExzIChlLmcuIGxpbmtVcCBhbmQgbGlua0Rvd24pIGFuZCB0aGUgdmFsdWUgb2YgdGhlCisgICBzeXNVcFRpbWUKKyAgIHZhcmJpbmQgaW5jbHVkZWQgaW4gdHJhcHMgZ2VuZXJhdGVkIGJ5IE5ldC1TTk1QIGl0c2VsZiAoZS5nLgorICAgY29sZFN0YXJ0KS4iCisKKzIwMDktMTItMjEgMTA6MDkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIFNwZWxsaW5nIGZpeDogcmVwbGFjZWQgYWxsIG9jY3VycmVuY2VzIG9mICdzcGVjaWZjJyBieQorICAgJ3NwZWNpZmljJy4KKworMjAwOS0xMi0yMSAxMDowNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgUmVmYWN0b3Jpbmc6IGVsaW1pbmF0ZWQgZHVwbGljYXRlZCBjb2RlIGJ5IHJlaW1wbGVtZW50aW5nCisgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCkgdXNpbmcgc25tcF9hbGFybV9yZWdpc3Rlcl9ocigpLiBOZWl0aGVyIHRoZQorICAgTmV0LVNOTVAgQVBJIG5vciB0aGUgYmVoYXZpb3Igb2Ygc25tcF9hbGFybV9yZWdpc3RlcigpIGhhcyBiZWVuCisgICBjaGFuZ2VkLgorCisyMDA5LTEyLTIwIDExOjEwICBtYWdmcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL2FnZW50eHRyYXAuYywgbWFuL01ha2VmaWxlLmluLCAgIAorICAgICAgbWFuL2FnZW50eHRyYXAuMS5kZWY6CisKKyAgIE5FV1M6IGFwcHM6IEFkZCBjb21tYW5kIHRvIHNlbmQgQWdlbnRYIG5vdGlmeSByZXF1ZXN0cyB0byBhCisgICBtYXN0ZXIgYWdlbnQuCisKKzIwMDktMTItMTcgMTY6NDQgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxNyAtLSBidWlsZHMgYWdhaW4gb24gV2luZG93cyBzeXN0ZW1zLgorCisyMDA5LTEyLTE3IDE2OjAzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkwMyAvIHBhdGNoIDI5MTEzMjMgIkZpeCBhZ2VudCBsb2NrdXAgd2hlbgorICAgbW9uaXRvcmluZworICAgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbiIgKHN1Ym1pdHRlZCBieSBteXNlbGYpLiBUaGF0IHBhdGNoCisgICBkaWQgbm90IG9ubHkKKyAgIGZpeCB0aGUgbG9ja3VwIGJ1dCBhbHNvIG1hZGUgc25tcGQgcHJpbnQgYSB3YXJuaW5nIGR1cmluZyBzdGFydHVwCisgICB3aGVuCisgICBpcXVlcnlTZWNOYW1lIHdhcyBub3QgY29uZmlndXJlZC4gVGhpcyB3YXJuaW5nIHdhcyBwcmludGVkIGV2ZW4KKyAgIHdoZW4gbm8KKyAgIGludGVybmFsIHF1ZXJpZXMgd2VyZSBwZXJmb3JtZWQuIFRoaXMgd2FybmluZyBpcyBub3cgb25seSBwcmludGVkCisgICBqdXN0IGJlZm9yZQorICAgdGhlIGZpcnN0IGludGVybmFsIHF1ZXJ5IGlzIG1hZGUgKGR1cmluZyB0aGUgZmlyc3QgY2FsbCBvZgorICAgbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCkgaW5zdGVhZCBvZiBkdXJpbmcgY3JlYXRpb24gb2YKKyAgIHRoZSBpbnRlcm5hbAorICAgc2Vzc2lvbikuCisKKzIwMDktMTItMTcgMTM6NTUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYzoKKworICAgUk1PTiBNSUIgc291cmNlIGNvZGUgY29tcGlsZXMgYWdhaW4gLS0gc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3OTEzLgorCisyMDA5LTEyLTE3IDEzOjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIE1vZGlmaWVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkgYW5kCisgICBBR1VUSUxfc3lzX3VwX3RpbWUoKSBzdWNoIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG5vcm1hbGl6ZSB0aGUKKyAgIHR2X3VzZWMgZmllbGQgb2YKKyAgIHN0cnVjdCB0aW1ldmFsIHByb3Blcmx5LiBOb3RlOiB0aGlzIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbiBkb2VzCisgICBub3QgYWZmZWN0CisgICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBhZm9yZW1lbnRpb25lZCB0d28gZnVuY3Rpb25zLgorCisyMDA5LTEyLTE3IDEzOjExICBidmFzc2NoZQorCisgICAqIG1hbi9uZXRzbm1wX3V0aWwuMzoKKworICAgUmVtb3ZlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBESUZGVElNRVZBTCgpIG1hY3JvIC0tIHNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc5MTMuCisKKzIwMDktMTItMTcgMTM6MDUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDb252ZXJ0ZWQgc3RhcnR0aW1lIGZyb20gYSBnbG9iYWwgdmFyaWFibGUgaW50byBhIHN0YXRpYyB2YXJpYWJsZQorICAgYW5kIGFwcGxpZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgLSBBZGRlZCB0d28gbmV3IG1hY3JvczogTkVUU05NUF9USU1FUkFERCgpIGFuZAorICAgTkVUU05NUF9USU1FUlNVQigpLgorICAgLSBBZGRlZCB0aHJlZSBuZXcgZnVuY3Rpb25zOiBuZXRzbm1wX2dldF9zdGFydHRpbWUoKSwKKyAgIG5ldHNubXBfc2V0X3N0YXJ0dGltZSgpIGFuZCBhdGltZV9oc3VidHJhY3QoKS4KKyAgIC0gUmVwbGFjZWQgZ2V0dGltZW9mZGF5KCkgKyBjYWxjdWxhdGVfdGltZV9kaWZmKCkgY2FsbHMgYnkgYSBjYWxsCisgICB0byBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKS4KKyAgIC0gUmVtb3ZlZCB0aGUgbWFjcm8gRElGRlRJTUVWQUwoKSBiZWNhdXNlIGl0IHdhcyBub3QgdXNlZCBpbnNpZGUKKyAgIHRoZSBOZXQtU05NUCBwcm9qZWN0IGFuZCBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhIGJ1Zy4KKyAgIC0gUmVtb3ZlZCB0aGUgZnVuY3Rpb25zIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSwgdWF0aW1lX3JlYWR5KCksCisgICBtYXJrZXJfdHRpY2tzKCkgYW5kIHRpbWV2YWxfdHRpY2tzKCkuCisKKzIwMDktMTItMTcgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQnVnIGZpeDogYWNjb3JkaW5nIHRvIFJGQyAyNTcxIHRoZSB1bml0IG9mIHNubXBFbmdpbmVUaW1lIGlzIG9uZQorICAgc2Vjb25kLAorICAgbm90IG9uZSBodW5kcmVkdGggb2YgYSBzZWNvbmQuCisKKzIwMDktMTItMTcgMTA6MDMgIGR0czEyCisKKyAgICogbWFuL3NubXB0ZXN0LjEuZGVmOgorCisgICBGaXggdHlwby4KKworMjAwOS0xMi0xNiAxMjozMCAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi90b29scy5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzLW9ubHkgYnVnIGZpeGVzOgorICAgLSBGaXhlZCB0aGUgc3RyYW5nZSBidWlsZCBlcnJvcnMgdGhhdCBvY2N1cnJlZCB3aGVuIGNvbXBpbGluZworICAgbGlibmV0c25tcCBhcyBhIERMTCBhbmQgd2hlbiBlaXRoZXIgPHN0ZGxpYi5oPiBvciA8c3RyaW5nLmg+IHdhcworICAgaW5jbHVkZWQgYWZ0ZXIgPG5ldC1zbm1wLWNvbmZpZy5oPiBpbnN0ZWFkIG9mIGJlZm9yZS4KKyAgIC0gRm9yIGRlYnVnIGJ1aWxkcyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLCBmaXhlZCB0aGUKKyAgIG1pc21hdGNoZXMgYmV0d2VlbiB0aGUgX21hbGxvY19kYmcoKSBjYWxsIGludm9rZWQgYnkgc3RyZHVwKCkgYW5kCisgICBmcmVlKCktaW5nIHN0cmR1cCgpLWVkIG1lbW9yeSBieSBpbmNsdWRpbmcgdGhlIDxjcnRkYmcuaD4gaGVhZGVyCisgICBpbiB0b29scy5jIGFuZCBieSBkZWZpbmluZyB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbAorICAgX0NSVERCR19NQVBfQUxMT0MuIERldGVjdGVkIHZpYSB0aGUgbWVtb3J5IGNoZWNrZXIgaW5jbHVkZWQgaW4KKyAgIEludGVsIFBhcmFsbGVsIFN0dWRpby4KKworMjAwOS0xMi0xNCAxNzoyMyAgdGFuZGVycworCisgICAqICBwZXJsL2FnZW50L2FnZW50LnhzLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBzeW5jIGRlZmluaXRpb24gb2YgbmV0c25tcF91ZHBfYWRkcl9wYWlyIGluIFBlcmwgd2l0aCB0aGUgY2hhbmdlcworICAgaW4KKyAgIHIxNzg1NSBhbmQgcjE3OTA4CisKKzIwMDktMTItMTQgMTM6NTUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFRDUERvbWFpbi5jOgorCisgICBGaXggVENQIHRyYW5zcG9ydCBicm9rZW4gYnkgcmV2LiAxNzg1NSAtIGNvcGllcyBvZgorICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyIGluIHNubXBUQ1BEb21haW4uYyBhbmQgc25tcFVEUERvbWFpbi5jIG11c3QKKyAgIGJlIHRoZSBzYW1lLgorCisyMDA5LTEyLTExIDE0OjQzICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHVzbS5jLCBtYW4vc25tcHVzbS4xLmRlZjoKKworICAgQ0hBTkdFUzogc25tcHVzbTogcGF0Y2ggZnJvbSBNYXJ0aW4gQmpvcmtsdW5kIHRvIGFkZCBhIC1DdyBvcHRpb24KKyAgIHRvIHVzZSBjcmVhdGVBbmRXYWl0IGZvciBhZ2VudHMgdGhhdCBhcmUgc3RyaWN0IGFib3V0IG5vdAorICAgYWxsb3dpbmcgYSByb3cgdG8gYmUgc2V0IHRvIGFjdGl2ZSB1bnRpbCB0aGUgYXV0aGVudGljYXRpb24KKyAgIHBhc3N3b3JkIGhhcyBiZWVuIGNoYW5nZWQ7IHBsdXMgd2hpdGUtc3BhY2UgY2xlYW4gdXAsIG1hbnVhbAorICAgYWRkaXRpb25zIGFuZCBoZWxwIG91dHB1dCBtb2RpZmljYXRpb25zIGJ5IGhhcmRha2VyCisKKzIwMDktMTItMTEgMTQ6MzUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYSBmb3JtYXQgc3BlY2lmaWVyIG1pc21hdGNoLgorCisyMDA5LTEyLTExIDE0OjA2ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMiwgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIHdpbkV4dERMTCBidWdzIGZpeGVkOgorICAgLSBzeXNVcFRpbWUuMCBkb2VzIG5vdyByZXBvcnQgdGhlIGNvcnJlY3QgdmFsdWUuCisgICAtIGEgbGlua1VwIG9yIGxpbmtEb3duIHRyYXAgaXMgbm93IHNlbnQgYWZ0ZXIgdGhlIHN0YXR1cyBvZiBhCisgICBuZXR3b3JrIGludGVyZmFjZQorICAgaGFzIGNoYW5nZWQuCisgICAtIHRoZSB2YWx1ZSBvZiB0aGUgc3lzVXBUaW1lLjAgdmFyYmluZCBpbiBsaW5rVXAgYW5kIGxpbmtEb3duCisgICB0cmFwcyBpcyBub3cKKyAgIGNvcnJlY3QuCisKKzIwMDktMTItMTAgMTU6NTIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSEVTOiAyOTExOTcwOiBQcm9wZXJseSB0ZXJtaW5hdGUgbGlua2VkIGxpc3QKKyAgIG9mIHJlZ2lzdHJhdGlvbnMuCisgICBQYXRjaCBwcm92aWRlZCBieSBNaXJrbyBEZWNrZXJ0LgorCisyMDA5LTEyLTEwIDE1OjQzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyOTExMzIzOiBGaXggYWdlbnQgbG9ja3VwIHdoZW4KKyAgIG1vbml0b3JpbmcgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbgorCisyMDA5LTEyLTEwIDEzOjU5ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgTWljcm9zb2Z0J3MgaW1wbGVtZW50YXRpb24gb2YKKyAgIGhyU3lzdGVtVXB0aW1lLjAuCisgICAtIEZpeGVkIGEgZmV3IHR5cG9zLgorCisyMDA5LTEyLTEwIDEzOjAxICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgbmV3bGluZSBpbiBhIGxvZ2dpbmcgc3RhdGVtZW50LgorCisyMDA5LTEyLTEwIDEyOjU0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBGaXhlZCB0aGUgZm9sbG93aW5nIHdpbkV4dERMTCBidWdzOgorICAgLSBGaXhlZCBidWcgaW4gdHJhcCBmb3J3YXJkaW5nOiBsaW5rRG93biB0cmFwcyB3ZXJlIHNlbnQgYXMKKyAgIHdhcm1TdGFydCB0cmFwcworICAgYW5kIGxpbmtVcCB0cmFwcyB3ZXJlIHNlbnQgYXMgbGlua0Rvd24gdHJhcHMuCisgICAtIEZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGV4dGVuc2lvbiBETEwgbG9hZGluZy4KKyAgIC0gQSBkZWJ1ZyB0cmFjZSBzdGF0ZW1lbnQgaXMgbm93IGludm9rZWQgd2hlbmV2ZXIgYSBzZXJpb3VzIGVycm9yCisgICBoYXMgYmVlbgorICAgZGV0ZWN0ZWQuCisKKzIwMDktMTItMTAgMTI6MzcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE9JRHMgaW4gZGVidWcgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoZSB3aW5FeHRETEwgbW9kdWxlIGFyZSBub3cKKyAgIHByaW50ZWQgaW4KKyAgIHN5bWJvbGljIGZvcm0gaW5zdGVhZCBvZiBudW1lcmljIGZvcm0uCisKKzIwMDktMTItMTAgMDg6NTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBQcm9qZWN0IGRlcGVuZGVuY2llcyBzaG91bGQgbm93IHJlYWxseSBiZSBjb3JyZWN0LiBTaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3ODczLgorCisyMDA5LTEyLTEwIDA4OjQxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDaGFuZ2VzIChvbmx5IHNvdXJjZSBjb2RlIGNvbW1lbnRzIGhhdmUgYmVlbiBjaGFuZ2VkKToKKyAgIC0gUmVtb3ZlZCBhIG5vdGUgdGhhdCBjb250cmFkaWN0ZWQgdGhlIGluc3RydWN0aW9ucyBpbgorICAgUkVBRE1FLndpbjMyLgorICAgLSBVcGRhdGVkIGJ1aWxkIGluc3RydWN0aW9ucyBhZnRlciB0aGUgYWRkaXRpb24gb2YgdGhlIGZpbGUKKyAgIHdpbjMyL1NubXAtd2luRXh0RExMLmggaW4gcjE3ODMwLgorCisyMDA5LTEyLTEwIDA4OjE3ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcHN0YXR1cy5jOgorCisgICBNYWRlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVzY3JpcHRpb25zIGluIHRoZQorICAgcmVzcGVjdGl2ZSBtYW4gcGFnZXMuCisKKzIwMDktMTItMTAgMDM6MDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFnZW50X3N5c09SX2NhbGxiYWNrIHdvbid0IHRyaWdnZXIgYSB3YXJuaW5nIHdoZW4KKyAgIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjay4gQ2hhbmdlIGFnZW50eF9yZW9wZW5fc3lzT1JUYWJsZSBpbgorICAgb3JkZXIgdG8gYXZvaWQgd2FybmluZ3Mgb2YgY29uc3QgcmVtb3ZhbC4KKworMjAwOS0xMi0wOSAxNTowNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICAtIE1vdmVkIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUgJ25ld2xpbmUnIGluc2lkZSB0aGUKKyAgIGZ1bmN0aW9uCisgICBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoKSBiZWNhdXNlIHRoaXMgdmFyaWFibGUgaXMgb25seSB1c2VkIGJ5CisgICB0aGF0IGZ1bmN0aW9uLgorICAgLSBEb2N1bWVudGVkIHRoZSBwdXJwb3NlIG9mIHRoZSB2YXJpYWJsZSAnbmV3bGluZScuCisgICAtIEJ1ZyBmaXg6IG1hZGUgc3VyZSB0aGF0IHRoZSBjYWxsIGxvZ19oYW5kbGVyX3N0ZG91dGVycigpIGRvZXMKKyAgIG5vdCB0cmlnZ2VyIGFuCisgICBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgKHN0clstMV0pIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCB0bworICAgdGhpcyBmdW5jdGlvbi4KKworMjAwOS0xMi0wOSAxNDozNyAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgc3VwcG9ydCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2l0aCBIVyBhZGRyZXNzCisgICBiaWdnZXIgdGhhbiA2IGJ5dGVzIHRvIGlwTmV0VG9NZWRpYVRhYmxlIGFuZAorICAgaXBOZXRUb1BoeXNpY2FsVGFibGUuCisgICBTb21lIEhXLCBsaWtlIEluZmluaUJhbmQsIHVzZXMgSFcgYWRkcmVzc2VzIHdpdGggOSBhbmQgbW9yZQorICAgYnl0ZXMuIFNubXBkIG9uIExpbnV4IHdhcyBub3QgYWJsZSB0byBwYXJzZSAvcHJvYy9uZXQvYXJwIHRoZW4KKyAgIGFuZCBwcm9kdWNlZCB1Z2x5ICdpb2N0bCAzNTEyMyByZXR1cm5lZCAtMScgdG8gbG9nLgorCisyMDA5LTEyLTA5IDEyOjI3ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgQWRkZWQgbWlzc2luZyAtTG8gaW4gYSBjb21tYW5kIGxpbmUgZXhhbXBsZS4KKworMjAwOS0xMi0wOSAxMjoxNiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9zbm1wZHNkay9zbm1wZC5kc3A6CisKKyAgIEFkZGVkIHNubXBhcGkubGliIHRvIHRoZSBsaW5rZXIgaW5wdXQgbGlzdCBvZiBzbm1wZC5leGUuCisgICBBcHBhcmVudGx5IFZpc3VhbAorICAgU3R1ZGlvIDIwMDUgYW5kIDIwMDggbmVlZCB0aGlzIGxpYnJhcnkgaW4gdGhlIGxpbmtlciBpbnB1dCBsaXN0CisgICB3aGVuIGxpbmtpbmcKKyAgIHRoZSBleGUsIHdoaWxlIGZvciBWaXN1YWwgU3R1ZGlvIDYgaXQgaXMgc3VmZmljaWVudCB3aGVuIHRoaXMKKyAgIGxpYnJhcnkgaXMKKyAgIHByZXNlbnQgaW4gdGhlIGxpbmtlciBpbnB1dCBsaXN0IG9mIG5ldHNubXBtaWJzLmxpYi4KKworMjAwOS0xMi0wOSAwODo0NSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFVwZGF0ZWQgUkVBRE1FLndpbjMyOiBiZWNhdXNlIG9mIHIxNzg4NCBhbmQgcjE3ODczLCB0aGUgYnVpbGQKKyAgIHByb2Nlc3MgYmVjYW1lIHNpbXBsZXIuCisKKzIwMDktMTItMDkgMDg6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEV4cG9ydCBzdHJ0b3VsbCAtLSBzaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHIxNzg4Ni4KKworMjAwOS0xMi0wOSAwODoyMSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFJldmVydGVkIHIxNzcwMCBmb3IgUkVBRE1FLndpbjMyOiBiZWNhdXNlIG9mIHIxNzg4NiwgbW9kaWZ5aW5nCisgICB0aGUKKyAgIHN0cnRvdWxsIGxpbmUgaW4gd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYgaXMgbm8gbG9uZ2VyCisgICBuZWNlc3NhcnkuCisKKzIwMDktMTItMDkgMDg6MTIgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgIAorICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzOiBzd2l0Y2hlZCBmcm9tIF9zdHJ0b3VpNjQoKSB0byBzdHJ0b3VsbCgpIGZvciBNaWNyb3NvZnQKKyAgIFZpc3VhbCBTdHVkaW8KKyAgIDIwMDIgYW5kIGxhdGVyIGJlY2F1c2UgdGhlIGZvcm1lciBpcyBub3QgZnVsbHkgUE9TSVggY29tcGxpYW50LgorICAgVGhlIHN0cnRvdWxsKCkKKyAgIHVuaXQgdGVzdCBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3IgX3N0cnRvdWk2NCgpIHdpdGgKKyAgIE1TVkMgMjAwODoKKyAgIHRlc3QgMTQgZmFpbGVkIChpbnB1dCAiMHgiKTogZXhwZWN0ZWQgZW5kIDEsIGdvdCBlbmQgMAorICAgdGVzdCAxNiBmYWlsZWQgKGlucHV0ICIweCIpOiBleHBlY3RlZCBlbmQgMSwgZ290IGVuZCAwCisKKzIwMDktMTItMDggMjE6NTQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogTWFrZSBzdXJlIHRoYXQgYSBtYXNrIGlzIGdpdmVuIHRvIG9wZW4KKyAgIHdoZW4gT19DUkVBVCBpcyBzcGVjaWZpZWQKKworMjAwOS0xMi0wOCAxNjoyMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMi5kc3c6CisKKyAgIE1hZGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXhlJ3MgYW5kIGxpYidzIGV4cGxpY2l0IHN1Y2ggdGhhdAorICAgVmlzdWFsCisgICBTdHVkaW8gY2FuIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBidWlsZCBvcmRlciBpbnN0ZWFkIG9mIHRoZSB1c2VyCisgICBoYXZpbmcKKyAgIHRvIGZpZ3VyZSB0aGlzIG91dC4KKworMjAwOS0xMi0wOCAxNTo0NyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gVW5peCBzeXN0ZW1zIChmaXhlZCBhIHR5cG8gaW50cm9kdWNlZCBpbiByMTc4ODEpLgorCisyMDA5LTEyLTA4IDE1OjM3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcDoKKworICAgQWRkZWQgbWlzc2luZyAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLiBXaXRob3V0IHRoaXMKKyAgIGRlZmluZSB0aGUgTWljcm9zb2Z0CisgICBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBhIGJlbmlnbiByZWRlZmluaXRpb24gb2YKKyAgIHR5cGUgc29ja2xlbl90LgorCisyMDA5LTEyLTA4IDE1OjI4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIENsZWFuZWQgdXAgdGhlIGNvZGUgZm9yIHNldHRpbmcgbGluZSBidWZmZXJpbmc6CisgICAtIEluc3RlYWQgb2YgaGF2aW5nIGNhbGxzIHRvIHNldHZidWYoKSBpbiBtdWx0aXBsZSBmaWxlcywgdGhlcmUKKyAgIGlzIG5vdyBvbmUgY2FsbAorICAgdG8gc2V0dmJ1ZigpIGZyb20gdGhlIG5ldyBmdW5jdGlvbiBuZXRzbm1wX3NldF9maWxlbG9nLiBUaGVzZQorICAgc291cmNlIGZpbGVzCisgICBhcmU6IHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmMsCisgICBhcHBzL3NubXB0YWJsZS5jCisgICBhbmQgYWdlbnRcbWliZ3JvdXBcZGlzbWFuXHRyYWNlcm91dGVcdHJhY2VSb3V0ZUN0bFRhYmxlLmMuCisgICAtIFVzaW5nIC1MbyAvIC1MZSBkb2VzIG5vdyBlbmFibGUgbGluZSBidWZmZXJpbmcgZm9yIHN0ZG91dCAvCisgICBzdGRlcnIgcmVzcGVjdGl2ZWx5LgorICAgLSBSZW1vdmVkIGNvZGUgaW4gc25tcGQuYyBhbmQgc25tcHRyYXBkLmMgZm9yIHNldHRpbmcgbGluZQorICAgYnVmZmVyaW5nIG9uIHN0ZG91dAorICAgc2luY2Ugc2V0dGluZyBsaW5lIGJ1ZmZlcmluZyBvbiBzdGRvdXQgaXMgbm93IHRyaWdnZXJlZCBieSB0aGUKKyAgIGNvbW1hbmQtbGluZQorICAgb3B0aW9uIC1Mby4KKyAgIEJ1Z3MgZml4ZWQ6CisgICAtIExpbmUgYnVmZmVyaW5nIG1vZGUgaXMgbm93IGFsc28gc2V0IGZvciBzdGRlcnIgd2hlbiB0aGUKKyAgIGNvbW1hbmQtbGluZSBvcHRpb24KKyAgIC1MZSBoYXMgYmVlbiBzcGVjaWZpZWQuCisgICAtIExpbmUgYnVmZmVyaW5nIG1vZGUgaXMgbm93IHNldCBjb3JyZWN0bHkgZm9yIHN0ZG91dCBvbiBXaW5kb3dzCisgICBzeXN0ZW1zCisgICAoY29tbWFuZC1saW5lIG9wdGlvbiAtTG8pLgorCisyMDA5LTEyLTA4IDEyOjMyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGxvY2FsIHZhcmlhYmxlcyB0aGF0IHdlcmUgZGVmaW5lZAorICAgYnV0CisgICBub3QgdXNlZCBieSBvbmx5IGVuYWJsaW5nIHRoZSBsb2NhbCB2YXJpYWJsZSBkZWZpbml0aW9ucyBvbiB0aGUKKyAgIHBsYXRmb3JtIHRoYXQgdXNlcyB0aGVzZSB2YXJpYWJsZXMgKExpbnV4KS4KKworMjAwOS0xMi0wOCAxMjoyNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIEFkZGVkICNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiLiBGaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDktMTItMDggMTI6MjUgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9tYWluLmM6CisKKyAgIEluY2x1ZGUgdGhlIGdldGhvc3RlbnQoKSAvIHNldGhvc3RlbnQoKSBkZWNsYXJhdGlvbnMgYmVmb3JlIHVzaW5nCisgICB0aGVzZQorICAgZnVuY3Rpb25zLiBGaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmcgb24gV2luZG93cyBzeXN0ZW1zLgorCisyMDA5LTEyLTA4IDEyOjExICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIEZpeGVkIGFuIGluY29uc2lzdGVuY3kgKHdoaWNoIGlzIGFsbG93ZWQgYnkgdGhlIEFOU0kgQyBzdGFuZGFyZCkKKyAgIGJldHdlZW4KKyAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9uIG9mCisgICBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIgYW5kCisgICBuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyIHN1Y2gKKyAgIHRoYXQgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIGRvZXMgbm8gbG9uZ2VyIGNvbXBsYWluCisgICBhYm91dAorICAgdGhpcy4KKworMjAwOS0xMi0wOCAxMjowOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorICAgY29tcGxhaW4gYWJvdXQgaW1wbGljaXRseSBjYXN0aW5nIGF3YXkgY29uc3RuZXNzLgorCisyMDA5LTEyLTA4IDEyOjA3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBPbmx5IGNvbXBpbGUgdGhlIHdpbkV4dERMTCBzb3VyY2UgY29kZSBpZiB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvCisgICBVU0lOR19XSU5FWFRETExfTU9EVUxFIGhhcyBiZWVuIGRlZmluZWQuCisKKzIwMDktMTItMDggMTI6MDMgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgQWRkZWQgbWlzc2luZyAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLgorCisyMDA5LTEyLTA4IDEyOjAxICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgTWFkZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBleGUncyBhbmQgbGliJ3MgZXhwbGljaXQgc3VjaCB0aGF0CisgICBWaXN1YWwKKyAgIFN0dWRpbyBjYW4gZmlndXJlIG91dCB0aGUgcHJvcGVyIGJ1aWxkIG9yZGVyIGluc3RlYWQgb2YgdGhlIHVzZXIKKyAgIGhhdmluZworICAgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgb3JkZXIuCisKKzIwMDktMTItMDggMDk6NDYgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3MgLyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbzogZGlzYWJsZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmcKKyAgIGFib3V0CisgICBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2hlcyAoNDAxOCkgYmVjYXVzZSB0aGlzIHdhcm5pbmcgZG9lcyBub3QKKyAgIHlpZWxkCisgICBhbnkgdXNlZnVsIGluZm9ybWF0aW9uLgorCisyMDA5LTEyLTA4IDA5OjE3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzYzOSAocGF0Y2ggMjc4MDQxMSAtLSBmaXggY29tcGlsZXIgd2FybmluZ3MpOgorICAgYXBwbGllZAorICAgdGhpcyBwYXRjaCB0byBuZXQtc25tcC1jb25maWcuaC5pbiB0b28gc3VjaCB0aGF0CisgICBuZXQtc25tcC1jb25maWcuaCBhbmQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluIG1hdGNoIGFnYWluLgorCisyMDA5LTEyLTA4IDA4OjE2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhZ2VudHhfc3lzT1JfY2FsbGJhY2soKSBkb2VzIG5vdCB0cmlnZ2VyIGEKKyAgIGNvbXBpbGVyCisgICB3YXJuaW5nIHdoZW4gdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuCisgICBkZWNsYXJlZCBjb25zdC4KKworMjAwOS0xMi0wOCAwODoxNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIENoYW5nZWQgdGhlIHJldHVybiB0eXBlIG9mIHN0cnRvdWxsKCkgZnJvbSAndW5zaWduZWQgbG9uZyBsb25nJworICAgKHdoaWNoCisgICBpcyBub3QgdmFsaWQgQzg5KSB0byAndWludDY0X3QnIChkZWNsYXJlZCBpbgorICAgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPikuCisgICBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgY29tcGlsZSBhZ2FpbiB3aXRoCisgICBNU1ZDIDYuMC4KKworMjAwOS0xMi0wNyAxMDo0NiAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBUd2VhayBtaXNzaW5nIHN1YmlkZW50aWZpZXIgcHJvY2Vzc2luZyB0byBiZSBtb3JlIHR5cGUtYXdhcmUuCisgICAoQW4gaXNzdWUgd2l0aCBBSVgsIGF0IGxlYXN0KQorCisyMDA5LTEyLTA2IDE4OjM4ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBNYWtlIHRoZSBsaXN0cyBvZiBjb20yU2VjKkVudHJpZXMgc3RhdGljCisKKzIwMDktMTItMDYgMTg6MzQgIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIE1ha2UgdGhlIGl0ZXJhdG9yIHZhcmlhYmxlIGluIG5ldHNubXBfKl9nZXRTZWNOYW1lIGNvbnN0CisKKzIwMDktMTItMDYgMTg6MjkgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBDaGFuZ2UgdGhlIHR5cGVzIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mCisgICBuZXRzbm1wXypfZ2V0U2VjTmFtZSBmcm9tIGNoYXIqIHRvIGNvbnN0IGNoYXIqIHNpbmNlIHRoZXkgcG9pbnQKKyAgIGludG8gaW50ZXJuYWwgc3RydWN0dXJlcy4KKworMjAwOS0xMi0wNSAyMDoxOSAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgZml4IGRlY2xhcmF0aW9uIG9mIHN0cnRvdWxsCisKKzIwMDktMTItMDUgMTc6NDIgIHRhbmRlcnMKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgY2FsbCBuZXRzbm1wX3JlYWRfbW9kdWxlIGluc3RlYWQgb2YgcmVhZF9tb2R1bGUgdG8gbWFrZSBpdAorICAgY29tcGlsZSB3aXRoCisgICBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorCisyMDA5LTEyLTAyIDE1OjM5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgaW52YWxpZCBhY2Nlc3MgdG8gbWVtb3J5IGluIFRDUC1NSUIKKyAgIFRoaXMgcGFydGx5IHJldmVydHMgcGF0Y2ggMTc3MTkgLSB0aGUgZW50cmllcyAqYXJlKiB1c2VkIGFmdGVyCisgICByYXdfZGF0YSBjb250YWluZXIgaXMgZnJlZWQuIFRoZXNlIGVudHJpZXMgc2hvdWxkIGJlIGZyZWVkIHdoZW4KKyAgIGFzc29jaWF0ZWQgcm93cmVxX2N0eCBpcyBmcmVlZC4KKworMjAwOS0xMi0wMiAwODozMCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIHVkcFRhYmxlIGluZGV4ZXMgb24gYmlnLWVuZGlhbiA2NGJpdCBMaW51eC4KKyAgIFRoZSBpbmRleCB3YXMgYWx3YXlzICcwLjAuMC4wJyBpbnN0ZWFkIG9mIHJlYWwgbG9jYWwgSVAgYWRkcmVzcy4KKworMjAwOS0xMi0wMSAxMjozNiAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIFVwZGF0ZSBhIHJlZHVuZGFudCAoYW5kIHByb2JhYmx5IGluYWNjdXJhdGUpIGNvbW1lbnQuCisKKzIwMDktMTItMDEgMTI6MzEgIGR0czEyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjgyMjM2MDogRml4IG1lbW9yeSBsZWFrIHdoZW4gYnVpbGRpbmcKKyAgIHRhYmxlIE9JRHMKKworMjAwOS0xMi0wMSAxMjowOCAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wdGFibGU6IEJVR1M6IDI4Mzc5OTg6IEhhbmRsZSBtaXNzaW5nIGluc3RhbmNlCisgICBzdWJpZGVudGlmaWVycyBpbiByZXN1bHRzCisKKzIwMDktMTItMDEgMTE6NTYgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg0MTAwODogUHJvdGVjdCBhZ2FpbnN0IGNyYXNoIGZvbGxvd2luZworICAgZmFpbGVkIEFnZW50WCByZXNwb25zZQorCisyMDA5LTEyLTAxIDA3OjM0ICBqc2FmcmFuZWsKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEZpeCByZXNwb25kaW5nIHRvIGJyb2FkY2FzdCByZXF1ZXN0cy4KKyAgIFVEUCByZXNwb25zZXMgYXJlIHNlbnQgd2l0aCBzb3VyY2UgSVAgYWRkcmVzcyB3aGljaCB3YXMKKyAgIGRlc3RpbmF0aW9uIG9mCisgICBhcHByb3ByaWF0ZSByZXF1ZXN0cyAoaW1wbGVtZW50ZWQgaW4gU1ZOIHJldi4gMTUyMTUpLiBCdXQgaWYgdGhlCisgICBkZXN0aW5hdGlvbgorICAgb2YgYSByZXF1ZXN0IGlzIGJyb2FkY2FzdCBJUCBhZGRyZXNzLCB0aGUgcmVxdWVzdCB3YXMgc2VudCB3aXRoCisgICB0aGUgYnJvYWRjYXN0CisgICBhZGRyZXNzIGFzIHNvdXJjZS4gc2VuZG1zZygpIG9uIExpbnV4IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBhbmQKKyAgIHJldHVybnMgZXJyb3IKKyAgIC0+IHJlc3BvbnNlIGlzIG5vdCBzZW50LiBJbiBvcmRlciB0byBzZW5kIHJlc3BvbnNlcyBmcm9tIHRoZSBzYW1lCisgICBpbnRlcmZhY2UsCisgICBpbnRlcmZhY2UgaW5kZXggb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSBtdXN0IGJlIHVzZWQuCisKKzIwMDktMTItMDEgMDA6MjkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFjdHVhbGx5IGNvbXBpbGUgYWZ0ZXIgMTc4NTIuCisKKzIwMDktMTItMDEgMDA6MjQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFjdHVhbGx5IGNvbXBpbGUgYWZ0ZXIgMTc4NDIuCisKKzIwMDktMTEtMzAgMTY6NTUgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg3Mzg1ODogRml4IGhhbmRsaW5nIG9mIHNjaGVkT3duZXIgaW5kZXguCisgICBQYXRjaCBwcm92aWRlZCBieSBNYXggU2NodWJlcnQuCisKKzIwMDktMTEtMzAgMTY6NDYgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMub2xkLWFwaS5jb25mOgorCisgICBDSEFOR0VTOiBtaWIyYzogQlVHUzogMjg4ODU2OTogRml4IGdlbmVyYXRpb24gb2YgdGFibGUgY29sdW1ucworICAgYXJyYXkKKworMjAwOS0xMS0zMCAxNjozMCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODk0MDU5OiBIYW5kbGUgZXJyb3JzIHdoZW4gY291bnRpbmcKKyAgIGludGVyZmFjZXMKKworMjAwOS0xMS0zMCAxNjowNyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjg5NzAwMDogU3VwcHJlc3MgMzItYml0IGNvdW50ZXIgdHJ1bmNhdGlvbgorICAgd2FybmluZ3MuCisKKzIwMDktMTEtMzAgMTU6MzQgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5MDMwOTI6IEZpeCBicm9rZW4gaGFuZGxpbmcgb2YgYnJvYWRjYXN0CisgICBlbnRyaWVzLgorCisyMDA5LTExLTMwIDE1OjE5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5MDEwMjk6IEZpeCBjb21waWxlciB3YXJuaW5nIG9uCisgICBDbG9zZUhhbmRsZSgpCisgICBFbmRpYW4gcHJvYmxlbXMgYWxyZWFkeSBhZGRyZXNzZWQgYnkgcGF0Y2ggIzI4MzU1NzYKKworMjAwOS0xMS0zMCAxNToxMyAgZHRzMTIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjg5MDkzMTogQmV0dGVyIGhhbmRsaW5nIG9mIENvdW50ZXI2NAorICAgdmFsdWVzLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWF4IFJvbWFub3YuCisKKzIwMDktMTEtMzAgMTU6MDcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4NzgxNjogUHJvdGVjdCBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8KKyAgIGNyYXNoCisKKzIwMDktMTEtMzAgMTU6MDMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMyMjA6IEZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyB3aGVuCisgICBpZlhUYWJsZSBpcyBub3QgaW5jbHVkZWQuCisKKzIwMDktMTEtMzAgMTQ6NDkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMTU1OiBGaXggbWVtb3J5IGxlYWsgaW4gcHJveHkKKyAgIGhhbmRsaW5nLgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgR293dGhhbSBUaG9tbWFuZHJhLgorCisyMDA5LTExLTMwIDE0OjMyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzA5MjogU3VwcG9ydCBtb25pdG9yaW5nIHByb2Nlc3NlcyB0aGF0CisgICBzaG91bGQgbm90IGJlIHJ1bm5pbmcuCisgICBQYXRjaCBwcm92aWRlZCBieSBDaHJpc3RpYW4gKGNnNzUpLgorICAgCisgICBRbjogU2hvdWxkIHRoaXMgZnVuY3Rpb25hbGl0eSBiZSBiYWNrLXBvcnRlZCB0byBlYXJsaWVyIGxpbmVzPworCisyMDA5LTExLTMwIDE0OjEyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4Nzc1MTg6IEZpeCBoYW5kbGluZyBvZiBzY29wZWQgQWdlbnRYCisgICB2YXJpYWJsZXMKKworMjAwOS0xMS0zMCAxNDowMSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjgzNTU3NjogRml4IGVuZGlhbm5lc3MgaXNzdWVzIGluCisgICBwYXNzL3Bhc3NfcGVyc2lzdAorCisyMDA5LTExLTI3IDA4OjU0ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jOgorCisgICBSZW1vdmUgZXhlY3V0YWJsZSBhdHRyaWJ1dGUgZnJvbSBzb3VyY2UgZmlsZXMuCisKKzIwMDktMTEtMjUgMjA6MzUgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBsb2NhbC9taWIyYy5ub3RpZnkuY29uZjoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgYWxsIHRoZSBvaWRzIGFuZCBvaWQgbGVuZ3RocyBpbiBhZ2VudF90cmFwLmMKKyAgIGNvbnN0IGFuZCB1c2UgdGhlbSBmcm9tIGV2ZXJ5d2hlcmUuCisKKzIwMDktMTEtMjUgMjA6MjcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYjogSW5zdGFsbCBsaWJyYXJ5L29pZC5oLiBUaGFua3MgdG8gIlRvbWFzeiBMaXMiCisgICB3aG8gc3BvdHRlZCB0aGUgYnVnLgorCisyMDA5LTExLTI1IDA5OjQ3ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaDoKKworICAgQ29tbWVudC1vbmx5IGNoYW5nZTogY2hhbmdlZCB0aGUgbmFtZSBpbiB0aGUgZmlsZSBoZWFkZXIgZnJvbQorICAgdGVzdGhhbmRsZXIuaAorICAgdG8gaW5zdGFuY2UuaCBzdWNoIHRoYXQgaXQgbm93IG1hdGNoZXMgdGhlIGZpbGVuYW1lLgorCisyMDA5LTExLTI0IDA3OjQ5ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3QKKworMjAwOS0xMS0yMyAwNzowNyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB0aGUgZW50ZXJwcmlzZSBhcmd1bWVudCBvZgorICAgbmV0c25tcF9zZW5kX3RyYXBzIGFuZCBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIGNvbnN0CisKKzIwMDktMTEtMjMgMDc6MDIgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB0aGUgbmFtZSBhcmd1bWVudCB0byBmaW5kX3ZhcmJpbmRfaW5fbGlzdAorICAgY29uc3QKKworMjAwOS0xMS0yMiAyMzoyNSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oOgorCisgICBSZW1vdmUgc29tZSBsb2NhbCByZWRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMKKworMjAwOS0xMS0yMiAwMTowMyAgbWFnZnIKKworICAgKiAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmcsIFdpbjMyOiBSZW1vdmUgYSBmZXcgdW51c2VkIGNvbmZpZ3VyZSBzeW1ib2xzCisKKzIwMDktMTEtMjEgMDg6MDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvU25tcC13aW5FeHRETEwuaCwgd2luMzIvc25tcC13aW5leHRkbGwuaDoKKworICAgUmVwbGFjZWQgYW4gYWNjaWRlbnRhbGx5IGNvbW1pdHRlZCBmaWxlIGJ5IHRoZSBwcm9wZXIgY29udGVudHMuCisKKzIwMDktMTEtMjAgMTY6MjkgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIFJldmVydGVkIGFjY2lkZW50YWxseSBtZXJnZWQgY2hhbmdlcy4KKworMjAwOS0xMS0yMCAxNjoyNiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL3NubXAtd2luZXh0ZGxsLmg6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAwOS0xMS0yMCAxNjoxOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYywgICAKKyAgICAgIGxvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgU3BlbGxpbmcgZml4IGluIEMgc291cmNlIGNvZGUgY29tbWVudHM6IHJlcGxhY2VkICdyZXRyaXZhbCcgYnkKKyAgICdyZXRyaWV2YWwnLgorCisyMDA5LTExLTIwIDE2OjE1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBGaXhlZCBhIG5hbWluZyBpbmNvbnNpc3RlbmN5OiByZXBsYWNlZCB0d28gb2NjdXJyZW5jZXMgd2luRXh0RGxsCisgICBieSB3aW5FeHRETEwgaW4gc291cmNlIGNvZGUgY29tbWVudHMuCisKKzIwMDktMTEtMTkgMjI6NTIgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjkwMDA3ODogQWRkIHN1cHBvcnQgZm9yIE9JRCB2YXJpYWJsZXMgd2l0aAorICAgc2l6ZSBpbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGJ5dGVzLCBjb3JyZWN0IHN5c09iamVjdElEIHRvIHVzZQorICAgdGhpcy4KKworMjAwOS0xMS0xMyAxMjo1OSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBsb2dnaW5nIG9mICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMgorICAgYml0cycgaW4gSVAtTUlCIGFuZCBUQ1AtTUlCCisgICBUaGUgY291bnRlcnMsIHdoaWNoIGdyb3cgZmFzdCBhcmUgbm93IGN1dCB0byAzMmJpdHMuCisKKzIwMDktMTEtMTIgMDg6MjYgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgVXNlIGJpZyBwcmludGYncyBpbnN0ZWFkIG9mIG1hbnkgc21hbGwgb25lcyB0byBzYXZlIGEgZmV3IGh1bmRyZWQKKyAgIGJ5dGVzIG9uIHRoZSBmaW5hbCBleGVjdXRhYmxlIHNpemUuCisKKzIwMDktMTEtMTIgMDI6MjQgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL3N0cmxjcHkuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvbC5jLCAgIAorICAgICAgc25tcGxpYi9zdHJ0b3VsLmMsIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBBQ19SRVBMQUNFX0ZVTkNTIHRvIGhhbmRsZSBjb2RlIHRoYXQgaXMKKyAgIG1pc3Npbmcgb24gc29tZSBwbGF0Zm9ybXMuCisKKzIwMDktMTEtMTEgMDk6MDAgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIEZpeCBjYWNoZSBmcmVlIHJvdXRpbmUgdG8gbWF0Y2ggaGVhZGVyIGRlY2xhcmF0aW9uLgorICAgUmV0dXJuIHN1Y2Nlc3MvZmFpbHVyZSB2YWx1ZXMgZnJvbSBjYWNoZSBsb2FkIHJvdXRpbmUuCisgICBQcm9ibGVtIGlkZW50aWZpZWQgYnkgWHVhbi4KKworMjAwOS0xMC0zMCAwOTo1MSAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBORVdTOiBzbm1wbGliOiBSZXZlcnQgMTc4MDgsIGluc3RlYWQgZmFjdG9yIG91dCB0aGUgZGVjbGFyYXRpb24KKyAgIG9mIG9pZCB0byBpdCdzIG93biBmaWxlIGFuZCBpbmNsdWRlIHRoYXQgZmlsZSBmcm9tIGJvdGggdHlwZXMuaAorICAgYW5kIGFzbjEuaAorCisyMDA5LTEwLTMwIDA4OjI4ICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgCisgICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9vaWRfc3Rhc2guYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2RlYnVnLmMsIHNubXBsaWIvc25tcHVzbS5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQsIHNubXBuZXRzdGF0OiBBZGQgY29ycmVjdCBzaXplIHByZWZpeGVzCisgICB3aGVuIHByaW50aW5nIHZhcmlhYmxlcyBvZiB0eXBlIG9pZC4KKworMjAwOS0xMC0zMCAwODowNyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZSBvaWQgdG8gYmUgYSAzMi1iaXQgdHlwZSBvbiBJTFA2NCBhbmQKKyAgIExQNjQgcGxhdGZvcm1zLgorCisyMDA5LTEwLTMwIDA4OjA1ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmg6CisKKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZSB0aGUgb2lkIHR5cGVkZWYgZnJvbQorICAgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPi4gSXQgaXMgc3RpbGwgcHJlc2VudCBpbgorICAgPG5ldC1zbm1wL3R5cGVzLmg+LCB1c2UgdGhhdCBmaWxlLgorCisyMDA5LTEwLTI4IDE2OjQ4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L3NubXBfdmFycy5jOgorCisgICBkb24ndCByZXF1aXJlIHN1YmFnZW50X2luaXQoKSBpZiBub3Qgb25seSBidWlsZGluZyBtYXN0ZXIgYWdlbnQKKyAgIGNvZGUKKworMjAwOS0xMC0yNyAwNjo0NCAgbWFnZnIKKworICAgKiAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpLCAgIAorICAgICAgbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mLCBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnJvdy5jb25mLCBsb2NhbC9taWIyYy5zY2FsYXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgQ0hBTkdFUzogbWliMmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyB0byB1X2NoYXIqCisKKzIwMDktMTAtMTQgMjM6MTIgIG1hZ2ZyCisKKyAgICogYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIHNubXBsaWIvc2NhcGkuYzoKKworICAgQ0hBTkdFUzogYXBwcywgc25tcGxpYjogUEFUQ0g6IDI4MzU1Nzc6IGlkZW50aWZpZWQgYnkgIkJhcnQgVmFuCisgICBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTyBvZiBhcnJheXMgd2l0aCBhIG1lbXNldC4KKworMjAwOS0xMC0xMiAyMDoyOCAgbWFnZnIKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHJwIHZhcmlhYmxlIHRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBvbmUuCisKKzIwMDktMTAtMDkgMTI6MzggIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6Mjg3MTc0NzogcGx1ZyBtZW1vcnkgbGVhayBpbiBPSUQKKyAgIHByb2Nlc3NpbmcuCisgICBUaGUgbWVtb3J5IGxlYWtlZCB3aGVuIHNtYWxsIE9JRCwgd2hpY2ggY291bGQgZml0IHByZS1hbGxvY2F0ZWQKKyAgIHZwLT5uYW1lX2xvYywgd2FzIHBsYWNlZCBpbiBkaWZmZXJlbnQgKGFsbG9jYXRlZCkgb25lLgorCisyMDA5LTEwLTA5IDA1OjMxICBtYWdmcgorCisgICAqIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYzoKKworICAgQ0hBTkdFUzogQlVHOiAyODM4MjQzOiBDb3JyZWN0IHRoZSBvdXRwdXQgb2YgdW5zaWduZWQgdmFsdWVzLgorICAgVGhhbmtzIHRvIEphY2sgSHVhbmcgb2YgUXVhbGNvbW0gd2hvIHBvaW50ZWQgb3V0IHRoaXMgYnVnLgorCisyMDA5LTEwLTA5IDA1OjAwICBtYWdmcgorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIHRoZSBwYXJzaW5nIG9mIHJhbmdlcyB0byBhY2NlcHQgYWxsCisgICB2YWxpZCB2YWx1ZXMuCisKKzIwMDktMTAtMDcgMjI6MjQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBtaXNjOiBQQVRDSDogMjgzNjExMjogVXNlIHRoZSByaWdodCBtb2RpZmllciB3aGVuCisgICBwcmludGluZyBzaXplX3QgYW5kIHNzaXplX3QgdmFyaWFibGVzLgorCisyMDA5LTEwLTA3IDEyOjUwICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGNyZWF0aW9uIG9mIHZpZXdzIHVzaW5nIHNubXB1c20sIE9JRHMgd2l0aAorICAgaW5kZXhlcyA+IDI1NSBhcmUgYWxsb3dlZCBub3cuCisgICBUaGlzIHJldmVydHMgU1ZOIGNvbW1pdCAjNzQ5Mi4KKworMjAwOS0xMC0wNSAxOToxOSAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mIF9fY3BsdXNwbHVzIHdoZW4KKyAgIGNoZWNraW5nIGlmIHRoZSBmaWxlIHNob3VsZCBiZSB3cmFwcGVkIGluIGV4dGVybiAiQyIuCisKKzIwMDktMTAtMDUgMDY6MTMgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jOgorCisgICBDSEFOR0VTOiBzbm1wd2FsazogSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGVuZCBvaWQgaXMgbG9uZ2VyCisgICB0aGFuIHRoZSBjdXJyZW50IG9pZCBjb3JyZWN0bHkKKworMjAwOS0wOS0zMCAxMDoxMiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgorCisgICBDSEFOR0VTOiBTb2xhcmlzOiBQcm90ZWN0IGFnYWluc3QgbWlzc2luZyBwYWNrYWdlIHZlcnNpb24KKyAgIGluZm9ybWF0aW9uIGNyYXNoaW5nIHRoZSBhZ2VudC4KKyAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgSW55YXZlbiBTYWthcmFpLgorCisyMDA5LTA5LTI3IDE0OjU5ICBhbGV4X2IKKworICAgKiAgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCwgICAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbDoKKworICAgV2luMzI6IEJpbmFyeSBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIHNjcmlwdCB1cGRhdGVzLgorCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUucmMzIC0+IFY1LjUKKworMjAwOS0wOS0yMyAyMzo0MiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOS0yMyAyMzo0MCAgaGFyZGFrZXIKKworICAgKiBGQVE6CisKKyAgIHJlbW92ZSBTVk4gYnJhbmNoIHdvcmRpbmcKKworMjAwOS0wOS0yMyAyMzozNiAgaGFyZGFrZXIKKworICAgKiBGQVE6CisKKyAgIHByb3BlciBwcm9qZWN0IGNhcGl0YWxpemF0aW9uCisKKzIwMDktMDktMjMgMjM6MzUgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDktMjMgMjM6MzAgIGhhcmRha2VyCisKKyAgICogbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA5LTIyIDIxOjUxICB0YW5kZXJzCisKKyAgICogUkVBRE1FLnNvbGFyaXM6CisKKyAgIGZpeCB0eXBvcworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41LnJjMiAtPiBWNS41LnJjMworCQorMjAwOS0wOS0xNCAyMjozOSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjozNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgICAKKyAgICAgIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjoxOCAgaGFyZGFrZXIKKworICAgKiBSRUFETUUuYWl4LCBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oOgorCisgICBQYXRjaCBmcm9tIG1hZ2ZyIGZvciA1LjUgc3BlY2lmaWMgYWl4IGJ1aWxkIGZpeGVzCisKKzIwMDktMDktMDIgMDc6MTIgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHJlbmFtZSBNSUIgbWFjcm8gdG8gTkVUU05NUF9NSUIyX09JRCwgTUlCIGlzCisgICB0b28gZ2VuZXJpYyBhbmQgbWF5IGNvbmZsaWN0IHdpdGggYXBwbGljYXRpb25zLgorICAgCisgICBUaGUgb2xkIE1JQiBtYWNybyBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1bmxlc3MKKyAgIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIGlzIGRlZmluZWQuCisKKzIwMDktMDgtMzEgMTk6MzggIG5iYQorCisgICAqIG1pYnMvcmZjbGlzdDoKKworICAgQWRkaXRpb25hbCBSRkMgbWlicworCisyMDA5LTA4LTMxIDE5OjM3ICBuYmEKKworICAgKiBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgSUFOQSBmaXhlZCBhIGJ1ZworCisyMDA5LTA4LTI5IDA3OjI5ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLgorCisyMDA5LTA4LTI5IDA3OjI4ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogcmV0IGlzIG9ubHkgdXNlZCBpbiBzZXR0YWJsZSB0YWJsZXMgc28gb25seSBkZWNsYXJlIGl0CisgICB0aGVuLgorCisyMDA5LTA4LTI5IDA3OjI0ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVwbGFjZSB0aGUgX29pZF9sZW4gdmFyaWFibGUgd2l0aCBhbiBleHBsaWNpdCBjYWxsIG9mCisgICBPSURfTEVOR1RILgorCisyMDA5LTA4LTI5IDA3OjIxICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogTWFrZSBldmVyeSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBzdGF0aWMgc3RhdGljLiBSZW1vdmUgdGhlCisgICBkZWNsYXJhdGlvbnMgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoZSBwcml2YXRlIGRlZmluZXMgZnJvbQorICAgdGhlIGhlYWRlci4KKworMjAwOS0wOC0yOSAwNzoxOSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlb3JkZXIgdGhlIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IKKyAgIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisyMDA5LTA4LTI5IDA3OjE2ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogbmV0c25tcF90YWJsZV9yZWdpc3RlciBzaG91bGQgYmUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZQorICAgYW5kIHRha2Ugb25seSB0d28gYXJnbWVudHMuCisKKzIwMDktMDgtMjkgMDc6MTQgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBidWlsZF9vaWQgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG9pZC4gQ2hhbmdlIHRvCisgICB1c2UgYnVpbGRfb2lkX25vYWxsb2MgYW5kIHJlbW92ZSBvbmUgY29weSBvZiB0aGUgaW5kaWNlcy4KKworMjAwOS0wOC0yOSAwNzoxMCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFRoZXJlIGlzIG5vIGluZGV4X29pZF9sZW4gbWVtYmVyIGluIHN0cnVjdCBlbnRyeS4gVXNlIHRoZQorICAgaW50ZW5kZWQgbG9jYWwgdmFyaWFibGUgaW5kZXhfb2lkX2xlbi4KKworMjAwOS0wOC0yOSAwNzowNiAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IENvcnJlY3QgdGhlIHJldHVybiB0eXBlIG9mICR7aX1fZ2V0KmVudHJ5IHRvIG1hdGNoIHRoZQorICAgcmV0dXJuZWQgdHlwZS4KKworMjAwOS0wOC0yNiAyMjozNyAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHdod29vcHM7IGJsZXcgdGhlIGNoYW5nZWxvZyBmb3IgcmMyCisKKzIwMDktMDgtMjYgMTc6MzggIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDgtMjYgMTc6MjkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNS5yYzEgLT4gVjUuNS5yYzIKKwkKKzIwMDktMDgtMjYgMTc6MzggIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDgtMjYgMTc6MjkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDgtMjYgMTc6MjggIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHVwZGF0ZWQgYmFzZWQgb24gbmV3IFNGIHVwbG9hZCBtZXRob2RzOyBubyBsb25nZXIgYXMgYXV0b21hdGFibGUKKworMjAwOS0wOC0yNiAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggZnJvbSBKYW4gdG8gZW5kbGVzcyBsb29wIGluIGRlZmF1bHQgcm91dGVzCisgICBvbiBsaW51eAorCisyMDA5LTA4LTI2IDE3OjI1ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBhcHBseSBwYXRjaCBmcm9tIEphbiB0byBmaXggQysrIHdyYXBwZXIKKworMjAwOS0wOC0yNiAxNDo1MyAgZHRzMTIKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIEluaXRpYWwgc3RhYiBhdCBhIG1pbmltYWwtaGVscGVyIChyYXcpIHRhYmxlIHRlbXBsYXRlLAorICAgbGVhdmluZyBtb3N0IG9mIHRoZSB3b3JrIHRvIHRoZSB1c2VyLXByb3ZpZGVkIE1JQiBoYW5kbGVyLgorCisyMDA5LTA4LTI2IDE0OjUwICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUHJvdGVjdCBhZ2FpbnN0IGJvZ3VzIGZhaWx1cmVzIChyZXR1cm5pbmcgMCkgYW5kIHN1YnNlcXVlbnQKKyAgIGRvdWJsZS1mcmVlcywKKyAgIGR1ZSB0byAxNS0vMzEtYml0IG1hc2tpbmcgd2hlbiBzZWxlY3RpbmcgcmVxdWVzdCBJRHMuIElkZW50aWZpZWQKKyAgIGJ5IGtyb21lc2t5LgorCisyMDA5LTA4LTIwIDEzOjMwICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBsdWcgbGVha3MgaW4gaXBJZlN0YXRzVGFibGUsCisgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSwgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZAorICAgaXBEZWZhdWx0Um91dGVyVGFibGUuCisgICAKKyAgIEl0IHNlZW1zIHRvIG1lIHRoZSB0YWJsZXMgd2VyZSB3cm9uZ2x5IGdlbmVyYXRlZCB3aXRoCisgICBtMmNfZGF0YV9hbGxvY2F0ZSBvcgorICAgc29tZW9uZSBmb3Jnb3QgdG8gcmVsZWFzZSB0aGUgdXNlciBwcm92aWRlZCBkYXRhLgorCisyMDA5LTA4LTEyIDE1OjAwICB0YW5kZXJzCisKKyAgICogTkVXUzoKKworICAgZml4IGxpYnRvb2wgdmVyc2lvbiBpbiBORVdTCisKKzIwMDktMDgtMTEgMDA6NDIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgQ2hhbmdlTG9nOgorCisgICB3aG9vcHM7IGFkZCByZWFsIGNoYW5nZWxvZyBlbnRlcmllcyBmb3IgLnJjMQorCisyMDA5LTA4LTEwIDIzOjEwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBmaXggdHlwbyBpbiBzdm4yY2wgbGluZQorCisyMDA5LTA4LTEwIDIzOjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA4LTEwIDIxOjMyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUucHJlMyAtPiBWNS41LnJjMQorCisyMDA5LTA4LTEwIDIzOjEwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBmaXggdHlwbyBpbiBzdm4yY2wgbGluZQorCisyMDA5LTA4LTEwIDIzOjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA4LTEwIDIxOjMyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA4LTEwIDIxOjIxICBoYXJkYWtlcgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbCwgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsICAgCisgICAgICBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDgtMDcgMTA6MzIgIGR0czEyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgQ29ycmVjdCwgY29uc29saWRhdGUsIGNsYXJpZnkgYW5kIGNsZWFudXAgdGhlIGNhdGFsb2cgb2YgY3VycmVudAorICAgY2hhbmdlcy4KKworMjAwOS0wOC0wNiAwNzo1NyAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIEV4cGFuZCBvbiBleGVjIHZzIGV4dGVuZC4KKworMjAwOS0wOC0wNSAyMDowNyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIHNubXBsaWIvZmlsZV91dGlscy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyODIyMzU1OiBGaXggbWVtb3J5IGxlYWtzIG9uCisgICB1ZHBFbmRwb2ludFRhYmxlIChsaW51eCkKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEZyYW5rIExpY2h0ZW5oZWxkCisKKzIwMDktMDgtMDUgMTk6MDUgIGR0czEyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI4MjIzMzc6IEZpeCBtZW1vcnkgbGVhayBpbgorICAgaXBBZGRyZXNzUHJlZml4VGFibGUKKworMjAwOS0wOC0wNSAxNToxNiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jOgorCisgICBGaXggbWVtb3J5IGxlYWsgaW4gTmV0VG9NZWRpYVRhYmxlLgorICAgV2hlbiBkZWxldGluZyByb3cgY29udGV4dCwgZGVsZXRlIGFsc28gYXNzb2NpYXRlZCBkYXRhLgorCisyMDA5LTA4LTA1IDE1OjE1ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgRml4IG1lbW9yeSBsZWFrIGluIE5ldFRvTWVkaWFUYWJsZS4KKyAgIFRoZSBjb250YWluZXIgdXNlZCB0byB0cmFjayBlbnRyaWVzIHRvIGRlbGV0ZSBmcm9tIGNhY2hlIHNob3VsZAorICAgYmUgcmVsZWFzZWQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisKKzIwMDktMDgtMDUgMTU6MTIgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBGaXggbWVtb3J5IGxlYWsgaW4gVURQLSBhbmQgVENQLU1JQi4KKyAgIFRoZSBkYXRhIGZyb20gcmF3X2RhdGEgYXJlIGNvcGllZCB0byBjYWNoZSwgc28gaXQgc2hvdWxkIGJlCisgICBmcmVlZC4KKworMjAwOS0wOC0wNSAxMDoxNiAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBDSEFOR0VTOiBhcHBzOiBCVUc6IDI4MTE1Nzc6IEZpeCBidWcgaW4gR2V0QnVsayBoYW5kbGluZy4KKyAgIERvbid0IGdldCBjb25mdXNlZCBieSBpbmRleCB2YWx1ZXMgdGhhdCBjb250YWluIGEgJzonIGNoYXJhY3Rlci4KKworMjAwOS0wOC0wNCAyMTo1OSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWFjY2Vzcy11bnNvcnRlZC1leHRlcm5hbC1kZWZpbmVzLm0yaToKKworICAgQ0hBTkdFUzogbWliMmM6IEJVRzogMjgyNzI2OTogU3VwcHJlc3Mgbm9uLW9yZGVyZWQgVE9ETyBjb21tZW50cy4KKworMjAwOS0wOC0wNCAyMTozNSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5vbGQtYXBpLmNvbmY6CisKKyAgIEhhbmRsZSBnZW5lcmF0aW5nIGNvZGUgZm9yIGEgc2luZ2xlIHRhYmxlLAorICAgYXMgd2VsbCBhcyBhIGxhcmdlciBncm91cC4KKyAgIEFsc28gYWRkcmVzc2VzIGJ1ZyAyMTUwMjg1CisKKzIwMDktMDgtMDQgMjE6MTYgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBzbm1wbGliOiBmcm9tICJCYXJ0IHZhbiBBc3NjaGUgJiBNYWdudXMgRnJvbXJlaWRlIjogTW9yZSB1cGRhdGVzCisgICB0byBzdHJ0b3VsbC5jCisKKzIwMDktMDgtMDQgMTA6NTcgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZyb20gIk1hcmN1cyBS54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOaei2tlcnQiOiBmaXggcG9zc2libGUgY3Jhc2ggd2hlbgorICAgNjQtYml0IGNvdW50ZXJzIGluIGlwU3lzdGVtU3RhdHNUYWJsZSBnZXQgYmlnZ2VyIHRoYW4gMl4zMgorCisyMDA5LTA4LTAzIDE5OjI3ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjgyNzcyMjogZnJvbSAiQmFydCBWYW4gQXNzY2hlIjogSW1wcm92ZQorICAgc3RydG91bGwgdG8gYmUgbGVzcyBNU1ZDLXNwZWNpZmljCisKKzIwMDktMDgtMDMgMTg6MzggIG1hZ2ZyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICByZW1vdmUgYW4gb2Jzb2xldGUgbWFudWFsIHBhZ2UgZnJvbSB0aGUgc2V0IG9mIGZpbGVzIHRoYXQgc2hvdWxkCisgICBiZSBpbnN0YWxsZWQKKworMjAwOS0wNy0yNyAxMjo0MSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDctMjcgMTI6MTEgIGhhcmRha2VyCisKKyAgICogbWFuL25ldHNubXBfQ29udGFpbmVyX2l0ZXJhdG9yLjM6CisKKyAgIHJlbW92ZSBhbiBvYnNvbGV0ZSBtYW51YWwgcGFnZQorCisyMDA5LTA3LTI3IDEyOjAzICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC90L2J1bGt3YWxrLnQ6CisKKyAgIENIQU5HRVM6IGZyZWVic2Q6IHBhdGNoIGZyb20gQ2V6YXJ5IE1vcmdhIHRvIGZpeCBhIG1ha2UgdGVzdCBvbgorICAgZnJlZWJzZAorCisyMDA5LTA3LTI3IDEyOjAyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA3LTI3IDExOjUyICBoYXJkYWtlcgorCisgICAqICBGQVEsIE5FV1MsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA3LTI3IDA4OjM5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIHJldmVydCBhY2NpZGVudGlhbGx5IGFwcGxpZWQgcGF0Y2gKKworMjAwOS0wNy0yNyAwODozNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgdGVzdGluZy90ZXN0cy9UMzYwZHRsc3VkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIuY2VydCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLnByaXY6CisKKyAgIGFkZGVkIGEgdGVzdCBjYXNlIGZvciB1ZHAvZHRscworCisyMDA5LTA3LTI3IDA4OjM2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgZG9uJ3QgcmVxdWlyZSBhIHNlc3Npb24gdG8gY2FycnkgYSBzZWNOYW1lCisKKzIwMDktMDctMjYgMjE6MzQgIGFsZXhfYgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBXaW4zMjogTVNWQyA2IGNvbXBpbGUgZml4ZXMgZm9yIFdvcmtzcGFjZSBidWlsZC4KKworMjAwOS0wNy0yNiAxODoyMCAgYWxleF9iCisKKyAgICogIFJFQURNRS53aW4zMiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zdHJ0b3VsbC5jLCAgIAorICAgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0LCB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaSwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICAtQWRkZWQgc3RydG91bGwgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyZSBjaGVjayBmb3Igc3lzdGVtcyB3aXRob3V0CisgICBpdCBzdWNoIGFzIFdpbjMyIE1TVkMgNgorICAgLVdpbjMyOiBNU1ZDIDYgY29tcGlsZSBmaXhlcyAtIHJlcXVpcmVzIG5ldyBzdHJ0b3VsbC5jIGZpbGUKKyAgIC1XaW4zMjogTmV3IGJ1aWxkLWJpbmFyeSBzY3JpcHQgdG8gc2ltcGxpZnkgYnVpbGRpbmcgdGhlIFdpbmRvd3MKKyAgIGJpbmFyeSBwYWNrYWdlLgorCisyMDA5LTA3LTI1IDA1OjMxICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0OgorCisgICBNYWtlIHN1cmUgYSBtZXNzYWdlIGlzIHdyaXR0ZW4gaWYgdGhlIHJlbGV2YW50IHRhYmxlIGlzIG1pc3NpbmcuCisKKzIwMDktMDctMjMgMjE6MjkgIGFsZXhfYgorCisgICAqIFJFQURNRToKKworICAgVXBkYXRlIGVtYWlsIGFkZHJlc3MgaW4gUkVBRE1FLgorCisyMDA5LTA3LTIzIDAxOjA3ICBhbGV4X2IKKworICAgKiAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICBXaW4zMiBNU1ZDIDIwMDgrIGZpeGVzLgorCisyMDA5LTA3LTIzIDAwOjU1ICBhbGV4X2IKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIFdpbjMyIE1TVkMgMjAwNSsgYnVpbGQgZml4ZXMuIFRoYW5rcyB0byBCYXJ0IFZhbiBBc3NjaGUuCisKKzIwMDktMDctMjEgMTI6MjIgIGR0czEyCisKKyAgICogIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBsb2NhbC9taWIyYy5yb3cuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgQWRkIHNpbXBsZSBkZWJ1ZyBvdXRwdXQgdG8gbWliMmMgdGVtcGxhdGVzLgorCisyMDA5LTA3LTIxIDEyOjEzICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgRml4IG1pc3Npbmcgc2VtaWNvbG9uIHR5cG9zLgorCisyMDA5LTA3LTIxIDA5OjE1ICBkdHMxMgorCisgICAqIEZBUToKKworICAgTmV3IHN1Z2dlc3RlZCBlbnRyaWVzLgorCisyMDA5LTA3LTIwIDE5OjI0ICBkdHMxMgorCisgICAqIEZBUToKKworICAgVXBkYXRlcyB0byBDT0RJTkcgc2VjdGlvbi4KKworMjAwOS0wNy0yMCAxMTowOSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi5oOgorCisgICBBZGQgbWlzc2luZyBoZWFkZXIgZmlsZSBmcm9tIHBhdGNoICMyMDUzMjczLgorCisyMDA5LTA3LTE5IDE1OjA5ICBkdHMxMgorCisgICAqIEZBUToKKworICAgVXBkYXRlcyB0byBDT01QSUxJTkcgc2VjdGlvbi4KKworMjAwOS0wNy0xNiAxMjozOCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmM6CisKKyAgIEFkZCBJUHY2IG9jdGV0IGNvdW50ZXJzLgorICAgTmV3IExpbnV4IGtlcm5lbHMgKGUuZy4gMi42LjMxLXJjMiwgbWF5YmUgc29tZSBlYXJsaWVyKSBwcm92aWRlCisgICBjb3VudGVycyBmb3IKKyAgIGluY29taW5nL291dGdvaW5nIElQdjYgdHJhZmZpYyBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZAorICAgaXBJZlN0YXRzVGFibGUuCisKKzIwMDktMDctMTUgMjI6NDYgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICBwdXQgdGVtcG9yYXJ5IGRhdGEgdG8gd2hlcmUgdGhleSBiZWxvbmcKKworMjAwOS0wNy0xMSAyMTo1MCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZToKKworICAgcmVnZW5lcmF0ZSBjb25maWd1cmUKKworMjAwOS0wNy0xMSAyMTowNCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBidWlsZCBmaXggKGUuZy4gZm9yIEZyZWVCU0QpOiBhZGp1c3Qga3ZtIGNvbmZpZ3VyZSB0ZXN0cworCisyMDA5LTA3LTEwIDEyOjM1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENoZWNrIElQdjYgcG9ydCByYW5nZXMgaW4gdGhlIHNhbWUgd2F5IGFzIElQdjQgcG9ydHMgYXJlIGNoZWNrZWQuCisKKzIwMDktMDctMTAgMDc6NDYgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmM6CisKKyAgIEZpeCBhbm90aGVyIElQdjQgYWRkcmVzcyBzaXplIC0gbG9uZyBoYXMgOCBieXRlcyBvbiA2NGJpdCBMaW51eC4KKyAgIEFsc28gZml4IHRoZSBkZWZhdWx0IHR5cGUgZm9eQ0FTTl9JUEFERFJFU1MgaW4gbWliMmMsIHNvIHRoZQorICAgaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYyBjYW4gYmUgc2FmZWx5IHJlZ2VuZXJhdGVkLgorCisyMDA5LTA3LTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIGNsZWFudXAgb2YgdGVzdGluZyBjYXNlcyB0byByZW1vdmUgZG91YmxlIGluY2x1ZGUgYW5kIGRvdWJsZQorICAgZXhwb3J0cworCisyMDA5LTA3LTA5IDIzOjA3ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzAwdWRwOgorCisgICBiZSBjb25zaXN0ZW50IHdpdGggdGhlIFRDUC9JUHY0IHRlc3QKKworMjAwOS0wNy0wOSAyMjoxOCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9TdHJhbnNwb3J0LCB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzOTlhbGlhczoKKworICAgbmV3IHRlc3RzIGZvciB0ZXN0aW5nIGRlZmluZWQgdHJhbnNwb3J0cworCisyMDA5LTA3LTA5IDIyOjE3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvVEVTVENPTkYuc2gsIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKworICAgYSBDT05GSUdBUFAgbWFjcm8gZm9yIGFkZGluZyBzdHVmZiB0byBzbm1wLmNvbmYKKworMjAwOS0wNy0wOCAxNToxMiAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIEZpeCBnZXRob3N0YnlhZGRyIHBhcmFtZXRlciwgbmV0c25tcF91ZHBfZm10YWRkciBuZXZlciByZXR1cm5lZCBhCisgICBob3N0bmFtZS4KKworMjAwOS0wNy0wNyAxNTo0NiAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgRml4IElQIGFkZHJlc3MgbGVuZ3RoIG9uIDY0IGJpdCBzeXN0ZW1zIGluIG1pYklJLCBwYXNzIGFuZAorICAgcGFzc19wZXJzaXN0IG1vZHVsZXMuCisKKzIwMDktMDctMDcgMTU6MjQgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6CisKKyAgIFVzZSBjb3JyZWN0bHkgc2l6ZWQgSVAgYWRkcmVzc2VzIGluIGFkZHJlc3MgdHJhbnNsYXRpb24gdGFibGUKKyAgIHByb2Nlc3NpbmcgLSB1X2xvbmcgY2FuIG1ha2UgcHJvYmxlbXMgb24gYmluIGVuZGlhbiA2NCBiaXQKKyAgIHN5c3RlbXMKKworMjAwOS0wNi0yOSAxMzo1MiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTOgorCisgICByZW1vdmUgZW50cnkgZm9yIGEgcGF0Y2ggdGhhdCBnb3QgcmV2ZXJ0ZWQKKworMjAwOS0wNi0yNSAxNToyNCAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIE1vdmUgbm9uLWNvcmUgZGF0YSB0eXBlcyBpbnRvIGEgc2VwYXJhdGUgKGxpYnJhcnkgaW50ZXJuYWxzKQorICAgaGVhZGVyIGZpbGUuCisgICBNb3ZlIHRoZSBsYXJnZV9mZF9zZXQgZGF0YSBzdHJ1Y3R1cmUgaW50byB0aGlzIGhlYWRlciBmaWxlLgorCisyMDA5LTA2LTE4IDIyOjI5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBhbGxvdyBidWlsZGluZyB3aXRoIFBlcmwgdmVyc2lvbnMgdGhhdCBsYWNrCisgICBQRVJMX0VYSVRfREVTVFJVQ1RfRU5ECisKKzIwMDktMDYtMTggMjI6MTMgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2lmLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBidWlsZCBmaXggZm9yIFRydTY0IFVuaXggYW5kIElSSVg6IG1vdmUgX1hPUEVOKgorICAgZGVmaW5pdGlvbnMgdG8gd2hlcmUgdGhleSBhcmUgaW4gNS40LnggYW5kIGVhcmxpZXIKKworMjAwOS0wNi0xOCAwNjowMiAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ2xlYW4gdXAgLS13aXRoLW5sIGNvbmZpZ3VyYXRpb24KKyAgICogIE1vdmUgdGhlIF9BUkdfV0lUSCB0byBjb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSAgMjAwOS0wNi0xNiAxNToxNworICAgICAgIHJzdG9yeQorCisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzoKKworICAgY2hlY2sgZm9yIG51bGwgcG9pbnRlciBiZWZvcmUgZGVyZWYKKworMjAwOS0wNi0xNSAyMzo1MiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBhZGQgY29tbWVudCBleHBsYWluaW5nIG5vdCBxdWl0ZSBvYnZpb3VzIGxhY2sgb2YgbWVtbW92ZQorCisyMDA5LTA2LTE1IDE5OjMyICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgUmVtb3ZlICNpZiAwIGNvbW1lbnRlZCBjb2RlCisKKzIwMDktMDYtMTUgMTU6MjUgIGR0czEyCisKKyAgICogRkFROgorCisgICBVcGRhdGVzIHRvIEFHRU5UIHNlY3Rpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNS5wcmUyIC0+IFY1LjUucHJlMworCisyMDA5LTA2LTEzIDAxOjEyICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjU2NDU1MjogZnJvbSBhaG1ha2U6IHByb3ZpZGUgbGlibmV0bGluaworICAgc3VwcG9ydCBmb3IgbG9hZGluZyB0aGUgdGNwIHRhYmxlCisKKzIwMDktMDYtMTIgMTk6MDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE0MDAxMDE6IHJlbW92ZSBkZWxldGVkIGludGVyZmFjZXMgZnJvbQorICAgaWZUYWJsZQogCiAyMDA5LTA2LTExIDIzOjA5ICBoYXJkYWtlcgogCkBAIC0zNzQ0LDE5ICs2Mzk5NywzNiBAQAogICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgICAKICAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKIAotICAgQ0hBTkdFUzogd2luMzI6IFBBVENIOiAyNjkzNzQ2OiBmcm9tIGJ2YXNzY2hlOiBpbXByb3ZlZCBzb2NrZXQgc3RhcnR1cCBzdXBwb3J0CisgICBDSEFOR0VTOiB3aW4zMjogUEFUQ0g6IDI2OTM3NDY6IGZyb20gYnZhc3NjaGU6IGltcHJvdmVkIHNvY2tldAorICAgc3RhcnR1cCBzdXBwb3J0CiAKIDIwMDktMDYtMTEgMjI6NTcgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMTI0MDI6IGRvbid0IGZhaWwgb24gZmFpbHVyZSB0byBsb29rIHVwIGludGVyZmFjZSBlcnJvciBjb3VudGVycy4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAxMjQwMjogZG9uJ3QgZmFpbCBvbiBmYWlsdXJlIHRvIGxvb2sgdXAKKyAgIGludGVyZmFjZSBlcnJvciBjb3VudGVycy4KKworMjAwOS0wNi0xMSAyMjowMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIHJldmVydCBwcmV2aW91cyBjb21taXQgdG8gbWFrZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmFjayB0bworICAgdGhlaXIgcmVndWxhciBpbnNhbmUgb3JkZXJpbmc7IEkgZG9uJ3QgbGlrZSB0aGlzIHNpdHVhdGlvbiBhdCBhbGwKKworMjAwOS0wNi0xMSAyMTo0MiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIGluY2x1ZGUgbGFyZ2VfZmRfc2V0LmggYmVmb3JlIHR5cGVkZWZpbmcgc29tZXRoaW5nIGJhc2VkIG9uIHRoZQorICAgc3RydWN0dXJlCiAKIDIwMDktMDYtMDMgMTI6MzUgIGR0czEyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6CiAKLSAgIENIQU5HRVM6IHBlcmw6IFBBVENIRVM6IDI3OTM4NTc6IFJlcG9ydCBmYWlsZWQgYXN5bmNocm9ub3VzIHJlcXVlc3RzLgorICAgQ0hBTkdFUzogcGVybDogUEFUQ0hFUzogMjc5Mzg1NzogUmVwb3J0IGZhaWxlZCBhc3luY2hyb25vdXMKKyAgIHJlcXVlc3RzLgogCiAyMDA5LTA2LTAzIDExOjQ2ICBkdHMxMgogCkBAIC0zNzY5LDcgKzY0MDM5LDggQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmM6CiAKLSAgIFBBVENIOiAyMTgyNTkyOiBDbGVhbiB1cCB2YWNtQ29udGV4dFRhYmxlIGFmdGVyIHVucmVnaXN0cmF0aW9ucworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMTgyNTkyOiBDbGVhbiB1cCB2YWNtQ29udGV4dFRhYmxlIGFmdGVyCisgICB1bnJlZ2lzdHJhdGlvbnMKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IEpvaG4gRm9yc3l0aAogCiAyMDA5LTA2LTAzIDEwOjEyICBkdHMxMgpAQCAtMzc4MCwxOCArNjQwNTEsMjEgQEAKICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKICAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wdjMuYzoKIAotICAgQ0hBTkdFUzogUEFUQ0g6IDI3OTcyNTE6IFN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGlzYXRpb24gYW5kIHNodXRkb3duLCBmaXggbWVtb3J5IGxlYWtzCisgICBDSEFOR0VTOiBQQVRDSDogMjc5NzI1MTogU3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXNhdGlvbiBhbmQKKyAgIHNodXRkb3duLCBmaXggbWVtb3J5IGxlYWtzCiAgICBQYXRjaCBzdXBwbGllZCBieSBJdm9zaAogCiAyMDA5LTA2LTAxIDE1OjUzICBkdHMxMgogCiAgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgogCi0gICBDSEFOR0VTOiBkb2NzOiBQQVRDSEVTOiAyNzg4MDcyOiBEb2N1bWVudCAnbG9nbWF0Y2gnIGZ1bmN0aW9uYWxpdHkuCisgICBDSEFORUdTOiBkb2NzOiBQQVRDSEVTOiAyNzg4MDcyOiBEb2N1bWVudCAnbG9nbWF0Y2gnCisgICBmdW5jdGlvbmFsaXR5LgogCiAyMDA5LTA2LTAxIDE1OjUwICBkdHMxMgogCiAgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKICAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAogICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKQEAgLTM3OTksMTcgKzY0MDczLDMyIEBACiAKIDIwMDktMDYtMDEgMTU6MzcgIGR0czEyCiAKLSAgICogIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvbW9uaXRvciwgICAKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL21vbml0b3IsIG00L2xpYnRvb2wubTQsICAgCiAgICAgICBtYW4vc25tcGQuY29uZi41LmRlZiwgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmOgogCi0gICBDSEFOR0VTOiBkb2NzOiBQQVRDSDogMjc5NTczOTogRml4IGluY29ycmVjdCBkaXNrL2ZpbGUgc2l6ZSBkZXNjcmlwdGlvbnMgJiB1bml0IHNwZWNpZmllcnMKKyAgIENIQU5HRVM6IGRvY3M6IFBBVENIOiAyNzk1NzM5OiBGaXggaW5jb3JyZWN0IGRpc2svZmlsZSBzaXplCisgICBkZXNjcmlwdGlvbnMgJiB1bml0IHNwZWNpZmllcnMKIAogMjAwOS0wNi0wMSAxMzoxMSAgZHRzMTIKIAogICAgKiBFWEFNUExFLmNvbmYuZGVmOgogCiAgICBSZXdvcmsgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gbWF0Y2ggY3VycmVudCBzbm1wZC5jb25mKDUpCi0gICBzdHJ1Y3R1cmUsIGFuZCBtb3JlIGNsZWFybHkgaWxsdXN0cmF0ZSBjdXJyZW50IGJlc3QgcHJhY3Rpc2UuCisgICBzdHJ1Y3R1cmUsCisgICBhbmQgbW9yZSBjbGVhcmx5IGlsbHVzdHJhdGUgY3VycmVudCBiZXN0IHByYWN0aXNlLgorCisyMDA5LTA1LTMwIDA2OjU4ICBtYWdmcgorCisgICAqIGFnZW50L21pYl9tb2R1bGVzLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgaW5jbHVkZS4KIAogMjAwOS0wNS0yOSAwOToxNCAgZHRzMTIKIApAQCAtMzgxOSwxOCArNjQxMDgsNDIgQEAKIAogMjAwOS0wNS0yOSAwOTowOCAgZHRzMTIKIAotICAgKiBsb2NhbC9wYXNzdGVzdC5wbCwgbWlicy9NYWtlZmlsZS5pbiwgbWlicy9ORVQtU05NUC1QQVNTLU1JQi50eHQ6CisgICAqICBsb2NhbC9wYXNzdGVzdCwgbG9jYWwvcGFzc3Rlc3QucGwsIG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBtaWJzL05FVC1TTk1QLVBBU1MtTUlCLnR4dDoKIAogICAgUmV3b3JrICJwYXNzdGVzdCIgZXhhbXBsZXMgdG8gZnVsbHkgdmFsaWRhdGUgR0VUTkVYVCByZXF1ZXN0cywKICAgIGFuZCB1c2UgYSBsZWdpdGltYXRlIE1JQiBzdHJ1Y3R1cmUgZm9yIG91dHB1dC4KICAgIEFkZCBhbiBleGFtcGxlIE1JQiB0byBkZWZpbmUgdGhhdCBzdHJ1Y3R1cmUuCiAKLTIwMDktMDUtMjggMTI6NTUgIGR0czEyCisyMDA5LTA1LTI4IDEyOjQxICBkdHMxMgogCiAgICAqIEZBUToKIAotICAgU3luY2hyb25pc2Ugd2l0aCBsYXRlc3QgRkFRCi0gICAoaW5jbHVkaW5nIDUuNSByZXZpc2lvbnMgdXAgdG8gTUlCcyBzZWN0aW9uKQorICAgVXBkYXRlcyB0byBNSUJzIHNlY3Rpb24KKworMjAwOS0wNS0yOCAxMTo1NiAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFR3ZWFrIHBocmFzaW5nIG9mIGFuIChvdmVybG9uZykgcXVlc3Rpb24gaW4gdGhlIFBlcmwgc2VjdGlvbgorCisyMDA5LTA1LTI4IDExOjMxICBkdHMxMgorCisgICAqIEZBUToKKworICAgTmV3IGVudHJ5IGluIHRoZSBBcHBsaWNhdGlvbnMgc2VjdGlvbgorCisyMDA5LTA1LTI4IDEwOjQxICBkdHMxMgorCisgICAqIEZBUToKKworICAgVXBkYXRlcyB0byBBcHBsaWNhdGlvbnMgc2VjdGlvbgorCisyMDA5LTA1LTI3IDE1OjI2ICBkdHMxMgorCisgICAqIEZBUToKKworICAgVXBkYXRlcyB0byBHRU5FUkFMIHNlY3Rpb24uCiAKIDIwMDktMDUtMTkgMTc6NTAgIGFsZXhfYgogCkBAIC0zODQ5LDcgKzY0MTYyLDkgQEAKIAogICAgKiBzbm1wbGliL3NjYXBpLmM6CiAKLSAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDI3ODI3MDA6IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyAtLXdpdGgtcGtjcyBvbiBTb2xhcmlzCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAyNzgyNzAwOiBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcKKyAgIC0td2l0aC1wa2NzIG9uCisgICBTb2xhcmlzCiAKIDIwMDktMDUtMTUgMTQ6NTkgIGpzYWZyYW5lawogCkBAIC0zODcxLDI5ICs2NDE4Niw1MCBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogQWxsb3cgIm1vbml0b3IiIHRvIGhhbmRsZSBuZWdhdGl2ZSB0aHJlc2hvbGQgdmFsdWVzLgorICAgQ0hBTkdFUzogc25tcGQ6IEFsbG93ICJtb25pdG9yIiB0byBoYW5kbGUgbmVnYXRpdmUgdGhyZXNob2xkCisgICB2YWx1ZXMuCiAgICBSZXBvcnRlZCBieSBSaWNoYXJkIEdpcHBzLgogCiAyMDA5LTA1LTEzIDIyOjMyICB0YW5kZXJzCiAKICAgICogc25tcGxpYi92YWNtLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjc5MTQxNzogZml4IHNubXBkIHNlZ2ZhdWx0IHdoZW4gcnVuIHdpdGggLURBTEwKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjc5MTQxNzogZml4IHNubXBkIHNlZ2ZhdWx0IHdoZW4gcnVuIHdpdGgKKyAgIC1EQUxMCiAgICBQYXRjaCBzdXBwbGllZCBieSBSb24gUm9za2Vucy4KIAogMjAwOS0wNS0xMyAwODowMiAgZHRzMTIKIAogICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKIAotICAgQnJpbmcgZG9jdW1lbnRhdGlvbiBvZiBub3RpZmljYXRpb25FdmVudCBzeW50YXggaW50byBsaW5lIHdpdGggcmVhbGl0eS4KLSAgIChVc2VzICItbSIgcmF0aGVyIHRoYW4gIi1uIiB0byByZWdpc3RlciBzdGFuZGFyZCBNSUIgcGF5bG9hZCBvYmplY3RzKQorICAgQnJpbmcgZG9jdW1lbnRhdGlvbiBvZiBub3RpZmljYXRpb25FdmVudCBzeW50YXggaW50byBsaW5lIHdpdGgKKyAgIHJlYWxpdHkuCisgICAoVXNlcyAiLW0iIHJhdGhlciB0aGFuICItbiIgdG8gcmVnaXN0ZXIgc3RhbmRhcmQgTUlCIHBheWxvYWQKKyAgIG9iamVjdHMpCiAgICBJbmNvbnNpc3RlbmN5IHJlcG9ydGVkIGJ5IFJpY2hhcmQgR2lwcHMuCiAKLTIwMDktMDUtMTIgMjM6MjYgIGFsZXhfYgorMjAwOS0wNS0xMCAyMToxMiAgYWxleF9iCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgcGVybC9hZ2VudC9hZ2VudC54czoKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgogCi0gICBXaW4zMjogQnVpbGQgZml4ZXMgLSBjaGFuZ2UgdW5zaWduZWQgbG9uZyBsb25nIHRvIHVpbnQ2NF90LgorICAgV2luMzI6IEFkZGVkIGF1dG9tYXRpYyBtYW5pZmVzdCBtZXJnaW5nIHdpdGggbXQuZXhlIGZvciBNU1ZDIDIwMDgKKyAgIGV0Yy4KKworMjAwOS0wNS0wOCAxMzoxMiAgYWxleF9iCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENoYW5nZXM6IFdpbjMyOiBBZGQgc3VwcG9ydCBmb3IgV2luZG93cyA3LCBWaXN0YSBhbmQgMjAwOCBmb3IKKyAgIHdpbkV4dERMTC4KKworMjAwOS0wNS0wOCAwMjowNyAgYWxleF9iCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBXaW4zMjogQnVpbGQgZml4ZXMgZm9yIERMTC4KIAogMjAwOS0wNS0wNyAyMzowMCAgdGFuZGVycwogCkBAIC0zOTAxLDE3ICs2NDIzNywzMTUgQEAKIAogICAgYnVpbGQgZml4IGZvciBIUC1VWDogaW5jbHVkZSA8c3lzL3BhcmFtLmg+IGZvciBERVZfQlNJWkUKIAorMjAwOS0wNS0wNyAwNToxMSAgbmJhCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmg6CisKKyAgIFVwcywgbWlzc2VkIGEgbmV3IHByb3RvdHlwZSBoZWFkZXIKKworMjAwOS0wNS0wNiAyMjoyNiAgbmJhCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIEEgbWFuIGxpbmUgY2Fubm90IHN0YXJ0IHdpdGggYSAnCisKKzIwMDktMDUtMDYgMjI6MDcgIG5iYQorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgSVB2NiBhZHJlc3NlcyBhcmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGVuIDMyYml0cworCisyMDA5LTA1LTA2IDIyOjA2ICBuYmEKKworICAgKiAgYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jLCBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgsIHNubXBsaWIvb2lkX3N0YXNoLmM6CisKKyAgIFNwcmlua2xlIHNvbWUgY29uc3QtbmVzcyB3aGVyZSByZWxldmFudAorCisyMDA5LTA1LTA2IDIyOjAyICBuYmEKKworICAgKiBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBUcml2aWFsIHdhcm5pbmcgZml4ZXMKKworMjAwOS0wNS0wNiAyMjowMCAgbmJhCisKKyAgICogbWlicy9yZmNtaWJzLmRpZmY6CisKKyAgIEhtbW0sIElBTkEgZml4ZWQgdGhlaXIgYnVnIHRvbworCisyMDA5LTA1LTA2IDIxOjU5ICBuYmEKKworICAgKiBSRUFETUU6CisKKyAgIFVwZGF0ZSBlbWFpbCB0byBjdXJyZW50CisKKzIwMDktMDUtMDYgMjE6NTkgIG5iYQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsICAgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBfcGVybC5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L3NubXBkLmMsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgCisgICAgICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIFRyaXZpYWwgd2FybmluZyBmaXhlcworCisyMDA5LTA1LTA2IDIxOjQ5ICBuYmEKKworICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKKworICAgY29udGV4dEVuZ2luZUlEIGlzIGEgaGV4c3RyaW5nLCBub3QgYW4gb2JqZWN0IGlkZW50aWZpZXIKKworMjAwOS0wNS0wNiAyMTo0NSAgbmJhCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgICAKKyAgICAgIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL2ludDY0LmMsICAgCisgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB1c20uYywgICAKKyAgICAgIHNubXBsaWIvc25tcHYzLmM6CisKKyAgIEZpeCBmb3JtYXQgd2FybmluZ3MgZnJvbSBkZWJ1ZyBvdXRwdXQKKworMjAwOS0wNS0wNiAyMDo0NSAgbmJhCisKKyAgICogbWlicy9zbWlzdHJpcDoKKworICAgUHJvcGVybHkgcmVjb2duaXplIG1lc3NhZ2Ugc3ludGF4IG1vZHVsZXMgKHRvIGJlIGFibGUgdG8gaWdub3JlCisgICB0aGVtKQorCisyMDA5LTA1LTA2IDIwOjM2ICBuYmEKKworICAgKiBtaWJzL3JmY2xpc3Q6CisKKyAgIFJGQyB1cGRhdGVzCisKKzIwMDktMDUtMDYgMjA6MzUgIG5iYQorCisgICAqIG1pYnMvcmZjbWlicy5kaWZmOgorCisgICBTeW50YXggZml4IGZvciBjdXJyZW50IElBTkEtUFJJTlRFUi1NSUIKKworMjAwOS0wNS0wNiAyMDozNCAgbmJhCisKKyAgICogbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIFVwZGF0ZSB0byBjdXJyZW50IElBTkEgdmVyc2lvbgorCisyMDA5LTA1LTA0IDEzOjQ3ICBhbGV4X2IKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIFdpbjMyOiBCdWlsZCBmaXhlcyBmb3IgRExMLgorCisyMDA5LTA1LTAxIDE1OjQzICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBORVdTOiBzbm1wbGliOiBTdG9wIHVzaW5nIGEgZml4ZWQgc3RyaW5nIGZvciBpbmRlbnRhdGlvbi4gUmVtb3ZlCisgICB0aGUgREVCVUdJTkRFTlQoKSBtYWNybyAodGhhdCBkaWQgbm90aGluZykuIENoYW5nZSB0aGUgbWVhbmluZyBvZgorICAgdGhlIGludGVybmFsIF9fREJHSU5ERU5UKCkgbWFjcm8gdG8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3BhY2VzCisgICB0byBpbmRlbnQgaW5zdGVhZCBvZiBhIHN0cmluZyB0aGF0IHJlcHJlc2VudCB0aGUgaW5kZW50YXRpb24KKyAgIGxldmVsLiBEZXByZWNhdGUgdGhlIGRlYnVnX2luZGVudCBmdW5jdGlvbi4KKworMjAwOS0wNC0zMCAwNjo1NyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBsb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZjoKKworICAgQ0hBTkdFUzogc25tcGQ6IFVzZSBzdGF0aWMgd2F0Y2hlcl9pbmZvIGZvciBhbGwgd2F0Y2hlZCB2YXJpYWJsZXMKKyAgIGFuZCBpbiBpbnRfd2F0Y2guCisKKzIwMDktMDQtMzAgMDY6NDEgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBTZXBhcmF0ZSBpbml0aWFsaXphdGlvbiBmcm9tIGFsbG9jYXRpb24gZm9yCisgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzdHJ1Y3R1cmVzIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlCisgICBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkYXRhLgorCisyMDA5LTA0LTMwIDA2OjM0ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgQWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlLgorCisyMDA5LTA0LTMwIDAwOjE4ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCB0aGUgRFRMUyBzdXBwb3J0OyBzZW1pIGRvY3VtZW50IHRoZSBTU0ggc3VwcG9ydCBhbmQKKyAgIGRvY3VtZW50IHRoZSAtcyBzd2l0Y2ggdG8gbWFueSBWQUNNIHNldHRpbmdzCisKKzIwMDktMDQtMjkgMjM6NTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBwcm90ZWN0IGFnYWluc3QgY29ubmVjdGlvbiBvcGVuaW5nIGVycm9ycyBhbmQgZnJlZSBtZW1vcnkgb24KKyAgIGZhaWx1cmVzCisKKzIwMDktMDQtMjkgMTI6MTkgIGFsZXhfYgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMjogVXBkYXRlIGRlZmluZXMgZm9yIF9XSU4zMl9XSU5OVCBhbmQgTlRERElfVkVSU0lPTiB0bworICAgc3VwcG9ydCBXaW5kb3dzIDIwMDAgYW5kIGhpZ2hlciBhbmQgYWRkIElQVjYgZGVmaW5lIHRvIGFsbG93IElQVjYKKyAgIGNvZGUgdG8gY29tcGlsZS4KKworMjAwOS0wNC0yOCAwNjozNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYzoKKworICAgc25tcGQsIExpbnV4OiBSZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzLgorCisyMDA5LTA0LTI4IDA2OjA3ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmM6CisKKyAgIHNubXBkOiBBZGQgbWlzc2luZyBhcmd1bWVudCB0byBwcmludGYtbGlrZSBjYWxsLgorCisyMDA5LTA0LTI4IDA1OjUzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgc25tcGQ6IE1hcmsgbW9yZSBvaWRzIGFzIGNvbnN0LgorCisyMDA5LTA0LTI4IDA1OjUxICBtYWdmcgorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIFJldHVybiBhIHZhbHVlIGZyb20gc3ByaW50X3JlYWxsb2NfdmFsdWUgZXZlbiBpZiBubyBzdWJ0cmVlIGlzCisgICBsb2NhdGVkLgorCisyMDA5LTA0LTI4IDAxOjEyICBhbGV4X2IKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyOiBNU1ZDOiBPbmx5IHVzZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIFdpblhQIG9yCisgICBiZWZvcmUgKElQVjYpIG9yIDIwMDAgb3IgYmVmb3JlIChubyBJUFY2KS4KKworMjAwOS0wNC0yNiAyMzozMCAgYWxleF9iCisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgV2luMzI6IFJlbW92ZSBtYWNoaW5lIHR5cGUgb2YgSTM4NiBmcm9tIExJTkszMl9GTEFHUyB0byBhbGxvdworICAgY29tcGlsaW5nIHdpdGggTVNWQyAyMDA4IGFzIGVpdGhlciAzMiBvciA2NC1iaXQuCisKKzIwMDktMDQtMjYgMTc6MzggIGFsZXhfYgorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IEJ1aWxkIGZpeGVzIGZvciBNU1ZDIDIwMDguIENvcHkgYW5kIGNsZWFudXAKKyAgIG1hbmlmZXN0IGZpbGVzLgorCisyMDA5LTA0LTI2IDE1OjIxICBhbGV4X2IKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMjogUmUtZW5hYmxlIHBhc3MgYW5kIHBhc3NfcGVyc2lzdCBDb3VudGVyNjQgZm9yIE1TVkMuCisKKzIwMDktMDQtMjYgMTQ6MzQgIGFsZXhfYgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgd2luMzIvYnVpbGQucGwsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogQnVpbGQgZml4ZXMgZm9yIE1TVkMgMjAwOC4gSUZUWVBFIGlzIGRlZmluZWQgYnkKKyAgIE1TVkMgMjAwOCwgc28gaW50ZXJmYWNlcy5jIHZhcmlhYmxlcyB3ZXJlIGNoYW5nZWQgdG8gTkVUU05NUF8uCisKIDIwMDktMDQtMjYgMTM6MDYgIGFsZXhfYgogCiAgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCiAgICBXaW4zMjogVXBkYXRlIGJ1aWxkIGluc3RydWN0aW9ucyBpbiBjb21tZW50cy4KIAorMjAwOS0wNC0yNCAxMzoyOCAgaGFyZGFrZXIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBmaXggdGhlIEFTTl9PUEFRVUUgcGF0Y2ggdGhhdCB3YXMgY29tbWl0ZWQgd2l0aG91dCBwcm9wZXIgZGlmZgorICAgY29udGV4dAorCiAyMDA5LTA0LTI0IDA3OjMxICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0OgogCi0gICBDSEFOR0VTOiBIUC1VWDogQlVHOiAyNzc5NDcyOiBGaWxlc3lzdGVtcyBtaXNzaW5nIGluIGhyU3RvcmFnZSB0YWJsZSBvbiBIUC1VWCAxMS4zMQorICAgQ0hBTkdFUzogSFAtVVg6IEJVRzogMjc3OTQ3MjogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UKKyAgIHRhYmxlIG9uIEhQLVVYIDExLjMxCiAgICAoYWxsb3cgZm9yIG1udHRhYiB0aGF0IGlzIGEgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlKQogCiAyMDA5LTA0LTI0IDAxOjM2ICBhbGV4X2IKQEAgLTM5MjEsMTggKzY0NTU1LDc4IEBACiAKICAgIENIQU5HRVM6IFdpbjMyOiBCVUc6IDI3Nzk1NDEgRml4ZWQgaGFuZGxlIGxlYWsgaW4gcGFzc19wZXJzaXN0LgogCi0yMDA5LTA0LTIzIDIzOjE0ICB0YW5kZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6Ci0KLSAgIENIQU5HRVM6IEFJWDogQlVHOiAyNzEyNjcwOiBBZ2VudCBjcmFzaGVzIG9uIEFJWCB3aXRoIGhyU3RvcmFnZQorQ2hhbmdlczogVjUuNS5wcmUxIC0+IFY1LjUucHJlMgogCiAyMDA5LTA0LTIzIDIyOjUzICBoYXJkYWtlcgogCi0gICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsIHNubXBsaWIvc25tcF9hbGFybS5jOgogCiAgICBmaXggQysrIHN0eWxlIGNvbW1lbnRzCiAKKzIwMDktMDQtMjMgMjI6MjUgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDQtMjMgMjI6MjMgIGhhcmRha2VyCisKKyAgICogIG1hbi9jb25maWdfYXBpLjMsIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCAgIAorICAgICAgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIGluaXRpYWwgZG94eWdlbiBleHRyYWN0cyBmb3IgdGhlIG5ldyBoZWFkZXJzCisKKzIwMDktMDQtMjMgMjI6MTkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKIDIwMDktMDQtMjMgMjI6MTYgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKQEAgLTM5NDEsMjggKzY0NjM1LDkxIEBACiAKIDIwMDktMDQtMjMgMjI6MTAgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQ6CiAKLSAgIENIQU5HRVM6IEhQLVVYOiBCVUc6IDI3Nzk0NzI6IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlIHRhYmxlIG9uIEhQLVVYIDExLjMxCisgICBDSEFOR0VTOiBIUC1VWDogQlVHOiAyNzc5NDcyOiBGaWxlc3lzdGVtcyBtaXNzaW5nIGluIGhyU3RvcmFnZQorICAgdGFibGUgb24KKyAgIEhQLVVYIDExLjMxCiAKIDIwMDktMDQtMjMgMjE6NDggIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmM6CiAKLSAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAyNzUxNTg4OiBJbmNvbnNpc3RlbnQgZGF0YSAoZS5nLiBVRFAvVENQIE1JQiBzY2FsYXIgdmFsdWVzIG9mIHplcm8pIGNhbiBiZSByZXBvcnRlZCBvbiBTb2xhcmlzIDEwVTQrCisgICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMjc1MTU4ODogSW5jb25zaXN0ZW50IGRhdGEgKGUuZy4gVURQL1RDUAorICAgTUlCCisgICBzY2FsYXIgdmFsdWVzIG9mIHplcm8pIGNhbiBiZSByZXBvcnRlZCBvbiBTb2xhcmlzIDEwVTQrCiAgICBQYXRjaCBwcm92aWRlZCBieSBBbmRlcnMgUGVyc3NvbgogCisyMDA5LTA0LTIzIDE3OjMwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxOTAxNzY0OiBmcm9tIGtyaXN6dG9mb3JvIGZvciBzdXBwb3J0aW5nCisgICBsb2d3YXRjaCBmaWxlcyB0aGF0IGFyZSBkYXRlIGJhc2VkCisKKzIwMDktMDQtMjMgMTc6MjIgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBORVdTOiBwZXJsOiBQQVRDSCAxOTU2MTkzOiBmcm9tIGNhY295bGU6IGJldGEgdGhyZWFkYWJsZSBwZXJsCisgICBtb2R1bGUgY29kZSBmb3IgU05NUHYxL1NOTVB2MmMgdXNhZ2UuCisKIDIwMDktMDQtMjMgMTY6NTcgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jOgogCi0gICBDSEFOR0VTOiBzb2xhcmlzOiBQQVRDSDogMjAxMjQwNDogZGVhbCB3aXRoIG1vcmUgdGhhbiAxMCBpbnRlcmZhY2VzLiBOZXcgaGFyZGNvZGVkIGxpbWl0IGlzIDUwLiBBIGJldHRlciBzY2FsaW5nIHBhdGNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIDotKQorICAgQ0hBTkdFUzogc29sYXJpczogUEFUQ0g6IDIwMTI0MDQ6IGRlYWwgd2l0aCBtb3JlIHRoYW4gMTAKKyAgIGludGVyZmFjZXMuIE5ldyBoYXJkY29kZWQgbGltaXQgaXMgNTAuIEEgYmV0dGVyIHNjYWxpbmcgcGF0Y2gKKyAgIHdvdWxkIGJlIGFwcHJlY2lhdGVkIDotKQorCisyMDA5LTA0LTIzIDE2OjQ3ICBoYXJkYWtlcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIGRvY3VtZW50IHRoYXQgdGhlIGV0aGVybGlrZS1taWIgaGFzIGFuIGltcGxlbWVudGF0aW9uCisKKzIwMDktMDQtMjMgMTY6NDAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9lbnVtcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX29pZHMuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDIwNTMyNzM6IGZyb20gbmFyZW5kcmFfa19kZWxsIHRvIGltbHBlbWVudAorICAgdGhlIGV0aGVybGlrZSBtaWIgKGF0IGxlYXN0IG9uIGxpbnV4KQogCiAyMDA5LTA0LTIzIDE2OjM1ICBoYXJkYWtlcgogCiAgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLW9pZHMubTJjOgogCi0gICBDSEFOR0VTOiBtaWIyYzogUEFUQ0g6IDIxMzY0Mzc6IG1ha2UgRkxBRyBkZWZpbmVzIG1vcmUgNjRiaXQgZnJpZW5kbHkgd2hlbiBodWdlIHRhYmxlcyBhcmUgZW5jb3VudGVyZWQKKyAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSDogMjEzNjQzNzogbWFrZSBGTEFHIGRlZmluZXMgbW9yZSA2NGJpdAorICAgZnJpZW5kbHkgd2hlbiBodWdlIHRhYmxlcyBhcmUgZW5jb3VudGVyZWQKIAogMjAwOS0wNC0yMyAxNjoyNyAgaGFyZGFrZXIKIApAQCAtMzk3NSwxMyArNjQ3MzIsMTUgQEAKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnQucHk6CiAKLSAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDIwNzQ4MTc6IGZyb20gZmVubmVyIHRvIGZpeCByZWdleHAgZW5naW5lIENQVSBwZXJmb3JtYW5jZSBpc3N1ZXMKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDIwNzQ4MTc6IGZyb20gZmVubmVyIHRvIGZpeCByZWdleHAgZW5naW5lCisgICBDUFUgcGVyZm9ybWFuY2UgaXNzdWVzCiAKIDIwMDktMDQtMjMgMTY6MTQgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjE2MjY1MjogcGF0Y2ggdG8gZml4IHNpbXBsZSBocmZzIGNoZWNrcyB3aGVuIE5GUyBpcyBpbiB1c2UuCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIxNjI2NTI6IHBhdGNoIHRvIGZpeCBzaW1wbGUgaHJmcyBjaGVja3MKKyAgIHdoZW4gTkZTIGlzIGluIHVzZS4KIAogMjAwOS0wNC0yMyAxNjoxMSAgaGFyZGFrZXIKIApAQCAtNDAzMyw2ICs2NDc5Miw1OCBAQAogCiAgICBGaXggbWVtb3J5IGxlYWsgaW4gU0NUUCBjb250YWluZXJzLgogCisyMDA5LTA0LTIzIDA4OjI5ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGlzIHByb2JhYmx5IGJlc3QgcmVnYXJkZWQgYXMgYW4gIm9wYXF1ZSIKKyAgIGRhdGEKKyAgIHN0cnVjdHVyZSwgYW5kIGlzbid0IHJlYWxseSBpbnRlbmRlZCBmb3IgZGlyZWN0IG1hbmlwdWxhdGlvbi4KKyAgIE1vdmUgaXQgYmFjayBpbnRvIHRoZSA8bGlicmFyeS9sYXJnZV9mZF9zZXQuaD4gaGVhZGVyIGZpbGUuCisgICAoTGlrZSBpdCB3YXMgYmVmb3JlIERhdmUgc3R1Y2sgaGlzIG9hciBpbi4uLi4pCisKKzIwMDktMDQtMjMgMDg6MTkgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEZ1ZXJ0aGVyIGltcHJvdmVtZW50cyB0byB0aGUgbGFyZ2UgRkQgc2V0IHN1cHBvcnQKKyAgIChTZWUgcGF0Y2ggIzI3NzI3ODcpCisKKzIwMDktMDQtMjMgMDY6NDUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oOgorCisgICBidWlsZGluZzogVXNlIGNvbmZpZ19lcnJvciguLi4pIGluc3RlYWQgb2YKKyAgIGNvbmZpZ19yZXF1aXJlKG5vbi1leGlzdGluZykgdG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlcy4KKworMjAwOS0wNC0yMyAwNjo0MSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaDoKKworICAgc25tcGxpYiwgTGludXg6IE1vdmUgZ2V0X3BpZF9mcm9tX2lub2RlIHRvIGl0J3Mgb3duIGZpbGUgYW5kIG9ubHkKKyAgIGNvbXBpbGUgaXQgaWYgbmVlZGVkLCBhbHNvIHJlbmFtZSBpdCB0bworICAgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUuCisKKzIwMDktMDQtMjMgMDQ6MzMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCwgYWdlbnQvc25tcGQuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDMxMzUzIGZyb20gaG5yb3NlIHRvIG1ha2Ugc29tZSBDKysKKyAgIGNvbXBpbGVycyBoYXBwaWVyCisKIDIwMDktMDQtMjMgMDM6MjcgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CkBAIC00MDQwLDI3ICs2NDg1MSwyNjQgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNTA1NDg4OiBmcm9tIGRhYm9rZXkgdG8gZml4IGFsYXJtcyBub3QKICAgIGJlaW5nIHRyaWdnZXJlZCBhdCB0aGUgcmlnaHQgdGltZXMgZHVlIHRvIGxhcmdlIGNsb2NrIHNrZXdzLgogCisyMDA5LTA0LTIzIDAwOjAxICBoYXJkYWtlcgorCisgICAqICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaCwgbWFuL3NubXBuZXRzdGF0LjEuZGVmOgorCisgICBORVdTOiBzbm1wbmV0c3RhdDogUEFUQ0g6IDI1NjQ1Mzg6IGZyb20gYWhtYWtlIHRvIHN1cHBvcnQgR0VUQlVMSworICAgaW4gdjJjKyBzbm1wIHZlcnNpb25zCisKIDIwMDktMDQtMjIgMjM6NDkgIGhhcmRha2VyCiAKICAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgICAKLSAgICAgIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgICAKLSAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmgsIHNubXBsaWIvc3lzdGVtLmM6CisgICAgICBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIHNubXBsaWIvc3lzdGVtLmM6CiAKICAgIENIQU5HRVM6IHBvcnRzOiBQQVRDSDogMjY4ODM0MjogZnJvbSBhaG1ha2UgdG8gZml4IHZhcmlvdXMKICAgIGNvbXBpbGVyIHdhcm5pbmcKIAorMjAwOS0wNC0yMiAyMzoyMyAgaGFyZGFrZXIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjc2MzcxOiBmcm9tIGZoZXcgdG8gYWxsb3cgcGVybCB0byB1c2UKKyAgIE9QQVFVRXMKKworMjAwOS0wNC0yMiAyMzoxNyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyNzc1ODAwOiBmcm9tIEFkYW0gUm9tYW5layB0byBhbGxvdworICAgcHl0aG9uIHRocmVhZGluZyB0byBjb250aW51ZSB3aGVuIGEgcmVxdWVzdCBpcyBzZW50CisKIDIwMDktMDQtMjIgMjI6MTEgIGFsZXhfYgogCiAgICAqIFJFQURNRSwgUkVBRE1FLndpbjMyOgogCiAgICBVcGRhdGUgVEhBTktTIHNlY3Rpb24uCiAKKzIwMDktMDQtMjIgMjE6MjEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBGb2xkIHRoZSBmdW5jdGlvbiBleHRyYWN0X2lub2RlLiB3aXRoIG9ubHkgb25lIHVzZXIsIGludG8gaXQncworICAgdXNlci4KKyAgIFJlbW92ZSB0aGUgI2RlZmluZSBGSUxFX0RJU1AsIHdpdGggb25seSBvbmUgdXNlciwgd2l0aCB0aGUgYWN0dWFsCisgICB2YWx1ZS4KKworMjAwOS0wNC0yMiAyMTowMyAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggU01VWCBlbmFibGVkLgorCisyMDA5LTA0LTIyIDEzOjQzICBqc2FmcmFuZWsKKworICAgKiBSRUFETUUuYWdlbnQtbWliczoKKworICAgQWRkIGEgbm90ZSBob3cgdGhlIG5ldyBSTU9OLU1JQiBpbXBsZW1lbnRhaW9uIHdvcmtzCisKKzIwMDktMDQtMjIgMTM6NDEgIGR0czEyCisKKyAgICogbWFuL3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICBGaWxsIG91dCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgVmFyYmluZC1yZWxhdGVkIEFQSSBjYWxscy4KKworMjAwOS0wNC0yMiAxMzozNyAganNhZnJhbmVrCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9ybW9uLW1pYiwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliLmgsIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2VudW1zLmgsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9vaWRzLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDIxMDM0OTI6IGltcGxlbWVudAorICAgUk1PTi1NSUI6OmV0aGVyU3RhdHNKYWJiZXJzCisgICBQYXRjaCBmcm9tIE5hcmVuZHJhIEsuLCBTYW5kZWVwIEsuIFNoYW5kaWx5YSBhbmQgU2h5YW0gSXllcgorCiAyMDA5LTA0LTIyIDEwOjA4ICBkdHMxMgogCiAgICAqIG1hbi9taWJfYXBpLjMuZGVmOgogCiAgICBDb3JyZWN0IGEgc2VyaW91c2x5IG1pc2xlYWRpbmcgKGkuZS4gd3JvbmcpIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgcHVycG9zZSBhbmQgYmVoYXZpb3VyIG9mIHRoZSBwcmludF9kZXNjcmlwdGlvbiBmYW1pbHkgb2YgY2FsbHMuCisgICBwdXJwb3NlCisgICBhbmQgYmVoYXZpb3VyIG9mIHRoZSBwcmludF9kZXNjcmlwdGlvbiBmYW1pbHkgb2YgY2FsbHMuCisKKzIwMDktMDQtMjIgMDk6MzIgIGR0czEyCisKKyAgICogbWFuL21pYl9hcGkuMy5kZWY6CisKKyAgIEZ1cnRoZXIgcG9saXNoaW5nIG9mIHRoZSBkZXNjcmlwdGlvbnMgb2YgTUlCLXJlbGF0ZWQgQVBJIGNhbGxzLgorCisyMDA5LTA0LTIyIDA3OjM5ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJhbmdlIGNoZWNrcy4KKyAgIChUaGVzZSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlX2ZkX3NldCByb3V0aW5lcyB0aGVtc2VsdmVzKS4KKworMjAwOS0wNC0yMSAyMzoyNyAgYWxleF9iCisKKyAgICogIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgd2luMzI6IEZpeCBXaW5kb3dzIGJ1aWxkIGVudmlyb25tZW50IHRvIHN1cHBvcnQgcGF0Y2ggMjc3Mjc4Ny4KKworMjAwOS0wNC0yMSAxNTozMyAgZHRzMTIKKworICAgKiAgYWdlbnQvc25tcGQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbiwgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsICAgCisgICAgICBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJldmlzZWQgdmVyc2lvbiBvZiBwYXRjaCAjMjc3Mjc4NworCisyMDA5LTA0LTIxIDE1OjE1ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW4sIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYywgIAorICAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIFVuZG8gcmV2aXNpb24gMTc1MTUKKyAgIChicm9rZW4vaW5jb21wbGV0ZSBwYXRjaCkKKworMjAwOS0wNC0yMSAxNDozNyAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAKKyAgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjc3Mjc4NzogQ2xlYW5lciBhcHByb2FjaCB0byBoYW5kbGluZworICAgbGFyZ2UgZmRfc2V0cy4KKyAgIEJhc2VkIG9uIHBhdGNoIHN1cHBsaWVkIGJ5IEJhcnQgVmFuIEFzc2NoZS4KKworMjAwOS0wNC0yMSAxNDozNCAgZHRzMTIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIFByb3Blcmx5IGdlbmVyYXRlIG5ldyBjb3JlIEFQSSBtYW4gcGFnZXMuCisKKzIwMDktMDQtMjEgMDk6MzggIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oOgorCisgICBGaXJzdC1jdXQgYXQgaWRlbnRpZnlpbmcgdGhlIGNvcmUgTmV0LVNOTVAgQVBJIGNhbGxzLgorICAgTW92ZSB0aGVzZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0b3AtbGV2ZWwgaGVhZGVyIGZpbGVzLgorCisyMDA5LTA0LTIxIDA5OjM2ICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9jb25maWdfYXBpLjMuZGVmLCBtYW4vcmVhZF9jb25maWcuMy5kZWYsICAgCisgICAgICBtYW4vc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zbm1wX2FwaS4zLmRlZjoKKworICAgUmVuYW1lIGNvbmZpZy9zZXNzaW9uIEFQSSBtYW4gcGFnZXMsIGluIGxpbmUgd2l0aCBvdGhlciBjb3JlIEFQSQorICAgc3RydWN0dXJlLgorCisyMDA5LTA0LTIxIDA5OjMyICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vcGR1X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9yZWFkX2NvbmZpZy4zLmRlZiwgbWFuL3NubXBfYXBpLjMuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgIERvY3VtZW50IChvciByZXN0cnVjdHVyZSkgdGhlIGNvcmUgQVBJIGVsZW1lbnRzLgorICAgQWxpZ24gdGhpcyBvcmdhbmlzYXRpb24gd2l0aCB0aGUgZmlyc3QtY3V0IHJlc3RydWN0dXJpbmcKKyAgIG9mIHRoZSBtYWluIGhlYWRlciBmaWxlcy4KKworMjAwOS0wNC0yMCAxMDoyMyAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFNraXAgZmlsZSBoYW5kbGVzIHRoYXQgYXJlIHRvbyBsYXJnZSBmb3IgZmRfc2V0IHRvIGNvcGUgd2l0aC4KKyAgIEEgc2ltcGxlIGZpeCBmb3IgdGhlIGltbWVkaWF0ZSBwcm9ibGVtIGFkZHJlc3NlZCBieSBwYXRjaAorICAgIzE2MjcwNDkuCisKKzIwMDktMDQtMjAgMTA6MTkgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmV2ZXJ0IHBhdGNoICMxNjI3MDQ5IChleHRlbnNpb24gdG8gZGVhbCB3aXRoIGxhcmdlIGZpbGUKKyAgIGhhbmRsZXJzKS4KKyAgIFNlZSB0aGUgZGlzY3Vzc2lvbiBvbiB0aGF0IHRyYWNrZXIgZW50cnkgZm9yIGJhY2tncm91bmQgYXMgdG8KKyAgIHdoeS4KKworMjAwOS0wNC0yMCAwMDo1OSAgYWxleF9iCisKKyAgICogIFJFQURNRS53aW4zMiwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgcGVybC9hZ2VudC9hZ2VudC54cywgICAKKyAgICAgIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsIAorICAgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgd2luMzI6IEJ1aWxkIGZpeGVzIGZvciBXaW5kb3dzLiBwYXNzIGFuZCBwYXNzX3BlcnNpc3Qgc3RpbGwgbmVlZAorICAgdG8gYmUgZml4ZWQgdG8gc3VwcG9ydCBDb3VudGVyNjQgb24gV2luZG93cy4KKworMjAwOS0wNC0yMCAwMDo0OCAgYWxleF9iCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIHdpbjMyOiBTeW5jIG5ldC1zbm1wLWNvbmZpZy5oLmluIGFuZCBuZXQtc25tcC1jb25maWcuaAorCisyMDA5LTA0LTE3IDIxOjIxICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgbHRtYWluLnNoLCBtNC9saWJ0b29sLm00LCAKKyAgICAgICAgbTQvbHRvcHRpb25zLm00LCBtNC9sdHN1Z2FyLm00LCBtNC9sdHZlcnNpb24ubTQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBVcGdyYWRlIGxpYnRvb2wgdmVyc2lvbiB0byAyLjIuNiBpbiBvcmRlciB0byB3b3JrCisgICBhcm91bmQgYSBidWdsZXQgdGhhdCBtYWRlIGF1dG9yZWNvbmYgLXZpZiBlcmFzZSBjb25maWcuc3ViIGFuZAorICAgY29uZmlnLmd1ZXNzLgorCisyMDA5LTA0LTE0IDIxOjU5ICBtYWdmcgorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxOTc2NzcyOiBDaGFuZ2VkIHRoZSBtaWIgcGFyc2VyIHRvIGhhbmRsZQorICAgbG9uZyBiaW5hcnkgYW5kIGhleCBzdHJpbmdzLgorCisyMDA5LTA0LTExIDEyOjUyICByc3RvcnkKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgc3VnZ2VzdCB0cnVuY2F0aW9uIG9mIENoYW5nZUxvZy5yZWFsbHlhZGQKIAogMjAwOS0wNC0xMCAyMzoxOCAgYWxleF9iCiAKQEAgLTQwOTUsNyArNjUxNDMsOCBAQAogCiAyMDA5LTA0LTEwIDIxOjQ1ICBhbGV4X2IKIAotICAgKiB3aW4zMi9Db25maWd1cmU6CisgICAqICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvUkVBRE1FLnR4dDoKIAogICAgV2luMzI6IE1pbm9yIGJ1aWxkIGFuZCByZWFkbWUgdXBkYXRlcy4KIApAQCAtNDEwNywyNCArNjUxNTYsMjcgQEAKICAgIE5FV1M6IFdpbjMyOiBQQVRDSCAyNjg2MjQ4OiBBcHBsaWVkIHBhdGNoIGJ5IEJhcnQgVmFuIEFzc2NoZQogICAgd2hpY2ggZml4ZXMgc2V2ZXJhbCB3aW5FeHRETEwgYnVncy4KIAotMjAwOS0wNC0xMCAyMDoxNCAgcnN0b3J5CisyMDA5LTA0LTEwIDIwOjE3ICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKIAotICAgcmVzdG9yZSBhbm5veWluZyBsb2cgbWVzc2FnZSwgYnV0IGZpeCBjYXVzZSBvZiBpdCBvbiAhZnJlZWJzZCBzeXN0ZW1zCisgICByZXN0b3JlIGFubm95aW5nIGxvZyBtZXNzYWdlLCBidXQgZml4IGNhdXNlIG9mIGl0IG9uICFmcmVlYnNkCisgICBzeXN0ZW1zCiAKIDIwMDktMDQtMDkgMTI6MjggIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE1NTA3MzA6IFJlcG9ydCBlcnJvcnMgZnJvbSBpdGVyYXRvci1iYXNlZCBoYW5kbGVycy4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTU1MDczMDogUmVwb3J0IGVycm9ycyBmcm9tIGl0ZXJhdG9yLWJhc2VkCisgICBoYW5kbGVycy4KICAgIEJhc2VkIG9uIGEgcGF0Y2ggcHJvdmlkZWQgYnkgV2F5bmUgR2xhbnR6CiAKIDIwMDktMDQtMDkgMTE6NDEgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMTI0Mjg4OiBGaXggc2V0dGluZyBvZiB1c21Vc2VyUHJpdlByb3RvY29sIGF0IGNyZWF0aW9uLgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMTI0Mjg4OiBGaXggc2V0dGluZyBvZgorICAgdXNtVXNlclByaXZQcm90b2NvbCBhdCBjcmVhdGlvbi4KICAgIExvZ2ljIGJ1ZywgcmVwb3J0ZWQgYnkgUmFtZXNoIEtvdGFiYWdpCiAKIDIwMDktMDQtMDkgMDk6MTIgIGR0czEyCkBAIC00MTQxLDQ3ICs2NTE5Myw5OCBAQAogICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjI2MDgyODogRml4IHB5dGhvbiBzbm1wd2FsayBtZW1vcnkgbGVhawogICAgUGF0Y2ggcHJvdmlkZWQgYnkgR2FicmllbGUgTWVzc2luZW8KIAorMjAwOS0wNC0wOSAwODo1OCAgZHRzMTIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyMjcyMzQ3OiBJbXBsZW1lbnQgImltcGxpZWQiIGluIE1JQiBoYXNoCisgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCiAyMDA5LTA0LTA5IDA4OjU0ICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmY6CiAKLSAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSDogMjMxNjEyNzogRml4IGJ1ZyBpbiBpdGVyYXRlX2FjY2VzcyBnZW5lcmF0ZWQgY29kZS4KKyAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSDogMjMxNjEyNzogRml4IGJ1ZyBpbiBpdGVyYXRlX2FjY2VzcworICAgZ2VuZXJhdGVkIGNvZGUuCisKKzIwMDktMDQtMDkgMDg6NDggIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQzNTY4MTogRW5hYmxlIGlmLW1pYiByZXdyaXRlICh3aXRoCisgICBzeXNjdGwgYmFja2VuZCkgb24gTmV0QlNECiAKIDIwMDktMDQtMDkgMDg6NDQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDM1NzkzOiBTdXBwb3J0IDY0LWJpdCBJRi1NSUIgY291bnRlcnMgb24gc3lzY3RsICgqQlNEKSBzeXN0ZW1zLgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDM1NzkzOiBTdXBwb3J0IDY0LWJpdCBJRi1NSUIgY291bnRlcnMgb24KKyAgIHN5c2N0bCAoKkJTRCkgc3lzdGVtcy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEphbiBBbmRyZXMKIAorMjAwOS0wNC0wOSAwODowMCAgdGFuZGVycworCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIGZpeCBjb21waWxhdGlvbiB3YXJuaW5ncworCisyMDA5LTA0LTA4IDIzOjE3ICB0YW5kZXJzCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgbW92ZSBjb21tZW50cyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgYXJlIGxlZ2FsCisKKzIwMDktMDQtMDggMjM6MDMgIHRhbmRlcnMKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICAtIHJlbmFtZSBuZXcgZ2V0UmVxdWVzdG9ySXAgdG8gZ2V0U291cmNlSVAgYW5kIGdldFRhcmdldElwIHRvCisgICBnZXREZXN0SXAKKyAgIC0gcmVtaW5kIHRoYXQgdGhpcyBpcyBmdWxseSB0cmFuc3BvcnQtc3BlY2lmaWMsIGkuZS4gVURQL0lQdjQKKyAgIG9ubHkhCisKIDIwMDktMDQtMDggMTY6MDAgIGR0czEyCiAKICAgICogYWdlbnQvc25tcF9hZ2VudC5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIzODQ3Nzk6IEZpeCBoYW5kbGluZyBvZiBHZXRCdWxrIHdpdGggTj4wLE09PTAKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjM4NDc3OTogRml4IGhhbmRsaW5nIG9mIEdldEJ1bGsgd2l0aAorICAgTj4wLE09PTAKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZ3VzIFNhbGtlbGQKIAogMjAwOS0wNC0wOCAxNTo1MiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQwNjM3ODogRml4IGhyU1dSdW5QZXJmTWVtIG9uIDY0LWJpdCBTb2xhcmlzIHN5c3RlbXMKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQwNjM3ODogRml4IGhyU1dSdW5QZXJmTWVtIG9uIDY0LWJpdAorICAgU29sYXJpcyBzeXN0ZW1zCiAgICBQYXRjaCBwcm92aWRlZCBieSBOVHdvTwogCiAyMDA5LTA0LTA4IDE1OjQ4ICBkdHMxMgogCiAgICAqIHNubXBsaWIvbWliLmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNDc5NzAwOiBGaXggem9uZWQgSVAgYWRkcmVzcyB1c2VkIGFzIHRhYmxlIGluZGljZXMKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNDc5NzAwOiBGaXggem9uZWQgSVAgYWRkcmVzcyB1c2VkIGFzCisgICB0YWJsZSBpbmRpY2VzCiAgICBQYXRjaCBwcm92aWRlZCBieSBCcmlhbiBSZXRmb3JkLgogCiAyMDA5LTA0LTA4IDE1OjMzICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNDkyMzc3OiBGaXggdHlwby9idWcgaW4gc25tcF9lbmFibGVfY2FsbGJhY2soKQorICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI0OTIzNzc6IEZpeCB0eXBvL2J1ZyBpbgorICAgc25tcF9lbmFibGVfY2FsbGJhY2soKQogICAgUmVwb3J0ZWQgYnkgam95Y2Vhbm1hY2hpbmUKIAorMjAwOS0wNC0wOCAxNToyOSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNTA3MjQ5OiBzY3RwLW1pYiBzdXBwb3J0IGZvciBGcmVlQlNELgorCiAyMDA5LTA0LTA4IDE1OjE2ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKQEAgLTQxOTQsNyArNjUyOTcsOCBAQAogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CiAKLSAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDI1ODA5Nzk6IEZpeCBweXRob24gc2Vzc2lvbiBwb2ludGVycyBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDI1ODA5Nzk6IEZpeCBweXRob24gc2Vzc2lvbiBwb2ludGVycyBvbgorICAgNjQtYml0IHN5c3RlbXMuCiAgICBQYXRjaCBwcm92aWRlZCBieSBKb2huIEtodmF0b3YuCiAKIDIwMDktMDQtMDggMTQ6NDkgIGR0czEyCkBAIC00MjA4LDggKzY1MzEyLDcgQEAKIDIwMDktMDQtMDggMTQ6MzQgIGR0czEyCiAKICAgICogIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgICAKLSAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QtYy5pbmMsIAotICAgICAgICBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC14cy5pbmM6CisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6CiAKICAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDI3MjYzMDI6IFBhc3MgcmVzdWx0cyBvZiBQZXJsIHRyYXAKICAgIGhhbmRsZXJzIHRvIHRyYXAgZGFlbW9uCkBAIC00MjIzLDYgKzY1MzI2LDE0IEBACiAgICBoaWdoLUFTQ0lJIGNoYXJzCiAgICBQYXRjaCBwcm92aWRlZCBieSBCYXJ0IFZhbiBBc3NjaGUKIAorMjAwOS0wNC0wOCAxNDoyNCAgZHRzMTIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjcwOTcwNTogUmV0cmlldmUgc3JjL3RhcmdldCBJUCBhZGRyZXNzIGluCisgICBQZXJsLWJhc2VkIGFnZW50cworICAgUGF0Y2ggcHJvdmlkZWQgYnkgZmhldworCiAyMDA5LTA0LTA4IDE0OjE2ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKQEAgLTQyNDksNiArNjUzNjAsMjggQEAKICAgIFFuOiBEb2VzIHRoaXMgZXZlbiBxdWFsaWZ5IGFzIGFuIGVycm9yPyBXb3VsZG4ndCBhIHdhcm5pbmcgYmUKICAgIHN1ZmZpY2llbnQ/CiAKKzIwMDktMDQtMDYgMTk6MzMgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsIHNubXBsaWIvcGFyc2UuYzoKKworICAgc25tcGxpYjogTWFrZSB0aGUgbm9kZSBzdHJ1Y3QgcHJpdmF0ZS4gSGlkZSB0aGUgb3JoYW5fbm9kZXMKKyAgIHZhcmlhYmxlLgorCisyMDA5LTA0LTA2IDE4OjQ1ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBfcGVybC5jOgorCisgICBzbm1wZCxwZXJsOiBJZiBteV9wZXJsIGlzIE5VTEwgd2hlbiBwYXNzZWQgdG8gcGVybF9kZXN0cnVjdCB0aGVuCisgICB0aGF0IGZ1bmN0aW9uIGNyYXNoZXMgZm9yIHNvbWUgcGVybCB2ZXJzaW9ucyBzbyBjaGVjayB0aGF0IGl0IGlzCisgICBub24tbnVsbCBiZWZvcmUgZGVzdHJveWluZyBpdC4KKworMjAwOS0wNC0wNiAxODo0MiAgbWFnZnIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBwZXJsOiBBdm9pZCBzdXJwcmlzZXMgaWYgdGhlIHBlcmwgc3RyaW5nIGNvbnRhaW5zIHByaW50ZiBlc2NhcGUKKyAgIGNoYXJhY3RlcnMuCisKIDIwMDktMDQtMDYgMTg6MjIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgpAQCAtNDI1Nyw3ICs2NTM5MCw3IEBACiAgICAoQXZvaWRzIHRydW5jYXRlZCB3YWxrIG9mIGhyU1dSdW5QYXRoIG9uIFN1U0Ugc3lzdGVtcykKICAgIFJlcG9ydGVkIGJ5IEthbWlsIEtpc2llbC4KIAotMjAwOS0wNC0wNiAxMjowNSAgdGFuZGVycworMjAwOS0wNC0wNiAxMTo1OCAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHMsIHBlcmwvYWdlbnQvdHlwZW1hcDoKIApAQCAtNDI2NiwxMSArNjUzOTksMTA5IEBACiAgICBnZXRSb290T0lEIHdvcmtzIHByb3Blcmx5LiBOb3cgcGFzc2VzICJtYWtlIHRlc3QiIGFuZCAibWFrZQogICAgcGVybHRlc3QiLgogCi0yMDA5LTA0LTA2IDEyOjAyICBkdHMxMgorMjAwOS0wNC0wNSAxMDowNSAgbWFnZnIKIAotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmM6CisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CiAKLSAgIEZpeCB0eXBvCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKworMjAwOS0wNC0wNSAwOTo1MyAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgbG9jYWwvbWliMmMubm90aWZ5LmNvbmY6CisKKyAgIE1ha2UgZXZlbiBtb3JlIHZhcmlhYmxlcyBhbmQgdGVtcGxhdGVzIGNvbnN0LgorCisyMDA5LTA0LTA0IDIyOjEzICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oOgorCisgICBzbm1wZDogTWFrZSBtb3JlIGxvY2FsIHZhcmlhYmxlcyBjb25zdCBhbmQgbG9jYWwuCisKKzIwMDktMDQtMDQgMTA6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYywgbmV0LXNubXAtY29uZmlnLmluOgorCisgICBNYXJrIHRoZSByZWNvbmZpZyB2YXJpYWJsZSBhcyBzdGF0aWMgc2luY2UgaXQgaXMgcHJpdmF0ZSB0byB0aGUKKyAgIG1vZHVsZS4KKworMjAwOS0wNC0wNCAxMDowMyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYzoKKworICAgTWFyayB0aGUgZmlsZSBzY29wZSBwcml2YXRlIHZhcmlhYmxlIG1pbmltdW1fc3dhcCBhcyBzdGF0aWMuCisKKzIwMDktMDQtMDQgMDk6NTggIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmM6CisKKyAgIHNubXBsaWI6IE1ha2UgbW9yZSBzeW1ib2xzIGNvbnN0IGluIG9yZGVyIHRvIG1vdmUgdGhlbSB0bworICAgcmVhZG9ubHkgbWVtb3J5LgogCiAyMDA5LTA0LTAyIDIxOjI0ICBoYXJkYWtlcgogCkBAIC00Mjc5LDYgKzY1NTEwLDEzMSBAQAogICAgQ0hBTkdFUzogQlVHIDExMjY5NDogUGF0Y2ggZnJvbSBCaWxsIEZlbm5lcjogZG9uJ3Qgb3BlbiAoYW5kCiAgICBjbG9iYmVyKSBhbiBhZ2VudHggc29ja2V0IGlmIHRoZSBvdGhlciB0cmFuc3BvcnRzIGZhaWwgdG8gb3BlbgogCisyMDA5LTA0LTAxIDIzOjQxICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDQtMDEgMjM6MTkgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA0LTAxIDIzOjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wNC0wMSAyMzowMyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGNvbnZlcnQgY29tbWVudHMgdG8gQU5TSSBjb21tZW50cworCisyMDA5LTA0LTAxIDIyOjIxICBoYXJkYWtlcgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FsbGJhY2suMywgbWFuL25ldHNubXBfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA0LTAxIDIyOjAzICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L21ha2VyZWxlYXNlLnhtbCwgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS40IC0+IFY1LjUucHJlMQorCisyMDA5LTA0LTAxIDIxOjU4ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC44LmRlZjoKKworICAgdXBkYXRlcyBmb3IgU1NICisKKzIwMDktMDQtMDEgMTk6MzkgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgTWFrZSB0aGUgc3JjIHBvaW50ZXIgb2Ygc25tcF9jbG9uZV9tZW0gYSBwb2ludGVyIHRvIGNvbnN0YW50LgorCisyMDA5LTA0LTAxIDE4OjIzICBoYXJkYWtlcgorCisgICAqIGFwcHM6CisKKyAgIGlnbm9yZSAnc3NodG9zbm1wJworCisyMDA5LTA0LTAxIDE3OjMxICBoYXJkYWtlcgorCisgICAqICBhcHBzL3NzaHRvc25tcC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgbWFuL3NubXBkLjguZGVmLCBzbm1wbGliL3NubXBTU0hEb21haW4uYzoKKworICAgTWFrZSBzc2ggdHJhbnNwb3J0IHN1cHBvcnQgdXNlIGEgdW5peCBzb2NrZXQgd2l0aCBwcm9wZXIKKyAgIGNyZWRlbnRpYWwgcGFzc2luZworCisyMDA5LTA0LTAxIDE3OjI5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgbWFrZSB0aGUgZXhlYyBjYWNoZSByZWFkYWJsZSBvbmx5IGJ5IHRoZSB1c2VyCisKKzIwMDktMDQtMDEgMTc6MjggIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIG1vdmUgc3RyaW5nIHRvIHVpZC9naWQgZnVuY3Rpb25hbGl0eSB0byBzbm1wbGliIGZvciByZXVzZQorCiAyMDA5LTAzLTMxIDE1OjEyICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKQEAgLTQzMDAsNiArNjU2NTYsOTMgQEAKIAogICAgQyBjb21tZW50cyB1c2UgLyogLi4uICovLCBub3QgIwogCisyMDA5LTAzLTMxIDA4OjA1ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEZpeCBjb21waWxhdGlvbiB3aXRoIGdsaWJjIDwgMi40LCBJQ01QdjYgbWVzc2FnZSB0eXBlcyBzdGFydGluZworICAgd2l0aCBNTERfKiBoYXZlIGRpZmZlcmVudCBuYW1lIHRoZXJlLgorCisyMDA5LTAzLTI0IDA2OjA0ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIERvIG5vdCBjb21waWxlIHRoZSBwYXJ0cyB0aGF0IGRlcGVuZCBvbiBsaWJzc2wgaWYgbGlic3NsIGlzCisgICBtaXNzaW5nLgorCisyMDA5LTAzLTIzIDA5OjIxICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOgorCisgICBORVdTOiBzbm1wZDogaXBOZXRUb1BoeXNpY2FsTGFzdFVwZGF0ZWQgT0lEIGltcGxlbWVudGVkCisgICAKKyAgIFRoZSB2YWx1ZSBpcyBlc3RpbWF0ZWQgd2l0aCBldmVyeSBjYWNoZSByZWxvYWQsIHdoaWNoIGlzIG9uY2UgaW4KKyAgIDYwIHNlY29uZHMgYnkgZGVmYXVsdC4KKyAgIFRoYXQgbWVhbnMgdGhlIHZhbHVlIHJlcG9ydGVkIGJ5IHNubXBkIG1heSBkaWZmZXIgZnJvbSByZWFsaXR5IGJ5CisgICBvbmUgbWludXRlLgorICAgSWYgYW55Ym9keSBuZWVkcyBiZXR0ZXIgcHJlY2lzaW9uLCB0aGUgY2FjaGUgdGltZW91dCBjYW4gYmUKKyAgIGNvbmZpZ3VyZWQgYnkgc2V0dGluZworICAgTkVULVNOTVAtQUdFTlQtTUlCOjpuc0NhY2hlVGltZW91dC4xLjMuNi4xLjIuMS40LjM1IHRvCisgICBhcHByb3ByaWF0ZSB2YWx1ZSBieSBzbm1wc2V0LgorCisyMDA5LTAzLTIwIDE5OjM4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvZXh0cmFjdG5ld3M6CisKKyAgIGZpeCBsYWNrIG9mIHdyYXBwaW5nIGxpbmVzIHByb2JsZW0KKworMjAwOS0wMy0yMCAxODozMSAgaGFyZGFrZXIKKworICAgKiBORVdTLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBjb25maWcgb3B0aW9ucywgZXRjLCBmb3IgU1NIIGFuZCBEVExTCisKKzIwMDktMDMtMjAgMTg6MjQgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wZC44LmRlZjoKKworICAgY3VycmVudGx5IG1pbmltYWwgZG9jdW1lbnRhdGlvbiBvbiBkdGxzIGFuZCBzc2gKKworMjAwOS0wMy0yMCAxNjo1MCAgaGFyZGFrZXIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zc2h0b3NubXAuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIEFkZGVkIGFscGhhIHNubXAgb3ZlciBzc2ggc3VwcG9ydAorCisyMDA5LTAzLTIwIDE2OjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2hlY2sgdGhlIHNlYyBuYW1lIGxlbmd0aCwgbm90IGp1c3QgdGhlIGNvbnRlbnRzCisKKzIwMDktMDMtMjAgMTY6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHNlcXVlbmNlIHBhcnNpbmcgZml4CisKKzIwMDktMDMtMjAgMTU6NTMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYWRkZWQgYSBuZXcgZmxhZyB0byBhbGxvdyBmb3Igc2lnbmFsbGluZyBvZiBsZWdhbCBlbXB0eSBwYWNrZXRzCisgICBmcm9tIGEgdHJhbnNwb3J0CisKKzIwMDktMDMtMTggMTk6NDIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgYWdhaW4uCisKIDIwMDktMDMtMTggMTA6NTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jOgpAQCAtNDMyOSw2ICs2NTc3MiwyMCBAQAogICAgRml4IHZhbGdyaW5kIHdhcm5pbmcuCiAgICBQYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIEhlbW1pbmdlcgogCisyMDA5LTAzLTE3IDIyOjU3ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmg6CisKKyAgIFBBVENIOiAyNjg4MzQyOiBmcm9tICJCYXJ0IFZhbiBBc3NjaGUiOiBVc2UgcHJvcGVyIGZ1bmN0aW9uCisgICBwb2ludGVycworCisyMDA5LTAzLTEzIDIxOjI2ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgorCisgICBQcm9jZXNzIGhyTWVtb3J5U2l6ZSAoc2NhbGFyKSBzZXBhcmF0ZWx5IGZyb20gaHJTdG9yYWdlVGFibGUuCisgICBUaGlzIHNpbXBsaWZpZXMgdGhlIGhhbmRsZXIgY29kZSBzdHJ1Y3R1cmUuCisKIDIwMDktMDMtMTMgMjE6MjMgIGR0czEyCiAKICAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKQEAgLTQzNTMsNiArNjU4MTAsMjcgQEAKICAgIChBbiBhbHRlcm5hdGl2ZSBtaWdodCBiZSB0byBjcmVhdGUgYSBuZXcgZW50cnkgaW5zdGVhZCkuCiAgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IE5pY2sgSGluZGxleQogCisyMDA5LTAzLTEwIDE1OjI1ICBqc2FmcmFuZWsKKworICAgKiBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYzoKKworICAgTkVXUzogc25tcGQ6IGlwQWRkcmVzc1NwaW5Mb2NrIGltcGxlbWVudGVkCisKKzIwMDktMDMtMDIgMTE6MjMgIGR0czEyCisKKyAgICogQ09QWUlORzoKKworICAgRml4IGF0dHJpYnV0aW9uIG9mIGxhdGVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA5LTAyLTI4IDE4OjIxICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTW92ZSB0aGUgI2RlZmluZSBjb25maWdfKiguLi4pIGZyb20gYWNjb25maWcuaCB0byB0aGUgY29uZmlndXJlCisgICBzY3JpcHQgc28gdGhhdCB0aGV5IGFyZSBuZXh0IHRvIHRoZSBjb2RlIHRoYXQgaGFuZGxlIHRoZQorICAgY29ycmVzcG9uZGluZyBjb25maWdfKiB0b2tlbi4KKwogMjAwOS0wMi0yNyAxMzoyMCAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CkBAIC00MzYyLDYgKzY1ODQwLDIwIEBACiAgICBJdCdzIGJlaW5nIHdyaXR0ZW4gdG8gbG9nIGV2ZXJ5dGltZSBzb21lb25lIHF1ZXJpZXMKICAgIFVDRC1TTk1QLURJU0tJTyBNSUIuCiAKKzIwMDktMDItMjUgMDY6NDEgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pZi5jOgorCisgICBVc2UgdGhlIGZlYXR1cmUgdGVzdCBtYWNyb3MgdG8gc2V0IHdoYXQgaXMgbmVlZGVkLgorICAgRG8gbm90IHVzZSB0aGUgaW50ZXJuYWwgR05VIGxpYmMgbWFjcm9zIHRoYXQgYXJlIHNldCBieSBzZXR0aW5nCisgICB0aGUgZmVhdHVyZSB0ZXN0IG1hY3Jvcy4KKworMjAwOS0wMi0yNSAwNjozOCAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluY2x1ZGUuCisKIDIwMDktMDItMjQgMDc6MjYgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKQEAgLTQzNjksMjcgKzY1ODYxLDk0IEBACiAgICBDSEFOR0VTOiBNYWtlIC1MTiBzdG9wIGR1bXBpbmcgY29yZS4gTWFrZSBiYWQgZGVidWcgbGV2ZWxzIHJlcG9ydAogICAgdGhlIG9mZmVuZGluZyBzeW1ib2wuCiAKLTIwMDktMDItMTggMTU6MjcgIGpzYWZyYW5laworMjAwOS0wMi0yNCAwNjo1MCAgbWFnZnIKIAotICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgICAKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBNb3ZlIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gY29kZSB0byBoYXBwZW4gYWZ0ZXIgdGhlIGRvbWFpbgorICAgc2VsZWN0aW9uIGNvZGUgc28gdGhhdCB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIGNvZGUga25vd3Mgd2hhdAorICAgZGlyZWN0b3J5IHRvIGNyZWF0ZS4KKworMjAwOS0wMi0yNCAwNjo0NyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBDaGFuZ2UgdGhlIGVycm9yIGNoZWNraW5nIG9wdGlvbiAtLWVuYWJsZS1teXNxbCB0byBzdWdnZXN0IHRoYXQKKyAgIHRoYXQgLS13aXRoLW15c3FsIGlzIHVzZWQgcmF0aGVyIHRoYXQgLS13aXRoLW9wZW5zc2wuCisKKzIwMDktMDItMjQgMDY6NDQgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZWdlbmVyYXRlIGF1dG9jb25mIGFydGlmYWN0cy4KKworMjAwOS0wMi0yMyAxODo0MyAgcnN0b3J5CisKKyAgICogYXBwcy9zbm1wdHJhcGRfc3FsLmM6CisKKyAgIGFkZCBmb3Jnb3R0ZW4gZmlsZQorCisyMDA5LTAyLTIwIDA0OjQxICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAKKyAgICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBhZGRlZCBlbWFjcyBhdXRvY29uZiBtb2RlIHNwZWNpZmllcgorCisyMDA5LTAyLTE5IDE4OjMyICByc3RvcnkKKworICAgKiBSRUFETUUuc3FsLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IG5ldyBzcWwgdHJhcCBsb2dnaW5nCisKKzIwMDktMDItMTkgMTg6MjAgIHJzdG9yeQorCisgICAqICBDT1BZSU5HLCBORVdTLCBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaCwgY29uZmlndXJlLCAgCisgICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGRpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IHNubXB0cmFwZDogYWRkIHRyYXAgaGFuZGxlciBmb3IgbG9nZ2luZyB0cmFwcyB0byBhIG15c3FsCisgICBkYXRhYmFzZQorCisyMDA5LTAyLTE5IDE3OjU4ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZGVkIGl0ZXJhdG9yIGZvciBzaW5nbHkgbGlua2VkIGxpc3RzOyBhZGQKKyAgIGNvbnRhaW5lciBuYW1lIGluIG1vcmUgZXJyb3IgbXNncworCisyMDA5LTAyLTE4IDE4OjUyICByc3RvcnkKKworICAgKiBhcHBzL3NubXB1c20uYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBjaGFuZ2UgTUFYX0VOR0lORUlEX0xFTkdUSCB0byAzMiwgcGVyCisgICBTTk1QLUZSQU1FV09SSy1NSUIgU25tcEVuZ2luZUlEIFRDCisKKzIwMDktMDItMTggMTQ6NDEgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCwgICAKICAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYzoKIAotICAgRml4IHNjdHAtbWliIGNvbXBpbGF0aW9uIHByb2JsZW1zCi0KLTIwMDktMDItMTggMTU6MjcgIGpzYWZyYW5lawotCi0gICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oOgotCi0gICBCYWNrcG9ydCBnZXRfcGlkX2Zyb21faW5vZGUgZnJvbSB0cnVuaywgaXQncyBuZWVkZWQgYnkgc2N0cC1taWIKKyAgIENvbmZpZ3VyZSBzY3JpcHQgZG9lcyBub3QgbGlrZSBuZXQtc25tcC1jb25maWcuaCBiZWluZyBpbmNsdWRlZAorICAgZnJvbSBoZWFkZXIKKyAgIGZpbGVzLCB3aGljaCBhcmUgYWRkZWQgYnkgLS13aXRoLW1pYi1tb2R1bGVzPSwgbGV0J3MgcmVtb3ZlIGl0CisgICBmcm9tIHRoZXJlLgogCiAyMDA5LTAyLTE2IDIxOjI0ICBoYXJkYWtlcgogCkBAIC00Mzk4LDYgKzY1OTU3LDEwMSBAQAogICAgQ0hBTkdFUzogcGVybDogQlVHIDE1NTQ4MTc6IFBhdGNoIGZyb20geGFuY286IGZpeCB0aGUgY2xhc3MKICAgIGFzc2lnbWVudCBzbyBnZXRSb290T0lEIHdvcmtzIHByb3Blcmx5LgogCisyMDA5LTAyLTE1IDA3OjIwICBtYWdmcgorCisgICAqIGFjY29uZmlnLmg6CisKKyAgIENvcnJlY3QgY29weS9wYXN0ZSBtaXN0YWtlCisKKzIwMDktMDItMTIgMDA6MjUgIGhhcmRha2VyCisKKyAgICogIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgbWlicy9ORVQtU05NUC1UQy50eHQsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBBbiBlYXJseSBleHBlcmltZW50YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIERUTFMgb3ZlciBVRFAKKyAgIHRyYW5zcG9ydCBmcm9tIHRoZSBJRVRGIElTTVMgd29ya2luZyBncm91cAorCisyMDA5LTAyLTExIDIzOjMwICBoYXJkYWtlcgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIHVwZGF0ZWQgcmVsZWFzZSBpbnN0cnVjdGlvbnMKKworMjAwOS0wMi0wNiAyMTozNiAgbWFnZnIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgYXMgQysrIGFnYWluLgorCisyMDA5LTAyLTA1IDIyOjU2ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oOgorCisgICBDSEFOR0VTOiBidWlsZDogQXNzdW1lIHRoYXQgdGhlIHRhcmdldCBwbGF0Zm9ybSBzdXBwb3J0cyBtZW1jcHksCisgICBtZW1tb3ZlLCBtZW1zZXQsIHN0cmNociBhbmQgc3RycmNoci4KKworMjAwOS0wMi0wNCAwNjo1NyAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3NubXBfZGVidWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25wcmludGYuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IFJlbW92ZSBzdXBwb3J0IGZvciB1c2Ugb2YgdmFyYXJncy5oLiBOb3cgYXNzdW1lcyB0aGF0CisgICBzdGRhcmcuaCBpcyBhdmFpbGFibGUuCisKKzIwMDktMDItMDQgMDY6NDkgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdjMuYzoKKworICAgTkVXUzogc25tcGxpYjogSW50cm9kdWNlIHByaW50Zi1saWtlIHZlcnNpb25zIG9mIGNvbmZpZ19wZXJyb3IKKyAgIGFuZCBjb25maWdfcHdhcm4gKG5ldHNubXBfY29uZmlnX2Vycm9yIGFuZCBuZXRzbm1wX2NvbmZpZ193YXJuKS4KKyAgIFJlcGxhY2UgbWFueSBpbnN0YW5jZXMgb2YgeyB0bXBidWZbLi4uXTsgc3ByaW50Zih0bXBidWYsIC4uLik7CisgICBjb25maWdfcCoodG1wYnVmKTsgfSB3aXRoIG5ldHNubXBfY29uZmlnXyooLi4uKTsKKworMjAwOS0wMi0wMyAxNjoxNCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5Lmg6CisKKyAgIGFkZCB0aGUgcmVnaW5mbyBhbmQgYW5kIHNlc3Npb24gcG9pbnRlciB0byB0aGUgUkVHSVNURVJfT0lECisgICBjYWxsYmFjaworCisyMDA5LTAyLTAzIDAwOjE4ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGZpeGVkIC1sc3NsIGNoZWNrCisKIDIwMDktMDEtMjkgMDg6MzggIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtNDQwOSwxNCArNjYwNjMsMTQgQEAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CiAKICAgIEZpeCBzcmMvZHN0IGNvbmZ1c2lvbgotICAgUGF0Y2ggcHJvdmlkZWQgYnkgS3J6eXN6dG9mIE9sv2R6a2kKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEtyenlzenRvZiBPbOeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMtuWbmHpraQogCiAyMDA5LTAxLTI4IDA5OjI5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgogCiAgICBDSEFOR0VTOiBGaXggdHdvIGJ1Z3Mgd2l0aCBzbXV4IHBhc3N3b3JkIHN1cHBvcnQuCi0gICBQYXRjaCBzdXBwbGllZCBieSBLcnp5c3p0b2YgT2y/ZHpraQorICAgUGF0Y2ggc3VwcGxpZWQgYnkgS3J6eXN6dG9mIE9s54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy25ZuYemtpCiAKIDIwMDktMDEtMjMgMTQ6NTMgIGpzYWZyYW5lawogCkBAIC00NDI0LDYgKzY2MDc4LDUxIEBACiAKICAgIEZpeCBwYXJzaW5nIG9mIGxldmVsIHJhbmdlcyBpbiAnLUw8Y2FwaXRhbD4nLgogCisyMDA5LTAxLTIwIDE0OjUxICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgPHJwbS9ycG1maWxldXRpbC5oPiBiZWZvcmUgaW5jbHVkaW5nCisgICBpdC4KKworMjAwOS0wMS0xOSAyMDo1MCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgd2l0aG91dCBJUHY2IGFnYWluLgorCisyMDA5LTAxLTE5IDE1OjAxICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxOTI3NzUxOiBmcm9tIE1pdHN1cnUgQ2hpbmVuOiBpbXBsZW1lbnQKKyAgIGljbXBNc2dTdGF0c1RhYmxlIG9uIExpbnV4CisKKzIwMDktMDEtMTkgMDk6NDEgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaCwgICAKKyAgICAgIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyNDQ5MjEwOiBhZGQgNjQtYml0IGRpc2sgdXNhZ2Ugc3RhdGlzdGljcyB0bworICAgVUNELVNOTVAtTUlCOjpkc2tUYWJsZQorCisyMDA5LTAxLTE4IDA3OjQwICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIENIQU5HRVM6IEJVRzogMjE2ODE4MDogQ2hhbmdlZCAtLWRpc2FibGUtcmVlbnRyYW50IHRvIG5vdAorICAgYWN0aXZhdGUgdGhlIHJlZW50cmFudCBjb2RlIGFuZCBtYWRlIC0tZW5hYmxlLXJlZW50cmFudCBhY2NlcHQgbm8KKyAgIHZhbHVlcyBvdGhlciB0aGFuIHllcyBhbmQgbm8uIERpZCB0aGUgc2FtZSBmb3IKKyAgIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tzLCAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnLAorICAgLS13aXRoLWRlZmF1bHRzLCAtLWVuYWJsZS1kZXZlbG9wZXIgYW5kIC0tZW5hYmxlLXRlc3RpbmctY29kZSBhcworICAgd2VsbC4KKwogMjAwOS0wMS0xMyAwOToxNyAganNhZnJhbmVrCiAKICAgICogc25tcGxpYi9hc24xLmM6CkBAIC00NDM0LDYgKzY2MTMzLDYzIEBACiAgICBlYWNoIHN1YmlkZW50aWZpZXIuIFRoaXMgaXMgbm93IGNoZWNrZWQgYW5kIHBhcnNpbmcgb2YgT0lEIGZhaWxzLAogICAgaWYgdGhpcyBjb25kaXRpb24gaXMgbm90IG1ldC4KIAorMjAwOS0wMS0xMSAyMTo1NCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQ2hlY2sgdGhhdCB0aGUgdGVtcC1maWxlLXBhdHRlcm4gZW5kcyBpbiA2IFgncworICAgYXMgbWtzdGVtcCBhbmQgbWt0ZW1wIHJlcXVpcmUgdGhhdC4KKworMjAwOS0wMS0xMSAyMTozOCAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBCZSBhIGxvdCBtb3JlIHN0cmljdCBvbiB0aGUgdmFsdWVzIHRoYXQgYXJlCisgICBhY2NlcHRhYmxlIGZvciAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIChvbmx5IGFsbG93IHRocmVlIG9jdGFsCisgICBkaWdpdHMpCisKKzIwMDktMDEtMTEgMjA6NDIgIG1hZ2ZyCisKKyAgICogIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBtNC9uZXRzbm1wX2FyZy5tNDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIHByYWN0aWNlIG9mIGFkZGluZworICAgYSBtaXJyb3JpbmcgQUNfQVJHX1dJVEgvRU5BQkxFIHRvIGVhY2ggQUNfQVJHX0VOQUJMRS9XSVRILiBUaGlzCisgICBwYXRjaCBhZGRzIE5FVFNOTVBfQVJHX1dJVEgvRU5BQkxFIG1hY3JvcyB0aGF0IGF1dG9tYXRpY2FsbHkgYWRkcworICAgdGhlIG1pcnJvciB2YXJpYWJsZSBhbmQgdGhlbiBjb252ZXJ0cyB0aGUgY29uZmlndXJlIG1hY2hpbmVyeSB0bworICAgdXNlIHRoZW0uCisKKzIwMDktMDEtMTEgMjA6MzYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgTW92ZSBBQ19ERUZJTkVTIGluIGNvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlIHRvIGJlIGxvY2F0ZWQgbmV4dAorICAgdG8gdGhlIEFDX0FSR18uLi4gdGhleSBkZXBlbmQgb24uCisKKzIwMDktMDEtMTEgMjA6MzQgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIENoYW5nZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG51bWJlciBjaGVja2luZyB0byBiZSBlYXNpZXIgdG8gcmVhZAorCisyMDA5LTAxLTExIDE5OjE5ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIE1vdmUgdGhlIGxhc3QgQUNfQVJHXy4uLidzIHRvIGNvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLgorCisyMDA5LTAxLTExIDE5OjA4ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBDaGFuZ2UgdGhlIG1hY3JvIGZvciAtLXdpdGgtZmVhdHVyZXMtb2YgZnJvbQorICAgQUNfQVJHX0VOQUJMRSB0byBBQ19BUkdfV0lUSCBpbiBvcmRlciB0byBtYWtlIHRoZSBvcHRpb24gYmUKKyAgIC0td2l0aC1mZWF0dXJlcy1vZi4KKwogMjAwOS0wMS0wOCAxMDo0NSAganNhZnJhbmVrCiAKICAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKQEAgLTQ0NDgsMTIgKzY2MjA0LDIwOSBAQAogICAgaW4gc3RhYmxlCiAgICBicmFuY2hlcy4gV2Ugbm93IHN1cHBvcnQgYm90aCBvZiB0aGVtLgogCisyMDA5LTAxLTA4IDAzOjUxICBtYWdmcgorCisgICAqIE1ha2VmaWxlLnRvcDoKKworICAgRG8gbm90IGRlcGVuZCBvbiB0aGUgZXhpc3RhbmNlIG9mIC9iaW4vc2guIEFsc28gZm9sbG93IHRoZSBhZHZpY2UKKyAgIG9mIHRoZSBhdXRvY29uZiBtYW51YWwgYW5kIGZpbmFsbHkgYWxsb3cgZm9yIGxpYnRvb2wgdGhhdCBhZG9wdHMKKyAgIHRoZSBnZW5lcmF0ZWQgc2NyaXB0IGFmdGVyIHRoZSBjYXBhYmlsaXRpZXMgb2YgU0hFTEwuCisKKzIwMDktMDEtMDcgMTY6MDIgIGpzYWZyYW5laworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIFJlb3JkZXIgdGhlIG5ldGluZXQvaWNtcF92YXIuaCBhbmQgbmV0aW5ldC9pcF9pY21wLmgsIHRoZSBsYXRlcgorICAgb25lIG11c3QgYmUgY2hlY2tlZCBmaXJzdCBvbiBGcmVlQlNEIDcKKwogMjAwOS0wMS0wNiAyMjoyMyAgaGFyZGFrZXIKIAogICAgKiBDT1BZSU5HOgogCiAgICB1cGRhdGUgU1BBUlRBIGZvciAyMDA5CiAKKzIwMDktMDEtMDMgMjA6MjMgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBtNC9hY19wcm9tcHRfdXNlci5tNDoKKworICAgVXBncmFkZSB0aGUgQUNfUFJPTVBUX1VTRVIgbWFjcm9zIHRvIGF1dG9jb25mIDIuNjMgd2hlcmUKKyAgIEFDX0ZEX01TRyBpcyBkZXByZWNhdGVkIGFuZCBBU19NRVNTQUdFX0ZEIGlzIHJlY29tbWVuZGVkLgorCisyMDA5LTAxLTAzIDE0OjIwICBtYWdmcgorCisgICAqICBhY2luY2x1ZGUubTQsIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00LCAgIAorICAgICAgbTQvYWNfbXNnX2NhY2hlLm00LCBtNC9hY19tc2dfbW9kdWxlX2RiZy5tNCwgICAKKyAgICAgIG00L2FjX3Byb21wdF91c2VyLm00LCBtNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00OgorCisgICBTcGxpdCBhY2luY2x1ZGUubTQgaW50byBzbWFsbGVyIHBhcnRzIGJ5IGZ1bmN0aW9uLgorCisyMDA5LTAxLTAzIDE0OjE1ICBtYWdmcgorCisgICAqIE1ha2VmaWxlLmFtOgorCisgICBNYWtlIGF1dG9yZWNvbmYgd29yayBhZ2Fpbi4KKworMjAwOS0wMS0wMyAxNDoxMSAgbWFnZnIKKworICAgKiAgYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGluc3RhbGwtc2gsIGx0bWFpbi5zaCwgbTQsIAorICAgICAgICBtNC9saWJ0b29sLm00LCBtNC9sdG9wdGlvbnMubTQsIG00L2x0c3VnYXIubTQsIG00L2x0dmVyc2lvbi5tNCwgCisgICAgICAgIG00L2x0fm9ic29sZXRlLm00OgorCisgICBVcGRhdGUgdG8gbGlidG9vbC0yLjIuNAorCisyMDA5LTAxLTAzIDEzOjI4ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOiBDaGVjayBmb3IgYSBmdW5jdGlvbiwgbm90IGEgbWFjcm8uCisgICBjb25maWd1cmU6IFJlZ2VuZXJhdGUKKworMjAwOS0wMS0wMyAwMTowMyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgcmVxdWlyZSAtbHNzbDsgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIHRvIGRvICdpZiBuZWVkZWQnCisKKzIwMDktMDEtMDMgMDA6MTkgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9taWJJSS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCwgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFVuaWZ5IGFsbCBzbm1wZCBzdGF0aXN0aWMgdmFyaWFibGVzIGFuZCBtYWtlIHRoZQorICAgaGFuZGxlcnMgaW5zdGFuY2VzIG9mIGEgY29tbW9uIGhhbmRsZXIuCisKKzIwMDktMDEtMDEgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGNsZWFuIHVwIGEgZmV3IGNvbW1lbnRzIGFuZCByZW1vdmUgdW51c2VkIGZ1bmN0aW9uCisKKzIwMDktMDEtMDEgMTc6MjUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZpeCB2YXJpb3VzIG1pbm9yIG1lbW9yeSBsZWFrIGlzc3VlcworCisyMDA5LTAxLTAxIDE0OjI4ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaCwgbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjLCAKKyAgICAgICAgbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mLCBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYsIGxvY2FsL21pYjJjLmludF93YXRjaC5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMucm93LmNvbmYsIGxvY2FsL21pYjJjLnNjYWxhci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBORVdTOiBzbm1wbGliOiBDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG9pZCBhcmd1bWVudHMgZnJvbSBvaWQqIHRvCisgICBjb25zdCBvaWQqLiBVcGRhdGUgbWliMmMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGNoYW5nZS4KKworMjAwOS0wMS0wMSAxMzo1NiAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisKKyAgIENoZWNrIHJldHVybiB2YWx1ZXMgYW5kIGZyZWUgYWxsb2NhdGVkIHJlc291cmNlcyBvbiBlcnJvci4KKworMjAwOS0wMS0wMSAxMjo1NCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIERvIG5vdCBsZWFrIGFsaWFzX2xpc3Qgb24gcmV0dXJuIGZyb20gX25leHRfYWxpYXMuCisKKzIwMDktMDEtMDEgMTE6MjYgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBNYWtlIHZhcmlhYmxlIGNvbnN0IGFzIGl0IG5ldmVyIGlzIGNoYW5nZWQuCisKKzIwMDktMDEtMDEgMTE6MjUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmM6CisKKyAgIFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUuCisKKzIwMDgtMTItMzEgMjE6NDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbnMgaWYgd2UncmUgbm90IGxpbmtlZCB3aXRoIG9wZW5zc2wKKworMjAwOC0xMi0zMSAyMDo1NiAgaGFyZGFrZXIKKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC1jLmluYywgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QteHMuaW5jOgorCisgICBuZXdlciBwZXJsIGdlbmVyYXRlZCB1cGRhdGVzCisKKzIwMDgtMTItMzEgMTg6MDIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBhZGRlZCBhIGZldyBtb3JlIHJlY3Yvc2VuZCBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCisyMDA4LTEyLTMxIDE4OjAyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBBbGxvdyBxdW90ZWQgc2VjdXJpdHkgbmFtZXMgZm9yIG9uZXMgY29udGFpbmluZyBzcGFjZXMKKworMjAwOC0xMi0zMSAxODowMSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYW4gb3BlbnNzbCBpbml0aWFsaXphdGlvbiB3cmFwcGVyCisKKzIwMDgtMTItMzAgMDA6MDMgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdGVzdC5jLCBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBVc2Ugc25tcF9kdXBsaWNhdGVfb2JqaWQgaW5zdGVhZCBvZiB2YXJpb3VzIG1hbGxvYyttZW1jcHkKKyAgIHZhcmlhbnRzIGluIG9yZGVyIHRvIG1ha2UgY2xlYXJlciBjb2RlLgorCisyMDA4LTEyLTI5IDIzOjM0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvYXNuMS5jOgorCisgICBVc2UgZm9ybWF0IHN0cmluZ3MgZm9yIHByaW50Zi1saWtlIGZ1bmN0aW9ucy4KKyAgIFByZWZlciBzdHJjcHkgb3ZlciBzcHJpbnRmKGRlc3QsICIlcyIsIHNyYykKKyAgIFByZWZlciBERUJVR01TR1RMKChmb3JtYXQsIGFyZ3MpKSBvdmVyIHNwcmludGYobG9jYWwsIGZvcm1hdCwKKyAgIGFyZ3MpOyBERUJVR01TR1RMKCgiJXMiLCBsb2NhbCkpCisKKzIwMDgtMTItMTggMTc6MDQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgZXhwb3J0IG91dCBvZiB0aGUgZmlsZSBzb21lIGhlbHBmdWwgZ2VuZXJpYyB1ZHAgZnVuY3Rpb25zCisKKzIwMDgtMTItMTYgMDA6MTMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg6CisKKyAgIGNoYW5nZSBsb2NhbHNtIHNlY3VyaXR5IG1vZGVsIHRvIHRzbSAoYW5kIGFkZCAxKQorCiAyMDA4LTEyLTE1IDIzOjI1ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYzoKQEAgLTQ0NjEsMTIgKzY2NDE0LDYxIEBACiAgICBQYXRjaCB0byBjaGFuZ2UgYSB0eXBlZGVmIG5hbWUgZnJvbSBsaW5rIHRvIG5vZGVsaW5rIHRvIGF2b2lkCiAgICBuYW1pbmcgY29uZmxpY3QgaXNzdWVzLgogCi0yMDA4LTEyLTA5IDAxOjAxICBoYXJkYWtlcgorMjAwOC0xMi0wOSAwMTo0MSAgaGFyZGFrZXIKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGxvY2Fsc20uaCwgc25tcGxpYi9zbm1wbG9jYWxzbS5jOgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgogCi0gICBBcyBhZ3JlZWQgaW4gdGhlIGFkbWluIG1lZXRpbmcsIHJlbW92ZSB0aGUgb2xkZXIgc25tcGxvY2Fsc20KLSAgIHNlY3VyaXR5IG1vZGVsCisgICB1c2UgaW50MzJfdCBpbnN0ZWFkIG9mIGludF8zMiB3aGljaCBkb2Vzbid0IHdvcmsgYXQgYWxsIG9uIEYxMAorCisyMDA4LTEyLTA5IDAxOjA3ICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIHJlbW92ZSB0aGUgbm90ZSB0aGF0IHdlIG1vdmVkIHRvIHN2bi4uLiBvYnNvbGV0ZSBhdCB0aGlzIHBvaW50LAorICAgdG8gc2F5IHRoZSBsZWFzdAorCisyMDA4LTEyLTA5IDAxOjA1ICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIG1lbnRpb24gdGhlIFRTTSBpbXBsZW1lbnRhdGlvbgorCisyMDA4LTEyLTA5IDAwOjU4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBmbGFnIHNvbWUgc3RlcHMgYW5kIG1hbmRhdG9yeQorCisyMDA4LTEyLTA5IDAwOjU3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6CisKKyAgIHJlbW92ZSBhY2NpZGVudGlhbCBuZXcgZGVmaW5lcyB0aGF0IGFyZW4ndCBuZWVkZWQgeWV0CisKKzIwMDgtMTItMDkgMDA6NTYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wbG9jYWxzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgc25tcGxpYi9zbm1wbG9jYWxzbS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHJlbW92ZSBvbGRlciBsb2NhbHNtIHNlY3VyaXR5IG1vZGVsIGFuZCByZXBsYWNlIHdpdGggYSBuZXdlciBUU00KKyAgIGJhc2VkIG9uIHRoZSB1cGNvbWluZyBJRVRGIHNwZWMKKworMjAwOC0xMi0wOSAwMDo1MCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGZpeCBpc3N1ZSB3aXRoIGNvbnRleHQgcHJvYmluZworCisyMDA4LTEyLTA0IDEyOjMzICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jOgorCisgICBEYWVtb25pemUgYWZ0ZXIgdHJhbnNwb3J0cyBhcmUgY3JlYXRlZCBhbmQgbGlzdGVuaW5nIHNvY2tldHMgYXJlCisgICBib3VuZCB0byBhcHByb3ByaWF0ZSBwb3J0cy4gVGhpcyBhbGxvd3MgdG8gZXhpdCB3aXRoIG5vemVybyBleGl0CisgICBjb2RlIHdoZW4gdGhlIGJpbmRpbmcgZmFpbHMuCiAKIDIwMDgtMTItMDQgMTE6NDQgIGpzYWZyYW5lawogCkBAIC00NDc1LDYgKzY2NDc3LDQwIEBACiAKICAgIFByaW50IHBvcnRzIGFzIHVuc2lnbmVkIG51bWJlcnMuCiAKKzIwMDgtMTEtMjQgMTk6MDkgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6CisKKyAgIF9fRVhURU5TSU9OU19fIGlzIG5vdyBoYW5kbGVkIGJ5IGNvbmZpZ3VyZQorCisyMDA4LTExLTIyIDE4OjM2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQ6CisKKyAgIERvIG5vdCB0cnkgdG8gdXNlIHRoZSBtb2R1bGUgbGlzdCBhcyBhIGZpbGUgdGhhdCBzaG91bGQgYmUKKyAgIGluY2x1ZGVkIGluIHRoZSBidWlsZCwgdGh1cyBtYWtpbmcgaXQgcG9zc2libGUgdG8gYnVpbGQgb24KKyAgIFNvbGFyaXMuCisKKzIwMDgtMTEtMjAgMjI6MzAgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jLCAKKyAgICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgUmVwbGFjZSBtZW1kdXAoKHVfY2hhcioqKSZ4LCAodV9jaGFyKil5LCB6ICogc2l6ZW9mKG9pZCkpIHdpdGggeAorICAgPSBzbm1wX2R1cGxpY2F0CisgICBlX29iamlkKHksIHopIHNpbmNlIHRoZSBsYXRlciBpcyBlYXNpZXIgdG8gcmVhZCBhbmQgZXhwcmVzc2VzIHRoZQorICAgaW50ZW50aW9uIG9mIHQKKyAgIGhlIGNvZGUgY2xlYXJlci4KKworMjAwOC0xMS0yMCAyMjowMSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFVzZSBtZW1jcHkgaW5zdGVhZCBvZiBtZW1tb3ZlIHRvIGNvcHkgb2lkcyBhcyBpdCBpcyBrbm93biB0aGF0CisgICB0aGUgYXJlYXMgYXJlIG5vbm92ZXJsYXBwaW5nLgorCiAyMDA4LTExLTIwIDIwOjUxICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcFNURERvbWFpbi5jOgpAQCAtNDQ4OCw2ICs2NjUyNCwzNSBAQAogICAgQ0hBTkdFUzogRG8gbm90IHVzZSAlbSBpbiBwcmludGYtZm9ybWF0dGVkIHN0cmluZ3Mgc2luY2UgJW0gaW4KICAgIHByaW50ZiBpcyBhIGdsaWJjIGV4dGVuc2lvbi4KIAorMjAwOC0xMS0xNiAyMjowMSAgbWFnZnIKKworICAgKiBjb25maWd1cmUuYWM6CisKKyAgIEJ1bXAgdGhlIHJlcXVpcmVkIGF1dG9jb25mIHZlcnNpb24gdG8gMi42MyBhcyBwZXIgMTczMDEuCisKKzIwMDgtMTEtMTYgMjE6NTUgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBSZW1vdmUgYW4gdW51c2VkIGZ1bmN0aW9uIGZyb20gdGhlIGNvbmZpZ3VyZSB0ZXN0IGZvciBfX2Z1bmNfXy4KKworMjAwOC0xMS0xNiAyMTo1MSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE00IHVzZXMgZG5sLCBub3QgXCBmb3IgbGluZSBjb25jYXRlbmF0aW9uLgorICAgXCBpbnRyb2R1Y2VkIGEgc3B1cmlvdXMgZGVmaW5lIGluIG5ldC1zbm1wLWNvbmZpZy5oLmluLCB0aHVzIHRoaXMKKyAgIGNoYW5nZS4KKyAgIFJlcmFuIGF1dG9jb25mIGFuZCBhdXRvaGVhZGVyLgorCisyMDA4LTExLTEzIDIyOjE0ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlOgorCisgICBORVdTOiBidWlsZDogdXBkYXRlIHRvIGF1dG9jb25mIDIuNjMKKwogMjAwOC0xMS0xMyAwMDozMCAgdGFuZGVycwogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CkBAIC00NDk3LDExICs2NjU2MiwxNyBAQAogCiAyMDA4LTExLTEzIDAwOjI2ICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudDoKIAogICAgZml4IHR5cG8KIAotMjAwOC0xMS0xMyAwMDoyNCAgdGFuZGVycworMjAwOC0xMS0xMyAwMDoyNiAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50OgorCisgICBmaXggdHlwbworCisyMDA4LTExLTEzIDAwOjE5ICB0YW5kZXJzCiAKICAgICogZGlzdC9leHRyYWN0bmV3czoKIApAQCAtNDUyNywxMiArNjY1OTgsMTE3IEBACiAgICBORVdTOiBzbm1wZDogQXBwbHlpbmcgcGF0Y2ggZnJvbSBNYWdudXMgRnJvbXJlaWRlIHRvIGZpeCB0aGUKICAgIGdldGJ1bGsgaXNzdWUgcmVwb3J0ZWQgYnkgT3NjYXIgTWlyYS1TYW5jaGV6CiAKKzIwMDgtMTAtMzAgMjI6MzQgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKKworICAgcmVtb3ZlIHRoZSBvbGRlciAob2Jzb2xldGUpIG1ha2VyZWxlYXNlIHNjcmlwdAorCisyMDA4LTEwLTIyIDE3OjI0ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHRoZSBsaWIgdXNpbmcgYSBDKysgY29tcGlsZXIgb25jZSBtb3JlLgorCiAyMDA4LTEwLTIyIDA3OjI5ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKIAogICAgRG9uJ3QgY2xlYXIgc2Vzc2lvbiBmbGFncyB3aGVuIHRlc3Rpbmcgb25lIGJpdC4KIAorMjAwOC0xMC0yMSAyMToxMCAgbWFnZnIKKworICAgKiAgQUdFTlQudHh0LCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgsIGxvY2FsL21pYjJjLm9sZC1hcGkuY29uZiwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvRkFRLmh0bWw6CisKKyAgIE5FV1M6IG1pc2M6IFBBVENIOiAxNzM3NzI3OiBmcm9tIGpveWNlYW5tYWNoaW5lOiBBZGQgYQorICAgTkVUU05NUF9PTERBUElfIHByZWZpeCB0byB0aGUgYWNjZXNzIG1hY3JvcyB0aGF0IGFyZSB1c2VkIGluIHRoZQorICAgb2xkLWFwaSBoZWxwZXIuCisgICBJIGRpZCBhZGQgdGhlIHByZWZpeCB0byBhbGwgdXNlcnMgaW4gb3VyIGNvZGUuCisKKzIwMDgtMTAtMjEgMjE6MDAgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsIAorICAgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIE5FV1M6IG1pc2M6IFBBVENIOiAxNzM3NzI3OiBmcm9tIGpveWNlYW5tYWNoaW5lOiBSZXBsYWNlIGFsbCB1c2VzCisgICBvZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRSB3aXRoIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisKIDIwMDgtMTAtMTYgMDk6NTYgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCkBAIC00NTQyLDYgKzY2NzE4LDUxIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwODI3MjY6IGNvcnJlY3RseSByZXBvcnQgTklDIHNwZWVkcwogICAgaGlnaGVyIHRoYW4gNEdiaXQvcwogCisyMDA4LTEwLTE2IDA4OjAwICBqc2FmcmFuZWsKKworICAgKiBtYW46CisKKyAgIFNjcmF0Y2ggcHJldmlvdXMgY29tbWl0LCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xIHRvIGJlIGlnbm9yZWQuCisKKzIwMDgtMTAtMTYgMDc6MzcgIGpzYWZyYW5laworCisgICAqIG1hbjoKKworICAgQWRkIGNvbXBpbGVkIG5ldC1zbm1wLWNvbmZpZy4xIHRvIHN2bjppZ25vcmUgbGlzdAorCisyMDA4LTEwLTE1IDEyOjU3ICBqc2FmcmFuZWsKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSCAxNzk3MTExOiBpbXBsZW1lbnQgSVAtTUlCOjppcElmU3RhdHNUYWJsZQorCisyMDA4LTEwLTE1IDA5OjI3ICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBwb3J0YWJpbGl0eSBmaXg6IGF2b2lkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbWlkZGxlIG9mCisgICBjb2RlCisKIDIwMDgtMTAtMTQgMTg6NTUgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CkBAIC00NTcwLDYgKzY2NzkxLDIzIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE5Nzc0Mzk6IEZpeCBwYXNzL19wZXJzaXN0IGJ1ZyB3aXRoIFNFVAogICAgb2lkIHZhbHVlCiAKKzIwMDgtMTAtMTIgMTc6MjQgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFJlaW1wbGVtZW50YXRpb24gb2Ygc25tcE1QRFN0YXRzLgorCisyMDA4LTEwLTEwIDIxOjEzICBkdHMxMgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0OgorCisgICBDb25zb2xpZGF0ZSBjaGVja3Mgb24gZ2VuZXJhbCBPL1MgY2hhcmFjdGVyaXN0aWNzCisKIDIwMDgtMTAtMDcgMDg6NTAgIGpzYWZyYW5lawogCiAgICAqIGRpc3QvZmluZC1yZXF1aXJlczoKQEAgLTQ1NzcsMTggKzY2ODE1LDc4IEBACiAgICBDSEFOR0VTOiBidWlsZGluZzogQlVHOiAyMDk1OTgzOiBmaXggc3ludGF4IGVycm9yIGluCiAgICBmaW5kLXJlcXVpcmVzIGhlbHBlciBzY3JpcHQgYW5kIG1ha2UgaXQgZXhlY3V0YWJsZQogCisyMDA4LTEwLTA2IDE5OjMxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBpZmRlZiBzeXMvcG9sbAorCisyMDA4LTEwLTAzIDE0OjE2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOgorCisgICBwYXRjaCBmcm9tIFNoYWNoYXIgU2NoZW1lc2ggdG8gZml4IGEgcXVvdGUgZXNjYXBpbmcKKworMjAwOC0wOS0zMCAyMjoxOSAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jOgorCisgICBhZGRlZCBhIG5lZWRlZCB0cmFpbGluZyBuZXdsaW5lCisKIDIwMDgtMDktMzAgMjI6MTEgIGR0czEyCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54czoKIAogICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDIwMjI5NDg6IEZpeCBmb3IgQ291bnRlcjY0IGluIHBlcmwgc3ViYWdlbnQKIAorMjAwOC0wOS0zMCAyMTo0MCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIC0gTkVXUzogc25tcGxpYjogSW1wbGVtZW50ZWQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgcHJvYmluZy4KKyAgIFRoaXMgYWxsb3dzIGZvciBwcm9iaW5nIG9mIHRoZSBjb250ZXh0RW5naW5lSUQgd2l0aG91dCByZXF1aXJpbmcKKyAgIHRoZSBVU00gc2VjdXJpdHkgbW9kZWwuCisgICAtIGltcGxlbWVudGVkIGVudGlyZWx5IHdpdGhpbiB0aGUgbGlicmFyeSBmb3IgYm90aCBjbGllbnRzIGFuZAorICAgc2VydmVycy4KKworMjAwOC0wOS0zMCAyMTozMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaDoKKworICAgQWRkIGEgbG9jYWwgZGVmaW5pdGlvbiBmb3IgaGF2aW5nIHNlY3VyaXR5IG1vZGVscyBkZWZpbmUgdGhlaXIKKyAgIG93bgorICAgY29udGV4dEVuZ2luZUlEIHByb2JlCisKKzIwMDgtMDktMzAgMjE6MzEgIGhhcmRha2VyCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkIGEgZGVmaW5pdGlvbiBmb3IgdGhlIFNTSCBkb21haW4KKwogMjAwOC0wOS0zMCAyMTowOCAgZHRzMTIKIAogICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CiAKICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMTI1NzM0NzogTm9uLWZpeGVkIHNpemUgY29ubmVjdGlvbiBidWZmZXIKIAorMjAwOC0wOS0zMCAwNzozMiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIE5FV1M6IGJ1aWxkaW5nOiBQQVRDSDogMjA5MTE1NjogY29ycmVjdGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIGluCisgICBNYWtlZmlsZS4KKyAgICdtYWtlIC1qIDxOPicgc2hvdWxkIHdvcmsgbm93LgorCisyMDA4LTA5LTI0IDIwOjU4ICBkdHMxMgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6CisKKyAgIElkZW50aWZ5IHdoZXJlIHBhcnRpY3VsYXIgY2hlY2tzIGFyZSBhY3R1YWxseSB1c2VkCisgICAobGlicmFyeSwgYWdlbnQsIGFwcGxpY2F0aW9ucyBvciBub3QgYXQgYWxsKQorCiAyMDA4LTA5LTI0IDEyOjUzICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYywgICAKQEAgLTQ1OTcsNzcgKzY2ODk1LDEzMiBAQAogICAgVXNlIHRoZSBsb25nZXN0IGludGVnZXIgZm9yIGlub2RlIG51bWJlcnMgYW5kIChwb3NzaWJseSA2NCBiaXQpCiAgICBjb3VudGVycy4KIAotMjAwOC0wOS0wNSAwOToyNyAgZHRzMTIKKzIwMDgtMDktMjAgMDk6MDEgIG1hZ2ZyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMzoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yICkKKyAgIE5FV1M6IGJ1aWxkOiBEbyBub3QgcmVxdWlyZSB1c2Ugb2YgLS13aXRoLWVuZGlhbm5lc3Mgd2hlbgorICAgY3Jvc3MtY29tcGlsaW5nLgogCi0yMDA4LTA5LTA1IDA5OjI3ICBkdHMxMgorMjAwOC0wOS0xOSAxNToxOSAgZHRzMTIKIAotICAgKiBDSEFOR0VTOgorICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ29ycmVjdCBsb2NhdGlvbiBvZiBkb2N1bWVudGF0aW9uIGZpbGVzLgogCi0yMDA4LTA5LTA1IDA5OjI1ICBkdHMxMgorMjAwOC0wOS0xOSAwNToyOCAgbWFnZnIKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBBbmQgYWRkIHRoZSBjaHVuayB0aGF0IEkgbG9zdC4KIAotMjAwOC0wOS0wNSAwOToyMCAgZHRzMTIKKzIwMDgtMDktMTkgMDU6MjMgIG1hZ2ZyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIE1vdmUgbW9yZSB0aGluZ3MgZnJvbSBhY2NvbmZpZy5oIHRvIHRoZSB0ZW1wbGF0ZXMgaW4gdGhlCisgICBjb25maWd1cmUgaW5wdXQgZmlsZXMuCiAKLTIwMDgtMDktMDUgMDk6MTYgIGR0czEyCisyMDA4LTA5LTE3IDEzOjMxICBqc2FmcmFuZWsKIAotICAgKiBkb3h5Z2VuLmNvbmY6CisgICAqIGRpc3QvZmluZC1yZXF1aXJlczoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yICkKKyAgIG1ha2UgZmluZC1yZXF1aXJlcyBleGVjdXRhYmxlIHNvIGl0J3MgYWN0dWFsbHkgdXNhYmxlIGJ5IHRoZQorICAgbmV0LXNubXAuc3BlYwogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMDA4LTA5LTE3IDEyOjA4ICBqc2FmcmFuZWsKIAotQ2hhbmdlczogVjUuNC4xIC0+IFY1LjQuMgorICAgKiBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZjoKKworICAgYWRkIG1hbiBwYWdlIGZvciBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcgorCisyMDA4LTA5LTE2IDE4OjAyICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZ1cnRoZXIgbWluaW1pemF0aW9uIG9mIGFjY29uZmlnLmgKKworMjAwOC0wOS0xMSAyMjoyOCAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNb3ZlIGEgZmV3IG1vcmUgdmFyaWFibGVzIG91dCBvZiBhY2NvbmZpZy5oCisKKzIwMDgtMDktMTEgMjA6MzcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3Mzc0Mzk6IGZyb20gZW1peTogYXV0b21hdGljIGxpbmsgdXAvZG93bgorICAgdHJhcHMgb24gYSB3YWxrOyBzdGlsbCBuZWVkIGEgYmV0dGVyIGludGVyZmFjZSBmb3IgbWFudWFsbHkgZG9pbmcKKyAgIHRoaW5ncyBvbiBhbiBvY2Nhc2lvbmFsIGJhc2lzCisKKzIwMDgtMDktMTEgMjA6MjUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTkVXUzogc25tcGxpYjogUEFUQ0g6IDcwMDY4MTogbGltaXRlZCBzdXBwb3J0IGZvciBVRFB2NCBicm9hZGNhc3QKKyAgIGFkZHJlc3NlcworCisyMDA4LTA5LTEwIDA2OjM5ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBBQ19DSEVDS19UWVBFUyBpbnN0ZWFkIG9mIGEgaG9tZWdyb3duCisgICBhbHRlcm5hdGl2ZSB0byBjaGVjayBmb3IgdHlwZXMKKworMjAwOC0wOS0wOSAyMDoyNyAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQWRkIGFsbCB0aGUgcGFydHMgb2YgY29uZmlndXJlLmFjIHRvIHRoZSBkZXBlbmRlbmN5IGxpc3QKKworMjAwOC0wOS0wOSAxODoxMyAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgdXBkYXRlIHRvIHJlZmxlY3QgY29uZmlndXJlLmluIC0+IGNvbmZpZ3VyZS5hYyBjaGFuZ2UKKworMjAwOC0wOS0wOSAxNjoxNSAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBkZWZhdWx0IHRvIC1wMAorCisyMDA4LTA5LTA4IDIzOjQxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcGxvY2Fsc20uYzoKKworICAgY2hlY2sgZm9yIGEgc2Vzc2lvbiB0dW5uZWxlZCBmbGFnIGJlZm9yZSByZXR1cm5pbmcgYW4KKyAgIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUKKworMjAwOC0wOS0wOCAyMzozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFNldCB0aGUgdHVubmVsZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCBhIHR1bm5lbC1iYXNlZCB0cmFuc3BvcnQ7CisgICBkb24ndCByZXF1aXJlIGEgc2VjdXJpdHlFbmdpbmVJRCBpZiB0aGUgc2VjdXJpdHkgbW9kZWwgZG9lc24ndAorICAgaGF2ZSBvbmUgKGp1c3QgVVNNIG5lZWRzIGl0KQorCisyMDA4LTA5LTA4IDIwOjI0ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsIHNubXBsaWIvc25tcC10Yy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDIwOTk5ODU6IEFkZGVkIGNvbnN0IHF1YWxpZmllcnMgdG8gdGltZQorICAgY29udmVyc2lvbiByb3V0aW5zCiAKIDIwMDgtMDktMDUgMDc6NTEgIGR0czEyCiAKQEAgLTQ2ODAsNzYgKzY3MDMzLDc1IEBACiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKIAotICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDE4NjgyNzg6IFB5dGhvbiBzZWdmYXVsdCAoaW50cm9kdWNlZCBieSByMTY5NjIpCisgICBDSEFOR0VTOiBweXRob246IEJVRzogMTg2ODI3ODogUHl0aG9uIHNlZ2ZhdWx0IChpbnRyb2R1Y2VkIGJ5CisgICByMTY5NjIpCiAKLTIwMDgtMDgtMjkgMjE6MTkgIGR0czEyCisyMDA4LTA5LTAzIDEzOjQzICBkdHMxMgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzMgKQorICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAyMDAwODc0OiBDbGVhbnVwIHRyYW5zcG9ydCBzZWxlY3Rpb24uCiAKLTIwMDgtMDgtMjkgMjE6MTggIGR0czEyCisyMDA4LTA5LTAzIDEzOjI5ICBkdHMxMgogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgVGlkeSB1cCBwZXJsL3B5dGhvbiBhbmQgTy9TIGRhdGEgc3RydWN0dXJlIHRlc3RzLgogCi0yMDA4LTA4LTI5IDIxOjE1ICBkdHMxMgorMjAwOC0wOC0zMSAxODoxNCAgZHRzMTIKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFRpZHkgdXAgKG1vc3Qgb2YpIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgb2YgdGhlIGNvbmZpZ3VyZQorICAgZnJhbWV3b3JrLgorICAgVGhpcyBpcyBtb3N0bHkgcmUtaW5kZW50YXRpb24sIHJlLWNvbW1lbnRpbmcsIGFuZCBhIGNlcnRhaW4KKyAgIGFtb3VudAorICAgb2YganVkaWNpb3VzIHJlLW9yZGVyaW5nIG9mIHRoZSB0ZXN0cyB3aXRoaW4gaW5kaXZpZHVhbAorICAgc3ViLXNjcmlwdC4KIAotMjAwOC0wOC0yOSAyMTowOCAgZHRzMTIKKzIwMDgtMDgtMzEgMTc6MzAgIGR0czEyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgQW5ub3RhdGUgY29uZmlndXJlIHRlbXBsYXRlIHdpdGggc3VnZ2VzdGVkIGJlc3QgcHJhY3RpY2UKKyAgIHN0cnVjdHVyZS4KKyAgIE5vdGUgdGhhdCBub25lIG9mIHRoZXNlIGNoYW5nZXMgaGFzIGFsdGVyZWQgdGhlIGNvZGUgd2l0aGluCisgICAnY29uZmlndXJlJyBpdHNlbGYgKG90aGVyIHRoYW4gYWZmZWN0aW5nIGxpbmUgbnVtYmVycykKIAotMjAwOC0wOC0yOSAyMTowNCAgZHRzMTIKKzIwMDgtMDgtMzEgMTc6MjYgIGR0czEyCiAKLSAgICogZG94eWdlbi5jb25mOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGNvbmZpZ3VyZS5kLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgCisgICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAKKyAgICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzMgKQorICAgTkVXUzogYnVpbGQ6IHNwbGl0IGNvbmZpZ3VyZSB0ZW1wbGF0ZSBpbnRvIHNlcGFyYXRlIHBpZWNlcy4KKyAgIChNb3N0bHkpIHNlbGYtY29udGFpbmVkLCBhbmQgc2lnbmlmaWNhbnRseSBsZXNzIGNvbmZ1c2luZyEKIAorMjAwOC0wOC0zMSAxNzoyMyAgZHRzMTIKKworICAgKiBjb25maWd1cmUuYWMsIGNvbmZpZ3VyZS5pbjoKKworICAgUmVuYW1lIGNvbmZpZ3VyZSB0ZW1wbGF0ZSBpbiBsaW5lIHdpdGggY3VycmVudCBiZXN0IHByYWN0aWNlLgogCiAyMDA4LTA4LTI5IDE5OjU0ICBkdHMxMgogCkBAIC00NzU3LDEyICs2NzEwOSwyMCBAQAogCiAgICBSZXRhaW4gZmlsZW5hbWVzIHdoaWNoIGRvbid0IGluY2x1ZGUgdGhlIGV4cGVjdGVkIHByZWZpeC4KIAorMjAwOC0wOC0yNyAyMTo1NSAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzOgorCisgICBpZ25vcmUgLmxpYnMgZGlyZWN0b3JpZXMKKwogMjAwOC0wOC0yNyAxMzozOSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jOgogCiAgICBTLzM5MCB1c2VzIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgb2YgdGhlIC9wcm9jL2NwdWluZm8gZmlsZToKLSAgIHByb2Nlc3NvciAwOiB2ZXJzaW9uID0gRkYsIGlkZW50aWZpY2F0aW9uID0gMDYwQUZFLCBtYWNoaW5lID0gMjA5NAorICAgcHJvY2Vzc29yIDA6IHZlcnNpb24gPSBGRiwgaWRlbnRpZmljYXRpb24gPSAwNjBBRkUsIG1hY2hpbmUgPQorICAgMjA5NAogCiAyMDA4LTA4LTIyIDIzOjQ3ICB0YW5kZXJzCiAKQEAgLTQ3NzYsMTQgKzY3MTM2LDE4IEBACiAKICAgIE5FV1M6IGJ1aWxkOiBCVUc6IDIwMjM4MDM6IENvbXBpbGF0aW9uIHByb2JsZW1zIG9uIEhQLVVYIDExLjMxCiAgICBDSEFOR0VTOiBidWlsZDogTGltaXQgdGhlIHVzZSBvZiBfS0VSTkVMIGRlZmluaXRpb25zIGluIGNvbmZpZ3VyZQotICAgdGVzdHMgdG8gbWF0Y2ggdGhlIHVzZSBvZiBfS0VSTkVMIGluIG91ciBjb2RlYmFzZQorICAgdGVzdHMgdG8gbWF0Y2ggdGhlIHVzZQorICAgb2YgX0tFUk5FTCBpbiBvdXIgY29kZWJhc2UKIAogMjAwOC0wOC0yMiAwMDoxOCAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKIAotICAgRml4IGJ1aWxkIGZhaWx1cmUgb24gSFAtVVggMTEuMzE6IHVzZSBnZXRwYWdlc2l6ZSgpIGluc3RlYWQgb2YgUEdTSElGVC4KLSAgIFN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gSFAtVVggMTAuMjAsIDExLjAwLCAxMS4xMSwgMTEuMjMgYW5kIDExLjMxLgorICAgRml4IGJ1aWxkIGZhaWx1cmUgb24gSFAtVVggMTEuMzE6IHVzZSBnZXRwYWdlc2l6ZSgpIGluc3RlYWQgb2YKKyAgIFBHU0hJRlQuCisgICBTdWNjZXNzZnVsbHkgdGVzdGVkIG9uIEhQLVVYIDEwLjIwLCAxMS4wMCwgMTEuMTEsIDExLjIzIGFuZAorICAgMTEuMzEuCiAKIDIwMDgtMDgtMjEgMTA6MDMgIGpzYWZyYW5lawogCkBAIC00NzkxLDM1NDcgKzY3MTU1LDUzMjggQEAKIAogICAgYWRkIFNDVFAtTUlCCiAKKzIwMDgtMDgtMjAgMTc6MzcgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIEhhdmUgb25seSBvbmUgdmFyaWFibGUgbmFtZWQgcGFzc3dkIGluIHNtdXhfYXV0aF9wZWVyLgorCiAyMDA4LTA4LTE5IDIzOjIyICB0YW5kZXJzCiAKICAgICogUkVBRE1FLnRydTY0OgogCiAgICB1cGRhdGUgUkVBRE1FIGZvciBUcnU2NCBhZnRlciB0aGUgc2VuZHRvL3JlY3Zmcm9tIGZpeGVzCiAKLTIwMDgtMDgtMTkgMjA6MzYgIGR0czEyCisyMDA4LTA4LTE5IDIwOjI3ICB0YW5kZXJzCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmg6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzIgKQorICAgZml4IHNpZ25pZmljYW50IHR5cG8KIAotMjAwOC0wOC0xOSAyMDozNiAgZHRzMTIKKzIwMDgtMDgtMTkgMTM6MjUgIGR0czEyCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgRm9yY2UgdXNlIG9mIC9wcm9jLyVkL3BzaW5mbyBpbnRlcmZhY2Ugb24gU29sYXJpcy4KKyAgIFRlbXBvcmFyeSBoYWNrIHdoaWxlIHdlIGludmVzdGlnYXRlIHRoZSBpc3N1ZXMgd2l0aAorICAgdGhlIGt2bV9wcm9jKCkgY29kZS4KKyAgIAorICAgVGhlICdjb25maWdfcmVxdWlyZScgcHJvY2Vzc2luZyBkb2Vzbid0IGN1cnJlbnRseQorICAgcGljayB1cCB0aGUgZnVsbCAjaWZkZWYgZW52aXJvbm1lbnQsIHNvIGRlZmF1bHRzCisgICB0byB1c2luZyBrdm1fcHJvYygpLiBJJ20gbm90IGNvbnZpbmNlZCB0aGlzIHdhcworICAgd29ya2luZyBiZWZvcmUgYW55d2F5LAogCi0yMDA4LTA4LTE5IDIwOjI2ICBkdHMxMgorMjAwOC0wOC0xOSAxMzoxNyAgZHRzMTIKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgRml4IHByb2JsZW1zIGluIC9wcm9jLyVkL3BzaW5mbyBpbnRlcmZhY2UgcHJvY2Vzc2luZy4KIAotMjAwOC0wOC0xOSAyMDowOCAgZHRzMTIKKzIwMDgtMDgtMTkgMDg6NDcgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLCBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzOgogCi0gICBtYWtlIGRlcGVuZAorICAgSWdub3JlIGxpYnJhcnkgYW5kIG9iamVjdCBmaWxlcwogCi0yMDA4LTA4LTE5IDIwOjAzICBkdHMxMgorMjAwOC0wOC0xOSAwODozNiAgZHRzMTIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgQWN0aXZhdGUgc3RhdGlzdGljcyB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gU29sYXJpcyBhbmQvb3IgTGludXgKKyAgIElQdjYKIAotMjAwOC0wOC0xOSAxOTo1NSAgZHRzMTIKKzIwMDgtMDgtMTkgMDg6MTEgIGR0czEyCiAKLSAgICogZG94eWdlbi5jb25mOgorICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMiApCi0KKyAgIEltcHJvdmVkIHRyYWNpbmcgb2YgU01VWCBhdXRoZW50aWNhdGlvbiBwcm9ibGVtcy4KIAogMjAwOC0wOC0xOSAwODowOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jOgotICAgICBCZXR0ZXIgdHJhY2luZyBvZiBEaXNNYW4gb2JqZWN0IHByb2Nlc3NpbmcuCisKKyAgIEJldHRlciB0cmFjaW5nIG9mIERpc01hbiBvYmplY3QgcHJvY2Vzc2luZy4KIAogMjAwOC0wOC0xOCAyMjo0MyAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmg6Ci0gICAgIHJlbW92ZSBib2d1cyB3aGl0ZSBzcGFjZQogCi0yMDA4LTA4LTE4IDIyOjM4ICB0YW5kZXJzCi0KLSAgICogUkVBRE1FLmFnZW50LW1pYnM6Ci0gICAgIGRvY3VtZW50IFNDVFAtTUlCIGFkZGl0aW9uCisgICByZW1vdmUgYm9ndXMgd2hpdGUgc3BhY2UKIAogMjAwOC0wOC0xOCAyMjowMSAgZHRzMTIKIAogICAgKiBwZXJsL1NOTVAvU05NUC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDIwMjE0NDQ6IFN1cHBvcnQgU05NUHYyYyBpbiBnZXR0YWJsZSBwcm9jZXNzaW5nCisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyMDIxNDQ0OiBTdXBwb3J0IFNOTVB2MmMgaW4gZ2V0dGFibGUKKyAgIHByb2Nlc3NpbmcKIAogMjAwOC0wOC0xOCAyMTo0NCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBrc20uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDIwMDM0NTA6IEZpeCBhIGNvdXBsZSBvZiA2NC1iaXQgcHJvYmxlbXMuCiAKLTIwMDgtMDgtMTggMTk6MDUgIHRhbmRlcnMKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyMDAzNDUwOiBGaXggYSBjb3VwbGUgb2YgNjQtYml0CisgICBwcm9ibGVtcy4KIAotICAgKiBtaWJzL01ha2VmaWxlLmluOgotICAgICBmaXggU0NUUC1NSUIgaW5zdGFsbAorMjAwOC0wOC0xOCAxNDozMCAgaGFyZGFrZXIKIAotMjAwOC0wOC0xNyAyMToyOSAgZHRzMTIKKyAgICogYXBwcy9zbm1wdXNtLmM6CiAKLSAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIsIGFnZW50L21pYmdyb3VwL3NjdHAtbWliLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYywgbWlicy9NYWtlZmlsZS5pbiwKLSAgICAgbWlicy9NYWtlZmlsZS5taWIsIG1pYnMvU0NUUC1NSUIudHh0OgotICAgICBORVdTOiBzbm1wZDogUEFUQ0g6IDIwMjM2MzM6IGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXggb25seSkKKyAgIHJldmVydCAxNzE1NyBzaW5jZSBpdCBicm9rZSBzb21ldGhpbmcKKworMjAwOC0wOC0xOCAwNzowNiAganNhZnJhbmVrCisKKyAgICogUkVBRE1FLmFnZW50LW1pYnM6CisKKyAgIGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXggb25seSkKIAogMjAwOC0wOC0xNyAyMTowOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDIyOTM2OiBGaXggQWdlbnRYIENvdW50ZXI2NCBkZWNvZGluZyBvbgotICAgICA2NC1iaXQgYXJjaGl0ZWN0dXJlcworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMjI5MzY6IEZpeCBBZ2VudFggQ291bnRlcjY0IGRlY29kaW5nIG9uCisgICA2NC1iaXQgYXJjaGl0ZWN0dXJlcwogCiAyMDA4LTA4LTE3IDIwOjUwICBkdHMxMgogCiAgICAqIGFnZW50L3NubXBkLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAxNDIwNDogU3VwcG9ydCAtZyB7Z3JvdXBuYW1lfQorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMTQyMDQ6IFN1cHBvcnQgLWcge2dyb3VwbmFtZX0KKworMjAwOC0wOC0xNSAxMzo0NSAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgTkVXUzogc25tcHVzbTogUEFUQ0g6IDE1OTEzNTU6IGZyb20gcHBhc3NlcmE6IEFsbG93IGNsb25pbmcgdG8KKyAgIGVuZ2luZUlEcyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgYWdlbnQncyBlbmdpbmVJRAorCisyMDA4LTA4LTE0IDE1OjU0ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYzoKKworICAgU1dSdW4gcHJvY2Vzc2luZyBuZWVkcyBhY2Nlc3MgdG8gdGhlIGludGVybmFscyBvZiAnc3RydWN0IHVzZXInCisgICAoU29sYXJpcykKIAogMjAwOC0wOC0xMyAxMzowMiAganNhZnJhbmVrCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgotICAgICBDb3JyZWN0bHkgcGFyc2UgaW50ZXJmYWNlIGluZGV4ZXMgaGlnaGVyIHRoYW4gMHhmZi4KKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmM6CisKKyAgIENvcnJlY3RseSBwYXJzZSBpbnRlcmZhY2UgaW5kZXhlcyBoaWdoZXIgdGhhbiAweGZmLgogCiAyMDA4LTA4LTEyIDA4OjI3ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6Ci0gICAgIENsb3NlIGZpbGUgd2hlbiBwYXJzaW5nIG9mIC9wcm9jL1hYWC9zdGF0dXMgZmFpbHMuCisKKyAgIENsb3NlIGZpbGUgd2hlbiBwYXJzaW5nIG9mIC9wcm9jL1hYWC9zdGF0dXMgZmFpbHMuCisKKzIwMDgtMDgtMTIgMDc6MjcgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYiwgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYywgbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1pYnMvTWFrZWZpbGUubWliLCBtaWJzL1NDVFAtTUlCLnR4dDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyMDIzNjMzOiBhZGQgU0NUUC1NSUIgaW1wbGVtZW50YXRpb24gKExpbnV4CisgICBvbmx5KQorCisyMDA4LTA4LTA3IDEwOjAzICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIEZpeCBpbmV0TmV0VG9NZWRpYVRhYmxlIHRhYmxlIHByb2Nlc3NpbmcgLSBjb250aW51ZSB3aXRoIG5leHQKKyAgIGVudHJ5IHdoZW4gZmlsbHVwX2VudHJ5X2luZm8oKSBmYWlscy4KIAogMjAwOC0wOC0wNyAwOTowMCAganNhZnJhbmVrCiAKICAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6Ci0gICAgIEZpeCBkb2N1bWVudGF0aW9uIG9mIGV4ZWMgc3RhdGFtZW50IC0gaXQgZG9lcyBub3QgY2FjaGUgcmVzdWx0cyBhbnltb3JlLgotICAgICBSZWxhdGVkIHRvIGJ1ZyA4ODMxMzQKIAotMjAwOC0wNy0zMSAxNjo0OCAgZHRzMTIKKyAgIEZpeCBkb2N1bWVudGF0aW9uIG9mIGV4ZWMgc3RhdGFtZW50IC0gaXQgZG9lcyBub3QgY2FjaGUgcmVzdWx0cworICAgYW55bW9yZS4gUmVsYXRlZCB0byBidWcgODgzMTM0CiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMSApCisyMDA4LTA3LTMxIDIzOjM5ICBkdHMxMgogCi0yMDA4LTA3LTMxIDE2OjQ3ICBkdHMxMgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmM6CiAKLSAgICogQ0hBTkdFUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgIEZpeCBhIHR5cG8sIGFuZCBhIGJvZ3VzIGZpZWxkIG5hbWUgaW4gdGhlIEFJWCBwcm9jaW5mbyBzdHJ1Y3R1cmUuCiAKLTIwMDgtMDctMzEgMTY6MTQgIGR0czEyCisyMDA4LTA3LTMxIDIzOjM1ICBkdHMxMgogCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jOgogCi0yMDA4LTA3LTMxIDE2OjA1ICBkdHMxMgotCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAotCi0yMDA4LTA3LTMxIDE2OjAzICBkdHMxMgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIEluY2x1ZGUgbWlzc2luZyBoZWFkZXJzLCBhbmQgZml4IG9uZSBib2d1cyBmaWVsZCBuYW1lIGluIFNvbGFyaXMKKyAgIHByb2Mgc3RydWN0dXJlLgogCiAyMDA4LTA3LTMwIDE3OjQwICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgotICAgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyMDAzMTQ0OiBJbmNyZWFzZSBzaXplIG9mIEFnZW50WCBwYWNrZXQgYnVpbGQgYnVmZmVyCiAKLTIwMDgtMDctMzAgMTc6MjggIGR0czEyCi0KLSAgICogbmV0LXNubXAtY29uZmlnLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2ODEwMzU6IGZyb20gbWFnZnI6IGltcHJvdmUgbmV0LXNubXAtY29uZmlnIC9iaW4vc2ggY29tcGF0aWJpbGl0eQotICAgICBCYWNrLXBvcnQgb2YgU1ZOIHJldmlzaW9uIDE1OTYxCi0KLTIwMDgtMDctMzAgMDk6NTggIGR0czEyCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6Ci0gICAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDE1NTczNzI6IFJlYWxpZ24gaHJGU1N0b3JhZ2VJbmRleCB3aXRoIGhyU3RvcmFnZVRhYmxlCisgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyMDAzMTQ0OiBJbmNyZWFzZSBzaXplIG9mIEFnZW50WCBwYWNrZXQKKyAgIGJ1aWxkIGJ1ZmZlcgogCiAyMDA4LTA3LTMwIDA3OjU3ICBkdHMxMgogCiAgICAqIHNubXBsaWIvbWliLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMjAyNzgzNDogRXh0ZW5kIHN0cmluZyBwcmludCBidWZmZXIgYnkgdGhlIG1pbmltdW0gbmVjZXNzYXJ5LgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDIwMjc4MzQ6IEV4dGVuZCBzdHJpbmcgcHJpbnQgYnVmZmVyIGJ5IHRoZQorICAgbWluaW11bSBuZWNlc3NhcnkuCisKKzIwMDgtMDctMjkgMjM6MzQgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX25saXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYzoKKworICAgRml4IGFzc29ydGVkIHNpbGx5IHR5cG9zIC0gdW5iYWxhbmNlZCBwYXJlbnRoZXNlcworICAgYW5kIHRoZSB3cm9uZyB0eXBlIGVudW1lcmF0aW9uIHZhbHVlIG5hbWVzLgorCisyMDA4LTA3LTI5IDIzOjMxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYzoKKworICAgRW5zdXJlIHN3cnVuIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0aGUgcHJUYWJsZSBjYWxscywKKyAgIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gaHJTV1J1blRhYmxlIHRvIHRyaWdnZXIgdGhpcy4KIAogMjAwOC0wNy0yOSAxNjoxOSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKLSAgICAgYSkgRml4IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4ganVzdCBvbmUgcGxhY2UKLSAgICAgKG1ha2VzIGl0IGVhc2llciB0byBjaGFuZ2UgaWYgbmVjZXNzYXJ5KQotICAgICBiKSBGaXggdmFyaW91cyB1bmZvcnR1bmF0ZSBsaW5lLWJyZWFrcyAod2l0aGluICJwZHUtPmZsYWdzIikKKworICAgYSkgRml4IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4ganVzdCBvbmUgcGxhY2UKKyAgIChtYWtlcyBpdCBlYXNpZXIgdG8gY2hhbmdlIGlmIG5lY2Vzc2FyeSkKKyAgIGIpIEZpeCB2YXJpb3VzIHVuZm9ydHVuYXRlIGxpbmUtYnJlYWtzICh3aXRoaW4gInBkdS0+ZmxhZ3MiKQorCisyMDA4LTA3LTI5IDE2OjA1ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg6CisKKyAgIElmIHRoZSByZS13cml0dGVuIFNXUnVuIG1vZHVsZSBpZiBhdmFpbGFibGUsIHRoZW4gdXNlIGl0IGZvcgorICAgdGhlIFVDRC1zcGVjaWZpYyBwclRhYmxlIGFzIHdlbGwgYXMgdGhlIGhyU1dSdW5UYWJsZS4KKyAgIENvbnNpc3RlbmN5IGlzIGdvb2QuLi4uCisKKzIwMDgtMDctMjkgMTU6MjMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6CisKKyAgIFN1cHByZXNzIGp1bmsgaW4gaHJTV1J1bk5hbWUgJiBoclNXUnVuUGFyYW1ldGVycyB2YWx1ZXMKKworMjAwOC0wNy0yOSAxMDoyNyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jOgorCisgICBUaGUgY2FjaGUvY29udGFpbmVyIHJlbGF0ZSB0byB0aGUgZGF0YSBpdHNlbGYsIHNvIHNob3VsZAorICAgbW9yZSBuYXR1cmFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZGF0YV9hY2Nlc3MgbW9kdWxlLAorICAgcmF0aGVyIHRoYW4gYSBwYXJ0aWN1bGFyIE1JQiB0YWJsZSBtb2R1bGUuCisKKzIwMDgtMDctMjggMjE6MTggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOgorCisgICAndXNlZCcgYW5kICdmcmVlJyBhcmUgbm90IHRoZSBzYW1lIHRoaW5nLCBEYXZlLiBQYXkgYXR0ZW50aW9uIGF0CisgICB0aGUgYmFjay4uLi4KIAogMjAwOC0wNy0yOCAxNDozOSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKLSAgICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjAyMzgwMzogRW5zdXJlIGNvbXBpbGF0aW9uIGlzIG5vdCBkZXBlbmRlbnQKLSAgICAgb24gYW4gaXJyZWxldmFudCBjb25maWd1cmUgY2hhcmFjdGVyaXN0aWMgZm9yIEhQLVVYIDExCiAKLTIwMDgtMDctMjggMTE6NDEgIGR0czEyCi0KLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIE5FV1M6IGJ1aWxkaW5nOiBhZGQgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIGNvbmZpZ3VyZSBvcHRpb24KLSAgICAgQmFja3BvcnQgb2YgU1ZOIHJldmlzaW9uIDE3MTIxCisgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyMDIzODAzOiBFbnN1cmUgY29tcGlsYXRpb24gaXMgbm90IGRlcGVuZGVudAorICAgb24gYW4gaXJyZWxldmFudCBjb25maWd1cmUgY2hhcmFjdGVyaXN0aWMgZm9yIEhQLVVYIDExCiAKIDIwMDgtMDctMjggMTA6NTYgIGR0czEyCiAKICAgICogYXBwcy9zbm1wc2V0LmM6Ci0gICAgIENIQU5HRVM6IGFwcHM6IEJVRzogMTk2NDEzNjogRHJvcCBOVUxMIHR5cGUgZnJvbSBzbm1wc2V0IHVzYWdlIG1lc3NhZ2UuCisKKyAgIENIQU5HRVM6IGFwcHM6IEJVRzogMTk2NDEzNjogRHJvcCBOVUxMIHR5cGUgZnJvbSBzbm1wc2V0IHVzYWdlCisgICBtZXNzYWdlLgorCisyMDA4LTA3LTI1IDE0OjE5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaDoKKworICAgVXNlICctLWVuYWJsZS1uZXctZmVhdHVyZXMnIG1lY2hhbmlzbSB0byBpbmNsdWRlIGhyU1cqIHJlLXdyaXRlcworCisyMDA4LTA3LTI1IDE0OjEzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2N5Z3dpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYzoKKworICAgUHJlbGltaW5hcnkgT1Mtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIFJ1bm5pbmcgYW5kIEluc3RhbGxlZAorICAgU29mdHdhcmUgZGF0YSBhY2Nlc3MuCiAKIDIwMDgtMDctMjQgMjM6MjIgIHRhbmRlcnMKIAogICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKLSAgICAgQ0hBTkdFUzogZG9jdW1lbnRhdGlvbjogQlVHOiAyMDI3MTI5OiBmaXggdHlwbyBpbiBzbm1wY21kLjEKKworICAgQ0hBTkdFUzogZG9jdW1lbnRhdGlvbjogQlVHOiAyMDI3MTI5OiBmaXggdHlwbyBpbiBzbm1wY21kLjEKKworMjAwOC0wNy0yNCAxMDowMCAganNhZnJhbmVrCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZiwgc2Vkc2NyaXB0LmluOgorCisgICByZWZsZWN0IGRlZmF1bHQgdGVtcCBmaWxlIHBhdHRlcm4gaW4gbWFuIHBhZ2UgaWYgaXQncyBtb2RpZmllZCBieQorICAgLi9jb25maWd1cmUgc2NyaXB0CisKKzIwMDgtMDctMjQgMDg6MzYgIGpzYWZyYW5laworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBidWlsZGluZzogYWRkIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBjb25maWd1cmUgb3B0aW9uCiAKIDIwMDgtMDctMjQgMDY6NTMgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyMzgwMDogcmVsZWFzZSBhbmQgcmVsb2FkIGFsbCB0cmFwIGRlc3RpbmF0aW9ucyBvbiBTSUdIVVAKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODIzODAwOiByZWxlYXNlIGFuZCByZWxvYWQgYWxsIHRyYXAKKyAgIGRlc3RpbmF0aW9ucyBvbiBTSUdIVVAKKworMjAwOC0wNy0yMiAxNDozMyAganNhZnJhbmVrCisKKyAgICogbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW46CisKKyAgIGZpeCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciB0byBydW4gd2l0aG91dCBhcmd1bWVudHMKKworMjAwOC0wNy0yMiAxNDoyMSAganNhZnJhbmVrCisKKyAgICogIC4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgbmV0LXNubXAtY29uZmlnLmluLCAgIAorICAgICAgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW46CisKKyAgIE5FV1M6IG1pc2M6IHNlcGFyYXRlIHVzZXIgbWFuYWdlbWVudCBmcm9tIG5ldC1zbm1wLWNvbmZpZyBpbnRvCisgICBuZXcgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgc2NyaXB0CiAKIDIwMDgtMDctMjEgMTM6NDQgIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy9vbGRfYXBpLmM6Ci0gICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAxOTQ0NTgxOiBQcm90ZWN0IGFnYWluc3QgY29yZSBkdW1wcyB3aXRoIGxvbmcgc3RyaW5nIGluZGV4IHZhbHVlcy4KIAotMjAwOC0wNy0xNyAxNTowNyAgZHRzMTIKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAxOTQ0NTgxOiBQcm90ZWN0IGFnYWluc3QgY29yZSBkdW1wcyB3aXRoCisgICBsb25nIHN0cmluZyBpbmRleCB2YWx1ZXMuCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAorMjAwOC0wNy0xOCAxNToxOSAgaGFyZGFrZXIKIAotMjAwOC0wNy0xNyAxNDo0MiAgZHRzMTIKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CiAKLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucmMxICkKKyAgIG5ldyBzaWduaW5nIGtleQogCiAyMDA4LTA3LTE3IDEwOjA1ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDIwMTgwMzE6IERvbid0IHByb2JlIGVuZ2luZUlEIGluIGludGVybmFsIG1vbml0b3Igc2Vzc2lvbnMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDIwMTgwMzE6IERvbid0IHByb2JlIGVuZ2luZUlEIGluIGludGVybmFsCisgICBtb25pdG9yIHNlc3Npb25zLgorCisyMDA4LTA3LTEwIDE5OjMzICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBmaXggYSByZWdleHAgcXVvdGUKKworMjAwOC0wNy0xMCAxNDoxMiAgdGFuZGVycworCisgICAqIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgZ2V0YWRkcmluZm8gKGUuZy4gSFAtVVgKKyAgIDExLjAgYW5kIGVhcmxpZXIsIFNvbGFyaXMgNyBhbmQgZWFybGllcikKIAogMjAwOC0wNy0xMCAxMzo1MCAgYWxleF9iCiAKICAgICogd2luMzIvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBCVUc6IDIwMTQ1MjY6IFdpbjMyOiBzbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBub3QgaW5zdGFsbGVkCisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBCVUc6IDIwMTQ1MjY6IFdpbjMyOgorICAgc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggbm90IGluc3RhbGxlZAogCiAyMDA4LTA3LTA2IDE1OjA1ICBhbGV4X2IKIAotICAgKiBSRUFETUUud2luMzIsIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvYnVpbGQucGwsCi0gICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBidWxkaW5nOiBBZGQgc3VwcG9ydCBmb3Igd2luRXh0RExMIHRvIGJ1aWxkLmJhdCAod2luMzIpCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvYnVpbGQucGwsICAgCisgICAgICB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogYnVsZGluZzogQWRkIHN1cHBvcnQgZm9yIHdpbkV4dERMTCB0byBidWlsZC5iYXQgKHdpbjMyKQogCiAyMDA4LTA3LTA2IDEyOjM4ICBhbGV4X2IKIAogICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46Ci0gICAgIFdpbjMyIGJ1aWxkIGZpeGVzIC0gYWRkIG1pc3NpbmcgZnVuY3Rpb24gZm9yIERMTCBidWlsZC4KKworICAgV2luMzIgYnVpbGQgZml4ZXMgLSBhZGQgbWlzc2luZyBmdW5jdGlvbiBmb3IgRExMIGJ1aWxkLgogCiAyMDA4LTA3LTAyIDEyOjM5ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyMDA2Nzg2OiBJbnRlcmZhY2UgbmFtZSBjYW4gaGF2ZSBtb3JlIHRoYW4gOCBjaGFyYWN0ZXJzLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyMDA2Nzg2OiBJbnRlcmZhY2UgbmFtZSBjYW4gaGF2ZSBtb3JlIHRoYW4gOAorICAgY2hhcmFjdGVycy4KKworMjAwOC0wNi0yNSAxNzozOSAgdGFuZGVycworCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF90cmFwLmMsIGFwcHMvc25tcHRyYXAuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE5MTY4NDA6IG5ldyBjb25maWcgb3B0aW9uIHRvIHNldCBTTk1QdjEgdHJhcAorICAgYWdlbnQgYWRkcmVzcworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE5MTY4NDA6IGludHJvZHVjZQorICAgbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0CiAKIDIwMDgtMDYtMjUgMTU6MTYgIGpzYWZyYW5lawogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBmaXggYXNzZXJ0aW9uIHdoZW4gdXNlZCB3aXRoIHBlcmwgNS4xMAogCi0yMDA4LTA2LTI0IDIyOjM2ICB0YW5kZXJzCisgICBmaXggYXNzZXJ0aW9uIHdoZW4gdXNlZCB3aXRoIHBlcmwgNS4xMAogCi0gICAqIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0OgotICAgICBDSEFOR0VTOiBidWlsZGluZzogRGlzYWJsZSB0ZXN0cyBpZiB0aGUgYWdlbnQgaXMgYnVpbHQgd2l0aG91dCB0aGUgbWliIG1vZHVsZSB0aGV5IGRlcGVuZCBvbi4KLSAgICAgQmFja3BvcnQgb2YgcjE3MDg3LgorMjAwOC0wNi0yNCAwNTowMSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogQlVHOiAyMDAxMTI0OiBBbGxvdyBlbWJlZGRlZCBOVUwKKyAgIGNoYXJhY3RlcnMgaW4gdXNtVXNlclB1YmxpYworCisyMDA4LTA2LTIzIDE5OjU3ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgT25seSByZXNlcnZlIHNwYWNlIGZvciB0aGUgZXh0cmEgXDAgYWZ0ZXIgdGhlIGRhdGEgZm9yIE9DVEVUCisgICBTVFJJTkcgdmFsdWVkIGVudGl0aWVzCisKKzIwMDgtMDYtMjMgMTk6MTMgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEaXNhYmxlIHRlc3RzIGlmIHRoZSBhZ2VudCBpcyBidWlsdCB3aXRob3V0CisgICB0aGUgbWliIG1vZHVsZSB0aGV5IGRlcGVuZCBvbi4KKworMjAwOC0wNi0yMSAxMjoxNCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgUmVtb3ZlIHNwdXJpb3VzIEFDX01TR19SRVNVTFQgaW5zaWRlIGFuIEFDX0NBQ0hFX0NIRUNLCisKKzIwMDgtMDYtMTggMDU6MDcgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIEhhbmRsZSBzb2xhcmlzIGF3ayBhcyB3ZWxsLgorCisyMDA4LTA2LTE3IDE2OjAxICB0YW5kZXJzCisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE5OTU3NTM6IGZyb20gdm9sa292X3BldGVyOiBtaW5vciBjbGVhbnVwCisgICBhZ2VudC9hdXRvX25saXN0LmMKIAogMjAwOC0wNi0xNyAwODo1NyAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmM6Ci0gICAgIEZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNwcmludGYgZm9yIFRDUC9JUHY2Ci0gICAgIENyb3NzLXBvcnQgb2YgcmV2aXNpb24gMTY2NjgKKworICAgRml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gc3ByaW50ZiBmb3IgVENQL0lQdjYKKyAgIENyb3NzLXBvcnQgb2YgcmV2aXNpb24gMTY2NjgKIAogMjAwOC0wNi0xNiAyMzo1NSAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTk5NTE3MjogZml4IC0td2l0aG91dC1lbGYgY29uZmlndXJlIHVzYWdlIG1lc3NhZ2UKIAotMjAwOC0wNi0xNSAyMjoxNSAgZHRzMTIKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE5OTUxNzI6IGZpeCAtLXdpdGhvdXQtZWxmIGNvbmZpZ3VyZSB1c2FnZQorICAgbWVzc2FnZQogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5wcmUyICkKLQotMjAwOC0wNi0xNSAyMjoxNCAgZHRzMTIKLQotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA4LTA2LTE1IDIxOjU1ICBkdHMxMgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgVmVyc2lvbiB1cGRhdGUKLSAgICAgCi0gICAgIEFsc28gZml4IGFsbCBDaGFuZ2VMb2cgZW50cmllcyBzaW5jZSB0aGUgQ1ZTLT5TVk4gbW92ZSwKLSAgICAgd2hpY2ggaGF2ZSBiZWVuIG9taXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgZmlsZXMKLSAgICAgd2VyZSBhZmZlY3RlZCBieSBhbnkgZ2l2ZW4gY2hhbmdlLgotCi0yMDA4LTA2LTE1IDIxOjMyICBkdHMxMgotCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKLQotMjAwOC0wNi0xNSAyMTowNiAgZHRzMTIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5wcmUyICkKIDIwMDgtMDYtMTMgMjI6MTYgIGR0czEyCiAKICAgICogZGlzdC9maW5kLXJlcXVpcmVzLCBkaXN0L25ldC1zbm1wLnNwZWM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBJbXByb3ZlZCBSUE0gc3BlYyBmaWxlcywgZm9yIGJldHRlciBjb25zaXN0ZW5jeSB3aXRoIHZlbmRvci1wcm92aWRlZCBwYWNrYWdlcy4KLSAgICAgUHJvdmlkZWQgYnkgSmFuIFNhZnJhbmVrCiAKLTIwMDgtMDYtMTMgMjE6NTQgIGR0czEyCi0KLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIFJlc3RvcmUgZW1iZWRkZWQgcGVybCB0byBkZWZhdWx0IE1hYyBPUy9YIGJ1aWxkLgotICAgICAocmV2ZXJzaW5nIHJldmlzaW9uIDE2OTg4KQorICAgQ0hBTkdFUzogYnVpbGQ6IEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5CisgICB3aXRoIHZlbmRvci1wcm92aWRlZCBwYWNrYWdlcy4KKyAgIFByb3ZpZGVkIGJ5IEphbiBTYWZyYW5lawogCiAyMDA4LTA2LTEzIDIxOjAzICBkdHMxMgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE4OTk3NjI6IFR3ZWFrIGVtYmVkZGVkX3BlcmwgY29uZmlndXJlIGNoZWNrcy4KKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxODk5NzYyOiBUd2VhayBlbWJlZGRlZF9wZXJsIGNvbmZpZ3VyZQorICAgY2hlY2tzLgorCisyMDA4LTA2LTEzIDA1OjQzICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAKKyAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogYnVpbGRpbmc6IFJldGlyZSB0aGUgY29uZmlnX29sZC9uZXdfcmVxdWlyZSBmZWF0dXJlIGFuZAorICAgcmVwbGFjZSBpdCB3aXRoIGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUgdGhhdCBjb21wYXJlcyB2ZXJzaW9uCisgICBudW1iZXJzIHRvIGFjaGlldmUgYSBzaW1pbGFyIHRoaW5nCiAKIDIwMDgtMDYtMTIgMTI6NTAgIGR0czEyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZToKLSAgICAgT25seSBhZGQgbm9uLWRlZmF1bHQgTUlCIG1vZHVsZXMgdG8gdGhlIHRlc3QgYnVpbGRzLgotICAgICBTcGVjaWZ5aW5nIHRoZSBob3N0IG1vZHVsZSBpcyBub3QgbmVlZGVkIG9uIExpbnV4IHN5c3RlbXMsCi0gICAgIGFuZCBtYXkgYnJlYWsgb24gb3RoZXIgTy9Tcy4gU3BlY2lmeWluZyB0aGUgZGlzbWFuL2V2ZW50Ci0gICAgIE1JQiBpcyB1bm5lY2Vzc2FyeSBvbiBhbnkgc3lzdGVtLgogCi0yMDA4LTA2LTEyIDEyOjQ1ICBkdHMxMgotCi0gICAqIGRpc3QvbWFrZXJlbGVhc2U6Ci0gICAgIE1pc3NpbmcgTUQ1IHNpZ25hdHVyZSBmaWxlIGZvciB6aXAgcmVsZWFzZQotCi0yMDA4LTA2LTEyIDEyOjQ0ICBkdHMxMgotCi0gICAqIGRpc3QvbWFrZXJlbGVhc2U6Ci0gICAgIEJhc2ljIGRvY3VtZW50YXRpb24gYW5kIGhlbHAvdXNhZ2UgbWVzc2FnZXMuCisgICBPbmx5IGFkZCBub24tZGVmYXVsdCBNSUIgbW9kdWxlcyB0byB0aGUgdGVzdCBidWlsZHMuCisgICBTcGVjaWZ5aW5nIHRoZSBob3N0IG1vZHVsZSBpcyBub3QgbmVlZGVkIG9uIExpbnV4IHN5c3RlbXMsCisgICBhbmQgbWF5IGJyZWFrIG9uIG90aGVyIE8vU3MuIFNwZWNpZnlpbmcgdGhlIGRpc21hbi9ldmVudAorICAgTUlCIGlzIHVubmVjZXNzYXJ5IG9uIGFueSBzeXN0ZW0uCiAKIDIwMDgtMDYtMTEgMTA6MTYgIGR0czEyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZToKLSAgICAgT25seSBlbmFibGUgSVBYIHRyYW5zcG9ydCBvbiBMaW51eCBzeXN0ZW1zCisKKyAgIE9ubHkgZW5hYmxlIElQWCB0cmFuc3BvcnQgb24gTGludXggc3lzdGVtcwogCiAyMDA4LTA2LTEwIDE0OjM3ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKLSAgICAgc25tcGQ6IFBBVENIOiAxOTE4MzgzOiBGaXggRGlzTWFuIG1vbml0b3Jpbmcgb2YgQWdlbnRYIHN1YmFnZW50cwotICAgICBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHVzZSB0aGUgY29kZSBzdWJtaXR0ZWQgaW4gdGhhdAotICAgICBwYXRjaC4KLSAgICAgSW5zdGVhZCBpdCBpbnNlcnRzIGEgY2FsbGJhY2sgaG9vayBpbnRvIHRoZQotICAgICBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiCi0gICAgIHJvdXRpbmUgKHVzaW5nIHRoZSBteXZvaWQgcG9pbnRlciBhbmQgYSBuZXcgc2Vzc2lvbiBmbGFnKSwgd2hpY2gKLSAgICAgaGFzCi0gICAgIHRoZSBzYW1lIGVmZmVjdCB3aXRob3V0IG5lZWRpbmcgdG8gZHVwbGljYXRlIGFueSBjb2RlLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgc25tcGQ6IFBBVENIOiAxOTE4MzgzOiBGaXggRGlzTWFuIG1vbml0b3Jpbmcgb2YgQWdlbnRYIHN1YmFnZW50cworICAgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBhY3R1YWxseSB1c2UgdGhlIGNvZGUgc3VibWl0dGVkIGluIHRoYXQKKyAgIHBhdGNoLgorICAgSW5zdGVhZCBpdCBpbnNlcnRzIGEgY2FsbGJhY2sgaG9vayBpbnRvIHRoZQorICAgc25tcF9zeW5jaF9yZXNwb25zZV9jYgorICAgcm91dGluZSAodXNpbmcgdGhlIG15dm9pZCBwb2ludGVyIGFuZCBhIG5ldyBzZXNzaW9uIGZsYWcpLCB3aGljaAorICAgaGFzCisgICB0aGUgc2FtZSBlZmZlY3Qgd2l0aG91dCBuZWVkaW5nIHRvIGR1cGxpY2F0ZSBhbnkgY29kZS4KIAogMjAwOC0wNi0xMCAxMjo1MiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jOgotICAgICBGaXggbG9naWMgZXJyb3JzIGluIGhhbmRsaW5nIG9mIG9sZC9jdXJyZW50IHZhcmJpbmQgbGlzdHMuCi0gICAgIFJlcG9ydGVkIGJ5IEZyZWQgR2FvIGluIHBhdGNoICMxOTE4MzgzCiAKLTIwMDgtMDYtMTAgMTA6NTEgIGR0czEyCisgICBGaXggbG9naWMgZXJyb3JzIGluIGhhbmRsaW5nIG9mIG9sZC9jdXJyZW50IHZhcmJpbmQgbGlzdHMuCisgICBSZXBvcnRlZCBieSBGcmVkIEdhbyBpbiBwYXRjaCAjMTkxODM4MworCisyMDA4LTA2LTA5IDE5OjA4ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc2NhcGkuYzoKLSAgICAgdXBkYXRlIHRvIG1hdGNoIHB1Ymxpc2hlZCByZWxlYXNlCisKKyAgIHVwZGF0ZSB0byBtYXRjaCBwdWJsaXNoZWQgcmVsZWFzZQorCisyMDA4LTA2LTA5IDE2OjU4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBhZGRlZCBzbm1wX3ZlcnNpb24uYwogCiAyMDA4LTA2LTA5IDA5OjA1ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdXNtLmM6Ci0gICAgIEEgY291cGxlIG1vcmUgbWlzc2luZyBlcnJvciBjaGVja3MuCi0gICAgIEJhc2VkIG9uIHRob3NlIHJlcG9ydGVkIGJ5IEJveWEgU3VuCisKKyAgIEEgY291cGxlIG1vcmUgbWlzc2luZyBlcnJvciBjaGVja3MuCisgICBCYXNlZCBvbiB0aG9zZSByZXBvcnRlZCBieSBCb3lhIFN1bgogCiAyMDA4LTA2LTA2IDEyOjAyICBkdHMxMgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgcGVybCBvbiBNYWMgT1MvWAotICAgICAobmVhcmx5IHdvcmtpbmcgb24gTGVvcGFyZCBub3cpCiAKLTIwMDgtMDYtMDUgMjM6MDcgIHRhbmRlcnMKKyAgIEJldHRlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBwZXJsIG9uIE1hYyBPUy9YCisgICAobmVhcmx5IHdvcmtpbmcgb24gTGVvcGFyZCBub3cpCiAKLSAgICogZGlzdC9uZXQtc25tcC5zcGVjOgotICAgICBzeW5jIHdpdGggdHJ1bmsKKzIwMDgtMDYtMDMgMjM6MTQgIHRhbmRlcnMKIAotMjAwOC0wNi0wNSAyMToxMiAgdGFuZGVycworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zeXN0ZW0uYzoKIAotICAgKiBjb25maWd1cmU6Ci0gICAgIHJ1biBhdXRvY29uZgorICAgTkVXUzogYWl4OiBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueAogCi0yMDA4LTA2LTA1IDIxOjExICB0YW5kZXJzCi0KLSAgICogYWNjb25maWcuaCwgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsCi0gICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLAotICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLAotICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGNvbmZpZ3VyZS5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zeXN0ZW0uYzoKLSAgICAgTkVXUzogQUlYOiBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueC4KLSAgICAgU3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiB0cnVuayAocGFzc2VkIGV4dGVuc2l2ZSByZWdyZXNzaW9uCi0gICAgIHRlc3RpbmcpLgotCi0yMDA4LTA2LTA1IDIxOjA0ICB0YW5kZXJzCisyMDA4LTA2LTAzIDIyOjQ2ICB0YW5kZXJzCiAKICAgICogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBjb25maWd1cmUsIGx0bWFpbi5zaDoKLSAgICAgTkVXUzogYnVpbGQ6IFVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNiAoZnJvbSAxLjUuMjQpLCBlLmcuIHRvCi0gICAgIGJldHRlciBzdXBwb3J0IEFJWCA2LjEgYW5kIE1hYyBPUyBYIExlb3BhcmQuCi0gICAgIFN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gdHJ1bmsgKHBhc3NlZCBleHRlbnNpdmUgcmVncmVzc2lvbgotICAgICB0ZXN0aW5nKS4KIAotMjAwOC0wNi0wMyAwOTozNyAgZHRzMTIKKyAgIE5FV1M6IGJ1aWxkOiBVcGRhdGUgdG8gbGlidG9vbCAxLjUuMjYgKGZyb20gMS41LjI0KSwgZS5nLiB0bworICAgYmV0dGVyIHN1cHBvcnQgQUlYIDYuMSBhbmQgTWFjIE9TIFggTGVvcGFyZAogCi0gICAqIFJFQURNRS5vc1g6Ci0gICAgIERvY3VtZW50IHdoeSBlbWJlZGRlZCBwZXJsIHdhcyBkaXNhYmxlZC4KKzIwMDgtMDYtMDMgMjI6MzkgIHRhbmRlcnMKIAotMjAwOC0wNi0wMyAwODo1NyAgZHRzMTIKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgd2h5IGFkZCBsZWdhY3kgZGVmaW5pdGlvbnMgZm9yIG5ldyBzdHVmZj8KKworMjAwOC0wNi0wMyAwOTowMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6Ci0gICAgIEVuc3VyZSB0aGUgZGVmYXVsdCBpbnRlcm5hbCBxdWVyeSBzZXNzaW9uIGhhcyBhIHZhbGlkIGVuZ2luZUlELAotICAgICB0byBhdm9pZCBoYXZpbmcgdG8gcHJvYmUgZm9yIGl0IG9uIHRoZSBmaXJzdCB1c2UuCiAKLTIwMDgtMDYtMDIgMTU6MTggIGR0czEyCisgICBFbnN1cmUgdGhlIGRlZmF1bHQgaW50ZXJuYWwgcXVlcnkgc2Vzc2lvbiBoYXMgYSB2YWxpZCBlbmdpbmVJRCwKKyAgIHRvIGF2b2lkIGhhdmluZyB0byBwcm9iZSBmb3IgaXQgb24gdGhlIGZpcnN0IHVzZS4KIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgRHJvcCBlbWJlZGRlZCBwZXJsIGZyb20gdGhlIGRlZmF1bHQgYnVpbGQgb24gTWFjIE9TL1gKLSAgICAgVGggZHVhbC1hcmNoaXRlY3R1cmUgbmF0dXJlIG9mIHRoZSBkZWZhdWx0IHBlcmwgYmluYXJ5Ci0gICAgIGNvbmZ1c2VzIHRoZSBjb25maWd1cmUgc2NyaXB0IHN1ZmZpY2llbnRseSB0aGF0IHRoZQotICAgICBjb2RlIHdvbid0IGFjdHVhbGx5IGNvbXBpbGUuCisyMDA4LTA2LTAyIDIyOjE3ICBtYWdmcgogCi0yMDA4LTA2LTAyIDEzOjI3ICBkdHMxMgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgTkVXUzogc25tcGxpYjogQ29udmVydCBnZW5lcmljIHNvdXJjZSBhcmd1bWVudHMgZnJvbSBjb25zdAorICAgdV9jaGFyKiB0byBjb25zdCB2b2lkKiBmb3Igc25tcF9wZHVfYWRkX3ZhcmlhYmxlLAorICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSwgc25tcF9zZXRfdmFyX3ZhbHVlLAorICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlIGFuZCBtZW1kdXAuCisKKzIwMDgtMDYtMDIgMTM6MjggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYzoKLSAgICAgRW5zdXJlIHRoYXQgdGhlICJ0cmlnZ2VyIGFybWVkIiBmbGFnIGlzIGNsZWFyZWQgd2hlbmV2ZXIgdGhlCi0gICAgIG1hdGNoaW5nCi0gICAgIGV4cHJlc3Npb24gaXMgZm91bmQgdG8gaG9sZCAtIGV2ZW4gaWYgdGhlIHRyaWdnZXIgZG9lc24ndAotICAgICBhY3R1YWxseSBmaXJlLgotICAgICBUaGlzIGFmZmVjdHMgdGhlIGJlaGF2aW91ciBvZiBpbml0aWFsbHktdHJ1ZSBleHByZXNzaW9ucywgd2hlbgotICAgICB0aGlzCi0gICAgIGluaXRpYWwgZmlyaW5nIGlzIHN1cHByZXNzZWQgdXNpbmcgdGhlIG10ZVRyaWdnZXIqU3RhcnR1cCBvYmplY3QuCi0gICAgIFdpdGhvdXQgdGhpcyB0d2VhaywgdGhlIHRyaWdnZXIgd2lsbCBmaXJlIG9uIHRoZSBzZWNvbmQgc2FtcGxpbmcKLSAgICAgKGFzIGlmIHRoZSBleHByZXNzaW9uIGhhZCBldmFsdWF0ZWQgZmFsc2UgZmlyc3QgdGltZSByb3VuZCkuCisKKyAgIEVuc3VyZSB0aGF0IHRoZSAidHJpZ2dlciBhcm1lZCIgZmxhZyBpcyBjbGVhcmVkIHdoZW5ldmVyIHRoZQorICAgbWF0Y2hpbmcKKyAgIGV4cHJlc3Npb24gaXMgZm91bmQgdG8gaG9sZCAtIGV2ZW4gaWYgdGhlIHRyaWdnZXIgZG9lc24ndAorICAgYWN0dWFsbHkgZmlyZS4KKyAgIFRoaXMgYWZmZWN0cyB0aGUgYmVoYXZpb3VyIG9mIGluaXRpYWxseS10cnVlIGV4cHJlc3Npb25zLCB3aGVuCisgICB0aGlzCisgICBpbml0aWFsIGZpcmluZyBpcyBzdXBwcmVzc2VkIHVzaW5nIHRoZSBtdGVUcmlnZ2VyKlN0YXJ0dXAgb2JqZWN0LgorICAgV2l0aG91dCB0aGlzIHR3ZWFrLCB0aGUgdHJpZ2dlciB3aWxsIGZpcmUgb24gdGhlIHNlY29uZCBzYW1wbGluZworICAgKGFzIGlmIHRoZSBleHByZXNzaW9uIGhhZCBldmFsdWF0ZWQgZmFsc2UgZmlyc3QgdGltZSByb3VuZCkuCiAKIDIwMDgtMDYtMDEgMjA6MDIgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmg6Ci0gICAgIEhhbmRsZSB2YXJiaW5kIHBheWxvYWQgZm9yIGludGVybmFsIGxpbmtVcC9Eb3duIG5vdGlmaWNhdGlvbnMuCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oOgorCisgICBIYW5kbGUgdmFyYmluZCBwYXlsb2FkIGZvciBpbnRlcm5hbCBsaW5rVXAvRG93biBub3RpZmljYXRpb25zLgogCiAyMDA4LTA2LTAxIDA2OjQ1ICB0YW5kZXJzCiAKICAgICogcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgotICAgICBORVdTOiBzbm1wdHJhcGQ6IEJVRzogMTk1NTIyNzogTWVtb3J5IGxlYWsgZm9yIGVtYmVkZGVkIFBlcmwgb24KLSAgICAgeDg2XzY0CiAKLTIwMDgtMDUtMjkgMTY6MTEgIGR0czEyCisgICBORVdTOiBzbm1wdHJhcGQ6IEJVRzogMTk1NTIyNzogTWVtb3J5IGxlYWsgZm9yIGVtYmVkZGVkIFBlcmwgb24KKyAgIHg4Nl82NAogCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYzoKLSAgICAgU2lsbHkgdHlwbworMjAwOC0wNS0zMSAxMjowOCAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogVGhlIHNjYWxhciBoZWxwZXIgdGhhdCB3YXMgY2FsbGVkIGZyb20gdGhlCisgICBzY2FsYXJfZ3JvdXAgaGVscGVyIGRpZCBub3RoaW5nIHNhdmUgYWRkaW5nIGEgdHJhaWxpbmcgMCB0byB0aGUKKyAgIGFyZ3VtZW50LiBSZW1vdmUgdGhlIHVzZSBvZiB0aGUgc2NhbGFyIGhlbHBlciBmcm9tIHRoZQorICAgc2NhbGFyX2dyb3VwIGFuZCBhZGQgdGhlIHRyYWlsaW5nIDAgaW4gdGhlIHNjYWxhcl9ncm91cCBoZWxwZXIuCisKKzIwMDgtMDUtMzAgMTM6NTYgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgVHdlYWsgbGlzdCBvZiBvbi1saW5lIHNvZnR3YXJlIGRpcmVjdG9yaWVzIHRvIGJlIHVwZGF0ZWQuCiAKIDIwMDgtMDUtMjkgMDk6NTkgIGR0czEyCiAKLSAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLAotICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCBhcHBzL3NubXB0ZXN0LmMsCi0gICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHVzbS5jOgotICAgICBWYXJpb3VzIG1pc3NpbmcgZXJyb3IgY2hlY2tzLCBldGMuCi0gICAgIFJlcG9ydGVkIGJ5IEJveWEgU3VuLgorICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIGFwcHMvc25tcHRlc3QuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBWYXJpb3VzIG1pc3NpbmcgZXJyb3IgY2hlY2tzLCBldGMuCisgICBSZXBvcnRlZCBieSBCb3lhIFN1bi4KIAogMjAwOC0wNS0yOCAxMTo0OCAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmM6Ci0gICAgIFJlcG9ydCBjYWNoZWQgbWVtb3J5IHNpemUvdXNhZ2UgcHJvcGVybHkgKHBhcnRpY3VsYXJseSBvbgotICAgICBGcmVlQlNEKS4KKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmM6CisKKyAgIFJlcG9ydCBjYWNoZWQgbWVtb3J5IHNpemUvdXNhZ2UgcHJvcGVybHkgKHBhcnRpY3VsYXJseSBvbgorICAgRnJlZUJTRCkuCiAKIDIwMDgtMDUtMjggMTE6MjEgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmM6Ci0gICAgIEJyaW5nIG1lbUJ1ZmZlciBjb2RlIGludG8gbGluZSB3aXRoIHJldmlzaW9uIDE2OTc1LgorCisgICBCcmluZyBtZW1CdWZmZXIgY29kZSBpbnRvIGxpbmUgd2l0aCByZXZpc2lvbiAxNjk3NS4KIAogMjAwOC0wNS0yOCAxMToxMCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmM6Ci0gICAgIExpbnV4IDIuNiBrZXJuZWwgZG9lcyBub3QgcmVwb3J0IHNoYXJlZCBtZW1vcnkgaW5mb3JtYXRpb24uCisKKyAgIExpbnV4IDIuNiBrZXJuZWwgZG9lcyBub3QgcmVwb3J0IHNoYXJlZCBtZW1vcnkgaW5mb3JtYXRpb24uCiAKIDIwMDgtMDUtMjggMDk6MTggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxOTMxMzkxOiBGaXggcmVwb3J0aW5nIG9mIE1lbW9yeSBidWZmZXJzIGFuZAotICAgICBjYWNoZWQgbWVtb3J5LgotICAgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IGRvY29uZWlsbC4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTkzMTM5MTogRml4IHJlcG9ydGluZyBvZiBNZW1vcnkgYnVmZmVycyBhbmQKKyAgIGNhY2hlZCBtZW1vcnkuCisgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IGRvY29uZWlsbC4KKworMjAwOC0wNS0yOCAwODozMCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgVHdlYWsgdGhlIGZpeCBmb3IgYnVnICMxOTEyNjQ3CiAKIDIwMDgtMDUtMjggMDY6NTYgIG1hZ2ZyCiAKICAgICogYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEVuZm9yY2UgdGhlIGxvd2VyIGxpbWl0IG9uIHNjYWxhcl9ncm91cHMKLSAgICAgVGhpcyBmaXhlcyB0aGUgY2FzZSBvZiBnZXRuZXh0IGljbXAuMCByZXR1cm5pbmcgaWNtcC4wLjAgaW5zdGVhZAotICAgICBvZiB0aGUKLSAgICAgZXhwZWN0ZWQgaWNtcEluTXNncy4wCisKKyAgIENIQU5HRVM6IHNubXBkOiBFbmZvcmNlIHRoZSBsb3dlciBsaW1pdCBvbiBzY2FsYXJfZ3JvdXBzCisgICBUaGlzIGZpeGVzIHRoZSBjYXNlIG9mIGdldG5leHQgaWNtcC4wIHJldHVybmluZyBpY21wLjAuMCBpbnN0ZWFkCisgICBvZiB0aGUKKyAgIGV4cGVjdGVkIGljbXBJbk1zZ3MuMAogCiAyMDA4LTA1LTI3IDIyOjAzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE5MTI2NDc6IEZpeCBtZW1vcnkgbGVhayBmb2xsb3dpbmcgZmFpbGVkCi0gICAgIHJlcXVlc3RzLgotICAgICBGaXggcHJvdmlkZWQgYnkgQW50b24gUGFrCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE5MTI2NDc6IEZpeCBtZW1vcnkgbGVhayBmb2xsb3dpbmcgZmFpbGVkCisgICByZXF1ZXN0cy4KKyAgIEZpeCBwcm92aWRlZCBieSBBbnRvbiBQYWsKIAogMjAwOC0wNS0yNyAyMToyMiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTk1ODA0MTogRW5zdXJlIElEcyBhcmUgbm90IHRydW5jYXRlZC4KKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxOTU4MDQxOiBFbnN1cmUgSURzIGFyZSBub3QgdHJ1bmNhdGVkLgogCiAyMDA4LTA1LTI3IDE0OjE4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jOgotICAgICBNb25pdG9yIG1lbW9yeSBidWZmZXJzIG9uIEZyZWVCU0Qgc3lzdGVtcy4KLSAgICAgQVBJIHN1Z2dlc3RlZCBieSBDaHJpcworCisgICBNb25pdG9yIG1lbW9yeSBidWZmZXJzIG9uIEZyZWVCU0Qgc3lzdGVtcy4KKyAgIEFQSSBzdWdnZXN0ZWQgYnkgQ2hyaXMKIAogMjAwOC0wNS0yNyAxMjo0NyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgotICAgICBGaXggY2FyZWxlc3MgdHlwbyB3aGVuIGFwcGx5aW5nIE1heGltJ3MgcGF0Y2guCisKKyAgIEZpeCBjYXJlbGVzcyB0eXBvIHdoZW4gYXBwbHlpbmcgTWF4aW0ncyBwYXRjaC4KKworMjAwOC0wNS0yNSAyMTozNyAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUmVpbXBsZW1lbnRhdGlvbiBvZiB1c21TdGF0cy4KIAogMjAwOC0wNS0yNSAwNzoyNCAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmM6Ci0gICAgIFJlbW92ZSBhIGxvY2FsIHZhcmlhYmxlIG9ubHkgdXNlZCB0byB0cmFjayBhIGxvY2FsIHN0cmluZwotICAgICBjb25zdGFudCBhbmQgcmVwbGFjZSB0IHdpdGggYSBkaXJlY3QgcmVmZXJlbmNlIHRvIHRoZSBzdHJpbmcKLSAgICAgY29uc3RhbnQuCi0gICAgIE1hcmsgdHdvIGxvY2FsIGZ1bmN0aW9ucyBzdGF0aWMgYXMgd2VsbC4KKworICAgUmVtb3ZlIGEgbG9jYWwgdmFyaWFibGUgb25seSB1c2VkIHRvIHRyYWNrIGEgbG9jYWwgc3RyaW5nCisgICBjb25zdGFudCBhbmQgcmVwbGFjZSB0IHdpdGggYSBkaXJlY3QgcmVmZXJlbmNlIHRvIHRoZSBzdHJpbmcKKyAgIGNvbnN0YW50LgorICAgTWFyayB0d28gbG9jYWwgZnVuY3Rpb25zIHN0YXRpYyBhcyB3ZWxsLgogCiAyMDA4LTA1LTI1IDA3OjE3ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKLSAgICAgUmVvcmRlciB0byBhdm9pZCBvbmUgc3RybGVuIGNhbGwuCi0gICAgIEFkZCBtaXNzaW5nIGNhc3QuCisKKyAgIFJlb3JkZXIgdG8gYXZvaWQgb25lIHN0cmxlbiBjYWxsLgorICAgQWRkIG1pc3NpbmcgY2FzdC4KIAogMjAwOC0wNS0yNSAwNzoxNCAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jOgotICAgICBNYWtlIGlwZndfbmFtZSBhIHN0YXRpYyBhcnJheSBpbnN0ZWFkIG9mIGEgcG9pbnRlciBhcyBpdCBpcwotICAgICBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLgorCisgICBNYWtlIGlwZndfbmFtZSBhIHN0YXRpYyBhcnJheSBpbnN0ZWFkIG9mIGEgcG9pbnRlciBhcyBpdCBpcworICAgcHJpdmF0ZSB0byB0aGlzIG1vZHVsZS4KIAogMjAwOC0wNS0yNSAwNzowNSAgbWFnZnIKIAogICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6Ci0gICAgIFdoZW4gY2FzdGluZywgY2FzdCB0byB0aGUgcmlnaHQgdHlwZS4KKworICAgV2hlbiBjYXN0aW5nLCBjYXN0IHRvIHRoZSByaWdodCB0eXBlLgorCisyMDA4LTA1LTI1IDA2OjA4ICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLAorICAgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhcHBzL3NubXB0ZXN0LmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgUmVtb3ZlIHdhcm5pbmdzIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgb24gc29sYXJpcy4KIAogMjAwOC0wNS0yNCAyMDozMCAgZHRzMTIKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgotICAgICBDSEFOR0VTOiBweXRob246IEJVRzogMTgyNjE3NDogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuCi0gICAgIHByaW50aW5nIHZhbHVlcy4KLSAgICAgQWRkcmVzc2VzIENWRS0yMDA4LTIyOTIKKworICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDE4MjYxNzQ6IENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cgd2hlbgorICAgcHJpbnRpbmcgdmFsdWVzLgorICAgQWRkcmVzc2VzIENWRS0yMDA4LTIyOTIKKworMjAwOC0wNS0yNCAxMzoxMSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgT24gQUlYIG5ldGluZXQvaW5fcGNiLmggZGVwZW5kcyBvbiBuZXQvcm91dGUuaC4gQWRkIHRoZSBpbmNsdWRlCisgICBmb3IgY29uZmlndXJlLgorCisyMDA4LTA1LTI0IDA5OjA2ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1ha2UgdGhlIGNoZWNrcyBmb3IgbmV0aW5ldC9pbl9wY2IuaCBhbmQgc3lzL2Rpc2tsYWJlbC5oIHVzZSB0aGUKKyAgIG5vcm1hbAorICAgbWFjaGluZXJ5LgorICAgQWRkIGEgbmV0c25tcCBwcmVmaXggdG8gdGhlIGNhY2hlIHZhcmlhYmxlCisgICBjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIgdG8KKyAgIHBhY2lmeSBhY2xvY2FsLgogCiAyMDA4LTA1LTIzIDIwOjI3ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLAotICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IEZpeCBmb3IgQ1BVIHN0YXRzIG9uIEZyZWVCU0QKLSAgICAgUHJvdmlkZWQgYnkgTWF4aW0gU29ib2xldgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IEZpeCBmb3IgQ1BVIHN0YXRzIG9uIEZyZWVCU0QKKyAgIFByb3ZpZGVkIGJ5IE1heGltIFNvYm9sZXYKIAogMjAwOC0wNS0yMyAyMDoxMiAgZHRzMTIKIAogICAgKiBkaXN0L3NubXBkLWluaXQuZCwgZGlzdC9zbm1wdHJhcGQtaW5pdC5kOgotICAgICBDSEFOR0VTOiBpbnN0YWxsOiBQQVRDSDogMTk2OTYyNzogSGFuZGxlIGVtcHR5Ci0gICAgIC9ldGMvc3lzY29uZmlnL25ldHdvcmsgZmlsZQotICAgICBGaXggcHJvdmlkZWQgYnkgSm9zaCBXaWxtZXMKKworICAgQ0hBTkdFUzogaW5zdGFsbDogUEFUQ0g6IDE5Njk2Mjc6IEhhbmRsZSBlbXB0eQorICAgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlCisgICBGaXggcHJvdmlkZWQgYnkgSm9zaCBXaWxtZXMKIAogMjAwOC0wNS0yMyAyMDowNyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxOTY3MTk0OiBSZWNvZ25pc2UgTkZTNCBtb3VudHMKLSAgICAgU3VibWl0dGVkIGJ5IEZhYnJpY2UgQmFjY2hlbGxhCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTk2NzE5NDogUmVjb2duaXNlIE5GUzQgbW91bnRzCisgICBTdWJtaXR0ZWQgYnkgRmFicmljZSBCYWNjaGVsbGEKIAogMjAwOC0wNS0yMiAyMDo1NSAgZHRzMTIKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKLSAgICAgRG9uJ3QgY2hhbmdlIGxlbmd0aCBvZiBPSUQgYnVmZmVyIGlmIHBhcnNpbmcgdGhlIE9JRCBmYWlscy4KLSAgICAgUmVwb3J0ZWQgYnkgc2FpZnVsbGEgTW9oZCBBYmR1bC4KKworICAgRG9uJ3QgY2hhbmdlIGxlbmd0aCBvZiBPSUQgYnVmZmVyIGlmIHBhcnNpbmcgdGhlIE9JRCBmYWlscy4KKyAgIFJlcG9ydGVkIGJ5IHNhaWZ1bGxhIE1vaGQgQWJkdWwuCisKKzIwMDgtMDUtMjIgMTM6MzQgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHVwZGF0ZSB0aGUgYWR2ZXJ0aXNpbmcgc2VjdGlvbiBhbmQgY2hhbmdlIG5vdGUgYWJvdXQgaG93IHRvCisgICB1cGxvYWQgZmlsZXMgKGFkZGluZyBhbiBhdXRvbWF0dGVkIHJzeW5jIGNvbW1hbmQpCisKKzIwMDgtMDUtMjIgMDQ6MDggIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluY2x1ZGUuCisKKzIwMDgtMDUtMjEgMjA6MjcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCB0aGUgYWxpYXMgbW9kdWxlIHdpdGggYSBDKysgY29tcGlsZXIuCisKKzIwMDgtMDUtMjEgMTM6NDAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGFkZGVkIEZTRiBkaXJlY3RvcnkgaW5mbworCisyMDA4LTA1LTIxIDA5OjIxICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIEFkZCBGcmVlIFNvZnR3YXJlIERpcmVjdG9yeSB0byB0aGUgbGlzdCBvZiBwbGFjZXMgdG8gYmUgdXBkYXRlZC4KKworMjAwOC0wNS0yMCAyMzowMCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oLCBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCwgCisgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBUaGUgbWFqb3JpdHkgb2YgdGhlIGRlcGVuZGVuY2llcyBvbiB1dGlsX2Z1bmNzIGlzCisgICBmb3IgdGhlIGhlYWRlcl8qIGZ1bmN0aW9ucy4gRmFjdG9yIG91dCB0aGUgaGVhZGVyXyogZnVuY3Rpb25zIGFuZAorICAgYWRqdXN0IHRoZSByZXF1aXJlbWVudHMuCisKKzIwMDgtMDUtMjAgMjI6NDAgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oLCBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oLCBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgsIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaCwgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuaCwgYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBEbyBub3QgY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykgaWYgbm90aGluZyBmcm9tCisgICB1dGlsX2Z1bmNzIGlzIHVzZWQKIAogMjAwOC0wNS0xNCAxMzozNSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKLSAgICAgZml4IGJ1aWxkIGZhaWx1cmVzIHdpdGggZWFybGllciBMaW51eCBrZXJuZWxzIChlLmcuIHdpdGggUkg3LjEpCi0gICAgIGludHJvZHVjZWQgYnkgcjE2OTA5CiAKLTIwMDgtMDUtMDkgMTk6MDQgIGR0czEyCisgICBmaXggYnVpbGQgZmFpbHVyZXMgd2l0aCBlYXJsaWVyIExpbnV4IGtlcm5lbHMgKGUuZy4gd2l0aCBSSDcuMSkKKyAgIGludHJvZHVjZWQgYnkgcjE2OTA5CiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLAotICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLAotICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgcGVybC9hZ2VudC9hZ2VudC5wbSwKLSAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sCi0gICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzZWRzY3JpcHQuaW4sCi0gICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5wcmUxICkKKzIwMDgtMDUtMTMgMTg6NTYgIGhhcmRha2VyCiAKLTIwMDgtMDUtMDkgMTk6MDQgIGR0czEyCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgIGZpeCBjb21tZW50IHR5cG8KIAotMjAwOC0wNS0wOSAxODo0NyAgZHRzMTIKKzIwMDgtMDUtMTMgMTU6NDYgIGhhcmRha2VyCiAKLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgKiBORVdTOgogCi0yMDA4LTA1LTA5IDE1OjI0ICBkdHMxMgorICAgZG9jdW1lbnQgdGhlIC10IHN3aXRjaCBjaGFuZ2UKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCisyMDA4LTA1LTEzIDE1OjQ1ICBoYXJkYWtlcgogCi0yMDA4LTA1LTA5IDE1OjE0ICBkdHMxMgorICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKIAotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5wcmUxICkKKyAgIGRvY3VtZW50IHRoZSBhbGlhcyBrZXl3b3JkCiAKLTIwMDgtMDUtMDkgMTQ6NTEgIGR0czEyCisyMDA4LTA1LTEzIDE1OjQxICBoYXJkYWtlcgogCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgICogbWFuL3NubXBjbWQuMS5kZWYsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CiAKLTIwMDgtMDUtMDkgMTQ6NDcgIGR0czEyCisgICBhbGxvdyBmbG9hdGluZyBwb2ludCBudW1iZXJzIHRvIGJlIHVzZWQgZm9yIHRpbWVvdXQgdmFsdWVzCiAKLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIgKQorMjAwOC0wNS0xMiAyMToxMSAgaGFyZGFrZXIKIAotMjAwOC0wNS0wOSAxNDoyMyAgZHRzMTIKKyAgICogbWlicy9ORVQtU05NUC1UQy50eHQsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmM6CiAKLSAgICogTWFrZWZpbGUudG9wOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgQWRkZWQgYSByZWFsIHNubXBBbGlhc0RvbWFpbiBPSUQgZGVmaW5pdGlvbgogCi0yMDA4LTA1LTA5IDEzOjU4ICBkdHMxMgorMjAwOC0wNS0xMiAyMTowNyAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKLSAgICAgRGVidWdnaW5nIG1lc3NhZ2VzLgorICAgKiBORVdTOgorCisgICB1cGRhdGVkIE5FV1Mgd2l0aCBuZXcgYWxpYXMgYmx1cmIKKworMjAwOC0wNS0xMiAyMTowNyAgaGFyZGFrZXIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBtYW4vc25tcC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBORVdTOiBzbm1wbGliOiBBZGRlZCBhIGFsaWFzIHRyYW5zcG9ydCBmb3IgbWFwcGluZyBjb21wbGV4CisgICB0cmFuc3BvcnQgc3RyaW5ncyB0byBzaW1wbGUgbmFtZSBkZWZpbml0aW9ucworCisyMDA4LTA1LTEyIDE5OjM4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBzdHJpcCBvZmYgdHJhaWxpbmcgbW9kdWxlIG5hbWUKKworMjAwOC0wNS0xMiAwNjowMyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jOgorCisgICBNYWtlIG1pYklJL3NubXAgd29yayBhZ2Fpbi4KKworMjAwOC0wNS0xMCAyMTo0NyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCisKKzIwMDgtMDUtMTAgMDk6NTUgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2luZGV4LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIHNubXBsaWIvYXNuMS5jOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYjogUmVwbGFjZSB0aGUgaW52YWxpZCAlMDhwIGZvcm1hdAorICAgc3BlY2lmaWVyIHdpdGggdGhlIGNvcnJlY3QgJThwLgorCisyMDA4LTA1LTEwIDA5OjUxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcG5ldHN0YXQsIHNubXB0cmFwZCwgc25tcGRlbHRhOiBVc2UgTlVMTAorICAgaW5zdGVhZCBvZiAwIGZvciBOVUxMIHBvaW50ZXJzLiBVc2UgY2FzdGVkIDAncyBpbnN0ZWFkIG9mIDAgZm9yCisgICBOVUxMIGZ1bmN0aW9uIHBvaW50ZXJzLgorCisyMDA4LTA1LTEwIDA5OjQwICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCisyMDA4LTA1LTEwIDA5OjM5ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBpbmNsdWRlIGZpbGVzLgorCisyMDA4LTA1LTEwIDA5OjMzICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYywgICAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliLCBtaWIyYzogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBpbmxpbmUKKyAgIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSBjb21waWxlciBzZWVzIHRoZW0gYmVmb3JlIGl0IHNlZXMgdXNlcyBvZgorICAgdGhlbS4KKworMjAwOC0wNS0xMCAwOTozMCAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYjogUmVtb3ZlIHRoZSBpbmxpbmUgZGVjbGFyYXRpb25zIGZvcgorICAgZnVuY3Rpb25zIHRoYXQgbGFjayBhbiBpbmxpbmUgZGVmaW5pdGlvbi4KKworMjAwOC0wNS0wOSAyMTozNSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaW5kZXguYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCAgCisgICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsICAKKyAgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvbWQ1LmMsICAgCisgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAgCisgICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWI6IFVzZSBOVUxMIGluc3RlYWQgb2YgMCBmb3IgTlVMTCBwb2ludGVycy4KKyAgIFVzZSBjYXN0ZWQgMCdzIGluc3RlYWQgb2YgMCBmb3IgTlVMTCBmdW5jdGlvbiBwb2ludGVycy4KKworMjAwOC0wNS0wOSAyMToyNyAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAKKyAgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYjogZml4dXBzIGZvciBwcm90b3R5cGUgWyh2b2lkKSByZXBsYWNpbmcKKyAgICgpXS4KKworMjAwOC0wNS0wOSAyMToyMyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYzoKKworICAgUmVtb3ZlIGRlYWQgY29kZS4KKworMjAwOC0wNS0wOSAxOToxNiAgZHRzMTIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlOgorCisgICBNaXNzaW5nIE1ENSBzaWduYXR1cmUgZmlsZSBmb3IgemlwIHJlbGVhc2UKKworMjAwOC0wNS0wOSAxOToxNSAgZHRzMTIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlOgorCisgICBCYXNpYyBkb2N1bWVudGF0aW9uIGFuZCBoZWxwL3VzYWdlIG1lc3NhZ2VzLgogCiAyMDA4LTA1LTA4IDE0OjAwICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKLSAgICAgRHJvcCBzdXBwb3J0IGZvciB0aGUgaW50ZXJpbSBTSU9DREVWUFJJVkFURS1iYXNlZCBpb2N0bCBjYWxscy4KLSAgICAgU0lPQ0dNSUlQSFkvU0lPQ0dNSUlSRUcgaGF2ZSBiZWVuIGRlZmluZWQgc2luY2UgYXQgbGVhc3QgU2VwdAotICAgICAyMDAxIChrZXJuZWwgMi40LjEwKSwKLSAgICAgc28gdGhlIHJpc2sgb2YgY2FsbGluZyBhbiBpbmFwcHJvcHJpYXRlIHByaXZhdGUgaW9jdGwgaXMgcHJvYmFibHkKLSAgICAgZ3JlYXRlciB0aGFuCi0gICAgIHRoYXQgb2YgbWlzc2luZyBpbmZvcm1hdGlvbiBmcm9tIGFuIGFuY2llbnQgc3lzdGVtLgorCisgICBEcm9wIHN1cHBvcnQgZm9yIHRoZSBpbnRlcmltIFNJT0NERVZQUklWQVRFLWJhc2VkIGlvY3RsIGNhbGxzLgorICAgU0lPQ0dNSUlQSFkvU0lPQ0dNSUlSRUcgaGF2ZSBiZWVuIGRlZmluZWQgc2luY2UgYXQgbGVhc3QgU2VwdAorICAgMjAwMSAoa2VybmVsIDIuNC4xMCksCisgICBzbyB0aGUgcmlzayBvZiBjYWxsaW5nIGFuIGluYXBwcm9wcmlhdGUgcHJpdmF0ZSBpb2N0bCBpcyBwcm9iYWJseQorICAgZ3JlYXRlciB0aGFuCisgICB0aGF0IG9mIG1pc3NpbmcgaW5mb3JtYXRpb24gZnJvbSBhbiBhbmNpZW50IHN5c3RlbS4KIAogMjAwOC0wNS0wOCAwOTowMiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIERvbid0IHRyeSB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbm9ueW1vdXMgdXNlcnMuCi0gICAgIChBbiBpbnZhbGlkIHRyYXBzZXNzIGRpcmVjdGl2ZSBtYXkgY3Jhc2ggdGhlIGFnZW50KQorCisgICBEb24ndCB0cnkgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgYW5vbnltb3VzIHVzZXJzLgorICAgKEFuIGludmFsaWQgdHJhcHNlc3MgZGlyZWN0aXZlIG1heSBjcmFzaCB0aGUgYWdlbnQpCisKKzIwMDgtMDUtMDYgMDg6MzggIGpzYWZyYW5laworCisgICAqIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgLSByZW1vdmUgJXtsaWJjdXJyZW50fQorICAgLSBhZGQgb3BlbnNzbC1kZXZlbCB0byBidWlsZCByZXF1aXJlbWVudHMKKyAgIC0gZG9uJ3QgdXNlIFByb3ZpZGVzOiB1bmxlc3MgbmVjZXNzYXJ5LCBsZXQgcnBtYnVpbGQgY29tcHV0ZSB0aGUKKyAgIHByb3ZpZGVkIGxpYnJhcmllcworICAgLSBkb24ndCBzcGVjaWZ5IFBSRUZJWCBmb3IgcGVybAorCisyMDA4LTA1LTA2IDA4OjM4ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIHJldmVydGluZyBhY2NpZGVudGFseSBjb21taXRlZCBmaWxlcworCisyMDA4LTA1LTA2IDA4OjM0ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIC0gcmVtb3ZlICV7bGliY3VycmVudH0KKyAgIC0gYWRkIG9wZW5zc2wtZGV2ZWwgdG8gYnVpbGQgcmVxdWlyZW1lbnRzCisgICAtIGRvbid0IHVzZSBQcm92aWRlczogdW5sZXNzIG5lY2Vzc2FyeSwgbGV0IHJwbWJ1aWxkIGNvbXB1dGUgdGhlCisgICBwcm92aWRlZCBsaWJyYXJpZXMKKyAgIC0gZG9uJ3Qgc3BlY2lmeSBQUkVGSVggZm9yIHBlcmwKKworMjAwOC0wNS0wNSAyMTo0MyAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgTWVjaGFuaXNtIHRvIHNlbGVjdCB1cGNvbWluZyBtb2R1bGUgcmUtd3JpdGVzIGFuZC9vcgorICAgcmVjZW50bHktZGVwcmVjYXRlZCBtb2R1bGVzLgogCiAyMDA4LTA1LTAyIDEwOjE5ICBkdHMxMgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKLSAgICAgSGFuZGxlIHVkcFRhYmxlIGluZGV4aW5nIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZS4KKworICAgSGFuZGxlIHVkcFRhYmxlIGluZGV4aW5nIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZS4KKworMjAwOC0wNC0zMCAxOTo0NSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVtb3ZlIHRoZSBzdXBwb3J0IGZvciBnZW5lcmF0aW9uIG9mIHN0YXRpc3RpY3MKKyAgIG9mIGhvdyBvZnRlbiBhIGNlcnRhaW4gZGVidWcgbG9nIGxldmVsIGlzIHRyaWdnZXJlZC4KKworMjAwOC0wNC0zMCAxOTo0MSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgTkVXUzogc25tcGxpYjogUmVtb3ZlIHRoZSB2YXJpYWJsZSBkZWJ1Z19udW1fZXhjbHVkZWQuCisgICBUaGVyZSBpcyBub3RoaW5nIHRoYXQgc2V0cyBkZWJ1Z19udW1fZXhjbHVkZWQgYW5kIHRoZXJlIGlzIG5vIHdheQorICAgdG8gZm9yIGl0CisgICB0byBhZmZlY3QgdGhlIHJlc3VsdCBvZiBhbnkgZnVuY3Rpb24uCiAKIDIwMDgtMDQtMzAgMDU6MjggIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6Ci0gICAgIFJlbW92ZSB1bm5jZXNzYXJ5IHByb3RvdHlwZXMKKworICAgUmVtb3ZlIHVubmNlc3NhcnkgcHJvdG90eXBlcworCisyMDA4LTA0LTIzIDE2OjM5ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBhY3R1YWxseSB1c2UgdGhlIGJyYW5jaCBwYXRoLCBkb24ndCBqdXN0IHNheSB5b3UncmUgZ29pbmcgdG8KIAogMjAwOC0wNC0xOSAyMjoyMCAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgotICAgICBkb24ndCBkZXBlbmQgb24gT0lEIHJlc29sdXRpb24gZm9yIGRpc21hbiBsaW5rVXBEb3duTm90aWZpY2F0aW9ucworCisgICBkb24ndCBkZXBlbmQgb24gT0lEIHJlc29sdXRpb24gZm9yIGRpc21hbiBsaW5rVXBEb3duTm90aWZpY2F0aW9ucworCisyMDA4LTA0LTA4IDIwOjQzICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oOgorCisgICBBY2NlcHQgdGhhdCBwZW9wbGUgd2lsbCB0cnkgdG8gY29tcGlsZSB0aGlzIGNvZGUgd2l0aCBwcmUtQU5TSQorICAgY29tcGlsZXJzIGFuZCBjaGFuZ2UgaXQgdG8gaGFuZGxlIHRoYXQgY2FzZS4KIAogMjAwOC0wNC0wOCAyMDozOCAgaGFyZGFrZXIKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhbiBleHRyYSBicmFjZSBpbiB0aGUgZG9jcyBwb2ludGVkIG91dCBieQotICAgICBKYXNvbiBNYXJ0aW4KKworICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYW4gZXh0cmEgYnJhY2UgaW4gdGhlIGRvY3MgcG9pbnRlZCBvdXQgYnkKKyAgIEphc29uIE1hcnRpbgorCisyMDA4LTA0LTA4IDIwOjM0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICB1cGRhdGUgYW5kIHJlc3RydWN0dXJlIGEgYml0IHRvIGZpeCBhIGZldyBwcm9ibGVtcworCisyMDA4LTA0LTA3IDIwOjA2ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvbnVsbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQXMgdGhlIG51bGwgaGFuZGxlciBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZgorICAgaGFuZGxpbmcgR0VUX0JVTEsgcmVxdWVzdHMgaXQgaXMgbm93IG1hcmtlZCBhcyBzdWNoIGluIHRoZQorICAgcmVnaXN0cmF0aW9uLgogCiAyMDA4LTA0LTA3IDE0OjAwICBkdHMxMgogCiAgICAqIHNubXBsaWIvcGFyc2UuYzoKLSAgICAgQW5vdGhlciBvdmVyLXNob3J0IERFU0NSSVBUSU9OIGJ1ZmZlci4KKworICAgQW5vdGhlciBvdmVyLXNob3J0IERFU0NSSVBUSU9OIGJ1ZmZlci4KIAogMjAwOC0wNC0wNyAxMzo1NyAgZHRzMTIKIAogICAgKiBzbm1wbGliL3BhcnNlLmM6Ci0gICAgIEhhbmRsZSBsb25nZXIgREVTQ1JJUFRJT04vUkVGRVJFTkNFIHN0cmluZ3MgaW4gQ2FwYWJpbGl0aWVzCi0gICAgIHN0YXRlbWVudHMuCi0gICAgIChDb25zaXN0ZW50IHByb2Nlc3Npbmcgd2l0aCBvdGhlciBNSUIgZGVmaW5pdGlvbiBtYWNyb3MpLgotICAgICBGaXggcHJvdmlkZWQgYnkgQWxla3NhbmRyIExvbWFub3YuCisKKyAgIEhhbmRsZSBsb25nZXIgREVTQ1JJUFRJT04vUkVGRVJFTkNFIHN0cmluZ3MgaW4gQ2FwYWJpbGl0aWVzCisgICBzdGF0ZW1lbnRzLgorICAgKENvbnNpc3RlbnQgcHJvY2Vzc2luZyB3aXRoIG90aGVyIE1JQiBkZWZpbml0aW9uIG1hY3JvcykuCisgICBGaXggcHJvdmlkZWQgYnkgQWxla3NhbmRyIExvbWFub3YuCisKKzIwMDgtMDQtMDIgMTk6MzUgIGhhcmRha2VyCisKKyAgICogRkFROgorCisgICBtZW50aW9uIGxpYmVsZiBwYWNrYWdlIHJlbmFtZQorCisyMDA4LTAzLTI5IDA5OjI5ICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2FnZW50X3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsIAorICAgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaDoKKworICAgTkVXUzogc25tcGQ6IEVuYWJsZSBhdXRvbWF0aWMgcmVyZWdpc3RlcmluZyBvZiBzeXNPUlRhYmxlIGVudHJpZXMKKyAgIGZyb20gQWdlbnRYIHN1YmFnZW50cy4gQWRkIHRoZSBzeXNPUlRhYmxlIGludGVyZmFjZSB0byB0aGUKKyAgIGluY2x1ZGUgZGlyZWN0b3J5LiBSZXdyaXRlIHRoZSBzeXNPUlRhYmxlIG1vZHVsZSB0byB1c2UgdGhlCisgICB0YWJsZV9jb250YWluZXIgaGFuZGxlci4KKworMjAwOC0wMy0yNyAwMzoyMSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLCBkaXN0L25ldC1zbm1wLnNwZWMsIGRpc3QvcGF0bWU6CisKKyAgIHVuY29tbWl0IDMgYWNjaWRlbnRhbCBtdWx0aXBsZSBmaWxlIGNvbW1pdHMKKworMjAwOC0wMy0yNyAwMzoxOCAgaGFyZGFrZXIKKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZSwgZGlzdC9tYWtlcmVsZWFzZS54bWwsIGRpc3QvbmV0LXNubXAuc3BlYywgICAKKyAgICAgIGRpc3QvcGF0bWU6CisKKyAgIHZhcmlvdXMgcmV3b3JkaW5nLCByZXN0cnVjdHVyaW5nIGFuZCBwcm9wZXIgZmlsZSByZXBsYWNlbWVudAorICAgc2NoZW1lCiAKIDIwMDgtMDMtMjYgMDc6NTIgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBORVdTOiBzbm1wbGliOiBmcm9tICJBbGVrc2FuZHIgTG9tYW5vdiI6IENvcnJlY3RlZCByZWdpc3RlcmluZyBvZgotICAgICBtdWx0aXBsZSBwcmVtaWIgY29uZmlnIGhhbmRsZXJzIHNvIHRoYXQgYWxsIG9mIHRoZW0gZ2V0Ci0gICAgIHJlZ2lzdGVyZWQgYXMgcHJlbWliIGhhbmRsZXJzIGFzIG9wcG9zZWQgdG8gdGhlIGVhcmxpZXIgYmVoYXZpb3VyCi0gICAgIHdoZXJlIHRoZXkgYWx3YXlzIGdvdCByZWdpc3RlcmVkIGFzIG5vcm1hbCBjb25maWcgaXRlbXMuCisKKyAgIE5FV1M6IHNubXBsaWI6IGZyb20gIkFsZWtzYW5kciBMb21hbm92IjogQ29ycmVjdGVkIHJlZ2lzdGVyaW5nIG9mCisgICBtdWx0aXBsZSBwcmVtaWIgY29uZmlnIGhhbmRsZXJzIHNvIHRoYXQgYWxsIG9mIHRoZW0gZ2V0CisgICByZWdpc3RlcmVkIGFzIHByZW1pYiBoYW5kbGVycyBhcyBvcHBvc2VkIHRvIHRoZSBlYXJsaWVyIGJlaGF2aW91cgorICAgd2hlcmUgdGhleSBhbHdheXMgZ290IHJlZ2lzdGVyZWQgYXMgbm9ybWFsIGNvbmZpZyBpdGVtcy4KKworMjAwOC0wMy0yNiAwNzoxNiAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogR2V0IHRoZSB0YWJsZV9jb250YWluZXIgZGF0YSBmcm9tIHRoZSByaWdodAorICAgaGFuZGxlciB3aGVuIHVucmVnaXN0ZXJpbmcgYSB0YWJsZV9jb250YWluZXIuCiAKIDIwMDgtMDMtMjUgMDY6MDcgIG1hZ2ZyCiAKICAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKLSAgICAgUmVtb3ZlIHNwdXJpb3VzIHByaW50ZiBmcm9tIHVucmVnaXN0ZXJfbWliX2NvbnRleHQKKworICAgUmVtb3ZlIHNwdXJpb3VzIHByaW50ZiBmcm9tIHVucmVnaXN0ZXJfbWliX2NvbnRleHQKIAogMjAwOC0wMy0yNCAxNzo1NCAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYzoKLSAgICAgQ0hBTkdFUzogbWliMmM6IEJVRzogMTg3NDA1OSwxNzM3MDY4OiBIYW5kbGUgTUlCIG9iamVjdHMgd2l0aAotICAgICBlbWJlZGRlZCBoeXBoZW5zCisKKyAgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDE4NzQwNTksMTczNzA2ODogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGgKKyAgIGVtYmVkZGVkIGh5cGhlbnMKIAogMjAwOC0wMy0yNCAxNzoyOSAgZHRzMTIKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxODY2NjU1OiBIYW5kbGUgcGFyc2luZyBpbnZhbGlkIE9JRAotICAgICBzdWJpZGVudGlmaWVycworCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE4NjY2NTU6IEhhbmRsZSBwYXJzaW5nIGludmFsaWQgT0lECisgICBzdWJpZGVudGlmaWVycwogCiAyMDA4LTAzLTI0IDE2OjUzICBkdHMxMgogCiAgICAqIHNubXBsaWIvYXNuMS5jOgotICAgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSDogMTkyMTg2MTogQXZvaWQgZW5kbGVzcyBsb29wIGFmdGVyCi0gICAgIHRydW5jYXRpbmcgNjRiaXQgaW50CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIOiAxOTIxODYxOiBBdm9pZCBlbmRsZXNzIGxvb3AgYWZ0ZXIKKyAgIHRydW5jYXRpbmcgNjRiaXQgaW50CiAKIDIwMDgtMDMtMjQgMTU6MDAgIGR0czEyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4MjMzODE6IFZhbGlkIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIHBhdGggb24KLSAgICAgV2luZG93cworCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODIzMzgxOiBWYWxpZCBNSUIgZGlyZWN0b3J5IHNlYXJjaCBwYXRoIG9uCisgICBXaW5kb3dzCisKKzIwMDgtMDMtMjIgMDg6NDIgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBzbm1wdHJhcGQgd2l0aG91dCBlbWJlZGRlZCBwZXJsIGFnYWluLgogCiAyMDA4LTAzLTIxIDE3OjU1ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsCi0gICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLAotICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywKLSAgICAgc25tcGxpYi93aW5waXBlLmM6Ci0gICAgIE5FV1M6IGxpYnNubXA6IFBBVENIOiAxODk1OTI3OiBmcm9tIGpodW04MTExOiBjaGFuZ2Ugb2Jzb2xldGUKLSAgICAgcmVjdi9zZW5kIHRvIHJlY3Zmcm9tL3NlbmR0bworICAgKiAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3dpbnBpcGUuYzoKKworICAgTkVXUzogbGlic25tcDogUEFUQ0g6IDE4OTU5Mjc6IGZyb20gamh1bTgxMTE6IGNoYW5nZSBvYnNvbGV0ZQorICAgcmVjdi9zZW5kIHRvIHJlY3Zmcm9tL3NlbmR0bwogCiAyMDA4LTAzLTIxIDE3OjQ5ICBoYXJkYWtlcgogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6Ci0gICAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDE4NjIxNzc6IGZyb20gd2FmZmxlc291ZmZsZTogbWFkZSBjb2RlCi0gICAgIG1vcmUgd2luZG93cy9jeWd3aW4gY29tcGlsZXIgZnJpZW5kbAorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAxODYyMTc3OiBmcm9tIHdhZmZsZXNvdWZmbGU6IG1hZGUgY29kZQorICAgbW9yZSB3aW5kb3dzL2N5Z3dpbiBjb21waWxlciBmcmllbmRsCiAKIDIwMDgtMDMtMjEgMTc6NDUgIGhhcmRha2VyCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50LnB5OgotICAgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAxODc3ODQwOiBmaXggTUlCIGxhYmVsIGFuZCBpbmRleGluZyBkdWUKLSAgICAgdG8gc2xpZ2h0bHkgYnJva2VuIHJlZ2V4cAorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAxODc3ODQwOiBmaXggTUlCIGxhYmVsIGFuZCBpbmRleGluZyBkdWUKKyAgIHRvIHNsaWdodGx5IGJyb2tlbiByZWdleHAKIAogMjAwOC0wMy0yMSAxNzozOSAgaGFyZGFrZXIKIAogICAgKiBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MjAzOTA6IGZyb20gd2lsbWVzajogZml4IHJlZ2lzdHJhdGlvbiBvZgotICAgICB0YWJsZXMgd2l0aCAuMCBhcyBJSURzCisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTIwMzkwOiBmcm9tIHdpbG1lc2o6IGZpeCByZWdpc3RyYXRpb24gb2YKKyAgIHRhYmxlcyB3aXRoIC4wIGFzIElJRHMKIAogMjAwOC0wMy0yMSAxNzozMiAgaGFyZGFrZXIKIAogICAgKiBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQ2NDU6IGZyb20gd2lsbWVzajogYmV0dGVyIGVuZCBvZiBtaWIKLSAgICAgc3VwcG9ydAorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDY0NTogZnJvbSB3aWxtZXNqOiBiZXR0ZXIgZW5kIG9mIG1pYgorICAgc3VwcG9ydAogCiAyMDA4LTAzLTIxIDE3OjI4ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0NjQzOiBmcm9tIHdpbG1lc2o6IGZpeCBpc3N1ZXMgd2l0aAotICAgICBlbWJlZGRlZCBwZXJsIHJldHVybmluZyAwIGJlaW5nIHJlY2xhc3NpZmllZCBhcyBhIHdyb25nIGRhdGEgdHlwZQotICAgICB3aGVuIGFuIGludCB3b3Jrcy4KKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQ2NDM6IGZyb20gd2lsbWVzajogZml4IGlzc3VlcyB3aXRoCisgICBlbWJlZGRlZCBwZXJsIHJldHVybmluZyAwIGJlaW5nIHJlY2xhc3NpZmllZCBhcyBhIHdyb25nIGRhdGEgdHlwZQorICAgd2hlbiBhbiBpbnQgd29ya3MuCiAKIDIwMDgtMDMtMjEgMTc6MjIgIGhhcmRha2VyCiAKICAgICogbG9jYWwvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSCAxOTE0Mzk4OiBmcm9tIHdpbG1lc2o6IGluc3RhbGwKLSAgICAgbWliMmMucGVybC5jb25mCisKKyAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSCAxOTE0Mzk4OiBmcm9tIHdpbG1lc2o6IGluc3RhbGwKKyAgIG1pYjJjLnBlcmwuY29uZgogCiAyMDA4LTAzLTIxIDE3OjAyICBoYXJkYWtlcgogCiAgICAqIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDM5MzogZnJvbSB3aWxtZXNqOiByZWdpc3RlckFnZW50IGNhbgotICAgICBub3cgYmUgcnVuIG11bHRpcGxlIHRpbWVzCisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0MzkzOiBmcm9tIHdpbG1lc2o6IHJlZ2lzdGVyQWdlbnQgY2FuCisgICBub3cgYmUgcnVuIG11bHRpcGxlIHRpbWVzCiAKIDIwMDgtMDMtMjEgMTY6MzUgIGhhcmRha2VyCiAKICAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOgotICAgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE5MDk4MTM6IGZpeCB0YWJsZV9pdGVyYXRvciBoaW50IHRvIGdldF9maXJzdAotICAgICB3aGVuIFNPUlRFRCBmbGFnIGlzIHNldAorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE5MDk4MTM6IGZpeCB0YWJsZV9pdGVyYXRvciBoaW50IHRvIGdldF9maXJzdAorICAgd2hlbiBTT1JURUQgZmxhZyBpcyBzZXQKKworMjAwOC0wMy0yMSAxNjoyNCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYywgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgTkVXUzogc25tcHRyYXBkOiBQQVRDSDogMTkwODI4ODogZnJvbSBhbmVkZWw6IElmIHNubXB0cmFwZCAtZgorICAgaW50ZXJydXB0ZWQgd2l0aCBjdHJsLUMgcnVuIHBlcmwgRU5EIGJsb2NrCisKKzIwMDgtMDMtMjEgMTY6MTYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTkwMjExMzogZnJvbSBqc2FmcmFuZWs6IGZpeCBlcnJvciBsb2cgaW4KKyAgIGluZXROZXRUb01lZGlhdGFibGUKKworMjAwOC0wMy0yMSAxNjoxMiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTkwMjEwNTogZnJvbSBqc2FmcmFuZWs6IGhpZGUgYW5kIGltcHJvdmUgZGVidWcKKyAgIGxvZyBtZXNzYWdlcyBjcmVhdGVkIGJ5IHBhdGNoIDE3MDU1OTQKKworMjAwOC0wMy0wNyAxNTo0MiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmg6CisKKyAgIEhBTC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaHJGU1RhYmxlLgorCisyMDA4LTAzLTA3IDE1OjQwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmg6CisKKyAgIEluaXRpYWwgSEFMIGltcGxlbWVudGF0aW9uIG9mIEZpbGVTeXN0ZW0gaW5mb3JtYXRpb24KKworMjAwOC0wMy0wNyAxNTozNSAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ2hlY2sgZm9yIGdldHZmc3N0YXQoKQorCisyMDA4LTAzLTA3IDE1OjM0ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODIzMzgxOiBVc2UgYSBzZW5zaWJsZSBkZWZhdWx0IE1JQkRJUiBwYXRoCisgICBvbiBDeWd3aW4vTWluR1cKKyAgIChTaG91bGQgdGhpcyBiZSBhcHBsaWVkIHRvIG90aGVyIGJyYW5jaGVzPyBJZiBzbywgd2hpY2g/KQogCiAyMDA4LTAyLTI3IDIyOjEyICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6Ci0gICAgIEZpeCBDKysgc3R5bGUgY29tbWVudAorCisgICBGaXggQysrIHN0eWxlIGNvbW1lbnQKKworMjAwOC0wMi0yNyAwNzo0OSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKKworICAgVGhlIExWTSBkaXNrIHBhdGNoIGludHJvZHVjZWQgYSBtZW1vcnkgbGVhay4gVGhpcyByZW1vdmVzIHRoZQorICAgbGVhay4KKworMjAwOC0wMi0yNiAyMzoyNyAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgbWFrZSB0aGUgc2NyaXB0IG1vcmUgaGllcmFyY2hpYWwvc3RydWN0dXJlZAorCisyMDA4LTAyLTI2IDIxOjM2ICBuYmEKKworICAgKiBhcHBzL3NubXB0cmFuc2xhdGUuYzoKKworICAgQ0hBTkdFUzogSW5pdGFsaXplIGxvZyBzdWJzeXN0ZW0KKworMjAwOC0wMi0yNiAyMTozNCAgbmJhCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBDSEFOR0VTOiBGaXggZm9yIHJlZnMgdG8gT0JKRUNULUdST1VQIGluIGFub3RoZXIgTUlCCisKKzIwMDgtMDItMjYgMjE6MjMgIG5iYQorCisgICAqICBtaWJzL0RJU01BTi1FVkVOVC1NSUIudHh0LCBtaWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQsICAgCisgICAgICBtaWJzL0lQLUZPUldBUkQtTUlCLnR4dCwgbWlicy9JUC1NSUIudHh0LCAgIAorICAgICAgbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCwgbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQsICAgCisgICAgICBtaWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0LCBtaWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dCwgbWlicy9UVU5ORUwtTUlCLnR4dDoKKworICAgVXBkYXRlIHRvIGF1dG9leHRyYWN0ZWQgbWliIGZpbGVzIChibGFuayBsaW5lIGNoYW5tZ2VzKQorCisyMDA4LTAyLTI2IDIwOjQ2ICBuYmEKKworICAgKiBtaWJzL01ha2VmaWxlLm1pYiwgbWlicy9pYW5hbGlzdCwgbWlicy9yZmNsaXN0OgorCisgICBVcGRhdGUgZm9yIGN1cnJlbnRseSByZWxlYXNlZCBSRkMgTUlCUworCisyMDA4LTAyLTI2IDIwOjQ1ICBuYmEKKworICAgKiAgbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0LCBtaWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0LCAgIAorICAgICAgbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIFVwZGF0ZSBJQU5BIE1JQlMgdG8gY3VycmVudCB2ZXJzaW9uCisKKzIwMDgtMDItMjUgMjI6MjEgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmg6CisKKyAgIGFkZCBtaXNzaW5nICNpbmNsdWRlPHB0aHJlYWQuaD4gZm9yIHB0aHJlYWRfbXV0ZXhfdAorCisyMDA4LTAyLTI1IDIyOjA2ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmM6CisKKyAgIGEgYmV0dGVyIHBvcnRhYmlsaXR5IGZpeAorCisyMDA4LTAyLTIzIDAwOjU5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3MDU1OTQ6IGZyb20gY192YXJ1bjogRml4IHZhcmlvdXMgYXNwZWN0cyBvZgorICAgbGludXggaXBBZGRyZXNzUHJlZml4VGFibGUgcmVwb3J0aW5nLgogCiAyMDA4LTAyLTIyIDIzOjUyICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODk2MTE4OiBwYXRjaCBmcm9tIGpzYWZyYW5lazogZml4IGlmVGFibGUKLSAgICAgMzJiaXQgY291bnRlcnMgb24gbGludXgKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODk2MTE4OiBwYXRjaCBmcm9tIGpzYWZyYW5lazogZml4IGlmVGFibGUKKyAgIDMyYml0IGNvdW50ZXJzIG9uIGxpbnV4CisKKzIwMDgtMDItMjIgMjM6NDkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYzoKKworICAgcGF0Y2ggZnJvbSBqc2FmcmFuZWs6IENyZWF0ZSBpcHY2U2NvcGVab25lRW50cnkgb25seSBmb3IKKyAgIGxpbmstbG9jYWwgYWRkcmVzc2VzIGFuZCBvbmx5IG9uY2UgcGVyIGludGVyZmFjZS4KIAogMjAwOC0wMi0yMiAyMzo0NCAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3BhcnNlLmM6Ci0gICAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODk4MjA0OiBmcm9tIE1pa2UgV2VzY290dDogZml4IGJ1ZwotICAgICAxODk4MTk4IGluIHBhcnNlLmMgdG8gYXZvaWQgYSBzZWdmYXVsdCB3aGVuIHBhcnNpbmcgYnJva2VuIG1pYnMuCisKKyAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODk4MjA0OiBmcm9tIE1pa2UgV2VzY290dDogZml4IGJ1ZworICAgMTg5ODE5OCBpbiBwYXJzZS5jIHRvIGF2b2lkIGEgc2VnZmF1bHQgd2hlbiBwYXJzaW5nIGJyb2tlbiBtaWJzLgogCiAyMDA4LTAyLTE4IDEyOjExICBkdHMxMgogCiAgICAqIG1hbi9taWJfYXBpLjMuZGVmOgotICAgICBDbGFyaWZ5IHRoZSBuZWVkIHRvIHJlc2V0IGJ1ZmZlciBsZW5ndGggd2hlbiBjYWxsaW5nICdyZWFkX29iamlkJwotICAgICByZXBlYXRlZGx5LgorCisgICBDbGFyaWZ5IHRoZSBuZWVkIHRvIHJlc2V0IGJ1ZmZlciBsZW5ndGggd2hlbiBjYWxsaW5nICdyZWFkX29iamlkJworICAgcmVwZWF0ZWRseS4KKworMjAwOC0wMi0xOCAxMDozMiAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jOgorCisgICBwb3J0YWJpbGl0eSBmaXgKKworMjAwOC0wMi0xOCAwNzozOSAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jOgorCisgICBtYWtlIHN1cmUgdGhhdCBuZXRzbm1wX2lxdWVyeV91c2VyX3Nlc3Npb24gZXQgYWwuIGFyZSBwcm9wZXJseQorICAgZGVjbGFyZWQKIAogMjAwOC0wMi0xNyAxODowMSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgotICAgICBmaXggdHlwbyBpbiB2YXJpYWJsZSBuYW1lCisKKyAgIGZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUKIAogMjAwOC0wMi0xNyAwODozOCAgdGFuZGVycwogCiAgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6Ci0gICAgIHBvcnRhYmlsaXR5IGZpeAorCisgICBwb3J0YWJpbGl0eSBmaXgKKworMjAwOC0wMi0xNSAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIGxvd2VyZWQgZmFpbHVyZSBtZXNzYWdlIHRvIGluc2VydCB0byBkZWJ1ZzsgcmVtb3ZlZCBDVlMgSUQgZnJvbQorICAgdG9wIG9mIGxpbmUKKworMjAwOC0wMi0xNSAxNzozOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIGRvbid0IGluc2VydCBlbXB0eSBlbnRyaWVzCisKKzIwMDgtMDItMTUgMTc6MzEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBwYXRjaCBmcm9tIGpzYWZyYW5lIG9uIGlyYzogbWFrZSBpcHY2IGVudHJpZXMgd29yayBvbiA2NCBiaXQKKyAgIG1hY2hpbmVzCisKKzIwMDgtMDItMTUgMTY6MjQgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHBhc3MgMSBhdCBhIG5ldyBtYWtlcmVsZWFzZSBzY3JpcHQ7IGN1cnJlbnRseSBqdXN0IGNvbnZlcnRlZCBjb2RlCisgICBtb3N0bHkKKworMjAwOC0wMi0xNSAxNjoyMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKKworICAgcmVtb3ZlIGxpbnV4IGNoZWNrcworCisyMDA4LTAyLTE1IDE1OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgcmVtb3ZlIHJlZmVyZW5jZXMgdG8gUkRBX1JUQQorCisyMDA4LTAyLTE1IDE1OjM3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgZG9uJ3QgY29tcGlsZSBpbiB0aGUgaXB2NiBjb2RlIGlmIE5EQV9SVEEgaXNuJ3QgZGVmaW5lZAogCiAyMDA4LTAyLTE1IDEzOjAwICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKLSAgICAgcG9ydGFiaWxpdHkgZml4CisKKyAgIHBvcnRhYmlsaXR5IGZpeAorCisyMDA4LTAyLTE1IDA2OjE5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgbWlub3IgYnVnIHVwZGF0ZSBmcm9tIGNfdmFydW4KKworMjAwOC0wMi0xNSAwNToxMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTcwNDEwNTogZnJvbSBjX3ZhcnVuOiBBZGQgSVB2NiBzdXBwb3J0IHRvCisgICB0aGUgaW5ldE5ldFRvTWVkaWFUYWJsZSBmb3IgbGludXgKKworMjAwOC0wMi0xNSAwNToxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIuaDoKKworICAgcmVxdWlyZSBuZXcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgdGFibGUKKworMjAwOC0wMi0xNSAwNTowMCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkcy5oLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzE1NDA1OiBmcm9tIGNfdmFydW46IEltcGxlbWVudCB0aGUKKyAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG9uIGxpbnV4CiAKIDIwMDgtMDItMTUgMDQ6MzkgIGhhcmRha2VyCiAKICAgICogYWdlbnQvc25tcGQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzE2NTQ4OiBmcm9tIG15YW1hdG86IEZpeCBoZWxwIG91dHB1dCBzbwotICAgICBubyBzcGFjZSBpcyBwcmludGVkIGJldHdlZW4gLUQgYW5kIGFyZ3VtZW50cy4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzE2NTQ4OiBmcm9tIG15YW1hdG86IEZpeCBoZWxwIG91dHB1dCBzbworICAgbm8gc3BhY2UgaXMgcHJpbnRlZCBiZXR3ZWVuIC1EIGFuZCBhcmd1bWVudHMuCisKKzIwMDgtMDItMTUgMDQ6MjcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24uaCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzIzNjExOiBmcm9tIEVtaSBZYW5hZ2k6IE5ldyBpbXBsZW1lbnRhdGlvbgorICAgb2YgdGhlIHJtb24gYWxhcm1UYWJsZQogCiAyMDA4LTAyLTE1IDAzOjQ0ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6Ci0gICAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTg5MzQ2ODogZnJvbSBna29lbmlnOiBmaXhlZCByZWdpc3RyYXRpb24gb2YKLSAgICAgT0lEcyB3aXRoIHJhbmdlcworCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE4OTM0Njg6IGZyb20gZ2tvZW5pZzogZml4ZWQgcmVnaXN0cmF0aW9uIG9mCisgICBPSURzIHdpdGggcmFuZ2VzCiAKIDIwMDgtMDItMTQgMjE6NDAgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKLSAgICAgZml4IHR5cG8gaW4gdmFyaWFibGUgZGVjbGFyYXRpb24gKHVuYnJlYWtzIHRoZSBidWlsZCBvbiBhIGZldwotICAgICBzeXN0ZW1zKQorCisgICBmaXggdHlwbyBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbiAodW5icmVha3MgdGhlIGJ1aWxkIG9uIGEgZmV3CisgICBzeXN0ZW1zKQogCiAyMDA4LTAyLTE0IDAwOjI5ICBoYXJkYWtlcgogCiAgICAqIENPUFlJTkc6Ci0gICAgIHllYXIgdXBkYXRlIGZvciBzcGFydGEKKworICAgeWVhciB1cGRhdGUgZm9yIHNwYXJ0YQogCiAyMDA4LTAyLTEzIDIzOjM3ICBtYWdmcgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYzoKLSAgICAgTkVXUzogc25tcGxpYjogQ2hhbmdlIENPTlRBSU5FUl9JTlNFUlQgdG8gbm90IGRvIHBhcnRpYWwgaW5zZXJ0cwotICAgICBpbiBjb250YWluZXJzIHdpdGggbXVsdGlwbGUgaW5kaWNlcyB3aGVuIG9uZSBpbnNlcnQgZmFpbHMuCisKKyAgIE5FV1M6IHNubXBsaWI6IENoYW5nZSBDT05UQUlORVJfSU5TRVJUIHRvIG5vdCBkbyBwYXJ0aWFsIGluc2VydHMKKyAgIGluIGNvbnRhaW5lcnMgd2l0aCBtdWx0aXBsZSBpbmRpY2VzIHdoZW4gb25lIGluc2VydCBmYWlscy4KIAogMjAwOC0wMi0xMyAyMzoxMSAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NubXB1c20uYzoKLSAgICAgRml4ZWQgdGhlIGNyZWF0ZVVzZXIgbGluZSB0byBzcGVjaWZ5IHRoZSAtZSBmbGFnIChyZXNwb25kaW5nIHRvIGEKLSAgICAgY29tcGxhaW50IGFib3V0IGl0IGJlIG1pc3NpbmcpCisKKyAgIEZpeGVkIHRoZSBjcmVhdGVVc2VyIGxpbmUgdG8gc3BlY2lmeSB0aGUgLWUgZmxhZyAocmVzcG9uZGluZyB0byBhCisgICBjb21wbGFpbnQgYWJvdXQgaXQgYmUgbWlzc2luZykKKworMjAwOC0wMi0xMyAxNzo0MiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzc5NTU4OiBmcm9tIGJydW1iczogSW1wbGVtZW50IHRoZQorICAgZGlza0lPTEExLDUsMTAgb2JqZWN0aW9ucyBpbiB0aGUgZGlza2lvLW1pYiB1bmRlciBsaW51eAogCiAyMDA4LTAyLTEzIDE3OjE1ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc4MzczMzogUHV0IHRoZSBwYWNrYWdlIHZlcnNpb24gbnVtYmVyCi0gICAgIGludG8gdGhlIGhyU1dJbnN0IHRhYmxlIGZvciBzb2xhcmlzLgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3ODM3MzM6IFB1dCB0aGUgcGFja2FnZSB2ZXJzaW9uIG51bWJlcgorICAgaW50byB0aGUgaHJTV0luc3QgdGFibGUgZm9yIHNvbGFyaXMuCisKKzIwMDgtMDItMTMgMTY6NTggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3ODM0MjM6IGZyb20ganNhZnJhbmVrOiByZXR1cm4gYSBjb3JyZWN0CisgICBpcHY2SW50ZXJmYWNlSWRlbnRpZmllciBvZiBsb29wYmFjayBvbiBsaW51eAogCiAyMDA4LTAyLTEzIDE2OjEyICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzg0NzQ3OiBmcm9tIGpzYWZyYW5lazogRml4IGxvbmcgdXNhZ2UKLSAgICAgZm9yIGlwIGFkcmVzc2VzIG9uIDY0IGJpdCBzeXN0ZW1zIGluIHZhcmlvdXMgTUlCLUlJIHRhYmxlcy4KKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3ODQ3NDc6IGZyb20ganNhZnJhbmVrOiBGaXggbG9uZyB1c2FnZQorICAgZm9yIGlwIGFkcmVzc2VzIG9uIDY0IGJpdCBzeXN0ZW1zIGluIHZhcmlvdXMgTUlCLUlJIHRhYmxlcy4KKworMjAwOC0wMi0xMyAxNjowNyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE4MDY1MDE6IGZyb20gam1hZ2RlcjogQWRkIGEgc25tcF92M3RyYXAKKyAgIGZ1bmN0aW9uIGZvciBzZW5kaW5nIHRyYXBzIHdpdGggYSBzbm1wdjMgY29udGV4dAogCiAyMDA4LTAyLTEzIDE2OjAyICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyNjEwMjogZnJvbSBqc2FmcmFuZWs6IHN1cHBvcnQgbG9uZ2VyCi0gICAgIGludGVyZmFjZSBuYW1lcyBvbiBsaW51eAorICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6CiAKLTIwMDgtMDItMTMgMDk6MjIgIHRhbmRlcnMKLQotICAgKiBjb25maWd1cmU6Ci0gICAgIHJldmVydCB0byBhdXRvY29uZiAyLjU5IHBlciBleGlzdGluZyBwb2xpY3kKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyNjEwMjogZnJvbSBqc2FmcmFuZWs6IHN1cHBvcnQgbG9uZ2VyCisgICBpbnRlcmZhY2UgbmFtZXMgb24gbGludXgKIAogMjAwOC0wMi0xMiAyMzoyMyAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL21pYi5jOgotICAgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTgwNzQ4OTogZml4IGlnbm9yaW5nIG9mIGRpc3BsYXkgaGludHMuCisKKyAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODA3NDg5OiBmaXggaWdub3Jpbmcgb2YgZGlzcGxheSBoaW50cy4KKworMjAwOC0wMi0xMiAyMzoxOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIAorCisyMDA4LTAyLTEyIDIzOjE2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDE4MjM0NjUgZnJvbSBqc2FmcmFuZWs6IGZpeCBpY21wIGNhY2hlCisgICByZWdpc3RyYXRpb24KKworMjAwOC0wMi0xMiAyMjoxNiAgaGFyZGFrZXIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxODI4NjAyOiBmcm9tIHRnb2hhZDogU3VwcG9ydCBpcERlZmF1bHRUVEwKKyAgIGFuZCBpcEZvcndhcmRpbmcgU0VUcyBvbiBsaW51eAogCiAyMDA4LTAyLTEyIDIyOjA5ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NjY4MjM6IGZyb20ganNhZnJhbmVrOiB0cnVuY2F0ZSAzMiBiaXQKLSAgICAgY291bnRlciB2YWx1ZXMgb24gNjQgYml0IG1hY2hpbmVzIHRvIGF2b2lkIGJvZ3VzIHdhcm5pbmdzLgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NjY4MjM6IGZyb20ganNhZnJhbmVrOiB0cnVuY2F0ZSAzMiBiaXQKKyAgIGNvdW50ZXIgdmFsdWVzIG9uIDY0IGJpdCBtYWNoaW5lcyB0byBhdm9pZCBib2d1cyB3YXJuaW5ncy4KIAogMjAwOC0wMi0xMiAxOTowNSAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODQ5OTAzOiBmcm9tIGpzYWZyYW5lazogZG8gbm90IHNwYW0gbG9nCi0gICAgIHdpdGggYXNzZXJ0cyB3aGVuIFhFTiBpcyB1c2VkCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg0OTkwMzogZnJvbSBqc2FmcmFuZWs6IGRvIG5vdCBzcGFtIGxvZworICAgd2l0aCBhc3NlcnRzIHdoZW4gWEVOIGlzIHVzZWQKIAogMjAwOC0wMi0xMiAxODo1MCAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL2NhbGxiYWNrLmM6Ci0gICAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODc1MDIyOiBmcm9tIHNlbV9wcmc6IGltcHJvdmUgY2FsbGJhY2sKLSAgICAgbG9ja2luZyBtZWNoYW5pc21zCisKKyAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODc1MDIyOiBmcm9tIHNlbV9wcmc6IGltcHJvdmUgY2FsbGJhY2sKKyAgIGxvY2tpbmcgbWVjaGFuaXNtcwogCiAyMDA4LTAyLTEyIDE3OjQwICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NzkyNjE6IGZyb20gYW1lc2J1cnk6IEFkZCBpbiBpbmFjdGl2ZQotICAgICBtZW1vcnkgdG8gdGhlIGNhY2hlZCByZXBvcnQgZm9yIGZyZWVic2QKIAotMjAwOC0wMi0xMiAxNToyMiAgaGFyZGFrZXIKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg3OTI2MTogZnJvbSBhbWVzYnVyeTogQWRkIGluIGluYWN0aXZlCisgICBtZW1vcnkgdG8gdGhlIGNhY2hlZCByZXBvcnQgZm9yIGZyZWVic2QKKworMjAwOC0wMi0xMiAxNTozMiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsIHNubXBsaWIvc25tcHYzLmM6CisKKyAgIE5FV1M6IGxpYnNubXA6IFBhdGNoOiAxODgyMDY5OiBmcm9tIG5zY2hyZW5rOiBBZGQgYSBleGFjdEVuZ2luZUlECisgICB0b2tlbiBmb3Igc3BlY2lmeWluZyBhbiBleGFjdCBTTk1QdjMgZW5naW5lSUQgdG8gdXNlCisKKzIwMDgtMDItMTIgMTU6MTggIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6Ci0gICAgIENoYW5nZSBzbnByaW50ZiBwcmludCBsZW5ndGhzIHRvIGxlbi0xIHRvIGxlYXZlIDAgaW4gZmluYWwKLSAgICAgcG9zaXRpb24gZm9yIHByaW50aW5nCisKKyAgIG1pbm9yIGNsZWFudXBzIGZyb20gcmV2aWV3aW5nIHBhcnRzIG9mIHRoZSBjb2RlCisKKzIwMDgtMDItMTIgMTU6MTcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTg4MjYyMTogZnJvbSBqc2FmcmFuZWs6IEFkZCBMVk0gc3VwcG9ydCB0bworICAgdGhlIHBhcnRpdGlvbiB0YWJsZQogCiAyMDA4LTAyLTExIDIyOjI2ICBoYXJkYWtlcgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBmaXggcXVvdGVkIHN0cmluZ3MgaW4gaGVscCBvdXRwdXQKKworICAgZml4IHF1b3RlZCBzdHJpbmdzIGluIGhlbHAgb3V0cHV0CiAKIDIwMDgtMDEtMzAgMTc6MjkgIGhhcmRha2VyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIGFkZGVkIHZhY21fY29uZiB0byBleGlzdGluZyBjb25maWd1cmUgZmlsZXMgKGZvciB0cmFwZCB0b28pCisKKyAgIGFkZGVkIHZhY21fY29uZiB0byBleGlzdGluZyBjb25maWd1cmUgZmlsZXMgKGZvciB0cmFwZCB0b28pCiAKIDIwMDgtMDEtMjAgMDc6NTUgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTg3MjI2NjogUEVSTENDIGNoZWNrIGZhaWxzIGZvciBDQyB3aXRoCi0gICAgIG9wdGlvbnMKKworICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTg3MjI2NjogUEVSTENDIGNoZWNrIGZhaWxzIGZvciBDQyB3aXRoCisgICBvcHRpb25zCiAKIDIwMDgtMDEtMTcgMDE6MTMgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmg6Ci0gICAgIGZpeCBkZWZhdWx0IG1pYnMgdG8gaW5jbHVkZSB2YWNtX2NvbmYgdG9vCisKKyAgIGZpeCBkZWZhdWx0IG1pYnMgdG8gaW5jbHVkZSB2YWNtX2NvbmYgdG9vCiAKIDIwMDgtMDEtMTcgMDA6MDkgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjYwODg6IGZyb20gSmFuIFNhZnJhbmVrOiBVc2UgdGhlIHJpZ2h0Ci0gICAgIGludGVyZmFjZSB0IHJlYWQgdGhlIG5ldG1hc2sKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI2MDg4OiBmcm9tIEphbiBTYWZyYW5lazogVXNlIHRoZSByaWdodAorICAgaW50ZXJmYWNlIHQgcmVhZCB0aGUgbmV0bWFzawogCiAyMDA4LTAxLTE2IDIxOjU0ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLSAgICAgQ0hBTkdFUzogSGFuZGxlIGRldmljZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBpbgotICAgICBVQ0QtU05NUC1NSUI6OmRza0RldmljZQorCisgICBDSEFOR0VTOiBIYW5kbGUgZGV2aWNlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzIGluCisgICBVQ0QtU05NUC1NSUI6OmRza0RldmljZQogCiAyMDA4LTAxLTE2IDAwOjQ3ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI4ODM5OiBmcm9tIGpzYWZyYW5layB0byBwcm92aWRlIGJldHRlcgotICAgICBoYW5kbGluZyBvZiBkaXNrcyBtb3VudGVkIG9uIHBhdGhzIHdpdGggZW1iZWRkZWQgc3BhY2VzCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyODgzOTogZnJvbSBqc2FmcmFuZWsgdG8gcHJvdmlkZSBiZXR0ZXIKKyAgIGhhbmRsaW5nIG9mIGRpc2tzIG1vdW50ZWQgb24gcGF0aHMgd2l0aCBlbWJlZGRlZCBzcGFjZXMKIAogMjAwOC0wMS0xNSAxNjo0NyAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYzoKLSAgICAgY292ZXJpdHkgYnVnIDIwNTogZG91YmxlIGNoZWNrIHBvaW50ZXIgdGhhdCBzaG91bGQgbmV2ZXIgYmUgbnVsbAorCisgICBjb3Zlcml0eSBidWcgMjA1OiBkb3VibGUgY2hlY2sgcG9pbnRlciB0aGF0IHNob3VsZCBuZXZlciBiZSBudWxsCisKKzIwMDgtMDEtMTQgMjM6NTUgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oOgorCisgICBVcGRhdGUgdGhlIHNubXAgYW5kIHN5c3RlbSBtaWJzIHRvIGJlIGhhbmRsZXIgYmFzZWQKKworMjAwOC0wMS0xMyAwMDowMCAgbWFnZnIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TLCAgCisgICAgICAgZG94eWdlbi5jb25mLCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsLCBzZWRzY3JpcHQuaW4sICAgCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorCisgICBMZXNzZW4gdGhlIG51bWJlciBvZiBwbGFjZXMgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gb3JkZXIgdG8KKyAgIGRvIGEgcmVsZWFzZS4KKyAgIENoYW5nZSB0byB1c2UgdGhlIGNvbmZpZ3VyZSB2ZXJzaW9uIG51bWJlciBhcyB0aGUgcGFja2FnZSB2ZXJzaW9uCisgICBudW1iZXIuCiAKIDIwMDgtMDEtMDkgMjE6NTggIG1hZ2ZyCiAKICAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6Ci0gICAgIERlbGV0ZSB1bnVzZWQgc3RhdGljIGZ1bmN0aW9ucworCisgICBEZWxldGUgdW51c2VkIHN0YXRpYyBmdW5jdGlvbnMKIAogMjAwOC0wMS0wNiAxMzowMSAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6Ci0gICAgIE1ha2UgZXJyb3Jfc3RyaW5nIHByaXZhdGUgYW5kIHJlYWRvbmx5CisKKyAgIE1ha2UgZXJyb3Jfc3RyaW5nIHByaXZhdGUgYW5kIHJlYWRvbmx5CiAKIDIwMDctMTItMjIgMTk6MjIgIGR0czEyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTgyNjE3NDogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuCi0gICAgIHByaW50aW5nIHZhbHVlcy4KKworICAgQ0hBTkdFUzogcGVybDogQlVHOiAxODI2MTc0OiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4KKyAgIHByaW50aW5nIHZhbHVlcy4KIAogMjAwNy0xMi0yMSAyMzoxOSAgZHRzMTIKIAogICAgKiBwZXJsL1NOTVAvU05NUC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogQlVHOiAxNzQ3NzMzOiBNb3JlIHJvYnVzdCBoYW5kbGluZyBvZiB1bmRlZmluZWQKLSAgICAgdmFsdWVzLgotICAgICBQYXRjaCBzdXBwbGllZCBieSBNYXR0aSBMaW5uYW52dW9yaQorCisgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE3NDc3MzM6IE1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHVuZGVmaW5lZAorICAgdmFsdWVzLgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgTWF0dGkgTGlubmFudnVvcmkKIAogMjAwNy0xMi0yMSAyMTozMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzQ4MjA2OiBQcm90ZWN0IGFnYWluc3QgZmFpbHVyZXMgdG8gb3BlbgotICAgICAvZXRjL210YWIgKG9yIGVxdWl2KQorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzQ4MjA2OiBQcm90ZWN0IGFnYWluc3QgZmFpbHVyZXMgdG8gb3BlbgorICAgL2V0Yy9tdGFiIChvciBlcXVpdikKIAogMjAwNy0xMi0yMSAxODo0MiAgZHRzMTIKIAogICAgKiBuZXQtc25tcC1jb25maWcuaW46Ci0gICAgIEJyaW5nIG9yZGVyIG9mIGFnZW50IGxpYnJhcnkgbGlua2luZyBpbnRvIGxpbmUgd2l0aCBhZ2VudAotICAgICBNYWtlZmlsZS4KLSAgICAgUHJvYmxlbSByZXBvcnRlZCBieSBTdGV2ZSBNY0NhcnRoeS4KLSAgICAgUW46IFNob3VsZCA1LjIueCBhbmQgNS4zLnggYWxzbyB1c2UgdGhlIHNhbWUgb3JkZXI/Ci0gICAgIChmb3IgYm90aCBhZ2VudCBNYWtlZmlsZSBhbmQgbmV0LXNubXAtY29uZmlnKQorCisgICBCcmluZyBvcmRlciBvZiBhZ2VudCBsaWJyYXJ5IGxpbmtpbmcgaW50byBsaW5lIHdpdGggYWdlbnQKKyAgIE1ha2VmaWxlLgorICAgUHJvYmxlbSByZXBvcnRlZCBieSBTdGV2ZSBNY0NhcnRoeS4KKyAgIFFuOiBTaG91bGQgNS4yLnggYW5kIDUuMy54IGFsc28gdXNlIHRoZSBzYW1lIG9yZGVyPworICAgKGZvciBib3RoIGFnZW50IE1ha2VmaWxlIGFuZCBuZXQtc25tcC1jb25maWcpCiAKIDIwMDctMTItMjEgMTM6MTEgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4MDI4MzM6IEVuc3VyZSBzbm1wdHJhcGQgYnVpbGRzIHdpdGgKLSAgICAgLS1kaXNhYmxlLXNubXB2MS8yYworCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODAyODMzOiBFbnN1cmUgc25tcHRyYXBkIGJ1aWxkcyB3aXRoCisgICAtLWRpc2FibGUtc25tcHYxLzJjCiAKIDIwMDctMTItMjAgMTY6MjYgIGR0czEyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTgzNDUzOTogQ29uc2lzdGVudCBoYW5kbGluZyBvZiBPSUQgcGFyc2luZy4KLSAgICAgQXBwbGllcyBwYXRjaCAjMTgzNDk4MywgcHJvdmlkZWQgYnkgRG1pdHJ5IEthcmFzaWsKKworICAgQ0hBTkdFUzogcGVybDogQlVHOiAxODM0NTM5OiBDb25zaXN0ZW50IGhhbmRsaW5nIG9mIE9JRCBwYXJzaW5nLgorICAgQXBwbGllcyBwYXRjaCAjMTgzNDk4MywgcHJvdmlkZWQgYnkgRG1pdHJ5IEthcmFzaWsKKworMjAwNy0xMi0yMCAxNjowNSAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE1vcmUgaW50ZXJuYWwgcXVlcnkgZGVidWdnaW5nIG91dHB1dC4KIAogMjAwNy0xMi0yMCAxNDoyMCAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTgyMjM2MDogRml4IHNwaW5sb2NrIGhlbHBlciBlcnJvciBoYW5kbGluZy4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTgyMjM2MDogRml4IHNwaW5sb2NrIGhlbHBlciBlcnJvciBoYW5kbGluZy4KIAogMjAwNy0xMi0yMCAxNDoxOCAgZHRzMTIKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxNzk1ODQwOiBTaWduZWQgMzItYml0IHRydW5jYXRpb24gbG9nZ2VkCi0gICAgIGFzIGRlYnVnIG1lc3NhZ2UgcmF0aGVyIHRoZW4gZXJyb3IuCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTc5NTg0MDogU2lnbmVkIDMyLWJpdCB0cnVuY2F0aW9uIGxvZ2dlZAorICAgYXMgZGVidWcgbWVzc2FnZSByYXRoZXIgdGhlbiBlcnJvci4KIAogMjAwNy0xMi0yMCAxNDoxNCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc5Mjg5MDogaW5jbHVkZSBDSUZTIG1vdW50cyB3aGVuIHNraXBwaW5nCi0gICAgIHJlbW90ZSBmaWxlc3lzdGVtcworCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzkyODkwOiBpbmNsdWRlIENJRlMgbW91bnRzIHdoZW4gc2tpcHBpbmcKKyAgIHJlbW90ZSBmaWxlc3lzdGVtcwogCiAyMDA3LTEyLTIwIDE0OjEyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc3MTIyMTogUmV0YWluIGlmTGFzdENoYW5nZSBpbmZvcm1hdGlvbiBvbgotICAgICBkYXRhIHJlbG9hZC4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc3MTIyMTogUmV0YWluIGlmTGFzdENoYW5nZSBpbmZvcm1hdGlvbiBvbgorICAgZGF0YSByZWxvYWQuCiAKIDIwMDctMTItMjAgMTQ6MDggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzU4MjEyOiBIYW5kbGluZyBtaXNzaW5nIHZhcmlhYmxlIHR5cGVzCi0gICAgIChJcEFkZHJlc3MsQ291bnRlcixPcGFxdWUpCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NTgyMTI6IEhhbmRsaW5nIG1pc3NpbmcgdmFyaWFibGUgdHlwZXMKKyAgIChJcEFkZHJlc3MsQ291bnRlcixPcGFxdWUpCiAKIDIwMDctMTItMTkgMjI6MzkgIG1hZ2ZyCiAKLSAgICogc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywKLSAgICAgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCBzbm1wbGliL2RhdGFfbGlzdC5jLAotICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIENvcnJlY3QgZG94eWdlbiB3YXJuaW5ncworICAgKiAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgc25tcGxpYi9kYXRhX2xpc3QuYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ29ycmVjdCBkb3h5Z2VuIHdhcm5pbmdzCiAKIDIwMDctMTItMTkgMjI6MzEgIG1hZ2ZyCiAKLSAgICogdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUywKLSAgICAgdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sCi0gICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsLCB0ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaywgdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAsIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbDoKLSAgICAgVXNlIE5FVFNOTVBfLXByZWZpeGVkIHN5bWJvbHMgd2hlbiBkZWNpZGluZyB3aGF0IHRlc3RzIHRvIHJ1biBhcwotICAgICB0aGUgY29tcGF0IHN5bWJvbHMgYXJlbid0IGRlZmluZWQuCisgICAqICB0ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCwgdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaywgdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwLCB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsOgorCisgICBVc2UgTkVUU05NUF8tcHJlZml4ZWQgc3ltYm9scyB3aGVuIGRlY2lkaW5nIHdoYXQgdGVzdHMgdG8gcnVuIGFzCisgICB0aGUgY29tcGF0IHN5bWJvbHMgYXJlbid0IGRlZmluZWQuCiAKIDIwMDctMTItMTkgMjI6MDYgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBCVUcgMTgzMTU2ODogc3RyZHVwIG1pZ2h0IGZhaWwgYW5kIHJldHVybiBOVUxMIC0gdGFrZSBjYXJlIG9mIGl0Ci0gICAgIGluIHRoaXMgY2FzZSBhdCBsZWFzdC4KKworICAgQlVHIDE4MzE1Njg6IHN0cmR1cCBtaWdodCBmYWlsIGFuZCByZXR1cm4gTlVMTCAtIHRha2UgY2FyZSBvZiBpdAorICAgaW4gdGhpcyBjYXNlIGF0IGxlYXN0LgogCiAyMDA3LTEyLTE5IDIxOjQ5ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jLCBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIEJVRyAxODI0ODgzOiBSZW1vdmUgbWVtb3J5IGxlYWsKKworICAgQlVHIDE4MjQ4ODM6IFJlbW92ZSBtZW1vcnkgbGVhawogCiAyMDA3LTEyLTE5IDIwOjQ2ICBtYWdmcgogCiAgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jOgotICAgICBDSEFOR0VTOiBCVUc6IDE4NTEwNDc6IERvIG5vdCB0cnkgdG8gZG8gbW9yZSBoYW5kbGluZyBvZiBhIHZhbHVlCi0gICAgIG9uY2UgaXQgaXMgZm91bmQgdG8gYmUgY29ycnVwdCBieSB0aGUgd2F0Y2hlciBoZWxwZXIsIHRodXMKLSAgICAgYXZvaWRpbmcgY29kZSB0aGF0IGNvdW50cyBvbiBnZXR0aW5nIHRoZSByaWdodCB0eXBlLiBUaGlzIGJ1ZyB3YXMKLSAgICAgZm91bmQgYnkgQ2hhcmxpZSBNaWxsZXIsIEluZGVwZW5kZW50IFNlY3VyaXR5IEV2YWx1YXRvcnMuCisKKyAgIENIQU5HRVM6IEJVRzogMTg1MTA0NzogRG8gbm90IHRyeSB0byBkbyBtb3JlIGhhbmRsaW5nIG9mIGEgdmFsdWUKKyAgIG9uY2UgaXQgaXMgZm91bmQgdG8gYmUgY29ycnVwdCBieSB0aGUgd2F0Y2hlciBoZWxwZXIsIHRodXMKKyAgIGF2b2lkaW5nIGNvZGUgdGhhdCBjb3VudHMgb24gZ2V0dGluZyB0aGUgcmlnaHQgdHlwZS4gVGhpcyBidWcgd2FzCisgICBmb3VuZCBieSBDaGFybGllIE1pbGxlciwgSW5kZXBlbmRlbnQgU2VjdXJpdHkgRXZhbHVhdG9ycy4KIAogMjAwNy0xMS0yNyAwOTo1NiAgZHRzMTIKIAogICAgKiBtYW4vc25tcHRyYXBkLjguZGVmOgotICAgICBDbGFyaWZ5IHVzZSBvZiB0aGUgLUEgKGxvZyBhcHBlbmQpIG9wdGlvbi4KKworICAgQ2xhcmlmeSB1c2Ugb2YgdGhlIC1BIChsb2cgYXBwZW5kKSBvcHRpb24uCiAKIDIwMDctMTEtMjIgMTU6NDIgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jOgotICAgICBjaGVjayByZXF1ZXN0LCBub3QgcmVxdWVzdHMuIHJlcG9ydGVkIGJ5IHVsaW0gb24gaXJjCiAKLTIwMDctMTEtMjIgMTU6MTYgIHJzdG9yeQorICAgY2hlY2sgcmVxdWVzdCwgbm90IHJlcXVlc3RzLiByZXBvcnRlZCBieSB1bGltIG9uIGlyYworCisyMDA3LTExLTIyIDE1OjE3ICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYzoKLSAgICAgY2hlY2sgcmVxdWVzdCwgbm90IHJlcXVlc3RzLiByZXBvcnRlZCBieSB1bGltIG9uIGlyYworCisgICBjaGVjayByZXF1ZXN0LCBub3QgcmVxdWVzdHMuIHJlcG9ydGVkIGJ5IHVsaW0gb24gaXJjCiAKIDIwMDctMTEtMTkgMjE6MzQgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmM6Ci0gICAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAxODM0Njk5OiBmcm9tIGFwZXJzc29uOiBGaXggMTgzMzI5NDoKLSAgICAgRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgorCisgICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMTgzNDY5OTogZnJvbSBhcGVyc3NvbjogRml4IDE4MzMyOTQ6CisgICBETFBJIHByb2JsZW1zIG9uIFNvbGFyaXMgMi42CisKKzIwMDctMTEtMTcgMTY6MjYgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wZDogVXNlIHRoZSB3b3JrZXIgaGVscGVycyBmcm9tIHRoZQorICAgcmVnaXN0ZXJfKl9pbnN0YW5jZSBoZWxwZXJzIGFuZCBzY2hlZHVsZSB0aGUgaW5zdGFuY2UgaGVscGVycyBmb3IKKyAgIHJlbW92YWwgaW4gNS42CisKKzIwMDctMTEtMTQgMTI6MjEgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5oOgorCisgICBTdXBwb3J0IHYzIGxtc2Vuc29ycyBBUEkuCisKKzIwMDctMTEtMTQgMTI6MTkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmM6CisKKyAgIEZpeCBtaXNsZWFkaW5nIGRlYnVnIG91dHB1dCBtZXNzYWdlLgorCisyMDA3LTExLTEzIDEzOjU5ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaDoKKworICAgUHJlbGltaW5hcnkgcmUtd29ya2luZyBvZiB0aGUgTE0tU0VOU09SUy1NSUIsIHRvIHNlcGFyYXRlIG91dAorICAgdGhlIHNlbnNvciBoYXJkd2FyZSBwcm9jZXNzaW5nIGZyb20gdGhlIE1JQiB0YWJsZXMgdGhlbXNlbHZlcy4KIAogMjAwNy0xMS0wOCAyMzoxNyAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzoKLSAgICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDE4MjQxOTY6IHtpZk9wZXJTdGF0dXMsaXBBZEVudElmSW5kZXh9Ci0gICAgIHJlcG9ydGVkIGluY29ycmVjdGx5Ci0gICAgIFBhdGNoIHN1cHBsaWVkIGJ5IEFuZGVycyBQZXJzc29uLiBGaXhlcyBCdWdzIDE4MjIyNzUgYW5kIDE4MTkxODkuCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzoKKworICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDE4MjQxOTY6IHtpZk9wZXJTdGF0dXMsaXBBZEVudElmSW5kZXh9CisgICByZXBvcnRlZCBpbmNvcnJlY3RseQorICAgUGF0Y2ggc3VwcGxpZWQgYnkgQW5kZXJzIFBlcnNzb24uIEZpeGVzIEJ1Z3MgMTgyMjI3NSBhbmQgMTgxOTE4OS4KKworMjAwNy0xMC0yNiAyMToyMiAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oOgorCisgICBORVdTOiBzbm1wZDogQWRkZWQgc3VwcG9ydCBmb3IgYSB1c2VyIHByb3ZpZGVkIGxlbmd0aCB2YXJpYWJsZQorICAgYW5kIEMgc3RyaW5nIHZhbHVlcyB0byB0aGUgd2F0Y2hlciBoZWxwZXIuCisKKzIwMDctMTAtMTYgMjI6MzkgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsICAgCisgICAgICBzbm1wbGliL3NubXBTVEREb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIFVzZSAlcCB0byBwcmludCBwb2ludGVycy4gRG8gbm90IHVzZSAlcCB0byBwcmludCBudW1iZXJzLgorCisyMDA3LTEwLTE2IDA3OjMxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTWFrZSB0aGUgbGlicmFyeSBidWlsZGFibGUgYXMgQyBhZ2Fpbi4KIAogMjAwNy0xMC0xNiAwNzoxNyAgbWFnZnIKIAotICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsCi0gICAgIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgotICAgICBDSEFOR0VTOiBtaXNjOiBhdm9pZCBjYWxsaW5nIGRlYnVnIG1hY3JvcyB3aXRoIHRvbyBtYW55Ci0gICAgIGFyZ3VtZW50cy4KKyAgICogIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogbWlzYzogYXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB0b28gbWFueQorICAgYXJndW1lbnRzLgogCiAyMDA3LTEwLTE2IDA2OjE4ICBtYWdmcgogCi0gICAqIHNubXBsaWIvc25tcF9zZXJ2aWNlLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKLSAgICAgTWFrZSB0aGUgbGlicmFyeSBidWlsZGFibGUgYXMgQysrIGFnYWluLgorICAgKiAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfc2VydmljZS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBNYWtlIHRoZSBsaWJyYXJ5IGJ1aWxkYWJsZSBhcyBDKysgYWdhaW4uCisKKzIwMDctMTAtMTUgMjA6NTIgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgZGVjbGFyZSBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldDsgaW5jbHVkZSBoZWFkZXIgZm9yIGl0CisgICBhcyBuZWVkZWQKIAogMjAwNy0xMC0xNSAyMDozOSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmM6Ci0gICAgIENvbnZlcnQgYW4gaW5maW5pdGUgbG9vcCB0byBhIGZpbml0ZSBvbmUuCi0gICAgIFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUuCisKKyAgIENvbnZlcnQgYW4gaW5maW5pdGUgbG9vcCB0byBhIGZpbml0ZSBvbmUuCisgICBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlLgogCiAyMDA3LTEwLTE0IDIyOjEwICBtYWdmcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLAotICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmM6Ci0gICAgIENIQU5HRVM6IG1pc2M6IEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIGZldyBhcmd1bWVudHMuCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jOgorCisgICBDSEFOR0VTOiBtaXNjOiBBdm9pZCBjYWxsaW5nIGRlYnVnIG1hY3JvcyB3aXRoIHRvbyBmZXcgYXJndW1lbnRzLgogCiAyMDA3LTEwLTE0IDIwOjUxICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTgxMTQ2OTogcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aCgpCi0gICAgIHJlYWRzIHBhc3QgbWFsbG9jJ2QgYnVmZmVyCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxODExNDY5OiByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKCkKKyAgIHJlYWRzIHBhc3QgbWFsbG9jJ2QgYnVmZmVyCiAKIDIwMDctMTAtMTQgMjA6NDEgIHRhbmRlcnMKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE4MTE0NjM6IHBlcmwgYXN5bmMgY2FsbGJhY2sgY29yZWR1bXAKLSAgICAgQ0hBTkdFUzogcGVybDogQlVHOiAxNjA2MDYyOiBwZXJsIGJ1bGt3YWxrIChhc3luYykgY29yZWR1bXAKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE4MTE0NjM6IHBlcmwgYXN5bmMgY2FsbGJhY2sgY29yZWR1bXAKKyAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTYwNjA2MjogcGVybCBidWxrd2FsayAoYXN5bmMpIGNvcmVkdW1wCiAKIDIwMDctMTAtMTQgMTk6MDcgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTgwNjMzNjogZml4IC1MUyBvcHRpb24gcGFyc2luZworCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTgwNjMzNjogZml4IC1MUyBvcHRpb24gcGFyc2luZwogCiAyMDA3LTEwLTE0IDEyOjEyICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzoKLSAgICAgZml4IGNvbW1lbnQKKworICAgZml4IGNvbW1lbnQKIAogMjAwNy0xMC0xMyAyMzoyOCAgdGFuZGVycwogCiAgICAqIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0OgotICAgICBDSEFOR0VTOiB0ZXN0OiBlbmhhbmNlIHNubXBuZXRzdGF0IHRlc3QgdG8gY2hlY2sgdGNwVGFibGUgaW4gVENQCi0gICAgIG1vZGUKKworICAgQ0hBTkdFUzogdGVzdDogZW5oYW5jZSBzbm1wbmV0c3RhdCB0ZXN0IHRvIGNoZWNrIHRjcFRhYmxlIGluIFRDUAorICAgbW9kZQogCiAyMDA3LTEwLTEzIDIyOjI4ICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgotICAgICBDSEFOR0VTOiBTb2xhcmlzOiBCVUc6IDE4MTA4MTQ6IHRjcFRhYmxlIG1pc3NpbmcgZW50cmllcyBhbmQKLSAgICAgd3JvbmcgcG9ydHMKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6CisKKyAgIENIQU5HRVM6IFNvbGFyaXM6IEJVRzogMTgxMDgxNDogdGNwVGFibGUgbWlzc2luZyBlbnRyaWVzIGFuZAorICAgd3JvbmcgcG9ydHMKIAogMjAwNy0xMC0xMiAyMTo0NiAgdGFuZGVycwogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKLSAgICAgQ0hBTkdFUzogU29sYXJpczogI2RlZmluZSBORVdfTUlCX0NPTVBMSUFOVCB0byBzdXBwb3J0IFNvbGFyaXMKLSAgICAgMTBVNCsKKworICAgQ0hBTkdFUzogU29sYXJpczogI2RlZmluZSBORVdfTUlCX0NPTVBMSUFOVCB0byBzdXBwb3J0IFNvbGFyaXMKKyAgIDEwVTQrCiAKIDIwMDctMTAtMTEgMjA6NDYgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBsZWFrIG1lbW9yeSB3aGVuZXZlciBhbiB1ZHAgYWRkcmVzcyBpcwotICAgICBmb3JtYXR0ZWQuCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBsZWFrIG1lbW9yeSB3aGVuZXZlciBhbiB1ZHAgYWRkcmVzcyBpcworICAgZm9ybWF0dGVkLgorCisyMDA3LTEwLTAzIDAxOjAyICBhbGV4X2IKKworICAgKiAgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCB3aW4zMi9kaXN0L1JFQURNRS50eHQsICAgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2ksICAgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6CisKKyAgIC1GaXggZm9yIGJ1ZyAxNzY4Nzk3LiBOU0lTIEluc3RhbGxlciBzY3JpcHQgbm93IHdhcm5zIHRoZSB1c2VyIGlmCisgICB0aGUgUEFUSAorICAgaXMgPiAxMDI0IGFzIE5TSVMgY2FuIG5vdCBoYW5kbGUgdmFyaWFibGVzIGxhcmdlciB0aGFuIDEwMjQuCisgICAtVXBkYXRlcyB0byBidWlsZCBpbnN0cnVjdGlvbnMuCiAKIDIwMDctMDktMzAgMjA6NTkgIG1hZ2ZyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oLCBzbm1wbGliL3NubXBfYXBpLmMsCi0gICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKLSAgICAgQ0hBTkdFUzogQlVHOiAxODAxODM1OiBBZGRlZCB0aGUgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlIGRlZmF1bHQKLSAgICAgdHJhbnNwb3J0cyBmb3IgYW4gYXBwbGljYXRpb24uIE9uIG9wZW4gdGhlIGRpZmZlcmVudCB0cmFuc3BvcnRzCi0gICAgIHdpbGwgYmUgdHJpZWQgaW4gb3JkZXIuIEFzIGEgY29uc2VxdWVuY2Ugc25tcCBhbmQgc25tcHRyYXAgbm93Ci0gICAgIHdpbGwgdHJ5IGZpcnN0IHVkcCBhbmQgdGhlbiB1ZHA2IGFuZCBhZ2VudHggd2lsIHRyeSBmaXJzdCB1bml4Ci0gICAgIGFuZCB0aGVuIHRjcC4KKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9zZXJ2aWNlLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgQ0hBTkdFUzogQlVHOiAxODAxODM1OiBBZGRlZCB0aGUgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlIGRlZmF1bHQKKyAgIHRyYW5zcG9ydHMgZm9yIGFuIGFwcGxpY2F0aW9uLiBPbiBvcGVuIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cworICAgd2lsbCBiZSB0cmllZCBpbiBvcmRlci4gQXMgYSBjb25zZXF1ZW5jZSBzbm1wIGFuZCBzbm1wdHJhcCBub3cKKyAgIHdpbGwgdHJ5IGZpcnN0IHVkcCBhbmQgdGhlbiB1ZHA2IGFuZCBhZ2VudHggd2lsIHRyeSBmaXJzdCB1bml4CisgICBhbmQgdGhlbiB0Y3AuCiAKIDIwMDctMDktMjkgMTM6MTAgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgdHJ5IHRvIGxvb2sgdXAgZW1wdHkgc3RyaW5ncyBhcwotICAgICBob3N0bmFtZXMgZm9yIElQdjYKLSAgICAgQWRkaXRpbmFsbHksIHByaW50IHdoYXQgc3RyaW5nIGZpbGVkIHRvIHJlc29sdmUgdXNpbmcgZ2V0YWRkcmluZm8KLSAgICAgZm9yIElQdjYKKworICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IHRyeSB0byBsb29rIHVwIGVtcHR5IHN0cmluZ3MgYXMKKyAgIGhvc3RuYW1lcyBmb3IgSVB2NgorICAgQWRkaXRpbmFsbHksIHByaW50IHdoYXQgc3RyaW5nIGZpbGVkIHRvIHJlc29sdmUgdXNpbmcgZ2V0YWRkcmluZm8KKyAgIGZvciBJUHY2CisKKzIwMDctMDktMjkgMDY6MjYgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODA0NDQ1OiBmcm9tIGFwZXJzc29uOiBIaWdoIG9yZGVyIGJpdHMgb2YKKyAgIEhDSW5PY3RldHMgbm90IHNldCBvbiBTb2xhcmlzCiAKIDIwMDctMDktMjQgMjA6NDMgIGhhcmRha2VyCiAKICAgICogQ09QWUlORzoKLSAgICAgeWVhciB1cGRhdGUKKworICAgeWVhciB1cGRhdGUKKworMjAwNy0wOS0yMyAwNjowMyAgdGFuZGVycworCisgICAqIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIGZpeCAjZWxpZgorCisyMDA3LTA5LTIxIDIyOjA0ICB0YW5kZXJzCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYXR0ZW1wdCB0byBmaXggYnVpbGQgZm9yIFNvbGFyaXMvQUlYL0hQLVVYCisgICBicm9rZW4gYnkgcjE2Njg0CiAKIDIwMDctMDktMjAgMjE6NTUgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc0NjgzMTogZnJvbSBjdW5uaWpkOiBmaXggcHJvY2VzcwotICAgICBjaGVja2luZyByYWNlCi0gICAgIGNvbmRpdGlvbiB1bmRlciBMaW51eCBhbmQgcGxhdGZvcm0gI2lmZGVmcworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NDY4MzE6IGZyb20gY3VubmlqZDogZml4IHByb2Nlc3MKKyAgIGNoZWNraW5nIHJhY2UKKyAgIGNvbmRpdGlvbiB1bmRlciBMaW51eCBhbmQgcGxhdGZvcm0gI2lmZGVmcwogCiAyMDA3LTA5LTE5IDIxOjA5ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogQ292ZXJpdHkgIzE4MzogZml4IG1lbW9yeSBsZWFrIGlmCi0gICAgIElQX1BLVElORk8gZmFpbHMKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiBDb3Zlcml0eSAjMTgzOiBmaXggbWVtb3J5IGxlYWsgaWYKKyAgIElQX1BLVElORk8gZmFpbHMKKworMjAwNy0wOS0xOSAxOTo1NyAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBGaXggbWlzbnVtYmVyaW5ncyBvZiBzdGVwcy4KKyAgIEl0IGlzICpzbyogZGlmZmljdWx0IHRvIGZpbmQgcHJvcGVybHkgbnVtZXJhdGUgc3RhZmYgdGhlc2UKKyAgIGRheXMuLi4uCiAKIDIwMDctMDktMTYgMDk6NTEgIG1hZ2ZyCiAKICAgICogbG9jYWwvbWliMmMtdXBkYXRlOgotICAgICBSZW1vdmUgYmFzaGlzbXMuIFRoaXMgaXMgbmV0YnNkIHBhdGNoLWV0IGZyb20gYnVnIDE3NDU0MDQuCisKKyAgIFJlbW92ZSBiYXNoaXNtcy4gVGhpcyBpcyBuZXRic2QgcGF0Y2gtZXQgZnJvbSBidWcgMTc0NTQwNC4KIAogMjAwNy0wOS0xNiAwOTo0NSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jOgotICAgICBVc2UgY29uc3QgY2hhciogZm9yIHRlbXBvcmFyeSBjb25zdGFudCBzdHJpbmcgdmFyaWFibGUuIFRoaXMgaXMKLSAgICAgbmV0YnNkIHBhdGNoLWVhIGZyb20gYnVnIDE3NDU0MDQuCisKKyAgIFVzZSBjb25zdCBjaGFyKiBmb3IgdGVtcG9yYXJ5IGNvbnN0YW50IHN0cmluZyB2YXJpYWJsZS4gVGhpcyBpcworICAgbmV0YnNkIHBhdGNoLWVhIGZyb20gYnVnIDE3NDU0MDQuCiAKIDIwMDctMDktMTYgMDk6NDAgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBVc2UgdGhlIG5hdHVyYWwgdHlwZSBvZiBpbl9hZGRyX3QncyBmb3IgY29tcGFyaXNpb25zLiBUaGlzIGlzCi0gICAgIG5ldGJzZCBwYXRjaC1lYSBmcm9tIGJ1ZyAxNzQ1NDA0LgorCisgICBVc2UgdGhlIG5hdHVyYWwgdHlwZSBvZiBpbl9hZGRyX3QncyBmb3IgY29tcGFyaXNpb25zLiBUaGlzIGlzCisgICBuZXRic2QgcGF0Y2gtZWEgZnJvbSBidWcgMTc0NTQwNC4KIAogMjAwNy0wOS0xNiAwNzowNiAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmM6Ci0gICAgIENIQU5HRVM6IEJVRzogMTc5MzU0NTogVGFrZSB0aGUgbmFtZSBmcm9tIHRoZSBzb2NrYWRkcl91biBpbgotICAgICBvcmRlciB0byBhdm9pZCB0cmFuc3BvcnQgc3BlY2lmaWVycyBhbmQgb3RoZXIgZGVjb3JhdGlvbnMuCiAKLTIwMDctMDktMTQgMTQ6NDQgIGR0czEyCisgICBDSEFOR0VTOiBCVUc6IDE3OTM1NDU6IFRha2UgdGhlIG5hbWUgZnJvbSB0aGUgc29ja2FkZHJfdW4gaW4KKyAgIG9yZGVyIHRvIGF2b2lkIHRyYW5zcG9ydCBzcGVjaWZpZXJzIGFuZCBvdGhlciBkZWNvcmF0aW9ucy4KKworMjAwNy0wOS0xNCAxMzoxOCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGhlYWRlciBmb3Igc3dydW4gcmV3cml0ZQorCisyMDA3LTA5LTE0IDEzOjE2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gYWRkIHV0aWxpdHkgbWFjcm8KKyAgIC0gYWN0aXZhdGUgbmV3IGhvc3QgcmVzb3VyY2UgcmV3cml0ZXMKKworMjAwNy0wOS0xNCAxMzoxMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGNvbmZpZ19yZXF1aXJlIGZvciBuZXcgcmV3cml0ZXMsIGlmIGVuYWJsZWQKKworMjAwNy0wOS0xNCAxMzoxMSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmM6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gYWRkL2ZpeCBkaXNrL3BhcnRpdGlvbiB0YWJsZXMgb24gZGFyd2luCisKKzIwMDctMDktMTQgMTM6MDkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGFkZCBoclNXSW5zdGFsbGVkVGFibGUgZm9yIGRhcndpbgorCisyMDA3LTA5LTE0IDA4OjQ0ICBkdHMxMgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2U6Ci0gICAgIFN5bmNoIHdpdGggbWFpbiB0cnVuayByZWxlYXNlIHNjcmlwdC4KKworICAgUHJvdGVjdCBhZ2FpbnN0IHVuZXhwZWN0ZWQgY29tbWFuZCBhcmd1bWVudHMuCisKKzIwMDctMDktMTQgMDg6MDAgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgRG9jdW1lbnQgdXNlIG9mICJzdm4gZXhwb3J0IiByYXRoZXIgdGhhbiAic3ZuIGNoZWNrb3V0Ii4KKyAgIENvdmVyIGdlbmVyYXRpb24gb2YgdGhlIHppcCBhcmNoaXZlIGFzIHdlbGwgYXMgdGhlIHRhcmJhbGwuCiAKIDIwMDctMDktMTMgMjE6MjUgIHRhbmRlcnMKIAogICAgKiBSRUFETUU6Ci0gICAgIGRyb3Agb2Jzb2xldGUgbWlycm9ycworCisgICBkcm9wIG9ic29sZXRlIG1pcnJvcnMKKworMjAwNy0wOS0xMyAxNzoyOSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3MsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2Rhcndpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGhvc3QgcmVzb3VyY2VzIFNXUnVuIGFuZCBTV1J1blBlcmYgVGFibGUgZm9yIGRhcndpbjkKKworMjAwNy0wOS0xMyAxNzoyMiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gaW1wcm92ZSBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBpbiByZWdpc3RyYXRpb24gZnVuY3Rpb25zCisKKzIwMDctMDktMTMgMTc6MTkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gZm9yIGRhcndpbjksIHJleGVjIGFmdGVyIGZvcmsgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIG1hY2gKKyAgIGNhbGxzCisKKzIwMDctMDktMTIgMTg6NTEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIG5ldyB1dGlsaXR5IGZ1bmN0aW9uIHRvIHJlYWQgYSBkaXJlY3RvcnkgaGllcmFyY3kgaW50byBhCisgICBjb250YWluZXIKKworMjAwNy0wOS0xMiAxNzo1NSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIG5ldyBzdHJpbmcgY29tcGFyZSBjYWxsYmFjaworCisyMDA3LTA5LTEyIDE3OjUzICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBuZXcgbmV0c25tcF9jYWNoZV9mcmVlIGZ1bmN0aW9uCisKKzIwMDctMDktMTIgMTc6NDYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBhZGQgbWlzc2luZyBuZXdsaW5lIGluIGRlYnVnIG1zZworCisyMDA3LTA5LTEyIDE3OjQyICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZjoKKworICAgUGF0Y2hlcyBmcm9tIEFwcGxlCisgICAtIGFkZCBvcHRpb25hbCBjYWNoZQorICAgLSBjaGVjay9oYW5kbGUgZXJyb3JzIGZvciBhbGwgZnVuY3Rpb25zIGluIGluaXQgZnVuYworICAgLSB0eXBlZGVmIGdlbmVyYXRlZCBzdHJ1Y3QKKyAgIC0gc2tpcCBwcm9jZXNzZWQgcmVxdWVzdHMKKyAgIC0gY2hlY2sgZm9yIG51bGwgd2hlbiBleHRyYWN0aW5nIHJvdworCisyMDA3LTA5LTEyIDE3OjM1ICByc3RvcnkKKworICAgKiBDT1BZSU5HOgorCisgICBhZGQgbmV3IGNvcHlyaWdodC9jb250cmlidXRvcgorCisyMDA3LTA5LTA1IDIwOjEyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgQ29tYmluZSBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c3tsb2MsY29uLG5hbWV9IGludG8gb25lIGZ1bmN0aW9uCisgICBzaW5jZSB0aGV5IGFsbCBkbyB0aGUgc2FtZSB0aGluZwogCiAyMDA3LTA4LTI1IDE0OjI0ICBtYWdmcgogCi0gICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oOgotICAgICBNYWtlIG1vc3Qgb2Ygbm90aWZpY2F0aW9uX2xvZyBzdGF0aWMuIE1pbmltaXplIHRoZSBoZWFkZXIgZmlsZS4KKyAgICogIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaDoKKworICAgTWFrZSBtb3N0IG9mIG5vdGlmaWNhdGlvbl9sb2cgc3RhdGljLiBNaW5pbWl6ZSB0aGUgaGVhZGVyIGZpbGUuCiAKIDIwMDctMDgtMjIgMjE6NTYgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgotICAgICBORVdTOiBhZ2VudDogc3VwcHJlc3MgYW5ub3lpbmcgInJlZ2lzdHJhdGlvbiAhPSBkdXBsaWNhdGUiCi0gICAgIHdhcm5pbmcgZm9yIHJvb3Qgb2lkcwotICAgICAob3RoZXJ3aXNlLCB5b3UnbGwgZ2V0IHRoaXMgbWVzc2FnZSBvbiBhbG1vc3QgZXZlcnkgc3RhcnR1cCkKKworICAgTkVXUzogYWdlbnQ6IHN1cHByZXNzIGFubm95aW5nICJyZWdpc3RyYXRpb24gIT0gZHVwbGljYXRlIgorICAgd2FybmluZyBmb3Igcm9vdCBvaWRzCisgICAob3RoZXJ3aXNlLCB5b3UnbGwgZ2V0IHRoaXMgbWVzc2FnZSBvbiBhbG1vc3QgZXZlcnkgc3RhcnR1cCkKIAogMjAwNy0wOC0yMCAwODowNiAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKLSAgICAgTkVXUzogc25tcGxpYjogZml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gc3ByaW50ZiBmb3IKLSAgICAgVURQL0lQdjYKIAotMjAwNy0wOC0xNyAwOTowOCAgZHRzMTIKKyAgIE5FV1M6IHNubXBsaWI6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNwcmludGYgZm9yCisgICBVRFAvSVB2NgorCisyMDA3LTA4LTE3IDA5OjEwICBkdHMxMgogCiAgICAqIEZBUToKLSAgICAgU3luY2ggd2l0aCBtYWluIGRldmVsb3BtZW50IChhbmQgb24tbGluZSkgRkFRIHRleHQuCisKKyAgIFN1YnZlcnNpb24sIG5vdCBDVlMuCiAKIDIwMDctMDgtMTcgMDg6NTkgIGR0czEyCiAKICAgICogRkFROgotICAgICBDbGFyaWZ5IGhhbmRsaW5nIG9mIHVua25vd24gY29tbXVuaXRpZXMKKworICAgQ2xhcmlmeSBoYW5kbGluZyBvZiB1bmtub3duIGNvbW11bml0aWVzCiAKIDIwMDctMDgtMTYgMTU6MzYgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0gICAgIERvbid0IGp1c3QgcmVwb3J0IHRoZSBwcm9ibGVtIC0gaXQgbWlnaHQgYmUgc2Vuc2libGUgdG8gYXZvaWQKLSAgICAgY3Jhc2hpbmcgdGhlIGFnZW50IGFzIHdlbGwhCisKKyAgIERvbid0IGp1c3QgcmVwb3J0IHRoZSBwcm9ibGVtIC0gaXQgbWlnaHQgYmUgc2Vuc2libGUgdG8gYXZvaWQKKyAgIGNyYXNoaW5nIHRoZSBhZ2VudCBhcyB3ZWxsIQogCiAyMDA3LTA4LTE2IDE1OjM1ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NDQxNTc6IFJlcG9ydCBkdXBsaWNhdGUgImV4dGVuZC9leGVjIgotICAgICBpZGVudGlmaWVycy4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzQ0MTU3OiBSZXBvcnQgZHVwbGljYXRlICJleHRlbmQvZXhlYyIKKyAgIGlkZW50aWZpZXJzLgogCiAyMDA3LTA4LTE2IDE1OjI0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhcHBzL3NubXB0cmFwZF9kcy5oOgotICAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNzQ2OTkyOiBJbXByb3ZlIHNubXB0cmFwZAotICAgICBhY2Nlc3MtY29udHJvbCBlcnJvciBtZXNzYWdlcy4KKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTc0Njk5MjogSW1wcm92ZSBzbm1wdHJhcGQKKyAgIGFjY2Vzcy1jb250cm9sIGVycm9yIG1lc3NhZ2VzLgogCiAyMDA3LTA4LTE2IDE0OjEyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUyOTM0OiBGaXggb2ZmLWJ5LW9uZSBxc29ydCBlcnJvciBpbgotICAgICB0YWJsZSB1dGlsaXRpZXMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MjkzNDogRml4IG9mZi1ieS1vbmUgcXNvcnQgZXJyb3IgaW4KKyAgIHRhYmxlIHV0aWxpdGllcy4KIAogMjAwNy0wOC0xNiAxMzozMSAgZHRzMTIKIAogICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQzNzogRml4IGVycm9yIGluZGV4IG9uIGZhaWxpbmcgU0VUCi0gICAgIHJlcXVlc3RzCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQzNzogRml4IGVycm9yIGluZGV4IG9uIGZhaWxpbmcgU0VUCisgICByZXF1ZXN0cwogCiAyMDA3LTA4LTE2IDEzOjI1ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDQ5OiBGaXggQWdlbnRYIGVycm9yIHByb3BhZ2F0aW9uCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQ0OTogRml4IEFnZW50WCBlcnJvciBwcm9wYWdhdGlvbgogCiAyMDA3LTA4LTE2IDEyOjM0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0NjM6IEZpeCBBZ2VudFggc3ViYWdlbnQgcGluZyBhbGFybQotICAgICBoYW5kbGluZworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0NjM6IEZpeCBBZ2VudFggc3ViYWdlbnQgcGluZyBhbGFybQorICAgaGFuZGxpbmcKIAogMjAwNy0wOC0xNiAxMjoxMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1ODIwODogRml4IG1lbW9yeSBsZWFrCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1ODIwODogRml4IG1lbW9yeSBsZWFrCiAKIDIwMDctMDgtMTYgMTI6MDMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NzQ2MTI6IE1vcmUgcmVzaWxpZW50IHByb2Nlc3Mgc3RhdHVzCi0gICAgIGhhbmRsaW5nCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc3NDYxMjogTW9yZSByZXNpbGllbnQgcHJvY2VzcyBzdGF0dXMKKyAgIGhhbmRsaW5nCiAKIDIwMDctMDgtMTYgMTE6NTggIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNzc1MTI0OiBGaXggY2xpZW50YWRkciBmdW5jdGlvbmFsaXR5CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNzc1MTI0OiBGaXggY2xpZW50YWRkciBmdW5jdGlvbmFsaXR5CiAKIDIwMDctMDgtMTYgMDk6MzggIGR0czEyCiAKICAgICogc25tcGxpYi9wYXJzZS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTc2ODI4NTogQ291bnQgTUlCIGZpbGVzIGNvcnJlY3RseSBpbgotICAgICBhZGRfbWliZGlyKCkKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE3NjgyODU6IENvdW50IE1JQiBmaWxlcyBjb3JyZWN0bHkgaW4KKyAgIGFkZF9taWJkaXIoKQogCiAyMDA3LTA4LTE2IDA5OjM1ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkLmM6Ci0gICAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE3Njc3MjU6IENsb3NlIGFsbCBub24gc3RhbmRhcmQgZmlsZQotICAgICBoYW5kbGVzCisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE3Njc3MjU6IENsb3NlIGFsbCBub24gc3RhbmRhcmQgZmlsZQorICAgaGFuZGxlcwogCiAyMDA3LTA4LTE2IDA5OjAwICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlLmM6Ci0gICAgIERlY2xhcmUgaW5pdGlhbGlzYXRpb24gcm91dGluZSBjb3JyZWN0bHksIGFuZCBvbWl0IHVudXNlZAotICAgICB2YXJpYWJsZXMuCi0gICAgIFBhdGNoIGZyb20gTWFnbnVzIEZyb21yZWlkZS4KKworICAgRGVjbGFyZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lIGNvcnJlY3RseSwgYW5kIG9taXQgdW51c2VkCisgICB2YXJpYWJsZXMuCisgICBQYXRjaCBmcm9tIE1hZ251cyBGcm9tcmVpZGUuCiAKIDIwMDctMDgtMTYgMDg6NTUgIGR0czEyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oOgotICAgICBSZWFkIGluIGFnZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKmJlZm9yZSogdGhlIGhlYWRlcgotICAgICBmaWxlcyB0aGF0IG1pZ2h0IHJlbHkgb24gdGhlbS4KKworICAgUmVhZCBpbiBhZ2VudCBjb25maWd1cmF0aW9uIHNldHRpbmdzICpiZWZvcmUqIHRoZSBoZWFkZXIKKyAgIGZpbGVzIHRoYXQgbWlnaHQgcmVseSBvbiB0aGVtLgorCisyMDA3LTA4LTA1IDE2OjE2ICBhbGV4X2IKKworICAgKiB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIHdpbjMyL2Rpc3QvUkVBRE1FLnR4dDoKKworICAgQ2hhbmdlIHdpbjMyIGJ1aWxkIHJlYWRtZSBmaWxlcyB0byBDUkxGLgorCisyMDA3LTA4LTA1IDE0OjE2ICBhbGV4X2IKKworICAgKiB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQ6CisKKyAgIFdpbjMyOiBDaGFuZ2UgYnVpbGQgZG9jcyB0byB1c2UgZHluYW1pYyAoRExMKSBpbnN0ZWFkIG9mIHN0YXRpYy4KIAogMjAwNy0wOC0wMiAxMzo0NiAgZHRzMTIKIAogICAgKiBtaWJzL05FVC1TTk1QLUVYQU1QTEVTLU1JQi50eHQ6Ci0gICAgIEl0IG1pZ2h0IGJlIHNsaWdodGx5IGxlc3MgY29uZnVzaW5nIGlmIHRoZSBuZXRTbm1wRXhhbXBsZVN0cmluZwotICAgICBNSUIgb2JqZWN0IGRpZCBhY3R1YWxseSB0YWtlIHN0cmluZyB2YWx1ZXMuIFBpY2t5LCBJIGtub3cuLi4uCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEl0IG1pZ2h0IGJlIHNsaWdodGx5IGxlc3MgY29uZnVzaW5nIGlmIHRoZSBuZXRTbm1wRXhhbXBsZVN0cmluZworICAgTUlCIG9iamVjdCBkaWQgYWN0dWFsbHkgdGFrZSBzdHJpbmcgdmFsdWVzLiBQaWNreSwgSSBrbm93Li4uLgogCi1DaGFuZ2VzOiBWNS00LXBhdGNoZXMgYnJhbmNoIGNyZWF0ZWQgLT4gVjUuNC4xCisyMDA3LTA3LTI4IDEzOjAyICByc3RvcnkKIAotMjAwNy0wNy0yNyAxNzowMiAgaGFyZGFrZXIKKyAgICogZGlzdC9zdm51cDoKIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEgKQotCi0yMDA3LTA3LTI3IDE3OjAxICBoYXJkYWtlcgotCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMjcgMTY6NTggIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICByZW1vdmUgYm9ndXMgZW1wdHkgKiBsaW5lcyBmcm9tIHRoZSBDaGFuZ2VMb2cKLQotMjAwNy0wNy0yNyAxNjo1NCAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIGZpeCB2ZXJzaW9uIG51bWJlcnMgaW4gQ2hhbmdlTG9nCi0KLTIwMDctMDctMjcgMTY6NTQgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTI3IDE2OjE1ICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNy0yNyAxNjoxMyAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMSApCisgICBmaXggdGFnIGV4dHJhY3Rpb247IGNoZWNrIGZvciBlbXB0eSB0YWcgZWFybGllcgogCiAyMDA3LTA3LTI1IDIyOjQxICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NjA2MzM6IGZpeCB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKIAotMjAwNy0wNy0yMiAwMDo1NSAgdGFuZGVycworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc2MDYzMzogZml4IHR5cG8gaW4gZGVidWcgbWVzc2FnZQogCi0gICAqIE5FV1M6Ci0gICAgIHJlbW92ZSBkdXBsaWNhdGUgZW50cnkKLQotMjAwNy0wNy0yMiAwMDo1MiAgdGFuZGVycwotCi0gICAqIE5FV1M6Ci0gICAgIGltcHJvdmUgTkVXUyBzZWN0aW9uIGZvciA1LjQuMQotCi0yMDA3LTA3LTIxIDE2OjE3ICBoYXJkYWtlcgotCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzQgKQotCi0yMDA3LTA3LTIxIDE2OjE2ICBoYXJkYWtlcgotCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMjEgMTY6MTMgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTIxIDE1OjA3ICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNy0yMSAxNTowNiAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzQgKQotCi0yMDA3LTA3LTIxIDE0OjUxICBoYXJkYWtlcgorMjAwNy0wNy0yMSAyMTozNiAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgcGF0Y2ggdG8gZml4IGZvcndhcmRpbmcgZW5jb2RpbmcKKworICAgQ0hBTkdFUzogc25tcGxpYjogZml4IGZvcndhcmRpbmcgZW5jb2RpbmcKIAogMjAwNy0wNy0yMCAwODoyMSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6Ci0gICAgIFR3ZWFrIHdhcm5pbmcgbWVzc2FnZSBmb3IgKG9sZC1zdHlsZSwgaW52YWxpZCBmb3JtYXQpICJleGVjIE9JRCIKLSAgICAgZGlyZWN0aXZlcy4KIAotMjAwNy0wNy0xOSAyMToxNiAgdGFuZGVycwotCi0gICAqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgY29uZmlndXJlLCBsdG1haW4uc2g6Ci0gICAgIE5FV1M6IGJ1aWxkOiB1cGRhdGUgdG8gbGlidG9vbCAxLjUuMjQgKGZyb20gMS41LjIyKQotICAgICBDSEFOR0VTOiBIUC1VWDogQlVHOiAxNzQyMjc4OiBjb21waWxlIGVycm9yIG9uIEhQLVVYIDExLjIzIChJQTY0KQotCi0yMDA3LTA3LTE5IDIxOjAxICBkdHMxMgotCi0gICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgYWdlbnQvc25tcGQuYzoKLSAgICAgQ2hlY2sgZm9yIHByZXNlbmNlIG9mICdjaG93bicgYW5kICdsb2NhbHRpbWVfcicgcm91dGluZXMgYmVmb3JlCi0gICAgIHVzaW5nIHRoZW0uCi0KLTIwMDctMDctMTkgMjE6MDAgIGR0czEyCi0KLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgQ29uZmlndXJlIGNoZWNrcyBmb3IgJ2Nob3duJyBhbmQgJ2xvY2FsdGltZV9yJyBmdW5jdGlvbnMKLQotMjAwNy0wNy0xNyAwMDoyMCAgaGFyZGFrZXIKLQotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMzICkKLQotMjAwNy0wNy0xNyAwMDoxOSAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMTcgMDA6MTcgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA3LTE3IDAwOjE2ICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMyApCisgICBUd2VhayB3YXJuaW5nIG1lc3NhZ2UgZm9yIChvbGQtc3R5bGUsIGludmFsaWQgZm9ybWF0KSAiZXhlYyBPSUQiCisgICBkaXJlY3RpdmVzLgogCiAyMDA3LTA3LTE2IDIzOjU5ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywKLSAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKLSAgICAgQXBwbHkgKGNvcnJlY3QpIHBhdGNoIGZyb20gTWFyY3VzIFJ1ZWNrZXJ0IHRvIHJlbW92ZSBhc3NlcnRzCi0gICAgIHVzaW5nIHNvcnQtby1pbGxlZ2FsIEMgc3RyaW5nIGNvbXBhcmVzCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgQXBwbHkgKGNvcnJlY3QpIHBhdGNoIGZyb20gTWFyY3VzIFJ1ZWNrZXJ0IHRvIHJlbW92ZSBhc3NlcnRzCisgICB1c2luZyBzb3J0LW8taWxsZWdhbCBDIHN0cmluZyBjb21wYXJlcwogCiAyMDA3LTA3LTE2IDIzOjU5ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywKLSAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKLSAgICAgUmVtb3ZlIHByZXZpb3VzIHBhdGNoIHdoaWNoIHdhcyB0aGUgd3JvbmcgdmVyc2lvbgorICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIFJlbW92ZSBwcmV2aW91cyBwYXRjaCB3aGljaCB3YXMgdGhlIHdyb25nIHZlcnNpb24KIAogMjAwNy0wNy0xNiAyMzo1NyAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsCi0gICAgIHNubXBsaWIvZGF0YV9saXN0LmM6Ci0gICAgIEFwcGx5IHBhdGNoIGZyb20gTWFyY3VzIFJ1ZWNrZXJ0IHRvIHJlbW92ZSBhc3NlcnRzIHVzaW5nCi0gICAgIHNvcnQtby1pbGxlZ2FsIEMgc3RyaW5nIGNvbXBhcmVzCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgQXBwbHkgcGF0Y2ggZnJvbSBNYXJjdXMgUnVlY2tlcnQgdG8gcmVtb3ZlIGFzc2VydHMgdXNpbmcKKyAgIHNvcnQtby1pbGxlZ2FsIEMgc3RyaW5nIGNvbXBhcmVzCisKKzIwMDctMDctMTMgMTk6MjcgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKKworICAgZ2VuZXJhdGUgemlwIGZpbGVzCiAKIDIwMDctMDctMTIgMjE6NTEgIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnBtOgotICAgICBmaXggc3ViYWdlbnQgZXhhbXBsZSAoZG9jdW1lbnRhdGlvbikKKworICAgZml4IHN1YmFnZW50IGV4YW1wbGUgKGRvY3VtZW50YXRpb24pCiAKIDIwMDctMDctMTIgMjE6MjcgIHRhbmRlcnMKIAogICAgKiBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjoKLSAgICAgc25tcF9zZXNzX3JlYWQgcmV0dXJucyBpbnQsIG5vdCB2b2lkCiAKLTIwMDctMDctMDcgMDA6MTcgIGhhcmRha2VyCi0KLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMiApCi0KLTIwMDctMDctMDcgMDA6MTcgIGhhcmRha2VyCi0KLSAgICogQ0hBTkdFUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0wNyAwMDoxMyAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMDcgMDA6MTEgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA3LTA3IDAwOjEwICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMiApCisgICBzbm1wX3Nlc3NfcmVhZCByZXR1cm5zIGludCwgbm90IHZvaWQKIAogMjAwNy0wNy0wNiAyMzozOSAgaGFyZGFrZXIKIAogICAgKiBNYWtlZmlsZS5ydWxlcywgTWFrZWZpbGUudG9wOgotICAgICBDSEFOR0VTOiBidWlsZDogdXNlIGxpYnRvb2wgY2xlYW4gZm9yIHJlbW92aW5nIGZpbGVzIHRvIGVuc3VyZSB3ZQotICAgICBkZWxldGUgYWxsIGxpYnRvb2wgdGVtcG9yYXJ5IGZpbGVzLgorCisgICBDSEFOR0VTOiBidWlsZDogdXNlIGxpYnRvb2wgY2xlYW4gZm9yIHJlbW92aW5nIGZpbGVzIHRvIGVuc3VyZSB3ZQorICAgZGVsZXRlIGFsbCBsaWJ0b29sIHRlbXBvcmFyeSBmaWxlcy4KKworMjAwNy0wNy0wNiAyMzozNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICB1c2UgYSByZWN1cnNpdmUgcmV2ZXJ0IGluc3RlYWQgb2Ygcm0vdXBkYXRlOyByZW1vdmUgZG91YmxlIC8gZnJvbQorICAgZWRpdGluZyBjYWxscwogCiAyMDA3LTA3LTA2IDIxOjIyICByc3RvcnkKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIHN0b3Agc2VhcmNoaW5nIHBhdGhzIHdoZW4gZG9uZQorCisgICBzdG9wIHNlYXJjaGluZyBwYXRocyB3aGVuIGRvbmUKIAogMjAwNy0wNy0wNiAyMToxNCAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgotICAgICBkbyBub3QgZnJlZSBpbnRlcmZhY2UgZW50cnkganVzdCBiZWNhdXNlIHdlIGNhbiBub3QgZ2V0IHN0YXRzIGZvcgotICAgICBpdAorCisgICBkbyBub3QgZnJlZSBpbnRlcmZhY2UgZW50cnkganVzdCBiZWNhdXNlIHdlIGNhbiBub3QgZ2V0IHN0YXRzIGZvcgorICAgaXQKIAogMjAwNy0wNy0wNiAxNTozMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAxNzQ1MTEzOiBIYW5kbGUgc2luZ2xlLWxpbmUgKGFuZCB6ZXJvLWxpbmUpCi0gICAgIG91dHB1dCBpbiBVQ0QgY29tcGF0YWJpbGl0eSBtb2RlLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHIDE3NDUxMTM6IEhhbmRsZSBzaW5nbGUtbGluZSAoYW5kIHplcm8tbGluZSkKKyAgIG91dHB1dCBpbiBVQ0QgY29tcGF0YWJpbGl0eSBtb2RlLgorCisyMDA3LTA3LTA2IDA5OjA4ICBkdHMxMgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0ggMTcyODI0NzogZnJvbSBNaXRzdXJ1IENoaW5lbjogY2xlYW5zIHVwCisgICB0aGUgaW50NjQgdHlwZSBjaGVja2luZyBhbmQgdXNhZ2UgZm9yIGJ1aWxkaW5nIHBhY2tldHMgZXNwZWNpYWxseQorICAgdW5kZXIgTVNWQy4KIAogMjAwNy0wNy0wNSAxNDo0NSAgcnN0b3J5CiAKICAgICogLiwgUkVBRE1FLm9zWDoKLSAgICAgcjIwMDQ0QGRoY3AyMTE6IHJzdG9yeSB8IDIwMDctMDctMDUgMTA6NDQ6MDEgLTA0MDAKLSAgICAgcmVtb3ZlIGRpc2FibGUtc3RhdGljIGZyb20gcmVjb21tZW5kZWQgb3B0aW9ucworCisgICByMjAwNDRAZGhjcDIxMTogcnN0b3J5IHwgMjAwNy0wNy0wNSAxMDo0NDowMSAtMDQwMAorICAgcmVtb3ZlIGRpc2FibGUtc3RhdGljIGZyb20gcmVjb21tZW5kZWQgb3B0aW9ucwogCiAyMDA3LTA3LTA1IDExOjA1ICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6Ci0gICAgIHNraXAgc3RhdHMgcGFyc2luZyBvbiBpbnRlcmZhY2VzIHdpdGggbm8gc3RhdGlzdGljcworCisgICBza2lwIHN0YXRzIHBhcnNpbmcgb24gaW50ZXJmYWNlcyB3aXRoIG5vIHN0YXRpc3RpY3MKKworMjAwNy0wNy0wNSAxMTowMSAgcnN0b3J5CisKKyAgICogZGlzdC9jaGVjay1hcGktY2hhbmdlOgorCisgICBjaGVjayBmb3IgZGlyIGV4aXN0ZW5jZQogCiAyMDA3LTA3LTA0IDIzOjI2ICB0YW5kZXJzCiAKICAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IHBlcmw6IGluc3RhbGwgZW1iZWRkZWQgcGVybCBpbml0IGZpbGVzIGZvcgotICAgICBzbm1wZC9zbm1wdHJhcGQgd2l0aCBtb2RlIDY0NCBpbnN0ZWFkIG9mIDc1NQorCisgICBDSEFOR0VTOiBwZXJsOiBpbnN0YWxsIGVtYmVkZGVkIHBlcmwgaW5pdCBmaWxlcyBmb3IKKyAgIHNubXBkL3NubXB0cmFwZCB3aXRoIG1vZGUgNjQ0IGluc3RlYWQgb2YgNzU1CiAKIDIwMDctMDctMDQgMjE6NDIgIHRhbmRlcnMKIAogICAgKiBSRUFETUUub3NYOgotICAgICBQZXJsIHByb2JsZW1zIChiZWxpZXZlZCB0byBiZSkgZml4ZWQKIAotMjAwNy0wNy0wMyAyMjozNiAgaGFyZGFrZXIKLQotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgQ0hBTkdFUzogbGlicmFyeTogUGF0Y2ggZnJvbSAiTWl0c3VydSBDaGluZW4iOiBjbGVhbnMgdXAgdGhlCi0gICAgIGludDY0IHR5cGUgY2hlY2tpbmcgYW5kIHVzYWdlIGZvciBidWlsZGluZyBwYWNrZXRzIGVzcGVjaWFsbHkKLSAgICAgdW5kZXIgTVNWQy4KKyAgIFBlcmwgcHJvYmxlbXMgKGJlbGlldmVkIHRvIGJlKSBmaXhlZAogCiAyMDA3LTA3LTAzIDEyOjU2ICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG06Ci0gICAgIHJlbW92ZSBleGVjdXRhYmxlIGZsYWcgZnJvbSBTVk4gcHJvcGVydGllcworCisgICByZW1vdmUgZXhlY3V0YWJsZSBmbGFnIGZyb20gU1ZOIHByb3BlcnRpZXMKKworMjAwNy0wNy0wMiAwNjo1MyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB2YWNtLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgb2lkIGRlY2xhcmF0aW9ucwogCiAyMDA3LTA3LTAyIDA2OjAyICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jOgotICAgICBBZGQgbWlzc2luZyByZXR1cm4gdmFsdWUgdG8gX210ZUV2ZW50X2ZpcmVfbm90aWZ5LgorCisgICBBZGQgbWlzc2luZyByZXR1cm4gdmFsdWUgdG8gX210ZUV2ZW50X2ZpcmVfbm90aWZ5LgogCiAyMDA3LTA3LTAyIDA1OjMxICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYzoKLSAgICAgUmVtb3ZlIHRoZSBkZWNsYXJhdGlvbiBvZiBhbiB1bmRlZmluZWQgc3RhdGljIGZ1bmN0aW9uLgogCi0yMDA3LTA3LTAxIDE5OjU5ICB0YW5kZXJzCisgICBSZW1vdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIHVuZGVmaW5lZCBzdGF0aWMgZnVuY3Rpb24uCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIG1pbm9yIGhlbHAgdGV4dCBmb3JtYXR0aW5nIGZpeAorMjAwNy0wNy0wMSAyMDozMiAgdGFuZGVycwogCi0yMDA3LTA2LTMwIDA1OjM0ICB0YW5kZXJzCisgICAqIGRpc3QvbnNiLW5pZ2h0bHksIGRpc3QvbnNiLXBhY2thZ2U6CiAKLSAgICogZGlzdC9uZXQtc25tcC5zcGVjOgotICAgICBhZGQgLS1lbmFibGUtYXMtbmVlZGVkIGlmIGJ1aWxkaW5nIHdpdGggZW1iZWRkZWQgUGVybCBzdXBwb3J0CisgICBtYWtlIGdldG9wdHMgd29yayBvbiBUcnU2NCBieSByZXNwYXduaW5nIGluIFBvc2l4IG1vZGUKIAotMjAwNy0wNi0zMCAwNDozNyAgaGFyZGFrZXIKKzIwMDctMDctMDEgMTk6NTYgIHRhbmRlcnMKIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMxICkKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbjoKIAotMjAwNy0wNi0zMCAwNDozNyAgaGFyZGFrZXIKKyAgIENIQU5HRVM6IGJ1aWxkOiAtLWRpc2FibGUtYXMtbmVlZGVkIG5vdyBhbGxvd3MgdG8gcmV2ZXJ0IHRvIHRoZQorICAgZm9ybWVyIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGxpbmtpbmcgbGlicGVybCB0byBhcHBsaWNhdGlvbnMKKyAgIHJhdGhlciB0aGFuIE5ldC1TTk1QIExpYnJhcmllcyAoaW4gY2FzZSBvZiBhbnkgcHJvYmxlbXMpCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKzIwMDctMDYtMzAgMDY6MTcgIGhhcmRha2VyCiAKLTIwMDctMDYtMzAgMDQ6MzYgIGhhcmRha2VyCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CiAKLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgYWN0dWFsbHkgY2FsbCByZW1vdmVmaWxlcwogCi0yMDA3LTA2LTMwIDA0OjM0ICBoYXJkYWtlcgorMjAwNy0wNi0yOCAyMzo1MCAgbWFnZnIKIAotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CiAKLTIwMDctMDYtMzAgMDQ6MzIgIGhhcmRha2VyCisgICBORVdTOiBzbm1wbGliOiBBZGRlZCBHQ0MgZm9ybWF0IGNoZWNraW5nIGF0dHJpYnV0ZXMgdG8gdGhlIGRlYnVnCisgICBmdW5jdGlvbnMuCiAKLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMxICkKKzIwMDctMDYtMjggMjM6MzcgIG1hZ2ZyCiAKLTIwMDctMDYtMjkgMjI6MTggIHRhbmRlcnMKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmM6CiAKLSAgICogUkVBRE1FLmFpeCwgUkVBRE1FLmlyaXgsIFJFQURNRS5zb2xhcmlzLCBhZ2VudC9NYWtlZmlsZS5pbiwKLSAgICAgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIG5ldC1zbm1wLWNvbmZpZy5pbjoKLSAgICAgTkVXUzogcGVybDogQlVHOiAxNjE5ODI3OiBsaW5rIGxpYm5ldHNubXBhZ2VudC9saWJuZXRzbm1wdHJhcGQKLSAgICAgKHJhdGhlciB0aGFuIHNubXBkL3NubXB0cmFwZCkgYWdhaW5zdCBsaWJwZXJsIHdoZW4gY29uZmlndXJlZAotICAgICB3aXRoIC0tZW5hYmxlLWFzLW5lZWRlZAorICAgUmVtb3ZlIGNhc3RzIG9mIHVudXNlZCB2YWx1ZXMKKworMjAwNy0wNi0yOCAyMzozNiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKIAogMjAwNy0wNi0yOCAyMjowOSAgdGFuZGVycwogCiAgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKLSAgICAgcmVuYW1lIGxhc3Qgb2NjdXJlbmNlIG9mIERFRkFVTFRfTUlCW0RJUl1TIHRvCi0gICAgIE5FVFNOTVBfREVGQVVMVF9NSUJbRElSXVMKKworICAgcmVuYW1lIGxhc3Qgb2NjdXJlbmNlIG9mIERFRkFVTFRfTUlCW0RJUl1TIHRvCisgICBORVRTTk1QX0RFRkFVTFRfTUlCW0RJUl1TCisKKzIwMDctMDYtMjggMDg6MTUgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgRG8gbm90IHRyYW5zZm9ybSB0aGUgaWdub3JlZCByZXN1bHQgb2YgcmVhbGxvY19mb3JtYXRfdHJhcAogCiAyMDA3LTA2LTI2IDIyOjEyICB0YW5kZXJzCiAKICAgICogYXBwcy9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IHdvcmsgYXJvdW5kIGxpYm5ldHNubXBhZ2VudC9saWJuZXRzbm1waGVscGVycwotICAgICBkZXBlbmRlbmN5IGlzc3VlcyB3aGVuIGxpbmtpbmcgc25tcHRyYXBkCisKKyAgIENIQU5HRVM6IGJ1aWxkOiB3b3JrIGFyb3VuZCBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcGhlbHBlcnMKKyAgIGRlcGVuZGVuY3kgaXNzdWVzIHdoZW4gbGlua2luZyBzbm1wdHJhcGQKIAogMjAwNy0wNi0yNiAyMTo0NSAgdGFuZGVycwogCiAgICAqIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogdXNlIExERkxBR1Mgd2hlbiBidWlsZGluZyBhZ2VudCwgaGVscGVycyBhbmQgbWliCi0gICAgIGxpYiB0byBiZSBjb25zaXN0ZW50IHdpdGggbGlibmV0bm1wCisKKyAgIENIQU5HRVM6IGJ1aWxkOiB1c2UgTERGTEFHUyB3aGVuIGJ1aWxkaW5nIGFnZW50LCBoZWxwZXJzIGFuZCBtaWIKKyAgIGxpYiB0byBiZSBjb25zaXN0ZW50IHdpdGggbGlibmV0bm1wCiAKIDIwMDctMDYtMjYgMjE6MjggIHRhbmRlcnMKIAogICAgKiBJTlNUQUxMOgotICAgICBtaW5vciB1cGRhdGVzCisKKyAgIG1pbm9yIHVwZGF0ZXMKKworMjAwNy0wNi0yNiAxNToxMCAgcnN0b3J5CisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgZG9uJ3QgaW5pdGlhbGl6ZSB2YXIgaW4gZXh0ZXJuIGRlY2w7IGluc3RlYWQsIGluaXRpYWxpemUgYWN0dWFsCisgICB2YXIKKworMjAwNy0wNi0yNSAyMToyOSAgdGFuZGVycworCisgICAqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgY29uZmlndXJlLCBsdG1haW4uc2g6CisKKyAgIE5FV1M6IGJ1aWxkOiB1cGRhdGUgdG8gbGlidG9vbCAxLjUuMjQgKGZyb20gMS41LjIyKQogCiAyMDA3LTA2LTI0IDEyOjU3ICB0YW5kZXJzCiAKLSAgICogYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIEhBVkVfU1NJWkVfVCBjbGVhbnVwCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEhBVkVfU1NJWkVfVCBjbGVhbnVwCiAKIDIwMDctMDYtMjMgMjI6NTYgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuaHB1eDExOgotICAgICBkb24ndCBzdWdnZXN0IC0td2l0aC1saWJzPS1sbm0KIAotMjAwNy0wNi0yMiAxNTowOSAgZHRzMTIKKyAgIGRvbid0IHN1Z2dlc3QgLS13aXRoLWxpYnM9LWxubQogCi0gICAqIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsCi0gICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwKLSAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsIHdpbjMyL2xpYnNkbGwuZHN3LAotICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsCi0gICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwKLSAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwLAotICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsCi0gICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsCi0gICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwKLSAgICAgd2luMzIvc25tcGRzZGsvc25tcGQuZHNwLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLAotICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsCi0gICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwKLSAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsCi0gICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwKLSAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwKLSAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwKLSAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLAotICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJzZGsuZHN3OgotICAgICBFbmZvcmNlIERPUy1zdHlsZSBsaW5lIGVuZGluZ3MsIHRvIGtlZXAgVmlzdWFsIFN0dWRpbyBoYXBweS4KKzIwMDctMDYtMjIgMTU6MDUgIGR0czEyCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgd2luMzIvbGlic2RsbC5kc3csICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgd2luMzIvc25tcGQvc25tcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRzZGsvc25tcGQuZHNwLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIEVuZm9yY2UgRE9TLXN0eWxlIGxpbmUgZW5kaW5ncywgdG8ga2VlcCBWaXN1YWwgU3R1ZGlvIGhhcHB5LgorCisyMDA3LTA2LTIxIDE0OjAxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgorCisgICBkZWZhdWx0IHRvIHVzaW5nIGlmVGFibGUgcmV3cml0ZXMKIAogMjAwNy0wNi0yMCAyMTozNCAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6Ci0gICAgIGZpeCB0eXBvCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CisKKyAgIGZpeCB0eXBvCiAKIDIwMDctMDYtMTkgMjI6MjMgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgZml4IFBlcmwtcmVsYXRlZCBhdXRvY29uZiBtZXNzYWdlcworCisgICBmaXggUGVybC1yZWxhdGVkIGF1dG9jb25mIG1lc3NhZ2VzCiAKIDIwMDctMDYtMTkgMTU6MDggIHRhbmRlcnMKIAogICAgKiBkaXN0L25ldC1zbm1wLnNwZWM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBhZGQgIkJ1aWxkUmVxdWlyZXM6IHBlcmwtRXh0VXRpbHMtRW1iZWQiIHRvIHRoZQotICAgICBzcGVjIGZpbGUsIGUuZy4gZm9yIEZlZG9yYSA3CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBhZGQgIkJ1aWxkUmVxdWlyZXM6IHBlcmwtRXh0VXRpbHMtRW1iZWQiIHRvIHRoZQorICAgc3BlYyBmaWxlLCBlLmcuIGZvciBGZWRvcmEgNwogCiAyMDA3LTA2LTE4IDIyOjI4ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBmaXggYnJva2VuIGNvbW1lbnQuCiAKLTIwMDctMDYtMTggMjI6MDQgIGhhcmRha2VyCi0KLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTMgKQotCi0yMDA3LTA2LTE4IDIyOjAzICBoYXJkYWtlcgotCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDYtMTggMjE6NTcgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgZml4IGJyb2tlbiBjb21tZW50LgogCiAyMDA3LTA2LTE4IDIxOjU0ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46Ci0gICAgIHJldmVydCBkb3VibGUgbGlua2luZyBvZiBsaWJuZXRzbW5wIHBhcnQgb2YgcGF0Y2ggdGhhdCB3YXMKLSAgICAgc3VwcG9zZWQgdG8gYmUgcHVsbGVkIGJvZmVyIGFwcGx5aW5nIGluIHIxNjUzOCAodGhhbmtzIHRhbmRlcnMKLSAgICAgZm9yIGNhdGNoaW5nIGl0KQogCi0yMDA3LTA2LTE4IDIxOjQ4ICBoYXJkYWtlcgotCi0gICAqIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKLQotMjAwNy0wNi0xOCAyMTo0NyAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDYtMTggMjE6NDYgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMyApCisgICByZXZlcnQgZG91YmxlIGxpbmtpbmcgb2YgbGlibmV0c21ucCBwYXJ0IG9mIHBhdGNoIHRoYXQgd2FzCisgICBzdXBwb3NlZCB0byBiZSBwdWxsZWQgYm9mZXIgYXBwbHlpbmcgaW4gcjE2NTM4ICh0aGFua3MgdGFuZGVycworICAgZm9yIGNhdGNoaW5nIGl0KQogCiAyMDA3LTA2LTE4IDIxOjM0ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIHNubXBsaWIvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBwYXRjaCBmcm9tIGFwcGxlIHRvIHNpbXBsaWZ5IG1ha2VmaWxlIHRhcmdldAotICAgICByZWZlcmVuY2VzIGluIHNvbWUgcnVsZXMuCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBwYXRjaCBmcm9tIGFwcGxlIHRvIHNpbXBsaWZ5IG1ha2VmaWxlIHRhcmdldAorICAgcmVmZXJlbmNlcyBpbiBzb21lIHJ1bGVzLgogCiAyMDA3LTA2LTE4IDIxOjE3ICBoYXJkYWtlcgogCiAgICAqIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgbWFuL3NubXBnZXQuMS5kZWY6Ci0gICAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gZml4IG1pbm9yIGRvY3VtZW50YXRpb24gYnVncy4KKworICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzLgogCiAyMDA3LTA2LTE4IDIxOjEzICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgotICAgICAKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKKworICAgCiAKIDIwMDctMDYtMTggMjE6MTIgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYzoKLSAgICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBpbXByb3ZlIG1lbW9yeSByZXBvcnRpbmcKKworICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBpbXByb3ZlIG1lbW9yeSByZXBvcnRpbmcKIAogMjAwNy0wNi0xOCAyMTowOSAgaGFyZGFrZXIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6Ci0gICAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gZml4IGNyb3NzLWNvbXBpbGUgYnVpbGRzIGluIGFwcGxlcwotICAgICBidWlsZCBlbnZpcm9ubWVudC4KKworICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggY3Jvc3MtY29tcGlsZSBidWlsZHMgaW4gYXBwbGVzCisgICBidWlsZCBlbnZpcm9ubWVudC4KIAogMjAwNy0wNi0xOCAyMDo1NCAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgotICAgICBDSEFOR0VTOiBwYXRjaDogMTczNzA4NTogZnJvbSBqc2FmcmFuZWs6IGZpeCB0aGUgLU0gc3dpdGNoIGZvcgotICAgICBtaWIgcGFyc2luZyBieSBsb2FkaW5nIGRlZmF1bHRzIGZpcnN0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBzZXQKLSAgICAgc28gaXQgZG9lcyBub3QgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBkZWZhdWx0cyBsYXRlci4KKworICAgQ0hBTkdFUzogcGF0Y2g6IDE3MzcwODU6IGZyb20ganNhZnJhbmVrOiBmaXggdGhlIC1NIHN3aXRjaCBmb3IKKyAgIG1pYiBwYXJzaW5nIGJ5IGxvYWRpbmcgZGVmYXVsdHMgZmlyc3QgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHNldAorICAgc28gaXQgZG9lcyBub3QgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBkZWZhdWx0cyBsYXRlci4KIAogMjAwNy0wNi0xOCAyMDo1MCAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgTkVXUzogcGVybDogcGF0Y2g6IDE3MjUwNDk6IGZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIKLSAgICAgdXNhZ2UuCisKKyAgIE5FV1M6IHBlcmw6IHBhdGNoOiAxNzI1MDQ5OiBmaXggYnVsa3dhbGsgaW4gY2FzZXMgb2Ygbm9uLXJlcGVhdGVyCisgICB1c2FnZS4KIAogMjAwNy0wNi0xOCAxNDoxMCAgdGFuZGVycwogCiAgICAqIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMOgotICAgICBDSEFOR0VTOiBwZXJsOiBmaXggcHJlcmVxdWlzaXRlcyBmb3IgTmV0U05NUDo6VHJhcFJlY2VpdmVyCisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeCBwcmVyZXF1aXNpdGVzIGZvciBOZXRTTk1QOjpUcmFwUmVjZWl2ZXIKIAogMjAwNy0wNi0xOCAxMzozOSAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBmaXggc3ludGF4IGVycm9yIGluIE5ldFNOTVA6OmFnZW50OjpTdXBwb3J0CisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeCBzeW50YXggZXJyb3IgaW4gTmV0U05NUDo6YWdlbnQ6OlN1cHBvcnQKKworMjAwNy0wNi0xNiAyMzowMSAgdGFuZGVycworCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIE5FV1M6IHBlcmw6IEJVRzogMTYxOTgyNzogbGluayBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcHRyYXBkCisgICAocmF0aGVyIHRoYW4gc25tcGQvc25tcHRyYXBkKSBhZ2FpbnN0IGxpYnBlcmwuCiAKIDIwMDctMDYtMTQgMTU6NDEgIHJzdG9yeQogCiAgICAqIGxvY2FsL21pYjJjLmNvbmY6Ci0gICAgIGZpeCB0eXBvIGluIHVzZXIgb3V0cHV0LCBhcyBub3RlZCBvbiBjb2RlcnMKKworICAgZml4IHR5cG8gaW4gdXNlciBvdXRwdXQsIGFzIG5vdGVkIG9uIGNvZGVycworCisyMDA3LTA2LTE0IDE1OjM2ICByc3RvcnkKKworICAgKiBkaXN0L2N2c3Nob3c6CisKKyAgIHVzZSAnc3ZuIGluZm8nIHRvIHF1ZXJ5IGZvciB1cmwKIAogMjAwNy0wNi0xNCAwNDozNyAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaDoKLSAgICAgQWRkIG1pc3NpbmcgYXJndW1lbnQgdHlwZSBpbiBvcmRlciB0byBzaWxlbmNlIGEgZ2NjIHdhcm5pbmcKKworICAgQWRkIG1pc3NpbmcgYXJndW1lbnQgdHlwZSBpbiBvcmRlciB0byBzaWxlbmNlIGEgZ2NjIHdhcm5pbmcKKworMjAwNy0wNi0xMyAwNjozNyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgRG8gbm90IHRyeSB0byBiZSBjbGV2ZXIgaW4gdGhlIGhhbmRpbmcgb2YgLWxrdm0gaW4gTEFHRU5UTElCUy4KKyAgIEluY2x1ZGUgaXQgaWYgYW55IHNvdWdodCBmdW5jdGlvbiBpcyBpbiBpdC4KIAogMjAwNy0wNi0xMSAxMDoxMSAgdGFuZGVycwogCiAgICAqIFJFQURNRS5haXg6Ci0gICAgIGRvY3VtZW50IHhsYzwtPmNjX3IgY29tcGlsZXIgaXNzdWVzIHdpdGggUGVybCBvbiBBSVggKHNlZSBidWcKLSAgICAgIzE2MDAwOTkpCisKKyAgIGRvY3VtZW50IHhsYzwtPmNjX3IgY29tcGlsZXIgaXNzdWVzIHdpdGggUGVybCBvbiBBSVggKHNlZSBidWcKKyAgICMxNjAwMDk5KQogCiAyMDA3LTA2LTEwIDIyOjI5ICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjQ3OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBBZGQgdHlwZQotICAgICBjaGVjayBmb3IgaW50Pz9fdCBhbmQgdWludD8/X3QKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyNDc6IGZyb20gbWl0c3VydV9jaGluZW46IEFkZCB0eXBlCisgICBjaGVjayBmb3IgaW50Pz9fdCBhbmQgdWludD8/X3QKIAogMjAwNy0wNi0xMCAyMjoyMiAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODI0NDogZnJvbSBtaXRzdXJ1X2NoaW5lbjogQWRkCi0gICAgIGNvbmZpZ3VyZSBjaGVjayBmb3Igc2luNl9zY29wZV9pZAorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODI0NDogZnJvbSBtaXRzdXJ1X2NoaW5lbjogQWRkCisgICBjb25maWd1cmUgY2hlY2sgZm9yIHNpbjZfc2NvcGVfaWQKIAogMjAwNy0wNi0xMCAyMjoxNSAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogUEFUQ0g6IDE3MjgyNDE6IGZyb20gbWl0c3VydV9jaGluZW46IGFkZCBjb25maWd1cmUgY2hlY2sKLSAgICAgZm9yIDxzeXMvdWlvLmg+IChtYWtlIHN1cmUgaW92IHN0cnVjdHVyZSBpcyBkZWNsYXJlZCkKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNzI4MjQxOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQgY29uZmlndXJlIGNoZWNrCisgICBmb3IgPHN5cy91aW8uaD4gKG1ha2Ugc3VyZSBpb3Ygc3RydWN0dXJlIGlzIGRlY2xhcmVkKQorCisyMDA3LTA2LTEwIDA2OjMzICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3Igc3lzdGVtIHNwZWNpZmljCisgICBsaWJyYXJpZXMKKworMjAwNy0wNi0xMCAwNjoyNiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbHNlbnNvcnMKKworMjAwNy0wNi0xMCAwNjoxOCAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1sZGV2c3RhdAorCisyMDA3LTA2LTEwIDA2OjEzICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1sZGwKKworMjAwNy0wNi0wOSAwODo1OCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1sa3ZtCiAKIDIwMDctMDYtMDggMjA6MzIgIHRhbmRlcnMKIAotICAgKiBNYWtlZmlsZS5pbjoKLSAgICAgRml4IHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSByMTY0Nzk6ICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1UCi0gICAgIHRjcCInIG5vdwotICAgICB3b3JrcyBhZ2Fpbi4gbWFrZXJlbGVhc2Ugbm93IHVzZXMgdGhlIHJpZ2h0IG9wdGlvbi4KKyAgICogTWFrZWZpbGUuaW4sIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIEZpeCByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgcjE2NDc5OiAnbWFrZSB0ZXN0IFRFU1RPUFRTPSItVAorICAgdGNwIicgbm93CisgICB3b3JrcyBhZ2Fpbi4gbWFrZXJlbGVhc2Ugbm93IHVzZXMgdGhlIHJpZ2h0IG9wdGlvbi4KKworMjAwNy0wNi0wOCAxMDo0NiAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEZFQVRVUkU6IDc0MTM3NTogRXh0ZW5kIC1GIGZsYWcgdG8gY292ZXIKKyAgIHN5c2xvZy9leGVjdXRlIGZvcm1hdCBzdHJpbmdzLgogCiAyMDA3LTA2LTA4IDEwOjQ0ICBkdHMxMgogCi0gICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6Ci0gICAgIEltcHJvdmUgbWVtb3J5IGhhbmRsaW5nIG9mIHN0eWxlLXNwZWNpZmljIGZvcm1hdCBzdHJpbmdzLgorICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBJbXByb3ZlIG1lbW9yeSBoYW5kbGluZyBvZiBzdHlsZS1zcGVjaWZpYyBmb3JtYXQgc3RyaW5ncy4KIAogMjAwNy0wNi0wOCAxMDozMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKLSAgICAgRGVmYXVsdCB0byByZXBvcnRpbmcgTkZTIG1vdW50cyBhcyBOZXR3b3JrRGlzay4KKworICAgRGVmYXVsdCB0byByZXBvcnRpbmcgTkZTIG1vdW50cyBhcyBOZXR3b3JrRGlzay4KKworMjAwNy0wNi0wOCAwNjowMiAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1scnBtIGFuZAorICAgdGhpbmdzIGl0IGRlcGVuZHMKKyAgIG9uCisKKzIwMDctMDYtMDggMDU6NTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKKworICAgQWRkIG1pc3NpbmcgXAorCisyMDA3LTA2LTA4IDA1OjMxICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1sa3N0YXQKKworMjAwNy0wNi0wOCAwNToyOCAgbWFnZnIKKworICAgKiBhY2luY2x1ZGUubTQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgYSB2YXJpYXRpb24gb2YgQUNfU0VBUkNIX0xJQlMgd2hlcmUgdGhlCisgICByZXN1bHQgdmFyaWFibGUgaXMgc2V0dGFibGUuCiAKIDIwMDctMDYtMDggMDU6MTYgIG1hZ2ZyCiAKLSAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBSZW1vdmUgdGhlIHVudXNlZCB1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVi4KLSAgICAgVGhlIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgYXJlIGhhbmRsZWQgYnkgdGhlCi0gICAgIEhBVkVfUEVSTF9FVkFMX1BWX1tVTF1DIGRlZmluZXMsCi0gICAgIHRoaXMgb25lIGlzIG5ldmVyIHNldCBieSBvdXIgY29uZmlndXJlIHNjcmlwdC4KKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlbW92ZSB0aGUgdW51c2VkIHVuZGVmIEhBVkVfUEVSTF9FVkFMX1BWLgorICAgVGhlIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgYXJlIGhhbmRsZWQgYnkgdGhlCisgICBIQVZFX1BFUkxfRVZBTF9QVl9bVUxdQyBkZWZpbmVzLAorICAgdGhpcyBvbmUgaXMgbmV2ZXIgc2V0IGJ5IG91ciBjb25maWd1cmUgc2NyaXB0LgogCiAyMDA3LTA2LTA3IDE2OjAyICBkdHMxMgogCi0gICAqIC5jdnNpZ25vcmUsIGFnZW50Ly5jdnNpZ25vcmUsIGFnZW50L2hlbHBlcnMvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvLmN2c2lnbm9yZSwgYWdlbnQvbWliZ3JvdXAvUm1vbi8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9hZ2VudC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9ob3N0Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvLmN2c2lnbm9yZSwgYWdlbnQvbWliZ3JvdXAvbWlzYy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc211eC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy8uY3ZzaWdub3JlLCBhcHBzLy5jdnNpZ25vcmUsCi0gICAgIGFwcHMvc25tcG5ldHN0YXQvLmN2c2lnbm9yZSwgZGlzdC8uY3ZzaWdub3JlLAotICAgICBpbmNsdWRlL25ldC1zbm1wLy5jdnNpZ25vcmUsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvLmN2c2lnbm9yZSwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5Ly5jdnNpZ25vcmUsIGluY2x1ZGUvdWNkLXNubXAvLmN2c2lnbm9yZSwKLSAgICAgbG9jYWwvLmN2c2lnbm9yZSwgbWFuLy5jdnNpZ25vcmUsIG1pYnMvLmN2c2lnbm9yZSwgb3YvLmN2c2lnbm9yZSwKLSAgICAgcGVybC8uY3ZzaWdub3JlLCBwZXJsL0FTTi8uY3ZzaWdub3JlLAotICAgICBwZXJsL0FueURhdGFfU05NUC8uY3ZzaWdub3JlLCBwZXJsL09JRC8uY3ZzaWdub3JlLAotICAgICBwZXJsL1NOTVAvLmN2c2lnbm9yZSwgcGVybC9TTk1QL3QvLmN2c2lnbm9yZSwKLSAgICAgcGVybC9UcmFwUmVjZWl2ZXIvLmN2c2lnbm9yZSwgcGVybC9hZ2VudC8uY3ZzaWdub3JlLAotICAgICBwZXJsL2FnZW50L1N1cHBvcnQvLmN2c2lnbm9yZSwKLSAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlLy5jdnNpZ25vcmUsCi0gICAgIHBlcmwvZGVmYXVsdF9zdG9yZS8uY3ZzaWdub3JlLCBwZXJsL21hbmFnZXIvLmN2c2lnbm9yZSwKLSAgICAgc25tcGxpYi8uY3ZzaWdub3JlLCB0ZXN0aW5nLy5jdnNpZ25vcmUsIHdpbjMyLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL2Jpbi8uY3ZzaWdub3JlLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL2xpYi8uY3ZzaWdub3JlLCB3aW4zMi9saWJhZ2VudC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9saWJoZWxwZXJzLy5jdnNpZ25vcmUsIHdpbjMyL2xpYm5ldHNubXB0cmFwZC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9saWJzbm1wLy5jdnNpZ25vcmUsIHdpbjMyL2xpYnNubXBfZGxsLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL2xpYnVjZG1pYnMvLmN2c2lnbm9yZSwgd2luMzIvbmV0LXNubXAvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbmV0LXNubXAvbGlicmFyeS8uY3ZzaWdub3JlLCB3aW4zMi9uZXRzbm1wbWlicy8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wYnVsa2dldC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcGRlbHRhLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBkZi8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wZHNkay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZ2V0Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXBnZXRuZXh0Ly5jdnNpZ25vcmUsIHdpbjMyL3NubXBuZXRzdGF0Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXBzZXQvLmN2c2lnbm9yZSwgd2luMzIvc25tcHN0YXR1cy8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wdGFibGUvLmN2c2lnbm9yZSwgd2luMzIvc25tcHRlc3QvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdHJhcC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wdHJhcGQvLmN2c2lnbm9yZSwgd2luMzIvc25tcHVzbS8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wdmFjbS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wd2Fsay8uY3ZzaWdub3JlOgotICAgICBSZW1vdmUgcmVkdW5kYW50IENWUy1hZG1pbiBmaWxlcy4KKyAgICogIC5jdnNpZ25vcmUsIGFnZW50Ly5jdnNpZ25vcmUsIGFnZW50L2hlbHBlcnMvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwLy5jdnNpZ25vcmUsIGFnZW50L21pYmdyb3VwL1Jtb24vLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvLmN2c2lnbm9yZSwgYWdlbnQvbWliZ3JvdXAvbWlzYy8uY3ZzaWdub3JlLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS8uY3ZzaWdub3JlLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy8uY3ZzaWdub3JlLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlLy5jdnNpZ25vcmUsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzLy5jdnNpZ25vcmUsIGFwcHMvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvLmN2c2lnbm9yZSwgZGlzdC8uY3ZzaWdub3JlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC8uY3ZzaWdub3JlLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvLmN2c2lnbm9yZSwgaW5jbHVkZS91Y2Qtc25tcC8uY3ZzaWdub3JlLCAKKyAgICAgICAgbG9jYWwvLmN2c2lnbm9yZSwgbWFuLy5jdnNpZ25vcmUsIG1pYnMvLmN2c2lnbm9yZSwKKyAgICAgIG92Ly5jdnNpZ25vcmUsICAgIHBlcmwvLmN2c2lnbm9yZSwgcGVybC9BU04vLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QLy5jdnNpZ25vcmUsIHBlcmwvT0lELy5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL1NOTVAvLmN2c2lnbm9yZSwgcGVybC9TTk1QL3QvLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyLy5jdnNpZ25vcmUsIHBlcmwvYWdlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlLy5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvLmN2c2lnbm9yZSwgcGVybC9tYW5hZ2VyLy5jdnNpZ25vcmUsICAgCisgICAgICBzbm1wbGliLy5jdnNpZ25vcmUsIHRlc3RpbmcvLmN2c2lnbm9yZSwgd2luMzIvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL2Jpbi8uY3ZzaWdub3JlLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9saWIvLmN2c2lnbm9yZSwgd2luMzIvbGliYWdlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvLmN2c2lnbm9yZSwgd2luMzIvbGlibmV0c25tcHRyYXBkLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9saWJzbm1wLy5jdnNpZ25vcmUsIHdpbjMyL2xpYnNubXBfZGxsLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9saWJ1Y2RtaWJzLy5jdnNpZ25vcmUsIHdpbjMyL25ldC1zbm1wLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbGlicmFyeS8uY3ZzaWdub3JlLCB3aW4zMi9uZXRzbm1wbWlicy8uY3ZzaWdub3JlLCAgCisgICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGJ1bGtnZXQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBkZi8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcGRzZGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGdldC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvLmN2c2lnbm9yZSwgd2luMzIvc25tcG5ldHN0YXQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvLmN2c2lnbm9yZSwgd2luMzIvc25tcHN0YXR1cy8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB0ZXN0Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB0cmFwLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvLmN2c2lnbm9yZSwgd2luMzIvc25tcHVzbS8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcHZhY20vLmN2c2lnbm9yZSwgd2luMzIvc25tcHdhbGsvLmN2c2lnbm9yZToKKworICAgUmVtb3ZlIHJlZHVuZGFudCBDVlMtYWRtaW4gZmlsZXMuCiAKIDIwMDctMDYtMDcgMTI6NTYgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX3NlY21vZC5jOgotICAgICBIYW5kbGUgdW5yZWdpc3RlcmluZyB0aGUgZmlyc3QgU2VjdXJpdHkgTW9kZWwgaW4gdGhlIGxpc3QuCi0gICAgIFJlcG9ydGVkIGJ5IEFsZWtzYW5kciBMb21hbm92LgorCisgICBIYW5kbGUgdW5yZWdpc3RlcmluZyB0aGUgZmlyc3QgU2VjdXJpdHkgTW9kZWwgaW4gdGhlIGxpc3QuCisgICBSZXBvcnRlZCBieSBBbGVrc2FuZHIgTG9tYW5vdi4KIAogMjAwNy0wNi0wNyAwOToxMyAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgotICAgICBJbnN0YWxsIGhlYWRlciBmaWxlcyBmb3Igc3Rhc2hfY2FjaGUgYW5kIHN0YXNoX3RvX25leHQgaGVscGVycy4KKworICAgSW5zdGFsbCBoZWFkZXIgZmlsZXMgZm9yIHN0YXNoX2NhY2hlIGFuZCBzdGFzaF90b19uZXh0IGhlbHBlcnMuCiAKIDIwMDctMDYtMDcgMDk6MDcgIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKLSAgICAgU2VwYXJhdGUgb3V0IGhlYWRlciBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIEMKLSAgICAgc291cmNlIGZpbGUuCisKKyAgIFNlcGFyYXRlIG91dCBoZWFkZXIgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBDCisgICBzb3VyY2UgZmlsZS4KIAogMjAwNy0wNi0wNyAwODo1OSAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgotICAgICBTb3J0IGxpc3RzIG9mIGhlbHBlcnMgKHNvdXJjZSBjb2RlLCBvYmplY3QgZmlsZXMgYW5kIGhlYWRlcnMpLgotICAgICBUaGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byBzcG90IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG9taXR0ZWQuCisKKyAgIFNvcnQgbGlzdHMgb2YgaGVscGVycyAoc291cmNlIGNvZGUsIG9iamVjdCBmaWxlcyBhbmQgaGVhZGVycykuCisgICBUaGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byBzcG90IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG9taXR0ZWQuCiAKIDIwMDctMDYtMDcgMDg6NDIgIGR0czEyCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBQcm90ZWN0IGFnYWluc3Qgc3lzdGVtcyB3aXRob3V0IFNfSVNESVIuCisKKyAgIFByb3RlY3QgYWdhaW5zdCBzeXN0ZW1zIHdpdGhvdXQgU19JU0RJUi4KKworMjAwNy0wNi0wNiAyMjozNiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgV2UgYXJlbid0IHVzaW5nIGxpYnRvb2xzIGRsb3BlbiBzdXBwb3J0LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisgICBjb25maWd1cmUgZm9yIGl0CiAKIDIwMDctMDYtMDYgMTI6MzcgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogQUlYOiB1c2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKworICAgQ0hBTkdFUzogQUlYOiB1c2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKworMjAwNy0wNi0wNiAxMDoyNiAgbWFnZnIKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZW1vdmUgdGhlIHVudXNlZCB1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVi4KKyAgIFRoZSBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHRoZQorICAgSEFWRV9QRVJMX0VWQUxfUFZfW1VMXUMgZGVmaW5lcywKKyAgIHRoaXMgb25lIGlzIG5ldmVyIHNldCBieSBvdXIgY29uZmlndXJlIHNjcmlwdC4KIAogMjAwNy0wNi0wNiAxMDoyMCAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZC5jOgotICAgICBFbnN1cmUgb3V0cHV0IGlzIHByb3Blcmx5IGRpcmVjdGVkIHRvIHN5c2xvZy4KLSAgICAgT3RoZXJ3aXNlLCBwcm9ibGVtcyBpbiB0aGUgY29uZmlnIGVudmlyb25tZW50IGNhbiB0cmlnZ2VyCi0gICAgIGVycm9ycyBiZWluZyBkaXJlY3RlZCB0byBzdGRlcnIsIGFuZCBzdWJzZXF1ZW50IGxvZ2dpbmcKLSAgICAgb3V0cHV0IGdldHMgbG9zdC4KKworICAgRW5zdXJlIG91dHB1dCBpcyBwcm9wZXJseSBkaXJlY3RlZCB0byBzeXNsb2cuCisgICBPdGhlcndpc2UsIHByb2JsZW1zIGluIHRoZSBjb25maWcgZW52aXJvbm1lbnQgY2FuIHRyaWdnZXIKKyAgIGVycm9ycyBiZWluZyBkaXJlY3RlZCB0byBzdGRlcnIsIGFuZCBzdWJzZXF1ZW50IGxvZ2dpbmcKKyAgIG91dHB1dCBnZXRzIGxvc3QuCiAKIDIwMDctMDYtMDYgMTA6MTMgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgotICAgICBNb3JlIGhlbHBmdWwgZGVidWdnaW5nIG91dHB1dC4KKworICAgTW9yZSBoZWxwZnVsIGRlYnVnZ2luZyBvdXRwdXQuCiAKIDIwMDctMDYtMDYgMDU6NTMgIG1hZ2ZyCiAKLSAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywKLSAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdDoKLSAgICAgQ0hBTkdFUzogbWlzYzogRG9uJ3QgdXNlIHRoZSBsZWdhY3kgc3ltYm9sCi0gICAgIFNOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorICAgKiAgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQ6CisKKyAgIENIQU5HRVM6IG1pc2M6IERvbid0IHVzZSB0aGUgbGVnYWN5IHN5bWJvbAorICAgU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCisKKzIwMDctMDYtMDUgMTc6NDkgIG1hZ2ZyCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJlbW92ZSBleHBsaWNpdCBkZWZpbml0aW9ucyBvZiBpdGVtcyB0aGF0CisgICBhdXRvaGVhZGVyIGFsc28gZGVmaW5lcwogCiAyMDA3LTA2LTA1IDE1OjU5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTcyOTYyOTogRml4IG1lbW9yeSBsZWFrIGluIGRpc21hbgotICAgICBhZ2VudC4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE3Mjk2Mjk6IEZpeCBtZW1vcnkgbGVhayBpbiBkaXNtYW4KKyAgIGFnZW50LgorCisyMDA3LTA2LTA1IDE0OjUyICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogU3VwcG9ydCBwZXItdHJhcCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKKworMjAwNy0wNi0wNSAwNjo1NyAgbWFnZnIKKworICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIE5FV1M6IG1pc2M6IEFkZCBjb25maWcgcmVyZWFkaW5nIHN1cHBvcnQgdG8gdGhlIHN1YmFnZW50CisgICBnZW5lcmF0ZWQgYnkgbmV0LXNubXAtY29uZmlnIC0tY29tcGlsZS1zdWJhZ2VudAorCisyMDA3LTA2LTA0IDIyOjI5ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBTaW1wbGlmeSB0aGUgZGV0ZWN0aW9uIG9mIGxpYnJhcmllcyBuZWVkZWQgZm9yCisgICBnZXRob3N0YnluYW1lCiAKIDIwMDctMDYtMDQgMjI6MDYgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBORVdTOiBzbm1wbGliOiBDaGFuZ2Ugc25tcF9zZXNzX2FkZF9leCB0byBjb25zaXN0ZW50bHkgY2xvc2UgYW5kCi0gICAgIGRlbGV0ZSB0aGUgdHJhbnNwb3J0IGFyZ3VtZW50IG9uIGZhaWx1cmUsIGVhcmxpZXIgdGhlIGxpdmVuZXNzIG9mCi0gICAgIHRoZSB0cmFuc3BvcnQgYXJndW1lbnQgd2FzIHVuZGVjaWRlZC4KIAotMjAwNy0wNi0wNCAxNTo1MCAgaGFyZGFrZXIKLQotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMiApCi0KLTIwMDctMDYtMDQgMTU6NTAgIGhhcmRha2VyCi0KLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNi0wNCAxNTo0NCAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDYtMDQgMTU6NDIgIGhhcmRha2VyCi0KLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAotCi0yMDA3LTA2LTA0IDE1OjQxICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNi0wNCAxNTozOSAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUyICkKKyAgIE5FV1M6IHNubXBsaWI6IENoYW5nZSBzbm1wX3Nlc3NfYWRkX2V4IHRvIGNvbnNpc3RlbnRseSBjbG9zZSBhbmQKKyAgIGRlbGV0ZSB0aGUgdHJhbnNwb3J0IGFyZ3VtZW50IG9uIGZhaWx1cmUsIGVhcmxpZXIgdGhlIGxpdmVuZXNzIG9mCisgICB0aGUgdHJhbnNwb3J0IGFyZ3VtZW50IHdhcyB1bmRlY2lkZWQuCiAKIDIwMDctMDYtMDQgMTQ6MzYgIGhhcmRha2VyCiAKLSAgICogTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVOVEVTVFM6Ci0gICAgIENIQU5HRVM6IHRlc3Q6IHN1cHBvcnQgYSAtbiBmbGFnIHRvIFJVTlRFU1RTIHRvIHByaW50IHRoZSB0ZXN0Ci0gICAgIG51bWJlciBmb3VuZCBpbiB0aGUgdGVzdCBmaWxlIGFzIG9wcG9zZWQgdG8gdGhlIG51bWVyaWNhbCBjb3VudAorICAgKiBNYWtlZmlsZS5pbiwgZGlzdC9tYWtlcmVsZWFzZSwgdGVzdGluZy9SVU5URVNUUzoKKworICAgQ0hBTkdFUzogdGVzdDogc3VwcG9ydCBhIC1uIGZsYWcgdG8gUlVOVEVTVFMgdG8gcHJpbnQgdGhlIHRlc3QKKyAgIG51bWJlciBmb3VuZCBpbiB0aGUgdGVzdCBmaWxlIGFzIG9wcG9zZWQgdG8gdGhlIG51bWVyaWNhbCBjb3VudAogCiAyMDA3LTA2LTA0IDEzOjA5ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIzNzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogTW92ZQotICAgICB2YXJpYWJsZSBkZWNsYXJhdGlvbiBhdCB0aGUgdG9wIG9mIG5ldHNubXBfdWRwX3NlbmR0bworCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMzc6IGZyb20gbWl0c3VydV9jaGluZW46IE1vdmUKKyAgIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGF0IHRoZSB0b3Agb2YgbmV0c25tcF91ZHBfc2VuZHRvCisKKzIwMDctMDYtMDQgMTI6NTIgIHRhbmRlcnMKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIzMzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWFrZSBzdXJlCisgICB0eXBlIG5mZHNfdCBpcyBkZWZpbmVkCiAKIDIwMDctMDYtMDQgMTI6MTMgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgY29uZmlndXJlLAotICAgICBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIzMDogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkCi0gICAgIGNvbmZpZ3VyZSBjaGVjayBmb3IgZ2FpX3N0cmVycm9yKCkKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMzA6IGZyb20gbWl0c3VydV9jaGluZW46IGFkZAorICAgY29uZmlndXJlIGNoZWNrIGZvciBnYWlfc3RyZXJyb3IoKQogCiAyMDA3LTA2LTA0IDEwOjM1ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMjY6IGZyb20gbWl0c3VydV9jaGluZW46IG1ha2Ugc3VyZQotICAgICBJRl9OQU1FU0laRSBpcyBkZWZpbmVkCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIyNjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWFrZSBzdXJlCisgICBJRl9OQU1FU0laRSBpcyBkZWZpbmVkCisKKzIwMDctMDYtMDQgMTA6MjggIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMjM6IGZyb20gbWl0c3VydV9jaGluZW46IGFkZAorICAgY29uZmlndXJlIGNoZWNrIGZvciBuZXRsaW5rIHNvY2tldAogCiAyMDA3LTA2LTA0IDA5OjQ3ICB0YW5kZXJzCiAKICAgICogdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQ6Ci0gICAgIGFsc28gc2tpcCB0aGlzIHRlc3Qgb24gSVJJWDY0CisKKyAgIGFsc28gc2tpcCB0aGlzIHRlc3Qgb24gSVJJWDY0CisKKzIwMDctMDYtMDIgMTY6MTMgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBGaXggY29tcGlsYXRpb24gb24gSVJJWAogCiAyMDA3LTA2LTAyIDA4OjI0ICBtYWdmcgogCi0gICAqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9keW5peC5oLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgsIHNubXBsaWIvc25tcF9hcGkuYywKLSAgICAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBDSEFOR0VTOiBzbm1wYXBpOiBEbyBub3QgdXNlIGdldHNlcnZieW5hbWUgdG8gZmluZCBkZWZhdWx0IHBvcnQKLSAgICAgbnVtYmVycywganVzdCBoYXJkY29kZSB0aGVtIGFuZCBsZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlbSBpZgotICAgICBuZWVkZWQuCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9keW5peC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wYXBpOiBEbyBub3QgdXNlIGdldHNlcnZieW5hbWUgdG8gZmluZCBkZWZhdWx0IHBvcnQKKyAgIG51bWJlcnMsIGp1c3QgaGFyZGNvZGUgdGhlbSBhbmQgbGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZW0gaWYKKyAgIG5lZWRlZC4KIAogMjAwNy0wNi0wMSAyMjo1NSAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogTGluayBsaWJkbCBhZ2FpbnN0IGxpYm5ldHNubXBtaWJzIGluc3RlYWQgb2YKLSAgICAgc25tcGQuCi0gICAgIEZpeGVzIHRoZSBidWlsZCBvbiAoc29tZSkgU29sYXJpcyBzeXN0ZW1zLgogCi0yMDA3LTA2LTAxIDIxOjM2ICBkdHMxMgorICAgQ0hBTkdFUzogYnVpbGQ6IExpbmsgbGliZGwgYWdhaW5zdCBsaWJuZXRzbm1wbWlicyBpbnN0ZWFkIG9mCisgICBzbm1wZC4KKyAgIEZpeGVzIHRoZSBidWlsZCBvbiAoc29tZSkgU29sYXJpcyBzeXN0ZW1zLgogCi0gICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogRkVBVFVSRVM6IDEwNDE4ODg6IENoZWNrIGRpcmVjdG9yeSBwYXRocyBmb3IKLSAgICAgY29uZmlnIGZpbGVzLgotICAgICBCYWNrcG9ydCBmcm9tIG1haW4gZGV2ZWxvcG1lbnQgdHJ1bmsgb2YgYnVnIGZpeC4KKzIwMDctMDYtMDEgMjI6MzQgIHRhbmRlcnMKIAotMjAwNy0wNi0wMSAyMToyMyAgZHRzMTIKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKLSAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBGRUFUVVJFUzogODUxODg3OiBSZXBvcnQgcmFuZ2UgaW5mb3JtYXRpb24gZm9yCi0gICAgIGludmFsaWQgU0VUIHJlcXVlc3RzLgotICAgICBCYWNrcG9ydCBmcm9tIG1haW4gdHJ1bmsgb2YgYnVnIGZpeC4KKyAgIGZpeCBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCBjb25maWd1cmUgY2hlY2sgb24gSVJJWAorICAgKHJlZ3Jlc3Npb24gZnJvbSByMTY0NTEpCisKKzIwMDctMDYtMDEgMTQ6MzMgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzoKKworICAgTkVXUzogc25tcHRyYXBkOiBXaXRoZHJhdyBkZXByZWNhdGVkIG9wdGlvbnMuCisgICAoVGhyZWUgYW5kIGEgaGFsZiB5ZWFycycgd2FybmluZyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbnlvbmUhKQogCiAyMDA3LTA1LTMxIDIzOjUxICB0YW5kZXJzCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAotICAgICBuZXQtc25tcC1jb25maWcuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBMaW5rIGxpYmt2bSBhbmQgbGlid3JhcCB0byBsaWJuZXRzbm1wYWdlbnQKLSAgICAgaW5zdGVhZCBvZiBzbm1wZC4KLSAgICAgRml4ZXMgdGVzdCAjNDQgKFBlcmwgc3ViYWdlbnQpIG9uIHN5c3RlbXMgdXNpbmcgb25lIG9mIHRob3NlCi0gICAgIGxpYnJhcmllcy4KKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IExpbmsgbGlia3ZtIGFuZCBsaWJ3cmFwIHRvIGxpYm5ldHNubXBhZ2VudAorICAgaW5zdGVhZCBvZiBzbm1wZC4KKyAgIEZpeGVzIHRlc3QgIzQ0IChQZXJsIHN1YmFnZW50KSBvbiBzeXN0ZW1zIHVzaW5nIG9uZSBvZiB0aG9zZQorICAgbGlicmFyaWVzLgorCisyMDA3LTA1LTMxIDIzOjQyICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogTW92ZSBzeXNPUkxhc3RDaGFuZ2UgZnJvbSBtaWJJSS9zeXN0ZW1fbWliIHRvCisgICBtaWJJSS9zeXNPUlRhYmxlIGluIG9yZGVyIHRvIGtlZXAgdGhlIGRhdGEgYW5kIHRoZSB1c2UgdG9nZXRoZXIuCiAKIDIwMDctMDUtMzEgMTQ6MzkgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6Ci0gICAgIEZpeCBsb2dnaW5nIG9mIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgorCisgICBGaXggbG9nZ2luZyBvZiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4KIAogMjAwNy0wNS0zMSAxMDoxMCAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKLSAgICAgUmVtb3ZlIGJvZ3VzIGRlYnVnIG91dHB1dC4KKworICAgUmVtb3ZlIGJvZ3VzIGRlYnVnIG91dHB1dC4KKworMjAwNy0wNS0zMSAwOTo0OCAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBSZW1vdmUgcmVkdW5kYW50IGNvZGUuCisKKzIwMDctMDUtMzEgMDk6NDMgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBGRUFUVVJFOiAxMTU5OTQ3OiBBbGxvdyBjb250cm9sIG9mIHRyYXBoYW5kbGUKKyAgIGRhdGEgZm9ybWF0CiAKIDIwMDctMDUtMzAgMjI6NTMgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgcGVybC9BU04vTWFrZWZpbGUuUEwsCi0gICAgIHBlcmwvT0lEL01ha2VmaWxlLlBMLCBwZXJsL1NOTVAvTWFrZWZpbGUuUEwsCi0gICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLAotICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6Ci0gICAgIENIQU5HRVM6IEFJWDogYnVpbGQgZml4ZXMgZm9yIGVtYmVkZGVkIFBlcmwKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvT0lEL01ha2VmaWxlLlBMLCBwZXJsL1NOTVAvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogQUlYOiBidWlsZCBmaXhlcyBmb3IgZW1iZWRkZWQgUGVybAorCisyMDA3LTA1LTMwIDIyOjM0ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIEhQLVVYIDExLnggYW5kIElSSVggNi41IGJ1aWxkIGZpeCAocmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5CisgICByMTY0NTEpCisKKzIwMDctMDUtMjkgMjM6MDQgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IG1ha2UgdXNlIG9mIEFDX1BST0dfU0VEL0FDX1BST0dfR1JFUCBhbmQgLyB0bworICAgZnVydGhlciBtaW5pbWl6ZSBzZWQvZ3JlcCBwcm9ibGVtcwogCiAyMDA3LTA1LTI5IDIyOjQyICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIHRoZSBkZWZhdWx0X3RhcmdldCBhcmd1bWVudCBpZiBpdCBpcwotICAgICBub24tTlVMTCwgbm90IGlmIGl0IGlzIE5VTEwuCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFVzZSB0aGUgZGVmYXVsdF90YXJnZXQgYXJndW1lbnQgaWYgaXQgaXMKKyAgIG5vbi1OVUxMLCBub3QgaWYgaXQgaXMgTlVMTC4KKworMjAwNy0wNS0yOSAxMDozMCAgdGFuZGVycworCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIG1vcmUgbmV0LXNubXAgc3BlY2lhbHMgaW4gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0cyB0byBlYXNlIG1haW50ZW5hbmNlLgorICAgQWxzbyBjaGFuZ2UgcmVjZW50bHkgYWRkZWQgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX1NTX0ZBTUlMWS4KIAogMjAwNy0wNS0yOSAxMDoyNyAgdGFuZGVycwogCiAgICAqIFJFQURNRS5hZ2VudC1taWJzOgotICAgICBhZGQgcmVjZW50IG1mZCByZXdyaXRlcworCisgICBhZGQgcmVjZW50IG1mZCByZXdyaXRlcworCisyMDA3LTA1LTI5IDEwOjIyICB0YW5kZXJzCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSZW1vdmUgbW9yZSBuZXQtc25tcCBzcGVjaWFscyBpbiB0aGUgY29uZmlndXJlCisgICBzY3JpcHRzIHRvIGVhc2UgbWFpbnRlbmFuY2UuCisgICBBbHNvIGNoYW5nZSB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBmb3IgY29uc2lzdGVuY3kuCisKKzIwMDctMDUtMjggMjM6MzAgIG1hZ2ZyCisKKyAgICogIFBPUlRJTkcsIGFjY29uZmlnLmgsIGFjaW5jbHVkZS5tNCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oLCAgIAorICAgICAgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgCisgICAgICAgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJlbW92ZSBtb3JlIG5ldC1zbm1wIHNwZWNpYWxzIGluIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdHMgdG8gZWFzZSBtYWludGVuYW5jZS4KKworMjAwNy0wNS0yOCAxNjozMSAgZHRzMTIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcGNtZC4xLmRlZiwgc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogRkVBVFVSRVM6IDE0MDc0NzY6IFJlbmFtZSAnc3RyaWN0Q29tbWVudFRlcm0nCisgICB0byByZWZsZWN0IHRoZSBhY3R1YWwgYmVoYXZpb3VyLgorCisyMDA3LTA1LTI4IDE1OjI1ICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogRkVBVFVSRVM6IDEwNDE4ODg6IENoZWNrIGRpcmVjdG9yeSBwYXRocyBmb3IKKyAgIGNvbmZpZyBmaWxlcy4KKworMjAwNy0wNS0yOCAxMzoxMyAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IEZFQVRVUkVTOiA4NTE4ODc6IFJlcG9ydCByYW5nZSBpbmZvcm1hdGlvbiBmb3IKKyAgIGludmFsaWQgU0VUIHJlcXVlc3RzLgorCisyMDA3LTA1LTI4IDEyOjA4ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jOgorCisgICBORVdTOiBTb2xhcmlzOiBQQVRDSDogMTcxOTczMDogZnJvbSBhcGVyc3Nvbjogc3VwcG9ydCBmb3IKKyAgIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBBZGRyZXNzVGFibGUKKyAgIFBhcnQgMiAoU29sYXJpcy1zcGVjaWZpYyBuZXcgZmlsZXMpCisKKzIwMDctMDUtMjggMTI6MDIgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaDoKKworICAgTkVXUzogTGludXg6IFBBVENIOiAxNzI0NjAyOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtZmQtYmFzZWQKKyAgIGlwRGVmYXVsdFJvdXRlclRhYmxlIGltcGxlbWVudGF0aW9uCisKKzIwMDctMDUtMjggMTI6MDAgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2VudW1zLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oOgorCisgICBORVdTOiBMaW51eDogUEFUQ0g6IDE3MjQ2MDI6IGZyb20gbWl0c3VydV9jaGluZW46IG1mZC1iYXNlZAorICAgaXBEZWZhdWx0Um91dGVyVGFibGUgaW1wbGVtZW50YXRpb24KKworMjAwNy0wNS0yOCAxMTo1OSAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaDoKKworICAgTkVXUzogTGludXg6IFBBVENIOiAxNzI0NjAyOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtZmQtYmFzZWQKKyAgIGlwRGVmYXVsdFJvdXRlclRhYmxlIGltcGxlbWVudGF0aW9uCisKKzIwMDctMDUtMjggMTA6MDkgIGR0czEyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jLCBtYW4vc25tcHdhbGsuMS5kZWY6CisKKyAgIERvY3VtZW50IHRoZSAtQ0Ugb3B0aW9uLgogCiAyMDA3LTA1LTI3IDIxOjQyICB0YW5kZXJzCiAKICAgICogcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEw6Ci0gICAgIFNvbWUgbGFtZSBsaW5rZXJzIChlLmcuIG9uIEhQLVVYIDExLjIzL0lBNjQpIG5lZWQgcXVpdGUgYSBiaXQgb2YKLSAgICAgaGVscCB0byBzdWNjZXNzZnVsbHkgbGluayB0aGUgUGVybCBtb2R1bGVzLgorCisgICBTb21lIGxhbWUgbGlua2VycyAoZS5nLiBvbiBIUC1VWCAxMS4yMy9JQTY0KSBuZWVkIHF1aXRlIGEgYml0IG9mCisgICBoZWxwIHRvIHN1Y2Nlc3NmdWxseSBsaW5rIHRoZSBQZXJsIG1vZHVsZXMuCisKKzIwMDctMDUtMjcgMjE6MzMgIGR0czEyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jOgorCisgICBDSEFOR0VTOiBzbm1wd2FsazogUEFUQ0g6IDE3MjM2MjA6IFNwZWNpZnkgYW4gZXhwbGljaXQgZW5kLXBvaW50CisgICBmb3IgdGhlIHdhbGsuCisgICBBbiBhbHRlcm5hdGl2ZSAobW9yZSBmbGV4aWJsZSkgYXBwcm9hY2ggdG8gdGhlIHByb3Bvc2VkIHBhdGNoLAorICAgYnV0IG9uZSB0aGF0CisgICBwcm92aWRlcyBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkuIEFsc28gYWRkcmVzc2VzIEZlYXR1cmUgUmVxdWVzdAorICAgIzcyMjc4NC4KIAogMjAwNy0wNS0yNyAyMDo1MiAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBBZGQgZGVzY3JpcHRpb25zIHRvIEFDX0RFRklORTsgZHJvcCBvYnNvbGV0ZSBBQ19DSEVDS19MSUIobSwKLSAgICAgYXNpbikuCiAKLTIwMDctMDUtMjcgMTk6NTQgIGR0czEyCisgICBBZGQgZGVzY3JpcHRpb25zIHRvIEFDX0RFRklORTsgZHJvcCBvYnNvbGV0ZSBBQ19DSEVDS19MSUIobSwKKyAgIGFzaW4pLgogCi0gICAqIHNubXBsaWIvcGFyc2UuYzoKLSAgICAgQ0hBTkdFUzogbGlicmFyeTogRkVBVFVSRVM6IDQ1NDAyODogRGV0ZWN0IGFuZCBoYW5kbGUgZW1wdHkgTUlCCi0gICAgIGluZGV4IGZpbGVzLgorMjAwNy0wNS0yNyAxOToyOCAgZHRzMTIKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBGRUFUVVJFUzogNDU0MDI4OiBEZXRlY3QgZW1wdHkgTUlCIGluZGV4IGZpbGVzLgorCisyMDA3LTA1LTI3IDE5OjA2ICBkdHMxMgorCisgICAqICBhZ2VudC9zbm1wZC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBkOiBGRUFUVVJFUzogMTAxOTQyOTogU2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIHZpYQorICAgaW5pdGdyb3VwcygzKQorCisyMDA3LTA1LTI3IDA2OjI3ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKKworICAgTkVXUzogU29sYXJpczogUEFUQ0g6IDE3MTk3MzA6IGZyb20gYXBlcnNzb246IHN1cHBvcnQgZm9yCisgICBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwQWRkcmVzc1RhYmxlCiAKIDIwMDctMDUtMjcgMDY6MjAgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuYWl4OgotICAgICBncmFtbWFyIGZpeAorCisgICBncmFtbWFyIGZpeAogCiAyMDA3LTA1LTI2IDE2OjQxICBhbGV4X2IKIAotICAgKiBSRUFETUUud2luMzIsIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvYnVpbGQucGwsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgV2luMzIgSVB2NiBidWlsZCBmaXhlcy4gSVB2NiBub3cgcmVxdWlyZXMgUFNESy4KKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9idWlsZC5wbCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLTIwMDctMDUtMjYgMTU6MTQgIGFsZXhfYgorICAgV2luMzIgSVB2NiBidWlsZCBmaXhlcy4gSVB2NiBub3cgcmVxdWlyZXMgUFNESy4KIAotICAgKiBSRUFETUUud2luMzIsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgSVB2NiBidWlsZCBmaXhlcyBmb3IgYnVpbGQuYmF0LCBDb25maWd1cmUgYW5kIFJFQURNRS53aW4zMi4KKzIwMDctMDUtMjYgMTU6MTYgIGFsZXhfYgorCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIElQdjYgYnVpbGQgZml4ZXMgZm9yIGJ1aWxkLmJhdCwgQ29uZmlndXJlIGFuZCBSRUFETUUud2luMzIuCiAKIDIwMDctMDUtMjUgMjM6MDMgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuYWl4LCBSRUFETUUuc29sYXJpcywgUkVBRE1FLnRydTY0OgotICAgICBEb2N1bWVudGF0aW9uIHVwZGF0ZSB3LnIudC4gcmVjZW50IGNoYW5nZXMgKG1pYklJL2lwdjYgYW5kIEFJWAotICAgICBzaGFyZWQgbGlicmFyeSBidWlsZGluZykuCisKKyAgIERvY3VtZW50YXRpb24gdXBkYXRlIHcuci50LiByZWNlbnQgY2hhbmdlcyAobWliSUkvaXB2NiBhbmQgQUlYCisgICBzaGFyZWQgbGlicmFyeSBidWlsZGluZykuCisKKzIwMDctMDUtMjUgMTg6NTQgIHJzdG9yeQorCisgICAqIGRpc3QvY3Zzc2hvdzoKKworICAgdXBkYXRlIGZvciBuZXcgdXJsIGZvcm1hdCBpbiBzdm4gZW50cmllcwogCiAyMDA3LTA1LTI1IDE1OjI4ICB0YW5kZXJzCiAKICAgICogcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgotICAgICBTb21lIHN5c3RlbXMgKGUuZy4gSFAtVVggMTEuMjMvSUE2NCkgY3VycmVudGx5IHN0aWxsIG5lZWQKLSAgICAgIm5ldC1zbm1wLWNvbmZpZyAtLWxpYnMiIChpbnN0ZWFkIG9mIGp1c3QgLS1uZXRzbm1wLWxpYnMpIGZvcgotICAgICBsaW5raW5nCi0gICAgIGxpYm5ldHNubXAgdG8gYSBQZXJsIG1vZHVsZS4KKworICAgU29tZSBzeXN0ZW1zIChlLmcuIEhQLVVYIDExLjIzL0lBNjQpIGN1cnJlbnRseSBzdGlsbCBuZWVkCisgICAibmV0LXNubXAtY29uZmlnIC0tbGlicyIgKGluc3RlYWQgb2YganVzdCAtLW5ldHNubXAtbGlicykgZm9yCisgICBsaW5raW5nCisgICBsaWJuZXRzbm1wIHRvIGEgUGVybCBtb2R1bGUuCiAKIDIwMDctMDUtMjQgMjM6NTUgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IG9ubHkgZW5hYmxlIG1pYklJL2lwdjYgdGhyb3VnaCAtLWVuYWJsZS1pcHY2IG9uCi0gICAgIHN5c3RlbXMgaXQgYnVpbGRzIHByb3Blcmx5IG9uIChMaW51eCBhbmQgKkJTRCkKKworICAgQ0hBTkdFUzogYnVpbGQ6IG9ubHkgZW5hYmxlIG1pYklJL2lwdjYgdGhyb3VnaCAtLWVuYWJsZS1pcHY2IG9uCisgICBzeXN0ZW1zIGl0IGJ1aWxkcyBwcm9wZXJseSBvbiAoTGludXggYW5kICpCU0QpCiAKIDIwMDctMDUtMjQgMjM6MTUgIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6Ci0gICAgIFNvbWUgc3lzdGVtcyAoZS5nLiBIUC1VWCAxMS4yMy9JQTY0KSBjdXJyZW50bHkgc3RpbGwgbmVlZAotICAgICAibmV0LXNubXAtY29uZmlnIC0tbGlicyIgKGluc3RlYWQgb2YganVzdCAtLW5ldHNubXAtbGlicykgZm9yCi0gICAgIGxpbmtpbmcgbGlic25tcGFnZW50IHRvIGEgUGVybCBtb2R1bGUuCisKKyAgIFNvbWUgc3lzdGVtcyAoZS5nLiBIUC1VWCAxMS4yMy9JQTY0KSBjdXJyZW50bHkgc3RpbGwgbmVlZAorICAgIm5ldC1zbm1wLWNvbmZpZyAtLWxpYnMiIChpbnN0ZWFkIG9mIGp1c3QgLS1uZXRzbm1wLWxpYnMpIGZvcgorICAgbGlua2luZyBsaWJzbm1wYWdlbnQgdG8gYSBQZXJsIG1vZHVsZS4KIAogMjAwNy0wNS0yNCAyMjowMSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmM6Ci0gICAgIENvcnJlY3Qgb2J2aW91c2x5IGJyb2tlbiB1c2Ugb2YgdGhlIEtMT09LVVAgbWFjcm8gdG8gYmUKLSAgICAgY29uc2lzdGVudCBhdCBsZWFzdAorCisgICBDb3JyZWN0IG9idmlvdXNseSBicm9rZW4gdXNlIG9mIHRoZSBLTE9PS1VQIG1hY3JvIHRvIGJlCisgICBjb25zaXN0ZW50IGF0IGxlYXN0CiAKIDIwMDctMDUtMjQgMjA6NTEgIHRhbmRlcnMKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNy5oOgotICAgICBDSEFOR0VTOiBGcmVlQlNEOiBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKKworICAgQ0hBTkdFUzogRnJlZUJTRDogYWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgdXBjb21pbmcgRnJlZUJTRCA3CisKKzIwMDctMDUtMjQgMTQ6MDYgIHJzdG9yeQorCisgICAqIE1ha2VmaWxlLnRvcDoKKworICAgYnVtcCBsaWJjdXJyZW50IHRvIDIwIHRvIGxlYXZlIHNwYWNlIGZvciA1LjQueCByZWxlYXNlcwogCiAyMDA3LTA1LTI0IDEyOjQ4ICB0YW5kZXJzCiAKICAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW46Ci0gICAgIGZpeCBsaWJyYXJ5IGxpbmtpbmcgb24gSFAtVVggMTEuMjMvSUE2NAogCi0yMDA3LTA1LTI0IDA4OjM2ICB0YW5kZXJzCi0KLSAgICogTWFrZWZpbGUudG9wOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBpbmNyZW1lbnQgImN1cnJlbnQiIGFuZCAiYWdlIiBhY2NvcmRpbmcgdG8KLSAgICAgbGlidG9vbAotICAgICB2ZXJzaW9uaW5nIHBvbGljeSwgc2luY2UgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgNS40LgotICAgICBXZSBub3cgYnVpbGQgbGlibmV0c25tcC5zby4xNS4xLjAuCi0gICAgIDUuNC4xLnByZTEgd2FzIGJyb2tlbiBpbiB0aGlzIHJlZ2FyZC4KKyAgIGZpeCBsaWJyYXJ5IGxpbmtpbmcgb24gSFAtVVggMTEuMjMvSUE2NAogCiAyMDA3LTA1LTIzIDE5OjA1ICB0YW5kZXJzCiAKLSAgICogTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBhZ2VudC9NYWtlZmlsZS5pbiwKLSAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLAotICAgICBjb25maWd1cmUuaW4sIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLAotICAgICBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsCi0gICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgc25tcGxpYi9NYWtlZmlsZS5pbjoKLSAgICAgTkVXUzogc25tcGxpYjogQlVHOiAxNjE5ODI3OiBsaW5rIG5ldC1zbm1wIGxpYnJhcmllcyBhbmQgYmluYXJpZXMKLSAgICAgYWdhaW5zdCB0aGUgbmV0LXNubXAgbGlicmFyaWVzIHRoZXkgcmVhbGx5IGRlcGVuZCBvbgotICAgICAtIHJlZmxlY3QgbGlicmFyeSBpbnRlcmRlcGVuZGVuY2llcyBhdCBsaW5rIHRpbWUKLSAgICAgLSBmaXggZGVwZW5kZW5jaWVzIG9uIGxpYmNyeXB0bywgbGlicGtjczExIGFuZCBsaWJrc3RhdAotICAgICAtIGluc3RhbGwgbGlicmFyaWVzIGluIGNvcnJlY3Qgb3JkZXIgKGltcG9ydGFudCBmb3IgbGlidG9vbAotICAgICByZWxpbmtpbmcpCi0gICAgIE5FV1M6IFBlcmw6IGxpbmsgUGVybCBtb2R1bGVzIGFnYWluc3QgdGhlIGV4YWN0IHNldCBvZiBsaWJyYXJpZXMKLSAgICAgdGhleSBkZXBlbmQgb24KKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgYWdlbnQvTWFrZWZpbGUuaW4sICAgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuaW4sIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCBzbm1wbGliL01ha2VmaWxlLmluOgogCi0yMDA3LTA1LTIyIDE0OjQwICBoYXJkYWtlcgorICAgTkVXUzogc25tcGxpYjogQlVHOiAxNjE5ODI3OiBsaW5rIG5ldC1zbm1wIGxpYnJhcmllcyBhbmQgYmluYXJpZXMKKyAgIGFnYWluc3QgdGhlIG5ldC1zbm1wIGxpYnJhcmllcyB0aGV5IHJlYWxseSBkZXBlbmQgb24KKyAgIC0gcmVmbGVjdCBsaWJyYXJ5IGludGVyZGVwZW5kZW5jaWVzIGF0IGxpbmsgdGltZQorICAgLSBmaXggZGVwZW5kZW5jaWVzIG9uIGxpYmNyeXB0bywgbGlicGtjczExIGFuZCBsaWJrc3RhdAorICAgLSBpbnN0YWxsIGxpYnJhcmllcyBpbiBjb3JyZWN0IG9yZGVyIChpbXBvcnRhbnQgZm9yIGxpYnRvb2wKKyAgIHJlbGlua2luZykKKyAgIE5FV1M6IFBlcmw6IGxpbmsgUGVybCBtb2R1bGVzIGFnYWluc3QgdGhlIGV4YWN0IHNldCBvZiBsaWJyYXJpZXMKKyAgIHRoZXkgZGVwZW5kIG9uCiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLAotICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLAotICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgcGVybC9hZ2VudC9hZ2VudC5wbSwKLSAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sCi0gICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzZWRzY3JpcHQuaW4sCi0gICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIHZlcnNpb24gc3RhbXAgNS40LjEucHJlMQorMjAwNy0wNS0yMiAxNjoyNiAgaGFyZGFrZXIKIAotMjAwNy0wNS0yMiAwMDoyNCAgaGFyZGFrZXIKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKIAotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA1LTIyIDAwOjE5ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNS0yMiAwMDowMSAgaGFyZGFrZXIKLQotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCisgICB1c2Ugc3ZuIGV4cG9ydCBpbnN0ZWFkIG9mIGNoZWNrb3V0CiAKIDIwMDctMDUtMjIgMDA6MDAgIGhhcmRha2VyCiAKICAgICogTWFrZWZpbGUuaW46Ci0gICAgIGlnbm9yZSB3aW5FeHRETEwgaW4gY29tbWVudCBjaGVjaworCisgICBpZ25vcmUgd2luRXh0RExMIGluIGNvbW1lbnQgY2hlY2sKIAogMjAwNy0wNS0yMSAyMzo1NCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uYzoKLSAgICAgLy8gLT4gQyBjb21tZW50CiAKLTIwMDctMDUtMjEgMjM6NTEgIGhhcmRha2VyCisgICAvLyAtPiBDIGNvbW1lbnQKIAotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisyMDA3LTA1LTIxIDIzOjMzICB0YW5kZXJzCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjEwLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi43LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi44LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi45Lmg6CisKKyAgIHN5bmMgd2l0aCA1LjQsIHRoZXNlIGFyZSBvYnNvbGV0ZSBub3cKIAogMjAwNy0wNS0yMSAyMzoxMSAgbWFnZnIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGRpbmc6IERpc2FibGUgaW5saW5pbmcgb24gc29sYXJpcyBhcyB0aGVyZSBhcmUgc29tZQotICAgICBsaW5raW5nIGVycm9ycyB0aGF0IHNob3cgdXAgaWYgdGhlIGlubGluZSBzdXBwb3J0IGlzIGxlZnQKLSAgICAgZW5hYmxlZC4KLQotMjAwNy0wNS0yMSAyMjo0NiAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUxICkKLQotMjAwNy0wNS0yMSAyMjoyMiAgaGFyZGFrZXIKLQotICAgKiBNYWtlZmlsZS50b3A6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDUtMjEgMjM6NTEgIGhhcmRha2VyCi0KLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDUtMjEgMjM6MTEgIG1hZ2ZyCiAKICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgYXMgdGhlcmUgYXJlIHNvbWUKICAgIGxpbmtpbmcgZXJyb3JzIHRoYXQgc2hvdyB1cCBpZiB0aGUgaW5saW5lIHN1cHBvcnQgaXMgbGVmdAogICAgZW5hYmxlZC4KIAotMjAwNy0wNS0yMSAyMjo0NiAgaGFyZGFrZXIKKzIwMDctMDUtMjEgMDY6MDUgIG1hZ2ZyCiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUxICkKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKLTIwMDctMDUtMjEgMjI6MjIgIGhhcmRha2VyCi0KLSAgIHZlcnNpb24gdXBkYXRlCisgICBDSEFOR0VTOiBidWlsZGluZzogQXQgbGVhc3QgU3VuIEMgNS43IGZhaWxzIGlmIG9uZSB0cmllcyB0bworICAgYWNjZXNzIF9fZnVuY19fIGluIGEgZXh0ZXJuIGlubGluZSBmdW5jdGlvbiwgc28gdGVzdCBmb3IgdGhhdAorICAgY2FzZS4KIAogMjAwNy0wNS0yMCAyMTozNCAgdGFuZGVycwogCi0JKiBhZ2VudC9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBORVdTOiBzbm1wbGliOiBCVUc6IDE2MTk4Mjc6IGxpbmsgYWdhaW5zdCBuZWVkZWQgZXh0ZXJuYWwKLQkgIGxpYnJhcmllcyBhdCBsaWJyYXJ5IGxpbmsgdGltZSAod2hlcmUgdGhleSBhcmUgcmVmZXJlbmNlZCksCi0JICByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbiBsaW5rIHRpbWUuCi0JICBBbHJlYWR5IGNvdmVycyBtb3N0IG9mIGxpYm5ldHNubXBtaWJzJyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuCi0JICBGaXhlcyBidWlsZCBpc3N1ZXMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4gYnVpbGRpbmcgd2l0aCBzaGFyZWQKLQkgIGxpYnJhcmllcyBvbiBBSVgpLiBUZXN0ZWQgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIExpbnV4LAotCSAgU29sYXJpcywgSFAtVVgsIEFJWCBhbmQgSVJJWC4KKyAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBORVdTOiBzbm1wbGliOiBCVUc6IDE2MTk4Mjc6IGxpbmsgYWdhaW5zdCBuZWVkZWQgZXh0ZXJuYWwKKyAgIGxpYnJhcmllcyBhdCBsaWJyYXJ5IGxpbmsgdGltZSAod2hlcmUgdGhleSBhcmUgcmVmZXJlbmNlZCksCisgICByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbiBsaW5rIHRpbWUuCisgICBBbHJlYWR5IGNvdmVycyBtb3N0IG9mIGxpYm5ldHNubXBtaWJzJyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuCisgICBGaXhlcyBidWlsZCBpc3N1ZXMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4gYnVpbGRpbmcgd2l0aCBzaGFyZWQKKyAgIGxpYnJhcmllcyBvbiBBSVgpLiBUZXN0ZWQgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIExpbnV4LAorICAgU29sYXJpcywgSFAtVVgsIEFJWCBhbmQgSVJJWC4KIAogMjAwNy0wNS0xOSAxNToyNyAgbWFnZnIKIAotCSogYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sCi0JICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotCSAgQ0hBTkdFUzogYnVpbGRpbmc6IENoZWNrIGZvciBzdXBwb3J0IG9mIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zCi0JICBpbnN0ZWFkIG9mIG5lc3RlZCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB3aGVuIGRldGVybWluaW5nIGlmCi0JICBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB3b3JrCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBDaGVjayBmb3Igc3VwcG9ydCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucworICAgaW5zdGVhZCBvZiBuZXN0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2hlbiBkZXRlcm1pbmluZyBpZgorICAgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd29yaworCisyMDA3LTA1LTE5IDA4OjQwICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHVzZSBvZiB0aGUgQzk5IHByZWRlZmluZWQgdmFyaWFibGUKKyAgIF9fZnVuY19fIGluIGFkZGl0aW9uIHRvIHRoZSBHQ0Mgc3ltYm9sIF9fRlVOQ1RJT05fXyB0byBnZXQgdGhlCisgICBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uCisKKzIwMDctMDUtMTggMTg6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcyMTA5NjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogcmVtb3ZlCisgICB1bnVzZWQgdmFyaWFibGUgc3RhdHMgZnJvbSBrZXJuZWwgZXh0cmFjdGlvbiBmb3IgYmV0dGVyCisgICBwb3J0YWJpbGl0eS4KIAogMjAwNy0wNS0xOCAxODowOCAgaGFyZGFrZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTkyNTQ6IGZyb20gIkNocmlzdGFuIEp1bmciOiB1cGRhdGUKLQkgIEhSRlNfaWdub3JlIGxpc3QgdG8gY3VycmVudCBsaW51eCBsaWtlbHlob29kcworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzE5MjU0OiBmcm9tICJDaHJpc3RhbiBKdW5nIjogdXBkYXRlCisgICBIUkZTX2lnbm9yZSBsaXN0IHRvIGN1cnJlbnQgbGludXggbGlrZWx5aG9vZHMKIAogMjAwNy0wNS0xOCAxODowMiAgaGFyZGFrZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6Ci0JICBORVdTOiBzbm1wZDogcGF0Y2g6IDE3MTkyNTM6IGZyb20gIkNocmlzdGlhbiBKdW5nIjogZml4Ci0JICBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIHNvIGl0IGRvZXMgbm90IGJyZWFrIG9uIHRoZSBzZWNvbmQgd2FsayBvZgotCSAgdGhlIHRhYmxlLgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKKworICAgTkVXUzogc25tcGQ6IHBhdGNoOiAxNzE5MjUzOiBmcm9tICJDaHJpc3RpYW4gSnVuZyI6IGZpeAorICAgc2tpcE5GU0luSG9zdFJlc291cmNlcyBzbyBpdCBkb2VzIG5vdCBicmVhayBvbiB0aGUgc2Vjb25kIHdhbGsgb2YKKyAgIHRoZSB0YWJsZS4KKworMjAwNy0wNS0xOCAxNzo1NSAgbWFnZnIKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZXJhbiBhdXRvaGVhZGVyIGFuZCBhZGp1c3RlZCBhY2NvbmZpZy5oIGFmdGVyIGNoYW5nZXMgaW4gcjE2Mzg3CisKKzIwMDctMDUtMTggMTc6NTQgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTU0MDY6IGZyb20gbWl0c3VydV9jaGluZW46IHJlZ2lzdHJhdGlvbgorICAgb3JkZXJpbmcgZml4ZXMgZm9yIGljbXBTdGF0c1RhYmxlCisKKzIwMDctMDUtMTggMTc6NDYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTUzOTU6IGZpeCBpY21wIHRhYmxlIGVycm9ycyBpbiBuZXcgaWNtcAorICAgY29kZQorCisyMDA3LTA1LTE4IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgCiAKIDIwMDctMDUtMTggMTU6MDUgIHRhbmRlcnMKIAotCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBORVdTOiBBSVg6IGZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZwotCSAgc3RhdGljCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBORVdTOiBBSVg6IGZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZworICAgc3RhdGljCisKKzIwMDctMDUtMTggMTQ6MTggIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgQUNfQ0hFQ0tfTUVNQkVSUyBpbnN0ZWFkIG9mCisgICBBQ19DSEVDS19TVFJVQ1RfRk9SIHdoZW4gY2hlY2tpbmcgZm9yIHN0cnVjdCBpcHN0YXQgbWVtYmVycyBpbgorICAgb3JkZXIgdG8gbWFrZSBjb25maWd1cmUuaW4gc21hbGxlcgogCiAyMDA3LTA1LTE4IDEwOjIyICBtYWdmcgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaDoKLQkgIENIQU5HRVM6IHNubXBkOiBDb3JyZWN0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvcgotCSAgaG9zdC9ocl9zdG9yYWdlCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQ29ycmVjdCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3IKKyAgIGhvc3QvaHJfc3RvcmFnZQorCisyMDA3LTA1LTE4IDA5OjU3ICBtYWdmcgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IERvIG5vdCB0ZXJtaW5hdGUgb24gU0lHQ0hMRCBzaW5jZSBkYXNoIGFuZAorICAgc291bWUgYm91cm5lIHNoZWxscyB3aWxsIGV4aXQgdGhlIG1haW4gc2hlbGwgd2hlbiBhIHN1YnNoZWxsCisgICB0ZXJtaW5hdGVzIGluIHRoYXQgY2FzZS4KKworMjAwNy0wNS0xOCAwOToyMiAgdGFuZGVycworCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBVbmRvaW5nIGFjY2lkZW50YWwgY2hhbmdlIGNvbW1pdHRlZCBpbiByMTYzNzMuCisKKzIwMDctMDUtMTcgMjM6MjEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMzNzogSW1wbGVtZW50IF9zZXNzX29wZW4gaW4gdGVybXMKKyAgIG9mIHNubXBfc2Vzc19hZGQKIAogMjAwNy0wNS0xNyAyMjoxNiAgbWFnZnIKIAotCSogYWdlbnQvYWdlbnRfdHJhcC5jLCBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHRyYXBkLmMsCi0JICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLAotCSAgc25tcGxpYi9zbm1wX2FwaS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHNlbmRpbmcgc28gdGhhdAotCSAgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKLQkgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gcmVjZXB0aW9uIHNvCi0JICB0aGF0IGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5Ci0JICBDSEFOR0VTOiBhcHBzOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiBzZW5kaW5nIHNvIHRoYXQKLQkgIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTYyMDQyNDogSG9ub3IKLQkgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCBvdmVyIHRoZSBkZWZhdWx0IHN5c3RlbQorICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0CisgICBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQorICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiByZWNlcHRpb24gc28KKyAgIHRoYXQgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKKyAgIENIQU5HRVM6IGFwcHM6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHNlbmRpbmcgc28gdGhhdAorICAgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjIwNDI0OiBIb25vcgorICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUIG92ZXIgdGhlIGRlZmF1bHQgc3lzdGVtCiAKIDIwMDctMDUtMTcgMjE6NTMgIGhhcmRha2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsCi0JICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsCi0JICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsCi0JICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxMDYzMjogZnJvbSBtYXZhcmxleTogZml4IG1lbW9yeSBsZWFrIG9uCi0JICBicm9rZW4gY29udGFpbmVyIGluc2VydGlvbnMgZm9yIHRoZSBpcEFkZHJlc3NUYWJsZQorICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTA2MzI6IGZyb20gbWF2YXJsZXk6IGZpeCBtZW1vcnkgbGVhayBvbgorICAgYnJva2VuIGNvbnRhaW5lciBpbnNlcnRpb25zIGZvciB0aGUgaXBBZGRyZXNzVGFibGUKIAogMjAwNy0wNS0xNyAxODowNiAgcnN0b3J5CiAKLQkqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE3MTkyNDQ6IGZpeCBtZmQgZ2VuZXJhdGluZyBtYXAgZnVuY3Rpb24KKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNzE5MjQ0OiBmaXggbWZkIGdlbmVyYXRpbmcgbWFwIGZ1bmN0aW9uCisKKzIwMDctMDUtMTcgMTc6NDYgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oOgorCisgICBORVdTOiBzbm1wZDogcGF0Y2g6IDE3MDgyNDM6IGZyb20gbmhvcm1hbjogaW1wbGVtZW50IHRoZQorICAgaXBEZWZhdWx0Um91dGVUYWJsZSBvbiBsaW51eAogCiAyMDA3LTA1LTE3IDE2OjMxICBoYXJkYWtlcgogCi0JKiBjb25maWd1cmUuaW46Ci0JICBORVdTOiBwb3J0czogcGF0Y2g6IDE3MDYzNDQ6IGZyb20gbmF5bG9yOiBmaXggY29tcGlsYXRpb24gd2l0aAotCSAgY3lnd2luCisgICAqIGNvbmZpZ3VyZS5pbjoKKworICAgTkVXUzogcG9ydHM6IHBhdGNoOiAxNzA2MzQ0OiBmcm9tIG5heWxvcjogZml4IGNvbXBpbGF0aW9uIHdpdGgKKyAgIGN5Z3dpbgogCiAyMDA3LTA1LTE3IDE2OjIyICBoYXJkYWtlcgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6Ci0JICBORVdTOiBzbm1wZDogcGF0Y2g6IDE3MDAxNTc6IGZyb20gYWZyaWthOiBmaXhlcyBvcmRlcmluZyBvZiBleGVjCi0JICB0b2tlbnMgaW4gdGhlIHJlc3VsdGluZyBtaWIgdHJlZQorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBwYXRjaDogMTcwMDE1NzogZnJvbSBhZnJpa2E6IGZpeGVzIG9yZGVyaW5nIG9mIGV4ZWMKKyAgIHRva2VucyBpbiB0aGUgcmVzdWx0aW5nIG1pYiB0cmVlCiAKIDIwMDctMDUtMTcgMTU6NTMgIGhhcmRha2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNjE3MjU1OiBmaXggbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGFycmF5Ci0JICB0byBtYXRjaCBjb2RlLgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNjE3MjU1OiBmaXggbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGFycmF5CisgICB0byBtYXRjaCBjb2RlLgogCiAyMDA3LTA1LTE3IDEzOjUzICBoYXJkYWtlcgogCi0JKiBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxMjI1NDQwOiBBcHBseSBpbnRlbnQgb2YgcGF0Y2g6IHRvIGRlbGF5Ci0JICBzaWdodXAgdGlsbCBpdCBpcyBzYWZlLgotCSAgQ0hBTkdFUzogc25tcHRyYXBkOiBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0bwotCSAgZGVsYXkgc2lnaHVwIHRpbGwgaXQgaXMgc2FmZS4KKyAgICogYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxMjI1NDQwOiBBcHBseSBpbnRlbnQgb2YgcGF0Y2g6IHRvIGRlbGF5CisgICBzaWdodXAgdGlsbCBpdCBpcyBzYWZlLgorICAgQ0hBTkdFUzogc25tcHRyYXBkOiBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0bworICAgZGVsYXkgc2lnaHVwIHRpbGwgaXQgaXMgc2FmZS4KKworMjAwNy0wNS0xNyAxMzozNSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIGNvbmZpZ19lcnJvciBpbnN0ZWFkIG9mIGNvbmZpZ19yZXF1aXJlIG9mCisgICBhIGJvZ3VzIGZpbGUvI2Vycm9yIHRvIGdlbmVyYXRlIGVycm9yIG1lc3NhZ2VzIGF0IGNvbmZpZ3VyZSB0aW1lLgogCiAyMDA3LTA1LTE3IDA0OjM5ICBoYXJkYWtlcgogCi0JKiBzbm1wbGliL2FzbjEuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoOiAxNjQ1Njk4OiBmaXggNjQtYml0IHNpZ25lZCBpbnRlZ2VyCi0JICBlbmNvZGluZworICAgKiBhcHBzL3NubXB1c20uYywgc25tcGxpYi9hc24xLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoOiAxNjQ1Njk4OiBmaXggNjQtYml0IHNpZ25lZCBpbnRlZ2VyCisgICBlbmNvZGluZwogCiAyMDA3LTA1LTE2IDIzOjUzICB0YW5kZXJzCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaDoKLQkgIENIQU5HRVM6IEhQLVVYOiBIUC1VWCBuZWVkcyBfUkVFTlRSQU5UIGRlZmluZWQgdG8gcGljayB1cAotCSAgc3RydG9rX3IuCi0JICBPdGhlcndpc2UsIGF0IGxlYXN0IGZvciA2NC1iaXQgY29kZSwgc3RydG9rX3Igd2lsbCBub3Qgd29yawotCSAgYW5kIHdpbGwgbWFrZSBuZXQtc25tcCBzZWdmYXVsdC4KKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oOgorCisgICBDSEFOR0VTOiBIUC1VWDogSFAtVVggbmVlZHMgX1JFRU5UUkFOVCBkZWZpbmVkIHRvIHBpY2sgdXAKKyAgIHN0cnRva19yLgorICAgT3RoZXJ3aXNlLCBhdCBsZWFzdCBmb3IgNjQtYml0IGNvZGUsIHN0cnRva19yIHdpbGwgbm90IHdvcmsKKyAgIGFuZCB3aWxsIG1ha2UgbmV0LXNubXAgc2VnZmF1bHQuCisKKzIwMDctMDUtMTYgMjM6MzkgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGZpeCBwYXRjaCAxNjI1MDY5IChyMTYzNjUpIHRvIG5vdCBicmVhayB0aGUgYnVpbGQgb24gU29sYXJpcworICAgMi42LzcKKworMjAwNy0wNS0xNSAxNzozMyAgcnN0b3J5CisKKyAgICogZGlzdC9zdm51cDoKKworICAgLSBhZGQgd2FybmluZyBpZiBzdGFyIG5vdCBhdmFpbGFibGUKKyAgIC0gZml4IHBhdHRlcm4gdG8gZXhjbHVkZSAuc3ZuIGRpcnMgZnJvbSB0YXJiYWxscworCisyMDA3LTA1LTE1IDE1OjU1ICByc3RvcnkKKworICAgKiBkaXN0L2N2c3VwOgorCisgICB3YXJuIGlmIHN0YXIgbm90IGF2YWlsYWJsZQogCiAyMDA3LTA1LTE1IDE0OjM2ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jOgotCSAgZml4IHR5cG8KKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmM6CisKKyAgIGZpeCB0eXBvCiAKIDIwMDctMDUtMTQgMjE6NDkgIHRhbmRlcnMKIAotCSogYXBwcy9NYWtlZmlsZS5pbjoKLQkgIGFkZCBtaXNzaW5nIENGTEFHUyB0byBsaW5rIGxpbmUKKyAgICogYXBwcy9NYWtlZmlsZS5pbjoKKworICAgYWRkIG1pc3NpbmcgQ0ZMQUdTIHRvIGxpbmsgbGluZQogCiAyMDA3LTA1LTE0IDIxOjQ4ICB0YW5kZXJzCiAKLQkqIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46Ci0JICBhZGQgbWlzc2luZyBDRkxBR1MgdG8gbGluayBsaW5lCisgICAqIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBtaXNzaW5nIENGTEFHUyB0byBsaW5rIGxpbmUKKworMjAwNy0wNS0xNCAxNTo1NyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNjI1MDY5OiBzcGVlZCBpbXByb3ZlbWVudHMgZm9yIHNvbGFyaXMKKyAgIHJvdXRpbmcgdGFibGUgYWNjZXNzCiAKIDIwMDctMDUtMTQgMTQ6NTAgIGhhcmRha2VyCiAKLQkqIGFnZW50L3NubXBfYWdlbnQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTU5NTU2ODogZnJvbSBjeXJpbF9tYXJnYXJpYTogZml4Ci0JICBkZWxlZ2F0ZWQgU0VUIHJlcXVlc3RzIGZyb20gYWdlbnR4IHN1YmFnZW50cworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTU5NTU2ODogZnJvbSBjeXJpbF9tYXJnYXJpYTogZml4CisgICBkZWxlZ2F0ZWQgU0VUIHJlcXVlc3RzIGZyb20gYWdlbnR4IHN1YmFnZW50cworCisyMDA3LTA1LTE0IDE0OjA0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIHVwZGF0ZSB0byBwb2ludCB0byB3aWtpIGFuZCBhIGZldyBtb3JlIGN2cyAtPiBzdm4gY2hhbmdlcwogCiAyMDA3LTA1LTEzIDE0OjI3ICBtYWdmcgogCi0JKiBzbm1wbGliL3NubXBfc2VydmljZS5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogUmVhZCB0aGUgY29uZmlnIHBhcmFtZXRlcnMgZGVmVGFyZ2V0IGFuZAotCSAgZGVmRG9tYWluIGZyb20gc25tcC5jb25mIGFzIHdlbGwgYXMgZnJvbSA8YXBwbGljYXRpb24+LmNvbmYKKyAgICogc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVhZCB0aGUgY29uZmlnIHBhcmFtZXRlcnMgZGVmVGFyZ2V0IGFuZAorICAgZGVmRG9tYWluIGZyb20gc25tcC5jb25mIGFzIHdlbGwgYXMgZnJvbSA8YXBwbGljYXRpb24+LmNvbmYKKworMjAwNy0wNS0xMiAxMToxNyAgbWFnZnIKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEZWFsbG9jYXRlIHRoZSBfbWliaW5kZXhlcyBjYWNoZSBpbgorICAgc2h1dGRvd25fbWliIHRvIG1ha2UgZm9yIGEgY2xlYW5lciBleGl0IG9mIHRoZSBsaWJyYXJ5CiAKIDIwMDctMDUtMTIgMTE6MTQgIG1hZ2ZyCiAKLQkqIHNubXBsaWIvbWliLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBEZWFsbG9jYXRlIHRoZSBjb25mbWlicyBhbmQgY29uZm1pYmRpcnMKLQkgIHZhcmlhYmxlcyBpbiBzaHV0ZG93bl9taWIgdG8gbWFrZSBmb3IgYSBjbGVhbmVyIGV4aXQgb2YgdGhlCi0JICBsaWJyYXJ5CisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERlYWxsb2NhdGUgdGhlIGNvbmZtaWJzIGFuZCBjb25mbWliZGlycworICAgdmFyaWFibGVzIGluIHNodXRkb3duX21pYiB0byBtYWtlIGZvciBhIGNsZWFuZXIgZXhpdCBvZiB0aGUKKyAgIGxpYnJhcnkKIAogMjAwNy0wNS0xMSAyMTowNiAgbWFnZnIKIAotCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY4NzMzNjogU3RhcnQgdXNpbmcgdGhlIGVuaGFuY2VkCi0JICByZWFkX2NvbmZpZyBpbnRlcmZhY2UKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjg3MzM2OiBTdGFydCB1c2luZyB0aGUgZW5oYW5jZWQKKyAgIHJlYWRfY29uZmlnIGludGVyZmFjZQogCiAyMDA3LTA1LTExIDIwOjMzICBtYWdmcgogCi0JKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0JICBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMiBvZiB0aGUgcGF0Y2ggLSBXaGVuIHJlZ2lzdGVyaW5nCi0JICBtdWx0aXBsZSBwcmVtaWIgaGFuZGxlcnMgb25seSB0aGUgbGFzdCBvbmUgd2FzIHJlZ2lzdGVyZWQgcHJlbWliLAotCSAgdGhlIG90aGVycyB3ZXJlIHJlZ2lzdGVyZCBhdCB0aGUgbm9ybWFsIHRpbWUuIFRoaXMgcGF0Y2ggcHV0cyBhbGwKLQkgIHJlZ2lzdHJhdGlvbiBpbiBvbmUgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcHJvYmxlbWF0aWMgdmFsdWUgYXMKLQkgIGFuIGFyZ3VtZW50IGFuZCBtYWtlcyB0aGUgb2xkIGZ1bmN0aW9ucyB0aGluIHdyYXBwZXJzIG9mIHRoZSBuZXcKLQkgIG9uZQorICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAyIG9mIHRoZSBwYXRjaCAtIFdoZW4gcmVnaXN0ZXJpbmcKKyAgIG11bHRpcGxlIHByZW1pYiBoYW5kbGVycyBvbmx5IHRoZSBsYXN0IG9uZSB3YXMgcmVnaXN0ZXJlZCBwcmVtaWIsCisgICB0aGUgb3RoZXJzIHdlcmUgcmVnaXN0ZXJkIGF0IHRoZSBub3JtYWwgdGltZS4gVGhpcyBwYXRjaCBwdXRzIGFsbAorICAgcmVnaXN0cmF0aW9uIGluIG9uZSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBwcm9ibGVtYXRpYyB2YWx1ZSBhcworICAgYW4gYXJndW1lbnQgYW5kIG1ha2VzIHRoZSBvbGQgZnVuY3Rpb25zIHRoaW4gd3JhcHBlcnMgb2YgdGhlIG5ldworICAgb25lCiAKIDIwMDctMDUtMTEgMjA6MjQgIG1hZ2ZyCiAKLQkqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLQkgIENIQU5HRTogc25tcGxpYjogUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDMgb2YgdGhlIHBhdGNoIC0gdXNlCi0JICB0aGUgc2FtZSBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHdoYXQgdG8gdW5yZWdpc3RlciBhcyBpcyB1c2VkIHRvCi0JICBkZXRlcm1pbmUgd2hhdCB0byByZWdzdGVyCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFOiBzbm1wbGliOiBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMyBvZiB0aGUgcGF0Y2ggLSB1c2UKKyAgIHRoZSBzYW1lIGFsZ29yaXRobSB0byBkZXRlcm1pbmUgd2hhdCB0byB1bnJlZ2lzdGVyIGFzIGlzIHVzZWQgdG8KKyAgIGRldGVybWluZSB3aGF0IHRvIHJlZ3N0ZXIKIAogMjAwNy0wNS0xMSAxNjozMiAgbWFnZnIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmM6Ci0JICBEb24ndCBsb2cgaG9zdC9ocl9wcm9jIGV2ZW50cyBpbiB0aGUgc25tcGQgZG9tYWluCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jOgorCisgICBEb24ndCBsb2cgaG9zdC9ocl9wcm9jIGV2ZW50cyBpbiB0aGUgc25tcGQgZG9tYWluCiAKIDIwMDctMDUtMTEgMTY6MjcgIG1hZ2ZyCiAKLQkqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgotCSAgRGVjb3JhdGUgbW9yZSBkZWJ1ZyBsaW5lcyB3aXRoIHRoZSB0YWcgdGhhdCBjb250cm9scyB0aGUgbG9nCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBEZWNvcmF0ZSBtb3JlIGRlYnVnIGxpbmVzIHdpdGggdGhlIHRhZyB0aGF0IGNvbnRyb2xzIHRoZSBsb2cKIAogMjAwNy0wNS0xMSAxNTowNyAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjI4NjEzOiBSZXN0b3JlIG1lbVRvdGFsRnJlZS4wIG9uIFNvbGFyaXMKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2Mjg2MTM6IFJlc3RvcmUgbWVtVG90YWxGcmVlLjAgb24gU29sYXJpcwogCiAyMDA3LTA1LTEwIDIxOjUyICB0YW5kZXJzCiAKLQkqIE1ha2VmaWxlLmluLCBweXRob24vc2V0dXAucHk6Ci0JICBORVdTOiBweXRob246IFBBVENIOiAxNzE2MTE0OiBMZXQgcHl0aG9uIGJ1aWxkIGluIHNvdXJjZSB0cmVlCi0JICBQYXRjaCBwcm92aWRlZCBieSBKb2NoZW4gRnJpZWRyaWNoIChEZWJpYW4gcGF0Y2ggIzM4KS4KKyAgICogTWFrZWZpbGUuaW4sIHB5dGhvbi9zZXR1cC5weToKKworICAgTkVXUzogcHl0aG9uOiBQQVRDSDogMTcxNjExNDogTGV0IHB5dGhvbiBidWlsZCBpbiBzb3VyY2UgdHJlZQorICAgUGF0Y2ggcHJvdmlkZWQgYnkgSm9jaGVuIEZyaWVkcmljaCAoRGViaWFuIHBhdGNoICMzOCkuCiAKIDIwMDctMDUtMTAgMDU6MTggIG1hZ2ZyCiAKLQkqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLQkgIFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAxIG9mIHRoZSBwYXRjaCAtIGxlc3NlbnMgdGhlIHNjb3BlIG9mCi0JICB0aGUgbHRtcDIgdmFyaWFibGUKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMSBvZiB0aGUgcGF0Y2ggLSBsZXNzZW5zIHRoZSBzY29wZSBvZgorICAgdGhlIGx0bXAyIHZhcmlhYmxlCiAKIDIwMDctMDUtMDkgMjM6NTcgIHRhbmRlcnMKIAotCSogUkVBRE1FLmlyaXg6Ci0JICBkb2N1bWVudCBvcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKKyAgICogUkVBRE1FLmlyaXg6CisKKyAgIGRvY3VtZW50IG9wdGltaXplZCBJUklYIGNwdSBzdGF0cwogCiAyMDA3LTA1LTA5IDIzOjQ5ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLAotCSAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmMsCi0JICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uaDoKLQkgIE5FV1M6IGlyaXg6IFBBVENIOiAxNzA5NzQ4OiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uaDoKIAotMjAwNy0wNS0wOSAyMjoxNiAgdGFuZGVycworICAgTkVXUzogaXJpeDogUEFUQ0g6IDE3MDk3NDg6IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cwogCi0JKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLQkgIEZpeCBwcm9ibGVtcyB3aXRoIHNpbmdsZS1saW5lIGV4dGVuZCBzY3JpcHRzLgotCSAgKGZpeCB0eXBvIGluIHIxNjMzMiBmb3IgNS40LngpCisyMDA3LTA1LTA5IDIxOjIzICByc3RvcnkKIAotMjAwNy0wNS0wOSAwMToxMCAgYWxleF9iCisgICAqIGRpc3QvY3Zzc2hvdzoKIAotCSogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgotCSAgV2luMzIgYnVpbGQgZml4ZXMuCisgICB1cGRhdGUgdG8gc2hvdyBzdm4gcmVwbyB0b28KKworMjAwNy0wNS0wOSAxNTozOSAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgaWNtcFN0YXRzVGFibGUgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgTGludXgKIAogMjAwNy0wNS0wOCAxOTo0OCAgbWFnZnIKIAotCSogYWdlbnQvc25tcF9hZ2VudC5jOgotCSAgUmV2ZXJ0IG1pc3Rha2VubHkgY29tbWl0dGVkIGV4dHJhIHRyYWNlIGxvZ3MKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZXZlcnQgbWlzdGFrZW5seSBjb21taXR0ZWQgZXh0cmEgdHJhY2UgbG9ncwogCiAyMDA3LTA1LTA3IDIwOjQ2ICBoYXJkYWtlcgogCi0JKiBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwKLQkgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLAotCSAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL3Rlc3QucGw6Ci0JICB1cGRhdGUgYWdlbnQ6OmRlZmF1bHRfc3RvcmUgcGVybCBtb2R1bGUgZm9yIG5ldyBkZWZzCisgICAqICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL3Rlc3QucGw6CisKKyAgIHVwZGF0ZSBhZ2VudDo6ZGVmYXVsdF9zdG9yZSBwZXJsIG1vZHVsZSBmb3IgbmV3IGRlZnMKKworMjAwNy0wNS0wNyAyMDoyNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBtb3JlIHN2biBjb252ZXJzaW9uIGZpeGVzCiAKIDIwMDctMDUtMDcgMjA6MjMgIGhhcmRha2VyCiAKLQkqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfYWdlbnQuYywKLQkgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6Ci0JICBORVdTOiBzbm1wZDogQlVHOiAxNzEyOTg4OiBkZWZhdWx0IGFuZCBjb25maWd1cmFibGUgbWF4aW11bQotCSAgbnVtYmVyIG9mIHZhcmJpbmRzIHJldHVybmFibGUgdG8gYSBHRVRCVUxLIHJlcXVlc3QKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIE5FV1M6IHNubXBkOiBCVUc6IDE3MTI5ODg6IGRlZmF1bHQgYW5kIGNvbmZpZ3VyYWJsZSBtYXhpbXVtCisgICBudW1iZXIgb2YgdmFyYmluZHMgcmV0dXJuYWJsZSB0byBhIEdFVEJVTEsgcmVxdWVzdAorCisyMDA3LTA1LTA3IDIwOjA1ICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIHJlbmFtZSBvZiBicmFuY2ggZGlycworCisyMDA3LTA1LTA3IDE2OjE0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGF0dGVtcHRlZCAodW50ZXN0ZWQpIHVwZGF0ZQorCisyMDA3LTA1LTA3IDEzOjU1ICByc3RvcnkKKworICAgKiBkaXN0L3N2bnVwOgorCisgICBkb24ndCBkZWxldGUgdGFyYmFsbCBpZiBzY3AgZmFpbHMKIAogMjAwNy0wNS0wNCAyMDoyNyAgdGFuZGVycwogCi0JKiBwZXJsL1NOTVAvU05NUC54czoKLQkgIENIQU5HRVM6IHBlcmw6IGZpeCBTTk1QIFNFVCBmb3IgSVAgYWRkcmVzc2VzIG9uIDY0LWJpdAorICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogcGVybDogZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0CiAKIDIwMDctMDUtMDQgMTA6MjIgIHRhbmRlcnMKIAotCSogTWFrZWZpbGUuaW46Ci0JICBpbnN0YWxsIGRyYWdvbmZseS5oCisgICAqIE1ha2VmaWxlLmluOgorCisgICBpbnN0YWxsIGRyYWdvbmZseS5oCiAKIDIwMDctMDUtMDMgMjM6MDEgIHRhbmRlcnMKIAotCSogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHJhZ29uZmx5Lmg6Ci0JICBDSEFOR0VTOiBCVUc6IDE3MTA5MTA6IGluaXRpYWwgc3VwcG9ydCBmb3IgRHJhZ29uRmx5IEJTRAorICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kcmFnb25mbHkuaDoKKworICAgQ0hBTkdFUzogQlVHOiAxNzEwOTEwOiBpbml0aWFsIHN1cHBvcnQgZm9yIERyYWdvbkZseSBCU0QKIAogMjAwNy0wNS0wMyAyMjoxMCAgdGFuZGVycwogCi0JKiBwZXJsL1NOTVAvU05NUC54czoKLQkgIENIQU5HRVM6IHBlcmw6IGZpeCBTTk1QIFNFVCBmb3IgSVAgYWRkcmVzc2VzIG9uIDY0LWJpdAotCSAgUGF0Y2ggcHJvcG9zZWQgYnkgSmVmZiBMYW5nZS4KKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeCBTTk1QIFNFVCBmb3IgSVAgYWRkcmVzc2VzIG9uIDY0LWJpdAorICAgUGF0Y2ggcHJvcG9zZWQgYnkgSmVmZiBMYW5nZS4KKworMjAwNy0wNS0wMyAxNjowMCAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgYnVpbGQgZml4IChlLmcuIGZvciBlYXJseSBBSVgpOiB1c2UgdWludDMyX3QgaS5zLm8uIF9fdWludDMyX3QKIAogMjAwNy0wNS0wMiAxMzoxMyAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0JICBGaXggcHJvYmxlbXMgd2l0aCBzaW5nbGUtbGluZSBleHRlbmQgc2NyaXB0cy4KKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6CisKKyAgIEZpeCBwcm9ibGVtcyB3aXRoIHNpbmdsZS1saW5lIGV4dGVuZCBzY3JpcHRzLgorCisyMDA3LTA1LTAxIDE5OjUxICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIC0gdGVzdCBmb3IgSUZBX0ZfVEVNUE9SQVJZIGJlZm9yZSB1c2luZworICAgLSByZW1vdmUgcmVkdW5kYW50IGlmZGVmCiAKIDIwMDctMDUtMDEgMTE6MzQgIGR0czEyCiAKLQkqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6Ci0JICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFN1cHBvcnQgZm9yIGZvcndhcmRpbmcgdHJhcHMgYnkgT0lEIHN1YnRyZWUuCi0JICAoQ29uc2lzdGVudCB3aXRoIHN1YnRyZWUtYmFzZWQgc2NyaXB0IHByb2Nlc3NpbmcpLgorICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFN1cHBvcnQgZm9yIGZvcndhcmRpbmcgdHJhcHMgYnkgT0lEIHN1YnRyZWUuCisgICAoQ29uc2lzdGVudCB3aXRoIHN1YnRyZWUtYmFzZWQgc2NyaXB0IHByb2Nlc3NpbmcpLgorCisyMDA3LTA0LTMwIDE0OjUxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDMwMDQ6IENvbnNvbGlkYXRlIHNubXA2IGhhbmRsaW5nLgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgTmVpbCBIb3JtYW4sIHBsdXMgc29tZSBleHRyYSB0aWR5aW5nIHVwLgorCisyMDA3LTA0LTMwIDE0OjMzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDIzNjY6IFN1cHBvcnQgZm9yIGljbXBTdGF0c1RhYmxlCisgICBQYXRjaCBwcm92aWRlZCBieSBOZWlsIEhvcm1hbgorCisyMDA3LTA0LTMwIDE0OjMxICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMjM2MTogUmVhZCBzdGF0cyBmcm9tIC9wcm9jL25ldC9zbm1wNgorCisyMDA3LTA0LTMwIDE0OjE0ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIEZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyB3aGVuIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZC4KIAogMjAwNy0wNC0zMCAxMzoyNiAgZHRzMTIKIAotCSogUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMsCi0JICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzM3OiBUaWR5IHVwIHNldFNlcmlhbE5vCi0JICBpbXBsZW1lbnRhdGlvbnMuCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczNzogVGlkeSB1cCBzZXRTZXJpYWxObworICAgaW1wbGVtZW50YXRpb25zLgogCiAyMDA3LTA0LTMwIDEzOjA2ICBkdHMxMgogCi0JKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczMjogRml4IGRlYnVnIG91dHB1dCBzdGF0ZW1lbnRzLgorICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzMyOiBGaXggZGVidWcgb3V0cHV0IHN0YXRlbWVudHMuCiAKIDIwMDctMDQtMzAgMTM6MDIgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczMDogUmVtb3ZlIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzMwOiBSZW1vdmUgdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KIAogMjAwNy0wNC0zMCAxMTozMiAgZHRzMTIKIAotCSogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjk4MTg0OiBSZWdpc3RlciBub24tZGVmYXVsdCBjb250ZXh0Ci0JICBpbnRlZ2VycyBhcyB3cml0YWJsZS4KLQkgIFBhdGNoIHByb3ZpZGVkIGJ5IE1hcmsgTmF5bG9yLgorICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY5ODE4NDogUmVnaXN0ZXIgbm9uLWRlZmF1bHQgY29udGV4dAorICAgaW50ZWdlcnMgYXMgd3JpdGFibGUuCisgICBQYXRjaCBwcm92aWRlZCBieSBNYXJrIE5heWxvci4KKworMjAwNy0wNC0zMCAxMToyNiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY5ODE3OiBJbXByb3ZlZCBSRkMgNDI5MyBzdXBwb3J0LgorICAgSW5jbHVkZXMgbm9uLXVuaWNhc3QgYW5kIHJhbmRvbWx5IGNob3NlbiBJUCBhZGRyZXNzZXMuCisgICBQYXRjaCBwcm92aWRlZCBieSBWYXJ1biBDaGFuZHJhbW9oYW4KIAogMjAwNy0wNC0zMCAxMTowNCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY5Mjc2ODogRml4IGNvcHlpbmcgb2Ygbm9uLW9jdGV0LWFsaWduZWQKLQkgIElQIGFkZHJlc3MgcHJlZml4ZXMuCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY5Mjc2ODogRml4IGNvcHlpbmcgb2Ygbm9uLW9jdGV0LWFsaWduZWQKKyAgIElQIGFkZHJlc3MgcHJlZml4ZXMuCisKKzIwMDctMDQtMzAgMTA6NTAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjcwNTExOiBJbXBsZW1lbnQgbmV0d29yayBjb25uZWN0aW9uCisgICBwcm9jZXNzIElEIG9iamVjdHMuCisgICBQYXRjaCBwcm92aWRlZCBieSBWYXJ1biBDaGFuZHJhbW9oYW4KKworMjAwNy0wNC0zMCAxMDo0NiAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgRml4IGRlY2xhcmF0aW9uIG9mIHNubXBfc2Vzc19yZWFkX2V4dGQoKQogCiAyMDA3LTA0LTMwIDEwOjI1ICBkdHMxMgogCi0JKiBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzI1OiBGaXggcHJvYmxlbSB3aXRoIG9wZXJhdG9yCi0JICBwcmVjZWRlbmNlLgorICAgKiBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMjU6IEZpeCBwcm9ibGVtIHdpdGggb3BlcmF0b3IKKyAgIHByZWNlZGVuY2UuCisKKzIwMDctMDQtMzAgMTA6MjEgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzE5OiBEZWNsYXJlIHNubXBfc2Vzc19yZWFkX2V4dGQoKQorCisyMDA3LTA0LTMwIDEwOjE0ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMTg6IE1ha2UgX3Nlc3Nfc2VscG9sX2luZm8gc3RhdGljLgorCisyMDA3LTA0LTMwIDEwOjA5ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMTc6IFJlbW92ZSBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUKIAogMjAwNy0wNC0zMCAxMDowNyAgZHRzMTIKIAotCSogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMxNjogRG9uJ3QgZHJvcCBjb25zdCBmcm9tIGNhc3RzLgorICAgKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMTY6IERvbid0IGRyb3AgY29uc3QgZnJvbSBjYXN0cy4KKworMjAwNy0wNC0yNyAxMDoyMSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBCcmluZyBkeW5hbWljIG1vZHVsZSB1bmxvYWQgcHJvY2Vzc2luZyBtb3JlIGludG8gbGluZSB3aXRoCisgICAibm9ybWFsIiBNSUIgbW9kdWxlcy4gU3VnZ2VzdGVkIGJ5IE1hZ251cyBGcm9tcmVpZGUuCisgICBTZWUgY29kZXJzIHRocmVhZCAic2h1dGRvd25fZm9vIG9yIGRlaW5pdF9mb28iLgorCisyMDA3LTA0LTI3IDEwOjE3ICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIFVwZGF0ZSBwb3N0LXJlbGVhc2UgYW5ub3VuY2VtZW50IGluc3RydWN0aW9ucy4KIAogMjAwNy0wNC0yNCAxMjozNSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0JICBGaXggaW5jb21wbGV0ZSBPSUQgaGFuZGxpbmcgb2Ygc2luZ2xlLWxpbmUgZXh0ZW5kIHNjcmlwdHMuCi0JICBSZXBvcnRlZCBieSBNYXggb24gY29kZXJzIGxpc3QsIDd0aCBBcHJpbC4gU2VlIHRocmVhZAotCSAgIi4uLiBzZWdmYXVsdCAuLiB3aGVuIGF0dGVtcHRpbmcgU05NUCBHRVQgb24gZXh0ZW5kIG9yIGV4ZWMgaXRlbSIKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6CisKKyAgIEZpeCBpbmNvbXBsZXRlIE9JRCBoYW5kbGluZyBvZiBzaW5nbGUtbGluZSBleHRlbmQgc2NyaXB0cy4KKyAgIFJlcG9ydGVkIGJ5IE1heCBvbiBjb2RlcnMgbGlzdCwgN3RoIEFwcmlsLiBTZWUgdGhyZWFkCisgICAiLi4uIHNlZ2ZhdWx0IC4uIHdoZW4gYXR0ZW1wdGluZyBTTk1QIEdFVCBvbiBleHRlbmQgb3IgZXhlYyBpdGVtIgogCiAyMDA3LTA0LTIwIDA4OjMwICBkdHMxMgogCi0JKiBtYW4vc25tcGQuY29uZi41LmRlZjoKLQkgIERvY3VtZW50IHRoZSBiZWhhdmlvdXIgb2YgYSBsb2FkIHRocmVzaG9sZCBvZiAwLgotCSAgUmVwb3J0ZWQgYnkgRm9uZyBUc3VpLgorICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgRG9jdW1lbnQgdGhlIGJlaGF2aW91ciBvZiBhIGxvYWQgdGhyZXNob2xkIG9mIDAuCisgICBSZXBvcnRlZCBieSBGb25nIFRzdWkuCiAKIDIwMDctMDQtMjAgMDg6MjEgIGR0czEyCiAKLQkqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKLQkgIExvbmctdGVybSBsb2FkIGF2ZXJhZ2UgaXMgY2FsY3VsYXRlZCBvdmVyIDE1IG1pbnV0ZXMsIG5vdCAxMC4KLQkgIFJlcG9ydGVkIGJ5IEZvbmcgVHN1aQorICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIExvbmctdGVybSBsb2FkIGF2ZXJhZ2UgaXMgY2FsY3VsYXRlZCBvdmVyIDE1IG1pbnV0ZXMsIG5vdCAxMC4KKyAgIFJlcG9ydGVkIGJ5IEZvbmcgVHN1aQorCisyMDA3LTA0LTE5IDEyOjUzICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIFR3ZWFrIENoYW5nZUxvZyBpbnN0cnVjdGlvbnMgZm9yIFNWTgogCiAyMDA3LTA0LTEwIDE0OjE2ICBkdHMxMgogCi0JKiBwZXJsL1NOTVAvU05NUC54czoKLQkgIERldGVjdCBPSUQgcmV0cmFja2luZyAoYXMgd2VsbCBhcyBzaW1wbGUgcmVwZXRpdGlvbnMpIHdoZW4KLQkgIGJ1bGt3YWxraW5nIGFuIE9JRCB0cmVlLgotCSAgU2VlIHVzZXJzIHRocmVhZCAibWlzc2luZyBpbmRpY2VzIGluIGJ1bGt3YWxrIHJlc3VsdCIuCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBEZXRlY3QgT0lEIHJldHJhY2tpbmcgKGFzIHdlbGwgYXMgc2ltcGxlIHJlcGV0aXRpb25zKSB3aGVuCisgICBidWxrd2Fsa2luZyBhbiBPSUQgdHJlZS4KKyAgIFNlZSB1c2VycyB0aHJlYWQgIm1pc3NpbmcgaW5kaWNlcyBpbiBidWxrd2FsayByZXN1bHQiLgogCiAyMDA3LTA0LTEwIDExOjQ5ICBkdHMxMgogCi0JKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmg6Ci0JICBDbGFyaWZ5IGNvcHlyaWdodCBzdGF0dXMgb2YgV2luMzIgQVBJIGRlZmluaXRpb25zLgorICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmg6CisKKyAgIENsYXJpZnkgY29weXJpZ2h0IHN0YXR1cyBvZiBXaW4zMiBBUEkgZGVmaW5pdGlvbnMuCiAKIDIwMDctMDQtMTAgMTE6MjcgIGR0czEyCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2R5bml4Lmg6Ci0JICBDbGFyaWZ5IGNvcHlyaWdodCBzdGF0dXMgb2YgQlNELWRlcml2ZWQgVENQVFYqIGRlZmluaXRpb25zLgorICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9keW5peC5oOgogCi0yMDA3LTA0LTAzIDA4OjU5ICB0YW5kZXJzCisgICBDbGFyaWZ5IGNvcHlyaWdodCBzdGF0dXMgb2YgQlNELWRlcml2ZWQgVENQVFYqIGRlZmluaXRpb25zLgogCi0JKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKLQkgIGZpeCBzeW50YXggZXJyb3IgaW50cm9kdWNlZCBieSBsYXN0IHBhdGNoCisyMDA3LTA0LTA5IDE0OjAyICByc3RvcnkKKworICAgKiBkaXN0L3N2bnVwOgorCisgICAtIHJlbW92ZSBkZWJ1Z2dpbmcKKyAgIC0gY2hlY2sgcmMgZm9yIHRhciwgZ3ppcCBhbmQgc2NwIHN0ZXBzCisKKzIwMDctMDQtMDYgMTg6MzggIHJzdG9yeQorCisgICAqIGRpc3Qvc3ZudXA6CisKKyAgIHN2biBlcXVpdmFsZW50IG9mIGN2c3VwCiAKIDIwMDctMDQtMDMgMDg6NTQgIGR0czEyCiAKLQkqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgotCSAgRW1waGFzaXNlIHRoZSB1c2Ugb2YgU05NUHYzIGluIERpc01hbiBtb25pdG9yaW5nLgotCSAgRml4IHRoZSBzeW50YXggb2Ygbm9uLWV4aXN0YW5jZS92YWx1ZS1jaGFuZ2UgdGVzdHMuCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBFbXBoYXNpc2UgdGhlIHVzZSBvZiBTTk1QdjMgaW4gRGlzTWFuIG1vbml0b3JpbmcuCisgICBGaXggdGhlIHN5bnRheCBvZiBub24tZXhpc3RhbmNlL3ZhbHVlLWNoYW5nZSB0ZXN0cy4KIAogMjAwNy0wNC0wMiAxNDo1NSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTA0NjMyNzogUmVzZXQgImluY2x1ZGVBbGxEaXNrcyIgZmxhZyB3aGVuCi0JICByZWxvYWRpbmcuCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTA0NjMyNzogUmVzZXQgImluY2x1ZGVBbGxEaXNrcyIgZmxhZyB3aGVuCisgICByZWxvYWRpbmcuCiAKIDIwMDctMDQtMDIgMTQ6NDUgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2MDIyODY6IERvbid0IGxldCB0YWJsZSBob2xlcyBibG9jayBsYXRlcgotCSAgcm93cy4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjAyMjg2OiBEb24ndCBsZXQgdGFibGUgaG9sZXMgYmxvY2sgbGF0ZXIKKyAgIHJvd3MuCiAKIDIwMDctMDQtMDIgMTM6NTEgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDEwNzM3ODI6IFJlc3RvcmUgUGVyZlN0YXQgdmFsdWVzIGZvciBGcmVlQlNECi0JICA1Lnggc3lzdGVtcy4KLQkgIEl0J3MgdW5jbGVhciB3aHkgdGhlICJuZXciIGNhbGN1bGF0aW9uIHdhcyBhKSBwcm9wb3NlZCwgYikKLQkgIHdpdGhkcmF3biwKLQkgIGFuZCBjKSB3aGF0IHdhcyB3cm9uZyB3aXRoIHRoZSBwcmV2aW91cyBjYWxjdWxhdGlvbiAod2hpY2ggc2VlbXMKLQkgIHRvCi0JICBtYXRjaCB0aGUgb3V0cHV0IG9mICdwcycpCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTA3Mzc4MjogUmVzdG9yZSBQZXJmU3RhdCB2YWx1ZXMgZm9yIEZyZWVCU0QKKyAgIDUueCBzeXN0ZW1zLgorICAgSXQncyB1bmNsZWFyIHdoeSB0aGUgIm5ldyIgY2FsY3VsYXRpb24gd2FzIGEpIHByb3Bvc2VkLCBiKQorICAgd2l0aGRyYXduLAorICAgYW5kIGMpIHdoYXQgd2FzIHdyb25nIHdpdGggdGhlIHByZXZpb3VzIGNhbGN1bGF0aW9uICh3aGljaCBzZWVtcworICAgdG8KKyAgIG1hdGNoIHRoZSBvdXRwdXQgb2YgJ3BzJykKIAogMjAwNy0wNC0wMiAxMzowNiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiA5MDI2MTA6IERvbid0IGRpc2NhcmQgcGVuZGluZyBkYXRhIGZvbGxvd2luZwotCSAgYSBUUkFQLgorICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogOTAyNjEwOiBEb24ndCBkaXNjYXJkIHBlbmRpbmcgZGF0YSBmb2xsb3dpbmcKKyAgIGEgVFJBUC4KIAogMjAwNy0wNC0wMiAxMjo1NiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiA5MDI4MDE6IEZpeCBvcmRlcmluZyBvZiBTTVVYLXJlZ2lzdGVyZWQKLQkgIHN1YnRyZWVzLgorICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogOTAyODAxOiBGaXggb3JkZXJpbmcgb2YgU01VWC1yZWdpc3RlcmVkCisgICBzdWJ0cmVlcy4KIAogMjAwNy0wNC0wMiAxMjozNSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjg1MDY3OiBNb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YKLQkgIFNOTVB2My1hZG1pbiBNSUIgdGFibGVzLgotCSAgVGhpcyBhY3R1YWxseSBmaXhlcyB0aHJlZSBzZXBhcmF0ZSBwcm9ibGVtczoKLQkgICogQSBHRVQgcmVxdWVzdCBmb3IgJ3ZhY21Hcm91cE5hbWUue2dyb3VwfS4wLnthbnl0aGluZ30nIHdpbGwKLQkgIHN1Y2NlZWQKLQkgIChzaW5jZSB0aGUgMCBzdWJpZCBhY3RzIGFzIGEgbnVsbC10ZXJtaW5hdG9yIGZvciB0aGUgZ3JvdXAgbmFtZSkuCi0JICAqIEEgR0VUIHJlcXVlc3QgZm9yICd2YWNtVmlld1RyZWVGYW1pbHlUeXBlLiJfbm9uZSIuMScgd2lsbAotCSAgc3VjY2VlZAotCSAgKGltcGxpY2l0bHkgYWRkaW5nIHRoZSBzdWJpZCAwIHRvIHRoZSBpbmNvbXBsZXRlIE9JRCBpbmRleCB2YWx1ZSkKLQkgICogQSBHRVQgcmVxdWVzdCBmb3IgJ3ZhY21BY2Nlc3NTdGF0dXMuImdyb3VwIi4iIi4zLjQnIHdpbGwKLQkgIHN1Y2NlZWQKLQkgIChzaW5jZSBWQUNNIGNoZWNrcyBhY2NlcHQgdGhlIGdpdmVuIHNlY3VyaXR5IGxldmVsICpvcipoaWdoZXIqKQorICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKIAotMjAwNy0wNC0wMiAxMjoyNiAgZHRzMTIKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2ODUwNjc6IE1vcmUgcHJlY2lzZSBoYW5kbGluZyBvZgorICAgU05NUHYzLWFkbWluIE1JQiB0YWJsZXMuCisgICBUaGlzIGFjdHVhbGx5IGZpeGVzIHRocmVlIHNlcGFyYXRlIHByb2JsZW1zOgorICAgKiAgQSBHRVQgcmVxdWVzdCBmb3IgJ3ZhY21BY2Nlc3NTdGF0dXMuImdyb3VwIi4iIi4zLjQnIHdpbGwgICAKKyAgICAgIHN1Y2NlZWQgICAgKHNpbmNlIFZBQ00gY2hlY2tzIGFjY2VwdCB0aGUgZ2l2ZW4gc2VjdXJpdHkgbGV2ZWwKKyAgICAgICpvcipoaWdoZXIqKSAgMjAwNy0wNC0wMiAxMjoyNiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6Ci0JICBDaGVjayB0aGF0IEdFVCByZXF1ZXN0cyBtYXRjaCBhIHZhbGlkIE9JRC4KLQkgIChPdGhlcndpc2UgYSByZXF1ZXN0IGZvciBoclN0b3JhZ2V7Q29sdW1ufS57aW5kZXh9Lnthbnl0aGluZ30KLQkgIHdpbGwgaWdub3JlIHRoZSBleHRyYSBzdWJpZHMsIGFuZCByZXR1cm4gc3VjY2VzcykKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKKworICAgQ2hlY2sgdGhhdCBHRVQgcmVxdWVzdHMgbWF0Y2ggYSB2YWxpZCBPSUQuCisgICAoT3RoZXJ3aXNlIGEgcmVxdWVzdCBmb3IgaHJTdG9yYWdle0NvbHVtbn0ue2luZGV4fS57YW55dGhpbmd9CisgICB3aWxsIGlnbm9yZSB0aGUgZXh0cmEgc3ViaWRzLCBhbmQgcmV0dXJuIHN1Y2Nlc3MpCiAKIDIwMDctMDQtMDIgMTI6MjEgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYzoKLQkgIFByZXZlbnQgY3Jhc2ggd2hlbiB3YWxraW5nIChpbnZhbGlkPykgRXZlbnQtTUlCIE9iamVjdHMgVGFibGUuCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYzoKKworICAgUHJldmVudCBjcmFzaCB3aGVuIHdhbGtpbmcgKGludmFsaWQ/KSBFdmVudC1NSUIgT2JqZWN0cyBUYWJsZS4KIAogMjAwNy0wNC0wMiAxMTozMCAgZHRzMTIKIAotCSogZGlzdC9tYWtlcmVsZWFzZToKLQkgIEZpeCBhIGNvdXBsZSBvZiB0eXBvcyBpbiB0aGUgcmUtd29ya2VkIG1ha2VyZWxlYXNlIHNjcmlwdC4KKyAgICogZGlzdC9tYWtlcmVsZWFzZToKKworICAgRml4IGEgY291cGxlIG9mIHR5cG9zIGluIHRoZSByZS13b3JrZWQgbWFrZXJlbGVhc2Ugc2NyaXB0LgogCiAyMDA3LTAzLTI5IDEyOjE0ICB0YW5kZXJzCiAKLQkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgZml4IHN5bnRheCBlcnJvciAoIj09IiBpcyBiYWQpCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBmaXggc3ludGF4IGVycm9yICgiPT0iIGlzIGJhZCkKKworMjAwNy0wMy0yNyAwODo1NSAgZHRzMTIKKworICAgKiBhY2luY2x1ZGUubTQsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBSZWFkIHVzZXItcHJvbXB0ZWQgdmFsdWVzIGZyb20gb3JpZ2luYWwgc3RkaW4gKG5vdCAvZGV2L251bGwpCiAKIDIwMDctMDMtMjcgMDg6MzggIGR0czEyCiAKLQkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgQWNjZXB0ICcyYycgYXMgYSB2YWxpZCByZXNwb25zZSB3aGVuIGNob29zaW5nIHRoZSBkZWZhdWx0IHZlcnNpb24KKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIEFjY2VwdCAnMmMnIGFzIGEgdmFsaWQgcmVzcG9uc2Ugd2hlbiBjaG9vc2luZyB0aGUgZGVmYXVsdCB2ZXJzaW9uCiAKIDIwMDctMDMtMjcgMDg6MjkgIGR0czEyCiAKLQkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgQ0hBTkdFUzogY29uZmlndXJlOiBCVUc6IDE1NjczMjQ6IENsYXJpZnkgcHJvbXB0aW5nIGZvcgotCSAgdXNlci1zdXBwbGllZCB2YWx1ZXMuCi0JICBOb3cgb25seSByZW1lbWJlcnMgKGFuZCB1c2VzKSBwcmV2aW91cyB2YWx1ZXMgd2hlbiBleHBsaWNpdGx5Ci0JICB0b2xkIHRvIGRvIHNvLAotCSAgZS5nLiBjb25maWd1cmUgLUMKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKLTIwMDctMDMtMjUgMjI6MzIgIGR0czEyCisgICBDSEFOR0VTOiBjb25maWd1cmU6IEJVRzogMTU2NzMyNDogQ2xhcmlmeSBwcm9tcHRpbmcgZm9yCisgICB1c2VyLXN1cHBsaWVkIHZhbHVlcy4KKyAgIE5vdyBvbmx5IHJlbWVtYmVycyAoYW5kIHVzZXMpIHByZXZpb3VzIHZhbHVlcyB3aGVuIGV4cGxpY2l0bHkKKyAgIHRvbGQgdG8gZG8gc28sCisgICBlLmcuIGNvbmZpZ3VyZSAtQwogCi0JKiBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLAotCSAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgotCSAgVmFyaWFibGUtbGVuZ3RoIHN0cmluZyB2YWx1ZXMgYXJlIG1vcmUgbGlrZWx5IHRoYW4gZml4ZWQgbGVuZ3RoLgorMjAwNy0wMy0yNyAwODoyMyAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgRml4IGluY29uc2lzdGVuY3kgaW4gcGF0Y2ggIzE2MjcwNDkgLSA8cG9sbC5oPiB2cyA8c3lzL3BvbGwuaD4KKworMjAwNy0wMy0yNSAyMjozMSAgZHRzMTIKKworICAgKiAgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgVmFyaWFibGUtbGVuZ3RoIHN0cmluZyB2YWx1ZXMgYXJlIG1vcmUgbGlrZWx5IHRoYW4gZml4ZWQgbGVuZ3RoLgogCiAyMDA3LTAzLTI1IDIyOjI4ICBkdHMxMgogCi0JKiBsb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmY6Ci0JICBDSEFOR0VTOiBtaWIyYzogQlVHOiA4MzM2NzM6IE1vcmUgZm9jdXNlZCBzaXplIGNoZWNrcy4KKyAgICogbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mOgorCisgICBDSEFOR0VTOiBtaWIyYzogQlVHOiA4MzM2NzM6IE1vcmUgZm9jdXNlZCBzaXplIGNoZWNrcy4KIAogMjAwNy0wMy0yNSAyMToyNSAgZHRzMTIKIAotCSogYWdlbnQvc25tcF9hZ2VudC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY3NzA2MzogQ2hlY2sgZm9yIGZhaWxlZCBtYWxsb2MgY2FsbHMuCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY3NzA2MzogQ2hlY2sgZm9yIGZhaWxlZCBtYWxsb2MgY2FsbHMuCiAKIDIwMDctMDMtMjUgMTk6MDMgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmM6Ci0JICBDaGVjayBTRVQgcmVxdWVzdHMgYWdhaW5zdCB0aGUgY29ycmVjdCB0eXBlIChJUCBBZGRyZXNzICE9IE9jdGV0Ci0JICBTdHIpCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmM6CiAKLTIwMDctMDMtMjUgMTg6NTggIGR0czEyCisgICBDaGVjayBTRVQgcmVxdWVzdHMgYWdhaW5zdCB0aGUgY29ycmVjdCB0eXBlIChJUCBBZGRyZXNzICE9IE9jdGV0CisgICBTdHIpCiAKLQkqIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjg1MDgxOiBDaGVjayBmb3IgdmFsaWQgT0lEIG9uIEZyZWUvVW5kbwotCSAgcGFzc2VzLgorMjAwNy0wMy0yNSAxODo1NSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjg1MDgxOiBDaGVjayBmb3IgdmFsaWQgT0lEIG9uIEZyZWUvVW5kbworICAgcGFzc2VzLgogCiAyMDA3LTAzLTIzIDA5OjQ0ICBkdHMxMgogCi0JKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKLQkgIENIQU5FR1M6IHNubXBsaWI6IEJVRzogMTY4NjM4NDogRG9jdW1lbnQgbm9uLXVzZSBvZiAncmVtb3RlX3BvcnQnCi0JICBmaWVsZC4KKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIENIQU5FR1M6IHNubXBsaWI6IEJVRzogMTY4NjM4NDogRG9jdW1lbnQgbm9uLXVzZSBvZiAncmVtb3RlX3BvcnQnCisgICBmaWVsZC4KIAogMjAwNy0wMy0yMyAwOToxOSAgZHRzMTIKIAotCSogbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmk6Ci0JICBBbGxvdyBzcGFjZSBmb3IgZXh0ZXJuYWwgaW5kZXhlcyB3aGVuIHNhdmluZyB0YWJsZSBlbnRyaWVzLgotCSAgKFNlZSBwYXRjaCAjMTY0MjI1NSkKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmk6CiAKLTIwMDctMDMtMjMgMDk6MTUgIGR0czEyCisgICBBbGxvdyBzcGFjZSBmb3IgZXh0ZXJuYWwgaW5kZXhlcyB3aGVuIHNhdmluZyB0YWJsZSBlbnRyaWVzLgorICAgKFNlZSBwYXRjaCAjMTY0MjI1NSkKIAotCSogYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NDIyNTU6IEhhbmRsZSBzYXZpbmcgbG9uZwotCSAgc25tcE5vdGlmeUZpbHRlclRhYmxlIGVudHJpZXMuCisyMDA3LTAzLTIzIDA5OjE0ICBkdHMxMgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY0MjI1NTogSGFuZGxlIHNhdmluZyBsb25nCisgICBzbm1wTm90aWZ5RmlsdGVyVGFibGUgZW50cmllcy4KKworMjAwNy0wMy0yMyAwOTowOSAgZHRzMTIKKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4MTk3NzogQWRkIGNhbGxiYWNrcyBwcmlvciB0byByZWFkaW5nCisgICBjb25maWcuCiAKIDIwMDctMDMtMjMgMDk6MDYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NzY0Nzg6IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2NzY0NzY6IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKKyAgICogYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjc2NDc4OiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjc2NDc2OiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCiAKIDIwMDctMDMtMjMgMDk6MDEgIGR0czEyCiAKLQkqIHNubXBsaWIvc25tcF9hcGkuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjUzNjcwOiBDb25zaXN0ZW50IFNOTVB2MyBiZWhhdmlvdXIKLQkgIHdoZW4gb3BlbmluZyBzZXNzaW9ucy4KKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY1MzY3MDogQ29uc2lzdGVudCBTTk1QdjMgYmVoYXZpb3VyCisgICB3aGVuIG9wZW5pbmcgc2Vzc2lvbnMuCisKKzIwMDctMDMtMjMgMDg6NTcgIGR0czEyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2MjcwNDk6IE5ldyBBUEkgdG8gaGFuZGxlIGxhcmdlIG51bWJlcnMKKyAgIG9mIGZpbGUgZGVzY3JpcHRvcnMuCiAKIDIwMDctMDMtMjIgMTk6MTQgIGR0czEyCiAKLQkqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjgxMDMwOiBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1wdHkKLQkgIGFwcHR5cGUgY29uZmlncy4KKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4MTAzMDogQmV0dGVyIGhhbmRsaW5nIG9mIGVtcHR5CisgICBhcHB0eXBlIGNvbmZpZ3MuCiAKIDIwMDctMDMtMjIgMTk6MTIgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCwKLQkgIGFnZW50L3NubXBkLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2Nzg3ODg6IEJldHRlciBoYW5kbGluZyBvZiBTTVVYIHNvY2tldAotCSAgZGVzY3JpcHRvcnMuCisgICAqICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgsICAgCisgICAgICBhZ2VudC9zbm1wZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2Nzg3ODg6IEJldHRlciBoYW5kbGluZyBvZiBTTVVYIHNvY2tldAorICAgZGVzY3JpcHRvcnMuCiAKIDIwMDctMDMtMjIgMTk6MDkgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2ODMwNTQ6IHNldCB1ZHBFbmRwb2ludEluc3RhbmNlIHRvCi0JICBpZGVudGlmeSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgorICAgKiBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2ODMwNTQ6IHNldCB1ZHBFbmRwb2ludEluc3RhbmNlIHRvCisgICBpZGVudGlmeSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgogCiAyMDA3LTAzLTIxIDEyOjM1ICBkdHMxMgogCi0JKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46Ci0JICBEZWNsYXJlIE9JRCBjb25zdGFudHMgYXMgc3VjaCAocmF0aGVyIHRoYW4gQVBJIGNhbGxzKS4KLQkgIFByb3Bvc2VkIGJ5IEFsZXggQnVyZ2VyCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKIAotMjAwNy0wMy0yMCAyMDowOCAgcnN0b3J5CisgICBEZWNsYXJlIE9JRCBjb25zdGFudHMgYXMgc3VjaCAocmF0aGVyIHRoYW4gQVBJIGNhbGxzKS4KKyAgIFByb3Bvc2VkIGJ5IEFsZXggQnVyZ2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jOgotCSAgTkVXUzogc25tcGQ6IFBBVENIOiAxNjY2NzM3OiBpbmNsdWRlIGlwdjYgY291bnRzIGluCi0JICB1ZHBJbkRhdGFncmFtcywgdWRwTm9Qb3J0cywgdWRwSW5FcnJvcnMsIHVkcE91dERhdGFncmFtcworMjAwNy0wMy0yMCAyMDowNyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTY2NjczNzogaW5jbHVkZSBpcHY2IGNvdW50cyBpbgorICAgdWRwSW5EYXRhZ3JhbXMsIHVkcE5vUG9ydHMsIHVkcEluRXJyb3JzLCB1ZHBPdXREYXRhZ3JhbXMKIAogMjAwNy0wMy0xOSAyMjowOSAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5jOgotCSAgdXNlIHBtRnJlZVJlc3VsdCgpIGluc3RlYWQgb2YgZnJlZSgpCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmM6CiAKLTIwMDctMDMtMTcgMDA6MjUgIHRhbmRlcnMKKyAgIHVzZSBwbUZyZWVSZXN1bHQoKSBpbnN0ZWFkIG9mIGZyZWUoKQogCi0JKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaCwKLQkgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCwKLQkgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2ODEwNzM6ICNpZmRlZiBiYXNlZCBjb25maWdfZXJyb3IgaW5zdGVhZAotCSAgb2Ygc3BlY2lhbCBjYXNlcyBpbiBjb25maWd1cmUKLQkgIEJhY2twb3J0IGZyb20gTUFJTi4KKzIwMDctMDMtMTkgMDk6MzkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKIAogMjAwNy0wMy0xNiAxNDowNCAgZHRzMTIKIAotCSogZGlzdC9jaGFuZ2Vsb2dmaXgsIGRpc3QvbWFrZXJlbGVhc2UsIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGw6Ci0JICBDb252ZXJ0IGJ1aWxkIHN5c3RlbSB0byBTVk4gdmVyc2lvbi4KKyAgICogIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMsIGRpc3QvY2hhbmdlbG9nZml4LCBkaXN0L21ha2VyZWxlYXNlLCAgIAorICAgICAgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbDoKKworICAgQ29udmVydCBidWlsZCBzeXN0ZW0gdG8gU1ZOIHZlcnNpb24uCisKKzIwMDctMDMtMTUgMTA6NTkgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2ODEwNzM6ICNpZmRlZiBiYXNlZCBjb25maWdfZXJyb3IgaW5zdGVhZAorICAgb2Ygc3BlY2lhbCBjYXNlcyBpbiBjb25maWd1cmUKKworMjAwNy0wMy0xNSAxMDo0NyAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYzoKKworICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKIAogMjAwNy0wMy0xNCAyMzozMSAgdGFuZGVycwogCi0JKiBSRUFETUUuaXJpeCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsCi0JICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuaDoKLQkgIE5FV1M6IElSSVg6IFBBVENIOiAxNjc1ODY5OiBmcm9tIGJiaWNlOiBDUFUgc3RhdGlzdGljcyBmb3IgSVJJWAotCSAgYmFzZWQgb24gUENQCisgICAqICBSRUFETUUuaXJpeCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuaDoKKworICAgTkVXUzogSVJJWDogUEFUQ0g6IDE2NzU4Njk6IGZyb20gYmJpY2U6IENQVSBzdGF0aXN0aWNzIGZvciBJUklYCisgICBiYXNlZCBvbiBQQ1AKKworMjAwNy0wMy0xNCAyMjowOSAgdGFuZGVycworCisgICAqICBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvbnVsbC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYywgYWdlbnQvaGVscGVycy9zZXJpYWxpemUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY4MTA0MzogZnJvbSBtYWdmcjogY2xlYW4gdXAgaGVscGVyCisgICBpbmNsdWRlcworCisyMDA3LTAzLTE0IDIxOjU0ICB0YW5kZXJzCisKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY4MTAzNTogZnJvbSBtYWdmcjogaW1wcm92ZSBuZXQtc25tcC1jb25maWcKKyAgIC9iaW4vc2ggY29tcGF0aWJpbGl0eQorCisyMDA3LTAzLTE0IDE4OjMxICB0YW5kZXJzCisKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2NzgzMDA6IGZyb20gbWFnZnI6IGNvbXBpbGUtc3ViYWdlbnQKKyAgIGRvZXNuJ3QgY2FsbCBzaHV0ZG93bl8gbWV0aG9kcwogCiAyMDA3LTAzLTE0IDE2OjEyICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0NDI4MDogRG9uJ3QgYXV0b21hdGljYWxseSBwcm9iZSBmb3IKLQkgIHYzIEVuZ2luZUlEcy4KKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0NDI4MDogRG9uJ3QgYXV0b21hdGljYWxseSBwcm9iZSBmb3IKKyAgIHYzIEVuZ2luZUlEcy4KIAogMjAwNy0wMy0xMyAxMDoyNiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotCSAgQ2hlY2sgZm9yIHplcm8tc2l6ZSBwc2V1ZG8tZmlsZXN5c3RlbXMuIFJlcG9ydCB0aGVtIGFzIGVtcHR5Ci0JICByYXRoZXIgdGhhbiBmdWxsLCBzbyB0aGV5IHdvbid0IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKIAotMjAwNy0wMy0xMyAwOToxMSAgdGFuZGVycwotCi0JKiBzbm1wbGliL21pYi5jOgotCSAgQmFjayBvdXQgY2hhbmdlcyB0byBicmFuY2hlcyBkb25lIGluIFNWTiAxNTk1MyAocGF0Y2ggMTY3ODMwMikKLQkgIGJlY2F1c2UgdGhleSBhcmUgb25seSBhcHByb3ByaWF0ZSBmb3IgTUFJTgorICAgQ2hlY2sgZm9yIHplcm8tc2l6ZSBwc2V1ZG8tZmlsZXN5c3RlbXMuIFJlcG9ydCB0aGVtIGFzIGVtcHR5CisgICByYXRoZXIgdGhhbiBmdWxsLCBzbyB0aGV5IHdvbid0IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCiAKIDIwMDctMDMtMTMgMDU6NTkgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDU6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGNhY2hlIGluCi0JICBoYXJkd2FyZS9jcHUvY3B1IG9uIHNodXRkb3duIChoZWFkZXIgcGFydCkKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KKyAgIGhhcmR3YXJlL2NwdS9jcHUgb24gc2h1dGRvd24gKGhlYWRlciBwYXJ0KQogCiAyMDA3LTAzLTEyIDIzOjA5ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywKLQkgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaDoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA2OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBsb2cgaW4KLQkgIG5vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cKKyAgICogIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaDoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDY6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGxvZyBpbgorICAgbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZwogCiAyMDA3LTAzLTEyIDIzOjA0ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYzoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA1OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBjYWNoZSBpbgotCSAgaGFyZHdhcmUvY3B1L2NwdSBvbiBzaHV0ZG93bgorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA1OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBjYWNoZSBpbgorICAgaGFyZHdhcmUvY3B1L2NwdSBvbiBzaHV0ZG93bgogCiAyMDA3LTAzLTEyIDIyOjU3ICB0YW5kZXJzCiAKLQkqIHNubXBsaWIvbWliLmM6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwMjogZnJvbSBtYWdmcjogbmV0c25tcF9taWJpbmRleF9sb2FkIGxlYWtzCi0JICBtZW1vcnkKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDI6IGZyb20gbWFnZnI6IG5ldHNubXBfbWliaW5kZXhfbG9hZCBsZWFrcworICAgbWVtb3J5CiAKIDIwMDctMDMtMTIgMjI6NTAgIHRhbmRlcnMKIAotCSogc25tcGxpYi9zbm1wX2FwaS5jOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDE6IGZyb20gbWFnZnI6IGRlYWxsb2NhdGUgZG9tYWluIHJlZ2lzdHJ5Ci0JICBhdCBzaHV0ZG93bgorICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4MzAxOiBmcm9tIG1hZ2ZyOiBkZWFsbG9jYXRlIGRvbWFpbiByZWdpc3RyeQorICAgYXQgc2h1dGRvd24KIAogMjAwNy0wMy0xMiAyMjozMSAgdGFuZGVycwogCi0JKiBuZXQtc25tcC1jb25maWcuaW46Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODI5ODogZnJvbSBtYWdmcjogY29tcGlsZS1zdWJhZ2VudCBjaGVja3MgZm9yCi0JICBiYWQgSEFWRV9TSUdOQUxfSAorICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4Mjk4OiBmcm9tIG1hZ2ZyOiBjb21waWxlLXN1YmFnZW50IGNoZWNrcyBmb3IKKyAgIGJhZCBIQVZFX1NJR05BTF9ICisKKzIwMDctMDMtMTIgMjE6NDcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2OTA0ODogQWRkIHN1cHBvcnQgZm9yCisgICBpcHY2SW50ZXJmYWNlSWRlbnRpZmllcgogCiAyMDA3LTAzLTEyIDIxOjM3ICBkdHMxMgogCi0JKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNDEzNzI4OiBSZWZlcmVuY2UgaW5kZXggdmFsdWVzIGluIGRlYnVnCi0JICBvdXRwdXQgY29ycmVjdGx5LgorICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE0MTM3Mjg6IFJlZmVyZW5jZSBpbmRleCB2YWx1ZXMgaW4gZGVidWcKKyAgIG91dHB1dCBjb3JyZWN0bHkuCiAKIDIwMDctMDMtMTIgMjE6MzQgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDExMDIwNTg6IFNraXAgbm9uLW1vdW50ZWQgZGlza3MgKGUuZy4gc3dhcAotCSAgcGFydGl0aW9ucykKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMTAyMDU4OiBTa2lwIG5vbi1tb3VudGVkIGRpc2tzIChlLmcuIHN3YXAKKyAgIHBhcnRpdGlvbnMpCiAKIDIwMDctMDMtMTIgMjE6MzAgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywKLQkgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywKLQkgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODE5MzogVXBkYXRlIHJlZ2lzdHJhdGlvbiBvZgotCSAgUmVhc21NYXhTaXplIHN1cHBvcnQuCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODE5MzogVXBkYXRlIHJlZ2lzdHJhdGlvbiBvZgorICAgUmVhc21NYXhTaXplIHN1cHBvcnQuCiAKIDIwMDctMDMtMTIgMjE6MjggIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODE5MzogRml4IGNoZWNrIGZvciB2NiBSZWFzbU1heFNpemUKLQkgIHN1cHBvcnQuCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4MTkzOiBGaXggY2hlY2sgZm9yIHY2IFJlYXNtTWF4U2l6ZQorICAgc3VwcG9ydC4KIAogMjAwNy0wMy0xMiAxOTo1NiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2Njg5NTI6IElnbm9yZSB6b21iaWUgcHJvY2Vzc2VzLgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4OTUyOiBJZ25vcmUgem9tYmllIHByb2Nlc3Nlcy4KIAogMjAwNy0wMy0xMiAxOTo1NCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY1OTg1OiBJbXBsZW1lbnQgaXBSZWFzbVRpbWVvdXQKLQkgIFRob3VnaCB0aGlzIHJlZ2lzdGVycyBhbiBpbnN0YW5jZSwgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgc2NhbGFyCi0JICBvYmplY3QKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjU5ODU6IEltcGxlbWVudCBpcFJlYXNtVGltZW91dAorICAgVGhvdWdoIHRoaXMgcmVnaXN0ZXJzIGFuIGluc3RhbmNlLCByYXRoZXIgdGhhbiB0aGUgZnVsbCBzY2FsYXIKKyAgIG9iamVjdAogCiAyMDA3LTAzLTEyIDE5OjUxICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgc25tcGxpYi92YWNtLmM6Ci0JICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSEVTOiAxNjY1NTQzOiBIYW5kbGUgVkFDTSBjaGVja3MgY29ycmVjdGx5LgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjU1NDk6IEhhbmRsZSBjcmVhdGluZyBWQUNNIGVudHJpZXMKLQkgIGNvcnJlY3RseS4KLQkgIFtCb3RoIHBhdGNoZXMgYXJlIHJlcXVpcmVkIGZvciBjb3JyZWN0IG9wZXJhdGlvbl0KKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSEVTOiAxNjY1NTQzOiBIYW5kbGUgVkFDTSBjaGVja3MgY29ycmVjdGx5LgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjU1NDk6IEhhbmRsZSBjcmVhdGluZyBWQUNNIGVudHJpZXMKKyAgIGNvcnJlY3RseS4KKyAgIFtCb3RoIHBhdGNoZXMgYXJlIHJlcXVpcmVkIGZvciBjb3JyZWN0IG9wZXJhdGlvbl0KIAogMjAwNy0wMy0xMiAxOTo0NyAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY1OTYyMzogSGFuZGxlIFNNVVggcGVlcnMgd2l0aCBhbiBlbXB0eQotCSAgcGFzc3dvcmQuCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY1OTYyMzogSGFuZGxlIFNNVVggcGVlcnMgd2l0aCBhbiBlbXB0eQorICAgcGFzc3dvcmQuCisKKzIwMDctMDMtMTIgMTk6NDQgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY1Nzc0MTogSGFuZGxlIDY0LWJpdCB0eXBlcyB2aWEgcGFzcworICAgbWVjaGFuaXNtLgogCiAyMDA3LTAzLTEyIDE5OjQwICBkdHMxMgogCi0JKiBhZ2VudC9hZ2VudF90cmFwLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0NDI4MDogVXNlIHRoZSBjb3JyZWN0IGVuZ2luZUlEIHdoZW4KLQkgIHNlbmRpbmcgdjMgdHJhcHMuCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDQyODA6IFVzZSB0aGUgY29ycmVjdCBlbmdpbmVJRCB3aGVuCisgICBzZW5kaW5nIHYzIHRyYXBzLgogCiAyMDA3LTAzLTEyIDE5OjMyICBkdHMxMgogCi0JKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0JICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSEVTOiAxNjQyMDcxOiBEb24ndCBmaWRkbGUgd2l0aCB0aGUgc3RvcmFnZQotCSAgb2YgcHJlLWV4aXN0aW5nIHVzZXJzLgorICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIRVM6IDE2NDIwNzE6IERvbid0IGZpZGRsZSB3aXRoIHRoZSBzdG9yYWdlCisgICBvZiBwcmUtZXhpc3RpbmcgdXNlcnMuCiAKIDIwMDctMDMtMTIgMTk6MzAgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQxODY1OiBEb24ndCBkb3VibGUgY2hlY2sgc25tcFRyYXBPSUQKLQkgIGluIHRoZSBmaWx0ZXIgdGFibGUuCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDE4NjU6IERvbid0IGRvdWJsZSBjaGVjayBzbm1wVHJhcE9JRAorICAgaW4gdGhlIGZpbHRlciB0YWJsZS4KIAogMjAwNy0wMy0xMiAxOToyNSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMsCi0JICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2Mzk3MjY6IFJlcG9ydCBwaHlzaWNhbCBtZW1vcnkKLQkgIGNvcnJlY3RseSBvbiAqQlNECisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjM5NzI2OiBSZXBvcnQgcGh5c2ljYWwgbWVtb3J5CisgICBjb3JyZWN0bHkgb24gKkJTRAorCisyMDA3LTAzLTA5IDIxOjMxICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzQyOTk6IGZyb20gbWFnZnI6IExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHpvbmUKKyAgIHZhcmlhYmxlIGluIGR1bXBfcmVhbGxvY19vaWRfdG9faW5ldGFkZHJlc3MKKworMjAwNy0wMy0wOSAyMToyOSAgdGFuZGVycworCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzQzMDI6IGZyb20gbWFnZnI6IExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIGxlbgorICAgdmFyaWFibGUgaW4gY29udmVydF92MnBkdV90b192MQogCiAyMDA3LTAzLTA4IDE1OjUyICBkdHMxMgogCi0JKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaCwKLQkgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaDoKLQkgIEluY2x1ZGUgSG9zdCBSZXNvdXJjZXMgTUlCIG9uIE5ldEJTRCBhbmQgT3BlbkJTRAorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmg6CisKKyAgIEluY2x1ZGUgSG9zdCBSZXNvdXJjZXMgTUlCIG9uIE5ldEJTRCBhbmQgT3BlbkJTRAorCisyMDA3LTAzLTA3IDA5OjQzICB0YW5kZXJzCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3NDI5ODogZnJvbSBtYWdmcjogUmVtb3ZlIHVudXNlZCBzaW5rcG9ydAorICAgdmFyaWFibGUKIAogMjAwNy0wMy0wNiAxMzo1MSAgZHRzMTIKIAotCSogYWdlbnQvc25tcF9hZ2VudC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTE1OTkwODogRml4IG1lbW9yeSBsZWFrCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKIAotMjAwNy0wMy0wMiAyMjo1OCAgdGFuZGVycworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTE1OTkwODogRml4IG1lbW9yeSBsZWFrCiAKLQkqIHNubXBsaWIvTVNHMDAwMDEuYmluOgotCSAgZGUtbWFuZ2UgYmluYXJ5IGZpbGUKKzIwMDctMDMtMDIgMjI6NDAgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL01TRzAwMDAxLmJpbjoKKworICAgbm8gZW9sLXN0eWxlIGZvciBiaW5hcnkgZmlsZXMKKworMjAwNy0wMy0wMiAyMjoyNiAgdGFuZGVycworCisgICAqIGRvYy9yZmMvc21pVjIvcmZjMjU3OS5lcnJhdGF+OgorCisgICBkb24ndCBzaGlwIGVkaXRvciBiYWNrdXAgY29waWVzCisKKzIwMDctMDMtMDIgMTY6MjAgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL01TRzAwMDAxLmJpbjoKKworICAgZmxhZyBhcyBiaW5hcnkKIAogMjAwNy0wMy0wMiAxMjo0NCAgdGFuZGVycwogCi0JKiBDb2RpbmdTdHlsZToKLQkgIGZpeCB0eXBvCisgICAqIENvZGluZ1N0eWxlOgorCisgICBmaXggdHlwbworCisyMDA3LTAzLTAyIDA5OjU3ICBkdHMxMgorCisgICAqIFRPRE86CisKKyAgIE1pbm9yIHR3ZWFrIC0gcGxheWluZyB3aXRoIFNWTiBhcyBtdWNoIGFzIGFueXRoaW5nLi4uLgorCisyMDA3LTAzLTAxIDIzOjU3ICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIG1lbnRpb24gdGhhdCB3ZSBtb3ZlZCB0byBTVk4KIAogMjAwNy0wMi0yOCAxNToyNyAgZHRzMTIKIAotCSogQ0hBTkdFUywgQ2hhbmdlTG9nLCBORVdTOgotCSAgQ2hlY2twb2ludCBzdW1tYXJ5IG9mIENWUyBjaGFuZ2VzLCBwcmVwYXJhdG9yeSBmb3IgdGhlIFNWTgotCSAgc3dpdGNoLgorICAgKiBDSEFOR0VTLCBDaGFuZ2VMb2csIE5FV1M6CiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2hhbmdlczogVjUuNCAtPiBTVk4gY2hlY2twb2ludCAoVjUtNC1wYXRjaGVzIGJyYW5jaCkKKyAgIENoZWNrcG9pbnQgc3VtbWFyeSBvZiBDVlMgY2hhbmdlcywgcHJlcGFyYXRvcnkgZm9yIHRoZSBTVk4KKyAgIHN3aXRjaC4KIAogMjAwNy0wMi0yNyAxMzozNiAgcnN0b3J5CiAKQEAgLTgzNTEsMTcgKzcyNDk2LDEyIEBACiAKICAgIGFkZCBoZWFkZXIgZm9yIGVhc2llciBjb25maWd1cmUgLS13aXRoLW1pYi1tb2R1bGUKIAotMjAwNy0wMi0yNyAxMjozNCAgcnN0b3J5Ci0KLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmg6Ci0KLSAgIGZpbGUgaXBBZGRyZXNzUHJlZml4VGFibGUuaCB3YXMgYWRkZWQgb24gYnJhbmNoIFY1LTQtcGF0Y2hlcyBvbiAyMDA3LTAyLTI3IDEyOjM0OjU5ICswMDAwCi0KLTIwMDctMDItMjYgMTQ6NTUgIGR0czEyCisyMDA3LTAyLTI2IDE0OjU0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgogCiAgICBSZS1jb3JyZWN0IGludGVycHJldGF0aW9uIG9mICJudWxsIE9JRCIgaW4gdGhlIEFnZW50WCBzcGVjcy4KKyAgIChmb3IgdGhlIGxhc3QgdGltZSwgSSB0cnVzdCEpCiAKIDIwMDctMDItMjYgMTQ6MzcgIGR0czEyCiAKQEAgLTgzNzMsMTUgKzcyNTEzLDE1IEBACiAKICAgICogcGVybC86IEFTTi9NYWtlZmlsZS5QTCwgT0lEL01ha2VmaWxlLlBMLAogICAgICBTTk1QL01ha2VmaWxlLlBMLCBUcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsCi0gICAgIGFnZW50L01ha2VmaWxlLlBMLCBhZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCi0sIGRlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6CisgICAgIGFnZW50L01ha2VmaWxlLlBMLCBhZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLAorICAgICBkZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgogCiAgICBQcm9tcHRpbmcgZm9yIGEgc2luZ2xlIGRpcmVjdG9yeSwgbm90IGFuIGFycmF5LgogCiAyMDA3LTAyLTI2IDExOjMyICBkdHMxMgogCi0gICAqIGxvY2FsLzogbWliMmMuY29udGFpbmVyLmNvbmYsIG1pYjJjLml0ZXJhdGUuY29uZgotLCBtaWIyYy50YWJsZV9kYXRhLmNvbmY6CisgICAqIGxvY2FsLzogbWliMmMuY29udGFpbmVyLmNvbmYsIG1pYjJjLml0ZXJhdGUuY29uZiwKKyAgICAgbWliMmMudGFibGVfZGF0YS5jb25mOgogCiAgICBDSEFOR0VTOiBtaWIyYzogQlVHOiAxNDI5NDcyOiBQcm90ZWN0IGFnYWluc3QgbWlzc2luZyBpbnN0YW5jZXMgKGFuZCBpbnZhbGlkIG9iamVjdHMpCiAKQEAgLTgzOTksMTUgKzcyNTM5LDE1IEBACiAKIDIwMDctMDItMjMgMjE6NTMgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLmluLCBjb25maWd1cmU6CiAKICAgIGFkZCBxdW90ZXMgdG8gZml4IHNoZWxsIHN5bnRheCBlcnJvciB3aGVuIGVtcHR5CiAKLTIwMDctMDItMjIgMjI6NDcgIHRhbmRlcnMKKzIwMDctMDItMjIgMjI6MzUgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIAotICAgTGFzdCBjb21taXQgYnJva2UgdGhlIGJ1aWxkLiBOb3cgZXNjYXBlIGJhY2tzbGFzaGVzIHByb3Blcmx5LiBQbGVhc2UgcmVtZW1iZXIgdG8gdXNlIGF1dG9jb25mIDIuNTkgZm9yIHRoZSBwYXRjaGVzIGJyYW5jaGVzIQorICAgTGFzdCBjb21taXQgYnJva2UgdGhlIGJ1aWxkLiBOb3cgZXNjYXBlIGJhY2tzbGFzaGVzIHByb3Blcmx5LgogCiAyMDA3LTAyLTIyIDE1OjM4ICBkdHMxMgogCkBAIC04NDUyLDIwICs3MjU5MiwxNyBAQAogCiAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxMDk2MTY2OiBIYW5kbGUgLS13aXRob3V0LWxvZ2ZpbGUgY29ycmVjdGx5LgogCi0yMDA3LTAyLTE5IDE2OjM2ICBkdHMxMgotCi0gICAqIGRpc3QvOiBNYWtlZmlsZSwgbnNiLWNvbmZpZywgbnNiLWZ1bmN0aW9ucwotLCBuc2ItbmlnaHRseSwgbnNiLXBhY2thZ2UsCi0gICAgIG5zYi1wbGF0Zm9ybSwgcGF0bWUsIFJFQURNRS5idWlsZC1zY3JpcHRzCi06Ci0KLSAgIHJlbW92ZWQgZGlzdCBmaWxlcyBvbmx5IHRvIGJlIGRpc3RyaWJ1dGVkIGluIHRoZSBtYWluIENWUyBicmFuY2gKLQotMjAwNy0wMi0xOSAxNjozMCAgZHRzMTIKKzIwMDctMDItMTkgMTY6MzQgIGR0czEyCiAKICAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKIAotICAgUmVsZWFzZSBJbnN0cnVjdGlvbnMgb25seSB0byBiZSBkaXN0cmlidXRlZCBpbiB0aGUgbWFpbiBDVlMgYnJhbmNoCisgICBNZW50aW9uIHJlbW92YWwgZnJvbSBDVlMgb2YgZGVsZXRlZCBmaWxlcworCisyMDA3LTAyLTE5IDE1OjU2ICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIFJld29yayByZWxlYXNlIGluc3RydWN0aW9ucyB0byB0YWtlIGFjY291bnQgb2YgIm1ha2VyZWxlYXNlIiBzY3JpcHQKIAogMjAwNy0wMi0xOSAxMDo0OSAgZHRzMTIKIApAQCAtODQ4NCw3ICs3MjYyMSw3IEBACiAgICAqIE1ha2VmaWxlLmluOgogCiAgICBEb24ndCBpbnZva2UgJ3ZlcnNpb250YWcnIGZvciB0YWdnaW5nIHRoZSBDVlMgdHJlZS4KLSAgIEl0IGRvZXNuJ3QgaGFuZGxlIHRoaXMgYW55IG1vcmUuIChVc2UgJ21ha2VyZWxlYXNlJyBpbnN0ZWFkKQorICAgSXQgZG9lc24ndCBoYW5kbGUgdGhpcyBhbnkgbW9yZS4gIChVc2UgJ21ha2VyZWxlYXNlJyBpbnN0ZWFkKQogCiAyMDA3LTAyLTE5IDEwOjAyICBkdHMxMgogCkBAIC04NTQ1LDExICs3MjY4Miw0OCBAQAogCiAgICBhZGRlZCB0aGUgZmxvdyBsYWJsZSBtaWIsIHdoaWNoIHRoZSB0dW5uZWwtbWliIHJlZmVycyB0bwogCi0yMDA3LTAyLTA3IDE3OjE3ICBoYXJkYWtlcgorMjAwNy0wMi0wNSAyMzowMiAgdGFuZGVycwogCi0gICAqIG1pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQ6CisgICAqIGRpc3QvbnNiLWZ1bmN0aW9uczoKIAotICAgZmlsZSBJUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCB3YXMgYWRkZWQgb24gYnJhbmNoIFY1LTQtcGF0Y2hlcyBvbiAyMDA3LTAyLTA3IDE3OjE5OjEwICswMDAwCisgICBtb3JlIHBvcnRhYmlsaXR5IGZpeGVzCisKKzIwMDctMDItMDUgMjI6NTAgIHRhbmRlcnMKKworICAgKiBkaXN0L2NoZWNrLWFwaS1jaGFuZ2U6CisKKyAgIHVzZSAvYmluL3NoIHVubGVzcyBiYXNoIGZlYXR1cmVzIGFyZSByZWFsbHkgbmVlZGVkCisKKzIwMDctMDItMDUgMjE6NTIgIHJzdG9yeQorCisgICAqIE1ha2VmaWxlLnRvcDoKKworICAgbm90ZSB0aGF0IGN1cnJlbnQgc2hvdWxkIGJlIGJ1bXBlZCBieSA1IHdoZW4gYnVtcGVkCisKKzIwMDctMDItMDUgMjE6NDkgIHJzdG9yeQorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIC0gbm90ZSB0aGF0IGN1cnJlbnQgc2hvdWxkIGJlIGJ1bXBlZCBieSA1IHdoZW4gdXBkYXRlZAorICAgLSBhZGQgcG9pbnRlciB0byBuZXcgY2hlY2stYXBpLWNoYW5nZXMgc2NyaXB0CisKKzIwMDctMDItMDUgMjE6NDYgIHJzdG9yeQorCisgICAqIGRpc3QvY2hlY2stYXBpLWNoYW5nZToKKworICAgc2ltcGxpc3RpYyBuZXcgc2NyaXB0IHRvIGhlbHAgY2hlY2sgZm9yIGFwaSBjaGFuZ2VzIGJldHdlZW4gcmVsZWFzZXMKKworMjAwNy0wMi0wNSAyMTozOCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc3RydWN0Lmg6CisKKyAgIG1ha2UgbmV3IHN0cnVjdCBtZW1iZXIgY29uZGl0aW9uYWwsIHNpbmNlIHVzZSBpcyBjb25kaXRpb25hbAorCisyMDA3LTAyLTA1IDIxOjIwICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBtb3ZlIGZ1bmN0aW9uIGNhbGwgb3V0IG9mIGFzc2VydAogCiAyMDA3LTAyLTA1IDE1OjE2ICBkdHMxMgogCkBAIC04NTU4LDE2ICs3MjczMiw5IEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY0MTg5NTogRXh0ZW5kIHNob3J0IHZpZXcgbWFza3MgKGFzIHBlciBSRkMgc3BlY3MpCiAgICBQYXRjaCBzdXBwbGllZCBieSBNaWNoYWVsIEtpcmtoYW0uCiAKLTIwMDctMDItMDUgMTU6MTAgIHJzdG9yeQorMjAwNy0wMi0wNSAxNDozMSAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6Ci0KLSAgIG1vdmUgZnVuY3Rpb24gY2FsbCBvdXQgb2YgYXNzZXJ0Ci0KLTIwMDctMDItMDUgMTQ6MzggIGR0czEyCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYwotOgorICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jOgogCiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2MzkzNjA6IEZpeCBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIHJvdyBjcmVhdGlvbi4KICAgIFBhdGNoIHN1cHBsaWVkIGJ5IE1pY2hhZWwgS2lya2hhbS4KQEAgLTg1NzksMjYgKzcyNzQ2LDgzIEBACiAgICBGaXggY29tcGlsYXRpb24gaWYgTE9DS19QRVJfQ0FMTEJBQ0tfU1VCSUQgbm90IGRlZmluZWQuCiAgICBSZXBvcnRlZCBieSBFbWkgWWFuYWdpCiAKKzIwMDctMDItMDUgMDk6NDggIGR0czEyCisKKyAgICogRkFROgorCisgICBTcGVsbGluZyBjb3JyZWN0aW9uOiAnc3VwZXJjZWRlZCcgLT4gJ3N1cGVyc2VkZWQnCisgICAoT2gsIHRoZSBzaGFtZSBvZiBpdCEpCisKIDIwMDctMDEtMzEgMTM6NTEgIHRhbmRlcnMKIAogICAgKiBNYWtlZmlsZS50b3A6CiAKICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE2NDc5NzY6IEN5Z3dpbi9NaW5HVyBXaW5kb3dzIGJ1aWxkIGZhaWxzIGR1ZSB0byBsaWJ0b29sIGVycm9yCiAKLTIwMDctMDEtMzAgMTM6NDMgIHRhbmRlcnMKKzIwMDctMDEtMzAgMTM6MzkgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CiAKICAgIENIQU5HRVM6IGJ1aWxkOiB5ZXQgYW5vdGhlciBmaXggdG8gYWRkcmVzcyBidWlsZCBpc3N1ZXMgd2l0aCBldGh0b29sIChvbiBSSDkpLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWFnbnVzIEZyb21yZWlkZS4KIAorMjAwNy0wMS0zMCAwOToxMCAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIENsYXJpZnkgd2hlbiBzeW1saW5rIGZpeCBpcy9pc24ndCBhcHByb3ByaWF0ZS4gIFN5bmNoIHdpdGggV2lraS4KKworMjAwNy0wMS0yOSAxMToxMiAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIEF1dGhlbnRpY2F0ZWQgU05NUHYzIHJlcXVlc3RzIHN0aWxsIG5lZWQgYSB1c2VybmFtZS4gIChTeW5jaCB3aXRoIFdpa2kpCisKIDIwMDctMDEtMjkgMTE6MDMgIHRhbmRlcnMKIAotICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMKKzoKIAogICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKIAotMjAwNy0wMS0yNSAyMjo0NSAgdGFuZGVycworMjAwNy0wMS0yOCAxMzozNiAgdGFuZGVycworCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9uczoKKworICAgZml4IGJhZCB0ZXN0CisKKzIwMDctMDEtMjggMTM6MDYgIHRhbmRlcnMKKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnM6CisKKyAgIHJlbmFtZSB2YXJpYWJsZSB0byByZXNvbHZlIG5hbWUgY2xhc2ggYW5kIHRvIHVuYnJlYWsgbmlnaHRseSBidWlsZHMgb24gU29sYXJpcworCisyMDA3LTAxLTI4IDEyOjUyICB0YW5kZXJzCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cworCisyMDA3LTAxLTI3IDE0OjQwICB0YW5kZXJzCisKKyAgICogZGlzdC9uc2ItbmlnaHRseToKKworICAgZml4IHR5cG8KKworMjAwNy0wMS0yNyAxNDoyMyAgdGFuZGVycworCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOgorCisgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cworCisyMDA3LTAxLTI2IDExOjE1ICB0YW5kZXJzCisKKyAgICogZGlzdC86IG5zYi1jb25maWcsIG5zYi1mdW5jdGlvbnMsIG5zYi1uaWdodGx5CissIG5zYi1wYWNrYWdlOgorCisgICBtb3JlIEJvdXJuZSBzaGVsbCBjb21wYXRpYmlsaXR5IGZpeGVzCisKKzIwMDctMDEtMjUgMjI6NDEgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIApAQCAtODYxMiw2ICs3MjgzNiw3IEBACiAKIDIwMDctMDEtMjUgMjI6MDUgIHRhbmRlcnMKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jCiAsIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmM6CiAKQEAgLTg2MjksMTIgKzcyODU0LDcwIEBACiAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY0NDcxNDogZnJvbSAiTGVsYW5kIFdhbGxhY2UiOiByZXBsYWNlIGxhc3QgcmVtYWluaW5nIGluc3RhbmNlIG9mIGRlcHJlY2F0ZWQgY29weV93b3JkIGJ5IGNvcHlfbndvcmQKIAorMjAwNy0wMS0yNSAxNTozMCAgdGFuZGVycworCisgICAqIGRpc3QvOiBuc2ItY29uZmlnLCBuc2ItZnVuY3Rpb25zLCBuc2ItbmlnaHRseQorLCBuc2ItcGFja2FnZSwgbnNiLXBsYXRmb3JtOgorCisgICBtYW55IEJvdXJuZSBzaGVsbCBwb3J0YWJpbGl0eSBmaXhlcworCisyMDA3LTAxLTI0IDE2OjM5ICBkdHMxMgorCisgICAqIGRpc3QvOiBuc2ItY29uZmlnLCBuc2ItZnVuY3Rpb25zLCBuc2ItbmlnaHRseQorLCBuc2ItcGFja2FnZSwgbnNiLXBsYXRmb3JtOgorCisgICBQcmUtUG9zaXggQm91cm5lIHNoZWxsIGNvbXBhdGFiaWxpdHkuCisKIDIwMDctMDEtMjQgMTQ6MDIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgogCiAgICBUd2VhayBkZWJ1ZyBvdXRwdXQKIAorMjAwNy0wMS0yNCAxMzo1OCAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy11cGRhdGU6CisKKyAgIFNoZWxsc2NyaXB0IHBvcnRhYmlsaXR5LiAgKEV2ZXJ5dGhpbmcgaGFzIC9iaW4vc2gpCisKKzIwMDctMDEtMjQgMTM6NDkgIGR0czEyCisKKyAgICogZGlzdC86IGN2c3Nob3csIGN2c3VwLCBuc2ItY29uZmlnLAorICAgICBuc2ItZnVuY3Rpb25zLCBuc2ItbmlnaHRseSwgbnNiLXBhY2thZ2UsCisgICAgIG5zYi1wbGF0Zm9ybToKKworICAgSW1wcm92ZSBzaGVsbC1zY3JpcHQgcG9ydGFiaWxpdHkuIChFdmVyeXRoaW5nIGhhcyAvYmluL3NoISkKKworMjAwNy0wMS0yNCAxMzo0MCAgZHRzMTIKKworICAgKiBzbm1wbGliLzogc25tcFVEUERvbWFpbi5jLCBzbm1wX2NsaWVudC5jOgorCisgICBFeHRyYSBkZWJ1Z2dpbmcgb3V0cHV0CisKKzIwMDctMDEtMjQgMTM6MzggIGR0czEyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jCissIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLAorICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oLAorICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg6CisKKyAgIFByZWxpbWluYXJ5IHRhYmxlIHVucmVnaXN0cmF0aW9uIEFQSS4KKworMjAwNy0wMS0yNCAxMzoxMSAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKKworICAgTW92ZSBob3N0bmFtZSB0cmFuc2xhdGlvbiBpbnRvIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgbGlicmFyeSByb3V0aW5lcy4KKyAgIChXaGVyZSBpdCBiZWxvbmdzISkKKworMjAwNy0wMS0yNCAxMzowNCAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwKKyAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIEJhc2ljIGZyYW1ld29yayBmb3IgdHJhbnNwb3J0LXNwZWNpZmljIHRyYW5zbGF0aW9uIG9mIGhvc3RuYW1lcy4KKwogMjAwNy0wMS0yNCAxMjoyNyAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKQEAgLTg2NTEsOCArNzI5MzQsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwLzoKICAgICAgaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYwotLCBpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMKLSwKKywgaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLAogICAgICBpcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCiAsCiAgICAgIGlwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwpAQCAtODcwMiw2ICs3Mjk4NCw3IEBACiAKICAgIENIQU5HRVM6IHNubXB0cmFwZDogQlVHOiAxNjM4MjI1OiBGaXggaW50ZXJwcmV0YXRpb24gb2YgdHJhbnNwb3J0IGFkZHJlc3MgZGF0YS4KICAgIChLZWVwIHRoaXMgY29uc2lzdGVudCB3aXRoIHNubXBVRFBEb21haW4uYykKKyAgIFRoaXMgZG9lcyBub3QgZmVlbCB0aGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGlzIQogCiAyMDA3LTAxLTIzIDE0OjEwICBkdHMxMgogCkBAIC04NzMwLDggKzczMDEzLDcgQEAKIAogMjAwNy0wMS0yMiAxNjoxNiAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvOiBtYXN0ZXJfYWRtaW4uYywgbWFzdGVyLmMKLToKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4LzogbWFzdGVyLmMsIG1hc3Rlcl9hZG1pbi5jOgogCiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NDE2ODU6IEhhbmRsZSB1bnJlc3BvbnNpdmUgQWdlbnRYIHN1YmFnZW50cyBtb3JlIHJlbGlhYmx5LgogICAgRml4IHByb3ZpZGVkIGJ5IEpvc2VmIE1vZWxsZXJzCkBAIC04NzU4LDcgKzczMDQwLDE0IEBACiAgICBDSEFOR0VTOiBGcmVlQlNEOiBCVUc6IDE2MzM0ODM6IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CiAgICAoYmVmb3JlIENQVSBkZWZpbml0aW9ucyB3ZXJlIG1vdmVkIHRvIDxzeXMvcmVzb3VyY2UuaD4pCiAKLTIwMDctMDEtMTkgMTQ6MjIgIHRhbmRlcnMKKzIwMDctMDEtMTkgMTY6MTUgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzoKKworICAgbGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHM6ICptb3ZlKiAocmF0aGVyIHRoYW4gY29weSkgZ2xvYmFsIHZhcmlhYmxlcworICAgZnJvbSBzbm1wdHJhcGQgdG8gbGlibmV0c25tcHRyYXBkCisKKzIwMDctMDEtMTkgMTQ6MTggIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgpAQCAtODc2OCwxMyArNzMwNTcsMjYgQEAKIAogMjAwNy0wMS0xOSAxMToyNSAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAorICAgKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZSwKICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsCiAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgogCiAgICBDSEFOR0VTOiBidWlsZDogYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgaGFzbW50b3B0IHRvIGZpeCB0aGUgYnVpbGQgb24gc3lzdGVtcyB0aGF0IGxhY2sgaXQKIAorMjAwNy0wMS0xOCAxMjo1MCAgdGFuZGVycworCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiBtb3ZlIGdsb2JhbCB2YXJpYWJsZXMgZnJvbSBzbm1wdHJhcGQgdG8gbGlibmV0c25tcHRyYXBkCisKKzIwMDctMDEtMTggMTE6MTMgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLAorICAgICBtYW4vc25tcHRyYXBkLjguZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CisKKyAgIGRyb3AgIi1lIi9wcmludEV2ZW50TnVtYmVycyBzdXBwb3J0IGZvciBzbm1wdHJhcGQgKG9ic29sZXRlLCBkZXByZWNhdGVkIGFuZCBicmVha3MgbGlicmFyeSBsYXllcmluZykKKwogMjAwNy0wMS0xNiAxMDowNCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6CkBAIC04Nzk1LDYgKzczMDk3LDEyIEBACiAKICAgIERvbid0IGhhcmRjb2RlIHRoZSBzaXplIG9mIGNvdW50ZXI2NCBzdHJ1Y3R1cmUgKG1heSBiZSB3cm9uZyBvbiA2NC1iaXQgYm94ZXMpCiAKKzIwMDctMDEtMTYgMDk6MDAgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBFeHRyYSBkZWJ1Z2dpbmcgb3V0cHV0LgorCiAyMDA3LTAxLTExIDIyOjEzICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLApAQCAtODgwNCwxMCArNzMxMTIsMTYgQEAKIAogICAgQ0hBTkdFUzogc25tcGxpYjogbGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHM6IGludHJvZHVjZSBuZXRzbm1wX21rdGVtcCB0byBwcmV2ZW50IGxpYm5ldHNubXBhZ2VudCBmcm9tIGRlcGVuZGluZyBvbiBsaWJuZXRzbm1wbWlicwogCisyMDA3LTAxLTExIDIxOjM1ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5pbjoKKworICAgY2hhbmdlZCBhdXRvY29uZiByZXEgdG8gMi42MQorCiAyMDA3LTAxLTExIDIxOjI4ICBoYXJkYWtlcgogCi0gICAqIHNubXBsaWIvOiBzbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wSVBYRG9tYWluLmMKLSwgc25tcFNURERvbWFpbi5jLCBzbm1wVENQRG9tYWluLmMsCisgICAqIHNubXBsaWIvOiBzbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wSVBYRG9tYWluLmMsCisgICAgIHNubXBTVEREb21haW4uYywgc25tcFRDUERvbWFpbi5jLAogICAgICBzbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wVURQRG9tYWluLmMsCiAgICAgIHNubXBVRFBJUHY2RG9tYWluLmMsIHNubXBfc2VydmljZS5jLAogICAgICBzbm1wX3RyYW5zcG9ydC5jOgpAQCAtODgzMiw2ICs3MzE0NiwxMiBAQAogCiAgICBDSEFOR0VTOiBTb2xhcmlzOiBJRi1NSUIgZml4OiBhZGQgbWlzc2luZyByZXR1cm4gYXQgZW5kIG9mIGdldF9pZl9zdGF0cwogCisyMDA3LTAxLTA4IDA4OjMwICB0YW5kZXJzCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBsaWJyYXJ5IGxheWVyaW5nIGltcHJvdmVtZW50czogYnVpbGQgbGlicmFyaWVzIGluIHRoZSBjb3JyZWN0IG9yZGVyIChsaWJuZXRzbm1wYWdlbnQgYmVmb3JlIGxpYm5ldHNubXBoZWxwZXJzIGJlZm9yZSBsaWJuZXRzbm1wbWlicykKKwogMjAwNy0wMS0wNyAxOTo0NyAgdGFuZGVycwogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaDoKQEAgLTg4NDUsNyArNzMxNjUsNyBAQAogICAgQ0hBTkdFUzogU29sYXJpczogQlVHOiAxNjI2MTUzOiBubyBoclNXUnVuIGluZm9ybWF0aW9ucyBvbiBTb2xhcmlzIHpvbmVzCiAgICBQYXRjaCBwcm92aWRlZCBieSBLbGF1cyBNdWVobGZlbGQKIAotMjAwNy0wMS0wNiAwMDozNCAgdGFuZGVycworMjAwNy0wMS0wNiAwMDozMCAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CiAKQEAgLTg4NTcsMTIgKzczMTc3LDE3IEBACiAKICAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCiAKLTIwMDctMDEtMDMgMjI6MjMgIHRhbmRlcnMKKzIwMDctMDEtMDIgMjM6MzMgIHRhbmRlcnMKIAotICAgKiBwZXJsL1NOTVAvOiBTTk1QLnhzLCB0L2NvbmYudDoKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKIAotICAgY2xlYW4gdXAgY29tcGlsZSBhbmQgZml4IHRlc3RzLgotICAgQmFja3BvcnQgZnJvbSA1LjUuZGV2CisgICBCVUc6IENvdmVyaXR5ICMxNzM6IHJlbW92ZSBzdXBlcmZsdW91cyBOVUxMIGNoZWNrIChhbHJlYWR5IGRlcmVmZXJlbmNlZCBlYXJsaWVyIGFueXdheSkKKworMjAwNy0wMS0wMiAyMzowOCAgdGFuZGVycworCisgICAqIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIG9ubHkgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBtaWJfaW5kZXhlcyBkaXJlY3RvcnkgaXMgKnJlYWxseSogY3JlYXRlZAogCiAyMDA3LTAxLTAyIDIyOjUzICB0YW5kZXJzCiAKQEAgLTg4NzYsNiArNzMyMDEsNjIgQEAKIAogICAgQlVHOiBDb3Zlcml0eSAjMTkzOiBwcm9wZXJseSBpbml0aWFsaXplIHNlc3Npb24gcG9pbnRlciBiZWZvcmUgdXNlCiAKKzIwMDctMDEtMDIgMjA6MTMgIHRhbmRlcnMKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBiYWNrIG91dCBwcmV2aW91cyBiYWQgY2hhbmdlIHRvIGFnZW50IHJlZ2lzdHJ5CisKKzIwMDctMDEtMDIgMTk6NTIgIHRhbmRlcnMKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTYwMTQ1MzogZnJvbSAiUm9iZXJ0IFdpbGNveCI6IER5bmFtaWMgTWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW1wcm92ZW1lbnRzCisKKzIwMDctMDEtMDIgMTk6NTIgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLAorICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL251bGwuYywKKyAgICAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYworLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYworLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywKKyAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wdXNtLmMsCisgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMKKywgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLAorICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsCisgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsCisgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjAxNDUzOiBmcm9tICJSb2JlcnQgV2lsY294IjogRHluYW1pYyBNZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBpbXByb3ZlbWVudHMKKworMjAwNy0wMS0wMiAxNzo1NiAgdGFuZGVycworCisgICAqIE1ha2VmaWxlLmluOgorCisgICByZW1vdmUgTERfUlVOX1BBVEggY29tbWVudCBmb3IgcHl0aG9uCisKKzIwMDctMDEtMDIgMTc6MzggIHRhbmRlcnMKKworICAgKiBNYWtlZmlsZS50b3AsIGNvbmZpZ3VyZSwgbmV0LXNubXAtY29uZmlnLmluCis6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiB1cGRhdGUgdG8gYXV0b2NvbmYgMi42MQorCisyMDA3LTAxLTAyIDE3OjIzICB0YW5kZXJzCisKKyAgICogTWFrZWZpbGUuaW4sIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2tmcmVlYnNkLmg6CisKKyAgIE5FV1M6IFBvcnRzOiBQQVRDSDogMTYyMzg3NDogZnJvbSAiUGV0ciBTYWxpbmdlciI6IGFkZCBHTlUva0ZyZWVCU0Qgc3VwcG9ydAorCisyMDA3LTAxLTAyIDE3OjE3ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorCisgICBDSEFOR0VTOiBidWlsZDogYWRkIHdvcmthcm91bmQgZm9yIEFDX0ZVTkNfR0VUTU5URU5UKCkgYnVnIGluIGF1dG9jb25mIDIuNjBiIGFuZCAyLjYxIChzZWUgRGViaWFuIGJ1Z3MgIzQwMzI0MywgIzQwMzA3OSkKKwogMjAwNy0wMS0wMiAxNjo0OCAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYzoKQEAgLTg4ODUsOCArNzMyNjYsOCBAQAogCiAyMDA3LTAxLTAyIDE2OjAwICBkdHMxMgogCi0gICAqIHNubXBsaWIvOiBzbm1wVURQRG9tYWluLmMsIHNubXBVRFBJUHY2RG9tYWluLmMKLSwgc25tcFVuaXhEb21haW4uYzoKKyAgICogc25tcGxpYi86IHNubXBVRFBEb21haW4uYywgc25tcFVEUElQdjZEb21haW4uYywKKyAgICAgc25tcFVuaXhEb21haW4uYzoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxNjAwMTcxOiBTdXBwb3J0IGxvbmdlciBjb21tdW5pdHkgc3RyaW5ncyBpbiBWQUNNIGNvbmZpZy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFJvYmVydCBXaWxjb3gKQEAgLTg4OTgsMjAgKzczMjc5LDI3IEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNTQ2ODE3OiBGaXggc25tcEVudGVycHJpc2UgdmFyYmluZCB3aGVuIGZvcndhcmRpbmcgdjEgdHJhcHMuCiAgICBQYXRjaCBwcm92aWRlZCBieSBQYWJsbyBQYXNzZXJhLgogCi0yMDA3LTAxLTAyIDEwOjM4ICBkdHMxMgorMjAwNy0wMS0wMiAxMDozNCAgZHRzMTIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIAogICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjI1MTM1OiBjb25maWd1cmUgbG9jYXRpb24gb2YgcHl0aG9uIGludGVycHJldGVyCiAgICBQcm92aWRlZCBieSBBbmRyZXcgTGFuZ21lYWQKIAotMjAwNy0wMS0wMiAxMDozOCAgZHRzMTIKKzIwMDctMDEtMDIgMTA6MzQgIGR0czEyCiAKICAgICogTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnRvcDoKIAogICAgTkVXUzogY29uZmlndXJlOiBQQVRDSCAxNjI1MTM1OiBjb25maWd1cmUgbG9jYXRpb24gb2YgcHl0aG9uIGludGVycHJldGVyCiAgICBQcm92aWRlZCBieSBBbmRyZXcgTGFuZ21lYWQKIAorMjAwNy0wMS0wMiAxMDoyMiAgZHRzMTIKKworICAgKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZToKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjI0NDA2OiBvcHRpb24gdG8gaGFyZGNvZGUgbG9jYXRpb24gb2YgbW91bnQgdGFibGUKKyAgIFN1Ym1pdHRlZCBieSBKb2NoZW4KKwogMjAwNy0wMS0wMSAxNzo0NCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CkBAIC04OTE5LDEyICs3MzMwNywzMyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjAxMTg4LCBCVUc6IDE2MDA0MzI6IEhhbmRsZSBzaWduYWxzIHByb3Blcmx5IHdoZW4gcmVzdGFydGluZyB0aGUgYWdlbnQuCiAgICBGaXggcHJvdmlkZWQgYnkgTG9pYyBEb21haWduZS4KIAotMjAwNy0wMS0wMSAxNjoxMiAgZHRzMTIKKzIwMDctMDEtMDEgMTc6MzUgIGR0czEyCiAKLSAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorICAgKiBzbm1wbGliL21pYi5jOgorCisgICBIYW5kbGUgbm9uLXdyaXRhYmxlIE1JQiBpbmRleGVzIChlLmcuIHJ1biBhcyBub24tcHJpdmlsZWdlZCB1c2VyKQorCisyMDA3LTAxLTAxIDE2OjA5ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMKKzoKIAogICAgTkVXUzogc25tcGxpYjogUEFUQ0hFUyAxNTkyNzA2OiBGaXggbWVtb3J5IGxlYWsgd2hlbiBjbG9uaW5nIHZhcmJpbmRzLgotICAgUGF0Y2ggYnkgU3RldmVuIERvcmlnb3R0aS4KKyAgIEJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBieSBTdGV2ZW4gRG9yaWdvdHRpLgorCisyMDA3LTAxLTAxIDE2OjA5ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE1OTI3MDY6IEZpeCBtZW1vcnkgbGVhayB3aGVuIGNsb25pbmcgdmFyYmluZHMuCisgICBCYXNlZCBvbiBhIHN1Z2dlc3Rpb24gYnkgU3RldmVuIERvcmlnb3R0aS4KKworMjAwNy0wMS0wMSAxNTo0OCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC86IHBhc3MuYywgcGFzc19wZXJzaXN0LmM6CisKKyAgIE5FV1M6IGFnZW50OiBQQVRDSCAxNTg1MTQ2OiBFeHRlbmQgcmFuZ2Ugb2YgYXZhaWxhYmxlIGVycm9yIGNvZGVzCisgICBTdWJtaXR0ZWQgYnkgQW50aG9ueSBOb3ZhdHNpcy4KIAogMjAwNy0wMS0wMSAxNToyOSAgZHRzMTIKIApAQCAtODkzNSw4ICs3MzM0NCw4IEBACiAKIDIwMDctMDEtMDEgMTU6MTYgIGR0czEyCiAKLSAgICogYXBwcy86IHNubXBkZi5jLCBzbm1wZ2V0LmMsIHNubXBnZXRuZXh0LmMKLSwgc25tcHNldC5jOgorICAgKiBhcHBzLzogc25tcGRmLmMsIHNubXBnZXQuYywgc25tcGdldG5leHQuYywKKyAgICAgc25tcHNldC5jOgogCiAgICBNb3ZlIGdsb2JhbCAnZmFpbHVyZXMnIHZhcmlhYmxlIGNsb3NlciB0byB3aGVyZSBpdCBpcyB1c2VkLgogICAgQ0hBTkdFUzogYXBwczogUEFUQ0g6IDE1Mjk1MjM6IENsb3NlIFNOTVAgc2Vzc2lvbiBvbiBmYWlsdXJlLgpAQCAtODk0OCw2ICs3MzM1NywxNiBAQAogICAgUHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBkb3VibGUgZGVsZXRlLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWFnbnVzIEZyb21yZWlkZS4KIAorMjAwNy0wMS0wMSAxNDoyMiAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsIHNubXBsaWIvbWliLmMsCisgICAgIHNubXBsaWIvcGFyc2UuYzoKKworICAgTWFpbnRhaW4gTUlCIGRpcmVjdG9yeSBpbmRleCBmaWxlcyB1bmRlciAvdmFyL25ldC1zbm1wCisgICAoaW4gbGluZSB3aXRoIEZpbGUgSGllcmFyY2h5IFN0YW5kYXJkIHNwZWNpZmljYXRpb25zKQorICAgU2VlIGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz0zODk0MzQKKyAgIGFuZCBkaXNjdXNzaW9uICJNSUJzIGluIG5ldC1zbm1wIiBvbiBjb2RlcnMgbGlzdCAoT2N0IDIwMDYpCisKIDIwMDctMDEtMDEgMTE6MjggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jOgpAQCAtODk1NSw2ICs3MzM3NCwxMiBAQAogICAgRW5zdXJlIHN5c09SRGVzY3JpcHRpb25zIGFyZSBudWxsLXRlcm1pbmF0ZWQsIHNvIHRoZXkgY2FuIGJlCiAgICBzYWZlbHkgcGFzc2VkIHRvICdzdHJkdXAoKScuICBSZXBvcnRlZCBieSBXb2xmZ2FuZyBQZWRvdC4KIAorMjAwNi0xMi0yOSAxNzoyNSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFN5bmNocm9uaXNlIHdpdGggV2lraSB2ZXJzaW9uLgorCiAyMDA2LTEyLTI4IDIzOjI5ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CkBAIC04OTg0LDEwICs3MzQwOSw5IEBACiAKIDIwMDYtMTItMTcgMTg6MDEgIGFsZXhfYgogCi0gICAqIHdpbjMyLzogTWFrZWZpbGUtYXBwcy5pbiwgbGlic25tcF9kbGwvTWFrZWZpbGUuaW4KLSwgc25tcGQvTWFrZWZpbGUuaW4sIHNubXBkc2RrL01ha2VmaWxlLmluCi0sIHNubXBuZXRzdGF0L01ha2VmaWxlLmluLAotICAgICBzbm1wdHJhcGQvTWFrZWZpbGUuaW46CisgICAqIHdpbjMyLzogTWFrZWZpbGUtYXBwcy5pbiwgbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sCisgICAgIHNubXBkL01ha2VmaWxlLmluLCBzbm1wZHNkay9NYWtlZmlsZS5pbiwKKyAgICAgc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIHNubXB0cmFwZC9NYWtlZmlsZS5pbjoKIAogICAgQWRkIGdkaTMyLmxpYiB0byBmaXggbGlua2luZyBwcm9ibGVtIHdoZW4gdXNpbmcgdGhlIHN0YXRpYyB2ZXJzaW9uIG9mIHRoZQogICAgU1NMIGxpYnJhcmllcy4gIFRoYW5rcyB0byBTaW1vbiBFZHdhcmRzIGZvciB0aGUgZml4LgpAQCAtOTAwMCwxNSArNzM0MjQsMTUgQEAKIAogMjAwNi0xMi0xMiAyMzo1MyAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvOiBocl9maWxlc3lzLmMsIGhyX3N0b3JhZ2UuYwotLCBocl9zd2luc3QuYzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC86IGhyX2ZpbGVzeXMuYywgaHJfc3RvcmFnZS5jLAorICAgICBocl9zd2luc3QuYzoKIAogICAgQ0hBTkdFUzogTGludXg6IFBBVENIOiAxNTgxMjk0OiBmcm9tICJNaWNoYWVsIFRhdGFyaW5vdiI6IGhvc3QtcmVzb3VyY2VzIGltcHJvdmVtZW50cwogCiAyMDA2LTEyLTEyIDIxOjI3ICB0YW5kZXJzCiAKLSAgICogd2luMzIvbmV0LXNubXAvOiBuZXQtc25tcC1jb25maWcuaCwKLSAgICAgbmV0LXNubXAtY29uZmlnLmguaW46CisgICAqIHdpbjMyL25ldC1zbm1wLzogbmV0LXNubXAtY29uZmlnLmgsIG5ldC1zbm1wLWNvbmZpZy5oLmluCis6CiAKICAgIHJlLWFkZCBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIKIApAQCAtOTAyNCw3ICs3MzQ0OCw3IEBACiAKICAgIENIQU5HRVM6IFdpbjMyOiBmaXggd2luMzIvQ29uZmlndXJlIC0td2l0aC1pcHY2CiAKLTIwMDYtMTItMTIgMTg6MjEgIHRhbmRlcnMKKzIwMDYtMTItMTIgMTg6MTAgIHRhbmRlcnMKIAogICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKIApAQCAtOTAzNiwxMyArNzM0NjAsODggQEAKIAogICAgQWRkIHZlcnNpb24gdG8gRkFRLmh0bWwuCiAKLTIwMDYtMTItMDkgMDA6MTYgIHRhbmRlcnMKKzIwMDYtMTItMDkgMTc6MTEgIGFsZXhfYgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtLzogZGFyd2luOC5oLCBkYXJ3aW45LmgKKyAgICogbWFuLzogTWFrZWZpbGUuaW4sIG1ha2VfaW5kZXgucGwsIG1hbl9zZWN0aW9ucy50eHQKIDoKIAorICAgLUNyZWF0ZSBodG1sIHBhZ2VzIGZvciBBTEwgbWFuIHBhZ2VzLgorICAgLUltcHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIGNyZWF0aW5nIHRoZSBpbmRleC5odG1sIGZpbGUuCisKKzIwMDYtMTItMDkgMTc6MDYgIGFsZXhfYgorCisgICAqIGxvY2FsLzogaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbCwgaHRtbC10ZXh0ZmlsZS1maXgucGwKKzoKKworICAgQWRkIHRpZHkgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgYWRkIG1pc3NpbmcgUkVBRE1FIGZpbGVzLgorCisyMDA2LTEyLTA5IDAwOjE2ICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vOiBkYXJ3aW44LmgsIGRhcndpbjkuaDoKKwogICAgQ0hBTkdFUzogTWFjT1NYOiBQQVRDSDogMTYwMDQ1MzogZnJvbSAiQ2hyaXMgSmFsYmVydCI6IE9TIFggY29tcGlsZS10aW1lIGVuZGlhbiBkZXRlcm1pbmF0aW9uCiAKKzIwMDYtMTItMDggMjI6NDcgIHRhbmRlcnMKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBkb2N1bWVudCBzb21lIG1vcmUgcG9zdC1yZWxlYXNlIHRhc2tzCisKKzIwMDYtMTItMDggMjI6MjYgIHRhbmRlcnMKKworICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAorICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMKKywgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLAorICAgICBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zCissIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zCissIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCBtYW4vbmV0c25tcF9kZWJ1Zy4zCissIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgbWFuL25ldHNubXBfaGFuZGxlci4zCissIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCisgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCisgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMKKywgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLAorICAgICBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMKKywgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKKyAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKKyAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCisgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKKyAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zCissIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zCissIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsCisgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLAorICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMworLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMKKywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKKyAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMworLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsCisgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zCissIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCisgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywKKyAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93cy4zCissIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMworLCBtYW4vbmV0c25tcF93YXRjaGVyLjMsIHBlcmwvQVNOL0FTTi5wbSwKKyAgICAgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLAorICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtCissIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtCissIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLAorICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgY29uZmlndXJlLAorICAgICBjb25maWd1cmUuaW4sIGRveHlnZW4uY29uZiwgc2Vkc2NyaXB0LmluLAorICAgICBkaXN0L01ha2VmaWxlLCBkaXN0L25ldC1zbm1wLnNwZWMsCisgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmMsIEZBUSwgUkVBRE1FOgorCisgICAtIHZlcnNpb24gdGFnICggNS41LmRldiApCisKIDIwMDYtMTItMDggMjI6MjAgIHRhbmRlcnMKIAogICAgKiBsb2NhbC9WZXJzaW9uLU11bmdlLnBsOgpAQCAtOTA1NSwzMSArNzM1NTQsNDQgQEAKIAogICAgTkVXUzogQlVHOiAxNjExNTI0OiBmaXggdGNwIGNvbm5lY3Rpb24gdGFibGUgZmQgbGVhawogCi0yMDA2LTEyLTA3IDE1OjU2ICB0YW5kZXJzCisyMDA2LTEyLTA4IDEzOjE3ICBtYXJ6CiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvOiBjcHUuaCwgY3B1L2NwdV9tYWNoLmMKLSwgY3B1L2NwdV9tYWNoLmg6CisgICAqIHBlcmwvU05NUC86IE1ha2VmaWxlLlBMLCBTTk1QLnBtOgorCisgICByZXZlcnQgdW5pbmZvcm1lZCB2ZXJzaW9uIGNoYW5nZQorCisyMDA2LTEyLTA3IDIxOjUwICB1aWQzOTAzOQorCisgICAqIHBlcmwvU05NUC86IE1ha2VmaWxlLlBMLCBTTk1QLnBtLCBTTk1QLnhzLAorICAgICB0L2NvbmYudDoKKworICAgY2xlYW4gdXAgY29tcGlsZSBhbmQgZml4IHRlc3RzCisKKzIwMDYtMTItMDcgMTY6NDggIG1hcnoKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbToKKworICAgY29tbWVudCBmaXgKKworMjAwNi0xMi0wNyAxNTo1MiAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlLzogY3B1LmgsIGNwdS9jcHVfbWFjaC5jLAorICAgICBjcHUvY3B1X21hY2guaDoKIAogICAgTkVXUzogTWFjT1NYOiBQQVRDSDogMTYwMDUyMjogZnJvbSAiQmlsbCBGZW5uZXIiOiBDUFUgSEFMIGltcGxlbWVudGF0aW9uIGZvciBtYWNoL2RhcndpbgogCi0yMDA2LTEyLTA3IDE1OjU0ICB0YW5kZXJzCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmM6Ci0KLSAgIGZpbGUgY3B1X21hY2guYyB3YXMgYWRkZWQgb24gYnJhbmNoIFY1LTQtcGF0Y2hlcyBvbiAyMDA2LTEyLTA3IDE1OjU2OjM4ICswMDAwCi0KLTIwMDYtMTItMDcgMTU6NTQgIHRhbmRlcnMKLQotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guaDoKLQotICAgZmlsZSBjcHVfbWFjaC5oIHdhcyBhZGRlZCBvbiBicmFuY2ggVjUtNC1wYXRjaGVzIG9uIDIwMDYtMTItMDcgMTU6NTY6MzggKzAwMDAKLQogMjAwNi0xMi0wNyAxMzoxMCAgdGFuZGVycwogCiAgICAqIHBlcmwvU05NUC9TTk1QLnBtOgogCiAgICBDSEFOR0VTOiBkb2N1bWVudGF0aW9uOiBQQVRDSDogMTYwNDU4MDogU05NUCgzKSBtYW51YWwgcGFnZSBjb3JyZWN0aW9ucyAoc3BvdHRlZCBieSB0ZWstb3BzKQogCisyMDA2LTEyLTA2IDIwOjMwICBoYXJkYWtlcgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIGRvY3VtZW50IHZhcmlvdXMgYXNwZWN0cyBvZiBwb3N0LXJlbGVhc2UgdGhpbmdzIHRvIGRvCisKIDIwMDYtMTItMDYgMTU6MzQgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKQEAgLTkxMTgsNiArNzM2MzAsMzkgQEAKIAogICAgQ0hBTkdFUzogQlVHOiAxNjAwMDkzOiBhdXRvY29uZiAyLjYwIGJyZWFrcyB0aGUgYnVpbGQKIAorMjAwNi0xMi0wNCAxNzo0OSAgaGFyZGFrZXIKKworICAgKiBDT1BZSU5HOgorCisgICBjaGFuZ2UgdG9wIHRleHQgdG8gcmVtb3ZlIGhpc3Rvcnkgc2VjdGlvbiB3aGljaCB3YXMgb3V0IG9mIGRhdGUKKworMjAwNi0xMi0wMyAyMzoyMCAgYWxleF9iCisKKyAgICogd2luMzIvOiBkaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsCisgICAgIG5ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgV2luMzI6ICBXb3Jrc3BhY2UgY29tcGlsZSBmaXgsIGJ1aWxkIGluc3RydWN0aW9ucyB1cGRhdGUuCisKKzIwMDYtMTEtMjQgMTc6NTMgIGhhcmRha2VyCisKKyAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluCissIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYywKKyAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICAtIHZlcnNpb24gdGFnICggNS40ICkKKworMjAwNi0xMS0yNCAxNzo1MiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA2LTExLTI0IDE3OjQ4ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDaGFuZ2VzOiBWNS40LnJjMyAtPiBWNS40CkBAIC0xMjk0Myw2ICs3NzQ4OCw3IEBACiAKIDIwMDYtMDgtMTcgMDc6NTAgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKICwgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOgogCkBAIC0xMzk0NSw2ICs3ODQ5MSw3IEBACiAKIDIwMDYtMDYtMTIgMTM6MDUgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwogOgogCkBAIC0xNTQzNiw3ICs3OTk4Myw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgogCi0gICBIYW5kbGUgZnVsbC1sZW5ndGggSVB2NiBhZGRyZXNzZXMuICBGaXggc3VwcGxpZWQgYnkgUmFkZWsgVm9rw6FsCisgICBIYW5kbGUgZnVsbC1sZW5ndGggSVB2NiBhZGRyZXNzZXMuICBGaXggc3VwcGxpZWQgYnkgUmFkZWsgVm9r54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOOAlQogCiAyMDA2LTAxLTMwIDAxOjUyICBkdHMxMgogCkBAIC0xNTQ4Myw3ICs4MDAzMCw3IEBACiAsIHNubXBsaWIvc25tcF9hcGkuYywgcGVybC9TTk1QL1NOTVAucG06CiAKICAgIEhhbmRsZSBub24taW5jcmVhc2luZyBPSURzIGR1cmluZyBhIChwZXJsKSBidWxrd2Fsay4KLSAgIFBhdGNoICMxMzY0NjUwIGZyb20gT2xlIEJqw7hybiBIZXNzZW4KKyAgIFBhdGNoICMxMzY0NjUwIGZyb20gT2xlIEJq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOWXt24gSGVzc2VuCiAKIDIwMDYtMDEtMjcgMDM6MDcgIGR0czEyCiAKQEAgLTE1OTM3LDYgKzgwNDg0LDcgQEAKIAogMjAwNi0wMS0xMCAwMzowNyAgdGFuZGVycwogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMTU5NDQsNiArODA0OTIsNyBAQAogCiAyMDA2LTAxLTA5IDE3OjQxICB0YW5kZXJzCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0xNjk1NSw2ICs4MTUwNCw3IEBACiAKIDIwMDUtMTItMDkgMjA6NTggIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMTY5NzcsNiArODE1MjcsNyBAQAogCiAyMDA1LTEyLTA5IDIwOjU3ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0xODI1Nyw2ICs4MjgwOCw3IEBACiAKIDIwMDUtMTEtMTYgMTU6MTggIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMTgzOTYsNiArODI5NDgsNyBAQAogCiAyMDA1LTExLTE1IDIxOjE0ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0xODQwOSw2ICs4Mjk2Miw3IEBACiAKIDIwMDUtMTEtMTUgMjE6MDggIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwogOgogCkBAIC0xODQzOCw2ICs4Mjk5Miw3IEBACiAKIDIwMDUtMTEtMTUgMTk6MjQgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0xODU1NCw2ICs4MzEwOSw3IEBACiAKIDIwMDUtMTEtMTQgMTc6MjggIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTE5ODM1LDYgKzg0MzkxLDcgQEAKIAogMjAwNS0xMC0yOCAyMzoyNyAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgKIDoKIApAQCAtMTk4NDIsNiArODQzOTksNyBAQAogCiAyMDA1LTEwLTI4IDIzOjI2ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0yMTkxMCw2ICs4NjQ2OCw3IEBACiAKIDIwMDUtMDktMjcgMTk6MjUgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwogOgogCkBAIC0yMjYyMiw2ICs4NzE4MSw3IEBACiAKIDIwMDUtMDktMDYgMTk6MTcgIHRhbmRlcnMKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLy5jdnNpZ25vcmUKIDoKIApAQCAtMjI3MzQsNiArODcyOTQsNyBAQAogCiAyMDA1LTA4LTMwIDA4OjA2ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb25zdGFudHMuaAogOgogCkBAIC0yNTU3MCw2ICs5MDEzMSw3IEBACiAKIDIwMDUtMDMtMjggMTQ6MjkgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0yNTU5OSw3ICs5MDE2MSw3IEBACiAgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzoKIAogICAgLSBwYXNzIE5VTEwgdG8gY29uZmlnIGhhbmRsZXIgcmVnLCB0byB1c2UgY3VycmVudCBhcHB0eXBlCi0gICAtIGFkZCBzZXBlcmF0b3JzIGFuZCBoZWFkZXJzIHdoZW4gc2F2aW5nIHBlcnNpc3RlbnQgZGF0YQorICAgLSBhZGQgc2VwYXJhdG9ycyBhbmQgaGVhZGVycyB3aGVuIHNhdmluZyBwZXJzaXN0ZW50IGRhdGEKICAgIC0gcmVtb3ZlIGV4dHJhbmVvdXMgbmV3bGluZSBpbiBwZXJzaXN0ZW50IGRhdGEKIAogMjAwNS0wMy0yNCAyMjowNiAgcnN0b3J5CkBAIC0yNTYxMCw2ICs5MDE3Miw3IEBACiAKIDIwMDUtMDMtMjQgMTY6NDggIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMjYzNDcsNiArOTA5MTAsNyBAQAogCiAyMDA1LTAxLTI3IDIyOjUyICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTI4MTAyLDYgKzkyNjY2LDcgQEAKIAogMjAwNC0xMC0xNyAyMDo1NiAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTI4NTIyLDYgKzkzMDg3LDcgQEAKIAogMjAwNC0xMC0xNCAxODoxNSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCiA6CiAKQEAgLTI4ODcwLDYgKzkzNDM2LDcgQEAKIAogMjAwNC0xMC0wOCAxOToyNyAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMjg4NzcsNiArOTM0NDQsNyBAQAogCiAyMDA0LTEwLTA4IDE5OjI1ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0yOTkzMCw2ICs5NDQ5OCw3IEBACiAKIDIwMDQtMDktMjQgMDk6MTUgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMjk5ODksNiArOTQ1NTgsNyBAQAogCiAyMDA0LTA5LTIzIDEzOjI0ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jCiA6CiAKQEAgLTMwMTY1LDYgKzk0NzM1LDcgQEAKIAogMjAwNC0wOS0yMSAwNjo0MyAgaGFyZGFrZXIKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jCiA6CiAKQEAgLTMxMTk4LDcgKzk1NzY5LDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CiAKLSAgIGZpeCBmbG9hdCBjYWxjIGluIHZhcl9leHRlbnNpYmxlX2Rpc2sgcGVyIEhhcmFsZCBTdHJh32JlcmdlciA8aHNAc3lzbG9nLmF0PgorICAgZml4IGZsb2F0IGNhbGMgaW4gdmFyX2V4dGVuc2libGVfZGlzayBwZXIgSGFyYWxkIFN0cmHniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy144ODZXJnZXIgPGhzQHN5c2xvZy5hdD4KIAogMjAwNC0wOC0zMSAxNDowMiAgaGFyZGFrZXIKIApAQCAtMzEzNTcsNiArOTU5MjgsNyBAQAogCiAyMDA0LTA4LTI3IDIzOjIyICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMzIyMTcsNiArOTY3ODksNyBAQAogCiAyMDA0LTA3LTEwIDE5OjUxICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0zMjMwMSw2ICs5Njg3NCw3IEBACiAKIDIwMDQtMDctMDkgMjI6NTggIGhhcmRha2VyCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYwogOgogCkBAIC0zMjM3OSw2ICs5Njk1Myw3IEBACiAKIDIwMDQtMDctMDkgMDk6NTcgIGhhcmRha2VyCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvLmN2c2lnbm9yZQogOgogCkBAIC0zMjUyMiw2ICs5NzA5Nyw3IEBACiAKIDIwMDQtMDctMDcgMTM6NDEgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0zMzM0OSw2ICs5NzkyNSw3IEBACiAKIDIwMDQtMDYtMjggMTU6MTEgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKIDoKIApAQCAtMzM3NzksNyArOTgzNTYsNyBAQAogICAgKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZToKIAogICAgRml4IGhhbmRsaW5nIG9mIC0tZW5hYmxlLWxvY2FsLXNtdXggb3B0aW9uCi0gICAoUGF0Y2ggIzk0OTgwOCBmcm9tIEVyaWsgxG5nZ+VyZCkKKyAgIChQYXRjaCAjOTQ5ODA4IGZyb20gRXJpayDniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLZuZ2fniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy16ISaZCkKIAogMjAwNC0wNi0xOCAwNjo0NiAgZHRzMTIKIApAQCAtMzYwMTksNiArMTAwNTk2LDcgQEAKIAogMjAwNC0wNC0xMyAxMTo0NCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0zNjAyNiw2ICsxMDA2MDQsNyBAQAogCiAyMDA0LTA0LTEzIDExOjQzICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKIDoKIApAQCAtNjQ3NDMsNyArMTI5MzIyLDcgQEAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC86IGhyX3N3cnVuLmMgKFY0LTItcGF0Y2hlcy41KSwgaHJfc3dydW4uYwogOgogCi0gICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG5G5nZXIpCisgICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteepq2dlcikKICAgIAogMjAwMS0wMy0xNCAwNToyMiAgamJwbgogCkBAIC02OTI2OCw3ICsxMzM4NDcsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jOgogCi0gICAtIChtZW1vcnkuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq+HJzdGFkOgorICAgLSAobWVtb3J5LmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogICAgICAtIGZpeGVkIGxpbnV4IHByb2JsZW06IHdyb25nIHBhcmFtcyBnZXR0aW5nIHJldHVybmVkLgogICAgCiAyMDAwLTA1LTI1IDA1OjM4ICBtc2xpZmNhawpAQCAtNzEwNDgsNyArMTM1NjI3LDcgQEAKIAogICAgLSAoY29uZmlndXJlKiB1Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYyk6CiAgICAgIC0gUHJvdmlkZSBtaXNzaW5nICdnZXRwYWdlc2l6ZScgcm91dGluZSBmb3IgU29sYXJpcyAyLjQKLSAgICAgICAoVGhhbmtzIHRvIFJhZ25hciBLavhyc3RhZCkKKyAgICAgICAoVGhhbmtzIHRvIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkKQogICAgCiAyMDAwLTAyLTE2IDIwOjE3ICBtc2xpZmNhawogCkBAIC03ODM3Niw3ICsxNDI5NTUsNyBAQAogICAgICBsb2FkYXZlLmMsIG1lbW9yeV9zb2xhcmlzMi5jLCBwYXNzLmMsIHBhc3NfcGVyc2lzdC5jLCBwcm9jLmMsCiAgICAgIHZlcnNpb25pbmZvLmMsIGFsYXJtLmMsIGV2ZW50LmMsIE1ha2VmaWxlLmluLCBwYXJzZS5jLCBzbm1wLmMsCiAgICAgIHNubXBfZGVidWcuYywgc25tcF9sb2dnaW5nLmMsIHNubXBfbG9nZ2luZy5oKTogUGF0Y2ggZnJvbSBSYWduYXIKLSAgICAgS2r4cnN0YWQ6CisgICAgIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAgICAgIC0gZG8gZmlsZSwgc3RkZXJyLCBhbmQgc3lzbG9nIHN1cHBvcnQuCiAgICAKIDE5OTktMDctMTUgMDg6NDUgIGhhcmRha2VyCkBAIC03ODUxOSw3ICsxNDMwOTgsNyBAQAogCiAgICAqIGFnZW50L3NubXBkLmM6CiAKLSAgIC0gKHNubXBkLmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLavhyc3RhZDoKKyAgIC0gKHNubXBkLmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogICAgICAtIEFkZCBvcHRpb25zIGZvciBzd2l0Y2hpbmcgdG8gYSBnaXZlbiB1aWQgYW5kIGdpZC4KICAgIAogMTk5OS0wNy0wOCAxNToxNiAgaGFyZGFrZXIKQEAgLTk1Mjg4LDcgKzE1OTg2Nyw3IEBACiAKICAgICogc25tcGxpYi9taWIuYzoKIAotICAgRml4IGEgQyBwcmVjZWRlbmNlIGJvdGNoLXVwLCB0aGFua3MgdG8gRmFicu1jaW8gTGFzIENhc2FzIDxGYWJyaWNpb0BhdGFuLmNvbS5icj4KKyAgIEZpeCBhIEMgcHJlY2VkZW5jZSBib3RjaC11cCwgdGhhbmtzIHRvIEZhYnLniK31gJGL772k9YCRi++9pOatu+KAsmNpbyBMYXMgQ2FzYXMgPEZhYnJpY2lvQGF0YW4uY29tLmJyPgogICAgCiAyMDAzLTAyLTI2IDE0OjE0ICBuYmEKIApAQCAtMTEyMDcxLDcgKzE3NjY1MCw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC86IGhyX3N3cnVuLmMgKFY0LTItcGF0Y2hlcy41KSwgaHJfc3dydW4uYzoKIAotICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRuRuZ2VyKQorICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXnqatnZXIpCiAgICAKIDIwMDEtMDMtMTQgMDU6MjIgIGpicG4KIApAQCAtMTE2MzE2LDcgKzE4MDg5NSw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgogCi0gICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG5G5nZXIpCisgICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteepq2dlcikKICAgIAogMjAwMS0wMy0xMyAxMzoyMCAgaGFyZGFrZXIKIApAQCAtMTE5NTYyLDcgKzE4NDE0MSw3IEBACiAJCiAyMDAwLTA1LTI1IDEwOjA3ICBoYXJkYWtlcgogCi0JLSAobWVtb3J5LmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLavhyc3RhZDoKKwktIChtZW1vcnkuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAJICAtIGZpeGVkIGxpbnV4IHByb2JsZW06IHdyb25nIHBhcmFtcyBnZXR0aW5nIHJldHVybmVkLgogCQogMjAwMC0wNS0yNSAwNTozOCAgbXNsaWZjYWsKQEAgLTEyMDc1MSw3ICsxODUzMzAsNyBAQAogCiAJLSAoY29uZmlndXJlKiB1Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYyk6CiAJICAtIFByb3ZpZGUgbWlzc2luZyAnZ2V0cGFnZXNpemUnIHJvdXRpbmUgZm9yIFNvbGFyaXMgMi40Ci0JICAgIChUaGFua3MgdG8gUmFnbmFyIEtq+HJzdGFkKQorCSAgICAoVGhhbmtzIHRvIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkKQogCQogMjAwMC0wMi0xNiAyMDoxNyAgbXNsaWZjYWsKIApAQCAtMTI2MDg1LDcgKzE5MDY2NCw3IEBACiAgICAgLSAoc25tcGRlbHRhLmMsIGludDY0LmMsIGludDY0LmgpOiBtaW5pbWFsIGM2NCBzdXBwb3J0IGZvciBzbm1wZGVsdGEuIFVudGVzdGVkLgogCiBoYXJkYWtlciAgOCBKdWwgOTkgMTY6MDI6NTgKLSAgICAtIChzbm1wZC5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2r4cnN0YWQ6CisgICAgLSAoc25tcGQuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAgICAgICAtIEFkZCBvcHRpb25zIGZvciBzd2l0Y2hpbmcgdG8gYSBnaXZlbiB1aWQgYW5kIGdpZC4KIAogZGF2ZXMgIDkgSnVsIDk5IDAxOjQ5OjQ5CkBAIC0xMjYxMzIsNyArMTkwNzExLDcgQEAKICAgICAgIGxvYWRhdmUuYywgbWVtb3J5X3NvbGFyaXMyLmMsIHBhc3MuYywgcGFzc19wZXJzaXN0LmMsIHByb2MuYywKICAgICAgIHZlcnNpb25pbmZvLmMsIGFsYXJtLmMsIGV2ZW50LmMsIE1ha2VmaWxlLmluLCBwYXJzZS5jLCBzbm1wLmMsCiAgICAgICBzbm1wX2RlYnVnLmMsIHNubXBfbG9nZ2luZy5jLCBzbm1wX2xvZ2dpbmcuaCk6IFBhdGNoIGZyb20gUmFnbmFyCi0gICAgICBLavhyc3RhZDoKKyAgICAgIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAgICAgICAtIGRvIGZpbGUsIHN0ZGVyciwgYW5kIHN5c2xvZyBzdXBwb3J0LgogCiBoYXJkYWtlciAyMCBKdWwgOTkgMTc6MDY6NTMKZGlmZiAtLWdpdCBhL0ZBUSBiL0ZBUQppbmRleCBmNGY3NzU1Li45ZDFlYWMxIDEwMDY0NAotLS0gYS9GQVEKKysrIGIvRkFRCkBAIC0xLDcgKzEsNyBAQAogICAgICAgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUSkgZm9yIHRoZSBVQ0QvTmV0LVNOTVAgcGFja2FnZQogICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkgICAgICAgRkFRIEF1dGhvcjogRGF2ZSBTaGllbGQKLQkgICAgICAgIE5ldC1TTk1QIFZlcnNpb246IDUuNC40IFNWTiBicmFuY2gKKwkJCU5ldC1TTk1QIFZlcnNpb246IDUuNy4zLnJjMwogCSAgICBOZXQtU05NUC9VQ0QtU05NUCBQcm9qZWN0IExlYWRlcjogV2VzIEhhcmRha2VyCiAJICAgICBFbWFpbDogbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogCkBAIC0xMzE0LDcgKzEzMTQsNyBAQAogICBjb3ZlcmVkIGluIHRoZSBBR0VOVCBhbmQgQ09ESU5HIHNlY3Rpb25zLgogCiAgIFlvdSBzaG91bGQgYWxzbyByZWFkIHRoZSBzbm1wdHJhcCB0dXRvcmlhbCBhdAotCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAuaHRtbAorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9UVVQ6c25tcHRyYXAKICAgd2hpY2ggd2lsbCBoZWxwIHlvdSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8ga25vdyBhYm91dCB0cmFwcy4KIAogCkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogICAgICAgICBmb3J3YXJkIGRlZmF1bHQgICAgICAgICAgICAgICAgICAxMC4wLjAuMgogCiAgIFRoZXJlJ3MgYSB0dXRvcmlhbCB3aXRoIG1vcmUgZGV0YWlscyBvbiB0aGUgd2ViIHNpdGUgYXQKLQlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFwLmh0bWwKKyAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOnNubXB0cmFwCiAKIAogCkBAIC0yMTU4LDYgKzIxNTgsMTUgQEAKICAgb3V0cHV0IGlzIHJldHVybmVkIGluIGEgZml4ZWQgZm9ybWF0LCBhbmQgaXQgaXMgdXAgdG8gdGhlIHJlY2VpdmluZwogICBhcHBsaWNhdGlvbiB0byBpbnRlcnByZXQgdGhpcyBhcHByb3ByaWF0ZWx5LgogCisgIE5vdGUgdGhhdCB0aGUgInJlbG9jYXRhYmxlIiBmb3JtIG9mIHRoZSAnZXhlYycgZGlyZWN0aXZlICgnZXhlYyBPSUQgLi4uLicpCisgIHByb2R1Y2VzIE1JQiBvdXRwdXQgdGhhdCBpcyBub3Qgc3RyaWN0bHkgdmFsaWQuIEZvciB0aGlzIHJlYXNvbiwgc3VwcG9ydAorICBmb3IgdGhpcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiAnZXh0ZW5kIE9JRCAuLi4nLCB3aGljaCBwcm9kdWNlcworICB3ZWxsLWZvcm1lZCBNSUIgcmVzdWx0cyAoYXMgd2VsbCBhcyBwcm92aWRpbmcgZnVsbGVyIGZ1bmN0aW9uYWxpdHkpLgorICBUaGUgbW9zdCByZWNlbnQgcmVsZWFzZXMgb2YgdGhlIGFnZW50IGRvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgInJlbG9jYXRhYmxlCisgIGV4ZWMiIGJ5IGRlZmF1bHQuIFRoaXMgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBpbmNsdWRlZCB3aGVuIHRoZSBhZ2VudCBpcworICBmaXJzdCBjb21waWxlZCwgYnkgaW5jbHVkaW5nIHRoZSBtb2R1bGUgJ3VjZC1zbm1wL2V4dGVuc2libGUnIGluc3RlYWQgb2YKKyAgJ2FnZW50L2V4dGVuZCcuCisKIAogICAncGFzcycgaXMgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIGZvciBpbXBsZW1lbnRpbmcgYXJiaXRyYXJ5IE1JQgogICBvYmplY3RzLiAgVGhlIHNwZWNpZmllZCBjb21tYW5kIHdpbGwgYmUgaW52b2tlZCBmb3IgYW55IHJlcXVlc3Qgd2l0aGluCkBAIC0yNTk0LDcgKzI2MDMsNyBAQAogCiAKIFdoeSBkb2VzIHRoZSBhZ2VudCBjb21wbGFpbiBhYm91dCAnbm8gYWNjZXNzIGNvbnRyb2wgaW5mb3JtYXRpb24nPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgIEFsdGhvdWdoIGFuIFNOTVAgYWdlbnQgbWF5IHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIG1hbmFnZW1lbnQKICAgaW5mb3JtYXRpb24sIGl0IGlzIG5vdCBuZWNlc3NhcmlseSBhcHByb3ByaWF0ZSB0byByZXBvcnQgdGhlIHdob2xlCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxIEBACitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCAwZWE0MWFhLi5jZmNkZjczIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMSwzICsxLDQgQEAKKwogIwogIyBNYWtlZmlsZS5pbiAoYXQgdGhlIHJvb3Qgb2YgbmV0LXNubXApCiAjCkBAIC02LDYgKzcsNyBAQAogVlBBVEgJCT0gQHNyY2RpckAKIAogU1VCRElSUwkJPSBzbm1wbGliIEBNQUlOU1VCU0AKK0ZUU1VCRElSUwk9IEBGVE1BSU5TVUJTQCBzbm1wbGliCiBURVNURElSUwk9IHRlc3RpbmcKIAogQ1BQCQk9IEBDUFBAIAkJCQkJICAgICAgICBcCkBAIC0xMywyMiArMTUsMjMgQEAKIAkJLURET05UX0lOQ19TVFJVQ1RTIC1EQklORElSPSQoYmluZGlyKSAJCSAgICAgICAgXAogCQkkKEVYVFJBQ1BQRkxBR1MpCiAKLUlOU1RBTExIRUFERVJTPXZlcnNpb24uaAorSU5TVEFMTEhFQURFUlM9dmVyc2lvbi5oIG5ldC1zbm1wLWZlYXR1cmVzLmgKIElOQ0xVREVTVUJESVI9c3lzdGVtCiBJTkNMVURFU1VCRElSSEVBREVSUz0gYWl4LmggYnNkLmggYnNkaTMuaCBic2RpNC5oIGJzZGkuaCBjeWd3aW4uaCBcCi0JZGFyd2luLmggZGFyd2luNy5oIGRhcndpbjguaCBkYXJ3aW45LmggZHluaXguaCBcCisJZGFyd2luLmggZGFyd2luNy5oIGRhcndpbjguaCBkYXJ3aW45LmggZGFyd2luMTAuaCBkcmFnb25mbHkuaCBkeW5peC5oIFwKIAlmcmVlYnNkMi5oIGZyZWVic2QzLmggZnJlZWJzZDQuaCBmcmVlYnNkNS5oIGZyZWVic2Q2LmggXAogCWZyZWVic2Q3LmggZnJlZWJzZDguaCBmcmVlYnNkOS5oIGZyZWVic2QxMC5oIGZyZWVic2QxMS5oIFwKIAlmcmVlYnNkMTIuaCBmcmVlYnNkLmggXAotICAgICAgICBnZW5lcmljLmggaHB1eC5oIFwKLQlpcml4LmggbGludXguaCBtaW5ndzMyLmggbWlwcy5oIG5ldGJzZC5oIG9zZjUuaCBcCisgICAgICAgIGdlbmVyaWMuaCBcCisJaHB1eC5oIGlyaXguaCBsaW51eC5oIG1pbmd3MzIuaCBtaXBzLmggbmV0YnNkLmggb3NmNS5oIFwKIAlvcGVuYnNkLmggb3BlbmJzZDUuaCBvcGVuYnNkNC5oIFwKIAlzb2xhcmlzMi4zLmggc29sYXJpczIuNC5oIHNvbGFyaXMyLjUuaCBzb2xhcmlzMi42LmggXAotCXNvbGFyaXMuaCBzdW5vcy5oIHN2cjUuaCBzeXN2LmggdWx0cml4NC5oIGRyYWdvbmZseS5oCisJc29sYXJpcy5oIHN1bm9zLmggc3ZyNS5oIHN5c3YuaCB1bHRyaXg0LmgKIElOQ0xVREVTVUJESVIyPW1hY2hpbmUKIElOQ0xVREVTVUJESVJIRUFERVJTMj1nZW5lcmljLmgKIElOU1RBTExCVUlMVEhFQURFUlM9aW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotSU5TVEFMTEJJTlNDUklQVFM9bmV0LXNubXAtY29uZmlnCitJTlNUQUxMQlVJTFRJTkNMVURFSEVBREVSUz1ARkVBVFVSRUhFQURFUlNACitJTlNUQUxMQklOU0NSSVBUUz1uZXQtc25tcC1jb25maWcgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIKIElOU1RBTExVQ0RIRUFERVJTPXVjZC1zbm1wLWNvbmZpZy5oIHZlcnNpb24uaCBtaWJfbW9kdWxlX2NvbmZpZy5oCiAKICMKQEAgLTQ0LDEzICs0NywyMCBAQAogIyBwZXJsIHNwZWNpZmljCiAjCiAjIHllcywgb3JkZXIgbWF0dGVycyBoZXJlLiAgZGVmYXVsdF9zdG9yZSBtdXN0IG9jY3VyIGJlZm9yZSBhbnl0aGluZyBlbHNlCi1QRVJMTU9EVUxFUz1kZWZhdWx0X3N0b3JlIFNOTVAgQVNOIE9JRCBhZ2VudAorUEVSTE1PRFVMRVM9ZGVmYXVsdF9zdG9yZSBTTk1QIEFTTiBPSUQgYWdlbnQgVHJhcFJlY2VpdmVyCitQRVJMTU9EVUxFRlRTPXBlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQgXAorCXBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQgXAorCXBlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0IFwKKwlwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0CiBQRVJMQVJHUz1AUEVSTEFSR1NACiAKICMKICMgcHl0aG9uIHNwZWNpZmljCiAjCiBQWVRIT05BUkdTPUBQWVRIT05BUkdTQAorUFlUSE9OTU9EVUxFRlRTPXB5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdAogCiAjCiAjIGxpYnRvb2wKQEAgLTU4LDkgKzY4LDE0IEBACiBMSUJUT09MX0RFUFMgPSBATElCVE9PTF9ERVBTQAogCiAjCisjIGZlYXR1cmUgY2hlY2tzIGZvciBvcHRpb25hbCBjb21wb25lbnRzCisjCitGVE9USEVSVEFSR1M9QFBFUkxGRUFUVVJFU0AgQFBZVEhPTkZFQVRVUkVTQAorCisjCiAjIHRhcmdldHMKICMKLWFsbDogICAgc2Vkc2NyaXB0IEVYQU1QTEUuY29uZiBzdGFuZGFyZGFsbCBuZXQtc25tcC1jb25maWcteCBAUEVSTFRBUkdTQCBAUFlUSE9OVEFSR1NACithbGw6ICAgIHNlZHNjcmlwdCBFWEFNUExFLmNvbmYgIEBGRUFUVVJFVEFSR1NAIHN0YW5kYXJkYWxsIG5ldC1zbm1wLWNvbmZpZy14IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIEBQRVJMVEFSR1NAIEBQWVRIT05UQVJHU0AKIAogc3RhcnQtZmxhZzoKIAlAdG91Y2ggYnVpbGQtaW4tcHJvZ3Jlc3MtZmxhZwpAQCAtNzIsMjMgKzg3LDIzIEBACiAJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjawogCiAKLXNubXBsaWI6Citzbm1wbGliOiBARkVBVFVSRVRBUkdTQAogCUAoY2Qgc25tcGxpYjsgJChNQUtFKSApCiAKLWFnZW50OgorYWdlbnQ6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFnZW50OyAkKE1BS0UpICkKIAotYXBwczoKK2FwcHM6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFnZW50OyAkKE1BS0UpIGxpYnMpCiAJQChjZCBhcHBzOyAkKE1BS0UpICkKIAotc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIHNubXBkZWx0YSBzbm1wdGFibGUgc25tcHRlc3Qgc25tcHNldCBzbm1wdXNtIHNubXB2YWNtIHNubXBnZXRuZXh0IGVuY29kZV9rZXljaGFuZ2Ugc25tcGRmIHNubXB0cmFwOgorc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIHNubXBkZWx0YSBzbm1wdGFibGUgc25tcHRlc3Qgc25tcHNldCBzbm1wdXNtIHNubXB2YWNtIHNubXBnZXRuZXh0IGVuY29kZV9rZXljaGFuZ2Ugc25tcGRmIHNubXB0cmFwIHNubXB0bHM6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFwcHM7ICQoTUFLRSkgJEAgKQogCi1zbm1wdHJhcGQ6CithZ2VudHh0cmFwIHNubXB0cmFwZDogQEZFQVRVUkVUQVJHU0AKIAlAKGNkIHNubXBsaWI7ICQoTUFLRSkgKQogCUAoY2QgYWdlbnQ7ICQoTUFLRSkgbGlicykKIAlAKGNkIGFwcHM7ICQoTUFLRSkgJEAgKQpAQCAtOTgsNiArMTEzLDcgQEAKICMKIHNlZHNjcmlwdDogc2Vkc2NyaXB0LmluIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJChzcmNkaXIpL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAogCSQoQ1BQKSAkKHNyY2Rpcikvc2Vkc2NyaXB0LmluIHwgZWdyZXAgJ15zWy8jXScgfCBzZWQgJ3MvUkVNT1ZFTUUvL2c7cyMgKi8jLyNnO3MvICojLyMvZztzIy8gKiMvI2c7cy8jIGcvI2cvOycgPiBzZWRzY3JpcHQKKwllY2hvICdzL1ZFUlNJT05JTkZPLyQoVkVSU0lPTikvZycgPj4gc2Vkc2NyaXB0CiAJZWNobyAncyNEQVRBRElSIyQoZGF0YWRpcikjZycgPj4gc2Vkc2NyaXB0CiAJZWNobyAncyNMSUJESVIjJChsaWJkaXIpI2cnID4+IHNlZHNjcmlwdAogCWVjaG8gJ3MjQklORElSIyQoYmluZGlyKSNnJyA+PiBzZWRzY3JpcHQKQEAgLTEwNywyNCArMTIzLDIxIEBACiBFWEFNUExFLmNvbmY6IHNlZHNjcmlwdCBFWEFNUExFLmNvbmYuZGVmCiAJJChTRUQpIC1mIHNlZHNjcmlwdCAkKHNyY2RpcikvRVhBTVBMRS5jb25mLmRlZiA+IEVYQU1QTEUuY29uZgogCi1kb2NzOiBkb2NzZGlyIG1hbmNwCitkb2NzOiBkb2NzZGlyIAogCiBkb2NzZGlyOiBkb2NzZG94CiAKIGRvY3Nkb3g6IGRveHlnZW4uY29uZgotCXNyY2Rpcj0kKHNyY2RpcikgZG94eWdlbiAkKHNyY2RpcikvZG94eWdlbi5jb25mCi0JLXJtIGRvY3MvbWFuL21hbjMvdG9kby4zCi0JLXJtIGRvY3MvbWFuL21hbjMvZGVwcmVjYXRlZC4zCi0KLW1hbmNwOgotCUBmb3IgaSBpbiBkb2NzL21hbi9tYW4zLyogOyBkbyBcCi0JICAgICBjcCAkJGkgbWFuL25ldHNubXBfYGJhc2VuYW1lICQkaWAgOyBcCi0JZG9uZQorCXNyY2Rpcj0kKHNyY2RpcikgVkVSU0lPTj0kKFZFUlNJT04pIGRveHlnZW4gJChzcmNkaXIpL2RveHlnZW4uY29uZgogCiBuZXQtc25tcC1jb25maWcteDogbmV0LXNubXAtY29uZmlnCiAJY2htb2QgYSt4IG5ldC1zbm1wLWNvbmZpZwogCXRvdWNoIG5ldC1zbm1wLWNvbmZpZy14CiAKK25ldC1zbm1wLWNyZWF0ZS12My11c2VyLXg6IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyCisJY2htb2QgYSt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyCisJdG91Y2ggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIteAorCiAjCiAjIGV4dHJhIGluc3RhbGwgcnVsZXMKICMKQEAgLTEzNywxMSArMTUwLDggQEAKICMKICMgdGVzdCB0YXJnZXRzCiAjCi10ZXN0OiBhbGwgdGVzdGRpcnMKLQkoIGNkIHRlc3Rpbmc7ICQoTUFLRSkgdGVzdCApCi0KLXRlc3QtbWliczogYWxsIHRlc3RkaXJzCi0JKCBjZCB0ZXN0aW5nOyAkKE1BS0UpIHRlc3QtbWlicyApCit0ZXN0IHRlc3QtbWlicyB0ZXN0YWxsIHRlc3RmYWlsZWQgdGVzdHNpbXBsZTogYWxsIHRlc3RkaXJzCisJKCBjZCB0ZXN0aW5nOyAkKE1BS0UpICRAICkKIAogdGVzdGRpcnM6CiAJZm9yIGkgaW4gJChURVNURElSUykgOyBkbwlcCkBAIC0xNTQsNyArMTY0LDcgQEAKIGRpc3RhbGw6ICR7c3JjZGlyfS9jb25maWd1cmUgJHtzcmNkaXJ9L2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggCiAKIE9USEVSQ0xFQU5UQVJHRVRTPUVYQU1QTEUuY29uZiBzZWRzY3JpcHQKLU9USEVSQ0xFQU5UT0RPUz1wZXJsY2xlYW4gQFBZVEhPTkNMRUFOVEFSR1NACitPVEhFUkNMRUFOVE9ET1M9cGVybGNsZWFuIEBQWVRIT05DTEVBTlRBUkdTQCBjbGVhbmZlYXR1cmVzIHBlcmxjbGVhbmZlYXR1cmVzIHB5dGhvbmNsZWFuZmVhdHVyZXMKIAogIwogIyBwZXJsIHNwZWNpZmljIGJ1aWxkIHJ1bGVzCkBAIC0xOTUsMTMgKzIwNSwyMSBAQAogCUBpZiB0ZXN0IC1mIHBlcmwvTWFrZWZpbGU7IHRoZW4gXAogCSAgICggY2QgcGVybCA7ICQoTUFLRSkgY2xlYW4gKSA7IFwKIAlmaQorCiBwZXJscmVhbGNsZWFuOgogCUBpZiB0ZXN0IC1mIHBlcmwvTWFrZWZpbGU7IHRoZW4gXAogCSAgICggY2QgcGVybCA7ICQoTUFLRSkgcmVhbGNsZWFuICkgOyBcCiAJZmkKIAorLmguZnQ6CisJJChGRUFUVVJFQ0hFQ0spIC0tZmVhdHVyZS1nbG9iYWwgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggYGRpcm5hbWUgJDxgICQ8ICRAICQoQ0MpIC1JICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIC1JICQodG9wX3NyY2RpcikvaW5jbHVkZSAtRSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWMKIAotIworcGVybGZlYXR1cmVzOiAkKFBFUkxNT0RVTEVGVFMpCisKK3BlcmxjbGVhbmZlYXR1cmVzOgorCSQoUk0pICQoUEVSTE1PRFVMRUZUUykKKworCiAjIHB5dGhvbiBzcGVjaWZpYyBidWlsZCBydWxlcwogIwogUFlNQUtFPSQoUFlUSE9OKSBzZXR1cC5weSAkKFBZVEhPTkFSR1MpCkBAIC0yMjksNiArMjQ3LDEwIEBACiBweXRob25jbGVhbjoKIAlAKGRpcj1gcHdkYDsgY2QgcHl0aG9uOyAkKFBZTUFLRSkgY2xlYW4gLS1iYXNlZGlyPSQkZGlyKQogCitweXRob25mZWF0dXJlczogJChQWVRIT05NT0RVTEVGVFMpCisKK3B5dGhvbmNsZWFuZmVhdHVyZXM6CisJJChSTSkgJChQWVRIT05NT0RVTEVGVFMpCiAKICMKICMgbWFrZSBkaXN0Y2xlYW4gY29tcGxldGVseSByZW1vdmVzIGFsbCB0cmFjZXMgb2YgYnVpbGRpbmcgaW5jbHVkaW5nCkBAIC0yNDcsMTIgKzI2OSwxNSBAQAogY29uZmlnY2xlYW46IG1ha2VmaWxlY2xlYW4KIAlybSAtZiBjb25maWcuY2FjaGUgY29uZmlnLnN0YXR1cyBjb25maWcubG9nIFwKIAkJbGlidG9vbCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIFwKLQkJbmV0LXNubXAtY29uZmlnIG5ldC1zbm1wLWNvbmZpZy14IGNvbmZpZ3VyZS1zdW1tYXJ5CisJCW5ldC1zbm1wLWNvbmZpZyBuZXQtc25tcC1jb25maWcteCBjb25maWd1cmUtc3VtbWFyeSBcCisJCW5ldC1zbm1wLWNyZWF0ZS12My11c2VyIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLXgKIAlybSAtZiBtaWJzLy5pbmRleAogCXJtIC1mIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAkJXAogCQlpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAkJXAogCQlpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggXAotCQlzbm1wbGliL3NubXBzbV9pbml0LmggICAgICAgICAgICAgICAgICAgXAorCQlpbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oICAgICAgICAgICAgICAgICAgXAorCQlzbm1wbGliL3NubXBzbV9pbml0Lmggc25tcGxpYi9zbm1wc21fc2h1dGRvd24uaCAgICAgXAorICAgICAgICAgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oICAgICAgICAgICBcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbml0cy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9zaHV0ZG93bi5oIAlcCkBAIC0yNjAsNyArMjg1LDggQEAKIAkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbmNsdWRlcy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5pdHMuaCAJXAogCQlhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX3NodXRkb3duLmggCVwKLQkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9kb3RfY29uZi5oCisJCWFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfZG90X2NvbmYuaCAgICBcCisJCWxvY2FsL3NubXBjb25mCiAJcm0gLXJmIG1rCiAJcm0gLWYgKi5jb3JlCiAKQEAgLTI4MSw4ICszMDcsMjggQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgY29uZmlnLnN0YXR1cyI7IFwKIAlmaQogCitjb25maWd1cmVfYWMgPSBjb25maWd1cmUuYWMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50IFwKKwljb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbGliczEgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMyBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0IFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24gXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZQorCiAkKHNyY2RpcikvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogc3RhbXAtaC5pbgotJChzcmNkaXIpL3N0YW1wLWguaW46IGNvbmZpZ3VyZS5pbiBhY2NvbmZpZy5oCiskKHNyY2Rpcikvc3RhbXAtaC5pbjogJChjb25maWd1cmVfYWMpIGFjY29uZmlnLmgKIAlAaWYgdGVzdCAieCQoTk9BVVRPREVQUykiID0gIngiIC1hICJ4JChBVVRPSEVBREVSKSIgIT0gIng6IjsgdGhlbiBcCiAJICAgIGNkICR7c3JjZGlyfSAmJiBMQ19DT0xMQVRFPUMgJChBVVRPSEVBREVSKTsgXAogCSAgICBlY2hvIHRpbWVzdGFtcCA+ICR7c3JjZGlyfS9zdGFtcC1oLmluOyBcCkBAIC0zMDEsNyArMzQ3LDcgQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgY29uZmlnLnN0YXR1cyI7IFwKIAlmaQogCi0kKHNyY2RpcikvY29uZmlndXJlOiBjb25maWd1cmUuaW4gYWNsb2NhbC5tNAorJChzcmNkaXIpL2NvbmZpZ3VyZTogJChjb25maWd1cmVfYWMpIGFjbG9jYWwubTQKIAlAaWYgdGVzdCAieCQoTk9BVVRPREVQUykiID0gIngiIC1hICJ4JChBVVRPQ09ORikiICE9ICJ4OiI7IHRoZW4gXAogCSAgICBjZCAke3NyY2Rpcn0gJiYgJChBVVRPQ09ORik7IFwKIAkgICAgZWNobyAiUGxlYXNlIHJ1biBjb25maWd1cmUgbm93LiI7IFwKQEAgLTMxMCw2ICszNTYsMzAgQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgYXV0b2NvbmYiOyBcCiAJZmkKIAorZ2VuZGlyPWRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzCitnZW5lcmF0aW9uLXNjcmlwdHM6IGdlbmVyYXRpb24tc2NyaXB0cy1kaXJzICQoZ2VuZGlyKS9nZW4tdHJhbnNwb3J0LWhlYWRlcnMgJChnZW5kaXIpL2dlbi1zZWN1cml0eS1oZWFkZXJzCisKKyQoZ2VuZGlyKS9nZW4tdmFyaWFibGVzOiAkKGdlbmRpcikvZ2VuLXZhcmlhYmxlcy5pbgorCS4vY29uZmlnLnN0YXR1cworCitnZW5lcmF0aW9uLXNjcmlwdHMtZGlyczoKKwlAaWYgWyAhIC1kIGRpc3QgXSA7IHRoZW4gXAorCSAgICBta2RpciBkaXN0IDsgICAgICAgIFwKKwlmaQorCUBpZiBbICEgLWQgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMgXSA7IHRoZW4gXAorCSAgICBta2RpciBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cyA7ICAgICAgICBcCisJZmkKKworJChnZW5kaXIpL2dlbi10cmFuc3BvcnQtaGVhZGVyczogJChnZW5kaXIpL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiAkKGdlbmRpcikvZ2VuLXZhcmlhYmxlcworCXJtIC1mICRACisJYXV0b2NvbmYgLW8gJEAgJDwKKwljaG1vZCBhK3ggJEAKKworJChnZW5kaXIpL2dlbi1zZWN1cml0eS1oZWFkZXJzOiAkKGdlbmRpcikvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4gJChnZW5kaXIpL2dlbi12YXJpYWJsZXMKKwlybSAtZiAkQAorCWF1dG9jb25mIC1vICRAICQ8CisJY2htb2QgYSt4ICRACisKIGNvbmZpZy5zdGF0dXM6IGNvbmZpZ3VyZQogCUBpZiB0ZXN0ICJ4JChOT0FVVE9ERVBTKSIgPSAieCI7IHRoZW4gXAogCSAgICBlY2hvICJydW5uaW5nIGNvbmZpZy5zdGF0dXMgYmVjYXVzZSAkPyBjaGFuZ2VkIjsgXApAQCAtMzQ3LDI1ICs0MTcsMzUgQEAKIAlmaQogCiBjaGVja3M6Ci0JJChNQUtFKSAtayBtYWtlZmlsZWNoZWNrIGNvbW1lbnRjaGVjayB3YXJuaW5nY2hlY2sgZGVwZW5kY2hlY2sKKwkkKE1BS0UpIC1rIG1ha2VmaWxlY2hlY2sgY29tbWVudGNoZWNrIHdhcm5pbmdjaGVjayBkZXBlbmRjaGVjayBcCisJYXNzZXJ0Y2hlY2sgcGVybGNhbGxvY2NoZWNrCiAKIGRlcGVuZGNoZWNrOgogCUBlY2hvICJDaGVja2luZyBmb3IgZnVsbCBwYXRocyBpbiBkZXBlbmRlbmN5IGZpbGVzLi4uIgotCUBncmVwIC1uIC1FICJeLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgICYmIGV4aXQgMQorCUBpZiBncmVwIC1uIC1FICJeLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgOyB0aGVuIGZhbHNlOyBmaQogCiB3YXJuaW5nY2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBjcHAgd2FybmluZ3MuLi4iCi0JQGdyZXAgLW4gLUUgIiN3YXJuaW5nIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXWAgJiYgZXhpdCAxCisJQGlmIGdyZXAgLW4gIiN3YXJuaW5nIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXWA7IHRoZW4gZmFsc2U7IGZpCisKK2Fzc2VydGNoZWNrOgorCUBlY2hvICJDaGVja2luZyBmb3Igbm9uLXNubXAgYXNzZXJ0cy4uLiIKKwlAaWYgZ3JlcCAtbiAtdyAiYXNzZXJ0IiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXSB8IGdyZXAgLXYgc25tcF9hc3NlcnQuaCB8IGVncmVwIC12ICdwZXJsLy4qYycgfCBncmVwIC12IG9wZW5zc2xgOyB0aGVuIGZhbHNlOyBmaQogCiBjb21tZW50Y2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBDKysgc3R5bGUgY29tbWVudHMuLi4iCi0JQGdyZXAgLW4gLUUgIihbXjopbl18XikvLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtcGF0aCAnLi93aW4zMicgLXBydW5lIC1vIC1uYW1lIFwqLlxbY2hcXSB8IGdyZXAgLXYgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmNgICYmIGV4aXQgMQorCUBpZiBncmVwIC1uIC1FICIoW146KW5dfF4pLy8iIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLXBhdGggJy4vd2luMzInIC1wcnVuZSAtbyAtbmFtZSBcKi5cW2NoXF0gfCBncmVwIC12IGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jYDsgdGhlbiBmYWxzZTsgZmkKIAotIyBhbHdheXMgZXhpdCAxLCBzaW5jZSBJIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIGludmVydCBncmVwIHJjCiBtYWtlZmlsZWNoZWNrOgogCUBlY2hvICJDaGVja2luZyBmb3Igbm9uLXBvcnRhYmxlIE1ha2VmaWxlIGNvbnN0cnVjdHMuLi4iCi0JQGdyZXAgLW4gIlwuYz0iIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLW5hbWUgIk1ha2VmaWxlLioiYAotCUBleGl0IDEKKwlAaWYgZ3JlcCAtbiAiXC5jPSIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSAuc3ZuIC1wcnVuZSAtbyAtcGF0aCAuL01ha2VmaWxlLmluIC1wcnVuZSAtbyAtbmFtZSAiTWFrZWZpbGUuKiIgLXByaW50YDsgdGhlbiBmYWxzZTsgZmkKKworIyBJbnZva2luZyBjYWxsb2MoKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGZyb20gYSBQZXJsIFhTVUIgYW5kIGZyZWVpbmcgdGhhdAorIyBtZW1vcnkgYnkgY2FsbGluZyBmcmVlKCkgZnJvbSB0aGUgWFNVQiBpcyBhIHN1cmUgd2F5IHRvIHRyaWdnZXIgIkZyZWUgdG8KKyMgd3JvbmcgcG9vbCIgZXJyb3JzIG9uIFdpbmRvd3MuCitwZXJsY2FsbG9jY2hlY2s6CisJQGVjaG8gIkNoZWNraW5nIGZvciBjYWxsb2MoKSBpbiBQZXJsJ3MgZXh0ZXJuYWwgc3Vicm91dGluZXMgLi4uIgorCUBpZiBncmVwIC1ud0UgJ2NhbGxvY3xTTk1QX01BTExPQ19TVFJVQ1R8U05NUF9NQUxMT0NfVFlQRURFRicgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSAnKi54cydgOyB0aGVuIGZhbHNlOyBmaQogCiBkaXN0OiB0YXIKIApAQCAtMzc4LDMgKzQ1OCw0IEBACiAJc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIFwKIAlzbm1wZGVsdGEgc25tcHRhYmxlIHNubXB0ZXN0IHNubXBzZXQgc25tcHVzbSBzbm1wdmFjbSBzbm1wZ2V0bmV4dCBcCiAJZW5jb2RlX2tleWNoYW5nZSBzbm1wZGYgc25tcHRyYXAgc25tcHRyYXBkCisuUEhPTlk6IHBlcmxmZWF0dXJlcyBweXRob25mZWF0dXJlcwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucnVsZXMgYi9NYWtlZmlsZS5ydWxlcwppbmRleCA2NTY4N2VmLi45ZTllOTAwIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5ydWxlcworKysgYi9NYWtlZmlsZS5ydWxlcwpAQCAtMTQsNiArMTQsNjIgQEAKIAogb2JqczogJHtPQkpTfSAke0xPQkpTfQogCisjIGZlYXR1cmVzIHJlcXVpcmUgdGhhdCBzdWJkaXJzIGJlIG1hZGUgKmZpcnN0KiB0byBnZXQgZGVwZW5kZW5jeQorIyBjb2xsZWN0aW9uIHByb2Nlc3NlZCBpbiB0aGUgcmlnaHQgb3JkZXIKKy5QSE9OWTogZmVhdHVyZXMgZnRvYmpzIGZ0c3ViZGlycworZmVhdHVyZXM6ICQoRlRPVEhFUlRBUkdTKSBmdHN1YmRpcnMgZnRvYmpzICQoRkVBVFVSRUZJTEUpCitmdG9ianM6ICQoRlRPQkpTKQorJChGRUFUVVJFRklMRSk6ICQoRlRPQkpTKSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorCWNhdCAkKEZUT0JKUykgPiAkKEZFQVRVUkVGSUxFKS5pbgorCSQoRkVBVFVSRVBST0NFU1MpICQoRkVBVFVSRUZJTEUpICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oIEBGRUFUVVJFX1JFTU9WRV9GTEFHU0AgQEZFQVRVUkVfQUREX0ZMQUdTQAorZnRzdWJkaXJzOgorCUBpZiB0ZXN0ICIkKEZUU1VCRElSUykiICE9ICIiOyB0aGVuIFwKKwkgICAgU1VCRElSUz0iJChGVFNVQkRJUlMpIiA7ICAgICAgICBcCisgICAgICAgIGVsc2UgCQkJIAkgICAgXAorICAgICAgICAgICAgU1VCRElSUz0iJChTVUJESVJTKSIgOyAgICAgICAgICBcCisgICAgICAgIGZpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiB0ZXN0ICIkJFNVQkRJUlMiICE9ICIiOyB0aGVuIFwKKwkJaXQ9IiQkU1VCRElSUyIgOyBcCisJCWZvciBpIGluICQkaXQgOyBkbyBcCisJCQllY2hvICJtYWtpbmcgZmVhdHVyZXMgaW4gYHB3ZGAvJCRpIjsgXAorCQkJKCBjZCAkJGkgOyAkKE1BS0UpIGZlYXR1cmVzICkgOyBcCisJCQlpZiB0ZXN0ICQkPyAhPSAwIDsgdGhlbiBcCisJCQkJZXhpdCAxIDsgXAorCQkJZmkgIFwKKwkJZG9uZSBcCisJZmkKKworLlBIT05ZOiBjbGVhbmZlYXR1cmVzIGNsZWFuZmVhdHVyZXNzdWJkaXJzCitjbGVhbmZlYXR1cmVzOiBjbGVhbmZlYXR1cmVzc3ViZGlycworCSAgICAgICBybSAtZiAkKEZUT0JKUykKKwkgICAgICAgcm0gLWYgJChGRUFUVVJFRklMRSkKKwkgICAgICAgcm0gLWYgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKworY2xlYW5mZWF0dXJlc3N1YmRpcnM6CisJQGlmIHRlc3QgIiQoRlRTVUJESVJTKSIgIT0gIiI7IHRoZW4gXAorCSAgICBTVUJESVJTPSIkKEZUU1VCRElSUykiIDsgICAgICAgIFwKKyAgICAgICAgZWxzZSAJCQkgCSAgICBcCisgICAgICAgICAgICBTVUJESVJTPSIkKFNVQkRJUlMpIiA7ICAgICAgICAgIFwKKyAgICAgICAgZmkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIHRlc3QgIiQkU1VCRElSUyIgIT0gIiI7IHRoZW4gXAorCQlpdD0iJCRTVUJESVJTIiA7IFwKKwkJZm9yIGkgaW4gJCRpdCA7IGRvIFwKKwkJCWVjaG8gIm1ha2luZyBjbGVhbmZlYXR1cmVzIGluIGBwd2RgLyQkaSI7IFwKKwkJCSggY2QgJCRpIDsgJChNQUtFKSBjbGVhbmZlYXR1cmVzICkgOyBcCisJCQlpZiB0ZXN0ICQkPyAhPSAwIDsgdGhlbiBcCisJCQkJZXhpdCAxIDsgXAorCQkJZmkgIFwKKwkJZG9uZSBcCisJZmkKKworIyBmZWF0dXJlLWNoZWNrIGRlZmluaXRpb25zCisuU1VGRklYRVM6IC5mdAorLmMuZnQ6CisJQHRlc3QgLWYgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggfHwgXAorCSAgICBlY2hvICIvKiBHZW5lcmF0ZWQgYnkgbWFrZS4gRG8gbm90IG1vZGlmeSBkaXJlY3RseSAqLyIgXAorCQk+ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisJJChGRUFUVVJFQ0hFQ0spIC0tZmVhdHVyZS1nbG9iYWwgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggJChteXN1YmRpcikgJDwgJEAgJChDQykgLUUgJChDUFBGTEFHUykgJChDRkxBR1MpIC1jCisKIHN1YmRpcnM6CiAJQGlmIHRlc3QgIiQoU1VCRElSUykiICE9ICIiOyB0aGVuIFwKIAkJaXQ9IiQoU1VCRElSUykiIDsgXApAQCAtNDIsNiArOTgsNyBAQAogIyBoZWFkZXJzCiAjCiAjIHNldCBJTlNUQUxMSEVBREVSUyB0byBhIGxpc3Qgb2YgdGhpbmdzIHRvIGluc3RhbGwgaW4gZWFjaCBtYWtlZmlsZS4KKyMgc2V0IElOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTIGEgbGlzdCBidWlsdCBhbmQgcGxhY2VkIGludG8gaW5jbHVkZS9uZXQtc25tcC8KICMgc2V0IElOU1RBTExCVUlMVEhFQURFUlMgdG8gYSBsaXN0IG9mIHRoaW5ncyB0byBpbnN0YWxsIGZyb20gYnVpbGRkaXIKICMgc2V0IElOU1RBTExTVUJESVJIRUFERVJTIGFuZCBJTlNUQUxMU1VCRElSIHRvIHN1YmRpcmVjdG9yeSBoZWFkZXJzCiAjIHNldCBJTlNUQUxMU1VCRElSSEVBREVSUzIgYW5kIElOU1RBTExTVUJESVIyIHRvIG1vcmUgc3ViZGlyZWN0b3J5IGhlYWRlcnMKQEAgLTUwLDYgKzEwNywxNiBAQAogaW5zdGFsbGhlYWRlcnM6IGluc3RhbGxsb2NhbGhlYWRlcnMgQGluc3RhbGx1Y2RoZWFkZXJzQCBpbnN0YWxsc3ViZGlyaGVhZGVycwogCiBpbnN0YWxsbG9jYWxoZWFkZXJzOgorCUBpZiB0ZXN0ICIkKElOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTKSIgIT0gIiIgOyB0aGVuIFwKKwkJZWNobyBjcmVhdGluZyBkaXJlY3RvcnkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpIDsgXAorCQlpdD0iJChJTlNUQUxMQlVJTFRJTkNMVURFSEVBREVSUykiIDsgXAorCQkkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpL2xpYnJhcnkgOyBcCisJCSQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCisJCWZvciBpIGluICQkaXQgOyBkbyBcCisJCQkkKElOU1RBTExfREFUQSkgaW5jbHVkZS9uZXQtc25tcC8kJGkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpLyQkaSA7IFwKKwkJCWVjaG8gImluc3RhbGxpbmcgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS8kJGkiIDsgXAorCQlkb25lIFwKKwlmaQogCUBpZiB0ZXN0ICIkKElOU1RBTExIRUFERVJTKSIgIT0gIiIgOyB0aGVuIFwKIAkJZWNobyBjcmVhdGluZyBkaXJlY3RvcnkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpIDsgXAogCQlpdD0iJChJTlNUQUxMSEVBREVSUykiIDsgXApAQCAtMzI3LDcgKzM5NCw3IEBACiAjIGNsZWFuaW5nIHRhcmdldHMKICMKIGNsZWFuOiBjbGVhbnN1YmRpcnMgJChPVEhFUkNMRUFOVE9ET1MpCi0JJChMSUJUT09MQ0xFQU4pICR7T0JKU30gJHtMT0JKU30gY29yZSAkKFNUQU5EQVJEQ0xFQU5UQVJHRVRTKSAkKE9USEVSQ0xFQU5UQVJHRVRTKQorCSQoTElCVE9PTENMRUFOKSAke09CSlN9ICR7TE9CSlN9ICAke0ZUT0JKU30gY29yZSAkKFNUQU5EQVJEQ0xFQU5UQVJHRVRTKSAkKE9USEVSQ0xFQU5UQVJHRVRTKQogCiBjbGVhbnN1YmRpcnM6CiAJQGlmIHRlc3QgIiQoU1VCRElSUykiICE9ICIiOyB0aGVuIFwKQEAgLTQwNCw1ICs0NzEsNSBAQAogLlBIT05ZOiBjbGVhbiBjbGVhbnN1YmRpcnMgbGludCBcCiAJaW5zdGFsbCBpbnN0YWxscHJvZ3MgaW5zdGFsbGhlYWRlcnMgaW5zdGFsbGxpYnMgXAogCWluc3RhbGxiaW4gaW5zdGFsbHNiaW4gaW5zdGFsbHN1YmRpcnMgXAotCWFsbCBzdWJkaXJzIHN0YW5kYXJkYWxsIG9ianMgXAorCWFsbCBzdWJkaXJzIHN0YW5kYXJkYWxsIG9ianMgZmVhdHVyZXMgXAogCWRlcGVuZCBub3N5c2RlcGVuZCBkaXN0ZGVwZW5kIGRlcGVuZGRpcnMgbm9zeXNkZXBlbmRkaXJzIGRpc3RkZXBlbmRkaXJzCmRpZmYgLS1naXQgYS9NYWtlZmlsZS50b3AgYi9NYWtlZmlsZS50b3AKaW5kZXggYzRjNDRlZS4uNTAzZjYxZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudG9wCisrKyBiL01ha2VmaWxlLnRvcApAQCAtMSw3ICsxLDcgQEAKICMKICMgTWluaW11bSBlbnZpcm9ubWVudCBhbmQgdmlydHVhbCBwYXRoIHNldHVwCiAjCi1TSEVMTAkJPSAvYmluL3NoCitTSEVMTAkJPSBAU0hFTExACiBzcmNkaXIJCT0gQHNyY2RpckAKIHRvcF9zcmNkaXIJPSBAdG9wX3NyY2RpckAKIFZFUlNJT04JCT0gQFZFUlNJT05ACkBAIC0xNSw2ICsxNSw3IEBACiBiaW5kaXIJCT0gQGJpbmRpckAKIHNiaW5kaXIJCT0gQHNiaW5kaXJACiBsaWJkaXIJCT0gQGxpYmRpckAKK2RhdGFyb290ZGlyCT0gQGRhdGFyb290ZGlyQAogZGF0YWRpcgkJPSBAZGF0YWRpckAKIGluY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAvbmV0LXNubXAKIHVjZGluY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAvdWNkLXNubXAKQEAgLTM1LDYgKzM2LDggQEAKIElOU1RBTEwJCT0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBASU5TVEFMTEAKIFVOSU5TVEFMTAk9ICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZgogTElCVE9PTENMRUFOCT0gJChMSUJUT09MKSAtLW1vZGU9Y2xlYW4gcm0gLWYKK0ZFQVRVUkVDSEVDSwk9ICQodG9wX3NyY2RpcikvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrCitGRUFUVVJFUFJPQ0VTUwk9ICQodG9wX3NyY2RpcikvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZQogSU5TVEFMTF9EQVRBICAgID0gQElOU1RBTExfREFUQUAKIFNFRAkJPSBAU0VEQAogTE5fUwkJPSBATE5fU0AKQEAgLTQzLDYgKzQ2LDcgQEAKIFBFUkwgICAgICAgICAgICA9IEBQRVJMUFJPR0AKIFBZVEhPTiAgICAgICAgICA9IEBQWVRIT05QUk9HQAogRklORCAgICAgICAgICAgID0gQEZJTkRACitFR1JFUCAgICAgICAgICAgPSBARUdSRVBACiAKICMKICMgQ29tcGlsZXIgYXJndW1lbnRzCkBAIC02MSw3ICs2NSw3IEBACiAjIFRoZSAoc2xpZ2h0bHkgY2xhcmlmaWVkKSBydWxlczoKICMKICMgLSBJZiBhbnkgaW50ZXJmYWNlcy9zdHJ1Y3R1cmVzIGhhdmUgYmVlbiByZW1vdmVkIG9yIGNoYW5nZWQgc2luY2UgdGhlCi0jICAgbGFzdCB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IGFnZSBhbmQgcmV2aXNpb24gdG8gMC4gU3RvcC4KKyMgICBsYXN0IHVwZGF0ZSwgaW5jcmVtZW50IGN1cnJlbnQgKCs1KSwgYW5kIHNldCBhZ2UgYW5kIHJldmlzaW9uIHRvIDAuIFN0b3AuCiAjCiAjIC0gSWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCiAjICAgaW5jcmVtZW50IGN1cnJlbnQgYW5kIGFnZSwgYW5kIHNldCByZXZpc2lvbiB0byAwLiBTdG9wLgpAQCAtNzUsMTUgKzc5LDE1IEBACiAjIHBvbGljeTogd2UgaW5jcmVtZW50IG1ham9yIHJlbGVhc2VzIG9mIExJQkNVUlJFTlQgYnkgNSBzdGFydGluZyBhdAogIyA1LjMgd2FzIGF0IDEwLCA1LjQgaXMgYXQgMTUsIC4uLiAgVGhpcyBsZWF2ZXMgc29tZSByb29tIGZvciBuZWVkZWQKICMgY2hhbmdlcyBmb3IgcGFzdCByZWxlYXNlcyBpZiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KLSMgCi1MSUJDVVJSRU5UICA9IDE2Ci1MSUJBR0UgICAgICA9IDEKKyMKK0xJQkNVUlJFTlQgID0gMzAKK0xJQkFHRSAgICAgID0gMAogTElCUkVWSVNJT04gPSAzCiAKIExJQl9MRF9DTUQgICAgICA9ICQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChMSU5LQ0MpICQoQ0ZMQUdTKSAtcnBhdGggJChsaWJkaXIpIC12ZXJzaW9uLWluZm8gJChMSUJDVVJSRU5UKTokKExJQlJFVklTSU9OKTokKExJQkFHRSkgLW8KIExJQl9FWFRFTlNJT04gICA9IGxhCiBMSUJfVkVSU0lPTiAgICAgPQotTElCX0xEQ09ORklHX0NNRCA9ICQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKGxpYmRpcikKK0xJQl9MRENPTkZJR19DTUQgPSAkKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChJTlNUQUxMX1BSRUZJWCkkKGxpYmRpcikKIExJTksJCT0gJChMSUJUT09MKSAtLW1vZGU9bGluayAkKExJTktDQykKICMgUkFOTElCIAk9IEBSQU5MSUJACiBSQU5MSUIJCT0gOgpAQCAtMTEzLDUgKzExNyw1IEBACiBTTk1QTElCX0lOQ0xVREVTICAgICAgICA9ICQoQFNOTVBMSUJfSU5DTFVERVNAKQogQUdFTlRfSU5DTFVERVMgICAgICAgICAgPSAkKEBBR0VOVF9JTkNMVURFU0ApCiBIRUxQRVJfSU5DTFVERVMgICAgICAgICA9ICQoQEhFTFBFUl9JTkNMVURFU0ApCi1NSUJHUk9VUF9JTkNMVURFUyAgICAgICA9ICQoQE1JQkdST1VQX0lOQ0xVREVTQCkKK01JQkdST1VQX0lOQ0xVREVTICAgICAgID0gJChATUlCR1JPVVBfSU5DTFVERVNAKSBARVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVNACiAKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDM4YjYyY2YuLjkzOTZhZWUgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMywxMDYgKzMsMzM0IEBACiB0aGF0IGhhdmUgYmVlbiBmaXhlZC9hcHBsaWVkLCBhbmQgdGhlIENoYW5nZUxvZyBmaWxlIGZvciBhIGNvbXByZWhlbnNpdmUKIGxpc3Rpbmcgb2YgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgY29kZS4KIAotKjUuNC40KgorKjUuNy4zKgorICAgIE1hbnkgbWFueSBidWcgZml4ZXMgYW5kIG1pbm9yIGltcHJvdmVtZW50cwogCi0gICAgc25tcGxpYjoKLSAgICAgIC0gW0JVRyAzMTcxODc4XTogVXNpbmcgU05NUHYzIGNvbnRleHQgZG9lcyBub3Qgd29yawotCi0gICAgc25tcGQ6Ci0gICAgICAtIFZhcmlvdXMgNjQtYml0IGZpeGVzCi0KLSAgICBGcmVlQlNELE5ldEJTRCxPcGVuQlNEOgotICAgICAgICBJbmNvcnBvcmF0ZSBmaXhlcyBmcm9tIHRoZXNlIE8vUyBwYXRjaCBhcmNoaXZlcwotCi0KLSo1LjQuMyoKLQotICAgIHNubXBkOgotICAgICAgLSBDaGFuZ2UgZGVmYXVsdCBBZ2VudFggdGFyZ2V0IGZyb20gMC4wLjAuMDo3MDUgdG8gbG9jYWxob3N0OjcwNQotICAgICAgLSBGaXggQ1ZFLTIwMDgtNDMwOSAoR0VUQlVMSyBpc3N1ZSByZXBvcnRlZCBieSBPc2NhciBNaXJhLVNhbmNoZXopCi0gICAgICAtIEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMKLSAgICAgICAgKFVzZSB0aGUgImJlc3QiIG1hdGNoLCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lKS4KLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mCi0gICAgICAgICAgICBleGlzdGluZyBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9ucy4KLSAgICAgIC0gTGF0Y2ggbGFyZ2UtZGlzayBzdGF0aXN0aWNzIGF0IDJUYiAocmF0aGVyIHRoYW4gd3JhcHBpbmcpCi0KLSAgICBMaW51eDoKLSAgICAgIC0gRml4IGJ1aWxkIG9uIG1vZGVybiBkaXN0cmlidXRpb25zICh1c2luZyBycG0tNC42KQotCi0gICAgV2luZG93czoKLSAgICAgIC0gRml4IHZhcmlvdXMgYnVpbGRzIChyZWNlbnQgTVNWQywgTWluR1csIElQdjYsIHdpbkV4dERMTCkKLQotCi0qNS40LjIqCi0KLSAgICBzbm1wbGliOgotICAgICAgLSBbUEFUQ0ggMTkyMTg2MV06IEF2b2lkIGVuZGxlc3MgbG9vcCBhZnRlciB0cnVuY2F0aW5nIDY0Yml0IGludAotICAgICAgLSBCZXR0ZXIgaGFuZGxpbmcgb2YgQ09OVEFJTkVSX0lOU0VSVCBmYWlsdXJlcyB3aXRoIG11bHRpcGxlIGluZGljZXMKLQotICAgIHNubXBkOgotICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXggb25seSkKLSAgICAgIC0gc3VwcHJlc3MgYW5ub3lpbmcgInJlZ2lzdHJhdGlvbiAhPSBkdXBsaWNhdGUiIHdhcm5pbmcgZm9yIHJvb3Qgb2lkcwotCi0gICAgYnVpbGQ6Ci0gICAgICAtIFtCVUcgMjAyMzgwM106IENvbXBpbGF0aW9uIHByb2JsZW1zIG9uIEhQLVVYIDExLjMxCi0gICAgICAtIFVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNgotCi0gICAgQUlYOgotICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueC4KLQotCi0qNS40LjEqCi0KLSAgICBzbm1wbGliOgotICAgICAgLSBbQlVHIDE2MTk4MjddOiBsaW5rIGxpYnJhcmllcyBhZ2FpbnN0IG5lZWRlZCBleHRlcm5hbCBsaWJyYXJpZXMKLSAgICAgIC0gW1BBVENIIDE2MTY5MTJdOiBmaXggbWVtb3J5IGxlYWsgaW4gVURQIHRyYW5zcG9ydCBjb2RlCi0gICAgICAtIFtQQVRDSCAxNTkyNzA2XTogZml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZyB2YXJiaW5kcwotICAgICAgLSBDaGFuZ2Ugc25tcF9zZXNzX2FkZF9leCB0byBjb25zaXN0ZW50bHkgY2xvc2UgYW5kIGRlbGV0ZSB0aGUKLSAgICAgICAgdHJhbnNwb3J0IGFyZ3VtZW50IG9uIGZhaWx1cmUsIGVhcmxpZXIgdGhlIGxpdmVuZXNzIG9mIHRoZQotICAgICAgICB0cmFuc3BvcnQgYXJndW1lbnQgd2FzIHVuZGVjaWRlZC4KLQotICAgIHNubXBkOgotICAgICAgLSBbQlVHIDE1NTg4MjNdOiBmaXggaXBBZGRyZXNzVGFibGUgbWVtb3J5IGxlYWsKLSAgICAgIC0gW0JVRyAxNTk2NjM4XTogZml4IG1lbW9yeSBsZWFrIGluIGlwQ2lkclJvdXRlVGFibGUsIGluZXRDaWRyUm91dGVUYWJsZQotICAgICAgLSBbQlVHIDE2MTE1MjRdOiBmaXggdGNwIGNvbm5lY3Rpb24gdGFibGUgZmlsZSBkZXNjcmlwdG9yIGxlYWsKLSAgICAgIC0gaGFuZGxlIHJvdyBkZWxldGlvbiBpc3N1ZXMgaW4gZGF0YXNldCB0YWJsZXMKLSAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0gbnVtYmVyIG9mCi0gICAgICAgIHZhcmJpbmRzIHJldHVybmFibGUgdG8gYSBHRVRCVUxLIHJlcXVlc3QuCi0gICAgICAtIFtQQVRDSCAxNjY2NzM3XTogaW5jbHVkZSBpcHY2IGNvdW50cyBpbgotCXVkcEluRGF0YWdyYW1zLCB1ZHBOb1BvcnRzLCB1ZHBJbkVycm9ycywgdWRwT3V0RGF0YWdyYW1zCi0gICAgICAtIFtQQVRDSCAxNzAwMTU3XTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYyB0b2tlbnMgaW4gdGhlIHJlc3VsdGluZyBtaWIgdHJlZQotICAgICAgLSBbUEFUQ0ggMTcxOTI1M106IGZpeCBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIHNvIGl0IGRvZXMgbm90IGJyZWFrIG9uIHRoZQotCXNlY29uZCB3YWxrIG9mIHRoZSB0YWJsZS4KKyAgICBzbm1wZCwgc25tcHRyYXBkIGFuZCBhcHBzOgorICAgICAgLSBQYXRjaCAyNTI1OiBmcm9tIFJ5YW4gU3RlaW5tZXR6OiBGaXggYXJndW1lbnQgbGVuZ3RoIHBhcnNpbmcgb2YgdGhlCisJaG9zdCByZXNvdXJjZXMgbWliCisgICAgICAtIE1ha2UgRU5WX1NFUEFSQVRPUl9DSEFSIGNvbmZpZ3VyYWJsZQorICAgICAgLSBTRUNVUklUWTogYSBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2sgdmVjdG9yIHdhcyBkaXNjb3ZlcmVkIG9uCisgICAgICAgIHRoZSBsaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSUNNUC1NSUIuICBUaGlzIHJlbGVhc2UgZml4ZXMKKyAgICAgICAgdGhpcyBidWcgYW5kIGFsbCB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1cGRhdGUgdGhlaXIgU05NUAorICAgICAgICBhZ2VudCBpZiB0aGV5IG1ha2UgdXNlIG9mIHRoZSBJQ01QLU1JQiB0YWJsZSBvYmplY3RzLgogCiAgICAgcGVybDoKLSAgICAgIC0gbGluayBQZXJsIG1vZHVsZXMgYWdhaW5zdCB0aGUgZXhhY3Qgc2V0IG9mIGxpYnJhcmllcyBuZWVkZWQKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogcHJvcGVybHkgbGluayBhZ2FpbnN0IGxpYnBlcmwgd2hlbiBjb25maWd1cmVkIHdpdGgKLQktLWVuYWJsZS1hcy1uZWVkZWQKLSAgICAgIC0gW1BBVENIIDE3MjUwNDldOiBmaXggYnVsa3dhbGsgaW4gY2FzZXMgb2Ygbm9uLXJlcGVhdGVyCisgICAgICAtIEJVRzogMjQwMjogQWRkIHN1cHBvcnQgZm9yIFNOTVB2MyB0cmFwcwogCi0gICAgYnVpbGQ6Ci0gICAgICAtIHVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNCAoZnJvbSAxLjUuMjIpCisgICAgV2luZG93czoKKyAgICAgIC0gUG9ydCBiYXRjaCBidWlsZCBpbmZyYXN0cnVjdHVyZSB0byBWaXN1YWwgU3R1ZGlvIDIwMTAgYW5kIGxhdGVyCisJRnJvbSBWaXN1YWwgU3R1ZGlvIDIwMTAgb24gaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNwZWNpZnkKKwlpbmNsdWRlIG9yIGxpYnJhcnkgZGlyZWN0b3JpZXMgZ2xvYmFsbHkgLSB0aGVzZSBoYXZlIHRvIGJlCisJc3BlY2lmaWVkIHBlciBwcm9qZWN0LiBIZW5jZSB0d28gYWRkaXRpb25hbCBtZW51IGVudHJpZXMgaW4KKwlidWlsZC5iYXQgdGhhdCBhbGxvdyB0byBzcGVjaWZ5IHRoZXNlIGRpcmVjdG9yaWVzLgorCisqNS43LjIqCisgICAgc25tcDoKKyAgICAgIC0gQlVHOiAzNTI2NTQ5OiBDVkUtMjAxMi0yMTQxIEFycmF5IGluZGV4IGVycm9yIGxlYWRpbmcgdG8gY3Jhc2gKKworICAgIHNubXBkOgorICAgICAgLSBCVUc6IDM1MzIwOTA6IEZpeCBoaWdoIGlmSW5kZXggdmFsdWVzIGNyYXNoaW5nIGhyRGV2aWNlRGVzY3IKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBQQVRDSDogMjA5MTE1NjogY29ycmVjdGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIGluIE1ha2VmaWxlLiAnbWFrZQorICAgICAgICAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4gQmFja3BvcnQgdGhpcyB0byBWNS00IGFzIGl0IGlzIG5lZWRlZCBmb3IKKyAgICAgICAgY29ycmVjdCBvcGVyYXRpb24gaW4gdGhlIHNpbmdsZSB0aHJlYWRlZCBjYXNlIG9mIG1ha2UgbWlibGliIGFzCisgICAgICAgIHdlbGwuCisKKyAgICBNYW55IG90aGVyIG1pc2NlbGxhbmVvdXMgbWlub3IgYnVnIGZpeGVzCisKKyo1LjcuMSoKKworICBsaWJuZXRzbm1wOgorICAgICAgLSBGaXhlZCB0aGUgbWliLXBhcnNpbmctYnVnIGludHJvZHVjZWQgc2hvcnRseSBiZWZvcmUgNS43CisKKyAgYWdlbnQ6CisgICAgICAtIGZpeGVkIHJvdW5kaW5nIGVycm9ycyBmb3IgZGlzayBwZXJjZW50YWdlIGNhbGN1bGF0aW9ucworCisgIG9wZW5ic2Q6CisgICAgICAtIGJldHRlciBzdXBwb3J0IGZvciByZWNlbnQgb3BlbmJzZCByZWxlYXNlcworCisgIGZlYXR1cmVzOgorICAgICAgLSBidWcgZml4ZXMgd2l0aCBtaW5pbWFsaXN0IHN1cHBvcnQgYWZ0ZXIgYWRkaXRpb25hbCB1c2VyIGZlZWRiYWNrCisKKyAgTWFueSBvdGhlciBtaXNjZWxsYW5lb3VzIG1pbm9yIGJ1ZyBmaXhlcworCisqNS43KgorCisgIHNubXBkOgorICAgICAgLSBEZWxpdmVyeSBvZiBkYXRhIHZpYSByZWd1bGFyaWx5IHNjaGVkdWxlZCBub3RpZmljYXRpb25zLgorICAgICAgICAoc2VlICJEYXRhIERlbGl2ZXJ5IHZpYSBOb3RmaWNhdGlvbnMiIGluIHNubXBkLmNvbmYpCisgICAgICAtIE1hbnkgdGltZS1iYXNlZCBjb25maWcgb3B0aW9ucyBjYW4gdGFrZSAobSlpbnMsIChoKW91cnMsIC4uLiBhcmd1bWVudHMKKyAgICAgICAgKHNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZSkKKyAgICAgIC0gVGhlIFBJTkcgYW5kIFRSQUNFUk9VVEUgTUlCcyBub3cgY29tcGlsZSBhbmQgd29yay1pc2ggb24gbGludXgKKyAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvRElTTUFOCisgICAgICAtIE1pYiBoYW5kbGVycyBjYW4gbm93IGltcGxlbWVudCBhIGRhdGFfY2xvbmUgZnVuY3Rpb24gZm9yCisgICAgICAgIGNsb25pbmcgdGhlIG15dm9pZCBzdHJ1Y3R1cmUgdmFyaWFibGUgdG8gYXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMKKyAgICAgIC0gRml4ZWQgcGVyc2lzdGVudCBzdG9yYWdlIG9mIFZBQ00gTUlCIGNvbmZpZ3VyYXRpb24KKyAgICAgIC0gTXVsdGktaG9tZWQgYWdlbnRzIHNlbmQgVURQIHJlc3BvbnNlcyBmcm9tIHRoZSBwcm9wZXIgSVAgYWRkcmVzcworICAgICAgLSBUaGUgaHJTdG9yYWdlVGFibGUgaW1wbGVtZW50YXRpb24gbm93IHN1cHBvcnRzIGxhcmdlIGZpbGVzeXN0ZW1zIGJldHRlcgorICAgICAgLSBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMKKyAgICAgIC0gQWRkZWQgYSBkZWxpdmVyeUJ5Tm90aWZ5IGNvbmZpZyB0b2tlbiBmb3IgcmVndWxhciBkYXRhIGRlbGl2ZXJ5CisgICAgICAgIChzZWUgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UgYW5kIHRoZSBORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCKQorICAgICAgLSBbUEFUQ0ggMzE0MTQ2Ml06IGZpeCBhZ2VudHggc3ViYWdlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUtb2JqZWN0IHJlcXVlc3RzCisgICAgICAtIFtQQVRDSCAzMDU3MDkzXTogbGludXggdXNlcyBsaWJwY2kgZm9yIGNyZWF0aW5nIHVzZWZ1bCBpZkRlc2NyIHN0cmluZ3MKKyAgICAgIC0gW1BBVENIIDMxMzEzOTddOiBodWdlIHNwZWVkdXBzIG9mIHRoZSBUQ1AvVURQIFRhYmxlcworCisgIGxpYm5ldHNubXA6CisgICAgICAtIFJlbW92ZWQgdGhlIG9sZGVyIENNVSBjb21wYXRpYmlsaXR5IHN1cHBvcnQKKyAgICAgIC0gVGhlIFNTSCB0cmFuc3BvcnQgaXMgbm93IGNvbmZpZ3VyYWJsZQorCisgIFRMUy9EVExTIHN1cHBvcnQ6CisgICAgICAtIFRoZSBTTk1QIG92ZXIgRFRMUyB0cmFuc3BvcnQgbm93IHByb3Blcmx5IHN1cHBvcnRzIElQdjYKKyAgICAgIC0gSW50cm9kdWNlZCBuZXcgY29uZmlndXJhdGlvbiB0b2tlbnM6IGxvY2FsQ2VydC9wZWVyQ2VydAorICAgICAgICAoZGVwcmVjYXRpbmcgc2VydmVyQ2VydCwgY2xpZW50Q2VydCwgZGVmWDUwOVNlcnZlclB1YiwgZGVmWDUwOUNsaWVudFB1YikKKyAgICAgIC0gVmFyaW91cyBmaXhlcyBmb3IgdGhlIFRMUy9EVExTIHRyYW5zcG9ydHMKKworICBhcHBzOgorICAgICAgLSBBZGRlZCBhIHBlci12YXJpYWJsZSB0aW1lZCBvdXRwdXQgc3VwcG9ydCB0byBzbm1wd2FsayB1c2luZyAtQ1QKKyAgICAgIC0gc25tcGluZm9ybSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIGxvY2FsIGVuZ2luZUlEIGZvciBpbmZvcm1zCisgICAgICAtIEEgbnVtYmVyIG9mIG1pYjJjIGJ1ZyBmaXhlcworICAgICAgLSBOZXcgc25tcC5jb25mIHRva2VucyBmb3IgdGltZW91dHMgYW5kIHJldHJpZXMKKworICBidWlsZGluZzoKKyAgICAgIC0gTmV3IGZsYWdzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvbXBpbGVkIGNvZGUgdG8gYmFyZSBtaW5pbXVtcy4KKyAgICAgICAgVGhpcyBpcyBwcm92aWRlZCBieSBhIG5ldyBnZW5lcmljIGZlYXR1cmUgbWFya2luZy9zZWxlY3Rpb24gbWVjaGFuaXNtLgorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9GZWF0dXJlX01hcmtpbmdfYW5kX1NlbGVjdGlvbgorICAgICAgLSBJdCdzIG5vdyBwb3NzaWJsZSB0byBidWlsZCB3aXRob3V0IFNOTVB2My9VU00KKyAgICAgICAgKGUuZy4sIGlmIHlvdSBvbmx5IHdhbnQgVExTL0RUTFMgd2l0aCBTTk1QdjMvVFNNKQorICAgICAgLSBJdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIHRoZSBzdWl0ZSB3aXRoIG5vIFNFVCBzdXBwb3J0CisgICAgICAgIGNvbmZpZ3VyZSB1c2luZyAtLWVuYWJsZS1yZWFkLW9ubHkKKyAgICAgIC0gSXQncyBwb3NzaWJsZSB0byBidWlsZCB0aGUgYWdlbnQgYXMgYSBub3RpZnktb25seSBhZ2VudAorICAgICAgICBjb25maWd1cmUgdXNpbmcgLS1lbmFibGUtbm90aWZ5LW9ubHkKKyAgICAgIC0gQWRkZWQgYSBzY3JpcHQgdG8gdGVzdCBtZW1vcnkgdXNhZ2Ugd2l0aCB2YXJpb3VzIGNvbmZpZyBvcHRpb25zCisgICAgICAgIChzZWUgdGhlIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzIHNjcmlwdCkKKyAgICAgIC0gTmV0LVNOTVAgY2FuIG5vdyBiZSBidWlsdCB0byBwZXJmb3JtIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uCisgICAgICAgIChpbnN0YWxsIEROU1NFQy1Ub29scycgbGlidmFsIGFuZCB1c2UgLS13aXRoLWxvY2FsLWRuc3NlYy12YWxpZGF0aW9uKQorCisgIHRlc3Rpbmc6CisgICAgICAtIGEgbnVtYmVyIG9mIG5ldyBBUEkgdW5pdC10ZXN0cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHN1aXRlCisgICAgICAgICh0byBydW4gdGhlIHRlc3RzOiBjZCB0ZXN0aW5nICYmIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpCisgICAgICAtIFRoZSB1bml0IHRlc3RzIGNhbiBiZSBtb3JlIGVhc2lseSBydW4gdW5kZXIgdmFsZ3JpbmQKKyAgICAgICAgKFNlZSBodHRwOi8vYml0Lmx5L2pzZ1JudiBmb3IgZGV0YWlscykKKworICBvcGVuYnNkOgorICAgICAgLSBTdXBwb3J0IGZvciB1cGRhdGluZyB0aGUgcm91dGluZyB0YWJsZSB2aWEgU05NUAorCisgIHdpbjMyOgorICAgICAgLSBUaGUgdGVzdGluZyBzdWl0ZSB3b3JrcyBiZXR0ZXIgdW5kZXIgd2luMzIgZW52aXJvbm1lbnRzCisgICAgICAtIE1hbnkgYnVpbGRpbmcgZml4ZXMgZm9yIHRoZSB3aW4zMiBlbnZpcm9ubWVudChzKQorCisgIHNvbGFyaXM6CisgICAgICAtIE5ldC1TTk1QIG5vdyBzdXBwb3J0cyB0aGUgU0NUUC1NSUIKKworICBEcmFnb25GbHlCU0QsIEZyZWVCU0Q4OgorICAgICAgLSBOZXQtU05NUCBzaG91bGQgbm93IHdvcmsgb24gRHJhZ29uRmx5QlNEIGFuZCBGcmVlQlNEOAorCisgIEFuZCBvZiBjb3Vyc2U6CisgICAgICAtIE1hbnkgb3RoZXIgYnVnIGZpeGVzLiAgU2VlIHRoZSBDSEFOR0VTIGFuZCBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisKKyo1LjYqCisKKyAgICBhbGw6CisgICAgICAtIEltcGxlbWVudGVkIHRoZSBTTk1QIG92ZXIgVExTIGFuZCBTTk1QIG92ZXIgRFRMUyBwcm90b2NvbHMgW1JGQy10by1iZV0KKyAgICAgICAgU2VlIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1RVVDpVc2luZ19UTFMKKyAgICAgIC0gSW1wbGVtZW50ZWQgdGhlICJUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwiIFtSRkM1NTkxXQorICAgICAgLSBHZW5lcmljIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiAuY29uZiBmaWxlcyBhcmUgbm93IHJlYWQuCisJU2VlIHRoZSBIT1NULVNQRUNJRklDIEZJTEVTIHNlY3Rpb24gb2YgdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZQorICAgICAgICBhbmQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvQ29uZmlndXJhdGlvbgorICAgICAgLSBJbmNsdWRlIHN0YXRlbWVudHMgY2FuIG5vdyBiZSB1c2VkIGluIC5jb25mIGZpbGVzLgorICAgICAgICBTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvQ29uZmlndXJhdGlvbgorCisgICAgc25tcGQ6CisgICAgICAtIEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMuIChVc2UgdGhlICJiZXN0IgorCW1hdGNoLCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lKS4gUmVwb3J0ZWQgYnkgQWRhbSBMZXdpcy4gTm90ZQorCXRoYXQgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiBleGlzdGluZyBhY2Nlc3MKKwljb250cm9sIGNvbmZpZ3VyYXRpb25zLgorICAgICAgLSBBZ2VudCB3aWxsIG5vIGxvbmdlciBjYWxsIHRhYmxlIGhhbmRsZXJzIGlmIGEgc2V0IHJlcXVlc3QgZm9yIHRoZQorCWhhbmRsZXIgaGFzIGludmFsaWQgaW5kZXhlcworICAgICAgLSB0YWJsZV9kYXRhL3RkYXRhIG5leHQgaGFuZGxlciB3aWxsIG5vdCBiZSBjYWxsZWQgZHVyaW5nIGdldAorCXByb2Nlc3NpbmcgaWYgbm8gdmFsaWQgcm93cyBhcmUgZm91bmQgZm9yIHRoZSBoYW5kbGVyCisgICAgICAtIFtQQVRDSCAyOTUyNzA4XTogQWRkZWQgUGVybCBpbXBsZW1lbnRhdGlvbiBvZiBCUklER0UtTUlCCisgICAgICAtIG1vdmVkIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsaWJuZXRzbm1waGVscGVycyB0bworCWxpYm5ldHNubXBhZ2VudC4gbGlibmV0c25tcGhlbHBlcnMgaXMgbm93IGFuIGVtcHR5IGxpYnJhcnkuCisgICAgICAtIEltcGxlbWVudGVkIHRoZSBUU00tTUlCIGFuZCB0aGUgVExTVE0tTUlCCisgICAgICAtIG5ldyBBUEkgZm9yIGluZGljYXRpbmcgdGhhdCBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkCisJYWZ0ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBmaW5pc2hlcyBwcm9jZXNzaW5nCisgICAgICAtIFtQQVRDSCAyOTMxNDQ2XTogbWFrZSB0aGUgbG9hZCBhdmVyYWdlcyB3cml0YWJsZS4KKworICAgIGFwcHM6CisgICAgICAtIEEgbmV3IHRvb2wgJ25ldC1zbm1wLWNlcnQnIHRoYXQgZWFzaWx5IGNyZWF0ZXMgYW5kIG1hbmFnZXMKKyAgICAgICAgWC41MDkgY2VydGlmaWNhdGVzIGZvciB1c2Ugd2l0aCB0aGUgU05NUCBvdmVyIChEKVRMUyBwcm90b2NvbHMuCisgICAgICAtIEFkZGVkIGFuICdhZ2VudHh0cmFwJyBjb21tYW5kIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB2aWEgQWdlbnRYCisgICAgICAgIChTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOmFnZW50eHRyYXAgZm9yIGRldGFpbHMpCisgICAgICAtIC1UIGNvbW1hbmQgbGluZSBmbGFnIGNhbiBiZSB1c2VkIHRvIHBhc3MgY29uZmlndXJhdGlvbgorICAgICAgICBkaXJlY3RseSB0byB0cmFuc3BvcnRzIHRoYXQgY2FuIGFjY2VwdCBjb25maWd1cmF0aW9uIHRva2VucworICAgICAgLSBBIG5ldyAnc25tcHRscycgY29tbWFuZCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBhZ2VudCdzIFRMUyBjb25maWd1cmF0aW9uCisKKyAgICBzbm1wbGliOgorICAgICAgLSBBIG1vcmUgbW9kdWxhciB0cmFuc3BvcnQgc3Vic3lzdGVtIHRoYXQgYWxsb3dzIHRoaXJkIHBhcnR5CisgICAgICAgIGV4dGVuc2lvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29kZSByZXVzZS4KKyAgICAgIC0gTmV3IHRyYW5zcG9ydCBmdW5jdGlvbnM6IGZfY29uZmlnLCBmX29wZW4sIGZfY29weSBhbmQgZl9zZXR1cF9zZXNzaW9uCisgICAgICAtIFRyYW5zcG9ydHMgY2FuIG5vdyBzcGVjaWZ5IHNlc3Npb24gZGVmYXVsdHMKKyAgICAgICAgLSBFLkcuIGR0bHN1ZHA6IGF1dG8tc2V0cyB0aGUgU05NUCB2ZXJzaW9uIGFuZCB0aGUgc2VjdXJpdHkgbW9kZWwuCisgICAgICAtIFtQQVRDSCAyOTQyOTQwXTogQWRkIGEgbmV3IGZ1bmN0aW9uLCBuZXRzbm1wX3BhcnNlX2FyZ3MsIHRoYXQgaXMKKwlsaWtlIHNubXBfcGFyc2VfYXJncyBidXQgdGFrZXMgYW4gYWRkaXRpb25hbCBiaXRtYXNrLCBmbGFncywgdG8KKwlhZmZlY3QgdGhlIGJlaGF2aW91ci4gQWxzbyByZW1vdmUgdGhlIG1hZ2ljIGhhbmRsaW5nIG9mIHNvbWUKKwlhcHBsaWNhdGlvbiBuYW1lcy4KKyAgICAgIC0gQSBuZXcgWC41MDkgY2VydGlmaWNhdGUgQVBJIGZvciBpbmRleGluZyBhbmQgcmVhZGluZyBjZXJ0aWZpY2F0ZXMKKyAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCByb3cgY3JlYXRpb24gQVBJIHdoaWNoIHVzZXMgYSBzdGF0ZSBtYWNoaW5lCisgICAgICAgIHRvIHRyeSByZWFsbHkgaGFyZCB0byBjcmVhdGUgYSByb3cgZnJvbSBhIGdpdmVuIHZhcmJpbmQgbGlzdAorICAgICAgLSBuZXRzbm1wX2NvbnRhaW5lciBlbmhhbmNlbWVudHM6CisgICAgICAgIC0gYWRkZWQgYSBmcmVlX2l0ZW0gZnVuY3Rpb24KKyAgICAgICAgLSBhZGRlZCBhIENPTlRBSU5FUl9GUkVFX0FMTCBtYWNyby9mdW5jdGlvbgorICAgICAgICAtIGFkZGVkIGFuIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIgKENPTlRBSU5FUl9EVVApCisgICAgICAgIC0gYWRkZWQgYSByZW1vdmUgZnVuY3Rpb24gdG8gY29udGFpbmVyX2l0ZXJhdG9ycworCS0gYWRkZWQgYW4gYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBvbiBiaW5hcnlfYXJyYXkgY29udGFpbmVycworICAgICAgLSBuZXcgc25tcCB0b2tlbiBsb2dPcHRpb24gYWxsb3dzIHNwZWNpZnlpbmcgbG9nIGRlc3RpbmF0aW9ucworICAgICAgICB2aWEgY29uZmlndXJhdGlvbiBjb25mIGZpbGVzCisgICAgICAtIEEgdmVyeSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaW4gY29tcGlsZXIgd2FybmluZyBvdXRwdXQKKyAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCBzaW1wbGUgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBBUEkKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBTdXBwb3J0IGZvciBhIHN0cmVhbS1saW5lIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBpbnRlcm5hbAorICAgICAgICBPcGVuU1NMIHN1cHBvcnQgdXNpbmcgLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwuCisgICAgICAtIERvIG5vdCByZXF1aXJlIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgaW5jbHVkZWQuCisgICAgICAtIEJ1aWxkaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBzdXBwb3J0IGVuYWJsZWQgaXMgYWdhaW4gcG9zc2libGUuCisKKyAgICBtaWIyYzoKKyAgICAgIC0gbWliMmMgY2FuIG5vdyBvcHRpb25hbGx5IHJ1biBzZWQgb24gZ2VuZXJhdGVkIGNvZGUKKworICAgIHRlc3Rpbmc6CisgICAgICAtIEEgYnJhbmQgbmV3IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydGluZyBtdWx0aXBsZSB0ZXN0IHN1aXRlcworICAgICAgICBTZWUgcGVybGRvYyB0ZXN0aW5nL1JVTkZVTExURVNUUyBmb3IgZGV0YWlscwogCiAgICAgcHl0aG9uOgotICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gdGhlIE5ldC1TTk1QIHNvdXJjZSB0cmVlCisgICAgICAtIHdhbGtpbmcgYnJva2VuIGFnZW50cyB3b24ndCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wCiAKLSAgICBNYWNPU1g6Ci0gICAgICAtIFtQQVRDSCAxNjAwNTIyXTogQ1BVIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyIChIQUwpCi0gICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBtYWNoL2RhcndpbgotICAgICAgLSBJRi1NSUIgcmV3cml0ZSBub3cgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgd2luMzI6CisgICAgICAtIElQdjYgaXMgb25seSBzdXBwb3J0ZWQgdW5kZXIgQ3lnd2luIDEuNyBvciBsYXRlci4KKyAgICAgIC0gW0JVRyAyOTM5MTY4XTogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93IGNvcnJlY3QuCisgICAgICAtIFtCVUcgMjkzOTE2OF06IGZpeGVkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKCJtYWtlIHRlc3QiKS4gVGhpcyBoYXMKKwliZWVuIGZpeGVkIGJ5IHVzaW5nIHRoZSBwcm9wZXIgZW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQKKwlieSBhZGRpbmcgdGhlIHBhdGggb2YgdGhlIG5ldHN0YXQgZXhlY3V0YWJsZSBmb3IgQ3lnd2luIGluCisJdGVzdGluZy9URVNUQ09ORi5zaC4KKyAgICAgIC0gYnVpbGRpbmcgd2l0aCBhbm90aGVyIE9wZW5TU0wgcGFja2FnZSB0aGFuIHRoZSBDeWd3aW4tcHJvdmlkZWQKKwlwYWNrYWdlcyBvcGVuc3NsIGFuZCBvcGVuc3NsLWRldmVsIGlzIGFnYWluIHBvc3NpYmxlLgorICAgICAgLSBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaXMgYWdhaW4gcG9zc2libGUgKCdtYWtlIHRlc3QnKS4KKyAgICAgIC0gd2luRXh0RExMIGNvbXBpbGVzIG5vdyB1bmRlciBNaW5HVy4KKyAgICAgIC0gdGhlIHNubXBkLmNvbmYga2V5d29yZCAnZXh0ZW5kJyBpcyBub3cgc3VwcG9ydGVkIHVuZGVyIE1pbkdXCisgICAgICAtIHRoZSBzbm1wdHJhcGQuY29uZiBrZXl3b3JkIHRyYXBoYW5kbGUgaXMgbm93IHN1cHBvcnRlZCB1bmRlciBNaW5HVwogCi0gICAgV2luMzI6Ci0gICAgICAtIGZpeCBBRVMgc3VwcG9ydAotICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IGZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgIHFueDY6CisgICAgICAtIFtQQVRDSCAyODM2ODk1XTogc3VwcG9ydCBmb3IgUU5YNgogCi0gICAgSVJJWDoKLSAgICAgIC0gW1BBVENIIDE3MDk3NDhdOiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKKyo1LjUqCisKKyAgICBBbGwgYXBwbGljYXRpb25zOgorICAgICAgLSBBZGRlZCB0aGUgYWJpbGl0eSB0byAiYWxpYXMiIHRyYW5zcG9ydHMgdG8gYSBtb3JlIHNpbXBsZSBuYW1lCisgICAgICAgICAoc2VlIHRoZSAiYWxpYXMiIGtleXdvcmQgaW4gdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZSkKKyAgICAgIC0gVGhlIC10ICh0aW1lb3V0KSBzd2l0Y2ggd2lsbCBhY2NlcHQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoZWc6IC4xKQorCisgICAgc25tcGQ6CisgICAgICAtIFtCVUcgMTcxMjk4OF06IGRlZmF1bHQvY29uZmlndXJhYmxlIG1heCAjIHZhcmJpbmRzIHJldHVybmVkIGJ5IEdFVEJVTEsKKyAgICAgIC0gW1BBVENIIDE1ODUxNDZdOiBFeHRlbmQgcmFuZ2Ugb2YgYXZhaWxhYmxlIGVycm9yIGNvZGVzCisgICAgICAtIFtQQVRDSCAxNjU0NDI0XTogSGFuZGxlIHJvdyBkZWxldGlvbiBpc3N1ZXMgaW4gZGF0YXNldCB0YWJsZXMKKyAgICAgIC0gW1BBVENIIDE2NjY3MzddOiBJbmNsdWRlIElQdjYgdHJhZmZpYyBpbiB2YXJpb3VzIFVEUCBjb3VudGVycworICAgICAgLSBbUEFUQ0ggMTcwMDE1N106IEZpeCBvcmRlcmluZyBvZiBleGVjIHRva2VucyBpbiBNSUIgb3V0cHV0CisgICAgICAtIFtQQVRDSCAxNzE5MjUzXTogZml4IHNraXBORlNJbkhvc3RSZXNvdXJjZXMgZm9yIG11bHRpcGxlIHdhbGtzCisgICAgICAtIFtQQVRDSCAxNzIzNjExXTogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSTU9OIGFsYXJtVGFibGUKKyAgICAgIC0gW1BBVENIIDE3Mzc0MzldOiBhdXRvbWF0aWMgbGluayB1cC9kb3duIHRyYXBzIG9uIGEgd2FsaworICAgICAgLSBbUEFUQ0ggMTgwNjUwMV06IEFkZCBBUEkgZm9yIHNlbmRpbmcgdHJhcHMgd2l0aCBhIHNubXB2MyBjb250ZXh0CisgICAgICAtIFtQQVRDSCAxODgyNjIxXTogQWRkIExWTSBzdXBwb3J0IHRvIHRoZSBwYXJ0aXRpb24gdGFibGUKKyAgICAgIC0gW1BBVENIIDE4OTM0NjhdOiBmaXhlZCByZWdpc3RyYXRpb24gb2YgT0lEcyB3aXRoIHJhbmdlcworICAgICAgLSBbUEFUQ0ggMTkwMTc2NF06IFN1cHBvcnQgZGF0ZS1iYXNlZCBsb2d3YXRjaCBmaWxlcworICAgICAgLSBbUEFUQ0ggMTkwOTgxM106IGZpeCB0YWJsZV9pdGVyYXRvciBoYW5kbGluZyBvZiBTT1JURUQgaGludAorICAgICAgLSBbUEFUQ0ggMTkxNjg0MF06IG5ldyBjb25maWcgb3B0aW9uIHRvIHNldCBTTk1QdjEgdHJhcCBhZ2VudCBhZGRyZXNzCisgICAgICAtIFtQQVRDSCAyMTAzNDkyXTogaW1wbGVtZW50IFJNT04tTUlCOjpldGhlclN0YXRzSmFiYmVycworICAgICAgLSBbUEFUQ0ggMjQ0OTIxMF06IGFkZCA2NC1iaXQgdXNhZ2Ugc3RhdGlzdGljcyB0byBVQ0QtU05NUC1NSUI6OmRza1RhYmxlCisgICAgICAtIEFkZCBzdXBwb3J0IGZvciBhIHVzZXIgcHJvdmlkZWQgbGVuZ3RoIHZhcmlhYmxlCisJICAgYW5kIEMgc3RyaW5nIHZhbHVlcyB0byB0aGUgd2F0Y2hlciBoZWxwZXIuCisgICAgICAtIEF1dG9tYXRpY2FsbHkgcmVyZWdpc3RlciBzeXNPUlRhYmxlIGVudHJpZXMgZnJvbSBBZ2VudFggc3ViYWdlbnRzLgorICAgICAgLSBGaXggdmFyaW91cyBtZW1vcnkgbGVha3MKKyAgICAgIC0gSW1wbGVtZW50IGlwQWRkcmVzc1NwaW5Mb2NrCisgICAgICAtIEltcGxlbWVudCBpcE5ldFRvUGh5c2ljYWxMYXN0VXBkYXRlZAorICAgICAgLSBTdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIgd2FybmluZyBmb3Igcm9vdCBvaWRzCisKKyAgICBzbm1wdHJhcGQ6CisgICAgICAtIFtQQVRDSCAxOTA4Mjg4XTogUnVuIHBlcmwgRU5EIGJsb2NrIG9uIHRlcm1pbmF0aW9uCisgICAgICAtIEFkZCB0cmFwIGhhbmRsZXIgZm9yIGxvZ2dpbmcgdHJhcHMgdG8gYSBteXNxbCBkYXRhYmFzZQorICAgICAgLSBXaXRoZHJhdyBkZXByZWNhdGVkIG9wdGlvbnMuCisKKyAgICBzbm1wbmV0c3RhdDoKKyAgICAgIC0gW1BBVENIIDI1NjQ1MzhdOiBTdXBwb3J0IEdFVEJVTEsgaW4gdjJjKyBzbm1wIHZlcnNpb25zCisKKyAgICBzbm1wdXNtOgorICAgICAgLSBbUEFUQ0ggMTU5MTM1NV06IEFsbG93IGNsb25pbmcgdG8gYXJiaXRyYXJ5IGVuZ2luZUlEcworCisgICAgc25tcGxpYjoKKyAgICAgIC0gW0JVRyAxNjE5ODI3XTogSW1wcm92ZSBoYW5kbGluZyBvZiBsaW5rIGRlcGVuZGVuY2llcworICAgICAgLSBbUEFUQ0ggIDcwMDY4MV06IGxpbWl0ZWQgc3VwcG9ydCBmb3IgVURQdjQgYnJvYWRjYXN0IGFkZHJlc3NlcworICAgICAgLSBbUEFUQ0ggMTg4MjA2OV06IEFkZCB0b2tlbiBmb3Igc3BlY2lmeWluZyBhbiBleGFjdCBTTk1QdjMgZW5naW5lSUQKKyAgICAgIC0gRml4IGFzc29ydGVkIG1lbW9yeSBsZWFrcworICAgICAgLSBJbXBsZW1lbnRlZCBSRkM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nLgorICAgICAgLSBTdXBwb3J0IGZvciB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsIGZvciB1c2Ugd2l0aCB0dW5uZWxpbmcKKworICAgIG1pc2M6CisgICAgICAtIEFkZCBjb25maWcgcmVyZWFkIHN1cHBvcnQgdG8gIm5ldC1zbm1wLWNvbmZpZyAtLWNvbXBpbGUtc3ViYWdlbnQiIGNvZGUKKyAgICAgIC0gUHJlbGltaW5hcnkgKGFscGhhKSBzdXBwb3J0IGZvciBTTk1QIG92ZXIgU1NIIGFuZCBEVExTL1VEUC4KKyAgICAgIC0gUHJlbGltaW5hcnkgKGFscGhhKSBzdXBwb3J0IGZvciB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsCisgICAgICAtIFNlcGFyYXRlIHVzZXIgbWFuYWdlbWVudCBpbnRvIG5ldyBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciBzY3JpcHQKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBJbXByb3ZlZCBjcm9zcy1jb21waWxhdGlvbiBzdXBwb3J0CisgICAgICAtIEltcHJvdmVkIGxpYnJhcnkgbGF5ZXJpbmcgJiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdoZW4gbGlua2luZyBhcHBzCisgICAgICAtIEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMuCisgICAgICAtIE1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIGJ1aWxkIGVudmlyb25tZW50IGJhc2VkIG9uIHZlcnNpb24KKyAgICAgIC0gTmV3IHRlc3Qgc2NyaXB0cyB0byB0ZXN0IE5ldC1TTk1QIHRyYW5zcG9ydCBmdW5jdGlvbmFsaXR5CisgICAgICAtIFJlc3RydWN0dXJlIGNvbmZpZ3VyZSB0ZW1wbGF0ZQorICAgICAgLSBVcGRhdGUgdG8gYXV0b2NvbmYgMi42MyAmIGxpYnRvb2wgMi4yLjYKKworICAgIHBlcmw6CisgICAgICAtIFtCVUcgMTYxOTgyN106IGltcHJvdmUgaGFuZGxpbmcgb2YgbGluayBkZXBlbmRlbmNpZXMKKyAgICAgIC0gW1BBVENIIDE5NTYxOTNdOiBiZXRhIHRocmVhZGFibGUgcGVybCBtb2R1bGUgY29kZSBmb3IgU05NUHYxLzJjIHVzYWdlLgorCisgICAgcHl0aG9uOgorICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUgKERlYmlhbiBwYXRjaCAjMzgpCisKKyAgICBMaW51eDoKKyAgICAgIC0gW1BBVENIIDE3MDQxMDVdOiBBZGQgSVB2NiBzdXBwb3J0IHRvIHRoZSBpbmV0TmV0VG9NZWRpYVRhYmxlCisgICAgICAtIFtQQVRDSCAxNzA1NTk0XTogVmFyaW91cyBmaXhlcyB0byBpcEFkZHJlc3NQcmVmaXhUYWJsZSByZXBvcnRpbmcKKyAgICAgIC0gW1BBVENIIDE3MDgyNDNdOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcxNTQwNV06IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcyNDYwMl06IE1mRC1iYXNlZCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgLSBbUEFUQ0ggMTgyODYwMl06IFN1cHBvcnQgaXBEZWZhdWx0VFRMIGFuZCBpcEZvcndhcmRpbmcgU0VUcworICAgICAgLSBbUEFUQ0ggMTkyNzc1MV06IEltcGxlbWVudCBpY21wTXNnU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IEltcGxlbWVudCBTQ1RQLU1JQgorICAgICAgLSBbUEFUQ0ggMjA1MzI3M106IEltcGxlbWVudCBFdGhlckxpa2UgTUlCCiAKICAgICBBSVg6Ci0gICAgICAtIEZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZyBzdGF0aWMgdXNlCisgICAgICAtIEFkZCBzdXBwb3J0IGZvciBBSVggNi54CisgICAgICAtIEZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZyBzdGF0aWMKIAogICAgIEZyZWVCU0Q6CiAgICAgICAtIFtCVUcgMTYzMzQ4M106IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CisgICAgICAtIFtQQVRDSCAxNjIzODc0XTogYWRkIEdOVS9rRnJlZUJTRCBzdXBwb3J0CisKKyAgICBJUklYOgorICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cworICAgICAgLSBbUEFUQ0ggMTY3NTg2OV06IENQVSBzdGF0aXN0aWNzIGZvciBJUklYIGJhc2VkIG9uIFBDUAorCisgICAgTWFjT1NYOgorICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCisKKyAgICBTb2xhcmlzOgorICAgICAgLSBbUEFUQ0ggMTcxOTczMF06IHN1cHBvcnQgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBBZGRyZXNzVGFibGUKKworICAgIFdpbjMyOgorICAgICAgLSBbUEFUQ0ggMjY4NjI0OF06IEZpeCBzZXZlcmFsIHdpbkV4dERMTCBidWdzLgorICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IEZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgICAgLSBGaXggQUVTIHN1cHBvcnQKIAogCiAqNS40KgpAQCAtNDI5LDcgKzY1Nyw3IEBACiAgICAgICAgLSBFbmFibGUgdGhlc2UgdGFsYmxlcyBieSBzcGVjaWZ5aW5nIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyB0byBjb25maWd1cmUuCiAgICAgICAgLSBNb3N0IG9mIHRoZXNlIHRhYmxlcyBoYXZlIElQdjYgc3VwcG9ydCBhcyB3ZWxsLgogICAgICAtIGlmSW5kZXggbm8gbG9uZ2VyIGNoYW5nZXMgd2hlbiBpbnRlcmZhY2VzIGFyZSBhZGRlZC9yZW1vdmVkLCBhbmQgYWxsCi0gICAgICAgICB0YWJsZXMvb2JqZWN0IHdpaWwgbm93IHVzZSB0aGUgc2FtZSBpZkluZGV4IGZvciB0aGUgc2FtZSBpbnRlcmZhY2UuCisgICAgICAgICB0YWJsZXMvb2JqZWN0IHdpbGwgbm93IHVzZSB0aGUgc2FtZSBpZkluZGV4IGZvciB0aGUgc2FtZSBpbnRlcmZhY2UuCiAKICAgIFNvbGFyaXM6CiAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB1Y2Qtc25tcC9sbVNlbnNvcnMgTUlCIG1vZHVsZQpAQCAtNDYzLDcgKzY5MSw3IEBACiAKICBQb3J0czoKICAgIC0gTGludXggMi42IGltcHJvdmVtZW50cwotICAgLSBXaW4zMiBTdXBvcnQgZm9yIFRDUCBhbmQgVURQIG92ZXIgSVB2NiB2aWEgV2luc29jayB2ZXJzaW9uIDIKKyAgIC0gV2luMzIgc3VwcG9ydCBmb3IgVENQIGFuZCBVRFAgb3ZlciBJUHY2IHZpYSBXaW5zb2NrIHZlcnNpb24gMgogICAgLSBXaW4zMiBmaXhlcyBpbiBtYW55IHBsYWNlcy4KICAgIC0gV2luMzIgc2VydmljZSBzdXBwb3J0IGZvciBzbm1wdHJhcGQKICAgIC0gV2luMzIgc3VwcG9ydCBmb3Igc25tcGNvbmYKQEAgLTY1Niw3ICs4ODQsNyBAQAogKjUuMC40KgogCiAgICBEdXJpbmcgdGhlIHRlc3RpbmcgZm9yIHJlbGVhc2UgNS4wLjQsIGEgcmVsZWFzZSBjYW5kaWRhdGUgd2FzIHVwbG9hZGVkCi0gICB0byBTb3VyY2Vmb3JnZSBhbmQgbWFya2VkIGFzIGhpZGRlbi4gRm9yIHZhcmlvdXNlIHJlYXNvbnMsIHRoZSByZWxlYXNlCisgICB0byBTb3VyY2Vmb3JnZSBhbmQgbWFya2VkIGFzIGhpZGRlbi4gRm9yIHZhcmlvdXMgcmVhc29ucywgdGhlIHJlbGVhc2UKICAgIHdhcyBkZWxheWVkIGFuZCBmdXJ0aGVyIGNoYW5nZXMgYW5kIGZpeGVzIHdlcmUgbWFkZS4gIEhvd2V2ZXIsIHRoZSAKICAgIHJlbGVhc2UgY2FuZGlkYXRlIGZpbGVzIHN0aWxsIGFwcGVhcmVkIG9uIHRoZSBwdWJsaWMgRlRQIHNlcnZlciBhbmQgb3VyCiAgICBtaXJyb3JzLiBUbyBhdm9pZCB0aGUgY29uZnVzaW9uIHRoYXQgY291bGQgb2NjdXIgdG8gdXNlcnMgd2hvIG1heSBoYXZlCkBAIC05MjYsNyArMTE1NCw3IEBACiAgICAgICAoc2VlIHRoZSB0cmFwc2VzcyBzZWN0aW9uIG9mIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlKQogICAgIC0gaW5kZXggbWF0Y2hpbmcgaW4gb2lkcyBoYXMgYmVlbiBpbXByb3ZlZAogICAgICAgKHNlZSB0aGUgc25tcGNtZCBtYW51YWwgcGFnZSBvbiAtT3gsIC1PRSwgYW5kIC1PYikuCi0gICAgLSBzbm1wdHJhcGQgaGFzIG5ldyBmb3JtYXRpbmcgZGlyZWN0aXZlcy4KKyAgICAtIHNubXB0cmFwZCBoYXMgbmV3IGZvcm1hdHRpbmcgZGlyZWN0aXZlcy4KICAgICAgIChzZWUgdGhlIHNubXB0cmFwZCBtYW51YWwgcGFnZSBvbiBmb3JtYXQxIGFuZCBmb3JtYXQyKS4KICAgICAtIHRoZSBhZ2VudCBjYW4gbGlzdGVuIHRvIG11bHRpcGxlIHBvcnRzLgogICAgIC0gdGhlIGFnZW50IGNhbiBiZSByZXN0cmljdGVkIHRvIGxpc3RlbmluZyBvbiBvbmx5IGNlcnRhaW4gaW50ZXJmYWNlcy4KQEAgLTExMDMsNyArMTMzMSw3IEBACiAgICAgLSBtYW55IG1pc2MgYnVnIGZpeGVzLCBhcyBhbHdheXMuCiAKICAgUG9ydHM6Ci0gICAgLSBzbm1wbmV0c3RhdCBoYXMgYmVlbiBwb3J0ZWQgdG8gdGhlIHdpbjMyIGVudmlvcm5tZW50LgorICAgIC0gc25tcG5ldHN0YXQgaGFzIGJlZW4gcG9ydGVkIHRvIHRoZSB3aW4zMiBlbnZpcm9ubWVudC4KIAogKjMuNS4zKgogICAgIC0gQnVnIGZpeGVzLCBpbmNsdWRpbmcgcm93IGNyZWF0aW9uIHNldHMgdG8gbWliIG1vZHVsZXMgc2hvdWxkIHdvcmsgYWdhaW4uCkBAIC0xMjU5LDcgKzE0ODcsNyBAQAogICAgIC0gRkFRIGZpbGUhCiAgICAgLSBidWctcmVwb3J0IHNjcmlwdCEKICAgICAtIEFnZW50IGNhbiByZWFkIC5jb25mIGZpbGVzIGZyb20gbW9yZSBwbGFjZXM6Ci0gICAgICAtIFNOTVBDT05GUEFUSCBlbnZpb3JubWVudCB2YXJpYWJsZS4KKyAgICAgIC0gU05NUENPTkZQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICAgLSBjb21tYW5kIGxpbmUgb3B0aW9uczogIC1jIEZJTEUgYW5kIC1DLgogICAgIC0gQWdlbnQgY2FuIHNlbmQgY29sZHN0YXJ0IGFuZCBhdXRoZW50aWNhdGlvbiB0cmFwcy4KICAgICAtIEFsbCByZXF1ZXN0cy9wYXRjaGVzL3F1ZXN0aW9ucyBzaG91bGQgZ28gdG8gCmRpZmYgLS1naXQgYS9QT1JUSU5HIGIvUE9SVElORwppbmRleCBkYWNiMTVhLi4yZDQ1M2Y2IDEwMDY0NAotLS0gYS9QT1JUSU5HCisrKyBiL1BPUlRJTkcKQEAgLTI1LDcgKzI1LDcgQEAKIHRoZSBwYWNrYWdlIHRvIG5ldyBhcmNoaXRlY3R1cmVzIHJhcmVseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHNldHVwCiBhbmQgc2VuZCBtZSBwYXRjaGVzIHdpdGggbG90cyBvZiAnI2lmZGVmIEFSQ0gnIHR5cGUgQyBjb2RlIGluIGl0LiAgTGV0CiBtZSBzYXkgdXAgZnJvbnQsIEkgKmhhdGUqIHRoaXMgdHlwZSBvZiBjb2Rpbmcgbm93IChldmVuIHRob3VnaCBJIHVzZWQKLXRvIHVzZSBpdCBhIGxvdCkuICBXaGF0IGlzIGJldHRlciBpcyB0byBjaGVjayBmb3IgdGhlIG5lY2lzc2FyeQordG8gdXNlIGl0IGEgbG90KS4gIFdoYXQgaXMgYmV0dGVyIGlzIHRvIGNoZWNrIGZvciB0aGUgbmVjZXNzYXJ5CiBmdW5jdGlvbmFsaXR5IHVzaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZCB0aGVuIHVzZSB0aGUgcmVzdWx0cyBvZgogdGhvc2UgdGVzdHMuCiAKQEAgLTc1LDE3ICs3NSwxMyBAQAogLS0tIFNUUlVDVFVSRSBNRU1CRVIgQ0hFQ0tTCiAKIEluIGNvbmZpZ3VyZS5pbjoKLSAgQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCisgIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBTVFJVQ1RVUkUuTUVNQkVSXSwsLFtbCiAjaW5jbHVkZSBsaW5lcwotXSwgU1RSVUNUVVJFLCBNRU1CRVIpCi0gICBeXl5eXl5eXl4gIF5eXl5eXiAgKGNoYW5nZSkKLQotSW4gYWNjb25maWcuaDoKLSAgI3VuZGVmIFNUUlVDVF9TVFJVQ1RVUkVfSEFTX01FTUJFUgotICAgICAgICAgICAgICAgIF5eXl5eXl5eXiAgICAgXl5eXl5eICAoY2hhbmdlKQorXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl4gXl5eXl5eICAoY2hhbmdlKQogCiBJbiBzb3VyY2UgY29kZToKLSAgI2lmZGVmIFNUUlVDVF9TVFJVQ1RVUkVfSEFTX01FTUJFUgorICAjaWZkZWYgSEFWRV9TVFJVQ1RfU1RSVUNUVVJFX01FTUJFUgogICAgIC8qIHVzZSBpdCAqLwogICAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDYyOWFmMzEuLjM2OTZkMjMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi0JICAgICAgIFJFQURNRSBmaWxlIGZvciBuZXQtc25tcCBWZXJzaW9uOiA1LjQuNAorCSAgICAgICBSRUFETUUgZmlsZSBmb3IgbmV0LXNubXAgVmVyc2lvbjogNS43LjMucmMzCiAKIERJU0NMQUlNRVIKIApAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgRGFuIEEuIERpY2tleSA8ZGRpY2tleUB0cmFuc2l0aW9uLmNvbT4KICAgICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBjc2MubGl2LmFjLnVrPgogICAgIEdpb3Zhbm5pIFMuIE1hcnpvdCA8Z21hcnpvdEBub3J0ZWxuZXR3b3Jrcy5jb20+Ci0gICAgTmllbHMgQmFnZ2VzZW4gPHJlY25iYUBtZWRpYXRvci51bmktYy5kaz4KKyAgICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgICBTaW1vbiBMZWluZW4gPHNpbW9uQGxpbW1hdC5zd2l0Y2guY2g+CiAgICAgRGF2aWQgVC4gUGVya2lucyA8ZHBlcmtpbnNAZHNwZXJraW5zLmNvbT4KICAgICBNaWtlIFBlcmlrIDxtaWtlcEBjcnQuY29tPgpAQCAtMzQ5LDcgKzM0OSwxMiBAQAogICAgIFBldGVyIE1hcnRpbiA8cG5tYXJ0aW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIFRob21hcyBMYWNrZXkgPHRlbGFja2V5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgICBKb2UgQnVlaGxlciA8amJ1ZWhsZXJAc3BpcmVudGNvbS5jb20+CisgICAgQW5kZXJzIFBlcnNzb24gPGFwZXJzc29uQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBSb2plciA8cm9qZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIEJhcnQgVmFuIEFzc2NoZSA8YmFydC52YW5hc3NjaGVAZ21haWwuY29tPgorICAgIFBhYmxvIENhcmJvbmkgPHBjYXJib25pQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KKyAgICBCcmlhbiBTaXBvcyA8YnNpcG9zcmtmQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIAogICBXZSd2ZSBwcm9iYWJseSBmb3Jnb3R0ZW4gcGVvcGxlIG9uIHRoaXMgbGlzdC4gIExldCB1cyBrbm93IGlmIHlvdSd2ZQogICBjb250cmlidXRlZCBjb2RlIGFuZCB3ZSd2ZSBsZWZ0IHlvdSBvdXQuCmRpZmYgLS1naXQgYS9SRUFETUUuYWdlbnQtbWlicyBiL1JFQURNRS5hZ2VudC1taWJzCmluZGV4IDg3MTZmOGQuLjUzZjFjYWEgMTAwNjQ0Ci0tLSBhL1JFQURNRS5hZ2VudC1taWJzCisrKyBiL1JFQURNRS5hZ2VudC1taWJzCkBAIC00MCw2ICs0MCw3IEBACiAgIEcgIHNjYWxhciBncm91cCBoZWxwZXIKICAgVyAgd2F0Y2hlZCBzY2FsYXIgCiAgIE0gIG1mZAorICBDICBjb250YWluZXIgdGFibGUKIAogUGxhdGZvcm0gS2V5cwogLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Myw5ICs2NCwxMCBAQAogIHRhYmxlL29iamVjdCBncm91cCAgICAgICAgICAgT1MgICAgICAgUmVsICAgU3R5bCBGaWxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFNOTVB2Mi1NSUIKLSBzeXN0ZW0uKi4wICAgICAgICAgICAgICAgICAgIEEgICAgICAgICAzLjIgICAgIE8gbWliSUkvc3lzdGVtX21pYi5jCi0gc3lzT1JUYWJsZSAgICAgICAgICAgICAgICAgICBBICAgICAgICAgMy40ICAgICBPIG1pYklJL3N5c09SVGFibGUuYwotIHNubXAuKi4wICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgIDMuMiAgICAgTyBtaWJJSS9zbm1wX21pYi5jCisgc3lzdGVtLj8uMCAgICAgICAgICAgICAgICAgICBBICAgICAgICAgNS41ICAgICBXIG1pYklJL3N5c3RlbV9taWIuYworIC5zeXNPUkxhc3RDaGFuZ2UuMCAgICAgICAgICAgQSAgICAgICAgIDUuNSAgICAgVyBtaWJJSS9zeXNPUlRhYmxlLmMKKyBzeXNPUlRhYmxlICAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIEMgbWliSUkvc3lzT1JUYWJsZS5jCisgc25tcC4qLjAgICAgICAgICAgICAgICAgICAgICBBICAgICAgICAgNS41ICAgICBHIG1pYklJL3NubXBfbWliXzVfNS5jCiAgc2V0U2VyaWFsTm8uMCAgICAgICAgICAgICAgICBBICAgICAgICAgNS4wICAgICBXIG1pYklJL3NldFNlcmlhbE5vLmMKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NCwxNSArNzYsMTUgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTTk1QLU1QRC1NSUIKLSBzbm1wTVBEU3RhdHMuKi4wICAgICAgICAgICAgIEEgICAgICAgICB+NC4wPyAgIE8gc25tcHYzL3NubXBNUERTdGF0cy5jCisgc25tcE1QRFN0YXRzLiouMCAgICAgICAgICAgICBBICAgICAgICAgfjQuMD8gICBHIHNubXB2My9zbm1wTVBEU3RhdHNfNV81LmMKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTTk1QLVRBUkdFVC1NSUIKICBzbm1wVGFyZ2V0U3BpbkxvY2suMCAgICAgICAgIEEgICAgICAgICAzLjYgICAgIE8gdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYwogIHNubXBUYXJnZXRBZGRyVGFibGUgICAgICAgICAgQSAgICAgICAgIDMuNiAgICAgTyB0YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCiAgc25tcFRhcmdldFBhcmFtc1RhYmxlICAgICAgICBBICAgICAgICAgMy42ICAgICBPIHRhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYwotIHNubXBVbmF2YWlsYWJsZUNvbnRleHRzLjAgICAgQSAgICAgICAgIDUuMCAgICAgTyB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKLSBzbm1wVW5rbm93bkNvbnRleHRzLjAgICAgICAgIEEgICAgICAgICA1LjAgICAgIE8gdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jCisgc25tcFVuYXZhaWxhYmxlQ29udGV4dHMuMCAgICBBICAgICAgICAgNS41ICAgICBHIHRhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMKKyBzbm1wVW5rbm93bkNvbnRleHRzLjAgICAgICAgIEEgICAgICAgICA1LjUgICAgIEcgdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtTk9USUZJQ0FUSU9OLU1JQgpAQCAtMTAzLDYgKzEwNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIKICB1c21TdGF0cy4qLjAgICAgICAgICAgICAgICAgIEEgICAgICAgICB+NC4wICAgIE8gc25tcHYzL3VzbVN0YXRzLmMKKyB1c21TdGF0cy4qLjAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIEcgc25tcHYzL3VzbVN0YXRzXzVfNS5jCiAgdXNtVXNlclRhYmxlICAgICAgICAgICAgICAgICBBICAgICAgICAgfjQuMD8gICBPIHNubXB2My91c21Vc2VyLmMKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTEsMTkgKzE1NCwyMSBAQAogIGljbXAuKi4wICAgICAgICAgICAgICAgICAgICAgVSAkMiAgICAgIH4zLjIgICAgRyBtaWJJSS9pY21wLmMKIAogIGlwU3lzdGVtU3RhdHNUYWJsZSAgICAgICAgICAgTCAgICAgICAgIDUuMiAgICAgTSBpcC1taWIvPS8qCisgaXBTeXN0ZW1TdGF0c1RhYmxlICAgICAgICAgICAgUyAgICAgICAgNS41ICAgICBNIGlwLW1pYi89LyoKICBpcElmU3RhdHNUYWJsZUxhc3RDaGFuZ2UuMCAgIC0tLQotIGlwSWZTdGF0c1RhYmxlICAgICAgICAgICAgICAgLS0tCisgaXBJZlN0YXRzVGFibGUgICAgICAgICAgICAgICBMLS0gICAgICAgNS41ICAgICBNIGlwLW1pYi89LyoKIAogIGlwQWRkclRhYmxlIChEKSAgICAgICAgICAgICAgVSAkMiAgICAgIDQuMiAgICAgTyBtaWJJSS9pcEFkZHIuYwotIGlwQWRkcmVzc1NwaW5Mb2NrLjAgICAgICAgICAgLS0tCisgaXBBZGRyZXNzU3BpbkxvY2suMCAgICAgICAgICBBICAgICAgICAgNS41ICAgICBPIG1pYklJL2lwQWRkci5jCiAgaXBBZGRyZXNzVGFibGUgICAgICAgICAgICAgICBMICAgICAgICAgNS4yICAgICBNIGlwLW1pYi89LyoKKyBpcEFkZHJlc3NUYWJsZSAgICAgICAgICAgICAgICBTICAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogIGlwQWRkcmVzc1ByZWZpeFRhYmxlICAgICAgICAgTCAgICAgICAgIDUuMyAgICAgTSBpcC1taWIvPS8qCiAKICBpcFJvdXRlVGFibGUgKEQpICAgICAgICAgICAgIFUgJDIgICAgICB+My41ICAgIE8gbWliSUkvKnJvdXRlKi5jCiAgaXBOZXRUb01lZGlhVGFibGUgKEQpICAgICAgICBVICQyICAgICAgfjMuNSAgICBPIG1pYklJL2F0LmMKICBpcE5ldFRvUGh5c2ljYWxUYWJsZSAgICAgICAgIChpbXBsZW1lbnRlZCBhcyBpbmV0TmV0VG9NZWRpYVRhYmxlKQogIGluZXROZXRUb01lZGlhVGFibGUgICAgICAgICAgTCAgICAgICAgIDUuMiAgICAgTSBpcC1taWIvPS8qCi0gaXBEZWZhdWx0Um91dGVyVGFibGUgICAgICAgICAtLS0KKyBpcERlZmF1bHRSb3V0ZXJUYWJsZSAgICAgICAgIEwgICAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogCiAgaWNtcFN0YXRzVGFibGUgICAgICAgICAgICAgICAtLS0KICBpY21wTXNnU3RhdHNUYWJsZSAgICAgICAgICAgIC0tLQpAQCAtMTc5LDYgKzE4NCw5IEBACiAgaXB2NlJvdXRlckFkdmVydFNwaW5Mb2NrLjAgICAtLS0KICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSAgICAgIC0tLQogCisgaXBGb3J3YXJkaW5nLjAgICAgICAgICAgICAgICBMICAgICAgICAgIDUuNCAgICBTIGlwLW1pYi9pcF9zY2FsYXJzLmMKKyBpcERlZmF1bHRUVEwuMCAgICAgICAgICAgICAgIEwgICAgICAgICAgNS40ICAgIFMgaXAtbWliL2lwX3NjYWxhcnMuYworCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIElQVjYtTUlCCiAgaXB2Nk1JQk9iamVjdHMuPy4wICAgICAgICAgICBVICAgICAgICAgNC4xICAgICBPIG1pYklJL2lwdjYuYwpAQCAtMjM2LDYgKzI0NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFJNT04tTUlCCiAgZXRoZXJTdGF0c1RhYmxlICAgICAgICAgICAgICBVICAgICAgICAgNS4wICAgICBPIFJtb24vc3RhdGlzdGljcy5jCisgLmV0aGVyU3RhdHNKYWJiZXJzICAgICAgICAgICBMMyAgICAgICAgNS41ICAgICBNIHJtb24tbWliLz0vKgogIGV0aGVySGlzdG9yeUNvbnRyb2xUYWJsZSAgICAgVSAgICAgICAgIDUuMCAgICAgTyBSbW9uL2hpc3RvcnkuYwogIGV0aGVySGlzdG9yeVRhYmxlICAgICAgICAgICAgVSAgICAgICAgIDUuMCAgICAgTyBSbW9uL2hpc3RvcnkuYwogIGFsYXJtVGFibGUgICAgICAgICAgICAgICAgICAgVSAgICAgICAgIDMuMiAgICAgTyBSbW9uL2FsYXJtLmMKQEAgLTMyMyw3ICszMzIsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEV0aGVyTGlrZS1NSUIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorIGRvdDNTdGF0c1RhYmxlICAgICAgICAgICAgICAgTCAgICAgICAgNS41ICAgICAgTSBldGhlcmxpa2UtbWliLz0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBR0VOVFgtTUlCCkBAIC00MDgsMTYgKzQxNywyOSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNDVFAtTUlCCi0gc2N0cFN0YXRzICAgICAgICAgICAgICAgICAgICBMICAgICAgICAgNS40LjIgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgotIHNjdHBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNC4yICAgUyBzY3RwLW1pYi9zY3RwU2NhbGFycyoKLSBzY3RwQXNzb2NUYWJsZSAgICAgICAgICAgICAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlICAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cEFzc29jUmVtQWRkclRhYmxlICAgICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUgICAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBSZW1Qb3J0VGFibGUgICAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Cisgc2N0cFN0YXRzICAgICAgICAgICAgICAgICAgICBMICAgICAgICAgNS41ICAgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgorIHNjdHBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNSAgICAgUyBzY3RwLW1pYi9zY3RwU2NhbGFycyoKKyBzY3RwQXNzb2NUYWJsZSAgICAgICAgICAgICAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlICAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cEFzc29jUmVtQWRkclRhYmxlICAgICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUgICAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBSZW1Qb3J0VGFibGUgICAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU05NUC1UU00tTUlCCisgc25tcFRzbVN0YXRzICAgICAgICAgICAgICAgICBBICAgICAgICAgNS42ICAgICBEIHRzbS1taWIvc25tcFRzbVN0YXRzLz0KKyBzbm1wQ29uZmlndXJhdGlvbiAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIFcgdHNtLW1pYi89CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVExTVE0tTUlCCisgc25tcFRsc3RtU2Vzc2lvbiAgICAgICAgICAgICBBICAgICAgICAgNS42ICAgICBXIHRsc3RtLW1pYi89LyoKKyB0bHN0bUNlcnRpZmljYXRlTWFwcGluZy4qICAgIEEgICAgICAgICA1LjYgICAgIHcgdGxzdG0tbWliLz0KKyB0bHN0bUNlcnRUb1RTTlRhYmxlICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIEQgdGxzdG0tbWliLz0vKgorIHRsc3RtUGFyYW1zVGFibGUgICAgICAgICAgICAgQSAgICAgICAgIDUuNiAgICAgRCB0bHN0bS1taWIvPS8qCisgdGxzdG1BZGRyVGFibGUgICAgICAgICAgICAgICBBICAgICAgICAgNS42ICAgICBEIHRsc3RtLW1pYi89LyoKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTQyNSw2ICs0NDcsNyBAQAogLS0tLS0tLS0tLQogIDE6IGF2YWlsYWJsZSBmb3Igc3lzdGVtcyB1c2luZyBLQU1FIGlwdjYKICAyOiB3aXRoIHBsYXRmb3JtIFNESy4gU2VlIFJFQURNRS53aW4zMgorIDM6IHdvcmtzIG9ubHkgd2l0aCBJbnRlbCBhbmQgQnJvYWRjb20gbmV0d29yayBjYXJkcyBhbmQgbXVzdCBydW4gYXMgcm9vdCBvbmx5CiAKIE90aGVyIGZlYXR1cmUgaW5mbwogLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzUsMyArNDU4LDUgQEAKICBwcm9wZXIgY29udGV4dCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgIDUuMgogIERJU01BTi1FVkVOVC1NSUIgaW1wbGVtZW50YXRpb24gcmV3cml0ZSAgNS4zCiAgQWdlbnRYLCBob3N0LCBkaXNtYW4vZXZlbnQgYnkgZGVmYXVsdCAgICA1LjMKKyBTU0ggVHJhbnNwb3J0IG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIDUuNQorIChEKVRMUyBUcmFuc3BvcnQgbW9kdWxlICAgICAgICAgICAgICAgICAgNS42CmRpZmYgLS1naXQgYS9SRUFETUUuYWl4IGIvUkVBRE1FLmFpeAppbmRleCAxNmY3MjVlLi5lMjVlOWI2IDEwMDY0NAotLS0gYS9SRUFETUUuYWl4CisrKyBiL1JFQURNRS5haXgKQEAgLTYsNyArNiw2IEBACiAKIFRoZXJlIGFyZSB0aGUgZm9sbG93aW5nIGtub3duIHByb2JsZW1zIG9uIEFJWDoKIAotCiAxKSBTaGFyZWQgbGlicmFyaWVzIC8gZW1iZWRkZWQgcGVybAogCiBVcCB0byAoYW5kIGluY2x1ZGluZykgbmV0LXNubXAgNS40LCBjb25maWd1cmUgZm9yY2VkIGEgc3RhdGljIGJ1aWxkCkBAIC0xNCwxMSArMTMsMTAgQEAKIAogU3RhcnRpbmcgd2l0aCBuZXQtc25tcCA1LjQuMSwgd2UgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0IG9uIEFJWAogKGxpa2Ugb24gYW55IG90aGVyIHBsYXRmb3JtKSB1c2luZyBydW4tdGltZSBsaW5raW5nLiBjb25maWd1cmUgZm9yY2VzIHRoZQotdXNlIG9mIHRoZSByZXF1aXJlZCAiLWJydGwiIGxpbmtlciBmbGFnLiBXZSBhbHNvIHJlY29tbWVuZAordXNlIG9mIHRoZSByZXF1aXJlZCAiLWJydGwiIGxpbmtlciBmbGFnLgogCi0gICAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hcy1uZWVkZWQgLi4uCi0KLWZvciBwcm9wZXIgbGlicGVybCBsaW5raW5nLgorV2l0aCBuZXQtc25tcCA1LjUgdGhlIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIGlzIGJyb2tlbiBhZ2FpbiBidXQgdGhlIHRoZXJlIGlzCitubyBmb3JjZWQgc3RhdGljIGJ1aWxkIC0gdXNlIC0tZGlzYWJsZS1zaGFyZWQgd2hlbiBidWlsZGluZy4KIAogMikgImdyZXA6IGNhcGFjaXR5IGV4Y2VlZGVkIiBvciAic2VkOiBDb21tYW5kIGxpbmUgaXMgdG9vIGxvbmciIGR1cmluZyBjb25maWd1cmUKIApkaWZmIC0tZ2l0IGEvUkVBRE1FLmlyaXggYi9SRUFETUUuaXJpeAppbmRleCA3OWJmN2VjLi5jNzk3N2U5IDEwMDY0NAotLS0gYS9SRUFETUUuaXJpeAorKysgYi9SRUFETUUuaXJpeApAQCAtMzQsMTcgKzM0LDcgQEAKICAgaHR0cDovL3NmLm5ldC9zdXBwb3J0L3RyYWNrZXIucGhwP2FpZD0xNjc1ODY5CiAKIAotMy4gUGVybAotLS0tLS0tLQotCi1XaGVuIGNvbXBpbGluZyB3aXRoIFBlcmwgc3VwcG9ydCwgaXQncyByZWNvbW1lbmRlZCB0byBzcGVjaWZ5Ci0KLSAgLi9jb25maWd1cmUgLS1lbmFibGUtYXMtbmVlZGVkCi0KLWZvciBwcm9wZXIgbGlicGVybCBsaW5raW5nLgotCi0KLTQuIEtub3duIElzc3VlcworMy4gS25vd24gSXNzdWVzCiAtLS0tLS0tLS0tLS0tLS0KIAogQWNjZXNzaW5nIGNlcnRhaW4gTUlCIG9iamVjdHMgb24gSVJJWDY0IG1hY2hpbmVzIChpLmUuIHdoZW4gcnVubmluZyBhIDY0LWJpdCAKQEAgLTU2LDcgKzQ2LDcgQEAKICAgIC4vY29uZmlndXJlIC0td2l0aG91dC1rbWVtLXVzYWdlIC4uLgogCiAKLTUuIEZlZWRiYWNrCiszLiBGZWVkYmFjawogLS0tLS0tLS0tLS0KIAogUGxlYXNlIGFsc28gc2VlIFJFQURNRSBhbmQgUE9SVElORy4KZGlmZiAtLWdpdCBhL1JFQURNRS5vc1ggYi9SRUFETUUub3NYCmluZGV4IGIxNWFmYTcuLjQ5YjU4ZTcgMTAwNjQ0Ci0tLSBhL1JFQURNRS5vc1gKKysrIGIvUkVBRE1FLm9zWApAQCAtNywxMCArNyw2IEBACiAKICAgLSBBTEwKIAotICAgIC0gVGVzdCA0NCAoUGVybCBBZ2VudFggU3ViYWdlbnQpIGZhaWxzLgotCi0gICAgICAgLSBjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1hcy1uZWVkZWQgZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcKLQogICAgIC0gbmxpc3QgZG9lc24ndCBzdXBwb3J0IGljbXBzdGF0CiAKICAgICAgICAtIGRpc2FibGUgdGhlIGljbXAgbW9kdWxlIGR1cmluZyBjb25maWd1cmUgYnkgc3BlY2lmeWluZwpAQCAtMTksNyArMTUsNyBAQAogCiAKICAgLSAxMC40LjcgKFVuaXZlcnNhbCkgYW5kIExlb3BhcmQgd2l0aCA1LjQgc291cmNlczoKLSAgICAgICAgW1N1cHBsaWVkIGJ5IENocmlzIEphbGJlcnQsIHNsaWdodGx5IHVwZGF0ZWRdCisgICAgICAgIFtTdXBwbGllZCBieSBDaHJpcyBKYWxiZXJ0XQogCiAgICAgICAgLSBidWlsZCB1c2luZyBnY2MgNC4wIChzZWUgYmVsb3cpIGFuZCBjb25maWd1cmUgdXNpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9L3Zhci9kYi9uZXQtc25tcCBcCkBAIC0yNyw3ICsyMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcnBtIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1taWItbW9kdWxlcz0iaG9zdCB1Y2Qtc25tcC9kaXNraW8iIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1vdXQtbWliLW1vZHVsZXM9Im1pYklJL2ljbXAgaG9zdC9ocl9zd3J1biIgXAotICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtYXMtbmVlZGVkIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1rbWVtLXVzYWdlCiAKICAgICAgICBUaGUgZmlyc3QgbGluZSBzZXRzIHVwIHBlcnNpc3RlbnQgc3RvcmFnZSBpbiB0aGUgT1MgWCBzdGFuZGFyZCBsb2NhdGlvbi4KQEAgLTY0LDIwICs1OSwzIEBACiAgICAgICAgICAgICAgICAgICAgLS1wcmVmaXg9L3VzciAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9L3Zhci9kYi91Y2Qtc25tcAogICAgICAgICAgICAgICAgICAgIC0td2l0aC1taWItbW9kdWxlcz1ob3N0CiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2l0aCBNYWMgT1MgWCAxMC41LjIsIGFuZCBOZXQtU05NUCA1LjQuMiwgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgotc2VlbXMgdG8gYnVpbGQgYW5kIHJ1biBzdWNjZXNzZnVsbHkuICAgVGhlIG1haW4gdHdlYWsgbmVlZGVkIHRvIGdldAotdGhpbmdzIHdvcmtpbmcgd2FzIHRvIGRpc2FibGUgImVtYmVkZGVkIHBlcmwiICh3aGljaCBpcyBhY3RpdmUgYnkKLWRlZmF1bHQgaW4gNS40IGFuZCBhYm92ZSkuCi0KLSAgVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCBlbmFibGluZyBlbWJlZGRlZCBwZXJsIHdpbGwgdHJ5IHRvIHVzZSB0aGUKLXNhbWUgQ0ZMQUdTIHVzZWQgZm9yIGNvbXBpbGluZyBwZXJsLCB3aGVuIGNvbXBpbGluZyB0aGUgTmV0LVNOTVAgY29kZQotKHdoaWNoIGlzIHByb2JhYmx5IHJlYXNvbmFibGUpLiAgVW5mb3J0dW5hdGVseSwgdGhlIGRlZmF1bHQgcGVybCBiaW5hcnkKLXRoYXQgY29tZXMgd2l0aCBNYWMgT1MvWCAxMC41IChhdCBsZWFzdCkgaXMgYSAidW5pdmVyc2FsIGJpbmFyeSIsCi1zbyB0aGUgQ0ZMQUdTIHRoYXQgaXQgdXNlcyBpbmNsdWRlICItYXJjaCBpMzg2IC1hcmNoIHBwYyIuICBUaGlzCi1kdWFsLWFyY2hpdGVjdHVyZSBvcHRpb24gY29uZnVzZXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIGFuZCBtZWFucwotdGhhdCBpdCBjYW5ub3QgZGV0ZWN0IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGhvc3Qgc3lzdGVtIGNvcnJlY3RseS4KLQotRGF2ZQotSnVuZSAyMDA4CmRpZmYgLS1naXQgYS9SRUFETUUuc25tcHYzIGIvUkVBRE1FLnNubXB2MwppbmRleCAyNjNjOTU1Li45OWU0MjM4IDEwMDY0NAotLS0gYS9SRUFETUUuc25tcHYzCisrKyBiL1JFQURNRS5zbm1wdjMKQEAgLTUsNyArNSw5IEBACiBkb2Vzbid0IDstKSAtLVdlczoKIAogTm90ZTogU0hBIGF1dGhlbnRpY2F0aW9uIGFuZCBERVMvQUVTIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZQotaWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQuCitpZiB5b3UgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZCBvciBpZiB5b3UndmUgY29tcGlsZWQgdXNpbmcKKy0td2l0aC1vcGVuc3NsPWludGVybmFsLiAgSWYgeW91IHVzZSAtLXdpdGgtb3BlbnNzbD1pbnRlcm5hbCBwbGVhc2UKK3JlYWQgdGhlIGRvY3VtZW50YXRpb24gaW4gc25tcGxpYi9vcGVuc3NsL1JFQURNRSBmb3IgaW1wb3J0YW50IGRldGFpbHMuCiAKIE5vdGU6IGVuY3J5cHRpb24gc3VwcG9ydCBub3cgKmlzKiBlbmFibGVkIGluIHRoZSBiaW5hcnkgcmVsZWFzZXMgZG93bmxvYWRhYmxlCiBmcm9tIHRoZSBuZXQtc25tcCB3ZWIgc2l0ZS4KZGlmZiAtLWdpdCBhL1JFQURNRS5zb2xhcmlzIGIvUkVBRE1FLnNvbGFyaXMKaW5kZXggYWViY2U2Zi4uNjI1YWFlMiAxMDA2NDQKLS0tIGEvUkVBRE1FLnNvbGFyaXMKKysrIGIvUkVBRE1FLnNvbGFyaXMKQEAgLTk5NCwxMCArOTk0LDggQEAKIAogICAgLi9jb25maWd1cmUgLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC4uLgogCi1JdCdzIHJlY29tbWVuZGVkIHRvIGFkZCAtLWVuYWJsZS1hcy1uZWVkZWQgZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcuCi0KLUVuYWJsaW5nIFBlcmwgc3VwcG9ydCBzaG91bGQgb25seSBiZSBkb25lIGlmIHlvdSBhcmUgc3VyZSB5b3UgcmVhbGx5IAotbmVlZCBQZXJsLCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOgorVGhpcyBzaG91bGQgb25seSBiZSBkb25lIGlmIHlvdSBhcmUgc3VyZSB5b3UgcmVhbGx5IG5lZWQgUGVybCwgCitmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOgogCiBTb2xhcmlzIDggYW5kIGxhdGVyIHNoaXAgd2l0aCBhIHZlcnNpb24gb2YgUGVybCBjb21waWxlZCB1c2luZyBTdW4ncyBjYy4gCiAKZGlmZiAtLWdpdCBhL1JFQURNRS5zcWwgYi9SRUFETUUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjcwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUuc3FsCkBAIC0wLDAgKzEsMjkgQEAKK3NubXB0cmFwZCBNeVNRTCBMb2dnaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHRyYXAgaGFuZGxlciBmb3IgbG9nZ2luZyB0cmFwcyB0byBhIE15U1FMIGRhdGFiYXNlIHdhcyBhZGRlZAoraW4gcmVsZWFzZSA1LjUuMC4KKworVGhlIE15U1FMIGRhdGFiYXNlIGxvY2F0aW9uIGFuZCBwYXNzd29yZCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4KKy9yb290Ly5teS5jbmY6CisKKwlbc25tcHRyYXBkXQorCWhvc3Q9bG9jYWxob3N0CisJcGFzc3dvcmQ9c3FsCisKK1VzZXIgbWF5IGFsc28gYmUgY29uZmlndXJlZCwgaWYgdXNpbmcgYSBNeVNRTCB1c2VyIGJlc2lkZXMgcm9vdC4KKworc25tcHRyYXBkLmNvbmYgbXVzdCBiZSBjb25maWd1cmVkIHRvIGZvciB0aGUgcXVldWUgc2l6ZSBhbmQKK3BlcmlvZGljIGZsdXNoIGludGVydmFsOgorCisJIyBtYXhpbXVtIG51bWJlciBvZiB0cmFwcyB0byBxdWV1ZSBiZWZvcmUgZm9yY2VkIGZsdXNoCisJc3FsTWF4UXVldWUgMTQwCisKKwkjIHNlY29uZHMgYmV0d2VlbiBwZXJpb2RpYyBxdWV1ZSBmbHVzaGVzCisJc3FsU2F2ZUludGVydmFsIDkKKworQSB2YWx1ZSBvZiAwIGZvciBzcWxTYXZlSW50ZXJ2YWwgd2lsbCBjb21wbGV0ZWx5IGRpc2FibGUgTXlTUUwKK2xvZ2dpbmcgb2YgdHJhcHMuCisKK1RoZSBzY2hlbWEgbXVzdCBiZSBsb2FkZWQgaW50byBNeVNRTCBiZWZvcmUgcnVubmluZyBzbm1wdHJhcGQuCitUaGUgc2NoZW1hIGNhbiBiZSBmb3VuZCBpbiBkaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsCmRpZmYgLS1naXQgYS9SRUFETUUud2luMzIgYi9SRUFETUUud2luMzIKaW5kZXggZDk0MmI4YS4uZTQ5MjQzYiAxMDA2NDQKLS0tIGEvUkVBRE1FLndpbjMyCisrKyBiL1JFQURNRS53aW4zMgpAQCAtNCwxNCArNCwxMyBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLVRoaXMgZ3VpZGUgZGVzY3JpYmVzIGJ1aWxkaW5nIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wIGFuZCBoaWdoZXIsIHdpdGgKLXRoZSBnY2MgY29tcGlsZXIgZnJvbSBNaW5HVyAvIE1TWVMsIGFuZCB3aXRoIHRoZSBnY2MgY29tcGlsZXIgZnJvbSBDeWd3aW4uCi1BcyBkZXZlbG9wZXJzIGJ1aWxkIHdpdGggb3RoZXIgV2luMzIgZW52aXJvbm1lbnRzLCB0aGVpciBub3RlcyB3aWxsIGJlIAotaW5jbHVkZWQgaGVyZS4KK1RoaXMgZ3VpZGUgZGVzY3JpYmVzIGhvdyB0byBidWlsZCBOZXQtU05NUCB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrLCB0aGUKK01pbkdXIGdjYyBjb21waWxlciBvciB0aGUgQ3lnd2luIGdjYyBjb21waWxlci4gIEFzIGRldmVsb3BlcnMgYnVpbGQgd2l0aCBvdGhlcgorV2luMzIgZW52aXJvbm1lbnRzLCB0aGVpciBub3RlcyB3aWxsIGJlIGluY2x1ZGVkIGhlcmUuCiAKLVRoZSByZW1haW5kZXIgb2YgdGhpcyBndWlkZSBoYXMgdGhlIGZvbGxvd2luZyBzZWN0aW9ucyA6CitUaGUgc2VjdGlvbnMgaW4gdGhpcyBndWlkZSBhcmU6CiAKLVN0YXR1cyBhcyBvZiAxNC1PY3QtMjAwNiBmb3IgV2luMzIgcGxhdGZvcm1zCitDdXJyZW50IFN0YXR1cyBmb3IgV2luMzIgcGxhdGZvcm1zCiBJbnRlcmFjdGlvbnMgd2l0aCBPdGhlciBWZW5kb3IncyBQcm9kdWN0cwogUnVubmluZyBOZXQtU05NUCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgTWljcm9zb2Z0IFNOTVAgc2VydmljZQogQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMKQEAgLTM5LDMyICszOCwzMiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogU3RhdHVzIGFzIG9mIDE0LU9jdC0yMDA2IGZvciBXaW4zMiBwbGF0Zm9ybXMKKyogTmV0LVNOTVAgc3RhdHVzIGZvciBXaW4zMiBwbGF0Zm9ybXMKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBBbGwgYXBwbGljYXRpb25zIGJ1aWxkIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wLCBNaWNyb3NvZnQgRGV2ZWxvcG1lbnQKLUVudmlyb25tZW50IDIwMDMgKE1TVkMgNy4wLzcuMSksIGdjYyB1bmRlciBDeWd3aW4sIGFuZCBnY2MgdW5kZXIgTWluR1cuICAKK0Vudmlyb25tZW50IDIwMDMgKE1TVkMgNy4wLzcuMSksIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMDUsIE1pY3Jvc29mdAorVmlzdWFsIFN0dWRpbyAyMDA4LCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwLCBnY2MgdW5kZXIgQ3lnd2luIGFuZCBnY2MKK3VuZGVyIE1pbkdXLgogCi0gIC0gIEFsbCBvZiB0aGUgYXBwbGljYXRpb25zIHdvcmsKLSAgICAgKHNubXB3YWxrLCBzbm1wZ2V0LCBzbm1wc2V0LCBzbm1wdHJhcCwgZXRjLi4uKS4KLSAgLSAgVGhlIHN5c3RlbSwgc25tcCwgaXAsIHRjcCwgdWRwLCBpY21wIG1pYmdyb3VwcyBmdW5jdGlvbgotICAgICAgICAgKHdoZW4gYWdlbnQgaXMgYnVpbHQgdXNpbmcgdGhlIHNubXBkc2RrIHByb2plY3QpLgorICAtICBBbGwgb2YgdGhlIGFwcGxpY2F0aW9ucyB3b3JrIChzbm1wd2Fsaywgc25tcGdldCwgc25tcHNldCwgc25tcHRyYXAsIC4uLikuCisgIC0gIFRoZSBzeXN0ZW0sIHNubXAsIGlwLCB0Y3AsIHVkcCBhbmQgaWNtcCBNSUItZ3JvdXBzIHdvcmsgKHJlcXVpcmVzIHRoZQorICAgICBQbGF0Zm9ybSBTREspLgogICAtICBUaGUgTmV0LVNOTVAgYWdlbnQgcnVucyBhcyBhbiBBZ2VudFggbWFzdGVyIGFnZW50IG9yIGFzIHN1YmFnZW50LgogICAtICBzbXV4IGlzIHdvcmtpbmcuCiAgIC0gIFRoZSB0YXJnZXQsIG5vdGlmaWNhdGlvbiwgZGlzbWFuL210ZSBncm91cHMgY29tcGlsZSBidXQgYXJlIG5vdCB0ZXN0ZWQuCiAgIC0gIFRoZSBUQ1AvSVB2NiBhbmQgVURQL0lQdjYgdHJhbnNwb3J0cyBjb21waWxlIGJ1dCBhcmUgbm90IHRlc3RlZC4KLSAgICAgICAgIAogICAtICBFeHRlbmRpbmcgdGhlIGFnZW50IHRvIHN1cHBvcnQgZW50ZXJwcmlzZS1zcGVjaWZpYyBNSUJzIHdvcmtzLgogICAtICBSdW5uaW5nIHRoZSBhZ2VudCBvbiBhIG5vbi1zdGFuZGFyZCBVRFAgb3IgVENQIHBvcnQgd29ya3MuCi0gIC0gIFNubXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBOVC8yMDAwL1hQIHNlcnZpY2UuCi0gIC0gIFNubXB0cmFwZCBjYW4gYmUgcmVnaXN0ZXJlZCBhcyBhIFdpbmRvd3MgTlQvMjAwMC9YUCBzZXJ2aWNlLgorICAtICBTbm1wZCBjYW4gYmUgcmVnaXN0ZXJlZCBhcyBhIFdpbmRvd3Mgc2VydmljZS4KKyAgLSAgU25tcHRyYXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBzZXJ2aWNlLgogICAtICBTb21lIGJ1aWxkIGVudmlyb25tZW50cyBhbGxvdyBsb25nIHBhdGhuYW1lcyB0aGF0IGNvbnRhaW4KICAgICAgZW1iZWRkZWQgc3BhY2VzLiAgQXMgdGhpcyBpcyBub3QgdHJ1ZSBmb3IgQ3lnd2luICJjb25maWd1cmUiLAogICAgICB0aGUgZG9jdW1lbnRlZCBleGFtcGxlIHNjcmlwdHMgd2lsbCByZWZlciB0byAiYzovdXNyIgogICAgICBhcyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9yIGluc3RhbGxlZCBOZXQtU05NUCBzb2Z0d2FyZS4KICAgLSAgV2hlbiB1c2luZyB0aGUgd2luRXh0RExMIGV4dGVuc2lvbiBhZ2VudCwgdGhlIE5ldC1TTk1QIGFnZW50IHdpbGwKLSAgICAgbG9hZCB0aGUgV2luZG93cyBTTk1QIFNlcnZpY2UgZXh0ZW5zaW9uIERMTHMKKyAgICAgbG9hZCB0aGUgV2luZG93cyBTTk1QIFNlcnZpY2UgZXh0ZW5zaW9uIERMTHMuCiAKIFRoZSBuZXh0IHN1YnNlY3Rpb24gcmVsYXRlcyB0byBpdGVtcyB0aGF0IGFyZSBidWlsdCB1c2luZyBWaXN1YWwgU3R1ZGlvCiAKQEAgLTc4LDggKzc3LDEzIEBACiAgIC0gIEFsbCBEZWJ1ZyBhbmQgUmVsZWFzZSB0YXJnZXRzIGxpbmtlZCB3aXRoIGxpYnNubXAgcHJvamVjdCB0YXJnZXRzCiAgICAgIGJ1aWxkIHdpdGhvdXQgZXJyb3JzLCBhbmQgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCiAKLSAgLSAgQm90aCB0aGUgV29ya3NwYWNlIGdyYXBoaWNhbCBlbnZpcm9ubWVudCBhbmQgY29tbWFuZCBsaW5lIG5tYWtlIGlzIAotICAgICBzdXBwb3J0ZWQgZm9yIGJ1aWxkaW5nIHVuZGVyIE1TVkMuCisgIC0gIEJvdGggYnVpbGRpbmcgdmlhIHRoZSBpbnRlcmFjdGl2ZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgdmlhIHRoZQorICAgICBjb21tYW5kIGxpbmUgKG5tYWtlKSBpcyBzdXBwb3J0ZWQuCisKKyAgLSAgV2l0aCBWaXN1YWwgU3R1ZGlvIDIwMDUgYW5kIGxhdGVyLCB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgY2FuIGJlCisgICAgIGNvbXBpbGVkIGludG8gZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgZXhlY3V0YWJsZXMgKHRoZSBhbWQ2NC94NjQKKyAgICAgYXJjaGl0ZWN0dXJlKS4gUHJldmlvdXMgVmlzdWFsIFN0dWRpbyB2ZXJzaW9ucyBzdXBwb3J0IDMyLWJpdCBleGVjdXRhYmxlcworICAgICBvbmx5LgogCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAxLDkgKzEwNSw5IEBACiAgICAgIENoZWNrIHRoZSBTZXJ2aWNlcyBwYW5lbCB0byBiZSBzdXJlIG5vIG90aGVyIFNOTVAgcHJvZ3JhbSBjb25mbGljdHMuIFNlZQogICAgICB0aGUgc2VjdGlvbiB0aXRsZWQgJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBiZWxvdy4KIAotICAtICBSdW5uaW5nIHRoZSBOZXQtU05NUCBhZ2VudCBpbnN0ZWFkIG9mIHRoZSBNUyBzdXBwbGllZCBvbmUgd29ya3MKLSAgICAgKGF0IHRoZSBsb3NzIG9mIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkpLiAgIFNlZSB0aGUgc2VjdGlvbiB0aXRsZWQgCi0gICAgICdDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcycgYmVsb3cuCisgIC0gIFRoZSBOZXQtU05NUCBhZ2VudCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBNUyBzdXBwbGllZCBvbmUgd2hpbGUKKyAgICAgcmV0YWluaW5nIGFsbCBmdW5jdGlvbmFsaXR5IGFuZCB3aXRoIHNsaWdodGx5IGJldHRlciBTTk1QIGNvbmZvcm1hbmNlLgorICAgICBTZWUgdGhlIHNlY3Rpb24gdGl0bGVkICdDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcycgYmVsb3cuCiAKICAgLSAgVGhlIE5ldC1TTk1QIGFnZW50IGRvZXMgbm90IHVzZSB0aGUgTVMgU05NUC5kbGwsIHRoZXJlZm9yZSBpdCBjYW5ub3QgCiAgICAgIHJ1biBhcyBhbiBleHRlbnNpYmxlIHBhcnQgb2YgdGhlIE1TIGFnZW50LiAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgdGhpcmQKQEAgLTE2Myw5ICsxNjcsOSBAQAogdGhlIGRlZmF1bHQgV2luZG93cyAoMjAwMykgZXh0ZW5zaW9ucyBpbmNsdWRlZCB3aXRoIFdpbmRvd3MuICBPdGhlciBOZXQtU05NUCAKIG1vZHVsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIG1vZHVsZXMgbG9hZGVkIGJ5IHdpbkV4dERMTC4KIAotVGhlIGJpbmFyeSBpbnN0YWxsIG9mIE5ldC1TTk1QIGluY2x1ZGVzIHNob3J0Y3V0cyBpbiB0aGUgU3RhcnQgbWVudSBmb3IgcmVnaXN0ZXJpbmcgCi1hbmQgdW5yZWdpc3RlcmluZyBzbm1wZCBhbmQgc25tcHRyYXBkIGFzIGEgc2VydmljZSB3aXRoIHRoZSBjb3JyZWN0IGNvbW1hbmQgbGluZSAKLW9wdGlvbnMuCitUaGUgYmluYXJ5IGluc3RhbGwgb2YgTmV0LVNOTVAgaW5jbHVkZXMgc2hvcnRjdXRzIGluIHRoZSBTdGFydCBtZW51IGZvcgorcmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgc25tcGQgYW5kIHNubXB0cmFwZCBhcyBhIHNlcnZpY2Ugd2l0aCB0aGUKK2NvcnJlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMuCiAKIEEgc2ltcGxlIHRlc3QgdG8gc2VlIGlmIHdpbkV4dERMTCBpcyB3b3JraW5nIGlzIHRvIGdldCB0aGUgc3lzRGVzY3Igc3RyaW5nLgogCkBAIC0yMzUsNyArMjM5LDEwIEBACiBDb21waWxpbmcgTmV0LVNOTVAgd2l0aCB0aGUgd2luRXh0RExMIGV4dGVuc2lvbiAoTVNWQykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGVuIGJ1aWxkaW5nIHdpdGggTVNWQyA2LCB0aGUgTWljcm9zb2Z0IFBsYXRmb3JtIFNESyBpcyByZXF1aXJlZC4KK1doZW4gYnVpbGRpbmcgd2l0aCBNU1ZDIDYsIHRoZSBNaWNyb3NvZnQgUGxhdGZvcm0gU0RLIGlzIHJlcXVpcmVkLiBOb3RlOiB0aGUKK21vc3QgcmVjZW50IFBsYXRmb3JtIFNESyB2ZXJzaW9uIHRoYXQgaXMgc3RpbGwgY29tcGF0aWJsZSB3aXRoIE1TVkMgNiBpcyB0aGUKK0ZlYnJ1YXJ5IDIwMDMgZWRpdGlvbi4gVGhpcyBlZGl0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgb25saW5lIGJ1dCBjYW4gYmUKK29yZGVyZWQgdmlhIGh0dHA6Ly9tc3Nkay5vcmRlcnBvcnQubmV0LzIyMjIxODQ4L3Nob3dhbGwuYXNwLgogCiBDb25maWd1cmUgLyBubWFrZToKIApAQCAtNDA1LDMzICs0MTIsMTggQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1JZiB5b3UgYXJlIGNvbXBpbGluZyB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKLXlvdSBpbnN0YWxsIHRoZSBDb3JlIFBsYXRmb3JtIFNESyAoUFNESykuICBXaXRob3V0IHRoZSBQU0RLLCBzb21lIGZ1bmN0aW9uYWxpdHkKLXdpbGwgYmUgZGlzYWJsZWQgc3VjaCBhcyB0aGUgY29yZSBlbGVtZW50cyBvZiB0aGUgbWliSUkgZ3JvdXAgb2YgdGhlIGFnZW50IAotd2hpY2ggdXNlIHRoZSAiSVAgSGVscGVyIEFQSSIgKElQSExQQVBJKS4KK0lmIHlvdSBhcmUgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wLCB5b3Ugd2lsbCBoYXZlIHRvIGluc3RhbGwgdGhlCitQbGF0Zm9ybSBTREsgKFBTREspIGZpcnN0LgogCi1UbyBkZXRlcm1pbmUgd2hhdCBjb2RlIGlzIGRpc2FibGVkIHdoZW4gdGhlIFBTREsgaXMgbm90IHVzZWQsIHNlYXJjaCB0aGUKLXNvdXJjZSBjb2RlIGZvciBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4KK09uY2UgdGhlIFBTREsgaGFzIGJlZW4gaW5zdGFsbGVkLCBzZWxlY3QgdGhlIGZvbGxvd2luZyBhY3Rpb24gZnJvbSB0aGUgU3RhcnQKK01lbnU6IFByb2dyYW1zIC8gTWljcm9zb2Z0IFdpbmRvd3MgU0RLIC8gVmlzdWFsIFN0dWRpbyBSZWdpc3RyYXRpb24gLyBXaW5kb3dzCitTREsgQ29uZmlndXJhdGlvbiBUb29sLgogCi1UaGUgUFNESyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBNU0ROIHNpdGUuICBHbyB0byBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tIAotYW5kIGRvIGEgc2VhcmNoIGZvciAncHNkayBkb3dubG9hZCcgKHdpdGhvdXQgdGhlIHF1b3RlcykuICBZb3Ugc2hvdWxkIGZpbmQgYm90aAotYSB3ZWIgaW5zdGFsbCBhbmQgYSBmdWxsIGluc3RhbGwuICAKLQotV2hlbiBpbnN0YWxsaW5nIHRoZSBTREssIGFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIHRoZSAnQ29yZScuCi0KLU9uY2UgdGhpcyBwYWNrYWdlIGhhcyBpbnN0YWxsZWQsIGZyb20gdGhlIFN0YXJ0IE1lbnUgcnVuIAotICAiUHJvZ3JhbXMgLT5NaWNyb3NvZnQgUGxhdGZvcm0gU0RLLi4uIC0+IAotICAgVmlzdWFsIFN0dWRpbyBSZWdpc3RyYXRpb24gLT4KLSAgIFJlZ2lzdGVyIFBTREsgRGlyZWN0b3JpZXMgd2l0aCBWaXN1YWwgU3R1ZGlvIgotCi1JZiB5b3UgYXJlIGNvbXBpbGluZyB1c2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBzeXN0ZW1zLCB0aGUgUFNESyBkb3dubG9hZAotaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhlIHJlcXVpcmVkIHBhcnRzIG9mIHRoZSBQU0RLIGFyZSBpbmNsdWRlZCB3aXRoIHRoZSAKLWluc3RhbGxhdGlvbiBvZiB0aGUgY29tcGlsZXI6Ci0KLSAgICAtIE1pY3Jvc29mdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCAyMDAyIChNU1ZDIDcuMCkKLSAgICAtIE1pY3Jvc29mdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCAyMDAzIChNU1ZDIDcuMSkKLSAgICAtIEN5Z3dpbiAoZ2NjKQotICAgIC0gTWluR1cgKGdjYykKK0lmIHlvdSBhcmUgdXNpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnRzLCB0aGUgUFNESyBkb3dubG9hZCBpcyBub3QKK25lY2Vzc2FyeSBhcyB0aGUgcmVxdWlyZWQgcGFydHMgb2YgdGhlIFBTREsgYXJlIGluY2x1ZGVkOgorICAgIC0gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwMiBvciBsYXRlci4KKyAgICAtIEN5Z3dpbi4KKyAgICAtIE1pbkdXLgogCiBJbiBvcmRlciBmb3IgdGhlIHByb2Nlc3MgcGFydCBvZiB0aGUgaG9zdCByZXNvdXJjZXMgTUlCIHRvIHdvcmsgdW5kZXIgV2luZG93cwogTlQgeW91IHdpbGwgbmVlZCB0byBvYnRhaW4gUFNBUEkuRExMLiBUaGlzIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgZG93bmxvYWQgCkBAIC00NTEsMTIgKzQ0MywxMyBAQAogCiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gYnVpbGQgTmV0LVNOTVAgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysuICBUaGUgZmlyc3QKIGFuZCBlYXNpZXN0IG1ldGhvZCBpcyB1c2luZyBDb25maWd1cmUgYW5kIG5tYWtlIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgCi1zZWNvbmQgaXMgdXNpbmcgdGhlIFdvcmtzcGFjZSBmaWxlcyB3aXRoIHRoZSBncmFwaGljYWwgaW50ZXJmYWNlLgorc2Vjb25kIGlzIHVzaW5nIHRoZSBXb3Jrc3BhY2UgZmlsZXMgaW5zaWRlIHRoZSBpbnRlcmFjdGl2ZSBkZXZlbG9wbWVudAorZW52aXJvbm1lbnQuCiAKIFRvIHVzZSBubWFrZSBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgQ29uZmlndXJlIHNjcmlwdCBpcyBydW4gZmlyc3QgdG8gY3JlYXRlCi10aGUgdmFyaW91cyBtYWtlIGZpbGVzLiAgT25jZSB0aGV5IGFyZSBjcmVhdGVkLCBubWFrZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSAKLWFwcGxpY2F0aW9ucy4gIFBlcmwgaXMgcmVxdWlyZWQgdG8gdXNlIHRoaXMgbWV0aG9kLCBhcyB0aGUgQ29uZmlndXJlIHNjcmlwdAotaXMgd3JpdHRlbiBpbiBQZXJsLiAgQWN0aXZlU3RhdGUgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUgYXQ6Cit0aGUgdmFyaW91cyBtYWtlZmlsZXMuICBPbmNlIHRoZXNlIGhhdmUgYmVlbiBjcmVhdGVkLCBubWFrZSBpcyB1c2VkIHRvIGJ1aWxkCit0aGUgYXBwbGljYXRpb25zLiAgUGVybCBpcyByZXF1aXJlZCB0byB1c2UgdGhpcyBtZXRob2QsIGFzIHRoZSBDb25maWd1cmUKK3NjcmlwdCBpcyB3cml0dGVuIGluIFBlcmwuICBBY3RpdmVTdGF0ZSBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZSBhdDoKIAogICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9Qcm9kdWN0cy9BY3RpdmVQZXJsLwogCkBAIC00NjUsNTIgKzQ1OCw0MSBAQAogcmVjb21tZW5kZWQgdGhhdCB5b3UgcmVhZCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHdvcmtzcGFjZXMgYXJlIGNvbmZpZ3VyZWQKIGV2ZW4gaWYgeW91IHdpbGwgb25seSBiZSB1c2luZyB0aGUgY29tbWFuZCBsaW5lIENvbmZpZ3VyZSAvIG5tYWtlIHN5c3RlbS4KIAotRm9yIHRoZSBncmFwaGljYWwgaW50ZXJmYWNlLCB0aGVyZSBhcmUgdHdvIG1haW4gV2luMzIgd29ya3NwYWNlcyAKLSgnd2luMzIuZHN3JyBhbmQgJ3dpbjMyc2RrLmRzdycpLCBjb250YWluaW5nIG1vcmUgb3IgbGVzcyB0aGUgc2FtZSBzZXQgCi1vZiBwcm9qZWN0cywgcGx1cyAnbGliZGxsLmRzdycgd2hpY2ggY29udGFpbnMgYSBtaW5pbWFsIHNldCBvZiBwcm9qZWN0cyAKLWZvciB1c2Ugd2l0aCB0aGUgUGVybCBtb2R1bGUgb25seS4gIAotCi1XaW4zMi5kc3cgaXMgZm9yIGRldmVsb3BlcnMgd2hvIGhhdmUgbm90IGluc3RhbGxlZCB0aGUgUGxhdGZvcm0gU0RLIGZyb20gCi1NaWNyb3NvZnQncyBNU0ROIFNESyBVcGRhdGUgc2l0ZSB3aGVuIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuMC4KLVdpbjMyc2RrLmRzdyBpcyBmb3IgdGhvc2Ugd2hvIGhhdmUgb3Igd2hvIGFyZSB1c2luZyB0aGUgTWljcm9zb2Z0IERldmVsb3BtZW50IAotRW52aXJvbm1lbnQgMjAwMi8yMDAzIChNU1ZDIDcuMC83LjEpLCBDeWd3aW4gKGdjYykgb3IgTWluR1cgKGdjYykuCi0KLUxpYmRsbC5kc3cgY29tcGlsZXMgYSBETEwgdmVyc2lvbiBvZiBzbm1wbGliIChuZXRzbm1wLmRsbCkuCitGb3IgYnVpbGRpbmcgdmlhIHRoZSBpbnRlcmFjdGl2ZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgdGhlcmUgYXJlIHRoZSBXaW4zMgord29ya3NwYWNlcyB3aW4zMi5kc3cgYW5kIGxpYmRsbC5kc3cuIFRoZSBsYXN0IHdvcmtzcGFjZSBhbGxvd3MgdG8gYnVpbGQgYSBETEwKK3ZlcnNpb24gb2Ygc25tcGxpYiAobmV0c25tcC5kbGwpLgogCiBUaGVyZSBpcyBvbmUgY29yZSBkZXZlbG9wbWVudCBsaWJyYXJ5ICgnbGlic25tcCcpLCB0b2dldGhlciB3aXRoIGEgbnVtYmVyIAogb2YgdXRpbGl0eSBwcm9qZWN0cyBmb3IgdGhlIGluZGl2aWR1YWwgZXhlY3V0YWJsZSBjb21tYW5kcyAoJ3NubXBnZXQnLCAKICdzbm1wd2FsaycsIGV0Yy4uLikuICBBbGwgb2YgdGhlc2UgcHJvamVjdHMgcmVxdWlyZSB0aGUgLmxpYiBjcmVhdGVkIGJ5IAogdGhlIGxpYnNubXAgcHJvamVjdC4KIAotVGhlIGFnZW50IHJlcXVpcmVzIHRoZSBjb3JlIGxpYnJhcnkgcGx1cyB0aGUgb3RoZXIgdGhyZWUgbGlicmFyeSBwcm9qZWN0cyAKLSgnbGliYWdlbnQnLCBsaWJoZWxwZXJzJyBhbmQgZWl0aGVyICduZXRzbm1wbWlicycgb3IgJ25ldHNubXBtaWJzc2RrJyAKLWRlcGVuZGluZyBvbiB3aGljaCB3b3Jrc3BhY2UgaXMgYmVpbmcgdXNlZCkgdG9nZXRoZXIgd2l0aCB0aGUgbWFpbiBhZ2VudCAKLXByb2plY3QgKGVpdGhlciAnc25tcGQnIG9yICdzbm1wZHNkaycpLgorVGhlIGFnZW50IHJlcXVpcmVzIHRoZSBjb3JlIGxpYnJhcnkgcGx1cyB0aGUgb3RoZXIgdHdvIGxpYnJhcnkgcHJvamVjdHMKKygnbGliYWdlbnQnIGFuZCAnbmV0c25tcG1pYnMnKSB0b2dldGhlciB3aXRoIHRoZSBtYWluIGFnZW50IHByb2plY3QgKCdzbm1wZCcpLgogCiBUaGUgZmluYWwgYXBwbGljYXRpb24gcHJvamVjdCBpcyB0aGUgdHJhcCBoYW5kbGVyICdzbm1wdHJhcGQnLiAgVGhpcyBhbHNvCi1yZXF1aXJlcyB0aGUgYWdlbnQgbGlicmFyaWVzICgnbGliYWdlbnQnLCAnbGliaGVscGVycycgYW5kICduZXRzbm1wbWlicycpCi1hcyB3ZWxsIGFzIHRoZSBjb3JlIGRldmVsb3BtZW50IGxpYnJhcnkuCityZXF1aXJlcyB0aGUgYWdlbnQgbGlicmFyaWVzICgnbGliYWdlbnQnIGFuZCAnbmV0c25tcG1pYnMnKSBhcyB3ZWxsIGFzIHRoZQorY29yZSBkZXZlbG9wbWVudCBsaWJyYXJ5LgogCi1UaGVyZSBpcyBhIERlYnVnIHZlcnNpb24gYW5kIFJlbGVhc2UgdmVyc2lvbiBmb3IgZWFjaCBzdWJwcm9qZWN0LgotVGhpcyBpcyBzbyB0aGUgRGVidWcgYW5kIFJlbGVhc2UgdmVyc2lvbnMgb2YgYW4gYXBwbGljYXRpb24gY2FuIGJlIGJ1aWx0IGFuZCAKLXRlc3RlZCBzZXBhcmF0ZWx5LgorVGhlcmUgaXMgYSBEZWJ1ZyB2ZXJzaW9uIGFuZCBSZWxlYXNlIHZlcnNpb24gZm9yIGVhY2ggc3VicHJvamVjdC4gIFRoaXMgaXMgc28KK3RoZSBEZWJ1ZyBhbmQgUmVsZWFzZSB2ZXJzaW9ucyBvZiBhbiBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgYW5kIHRlc3RlZAorc2VwYXJhdGVseS4KIAotQm90aCBWQysrIDYuMCBhbmQgNy4xIGhhdmUgYmVlbiB0ZXN0ZWQuICBCdWlsZGluZyB3aXRoIGVhcmxpZXIgTWljcm9zb2Z0Ci1jb21waWxlciB2ZXJzaW9ucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorVkMrKyA2LjAsIDcuMSwgOC4wICgyMDA1KSwgOS4wICgyMDA4KSBhbmQgMTAuMCAoMjAxMCkgaGF2ZSBiZWVuIHRlc3RlZC4KK0J1aWxkaW5nIHdpdGggZWFybGllciBNaWNyb3NvZnQgY29tcGlsZXIgdmVyc2lvbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KIAotTm90ZTogIENvbXBpbGluZyBOZXQtU05NUCB1c2luZyBNU1ZDIDIwMDMgLk5FVCAoTVNWQyA3LjEpIHdpbGwgYWRkIGEgCi0gICAgICAgZGVwZW5kZW5jeSBvZiBNU1ZDUjcxLkRMTCBmb3IgTkVUU05NUC5ETEwgYW5kIGFsbCBhcHBsaWNhdGlvbnMuCi0gICAgICAgU2VhcmNoIG1zZG4ubWljcm9zb2Z0LmNvbSBmb3IgbXN2Y3I3MS5kbGwgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICAgICBvbiBkaXN0cmlidXRpbmcgYXBwbGljYXRpb25zIGNvbXBpbGVkIHdpdGggTVNWQyAyMDAzIC5OZXQuCitOb3RlOiBpZiB5b3Ugd2FudCB0byBkaXN0cmlidXRlIHRoZSBnZW5lcmF0ZWQgZXhlY3V0YWJsZSwgeW91IHdpbGwgYWxzbyBuZWVkCit0byBkaXN0cmlidXRlIHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBSZWRpc3RyaWJ1dGFibGUgUGFja2FnZS4gQ2hlY2sgdGhlCitFVUxBIGluY2x1ZGVkIHdpdGggdGhhdCBwYWNrYWdlIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBpdC4KIAogT3BlblNTTCBpcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcyBpbiBTTk1QdjMsCiBvciBTSEEgYXV0aGVudGljYXRpb24uCiAKIFNpbmNlIHRoZSBNU1ZDIGJ1aWxkIGVudmlyb25tZW50IGRvZXMgbm90IG5hdGl2ZWx5IHVzZSAiY29uZmlndXJlIiBub3IgIm1ha2UiCiB0byBnZW5lcmF0ZSB0aGUgdmFyaW91cyBwYXRobmFtZXMgdGhhdCB0aGUgcHJvZ3JhbXMgcmVxdWlyZSwgdGhlIGhlYWRlciBmaWxlcyAKLW5lZWQgdG8gYmUgbWFudWFsbHkgbW9kaWZpZWQgd2hlbiB1c2luZyB0aGUgZ3JhcGhpY2FsIGJ1aWxkIHN5c3RlbSwgYW5kIGFuIAotaW5zdGFsbCBzY3JpcHQgaXMgcHJvdmlkZWQuICBXaGVuIHVzaW5nIHRoZSBQZXJsIENvbmZpZ3VyZSAvIG5tYWtlIHN5c3RlbSwgCi10aGUgaGVhZGVyIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1vZGlmaWVkIGFuZCByZXF1aXJlIG5vIG1hbnVhbCBlZGl0aW5nLgorbmVlZCB0byBiZSBtYW51YWxseSBtb2RpZmllZCB3aGVuIHVzaW5nIHRoZSBJREUsIGFuZCBhbiBpbnN0YWxsIHNjcmlwdCBpcworcHJvdmlkZWQuICBXaGVuIHVzaW5nIHRoZSBQZXJsIENvbmZpZ3VyZSAvIG5tYWtlIHN5c3RlbSwgdGhlIGhlYWRlciBmaWxlcyBhcmUKK2F1dG9tYXRpY2FsbHkgbW9kaWZpZWQgYW5kIHJlcXVpcmUgbm8gbWFudWFsIGVkaXRpbmcuCiAKIFRoZSBwcm9qZWN0cyBhcmUgYXJyYW5nZWQgc28gdGhhdCBBTEwgb2YgdGhlIHVzYWJsZSBwcm9kdWN0cywgdGhlIC5leGUgZmlsZXMsCiBhcmUgd3JpdHRlbiB0byB0aGUgd2luMzJcYmluIGRpcmVjdG9yeS4gIFRoZSB3aW4zMlxsaWIgZGlyZWN0b3J5IGlzIHVzZWQgb25seSAKQEAgLTU1NSwxMiArNTM3LDIyIEBACiAKIDEuICBPcGVuIGEgY29tbWFuZCBwcm9tcHQKIAotMi4gIEluaXRpYWxpemUgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgZW52aXJvbm1lbnQgYnkgcnVubmluZyBWQ1ZBUlMzMi5iYXQKKzIuICBXaGVuIGJ1aWxkaW5nIHdpdGggT3BlblNTTCwgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgSU5DTFVERSBhbmQgTElCCisgICAgc3VjaCB0aGF0IHRoZXNlIHBvaW50IGF0IHRoZSBwcm9wZXIgT3BlblNTTCBkaXJlY3Rvcmllcy4gQW4gZXhhbXBsZToKKworICAgIHNldCBJTkNMVURFPUM6XE9wZW5TU0wtV2luMzJcaW5jbHVkZQorICAgIHNldCBMSUI9QzpcT3BlblNTTC1XaW4zMlxsaWJcVkNcc3RhdGljCisKKzMuICBJbml0aWFsaXplIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIGVudmlyb25tZW50IGJ5IHJ1bm5pbmcgdmN2YXJzYWxsLmJhdAogICAgIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgYmluIGZvbGRlciBvZiB5b3VyIFZpc3VhbCBTdHVkaW8gaW5zdGFsbCBmb2xkZXIuCisgICAgSWYgeW91IHdhbnQgdG8gZ2VuZXJhdGUgNjQtYml0IGJpbmFyaWVzIGluc3RlYWQgb2YgMzItYml0IGJpbmFyaWVzLCBydW4KKyAgICB2Y3ZhcnNhbGwuYmF0IHdpdGggdGhlIGFtZDY0IGFyZ3VtZW50LiBTZWUgYWxzbyAiSG93IHRvOiBFbmFibGUgYSA2NC1CaXQKKyAgICBWaXN1YWwgQysrIFRvb2xzZXQgYXQgdGhlIENvbW1hbmQgTGluZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAoaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3g0ZDJjMDlzJTI4dj12cy44MCUyOS5hc3B4KS4KIAotMy4gIFJ1biB3aW4zMlxidWlsZC5iYXQKKzQuICBSdW4gd2luMzJcYnVpbGQuYmF0CiAKLTQuICBUaGUgZm9sbG93aW5nIHNjcmVlbiB3aWxsIGFwcGVhcjoKKzUuICBUaGUgZm9sbG93aW5nIHNjcmVlbiB3aWxsIGFwcGVhcjoKIAogICAgIE5ldC1TTk1QIGJ1aWxkIGFuZCBpbnN0YWxsIG9wdGlvbnMKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01ODksNyArNTgxLDcgQEAKIAogICAgIFNlbGVjdCBvcHRpb24gdG8gc2V0IC8gdG9nZ2xlOiAgCiAKLTUuICBUb2dnbGUgdGhlIG9wdGlvbnMgb24gYW5kIG9mZiBhcyBkZXNpcmVkIGJ5IHR5cGluZyB0aGUgbGluZSBudW1iZXIgCis2LiAgVG9nZ2xlIHRoZSBvcHRpb25zIG9uIGFuZCBvZmYgYXMgZGVzaXJlZCBieSB0eXBpbmcgdGhlIGxpbmUgbnVtYmVyIAogICAgIGZvbGxvd2VkIGJ5IDxlbnRlcj4uICAKIAogICAgIFRvIGNvbXBpbGUgd2l0aCBPcGVuU1NMLCB0aGUgT3BlblNTTCBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgbXVzdCAKQEAgLTU5OSw3ICs1OTEsNyBAQAogICAgIFRvIGNvbXBpbGUgd2l0aCB0aGUgUGxhdGZvcm0gU0RLLCB0aGUgUGxhdGZvcm0gU0RLIG11c3QgYWxyZWFkeSBiZSAKICAgICBpbnN0YWxsZWQuICBTZWUgdGhlIHNlY3Rpb24gJ0luc3RhbGxpbmcgUGxhdGZvcm0gU0RLJyBmb3IgZGV0YWlscy4KIAotICAgIFRvIHVzZSB0aGUgSVB2NiB0cmFuc3BvcnRzLCB5b3UgbXVzdCBiZSB1c2luZyBXaW5kb3dzIDk4IG9yIGxhdGVyLgorICAgIFRvIHVzZSB0aGUgSVB2NiB0cmFuc3BvcnRzLCBXaW5kb3dzIDk4IG9yIGxhdGVyIGlzIHJlcXVpcmVkLgogCiAgICAgU2VlIHRoZSBzZWN0aW9uICdSdW5uaW5nIE5ldC1TTk1QIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBNaWNyb3NvZnQgCiAgICAgU05NUCBzZXJ2aWNlJyBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSB3aW5FeHRETEwgYWdlbnQuCkBAIC02MDksNyArNjAxLDcgQEAKIAogICAgIFdoZW4geW91IGFyZSByZWFkeSB0byBidWlsZCwgdHlwZSBmIDxlbnRlcj4KIAotNi4gIEJ1aWxkaW5nIHdpbGwgYmVnaW4uICBGb2xsb3dpbmcgaXMgYSBzYW1wbGUgc2NyZWVuIHNob3Qgb2YgYSBxdWlldCBidWlsZDoKKzcuICBCdWlsZGluZyB3aWxsIGJlZ2luLiAgRm9sbG93aW5nIGlzIGEgc2FtcGxlIHNjcmVlbiBzaG90IG9mIGEgcXVpZXQgYnVpbGQ6CiAKICAgICBCdWlsZGluZy4uLgogICAgIApAQCAtNjMxLDcgKzYyMyw3IEBACiAgICAgCiAgICAgRG9uZSEKIAotNy4gIElmIHRoZSBmb2xkZXIgdGhhdCBOZXQtU05NUCB3YXMgaW5zdGFsbGVkIHRvIGlzIGV2ZXIgY2hhbmdlZCwgbW9kaWZ5IHRoZSAKKzguICBJZiB0aGUgZm9sZGVyIHRoYXQgTmV0LVNOTVAgd2FzIGluc3RhbGxlZCB0byBpcyBldmVyIGNoYW5nZWQsIG1vZGlmeSB0aGUgCiAgICAgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciByZWdpc3RyeSBrZXlzIGFzIGV4cGxhaW5lZCBpbiB0aGUgCiAgICAgJ0NvbmZpZ3VyYXRpb25fT3ZlcnZpZXcuaHRtbCcgZmlsZSBsb2NhdGVkIGluIHdpbjMyL2Rpc3QvaHRtbGhlbHAuCiAKQEAgLTcxNSwxOSArNzA3LDE5IEBACiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotVGhlIHdpbjMyc2RrLmRzdyB3b3Jrc3BhY2Ugd2lsbCBidWlsZCB0aGUgYWdlbnQgdGhhdCBwcm92aWRlcyBtaWItSUkgb2JqZWN0cwotZm9yIG5ldHdvcmsgaW50ZXJmYWNlIGxheWVycywgYW5kIHRoZSBJUCwgSUNNUCwgVENQIGFuZCBVRFAgdGFibGVzLiAgVGhpcwotd29ya3NwYWNlIHJlcXVpcmVzIHRoZSBQbGF0Zm9ybSBTREsgdG8gYmUgaW5zdGFsbGVkLiAgVXNlIHRoZSB3aW4zMi5kc3cgCi13b3Jrc3BhY2UgaWYgeW91IGRvbid0IGhhdmUgb3IgZG9uJ3QgbmVlZCB0aGVzZSBmZWF0dXJlcy4gIE5vdGU6ICBPdGhlciAKLWZlYXR1cmVzIG1heSBiZSBkaXNhYmxlZCBpZiB0aGUgUGxhdGZvcm0gU0RLIGlzIG5vdCB1c2VkLiAgU2VlIHRoZSBzZWN0aW9uCi0nSW5zdGFsbGluZyBQbGF0Zm9ybSBTREsnIGZvciBtb3JlIGluZm9ybWF0aW9uLgorVGhlIHdpbjMyLmRzdyBhbmQgd2luMzJkbGwuZHN3IHdvcmtzcGFjZXMgYWxsb3cgdG8gYnVpbGQgdGhlIGFnZW50IGFuZCB0aGUKK2FwcGxpY2F0aW9ucy4gUHJvY2VlZCBhcyBmb2xsb3dzOgogCi0xLiBJZiBTTk1QdjMgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgb3IgU0hBIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLAorMS4gVXBkYXRlIHRoZSB2ZXJzaW9uIHN0YW1wIGluIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oLiAgVGhlIGN1cnJlbnQKKyAgIHZlcnNpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBVbml4IGNvbmZpZ3VyZSBzY3JpcHQgKHRvcCBsZXZlbCBmb2xkZXIpIGJ5IAorICAgbG9va2luZyBmb3IgdGhlIFBBQ0tBR0VfVkVSU0lPTiB2YXJpYWJsZS4KKworMi4gSWYgU05NUHYzIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIG9yIFNIQSBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCwKICAgIGluc3RhbGwgdGhlIE9wZW5TU0wgRExMIGFuZCBsaWJyYXJ5IGZpbGUgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIAogICAgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcgd2l0aCBPcGVuU1NMIiBhbmQgdGhlbiBjb250aW51ZSB3aXRoIAogICAgc3RlcCAyLgogCi0yLiBUaGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gcGF0aCBpcyBjOlx1c3IuICBUaGlzIGZvbGRlciB3aWxsIGNvbnRhaW4gYWxsCiszLiBUaGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gcGF0aCBpcyBjOlx1c3IuICBUaGlzIGZvbGRlciB3aWxsIGNvbnRhaW4gYWxsCiAgICB0aGUgYmluYXJpZXMsIE1JQiBmaWxlcywgY29uZmlndXJhdGlvbiBmaWxlcyBldGMuICBUbyBjaGFuZ2UgdGhlIGxvY2F0aW9uLAogICAgdGhlIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgbmVlZHMgdG8gYmUgbW9kaWZpZWQgYnkgY2hhbmdpbmcKICAgIHRoZSBJTlNUQUxMX0JBU0UgdmFyaWFibGUuIApAQCAtNzM5LDExOCArNzMxLDggQEAKIAogICAgICBGb3IgZXhhbXBsZTogI2RlZmluZSBJTlNUQUxMX0JBU0UgImM6L3VzciIuICAKIAotMy4gSWYgeW91IGFyZSB1c2luZyB3aW4zMnNkaywgdGhlIFBsYXRmb3JtIFNESyBtdXN0IGJlIGVuYWJsZWQuICBFZGl0IHRoZSAKLSAgIHRoZSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCBmaWxlIGFuZCAqY2hhbmdlKjoKLQotICAgICAgICAvKiAjdW5kZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgKi8KLQotICAgdG86Ci0KLSAgICAgICAgI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAxCi0KLTQuIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbnMKLQotICAgU3RhdGljIGJ1aWxkIChkb2VzIG5vdCB1c2UgTmV0U05NUC5ETEwpCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgTVMgVkMrKyA2LjA6Ci0gICAtLS0tLS0tLS0tLS0KLSAgIGEuIE9wZW4gd2luMzIuZHN3IG9yIHdpbjMyc2RrLmRzdy4KLSAgIGIuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iICAKLSAgIGMuIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdC4KLSAgIGQuIENsaWNrICJSZUJ1aWxkIEFsbCIuCi0gICBlLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBmLiBDbGljayAiRmlsZS0+Q2xvc2UgV29ya3NwYWNlIi4KLQotICAgTVMgVkMrKyA3LjArOgotICAgLS0tLS0tLS0tLS0tLQotICAgYS4gIE9wZW4gd2luMzIuZHN3IG9yIHdpbjMyc2RrLmRzdy4KLSAgIGIuICBDbGljayAiWWVzIHRvIEFsbCIgdG8gY29udmVydCB0aGUgd29ya3NwYWNlCi0gICBjLiAgQ2xpY2sgIkJ1aWxkLT5Db25maWd1cmF0aW9uIE1hbmFnZXIiIGFuZCBzZWxlY3QgZWl0aGVyIFJlbGVhc2Ugb3IgRGVidWcgZm9yIAotICAgICAgICdBY3RpdmUgU29sdXRpb24gQ29uZmlndXJhdGlvbicgYW5kIGNsaWNrICJDbG9zZSIKLSAgIGQuICBSaWdodC1jbGljayB0aGUgImxpYmFnZW50IiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgZS4gIFJpZ2h0LWNsaWNrIHRoZSAibGliaGVscGVycyIgcHJvamVjdCwgYW5kIHNlbGVjdCAiUmVidWlsZCIKLSAgIGYuICBSaWdodC1jbGljayB0aGUgImxpYm5ldHNubXB0cmFwZCIgcHJvamVjdCwgYW5kIHNlbGVjdCAiUmVidWlsZCIKLSAgIGcuICBSaWdodC1jbGljayB0aGUgInNubXBsaWIiIHByb2plY3QsIGFuZCBzZWxlY3QgIlJlYnVpbGQiCi0gICBoLiAgUmlnaHQtY2xpY2sgdGhlICJuZXRzbm1wbWlicyhzZGspIiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgaS4gIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iIAotICAgai4gIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdCBtYWtpbmcKLSAgICAgICBzdXJlIGxpYmFnZW50LCBsaWJoZWxwZXJzLCBsaWJuZXRzbm1wdHJhcGQsIHNubXBsaWIgYW5kIG5ldHNubXBtaWJzIGFyZSAKLSAgICAgICBOT1Qgc2VsZWN0ZWQuCi0gICBrLiAgQ2xpY2sgIlJlYnVpbGQiLgotICAgbC4gIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKLSAgICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBtLiAgQ2xpY2sgIkZpbGUtPkNsb3NlIFNvbHV0aW9uIi4KLQotICAgRHluYW1pYyBidWlsZCAodXNlcyBOZXRTTk1QLkRMTCkKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIENvbXBsZXRlIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIFdvcmtzcGFjZSAtIEJ1aWxkaW5nIHRoZSBETEwnLgotICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgTmV0LVNOTVAgbGlicmFyeSBETEwgd2hpY2ggaXMgbmVlZGVkIGJ5IHRoZSAKLSAgIGFwcGxpY2F0aW9ucyBhbmQgd2lsbCBlbmFibGUgRExMIHN1cHBvcnQgaW4gbmV0LXNubXAtY29uZmlnLmguCi0KLSAgIE1TIFZDKysgNi4wOgotICAgLS0tLS0tLS0tLS0tCi0gICBhLiBPcGVuIHdpbjMyLmRzdyBvciB3aW4zMnNkay5kc3cuCi0gICBiLiBDbGljayAiQnVpbGQtPkJhdGNoIEJ1aWxkLi4uIiAgCi0gICBjLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQgZm9yIHRoZSAKLSAgICAgIGFwcGxpY2F0aW9ucy4gIE1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBOT1Qgc2VsZWN0ZWQ6Ci0KLSAgICAgIGxpYmFnZW50Ci0gICAgICBsaWJoZWxwZXJzCi0gICAgICBsaWJzbm1wCi0gICAgICBuZXRzbm1wbWliKHNkaykKLSAgICAgIGxpYm5ldHNubXB0cmFwZAotCi0gICBkLiBDbGljayAiUmVCdWlsZCBBbGwiLgotICAgZS4gV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAotICAgICAgc2F2ZSB0byBhIHRleHQgZmlsZSBpZiB0aGVyZSBpcyBzb21lIGluZm9ybWF0aW9uIHRvIHNoYXJlLgotICAgZi4gQ2xpY2sgIkZpbGUtPkNsb3NlIFdvcmtzcGFjZSIuCi0KLSAgIE1TIFZDKysgNy4wKzoKLSAgIC0tLS0tLS0tLS0tLS0KLSAgIGEuIE9wZW4gd2luMzIuZHN3IG9yIHdpbjMyc2RrLmRzdy4KLSAgIGIuIENsaWNrICJZZXMgdG8gQWxsIiB0byBjb252ZXJ0IHRoZSB3b3Jrc3BhY2UKLSAgIGMuIENsaWNrICJCdWlsZC0+Q29uZmlndXJhdGlvbiBNYW5hZ2VyIiBhbmQgc2VsZWN0IGVpdGhlciBSZWxlYXNlIG9yIERlYnVnIGZvciAKLSAgICAgICdBY3RpdmUgU29sdXRpb24gQ29uZmlndXJhdGlvbicgYW5kIGNsaWNrICJDbG9zZSIKLSAgIGQuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iIAotICAgZS4gU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0IGZvciB0aGUgCi0gICAgICBhcHBsaWNhdGlvbnMuICBNYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgTk9UIHNlbGVjdGVkOgotCi0gICAgICBsaWJhZ2VudAotICAgICAgbGliaGVscGVycwotICAgICAgbGlic25tcAotICAgICAgbmV0c25tcG1pYihzZGspCi0gICAgICBsaWJuZXRzbm1wdHJhcGQKLQotICAgZi4gQ2xpY2sgIlJlYnVpbGQiLgotICAgZy4gV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAotICAgICAgc2F2ZSB0byBhIHRleHQgZmlsZSBpZiB0aGVyZSBpcyBzb21lIGluZm9ybWF0aW9uIHRvIHNoYXJlLgotICAgaC4gQ2xpY2sgIkZpbGUtPkNsb3NlIFNvbHV0aW9uIi4KLSAgCi01LiAgSWYgdGhlIFBlcmwgbW9kdWxlcyBhcmUgcmVxdWlyZWQsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc2VjdGlvbjoKLSAgICAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyB0aGUgUGVybCBTTk1QIG1vZHVsZXMnLgotCi0gICAgT3RoZXJ3aXNlLCBjb250aW51ZSB3aXRoIHRoZSBzZWN0aW9uOiAKLSAgICAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBJbnN0YWxsaW5nJwotCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIFdvcmtzcGFjZSAtIEJ1aWxkaW5nIHRoZSBETEwKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0xLiAgT3B0aW9uYWw6IE1ha2UgYSBiYWNrdXAgb2YgdGhlIGV4aXN0aW5nIG5ldC1zbm1wLWNvbmZpZy5oIHdoaWNoIGNvbnRhaW5zIAotICAgIHNldHRpbmdzIGZvciBhIHN0YXRpYyBidWlsZCBvZiBOZXQtU05NUDoKLQotICAgIENvcHkgd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmggdG8gCi0gICAgd2luMzJcbmV0LXNubXBcc3RhdGljLWNvbmZpZy5oLgotCi0yLiAgT3BlbiB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCB1c2luZyBhIHRleHQgZWRpdG9yLgotCi0zLiAgKkNoYW5nZSogdGhlIGZvbGxvd2luZyBsaW5lIHdoaWNoIGlzIGxvY2F0ZWQgbmVhciB0aGUgdG9wIG9mIHRoZSBmaWxlOgorNC4gIFdoZW4gYnVpbGRpbmcgRExMcyBpbnN0ZWFkIG9mIHN0YXRpYyBsaWJyYXJpZXMsICpjaGFuZ2UqIHRoZSBmb2xsb3dpbmcKKyAgICBsaW5lIHdoaWNoIGlzIGxvY2F0ZWQgbmVhciB0aGUgdG9wIG9mIHRoZSBmaWxlOgogCiAgICAgICAgIC8qICN1bmRlZiBORVRTTk1QX1VTRV9ETEwgKi8KIApAQCAtODU4LDM4ICs3NDAsMjIgQEAKIAogICAgICAgICAjZGVmaW5lIE5FVFNOTVBfVVNFX0RMTCAxCiAKLTQuICBPcHRpb25hbDogTWFrZSBhIGJhY2t1cCBvZiB0aGUgbmV3IG5ldC1zbm1wLWNvbmZpZy5oIHdoaWNoIGNvbnRhaW5zIAotICAgIHNldHRpbmdzIGZvciBhIERMTCBidWlsZCBvZiBOZXQtU05NUDoKKzUuIEJ1aWxkIHRoZSBhZ2VudCBhbmQgdGhlIGFwcGxpY2F0aW9ucwogCi0gICAgQ29weSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCB0byAKLSAgICB3aW4zMlxuZXQtc25tcFxkbGwtY29uZmlnLmguCi0KLTUuIEJ1aWxkIHRoZSBETEwKLQotICAgTVMgVkMrKyA2LjA6Ci0gICAtLS0tLS0tLS0tLS0KLSAgIGEuIE9wZW4gbGlic2RsbC5kc3cuCi0gICBiLiBDbGljayAiQnVpbGQtPkJhdGNoIEJ1aWxkLi4uIiAgCi0gICBjLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQuCi0gICBkLiBDbGljayAiQ2xlYW4iLiAgKiogRG8gTk9UIHNraXAgdGhpcyBzdGVwLiAqKgotICAgZS4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgIAotICAgZi4gQ2xpY2sgIlJlQnVpbGQgQWxsIi4KLSAgIGcuIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKKyAgIGEuIE9wZW4gd2luMzIuZHN3IChzdGF0aWMgYnVpbGQpIG9yIHdpbjMyZGxsLmRzdyAoZHluYW1pYyBidWlsZCkuCisgICBiLiBJZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSA2NC1iaXQgYmluYXJpZXMgaW5zdGVhZCBvZiAzMi1iaXQgYmluYXJpZXMsCisgICAgICBzZWxlY3QgIkJ1aWxkL0NvbmZpZ3VyYXRpb24gTWFuYWdlciIgYW5kIGFkZCB0aGUgIng2NCIgcGxhdGZvcm0uCisgICBjLiBTZWxlY3QgIkJ1aWxkL0JhdGNoIEJ1aWxkLi4uIiAgCisgICBkLiBTZWxlY3QgdGhlIHByb2plY3RzIGFuZCBjb25maWd1cmF0aW9ucyB5b3Ugd2FudCB0byBidWlsZC4KKyAgIGUuIENsaWNrICJSZUJ1aWxkIEFsbCIuCisgICBmLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCiAgICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBoLiBDbGljayAiRmlsZS0+Q2xvc2UgV29ya3NwYWNlIi4KIAotICAgTVMgVkMrKyA3LjArOgotICAgLS0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiBsaWJzZGxsLmRzdy4KLSAgIGIuIENsaWNrICJZZXMgdG8gQWxsIiB0byBjb252ZXJ0IHRoZSB3b3Jrc3BhY2UKLSAgIGMuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iIAotICAgZC4gU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0LgotICAgZS4gQ2xpY2sgIkNsZWFuIi4gICoqIERvIE5PVCBza2lwIHRoaXMgc3RlcC4gKioKLSAgIGYuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iIAotICAgZy4gQ2xpY2sgIlJlYnVpbGQiLgotICAgaC4gV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAotICAgICAgc2F2ZSB0byBhIHRleHQgZmlsZSBpZiB0aGVyZSBpcyBzb21lIGluZm9ybWF0aW9uIHRvIHNoYXJlLgotICAgaS4gQ2xpY2sgIkZpbGUtPkNsb3NlIFNvbHV0aW9uIi4KKzYuICBJZiB0aGUgUGVybCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgY29udGludWUgd2l0aCB0aGUgbmV4dCBzZWN0aW9uOgorICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIHRoZSBQZXJsIFNOTVAgbW9kdWxlcycuCisKKyAgICBPdGhlcndpc2UsIGNvbnRpbnVlIHdpdGggdGhlIHNlY3Rpb246IAorICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05MDMsMjEgKzc2OSwxNiBAQAogbG9hZCBpdCdzIG93biBjb3B5IG9mIHRoZSBNSUIsIGFuZCBzaGFyaW5nIGRhdGEgYmV0d2VlbiBtb2R1bGVzIHdpbGwKIG5vdCBiZSBwb3NzaWJsZS4gIEZvciBleGFtcGxlLCB0aGUgY29uZiBtb2R1bGUgdGVzdHMgd2lsbCBmYWlsLgogCi0xLiAgQ29tcGxldGUgdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcnLiAgVGhpcyB3aWxsIGJ1aWxkCi0gICAgdGhlIGFwcGxpY2F0aW9ucy4gIAorMS4gIENvbXBsZXRlIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nJyBhbmQgY2hvb3NlIGZvcgorICAgIHRoZSBkeW5hbWljIGJ1aWxkLiAgVGhpcyB3aWxsIGJ1aWxkIHRoZSBsaWJyYXJpZXMsIGFnZW50IGFuZCBhcHBsaWNhdGlvbnMuCiAKICAgICBOb3RlOiAgU05NUEQuRVhFIGFuZCBTTk1QVFJBUEQuRVhFIGFyZSByZXF1aXJlZCBmb3IgcnVubmluZyB0aGUgdGVzdHMgCiAgICAgICAgICAgIGFnYWluc3QgdGhlIFNOTVAgUGVybCBtb2R1bGUuCiAKLTIuICBDb21wbGV0ZSB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBXb3Jrc3BhY2UgLSBCdWlsZGluZyB0aGUgRExMJy4KLSAgICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBOZXQtU05NUCBsaWJyYXJ5IERMTCB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBQZXJsIAotICAgIG1vZHVsZXMuICBOb3RlOiAgVGhpcyBzdGVwIGNhbiBiZSBza2lwcGVkIGlmIHRoZSBETEwgd2FzIGFscmVhZHkgY3JlYXRlZAotICAgIGluIHN0ZXAgMS4KLQotMy4gIEluc3RhbGwgTmV0LVNOTVAgYXMgZGVzY3JpYmVkIGluIHRoZSAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBJbnN0YWxsaW5nJworMi4gIEluc3RhbGwgTmV0LVNOTVAgYXMgZGVzY3JpYmVkIGluIHRoZSAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBJbnN0YWxsaW5nJwogICAgIHNlY3Rpb24gdG8gaW5zdGFsbCB0aGUgYXBwbGljYXRpb25zLCB0aGUgRExMIGFuZCB0aGUgLmxpYiBmaWxlcy4KIAotNC4gIENvbnRpbnVlIHdpdGggdGhlIFdpbjMyIHNlY3Rpb24gb2YgdGhlIFBlcmwgUkVBRE1FIGZpbGUgbG9jYXRlZCBpbiAKKzMuICBDb250aW51ZSB3aXRoIHRoZSBXaW4zMiBzZWN0aW9uIG9mIHRoZSBQZXJsIFJFQURNRSBmaWxlIGxvY2F0ZWQgaW4gCiAgICAgcGVybFxTTk1QXFJFQURNRS4KIAogCkBAIC0xMDM4LDI2ICs4OTksOSBAQAogCWZ0cDovL2Z0cC5vcGVuc3NsLm9yZy9zb3VyY2UvCiAKIAotIDMuIE9uY2UgdGhlIE9wZW5TU0wgbGlicmFyaWVzIGFyZSBidWlsdCwgeW91IG11c3QgY29weSB0aGVtIHRvIHRoZSB0aGUgTVNWQyAKLSAgICBkaXJlY3Rvcnk6CisgMy4gT25jZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgYXJlIGJ1aWx0LCBjb3B5IHRoZSBmb2xkZXIgaW5jMzJcb3BlbnNzbCB0bworICAgIEM6XE9wZW5TU0xcSW5jbHVkZVxvcGVuc3NsIGFuZCB0aGUgZm9sZGVyIG91dDMyZGxsIHRvIEM6XE9wZW5TU0xcTGliXFZDLgogCi0gICAgYS4gIENvcHkgZm9sZGVyIGluYzMyXG9wZW5zc2wgdG8gdGhlIGluY2x1ZGUgZm9sZGVyIG9mIE1TVkMrKwotCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwM1wKLSAgICAgICAgICAgICAgICAgIFZjN1xpbmNsdWRlXG9wZW5zc2xcKi5oIgotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wKLSAgICAgICAgICAgICAgICAgIFZDOThcaW5jbHVkZVxvcGVuc3NsXCouaCIKLQotICAgIGIuICBDb3B5IGZpbGUgb3V0MzJkbGxcbGliZWF5MzIubGliIHRvIHRoZSBsaWIgZm9sZGVyIG9mIE1TVkMrKwotCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwM1wKLSAgICAgICAgICAgICAgICAgIFZjN1xsaWJcbGliZWF5MzIubGliIgotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wKLSAgICAgICAgICAgICAgICAgIFZDOThcbGliXGxpYmVheTMyLmxpYiIKLQotICAgIGMuICBDb3B5IGZpbGUgb3V0MzJkbGxcbGliZWF5MzIuZGxsIHRvIHlvdXIgJXdpbmRpciVcc3lzdGVtMzIgZm9sZGVyCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XHdpbm50XHN5c3RlbTMyXGxpYmVheTMyLmRsbCIKIAogVXNpbmcgYSBwcmUtY29tcGlsZWQgdmVyc2lvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTA2OCwyMyArOTEyLDYgQEAKIAogIDIuIEluc3RhbGwgdGhlIHBhY2thZ2UgdG8gYzpcT3BlblNTTC4KIAotIDMuIENvcHkgdGhlIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyB0byB0aGUgdGhlIE1TVkMgZGlyZWN0b3J5OgotCi0gICAgYS4gIENvcHkgZm9sZGVyIGM6XE9wZW5TU0xcaW5jbHVkZVxvcGVuc3NsIHRvIHRoZSBpbmNsdWRlIGZvbGRlciBvZiAKLSAgICAgICAgTVNWQysrLgotCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwM1wKLSAgICAgICAgICAgICAgICAgIFZjN1xpbmNsdWRlXG9wZW5zc2xcKi5oIgotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wKLSAgICAgICAgICAgICAgICAgIFZDOThcaW5jbHVkZVxvcGVuc3NsXCouaCIKLQotICAgIGIuICBDb3B5IGZpbGUgYzpcT3BlblNTTFxsaWJcVkNcbGliZWF5MzIubGliIHRvIHRoZSBsaWIgZm9sZGVyIG9mIE1TVkMrKy4KLQotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDNcCi0gICAgICAgICAgICAgICAgICBWYzdcbGliXGxpYmVheTMyLmxpYiIKLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cCi0gICAgICAgICAgICAgICAgICBWQzk4XGxpYlxsaWJlYXkzMi5saWIiCi0KIAogUHJvamVjdCBjaGFuZ2VzCiA9PT09PT09PT09PT09PT0KQEAgLTEwOTMsMzggKzkyMCwxMCBAQAogCiAJI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEKIAotIDIuIE9wZW4gVmlzdWFsIFN0dWRpbywgYWRkIHRoZSBsaW5rIGxpbmUgdG8gdGhlIFByb2plY3QgU2V0dGluZ3MKLSAgICBmb3IgYWxsIHRoZSBhcHBsaWNhdGlvbnMsIGFuZCBlc3BlY2lhbGx5IGZvciB0aGUgbGlic25tcF9kbGwgcHJvamVjdCwKLSAgICBmb3IgYXMgeW91IGtub3csIGEgLkRMTCBpcyBhbiBhcHBsaWNhdGlvbi4KLSAgICBZb3UgTVVTVCBkbyB0aGlzIGZvciBsaWJzZGxsLmRzdywgYW5kIGVpdGhlciB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LAotICAgIHdoaWNoZXZlciB5b3UgdXNlLgotCi0gICBNUyBWQysrIDYuMDoKLSAgIC0tLS0tLS0tLS0tLQotICAgYS4gIENsaWNrIFByb2plY3QtPlNldHRpbmdzLiAgCi0gICBiLiAgSGlnaGxpZ2h0IHRoZSBuYW1lcyBvZiBhbGwgcHJvamVjdHMgZXhjZXB0IGxpYnNubXAsIGxpYmFnZW50LCBsaWJoZWxwZXJzLAotICAgICAgIGxpYm5ldHNubXB0cmFwZCwgbmV0c25tcG1pYnMsIG5ldHNubXBtaWJzc2RrLgotICAgYy4gIFNlbGVjdCB0aGUgTGluayBzZWN0aW9uLgotICAgZC4gIEFkZCB0aGUgbmV4dCBsaW5lIHRvIHRoZSAnT2JqZWN0L0xpYnJhcnkgTW9kdWxlcycgbGlzdCBmb3IgRGVidWcgYW5kIAotICAgICAgIFJlbGVhc2UgdmVyc2lvbnM6Ci0KLSAgICAgICAgIGxpYmVheTMyLmxpYiAKLQotICAgTVMgVkMrKyA3LjArOgotICAgLS0tLS0tLS0tLS0tLQotICAgYS4gIEZvciBlYWNoIHByb2plY3QgKGV4Y2VwdCBsaWJzbm1wLCBsaWJhZ2VudCwgbGliaGVscGVycywgbGlibmV0c25tcHRyYXBkLAotICAgICAgIG5ldHNubXBtaWJzLCBuZXRzbm1wbWlic3NkayksIGNsaWNrIFByb2plY3QtPlByb3BlcnRpZXMuIAotICAgYi4gIEZvciBDb25maWd1cmF0aW9uLCBzZWxlY3QgJ1JlbGVhc2UnCi0gICBjLiAgQ2xpY2sgTGlua2VyIGFuZCB0aGVuIElucHV0Ci0gICBkLiAgQWRkIHRvIHRoZSAnQWRkaXRpb25hbCBEZXBlbmRlbmNpZXMnIHNlY3Rpb246Ci0KLSAgICAgICAgIGxpYmVheTMyLmxpYiAKLQotICAgZS4gIEZvciBDb25maWd1cmF0aW9uLCBzZWxlY3QgJ0RlYnVnJwotICAgZi4gIENsaWNrIExpbmtlciBhbmQgdGhlbiBJbnB1dAotICAgZy4gIEFkZCB0byB0aGUgJ0FkZGl0aW9uYWwgRGVwZW5kZW5jaWVzJyBzZWN0aW9uOgotCi0gICAgICAgICBsaWJlYXkzMi5saWIgCisgMi4gT3BlbiBWaXN1YWwgU3R1ZGlvLCBvcGVuIHRoZSBUb29scyBtZW51IGFuZCBzZWxlY3QgT3B0aW9ucy4gR28gdG8KKyAgICBQcm9qZWN0cyBhbmQgU29sdXRpb25zIGFuZCBzZWxlY3QgVkMrKyBEaXJlY3Rvcmllcy4gQWRkCisgICAgQzpcT3BlblNTTFxJbmNsdWRlIHRvIHRoZSBsaXN0IG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAgQzpcT3BlblNTTFxMaWJcVkMgdG8gdGhlIGxpc3Qgb2YgbGlicmFyeSBkaXJlY3Rvcmllcy4KIAogIDMuIENvbnRpbnVlIHdpdGggdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmciCiAKQEAgLTExMzYsMTYgKzkzNSwxMCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIFRoZSBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3VwcG9ydHMgU05NUCBvdmVyIElQdjQtYmFzZWQgdHJhbnNwb3J0cy4KLUhvd2V2ZXIsIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgMjAwMCBpbmNsdWRlIGFuIElQdjYtY2FwYWJsZSBzdGFjaywgd2hpY2gKK0hvd2V2ZXIgV2luZG93cyAyMDAwIGFuZCBsYXRlciBpbmNsdWRlIGFuIElQdjYtY2FwYWJsZSBzdGFjayB3aGljaAogY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBTTk1QIG92ZXIgSVB2Ni4gIFRvIGVuYWJsZSBJUHY2LCB0aGUgTWljcm9zb2Z0IFBTREsgCi1pcyByZXF1aXJlZCBhbmQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBOZXQtU05NUCB3aW4zMiBWaXN1YWwgQysrIAotY29uZmlndXJhdGlvbiBhcmUgbmVlZGVkOgotCi1Qcm9qZWN0IGNoYW5nZXMKLT09PT09PT09PT09PT09PQotCi0gMS4gRWRpdCB0aGUgd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmggaGVhZGVyIGZpbGUuICBDaGFuZ2UKLSAgICB0aGUgc2luZ2xlIElORVQ2IGxpbmUgZnJvbToKK2lzIHJlcXVpcmVkIGFuZCBORVRTTk1QX0VOQUJMRV9JUFY2IGhhcyB0byBiZSBlbmFibGVkIGluCit3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaC4gQ2hhbmdlIHRoZSBmb2xsb3dpbmcgc2luZ2xlIGxpbmUgZnJvbToKIAogICAgICAgICAvKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNiAqLwogCkBAIC0xMTUzLDIwICs5NDYsNyBAQAogCiAgICAgICAgCSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiAxCiAKLSAyLiBFZGl0IHRoZSB3aW4zMlxsaWJzbm1wX2RsbFxsaWJzbm1wLmRlZiBmaWxlLiAgQWxsIHRoZSBJUHY2IGZ1bmN0aW9ucyB3aWxsCi0gICAgYmUgY29tbWVudGVkIG91dCBhbmQgd2lsbCBuZWVkIHRvIGJlIGVuYWJsZWQgYnkgcmVtb3ZpbmcgJztJUHY2JyBmcm9tIHRoZQotICAgIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUuICAKLQotICAgIEZvciBleGFtcGxlLCBjaGFuZ2U6Ci0KLQotICAgICAgICA7SVB2NiAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5Ci0KLSAgICB0bzoKLQotICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eQotCi0gMy4gQ29udGludWUgd2l0aCB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyIKK05leHQsIGNvbnRpbnVlIHdpdGggdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmciCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjQ1LDkgKzEwMjUsNyBAQAogZm9yIFdpbmRvd3MgYmFzZWQgc3lzdGVtcy4gVGhlIGN5Z3dpbjEuZGxsIHByb3ZpZGVzIGEgUE9TSVggZW11bGF0aW9uIGxheWVyIAogdGhhdCBzaW1wbGlmaWVzIHBvcnRpbmcgVW5peCAvIExpbnV4IGFwcGxpY2F0aW9ucyB0byBXaW5kb3dzLiBUaGUgQ3lnd2luIGRsbHMKIGFyZSByZXF1aXJlZCBpZiBhbiBhcHBsaWNhdGlvbiBpcyB0byBiZSBkaXN0cmlidXRlZC4gVGhlIGRlcGVuZGVuY3kgb24gdGhlIAotQ3lnd2luIGRsbHMgY2FuIGJlIGVsaW1pbmF0ZWQgd2l0aCB0aGUgLS1tbm8tY3lnd2luIGNvbXBpbGVyIGZsYWcsIHdoaWNoIHVzZXMKLU1pbkdXIHRvIGNvbXBpbGUgYSBuYXRpdmUgV2luZG93cyBiaW5hcnksIGJ1dCB0aGUgYmVuZWZpdCBvZiB0aGUgUE9TSVggZW11bGF0aW9uCi1pcyBsb3N0LiBUaGUgQ3lnd2luIHRvb2wgY2hhaW4gYW5kIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0OgorVGhlIEN5Z3dpbiB0b29sIGNoYWluIGFuZCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdDoKIAogaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jeWd3aW4vCiAKQEAgLTEyNjksNDEgKzEwNDcsMzMgQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1BbiBhbHRlcm5hdGUgd2F5IHRvIGJ1aWxkIE5ldC1TTk1QIGZvciB3aW4zMiBpcyB0byB1c2UgQ3lnbnVzJ3MgY3lnd2luMzIKLWVudmlyb25tZW50LiAgSW5mb3JtYXRpb24gb24gdGhlIEN5Z251cyBjeWd3aW4zMiBlbnZpcm9ubWVudCBpcyBhdmFpbGFibGUKK0FuIGFsdGVybmF0ZSB3YXkgdG8gYnVpbGQgYW5kIHJ1biBOZXQtU05NUCBvbiBXaW4zMiBpcyB0byB1c2UgdGhlIEN5Z3dpbgorZW52aXJvbm1lbnQuICBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ3lnd2luIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZQogb24gdGhlIHdlYiBhdDogaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jeWd3aW4vLgogCiBDeWd3aW4gYWxsb3dzIHlvdSB0byBjb21waWxlIGFsbW9zdCB0aGUgY29tcGxldGUgYWdlbnQgYW5kIGFwcGxpY2F0aW9ucy4KLVRoZSBmb2xsb3dpbmcgY29uZmlndXJlIG9wdGlvbnMgY3JlYXRlcyBhIHdvcmtpbmcgc2V0IG9mIHByb2dyYW1zOgorQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb25maWd1cmUgb3B0aW9ucyBjcmVhdGUgYSB3b3JraW5nIHNldCBvZgorcHJvZ3JhbXM6CiAKK0VOVl9TRVBBUkFUT1I9IjoiIFwKIC4vY29uZmlndXJlIFwKIAktLXdpdGgtbWliLW1vZHVsZXM9Imhvc3QgYWdlbnR4IGRpc21hbi9ldmVudC1taWIgZXhhbXBsZXMvZXhhbXBsZSIgXAogCS0td2l0aC1vdXQtbWliLW1vZHVsZXM9aG9zdC9ocl9uZXR3b3JrIFwKLSAgICAgICAgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgLS13aXRob3V0LXBlcmwtbW9kdWxlcyBcCiAKLUlmIHlvdSB3YW50IHRvIHVzZSBTTk1QdjMgYXV0aCBhbmQgcHJpdmFjeSBmZWF0dXJlcywgYWRkOgotCS0td2l0aC1vcGVuc3NsPSIvdXNyIiBcCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIFNOTVB2MyBhdXRoIGFuZCBwcml2YWN5IGZlYXR1cmVzLCBhZGQ6CisJLS13aXRob3V0LW9wZW5zc2wgXAogCiBJZiB5b3Ugd2FudCB0byB1c2UgSVB2NiB0cmFuc3BvcnRzLCBhZGQ6Ci0JLS1lbmFibGUtaXB2NiAtLXdpdGgtdHJhbnNwb3J0cz0iVENQSVB2NiBVRFBJUHY2IgorCS0tZW5hYmxlLWlwdjYKIAotTm90ZTogIFRoZSBzb3VyY2UgY29kZSBzaG91bGQgKm5vdCogYmUgaW4gYSBmb2xkZXIgdGhhdCBjb250YWlucyBhIHNwYWNlLiAgRm9yCi0gICAgICAgZXhhbXBsZSwgY29tcGlsaW5nIGluIHlvdXIgJ015IERvY3VtZW50cycgb3IgeW91ciBEZXNrdG9wICh1c3VhbGx5Ci0gICAgICAgYzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1x4eHh4XERlc2t0b3ApIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgIAotVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgZm9yIFdpbmRvd3MgOTggYW5kIFdpbmRvd3MgTlQgNC4wLiAgSW4gb3JkZXIgZm9yCi10aGUgcHJvY2VzcyBwYXJ0IG9mIHRoZSBob3N0IHJlc291cmNlcyBNSUIgdG8gd29yayB1bmRlciBOVCB5b3Ugd2lsbCBuZWVkCi10byBnZXQgaG9sZCBvZiB0aGUgUFNBUEkuRExMLiBUaGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgZG93bmxvYWQgc2VjdGlvbgotb2Ygd3d3Lm1pY3Jvc29mdC5jb20uICBUaGUgRExMIGlzIGluY2x1ZGVkIHdpdGggV2luZG93cyAyMDAwIGFuZCBYUCwKLWFuZCBpcyBhbHNvIHBhcnQgb2YgdGhlIFZDKysgZGlzdHJpYnV0aW9uLiAgVGhlIElQSExQQVBJIGxpYnJhcnkgaXMKLXBhcnQgb2YgdGhlICJNaWNyb3NvZnQgUGxhdGZvcm0gU0RLIiwgd2hpY2ggaXMgYWxzbyBhdmFpbGFibGUgZnJvbQotd3d3Lm1pY3Jvc29mdC5jb20uICBTZWUgdGhlIHNlY3Rpb24gIkluc3RhbGxpbmcgUGxhdGZvcm0gU0RLIiBmb3IgZGV0YWlscy4KK05vdGU6IHRoZSBzb3VyY2UgY29kZSBzaG91bGQgKm5vdCogYmUgaW4gYSBmb2xkZXIgdGhhdCBjb250YWlucyBhIHNwYWNlLgorRm9yIGV4YW1wbGUsIGNvbXBpbGluZyBpbiB5b3VyICdNeSBEb2N1bWVudHMnIGZvbGRlciBvciB5b3VyIERlc2t0b3AgZm9sZGVyCisodXN1YWxseSBjOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXHh4eHhcRGVza3RvcCkgaXMgbm90IHN1cHBvcnRlZC4KIAotRWFybGllciByZWxlYXNlcyBvZiBDeWd3aW4gbWF5IG5lZWQgdG8gdXNlIHRoZSBjb25maWd1cmUgZmxhZwotCS0td2l0aC1saWJzPSItbHJlZ2V4IC1saWJwaGxwYXBpIgotYnV0IHRoaXMgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaGFzIHNpbmNlIGJlZW4gaW5jb3Jwb3JhdGVkCi1pbnRvIHRoZSBtYWluIEN5Z3dpbiBwYWNrYWdlLCBhbmQgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0bwotaW5jbHVkZSBpdCBzZXBhcmF0ZWx5LgorQSBub3RlIGZvciBXaW5kb3dzIE5UIHVzZXJzOiBpbiBvcmRlciBmb3IgdGhlIHByb2Nlc3MgcGFydCBvZiB0aGUgaG9zdAorcmVzb3VyY2VzIE1JQiAoaHJfc3dydW4pIHRvIHdvcmsgdW5kZXIgV2luZG93cyBOVCB5b3Ugd2lsbCBuZWVkIHRvIGdldCBob2xkCitvZiBQU0FQSS5ETEwuIFRoaXMgRExMIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgZG93bmxvYWQgc2VjdGlvbiBvZgord3d3Lm1pY3Jvc29mdC5jb20sIGFuZCBpcyBhbHNvIGluY2x1ZGVkIGluIHRoZSBWQysrIGRpc3RyaWJ1dGlvbi4KIAogSWYgdGhlIGZvbGRlciB0aGF0IE5ldC1TTk1QIHdhcyBpbnN0YWxsZWQgdG8gaXMgZXZlciBjaGFuZ2VkLCBtb2RpZnkgdGhlIAogc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciByZWdpc3RyeSBrZXlzIGFzIGV4cGxhaW5lZCBpbiB0aGUgCkBAIC0xMzIwLDE3ICsxMDkwLDE2IEBACiBNaW5HVyB0b29scyB3aXRoIHRoZSBNU3lTIGVudmlyb25tZW50LiBNaW5HVywgTVN5UyBhbmQgdGhlIGFzc29jaWF0ZWQKIGRvY3VtZW50YXRpb24gY2FuIGJlIGRvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5taW5ndy5vcmcuCiAKLUNvbXBpbGluZyBuZXQtc25tcCB3aXRoIE1pbkdXIHJlcXVpcmVzIEdOVSByZWdleC4gQSBHTlUgcmVnZXggcGFja2FnZSB0aGF0Ci1idWlsZHMgdW5kZXIgTWluR1cgd2l0aCBNU3lTIGlzIGF2YWlsYWJsZSBhdDogCitDb21waWxpbmcgbmV0LXNubXAgd2l0aCBNaW5HVyByZXF1aXJlcyBHTlUgcmVnZXggYW5kIGxpYmludGwuIEJpbmFyaWVzIGFuZAorZGV2ZWxvcGVyIGhlYWRlciBmaWxlcyBmb3IgdGhlc2UgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgYXQ6IAogCi0gICAgICAgIGh0dHA6Ly93d3cuYm9lZG9nLmNvbS9uZXQtc25tcC9nbnVfcmVnZXgvcmVnZXgtMC0xMi1taW5ndy1yMi50YXIuZ3oKKyAgICAgICAgaHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9yZWdleC5odG0KKyAgICAgICAgaHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9saWJpbnRsLmh0bQogCi1Ob3RlOiAgVGhlIHNvdXJjZSBjb2RlIHNob3VsZCAqbm90KiBiZSBpbiBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgc3BhY2UuICBGb3IKLSAgICAgICBleGFtcGxlLCBjb21waWxpbmcgaW4geW91ciAnTXkgRG9jdW1lbnRzJyBvciB5b3VyIERlc2t0b3AgKHVzdWFsbHkKLSAgICAgICBjOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXHh4eHhcRGVza3RvcCkgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICAKLTEuICBCdWlsZCBhbmQgaW5zdGFsbCBHTlUgcmVnZXggZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIAotICAgIHJlZ2V4LTAtMTItbWluZ3ctcjIgUkVBRE1FLgorUHJvY2VlZCBhcyBmb2xsb3dzIHRvIGJ1aWxkIE5ldC1TTk1QOgorCisxLiAgSW5zdGFsbCBHTlUgcmVnZXggYW5kIEdOVSBsaWJpbnRsIGJpbmFyaWVzIGFuZCBkZXZlbG9wZXIgZmlsZXMgaW4gdGhlCisgICAgTWluR1cgdHJlZS4KIAogMi4gIElmIFNOTVB2MyBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcyBvciBTSEEgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQsCiAgICAgaW5zdGFsbCB0aGUgT3BlblNTTCBETEwgYW5kIGxpYnJhcnkgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gCkBAIC0xMzU3LDcgKzExMjYsNyBAQAogCiAJLi9jb25maWd1cmUgLS1wcmVmaXg9IiRCQVNFRElSIiBcCiAJCS0td2l0aC1taWJkaXJzPSIkQkFTRURJUi9zaGFyZS9zbm1wL21pYnMiIFwKLQktLXdpdGgtbWliLW1vZHVsZXM9ImFnZW50eCBkaXNtYW4vZXZlbnQtbWliIGV4YW1wbGVzL2V4YW1wbGUiIFwKKwktLXdpdGgtbWliLW1vZHVsZXM9ImFnZW50eCBkaXNtYW4vZXZlbnQtbWliIHdpbkV4dERMTCBleGFtcGxlcy9leGFtcGxlIlwKICAgICAgICAgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgLS13aXRob3V0LXBlcmwtbW9kdWxlcyBcCiAKICAgICBOb3RlOiB3aGlsZSB0aGUgTmV0LVNOTVAgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhvc3QgcmVzb3VyY2VzIE1JQiBpcyBub3QKZGlmZiAtLWdpdCBhL1RPRE8gYi9UT0RPCmluZGV4IDIyMTBiNmUuLjQ5ZDkxM2UgMTAwNjQ0Ci0tLSBhL1RPRE8KKysrIGIvVE9ETwpAQCAtMjQsOCArMjQsOCBAQAogICBUdW5uZWwKICAgV1dXLU1JQgogICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcjoKLSAgICBIb3N0UmVzCShjb252ZXJ0IHRvIHVzZSBIQUwgYW5kIGNsZWFuIHVwKQotICAgIFVDRGF2aXMJKGNvbnZlcnQgdG8gdXNlIEhBTCBhbmQgdXBkYXRlIHN0cnVjdHVyZXMpCisgICAgSG9zdFJlcwkoY29udmVydCB0byB1c2UgSEFMIGFuZCBjbGVhbiB1cCAtIGluIHByb2dyZXNzKQorICAgIFVDRGF2aXMJKGNvbnZlcnQgdG8gdXNlIEhBTCBhbmQgdXBkYXRlIHN0cnVjdHVyZXMgLSBpbiBwcm9ncmVzcykKIAogRXh0ZW5zaWJpbGl0eToKICAgQWdlbnRYCShyZWFzb25hYmx5IHN0YWJsZSBub3cpCmRpZmYgLS1naXQgYS9hY2NvbmZpZy5oIGIvYWNjb25maWcuaAppbmRleCAwZWQwNmI5Li4xMmY4NWM2IDEwMDY0NAotLS0gYS9hY2NvbmZpZy5oCisrKyBiL2FjY29uZmlnLmgKQEAgLTEsNSArMSw5IEBACiAvKiAKICAqIG5ldC1zbm1wIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBOT1RFOiBETyBOT1QgRURJVCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGFzIHlvdXIgY2hhbmdlcworICogICAgICAgd2lsbCBiZSBvdmVyd3JpdHRlbi4gVGhpcyBjb250ZW50IGlzIGluIGFjY29uZmlnLmggYW5kIG1lcmdlZAorICogICAgICAgaW50byBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGJ5IGF1dG9oZWFkZXIuCiAgKi8KIC8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQogICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKQEAgLTIzLDI5NCArMjcsMTUgQEAKICAqLwogI2lmbmRlZiBORVRTTk1QX05PX0FVVE9DT05GX0RFRklOSVRJT05TCiAKLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludDMyX3QgKi8KLSN1bmRlZiBIQVZFX0lOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdWludDMyX3QgKi8KLSN1bmRlZiBIQVZFX1VJTlQzMl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVfaW50MzJfdCAqLwotI3VuZGVmIEhBVkVfVV9JTlQzMl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludDY0X3QgKi8KLSN1bmRlZiBIQVZFX0lOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdWludDY0X3QgKi8KLSN1bmRlZiBIQVZFX1VJTlQ2NF9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVfaW50NjRfdCAqLwotI3VuZGVmIEhBVkVfVV9JTlQ2NF9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludHB0cl90ICovCi0jdW5kZWYgSEFWRV9JTlRQVFJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50cHRyX3QgKi8KLSN1bmRlZiBIQVZFX1VJTlRQVFJfVAotCi0vKiBnb3Qgc29ja2xlbl90PyAqLwotI3VuZGVmIEhBVkVfU09DS0xFTl9UCi0KLS8qIGdvdCBpbl9hZGRyX3Q/ICovCi0jdW5kZWYgSEFWRV9JTl9BRERSX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGRldnMoKSAqLwotI3VuZGVmIEhBVkVfR0VUREVWUwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZGV2c3RhdF9nZXRkZXZzKCkgKi8KLSN1bmRlZiBIQVZFX0RFVlNUQVRfR0VUREVWUwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgPG5ldGluZXQvaW5fcGNiLmg+ICovCi0jdW5kZWYgSEFWRV9ORVRJTkVUX0lOX1BDQl9ICi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSA8c3lzL2Rpc2tsYWJlbC5oPiAqLwotI3VuZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICi0KLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIChwcm9jZXNzb3IpIGRlZmluZXMgX19GVU5DVElPTl9fIGZvciB5b3UgKi8KLSN1bmRlZiBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVECi0KLS8qIG9uIGFpeCwgaWYgeW91IGhhdmUgcGVyZnN0YXQgKi8KLSN1bmRlZiBIQVZFX1BFUkZTVEFUCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBsaWJkYiwgbGlibm0gb3IgbGlicnBtLCByZXNwZWN0aXZlbHkgKi8KLSN1bmRlZiBIQVZFX0xJQkRCCi0jdW5kZWYgSEFWRV9MSUJOTQotI3VuZGVmIEhBVkVfTElCUlBNCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBwa2dpbmZvICovCi0jdW5kZWYgSEFWRV9QS0dJTkZPCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBnZXRob3N0YnluYW1lICovCi0jdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcGVybF9ldmFsX3B2KCkgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9MQwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdGhlIFBlcmxfZXZhbF9wdigpIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFZfVUMKLQotLyogcHJpbnRpbmcgc3lzdGVtICovCi0jdW5kZWYgSEFWRV9MUFNUQVQKLSN1bmRlZiBMUFNUQVRfUEFUSAotI3VuZGVmIEhBVkVfUFJJTlRDQVAKLS8qIFVzZSBkbWFsbG9jIHRvIGRvIG1hbGxvYyBkZWJ1Z2dpbmc/ICovCi0jdW5kZWYgSEFWRV9ETUFMTE9DX0gKLQotLyogbG9jYXRpb24gb2YgVU5JWCBrZXJuZWwgKi8KLSNkZWZpbmUgS0VSTkVMX0xPQyAiL3ZtdW5peCIKLQotLyogbG9jYXRpb24gb2YgbW91bnQgdGFibGUgbGlzdCAqLwotI2RlZmluZSBFVENfTU5UVEFCICIvZXRjL21udHRhYiIKLQotLyogbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UgKG9rIGlmIG5vdCBmb3VuZCkgKi8KLSN1bmRlZiBETUVNX0xPQwotCi0vKiBDb21tYW5kIHRvIGdlbmVyYXRlIHBzIG91dHB1dCwgdGhlIGZpbmFsIGNvbHVtbiBtdXN0IGJlIHRoZSBwcm9jZXNzCi0gICBuYW1lIHdpdGhPVVQgYXJndW1lbnRzICovCi0jZGVmaW5lIFBTQ01EICIvYmluL3BzIgotCi0vKiBXaGVyZSBpcyB0aGUgdW5hbWUgY29tbWFuZCAqLwotI2RlZmluZSBVTkFNRVBST0cgIi9iaW4vdW5hbWUiCi0KLS8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIGxpbnV4IGFuZCAvcHJvYy9uZXQvZGV2IGhhcyB0aGUgY29tcHJlc3NlZAotICAgZmllbGQsIHdoaWNoIGV4aXN0cyBpbiBsaW51eCBrZXJuZWxzIDIuMiBhbmQgZ3JlYXRlci4gKi8KLSN1bmRlZiBQUk9DX05FVF9ERVZfSEFTX0NPTVBSRVNTRUQKLQotLyogZGVmaW5lIHJ0ZW50cnkgdG8gb3J0ZW50cnkgb24gU1lTViBtYWNoaW5lcyAoYWxwaGFzKSAqLwotI3VuZGVmIFJURU5UUlkKLQotLyogVXNlIEJTRCA0LjQgcm91dGluZyB0YWJsZSBlbnRyaWVzPyAqLwotI3VuZGVmIFJURU5UUllfNF80Ci0KLS8qIERvZXMgc3RydWN0IHNpZ2FjdGlvbiBoYXZlIGEgc2Ffc2lnYWN0aW9uIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TSUdBQ1RJT05fSEFTX1NBX1NJR0FDVElPTgotCi0vKiBEb2VzIHN0cnVjdCB0bSBoYXZlIGEgdG1fZ210b2ZmIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9UTV9IQVNfVE1fR01UT0ZGRgotCi0vKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfbGVuIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfTEVOCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9mYW1pbHkyIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaGF2ZSBhIHNzX2ZhbWlseSBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaGF2ZSBhIF9fc3NfZmFtaWx5IGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19fX1NTX0ZBTUlMWQotCi0vKiBEb2VzIHN0cnVjdCBpbjZfYWRkciBoYXZlIGEgczZfdW4uc2E2X2xhZGQgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX0lONl9BRERSX0hBU19TNl9VTl9TQTZfTEFERFIKLQotLyogcnRlbnRyeSBzdHJ1Y3R1cmUgdGVzdHMgKi8KLSN1bmRlZiBSVEVOVFJZX1JUX05FWFQKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVVNFCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1JFRkNOVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNICi0KLS8qIGlmbmV0IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFX0lGU19WQUxVRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfU1BFRUQKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lRRFJPUFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX05TRUMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX05PUFJPVE8KLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PQllURVMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lCWVRFUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QKLQotLyogdGNwc3RhdC50Y3BzX3Jjdm1lbWRyb3AgKi8KLSN1bmRlZiBTVFJVQ1RfVENQU1RBVF9IQVNfVENQU19SQ1ZNRU1EUk9QCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRElTQ0FSRAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVEJDQVNUCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRlVMTFNPQ0sKLQotLyogYXJwaGQuYXRfbmV4dCAqLwotI3VuZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAotCi0vKiBpZmFkZHIuaWZhX25leHQgKi8KLSN1bmRlZiBTVFJVQ1RfSUZBRERSX0hBU19JRkFfTkVYVAotCi0vKiBpZm5ldC5pZl9tdHUgKi8KLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX01UVQotCi0vKiBzd2RldnQuc3dfbmJsa3NlbmFibGVkICovCi0jdW5kZWYgU1RSVUNUX1NXREVWVF9IQVNfU1dfTkJMS1NFTkFCTEVECi0KLS8qIG5saXN0Lm5fdmFsdWUgKi8KLSN1bmRlZiBTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUKLQotLyogbmxpc3Q2NC5uX3ZhbHVlICovCi0jdW5kZWYgU1RSVUNUX05MSVNUNjRfSEFTX05fVkFMVUUKLQotLyogaXBzdGF0IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URk9SV0FSRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URlJBRwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19ERUxJVkVSRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR0RST1BQRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR1RJTUVPVVQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTE9DQUxPVVQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9QUk9UTwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1JPVVRFCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09EUk9QUEVECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09GUkFHTUVOVFMKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfUkVBU1NFTUJMRUQKLQotLyogdmZzc3RhdC5mX2Zyc2l6ZSAqLwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQotCi0vKiB2ZnNzdGF0LmZfZmlsZXMgKi8KLSN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUwotCi0vKiBzdGF0ZnMgaW5vZGUgc3RydWN0dXJlIHRlc3RzKi8KLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GRlJFRQotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkFWQUlMCi0KLS8qIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgKi8KLSN1bmRlZiBTVFJVQ1RfREVTX0tTX1NUUlVDVF9IQVNfV0VBS19LRVkKLQotLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWQgKi8KLSN1bmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLQotLyogc3lzY3RsIHdvcmtzIHRvIGdldCBib290dGltZSwgZXRjLi4uICovCi0jdW5kZWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTAotCi0vKiBkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oICovCi0jdW5kZWYgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSCi0KLS8qIERlZmluZSBpZiBzdGF0ZnMgdGFrZXMgMiBhcmdzIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGhhcwotICAgdHlwZSBzdHJ1Y3QgZnNfZGF0YS4gW1VsdHJpeF0gKi8KLSN1bmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCi0KLS8qIERlZmluZSBpZiB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBpbiA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSAgIGRlcGVuZCBvbiB0aGUgaW50ZWdlciB2YXJpYWJsZSBgaHonLiAgW0ZyZWVCU0QgNC54XSAqLwotI3VuZGVmIFRDUFRWX05FRURTX0haCi0KLS8qIE5vdC10by1iZS1jb21waWxlZCBtYWNyb3MgZm9yIHVzZSBieSBjb25maWd1cmUgb25seSAqLwotI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KQotI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KQotI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSkKLSNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopCi0jZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpCi0jZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpCi0jZGVmaW5lIGNvbmZpZ19lcnJvcih4KQotI2RlZmluZSBjb25maWdfd2FybmluZyh4KQotICAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAobWluZ3czMikgfHwgZGVmaW5lZCAoY3lnd2luKQotI2RlZmluZSBFTlZfU0VQQVJBVE9SICI7IgotI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzsnCi0jZWxzZQotI2RlZmluZSBFTlZfU0VQQVJBVE9SICI6IgotI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzonCi0jZW5kaWYKLQogLyogZGVmaW5pdGlvbnMgYWRkZWQgYnkgY29uZmlndXJlIG9uLXRoZS1mbHkgKi8KIEBUT1BACiBAQk9UVE9NQAogCiAvKiBlbmQgb2YgZGVmaW5pdGlvbnMgYWRkZWQgYnkgY29uZmlndXJlIG9uLXRoZS1mbHkgKi8KIAotI2lmbmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIEhBVkVfSU5ERVgKLSMgZGVmaW5lIHN0cmNociBpbmRleAotIyBkZWZpbmUgc3RycmNociByaW5kZXgKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTkRFWAotI2lmZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgbWluZ3czMgotIyBkZWZpbmUgaW5kZXgoYSxiKSBzdHJjaHIoYSxiKQotIyBkZWZpbmUgcmluZGV4KGEsYikgc3RycmNocihhLGIpCi0jZWxzZQotIyBkZWZpbmUgaW5kZXggc3RyY2hyCi0jIGRlZmluZSByaW5kZXggc3RycmNocgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNQ1BZCi0jaWZkZWYgSEFWRV9CQ09QWQotIyBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtbW92ZShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbWNtcCBiY21wCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNTU9WRQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBtZW1tb3ZlIG1lbWNweQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0JDT1BZCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIGJjb3B5KHMsIGQsIG4pIG1lbWNweSAoKGQpLCAocyksIChuKSkKLSMgZGVmaW5lIGJ6ZXJvKHAsbikgbWVtc2V0KChwKSwoMCksKG4pKQotIyBkZWZpbmUgYmNtcCBtZW1jbXAKLSNlbmRpZgotI2VuZGlmCi0KIC8qIElmIHlvdSBoYXZlIG9wZW5zc2wgMC45Ljcgb3IgYWJvdmUsIHlvdSBsaWtlbHkgaGF2ZSBBRVMgc3VwcG9ydC4gKi8KICN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9BRVNfSCkgJiYgZGVmaW5lZChIQVZFX0FFU19DRkIxMjhfRU5DUllQVCkKKyNpZiAoZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9BRVNfSCkgJiYgZGVmaW5lZChIQVZFX0FFU19DRkIxMjhfRU5DUllQVCkpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogI2RlZmluZSBIQVZFX0FFUyAxCiAjZW5kaWYKIApAQCAtMzY0LDI3ICs4OSw2IEBACiAvKiBkZWZhdWx0IGxpc3Qgb2YgbWlicyB0byBsb2FkICovCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJTICJJUC1NSUI6SUYtTUlCOlRDUC1NSUI6VURQLU1JQjpTTk1QdjItTUlCOlJGQzEyMTMtTUlCIgogCi0vKiBkZWZhdWx0IGxvY2F0aW9uIHRvIGxvb2sgZm9yIG1pYnMgdG8gbG9hZCB1c2luZyB0aGUgYWJvdmUgdG9rZW5zCi0gICBhbmQvb3IgdGhvc2UgaW4gdGhlIE1JQlMgZW52cmlvbm1lbnQgdmFyaWFibGUqLwotI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTCi0KLS8qIGRlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQsIHNwZWNpZmllZCBieSBwYXRoLiAqLwotI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUwotCi0vKiBzaG91bGQgd2UgY29tcGlsZSB0byB1c2Ugc3BlY2lhbCBvcGFxdWUgdHlwZXM6IGZsb2F0LCBkb3VibGUsCi0gICBjb3VudGVyNjQsIGk2NCwgdWk2NCwgdW5pb24/ICovCi0jdW5kZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCi0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHN1cHBvcnQgZm9yIGJvdGggYXV0aGVudGljYXRpb24gYW5kCi0gICBwcml2YWN5IHN1cHBvcnQuICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE1ENSBjb2RlIC4uLiovCi0jdW5kZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1Ci0KLS8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBjb2RlUzExIGxpYnJhcnkgLi4uKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9QS0NTMTEKLQogLyogZGVidWdnaW5nIHN0dWZmICovCiAvKiBpZiBkZWZpbmVkLCB3ZSBvcHRpbWl6ZSB0aGUgY29kZSB0byBleGNsdWRlIGFsbCBkZWJ1Z2dpbmcgY2FsbHMuICovCiAjdW5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKQEAgLTQwMCw5ICsxMDQsNiBAQAogICAgbGluZXM6IFBFUlNJU1RFTlRfRElSRUNUT1JZL05BTUUucGVyc2lzdGVudC5jb25mICovCiAjZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgIi92YXIvc25tcCIKIAotLyogUEVSU0lTVEVOVF9NQVNLOiB0aGUgdW1hc2sgcGVybWlzc2lvbnMgdG8gc2V0IHVwIHBlcnNpc3RlbnQgZmlsZXMgd2l0aCAqLwotI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfTUFTSyAwNzcKLQogLyogQUdFTlRfRElSRUNUT1JZX01PREU6IHRoZSBtb2RlIHRoZSBhZ2VudHMgc2hvdWxkIHVzZSB0byBjcmVhdGUKICAgIGRpcmVjdG9yaWVzIHdpdGguIFNpbmNlIHRoZSBkYXRhIHN0b3JlZCBoZXJlIGlzIHByb2JhYmx5IHNlbnNpdGl2ZSwgaXQKICAgIHByb2JhYmx5IHNob3VsZCBiZSByZWFkLW9ubHkgYnkgcm9vdC9hZG1pbmlzdHJhdG9yLiAqLwpAQCAtNDQ3LDE5ICsxNDgsNiBAQAogLyogVXNlIGxpYndyYXAgdG8gaGFuZGxlIGFsbG93L2RlbnkgaG9zdHM/ICovCiAjdW5kZWYgTkVUU05NUF9VU0VfTElCV1JBUAogCi0vKiB0ZXN0aW5nIGNvZGUgc2VjdGlvbnMuICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFIAotCi0vKiBJZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBkb24ndCBleGl0IHVwb24ga21lbSBlcnJvcnMgKi8KLSN1bmRlZiBORVRTTk1QX05PX1JPT1RfQUNDRVNTCi0KLS8qIElmIHdlIGRvbid0IHdhbnQgdG8gdXNlIGttZW0uICovCi0jdW5kZWYgTkVUU05NUF9OT19LTUVNX1VTQUdFCi0KLS8qIElmIHlvdSBkb24ndCB3YW50IHRoZSBhZ2VudCB0byByZXBvcnQgb24gdmFyaWFibGVzIGl0IGRvZXNuJ3QgaGF2ZSBkYXRhIGZvciAqLwotI3VuZGVmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCi0KLQogLyogTWliLTIgdHJlZSBJbmZvICovCiAvKiBUaGVzZSBhcmUgdGhlIHN5c3RlbSBpbmZvcm1hdGlvbiB2YXJpYWJsZXMuICovCiAKQEAgLTU2Myw3ICsyNTEsNyBAQAogI2lmZGVmIFdJTjMyCiAjZGVmaW5lIE5FVFNOTVBfT1NUWVBFIE5FVFNOTVBfV0lOMzJJRAogI2VuZGlmCi0jaWYgZGVmaW5lZChhaXgzKSB8fCBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4MykgfHwgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogI2RlZmluZSBORVRTTk1QX09TVFlQRSBORVRTTk1QX0FJWElECiAjZW5kaWYKICNpZiBkZWZpbmVkKGRhcndpbikgJiYgKGRhcndpbiA+PSA4KQpAQCAtNjU0LDkgKzM0Miw2IEBACiAvKiBpbnRlcm5hbCBkZWZpbmUgKi8KICNkZWZpbmUgTkVUU05NUF9MQVNURklFTEQgLTEKIAotLyogY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWVkICovCi0jZGVmaW5lIE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMgIiIKLQogLyogIFBsdWdnYWJsZSB0cmFuc3BvcnRzLiAgKi8KIAogLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVURQL0lQIHRyYW5zcG9ydCBkb21haW4gaXMKQEAgLTY5MSwxMyArMzc2LDMyIEBACiAgICAgYXZhaWxhYmxlLiAgKi8KICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgogCi0vKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBVRFAvSVAgdHJhbnNwb3J0IGRvbWFpbiBpcworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTIHRyYW5zcG9ydCBkb21haW4gaXMKICAgICBhdmFpbGFibGUuICAgKi8KLSN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNfRE9NQUlOCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTQkFTRV9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgQWxpYXMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBTU0ggdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgRFRMUy9VRFAgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUy9UQ1AgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KIAogLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciBzdGRpbi9vdXQgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOCiAKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIElQdjRCYXNlIHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfSVBWNEJBU0VfRE9NQUlOCisKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI3VuZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogCkBAIC03MDcsMTggKzQxMSw5IEBACiAvKiBkZWZpbmUgdGhpcyBpZiB0aGUgbG9jYWwgc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI3VuZGVmIE5FVFNOTVBfU0VDTU9EX0xPQ0FMU00KIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggcmVlbnRyYW50L3RocmVhZGVkIGNvZGUgKGluY29tcGxldGUpKi8KLSN1bmRlZiBORVRTTk1QX1JFRU5UUkFOVAotCiAvKiBkZWZpbmUgaWYgY29uZmlndXJlZCBhcyBhICJtaW5pLWFnZW50IiAqLwogI3VuZGVmIE5FVFNOTVBfTUlOSV9BR0VOVAogCi0vKiBkZWZpbmUgaWYgeW91IGFyZSBlbWJlZGRpbmcgcGVybCBpbiB0aGUgbWFpbiBhZ2VudCAqLwotI3VuZGVmIE5FVFNOTVBfRU1CRURERURfUEVSTAotCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgTUZEIG1vZHVsZSByZXdyaXRlcyovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCi0KIC8qIHRoaXMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXQtc25tcCBtaWIgdHJlZS4gIEl0IHNob3VsZG4ndCBiZQogICAgY2hhbmdlZCwgYXMgdGhlIHBsYWNlcyBpdCBpcyB1c2VkIGFyZSBleHBlY3RlZCB0byBiZSBjb25zdGFudAogICAgdmFsdWVzIG9yIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBVQ0QtU05NUC1NSUIuICovCkBAIC03ODYsMzMgKzQ4MSwxMiBAQAogIyAgZGVmaW5lIE5FVFNOTVBfSU1QT1JUIGV4dGVybgogI2VuZGlmCiAKLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgYnkgZGVmYXVsdCAqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVgKLQotLyogZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHkgKi8KLSN1bmRlZiBORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZCi0KLS8qIGRlZmluZSBpZiB5b3UgZG8gbm90IHdhbnQgc25tcHRyYXBkIHRvIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudCAqLwotI3VuZGVmIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCi0KLS8qIGRlZmluZSB0aGlzIGlmIHdlJ3JlIHVzaW5nIHRoZSBuZXcgTUlUIGNyeXB0byBBUEkgKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQKLQotLyogZGVmaW5lIHRoaXMgaWYgeW91J3JlIHVzaW5nIEhlaW1kYWwgS2VyYmVyb3MgKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMCi0KIC8qIGNvbW1lbnQgdGhlIG5leHQgbGluZSBpZiB5b3UgYXJlIGNvbXBpbGluZyB3aXRoIGxpYnNubXAuaCAKICAgIGFuZCBhcmUgbm90IHVzaW5nIHRoZSBVQy1EYXZpcyBTTk1QIGxpYnJhcnkuICovCiAjZGVmaW5lIFVDRF9TTk1QX0xJQlJBUlkgMQogCi0vKiBhZGQgaW4gcmVjZW50IENNVSBsaWJyYXJ5IGV4dGVuc2lvbnMgKG5vdCBjb21wbGV0ZSkgKi8KLSN1bmRlZiBDTVVfQ09NUEFUSUJMRQotCiAvKiBmaW5hbCBjb25jbHVzaW9uIG9uIG5saXN0IHVzYWdlICovCi0jaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSkgJiYgIWRlZmluZWQoTkVUU05NUF9ET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQorI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFKSAmJiAhZGVmaW5lZChORVRTTk1QX0RPTlRfVVNFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfS01FTSkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQogI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hY2luY2x1ZGUubTQgYi9hY2luY2x1ZGUubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTI5ODAuLjAwMDAwMDAKLS0tIGEvYWNpbmNsdWRlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLWRubCBAc3lub3BzaXMgQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKFZBUklBQkxFTkFNRSxRVUVTVElPTixbREVGQVVMVF0pCi1kbmwKLWRubCBBc2tzIGEgUVVFU1RJT04gYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW4gVkFSSUFCTEVOQU1FIHdpdGggYW4gb3B0aW9uYWwKLWRubCBERUZBVUxUIHZhbHVlIGlmIHRoZSB1c2VyIG1lcmVseSBoaXRzIHJldHVybi4KLWRubAotZG5sIEB2ZXJzaW9uIDEuMTUKLWRubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotZG5sCi1BQ19ERUZVTihbQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FXSwKLWRubCBjaGFuZ2VxdW90ZSg8PCwgPj4pIGRubAotZG5sIDw8Ci1bCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIiQyICgkMyk6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiQzIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iJDMiCi1maQotZXZhbCAkMT1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iJDMiCi1ldmFsICQxPVwiJHRtcGlucHV0XCIKLWZpCi1dCi1kbmwgPj4KLWRubCBjaGFuZ2VxdW90ZShbLCBdKQotKSBkbmwgZG9uZSBBQ19QUk9NUFRfVVNFUgotCi1kbmwgQHN5bm9wc2lzIEFDX1BST01QVF9VU0VSKFZBUklBQkxFTkFNRSxRVUVTVElPTixbREVGQVVMVF0sUVVPVEVEKQotZG5sCi1kbmwgQXNrcyBhIFFVRVNUSU9OIGFuZCBwdXRzIHRoZSByZXN1bHRzIGluIFZBUklBQkxFTkFNRSB3aXRoIGFuIG9wdGlvbmFsCi1kbmwgREVGQVVMVCB2YWx1ZSBpZiB0aGUgdXNlciBtZXJlbHkgaGl0cyByZXR1cm4uICBBbHNvIGNhbGxzIAotZG5sIEFDX0RFRklORV9VTlFVT1RFRCgpIG9uIHRoZSBWQVJJQUJMRU5BTUUgZm9yIFZBUklBQkxFTkFNRXMgdGhhdCBzaG91bGQKLWRubCBiZSBlbnRlcmVkIGludG8gdGhlIGNvbmZpZy5oIGZpbGUgYXMgd2VsbC4gIElmIFFVT1RFRCBpcyAicXVvdGVkIiB0aGVuCi1kbmwgdGhlIHJlc3VsdCB3aWxsIGJlIGRlZmluZWQgd2l0aGluIHF1b3Rlcy4KLWRubAotZG5sIEB2ZXJzaW9uIDEuMTUKLWRubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotZG5sCi1BQ19ERUZVTihbQUNfUFJPTVBUX1VTRVJdLAotWwotTVNHX0NIRUNLPWBlY2hvICIkMiIgfCB0YWlsIC0xYAotQUNfQ0FDSEVfQ0hFQ0soJE1TR19DSEVDSywgYWNfY3ZfdXNlcl9wcm9tcHRfJDEsCi1bZWNobyAiIiA+JkFDX0ZEX01TRwotQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKCQxLFskMl0sJDMpCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0XyQxPVwkJDEKLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JkFDX0ZEX01TRwotXSkKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF8kMSIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgIngkNCIgPSAieHF1b3RlZCIgLW8gIngkNCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsIiRhY19jdl91c2VyX3Byb21wdF8kMSIpCi0gIGVsc2UKLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsJGFjX2N2X3VzZXJfcHJvbXB0XyQxKQotICBmaQotZmkKLV0pIGRubAotCi1kbmwgQHN5bm9wc2lzIEFDX0NIRUNLX1NUUlVDVF9GT1IoSU5DTFVERVMsU1RSVUNULE1FTUJFUixERUZJTkUsW25vXSkKLWRubAotZG5sIENoZWNrcyBTVFJVQ1QgZm9yIE1FTUJFUiBhbmQgZGVmaW5lcyBERUZJTkUgaWYgZm91bmQuCi1kbmwKLWRubCBAdmVyc2lvbiAxLjE1Ci1kbmwgQGF1dGhvciBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLWRubAotQUNfREVGVU4oW0FDX0NIRUNLX1NUUlVDVF9GT1JdLFsKLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gIiQyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICIkMyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLWNoYW5nZXF1b3RlKCwgKWRubAotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi1jaGFuZ2VxdW90ZShbLCBdKWRubAotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMi4kM10pCi1BQ19DQUNIRV9WQUwoJGFjX3NhZmVfYWxsLAotWwotaWYgdGVzdCAieCQ0IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4JDQiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiQ0IgotZmkKLUFDX1RSWV9DT01QSUxFKFsKLSQxCi1dLFsKLXN0cnVjdCAkMiB0ZXN0aXQ7IAotdGVzdGl0LiQzICRkZWZpbmVpdDsKLV0sIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIsIGV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIiApCi1dKQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKHllcykKLSAgQUNfREVGSU5FX1VOUVVPVEVEKCRhY191Y19kZWZpbmUpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotCi1dKQotCi1kbmwgQUNfQ0hFQ0tfSUZORVRfRk9SKFNVQlNUUlVDVCxbbm9dKQotQUNfREVGVU4oW0FDX0NIRUNLX0lGTkVUX0ZPUl0sWwotZG5sIGNoZWNrIGZvciAkMSBpbiBzdHJ1Y3QgaWZuZXQKLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLV0sIGlmbmV0LCAkMSwgJDIpCi1dKQotCi1kbmwKLWRubCBBZGQgYSBzZWFyY2ggcGF0aCB0byB0aGUgTElCUyBhbmQgQ0ZMQUdTIHZhcmlhYmxlcwotZG5sCi1BQ19ERUZVTihbQUNfQUREX1NFQVJDSF9QQVRIXSxbCi0gIGlmIHRlc3QgIngkMSIgIT0geCAtYSAtZCAkMTsgdGhlbgotICAgICBpZiB0ZXN0IC1kICQxL2xpYjsgdGhlbgotICAgICAgIExERkxBR1M9Ii1MJDEvbGliICRMREZMQUdTIgotICAgICBmaQotICAgICBpZiB0ZXN0IC1kICQxL2luY2x1ZGU7IHRoZW4KLQlDUFBGTEFHUz0iLUkkMS9pbmNsdWRlICRDUFBGTEFHUyIKLSAgICAgZmkKLSAgZmkKLV0pCi0KLWRubAotZG5sIFN0b3JlIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIGxhdGVyLgotZG5sCi1BQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0lOSVRdLFsKLSAgcm0gLWYgY29uZmlndXJlLXN1bW1hcnkKLV0pCi0KLUFDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfQUREXSxbCi0gIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKLSAgJDEKLUVPRgotXSkKLQotQUNfREVGVU4oW0FDX01TR19DQUNIRV9ESVNQTEFZXSxbCi0gIGVjaG8gIiIKLSAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICBlY2hvICIgICAgICAgICAgICBOZXQtU05NUCBjb25maWd1cmF0aW9uIHN1bW1hcnk6IgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGVjaG8gIiIKLSAgY2F0IGNvbmZpZ3VyZS1zdW1tYXJ5Ci0gIGVjaG8gIiIKLSAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICBlY2hvICIiCi1dKQotCi1BQ19ERUZVTihbQUNfTVNHX01PRFVMRV9EQkddLAotWwotICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCi0gICAgZWNobyAkMSAkMiAkMyAkNAotICBmaQotXQotKQpkaWZmIC0tZ2l0IGEvYWNsb2NhbC5tNCBiL2FjbG9jYWwubTQKaW5kZXggNDQxYzc1Mi4uY2Q4MGM3NCAxMDA2NDQKLS0tIGEvYWNsb2NhbC5tNAorKysgYi9hY2xvY2FsLm00CkBAIC0xLDcgKzEsNyBAQAotIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTAuMSAtKi0gQXV0b2NvbmYgLSotCisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMSAtKi0gQXV0b2NvbmYgLSotCiAKICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTExLDY2NDAgKzExLDE0IEBACiAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKICMgUEFSVElDVUxBUiBQVVJQT1NFLgogCi0jIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQotCi0jIHNlcmlhbCA1MiBBQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX1BST1ZJREVfSUZFTFNFKE1BQ1JPLU5BTUUsIElGLVBST1ZJREVELCBJRi1OT1QtUFJPVklERUQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQgYnkgQXV0b2NvbmYsIGRlZmluZSBpdCBoZXJlLgotbTRfaWZkZWYoW0FDX1BST1ZJREVfSUZFTFNFXSwKLSAgICAgICAgIFtdLAotICAgICAgICAgW200X2RlZmluZShbQUNfUFJPVklERV9JRkVMU0VdLAotCSAgICAgICAgIFttNF9pZmRlZihbQUNfUFJPVklERV8kMV0sCi0JCSAgICAgICAgICAgWyQyXSwgWyQzXSldKV0pCi0KLQotIyBBQ19QUk9HX0xJQlRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtfQUNfUFJPR19MSUJUT09MXSlkbmwKLWRubCBJZiBBQ19QUk9HX0NYWCBoYXMgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLCBydW4gQUNfTElCVE9PTF9DWFgKLWRubCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlLCBob29rIGl0IGluIGF0IHRoZSBlbmQgb2YgQUNfUFJPR19DWFguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gICAgW0FDX0xJQlRPT0xfQ1hYXSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbQUNfTElCVE9PTF9DWFgKLSAgXSldKQotZG5sIEFuZCBhIHNpbWlsYXIgc2V0dXAgZm9yIEZvcnRyYW4gNzcgc3VwcG9ydAotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAotICAgIFtBQ19MSUJUT09MX0Y3N10sCi0gICAgW2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0FDX0xJQlRPT0xfRjc3Ci1dKV0pCi0KLWRubCBRdW90ZSBBXVtNX1BST0dfR0NKIHNvIHRoYXQgYWNsb2NhbCBkb2Vzbid0IGJyaW5nIGl0IGluIG5lZWRsZXNzbHkuCi1kbmwgSWYgZWl0aGVyIEFDX1BST0dfR0NKIG9yIEFdW01fUFJPR19HQ0ogaGF2ZSBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1bgotZG5sIEFDX0xJQlRPT0xfR0NKIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBib3RoLgotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAotICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKLSAgICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSwKLQlbQUNfTElCVE9PTF9HQ0pdLAotICAgICAgW2lmZGVmKFtBQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pCi0gICAgICAgaWZkZWYoW0FdW01fUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbTFRfQUNfUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbTFRfQUNfUFJPR19HQ0pdLAotCQlkZWZuKFtMVF9BQ19QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKV0pXSkKLV0pXSkjIEFDX1BST0dfTElCVE9PTAotCi0KLSMgX0FDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0sCi1bQUNfUkVRVUlSRShbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9DWFhdKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfRjc3XSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0dDSl0pZG5sCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi1BQ19TVUJTVChMSUJUT09MKWRubAotCi0jIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCi1kZWZpbmUoW0FDX1BST0dfTElCVE9PTF0sIFtdKQotXSkjIF9BQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX0xJQlRPT0xfU0VUVVAKLSMgLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdLAotW0FDX1BSRVJFUSgyLjUwKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NIQVJFRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU1RBVElDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19MRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTk1dKWRubAotCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAotQUNfUkVRVUlSRShbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKWRubAotIyBBdXRvY29uZiAyLjEzJ3MgQUNfT0JKRVhUIGFuZCBBQ19FWEVFWFQgbWFjcm9zIG9ubHkgd29ya3MgZm9yIEMgY29tcGlsZXJzIQotQUNfUkVRVUlSRShbQUNfT0JKRVhUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VYRUVYVF0pZG5sCi1kbmwKLUFDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOCi1BQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKLUFDX0xJQlRPT0xfT0JKRElSCi0KLUFDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAotX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KLSAgICBDT0xMRUNUX05BTUVTPQotICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSdzZWQgLWUgMXMvXlgvLycKLVtzZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJ10KLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1bZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJ10KLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKLSMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KLWRlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi0KLSMgQ29uc3RhbnRzOgotcm09InJtIC1mIgotCi0jIEdsb2JhbCB2YXJpYWJsZXM6Ci1kZWZhdWx0X29maWxlPWxpYnRvb2wKLWNhbl9idWlsZF9zaGFyZWQ9eWVzCi0KLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotIyB3aGljaCBuZWVkcyAnLmxpYicpLgotbGliZXh0PWEKLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotb2ZpbGU9IiRkZWZhdWx0X29maWxlIgotd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKLQotQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQotQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKLUFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQotCi1vbGRfQ0M9IiRDQyIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiCi0KLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwotdGVzdCAteiAiJENDIiAmJiBDQz1jYwotdGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCi10ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLXRlc3QgLXogIiRMRCIgJiYgTEQ9bGQKLXRlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi10ZXN0IC16ICIkTk0iICYmIE5NPW5tCi10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi10ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Ci10ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bwotCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLSAgICA7OwotICBlc2FjCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotZmkKLQotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKLWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi1maWxlX21hZ2ljKikKLSAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgotICAgIEFDX1BBVEhfTUFHSUMKLSAgZmkKLSAgOzsKLWVzYWMKLQotX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfRExPUEVOXSwgZW5hYmxlX2Rsb3Blbj15ZXMsIGVuYWJsZV9kbG9wZW49bm8pCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9XSU4zMl9ETExdLAotZW5hYmxlX3dpbjMyX2RsbD15ZXMsIGVuYWJsZV93aW4zMl9kbGw9bm8pCi0KLUFDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKLQlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLUFDX0FSR19XSVRIKFtwaWNdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXBpY10sCi0JW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKLSAgICBbcGljX21vZGU9IiR3aXRodmFsIl0sCi0gICAgW3BpY19tb2RlPWRlZmF1bHRdKQotdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0Ci0KLSMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0Ci10YWduYW1lPQotQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCi1fTFRfQUNfVEFHQ09ORklHCi1dKSMgQUNfTElCVE9PTF9TRVRVUAotCi0KLSMgX0xUX0FDX1NZU19DT01QSUxFUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLV0pIyBfTFRfQUNfU1lTX0NPTVBJTEVSCi0KLQotIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgotQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0sCi1bZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi1dKQotCi0KLSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCi1BQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLV0pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLQotCi0jIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCi0jIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCi1BQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgotXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3Igc29tZSB0aGluZ3Mgb24gZGFyd2luCi1BQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi0gICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCi0gICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKLSAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCi0gICAjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKLSAgICMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQotICAgIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQotICAgIyBsaW5rIGZsYWdzLgotICAgZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKLSAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCi0gICAgIC1keW5hbWljbGliICR7d2x9LXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYwotICAgaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYjsgdGhlbgotICAgICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwotICAgICBybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0gICBmaQotICAgcm0gY29uZnRlc3QuYwotICAgICAgZmldKQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCi0gICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KLSAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCi0gICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCi0gICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCi0gICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCi0gICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgXSkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMjNdXSkKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4xLiopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4qKQotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotICAgMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAxMC5bWzAxMl1dKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgMTAuKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwotICAgICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKLSAgICBmaQotICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKLSAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSJ+JE5NRURJVCAtcyBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gXCR7bGlifSIKLSAgICBmaQotICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCi0gICAgICBfbHRfZHN5bXV0aWw9In4kRFNZTVVUSUwgXCRsaWIgfHwgOiIKLSAgICBlbHNlCi0gICAgICBfbHRfZHN5bXV0aWw9Ci0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotCi0jIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCi0jIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKLSMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAotIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCi0jIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCi0jIHRvIHRoZSBhaXggbGQgbWFudWFsLgotQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX0xJTktfSUZFTFNFKEFDX0xBTkdfUFJPR1JBTSxbCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpXSxbXSkKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotXSkjIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQotCi0jIF9MVF9BQ19TSEVMTF9JTklUKEFSRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSwKLVtpZmRlZihbQUNfRElWRVJTSU9OX05PVElDRV0sCi0JICAgICBbQUNfRElWRVJUX1BVU0goQUNfRElWRVJTSU9OX05PVElDRSldLAotCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCi0kMQotQUNfRElWRVJUX1BPUAotXSkjIF9MVF9BQ19TSEVMTF9JTklUCi0KLQotIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2gKLSMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KLUFDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCi1bX0xUX0FDX1NIRUxMX0lOSVQoWwotIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgotU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLQotY2FzZSBYJEVDSE8gaW4KLVgqLS1mYWxsYmFjay1lY2hvKQotICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgotICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCi0gIDs7Ci1lc2FjCi0KLWVjaG89JHtFQ0hPLWVjaG99Ci1pZiB0ZXN0ICJYWyRdMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KLSAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCi0gIHNoaWZ0Ci1lbGlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgotICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQotICA6Ci1lbHNlCi0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KLSAgZXhlYyAkU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9Ci1maQotCi1pZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCi0gIHNoaWZ0Ci0gIGNhdCA8PEVPRgotWyRdKgotRU9GCi0gIGV4aXQgMAotZmkKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotaWYgdGVzdCAteiAiJEVDSE8iOyB0aGVuCi1pZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KLSMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAotICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KLSAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMmtCLCAxa0IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgotICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgotICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKLSAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotZmkKLQotaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgOgotZWxzZQotICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKLSAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZwotICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJwotICAjCi0gICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgotICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgZWNobz0iJGRpci9lY2hvIgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgotICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgotICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCi0gICAgICBlY2hvPSdwcmludCAtcicKLSAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgotCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCi0gICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KLSAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAotICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCi0gICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9Ci0gICAgZWxzZQotICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgotICAgICAgZWNobz0ncHJpbnRmICVzXG4nCi0gICAgICBpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLQkgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQkjIENvb2wsIHByaW50ZiB3b3JrcwotCToKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0JZXhwb3J0IENPTkZJR19TSEVMTAotCVNIRUxMPSIkQ09ORklHX1NIRUxMIgotCWV4cG9ydCBTSEVMTAotCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCi0JICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQllY2hvPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgotICAgICAgZWxzZQotCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCi0JcHJldj06Ci0KLQlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KLQkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCi0JICB0aGVuCi0JICAgIGJyZWFrCi0JICBmaQotCSAgcHJldj0iJGNtZCIKLQlkb25lCi0KLQlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgotCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKLQkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCi0JICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KLQllbHNlCi0JICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgotCSAgZWNobz1lY2hvCi0JZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgZmkKLWZpCi1maQotCi0jIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCi0jIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KLUVDSE89JGVjaG8KLWlmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCi0gICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi1maQotCi1BQ19TVUJTVChFQ0hPKQotXSldKSMgX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKLQotCi0jIF9MVF9BQ19MT0NLCi0jIC0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX0xPQ0tdLAotW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKLQlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLSMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAotIyBsaWJ0b29sIHN1cHBvcnQuCi1jYXNlICRob3N0IGluCi1pYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKkVMRi0zMiopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCi0gICAgICA7OwotICAgICpFTEYtNjQqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLSotKi1pcml4NiopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZWxzZQotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtMzIiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZmkKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKLXMzOTAqLSpsaW51eCp8c3BhcmMqLSpsaW51eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkweC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLSAgICAgICAgICA7OwotICAgICAgICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MCotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1zY28zLjJ2NSopCi0gICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAotICAgIFtBQ19MQU5HX1BVU0goQykKLSAgICAgQUNfVFJZX0xJTksoW10sW10sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCi0gICAgIEFDX0xBTkdfUE9QXSkKLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KLSAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKLSAgZmkKLSAgOzsKLXNwYXJjKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgotICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OwotICAgICAgKikKLSAgICAgICAgaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICBMRD0iJHtMRC1sZH0gLTY0IgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1bKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQotICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCi0gIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCi0gIDs7Ci0gIF0pCi1lc2FjCi0KLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotCi1dKSMgX0xUX0FDX0xPQ0sKLQotCi0jIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gIGlmZWxzZShbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCi0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi1dKQotCi1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi1lbHNlCi0gICAgaWZlbHNlKFskNl0sICwgOiwgWyQ2XSkKLWZpCi1dKSMgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04KLQotCi0jIEFDX0xJQlRPT0xfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKLSMgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCi0gIFskMj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICQzIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAkMj15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgJDI9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLV0pCi0KLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCi0gICAgaWZlbHNlKFskNF0sICwgOiwgWyQ0XSkKLWVsc2UKLSAgICBpZmVsc2UoWyQ1XSwgLCA6LCBbJDVdKQotZmkKLV0pIyBBQ19MSUJUT09MX0xJTktFUl9PUFRJT04KLQotCi0jIEFDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLAotWyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwotQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCi1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKLSAgaT0wCi0gIHRlc3RzdHJpbmc9IkFCQ0QiCi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKLSAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKLSAgICBmaQotICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIDs7Ci0KLSAgaW50ZXJpeCopCi0gICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAotICAgIDs7Ci0KLSAgb3NmKikKLSAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKLSAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAotICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCi0gICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0Ci0gICAgIwotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCi0gICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgotICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgOzsKLSAgc2NvMy4ydjUqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKLSAgICA7OwotICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCi0gICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sgCV1dLy8nYAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgZWxzZQotICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KLSAgICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKLQkgICAgICAgPSAiWFgkdGVzdHN0cmluZyIpID4vZGV2L251bGwgMj4mMSAmJgotCSAgICAgIG5ld19yZXN1bHQ9YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgICYmCi0JICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPSRuZXdfcmVzdWx0ICYmCi0JICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCi0gICAgICBkbwotICAgICAgICBpPWBleHByICRpICsgMWAKLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCi0gICAgICBkb25lCi0gICAgICB0ZXN0c3RyaW5nPQotICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbiBtYXNzaXZlCi0gICAgICAjIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgbGlua2VyLgotICAgICAgIyBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotXSkKLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vbmUpCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOCi0KLQotIyBfTFRfQUNfQ0hFQ0tfRExGQ04KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSwKLVtBQ19DSEVDS19IRUFERVJTKGRsZmNuLmgpZG5sCi1dKSMgX0xUX0FDX0NIRUNLX0RMRkNOCi0KLQotIyBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKWRubAotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBbJDRdCi1lbHNlCi0gIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0KLSNpZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZkZWYgUlRMRF9HTE9CQUwKLSMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKLSNlbHNlCi0jICBpZmRlZiBETF9HTE9CQUwKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKLSMgIGVsc2UKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKLSAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVwotIyAgaWZkZWYgUlRMRF9MQVpZCi0jICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKLSMgIGVsc2UKLSMgICAgaWZkZWYgRExfTEFaWQotIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBSVExEX05PVwotIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKLSMgICAgICBlbHNlCi0jICAgICAgICBpZmRlZiBETF9OT1cKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKLSNlbmRpZgotCi12b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9Ci1pbnQgbWFpbiAoKQotewotICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLSAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247Ci0KLSAgaWYgKHNlbGYpCi0gICAgewotICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOwotICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCi0gICAgfQotICBlbHNlCi0gICAgcHV0cyAoZGxlcnJvciAoKSk7Ci0KLSAgICBleGl0IChzdGF0dXMpOwotfV0KLUVPRgotICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCi0gICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAotICAgIGx0X3N0YXR1cz0kPwotICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KLSAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7Ci0gICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgJDMKLSAgZmkKLWZpCi1ybSAtZnIgY29uZnRlc3QqCi1dKSMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRgotCi0KLSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0NIRUNLX0RMRkNOXSlkbmwKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgotICBlbmFibGVfZGxvcGVuPXVua25vd24KLSAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KLSAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCi1lbHNlCi0gIGx0X2N2X2Rsb3Blbj1ubwotICBsdF9jdl9kbG9wZW5fbGlicz0KLQotICBjYXNlICRob3N0X29zIGluCi0gIGJlb3MqKQotICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgOzsKLQotICBtaW5ndyogfCBwdzMyKikKLSAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgOzsKLQotICBjeWd3aW4qKQotICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgOzsKLQotICBkYXJ3aW4qKQotICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKLSAgICBsdF9jdl9kbG9wZW49ImR5bGQiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgXSkKLSAgIDs7Ci0KLSAgKikKLSAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCi0JICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAotICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKLQkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAotCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAotCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAotCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAotCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCi0JCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCi0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKLQkgICAgICBdKQotCSAgICBdKQotCSAgXSkKLQldKQotICAgICAgXSkKLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KLSAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLSAgICAJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKLSAgICAgIF0pCi0gICAgZmkKLQotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DQ19DX08oW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotXSkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ0NfQ19PCi0KLQotIyBBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xPQ0tdKWRubAotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCi0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUwotCi0KLSMgQUNfTElCVE9PTF9PQkpESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKLVtybSAtZiAubGlicyAyPi9kZXYvbnVsbAotbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLmxpYnM7IHRoZW4KLSAgbHRfY3Zfb2JqZGlyPS5saWJzCi1lbHNlCi0gICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCi0gIGx0X2N2X29iamRpcj1fbGlicwotZmkKLXJtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi1dKSMgQUNfTElCVE9PTF9PQkpESVIKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLAotW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQotaWYgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fCBcCi0gICB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fCBcCi0gICB0ZXN0ICJYJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAotZmkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKLQotaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotXSkjIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRICi0KLQotIyBBQ19MSUJUT09MX1NZU19MSUJfU1RSSVAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwKLVtzdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgZGFyd2luKikKLSAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgICBlbHNlCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLWZpCi0gICAgICAgOzsKLSAgICopCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotCi0KLSMgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1tNF9pZigkMSxbXSxbCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwotICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7Ci0gIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgZmkKLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCi0gIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAotICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsc2UKLSAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAotCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgotICAgIGZpCi0gIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJwotQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewotICBsdF9mb289IiI7Ci0gIGx0X2NvdW50PTA7Ci0gIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7Ci0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewotICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKLSAgICAgICAgbHRfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbHRfY291bnQtLTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KLSAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Ci19J2AKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF9zZWFyY2hfcGF0aF9zcGVjYAotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maV0pCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeFtbNC05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbWzQ1XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgW2dyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLSAgbTRfaWYoWyQxXSwgW10sWwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkgCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAotICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4W1szLTldXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwKLVtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiXSkKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLAotW2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiXSkKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLV0pIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotCi0KLSMgX0xUX0FDX1RBR0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQVJHX1dJVEgoW3RhZ3NdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXRhZ3NAPDpAPVRBR1NAOj5AXSwKLSAgICAgICAgW2luY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBAPDpAYXV0b21hdGljQDo+QF0pXSwKLSAgICBbdGFnbmFtZXM9IiR3aXRodmFsIl0pCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgZXhpc3RdKQotICBmaQotCi0gIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKLSAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdF0pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1dBUk4oW3VzaW5nIGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gYCRvZmlsZSddKQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgotICBmaQotCi0gICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgotICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgotICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6W1stX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dXTo6ZydgIGluCi0gICAgIiIpIDs7Ci0gICAgKikgIEFDX01TR19FUlJPUihbaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgZXNhYwotCi0gICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKLSAgICB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoW3RhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0c10pCi0gICAgZmkKLQotICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgotICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDWFgpCi0JaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLQkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0JICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBGNzcpCi0JaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0JQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCTs7Ci0KLSAgICAgICopCi0JQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICBBQ19NU0dfRVJST1IoW3VuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLl0pCi0gIGZpCi1maQotXSkjIF9MVF9BQ19UQUdDT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfRExPUEVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBjaGVja3MgZm9yIGRsb3BlbiBzdXBwb3J0Ci1BQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAotIFtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9ETE9QRU4KLQotCi0jIEFDX0xJQlRPT0xfV0lOMzJfRExMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGRlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBETExzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAotW0FDX0JFRk9SRShbJDBdLCBbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLQotCi0jIEFDX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3NoYXJlZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zaGFyZWQ9XUFDX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU0hBUkVECi0KLQotIyBBQ19ESVNBQkxFX1NIQVJFRAotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc2hhcmVkIGZsYWcgdG8gLS1kaXNhYmxlLXNoYXJlZAotQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU0hBUkVEKG5vKQotXSkjIEFDX0RJU0FCTEVfU0hBUkVECi0KLQotIyBBQ19FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAotW2RlZmluZShbQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zdGF0aWM9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU1RBVElDCi0KLQotIyBBQ19ESVNBQkxFX1NUQVRJQwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc3RhdGljIGZsYWcgdG8gLS1kaXNhYmxlLXN0YXRpYwotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU1RBVElDKG5vKQotXSkjIEFDX0RJU0FCTEVfU1RBVElDCi0KLQotIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAotW2RlZmluZShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XUFDX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgdG8gLS1kaXNhYmxlLWZhc3QtaW5zdGFsbAotQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMKG5vKQotXSkjIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19MSUJUT09MX1BJQ01PREUoW01PREVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZwotIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAotcGljX21vZGU9aWZlbHNlKCQjLDEsJDEsZGVmYXVsdCkKLV0pIyBBQ19MSUJUT09MX1BJQ01PREUKLQotCi0jIEFDX1BST0dfRUdSRVAKLSMgLS0tLS0tLS0tLS0tLQotIyBUaGlzIGlzIHByZWRlZmluZWQgc3RhcnRpbmcgd2l0aCBBdXRvY29uZiAyLjU0LCBzbyB0aGlzIGNvbmRpdGlvbmFsCi0jIGRlZmluaXRpb24gY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIEF1dG9jb25mIDIuNTQgb3IgbGF0ZXIuCi1tNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLCBbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgZWdyZXBdLCBbYWNfY3ZfcHJvZ19lZ3JlcF0sCi0gICBbaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmldKQotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0gQUNfU1VCU1QoW0VHUkVQXSkKLV0pXSkKLQotCi0jIEFDX1BBVEhfVE9PTF9QUkVGSVgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKLVtjYXNlICRNQUdJQ19DTUQgaW4KLVtbXFwvKl0gfCAgPzpbXFwvXSpdKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1kbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KLWRubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKLWRubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCi0gIGFjX2R1bW15PSJpZmVsc2UoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLQkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotRU9GCi0JICBmaSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgotICA7OwotZXNhY10pCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLWlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1dKSMgQUNfUEFUSF9UT09MX1BSRUZJWAotCi0KLSMgQUNfUEFUSF9NQUdJQwotIyAtLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5Ci1BQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10sCi1bQUNfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi1pZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICBBQ19QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLV0pIyBBQ19QQVRIX01BR0lDCi0KLQotIyBBQ19QUk9HX0xECi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgotQUNfREVGVU4oW0FDX1BST0dfTERdLAotW0FDX0FSR19XSVRIKFtnbnUtbGRdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCi0JW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCi0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCi0gICAgW3dpdGhfZ251X2xkPW5vXSkKLUFDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQotICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQotZWxzZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKLWZpCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKLVtpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJExEKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLXRlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCi1BQ19QUk9HX0xEX0dOVQotXSkjIEFDX1BST0dfTEQKLQotCi0jIEFDX1BST0dfTERfR05VCi0jIC0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIEFDX1BST0dfTERfR05VCi0KLQotIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAotICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCi1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi1dKSMgQUNfUFJPR19MRF9SRUxPQURfRkxBRwotCi0KLSMgQUNfREVQTElCU19DSEVDS19NRVRIT0QKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcwotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwKLVtBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAotW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFtbNC05XV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCi0gIDs7Ci0KLWN5Z3dpbiopCi0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICA7OwotCi1taW5ndyogfCBwdzMyKikKLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKLSAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICBmaQotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBpKjg2ICkKLSAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCi0gICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgotICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIGZpCi0gIDs7Ci0KLWdudSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbwotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1pbnRlcml4W1szLTldXSopCi0gICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkTEQgaW4KLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OwotICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKLSAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OwotICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gIGVzYWMKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotbmV0YnNkKikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW5ld29zNiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KLSAgOzsKLQotbnRvLXFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAgOzsKLQotb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotcmRvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICBtb3Rvcm9sYSkKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCi0gICAgOzsKLSAgbmNyKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgc2VxdWVudCkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCi0gICAgOzsKLSAgc25pKQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCi0gICAgOzsKLSAgc2llbWVucykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHBjKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLWVzYWMKLV0pCi1maWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAotdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1dKSMgQUNfREVQTElCU19DSEVDS19NRVRIT0QKLQotCi0jIEFDX1BST0dfTk0KLSMgLS0tLS0tLS0tLQotIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCi1BQ19ERUZVTihbQUNfUFJPR19OTV0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtY29tcGF0aWJsZSBubV0sIGx0X2N2X3BhdGhfTk0sCi1baWYgdGVzdCAtbiAiJE5NIjsgdGhlbgotICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLSAgbHRfY3ZfcGF0aF9OTT0iJE5NIgotZWxzZQotICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCi0gIGZpCi0gIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgotCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgotCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6Ci0JIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAotCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQotCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhawotCSAgOzsKLQkqKQotCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JICAqL2Rldi9udWxsKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgICopCi0JICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0Ci0JICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICBkb25lCi0gIHRlc3QgLXogIiRsdF9jdl9wYXRoX05NIiAmJiBsdF9jdl9wYXRoX05NPW5tCi1maV0pCi1OTT0iJGx0X2N2X3BhdGhfTk0iCi1dKSMgQUNfUFJPR19OTQotCi0KLSMgQUNfQ0hFQ0tfTElCTQotIyAtLS0tLS0tLS0tLS0tCi0jIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1MSUJNPQotY2FzZSAkaG9zdCBpbgotKi0qLWJlb3MqIHwgKi0qLWN5Z3dpbiogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKLSAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0Ci0gIDs7Ci0qLW5jci1zeXN2NC4zKikKLSAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCi0gIDs7Ci0qKQotICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQotICA7OwotZXNhYwotXSkjIEFDX0NIRUNLX0xJQk0KLQotCi0jIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UoW0RJUkVDVE9SWV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgY29udmVuaWVuY2UgbGlicmFyeSBhbmQKLSMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcwotIyAtLWVuYWJsZS1sdGRsLWNvbnZlbmllbmNlIHRvIHRoZSBjb25maWd1cmUgYXJndW1lbnRzLiAgTm90ZSB0aGF0Ci0jIEFDX0NPTkZJR19TVUJESVJTIGlzIG5vdCBjYWxsZWQgaGVyZS4gIElmIERJUkVDVE9SWSBpcyBub3QgcHJvdmlkZWQsCi0jIGl0IGlzIGFzc3VtZWQgdG8gYmUgYGxpYmx0ZGwnLiAgTElCTFRETCB3aWxsIGJlIHByZWZpeGVkIHdpdGgKLSMgJyR7dG9wX2J1aWxkZGlyfS8nIGFuZCBMVERMSU5DTCB3aWxsIGJlIHByZWZpeGVkIHdpdGggJyR7dG9wX3NyY2Rpcn0vJwotIyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdCBmbGF0IGFuZCB5b3UncmUgbm90Ci0jIHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyIGFwcHJvcHJpYXRlbHkgaW4KLSMgdGhlIE1ha2VmaWxlcy4KLUFDX0RFRlVOKFtBQ19MSUJMVERMX0NPTlZFTklFTkNFXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi0gIGNhc2UgJGVuYWJsZV9sdGRsX2NvbnZlbmllbmNlIGluCi0gIG5vKSBBQ19NU0dfRVJST1IoW3RoaXMgcGFja2FnZSBuZWVkcyBhIGNvbnZlbmllbmNlIGxpYmx0ZGxdKSA7OwotICAiIikgZW5hYmxlX2x0ZGxfY29udmVuaWVuY2U9eWVzCi0gICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UiIDs7Ci0gIGVzYWMKLSAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsYy5sYQotICBMVERMSU5DTD0nLUkke3RvcF9zcmNkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKQotICAjIEZvciBiYWNrd2FyZHMgbm9uLWdldHRleHQgY29uc2lzdGVudCBjb21wYXRpYmlsaXR5Li4uCi0gIElOQ0xUREw9IiRMVERMSU5DTCIKLV0pIyBBQ19MSUJMVERMX0NPTlZFTklFTkNFCi0KLQotIyBBQ19MSUJMVERMX0lOU1RBTExBQkxFKFtESVJFQ1RPUlldKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBzZXRzIExJQkxUREwgdG8gdGhlIGxpbmsgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGluc3RhbGxhYmxlIGxpYnJhcnkgYW5kCi0jIExURExJTkNMIHRvIHRoZSBpbmNsdWRlIGZsYWdzIGZvciB0aGUgbGlibHRkbCBoZWFkZXIgYW5kIGFkZHMKLSMgLS1lbmFibGUtbHRkbC1pbnN0YWxsIHRvIHRoZSBjb25maWd1cmUgYXJndW1lbnRzLiAgTm90ZSB0aGF0Ci0jIEFDX0NPTkZJR19TVUJESVJTIGlzIG5vdCBjYWxsZWQgaGVyZS4gIElmIERJUkVDVE9SWSBpcyBub3QgcHJvdmlkZWQsCi0jIGFuZCBhbiBpbnN0YWxsZWQgbGlibHRkbCBpcyBub3QgZm91bmQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgYGxpYmx0ZGwnLgotIyBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3BfYnVpbGRkaXJ9LycjIGFuZCBMVERMSU5DTCB3aXRoCi0jICcke3RvcF9zcmNkaXJ9LycgKG5vdGUgdGhlIHNpbmdsZSBxdW90ZXMhKS4gIElmIHlvdXIgcGFja2FnZSBpcyBub3QKLSMgZmxhdCBhbmQgeW91J3JlIG5vdCB1c2luZyBhdXRvbWFrZSwgZGVmaW5lIHRvcF9idWlsZGRpciBhbmQgdG9wX3NyY2RpcgotIyBhcHByb3ByaWF0ZWx5IGluIHRoZSBNYWtlZmlsZXMuCi0jIEluIHRoZSBmdXR1cmUsIHRoaXMgbWFjcm8gbWF5IGhhdmUgdG8gYmUgY2FsbGVkIGFmdGVyIEFDX1BST0dfTElCVE9PTC4KLUFDX0RFRlVOKFtBQ19MSUJMVERMX0lOU1RBTExBQkxFXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi0gIEFDX0NIRUNLX0xJQihsdGRsLCBsdF9kbGluaXQsCi0gIFt0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiICE9IHh5ZXMgJiYgZW5hYmxlX2x0ZGxfaW5zdGFsbD1ub10sCi0gIFtpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geG5vOyB0aGVuCi0gICAgIEFDX01TR19XQVJOKFtsaWJsdGRsIG5vdCBpbnN0YWxsZWQsIGJ1dCBpbnN0YWxsYXRpb24gZGlzYWJsZWRdKQotICAgZWxzZQotICAgICBlbmFibGVfbHRkbF9pbnN0YWxsPXllcwotICAgZmkKLSAgXSkKLSAgaWYgdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiA9IHgieWVzIjsgdGhlbgotICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsIgotICAgIExJQkxUREw9JyR7dG9wX2J1aWxkZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkvbGlibHRkbC5sYQotICAgIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCi0gIGVsc2UKLSAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbD1ubyIKLSAgICBMSUJMVERMPSItbGx0ZGwiCi0gICAgTFRETElOQ0w9Ci0gIGZpCi0gICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KLSAgSU5DTFRETD0iJExURExJTkNMIgotXSkjIEFDX0xJQkxURExfSU5TVEFMTEFCTEUKLQotCi0jIEFDX0xJQlRPT0xfQ1hYCi0jIC0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBzdXBwb3J0IGZvciBDKysgbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0NYWF0pCi1dKSMgQUNfTElCVE9PTF9DWFgKLQotCi0jIF9MVF9BQ19MQU5HX0NYWAotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKLUFDX1JFUVVJUkUoW19MVF9BQ19QUk9HX0NYWENQUF0pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Q1hYXSkKLV0pIyBfTFRfQUNfTEFOR19DWFgKLQotIyBfTFRfQUNfUFJPR19DWFhDUFAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwKLVsKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0gICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0gIEFDX1BST0dfQ1hYQ1BQCi1maQotXSkjIF9MVF9BQ19QUk9HX0NYWENQUAotCi0jIEFDX0xJQlRPT0xfRjc3Ci0jIC0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBzdXBwb3J0IGZvciBGb3J0cmFuIDc3IGxpYnJhcmllcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTEFOR19GNzddKQotXSkjIEFDX0xJQlRPT0xfRjc3Ci0KLQotIyBfTFRfQUNfTEFOR19GNzcKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Rjc3XSkKLV0pIyBfTFRfQUNfTEFOR19GNzcKLQotCi0jIEFDX0xJQlRPT0xfR0NKCi0jIC0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBzdXBwb3J0IGZvciBHQ0ogbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0dDSl0pCi1dKSMgQUNfTElCVE9PTF9HQ0oKLQotCi0jIF9MVF9BQ19MQU5HX0dDSgotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sW10sCi0gIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sW10sCi0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9BQ19QUk9HX0dDSl0sW10sCi0gICAgICBbaWZkZWYoW0FDX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQUNfUFJPR19HQ0pdKV0sCi0JIFtpZmRlZihbQV1bTV9QUk9HX0dDSl0sW0FDX1JFUVVJUkUoW0FdW01fUFJPR19HQ0pdKV0sCi0JICAgW0FDX1JFUVVJUkUoW0FdW0NfUFJPR19HQ0pfT1JfQV1bTV9QUk9HX0dDSl0pXSldKV0pXSldKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUdDSl0pCi1dKSMgX0xUX0FDX0xBTkdfR0NKCi0KLQotIyBBQ19MSUJUT09MX1JDCi0jIC0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIFdpbmRvd3MgcmVzb3VyY2UgZmlsZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1JDXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1SQ10pCi1dKSMgQUNfTElCVE9PTF9SQwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sIFtfTFRfQUNfTEFOR19DX0NPTkZJR10pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddLAotW2x0X3NhdmVfQ0M9IiRDQyIKLUFDX0xBTkdfUFVTSChDKQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9YwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCi0KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi1BQ19MSUJUT09MX1NZU19MSUJfU1RSSVAKLUFDX0xJQlRPT0xfRExPUEVOX1NFTEYKLQotIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0Ci1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi1BQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci0KLWFpeFtbNC05XV0qKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKLSAgICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19QT1AKLUNDPSIkbHRfc2F2ZV9DQyIKLV0pIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLCBbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJRyhDWFgpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwKLVtBQ19MQU5HX1BVU0goQysrKQotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLQotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotICBBQ19QUk9HX0xECi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBhaXhbWzQtOV1dKikKLSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0gICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotICAgICAgbm9fZW50cnlfZmxhZz0iIgotICAgIGVsc2UKLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLSAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCi0JZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBjYXNlICRsZF9mbGFnIGluCi0JICAqLWJydGwqKQotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgIGZpCi0KLSAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0gICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLSAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCXRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCWVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0Jc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgbm90IHVzaW5nIGdjYwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0Jc2hhcmVkX2ZsYWc9Jy1HJwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JZWxzZQotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQlmaQotICAgICAgZmkKLSAgICBmaQotCi0gICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLSAgICAgIGVsc2UKLQkjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQlfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgIGZpCi0gICAgZmkKLSAgICA7OwotCi0gIGJlb3MqKQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0gICAgICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gICAgOzsKLQotICBjaG9ydXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLSAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQljcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICBlbHNlCi0JZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGZpfgotICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICBmaQotICA7OwotICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgZGd1eCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGVjKysqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgZ2hjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGZyZWVic2RbWzEyXV0qKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUgc3dpdGNoIHRvIEVMRgotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBmcmVlYnNkLWVsZiopCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgOzsKLSAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCi0gICAgIyBjb252ZW50aW9ucwotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgOzsKLSAgZ251KikKLSAgICA7OwotICBocHV4OSopCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCSMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIENDKikKLSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLSAgICBhQ0MqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgIwotICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLSAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLSAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIltbLV1dTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGhwdXgxMCp8aHB1eDExKikKLSAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikgOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBhQ0MqKQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBpYTY0KikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBmaQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaW50ZXJpeFtbMy05XV0qKQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIDs7Ci0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU0dJIEMrKwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJwotCSAgZmkKLQlmaQotCV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCTs7Ci0gICAgZXNhYwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCBncmVwICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBpY3BjKikKLQkjIEludGVsIEMrKwotCXdpdGhfZ251X2xkPXllcwotCSMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCi0JIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiVmVyc2lvbiA3LiIqKQotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQkqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgotCSAgdG1wX2lkeW49Ci0JICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7Ci0JICBlc2FjCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQk7OwotICAgICAgcGdDQyogfCBwZ2NwcCopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi0gIAlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgOzsKLSAgICAgIGN4eCopCi0JIyBDb21wYXEgQysrCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDKysgNS45Ci0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQotCSAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgotCSAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQotCSAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbHlueG9zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgbTg4ayopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG12cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGN4eCopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBuZXRic2QqKQotICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgZmkKLSAgICAjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCi0gICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCi0gICAgOzsKLSAgb3BlbmJzZDIqKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZmkKLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICBmaQotICAgIDs7Ci0gIG9zZjMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG9zZjQqIHwgb3NmNSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBjeHgqKQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAkcm0gJGxpYi5leHAnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHBzb3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBzdW5vczQqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQueAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgbGNjKikKLQkjIEx1Y2lkCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQljYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCSAgKikKLQkgICAgIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkgICAgIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KLQkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQkgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgZ2N4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCi0JICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBlbHNlCi0JICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKLQkgICAgIyBwbGF0Zm9ybS4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGZpCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCi0JICBjYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCSAgKikKLQkgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICMgYXMgLXogZGVmcy4KLSAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0gICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKLSAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0gICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQotICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgotICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KLSAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCi0gICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KLSAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB0YW5kZW0qKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBOQ0MqKQotCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdnh3b3JrcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gICopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLV9MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCi1fTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKLQotQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUCgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9JGx0X3NhdmVfQ0MKLUxEQ1hYPSRMRAotTEQ9JGx0X3NhdmVfTEQKLUdDQz0kbHRfc2F2ZV9HQ0MKLXdpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAotd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLWx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAotbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi1sdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotXSkjIEFDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHCi0KLSMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUChbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQotIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0jIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCi1kbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAotZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAotZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKLWRubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgotaWZlbHNlKFskMV0sW10sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWludCBhOwotdm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KLUVPRgotXSxbJDFdLFtDWFhdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1jbGFzcyBGb28KLXsKLXB1YmxpYzoKLSAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1wcml2YXRlOgotICBpbnQgYTsKLX07Ci1FT0YKLV0sWyQxXSxbRjc3XSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGltcGxpY2l0IG5vbmUKLSAgICAgIGludGVnZXIqNCBhCi0gICAgICBhPTAKLSAgICAgIHJldHVybgotICAgICAgZW5kCi1FT0YKLV0sWyQxXSxbR0NKXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotcHVibGljIGNsYXNzIGZvbyB7Ci0gIHByaXZhdGUgaW50IGE7Ci0gIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgewotICAgIGEgPSAwOwotICB9Ci19OwotRU9GCi1dKQotZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0gICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotCi0gICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKLSAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCi0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLQotICAjIFRoZSBgKicgaW4gdGhlIGNhc2UgbWF0Y2hlcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZSBgY2FzZScgaW4KLSAgIyAkb3V0cHV0X3ZlcmJvc2VfY21kIGNhbiB0cmlnZ2VyIGdsb2IgZXhwYW5zaW9uIGR1cmluZyB0aGUgbG9vcAotICAjIGV2YWwgd2l0aG91dCB0aGlzIHN1YnN0aXR1dGlvbi4KLSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9YCRlY2hvICJYJG91dHB1dF92ZXJib3NlX2xpbmtfY21kIiB8ICRYc2VkIC1lICIkbm9fZ2xvYl9zdWJzdCJgCi0KLSAgZm9yIHAgaW4gYGV2YWwgJG91dHB1dF92ZXJib3NlX2xpbmtfY21kYDsgZG8KLSAgICBjYXNlICRwIGluCi0KLSAgICAtTCogfCAtUiogfCAtbCopCi0gICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KLSAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCi0gICAgICAgaWYgdGVzdCAkcCA9ICItTCIgXAotCSAgfHwgdGVzdCAkcCA9ICItUiI7IHRoZW4KLQkgcHJldj0kcAotCSBjb250aW51ZQotICAgICAgIGVsc2UKLQkgcHJldj0KLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgY2FzZSAkcCBpbgotCSAtTCogfCAtUiopCi0JICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCi0JICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCi0JICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCi0JICAgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCi0JICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKLQkgICBlbHNlCi0JICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgotCSAgIGZpCi0JICAgOzsKLQkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKLQkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCi0JIGVzYWMKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICouJG9iamV4dCkKLSAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KLSAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KLQkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgotCSBmaQotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCi1maQotCi0kcm0gLWYgY29uZmVzdC4kb2JqZXh0Ci0KLV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9Ci1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KLSAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAotZmkKLQotIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KLWlmZWxzZShbJDFdLFtDWFhdLAotW2Nhc2UgJGhvc3Rfb3MgaW4KLWludGVyaXhbWzMtOV1dKikKLSAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgotICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgotICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KLSAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQotICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCQxKT0KLSAgOzsKLQotbGludXgqKQotICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLSAgKlN1blwgQyopCi0gICAgIyBTdW4gQysrIDUuOQotICAgICMKLSAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKLSAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCi0gICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgotICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCi0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zb2xhcmlzKikKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgQ0MqKQotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgotICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKLSAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotZXNhYwotXSkKLWNhc2UgIiAkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KLSoiIC1sYyAiKikgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Ci1lc2FjCi1dKSMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUAotCi0jIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLCBbX0xUX0FDX0xBTkdfRjc3X0NPTkZJRyhGNzcpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pCi1BQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKLQotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtGNzctImY3NyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi10ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0jIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICBmaQotICA7OwotYWl4W1s0LTldXSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi1fTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgotX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwgW19MVF9BQ19MQU5HX0dDSl9DT05GSUcoR0NKKV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1qYXZhCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7R0NKLSJnY2oifQotY29tcGlsZXI9JENDCi1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSIkbHRfc2F2ZV9DQyIKLV0pIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sIFtfTFRfQUNfTEFOR19SQ19DT05GSUcoUkMpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAotW0FDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtSQy0id2luZHJlcyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19SQ19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfQ09ORklHKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZiBUQUdOQU1FIGlzIG5vdCBwYXNzZWQsIHRoZW4gY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQKLSMgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZQotIyBhZGQgY29kZSB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkKLSMgVEFHTkFNRSBmcm9tIHRoZSBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddLAotWyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoQ0MsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihMRCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RpbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0dW5pbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKTsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcWyRdMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJbJF0vWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1pZmVsc2UoWyQxXSwgW10sCi0gIFtjZmdmaWxlPSIke29maWxlfVQiCi0gIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICRybSAtZiAiJGNmZ2ZpbGUiCi0gIEFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pXSwKLSAgW2NmZ2ZpbGU9IiRvZmlsZSJdKQotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotaWZlbHNlKFskMV0sIFtdLAotWyMhICRTSEVMTAotCi0jIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6Ci0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECi0KLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9Ci0KLSMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXSkKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKQotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9bXV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKQotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kX0xUX0FDX1RBR1ZBUihHQ0MsICQxKQotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9bXV9MVF9BQ19UQUdWQVIoTEQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKQotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKQotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSkKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKQotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKQotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpCi0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKQotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKQotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSkKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKQotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSkKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKQotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKQotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpCi0KLWlmZWxzZShbJDFdLFtdLAotWyMgIyMjIEVORCBMSUJUT09MIENPTkZJR10sCi1bIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQotCi1fX0VPRl9fCi0KLWlmZWxzZShbJDFdLFtdLCBbCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCi0KLSMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0jIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKLSAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICBjaG1vZCAreCAiJG9maWxlIgotXSkKLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotXSkjIEFDX0xJQlRPT0xfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCi0KLV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KLQotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJwotCi0gIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCi0gICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKLSAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKLWZpCi1dKSMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkKLQotCi0jIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKLUFDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSkKLUFDX1JFUVVJUkUoW0FDX1BST0dfTk1dKQotQUNfUkVRVUlSRShbQUNfT0JKRVhUXSkKLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi1BQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKLVsKLSMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgotIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KLQotIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgotc3ltY29kZT0nW1tCQ0RFR1JTVF1dJwotCi0jIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KLXN5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJwotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMTsvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUgXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotCi0jIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4KikKLSAgc3ltY29kZT0nW1tCQ0RUXV0nCi0gIDs7Ci1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCi0gIDs7Ci1ocHV4KikgIyBJdHMgbGlua2VyIGRpc3Rpbmd1aXNoZXMgZGF0YSBmcm9tIGNvZGUgc3ltYm9scwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCi0gIGZpCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIDs7Ci1saW51eCogfCBrKmJzZCotZ251KQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJwotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgZmkKLSAgOzsKLWlyaXgqIHwgbm9uc3RvcHV4KikKLSAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKLSAgOzsKLXNvbGFyaXMqKQotICBzeW1jb2RlPSdbW0JEUlRdXScKLSAgOzsKLXNjbzMuMnY1KikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tbRFRdXScKLSAgOzsKLXN5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gIHN5bWNvZGU9J1tbQUJEVF1dJwotICA7Owotc3lzdjQpCi0gIHN5bWNvZGU9J1tbREZOU1RVXV0nCi0gIDs7Ci1lc2FjCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Ci1lc2FjCi0KLSMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJjb3JlLCB0aGVuIHdpdGggaXQuCi1mb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0KLSAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KLSAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKLQotICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWyAJXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWyAJXV1bWyAJXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0KLSAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gIHBpcGVfd29ya3M9bm8KLQotICBybSAtZiBjb25mdGVzdCoKLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKCl7fQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLWludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9Ci1FT0YKLQotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgotICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCi0gICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KLSAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0gICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgotICAgICAgZWxzZQotCXJtIC1mICIkbmxpc3QiVAotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgICAgaWYgZ3JlcCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmIGdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JICBjYXQgPDxFT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLUVPRgotCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgotCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwotCi0JICBjYXQgPDxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotIyBkZWZpbmUgbHRfcHRyX3Qgdm9pZCAqCi0jZWxzZQotIyBkZWZpbmUgbHRfcHRyX3QgY2hhciAqCi0jIGRlZmluZSBjb25zdAotI2VuZGlmCi0KLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLwotY29uc3Qgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgbHRfcHRyX3QgYWRkcmVzczsKLX0KLWx0X3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Ci17Ci1FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKGx0X3B0cl90KSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKLQkgIGNhdCA8PFxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotICB7MCwgKGx0X3B0cl90KSAwfQotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLUVPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKLQkgIENGTEFHUz0iJENGTEFHUyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCi0JICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCi0JICAgIHBpcGVfd29ya3M9eWVzCi0JICBmaQotCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgotCWVsc2UKLQkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKLQlmaQotICAgICAgZWxzZQotCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgZmkKLSAgZWxzZQotICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBmaQotICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLV0pCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9Ci1maQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoZmFpbGVkKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG9rKQotZmkKLV0pICMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0KLQotIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sCi1bX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0KLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQotIGlmZWxzZShbJDFdLFtDWFhdLFsKLSAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXhbWzQtOV1dKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgIGRhcndpbiopCi0gICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgICB4bGMqKQotICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xbm9jb21tb24nCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAgICA7OwotICAgICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgICBkZ3V4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZWMrKyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIDs7Ci0JICBnaGN4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLQkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCi0JOzsKLSAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJwotCSAgICBmaQotCSAgICA7OwotCSAgYUNDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqfGlhNjQqKQotCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGludGVyaXgqKQotCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQotCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251KQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCSAgICA7OwotCSAgaWNwYyogfCBlY3BjKikKLQkgICAgIyBJbnRlbCBDKysKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQkgICAgOzsKLQkgIHBnQ0MqIHwgcGdjcHAqKQotCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlci4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIENvbXBhcSBDKysKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbHlueG9zKikKLQk7OwotICAgICAgbTg4ayopCi0JOzsKLSAgICAgIG12cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGN4eCopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbmV0YnNkKikKLQk7OwotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIDs7Ci0JICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBwc29zKikKLQk7OwotICAgICAgc29sYXJpcyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotCSAgICA7OwotCSAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN1bm9zNCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBsY2MqKQotCSAgICAjIEx1Y2lkCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB0YW5kZW0qKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdnh3b3JrcyopCi0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICBmaQotXSwKLVsKLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xbm9jb21tb24nCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKLQlbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotXSkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgotICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAotICAgIF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKSwKLSAgICBbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAotICAgIFtjYXNlICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OwotICAgICBlc2FjXSwKLSAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLSAgICA7OwotICAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKLUFDX0xJQlRPT0xfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAotICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCi0gICRsdF90bXBfc3RhdGljX2ZsYWcsCi0gIFtdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCi1dKQotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLWlmZWxzZShbJDFdLFtDWFhdLFsKLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXhbWzQtOV1dKikKLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLSAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0gICAgaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKLSAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KikKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICA7OwotICAqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gIGVzYWMKLSAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi1dLFsKLSAgcnVucGF0aF92YXI9Ci0gIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKLSAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKLSAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgotICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KLWRubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgotICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgIGZpCi0gICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGVzYWMKLQotICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCi0gICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeFtbMy05XV0qKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKLSoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgotKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICi0qKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQl0bXBfYWRkZmxhZz0KLQljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLQlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwotCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwotCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCi0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSopCi0JICB0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcgOzsKLQllc2FjCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JZmkKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKLSoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAotKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0JOzsKLQkqKQotCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICBlbHNlCi0JICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgIGZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgotICAgICAgcnVucGF0aF92YXI9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCi0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0JIyBicm9rZW4gY29sbGVjdDIuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhaXhbWzQtOV1dKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6Ci0JICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0gIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0gIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0Jc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLQlmaQotICAgICAgZWxzZQotCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQkgIHNoYXJlZF9mbGFnPSctRycKLQllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICBmaQotCWZpCi0gICAgICBmaQotCi0gICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLSAgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCSBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpW1s0NV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuW1swMTJdXSkKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKLQkgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQlwaWNfZmxhZz0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gICAgICAgIGlmIEFDX1RSWV9FVkFMKF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKLSAgICAgICAgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICAgIGVsc2UKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUwotCi0KLSMgX0xUX0FDX0ZJTEVfTFRETExfQwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJlIGNhcmVmdWwgdGhhdCB0aGUgc3RhcnQgbWFya2VyIGFsd2F5cyBmb2xsb3dzIGEgbmV3bGluZS4KLUFDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSwgWwotIyAvKiBsdGRsbC5jIHN0YXJ0cyBoZXJlICovCi0jICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotIyAjaW5jbHVkZSA8d2luZG93cy5oPgotIyAjdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotIyAjaW5jbHVkZSA8c3RkaW8uaD4KLSMKLSMgI2lmbmRlZiBfX0NZR1dJTl9fCi0jICMgIGlmZGVmIF9fQ1lHV0lOMzJfXwotIyAjICAgIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXwotIyAjICBlbmRpZgotIyAjZW5kaWYKLSMKLSMgI2lmZGVmIF9fY3BsdXNwbHVzCi0jIGV4dGVybiAiQyIgewotIyAjZW5kaWYKLSMgQk9PTCBBUElFTlRSWSBEbGxNYWluIChISU5TVEFOQ0UgaEluc3QsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKTsKLSMgI2lmZGVmIF9fY3BsdXNwbHVzCi0jIH0KLSMgI2VuZGlmCi0jCi0jICNpZmRlZiBfX0NZR1dJTl9fCi0jICNpbmNsdWRlIDxjeWd3aW4vY3lnd2luX2RsbC5oPgotIyBERUNMQVJFX0NZR1dJTl9ETEwoIERsbE1haW4gKTsKLSMgI2VuZGlmCi0jIEhJTlNUQU5DRSBfX2hEbGxJbnN0YW5jZV9iYXNlOwotIwotIyBCT09MIEFQSUVOVFJZCi0jIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi0jIHsKLSMgICBfX2hEbGxJbnN0YW5jZV9iYXNlID0gaEluc3Q7Ci0jICAgcmV0dXJuIFRSVUU7Ci0jIH0KLSMgLyogbHRkbGwuYyBlbmRzIGhlcmUgKi8KLV0pIyBfTFRfQUNfRklMRV9MVERMTF9DCi0KLQotIyBfTFRfQUNfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0sIFtpZmVsc2UoWyQyXSwgW10sIFskMV0sIFskMV8kMl0pXSkKLQotCi0jIG9sZCBuYW1lcwotQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sICAgW0FDX1BST0dfTElCVE9PTF0pCi1BQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sICBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQotQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCAgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKLUFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQotQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCi1BQ19ERUZVTihbQU1fUFJPR19MRF0sICAgICAgICBbQUNfUFJPR19MRF0pCi1BQ19ERUZVTihbQU1fUFJPR19OTV0sICAgICAgICBbQUNfUFJPR19OTV0pCi0KLSMgVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYWNsb2NhbCBhYm91dCB0aGUgbWFjcm8gbm90IGJlaW5nIHVzZWQKLWlmZWxzZShbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKQotCi1BQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLAotW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osIG5vKQotICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKLSAgQUNfU1VCU1QoR0NKRkxBR1MpCi1dKQotCi1BQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sCi1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywgbm8pCi1dKQotCi0KLSMgQ2hlYXAgYmFja3BvcnQgb2YgQVNfRVhFQ1VUQUJMRV9QIGFuZCByZXF1aXJlZCBtYWNyb3MKLSMgZnJvbSBBdXRvY29uZiAyLjU5OyB3ZSBzaG91bGQgbm90IHVzZSAkYXNfZXhlY3V0YWJsZV9wIGRpcmVjdGx5LgotCi0jIF9BU19URVNUX1BSRVBBUkUKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfaWZuZGVmKFtfQVNfVEVTVF9QUkVQQVJFXSwKLVttNF9kZWZ1bihbX0FTX1RFU1RfUFJFUEFSRV0sCi1baWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leGVjdXRhYmxlX3A9J3Rlc3QgLXgnCi1lbHNlCi0gIGFzX2V4ZWN1dGFibGVfcD0ndGVzdCAtZicKLWZpCi1dKV0pIyBfQVNfVEVTVF9QUkVQQVJFCi0KLSMgQVNfRVhFQ1VUQUJMRV9QCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB3aGV0aGVyIGEgZmlsZSBpcyBleGVjdXRhYmxlLgotbTRfaWZuZGVmKFtBU19FWEVDVVRBQkxFX1BdLAotW200X2RlZnVuKFtBU19FWEVDVVRBQkxFX1BdLAotW0FTX1JFUVVJUkUoW19BU19URVNUX1BSRVBBUkVdKWRubAotJGFzX2V4ZWN1dGFibGVfcCAkMVtdZG5sCi1dKV0pIyBBU19FWEVDVVRBQkxFX1AKLQotIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCi0jICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKLSMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIwotIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIExUX0FDX1BST0dfU0VECi0jIC0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCi0jIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCi1BQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKLVsjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiBBU19FWEVDVVRBQkxFX1AoWyIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0Il0pOyB0aGVuCi0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGZpCi0gICAgZG9uZQotICBkb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi1sdF9hY19tYXg9MAotbHRfYWNfY291bnQ9MAotIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKLSMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCi1mb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAotICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKLSAgZG9uZQotZG9uZQotXSkKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKLUFDX1NVQlNUKFtTRURdKQotQUNfTVNHX1JFU1VMVChbJFNFRF0pCi1dKQotCi1tNF9pbmNsdWRlKFthY2luY2x1ZGUubTRdKQorbTRfaW5jbHVkZShbbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00XSkKK200X2luY2x1ZGUoW200L2FjX21zZ19jYWNoZS5tNF0pCittNF9pbmNsdWRlKFttNC9hY19tc2dfbW9kdWxlX2RiZy5tNF0pCittNF9pbmNsdWRlKFttNC9hY19wcm9tcHRfdXNlci5tNF0pCittNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKK200X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCittNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCittNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCittNF9pbmNsdWRlKFttNC9uZXRzbm1wX2FyZy5tNF0pCittNF9pbmNsdWRlKFttNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00XSkKZGlmZiAtLWdpdCBhL2FnZW50L01ha2VmaWxlLmRlcGVuZCBiL2FnZW50L01ha2VmaWxlLmRlcGVuZAppbmRleCBlZDYxMjVjLi40YzAyOGFiIDEwMDY0NAotLS0gYS9hZ2VudC9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYWdlbnQvTWFrZWZpbGUuZGVwZW5kCkBAIC01LDU4ICs1LDY0IEBACiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjUsNiArNzEsNyBAQAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMiw2MiArMTA5LDY1IEBACiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjYsNiArMTc2LDcgQEAKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjAzLDY3ICsyMTQsNjkgQEAKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9pbmRleC5oIHNubXBkLmgKIC4vYWdlbnRfaW5kZXgubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI3Miw2ICsyODUsNyBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMDgsMjggKzMyMiw2NCBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IHNubXBkLmggLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc3RydWN0Lmggc25tcGQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NtdXgvc211eC5oIG1pYmdyb3VwL3NubXB2My91c21Db25mLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NtdXgvc211eC5oIG1pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaCBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbmNsdWRlcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9leGFtcGxlcy9leGFtcGxlLmggbWliZ3JvdXAvdGVzdGhhbmRsZXIuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaCBtaWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaCBtaWJncm91cC9ob3N0L2hyX290aGVyLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJvYy5oIG1pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3ByaW50LmggbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5oIG1pYmdyb3VwL2hvc3QvaHJfc3dydW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9yb3dzLmggbWliZ3JvdXAvUm1vbi9hZ3V0aWwuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmggbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL1Jtb24vaGlzdG9yeS5oIG1pYmdyb3VwL1Jtb24vZXZlbnQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9leGFtcGxlcy93YXRjaGVkLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9yb3dzLmggbWliZ3JvdXAvUm1vbi9hZ3V0aWwuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmggbWliZ3JvdXAvUm1vbi9hbGFybS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL2hpc3RvcnkuaCBtaWJncm91cC9SbW9uL2V2ZW50LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfb3RoZXIuaCBtaWJncm91cC9ob3N0L2hyX3Byb2MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmggbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX2Rpc2suaCBtaWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oIG1pYmdyb3VwL21pYklJL2F0LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL2lwLmggbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmggbWliZ3JvdXAvbWliSUkvYXQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdGNwLmggbWliZ3JvdXAvbWliSUkvaWNtcC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS91ZHAuaCBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaCBtaWJncm91cC9taWJJSS9pcHY2LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb2MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmdyb3VwL2FnZW50L2V4dGVuZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaCBtaWJncm91cC91Y2Qtc25tcC9wcm94eS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaCBtaWJncm91cC91Y2Qtc25tcC92bXN0YXQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oIG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaApAQCAtMzQ3LDQ1ICszOTcsMTggQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmggbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmggbWliZ3JvdXAvbWliSUkvYXQuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvaXAuaCBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaCBtaWJncm91cC9taWJJSS9hdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zbm1wX21pYi5oIG1pYmdyb3VwL21pYklJL3RjcC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9pY21wLmggbWliZ3JvdXAvbWliSUkvdWRwLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oIG1pYmdyb3VwL21pYklJL2lwdjYuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oIC4uL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oIG1pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmggbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oIG1pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5oIG1pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zRGVidWcuaCBtaWJncm91cC9hZ2VudC9uc0NhY2hlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmgKQEAgLTM5NSw2ICs0MTgsMTAgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oCkBAIC00MTMsNiArNDQwLDE5IEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX29pZHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2VudW1zLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnN0YW50cy5oCkBAIC00MjYsNiArNDY2LDIwIEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaApAQCAtNDU4LDYyICs1MTIsNjMgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9kb3RfY29uZi5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2RvdF9jb25mLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTUyMiw2ICs1NzcsNyBAQAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01NTksMzQgKzYxNSwxNjEgQEAKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaCBzbm1wZC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiBtaWJncm91cC9zdHJ1Y3QuaCAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTU5NCwyOSArNzc3LDEzIEBACiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02MjUsODEgKzc5MiwxMDkgQEAKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oCiAuL2F1dG9fbmxpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2F1dG9fbmxpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKIC4va2VybmVsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9rZXJuZWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9rZXJuZWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9rZXJuZWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03MDgsNiArOTAzLDcgQEAKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCkBAIC03NDMsMjMgKzkzOSw1NCBAQAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbTJtLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggbTJtLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbmNsdWRlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9leGFtcGxlLmggbWliZ3JvdXAvdGVzdGhhbmRsZXIuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaCBtaWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9yb3dzLmggbWliZ3JvdXAvUm1vbi9hZ3V0aWwuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmggbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vaGlzdG9yeS5oIG1pYmdyb3VwL1Jtb24vZXZlbnQuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oIG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmggbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oIG1pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmggbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3Byb2MuaCBtaWJncm91cC9ob3N0L2hyX25ldHdvcmsuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oIG1pYmdyb3VwL2hvc3QvaHJfZGlzay5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oIG1pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3N3cnVuLmggbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oIG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oIG1pYmdyb3VwL1Jtb24vcm93cy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL2FndXRpbC5oIG1pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL2FsYXJtLmggbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vZXZlbnQuaCBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCBtaWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oIG1pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmggbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9hdC5oIG1pYmdyb3VwL21pYklJL2lwLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvdGNwLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2ljbXAuaCBtaWJncm91cC9taWJJSS91ZHAuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmggbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvaXB2Ni5oIG1pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb2MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmggbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kbG1vZC5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmggbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oIG1pYmdyb3VwL2FnZW50L25zRGVidWcuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oIG1pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCkBAIC03NzYsNDEgKzEwMDMsMTggQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmggbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmggbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9hdC5oIG1pYmdyb3VwL21pYklJL2lwLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdGNwLmggbWliZ3JvdXAvbWliSUkvaWNtcC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS91ZHAuaCBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaCBtaWJncm91cC9taWJJSS9pcHY2LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Byb2MuaCAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaCBtaWJncm91cC91Y2Qtc25tcC9kaXNrLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJncm91cC9hZ2VudC9leHRlbmQuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJncm91cC91Y2Qtc25tcC9maWxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmggbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmggbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc0NhY2hlLmggbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS90Y3BUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS91ZHBUYWJsZS5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5oCkBAIC04MTksNyArMTAyMywxMiBAQAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaApAQCAtODM2LDYgKzEwNDUsMTkgQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKQEAgLTg0OSw2ICsxMDcxLDIwIEBACiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaApAQCAtODc4LDY2ICsxMTE0LDY2IEBACiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX3NodXRkb3duLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5pdHMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTQ2LDYgKzExODIsNyBAQAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05ODMsNjMgKzEyMjAsNjYgQEAKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vYmplY3RfbW9uaXRvci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDQ4LDYgKzEyODgsNyBAQAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwODQsNjcgKzEzMjUsMTczIEBACiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHNubXBkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vc25tcF9hZ2VudC5sbzogbWliZ3JvdXAvdXRpbF9mdW5jcy5oIG1pYmdyb3VwL3N0cnVjdC5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBzbm1wZC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmggbTJtLmggc25tcGQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oIG1pYmdyb3VwL3NtdXgvc211eC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNTMsNiArMTUwMCw3IEBACiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTg5LDYzICsxNTM3LDY2IEBACiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc25tcF9wZXJsLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBzbm1wX3BlcmwuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNTQsNiArMTYwNSw3IEBACiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjkxLDMwMCArMTY0Myw3NCBAQAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oIGtlcm5lbC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oIGtlcm5lbC5oCiAuL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc3RydWN0Lmggc25tcGQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmgKIC4vc25tcF92YXJzLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oCi0uL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaAotLi9zbm1wX3ZhcnMubG86IG1pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorLi9zbm1wX3ZhcnMubG86IG1pYmdyb3VwL3NtdXgvc211eC5oIG1pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaAorLi9zbm1wX3ZhcnMubG86IG1pYmdyb3VwL3NubXB2My91c21Db25mLmggbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKIC4vc25tcF92YXJzLmxvOiBzbm1wX3BlcmwuaCAuLi9hZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfaW5pdHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtMm0uaCBzbm1wZC5oIG1pYmdyb3VwL3N0cnVjdC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmggbWliZ3JvdXAvdXRpbF9mdW5jcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zdHJ1Y3QuaCAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBtaWJncm91cC90ZXN0aGFuZGxlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX2RldmljZS5oIG1pYmdyb3VwL2hvc3QvaHJfb3RoZXIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmggbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCBtaWJncm91cC9ob3N0L2hyX2Rpc2suaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uaCBtaWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5oIG1pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuaCBtaWJncm91cC9leGFtcGxlcy93YXRjaGVkLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmggbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL1Jtb24vaGlzdG9yeS5oIG1pYmdyb3VwL1Jtb24vZXZlbnQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaAotLi9zbm1wZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oIG1pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmggbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oIG1pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvYXQuaCBtaWJncm91cC9taWJJSS9pcC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9hdC5oIG1pYmdyb3VwL21pYklJL3NubXBfbWliLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL21pYklJL3RjcC5oIG1pYmdyb3VwL21pYklJL2ljbXAuaCBtaWJncm91cC9taWJJSS91ZHAuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmggbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvaXB2Ni5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb2MuaAotLi9zbm1wZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oIG1pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuaCBtaWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oIG1pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmggbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oIG1pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmggbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmggbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKLS4vc25tcGQubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaCBtaWJncm91cC9hZ2VudC9uc0RlYnVnLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaCBtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5oIG1pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oIG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaCBtaWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaAotLi9zbm1wZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3RjcENvbm4uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCBtaWJncm91cC9zbXV4L3NtdXguaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTU5Myw2ICsxNzE5LDcgQEAKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNjMwLDYzICsxNzU3LDY2IEBACiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2OTUsNiArMTgyNSw3IEBACiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNzMyLDYzICsxODYzLDY1IEBACiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNzk3LDYgKzE5MzAsNyBAQAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xODM0LDYzICsxOTY4LDY1IEBACiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE4OTksNiArMjAzNSw3IEBACiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xOTM2LDYzICsyMDczLDY1IEBACiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMDAxLDYgKzIxNDAsNyBAQAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjAzOCw2MyArMjE3OCw2NSBAQAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjEwMyw2ICsyMjQ1LDcgQEAKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMTQwLDYzICsyMjgzLDY1IEBACiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjIwNSw2ICsyMzUwLDcgQEAKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIyNDIsNjMgKzIzODgsNjUgQEAKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIzMDcsNiArMjQ1NSw3IEBACiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjM0NCw2MyArMjQ5Myw2NSBAQAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI0MDksNiArMjU2MCw3IEBACiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNDQ2LDYzICsyNTk4LDY1IEBACiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTExLDYgKzI2NjUsNyBAQAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjU0OCw2NCArMjcwMyw2NiBAQAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MTQsNiArMjc3MSw3IEBACiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI2NTEsNjMgKzI4MDksNjUgQEAKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjcxNiw2ICsyODc2LDcgQEAKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjc1Myw2MyArMjkxNCw2NSBAQAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yODE4LDYgKzI5ODEsNyBAQAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yODU1LDYzICszMDE5LDY1IEBACiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI5MjAsNiArMzA4Niw3IEBACiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI5NTcsNjMgKzMxMjQsNjUgQEAKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzAyMiw2ICszMTkxLDcgQEAKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzA1OSw2MyArMzIyOSwxNzAgQEAKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMxMjQsNiArMzQwMSw3IEBACiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzE2MSw2NSArMzQzOSw2NyBAQAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfdG9fbmV4dC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzIyOCw2ICszNTA4LDcgQEAKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMyNjUsMTY3ICszNTQ2LDY3IEBACiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM0MzQsNiArMzYxNSw3IEBACiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzQ3MSw2MyArMzY1MywxNzAgQEAKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzUzNiw2ICszODI1LDcgQEAKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzU3Myw2MyArMzg2Myw2NSBAQAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNjM4LDYgKzM5MzAsNyBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzY3NSw2MyArMzk2OCw2NSBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzc0MCw2ICs0MDM1LDcgQEAKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM3NzcsNjMgKzQwNzMsNjUgQEAKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM4NDIsNiArNDE0MCw3IEBACiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzg3OSw2NCArNDE3OCw2NiBAQAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zOTQ1LDYgKzQyNDYsNyBAQAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zOTgyLDYzICs0Mjg0LDY1IEBACiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQwNDcsNiArNDM1MSw3IEBACiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDA4NCw2MyArNDM4OSw2NSBAQAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQxNDksNiArNDQ1Niw3IEBACiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MTg2LDYzICs0NDk0LDY1IEBACiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00MjUxLDYgKzQ1NjEsNyBAQAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00Mjg4LDY5ICs0NTk5LDY3IEBACiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaAogLi9taWJncm91cC9rZXJuZWxfc3Vub3M1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAva2VybmVsX3N1bm9zNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJncm91cC9rZXJuZWxfc3Vub3M1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00MzU5LDYgKzQ2NjgsNyBAQAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00Mzk2LDY0ICs0NzA2LDY2IEBACiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDQ2Miw2ICs0Nzc0LDcgQEAKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00NDk4LDE0ICs0ODExLDE1IEBACiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG1pYmdyb3VwL3N0cnVjdC5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuL21pYmdyb3VwL3N0cnVjdC5oIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmgKIC4vbWliZ3JvdXAvd2luRXh0RExMLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliZ3JvdXAvd2luRXh0RExMLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliZ3JvdXAvd2luRXh0RExMLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKZGlmZiAtLWdpdCBhL2FnZW50L01ha2VmaWxlLmluIGIvYWdlbnQvTWFrZWZpbGUuaW4KaW5kZXggYTY0NDhmOC4uNzQ4YjAxYyAxMDA2NDQKLS0tIGEvYWdlbnQvTWFrZWZpbGUuaW4KKysrIGIvYWdlbnQvTWFrZWZpbGUuaW4KQEAgLTMsNiArMyw3IEBACiAjCiAKIHRvcF9idWlsZGRpcgk9IC4uCitteXN1YmRpcj1hZ2VudAogCiAjIHVzZSBHTlUgdnBhdGgsIGlmIGF2YWlsYWJsZSwgdG8gb25seSBzZXQgYSBwYXRoIGZvciBzb3VyY2UgYW5kIGhlYWRlcnMKICMgVlBBVEggd2lsbCBwaWNrIHVwIG9iamVjdHMgdG9vLCB3aGljaCBpcyBiYWQgaWYgeW91IGFyZSBzaGFyaW5nIGEKQEAgLTE2LDE1ICsxNywxOCBAQAogIyB3aGF0IHRvIGluc3RhbGwKICMKIFNVQkRJUlM9aGVscGVycyBtaWJncm91cAorRlRTVUJESVJTPW1pYmdyb3VwIGhlbHBlcnMKIAogSU5TVEFMTFNCSU5QUk9HUz0gQFNOTVBEQAogSU5TVEFMTExJQlMJPSBsaWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiBJTlNUQUxMUE9TVExJQlMJPSBsaWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIAogSU5DTFVERVNVQkRJUj1hZ2VudAotSU5DTFVERVNVQkRJUkhFQURFUlM9YWdlbnRfcmVhZF9jb25maWcuaCBcCitIRUFERVJTPVwKKwlhZ2VudF9yZWFkX2NvbmZpZy5oIFwKIAlhZ2VudF9yZWdpc3RyeS5oIFwKIAlhZ2VudF9pbmRleC5oIFwKKwlhZ2VudF9zeXNPUlRhYmxlLmggXAogCWFnZW50X3RyYXAuaCBcCiAJYXV0b19ubGlzdC5oIFwKIAlkc19hZ2VudC5oIFwKQEAgLTM0LDcgKzM4LDM4IEBACiAJYWdlbnRfaGFuZGxlci5oIFwKIAluZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oIFwKIAltaWJfbW9kdWxlcy5oIFwKLQlhZ2VudF9jYWxsYmFja3MuaAorCWFnZW50X2NhbGxiYWNrcy5oIFwKKwlzeXNPUlRhYmxlLmggXAorCWFsbF9oZWxwZXJzLmggXAorCWJhYnlfc3RlcHMuaCBcCisJYnVsa190b19uZXh0LmggXAorCWNhY2hlX2hhbmRsZXIuaCBcCisJZGVidWdfaGFuZGxlci5oIFwKKwlpbnN0YW5jZS5oIFwKKwltb2RlX2VuZF9jYWxsLmggXAorCW11bHRpcGxleGVyLmggXAorCW51bGwuaCBcCisJb2xkX2FwaS5oIFwKKwlyZWFkX29ubHkuaCBcCisJcm93X21lcmdlLmggXAorCXNjYWxhci5oIFwKKwlzY2FsYXJfZ3JvdXAuaCBcCisJc2VyaWFsaXplLmggXAorCXNubXBfZ2V0X3N0YXRpc3RpYy5oIFwKKwlzdGFzaF9jYWNoZS5oIFwKKwlzdGFzaF90b19uZXh0LmggXAorCXRhYmxlX2FycmF5LmggXAorCXRhYmxlX2NvbnRhaW5lci5oIFwKKwl0YWJsZS5oIFwKKwl0YWJsZV9kYXRhLmggXAorCXRhYmxlX2RhdGFzZXQuaCBcCisJdGFibGVfdGRhdGEuaCBcCisJdGFibGVfaXRlcmF0b3IuaCBcCisJd2F0Y2hlci5oCisKK0hFQURFUlNPTkxZPW1mZC5oIHNldF9oZWxwZXIuaAorCitJTkNMVURFU1VCRElSSEVBREVSUz0kKEhFQURFUlMpICQoSEVBREVSU09OTFkpCiAKIElOU1RBTExCVUlMVFNVQkRJUkhFQURFUlM9Li4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oIFwKIAkJCSAgLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmggXApAQCAtNDIsNyArNzcsOCBAQAogSU5TVEFMTEJVSUxUU1VCRElSPWFnZW50CiAKIElOQ0xVREVNSUJHUk9VUERJUj1hZ2VudC9taWJncm91cAotSU5DTFVERU1JQkdST1VQRElSSEVBREVSUz11dGlsX2Z1bmNzLmgKK0lOQ0xVREVNSUJHUk9VUERJUkhFQURFUlM9c3RydWN0LmggdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCBcCisJdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAKIE9USEVSSU5TVEFMTD1pbnN0YWxsbWliZ3JvdXBoZWFkZXJzIEBFTUJFRFBFUkxJTlNUQUxMQAogT1RIRVJVTklOU1RBTEw9QEVNQkVEUEVSTFVOSU5TVEFMTEAKQEAgLTYwLDYgKzk2LDcgQEAKIAlhZ2VudF9pbmRleC5oCVwKIAlhZ2VudF9yZWFkX2NvbmZpZy5oIFwKIAlhZ2VudF9yZWdpc3RyeS5oIFwKKwlhZ2VudF9zeXNPUlRhYmxlLmggXAogCWFnZW50X3RyYXAuaAlcCiAJYXV0b19ubGlzdC5oCVwKIAlkc19hZ2VudC5oCVwKQEAgLTc1LDE2ICsxMTIsMTYgQEAKICMgaG93IHRvIGJ1aWxkIGl0IGluZm8KICMKIFVTRUxJQlMJCT0gLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotSEVMUEVSTElCCT0gaGVscGVycy9saWJuZXRzbm1waGVscGVycy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIEFHRU5UTElCCT0gbGlibmV0c25tcGFnZW50LiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogTUlCTElCCQk9IGxpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogCiBMQUdFTlRMSUJTCT0gQExBR0VOVExJQlNACiBMTUlCTElCUwk9IEBMTUlCTElCU0AKK1ZBTF9MSUJTCT0gQFZBTF9MSUJTQAogUEVSTExET1BUU19GT1JfQVBQUyA9IEBQRVJMTERPUFRTX0ZPUl9BUFBTQAogUEVSTExET1BUU19GT1JfTElCUyA9IEBQRVJMTERPUFRTX0ZPUl9MSUJTQAotTElCUwkJPSAkKFVTRUxJQlMpIEBBR0VOVExJQlNAICQoUEVSTExET1BUU19GT1JfQVBQUykKLU9VUl9BR0VOVF9MSUJTCT0gJChBR0VOVExJQikgJChIRUxQRVJMSUIpICQoTUlCTElCKSAkKExJQlMpIEBETExJQlNACitMSUJTCQk9ICQoVVNFTElCUykgQEFHRU5UTElCU0AgJChQRVJMTERPUFRTX0ZPUl9BUFBTKSAkKFZBTF9MSUJTKQorT1VSX0FHRU5UX0xJQlMJPSAkKEFHRU5UTElCKSAkKE1JQkxJQikgJChMSUJTKSBARExMSUJTQAogQ1BQRkxBR1MJPSAkKFRPUF9JTkNMVURFUykgLUkuICQoQUdFTlRfSU5DTFVERVMpICQoTUlCR1JPVVBfSU5DTFVERVMpIFwKIAkJICAkKFNOTVBMSUJfSU5DTFVERVMpIEBDUFBGTEFHU0AgCiAKQEAgLTk1LDMwICsxMzIsMTQ5IEBACiAKICMgbGlibmV0c25tcG1pYnMgb2JqZWN0cy4KIEBtaWJncm91cF9saXN0X2xvQAorQG1pYmdyb3VwX2xpc3RfZnRACiBAbWliZ3JvdXBfbGlzdF9vQAogQGFnZW50Z3JvdXBfbGlzdF9sb0AKK0BhZ2VudGdyb3VwX2xpc3RfZnRACiBAYWdlbnRncm91cF9saXN0X29ACitGVE1JQk9CSlMJPSAkKG1pYmdyb3VwX2xpc3RfZnQpIG1pYl9tb2R1bGVzLmZ0IGF1dG9fbmxpc3QuZnQKIExNSUJPQkpTCT0gJChtaWJncm91cF9saXN0X2xvKSBtaWJfbW9kdWxlcy5sbyBhdXRvX25saXN0LmxvCiBNSUJPQkpTCQk9ICQobWliZ3JvdXBfbGlzdF9vKSBtaWJfbW9kdWxlcy5vIGF1dG9fbmxpc3QubwogCiAjIGxpYm5ldHNubXBhZ2VudCBvYmplY3RzCi1MSUJBR0VOVE9CSlM9c25tcF9hZ2VudC5vIHNubXBfdmFycy5vIGFnZW50X3JlYWRfY29uZmlnLm8gXAotCWFnZW50X3JlZ2lzdHJ5Lm8gYWdlbnRfaW5kZXgubyBhZ2VudF90cmFwLm8ga2VybmVsLm8gXAotCSBhZ2VudF9oYW5kbGVyLm8gJChhZ2VudGdyb3VwX2xpc3RfbykgQE9USEVSQUdFTlRMSUJPQkpTQAotTExJQkFHRU5UT0JKUz1zbm1wX2FnZW50LmxvIHNubXBfdmFycy5sbyBhZ2VudF9yZWFkX2NvbmZpZy5sbyBcCi0JYWdlbnRfcmVnaXN0cnkubG8gYWdlbnRfaW5kZXgubG8gYWdlbnRfdHJhcC5sbyBrZXJuZWwubG8gXAotCWFnZW50X2hhbmRsZXIubG8gJChhZ2VudGdyb3VwX2xpc3RfbG8pIEBPVEhFUkFHRU5UTElCTE9CSlNACitMSUJBR0VOVE9CSlM9IFwKKwloZWxwZXJzL2FsbF9oZWxwZXJzLm8gXAorCWhlbHBlcnMvYmFieV9zdGVwcy5vIFwKKwloZWxwZXJzL2J1bGtfdG9fbmV4dC5vIFwKKwloZWxwZXJzL2NhY2hlX2hhbmRsZXIubyBcCisJaGVscGVycy9kZWJ1Z19oYW5kbGVyLm8gXAorCWhlbHBlcnMvaW5zdGFuY2UubyBcCisJaGVscGVycy9tb2RlX2VuZF9jYWxsLm8gXAorCWhlbHBlcnMvbXVsdGlwbGV4ZXIubyBcCisJaGVscGVycy9udWxsLm8gXAorCWhlbHBlcnMvb2xkX2FwaS5vIFwKKwloZWxwZXJzL3JlYWRfb25seS5vIFwKKwloZWxwZXJzL3Jvd19tZXJnZS5vIFwKKwloZWxwZXJzL3NjYWxhci5vIFwKKwloZWxwZXJzL3NjYWxhcl9ncm91cC5vIFwKKwloZWxwZXJzL3NlcmlhbGl6ZS5vIFwKKwloZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5vIFwKKwloZWxwZXJzL3N0YXNoX2NhY2hlLm8gXAorCWhlbHBlcnMvc3Rhc2hfdG9fbmV4dC5vIFwKKwloZWxwZXJzL3RhYmxlLm8gXAorCWhlbHBlcnMvdGFibGVfYXJyYXkubyBcCisJaGVscGVycy90YWJsZV9jb250YWluZXIubyBcCisJaGVscGVycy90YWJsZV9kYXRhLm8gXAorCWhlbHBlcnMvdGFibGVfZGF0YXNldC5vIFwKKwloZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLm8gXAorCWhlbHBlcnMvdGFibGVfcm93Lm8gXAorCWhlbHBlcnMvdGFibGVfdGRhdGEubyBcCisJaGVscGVycy93YXRjaGVyLm8gXAorCWFnZW50X2hhbmRsZXIubyBcCisJYWdlbnRfaW5kZXgubyBcCisJYWdlbnRfcmVhZF9jb25maWcubyBcCisJYWdlbnRfcmVnaXN0cnkubyBcCisJYWdlbnRfc3lzT1JUYWJsZS5vIFwKKwlhZ2VudF90cmFwLm8gXAorCWtlcm5lbC5vIFwKKwlzbm1wX2FnZW50Lm8gXAorCXNubXBfdmFycy5vIFwKKwkkKGFnZW50Z3JvdXBfbGlzdF9vKSBcCisJQE9USEVSQUdFTlRMSUJPQkpTQAorCitMTElCQUdFTlRPQkpTPSBcCisJaGVscGVycy9hbGxfaGVscGVycy5sbyBcCisJaGVscGVycy9iYWJ5X3N0ZXBzLmxvIFwKKwloZWxwZXJzL2J1bGtfdG9fbmV4dC5sbyBcCisJaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvIFwKKwloZWxwZXJzL2RlYnVnX2hhbmRsZXIubG8gXAorCWhlbHBlcnMvaW5zdGFuY2UubG8gXAorCWhlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbyBcCisJaGVscGVycy9tdWx0aXBsZXhlci5sbyBcCisJaGVscGVycy9udWxsLmxvIFwKKwloZWxwZXJzL29sZF9hcGkubG8gXAorCWhlbHBlcnMvcmVhZF9vbmx5LmxvIFwKKwloZWxwZXJzL3Jvd19tZXJnZS5sbyBcCisJaGVscGVycy9zY2FsYXIubG8gXAorCWhlbHBlcnMvc2NhbGFyX2dyb3VwLmxvIFwKKwloZWxwZXJzL3NlcmlhbGl6ZS5sbyBcCisJaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG8gXAorCWhlbHBlcnMvc3Rhc2hfY2FjaGUubG8gXAorCWhlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbyBcCisJaGVscGVycy90YWJsZS5sbyBcCisJaGVscGVycy90YWJsZV9hcnJheS5sbyBcCisJaGVscGVycy90YWJsZV9jb250YWluZXIubG8gXAorCWhlbHBlcnMvdGFibGVfZGF0YS5sbyBcCisJaGVscGVycy90YWJsZV9kYXRhc2V0LmxvIFwKKwloZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvIFwKKwloZWxwZXJzL3RhYmxlX3Jvdy5sbyBcCisJaGVscGVycy90YWJsZV90ZGF0YS5sbyBcCisJaGVscGVycy93YXRjaGVyLmxvIFwKKwlhZ2VudF9oYW5kbGVyLmxvIFwKKwlhZ2VudF9pbmRleC5sbyBcCisJYWdlbnRfcmVhZF9jb25maWcubG8gXAorCWFnZW50X3JlZ2lzdHJ5LmxvIFwKKwlhZ2VudF9zeXNPUlRhYmxlLmxvIFwKKwlhZ2VudF90cmFwLmxvIFwKKwlrZXJuZWwubG8gXAorCXNubXBfYWdlbnQubG8gXAorCXNubXBfdmFycy5sbyBcCisJJChhZ2VudGdyb3VwX2xpc3RfbG8pIFwKKwlAT1RIRVJBR0VOVExJQkxPQkpTQAorCitMTElCQUdFTlRGVFM9IFwKKwloZWxwZXJzL2FsbF9oZWxwZXJzLmZ0IFwKKwloZWxwZXJzL2JhYnlfc3RlcHMuZnQgXAorCWhlbHBlcnMvYnVsa190b19uZXh0LmZ0IFwKKwloZWxwZXJzL2NhY2hlX2hhbmRsZXIuZnQgXAorCWhlbHBlcnMvZGVidWdfaGFuZGxlci5mdCBcCisJaGVscGVycy9pbnN0YW5jZS5mdCBcCisJaGVscGVycy9tb2RlX2VuZF9jYWxsLmZ0IFwKKwloZWxwZXJzL211bHRpcGxleGVyLmZ0IFwKKwloZWxwZXJzL251bGwuZnQgXAorCWhlbHBlcnMvb2xkX2FwaS5mdCBcCisJaGVscGVycy9yZWFkX29ubHkuZnQgXAorCWhlbHBlcnMvcm93X21lcmdlLmZ0IFwKKwloZWxwZXJzL3NjYWxhci5mdCBcCisJaGVscGVycy9zY2FsYXJfZ3JvdXAuZnQgXAorCWhlbHBlcnMvc2VyaWFsaXplLmZ0IFwKKwloZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5mdCBcCisJaGVscGVycy9zdGFzaF9jYWNoZS5mdCBcCisJaGVscGVycy9zdGFzaF90b19uZXh0LmZ0IFwKKwloZWxwZXJzL3RhYmxlLmZ0IFwKKwloZWxwZXJzL3RhYmxlX2FycmF5LmZ0IFwKKwloZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5mdCBcCisJaGVscGVycy90YWJsZV9kYXRhLmZ0IFwKKwloZWxwZXJzL3RhYmxlX2RhdGFzZXQuZnQgXAorCWhlbHBlcnMvdGFibGVfaXRlcmF0b3IuZnQgXAorCWhlbHBlcnMvdGFibGVfcm93LmZ0IFwKKwloZWxwZXJzL3RhYmxlX3RkYXRhLmZ0IFwKKwloZWxwZXJzL3dhdGNoZXIuZnQgXAorCWFnZW50X2hhbmRsZXIuZnQgXAorCWFnZW50X2luZGV4LmZ0IFwKKwlhZ2VudF9yZWFkX2NvbmZpZy5mdCBcCisJYWdlbnRfcmVnaXN0cnkuZnQgXAorCWFnZW50X3N5c09SVGFibGUuZnQgXAorCWFnZW50X3RyYXAuZnQgXAorCWtlcm5lbC5mdCBcCisJc25tcF9hZ2VudC5mdCBcCisJc25tcF92YXJzLmZ0IFwKKwkkKGFnZW50Z3JvdXBfbGlzdF9mdCkgXAorCUBPVEhFUkFHRU5UTElCTEZUU0AKIAogIyBUaGUgYWdlbnQgb2JqZWN0cy4KIEFHRU5UT0JKUz1zbm1wZC5vIEBvdGhlcl9hZ2VudG9ianNACiBMQUdFTlRPQkpTPXNubXBkLmxvIEBvdGhlcl9sYWdlbnRvYmpzQAorRlRBR0VOVE9CSlM9c25tcGQuZnQgQG90aGVyX2Z0YWdlbnRvYmpzQAogCiAjCiAjIERlZmluZSBPQkpTIGFuZCBMT0JKUyBmb3IgY2xlYW4gdGFyZ2V0IChqdXN0IHRoaXMgZGlyZWN0b3J5KQogIwogT0JKUwkJPSAkKExJQkFHRU5UT0JKUykgICQoQUdFTlRPQkpTKSAgbWliX21vZHVsZXMubyAgYXV0b19ubGlzdC5vCiBMT0JKUwkJPSAkKExMSUJBR0VOVE9CSlMpICQoTEFHRU5UT0JKUykgbWliX21vZHVsZXMubG8gYXV0b19ubGlzdC5sbworRlRPQkpTCQk9ICQoTExJQkFHRU5URlRTKSAkKEZUQUdFTlRPQkpTKSBtaWJfbW9kdWxlcy5mdCBhdXRvX25saXN0LmZ0CiAKK0ZFQVRVUkVGSUxFICAgICA9ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2ZlYXR1cmVzLmgKIAogYWxsOiBhZ2VudGxpYiBzdWJkaXJzIG1pYmxpYiAkKElOU1RBTExCSU5QUk9HUykgJChJTlNUQUxMU0JJTlBST0dTKQogCkBAIC0xNDAsMTMgKzI5NiwxMiBAQAogc25tcGQkKEVYRUVYVCk6CSR7TEFHRU5UT0JKU30gJChVU0VMSUJTKSAkKEFHRU5UTElCKSAkKEhFTFBFUkxJQikgJChNSUJMSUIpICQoTElCVEFSRykgCiAJJChMSU5LKSAkKENGTEFHUykgLW8gJEAgJHtMQUdFTlRPQkpTfSAke0xERkxBR1N9ICR7T1VSX0FHRU5UX0xJQlN9CiAKLQogbGlibmV0c25tcGFnZW50LiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJHtMTElCQUdFTlRPQkpTfSAkKFVTRUxJQlMpCi0JJChMSUJfTERfQ01EKSAkKEFHRU5UTElCKSAke0xMSUJBR0VOVE9CSlN9ICQoVVNFTElCUykgJHtMQUdFTlRMSUJTfSAkKExERkxBR1MpICQoUEVSTExET1BUU19GT1JfTElCUykgJChMSUJfTERfTElCUykKKwkkKExJQl9MRF9DTUQpICQoQUdFTlRMSUIpICR7TExJQkFHRU5UT0JKU30gJChVU0VMSUJTKSAke0xBR0VOVExJQlN9IEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgJChQRVJMTERPUFRTX0ZPUl9MSUJTKSAkKExJQl9MRF9MSUJTKSBAQUdFTlRMSUJTQAogCSQoUkFOTElCKSAkKEFHRU5UTElCKQogCi1saWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICR7TE1JQk9CSlN9ICQoSEVMUEVSTElCKSAkKEFHRU5UTElCKSAkKFVTRUxJQlMpCi0JJChMSUJfTERfQ01EKSAkKE1JQkxJQikgJHtMTUlCT0JKU30gJChIRUxQRVJMSUIpICQoQUdFTlRMSUIpICQoVVNFTElCUykgJHtMTUlCTElCU30gJChMREZMQUdTKSAkKExJQl9MRF9MSUJTKQorbGlibmV0c25tcG1pYnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pOiAke0xNSUJPQkpTfSAkKEFHRU5UTElCKSAkKFVTRUxJQlMpCisJJChMSUJfTERfQ01EKSAkKE1JQkxJQikgJHtMTUlCT0JKU30gJChBR0VOVExJQikgJChVU0VMSUJTKSBATERfTk9fVU5ERUZJTkVEQCAkKExERkxBR1MpICR7TE1JQkxJQlN9ICQoUEVSTExET1BUU19GT1JfTElCUykgJChMSUJfTERfTElCUykgQEFHRU5UTElCU0AKIAkkKFJBTkxJQikgJChNSUJMSUIpCiAKIGFnZW50bGliOiAkKEFHRU5UTElCKQpAQCAtMTY1LDE1ICszMjAsMTYgQEAKIAkgIEBlY2hvICJyZW1vdmVkIHNubXBfcGVybC5wbCBmcm9tICQoSU5TVEFMTF9QUkVGSVgpJChzbm1wbGliZGlyKSIKIAogaW5zdGFsbG1pYmdyb3VwaGVhZGVyczoKLQlAaWYgdGVzdCAiJChJTkNMVURFTUlCR1JPVVBESVJIRUFERVJTKSIgIT0gIiIgOyB0aGVuIFwKLSAgICAgICAgICAgICAgICBlY2hvIGNyZWF0aW5nIGRpcmVjdG9yeSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCi0gICAgICAgICAgICAgICAgaXQ9IiQoSU5DTFVERU1JQkdST1VQRElSSEVBREVSUykiIDsgXAotICAgICAgICAgICAgICAgICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCi0gICAgICAgICAgICAgICAgZm9yIGkgaW4gJCRpdCA7IGRvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHRvcF9zcmNkaXIpLyQoSU5DTFVERU1JQkdST1VQRElSKS8kJGkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpL2FnZW50IDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiaW5zdGFsbGluZyAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpL2FnZW50IiA7IFwKLSAgICAgICAgICAgICAgICBkb25lIFwKLSAgICAgICAgZmkKKwlAZm9yIGl0IGluICQoSU5DTFVERU1JQkdST1VQRElSSEVBREVSUykgOyBkbyBcCisJCWl0ZD1gZGlybmFtZSAiJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpL2FnZW50LyQkaXQiYCA7IFwKKwkJaWYgWyAhIC1kICIkJGl0ZCIgXSA7IHRoZW4gXAorCQkJZWNobyAiY3JlYXRpbmcgZGlyZWN0b3J5ICQkaXRkIiA7IFwKKwkJCSQoU0hFTEwpICIkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiICIkJGl0ZCIgOyBcCisJCWZpIDsgXAorCQkkKElOU1RBTExfREFUQSkgIiQodG9wX3NyY2RpcikvJChJTkNMVURFTUlCR1JPVVBESVIpLyQkaXQiIFwKKwkJCSIkJGl0ZCIgOyBcCisJCWVjaG8gImluc3RhbGxpbmcgJCRpdCBpbiAkJGl0ZCIgOyBcCisJZG9uZQogCiBAbW9kdWxlX2xpc3RfZGVwc0AKIEBhZ2VudF9tb2R1bGVfbGlzdF9kZXBzQApAQCAtMTg0LDEwICszNDAsNiBAQAogIyBkZXBlbmRlbmN5IGZvciBzbm1wbGliIG9iamVjdC4gaXQncyBoZXJlIGJlY2F1c2UgdGhlIGhlYWRlcnMgbGlzdGVkCiAjIGFyZSByZWxhdGl2ZSB0byB0aGUgYWdlbnQgZGlyZWN0b3J5LgogCi0kKEhFTFBFUkxJQik6IHN1YmRpcnMKLSMgdGhlIGFib3ZlIGlzIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIHdpdGggJy1qJyBhcmd1bWVudCAtIGV2ZXJ5dGhpbmcgd2hhdCBuZWVkcyAKLSMgaGVscGVyIGxpYiBtdXN0IHdhaXQgdW50aWwgJ3N1YmRpcnMnIHRhcmdldCBpcyBmaW5pc2hlZAotCiBzdWJkaXJzOiBhZ2VudGxpYgogIyB3YWl0IGZvciBhZ2VudGxpYiBiZWZvcmUgYnVpbGRpbmcgJ3N1YmRpcnMnIHRhcmdldAogCmRpZmYgLS1naXQgYS9hZ2VudC9hZ2VudF9oYW5kbGVyLmMgYi9hZ2VudC9hZ2VudF9oYW5kbGVyLmMKaW5kZXggZmNiYzZkZC4uNTllOTYxMyAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfaGFuZGxlci5jCisrKyBiL2FnZW50L2FnZW50X2hhbmRsZXIuYwpAQCAtOSw2ICs5LDcgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKQEAgLTIxLDYgKzIyLDkgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfaGFuZGxlciwgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZCwgYWdlbnRfaGFuZGxlcikKIAogc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIgKl9jbG9uZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKml0KTsKIApAQCAtODQsOSArODgsMTEgQEAKICAqIEB7CiAgKi8KIAotLyoqIGNyZWF0ZXMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdHVyZSBnaXZlbiBhIG5hbWUgYW5kIGEgYWNjZXNzIG1ldGhvZC4KKy8qKiBDcmVhdGVzIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLgorICogIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhbmQgZmlsbGVkIHVzaW5nIHRoZSBnaXZlbiBuYW1lCisgKiAgYW5kIGFjY2VzcyBtZXRob2QuCiAgKiAgVGhlIHJldHVybmVkIGhhbmRsZXIgc2hvdWxkIHRoZW4gYmUgQGxpbmsgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkKLSAqICByZWdpc3RlcmVkLkBlbmRsaW5rCisgKiAgcmVnaXN0ZXJlZCBAZW5kbGluay4KICAqCiAgKiAgQHBhcmFtIG5hbWUgaXMgdGhlIGhhbmRsZXIgbmFtZSBhbmQgaXMgY29waWVkIHRoZW4gYXNzaWduZWQgdG8KICAqICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyLT5oYW5kbGVyX25hbWUKQEAgLTExNyw4ICsxMjMsOSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLS8qKiBjcmVhdGVzIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIGdpdmVuIGEgbmFtZSwgYQotICogIGFjY2Vzc19tZXRob2QgZnVuY3Rpb24sIGEgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZCBhbmQgdGhlIG1vZGVzCisvKiogQ3JlYXRlcyBhIE1JQiBoYW5kbGVyIHN0cnVjdHVyZS4KKyAqICBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgYW5kIGZpbGxlZCB1c2luZyB0aGUgZ2l2ZW4gbmFtZSwKKyAqICBhY2Nlc3MgZnVuY3Rpb24sIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBPSUQgYW5kIGxpc3Qgb2YgbW9kZXMgdGhhdAogICogIHRoZSBoYW5kbGVyIHN1cHBvcnRzLiBJZiBtb2RlcyA9PSAwLCB0aGVuIG1vZGVzIHdpbGwgYXV0b21hdGljYWxseQogICogIGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBvbmx5IEhBTkRMRVJfQ0FOX0RFRkFVTFQsIHdoaWNoIGlzCiAgKiAgYnkgZGVmYXVsdCByZWFkLW9ubHkgR0VUIGFuZCBHRVRORVhUIHJlcXVlc3RzLiBBIGhhbmRlciB3aGljaCBzdXBwb3J0cwpAQCAtMTMzLDcgKzE0MCw3IEBACiAgKgogICogIEBwYXJhbSByZWdfb2lkIGlzIHRoZSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkLgogICoKLSAqICBAcGFyYW0gcmVnX29pZF9sZW4gaXMgdGhlIGxlbmd0aCBvZiByZWdfb2lkLCBjYW4gdXNlIHRoZSBtYWNybywKKyAqICBAcGFyYW0gcmVnX29pZF9sZW4gaXMgdGhlIGxlbmd0aCBvZiByZWdfb2lkOyBjYW4gdXNlIHRoZSBtYWNybywKICAqICAgICAgICAgT0lEX0xFTkdUSAogICoKICAqICBAcGFyYW0gbW9kZXMgaXMgdXNlZCB0byBjb25maWd1cmUgcmVhZC93cml0ZSBhY2Nlc3MuICBJZiBtb2RlcyA9PSAwLCAKQEAgLTE2Miw3ICsxNjksNyBAQAogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlcykKIHsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICp0aGVfcmVnOwpAQCAtMTc5LDI0ICsxODYsNjggQEAKICAgICB0aGVfcmVnLT5wcmlvcml0eSA9IERFRkFVTFRfTUlCX1BSSU9SSVRZOwogICAgIGlmIChuYW1lKQogICAgICAgICB0aGVfcmVnLT5oYW5kbGVyTmFtZSA9IHN0cmR1cChuYW1lKTsKLSAgICB0aGVfcmVnLT5yb290b2lkID0gbmV0c25tcF9tZW1kdXAocmVnX29pZCwgcmVnX29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgdGhlX3JlZy0+cm9vdG9pZCA9IHNubXBfZHVwbGljYXRlX29iamlkKHJlZ19vaWQsIHJlZ19vaWRfbGVuKTsKICAgICB0aGVfcmVnLT5yb290b2lkX2xlbiA9IHJlZ19vaWRfbGVuOwogICAgIHJldHVybiB0aGVfcmVnOwogfQogCisvKiogQ3JlYXRlcyBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSB3aXRoIGEgbmV3IE1JQiBoYW5kbGVyLgorICogIFRoaXMgZnVuY3Rpb24gZmlyc3QgQGxpbmsgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigpIGNyZWF0ZXMgQGVuZGxpbmsKKyAqICBhIE1JQiBoYW5kbGVyLCB0aGVuIEBsaW5rIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCkKKyAqICBtYWtlcyByZWdpc3RhdGlvbiBzdHJ1Y3R1cmUgQGVuZGxpbmsgZm9yIGl0LgorICoKKyAqICBAcGFyYW0gbmFtZSBpcyB0aGUgaGFuZGxlciBuYW1lIGZvciBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkKKyAqCisgKiAgQHBhcmFtIGhhbmRsZXJfYWNjZXNzX21ldGhvZCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdXNlZCBhcyB0aGUgYWNjZXNzCisgKiAgICAgbWV0aG9kIGZvciBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkKKyAqCisgKiAgQHBhcmFtIHJlZ19vaWQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQuCisgKgorICogIEBwYXJhbSByZWdfb2lkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQ7IGNhbiB1c2UgdGhlIG1hY3JvLAorICogICAgICAgICBPSURfTEVOR1RICisgKgorICogIEBwYXJhbSBtb2RlcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSByZWFkL3dyaXRlIGFjY2VzcywgYXMgaW4KKyAqICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoKQorICoKKyAqICBAcmV0dXJuIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKiAgICAgICAgICBJZiB0aGUgc3RydWN0dXJlcyBjcmVhdGlvbiBmYWlsZWQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogIEBzZWUgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigpCisgKiAgQHNlZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgpCisgKi8KIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfYWNjZXNzX21ldGhvZCwgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfYWNjZXNzX21ldGhvZCwgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50IG1vZGVzKQogewotICAgIHJldHVybgotICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZShuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKG5hbWUsIGhhbmRsZXJfYWNjZXNzX21ldGhvZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBtb2Rlcyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcnYgPSBOVUxMOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKG5hbWUsIGhhbmRsZXJfYWNjZXNzX21ldGhvZCk7CisgICAgaWYgKGhhbmRsZXIpIHsKKyAgICAgICAgcnYgPSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgKKyAgICAgICAgICAgIG5hbWUsIGhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBtb2Rlcyk7CisgICAgICAgIGlmICghcnYpCisgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OwogfQogCi0vKiogcmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuICovCisvKiogUmVnaXN0ZXJzIGEgTUlCIGhhbmRsZXIgaW5zaWRlIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLgorICogIENoZWNrcyBnaXZlbiByZWdpc3RhdGlvbiBoYW5kbGVyIGZvciBzYW5pdHksIHRoZW4KKyAqICBAbGluayBuZXRzbm1wX3JlZ2lzdGVyX21pYigpIHBlcmZvcm1zIHJlZ2lzdHJhdGlvbiBAZW5kbGluaworICogIGluIHRoZSBNSUIgdHJlZSwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICogIHBvaW50ZXIuIE9uIHN1Y2Nlc3MsIFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04gaXMgY2FsbGVkLgorICogIFRoZSByZWdpc3RyYXRpb24gc3RydWN0IG1heSBiZSBjcmVhdGVkIGJ5IGNhbGwgb2YKKyAqICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBQb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTI2MSw3ICszMTIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mbywgMSk7CiB9CiAKLS8qKiB1bnJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAqLworLyoqIFVucmVnaXN0ZXJzIGEgTUlCIGhhbmRsZXIgZGVzY3JpYmVkIGluc2lkZSB0aGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZS4KKyAqICBSZW1vdmVzIGEgcmVnaXN0cmF0aW9uLCBwZXJmb3JtZWQgZWFybGllciBieQorICogIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpLCBmcm9tIHRoZSBNSUIgdHJlZS4KKyAqICBVc2VzIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKSB0byBkbyB0aGUgdGFzay4KKyAqCisgKiAgQHBhcmFtIHJlZ2luZm8gUG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0LgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKQorICogIEBzZWUgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKi8KIGludAogbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTI3MSw3ICszMzMsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5jb250ZXh0TmFtZSk7CiB9CiAKLS8qKiByZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gKi8KKy8qKiBSZWdpc3RlcnMgYSBNSUIgaGFuZGxlciBpbnNpZGUgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUuCisgKiAgQ2hlY2tzIGdpdmVuIHJlZ2lzdGF0aW9uIGhhbmRsZXIgZm9yIHNhbml0eSwgdGhlbgorICogIEBsaW5rIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkgcGVyZm9ybXMgcmVnaXN0cmF0aW9uIEBlbmRsaW5rCisgKiAgaW4gdGhlIE1JQiB0cmVlLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgKiAgcG9pbnRlci4gTmV2ZXIgY2FsbHMgU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTi4KKyAqICBUaGUgcmVnaXN0cmF0aW9uIHN0cnVjdCBtYXkgYmUgY3JlYXRlZCBieSBjYWxsIG9mCisgKiAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oKS4KKyAqCisgKiAgQHBhcmFtIHJlZ2luZm8gUG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0LgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpCisgKiAgQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX21pYigpCisgKi8KIGludAogbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX25vY2FsbGJhY2sobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTMxOSwxMSArMzk1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8sIDApOwogfQogCi0vKiogaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMKLSAgIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gIFRoZSBuZXcKLSAgIGhhbmRsZXIgaXMgaW5qZWN0ZWQgYWZ0ZXIgdGhlIGJlZm9yZV93aGF0IGhhbmRsZXIsIG9yIGlmIE5VTEwgYXQKLSAgIHRoZSB0b3Agb2YgdGhlIGxpc3QgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIG5ldyBoYW5kbGVyIHRvIGJlIGNhbGxlZAotICAgZmlyc3QuKi8KKy8qKiBJbmplY3RzIGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiBoYW5kbGVycy4KKyAqICBUaGUgZ2l2ZW4gTUlCIGhhbmRsZXIgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGhhbmRsZXIgbmFtZWQgYmVmb3JlX3doYXQuCisgKiAgSWYgYmVmb3JlX3doYXQgaXMgTlVMTCwgdGhlIGhhbmRsZXIgaXMgcHV0IGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QsCisgKiAgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZpcnN0LgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpCisgKiAgQHNlZSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKCkKKyAqLwogaW50CiBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTM3NywxMCArNDU4LDE1IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAotLyoqIGluamVjdCBhIG5ldyBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXJzCi0gICBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuICBUaGUgbmV3IGhhbmRsZXIgaXMKLSAgIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIG5ldyBoYW5kbGVyCi0gICB0byBiZSBjYWxsZWQgZmlyc3QuKi8KKy8qKiBJbmplY3RzIGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiBoYW5kbGVycy4KKyAqICBUaGUgZ2l2ZW4gTUlCIGhhbmRsZXIgaXMgcHV0IGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QsCisgKiAgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZpcnN0LgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpCisgKiAgQHNlZSBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSgpCisgKi8KIGludAogbmV0c25tcF9pbmplY3RfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQpAQCAtMzg4LDcgKzQ3NCwxMyBAQAogICAgIHJldHVybiBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZShyZWdpbmZvLCBoYW5kbGVyLCBOVUxMKTsKIH0KIAotLyoqIGNhbGxzIGEgaGFuZGxlciB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZyBvZiBhcmd1bWVudHMsIGV0Yy4gKi8KKy8qKiBDYWxscyBhIE1JQiBoYW5kbGVycyBjaGFpbiwgc3RhcnRpbmcgd2l0aCBzcGVjaWZpYyBoYW5kbGVyLgorICogIFRoZSBnaXZlbiBhcmd1bWVudHMgYW5kIE1JQiBoYW5kbGVyIGFyZSBjaGVja2VkCisgKiAgZm9yIHNhbml0eSwgdGhlbiB0aGUgaGFuZGxlcnMgYXJlIGNhbGxlZCwgb25lIGJ5IG9uZSwKKyAqICB1bnRpbCBuZXh0IGhhbmRsZXIgaXMgTlVMTC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCisgKi8KIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jYWxsX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqbmV4dF9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTQwOSw1MyArNTAxLDU1IEBACiAgICAgfQogCiAgICAgZG8gewotICAgIG5oID0gbmV4dF9oYW5kbGVyLT5hY2Nlc3NfbWV0aG9kOwotICAgIGlmICghbmgpIHsKLSAgICAgICAgaWYgKG5leHRfaGFuZGxlci0+bmV4dCkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGFjY2VzcyBtZXRob2Qgc3BlY2lmaWVkIGluIGhhbmRsZXIgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIG5oID0gbmV4dF9oYW5kbGVyLT5hY2Nlc3NfbWV0aG9kOworICAgICAgICBpZiAoIW5oKSB7CisgICAgICAgICAgICBpZiAobmV4dF9oYW5kbGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGFjY2VzcyBtZXRob2Qgc3BlY2lmaWVkIGluIGhhbmRsZXIgJXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmhhbmRsZXJfbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGUgZmluYWwgaGFuZGxlciByZWdpc3RyYXRpb24gaW4gdGhlIGNoYWluIG1heSB3ZWxsIG5vdCBuZWVkCisgICAgICAgICAgICAgKiB0byBpbmNsdWRlIGEgaGFuZGxlciByb3V0aW5lLCBpZiB0aGUgcHJvY2Vzc2luZyBvZiB0aGlzIG9iamVjdAorICAgICAgICAgICAgICogaXMgaGFuZGxlZCBjb21wbGV0ZWx5IGJ5IHRoZSBhZ2VudCB0b29sa2l0IGhlbHBlcnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhhbmRsZXI6Y2FsbGluZyIsICJjYWxsaW5nIGhhbmRsZXIgJXMgZm9yIG1vZGUgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSkpKTsKKwogICAgICAgICAvKgotICAgICAgICAgKiBUaGUgZmluYWwgaGFuZGxlciByZWdpc3RyYXRpb24gaW4gdGhlIGNoYWluIG1heSB3ZWxsIG5vdCBuZWVkCi0gICAgICAgICAqIHRvIGluY2x1ZGUgYSBoYW5kbGVyIHJvdXRpbmUsIGlmIHRoZSBwcm9jZXNzaW5nIG9mIHRoaXMgb2JqZWN0Ci0gICAgICAgICAqIGlzIGhhbmRsZWQgY29tcGxldGVseSBieSB0aGUgYWdlbnQgdG9vbGtpdCBoZWxwZXJzLgorICAgICAgICAgKiBYWFg6IGRlZmluZSBhY2NlcHRhYmxlIHJldHVybiBzdGF0dXNlcwogICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgfQorICAgICAgICByZXQgPSAoKm5oKSAobmV4dF9oYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLCByZXF1ZXN0cyk7CiAKLSAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpjYWxsaW5nIiwgImNhbGxpbmcgaGFuZGxlciAlcyBmb3IgbW9kZSAlc1xuIiwKLSAgICAgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmhhbmRsZXJfbmFtZSwKLSAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSkpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhhbmRsZXI6cmV0dXJuZWQiLCAiaGFuZGxlciAlcyByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9oYW5kbGVyLT5oYW5kbGVyX25hbWUsIHJldCkpOwogCi0gICAgLyoKLSAgICAgKiBYWFg6IGRlZmluZSBhY2NlcHRhYmxlIHJldHVybiBzdGF0dXNlcyAKLSAgICAgKi8KLSAgICByZXQgPSAoKm5oKSAobmV4dF9oYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLCByZXF1ZXN0cyk7CisgICAgICAgIGlmICghIChuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUKSkKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgREVCVUdNU0dUTCgoImhhbmRsZXI6cmV0dXJuZWQiLCAiaGFuZGxlciAlcyByZXR1cm5lZCAlZFxuIiwKLSAgICAgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmhhbmRsZXJfbmFtZSwgcmV0KSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGRpZCBoYW5kbGVyIHNpZ25hbCB0aGF0IGl0IGRpZG4ndCB3YW50IGF1dG8gbmV4dCB0aGlzIHRpbWUgYXJvdW5kPworICAgICAgICAgKi8KKyAgICAgICAgaWYobmV4dF9oYW5kbGVyLT5mbGFncyAmIE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFKSB7CisgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmZsYWdzICY9IH5NSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBpZiAoISAobmV4dF9oYW5kbGVyLT5mbGFncyAmIE1JQl9IQU5ETEVSX0FVVE9fTkVYVCkpCi0gICAgICAgIGJyZWFrOwotCi0gICAgLyoKLSAgICAgKiBkaWQgaGFuZGxlciBzaWduYWwgdGhhdCBpdCBkaWRuJ3Qgd2FudCBhdXRvIG5leHQgdGhpcyB0aW1lIGFyb3VuZD8KLSAgICAgKi8KLSAgICBpZihuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0UpIHsKLSAgICAgICAgbmV4dF9oYW5kbGVyLT5mbGFncyAmPSB+TUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG5leHRfaGFuZGxlciA9IG5leHRfaGFuZGxlci0+bmV4dDsKKyAgICAgICAgbmV4dF9oYW5kbGVyID0gbmV4dF9oYW5kbGVyLT5uZXh0OwogCiAgICAgfSB3aGlsZShuZXh0X2hhbmRsZXIpOwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyoqIEBpbnRlcm5hbAotICogIGNhbGxzIGFsbCB0aGUgaGFuZGxlcnMgZm9yIGEgZ2l2ZW4gbW9kZS4KKy8qKiBAcHJpdmF0ZQorICogIENhbGxzIGFsbCB0aGUgTUlCIEhhbmRsZXJzIGluIHJlZ2lzdHJhdGlvbiBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gbW9kZS4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCiAgKi8KIGludAogbmV0c25tcF9jYWxsX2hhbmRsZXJzKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCkBAIC00ODYsNiArNTgwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOyAgICAvKiBsZWdhbCAqLwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC01MDAsNiArNTk1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSBpbiBuZXRzbm1wX2NhbGxfaGFuZGxlcnMhIGJ1ZyFcbiIpOwpAQCAtNTE3LDggKzYxMywxMyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLS8qKiBjYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aAotICAgd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuICovCisvKiogQHByaXZhdGUKKyAqICBDYWxscyB0aGUgbmV4dCBNSUIgaGFuZGxlciBpbiB0aGUgY2hhaW4sIGFmdGVyIHRoZSBjdXJyZW50IG9uZS4KKyAqICBUaGUgZ2l2ZW4gYXJndW1lbnRzIGFuZCBNSUIgaGFuZGxlciBhcmUgY2hlY2tlZAorICogIGZvciBzYW5pdHksIHRoZW4gdGhlIG5leHQgaGFuZGxlciBpcyBjYWxsZWQuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICovCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTUzOSw4ICs2NDAsMTUgQEAKICAgICByZXR1cm4gbmV0c25tcF9jYWxsX2hhbmRsZXIoY3VycmVudC0+bmV4dCwgcmVnaW5mbywgcmVxaW5mbywgcmVxdWVzdHMpOwogfQogCi0vKiogY2FsbHMgdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIHdpdGgKLSAgIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZywgZXRjLiAqLworLyoqIEBwcml2YXRlCisgKiAgQ2FsbHMgdGhlIG5leHQgTUlCIGhhbmRsZXIgaW4gdGhlIGNoYWluLCBhZnRlciB0aGUgY3VycmVudCBvbmUuCisgKiAgVGhlIGdpdmVuIGFyZ3VtZW50cyBhbmQgTUlCIGhhbmRsZXIgYXJlIG5vdCB2YWxpZGF0ZWQgYmVmb3JlCisgKiAgdGhlIGNhbGwsIG9ubHkgcmVxdWVzdCBpcyBjaGVja2VkLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJfb25lX3JlcXVlc3QsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9DQUxMX05FWFRfSEFORExFUl9PTkVfUkVRVUVTVAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyX29uZV9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmN1cnJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCkBAIC01NjIsOCArNjcwLDE1IEBACiAgICAgcmVxdWVzdHMtPm5leHQgPSByZXF1ZXN0OwogICAgIHJldHVybiByZXQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBTExfTkVYVF9IQU5ETEVSX09ORV9SRVFVRVNUICovCiAKLS8qKiBmcmVlcyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGhhbmRsZXIgKi8KKy8qKiBEZWFsbG9jYXRlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaGFuZGxlci4KKyAqICBUaGUgaGFuZGxlciBpcyByZW1vdmVkIGZyb20gY2hhaW4gYW5kIHRoZW4gZnJlZWQuCisgKiAgQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgaGFuZGxlciBwb2ludGVyIGlzIGludmFsaWQKKyAqICBhbmQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgorICoKKyAqICBAcGFyYW0gaGFuZGxlciBpcyB0aGUgTUlCIEhhbmRsZXIgdG8gYmUgZnJlZWQKKyAqLwogdm9pZAogbmV0c25tcF9oYW5kbGVyX2ZyZWUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKIHsKQEAgLTU4MywzOSArNjk4LDY2IEBACiAgICAgfQogfQogCi0vKiogZHVwbGljYXRlcyBhIGhhbmRsZXIgYW5kIGFsbCBzdWJzZXF1ZW50IGhhbmRsZXJzCi0gKiBzZWUgYWxzbyBfY2xvbmVfaGFuZGxlcgorLyoqIER1cGxpY2F0ZXMgYSBNSUIgaGFuZGxlciBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMuCisgKiAgQ3JlYXRlcyBhIGNvcHkgb2YgYWxsIGRhdGEgaW4gZ2l2ZW4gaGFuZGxlcnMgY2hhaW4uCisgKgorICogIEBwYXJhbSBoYW5kbGVyIGlzIHRoZSBNSUIgSGFuZGxlciB0byBiZSBkdXBsaWNhdGVkCisgKgorICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNvbXBsZXRlIGNvcHksCisgKiAgICAgICAgIG9yIE5VTEwgaWYgYW55IHByb2JsZW0gb2NjdXJlZC4KKyAqCisgKiBAc2VlIF9jbG9uZV9oYW5kbGVyKCkKICAqLwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2hhbmRsZXJfZHVwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpCiB7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaCA9IE5VTEw7CiAKLSAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWhhbmRsZXIpCisgICAgICAgIGdvdG8gZXJyOwogCiAgICAgaCA9IF9jbG9uZV9oYW5kbGVyKGhhbmRsZXIpOworICAgIGlmICghaCkKKyAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAoaCAhPSBOVUxMKSB7CisgICAgLyoKKyAgICAgKiBQcm92aWRpbmcgYSBjbG9uZSBmdW5jdGlvbiB3aXRob3V0IGEgZnJlZSBmdW5jdGlvbiBpcyBhc2tpbmcgZm9yCisgICAgICogbWVtb3J5IGxlYWtzLCBhbmQgcHJvdmlkaW5nIGEgZnJlZSBmdW5jdGlvbiB3aXRob3V0IGNsb25lIGZ1bmN0aW9uCisgICAgICogaXMgYXNraW5nIGZvciBtZW1vcnkgY29ycnVwdGlvbi4gSGVuY2UgdGhlIGxvZyBzdGF0ZW1lbnQgYmVsb3cuCisgICAgICovCisgICAgaWYgKCEhaGFuZGxlci0+ZGF0YV9jbG9uZSAhPSAhIWhhbmRsZXItPmRhdGFfZnJlZSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRhdGFfY2xvbmUgLyBkYXRhX2ZyZWUgaW5jb25zaXN0ZW50ICglcylcbiIsCisgICAgICAgICAgICAgICAgIGhhbmRsZXItPmhhbmRsZXJfbmFtZSk7CisgICAgaWYgKGhhbmRsZXItPm15dm9pZCAmJiBoYW5kbGVyLT5kYXRhX2Nsb25lKSB7CisgICAgICAgIGgtPm15dm9pZCA9IGhhbmRsZXItPmRhdGFfY2xvbmUoaGFuZGxlci0+bXl2b2lkKTsKKyAgICAgICAgaWYgKCFoLT5teXZvaWQpCisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICB9IGVsc2UKICAgICAgICAgaC0+bXl2b2lkID0gaGFuZGxlci0+bXl2b2lkOwotICAgICAgICBoLT5kYXRhX2ZyZWUgPSBoYW5kbGVyLT5kYXRhX2ZyZWU7CisgICAgaC0+ZGF0YV9jbG9uZSA9IGhhbmRsZXItPmRhdGFfY2xvbmU7CisgICAgaC0+ZGF0YV9mcmVlID0gaGFuZGxlci0+ZGF0YV9mcmVlOwogCi0gICAgICAgIGlmIChoYW5kbGVyLT5uZXh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGgtPm5leHQgPSBuZXRzbm1wX2hhbmRsZXJfZHVwKGhhbmRsZXItPm5leHQpOwotICAgICAgICAgICAgaWYgKGgtPm5leHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGgpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaC0+bmV4dC0+cHJldiA9IGg7Ci0gICAgICAgIH0KLSAgICAgICAgaC0+cHJldiA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBoOworICAgIGlmIChoYW5kbGVyLT5uZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgaC0+bmV4dCA9IG5ldHNubXBfaGFuZGxlcl9kdXAoaGFuZGxlci0+bmV4dCk7CisgICAgICAgIGlmICghaC0+bmV4dCkKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICBoLT5uZXh0LT5wcmV2ID0gaDsKICAgICB9CisgICAgaC0+cHJldiA9IE5VTEw7CisgICAgcmV0dXJuIGg7CisKK2VycjoKKyAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgKi8KKy8qKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QuCisgKiAgVGhlIHJlZ2lzdHJhdGlvbiBvYmplY3QgYW5kIGFsbCBNSUIgSGFuZGxlcnMgaW4gdGhlIGNoYWluIGFyZQorICogIGZyZWVkLiBXaGVuIHRoZSBmdW5jdGlvbiBlbmRzLCBnaXZlbiBwb2ludGVyIGlzIG5vIGxvbmdlciB2YWxpZAorICogIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKgorICogIEBwYXJhbSByZWdpbmZvIGlzIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgdG8gYmUgZnJlZWQKKyAqLwogdm9pZAogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC02MjksNyArNzcxLDE2IEBACiAgICAgfQogfQogCi0vKiogZHVwbGljYXRlcyB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0ICovCisvKiogRHVwbGljYXRlcyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgYW5kIGFsbCBzdWJzZXF1ZW50IGhhbmRsZXJzLgorICogIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgYW5kIGFsbCBpdHMgZGF0YS4KKyAqCisgKiAgQHBhcmFtIHJlZ2luZm8gaXMgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCB0byBiZSBkdXBsaWNhdGVkCisgKgorICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNvbXBsZXRlIGNvcHksCisgKiAgICAgICAgIG9yIE5VTEwgaWYgYW55IHByb2JsZW0gb2NjdXJlZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfaGFuZGxlcl9kdXAoKQorICovCiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICoKIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZHVwKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC02NjksOCArODIwLDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZWdpbmZvLT5yb290b2lkICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHItPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChyZWdpbmZvLT5yb290b2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgci0+cm9vdG9pZCA9CisgICAgICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQocmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pOwogICAgICAgICAgICAgaWYgKHItPnJvb3RvaWQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY4OCw5ICs4MzksMTYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIGNyZWF0ZXMgYSBjYWNoZSBvZiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgc2F2ZWQgZm9yIGZ1dHVyZQotICAgcmVmZXJlbmNlLiAgVXNlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpIGxhdGVyIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsCi0gICB2YWxpZCBiZWZvcmUgcmVmZXJlbmNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4gKi8KKy8qKiBDcmVhdGVzIGEgY2FjaGUgb2YgaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHNhdmVkIGZvciBmdXR1cmUgcmVmZXJlbmNlLgorICogIFRoZSBjYWNoZSBpcyBmaWxsZWQgd2l0aCBwb2ludGVycyBmcm9tIHBhcmFtZXRlcnMuIE5vdGUgdGhhdAorICogIHRoZSBpbnB1dCBzdHJ1Y3R1cmVzIGFyZSBub3QgZHVwbGljYXRlZCwgYnV0IHB1dCBkaXJlY3RseSBpbnRvCisgKiAgdGhlIG5ldyBjYWNoZSBzdHJ1Y3QuCisgKiAgVXNlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpIGxhdGVyIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsCisgKiAgdmFsaWQgYmVmb3JlIHJlZmVyZW5jaW5nIGl0IGluIHRoZSBmdXR1cmUuCisgKgorICogQHNlZSBuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGUoKQorICogQHNlZSBuZXRzbm1wX2ZyZWVfZGVsZWdhdGVkX2NhY2hlKCkKKyAqLwogTkVUU05NUF9JTkxJTkUgbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGUgKgogbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTcxMiw5ICs4NzAsMTcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi0vKiogY2hlY2sncyBhIGdpdmVuIGNhY2hlIGFuZCByZXR1cm5zIGl0IGlmIGl0IGlzIHN0aWxsIHZhbGlkIChpZSwgdGhlCi0gICBhZ2VudCBzdGlsbCBjb25zaWRlcnMgaXQgdG8gYmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdC4gIFJldHVybnMKLSAgIE5VTEwgaWYgaXQncyBubyBsb25nZXIgdmFsaWQuICovCisvKiogQ2hlY2sgaWYgYSBnaXZlbiBkZWxlZ2F0ZWQgY2FjaGUgaXMgc3RpbGwgdmFsaWQuCisgKiAgVGhlIGNhY2hlIGlzIHZhbGlkIGlmIGl0J3MgYSBwYXJ0IG9mIHRyYW5zYWN0aW9uCisgKiAgKGllLCB0aGUgYWdlbnQgc3RpbGwgY29uc2lkZXJzIGl0IHRvIGJlIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QpLgorICoKKyAqICBAcGFyYW0gZGNhY2hlIGlzIHRoZSBkZWxlZ2F0ZWQgY2FjaGUgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIHRoZSBjYWNoZSBwb2ludGVyIGlmIGl0IGlzIHN0aWxsIHZhbGlkLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUoKQorICovCiBORVRTTk1QX0lOTElORSBuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZSAqCiBuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGUobmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGUgKmRjYWNoZSkKIHsKQEAgLTcyOCw3ICs4OTQsMTYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIGZyZWVzIGEgY2FjaGUgb25jZSB5b3UncmUgZmluaXNoZWQgdXNpbmcgaXQgKi8KKy8qKiBGcmVlIGEgY2FjaGUgb25jZSBpdCdzIG5vIGxvbmdlciB1c2VkLgorICogIERlbGV0ZXMgdGhlIGRhdGEgYWxsb2NhdGVkIGJ5IG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSgpLgorICogIFN0cnVjdHVyZXMgd2hpY2ggd2VyZSBub3QgYWxsb2NhdGVkIGJ5IG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSgpCisgKiAgYXJlIG5vdCBmcmVlZCAocG9pbnRlcnMgYXJlIGRyb3BwZWQpLgorICoKKyAqICBAcGFyYW0gZGNhY2hlIGlzIHRoZSBkZWxlZ2F0ZWQgY2FjaGUgdG8gYmUgZnJlZWQuCisgKgorICogQHNlZSBuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGUoKQorICogQHNlZSBuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGUoKQorICovCiBORVRTTk1QX0lOTElORSB2b2lkCiBuZXRzbm1wX2ZyZWVfZGVsZWdhdGVkX2NhY2hlKG5ldHNubXBfZGVsZWdhdGVkX2NhY2hlICpkY2FjaGUpCiB7CkBAIC03NDIsNyArOTE3LDE0IEBACiB9CiAKIAotLyoqIG1hcmtzIGEgbGlzdCBvZiByZXF1ZXN0cyBhcyBkZWxlZ2F0ZWQgKG9yIG5vdCBpZiBpc2RlbGVnYWRlZCA9IDApICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFORExFUl9NQVJLX1JFUVVFU1RTX0FTX0RFTEVHQVRFRAorLyoqIFNldHMgYSBsaXN0IG9mIHJlcXVlc3RzIGFzIGRlbGVnYXRlZCBvciBub3QgZGVsZWdhdGVkLgorICogIFN3ZWVwcyB0aHJvdWdoIGdpdmVuIGNoYWluIG9mIHJlcXVlc3RzIGFuZCBzZXRzICdkZWxlZ2F0ZWQnCisgKiAgZmxhZyBhY2NvcmRpbmdseSB0byB0aGUgaXNkZWxlZ2FkZWQgcGFyYW1ldGVyLgorICoKKyAqICBAcGFyYW0gcmVxdWVzdHMgUmVxdWVzdCBsaXN0LgorICogIEBwYXJhbSBpc2RlbGVnYXRlZCBOZXcgdmFsdWUgb2YgdGhlICdkZWxlZ2F0ZWQnIGZsYWcuCisgKi8KIHZvaWQKIG5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzZGVsZWdhdGVkKQpAQCAtNzUyLDE2ICs5MzQsMTggQEAKICAgICAgICAgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dDsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQU5ETEVSX01BUktfUkVRVUVTVFNfQVNfREVMRUdBVEVEICovCiAKLS8qKiBhZGQgZGF0YSB0byBhIHJlcXVlc3QgdGhhdCBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIGJ5IHN1Ym1vZHVsZXMKKy8qKiBBZGRzIGRhdGEgZnJvbSBub2RlIGxpc3QgdG8gdGhlIHJlcXVlc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICogIERhdGEgaW4gdGhlIHJlcXVlc3QgY2FuIGJlIGxhdGVyIGV4dHJhY3RlZCBhbmQgdXNlZCBieSBzdWJtb2R1bGVzLgogICoKLSAqIEBwYXJhbSByZXF1ZXN0IHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSByZXF1ZXN0IERlc3RpbmF0aW9uIHJlcXVlc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlLgogICoKLSAqIEBwYXJhbSBub2RlIHRoaXMgaXMgdGhlIGRhdGEgdG8gYmUgYWRkZWQgdG8gdGhlIGxpbmtlZCBsaXN0Ci0gKiAgICAgICAgICAgICByZXF1ZXN0LT5wYXJlbnRfZGF0YQorICogQHBhcmFtIG5vZGUgVGhlIGRhdGEgdG8gYmUgYWRkZWQgdG8gdGhlIGxpbmtlZCBsaXN0CisgKiAgICAgICAgICAgICByZXF1ZXN0LT5wYXJlbnRfZGF0YS4KICAqCi0gKiBAcmV0dXJuIHZvaWQKLSAqCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKCkKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEoKQogICovCiBORVRTTk1QX0lOTElORSB2b2lkCiBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKQEAgLTc3NSw3ICs5NTksNyBAQAogICAgIH0KIH0KIAotLyoqIHJlbW92ZSBkYXRhIGZyb20gYSByZXF1ZXN0CisvKiogUmVtb3ZlcyBhbGwgZGF0YSBmcm9tIGEgcmVxdWVzdC4KICAqCiAgKiBAcGFyYW0gcmVxdWVzdCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlCiAgKgpAQCAtNzgzLDYgKzk2Nyw4IEBACiAgKgogICogQHJldHVybiAwIG9uIHN1Y2Nlc3NmdWwgZmluZC1hbmQtZGVsZXRlLCAxIG90aGVyd2lzZS4KICAqCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKCkKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEoKQogICovCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtNzk0LDE2ICs5ODAsMjAgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZyZXF1ZXN0LT5wYXJlbnRfZGF0YSwgbmFtZSk7CiB9CiAKLS8qKiBleHRyYWN0IGRhdGEgZnJvbSBhIHJlcXVlc3QgdGhhdCB3YXMgYWRkZWQgcHJldmlvdXNseSBieSBhIHBhcmVudCBtb2R1bGUKKy8qKiBFeHRyYWN0cyBkYXRhIGZyb20gYSByZXF1ZXN0LgorICogIFJldHJpZXZlcyBkYXRhIHRoYXQgd2FzIHByZXZpb3VzbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QsCisgKiAgdXN1YWxseSBieSBhIHBhcmVudCBtb2R1bGUuCiAgKgotICogQHBhcmFtIHJlcXVlc3QgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIGZ1bmN0aW9uCisgKiBAcGFyYW0gcmVxdWVzdCBTb3VyY2UgcmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCiAgKgotICogQHBhcmFtIG5hbWUgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5uYW1lIHZhbHVlLAotICogICAgICAgICAgICAgaWYgYSBtYXRjaCBpcyBmb3VuZCByZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSBpcyByZXR1cm5lZAorICogQHBhcmFtIG5hbWUgVXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5uYW1lIHZhbHVlOworICogICAgICAgICAgICAgaWYgYSBtYXRjaCBpcyBmb3VuZCwgcmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEgaXMgcmV0dXJuZWQuCiAgKgotICogQHJldHVybiBhIHZvaWQgcG9pbnRlcihyZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSksIG90aGVyd2lzZSBOVUxMIGlzCi0gKiAgICAgICAgIHJldHVybmVkIGlmIHJlcXVlc3QgaXMgTlVMTCBvciByZXF1ZXN0LT5wYXJlbnRfZGF0YSBpcyBOVUxMIG9yCi0gKiAgICAgICAgIHJlcXVlc3QtPnBhcmVudF9kYXRhIG9iamVjdCBpcyBub3QgZm91bmQuCisgKiBAcmV0dXJuIEdpdmVzIGEgdm9pZCBwb2ludGVyKHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhKTsgTlVMTCBpcworICogICAgICAgICByZXR1cm5lZCBpZiBzb3VyY2UgZGF0YSBpcyBOVUxMIG9yIHRoZSBvYmplY3QgaXMgbm90IGZvdW5kLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YSgpCiAgKi8KIHZvaWQgICAgKgogbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCkBAIC04MTQsNyArMTAwNCwxNSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSByZXF1ZXN0ICovCisvKiogRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSByZXF1ZXN0LgorICogIERlbGV0ZXMgdGhlIGRhdGEgaW4gZ2l2ZW4gcmVxdWVzdCBvbmx5LiBPdGhlciBjaGFpbiBpdGVtcworICogIGFyZSB1bmFmZmVjdGVkLgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhKCkKKyAqLwogTkVUU05NUF9JTkxJTkUgdm9pZAogbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXQobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCiB7CkBAIC04MjIsNyArMTAyMCwxNCBAQAogICAgICAgICBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhKHJlcXVlc3QtPnBhcmVudF9kYXRhKTsKIH0KIAotLyoqIEZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgYnVuY2ggb2YgcmVxdWVzdHMgKGFsbCBkYXRhIGluIHRoZSBjaGFpbikgKi8KKy8qKiBGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIGJ1bmNoIG9mIHJlcXVlc3RzLgorICogIERlbGV0ZXMgYWxsIGRhdGEgaW4gdGhlIGNoYWluIGluc2lkZSByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldCgpCisgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0cyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKQEAgLTgzMiw3ICsxMDM3LDE3IEBACiAgICAgfQogfQogCi0vKiogUmV0dXJucyBhIGhhbmRsZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lICovCisvKiogUmV0dXJucyBhIE1JQiBoYW5kbGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4KKyAqCisgKiBAcGFyYW0gcmVnaW5mbyBIYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIGNoYWluLgorICoKKyAqIEBwYXJhbSBuYW1lIFRhcmdldCBNSUIgSGFuZGxlciBuYW1lIHN0cmluZy4gVGhlIG5hbWUgaXMgY2FzZQorICogICAgICAgIHNlbnNpdGl2ZS4KKyAqCisgKiBAcmV0dXJuIFRoZSBNSUIgSGFuZGxlciBpcyByZXR1cm5lZCwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKi8KIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9maW5kX2hhbmRsZXJfYnlfbmFtZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtODQ4LDEwICsxMDYzLDIyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qKiBSZXR1cm5zIGEgaGFuZGxlcidzIHZvaWQgKiBwb2ludGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4KLSBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmFsIHB1YmxpYyBhcyB0aGUgdm9pZCAqCi0gZGF0YSBtYXkgY2hhbmdlIGFzIGEgaGFuZGxlciBldm9sdmVzLiAgSGFuZGxlcnMgc2hvdWxkIHJlYWxseQotIGFkdmVydGlzZSBzb21lIGZ1bmN0aW9uIGZvciB5b3UgdG8gdXNlIGluc3RlYWQuICovCisvKiogUmV0dXJucyBhIGhhbmRsZXIncyB2b2lkIHBvaW50ZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLgorICoKKyAqIEB3YXJuaW5nIFRoZSB2b2lkIHBvaW50ZXIgZGF0YSBtYXkgY2hhbmdlIGFzIGEgaGFuZGxlciBldm9sdmVzLgorICogICAgICAgIEhhbmRsZXJzIHNob3VsZCByZWFsbHkgYWR2ZXJ0aXNlIHNvbWUgZnVuY3Rpb24gZm9yIHlvdQorICogICAgICAgIHRvIHVzZSBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSByZWdpbmZvIEhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgY2hhaW4uCisgKgorICogQHBhcmFtIG5hbWUgVGFyZ2V0IE1JQiBIYW5kbGVyIG5hbWUgc3RyaW5nLiBUaGUgbmFtZSBpcyBjYXNlCisgKiAgICAgICAgc2Vuc2l0aXZlLgorICoKKyAqIEByZXR1cm4gVGhlIE1JQiBIYW5kbGVyJ3Mgdm9pZCAqIHBvaW50ZXIgaXMgcmV0dXJuZWQsCisgKiAgICAgICAgb3IgTlVMTCBpZiB0aGUgaGFuZGxlciBpcyBub3QgZm91bmQuCisgKgorICogQHNlZSBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9ieV9uYW1lKCkKKyAqLwogdm9pZCAgICAgICAgICAgKgogbmV0c25tcF9maW5kX2hhbmRsZXJfZGF0YV9ieV9uYW1lKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTg2Miw4ICsxMDg5LDEyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qKiBjbG9uZXMgYSBtaWIgaGFuZGxlciAobmFtZSwgZmxhZ3MgYW5kIGFjY2VzcyBtZXRob2RzIG9ubHk7IG5vdCBteXZvaWQpCi0gKiBzZWUgYWxzbyBuZXRzbm1wX2hhbmRsZXJfZHVwCisvKiogQHByaXZhdGUKKyAqICBDbG9uZXMgYSBNSUIgSGFuZGxlciB3aXRoIGl0cyBiYXNpYyBwcm9wZXJ0aWVzLgorICogIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBnaXZlbiBNSUIgSGFuZGxlci4gQ29waWVzIG5hbWUsIGZsYWdzIGFuZAorICogIGFjY2VzcyBtZXRob2RzIG9ubHk7IG5vdCBteXZvaWQuCisgKgorICogIEBzZWUgbmV0c25tcF9oYW5kbGVyX2R1cCgpCiAgKi8KIHN0YXRpYyBuZXRzbm1wX21pYl9oYW5kbGVyICoKIF9jbG9uZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKml0KQpAQCAtODg4LDcgKzExMTksMTUgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZSgobmV0c25tcF9taWJfaGFuZGxlciAqKWhhbmRsZXIpOwogfQogCi0vKiogcmVnaXN0ZXJzIGEgZ2l2ZW4gaGFuZGxlciBieSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGVhc2lseSBsYXRlci4KKy8qKiBSZWdpc3RlcnMgYSBnaXZlbiBoYW5kbGVyIGJ5IG5hbWUsIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGVhc2lseSBsYXRlci4KKyAqICBQb2ludGVyIHRvIHRoZSBoYW5kbGVyIGlzIHB1dCBpbnRvIGEgbGlzdCB3aGVyZSBpdCBjYW4gYmUgZWFzaWx5IGxvY2F0ZWQKKyAqICBhdCBhbnkgdGltZS4KKyAqCisgKiBAcGFyYW0gbmFtZSBOYW1lIHN0cmluZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGhhbmRsZXIuCisgKgorICogQHBhcmFtIGhhbmRsZXIgUG9pbnRlciB0aGUgTUlCIEhhbmRsZXIuCisgKgorICogQHNlZSBuZXRzbm1wX2NsZWFyX2hhbmRsZXJfbGlzdCgpCiAgKi8KIHZvaWQKIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsCkBAIC05MDAsNyArMTEzOSwxMyBAQAogICAgIERFQlVHTVNHVEwoKCJoYW5kbGVyX3JlZ2lzdHJ5IiwgInJlZ2lzdGVyaW5nIGhlbHBlciAlc1xuIiwgbmFtZSkpOwogfQogCi0vKiogY2xlYXJzIHRoZSBlbnRpcmUgaGFuZGxlci1yZWdpc3RyYXRpb24gbGlzdAorLyoqIENsZWFycyB0aGUgZW50aXJlIE1JQiBIYW5kbGVycyByZWdpc3RyYXRpb24gbGlzdC4KKyAqICBNSUIgSGFuZGxlcnMgcmVnaXN0cmF0aW9uIGxpc3QgaXMgdXNlZCB0byBhY2Nlc3MgYW55IE1JQiBIYW5kbGVyIGJ5CisgKiAgaXRzIG5hbWUuIFRoZSBmdW5jdGlvbiBmcmVlcyB0aGUgbGlzdCBtZW1vcnkgYW5kIHNldHMgcG9pbnRlciB0byBOVUxMLgorICogIEluc3RlYWQgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LCB1c2Ugc2h1dGRvd25fYWdlbnQoKS4KKyAqCisgKiAgQHNlZSBzaHV0ZG93bl9hZ2VudCgpCisgKiAgQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZSgpCiAgKi8KIHZvaWQKIG5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0KHZvaWQpCkBAIC05MTAsOCArMTE1NSw4IEBACiAgICAgaGFuZGxlcl9yZWcgPSBOVUxMOwogfQogCi0vKiogQGludGVybmFsCi0gKiAgaW5qZWN0cyBhIGhhbmRsZXIgaW50byBhIHN1YnRyZWUsIHBlZXJzIGFuZCBjaGlsZHJlbiB3aGVuIGEgZ2l2ZW4KKy8qKiBAcHJpdmF0ZQorICogIEluamVjdHMgYSBoYW5kbGVyIGludG8gYSBzdWJ0cmVlLCBwZWVycyBhbmQgY2hpbGRyZW4gd2hlbiBhIGdpdmVuCiAgKiAgc3VidHJlZXMgbmFtZSBtYXRjaGVzIGEgcGFzc2VkIGluIG5hbWUuCiAgKi8KIHZvaWQKQEAgLTk1OCw4ICsxMjAzLDggQEAKIH0KIAogc3RhdGljIGludCAgICAgIGRvbmVpdCA9IDA7Ci0vKiogQGludGVybmFsCi0gKiAgcGFyc2VzIHRoZSAiaW5qZWN0SGFuZGxlciIgdG9rZW4gbGluZS4KKy8qKiBAcHJpdmF0ZQorICogIFBhcnNlcyB0aGUgImluamVjdEhhbmRsZXIiIHRva2VuIGxpbmUuCiAgKi8KIHZvaWQKIHBhcnNlX2luamVjdEhhbmRsZXJfY29uZihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKQEAgLTk3NSw5ICsxMjIwLDEwIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGhhbmRsZXJfdG9faW5zZXJ0LCBzaXplb2YoaGFuZGxlcl90b19pbnNlcnQpKTsKLSAgICBoYW5kbGVyID0gbmV0c25tcF9nZXRfbGlzdF9kYXRhKGhhbmRsZXJfcmVnLCBoYW5kbGVyX3RvX2luc2VydCk7CisgICAgaGFuZGxlciA9IChuZXRzbm1wX21pYl9oYW5kbGVyKiluZXRzbm1wX2dldF9saXN0X2RhdGEoaGFuZGxlcl9yZWcsIGhhbmRsZXJfdG9faW5zZXJ0KTsKICAgICBpZiAoIWhhbmRsZXIpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibm8gc3VjaCBcIiVzXCIgaGFuZGxlciByZWdpc3RlcmVkLiIpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJubyBcIiVzXCIgaGFuZGxlciByZWdpc3RlcmVkLiIsCisJCQkgICAgIGhhbmRsZXJfdG9faW5zZXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTk1LDggKzEyNDEsOCBAQAogICAgIH0KIH0KIAotLyoqIEBpbnRlcm5hbAotICogIGNhbGxiYWNrIHRvIGVuc3VyZSBpbmplY3RIYW5kbGVyIHBhcnNlciBkb2Vzbid0IGRvIHRoaW5ncyB0d2ljZQorLyoqIEBwcml2YXRlCisgKiAgQ2FsbGJhY2sgdG8gZW5zdXJlIGluamVjdEhhbmRsZXIgcGFyc2VyIGRvZXNuJ3QgZG8gdGhpbmdzIHR3aWNlLgogICogIEB0b2RvIHJlcGxhY2UgdGhpcyB3aXRoIGEgbWV0aG9kIHRvIGNoZWNrIHRoZSBoYW5kbGVyIGNoYWluIGluc3RlYWQuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTEwMDcsOCArMTI1MywxMSBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiogQGludGVybmFsCisvKiogQHByaXZhdGUKICAqICBSZWdpc3RlcnMgdGhlIGluamVjdEhhbmRsZSBwYXJzZXIgdG9rZW4uCisgKiAgVXNlZCBpbiBpbml0X2FnZW50X3JlYWRfY29uZmlnKCkuCisgKgorICogIEBzZWUgaW5pdF9hZ2VudF9yZWFkX2NvbmZpZygpCiAgKi8KIHZvaWQKIG5ldHNubXBfaW5pdF9oYW5kbGVyX2NvbmYodm9pZCkKQEAgLTEwMjMsNiArMTI3Miw3IEBACiAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImFnZW50X21vZGUiLCBzdHJkdXAoIkdFVCIpLCBNT0RFX0dFVCk7CiAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImFnZW50X21vZGUiLCBzdHJkdXAoIkdFVE5FWFQiKSwgTU9ERV9HRVRORVhUKTsKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiR0VUQlVMSyIpLCBNT0RFX0dFVEJVTEspOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiU0VUX0JFR0lOIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ERV9TRVRfQkVHSU4pOwogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJhZ2VudF9tb2RlIiwgc3RyZHVwKCJTRVRfUkVTRVJWRTEiKSwKQEAgLTEwNjMsNiArMTMxMyw3IEBACiAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImJhYnlzdGVwX21vZGUiLCBzdHJkdXAoInBvc3RfcmVxdWVzdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUKTsKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYmFieXN0ZXBfbW9kZSIsIHN0cmR1cCgib3JpZ2luYWwiKSwgMHhmZmZmKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogeHh4LXJrczogaG1tbS4uIHdpbGwgdGhpcyB3b3JrIGZvciBtb2RlcyB3aGljaCBhcmUgb3InZCB0b2dldGhlcj8KZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X2luZGV4LmMgYi9hZ2VudC9hZ2VudF9pbmRleC5jCmluZGV4IGVkOWJhMTQuLjAxMjkyMTcgMTAwNjQ0Ci0tLSBhL2FnZW50L2FnZW50X2luZGV4LmMKKysrIGIvYWdlbnQvYWdlbnRfaW5kZXguYwpAQCAtOCw2ICs4LDcgQEAKIAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xOCwxNSArMTksOCBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTQsNiArNDgsMTAgQEAKICNpbmNsdWRlICJhZ2VudHgvY2xpZW50LmgiCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X2luZGV4X2FsbCwgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVtb3ZlX2luZGV4LCBhZ2VudF9pbmRleF9hbGwpCisKICAgICAgICAgLyoKICAgICAgICAgICogSW5pdGlhbCBzdXBwb3J0IGZvciBpbmRleCBhbGxvY2F0aW9uCiAgICAgICAgICAqLwpAQCAtOTIsNyArOTAsMTEgQEAKICAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciAgICAgICAgICAgKnJ2ID0gc3RyZHVwKHJlcy0+dmFsLnN0cmluZyk7CisgICAgICAgIGNoYXIgKnJ2ID0gKGNoYXIgKiltYWxsb2MocmVzLT52YWxfbGVuICsgMSk7CisgICAgICAgIGlmIChydikgeworICAgICAgICAgICAgbWVtY3B5KHJ2LCByZXMtPnZhbC5zdHJpbmcsIHJlcy0+dmFsX2xlbik7CisgICAgICAgICAgICBydltyZXMtPnZhbF9sZW5dID0gMDsKKyAgICAgICAgfQogICAgICAgICBmcmVlKHJlcyk7CiAgICAgICAgIHJldHVybiBydjsKICAgICB9CkBAIC0xNjMsNyArMTY1LDcgQEAKIAogICAgIERFQlVHTVNHVEwoKCJyZWdpc3Rlcl9pbmRleCIsICJyZWdpc3RlciAiKSk7CiAgICAgREVCVUdNU0dWQVIoKCJyZWdpc3Rlcl9pbmRleCIsIHZhcmJpbmQpKTsKLSAgICBERUJVR01TRygoInJlZ2lzdGVyX2luZGV4IiwgImZvciBzZXNzaW9uICUwOHBcbiIsIHNzKSk7CisgICAgREVCVUdNU0coKCJyZWdpc3Rlcl9pbmRleCIsICJmb3Igc2Vzc2lvbiAlOHBcbiIsIHNzKSk7CiAKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKFRFU1RJTkcpCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCkBAIC0zMDEsMTIgKzMwMywxMiBAQAogICAgIGlmIChuZXdfaW5kZXggPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoMCA9PSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZuZXdfaW5kZXgtPnZhcmJpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+bmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dmFsLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnZhbF9sZW4pKSB7CisgICAgaWYgKE5VTEwgPT0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmbmV3X2luZGV4LT52YXJiaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT52YWxfbGVuKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBpZiAoc25tcF9jbG9uZV92YXIoIHZhcmJpbmQsIG5ld19pbmRleC0+dmFyYmluZCApICE9IDAgKSAKICAgICAgICAgICovCkBAIC00NTMsMTIgKzQ1NSwxNiBAQAogICAgICAgICAgKiBSZWxlYXNlIGFuIGFsbG9jYXRlZCBpbmRleCwKICAgICAgICAgICogICB0byBhbGxvdyBpdCB0byBiZSB1c2VkIGVsc2V3aGVyZQogICAgICAgICAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWxlYXNlX2luZGV4LG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTEVBU0VfSU5ERVgKIGludAogcmVsZWFzZV9pbmRleChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJiaW5kKQogewogICAgIHJldHVybiAodW5yZWdpc3Rlcl9pbmRleCh2YXJiaW5kLCBUUlVFLCBOVUxMKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUxFQVNFX0lOREVYICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRU1PVkVfSU5ERVgKICAgICAgICAgLyoKICAgICAgICAgICogQ29tcGxldGVseSByZW1vdmUgYW4gYWxsb2NhdGVkIGluZGV4LAogICAgICAgICAgKiAgIGR1ZSB0byBlcnJvcnMgaW4gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLgpAQCAtNDY4LDYgKzQ3NCw3IEBACiB7CiAgICAgcmV0dXJuICh1bnJlZ2lzdGVyX2luZGV4KHZhcmJpbmQsIEZBTFNFLCBzcykpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVNT1ZFX0lOREVYICovCiAKIHZvaWQKIHVucmVnaXN0ZXJfaW5kZXhfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKQEAgLTU5MSw2ICs1OTgsOCBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodW5yZWdpc3Rlcl9pbmRleGVzLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfSU5ERVhFUwogaW50CiB1bnJlZ2lzdGVyX3N0cmluZ19pbmRleChvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGNoYXIgKmNwKQogewpAQCAtNjMwLDYgKzYzOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2xlbiAqIHNpemVvZihvaWQpKTsKICAgICByZXR1cm4gKHVucmVnaXN0ZXJfaW5kZXgoJnZhcmJpbmQsIEZBTFNFLCBtYWluX3Nlc3Npb24pKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfSU5ERVhFUyAqLwogCiB2b2lkCiBkdW1wX2lkeF9yZWdpc3RyeSh2b2lkKQpAQCAtNjk1LDYgKzcwNSw4IEBACiAgICAgfQogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY291bnRfaW5kZXhlcywgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5VU0VECiB1bnNpZ25lZCBsb25nCiBjb3VudF9pbmRleGVzKG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgaW5jbHVkZV91bmFsbG9jYXRlZCkKIHsKQEAgLTcxNCw3ICs3MjYsNyBAQAogICAgIH0KICAgICByZXR1cm4gbjsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5VU0VEICovCiAKICNpZmRlZiBURVNUSU5HCiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyYmluZDsKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmMgYi9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jCmluZGV4IDUzMzA0MmEuLmY5ZWYxYWYgMTAwNjQ0Ci0tLSBhL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmMKKysrIGIvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KQEAgLTIyLDExICsyMyw3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjEsOCArNTgsNiBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCiAjZW5kaWYKLSNlbGlmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU1RSRUFNX0gKICMgICBpZmRlZiBzeXN2NVVuaXhXYXJlNwpAQCAtMTEyLDE3ICsxMDcsMTggQEAKICNpbmNsdWRlICJhZ2VudF9tb2R1bGVfaW5jbHVkZXMuaCIKICNpbmNsdWRlICJtaWJfbW9kdWxlX2luY2x1ZGVzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9yZWFkX2NvbmZpZ19hbGwsIGxpYm5ldHNubXBhZ2VudCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsIGFnZW50X3JlYWRfY29uZmlnX2FsbCkKKwogI2lmZGVmIEhBVkVfVU5JU1REX0gKIHZvaWQKIHNubXBkX3NldF9hZ2VudF91c2VyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotI2lmIGRlZmluZWQoSEFWRV9HRVRQV05BTSkgJiYgZGVmaW5lZChIQVZFX1BXRF9IKQotICAgIHN0cnVjdCBwYXNzd2QgICppbmZvOwotI2VuZGlmCi0KICAgICBpZiAoY3B0clswXSA9PSAnIycpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgKmVjcDsKICAgICAgICAgaW50ICAgICAgICAgICAgIHVpZDsKKwogICAgICAgICB1aWQgPSBzdHJ0b3VsKGNwdHIgKyAxLCAmZWNwLCAxMCk7CiAgICAgICAgIGlmICgqZWNwICE9IDApIHsKICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkJhZCBudW1iZXIiKTsKQEAgLTEzMCw0NyArMTI2LDUxIEBACiAJICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgdWlkKTsKIAl9Ci0gICAgfQogI2lmIGRlZmluZWQoSEFWRV9HRVRQV05BTSkgJiYgZGVmaW5lZChIQVZFX1BXRF9IKQotICAgIGVsc2UgaWYgKChpbmZvID0gZ2V0cHduYW0oY3B0cikpICE9IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAotCQkJICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIGluZm8tPnB3X3VpZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiVXNlciBub3QgZm91bmQgaW4gcGFzc3dkIGRhdGFiYXNlIik7Ci0gICAgfQotICAgIGVuZHB3ZW50KCk7CisgICAgICAgIHN0cnVjdCBwYXNzd2QgICppbmZvOworCisgICAgICAgIGluZm8gPSBnZXRwd25hbShjcHRyKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIGluZm8tPnB3X3VpZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVzZXIgbm90IGZvdW5kIGluIHBhc3N3ZCBkYXRhYmFzZSIpOworICAgICAgICBlbmRwd2VudCgpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkCiBzbm1wZF9zZXRfYWdlbnRfZ3JvdXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVEdSTkFNKSAmJiBkZWZpbmVkKEhBVkVfR1JQX0gpCi0gICAgc3RydWN0IGdyb3VwICAgKmluZm87Ci0jZW5kaWYKLQogICAgIGlmIChjcHRyWzBdID09ICcjJykgewogICAgICAgICBjaGFyICAgICAgICAgICAqZWNwOwogICAgICAgICBpbnQgICAgICAgICAgICAgZ2lkID0gc3RydG91bChjcHRyICsgMSwgJmVjcCwgMTApOworCiAgICAgICAgIGlmICgqZWNwICE9IDApIHsKICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkJhZCBudW1iZXIiKTsKIAl9IGVsc2UgewogICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRCwgZ2lkKTsKIAl9Ci0gICAgfQogI2lmIGRlZmluZWQoSEFWRV9HRVRHUk5BTSkgJiYgZGVmaW5lZChIQVZFX0dSUF9IKQotICAgIGVsc2UgaWYgKChpbmZvID0gZ2V0Z3JuYW0oY3B0cikpICE9IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAotCQkJICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBpbmZvLT5ncl9naWQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIkdyb3VwIG5vdCBmb3VuZCBpbiBncm91cCBkYXRhYmFzZSIpOwotICAgIH0KLSAgICBlbmRwd2VudCgpOworICAgICAgICBzdHJ1Y3QgZ3JvdXAgICAqaW5mbzsKKworICAgICAgICBpbmZvID0gZ2V0Z3JuYW0oY3B0cik7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRCwgaW5mby0+Z3JfZ2lkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiR3JvdXAgbm90IGZvdW5kIGluIGdyb3VwIGRhdGFiYXNlIik7CisgICAgICAgIGVuZGdyZW50KCk7CiAjZW5kaWYKKyAgICB9CiB9CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCiB2b2lkCiBzbm1wZF9zZXRfYWdlbnRfYWRkcmVzcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKQEAgLTE5Nyw2ICsxOTcsNyBAQAogICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCSAgTkVUU05NUF9EU19BR0VOVF9QT1JUUywgYnVmKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCiAKIHZvaWQKIGluaXRfYWdlbnRfcmVhZF9jb25maWcoY29uc3QgY2hhciAqYXBwKQpAQCAtMjQ1LDE1ICsyNDYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfZnJlZV90cmFwY29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbXVuaXR5LXN0cmluZyIpOwogI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgYXBwLCAidjF0cmFwYWRkcmVzcyIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfVFJBUF9BRERSKTsKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJhZ2VudHVzZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9zZXRfYWdlbnRfdXNlciwgTlVMTCwgInVzZXJpZCIpOwogICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiYWdlbnRncm91cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3NldF9hZ2VudF9ncm91cCwgTlVMTCwgImdyb3VwaWQiKTsKICNlbmRpZgorI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCiAgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJhZ2VudGFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9zZXRfYWdlbnRfYWRkcmVzcywgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVAgYmluZCBhZGRyZXNzIik7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLwogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCBhcHAsICJxdWl0IiwgCiAJCQkgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKIAkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX1FVSVRfSU1NRURJQVRFTFkpOwpAQCAtMjg0LDkgKzI5MCw2IEBACiAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUFJFX1VQREFURV9DT05GSUcsIE5VTEwpOwogICAgIGZyZWVfY29uZmlnKCk7Ci0jaWZkZWYgVVNJTkdfTUlCSUlfVkFDTV9DT05GX01PRFVMRQotICAgIHZhY21fc3RhbmRhcmRfdmlld3MoMCwwLE5VTEwsTlVMTCk7Ci0jZW5kaWYKICAgICByZWFkX2NvbmZpZ3MoKTsKIH0KIApAQCAtMzAyLDEwICszMDUsMjcgQEAKIH0KIAogdm9pZAorc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApCit7CisgICAgREVCVUdNU0dUTCgoInNubXBkX3JlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlciIsCisgICAgICAgICAgICAgICAgInJlZ2lzdGVyaW5nIC5jb25mIHRva2VuIGZvciBcIiVzXCJcbiIsIHRva2VuKSk7CisgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKHRva2VuLCAodm9pZCgqKShjb25zdCBjaGFyICosIGNoYXIgKikpcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlciwgaGVscCk7Cit9CisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TTk1QRF9VTlJFR0lTVEVSX0NPTkZJR19IQU5ETEVSCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcikKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TTk1QRF9VTlJFR0lTVEVSX0NPTkZJR19IQU5ETEVSICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QRF9VTlJFR0lTVEVSX0NPTkZJR19IQU5ETEVSCit2b2lkCiBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuKQogewogICAgIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKHRva2VuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIgKi8KIAogLyoKICAqIHRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBtaWItbW9kdWxlcyB0byBzdG9yZSBwZXJtZW5hbnQKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmMgYi9hZ2VudC9hZ2VudF9yZWdpc3RyeS5jCmluZGV4IGQwZDM1YjcuLjBkZDZjNDIgMTAwNjQ0Ci0tLSBhL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmMKKysrIGIvYWdlbnQvYWdlbnRfcmVnaXN0cnkuYwpAQCAtMTEsNyArMTEsOSBAQAogICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwotLyoqIEBkZWZncm91cCBhZ2VudF9yZWdpc3RyeSBNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBtaWJtb2R1bGUsIHNlc3Npb25zLCBldGMKKy8qKiBAZGVmZ3JvdXAgYWdlbnRfcmVnaXN0cnkgUmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCBtb2R1bGVzLCBzZXNzaW9ucywgZXRjCisgKiAgICAgTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIHRvZ2V0aGVyIHdpdGggcmVsYXRlZCBpbmZvcm1hdGlvbgorICogICAgIHJlZ2FyZGluZyBNSUIgbW9kdWxlcywgc2Vzc2lvbnMsIGV0YwogICogICBAaW5ncm91cCBhZ2VudAogICoKICAqIEB7CkBAIC0yMCw2ICsyMiw4IEBACiAjZGVmaW5lIElOX1NOTVBfVkFSU19DCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzAsMTUgKzM0LDggQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTUyLDYgKzQ5LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KIApAQCAtNjgsMTMgKzY2LDM5NSBAQAogI2luY2x1ZGUgImFnZW50eC9jbGllbnQuaCIKICNlbmRpZgogCi1zdGF0aWMgdm9pZCByZWdpc3Rlcl9taWJfZGV0YWNoX25vZGUobmV0c25tcF9zdWJ0cmVlICpzKTsKLU5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIGludmFsaWRhdGVfbG9va3VwX2NhY2hlKGNvbnN0IGNoYXIgKmNvbnRleHQpOwotdm9pZCBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZShpbnQgbmV3c2l6ZSk7Ci1pbnQgbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUodm9pZCk7CituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfcmVnaXN0cnlfYWxsLCBsaWJuZXRzbm1wYWdlbnQpCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bnJlZ2lzdGVyX21pYl90YWJsZV9yb3csIGFnZW50X3JlZ2lzdHJ5X2FsbCkKKworLyoqIEBkZWZncm91cCBhZ2VudF9sb29rdXBfY2FjaGUgTG9va3VwIGNhY2hlLCBzdG9yaW5nIHRoZSByZWdpc3RlcmVkIE9JRHMuCisgKiAgICAgTWFpbnRhaW4gdGhlIGNhY2hlIHVzZWQgZm9yIGxvY2F0aW5nIHN1Yi10cmVlcyBhbmQgT0lEcy4KKyAqICAgQGluZ3JvdXAgYWdlbnRfcmVnaXN0cnkKKyAqCisgKiBAeworICovCisKKy8qKiAgTG9va3VwIGNhY2hlIC0gZGVmYXVsdCBzaXplLiovCisjZGVmaW5lIFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFIDgKKy8qKiAgTG9va3VwIGNhY2hlIC0gbWF4IGFjY2VwdGFibGUgc2l6ZS4qLworI2RlZmluZSBTVUJUUkVFX01BWF9DQUNIRV9TSVpFICAgICAzMgoraW50IGxvb2t1cF9jYWNoZV9zaXplID0gMDsgLyplbmFibGVkIGxhdGVyIGFmdGVyIHJlZ2lzdHJhdGlvbnMgYXJlIGxvYWRlZCAqLworCit0eXBlZGVmIHN0cnVjdCBsb29rdXBfY2FjaGVfcyB7CisgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQ7CisgICBuZXRzbm1wX3N1YnRyZWUgKnByZXZpb3VzOworfSBsb29rdXBfY2FjaGU7CisKK3R5cGVkZWYgc3RydWN0IGxvb2t1cF9jYWNoZV9jb250ZXh0X3MgeworICAgY2hhciAqY29udGV4dDsKKyAgIHN0cnVjdCBsb29rdXBfY2FjaGVfY29udGV4dF9zICpuZXh0OworICAgaW50IHRoZWNhY2hlY291bnQ7CisgICBpbnQgY3VycmVudHBvczsKKyAgIGxvb2t1cF9jYWNoZSBjYWNoZVtTVUJUUkVFX01BWF9DQUNIRV9TSVpFXTsKK30gbG9va3VwX2NhY2hlX2NvbnRleHQ7CisKK3N0YXRpYyBsb29rdXBfY2FjaGVfY29udGV4dCAqdGhlY29udGV4dGNhY2hlID0gTlVMTDsKKworLyoqIFNldCB0aGUgbG9va3VwIGNhY2hlIHNpemUgZm9yIG9wdGltaXplZCBhZ2VudCByZWdpc3RyYXRpb24gcGVyZm9ybWFuY2UuCisgKiBOb3RlIHRoYXQgaXQgaXMgb25seSB1c2VkIGJ5IG1hc3RlciBhZ2VudCAtIHN1Yi1hZ2VudCBkb2Vzbid0IG5lZWQgdGhlIGNhY2hlLgorICogVGhlIHJvdWdoIGd1aWRlIGlzIHRoYXQgdGhlIGNhY2hlIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXhpbXVtCisgKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIG1hbmFnZXJzIHlvdSBleHBlY3QgdG8gdGFsayB0byB0aGUgYWdlbnQgKE0pIHRpbWVzIDgwJQorICogKG9yIHNvLCBoZSBzYXlzIHJhbmRvbWx5KSB0aGUgYXZlcmFnZSBudW1iZXIgKE4pIG9mIHZhcmJpbmRzIHlvdQorICogZXhwZWN0IHRvIHJlY2VpdmUgaW4gYSBnaXZlbiByZXF1ZXN0IGZvciBhIG1hbmFnZXIuICBpZSwgTSB0aW1lcyBOLgorICogQmlnZ2VyIGRvZXMgTk9UIG5lY2Vzc2FyaWx5IG1lYW4gYmV0dGVyLiAgQ2VydGFpbmx5IDE2IHNob3VsZCBiZSBhbgorICogdXBwZXIgbGltaXQuICAzMiBpcyB0aGUgaGFyZCBjb2RlZCBsaW1pdC4KKyAqCisgKiBAcGFyYW0gbmV3c2l6ZSBzZXQgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhIGNhY2hlIGZvciBhIGdpdmVuCisgKiBjb250ZXh0LiAgU2V0IHRvIDAgdG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIG9yIHRvIC0xIHRvIHNldAorICogdG8gdGhlIGRlZmF1bHQgY2FjaGUgc2l6ZSAoOCksIG9yIHRvIGEgbnVtYmVyIG9mIHlvdXIgY2hvc2luZy4gIFRoZQorICovCit2b2lkCituZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZShpbnQgbmV3c2l6ZSkgeworICAgIGlmIChuZXdzaXplIDwgMCkKKyAgICAgICAgbG9va3VwX2NhY2hlX3NpemUgPSBTVUJUUkVFX0RFRkFVTFRfQ0FDSEVfU0laRTsKKyAgICBlbHNlIGlmIChuZXdzaXplIDwgU1VCVFJFRV9NQVhfQ0FDSEVfU0laRSkKKyAgICAgICAgbG9va3VwX2NhY2hlX3NpemUgPSBuZXdzaXplOworICAgIGVsc2UKKyAgICAgICAgbG9va3VwX2NhY2hlX3NpemUgPSBTVUJUUkVFX01BWF9DQUNIRV9TSVpFOworfQorCisvKiogUmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb29rdXAgY2FjaGUgc2l6ZQorICogIFNob3VsZCBiZSBjYWxsZWQgZnJvbSBtYXN0ZXIgYWdlbnQgb25seSAtIHN1Yi1hZ2VudCBkb2Vzbid0IG5lZWQgdGhlIGNhY2hlLgorICoKKyAqICBAcmV0dXJuIHRoZSBjdXJyZW50IGxvb2t1cCBjYWNoZSBzaXplCisgKi8KK2ludAorbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUodm9pZCkgeworICAgIHJldHVybiBsb29rdXBfY2FjaGVfc2l6ZTsKK30KKworLyoqIFJldHVybnMgbG9va3VwIGNhY2hlIGVudHJ5IGZvciB0aGUgY29udGV4dCBvZiBnaXZlbiBuYW1lLgorICoKKyAqICBAcGFyYW0gY29udGV4dCBOYW1lIG9mIHRoZSBjb250ZXh0LiBOYW1lIGlzIGNhc2Ugc2Vuc2l0aXZlLgorICoKKyAqICBAcmV0dXJuIHRoZSBsb29rdXAgY2FjaGUgY29udGV4dAorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgbG9va3VwX2NhY2hlX2NvbnRleHQgKgorZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnN0IGNoYXIgKmNvbnRleHQpIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqcHRyOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9ICIiOworCisgICAgZm9yKHB0ciA9IHRoZWNvbnRleHRjYWNoZTsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKKyAgICAgICAgaWYgKHN0cmNtcChwdHItPmNvbnRleHQsIGNvbnRleHQpID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFwdHIpIHsKKyAgICAgICAgaWYgKG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHQpKSB7CisgICAgICAgICAgICBwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKGxvb2t1cF9jYWNoZV9jb250ZXh0KTsKKyAgICAgICAgICAgIHB0ci0+bmV4dCA9IHRoZWNvbnRleHRjYWNoZTsKKyAgICAgICAgICAgIHB0ci0+Y29udGV4dCA9IHN0cmR1cChjb250ZXh0KTsKKyAgICAgICAgICAgIHRoZWNvbnRleHRjYWNoZSA9IHB0cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwdHI7Cit9CisKKy8qKiBBZGRzIGFuIGVudHJ5IHRvIHRoZSBMb29rdXAgQ2FjaGUgdW5kZXIgc3BlY2lmaWVkIGNvbnRleHQgbmFtZS4KKyAqCisgKiAgQHBhcmFtIGNvbnRleHQgIE5hbWUgb2YgdGhlIGNvbnRleHQuIE5hbWUgaXMgY2FzZSBzZW5zaXRpdmUuCisgKgorICogIEBwYXJhbSBuZXh0ICAgICBOZXh0IHN1YnRyZWUgaXRlbS4KKyAqCisgKiAgQHBhcmFtIHByZXZpb3VzIFByZXZpb3VzIHN1YnRyZWUgaXRlbS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKK2xvb2t1cF9jYWNoZV9hZGQoY29uc3QgY2hhciAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0LCBuZXRzbm1wX3N1YnRyZWUgKnByZXZpb3VzKSB7CisgICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7CisKKyAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjcHRyLT50aGVjYWNoZWNvdW50IDwgbG9va3VwX2NhY2hlX3NpemUpCisgICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQrKzsKKworICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLm5leHQgPSBuZXh0OworICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLnByZXZpb3VzID0gcHJldmlvdXM7CisKKyAgICBpZiAoKytjcHRyLT5jdXJyZW50cG9zID49IGxvb2t1cF9jYWNoZV9zaXplKQorICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKK30KKworLyoqIEBwcml2YXRlCisgKiAgUmVwbGFjZXMgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnRlciBpbiBnaXZlbiBMb29rdXAgQ2FjaGUuCisgKgorICogIEBwYXJhbSBwdHIgICAgICBMb29rdXAgQ2FjaGUgcG9pbnRlci4KKyAqCisgKiAgQHBhcmFtIG5leHQgICAgIE5leHQgc3VidHJlZSBpdGVtLgorICoKKyAqICBAcGFyYW0gcHJldmlvdXMgUHJldmlvdXMgc3VidHJlZSBpdGVtLgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAorbG9va3VwX2NhY2hlX3JlcGxhY2UobG9va3VwX2NhY2hlICpwdHIsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQsIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXMpIHsKKworICAgIHB0ci0+bmV4dCA9IG5leHQ7CisgICAgcHRyLT5wcmV2aW91cyA9IHByZXZpb3VzOworfQorCisvKiogRmluZHMgYW4gZW50cnkgaW4gdGhlIExvb2t1cCBDYWNoZS4KKyAqCisgKiAgQHBhcmFtIGNvbnRleHQgIENhc2Ugc2Vuc2l0aXZlIG5hbWUgb2YgdGhlIGNvbnRleHQuCisgKgorICogIEBwYXJhbSBuYW1lICAgICBUaGUgT0lEIHdlJ3JlIHNlYXJjaGluZyBmb3IuCisgKgorICogIEBwYXJhbSBuYW1lX2xlbiBOdW1iZXIgb2Ygc3ViLWlkcyAoc2luZ2xlIGludGVnZXJzKSBpbiB0aGUgT0lELgorICoKKyAqICBAcGFyYW0gcmV0Y21wICAgVmFsdWUgc2V0IHRvIHNubXBfb2lkX2NvbXBhcmUoKSBjYWxsIHJlc3VsdC4KKyAqICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlLCBpZiBzZXQsIGlzIGFsd2F5cyBub25uZWdhdGl2ZS4KKyAqCisgKiAgQHJldHVybiBnaXZlcyBMb29rdXAgQ2FjaGUgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqICBAc2VlIHNubXBfb2lkX2NvbXBhcmUoKQorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgbG9va3VwX2NhY2hlICoKK2xvb2t1cF9jYWNoZV9maW5kKGNvbnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgaW50ICpyZXRjbXApIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKKyAgICBsb29rdXBfY2FjaGUgKnJldCA9IE5VTEw7CisgICAgaW50IGNtcDsKKyAgICBpbnQgaTsKKworICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBjcHRyLT50aGVjYWNoZWNvdW50ICYmIGkgPCBsb29rdXBfY2FjaGVfc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmIChjcHRyLT5jYWNoZVtpXS5wcmV2aW91cy0+c3RhcnRfYSkKKyAgICAgICAgICAgIGNtcCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyLT5jYWNoZVtpXS5wcmV2aW91cy0+c3RhcnRfbGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY21wID0gMTsKKyAgICAgICAgaWYgKGNtcCA+PSAwKSB7CisgICAgICAgICAgICAqcmV0Y21wID0gY21wOworICAgICAgICAgICAgcmV0ID0gJihjcHRyLT5jYWNoZVtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqIEBwcml2YXRlCisgKiAgQ2xlYXJzIGNhY2hlIGNvdW50IGFuZCBwb3NpdGlvbiBpbiBMb29rdXAgQ2FjaGUuCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCitpbnZhbGlkYXRlX2xvb2t1cF9jYWNoZShjb25zdCBjaGFyICpjb250ZXh0KSB7CisgICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7CisgICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSAhPSBOVUxMKSB7CisgICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQgPSAwOworICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKKyAgICB9Cit9CisKK3ZvaWQKK2NsZWFyX2xvb2t1cF9jYWNoZSh2b2lkKSB7CisKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqcHRyID0gTlVMTCwgKm5leHQgPSBOVUxMOworCisgICAgcHRyID0gdGhlY29udGV4dGNhY2hlOworICAgIHdoaWxlIChwdHIpIHsKKwluZXh0ID0gcHRyLT5uZXh0OworCVNOTVBfRlJFRShwdHItPmNvbnRleHQpOworCVNOTVBfRlJFRShwdHIpOworCXB0ciA9IG5leHQ7CisgICAgfQorICAgIHRoZWNvbnRleHRjYWNoZSA9IE5VTEw7IC8qICEhISAqLworfQorCisvKiogIEB9ICovCisvKiBFbmQgb2YgTG9va3VwIGNhY2hlIGNvZGUgKi8KKworLyoqIEBkZWZncm91cCBhZ2VudF9jb250ZXh0X2NhY2hlIENvbnRleHQgY2FjaGUsIHN0b3JpbmcgdGhlIE9JRHMgdW5kZXIgdGhlaXIgY29udGV4dHMuCisgKiAgICAgTWFpbnRhaW4gdGhlIGNhY2hlIHVzZWQgZm9yIGxvY2F0aW5nIHN1Yi10cmVlcyByZWdpc3RlcmVkIHVuZGVyIGRpZmZlcmVudCBjb250ZXh0cy4KKyAqICAgQGluZ3JvdXAgYWdlbnRfcmVnaXN0cnkKKyAqCisgKiBAeworICovCiBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKmNvbnRleHRfc3VidHJlZXMgPSBOVUxMOwogCisvKiogUmV0dXJucyB0aGUgdG9wIGVsZW1lbnQgb2YgY29udGV4dCBzdWJ0cmVlcyBjYWNoZS4KKyAqICBVc2UgaXQgaWYgeW91IHdpc2ggdG8gc3dlZXAgdGhyb3VnaCB0aGUgY2FjaGUgZWxlbWVudHMuCisgKiAgTm90ZSB0aGF0IHRoZSByZXR1cm4gbWF5IGJlIE5VTEwgKGNhY2hlIG1heSBiZSBlbXB0eSkuCisgKgorICogIEByZXR1cm4gcG9pbnRlciB0byB0b3Btb3N0IGNvbnRleHQgc3VidHJlZSBjYWNoZSBlbGVtZW50LgorICovCitzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKgorZ2V0X3RvcF9jb250ZXh0X2NhY2hlKHZvaWQpCit7CisgICAgcmV0dXJuIGNvbnRleHRfc3VidHJlZXM7Cit9CisKKy8qKiBGaW5kcyB0aGUgZmlyc3Qgc3VidHJlZSByZWdpc3RlcmVkIHVuZGVyIGdpdmVuIGNvbnRleHQuCisgKgorICogIEBwYXJhbSBjb250ZXh0X25hbWUgVGV4dCBuYW1lIG9mIHRoZSBjb250ZXh0IHdlJ3JlIHNlYXJjaGluZyBmb3IuCisgKgorICogIEByZXR1cm4gcG9pbnRlciB0byB0aGUgZmlyc3Qgc3VidHJlZSBlbGVtZW50LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworbmV0c25tcF9zdWJ0cmVlICoKK25ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKKworICAgIGlmICghY29udGV4dF9uYW1lKSB7CisgICAgICAgIGNvbnRleHRfbmFtZSA9ICIiOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImxvb2tpbmcgZm9yIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwgCisJCWNvbnRleHRfbmFtZSkpOworICAgIGZvciAocHRyID0gY29udGV4dF9zdWJ0cmVlczsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICBpZiAocHRyLT5jb250ZXh0X25hbWUgIT0gTlVMTCAmJiAKKwkgICAgc3RyY21wKHB0ci0+Y29udGV4dF9uYW1lLCBjb250ZXh0X25hbWUpID09IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImZvdW5kIG9uZSBmb3I6IFwiJXNcIlxuIiwgY29udGV4dF9uYW1lKSk7CisgICAgICAgICAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOworICAgICAgICB9CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImRpZG4ndCBmaW5kIGEgc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKKwkJY29udGV4dF9uYW1lKSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBBZGRzIHRoZSBzdWJ0cmVlIHRvIENvbnRleHQgQ2FjaGUgdW5kZXIgZ2l2ZW4gY29udGV4dCBuYW1lLgorICoKKyAqICBAcGFyYW0gY29udGV4dF9uYW1lIFRleHQgbmFtZSBvZiB0aGUgY29udGV4dCB3ZSdyZSBhZGRpbmcuCisgKgorICogIEBwYXJhbSBuZXdfdHJlZSBUaGUgc3VidHJlZSB0byBiZSBhZGRlZC4KKyAqCisgKiAgQHJldHVybiBjb3B5IG9mIHRoZSBuZXdfdHJlZSBwb2ludGVyLCBvciBOVUxMIGlmIGNhbm5vdCBhZGQuCisgKi8KK25ldHNubXBfc3VidHJlZSAqCithZGRfc3VidHJlZShuZXRzbm1wX3N1YnRyZWUgKm5ld190cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCit7CisgICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKHN1YnRyZWVfY29udGV4dF9jYWNoZSk7CisgICAgCisgICAgaWYgKCFjb250ZXh0X25hbWUpIHsKKyAgICAgICAgY29udGV4dF9uYW1lID0gIiI7CisgICAgfQorCisgICAgaWYgKCFwdHIpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImFkZGluZyBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsCQorCQljb250ZXh0X25hbWUpKTsKKworICAgIHB0ci0+bmV4dCA9IGNvbnRleHRfc3VidHJlZXM7CisgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gbmV3X3RyZWU7CisgICAgcHRyLT5jb250ZXh0X25hbWUgPSBzdHJkdXAoY29udGV4dF9uYW1lKTsKKyAgICBjb250ZXh0X3N1YnRyZWVzID0gcHRyOworCisgICAgcmV0dXJuIHB0ci0+Zmlyc3Rfc3VidHJlZTsKK30KKwordm9pZAorbmV0c25tcF9yZW1vdmVfc3VidHJlZShuZXRzbm1wX3N1YnRyZWUgKnRyZWUpCit7CisgICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHI7CisKKyAgICBpZiAoIXRyZWUtPnByZXYpIHsKKyAgICAgICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICAgICAgICAgIGlmIChwdHItPmZpcnN0X3N1YnRyZWUgPT0gdHJlZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQocHRyKTsKKyAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgIHB0ci0+Zmlyc3Rfc3VidHJlZSA9IHRyZWUtPm5leHQ7CisgICAgfSBlbHNlCisgICAgICAgIHRyZWUtPnByZXYtPm5leHQgPSB0cmVlLT5uZXh0OworCisgICAgaWYgKHRyZWUtPm5leHQpCisgICAgICAgIHRyZWUtPm5leHQtPnByZXYgPSB0cmVlLT5wcmV2OworfQorCisvKiogUmVwbGFjZXMgZmlyc3Qgc3VidHJlZSByZWdpc3RlcmVkIHVuZGVyIGdpdmVuIGNvbnRleHQgbmFtZS4KKyAqICBPdmVyd3JpdGVzIGEgc3VidHJlZSBwb2ludGVyIGluIENvbnRleHQgQ2FjaGUgZm9yIHRoZSBjb250ZXh0IG5hbWUuCisgKiAgVGhlIHByZXZpb3VzIHN1YnRyZWUgcG9pbnRlciBpcyBsb3N0LiBJZiB0aGVyZSdzIG5vIHN1YnRyZWUKKyAqICB1bmRlciB0aGUgc3VwcGxpZWQgbmFtZSwgdGhlbiBhIG5ldyBjYWNoZSBpdGVtIGlzIGNyZWF0ZWQuCisgKgorICogIEBwYXJhbSBuZXdfdHJlZSAgICAgVGhlIG5ldyBzdWJ0cmVlIHRvIGJlIHNldC4KKyAqCisgKiAgQHBhcmFtIGNvbnRleHRfbmFtZSBUZXh0IG5hbWUgb2YgdGhlIGNvbnRleHQgd2UncmUgcmVwbGFjaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgSXQgaXMgY2FzZSBzZW5zaXRpdmUuCisgKgorICogQHJldHVybiBjb3B5IG9mIHRoZSBuZXdfdHJlZSBwb2ludGVyLCBvciBOVUxMIG9uIGVycm9yLgorICovCituZXRzbm1wX3N1YnRyZWUgKgorbmV0c25tcF9zdWJ0cmVlX3JlcGxhY2VfZmlyc3QobmV0c25tcF9zdWJ0cmVlICpuZXdfdHJlZSwgCisJCQkgICAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCit7CisgICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHI7CisgICAgaWYgKCFjb250ZXh0X25hbWUpIHsKKyAgICAgICAgY29udGV4dF9uYW1lID0gIiI7CisgICAgfQorICAgIGZvciAocHRyID0gY29udGV4dF9zdWJ0cmVlczsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICBpZiAocHRyLT5jb250ZXh0X25hbWUgIT0gTlVMTCAmJgorCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgeworICAgICAgICAgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gbmV3X3RyZWU7CisgICAgICAgICAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZGRfc3VidHJlZShuZXdfdHJlZSwgY29udGV4dF9uYW1lKTsKK30KKworCit2b2lkIGNsZWFyX3N1YnRyZWUgKG5ldHNubXBfc3VidHJlZSAqc3ViKTsKKworLyoqIENvbXBsZXRlbHkgY2xlYXJzIGJvdGggdGhlIENvbnRleHQgY2FjaGUgYW5kIHRoZSBMb29rdXAgY2FjaGUuCisgKi8KK3ZvaWQKK2NsZWFyX2NvbnRleHQodm9pZCkgeworCisgICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7CisgICAgbmV0c25tcF9zdWJ0cmVlICp0LCAqdTsKKworICAgIERFQlVHTVNHVEwoKCJhZ2VudF9yZWdpc3RyeSIsICJjbGVhciBjb250ZXh0XG4iKSk7CisKKyAgICBwdHIgPSBnZXRfdG9wX2NvbnRleHRfY2FjaGUoKTsgCisgICAgd2hpbGUgKHB0cikgeworCW5leHQgPSBwdHItPm5leHQ7CisKKwlmb3IgKHQgPSBwdHItPmZpcnN0X3N1YnRyZWU7IHQ7IHQgPSB1KSB7CisgICAgICAgICAgICB1ID0gdC0+bmV4dDsKKwkgICAgY2xlYXJfc3VidHJlZSh0KTsKKwl9CisKKyAgICAgICAgZnJlZShORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwgcHRyLT5jb250ZXh0X25hbWUpKTsKKyAgICAgICAgU05NUF9GUkVFKHB0cik7CisKKwlwdHIgPSBuZXh0OworICAgIH0KKyAgICBjb250ZXh0X3N1YnRyZWVzID0gTlVMTDsgLyogISEhICovCisgICAgY2xlYXJfbG9va3VwX2NhY2hlKCk7Cit9CisKKy8qKiAgQH0gKi8KKy8qIEVuZCBvZiBDb250ZXh0IGNhY2hlIGNvZGUgKi8KKworLyoqIEBkZWZncm91cCBhZ2VudF9taWJfc3VidHJlZSBNYWludGFpbmluZyBNSUIgc3VidHJlZXMuCisgKiAgICAgTWFpbnRhaW5pbmcgTUlCIG5vZGVzIGFuZCBzdWJ0cmVlcy4KKyAqICAgQGluZ3JvdXAgYWdlbnRfcmVnaXN0cnkKKyAqCisgKiBAeworICovCisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX21pYl9kZXRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpOworCisvKiogRnJlZXMgc2luZ2xlIHN1YnRyZWUgaXRlbS4KKyAqICBEZWFsbG9jYXRlZCBtZW1vcnkgZm9yIGdpdmVuIG5ldHNubXBfc3VidHJlZSBpdGVtLCBpbmNsdWRpbmcKKyAqICBIYW5kbGUgUmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBzdG9yZWQgaW5zaWRlIHRoaXMgaXRlbS4KKyAqICBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBwb2ludGVyIGlzIGludmFsaWQKKyAqICBhbmQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgorICoKKyAqICBAcGFyYW0gYSBUaGUgc3VidHJlZSBpdGVtIHRvIGRpc3Bvc2UuCisgKi8KIHZvaWQKIG5ldHNubXBfc3VidHJlZV9mcmVlKG5ldHNubXBfc3VidHJlZSAqYSkKIHsKQEAgLTk2LDYgKzQ3NiwxNCBAQAogICB9CiB9CiAKKy8qKiBDcmVhdGVzIGRlZXAgY29weSBvZiBhIHN1YnRyZWUgaXRlbS4KKyAqICBEdXBsaWNhdGVzIGFsbCBwcm9wZXJ0aWVzIHN0b3JlZCBpbiB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcKKyAqICBIYW5kbGUgUmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBzdG9yZWQgaW5zaWRlIHRoZSBpdGVtLgorICoKKyAqICBAcGFyYW0gYSBUaGUgc3VidHJlZSBpdGVtIHRvIGNvcHkuCisgKgorICogIEByZXR1cm4gZGVlcCBjb3B5IG9mIHRoZSBzdWJ0cmVlIGl0ZW0sIG9yIE5VTEwgb24gZXJyb3IuCisgKi8KIG5ldHNubXBfc3VidHJlZSAqCiBuZXRzbm1wX3N1YnRyZWVfZGVlcGNvcHkobmV0c25tcF9zdWJ0cmVlICphKQogewpAQCAtMTM2LDc4ICs1MjQsMTAgQEAKICAgcmV0dXJuIGI7CiB9CiAKLXN1YnRyZWVfY29udGV4dF9jYWNoZSAqCi1nZXRfdG9wX2NvbnRleHRfY2FjaGUodm9pZCkKLXsKLSAgICByZXR1cm4gY29udGV4dF9zdWJ0cmVlczsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKLXsKLSAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKLQotICAgIGlmICghY29udGV4dF9uYW1lKSB7Ci0gICAgICAgIGNvbnRleHRfbmFtZSA9ICIiOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImxvb2tpbmcgZm9yIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwgCi0JCWNvbnRleHRfbmFtZSkpOwotICAgIGZvciAocHRyID0gY29udGV4dF9zdWJ0cmVlczsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAocHRyLT5jb250ZXh0X25hbWUgIT0gTlVMTCAmJiAKLQkgICAgc3RyY21wKHB0ci0+Y29udGV4dF9uYW1lLCBjb250ZXh0X25hbWUpID09IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImZvdW5kIG9uZSBmb3I6IFwiJXNcIlxuIiwgY29udGV4dF9uYW1lKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOwotICAgICAgICB9Ci0gICAgfQotICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImRpZG4ndCBmaW5kIGEgc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKLQkJY29udGV4dF9uYW1lKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLW5ldHNubXBfc3VidHJlZSAqCi1hZGRfc3VidHJlZShuZXRzbm1wX3N1YnRyZWUgKm5ld190cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKHN1YnRyZWVfY29udGV4dF9jYWNoZSk7Ci0gICAgCi0gICAgaWYgKCFjb250ZXh0X25hbWUpIHsKLSAgICAgICAgY29udGV4dF9uYW1lID0gIiI7Ci0gICAgfQotCi0gICAgaWYgKCFwdHIpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIAotICAgIERFQlVHTVNHVEwoKCJzdWJ0cmVlIiwgImFkZGluZyBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsCQotCQljb250ZXh0X25hbWUpKTsKLQotICAgIHB0ci0+bmV4dCA9IGNvbnRleHRfc3VidHJlZXM7Ci0gICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gbmV3X3RyZWU7Ci0gICAgcHRyLT5jb250ZXh0X25hbWUgPSBzdHJkdXAoY29udGV4dF9uYW1lKTsKLSAgICBjb250ZXh0X3N1YnRyZWVzID0gcHRyOwotCi0gICAgcmV0dXJuIHB0ci0+Zmlyc3Rfc3VidHJlZTsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9yZXBsYWNlX2ZpcnN0KG5ldHNubXBfc3VidHJlZSAqbmV3X3RyZWUsIAotCQkJICAgICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQotewotICAgIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqcHRyOwotICAgIGlmICghY29udGV4dF9uYW1lKSB7Ci0gICAgICAgIGNvbnRleHRfbmFtZSA9ICIiOwotICAgIH0KLSAgICBmb3IgKHB0ciA9IGNvbnRleHRfc3VidHJlZXM7IHB0ciAhPSBOVUxMOyBwdHIgPSBwdHItPm5leHQpIHsKLSAgICAgICAgaWYgKHB0ci0+Y29udGV4dF9uYW1lICE9IE5VTEwgJiYKLQkgICAgc3RyY21wKHB0ci0+Y29udGV4dF9uYW1lLCBjb250ZXh0X25hbWUpID09IDApIHsKLSAgICAgICAgICAgIHB0ci0+Zmlyc3Rfc3VidHJlZSA9IG5ld190cmVlOwotICAgICAgICAgICAgcmV0dXJuIHB0ci0+Zmlyc3Rfc3VidHJlZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWRkX3N1YnRyZWUobmV3X3RyZWUsIGNvbnRleHRfbmFtZSk7Ci19Ci0KLU5FVFNOTVBfSU5MSU5FIHZvaWQKKy8qKiBAcHJpdmF0ZQorICogIFJlcGxhY2VzIG5leHQgc3VidHJlZSBwb2ludGVyIGluIGdpdmVuIHN1YnRyZWUuCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCiBuZXRzbm1wX3N1YnRyZWVfY2hhbmdlX25leHQobmV0c25tcF9zdWJ0cmVlICpwdHIsIG5ldHNubXBfc3VidHJlZSAqdGhlbmV4dCkKIHsKICAgICBwdHItPm5leHQgPSB0aGVuZXh0OwpAQCAtMjE5LDcgKzUzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGVuZXh0LT5vaWRfb2ZmKTsKIH0KIAotTkVUU05NUF9JTkxJTkUgdm9pZAorLyoqIEBwcml2YXRlCisgKiAgUmVwbGFjZXMgcHJldmlvdXMgc3VidHJlZSBwb2ludGVyIGluIGdpdmVuIHN1YnRyZWUuCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCiBuZXRzbm1wX3N1YnRyZWVfY2hhbmdlX3ByZXYobmV0c25tcF9zdWJ0cmVlICpwdHIsIG5ldHNubXBfc3VidHJlZSAqdGhlcHJldikKIHsKICAgICBwdHItPnByZXYgPSB0aGVwcmV2OwpAQCAtMjMxLDEyICs1NTQsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHRyLT5vaWRfb2ZmKTsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfc3VidHJlZV9jb21wYXJlLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfU1VCVFJFRV9DT01QQVJFCisvKiogQ29tcGFyZXMgT0lEcyBvZiBnaXZlbiBzdWJ0cmVlcy4KKyAqCisgKiAgQHBhcmFtIGFwLGJwIFBvaW50ZXJzIHRvIHRoZSBzdWJ0cmVlcyB0byBiZSBjb21wYXJlZC4KKyAqCisgKiAgQHJldHVybiBPSURzIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIHJlc3VsdC4KKyAqCisgKiAgQHNlZSBzbm1wX29pZF9jb21wYXJlKCkKKyAqLwogaW50CiBuZXRzbm1wX3N1YnRyZWVfY29tcGFyZShjb25zdCBuZXRzbm1wX3N1YnRyZWUgKmFwLCBjb25zdCBuZXRzbm1wX3N1YnRyZWUgKmJwKQogewogICAgIHJldHVybiBzbm1wX29pZF9jb21wYXJlKGFwLT5uYW1lX2EsIGFwLT5uYW1lbGVuLCBicC0+bmFtZV9hLCBicC0+bmFtZWxlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX1NVQlRSRUVfQ09NUEFSRSAqLwogCisvKiogSm9pbnMgdGhlIGdpdmVuIHN1YnRyZWUgd2l0aCB0aGUgY3VycmVudCB0cmVlLgorICogIFRyZWVzIGFyZSBqb2luZWQgYW5kIHRoZSBvbmUgc3VwcGxpZWQgYXMgcGFyYW1ldGVyIGlzIGZyZWVkLgorICoKKyAqICBAcGFyYW0gcm9vdCBUaGUgc3VidHJlZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN1YnRyZWUuCisgKiAgICAgICAgICAgICAgRG8gbm90IHVzZSB0aGUgcG9pbnRlciBhZnRlciBqb2luaW5nIC0gaXQgbWF5IGJlIGludmFsaWQuCisgKi8KIHZvaWQKIG5ldHNubXBfc3VidHJlZV9qb2luKG5ldHNubXBfc3VidHJlZSAqcm9vdCkKIHsKQEAgLTI4MywxMCArNjIzLDE4IEBACiB9CiAKIAotICAgICAgICAvKgotICAgICAgICAgKiAgU3BsaXQgdGhlIHN1YnRyZWUgaW50byB0d28gYXQgdGhlIHNwZWNpZmllZCBwb2ludCwKLSAgICAgICAgICogICAgcmV0dXJuaW5nIHRoZSBuZXcgKHNlY29uZCkgc3VidHJlZQotICAgICAgICAgKi8KKy8qKiBTcGxpdCB0aGUgc3VidHJlZSBpbnRvIHR3byBhdCB0aGUgc3BlY2lmaWVkIHBvaW50LgorICogIFN1YnRyZWVzIG9mIHRoZSBnaXZlbiBPSUQgYW5kIHNlcGFyYXRlZCBhbmQgZm9ybWVkIGludG8gdGhlCisgKiAgcmV0dXJuZWQgc3VidHJlZS4KKyAqCisgKiAgQHBhcmFtIGN1cnJlbnQgVGhlIGVsZW1lbnQgYXQgd2hpY2ggc3BsaXR0aW5nIGlzIHN0YXJ0ZWQuCisgKgorICogIEBwYXJhbSBuYW1lIFRoZSBPSUQgd2UnZCBsaWtlIHRvIHNwbGl0LgorICoKKyAqICBAcGFyYW0gbmFtZV9sZW4gTGVuZ3RoIG9mIHRoZSBPSUQuCisgKgorICogIEByZXR1cm4gaGVhZCBvZiB0aGUgbmV3IChzZWNvbmQpIHN1YnRyZWUuCisgKi8KIG5ldHNubXBfc3VidHJlZSAqCiBuZXRzbm1wX3N1YnRyZWVfc3BsaXQobmV0c25tcF9zdWJ0cmVlICpjdXJyZW50LCBvaWQgbmFtZVtdLCBpbnQgbmFtZV9sZW4pCiB7CkBAIC0zMjAsOSArNjY4LDcgQEAKIAlyZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoY3VycmVudC0+ZW5kX2EgIT0gTlVMTCkgewotCVNOTVBfRlJFRShjdXJyZW50LT5lbmRfYSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRShjdXJyZW50LT5lbmRfYSk7CiAgICAgY3VycmVudC0+ZW5kX2EgPSB0bXBfYTsKICAgICBjdXJyZW50LT5lbmRfbGVuID0gbmFtZV9sZW47CiAgICAgaWYgKG5ld19zdWItPnN0YXJ0X2EgIT0gTlVMTCkgewpAQCAtMzkzLDEyICs3MzksMTkgQEAKICAgICByZXR1cm4gbmV3X3N1YjsKIH0KIAorLyoqIExvYWRzIHRoZSBzdWJ0cmVlIHVuZGVyIGdpdmVuIGNvbnRleHQgbmFtZS4KKyAqCisgKiAgQHBhcmFtIG5ld19zdWIgVGhlIHN1YnRyZWUgdG8gYmUgbG9hZGVkIGludG8gY3VycmVudCBzdWJ0cmVlLgorICoKKyAqICBAcGFyYW0gY29udGV4dF9uYW1lIFRleHQgbmFtZSBvZiB0aGUgY29udGV4dCB3ZSdyZSBzZWFyY2hpbmcgZm9yLgorICoKKyAqICBAcmV0dXJuIGdpdmVzIE1JQl9SRUdJU1RFUkVEX09LIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCiBpbnQKIG5ldHNubXBfc3VidHJlZV9sb2FkKG5ldHNubXBfc3VidHJlZSAqbmV3X3N1YiwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQogewotICAgIG5ldHNubXBfc3VidHJlZSAqdHJlZTEsICp0cmVlMiwgKm5ldzI7CisgICAgbmV0c25tcF9zdWJ0cmVlICp0cmVlMSwgKnRyZWUyOwogICAgIG5ldHNubXBfc3VidHJlZSAqcHJldiwgKm5leHQ7Ci0gICAgaW50ICAgICAgICAgICAgIHJlcywgcmMgPSAwOwogCiAgICAgaWYgKG5ld19zdWIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTUlCX1JFR0lTVEVSRURfT0s7ICAgICAgIC8qIERlZ2VuZXJhdGUgY2FzZSAqLwpAQCAtNDQwLDcgKzc5Myw3IEBACiAgICAgLyogIEhhbmRsZSBuZXcgc3VidHJlZXMgdGhhdCBzdGFydCBpbiB2aXJnaW4gdGVycml0b3J5LiAgKi8KIAogICAgIGlmICh0cmVlMSA9PSBOVUxMKSB7Ci0JbmV3MiA9IE5VTEw7CisgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV3MiA9IE5VTEw7CiAJLyogIElzIHRoZXJlIGFueSBvdmVybGFwIHdpdGggbGF0ZXIgc3VidHJlZXM/ICAqLwogCWlmICh0cmVlMiAmJiBzbm1wX29pZF9jb21wYXJlKG5ld19zdWItPmVuZF9hLCBuZXdfc3ViLT5lbmRfbGVuLAogCQkJCSAgICAgIHRyZWUyLT5zdGFydF9hLCB0cmVlMi0+c3RhcnRfbGVuKSA+IDApIHsKQEAgLTQ5OSwxMCArODUyLDggQEAKIAkgICAgSWYgdGhlIG5ldyBzdWJ0cmVlIGV4dGVuZHMgYmV5b25kIHRoaXMgZXhpc3RpbmcgcmVnaW9uLAogCSAgICAgICAgICAgIHNwbGl0IGl0LCBhbmQgcmVjdXJzZSB0byBtZXJnZSB0aGUgdHdvIHBhcnRzLiAgKi8KIAotCXJjID0gc25tcF9vaWRfY29tcGFyZShuZXdfc3ViLT5lbmRfYSwgbmV3X3N1Yi0+ZW5kX2xlbiwgCi0JCQkgICAgICB0cmVlMS0+ZW5kX2EsIHRyZWUxLT5lbmRfbGVuKTsKLQotICAgICAgICBzd2l0Y2ggKHJjKSB7CisJc3dpdGNoIChzbm1wX29pZF9jb21wYXJlKG5ld19zdWItPmVuZF9hLCBuZXdfc3ViLT5lbmRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZTEtPmVuZF9hLCB0cmVlMS0+ZW5kX2xlbikpIHsKIAogCWNhc2UgLTE6CiAJICAgIC8qICBFeGlzdGluZyBzdWJ0cmVlIGNvbnRhaW5zIG5ldyBvbmUuICAqLwpAQCAtNTMxLDggKzg4MiwyMyBAQAogCQogCSAgICBpZiAobmV4dCAmJiAobmV4dC0+bmFtZWxlbiAgPT0gbmV3X3N1Yi0+bmFtZWxlbikgJiYKIAkJKG5leHQtPnByaW9yaXR5ID09IG5ld19zdWItPnByaW9yaXR5KSkgewotICAgICAgICAgICAgICAgIGlmIChuZXdfc3ViLT5uYW1lbGVuICE9IDEpIC8qIGlnbm9yZSByb290IE9JRCBkdXBzICovCi0gICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdXBsaWNhdGUgcmVnaXN0cmF0aW9uICglcywgJXMpIiwgbmV4dC0+bGFiZWxfYSwgbmV3X3N1Yi0+bGFiZWxfYSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld19zdWItPm5hbWVsZW4gIT0gMSkgeyAgICAvKiBpZ25vcmUgcm9vdCBPSUQgZHVwcyAqLworICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBidWZfb3ZlcmZsb3cgPSAwOworCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWQoKHVfY2hhciAqKikgJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZidWZfb3ZlcmZsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N1Yi0+c3RhcnRfYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3ViLT5zdGFydF9sZW4pOworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIHJlZ2lzdHJhdGlvbjogTUlCIG1vZHVsZXMgJXMgYW5kICVzIChvaWQgJXMlcykuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LT5sYWJlbF9hLCBuZXdfc3ViLT5sYWJlbF9hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPyBidWYgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX292ZXJmbG93ID8gIiBbVFJVTkNBVEVEXSIgOiAiIik7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICB9CiAJCXJldHVybiBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTjsKIAkgICAgfQogCkBAIC01NTgsMjAgKzkyNCwxODggQEAKIAogCWNhc2UgIDE6CiAJICAgIC8qICBOZXcgc3VidHJlZSBjb250YWlucyB0aGUgZXhpc3Rpbmcgb25lLiAgKi8KLQkgICAgbmV3MiA9IG5ldHNubXBfc3VidHJlZV9zcGxpdChuZXdfc3ViLCB0cmVlMS0+ZW5kX2EsdHJlZTEtPmVuZF9sZW4pOwotCSAgICByZXMgPSBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXdfc3ViLCBjb250ZXh0X25hbWUpOwotCSAgICBpZiAocmVzICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7Ci0JCW5ldHNubXBfc3VidHJlZV9mcmVlKG5ldzIpOwotCQlyZXR1cm4gcmVzOwotCSAgICB9Ci0JICAgIHJldHVybiBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXcyLCBjb250ZXh0X25hbWUpOwotCX0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5ldzIgPQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWVfc3BsaXQobmV3X3N1YiwgdHJlZTEtPmVuZF9hLHRyZWUxLT5lbmRfbGVuKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzID0gbmV0c25tcF9zdWJ0cmVlX2xvYWQobmV3X3N1YiwgY29udGV4dF9uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3N1YnRyZWUobmV3Mik7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZV9mcmVlKG5ldzIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9zdWJ0cmVlX2xvYWQobmV3MiwgY29udGV4dF9uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotLyoKLSAqIE5vdGU6IHJlZ2luZm8gd2lsbCBiZSBmcmVlZCBvbiBmYWlsdXJlcworLyoqIEZyZWUgdGhlIGdpdmVuIHN1YnRyZWUgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCisgKgorICogIEBwYXJhbSBzdWIgU3VidHJlZSBicmFuY2ggdG8gYmUgY2xlYXJlZCBhbmQgZnJlZWQuCisgKiAgICAgICAgICAgICBBZnRlciB0aGUgY2FsbCwgdGhpcyBwb2ludGVyIGlzIGludmFsaWQKKyAqICAgICAgICAgICAgIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKi8KK3ZvaWQKK2NsZWFyX3N1YnRyZWUgKG5ldHNubXBfc3VidHJlZSAqc3ViKSB7CisKKyAgICBuZXRzbm1wX3N1YnRyZWUgKmM7CisgICAgCisgICAgaWYgKHN1YiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGZvcihjID0gc3ViOyBjOykgeworICAgICAgICBzdWIgPSBjOworICAgICAgICBjID0gYy0+Y2hpbGRyZW47CisgICAgICAgIG5ldHNubXBfc3VidHJlZV9mcmVlKHN1Yik7CisgICAgfQorCit9CisKK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLAorCQkJICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCit7CisgICAgbG9va3VwX2NhY2hlICpsb29rdXBfY2FjaGUgPSBOVUxMOworICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHIgPSBOVUxMLCAqcHJldmlvdXMgPSBOVUxMOworICAgIGludCBjbXAgPSAxOworICAgIHNpemVfdCBsbF9vZmYgPSAwOworCisgICAgaWYgKHN1YnRyZWUpIHsKKyAgICAgICAgbXlwdHIgPSBzdWJ0cmVlOworICAgIH0gZWxzZSB7CisJLyogbG9vayB0aHJvdWdoIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplKSB7CisgICAgICAgICAgICBsb29rdXBfY2FjaGUgPSBsb29rdXBfY2FjaGVfZmluZChjb250ZXh0X25hbWUsIG5hbWUsIGxlbiwgJmNtcCk7CisgICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlKSB7CisgICAgICAgICAgICAgICAgbXlwdHIgPSBsb29rdXBfY2FjaGUtPm5leHQ7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBsb29rdXBfY2FjaGUtPnByZXZpb3VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFteXB0cikKKyAgICAgICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHRoaXMgb3B0aW1pemF0aW9uIGNhdXNlcyBhIHNlZ2ZhdWx0IG9uIHNmIGNmIGFscGhhLWxpbnV4MS4KKyAgICAgKiBpZmRlZiBvdXQgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCB3aHkgYW5kIGZpeGVzIGl0LiB4eHgtcmtzIDIwMDUxMTE3CisgICAgICovCisjaWZuZGVmIF9fYWxwaGEKKyNkZWZpbmUgV1RFU1RfT1BUSU1JWkFUSU9OIDEKKyNlbmRpZgorI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgorICAgIERFQlVHTVNHVEwoKCJ3dGVzdCIsIm9pZCBpbjogIikpOworICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBuYW1lLCBsZW4pKTsKKyAgICBERUJVR01TRygoInd0ZXN0IiwiXG4iKSk7CisjZW5kaWYKKyAgICBmb3IgKDsgbXlwdHIgIT0gTlVMTDsgcHJldmlvdXMgPSBteXB0ciwgbXlwdHIgPSBteXB0ci0+bmV4dCkgeworI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgorICAgICAgICAvKiBDb21wYXJlIHRoZSBpbmNvbWluZyBvaWQgd2l0aCB0aGUgbGlua2VkIGxpc3QuICBJZiB3ZSBoYXZlCisgICAgICAgICAgIHJlc3VsdHMgb2YgcHJldmlvdXMgY29tcGFyZXMsIGl0cyBmYXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQorICAgICAgICAgICBsZW5ndGggd2UgZGlmZmVyZWQgaW4gdGhlIGxhc3QgY2hlY2sgaXMgZ3JlYXRlciB0aGFuIHRoZQorICAgICAgICAgICBsZW5ndGggYmV0d2VlbiB0aGlzIHBvaW50ZXIgYW5kIHRoZSBsYXN0IHRoZW4gd2UgZG9uJ3QgbmVlZAorICAgICAgICAgICB0byBhY3R1YWxseSBwZXJmb3JtIGEgY29tcGFyaXNvbiAqLworICAgICAgICBERUJVR01TR1RMKCgid3Rlc3QiLCJvaWQgY21wOiAiKSk7CisgICAgICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbikpOworICAgICAgICBERUJVR01TRygoInd0ZXN0IiwiICAtLS0gb2ZmID0gJWx1LCBpbiBvZmYgPSAlbHUgdGVzdCA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbXlwdHItPm9pZF9vZmYsICh1bnNpZ25lZCBsb25nKWxsX29mZiwKKyAgICAgICAgICAgICAgICAgICEobGxfb2ZmICYmIG15cHRyLT5vaWRfb2ZmICYmCisgICAgICAgICAgICAgICAgICAgIG15cHRyLT5vaWRfb2ZmID4gbGxfb2ZmKSkpOworICAgICAgICBpZiAoIShsbF9vZmYgJiYgbXlwdHItPm9pZF9vZmYgJiYgbXlwdHItPm9pZF9vZmYgPiBsbF9vZmYpICYmCisgICAgICAgICAgICBuZXRzbm1wX29pZF9jb21wYXJlX2xsKG5hbWUsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlwdHItPnN0YXJ0X2EsIG15cHRyLT5zdGFydF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsbF9vZmYpIDwgMCkgeworI2Vsc2UKKyAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbGVuLCBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbikgPCAwKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGVfc2l6ZSAmJiBwcmV2aW91cyAmJiBjbXApIHsKKyAgICAgICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlKSB7CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cF9jYWNoZV9yZXBsYWNlKGxvb2t1cF9jYWNoZSwgbXlwdHIsIHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb29rdXBfY2FjaGVfYWRkKGNvbnRleHRfbmFtZSwgbXlwdHIsIHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByZXZpb3VzOworfQorCituZXRzbm1wX3N1YnRyZWUgKgorbmV0c25tcF9zdWJ0cmVlX2ZpbmRfbmV4dChjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4sCisJCQkgIG5ldHNubXBfc3VidHJlZSAqc3VidHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQoreworICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHIgPSBOVUxMOworCisgICAgbXlwdHIgPSBuZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KG5hbWUsIGxlbiwgc3VidHJlZSwgY29udGV4dF9uYW1lKTsKKworICAgIGlmIChteXB0ciAhPSBOVUxMKSB7CisgICAgICAgIG15cHRyID0gbXlwdHItPm5leHQ7CisgICAgICAgIHdoaWxlIChteXB0ciAhPSBOVUxMICYmIChteXB0ci0+dmFyaWFibGVzID09IE5VTEwgfHwgCisJCQkJIG15cHRyLT52YXJpYWJsZXNfbGVuID09IDApKSB7CisgICAgICAgICAgICBteXB0ciA9IG15cHRyLT5uZXh0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBteXB0cjsKKyAgICB9IGVsc2UgaWYgKHN1YnRyZWUgIT0gTlVMTCAmJiBzbm1wX29pZF9jb21wYXJlKG5hbWUsIGxlbiwgCisJCQkJICAgc3VidHJlZS0+c3RhcnRfYSwgc3VidHJlZS0+c3RhcnRfbGVuKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIHN1YnRyZWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCituZXRzbm1wX3N1YnRyZWUgKgorbmV0c25tcF9zdWJ0cmVlX2ZpbmQoY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuLCBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsIAorCQkgICAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyOworCisgICAgbXlwdHIgPSBuZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KG5hbWUsIGxlbiwgc3VidHJlZSwgY29udGV4dF9uYW1lKTsKKyAgICBpZiAobXlwdHIgJiYgbXlwdHItPmVuZF9hICYmCisgICAgICAgIHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbGVuLCBteXB0ci0+ZW5kX2EsIG15cHRyLT5lbmRfbGVuKTwwKSB7CisgICAgICAgIHJldHVybiBteXB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqICBAfSAqLworLyogRW5kIG9mIFN1YnRyZWVzIG1haW50YWluaW5nIGNvZGUgKi8KKworLyoqIEBkZWZncm91cCBhZ2VudF9taWJfcmVnaXN0ZXJpbmcgUmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgTUlCIHN1YnRyZWVzLgorICogICAgIEFkZGluZyBhbmQgcmVtb3ZpbmcgTUlCIG5vZGVzIHRvIHRoZSBkYXRhYmFzZSB1bmRlciB0aGVpciBjb250ZXh0cy4KKyAqICAgQGluZ3JvdXAgYWdlbnRfcmVnaXN0cnkKKyAqCisgKiBAeworICovCisKKworLyoqIFJlZ2lzdGVycyBhIE1JQiBoYW5kbGVyLgorICoKKyAqICBAcGFyYW0gbW9kdWxlTmFtZQorICogIEBwYXJhbSB2YXIKKyAqICBAcGFyYW0gdmFyc2l6ZQorICogIEBwYXJhbSBudW12YXJzCisgKiAgQHBhcmFtICBtaWJsb2MKKyAqICBAcGFyYW0gbWlibG9jbGVuCisgKiAgQHBhcmFtIHByaW9yaXR5CisgKiAgQHBhcmFtIHJhbmdlX3N1YmlkCisgKiAgQHBhcmFtIHJhbmdlX3Vib3VuZAorICogIEBwYXJhbSAgc3MKKyAqICBAcGFyYW0gY29udGV4dAorICogIEBwYXJhbSB0aW1lb3V0CisgKiAgQHBhcmFtIGZsYWdzCisgKiAgQHBhcmFtIHJlZ2luZm8gUmVnaXN0cmF0aW9uIGhhbmRsZXIgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgIEluIGEgY2FzZSBvZiBmYWlsdXJlLCBpdCB3aWxsIGJlIGZyZWVkLgorICogIEBwYXJhbSBwZXJmb3JtX2NhbGxiYWNrCisgKgorICogIEByZXR1cm4gZ2l2ZXMgTUlCX1JFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKQorICogIEBzZWUgcmVnaXN0ZXJfYWdlbnR4X2xpc3QoKQorICogIEBzZWUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKCkKICAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX21pYihjb25zdCBjaGFyICptb2R1bGVOYW1lLApAQCAtNTkxLDcgKzExMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgaW50IHBlcmZvcm1fY2FsbGJhY2spCiB7CiAgICAgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCAqc3ViMjsKLSAgICBpbnQgICAgICAgICAgICAgcmVzLCBpOworICAgIGludCAgICAgICAgICAgICByZXM7CiAgICAgc3RydWN0IHJlZ2lzdGVyX3BhcmFtZXRlcnMgcmVnX3Bhcm1zOwogICAgIGludCBvbGRfbG9va3VwX2NhY2hlX3ZhbCA9IG5ldHNubXBfZ2V0X2xvb2t1cF9jYWNoZV9zaXplKCk7CiAKQEAgLTY3Miw2ICsxMjA2LDcgQEAKIAlyZXN0IG9mIHRoZSByYW5nZS4gICovCiAKICAgICBpZiAocmVzID09IE1JQl9SRUdJU1RFUkVEX09LICYmIHJhbmdlX3N1YmlkICE9IDApIHsKKyAgICAgICAgaW50IGk7CiAJZm9yIChpID0gbWlibG9jW3JhbmdlX3N1YmlkIC0gMV0gKyAxOyBpIDw9IChpbnQpcmFuZ2VfdWJvdW5kOyBpKyspIHsKIAkgICAgc3ViMiA9IG5ldHNubXBfc3VidHJlZV9kZWVwY29weShzdWJ0cmVlKTsKIApAQCAtNjk4LDYgKzEyMzMsNyBAQAogICAgICAgICAgICAgaWYgKHJlcyAhPSBNSUJfUkVHSVNURVJFRF9PSykgewogICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfbWliX2NvbnRleHQobWlibG9jLCBtaWJsb2NsZW4sIHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Vfc3ViaWQsIHJhbmdlX3Vib3VuZCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfc3VidHJlZShzdWIyKTsKIAkJbmV0c25tcF9zdWJ0cmVlX2ZyZWUoc3ViMik7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemUob2xkX2xvb2t1cF9jYWNoZV92YWwpOwogICAgICAgICAgICAgICAgIGludmFsaWRhdGVfbG9va3VwX2NhY2hlKGNvbnRleHQpOwpAQCAtNzMzLDYgKzEyNjksOSBAQAogICAgICAgICByZWdfcGFybXMudGltZW91dCA9IHRpbWVvdXQ7CiAgICAgICAgIHJlZ19wYXJtcy5mbGFncyA9ICh1X2NoYXIpIGZsYWdzOwogICAgICAgICByZWdfcGFybXMuY29udGV4dE5hbWUgPSBjb250ZXh0OworICAgICAgICByZWdfcGFybXMuc2Vzc2lvbiA9IHNzOworICAgICAgICByZWdfcGFybXMucmVnaW5mbyA9IHJlZ2luZm87CisgICAgICAgIHJlZ19wYXJtcy5jb250ZXh0TmFtZSA9IGNvbnRleHQ7CiAgICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9PSUQsICZyZWdfcGFybXMpOwogICAgIH0KQEAgLTc0MiwxMCArMTI4MSw5IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotLyoKLSAqIFJlYXR0YWNoIGEgcGFydGljdWxhciBub2RlLiAgCisvKiogQHByaXZhdGUKKyAqICBSZWF0dGFjaCBhIHBhcnRpY3VsYXIgbm9kZS4gIAogICovCi0KIHN0YXRpYyB2b2lkCiByZWdpc3Rlcl9taWJfcmVhdHRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpCiB7CkBAIC03NjYsNiArMTMwNCw5IEBACiAgICAgICAgIHJlZ19wYXJtcy5yYW5nZV91Ym91bmQgPSBzLT5yYW5nZV91Ym91bmQ7CiAgICAgICAgIHJlZ19wYXJtcy50aW1lb3V0ID0gcy0+dGltZW91dDsKICAgICAgICAgcmVnX3Bhcm1zLmZsYWdzID0gcy0+ZmxhZ3M7CisgICAgICAgIHJlZ19wYXJtcy5zZXNzaW9uID0gcy0+c2Vzc2lvbjsKKyAgICAgICAgcmVnX3Bhcm1zLnJlZ2luZm8gPSBzLT5yZWdpbmZvOworICAgICAgICAvKiBYWFg6IG1pc3NpbmcgaW4gc3VidHJlZTogcmVnX3Bhcm1zLmNvbnRleHROYW1lID0gcy0+Y29udGV4dDsgKi8KICAgICAgICAgaWYgKChOVUxMICE9IHMtPnJlZ2luZm8pICYmIChOVUxMICE9IHMtPnJlZ2luZm8tPmNvbnRleHROYW1lKSkKICAgICAgICAgICAgIHJlZ19wYXJtcy5jb250ZXh0TmFtZSA9IHMtPnJlZ2luZm8tPmNvbnRleHROYW1lOwogICAgICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCkBAIC03NzQsMTAgKzEzMTUsOCBAQAogICAgIH0KIH0KIAotLyoKLSAqIENhbGwgY2FsbGJhY2tzIHRvIHJlYXR0YWNoIGFsbCBvdXIgbm9kZXMuICAKKy8qKiBDYWxsIGNhbGxiYWNrcyB0byByZWF0dGFjaCBhbGwgb3VyIG5vZGVzLiAgCiAgKi8KLQogdm9pZAogcmVnaXN0ZXJfbWliX3JlYXR0YWNoKHZvaWQpCiB7CkBAIC03OTQsMTAgKzEzMzMsMTEgQEAKICAgICB9CiB9CiAKLS8qCi0gKiBNYXJrIGEgbm9kZSBhcyBkZXRhY2hlZC4gIAorLyoqIEBwcml2YXRlCisgKiAgTWFyayBhIG5vZGUgYXMgZGV0YWNoZWQuCisgKgorICogIEBwYXJhbSBzIFRoZSBub3RlIHRvIGJlIG1hcmtlZAogICovCi0KIHN0YXRpYyB2b2lkCiByZWdpc3Rlcl9taWJfZGV0YWNoX25vZGUobmV0c25tcF9zdWJ0cmVlICpzKQogewpAQCAtODA2LDEyICsxMzQ2LDEwIEBACiAgICAgfQogfQogCi0vKgotICogTWFyayBhbGwgb3VyIHJlZ2lzdGVyZWQgT0lEcyBhcyBkZXRhY2hlZC4gIFRoaXMgaXMgb25seSByZWFsbHkKLSAqIHVzZWZ1bCBmb3Igc3ViYWdlbnQgcHJvdG9jb2xzLCB3aGVuIGEgY29ubmVjdGlvbiBpcyBsb3N0IG9yCi0gKiBzb21ldGhpbmcuICAKKy8qKiBNYXJrIGFsbCBvdXIgcmVnaXN0ZXJlZCBPSURzIGFzIGRldGFjaGVkLgorICogIFRoaXMgaXMgb25seSByZWFsbHkgdXNlZnVsIGZvciBzdWJhZ2VudCBwcm90b2NvbHMsIHdoZW4KKyAqICBhIGNvbm5lY3Rpb24gaXMgbG9zdCBvciB0aGUgc3ViYWdlbnQgaXMgYmVpbmcgc2h1dCBkb3duLiAgCiAgKi8KLQogdm9pZAogcmVnaXN0ZXJfbWliX2RldGFjaCh2b2lkKQogewpAQCAtODI3LDEyICsxMzY1LDYwIEBACiAgICAgfQogfQogCisvKiogUmVnaXN0ZXIgYSBuZXcgbW9kdWxlIGludG8gdGhlIE1JQiBkYXRhYmFzZSwgd2l0aCBhbGwgcG9zc2libGUgY3VzdG9tIG9wdGlvbnMKKyAqCisgKiAgQHBhcmFtICBtb2R1bGVOYW1lIFRleHQgbmFtZSBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gbmFtZSB3aWxsIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZHVsZQorICogICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGFnZW50LgorICoKKyAqICBAcGFyYW0gIHZhciAgICAgICAgQXJyYXkgb2YgdmFyaWFibGVzIHRvIGJlIHJlZ2lzdGVyZWQgaW4gdGhlIG1vZHVsZS4KKyAqCisgKiAgQHBhcmFtICB2YXJzaXplICAgIFNpemUgb2YgYSBzaW5nbGUgdmFyaWFibGUgaW4gdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGUgc2l6ZSBpcyBub3JtYWxseSBlcXVhbCB0byBzaXplb2Yoc3RydWN0IHZhcmlhYmxlKSwKKyAqICAgICAgICAgICAgICAgICAgICAgYnV0IGlmIHdlIHdpc2ggdG8gdXNlIHNob3J0ZXIgKG9yIGxvbmdlcikgT0lEcywgdGhlbiB3ZQorICogICAgICAgICAgICAgICAgICAgICBjb3VsZCB1c2UgZGlmZmVyZW50IHZhcmlhbnQgb2YgdGhlIHZhcmlhYmxlIHN0cnVjdHVyZS4KKyAqCisgKiAgQHBhcmFtICBudW12YXJzICAgIE51bWJlciBvZiB2YXJpYWJsZXMgaW4gdGhlIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBob3cgbWFueSB2YXJpYWJsZXMgdGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIHJlZ2lzdGVyLgorICoKKyAqICBAcGFyYW0gIG1pYmxvYyAgICAgQmFzZSBPSUQgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgQWxsIE9JRHMgaW4gdmFyIGFycmF5IHNob3VsZCBiZSBzdWItb2lkcyBvZiB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgbWlibG9jbGVuICBMZW5ndGggb2YgdGhlIGJhc2UgT0lELgorICogICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW50ZWdlcnMgbWFraW5nIHVwIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBwcmlvcml0eSAgIFJlZ2lzdHJhdGlvbiBwcmlvcml0eS4KKyAqICAgICAgICAgICAgICAgICAgICAgVXNlZCB0byBhY2hpZXZlIGEgZGVzaXJlZCBjb25maWd1cmF0aW9uIHdoZW4gZGlmZmVyZW50CisgKiAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25zIHJlZ2lzdGVyIGlkZW50aWNhbCBvciBvdmVybGFwcGluZyByZWdpb25zLgorICogICAgICAgICAgICAgICAgICAgICBQcmltYXJpbHkgdXNlZCB3aXRoIEFnZW50WCBzdWJhZ2VudCByZWdpc3RyYXRpb25zLgorICoKKyAqICBAcGFyYW0gcmFuZ2Vfc3ViaWQgSWYgbm9uLXplcm8sIHRoZSBtb2R1bGUgaXMgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgcmFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgb2YgT0lEcywgd2l0aCB0aGlzIHBhcmFtZXRlciBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQKKyAqICAgICAgICAgICAgICAgICAgICAgc3ViaWRlbnRpZmllciAtIHNlZSBSRkMgMjc0MSBmb3IgZGV0YWlscy4KKyAqICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5IHVzZWQgdG8gcmVnaXN0ZXIgYSBzaW5nbGUgcm93IG9mIGEgdGFibGUuCisgKiAgICAgICAgICAgICAgICAgICAgIElmIHplcm8sIHRoZW4gcmVnaXN0ZXIgdGhlIG1vZHVsZSBhZ2FpbnN0IHRoZSBmdWxsIE9JRCBzdWJ0cmVlLgorICoKKyAqICBAcGFyYW0gcmFuZ2VfdWJvdW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlIGJlaW5nIHJlZ2lzdGVyZWQgKHNlZSBSRkMgMjc0MSkKKyAqICAgICAgICAgICAgICAgICAgICAgSWYgcmFuZ2Vfc3ViaWQgaXMgemVybywgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorICoKKyAqICBAcGFyYW0gc3MgCisgKiAgQHBhcmFtIGNvbnRleHQKKyAqICBAcGFyYW0gdGltZW91dCAKKyAqICBAcGFyYW0gZmxhZ3MgCisgKgorICogIEByZXR1cm4gZ2l2ZXMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBFUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIHJlZ2lzdGVyX21pYigpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX3JhbmdlKCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiByZWdpc3Rlcl9taWJfY29udGV4dChjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICBvaWQgKiBtaWJsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBtaWJsb2MsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWlibG9jbGVuLAogICAgICAgICAgICAgICAgICAgICAgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlX3N1YmlkLApAQCAtODQ2LDEyICsxNDMyLDU4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBmbGFncyk7CiB9CiAKKy8qKiBSZWdpc3RlciBhIG5ldyBtb2R1bGUgaW50byB0aGUgTUlCIGRhdGFiYXNlLCBhcyBiZWluZyByZXNwb25zaWJsZQorICogICBmb3IgYSByYW5nZSBvZiBPSURzICh0eXBpY2FsbHkgYSBzaW5nbGUgcm93IG9mIGEgdGFibGUpLgorICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIHByaW9yaXR5ICAgUmVnaXN0cmF0aW9uIHByaW9yaXR5LgorICogICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMuCisgKiAgICAgICAgICAgICAgICAgICAgIFByaW1hcmlseSB1c2VkIHdpdGggQWdlbnRYIHN1YmFnZW50IHJlZ2lzdHJhdGlvbnMuCisgKgorICogIEBwYXJhbSByYW5nZV9zdWJpZCBJZiBub24temVybywgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkIGFnYWluc3QgYSByYW5nZQorICogICAgICAgICAgICAgICAgICAgICBvZiBPSURzLCB3aXRoIHRoaXMgcGFyYW1ldGVyIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudAorICogICAgICAgICAgICAgICAgICAgICBzdWJpZGVudGlmaWVyIC0gc2VlIFJGQyAyNzQxIGZvciBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHkgdXNlZCB0byByZWdpc3RlciBhIHNpbmdsZSByb3cgb2YgYSB0YWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgemVybywgdGhlbiByZWdpc3RlciB0aGUgbW9kdWxlIGFnYWluc3QgdGhlIGZ1bGwgT0lEIHN1YnRyZWUuCisgKgorICogIEBwYXJhbSByYW5nZV91Ym91bmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgYmVpbmcgcmVnaXN0ZXJlZCAoc2VlIFJGQyAyNzQxKQorICogICAgICAgICAgICAgICAgICAgICBJZiByYW5nZV9zdWJpZCBpcyB6ZXJvLCB0aGVuIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgKgorICogIEBwYXJhbSBzcyAKKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKi8KIGludAogcmVnaXN0ZXJfbWliX3JhbmdlKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWlibG9jbGVuLAogICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQpAQCAtODYxLDI3ICsxNDkzLDEwMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9zdWJpZCwgcmFuZ2VfdWJvdW5kLCBzcywgIiIsIC0xLCAwKTsKIH0KIAorLyoqIFJlZ2lzdGVyIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBNSUIgZGF0YWJhc2UsIHdpdGggYSBub24tZGVmYXVsdCBwcmlvcml0eQorICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIHByaW9yaXR5ICAgUmVnaXN0cmF0aW9uIHByaW9yaXR5LgorICogICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMuCisgKiAgICAgICAgICAgICAgICAgICAgIFByaW1hcmlseSB1c2VkIHdpdGggQWdlbnRYIHN1YmFnZW50IHJlZ2lzdHJhdGlvbnMuCisgKgorICogIEByZXR1cm4gZ2l2ZXMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBFUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIHJlZ2lzdGVyX21pYigpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcmFuZ2UoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICogIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICovCiBpbnQKIHJlZ2lzdGVyX21pYl9wcmlvcml0eShjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLAotICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5KQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5KQogewogICAgIHJldHVybiByZWdpc3Rlcl9taWJfcmFuZ2UobW9kdWxlTmFtZSwgdmFyLCB2YXJzaXplLCBudW12YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlibG9jLCBtaWJsb2NsZW4sIHByaW9yaXR5LCAwLCAwLCBOVUxMKTsKIH0KIAorLyoqIFJlZ2lzdGVyIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBNSUIgZGF0YWJhc2UsIHVzaW5nIGRlZmF1bHQgcHJpb3JpdHkgYW5kIGNvbnRleHQKKyAqCisgKiAgQHBhcmFtICBtb2R1bGVOYW1lIFRleHQgbmFtZSBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gbmFtZSB3aWxsIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZHVsZQorICogICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGFnZW50LgorICoKKyAqICBAcGFyYW0gIHZhciAgICAgICAgQXJyYXkgb2YgdmFyaWFibGVzIHRvIGJlIHJlZ2lzdGVyZWQgaW4gdGhlIG1vZHVsZS4KKyAqCisgKiAgQHBhcmFtICB2YXJzaXplICAgIFNpemUgb2YgYSBzaW5nbGUgdmFyaWFibGUgaW4gdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGUgc2l6ZSBpcyBub3JtYWxseSBlcXVhbCB0byBzaXplb2Yoc3RydWN0IHZhcmlhYmxlKSwKKyAqICAgICAgICAgICAgICAgICAgICAgYnV0IGlmIHdlIHdpc2ggdG8gdXNlIHNob3J0ZXIgKG9yIGxvbmdlcikgT0lEcywgdGhlbiB3ZQorICogICAgICAgICAgICAgICAgICAgICBjb3VsZCB1c2UgZGlmZmVyZW50IHZhcmlhbnQgb2YgdGhlIHZhcmlhYmxlIHN0cnVjdHVyZS4KKyAqCisgKiAgQHBhcmFtICBudW12YXJzICAgIE51bWJlciBvZiB2YXJpYWJsZXMgaW4gdGhlIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBob3cgbWFueSB2YXJpYWJsZXMgdGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIHJlZ2lzdGVyLgorICoKKyAqICBAcGFyYW0gIG1pYmxvYyAgICAgQmFzZSBPSUQgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgQWxsIE9JRHMgaW4gdmFyIGFycmF5IHNob3VsZCBiZSBzdWItb2lkcyBvZiB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgbWlibG9jbGVuICBMZW5ndGggb2YgdGhlIGJhc2UgT0lELgorICogICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW50ZWdlcnMgbWFraW5nIHVwIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKi8KIGludAogcmVnaXN0ZXJfbWliKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCi0gICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsIG9pZCAqIG1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbikKKyAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywgY29uc3Qgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuKQogewogICAgIHJldHVybiByZWdpc3Rlcl9taWJfcHJpb3JpdHkobW9kdWxlTmFtZSwgdmFyLCB2YXJzaXplLCBudW12YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlibG9jLCBtaWJsb2NsZW4sIERFRkFVTFRfTUlCX1BSSU9SSVRZKTsKIH0KIAorLyoqIEBwcml2YXRlCisgKiAgVW5sb2FkcyBhIHN1YnRyZWUgZnJvbSBNSUIgdHJlZS4KKyAqCisgKiAgQHBhcmFtICBzdWIgICAgIFRoZSBzdWItdHJlZSB3aGljaCBpcyBiZWluZyByZW1vdmVkLgorICoKKyAqICBAcGFyYW0gIHByZXYgICAgUHJldmlvdXMgZW50cnksIGJlZm9yZSB0aGUgdW5sb2FkZWQgb25lLgorICoKKyAqICBAcGFyYW0gIGNvbnRleHQgTmFtZSBvZiB0aGUgY29udGV4dCB3aGljaCBpcyBiZWluZyByZW1vdmVkLgorICoKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICovCiB2b2lkCiBuZXRzbm1wX3N1YnRyZWVfdW5sb2FkKG5ldHNubXBfc3VidHJlZSAqc3ViLCBuZXRzbm1wX3N1YnRyZWUgKnByZXYsIGNvbnN0IGNoYXIgKmNvbnRleHQpCiB7CkBAIC05MzcsMTAgKzE2NDMsMTAgQEAKIH0KIAogLyoqCi0gKiBVbnJlZ2lzdGVycyBhbiBPSUQgdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBjb250ZXh0IG5hbWUgdmFsdWUuIAotICogVHlwaWNhbGx5IHVzZWQgd2hlbiBhIG1vZHVsZSBoYXMgbXVsdGlwbGUgY29udGV4dHMgZGVmaW5lZC4gIFRoZSBwYXJhbWV0ZXJzCi0gKiBwcmlvcml0eSwgcmFuZ2Vfc3ViaWQsIGFuZCByYW5nZV91Ym91bmQgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAotICogYWdlbnR4LCBzZWUgUkZDIDI3NDEsIG90aGVyd2lzZSB0aGVzZSB2YWx1ZXMgc2hvdWxkIGFsd2F5cyBiZSAwLgorICogVW5yZWdpc3RlcnMgYSBtb2R1bGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgZ2l2ZW4gT0lEIChvciByYW5nZSkgaW4gYSBzcGVjaWZpZWQgY29udGV4dC4gCisgKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgbW9kdWxlIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLgorICogVGhlIHBhcmFtZXRlcnMgcHJpb3JpdHksIHJhbmdlX3N1YmlkLCByYW5nZV91Ym91bmQgYW5kIGNvbnRleHQKKyAqIHNob3VsZCBtYXRjaCB0aG9zZSB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBtb2R1bGUgb3JpZ2luYWxseS4KICAqCiAgKiBAcGFyYW0gbmFtZSAgdGhlIHNwZWNpZmljIE9JRCB0byB1bnJlZ2lzdGVyIGlmIGl0IGNvbmF0aW5zIHRoZSBhc3NvY2lhdGVkCiAgKiAgICAgICAgICAgICAgY29udGV4dC4KQEAgLTk2Miw4ICsxNjY4LDExIEBACiAgKgogICogQHBhcmFtIGNvbnRleHQgIGEgY29udGV4dCBuYW1lIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAogICoKLSAqIEByZXR1cm4gCisgKiBAcmV0dXJuIGdpdmVzIE1JQl9VTlJFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KICAqIAorICogQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcmFuZ2UoKQogICovCiBpbnQKIHVucmVnaXN0ZXJfbWliX2NvbnRleHQob2lkICogbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LApAQCAtOTc5LDcgKzE2ODgsNyBAQAogCiAgICAgbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemUoMCk7CiAKLSAgICBpZiAoKHJhbmdlX3N1YmlkICE9IDApICYmICAocmFuZ2Vfc3ViaWQgPD0gbGVuKSkKKyAgICBpZiAoKHJhbmdlX3N1YmlkID4gMCkgJiYgICgoc2l6ZV90KXJhbmdlX3N1YmlkIDw9IGxlbikpCiAgICAgICAgIG9yaWdfc3ViaWRfdmFsID0gbmFtZVtyYW5nZV9zdWJpZC0xXTsKIAogICAgIHdoaWxlKHVucmVnaXN0ZXJpbmcpewpAQCAtMTA2NCw2ICsxNzczLDcgQEAKICAgICByZXR1cm4gTUlCX1VOUkVHSVNURVJFRF9PSzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfTUlCX1RBQkxFX1JPVwogaW50CiBuZXRzbm1wX3VucmVnaXN0ZXJfbWliX3RhYmxlX3JvdyhvaWQgKiBuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFyX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLApAQCAtMTE0Miw3ICsxODUyLDM4IEBACiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfTUlCX1RBQkxFX1JPVyAqLwogCisvKioKKyAqIFVucmVnaXN0ZXJzIGEgbW9kdWxlIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIGdpdmVuIE9JRCAob3IgcmFuZ2UpIGluIHRoZSBkZWZhdWx0IGNvbnRleHQuIAorICogVHlwaWNhbGx5IHVzZWQgd2hlbiBhIG1vZHVsZSBoYXMgbXVsdGlwbGUgY29udGV4dHMgZGVmaW5lZC4KKyAqIFRoZSBwYXJhbWV0ZXJzIHByaW9yaXR5LCByYW5nZV9zdWJpZCwgYW5kIHJhbmdlX3Vib3VuZCBzaG91bGQKKyAqIG1hdGNoIHRob3NlIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIG1vZHVsZSBvcmlnaW5hbGx5LgorICoKKyAqIEBwYXJhbSBuYW1lICB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBsZW4gICB0aGUgbGVuZ3RoIG9mIHRoZSBPSUQsIHVzZSAgT0lEX0xFTkdUSCBtYWNyby4KKyAqCisgKiBAcGFyYW0gcHJpb3JpdHkgIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAyNTUsIHVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQKKyAqICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudCBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3IKKyAqICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmcgcmVnaW9ucy4gIFN1YmFnZW50cyB3aXRoIG5vIHBhcnRpY3VsYXIKKyAqICAgICAgICAgICAgICAgICAga25vd2xlZGdlIG9mIHByaW9yaXR5IHNob3VsZCByZWdpc3RlciB3aXRoIHRoZSBkZWZhdWx0CisgKiAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIDEyNy4KKyAqCisgKiBAcGFyYW0gcmFuZ2Vfc3ViaWQgIHBlcm1pdHMgc3BlY2lmeWluZyBhIHJhbmdlIGluIHBsYWNlIG9mIG9uZSBvZiBhIHN1YnRyZWUKKyAqICAgICAgICAgICAgICAgICAgICAgc3ViLWlkZW50aWZpZXJzLiAgV2hlbiB0aGlzIHZhbHVlIGlzIHplcm8sIG5vIHJhbmdlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHNwZWNpZmllZC4KKyAqCisgKiBAcGFyYW0gcmFuZ2VfdWJvdW5kICB0aGUgdXBwZXIgYm91bmQgb2YgYSBzdWItaWRlbnRpZmllcidzIHJhbmdlLgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBwcmVzZW50IG9ubHkgaWYgcmFuZ2Vfc3ViaWQgaXMgbm90IDAuCisgKgorICogQHJldHVybiBnaXZlcyBNSUJfVU5SRUdJU1RFUkVEX09LIG9yIE1JQl8qIGVycm9yIGNvZGUuCisgKiAKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICovCiBpbnQKIHVucmVnaXN0ZXJfbWliX3JhbmdlKG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCkKQEAgLTExNTEsMTggKzE4OTIsNjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV91Ym91bmQsICIiKTsKIH0KIAorLyoqCisgKiBVbnJlZ2lzdGVycyBhIG1vZHVsZSByZWdpc3RlcmVkIGFnYWluc3QgYSBnaXZlbiBPSUQgYXQgdGhlIHNwZWNpZmllZCBwcmlvcml0eS4KKyAqIFRoZSBwcmlvcml0eSBwYXJhbWV0ZXIgc2hvdWxkIG1hdGNoIHRoYXQgdXNlZCB0byByZWdpc3RlciB0aGUgbW9kdWxlIG9yaWdpbmFsbHkuCisgKgorICogQHBhcmFtIG5hbWUgIHRoZSBzcGVjaWZpYyBPSUQgdG8gdW5yZWdpc3RlciBpZiBpdCBjb25hdGlucyB0aGUgYXNzb2NpYXRlZAorICogICAgICAgICAgICAgIGNvbnRleHQuCisgKgorICogQHBhcmFtIGxlbiAgIHRoZSBsZW5ndGggb2YgdGhlIE9JRCwgdXNlICBPSURfTEVOR1RIIG1hY3JvLgorICoKKyAqIEBwYXJhbSBwcmlvcml0eSAgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDI1NSwgdXNlZCB0byBhY2hpZXZlIGEgZGVzaXJlZAorICogICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHdoZW4gZGlmZmVyZW50IHNlc3Npb25zIHJlZ2lzdGVyIGlkZW50aWNhbCBvcgorICogICAgICAgICAgICAgICAgICBvdmVybGFwcGluZyByZWdpb25zLiAgU3ViYWdlbnRzIHdpdGggbm8gcGFydGljdWxhcgorICogICAgICAgICAgICAgICAgICBrbm93bGVkZ2Ugb2YgcHJpb3JpdHkgc2hvdWxkIHJlZ2lzdGVyIHdpdGggdGhlIGRlZmF1bHQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgMTI3LgorICoKKyAqIEByZXR1cm4gZ2l2ZXMgTUlCX1VOUkVHSVNURVJFRF9PSyBvciBNSUJfKiBlcnJvciBjb2RlLgorICogCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcmFuZ2UoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqLwogaW50CiB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eShvaWQgKiBuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHkpCiB7CiAgICAgcmV0dXJuIHVucmVnaXN0ZXJfbWliX3JhbmdlKG5hbWUsIGxlbiwgcHJpb3JpdHksIDAsIDApOwogfQogCisvKioKKyAqIFVucmVnaXN0ZXJzIGEgbW9kdWxlIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIGdpdmVuIE9JRCBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eS4KKyAqCisgKiBAcGFyYW0gbmFtZSAgdGhlIHNwZWNpZmljIE9JRCB0byB1bnJlZ2lzdGVyIGlmIGl0IGNvbmF0aW5zIHRoZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gbGVuICAgdGhlIGxlbmd0aCBvZiB0aGUgT0lELCB1c2UgIE9JRF9MRU5HVEggbWFjcm8uCisgKgorICogQHJldHVybiBnaXZlcyBNSUJfVU5SRUdJU1RFUkVEX09LIG9yIE1JQl8qIGVycm9yIGNvZGUuCisgKiAKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcmFuZ2UoKQorICogQHNlZSB1bnJlZ2lzdGVyX2FnZW50eF9saXN0KCkKKyAqLwogaW50CiB1bnJlZ2lzdGVyX21pYihvaWQgKiBuYW1lLCBzaXplX3QgbGVuKQogewogICAgIHJldHVybiB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eShuYW1lLCBsZW4sIERFRkFVTFRfTUlCX1BSSU9SSVRZKTsKIH0KIAorLyoqIFVucmVnaXN0ZXJzIHN1YnRyZWUgb2YgT0lEcyBib3VuZGVkIHRvIGdpdmVuIHNlc3Npb24uCisgKgorICogIEBwYXJhbSBzcyBTZXNzaW9uIHdoaWNoIE9JRHMgd2lsbCBiZSByZW1vdmVkIGZyb20gdHJlZS4KKyAqCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX2FnZW50eF9saXN0KCkKKyAqLwogdm9pZAogdW5yZWdpc3Rlcl9taWJzX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc3MpCiB7CkBAIC0xMjI0LDE1ICsyMDA4LDIxIEBACiAgICAgfQogfQogCi0vKgotICogaW5fYV92aWV3OiBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gc25tcF9wZHUgaXMgYWxsb3dlZCB0byBzZWUgYQotICogZ2l2ZW4gbmFtZS9uYW1lbGVuIE9JRCBwb2ludGVyCi0gKiBuYW1lICAgICAgICAgSU4gLSBuYW1lIG9mIHZhciwgT1VUIC0gbmFtZSBtYXRjaGVkCi0gKiBuYW1lTGVuICAgICAgSU4gLW51bWJlciBvZiBzdWItaWRzIGluIG5hbWUsIE9VVCAtIHN1YmlkLWlzIGluIG1hdGNoZWQgbmFtZQotICogcGkgICAgICAgICAgIElOIC0gcmVsZXZhbnQgYXV0aCBpbmZvIHJlIFBEVSAKLSAqIGN2cCAgICAgICAgICBJTiAtIHJlbGV2YW50IGF1dGggaW5mbyByZSBtaWIgbW9kdWxlCisvKiogRGV0ZXJtaW5lcyBpZiBnaXZlbiBQRFUgaXMgYWxsb3dlZCB0byBzZWUgKG9yIHVwZGF0ZSkgYSBnaXZlbiBPSUQuCisgKgorICogQHBhcmFtIG5hbWUgICAgVGhlIE9JRCB0byBjaGVjayBhY2Nlc3MgZm9yLgorICogICAgICAgICAgICAgICAgT24gcmV0dXJuLCB0aGlzIHBhcmFtZXRlciBob2xkcyB0aGUgT0lEIGFjdHVhbGx5IG1hdGNoZWQKKyAqCisgKiBAcGFyYW0gbmFtZWxlbiBOdW1iZXIgb2Ygc3ViLWlkZW50aWZpZXJzIGluIHRoZSBPSUQuCisgKiAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHRoaXMgcGFyYW1ldGVyIGhvbGRzIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgT0lECisgKgorICogQHBhcmFtIHBkdSAgICAgUERVIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBPSUQuCisgKgorICogQHBhcmFtIHR5cGUgICAgQU5TLjEgdHlwZSBvZiB0aGUgdmFsdWUgYXQgZ2l2ZW4gT0lELgorICogICAgICAgICAgICAgICAgKFVzZWQgZm9yIGNhdGNoaW5nIFNOTVB2MSByZXF1ZXN0cyBmb3IgU01JdjItb25seSBvYmplY3RzKQorICoKKyAqIEByZXR1cm4gZ2l2ZXMgVkFDTV9TVUNDRVNTIGlmIHRoZSBPSUQgaXMgaW4gdGhlIFBEVSwgb3RoZXJ3aXNlIGVycm9yIGNvZGUuCiAgKi8KLQogaW50CiBpbl9hX3ZpZXcob2lkICpuYW1lLCBzaXplX3QgKm5hbWVsZW4sIG5ldHNubXBfcGR1ICpwZHUsIGludCB0eXBlKQogewpAQCAtMTI3NywxNyArMjA2NywyMiBAQAogICAgIHJldHVybiBWQUNNX05PU0VDTkFNRTsKIH0KIAotLyoKLSAqIGNoZWNrX2FjY2VzOiBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gc25tcF9wZHUgaXMgZXZlciBnb2luZyB0byBiZQotICogYWxsb3dlZCB0byBkbyBhbnludGhpbmcgb3IgaWYgaXQncyBub3QgZ29pbmcgdG8gZXZlciBiZQotICogYXV0aGVudGljYXRlZC4KKy8qKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBQRFUgcmVxdWVzdCBjb3VsZCBwb3RlbnRpYWxseSBzdWNjZWVkLgorICogIChQcmVsaW1pbmFyeSwgT0lELWluZGVwZW5kZW50IHZhbGlkYXRpb24pCisgKgorICogQHBhcmFtIHBkdSAgICAgUERVIHJlcXVlc3RpbmcgYWNjZXNzCisgKgorICogQHJldHVybiBnaXZlcyBWQUNNX1NVQ0NFU1MgICBpZiB0aGUgZW50aXJlIE1JQiB0cmVlIGlzIGFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9OT1RJTlZJRVcgaWYgdGhlIGVudGlyZSBNSUIgdHJlZSBpcyBpbmFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9TVUJUUkVFX1VOS05PV04gaWYgc29tZSBwb3J0aW9ucyBhcmUgYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBvdGhlciBjb2RlcyBtYXkgcmV0dXJuZWQgb24gZXJyb3IKICAqLwogaW50CiBjaGVja19hY2Nlc3MobmV0c25tcF9wZHUgKnBkdSkKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU4gLSBwZHUgYmVpbmcgY2hlY2tlZCAqLwogICAgIHN0cnVjdCB2aWV3X3BhcmFtZXRlcnMgdmlld19wYXJtczsKICAgICB2aWV3X3Bhcm1zLnBkdSA9IHBkdTsKLSAgICB2aWV3X3Bhcm1zLm5hbWUgPSAwOworICAgIHZpZXdfcGFybXMubmFtZSA9IE5VTEw7CiAgICAgdmlld19wYXJtcy5uYW1lbGVuID0gMDsKICAgICB2aWV3X3Bhcm1zLmVycm9yY29kZSA9IDA7CiAgICAgdmlld19wYXJtcy5jaGVja19zdWJ0cmVlID0gMDsKQEAgLTEzMTIsMTIgKzIxMDcsMTkgQEAKICAgICByZXR1cm4gMTsKIH0KIAotLyoqIGNoZWNrcyB0byBzZWUgaWYgZXZlcnl0aGluZyB3aXRoaW4gYQotICogIGdpdmVuIHN1YnRyZWUgaXMgZWl0aGVyOiBpbiB2aWV3LCBub3QgaW4gdmlldywgb3IgcG9zc2libHkgYm90aC4KLSAqICBJZiB0aGUgZW50aXJlIHN1YnRyZWUgaXMgbm90LWluLXZpZXcgd2UgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvCi0gKiAgc2tpcCBjYWxsaW5nIHRoZSBzdWItaGFuZGxlcnMgZW50aXJlbHkuCi0gKiAgQHJldHVybnMgMCBpZiBlbnRpcmUgc3VidHJlZSBpcyBhY2Nlc3NpYmxlLCA1IGlmIG5vdCBhbmQgNyBpZgotICogIHBvcnRpb25zIGFyZSBib3RoLiAgMSBvbiBlcnJvciAoaWxsZWdhbCBwZHUgdmVyc2lvbikuCisvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gUERVIHJlcXVlc3QgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzCisgKiAgIHRoZSBzcGVjaWZpZWQgTUlCIHN1YnRyZWUKKyAqCisgKiBAcGFyYW0gcGR1ICAgICBQRFUgcmVxdWVzdGluZyBhY2Nlc3MKKyAqCisgKiBAcGFyYW0gbmFtZSAgICBUaGUgT0lEIHRvIGNoZWNrIGFjY2VzcyBmb3IuCisgKgorICogQHBhcmFtIG5hbWVsZW4gTnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyBpbiB0aGUgT0lELgorICoKKyAqIEByZXR1cm4gZ2l2ZXMgVkFDTV9TVUNDRVNTICAgaWYgdGhlIGVudGlyZSBNSUIgdHJlZSBpcyBhY2Nlc3NpYmxlCisgKiAgICAgICAgICAgICAgIFZBQ01fTk9USU5WSUVXIGlmIHRoZSBlbnRpcmUgTUlCIHRyZWUgaXMgaW5hY2Nlc3NpYmxlCisgKiAgICAgICAgICAgICAgIFZBQ01fU1VCVFJFRV9VTktOT1dOIGlmIHNvbWUgcG9ydGlvbnMgYXJlIGFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgb3RoZXIgY29kZXMgbWF5IHJldHVybmVkIG9uIGVycm9yCiAgKi8KIGludAogbmV0c25tcF9hY21fY2hlY2tfc3VidHJlZShuZXRzbm1wX3BkdSAqcGR1LCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQpAQCAtMTM0OSwyNDkgKzIxNTEsMTAgQEAKICAgICByZXR1cm4gMTsKIH0KIAotI2RlZmluZSBTVUJUUkVFX0RFRkFVTFRfQ0FDSEVfU0laRSA4Ci0jZGVmaW5lIFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkUgICAgIDMyCi1pbnQgbG9va3VwX2NhY2hlX3NpemUgPSAwOyAvKmVuYWJsZWQgbGF0ZXIgYWZ0ZXIgcmVnaXN0cmF0aW9ucyBhcmUgbG9hZGVkICovCi0KLXR5cGVkZWYgc3RydWN0IGxvb2t1cF9jYWNoZV9zIHsKLSAgIG5ldHNubXBfc3VidHJlZSAqbmV4dDsKLSAgIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXM7Ci19IGxvb2t1cF9jYWNoZTsKLQotdHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2NhY2hlX2NvbnRleHRfcyB7Ci0gICBjaGFyICpjb250ZXh0OwotICAgc3RydWN0IGxvb2t1cF9jYWNoZV9jb250ZXh0X3MgKm5leHQ7Ci0gICBpbnQgdGhlY2FjaGVjb3VudDsKLSAgIGludCBjdXJyZW50cG9zOwotICAgbG9va3VwX2NhY2hlIGNhY2hlW1NVQlRSRUVfTUFYX0NBQ0hFX1NJWkVdOwotfSBsb29rdXBfY2FjaGVfY29udGV4dDsKLQotc3RhdGljIGxvb2t1cF9jYWNoZV9jb250ZXh0ICp0aGVjb250ZXh0Y2FjaGUgPSBOVUxMOwotCi0vKiogc2V0IHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBmb3Igb3B0aW1pemVkIGFnZW50IHJlZ2lzdHJhdGlvbiBwZXJmb3JtYW5jZS4KLSAqIEBwYXJhbSBuZXdzaXplIHNldCB0byB0aGUgbWF4aW11bSBzaXplIG9mIGEgY2FjaGUgZm9yIGEgZ2l2ZW4KLSAqIGNvbnRleHQuICBTZXQgdG8gMCB0byBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgb3IgdG8gLTEgdG8gc2V0Ci0gKiB0byB0aGUgZGVmYXVsdCBjYWNoZSBzaXplICg4KSwgb3IgdG8gYSBudW1iZXIgb2YgeW91ciBjaG9zaW5nLiAgVGhlCi0gKiByb3VnaCBndWlkZSBpcyB0aGF0IGl0IHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YKLSAqIHNpbXVsdGFuaW91cyBtYW5hZ2VycyB5b3UgZXhwZWN0IHRvIHRhbGsgdG8gdGhlIGFnZW50IChNKSB0aW1lcyA4MCUKLSAqIChvciBzbywgaGUgc2F5cyByYW5kb21seSkgdGhlIGF2ZXJhZ2UgbnVtYmVyIChOKSBvZiB2YXJiaW5kcyB5b3UKLSAqIGV4cGVjdCB0byByZWNlaXZlIGluIGEgZ2l2ZW4gcmVxdWVzdCBmb3IgYSBtYW5hZ2VyLiAgaWUsIE0gdGltZXMgTi4KLSAqIEJpZ2dlciBkb2VzIE5PVCBuZWNlc3NhcmlseSBtZWFuIGJldHRlci4gIENlcnRhaW5seSAxNiBzaG91bGQgYmUgYW4KLSAqIHVwcGVyIGxpbWl0LiAgMzIgaXMgdGhlIGhhcmQgY29kZWQgbGltaXQuCi0gKi8KLXZvaWQKLW5ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplKGludCBuZXdzaXplKSB7Ci0gICAgaWYgKG5ld3NpemUgPCAwKQotICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFOwotICAgIGVsc2UgaWYgKG5ld3NpemUgPCBTVUJUUkVFX01BWF9DQUNIRV9TSVpFKQotICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IG5ld3NpemU7Ci0gICAgZWxzZQotICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkU7Ci19Ci0KLS8qKiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvb2t1cCBjYWNoZSBzaXplCi0gKiAgQHJldHVybiB0aGUgY3VycmVudCBsb29rdXAgY2FjaGUgc2l6ZQotICovCi1pbnQKLW5ldHNubXBfZ2V0X2xvb2t1cF9jYWNoZV9zaXplKHZvaWQpIHsKLSAgICByZXR1cm4gbG9va3VwX2NhY2hlX3NpemU7Ci19Ci0KLU5FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGVfY29udGV4dCAqCi1nZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCkgewotICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHI7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICBjb250ZXh0ID0gIiI7Ci0KLSAgICBmb3IocHRyID0gdGhlY29udGV4dGNhY2hlOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAoc3RyY21wKHB0ci0+Y29udGV4dCwgY29udGV4dCkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIXB0cikgewotICAgICAgICBpZiAobmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dCkpIHsKLSAgICAgICAgICAgIHB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYobG9va3VwX2NhY2hlX2NvbnRleHQpOwotICAgICAgICAgICAgcHRyLT5uZXh0ID0gdGhlY29udGV4dGNhY2hlOwotICAgICAgICAgICAgcHRyLT5jb250ZXh0ID0gc3RyZHVwKGNvbnRleHQpOwotICAgICAgICAgICAgdGhlY29udGV4dGNhY2hlID0gcHRyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKLWxvb2t1cF9jYWNoZV9hZGQoY29uc3QgY2hhciAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0LCBuZXRzbm1wX3N1YnRyZWUgKnByZXZpb3VzKSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7Ci0KLSAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoY3B0ci0+dGhlY2FjaGVjb3VudCA8IGxvb2t1cF9jYWNoZV9zaXplKQotICAgICAgICBjcHRyLT50aGVjYWNoZWNvdW50Kys7Ci0KLSAgICBjcHRyLT5jYWNoZVtjcHRyLT5jdXJyZW50cG9zXS5uZXh0ID0gbmV4dDsKLSAgICBjcHRyLT5jYWNoZVtjcHRyLT5jdXJyZW50cG9zXS5wcmV2aW91cyA9IHByZXZpb3VzOwotCi0gICAgaWYgKCsrY3B0ci0+Y3VycmVudHBvcyA+PSBsb29rdXBfY2FjaGVfc2l6ZSkKLSAgICAgICAgY3B0ci0+Y3VycmVudHBvcyA9IDA7Ci19Ci0KLU5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCi1sb29rdXBfY2FjaGVfcmVwbGFjZShsb29rdXBfY2FjaGUgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV4dCwgbmV0c25tcF9zdWJ0cmVlICpwcmV2aW91cykgewotCi0gICAgcHRyLT5uZXh0ID0gbmV4dDsKLSAgICBwdHItPnByZXZpb3VzID0gcHJldmlvdXM7Ci19Ci0KLU5FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGUgKgotbG9va3VwX2NhY2hlX2ZpbmQoY29uc3QgY2hhciAqY29udGV4dCwgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sCi0gICAgICAgICAgICAgICAgICBpbnQgKnJldGNtcCkgewotICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpjcHRyOwotICAgIGxvb2t1cF9jYWNoZSAqcmV0ID0gTlVMTDsKLSAgICBpbnQgY21wOwotICAgIGludCBpOwotCi0gICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvcihpID0gMDsgaSA8IGNwdHItPnRoZWNhY2hlY291bnQgJiYgaSA8IGxvb2t1cF9jYWNoZV9zaXplOyBpKyspIHsKLSAgICAgICAgaWYgKGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9hKQotICAgICAgICAgICAgY21wID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCBuYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9sZW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbXAgPSAxOwotICAgICAgICBpZiAoY21wID49IDApIHsKLSAgICAgICAgICAgICpyZXRjbXAgPSBjbXA7Ci0gICAgICAgICAgICByZXQgPSAmKGNwdHItPmNhY2hlW2ldKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAotaW52YWxpZGF0ZV9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCkgewotICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpjcHRyOwotICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgIT0gTlVMTCkgewotICAgICAgICBjcHRyLT50aGVjYWNoZWNvdW50ID0gMDsKLSAgICAgICAgY3B0ci0+Y3VycmVudHBvcyA9IDA7Ci0gICAgfQotfQotCi1uZXRzbm1wX3N1YnRyZWUgKgotbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihvaWQgKm5hbWUsIHNpemVfdCBsZW4sIG5ldHNubXBfc3VidHJlZSAqc3VidHJlZSwKLQkJCSAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQotewotICAgIGxvb2t1cF9jYWNoZSAqbG9va3VwX2NhY2hlID0gTlVMTDsKLSAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyID0gTlVMTCwgKnByZXZpb3VzID0gTlVMTDsKLSAgICBpbnQgY21wID0gMTsKLSAgICBzaXplX3QgbGxfb2ZmID0gMDsKLQotICAgIGlmIChzdWJ0cmVlKSB7Ci0gICAgICAgIG15cHRyID0gc3VidHJlZTsKLSAgICB9IGVsc2UgewotCS8qIGxvb2sgdGhyb3VnaCBldmVyeXRoaW5nICovCi0gICAgICAgIGlmIChsb29rdXBfY2FjaGVfc2l6ZSkgewotICAgICAgICAgICAgbG9va3VwX2NhY2hlID0gbG9va3VwX2NhY2hlX2ZpbmQoY29udGV4dF9uYW1lLCBuYW1lLCBsZW4sICZjbXApOwotICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZSkgewotICAgICAgICAgICAgICAgIG15cHRyID0gbG9va3VwX2NhY2hlLT5uZXh0OwotICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbG9va3VwX2NhY2hlLT5wcmV2aW91czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbXlwdHIpCi0gICAgICAgICAgICAgICAgbXlwdHIgPSBuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0X25hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbXlwdHIgPSBuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0X25hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiB0aGlzIG9wdGltaXphdGlvbiBjYXVzZXMgYSBzZWdmYXVsdCBvbiBzZiBjZiBhbHBoYS1saW51eDEuCi0gICAgICogaWZkZWYgb3V0IHVudGlsIHNvbWVvbmUgZmlndXJlcyBvdXQgd2h5IGFuZCBmaXhlcyBpdC4geHh4LXJrcyAyMDA1MTExNwotICAgICAqLwotI2lmbmRlZiBfX2FscGhhCi0jZGVmaW5lIFdURVNUX09QVElNSVpBVElPTiAxCi0jZW5kaWYKLSNpZmRlZiBXVEVTVF9PUFRJTUlaQVRJT04KLSAgICBERUJVR01TR1RMKCgid3Rlc3QiLCJvaWQgaW46ICIpKTsKLSAgICBERUJVR01TR09JRCgoInd0ZXN0IiwgbmFtZSwgbGVuKSk7Ci0gICAgREVCVUdNU0coKCJ3dGVzdCIsIlxuIikpOwotI2VuZGlmCi0gICAgZm9yICg7IG15cHRyICE9IE5VTEw7IHByZXZpb3VzID0gbXlwdHIsIG15cHRyID0gbXlwdHItPm5leHQpIHsKLSNpZmRlZiBXVEVTVF9PUFRJTUlaQVRJT04KLSAgICAgICAgLyogQ29tcGFyZSB0aGUgaW5jb21pbmcgb2lkIHdpdGggdGhlIGxpbmtlZCBsaXN0LiAgSWYgd2UgaGF2ZQotICAgICAgICAgICByZXN1bHRzIG9mIHByZXZpb3VzIGNvbXBhcmVzLCBpdHMgZmFzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKLSAgICAgICAgICAgbGVuZ3RoIHdlIGRpZmZlcmVkIGluIHRoZSBsYXN0IGNoZWNrIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLSAgICAgICAgICAgbGVuZ3RoIGJldHdlZW4gdGhpcyBwb2ludGVyIGFuZCB0aGUgbGFzdCB0aGVuIHdlIGRvbid0IG5lZWQKLSAgICAgICAgICAgdG8gYWN0dWFsbHkgcGVyZm9ybSBhIGNvbXBhcmlzb24gKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInd0ZXN0Iiwib2lkIGNtcDogIikpOwotICAgICAgICBERUJVR01TR09JRCgoInd0ZXN0IiwgbXlwdHItPnN0YXJ0X2EsIG15cHRyLT5zdGFydF9sZW4pKTsKLSAgICAgICAgREVCVUdNU0coKCJ3dGVzdCIsIiAgLS0tIG9mZiA9ICVkLCBpbiBvZmYgPSAlZCB0ZXN0ID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICBteXB0ci0+b2lkX29mZiwgbGxfb2ZmLAotICAgICAgICAgICAgICAgICAgIShsbF9vZmYgJiYgbXlwdHItPm9pZF9vZmYgJiYKLSAgICAgICAgICAgICAgICAgICAgbXlwdHItPm9pZF9vZmYgPiBsbF9vZmYpKSk7Ci0gICAgICAgIGlmICghKGxsX29mZiAmJiBteXB0ci0+b2lkX29mZiAmJiBteXB0ci0+b2lkX29mZiA+IGxsX29mZikgJiYKLSAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwobmFtZSwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxsX29mZikgPCAwKSB7Ci0jZWxzZQotICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuKSA8IDApIHsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplICYmIHByZXZpb3VzICYmIGNtcCkgewotICAgICAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9va3VwX2NhY2hlX3JlcGxhY2UobG9va3VwX2NhY2hlLCBteXB0ciwgcHJldmlvdXMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvb2t1cF9jYWNoZV9hZGQoY29udGV4dF9uYW1lLCBteXB0ciwgcHJldmlvdXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJldmlvdXM7Ci19Ci0KLW5ldHNubXBfc3VidHJlZSAqCi1uZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0KG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwKLQkJCSAgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgbmV0c25tcF9zdWJ0cmVlICpteXB0ciA9IE5VTEw7Ci0KLSAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOwotCi0gICAgaWYgKG15cHRyICE9IE5VTEwpIHsKLSAgICAgICAgbXlwdHIgPSBteXB0ci0+bmV4dDsKLSAgICAgICAgd2hpbGUgKG15cHRyICE9IE5VTEwgJiYgKG15cHRyLT52YXJpYWJsZXMgPT0gTlVMTCB8fCAKLQkJCQkgbXlwdHItPnZhcmlhYmxlc19sZW4gPT0gMCkpIHsKLSAgICAgICAgICAgIG15cHRyID0gbXlwdHItPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG15cHRyOwotICAgIH0gZWxzZSBpZiAoc3VidHJlZSAhPSBOVUxMICYmIHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbGVuLCAKLQkJCQkgICBzdWJ0cmVlLT5zdGFydF9hLCBzdWJ0cmVlLT5zdGFydF9sZW4pIDwgMCkgewotICAgICAgICByZXR1cm4gc3VidHJlZTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLW5ldHNubXBfc3VidHJlZSAqCi1uZXRzbm1wX3N1YnRyZWVfZmluZChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIG5ldHNubXBfc3VidHJlZSAqc3VidHJlZSwgCi0JCSAgICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQotewotICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHI7Ci0KLSAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOwotICAgIGlmIChteXB0ciAmJiBteXB0ci0+ZW5kX2EgJiYKLSAgICAgICAgc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5lbmRfYSwgbXlwdHItPmVuZF9sZW4pPDApIHsKLSAgICAgICAgcmV0dXJuIG15cHRyOwotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZ2V0X3Nlc3Npb25fZm9yX29pZCxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfU0VTU0lPTl9GT1JfT0lECiBuZXRzbm1wX3Nlc3Npb24gKgotZ2V0X3Nlc3Npb25fZm9yX29pZChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK2dldF9zZXNzaW9uX2Zvcl9vaWQoY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCiB7CiAgICAgbmV0c25tcF9zdWJ0cmVlICpteXB0cjsKIApAQCAtMTYwOSw2ICsyMTcyLDcgQEAKICAgICAgICAgcmV0dXJuIG15cHRyLT5zZXNzaW9uOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9TRVNTSU9OX0ZPUl9PSUQgKi8KIAogdm9pZAogc2V0dXBfdHJlZSh2b2lkKQpAQCAtMTY2OCw2MyArMjIzMiw2IEBACiAKIH0KIAotdm9pZAotY2xlYXJfc3VidHJlZSAobmV0c25tcF9zdWJ0cmVlICpzdWIpIHsKLQotICAgIG5ldHNubXBfc3VidHJlZSAqYzsKLSAgICAKLSAgICBpZiAoc3ViID09IE5VTEwpCi0JcmV0dXJuOwotCi0gICAgZm9yKGMgPSBzdWI7IGM7KSB7Ci0gICAgICAgIHN1YiA9IGM7Ci0gICAgICAgIGMgPSBjLT5jaGlsZHJlbjsKLSAgICAgICAgbmV0c25tcF9zdWJ0cmVlX2ZyZWUoc3ViKTsKLSAgICB9Ci0KLX0KLQotdm9pZAotY2xlYXJfbG9va3VwX2NhY2hlKHZvaWQpIHsKLQotICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7Ci0KLSAgICBwdHIgPSB0aGVjb250ZXh0Y2FjaGU7Ci0gICAgd2hpbGUgKHB0cikgewotCW5leHQgPSBwdHItPm5leHQ7Ci0JU05NUF9GUkVFKHB0ci0+Y29udGV4dCk7Ci0JU05NUF9GUkVFKHB0cik7Ci0JcHRyID0gbmV4dDsKLSAgICB9Ci0gICAgdGhlY29udGV4dGNhY2hlID0gTlVMTDsgLyogISEhICovCi19Ci0KLXZvaWQKLWNsZWFyX2NvbnRleHQodm9pZCkgewotCi0gICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7Ci0gICAgbmV0c25tcF9zdWJ0cmVlICp0LCAqdTsKLQotICAgIERFQlVHTVNHVEwoKCJhZ2VudF9yZWdpc3RyeSIsICJjbGVhciBjb250ZXh0XG4iKSk7Ci0KLSAgICBwdHIgPSBnZXRfdG9wX2NvbnRleHRfY2FjaGUoKTsgCi0gICAgd2hpbGUgKHB0cikgewotCW5leHQgPSBwdHItPm5leHQ7Ci0KLQlmb3IgKHQgPSBwdHItPmZpcnN0X3N1YnRyZWU7IHQ7IHQgPSB1KSB7Ci0gICAgICAgICAgICB1ID0gdC0+bmV4dDsKLQkgICAgY2xlYXJfc3VidHJlZSh0KTsKLQl9Ci0KLQlTTk1QX0ZSRUUocHRyLT5jb250ZXh0X25hbWUpOwotICAgICAgICBTTk1QX0ZSRUUocHRyKTsKLQotCXB0ciA9IG5leHQ7Ci0gICAgfQotICAgIGNvbnRleHRfc3VidHJlZXMgPSBOVUxMOyAvKiAhISEgKi8KLSAgICBjbGVhcl9sb29rdXBfY2FjaGUoKTsKLX0KLQogZXh0ZXJuIHZvaWQgICAgIGR1bXBfaWR4X3JlZ2lzdHJ5KHZvaWQpOwogdm9pZAogZHVtcF9yZWdpc3RyeSh2b2lkKQpAQCAtMTc3OSw3ICsyMjg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKG15cHRyMi0+bGFiZWxfYSAmJiBteXB0cjItPmxhYmVsX2FbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAobXlwdHIyLT5sYWJlbF9hLCAib2xkX2FwaSIpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZwID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlwdHIyLT5yZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUqKW15cHRyMi0+cmVnaW5mby0+aGFuZGxlci0+bXl2b2lkOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcHJpbnRfcmVhbGxvY19vYmppZCgmcywgJnNsLCAmc2xfbywgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+bmFtZSwgdnAtPm5hbWVsZW4pKSB7CkBAIC0xODAxLDE5ICsyMzA4LDI3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRShzKTsKLSAgICB9Ci0gICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUoZSk7Ci0gICAgfQotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHYpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUocyk7CisgICAgU05NUF9GUkVFKGUpOworICAgIFNOTVBfRlJFRSh2KTsKIAogICAgIGR1bXBfaWR4X3JlZ2lzdHJ5KCk7CiB9CiAKKy8qKiAgQH0gKi8KKy8qIEVuZCBvZiBNSUIgcmVnaXN0cmF0aW9uIGNvZGUgKi8KKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfc2lnbmFsLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TSUdOQUwKKworLyoqIEBkZWZncm91cCBhZ2VudF9zaWduYWxzIFBPU0lYIHNpZ25hbHMgc3VwcG9ydCBmb3IgYWdlbnRzLgorICogICAgIFJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIHNpZ25hbCBoYW5kbGVycy4KKyAqICAgQGluZ3JvdXAgYWdlbnRfcmVnaXN0cnkKKyAqCisgKiBAeworICovCisKIGludCAgICAgICAgICAgICBleHRlcm5hbF9zaWduYWxfc2NoZWR1bGVkW05VTV9FWFRFUk5BTF9TSUdTXTsKIHZvaWQgICAgICAgICAgICAoKmV4dGVybmFsX3NpZ25hbF9oYW5kbGVyW05VTV9FWFRFUk5BTF9TSUdTXSkgKGludCk7CiAKQEAgLTE4MzgsNiArMjM1MywyMCBAQAogI2VuZGlmCiB9CiAKKy8qKiBSZWdpc3RlcnMgYSBQT1NJWCBTaWduYWwgaGFuZGxlci4KKyAqICBJbXBsZW1lbnRzIHRoZSBzaWduYWwgcmVnaXN0ZXJpbmcgcHJvY2VzcyBmb3IgUE9TSVggYW5kIG5vbi1QT1NJWAorICogIHN5c3RlbXMuIEFsc28sIHVuaWZpZXMgdGhlIHdheSBzaWduYWxzIHdvcmsuCisgKiAgTm90ZSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciBzaG91bGQgcmVnaXN0ZXIgaXRzZWxmIGFnYWluIHdpdGgKKyAqICBzaWduYWwoKSBjYWxsIGJlZm9yZSBlbmQgb2YgZXhlY3V0aW9uIHRvIHByZXZlbnQgcG9zc2libGUgcHJvYmxlbXMuCisgKgorICogIEBwYXJhbSBzaWcgUE9TSVggU2lnbmFsIElEIG51bWJlciwgYXMgZGVmaW5lZCBpbiBzaWduYWwuaC4KKyAqCisgKiAgQHBhcmFtIGZ1bmMgTmV3IHNpZ25hbCBoYW5kbGVyIGZ1bmN0aW9uLgorICoKKyAqICBAcmV0dXJuIHZhbHVlIGlzIFNJR19SRUdJU1RFUkVEX09LIGZvciBzdWNjZXNzIGFuZAorICogICAgICAgIFNJR19SRUdJU1RSQVRJT05fRkFJTEVEIGlmIHRoZSByZWdpc3RyYXRpb24gY2FuJ3QKKyAqICAgICAgICBiZSBoYW5kbGVkLgorICovCiBpbnQKIHJlZ2lzdGVyX3NpZ25hbChpbnQgc2lnLCB2b2lkICgqZnVuYykgKGludCkpCiB7CkBAIC0xODcxLDYgKzI0MDAsMTIgQEAKICAgICByZXR1cm4gU0lHX1JFR0lTVEVSRURfT0s7CiB9CiAKKy8qKiBVbnJlZ2lzdGVycyBhIFBPU0lYIFNpZ25hbCBoYW5kbGVyLgorICoKKyAqICBAcGFyYW0gc2lnIFBPU0lYIFNpZ25hbCBJRCBudW1iZXIsIGFzIGRlZmluZWQgaW4gc2lnbmFsLmguCisgKgorICogIEByZXR1cm4gdmFsdWUgaXMgU0lHX1VOUkVHSVNURVJFRF9PSyBmb3Igc3VjY2Vzcywgb3IgZXJyb3IgY29kZS4KKyAqLwogaW50CiB1bnJlZ2lzdGVyX3NpZ25hbChpbnQgc2lnKQogewpAQCAtMTg4MiwzICsyNDE3LDkgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIVdJTjMyICovCiAKIC8qKiAgQH0gKi8KKy8qIEVuZCBvZiBzaWduYWxzIHN1cHBvcnQgY29kZSAqLworCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TSUdOQUwgKi8KKworLyoqICBAfSAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMgYi9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyODA2MAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L2FnZW50X3N5c09SVGFibGUuYwpAQCAtMCwwICsxLDIzNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgZGF0YV9ub2RlX3MgeworICAgIHN0cnVjdCBzeXNPUlRhYmxlIGRhdGE7CisgICAgc3RydWN0IGRhdGFfbm9kZV9zKiBuZXh0OworICAgIHN0cnVjdCBkYXRhX25vZGVfcyogcHJldjsKK30qIGRhdGFfbm9kZTsKKworc3RhdGljIGRhdGFfbm9kZSB0YWJsZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitlcmFzZShkYXRhX25vZGUgZW50cnkpCit7CisgICAgZW50cnktPmRhdGEuT1JfdXB0aW1lID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiVU5SRUdfU1lTT1IgJXBcbiIsICZlbnRyeS0+ZGF0YSkpOworICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnktPmRhdGEpOworICAgIGZyZWUoZW50cnktPmRhdGEuT1Jfb2lkKTsKKyAgICBmcmVlKGVudHJ5LT5kYXRhLk9SX2Rlc2NyKTsKKyAgICBpZiAoZW50cnktPm5leHQgPT0gZW50cnkpCisgICAgICAgIHRhYmxlID0gTlVMTDsKKyAgICBlbHNlIHsKKyAgICAgICAgZW50cnktPm5leHQtPnByZXYgPSBlbnRyeS0+cHJldjsKKyAgICAgICAgZW50cnktPnByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgaWYgKGVudHJ5ID09IHRhYmxlKQorICAgICAgICAgICAgdGFibGUgPSBlbnRyeS0+bmV4dDsKKyAgICB9CisgICAgZnJlZShlbnRyeSk7Cit9CisKK3ZvaWQKK25ldHNubXBfc3lzT1JUYWJsZV9mb3JlYWNoKHZvaWQgKCpmKShjb25zdCBzdHJ1Y3Qgc3lzT1JUYWJsZSosIHZvaWQqKSwgdm9pZCogYykKK3sKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJmb3JlYWNoKCVwLCAlcClcbiIsIGYsIGMpKTsKKyAgICBpZih0YWJsZSkgeworICAgICAgICBkYXRhX25vZGUgcnVuID0gdGFibGU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRhdGFfbm9kZSB0bXAgPSBydW47CisgICAgICAgICAgICBydW4gPSBydW4tPm5leHQ7CisgICAgICAgICAgICBmKCZ0bXAtPmRhdGEsIGMpOworICAgICAgICB9IHdoaWxlKHRhYmxlICYmIHJ1biAhPSB0YWJsZSk7CisgICAgfQorfQorCitpbnQKK3JlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiBvaWRpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLCBuZXRzbm1wX3Nlc3Npb24gKiBzcykKK3sKKyAgICBkYXRhX25vZGUgZW50cnk7CisKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJyZWdpc3RlcmluZzogIikpOworICAgIERFQlVHTVNHT0lEKCgiYWdlbnQvc3lzT1JUYWJsZSIsIG9pZGluLCBvaWRsZW4pKTsKKyAgICBERUJVR01TRygoImFnZW50L3N5c09SVGFibGUiLCAiLCBzZXNzaW9uICVwXG4iLCBzcykpOworCisgICAgZW50cnkgPSAoZGF0YV9ub2RlKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRhdGFfbm9kZV9zKSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBlbnRyeVxuIikpOworICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKKyAgICB9CisKKyAgICBlbnRyeS0+ZGF0YS5PUl9kZXNjciA9IHN0cmR1cChkZXNjcik7CisgICAgaWYgKGVudHJ5LT5kYXRhLk9SX2Rlc2NyID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBzeXNPUkRlc2NyXG4iKSk7CisgICAgICAgIGZyZWUoZW50cnkpOworICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKKyAgICB9CisKKyAgICBlbnRyeS0+ZGF0YS5PUl9vaWQgPSAob2lkICopIG1hbGxvYyhzaXplb2Yob2lkKSAqIG9pZGxlbik7CisgICAgaWYgKGVudHJ5LT5kYXRhLk9SX29pZCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc3lzT1JJRFxuIikpOworICAgICAgICBmcmVlKGVudHJ5LT5kYXRhLk9SX2Rlc2NyKTsKKyAgICAgICAgZnJlZShlbnRyeSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIH0KKworICAgIG1lbWNweShlbnRyeS0+ZGF0YS5PUl9vaWQsIG9pZGluLCBzaXplb2Yob2lkKSAqIG9pZGxlbik7CisgICAgZW50cnktPmRhdGEuT1Jfb2lkbGVuID0gb2lkbGVuOworICAgIGVudHJ5LT5kYXRhLk9SX3Nlc3MgPSBzczsKKworICAgIGlmKHRhYmxlKSB7CisgICAgICAgIGVudHJ5LT5uZXh0ID0gdGFibGU7CisgICAgICAgIGVudHJ5LT5wcmV2ID0gdGFibGUtPnByZXY7CisgICAgICAgIHRhYmxlLT5wcmV2LT5uZXh0ID0gZW50cnk7CisgICAgICAgIHRhYmxlLT5wcmV2ID0gZW50cnk7CisgICAgfSBlbHNlCisgICAgICAgIHRhYmxlID0gZW50cnktPm5leHQgPSBlbnRyeS0+cHJldiA9IGVudHJ5OworCisgICAgZW50cnktPmRhdGEuT1JfdXB0aW1lID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisKKyAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdfU1lTT1IsICZlbnRyeS0+ZGF0YSk7CisKKyAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNURVJFRF9PSzsKK30KKworaW50CityZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqIG9pZGluLCBzaXplX3Qgb2lkbGVuLCBjb25zdCBjaGFyICpkZXNjcikKK3sKKyAgICByZXR1cm4gcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZGluLCBvaWRsZW4sIGRlc2NyLCBOVUxMKTsKK30KKworaW50Cit1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiBvaWRpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRsZW4sIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQoreworICAgIGludCBhbnlfdW5yZWdpc3RlcmVkID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZzogIikpOworICAgIERFQlVHTVNHT0lEKCgiYWdlbnQvc3lzT1JUYWJsZSIsIG9pZGluLCBvaWRsZW4pKTsKKyAgICBERUJVR01TRygoImFnZW50L3N5c09SVGFibGUiLCAiLCBzZXNzaW9uICVwXG4iLCBzcykpOworCisgICAgaWYodGFibGUpIHsKKyAgICAgICAgZGF0YV9ub2RlIHJ1biA9IHRhYmxlOworICAgICAgICBkbyB7CisgICAgICAgICAgICBkYXRhX25vZGUgdG1wID0gcnVuOworICAgICAgICAgICAgcnVuID0gcnVuLT5uZXh0OworICAgICAgICAgICAgaWYgKHRtcC0+ZGF0YS5PUl9zZXNzID09IHNzICYmCisgICAgICAgICAgICAgICAgc25tcF9vaWRfY29tcGFyZShvaWRpbiwgb2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLT5kYXRhLk9SX29pZCwgdG1wLT5kYXRhLk9SX29pZGxlbikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVyYXNlKHRtcCk7CisgICAgICAgICAgICAgICAgYW55X3VucmVnaXN0ZXJlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUodGFibGUgJiYgcnVuICE9IHRhYmxlKTsKKyAgICB9CisKKyAgICBpZiAoYW55X3VucmVnaXN0ZXJlZCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJ1bnJlZ2lzdGVyaW5nIHN1Y2Nlc3NmdWxsXG4iKSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9VTlJFR0lTVEVSRURfT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAidW5yZWdpc3RlcmluZyBmYWlsZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX05PX1NVQ0hfUkVHSVNUUkFUSU9OOworICAgIH0KK30KKworCitpbnQKK3VucmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiBvaWRpbiwgc2l6ZV90IG9pZGxlbikKK3sKKyAgICByZXR1cm4gdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkaW4sIG9pZGxlbiwgTlVMTCk7Cit9CisKKwordm9pZAordW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc3MpCit7CisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLAorICAgICAgICAgICAgICAgICJzeXNPUlRhYmxlIHVucmVnaXN0ZXJpbmcgc2Vzc2lvbiAlcFxuIiwgc3MpKTsKKworICAgaWYodGFibGUpIHsKKyAgICAgICAgZGF0YV9ub2RlIHJ1biA9IHRhYmxlOworICAgICAgICBkbyB7CisgICAgICAgICAgICBkYXRhX25vZGUgdG1wID0gcnVuOworICAgICAgICAgICAgcnVuID0gcnVuLT5uZXh0OworICAgICAgICAgICAgaWYgKCgoc3MtPmZsYWdzICYgU05NUF9GTEFHU19TVUJTRVNTSU9OKSAmJgorICAgICAgICAgICAgICAgICB0bXAtPmRhdGEuT1Jfc2VzcyA9PSBzcykgfHwKKyAgICAgICAgICAgICAgICAoIShzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NVQlNFU1NJT04pICYmIHRtcC0+ZGF0YS5PUl9zZXNzICYmCisgICAgICAgICAgICAgICAgIHRtcC0+ZGF0YS5PUl9zZXNzLT5zdWJzZXNzaW9uID09IHNzKSkKKyAgICAgICAgICAgICAgICBlcmFzZSh0bXApOworICAgICAgICB9IHdoaWxlKHRhYmxlICYmIHJ1biAhPSB0YWJsZSk7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLAorICAgICAgICAgICAgICAgICJzeXNPUlRhYmxlIHVucmVnaXN0ZXJpbmcgc2Vzc2lvbiAlcCBkb25lXG4iLCBzcykpOworfQorCitzdGF0aWMgaW50CityZWdpc3Rlcl9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcGFybXMgPSAoc3RydWN0IHN5c09SVGFibGUgKikgc2VydmVyYXJnOworCisgICAgcmV0dXJuIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwYXJtcy0+T1Jfb2lkLCBwYXJtcy0+T1Jfb2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFybXMtPk9SX2Rlc2NyLCBwYXJtcy0+T1Jfc2Vzcyk7Cit9CisKK3N0YXRpYyBpbnQKK3VucmVnaXN0ZXJfc3lzT1JfYnlfc2Vzc2lvbl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCit7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uID0gKG5ldHNubXBfc2Vzc2lvbiAqKSBzZXJ2ZXJhcmc7CisKKyAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihzZXNzaW9uKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bnJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCit7CisgICAgc3RydWN0IHN5c09SVGFibGUgKnBhcm1zID0gKHN0cnVjdCBzeXNPUlRhYmxlICopIHNlcnZlcmFyZzsKKworICAgIHJldHVybiB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwYXJtcy0+T1Jfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1Jfb2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1Jfc2Vzcyk7Cit9CisKK3ZvaWQKK2luaXRfYWdlbnRfc3lzT1JUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgImluaXRfYWdlbnRfc3lzT1JUYWJsZVxuIikpOworCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1JFR19TWVNPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrLCBOVUxMKTsKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrLCBOVUxMKTsKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JfYnlfc2Vzc2lvbl9jYWxsYmFjaywgTlVMTCk7Cit9CisKK3ZvaWQKK3NodXRkb3duX2FnZW50X3N5c09SVGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJzaHV0ZG93bl9zeXNPUlRhYmxlXG4iKSk7CisgICAgd2hpbGUodGFibGUpCisgICAgICAgIGVyYXNlKHRhYmxlKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X3RyYXAuYyBiL2FnZW50L2FnZW50X3RyYXAuYwppbmRleCAxMzU5YzkwLi4wODBiOGJmIDEwMDY0NAotLS0gYS9hZ2VudC9hZ2VudF90cmFwLmMKKysrIGIvYWdlbnQvYWdlbnRfdHJhcC5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0zNCwxMSArMzUsNyBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDksOCArNDYsNiBAQAogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZWxpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KICNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgpAQCAtNTgsNiArNTMsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CkBAIC02OSw2ICs2NSwxNCBAQAogI2luY2x1ZGUgImFnZW50eC9wcm90b2NvbC5oIgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF90cmFwX2FsbCwgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodHJhcF92YXJzX3dpdGhfY29udGV4dCwgYWdlbnRfdHJhcF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVtb3ZlX3RyYXBfc2Vzc2lvbiwgYWdlbnRfdHJhcF9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzZW5kX3YzdHJhcCxuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzZW5kX3RyYXBfcGR1LG5ldHNubXBfdW51c2VkKQorCiBzdHJ1Y3QgdHJhcF9zaW5rIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3A7CiAgICAgc3RydWN0IHRyYXBfc2luayAqbmV4dDsKQEAgLTc4LDM2ICs4MiwyOCBAQAogCiBzdHJ1Y3QgdHJhcF9zaW5rICpzaW5rcyA9IE5VTEw7CiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KLW9pZCAgICAgICAgICAgICBvYmppZF9lbnRlcnByaXNldHJhcFtdID0geyBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgfTsKLW9pZCAgICAgICAgICAgICB0cmFwX3ZlcnNpb25faWRbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH07Ci1pbnQgICAgICAgICAgICAgZW50ZXJwcmlzZXRyYXBfbGVuOwotaW50ICAgICAgICAgICAgIHRyYXBfdmVyc2lvbl9pZF9sZW47Citjb25zdCBvaWQgICAgICAgb2JqaWRfZW50ZXJwcmlzZXRyYXBbXSA9IHsgTkVUU05NUF9OT1RJRklDQVRJT05fTUlCIH07Citjb25zdCBvaWQgICAgICAgdHJhcF92ZXJzaW9uX2lkW10gPSB7IE5FVFNOTVBfU1lTVEVNX01JQiB9OworY29uc3QgaW50ICAgICAgIGVudGVycHJpc2V0cmFwX2xlbiA9IE9JRF9MRU5HVEgob2JqaWRfZW50ZXJwcmlzZXRyYXApOworY29uc3QgaW50ICAgICAgIHRyYXBfdmVyc2lvbl9pZF9sZW4gPSBPSURfTEVOR1RIKHRyYXBfdmVyc2lvbl9pZCk7CiAKICNkZWZpbmUgU05NUFYyX1RSQVBTX1BSRUZJWAlTTk1QX09JRF9TTk1QTU9EVUxFUywxLDEsNQotb2lkICAgICAgICAgICAgIHRyYXBfcHJlZml4W10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVggfTsKLW9pZCAgICAgICAgICAgICBjb2xkX3N0YXJ0X29pZFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAxIH07ICAvKiBTTk1QdjItTUlCICovCi1vaWQgICAgICAgICAgICAgd2FybV9zdGFydF9vaWRbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMiB9OyAgLyogU05NUHYyLU1JQiAqLwotb2lkICAgICAgICAgICAgIGxpbmtfZG93bl9vaWRbXSAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDMgfTsgIC8qIElGLU1JQiAqLwotb2lkICAgICAgICAgICAgIGxpbmtfdXBfb2lkW10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDQgfTsgIC8qIElGLU1JQiAqLwotb2lkICAgICAgICAgICAgIGF1dGhfZmFpbF9vaWRbXSAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDUgfTsgIC8qIFNOTVB2Mi1NSUIgKi8KLW9pZCAgICAgICAgICAgICBlZ3BfeHh4X29pZFtdICAgID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCA5OSB9OyAvKiA/Pz8gKi8KK2NvbnN0IG9pZCAgICAgICB0cmFwX3ByZWZpeFtdICAgID0geyBTTk1QVjJfVFJBUFNfUFJFRklYIH07Citjb25zdCBvaWQgICAgICAgY29sZF9zdGFydF9vaWRbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMSB9OyAgLyogU05NUHYyLU1JQiAqLwogCiAjZGVmaW5lIFNOTVBWMl9UUkFQX09CSlNfUFJFRklYCVNOTVBfT0lEX1NOTVBNT0RVTEVTLDEsMSw0Ci1vaWQgICAgICAgICAgICAgc25tcHRyYXBfb2lkW10gPSB7IFNOTVBWMl9UUkFQX09CSlNfUFJFRklYLCAxLCAwIH07Ci1vaWQgICAgICAgICAgICAgc25tcHRyYXBlbnRlcnByaXNlX29pZFtdID0KLSAgICB7IFNOTVBWMl9UUkFQX09CSlNfUFJFRklYLCAzLCAwIH07Ci1vaWQgICAgICAgICAgICAgc3lzdXB0aW1lX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCAxLCAzLCAwIH07Ci1zaXplX3QgICAgICAgICAgc25tcHRyYXBfb2lkX2xlbjsKLXNpemVfdCAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbjsKLXNpemVfdCAgICAgICAgICBzeXN1cHRpbWVfb2lkX2xlbjsKK2NvbnN0IG9pZCAgICAgICBzbm1wdHJhcF9vaWRbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDEsIDAgfTsKK2NvbnN0IG9pZCAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkW10gPSB7IFNOTVBWMl9UUkFQX09CSlNfUFJFRklYLCAzLCAwIH07Citjb25zdCBvaWQgICAgICAgc3lzdXB0aW1lX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCAxLCAzLCAwIH07Citjb25zdCBzaXplX3QgICAgc25tcHRyYXBfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKTsKK2NvbnN0IHNpemVfdCAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBlbnRlcnByaXNlX29pZCk7Citjb25zdCBzaXplX3QgICAgc3lzdXB0aW1lX29pZF9sZW4gPSBPSURfTEVOR1RIKHN5c3VwdGltZV9vaWQpOwogCiAjZGVmaW5lIFNOTVBWMl9DT01NX09CSlNfUFJFRklYCVNOTVBfT0lEX1NOTVBNT0RVTEVTLDE4LDEKLW9pZCAgICAgICAgICAgICBhZ2VudGFkZHJfb2lkW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCAzLCAwIH07Ci1zaXplX3QgICAgICAgICAgYWdlbnRhZGRyX29pZF9sZW47Ci1vaWQgICAgICAgICAgICAgY29tbXVuaXR5X29pZFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgNCwgMCB9Owotc2l6ZV90ICAgICAgICAgIGNvbW11bml0eV9vaWRfbGVuOworY29uc3Qgb2lkICAgICAgIGFnZW50YWRkcl9vaWRbXSA9IHsgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgsIDMsIDAgfTsKK2NvbnN0IHNpemVfdCAgICBhZ2VudGFkZHJfb2lkX2xlbiA9IE9JRF9MRU5HVEgoYWdlbnRhZGRyX29pZCk7Citjb25zdCBvaWQgICAgICAgY29tbXVuaXR5X29pZFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgNCwgMCB9OworY29uc3Qgc2l6ZV90ICAgIGNvbW11bml0eV9vaWRfbGVuID0gT0lEX0xFTkdUSChjb21tdW5pdHlfb2lkKTsKICNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKIGNoYXIgICAgICAgICAgICpzbm1wX3RyYXBjb21tdW5pdHkgPSBOVUxMOwogI2VuZGlmCkBAIC0xNDEsMTggKzEzNywxMiBAQAogdm9pZAogaW5pdF90cmFwcyh2b2lkKQogewotICAgIGVudGVycHJpc2V0cmFwX2xlbiAgPSBPSURfTEVOR1RIKG9iamlkX2VudGVycHJpc2V0cmFwKTsKLSAgICB0cmFwX3ZlcnNpb25faWRfbGVuID0gT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpOwotICAgIHNubXB0cmFwX29pZF9sZW4gICAgPSBPSURfTEVOR1RIKHNubXB0cmFwX29pZCk7Ci0gICAgc25tcHRyYXBlbnRlcnByaXNlX29pZF9sZW4gPSBPSURfTEVOR1RIKHNubXB0cmFwZW50ZXJwcmlzZV9vaWQpOwotICAgIHN5c3VwdGltZV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKHN5c3VwdGltZV9vaWQpOwotICAgIGFnZW50YWRkcl9vaWRfbGVuICAgPSBPSURfTEVOR1RIKGFnZW50YWRkcl9vaWQpOwotICAgIGNvbW11bml0eV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKGNvbW11bml0eV9vaWQpOwogfQogCiBzdGF0aWMgdm9pZAogZnJlZV90cmFwX3Nlc3Npb24oc3RydWN0IHRyYXBfc2luayAqc3ApCiB7CisgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiZnJlZWluZyBjYWxsYmFjayB0cmFwIHNlc3Npb24gKCVwLCAlcClcbiIsIHNwLCBzcC0+c2VzcCkpOwogICAgIHNubXBfY2xvc2Uoc3AtPnNlc3ApOwogICAgIGZyZWUoc3ApOwogfQpAQCAtMTY4LDcgKzE1OCw3IEBACiAgICAgICAgICAqIHNvbWV0aGluZyBlbHNlIHdhbnRzIHRvIGhhbmRsZSBub3RpZmljYXRpb24gcmVnaXN0cmF0aW9ucyAKICAgICAgICAgICovCiAgICAgICAgIHN0cnVjdCBhZ2VudF9hZGRfdHJhcF9hcmdzIGFyZ3M7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJ0cmFwIiwgImFkZGluZyBjYWxsYmFjayB0cmFwIHNpbmtcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiYWRkaW5nIGNhbGxiYWNrIHRyYXAgc2luayAoJXApXG4iLCBzcykpOwogICAgICAgICBhcmdzLnNzID0gc3M7CiAgICAgICAgIGFyZ3MuY29uZmlybSA9IGNvbmZpcm07CiAgICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKQEAgLTE5NCwxMSArMTg0LDEzIEBACiAgICAgcmV0dXJuIDE7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRU1PVkVfVFJBUF9TRVNTSU9OCiBpbnQKIHJlbW92ZV90cmFwX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc3MpCiB7Ci0gICAgc3RydWN0IHRyYXBfc2luayAqc3AgPSBzaW5rcywgKnByZXYgPSAwOworICAgIHN0cnVjdCB0cmFwX3NpbmsgKnNwID0gc2lua3MsICpwcmV2ID0gTlVMTDsKIAorICAgIERFQlVHTVNHVEwoKCJ0cmFwIiwgInJlbW92aW5nIHRyYXAgc2Vzc2lvbnNcbiIpKTsKICAgICB3aGlsZSAoc3ApIHsKICAgICAgICAgaWYgKHNwLT5zZXNwID09IHNzKSB7CiAgICAgICAgICAgICBpZiAocHJldikgewpAQCAtMjE2LDYgKzIwOCw3IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogZnJlZV90cmFwX3Nlc3Npb24oc3ApOyAgCiAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0cmFwIiwgInJlbW92aW5nIHRyYXAgc2Vzc2lvbiAoJXAsICVwKVxuIiwgc3AsIHNwLT5zZXNwKSk7CiAgICAgICAgICAgICBmcmVlKHNwKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CkBAIC0yMjQsNiArMjE3LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRU1PVkVfVFJBUF9TRVNTSU9OICovCiAKICNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKIHN0YXRpYyBpbnQKQEAgLTMxOCw2ICszMTIsNyBAQAogc25tcGRfZnJlZV90cmFwc2lua3Modm9pZCkKIHsKICAgICBzdHJ1Y3QgdHJhcF9zaW5rICpzcCA9IHNpbmtzOworICAgIERFQlVHTVNHVEwoKCJ0cmFwIiwgImZyZWVpbmcgdHJhcCBzZXNzaW9uc1xuIikpOwogICAgIHdoaWxlIChzcCkgewogICAgICAgICBzaW5rcyA9IHNpbmtzLT5uZXh0OwogICAgICAgICBmcmVlX3RyYXBfc2Vzc2lvbihzcCk7CkBAIC0zMzgsNyArMzMzLDYgQEAKICAgICBuZXRzbm1wX3BkdSAgICAgICAgICAgKnRlbXBsYXRlX3YxcGR1OwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqZmlyc3RfdmIsICp2Ymxpc3Q7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXI7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICBsZW47CiAKICAgICAvKgogICAgICAqIE1ha2UgYSBjb3B5IG9mIHRoZSB2MiBUcmFwIFBEVQpAQCAtNDE4LDkgKzQxMiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbik7CiAgICAgICAgIGlmICh2YXIpIHsKLSAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlID0KLSAgICAgICAgICAgICAgICBuZXRzbm1wX21lbWR1cCh2YXItPnZhbC5vYmppZCwgdmFyLT52YWxfbGVuKTsKICAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlX2xlbmd0aCA9IHZhci0+dmFsX2xlbi9zaXplb2Yob2lkKTsKKyAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlID0KKyAgICAgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh2YXItPnZhbC5vYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZV9sZW5ndGgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgICAgICAgID0gTlVMTDsKICAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlX2xlbmd0aCA9IDA7CQkvKiBYWFggPz8/ICovCkBAIC00MzAsNyArNDI1LDcgQEAKICAgICAgICAgICogRm9yIGVudGVycHJpc2Utc3BlY2lmaWMgdHJhcHMsIHNwbGl0IHRoZSBzbm1wVHJhcE9JRCB2YWx1ZQogICAgICAgICAgKiAgIGludG8gZW50ZXJwcmlzZSBhbmQgc3BlY2lmaWMgdHJhcAogICAgICAgICAgKi8KLSAgICAgICAgbGVuID0gdmJsaXN0LT52YWxfbGVuIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgIHNpemVfdCBsZW4gPSB2Ymxpc3QtPnZhbF9sZW4gLyBzaXplb2Yob2lkKTsKICAgICAgICAgaWYgKCBsZW4gPD0gMiApIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAogICAgICAgICAgICAgICAgICAgICAgInNlbmRfdHJhcDogdjIgdHJhcE9JRCB0b28gc2hvcnQgKCVkKVxuIiwgKGludClsZW4pOwpAQCAtNDQ0LDcgKzQzOSw3IEBACiAgICAgICAgICAgICBsZW4tLTsKICAgICAgICAgU05NUF9GUkVFKHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlKTsKICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgPQotICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAodmJsaXN0LT52YWwub2JqaWQsIGxlbipzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh2Ymxpc3QtPnZhbC5vYmppZCwgbGVuKTsKICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2VfbGVuZ3RoID0gbGVuOwogICAgIH0KICAgICB2YXIgPSBmaW5kX3ZhcmJpbmRfaW5fbGlzdCggdmJsaXN0LCBhZ2VudGFkZHJfb2lkLApAQCAtNjI1LDkgKzYyMCw5IEBACiAgKi8KIGludAogbmV0c25tcF9zZW5kX3RyYXBzKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogY29udGV4dCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29udGV4dCwgaW50IGZsYWdzKQogewogICAgIG5ldHNubXBfcGR1ICAgICAgICAgICAqdGVtcGxhdGVfdjFwZHU7CiAgICAgbmV0c25tcF9wZHUgICAgICAgICAgICp0ZW1wbGF0ZV92MnBkdTsKQEAgLTYzNyw2ICs2MzIsOCBAQAogICAgIGluX2FkZHJfdCAgICAgICAgICAgICAqcGR1X2luX2FkZHJfdDsKICAgICB1X2xvbmcgICAgICAgICAgICAgICAgIHVwdGltZTsKICAgICBzdHJ1Y3QgdHJhcF9zaW5rICpzaW5rOworICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAqdjF0cmFwYWRkcmVzczsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJlcyA9IDA7CiAKICAgICBERUJVR01TR1RMKCggInRyYXAiLCAic2VuZF90cmFwICVkICVkICIsIHRyYXAsIHNwZWNpZmljKSk7CiAgICAgREVCVUdNU0dPSUQoKCJ0cmFwIiwgZW50ZXJwcmlzZSwgZW50ZXJwcmlzZV9sZW5ndGgpKTsKQEAgLTcxOCw3ICs3MTUsNyBAQAogICAgICAgICAgICAgICAgICFzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmKHRlbXBsYXRlX3YycGR1LT52YXJpYWJsZXMpLAogICAgICAgICAgICAgICAgICAgICAgc25tcHRyYXBlbnRlcnByaXNlX29pZCwgc25tcHRyYXBlbnRlcnByaXNlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELAotICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKWVudGVycHJpc2UsIGVudGVycHJpc2VfbGVuZ3RoKnNpemVvZihvaWQpKSkgeworICAgICAgICAgICAgICAgICAgICAgZW50ZXJwcmlzZSwgZW50ZXJwcmlzZV9sZW5ndGgqc2l6ZW9mKG9pZCkpKSB7CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCiAgICAgICAgICAgICAgICAgICAgICAic2VuZF90cmFwOiBmYWlsZWQgdG8gYWRkIHNubXBFbnRlcnByaXNlIHRvIHYyIHRyYXBcbiIpOwogICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUodGVtcGxhdGVfdjJwZHUpOwpAQCAtNzkwLDkgKzc4NywyOSBAQAogICAgICAqIEVuc3VyZSB0aGF0IHRoZSB2MSB0cmFwIFBEVSBpbmNsdWRlcyB0aGUgbG9jYWwgSVAgYWRkcmVzcwogICAgICAqLwogICAgICAgIHBkdV9pbl9hZGRyX3QgPSAoaW5fYWRkcl90ICopIHRlbXBsYXRlX3YxcGR1LT5hZ2VudF9hZGRyOwotICAgICAgKnBkdV9pbl9hZGRyX3QgPSBnZXRfbXlhZGRyKCk7CisgICAgICAgdjF0cmFwYWRkcmVzcyA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9UUkFQX0FERFIpOworICAgICAgIGlmICh2MXRyYXBhZGRyZXNzICE9IE5VTEwpIHsKKyAgICAgICAgICAgLyogInYxdHJhcGFkZHJlc3MiIHdhcyBzcGVjaWZpZWQgaW4gY29uZmlnLCB0cnkgdG8gcmVzb2x2ZSBpdCAqLworICAgICAgICAgICByZXMgPSBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQodjF0cmFwYWRkcmVzcywgcGR1X2luX2FkZHJfdCk7CisgICAgICAgfQorICAgICAgIGlmICh2MXRyYXBhZGRyZXNzID09IE5VTEwgfHwgcmVzIDwgMCkgeworICAgICAgICAgICAvKiAidjF0cmFwYWRkcmVzcyIgd2FzIG5vdCBzcGVjaWZpZWQgaW4gY29uZmlnIG9yIHRoZSByZXNvbHV0aW9uIGZhaWxlZCwKKyAgICAgICAgICAgICogdHJ5IGFueSBsb2NhbCBhZGRyZXNzICovCisgICAgICAgICAgICpwZHVfaW5fYWRkcl90ID0gZ2V0X215YWRkcigpOworICAgICAgIH0KKwogICAgIH0KIAorICAgIGlmICh0ZW1wbGF0ZV92MnBkdSkgeworCS8qIEEgY29udGV4dCBuYW1lIHdhcyBwcm92aWRlZCwgc28gY29weSBpdCBhbmQgaXRzIGxlbmd0aCB0byB0aGUgdjIgcGR1CisJICogdGVtcGxhdGUuICovCisJaWYgKGNvbnRleHQgIT0gTlVMTCkKKwl7CisJCXRlbXBsYXRlX3YycGR1LT5jb250ZXh0TmFtZSAgICA9IHN0cmR1cChjb250ZXh0KTsKKwkJdGVtcGxhdGVfdjJwZHUtPmNvbnRleHROYW1lTGVuID0gc3RybGVuKGNvbnRleHQpOworCX0KKyAgICB9CiAKICAgICAvKgogICAgICAqICBOb3cgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIHRyYXAgc2lua3MKQEAgLTgzMCw3ICs4NDcsNyBAQAogdm9pZAogc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyhpbnQgdHJhcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWNpZmljLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFycykKIHsKICAgICBuZXRzbm1wX3NlbmRfdHJhcHModHJhcCwgc3BlY2lmaWMsCkBAIC04ODcsOSArOTA0LDYgQEAKIHsKICAgICBuZXRzbm1wX3BkdSAgICAqcGR1OwogICAgIGludCAgICAgICAgICAgIHJlc3VsdDsKLSAgICBjaGFyICAgICAgICAgICB0bXBbU1BSSU5UX01BWF9MRU5dOwotICAgIGludCAgICAgICAgICAgIGxlbjsKLQogCiAgICAgaWYgKCFzZXNzIHx8ICF0ZW1wbGF0ZV9wZHUpCiAgICAgICAgIHJldHVybjsKQEAgLTkyMSw3ICs5MzUsOSBAQAogICAgICAgICBpZiAoKHNlc3MtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzMpICYmCiAgICAgICAgICAgICAgICAgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19UUkFQMikgJiYKICAgICAgICAgICAgICAgICAoc2Vzcy0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKSkgewotICAgICAgICAgICAgbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRCh0bXAsIHNpemVvZih0bXApKTsKKyAgICAgICAgICAgIHVfY2hhciAgICAgICAgICB0bXBbU1BSSU5UX01BWF9MRU5dOworCisgICAgICAgICAgICBpbnQgbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRCh0bXAsIHNpemVvZih0bXApKTsKICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKHRtcCwgbGVuKTsKICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiA9IGxlbjsKICAgICAgICAgfQpAQCAtOTQ5LDYgKzk2NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodHJhcF92ZXJzaW9uX2lkKSwgdmFycyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UUkFQX1ZBUlNfV0lUSF9DT05URVhUCisvKiBTZW5kIGEgdHJhcCB1bmRlciBhIGNvbnRleHQgKi8KK3ZvaWQgc2VuZF90cmFwX3ZhcnNfd2l0aF9jb250ZXh0KGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIAorICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsIGNvbnN0IGNoYXIgKmNvbnRleHQpCit7CisgICAgaWYgKHRyYXAgPT0gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQykKKyAgICAgICAgbmV0c25tcF9zZW5kX3RyYXBzKHRyYXAsIHNwZWNpZmljLCBvYmppZF9lbnRlcnByaXNldHJhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKG9iamlkX2VudGVycHJpc2V0cmFwKSwgdmFycywKKwkJCQkJCQkJICBjb250ZXh0LCAwKTsKKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfc2VuZF90cmFwcyh0cmFwLCBzcGVjaWZpYywgdHJhcF92ZXJzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodHJhcF92ZXJzaW9uX2lkKSwgdmFycywgCisJCQkJCQkJCSAgY29udGV4dCwgMCk7CisgICAgCQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVFJBUF9WQVJTX1dJVEhfQ09OVEVYVCAqLworCiAvKioKICAqIFNlbmRzIGFuIFNOTVB2MSB0cmFwIChvciB0aGUgU05NUHYyIGVxdWl2YWxlbnQpIHRvIHRoZSBsaXN0IG9mICAKICAqIGNvbmZpZ3VyZWQgdHJhcCBkZXN0aW5hdGlvbnMgKG9yICJzaW5rcyIpLCB1c2luZyB0aGUgcHJvdmlkZWQgCkBAIC0xMDA3LDExICsxMDQwLDM0IEBACiAgICAgc2VuZF90cmFwX3ZhcnMoLTEsIC0xLCB2YXJzKTsKIH0KIAorLyoqCisgKiBTaW1pbGFyIHRvIHNlbmRfdjJ0cmFwKCksIHdpdGggdGhlIGFkZGVkIGFiaWxpdHkgdG8gc3BlY2lmeSBhIGNvbnRleHQuICBJZgorICogdGhlIGxhc3QgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhpcyBjYWxsIGlzIGVxdWl2YWxlbnQgdG8gc2VuZF92MnRyYXAoKS4KKyAqCisgKiBAcGFyYW0gdmFycyBpcyB1c2VkIHRvIHN1cHBseSB0aGUgbGlzdCBvZiB2YXJpYWJsZSBiaW5kaW5ncyBmb3IgdGhlIHRyYXAuCisgKiAKKyAqIEBwYXJhbSBjb250ZXh0IGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCBvZiB0aGUgdHJhcC4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqCisgKiBAc2VlIHNlbmRfdjJ0cmFwCisgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRU5EX1YzVFJBUAordm9pZCBzZW5kX3YzdHJhcChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsIGNvbnN0IGNoYXIgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9zZW5kX3RyYXBzKC0xLCAtMSwgCisgICAgICAgICAgICAgICAgICAgICAgIHRyYXBfdmVyc2lvbl9pZCwgT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpLAorICAgICAgICAgICAgICAgICAgICAgICB2YXJzLCBjb250ZXh0LCAwKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVjNUUkFQICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRU5EX1RSQVBfUERVCiB2b2lkCiBzZW5kX3RyYXBfcGR1KG5ldHNubXBfcGR1ICpwZHUpCiB7CiAgICAgc2VuZF90cmFwX3ZhcnMoLTEsIC0xLCBwZHUtPnZhcmlhYmxlcyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRU5EX1RSQVBfUERVICovCiAKIAogCkBAIC0xMDczLDcgKzExMjksNiBAQAogdm9pZAogc25tcGRfcGFyc2VfY29uZmlnX3RyYXBzaW5rKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07CiAgICAgY2hhciAgICAgICAgICAgKnNwLCAqY3AsICpwcCA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgICpzdDsKIApAQCAtMTA4Niw5ICsxMTQxLDcgQEAKICAgICBpZiAocHApCiAJY29uZmlnX3B3YXJuKCJUaGUgc2VwYXJhdGUgcG9ydCBhcmd1bWVudCB0byB0cmFwc2luayBpcyBkZXByZWNhdGVkIik7CiAgICAgaWYgKGNyZWF0ZV92MV90cmFwX3Nlc3Npb24oc3AsIHBwLCBjcCA/IGNwIDogc25tcF90cmFwY29tbXVuaXR5KSA9PSAwKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJjYW5ub3QgY3JlYXRlIHRyYXBzaW5rOiAlcyIsIGNwdHIpOwotICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAnXDAnOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoImNhbm5vdCBjcmVhdGUgdHJhcHNpbms6ICVzIiwgY3B0cik7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xMDk3LDkgKzExNTAsNyBAQAogdm9pZAogc25tcGRfcGFyc2VfY29uZmlnX3RyYXAyc2luayhjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0gICAgY2hhciAgICAgICAgICAgKnNwLCAqY3AsICpwcCA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgICpzdDsKKyAgICBjaGFyICAgICAgICAgICAqc3QsICpzcCwgKmNwLCAqcHAgPSBOVUxMOwogCiAgICAgaWYgKCFzbm1wX3RyYXBjb21tdW5pdHkpCiAgICAgICAgIHNubXBfdHJhcGNvbW11bml0eSA9IHN0cmR1cCgicHVibGljIik7CkBAIC0xMTEwLDE4ICsxMTYxLDE0IEBACiAgICAgaWYgKHBwKQogCWNvbmZpZ19wd2FybigiVGhlIHNlcGFyYXRlIHBvcnQgYXJndW1lbnQgdG8gdHJhcHNpbmsyIGlzIGRlcHJlY2F0ZWQiKTsKICAgICBpZiAoY3JlYXRlX3YyX3RyYXBfc2Vzc2lvbihzcCwgcHAsIGNwID8gY3AgOiBzbm1wX3RyYXBjb21tdW5pdHkpID09IDApIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgImNhbm5vdCBjcmVhdGUgdHJhcDJzaW5rOiAlcyIsIGNwdHIpOwotICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAnXDAnOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoImNhbm5vdCBjcmVhdGUgdHJhcDJzaW5rOiAlcyIsIGNwdHIpOwogICAgIH0KIH0KIAogdm9pZAogc25tcGRfcGFyc2VfY29uZmlnX2luZm9ybXNpbmsoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwotICAgIGNoYXIgICAgICAgICAgICpzcCwgKmNwLCAqcHAgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICAqc3Q7CisgICAgY2hhciAgICAgICAgICAgKnN0LCAqc3AsICpjcCwgKnBwID0gTlVMTDsKIAogICAgIGlmICghc25tcF90cmFwY29tbXVuaXR5KQogICAgICAgICBzbm1wX3RyYXBjb21tdW5pdHkgPSBzdHJkdXAoInB1YmxpYyIpOwpAQCAtMTEzMiw5ICsxMTc5LDcgQEAKICAgICBpZiAocHApCiAJY29uZmlnX3B3YXJuKCJUaGUgc2VwYXJhdGUgcG9ydCBhcmd1bWVudCB0byBpbmZvcm1zaW5rIGlzIGRlcHJlY2F0ZWQiKTsKICAgICBpZiAoY3JlYXRlX3YyX2luZm9ybV9zZXNzaW9uKHNwLCBwcCwgY3AgPyBjcCA6IHNubXBfdHJhcGNvbW11bml0eSkgPT0gMCkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiY2Fubm90IGNyZWF0ZSBpbmZvcm1zaW5rOiAlcyIsIGNwdHIpOwotICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAnXDAnOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoImNhbm5vdCBjcmVhdGUgaW5mb3Jtc2luazogJXMiLCBjcHRyKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTExNjksOSArMTIxNCwxMCBAQAogdm9pZAogc25tcGRfcGFyc2VfY29uZmlnX3RyYXBzZXNzKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgKmFyZ3ZbTUFYX0FSR1NdLCAqY3AgPSBjcHRyLCB0bXBbU1BSSU5UX01BWF9MRU5dOwotICAgIGludCAgICAgICAgICAgICBhcmduOworICAgIGNoYXIgICAgICAgICAgICphcmd2W01BWF9BUkdTXSwgKmNwID0gY3B0cjsKKyAgICBpbnQgICAgICAgICAgICAgYXJnbiwgcmM7CiAgICAgbmV0c25tcF9zZXNzaW9uIHNlc3Npb24sICpzczsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgICAvKgpAQCAtMTE4NCwxNSArMTIzMCwyOCBAQAogICAgICAqLwogICAgIGFyZ3ZbMF0gPSBzdHJkdXAoInNubXBkLXRyYXBzZXNzIik7IC8qIGJvZ3VzIGVudHJ5IGZvciBnZXRvcHQoKSAqLwogICAgIGZvciAoYXJnbiA9IDE7IGNwICYmIGFyZ24gPCBNQVhfQVJHUzsgYXJnbisrKSB7CisgICAgICAgIGNoYXIgICAgICAgICAgICB0bXBbU1BSSU5UX01BWF9MRU5dOworCiAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgdG1wLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgIGFyZ3ZbYXJnbl0gPSBzdHJkdXAodG1wKTsKICAgICB9CiAKLSAgICBzbm1wX3BhcnNlX2FyZ3MoYXJnbiwgYXJndiwgJnNlc3Npb24sICJDOiIsIHRyYXBPcHRQcm9jKTsKKyAgICBuZXRzbm1wX3BhcnNlX2FyZ3MoYXJnbiwgYXJndiwgJnNlc3Npb24sICJDOiIsIHRyYXBPcHRQcm9jLAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BBUlNFX0FSR1NfTk9MT0dHSU5HIHwKKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QQVJTRV9BUkdTX05PWkVSTyk7CiAKLSAgICBzcyA9IHNubXBfYWRkKCZzZXNzaW9uLAotCQkgIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50KCJzbm1wdHJhcCIsIHNlc3Npb24ucGVlcm5hbWUpLAotCQkgIE5VTEwsIE5VTEwpOworICAgIHRyYW5zcG9ydCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50KCJzbm1wdHJhcCIsIHNlc3Npb24ucGVlcm5hbWUpOworICAgIGlmICh0cmFuc3BvcnQgPT0gTlVMTCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJzbm1wZDogZmFpbGVkIHRvIHBhcnNlIHRoaXMgbGluZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoKHJjID0gbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQoJnNlc3Npb24sIHRyYW5zcG9ydCkpCisgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBzZXNzaW9uLnNfc25tcF9lcnJubyA9IHJjOworICAgICAgICBzZXNzaW9uLnNfZXJybm8gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNzID0gc25tcF9hZGQoJnNlc3Npb24sIHRyYW5zcG9ydCwgTlVMTCwgTlVMTCk7CiAgICAgZm9yICg7IGFyZ24gPiAwOyBhcmduLS0pIHsKICAgICAgICAgZnJlZShhcmd2W2FyZ24gLSAxXSk7CiAgICAgfQpAQCAtMTIxMSwyMSArMTI3MCwxOCBAQAogICAgIGlmIChzcy0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMyAmJgogICAgICAgICB0cmFwdHlwZSAhPSBTTk1QX01TR19JTkZPUk0gICAmJgogICAgICAgICBzcy0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKSB7CisgICAgICAgICAgICB1X2NoYXIgICAgICAgICAgdG1wW1NQUklOVF9NQVhfTEVOXTsKKwogICAgICAgICAgICAgbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRCggdG1wLCBzaXplb2YodG1wKSk7CiAgICAgICAgICAgICBzcy0+c2VjdXJpdHlFbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKHRtcCwgbGVuKTsKICAgICAgICAgICAgIHNzLT5zZWN1cml0eUVuZ2luZUlETGVuID0gbGVuOwogICAgIH0KIAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0gICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKSB7Ci0gICAgICAgIGFkZF90cmFwX3Nlc3Npb24oc3MsIFNOTVBfTVNHX1RSQVAsIDAsIFNOTVBfVkVSU0lPTl8xKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChzcy0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMSkKKyAgICAgICAgdHJhcHR5cGUgPSBTTk1QX01TR19UUkFQOwogI2VuZGlmCi0gICAgICAgIGFkZF90cmFwX3Nlc3Npb24oc3MsIHRyYXB0eXBlLCAodHJhcHR5cGUgPT0gU05NUF9NU0dfSU5GT1JNKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzcy0+dmVyc2lvbik7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLSAgICB9Ci0jZW5kaWYKKyAgICBhZGRfdHJhcF9zZXNzaW9uKHNzLCB0cmFwdHlwZSwgKHRyYXB0eXBlID09IFNOTVBfTVNHX0lORk9STSksIHNzLT52ZXJzaW9uKTsKIH0KIAogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQpkaWZmIC0tZ2l0IGEvYWdlbnQvYXV0b19ubGlzdC5jIGIvYWdlbnQvYXV0b19ubGlzdC5jCmluZGV4IGRmZjFmMmIuLmVjZGFmMjQgMTAwNjQ0Ci0tLSBhL2FnZW50L2F1dG9fbmxpc3QuYworKysgYi9hZ2VudC9hdXRvX25saXN0LmMKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICogYWxsb2NhdGUgYW4gZXh0cmEgYnl0ZSBmb3IgaW5jbHVzaW9uIG9mIGEgcHJlY2VkaW5nICdfJyBsYXRlciAKICAgICAgICAgICovCiAgICAgICAgIGl0LT5ubFswXS5uX25hbWUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHN0cmluZykgKyAyKTsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3RyY3B5KGl0LT5ubFswXS5uX25hbWUsIHN0cmluZyk7CiAgICAgICAgIGl0LT5ubFswXS5uX25hbWVbc3RybGVuKHN0cmluZykrMV0gPSAnXDAnOwogI2VsaWYgZGVmaW5lZChmcmVlYnNkOSkKQEAgLTE0OSw3ICsxNDksNiBAQAogc3RhdGljIHZvaWQKIGluaXRfbmxpc3Qoc3RydWN0IG5saXN0IG5sW10pCiB7Ci0jaWZkZWYgTkVUU05NUF9DQU5fVVNFX05MSVNUCiAgICAgaW50ICAgICAgICAgICAgIHJldDsKICNpZiBIQVZFX0tWTV9PUEVORklMRVMKICAgICBrdm1fdCAgICAgICAgICAqa2VybmVsOwpAQCAtMTc3LDcgKzE3Niw3IEBACiAgICAgfQogICAgIGt2bV9jbG9zZShrZXJuZWwpOwogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhIEhBVkVfS1ZNX09QRU5GSUxFUyAqLwotI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgZGVmaW5lZChIQVZFX0tOTElTVCkKKyNpZiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkgJiYgZGVmaW5lZChIQVZFX0tOTElTVCkKICAgICBpZiAoa25saXN0KG5sLCAxLCBzaXplb2Yoc3RydWN0IG5saXN0KSkgPT0gLTEpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImF1dG9fbmxpc3Q6aW5pdF9ubGlzdCIsICJrbmxpc3QgZmFpbGVkIG9uIHN5bWJvbDogICVzXG4iLAogICAgICAgICAgICAgICAgICAgICBubFswXS5uX25hbWUpKTsKQEAgLTIwNyw3ICsyMDYsNyBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFpeDQgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISBIQVZFX0tWTV9PUEVORklMRVMgKi8KICAgICBmb3IgKHJldCA9IDA7IG5sW3JldF0ubl9uYW1lICE9IE5VTEw7IHJldCsrKSB7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGlmIChubFtyZXRdLm5fdHlwZSA9PSAwICYmIG5sW3JldF0ubl92YWx1ZSAhPSAwKQogICAgICAgICAgICAgbmxbcmV0XS5uX3R5cGUgPSAxOwogI2VuZGlmCkBAIC0yMjIsNyArMjIxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIG5sW3JldF0ubl92YWx1ZSkpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfTkxJU1QgKi8KIH0KIAogaW50CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCBiL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kCmluZGV4IDgzZmU1NGUuLmQyMGUxMjUgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kCisrKyBiL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kCkBAIC01LDU4ICs1LDY3IEBACiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NSw2ICs3NCw3IEBACiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMiw2MyArMTEyLDY5IEBACiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTY3LDYgKzE4Myw3IEBACiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA0LDYzICsyMjEsNjggQEAKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNjksNiArMjkxLDcgQEAKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMwNiw2MyArMzI5LDY4IEBACiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNzEsNiArMzk5LDcgQEAKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MDgsNjMgKzQzNyw2OCBAQAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ3Myw2ICs1MDcsNyBAQAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTUxMCw2MyArNTQ1LDY4IEBACiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTc1LDYgKzYxNSw3IEBACiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTYxMiw2MyArNjUzLDY4IEBACiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY3Nyw2ICs3MjMsNyBAQAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTcxNCw2MyArNzYxLDY4IEBACiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzc5LDYgKzgzMSw3IEBACiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTgxNiw2MiArODY5LDY4IEBACiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTg4MCw2ICs5MzksNyBAQAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkxNyw2MyArOTc3LDY4IEBACiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTgyLDYgKzEwNDcsNyBAQAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMTksNjQgKzEwODUsNjkgQEAKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwODUsNiArMTE1Niw3IEBACiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTIyLDYzICsxMTk0LDY4IEBACiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTg3LDYgKzEyNjQsNyBAQAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTIyNCw2MyArMTMwMiw2OCBAQAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI4OSw2ICsxMzcyLDcgQEAKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMjYsNjMgKzE0MTAsNjggQEAKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzOTEsNiArMTQ4MCw3IEBACiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDI4LDYzICsxNTE4LDY4IEBACiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDkzLDYgKzE1ODgsNyBAQAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTUzMCw2MyArMTYyNiwxNzYgQEAKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNTk1LDYgKzE4MDQsNyBAQAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNjMyLDY1ICsxODQyLDcwIEBACiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTY5OSw2ICsxOTE0LDcgQEAKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNzM2LDE2NiArMTk1Miw3MCBAQAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfdG9fbmV4dC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xOTA0LDYgKzIwMjQsNyBAQAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xOTQxLDYzICsyMDYyLDE3NiBAQAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjAwNiw2ICsyMjQwLDcgQEAKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIwNDMsNjMgKzIyNzgsNjggQEAKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIxMDgsNiArMjM0OCw3IEBACiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjE0NSw2MyArMjM4Niw2OCBAQAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIyMTAsNiArMjQ1Niw3IEBACiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjI0Nyw2MyArMjQ5NCw2OCBAQAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIzMTIsNiArMjU2NCw3IEBACiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIzNDksNjQgKzI2MDIsNjkgQEAKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNDE1LDYgKzI2NzMsNyBAQAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjQ1Miw2MyArMjcxMSw2OCBAQAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjUxNyw2ICsyNzgxLDcgQEAKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjU1NCw2MyArMjgxOSw2OCBAQAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNjE5LDYgKzI4ODksNyBAQAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI2NTYsMyArMjkyNyw0IEBACiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiBiL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4KaW5kZXggYjgzYWY4OS4uNTE3OGI3OSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbgorKysgYi9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluCkBAIC0xLDMgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgbGlibmV0c25tcGhlbHBlcnMKKyMKKwogdG9wX2J1aWxkZGlyPS4uLy4uCiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwpAQCAtMTQsMTMxICsxOCwyMSBAQAogCiBJTlNUQUxMTElCUz1saWJuZXRzbm1waGVscGVycy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIElOQ0xVREVTVUJESVI9YWdlbnQKLUhFQURFUlM9YWxsX2hlbHBlcnMuaCBcCi0JYmFieV9zdGVwcy5oIFwKLQlidWxrX3RvX25leHQuaCBcCi0JY2FjaGVfaGFuZGxlci5oIFwKLSAgICAgICAgZGVidWdfaGFuZGxlci5oIFwKLQlpbnN0YW5jZS5oIFwKLQltb2RlX2VuZF9jYWxsLmggXAotICAgICAgICBtdWx0aXBsZXhlci5oIFwKLSAgICAgICAgbnVsbC5oIFwKLSAgICAgICAgb2xkX2FwaS5oIFwKLSAgICAgICAgcmVhZF9vbmx5LmggXAotICAgICAgICByb3dfbWVyZ2UuaCBcCi0Jc2NhbGFyLmggXAotCXNjYWxhcl9ncm91cC5oIFwKLSAgICAgICAgc2VyaWFsaXplLmggXAotCXN0YXNoX2NhY2hlLmggXAotCXN0YXNoX3RvX25leHQuaCBcCi0gICAgICAgIHRhYmxlLmggXAotCXRhYmxlX2FycmF5LmggXAotCXRhYmxlX2NvbnRhaW5lci5oIFwKLSAgICAgICAgdGFibGVfZGF0YS5oIFwKLSAgICAgICAgdGFibGVfZGF0YXNldC5oIFwKLSAgICAgICAgdGFibGVfaXRlcmF0b3IuaCBcCi0gICAgICAgIHRhYmxlX3RkYXRhLmggXAotCXdhdGNoZXIuaAotCi0jIE5vIGhlYWRlciAndGFibGVfcm93LmgnCi0KLUhFQURFUlNPTkxZPW1mZC5oIHNldF9oZWxwZXIuaAotSU5DTFVERVNVQkRJUkhFQURFUlM9JChIRUFERVJTKSAkKEhFQURFUlNPTkxZKQogCiAjCiAjIEJ1aWxkIGluZm8KICMKLU5FVFNOTVBMSUIgICAgICA9IC4uLy4uL3NubXBsaWIvbGlibmV0c25tcC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIEhFTFBFUkxJQiAgICAgICA9IGxpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotQUdFTlRMSUIgICAgICAgID0gLi4vbGlibmV0c25tcGFnZW50LiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotTUlCTElCICAgICAgICAgID0gLi4vbGlibmV0c25tcG1pYnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiAjIC1JLiAtSS4uIC1JLi4vLi4KIENQUEZMQUdTPSAkKFRPUF9JTkNMVURFUykgLUkuICQoQUdFTlRfSU5DTFVERVMpICQoTUlCR1JPVVBfSU5DTFVERVMpIFwKIAkkKFNOTVBMSUJfSU5DTFVERVMpIEBDUFBGTEFHU0AKIAotU1JDUyA9ICBhbGxfaGVscGVycy5jIFwKLQliYWJ5X3N0ZXBzLmMgXAotCWJ1bGtfdG9fbmV4dC5jIFwKLQljYWNoZV9oYW5kbGVyLmMgXAotCWRlYnVnX2hhbmRsZXIuYyBcCi0JaW5zdGFuY2UuYyBcCi0JbW9kZV9lbmRfY2FsbC5jIFwKLQltdWx0aXBsZXhlci5jIFwKLQludWxsLmMgXAotCW9sZF9hcGkuYyBcCi0JcmVhZF9vbmx5LmMgXAotCXJvd19tZXJnZS5jIFwKLQlzY2FsYXIuYyBcCi0Jc2NhbGFyX2dyb3VwLmMgXAotCXNlcmlhbGl6ZS5jIFwKLQlzdGFzaF9jYWNoZS5jIFwKLQlzdGFzaF90b19uZXh0LmMgXAotCXRhYmxlLmMgXAotCXRhYmxlX2FycmF5LmMgXAotCXRhYmxlX2NvbnRhaW5lci5jIFwKLQl0YWJsZV9kYXRhLmMgXAotCXRhYmxlX2RhdGFzZXQuYyBcCi0JdGFibGVfaXRlcmF0b3IuYyBcCi0JdGFibGVfcm93LmMgXAotCXRhYmxlX3RkYXRhLmMgXAotCXdhdGNoZXIuYworT0JKUyA9IGR1bW15Lm8KIAotT0JKUyA9ICBhbGxfaGVscGVycy5vIFwKLQliYWJ5X3N0ZXBzLm8gXAotCWJ1bGtfdG9fbmV4dC5vIFwKLQljYWNoZV9oYW5kbGVyLm8gXAotCWRlYnVnX2hhbmRsZXIubyBcCi0JaW5zdGFuY2UubyBcCi0JbW9kZV9lbmRfY2FsbC5vIFwKLQltdWx0aXBsZXhlci5vIFwKLQludWxsLm8gXAotCW9sZF9hcGkubyBcCi0JcmVhZF9vbmx5Lm8gXAotCXJvd19tZXJnZS5vIFwKLQlzY2FsYXIubyBcCi0Jc2NhbGFyX2dyb3VwLm8gXAotCXNlcmlhbGl6ZS5vIFwKLQlzdGFzaF9jYWNoZS5vIFwKLQlzdGFzaF90b19uZXh0Lm8gXAotCXRhYmxlLm8gXAotCXRhYmxlX2FycmF5Lm8gXAotCXRhYmxlX2NvbnRhaW5lci5vIFwKLQl0YWJsZV9kYXRhLm8gXAotCXRhYmxlX2RhdGFzZXQubyBcCi0JdGFibGVfaXRlcmF0b3IubyBcCi0JdGFibGVfcm93Lm8gXAotCXRhYmxlX3RkYXRhLm8gXAotCXdhdGNoZXIubwotCi1MT0JKUyA9IGFsbF9oZWxwZXJzLmxvIFwKLQliYWJ5X3N0ZXBzLmxvIFwKLQlidWxrX3RvX25leHQubG8gXAotCWNhY2hlX2hhbmRsZXIubG8gXAotCWRlYnVnX2hhbmRsZXIubG8gXAotCWluc3RhbmNlLmxvIFwKLQltb2RlX2VuZF9jYWxsLmxvIFwKLQltdWx0aXBsZXhlci5sbyBcCi0JbnVsbC5sbyBcCi0Jb2xkX2FwaS5sbyBcCi0JcmVhZF9vbmx5LmxvIFwKLQlyb3dfbWVyZ2UubG8gXAotCXNjYWxhci5sbyBcCi0Jc2NhbGFyX2dyb3VwLmxvIFwKLQlzZXJpYWxpemUubG8gXAotCXN0YXNoX2NhY2hlLmxvIFwKLQlzdGFzaF90b19uZXh0LmxvIFwKLQl0YWJsZS5sbyBcCi0JdGFibGVfYXJyYXkubG8gXAotCXRhYmxlX2NvbnRhaW5lci5sbyBcCi0JdGFibGVfZGF0YS5sbyBcCi0JdGFibGVfZGF0YXNldC5sbyBcCi0JdGFibGVfaXRlcmF0b3IubG8gXAotCXRhYmxlX3Jvdy5sbyBcCi0JdGFibGVfdGRhdGEubG8gXAotCXdhdGNoZXIubG8KK0xPQkpTID0gZHVtbXkubG8KIAogYWxsOiBzdGFuZGFyZGFsbAogCiBsaWJuZXRzbm1waGVscGVycy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICAgICQoTE9CSlMpCi0JJChMSUJfTERfQ01EKSAkQCAkKExPQkpTKSAkKEFHRU5UTElCKSAkKE5FVFNOTVBMSUIpICQoTERGTEFHUykgJChMSUJfTERfTElCUykKKwkkKExJQl9MRF9DTUQpICRAICQoTE9CSlMpIEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgJChMSUJfTERfTElCUykKIAkkKFJBTkxJQikgJEAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYyBiL2FnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYwppbmRleCAwMmJjOGFmLi5lMWUxYjc4IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMKKysrIGIvYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jCkBAIC0yLDE4ICsyLDEwIEBACiAgKiAgQHsgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaWZkZWYgU1RJTExfVE9fRE8KLSAgICAgICAgLyoKLSAgICAgICAgICogSXQgb3VnaHQgdG8gYmUgcG9zc2libGUgdG8ganVzdCAjaW5jbHVkZSB0aGVzZSBmaWxlcywKLSAgICAgICAgICogICBidXQgdGhleSByZWx5IG9uIHZhcmlvdXMgb3RoZXIgdHlwZXMgYmVpbmcgZGVmaW5lZCBmaXJzdC4KLSAgICAgICAgICoKLSAgICAgICAgICogSSByZWFsbHkgY2FuJ3QgZmFjZSB0cmFja2luZyBkb3duIHRoZSBkZXBlbmRlbmN5IGNoYWluCi0gICAgICAgICAqICAganVzdCBhdCB0aGUgbW9tZW50LgotICAgICAgICAgKiBTbyB3ZSdsbCBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIHRoZSB3YXJuaW5ncy4uLi4KLSAgICAgICAgICovCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oPgpAQCAtMjEsMTUgKzEzLDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KIAotI2Vsc2UKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfaGVscGVycywgbGlibmV0c25tcGFnZW50KQogCi12b2lkICBuZXRzbm1wX2luaXRfZGVidWdfaGVscGVyKHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X3NlcmlhbGl6ZSh2b2lkKTsKLXZvaWQgIG5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyKHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXIodm9pZCk7Ci12b2lkICBuZXRzbm1wX2luaXRfdGFibGVfZGF0YXNldCh2b2lkKTsKLXZvaWQgIG5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXIodm9pZCk7Ci0jZW5kaWYKIAogLyoqIGNhbGwgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciBhbGwgaGFuZGxlcnMgd2l0aCBpbml0XyByb3V0aW5lcy4gKi8KIHZvaWQKQEAgLTM5LDggKzI0LDE2IEBACiAgICAgbmV0c25tcF9pbml0X3NlcmlhbGl6ZSgpOwogICAgIG5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyKCk7CiAgICAgbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXIoKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUCiAgICAgbmV0c25tcF9pbml0X3RhYmxlX2RhdGFzZXQoKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19NRVJHRQorICAgIG5ldHNubXBfaW5pdF9yb3dfbWVyZ2UoKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19NRVJHRSAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlcigpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KIH0KIAogLyoqIEBkZWZncm91cCB1dGlsaXRpZXMgdXRpbGl0eV9oYW5kbGVycwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMgYi9hZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYwppbmRleCA2NGJiYTg5Li5kNzlhY2JjIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYworKysgYi9hZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYwpAQCAtMyw5ICszLDE5IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihiYWJ5X3N0ZXBzLCBtaWJfaGVscGVycykKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0JBQllfU1RFUFMKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3JlcXVlc3RzX2Vycm9yKQorI2VuZGlmCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9CQUJZX1NURVBTCisKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmg+CiAKICNkZWZpbmUgQkFCWV9TVEVQU19QRVJfTU9ERV9NQVggICAgIDQKQEAgLTE0LDYgKzI0LDcgQEAKIHN0YXRpYyB1X3Nob3J0IGdldF9tb2RlX21hcFtCQUJZX1NURVBTX1BFUl9NT0RFX01BWF0gPSB7CiAgICAgTU9ERV9CU1RFUF9QUkVfUkVRVUVTVCwgTU9ERV9CU1RFUF9PQkpFQ1RfTE9PS1VQLCBCU1RFUF9VU0VfT1JJR0lOQUwsIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUIH07CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdGF0aWMgdV9zaG9ydCBzZXRfbW9kZV9tYXBbU05NUF9NU0dfSU5URVJOQUxfU0VUX01BWF1bQkFCWV9TVEVQU19QRVJfTU9ERV9NQVhdID0gewogICAgIC8qUjEqLwogICAgIHsgTU9ERV9CU1RFUF9QUkVfUkVRVUVTVCwgTU9ERV9CU1RFUF9PQkpFQ1RfTE9PS1VQLCBNT0RFX0JTVEVQX1JPV19DUkVBVEUsCkBAIC0zMyw2ICs0NCw3IEBACiAgICAgeyBNT0RFX0JTVEVQX1VORE9fQ09NTUlULCBNT0RFX0JTVEVQX1VORE9fU0VULCBNT0RFX0JTVEVQX1VORE9fQ0xFQU5VUCwKICAgICAgIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUfQogfTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogc3RhdGljIGludAogX2JhYnlfc3RlcHNfaGVscGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC01MSw2ICs2MywyMCBAQAogICogIEB7CiAgKi8KIAorc3RhdGljIG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyAqCituZXRzbm1wX2JhYnlfc3RlcHNfbW9kZXNfcmVmKG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyAqbWQpCit7CisgICAgbWQtPnJlZmNudCsrOworICAgIHJldHVybiBtZDsKK30KKworc3RhdGljIHZvaWQKK25ldHNubXBfYmFieV9zdGVwc19tb2Rlc19kZXJlZihuZXRzbm1wX2JhYnlfc3RlcHNfbW9kZXMgKm1kKQoreworICAgIGlmICgtLW1kLT5yZWZjbnQgPT0gMCkKKwlmcmVlKG1kKTsKK30KKwogLyoqIHJldHVybnMgYSBiYWJ5X3N0ZXBzIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuCiAgKiAgaGFuZGxlciBjaGFpbi4KICAqLwpAQCAtNzEsNyArOTcsMTAgQEAKICAgICAgICAgbWggPSBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKKwltZC0+cmVmY250ID0gMTsKICAgICAgICAgbWgtPm15dm9pZCA9IG1kOworCW1oLT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKW5ldHNubXBfYmFieV9zdGVwc19tb2Rlc19yZWY7CisJbWgtPmRhdGFfZnJlZSA9ICh2b2lkICgqKSh2b2lkICopKW5ldHNubXBfYmFieV9zdGVwc19tb2Rlc19kZXJlZjsKICAgICAgICAgaWYgKDAgPT0gbW9kZXMpCiAgICAgICAgICAgICBtb2RlcyA9IEJBQllfU1RFUF9BTEw7CiAgICAgICAgIG1kLT5yZWdpc3RlcmVkID0gbW9kZXM7CkBAIC05OSwxMSArMTI4LDEyIEBACiAgICAgREVCVUdNU0dUTCgoImJhYnlfc3RlcHMiLCAiR290IHJlcXVlc3QsIG1vZGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIscmVxaW5mby0+bW9kZSkpKTsKIAotICAgIGJzX21vZGVzID0gaGFuZGxlci0+bXl2b2lkOworICAgIGJzX21vZGVzID0gKG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyopaGFuZGxlci0+bXl2b2lkOwogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYnNfbW9kZXMpOwogCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgLyoKICAgICAgICAgICogY2xlYXIgY29tcGxldGVkIG1vZGVzCkBAIC0xMjEsNiArMTUxLDcgQEAKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIG1vZGVfbWFwX3B0ciA9IHNldF9tb2RlX21hcFtyZXFpbmZvLT5tb2RlXTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICAvKgpAQCAtMjIyLDYgKzI1Myw3IEBACiAgICAgICAgIGlmIChCU1RFUF9VU0VfT1JJR0lOQUwgIT0gbW9kZV9tYXBfcHRyW2ldKSB7CiAgICAgICAgICAgICB1X2ludCAgICBtb2RlX2ZsYWc7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogc2tpcCB1bmRvIGNvbW1pdCBpZiBjb21taXQgd2Fzbid0IGhpdCwgYW5kCiAgICAgICAgICAgICAgKiB1bmRvX2NsZWFudXAgaWYgdW5kb19zZXR1cCB3YXNuJ3QgaGl0LgpAQCAtMjQwLDYgKzI3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNraXBwaW5nIHVuZG8gY2xlYW51cCAobm8gdW5kbyBzZXR1cClcbiIpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9IG1vZGVfbWFwX3B0cltpXTsKICAgICAgICAgICAgIG1vZGVfZmxhZyA9IG5ldHNubXBfYmFieV9zdGVwX21vZGUyZmxhZyggbW9kZV9tYXBfcHRyW2ldICk7CkBAIC0yOTMsNyArMzI2LDEwIEBACiAgICAgICAgICAqIGluIGNvbW1pdCwgZnJlZSBvciB1bmRvLikKICAgICAgICAgICovCiAgICAgICAgIGlmIChNT0RFX0lTX0dFVChzYXZlX21vZGUpCi0gICAgICAgICAgICB8fCAoc2F2ZV9tb2RlIDwgU05NUF9NU0dfSU5URVJOQUxfU0VUX0NPTU1JVCkpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgICAgICB8fCAoc2F2ZV9tb2RlIDwgU05NUF9NU0dfSU5URVJOQUxfU0VUX0NPTU1JVCkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgICAgICkgewogICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX2Vycm9yKHJlcXVlc3RzKTsKICAgICAgICAgICAgIGlmKHJjKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImJhYnlfc3RlcHMiLCAiICAgRVJST1I6cmVxdWVzdCBlcnJvclxuIikpOwpAQCAtMzE1LDEyICszNTEsMTUgQEAKICAqICBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUKICAqICB1c2UuCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9pbml0LG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQkFCWV9TVEVQU19IQU5ETEVSX0lOSVQKIHZvaWQKIG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2luaXQodm9pZCkKIHsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZSgiYmFieV9zdGVwcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KEJBQllfU1RFUF9BTEwpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQkFCWV9TVEVQU19IQU5ETEVSX0lOSVQgKi8KIAogLyoqIEB9ICovCiAKQEAgLTM5MSw2ICs0MzAsNyBAQAogICAgICAgICAgICAgbWV0aG9kID0gYWNjZXNzX21ldGhvZHMtPmdldF92YWx1ZXM7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX0JTVEVQX0NIRUNLX1ZBTFVFOgogICAgICAgICBpZiggYWNjZXNzX21ldGhvZHMtPm9iamVjdF9zeW50YXhfY2hlY2tzICkKICAgICAgICAgICAgIG1ldGhvZCA9IGFjY2Vzc19tZXRob2RzLT5vYmplY3Rfc3ludGF4X2NoZWNrczsKQEAgLTQ0MCw2ICs0ODAsNyBAQAogICAgICAgICBpZiggYWNjZXNzX21ldGhvZHMtPnVuZG9fY2xlYW51cCApCiAgICAgICAgICAgICBtZXRob2QgPSBhY2Nlc3NfbWV0aG9kcy0+dW5kb19jbGVhbnVwOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgCiAgICAgY2FzZSBNT0RFX0JTVEVQX1BPU1RfUkVRVUVTVDoKICAgICAgICAgaWYoIGFjY2Vzc19tZXRob2RzLT5wb3N0X3JlcXVlc3QgKQpAQCAtNDg0LDYgKzUyNSw3IEBACiAgICAgc3dpdGNoKCBtb2RlICkgewogICAgICAgICBjYXNlIE1PREVfQlNURVBfT0JKRUNUX0xPT0tVUDoKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9CU1RFUF9TRVRfVkFMVUU6CiAgICAgICAgICAgICByZXR1cm4gQkFCWV9TVEVQX1NFVF9WQUxVRTsKICAgICAgICAgY2FzZSBNT0RFX0JTVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ6CkBAIC01MDgsNiArNTUwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfQ09NTUlUOwogICAgICAgICBjYXNlIE1PREVfQlNURVBfVU5ET19DT01NSVQ6CiAgICAgICAgICAgICByZXR1cm4gQkFCWV9TVEVQX1VORE9fQ09NTUlUOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoInVua25vd24gZmxhZyIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MTYsMyArNTU5LDcgQEAKIH0KIC8qKiAgQH0gKi8KIAorI2Vsc2UgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQkFCWV9TVEVQUyAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChiYWJ5X3N0ZXBzKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0JBQllfU1RFUFMgKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYyBiL2FnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMKaW5kZXggNGRkMTkxNC4uZTYwN2VkYSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYworKysgYi9hZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jCkBAIC0xLDExICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jIGIvYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMKaW5kZXggNTIwZDQ2My4uNTIwYTRjZiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMKKysrIGIvYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMKQEAgLTEsNCArMSwxNSBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTExLDYgKzIyLDExIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWNoZV9oYW5kbGVyLCBtaWJfaGVscGVycykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhY2hlX2ZpbmRfYnlfb2lkLCBjYWNoZV9oYW5kbGVyKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhY2hlX2dldF9oZWFkLCBjYWNoZV9oYW5kbGVyKQorCiBzdGF0aWMgbmV0c25tcF9jYWNoZSAgKmNhY2hlX2hlYWQgPSBOVUxMOwogc3RhdGljIGludCAgICAgICAgICAgICBjYWNoZV9vdXRzdGFuZGluZ192YWxpZCA9IDA7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIF9jYWNoZV9sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSApOwpAQCAtNjksNiArODUsMTQgQEAKICAqICB0aGUgY2FjaGUgd2hlbiBpdCBleHBpcmVzLiBUaGlzIGlzIHVzZWZ1bCBmb3Iga2VlcGluZyB0aGUgY2FjaGUgZnJlc2gsCiAgKiAgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBpbmNvbWluZyBzbm1wIHJlcXVlc3RzLgogICoKKyAqICBJZiBORVRTTk1QX0NBQ0hFX1JFU0VUX1RJTUVSX09OX1VTRSBpcyBzZXQsIHRoZSBleHBpcnkgdGltZXIgd2lsbCBiZQorICogIHJlc2V0IG9uIGVhY2ggY2FjaGUgYWNjZXNzLiBJbiBwcmFjdGljZSB0aGUgJ3RpbWVvdXQnIGJlY29tZXMgYSB0aW1lcgorICogIHdoaWNoIHRyaWdnZXJzIHdoZW4gdGhlIGNhY2hlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgaXMgdXNlZnVsCisgKiAgaWYgdGhlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkga2VwdCBzeW5jaHJvbml6ZWQ6IGUuZy4gYnkgcmVjZWl2aW5nCisgKiAgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZnJvbSBOZXRsaW5rLCBpbm90aWZ5IG9yIHNpbWlsYXIuIFRoaXMgc2hvdWxkCisgKiAgbm90IGJlIHVzZWQgaWYgY2FjaGUgaXMgbm90IHN5bmNocm9uaXplZCBhdXRvbWF0aWNhbGx5IGFzIGl0IHdvdWxkCisgKiAgcmVzdWx0IGluIHN0YWxlIGNhY2hlIGluZm9ybWF0aW9uIHdoZW4gaWYgcG9sbGluZyBoYXBwZW5zIHRvbyBmYXN0LgorICoKICAqCiAgKiAgSGVyZSBhcmUgc29tZSBzdWdnZXN0aW9ucyBmb3Igc29tZSBjb21tb24gc2l0dWF0aW9ucy4KICAqCkBAIC0xMDAsOSArMTI0LDIwIEBACiAgKiAgICAgICAgICBORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFCiAgKiAgICAgICAgICBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FECiAgKgorICogIER5bmFtaWNhbGx5IHVwZGF0ZWQsIHVubG9hZGVkIGFmdGVyIHRpbWVvdXQ6CisgKiAgICAgIElmIHRoZSBjYWNoZSBpcyBrZXB0IHVwIHRvIGRhdGUgZHluYW1pY2FsbHkgYnkgbGlzdGVuaW5nIGZvcgorICogICAgICBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBzb21laG93LCBidXQgaXQgc2hvdWxkIG5vdCBiZSBpbiBtZW1vcnkKKyAqICAgICAgaWYgaXQncyBub3QgbmVlZGVkLiBTZXQgdGhlIGZvbGxvd2luZyBmbGFnOgorICoKKyAqICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfUkVTRVRfVElNRVJfT05fVVNFCisgKgogICogIEB7CiAgKi8KIAorc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKCBuZXRzbm1wX2NhY2hlICpjYWNoZSApOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FDSEVfR0VUX0hFQUQKIC8qKiBnZXQgY2FjaGUgaGVhZAogICogQGludGVybmFsCiAgKiB1bmFkdmVydGlzZWQgZnVuY3Rpb24gdG8gZ2V0IGNhY2hlIGhlYWQuIFlvdSByZWFsbHkgc2hvdWxkIG5vdApAQCAtMTEzLDExICsxNDgsMTMgQEAKIHsKICAgICByZXR1cm4gY2FjaGVfaGVhZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBQ0hFX0dFVF9IRUFEICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUNIRV9GSU5EX0JZX09JRAogLyoqIGZpbmQgZXhpc3RpbmcgY2FjaGUKICAqLwogbmV0c25tcF9jYWNoZSAqCi1uZXRzbm1wX2NhY2hlX2ZpbmRfYnlfb2lkKG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKK25ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQoY29uc3Qgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQogewogICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKIApAQCAtMTI5LDEzICsxNjYsMTQgQEAKICAgICAKICAgICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBQ0hFX0ZJTkRfQllfT0lEICovCiAKIC8qKiByZXR1cm5zIGEgY2FjaGUKICAqLwogbmV0c25tcF9jYWNoZSAqCiBuZXRzbm1wX2NhY2hlX2NyZWF0ZShpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2ssCi0gICAgICAgICAgICAgICAgICAgICBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCiB7CiAgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlID0gTlVMTDsKIApAQCAtMTczLDYgKzIxMSw5NSBAQAogICAgIHJldHVybiBjYWNoZTsKIH0KIAorc3RhdGljIG5ldHNubXBfY2FjaGUgKgorbmV0c25tcF9jYWNoZV9yZWYobmV0c25tcF9jYWNoZSAqY2FjaGUpCit7CisgICAgY2FjaGUtPnJlZmNudCsrOworICAgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGljIHZvaWQKK25ldHNubXBfY2FjaGVfZGVyZWYobmV0c25tcF9jYWNoZSAqY2FjaGUpCit7CisgICAgaWYgKC0tY2FjaGUtPnJlZmNudCA9PSAwKSB7CisgICAgICAgIG5ldHNubXBfY2FjaGVfcmVtb3ZlKGNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9mcmVlKGNhY2hlKTsKKyAgICB9Cit9CisKKy8qKiBmcmVlcyBhIGNhY2hlCisgKi8KK2ludAorbmV0c25tcF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlKQoreworICAgIG5ldHNubXBfY2FjaGUgICpwb3M7CisKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIGZvciAocG9zID0gY2FjaGVfaGVhZDsgcG9zOyBwb3MgPSBwb3MtPm5leHQpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBjYWNoZSkgeworICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG91dF9sZW4gPSAwOworICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSAwOworICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmJ1ZiA9IE5VTEw7CisKKyAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX29iamlkKCh1X2NoYXIgKiopICZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHBvcy0+cm9vdG9pZCwgcG9zLT5yb290b2lkX2xlbik7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJub3QgZnJlZWluZyBjYWNoZSB3aXRoIHJvb3QgT0lEICVzIChzdGlsbCBpbiBsaXN0KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoMCAhPSBjYWNoZS0+dGltZXJfaWQpCisgICAgICAgIG5ldHNubXBfY2FjaGVfdGltZXJfc3RvcChjYWNoZSk7CisKKyAgICBpZiAoY2FjaGUtPnZhbGlkKQorICAgICAgICBfY2FjaGVfZnJlZShjYWNoZSk7CisKKyAgICBpZiAoY2FjaGUtPnRpbWVzdGFtcE0pCisJZnJlZShjYWNoZS0+dGltZXN0YW1wTSk7CisKKyAgICBpZiAoY2FjaGUtPnJvb3RvaWQpCisgICAgICAgIGZyZWUoY2FjaGUtPnJvb3RvaWQpOworCisgICAgZnJlZShjYWNoZSk7CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKiogcmVtb3ZlcyBhIGNhY2hlCisgKi8KK2ludAorbmV0c25tcF9jYWNoZV9yZW1vdmUobmV0c25tcF9jYWNoZSAqY2FjaGUpCit7CisgICAgbmV0c25tcF9jYWNoZSAgKmN1ciwqcHJldjsKKworICAgIGlmICghY2FjaGUgfHwgIWNhY2hlX2hlYWQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChjYWNoZSA9PSBjYWNoZV9oZWFkKSB7CisgICAgICAgIGNhY2hlX2hlYWQgPSBjYWNoZV9oZWFkLT5uZXh0OworICAgICAgICBpZiAoY2FjaGVfaGVhZCkKKyAgICAgICAgICAgIGNhY2hlX2hlYWQtPnByZXYgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwcmV2ID0gY2FjaGVfaGVhZDsKKyAgICBjdXIgPSBjYWNoZV9oZWFkLT5uZXh0OworICAgIGZvciAoOyBjdXI7IHByZXYgPSBjdXIsIGN1ciA9IGN1ci0+bmV4dCkgeworICAgICAgICBpZiAoY2FjaGUgPT0gY3VyKSB7CisgICAgICAgICAgICBwcmV2LT5uZXh0ID0gY3VyLT5uZXh0OworICAgICAgICAgICAgaWYgKGN1ci0+bmV4dCkKKyAgICAgICAgICAgICAgICBjdXItPm5leHQtPnByZXYgPSBjdXItPnByZXY7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIC8qKiBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIGNhY2hlIGxvYWQgZnVuY3Rpb24gKi8KIHN0YXRpYyB2b2lkCiBfdGltZXJfcmVsb2FkKHVuc2lnbmVkIGludCByZWdObywgdm9pZCAqY2xpZW50YXJncykKQEAgLTIxNyw3ICszNDQsNyBAQAogCiAgICAgY2FjaGUtPmZsYWdzICY9IH5ORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEOwogICAgIERFQlVHTVNHVCgoImNhY2hlX3RpbWVyOnN0YXJ0IiwKLSAgICAgICAgICAgICAgICJzdGFydGluZyB0aW1lciAlZCBmb3IgY2FjaGUgJXBcbiIsIGNhY2hlLT50aW1lcl9pZCwgY2FjaGUpKTsKKyAgICAgICAgICAgICAgICJzdGFydGluZyB0aW1lciAlbHUgZm9yIGNhY2hlICVwXG4iLCBjYWNoZS0+dGltZXJfaWQsIGNhY2hlKSk7CiAgICAgcmV0dXJuIGNhY2hlLT50aW1lcl9pZDsKIH0KIApAQCAtMjM0LDcgKzM2MSw3IEBACiAgICAgfQogCiAgICAgREVCVUdNU0dUKCgiY2FjaGVfdGltZXI6c3RvcCIsCi0gICAgICAgICAgICAgICAic3RvcHBpbmcgdGltZXIgJWQgZm9yIGNhY2hlICVwXG4iLCBjYWNoZS0+dGltZXJfaWQsIGNhY2hlKSk7CisgICAgICAgICAgICAgICAic3RvcHBpbmcgdGltZXIgJWx1IGZvciBjYWNoZSAlcFxuIiwgY2FjaGUtPnRpbWVyX2lkLCBjYWNoZSkpOwogCiAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKGNhY2hlLT50aW1lcl9pZCk7CiAgICAgY2FjaGUtPmZsYWdzIHw9IE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQ7CkBAIC0yNzAsMTIgKzM5NywyMyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKKy8qKiBNYWtlcyBzdXJlIHRoYXQgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGNhY2hlIGlzIGZyZWVkIHdoZW4gdGhlIGhhbmRsZXIKKyAqICBpcyB1bnJlZ2lzdGVyZWQuCisgKi8KK3ZvaWQgbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyLT5teXZvaWQpOworICAgICgobmV0c25tcF9jYWNoZSAqKWhhbmRsZXItPm15dm9pZCktPnJlZmNudCsrOworICAgIGhhbmRsZXItPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9jYWNoZV9yZWY7CisgICAgaGFuZGxlci0+ZGF0YV9mcmVlID0gKHZvaWQoKikodm9pZCopKW5ldHNubXBfY2FjaGVfZGVyZWY7Cit9CisKIC8qKiByZXR1cm5zIGEgY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gIAogICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQogewogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKnJldCA9IE5VTEw7CiAgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlID0gTlVMTDsKQEAgLTI4NSwxMiArNDIzLDE1IEBACiAgICAgICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUodGltZW91dCwgbG9hZF9ob29rLCBmcmVlX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdG9pZCwgcm9vdG9pZF9sZW4pOwogICAgICAgICByZXQtPm15dm9pZCA9ICh2b2lkICopIGNhY2hlOworICAgICAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShyZXQpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwogfQogCiAvKiogZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkgYnV0IGFsc28KICAqIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2NhY2hlX2hhbmRsZXJfcmVnaXN0ZXIsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9DQUNIRV9IQU5ETEVSX1JFR0lTVEVSCiBpbnQKIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICogcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlKiBjYWNoZSkKQEAgLTMwMSw5ICs0NDIsMTIgQEAKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBQ0hFX0hBTkRMRVJfUkVHSVNURVIgKi8KIAogLyoqIGZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpIGJ1dCBhbHNvCiAgKiBpbmplY3RzIGEgY2FjaGUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9yZWdpc3Rlcl9jYWNoZV9oYW5kbGVyLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfUkVHSVNURVJfQ0FDSEVfSEFORExFUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqIHJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssCkBAIC0zMTcsMTEgKzQ2MSwxMiBAQAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfUkVHSVNURVJfQ0FDSEVfSEFORExFUiAqLwogCi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgY2hhciAqCitzdGF0aWMgY2hhciAqCiBfYnVpbGRfY2FjaGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewotICAgIGNoYXIgKmR1cCA9IG1hbGxvYyhzdHJsZW4obmFtZSkgKyBzdHJsZW4oQ0FDSEVfTkFNRSkgKyAyKTsKKyAgICBjaGFyICpkdXAgPSAoY2hhciopbWFsbG9jKHN0cmxlbihuYW1lKSArIHN0cmxlbihDQUNIRV9OQU1FKSArIDIpOwogICAgIGlmIChOVUxMID09IGR1cCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ByaW50ZihkdXAsICIlczolcyIsIENBQ0hFX05BTUUsIG5hbWUpOwpAQCAtMzUyLDE3ICs0OTcsMjAgQEAKIHsKICAgICBuZXRzbm1wX2NhY2hlICAqcmVzdWx0OwogICAgIGNoYXIgKmNhY2hlX25hbWUgPSBfYnVpbGRfY2FjaGVfbmFtZShuYW1lKTsKLSAgICByZXN1bHQgPSBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgY2FjaGVfbmFtZSk7CisgICAgcmVzdWx0ID0gKG5ldHNubXBfY2FjaGUqKW5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBjYWNoZV9uYW1lKTsKICAgICBTTk1QX0ZSRUUoY2FjaGVfbmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqIEV4dHJhY3QgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2V4dHJhY3RfY2FjaGVfaW5mbyxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0VYVFJBQ1RfQ0FDSEVfSU5GTwogbmV0c25tcF9jYWNoZSAgKgogbmV0c25tcF9leHRyYWN0X2NhY2hlX2luZm8obmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKiByZXFpbmZvKQogewogICAgIHJldHVybiBuZXRzbm1wX2NhY2hlX3JlcWluZm9fZXh0cmFjdChyZXFpbmZvLCBDQUNIRV9OQU1FKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfRVhUUkFDVF9DQUNIRV9JTkZPICovCiAKIAogLyoqIENoZWNrIGlmIHRoZSBjYWNoZSB0aW1lb3V0IGhhcyBwYXNzZWQuIFNldHMgYW5kIHJldHVybiB0aGUgZXhwaXJlZCBmbGFnLiAqLwpAQCAtMzcxLDExICs1MTksMTMgQEAKIHsKICAgICBpZihOVUxMID09IGNhY2hlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZighY2FjaGUtPnZhbGlkIHx8IChOVUxMID09IGNhY2hlLT50aW1lc3RhbXApIHx8ICgtMSA9PSBjYWNoZS0+dGltZW91dCkpCisgICAgaWYgKGNhY2hlLT5leHBpcmVkKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZighY2FjaGUtPnZhbGlkIHx8IChOVUxMID09IGNhY2hlLT50aW1lc3RhbXBNKSB8fCAoLTEgPT0gY2FjaGUtPnRpbWVvdXQpKQogICAgICAgICBjYWNoZS0+ZXhwaXJlZCA9IDE7CiAgICAgZWxzZQotICAgICAgICBjYWNoZS0+ZXhwaXJlZCA9IGF0aW1lX3JlYWR5KGNhY2hlLT50aW1lc3RhbXAsIDEwMDAgKiBjYWNoZS0+dGltZW91dCk7CisgICAgICAgIGNhY2hlLT5leHBpcmVkID0gbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoY2FjaGUtPnRpbWVzdGFtcE0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCAqIGNhY2hlLT50aW1lb3V0KTsKICAgICAKICAgICByZXR1cm4gY2FjaGUtPmV4cGlyZWQ7CiB9CkBAIC00MDksMTEgKzU1OSwxNCBAQAogLyoqIElzIHRoZSBjYWNoZSB2YWxpZCBmb3IgYSBnaXZlbiByZXF1ZXN0PwogICogZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LiBuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKCkgaXMgcHJlZmVycmVkLgogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9pc19jYWNoZV92YWxpZCxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0lTX0NBQ0hFX1ZBTElECiBpbnQKIG5ldHNubXBfaXNfY2FjaGVfdmFsaWQobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKiByZXFpbmZvKQogewogICAgIHJldHVybiBuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKHJlcWluZm8sIENBQ0hFX05BTUUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9JU19DQUNIRV9WQUxJRCAqLwogCiAvKiogSW1wbGVtZW50cyB0aGUgY2FjaGUgaGFuZGxlciAqLwogaW50CkBAIC00NDMsNyArNTk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAiY2FjaGUgbm90IGZvdW5kLCBkaXNhYmxlZCBvciBoYWQgbm8gbG9hZCBtZXRob2RcbiIpKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgfQotICAgIHNucHJpbnRmKGFkZHJzdHIsc2l6ZW9mKGFkZHJzdHIpLCAiJXAiLCBjYWNoZSk7CisgICAgc25wcmludGYoYWRkcnN0cixzaXplb2YoYWRkcnN0ciksICIlbGQiLCAobG9uZyBpbnQpY2FjaGUpOwogICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6Y2FjaGVfaGFuZGxlciIsICJ1c2luZyBjYWNoZSAlczogIiwgYWRkcnN0cikpOwogICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOmNhY2hlX2hhbmRsZXIiLCBjYWNoZS0+cm9vdG9pZCwgY2FjaGUtPnJvb3RvaWRfbGVuKSk7CiAgICAgREVCVUdNU0coKCJoZWxwZXI6Y2FjaGVfaGFuZGxlciIsICJcbiIpKTsKQEAgLTQ2Myw3ICs2MTYsOSBAQAogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6Ci0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMTogeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAvKgogICAgICAgICAgKiBvbmx5IHRvdWNoIGNhY2hlIG9uY2UgcGVyIHBkdSByZXF1ZXN0LCB0byBwcmV2ZW50IGEgY2FjaGUKQEAgLTQ3NCw3ICs2MjksNyBAQAogICAgICAgICAgKiBtYXliZSB1c2UgYSByZWZlcmVuY2UgY291bnRlcj8KICAgICAgICAgICovCiAgICAgICAgIGlmIChuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKHJlcWluZm8sIGFkZHJzdHIpKQotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvKgogICAgICAgICAgKiBjYWxsIHRoZSBsb2FkIGhvb2ssIGFuZCB1cGRhdGUgdGhlIGNhY2hlIHRpbWVzdGFtcC4KQEAgLTQ4MywxNiArNjM4LDE2IEBACiAgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChjYWNoZSk7CiAgICAgICAgIG5ldHNubXBfY2FjaGVfcmVxaW5mb19pbnNlcnQoY2FjaGUsIHJlcWluZm8sIGFkZHJzdHIpOwogICAgICAgICAvKiogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICBuZXRzbm1wX2Fzc2VydChuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKHJlcWluZm8sIGFkZHJzdHIpKTsKICAgICAgICAgLyoqIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCi0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICBicmVhazsKIAogICAgICAgICAvKgogICAgICAgICAgKiBBIChzdWNjZXNzZnVsKSBTRVQgcmVxdWVzdCB3b3VsZG4ndCB0eXBpY2FsbHkgdHJpZ2dlciBhIHJlbG9hZCBvZgpAQCAtNTA2LDcgKzY2MSw4IEBACiAgICAgICAgICAgICBjYWNoZS0+dmFsaWQgPSAwOwogICAgICAgICB9CiAgICAgICAgIC8qKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgImNhY2hlX2hhbmRsZXI6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCkBAIC01MTQsOCArNjcwLDkgQEAKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQotICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7ICAgICAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKyAgICBpZiAoY2FjaGUtPmZsYWdzICYgTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UpCisgICAgICAgIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoJmNhY2hlLT50aW1lc3RhbXBNKTsKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU1OSwxMCArNzE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCByZWxlYXNlX2NhY2hlZF9yZXNvdXJjZXMsIE5VTEwpOwogICAgICAgICBjYWNoZV9vdXRzdGFuZGluZ192YWxpZCA9IDE7CiAgICAgfQotICAgIGlmIChjYWNoZS0+dGltZXN0YW1wKQotICAgICAgICBhdGltZV9zZXRNYXJrZXIoY2FjaGUtPnRpbWVzdGFtcCk7Ci0gICAgZWxzZQotICAgICAgICBjYWNoZS0+dGltZXN0YW1wID0gYXRpbWVfbmV3TWFya2VyKCk7CisgICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigmY2FjaGUtPnRpbWVzdGFtcE0pOwogICAgIERFQlVHTVNHVCgoImhlbHBlcjpjYWNoZV9oYW5kbGVyIiwgIiBsb2FkZWQgKCVkKVxuIiwgY2FjaGUtPnRpbWVvdXQpKTsKIAogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYyBiL2FnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jCmluZGV4IDRlMzU2OTUuLmU0YTg0MzggMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jCisrKyBiL2FnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jCkBAIC05LDEzICs5LDYgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTUzLDggKzQ2LDE0IEBACiAgICAgcmV0dXJuIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoImRlYnVnIiwgbmV0c25tcF9kZWJ1Z19oZWxwZXIpOwogfQogCisjaWZkZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKKworI2RlZmluZSBkZWJ1Z19wcmludF9yZXF1ZXN0cyh4KQorCisjZWxzZSAvKiBORVRTTk1QX05PX0RFQlVHR0lORyAqLworCiAvKiogQGludGVybmFsIGRlYnVnIHByaW50IHZhcmlhYmxlcyBpbiBhIGNoYWluICovCi12b2lkCitzdGF0aWMgdm9pZAogZGVidWdfcHJpbnRfcmVxdWVzdHMobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwpAQCAtODIsNiArODEsNyBAQAogICAgIH0KIH0KIAorI2VuZGlmIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCiAKIC8qKiBAaW50ZXJuYWwgSW1wbGVtZW50cyB0aGUgZGVidWcgaGFuZGxlciAqLwogaW50CkBAIC05MCw2MCArOTAsNjcgQEAKICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAogICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogeworICAgIGludCByZXQ7CiAKLSAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpocHRyOwotICAgIGludCAgICAgICAgICAgICBpLCByZXQsIGNvdW50OwotICAgIGNoYXIgICAgICAgICAgICpjcDsKKyAgICBERUJVR0lGKCJoZWxwZXI6ZGVidWciKSB7CisgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhwdHI7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICBpLCBjb3VudDsKIAotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiRW50ZXJpbmcgRGVidWdnaW5nIEhlbHBlcjpcbiIpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgSGFuZGxlciBSZWdpc3RyYXRpb24gSW5mbzpcbiIpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBOYW1lOiAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmVnaW5mby0+aGFuZGxlck5hbWUpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBDb250ZXh0OiAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgU05NUF9TVFJPUk5VTEwocmVnaW5mby0+Y29udGV4dE5hbWUpKSk7Ci0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgQmFzZSBPSUQ6ICAgICIpKTsKLSAgICBERUJVR01TR09JRCgoImhlbHBlcjpkZWJ1ZyIsIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7Ci0gICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiRW50ZXJpbmcgRGVidWdnaW5nIEhlbHBlcjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIEhhbmRsZXIgUmVnaXN0cmF0aW9uIEluZm86XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE5hbWU6ICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+aGFuZGxlck5hbWUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgQ29udGV4dDogICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBTTk1QX1NUUk9STlVMTChyZWdpbmZvLT5jb250ZXh0TmFtZSkpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgQmFzZSBPSUQ6ICAgICIpKTsKKyAgICAgICAgREVCVUdNU0dPSUQoKCJoZWxwZXI6ZGVidWciLCByZWdpbmZvLT5yb290b2lkLCByZWdpbmZvLT5yb290b2lkX2xlbikpOworICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKIAotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGVzOiAgICAgICAweCV4ID0gIiwKLSAgICAgICAgICAgICAgICByZWdpbmZvLT5tb2RlcykpOwotICAgIGZvciAoY291bnQgPSAwLCBpID0gcmVnaW5mby0+bW9kZXM7IGk7IGkgPSBpID4+IDEsIGNvdW50KyspIHsKLSAgICAgICAgaWYgKGkgJiAweDAxKSB7Ci0gICAgICAgICAgICBjcCA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImhhbmRsZXJfY2FuX21vZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSA8PCBjb3VudCk7Ci0gICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICIlcyB8ICIsIFNOTVBfU1RST1JOVUxMKGNwKSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBNb2RlczogICAgICAgMHgleCA9ICIsCisgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPm1vZGVzKSk7CisgICAgICAgIGZvciAoY291bnQgPSAwLCBpID0gcmVnaW5mby0+bW9kZXM7IGk7IGkgPSBpID4+IDEsIGNvdW50KyspIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgwMSkgeworICAgICAgICAgICAgICAgIGNwID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiaGFuZGxlcl9jYW5fbW9kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgPDwgY291bnQpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIiVzIHwgIiwgU05NUF9TVFJPUk5VTEwoY3ApKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUHJpb3JpdHk6ICAgICVkXG4iLAorICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5wcmlvcml0eSkpOworCisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBIYW5kbGVyIENhbGxpbmcgQ2hhaW46XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIikpOworICAgICAgICBmb3IgKGhwdHIgPSByZWdpbmZvLT5oYW5kbGVyOyBocHRyOyBocHRyID0gaHB0ci0+bmV4dCkgeworICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIC0+ICVzIiwgaHB0ci0+aGFuZGxlcl9uYW1lKSk7CisgICAgICAgICAgICBpZiAoaHB0ci0+bXl2b2lkKQorICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIiBbbXl2b2lkID0gJXBdIiwgaHB0ci0+bXl2b2lkKSk7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIFJlcXVlc3QgaW5mb3JtYXRpb246XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGU6ICAgICAgICAlcyAoJWQgPSAweCV4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlLCByZXFpbmZvLT5tb2RlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJlcXVlc3QgVmFyaWFibGVzOlxuIikpOworICAgICAgICBkZWJ1Z19wcmludF9yZXF1ZXN0cyhyZXF1ZXN0cyk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIC0tLSBjYWxsaW5nIG5leHQgaGFuZGxlciAtLS0gXG4iKSk7CiAgICAgfQotICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIlxuIikpOwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUHJpb3JpdHk6ICAgICVkXG4iLAotICAgICAgICAgICAgICAgIHJlZ2luZm8tPnByaW9yaXR5KSk7Ci0KLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgSGFuZGxlciBDYWxsaW5nIENoYWluOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIikpOwotICAgIGZvciAoaHB0ciA9IHJlZ2luZm8tPmhhbmRsZXI7IGhwdHI7IGhwdHIgPSBocHRyLT5uZXh0KSB7Ci0gICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIiAtPiAlcyIsIGhwdHItPmhhbmRsZXJfbmFtZSkpOwotICAgICAgICBpZiAoaHB0ci0+bXl2b2lkKQotICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIFtteXZvaWQgPSAleF0iLCBocHRyLT5teXZvaWQpKTsKLSAgICB9Ci0gICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7Ci0KLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgUmVxdWVzdCBpbmZvcm1hdGlvbjpcbiIpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBNb2RlOiAgICAgICAgJXMgKCVkID0gMHgleClcbiIsCi0gICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAotICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUsIHJlcWluZm8tPm1vZGUpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBSZXF1ZXN0IFZhcmlhYmxlczpcbiIpKTsKLSAgICBkZWJ1Z19wcmludF9yZXF1ZXN0cyhyZXF1ZXN0cyk7Ci0KLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgLS0tIGNhbGxpbmcgbmV4dCBoYW5kbGVyIC0tLSBcbiIpKTsKICAgICByZXQgPSBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sIHJlcXVlc3RzKTsKIAotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBSZXN1bHRzOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJldHVybmVkIGNvZGU6ICVkXG4iLCByZXQpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBSZXR1cm5lZCBWYXJpYWJsZXM6XG4iKSk7Ci0gICAgZGVidWdfcHJpbnRfcmVxdWVzdHMocmVxdWVzdHMpOworICAgIERFQlVHSUYoImhlbHBlcjpkZWJ1ZyIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIFJlc3VsdHM6XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJldHVybmVkIGNvZGU6ICVkXG4iLCByZXQpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmV0dXJuZWQgVmFyaWFibGVzOlxuIikpOworICAgICAgICBkZWJ1Z19wcmludF9yZXF1ZXN0cyhyZXF1ZXN0cyk7CiAKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIkV4aXRpbmcgRGVidWdnaW5nIEhlbHBlcjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICJFeGl0aW5nIERlYnVnZ2luZyBIZWxwZXI6XG4iKSk7CisgICAgfQorCiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTU3LDQgKzE2NCwzIEBACiAgICAgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUoImRlYnVnIiwgbmV0c25tcF9nZXRfZGVidWdfaGFuZGxlcigpKTsKIH0KIC8qKiAgQH0gKi8KLQpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9kdW1teS5jIGIvYWdlbnQvaGVscGVycy9kdW1teS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzlhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9oZWxwZXJzL2R1bW15LmMKQEAgLTAsMCArMSBAQAorY2hhciBjb25zdCBuZXRzbm1wX2hlbHBlcnNfZHVtbXlfdGV4dFtdID0gImR1bW15IHN5bWJvbCB0byBtYWtlIHN1cmUgdGhhdCBsaW5raW5nIG5ldHNubXBoZWxwZXJzIGRvZXMgbm90IGZhaWwgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGVtcHR5IGxpYnJhcmllcy4iOwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jIGIvYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCmluZGV4IDVjOWUxNmQuLmE1ZWU4NDEgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvaW5zdGFuY2UuYworKysgYi9hZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMKQEAgLTksNiArOSwxMiBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oPgogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaWYgSEFWRV9TVFJJTkdfSApAQCAtMTgsMTYgKzI0LDE3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKGluc3RhbmNlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluc3RhbmNlLCBtaWJfaGVscGVycykKKwogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9zIHsKKyAgICBpbnQgICByZWZjbnQ7CiAgICAgY2hhciAqZmlsZV9uYW1lOwogICAgIEZJTEUgKmZpbGVwOwotICAgIGludCAgIHR5cGU7CisgICAgdV9jaGFyIHR5cGU7CiAgICAgaW50ICAgZmxhZ3M7CiB9IG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2U7CiAKQEAgLTM3LDYgKzQ0LDIyIEBACiAgKiAgQHsKICAqLwogCitzdGF0aWMgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZSAqCituZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3JlZihuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICpuZmkpCit7CisgICAgbmZpLT5yZWZjbnQrKzsKKyAgICByZXR1cm4gbmZpOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9kZXJlZihuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICpuZmkpCit7CisgICAgaWYgKC0tbmZpLT5yZWZjbnQgPT0gMCkgeworCWZyZWUobmZpLT5maWxlX25hbWUpOworCWZyZWUobmZpKTsKKyAgICB9Cit9CisKIC8qKgogICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlciwgY2FsbHMgbmV0c25tcF9jcmVhdGVfaGFuZGxlciwgd2hpY2gKICAqIHRoZW4gY291bGQgYmUgcmVnaXN0ZXJlZCwgdXNpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkuCkBAIC0xMDgsOCArMTMxLDggQEAKIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogZ2V0X3JlZyhjb25zdCBjaGFyICpuYW1lLAogICAgICAgICBjb25zdCBjaGFyICpvdXJuYW1lLAotICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCi0gICAgICAgIHZvaWQgKml0LAorICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgIG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2UgKml0LAogICAgICAgICBpbnQgbW9kZXMsCiAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc2NhbGFyaCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKQEAgLTEyNCw3ICsxNDcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlcyk7CiAgICAgICAgIG15aGFuZGxlciA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXIob3VybmFtZSwgc2NhbGFyaCk7Ci0gICAgICAgIG15aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKikgaXQ7CisgICAgICAgIG15aGFuZGxlci0+bXl2b2lkID0gaXQ7CisJbXloYW5kbGVyLT5kYXRhX2Nsb25lID0gKHZvaWQqKCopKHZvaWQqKSluZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3JlZjsKKwlteWhhbmRsZXItPmRhdGFfZnJlZSA9ICh2b2lkKCopKHZvaWQqKSluZXRzbm1wX251bV9maWxlX2luc3RhbmNlX2RlcmVmOwogICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKG15cmVnLCBteWhhbmRsZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG15cmVnID0KQEAgLTEzMiw3ICsxNTcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhcmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzKTsKLSAgICAgICAgbXlyZWctPmhhbmRsZXItPm15dm9pZCA9ICh2b2lkICopIGl0OworICAgICAgICBteXJlZy0+aGFuZGxlci0+bXl2b2lkID0gaXQ7CisJbXlyZWctPmhhbmRsZXItPmRhdGFfY2xvbmUKKwkgICAgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9yZWY7CisJbXlyZWctPmhhbmRsZXItPmRhdGFfZnJlZQorCSAgICA9ICh2b2lkICgqKSh2b2lkICopKW5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfZGVyZWY7CiAgICAgfQogICAgIGlmIChjb250ZXh0TmFtZSkKICAgICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKQEAgLTE0MCwyNTUgKzE2OSwzMTggQEAKIH0KIAogLyogV2F0Y2hlZCAnbG9uZycgaW5zdGFuY2VzIGFyZSB3cml0YWJsZSBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IHN5c3RlbXMgICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9VTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAidWxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9VTE9OR19JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWxvbmdfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVUxPTkdfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAidWxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZih1X2xvbmcpLAorICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTE9OR19JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImNvdW50ZXIzMl9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgQVNOX0NPVU5URVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0NPVU5URVIzMl9JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X2xvbmdfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0xPTkdfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihsb25nKSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0xPTkdfSU5TVEFOQ0UgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvbmdfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGxvbmcpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT05HX0lOU1RBTkNFICovCiAKIC8qIFdhdGNoZWQgJ2ludCcgaW5zdGFuY2VzIGFyZSBvbmx5IHdyaXRhYmxlIG9uIDMyLWJpdCBzeXN0ZW1zICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfb25seV91aW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9VSU5UX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3VpbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAidWludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZih1bnNpZ25lZCBpbnQpLAorICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfVUlOVF9JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWludF9pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VSU5UX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfdWludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1aW50X2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZih1bnNpZ25lZCBpbnQpLAorICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VSU5UX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfaW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9JTlRfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGludCksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9JTlRfSU5TVEFOQ0UgKi8KIAogICAvKgogICAgKiBDb21wYXRpYmlsaXR5IHdpdGggZWFybGllciAoaW5jb25zaXN0ZW50bHkgbmFtZWQpIHJvdXRpbmUKICAgICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZSxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfSU5UX0lOU1RBTkNFCiBpbnQKIHJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZShuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQsIHN1YmhhbmRsZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRSAqLwogCiAvKgogICogQ29udGV4dCByZWdpc3RyYXRpb25zCiAgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9VTE9OR19JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAidWxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfVUxPTkdfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9VTE9OR19JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZyA9CisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9VTE9OR19JTlNUQU5DRV9DT05URVhUICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX0NPVU5URVIzMl9JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJjb3VudGVyMzJfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIG5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZih1X2xvbmcpLCBBU05fQ09VTlRFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZyA9CisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YobG9uZyksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9MT05HX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9MT05HX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImxvbmdfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZyA9CisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGxvbmcpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9MT05HX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX2ludF9pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0lOVF9JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJpbnRfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfSU5UX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfSU5UX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJpbnRfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihpbnQpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfSU5UX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAogLyoKICAqIENvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIChpbmNvbnNpc3RlbnRseSBuYW1lZCkgcm91dGluZQogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9JTlRfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiByZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQpAQCAtMzk4LDcgKzQ5MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRV9DT05URVhUICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9OVU1fRklMRV9JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKQEAgLTQyMywxMSArNTE4LDEyIEBACiAgICAgICAgIHJldHVybiBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKICAgICB9CiAKKyAgICBuZmktPnJlZmNudCA9IDE7CiAgICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJmaWxlX251bV9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIG5maSwKICAgICAgICAgICAgICAgICAgICAgbW9kZSwgbmV0c25tcF9pbnN0YW5jZV9udW1fZmlsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7CiAgICAgaWYgKE5VTEwgPT0gbXlyZWcpIHsKLSAgICAgICAgZnJlZShuZmkpOyAvKiBTTk1QX0ZSRUUgb3ZlcmtpbGwgb24gbG9jYWwgdmFyICovCisgICAgICAgIG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfZGVyZWYobmZpKTsKICAgICAgICAgcmV0dXJuIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEOwogICAgIH0KIApAQCAtNDM4LDcgKzUzNCwxMCBAQAogCiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfTlVNX0ZJTEVfSU5TVEFOQ0UgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX2ludF9pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9JTlRfSU5TVEFOQ0UKIC8qKgogICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW4gaW50IGhlbHBlciBoYW5kbGVyIHRvIGEgc3BlY2lmaWVkIE9JRC4KICAqCkBAIC00NTksMjg0ICs1NTgsMjUgQEAKICAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJpbnRfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfSU5UX0lOU1RBTkNFICovCiAKLWludAotbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCisjaWZkZWYgSEFWRV9ETUFMTE9DX0gKK3N0YXRpYyB2b2lkIGZyZWVfd3JhcHBlcih2b2lkICogcCkKIHsKLQotICAgIHVfbG9uZyAgICAgICAgICppdCA9ICh1X2xvbmcgKikgaGFuZGxlci0+bXl2b2lkOwotICAgIHVfbG9uZyAgICAgICAgICppdF9zYXZlOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciIsICJHb3QgcmVxdWVzdDogICVkXG4iLAotICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKLQotICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBkYXRhIHJlcXVlc3RzIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfR0VUOgotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX1VOU0lHTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBpdCwgc2l6ZW9mKCppdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX1VOU0lHTkVEKQotICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdUWVBFKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgotICAgICAgICAvKgotICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlciAKLSAgICAgICAgICovCi0gICAgICAgIGl0X3NhdmUgPSBuZXRzbm1wX21lbWR1cChpdCwgc2l6ZW9mKHVfbG9uZykpOwotICAgICAgICBpZiAoaXRfc2F2ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCB1X2xvbmcgJWx1IC0+ICVsdVxuIiwgKml0LAotICAgICAgICAgICAgICAgICAgICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSkpOwotICAgICAgICAqaXQgPSAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgICppdCA9Ci0gICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSEFORExFUl9OQU1FKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICAvKgotICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotCi0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgZnJlZShwKTsKIH0KLQotaW50Ci1uZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCi17Ci0KLSAgICB1X2xvbmcgICAgICAgICAqaXQgPSAodV9sb25nICopIGhhbmRsZXItPm15dm9pZDsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyIiwKLSAgICAgICAgICAgICAgICAiR290IHJlcXVlc3Q6ICAlZFxuIiwgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0gICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgaXQsIHNpemVvZigqaXQpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU0VUIHJlcXVlc3RzLiAgU2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgcmVnaXN0ZXJlZCBSV1JJVEUgCi0gICAgICAgICAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsCi0gICAgICAgICAgICAgICAgICJuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyOiBpbGxlZ2FsIG1vZGVcbiIpOwotICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi1pbnQKLW5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCi17Ci0KLSAgICBsb25nICAgICAgICAgICAqaXQgPSAobG9uZyAqKSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgbG9uZyAgICAgICAgICAgKml0X3NhdmU7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIiLCAiR290IHJlcXVlc3Q6ICAlZFxuIiwKLSAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7Ci0KLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZGF0YSByZXF1ZXN0cyAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX0dFVDoKLSAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBpdCwgc2l6ZW9mKCppdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX0lOVEVHRVIpCi0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgaXRfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKGl0LCBzaXplb2YobG9uZykpOwotICAgICAgICBpZiAoaXRfc2F2ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCB1X2xvbmcgJWx1IC0+ICVsdVxuIiwgKml0LAotICAgICAgICAgICAgICAgICAgICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSkpOwotICAgICAgICAqaXQgPSAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgICppdCA9Ci0gICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSEFORExFUl9OQU1FKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICAvKgotICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCi0gICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotaW50Ci1uZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCi17Ci0KLSAgICBpbnQgKml0ID0gKGludCAqKSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgaW50ICppdF9zYXZlOwotICAgIGxvbmcgdG1wX2l0OwotICAgIAotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0JLyoKLQkgKiBVc2UgYSBsb25nIGhlcmUsIG90aGVyd2lzZSBvbiA2NCBiaXQgdXNlIG9mIGFuIGludCB3b3VsZCBmYWlsCi0JICovCi0JdG1wX2l0ID0gKml0OwotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZ0bXBfaXQsIHNpemVvZih0bXBfaXQpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU0VUIHJlcXVlc3RzLiAgU2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgcmVnaXN0ZXJlZCBSV1JJVEUgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6Ci0gICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IEFTTl9JTlRFR0VSKQotICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdUWVBFKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgotICAgICAgICAvKgotICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlciAKLSAgICAgICAgICovCi0gICAgICAgIGl0X3NhdmUgPSBuZXRzbm1wX21lbWR1cChpdCwgc2l6ZW9mKGludCkpOwotICAgICAgICBpZiAoaXRfc2F2ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCBpbnQgJWQgLT4gJWxkXG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9IChpbnQpICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfaW50ICopIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSEFORExFUl9OQU1FKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICAvKgotICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCi0gICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKIAogaW50CiBuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTc0NSw3ICs1ODUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZSAqbmZpOwotICAgIHVfbG9uZyBpdCwgKml0X3NhdmU7CisgICAgdV9sb25nIGl0OworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICB1X2xvbmcgKml0X3NhdmU7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgaW50IHJjOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBoYW5kbGVyKTsKQEAgLTc4Nyw2ICs2MzAsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgPT0gbmZpLT5maWxlcCk7CiAgICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IG5maS0+dHlwZSkKQEAgLTgyMSw3ICs2NjUsNyBAQAogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlNUQU5DRV9IQU5ETEVSX05BTUUsIGl0X3NhdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJlZV93cmFwcGVyKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC04NTksNiArNzAzLDEyIEBACiAgICAgICAgICAgICBuZmktPmZpbGVwID0gTlVMTDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAibmV0c25tcF9pbnN0YW5jZV9udW1fZmlsZV9oYW5kbGVyOiBpbGxlZ2FsIG1vZGVcbiIpOworICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICB9CiAKICAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQpAQCAtODY4LDg2ICs3MTgsNiBAQAogfQogCiBpbnQKLW5ldHNubXBfaW5zdGFuY2VfdWludF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCi17Ci0KLSAgICB1bnNpZ25lZCBpbnQgKml0ID0gKHVuc2lnbmVkIGludCAqKSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgdW5zaWduZWQgaW50ICppdF9zYXZlOwotICAgIHVuc2lnbmVkIGxvbmcgdG1wX2l0OwotICAgIAotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlciIsICJHb3QgcmVxdWVzdDogICVkXG4iLAotICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKLQotICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBkYXRhIHJlcXVlc3RzIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfR0VUOgotCS8qCi0JICogVXNlIGEgbG9uZyBoZXJlLCBvdGhlcndpc2Ugb24gNjQgYml0IHVzZSBvZiBhbiBpbnQgd291bGQgZmFpbAotCSAqLwotCXRtcF9pdCA9ICppdDsKLSAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9VTlNJR05FRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnRtcF9pdCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU0VUIHJlcXVlc3RzLiAgU2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgcmVnaXN0ZXJlZCBSV1JJVEUgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6Ci0gICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IEFTTl9VTlNJR05FRCkKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVFlQRSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKLSAgICAgICAgLyoKLSAgICAgICAgICogc3RvcmUgb2xkIGluZm8gZm9yIHVuZG8gbGF0ZXIgCi0gICAgICAgICAqLwotICAgICAgICBpdF9zYXZlID0gbmV0c25tcF9tZW1kdXAoaXQsIHNpemVvZih1X2ludCkpOwotICAgICAgICBpZiAoaXRfc2F2ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCB1aW50ICVkIC0+ICVsZFxuIiwgKml0LAotICAgICAgICAgICAgICAgICAgICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSkpOwotICAgICAgICAqaXQgPSAodW5zaWduZWQgaW50KSAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgICppdCA9Ci0gICAgICAgICAgICAqKCh1X2ludCAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOU1RBTkNFX0hBTkRMRVJfTkFNRSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgotICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKLSAgICAgICAgLyoKLSAgICAgICAgICogbm90aGluZyB0byBkbyAKLSAgICAgICAgICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQotICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLWludAogbmV0c25tcF9pbnN0YW5jZV9oZWxwZXJfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKQEAgLTk3OSw2ICs3NDksNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTk5NCw2ICs3NjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgICAgIGlmIChjbXAgPCAwIHx8IChjbXAgPT0gMCAmJiByZXF1ZXN0cy0+aW5jbHVzaXZlKSkgewpAQCAtMTAxOSw2ICs3OTEsMTEgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJuZXRzbm1wX2luc3RhbmNlX2hlbHBlcl9oYW5kbGVyOiBpbGxlZ2FsIG1vZGVcbiIpOworICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICB9CiAgICAgLyoKICAgICAgKiBnb3QgaGVyZSBvbmx5IGlmIGlsbGVnYWwgbW9kZSBmb3VuZCAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jIGIvYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMKaW5kZXggOTEyZjU4Yy4uMGJmY2M2OSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMKKysrIGIvYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMKQEAgLTksMTIgKzksMTcgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShtb2RlX2VuZF9jYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1vZGVfZW5kX2NhbGwsIG1pYl9oZWxwZXJzKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTU9ERV9FTkRfQ0FMTAogLyoqIEBkZWZncm91cCBtb2RlX2VuZF9jYWxsIG1vZGVfZW5kX2NhbGwKICAqICBBdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHJlcXVlc3RzLCBjYWxsIGFub3RoZXIgaGFuZGxlciBob29rLgogICogIEhhbmRsZXJzIHRoYXQgd2FudCB0byBsb29wIHRocm91Z2ggYSBzZXJpZXMgb2YgcmVxdWVzdHMgYW5kIHRoZW4KQEAgLTEwMSw3ICsxMDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogCiAgICAgLyogdGhlbiBjYWxsIHRoZSBjYWxsYmFjayBoYW5kbGVycyAqLwotICAgIGZvcihwdHIgPSBoYW5kbGVyLT5teXZvaWQ7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgZm9yIChwdHIgPSAobmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdCopaGFuZGxlci0+bXl2b2lkOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgewogICAgICAgICBpZiAocHRyLT5tb2RlID09IE5FVFNOTVBfTU9ERV9FTkRfQUxMX01PREVTIHx8CiAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID09IHB0ci0+bW9kZSkgewogICAgICAgICAgICAgcmV0MiA9IG5ldHNubXBfY2FsbF9oYW5kbGVyKHB0ci0+Y2FsbGJhY2tfaGFuZGxlciwgcmVnaW5mbywKQEAgLTExMyw1ICsxMTgsMTAgQEAKICAgICAKICAgICByZXR1cm4gcmV0MjsKIH0KKyNlbHNlCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKG1vZGVfZW5kX2NhbGwpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTU9ERV9FTkRfQ0FMTCAqLworCisKIC8qKiAgQH0gKi8KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jIGIvYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jCmluZGV4IGU1NDNmNTcuLjJhN2E2NjQgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYworKysgYi9hZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMKQEAgLTg0LDYgKzg0LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC0xMDAsNiArMTAxLDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBwcm9jZXNzIFNFVHMgc3BlY2lhbGx5LCBhbmQgcG9zc2libHkgb3RoZXJzIAogICAgICAgICAgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5zdXBwb3J0ZWQgbW9kZSBmb3IgbXVsdGlwbGV4ZXI6ICVkXG4iLAogICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvbnVsbC5jIGIvYWdlbnQvaGVscGVycy9udWxsLmMKaW5kZXggZDExMGViOC4uOTdkZmM5MiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9udWxsLmMKKysrIGIvYWdlbnQvaGVscGVycy9udWxsLmMKQEAgLTEsMTYgKzEsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L251bGwuaD4KKwogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9udWxsLmg+Ci0KIGludAogbmV0c25tcF9yZWdpc3Rlcl9udWxsKG9pZCAqIGxvYywgc2l6ZV90IGxvY19sZW4pCiB7CkBAIC0yMywxNCArMjMsMTYgQEAKIHsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOwogICAgIHJlZ2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24pOwotICAgIHJlZ2luZm8tPmhhbmRsZXJOYW1lID0gc3RyZHVwKCIiKTsKLSAgICByZWdpbmZvLT5yb290b2lkID0gbG9jOwotICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuID0gbG9jX2xlbjsKLSAgICByZWdpbmZvLT5oYW5kbGVyID0KLSAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigibnVsbCIsIG5ldHNubXBfbnVsbF9oYW5kbGVyKTsKLSAgICBpZiAoY29udGV4dE5hbWUpCi0gICAgICAgIHJlZ2luZm8tPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKLSAgICByZWdpbmZvLT5tb2RlcyA9IEhBTkRMRVJfQ0FOX0RFRkFVTFQ7CisgICAgaWYgKHJlZ2luZm8gIT0gTlVMTCkgeworICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSA9IHN0cmR1cCgiIik7CisgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQgPSBsb2M7CisgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuID0gbG9jX2xlbjsKKyAgICAgICAgcmVnaW5mby0+aGFuZGxlciA9CisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJudWxsIiwgbmV0c25tcF9udWxsX2hhbmRsZXIpOworICAgICAgICBpZiAoY29udGV4dE5hbWUpCisgICAgICAgICAgICByZWdpbmZvLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgICAgIHJlZ2luZm8tPm1vZGVzID0gSEFORExFUl9DQU5fREVGQVVMVCB8IEhBTkRMRVJfQ0FOX0dFVEJVTEs7CisgICAgfQogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvb2xkX2FwaS5jIGIvYWdlbnQvaGVscGVycy9vbGRfYXBpLmMKaW5kZXggNmUzNjc3Ni4uZDJiOTlkOSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9vbGRfYXBpLmMKKysrIGIvYWdlbnQvaGVscGVycy9vbGRfYXBpLmMKQEAgLTEsMTkgKzEsMzEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L29sZF9hcGkuaD4KKwogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9vbGRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogI2RlZmluZSBNSUJfQ0xJRU5UU19BUkVfRVZJTCAxCiAKKyNpZmRlZiBIQVZFX0RNQUxMT0NfSAorc3RhdGljIHZvaWQgZnJlZV93cmFwcGVyKHZvaWQgKiBwKQoreworICAgIGZyZWUocCk7Cit9CisjZWxzZQorI2RlZmluZSBmcmVlX3dyYXBwZXIgZnJlZQorI2VuZGlmCisKIC8qCiAgKiBkb24ndCB1c2UgdGhlc2UhIAogICovCkBAIC0zOSw2ICs1MSwxOSBAQAogICAgIHJldHVybiBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJvbGRfYXBpIiwgbmV0c25tcF9vbGRfYXBpX2hlbHBlcik7CiB9CiAKK3N0cnVjdCB2YXJpYWJsZSAqCituZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZShjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhcikKK3sKKyAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhcjIgPSBOVUxMOworICAgIAorICAgIGlmICh2YXIpIHsKKyAgICAgICAgY29uc3QgaW50IHZhcnNpemUgPSBvZmZzZXRvZihzdHJ1Y3QgdmFyaWFibGUsIG5hbWUpICsgdmFyLT5uYW1lbGVuICogc2l6ZW9mKHZhci0+bmFtZVswXSk7CisgICAgICAgIHZhcjIgPSBtYWxsb2ModmFyc2l6ZSk7CisgICAgICAgIGlmICh2YXIyKQorICAgICAgICAgICAgbWVtY3B5KHZhcjIsIHZhciwgdmFyc2l6ZSk7CisgICAgfQorICAgIHJldHVybiB2YXIyOworfQogCiAvKiogUmVnaXN0ZXJzIGFuIG9sZCBBUEkgc2V0IGludG8gdGhlIG1pYiB0cmVlLiAgRnVuY3Rpb25hbGx5IHRoaXMKICAqIG1pbWljcyB0aGUgb2xkIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkgZnVuY3Rpb24gKGFuZCBpbiBmYWN0IHRoZSBuZXcKQEAgLTQ2LDEwICs3MSwxMCBAQAogICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaShjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBtaWJsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pYmxvY2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlX3N1YmlkLApAQCAtNjcsMjEgKzkyLDMxIEBACiAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdnA7CiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8gPQogICAgICAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKTsKKyAgICAgICAgaWYgKHJlZ2luZm8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAKLSAgICAgICAgdnAgPSBuZXRzbm1wX21lbWR1cCgoY29uc3Qgc3RydWN0IHZhcmlhYmxlICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjb25zdCBjaGFyICopIHZhciArIHZhcnNpemUgKiBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzaXplKTsKKwl2cCA9IG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikKKwkJCQkJKChjb25zdCBjaGFyICopIHZhciArIHZhcnNpemUgKiBpKSk7CiAKICAgICAgICAgcmVnaW5mby0+aGFuZGxlciA9IGdldF9vbGRfYXBpX2hhbmRsZXIoKTsKICAgICAgICAgcmVnaW5mby0+aGFuZGxlck5hbWUgPSBzdHJkdXAobW9kdWxlTmFtZSk7CiAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuID0gKG1pYmxvY2xlbiArIHZwLT5uYW1lbGVuKTsKICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9CiAgICAgICAgICAgICAob2lkICopIG1hbGxvYyhyZWdpbmZvLT5yb290b2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgaWYgKHJlZ2luZm8tPnJvb3RvaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgU05NUF9GUkVFKHZwKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyZWdpbmZvLT5oYW5kbGVyTmFtZSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUocmVnaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CiAKICAgICAgICAgbWVtY3B5KHJlZ2luZm8tPnJvb3RvaWQsIG1pYmxvYywgbWlibG9jbGVuICogc2l6ZW9mKG9pZCkpOwogICAgICAgICBtZW1jcHkocmVnaW5mby0+cm9vdG9pZCArIG1pYmxvY2xlbiwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuCiAgICAgICAgICAgICAgICAqIHNpemVvZihvaWQpKTsKICAgICAgICAgcmVnaW5mby0+aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKikgdnA7CisgICAgICAgIHJlZ2luZm8tPmhhbmRsZXItPmRhdGFfY2xvbmUKKwkgICAgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGU7CisgICAgICAgIHJlZ2luZm8tPmhhbmRsZXItPmRhdGFfZnJlZSA9IGZyZWU7CiAKICAgICAgICAgcmVnaW5mby0+cHJpb3JpdHkgPSBwcmlvcml0eTsKICAgICAgICAgcmVnaW5mby0+cmFuZ2Vfc3ViaWQgPSByYW5nZV9zdWJpZDsKQEAgLTg5LDE0ICsxMjQsMTUgQEAKICAgICAgICAgcmVnaW5mby0+cmFuZ2VfdWJvdW5kID0gcmFuZ2VfdWJvdW5kOwogICAgICAgICByZWdpbmZvLT50aW1lb3V0ID0gdGltZW91dDsKICAgICAgICAgcmVnaW5mby0+Y29udGV4dE5hbWUgPSAoY29udGV4dCkgPyBzdHJkdXAoY29udGV4dCkgOiBOVUxMOwotICAgICAgICByZWdpbmZvLT5tb2RlcyA9IEhBTkRMRVJfQ0FOX1JXUklURTsKKyAgICAgICAgcmVnaW5mby0+bW9kZXMgPSB2cC0+YWNsID09IE5FVFNOTVBfT0xEQVBJX1JPTkxZID8gSEFORExFUl9DQU5fUk9OTFkgOgorICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURTsKIAogICAgICAgICAvKgogICAgICAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgaW4gdGhlIG1pYiB0cmVlIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKSAhPSBNSUJfUkVHSVNURVJFRF9PSykgewogICAgICAgICAgICAgLyoqIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWdpbmZvKTsgYWxyZWFkeSBmcmVlZCAqLwotICAgICAgICAgICAgU05NUF9GUkVFKHZwKTsKKyAgICAgICAgICAgIC8qIFNOTVBfRlJFRSh2cCk7IGFscmVhZHkgZnJlZWQgKi8KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpAQCAtMTA1LDcgKzE0MSw3IEBACiAvKiogcmVnaXN0ZXJzIGEgcm93IHdpdGhpbiBhIG1pYiB0YWJsZSAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3coY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBtaWJsb2MsCkBAIC0xMTksOCArMTU1LDggQEAKICAgICBvaWQgICAgICAgICAgICAgdWJvdW5kID0gMDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW12YXJzOyBpKyspIHsKLSAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2ciA9Ci0gICAgICAgICAgICAoc3RydWN0IHZhcmlhYmxlICopICgoY2hhciAqKSB2YXIgKyAoaSAqIHZhcnNpemUpKTsKKyAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2ciA9CisgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHZhcmlhYmxlICopICgoY29uc3QgY2hhciAqKSB2YXIgKyAoaSAqIHZhcnNpemUpKTsKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcjsKICAgICAgICAgaWYgKCB2YXJfc3ViaWQgPiAoaW50KW1pYmxvY2xlbiApIHsKICAgICAgICAgICAgIGJyZWFrOyAgICAvKiBkb2Vzbid0IG1ha2Ugc2Vuc2UgKi8KQEAgLTE2MSwxNCArMTk3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICByLT5yb290b2lkX2xlbikpOwogICAgICAgICBERUJVR01TRygoIm5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3JvdyIsICIoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgKHZhcl9zdWJpZCAtIHZyLT5uYW1lbGVuKSkpOwotICAgICAgICByLT5oYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKSBtYWxsb2ModmFyc2l6ZSk7CisgICAgICAgIHItPmhhbmRsZXItPm15dm9pZCA9IG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKHZyKTsKKyAgICAgICAgci0+aGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZTsKKyAgICAgICAgci0+aGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKIAogICAgICAgICBpZiAoci0+aGFuZGxlci0+bXl2b2lkID09IE5VTEwpIHsKICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyKTsKICAgICAgICAgICAgIHJjID0gTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBtZW1jcHkoKGNoYXIgKikgci0+aGFuZGxlci0+bXl2b2lkLCB2ciwgdmFyc2l6ZSk7CiAKICAgICAgICAgci0+Y29udGV4dE5hbWUgPSAoY29udGV4dCkgPyBzdHJkdXAoY29udGV4dCkgOiBOVUxMOwogCkBAIC0yMzgsMTMgKzI3NSwxMyBAQAogICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZwOwotICAgIFdyaXRlTWV0aG9kICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwotICAgIHNpemVfdCAgICAgICAgICBsZW47Ci0gICAgdV9jaGFyICAgICAgICAgKmFjY2VzcyA9IE5VTEw7CiAgICAgbmV0c25tcF9vbGRfYXBpX2NhY2hlICpjYWNoZXB0cjsKICAgICBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKm9sZGFzcCA9IE5VTEw7Ci0gICAgb2lkICAgICAgICAgICAgIHRtcF9uYW1lW01BWF9PSURfTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAqYWNjZXNzID0gTlVMTDsKKyAgICBXcml0ZU1ldGhvZCAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOwogICAgIHNpemVfdCAgICAgICAgICB0bXBfbGVuOworICAgIG9pZCAgICAgICAgICAgICB0bXBfbmFtZVtNQVhfT0lEX0xFTl07CiAKICAgICB2cCA9IChzdHJ1Y3QgdmFyaWFibGUgKikgaGFuZGxlci0+bXl2b2lkOwogCkBAIC0yNzUsNyArMzEyLDkgQEAKICAgICAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQWN0dWFsbHkgY2FsbCB0aGUgb2xkIG1pYi1tb2R1bGUgZnVuY3Rpb24gCiAgICAgICAgICAgICAgKi8KQEAgLTMwNiw3ICszNDUsOSBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogcmVzdWx0IHJldHVybmVkIAogICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSAhPSBNT0RFX1NFVF9SRVNFUlZFMSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ZwLT50eXBlLCBhY2Nlc3MsIGxlbik7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzMxLDcgKzM3Miw5IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQUFBOiBmYWxsIHRocm91Z2ggZm9yIGV2ZXJ5dGhpbmcgdGhhdCBpcyBhIHNldCAoc2VlIEJCQikgCiAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSAhPSBNT0RFX1NFVF9SRVNFUlZFMSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hlcHRyID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29sZF9hcGlfY2FjaGUpOwpAQCAtMzQzLDcgKzM4Niw4IEBACiAgICAgICAgICAgICB3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPTERfQVBJX05BTUUsIGNhY2hlcHRyLCBmcmVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT0xEX0FQSV9OQU1FLCBjYWNoZXB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJlZV93cmFwcGVyKSk7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQkJCOiBmYWxsIHRocm91Z2ggZm9yIGV2ZXJ5dGhpbmcgdGhhdCBpcyBhIHNldCAoc2VlIEFBQSkgCiAgICAgICAgICAgICAgKi8KQEAgLTQwMyw3ICs0NDcsNyBAQAogICovCiBzdGF0aWMgbmV0c25tcF9hZ2VudF9zZXNzaW9uICpjdXJyZW50X2FnZW50X3Nlc3Npb24gPSBOVUxMOwogbmV0c25tcF9hZ2VudF9zZXNzaW9uICoKLW5ldHNubXBfZ2V0X2N1cnJlbnRfYWdlbnRfc2Vzc2lvbigpCituZXRzbm1wX2dldF9jdXJyZW50X2FnZW50X3Nlc3Npb24odm9pZCkKIHsKICAgICByZXR1cm4gY3VycmVudF9hZ2VudF9zZXNzaW9uOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYyBiL2FnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMKaW5kZXggNTEyZjk0Yi4uMGIwNmQ0ZiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYworKysgYi9hZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jCkBAIC0xLDExICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTUwLDYgKzQ0LDcgQEAKIAogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTU4LDE5ICs1MywxNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKICAgICAgICAgLyogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfR0VORVJSKTsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CisKICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfR0VORVJSKTsKLSAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOyAgICAgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKIH0KIAogLyoqIGluaXRpYWxpemVzIHRoZSByZWFkX29ubHkgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcmVhZF9vbmx5CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jIGIvYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYwppbmRleCA2YjY0NDMwLi40YThlNDc2IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvcm93X21lcmdlLmMKQEAgLTEsNCArMSwxMCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsMTEgKzEyLDEyIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yocm93X21lcmdlLCByb3dfbWVyZ2VfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJvd19tZXJnZV9hbGwsIG1pYl9oZWxwZXJzKQogCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmg+CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ST1dfTUVSR0UKIC8qKiBAZGVmZ3JvdXAgcm93X21lcmdlIHJvd19tZXJnZQogICogIENhbGxzIHN1YiBoYW5kbGVycyB3aXRoIHJlcXVlc3QgZm9yIG9uZSByb3cgYXQgYSB0aW1lLgogICogIEBpbmdyb3VwIHV0aWxpdGllcwpAQCAtMzgsNiArNDUsOCBAQAogCiAvKiogZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkgYnV0IGFsc28KICAqIGluamVjdHMgYSByb3dfbWVyZ2UgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcm93X21lcmdlLCByb3dfbWVyZ2VfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JPV19NRVJHRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3Jvd19tZXJnZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtNDUsNiArNTQsNyBAQAogCQkgICAgbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIocmVnaW5mby0+cm9vdG9pZF9sZW4rMSkpOwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9ST1dfTUVSR0UgKi8KIAogc3RhdGljIHZvaWQKIF9ybV9zdGF0dXNfZnJlZSh2b2lkICptZW0pCkBAIC03NiwxNCArODYsMTQgQEAKICAgICAgKiBzZWUgaWYgd2UndmUgYWxyZWFkeSBiZWVuIGhlcmUKICAgICAgKi8KICAgICByYyA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJyb3dfbWVyZ2U6JXAiLCByZWdpbmZvKTsKLSAgICBpZiAoKC0xID09IHJjKSB8fCAocmMgPj0gc2l6ZW9mKGJ1ZikpKSB7CisgICAgaWYgKCgtMSA9PSByYykgfHwgKChzaXplX3QpcmMgPj0gc2l6ZW9mKGJ1ZikpKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGtleVxuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAKLSAgICBybV9zdGF0dXMgPSBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgYnVmKTsKKyAgICBybV9zdGF0dXMgPSAobmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzKiluZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgYnVmKTsKICAgICBpZiAoKE5VTEwgPT0gcm1fc3RhdHVzKSAmJiBjcmVhdGVfbWlzc2luZykgewotICAgICAgICB2b2lkICpkYXRhX2xpc3Q7CisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpkYXRhX2xpc3Q7CiAgICAgICAgIAogICAgICAgICBybV9zdGF0dXMgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcm93X21lcmdlX3N0YXR1cyk7CiAgICAgICAgIGlmIChOVUxMID09IHJtX3N0YXR1cykgewpAQCAtMzYyLDUgKzM3MiwxMCBAQAogICAgIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKCJyb3dfbWVyZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKC0xKSk7CiB9CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19NRVJHRSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChyb3dfbWVyZ2UpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFICovCisKKwogLyoqICBAfSAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3NjYWxhci5jIGIvYWdlbnQvaGVscGVycy9zY2FsYXIuYwppbmRleCA0MmM2NmI0Li43YTRjOWUwIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3NjYWxhci5jCisrKyBiL2FnZW50L2hlbHBlcnMvc2NhbGFyLmMKQEAgLTEwLDYgKzEwLDExIEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgorCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTcsMTAgKzIyLDYgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5Lmg+CkBAIC03Nyw4ICs3OCw4IEBACiAgICAgICogRXh0ZW5kIHRoZSByZWdpc3RlcmVkIE9JRCB3aXRoIHNwYWNlIGZvciB0aGUgaW5zdGFuY2Ugc3ViaWQKICAgICAgKiAoYnV0IGRvbid0IGV4dGVuZCB0aGUgbGVuZ3RoIGp1c3QgeWV0ISkKICAgICAgKi8KLSAgICByZWdpbmZvLT5yb290b2lkID0gcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKKyAgICByZWdpbmZvLT5yb290b2lkID0gKG9pZCopcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKICAgICByZWdpbmZvLT5yb290b2lkWyByZWdpbmZvLT5yb290b2lkX2xlbiBdID0gMDsKIAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlcigpKTsKQEAgLTExMiw4ICsxMTMsOCBAQAogICAgICAqIEV4dGVuZCB0aGUgcmVnaXN0ZXJlZCBPSUQgd2l0aCBzcGFjZSBmb3IgdGhlIGluc3RhbmNlIHN1YmlkCiAgICAgICogKGJ1dCBkb24ndCBleHRlbmQgdGhlIGxlbmd0aCBqdXN0IHlldCEpCiAgICAgICovCi0gICAgcmVnaW5mby0+cm9vdG9pZCA9IHJlYWxsb2MocmVnaW5mby0+cm9vdG9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdpbmZvLT5yb290b2lkX2xlbisxKSAqIHNpemVvZihvaWQpICk7CisgICAgcmVnaW5mby0+cm9vdG9pZCA9IChvaWQqKXJlYWxsb2MocmVnaW5mby0+cm9vdG9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdpbmZvLT5yb290b2lkX2xlbisxKSAqIHNpemVvZihvaWQpICk7CiAgICAgcmVnaW5mby0+cm9vdG9pZFsgcmVnaW5mby0+cm9vdG9pZF9sZW4gXSA9IDA7CiAKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIG5ldHNubXBfZ2V0X2luc3RhbmNlX2hhbmRsZXIoKSk7CkBAIC0xNjEsNiArMTYyLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC0xNzksNiArMTgxLDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgcmVnaW5mby0+cm9vdG9pZFtyZWdpbmZvLT5yb290b2lkX2xlbisrXSA9IDA7CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jIGIvYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYwppbmRleCBhNWQxMTllLi42YjdmMDk4IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jCisrKyBiL2FnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMKQEAgLTEsNSArMSwxMCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmg+CisKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC03LDEzICsxMiwxOSBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KKworc3RhdGljIG5ldHNubXBfc2NhbGFyX2dyb3VwKgorY2xvbmVfc2NhbGFyX2dyb3VwKG5ldHNubXBfc2NhbGFyX2dyb3VwKiBzcmMpCit7CisgIG5ldHNubXBfc2NhbGFyX2dyb3VwICp0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3NjYWxhcl9ncm91cCk7CisgIGlmKHQgIT0gTlVMTCkgeworICAgIHQtPmxib3VuZCA9IHNyYy0+bGJvdW5kOworICAgIHQtPnVib3VuZCA9IHNyYy0+dWJvdW5kOworICB9CisgIHJldHVybiB0OworfQogCiAvKiogQGRlZmdyb3VwIHNjYWxhcl9ncm91cF9ncm91cCBzY2FsYXJfZ3JvdXAKICAqICBQcm9jZXNzIGdyb3VwcyBvZiBzY2FsYXJzLgpAQCAtMzgsNiArNDksOCBAQAogCSAgICBzZ3JvdXAtPmxib3VuZCA9IGZpcnN0OwogCSAgICBzZ3JvdXAtPnVib3VuZCA9IGxhc3Q7CiAgICAgICAgICAgICByZXQtPm15dm9pZCA9ICh2b2lkICopc2dyb3VwOworICAgICAgICAgICAgcmV0LT5kYXRhX2ZyZWUgPSBmcmVlOworICAgICAgICAgICAgcmV0LT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKWNsb25lX3NjYWxhcl9ncm91cDsKIAl9CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC00OCw3ICs2MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgZmlyc3QsIG9pZCBsYXN0KQogewogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlcigpKTsKLSAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIG5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyKCkpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfc2NhbGFyX2dyb3VwX2hhbmRsZXIoZmlyc3QsIGxhc3QpKTsKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zZXJpYWxpemUocmVnaW5mbyk7CiB9CkBAIC05NywxMiArMTA5LDE0IEBACiAgICAgICAgIHJldCA9IFNOTVBfTk9TVUNIT0JKRUNUOwogICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBpZiAoY21wICE9IDAgfHwKICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIDw9IHJlZ2luZm8tPnJvb3RvaWRfbGVuKSB7CiAJICAgIC8qCkBAIC0xMjgsMTIgKzE0MiwxMyBAQAogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIHJldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAJICAgIH0KLSAgICAgICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuKytdID0gc3ViaWQ7CisgICAgICAgICAgICByb290X3RtcFtyZWdpbmZvLT5yb290b2lkX2xlbl0gPSBzdWJpZDsKKyAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuICs9IDI7CiAgICAgICAgICAgICByZWdpbmZvLT5yb290b2lkID0gcm9vdF90bXA7CiAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByb290X3NhdmU7Ci0gICAgICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbi0tOworICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gLT0gMjsKICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xNjIsNyArMTc3LDggQEAKIAllbHNlIGlmIChzdWJpZCA+IHNncm91cC0+dWJvdW5kKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIAotICAgICAgICByb290X3RtcFtyZWdpbmZvLT5yb290b2lkX2xlbisrXSA9IHN1YmlkOworICAgICAgICByb290X3RtcFtyZWdpbmZvLT5yb290b2lkX2xlbl0gPSBzdWJpZDsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKz0gMjsKICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IHJvb3RfdG1wOwogICAgICAgICByZXQgPSBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKQEAgLTE3NSwxMiArMTkxLDEyIEBACiAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCB8fAogICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkpIHsKICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZChyZXF1ZXN0cy0+cmVxdWVzdHZiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuKTsKLSAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbcmVnaW5mby0+cm9vdG9pZF9sZW4tMV0gPSArK3N1YmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuIC0gMSk7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lW3JlZ2luZm8tPnJvb3RvaWRfbGVuIC0gMl0gPSArK3N1YmlkOwogICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IEFTTl9QUklWX1JFVFJZOwogICAgICAgICB9CiAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByb290X3NhdmU7Ci0gICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuLS07CisgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuIC09IDI7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jIGIvYWdlbnQvaGVscGVycy9zZXJpYWxpemUuYwppbmRleCA4OTJmOWIzLi5lZWM2NmI0IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYyBiL2FnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhYzJhYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMKQEAgLTAsMCArMSw2MSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CisKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKGhlbHBlcl9zdGF0aXN0aWNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhlbHBlcl9zdGF0aXN0aWNzLCBtaWJfaGVscGVycykKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0hFTFBFUl9TVEFUSVNUSUNTCisvKiBpZiB3ZSdyZSBub3QgbmVlZGVkLCB0aGVuIG5laXRoZXIgaXMgdGhpcyAqLworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RhdGlzdGljcykKKyNlbmRpZgorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVMUEVSX1NUQVRJU1RJQ1MKK3N0YXRpYyBpbnQKK25ldHNubXBfZ2V0X3N0YXRpc3RpY19oZWxwZXJfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKSB7CisgICAgICAgIGNvbnN0IG9pZCBpZHggPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lW3JlZ2luZm8tPnJvb3RvaWRfbGVuIC0gMl0gKworICAgICAgICAgICAgKG9pZCkodWludHB0cl90KWhhbmRsZXItPm15dm9pZDsKKyAgICAgICAgdWludDMyX3QgdmFsdWU7CisKKyAgICAgICAgaWYgKGlkeCA+IE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMpCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB2YWx1ZSA9IHNubXBfZ2V0X3N0YXRpc3RpYyhpZHgpOworICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKK30KKworc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIgKgorbmV0c25tcF9nZXRfc3RhdGlzdGljX2hhbmRsZXIoaW50IG9mZnNldCkKK3sKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpyZXQgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJnZXRfc3RhdGlzdGljIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9zdGF0aXN0aWNfaGVscGVyX2hhbmRsZXIpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgcmV0LT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CisgICAgICAgIHJldC0+bXl2b2lkID0gKHZvaWQqKSh1aW50cHRyX3Qpb2Zmc2V0OworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitpbnQKK25ldHNubXBfcmVnaXN0ZXJfc3RhdGlzdGljX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkIHN0YXJ0LCBpbnQgYmVnaW4sIGludCBlbmQpCit7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfc3RhdGlzdGljX2hhbmRsZXIoYmVnaW4gLSBzdGFydCkpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvLCBzdGFydCwgc3RhcnQgKyAoZW5kIC0gYmVnaW4pKTsKK30KKyNlbHNlIC8qICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFTFBFUl9HRVRfU1RBVElTVElDUyAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChoZWxwZXJfc3RhdGlzdGljcyk7CisjZW5kaWYgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVMUEVSX0dFVF9TVEFUSVNUSUNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMgYi9hZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMKaW5kZXggZWZiMWViNC4uNWRhMTc5NiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYwpAQCAtMSwxNyArMSwyMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHN0YXNoX2NhY2hlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN0YXNoX2NhY2hlLCBtaWJfaGVscGVycykKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TVEFTSF9DQUNIRQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2l0ZXJhdGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfZ2V0X2RhdGEpCisjZW5kaWYKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfdG9fbmV4dC5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KKwogZXh0ZXJuIE5ldHNubXBDYWNoZUxvYWQgX25ldHNubXBfc3Rhc2hfY2FjaGVfbG9hZDsKIGV4dGVybiBOZXRzbm1wQ2FjaGVGcmVlIF9uZXRzbm1wX3N0YXNoX2NhY2hlX2ZyZWU7CiAgCkBAIC0zMiw3ICszNyw4IEBACiAgICAgbmV0c25tcF9zdGFzaF9jYWNoZV9pbmZvICpjaW5mbzsKIAogICAgIGNpbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3N0YXNoX2NhY2hlX2luZm8pOwotICAgIGNpbmZvLT5jYWNoZV9sZW5ndGggPSAzMDsKKyAgICBpZiAoY2luZm8gIT0gTlVMTCkKKyAgICAgICAgY2luZm8tPmNhY2hlX2xlbmd0aCA9IDMwOwogICAgIHJldHVybiBjaW5mbzsKIH0KIApAQCAtNjYsNyArNzIsNyBAQAogICAgIH0KIAogICAgIGhhbmRsZXItPm15dm9pZCA9IGNpbmZvOwotICAgIGhhbmRsZXItPmRhdGFfZnJlZSA9IGZyZWU7CisgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoaGFuZGxlcik7CiAKICAgICByZXR1cm4gaGFuZGxlcjsKIH0KQEAgLTExMiw3ICsxMTgsNyBAQAogbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAgKioKIG5ldHNubXBfZXh0cmFjdF9zdGFzaF9jYWNoZShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbykKIHsKLSAgICByZXR1cm4gbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIFNUQVNIX0NBQ0hFX05BTUUpOworICAgIHJldHVybiAobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSoqKW5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBTVEFTSF9DQUNIRV9OQU1FKTsKIH0KIAogCkBAIC0xNDMsNyArMTQ5LDcgQEAKICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnN0YXNoX2NhY2hlIiwgIlByb2Nlc3NpbmcgR0VUIHJlcXVlc3RcbiIpKTsKICAgICAgICAgZm9yKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIGNkYXRhID0KKyAgICAgICAgICAgIGNkYXRhID0gKG5ldHNubXBfdmFyaWFibGVfbGlzdCopCiAgICAgICAgICAgICAgICAgbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEoY2luZm8tPmNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGgpOwpAQCAtMTU1LDcgKzE2MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkYXRhLT52YWwuc3RyaW5nLCBjZGF0YS0+dmFsX2xlbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CkBAIC0xNjYsNyArMTcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGgpOwogICAgICAgICAgICAgaWYgKGNub2RlICYmIGNub2RlLT50aGVkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2RhdGEgPSBjbm9kZS0+dGhlZGF0YTsKKyAgICAgICAgICAgICAgICBjZGF0YSA9ICAobmV0c25tcF92YXJpYWJsZV9saXN0Kiljbm9kZS0+dGhlZGF0YTsKICAgICAgICAgICAgICAgICBpZiAoY2RhdGEtPnZhbC5zdHJpbmcgJiYgY2RhdGEtPm5hbWUgJiYgY2RhdGEtPm5hbWVfbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6c3Rhc2hfY2FjaGUiLCAiRm91bmQgY2FjaGVkIEdFVE5FWFQgdmFyYmluZFxuIikpOwogICAgICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoImhlbHBlcjpzdGFzaF9jYWNoZSIsIGNkYXRhLT5uYW1lLCBjZGF0YS0+bmFtZV9sZW5ndGgpKTsKQEAgLTE3OCw3ICsxODMsNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtMTg2LDcgKzE5MCw4IEBACiAgICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKICAgICB9Ci0gICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsgICAgIC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKIC8qKiB1cGRhdGVzIGEgZ2l2ZW4gY2FjaGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgbmVlZHMgdG8gb3Igbm90LgpAQCAtMjQyLDMgKzI0Nyw2IEBACiB9CiAvKiogIEB9ICovCiAKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoc3Rhc2hfY2FjaGUpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jIGIvYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMKaW5kZXggYWFiYWFhOC4uZDdiYWZmZCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMKKysrIGIvYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMKQEAgLTEsMTcgKzEsMjIgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmg+CituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShzdGFzaF90b19uZXh0KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN0YXNoX3RvX25leHQsIG1pYl9oZWxwZXJzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfU1RBU0hfVE9fTkVYVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorI2VuZGlmCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9UT19ORVhUCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfdG9fbmV4dC5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KKwogLyoqIEBkZWZncm91cCBzdGFzaF90b19uZXh0IHN0YXNoX3RvX25leHQKICAqICBDb252ZXJ0IEdFVF9TVEFTSCByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLgogICogIFRoZSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byBjb252ZXJ0IGEgR0VUX1NUQVNIIGF1dG8tY2FjaGUgcmVxdWVzdApAQCAtMTE5LDMgKzEyNCw2IEBACiB9CiAvKiogIEB9ICovCiAKKyNlbHNlICAvKiAhIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfVE9fTkVYVCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChzdGFzaF90b19uZXh0KTsKKyNlbmRpZiAvKiAhIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfVE9fTkVYVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy90YWJsZS5jIGIvYWdlbnQvaGVscGVycy90YWJsZS5jCmluZGV4IDMyYTA4MDMuLjg4MmU4NGMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGUuYworKysgYi9hZ2VudC9oZWxwZXJzL3RhYmxlLmMKQEAgLTEyLDIyICsxMiw0MCBAQAogICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYWxsLCBtaWJfaGVscGVycykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2J1aWxkX3Jlc3VsdCwgdGFibGVfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2dldF9vcl9jcmVhdGVfcm93X3N0YXNoLCB0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0cmF0aW9uX293bnNfdGFibGVfaW5mbywgdGFibGVfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3NwYXJzZSwgdGFibGVfYWxsKQorCiBzdGF0aWMgdm9pZCAgICAgdGFibGVfaGVscGVyX2NsZWFudXAobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cyk7CkBAIC05OSw2ICsxMTcsMzEgQEAKICAgICByZXR1cm4gcmV0OwogfQogCisvKiogQ29uZmlndXJlcyBhIGhhbmRsZXIgc3VjaCB0aGF0IHRhYmxlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBpcyBmcmVlZCBieQorICogIG5ldHNubXBfaGFuZGxlcl9mcmVlKCkuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBoYW5kbGVyLT5teXZvaWQgcG9pbnRzIHRvCisgKiAgYW4gb2JqZWN0IG9mIHR5cGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mby4KKyAqLwordm9pZCBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpCit7CisgICAgbmV0c25tcF9hc3NlcnQoaGFuZGxlcik7CisgICAgbmV0c25tcF9hc3NlcnQoaGFuZGxlci0+bXl2b2lkKTsKKyAgICBoYW5kbGVyLT5kYXRhX2Nsb25lCisJPSAodm9pZCAqKCopKHZvaWQgKikpIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fY2xvbmU7CisgICAgaGFuZGxlci0+ZGF0YV9mcmVlCisJPSAodm9pZCAoKikodm9pZCAqKSkgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlOworfQorCisvKiogQ29uZmlndXJlcyBhIGhhbmRsZXIgc3VjaCB0aGF0IHRhYmxlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBpcyBmcmVlZCBieQorICogIG5ldHNubXBfaGFuZGxlcl9mcmVlKCkuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiByZWctPmhhbmRsZXItPm15dm9pZAorICogIHBvaW50cyB0byBhbiBvYmplY3Qgb2YgdHlwZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvLgorICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNUUkFUSU9OX09XTlNfVEFCTEVfSU5GTwordm9pZCBuZXRzbm1wX3JlZ2lzdHJhdGlvbl9vd25zX3RhYmxlX2luZm8obmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnKQoreworICAgIGlmIChyZWcpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVFJBVElPTl9PV05TX1RBQkxFX0lORk8gKi8KIAogLyoqIGNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyIGdpdmVuIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwKICAqICBpbnNlcnRzIGl0IGludG8gdGhlIHJlcXVlc3QgY2hhaW4gYW5kIHRoZW4gY2FsbHMKQEAgLTEwOCwxMCArMTUxLDIxIEBACiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlcSkKIHsKLSAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIodGFicmVxKSk7CisgICAgaW50IHJjID0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKHRhYnJlcSkpOworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiByYzsKKwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7CiB9CiAKK2ludAorbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCit7CisgICAgLyogTG9jYXRlICJ0aGlzIiByZWdpbmZvICovCisgICAgLyogU05NUF9GUkVFKHJlZ2luZm8tPm15dm9pZCk7ICovCisgICAgcmV0dXJuIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKHJlZ2luZm8pOworfQorCiAvKiogRXh0cmFjdHMgdGhlIHByb2Nlc3NlZCB0YWJsZSBpbmZvcm1hdGlvbiBmcm9tIGEgZ2l2ZW4gcmVxdWVzdC4KICAqICBDYWxsIHRoaXMgZnJvbSBzdWJoYW5kbGVycyBvbiBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgcHJvY2Vzc2VkCiAgKiAgbmV0c25tcF9yZXF1ZXN0X2luZm8gaW5mb3JtYXRpb24uICBUaGUgcmVzdWx0aW5nIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZQpAQCAtMTUwLDggKzIwNCw4IEBACiAgICAgaW50ICAgICAgICAgICAgIG9pZF9pbmRleF9wb3M7CiAgICAgdW5zaWduZWQgaW50ICAgIG9pZF9jb2x1bW5fcG9zOwogICAgIHVuc2lnbmVkIGludCAgICB0bXBfaWR4OwotICAgIHNpemVfdAkgICAgdG1wX2xlbjsKLSAgICBpbnQgICAgICAgICAgICAgaW5jb21wbGV0ZSwgb3V0X29mX3JhbmdlLCBjbGVhbmVkX3VwID0gMDsKKyAgICBzc2l6ZV90IAkgICAgdG1wX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgaW5jb21wbGV0ZSwgb3V0X29mX3JhbmdlOwogICAgIGludCAgICAgICAgICAgICBzdGF0dXMgPSBTTk1QX0VSUl9OT0VSUk9SLCBuZWVkX3Byb2Nlc3NpbmcgPSAwOwogICAgIG9pZCAgICAgICAgICAgICp0bXBfbmFtZTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGJsX3JlcV9pbmZvOwpAQCAtMTc3LDggKzIzMSw5IEBACiAKICAgICBERUJVR0lGKCJoZWxwZXI6dGFibGU6cmVxIikgewogICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOnJlcSIsCi0gICAgICAgICAgICAgICAgICAgICJHb3QgcmVxdWVzdCBmb3IgaGFuZGxlciAlczogYmFzZSBvaWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlci0+aGFuZGxlcl9uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICJHb3QgJXMgKCVkKSBtb2RlIHJlcXVlc3QgZm9yIGhhbmRsZXIgJXM6IGJhc2Ugb2lkOiIsCisgICAgICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSwgaGFuZGxlci0+aGFuZGxlcl9uYW1lKSk7CiAgICAgICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOnRhYmxlOnJlcSIsIHJlZ2luZm8tPnJvb3RvaWQsCiAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbikpOwogICAgICAgICBERUJVR01TRygoImhlbHBlcjp0YWJsZTpyZXEiLCAiXG4iKSk7CkBAIC0xOTMsMTUgKzI0OCwyMCBAQAogICAgICAqIGluIHRoZSBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mby4gCiAgICAgICovCiAgICAgaWYgKG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBoYW5kbGVyLT5uZXh0LT5oYW5kbGVyX25hbWUpKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkpIHsKICAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CiAgICAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAvKiogWFhYLXJrczogbWVtb3J5IGxlYWsuIGFkZCBjbGVhbnVwIGhhbmRsZXI/ICovCiAgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXRzKHJlcWluZm8pOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBpZiAoIE1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpICYmCiAgICAgICAgICAocmVxaW5mby0+bW9kZSAhPSBNT0RFX1NFVF9SRVNFUlZFMSkpIHsKICAgICAgICAgLyoKQEAgLTIxMSwxNSArMjcxLDE2IEBACiAgICAgICAgICAqIGEgdmFsaWQgdGFibGUgaW5mbyBwb2ludGVyKS4KICAgICAgICAgICovCiAgICAgICAgIGlmKE5VTEwgPT0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aGVscGVyIiwibm8gdGFibGUgaW5mbyBmb3Igc2V0IC0gc2tpcHBpbmdcbiIpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCJubyB0YWJsZSBpbmZvIGZvciBzZXQgLSBza2lwcGluZ1xuIikpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5lZWRfcHJvY2Vzc2luZyA9IDE7CiAgICAgfQogICAgIGVsc2UgeworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAvKgotICAgICAgICAgKiBmb3IgUkVTRVJWRTEgYW5kIEdFVFMsIG9ubHkgY29udGludWUgaWYgd2UgaGF2ZSBhdCBsZWFzdAotICAgICAgICAgKiBvbmUgdmFsaWQgcmVxdWVzdC4KKyAgICAgICAgICogZm9yIEdFVFMsIG9ubHkgY29udGludWUgaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdmFsaWQgcmVxdWVzdC4KKyAgICAgICAgICogZm9yIFJFU0VSVkUxLCBvbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgaW5kZXhlcyBmb3IgYWxsIHJlcXVlc3RzLgogICAgICAgICAgKi8KICAgICAgICAgICAgCiAgICAgLyoKQEAgLTI1Miw2ICszMTMsNyBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpIHsKICAgICAgICAgICAgIERFQlVHSUYoImhlbHBlcjp0YWJsZTpzZXQiKSB7CiAgICAgICAgICAgICAgICAgdV9jaGFyICAgICAgICAgKmJ1ZiA9IE5VTEw7CkBAIC0yNjAsNyArMzIyLDcgQEAKICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoImhlbHBlcjp0YWJsZTpzZXQiLCB2YXItPm5hbWUsIHZhci0+bmFtZV9sZW5ndGgpKTsKICAgICAgICAgICAgICAgICBvdXRfbGVuID0gMDsKICAgICAgICAgICAgICAgICBpZiAoc3ByaW50X3JlYWxsb2NfYnlfdHlwZSgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCAwLCAwLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6dGFibGU6c2V0IiwiIHR5cGU9JWQoJTAyeCksIHZhbHVlPSVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT50eXBlLCB2YXItPnR5cGUsIGJ1ZikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNzksNiArMzQxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayB0byBtYWtlIHN1cmUgaXRzIGluIHRhYmxlIHJhbmdlIApAQCAtMzM0LDEwICszOTcsMTMgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiAgUmVqZWN0IHJlcXVlc3RzIG9mIHRoZSBmb3JtICdteVRhYmxlLk4nICAgKE4gIT0gMSkKICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKQogICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwotICAgICAgICAgICAgZWxzZSBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVCkKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKQogICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNTIsNiArNDE4LDExIEBACiAgICAgICAgIHRibF9yZXFfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOwogICAgICAgICBpZiAoTlVMTCA9PSB0YmxfcmVxX2luZm8pIHsKICAgICAgICAgICAgIHRibF9yZXFfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8pOworICAgICAgICAgICAgaWYgKHRibF9yZXFfaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5yZWdfaW5mbyA9IHRibF9pbmZvOwogICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5pbmRleGVzID0gc25tcF9jbG9uZV92YXJiaW5kKHRibF9pbmZvLT5pbmRleGVzKTsKICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+bnVtYmVyX2luZGV4ZXMgPSAwOyAgICAgICAvKiBub25lIHlldCAqLwpAQCAtMzcxLDcgKzQ0Miw4IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogb2lkIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gQ09MVU1OIGluZm8KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpjb2wiLCAiICBoYXZlIGF0IGxlYXN0IGEgY29sdW1uICglZClcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOmNvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiICBoYXZlIGF0IGxlYXN0IGEgY29sdW1uICglIiBORVRTTk1QX1BSSW8gImQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lW29pZF9jb2x1bW5fcG9zXSkpOwogICAgICAgICAgICAgaWYgKHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10gPCB0YmxfaW5mby0+bWluX2NvbHVtbikgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6Y29sIiwKQEAgLTQwMywxMCArNDc1LDEyIEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiAgUmVqZWN0IHJlcXVlc3RzIG9mIHRoZSBmb3JtICdteUVudHJ5Lk4nICAgKGludmFsaWQgTikKICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00MjcsOCArNTAxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKHRibF9yZXFfaW5mby0+Y29sbnVtICE9IHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10pIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpjb2wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggcmVxICVkIC0gdHJ1bmNhdGluZyBpbmRleCBpbmZvXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVbb2lkX2NvbHVtbl9wb3NdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgd2hpY2ggZG9lc24ndCBtYXRjaCByZXEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgTkVUU05NUF9QUklvICJkIC0gdHJ1bmNhdGluZyBpbmRleCBpbmZvXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVbb2lkX2NvbHVtbl9wb3NdKSk7CiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAqIGRpZmZlcmVudCBjb2x1bW4hIHRydW5jYXRlIHVzZWxlc3MgaW5kZXggaW5mbyAKICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00NDcsOCArNTIyLDggQEAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPmluZGV4X29pZF9sZW4gPQogICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVfbGVuZ3RoIC0gb2lkX2luZGV4X3BvczsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlIiwgIiAgICBoYXZlICVkIGJ5dGVzIG9mIGluZGV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCAiICAgIGhhdmUgJWx1IGJ5dGVzIG9mIGluZGV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbikpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbiA8IE1BWF9PSURfTEVOKTsKICAgICAgICAgICAgICAgICBtZW1jcHkodGJsX3JlcV9pbmZvLT5pbmRleF9vaWQsICZ2YXItPm5hbWVbb2lkX2luZGV4X3Bvc10sCiAgICAgICAgICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKQEAgLTQ3Myw4ICs1NDgsMTAgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgKSB7CiAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSApIHsKICAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTAwLDYgKzU3Nyw4IEBACiAgICAgICAgIGZvciAodG1wX2lkeCA9IDAsIHZiID0gdGJsX3JlcV9pbmZvLT5pbmRleGVzOwogICAgICAgICAgICAgIHRtcF9pZHggPCB0YmxfaW5mby0+bnVtYmVyX2luZGV4ZXM7CiAgICAgICAgICAgICAgKyt0bXBfaWR4LCB2YiA9IHZiLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgICAgICBzaXplX3QgcGFyc2VkX29pZF9sZW47CisKICAgICAgICAgICAgIGlmIChpbmNvbXBsZXRlICYmIHRtcF9sZW4pIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIGluY29tcGxldGUvaWxsZWdhbCBPSUQsIHNldCB1cCBkdW1teSAwIHRvIHBhcnNlIApAQCAtNTE0LDI5ICs1OTMsMjcgQEAKICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAqIFJlamVjdCByZXF1ZXN0cyBvZiB0aGUgZm9ybSAnbXlPYmplY3QnICAgKG5vIGluc3RhbmNlKQogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfR0VUTkVYVCkgewotICAgICAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFuZWRfdXAgPSAxOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0bXBfbGVuID0gMDsKLSAgICAgICAgICAgICAgICB0bXBfbmFtZSA9IChvaWQgKikgJiB0bXBfbGVuOworICAgICAgICAgICAgICAgIHRtcF9uYW1lID0gTlVMTDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiB0cnkgYW5kIHBhcnNlIGN1cnJlbnQgaW5kZXggCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChwYXJzZV9vbmVfb2lkX2luZGV4KCZ0bXBfbmFtZSwgJnRtcF9sZW4sCisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCh0bXBfbGVuID49IDApOworICAgICAgICAgICAgcGFyc2VkX29pZF9sZW4gPSB0bXBfbGVuOworICAgICAgICAgICAgaWYgKHBhcnNlX29uZV9vaWRfaW5kZXgoJnRtcF9uYW1lLCAmcGFyc2VkX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YiwgMSkgIT0gU05NUEVSUl9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZSA9IDE7CiAgICAgICAgICAgICAgICAgdG1wX2xlbiA9IC0xOyAgIC8qIGlzIHRoaXMgbmVjZXNzYXJ5PyBCZXR0ZXIgc2FmZSB0aGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNvcnJ5ICovCiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRtcF9sZW4gPSBwYXJzZWRfb2lkX2xlbjsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlIiwgIiAgZ290IDEgKGluY29tcGxldGU9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGxldGUpKTsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIGRvIG5vdCBjb3VudCBpbmNvbXBsZXRlIGluZGV4ZXMgCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsICIgIGdvdCAxIChpbmNvbXBsZXRlPSVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbXBsZXRlKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluY29tcGxldGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICsrdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlczsgLyoqIGdvdCBvbmUgb2sgKi8KQEAgLTU0OSwxMiArNjI2LDExIEBACiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qKiBmb3IgbG9vcCAqLwogCiAgICAgICAgIERFQlVHSUYoImhlbHBlcjp0YWJsZTpyZXN1bHRzIikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwgIiAgZm91bmQgJWQgaW5kZXhlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+bnVtYmVyX2luZGV4ZXMpKTsKLSAgICAgICAgICAgIGlmICghY2xlYW5lZF91cCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICBjb3VudDsKICAgICAgICAgICAgICAgICB1X2NoYXIgICAgICAgICAqYnVmID0gTlVMTDsKICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IDAsIG91dF9sZW4gPSAwOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6cmVzdWx0cyIsICIgIGZvdW5kICVkIGluZGV4ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlcykpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6cmVzdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgY29sdW1uOiAlZCwgaW5kZXhlczogJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+Y29sbnVtLApAQCAtNTY0LDcgKzY0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrLCB2YiA9IHZiLT5uZXh0X3ZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dF9sZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3ByaW50X3JlYWxsb2NfYnlfdHlwZSgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLCAwLCAwLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YiwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOnRhYmxlOnJlc3VsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBpbmRleDogdHlwZT0lZCglMDJ4KSwgdmFsdWU9JXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLT50eXBlLCB2Yi0+dHlwZSwgYnVmKSk7CkBAIC01ODQsNyArNjYwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgZnJlZShidWYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwgIlxuIikpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAKIApAQCAtNTk1LDggKzY3MCwyNCBAQAogICAgICAgICBpZiAoKHJlcWluZm8tPm1vZGUgIT0gTU9ERV9HRVRORVhUKSAmJgogICAgICAgICAgICAgKCh0YmxfcmVxX2luZm8tPm51bWJlcl9pbmRleGVzICE9IHRibF9pbmZvLT5udW1iZXJfaW5kZXhlcykgfHwKICAgICAgICAgICAgICAodG1wX2xlbiAhPSAtMSkpKSB7CisKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgaW5kZXgoZXMpIGZvciB0YWJsZSAtIHNraXBwaW5nXG4iKSk7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgICAgICBpZiAoIE1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpICkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogbm8gcG9pbnQgaW4gY29udGludWluZyB3aXRob3V0IGluZGV4ZXMgZm9yIHNldC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKTsKKyAgICAgICAgICAgICAgICAvKiogY2xlYXIgZmlyc3QgcmVxdWVzdCBzbyB3ZSB3b250IHRyeSB0byBydW4gRlJFRSBtb2RlICovCisgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXVlc3RzKTsKKyAgICAgICAgICAgICAgICAvKiogc2V0IGFjdHVhbCBlcnJvciAqLworICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX05PQ1JFQVRJT04pOworICAgICAgICAgICAgICAgIG5lZWRfcHJvY2Vzc2luZyA9IDA7IC8qIGRvbid0IGNhbGwgbmV4dCBoYW5kbGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSElOU1RBTkNFKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02MDUsNyArNjk2LDkgQEAKICAgICAgICAgKytuZWVkX3Byb2Nlc3Npbmc7CiAKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVhY2ggcmVxdWVzdCAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIGJhaWwgaWYgdGhlcmUgaXMgbm90aGluZyBmb3Igb3VyIGNoaWxkIGhhbmRsZXJzCkBAIC03MTgsNiArODExLDcgQEAKIAogLyoqIGNyZWF0ZSBzcGFyc2UgdGFibGUgaGFuZGxlcgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfU1BBUlNFCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfc3BhcnNlX3RhYmxlX2hhbmRsZXJfZ2V0KHZvaWQpCiB7CkBAIC03MzMsMTQgKzgyNyw0MSBAQAogbmV0c25tcF9zcGFyc2VfdGFibGVfcmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVxKQogewotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywKLSAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcihTUEFSU0VfVEFCTEVfSEFORExFUl9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYXJzZV90YWJsZV9oZWxwZXJfaGFuZGxlcikpOwotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcih0YWJyZXEpKTsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyMSwgKmhhbmRsZXIyOworICAgIGludCByYzsKKworICAgIGhhbmRsZXIxID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcihTUEFSU0VfVEFCTEVfSEFORExFUl9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYXJzZV90YWJsZV9oZWxwZXJfaGFuZGxlcik7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcjEpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBoYW5kbGVyMiA9IG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIodGFicmVxKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyMiApIHsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcjEpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJjID0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyMSk7CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgeworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyMSk7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIyKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIHJjID0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyMik7CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKiogaGFuZGxlcjEgaXMgaW4gcmVnaW5mby4uLiByZW1vdmUgYW5kIGZyZWU/PyAqLworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyMik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICAvKiogYm90aCBoYW5kbGVycyBub3cgaW4gcmVnaW5mbywgc28gbm90aGluZyB0byBkbyBvbiBlcnJvciAqLwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TUEFSU0UgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQlVJTERfUkVTVUxUCiAvKiogQnVpbGRzIHRoZSByZXN1bHQgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGFnZW50IGdpdmVuIHRoZSB0YWJsZSBpbmZvcm1hdGlvbi4KICAqICBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gcmVzdWx0cyBmcm9tIGxvd2VsIGxldmVsIGhhbmRsZXJzIHRvCiAgKiAgdGhlIGFnZW50LiAgSXQgdGFrZXMgY2FyZSBvZiBidWlsZGluZyB0aGUgcHJvcGVyIHJlc3VsdGluZyBvaWQKQEAgLTc3NCw3ICs4OTUsNiBAQAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKLQogLyoqIGdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUKICAqICBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUKICAqICBpbmRleCB2YWx1ZXMgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdGFibGVfaW5mbwpAQCAtODExLDYgKzkzMSw3IEBACiAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQlVJTERfUkVTVUxUICovCiAKIC8qKiBnaXZlbiBhIHJlZ2lzdHJhdGlvbiBpbmZvIG9iamVjdCwgYSByZXF1ZXN0IG9iamVjdCBhbmQgdGhlIHRhYmxlCiAgKiAgaW5mbyBvYmplY3QgaXQgYnVpbGRzIHRoZSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgb2lkIGZyb20gdGhlCkBAIC05MjksNiArMTA1MCw0MiBAQAogICAgIHJldHVybiAwOwogfQogCituZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICoKK25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fY2xvbmUobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdHJpKQoreworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKmNvcHk7CisgICAgY29weSA9IG1hbGxvYyhzaXplb2YoKmNvcHkpKTsKKyAgICBpZiAoY29weSkgeworICAgICAgICAqY29weSA9ICp0cmk7CisgICAgICAgIGNvcHktPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQodHJpLT5pbmRleGVzKTsKKyAgICAgICAgaWYgKCFjb3B5LT5pbmRleGVzKSB7CisgICAgICAgICAgICBmcmVlKGNvcHkpOworICAgICAgICAgICAgY29weSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3ZvaWQKK25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZShuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0cmkpCit7CisgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlVMTCAhPSB0cmktPmluZGV4ZXMpCisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHRyaS0+aW5kZXhlcyk7CisKKyNpZiAwCisgICAgLyoKKyAgICAgKiBzaWdoLi4uIGV4YW1wbGUgdXNlIG9mIHZhbGlkX2NvbHVtbnMgcG9pbnRzIHRvIHN0YXRpYyBtZW1vcnksCisgICAgICogc28gZnJlZWluZyBpdCB3b3VsZCBiZSBiYWQuLi4gd2UnbGwganVzdCBoYXZlIHRvIGxpdmUgd2l0aCBhbnkKKyAgICAgKiBsZWFrcywgZm9yIG5vdy4uLgorICAgICAqLworI2VuZGlmCisKKyAgICBmcmVlKHRyaSk7Cit9CisKIC8qKiBAfSAqLwogCiAvKgpAQCAtMTA1NCwzMyArMTIxMSwyMCBAQAogICoKICAqLwogdm9pZAotI2lmIEhBVkVfU1REQVJHX0gKIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQotI2Vsc2UKLW5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCB0aW5mbyk7Ci0jZWxzZQotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRpbmZvOwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0aW5mbyA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKik7Ci0jZW5kaWYKLQogICAgIHdoaWxlICgodHlwZSA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGludCkpICE9IDApIHsKICAgICAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4KHRpbmZvLCB0eXBlKTsKICAgICB9Ci0KICAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0YXRpYyB2b2lkCiBfcm93X3N0YXNoX2RhdGFfbGlzdF9mcmVlKHZvaWQgKnB0cikgewogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKip0bXAgPSAobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKilwdHI7CkBAIC0xMDg4LDYgKzEyMzIsNyBAQAogICAgIGZyZWUocHRyKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0dFVF9PUl9DUkVBVEVfUk9XX1NUQVNICiAvKiogcmV0dXJucyBhIHJvdy13aWRlIHBsYWNlIHRvIHN0b3JlIGRhdGEgaW4uCiAgICAgQHRvZG8gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBjaGFuZ2UgdG8gYWRkIGZyZWUgcG9pbnRlciBmdW5jdGlvbnMuICovCiBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqCkBAIC0xMDk2LDcgKzEyNDEsNyBAQAogewogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipzdGFzaHAgPSBOVUxMOwogICAgIHN0YXNocCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKQotICAgICAgICBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgc3RvcmFnZV9uYW1lKTsKKyAgICAgICAgbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIChjb25zdCBjaGFyICopIHN0b3JhZ2VfbmFtZSk7CiAKICAgICBpZiAoIXN0YXNocCkgewogICAgICAgICAvKgpAQCAtMTEwOCwxMiArMTI1MywxNCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAvKiBhY2suIG91dCBvZiBtZW0gKi8KIAogICAgICAgICBuZXRzbm1wX2FnZW50X2FkZF9saXN0X2RhdGEocmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdChzdG9yYWdlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoKGNvbnN0IGNoYXIgKikgc3RvcmFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXNocCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93X3N0YXNoX2RhdGFfbGlzdF9mcmVlKSk7CiAgICAgfQogICAgIHJldHVybiBzdGFzaHA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9HRVRfT1JfQ1JFQVRFX1JPV19TVEFTSCAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogYWR2YW5jZSB0aGUgdGFibGUgaW5mbyBjb2xudW0gdG8gdGhlIG5leHQgY29sdW1uLCBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMKaW5kZXggMTliOWM1Yy4uN2M5OGFhZSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYwpAQCAtNCw2ICs0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTEsMTQgKzE3LDE5IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYXJyYXlfcmVnaXN0ZXIsdGFibGVfYXJyYXlfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2FycmF5X2ZpbmRfdGFibGVfYXJyYXlfaGFuZGxlcix0YWJsZV9hcnJheV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYXJyYXlfZXh0cmFjdF9hcnJheV9jb250ZXh0LHRhYmxlX2FycmF5X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9jaGVja19yb3dfc3RhdHVzLHRhYmxlX2FycmF5X2FsbCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUgorCiAvKgogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOICAgICAgICAtMSAKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMSAgICAgMCAKQEAgLTE5Myw2ICsyMDQsNyBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRhYnJlZyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9BUlJBWV9SRUdJU1RFUgogaW50CiBuZXRzbm1wX3RhYmxlX2FycmF5X3JlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlZywKQEAgLTIwNiw4ICsyMTgsMTAgQEAKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9jb250YWluZXJfcmVnaXN0ZXIocmVnaW5mbywgdGFicmVnLCBjYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLCBncm91cF9yb3dzKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX1JFR0lTVEVSICovCiAKIC8qKiBmaW5kIHRoZSBoYW5kbGVyIGZvciB0aGUgdGFibGVfYXJyYXkgaGVscGVyLiAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0ZJTkRfVEFCTEVfQVJSQVlfSEFORExFUgogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2ZpbmRfdGFibGVfYXJyYXlfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMjIzLDE1ICsyMzcsMTkgQEAKIAogICAgIHJldHVybiBtaDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0ZJTkRfVEFCTEVfQVJSQVlfSEFORExFUiAqLwogCiAvKiogZmluZCB0aGUgY29udGV4dCBkYXRhIHVzZWQgYnkgdGhlIHRhYmxlX2FycmF5IGhlbHBlciAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0VYVFJBQ1RfQVJSQVlfQ09OVEVYVAogbmV0c25tcF9jb250YWluZXIgICAgICAqCiBuZXRzbm1wX2V4dHJhY3RfYXJyYXlfY29udGV4dChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVEFCTEVfQVJSQVlfTkFNRSk7CisgICAgcmV0dXJuIChuZXRzbm1wX2NvbnRhaW5lciopbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVEFCTEVfQVJSQVlfTkFNRSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9BUlJBWV9FWFRSQUNUX0FSUkFZX0NPTlRFWFQgKi8KIAogLyoqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyB0cmFuc2l0aW9ucy4gKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9BUlJBWV9DSEVDS19ST1dfU1RBVFVTCiBpbnQKIG5ldHNubXBfdGFibGVfYXJyYXlfY2hlY2tfcm93X3N0YXR1cyhuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrcyAqY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dyb3VwICphZywKQEAgLTMxMCw2ICszMjgsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9BUlJBWV9DSEVDS19ST1dfU1RBVFVTICovCiAKIC8qKiBAfSAqLwogCkBAIC0zNDQsMzcgKzM2MywxMyBAQAogLyoKICAqIGNvbnRleHQgaW5mbyBmb3IgU0VUIHJlcXVlc3RzCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiB0eXBlZGVmIHN0cnVjdCBzZXRfY29udGV4dF9zIHsKICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm87CiAgICAgdGFibGVfY29udGFpbmVyX2RhdGEgKnRhZDsKICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwogfSBzZXRfY29udGV4dDsKLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfbmV0c25tcF9yZXF1ZXN0X2dyb3VwKG5ldHNubXBfaW5kZXggKmcsIHZvaWQgKnYpCi17Ci0gICAgbmV0c25tcF9yZXF1ZXN0X2dyb3VwX2l0ZW0gKnRtcDsKLSAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXAgKmdyb3VwID0gKG5ldHNubXBfcmVxdWVzdF9ncm91cCAqKSBnOwotCi0gICAgaWYgKCFnKQotICAgICAgICByZXR1cm47Ci0gICAgd2hpbGUgKGdyb3VwLT5saXN0KSB7Ci0gICAgICAgIHRtcCA9IGdyb3VwLT5saXN0OwotICAgICAgICBncm91cC0+bGlzdCA9IHRtcC0+bmV4dDsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLQotICAgIGZyZWUoZ3JvdXApOwotfQotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9uZXRzbm1wX3JlcXVlc3RfZ3JvdXBzKHZvaWQgKnZwKQotewotICAgIG5ldHNubXBfY29udGFpbmVyICpjID0gKG5ldHNubXBfY29udGFpbmVyKil2cDsKLSAgICBDT05UQUlORVJfRk9SX0VBQ0goYywgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKikKLSAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9uZXRzbm1wX3JlcXVlc3RfZ3JvdXAsIE5VTEwpOwotICAgIENPTlRBSU5FUl9GUkVFKGMpOwotfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiB2b2lkCiBidWlsZF9uZXdfb2lkKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCkBAIC00ODgsNyArNDgzLDcgQEAKICAgICAgICAgICAgIGluZGV4Lm9pZHMgPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkOwogICAgICAgICAgICAgaW5kZXgubGVuID0gdGJscmVxX2luZm8tPmluZGV4X29pZF9sZW47CiAKLSAgICAgICAgICAgIHJvdyA9IENPTlRBSU5FUl9GSU5EKHRhZC0+dGFibGUsICZpbmRleCk7CisgICAgICAgICAgICByb3cgPSAobmV0c25tcF9pbmRleCopQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwgJmluZGV4KTsKICAgICAgICAgICAgIGlmICghcm93KSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX2FycmF5OmdldCIsICJubyByb3cgZm91bmRcbiIpKTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCBjdXJyZW50LApAQCAtNTU1LDcgKzU1MCw3IEBACiAgICAgICAgICAqLwogICAgICAgICBpbmRleC5vaWRzID0gdGJscmVxX2luZm8tPmluZGV4X29pZDsKICAgICAgICAgaW5kZXgubGVuID0gdGJscmVxX2luZm8tPmluZGV4X29pZF9sZW47Ci0gICAgICAgIHRtcCA9IENPTlRBSU5FUl9GSU5EKHJlcXVlc3RfZ3JvdXAsICZpbmRleCk7CisgICAgICAgIHRtcCA9IChuZXRzbm1wX2luZGV4KilDT05UQUlORVJfRklORChyZXF1ZXN0X2dyb3VwLCAmaW5kZXgpOwogICAgICAgICBpZiAodG1wKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGVfYXJyYXk6Z3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBleGlzdGluZyBncm91cDoiKSk7CkBAIC01NjQsNiArNTU5LDggQEAKICAgICAgICAgICAgIERFQlVHTVNHKCgidGFibGVfYXJyYXk6Z3JvdXAiLCAiXG4iKSk7CiAgICAgICAgICAgICBnID0gKG5ldHNubXBfcmVxdWVzdF9ncm91cCAqKSB0bXA7CiAgICAgICAgICAgICBpID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3JlcXVlc3RfZ3JvdXBfaXRlbSk7CisgICAgICAgICAgICBpZiAoaSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGktPnJpID0gY3VycmVudDsKICAgICAgICAgICAgIGktPnRyaSA9IHRibHJlcV9pbmZvOwogICAgICAgICAgICAgaS0+bmV4dCA9IGctPmxpc3Q7CkBAIC01NzksNiArNTc2LDExIEBACiAgICAgICAgIERFQlVHTVNHKCgidGFibGVfYXJyYXk6Z3JvdXAiLCAiXG4iKSk7CiAgICAgICAgIGcgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcmVxdWVzdF9ncm91cCk7CiAgICAgICAgIGkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcmVxdWVzdF9ncm91cF9pdGVtKTsKKyAgICAgICAgaWYgKGkgPT0gTlVMTCB8fCBnID09IE5VTEwpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShpKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBnLT5saXN0ID0gaTsKICAgICAgICAgZy0+dGFibGUgPSB0YWQtPnRhYmxlOwogICAgICAgICBpLT5yaSA9IGN1cnJlbnQ7CkBAIC01ODksMTMgKzU5MSwxNSBAQAogICAgICAgICAgKiBzZWFyY2ggZm9yIHJvdy4gYWxsIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIHJvdywKICAgICAgICAgICogbGF0ZXIsIHdlJ2xsIG1ha2UgYSBjb3B5IGluIHVuZG9faW5mbyBiZWZvcmUgd2Ugc3RhcnQgcHJvY2Vzc2luZy4KICAgICAgICAgICovCi0gICAgICAgIHJvdyA9IGctPmV4aXN0aW5nX3JvdyA9IENPTlRBSU5FUl9GSU5EKHRhZC0+dGFibGUsICZpbmRleCk7CisgICAgICAgIHJvdyA9IGctPmV4aXN0aW5nX3JvdyA9IChuZXRzbm1wX2luZGV4KilDT05UQUlORVJfRklORCh0YWQtPnRhYmxlLCAmaW5kZXgpOwogICAgICAgICBpZiAoIWctPmV4aXN0aW5nX3JvdykgewogICAgICAgICAgICAgaWYgKCF0YWQtPmNiLT5jcmVhdGVfcm93KSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgICAgIGlmKE1PREVfSVNfU0VUKGFndHJlcV9pbmZvLT5tb2RlKSkKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihhZ3RyZXFfaW5mbywgY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CiAgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCBjdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwogICAgICAgICAgICAgICAgIGZyZWUoZyk7CkBAIC02MjQsNiArNjI4LDMzIEBACiAgICAgfSAvKiogZm9yKCBjdXJyZW50IC4uLiApICovCiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitzdGF0aWMgdm9pZAorcmVsZWFzZV9uZXRzbm1wX3JlcXVlc3RfZ3JvdXAobmV0c25tcF9pbmRleCAqZywgdm9pZCAqdikKK3sKKyAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXBfaXRlbSAqdG1wOworICAgIG5ldHNubXBfcmVxdWVzdF9ncm91cCAqZ3JvdXAgPSAobmV0c25tcF9yZXF1ZXN0X2dyb3VwICopIGc7CisKKyAgICBpZiAoIWcpCisgICAgICAgIHJldHVybjsKKyAgICB3aGlsZSAoZ3JvdXAtPmxpc3QpIHsKKyAgICAgICAgdG1wID0gZ3JvdXAtPmxpc3Q7CisgICAgICAgIGdyb3VwLT5saXN0ID0gdG1wLT5uZXh0OworICAgICAgICBmcmVlKHRtcCk7CisgICAgfQorCisgICAgZnJlZShncm91cCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cHModm9pZCAqdnApCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmMgPSAobmV0c25tcF9jb250YWluZXIqKXZwOworICAgIENPTlRBSU5FUl9GT1JfRUFDSChjLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKQorICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cCwgTlVMTCk7CisgICAgQ09OVEFJTkVSX0ZSRUUoYyk7Cit9CisKIHN0YXRpYyB2b2lkCiBwcm9jZXNzX3NldF9ncm91cChuZXRzbm1wX2luZGV4ICpvLCB2b2lkICpjKQogewpAQCAtODE3LDYgKzg0OCw3IEBACiAKICAgICByZXR1cm4gY29udGV4dC5zdGF0dXM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg1Miw2ICs4ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICBtb2RlX25hbWVbYWd0cmVxX2luZm8tPm1vZGVdKSk7CiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmIChNT0RFX0lTX1NFVChhZ3RyZXFfaW5mby0+bW9kZSkpIHsKICAgICAgICAgLyoKICAgICAgICAgICogbmV0c25tcF9tdXRleF9sb2NrKCZ0YWQtPmxvY2spOwpAQCAtODYyLDYgKzg5NSw3IEBACiAgICAgICAgICAqIG5ldHNubXBfbXV0ZXhfdW5sb2NrKCZ0YWQtPmxvY2spOwogICAgICAgICAgKi8KICAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgcmMgPSBwcm9jZXNzX2dldF9yZXF1ZXN0cyhyZWdpbmZvLCBhZ3RyZXFfaW5mbywgcmVxdWVzdHMsIHRhZCk7CiAKICAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikgewpAQCAtODgxLDQgKzkxNSw1IEBACiAgICAgCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSICovCiAvKiogQGVuZGNvbmQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jCmluZGV4IGQwOGJmZjIuLjA4ZTk3NDEgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYwpAQCAtNCw2ICs0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTExLDE0ICsxNywyMSBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUodGFibGVfY29udGFpbmVyKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2NvbnRhaW5lciwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfcmVwbGFjZV9yb3csIHRhYmxlX2NvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyX2V4dHJhY3QsIHRhYmxlX2NvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyX21hbmFnZW1lbnQsIHRhYmxlX2NvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyX3Jvd19yZW1vdmUsIHRhYmxlX2NvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQsIHRhYmxlX2NvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyX2FsbCwgbWliX2hlbHBlcnMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVIKKwogLyoKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTiAgICAgICAgLTEgCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTEgICAgIDAgCkBAIC0zNCw2ICs0Nyw5IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IGNvbnRhaW5lcl90YWJsZV9kYXRhX3MgewogCisgICAgLyoqIE51bWJlciBvZiBoYW5kbGVycyB3aG9zZSBteXZvaWQgcG9pbnRlciBwb2ludHMgdG8gdGhpcyBzdHJ1Y3R1cmUuICovCisgICAgaW50IHJlZmNudDsKKwogICAgLyoqIHJlZ2lzdHJhdGlvbiBpbmZvIGZvciB0aGUgdGFibGUgKi8KICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxyZWdfaW5mbzsKIApAQCAtMTU5LDYgKzE3NSw3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX01BTkFHRU1FTlQKIGNvbnRhaW5lcl90YWJsZV9kYXRhICoKIG5ldHNubXBfdGNvbnRhaW5lcl9jcmVhdGVfdGFibGUoIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBsb25nIGZsYWdzICkKQEAgLTE3OSw3ICsxOTYsNyBAQAogICAgIH0KIAogICAgIGlmIChmbGFncykKLSAgICAgICAgdGFibGUtPmtleV90eXBlID0gZmxhZ3MgJiAweDAzOyAgLyogVXNlIGxvd2VzdCB0d28gYml0cyAqLworICAgICAgICB0YWJsZS0+a2V5X3R5cGUgPSAoY2hhcikoZmxhZ3MgJiAweDAzKTsgIC8qIFVzZSBsb3dlc3QgdHdvIGJpdHMgKi8KICAgICBlbHNlCiAgICAgICAgIHRhYmxlLT5rZXlfdHlwZSA9IFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWDsKIApAQCAtMjAzLDYgKzIyMCw3IEBACiAgICAgU05NUF9GUkVFKHRhYmxlKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfTUFOQUdFTUVOVCAqLwogCiAgICAgLyoKICAgICAgKiBUaGUgdmFyaW91cyBzdGFuZGFsb25lIHJvdyBvcGVyYXRpb24gcm91dGluZXMKQEAgLTIyOSw2ICsyNDcsNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JFUExBQ0VfUk9XCiBpbnQKIG5ldHNubXBfdGNvbnRhaW5lcl9yZXBsYWNlX3JvdyggY29udGFpbmVyX3RhYmxlX2RhdGEgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luZGV4ICpvbGRfcm93LCBuZXRzbm1wX2luZGV4ICpuZXdfcm93ICkKQEAgLTIzOSw2ICsyNTgsNyBAQAogICAgIG5ldHNubXBfdGNvbnRhaW5lcl9hZGRfcm93KCAgICB0YWJsZSwgbmV3X3JvdyApOwogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JFUExBQ0VfUk9XICovCiAKICAgICAvKiBuZXRzbm1wX3Rjb250YWluZXJfcmVtb3ZlX2RlbGV0ZV9yb3coKSB3aWxsIGJlIHRhYmxlLXNwZWNpZmljIHRvbyAqLwogCkBAIC0yNDksNiArMjY5LDIwIEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCitzdGF0aWMgY29udGFpbmVyX3RhYmxlX2RhdGEgKgorbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9jbG9uZShjb250YWluZXJfdGFibGVfZGF0YSAqdGFkKQoreworICAgICsrdGFkLT5yZWZjbnQ7CisgICAgcmV0dXJuIHRhZDsKK30KKworc3RhdGljIHZvaWQKK25ldHNubXBfY29udGFpbmVyX3RhYmxlX2RhdGFfZnJlZShjb250YWluZXJfdGFibGVfZGF0YSAqdGFkKQoreworICAgIGlmICgtLXRhZC0+cmVmY250ID09IDApCisJZnJlZSh0YWQpOworfQorCiAvKiogcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldChuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJyZWcsCkBAIC0yNzMsNiArMzA3LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgdGFkLT5yZWZjbnQgPSAxOwogICAgIHRhZC0+dGJscmVnX2luZm8gPSB0YWJyZWc7ICAvKiB3ZSBuZWVkIGl0IHRvbywgYnV0IGl0IHJlYWxseSBpcyBub3Qgb3VycyAqLwogICAgIGlmKGtleV90eXBlKQogICAgICAgICB0YWQtPmtleV90eXBlID0ga2V5X3R5cGU7CkBAIC0yODksNiArMzI0LDggQEAKICAgICAgICAgY29udGFpbmVyLT5uY29tcGFyZSA9IG5ldHNubXBfbmNvbXBhcmVfbmV0c25tcF9pbmRleDsKICAgICAKICAgICBoYW5kbGVyLT5teXZvaWQgPSAodm9pZCopdGFkOworICAgIGhhbmRsZXItPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9jbG9uZTsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUgPSAodm9pZCAoKikodm9pZCAqKSluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9kYXRhX2ZyZWU7CiAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUOwogICAgIAogICAgIHJldHVybiBoYW5kbGVyOwpAQCAtMzE1LDEzICszNTIsMzUgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YWJyZWcpOwogfQogCitpbnQKK25ldHNubXBfY29udGFpbmVyX3RhYmxlX3VucmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKK3sKKyAgICBjb250YWluZXJfdGFibGVfZGF0YSAqdGFkOworCisgICAgaWYgKCFyZWdpbmZvKQorICAgICAgICByZXR1cm4gTUlCX1VOUkVHSVNUUkFUSU9OX0ZBSUxFRDsKKyAgICB0YWQgPSAoY29udGFpbmVyX3RhYmxlX2RhdGEgKikKKyAgICAgICAgbmV0c25tcF9maW5kX2hhbmRsZXJfZGF0YV9ieV9uYW1lKHJlZ2luZm8sICJ0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAodGFkKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKCB0YWQtPnRhYmxlICk7CisgICAgICAgIHRhZC0+dGFibGUgPSBOVUxMOworCS8qCisJICogTm90ZTogZG9uJ3QgZnJlZSB0aGUgbWVtb3J5IHRhZCBwb2ludHMgYXQgaGVyZSAtIHRoYXQgaXMgZG9uZQorCSAqIGJ5IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2RhdGFfZnJlZSgpLgorCSAqLworICAgIH0KKyAgICByZXR1cm4gbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlKCByZWdpbmZvICk7Cit9CisKIC8qKiByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHVzZWQgYnkgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfRVhUUkFDVAogbmV0c25tcF9jb250YWluZXIqCiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9jb250YWluZXJfZXh0cmFjdChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKICAgICByZXR1cm4gKG5ldHNubXBfY29udGFpbmVyICopCiAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9DT05UQUlORVJfQ09OVEFJTkVSKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9FWFRSQUNUICovCiAKICNpZm5kZWYgTkVUU05NUF9VU0VfSU5MSU5FCiAvKiogZmluZCB0aGUgY29udGV4dCBkYXRhIHVzZWQgYnkgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgKi8KQEAgLTM0Niw2ICs0MDUsNyBAQAogfQogI2VuZGlmIC8qIGlubGluZSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JPV19JTlNFUlQKIC8qKiBpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0YWJsZV9jb250YWluZXIgZW50cnkgaW50byBhIHJlcXVlc3QgbGlzdCAqLwogdm9pZAogbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2luc2VydChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKQEAgLTQxMyw2ICs0NzMsNzYgQEAKICAgICAgICAgfQogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9ST1dfSU5TRVJUICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUk9XX1JFTU9WRQorLyoqIHJlbW92ZXMgYSB0YWJsZV9jb250YWluZXIgZW50cnkgZnJvbSBhIHJlcXVlc3QgbGlzdCAqLwordm9pZAorbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X3JlbW92ZShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pbmRleCAgICAgICAgKnJvdykKK3sKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICAgICAqdGhpc19pbmRleCA9IE5VTEw7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICAgICAgKnRoYXRfaW5kZXggPSBOVUxMOworICAgIG9pZCAgICAgIGJhc2Vfb2lkW10gPSB7MCwgMH07CS8qIE1ha2Ugc3VyZSBpbmRleCBPSURzIGFyZSBsZWdhbCEgKi8KKyAgICBvaWQgICAgICB0aGlzX29pZFtNQVhfT0lEX0xFTl07CisgICAgb2lkICAgICAgdGhhdF9vaWRbTUFYX09JRF9MRU5dOworICAgIHNpemVfdCAgIHRoaXNfb2lkX2xlbiwgdGhhdF9vaWRfbGVuOworCisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIFdlJ2xsIGFkZCB0aGUgbmV3IHJvdyBpbmZvcm1hdGlvbiB0byBhbnkgcmVxdWVzdAorICAgICAqIHN0cnVjdHVyZSB3aXRoIHRoZSBzYW1lIGluZGV4IHZhbHVlcyBhcyB0aGUgcmVxdWVzdAorICAgICAqIHBhc3NlZCBpbiAod2hpY2ggaW5jbHVkZXMgdGhhdCBvbmUhKS4KKyAgICAgKgorICAgICAqIFNvIGNvbnN0cnVjdCBhbiBPSUQgYmFzZWQgb24gdGhlc2UgaW5kZXggdmFsdWVzLgorICAgICAqLworCisgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgIHRoaXNfaW5kZXggPSB0YWJsZV9pbmZvLT5pbmRleGVzOworICAgIGJ1aWxkX29pZF9ub2FsbG9jKHRoaXNfb2lkLCBNQVhfT0lEX0xFTiwgJnRoaXNfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBiYXNlX29pZCwgMiwgdGhpc19pbmRleCk7CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRoZSB3aG9sZSBvZiB0aGUgcmVxdWVzdCBsaXN0CisgICAgICogKGFzIHJlY2VpdmVkIGJ5IHRoZSBjdXJyZW50IGhhbmRsZXIpLCBhcyB0aGVyZSdzIG5vCisgICAgICogZ3VhcmFudGVlIHRoYXQgdGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBmaXJzdAorICAgICAqIHZhcmJpbmQgdGhhdCByZWZlcnMgdG8gdGhpcyByb3cuCisgICAgICogICBJbiBwYXJ0aWN1bGFyLCBhIFJvd1N0YXR1cyBjb250cm9sbGVkIHJvdyBjcmVhdGlvbgorICAgICAqIG1heSBlYXNpbHkgb2NjdXIgbGF0ZXIgaW4gdGhlIHZhcmlhYmxlIGxpc3QuCisgICAgICoKKyAgICAgKiBTbyBmaXJzdCwgd2UgcmV3aW5kIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0Li4uLgorICAgICAqLworICAgIGZvciAocmVxPXJlcXVlc3Q7IHJlcS0+cHJldjsgcmVxPXJlcS0+cHJldikKKyAgICAgICAgOworCisgICAgLyoKKyAgICAgKiAuLi4gYW5kIHRoZW4gc3RhcnQgbG9va2luZyBmb3IgbWF0Y2hpbmcgaW5kZXhlcworICAgICAqIChieSBjb25zdHJ1Y3RpbmcgT0lEcyBmcm9tIHRoZXNlIGluZGV4IHZhbHVlcykKKyAgICAgKi8KKyAgICBmb3IgKDsgcmVxOyByZXE9cmVxLT5uZXh0KSB7CisgICAgICAgIGlmIChyZXEtPnByb2Nlc3NlZCkgCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXEpOworICAgICAgICB0aGF0X2luZGV4ID0gdGFibGVfaW5mby0+aW5kZXhlczsKKyAgICAgICAgYnVpbGRfb2lkX25vYWxsb2ModGhhdF9vaWQsIE1BWF9PSURfTEVOLCAmdGhhdF9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX29pZCwgMiwgdGhhdF9pbmRleCk7CisgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyByZXF1ZXN0IGhhcyB0aGUgc2FtZSBpbmRleCB2YWx1ZXMsCisgICAgICAgICAqIHNvIGFkZCB0aGUgbmV3bHktY3JlYXRlZCByb3cgaW5mb3JtYXRpb24uCisgICAgICAgICAqLworICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZSh0aGlzX29pZCwgdGhpc19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0X29pZCwgdGhhdF9vaWRfbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YShyZXEsIFRBQkxFX0NPTlRBSU5FUl9ST1cpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JPV19SRU1PVkUgKi8KIAogLyoqIEBjb25kICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDgyLDcgKzYxMiw3IEBACiAgICAgICAgICAqIGNvbHVtbiwgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgKi8KICAgICAgICAgX3NldF9rZXkoIHRhZCwgcmVxdWVzdCwgdGJscmVxX2luZm8sICZrZXksICZpbmRleCApOwotICAgICAgICByb3cgPSBfZmluZF9uZXh0X3Jvdyh0YWQtPnRhYmxlLCB0YmxyZXFfaW5mbywga2V5KTsKKyAgICAgICAgcm93ID0gKG5ldHNubXBfaW5kZXgqKV9maW5kX25leHRfcm93KHRhZC0+dGFibGUsIHRibHJlcV9pbmZvLCBrZXkpOwogICAgICAgICBpZiAocm93KSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogdXBkYXRlIGluZGV4ZXMgaW4gdGJscmVxX2luZm8gKGluZGV4ICYgdmFyYmluZCksCkBAIC01MTgsMTcgKzY0OCwyMSBAQAogICAgIGVsc2UgewogCiAgICAgICAgIF9zZXRfa2V5KCB0YWQsIHJlcXVlc3QsIHRibHJlcV9pbmZvLCAma2V5LCAmaW5kZXggKTsKLSAgICAgICAgcm93ID0gQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwga2V5KTsKKyAgICAgICAgcm93ID0gKG5ldHNubXBfaW5kZXgqKUNPTlRBSU5FUl9GSU5EKHRhZC0+dGFibGUsIGtleSk7CiAgICAgICAgIGlmIChOVUxMID09IHJvdykgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIG5vdCByZXN1bHRzIGZvdW5kLiBGb3IgYSBnZXQsIHRoYXQgaXMgYW4gZXJyb3IKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX2NvbnRhaW5lciIsICJubyByb3cgZm91bmRcbiIpKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBpZigoYWd0cmVxX2luZm8tPm1vZGUgIT0gTU9ERV9TRVRfUkVTRVJWRTEpIHx8IC8qIGdldCAqLwogICAgICAgICAgICAgICAgKHJlZ2luZm8tPm1vZGVzICYgSEFORExFUl9DQU5fTk9UX0NSRUFURSkpIHsgLyogbm8gY3JlYXRlICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihhZ3RyZXFfaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgfQogICAgIH0gLyoqIEdFVC9TRVQgKi8KICAgICAKQEAgLTU5MCw3ICs3MjQsMTEgQEAKICAgICAgKiByZWdpc3RyYXRpb24uCiAgICAgICovCiAgICAgb2xkbW9kZSA9IGFndHJlcV9pbmZvLT5tb2RlOwotICAgIGlmKE1PREVfSVNfR0VUKG9sZG1vZGUpIHx8IChNT0RFX1NFVF9SRVNFUlZFMSA9PSBvbGRtb2RlKSkgeworICAgIGlmKE1PREVfSVNfR0VUKG9sZG1vZGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgIHx8IChNT0RFX1NFVF9SRVNFUlZFMSA9PSBvbGRtb2RlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICApIHsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKmN1cnJfcmVxdWVzdDsKICAgICAgICAgLyoKICAgICAgICAgICogTG9vcCB0aHJvdWdoIGVhY2ggb2YgdGhlIHJlcXVlc3RzLCBhbmQKQEAgLTcyMSw3ICs4NTksNyBAQAogbmV0c25tcF90YWJsZV9pbmRleF9maW5kX25leHRfcm93KG5ldHNubXBfY29udGFpbmVyICpjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxyZXEpCiB7Ci0gICAgcmV0dXJuIF9maW5kX25leHRfcm93KGMsIHRibHJlcSwgTlVMTCApOworICAgIHJldHVybiAobmV0c25tcF9pbmRleCopX2ZpbmRfbmV4dF9yb3coYywgdGJscmVxLCBOVUxMICk7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTczMCw0ICs4NjgsOSBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVIgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQodGFibGVfY29udGFpbmVyKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUiAqLwogLyoqIEB9ICovCisKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYwppbmRleCAzMTczMzFhLi42NTlkOTAzIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYworKysgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYwpAQCAtMSw0ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsMTMgKzEyLDMwIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfYWxsLCBtaWJfaGVscGVycykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGEsIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV90YWJsZV9kYXRhLCB0YWJsZV9kYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihleHRyYWN0X3RhYmxlX3Jvd19kYXRhLCB0YWJsZV9kYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnNlcnRfdGFibGVfcm93LCB0YWJsZV9kYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSwgdGFibGVfZGF0YV9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2V4dHJhcywgdGFibGVfZGF0YV9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2NyZWF0ZV90YWJsZSwgdGFibGVfZGF0YV9leHRyYXMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9jcmVhdGVfcm93LCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2NvcHlfcm93LCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3JlbW92ZV9kZWxldGVfcm93LCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3VucmVnaXN0ZXIsIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcm93X2NvdW50LCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3Jvd19vcGVyYXRpb25zLCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3Jvd19maXJzdCwgdGFibGVfZGF0YV9leHRyYXMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBCisKIC8qKiBAZGVmZ3JvdXAgdGFibGVfZGF0YSB0YWJsZV9kYXRhCiAgKiAgSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLgogICogIEBpbmdyb3VwIHRhYmxlCkBAIC04MCwxNiArMTAzLDE3IEBACiAgICAgaWYgKHJvdy0+aW5kZXhlcykgewogICAgICAgICBuZXdyb3ctPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQobmV3cm93LT5pbmRleGVzKTsKICAgICAgICAgaWYgKCFuZXdyb3ctPmluZGV4ZXMpIHsKLSAgICAgICAgICAgIGZyZWUgKG5ld3Jvdyk7CisgICAgICAgICAgICBmcmVlKG5ld3Jvdyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyb3ctPmluZGV4X29pZCkgewotICAgICAgICBuZXdyb3ctPmluZGV4X29pZCA9IG5ldHNubXBfbWVtZHVwKHJvdy0+aW5kZXhfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgbmV3cm93LT5pbmRleF9vaWQgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQocm93LT5pbmRleF9vaWQsIHJvdy0+aW5kZXhfb2lkX2xlbik7CiAgICAgICAgIGlmICghbmV3cm93LT5pbmRleF9vaWQpIHsKLSAgICAgICAgICAgIGZyZWUgKG5ld3Jvdyk7CisgICAgICAgICAgICBmcmVlKG5ld3Jvdy0+aW5kZXhlcyk7CisgICAgICAgICAgICBmcmVlKG5ld3Jvdyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNyw3ICsyNTEsNyBAQAogfQogCiAvKiogc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuICBUaGlzIGRvZXMgKm5vdCogZGVsZXRlL2ZyZWUgYW55dGhpbmchICovCi1ORVRTTk1QX0lOTElORSB2b2lkCit2b2lkCiBuZXRzbm1wX3RhYmxlX2RhdGFfcmVwbGFjZV9yb3cobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqb3JpZ3JvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqbmV3cm93KQpAQCAtMjg2LDEyICszMTAsMTUgQEAKICAgICAgKiBHZW5lcmljIEFQSSAtIG1vc3RseSByZW5hbWVkIHdyYXBwZXJzCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DUkVBVEVfVEFCTEUKIG5ldHNubXBfdGFibGVfZGF0YSAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfY3JlYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIGxvbmcgZmxhZ3MpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGEoIG5hbWUgKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfQ1JFQVRFX1RBQkxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0RFTEVURV9UQUJMRQogdm9pZAogbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSggbmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSApCiB7CkBAIC0zMTEsMTQgKzMzOCwxMyBAQAogICAgIH0KICAgICB0YWJsZS0+Zmlyc3Rfcm93ID0gTlVMTDsKIAotICAgIGlmICh0YWJsZS0+bmFtZSkgewotICAgICAgICBTTk1QX0ZSRUUodGFibGUtPm5hbWUpOwotICAgICAgICB0YWJsZS0+bmFtZSA9IE5VTEw7Ci0gICAgfQorICAgIFNOTVBfRlJFRSh0YWJsZS0+bmFtZSk7CiAgICAgU05NUF9GUkVFKHRhYmxlKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0RFTEVURV9UQUJMRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DUkVBVEVfUk9XCiBuZXRzbm1wX3RhYmxlX3JvdyAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfY3JlYXRlX3Jvdyggdm9pZCogZW50cnkgKQogewpAQCAtMzI3LDkgKzM1MywxMSBAQAogICAgICAgICByb3ctPmRhdGEgPSBlbnRyeTsKICAgICByZXR1cm4gcm93OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DUkVBVEVfUk9XICovCiAKICAgICAvKiBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93KCkgZGVmaW5lZCBhYm92ZSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DT1BZX1JPVwogaW50CiBuZXRzbm1wX3RhYmxlX2RhdGFfY29weV9yb3coIG5ldHNubXBfdGFibGVfcm93ICAqb2xkX3JvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yb3cgICpuZXdfcm93ICkKQEAgLTM0MiwxMSArMzcwLDEyIEBACiAgICAgaWYgKG9sZF9yb3ctPmluZGV4ZXMpCiAgICAgICAgIG5ld19yb3ctPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQob2xkX3Jvdy0+aW5kZXhlcyk7CiAgICAgaWYgKG9sZF9yb3ctPmluZGV4X29pZCkKLSAgICAgICAgbmV3X3Jvdy0+aW5kZXhfb2lkID0gbmV0c25tcF9tZW1kdXAob2xkX3Jvdy0+aW5kZXhfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfcm93LT5pbmRleF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBuZXdfcm93LT5pbmRleF9vaWQgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQob2xkX3Jvdy0+aW5kZXhfb2lkLCBvbGRfcm93LT5pbmRleF9vaWRfbGVuKTsKICAgICAvKiBYWFggLSBEb2Vzbid0IGNvcHkgdGFibGUtc3BlY2lmaWMgcm93IHN0cnVjdHVyZSAqLwogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DT1BZX1JPVyAqLwogCiAgICAgLyoKICAgICAgKiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3JvdygpCkBAIC0zNTYsMTIgKzM4NSwxNCBAQAogICAgICAqICAgICBhbGwgZGVmaW5lZCBhYm92ZQogICAgICAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9SRU1PVkVfREVMRVRFX1JPVwogdm9pZCAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX2RlbGV0ZV9yb3cobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQogewogICAgIHJldHVybiBuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93KHRhYmxlLCByb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9SRU1PVkVfREVMRVRFX1JPVyAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQwMyw2ICs0MzQsOCBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRhYmxlX2luZm8pOwogfQogCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfVEFCTEVfREFUQQogLyoqIHJlZ2lzdGVycyBhIGhhbmRsZXIgYXMgYSByZWFkLW9ubHkgZGF0YSB0YWJsZQogICogIElmIHRhYmxlX2luZm8gIT0gTlVMTCwgaXQgcmVnaXN0ZXJzIGl0IGFzIGEgbm9ybWFsIHRhYmxlIHRvby4gKi8KIGludApAQCAtNDEzLDYgKzQ0NiwxNiBAQAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfcmVhZF9vbmx5X2hhbmRsZXIoKSk7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YShyZWdpbmZvLCB0YWJsZSwgdGFibGVfaW5mbyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfVEFCTEVfREFUQSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9VTlJFR0lTVEVSCitpbnQKK25ldHNubXBfdW5yZWdpc3Rlcl90YWJsZV9kYXRhKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCit7CisgICAgLyogZnJlZSB0YWJsZTsgKi8KKyAgICByZXR1cm4gbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlKHJlZ2luZm8pOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9VTlJFR0lTVEVSICovCiAKIC8qCiAgKiBUaGUgaGVscGVyIGhhbmRsZXIgdGhhdCB0YWtlcyBjYXJlIG9mIHBhc3NpbmcgYSBzcGVjaWZpYyByb3cgb2YKQEAgLTQ0NSw3ICs0ODgsOSBAQAogICAgICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfREFUQV9UQUJMRSwgdGFibGUsIE5VTEwpKTsKQEAgLTUxOSw5ICs1NjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVxdWFsIG1hdGNoLCByZXR1cm4gdGhlIG5leHQgcm93IAogICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcm93ID0gcm93LT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTU5OCw2ICs2NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICB2YWxpZF9yZXF1ZXN0ID0gMTsKICAgICAgICAgICAgIGlmIChOVUxMICE9CkBAIC02MjIsNiArNjY2LDcgQEAKICAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgICAgICB2YWxpZF9yZXF1ZXN0ID0gMTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICB9CiAgICAgfQpAQCAtNjY0LDYgKzcwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9EQVRBX1JPVyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9FWFRSQUNUX1RBQkxFX1JPV19EQVRBCiAvKiogZXh0cmFjdHMgdGhlIGRhdGEgZnJvbSB0aGUgcm93IGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZQogICogdGFibGVfZGF0YSBoZWxwZXIgKi8KIHZvaWQgICAgICAgICAgICoKQEAgLTY3Niw5ICs3MjIsMTEgQEAKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRVhUUkFDVF9UQUJMRV9ST1dfREFUQSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5TRVJUX1RBQkxFX1JPVwogLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2RhdGEgcm93IGludG8gYSByZXF1ZXN0ICovCi1ORVRTTk1QX0lOTElORSB2b2lkCit2b2lkCiBuZXRzbm1wX2luc2VydF90YWJsZV9yb3cobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yb3cgKnJvdykKIHsKQEAgLTc0MSw2ICs3ODksNyBAQAogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5TRVJUX1RBQkxFX1JPVyAqLwogCiAvKiBidWlsZHMgYSByZXN1bHQgZ2l2ZW4gYSByb3csIGEgdmFyYmluZCB0byBzZXQgYW5kIHRoZSBkYXRhICovCiBpbnQKQEAgLTg1MiwxMSArOTAxLDEzIEBACiAgICAgICogR2VuZXJpYyBBUEkgLSBtb3N0bHkgcmVuYW1lZCB3cmFwcGVycwogICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0ZJUlNUCiBuZXRzbm1wX3RhYmxlX3JvdyAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2ZpcnN0KG5ldHNubXBfdGFibGVfZGF0YSAqdGFibGUpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfdGFibGVfZGF0YV9nZXRfZmlyc3Rfcm93KHRhYmxlKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0ZJUlNUICovCiAKIG5ldHNubXBfdGFibGVfcm93ICoKIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfZ2V0KCAgbmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSwKQEAgLTkyMSwxMSArOTcyLDEzIEBACiAgICAgcmV0dXJuIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfbmV4dF9ieW9pZCh0YWJsZSwgaW5zdGFuY2UsIGxlbik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JPV19DT1VOVAogaW50CiBuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2NvdW50KG5ldHNubXBfdGFibGVfZGF0YSAqdGFibGUpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfdGFibGVfZGF0YV9udW1fcm93cyh0YWJsZSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JPV19DT1VOVCAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTkzNSw2ICs5ODgsNyBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX09QRVJBVElPTlMKIHZvaWQgKgogbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X2ZpcnN0KG5ldHNubXBfdGFibGVfZGF0YSAqdGFibGUpCiB7CkBAIC05OTQsNiArMTA0OCw3IEBACiAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfbmV4dF9ieW9pZCh0YWJsZSwgaW5zdGFuY2UsIGxlbik7CiAgICAgcmV0dXJuIChyb3cgPyByb3ctPmRhdGEgOiBOVUxMICk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JPV19PUEVSQVRJT05TICovCiAKICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICogR2VuZXJpYyBBUEkgLSBtb3N0bHkgcmVuYW1lZCB3cmFwcGVycwpAQCAtMTAwNSw1ICsxMDYwLDkgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh0YWJsZV9kYXRhKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEEgKi8KKwogLyoqIEB9IAogICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jCmluZGV4IGY5MmUzZTEuLjkzMWMyN2EgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jCkBAIC0xLDQgKzEsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg+CiAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC02LDggKzEzLDMzIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YXNldF9hbGwsIG1pYl9oZWxwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXQsIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXRfcmVtb3ZlX3JvdywgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9zZXRfY29sdW1uLCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhc2V0X2dldF9uZXdyb3csIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3NldF9hZGRfaW5kZXhlcywgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGVsZXRlX3RhYmxlX2RhdGFfc2V0LCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93LCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhc2V0X3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlLCB0YWJsZV9kYXRhc2V0X2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RBQkxFX0RBVEFTRVQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2dldF9vcl9jcmVhdGVfcm93X3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YV9kZWxldGVfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2dldF9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RBQkxFX0RBVEFTRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVQKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaCkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShtaWJfdG9fYXNuX3R5cGUpCisjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAKIHN0YXRpYyBuZXRzbm1wX2RhdGFfbGlzdCAqYXV0b190YWJsZXM7CiAKQEAgLTcyLDgyICsxMDQsMTAgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLS8qKiBDcmVhdGUgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHN0cnVjdHVyZSBnaXZlbiBhIHRhYmxlX2RhdGEgZGVmaW5pdGlvbiAqLwotbmV0c25tcF90YWJsZV9kYXRhX3NldCAqCi1uZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3NldChjb25zdCBjaGFyICp0YWJsZV9uYW1lKQotewotICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCA9Ci0gICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9kYXRhX3NldCk7Ci0gICAgaWYgKCF0YWJsZV9zZXQpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHRhYmxlX3NldC0+dGFibGUgPSBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhKHRhYmxlX25hbWUpOwotICAgIHJldHVybiB0YWJsZV9zZXQ7Ci19Ci0KLXZvaWQgbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0KQotewotICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqcHRyLCAqbmV4dDsKLSAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcHJvdywgKnBuZXh0cm93OwotCi0gICAgZm9yIChwdHIgPSB0YWJsZV9zZXQtPmRlZmF1bHRfcm93OyBwdHI7IHB0ciA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKLSAgICAgICAgZnJlZShwdHIpOwotICAgIH0KLSAgICB0YWJsZV9zZXQtPmRlZmF1bHRfcm93ID0gTlVMTDsKLSAgICBmb3IgKHByb3cgPSB0YWJsZV9zZXQtPnRhYmxlLT5maXJzdF9yb3c7IHByb3c7IHByb3cgPSBwbmV4dHJvdykgewotICAgICAgICBwbmV4dHJvdyA9IHByb3ctPm5leHQ7Ci0gICAgICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGVfc2V0LCBwcm93KTsKLSAgICB9Ci0gICAgdGFibGVfc2V0LT50YWJsZS0+Zmlyc3Rfcm93ID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKHRhYmxlX3NldC0+dGFibGUpOwotICAgIGZyZWUodGFibGVfc2V0KTsKLX0KLQotLyoqIGNsb25lcyBhIGRhdGFzZXQgcm93LCBpbmNsdWRpbmcgYWxsIGRhdGEuICovCi1uZXRzbm1wX3RhYmxlX3JvdyAqCi1uZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3JvdyhuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQotewotICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSwgKipuZXdyb3dkYXRhOwotICAgIG5ldHNubXBfdGFibGVfcm93ICpuZXdyb3c7Ci0KLSAgICBpZiAoIXJvdykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93KHJvdyk7Ci0gICAgaWYgKCFuZXdyb3cpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZGF0YSA9IChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKikgcm93LT5kYXRhOwotCi0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAgZm9yIChuZXdyb3dkYXRhID0KLSAgICAgICAgICAgICAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoqKSAmKG5ld3Jvdy0+ZGF0YSk7IGRhdGE7Ci0gICAgICAgICAgICAgbmV3cm93ZGF0YSA9ICYoKCpuZXdyb3dkYXRhKS0+bmV4dCksIGRhdGEgPSBkYXRhLT5uZXh0KSB7Ci0KLSAgICAgICAgICAgICpuZXdyb3dkYXRhID0gbmV0c25tcF9tZW1kdXAoZGF0YSwKLSAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKSk7Ci0gICAgICAgICAgICBpZiAoISpuZXdyb3dkYXRhKSB7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3cobmV3cm93KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRhdGEtPmRhdGEudm9pZHApIHsKLSAgICAgICAgICAgICAgICAoKm5ld3Jvd2RhdGEpLT5kYXRhLnZvaWRwID0gbmV0c25tcF9tZW1kdXAoZGF0YS0+ZGF0YS52b2lkcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZGF0YV9sZW4pOwotICAgICAgICAgICAgICAgIGlmICghKCpuZXdyb3dkYXRhKS0+ZGF0YS52b2lkcCkgewotICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyhuZXdyb3cpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld3JvdzsKLX0KLQogLyoqIGRlbGV0ZXMgYSBzaW5nbGUgZGF0YXNldCB0YWJsZSBkYXRhLgogICogIHJldHVybnMgdGhlIChwb3NzaWJseSBzdGlsbCBnb29kKSBuZXh0IHBvaW50ZXIgb2YgdGhlIGRlbGV0ZWQgZGF0YSBvYmplY3QuCiAgKi8KLU5FVFNOTVBfSU5MSU5FIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoKIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfZGF0YShuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKmRhdGEpCiB7CiAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpuZXh0UHRyID0gTlVMTDsKQEAgLTE3OCw3ICsxMzgsNyBAQAogICAgIGlmICghcm93KQogICAgICAgICByZXR1cm47CiAKLSAgICBkYXRhID0gbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV9yb3cocm93KTsKKyAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSopbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV9yb3cocm93KTsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2FsbF9kYXRhKGRhdGEpOwogfQogCkBAIC0yMDQsNiArMTY0LDcgQEAKIH0KIAogLyoqIHJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUsIGJ1dCBkb2Vzbid0IGRlbGV0ZS9mcmVlIHRoZSBjb2x1bW4gdmFsdWVzICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9SRU1PVkVfUk9XCiBORVRTTk1QX0lOTElORSB2b2lkCiBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX3JvdyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpyb3cpCkBAIC0yMTMsNiArMTc0LDcgQEAKIAogICAgIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGUtPnRhYmxlLCByb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9SRU1PVkVfUk9XICovCiAKIC8qKiByZW1vdmVzIGEgcm93IGZyb20gdGhlIHRhYmxlIGFuZCB0aGVuIGRlbGV0ZXMgaXQgKGFuZCBhbGwgaXRzIGRhdGEpICovCiBORVRTTk1QX0lOTElORSB2b2lkCkBAIC0yMzAsNiArMTkyLDgwIEBACiAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9hbGxfZGF0YShkYXRhKTsKIH0KIAorLyoqIENyZWF0ZSBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgc3RydWN0dXJlIGdpdmVuIGEgdGFibGVfZGF0YSBkZWZpbml0aW9uICovCituZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICoKK25ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0KGNvbnN0IGNoYXIgKnRhYmxlX25hbWUpCit7CisgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0KTsKKyAgICBpZiAoIXRhYmxlX3NldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdGFibGVfc2V0LT50YWJsZSA9IG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGEodGFibGVfbmFtZSk7CisgICAgcmV0dXJuIHRhYmxlX3NldDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFTEVURV9UQUJMRV9EQVRBX1NFVAordm9pZCBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQpCit7CisgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpwdHIsICpuZXh0OworICAgIG5ldHNubXBfdGFibGVfcm93ICpwcm93LCAqcG5leHRyb3c7CisKKyAgICBmb3IgKHB0ciA9IHRhYmxlX3NldC0+ZGVmYXVsdF9yb3c7IHB0cjsgcHRyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OworICAgICAgICBmcmVlKHB0cik7CisgICAgfQorICAgIHRhYmxlX3NldC0+ZGVmYXVsdF9yb3cgPSBOVUxMOworICAgIGZvciAocHJvdyA9IHRhYmxlX3NldC0+dGFibGUtPmZpcnN0X3JvdzsgcHJvdzsgcHJvdyA9IHBuZXh0cm93KSB7CisgICAgICAgIHBuZXh0cm93ID0gcHJvdy0+bmV4dDsKKyAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9zZXQsIHByb3cpOworICAgIH0KKyAgICB0YWJsZV9zZXQtPnRhYmxlLT5maXJzdF9yb3cgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUodGFibGVfc2V0LT50YWJsZSk7CisgICAgZnJlZSh0YWJsZV9zZXQpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1RBQkxFX0RBVEFfU0VUICovCisKKy8qKiBjbG9uZXMgYSBkYXRhc2V0IHJvdywgaW5jbHVkaW5nIGFsbCBkYXRhLiAqLworbmV0c25tcF90YWJsZV9yb3cgKgorbmV0c25tcF90YWJsZV9kYXRhX3NldF9jbG9uZV9yb3cobmV0c25tcF90YWJsZV9yb3cgKnJvdykKK3sKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKmRhdGEsICoqbmV3cm93ZGF0YTsKKyAgICBuZXRzbm1wX3RhYmxlX3JvdyAqbmV3cm93OworCisgICAgaWYgKCFyb3cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbmV3cm93ID0gbmV0c25tcF90YWJsZV9kYXRhX2Nsb25lX3Jvdyhyb3cpOworICAgIGlmICghbmV3cm93KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGRhdGEgPSAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICopIHJvdy0+ZGF0YTsKKworICAgIGlmIChkYXRhKSB7CisgICAgICAgIGZvciAobmV3cm93ZGF0YSA9CisgICAgICAgICAgICAgKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKikgJihuZXdyb3ctPmRhdGEpOyBkYXRhOworICAgICAgICAgICAgIG5ld3Jvd2RhdGEgPSAmKCgqbmV3cm93ZGF0YSktPm5leHQpLCBkYXRhID0gZGF0YS0+bmV4dCkgeworCisgICAgICAgICAgICAqbmV3cm93ZGF0YSA9IG5ldHNubXBfbWVtZHVwKGRhdGEsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSkpOworICAgICAgICAgICAgaWYgKCEqbmV3cm93ZGF0YSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfcm93KG5ld3Jvdyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkYXRhLT5kYXRhLnZvaWRwKSB7CisgICAgICAgICAgICAgICAgKCpuZXdyb3dkYXRhKS0+ZGF0YS52b2lkcCA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKGRhdGEtPmRhdGEudm9pZHAsIGRhdGEtPmRhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoISgqbmV3cm93ZGF0YSktPmRhdGEudm9pZHApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3cobmV3cm93KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXdyb3c7Cit9CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKiBEYXRhIFNldCBBUEk6IERlZmF1bHQgcm93IG9wZXJhdGlvbnMKQEAgLTI0OCw5ICsyODQsMTAgQEAKICAgICBmb3IgKDsgZGVmcm93OyBkZWZyb3cgPSBkZWZyb3ctPm5leHQpIHsKICAgICAgICAgbmV0c25tcF9zZXRfcm93X2NvbHVtbihyb3csIGRlZnJvdy0+Y29sdW1uLCBkZWZyb3ctPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmcm93LT5kYXRhLnZvaWRwLCBkZWZyb3ctPmRhdGFfbGVuKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmIChkZWZyb3ctPndyaXRhYmxlKQogICAgICAgICAgICAgbmV0c25tcF9tYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUocm93LCBkZWZyb3ctPmNvbHVtbiwgMSk7Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiByb3c7CiB9CkBAIC0yODgsNiArMzI1LDggQEAKICAgICB9CiAKICAgICBuZXdfY29sID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UpOworICAgIGlmIChuZXdfY29sID09IE5VTEwpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICBuZXdfY29sLT50eXBlID0gdHlwZTsKICAgICBuZXdfY29sLT53cml0YWJsZSA9IHdyaXRhYmxlOwogICAgIG5ld19jb2wtPmNvbHVtbiA9IGNvbHVtbjsKQEAgLTMyMywxNCArMzYyLDkgQEAKICAqICB0aGlzIGlzIGEgd3JhcHBlciBhcm91bmQgY2FsbGluZyBuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3cKICAqICByZXBlYXRlZGx5IGZvciB5b3UuCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TRVRfTVVMVElfQUREX0RFRkFVTFRfUk9XCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogbmV0c25tcF90YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRzZXQsIC4uLikKLSNlbHNlCi1uZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3codmFfZGNsCi0gICAgKQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAgICAgdW5zaWduZWQgaW50ICAgIGNvbHVtbjsKQEAgLTMzOCwxNCArMzcyLDcgQEAKICAgICB2b2lkICAgICAgICAgICAqZGF0YTsKICAgICBzaXplX3QgICAgICAgICAgZGF0YV9sZW47CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCB0c2V0KTsKLSNlbHNlCi0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldDsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdHNldCA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKik7Ci0jZW5kaWYKIAogICAgIHdoaWxlICgoY29sdW1uID0gdmFfYXJnKGRlYnVnYXJncywgdW5zaWduZWQgaW50KSkgIT0gMCkgewogICAgICAgICB0eXBlID0gdmFfYXJnKGRlYnVnYXJncywgaW50KTsKQEAgLTM1OCw3ICszODUsNyBAQAogCiAgICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1NFVF9NVUxUSV9BRERfREVGQVVMVF9ST1cgKi8KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKQEAgLTM5OCwxMSArNDI1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKmRhdGFfc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvKQogeworICAgIGludCByZXQ7CisKICAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGFsbG9jYXRlIHRoZSB0YWJsZSBpZiBvbmUgd2Fzbid0IGFsbG9jYXRlZCAKICAgICAgICAgICovCiAgICAgICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgICAgICBpZiAodGFibGVfaW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CiAKICAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvLT5pbmRleGVzICYmIGRhdGFfc2V0LT50YWJsZS0+aW5kZXhlc190ZW1wbGF0ZSkgewpAQCAtNDMzLDggKzQ2NCwxMSBAQAogCiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfdGFibGVfZGF0YV9zZXRfaGFuZGxlcihkYXRhX3NldCkpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEocmVnaW5mbywgZGF0YV9zZXQtPnRhYmxlLAorICAgIHJldCA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YShyZWdpbmZvLCBkYXRhX3NldC0+dGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvKTsKKyAgICBpZiAocmV0ID09IFNOTVBFUlJfU1VDQ0VTUyAmJiByZWdpbmZvLT5oYW5kbGVyKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKHJlZ2luZm8tPmhhbmRsZXItPm5leHQpOworICAgIHJldHVybiByZXQ7CiB9CiAKIG5ld3Jvd19zdGFzaCAgICoKQEAgLTQ0NiwxMSArNDgwLDE0IEBACiAgICAgbmV0c25tcF90YWJsZV9yb3cgKm5ld3JvdyAgID0gTlVMTDsKIAogICAgIG5ld3Jvd3N0YXNoID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXdyb3dfc3Rhc2gpOwotICAgIG5ld3Jvd3N0YXNoLT5jcmVhdGVkID0gMTsKLSAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2NyZWF0ZV9yb3dfZnJvbV9kZWZhdWx0cwotICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGF0YWJsZS0+ZGVmYXVsdF9yb3cpOwotICAgIG5ld3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZCh0YWJsZV9pbmZvLT5pbmRleGVzKTsKLSAgICBuZXdyb3dzdGFzaC0+bmV3cm93ID0gbmV3cm93OworCisgICAgaWYgKG5ld3Jvd3N0YXNoICE9IE5VTEwpIHsKKyAgICAgICAgbmV3cm93c3Rhc2gtPmNyZWF0ZWQgPSAxOworICAgICAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2NyZWF0ZV9yb3dfZnJvbV9kZWZhdWx0cworICAgICAgICAgICAgKGRhdGF0YWJsZS0+ZGVmYXVsdF9yb3cpOworICAgICAgICBuZXdyb3ctPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQodGFibGVfaW5mby0+aW5kZXhlcyk7CisgICAgICAgIG5ld3Jvd3N0YXNoLT5uZXdyb3cgPSBuZXdyb3c7CisgICAgfQogCiAgICAgcmV0dXJuIG5ld3Jvd3N0YXNoOwogfQpAQCAtNDY5LDggKzUwNiw2IEBACiAgICAgbmV0c25tcF90YWJsZV9yb3cgKnJvdywgKm5ld3JvdyA9IE5VTEw7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7Ci0gICAgb2lkICAgICAgICAgICAgKnN1ZmZpeDsKLSAgICBzaXplX3QgICAgICAgICAgc3VmZml4X2xlbjsKICAgICBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqc3Rhc2hwID0gTlVMTDsKIAogICAgIGlmICghaGFuZGxlcikKQEAgLTQ4MCw2ICs1MTUsMTEgQEAKICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YXRhYmxlID0KICAgICAgICAgICAgIChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICopIGhhbmRsZXItPm15dm9pZDsKKyAgICAgICAgY29uc3Qgb2lkICogY29uc3Qgc3VmZml4ID0KKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDI7CisgICAgICAgIGNvbnN0IHNpemVfdCBzdWZmaXhfbGVuID0KKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0gKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisKICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC00ODgsMTYgKzUyOCwxMCBAQAogICAgICAgICAgKi8KICAgICAgICAgcm93ID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX3JvdyhyZXF1ZXN0KTsKICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOwotICAgICAgICBzdWZmaXggPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lICsgcmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyOwotICAgICAgICBzdWZmaXhfbGVuID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLQotICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmIChNT0RFX0lTX1NFVChyZXFpbmZvLT5tb2RlKSkgewogCi0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOyAvKiBpcyB0aGlzIHJlYXNvbmFibGUgc2l6ZT8/ICovCi0gICAgICAgICAgICBpbnQgIHJjOwotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHVzZSBhIGNhY2hlZCBjb3B5IG9mIHRoZSByb3cgZm9yIG1vZGlmaWNhdGlvbiAKICAgICAgICAgICAgICAqLwpAQCAtNTA2LDMwICs1NDAsMTYgQEAKICAgICAgICAgICAgICAqIGNhY2hlIGxvY2F0aW9uOiBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYWxyZWFkeSBieSBvdGhlcgogICAgICAgICAgICAgICogU0VUIHJlcXVlc3RzIGluIHRoZSBzYW1lIG1hc3RlciByZXF1ZXN0LiAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmMgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZGF0YXNldF9yb3dfc3Rhc2g6JXM6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7Ci0gICAgICAgICAgICBpZiAoKC0xID09IHJjKSB8fCAocmMgPj0gc2l6ZW9mKGJ1ZikpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiJXMgaGFuZGxlciBuYW1lIHRvbyBsb25nXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0YWJsZS0+dGFibGUtPm5hbWUpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICBzdGFzaHAgPSBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X29yX2NyZWF0ZV9zdGFzaChyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mbyk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBzdGFzaHApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX0dFTkVSUik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW4gPSBzaXplb2YoYnVmKSAtIHJjOwotICAgICAgICAgICAgcmMgPSBzbnByaW50X29iamlkKCZidWZbcmNdLCBsZW4sIHRhYmxlX2luZm8tPmluZGV4X29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5pbmRleF9vaWRfbGVuKTsKLSAgICAgICAgICAgIGlmICgtMSA9PSByYykgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzIG9pZCBvciBuYW1lIHRvbyBsb25nXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0YWJsZS0+dGFibGUtPm5hbWUpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFzaHAgPSAobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKikKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2dldF9vcl9jcmVhdGVfcm93X3N0YXNoKHJlcWluZm8sIGJ1Zik7CiAKICAgICAgICAgICAgIG5ld3Jvd3N0YXNoCi0gICAgICAgICAgICAgICAgPSBuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YSgqc3Rhc2hwLCBzdWZmaXgsIHN1ZmZpeF9sZW4pOworICAgICAgICAgICAgICAgID0gKG5ld3Jvd19zdGFzaCopbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEoKnN0YXNocCwgc3VmZml4LCBzdWZmaXhfbGVuKTsKIAogICAgICAgICAgICAgaWYgKCFuZXdyb3dzdGFzaCkgewogICAgICAgICAgICAgICAgIGlmICghcm93KSB7CkBAIC01NTcsNiArNTc3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAqIGV4aXN0aW5nIHJvdyB0aGF0IG5lZWRzIHRvIGJlIG1vZGlmaWVkIAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbmV3cm93c3Rhc2ggPSBTTk1QX01BTExPQ19UWVBFREVGKG5ld3Jvd19zdGFzaCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdyb3dzdGFzaCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3Jvdyhyb3cpOwogICAgICAgICAgICAgICAgICAgICBuZXdyb3dzdGFzaC0+bmV3cm93ID0gbmV3cm93OwogICAgICAgICAgICAgICAgIH0KQEAgLTU3MywxMiArNTk4LDE3IEBACiAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMikKICAgICAgICAgICAgICAgICByb3cgPSBuZXdyb3c7CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICBpZiAocm93KQogICAgICAgICAgICAgZGF0YSA9IChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKikgcm93LT5kYXRhOwogCiAgICAgICAgIGlmICghcm93IHx8ICF0YWJsZV9pbmZvIHx8ICFkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIU1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpIHx8ICF0YWJsZV9pbmZvKSB7CisgICAgICAgICAgICBpZiAoIXRhYmxlX2luZm8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgICAgICAgICAgfHwgIU1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTkyLDkgKzYyMiwxMCBAQAogICAgICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgY2FzZSBNT0RFX0dFVEJVTEs6ICAgICAvKiBYWFhXV1cgKi8KLSAgICAgICAgICAgIGlmICghZGF0YSB8fCBkYXRhLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpCi0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSElOU1RBTkNFKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghZGF0YSB8fCBkYXRhLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBOb3RlOiBkYXRhLT5kYXRhLnZvaWRwIGNhbiBiZSBOVUxMLCBlLmcuIHdoZW4gYSB6ZXJvLWxlbmd0aAogICAgICAgICAgICAgICAgICAqIG9jdGV0IHN0cmluZyBoYXMgYmVlbiBzdG9yZWQgaW4gdGhlIHRhYmxlIGNhY2hlLgpAQCAtNjAzLDEwICs2MzQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmNvbG51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5kYXRhLnZvaWRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciopZGF0YS0+ZGF0YS52b2lkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRhdGFfbGVuKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgICAvKgpAQCAtNzk3LDkgKzgzMCw5IEBACiAgICAgCQkgICAgZm9yIChyZXEgPSByZXF1ZXN0czsgcmVxOyByZXE9cmVxLT5uZXh0KSB7CiAgICAgICAgIAogCQkgICAgCS8qCi0gICAgICAgICAJCQkqIEZvciByZXF1ZXN0cyB0aGF0IGhhdmUgdGhlIG9sZCByb3cgdmFsdWVzLAotICAgICAgICAgCQkJKiBzbyBhZGQgdGhlIG5ld2x5LWNyZWF0ZWQgcm93IGluZm9ybWF0aW9uLgotICAgICAgICAgCSAgICAJKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIEZvciByZXF1ZXN0cyB0aGF0IGhhdmUgdGhlIG9sZCByb3cgdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICogc28gYWRkIHRoZSBuZXdseS1jcmVhdGVkIHJvdyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAJICAgIAlpZiAoKG5ldHNubXBfdGFibGVfcm93ICopIG5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3cocmVxKSA9PSByb3cpIHsKIAkgICAgCQkJbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEocmVxLCBUQUJMRV9EQVRBX1JPVyk7CiAgICAgICAgICAgICAJCQluZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXEsCkBAIC04MjMsNiArODU2LDEyIEBACiAJCW5ld3JvdyA9IE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9kYXRhc2V0OiB1bmtub3duIG1vZGUgcGFzc2VkIGludG8gdGhlIGhhbmRsZXJcbiIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtODQzLDE4ICs4ODIsMTkgQEAKIC8qKgogICogZXh0cmFjdHMgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHBvaW50ZXIgZnJvbSBhIGdpdmVuIHJlcXVlc3QKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfU0VUX0NPTFVNTgogbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoKIG5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldF9jb2x1bW4obmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbHVtbikKIHsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKmRhdGEgPQotICAgICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93X2RhdGEoIHJlcXVlc3QgKTsKKyAgICAgICAgKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSopbmV0c25tcF9leHRyYWN0X3RhYmxlX3Jvd19kYXRhKCByZXF1ZXN0ICk7CiAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgZGF0YSA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfZmluZF9jb2x1bW4oZGF0YSwgY29sdW1uKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGE7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfU0VUX0NPTFVNTiAqLwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgpAQCAtODgyLDkgKzkyMiwyMyBAQAogICAgIGlmICghcmVnaXN0cmF0aW9uX25hbWUpIHsKICAgICAgICAgcmVnaXN0cmF0aW9uX25hbWUgPSB0YWJsZV9zZXQtPnRhYmxlLT5uYW1lOwogICAgIH0KLSAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEoJmF1dG9fdGFibGVzLCBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QocmVnaXN0cmF0aW9uX25hbWUsIHRhYmxlcywgTlVMTCkpOyAgICAgLyogWFhYICovCisgICAgbmV0c25tcF9hZGRfbGlzdF9kYXRhKCZhdXRvX3RhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KHJlZ2lzdHJhdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzLCBmcmVlKSk7ICAgICAvKiBYWFggKi8KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVRfVU5SRUdJU1RFUl9BVVRPX0RBVEFfVEFCTEUKKy8qKiBVbmRvIHRoZSBlZmZlY3Qgb2YgbmV0c25tcF9yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUoKS4KKyAqLwordm9pZAorbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZShuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQsCisJCQkJICAgY2hhciAqcmVnaXN0cmF0aW9uX25hbWUpCit7CisgICAgbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZhdXRvX3RhYmxlcywgcmVnaXN0cmF0aW9uX25hbWUKKwkJCSAgICAgPyByZWdpc3RyYXRpb25fbmFtZSA6IHRhYmxlX3NldC0+dGFibGUtPm5hbWUpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9VTlJFR0lTVEVSX0FVVE9fREFUQV9UQUJMRSAqLworCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogc3RhdGljIHZvaWQKIF90YWJsZV9zZXRfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0LCBzdHJ1Y3QgdHJlZSAqdHApCkBAIC0xMDEyLDcgKzEwNjYsNyBAQAogICAgICAgICBzdHJ1Y3QgdHJlZSAgICAqdHAyOwogICAgIAogICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKHRwLT5hdWdtZW50cywgbmFtZSwgJm5hbWVfbGVuZ3RoKSkgewotICAgICAgICAgICAgY29uZmlnX3B3YXJuKCJJIGNhbid0IHBhcnNlIHRoZSBhdWdtZW50IHRhYmVsIG5hbWUiKTsKKyAgICAgICAgICAgIGNvbmZpZ19wd2FybigiSSBjYW4ndCBwYXJzZSB0aGUgYXVnbWVudCB0YWJsZSBuYW1lIik7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIiAgY2FuJ3QgcGFyc2UgJXNcbiIsIHRwLT5hdWdtZW50cyk7CiAgICAgICAgICAgICBTTk1QX0ZSRUUgKHRhYmxlX3NldCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDQ0LDcgKzEwOTgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX3NldF9hZGRfdGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGNvbHVtbiAlcyglZCkgb2YgdHlwZSAlZCAoYWNjZXNzICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgImFkZGluZyBjb2x1bW4gJXMoJWxkKSBvZiB0eXBlICVkIChhY2Nlc3MgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICB0cC0+bGFiZWwsIHRwLT5zdWJpZCwgdHlwZSwgdHAtPmFjY2VzcykpOwogCiAgICAgICAgIHN3aXRjaCAodHAtPmFjY2VzcykgewpAQCAtMTA1Nyw3ICsxMTExLDcgQEAKICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCiAgICAgICAgIGNhc2UgTUlCX0FDQ0VTU19SRUFET05MWToKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZV9zZXRfYWRkX3RhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhZGRpbmcgY29sdW1uICVkIG9mIHR5cGUgJWRcbiIsIHRwLT5zdWJpZCwgdHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgImFkZGluZyBjb2x1bW4gJWxkIG9mIHR5cGUgJWRcbiIsIHRwLT5zdWJpZCwgdHlwZSkpOwogICAgICAgICAgICAgbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93KHRhYmxlX3NldCwgdHAtPnN1YmlkLCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbndyaXRlLCBOVUxMLCAwKTsKICAgICAgICAgICAgIG1pbmNvbCA9IFNOTVBfTUlOKG1pbmNvbCwgdHAtPnN1YmlkKTsKQEAgLTExMDAsNyArMTE1NCw3IEBACiAgICAgbmV0c25tcF90YWJsZV9yb3cgKnJvdzsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKmRyOwogCi0gICAgbGluZSA9IGNvcHlfbndvcmQobGluZSwgdG5hbWUsIFNOTVBfTUFYQlVGX01FRElVTSk7CisgICAgbGluZSA9IGNvcHlfbndvcmQobGluZSwgdG5hbWUsIHNpemVvZih0bmFtZSkpOwogCiAgICAgdGFibGVzID0gKGRhdGFfc2V0X3RhYmxlcyAqKSBuZXRzbm1wX2dldF9saXN0X2RhdGEoYXV0b190YWJsZXMsIHRuYW1lKTsKICAgICBpZiAoIXRhYmxlcykgewpAQCAtMTEyMyw3ICsxMTc3LDcgQEAKIAogICAgICAgICBERUJVR01TR1RMKCgidGFibGVfc2V0X2FkZF9yb3ciLCAiYWRkaW5nIGluZGV4IG9mIHR5cGUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZiLT50eXBlKSk7Ci0gICAgICAgIGJ1Zl9zaXplID0gU05NUF9NQVhCVUZfTUVESVVNOworICAgICAgICBidWZfc2l6ZSA9IHNpemVvZihidWYpOwogICAgICAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9tZW1vcnkodmItPnR5cGUsIGxpbmUsIGJ1ZiwgJmJ1Zl9zaXplKTsKICAgICAgICAgbmV0c25tcF90YWJsZV9yb3dfYWRkX2luZGV4KHJvdywgdmItPnR5cGUsIGJ1ZiwgYnVmX3NpemUpOwogICAgIH0KQEAgLTExNDEsMTQgKzExOTUsMTYgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGJ1Zl9zaXplID0gU05NUF9NQVhCVUZfTUVESVVNOworICAgICAgICBidWZfc2l6ZSA9IHNpemVvZihidWYpOwogICAgICAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9tZW1vcnkoZHItPnR5cGUsIGxpbmUsIGJ1ZiwgJmJ1Zl9zaXplKTsKICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX3NldF9hZGRfcm93IiwKICAgICAgICAgICAgICAgICAgICAgImFkZGluZyBkYXRhIGF0IGNvbHVtbiAlZCBvZiB0eXBlICVkXG4iLCBkci0+Y29sdW1uLAogICAgICAgICAgICAgICAgICAgICBkci0+dHlwZSkpOwogICAgICAgICBuZXRzbm1wX3NldF9yb3dfY29sdW1uKHJvdywgZHItPmNvbHVtbiwgZHItPnR5cGUsIGJ1ZiwgYnVmX3NpemUpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKGRyLT53cml0YWJsZSkKICAgICAgICAgICAgIG5ldHNubXBfbWFya19yb3dfY29sdW1uX3dyaXRhYmxlKHJvdywgZHItPmNvbHVtbiwgMSk7ICAgICAgIC8qIG1ha2Ugd3JpdGFibGUgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJjID0gbmV0c25tcF90YWJsZV9kYXRhX2FkZF9yb3codGFibGVzLT50YWJsZV9zZXQtPnRhYmxlLCByb3cpOwogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpIHsKQEAgLTExNjEsNiArMTIxNyw2NCBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqCituZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X29yX2NyZWF0ZV9zdGFzaChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKmRhdGF0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvKQoreworICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipzdGFzaHAgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICBidWZbMjU2XTsgLyogaXMgdGhpcyByZWFzb25hYmxlIHNpemU/PyAqLworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICBsZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIHJjOworCisgICAgcmMgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZGF0YXNldF9yb3dfc3Rhc2g6JXM6IiwKKyAgICAgICAgICAgICAgICAgIGRhdGF0YWJsZS0+dGFibGUtPm5hbWUpOworICAgIGlmICgoLTEgPT0gcmMpIHx8ICgoc2l6ZV90KXJjID49IHNpemVvZihidWYpKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIlcyBoYW5kbGVyIG5hbWUgdG9vIGxvbmdcbiIsIGRhdGF0YWJsZS0+dGFibGUtPm5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBsZW4gPSBzaXplb2YoYnVmKSAtIHJjOworICAgIHJjID0gc25wcmludF9vYmppZCgmYnVmW3JjXSwgbGVuLCB0YWJsZV9pbmZvLT5pbmRleF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4X29pZF9sZW4pOworICAgIGlmICgtMSA9PSByYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIlcyBvaWQgb3IgbmFtZSB0b28gbG9uZ1xuIiwgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXNocCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKQorICAgICAgICBuZXRzbm1wX3RhYmxlX2dldF9vcl9jcmVhdGVfcm93X3N0YXNoKHJlcWluZm8sICh1X2NoYXIgKikgYnVmKTsKKyAgICByZXR1cm4gc3Rhc2hwOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9HRVRfTkVXUk9XCituZXRzbm1wX3RhYmxlX3JvdyAqCituZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X25ld3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvb3RvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8pCit7CisgICAgb2lkICogY29uc3Qgc3VmZml4ID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lICsgcm9vdG9pZF9sZW4gKyAyOworICAgIHNpemVfdCBzdWZmaXhfbGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtIChyb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipzdGFzaHA7CisgICAgbmV3cm93X3N0YXNoICAgKm5ld3Jvd3N0YXNoOworCisgICAgc3Rhc2hwID0gbmV0c25tcF90YWJsZV9kYXRhc2V0X2dldF9vcl9jcmVhdGVfc3Rhc2gocmVxaW5mbywgZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8pOworICAgIGlmIChOVUxMID09IHN0YXNocCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXdyb3dzdGFzaCA9IChuZXdyb3dfc3Rhc2gqKW5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhKCpzdGFzaHAsIHN1ZmZpeCwgc3VmZml4X2xlbik7CisgICAgaWYgKE5VTEwgPT0gbmV3cm93c3Rhc2gpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIG5ld3Jvd3N0YXNoLT5uZXdyb3c7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX0dFVF9ORVdST1cgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKICAqIERhdGEgU2V0IEFQSTogUm93IG9wZXJhdGlvbnMKQEAgLTEyMDgsNiArMTMyMiw3IEBACiAgICAgcmV0dXJuIHN0YXJ0OwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogLyoqCiAgKiBtYXJrcyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyBhcyB3cml0YWJsZSBvciBub3QuCiAgKi8KQEAgLTEyMzQsMTcgKzEzNDksMzQgQEAKICAgICAgICAgfQogICAgICAgICBkYXRhLT5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgIGRhdGEtPndyaXRhYmxlID0gd3JpdGFibGU7Ci0gICAgICAgIGRhdGEtPm5leHQgPSByb3ctPmRhdGE7CisgICAgICAgIGRhdGEtPm5leHQgPSAoc3RydWN0IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZV9zKilyb3ctPmRhdGE7CiAgICAgICAgIHJvdy0+ZGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGF0YS0+d3JpdGFibGUgPSB3cml0YWJsZTsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoqCi0gKiBzZXRzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IHdpdGggZGF0YSBnaXZlbiBhIHR5cGUsIHZhbHVlLCBhbmQKLSAqIGxlbmd0aC4gIERhdGEgaXMgbWVtZHVwJ2VkIGJ5IHRoZSBmdW5jdGlvbi4KKyAqIFNldHMgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgd2l0aCBkYXRhIGdpdmVuIGEgdHlwZSwgdmFsdWUsCisgKiBhbmQgbGVuZ3RoLiBEYXRhIGlzIG1lbWR1cCdlZCBieSB0aGUgZnVuY3Rpb24sIGF0IGxlYXN0IGlmCisgKiB0eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UgYW5kIGlmIHZhbHVlX2xlbiA+IDAuCisgKgorICogQHBhcmFtW2luXSByb3cgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtW2luXSBjb2x1bW4gICAgSW5kZXggb2YgdGhlIGNvbHVtbiB0byBiZSBtb2RpZmllZC4KKyAqIEBwYXJhbVtpbl0gdHlwZSAgICAgIEVpdGhlciB0aGUgQVNOIHR5cGUgb2YgdGhlIHZhbHVlIHRvIGJlIHNldCBvcgorICogICBTTk1QX05PU1VDSElOU1RBTkNFLgorICogQHBhcmFtW2luXSB2YWx1ZSAgICAgSWYgdHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFLCBwb2ludGVyIHRvIHRoZQorICogICBuZXcgdmFsdWUuIE1heSBiZSBOVUxMIGlmIHZhbHVlX2xlbiA9PSAwLCBlLmcuIHdoZW4gc3RvcmluZyBhCisgKiAgIHplcm8tbGVuZ3RoIG9jdGV0IHN0cmluZy4gSWdub3JlZCB3aGVuIHR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRS4KKyAqIEBwYXJhbVtpbl0gdmFsdWVfbGVuIElmIHR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRSwgbnVtYmVyIG9mIGJ5dGVzCisgKiAgIG9jY3VwaWVkIGJ5ICp2YWx1ZS4gSWdub3JlZCB3aGVuIHR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRS4KKyAqCisgKiBAcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyB1cG9uIHN1Y2Nlc3M7IFNOTVBFUlJfTUFMTE9DIHdoZW4gb3V0IG9mIG1lbW9yeTsKKyAqICAgb3IgU05NUEVSUl9HRU5FUlIgd2hlbiByb3cgPT0gMCBvciB3aGVuIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIGRhdGF0eXBlCisgKiAgIG9mIHRoZSBkYXRhIHN0b3JlZCBpbiAqcm93LiAKKyAqCiAgKi8KIGludAogbmV0c25tcF9zZXRfcm93X2NvbHVtbihuZXRzbm1wX3RhYmxlX3JvdyAqcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uLApAQCAtMTI3MCwyOSArMTQwMiwzNiBAQAogCiAgICAgICAgIGRhdGEtPmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICAgZGF0YS0+dHlwZSA9IHR5cGU7Ci0gICAgICAgIGRhdGEtPm5leHQgPSByb3ctPmRhdGE7CisgICAgICAgIGRhdGEtPm5leHQgPSAoc3RydWN0IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZV9zKilyb3ctPmRhdGE7CiAgICAgICAgIHJvdy0+ZGF0YSA9IGRhdGE7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGlmIChkYXRhLT50eXBlICE9IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgLyogVHJhbnNpdGlvbnMgZnJvbSAvIHRvIFNOTVBfTk9TVUNISU5TVEFOQ0UgYXJlIGFsbG93ZWQsIGJ1dCBubyBvdGhlciB0cmFuc2l0aW9ucy4gKi8KKyAgICBpZiAoZGF0YS0+dHlwZSAhPSB0eXBlICYmIGRhdGEtPnR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRQorICAgICAgICAmJiB0eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIAotICAgICAgICBTTk1QX0ZSRUUoZGF0YS0+ZGF0YS52b2lkcCk7Ci0gICAgICAgIGlmICh2YWx1ZV9sZW4pIHsKLSAgICAgICAgICAgIGRhdGEtPmRhdGEuc3RyaW5nID0gbmV0c25tcF9tZW1kdXAodmFsdWUsICh2YWx1ZV9sZW4pKTsKLSAgICAgICAgICAgIGlmICghZGF0YS0+ZGF0YS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfQ1JJVCwgIm5vIG1lbW9yeSBpbiBuZXRzbm1wX3NldF9yb3dfY29sdW1uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfTUFMTE9DOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGF0YS0+ZGF0YS5zdHJpbmcgPSBtYWxsb2MoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YS0+ZGF0YV9sZW4gPSB2YWx1ZV9sZW47CisgICAgLyogUmV0dXJuIG5vdyBpZiBuZWl0aGVyIHRoZSB0eXBlIG5vciB0aGUgZGF0YSBpdHNlbGYgaGFzIGJlZW4gbW9kaWZpZWQuICovCisgICAgaWYgKGRhdGEtPnR5cGUgPT0gdHlwZSAmJiBkYXRhLT5kYXRhX2xlbiA9PSB2YWx1ZV9sZW4KKyAgICAgICAgJiYgKHZhbHVlID09IE5VTEwgfHwgbWVtY21wKCZkYXRhLT5kYXRhLnN0cmluZywgdmFsdWUsIHZhbHVlX2xlbikgPT0gMCkpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgLyogUmVhbGxvY2F0ZSBtZW1vcnkgYW5kIHN0b3JlIHRoZSBuZXcgdmFsdWUuICovCisgICAgZGF0YS0+ZGF0YS52b2lkcCA9IHJlYWxsb2MoZGF0YS0+ZGF0YS52b2lkcCwgdmFsdWUgPyB2YWx1ZV9sZW4gOiAwKTsKKyAgICBpZiAodmFsdWUgJiYgdmFsdWVfbGVuICYmICFkYXRhLT5kYXRhLnZvaWRwKSB7CisgICAgICAgIGRhdGEtPmRhdGFfbGVuID0gMDsKKyAgICAgICAgZGF0YS0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgIHNubXBfbG9nKExPR19DUklULCAibm8gbWVtb3J5IGluIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4iKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfTUFMTE9DOwogICAgIH0KKyAgICBpZiAodmFsdWUgJiYgdmFsdWVfbGVuKQorICAgICAgICBtZW1jcHkoZGF0YS0+ZGF0YS5zdHJpbmcsIHZhbHVlLCB2YWx1ZV9sZW4pOworICAgIGRhdGEtPnR5cGUgPSB0eXBlOworICAgIGRhdGEtPmRhdGFfbGVuID0gdmFsdWVfbGVuOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKICAqIERhdGEgU2V0IEFQSTogSW5kZXggb3BlcmF0aW9ucwpAQCAtMTMxMCwzMyArMTQ0OSwyNiBAQAogCiAvKiogYWRkcyBtdWx0aXBsZSBpbmRleGVzIHRvIGEgdGFibGVfZGF0YXNldCBoZWxwZXIgb2JqZWN0LgogICogIFRvIGVuZCB0aGUgbGlzdCwgdXNlIGEgMCBhZnRlciB0aGUgbGlzdCBvZiBBU04gaW5kZXggdHlwZXMuICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfU0VUX0FERF9JTkRFWEVTCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogbmV0c25tcF90YWJsZV9zZXRfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKLSNlbHNlCi1uZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlcyh2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKICAgICB2YV9saXN0ICAgICAgICAgZGVidWdhcmdzOwogICAgIGludCAgICAgICAgICAgICB0eXBlOwogCi0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZhX3N0YXJ0KGRlYnVnYXJncywgdHNldCk7Ci0jZWxzZQotICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRzZXQ7Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRzZXQgPSB2YV9hcmcoZGVidWdhcmdzLCBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICopOwotI2VuZGlmCiAKICAgICBpZiAodHNldCkKICAgICAgICAgd2hpbGUgKCh0eXBlID0gdmFfYXJnKGRlYnVnYXJncywgaW50KSkgIT0gMCkKLSAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9hZGRfaW5kZXgodHNldC0+dGFibGUsIHR5cGUpOworICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX2FkZF9pbmRleCh0c2V0LT50YWJsZSwgKHVfY2hhcil0eXBlKTsKIAogICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfU0VUX0FERF9JTkRFWEVTICovCiAKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh0YWJsZV9kYXRhc2V0KTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVQgKi8KIC8qKiBAfSAKICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jIGIvYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jCmluZGV4IGU3NzQyZWQuLjhlZDVjZDAgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYworKysgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMKQEAgLTg0LDIwICs4NCwzNCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+CisKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZWxzZQogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfaXRlcmF0b3JfaW5zZXJ0X2NvbnRleHQsIHRhYmxlX2l0ZXJhdG9yX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9jcmVhdGVfdGFibGUsIHRhYmxlX2l0ZXJhdG9yX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9yb3dfZmlyc3QsIHRhYmxlX2l0ZXJhdG9yX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9yb3dfY291bnQsIHRhYmxlX2l0ZXJhdG9yX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NUQVNIX0NBQ0hFCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRhX2xpc3RfZ2V0X2xpc3Rfbm9kZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9hZGRfZGF0YSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TVEFTSF9DQUNIRSAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogSXRlcmF0b3IgQVBJOiBUYWJsZSBtYWludGVuYW5jZQpAQCAtMTE2LDYgKzEzMCw3IEBACiAgICAgICoKICAgICAgKiBUaW1lIHdpbGwgc2hvdyB3aGV0aGVyIHRoaXMgaXMgYSBzZW5zaWJsZSBhcHByb2FjaCBvciBub3QuCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfQ1JFQVRFX1RBQkxFCiBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKgogbmV0c25tcF9pdGVyYXRvcl9jcmVhdGVfdGFibGUoIE5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAqZmlyc3REUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05leHRfRGF0YV9Qb2ludCAgKm5leHREUCwKQEAgLTEzNiw3ICsxNTEsOSBAQAogCiAgICAgcmV0dXJuIGlpbmZvOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfQ1JFQVRFX1RBQkxFICovCiAKKy8qKiBGcmVlIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciBhIHRhYmxlIGl0ZXJhdG9yLiAqLwogdm9pZAogbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGUoIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8gKQogewpAQCAtMTQ3LDYgKzE2NCw3IEBACiAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKCBpaW5mby0+aW5kZXhlcyApOwogICAgICAgICBpaW5mby0+aW5kZXhlcyA9IE5VTEw7CiAgICAgfQorICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZShpaW5mby0+dGFibGVfcmVnaW5mbyk7CiAgICAgU05NUF9GUkVFKCBpaW5mbyApOwogfQogCkBAIC0xNjQsNyArMTgyLDM3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCi0vKiogcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyICovCitzdGF0aWMgbmV0c25tcF9pdGVyYXRvcl9pbmZvICoKK25ldHNubXBfaXRlcmF0b3JfcmVmKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pCit7CisgICAgaWluZm8tPnJlZmNudCsrOworICAgIHJldHVybiBpaW5mbzsKK30KKworc3RhdGljIHZvaWQKK25ldHNubXBfaXRlcmF0b3JfZGVyZWYobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbykKK3sKKyAgICBpZiAoLS1paW5mby0+cmVmY250ID09IDApCisgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlKGlpbmZvKTsKK30KKwordm9pZCBuZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKG5ldHNubXBfbWliX2hhbmRsZXIgKmgpCit7CisgICAgbmV0c25tcF9hc3NlcnQoaCk7CisgICAgbmV0c25tcF9hc3NlcnQoaC0+bXl2b2lkKTsKKyAgICAoKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqKShoLT5teXZvaWQpKS0+cmVmY250Kys7CisgICAgaC0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2l0ZXJhdG9yX3JlZjsKKyAgICBoLT5kYXRhX2ZyZWUgID0gKHZvaWQoKikodm9pZCAqKSluZXRzbm1wX2l0ZXJhdG9yX2RlcmVmOworfQorCisvKioKKyAqIFJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlci4KKyAqCisgKiBUaGUgY2FsbGVyIHJlbWFpbnMgdGhlIG93bmVyIG9mIHRoZSBpdGVyYXRvciBpbmZvcm1hdGlvbiBvYmplY3QgaWYKKyAqIHRoZSBmbGFnIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPIGhhcyBub3QgYmVlbiBzZXQsIGFuZCB0aGUgY3JlYXRlZAorICogaGFuZGxlciBiZWNvbWVzIHRoZSBvd25lciBvZiB0aGUgaXRlcmF0b3IgaW5mb3JtYXRpb24gaWYgdGhlIGZsYWcKKyAqIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPIGhhcyBiZWVuIHNldC4KKyAqLwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pCiB7CkBAIC0xODEsNiArMjI5LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBtZS0+bXl2b2lkID0gaWluZm87CisgICAgaWYgKGlpbmZvLT5mbGFncyAmIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKG1lKTsKICAgICByZXR1cm4gbWU7CiB9CiAKQEAgLTE5NCw3ICsyNDQsMTEgQEAKICAqCiAgKiBAcGFyYW0gcmVnaW5mbyBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdAogICoKLSAqIEBwYXJhbSBpaW5mbyBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gc3RydWN0CisgKiBAcGFyYW0gaWluZm8gQSBwb2ludGVyIHRvIGEgbmV0c25tcF9pdGVyYXRvcl9pbmZvIHN0cnVjdC4gSWYgdGhlIGZsYWcKKyAqIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPIGlzIG5vdCBzZXQgaW4gaWluZm8tPmZsYWdzLCB0aGUgY2FsbGVyIHJlbWFpbnMKKyAqIHRoZSBvd25lciBvZiB0aGlzIHN0cnVjdHVyZS4gQW5kIGlmIHRoZSBmbGFnIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPIGlzCisgKiBzZXQgaW4gaWluZm8tPmZsYWdzLCBvd25lcnNoaXAgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlCisgKiBoYW5kbGVyLgogICoKICAqIEByZXR1cm4gTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLgogICoJRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVELCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4KQEAgLTIwNSw3ICsyNTksOSBAQAogbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKQogeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgcmVnaW5mby0+bW9kZXMgfD0gSEFORExFUl9DQU5fU1RBU0g7CisjZW5kaWYgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyKGlpbmZvKSk7CiAgICAgaWYgKCFpaW5mbykKQEAgLTIzNiw2ICsyOTIsNyBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9JVEVSQVRPUl9OQU1FKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX0lOU0VSVF9DT05URVhUCiAvKiogaW5zZXJ0cyB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZvciBhIG5ld2x5CiAgKiAgY3JlYXRlZCByb3cgaW50byBhIHJlcXVlc3QgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKQEAgLTMwMCw2ICszNTcsNyBAQAogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfSU5TRVJUX0NPTlRFWFQgKi8KIAogI2RlZmluZSBUSV9SRVFVRVNUX0NBQ0hFICJ0aV9jYWNoZSIKIApAQCAtMzE0LDcgKzM3Miw3IEBACiAKIHN0YXRpYyB2b2lkCiBuZXRzbm1wX2ZyZWVfdGlfY2FjaGUodm9pZCAqaXQpIHsKLSAgICB0aV9jYWNoZV9pbmZvICpiZWVyID0gaXQ7CisgICAgdGlfY2FjaGVfaW5mbyAqYmVlciA9ICh0aV9jYWNoZV9pbmZvKilpdDsKICAgICBpZiAoIWl0KSByZXR1cm47CiAgICAgaWYgKGJlZXItPmRhdGFfY29udGV4dCAmJiBiZWVyLT5mcmVlX2NvbnRleHQpIHsKICAgICAgICAgICAgIChiZWVyLT5mcmVlX2NvbnRleHQpKGJlZXItPmRhdGFfY29udGV4dCwgYmVlci0+aWluZm8pOwpAQCAtMzQwLDExICszOTgsMTMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBleHRyYWN0IGV4aXN0aW5nIGNhY2hlZCBzdGF0ZSAqLwotICAgIHRpX2luZm8gPSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUSV9SRVFVRVNUX0NBQ0hFKTsKKyAgICB0aV9pbmZvID0gKHRpX2NhY2hlX2luZm8qKW5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRJX1JFUVVFU1RfQ0FDSEUpOwogCiAgICAgLyogbm8gZXhpc3RpbmcgY2FjaGVkIHN0YXRlLiAgbWFrZSBhIG5ldyBvbmUuICovCiAgICAgaWYgKCF0aV9pbmZvKSB7CiAgICAgICAgIHRpX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKHRpX2NhY2hlX2luZm8pOworICAgICAgICBpZiAodGlfaW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVElfUkVRVUVTVF9DQUNIRSwKQEAgLTQwMCwxNSArNDYwLDE3IEBACiAgICAgdm9pZCAgICAgICAgICAgKmNhbGxiYWNrX2RhdGFfY29udGV4dCA9IE5VTEw7CiAgICAgdGlfY2FjaGVfaW5mbyAgKnRpX2luZm8gPSBOVUxMOwogICAgIGludCAgICAgICAgICAgICByZXF1ZXN0X2NvdW50ID0gMDsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRQogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipjaW5mbyA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpvbGRfaW5kZXhlcyA9IE5VTEwsICp2YjsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9yZWdfaW5mbyA9IE5VTEw7CiAgICAgaW50IGk7CiAgICAgbmV0c25tcF9kYXRhX2xpc3QgICAgKmxkYXRhID0gTlVMTDsKLSAgICAKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFICovCisKICAgICBpaW5mbyA9IChuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKikgaGFuZGxlci0+bXl2b2lkOwogICAgIGlmICghaWluZm8gfHwgIXJlZ2luZm8gfHwgIXJlcWluZm8pCi0gICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKIAogICAgIHRibF9pbmZvID0gaWluZm8tPnRhYmxlX3JlZ2luZm87CiAKQEAgLTQzMSwxMiArNDkzLDE1IEBACiAKICAgICAvKiBwcmVsaW1pbmFyeSBhbmFseXNpcyAqLwogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgY2FzZSBNT0RFX0dFVF9TVEFTSDoKICAgICAgICAgY2luZm8gPSBuZXRzbm1wX2V4dHJhY3Rfc3Rhc2hfY2FjaGUocmVxaW5mbyk7CiAgICAgICAgIHRhYmxlX3JlZ19pbmZvID0gbmV0c25tcF9maW5kX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKHJlZ2luZm8pOwogCiAgICAgICAgIC8qIFhYWDogbW92ZSB0aGlzIG1hbGxvYyB0byBzdGFzaF9jYWNoZSBoYW5kbGVyPyAqLwogICAgICAgICByZXF0bXAgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcmVxdWVzdF9pbmZvKTsKKyAgICAgICAgaWYgKHJlcXRtcCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgcmVxdG1wLT5zdWJ0cmVlID0gcmVxdWVzdHMtPnN1YnRyZWU7CiAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXRtcCwKQEAgLTQ0NywxMiArNTEyLDIxIEBACiAgICAgICAgIC8qIHJlbWVtYmVyIHRoZSBpbmRleGVzIHRoYXQgd2VyZSBvcmlnaW5hbGx5IHBhcnNlZC4gKi8KICAgICAgICAgb2xkX2luZGV4ZXMgPSB0YWJsZV9pbmZvLT5pbmRleGVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFICovCiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgZm9yKHJlcXVlc3QgPSByZXF1ZXN0cyA7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKHRhYmxlX2luZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0YWJsZV9pbmZvLT5jb2xudW0gPCB0YmxfaW5mby0+bWluX2NvbHVtbiAtIDEpIHsKICAgICAgICAgICAgICAgICAvKiBYWFg6IG9wdGltaXplIGJldHRlciB0aGFuIHRoaXMgKi8KICAgICAgICAgICAgICAgICAvKiBmb3Igbm93LCBqdXN0IGluY3JlYXNlIHRvIGNvbG51bS0xICovCkBAIC00NjMsMTAgKzUzNywxOCBAQAogICAgICAgICAgICAgICAgIHJlcXVlc3QtPnByb2Nlc3NlZCA9IFRBQkxFX0lURVJBVE9SX05PVEFHQUlOOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aV9pbmZvID0KKyAgICAgICAgICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopCiAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAgICAgICAgICAgICBpZiAoIXRpX2luZm8pIHsKICAgICAgICAgICAgICAgICB0aV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRih0aV9jYWNoZV9pbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAodGlfaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUSV9SRVFVRVNUX0NBQ0hFLApAQCAtNDg0LDggKzU2NiwxMSBAQAogICAgICAqLwogICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUIHx8CiAgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRORVhUIHx8Ci0gICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRfU1RBU0ggfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgeworICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfR0VUX1NUQVNICisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICB8fCByZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICkgewogICAgICAgICAvKgogICAgICAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJlcXVlc3QgaW4gdGhlIGxpc3QsCiAgICAgICAgICAqICAgc28gdGhhdCB3ZSdsbCBrbm93IHdoZW4gd2UncmUgZmluaXNoZWQKQEAgLTU1NSwyNyArNjQwLDUzIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHN0b3JlIGluIGFuIGFycmF5IGZvciBmYXN0ZXIgcmV0cml2YWwgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBzdG9yZSBpbiBhbiBhcnJheSBmb3IgZmFzdGVyIHJldHJpZXZhbCAqLwogICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0cyhyZXF0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHJlcXRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvbG9pZFtyZWdpbmZvLT5yb290b2lkX2xlbiArIDFdID0gdGFibGVfaW5mby0+Y29sbnVtOwogCi0gICAgICAgICAgICAgICAgICAgIHRpX2luZm8gPQorICAgICAgICAgICAgICAgICAgICB0aV9pbmZvID0gKHRpX2NhY2hlX2luZm8qKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb29raW5nIGZvciBleGFjdCBtYXRjaGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyhteW5hbWUsIE1BWF9PSURfTEVOLCAmbXluYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9pZCwgY29sb2lkX2xlbiwgaW5kZXhfc2VhcmNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKG15bmFtZSwgbXluYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBrZWVwIHRoaXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteW5hbWUsIG15bmFtZV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19kYXRhX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19sb29wX2NvbnRleHQsIGlpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBrZWVwIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0c25tcF9pdGVyYXRvcl9yZW1lbWJlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteW5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RhdGFfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19sb29wX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWluZm8pID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0cyhyZXF0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUocmVxdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9jb3VudC0tOyAgIC8qIE9uZSBsZXNzIHRvIGxvb2sgZm9yICovCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpaW5mby0+ZnJlZV9kYXRhX2NvbnRleHQgJiYgY2FsbGJhY2tfZGF0YV9jb250ZXh0KSB7CkBAIC01ODUsNiArNjk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX0dFVF9TVEFTSDoKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbGxlY3QgZGF0YSBmb3IgZWFjaCBjb2x1bW4gZm9yIGV2ZXJ5IHJvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfb2lkX25vYWxsb2MobXluYW1lLCBNQVhfT0lEX0xFTiwgJm15bmFtZV9sZW4sCkBAIC02MTIsNiArNzI0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YiA9IHJlcXRtcC0+cmVxdWVzdHZiID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Yi0+dHlwZSA9IEFTTl9OVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZCh2YiwgbXluYW1lLCBteW5hbWVfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sCkBAIC02MjcsMTcgKzc0OCwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9IE1PREVfR0VUX1NUQVNIOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KIAogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvb2tpbmcgZm9yICJuZXh0IiBtYXRjaGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0c25tcF9jaGVja19nZXRuZXh0X3JlcGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QsIGNvbG9pZCwgY29sb2lkX2xlbiwgaW5kZXhfc2VhcmNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGlfaW5mby0+cmVzdWx0cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aV9pbmZvLT5yZXN1bHRzLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlfaW5mby0+cmVzdWx0cy0+bmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19kYXRhX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19sb29wX2NvbnRleHQsIGlpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0c25tcF9pdGVyYXRvcl9yZW1lbWJlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpX2luZm8tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlfaW5mby0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaW5mbykgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgSWYgd2UndmUgYmVlbiB0b2xkIHRoYXQgdGhlIHJvd3MgYXJlIHNvcnRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHRoZW4gdGhlIGZpcnN0IHZhbGlkIG9uZSB3ZSBmaW5kCkBAIC02NTQsMTIgKzc4OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5lZWRlZCBwcm9jZXNzaW5nIGFscmVhZHkgZG9uZSBpbiBSRVNFUlZFMSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCkBAIC02OTcsNyArODMzLDcgQEAKICAgICAgICAgICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzIDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB0aV9pbmZvID0KKyAgICAgICAgICAgICAgICAgICAgdGlfaW5mbyA9ICh0aV9jYWNoZV9pbmZvKikKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSV9SRVFVRVNUX0NBQ0hFKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aV9pbmZvLT5yZXN1bHRzKSB7CkBAIC03MjIsMTMgKzg1OCwxNiBAQAogICAgIH0KIAogICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUIHx8Ci0gICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRORVhUIHx8Ci0gICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpIHsKKyAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIHx8IHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgKSB7CiAgICAgICAgIC8qIHBlciByZXF1ZXN0IGxhc3QgbWludXRlIHByb2Nlc3NpbmcgKi8KICAgICAgICAgZm9yKHJlcXVlc3QgPSByZXF1ZXN0cyA7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGlfaW5mbyA9CisgICAgICAgICAgICB0aV9pbmZvID0gKHRpX2NhY2hlX2luZm8qKQogICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRJX1JFUVVFU1RfQ0FDSEUpOwogICAgICAgICAgICAgdGFibGVfaW5mbyA9CiAgICAgICAgICAgICAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CkBAIC03NTksNyArODk4LDkgQEAKICAgICAgICAgICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8KIAogICAgICAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgIGlmICh0aV9pbmZvLT5kYXRhX2NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGRvbid0IGFkZCBhIGZyZWUgcG9pbnRlciwgc2luY2UgaXQncyBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgVElfUkVRVUVTVF9DQUNIRSBpbnN0ZWFkICovCkBAIC03ODIsMTAgKzkyMywxMiBAQAogICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQpIHsKICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUgPSBNT0RFX0dFVDsKICAgICAgICAgfQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgfSBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUX1NUQVNIKSB7CiAgICAgICAgIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0cyhyZXF0bXApOwogICAgICAgICBTTk1QX0ZSRUUocmVxdG1wKTsKICAgICAgICAgdGFibGVfaW5mby0+aW5kZXhlcyA9IG9sZF9pbmRleGVzOworI2VuZGlmICAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFICovCiAgICAgfQogCiAKQEAgLTgxNiw2ICs5NTksNyBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX1JPV19GSVJTVAogdm9pZCAqCiBuZXRzbm1wX2l0ZXJhdG9yX3Jvd19maXJzdCggbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyApIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZwMSwgKnZwMjsKQEAgLTgzNCw2ICs5NzgsNyBAQAogICAgIHNubXBfZnJlZV92YXJiaW5kKCB2cDEgKTsKICAgICByZXR1cm4gY3R4MjsgIC8qIG9yICpjdHgyID8/ICovCiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9ST1dfRklSU1QgKi8KIAogdm9pZCAqCiBuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXQoIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8sIHZvaWQgKnJvdyApCkBAIC05NDUsNyArMTA5MCw3IEBACiAKICAgICB2cDEgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoaWluZm8tPmluZGV4ZXMpOwogICAgIHZwMiA9IGlpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCggJmN0eDEsICZjdHgyLCB2cDEsIGlpbmZvICk7Ci0gICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJmaXJzdCBEUDogJXggJXggJXhcbiIsCisgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJmaXJzdCBEUDogJXAgJXAgJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIpKTsKIAogICAgIC8qIFhYWCAtIGZyZWUgY29udGV4dCA/ICovCkBAIC05NjQsNyArMTEwOSw3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZwMiA9IGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMiwgaWluZm8gKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAleCAleCAleFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIpKTsKICAgICAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KICAgICB9CkBAIC05OTQsNyArMTEzOSw3IEBACiAKICAgICB2cDEgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoaWluZm8tPmluZGV4ZXMpOwogICAgIHZwMiA9IGlpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCggJmN0eDEsICZjdHgyLCB2cDEsIGlpbmZvICk7Ci0gICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJmaXJzdCBEUDogJXggJXggJXhcbiIsCisgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJmaXJzdCBEUDogJXAgJXAgJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIpKTsKIAogICAgIGlmICggIWluc3RhbmNlIHx8ICFsZW4gKSB7CkBAIC0xMDMxLDcgKzExNzYsNyBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2cDIgPSBpaW5mby0+Z2V0X25leHRfZGF0YV9wb2ludCggJmN0eDEsICZjdHgyLCB2cDIsIGlpbmZvICk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpnZXQiLCAibmV4dCBEUDogJXggJXggJXhcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpnZXQiLCAibmV4dCBEUDogJXAgJXAgJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4MSwgY3R4MiwgdnAyKSk7CiAgICAgICAgIC8qIFhYWCAtIGZyZWUgY29udGV4dCA/ICovCiAgICAgfQpAQCAtMTA0Miw2ICsxMTg3LDcgQEAKICAgICByZXR1cm4gKCB2cDIgPyBjdHgyIDogTlVMTCApOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfUk9XX0NPVU5UCiBpbnQKIG5ldHNubXBfaXRlcmF0b3Jfcm93X2NvdW50KCBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvICkKIHsKQEAgLTEwNjAsNyArMTIwNiw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Y291bnQiLCAiZmlyc3QgRFA6ICV4ICV4ICV4XG4iLAorICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpjb3VudCIsICJmaXJzdCBEUDogJXAgJXAgJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogCiAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KQEAgLTEwNjgsNyArMTIxNCw3IEBACiAgICAgd2hpbGUgKHZwMikgewogICAgICAgICBpKys7CiAgICAgICAgIHZwMiA9IGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMiwgaWluZm8gKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmNvdW50IiwgIm5leHQgRFA6ICV4ICV4ICV4ICglZClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpjb3VudCIsICJuZXh0IERQOiAlcCAlcCAlcCAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4MSwgY3R4MiwgdnAyLCBpKSk7CiAgICAgICAgIC8qIFhYWCAtIGZyZWUgY29udGV4dCA/ICovCiAgICAgfQpAQCAtMTA3Nyw2ICsxMjIzLDcgQEAKICAgICBzbm1wX2ZyZWVfdmFyYmluZCggdnAxICk7CiAgICAgcmV0dXJuIGk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9ST1dfQ09VTlQgKi8KIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jIGIvYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYwppbmRleCA3YzhhNGM0Li4yYTMzZjIzIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfcm93LmMKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIFRBQkxFX1JPV19EQVRBICAidGFibGVfcm93IgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTIzLDYgKzI0LDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9yb3dfYWxsLCBtaWJfaGVscGVycykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3Jvd19leHRyYWN0LCB0YWJsZV9yb3dfYWxsKQorCisKIC8qCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU4gICAgICAgIC0xIAogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxICAgICAwIApAQCAtMTM2LDcgKzE0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgTUFYX09JRF9MRU4tcm93X29pZF9sZW4sICZsZW4sIE5VTEwsIDAsIGluZGV4KTsKICAgICByb3dfb2lkX2xlbiArPSBsZW47CiAgICAgZnJlZShyZWdpbmZvLT5yb290b2lkKTsKLSAgICByZWdpbmZvLT5yb290b2lkID0gbmV0c25tcF9tZW1kdXAocm93X29pZCwgcm93X29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgcmVnaW5mby0+cm9vdG9pZCA9IHNubXBfZHVwbGljYXRlX29iamlkKHJvd19vaWQsIHJvd19vaWRfbGVuKTsKICAgICByZWdpbmZvLT5yb290b2lkX2xlbiA9IHJvd19vaWRfbGVuOwogCiAgICAgIApAQCAtMTU0LDExICsxNjAsMTMgQEAKIAogCiAvKiogcmV0dXJuIHRoZSByb3cgZGF0YSBzdHJ1Y3R1cmUgc3VwcGxpZWQgdG8gdGhlIHRhYmxlX3JvdyBoZWxwZXIgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9ST1dfRVhUUkFDVAogdm9pZCAqCiBuZXRzbm1wX3RhYmxlX3Jvd19leHRyYWN0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewogICAgIHJldHVybiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9ST1dfREFUQSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9ST1dfRVhUUkFDVCAqLwogLyoqIEBjb25kICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMKaW5kZXggNDZkM2UxOC4uODg2NTA4NCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYwpAQCAtMSw0ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg+CiAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC02LDExICsxMiw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5Lmg+CiAKQEAgLTE4LDYgKzIwLDIyIEBACiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9hbGwsIG1pYl9oZWxwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhLCB0YWJsZV90ZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlLCB0YWJsZV90ZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSwgdGFibGVfdGRhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhX3JlbW92ZV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9pbnNlcnRfcm93LCB0YWJsZV90ZGF0YV9hbGwpCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9UQUJMRV9UREFUQQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQpCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfVERBVEFfUkVNT1ZFX1JPVworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19yZW1vdmUpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfVERBVEFfUkVNT1ZFX1JPVyAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RBQkxFX1REQVRBICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQQorCiAvKiogQGRlZmdyb3VwIHRkYXRhIHRkYXRhCiAgKiAgSW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuCiAgKiAgQGluZ3JvdXAgdGFibGUKQEAgLTU3LDEyICs3NSwyMSBAQAogICAgIGlmICggIXRhYmxlICkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICB0YWJsZS0+ZmxhZ3MgPSBmbGFnczsKICAgICBpZiAobmFtZSkKICAgICAgICAgdGFibGUtPm5hbWUgPSBzdHJkdXAobmFtZSk7Ci0gICAgdGFibGUtPmNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoICJ0YWJsZV9jb250YWluZXIiICk7CisKKyAgICBpZiAoISh0YWJsZS0+ZmxhZ3MgJiBUREFUQV9GTEFHX05PX0NPTlRBSU5FUikpIHsKKyAgICAgICAgdGFibGUtPmNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoIG5hbWUgKTsKKyAgICAgICAgaWYgKCF0YWJsZS0+Y29udGFpbmVyKQorICAgICAgICAgICAgdGFibGUtPmNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoICJ0YWJsZV9jb250YWluZXIiICk7CisgICAgICAgIGlmICh0YWJsZS0+Y29udGFpbmVyKQorICAgICAgICAgICAgdGFibGUtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgfQogICAgIHJldHVybiB0YWJsZTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0RFTEVURV9UQUJMRQogLyoqIGNyZWF0ZXMgYW5kIHJldHVybnMgYSAndGRhdGEnIHRhYmxlIGRhdGEgc3RydWN0dXJlICovCiB2b2lkCiBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShuZXRzbm1wX3RkYXRhICp0YWJsZSkKQEAgLTc4LDYgKzEwNSw3IEBACiAgICAgU05NUF9GUkVFKHRhYmxlKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQV9ERUxFVEVfVEFCTEUgKi8KIAogLyoqIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG5ldyByb3cgZGF0YSBzdHJ1Y3R1cmUgKi8KIG5ldHNubXBfdGRhdGFfcm93ICoKQEAgLTg4LDYgKzExNiw4IEBACiB9CiAKIC8qKiBjbG9uZXMgYSAndGRhdGEnIHJvdy4gRE9FUyBOT1QgQ0xPTkUgVEhFIFRBQkxFLVNQRUNJRklDIEVOVFJZIERBVEEuICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfY2xvbmVfcm93LCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ0xPTkVfUk9XCiBuZXRzbm1wX3RkYXRhX3JvdyAqCiBuZXRzbm1wX3RkYXRhX2Nsb25lX3JvdyhuZXRzbm1wX3RkYXRhX3JvdyAqcm93KQogewpAQCAtMTA4LDggKzEzOCw4IEBACiAgICAgfQogCiAgICAgaWYgKHJvdy0+b2lkX2luZGV4Lm9pZHMpIHsKLSAgICAgICAgbmV3cm93LT5vaWRfaW5kZXgub2lkcyA9IG5ldHNubXBfbWVtZHVwKHJvdy0+b2lkX2luZGV4Lm9pZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5vaWRfaW5kZXgubGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBuZXdyb3ctPm9pZF9pbmRleC5vaWRzID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHJvdy0+b2lkX2luZGV4Lm9pZHMsIHJvdy0+b2lkX2luZGV4Lmxlbik7CiAgICAgICAgIGlmICghbmV3cm93LT5vaWRfaW5kZXgub2lkcykgewogICAgICAgICAgICAgaWYgKG5ld3Jvdy0+aW5kZXhlcykKICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChuZXdyb3ctPmluZGV4ZXMpOwpAQCAtMTIwLDkgKzE1MCwxMiBAQAogCiAgICAgcmV0dXJuIG5ld3JvdzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NMT05FX1JPVyAqLwogCiAvKiogY29weSB0aGUgY29udGVudHMgb2YgYSAndGRhdGEnIHJvdy4KICAgICBET0VTIE5PVCBDT1BZIFRIRSBUQUJMRS1TUEVDSUZJQyBFTlRSWSBEQVRBLiAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkYXRhX2NvcHlfcm93LCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ09QWV9ST1cKIGludAogbmV0c25tcF90ZGF0YV9jb3B5X3JvdyhuZXRzbm1wX3RkYXRhX3JvdyAqZHN0X3JvdywgbmV0c25tcF90ZGF0YV9yb3cgKnNyY19yb3cpCiB7CkBAIC0xMzgsMTQgKzE3MSwxNSBAQAogICAgIH0KIAogICAgIGlmIChzcmNfcm93LT5vaWRfaW5kZXgub2lkcykgewotICAgICAgICBkc3Rfcm93LT5vaWRfaW5kZXgub2lkcyA9IG5ldHNubXBfbWVtZHVwKHNyY19yb3ctPm9pZF9pbmRleC5vaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvdy0+b2lkX2luZGV4LmxlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgZHN0X3Jvdy0+b2lkX2luZGV4Lm9pZHMgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZChzcmNfcm93LT5vaWRfaW5kZXgub2lkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93LT5vaWRfaW5kZXgubGVuKTsKICAgICAgICAgaWYgKCFkc3Rfcm93LT5vaWRfaW5kZXgub2lkcykKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NPUFlfUk9XICovCiAKIC8qKiBkZWxldGVzIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHJvdwogICogIHJldHVybnMgdGhlIHRhYmxlLXNwZWNpZmljIGVudHJ5IGRhdGEKQEAgLTIxMywxMyArMjQ3LDE3IEBACiAgICAgLyoKICAgICAgKiBhZGQgdGhpcyByb3cgdG8gdGhlIHN0b3JlZCB0YWJsZQogICAgICAqLwotICAgIENPTlRBSU5FUl9JTlNFUlQoIHRhYmxlLT5jb250YWluZXIsIHJvdyApOwotICAgIERFQlVHTVNHVEwoKCJ0ZGF0YV9hZGRfcm93IiwgImFkZGVkIHJvdyAoJXgpXG4iLCByb3cpKTsKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVCggdGFibGUtPmNvbnRhaW5lciwgcm93ICkgIT0gMCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgREVCVUdNU0dUTCgoInRkYXRhX2FkZF9yb3ciLCAiYWRkZWQgcm93ICglcClcbiIsIHJvdykpOwogCiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAogLyoqIHN3YXBzIG91dCBvcmlncm93IHdpdGggbmV3cm93LiAgVGhpcyBkb2VzICpub3QqIGRlbGV0ZS9mcmVlIGFueXRoaW5nISAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkYXRhX3JlcGxhY2Vfcm93LCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUkVQTEFDRV9ST1cKIHZvaWQKIG5ldHNubXBfdGRhdGFfcmVwbGFjZV9yb3cobmV0c25tcF90ZGF0YSAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKm9yaWdyb3csCkBAIC0yMjgsNiArMjY2LDcgQEAKICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9yb3codGFibGUsIG9yaWdyb3cpOwogICAgIG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZSwgbmV3cm93KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX1JFUExBQ0VfUk9XICovCiAKIC8qKgogICogcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyBpdCAobm8gZnJlZSdzIGNhbGxlZCkKQEAgLTMxNSwyMCArMzU0LDM0IEBACiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgKnJlcXVlc3Q7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICAgICAgKnJvdzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMTsKIAogICAgIHN3aXRjaCAoIHJlcWluZm8tPm1vZGUgKSB7CiAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMDsgLyogb25seSBuZWVkIHByb2Nlc3NpbmcgaWYgc29tZSB2YXJzIGZvdW5kICovCisgICAgICAgIC8qKiBGYWxsIHRocm91Z2ggKi8KKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAKICAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKLSAgICAgICAgICAgIGlmICghdGFibGVfaW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIGFjayAqLwotICAgICAgICAgICAgcm93ID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QoIHJlcXVlc3QgKTsKLQorICAgICAgICAgICAgaWYgKCF0YWJsZV9pbmZvKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQodGFibGVfaW5mbyk7IC8qIHllcywgdGhpcyB3aWxsIGFsd2F5cyBoaXQgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAvKiBlZWsgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJvdyA9IChuZXRzbm1wX3RkYXRhX3JvdyopbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QoIHJlcXVlc3QgKTsKKyAgICAgICAgICAgIGlmICghcm93ICYmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJvdyk7IC8qIHllcywgdGhpcyB3aWxsIGFsd2F5cyBoaXQgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAvKiBlZWsgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbmVlZF9wcm9jZXNzaW5nOwogICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVERBVEFfVEFCTEUsIHRhYmxlLCBOVUxMKSk7CkBAIC0zMzYsNiArMzg5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVERBVEFfUk9XLCAgIHJvdywgICBOVUxMKSk7CiAgICAgICAgIH0KKyAgICAgICAgLyoqIHNraXAgbmV4dCBoYW5kbGVyIGlmIHByb2Nlc3Npbmcgbm90IG5lZWRlZCAqLworICAgICAgICBpZiAoIW5lZWRfcHJvY2Vzc2luZykKKyAgICAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwogICAgIH0KIAogICAgIC8qIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCkBAIC0zNTQsNiArNDEwLDE3IEBACiAgICAgICAgICAgICAgICAgICB0YWJsZS0+Y29udGFpbmVyLCBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfdW5yZWdpc3RlciwgdGFibGVfdGRhdGFfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX1VOUkVHSVNURVIKK2ludAorbmV0c25tcF90ZGF0YV91bnJlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8pCit7CisgICAgLyogZnJlZSB0YWJsZTsgKi8KKyAgICByZXR1cm4gbmV0c25tcF9jb250YWluZXJfdGFibGVfdW5yZWdpc3RlcihyZWdpbmZvKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX1VOUkVHSVNURVIgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0VYVFJBQ1RfVEFCTEUKIC8qKiBleHRyYWN0cyB0aGUgdGRhdGEgdGFibGUgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KIG5ldHNubXBfdGRhdGEgKgogbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQpAQCAtMzYxLDE1ICs0MjgsMTkgQEAKICAgICByZXR1cm4gKG5ldHNubXBfdGRhdGEgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVERBVEFfVEFCTEUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfRVhUUkFDVF9UQUJMRSAqLwogCiAvKiogZXh0cmFjdHMgdGhlIHRkYXRhIGNvbnRhaW5lciBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkYXRhX2V4dHJhY3RfY29udGFpbmVyLCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfRVhUUkFDVF9DT05UQUlORVIKIG5ldHNubXBfY29udGFpbmVyICoKIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9jb250YWluZXIobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCiB7Ci0gICAgbmV0c25tcF90ZGF0YSAqdGRhdGEgPSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVERBVEFfVEFCTEUpOworICAgIG5ldHNubXBfdGRhdGEgKnRkYXRhID0gKG5ldHNubXBfdGRhdGEqKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9UREFUQV9UQUJMRSk7CiAgICAgcmV0dXJuICggdGRhdGEgPyB0ZGF0YS0+Y29udGFpbmVyIDogTlVMTCApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfRVhUUkFDVF9DT05UQUlORVIgKi8KIAogLyoqIGV4dHJhY3RzIHRoZSB0ZGF0YSByb3cgYmVpbmcgYWNjZXNzZWQgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KIG5ldHNubXBfdGRhdGFfcm93ICoKQEAgLTM5MSw2ICs0NjIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0lOU0VSVF9ST1cKIC8qKiBpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0ZGF0YSByb3cgaW50byBhIHJlcXVlc3QgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKQEAgLTM5OCw2ICs0NzAsMTcgQEAKIHsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KHJlcXVlc3QsIChuZXRzbm1wX2luZGV4ICopcm93KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0lOU0VSVF9ST1cgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX1JFTU9WRV9ST1cKKy8qKiBpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0ZGF0YSByb3cgaW50byBhIHJlcXVlc3QgKi8KK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93KQoreworICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19yZW1vdmUocmVxdWVzdCwgKG5ldHNubXBfaW5kZXggKilyb3cpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfUkVNT1ZFX1JPVyAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQyOCw3ICs1MTEsNyBAQAogbmV0c25tcF90ZGF0YV9yb3dfZ2V0KCAgbmV0c25tcF90ZGF0YSAgICAgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdykKIHsKLSAgICByZXR1cm4gQ09OVEFJTkVSX0ZJTkQoIHRhYmxlLT5jb250YWluZXIsIHJvdyApOworICAgIHJldHVybiAobmV0c25tcF90ZGF0YV9yb3cqKUNPTlRBSU5FUl9GSU5EKCB0YWJsZS0+Y29udGFpbmVyLCByb3cgKTsKIH0KIAogLyoqIHJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSAqLwpAQCAtNDYzLDcgKzU0Niw3IEBACiAKICAgICBpbmRleC5vaWRzID0gc2VhcmNoZm9yOwogICAgIGluZGV4LmxlbiAgPSBzZWFyY2hmb3JfbGVuOwotICAgIHJldHVybiBDT05UQUlORVJfRklORCggdGFibGUtPmNvbnRhaW5lciwgJmluZGV4ICk7CisgICAgcmV0dXJuIChuZXRzbm1wX3RkYXRhX3JvdyopQ09OVEFJTkVSX0ZJTkQoIHRhYmxlLT5jb250YWluZXIsICZpbmRleCApOwogfQogCiAvKiogZmluZHMgdGhlIGxleGljYWxseSBuZXh0IHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZQpAQCAtNDkyLDkgKzU3NSwxMSBAQAogCiAgICAgaW5kZXgub2lkcyA9IHNlYXJjaGZvcjsKICAgICBpbmRleC5sZW4gID0gc2VhcmNoZm9yX2xlbjsKLSAgICByZXR1cm4gQ09OVEFJTkVSX05FWFQoIHRhYmxlLT5jb250YWluZXIsICZpbmRleCApOworICAgIHJldHVybiAobmV0c25tcF90ZGF0YV9yb3cqKUNPTlRBSU5FUl9ORVhUKCB0YWJsZS0+Y29udGFpbmVyLCAmaW5kZXggKTsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkYXRhX3Jvd19jb3VudCwgdGFibGVfdGRhdGFfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX1JPV19DT1VOVAogaW50CiBuZXRzbm1wX3RkYXRhX3Jvd19jb3VudChuZXRzbm1wX3RkYXRhICp0YWJsZSkKIHsKQEAgLTUwMiw2ICs1ODcsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoIHRhYmxlLT5jb250YWluZXIgKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX1JPV19DT1VOVCAqLwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgpAQCAtNTExLDYgKzU5Nyw4IEBACiAKIAogLyoqIGNvbXBhcmUgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggdmFsdWVzICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfY29tcGFyZV9pZHgsIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DT01QQVJFX0lEWAogaW50CiBuZXRzbm1wX3RkYXRhX2NvbXBhcmVfaWR4KG5ldHNubXBfdGRhdGFfcm93ICAgICAqcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4ZXMpCkBAIC01MjIsNiArNjEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzKTsKICAgICByZXR1cm4gbmV0c25tcF90ZGF0YV9jb21wYXJlX29pZChyb3csIHNlYXJjaGZvciwgc2VhcmNoZm9yX2xlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DT01QQVJFX0lEWCAqLwogCiAvKiogY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCBPSUQgKi8KIGludApAQCAtNTUzLDYgKzY0MiwxMCBAQAogICAgIHJldHVybiBzbm1wX29pZHRyZWVfY29tcGFyZSggaW5kZXgtPm9pZHMsIGluZGV4LT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJldG8sICAgY29tcGFyZXRvX2xlbik7CiB9CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRhYmxlX3RkYXRhKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBICovCisKIAogLyoqIEB9IAogICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3dhdGNoZXIuYyBiL2FnZW50L2hlbHBlcnMvd2F0Y2hlci5jCmluZGV4IDljYmI0ZDMuLjliMzkzM2IgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvd2F0Y2hlci5jCisrKyBiL2FnZW50L2hlbHBlcnMvd2F0Y2hlci5jCkBAIC0xLDE5ICsxLDM4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC93YXRjaGVyLmg+CisKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgogCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBIQVZFX0RNQUxMT0NfSAorc3RhdGljIHZvaWQgZnJlZV93cmFwcGVyKHZvaWQgKiBwKQoreworICAgIGZyZWUocCk7Cit9CisjZWxzZQorI2RlZmluZSBmcmVlX3dyYXBwZXIgZnJlZQorI2VuZGlmCisKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfYWxsLCBtaWJfaGVscGVycykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX2NyZWF0ZV9pbmZvNiwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9yZWdpc3Rlcl90aW1lc3RhbXAsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfdWxvbmdfc2NhbGFyLCB3YXRjaGVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX3JlYWRfb25seV91bG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfbG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfcmVhZF9vbmx5X2xvbmdfc2NhbGFyLCB3YXRjaGVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX2ludF9zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfb25seV9jb3VudGVyMzJfc2NhbGFyLCB3YXRjaGVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX3NwaW5sb2NrLCB3YXRjaGVyX2FsbCkKKwogLyoqIEBkZWZncm91cCB3YXRjaGVyIHdhdGNoZXIKICAqICBXYXRjaCBhIHNwZWNpZmllZCB2YXJpYWJsZSBhbmQgcHJvY2VzcyBpdCBhcyBhbiBpbnN0YW5jZSBvciBzY2FsYXIgb2JqZWN0CiAgKiAgQGluZ3JvdXAgbGVhZgpAQCAtMzMsMjIgKzUyLDU3IEBACiB9CiAKIG5ldHNubXBfd2F0Y2hlcl9pbmZvICoKLW5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgdV9jaGFyIHR5cGUsIGludCBmbGFncykKK25ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgc2l6ZV90IG1heF9zaXplLCBzaXplX3QqIHNpemVfcCkKIHsKLSAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfd2F0Y2hlcl9pbmZvKTsKLQotICAgIHdpbmZvLT5kYXRhICAgICAgPSBkYXRhOworICAgIHdpbmZvLT5kYXRhID0gZGF0YTsKICAgICB3aW5mby0+ZGF0YV9zaXplID0gc2l6ZTsKLSAgICB3aW5mby0+bWF4X3NpemUgID0gc2l6ZTsJLyogUHJvYmFibHkgd3JvbmcgZm9yIG5vbi1maXhlZCBzaXplIGRhdGEgKi8KLSAgICB3aW5mby0+dHlwZSAgICAgID0gdHlwZTsKLSAgICBpZiAoZmxhZ3MpCi0gICAgICAgIHdpbmZvLT5mbGFncyA9IGZsYWdzOwotICAgIGVsc2UKLSAgICAgICAgd2luZm8tPmZsYWdzID0gV0FUQ0hFUl9GSVhFRF9TSVpFOwotCisgICAgd2luZm8tPm1heF9zaXplID0gbWF4X3NpemU7CisgICAgd2luZm8tPnR5cGUgPSB0eXBlOworICAgIHdpbmZvLT5mbGFncyA9IGZsYWdzOworICAgIHdpbmZvLT5kYXRhX3NpemVfcCA9IHNpemVfcDsKICAgICByZXR1cm4gd2luZm87CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0NSRUFURV9JTkZPNgorbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvNih2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgdV9jaGFyIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgc2l6ZV90IG1heF9zaXplLCBzaXplX3QqIHNpemVfcCkKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfd2F0Y2hlcl9pbmZvKTsKKyAgICBpZiAod2luZm8pCisgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KHdpbmZvLCBkYXRhLCBzaXplLCB0eXBlLCBmbGFncywgbWF4X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfcCk7CisgICAgcmV0dXJuIHdpbmZvOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9DUkVBVEVfSU5GTzYgKi8KKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbyhuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwgaW50IGZsYWdzKQoreworICByZXR1cm4gbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYod2luZm8sIGRhdGEsIHNpemUsCisJCQkJICAgIHR5cGUsIChmbGFncyA/IGZsYWdzIDogV0FUQ0hFUl9GSVhFRF9TSVpFKSwKKwkJCQkgICAgc2l6ZSwgIC8qIFByb2JhYmx5IHdyb25nIGZvciBub24tZml4ZWQKKwkJCQkJICAgICogc2l6ZSBkYXRhICovCisJCQkJICAgIE5VTEwpOworfQorCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8odm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLCBpbnQgZmxhZ3MpCit7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8gKndpbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3dhdGNoZXJfaW5mbyk7CisgICAgaWYgKHdpbmZvKQorICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKHdpbmZvLCBkYXRhLCBzaXplLCB0eXBlLCBmbGFncyk7CisgICAgcmV0dXJuIHdpbmZvOworfQorCisvKioKKyAqIFJlZ2lzdGVyIGEgd2F0Y2hlZCBzY2FsYXIuIFRoZSBjYWxsZXIgcmVtYWlucyB0aGUgb3duZXIgb2Ygd2F0Y2hpbmZvLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigpCisgKi8KIGludAogbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQpAQCAtNjIsNiArMTE2LDMwIEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UocmVnaW5mbyk7CiB9CiAKKy8qKgorICogUmVnaXN0ZXIgYSB3YXRjaGVkIHNjYWxhci4gT3duZXJzaGlwIG9mIHdhdGNoaW5mbyBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaGFuZGxlci4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZSgpCisgKi8KK2ludAorbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorCQkJCSAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndhdGNoaW5mbykKK3sKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICp3aGFuZGxlcjsKKworICAgIHdoYW5kbGVyICAgICAgICAgPSBuZXRzbm1wX2dldF93YXRjaGVyX2hhbmRsZXIoKTsKKyAgICB3aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKil3YXRjaGluZm87CisgICAgbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbyh3aGFuZGxlcik7CisKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIHdoYW5kbGVyKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShyZWdpbmZvKTsKK30KKworLyoqCisgKiBSZWdpc3RlciBhIHdhdGNoZWQgc2NhbGFyLiBUaGUgY2FsbGVyIHJlbWFpbnMgdGhlIG93bmVyIG9mIHdhdGNoaW5mby4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQpAQCAtNzUsNyArMTUzLDg3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZ2luZm8pOwogfQogCisvKioKKyAqIFJlZ2lzdGVyIGEgd2F0Y2hlZCBzY2FsYXIuIE93bmVyc2hpcCBvZiB3YXRjaGluZm8gaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGhhbmRsZXIuCisgKgorICogQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKCkKKyAqLworaW50CituZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndhdGNoaW5mbykKK3sKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICp3aGFuZGxlcjsKIAorICAgIHdoYW5kbGVyICAgICAgICAgPSBuZXRzbm1wX2dldF93YXRjaGVyX2hhbmRsZXIoKTsKKyAgICB3aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKil3YXRjaGluZm87CisgICAgbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbyh3aGFuZGxlcik7CisKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIHdoYW5kbGVyKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7Cit9CisKK3ZvaWQKK25ldHNubXBfb3duc193YXRjaGVyX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyKTsKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyLT5teXZvaWQpOworICAgIGhhbmRsZXItPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9jbG9uZV93YXRjaGVyX2luZm87CisgICAgaGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKK30KKworLyoqIEBjb25kICovCisKK05FVFNOTVBfU1RBVElDX0lOTElORSBzaXplX3QKK2dldF9kYXRhX3NpemUoY29uc3QgbmV0c25tcF93YXRjaGVyX2luZm8qIHdpbmZvKQoreworICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfU1RSTEVOKQorICAgICAgICByZXR1cm4gc3RybGVuKChjb25zdCBjaGFyKil3aW5mby0+ZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCByZXM7CisgICAgICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfSVNfUFRSKQorICAgICAgICAgICAgcmVzID0gKndpbmZvLT5kYXRhX3NpemVfcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzID0gd2luZm8tPmRhdGFfc2l6ZTsKKyAgICAgICAgaWYgKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9VTklUX09JRFMpCisgICAgICAgICAgcmVzICo9IHNpemVvZihvaWQpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KK30KKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKK3NldF9kYXRhKG5ldHNubXBfd2F0Y2hlcl9pbmZvKiB3aW5mbywgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbWVtY3B5KHdpbmZvLT5kYXRhLCBkYXRhLCBzaXplKTsKKyAgICBpZiAod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9TSVpFX1NUUkxFTikKKyAgICAgICAgKChjaGFyKil3aW5mby0+ZGF0YSlbc2l6ZV0gPSAnXDAnOworICAgIGVsc2UgeworICAgICAgICBpZiAod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9TSVpFX1VOSVRfT0lEUykKKyAgICAgICAgICBzaXplIC89IHNpemVvZihvaWQpOworICAgICAgICBpZiAod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9TSVpFX0lTX1BUUikKKyAgICAgICAgICAgICp3aW5mby0+ZGF0YV9zaXplX3AgPSBzaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3aW5mby0+ZGF0YV9zaXplID0gc2l6ZTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyIGRhdGFbMV07Cit9IG5ldHNubXBfd2F0Y2hlcl9jYWNoZTsKKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIG5ldHNubXBfd2F0Y2hlcl9jYWNoZSoKK25ldHNubXBfd2F0Y2hlcl9jYWNoZV9jcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbmV0c25tcF93YXRjaGVyX2NhY2hlICpyZXMgPSAobmV0c25tcF93YXRjaGVyX2NhY2hlKikKKyAgICAgICAgbWFsbG9jKHNpemVvZihuZXRzbm1wX3dhdGNoZXJfY2FjaGUpICsgc2l6ZSAtIDEpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgcmVzLT5zaXplID0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KHJlcy0+ZGF0YSwgZGF0YSwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qKiBAZW5kY29uZCAqLwogCiBpbnQKIG5ldHNubXBfd2F0Y2hlcl9oZWxwZXJfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtODMsOCArMjQxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgbmV0c25tcF93YXRjaGVyX2luZm8gKndpbmZvID0gKG5ldHNubXBfd2F0Y2hlcl9pbmZvICopIGhhbmRsZXItPm15dm9pZDsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICpvbGRfZGF0YTsKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgKndpbmZvID0gKG5ldHNubXBfd2F0Y2hlcl9pbmZvICopIGhhbmRsZXItPm15dm9pZDsKKyAgICBuZXRzbm1wX3dhdGNoZXJfY2FjaGUgKm9sZF9kYXRhOwogCiAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp3YXRjaGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsIHJlcWluZm8tPm1vZGUpKTsKICAgICBERUJVR01TR1RMKCggImhlbHBlcjp3YXRjaGVyIiwgIiAgb2lkOiIpKTsKQEAgLTEwMCwyNiArMjU4LDI4IEBACiAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZm8tPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmZvLT5kYXRhX3NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2RhdGFfc2l6ZSh3aW5mbykpOwogICAgICAgICBicmVhazsKIAogICAgICAgICAvKgogICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IHdpbmZvLT50eXBlKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfV1JPTkdUWVBFKTsKICAgICAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCgod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9NQVhfU0laRSkgJiYKLSAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPiAgd2luZm8tPm1heF9zaXplKSB8fAorICAgICAgICB9IGVsc2UgaWYgKCgod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9NQVhfU0laRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPiB3aW5mby0+bWF4X3NpemUpIHx8CiAgICAgICAgICAgICAoKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfRklYRURfU0laRSkgJiYKLSAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0gd2luZm8tPmRhdGFfc2l6ZSkpIHsKLSAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR0xFTkdUSCk7Ci0gICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPSBnZXRfZGF0YV9zaXplKHdpbmZvKSkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1dST05HTEVOR1RIKTsKKyAgICAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOworICAgICAgICB9IGVsc2UgaWYgKCh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfU1RSTEVOKSAmJgorICAgICAgICAgICAgKG1lbWNocihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLCAnXDAnLAorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4pICE9IE5VTEwpKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9XUk9OR1ZBTFVFKTsKKyAgICAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMjcsMTYgKzI4NywxNiBAQAogICAgICAgICAvKgogICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlciAKICAgICAgICAgICovCi0gICAgICAgIG9sZF9kYXRhID0gbmV0c25tcF9tZW1kdXAod2luZm8tPmRhdGEsIHdpbmZvLT5kYXRhX3NpemUpOworICAgICAgICBvbGRfZGF0YSA9CisgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfY2FjaGVfY3JlYXRlKHdpbmZvLT5kYXRhLCBnZXRfZGF0YV9zaXplKHdpbmZvKSk7CiAgICAgICAgIGlmIChvbGRfZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKICAgICAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIndhdGNoZXIiLCBvbGRfZGF0YSwgZnJlZSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIndhdGNoZXIiLCBvbGRfZGF0YSwgJmZyZWVfd3JhcHBlcikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKQEAgLTE0OSwxOSArMzA5LDIzIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHVwZGF0ZSBjdXJyZW50IAogICAgICAgICAgKi8KLSAgICAgICAgbWVtY3B5KHdpbmZvLT5kYXRhLCAodm9pZCAqKXJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgc2V0X2RhdGEod2luZm8sICh2b2lkICopcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgotICAgICAgICBtZW1jcHkod2luZm8tPmRhdGEsCi0gICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywgIndhdGNoZXIiKSwKLSAgICAgICAgICAgICAgIHdpbmZvLT5kYXRhX3NpemUpOworICAgICAgICBvbGRfZGF0YSA9IChuZXRzbm1wX3dhdGNoZXJfY2FjaGUqKW5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLCAid2F0Y2hlciIpOworICAgICAgICBzZXRfZGF0YSh3aW5mbywgb2xkX2RhdGEtPmRhdGEsIG9sZF9kYXRhLT5zaXplKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICAgICAgd2luZm8tPmRhdGFfc2l6ZSA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW47CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIndhdGNoZXIgaGFuZGxlciBjYWxsZWQgd2l0aCBhbiB1bmtub3duIG1vZGU6ICVkXG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKIAogICAgIH0KIApAQCAtMjAwLDYgKzM2NCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZ2luZm8pOyAgIC8qIFhYWCAtIG9yIGluc3RhbmNlPyAqLwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUdJU1RFUl9USU1FU1RBTVAKIGludAogbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3RpbWVzdGFtcChuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJfdCB0aW1lc3RhbXApCkBAIC0yMTAsNiArMzc1LDcgQEAKIAogICAgIHJldHVybiBuZXRzbm1wX3dhdGNoZWRfdGltZXN0YW1wX3JlZ2lzdGVyKHdoYW5kbGVyLCByZWdpbmZvLCB0aW1lc3RhbXApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUdJU1RFUl9USU1FU1RBTVAgKi8KIAogCiBpbnQKQEAgLTI0NywxMSArNDEzLDEzIEBACiAgICAgICAgICAqIFRpbWVzdGFtcHMgYXJlIGluaGVyZW50bHkgUmVhZC1Pbmx5LAogICAgICAgICAgKiAgc28gZG9uJ3QgbmVlZCB0byBzdXBwb3J0IFNFVCByZXF1ZXN0cy4KICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwogICAgICAgICBoYW5kbGVyLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIC8qIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCkBAIC0yNjUsNiArNDMzLDggQEAKICAgICAgKgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1NQSU5MT0NLCisKIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9nZXRfd2F0Y2hlZF9zcGlubG9ja19oYW5kbGVyKHZvaWQpCiB7CkBAIC0yOTAsNyArNDYwLDcgQEAKICAgICB3aW5mbyAgICAgICAgICAgID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKCh2b2lkICopc3BpbmxvY2ssCiAJCSAgICAgICAgICAgc2l6ZW9mKGludCksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKHJlZ2luZm8sIHdpbmZvKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIocmVnaW5mbywgd2luZm8pOwogfQogCiAKQEAgLTMxNCw2ICs0ODQsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBFbnN1cmUgdGhlIGFzc2lnbmVkIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgb25lCiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKQEAgLTMzNCwxMSArNTA1LDEzIEBACiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAJKCpzcGlubG9jaykrKzsKIAlicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICAvKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9TUElOTE9DSyAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0zNDcsMTE4ICs1MjAsMTQyIEBACiAgICAgICoKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbyhuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8pCit7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8gKmNvcHkgPSBtYWxsb2Moc2l6ZW9mKCpjb3B5KSk7CisgICAgaWYgKGNvcHkpCisJKmNvcHkgPSAqd2luZm87CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3N0YXRpYyBpbnQKK3JlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwgaW50IG1vZGUpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbyA9IE5VTEw7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqd2hhbmRsZXIgPSBOVUxMOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvKiB3YXRjaGluZm8gPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oZGF0YSwgc2l6ZSwgdHlwZSwgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKKyAgICBpZiAod2F0Y2hpbmZvKQorICAgICAgICB3aGFuZGxlciA9IG5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcigpOworICAgIGlmICh3YXRjaGluZm8gJiYgd2hhbmRsZXIpIHsKKyAgICAgICAgd2hhbmRsZXItPm15dm9pZCA9IHdhdGNoaW5mbzsKKwluZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKHdoYW5kbGVyKTsKKyAgICAgICAgcmVnaW5mbyA9CisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgbW9kZSk7CisgICAgfQorICAgIGlmICh3YXRjaGluZm8gJiYgd2hhbmRsZXIgJiYgcmVnaW5mbykgeworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIHdoYW5kbGVyKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZ2luZm8pOworICAgIH0KKyAgICBpZiAod2hhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKHdoYW5kbGVyKTsKKyAgICBlbHNlIGlmICh3YXRjaGluZm8pCisgICAgICAgIGZyZWUod2F0Y2hpbmZvKTsKKyAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfVUxPTkdfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCB1X2xvbmcgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAorICAgICAgICBBU05fVU5TSUdORUQsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JXUklURSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1VMT05HX1NDQUxBUiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfVUxPTkdfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKLSAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCB1X2xvbmcgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAorICAgICAgICBBU05fVU5TSUdORUQsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfUkVBRF9PTkxZX1VMT05HX1NDQUxBUiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9MT05HX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKLSAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBsb25nICksCisgICAgICAgIEFTTl9JTlRFR0VSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9SV1JJVEUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9MT05HX1NDQUxBUiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfTE9OR19TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGxvbmcgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggbG9uZyApLAorICAgICAgICBBU05fSU5URUdFUiwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUk9OTFkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfTE9OR19TQ0FMQVIgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9JTlRfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaW50X3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKLSAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggaW50ICksCi0gICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGludCApLAorICAgICAgICBBU05fSU5URUdFUiwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUldSSVRFKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfSU5UX1NDQUxBUiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfSU5UX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGludCApLAotICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBpbnQgKSwKKyAgICAgICAgQVNOX0lOVEVHRVIsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfUkVBRF9PTkxZX0lOVF9TQ0FMQVIgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0NPVU5URVIzMl9TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKLSAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCB1X2xvbmcgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fQ09VTlRFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggdV9sb25nICksCisgICAgICAgIEFTTl9DT1VOVEVSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9ST05MWSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX1NDQUxBUiAqLwogLyoqICBAfSAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9rZXJuZWwuYyBiL2FnZW50L2tlcm5lbC5jCmluZGV4IGJjNDc2ZGEuLjAwZmRlNzcgMTAwNjQ0Ci0tLSBhL2FnZW50L2tlcm5lbC5jCisrKyBiL2FnZW50L2tlcm5lbC5jCkBAIC0xLDcgKzEsMTkgQEAKLQotLyoKLSAqICAxMyBKdW4gOTEgIHdzYWsgKHdrMHhAYW5kcmV3KSBhZGRlZCBtaXBzIHN1cHBvcnQKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgTmV0LVNOTVAgLSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIGFnZW50IGxpYnJhcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGZpbGUga2VybmVsLmMKKyAqICAgICBOZXQtU05NUCBLZXJuZWwgRGF0YSBBY2Nlc3MgTGlicmFyeS4KKyAqICAgICBQcm92aWRlcyBhY2Nlc3MgdG8ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGZvciBzeXN0ZW1zIHRoYXQKKyAqICAgICBzdXBwb3J0IGl0LgorICogQGF1dGhvciAgIFNlZSBSRUFETUUgZmlsZSBmb3IgYSBsaXN0IG9mIGNvbnRyaWJ1dG9ycwogICovCisvKiBDb3B5cmlnaHRzOgorICogICAgIENvcHlyaWdodCBob2xkZXJzIGFyZSBsaXN0ZWQgaW4gUkVBRE1FIGZpbGUuCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLiBMaWNlbnNlIHRlcm1zIGFyZSBzcGVjaWZpZWQKKyAqICAgICBpbiBDT1BZSU5HIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKQEAgLTQwLDcgKzUyLDcgQEAKIAogCiAjaWYgSEFWRV9LVk1fSAota3ZtX3QgICAgICAgICAgKmtkOwora3ZtX3QgKmtkID0gTlVMTDsKIAogLyoqCiAgKiBJbml0aWFsaXplIHRoZSBzdXBwb3J0IGZvciBhY2Nlc3Npbmcga2VybmVsIHZpcnR1YWwgbWVtb3J5LgpAQCAtNTYsNiArNjgsMTIgQEAKICAgICBjaGFyICAgICAgICAgICAgZXJyWzQwOTZdOwogCiAgICAga2QgPSBrdm1fb3BlbmZpbGVzKE5VTEwsIE5VTEwsIE5VTEwsIE9fUkRPTkxZLCBlcnIpOworICAgIGlmICgha2QpCisjaWZkZWYgS1ZNX05PX0ZJTEVTCisJa2QgPSBrdm1fb3BlbmZpbGVzKE5VTEwsIE5VTEwsIE5VTEwsIEtWTV9OT19GSUxFUywgZXJyKTsKKyNlbHNlCisJa2QgPSBrdm1fb3BlbmZpbGVzKE5VTEwsICIvZGV2L251bGwiLCBOVUxMLCBPX1JET05MWSwgZXJyKTsKKyNlbmRpZgogICAgIGlmICgha2QgJiYgIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfQ1JJVCwgImluaXRfa21lbToga3ZtX29wZW5maWxlcyBmYWlsZWQ6ICVzXG4iLCBlcnIpOwpAQCAtNzMsMTggKzkxLDE4IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotCi0vKgotICogIGtsb29rdXA6CisvKiogUmVhZHMga2VybmVsIG1lbW9yeS4KKyAqICBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIGluIGttZW0sIHRoZW4KKyAqICBkb2VzIGEgcmVhZCBvZiBnaXZlbiBhbW91bnQgb2IgYnl0ZXMgaW50byB0YXJnZXQgYnVmZmVyLgogICoKLSAqICBJdCBzZWVrcyB0byB0aGUgbG9jYXRpb24gIG9mZiAgaW4ga21lbQotICogIEl0IGRvZXMgYSByZWFkIGludG8gIHRhcmdldCAgb2YgIHNpeiAgYnl0ZXMuCisgKiBAcGFyYW0gb2ZmIFRoZSBsb2NhdGlvbiB0byBzZWVrLgogICoKLSAqICBSZXR1cm4gMCBvbiBmYWlsdXJlIGFuZCAxIG9uIHN1Y2Vzcy4KKyAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBidWZmZXIgdG8gcmVhZCBpbnRvLgogICoKKyAqIEBwYXJhbSBzaXogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKgorICogQHJldHVybiBnaXZlcyAxIG9uIHN1Y2Nlc3MgYW5kIDAgb24gZmFpbHVyZS4KICAqLwotCi0KIGludAoga2xvb2t1cCh1bnNpZ25lZCBsb25nIG9mZiwgdm9pZCAqdGFyZ2V0LCBzaXplX3Qgc2l6KQogewpAQCAtMTA3LDYgKzEyNSwxOCBAQAogICAgIHJldHVybiAxOwogfQogCisvKiogQ2xvc2VzIHRoZSBrZXJuZWwgbWVtb3J5IHN1cHBvcnQuCisgKi8KK3ZvaWQKK2ZyZWVfa21lbSh2b2lkKQoreworICAgIGlmIChrZCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGt2bV9jbG9zZShrZCk7CisgICAgICBrZCA9IE5VTEw7CisgICAgfQorfQorCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfS1ZNX0ggKi8KIAogc3RhdGljIG9mZl90ICAgIGtsc2VlayhvZmZfdCk7CkBAIC0xNTEsMTkgKzE4MSwxNyBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLQotLyoKKy8qKiBAcHJpdmF0ZQogICogIFNlZWsgaW50byB0aGUga2VybmVsIGZvciBhIHZhbHVlLgogICovCi1zdGF0aWMgICAgICAgICAgb2ZmX3QKK3N0YXRpYyBvZmZfdAoga2xzZWVrKG9mZl90IGJhc2UpCiB7CiAgICAgcmV0dXJuIChsc2VlayhrbWVtLCAob2ZmX3QpIGJhc2UsIFNFRUtfU0VUKSk7CiB9CiAKLQotLyoKLSAqICBSZWFkIGZyb20gdGhlIGtlcm5lbCAKKy8qKiBAcHJpdmF0ZQorICogIFJlYWQgZnJvbSB0aGUga2VybmVsLgogICovCiBzdGF0aWMgaW50CiBrbHJlYWQoY2hhciAqYnVmLCBpbnQgYnVmbGVuKQpAQCAtMTcxLDE4ICsxOTksMTggQEAKICAgICByZXR1cm4gKHJlYWQoa21lbSwgYnVmLCBidWZsZW4pKTsKIH0KIAotCi0vKgotICogIGtsb29rdXA6CisvKiogUmVhZHMga2VybmVsIG1lbW9yeS4KKyAqICBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIGluIGttZW0sIHRoZW4KKyAqICBkb2VzIGEgcmVhZCBvZiBnaXZlbiBhbW91bnQgb2IgYnl0ZXMgaW50byB0YXJnZXQgYnVmZmVyLgogICoKLSAqICBJdCBzZWVrcyB0byB0aGUgbG9jYXRpb24gIG9mZiAgaW4ga21lbQotICogIEl0IGRvZXMgYSByZWFkIGludG8gIHRhcmdldCAgb2YgIHNpeiAgYnl0ZXMuCisgKiBAcGFyYW0gb2ZmIFRoZSBsb2NhdGlvbiB0byBzZWVrLgogICoKLSAqICBSZXR1cm4gMCBvbiBmYWlsdXJlIGFuZCAxIG9uIHN1Y2Vzcy4KKyAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBidWZmZXIgdG8gcmVhZCBpbnRvLgogICoKKyAqIEBwYXJhbSBzaXogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKgorICogQHJldHVybiBnaXZlcyAxIG9uIHN1Y2Nlc3MgYW5kIDAgb24gZmFpbHVyZS4KICAqLwotCi0KIGludAoga2xvb2t1cCh1bnNpZ25lZCBsb25nIG9mZiwgdm9pZCAqdGFyZ2V0LCBzaXplX3Qgc2l6KQogewpAQCAtMjEyLDYgKzI0MCwyNyBAQAogICAgIHJldHVybiAoMSk7CiB9CiAKKy8qKiBDbG9zZXMgdGhlIGtlcm5lbCBtZW1vcnkgc3VwcG9ydC4KKyAqLwordm9pZAorZnJlZV9rbWVtKHZvaWQpCit7CisgICAgaWYgKHN3YXAgPj0gMCkgeworICAgICAgICBjbG9zZShzd2FwKTsKKyAgICAgICAgc3dhcCA9IC0xOworICAgIH0KKyAgICBpZiAobWVtID49IDApIHsKKyAgICAgICAgY2xvc2UobWVtKTsKKyAgICAgICAgbWVtID0gLTE7CisgICAgfQorICAgIGlmIChrbWVtID49IDApIHsKKyAgICAgICAgY2xvc2Uoa21lbSk7CisgICAgICAgIGttZW0gPSAtMTsKKyAgICB9Cit9CisKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9LVk1fSCAqLwogCisjZWxzZQoraW50IHVudXNlZDsJLyogU3VwcHJlc3MgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmcgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9DQU5fVVNFX05MSVNUICovCmRpZmYgLS1naXQgYS9hZ2VudC9rZXJuZWwuaCBiL2FnZW50L2tlcm5lbC5oCmluZGV4IGViNmE3NGMuLjEzMTY4N2EgMTAwNjQ0Ci0tLSBhL2FnZW50L2tlcm5lbC5oCisrKyBiL2FnZW50L2tlcm5lbC5oCkBAIC0xLDcgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgTmV0LVNOTVAgLSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIGFnZW50IGxpYnJhcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGZpbGUga2VybmVsLmgKKyAqICAgICBOZXQtU05NUCBLZXJuZWwgRGF0YSBBY2Nlc3MgTGlicmFyeSAtIGhlYWRlci4KKyAqICAgICBQcm92aWRlcyBhY2Nlc3MgdG8ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGZvciBzeXN0ZW1zIHRoYXQKKyAqICAgICBzdXBwb3J0IGl0LgorICogQGF1dGhvciAgIFNlZSBSRUFETUUgZmlsZSBmb3IgYSBsaXN0IG9mIGNvbnRyaWJ1dG9ycworICovCisvKiBDb3B5cmlnaHRzOgorICogICAgIENvcHlyaWdodCBob2xkZXJzIGFyZSBsaXN0ZWQgaW4gUkVBRE1FIGZpbGUuCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLiBMaWNlbnNlIHRlcm1zIGFyZSBzcGVjaWZpZWQKKyAqICAgICBpbiBDT1BZSU5HIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZkZWYgTkVUU05NUF9DQU5fVVNFX05MSVNUCiBleHRlcm4gaW50ICAgICAgaW5pdF9rbWVtKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50ICAgICAga2xvb2t1cCh1bnNpZ25lZCBsb25nLCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCAgICAgZnJlZV9rbWVtKHZvaWQpOwogI2RlZmluZSBORVRTTk1QX0tMT09LVVAoeCx5LHopIGtsb29rdXAoKHVuc2lnbmVkIGxvbmcpIHgseSx6KQogI2Vsc2UKICNkZWZpbmUgTkVUU05NUF9LTE9PS1VQKHgseSx6KSAoMCkKQEAgLTExLDMgKzI4LDQgQEAKICNpbmNsdWRlIDxrdm0uaD4KIGV4dGVybiBrdm1fdCAgICprZDsKICNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliX21vZHVsZXMuYyBiL2FnZW50L21pYl9tb2R1bGVzLmMKaW5kZXggOTVlNDY5NS4uY2RlMzE3ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliX21vZHVsZXMuYworKysgYi9hZ2VudC9taWJfbW9kdWxlcy5jCkBAIC0xNywxMSArMTcsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0zMyw5ICsyOSw2IEBACiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtNDksOSArNDIsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaD4KICNpbmNsdWRlICJtaWJfbW9kdWxlX2luY2x1ZGVzLmgiCi0jaWZkZWYgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotI2luY2x1ZGUgIm1pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oIgotI2VuZGlmCiAKIHN0YXRpYyBpbnQgbmVlZF9zaHV0ZG93biA9IDA7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCBiL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZAppbmRleCBkZWFiZjAyLi5hNGU5NzExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kCkBAIC04LDU1ICs4LDY0IEBACiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY1LDYgKzc0LDcgQEAKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAxLDY5ICsxMTEsNzEgQEAKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIGhlYWRlcl9jb21wbGV4LmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IGhlYWRlcl9jb21wbGV4LmgKIC4va2VybmVsX3N1bm9zNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2tlcm5lbF9zdW5vczUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4va2VybmVsX3N1bm9zNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTcyLDYgKzE4NCw3IEBACiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIwOCw2NCArMjIxLDcwIEBACiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB0ZXN0aGFuZGxlci5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3Rlc3RoYW5kbGVyLmxvOiB0ZXN0aGFuZGxlci5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNzQsNiArMjkzLDcgQEAKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMTAsNjkxICszMzAsNzYgQEAKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCi0uL3V0aWxfZnVuY3MubG86IHV0aWxpdGllcy9leGVjdXRlLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHN0cnVjdC5oCisuL3V0aWxfZnVuY3MubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdXRpbF9mdW5jcy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdXRpbF9mdW5jcy5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIHV0aWxpdGllcy9leGVjdXRlLmgKIC4vdXRpbF9mdW5jcy5sbzogdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmgKIC4vd2luRXh0RExMLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vd2luRXh0RExMLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vd2luRXh0RExMLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuL1Jtb24vYWd1dGlsLmggLi9SbW9uL2FndXRpbF9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9hbGFybS5sbzogLi9SbW9uL2FsYXJtLmggLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93X2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9SbW9uL2V2ZW50LmxvOiAuL1Jtb24vZXZlbnQuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi9SbW9uL2hpc3RvcnkuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL1Jtb24vcm93cy5sbzogLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93cy5oIC4vUm1vbi9yb3dfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogc3RydWN0LmggLi9SbW9uL3N0YXRpc3RpY3MuaCAuL1Jtb24vYWd1dGlsX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi9SbW9uL3Jvd19hcGkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTAwMyw2ICs0MDgsNyBAQAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA0MCw2NiArNDQ2LDcxIEBACiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9hZ2VudC9leHRlbmQubG86IGFnZW50L2V4dGVuZC5oIHV0aWxpdGllcy9leGVjdXRlLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCi0uL2FnZW50L2V4dGVuZC5sbzogbWliZGVmcy5oCisuL2FnZW50L2V4dGVuZC5sbzogYWdlbnQvZXh0ZW5kLmggdXRpbGl0aWVzL2V4ZWN1dGUuaCBzdHJ1Y3QuaAorLi9hZ2VudC9leHRlbmQubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIG1pYmRlZnMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTEwOCw2ICs1MTksNyBAQAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExNDQsNjUgKzU1Niw3MCBAQAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBhZ2VudC9uc0NhY2hlLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiBhZ2VudC9uc0NhY2hlLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyMTEsNiArNjI4LDcgQEAKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjQ3LDY1ICs2NjUsNzAgQEAKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggYWdlbnQvbnNEZWJ1Zy5oCi0uL2FnZW50L25zRGVidWcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogYWdlbnQvbnNEZWJ1Zy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzE0LDYgKzczNyw3IEBACiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzUwLDY1ICs3NzQsNzAgQEAKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBhZ2VudC9uc0xvZ2dpbmcuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogYWdlbnQvbnNMb2dnaW5nLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MTcsNiArODQ2LDcgQEAKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDU0LDY0ICs4ODQsNjkgQEAKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNTIwLDYgKzk1NSw3IEBACiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNTU3LDY0ICs5OTMsNjkgQEAKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjIzLDYgKzEwNjQsNyBAQAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNjYwLDY0ICsxMTAyLDY5IEBACiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTcyNiw2ICsxMTczLDcgQEAKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTc2Myw2NSArMTIxMSw3MCBAQAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9hZ2VudC9zbm1wZC5oIGFnZW50eC9hZ2VudHhfY29uZmlnLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IGFnZW50eC9wcm90b2NvbC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xODMwLDYgKzEyODMsNyBAQAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE4NjcsMTY4ICsxMzIxLDcwIEBACiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogYWdlbnR4L3Byb3RvY29sLmggYWdlbnR4L2NsaWVudC5oIGFnZW50eC9zdWJhZ2VudC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4uLy4uL2FnZW50L3NubXBkLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogYWdlbnR4L3Byb3RvY29sLmggYWdlbnR4L21hc3Rlcl9hZG1pbi5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMDM3LDYgKzEzOTMsNyBAQAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIwNzQsNjcgKzE0MzEsMTgzIEBACiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvY2xpZW50LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9pbmRleC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogbWliSUkvc3lzT1JUYWJsZS5oIC4vYWdlbnR4L21hc3Rlci5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4vYWdlbnR4L21hc3Rlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9hZ2VudC9zbm1wZC5oIGFnZW50eC9wcm90b2NvbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IGFnZW50eC9tYXN0ZXJfYWRtaW4uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjE0Myw2NSArMTYxNiw3MCBAQAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IGFnZW50eC9wcm90b2NvbC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMjEwLDYgKzE2ODgsNyBAQAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjI0Niw2OCArMTcyNSwxODQgQEAKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCAuLi8uLi9hZ2VudC9zbm1wZC5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogYWdlbnR4L3Byb3RvY29sLmggYWdlbnR4L2NsaWVudC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9hZ2VudC9zbm1wZC5oIGFnZW50eC9wcm90b2NvbC5oIGFnZW50eC9jbGllbnQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IGFnZW50eC9hZ2VudHhfY29uZmlnLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogbWliSUkvc3lzT1JUYWJsZS5oIC4vYWdlbnR4L3N1YmFnZW50LmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi9hZ2VudHgvc3ViYWdlbnQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjMxNiw2ICsxOTExLDcgQEAKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjM1Myw2NCArMTk0OSw2OSBAQAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI0MTksNiArMjAyMCw3IEBACiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI0NTYsNjcgKzIwNTgsNzIgQEAKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4vZGlzbWFuL210ZUV2ZW50VGFibGUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjUyNSw2ICsyMTMyLDcgQEAKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNTYyLDY1ICsyMTcwLDcwIEBACiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNjI5LDYgKzIyNDIsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNjY2LDY2ICsyMjgwLDcxIEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI3MzQsNiArMjM1Myw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNzcxLDY2ICsyMzkxLDcxIEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjgzOSw2ICsyNDY0LDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yODc2LDY2ICsyNTAyLDcxIEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yOTQ0LDYgKzI1NzUsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI5ODEsNiArMjYxMyw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCkBAIC0yOTg5LDYyICsyNjIyLDY2IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZUV2ZW50VGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzA1Myw2ICsyNjkwLDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMDkwLDY2ICsyNzI4LDcxIEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMTU4LDYgKzI4MDEsNyBAQAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMTk1LDYzICsyODM5LDY4IEBACiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMyNjAsNiArMjkwOSw3IEBACiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzI5Nyw2NCArMjk0Nyw2OSBAQAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMzNjMsNiArMzAxOCw3IEBACiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzM5OSwxNzIgKzMwNTUsNzAgQEAKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IHN0cnVjdC5oIC4vZXhhbXBsZXMvZXhhbXBsZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY29sdW1ucy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vZXhhbXBsZXMvZXhhbXBsZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNTczLDYgKzMxMjcsNyBAQAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzYxMCw2NSArMzE2NSwxODMgQEAKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NvbHVtbnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM2NzcsNjcgKzMzNTAsNzIgQEAKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNzQ2LDY2ICszNDI0LDcxIEBACiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM4MTQsNiArMzQ5Nyw3IEBACiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zODUwLDY0ICszNTM0LDcwIEBACiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbm90aWZpY2F0aW9uLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IG5vdGlmaWNhdGlvbi5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zOTE2LDYgKzM2MDYsNyBAQAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM5NTMsNjMgKzM2NDQsNjggQEAKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00MDE4LDYgKzM3MTQsNyBAQAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQwNTQsNjUgKzM3NTEsNzEgQEAKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IHN0cnVjdC5oIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQxMjEsNiArMzgyNCw3IEBACiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDE1OCw2NCArMzg2Miw2OSBAQAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQyMjQsNiArMzkzMyw3IEBACiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC00MjMyLDYzICszOTQyLDY3IEBACiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4vaG9zdC9ocl9kZXZpY2UuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaCBob3N0X3Jlcy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00Mjk3LDYgKzQwMTEsNyBAQAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQzMDcsNjIgKzQwMjIsNjYgQEAKIC4vaG9zdC9ocl9kaXNrLmxvOiAuL2hvc3QvaHJfZGlzay5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00MzcxLDYgKzQwOTAsNyBAQAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDQwOCw2NiArNDEyOCwyOTUgQEAKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfZmlsZXN5cy5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi9ob3N0L2hyX3N0b3JhZ2UuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IGhvc3RfcmVzLmggLi9ob3N0L2hyX2ZpbGVzeXMuaCAuL2hvc3QvaHJfc3RvcmFnZS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi9ob3N0L2hyX2Rpc2suaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiBob3N0X3Jlcy5oIC4vaG9zdC9ocmhfZmlsZXN5cy5oIC4vaG9zdC9ocmhfc3RvcmFnZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4vaG9zdC9ocl9kaXNrLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJoX2ZpbGVzeXMuaCAuL2hvc3QvaHJoX3N0b3JhZ2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuL2hvc3QvaHJfZGlzay5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NDc2LDYgKzQ0MjUsNyBAQAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDUxMyw2NiArNDQ2Myw3MSBAQAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiBob3N0X3Jlcy5oIG1pYklJL2ludGVyZmFjZXMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4vaG9zdC9ocl9uZXR3b3JrLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaCBob3N0X3Jlcy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggaG9zdF9yZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ1ODEsNiArNDUzNiw3IEBACiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQ1OTAsNjMgKzQ1NDYsNjcgQEAKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuL2hvc3QvaHJfb3RoZXIuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDY1NSw2ICs0NjE1LDcgQEAKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQ2NjIsNjYgKzQ2MjMsNzAgQEAKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4vaG9zdC9ocl9wYXJ0aXRpb24uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi9ob3N0L2hyX2ZpbGVzeXMuaCAuL2hvc3QvaHJfZGlzay5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuL2hvc3QvaHJfcGFydGl0aW9uLmggLi9ob3N0L2hyX2ZpbGVzeXMuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi9ob3N0L2hyX2Rpc2suaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NzMwLDYgKzQ2OTUsNyBAQAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC00NzM3LDY1ICs0NzAzLDcxIEBACiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4vaG9zdC9ocl9wcmludC5oIHN0cnVjdC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IHV0aWxfZnVuY3MuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuL2hvc3QvaHJfcHJpbnQuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKKy4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL2hvc3QvaHJfcHJpbnQubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL2hvc3QvaHJfcHJpbnQubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDgwNCw2ICs0Nzc2LDcgQEAKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQ4NDEsNjggKzQ4MTQsNzMgQEAKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9ob3N0L2hyX3Byb2MubG86IGhvc3RfcmVzLmggLi9ob3N0L2hyX3Byb2MuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyX3Byb2MubG86IGhvc3RfcmVzLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuL2hvc3QvaHJfcHJvYy5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaAogLi9ob3N0L2hyX3Byb2MubG86IHVjZC1zbm1wL2xvYWRhdmUuaCBtaWJkZWZzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00OTExLDYgKzQ4ODksNyBAQAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQ5MTgsOCArNDg5Nyw3IEBACiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi9ob3N0L2hyX3N0b3JhZ2UuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4vaG9zdC9ocl9maWxlc3lzLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuL2hvc3QvaHJfc3RvcmFnZS5oIC4vaG9zdC9ocl9maWxlc3lzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDk1MSw2NSArNDkyOSwxODAgQEAKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MDE4LDYgKzUxMTEsNyBAQAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNTAyNywzMiArNTEyMSw1MiBAQAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi9ob3N0L2hyX3N3aW5zdC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC01MDYyLDIyICs1MTc2LDYgQEAKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC01MDkyLDYgKzUxOTAsNyBAQAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC01MTAyLDYzICs1MjAxLDI4OCBAQAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuL2hvc3QvaHJfc3dydW4uaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4vaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oIC4vaG9zdC9oclNXUnVuVGFibGUuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTE2Nyw2ICs1NDkxLDcgQEAKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTIwMyw2NiArNTUyOCw3MSBAQAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggaG9zdC5oIGhvc3RfcmVzLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4vaG9zdC9ocl9zeXN0ZW0uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBob3N0LmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IGhvc3RfcmVzLmggLi9ob3N0L2hyX3N5c3RlbS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTI3MSw2ICs1NjAxLDcgQEAKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTMwOCw2NyArNTYzOSw3MiBAQAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi9pcC1taWIvaXBfc2NhbGFycy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9hdC5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS9hdC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTM3Nyw2ICs1NzEzLDcgQEAKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTQxNCw2OCArNTc1MSw3MyBAQAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCAuL21pYklJL2F0LmgKIC4vbWliSUkvYXQubG86IC4vbWliSUkvaW50ZXJmYWNlcy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvaWNtcC5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTU0ODQsNiArNTgyNiw3IEBACiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTUyMSw2NiArNTg2NCw3MyBAQAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS9pY21wLmxvOiBzdHJ1Y3QuaCAuL21pYklJL2ljbXAuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvaWNtcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvaWNtcC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01NTg5LDYgKzU5MzksNyBAQAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTU2MjYsMTc2ICs1OTc3LDc3IEBACiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi9taWJJSS9pbnRlcmZhY2VzLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9taWJJSS9pcC5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggdXRpbF9mdW5jcy5oCi0uL21pYklJL2lwLmxvOiBzdHJ1Y3QuaCAuL21pYklJL2lwLmggLi9taWJJSS92YXJfcm91dGUuaAotLi9taWJJSS9pcC5sbzogLi9taWJJSS9yb3V0ZV93cml0ZS5oIC4vbWliSUkvYXQuaCAuL21pYklJL2lwQWRkci5oCi0uL21pYklJL2lwLmxvOiAuL21pYklJL2ludGVyZmFjZXMuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTU4MDQsNiArNjA1Niw3IEBACiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01ODQxLDE3NyArNjA5NCwxODkgQEAKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuL21pYklJL2lwLmggLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuL21pYklJL2F0LmggLi9taWJJSS9pbnRlcmZhY2VzLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL3JvdXRlX2hlYWRlcnMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NvbHVtbnMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS92YXJfcm91dGUuaAorLi9taWJJSS9pcEFkZHIubG86IC4vbWliSUkvYXQuaCAuL21pYklJL2ludGVyZmFjZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9taWJJSS9pcC5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvaXAubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCAuL21pYklJL2lwLmgKKy4vbWliSUkvaXAubG86IC4vbWliSUkvdmFyX3JvdXRlLmggLi9taWJJSS9yb3V0ZV93cml0ZS5oIC4vbWliSUkvYXQuaAorLi9taWJJSS9pcC5sbzogLi9taWJJSS9pcEFkZHIuaCAuL21pYklJL2ludGVyZmFjZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4vbWliSUkvcm91dGVfaGVhZGVycy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYwMjAsNiArNjI4NSw3IEBACiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTYwNTcsNjUgKzYzMjMsMTg1IEBACiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2VudW1zLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jb2x1bW5zLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2VudW1zLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvdmFyX3JvdXRlLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYxMjQsNjYgKzY1MTAsNzEgQEAKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjE5Miw2ICs2NTgzLDcgQEAKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02MjI5LDY3ICs2NjIxLDcxIEBACiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi9taWJJSS9pcHY2LmgKLS4vbWliSUkvaXB2Ni5sbzogLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oCi0uL21pYklJL2lwdjYubG86IC4vbWliSUkvaW50ZXJmYWNlcy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oIC4vbWliSUkvaXB2Ni5oIC4vbWliSUkvdmFyX3JvdXRlLmgKKy4vbWliSUkvaXB2Ni5sbzogLi9taWJJSS9yb3V0ZV93cml0ZS5oIC4vbWliSUkvYXQuaCAuL21pYklJL2ludGVyZmFjZXMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjI5OCw2ICs2Njk0LDcgQEAKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTYzMzQsNjYgKzY3MzEsNzAgQEAKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiBzdHJ1Y3QuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4vbWliSUkva2VybmVsX2xpbnV4LmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4vbWliSUkva2VybmVsX2xpbnV4LmggLi9taWJJSS9rZXJuZWxfbWliLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY0MDIsNiArNjgwMyw3IEBACiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjQzOSw2NCArNjg0MSwxNzggQEAKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4vbWliSUkva2VybmVsX25ldGJzZC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuL21pYklJL2tlcm5lbF9zeXNjdGwuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjUwNSw2ICs3MDIxLDcgQEAKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTY1NDIsNjQgKzcwNTksNjkgQEAKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuL21pYklJL210YV9zZW5kbWFpbC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NjA4LDYgKzcxMzAsNyBAQAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02NjQ0LDY2ICs3MTY3LDcxIEBACiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCAuL21pYklJL2lwLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvdmFyX3JvdXRlLmggLi9taWJJSS9yb3V0ZV93cml0ZS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuL21pYklJL2F0LmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NzEyLDYgKzcyNDAsNyBAQAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02NzQ5LDY0ICs3Mjc4LDE4MCBAQAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuL21pYklJL3NldFNlcmlhbE5vLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi9taWJJSS9zbm1wX21pYl81XzUuaCAuL21pYklJL3VwZGF0ZXMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjgxNSw2ICs3NDYwLDcgQEAKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjg1MSw2NSArNzQ5Nyw3MiBAQAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuL21pYklJL3NubXBfbWliLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuL21pYklJL3NubXBfbWliLmggLi9taWJJSS91cGRhdGVzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY5MTgsNiArNzU3MSw3IEBACiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjk1NSw2NiArNzYwOSw3MiBAQAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vYWdlbnQvc25tcGQuaCBhZ2VudHgvc3ViYWdlbnQuaCBhZ2VudHgvY2xpZW50LmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwMjMsNiArNzY4Myw3IEBACiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzA1OSw2NyArNzcyMCw3NyBAQAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogc3RydWN0LmggLi9taWJJSS9zeXN0ZW1fbWliLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi9taWJJSS9zeXN0ZW1fbWliLmggLi9taWJJSS91cGRhdGVzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdGNwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcxMjgsNiArNzc5OSw3IEBACiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03MTY1LDY4ICs3ODM3LDc1IEBACiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvdGNwLmxvOiBzdHJ1Y3QuaCAuL21pYklJL3RjcC5oIC4vbWliSUkvdGNwVGFibGUuaAotLi9taWJJSS90Y3AubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL21pYklJL3RjcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvdGNwLmgKKy4vbWliSUkvdGNwLmxvOiAuL21pYklJL3RjcFRhYmxlLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4vbWliSUkvbWliSUlfY29tbW9uLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03MjM1LDYgKzc5MTQsNyBAQAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03MjcyLDY3ICs3OTUyLDcyIEBACiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIC4vbWliSUkvdGNwLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4vbWliSUkvdGNwVGFibGUuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi9taWJJSS90Y3BUYWJsZS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3VkcC5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03MzQxLDYgKzgwMjYsNyBAQAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzM3OCw2OCArODA2NCw3NSBAQAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggdXRpbF9mdW5jcy5oCi0uL21pYklJL3VkcC5sbzogc3RydWN0LmggLi9taWJJSS91ZHAuaCAuL21pYklJL3VkcFRhYmxlLmgKLS4vbWliSUkvdWRwLmxvOiAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS91ZHAubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCAuL21pYklJL3VkcC5oCisuL21pYklJL3VkcC5sbzogLi9taWJJSS91ZHBUYWJsZS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzQ0OCw2ICs4MTQxLDcgQEAKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzQ4NSw2NSArODE3OSwxNzggQEAKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggLi9taWJJSS91ZHAuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi9taWJJSS91ZHBUYWJsZS5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuL21pYklJL3VkcFRhYmxlLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NTUyLDYgKzgzNTksNyBAQAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzU4OSw2NiArODM5Nyw3MCBAQAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuL21pYklJL3ZhY21fY29uZi5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oIC4uLy4uL2FnZW50L3NubXBkLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuL21pYklJL3ZhY21fY29uZi5oIC4uLy4uL2FnZW50L3NubXBkLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTc2NTcsNiArODQ2OSw3IEBACiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03Njk0LDY0ICs4NTA3LDY5IEBACiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi9taWJJSS92YWNtX2NvbnRleHQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzc2MCw2ICs4NTc4LDcgQEAKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTc3OTcsNjcgKzg2MTYsNzIgQEAKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi9taWJJSS92YWNtX3ZhcnMuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi9taWJJSS92YWNtX3ZhcnMuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuL21pYklJL3JvdXRlX2hlYWRlcnMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzg2Niw2ICs4NjkwLDcgQEAKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTc5MDMsNjggKzg3MjgsNzUgQEAKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuL21pYklJL2lwLmggLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuL21pYklJL2F0LmggLi4vLi4vYWdlbnQva2VybmVsLmggLi9taWJJSS9pbnRlcmZhY2VzLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTc5NzMsNiArODgwNSw3IEBACiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MDA5LDY1ICs4ODQyLDcwIEBACiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi9taXNjL2lwZndhY2MuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pc2MvaXBmd2FjYy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggLi9taXNjL2lwZndhY2MuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODA3Niw2ICs4OTE0LDcgQEAKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MTEzLDY1ICs4OTUyLDcxIEBACiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODE4MCw2ICs5MDI1LDcgQEAKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtODIxNyw2NSArOTA2Myw3MCBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTgyODQsNiArOTEzNSw3IEBACiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtODMyMSw2ICs5MTczLDcgQEAKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCkBAIC04MzMzLDY1ICs5MTg2LDgzMyBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiBzbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IHNubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2FndXRpbC5sbzogLi9SbW9uL2FndXRpbC5oIC4vUm1vbi9hZ3V0aWxfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vYWxhcm0ubG86IC4vUm1vbi9hbGFybS5oIC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd19hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiB1dGlsaXRpZXMvaXF1ZXJ5LmggLi9SbW9uL2FsYXJtVGFibGUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vUm1vbi9ldmVudC5sbzogLi9SbW9uL2V2ZW50LmggLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93X2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4vUm1vbi9oaXN0b3J5LmggLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93X2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL3Jvd3MubG86IC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd3MuaCAuL1Jtb24vcm93X2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4vUm1vbi9zdGF0aXN0aWNzLmggLi9SbW9uL2FndXRpbF9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4vUm1vbi9yb3dfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTg0MDAsNiArMTAwMjEsNyBAQAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04NDM3LDY1ICsxMDA1OSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODUwNCw2ICsxMDEzMSw3IEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04NTQxLDY1ICsxMDE2OSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTg2MDgsNiArMTAyNDEsNyBAQAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04NjQ1LDY1ICsxMDI3OSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODcxMiw2ICsxMDM1MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04NzQ5LDY1ICsxMDM4OSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTg4MTYsNiArMTA0NjEsNyBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04ODUzLDY1ICsxMDQ5OSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODkyMCw2ICsxMDU3MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04OTU3LDY1ICsxMDYwOSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTkwMjQsNiArMTA2ODEsNyBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkwNjEsNjUgKzEwNzE5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTkxMjgsNiArMTA3OTEsNyBAQAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkxNjUsNjUgKzEwODI5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTkyMzIsNiArMTA5MDEsNyBAQAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05MjY5LDY1ICsxMDkzOSw3MCBAQAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTkzMzYsNiArMTEwMTEsNyBAQAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTM3Myw2NCArMTEwNDksMTc4IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTQzOSw2ICsxMTIyOSw3IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk0NzYsNjQgKzExMjY3LDE3OSBAQAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzoga2VybmVsX3N1bm9zNS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NTQyLDYgKzExNDQ4LDcgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTU3OSw2ICsxMTQ4Niw3IEBACiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCkBAIC05NTg4LDYzICsxMTQ5NiwxODIgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTY1Myw2ICsxMTY4MCw3IEBACiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTY5MCw2OCArMTE3MTgsMTg5IEBACiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggc3RydWN0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IGtlcm5lbF9zdW5vczUuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTc2MCw2ICsxMTkwOSw3IEBACiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05Nzk2LDY1ICsxMTk0Niw3MCBAQAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHNtdXguaCB1dGlsX2Z1bmNzLmgKLS4vc211eC9zbXV4LmxvOiBzdHJ1Y3QuaCBtaWJkZWZzLmggLi4vLi4vYWdlbnQvc25tcGQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNtdXguaAorLi9zbXV4L3NtdXgubG86IG1pYmRlZnMuaCAuLi8uLi9hZ2VudC9zbm1wZC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05ODYzLDYgKzEyMDE4LDcgQEAKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05ODk5LDY1ICsxMjA1NSw3MCBAQAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbXV4LmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNtdXguaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuL3NtdXgvc25tcF9iZ3AuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTk2Niw2ICsxMjEyNyw3IEBACiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMDAyLDY1ICsxMjE2NCw3MCBAQAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc211eC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNtdXguaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi9zbXV4L3NubXBfb3NwZi5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDA2OSw2ICsxMjIzNiw3IEBACiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMTA1LDY1ICsxMjI3Myw3MCBAQAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc211eC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNtdXguaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi9zbXV4L3NubXBfcmlwMi5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDE3Miw2ICsxMjM0NSw3IEBACiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwMjA4LDY1ICsxMjM4MiwxODMgQEAKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogc3RydWN0LmggbWliSUkvc3lzT1JUYWJsZS5oIC4vc25tcHYzL3NubXBFbmdpbmUuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3NubXB2My9zbm1wRW5naW5lLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDI3NSw2ICsxMjU2Nyw3IEBACiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAzMTIsNjUgKzEyNjA1LDcxIEBACiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogbWliSUkvc3lzT1JUYWJsZS5oIC4vc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDM3OSw2ICsxMjY3OCw3IEBACiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwNDE2LDYzICsxMjcxNiwxNzkgQEAKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuL3NubXB2My91c21TdGF0c181XzUuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA0ODEsNiArMTI4OTcsNyBAQAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA1MTcsNjUgKzEyOTM0LDcyIEBACiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3NubXB2My91c21TdGF0cy5sbzogc3RydWN0LmggbWliSUkvc3lzT1JUYWJsZS5oIC4vc25tcHYzL3VzbVN0YXRzLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3NubXB2My91c21TdGF0cy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDU4NCw2ICsxMzAwOCw3IEBACiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwNjIwLDY1ICsxMzA0NSw3MCBAQAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuL3NubXB2My91c21Vc2VyLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3NubXB2My91c21Vc2VyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwNjg3LDYgKzEzMTE3LDcgQEAKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA3MjQsNjUgKzEzMTU1LDcwIEBACiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCB1dGlsX2Z1bmNzLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IHN0cnVjdC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA3OTEsNiArMTMyMjcsNyBAQAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwODI4LDY0ICsxMzI2NSw2OSBAQAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwODk0LDYgKzEzMzM2LDcgQEAKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDkzMSw2NSArMTMzNzQsMTc5IEBACiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmggdGFyZ2V0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwOTk4LDYgKzEzNTU1LDcgQEAKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTAzNSw2NCArMTM1OTMsMTc4IEBACiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExMTAxLDYgKzEzNzczLDcgQEAKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTEzNyw4ICsxMzgxMCwxMSBAQAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogdHVubmVsLmggaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oIHR1bm5lbC5oCisuL3R1bm5lbC90dW5uZWwubG86IGlmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCiAuL3R1bm5lbC90dW5uZWwubG86IGlmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaApAQCAtMTExNDYsNjIgKzEzODIyLDY2IEBACiAuL3R1bm5lbC90dW5uZWwubG86IGlmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaAogLi90dW5uZWwvdHVubmVsLmxvOiBpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RlZnMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTEyMTAsNiArMTM4OTAsNyBAQAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMjQ3LDY2ICsxMzkyOCwxODIgQEAKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4vdWNkLXNubXAvZGlzay5oIG1pYmRlZnMuaCB1dGlsX2Z1bmNzLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi91Y2Qtc25tcC9lcnJvcm1pYi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4vdWNkLXNubXAvZGlzay5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuL3VjZC1zbm1wL2Vycm9ybWliLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oIHN0cnVjdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4vdWNkLXNubXAvZGlzay5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuL3VjZC1zbm1wL2Vycm9ybWliLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExMzE1LDYgKzE0MTEyLDcgQEAKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMzUxLDY1ICsxNDE0OSw3MSBAQAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IHN0cnVjdC5oIC4vdWNkLXNubXAvZGlza2lvLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuL3VjZC1zbm1wL2Rpc2tpby5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTQxOCw2ICsxNDIyMiw3IEBACiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExNDU0LDY1ICsxNDI1OSw3MCBAQAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuL3VjZC1zbm1wL2RsbW9kLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNTIxLDYgKzE0MzMxLDcgQEAKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE1NTgsNjUgKzE0MzY5LDcxIEBACiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi91Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTYyNSw2ICsxNDQ0Miw3IEBACiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE2NjIsNjcgKzE0NDgwLDc2IEBACiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHN0cnVjdC5oIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oIG1pYmRlZnMuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiB1dGlsaXRpZXMvZXhlY3V0ZS5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiB1dGlsaXRpZXMvZXhlY3V0ZS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTczMSw2ICsxNDU1OCw3IEBACiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE3NjcsNjUgKzE0NTk1LDcxIEBACiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4vdWNkLXNubXAvZmlsZS5oIG1pYmRlZnMuaCB1dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IHN0cnVjdC5oIC4vdWNkLXNubXAvZmlsZS5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9maWxlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE4MzQsNiArMTQ2NjgsNyBAQAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExODcwLDY1ICsxNDcwNSw3MCBAQAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCAuL3VjZC1zbm1wL2hwdXguaAotLi91Y2Qtc25tcC9ocHV4LmxvOiBtaWJkZWZzLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4vdWNkLXNubXAvaHB1eC5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE5MzcsNiArMTQ3NzcsNyBAQAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE5NzMsNjYgKzE0ODE0LDE4MiBAQAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IHN0cnVjdC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4vdWNkLXNubXAvbG1TZW5zb3JzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiBoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IHVjZC1zbm1wL2xtc2Vuc29yc01pYi5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjA0MSw2ICsxNDk5OCw3IEBACiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTIwNzgsMjczICsxNTAzNiw3MyBAQAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmggc3RydWN0LmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi91Y2Qtc25tcC9sb2FkYXZlLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc3RydWN0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IHV0aWxfZnVuY3MuaCAuL3VjZC1zbm1wL2xvZ21hdGNoLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4vdWNkLXNubXAvbG9nbWF0Y2guaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTIzNTMsNiArMTUxMTEsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjM5MCw2NiArMTUxNDksMTgxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvbWVtb3J5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4vdWNkLXNubXAvbWVtb3J5X2FpeDQuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4vdWNkLXNubXAvbWVtb3J5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNDU4LDYgKzE1MzMyLDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTI0OTUsNjYgKzE1MzcwLDcxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvbWVtb3J5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNTYzLDYgKzE1NDQzLDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyNjAwLDY2ICsxNTQ4MSw3MSBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjY2OCw2ICsxNTU1NCw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjcwNSw2NiArMTU1OTIsNzQgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIHN0cnVjdC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjc3Myw2ICsxNTY2OCw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyODEwLDY2ICsxNTcwNiw3MSBAQAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaCAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IG1pYmRlZnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI4NzgsNiArMTU3NzksNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjkxNSw2NiArMTU4MTcsNzEgQEAKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI5ODMsNiArMTU4OTAsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTMwMjAsNjYgKzE1OTI4LDcyIEBACiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4vdWNkLXNubXAvbWVtb3J5LmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTMwODgsNiArMTYwMDIsNyBAQAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMTI0LDY2ICsxNjAzOSw3NCBAQAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuL3VjZC1zbm1wL3Bhc3MuaCBtaWJkZWZzLmggLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9wYXNzLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4vdWNkLXNubXAvcGFzc19jb21tb24uaCAuL3VjZC1zbm1wL2V4dGVuc2libGUuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTMxOTIsNiArMTYxMTUsNyBAQAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzIyOSw2NSArMTYxNTMsNzMgQEAKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggc3RydWN0LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzI5Niw2ICsxNjIyOCw3IEBACiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzMzMiw2NyArMTYyNjUsNzQgQEAKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4vdWNkLXNubXAvcGFzc19jb21tb24uaCAuL3VjZC1zbm1wL2V4dGVuc2libGUuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM0MDEsNiArMTYzNDEsNyBAQAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzNDM3LDY2ICsxNjM3OCw3NSBAQAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuL3VjZC1zbm1wL3Byb2MuaCBtaWJkZWZzLmggLi91Y2Qtc25tcC9lcnJvcm1pYi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9wcm9jLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzNTA1LDYgKzE2NDU1LDcgQEAKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTM1NDEsNjQgKzE2NDkyLDcwIEBACiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCAuL3VjZC1zbm1wL3Byb3h5LmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4vdWNkLXNubXAvcHJveHkuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM2MDcsNiArMTY1NjQsNyBAQAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzY0MywxNzAgKzE2NjAxLDczIEBACiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5oIG1pYmRlZnMuaCB1dGlsX2Z1bmNzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogc3RydWN0LmggLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIHV0aWxfZnVuY3MvcmVzdGFydC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM4MTUsNiArMTY2NzYsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzg1MSw2NiArMTY3MTMsNzEgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG1pYmRlZnMuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4vdWNkLXNubXAvdm1zdGF0X2FpeDQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogbWliZGVmcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi91Y2Qtc25tcC92bXN0YXQuaCAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzOTE5LDYgKzE2Nzg2LDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzOTU2LDY2ICsxNjgyNCwxODIgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiBtaWJkZWZzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi91Y2Qtc25tcC92bXN0YXQuaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MDI0LDYgKzE3MDA4LDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQwNjEsNjYgKzE3MDQ2LDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IG1pYmRlZnMuaCAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MTI5LDYgKzE3MTE5LDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0MTY1LDY2ICsxNzE1Niw3MSBAQAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG1pYmRlZnMuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi91Y2Qtc25tcC92bXN0YXRfZHluaXguaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogbWliZGVmcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4vdWNkLXNubXAvdm1zdGF0LmggLi91Y2Qtc25tcC92bXN0YXRfZHluaXguaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQyMzMsNiArMTcyMjksNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQyNzAsNjYgKzE3MjY3LDcyIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IG1pYmRlZnMuaCAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi91Y2Qtc25tcC92bXN0YXQuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDMzOCw2ICsxNzM0MSw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0Mzc0LDY2ICsxNzM3OCw3MSBAQAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIC4vdWNkLXNubXAvdm1zdGF0X2hwdXguaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ0NDIsNiArMTc0NTEsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ0NzksNjcgKzE3NDg5LDcyIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogbWliZGVmcy5oIHN0cnVjdC5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IG1pYmRlZnMuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDU0OCw2ICsxNzU2Myw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0NTg1LDY2ICsxNzYwMSw3MSBAQAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiBtaWJkZWZzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0NjUzLDYgKzE3Njc0LDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0Njg5LDY2ICsxNzcxMSw0MzcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtaWJkZWZzLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogbWliZGVmcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuL3V0aWxfZnVuY3MvRXhpdC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ3NTcsNiArMTgxNTAsNyBAQAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDc5NCw2NSArMTgxODgsNzAgQEAKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuL3V0aWxpdGllcy9leGVjdXRlLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IHVjZC1zbm1wL2Vycm9ybWliLmggbWliZGVmcy5oIC4vdXRpbGl0aWVzL2V4ZWN1dGUuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogc3RydWN0LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0ODYxLDYgKzE4MjYwLDcgQEAKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDg5Nyw2NCArMTgyOTcsNzAgQEAKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbGl0aWVzL2lxdWVyeS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiB1dGlsaXRpZXMvaXF1ZXJ5LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0OTYzLDYgKzE4MzY5LDcgQEAKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0OTk5LDUgKzE4NDA2LDUgQEAKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiBzdHJ1Y3QuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiBiL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmluCmluZGV4IGY2NDFhYjcuLjIzNDFhYjQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmluCisrKyBiL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmluCkBAIC0xLDQgKzEsNiBAQAogdG9wX2J1aWxkZGlyPS4uLy4uCitteXN1YmRpcj1hZ2VudC9taWJncm91cAorCiAjIGN1cnJlbnRseSBhc3N1bWVzIGdjYzogICAgKFhYWDogZml4IHZpYSBjb25maWd1cmUgdGVzdHMpCiBETEZMQUdTPS1mUElDIC1zaGFyZWQKIApAQCAtMTYsNiArMTgsOCBAQAogCiBPVEhFUkNMRUFOVEFSR0VUUz1AZGxsY2xlYW5zQAogCitGRUFUVVJFRklMRT0uLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2ZlYXR1cmVzLW1pYmdyb3Vwcy5oCisKICMgTmVlZCBhIHNwZWNpYWwgLmMgLT4gLm8gZGVmaW5pdGlvbiBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBwbGFjZSB0aGUKICMgb2JqZWN0IGZpbGVzIGluIHRoZSBzdWIgZGlyZWN0b3J5LgogCkBAIC0yNSwxMCArMjksMTIgQEAKIEBtaWJfbW9kdWxlX2xpc3Rfb0AKIEBtaWJfbW9kdWxlX2xpc3RfbG9ACiBAbWliX21vZHVsZV9saXN0X2NACitAbWliX21vZHVsZV9saXN0X2Z0QAogCi1PQkpTICA9ICQobWliX21vZHVsZV9saXN0X28pCi1MT0JKUyA9ICQobWliX21vZHVsZV9saXN0X2xvKQotU1JDUyAgPSAkKG1pYl9tb2R1bGVfbGlzdF9jKQorT0JKUyAgID0gJChtaWJfbW9kdWxlX2xpc3RfbykKK0xPQkpTICA9ICQobWliX21vZHVsZV9saXN0X2xvKQorU1JDUyAgID0gJChtaWJfbW9kdWxlX2xpc3RfYykKK0ZUT0JKUyA9ICQobWliX21vZHVsZV9saXN0X2Z0KQogCiBhbGw6IHN0YW5kYXJkYWxsICQoTE9CSlMpCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24uaCBiL2FnZW50L21pYmdyb3VwL1Jtb24uaAppbmRleCA4NDdlYWE5Li4zYTdkM2E0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi5oCkBAIC00Nyw3ICs0Nyw5IEBACiBjb25maWdfcmVxdWlyZShSbW9uL3Jvd3MpCiBjb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKIGNvbmZpZ19yZXF1aXJlKFJtb24vc3RhdGlzdGljcykKLWNvbmZpZ19yZXF1aXJlKFJtb24vYWxhcm0pCisvKiBvbGRlciBpbXBsZW1lbnRhdGlvbjogKi8KKy8qIGNvbmZpZ19yZXF1aXJlKFJtb24vYWxhcm0pICovCitjb25maWdfcmVxdWlyZShSbW9uL2FsYXJtVGFibGUpCiBjb25maWdfcmVxdWlyZShSbW9uL2hpc3RvcnkpCiBjb25maWdfcmVxdWlyZShSbW9uL2V2ZW50KQogY29uZmlnX2FkZF9taWIoUk1PTi1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYwppbmRleCAzYjBjODdhLi4xMmM2MzQyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KICNpbmNsdWRlICJhZ3V0aWwuaCIKICNpbmNsdWRlICJhZ3V0aWxfYXBpLmgiCiAKQEAgLTIwMiwyMCArMjAwLDcgQEAKIHVfbG9uZwogQUdVVElMX3N5c191cF90aW1lKHZvaWQpCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgIGN1cnJlbnQsIGRlbHRhOwotICAgIGV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KLSAgICBnZXR0aW1lb2ZkYXkoJmN1cnJlbnQsIE5VTEwpOwotICAgIGN1cnJlbnQudHZfc2VjLS07Ci0gICAgY3VycmVudC50dl91c2VjICs9IDEwMDAwMDBMOwotICAgIGRlbHRhLnR2X3NlYyA9IGN1cnJlbnQudHZfc2VjIC0gc3RhcnR0aW1lLnR2X3NlYzsKLSAgICBkZWx0YS50dl91c2VjID0gY3VycmVudC50dl91c2VjIC0gc3RhcnR0aW1lLnR2X3VzZWM7Ci0gICAgaWYgKGRlbHRhLnR2X3VzZWMgPiAxMDAwMDAwTCkgewotICAgICAgICBkZWx0YS50dl91c2VjIC09IDEwMDAwMDBMOwotICAgICAgICBkZWx0YS50dl9zZWMrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVsdGEudHZfc2VjICogMTAwICsgZGVsdGEudHZfdXNlYyAvIDEwMDAwOworICAgIHJldHVybiBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMKaW5kZXggYTA0ZDQxNS4uOTVjYjAxNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYwpAQCAtMjcsMTEgKzI3LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDMsNyArMzksNiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJhbGFybS5oIgogICAgIC8qCiAgICAgICogSW1wbGVtZW50YXRpb24gaGVhZGVycyAKQEAgLTY4NCwyMyArNjc5LDMwIEBACiBvaWQgICAgICAgICAgICAgb2lkYWxhcm1WYXJpYWJsZXNPaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTYsIDMgfTsKIAogc3RydWN0IHZhcmlhYmxlNyBvaWRhbGFybVZhcmlhYmxlc1tdID0gewotICAgIHtJRGFsYXJtSW5kZXgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxfX0sCi0gICAge0lEYWxhcm1JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAyfX0sCi0gICAge0lEYWxhcm1WYXJpYWJsZSwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDN9fSwKLSAgICB7SURhbGFybVNhbXBsZVR5cGUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNH19LAotICAgIHtJRGFsYXJtVmFsdWUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA1fX0sCi0gICAge0lEYWxhcm1TdGFydHVwQWxhcm0sIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLAotICAgICB7MSwgMSwgNn19LAotICAgIHtJRGFsYXJtUmlzaW5nVGhyZXNob2xkLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywKLSAgICAgezEsIDEsIDd9fSwKLSAgICB7SURhbGFybUZhbGxpbmdUaHJlc2hvbGQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLAotICAgICB7MSwgMSwgOH19LAotICAgIHtJRGFsYXJtUmlzaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCA5fX0sCi0gICAge0lEYWxhcm1GYWxsaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCAxMH19LAotICAgIHtJRGFsYXJtT3duZXIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMX19LAotICAgIHtJRGFsYXJtU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDEyfX0KKyAgICB7SURhbGFybUluZGV4LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMX19LAorICAgIHtJRGFsYXJtSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMn19LAorICAgIHtJRGFsYXJtVmFyaWFibGUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAzfX0sCisgICAge0lEYWxhcm1TYW1wbGVUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICB7SURhbGFybVZhbHVlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgIHtJRGFsYXJtU3RhcnR1cEFsYXJtLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDZ9fSwKKyAgICB7SURhbGFybVJpc2luZ1RocmVzaG9sZCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA3fX0sCisgICAge0lEYWxhcm1GYWxsaW5nVGhyZXNob2xkLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDh9fSwKKyAgICB7SURhbGFybVJpc2luZ0V2ZW50SW5kZXgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgOX19LAorICAgIHtJRGFsYXJtRmFsbGluZ0V2ZW50SW5kZXgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMTB9fSwKKyAgICB7SURhbGFybU93bmVyLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMTF9fSwKKyAgICB7SURhbGFybVN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMn19CiB9OwogCiB2b2lkCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmggYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmgKaW5kZXggYWU0OGMyZC4uMDVmMjE1MiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5oCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaApAQCAtMjEsOCArMjEsNiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfQUxBUk1fSAogI2RlZmluZSBfTUlCR1JPVVBfQUxBUk1fSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCiAgICAgLyoKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTgxNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMKQEAgLTAsMCArMSw4NDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEVkaXRpb24gSGlzdG9yeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAjICAgRGF0ZSAgICAgQ29tbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgIHwKK3wgLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLSB8Cit8ICAgMSAwNy8wNS8xOCBDcmVhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMudGFibGVfZGF0YS5jb25mLHYgMS4xMS4yLjEgMjAwNi8wMS8xMSAxNToxNzo0NyBkdHMxMiBFeHAgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCisjaW5jbHVkZSAiYWxhcm1UYWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShxdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqIEluaXRpYWxpemVzIHRoZSBhbGFybVRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9hbGFybVRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAKKyAgICAgKi8KKyAgICBpbml0aWFsaXplX3RhYmxlX2FsYXJtVGFibGUoKTsKK30KKworLyoqIEluaXRpYWxpemUgdGhlIGFsYXJtVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2FsYXJtVGFibGUodm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgYWxhcm1UYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTYsIDMsIDEgfTsKKyAgICBzaXplX3QgICAgICAgICAgYWxhcm1UYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChhbGFybVRhYmxlX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfdGRhdGEgICp0YWJsZV9kYXRhOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJpbml0aWFsaXplX3RhYmxlX2FsYXJtVGFibGUgY2FsbGVkLlxuIikpOworICAgIHJlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJhbGFybVRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworCisgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJhbGFybVRhYmxlIiwgMCk7CisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsICAgLyogaW5kZXg6IGFsYXJtSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fQUxBUk1JTkRFWDsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX0FMQVJNU1RBVFVTOworCisgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIHRhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZSAKKyAgICAgKi8KK30KKworZXh0ZXJuIGludAorZXZlbnRfYXBpX3NlbmRfYWxhcm0odV9jaGFyIGlzX3Jpc2luZywKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBhbGFybV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldmVudF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGFsYXJtZWRfdmFyLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsYXJtZWRfdmFyX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBzYW1wbGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB0aGVfdGhyZXNob2xkLCBjb25zdCBjaGFyICphbGFybV9kZXNjcik7CisKKyNkZWZpbmUgQUxBUk1fU1RSMV9MRU4JMzIKK3R5cGVkZWYgZW51bSB7CisgICAgUk1PTjFfRU5UUllfVkFMSUQgPSAxLAorICAgIFJNT04xX0VOVFJZX0NSRUFURV9SRVFVRVNULAorICAgIFJNT04xX0VOVFJZX1VOREVSX0NSRUFUSU9OLAorICAgIFJNT04xX0VOVFJZX0lOVkFMSUQKK30gUk1PTjFfRU5UUllfU1RBVFVTX1Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0FNUExFX1RZUEVfQUJTT0xVVEUgPQorICAgIDEsCisgICAgU0FNUExFX1RZUEVfREVMVEUKK30gU0FNUExFX1RZUEVfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBBTEFSTV9OT1RISU5HID0KKyAgICAwLAorICAgIEFMQVJNX1JJU0lORywKKyAgICBBTEFSTV9GQUxMSU5HLAorICAgIEFMQVJNX0JPVEgKK30gQUxBUk1fVFlQRV9UOworICAgIC8qCisgICAgICogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgCisgICAgICovCitzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSB7CisgICAgLyoKKyAgICAgKiBJbmRleCB2YWx1ZXMgCisgICAgICovCisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtSW5kZXg7CisKKyAgICAvKgorICAgICAqIENvbHVtbiB2YWx1ZXMgCisgICAgICovCisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtSW50ZXJ2YWw7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybUludGVydmFsOworICAgIG9pZCAgICAgICAgICAgICBhbGFybVZhcmlhYmxlW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgYWxhcm1WYXJpYWJsZV9sZW47CisgICAgb2lkICAgICAgICAgICAgIG9sZF9hbGFybVZhcmlhYmxlW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgb2xkX2FsYXJtVmFyaWFibGVfbGVuOworICAgIGxvbmcgICAgICAgICAgICBhbGFybVNhbXBsZVR5cGU7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVNhbXBsZVR5cGU7CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtVmFsdWU7CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtU3RhcnR1cEFsYXJtOworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1TdGFydHVwQWxhcm07CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtUmlzaW5nVGhyZXNob2xkOworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1SaXNpbmdUaHJlc2hvbGQ7CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtRmFsbGluZ1RocmVzaG9sZDsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtRmFsbGluZ1RocmVzaG9sZDsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1SaXNpbmdFdmVudEluZGV4OworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4OworICAgIGxvbmcgICAgICAgICAgICBhbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1GYWxsaW5nRXZlbnRJbmRleDsKKyAgICBjaGFyICAgICAgICAgICAgYWxhcm1Pd25lcltBTEFSTV9TVFIxX0xFTl07CisgICAgc2l6ZV90ICAgICAgICAgIGFsYXJtT3duZXJfbGVuOworICAgIGNoYXIgICAgICAgICAgICBvbGRfYWxhcm1Pd25lcltBTEFSTV9TVFIxX0xFTl07CisgICAgc2l6ZV90ICAgICAgICAgIG9sZF9hbGFybU93bmVyX2xlbjsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1TdGF0dXM7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVN0YXR1czsKKworICAgIGludCAgICAgICAgICAgICB2YWxpZDsKKyAgICB1bnNpZ25lZCBpbnQgICAgYWxhcm1fcmVnOworICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAgICB1X2xvbmcgICAgICAgICAgbGFzdF9hYnNfdmFsdWU7CisgICAgQUxBUk1fVFlQRV9UICAgIHByZXZfYWxhcm07ICAgICAgICAvKiBOT1RISU5HIHwgUklTSU5HIHwgRkFMTElORyAqLworfTsKKworCit2b2lkCithbGFybVRhYmxlX3J1biggdW5zaWduZWQgaW50IHJlZywgdm9pZCAqY2xpZW50YXJnKQoreworICAgIHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKWNsaWVudGFyZzsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcjsKKyAgICB1X2xvbmcgbmV3X3ZhbHVlOworICAgIGludCByYzsKKworICAgIGlmICghZW50cnkpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKCByZWcgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKgorICAgICAqIFJldHJpZXZlIHRoZSByZXF1ZXN0ZWQgTUlCIHZhbHVlKHMpLi4uCisgICAgICovCisgICAgREVCVUdNU0dUTCgoICJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1UYWJsZV9ydW4gY2FsbGVkXG4iKSk7CisgICAgdmFyID0gKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKVNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdmFyaWFibGVfbGlzdCApOworICAgIGlmICghdmFyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImZhaWxlZCB0byBjcmVhdGUgYWxhcm1UYWJsZSBxdWVyeSB2YXJiaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc25tcF9zZXRfdmFyX29iamlkKCB2YXIsIGVudHJ5LT5hbGFybVZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYXJpYWJsZV9sZW4gKTsKKyAgICAKKyAgICByYyA9IG5ldHNubXBfcXVlcnlfZ2V0KCAgdmFyLCBlbnRyeS0+c2Vzc2lvbiApOworICAgIGlmICggcmMgIT0gU05NUF9FUlJfTk9FUlJPUiApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoICJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1WYXJpYWJsZSBxdWVyeSBmYWlsZWQgKCVkKVxuIiwgcmMpKTsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCXN3aXRjaCAodmFyLT50eXBlKSB7CisgICAgY2FzZSBBU05fSU5URUdFUjoKKyAgICBjYXNlIEFTTl9DT1VOVEVSOgorICAgIGNhc2UgQVNOX1RJTUVUSUNLUzoKKyAgICBjYXNlIEFTTl9HQVVHRToKKyAgICBjYXNlIEFTTl9DT1VOVEVSNjQ6CisgICAgICAgIG5ld192YWx1ZSA9ICp2YXItPnZhbC5pbnRlZ2VyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgicm1vbjphbGFybVRhYmxlIiwgImludmFsaWQgdHlwZSAoJWQpXG4iLCB2YXItPnR5cGUpKTsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFyKTsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgicm1vbjphbGFybVRhYmxlIiwgImFsYXJtSW5kZXguJWxkIGxhc3QgdmFsdWUgKCVsZClcbiIsIGVudHJ5LT5hbGFybUluZGV4LCBlbnRyeS0+bGFzdF9hYnNfdmFsdWUpKTsKKyAgICBERUJVR01TR1RMKCgicm1vbjphbGFybVRhYmxlIiwgImFsYXJtSW5kZXguJWxkIG5ld192YWx1ZSAoJWxkKVxuIiwgZW50cnktPmFsYXJtSW5kZXgsIG5ld192YWx1ZSkpOworCisgICAgZW50cnktPmFsYXJtVmFsdWUgPSAoU0FNUExFX1RZUEVfQUJTT0xVVEUgPT0gZW50cnktPmFsYXJtU2FtcGxlVHlwZSkgPworICAgICAgICBuZXdfdmFsdWUgOiBuZXdfdmFsdWUgLSBlbnRyeS0+bGFzdF9hYnNfdmFsdWU7CisgICAgZW50cnktPmxhc3RfYWJzX3ZhbHVlID0gbmV3X3ZhbHVlOworCisgICAgaWYgKEFMQVJNX1JJU0lORyAhPSBlbnRyeS0+cHJldl9hbGFybSAmJgorICAgICAgICBlbnRyeS0+YWxhcm1WYWx1ZSA+PSBlbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQpIHsKKyAgICAgICAgaWYgKFNOTVBfRVJSX05PRVJST1IgPT0gZXZlbnRfYXBpX3NlbmRfYWxhcm0oMSwgZW50cnktPmFsYXJtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtUmlzaW5nRXZlbnRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYXJpYWJsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtU2FtcGxlVHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtUmlzaW5nVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSaXNpbmciKSkKKyAgICAgICAgICAgIGVudHJ5LT5wcmV2X2FsYXJtID0gQUxBUk1fUklTSU5HOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZmFpbGVkIHRvIHNlbmQgcmlzaW5nIGFsYXJtXG4iKTsKKyAgICB9CisgICAgZWxzZSBpZiAoQUxBUk1fRkFMTElORyAhPSBlbnRyeS0+cHJldl9hbGFybSAmJgorICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhbHVlIDw9IGVudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQpIHsKKyAgICAgICAgaWYgKFNOTVBfRVJSX05PRVJST1IgPT0gZXZlbnRfYXBpX3NlbmRfYWxhcm0oMCwgZW50cnktPmFsYXJtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFyaWFibGVfbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVNhbXBsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFsbGluZyIpKQorICAgICAgICAgICAgZW50cnktPnByZXZfYWxhcm0gPSBBTEFSTV9GQUxMSU5HOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZmFpbGVkIHRvIHNlbmQgZmFsbGluZyBhbGFybVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgREVCVUdNU0dUTCgoInJtb246YWxhcm1UYWJsZSIsICJubyBhbGFybSBzZW50XG4iKSk7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworfQorCit2b2lkCithbGFybVRhYmxlX2VuYWJsZSggc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKmVudHJ5ICkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX2VuYWJsZSBjYWxsZWQuXG4iKSk7CisgICAgaWYgKGVudHJ5LT5hbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKCBlbnRyeS0+YWxhcm1fcmVnICk7CisgICAgICAgIGVudHJ5LT5hbGFybV9yZWcgPSAwOworICAgIH0KKworICAgIGlmIChlbnRyeS0+YWxhcm1JbnRlcnZhbCkgeworICAgICAgICAvKgorICAgICAgICAgKiByZWdpc3RlciBvbmNlIHRvIHJ1biBBU0FQLCBhbmQgYW5vdGhlciB0byBydW4KKyAgICAgICAgICogYXQgdGhlIHRyaWdnZXIgZnJlcXVlbmN5CisgICAgICAgICAqLworICAgICAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKDAsIDAsIGFsYXJtVGFibGVfcnVuLCBlbnRyeSApOworICAgICAgICBlbnRyeS0+YWxhcm1fcmVnID0gc25tcF9hbGFybV9yZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybUludGVydmFsLCBTQV9SRVBFQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3J1biwgZW50cnkgKTsKKyAgICB9Cit9CisKK3ZvaWQKK2FsYXJtVGFibGVfZGlzYWJsZSggc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKmVudHJ5ICkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX2Rpc2FibGUgY2FsbGVkLlxuIikpOworICAgIGlmIChlbnRyeS0+YWxhcm1fcmVnKSB7CisgICAgICAgIHNubXBfYWxhcm1fdW5yZWdpc3RlciggZW50cnktPmFsYXJtX3JlZyApOworICAgICAgICBlbnRyeS0+YWxhcm1fcmVnID0gMDsKKyAgICAgICAgLyogWFhYIC0gcGVyaGFwcyByZWxlYXNlIGFueSBwcmV2aW91cyByZXN1bHRzICovCisgICAgfQorfQorCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK25ldHNubXBfdGRhdGFfcm93ICoKK2FsYXJtVGFibGVfY3JlYXRlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlX2RhdGEsIGxvbmcgYWxhcm1JbmRleCkKK3sKKyAgICBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfY3JlYXRlRW50cnkgY2FsbGVkLlxuIikpOworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3coKTsKKyAgICBpZiAoIXJvdykgeworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcm93LT5kYXRhID0gZW50cnk7CisgICAgZW50cnktPmFsYXJtSW5kZXggPSBhbGFybUluZGV4OworICAgIGVudHJ5LT5hbGFybUludGVydmFsID0gMTsKKyAgICBlbnRyeS0+YWxhcm1TYW1wbGVUeXBlID0gU0FNUExFX1RZUEVfQUJTT0xVVEU7CisgICAgZW50cnktPmFsYXJtU3RhcnR1cEFsYXJtID0gQUxBUk1fQk9USDsKKyAgICBlbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQgPSAxMDsKKyAgICBlbnRyeS0+YWxhcm1GYWxsaW5nVGhyZXNob2xkID0gNTsKKyAgICBlbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4ID0gYWxhcm1JbmRleDsKKyAgICBlbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9IGFsYXJtSW5kZXg7CisgICAgZW50cnktPnByZXZfYWxhcm0gPSBBTEFSTV9OT1RISU5HOworICAgIG5ldHNubXBfdGRhdGFfcm93X2FkZF9pbmRleChyb3csIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGVudHJ5LT5hbGFybUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5hbGFybUluZGV4KSk7CisgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlX2RhdGEsIHJvdyk7CisgICAgcmV0dXJuIHJvdzsKK30KKworLyoKKyAqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAKKyAqLwordm9pZAorYWxhcm1UYWJsZV9yZW1vdmVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwgbmV0c25tcF90ZGF0YV9yb3cgKiByb3cpCit7CisgICAgc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgREVCVUdNU0dUTCgoICJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSBjYWxsZWQuXG4iKSk7CisgICAgaWYgKCFyb3cpCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisgICAgZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGVfZGF0YSwgcm93KTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgYWxhcm1UYWJsZV9kaXNhYmxlKGVudHJ5KTsKKyAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsgICAgICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCisgICAgfQorfQorCisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgYWxhcm1UYWJsZSB0YWJsZSAqLworaW50CithbGFybVRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3RkYXRhICAqdGFibGVfZGF0YTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqdGFibGVfcm93OworICAgIHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICp0YWJsZV9lbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworICAgIG5ldHNubXBfc2Vzc2lvbiAqc2VzcyA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgKnNlY05hbWU7CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX2hhbmRsZXIgY2FsbGVkLlxuIikpOworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1JTlRFUlZBTDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUludGVydmFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVNhbXBsZVR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQUxVRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhcnR1cEFsYXJtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtUmlzaW5nVGhyZXNob2xkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybUZhbGxpbmdUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtUmlzaW5nRXZlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtRmFsbGluZ0V2ZW50SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1Pd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNBTVBMRVRZUEU6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNT1dORVI6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVRVUzoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIGlmICghdGFibGVfcm93KSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9CisgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2NyZWF0ZUVudHJ5KHRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfcm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3cocmVxdWVzdCwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1JTlRFUlZBTDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNBTVBMRVRZUEU6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNT1dORVI6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVRVUzoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1JbnRlcnZhbCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUludGVydmFsOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUludGVydmFsID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbiAvIHNpemVvZihvaWQpOworICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5vYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU2FtcGxlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVNhbXBsZVR5cGU7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXJ0dXBBbGFybSA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVN0YXJ0dXBBbGFybTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0gPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQ7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtUmlzaW5nVGhyZXNob2xkID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUZhbGxpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtUmlzaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ0V2ZW50SW5kZXggPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleDsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPm9sZF9hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1Pd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybU93bmVyX2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybU93bmVyX2xlbjsKKyAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPmFsYXJtT3duZXIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+YWxhcm1Pd25lcikpOworICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+YWxhcm1Pd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybU93bmVyX2xlbiA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TdGF0dXMgPSB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUludGVydmFsID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1JbnRlcnZhbDsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUludGVydmFsID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1WYXJpYWJsZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVZhcmlhYmxlX2xlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNBTVBMRVRZUEU6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVNhbXBsZVR5cGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVNhbXBsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TYW1wbGVUeXBlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhcnR1cEFsYXJtID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TdGFydHVwQWxhcm07CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TdGFydHVwQWxhcm0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ1RocmVzaG9sZDsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ1RocmVzaG9sZCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nVGhyZXNob2xkID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ1RocmVzaG9sZCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4OworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nRXZlbnRJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtRmFsbGluZ0V2ZW50SW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ0V2ZW50SW5kZXggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNT1dORVI6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+YWxhcm1Pd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1Pd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+YWxhcm1Pd25lcikpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPm9sZF9hbGFybU93bmVyLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybU93bmVyX2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXJfbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dmFsaWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJNT04xX0VOVFJZX1ZBTElEOgorICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2VuYWJsZSggdGFibGVfZW50cnkgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBSTU9OMV9FTlRSWV9VTkRFUl9DUkVBVElPTjoKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9kaXNhYmxlKCB0YWJsZV9lbnRyeSApOworI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNlc3Npb24gPSAobmV0c25tcF9zZXNzaW9uICopCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2lxdWVyeV9wZHVfc2Vzc2lvbihyZXFpbmZvLT5hc3AtPnBkdSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWNOYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNOQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlY05hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3MgICA9IG5ldHNubXBfaXF1ZXJ5X3VzZXJfc2Vzc2lvbihzZWNOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbihzZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAidXNlciBuYW1lICVzXG4iLCBzZWNOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVzZXIgbmFtZSAlcyBub3QgZm91bmRcbiIsIHNlY05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biB1c2VyIG5hbWVcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2VzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VzcyA9IG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2VzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJZb3UgbXVzdCBzcGVjaWZ5IGEgZGVmYXVsdCB1c2VyIG5hbWUgdXNpbmcgdGhlIGFnZW50U2VjTmFtZSB0b2tlblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFJNT04xX0VOVFJZX0lOVkFMSUQ6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA3MGIyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmgKQEAgLTAsMCArMSw0MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRWRpdGlvbiBIaXN0b3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICMgICBEYXRlICAgICBDb21tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSAgfAorfCAtLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tIHwKK3wgICAxIDA3LzA1LzE4IENyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy50YWJsZV9kYXRhLmNvbmYsdiAxLjExLjIuMSAyMDA2LzAxLzExIDE1OjE3OjQ3IGR0czEyIEV4cCAkCisgKi8KKyNpZm5kZWYgQUxBUk1UQUJMRV9ICisjZGVmaW5lIEFMQVJNVEFCTEVfSAorCitjb25maWdfcmVxdWlyZSh1dGlsaXRpZXMvaXF1ZXJ5KQorY29uZmlnX3JlcXVpcmUoUm1vbi9hZ3V0aWwpCitjb25maWdfcmVxdWlyZShSbW9uL3Jvd3MpCitjb25maWdfcmVxdWlyZShSbW9uL2V2ZW50KQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9hbGFybVRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSh2b2lkKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGFsYXJtVGFibGVfaGFuZGxlcjsKKworLyoKKyAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGFsYXJtVGFibGUgCisgKi8KKyNkZWZpbmUgQ09MVU1OX0FMQVJNSU5ERVgJCTEKKyNkZWZpbmUgQ09MVU1OX0FMQVJNSU5URVJWQUwJCTIKKyNkZWZpbmUgQ09MVU1OX0FMQVJNVkFSSUFCTEUJCTMKKyNkZWZpbmUgQ09MVU1OX0FMQVJNU0FNUExFVFlQRQkJNAorI2RlZmluZSBDT0xVTU5fQUxBUk1WQUxVRQkJNQorI2RlZmluZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk0JCTYKKyNkZWZpbmUgQ09MVU1OX0FMQVJNUklTSU5HVEhSRVNIT0xECQk3CisjZGVmaW5lIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQJCTgKKyNkZWZpbmUgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWAkJOQorI2RlZmluZSBDT0xVTU5fQUxBUk1GQUxMSU5HRVZFTlRJTkRFWAkJMTAKKyNkZWZpbmUgQ09MVU1OX0FMQVJNT1dORVIJCTExCisjZGVmaW5lIENPTFVNTl9BTEFSTVNUQVRVUwkJMTIKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQUxBUk1UQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMKaW5kZXggY2FiMWQ4Yi4uYmI4N2JmZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYwpAQCAtMTksMTYgKzE5LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDUsOCArNDIsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImV2ZW50LmgiCiAKIC8qCkBAIC01NSw2ICs1MCw4IEBACiAjaW5jbHVkZSAiYWd1dGlsX2FwaS5oIgogI2luY2x1ZGUgInJvd19hcGkuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF9vYmppZCkKKwogLyoKICAqIEZpbGUgc2NvcGUgZGVmaW5pdGlvbnMgc2VjdGlvbiAKICAqLwpAQCAtNzcyLDIzICs3NjksMzQgQEAKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlLCByby9ydyAsIGNhbGxiYWNrIGZuICAsICAgICAgICAgICBMLCBvaWRzdWZmaXggCiAgICAgICovCi0gICAge0VWRU5USU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0VWRU5UREVTQ1JJUFRJT04sIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0VWRU5UVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0VWRU5UQ09NTVVOSVRZLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtFVkVOVExBU1RUSU1FU0VOVCwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtFVkVOVFNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA3fX0KKyAgICB7RVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDF9fSwKKyAgICB7RVZFTlRERVNDUklQVElPTiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7RVZFTlRUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVZFTlRDT01NVU5JVFksIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA0fX0sCisgICAge0VWRU5UTEFTVFRJTUVTRU5ULCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA1fX0sCisgICAge0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA2fX0sCisgICAge0VWRU5UU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDd9fQogfTsKIAogc3RydWN0IHZhcmlhYmxlMiBsb2dUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlLCByby9ydyAsIGNhbGxiYWNrIGZuICAsICAgICAgICAgICBMLCBvaWRzdWZmaXggCiAgICAgICovCi0gICAge0xPR0VWRU5USU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ1RhYmxlLCAyLCB7MSwgMX19LAotICAgIHtMT0dJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0xPR1RJTUUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0xPR0RFU0NSSVBUSU9OLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xvZ1RhYmxlLCAyLCB7MSwgNH19CisgICAge0xPR0VWRU5USU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvZ1RhYmxlLCAyLCB7MSwgMX19LAorICAgIHtMT0dJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0xPR1RJTUUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0xPR0RFU0NSSVBUSU9OLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvZ1RhYmxlLCAyLCB7MSwgNH19CiAKIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaAppbmRleCBkZmNhY2U3Li5iMDNlMTYyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oCkBAIC0yMSwxNCArMjEsMTMgQEAKICNpZm5kZWYgX01JQkdST1VQX0VWRU5UX0gKICNkZWZpbmUgX01JQkdST1VQX0VWRU5UX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKLQotY29uZmlnX3JlcXVpcmUoUm1vbi9hZ3V0aWwpCi1jb25maWdfcmVxdWlyZShSbW9uL3Jvd3MpCi0KICAgICAvKgogICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMgCiAgICAgICovCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X2V2ZW50KHZvaWQpOwogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorCitjb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKK2NvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMKaW5kZXggOWM2ODU2Zi4uYzhlOWMyNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMKQEAgLTI0LDExICsyNCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTQ0LDggKzQwLDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KICNpbmNsdWRlICJoaXN0b3J5LmgiCiAKIC8qCkBAIC02NTYsMTggKzY1MCwyMCBAQAogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7Q1RSTF9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7Q1RSTF9EQVRBU09VUkNFLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgMn19LAotICAgIHtDVFJMX0JVQ0tFVFNSRVFVRVNURUQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLAotICAgICAyLCB7MSwgM319LAotICAgIHtDVFJMX0JVQ0tFVFNHUkFOVEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgNH19LAotICAgIHtDVFJMX0lOVEVSVkFMLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwKLSAgICAgezEsIDV9fSwKLSAgICB7Q1RSTF9PV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwKLSAgICAgezEsIDZ9fSwKLSAgICB7Q1RSTF9TVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDVFJMX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgMX19LAorICAgIHtDVFJMX0RBVEFTT1VSQ0UsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NUUkxfQlVDS0VUU1JFUVVFU1RFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NUUkxfQlVDS0VUU0dSQU5URUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NUUkxfSU5URVJWQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDVFJMX09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDVFJMX1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA3fX0sCiAKIH07CiAKQEAgLTY3OCwzMiArNjc0LDM2IEBACiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7REFUQV9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0RBVEFfU0FNUExFSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgMn19LAotICAgIHtEQVRBX0lOVEVSVkFMU1RBUlQsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAzfX0sCi0gICAge0RBVEFfRFJPUEVWRU5UUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCi0gICAge0RBVEFfT0NURVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fSwKLSAgICB7REFUQV9QS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDZ9fSwKLSAgICB7REFUQV9CUk9BRENBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDd9fSwKLSAgICB7REFUQV9NVUxUSUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDh9fSwKLSAgICB7REFUQV9DUkNBTElHTkVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCA5fX0sCi0gICAge0RBVEFfVU5ERVJTSVpFUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAxMH19LAotICAgIHtEQVRBX09WRVJTSVpFUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAxMX19LAotICAgIHtEQVRBX0ZSQUdNRU5UUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAxMn19LAotICAgIHtEQVRBX0pBQkJFUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMTN9fSwKLSAgICB7REFUQV9DT0xMSVNJT05TLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDE0fX0sCi0gICAge0RBVEFfVVRJTElaQVRJT04sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgMTV9fSwKKyAgICB7REFUQV9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxfX0sCisgICAge0RBVEFfU0FNUExFSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtEQVRBX0lOVEVSVkFMU1RBUlQsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAzfX0sCisgICAge0RBVEFfRFJPUEVWRU5UUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCA0fX0sCisgICAge0RBVEFfT0NURVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7REFUQV9QS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7REFUQV9CUk9BRENBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7REFUQV9NVUxUSUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7REFUQV9DUkNBTElHTkVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCA5fX0sCisgICAge0RBVEFfVU5ERVJTSVpFUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxMH19LAorICAgIHtEQVRBX09WRVJTSVpFUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxMX19LAorICAgIHtEQVRBX0ZSQUdNRU5UUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxMn19LAorICAgIHtEQVRBX0pBQkJFUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMTN9fSwKKyAgICB7REFUQV9DT0xMSVNJT05TLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDE0fX0sCisgICAge0RBVEFfVVRJTElaQVRJT04sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMTV9fSwKIAogfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaAppbmRleCAwOTRiZWU0Li5kMmM0MDFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaApAQCAtMjEsOCArMjEsNiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfSElTVE9SWV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9ISVNUT1JZX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKLQogICAgIC8qCiAgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcyAKICAgICAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vcm93X2FwaS5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmgKaW5kZXggMmQzYzgzMi4uOWY1NzZiZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmgKQEAgLTc5LDcgKzc5LDcgQEAKICAqIEFwaSBwcm90b3R5cGVzIAogICovCiB2b2lkICAgICAgICAgICAgUk9XQVBJX2luaXRfdGFibGUoVEFCTEVfREVGSU5USU9OX1QgKiB0YWJsZV9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBtYXhfbnVtYmVyX29mX2VudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5UUllfQ0FMTEJBQ0tfVCAqIENsYmtDcmVhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5UUllfQ0FMTEJBQ0tfVCAqIENsYmtDbG9uZSwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMKaW5kZXggZDhjM2NjMS4uYWMyNmUzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KICNpbmNsdWRlICJhZ3V0aWxfYXBpLmgiCiAjaW5jbHVkZSAicm93cy5oIgogI2luY2x1ZGUgInJvd19hcGkuaCIKQEAgLTI1Nyw3ICsyNTUsNyBAQAogCiB2b2lkCiBST1dBUElfaW5pdF90YWJsZShUQUJMRV9ERUZJTlRJT05fVCAqIHRhYmxlX3B0ciwKLSAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdV9sb25nIG1heF9udW1iZXJfb2ZfZW50cmllcywKICAgICAgICAgICAgICAgICAgIEVOVFJZX0NBTExCQUNLX1QgKiBDbGJrQ3JlYXRlLAogICAgICAgICAgICAgICAgICAgRU5UUllfQ0FMTEJBQ0tfVCAqIENsYmtDbG9uZSwKQEAgLTI2OSw3ICsyNjcsNyBAQAogewogICAgIHRhYmxlX3B0ci0+bmFtZSA9IG5hbWU7CiAgICAgaWYgKCF0YWJsZV9wdHItPm5hbWUpCi0gICAgICAgIHRhYmxlX3B0ci0+bmFtZSA9ICJVbmtub3duIjsKKyAgICAgICAgdGFibGVfcHRyLT5uYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosIlVua25vd24iKTsKIAogICAgIHRhYmxlX3B0ci0+bWF4X251bWJlcl9vZl9lbnRyaWVzID0gbWF4X251bWJlcl9vZl9lbnRyaWVzOwogICAgIHRhYmxlX3B0ci0+Q2xia0NyZWF0ZSA9IENsYmtDcmVhdGU7CkBAIC03NTYsNyArNzU0LDcgQEAKICAgICAgICAgc2NybHItPmZpcnN0X2RhdGFfcHRyID0gYnB0ci0+bmV4dDsKICAgICAgICAgc2NybHItPmxhc3RfZGF0YV9wdHItPm5leHQgPSBicHRyOwogICAgICAgICBzY3Jsci0+bGFzdF9kYXRhX3B0ciA9IChORVhURURfUFRSX1QgKikgYnB0cjsKLSAgICAgICAgYnB0ci0+bmV4dCA9IDA7CisgICAgICAgIGJwdHItPm5leHQgPSBOVUxMOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGJwdHIgPSBzY3Jsci0+Y3VycmVudF9kYXRhX3B0cjsKICAgICAgICAgc2NybHItPmN1cnJlbnRfZGF0YV9wdHIgPSBicHRyLT5uZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYwppbmRleCBmYjRmNWY1Li4zZWQ0YWNiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYworKysgYi9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYwpAQCAtMjQsMTEgKzI0LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDMsNyArMzksNiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzLmgiCiAgICAgICAgIC8qCiAgICAgICAgICAqIEltcGxlbWVudGF0aW9uIGhlYWRlcnMgCkBAIC00NjgsNTIgKzQ2Myw1MiBAQAogb2lkICAgICAgICAgICAgIG9pZHN0YXRpc3RpY3NWYXJpYWJsZXNPaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTYsIDEgfTsKIAogc3RydWN0IHZhcmlhYmxlNyBvaWRzdGF0aXN0aWNzVmFyaWFibGVzW10gPSB7Ci0gICAge0lEZXRoZXJTdGF0c0luZGV4LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxfX0sCi0gICAge0lEZXRoZXJTdGF0c0RhdGFTb3VyY2UsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDJ9fSwKLSAgICB7SURldGhlclN0YXRzRHJvcEV2ZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgM319LAotICAgIHtJRGV0aGVyU3RhdHNPY3RldHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDR9fSwKLSAgICB7SURldGhlclN0YXRzUGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgNX19LAotICAgIHtJRGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCA2fX0sCi0gICAge0lEZXRoZXJTdGF0c011bHRpY2FzdFBrdHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDd9fSwKLSAgICB7SURldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwKLSAgICAgMywgezEsIDEsIDh9fSwKLSAgICB7SURldGhlclN0YXRzVW5kZXJzaXplUGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgOX19LAotICAgIHtJRGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDEwfX0sCi0gICAge0lEZXRoZXJTdGF0c0ZyYWdtZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMTF9fSwKLSAgICB7SURldGhlclN0YXRzSmFiYmVycywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMTJ9fSwKLSAgICB7SURldGhlclN0YXRzQ29sbGlzaW9ucywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMTN9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czY0T2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxNH19LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMX19LAorICAgIHtJRGV0aGVyU3RhdHNEYXRhU291cmNlLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAyfX0sCisgICAge0lEZXRoZXJTdGF0c0Ryb3BFdmVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICB7SURldGhlclN0YXRzT2N0ZXRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCA0fX0sCisgICAge0lEZXRoZXJTdGF0c1BrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDV9fSwKKyAgICB7SURldGhlclN0YXRzQnJvYWRjYXN0UGt0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgIHtJRGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCA3fX0sCisgICAge0lEZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCA4fX0sCisgICAge0lEZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDl9fSwKKyAgICB7SURldGhlclN0YXRzT3ZlcnNpemVQa3RzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxMH19LAorICAgIHtJRGV0aGVyU3RhdHNGcmFnbWVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDExfX0sCisgICAge0lEZXRoZXJTdGF0c0phYmJlcnMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDEyfX0sCisgICAge0lEZXRoZXJTdGF0c0NvbGxpc2lvbnMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDEzfX0sCisgICAge0lEZXRoZXJTdGF0c1BrdHM2NE9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTR9fSwKKyAgICB7SURldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKICAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDE1fX0sCi0gICAge0lEZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKICAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDE2fX0sCi0gICAge0lEZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKICAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDE3fX0sCi0gICAge0lEZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMsIEFTTl9DT1VOVEVSLCBST05MWSwKKyAgICB7SURldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTh9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMsIEFTTl9DT1VOVEVSLCBST05MWSwKKyAgICB7SURldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKICAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDE5fX0sCi0gICAge0lEZXRoZXJTdGF0c093bmVyLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAyMH19LAotICAgIHtJRGV0aGVyU3RhdHNTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAyMX19LAotICAgIHtJRGV0aGVyU3RhdHNEcm9wcGVkRnJhbWVzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzMkVudHJ5LAotICAgICAzLCB7NCwgMSwgMX19LAotICAgIHtJRGV0aGVyU3RhdHNDcmVhdGVUaW1lLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2V0aGVyU3RhdHMyRW50cnksIDMsCi0gICAgIHs0LCAxLCAyfX0sCisgICAge0lEZXRoZXJTdGF0c093bmVyLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAyMH19LAorICAgIHtJRGV0aGVyU3RhdHNTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAyMX19LAorICAgIHtJRGV0aGVyU3RhdHNEcm9wcGVkRnJhbWVzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzMkVudHJ5LCAzLCB7NCwgMSwgMX19LAorICAgIHtJRGV0aGVyU3RhdHNDcmVhdGVUaW1lLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHMyRW50cnksIDMsIHs0LCAxLCAyfX0sCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oCmluZGV4IDhjNmQ5MWQuLjliNjIyYTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZuZGVmIF9zdGF0aXN0aWNzX2hfaW5jbHVkZWRfXwogI2RlZmluZSBfc3RhdGlzdGljc19oX2luY2x1ZGVkX18KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc3RhdGlzdGljcyh2b2lkKTsKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfc3RhdGlzdGljc19oX2luY2x1ZGVkX18gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMKaW5kZXggMWY4NTg2YS4uNDgzNzlhMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMKQEAgLTEsNSArMSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC93YXRjaGVyLmg+CkBAIC0xMCwxMSArMTEsMTcgQEAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKIAogI2lmbmRlZiBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRQotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAjZGVmaW5lIFNIRUxMQ09NTUFORCAzCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZXh0cmFjdF90YWJsZV9yb3dfZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGluc2VydF90YWJsZV9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIG9pZCAgbnNfZXh0ZW5kX29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAzLCAyIH07CiBvaWQgIGV4dGVuZF9jb3VudF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgMywgMiwgMSB9Owogb2lkICBleHRlbmRfY29uZmlnX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAzLCAyLCAyIH07CkBAIC0yNyw3ICszNCw3IEBACiAgICAgc2l6ZV90ICAgICAgICAgICAgICBvaWRfbGVuOwogICAgIGxvbmcgICAgICAgICAgICAgICAgbnVtX2VudHJpZXM7CiAgICAgbmV0c25tcF9leHRlbmQgICAgICplaGVhZDsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgICpyZWdbM107CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICAqcmVnWzRdOwogICAgIHN0cnVjdCBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrX3MgKm5leHQ7CiB9IGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2s7CiBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrICplcmVnX2hlYWQgPSBOVUxMOwpAQCAtNDQsMTggKzUxLDQ3IEBACiB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyA9IDUwOwogbmV0c25tcF9vbGRfZXh0ZW5kICpjb21wYXRhYmlsaXR5X2VudHJpZXM7CiAKK2NoYXIgICAgICAgICAgICpjbWRsaW5lYnVmOworc2l6ZV90ICAgICAgICAgIGNtZGxpbmVzaXplOworCiBXcml0ZU1ldGhvZCBmaXhFeGVjMkVycm9yOwogRmluZFZhck1ldGhvZCB2YXJfZXh0ZW5zaWJsZV9vbGQ7CiBvaWQgIG9sZF9leHRlbnNpYmxlX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgTkVUU05NUF9TSEVMTE1JQk5VTSwgMSB9OworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzW10gPSB7Ci0gICAge01JQklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge01JQklOREVYfX0sCi0gICAge0VSUk9STkFNRSwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9STkFNRX19LAotICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtTSEVMTENPTU1BTkR9fSwKLSAgICB7RVJST1JGTEFHLCAgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGTEFHfX0sCi0gICAge0VSUk9STVNHLCAgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9STVNHfX0sCi0gICAge0VSUk9SRklYLCAgICAgQVNOX0lOVEVHRVIsICBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9SRklYfX0sCi0gICAge0VSUk9SRklYQ01ELCAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9SRklYQ01EfX0KKyAgICB7TUlCSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7TUlCSU5ERVh9fSwKKyAgICB7RVJST1JOQU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JOQU1FfX0sCisgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge1NIRUxMQ09NTUFORH19LAorICAgIHtFUlJPUkZMQUcsICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICB7RVJST1JNU0csICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JNU0d9fSwKKyAgICB7RVJST1JGSVgsICAgICBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVh9fSwKKyAgICB7RVJST1JGSVhDTUQsICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVhDTUR9fQogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzW10gPSB7CisgICAge01JQklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge01JQklOREVYfX0sCisgICAge0VSUk9STkFNRSwgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9STkFNRX19LAorICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtTSEVMTENPTU1BTkR9fSwKKyAgICB7RVJST1JGTEFHLCAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGTEFHfX0sCisgICAge0VSUk9STVNHLCAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9STVNHfX0sCisgICAge0VSUk9SRklYLCAgICAgQVNOX0lOVEVHRVIsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVh9fSwKKyAgICB7RVJST1JGSVhDTUQsICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVhDTUR9fQorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZW5kaWYKIAogCkBAIC04Nyw3ICsxMjMsOCBAQAogICAgIG5ldHNubXBfdGFibGVfZGF0YSAgICAgICAgICAgICAgICAqZGluZm87CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAgICp0aW5mbzsKICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICAgICAgKndpbmZvOwotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAqcmVnOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAqcmVnID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjOwogCiAgICAgZm9yICggZXB0cj1lcmVnX2hlYWQ7IGVwdHI7IGVwdHI9ZXB0ci0+bmV4dCApIHsKICAgICAgICAgaWYgKCFzbm1wX29pZF9jb21wYXJlKCBiYXNlLCBsZW4sIGVwdHItPnJvb3Rfb2lkLCBlcHRyLT5vaWRfbGVuKSkKQEAgLTk1LDYgKzEzMiw4IEBACiAgICAgfQogICAgIGlmICghZXB0cikgewogICAgICAgICBlcHRyID0gU05NUF9NQUxMT0NfVFlQRURFRiggZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jayApOworICAgICAgICBpZiAoIWVwdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZXB0ci0+cm9vdF9vaWQgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZCggYmFzZSwgbGVuICk7CiAgICAgICAgIGVwdHItPm9pZF9sZW4gID0gbGVuOwogICAgICAgICBlcHRyLT5udW1fZW50cmllcyA9IDA7CkBAIC0xMTUsMTAgKzE1NCwyMCBAQAogICAgIHRpbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0VYVENGR19GSVJTVF9DT0xVTU47CiAgICAgdGluZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fRVhUQ0ZHX0xBU1RfQ09MVU1OOwogICAgIG9pZF9idWZbbGVuXSA9IDI7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICAgIm5zRXh0ZW5kQ29uZmlnVGFibGUiLCBoYW5kbGVfbnNFeHRlbmRDb25maWdUYWJsZSwgCiAgICAgICAgICAgICAgICAgb2lkX2J1ZiwgbGVuKzEsIEhBTkRMRVJfQ0FOX1JXUklURSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhKCByZWcsIGRpbmZvLCB0aW5mbyApOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm5zRXh0ZW5kQ29uZmlnVGFibGUiLCBoYW5kbGVfbnNFeHRlbmRDb25maWdUYWJsZSwgCisgICAgICAgICAgICAgICAgb2lkX2J1ZiwgbGVuKzEsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEoIHJlZywgZGluZm8sIHRpbmZvICk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBlcHRyLT5yZWdbMF0gPSByZWc7CiAKICAgICAgICAgLyoKQEAgLTEzNSw3ICsxODQsMTAgQEAKICAgICByZWcgICA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAgICJuc0V4dGVuZE91dDFUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZE91dHB1dDFUYWJsZSwgCiAgICAgICAgICAgICAgICAgb2lkX2J1ZiwgbGVuKzEsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEoIHJlZywgZGluZm8sIHRpbmZvICk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEoIHJlZywgZGluZm8sIHRpbmZvICk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgZ290byBiYWlsOworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBlcHRyLT5yZWdbMV0gPSByZWc7CiAKICAgICAgICAgLyoKQEAgLTE1NCw3ICsyMDYsMTAgQEAKICAgICByZWcgICA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAgICJuc0V4dGVuZE91dDJUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZE91dHB1dDJUYWJsZSwgCiAgICAgICAgICAgICAgICAgb2lkX2J1ZiwgbGVuKzEsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKCByZWcsIHRpbmZvICk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKCByZWcsIHRpbmZvICk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgZ290byBiYWlsOworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBlcHRyLT5yZWdbMl0gPSByZWc7CiAKICAgICAgICAgLyoKQEAgLTE2Nyw5ICsyMjIsNDQgQEAKICAgICB3aW5mbyA9IG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKICAgICAgICAgICAgICAgICAmKGVwdHItPm51bV9lbnRyaWVzKSwgc2l6ZW9mKGVwdHItPm51bV9lbnRyaWVzKSwKICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKCByZWcsIHdpbmZvICk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMiggcmVnLCB3aW5mbyApOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBlcHRyLT5yZWdbM10gPSByZWc7CiAKICAgICByZXR1cm4gZXB0cjsKKworYmFpbDoKKyAgICBpZiAoZXB0ci0+cmVnWzNdKQorICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihlcHRyLT5yZWdbM10pOworICAgIGlmIChlcHRyLT5yZWdbMl0pCisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGVwdHItPnJlZ1syXSk7CisgICAgaWYgKGVwdHItPnJlZ1sxXSkKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoZXB0ci0+cmVnWzFdKTsKKyAgICBpZiAoZXB0ci0+cmVnWzBdKQorICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihlcHRyLT5yZWdbMF0pOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorX3VucmVnaXN0ZXJfZXh0ZW5kKGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2sgKmVwdHIpCit7CisgICAgZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jayAqcHJldjsKKworICAgIG5ldHNubXBfYXNzZXJ0KGVwdHIpOworICAgIGZvciAocHJldiA9IGVyZWdfaGVhZDsgcHJldiAmJiBwcmV2LT5uZXh0ICE9IGVwdHI7IHByZXYgPSBwcmV2LT5uZXh0KQorCTsKKyAgICBpZiAocHJldikgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChlcHRyID09IHByZXYtPm5leHQpOworCXByZXYtPm5leHQgPSBlcHRyLT5uZXh0OworICAgIH0gZWxzZSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVwdHIgPT0gZXJlZ19oZWFkKTsKKwllcmVnX2hlYWQgPSBlcHRyLT5uZXh0OworICAgIH0KKworICAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoZXB0ci0+ZGluZm8pOworICAgIGZyZWUoZXB0ci0+cm9vdF9vaWQpOworICAgIGZyZWUoZXB0cik7CiB9CiAKIGludApAQCAtMTgzLDYgKzI3Myw3IEBACiAgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKCBlcHRyLT5yZWdbMF0gKTsKICAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoIGVwdHItPnJlZ1sxXSApOwogICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlciggZXB0ci0+cmVnWzJdICk7CisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKCBlcHRyLT5yZWdbM10gKTsKICAgICAgICAgU05NUF9GUkVFKGVwdHIpOwogICAgIH0KICAgICBlcmVnX2hlYWQgPSBOVUxMOwpAQCAtMjAzLDggKzI5NCw4IEBACiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImV4ZWMiLCBleHRlbmRfcGFyc2VfY29uZmlnLCBOVUxMLCBOVUxMKTsKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic2giLCAgIGV4dGVuZF9wYXJzZV9jb25maWcsIE5VTEwsIE5VTEwpOwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJleGVjRml4IiwgZXh0ZW5kX3BhcnNlX2NvbmZpZywgTlVMTCwgTlVMTCk7Ci0gICAgY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gY2FsbG9jKCBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfb2xkX2V4dGVuZCkpOworICAgIGNvbXBhdGFiaWxpdHlfZW50cmllcyA9IChuZXRzbm1wX29sZF9leHRlbmQgKikKKyAgICAgICAgY2FsbG9jKCBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzLCBzaXplb2YobmV0c25tcF9vbGRfZXh0ZW5kKSk7CiAgICAgUkVHSVNURVJfTUlCKCJ1Y2QtZXh0ZW5zaWJsZSIsIG9sZF9leHRlbnNpYmxlX3ZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgdmFyaWFibGUyLCBvbGRfZXh0ZW5zaWJsZV92YXJpYWJsZXNfb2lkKTsKICNlbmRpZgpAQCAtMjE0LDYgKzMwNSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kX2NsZWFyX2NhbGxiYWNrLCBOVUxMKTsKIH0KIAordm9pZAorc2h1dGRvd25fZXh0ZW5kKHZvaWQpCit7CisjaWZuZGVmIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFCisgICAgZnJlZShjb21wYXRhYmlsaXR5X2VudHJpZXMpOworICAgIGNvbXBhdGFiaWxpdHlfZW50cmllcyA9IE5VTEw7CisjZW5kaWYKKyAgICB3aGlsZSAoZXJlZ19oZWFkKQorCV91bnJlZ2lzdGVyX2V4dGVuZChlcmVnX2hlYWQpOworfQorCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAqCiAgICAgICAgICAqICBDYWNoZWQtZGF0YSBob29rcwpAQCAtMjI0LDYgKzMyNiwxMCBAQAogaW50CiBleHRlbmRfbG9hZF9jYWNoZShuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqbWFnaWMpCiB7CisjaWZuZGVmIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQorICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX1dBUk5JTkcsInN1cHBvcnQgZm9yIHJ1bl9leGVjX2NvbW1hbmQgbm90IGF2YWlsYWJsZVxuIikpOworICAgIHJldHVybiAtMTsKKyNlbHNlCiAgICAgaW50ICBvdXRfbGVuID0gMTAyNCoxMDA7CiAgICAgY2hhciBvdXRfYnVmWyAxMDI0KjEwMCBdOwogICAgIGludCAgY21kX2xlbiA9IDI1NSoyICsgMjsJLyogMiAqIERpc3BsYXlTdHJpbmdzICovCkBAIC0yNjMsNyArMzY5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIGV4dGVuc2lvbi0+bnVtbGluZXMgPiAxICkgewotICAgICAgICAgICAgZXh0ZW5zaW9uLT5saW5lcyA9IGNhbGxvYyggc2l6ZW9mKGNoYXIgKiksIGV4dGVuc2lvbi0+bnVtbGluZXMgKTsKKyAgICAgICAgICAgIGV4dGVuc2lvbi0+bGluZXMgPSAoY2hhcioqKWNhbGxvYyggc2l6ZW9mKGNoYXIgKiksIGV4dGVuc2lvbi0+bnVtbGluZXMgKTsKICAgICAgICAgICAgIG1lbWNweSggZXh0ZW5zaW9uLT5saW5lcywgbGluZV9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhciAqKSAqIGV4dGVuc2lvbi0+bnVtbGluZXMgKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI3Miw2ICszNzgsNyBAQAogICAgIH0KICAgICBleHRlbnNpb24tPnJlc3VsdCA9IHJldDsKICAgICByZXR1cm4gcmV0OworI2VuZGlmIC8qICFkZWZpbmVkKFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRSkgKi8KIH0KIAogdm9pZApAQCAtNDUwLDYgKzU1NywxMCBAQAogICAgIH0KIAogICAgIGVwdHIgICAgICA9IF9yZWdpc3Rlcl9leHRlbmQoIG9pZF9idWYsIG9pZF9sZW4gKTsKKyAgICBpZiAoIWVwdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byByZWdpc3RlciBleHRlbmQgZW50cnkgJyVzJyAtIHBvc3NpYmx5IGR1cGxpY2F0ZSBuYW1lLlxuIiwgZXhlY19uYW1lICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgZXh0ZW5zaW9uID0gX25ld19leHRlbnNpb24oIGV4ZWNfbmFtZSwgZmxhZ3MsIGVwdHIgKTsKICAgICBpZiAoZXh0ZW5zaW9uKSB7CiAgICAgICAgIGV4dGVuc2lvbi0+Y29tbWFuZCAgPSBzdHJkdXAoIGV4ZWNfY29tbWFuZCApOwpAQCAtNDc4LDEwICs1ODksMjEgQEAKICAgICAgICAgICAgIAogICAgIH0gZWxzZSBpZiAoIXN0cmNtcCggdG9rZW4sICJzaCIgICApIHx8CiAgICAgICAgICAgICAgICAhc3RyY21wKCB0b2tlbiwgImV4ZWMiICkpIHsKLSAgICAgICAgaWYgKCBudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzID09IG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMgKQorICAgICAgICBpZiAoIG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMgPT0gbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyApIHsKICAgICAgICAgICAgIC8qIFhYWCAtIHNob3VsZCByZWFsbHkgdXNlIGR5bmFtaWMgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiTm8gZnVydGhlciBVQ0QtY29tcGF0aWJsZSBlbnRyaWVzIiApOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXRzbm1wX29sZF9leHRlbmQgKm5ld19jb21wYXRhYmlsaXR5X2VudHJpZXM7CisgICAgICAgICAgICBuZXdfY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gcmVhbGxvYyhjb21wYXRhYmlsaXR5X2VudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMqMipzaXplb2YobmV0c25tcF9vbGRfZXh0ZW5kKSk7CisgICAgICAgICAgICBpZiAoIW5ld19jb21wYXRhYmlsaXR5X2VudHJpZXMpCisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiTm8gZnVydGhlciBVQ0QtY29tcGF0aWJsZSBlbnRyaWVzIiApOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KG5ld19jb21wYXRhYmlsaXR5X2VudHJpZXMrbnVtX2NvbXBhdGFiaWxpdHlfZW50cmllcywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX29sZF9leHRlbmQpKm1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMpOworICAgICAgICAgICAgICAgIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMgKj0gMjsKKyAgICAgICAgICAgICAgICBjb21wYXRhYmlsaXR5X2VudHJpZXMgPSBuZXdfY29tcGF0YWJpbGl0eV9lbnRyaWVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzICE9IG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMpCiAgICAgICAgICAgICBjb21wYXRhYmlsaXR5X2VudHJpZXNbCiAgICAgICAgICAgICAgICAgbnVtX2NvbXBhdGFiaWxpdHlfZW50cmllcysrIF0uZXhlY19lbnRyeSA9IGV4dGVuc2lvbjsKICAgICB9CkBAIC02MDEsNiArNzIzLDcgQEAKICAgICAgICAgICoKICAgICAgICAgICoqKioqKioqKiovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogVmFsaWRhdGUgdGhlIG5ldyBhc3NpZ25tZW50cwpAQCAtOTI2LDYgKzEwNDksNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKQEAgLTkzMyw2ICsxMDU3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAvKgogICAgICAqIElmIHdlJ3JlIG1hcmtpbmcgYSBnaXZlbiByb3cgYXMgYWN0aXZlLAogICAgICAqICB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpdCdzIHJlYWR5LgpAQCAtOTU3LDcgKzEwODIsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCkBAIC0xMDkwLDggKzEyMTYsOCBAQAogICAgIG9pZCBvaWRfYnVmW01BWF9PSURfTEVOXTsKICAgICBpbnQgb2lkX2xlbjsKICAgICBpbnQgaTsKLSAgICBjaGFyICp0b2tlbjsKLSAgICBpbnQgICB0b2tlbl9sZW47CisgICAgY2hhciAgKnRva2VuOworICAgIHNpemVfdCB0b2tlbl9sZW47CiAKICAgICBpZiAoIXJlcXVlc3QgfHwgIXRhYmxlX2luZm8gfHwgIXRhYmxlX2luZm8tPmluZGV4ZXMKICAgICAgICAgICAgICAgICAgfHwgIXRhYmxlX2luZm8tPmluZGV4ZXMtPm5leHRfdmFyaWFibGUpIHsKQEAgLTExMDYsNyArMTIzMiw3IEBACiAgICAgICogIEdFVCBoYW5kbGluZyAtIGZpbmQgdGhlIGV4YWN0IGVudHJ5IGJlaW5nIHJlcXVlc3RlZAogICAgICAqKiovCiAgICAgaWYgKCBtb2RlID09IE1PREVfR0VUICkgewotICAgICAgICBERUJVR01TR1RMKCggIm5zRXh0ZW5kVGFibGU6b3V0cHV0MiIsICJHRVQ6ICVzIC8gJWRcbiAiLAorICAgICAgICBERUJVR01TR1RMKCggIm5zRXh0ZW5kVGFibGU6b3V0cHV0MiIsICJHRVQ6ICVzIC8gJWxkXG4gIiwKICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgKnRhYmxlX2luZm8tPmluZGV4ZXMtPm5leHRfdmFyaWFibGUtPnZhbC5pbnRlZ2VyKSk7CiAgICAgICAgIGZvciAoIGVwdHIgPSBlcmVnLT5laGVhZDsgZXB0cjsgZXB0ciA9IGVwdHItPm5leHQgKSB7CkBAIC0xMTI5LDcgKzEyNTUsNiBAQAogICAgICAgICAgICAgaWYgKGxpbmVfaWR4IDwgMSB8fCBsaW5lX2lkeCA+IGVwdHItPm51bWxpbmVzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlcHRyOwogICAgIH0KIAogICAgICAgICAvKioqCkBAIC0xMjQ2LDkgKzEzNzEsOCBAQAogICAgICAgICAgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCB0YWJsZV9pbmZvLT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyKikmbGluZV9pZHgsIHNpemVvZihsaW5lX2lkeCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlcHRyOyAgLyogRmluYWxseSwgc2lnbmFsIHN1Y2Nlc3MgKi8KICAgICB9Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGVwdHI7ICAvKiBGaW5hbGx5LCBzaWduYWwgc3VjY2VzcyAqLwogfQogCiAvKgpAQCAtMTMzOCw2ICsxNDYyLDMyIEBACiAgICAgICAgICAqCiAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitjaGFyICogX2dldF9jbWRsaW5lKG5ldHNubXBfZXh0ZW5kICpleHRlbmQpCit7CisgICAgc2l6ZV90ICAgICAgICAgIHNpemU7CisgICAgY2hhciAgICAgICAgICAgKm5ld2J1ZjsKKyAgICBjb25zdCBjaGFyICAgICAqYXJncyA9IGV4dGVuZC0+YXJnczsKKworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIC8qIFVzZSBlbXB0eSBzdHJpbmcgZm9yIHByb2Nlc3NlcyB3aXRob3V0IGFyZ3VtZW50cy4gKi8KKyAgICAgICAgYXJncyA9ICIiOworCisgICAgc2l6ZSA9IHN0cmxlbihleHRlbmQtPmNvbW1hbmQpICsgc3RybGVuKGFyZ3MpICsgMjsKKyAgICBpZiAoc2l6ZSA+IGNtZGxpbmVzaXplKSB7CisgICAgICAgIG5ld2J1ZiA9IHJlYWxsb2MoY21kbGluZWJ1Ziwgc2l6ZSk7CisgICAgICAgIGlmICghbmV3YnVmKSB7CisgICAgICAgICAgICBmcmVlKGNtZGxpbmVidWYpOworICAgICAgICAgICAgY21kbGluZWJ1ZiA9IE5VTEw7CisgICAgICAgICAgICBjbWRsaW5lc2l6ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjbWRsaW5lYnVmID0gbmV3YnVmOworICAgICAgICBjbWRsaW5lc2l6ZSA9IHNpemU7CisgICAgfQorICAgIHNwcmludGYoY21kbGluZWJ1ZiwgIiVzICVzIiwgZXh0ZW5kLT5jb21tYW5kLCBhcmdzKTsKKyAgICByZXR1cm4gY21kbGluZWJ1ZjsKK30KKwogdV9jaGFyICoKIHZhcl9leHRlbnNpYmxlX29sZChzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCkBAIC0xMzQ4LDYgKzE0OTgsNyBAQAogICAgIG5ldHNubXBfb2xkX2V4dGVuZCAqZXh0ZW4gPSBOVUxMOwogICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKICAgICB1bnNpZ25lZCBpbnQgaWR4OworICAgIGNoYXIgICAgICAgICAqY21kbGluZTsKIAogICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCiAgICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzKSkKQEAgLTEzNjYsOCArMTUxNywxMCBAQAogICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXh0ZW4tPmV4ZWNfZW50cnktPnRva2VuKTsKICAgICAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoZXh0ZW4tPmV4ZWNfZW50cnktPnRva2VuKSk7CiAgICAgICAgIGNhc2UgU0hFTExDT01NQU5EOgotICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXh0ZW4tPmV4ZWNfZW50cnktPmNvbW1hbmQpOwotICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChleHRlbi0+ZXhlY19lbnRyeS0+Y29tbWFuZCkpOworICAgICAgICAgICAgY21kbGluZSA9IF9nZXRfY21kbGluZShleHRlbi0+ZXhlY19lbnRyeSk7CisgICAgICAgICAgICBpZiAoY21kbGluZSkKKyAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihjbWRsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBjbWRsaW5lKTsKICAgICAgICAgY2FzZSBFUlJPUkZMQUc6ICAgICAgICAvKiByZXR1cm4gY29kZSBmcm9tIHRoZSBwcm9jZXNzICovCiAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoIGV4dGVuLT5leGVjX2VudHJ5LT5jYWNoZSApOwogICAgICAgICAgICAgbG9uZ19yZXQgPSBleHRlbi0+ZXhlY19lbnRyeS0+cmVzdWx0OwpAQCAtMTM5MCw4ICsxNTQzLDEwIEBACiAKICAgICAgICAgY2FzZSBFUlJPUkZJWENNRDoKICAgICAgICAgICAgIGlmIChleHRlbi0+ZWZpeF9lbnRyeSkgewotICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGV4dGVuLT5lZml4X2VudHJ5LT5jb21tYW5kKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXh0ZW4tPmVmaXhfZW50cnktPmNvbW1hbmQpOworICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBfZ2V0X2NtZGxpbmUoZXh0ZW4tPmVmaXhfZW50cnkpOworCQlpZiAoY21kbGluZSkKKyAgICAgICAgICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oY21kbGluZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGNtZGxpbmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICZsb25nX3JldHVybik7ICAvKiBKdXN0IG5lZWRzIHRvIGJlIG5vbi1udWxsISAqLwpAQCAtMTQxNiw2ICsxNTcxLDcgQEAKICAgICBpZHggPSBuYW1lW25hbWVfbGVuLTFdIC0xOwogICAgIGV4dGVuID0gJmNvbXBhdGFiaWxpdHlfZW50cmllc1sgaWR4IF07CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgc3dpdGNoIChhY3Rpb24pIHsKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9JTlRFR0VSKSB7CkBAIC0xNDM2LDYgKzE1OTIsNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoIGV4dGVuLT5lZml4X2VudHJ5LT5jYWNoZSApOwogICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmggYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaAppbmRleCA4ZjE5ZGIzLi44Yjc2Y2Q0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaAorKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgTkVUU05NUF9FWFRFTkRfSAogI2RlZmluZSBORVRTTk1QX0VYVEVORF9ICiAKLWNvbmZpZ19yZXF1aXJlKCB1dGlsX2Z1bmNzICkKK2NvbmZpZ19yZXF1aXJlKCB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUgKQogY29uZmlnX3JlcXVpcmUoIHV0aWxpdGllcy9leGVjdXRlICkKIGNvbmZpZ19hZGRfbWliKE5FVC1TTk1QLUVYVEVORC1NSUIpCiAKQEAgLTI4LDYgKzI4LDcgQEAKIH0gbmV0c25tcF9leHRlbmQ7CiAKIHZvaWQgICAgICAgICAgICAgICAgIGluaXRfZXh0ZW5kKHZvaWQpOwordm9pZCAgICAgICAgICAgICAgICAgc2h1dGRvd25fZXh0ZW5kKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgaGFuZGxlX25zRXh0ZW5kQ29uZmlnVGFibGU7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbnNFeHRlbmRPdXRwdXQxVGFibGU7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbnNFeHRlbmRPdXRwdXQyVGFibGU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMKaW5kZXggZjhlNzNmMC4uZDMyMjYzYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXIuaD4KQEAgLTExLDcgKzEyLDggQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KICNpbmNsdWRlICJhZ2VudC9uc0NhY2hlLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjYWNoZV9nZXRfaGVhZCkKIAogCiAvKgpAQCAtMjEsNiArMjMsOCBAQAogZXh0ZXJuIG5ldHNubXBfY2FjaGUgKm5ldHNubXBfY2FjaGVfZ2V0X2hlYWQodm9pZCk7CiAKIAorI2RlZmluZSBuc0NhY2hlIDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDUKKwogLyoKICAqIE9JRHMgZm9yIHRoZSBjYWNoZWdpbmcgY29udHJvbCBzY2FsYXIgb2JqZWN0cwogICoKQEAgLTI4LDggKzMyLDYgQEAKICAqICB0aGFuIHRoZSAoc29sZSkgdmFsaWQgaW5zdGFuY2UgaW4gZWFjaCBjYXNlLCBpbiBvcmRlcgogICogIHRvIGhhbmRsZSByZXF1ZXN0cyBmb3IgaW52YWxpZCBpbnN0YW5jZXMgcHJvcGVybHkuCiAgKi8KLW9pZCBuc0NhY2hlVGltZW91dF9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNSwgMX07Ci1vaWQgbnNDYWNoZUVuYWJsZWRfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDUsIDJ9OwogCiAvKgogICogLi4uIGFuZCBmb3IgdGhlIGNhY2hlIHRhYmxlLgpAQCAtNDQsMTUgKzQ2LDE3IEBACiAjZGVmaW5lIE5TQ0FDSEVfU1RBVFVTX0FDVElWRSAgIDQKICNkZWZpbmUgTlNDQUNIRV9TVEFUVVNfRVhQSVJFRCAgNQogCi1vaWQgbnNDYWNoZVRhYmxlX29pZFtdICAgICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDUsIDN9OwotCi1leHRlcm4gc3RydWN0IHNubXBfYWxhcm0gKgorTkVUU05NUF9JTVBPUlQgc3RydWN0IHNubXBfYWxhcm0gKgogc2FfZmluZF9zcGVjaWZpYyh1bnNpZ25lZCBpbnQgY2xpZW50cmVnKTsKIAogCiB2b2lkCiBpbml0X25zQ2FjaGUodm9pZCkKIHsKKyAgICBjb25zdCBvaWQgbnNDYWNoZVRpbWVvdXRfb2lkW10gICAgPSB7IG5zQ2FjaGUsIDEgfTsKKyAgICBjb25zdCBvaWQgbnNDYWNoZUVuYWJsZWRfb2lkW10gICAgPSB7IG5zQ2FjaGUsIDIgfTsKKyAgICBjb25zdCBvaWQgbnNDYWNoZVRhYmxlX29pZFtdICAgICAgPSB7IG5zQ2FjaGUsIDMgfTsKKwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAKQEAgLTEwMiw3ICsxMDYsNyBAQAogICAgIC8qCiAgICAgICogLi4uLiBhbmQgcmVnaXN0ZXIgdGhlIHRhYmxlIHdpdGggdGhlIGFnZW50LgogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgInR6Q2FjaGVUYWJsZSIsIGhhbmRsZV9uc0NhY2hlVGFibGUsCiAgICAgICAgICAgICBuc0NhY2hlVGFibGVfb2lkLCBPSURfTEVOR1RIKG5zQ2FjaGVUYWJsZV9vaWQpLApAQCAtMTM3LDYgKzE0MSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmICggcmVxdWVzdC0+c3RhdHVzICE9IDAgKSB7CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQ0FDSEVfVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4Nyw2ICsxOTMsNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKIAlmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAoIHJlcXVlc3QtPnN0YXR1cyAhPSAwICkgewpAQCAtMjExLDYgKzIxOCw3IEBACiAJbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fQ0FDSElORywgZW5hYmxlZCk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI5NSw5ICszMDMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAJCX0KIAkJc3RhdHVzID0gKGNhY2hlX2VudHJ5LT5lbmFibGVkID8KLQkgICAgICAgICAgICAgICAgICAgKGNhY2hlX2VudHJ5LT50aW1lc3RhbXAgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWF0aW1lX3JlYWR5KGNhY2hlX2VudHJ5LT50aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKmNhY2hlX2VudHJ5LT50aW1lb3V0KSA/CisJICAgICAgICAgICAgICAgICAgIChjYWNoZV9lbnRyeS0+dGltZXN0YW1wTSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWNoZV9lbnRyeS0+dGltZW91dCA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoY2FjaGVfZW50cnktPnRpbWVzdGFtcE0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCpjYWNoZV9lbnRyeS0+dGltZW91dCkgPwogCSAgICAgICAgICAgICAgICAgICAgICAgIE5TQ0FDSEVfU1RBVFVTX0FDVElWRToKIAkgICAgICAgICAgICAgICAgICAgICAgICBOU0NBQ0hFX1NUQVRVU19FWFBJUkVEKSA6CiAJICAgICAgICAgICAgICAgICAgICAgIE5TQ0FDSEVfU1RBVFVTX0VNUFRZKSA6CkBAIC0zMTQsNiArMzIzLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkICE9IDApCkBAIC0zNjEsNyArMzcxLDYgQEAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX0VSUl9OT0NSRUFUSU9OKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsJLyogWFhYIC0gaXMgdGhpcyByaWdodCA/ICovCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAJICAgIH0KIAl9CiAJYnJlYWs7CkBAIC00MDUsMTQgKzQxNCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCSAgICBjYXNlIE5TQ0FDSEVfU1RBVFVTX0VNUFRZOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfZW50cnktPmZyZWVfY2FjaGUoY2FjaGVfZW50cnksIGNhY2hlX2VudHJ5LT5tYWdpYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGNhY2hlX2VudHJ5LT50aW1lc3RhbXApOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfZW50cnktPnRpbWVzdGFtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGNhY2hlX2VudHJ5LT50aW1lc3RhbXBNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2VudHJ5LT50aW1lc3RhbXBNID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCQl9CiAJICAgICAgICBicmVhazsKIAkgICAgfQogCX0KIAlicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMKaW5kZXggNDBkNTVkNC4uODlhOTBiMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYwpAQCAtMTAsMzQgKzEwLDMyIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImFnZW50L25zRGVidWcuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAKLQotCi0vKgotICogT0lEcyBmb3IgdGhlIGRlYnVnZ2luZyBjb250cm9sIHNjYWxhciBvYmplY3RzCi0gKgotICogTm90ZSB0aGF0IHRoZXNlIHdlJ3JlIHJlZ2lzdGVyaW5nIHRoZSBmdWxsIG9iamVjdCByYXRoZXIKLSAqICB0aGFuIHRoZSAoc29sZSkgdmFsaWQgaW5zdGFuY2UgaW4gZWFjaCBjYXNlLCBpbiBvcmRlcgotICogIHRvIGhhbmRsZSByZXF1ZXN0cyBmb3IgaW52YWxpZCBpbnN0YW5jZXMgcHJvcGVybHkuCi0gKi8KLW9pZCBuc0RlYnVnRW5hYmxlZF9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMSwgMX07Ci1vaWQgbnNEZWJ1Z091dHB1dEFsbF9vaWRbXSAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEsIDJ9Owotb2lkIG5zRGVidWdEdW1wUGR1X29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAxLCAzfTsKLQotLyoKLSAqIC4uLiBhbmQgZm9yIHRoZSB0b2tlbiB0YWJsZS4KLSAqLwotCi0jZGVmaW5lICBEQkdUT0tFTl9QUkVGSVgJMgotI2RlZmluZSAgREJHVE9LRU5fRU5BQkxFRAkzCi0jZGVmaW5lICBEQkdUT0tFTl9TVEFUVVMJNAotb2lkIG5zRGVidWdUb2tlblRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAxLCA0fTsKLQorI2RlZmluZSBuc0NvbmZpZ0RlYnVnIDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEKIAogdm9pZAogaW5pdF9uc0RlYnVnKHZvaWQpCiB7CisgICAgLyoKKyAgICAgKiBPSURzIGZvciB0aGUgZGVidWdnaW5nIGNvbnRyb2wgc2NhbGFyIG9iamVjdHMKKyAgICAgKgorICAgICAqIE5vdGUgdGhhdCB0aGVzZSB3ZSdyZSByZWdpc3RlcmluZyB0aGUgZnVsbCBvYmplY3QgcmF0aGVyCisgICAgICogIHRoYW4gdGhlIChzb2xlKSB2YWxpZCBpbnN0YW5jZSBpbiBlYWNoIGNhc2UsIGluIG9yZGVyCisgICAgICogIHRvIGhhbmRsZSByZXF1ZXN0cyBmb3IgaW52YWxpZCBpbnN0YW5jZXMgcHJvcGVybHkuCisgICAgICovCisgICAgY29uc3Qgb2lkIG5zRGVidWdFbmFibGVkX29pZFtdICAgID0geyBuc0NvbmZpZ0RlYnVnLCAxfTsKKyAgICBjb25zdCBvaWQgbnNEZWJ1Z091dHB1dEFsbF9vaWRbXSAgPSB7IG5zQ29uZmlnRGVidWcsIDJ9OworICAgIGNvbnN0IG9pZCBuc0RlYnVnRHVtcFBkdV9vaWRbXSAgICA9IHsgbnNDb25maWdEZWJ1ZywgM307CisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgZm9yIHRoZSB0b2tlbiB0YWJsZS4KKyAgICAgKi8KKworI2RlZmluZSAgREJHVE9LRU5fUFJFRklYCTIKKyNkZWZpbmUgIERCR1RPS0VOX0VOQUJMRUQJMworI2RlZmluZSAgREJHVE9LRU5fU1RBVFVTCTQKKyAgICBjb25zdCBvaWQgbnNEZWJ1Z1Rva2VuVGFibGVfb2lkW10gPSB7IG5zQ29uZmlnRGVidWcsIDR9OworCiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKIApAQCAtOTMsNyArOTEsNyBAQAogICAgIC8qCiAgICAgICogLi4uLiBhbmQgcmVnaXN0ZXIgdGhlIHRhYmxlIHdpdGggdGhlIGFnZW50LgogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgInR6RGVidWdUYWJsZSIsIGhhbmRsZV9uc0RlYnVnVGFibGUsCiAgICAgICAgICAgICBuc0RlYnVnVG9rZW5UYWJsZV9vaWQsIE9JRF9MRU5HVEgobnNEZWJ1Z1Rva2VuVGFibGVfb2lkKSwKQEAgLTEyNiw2ICsxMjQsNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKIAlmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkICE9IDApCkBAIC0xNTEsNiArMTUwLDcgQEAKIAkgICAgZW5hYmxlZCA9IDA7CiAJc25tcF9zZXRfZG9fZGVidWdnaW5nKCBlbmFibGVkICk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4MSw2ICsxODEsNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKIAlmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkICE9IDApCkBAIC0yMDYsNiArMjA3LDcgQEAKIAkgICAgZW5hYmxlZCA9IDA7CiAJc25tcF9zZXRfZG9fZGVidWdnaW5nKCBlbmFibGVkICk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIzNyw2ICsyMzksNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKIAlmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkICE9IDApCkBAIC0yNjMsNiArMjY2LDcgQEAKIAluZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKIAkgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCBlbmFibGVkKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzQ3LDYgKzM1MSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTQ1Myw2ICs0NTgsNyBAQAogCSAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYwppbmRleCAzZTViMDJmLi43ZjIwYmRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXIuaD4KQEAgLTExLDkgKzEyLDExIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgogI2luY2x1ZGUgImFnZW50L25zTG9nZ2luZy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAotCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShsb2dnaW5nX2V4dGVybmFsKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2l0ZXJhdG9yX2luc2VydF9jb250ZXh0KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogT0lEIGFuZCBjb2x1bW5zIGZvciB0aGUgbG9nZ2luZyB0YWJsZS4KQEAgLTIzLDE1ICsyNiwxNCBAQAogI2RlZmluZSAgTlNMT0dHSU5HX01BWExFVkVMCTQKICNkZWZpbmUgIE5TTE9HR0lOR19TVEFUVVMJNQogCi1vaWQgbnNMb2dnaW5nVGFibGVfb2lkW10gICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMiwgMX07Ci0KLQogdm9pZAogaW5pdF9uc0xvZ2dpbmcodm9pZCkKIHsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogCisgICAgY29uc3Qgb2lkIG5zTG9nZ2luZ1RhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAyLCAxfTsKKwogICAgIC8qCiAgICAgICogUmVnaXN0ZXIgdGhlIHRhYmxlLgogICAgICAqIFdlIG5lZWQgdG8gZGVmaW5lIHRoZSBjb2x1bW4gc3RydWN0dXJlIGFuZCBpbmRleGluZy4uLi4KQEAgLTYyLDcgKzY0LDcgQEAKICAgICAvKgogICAgICAqIC4uLi4gYW5kIHJlZ2lzdGVyIHRoZSB0YWJsZSB3aXRoIHRoZSBhZ2VudC4KICAgICAgKi8KLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKAorICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICJ0ekxvZ2dpbmdUYWJsZSIsIGhhbmRsZV9uc0xvZ2dpbmdUYWJsZSwKICAgICAgICAgICAgIG5zTG9nZ2luZ1RhYmxlX29pZCwgT0lEX0xFTkdUSChuc0xvZ2dpbmdUYWJsZV9vaWQpLApAQCAtMTkwLDYgKzE5Miw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKCByZXF1ZXN0LT5zdGF0dXMgIT0gMCApIHsKQEAgLTMwOCw3ICszMTEsNiBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNIT0JKRUNUKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9OT1NVQ0hPQkpFQ1Q7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CiAJICAgIH0KIAl9CiAJYnJlYWs7CkBAIC00NDksMTEgKzQ1MSwxMSBAQAogICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCSAgICBjYXNlIFJTX0RFU1RST1k6CiAJCSAgICAgICAgbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlciggbG9naCApOwpAQCAtNDYzLDYgKzQ2NSw3IEBACiAJICAgIH0KIAl9CiAJYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jCmluZGV4IDRmNGVhMDAuLjg0YmQ4ZmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMKQEAgLTQsMTAgKzQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibnNNb2R1bGVUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorCiB2b2lkCiBuc01vZHVsZVRhYmxlX2ZyZWUodm9pZCAqY29udGV4dCwgbmV0c25tcF9pdGVyYXRvcl9pbmZvICpkb250X2NhcmUpCiB7CkBAIC0xOCw4ICsyMSw3IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlX25zTW9kdWxlVGFibGUodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICAgICAgbnNNb2R1bGVUYWJsZV9vaWRbXSA9Ci0gICAgICAgIHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgMiwgMSB9OworICAgIGNvbnN0IG9pZCBuc01vZHVsZVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAyLCAxIH07CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteV9oYW5kbGVyOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm87CkBAIC03MywxMCArNzUsMTAgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgiaW5pdGlhbGl6ZV90YWJsZV9uc01vZHVsZVRhYmxlIiwKICAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgdGFibGUgbnNNb2R1bGVUYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCi0vKiogSW5pdGlhbHppZXMgdGhlIG5zTW9kdWxlVGFibGUgbW9kdWxlICovCisvKiogSW5pdGlhbGl6ZXMgdGhlIG5zTW9kdWxlVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X25zTW9kdWxlVGFibGUodm9pZCkKIHsKQEAgLTEzNywxOCArMTM5LDE4IEBACiAgICAgKm15X2RhdGFfY29udGV4dCA9IGN0cmVlLT50cmVlOwogCiAgICAgdnB0ciA9IHB1dF9pbmRleF9kYXRhOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAorICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCBjdHJlZS0+Y29udGV4dF9wdHItPmNvbnRleHRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lKSk7CiAKICAgICB2cHRyID0gdnB0ci0+bmV4dF92YXJpYWJsZTsKICAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKWN0cmVlLT5jb250ZXh0X3B0ci0+Zmlyc3Rfc3VidHJlZS0+bmFtZV9hLAorICAgICAgICAgICAgICAgICAgICAgICBjdHJlZS0+Y29udGV4dF9wdHItPmZpcnN0X3N1YnRyZWUtPm5hbWVfYSwKICAgICAgICAgICAgICAgICAgICAgICAgY3RyZWUtPmNvbnRleHRfcHRyLT5maXJzdF9zdWJ0cmVlLT5uYW1lbGVuICoKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkpOwogCiAgICAgdWx0bXAgPSBjdHJlZS0+Y29udGV4dF9wdHItPmZpcnN0X3N1YnRyZWUtPnByaW9yaXR5OwogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAmIHVsdG1wLCBzaXplb2YodWx0bXApKTsKIAogICAgIHJldHVybiBwdXRfaW5kZXhfZGF0YTsKIH0KQEAgLTE4NSwxNiArMTg3LDE2IEBACiAgICAgKm15X2RhdGFfY29udGV4dCA9IGN0cmVlLT50cmVlOwogCiAgICAgdnB0ciA9IHB1dF9pbmRleF9kYXRhOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAorICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCBjdHJlZS0+Y29udGV4dF9wdHItPmNvbnRleHRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lKSk7CiAKICAgICB2cHRyID0gdnB0ci0+bmV4dF92YXJpYWJsZTsKLSAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwgKHVfY2hhciAqKSBjdHJlZS0+dHJlZS0+bmFtZV9hLAorICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCBjdHJlZS0+dHJlZS0+bmFtZV9hLAogICAgICAgICAgICAgICAgICAgICAgICBjdHJlZS0+dHJlZS0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKIAogICAgIHVsdG1wID0gY3RyZWUtPnRyZWUtPnByaW9yaXR5OwogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAmIHVsdG1wLCBzaXplb2YodWx0bXApKTsKIAogICAgIHJldHVybiBwdXRfaW5kZXhfZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMKaW5kZXggMzFiOWZlNS4uZDdkM2NlOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xMCwxNSArMTEsMTQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oPgogI2luY2x1ZGUgIm5zVHJhbnNhY3Rpb25UYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorCiAvKiogSW5pdGlhbGl6ZSB0aGUgbnNUcmFuc2FjdGlvblRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0J3MgY29udGVudHMKICAgIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCiB2b2lkCiBpbml0aWFsaXplX3RhYmxlX25zVHJhbnNhY3Rpb25UYWJsZSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgICAgICBuc1RyYW5zYWN0aW9uVGFibGVfb2lkW10gPQotICAgICAgICB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDgsIDEgfTsKLSAgICBzaXplX3QgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZF9sZW4gPQotICAgICAgICBPSURfTEVOR1RIKG5zVHJhbnNhY3Rpb25UYWJsZV9vaWQpOworICAgIGNvbnN0IG9pZCBuc1RyYW5zYWN0aW9uVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDgsIDEgfTsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15X2hhbmRsZXI7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbzsKQEAgLTMzLDExICszMywxMCBAQAogICAgICAqIGlmIHlvdXIgdGFibGUgaXMgcmVhZCBvbmx5LCBpdCdzIGVhc2llc3QgdG8gY2hhbmdlIHRoZQogICAgICAqIEhBTkRMRVJfQ0FOX1JXUklURSBkZWZpbml0aW9uIGJlbG93IHRvIEhBTkRMRVJfQ0FOX1JPTkxZIAogICAgICAqLwotICAgIG15X2hhbmRsZXIgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibnNUcmFuc2FjdGlvblRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgbXlfaGFuZGxlciA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAibnNUcmFuc2FjdGlvblRhYmxlIiwgbnNUcmFuc2FjdGlvblRhYmxlX2hhbmRsZXIsCisgICAgICAgIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWQsIE9JRF9MRU5HVEgobnNUcmFuc2FjdGlvblRhYmxlX29pZCksCisgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKIAogICAgIGlmICghbXlfaGFuZGxlciB8fCAhdGFibGVfaW5mbyB8fCAhaWluZm8pIHsKICAgICAgICAgaWYgKG15X2hhbmRsZXIpCkBAIC02NSwxMCArNjQsMTAgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgiaW5pdGlhbGl6ZV90YWJsZV9uc1RyYW5zYWN0aW9uVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBuc1RyYW5zYWN0aW9uVGFibGUgYXMgYSB0YWJsZSBpdGVyYXRvclxuIikpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IobXlfaGFuZGxlciwgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKG15X2hhbmRsZXIsIGlpbmZvKTsKIH0KIAotLyoqIEluaXRpYWx6aWVzIHRoZSBuc1RyYW5zYWN0aW9uVGFibGUgbW9kdWxlICovCisvKiogSW5pdGlhbGl6ZXMgdGhlIG5zVHJhbnNhY3Rpb25UYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfbnNUcmFuc2FjdGlvblRhYmxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYwppbmRleCBkMmNlZTM1Li43OWZhOTdkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMKQEAgLTQsMTEgKzQsMTggQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibnNWYWNtQWNjZXNzVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfc3RvcmFnZXR5cGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9pdGVyYXRvcl9pbnNlcnRfY29udGV4dCkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoqIEluaXRpYWxpemVzIHRoZSBuc1ZhY21BY2Nlc3NUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfcmVnaXN0ZXJfbnNWYWNtX2NvbnRleHQoY29uc3QgY2hhciAqY29udGV4dCkKQEAgLTE3LDE3ICsyNCwyMiBAQAogICAgICAqIEluaXRpYWxpemUgdGhlIG5zVmFjbUFjY2Vzc1RhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cwogICAgICAqICAgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQKICAgICAgKi8KLSAgICBzdGF0aWMgb2lkIG5zVmFjbUFjY2Vzc1RhYmxlX29pZFtdICAgPSB7IDEsMyw2LDEsNCwxLDgwNzIsMSw5LDEgfTsKLSAgICBzaXplX3QgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG5zVmFjbUFjY2Vzc1RhYmxlX29pZCk7CisgICAgY29uc3Qgb2lkIG5zVmFjbUFjY2Vzc1RhYmxlX29pZFtdICAgPSB7IDEsMyw2LDEsNCwxLDgwNzIsMSw5LDEgfTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAotICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJuc1ZhY21BY2Nlc3NUYWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJuc1ZhY21BY2Nlc3NUYWJsZSIsIG5zVmFjbUFjY2Vzc1RhYmxlX2hhbmRsZXIsCisgICAgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX29pZCwgT0lEX0xFTkdUSChuc1ZhY21BY2Nlc3NUYWJsZV9vaWQpLAorICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAibnNWYWNtQWNjZXNzVGFibGUiLCBuc1ZhY21BY2Nlc3NUYWJsZV9oYW5kbGVyLAorICAgICAgICBuc1ZhY21BY2Nlc3NUYWJsZV9vaWQsIE9JRF9MRU5HVEgobnNWYWNtQWNjZXNzVGFibGVfb2lkKSwKKyAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC00OCw3ICs2MCw3IEBACiAgICAgaWYgKCBjb250ZXh0ICYmIGNvbnRleHRbMF0gKQogICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHQpOwogCi0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihyZWcsIGlpbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihyZWcsIGlpbmZvKTsKIH0KIAogdm9pZApAQCAtMTkxLDYgKzIwMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zMzYsNiArMzQ5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oCmluZGV4IDhjMGRlMWMuLjUwZGQxNTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50X21pYnMuaAorKysgYi9hZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmgKQEAgLTEsNiArMSw4IEBACiBjb25maWdfcmVxdWlyZShhZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUpCiBjb25maWdfcmVxdWlyZShhZ2VudC9uc01vZHVsZVRhYmxlKQorI2lmbmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNEZWJ1ZykKKyNlbmRpZgogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNDYWNoZSkKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zTG9nZ2luZykKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zVmFjbUFjY2Vzc1RhYmxlKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMKaW5kZXggZDE1NmQ0Ny4uYjU5MGM3YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jCkBAIC0yLDYgKzIsNyBAQAogICogIEFnZW50WCBDb25maWd1cmF0aW9uCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTE0LDE5ICsxNSwxNSBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9QV0RfSAotI2luY2x1ZGUgPHB3ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9HUlBfSAotI2luY2x1ZGUgPGdycC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAic25tcGQuaCIKICNpbmNsdWRlICJhZ2VudHgvYWdlbnR4X2NvbmZpZy5oIgogI2luY2x1ZGUgImFnZW50eC9wcm90b2NvbC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1c2VyX2luZm9ybWF0aW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX3RpbWVfdG9fc2VjcykKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogQ29tbW9uIG1hc3RlciBhbmQgc3ViLWFnZW50CkBAIC00Nyw3ICs0NCw2IEBACiBhZ2VudHhfcGFyc2VfbWFzdGVyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewogICAgIGludCAgICAgICAgICAgICBpID0gLTE7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZltCVUZTSVpdOwogCiAgICAgaWYgKCFzdHJjbXAoY3B0ciwgImFnZW50eCIpIHx8CiAgICAgICAgICFzdHJjbXAoY3B0ciwgImFsbCIpIHx8CkBAIC02MCw4ICs1Niw3IEBACiAgICAgICAgIGkgPSBhdG9pKGNwdHIpOwogCiAgICAgaWYgKGkgPCAwIHx8IGkgPiAxKSB7Ci0gICAgICAgIHNwcmludGYoYnVmLCAibWFzdGVyICclcycgdW5yZWNvZ25pc2VkIiwgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigibWFzdGVyICclcycgdW5yZWNvZ25pc2VkIiwgY3B0cik7CiAgICAgfSBlbHNlCiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfTUFTVEVSLCBpKTsKIH0KQEAgLTc1LDEyICs3MCw2IEBACiAgICAgaW50IHNfcGVybSA9IC0xOwogICAgIGludCBkX3Blcm0gPSAtMTsKICAgICBjaGFyICpzdDsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICBzdHJ1Y3QgcGFzc3dkICpwd2Q7Ci0jZW5kaWYKLSNpZiBIQVZFX0dFVEdSTkFNICYmIEhBVkVfR1JQX0gKLSAgICBzdHJ1Y3QgZ3JvdXAgICpncnA7Ci0jZW5kaWYKIAogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvY29uZmlnIiwgInBvcnQgcGVybWlzc2lvbnM6ICVzXG4iLCBjcHRyKSk7CiAgICAgc29ja2V0X3Blcm0gPSBzdHJ0b2tfcihjcHRyLCAiIFx0IiwgJnN0KTsKQEAgLTEwNywxNiArOTYsNyBAQAogICAgICAqIFRyeSB0byBoYW5kbGUgbnVtZXJpYyBVSURzIG9yIHVzZXIgbmFtZXMgZm9yIHRoZSBzb2NrZXQgb3duZXIKICAgICAgKi8KICAgICBpZiAoc29ja2V0X3VzZXIpIHsKLSAgICAgICAgdWlkID0gYXRvaShzb2NrZXRfdXNlcik7Ci0gICAgICAgIGlmICggdWlkID09IDAgKSB7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICi0gICAgICAgICAgICBwd2QgPSBnZXRwd25hbSggc29ja2V0X3VzZXIgKTsKLSAgICAgICAgICAgIGlmIChwd2QpCi0gICAgICAgICAgICAgICAgdWlkID0gcHdkLT5wd191aWQ7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIkNhbid0IGlkZW50aWZ5IEFnZW50WCBzb2NrZXQgdXNlciAoJXMpLlxuIiwgc29ja2V0X3VzZXIpOwotICAgICAgICB9CisgICAgICAgIHVpZCA9IG5ldHNubXBfc3RyX3RvX3VpZChzb2NrZXRfdXNlcik7CiAgICAgICAgIGlmICggdWlkICE9IDAgKQogICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfVVNFUiwgdWlkKTsKQEAgLTEyOCwxNiArMTA4LDcgQEAKICAgICAgKiBhbmQgc2ltaWxhcmx5IGZvciB0aGUgc29ja2V0IGdyb3VwIG93bmVyc2hpcAogICAgICAqLwogICAgIGlmIChzb2NrZXRfZ3JvdXApIHsKLSAgICAgICAgZ2lkID0gYXRvaShzb2NrZXRfZ3JvdXApOwotICAgICAgICBpZiAoIGdpZCA9PSAwICkgewotI2lmIEhBVkVfR0VUR1JOQU0gJiYgSEFWRV9HUlBfSAotICAgICAgICAgICAgZ3JwID0gZ2V0Z3JuYW0oIHNvY2tldF9ncm91cCApOwotICAgICAgICAgICAgaWYgKGdycCkKLSAgICAgICAgICAgICAgICBnaWQgPSBncnAtPmdyX2dpZDsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiQ2FuJ3QgaWRlbnRpZnkgQWdlbnRYIHNvY2tldCBncm91cCAoJXMpLlxuIiwgc29ja2V0X2dyb3VwKTsKLSAgICAgICAgfQorICAgICAgICBnaWQgPSBuZXRzbm1wX3N0cl90b19naWQoc29ja2V0X2dyb3VwKTsKICAgICAgICAgaWYgKCBnaWQgIT0gMCApCiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19HUk9VUCwgZ2lkKTsKQEAgLTE0OSw4ICsxMjAsMTIgQEAKIHZvaWQKIGFnZW50eF9wYXJzZV9hZ2VudHhfdGltZW91dChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBpbnQgeCA9IGF0b2koY3B0cik7CisgICAgaW50IHggPSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoY3B0cik7CiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9jb25maWcvdGltZW91dCIsICIlc1xuIiwgY3B0cikpOworICAgIGlmICh4ID09IC0xKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIkludmFsaWQgdGltZW91dCB2YWx1ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9USU1FT1VULCB4ICogT05FX1NFQyk7CiB9CkBAIC0xODUsMTEgKzE2MCwxNCBAQAogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCI6YWdlbnR4IiwgdG9rZW4sIHBhcnNlciwgcmVsZWFzZXIsIGhlbHApOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnR4X3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UWF9VTlJFR0lTVEVSX0NPTkZJR19IQU5ETEVSCiB2b2lkCiBhZ2VudHhfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbikKIHsKICAgICB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCI6YWdlbnR4IiwgdG9rZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIgKi8KIAogdm9pZAogYWdlbnR4X2NvbmZpZ19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMKaW5kZXggMWRiZGQyYi4uZDM2ZmUyZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTE5LDExICsyMCw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTM2LDkgKzMzLDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC00OCw3ICs0Miw3IEBACiAjaW5jbHVkZSAiYWdlbnR4L2NsaWVudC5oIgogI2luY2x1ZGUgImFnZW50eC9zdWJhZ2VudC5oIgogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc2V0X2FnZW50X3VwdGltZSkKIAogICAgICAgICAvKgogICAgICAgICAgKiBBZ2VudFggaGFuZGxpbmcgdXRpbGl0eSByb3V0aW5lcwpAQCAtNjMsNyArNTcsNiBAQAogICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwgdm9pZCAqbWFnaWMpCiB7CiAgICAgc3RydWN0IHN5bmNoX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgc3luY2hfc3RhdGUgKikgbWFnaWM7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdywgZGlmZjsKIAogICAgIGlmICghc3RhdGUgfHwgcmVxaWQgIT0gc3RhdGUtPnJlcWlkKSB7CiAgICAgICAgIHJldHVybiBoYW5kbGVfYWdlbnR4X3BhY2tldChvcCwgc2Vzc2lvbiwgcmVxaWQsIHBkdSwgbWFnaWMpOwpAQCAtODAsMTcgKzczLDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBTeW5jaHJvbmlzZSBzeXNVcFRpbWUgd2l0aCB0aGUgbWFzdGVyIGFnZW50CiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLSAgICAgICAgICAgIG5vdy50dl9zZWMtLTsKLSAgICAgICAgICAgIG5vdy50dl91c2VjICs9IDEwMDAwMDBMOwotICAgICAgICAgICAgZGlmZi50dl9zZWMgPSBwZHUtPnRpbWUgLyAxMDA7Ci0gICAgICAgICAgICBkaWZmLnR2X3VzZWMgPSAocGR1LT50aW1lIC0gKGRpZmYudHZfc2VjICogMTAwKSkgKiAxMDAwMDsKLSAgICAgICAgICAgIHN0YXJ0dGltZS50dl9zZWMgPSBub3cudHZfc2VjIC0gZGlmZi50dl9zZWM7Ci0gICAgICAgICAgICBzdGFydHRpbWUudHZfdXNlYyA9IG5vdy50dl91c2VjIC0gZGlmZi50dl91c2VjOwotICAgICAgICAgICAgaWYgKHN0YXJ0dGltZS50dl91c2VjID4gMTAwMDAwMEwpIHsKLSAgICAgICAgICAgICAgICBzdGFydHRpbWUudHZfdXNlYyAtPSAxMDAwMDAwTDsKLSAgICAgICAgICAgICAgICBzdGFydHRpbWUudHZfc2VjKys7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZXRzbm1wX3NldF9hZ2VudF91cHRpbWUocGR1LT50aW1lKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAob3AgPT0gTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQpIHsKICAgICAgICAgc3RhdGUtPnBkdSA9IE5VTEw7CkBAIC0yMTIsNyArMTk1LDcgQEAKICAgICBwZHUtPnJhbmdlX3N1YmlkID0gcmFuZ2Vfc3ViaWQ7CiAgICAgaWYgKGNvbnRleHROYW1lKSB7CiAgICAgICAgIHBkdS0+ZmxhZ3MgfD0gQUdFTlRYX01TR19GTEFHX05PTl9ERUZBVUxUX0NPTlRFWFQ7Ci0gICAgICAgIHBkdS0+Y29tbXVuaXR5ID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICAgICAgcGR1LT5jb21tdW5pdHkgPSAodV9jaGFyICopIHN0cmR1cChjb250ZXh0TmFtZSk7CiAgICAgICAgIHBkdS0+Y29tbXVuaXR5X2xlbiA9IHN0cmxlbihjb250ZXh0TmFtZSk7CiAgICAgfQogCkBAIC0yNjksNyArMjUyLDcgQEAKICAgICBwZHUtPnJhbmdlX3N1YmlkID0gcmFuZ2Vfc3ViaWQ7CiAgICAgaWYgKGNvbnRleHROYW1lKSB7CiAgICAgICAgIHBkdS0+ZmxhZ3MgfD0gQUdFTlRYX01TR19GTEFHX05PTl9ERUZBVUxUX0NPTlRFWFQ7Ci0gICAgICAgIHBkdS0+Y29tbXVuaXR5ID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICAgICAgcGR1LT5jb21tdW5pdHkgPSAodV9jaGFyICopIHN0cmR1cChjb250ZXh0TmFtZSk7CiAgICAgICAgIHBkdS0+Y29tbXVuaXR5X2xlbiA9IHN0cmxlbihjb250ZXh0TmFtZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMKaW5kZXggNmIwZjY1ZS4uYzQyYTQyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2lmIEhBVkVfSU9fSAogI2luY2x1ZGUgPGlvLmg+CiAjZW5kaWYKQEAgLTMxLDkgKzMyLDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTUzLDYgKzUxLDEwIEBACiAjaW5jbHVkZSAiYWdlbnR4L3Byb3RvY29sLmgiCiAjaW5jbHVkZSAiYWdlbnR4L21hc3Rlcl9hZG1pbi5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodW5peF9zb2NrZXRfcGF0aHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmcmVlX2FnZW50X3NubXBfc2Vzc2lvbl9ieV9zZXNzaW9uKQorCiB2b2lkCiByZWFsX2luaXRfbWFzdGVyKHZvaWQpCiB7CkBAIC02MCwxMyArNjIsNiBAQAogICAgIGNoYXIgKmFnZW50eF9zb2NrZXRzOwogICAgIGNoYXIgKmNwMTsKIAotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCi0gICAgaW50IGFnZW50eF9kaXJfcGVybTsKLSAgICBpbnQgYWdlbnR4X3NvY2tfcGVybTsKLSAgICBpbnQgYWdlbnR4X3NvY2tfdXNlcjsKLSAgICBpbnQgYWdlbnR4X3NvY2tfZ3JvdXA7Ci0jZW5kaWYKLQogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSkgIT0gTUFTVEVSX0FHRU5UKQogICAgICAgICByZXR1cm47CiAKQEAgLTk4LDYgKzkzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1RJTUVPVVQpOwogICAgIHNlc3MucmV0cmllcyA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9SRVRSSUVTKTsKKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCisgICAgeworCWludCBhZ2VudHhfZGlyX3Blcm0gPQorCSAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKwkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfRElSX1BFUk0pOworCWlmIChhZ2VudHhfZGlyX3Blcm0gPT0gMCkKKwkgICAgYWdlbnR4X2Rpcl9wZXJtID0gTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERTsKKwluZXRzbm1wX3VuaXhfY3JlYXRlX3BhdGhfd2l0aF9tb2RlKGFnZW50eF9kaXJfcGVybSk7CisgICAgfQorI2VuZGlmCisKICAgICBjcDEgPSBhZ2VudHhfc29ja2V0czsKICAgICB3aGlsZSAoY3AxKSB7CiAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0OwpAQCAtMTExLDQ0ICsxMTgsMTUgQEAKICAgICAgICAgaWYgKGNwMSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAqY3AxKysgPSAnXDAnOwogCX0KLSAgICAKLSAgICAgICAgaWYgKHNlc3MucGVlcm5hbWVbMF0gPT0gJy8nKSB7Ci0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiAgSWYgdGhpcyBpcyBhIFVuaXggcGF0aG5hbWUsCi0gICAgICAgICAgICAgKiAgdHJ5IGFuZCBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmaXJzdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWdlbnR4X2Rpcl9wZXJtID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9ESVJfUEVSTSk7Ci0gICAgICAgICAgICBpZiAoYWdlbnR4X2Rpcl9wZXJtID09IDApCi0gICAgICAgICAgICAgICAgYWdlbnR4X2Rpcl9wZXJtID0gTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERTsKLSAgICAgICAgICAgIGlmIChta2RpcmhpZXIoc2Vzcy5wZWVybmFtZSwgKG1vZGVfdClhZ2VudHhfZGlyX3Blcm0sIDEpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgYWdlbnRYIHNvY2tldDogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2Vzcy5wZWVybmFtZSk7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgbmV0c25tcF9zZXNzX2xvZ19lcnJvcihMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaXggZG9tYWluIHN1cHBvcnQgbm90IGF2YWlsYWJsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3MpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAKKwogICAgICAgICAvKgotICAgICAgICAgKiAgT3RoZXJ3aXNlLCBsZXQgJ3NubXBfb3BlbicgaW50ZXJwcmV0IHRoZSBzdHJpbmcuCisgICAgICAgICAqICBMZXQgJ3NubXBfb3BlbicgaW50ZXJwcmV0IHRoZSBkZXNjcmlwdG9yLgogICAgICAgICAgKi8KICAgICAgICAgc2Vzcy5sb2NhbF9wb3J0ID0gQUdFTlRYX1BPUlQ7ICAgICAgLyogSW5kaWNhdGUgc2VydmVyICYgc2V0IGRlZmF1bHQgcG9ydCAqLwogICAgICAgICBzZXNzLnJlbW90ZV9wb3J0ID0gMDsKICAgICAgICAgc2Vzcy5jYWxsYmFjayA9IGhhbmRsZV9tYXN0ZXJfYWdlbnR4X3BhY2tldDsKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIoImFnZW50eCIsIHNlc3MucGVlcm5hbWUpOwotICAgICAgICBpZiAodCA9PSBOVUxMICYmIGVycm5vID09IEVBRERSSU5VU0UpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDb3VsZCBiZSBhIGxlZnQtb3ZlciBzb2NrZXQgKG5vdyBkZWxldGVkKQotICAgICAgICAgICAgICogVHJ5IGFnYWluCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcigiYWdlbnR4Iiwgc2Vzcy5wZWVybmFtZSk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHQgPT0gTlVMTCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGRpYWdub3NlIHNubXBfb3BlbiBlcnJvcnMgd2l0aCB0aGUgaW5wdXQgbmV0c25tcF9zZXNzaW9uCkBAIC0xNzEsMjMgKzE0OSwyNCBAQAogICAgICAgICB9IGVsc2UgewogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCiAgICAgICAgICAgICBpZiAodC0+ZG9tYWluID09IG5ldHNubXBfVW5peERvbWFpbiAmJiB0LT5sb2NhbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBuYW1lW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pICsgMV07Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG5hbWUsIHQtPmxvY2FsLCB0LT5sb2NhbF9sZW5ndGgpOwotICAgICAgICAgICAgICAgIG5hbWVbdC0+bG9jYWxfbGVuZ3RoXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBBcHBseSBhbnkgc2V0dGluZ3MgdG8gdGhlIG93bmVyc2hpcC9wZXJtaXNzaW9ucyBvZiB0aGUKICAgICAgICAgICAgICAgICAgKiBBZ2VudFggc29ja2V0CiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgYWdlbnR4X3NvY2tfcGVybSA9CisgICAgICAgICAgICAgICAgaW50IGFnZW50eF9zb2NrX3Blcm0gPQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX1BFUk0pOwotICAgICAgICAgICAgICAgIGFnZW50eF9zb2NrX3VzZXIgPQorICAgICAgICAgICAgICAgIGludCBhZ2VudHhfc29ja191c2VyID0KICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19VU0VSKTsKLSAgICAgICAgICAgICAgICBhZ2VudHhfc29ja19ncm91cCA9CisgICAgICAgICAgICAgICAgaW50IGFnZW50eF9zb2NrX2dyb3VwID0KICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19HUk9VUCk7CiAKKyAgICAgICAgICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgKyAxXTsKKyAgICAgICAgICAgICAgICBtZW1jcHkobmFtZSwgdC0+bG9jYWwsIHQtPmxvY2FsX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgbmFtZVt0LT5sb2NhbF9sZW5ndGhdID0gJ1wwJzsKKwogICAgICAgICAgICAgICAgIGlmIChhZ2VudHhfc29ja19wZXJtICE9IDApCiAgICAgICAgICAgICAgICAgICAgIGNobW9kKG5hbWUsIGFnZW50eF9zb2NrX3Blcm0pOwogCkBAIC0yMTMsNiArMTkyLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgorICAgIG5ldHNubXBfdW5peF9kb250X2NyZWF0ZV9wYXRoKCk7CisjZW5kaWYKKwogICAgIFNOTVBfRlJFRShhZ2VudHhfc29ja2V0cyk7CiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiaW5pdGlhbGl6aW5nLi4uICAgRE9ORVxuIikpOwogfQpAQCAtMjM0LDcgKzIxNyw3IEBACiAKICAgICBjYWNoZSA9IG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZShjYWNoZSk7CiAgICAgaWYgKCFjYWNoZSkgewotICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJyZXNwb25zZSB0b28gbGF0ZSBvbiBzZXNzaW9uICUwOHBcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInJlc3BvbnNlIHRvbyBsYXRlIG9uIHNlc3Npb24gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTI0Myw4ICsyMjYsOCBAQAogICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7CiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVDp7CiAgICAgICAgICAgICB2b2lkICAgICAgICAgICAqcyA9IHNubXBfc2Vzc19wb2ludGVyKHNlc3Npb24pOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAidGltZW91dCBvbiBzZXNzaW9uICUwOHBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJ0aW1lb3V0IG9uIHNlc3Npb24gJThwIHJlcT0weCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiwgKHVuc2lnbmVkKXJlcWlkKSk7CiAKICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZChyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRCk7CkBAIC0yODEsMTAgKzI2NCwxMCBAQAogICAgIGNhc2UgTkVUU05NUF9DQUxMQkFDS19PUF9ESVNDT05ORUNUOgogICAgIGNhc2UgTkVUU05NUF9DQUxMQkFDS19PUF9TRU5EX0ZBSUxFRDoKICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1QpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImRpc2Nvbm5lY3Qgb24gc2Vzc2lvbiAlMDhwXG4iLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiZGlzY29ubmVjdCBvbiBzZXNzaW9uICU4cFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmQgZmFpbGVkIG9uIHNlc3Npb24gJTA4cFxuIiwKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmQgZmFpbGVkIG9uIHNlc3Npb24gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbikpOwogICAgICAgICB9CiAgICAgICAgIGNsb3NlX2FnZW50eF9zZXNzaW9uKHNlc3Npb24sIC0xKTsKQEAgLTMwOCw5ICsyOTEsMTAgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiZ290IHJlc3BvbnNlIGVycnN0YXQ9JWQsIChyZXE9MHgleCx0cmFucz0iCisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiZ290IHJlc3BvbnNlIGVycnN0YXQ9JWxkLCAocmVxPTB4JXgsdHJhbnM9IgogICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5lcnJzdGF0LHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgICAgICAgICAgICAgIHBkdS0+ZXJyc3RhdCwgKHVuc2lnbmVkKXBkdS0+cmVxaWQsICh1bnNpZ25lZClwZHUtPnRyYW5zaWQsCisJCSh1bnNpZ25lZClwZHUtPnNlc3NpZCkpOwogCiAgICAgaWYgKHBkdS0+ZXJyc3RhdCAhPSBBR0VOVFhfRVJSX05PRVJST1IpIHsKICAgICAgICAgLyogW1JGQyAyNDcxIC0gNy4yLjUuMi5dCkBAIC0zODcsOSArMzcxLDkgQEAKICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiYWdlbnR4L21hc3RlciIsIHZhci0+bmFtZSwgdmFyLT5uYW1lX2xlbmd0aCkpOwogICAgICAgICAgICAgREVCVUdNU0coKCJhZ2VudHgvbWFzdGVyIiwgIlxuIikpOwogICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIiAgICA+PiAiKSk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dWQVIoKCJzbm1wX2FnZW50IiwgdmFyKSk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX2FnZW50IiwgIlxuIikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIiAgICA+PiAiKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dWQVIoKCJhZ2VudHgvbWFzdGVyIiwgdmFyKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJhZ2VudHgvbWFzdGVyIiwgIlxuIikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKgpAQCAtNDgxLDYgKzQ2NSw3IEBACiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShBR0VOVFhfTVNHX0dFVE5FWFQpOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoQUdFTlRYX01TR19URVNUU0VUKTsKICAgICAgICAgYnJlYWs7CkBAIC01MDQsNiArNDg5LDcgQEAKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShBR0VOVFhfTVNHX0NMRUFOVVBTRVQpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKQEAgLTYxNSwxMiArNjAxLDExIEBACiAgICAgLyoKICAgICAgKiBzZW5kIHRoZSByZXF1ZXN0cyBvdXQuCiAgICAgICovCi0gICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJzZW5kaW5nIHBkdSAocmVxPTB4JXgsdHJhbnM9MHgleCxzZXNzPTB4JXgpXG4iLAotICAgICAgICAgICAgICAgIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmRpbmcgcGR1IChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXBkdS0+cmVxaWQsICh1bnNpZ25lZClwZHUtPnRyYW5zaWQsICh1bnNpZ25lZClwZHUtPnNlc3NpZCkpOwogICAgIHJlc3VsdCA9IHNubXBfYXN5bmNfc2VuZChheF9zZXNzaW9uLCBwZHUsIGFnZW50eF9nb3RfcmVzcG9uc2UsIGNiX2RhdGEpOwotCi0gICAgaWYgKHJlc3VsdCA9PSAwICkgewotICAgICAgICBzbm1wX2ZyZWVfcGR1KCBwZHUgKTsKKyAgICBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oCmluZGV4IGI2YTdmNmIuLmE1ZGJmYWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaAorKysgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgKQEAgLTcsNyArNyw2IEBACiBjb25maWdfcmVxdWlyZShhZ2VudHgvY2xpZW50KQogY29uZmlnX3JlcXVpcmUoYWdlbnR4L21hc3Rlcl9hZG1pbikKIGNvbmZpZ19yZXF1aXJlKGFnZW50eC9hZ2VudHhfY29uZmlnKQotY29uZmlnX3JlcXVpcmUobWliSUkvc3lzT1JUYWJsZSkKIAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tYXN0ZXIodm9pZCk7CiAgICAgIHZvaWQgICAgICAgICAgICByZWFsX2luaXRfbWFzdGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jCmluZGV4IDEyZGRiNWQuLjRlYWVhYjYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgQWdlbnRYIEFkbWluaXN0cmF0aXZlIHJlcXVlc3QgaGFuZGxpbmcKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZmRlZiBIQVZFX1NUUklOR19ICkBAIC0xMywxMSArMTQsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0yOSw5ICsyNiw2IEBACiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC00NSwxMiArMzksMTQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9pbmRleC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KLSNpbmNsdWRlICJtaWJJSS9zeXNPUlRhYmxlLmgiCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oPgogI2luY2x1ZGUgIm1hc3Rlci5oIgogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOwotCi0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVucmVnaXN0ZXJfbWliX3RhYmxlX3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRyYXBfdmFyc193aXRoX2NvbnRleHQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjYWxjdWxhdGVfc2VjdGltZV9kaWZmKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWxsb2NhdGVfZ2xvYmFsY2FjaGVpZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlbW92ZV9pbmRleCkKIAogbmV0c25tcF9zZXNzaW9uICoKIGZpbmRfYWdlbnR4X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgaW50IHNlc3NpZCkKQEAgLTY4LDkgKzY0LDggQEAKIG9wZW5fYWdlbnR4X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNwOwotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJvcGVuICUwOHBcbiIsIHNlc3Npb24pKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJvcGVuICU4cFxuIiwgc2Vzc2lvbikpOwogICAgIHNwID0gKG5ldHNubXBfc2Vzc2lvbiAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfc2Vzc2lvbikpOwogICAgIGlmIChzcCA9PSBOVUxMKSB7CiAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IEFHRU5UWF9FUlJfT1BFTl9GQUlMRUQ7CkBAIC0xMDgsOCArMTAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbmd0aCk7CiAgICAgc3AtPnNlY3VyaXR5QXV0aFByb3RvTGVuID0gcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoOwogICAgIHNwLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoKGNoYXIgKikgcGR1LT52YXJpYWJsZXMtPnZhbC5zdHJpbmcpOwotICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLSAgICBzcC0+ZW5naW5lVGltZSA9IGNhbGN1bGF0ZV90aW1lX2RpZmYoJm5vdywgJnN0YXJ0dGltZSk7CisgICAgc3AtPmVuZ2luZVRpbWUgPSAodWludDMyX3QpKChuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkgKyA1MCkgLyAxMDApICYgMHg3ZmZmZmZmZkw7CiAKICAgICBzcC0+c3Vic2Vzc2lvbiA9IHNlc3Npb247ICAgLyogbGluayBiYWNrIHRvIGhlYWQgKi8KICAgICBzcC0+ZmxhZ3MgfD0gU05NUF9GTEFHU19TVUJTRVNTSU9OOwpAQCAtMTE3LDcgKzExMSw3IEBACiAgICAgc3AtPmZsYWdzIHw9IChwZHUtPmZsYWdzICYgQUdFTlRYX01TR19GTEFHX05FVFdPUktfQllURV9PUkRFUik7CiAgICAgc3AtPm5leHQgPSBzZXNzaW9uLT5zdWJzZXNzaW9uOwogICAgIHNlc3Npb24tPnN1YnNlc3Npb24gPSBzcDsKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJvcGVuZWQgJTA4cCA9ICVkIHdpdGggZmxhZ3MgPSAlMDJ4XG4iLAorICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW5lZCAlOHAgPSAlbGQgd2l0aCBmbGFncyA9ICUwMmx4XG4iLAogICAgICAgICAgICAgICAgIHNwLCBzcC0+c2Vzc2lkLCBzcC0+ZmxhZ3MgJiBBR0VOVFhfTVNHX0ZMQUdTX01BU0spKTsKIAogICAgIHJldHVybiBzcC0+c2Vzc2lkOwpAQCAtMTMxLDcgKzEyNSw3IEBACiAgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT1RfT1BFTjsKIAotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImNsb3NlICUwOHAsICVkXG4iLCBzZXNzaW9uLCBzZXNzaWQpKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJjbG9zZSAlOHAsICVkXG4iLCBzZXNzaW9uLCBzZXNzaWQpKTsKICAgICBpZiAoc2Vzc2lkID09IC0xKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGxvY2tpbmcgdXAgdGhlIGFnZW50IHdoZW4KQEAgLTE0OSw5ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICB1bnJlZ2lzdGVyX21pYnNfYnlfc2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICAgdW5yZWdpc3Rlcl9pbmRleF9ieV9zZXNzaW9uKHNlc3Npb24pOwotICAgICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SX1NFU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXNlc3Npb24pOworICAgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihzZXNzaW9uKTsKIAlTTk1QX0ZSRUUoc2Vzc2lvbi0+bXl2b2lkKTsKICAgICAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKICAgICB9CkBAIC0xNjMsOSArMTU1LDcgQEAKICAgICAgICAgaWYgKHNwLT5zZXNzaWQgPT0gc2Vzc2lkKSB7CiAgICAgICAgICAgICB1bnJlZ2lzdGVyX21pYnNfYnlfc2Vzc2lvbihzcCk7CiAgICAgICAgICAgICB1bnJlZ2lzdGVyX2luZGV4X2J5X3Nlc3Npb24oc3ApOwotICAgICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXNwKTsKKyAgICAgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNwKTsKIAogICAgICAgICAgICAgKnByZXZOZXh0ID0gc3AtPm5leHQ7CiAKQEAgLTE3OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZnJlZShzcCk7CiAgICAgICAgICAgICBzcCA9IE5VTEw7CiAKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImNsb3NlZCAlMDhwLCAlZCBva2F5XG4iLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiY2xvc2VkICU4cCwgJWQgb2theVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sIHNlc3NpZCkpOwogICAgICAgICAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKICAgICAgICAgfQpAQCAtMjMzLDcgKzIyMyw3IEBACiAgICAgcmVnLT5oYW5kbGVyLT5teXZvaWQgPSBzZXNzaW9uOwogICAgIHJlZy0+Z2xvYmFsX2NhY2hlaWQgPSBjYWNoZWlkOwogICAgIGlmIChOVUxMICE9IHBkdS0+Y29tbXVuaXR5KQotICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKHBkdS0+Y29tbXVuaXR5KTsKKyAgICAgICAgcmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cCgoY2hhciAqKXBkdS0+Y29tbXVuaXR5KTsKIAogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgbWliLiBOb3RlIHRoYXQgZm9yIGZhaWx1cmUgY2FzZXMsIHRoZSByZWdpc3RyYXRpb24gaW5mbwpAQCAtMzgwLDIwICszNzAsMTcgQEAKIGFkZF9hZ2VudF9jYXBzX2xpc3QobmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNwOwotICAgIHN0cnVjdCBzeXNPUlRhYmxlIHBhcm1zOworICAgIGNoYXIqIGRlc2NyaXB0aW9uOwogCiAgICAgc3AgPSBmaW5kX2FnZW50eF9zZXNzaW9uKHNlc3Npb24sIHBkdS0+c2Vzc2lkKTsKICAgICBpZiAoc3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9UX09QRU47CiAKLSAgICBwYXJtcy5PUl9vaWQgPSBwZHUtPnZhcmlhYmxlcy0+bmFtZTsKLSAgICBwYXJtcy5PUl9vaWRsZW4gPSBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGg7Ci0gICAgcGFybXMuT1JfZGVzY3IgID0gbmV0c25tcF9zdHJkdXBfYW5kX251bGwocGR1LT52YXJpYWJsZXMtPnZhbC5zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPnZhbF9sZW4pOwotICAgIHBhcm1zLk9SX3Nlc3MgPSBzcDsKLSAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfUkVHX1NZU09SLCAodm9pZCopJnBhcm1zKTsKLSAgICBmcmVlKHBhcm1zLk9SX2Rlc2NyKTsKKyAgICBkZXNjcmlwdGlvbiA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKHBkdS0+dmFyaWFibGVzLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPnZhbF9sZW4pOworICAgIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwZHUtPnZhcmlhYmxlcy0+bmFtZSwgcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc3ApOworICAgIGZyZWUoZGVzY3JpcHRpb24pOwogICAgIHJldHVybiBBR0VOVFhfRVJSX05PRVJST1I7CiB9CiAKQEAgLTQwMSwzMiArMzg4LDI4IEBACiByZW1vdmVfYWdlbnRfY2Fwc19saXN0KG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUpCiB7CiAgICAgbmV0c25tcF9zZXNzaW9uICpzcDsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSBwYXJtczsKKyAgICBpbnQgcmM7CiAKICAgICBzcCA9IGZpbmRfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgcGR1LT5zZXNzaWQpOwogICAgIGlmIChzcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT1RfT1BFTjsKIAotICAgIHBhcm1zLk9SX29pZCA9IHBkdS0+dmFyaWFibGVzLT5uYW1lOwotICAgIHBhcm1zLk9SX29pZGxlbiA9IHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aDsKLSAgICBwYXJtcy5PUl9zZXNzID0gc3A7Ci0gICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SLCAodm9pZCopJnBhcm1zKTsKLSAgICAvKgotICAgICAqIG5vIGVhc3kgd2F5IHRvIGdldCBhbiBlcnJvciBjb2RlLi4uCi0gICAgICogaWYgKHJjIDwgMCkKLSAgICAgKiAgIHJldHVybiBBR0VOVFhfRVJSX1VOS05PV05fQUdFTlRDQVBTOwotICAgICAqLworICAgIHJjID0gdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3MocGR1LT52YXJpYWJsZXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgsIHNwKTsKKworICAgIGlmIChyYyA8IDApCisgICAgICByZXR1cm4gQUdFTlRYX0VSUl9VTktOT1dOX0FHRU5UQ0FQUzsKKwogICAgIHJldHVybiBBR0VOVFhfRVJSX05PRVJST1I7CiB9CiAKIGludAogYWdlbnR4X25vdGlmeShuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewotICAgIG5ldHNubXBfc2Vzc2lvbiAqc3A7CisgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzcDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcjsKLSAgICBleHRlcm4gb2lkICAgICAgc3lzdXB0aW1lX29pZFtdLCBzbm1wdHJhcF9vaWRbXTsKLSAgICBleHRlcm4gc2l6ZV90ICAgc3lzdXB0aW1lX29pZF9sZW4sIHNubXB0cmFwX29pZF9sZW47CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgICBzeXN1cHRpbWVfb2lkW10sIHNubXB0cmFwX29pZFtdOworICAgIGV4dGVybiBjb25zdCBzaXplX3QgICAgc3lzdXB0aW1lX29pZF9sZW4sIHNubXB0cmFwX29pZF9sZW47CiAKICAgICBzcCA9IGZpbmRfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgcGR1LT5zZXNzaWQpOwogICAgIGlmIChzcCA9PSBOVUxMKQpAQCAtNDU0LDcgKzQzNywxOCBAQAogICAgICAqICAgICBhcyB0aGlzIGlzIHZhbGlkIEFnZW50WCBzeW50YXguCiAgICAgICovCiAKLSAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHBkdS0+dmFyaWFibGVzKTsKKwkvKiBJZiBhIGNvbnRleHQgbmFtZSB3YXMgc3BlY2lmaWVkLCBzZW5kIHRoZSB0cmFwIHVzaW5nIHRoYXQgY29udGV4dC4KKwkgKiBPdGhlcndpc2UsIHNlbmQgdGhlIHRyYXAgd2l0aG91dCB0aGUgY29udGV4dCB1c2luZyB0aGUgb2xkIG1ldGhvZCAqLworCWlmIChwZHUtPmNvbnRleHROYW1lICE9IE5VTEwpCisJeworICAgICAgICBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQoLTEsIC0xLCBwZHUtPnZhcmlhYmxlcywgCisgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+Y29udGV4dE5hbWUpOworCX0KKwllbHNlCisJeworICAgICAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHBkdS0+dmFyaWFibGVzKTsKKwl9CisKICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT0VSUk9SOwogfQogCkBAIC00NzcsMTYgKzQ3MSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwgdm9pZCAqbWFnaWMpCiB7CiAgICAgbmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3A7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKIAogICAgIGlmIChvcGVyYXRpb24gPT0gTkVUU05NUF9DQUxMQkFDS19PUF9ESVNDT05ORUNUKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwKLSAgICAgICAgICAgICAgICAgICAgInRyYW5zcG9ydCBkaXNjb25uZWN0IG9uIHNlc3Npb24gJTA4cFxuIiwgc2Vzc2lvbikpOworICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0IGRpc2Nvbm5lY3Qgb24gc2Vzc2lvbiAlOHBcbiIsIHNlc3Npb24pKTsKICAgICAgICAgLyoKICAgICAgICAgICogU2h1dCB0aGlzIHNlc3Npb24gZG93biBncmFjZWZ1bGx5LiAgCiAgICAgICAgICAqLwogICAgICAgICBjbG9zZV9hZ2VudHhfc2Vzc2lvbihzZXNzaW9uLCAtMSk7CiAgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfQ09OTkVDVCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsCisgICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgY29ubmVjdCBvbiBzZXNzaW9uICU4cFxuIiwgc2Vzc2lvbikpOworICAgICAgICByZXR1cm4gMTsKICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiAhPSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAidW5leHBlY3RlZCBjYWxsYmFjayBvcCAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uKSk7CkBAIC01MDMsOCArNTAwLDkgQEAKICAgICAgICAgYXNwID0gaW5pdF9hZ2VudF9zbm1wX3Nlc3Npb24oc2Vzc2lvbiwgcGR1KTsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJoYW5kbGUgcGR1IChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiaGFuZGxlIHBkdSAocmVxPTB4JWx4LHRyYW5zPTB4JWx4LHNlc3M9MHglbHgpXG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXBkdS0+cmVxaWQsICh1bnNpZ25lZCBsb25nKXBkdS0+dHJhbnNpZCwKKwkJKHVuc2lnbmVkIGxvbmcpcGR1LT5zZXNzaWQpKTsKICAgICAKICAgICBzd2l0Y2ggKHBkdS0+Y29tbWFuZCkgewogICAgIGNhc2UgQUdFTlRYX01TR19PUEVOOgpAQCAtNTc1LDEzICs1NzMsMTMgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgIGFzcC0+cGR1LT50aW1lID0gY2FsY3VsYXRlX3RpbWVfZGlmZigmbm93LCAmc3RhcnR0aW1lKTsKKyAgICBhc3AtPnBkdS0+dGltZSA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOwogICAgIGFzcC0+cGR1LT5jb21tYW5kID0gQUdFTlRYX01TR19SRVNQT05TRTsKICAgICBhc3AtPnBkdS0+ZXJyc3RhdCA9IGFzcC0+c3RhdHVzOwotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmQgcmVzcG9uc2UsIHN0YXQgJWQgKHJlcT0weCV4LHRyYW5zPSIKLSAgICAgICAgICAgICAgICAiMHgleCxzZXNzPTB4JXgpXG4iLAotICAgICAgICAgICAgICAgIGFzcC0+c3RhdHVzLCBwZHUtPnJlcWlkLHBkdS0+dHJhbnNpZCwgcGR1LT5zZXNzaWQpKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJzZW5kIHJlc3BvbnNlLCBzdGF0ICVkIChyZXE9MHglbHgsdHJhbnM9IgorICAgICAgICAgICAgICAgICIweCVseCxzZXNzPTB4JWx4KVxuIiwKKyAgICAgICAgICAgICAgICBhc3AtPnN0YXR1cywgKHVuc2lnbmVkIGxvbmcpcGR1LT5yZXFpZCwKKwkJKHVuc2lnbmVkIGxvbmcpcGR1LT50cmFuc2lkLCAodW5zaWduZWQgbG9uZylwZHUtPnNlc3NpZCkpOwogICAgIGlmICghc25tcF9zZW5kKGFzcC0+c2Vzc2lvbiwgYXNwLT5wZHUpKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICplYiA9IE5VTEw7CiAgICAgICAgIGludCAgICAgICAgICAgICBwZSwgcHNlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYwppbmRleCBhNDgyNzcwLi4wODQ1Y2YxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYwpAQCAtMjYsMTEgKzI2LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDYsMTAgKzQyLDYgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJhZ2VudHgvcHJvdG9jb2wuaCIKQEAgLTEzNSw3ICsxMjcsNyBAQAogI2VuZGlmCiAgICAgfQogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpidWYgKyBpbGVuKSwgNCk7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsdSAoMHglLjJsWClcbiIsIGl2YWx1ZSwKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JXUgKDB4JS4yWClcbiIsIGl2YWx1ZSwKICAgICAgICAgICAgICAgaXZhbHVlKSk7CiAgICAgcmV0dXJuIDE7CiB9CkBAIC0xNjgsNyArMTYwLDcgQEAKICNlbmRpZgogICAgIH0KICAgICBERUJVR0RVTVBTRVRVUCgic2VuZCIsIG9yaWdfYnVmcCwgNCk7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgb3JpZ192YWwsCisgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCV1ICgweCUuMlgpXG4iLCBvcmlnX3ZhbCwKICAgICAgICAgICAgICAgb3JpZ192YWwpKTsKIH0KIApAQCAtMjY0LDggKzI1Niw4IEBACiAKICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiT0lEIEhlYWRlciIpOwogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpidWYgKyBpbGVuKSwgNCk7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgIyBzdWJpZHM6XHQlZCAoMHglLjJYKVxuIiwgbmFtZV9sZW4sCi0gICAgICAgICAgICAgIG5hbWVfbGVuKSk7CisgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgIyBzdWJpZHM6XHQlZCAoMHglLjJYKVxuIiwgKGludCluYW1lX2xlbiwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCluYW1lX2xlbikpOwogICAgIERFQlVHUFJJTlRJTkRFTlQoImR1bXB2X3NlbmQiKTsKICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBwcmVmaXg6XHQlZCAoMHglLjJYKVxuIiwgcHJlZml4LCBwcmVmaXgpKTsKICAgICBERUJVR1BSSU5USU5ERU5UKCJkdW1wdl9zZW5kIik7CkBAIC00NDksNiArNDQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+bmFtZSwgdnAtPm5hbWVfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfb3JkZXIpKSB7CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOworICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIERFQlVHSU5ERU5UTEVTUygpOwpAQCAtNDg4LDcgKzQ4MSw3IEBACiAgICAgY2FzZSBBU05fT1BBUVVFX0RPVUJMRToKICAgICAgICAgREVCVUdEVU1QSEVBREVSKCJzZW5kIiwgIkJ1aWxkIE9wYXF1ZSBEb3VibGUiKTsKICAgICAgICAgREVCVUdQUklOVElOREVOVCgiZHVtcHZfc2VuZCIpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBEb3VibGU6XHQlbGZcbiIsICoodnAtPnZhbC5kb3VibGVWYWwpKSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIERvdWJsZTpcdCVmXG4iLCAqKHZwLT52YWwuZG91YmxlVmFsKSkpOwogICAgICAgICBpZiAoIWFnZW50eF9yZWFsbG9jX2J1aWxkX2RvdWJsZQogICAgICAgICAgICAgKGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwgYWxsb3dfcmVhbGxvYywgKih2cC0+dmFsLmRvdWJsZVZhbCksCiAgICAgICAgICAgICAgbmV0d29ya19vcmRlcikpIHsKQEAgLTU0OCw2ICs1NDEsNyBAQAogICAgICAgICAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiQnVpbGQgQ291bnRlcjY0IChsb3csIGhpZ2gpIik7CiAgICAgICAgICAgICBpZiAoIWFnZW50eF9yZWFsbG9jX2J1aWxkX2ludApAQCAtNTYyLDYgKzU1Niw3IEBACiAgICAgICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtNjk5LDYgKzY5NCwxNyBAQAogICAgICAgICBwZHUtPmZsYWdzICY9IH4oQUdFTlRYX01TR19GTEFHX05PTl9ERUZBVUxUX0NPTlRFWFQpOwogICAgIH0KIAorCS8qIFdlJ3ZlIHJlY2VpdmVkIGEgUERVIHRoYXQgaGFzIHNwZWNpZmllZCBhIGNvbnRleHQuICBOZXRTTk1QIGhvd2V2ZXIsIHVzZXMKKwkgKiB0aGUgcGR1LT5jb21tdW5pdHkgZmllbGQgdG8gc3BlY2lmeSBjb250ZXh0IHdoZW4gdXNpbmcgdGhlIEFnZW50WAorCSAqIHByb3RvY29sLiAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gY29weSB0aGUgY29udGV4dCBuYW1lIGFuZCBsZW5ndGggaW50byB0aGUKKwkgKiBwZHUtPmNvbW11bml0eSBhbmQgcGR1LT5jb21tdW5pdHlfbGVuIGZpZWxkcywgcmVzcGVjdGl2ZWx5LiAqLworCWlmIChwZHUtPmNvbnRleHROYW1lICE9IE5VTEwgJiYgcGR1LT5jb21tdW5pdHkgPT0gTlVMTCkKKwl7CQorCQlwZHUtPmNvbW11bml0eSAgICAgPSAodV9jaGFyICopIHN0cmR1cChwZHUtPmNvbnRleHROYW1lKTsKKwkJcGR1LT5jb21tdW5pdHlfbGVuID0gcGR1LT5jb250ZXh0TmFtZUxlbjsKKwkJcGR1LT5mbGFncyB8PSBBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVDsKKwl9CisKICAgICAvKgogICAgICAqIEJ1aWxkIHRoZSBoZWFkZXIgKGFuZCBjb250ZXh0IGlmIGFwcHJvcHJpYXRlKS4gIAogICAgICAqLwpAQCAtOTAyLDcgKzkwOCw3IEBACiAgICAgICAgIH0KICAgICAgICAgREVCVUdEVU1QSEVBREVSKCJzZW5kIiwgIlJlc3BvbnNlIik7CiAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpidWYgKyAqb3V0X2xlbiAtIDQpLCA0KTsKLSAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgc3lzVXBUaW1lOlx0JWRcbiIsIHBkdS0+dGltZSkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBzeXNVcFRpbWU6XHQlbHVcbiIsIHBkdS0+dGltZSkpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKIAogICAgICAgICBpZiAoIWFnZW50eF9yZWFsbG9jX2J1aWxkX3Nob3J0CkBAIC05MTgsOSArOTI0LDkgQEAKICAgICAgICAgfQogICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiUmVzcG9uc2UgZXJyb3JzIik7CiAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpidWYgKyAqb3V0X2xlbiAtIDQpLCA0KTsKLSAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgZXJyc3RhdDpcdCVkXG4iLCBwZHUtPmVycnN0YXQpKTsKKyAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgZXJyc3RhdDpcdCVsZFxuIiwgcGR1LT5lcnJzdGF0KSk7CiAgICAgICAgIERFQlVHUFJJTlRJTkRFTlQoImR1bXB2X3NlbmQiKTsKLSAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgZXJyaW5kZXg6XHQlZFxuIiwgcGR1LT5lcnJpbmRleCkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJpbmRleDpcdCVsZFxuIiwgcGR1LT5lcnJpbmRleCkpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKIAogICAgICAgICAvKgpAQCAtMTA2Myw3ICsxMDY5LDcgQEAKICAgICAgICAgdmFsdWUgKz0gZGF0YVswXTsKICNlbmRpZgogICAgIH0KLSAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKKyAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBJbnRlZ2VyOlx0JXUgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOwogCiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMTA5NCw3ICsxMTAwLDcgQEAKICAgICB9CiAKICAgICBERUJVR0RVTVBTRVRVUCgicmVjdiIsIGRhdGEsIDIpOwotICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIFNob3J0Olx0JWxkICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKKyAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBTaG9ydDpcdCVodSAoMHglLjJYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTQwLDcgKzExNDYsNyBAQAogICAgICpsZW5ndGggLT0gNDsKIAogICAgIERFQlVHTVNHKCgiZGpwIiwgIiAgcGFyc2Vfb2lkXG4iKSk7Ci0gICAgREVCVUdNU0coKCJkanAiLCAiICBzaXplb2Yob2lkKSA9ICVkXG4iLCBzaXplb2Yob2lkKSkpOworICAgIERFQlVHTVNHKCgiZGpwIiwgIiAgc2l6ZW9mKG9pZCkgPSAlZFxuIiwgKGludClzaXplb2Yob2lkKSkpOwogICAgIGlmIChuX3N1YmlkID09IDAgJiYgcHJlZml4ID09IDApIHsKICAgICAgICAgLyoKICAgICAgICAgICogTnVsbCBPSUQgCkBAIC0xMTU4LDcgKzExNjQsOSBAQAogICAgICAqLwogICAgIHRtcF9vaWRfbGVuID0gKHByZWZpeCA/IG5fc3ViaWQgKyA1IDogbl9zdWJpZCk7CiAgICAgaWYgKCpvaWRfbGVuIDwgdG1wX29pZF9sZW4pIHsKLSAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJPdmVyc2l6ZWQgT2JqZWN0IElEXG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgiLCAiT3ZlcnNpemVkIE9iamVjdCBJRCAoYnVmPSUiIE5FVFNOTVBfUFJJeiAiZCIKKwkJICAgICIgcGR1PSVkKVxuIiwgKm9pZF9sZW4sIHRtcF9vaWRfbGVuKSk7CisgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTExNjksNiArMTE3Nyw3IEBACiAjZW5kaWYKICAgICBpZiAoKmxlbmd0aCA8IDQgKiBuX3N1YmlkKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgiLCAiSW5jb21wbGV0ZSBPYmplY3QgSURcbiIpKTsKKyAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTIyNywxNCArMTIzNiwxNCBAQAogCiAgICAgaWYgKCpsZW5ndGggPCA0KSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgiLCAiSW5jb21wbGV0ZSBzdHJpbmcgKHRvbyBzaG9ydDogJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAqbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpKmxlbmd0aCkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBsZW4gPSBhZ2VudHhfcGFyc2VfaW50KGRhdGEsIG5ldHdvcmtfYnl0ZV9vcmRlcik7CiAgICAgaWYgKCpsZW5ndGggPCBsZW4gKyA0KSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgiLCAiSW5jb21wbGV0ZSBzdHJpbmcgKHN0aWxsIHRvbyBzaG9ydDogJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAqbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpKmxlbmd0aCkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGxlbiA+ICpzdHJfbGVuKSB7CkBAIC0xMzIyLDcgKzEzMzEsNyBAQAogICAgICAgICAqb3BhcXVlX2xlbiA9IHNpemVvZihkb3VibGUpOwogICAgICAgICBtZW1jcHkob3BhcXVlX2J1ZiwgJmZ1LmNbMF0sIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgKnR5cGUgPSBBU05fT1BBUVVFX0RPVUJMRTsKLSAgICAgICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIkRvdWJsZTogJWxmXG4iLCBmdS5kb3VibGVWYWwpKTsKKyAgICAgICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIkRvdWJsZTogJWZcbiIsIGZ1LmRvdWJsZVZhbCkpOwogICAgICAgICByZXR1cm4gY3A7CiAKICAgICBjYXNlIEFTTl9PUEFRVUVfSTY0OgpAQCAtMTM0NSw4ICsxMzU0LDYgQEAKIHsKICAgICB1X2NoYXIgICAgICAgICAqYnVmcCA9IGRhdGE7CiAgICAgdV9pbnQgICAgICAgICAgIGludF92YWw7Ci0gICAgaW50ICAgICAgICAgICAgaW50X29mZnNldDsKLSAgICB1X2ludCAgICAgICAgICAqaW50X3B0ciA9ICh1X2ludCAqKSBkYXRhX2J1ZjsKICAgICBzdHJ1Y3QgY291bnRlcjY0IHRtcDY0OwogCiAgICAgREVCVUdEVU1QSEVBREVSKCJyZWN2IiwgIlZhckJpbmQ6Iik7CkBAIC0xNDAxLDE2ICsxNDA4LDE2IEBACiAKICAgICBjYXNlIEFTTl9DT1VOVEVSNjQ6CiAgICAgICAgIG1lbXNldCgmdG1wNjQsIDAsIHNpemVvZih0bXA2NCkpOwotICAgICAgICBpZiAobmV0d29ya19ieXRlX29yZGVyKSB7Ci0gICAgICAgICAgICB0bXA2NC5oaWdoID0gYWdlbnR4X3BhcnNlX2ludChidWZwLCAgIG5ldHdvcmtfYnl0ZV9vcmRlcik7Ci0gICAgICAgICAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwKzQsIG5ldHdvcmtfYnl0ZV9vcmRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXA2NC5oaWdoID0gYWdlbnR4X3BhcnNlX2ludChidWZwKzQsIG5ldHdvcmtfYnl0ZV9vcmRlcik7Ci0gICAgICAgICAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwLCAgIG5ldHdvcmtfYnl0ZV9vcmRlcik7Ci0gICAgICAgIH0KKwlpZiAobmV0d29ya19ieXRlX29yZGVyKSB7CisJICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnAsICAgbmV0d29ya19ieXRlX29yZGVyKTsKKwkgICAgdG1wNjQubG93ICA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCs0LCBuZXR3b3JrX2J5dGVfb3JkZXIpOworCX0gZWxzZSB7CisJICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnArNCwgbmV0d29ya19ieXRlX29yZGVyKTsKKwkgICAgdG1wNjQubG93ICA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCwgICBuZXR3b3JrX2J5dGVfb3JkZXIpOworCX0KIAogICAgICAgICBtZW1jcHkoZGF0YV9idWYsICZ0bXA2NCwgc2l6ZW9mKHRtcDY0KSk7Ci0gICAgICAgICpkYXRhX2xlbiA9IHNpemVvZih0bXA2NCk7CisJKmRhdGFfbGVuID0gc2l6ZW9mKHRtcDY0KTsKIAlidWZwICAgICs9IDg7CiAJKmxlbmd0aCAtPSA4OwogICAgICAgICBicmVhazsKQEAgLTE1MjksNiArMTUzNiw3IEBACiAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgYnVmcCArPSA0OwogCisgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgKmxlbmd0aCAtPSAyMDsKICAgICBpZiAoKmxlbmd0aCAhPSBwYXlsb2FkKSB7ICAgLyogU2hvcnQgcGF5bG9hZCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE2MDQsMTEgKzE2MTIsMjEgQEAKICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gYnVmX2xlbjsKICAgICAgICAgc25tcF9jbG9uZV9tZW0oKHZvaWQgKiopICZwZHUtPmNvbW11bml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgYnVmZmVyLCAodW5zaWduZWQpIGJ1Zl9sZW4pOworCQkKKwkJLyogVGhlIE5ldFNOTVAgQVBJIHN0dWZmcyB0aGUgY29udGV4dCBpbnRvIHRoZSBQRFUncyBjb21tdW5pdHkgc3RyaW5nCisJCSAqIGZpZWxkLCB3aGVuIHVzaW5nIHRoZSBBZ2VudFggUHJvdG9jb2wuICBUaGUgcmVzdCBvZiB0aGUgY29kZSBob3dldmVyLAorCQkgKiBleHBlY3RzIHRvIGZpbmQgdGhlIGNvbnRleHQgaW4gdGhlIFBEVSdzIGNvbnRleHQgZmllbGQuICBUaGVyZWZvcmUgd2UKKwkJICogbmVlZCB0byBjb3B5IHRoZSBjb250ZXh0IGludG8gdGhlIFBEVSdzIGNvbnRleHQgZmllbGRzLiAgKi8KKwkJaWYgKHBkdS0+Y29tbXVuaXR5X2xlbiA+IDAgJiYgcGR1LT5jb250ZXh0TmFtZSA9PSBOVUxMKQorCQl7CisJCQlwZHUtPmNvbnRleHROYW1lICAgID0gc3RyZHVwKChjaGFyICopIHBkdS0+Y29tbXVuaXR5KTsKKwkJCXBkdS0+Y29udGV4dE5hbWVMZW4gPSBwZHUtPmNvbW11bml0eV9sZW47CisJCX0KKwogICAgICAgICBidWZfbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CiAgICAgfQogCiAgICAgREVCVUdEVU1QSEVBREVSKCJyZWN2IiwgIlBEVSIpOwotICAgIERFQlVHSU5ERU5UTU9SRSgpOwogICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7CiAgICAgY2FzZSBBR0VOVFhfTVNHX09QRU46CiAgICAgICAgIHBkdS0+dGltZSA9ICpidWZwOyAgICAgIC8qIFRpbWVvdXQgKi8KQEAgLTE2MjEsNyArMTYzOSw4IEBACiAgICAgICAgIERFQlVHRFVNUEhFQURFUigicmVjdiIsICJTdWJhZ2VudCBPSUQiKTsKICAgICAgICAgYnVmcCA9IGFnZW50eF9wYXJzZV9vaWQoYnVmcCwgbGVuZ3RoLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfYnVmZmVyLCAmb2lkX2J1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+ZmxhZ3MgJiBBR0VOVFhfRkxBR1NfTkVUV09SS19CWVRFX09SREVSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJiBBR0VOVFhfRkxBR1NfTkVUV09SS19CWVRFX09SREVSKTsKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIGlmIChidWZwID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwpAQCAtMTYyOSw3ICsxNjQ4LDggQEAKICAgICAgICAgfQogICAgICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiU3ViYWdlbnQgRGVzY3JpcHRpb24iKTsKICAgICAgICAgYnVmcCA9IGFnZW50eF9wYXJzZV9zdHJpbmcoYnVmcCwgbGVuZ3RoLCBidWZmZXIsICZidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBR0VOVFhfRkxBR1NfTkVUV09SS19CWVRFX09SREVSKTsKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIGlmIChidWZwID09IE5VTEwpIHsKQEAgLTE4NzIsMTQgKzE4OTIsMTEgQEAKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwotICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJVbnJlY29nbmlzZWQgUERVIHR5cGU6ICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQpKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVU5LTk9XTl9QRFU7CiAgICAgfQogICAgIERFQlVHSU5ERU5UTEVTUygpOwotICAgIERFQlVHSU5ERU5UTEVTUygpOwotICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jCmluZGV4IDMxMmQ4ZGEuLjFmOWQzMWMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jCkBAIC0yLDE3ICsyLDE0IEBACiAgKiAgQWdlbnRYIHN1Yi1hZ2VudAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMjEsOSArMTgsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtNDYsMTIgKzQwLDE2IEBACiAjaW5jbHVkZSAiYWdlbnR4L2FnZW50eF9jb25maWcuaCIKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg+Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSNpbmNsdWRlICJtaWJJSS9zeXNPUlRhYmxlLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oPgogCiAjaW5jbHVkZSAic3ViYWdlbnQuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50eF9zdWJhZ2VudCwgYWdlbnR4X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudHhfZW5hYmxlX3N1YmFnZW50LCBhZ2VudHhfc3ViYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlbW92ZV90cmFwX3Nlc3Npb24pCisKICNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCiAKIHN0YXRpYyBTTk1QQ2FsbGJhY2sgc3ViYWdlbnRfcmVnaXN0ZXJfcGluZ19hbGFybTsKQEAgLTYxLDEwICs1OSwxMiBAQAogaW50ICAgICAgICAgICAgIGhhbmRsZV9zdWJhZ2VudF9yZXNwb25zZShpbnQgb3AsIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbWFnaWMpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludCAgICAgICAgICAgICBoYW5kbGVfc3ViYWdlbnRfc2V0X3Jlc3BvbnNlKGludCBvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxaWQsIG5ldHNubXBfcGR1ICpwZHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYWdpYyk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogdm9pZCAgICAgICAgICAgIHN1YmFnZW50X3N0YXJ0dXBfY2FsbGJhY2sodW5zaWduZWQgaW50IGNsaWVudHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CiBpbnQgICAgICAgICAgICAgc3ViYWdlbnRfb3Blbl9tYXN0ZXJfc2Vzc2lvbih2b2lkKTsKQEAgLTE2NCwxOCArMTY0LDE5IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX0VOQUJMRV9TVUJBR0VOVAogdm9pZAogbmV0c25tcF9lbmFibGVfc3ViYWdlbnQodm9pZCkgewogICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9ST0xFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCX0FHRU5UKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UWF9FTkFCTEVfU1VCQUdFTlQgKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvICoKIHNhdmVfc2V0X3ZhcnMobmV0c25tcF9zZXNzaW9uICogc3MsIG5ldHNubXBfcGR1ICpwZHUpCiB7CiAgICAgc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKnB0cjsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwotICAgIGV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CiAKICAgICBwdHIgPSAoc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKikKICAgICAgICAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbykpOwpAQCAtMTg4LDggKzE4OSw3IEBACiAgICAgcHRyLT50cmFuc0lEID0gcGR1LT50cmFuc2lkOwogICAgIHB0ci0+c2VzcyA9IHNzOwogICAgIHB0ci0+bW9kZSA9IFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMTsKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0gICAgcHRyLT51cHRpbWUgPSBjYWxjdWxhdGVfdGltZV9kaWZmKCZub3csICZzdGFydHRpbWUpOworICAgIHB0ci0+dXB0aW1lID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CiAKICAgICBwdHItPnZhcl9saXN0ID0gc25tcF9jbG9uZV92YXJiaW5kKHBkdS0+dmFyaWFibGVzKTsKICAgICBpZiAocHRyLT52YXJfbGlzdCA9PSBOVUxMKSB7CkBAIC0yNDEsNiArMjQxLDcgQEAKICAgICAgICAgcHJldiA9IHB0cjsKICAgICB9CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBzdGF0aWMgdm9pZAogc2VuZF9hZ2VudHhfZXJyb3IobmV0c25tcF9zZXNzaW9uICpzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1LCBpbnQgZXJyc3RhdCwgaW50IGVycmluZGV4KQpAQCAtMzMxLDggKzMzMiw5IEBACiAgICAgICogb2ssIHdlIGhhdmUgYSBwZHUgZnJvbSB0aGUgbmV0LiBNb2RpZnkgYXMgbmVlZGVkIAogICAgICAqLwogCi0gICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICJoYW5kbGluZyBhZ2VudHggcmVxdWVzdCAocmVxPTB4JXgsdHJhbnM9IgotICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLCAiaGFuZGxpbmcgQWdlbnRYIHJlcXVlc3QgKHJlcT0weCV4LHRyYW5zPSIKKyAgICAgICAgICAgICAgICAiMHgleCxzZXNzPTB4JXgpXG4iLCAodW5zaWduZWQpcGR1LT5yZXFpZCwKKwkJKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAgICAgcGR1LT52ZXJzaW9uID0gQUdFTlRYX1ZFUlNJT05fMTsKICAgICBwZHUtPmZsYWdzIHw9IFVDRF9NU0dfRkxBR19BTFdBWVNfSU5fVklFVzsKIApAQCAtNDAzLDYgKzQwNSw3IEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLCAiICAtPiByZXNwb25zZVxuIikpOwogICAgICAgICByZXR1cm4gMTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIEFHRU5UWF9NU0dfVEVTVFNFVDoKICAgICAgICAgLyoKICAgICAgICAgICogWFhYV1dXIHdlIGhhdmUgdG8gbWFwIHRoaXMgdHdpY2UgdG8gYm90aCBSRVNFUlZFMSBhbmQgUkVTRVJWRTIgCkBAIC00ODAsNiArNDgzLDcgQEAKICAgICAgICAgbXljYWxsYmFjayA9IGhhbmRsZV9zdWJhZ2VudF9zZXRfcmVzcG9uc2U7CiAgICAgICAgIHJldG1hZ2ljID0gYXNpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogCiAgICAgZGVmYXVsdDoKICAgICAgICAgU05NUF9GUkVFKHNtYWdpYyk7CkBAIC00OTksMTQgKzUwMywxNCBAQAogICAgICAqLwogCiAgICAgaW50ZXJuYWxfcGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKLSAgICBpbnRlcm5hbF9wZHUtPmNvbnRleHROYW1lID0gaW50ZXJuYWxfcGR1LT5jb21tdW5pdHk7CisgICAgaW50ZXJuYWxfcGR1LT5jb250ZXh0TmFtZSA9IChjaGFyICopIGludGVybmFsX3BkdS0+Y29tbXVuaXR5OwogICAgIGludGVybmFsX3BkdS0+Y29udGV4dE5hbWVMZW4gPSBpbnRlcm5hbF9wZHUtPmNvbW11bml0eV9sZW47CiAgICAgaW50ZXJuYWxfcGR1LT5jb21tdW5pdHkgPSBOVUxMOwogICAgIGludGVybmFsX3BkdS0+Y29tbXVuaXR5X2xlbiA9IDA7CiAgICAgcmVzdWx0ID0gc25tcF9hc3luY19zZW5kKGFnZW50eF9jYWxsYmFja19zZXNzLCBpbnRlcm5hbF9wZHUsIG15Y2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgIHJldG1hZ2ljKTsKICAgICBpZiAocmVzdWx0ID09IDApIHsKLSAgICAgICAgc25tcF9mcmVlX3BkdShpbnRlcm5hbF9wZHUpOworICAgICAgICBzbm1wX2ZyZWVfcGR1KCBpbnRlcm5hbF9wZHUgKTsKICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CkBAIC01NDUsMTQgKzU0OSwxOSBAQAogCiAgICAgcGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKLSAgICAgICAgICAgICAgICAiaGFuZGxpbmcgQWdlbnRYIHJlc3BvbnNlIChjbWQgMHglMDJ4IG9yaWdfY21kIDB4JTAyeClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBzbWFnaWMtPm9yaWdpbmFsX2NvbW1hbmQpKTsKKyAgICAgICAgICAgICAgICAiaGFuZGxpbmcgQWdlbnRYIHJlc3BvbnNlIChjbWQgMHglMDJ4IG9yaWdfY21kIDB4JTAyeCkiCisgICAgICAgICAgICAgICAgIiAocmVxPTB4JXgsdHJhbnM9MHgleCxzZXNzPTB4JXgpXG4iLAorICAgICAgICAgICAgICAgIHBkdS0+Y29tbWFuZCwgc21hZ2ljLT5vcmlnaW5hbF9jb21tYW5kLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZClwZHUtPnJlcWlkLCAodW5zaWduZWQpcGR1LT50cmFuc2lkLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZClwZHUtPnNlc3NpZCkpOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmIChwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfSU5URVJOQUxfU0VUX0ZSRUUgfHwKICAgICAgICAgcGR1LT5jb21tYW5kID09IFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9VTkRPIHx8CiAgICAgICAgIHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUKSB7CiAgICAgICAgIGZyZWVfc2V0X3ZhcnMoc21hZ2ljLT5zZXNzaW9uLCBwZHUpOwogICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBpZiAoc21hZ2ljLT5vcmlnaW5hbF9jb21tYW5kID09IEFHRU5UWF9NU0dfR0VUTkVYVCkgewogICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKQEAgLTU4NCw3ICs1OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKiBzZXQgdG8gYGVuZE9mTWliVmlldyciLiAgCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfb2JqaWQodiwgdS0+bmFtZSwgdS0+bmFtZV9sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUodiwgU05NUF9FTkRPRk1JQlZJRVcsIDAsIDApOworICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUodiwgU05NUF9FTkRPRk1JQlZJRVcsIE5VTEwsIDApOwogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIHZpb2xhdGlvbiAtLSByZXR1cm4gZW5kT2ZNaWJWaWV3XG4iKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE0LDEzICs2MjMsMTQgQEAKICAgICByZXR1cm4gMTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogaGFuZGxlX3N1YmFnZW50X3NldF9yZXNwb25zZShpbnQgb3AsIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGludCByZXFpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdm9pZCAqbWFnaWMpCiB7CiAgICAgbmV0c25tcF9zZXNzaW9uICpyZXRzZXNzOwogICAgIHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvICphc2k7Ci0gICAgaW50ICAgIHJlc3VsdDsKKyAgICBpbnQgcmVzdWx0OwogCiAgICAgaWYgKG9wICE9IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSB8fCBtYWdpYyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNjI5LDcgKzYzOSw4IEBACiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsCiAgICAgICAgICAgICAgICAgImhhbmRsaW5nIGFnZW50eCBzdWJhZ2VudCBzZXQgcmVzcG9uc2UgKG1vZGU9JWQscmVxPTB4JXgsIgogICAgICAgICAgICAgICAgICJ0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBwZHUtPnJlcWlkLHBkdS0+dHJhbnNpZCwgcGR1LT5zZXNzaWQpKTsKKyAgICAgICAgICAgICAgICAodW5zaWduZWQpcGR1LT5jb21tYW5kLCAodW5zaWduZWQpcGR1LT5yZXFpZCwKKwkJKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAgICAgcGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKIAogICAgIGFzaSA9IChzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbyAqKSBtYWdpYzsKQEAgLTY0OCw3ICs2NTksNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gc25tcF9hc3luY19zZW5kKGFnZW50eF9jYWxsYmFja19zZXNzLCBwZHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX3N1YmFnZW50X3NldF9yZXNwb25zZSwgYXNpKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCkgewotICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KCBwZHUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ29pbmcgZnJvbSBSRVNFUlZFMSAtPiBSRVNFUlZFMlxuIikpOwpAQCAtNjc0LDcgKzY4NSw3IEBACiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICIgIEZJTklTSEVEXG4iKSk7CiAgICAgcmV0dXJuIDE7CiB9Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogaW50CkBAIC02ODMsNyArNjk0LDcgQEAKIHsKICAgICBzdHJ1Y3QgcmVnaXN0ZXJfcGFyYW1ldGVycyAqcmVnX3Bhcm1zID0KICAgICAgICAgKHN0cnVjdCByZWdpc3Rlcl9wYXJhbWV0ZXJzICopIHNlcnZlcmFyZzsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKmFnZW50eF9zcyA9IChuZXRzbm1wX3Nlc3Npb24gKikgY2xpZW50YXJnOworICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKihuZXRzbm1wX3Nlc3Npb24gKiopY2xpZW50YXJnOwogCiAgICAgaWYgKG1pbm9ySUQgPT0gU05NUERfQ0FMTEJBQ0tfUkVHSVNURVJfT0lEKQogICAgICAgICByZXR1cm4gYWdlbnR4X3JlZ2lzdGVyKGFnZW50eF9zcywKQEAgLTcwMywxNCArNzE0LDEzIEBACiB9CiAKIAotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi1pbnQKK3N0YXRpYyBpbnQKIGFnZW50eF9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCiB7Ci0gICAgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgKnJlZ19wYXJtcyA9Ci0gICAgICAgIChzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyAqKSBzZXJ2ZXJhcmc7Ci0gICAgbmV0c25tcF9zZXNzaW9uICphZ2VudHhfc3MgPSAobmV0c25tcF9zZXNzaW9uICopIGNsaWVudGFyZzsKKyAgICBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyAqcmVnX3Bhcm1zID0KKyAgICAgICAgKGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzICopIHNlcnZlcmFyZzsKKyAgICBuZXRzbm1wX3Nlc3Npb24gKmFnZW50eF9zcyA9ICoobmV0c25tcF9zZXNzaW9uICoqKWNsaWVudGFyZzsKIAogICAgIGlmIChtaW5vcklEID09IFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUikKICAgICAgICAgcmV0dXJuIGFnZW50eF9hZGRfYWdlbnRjYXBzKGFnZW50eF9zcywKQEAgLTcyMSwxMyArNzMxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfcGFybXMtPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfcGFybXMtPm5hbWVsZW4pOwogfQotI2VuZGlmCiAKIAogc3RhdGljIGludAogc3ViYWdlbnRfc2h1dGRvd24oaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnRoZXNlc3Npb24gPSAobmV0c25tcF9zZXNzaW9uICopY2xpZW50YXJnOworICAgIG5ldHNubXBfc2Vzc2lvbiAqdGhlc2Vzc2lvbiA9ICoobmV0c25tcF9zZXNzaW9uICoqKWNsaWVudGFyZzsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgInNodXR0aW5nIGRvd24gc2Vzc2lvbi4uLi5cbiIpKTsKICAgICBpZiAodGhlc2Vzc2lvbiA9PSBOVUxMKSB7CiAJREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICJFbXB0eSBzZXNzaW9uIHRvIHNodXRkb3duXG4iKSk7CkBAIC03NTUsMjQgKzc2NCwyOSBAQAogdm9pZAogYWdlbnR4X3JlZ2lzdGVyX2NhbGxiYWNrcyhuZXRzbm1wX3Nlc3Npb24gKiBzKQogeworICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc19wOworCiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsCiAgICAgICAgICAgICAgICAgInJlZ2lzdGVyaW5nIGNhbGxiYWNrcyBmb3Igc2Vzc2lvbiAlcFxuIiwgcykpOworICAgIHNlc3NfcCA9IG5ldHNubXBfbWVtZHVwKCZzLCBzaXplb2YocykpOworICAgIG5ldHNubXBfYXNzZXJ0KHNlc3NfcCk7CisgICAgcy0+bXl2b2lkID0gc2Vzc19wOworICAgIGlmICghc2Vzc19wKQorICAgICAgICByZXR1cm47CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgc2Vzc19wKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHNlc3NfcCk7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdJU1RFUl9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzKTsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc2Vzc19wKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzZXNzX3ApOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzZXNzX3ApOwogfQogCiAvKgpAQCAtNzg1LDIyICs3OTksMjAgQEAKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAidW5yZWdpc3RlcmluZyBjYWxsYmFja3MgZm9yIHNlc3Npb24gJXBcbiIsIHNzKSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYWdlbnRfc2h1dGRvd24sIHNzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYWdlbnRfc2h1dGRvd24sIHNzLT5teXZvaWQsIDEpOwogICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHNzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc3MtPm15dm9pZCwgMSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHSVNURVJfT0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzcywgMSk7Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc3MtPm15dm9pZCwgMSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzcywgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgc3MtPm15dm9pZCwgMSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNzLCAxKTsKLSNlbmRpZgotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgc3MtPm15dm9pZCwgMSk7CisgICAgU05NUF9GUkVFKHNzLT5teXZvaWQpOwogfQogCiAvKgpAQCAtOTE0LDYgKzkyNiwxNCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorYWdlbnR4X3Jlb3Blbl9zeXNPUlRhYmxlKGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiBkYXRhLCB2b2lkKiB2KQoreworICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKG5ldHNubXBfc2Vzc2lvbiAqKSB2OworICAKKyAgICBhZ2VudHhfYWRkX2FnZW50Y2FwcyhhZ2VudHhfc3MsIGRhdGEtPk9SX29pZCwgZGF0YS0+T1Jfb2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPk9SX2Rlc2NyKTsKK30KIAogLyoKICAqIEFsYXJtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIG9wZW4gYSBzZXNzaW9uIHRvIHRoZSBtYXN0ZXIgYWdlbnQuICBJZiBhCkBAIC05NDIsMTUgKzk2MiwyMCBAQAogICAgICAgICByZWdpc3Rlcl9taWJfcmVhdHRhY2goKTsKIAogICAgICAgICAvKgorICAgICAgICAgKiBSZXJlZ2lzdGVyIGFsbCBvdXIgc3lzT1JFbnRyaWVzCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3N5c09SVGFibGVfZm9yZWFjaCgmYWdlbnR4X3Jlb3Blbl9zeXNPUlRhYmxlLCBtYWluX3Nlc3Npb24pOworCisgICAgICAgIC8qCiAgICAgICAgICAqIFJlZ2lzdGVyIGEgcGluZyBhbGFybSAoaWYgbmVlZCBiZSkuICAKICAgICAgICAgICovCi0gICAgICAgIHN1YmFnZW50X3JlZ2lzdGVyX3BpbmdfYWxhcm0oMCwgMCwgMCwgbWFpbl9zZXNzaW9uKTsKKyAgICAgICAgc3ViYWdlbnRfcmVnaXN0ZXJfcGluZ19hbGFybSgwLCAwLCBOVUxMLCBtYWluX3Nlc3Npb24pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChjbGllbnRyZWcgPT0gMCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFJlZ2lzdGVyIGEgcmVhdHRhY2ggYWxhcm0gZm9yIGxhdGVyIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtKDAsIDAsIDAsIG1haW5fc2Vzc2lvbik7CisgICAgICAgICAgICBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtKDAsIDAsIE5VTEwsIG1haW5fc2Vzc2lvbik7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCBiL2FnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oCmluZGV4IDdmOTUzZDMuLmZjNWYyNmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oCkBAIC01LDYgKzUsMTMgQEAKIC8qIHRoZXNlIGdvIGludG8gYm90aCB0aGUgbWluaSBhZ2VudCBhbmQgdGhlIGZ1bGwgYWdlbnQgKi8KIGNvbmZpZ19yZXF1aXJlKHNubXB2M21pYnMpCiAKKy8qIHZlcnkgZmV3IGRlZmF1bHQgbWlicyAqLworY29uZmlnX2FkZF9taWIoU05NUHYyLU1JQikKK2NvbmZpZ19hZGRfbWliKElGLU1JQikKK2NvbmZpZ19hZGRfbWliKElQLU1JQikKK2NvbmZpZ19hZGRfbWliKFRDUC1NSUIpCitjb25maWdfYWRkX21pYihVRFAtTUlCKQorCiAjaWZkZWYgTkVUU05NUF9NSU5JX0FHRU5UCiAKIC8qIGxpbWl0IHRoZSBtaWJJSSBtb2R1bGVzIHRvIHRoZSBiYXJlIG1pbmltdW0gKi8KQEAgLTEzLDE0ICsyMCw2IEBACiBjb25maWdfcmVxdWlyZShtaWJJSS9zeXNPUlRhYmxlKQogY29uZmlnX3JlcXVpcmUobWliSUkvdmFjbV92YXJzKQogY29uZmlnX3JlcXVpcmUobWliSUkvdmFjbV9jb25mKQotY29uZmlnX3JlcXVpcmUodXRpbGl0aWVzL2V4ZWN1dGUpCi0KLS8qIHZlcnkgZmV3IGRlZmF1bHQgbWlicyAqLwotY29uZmlnX2FkZF9taWIoU05NUHYyLU1JQikKLWNvbmZpZ19hZGRfbWliKElGLU1JQikKLWNvbmZpZ19hZGRfbWliKElQLU1JQikKLWNvbmZpZ19hZGRfbWliKFRDUC1NSUIpCi1jb25maWdfYWRkX21pYihVRFAtTUlCKQogCiAjZWxzZSAvKiAhTkVUU05NUF9NSU5JX0FHRU5UID09IHRoZSBmdWxsIHNoYWJhbmcgKi8KIApAQCAtMzIsMjIgKzMxLDIxIEBACiBjb25maWdfcmVxdWlyZShhZ2VudF9taWJzKQogY29uZmlnX3JlcXVpcmUoYWdlbnR4KQogY29uZmlnX3JlcXVpcmUoZGlzbWFuL2V2ZW50KQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9zY2hlZHVsZSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiBjb25maWdfcmVxdWlyZSh1dGlsaXRpZXMpCiAKIC8qIGRlZmF1bHQgTUlCcyB0byBhdXRvLWluY2x1ZGUgZm9yIHBhcnNpbmcgKi8KIC8qIE5PVEU6IHdlIGNvbnNpZGVyIHRoZXNlIE1JQnMgdXNlcnMgd2lsbCBsaWtlbHkgd2FudCB0byBsb2FkIGJ5CiAgICBkZWZhdWx0LCBldmVuIGlmIHRoZXkncmUgbm90IHN1cHBvcnRpbmcgaXQgaW4gdGhlIGFnZW50IChpZSwgdGhlCiAgICBjb21tYW5kIGxpbmUgdG9vbHMgbmVlZCB0byBsb2FkIHRoZW0gYW55d2F5KSAqLwotY29uZmlnX2FkZF9taWIoU05NUHYyLU1JQikKLWNvbmZpZ19hZGRfbWliKElGLU1JQikKLWNvbmZpZ19hZGRfbWliKElQLU1JQikKLWNvbmZpZ19hZGRfbWliKFRDUC1NSUIpCi1jb25maWdfYWRkX21pYihVRFAtTUlCKQogY29uZmlnX2FkZF9taWIoSE9TVC1SRVNPVVJDRVMtTUlCKQogY29uZmlnX2FkZF9taWIoTk9USUZJQ0FUSU9OLUxPRy1NSUIpCiBjb25maWdfYWRkX21pYihESVNNQU4tRVZFTlQtTUlCKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGNvbmZpZ19hZGRfbWliKERJU01BTi1TQ0hFRFVMRS1NSUIpCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZXh0cmEgbW9kdWxlcyAqLwogLyogdGhlc2Ugc3ltYm9scyBhcmUgc2V0IGluIHRoZSBob3N0IHNwZWNpZmljIG5ldC1zbm1wL3N5c3RlbS88b3M+LmggZmlsZXMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMgYi9hZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTg3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jCkBAIC0wLDAgKzEsNDc1IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZpZm8pCisKKyNpbmNsdWRlICJkZWxpdmVyQnlOb3RpZnkuaCIKKworLyogd2Ugc2hvdWxkIG5ldmVyIHNwbGl0IGJleW9uZCB0aGlzICovCisjZGVmaW5lIE1BWF9NRVNTQUdFX0NPVU5UIDEyOAorI2RlZmluZSBCQVNFX1BBQ0tFVF9TSVpFIDEwMCAvKiBzaG91bGQgYmUgZW5vdWdoIHRvIHN0b3JlIFNOTVB2MyBtc2cgaGVhZGVycyAqLworCisvKiBpZiB2IGlzICFOVUxMLCB0aGVuIGVzdGltYXRlIGl0J3MgbGlrZWx5IHNpemUgKi8KKyNkZWZpbmUgRVNUSU1BVEVfVkFSX1NJWkUodikgKHY/KHYtPm5hbWVfbGVuZ3RoICsgdi0+dmFsX2xlbiArIDgpOjApCisKK3ZvaWQgcGFyc2VfZGVsaXZlcl9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCBwYXJzZV9kZWxpdmVyX21heHNpemVfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgcGFyc2VfZGF0YV9ub3RpZmljYXRpb25fb2lkX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX3BlcmlvZGljX3RpbWVfb2lkX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX21lc3NhZ2VfbnVtYmVyX29pZF9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCBwYXJzZV9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIGZyZWVfZGVsaXZlcl9jb25maWcodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSh2b2lkKTsKKworb2lkICAgIGRhdGFfbm90aWZpY2F0aW9uX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgNCwgMCwgMSB9Oworc2l6ZV90IGRhdGFfbm90aWZpY2F0aW9uX29pZF9sZW4gPSAxMzsKKworb2lkICAgIG5ldHNubXBfcGVyaW9kaWNfdGltZV9vaWRbTUFYX09JRF9MRU5dCisgICAgICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDMsIDEsIDUsIDMsIDEsIDAgfTsKK3NpemVfdCBuZXRzbm1wX3BlcmlvZGljX3RpbWVfb2lkX2xlbiA9IDEzOworCitvaWQgICAgbmV0c25tcF9tZXNzYWdlX251bWJlcl9vaWRbTUFYX09JRF9MRU5dCisgICAgICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDMsIDEsIDUsIDMsIDIsIDAgfTsKK3NpemVfdCBuZXRzbm1wX21lc3NhZ2VfbnVtYmVyX29pZF9sZW4gPSAxMzsKKworb2lkICAgIG5ldHNubXBfbWF4X21lc3NhZ2VfbnVtYmVyX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgMywgMywgMCB9Oworc2l6ZV90IG5ldHNubXBfbWF4X21lc3NhZ2VfbnVtYmVyX29pZF9sZW4gPSAxMzsKKworb2lkIG9iamlkX3NubXB0cmFwW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDQsIDEsIDAgfTsKKworI2RlZmluZSBERUZBVUxUX01BWF9ERUxJVkVSX1NJWkUgLTE7CitzdGF0aWMgaW50IGRlZmF1bHRfbWF4X3NpemU7Cit1bnNpZ25lZCBpbnQgYWxhcm1fcmVnOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpkZWxpdmVyX2NvbnRhaW5lcjsKKworc3RhdGljIGludAorX2RlbGl2ZXJfY29tcGFyZShkZWxpdmVyX2J5X25vdGlmeSAqbGhzLCBkZWxpdmVyX2J5X25vdGlmeSAqcmhzKSB7CisgICAgLyogc29ydCBieSB0aGUgbmV4dF9ydW4gdGltZSAqLworICAgIGlmIChsaHMtPm5leHRfcnVuIDwgcmhzLT5uZXh0X3J1bikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKKy8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlciBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfZGVsaXZlckJ5Tm90aWZ5KHZvaWQpCit7CisgICAgLyogcmVnaXN0ZXIgdGhlIGNvbmZpZyB0b2tlbnMgKi8KKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGVsaXZlckJ5Tm90aWZ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VfZGVsaXZlcl9jb25maWcsICZmcmVlX2RlbGl2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbLXBdIFstbV0gWy1zIG1heHNpemVdIEZSRVFVRU5DWSBPSUQiKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnlNYXhQYWNrZXRTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VfZGVsaXZlcl9tYXhzaXplX2NvbmZpZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZUluQnl0ZXMiKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnlPaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9kYXRhX25vdGlmaWNhdGlvbl9vaWRfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIFhYWDogcmVzZXQgdG8gZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSUQiKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnlGcmVxdWVuY3lPaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9wZXJpb2RpY190aW1lX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU1lc3NhZ2VOdW1iZXJPaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIFhYWDogcmVzZXQgdG8gZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSUQiKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnlNYXhNZXNzYWdlTnVtYmVyT2lkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VfbWF4X21lc3NhZ2VfbnVtYmVyX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgLyogY3JlYXRlIHRoZSBjb250YWluZXIgdG8gc3RvcmUgdGhlIGNvbmZpZyBvYmplY3RzKi8KKyAgICBkZWxpdmVyX2NvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImRlbGl2ZXJCeU5vdGlmeTpmaWZvIik7CisgICAgaWYgKE5VTEwgPT0gZGVsaXZlcl9jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImRlbGl2ZXJCeU5vdGlmeTogZmFpbGVkIHRvIGluaXRpYWxpemUgb3VyIGRhdGEgY29udGFpbmVyXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxpdmVyX2NvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImRlbGl2ZXJCeU5vdGlmeSIpOworICAgIGRlbGl2ZXJfY29udGFpbmVyLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUgKikgX2RlbGl2ZXJfY29tcGFyZTsKKworICAgIC8qIHNldCB0aGUgZGVmYXVsdHMgKi8KKyAgICBkZWZhdWx0X21heF9zaXplID0gREVGQVVMVF9NQVhfREVMSVZFUl9TSVpFOworCisgICAgYWxhcm1fcmVnID0gMDsKK30KKwordm9pZAorX3BhcnNlX2NvbmZpZ19vaWQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUsCisgICAgICAgICAgICAgICAgICBvaWQgKm9pZF9zdG9yZSwgc2l6ZV90ICpvaWRfc3RvcmVfbGVuKSB7CisgICAgc2l6ZV90IHRtcF9sZW4gPSBNQVhfT0lEX0xFTjsKKyAgICAvKiBwYXJzZSB0aGUgT0lEIGdpdmVuICovCisKKyAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGxpbmUsIG9pZF9zdG9yZSwgJnRtcF9sZW4pKSB7CisgICAgICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBTUFJJTlRfTUFYX0xFTi0xLCAidW5rbm93biAlcyBPSUQ6ICVzIiwgdG9rZW4sIGxpbmUpOworICAgICAgICBjb25maWdfcGVycm9yKGJ1Zik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqb2lkX3N0b3JlX2xlbiA9IHRtcF9sZW47Cit9CisKK3ZvaWQKK3BhcnNlX2RhdGFfbm90aWZpY2F0aW9uX29pZF9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBfcGFyc2VfY29uZmlnX29pZCh0b2tlbiwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX25vdGlmaWNhdGlvbl9vaWQsICZkYXRhX25vdGlmaWNhdGlvbl9vaWRfbGVuKTsKK30KKwordm9pZAorcGFyc2VfcGVyaW9kaWNfdGltZV9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgX3BhcnNlX2NvbmZpZ19vaWQodG9rZW4sIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZCwgJm5ldHNubXBfcGVyaW9kaWNfdGltZV9vaWRfbGVuKTsKK30KKwordm9pZAorcGFyc2VfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkgeworICAgIF9wYXJzZV9jb25maWdfb2lkKHRva2VuLCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICZuZXRzbm1wX21lc3NhZ2VfbnVtYmVyX29pZF9sZW4pOworfQorCit2b2lkCitwYXJzZV9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkgeworICAgIF9wYXJzZV9jb25maWdfb2lkKHRva2VuLCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWF4X21lc3NhZ2VfbnVtYmVyX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAmbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2xlbik7Cit9CisKK3ZvaWQKK3BhcnNlX2RlbGl2ZXJfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgY29uc3QgY2hhciAqY3AgPSBsaW5lOworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICBzaXplX3QgYnVmX2xlbiA9IFNQUklOVF9NQVhfTEVOOworICAgIGludCBtYXhfc2l6ZSA9IERFRkFVTFRfTUFYX0RFTElWRVJfU0laRTsKKyAgICBpbnQgZnJlcXVlbmN5OworICAgIG9pZCB0YXJnZXRfb2lkW01BWF9PSURfTEVOXTsKKyAgICBzaXplX3QgdGFyZ2V0X29pZF9sZW4gPSBNQVhfT0lEX0xFTjsKKyAgICBkZWxpdmVyX2J5X25vdGlmeSAqbmV3X25vdGlmeSA9IE5VTEw7CisgICAgaW50IGZsYWdzID0gMDsKKworICAgIHdoaWxlKGNwICYmICpjcCA9PSAnLScpIHsKKyAgICAgICAgc3dpdGNoICgqKGNwKzEpKSB7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKKyAgICAgICAgICAgIGlmICghY3ApIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJubyBhcmd1bWVudCBnaXZlbiB0byAtcyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heF9zaXplID0gYXRvaShjcCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBORVRTTk1QX0RFTElWRVJfTk9fUEVSSU9EX09JRDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IE5FVFNOTVBfREVMSVZFUl9OT19NU0dfQ09VTlRTOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInVua25vd24gZmxhZyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNwID0gc2tpcF90b2tlbl9jb25zdChjcCk7CisgICAgfQorCisgICAgaWYgKCFjcCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJubyBmcmVxdWVuY3kgZ2l2ZW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb3B5X253b3JkKGNwLCBidWYsIGJ1Zl9sZW4pOworICAgIGZyZXF1ZW5jeSA9IG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyhidWYpOworICAgIGNwID0gc2tpcF90b2tlbl9jb25zdChjcCk7CisKKyAgICBpZiAoZnJlcXVlbmN5IDw9IDApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaWxsZWdhbCBmcmVxdWVuY3kgZ2l2ZW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY3ApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibm8gT0lEIGdpdmVuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBwYXJzZSB0aGUgT0lEIGdpdmVuICovCisgICAgaWYgKCFzbm1wX3BhcnNlX29pZChjcCwgdGFyZ2V0X29pZCwgJnRhcmdldF9vaWRfbGVuKSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJ1bmtub3duIGRlbGl2ZXJCeU5vdGlmeSBPSUQiKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRlbGl2ZXJCeU5vdGlmeSIsICJUaGUgT0lEIHdpdGggdGhlIHByb2JsZW06ICVzXG4iLCBjcCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogc2V0IHVwIHRoZSBvYmplY3QgdG8gc3RvcmUgYWxsIHRoZSBkYXRhICovCisgICAgbmV3X25vdGlmeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoZGVsaXZlcl9ieV9ub3RpZnkpOworICAgIG5ld19ub3RpZnktPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKyAgICBuZXdfbm90aWZ5LT5tYXhfcGFja2V0X3NpemUgPSBtYXhfc2l6ZTsKKyAgICBuZXdfbm90aWZ5LT5sYXN0X3J1biA9IHRpbWUoTlVMTCk7CisgICAgbmV3X25vdGlmeS0+bmV4dF9ydW4gPSBuZXdfbm90aWZ5LT5sYXN0X3J1biArIGZyZXF1ZW5jeTsKKyAgICBuZXdfbm90aWZ5LT5mbGFncyA9IGZsYWdzOworCisgICAgbmV3X25vdGlmeS0+dGFyZ2V0ID0gbWFsbG9jKHRhcmdldF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgIG5ld19ub3RpZnktPnRhcmdldF9sZW4gPSB0YXJnZXRfb2lkX2xlbjsKKyAgICBtZW1jcHkobmV3X25vdGlmeS0+dGFyZ2V0LCB0YXJnZXRfb2lkLCB0YXJnZXRfb2lkX2xlbipzaXplb2Yob2lkKSk7CisKKyAgICAvKiBYWFg6IG5lZWQgdG8gZG8gdGhlIHdob2xlIGNvbnRhaW5lciAqLworICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoY2FsY3VsYXRlX3RpbWVfdW50aWxfbmV4dF9ydW4obmV3X25vdGlmeSwgTlVMTCksIDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGl2ZXJfZXhlY3V0ZSwgTlVMTCk7CisKKyAgICAvKiBhZGQgaXQgdG8gdGhlIGNvbnRhaW5lciAqLworICAgIENPTlRBSU5FUl9JTlNFUlQoZGVsaXZlcl9jb250YWluZXIsIG5ld19ub3RpZnkpOworICAgIF9zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSgpOworfQorCit2b2lkCitwYXJzZV9kZWxpdmVyX21heHNpemVfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgZGVmYXVsdF9tYXhfc2l6ZSA9IGF0b2kobGluZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfZnJlZV9kZWxpdmVyX29iaihkZWxpdmVyX2J5X25vdGlmeSAqb2JqLCB2b2lkICpjb250ZXh0KSB7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKG9iaiAhPSBOVUxMLCApOworICAgIFNOTVBfRlJFRShvYmotPnRhcmdldCk7CisgICAgU05NUF9GUkVFKG9iaik7Cit9CisKK3ZvaWQKK2ZyZWVfZGVsaXZlcl9jb25maWcodm9pZCkgeworICAgIGRlZmF1bHRfbWF4X3NpemUgPSBERUZBVUxUX01BWF9ERUxJVkVSX1NJWkU7CisgICAgQ09OVEFJTkVSX0NMRUFSKGRlbGl2ZXJfY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2ZyZWVfZGVsaXZlcl9vYmosIE5VTEwpOworICAgIGlmIChhbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKGFsYXJtX3JlZyk7CisgICAgICAgIGFsYXJtX3JlZyA9IDA7CisgICAgfQorfQorCit2b2lkCitkZWxpdmVyX2V4ZWN1dGUodW5zaWduZWQgaW50IGNsaWVudHJlZywgdm9pZCAqY2xpZW50YXJnKSB7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqd2Fsa2VyLCAqZGVsaXZlcl9ub3RpZmljYXRpb24sICp2YXJ0bXA7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZWFkeV9mb3JfZGVsaXZlcnlbTUFYX01FU1NBR0VfQ09VTlRdOworICAgIG5ldHNubXBfc2Vzc2lvbiAqc2VzczsKKyAgICBpbnQgcmMsIGk7CisgICAgZGVsaXZlcl9ieV9ub3RpZnkgKm9iajsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICppdGVyYXRvcjsKKyAgICB0aW1lX3QgICAgICAgICAgICBub3cgPSB0aW1lKE5VTEwpOworICAgIHVfbG9uZyAgICAgICAgICAgIG1lc3NhZ2VfY291bnQsIG1heF9tZXNzYWdlX2NvdW50LCB0bXBfbG9uZzsKKyAgICB1X2xvbmcgICAgICAgICAgICptYXhfbWVzc2FnZV9jb3VudF9wdHJzW01BWF9NRVNTQUdFX0NPVU5UXTsKKyAgICBzaXplX3QgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemU7CisKKyAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIlN0YXJ0aW5nIHRoZSBleGVjdXRlIHJvdXRpbmVcbiIpKTsKKworICAgIC8qIFhYWDogbmVlZCB0byBkbyB0aGUgd2hvbGUgY29udGFpbmVyICovCisgICAgaXRlcmF0b3IgPSBDT05UQUlORVJfSVRFUkFUT1IoZGVsaXZlcl9jb250YWluZXIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihpdGVyYXRvciAhPSBOVUxMLCk7CisKKyAgICBzZXNzID0gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7CisKKyAgICBmb3Iob2JqID0gSVRFUkFUT1JfRklSU1QoaXRlcmF0b3IpOyBvYmo7CisgICAgICAgIG9iaiA9IElURVJBVE9SX05FWFQoaXRlcmF0b3IpKSB7CisKKyAgICAgICAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byBydW4gdGhpcyBvbmUgeWV0ICovCisgICAgICAgIGlmIChvYmotPm5leHRfcnVuID4gbm93KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbWF4X21lc3NhZ2VfY291bnQgPSAxOworICAgICAgICBtZXNzYWdlX2NvdW50ID0gMDsKKworICAgICAgICAvKiBmaWxsIHRoZSB2YXJiaW5kIGxpc3Qgd2l0aCB0aGUgdGFyZ2V0IG9iamVjdCAqLworICAgICAgICB2YXJzID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF92YXJpYWJsZV9saXN0ICk7CisgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZCggdmFycywgb2JqLT50YXJnZXQsIG9iai0+dGFyZ2V0X2xlbiApOworICAgICAgICB2YXJzLT50eXBlID0gQVNOX05VTEw7CisKKyAgICAgICAgLyogd2FsayB0aGUgT0lEIHRyZWUgZm9yIHRoZSBkYXRhICovCisgICAgICAgIHJjID0gbmV0c25tcF9xdWVyeV93YWxrKHZhcnMsIHNlc3MpOworICAgICAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgLyogWFhYOiBkaXNhYmxlPyBhbmQgcmVzZXQgdGhlIG5leHQgcXVlcnkgdGltZSBwb2ludCEgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkZWxpdmVyQnlOb3RpZnk6IGZhaWxlZCB0byBpc3N1ZSB0aGUgcXVlcnkiKTsKKyAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgd2Fsa2VyID0gdmFyczsKKworICAgICAgICB3aGlsZSAod2Fsa2VyKSB7CisKKyAgICAgICAgICAgIC8qIFNldCB1cCB0aGUgbm90aWZpY2F0aW9uIGl0c2VsZiAqLworICAgICAgICAgICAgZGVsaXZlcl9ub3RpZmljYXRpb24gPSBOVUxMOworICAgICAgICAgICAgZXN0aW1hdGVkX3BrdF9zaXplID0gQkFTRV9QQUNLRVRfU0laRTsKKworICAgICAgICAgICAgLyogYWRkIGluIHRoZSBub3RpZmljYXRpb24gdHlwZSAqLworICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmZGVsaXZlcl9ub3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamlkX3NubXB0cmFwLCBPSURfTEVOR1RIKG9iamlkX3NubXB0cmFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9ub3RpZmljYXRpb25fb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX25vdGlmaWNhdGlvbl9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgZXN0aW1hdGVkX3BrdF9zaXplICs9IEVTVElNQVRFX1ZBUl9TSVpFKGRlbGl2ZXJfbm90aWZpY2F0aW9uKTsKKworICAgICAgICAgICAgLyogYWRkIGluIHRoZSBjdXJyZW50IG1lc3NhZ2UgbnVtYmVyIGluIHRoaXMgc2VxdWVuY2UgKi8KKyAgICAgICAgICAgIGlmICghKG9iai0+ZmxhZ3MgJiBORVRTTk1QX0RFTElWRVJfTk9fUEVSSU9EX09JRCkpIHsKKyAgICAgICAgICAgICAgICB0bXBfbG9uZyA9IG9iai0+ZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJmRlbGl2ZXJfbm90aWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGVyaW9kaWNfdGltZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnRtcF9sb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRtcF9sb25nKSk7CisgICAgICAgICAgICAgICAgZXN0aW1hdGVkX3BrdF9zaXplICs9IEVTVElNQVRFX1ZBUl9TSVpFKGRlbGl2ZXJfbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogYWRkIGluIHRoZSBjdXJyZW50IG1lc3NhZ2UgbnVtYmVyIGluIHRoaXMgc2VxdWVuY2UgKi8KKyAgICAgICAgICAgIG1lc3NhZ2VfY291bnQrKzsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlX2NvdW50ID4gTUFYX01FU1NBR0VfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGVsaXZlcnkgY29uc3RydWN0IGdyZXcgdG9vIGxhcmdlLi4uICBnaXZpbmcgdXBcbiIpOworICAgICAgICAgICAgICAgIC8qIFhYWDogZGlzYWJsZSBpdCAqLworICAgICAgICAgICAgICAgIC8qIFhYWDogc2VuZCBhIG5vdGlmaWNhdGlvbiBhYm91dCBpdD8gKi8KKyAgICAgICAgICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKGl0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHN0b3JlIHRoaXMgZm9yIGxhdGVyIHVwZGF0aW5nIGFuZCBzZW5kaW5nICovCisgICAgICAgICAgICByZWFkeV9mb3JfZGVsaXZlcnlbbWVzc2FnZV9jb3VudC0xXSA9IGRlbGl2ZXJfbm90aWZpY2F0aW9uOworCisgICAgICAgICAgICBpZiAoIShvYmotPmZsYWdzICYgTkVUU05NUF9ERUxJVkVSX05PX01TR19DT1VOVFMpKSB7CisgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmZGVsaXZlcl9ub3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21lc3NhZ2VfbnVtYmVyX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZtZXNzYWdlX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1lc3NhZ2VfY291bnQpKTsKKyAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworCisgICAgICAgICAgICAgICAgLyogYWRkIGluIHRoZSBtYXggbWVzc2FnZSBudW1iZXIgY291bnQgZm9yIHRoaXMgc2VxdWVuY2UgKi8KKyAgICAgICAgICAgICAgICB2YXJ0bXAgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWF4X21lc3NhZ2VfbnVtYmVyX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWF4X21lc3NhZ2VfbnVtYmVyX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmbWF4X21lc3NhZ2VfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWF4X21lc3NhZ2VfY291bnQpKTsKKyAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworCisgICAgICAgICAgICAgICAgLyogd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGxhdGVyICovCisgICAgICAgICAgICAgICAgbWF4X21lc3NhZ2VfY291bnRfcHRyc1ttZXNzYWdlX2NvdW50LTFdID0KKyAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXJ0bXAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBqdXN0IHRvIGJlIHN1cmUgKi8KKyAgICAgICAgICAgICAgICBtYXhfbWVzc2FnZV9jb3VudF9wdHJzW21lc3NhZ2VfY291bnQtMV0gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBjb3B5IGluIHRoZSBjb2xsZWN0ZWQgZGF0YSAqLworICAgICAgICAgICAgd2hpbGUod2Fsa2VyKSB7CisgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmZGVsaXZlcl9ub3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrZXItPm5hbWUsIHdhbGtlci0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrZXItPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrZXItPnZhbC5zdHJpbmcsIHdhbGtlci0+dmFsX2xlbik7CisKKyAgICAgICAgICAgICAgICAvKiA4IGJ5dGUgcGFkZGluZyBmb3IgQVNOIGVuY29kaW5ncyBhbiBhIGZldyBleHRyYSBPSUQgYnl0ZXMgKi8KKyAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUod2Fsa2VyKTsKKworICAgICAgICAgICAgICAgIHdhbGtlciA9IHdhbGtlci0+bmV4dF92YXJpYWJsZTsKKworICAgICAgICAgICAgICAgIC8qIGlmIHRoZSBjdXJyZW50IHNpemUgUExVUyB0aGUgbmV4dCBvbmUgKHdoaWNoIGlzIG5vdworICAgICAgICAgICAgICAgICAgIGluICd3YWxrZXInKSBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWV0IHRoZW4gd2Ugc3RvcCBoZXJlICovCisgICAgICAgICAgICAgICAgaWYgKG9iai0+bWF4X3BhY2tldF9zaXplID4gMCAmJgorICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKworICAgICAgICAgICAgICAgICAgICBFU1RJTUFURV9WQVJfU0laRSh3YWxrZXIpID49CisgICAgICAgICAgICAgICAgICAgIG9iai0+bWF4X3BhY2tldF9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc2VuZCBvdXQgdGhlIG5vdGlmaWNhdGlvbiAqLworICAgICAgICAgICAgc2VuZF92MnRyYXAoZGVsaXZlcl9ub3RpZmljYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgbWVzc2FnZV9jb3VudDsgaSsrKSB7CisgICAgICAgICAgICAvKiB1cGRhdGUgdGhlIG1heCBjb3VudCBwb2ludGVyICovCisgICAgICAgICAgICBpZiAobWF4X21lc3NhZ2VfY291bnRfcHRyc1tpXSkKKyAgICAgICAgICAgICAgICAqKG1heF9tZXNzYWdlX2NvdW50X3B0cnNbaV0pID0gbWVzc2FnZV9jb3VudDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VuZF92MnRyYXAocmVhZHlfZm9yX2RlbGl2ZXJ5W2ldKTsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHJlYWR5X2Zvcl9kZWxpdmVyeVtpXSk7CisgICAgICAgIH0KKworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKworICAgICAgICAvKiByZWNvcmQgdGhpcyBhcyB0aGUgdGltZSBwcm9jZXNzZWQgKi8KKyAgICAgICAgLyogWFhYOiB0aGlzIG1heSBjcmVlcCBieSBhIGZldyBzZWNvbmRzIHdoZW4gcHJvY2Vzc2luZyBhbmQgbWF5YmUgd2Ugd2FudAorICAgICAgICAgICB0byBkbyB0aGUgdGltZSBzdGFtcCBhdCB0aGUgYmVnaW5uaW5nPyAqLworICAgICAgICBvYmotPmxhc3RfcnVuID0gdGltZShOVUxMKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdGVyYXRvcik7CisKKyAgICAvKiBjYWxjdWxhdGUgdGhlIG5leHQgdGltZSB0byBzbGVlcCBmb3IgKi8KKyAgICBfc2NoZWR1bGVfbmV4dF9leGVjdXRlX3RpbWUoKTsKK30KKworaW50CitjYWxjdWxhdGVfdGltZV91bnRpbF9uZXh0X3J1bihkZWxpdmVyX2J5X25vdGlmeSAqaXQsIHRpbWVfdCAqbm93KSB7CisgICAgdGltZV90ICAgICAgICAgIGxvY2FsX25vdzsKKworICAgIC8qIGlmIHdlIHdlcmVuJ3QgcGFzc2VkIGEgdmFsaWQgdGltZSwgZmFrZSBpdCAqLworICAgIGlmIChOVUxMID09IG5vdykgeworICAgICAgICBub3cgPSAmbG9jYWxfbm93OworICAgICAgICB0aW1lKCZsb2NhbF9ub3cpOworICAgIH0KKworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihpdC0+bGFzdF9ydW4gIT0gMCwgLTEpOworCisgICAgLyogc2V0IHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBuZXh0IHJ1biAqLworICAgIGl0LT5uZXh0X3J1biA9IGl0LT5sYXN0X3J1biArIGl0LT5mcmVxdWVuY3k7CisKKyAgICAvKiBob3cgbG9uZyB1bnRpbCB0aGUgbmV4dCBydW4/ICovCisgICAgcmV0dXJuIGl0LT5uZXh0X3J1biAtICpub3c7Cit9CisKK3N0YXRpYyB2b2lkCitfc2NoZWR1bGVfbmV4dF9leGVjdXRlX3RpbWUodm9pZCkgeworICAgIHRpbWVfdCAgICAgICAgICAgICBsb2NhbF9ub3cgPSB0aW1lKE5VTEwpOworICAgIGludCAgICAgICAgICAgICAgICBzbGVlcF9mb3IgPSBJTlRfTUFYOworICAgIGludCAgICAgICAgICAgICAgICBuZXh0X3RpbWU7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0ZXJhdG9yOworICAgIGRlbGl2ZXJfYnlfbm90aWZ5ICpvYmo7CisKKyAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIkNhbGN1bGF0aW5nIHNjaGVkdWxpbmcgbmVlZGVkXG4iKSk7CisKKyAgICBpZiAoYWxhcm1fcmVnKSB7CisgICAgICAgIHNubXBfYWxhcm1fdW5yZWdpc3RlcihhbGFybV9yZWcpOworICAgICAgICBhbGFybV9yZWcgPSAwOworICAgIH0KKworICAgIGl0ZXJhdG9yID0gQ09OVEFJTkVSX0lURVJBVE9SKGRlbGl2ZXJfY29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSBpdGVyYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yKG9iaiA9IElURVJBVE9SX0ZJUlNUKGl0ZXJhdG9yKTsgb2JqOworICAgICAgICBvYmogPSBJVEVSQVRPUl9ORVhUKGl0ZXJhdG9yKSkgeworICAgICAgICBuZXh0X3RpbWUgPSBjYWxjdWxhdGVfdGltZV91bnRpbF9uZXh0X3J1bihvYmosICZsb2NhbF9ub3cpOworICAgICAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIiAgb2JqOiAlZCAobGFzdD0lZCwgbmV4dF9ydW49JWQpXG4iLCBuZXh0X3RpbWUsIG9iai0+bGFzdF9ydW4sIG9iai0+bmV4dF9ydW4pKTsKKyAgICAgICAgaWYgKG5leHRfdGltZSA8IHNsZWVwX2ZvcikKKyAgICAgICAgICAgIHNsZWVwX2ZvciA9IG5leHRfdGltZTsKKyAgICB9CisKKyAgICBpZiAoc2xlZXBfZm9yICE9IElOVF9NQVgpIHsKKyAgICAgICAgaWYgKHNsZWVwX2ZvciA8IDEpCisgICAgICAgICAgICBzbGVlcF9mb3IgPSAxOyAvKiBnaXZlIGF0IGxlYXN0IGEgc21hbGwgcGF1c2UgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImRlbGl2ZXJCeU5vdGlmeSIsICJOZXh0IGV4ZWN1dGlvbiBpbiAlZCAobWF4ID0gJWQpIHNlY29uZHNcbiIsCisgICAgICAgICAgICAgICAgICAgIHNsZWVwX2ZvciwgSU5UX01BWCkpOworICAgICAgICBhbGFybV9yZWcgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyKHNsZWVwX2ZvciwgMCwgJmRlbGl2ZXJfZXhlY3V0ZSwgTlVMTCk7CisgICAgfQorCisgICAgSVRFUkFUT1JfUkVMRUFTRShpdGVyYXRvcik7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmggYi9hZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmMzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgREVMSVZFUkJZTk9USUZZX0gKKyNkZWZpbmUgREVMSVZFUkJZTk9USUZZX0ggMQorCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKK2NvbmZpZ19hZGRfbWliKE5FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIpCisKK3ZvaWQgaW5pdF9kZWxpdmVyQnlOb3RpZnkodm9pZCk7CisKK3ZvaWQgcGFyc2VfZGVsaXZlcl9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCBmcmVlX2RlbGl2ZXJfY29uZmlnKHZvaWQpOworCitTTk1QQWxhcm1DYWxsYmFjayBkZWxpdmVyX2V4ZWN1dGU7CisKKyNkZWZpbmUgTkVUU05NUF9ERUxJVkVSX05PX1BFUklPRF9PSUQgICAweDAxCisjZGVmaW5lIE5FVFNOTVBfREVMSVZFUl9OT19NU0dfQ09VTlRTICAgMHgwMgorCisvKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzICovCit0eXBlZGVmIHN0cnVjdCBkZWxpdmVyX2J5X25vdGlmeV9zIHsKKyAgIGludCAgICAgZnJlcXVlbmN5OworICAgaW50ICAgICBsYXN0X3J1bjsKKyAgIGludCAgICAgbmV4dF9ydW47CisgICBvaWQgICAgKnRhcmdldDsKKyAgIHNpemVfdCAgdGFyZ2V0X2xlbjsKKyAgIGludCAgICAgbWF4X3BhY2tldF9zaXplOworICAgaW50ICAgICBmbGFnczsKK30gZGVsaXZlcl9ieV9ub3RpZnk7CisKK2ludCBjYWxjdWxhdGVfdGltZV91bnRpbF9uZXh0X3J1bihkZWxpdmVyX2J5X25vdGlmeSAqaXQsIHRpbWVfdCAqbm93KTsKKworI2VuZGlmIC8qIGRlbGl2ZXJCeU5vdGlmeV9oICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4uaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi5oCmluZGV4IDgwZjNlMWYuLjZiN2NkZDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi5oCkBAIC0zLDcgKzMsMTAgQEAKICAqLwogY29uZmlnX3JlcXVpcmUoZGlzbWFuL2V2ZW50LW1pYikKIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9leHByZXNzaW9uLW1pYikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisvKiB0aGUgc2NoZWR1bGUgbWliIGlzIGFsbCBhYm91dCB3cml0aW5nIChTRVRzKSAqLyAKIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9zY2hlZHVsZSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAvKiBjb25maWdfcmVxdWlyZShkaXNtYW4vbnNsb29rdXAtbWliKSAgICovCiAvKiBjb25maWdfcmVxdWlyZShkaXNtYW4vcGluZy1taWIpICAgICAgICovCiAvKiBjb25maWdfcmVxdWlyZShkaXNtYW4vdHJhY2Vyb3V0ZS1taWIpICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jCmluZGV4IDMyN2Y4YmEuLmJjNGZmMGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jCkBAIC00LDEyICs0LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRpc21hbl9kZWJ1Z2dpbmcsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG10ZWV2ZW50LCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtdGVldmVudF9yZW1vdmVlbnRyeSwgbXRlZXZlbnQpCisKIG5ldHNubXBfdGRhdGEgKmV2ZW50X3RhYmxlX2RhdGE7CiAKICAgICAvKgpAQCAtMjMsNyArMjgsNyBAQAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJpbml0IGV2ZW50IGNvbnRhaW5lclxuIikpOwogICAgIGlmICghZXZlbnRfdGFibGVfZGF0YSkgewogICAgICAgICBldmVudF90YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoIm10ZUV2ZW50VGFibGUiLCAwKTsKLSAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImNyZWF0ZSBldmVudCBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImNyZWF0ZSBldmVudCBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdGFibGVfZGF0YSkpOwogICAgIH0KIH0KQEAgLTQzLDEyICs0OCwxMiBAQAogCiAgICAgLyoKICAgICAgKiBJbnNlcnQgZml4ZWQgZXZlbnRzIGZvciB0aGUgZGVmYXVsdCB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMKLSAgICAgKgorICAgICAqIAogICAgICAqIE5COiBpbnRlcm5hbCBldmVudHMgKHdpdGggYW4gb3duZXIgb2YgIl9zbm1wZCIpIHdpbGwgbm90IGluCiAgICAgICogZmFjdCByZWZlciB0byB0aGUgbXRlT2JqZWN0c1RhYmxlIGZvciB0aGUgcGF5bG9hZCB2YXJiaW5kcy4KLSAgICAgKiBUaGUgcm91dGluZSBtdGVPYmplY3RzX2ludGVybmFsX3ZibGlzdCgpIGhhcmRjb2RlcyB0aGUKKyAgICAgKiBUaGUgcm91dGluZSBtdGVPYmplY3RzX2ludGVybmFsX3ZibGlzdCgpIGhhcmRjb2RlcyB0aGUgCiAgICAgICogYXBwcm9wcmlhdGUgdmFyYmluZHMgZm9yIHRoZXNlIGludGVybmFsIGV2ZW50cy4KLSAgICAgKiAgIFRoaXMgcm91dGluZSB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB3aGVuZXZlciBhIG5ldworICAgICAqICAgVGhpcyByb3V0aW5lIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHdoZW5ldmVyIGEgbmV3IAogICAgICAqIGludGVybmFsIGV2ZW50IGlzIGFkZGVkLgogICAgICAqLwogICAgIGlmICggX2RlZmF1bHRzX2luaXQpCkBAIC0xMTksNiArMTI0LDcgQEAKICAgICAgKgogICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRElTTUFOX0RFQlVHR0lORwogdm9pZAogX210ZUV2ZW50X2R1bXAodm9pZCkKIHsKQEAgLTEzNSwxMiArMTQxLDEyIEBACiAgICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiKCVzLCAlcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPmluZGV4ZXMtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZS0+dmFsLnN0cmluZykpOwotICAgICAgICBERUJVR01TRygoImRpc21hbjpldmVudDpkdW1wIiwgIjogJXgsICV4XG4iLCByb3csIGVudHJ5KSk7CisgICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiOiAlcCwgJXBcbiIsIHJvdywgZW50cnkpKTsKICAgICAgICAgaSsrOwogICAgIH0KICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiRXZlbnRUYWJsZSAlZCBlbnRyaWVzXG4iLCBpKSk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RJU01BTl9ERUJVR0dJTkcgKi8KIAogLyoKICAqIENyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIGV2ZW50IHRhYmxlIApAQCAtMTk2LDYgKzIwMiw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01URUVWRU5UX1JFTU9WRUVOVFJZCiAvKgogICogUmVtb3ZlIGEgcm93IGZyb20gdGhlIGV2ZW50IHRhYmxlIAogICovCkBAIC0yMDgsOSArMjE1LDkgQEAKICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KICAgICBlbnRyeSA9IChzdHJ1Y3QgbXRlRXZlbnQgKikKICAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3coZXZlbnRfdGFibGVfZGF0YSwgcm93KTsKLSAgICBpZiAoZW50cnkpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01URUVWRU5UX1JFTU9WRUVOVFJZICovCiAKICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgKgpAQCAtMjIyLDEwICsyMjksMTIgQEAKIF9tdGVFdmVudF9maXJlX25vdGlmeSggc3RydWN0IG10ZUV2ZW50ICAgICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZVRyaWdnZXIgICp0cmlnZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICBvaWQgKnN1ZmZpeCwgc2l6ZV90IHNmeF9sZW4gKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIF9tdGVFdmVudF9maXJlX3NldCggICAgc3RydWN0IG10ZUV2ZW50ICAgICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZVRyaWdnZXIgICp0cmlnZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICBvaWQgKnN1ZmZpeCwgc2l6ZV90IHNmeF9sZW4gKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogaW50CiBtdGVFdmVudF9maXJlKCBjaGFyICpvd25lciwgY2hhciAqZXZlbnQsICAgICAgLyogRXZlbnQgdG8gaW52b2tlICAgICovCkBAIC0yNjEsMTEgKzI3MCwxMyBAQAogICAgICAgICBfbXRlRXZlbnRfZmlyZV9ub3RpZnkoIGVudHJ5LCB0cmlnZ2VyLCBzdWZmaXgsIHNfbGVuICk7CiAgICAgICAgIGZpcmVkID0gMTsKICAgICB9CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmIChlbnRyeS0+bXRlRXZlbnRBY3Rpb25zICYgTVRFX0VWRU5UX1NFVCkgewogICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmZpcmUiLCAiRmlyaW5nIHNldCBldmVudFxuIikpOwogICAgICAgICBfbXRlRXZlbnRfZmlyZV9zZXQoIGVudHJ5LCB0cmlnZ2VyLCBzdWZmaXgsIHNfbGVuICk7CiAgICAgICAgIGZpcmVkID0gMTsKICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBpZiAoIWZpcmVkKQogICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmZpcmUiLCAiTWF0Y2hlZCBldmVudCBpcyBlbXB0eVxuIikpOwpAQCAtMzMwLDcgKzM0MSw3IEBACiAgICAgdnAtPm5leHRfdmFyaWFibGUgICAgID0gdmJsaXN0LT5uZXh0X3ZhcmlhYmxlOwogICAgIHZibGlzdC0+bmV4dF92YXJpYWJsZSA9IHZhcjsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIF9fTk9UX05FRURFRCAqLwogCiBpbnQKIF9tdGVFdmVudF9maXJlX25vdGlmeSggc3RydWN0IG10ZUV2ZW50ICAgKmVudHJ5LCAgICAgLyogVGhlIGV2ZW50IHRvIGZpcmUgICovCkBAIC0zMzgsOSArMzQ5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgb2lkICpzdWZmaXgsIHNpemVfdCBzZnhfbGVuICkgLyogTWF0Y2hpbmcgaW5zdGFuY2UgICovCiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsICp2MjsKLSAgICBvaWQgICAgc25tcHRyYXBfb2lkW10gICA9IHsgMSwzLDYsMSw2LDMsMSwxLDQsMSwwIH07Ci0gICAgc2l6ZV90IHNubXB0cmFwX29pZF9sZW4gPSBPSURfTEVOR1RIKHNubXB0cmFwX29pZCk7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICAgc25tcHRyYXBfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IHNpemVfdCAgICBzbm1wdHJhcF9vaWRfbGVuOworICAgIG5ldHNubXBfc2Vzc2lvbiAgICAgICAqczsKIAogICAgICAgICAgLyoKICAgICAgICAgICAqIFRoZSBFdmVudC1NSUIgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgb2JqZWN0cyBmcm9tIHRoZQpAQCAtNDIxLDcgKzQzMiw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHYyID0gdmFyOyB2MiAmJiB2Mi0+bmV4dF92YXJpYWJsZTsgdjI9djItPm5leHRfdmFyaWFibGUpCiAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgbXRlT2JqZWN0c19pbnRlcm5hbF92Ymxpc3QodjIsICBlbnRyeS0+bXRlTm90aWZ5T2JqZWN0cywgdHJpZ2dlciwgcyk7CisgICAgICAgICAgICBtdGVPYmplY3RzX2ludGVybmFsX3ZibGlzdCh2MiwgZW50cnktPm10ZU5vdGlmeU9iamVjdHMsIHRyaWdnZXIsIHMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzQsNiArNDQ1LDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBfbXRlRXZlbnRfZmlyZV9zZXQoIHN0cnVjdCBtdGVFdmVudCAgICplbnRyeSwgICAgICAvKiBUaGUgZXZlbnQgdG8gZmlyZSAqLwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlciAqdHJpZ2dlciwgICAgLyogVHJpZ2dlciB0aGF0IGZpcmVkICovCkBAIC00NzcsNCArNDg5LDQgQEAKIAogICAgIC8qIFhYWCAtIE5lZWQgdG8gY2hlY2sgcmVzdWx0ICovCiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgKaW5kZXggYjM1ODUxOS4uM2JlNWM2ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgKiBDb2x1bW4gdmFsdWVzIGZvciB0aGUgbWFpbiBtdGVFdmVudFRhYmxlCiAgICAgICovCiAgICAgY2hhciAgICAgICAgICAgIG10ZUV2ZW50Q29tbWVudFtNVEVfU1RSMl9MRU4rMV07Ci0gICAgY2hhciAgICAgICAgICAgIG10ZUV2ZW50QWN0aW9uczsKKyAgICB1X2NoYXIgICAgICAgICAgbXRlRXZlbnRBY3Rpb25zOwogCiAgICAgLyoKICAgICAgKiBDb2x1bW4gdmFsdWVzIGZvciBOb3RpZmljYXRpb24gZXZlbnRzIChtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jCmluZGV4IDFiOWRlNzguLjI0MTkyYTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgpAQCAtMTEsNiArMTIsNyBAQAogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudENvbmYuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50c0NvbmYgbW9kdWxlICovCiB2b2lkCkBAIC00NjksNyArNDcxLDcgQEAKIHN0b3JlX210ZUVUYWJsZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIGNoYXIgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICp2cDsKICAgICBzaXplX3QgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OwpAQCAtNDk5LDEyICs1MDEsMTIgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlRVRhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVFdmVudENvbW1lbnQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVFdmVudENvbW1lbnQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICAvKiAuLi4gKGJ1dCBza2lwIHRoZSBtdGVFdmVudEFjdGlvbiBmaWVsZCkuLi4gKi8KICAgICAgICAgdGludCA9IGVudHJ5LT5mbGFncyAmIChNVEVfRVZFTlRfRkxBR19FTkFCTEVEfE1URV9FVkVOVF9GTEFHX0FDVElWRSk7IAogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKQEAgLTUyMCwxNyArNTIyLDE3IEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVFTm90VGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKICAgICAKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CiAgICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU5vdGlmaWNhdGlvbjsKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQkpFQ1RfSUQsIGNwdHIsICZ2cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+bXRlTm90aWZpY2F0aW9uX2xlbik7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVOb3RpZnlPd25lcjsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOwotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlTm90aWZ5T2JqZWN0czsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZU5vdGlmeU93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVOb3RpZnlPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOwogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CiAKQEAgLTUzOSwxOSArNTQxLDE5IEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVFU2V0VGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKICAgICAKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CiAgICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVNldE9JRDsKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQkpFQ1RfSUQsIGNwdHIsICZ2cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+bXRlU2V0T0lEX2xlbik7CiAgICAgICAgICAgICB0aW50ID0gZW50cnktPm10ZVNldFZhbHVlOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX0lOVEVHRVIsICAgY3B0ciwgJnRpbnQsIE5VTEwpOwotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlU2V0VGFyZ2V0OyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZVNldENvbnRleHQ7ICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVTZXRUYXJnZXQ7ICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlU2V0Q29udGV4dDsgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgICAgIHRpbnQgPSBlbnRyeS0+ZmxhZ3MgJiAoTVRFX1NFVF9GTEFHX09CSldJTER8TVRFX1NFVF9GTEFHX0NUWFdJTEQpOyAKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMKTsKICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCmluZGV4IDU4OTJmYjcuLjdkMmM5NGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYwpAQCAtNywxMSArNywxOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX29pZCkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qIEluaXRpYWxpemVzIHRoZSBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjgsNiBAQAogICAgIHN0YXRpYyBvaWQgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDQsIDMgfTsKICAgICBzaXplX3QgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ4LDEwICs2MywxOCBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXZlbnRfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXZlbnRfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIkV2ZW50IE5vdGlmeSBUYWJsZSBjb250YWluZXIgKCV4KVxuIiwKKyAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgTm90aWZ5IFRhYmxlIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90YWJsZV9kYXRhKSk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CiAKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIHRhYmxlICovCkBAIC0xMDksNiArMTMyLDggQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMjM1LDYgKzI2MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCmluZGV4IGJlMmJjYzYuLmFiZDYxMTAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMKaW5kZXggMzY0NjE0NC4uZWU2OTZmMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jCkBAIC03LDExICs3LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qIEluaXRpYWxpemVzIHRoZSBtdGVFdmVudFNldFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjksNiBAQAogICAgIHN0YXRpYyBvaWQgIG10ZUV2ZW50U2V0VGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDQsIDQgfTsKICAgICBzaXplX3QgICAgICBtdGVFdmVudFNldFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZUV2ZW50U2V0VGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszOCwxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVFdmVudFNldFRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFNldFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFNldFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ4LDEwICs2NCwxOSBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXZlbnRfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXZlbnRfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIkV2ZW50IFNldCBUYWJsZSBjb250YWluZXIgKCV4KVxuIiwKKyAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgU2V0IFRhYmxlIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90YWJsZV9kYXRhKSk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX210ZUV2ZW50U2V0VGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVFdmVudFNldFRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTEyMyw2ICsxNDgsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMjc4LDYgKzMwNCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oCmluZGV4IGI4Y2IxMjQuLjcxZWMwOWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlRXZlbnRTZXRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVFdmVudFNldFRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbXRlRXZlbnRTZXRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMKaW5kZXggMTlmZTBhMS4uYzViNTM0ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jCkBAIC03LDEyICs3LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnlfcGR1X3Nlc3Npb24pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG10ZWV2ZW50X3JlbW92ZWVudHJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiBJbml0aWFsaXplcyB0aGUgbXRlRXZlbnRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTIxLDcgKzMzLDYgQEAKICAgICBzdGF0aWMgb2lkICBtdGVFdmVudFRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCA0LCAyIH07CiAgICAgc2l6ZV90ICAgICAgbXRlRXZlbnRUYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChtdGVFdmVudFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMSwxMSArNDIsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlRXZlbnRUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlRXZlbnRUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50VGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50VGFibGVfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlRXZlbnRUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50VGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50VGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC00OSwxMCArNjgsMTggQEAKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIGV2ZW50X3RhYmxlX2RhdGEgY29udGFpbmVyICovCiAgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIGV2ZW50X3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwotICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBUYWJsZSBjb250YWluZXIgKCV4KVxuIiwKKyAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlRXZlbnRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVFdmVudFRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTExMSw2ICsxMzgsOCBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zMzgsNiArMzY3LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICB9CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDptaWIiLCAiVGFibGUgaGFuZGxlciwgZG9uZVxuIikpOwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgKaW5kZXggYTdkNzU2MC4uYWRjMWMzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oCkBAIC05LDYgKzksNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVFdmVudFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZUV2ZW50VGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVFdmVudFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYwppbmRleCAxMjNhZjdmLi5jZjk1MGMxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMKQEAgLTIzNiw4ICsyMzYsNyBAQAogICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLwogICAgIGVudHJ5ID0gKHN0cnVjdCBtdGVPYmplY3QgKikKICAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3cob2JqZWN0c190YWJsZV9kYXRhLCByb3cpOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMKaW5kZXggM2Y5MjkzYy4uNzY3OTg2NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBsaW5lICA9IHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fT0NURVRfU1RSLCBsaW5lLCAmdnAsICAgICZsZW4pOwogICAgIGxpbmUgID0gcmVhZF9jb25maWdfcmVhZF9kYXRhKEFTTl9VTlNJR05FRCwgIGxpbmUsICZpbmRleCwgJmxlbik7CiAKLSAgICBERUJVR01TRygoImRpc21hbjpldmVudDpjb25mIiwgIiglcywgJXMsICVkKSAiLCBvd25lciwgb25hbWUsIGluZGV4KSk7CisgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIoJXMsICVzLCAlbHUpICIsIG93bmVyLCBvbmFtZSwgaW5kZXgpKTsKIAogICAgIHJvdyAgID0gbXRlT2JqZWN0c19jcmVhdGVFbnRyeSggb3duZXIsIG9uYW1lLCBpbmRleCwgMCApOwogICAgIC8qIGVudHJ5ID0gKHN0cnVjdCBtdGVPYmplY3QgKiluZXRzbm1wX3RkYXRhX3Jvd19lbnRyeSggcm93ICk7ICovCkBAIC0xMTEsNyArMTExLDcgQEAKIHN0b3JlX210ZU9UYWJsZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIGNoYXIgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICp2cDsKICAgICBzaXplX3QgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OwpAQCAtMTMxLDE2ICsxMzEsMTYgQEAKICAgICAgICAgaWYgKCBlbnRyeS0+ZmxhZ3MgJiBNVEVfT0JKRUNUX0ZMQUdfRklYRUQgKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiAgU3RvcmluZyAoJXMgJXMgJWQpXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiICBTdG9yaW5nICglcyAlcyAlbGQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tdGVPd25lciwgZW50cnktPm10ZU9OYW1lLCBlbnRyeS0+bXRlT0luZGV4KSk7CiAgICAgICAgIG1lbXNldChsaW5lLCAwLCBzaXplb2YobGluZSkpOwogICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVPVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwID0gZW50cnktPm10ZU93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7Ci0gICAgICAgIHZwID0gZW50cnktPm10ZU9OYW1lOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgIGNwID0gZW50cnktPm10ZU93bmVyOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CisgICAgICAgIGNwID0gZW50cnktPm10ZU9OYW1lOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9VTlNJR05FRCwgIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+bXRlT0luZGV4LCBOVUxMKTsKICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPYmplY3RJRDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYwppbmRleCA5NjQ4MmU1Li5mN2Y2ZTAyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jCkBAIC03LDExICs3LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVPYmplY3RzLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlT2JqZWN0c1RhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9tdGVPYmplY3RzVGFibGUodm9pZCkKQEAgLTIwLDcgKzMwLDYgQEAKICAgICBzdGF0aWMgb2lkIG10ZU9iamVjdHNUYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDMsIDEgfTsKICAgICBzaXplX3QgICAgIG10ZU9iamVjdHNUYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChtdGVPYmplY3RzVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSBvYmplY3QgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM5LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhpcyB0YWJsZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlT2JqZWN0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZU9iamVjdHNUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZU9iamVjdHNUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVPYmplY3RzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNTAsNiArNjcsMTUgQEAKICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgb2JqZWN0c190YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlT2JqZWN0c1RhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgbXRlT2JqZWN0c1RhYmxlIHRhYmxlICovCiBpbnQKQEAgLTEwNSw2ICsxMzEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMzA5LDcgKzMzNiwxMiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCmluZGV4IDE0YmZiMjYuLmY1Y2Q3YmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgKQEAgLTksNiArOSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZU9iamVjdHNUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVPYmplY3RzVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVPYmplY3RzVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jCmluZGV4IDExY2I1YjcuLjVhMGRjYmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYwpAQCAtNCwxMSArNCwxNiBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGlzbWFuX2RlYnVnZ2luZywgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobXRldHJpZ2dlciwgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobXRldHJpZ2dlcl9yZW1vdmVlbnRyeSwgbXRldHJpZ2dlcikKKwogbmV0c25tcF90ZGF0YSAqdHJpZ2dlcl90YWJsZV9kYXRhOwogCiBvaWQgICAgX3N5c1VwVGltZV9pbnN0YW5jZVtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCAzLCAwIH07CkBAIC0zMSw3ICszNiw3IEBACiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGNyZWF0ZSBtdGVUcmlnZ2VyVGFibGUiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiY3JlYXRlIHRyaWdnZXIgY29udGFpbmVyICgleClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJjcmVhdGUgdHJpZ2dlciBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJfdGFibGVfZGF0YSkpOwogICAgIH0KICAgICBtdGVUcmlnZ2VyRmFpbHVyZXMgPSAwOwpAQCAtNTMsNiArNTgsNyBAQAogICAgICAqCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ESVNNQU5fREVCVUdHSU5HCiB2b2lkCiBfbXRlVHJpZ2dlcl9kdW1wKHZvaWQpCiB7CkBAIC02OSwxMiArNzUsMTIgQEAKICAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICIoJXMsICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKSk7Ci0gICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiOiAleCwgJXhcbiIsIHJvdywgZW50cnkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICI6ICVwLCAlcFxuIiwgcm93LCBlbnRyeSkpOwogICAgICAgICBpKys7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICJUcmlnZ2VyVGFibGUgJWQgZW50cmllc1xuIiwgaSkpOwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ESVNNQU5fREVCVUdHSU5HICovCiAKIC8qCiAgKiBDcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0cmlnZ2VyIHRhYmxlIApAQCAtMTQyLDYgKzE0OCw3IEBACiAgICAgcmV0dXJuIHJvdzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01URVRSSUdHRVJfUkVNT1ZFRU5UUlkKIC8qCiAgKiBSZW1vdmUgYSByb3cgZnJvbSB0aGUgdHJpZ2dlciB0YWJsZSAKICAqLwpAQCAtMTU5LDYgKzE2Niw3IEBACiAgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFVFJJR0dFUl9SRU1PVkVFTlRSWSAqLwogCiAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCmluZGV4IDJiM2ViNDguLjE5NjI2YjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaApAQCAtMTIyLDggKzEyMiw4IEBACiAgICAgLyoKICAgICAgKiBDb2x1bW4gdmFsdWVzIGZvciBFeGlzdGVuY2UgdGVzdHMgKG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSkKICAgICAgKi8KLSAgICBjaGFyICAgICAgICAgICAgbXRlVEV4VGVzdDsKLSAgICBjaGFyICAgICAgICAgICAgbXRlVEV4U3RhcnR1cDsKKyAgICB1X2NoYXIgICAgICAgICAgbXRlVEV4VGVzdDsKKyAgICB1X2NoYXIgICAgICAgICAgbXRlVEV4U3RhcnR1cDsKICAgICBjaGFyICAgICAgICAgICAgbXRlVEV4T2JqT3duZXJbTVRFX1NUUjFfTEVOKzFdOwogICAgIGNoYXIgICAgICAgICAgICBtdGVURXhPYmplY3RzWyBNVEVfU1RSMV9MRU4rMV07CiAgICAgY2hhciAgICAgICAgICAgIG10ZVRFeEV2T3duZXJbIE1URV9TVFIxX0xFTisxXTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCmluZGV4IGFkNDY5ZDcuLmVkMWVjMzAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYwpAQCAtNywxMSArNywxOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTIwLDcgKzI4LDYgQEAKICAgICBzdGF0aWMgb2lkIG10ZVRCb29sVGFibGVfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCA1IH07CiAgICAgc2l6ZV90ICAgICBtdGVUQm9vbFRhYmxlX29pZF9sZW4gID0gT0lEX0xFTkdUSChtdGVUQm9vbFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzcsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlckJvb2xlYW5UYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRCb29sVGFibGVfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlckJvb2xlYW5UYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRCb29sVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNTEsNiArNjYsMTQgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBCb29sIFRhYmxlXG4iKSk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX210ZVRyaWdnZXJCb29sZWFuVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSB0YWJsZSAqLwogaW50CkBAIC0xMjgsNiArMTUxLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTI4NSw2ICszMDksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaAppbmRleCBkMmQyZGNiLi5mMmRkZDc3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKQEAgLTksNiArOSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJCb29sZWFuVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMKaW5kZXggYzAxNWUyNC4uZTdiYjY5YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgpAQCAtMTQsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZVRyaWdnZXJDb25mIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsMTMgKzI2LDE2IEBACiAgICAgLyoKICAgICAgKiBSZWdpc3RlciBjb25maWcgaGFuZGxlciBmb3IgdXNlci1sZXZlbCAoZml4ZWQpIHRyaWdnZXJzIC4uLgogICAgICAqLwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJtb25pdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfbXRlTW9uaXRvciwgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyaWdnZXJuYW1lIFstSV0gWy1pIE9JRCB8IC1vIE9JRF0qIFstZSBldmVudF0gZXhwcmVzc2lvbiAiKTsKLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGVmYXVsdE1vbml0b3JzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycywgTlVMTCwgInllc3xubyIpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJsaW5rVXBEb3duTm90aWZpY2F0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2xpbmtVcERvd25fdHJhcHMsICAgIE5VTEwsICJ5ZXN8bm8iKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigibW9uaXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfbXRlTW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmlnZ2VybmFtZSBbLUldIFstaSBPSUQgfCAtbyBPSURdKiBbLWUgZXZlbnRdIGV4cHJlc3Npb24gIik7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoImRlZmF1bHRNb25pdG9ycyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAieWVzfG5vIik7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoImxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9saW5rVXBEb3duX3RyYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICJ5ZXN8bm8iKTsKIAogICAgIC8qCiAgICAgICogLi4uIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2Ugb2YgdmFyaW91cyBldmVudCB0YWJsZSBlbnRyaWVzIC4uLgpAQCAtMTQwLDExICsxNDUsMTEgQEAKIAogCiB2b2lkCi1wYXJzZV9tdGVNb25pdG9yKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQorcGFyc2VfbXRlTW9uaXRvcihjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBjaGFyICAgYnVmWyAgU1BSSU5UX01BWF9MRU5dOwogICAgIGNoYXIgICB0bmFtZVtNVEVfU1RSMV9MRU4rMV07Ci0gICAgY2hhciAgKmNwOworICAgIGNvbnN0IGNoYXIgICpjcDsKICAgICBsb25nICAgdGVzdCA9IDA7CiAKICAgICBjaGFyICAgZW5hbWVbTVRFX1NUUjFfTEVOKzFdOwpAQCAtMTYzLDcgKzE2OCw3IEBACiAgICAgY2hhciAgIG9pZF9uYW1lX2J1ZltTUFJJTlRfTUFYX0xFTl07CiAgICAgb2lkICAgIG5hbWVfYnVmW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgbmFtZV9idWZfbGVuOwotICAgIGxvbmcgICBvcCAgICA9IDA7CisgICAgdV9jaGFyIG9wICAgID0gMDsKICAgICBsb25nICAgdmFsdWUgPSAwOwogCiAgICAgc3RydWN0IG10ZU9iamVjdCAgKm9iamVjdDsKQEAgLTE4Myw5ICsxODgsOSBAQAogICAgIG1lbXNldCggYnVmLCAgIDAsIHNpemVvZihidWYpKTsKICAgICBtZW1zZXQoIHRuYW1lLCAwLCBzaXplb2YodG5hbWUpKTsKICAgICBtZW1zZXQoIGVuYW1lLCAwLCBzaXplb2YoZW5hbWUpKTsKLSAgICBmb3IgKGNwID0gY29weV9ud29yZChsaW5lLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICBmb3IgKGNwID0gY29weV9ud29yZF9jb25zdChsaW5lLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgIDsKLSAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgICBidWYsIFNQUklOVF9NQVhfTEVOKSkgeworICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCAgIGJ1ZiwgU1BSSU5UX01BWF9MRU4pKSB7CiAKICAgICAgICAgaWYgKCBidWZbMF0gPT0gJy0nICkgewogICAgICAgICAgICAgc3dpdGNoIChidWZbMV0pIHsKQEAgLTE5OCw3ICsyMDMsNyBAQAogICAgICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICBjYXNlICd1JzoKICAgICAgICAgICAgICAgICAvKiBza2lwIG9wdGlvbiBwYXJhbWV0ZXIgKi8KLSAgICAgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW4oIGNwICk7CisgICAgICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KCBjcCApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnRCc6CiAgICAgICAgICAgICBjYXNlICdJJzoKQEAgLTIxMiw3ICsyMTcsNyBAQAogICAgICAgICAgICAgICAgICAqICAgICAgSGFuZGxlIGVpdGhlciBjYXNlLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChjcCAmJiAqY3AgIT0gJy0nKQotICAgICAgICAgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW4oIGNwICk7CisgICAgICAgICAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbl9jb25zdCggY3AgKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJzAnOgogICAgICAgICAgICAgY2FzZSAnMSc6CkBAIC0yNzYsNyArMjgxLDcgQEAKICAgICAgICAgKiBPdGhlcndpc2UgdGhlIGZpcnN0IHRva2VuIGlzIHRoZSBPSUQgdG8gYmUgbW9uaXRvcmVkLgogICAgICAgICAqICAgU2tpcCBpdCBhbmQgbG9vayBhdCB0aGUgbmV4dCB0b2tlbiAoaWYgYW55KS4KICAgICAgICAgKi8KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCAgIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgIGlmIChjcCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBudW1lcmljIHZhbHVlLCB0aGVuIGl0J2xsIGJlIHRoZSBNSU4KQEAgLTI4NCw3ICsyODksNyBAQAogICAgICAgICAgICAgICogT3RoZXJ3aXNlIGl0J2xsIGJlIHRoZSBvcGVyYXRpb24gZmllbGQgb2YgYQogICAgICAgICAgICAgICogICBib29sZWFuIHRlc3QgKHRoZSB0aGlyZCBmb3JtKQogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIGlzZGlnaXQoYnVmWzBdKSB8fCBidWZbMF0gPT0gJy0nICkKKyAgICAgICAgICAgIGlmICggaXNkaWdpdCgodW5zaWduZWQgY2hhcikoYnVmWzBdKSkgfHwgYnVmWzBdID09ICctJyApCiAgICAgICAgICAgICAgICAgdGVzdCA9IE1URV9UUklHR0VSX1RIUkVTSE9MRDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0ZXN0ID0gTVRFX1RSSUdHRVJfQk9PTEVBTjsKQEAgLTMxNSw5ICszMjAsOSBAQAogICAgICAqIE5vdyBzdGFydCBwYXJzaW5nIGFnYWluIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpcmVjdGl2ZSwKICAgICAgKiAgIGV4dHJhY3RpbmcgdGhlIHZhcmlvdXMgb3B0aW9ucy4uLgogICAgICAqLwotICAgIGZvciAoY3AgPSBjb3B5X253b3JkKGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgIGZvciAoY3AgPSBjb3B5X253b3JkX2NvbnN0KGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgOwotICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCAgIGJ1ZiwgU1BSSU5UX01BWF9MRU4pKSB7CisgICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTikpIHsKIAogICAgICAgICBpZiAoYnVmWzBdID09ICctJyApIHsKICAgICAgICAgICAgIHN3aXRjaCAoYnVmWzFdKSB7CkBAIC0zMzIsNyArMzM3LDcgQEAKICAgICAgICAgICAgICAgICBtZW1zZXQoIG9pZF9uYW1lX2J1ZiwgMCwgc2l6ZW9mKG9pZF9uYW1lX2J1ZikpOwogICAgICAgICAgICAgICAgIG1lbXNldCggICAgIG5hbWVfYnVmLCAwLCBzaXplb2YoICAgIG5hbWVfYnVmKSk7CiAgICAgICAgICAgICAgICAgbmFtZV9idWZfbGVuID0gTUFYX09JRF9MRU47Ci0gICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBvaWRfbmFtZV9idWYsIE1URV9TVFIxX0xFTik7CisgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBvaWRfbmFtZV9idWYsIE1URV9TVFIxX0xFTik7CiAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX3BhcnNlX29pZChvaWRfbmFtZV9idWYsIG5hbWVfYnVmLCAmbmFtZV9idWZfbGVuKSkgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGlzY29udGludWl0eSBPSUQ6ICVzXG4iLCBvaWRfbmFtZV9idWYpOwogICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJ1bmtub3duIGRpc2NvbnRpbnVpdHkgT0lEIik7CkBAIC0zNDYsNyArMzUxLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAKICAgICAgICAgICAgIGNhc2UgJ2UnOiAgIC8qICBldmVudCAqLwotICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmQoY3AsIGVuYW1lLCBNVEVfU1RSMV9MRU4pOworICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGVuYW1lLCBNVEVfU1RSMV9MRU4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAnSSc6ICAgLyogdmFsdWUgaW5zdGFuY2UgKi8KQEAgLTM2Nyw3ICszNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWR4Kys7Ci0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbXRlT2JqZWN0c19hZGRPSUQoICJzbm1wZC5jb25mIiwgdG5hbWUsIGlkeCwgYnVmLCAwICk7CiAgICAgICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlVua25vd24gcGF5bG9hZCBPSUQ6ICVzXG4iLCBidWYpOwpAQCAtMzc5LDcgKzM4NCw3IEBACiAgICAgCiAgICAgICAgICAgICBjYXNlICdvJzogICAvKiAgb2JqZWN0ICAqLwogICAgICAgICAgICAgICAgIGlkeCsrOwotICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmQoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgIG9iamVjdCA9IG10ZU9iamVjdHNfYWRkT0lEKCAic25tcGQuY29uZiIsIHRuYW1lLCBpZHgsIGJ1ZiwgMSApOwogICAgICAgICAgICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJVbmtub3duIHBheWxvYWQgT0lEOiAlc1xuIiwgYnVmKTsKQEAgLTM5MCw3ICszOTUsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAncic6ICAgLyogIHJlcGVhdCBmcmVxdWVuY3kgKi8KLSAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICByZXBlYXQgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCkBAIC00MDYsNyArNDExLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAKICAgICAgICAgICAgIGNhc2UgJ3UnOiAgIC8qICB1c2VyICovCi0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgc2VzcyAgID0gbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uKGJ1Zik7CiAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2VzcykgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidXNlciBuYW1lICVzIG5vdCBmb3VuZFxuIiwgYnVmKTsKQEAgLTQ0Nyw3ICs0NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBNVEVfRVhJU1RfQUJTRU5UOwogICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogLi4uIHRoZW4gZXh0cmFjdCB0aGUgbW9uaXRvcmVkIE9JRC4KQEAgLTQ1NSw3ICs0NjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG9pZF9uYW1lX2J1ZiwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgICAgIGNwID0gTlVMTDsgIC8qIFRvIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzc2luZyBsb29wICovCi0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIlczogRXhpc3QgKCVzLCAlbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiJXM6IEV4aXN0ICglcywgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZSwgb2lkX25hbWVfYnVmLCBvcCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAKQEAgLTQ2NSw3ICs0NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKiAgIGlkZW50aWZ5IHRoZSBib29sZWFuIG9wZXJhdG9yIC4uLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG9pZF9uYW1lX2J1ZiwgYnVmLCBTUFJJTlRfTUFYX0xFTik7Ci0gICAgICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJyEnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gTVRFX0JPT0xfVU5FUVVBTDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbMF0gPT0gJz0nKSB7CkBAIC00ODcsMTAgKzQ5MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgKiAuLi4gdGhlbiBleHRyYWN0IHRoZSBjb21wYXJpc29uIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgKiAgICAgKGlnbm9yaW5nIGFueXRoaW5nIHRoYXQgcmVtYWlucykKICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGNwICAgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGNwICAgID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIGNwID0gTlVMTDsgIC8qIFRvIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzc2luZyBsb29wICovCi0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIlczogQm9vbCAoJXMsICVsZCwgJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiVzOiBCb29sICglcywgJWQsICVsZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5hbWUsIG9pZF9uYW1lX2J1Ziwgb3AsIHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIApAQCAtNTAxLDcgKzUwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2lkX25hbWVfYnVmLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCAgICAgICAgIGJ1ZiwgICAwLCBTUFJJTlRfTUFYX0xFTik7Ci0gICAgICAgICAgICAgICAgICAgIGNwICA9IGNvcHlfbndvcmQoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgICAgICAgICAgICAgICAgICBjcCAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CiAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC02ODksNyArNjk0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGNwLCBOVUxMLCAwKTsKICAgICAgICAgICAgIGVudHJ5LT5tdGVUVGhERmFsbFZhbHVlICA9IHZhbHVlOwotICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuKGNwKTsKKyAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbl9jb25zdChjcCk7CiAgICAgICAgICAgICB2YWx1ZSA9IHN0cnRvbChjcCwgTlVMTCwgMCk7CiAgICAgICAgICAgICBlbnRyeS0+bXRlVFRoRFJpc2VWYWx1ZSAgPSB2YWx1ZTsKICAgICAgICAgICAgIC8qCkBAIC03MjksNyArNzM0LDcgQEAKIH0KIAogdm9pZAotcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3BhcnNlX2xpbmtVcERvd25fdHJhcHMoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgLyoKICAgICAgKiBYWFggLSBUaGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QgYWNjb3JkaW5nIHRvIHRoZQpAQCAtNzQ4LDcgKzc1Myw3IEBACiAKIAogdm9pZAotcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3BhcnNlX2RlZmF1bHRfbXRlTW9uaXRvcnMoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgaWYgKHN0cm5jbXAoIGxpbmUsICJ5ZXMiLCAzKSA9PSAwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICJSZWdpc3RlcmluZyBkZWZhdWx0IG1vbml0b3JzXG4iKSk7CkBAIC0xMjY4LDcgKzEyNzMsNyBAQAogc3RvcmVfbXRlVFRhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CkBAIC0xMjk4LDEyICsxMzAzLDEyIEBACiAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZVRUYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29tbWVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29tbWVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgLyoKICAgICAgICAgICogLi4uIChidXQgc2tpcCB0aGUgbXRlVHJpZ2dlclRlc3QgYW5kCiAgICAgICAgICAqICAgICAgYXNzb3J0ZWQgYm9vbGVhbiBmbGFnIGZpZWxkcykuLi4KQEAgLTEzMTEsMTYgKzEzMTYsMTYgQEAKICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyVmFsdWVJRDsKICAgICAgICAgdGludCA9IGVudHJ5LT5tdGVUcmlnZ2VyVmFsdWVJRF9sZW47CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQkpFQ1RfSUQsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVHJpZ2dlclRhcmdldDsgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVHJpZ2dlckNvbnRleHQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVHJpZ2dlclRhcmdldDsgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVHJpZ2dlckNvbnRleHQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+bXRlVHJpZ2dlckZyZXF1ZW5jeTsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyT093bmVyOyAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyT2JqZWN0czsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyT093bmVyOyAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyT2JqZWN0czsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5mbGFncyAmCiAgICAgICAgICAgICAgICAgICAoTVRFX1RSSUdHRVJfRkxBR19WV0lMRCAgfE1URV9UUklHR0VSX0ZMQUdfQ1dJTER8CiAgICAgICAgICAgICAgICAgICAgTVRFX1RSSUdHRVJfRkxBR19FTkFCTEVEfE1URV9UUklHR0VSX0ZMQUdfQUNUSVZFKTsKQEAgLTEzMzcsMTAgKzEzNDIsMTAgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZVREVGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlRGVsdGFEaXNjb250SUQ7CiAgICAgICAgICAgICB0aW50ID0gZW50cnktPm10ZURlbHRhRGlzY29udElEX2xlbjsKQEAgLTEzNjIsMjQgKzEzNjcsMjQgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZVRFeFRhYmxlICIpOwogICAgICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCiAgICAgICAgICAgICB0aW50ID0gKGVudHJ5LT5tdGVURXhUZXN0ICAgICYgMHhmZikgPDwgODsKICAgICAgICAgICAgIHRpbnR8PSAoZW50cnktPm10ZVRFeFN0YXJ0dXAgJiAweGZmKTsKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4T2JqT3duZXI7ICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRFeE9iamVjdHM7ICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhPYmpPd25lcjsgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEV4T2JqZWN0czsgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4RXZPd25lcjsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRFeEV2ZW50OyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhFdk93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEV4RXZlbnQ7ICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKICAgICAgICAgfQpAQCAtMTM4OCwxMCArMTM5MywxMCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVEJsVGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHRpbnQgPSAgZW50cnktPm10ZVRCb29sQ29tcGFyaXNvbjsKICAgICAgICAgICAgIHRpbnQgfD0gKGVudHJ5LT5mbGFncyAmIE1URV9UUklHR0VSX0ZMQUdfQlNUQVJUKTsKQEAgLTEzOTksMTUgKzE0MDQsMTUgQEAKICAgICAgICAgICAgIHRpbnQgPSAgZW50cnktPm10ZVRCb29sVmFsdWU7CiAgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fSU5URUdFUiwgICBjcHRyLCAmdGludCwgTlVMTCApOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRCb29sT2JqT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmplY3RzOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRCb29sT2JqT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xFdk93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRCb29sRXZlbnQ7ICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUQm9vbEV2T3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEJvb2xFdmVudDsgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKICAgICAgICAgfQpAQCAtMTQxNiwxMCArMTQyMSwxMCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVFRoVGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9VTlNJR05FRCwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVUVGhTdGFydHVwLCAgICBOVUxMICk7CkBAIC0xNDMyLDI4ICsxNDM3LDI4IEBACiAgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+bXRlVFRoREZhbGxWYWx1ZSwgTlVMTCApOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaE9iak93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaE9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoT2JqT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoT2JqZWN0czsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaFJpc2VPd25lcjsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhSaXNlRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoRmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaEZhbGxFdmVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhSaXNlT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoUmlzZUV2ZW50OyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaEZhbGxPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhGYWxsRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhEUmlzZU93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaERSaXNlRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoREZhbGxPd25lcjsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhERmFsbEV2ZW50OyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaERSaXNlT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoRFJpc2VFdmVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhERmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaERGYWxsRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oCmluZGV4IDU2MGMzZWEuLmJmYmNmY2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oCkBAIC03LDkgKzcsOSBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyQ29uZih2b2lkKTsKLXZvaWQgICAgICAgICAgICBwYXJzZV9tdGVNb25pdG9yKCBjb25zdCBjaGFyICosIGNoYXIgKik7Ci12b2lkICAgICAgICAgICAgcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycyggY29uc3QgY2hhciAqLCBjaGFyICopOwotdm9pZCAgICAgICAgICAgIHBhcnNlX2xpbmtVcERvd25fdHJhcHMoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCAgICAgICAgICAgIHBhcnNlX210ZU1vbml0b3IoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cit2b2lkICAgICAgICAgICAgcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiAKIHZvaWQgICAgICAgICAgICBwYXJzZV9tdGVUVGFibGUoICBjb25zdCBjaGFyICosIGNoYXIgKik7CiB2b2lkICAgICAgICAgICAgcGFyc2VfbXRlVERUYWJsZSggY29uc3QgY2hhciAqLCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYwppbmRleCBlMDkyOTgyLi5jMmMyZThlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYwpAQCAtNywxMSArNywxNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZVRyaWdnZXJEZWx0YVRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjEsNiArMjcsNyBAQAogICAgIHNpemVfdCAgICAgIG10ZVREZWx0YVRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVREZWx0YVRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgaW50ICAgICAgICAgcmM7CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzcsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlVHJpZ2dlckRlbHRhVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJEZWx0YVRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVERlbHRhVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURGVsdGFUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyRGVsdGFUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJEZWx0YVRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVREZWx0YVRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVERlbHRhVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC00Nyw3ICs2MiwxMCBAQAogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRTsKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIHRyaWdnZXJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KLSAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdHJpZ2dlcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKKyAgICByYyA9IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCB0cmlnZ2VyX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKyAgICBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKHJlZy0+aGFuZGxlci0+bmV4dCk7CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIlRyaWdnZXIgRGVsdGEgVGFibGVcbiIpKTsKIH0KIApAQCAtMTA5LDYgKzEyNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yNDgsNiArMjY3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCmluZGV4IDI1MDI2ZWUuLjIyYjY4M2UgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKQEAgLTcsMTEgKzcsMTggQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyogSW5pdGlhbGl6ZXMgdGhlIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTIwLDcgKzI3LDcgQEAKICAgICBzdGF0aWMgb2lkIG10ZVRFeGlzdFRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCA0IH07CiAgICAgc2l6ZV90ICAgICBtdGVURXhpc3RUYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChtdGVURXhpc3RUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIGludCAgICAgICAgcmM7CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzcsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEV4aXN0VGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEV4aXN0VGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ3LDcgKzYyLDExIEBACiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9NVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQ7CiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSB0cmlnZ2VyX3RhYmxlX2RhdGEgY29udGFpbmVyICovCi0gICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIHRyaWdnZXJfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisgICAgcmMgPSBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdHJpZ2dlcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKHJlZy0+aGFuZGxlci0+bmV4dCk7CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIlRyaWdnZXIgRXhpc3QgVGFibGVcbiIpKTsKIH0KIApAQCAtMTIzLDYgKzE0Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yNjQsNiArMjg0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jCmluZGV4IDYyMzk2MTIuLjg4YzJmOGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMKQEAgLTcsMTIgKzcsMjcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdWludCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG10ZXRyaWdnZXJfcmVtb3ZlZW50cnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlclRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjEsNyArMzYsNiBAQAogICAgIHN0YXRpYyBvaWQgIG10ZVRyaWdnZXJUYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgMiwgMiB9OwogICAgIHNpemVfdCAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChtdGVUcmlnZ2VyVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMxLDExICs0NSwxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGFibGVfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTUyLDYgKzc0LDE1IEBACiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIlRyaWdnZXIgVGFibGVcbiIpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlVHJpZ2dlclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgbXRlVHJpZ2dlclRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTE1Miw2ICsxODMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtNDYzLDcgKzQ5NSwxNCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKaW5kZXggZTM4MjYxMi4uYzVjMzkzYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaApAQCAtMTEsNiArMTEsNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fbXRlVHJpZ2dlclRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbXRlVHJpZ2dlclRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKaW5kZXggMWY2NjQ5ZS4uNWFlZDBjOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwpAQCAtNywxMSArNywxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTIwLDcgKzI3LDYgQEAKICAgICBzdGF0aWMgb2lkIG10ZVRUaHJlc2hUYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgMiwgNiB9OwogICAgIHNpemVfdCAgICAgbXRlVFRocmVzaFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVRUaHJlc2hUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM2LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRUaHJlc2hUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRUaHJlc2hUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNTEsNiArNjUsMTUgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBUaHJlc2hvbGQgVGFibGVcbiIpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTE2NSw2ICsxODgsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMzU4LDYgKzM4Miw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCmluZGV4IDI4MmNjNjcuLjgwZjVmMmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKQEAgLTksNiArOSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYwppbmRleCA0MWJiZTI5Li5hNzU5ZTJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jCkBAIC03LDExICs3LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorCiAvKiBJbml0aWFsaXplcyB0aGUgZXhwRXhwcmVzc2lvbkVycm9yVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X2V4cEVycm9yVGFibGUodm9pZCkKQEAgLTQ4LDcgKzUxLDcgQEAKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIGV4cHJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXhwcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJFeHByZXNzaW9uIEVycm9yIFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gRXJyb3IgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90YWJsZV9kYXRhKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYwppbmRleCAxYzI0Yjc4Li5jOTI0MTQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiaW5pdCBleHByZXNzaW9uIGNvbnRhaW5lclxuIikpOwogICAgIGlmICghZXhwcl90YWJsZV9kYXRhKSB7CiAgICAgICAgICBleHByX3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgiZXhwRXhwcmVzc2lvblRhYmxlIiwgMCk7Ci0gICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJjcmVhdGUgZXhwcmVzc2lvbiBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHByZXNzaW9uIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90YWJsZV9kYXRhKSk7CiAgICAgfQogfQpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICBERUJVR01TRygoImRpc21hbjpleHByOmR1bXAiLCAiKCVzLCAlcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPmluZGV4ZXMtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZS0+dmFsLnN0cmluZykpOwotICAgICAgICBERUJVR01TRygoImRpc21hbjpleHByOmR1bXAiLCAiOiAleCwgJXhcbiIsIHJvdywgZW50cnkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXhwcjpkdW1wIiwgIjogJXAsICVwXG4iLCByb3csIGVudHJ5KSk7CiAgICAgICAgIGkrKzsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmR1bXAiLCAiRXhwcmVzc2lvblRhYmxlICVkIGVudHJpZXNcbiIsIGkpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jCmluZGV4IDYxNzQ0ZTEuLjgyNmQ2NzkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYwpAQCAtNCwxMyArNCwxOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cE9iamVjdC5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKKwogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cEV4cHJlc3Npb25Db25mIG1vZHVsZSAqLwogdm9pZAogaW5pdF9leHBFeHByZXNzaW9uQ29uZih2b2lkKQpAQCAtMjI2LDcgKzIzMiw3IEBACiBzdG9yZV9leHBFVGFibGUoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgbGluZVtTTk1QX01BWEJVRl07Ci0gICAgY2hhciAgICAgICAgICAgICAgICAgKmNwdHI7CisgICAgY2hhciAgICAgICAgICAgICAgICAgKmNwdHIsICpjcDsKICAgICB2b2lkICAgICAgICAgICAgICAgICAqdnA7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgIHRpbnQ7CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgKnJvdzsKQEAgLTI1NiwxNyArMjYyLDE3IEBACiAgICAgICAgIHN0cmNhdChsaW5lLCAiX2V4cEVUYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5leHBPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5leHBOYW1lOyAgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5leHBPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5leHBOYW1lOyAgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPmV4cEV4cHJlc3Npb247ICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cEV4cHJlc3Npb247ICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmV4cFZhbHVlVHlwZTsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5leHBDb21tZW50OyAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5leHBDb21tZW50OyAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5leHBEZWx0YUludGVydmFsOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jCmluZGV4IGMwN2U1ZmMuLjc5YWE3MTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jCkBAIC03LDEyICs3LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cEV4cHJlc3Npb25UYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfZXhwRXhwcmVzc2lvblRhYmxlKHZvaWQpCkBAIC00OSw3ICs1OCw3IEBACiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSBleHByX3RhYmxlX2RhdGEgY29udGFpbmVyICovCiAgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIGV4cHJfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBUYWJsZSBjb250YWluZXIgKCV4KVxuIiwKKyAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJFeHByZXNzaW9uIFRhYmxlIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdGFibGVfZGF0YSkpOwogfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3QuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jCmluZGV4IGRmZmU0ZTQuLmMyNzQzN2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiaW5pdCBleHBPYmplY3QgY29udGFpbmVyXG4iKSk7CiAgICAgaWYgKCFleHBPYmplY3RfdGFibGVfZGF0YSkgewogICAgICAgICAgZXhwT2JqZWN0X3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgiZXhwT2JqZWN0VGFibGUiLCAwKTsKLSAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHBPYmplY3QgY29udGFpbmVyICgleClcbiIsCisgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJjcmVhdGUgZXhwT2JqZWN0IGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwT2JqZWN0X3RhYmxlX2RhdGEpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMKaW5kZXggNmUxOGMyMi4uNjQwNjlkOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYwpAQCAtNCwxMiArNCwxNSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCisKIC8qIEluaXRpYWxpemVzIHRoZSBleHBPYmplY3RDb25mIG1vZHVsZSAqLwogdm9pZAogaW5pdF9leHBPYmplY3RDb25mKHZvaWQpCkBAIC0xMTUsNyArMTE4LDcgQEAKIHN0b3JlX2V4cE9UYWJsZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIGNoYXIgICAgICAgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICp2cDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAqcm93OwpAQCAtMTQ1LDEwICsxNDgsMTAgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfZXhwT1RhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmV4cE9iamVjdEluZGV4OwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYwppbmRleCA2ZTYwYjgxLi5hZGRhNDM4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMKQEAgLTcsMTEgKzcsMTggQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qIEluaXRpYWxpemVzIHRoZSBleHBPYmplY3RUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTUxLDcgKzU4LDcgQEAKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIGNvbW1vbiBleHBPYmplY3RfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXhwT2JqZWN0X3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwotICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gT2JqZWN0IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gT2JqZWN0IFRhYmxlIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cE9iamVjdF90YWJsZV9kYXRhKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYwppbmRleCA5N2JjYmFiLi5kNzRkYmQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jCkBAIC01OSw3ICs1OSw3IEBACiAgICAgaWYgKCFpbmRleGVzIHx8ICFpbmRleGVzLT5uZXh0X3ZhcmlhYmxlIHx8CiAgICAgICAgICFpbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT5uZXh0X3ZhcmlhYmxlICkgewogICAgICAgICAvKiBYWFggLSBTaG91bGRuJ3QgaGFwcGVuISAqLwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAiZ2V0ICglZCkgZW50cnkgKCVzLCAlcywgIiwgbW9kZSwKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmIChtb2RlID09IE1PREVfR0VUTkVYVCB8fCBtb2RlID09IE1PREVfR0VUQlVMSykgewogICAgICAgICAgICAgZXhwID0gZXhwRXhwcmVzc2lvbl9nZXRGaXJzdEVudHJ5KCk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJmaXJzdCBlbnRyeSAoJXgpXG4iLCBleHAgKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJmaXJzdCBlbnRyeSAoJXApXG4iLCBleHAgKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJpbmNvbXBsZXRlIHJlcXVlc3RcbiIgKSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgIC8qIE5vIG1hdGNoICovCkBAIC04Niw3ICs4Niw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgZXhwID0gZXhwRXhwcmVzc2lvbl9nZXRFbnRyeSggKGNoYXIqKWluZGV4ZXMtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilpbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKTsKLSAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidXNpbmcgZW50cnkgKCV4KVxuIiwgZXhwICkpOworICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBlbnRyeSAoJXApXG4iLCBleHAgKSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICB9CiBORVhUX0VYUDoKICAgICAgICAgZXhwID0gZXhwRXhwcmVzc2lvbl9nZXROZXh0RW50cnkoIGV4cC0+ZXhwT3duZXIsIGV4cC0+ZXhwTmFtZSApOwotICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBuZXh0IGVudHJ5ICgleClcbiIsIGV4cCApKTsKKyAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidXNpbmcgbmV4dCBlbnRyeSAoJXApXG4iLCBleHAgKSk7CiAgICAgfQogICAgIGlmICghZXhwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgIm5vIG1vcmUgZW50cmllc1xuIikpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKCB2cC0+dmFsLm9iamlkWzBdICE9IDAgKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGluc3RhbmNlICglZClcbiIsIHZwLT52YWwub2JqaWRbMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gaW5zdGFuY2UgKCUiIE5FVFNOTVBfUFJJbyAiZClcbiIsIHZwLT52YWwub2JqaWRbMF0pKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgLyogSW52YWxpZCBpbnN0YW5jZSAqLwogICAgICAgICB9CiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzID0gZXhwVmFsdWVfZXZhbHVhdGVFeHByZXNzaW9uKCBleHAsIE5VTEwsIDAgKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInNjYWxhciBnZXQgcmV0dXJuZWQgKCV4KVxuIiwgcmVzKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJzY2FsYXIgZ2V0IHJldHVybmVkICglcClcbiIsIHJlcykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIE90aGVyd2lzZSwgc2tpcCB0aGUgbGVhZGluZyAnLjAnIGFuZCB1c2UKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgdnAtPnZhbC5vYmppZCsxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT52YWxfbGVuL3NpemVvZihvaWQpLTEpOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidy9jYXJkIGdldCByZXR1cm5lZCAoJXgpXG4iLCByZXMpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgIncvY2FyZCBnZXQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvKgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoIHZwLT52YWxfbGVuID4gMCAmJiB2cC0+dmFsLm9iamlkWzBdICE9IDAgKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIG5leHQgaW5zdGFuY2UgKCVkKVxuIiwgdnAtPnZhbC5vYmppZFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICJub24temVybyBuZXh0IGluc3RhbmNlICglIiBORVRTTk1QX1BSSW8gImQpXG4iLCB2cC0+dmFsLm9iamlkWzBdKSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgIC8qIEFsbCB2YWxpZCBpbnN0YW5jZXMgc3RhcnQgd2l0aCAuMCAqLwogICAgICAgICB9CiAgICAgICAgIHBsZW4gPSBleHAtPmV4cFByZWZpeF9sZW47CkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggdnAsIEFTTl9QUklWX0lNUExJRURfT0JKRUNUX0lELAogICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKiludWxsSW5zdGFuY2UsIDMqc2l6ZW9mKG9pZCkpOwogICAgICAgICAgICAgcmVzID0gZXhwVmFsdWVfZXZhbHVhdGVFeHByZXNzaW9uKCBleHAsIE5VTEwsIDAgKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInNjYWxhciBuZXh0IHJldHVybmVkICgleClcbiIsIHJlcykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAic2NhbGFyIG5leHQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogTm93IGNvbWVzIHRoZSBpbnRlcmVzdGluZyBjYXNlIC0gZmluZGluZyB0aGUKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgdnAtPnZhbC5vYmppZCsxLCBsZW4tMSk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ3L2NhcmQgbmV4dCByZXR1cm5lZCAoJXgpXG4iLCByZXMpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgIncvY2FyZCBuZXh0IHJldHVybmVkICglcClcbiIsIHJlcykpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXM7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMKaW5kZXggYjdiMjU3ZS4uMWZlYjNlZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYwpAQCAtNjYsMTMgKzY2LDE3IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUJRVhQRVJST1JUSU1FICAxCi0gICAge0VYUEVSUk9SVElNRSwgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMX19LAorICAgIHtFWFBFUlJPUlRJTUUsICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwRXJyb3JUYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUJRVhQRVJST1JJTkRFWCAyCi0gICAge0VYUEVSUk9SSU5ERVgsIEFTTl9JTlRFR0VSLCAgUk9OTFksIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFWFBFUlJPUklOREVYLCBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwRXJyb3JUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUJRVhQRVJST1JDT0RFIDMKLSAgICB7RVhQRVJST1JDT0RFLCAgQVNOX0lOVEVHRVIsICBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0VYUEVSUk9SQ09ERSwgIEFTTl9JTlRFR0VSLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZQlFWFBFUlJPUklOU1RBTkNFIDQKLSAgICB7RVhQRVJST1JJTlNUQU5DRSwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgNH19CisgICAge0VYUEVSUk9SSU5TVEFOQ0UsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwRXJyb3JUYWJsZSwgMiwgezEsIDR9fQogfTsKIAogZXh0ZXJuIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqZXhwRXhwcmVzc2lvblRhYmxlU3RvcmFnZTsKQEAgLTEzNSw0ICsxMzksNiBAQAogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPmV4cEVycm9ySW5zdGFuY2VMZW4gKiBzaXplb2Yob2lkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+ZXhwRXJyb3JJbnN0YW5jZTsKICAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMKaW5kZXggZGEwZTE5YS4uMjEyOTUyZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC00NSw2ICs0NiwxMCBAQAogI2luY2x1ZGUgImV4cE9iamVjdFRhYmxlLmgiCiAjaW5jbHVkZSAiZXhwVmFsdWVUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0ZG9tYWluX3N1cHBvcnQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIGV4cEV4cHJlc3Npb25UYWJsZV92YXJpYWJsZXNfb2lkOgpAQCAtNjUsMTkgKzcwLDI2IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUJRVhQRVhQUkVTU0lPTiAgMwotICAgIHtFWFBFWFBSRVNTSU9OLCAgICAgICAgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0VYUEVYUFJFU1NJT04sICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUJRVhQRVhQUkVTU0lPTlZBTFVFVFlQRSA0Ci0gICAge0VYUEVYUFJFU1NJT05WQUxVRVRZUEUsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7RVhQRVhQUkVTU0lPTlZBTFVFVFlQRSwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OQ09NTUVOVCA1Ci0gICAge0VYUEVYUFJFU1NJT05DT01NRU5ULCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVhQRVhQUkVTU0lPTkNPTU1FTlQsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNX19LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OREVMVEFMTlRFUlZBTCA2Ci0gICAge0VYUEVYUFJFU1NJT05ERUxUQUxOVEVSVkFMLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtFWFBFWFBSRVNTSU9OREVMVEFMTlRFUlZBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDZ9fSwKICNkZWZpbmUJRVhQRVhQUkVTU0lPTlBSRUZJWCA3Ci0gICAge0VYUEVYUFJFU1NJT05QUkVGSVgsICAgIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7RVhQRVhQUkVTU0lPTlBSRUZJWCwgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05FUlJPUlMgOAotICAgIHtFWFBFWFBSRVNTSU9ORVJST1JTLCAgICBBU05fVU5TSUdORUQsICBST05MWSwgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0VYUEVYUFJFU1NJT05FUlJPUlMsICAgIEFTTl9VTlNJR05FRCwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgOH19LAogI2RlZmluZQlFWFBFWFBSRVNTSU9ORU5UUllTVEFUVVMgIDkKLSAgICB7RVhQRVhQUkVTU0lPTkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgOX19CisgICAge0VYUEVYUFJFU1NJT05FTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDl9fQogfTsKIAogLyoKQEAgLTMxMSw5ICszMjMsNyBAQAogICAgIGNoYXIgICAgICAgICAgICpjcHRyOwogICAgIHNpemVfdCAgICAgICAgICB0bXBpbnQ7CiAgICAgc3RydWN0IGV4cEV4cHJlc3Npb25UYWJsZV9kYXRhICpTdG9yYWdlVG1wOwotICAgIHN0cnVjdCBleHBPYmplY3RUYWJsZV9kYXRhICpPYmplY3RTdG9yYWdlVG1wOwotICAgIHN0cnVjdCBleHBWYWx1ZVRhYmxlX2RhdGEgKlZhbHVlU3RvcmFnZVRtcDsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXgsICpoY19vYmplY3QsICpoY192YWx1ZTsKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXg7CiAKICAgICBERUJVR01TR1RMKCgiZXhwRXhwcmVzc2lvblRhYmxlIiwgInN0b3JpbmcgZGF0YS4uLiAgIikpOwogCkBAIC01NzQsNiArNTg0LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTY1OCw2ICs2NjksNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNzQ2LDYgKzc1OCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC04MzAsNiArODQzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTExNTQsNiArMTE2OCw3IEBACiAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+aGF2ZV9jb3BpZWRfYXV0aF9pbmZvID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMKaW5kZXggOGQxODU1ZC4uZTA1N2Y1NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMzQsNiArMzUsOSBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogbWluaW1hbCBpbmNsdWRlIGRpcmVjdGl2ZXMgCkBAIC02NiwyMyArNzAsMzIgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZQlFWFBPQkpFQ1RJRCAgMgotICAgIHtFWFBPQkpFQ1RJRCwgICAgICAgICBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7RVhQT0JKRUNUSUQsICAgICAgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lCUVYUE9CSkVDVElEV0lMRENBUkQgMwotICAgIHtFWFBPQkpFQ1RJRFdJTERDQVJELCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQT0JKRUNUSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lCUVYUE9CSkVDVFNBTVBMRVRZUEUgNAotICAgIHtFWFBPQkpFQ1RTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7RVhQT0JKRUNUU0FNUExFVFlQRSwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lCUVYUE9CSkVDVERFTFRBRElTQ09OVElOVUlUWUlEIDUKLSAgICB7RVhQT0JKRUNUREVMVEFESVNDT05USU5VSVRZSUQsICBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVhQT0JKRUNUREVMVEFESVNDT05USU5VSVRZSUQsICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUJRVhQT0JKRUNURElTQ09OVElOVUlUWUlEV0lMRENBUkQgNgotICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZQlFWFBPQkpFQ1RESVNDT05USU5VSVRZSURUWVBFIDcKLSAgICB7RVhQT0JKRUNURElTQ09OVElOVUlUWUlEVFlQRSwgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7RVhQT0JKRUNURElTQ09OVElOVUlUWUlEVFlQRSwgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDd9fSwKICNkZWZpbmUJRVhQT0JKRUNUQ09ORElUSU9OQUwgIDgKLSAgICB7RVhQT0JKRUNUQ09ORElUSU9OQUwsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lCUVYUE9CSkVDVENPTkRJVElPTkFMV0lMRENBUkQgIDkKLSAgICB7RVhQT0JKRUNUQ09ORElUSU9OQUxXSUxEQ0FSRCwgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7RVhQT0JKRUNUQ09ORElUSU9OQUxXSUxEQ0FSRCwgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDl9fSwKICNkZWZpbmUJRVhQT0JKRUNURU5UUllTVEFUVVMgIDEwCi0gICAge0VYUE9CSkVDVEVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCAxMH19CisgICAge0VYUE9CSkVDVEVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCAxMH19CiB9OwogCiAKQEAgLTIwNyw3ICsyMjAsNiBAQAogcGFyc2VfZXhwT2JqZWN0VGFibGUoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgIHRtcGludDsKLSAgICBvaWQgICAgICAgICAgICAqdG1wb2lkID0gTlVMTDsKICAgICBzdHJ1Y3QgZXhwT2JqZWN0VGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9CiAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChleHBPYmplY3RUYWJsZV9kYXRhKTsKIApAQCAtMzk0LDYgKzQwNiw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgREVCVUdNU0dUTCgoImV4cE9iamVjdFRhYmxlIiwgInN0b3JhZ2UgZG9uZVxuIikpOworICAgIHJldHVybiAwOwogfQogCiAKQEAgLTU2NCw2ICs1NzcsNyBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC02NDQsNiArNjU4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTcyNSw3ICs3NDAsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC04MjIsNiArODM3LDcgQEAKICAgICAgICAgICogcHJldmlvdXMgdmFsdWVzLCBhcyB0aGVzZSBhcmUgZnJvbSBhIGRpZmZlcmVudCBvYmplY3Q/ICAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtOTA1LDcgKzkyMSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTk4OSw3ICsxMDA1LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTA4Myw2ICsxMDk5LDcgQEAKICAgICAgICAgICogcHJldmlvdXMgdmFsdWVzLCBhcyB0aGVzZSBhcmUgZnJvbSBhIGRpZmZlcmVudCBvYmplY3Q/ICAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE2Nyw3ICsxMTg0LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTQzOCw2ICsxNDU1LDcgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5leHBPYmplY3RFbnRyeVN0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jCmluZGV4IDBmNWUwYjYuLjZiMzE1YzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMKQEAgLTc2LDIxICs3NiwyOSBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lCUVYUFZBTFVFQ09VTlRFUjMyVkFMIDIKLSAgICB7RVhQVkFMVUVDT1VOVEVSMzJWQUwsICBBU05fQ09VTlRFUiwgIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7RVhQVkFMVUVDT1VOVEVSMzJWQUwsICBBU05fQ09VTlRFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUJRVhQVkFMVUVVTlNJR05FRDMyVkFMIDMKLSAgICB7RVhQVkFMVUVVTlNJR05FRDMyVkFMLCBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQVkFMVUVVTlNJR05FRDMyVkFMLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUJRVhQVkFMVUVUSU1FVElDS1NWQUwgNAotICAgIHtFWFBWQUxVRVRJTUVUSUNLU1ZBTCwgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtFWFBWQUxVRVRJTUVUSUNLU1ZBTCwgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZQlFWFBWQUxVRUlOVEVHRVIzMlZBTCA1Ci0gICAge0VYUFZBTFVFSU5URUdFUjMyVkFMLCAgQVNOX0lOVEVHRVIsICBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0VYUFZBTFVFSU5URUdFUjMyVkFMLCAgQVNOX0lOVEVHRVIsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lCUVYUFZBTFVFSVBBRERSRVNTVkFMIDYKLSAgICB7RVhQVkFMVUVJUEFERFJFU1NWQUwsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7RVhQVkFMVUVJUEFERFJFU1NWQUwsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDZ9fSwKICNkZWZpbmUJRVhQVkFMVUVPQ1RFVFNUUklOR1ZBTCA3Ci0gICAge0VYUFZBTFVFT0NURVRTVFJJTkdWQUwsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7RVhQVkFMVUVPQ1RFVFNUUklOR1ZBTCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgN319LAogI2RlZmluZQlFWFBWQUxVRU9JRFZBTCAgOAotICAgIHtFWFBWQUxVRU9JRFZBTCwgICAgICAgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtFWFBWQUxVRU9JRFZBTCwgICAgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgOH19LAogI2RlZmluZQlFWFBWQUxVRUNPVU5URVI2NFZBTCAgOQotICAgIHtFWFBWQUxVRUNPVU5URVI2NFZBTCwgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgOX19CisgICAge0VYUFZBTFVFQ09VTlRFUjY0VkFMLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA5fX0KIH07CiAKIApAQCAtMjM3LDcgKzI0NSw2IEBACiAgICAgY2hhciAgICAgICAgICAgKnJlc3VsdCwgKnJlc3VsdGJhazsKICAgICBjaGFyICAgICAgICAgICAqdGVtcCwgKnRlbXBiYWs7CiAgICAgY2hhciAgICAgICAgICAgIGludGNoYXJbMTBdOwotICAgIGludCAgICAgICAgICAgICBkb2xsYXIxLCBkb2xsYXIyOwogICAgIGludCAgICAgICAgICAgICBpID0gMCwgaiwgaywgbDsKICAgICBsb25nICAgICAgICAgICAgdmFsdWU7CiAgICAgdW5zaWduZWQgbG9uZyAgIHJlc3VsdF91X2xvbmc7CkBAIC0zMTQsNyArMzIxLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZV9saXN0ICp2YXJzOwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDE7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBJbml0aWFsaXplIHRoZSBTTk1QIGxpYnJhcnkKQEAgLTM2MSw3ICszNjcsNyBAQAogCiAgICAgICAgICAgICAgICAgdmFycyA9IHJlc3BvbnNlLT52YXJpYWJsZXM7CiAgICAgICAgICAgICAgICAgdmFsdWUgPSAqKHZhcnMtPnZhbC5pbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGludGNoYXIsICIldSIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGludGNoYXIsICIlbHUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZm9yIChrID0gMTsgayA8PSBzdHJsZW4oaW50Y2hhcik7IGsrKykgewogICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gaW50Y2hhcltrIC0gMV07CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCsrOwpAQCAtNDI1LDE1ICs0MzEsMTEgQEAKIAogCiB2b2lkCi1idWlsZF92YWx1ZXRhYmxlKCkKK2J1aWxkX3ZhbHVldGFibGUodm9pZCkKIHsKICAgICBzdHJ1Y3QgZXhwRXhwcmVzc2lvblRhYmxlX2RhdGEgKmV4cHN0b3JhZ2U7CiAgICAgc3RydWN0IGV4cE9iamVjdFRhYmxlX2RhdGEgKm9ianN0b3JhZ2UsICpvYmpmb3VuZCA9IE5VTEw7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2luZGV4LCAqb2JqZWN0X2hjaW5kZXg7Ci0gICAgY2hhciAgICAgICAgICAgKm93bmVyOwotICAgIHNpemVfdCAgICAgICAgICBvd25lcl9sZW47Ci0gICAgY2hhciAgICAgICAgICAgKm5hbWU7Ci0gICAgc2l6ZV90ICAgICAgICAgIG5hbWVfbGVuOwogICAgIGNoYXIgICAgICAgICAgICpleHByZXNzaW9uOwogICAgIG9pZCAgICAgICAgICAgICppbmRleDsKICAgICBpbnQgICAgICAgICAgICAgaSA9IDAsIGosIGw7CkBAIC01MTcsOSArNTE5LDcgQEAKICAgICAgICAgICAgIG9pZCAgICAgICAgICAgICpuZXh0X09JRDsKICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBuZXh0X09JRF9sZW47CiAgICAgICAgICAgICB0YWdnZXRPSURfbGVuID0gb2JqZm91bmQtPmV4cE9iamVjdElETGVuOwotICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlX2xpc3QgKnZhcnM7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMTsKICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNzOwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIFNOTVAgbGlicmFyeQpAQCAtNjMxLDEyICs2MzEsNyBAQAogICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKnZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKIHsKIAotICAgIHN0YXRpYyBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnM7Ci0gICAgc2l6ZV90ICAgICAgICAgIG5ld2xlbiA9Ci0gICAgICAgICpsZW5ndGggLSAoc2l6ZW9mKGV4cFZhbHVlVGFibGVfdmFyaWFibGVzX29pZCkgLyBzaXplb2Yob2lkKSArCi0gICAgICAgICAgICAgICAgICAgMyAtIDEpOwogICAgIHN0cnVjdCBleHBWYWx1ZVRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAgICBjb3VudGVyMzI7CiAKIAogCkBAIC03MTEsNiArNzA2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZGVmYXVsdDoKICAgICAgICAgRVJST1JfTVNHKCIiKTsKKwlyZXR1cm4gTlVMTDsKICAgICB9CiB9CiAKQEAgLTc4MCw2ICs3NzYsNyBAQAogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiAoYSAvIGIpOwogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKaW5kZXggM2UwNzg2Zi4uNDhhZGQ2OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCkBAIC00LDEwICs0LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cpCisKIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKm10ZUV2ZW50Tm90aWZfdGFibGVfc2V0OwogCiAKQEAgLTYxLDEyICs2NSwyMSBAQAogICAgICAqIG5vdGU6IGlmIHlvdSBkb24ndCBuZWVkIGEgc3ViaGFuZGxlciB0byBkZWFsIHdpdGggYW55IGFzcGVjdHMKICAgICAgKiBvZiB0aGUgcmVxdWVzdCwgY2hhbmdlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfaGFuZGxlciB0byAiTlVMTCIgCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YV9zZXQobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpLCBtdGVFdmVudE5vdGlmX3RhYmxlX3NldCwgTlVMTCk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldChuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwgbXRlRXZlbnROb3RpZl90YWJsZV9zZXQsIE5VTEwpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIH0KIAogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIG1vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMKaW5kZXggYjRiZDdhMS4uMjJiYWQ3MyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtdGVUcmlnZ2VyVGFibGUuaCIKQEAgLTExLDYgKzEyLDkgQEAKICNpbmNsdWRlICJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgiCiAjaW5jbHVkZSAibXRlT2JqZWN0c1RhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KQorCiBzdGF0aWMgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0ID0gTlVMTDsKIAogLyoqIEluaXRpYWxpemUgdGhlIG10ZUV2ZW50VGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMKaW5kZXggNGY3ZTk1Zi4uMDljZWIyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYwpAQCAtOCw2ICs4LDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0xNyw2ICsxOCw5IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogbWluaW1hbCBpbmNsdWRlIGRpcmVjdGl2ZXMgCkBAIC00OCwyMCArNTIsNDAgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZU9iamVjdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFT0JKRUNUU0lEICAgICAgICAgIDUKLSAgICB7TVRFT0JKRUNUU0lELCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCAzfX0sCisgICAge01URU9CSkVDVFNJRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URU9CSkVDVFNJRFdJTERDQVJEICA2Ci0gICAge01URU9CSkVDVFNJRFdJTERDQVJELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLAotICAgICB7MSwgNH19LAorICAgIHtNVEVPQkpFQ1RTSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUgICBNVEVPQkpFQ1RTRU5UUllTVEFUVVMgIDcKLSAgICB7TVRFT0JKRUNUU0VOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLAotICAgICB7MSwgNX19LAorICAgIHtNVEVPQkpFQ1RTRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCA1fX0sCiAKIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZU9iamVjdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCisgICAgICovCisjZGVmaW5lICAgTVRFT0JKRUNUU0lEICAgICAgICAgIDUKKyAgICB7TVRFT0JKRUNUU0lELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDN9fSwKKyNkZWZpbmUgICBNVEVPQkpFQ1RTSURXSUxEQ0FSRCAgNgorICAgIHtNVEVPQkpFQ1RTSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgNH19LAorI2RlZmluZSAgIE1URU9CSkVDVFNFTlRSWVNUQVRVUyAgNworICAgIHtNVEVPQkpFQ1RTRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDV9fSwKKworfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMzAxLDYgKzMyNSwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZU9iamVjdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVPYmplY3RzVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KQEAgLTMxOSwxNyArMzQ3LDIzIEBACiAKIAogICAgIGNhc2UgTVRFT0JKRUNUU0lEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZU9iamVjdHNJRDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gKFN0b3JhZ2VUbXAtPm10ZU9iamVjdHNJRExlbikgKiBzaXplb2Yob2lkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0lEOwogCiAgICAgY2FzZSBNVEVPQkpFQ1RTSURXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVPYmplY3RzSURXaWxkY2FyZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZU9iamVjdHNJRFdpbGRjYXJkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVPYmplY3RzSURXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFT0JKRUNUU0VOVFJZU1RBVFVTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZU9iamVjdHNFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZU9iamVjdHNFbnRyeVN0YXR1cyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0VudHJ5U3RhdHVzOwogCkBAIC0zNDIsNiArMzc2LDcgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIGludAogd3JpdGVfbXRlT2JqZWN0c0lEKGludCBhY3Rpb24sCkBAIC00MjMsNiArNDU4LDkgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC01MDcsNiArNTQ1LDggQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTY0MSw2ICs2ODEsOCBAQAogCiAKICAgICAgICAgICAgIFN0b3JhZ2VOZXcgPSBTTk1QX01BTExPQ19TVFJVQ1QobXRlT2JqZWN0c1RhYmxlX2RhdGEpOworICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlT3duZXIgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbCh2cC0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbF9sZW4pOwogICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlT3duZXJMZW4gPSB2cC0+dmFsX2xlbjsKQEAgLTc3MywxMSArODE1LDE2IEBACiAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0VudHJ5U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCiB2b2lkCiBtdGVfYWRkX29iamVjdHMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFycywKICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKml0ZW0sIGNvbnN0IGNoYXIgKm93bmVyLApAQCAtODg4LDYgKzkzNSw4IEBACiAgICAgICogbWFsbG9jIGluaXRpYWwgc3RydWN0IAogICAgICAqLwogICAgIFN0b3JhZ2VOZXcgPSBTTk1QX01BTExPQ19TVFJVQ1QobXRlT2JqZWN0c1RhYmxlX2RhdGEpOworICAgIGlmIChTdG9yYWdlTmV3ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgU3RvcmFnZU5ldy0+bXRlT3duZXIgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChvd25lciwgc3RybGVuKG93bmVyKSk7CiAgICAgU3RvcmFnZU5ldy0+bXRlT3duZXJMZW4gPSBzdHJsZW4ob3duZXIpOwogICAgIFN0b3JhZ2VOZXctPm10ZU9iamVjdHNOYW1lID0gbmV0c25tcF9zdHJkdXBfYW5kX251bGwob2JqbmFtZSwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaAppbmRleCBkM2MzYzUwLi40ZDQ0Yzg3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCkBAIC01OSwxMSArNTksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG9pZG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2lkbmFtZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXN3aWxkKTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZU9iamVjdHNJRDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZU9iamVjdHNJRFdpbGRjYXJkOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlT2JqZWN0c0VudHJ5U3RhdHVzOwotCi0gICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVPYmplY3RzRW50cnlTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKaW5kZXggNDljZWI1Zi4uNWIxNzkyNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCkBAIC00OCwzMyArNDgsNjIgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiAgMwotICAgIHtNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT04sIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAxfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5WQUxVRSAgNAotICAgIHtNVEVUUklHR0VSQk9PTEVBTlZBTFVFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTlZBTFVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAgIDUKLSAgICB7TVRFVFJJR0dFUkJPT0xFQU5TVEFSVFVQLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSICA2Ci0gICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOT0JKRUNUUyAgNwotICAgIHtNVEVUUklHR0VSQk9PTEVBTk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiAgOAotICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5FVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFORVZFTlQgIDkKLSAgICB7TVRFVFJJR0dFUkJPT0xFQU5FVkVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgN319LAotCiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT04gIDMKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgMX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOVkFMVUUgIDQKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5WQUxVRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAgIDUKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5TVEFSVFVQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSICA2CisgICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA0fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTICA3CisgICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiAgOAorICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDZ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTkVWRU5UICA5CisgICAge01URVRSSUdHRVJCT09MRUFORVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDd9fSwKK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKgogICogKEwgPSBsZW5ndGggb2YgdGhlIG9pZHN1ZmZpeCkgCiAgKi8KQEAgLTEyNiw2ICsxNTUsMTAgQEAKIAogICAgIERFQlVHTVNHVEwoKCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KQEAgLTE0NCwzNyArMTc3LDUxIEBACiAKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuQ29tcGFyaXNvbjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuQ29tcGFyaXNvbik7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTlZBTFVFOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuVmFsdWU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhblZhbHVlKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhblZhbHVlOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVA6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXA7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOT0JKRUNUU09XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuT2JqZWN0c093bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHNPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzT3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOT0JKRUNUUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuT2JqZWN0c0xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTkVWRU5UT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50OwogCkBAIC0xODcsNiArMjM0LDcgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIGludAogd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uKGludCBhY3Rpb24sCkBAIC04MDAsMyArODQ4LDUgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaAppbmRleCBmNjg1NTg2Li42NDEzZGE1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5WYWx1ZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJCb29sZWFuU3RhcnR1cDsKQEAgLTM4LDYgKzM5LDcgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJCb29sZWFuT2JqZWN0czsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJCb29sZWFuRXZlbnRPd25lcjsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJCb29sZWFuRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYwppbmRleCAzZWRiOTM1Li5jODI5ZTZhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYwpAQCAtNDgsMjEgKzQ4LDM4IEBACiAgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyRGVsdGFUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEICAzCi0gICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRCwgQVNOX09CSkVDVF9JRCwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJEICA0Ci0gICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFRZUEUgIDUKLSAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgM319LAotCiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyRGVsdGFUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCisgICAgICovCisjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEICAzCisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZSwgMiwgezEsIDF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURXSUxEQ0FSRCAgNAorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRSAgNQorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZSwgMiwgezEsIDN9fSwKK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKgogICogKEwgPSBsZW5ndGggb2YgdGhlIG9pZHN1ZmZpeCkgCiAgKi8KQEAgLTExNCw2ICsxMzEsMTAgQEAKIAogICAgIERFQlVHTVNHVEwoKCJtdGVUcmlnZ2VyRGVsdGFUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisgICAgLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMTI5LDI0ICsxNTAsMjkgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPQogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlETGVuICogc2l6ZW9mKG9pZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEV0lMRENBUkQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEV2lsZGNhcmQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9CiAgICAgICAgICAgICBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEV2lsZGNhcmQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEV2lsZGNhcmQ7CiAKICAgICBjYXNlIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFRZUEU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFR5cGUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFR5cGU7CiAKLQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEVSUk9SX01TRygiIik7CiAgICAgfQpAQCAtMTU1LDcgKzE4MSw3IEBACiAKIAogCi0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRChpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC00MTQsMyArNDQwLDQgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaAppbmRleCAwZThhMTdlLi5mYTQ4NzJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaApAQCAtMzAsOCArMzAsMTAgQEAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckRlbHRhVGFibGUodm9pZCk7CiAgICAgIEZpbmRWYXJNZXRob2QgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SUQ7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFR5cGU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9NVEVUUklHR0VSREVMVEFUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKaW5kZXggMWFkMGE3NC4uNGU2YjY0YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwpAQCAtNDgsMzAgKzQ4LDU2IEBACiAgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VURVNUICAzCi0gICAge01URVRSSUdHRVJFWElTVEVOQ0VURVNULCBBU05fQklUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFVEVTVCwgQVNOX0JJVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUCAgNAotICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUCwgQVNOX0JJVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVAsIEFTTl9CSVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRU9CSkVDVFNPV05FUiAgNQotICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUyAgNgotICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVE9XTkVSICA3Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UICA4Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDZ9fSwKLQogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFVEVTVCAgMworICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFVEVTVCwgQVNOX0JJVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgMX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQICA0CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQLCBBU05fQklUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCAyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRU9CSkVDVFNPV05FUiAgNQorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDN9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUyAgNgorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA0fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIgIDcKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgNX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCAgOAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgNn19LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMTMxLDYgKzE1NywxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KQEAgLTE0OSwzMiArMTc5LDQ0IEBACiAKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVYSVNURU5DRVRFU1Q6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3Q7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VUZXN0TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlVGVzdDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVA6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVN0YXJ0dXA7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VTdGFydHVwTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlU3RhcnR1cDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVYSVNURU5DRU9CSkVDVFNPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c093bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c093bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHNMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlRPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lcjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudE93bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudDsKIApAQCAtMTg3LDYgKzIyOSw3IEBACiAKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogCiBpbnQKIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VUZXN0KGludCBhY3Rpb24sCkBAIC03MzUsMyArNzc4LDUgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKaW5kZXggNDBkYmQ0ZS4uNzVjNjQyNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaApAQCAtMjksMTEgKzI5LDEzIEBACiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlVGVzdDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VTdGFydHVwOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHNPd25lcjsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50T3duZXI7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9NVEVUUklHR0VSRVhJU1RFTkNFVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jCmluZGV4IDRhNDQwOGMuLjgwYTQ1YTMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMKQEAgLTgsNiArOCw3IEBACiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMjAsNiArMjEsMTMgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShtaWJfc25wcmludF92YXJpYWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRkb21haW5fc3VwcG9ydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3VpbnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfdGltZV90b19zZWNzKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKQEAgLTc4LDUwICs4Niw5OCBAQAogICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlclRhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBNVEVUUklHR0VSQ09NTUVOVCAgICAgNQotICAgIHtNVEVUUklHR0VSQ09NTUVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgM319LAorICAgIHtNVEVUUklHR0VSQ09NTUVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJURVNUICAgICAgICA2Ci0gICAge01URVRSSUdHRVJURVNULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA0fX0sCisgICAge01URVRSSUdHRVJURVNULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlNBTVBMRVRZUEUgIDcKLSAgICB7TVRFVFJJR0dFUlNBTVBMRVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCA1fX0sCisgICAge01URVRSSUdHRVJTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJWQUxVRUlEICAgICA4Ci0gICAge01URVRSSUdHRVJWQUxVRUlELCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCA2fX0sCisgICAge01URVRSSUdHRVJWQUxVRUlELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA2fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlZBTFVFSURXSUxEQ0FSRCAgOQotICAgIHtNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLAotICAgICAyLCB7MSwgN319LAorICAgIHtNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgN319LAogI2RlZmluZSAgIE1URVRSSUdHRVJUQVJHRVRUQUcgICAxMAotICAgIHtNVEVUUklHR0VSVEFSR0VUVEFHLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCA4fX0sCisgICAge01URVRSSUdHRVJUQVJHRVRUQUcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDh9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSQ09OVEVYVE5BTUUgIDExCi0gICAge01URVRSSUdHRVJDT05URVhUTkFNRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgOX19LAorICAgIHtNVEVUUklHR0VSQ09OVEVYVE5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDl9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRCAgMTIKLSAgICB7TVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTB9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRlJFUVVFTkNZICAgMTMKLSAgICB7TVRFVFJJR0dFUkZSRVFVRU5DWSwgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCAxMX19LAorICAgIHtNVEVUUklHR0VSRlJFUVVFTkNZLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDExfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUk9CSkVDVFNPV05FUiAgMTQKLSAgICB7TVRFVFJJR0dFUk9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTJ9fSwKKyAgICB7TVRFVFJJR0dFUk9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VST0JKRUNUUyAgICAgMTUKLSAgICB7TVRFVFJJR0dFUk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDEzfX0sCisgICAge01URVRSSUdHRVJPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJFTkFCTEVEICAgICAxNgotICAgIHtNVEVUUklHR0VSRU5BQkxFRCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDE0fX0sCisgICAge01URVRSSUdHRVJFTkFCTEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRU5UUllTVEFUVVMgIDE3Ci0gICAge01URVRSSUdHRVJFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDE1fX0sCi0KKyAgICB7TVRFVFJJR0dFUkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTV9fSwKIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCisgICAgICovCisjZGVmaW5lICAgTVRFVFJJR0dFUkNPTU1FTlQgICAgIDUKKyAgICB7TVRFVFJJR0dFUkNPTU1FTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJURVNUICAgICAgICA2CisgICAge01URVRSSUdHRVJURVNULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSU0FNUExFVFlQRSAgNworICAgIHtNVEVUUklHR0VSU0FNUExFVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJWQUxVRUlEICAgICA4CisgICAge01URVRSSUdHRVJWQUxVRUlELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDZ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJEICA5CisgICAge01URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDd9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEFSR0VUVEFHICAgMTAKKyAgICB7TVRFVFJJR0dFUlRBUkdFVFRBRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA4fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkNPTlRFWFROQU1FICAxMQorICAgIHtNVEVUUklHR0VSQ09OVEVYVE5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgOX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJEICAxMgorICAgIHtNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTB9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRlJFUVVFTkNZICAgMTMKKyAgICB7TVRFVFJJR0dFUkZSRVFVRU5DWSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDExfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUk9CSkVDVFNPV05FUiAgMTQKKyAgICB7TVRFVFJJR0dFUk9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJPQkpFQ1RTICAgICAxNQorICAgIHtNVEVUUklHR0VST0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJFTkFCTEVEICAgICAxNgorICAgIHtNVEVUUklHR0VSRU5BQkxFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRU5UUllTVEFUVVMgIDE3CisgICAge01URVRSSUdHRVJFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTV9fSwKK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKgogICogKEwgPSBsZW5ndGggb2YgdGhlIG9pZHN1ZmZpeCkgCiAgKi8KQEAgLTM1Niw4ICs0MTIsNyBAQAogdm9pZAogcGFyc2Vfc2ltcGxlX21vbml0b3IoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZltTUFJJTlRfTUFYX0xFTl0sICpjcCwgZWJ1ZltTUFJJTlRfTUFYX0xFTl0sCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50bmFtZVs2NF07CisgICAgY2hhciAgICAgICAgICAgIGJ1ZltTUFJJTlRfTUFYX0xFTl0sICpjcCwgZXZlbnRuYW1lWzY0XTsKICAgICBvaWQgICAgICAgICAgICAgb2J1ZltNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG9idWZMZW47CiAgICAgc3RydWN0IG10ZVRyaWdnZXJUYWJsZV9kYXRhICpTdG9yYWdlTmV3OwpAQCAtNDAzLDggKzQ1OCwxNyBAQAogICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICBpZiAoY3ApIHsKKyAgICAgICAgICAgICAgICBpbnQgZnJlcTsKICAgICAgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPm10ZVRyaWdnZXJGcmVxdWVuY3kgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgZnJlcSA9IG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyhidWYpOworICAgICAgICAgICAgICAgIGlmIChmcmVxID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkludmFsaWQgLXIgdmFsdWVcbiIpOworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBYWFg6IGZyZWUgU3RvcmFnZU5ldyAKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlVHJpZ2dlckZyZXF1ZW5jeSA9ICh1bnNpZ2VuZCBsb25nKSBmcmVxOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJObyBwYXJhbWV0ZXIgYWZ0ZXIgLXIgZ2l2ZW5cbiIpOwogICAgICAgICAgICAgICAgIC8qCkBAIC00NDQsOCArNTA4LDcgQEAKICAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CiAgICAgICAgICAgICBvYnVmTGVuID0gTUFYX09JRF9MRU47CiAgICAgICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGJ1Ziwgb2J1ZiwgJm9idWZMZW4pKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihlYnVmLCAidW5hYmxlIHRvIHBhcnNlIG9pZDogJXMiLCBidWYpOwotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoZWJ1Zik7CisJCW5ldHNubXBfY29uZmlnX2Vycm9yKCJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBYWFg6IGZyZWUgU3RvcmFnZU5ldyAKICAgICAgICAgICAgICAgICAgKi8KQEAgLTUwNiw4ICs1NjksNyBAQAogICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CiAgICAgb2J1ZkxlbiA9IE1BWF9PSURfTEVOOwogICAgIGlmICghc25tcF9wYXJzZV9vaWQoYnVmLCBvYnVmLCAmb2J1ZkxlbikpIHsKLSAgICAgICAgc3ByaW50ZihlYnVmLCAidW5hYmxlIHRvIHBhcnNlIG9pZDogJXMiLCBidWYpOwotICAgICAgICBjb25maWdfcGVycm9yKGVidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWDogZnJlZSBTdG9yYWdlTmV3IAogICAgICAgICAgKi8KQEAgLTU5NSw3ICs2NTcsNyBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsICJhZGRlZCBzaW1wbGUgbW9uaXRvcjogJXNcbiIsCiAgICAgICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlVHJpZ2dlck5hbWUpKTsKLX0KK30gLyogcGFyc2Vfc2ltcGxlX21vbml0b3IgKi8KIAogCiAvKgpAQCAtMTA3OCw5ICsxMTQwLDcgQEAKICAgICAgICAgbXRlX2VuYWJsZV90cmlnZ2VyKFN0b3JhZ2VUbXApOwogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsICJkb25lLlxuIikpOwotfQotCi0KK30gLyogcGFyc2VfbXRlVHJpZ2dlclRhYmxlICovCiAKIAogLyoKQEAgLTE0MzEsMTQgKzE0OTEsMjAgQEAKIAogICAgIERFQlVHTVNHVEwoKCJtdGVUcmlnZ2VyVGFibGUiLAogICAgICAgICAgICAgICAgICJ2YXJfbXRlVHJpZ2dlclRhYmxlOiBFbnRlcmluZy4uLiAgXG4iKSk7CisKKwkvKiBzZXQgZGVmYXVsdCB2YWx1ZSAqLworCSp3cml0ZV9tZXRob2QgPSBOVUxMOworCiAgICAgLyoKICAgICAgKiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbGwgeW91ciBkYXRhIHByb3Blcmx5CiAgICAgICovCiAgICAgaWYgKChTdG9yYWdlVG1wID0KICAgICAgICAgIGhlYWRlcl9jb21wbGV4KG10ZVRyaWdnZXJUYWJsZVN0b3JhZ2UsIHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSkgPT0gTlVMTCkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKHZwLT5tYWdpYyA9PSBNVEVUUklHR0VSRU5UUllTVEFUVVMpCiAgICAgICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckVudHJ5U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xNDUwLDY3ICsxNTE2LDkzIEBACiAKIAogICAgIGNhc2UgTVRFVFJJR0dFUkNPTU1FTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckNvbW1lbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb21tZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQ29tbWVudDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRFU1Q6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRlc3Q7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUZXN0TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGVzdDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlNBTVBMRVRZUEU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclNhbXBsZVR5cGU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyU2FtcGxlVHlwZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclNhbXBsZVR5cGU7CiAKICAgICBjYXNlIE1URVRSSUdHRVJWQUxVRUlEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRExlbiAqIHNpemVvZihvaWQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlZBTFVFSURXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRBUkdFVFRBRzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGFyZ2V0VGFnOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGFyZ2V0VGFnTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGFyZ2V0VGFnOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQ09OVEVYVE5BTUU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckNvbnRleHROYW1lOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQ29udGV4dE5hbWVMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb250ZXh0TmFtZTsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckNvbnRleHROYW1lV2lsZGNhcmQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckNvbnRleHROYW1lV2lsZGNhcmQ7CiAKICAgICBjYXNlIE1URVRSSUdHRVJGUkVRVUVOQ1k6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckZyZXF1ZW5jeTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJGcmVxdWVuY3kpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJGcmVxdWVuY3k7CiAKICAgICBjYXNlIE1URVRSSUdHRVJPQkpFQ1RTT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlck9iamVjdHNPd25lcjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlck9iamVjdHNPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlck9iamVjdHNPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUk9CSkVDVFM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlck9iamVjdHM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJPYmplY3RzTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyT2JqZWN0czsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVOQUJMRUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckVuYWJsZWQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW5hYmxlZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVuYWJsZWQ7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFTlRSWVNUQVRVUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRW50cnlTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW50cnlTdGF0dXMpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbnRyeVN0YXR1czsKIApAQCAtMTUyMyw3ICsxNjE1LDcgQEAKIAogCiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVfbXRlVHJpZ2dlckNvbW1lbnQoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0xNjA2LDEwICsxNjk4LDExIEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJDb21tZW50ICovCiAKIAogCkBAIC0xNjkyLDEwICsxNzg1LDExIEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJUZXN0ICovCiAKIAogCkBAIC0xNzc0LDExICsxODY4LDExIEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclNhbXBsZVR5cGUgKi8KIAogCiAKQEAgLTE4NjgsMTAgKzE5NjIsMTEgQEAKICAgICAgICAgICogcHJldmlvdXMgdmFsdWVzLCBhcyB0aGVzZSBhcmUgZnJvbSBhIGRpZmZlcmVudCBvYmplY3Q/ICAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyVmFsdWVJRCAqLwogCiAKIApAQCAtMTk1MSwxMSArMjA0NiwxMSBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEV2lsZGNhcmQgKi8KIAogCiAKQEAgLTIwNDAsMTAgKzIxMzUsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclRhcmdldFRhZyAqLwogCiAKIApAQCAtMjEyOSwxMCArMjIyNSwxMSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWUgKi8KIAogCiAKQEAgLTIyMTIsMTEgKzIzMDksMTEgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZCAqLwogCiAKIApAQCAtMjI5OSwxMCArMjM5NiwxMSBAQAogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVudHJ5U3RhdHVzID09IFJTX0FDVElWRSkKICAgICAgICAgICAgIG10ZV9lbmFibGVfdHJpZ2dlcihTdG9yYWdlVG1wKTsKIAorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyRnJlcXVlbmN5ICovCiAKIAogCkBAIC0yMzg4LDEwICsyNDg2LDExIEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJPYmplY3RzT3duZXIgKi8KIAogCiAKQEAgLTI0NzYsMTAgKzI1NzUsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlck9iamVjdHMgKi8KIAogCiAKQEAgLTI1NjQsMTQgKzI2NjQsMTEgQEAKICAgICAgICAgZWxzZSBpZiAoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVuYWJsZWQgPT0gTVRFVFJJR0dFUkVOQUJMRURfRkFMU0UpCiAgICAgICAgICAgICBtdGVfZGlzYWJsZV90cmlnZ2VyKFN0b3JhZ2VUbXApOwogCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotCi0KK30gLyogd3JpdGVfbXRlVHJpZ2dlckVuYWJsZWQgKi8KIAogCiAKQEAgLTI4OTUsMTAgKzI5OTIsMTUgQEAKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbmFibGVkID09IE1URVRSSUdHRVJFTkFCTEVEX1RSVUUgJiYKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbnRyeVN0YXR1cyA9PSBSU19BQ1RJVkUpCiAgICAgICAgICAgICBtdGVfZW5hYmxlX3RyaWdnZXIoU3RvcmFnZVRtcCk7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1cyAqLworCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIAogLyoKICAqIHNlbmQgdHJhcCAKQEAgLTI5OTMsNyArMzA5NSw4IEBACiAKICAgICBzZW5kX3YydHJhcCh2YXJfbGlzdCk7CiAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFyX2xpc3QpOwotfQorfSAvKiBzZW5kX210ZV90cmFwICovCisKIAogdm9pZAogbGFzdF9zdGF0ZV9jbGVhbih2b2lkICpkYXRhKQpAQCAtMzAwMyw2ICszMTA2LDcgQEAKICAgICBTTk1QX0ZSRUUoY2xlYW5tZSk7CiB9CiAKKwogLyoKICAqIHJldHJpZXZlcyByZXF1ZXN0ZWQgaW5mbyBpbiBwZHUgZnJvbSB0aGUgY3VycmVudCB0YXJnZXQgCiAgKi8KQEAgLTMwOTQsNyArMzE5OCw3IEBACiAgICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAnOwogICAgIERFQlVHTVNHVEwoKCJtdGVUcmlnZ2VyVGFibGUiLCAiZ290IGEgdmFyaWFibGVzOiAlc1xuIiwgYnVmKSk7CiAgICAgcmV0dXJuIHJlc3BvbnNlOwotfQorfSAvKiBtdGVfZ2V0X3Jlc3BvbnNlICovCiAKIAogLyoKQEAgLTMxMjUsNyArMzIyOSw2IEBACiB9CiAKIAotCiAvKgogICogUmV0dXJuIDAgaWYgdGhlIGRpc2NvbnRpbnVpdHkgb2JqZWN0IHdhcyBjaGVja2VkIGFuZCBubyBkaXNjb250aW51aXR5IGhhcwogICogb2NjdXJyZWQsIDEgaWYgdGhlIGRpc2NvbnRpbnVpdHkgb2JqZWN0IHdhcyBjaGVja2VkIGFuZCBhIGRpc2NvbnRpbnVpdHkKQEAgLTMyNTYsNyArMzM1OSw3IEBACiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoIm10ZV9kaXNjbyIsICJubyBkaXNjb250aW51aXR5XG4iKSk7CiAgICAgcmV0dXJuIDA7Ci19Cit9IC8qIG10ZV9kaXNjb250aW51aXR5X29jY3VycmVkICovCiAKIAogdm9pZApAQCAtMzY2Myw3ICszNzY2LDggQEAKICAgICB9CiAKICAgICBpdGVtLT5zdGFydGVkID0gTVRFX1NUQVJURUQ7Ci19Cit9IC8qIG10ZV9ydW5fdHJpZ2dlciAqLworCiAKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAppbmRleCAxODkxNGRkLi5jNDI3NjAyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgbmV0c25tcF9wZHUgICAgKm10ZV9nZXRfcmVzcG9uc2Uoc3RydWN0IG10ZVRyaWdnZXJUYWJsZV9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICopOwogCi0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyQ29tbWVudDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUZXN0OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclNhbXBsZVR5cGU7CkBAIC0yNDMsOCArMjQzLDcgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJPYmplY3RzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckVuYWJsZWQ7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRW50cnlTdGF0dXM7Ci0KLSAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgdm9pZCAgICAgICAgICAgIG10ZV9lbmFibGVfdHJpZ2dlcihzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKml0ZW0pOwogICAgICB2b2lkICAgICAgICAgICAgbXRlX2Rpc2FibGVfdHJpZ2dlcihzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwppbmRleCAwMzhhMmZiLi5iZTk2M2MxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCkBAIC00OCw2MiArNDgsMTE1IEBACiAgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQICAzCi0gICAge01URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEU1RBUlRVUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HICA0Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcgIDUKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORyAgNgotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HICA3Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRE9CSkVDVFNPV05FUiAgOAotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDZ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUyAgOQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgN319LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSICAxMAotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgOH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVCAgMTEKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgOX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlRPV05FUiAgMTIKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTB9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UICAxMwotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDExfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlRPV05FUiAgMTQKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5UICAxNQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTN9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiAgMTYKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UICAxNwotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxNX19LAotCiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfdmFyaWFibGVzW10gPSB7CisgICAgLyoKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqLworI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQICAzCisgICAge01URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORyAgNAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcgIDUKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDN9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkcgIDYKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA0fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORyAgNworICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRE9CSkVDVFNPV05FUiAgOAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDZ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUyAgOQorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA3fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UT1dORVIgIDEwCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDh9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlQgIDExCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA5fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSICAxMgorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTB9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UICAxMworICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDExfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlRPV05FUiAgMTQKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5UICAxNQorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSICAxNgorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxNH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVCAgMTcKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE1fX0sCit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCiAvKgogICogKEwgPSBsZW5ndGggb2YgdGhlIG9pZHN1ZmZpeCkgCiAgKi8KIAotCiAvKgogICogZ2xvYmFsIHN0b3JhZ2Ugb2Ygb3VyIGRhdGEsIHNhdmVkIGluIGFuZCBjb25maWd1cmVkIGJ5IGhlYWRlcl9jb21wbGV4KCkgCiAgKi8KQEAgLTE1MSw2ICsyMDQsMTAgQEAKIAogICAgIERFQlVHTVNHVEwoKCJtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUiLAogICAgICAgICAgICAgICAgICJ2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlOiBFbnRlcmluZy4uLiAgXG4iKSk7CisKKwkvKiBzZXQgZGVmYXVsdCB2YWx1ZSAqLworCSp3cml0ZV9tZXRob2QgPSBOVUxMOworCiAgICAgLyoKICAgICAgKiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbGwgeW91ciBkYXRhIHByb3Blcmx5CiAgICAgICovCkBAIC0xNzAsODAgKzIyNywxMTAgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEU1RBUlRVUDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZzsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkc6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmc7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmcpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZzsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZzsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRE9CSkVDVFNPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c093bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c093bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZE9iamVjdHNMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlRPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnRPd25lcjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudE93bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nRXZlbnRPd25lcjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudE93bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlRPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudE93bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT4KICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5UOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnQ7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPQogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmdFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50OwogCkBAIC0yNTYsNyArMzQzLDcgQEAKIAogCiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiBpbnQKIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtMTYwNywzICsxNjk0LDUgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKaW5kZXggN2FhNmNlYy4uOGYzMzAxMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaApAQCAtMjcsNiArMjcsNyBAQAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUodm9pZCk7CiAgICAgIEZpbmRWYXJNZXRob2QgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXA7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmc7CkBAIC00Miw1ICs0Myw2IEBACiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmdFdmVudE93bmVyOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfTVRFVFJJR0dFUlRIUkVTSE9MRFRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMKaW5kZXggYmNlZGQwNy4uMGY3MWRhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMKQEAgLTYsNyArNiw2IEBACiAgKkZpbGUgTmFtZTpsb29rdXBDdGxUYWJsZS5jCiAgKkZpbGUgRGVzY3JpcHRpb246Um93cyBvZiB0aGUgbG9va3VwQ3RsVGFibGUgTUlCIGFkZCAsIGRlbGV0ZSBhbmQgcmVhZC5Sb3dzIG9mIGxvb2t1cFJlc3VsdHNUYWJsZQogICogICAgICAgICAgICAgIE1JQiBhZGQgYW5kIGRlbGV0ZS4KLSAKICAqCiAgKkN1cnJlbnQgVmVyc2lvbjoxLjAKICAqQXV0aG9yOkNoZW5KaW5nCkBAIC0xNiwzMyArMTUsMzQgQEAKIC8qCiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTElNSVRTX0gKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCiAjaW5jbHVkZSAibG9va3VwQ3RsVGFibGUuaCIKICNpbmNsdWRlICJsb29rdXBSZXN1bHRzVGFibGUuaCIKICNpbmNsdWRlICJoZWFkZXJfY29tcGxleC5oIgogCisjaWZuZGVmIElORVRBRERSRVNTVFlQRV9FTlVNUworI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfRU5VTVMKKworI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfVU5LTk9XTiAgMAorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfSVBWNCAgICAgMQorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfSVBWNiAgICAgMgorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfSVBWNFogICAgMworI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfSVBWNlogICAgNAorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfRE5TICAgICAxNgorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElORVRBRERSRVNTVFlQRV9FTlVNUyAqLworCiAvKgogICpGb3IgZGlzY29udGludWl0eSBjaGVja2luZy4KICAqLwpAQCAtNTEsMjQgKzUxLDQ5IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MiwgMSwgMyB9OwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIGxvb2t1cEN0bFRhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCi0gICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4CiAgICAgICovCi0gICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgM319LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX0xPT0tVUENUTE9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMVElNRSwgICAgICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9MT09LVVBDVExSQywgICAgICAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDd9fSwKLSAgICB7Q09MVU1OX0xPT0tVUENUTFJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgOH19CisgICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTE9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMVElNRSwgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExSQywgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgOH19CiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBsb29rdXBDdGxUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXgKKyAgICAgKi8KKyAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTE9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMVElNRSwgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExSQywgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA4fX0KK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKIC8qCiAgKiBnbG9iYWwgc3RvcmFnZSBvZiBvdXIgZGF0YSwgc2F2ZWQgaW4gYW5kIGNvbmZpZ3VyZWQgYnkgaGVhZGVyX2NvbXBsZXgoKSAKICAqLwogCi0KIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqbG9va3VwQ3RsVGFibGVTdG9yYWdlID0gTlVMTDsKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqbG9va3VwUmVzdWx0c1RhYmxlU3RvcmFnZSA9IE5VTEw7CiAKQEAgLTc2LDcgKzEwMSw2IEBACiBpbnQgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKnRoZWRhdGEsIGxvbmcgdmFsKTsKIGludCBtb2RpZnlfbG9va3VwQ3RsUmMoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKnRoZWRhdGEsIGxvbmcgdmFsKTsKIAotCiB2b2lkCiBpbml0X2xvb2t1cEN0bFRhYmxlKHZvaWQpCiB7CkBAIC0xMDksMTEgKzEzMywxMiBAQAogICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKICAgICBTdG9yYWdlTmV3ID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFRhYmxlX2RhdGEpOwogICAgIGlmIChTdG9yYWdlTmV3ID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk91dCBpbiBtZW1vcnkgaW4gbnNsb29rdXAtbWliL2NyZWF0ZV9sb29rdXBUYWJsZV9kYXRlXG4iKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cCgiIik7CiAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc0xlbiA9IDA7Ci0gICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsT3BlclN0YXR1cyA9IDJsOworICAgIFN0b3JhZ2VOZXctPmxvb2t1cEN0bE9wZXJTdGF0dXMgPSAyTDsKICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUaW1lID0gMDsKICAgICBTdG9yYWdlTmV3LT5zdG9yYWdldHlwZSA9IFNUX05PTlZPTEFUSUxFOwogICAgIHJldHVybiBTdG9yYWdlTmV3OwpAQCAtMTI3LDE2ICsxNTIsMTcgQEAKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwogCi0KICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLCAiYWRkaW5nIGRhdGEuLi4gICIpKTsKICAgICAvKgogICAgICAqIGFkZCB0aGUgaW5kZXggdmFyaWFibGVzIHRvIHRoZSB2YXJiaW5kIGxpc3QsIHdoaWNoIGlzIAogICAgICAqIHVzZWQgYnkgaGVhZGVyX2NvbXBsZXggdG8gaW5kZXggdGhlIGRhdGEgCiAgICAgICovCi0KLQotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOyAgIC8qIGxvb2t1cEN0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLCB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsgICAgIC8qIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorICAgICAgICB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsKIAogCiAgICAgaWYgKGhlYWRlcl9jb21wbGV4X2FkZF9kYXRhKCZsb29rdXBDdGxUYWJsZVN0b3JhZ2UsIHZhcnMsIHRoZWRhdGEpID09CkBAIC0xNTgsMTAgKzE4NCwxNSBAQAogICAgIHAgPSB0aGVkYXRhLT5SZXN1bHRzVGFibGU7CiAgICAgaWYgKHRoZWRhdGEtPlJlc3VsdHNUYWJsZSAhPSBOVUxMKQogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHAtPmxvb2t1cEN0bE93bmVySW5kZXgsIHAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOyAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLCBwLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsIChjaGFyICopICZwLT5sb29rdXBSZXN1bHRzSW5kZXgsIHNpemVvZihwLT5sb29rdXBSZXN1bHRzSW5kZXgpKTsgICAgICAgLyogbG9va3VwUmVzdWx0c0luZGV4ICovCi0KKyAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAoY2hhciAqKSBwLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgIHAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgIChjaGFyICopIHAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAoY2hhciAqKSAmcC0+bG9va3VwUmVzdWx0c0luZGV4LAorICAgICAgICAgICAgICAgIHNpemVvZihwLT5sb29rdXBSZXN1bHRzSW5kZXgpKTsKIAogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwogICAgICAgICAgICAgLyoKQEAgLTE3OSw3ICsyMTAsNiBAQAogICAgICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgIH0gd2hpbGUgKHAgIT0gTlVMTCk7CiAKLQogICAgIERFQlVHTVNHVEwoKCJsb29rdXBSZXN1bHRzVGFibGUiLCAiZG9uZS5cbiIpKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQpAQCAtMjE2LDggKzI0Niw3IEBACiBwYXJzZV9sb29rdXBDdGxUYWJsZShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKICAgICBzaXplX3QgICAgICAgICAgdG1waW50OwotICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0KLSAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFRhYmxlX2RhdGEpOworICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFRhYmxlX2RhdGEpOwogCiAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgInBhcnNpbmcgY29uZmlnLi4uICAiKSk7CiAKQEAgLTMwMCwxMCArMzI5LDggQEAKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcDsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXg7CiAKLQogICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJzdG9yaW5nIGRhdGEuLi4gICIpKTsKIAotCiAgICAgZm9yIChoY2luZGV4ID0gbG9va3VwQ3RsVGFibGVTdG9yYWdlOyBoY2luZGV4ICE9IE5VTEw7CiAgICAgICAgICBoY2luZGV4ID0gaGNpbmRleC0+bmV4dCkgewogICAgICAgICBTdG9yYWdlVG1wID0gKHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICopIGhjaW5kZXgtPmRhdGE7CkBAIC0zMTMsNyArMzQwLDYgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAibG9va3VwQ3RsVGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotCiAgICAgICAgICAgICBjcHRyID0KICAgICAgICAgICAgICAgICByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKQEAgLTM1MCw5ICszNzYsNiBAQAogICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX0lOVEVHRVIsIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+bG9va3VwQ3RsUm93U3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcGludCk7Ci0KLQotCiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzQsOSArMzk3LDggQEAKICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQogewotCi0KICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CisgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogCiAgICAgLyoKICAgICAgKiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbGwgeW91ciBkYXRhIHByb3Blcmx5CkBAIC0zOTMsMzggKzQxNSwzNyBAQAogICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuCiAgICAgICovCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLQotCiAgICAgY2FzZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGU7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2xvb2t1cEN0bFRhcmdldEFkZHJlc3M7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IChTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzTGVuKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzOwogCiAgICAgY2FzZSBDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUzoKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsT3BlclN0YXR1cyk7Ci0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxPcGVyU3RhdHVzOwogCiAgICAgY2FzZSBDT0xVTU5fTE9PS1VQQ1RMVElNRToKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGltZSk7Ci0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxUaW1lOwogCiAgICAgY2FzZSBDT0xVTU5fTE9PS1VQQ1RMUkM6CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFJjKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFJjOwogCiAgICAgY2FzZSBDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2xvb2t1cEN0bFJvd1N0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFJvd1N0YXR1cyk7Ci0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxSb3dTdGF0dXM7CiAKICAgICBkZWZhdWx0OgpAQCAtNDM0LDI4ICs0NTUsNjcgQEAKIH0KIAogCitzdGF0aWMgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICoKK2FkZF9yZXN1bHQoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKml0ZW0sIGludCBpbmRleCwKKyAgICAgICAgaW50IGlhdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKQoreworICAgIHN0cnVjdCBsb29rdXBSZXN1bHRzVGFibGVfZGF0YSAqdGVtcDsKKyAgICB0ZW1wID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKKyAgICBpZiAodGVtcCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi9ydW5fbG9va3VwXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IGluZGV4OworICAgIHRlbXAtPm5leHQgPSBOVUxMOworCisgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9IG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7CisgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiT3V0IG9mIG1lbW9yeSBpbiBuc2xvb2t1cC1taWIvcnVuX2xvb2t1cFxuIik7CisgICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOworICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPSAnXDAnOworICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPSBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOworCisgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9IG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7CisgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiT3V0IG9mIG1lbW9yeSBpbiBuc2xvb2t1cC1taWIvcnVuX2xvb2t1cFxuIik7CisgICAgICAgIGZyZWUodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCk7CisgICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOworICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPSAnXDAnOworICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPSBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOworCisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gaWF0eXBlOworICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzID0gbWFsbG9jKGRhdGFfbGVuICsgMSk7CisgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBkYXRhLCBkYXRhX2xlbik7CisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NbZGF0YV9sZW5dID0gJ1wwJzsKKyAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9IGRhdGFfbGVuOworICAgIGlmICghaXRlbS0+UmVzdWx0c1RhYmxlKQorICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOworCisgICAgcmV0dXJuIHRlbXA7Cit9CisKIHZvaWQKIHJ1bl9sb29rdXAoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKml0ZW0pCiB7Ci0KICAgICBsb25nICAgICAgICAgICAgYWRkcmVzc1R5cGU7CiAgICAgY2hhciAgICAgICAgICAgKmFkZHJlc3MgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICBhZGRyZXNzbGVuOwogICAgIHN0cnVjdCBsb29rdXBSZXN1bHRzVGFibGVfZGF0YSAqY3VycmVudCA9IE5VTEw7CiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICp0ZW1wID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgaSA9IDAsIG4gPSAxLCB0ID0gMDsKLQotICAgIC8qIGZvciBpcHY0LGlwdjYgKi8KLSAgICB1bnNpZ25lZCBpbnQgICAgYWRkcl9pbiwgYWRkcl9pbjY7Ci0gICAgc3RydWN0IGhvc3RlbnQgKmxvb2t1cCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIGkgPSAwLCBuID0gMTsKIAogICAgIHN0cnVjdCB0aW1ldmFsICB0cHN0YXJ0LCB0cGVuZDsKLSAgICB1bnNpZ25lZCBsb25nICAgdGltZXVzZSwgdGltZXVzZTQsIHRpbWV1c2U2OwotCi0gICAgLyogZm9yIGRucyAqLwotCi0gICAgc3RydWN0IGluX2FkZHIgIGE7Ci0gICAgc3RydWN0IGluNl9hZGRyIGE2OworICAgIHVuc2lnbmVkIGxvbmcgICB0aW1ldXNlLCB0aW1ldXNlNCA9IDAsIHRpbWV1c2U2ID0gMDsKIAogICAgIGlmIChpdGVtID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2Niw0NTQgKzUyNiwyNzUgQEAKICAgICBtZW1jcHkoYWRkcmVzcywgaXRlbS0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzcywgYWRkcmVzc2xlbiArIDEpOwogICAgIGFkZHJlc3NbYWRkcmVzc2xlbl0gPSAnXDAnOwogCi0gICAgaWYgKGFkZHJlc3NUeXBlID09IDEpIHsKLSAgICAgICAgYWRkcl9pbiA9IGluZXRfYWRkcihhZGRyZXNzKTsKLSAgICAgICAgaWYgKGFkZHJfaW4gPT0gMHhmZmZmZmZmZgotICAgICAgICAgICAgJiYgc3RyY21wKGFkZHJlc3MsICIyNTUuMjU1LjI1NS4yNTUiKSAhPSAwKSB7CisgICAgaWYgKGFkZHJlc3NUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KSB7CisgICAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHJfaW47CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpsb29rdXA7CisKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhZGRyZXNzLCAmYWRkcl9pbikgIT0gMSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsICJJbnZhbGlkIGFyZ3VtZW50OiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCA5OSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwc3RhcnQsIE5VTEwpOwotICAgICAgICBsb29rdXAgPSBnZXRob3N0YnlhZGRyKChjaGFyICopICZhZGRyX2luLCA0LCBBRl9JTkVUKTsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0cGVuZCwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBzdGFydCk7CisgICAgICAgIGxvb2t1cCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmYWRkcl9pbiwgc2l6ZW9mKGFkZHJfaW4pLCBBRl9JTkVUKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cGVuZCk7CiAgICAgICAgIHRpbWV1c2UgPSAxMDAwMDAwICogKHRwZW5kLnR2X3NlYyAtIHRwc3RhcnQudHZfc2VjKSArCiAgICAgICAgICAgICB0cGVuZC50dl91c2VjIC0gdHBzdGFydC50dl91c2VjOwogICAgICAgICB0aW1ldXNlIC89IDEwMDA7CiAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxUaW1lKGl0ZW0sIHRpbWV1c2UpOwotICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhpdGVtLCAzbCk7CisgICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNMKTsKIAogICAgICAgICBpZiAobG9va3VwID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgbmV0d29yayBob3N0IGVudHJ5IGZvciBpcHY0IGFkZHJlc3M6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOwotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDFsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwbCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMEwpOwogICAgICAgICAgICAgaWYgKGxvb2t1cC0+aF9uYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAxNjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9va3VwLT5oX25hbWUpICsgMSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBsb29rdXAtPmhfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihsb29rdXAtPmhfbmFtZSldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9IHN0cmxlbihsb29rdXAtPmhfbmFtZSk7Ci0gICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfbmFtZSwgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSk7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSB7Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTY7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSArIDEpOwotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgbG9va3VwLT5oX2FsaWFzZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPQotICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pOworICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9ETlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwLT5oX2FsaWFzZXNbaV0sIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSkpOwogICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGkgPSBpICsgMTsKICAgICAgICAgICAgICAgICBuID0gbiArIDE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gTlVMTDsKLQogICAgICAgICB9CiAKLQogICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgICAgICBpZiAobG9va3VwUmVzdWx0c1RhYmxlX2FkZChpdGVtKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKLQogICAgICAgICBTTk1QX0ZSRUUoYWRkcmVzcyk7Ci0gICAgICAgIGFkZHJlc3MgPSBOVUxMOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZWxzZSBpZiAoYWRkcmVzc1R5cGUgPT0gMTYpIHsKKyAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfRE5TKSB7CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpsb29rdXA7CisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzOworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKmFpczsKKyAgICAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzID0geyAwLCBBRl9JTkVUNiwgU09DS19ER1JBTSB9OworI2VuZGlmCiAKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0cHN0YXJ0LCBOVUxMKTsKLSAgICAgICAgbG9va3VwID0gZ2V0aG9zdGJ5bmFtZShhZGRyZXNzKTsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0cGVuZCwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBzdGFydCk7CisgICAgICAgIGxvb2t1cCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZShhZGRyZXNzKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cGVuZCk7CiAgICAgICAgIHRpbWV1c2U0ID0gMTAwMDAwMCAqICh0cGVuZC50dl9zZWMgLSB0cHN0YXJ0LnR2X3NlYykgKwogICAgICAgICAgICAgdHBlbmQudHZfdXNlYyAtIHRwc3RhcnQudHZfdXNlYzsKLSAgICAgICAgdGltZXVzZTQgLz0gMTAwMDsKICAgICAgICAgaWYgKGxvb2t1cCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhIG5ldHdvcmsgaG9zdCBlbnRyeSBmb3IgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKSk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgaF9lcnJubyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoKmxvb2t1cC0+aF9hZGRyX2xpc3QpIHsKLSAgICAgICAgICAgICAgICBiY29weSgqbG9va3VwLT5oX2FkZHJfbGlzdCsrLCAoY2hhciAqKSAmYSwgc2l6ZW9mKGEpKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rdXAtPmhfYWRkcl9saXN0W2ldKSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZbNjRdOworICAgICAgICAgICAgICAgIGludCBidWZsZW47CiAKLSAgICAgICAgICAgICAgICB0ZW1wID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgaW5ldF9udG9wKGxvb2t1cC0+aF9hZGRydHlwZSwgbG9va3VwLT5oX2FkZHJfbGlzdFtpXSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICAgICAgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgc3dpdGNoIChsb29rdXAtPmhfYWRkcnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY0LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY2LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuc2xvb2t1cC1taWIvcnVuX2xvb2t1cDogVW5rbm93biBhZGRyZXNzIHR5cGUgJWRcbiIsIGxvb2t1cC0+aF9hZGRydHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9VTktOT1dOLCAiIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJBZGRpbmcgJWQgJXNcbiIsIG4sIGJ1ZikpOwogCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDE7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGluZXRfbnRvYShhKSkgKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGluZXRfbnRvYShhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGluZXRfbnRvYShhKSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tzdHJsZW4oaW5ldF9udG9hKGEpKV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0gc3RybGVuKGluZXRfbnRvYShhKSk7CiAgICAgICAgICAgICAgICAgaWYgKG4gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKLQorICAgICAgICAgICAgICAgIGkgPSBpICsgMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSBOVUxMOwotICAgICAgICAgICAgdCA9IG47Ci0KICAgICAgICAgfQogCi0gICAgICAgIHN0cnVjdCBob3N0ZW50ICpocDsKLSAgICAgICAgY2hhciAgICAgICAgICAgIHBhWzY0XTsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmhvc3RuYW1lID0gTlVMTDsKLQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwc3RhcnQsIE5VTEwpOwotICAgICAgICBocCA9IGdldGhvc3RieW5hbWUyKGFkZHJlc3MsIEFGX0lORVQ2KTsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0cGVuZCwgTlVMTCk7CisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwc3RhcnQpOworICAgICAgICByZXMgPSBuZXRzbm1wX2dldGFkZHJpbmZvKGFkZHJlc3MsIE5VTEwsICZoaW50cywgJmFpcyk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBlbmQpOwogICAgICAgICB0aW1ldXNlNiA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKICAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7Ci0gICAgICAgIHRpbWV1c2U2IC89IDEwMDA7CiAKLSAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhIGlwdjYgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCByZXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKCpocC0+aF9hZGRyX2xpc3QpIHsKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKChjYWRkcl90KSAmIGE2LCAqaHAtPmhfYWRkcl9saXN0KyssIDE2KTsKLSAgICAgICAgICAgICAgICBob3N0bmFtZSA9IChjaGFyICopIGhwLT5oX25hbWU7CisgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKmFpcCA9IGFpczsKKyAgICAgICAgICAgIHdoaWxlIChhaXApIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgICAgICAgaW50IGJ1ZmxlbjsKIAotICAgICAgICAgICAgICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFpcC0+YWlfZmFtaWx5KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoYWlwLT5haV9mYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopYWlwLT5haV9hZGRyKS0+c2luX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY0LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChhaXAtPmFpX2ZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWlwLT5haV9hZGRyKS0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmxlbiA9IHN0cmxlbihidWYpOworICAgICAgICAgICAgICAgICAgICB0ZW1wID0gYWRkX3Jlc3VsdChpdGVtLCBuLCBJTkVUQUREUkVTU1RZUEVfSVBWNiwgYnVmLCBidWZsZW4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibnNsb29rdXAtbWliL3J1bl9sb29rdXA6IFVua25vd24gYWRkcmVzcyB0eXBlICVkXG4iLCBhaXAtPmFpX2ZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9VTktOT1dOLCAiIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJBZGRpbmcgJWQgJXNcbiIsIG4sIGJ1ZikpOwogCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAyOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgbWFsbG9jKHN0cmxlbihpbmV0X250b3AoQUZfSU5FVDYsICZhNiwgcGEsIDY0KSkgKyAxKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oaW5ldF9udG9wKEFGX0lORVQ2LCAmYTYsIHBhLCA2NCkpICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+Ci0gICAgICAgICAgICAgICAgICAgIGxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5ldF9udG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfSU5FVDYsICZhNiwgcGEsIDY0KSldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgICAgIHN0cmxlbihpbmV0X250b3AoQUZfSU5FVDYsICZhNiwgcGEsIDY0KSk7CiAgICAgICAgICAgICAgICAgaWYgKG4gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKLQorICAgICAgICAgICAgICAgIGFpcCA9IGFpcC0+YWlfbmV4dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSBOVUxMOworICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGFpcyk7CiAgICAgICAgIH0KKyNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRTIKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gZ2V0aG9zdGJ5bmFtZTIoYWRkcmVzcywgQUZfSU5FVDYpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKKyAgICAgICAgdGltZXVzZTYgPSAxMDAwMDAwICogKHRwZW5kLnR2X3NlYyAtIHRwc3RhcnQudHZfc2VjKSArCisgICAgICAgICAgICB0cGVuZC50dl91c2VjIC0gdHBzdGFydC50dl91c2VjOworCisgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYSBpcHY2IG5ldHdvcmsgaG9zdCBlbnRyeSBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKSk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgaF9lcnJubyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChsb29rdXAtPmhfYWRkcl9saXN0W2ldKSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZbNjRdOworICAgICAgICAgICAgICAgIGludCBidWZsZW47CisKKyAgICAgICAgICAgICAgICBpbmV0X250b3AobG9va3VwLT5oX2FkZHJ0eXBlLCBsb29rdXAtPmhfYWRkcl9saXN0W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICAgICAgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgc3dpdGNoIChsb29rdXAtPmhfYWRkcnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY0LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY2LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuc2xvb2t1cC1taWIvcnVuX2xvb2t1cDogVW5rbm93biBhZGRyZXNzIHR5cGUgJWRcbiIsIGxvb2t1cC0+aF9hZGRydHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9VTktOT1dOLCAiIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLCAiQWRkaW5nICVkICVzXG4iLCBuLCBidWYpKTsKKworICAgICAgICAgICAgICAgIGlmIChuID09IDEpCisgICAgICAgICAgICAgICAgICAgIGl0ZW0tPlJlc3VsdHNUYWJsZSA9IHRlbXA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gdGVtcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcDsKKyAgICAgICAgICAgICAgICBuID0gbiArIDE7CisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICB0aW1ldXNlID0gdGltZXVzZTQgKyB0aW1ldXNlNjsKKyAgICAgICAgdGltZXVzZSAvPSAxMDAwOwogICAgICAgICBtb2RpZnlfbG9va3VwQ3RsVGltZShpdGVtLCB0aW1ldXNlKTsKLSAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoaXRlbSwgM2wpOworICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhpdGVtLCAzTCk7CiAKICAgICAgICAgaWYgKGl0ZW0tPlJlc3VsdHNUYWJsZSAhPSBOVUxMKSB7Ci0KLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwbCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMEwpOwogICAgICAgICAgICAgaWYgKGxvb2t1cFJlc3VsdHNUYWJsZV9hZGQoaXRlbSkgIT0gU05NUEVSUl9TVUNDRVNTKQogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBSZXN1bHRzVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFuIGVudHJ5IGVycm9yXG4iKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMWwpOwogICAgICAgICB9CiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7Ci0KICAgICAgICAgcmV0dXJuOwotCiAgICAgfQogCisgICAgZWxzZSBpZiAoYWRkcmVzc1R5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjYpIHsKKyAgICAgICAgc3RydWN0IGluNl9hZGRyIGFkZHJfaW42OworICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqbG9va3VwOwogCi0gICAgZWxzZSBpZiAoYWRkcmVzc1R5cGUgPT0gMikgewogICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhZGRyZXNzLCAmYWRkcl9pbjYpID09IDEpCiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLCAic3VjY2VzcyEgXG4iKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJlcnJvciEgXG4iKSk7CiAKLQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwc3RhcnQsIE5VTEwpOwotICAgICAgICBsb29rdXAgPSBnZXRob3N0YnlhZGRyKChjaGFyICopICZhZGRyX2luNiwgMTYsIEFGX0lORVQ2KTsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0cGVuZCwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBzdGFydCk7CisgICAgICAgIGxvb2t1cCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmYWRkcl9pbjYsIHNpemVvZihhZGRyX2luNiksIEFGX0lORVQ2KTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cGVuZCk7CiAgICAgICAgIHRpbWV1c2UgPSAxMDAwMDAwICogKHRwZW5kLnR2X3NlYyAtIHRwc3RhcnQudHZfc2VjKSArCiAgICAgICAgICAgICB0cGVuZC50dl91c2VjIC0gdHBzdGFydC50dl91c2VjOwogICAgICAgICB0aW1ldXNlIC89IDEwMDA7CiAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxUaW1lKGl0ZW0sIHRpbWV1c2UpOwotICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhpdGVtLCAzbCk7CisgICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNMKTsKIAogICAgICAgICBpZiAobG9va3VwID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAxbCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgaF9lcnJubyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMGwpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDBMKTsKICAgICAgICAgICAgIGlmIChsb29rdXAtPmhfbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXAgPQotICAgICAgICAgICAgICAgICAgICBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0luZGV4ID0gbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4W2l0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4TGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lW2l0ZW0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTY7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGxvb2t1cC0+aF9uYW1lKSArIDEpOwotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgbG9va3VwLT5oX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfbmFtZSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tzdHJsZW4obG9va3VwLT5oX25hbWUpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPSBzdHJsZW4obG9va3VwLT5oX25hbWUpOwotICAgICAgICAgICAgICAgIGl0ZW0tPlJlc3VsdHNUYWJsZSA9IHRlbXA7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9ETlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwLT5oX25hbWUsIHN0cmxlbihsb29rdXAtPmhfbmFtZSkpOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKLQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIHdoaWxlIChsb29rdXAtPmhfYWxpYXNlc1tpXSkgewotICAgICAgICAgICAgICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDE2OwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSkgKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGxvb2t1cC0+aF9hbGlhc2VzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3Nbc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKV0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0KLSAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfYWxpYXNlc1tpXSwgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSk7CiAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgaSA9IGkgKyAxOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKLQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY3VycmVudCA9IE5VTEw7Ci0KICAgICAgICAgfQogCi0KICAgICAgICAgaWYgKGl0ZW0tPlJlc3VsdHNUYWJsZSAhPSBOVUxMKQogICAgICAgICAgICAgaWYgKGxvb2t1cFJlc3VsdHNUYWJsZV9hZGQoaXRlbSkgIT0gU05NUEVSUl9TVUNDRVNTKQogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBSZXN1bHRzVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFuIGVudHJ5IGVycm9yXG4iKSk7CiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewogICAgICAgICBTTk1QX0ZSRUUoYWRkcmVzcyk7Ci0gICAgICAgIGFkZHJlc3MgPSBOVUxMOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtOTI1LDggKzgwNiwxMSBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOwogCiAKICAgICBpZiAoKFN0b3JhZ2VUbXAgPQpAQCAtOTUwLDggKzgzNCwxMSBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOwogCiAKICAgICBpZiAoKFN0b3JhZ2VUbXAgPQpAQCAtOTc1LDggKzg2MiwxMSBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOwogCiAKICAgICBpZiAoKFN0b3JhZ2VUbXAgPQpAQCAtMTAwMyw5ICs4OTMsMTIgQEAKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOyAgIC8qIGxvb2t1cEN0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLCB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsgICAgIC8qIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgKi8KLSAgICBiemVybyhuZXdvaWQsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKIAogCkBAIC0xMDMyLDYgKzkyNSw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVfbG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0xMDY5LDMyICs5NjMsMjggQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBSRVNFUlZFMjoKICAgICAgICAgLyoKICAgICAgICAgICogbWVtb3J5IHJlc2V2ZXJhdGlvbiwgZmluYWwgcHJlcGFyYXRpb24uLi4gCiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBGUkVFOgogICAgICAgICAvKgogICAgICAgICAgKiBSZWxlYXNlIGFueSByZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgQUNUSU9OOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgdmFyaWFibGUgaGFzIGJlZW4gc3RvcmVkIGluIG9iamlkIGZvcgogICAgICAgICAgKiB5b3UgdG8gdXNlLCBhbmQgeW91IGhhdmUganVzdCBiZWVuIGFza2VkIHRvIGRvIHNvbWV0aGluZyB3aXRoCi0gICAgICAgICAqIGl0LiAgTm90ZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBtdXN0IGJlIHJldmVyc2FibGUgaW4gdGhlIFVORE8gY2FzZSAKKyAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbiB0aGUgVU5ETyBjYXNlCiAgICAgICAgICAqLwogICAgICAgICB0bXB2YXIgPSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKICAgICAgICAgU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSAqKChsb25nICopIHZhcl92YWwpOwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBVTkRPOgogICAgICAgICAvKgogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKQEAgLTExMDIsMTIgKzk5MiwxNSBAQAogICAgICAgICBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSA9IHRtcHZhcjsKICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgQ09NTUlUOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTExNTAsMzcgKzEwNDMsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBsb29rdXBDdGxUYXJnZXRBZGRyZXNzIG5vdCBBU05fT0NURVRfU1RSXG4iKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KLQogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBSRVNFUlZFMjoKICAgICAgICAgLyoKICAgICAgICAgICogbWVtb3J5IHJlc2V2ZXJhdGlvbiwgZmluYWwgcHJlcGFyYXRpb24uLi4gCiAgICAgICAgICAqLwotCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIEZSRUU6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgCiAgICAgICAgICAqLwotCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIEFDVElPTjoKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIHZhcmlhYmxlIGhhcyBiZWVuIHN0b3JlZCBpbiBsb25nX3JldCBmb3IKICAgICAgICAgICogeW91IHRvIHVzZSwgYW5kIHlvdSBoYXZlIGp1c3QgYmVlbiBhc2tlZCB0byBkbyBzb21ldGhpbmcgd2l0aAotICAgICAgICAgKiBpdC4gIE5vdGUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgbXVzdCBiZSByZXZlcnNhYmxlIGluIHRoZSBVTkRPIGNhc2UgCisgICAgICAgICAqIGl0LiAgTm90ZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBtdXN0IGJlIHJldmVyc2FibGUgaW4gdGhlIFVORE8gY2FzZQogICAgICAgICAgKi8KICAgICAgICAgdG1wdmFyID0gU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzczsKICAgICAgICAgdG1wbGVuID0gU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc0xlbjsKIAogICAgICAgICBpZiAoKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3MgPQogICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyh2YXJfdmFsX2xlbiArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiT3V0IG9mIG1lbW9yeSBpbiBuc2xvb2t1cC1taWIvd3JpdGVfbG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1xuIik7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgICAgIG1lbWNweShTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzLCB2YXJfdmFsLCB2YXJfdmFsX2xlbik7CkBAIC0xMTg5LDcgKzEwNzcsNiBAQAogCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFVORE86CiAgICAgICAgIC8qCiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIApAQCAtMTIwMSw3ICsxMDg4LDYgQEAKIAogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBDT01NSVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQpAQCAtMTIxMSw2ICsxMDk3LDkgQEAKICAgICAgICAgZnJlZSh0bXB2YXIpOwogICAgICAgICB0bXB2YXIgPSBOVUxMOwogCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTEyMTgsOSArMTEwNyw2IEBACiAKIAogCi0KLQotCiBpbnQKIHdyaXRlX2xvb2t1cEN0bFJvd1N0YXR1cyhpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0xMjI5LDcgKzExMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7CiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwotICAgIHN0YXRpYyBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZU5ldywgKlN0b3JhZ2VEZWwgPSBOVUxMOworICAgIHN0YXRpYyBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZU5ldyA9IE5VTEwsICpTdG9yYWdlRGVsID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgbmV3bGVuID0KICAgICAgICAgbmFtZV9sZW4gLSAoc2l6ZW9mKGxvb2t1cEN0bFRhYmxlX3ZhcmlhYmxlc19vaWQpIC8gc2l6ZW9mKG9pZCkgKwogICAgICAgICAgICAgICAgICAgICAzIC0gMSk7CkBAIC0xMjc2LDcgKzExNjIsNiBAQAogICAgICAgICAgICAgICogZGl0Y2ggaWxsZWdhbCB2YWx1ZXMgbm93IAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoc2V0X3ZhbHVlID09IFJTX0FDVElWRSB8fCBzZXRfdmFsdWUgPT0gUlNfTk9USU5TRVJWSUNFKSB7Ci0KICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CiAgICAgICAgICAgICB9CiAKQEAgLTEzNzgsNyArMTI2Myw3IEBACiAgICAgICAgICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IAogICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIFN0b3JhZ2VOZXctPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlID0gMTsgLyogaXB2NCAqLworICAgICAgICAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKIAogICAgICAgICAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsUm93U3RhdHVzID0gc2V0X3ZhbHVlOwogCkBAIC0xMzg5LDEzICsxMjc0LDggQEAKICAgICAgICAgICAgICAqIFhYWDogZnJlZSwgemVybyB2YXJzLCBubyBsb25nZXIgbmVlZGVkPyAKICAgICAgICAgICAgICAqLwogICAgICAgICB9Ci0KLQogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgRlJFRToKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMgCkBAIC0xNDA1LDkgKzEyODUsNiBAQAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CiAKLQotCi0KICAgICBjYXNlIEFDVElPTjoKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIHZhcmlhYmxlIGhhcyBiZWVuIHN0b3JlZCBpbiBzZXRfdmFsdWUgZm9yIHlvdSB0bwpAQCAtMTQxNSw4ICsxMjkyLDYgQEAKICAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbgogICAgICAgICAgKiB0aGUgVU5ETyBjYXNlIAogICAgICAgICAgKi8KLQotCiAgICAgICAgIGlmIChTdG9yYWdlVG1wID09IE5VTEwpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiByb3cgY3JlYXRpb24sIHNvIGFkZCBpdCAKQEAgLTE0MjUsMTEgKzEzMDAsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXcgIT0gTlVMTCkKLSNpZiAxCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzIGVudGVyaW5nIG5ldz0lZC4uLiAgXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbikpOwotI2VuZGlmCiAgICAgICAgICAgICBsb29rdXBDdGxUYWJsZV9hZGQoU3RvcmFnZU5ldyk7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogWFhYOiBhY2ssIGFuZCBpZiBpdCBpcyBOVUxMPyAKQEAgLTE0NjEsOSArMTMzNCw2IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLQotCi0KICAgICBjYXNlIFVORE86CiAgICAgICAgIC8qCiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIApAQCAtMTQ5NSw5ICsxMzY1LDYgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgQ09NTUlUOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKQEAgLTE1MTEsMTUgKzEzNzgsOSBAQAogCiAgICAgICAgIGlmIChTdG9yYWdlRGVsICE9IE5VTEwpIHsKICAgICAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5sb29rdXBDdGxPd25lckluZGV4KTsKLSAgICAgICAgICAgIFN0b3JhZ2VEZWwtPmxvb2t1cEN0bE93bmVySW5kZXggPSBOVUxMOwogICAgICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VEZWwtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgICAgU3RvcmFnZURlbC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9IE5VTEw7CiAgICAgICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzcyk7Ci0gICAgICAgICAgICBTdG9yYWdlRGVsLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzID0gTlVMTDsKICAgICAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlRGVsKTsKLSAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOwotCi0gICAgICAgICAgICBTdG9yYWdlRGVsID0gMDsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFg6IGZyZWUgaXQsIGl0cyBkZWFkIAogICAgICAgICAgICAgICovCkBAIC0xNTM1LDE4ICsxMzk2LDIwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKFN0b3JhZ2VUbXAgJiYgU3RvcmFnZVRtcC0+bG9va3VwQ3RsUm93U3RhdHVzID09IFJTX0FDVElWRSkgewotI2lmIDEKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzIGVudGVyaW5nIHJ1bmJlZm9yZT0lbGQuLi4gIFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlKSk7CiAKLSNlbmRpZgotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoU3RvcmFnZVRtcCwgMmwpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoU3RvcmFnZVRtcCwgMkwpOwogICAgICAgICAgICAgcnVuX2xvb2t1cCgoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKikgU3RvcmFnZVRtcCk7CiAKICAgICAgICAgfQogCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oCmluZGV4IGY3M2IwNjIuLjA4NWIyNWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oCkBAIC0yNCw5ICsyNCw4IEBACiAgICAgLyoKICAgICAgKiBvdXIgc3RvcmFnZSBzdHJ1Y3R1cmUocykgCiAgICAgICovCisKIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhIHsKLQotCiAgICAgY2hhciAgICAgICAgICAgKmxvb2t1cEN0bE93bmVySW5kZXg7ICAgICAgICAvKiBzdHJpbmcgKi8KICAgICBzaXplX3QgICAgICAgICAgbG9va3VwQ3RsT3duZXJJbmRleExlbjsKICAgICBjaGFyICAgICAgICAgICAqbG9va3VwQ3RsT3BlcmF0aW9uTmFtZTsgICAgIC8qIHN0cmluZyAqLwpAQCAtNDEsMTAgKzQwLDEwIEBACiAgICAgaW50ICAgICAgICAgICAgIHN0b3JhZ2V0eXBlOwogCiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICpSZXN1bHRzVGFibGU7Ci0KLQogfTsKLXR5cGVkZWYgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhIHsKKworCitzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgewogICAgIHN0cnVjdCBsb29rdXBSZXN1bHRzVGFibGVfZGF0YSAqbmV4dDsKICAgICBjaGFyICAgICAgICAgICAqbG9va3VwQ3RsT3duZXJJbmRleDsgICAgICAgIC8qIHN0cmluZyAqLwogICAgIHNpemVfdCAgICAgICAgICBsb29rdXBDdGxPd25lckluZGV4TGVuOwpAQCAtNTUsNyArNTQsNyBAQAogICAgIGNoYXIgICAgICAgICAgICpsb29rdXBSZXN1bHRzQWRkcmVzczsKICAgICBzaXplX3QgICAgICAgICAgbG9va3VwUmVzdWx0c0FkZHJlc3NMZW47CiAgICAgaW50ICAgICAgICAgICAgIHN0b3JhZ2V0eXBlOwotfSByZXN1bHRzSW5zOworfTsKIAogLyoKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKQEAgLTY1LDIzICs2NCwyNCBAQAogdm9pZCAgICAgICAgICAgIHBhcnNlX2xvb2t1cEN0bFRhYmxlKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIFNOTVBDYWxsYmFjayAgICBzdG9yZV9sb29rdXBDdGxUYWJsZTsKIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKIFdyaXRlTWV0aG9kICAgICB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKIFdyaXRlTWV0aG9kICAgICB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzOwogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFJvd1N0YXR1czsKIAogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFJvd1N0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBsb29rdXBDdGxUYWJsZSAKICAqLwogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMT1dORVJJTkRFWAkJMQogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMT1BFUkFUSU9OTkFNRQkJMgotI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEUJCTMKKyNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFCTMKICNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1MJCTQKICNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTE9QRVJTVEFUVVMJCTUKLSNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFRJTUUJCTYKLSNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFJDCQk3CisjZGVmaW5lIENPTFVNTl9MT09LVVBDVExUSU1FCQkJNgorI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMUkMJCQk3CiAjZGVmaW5lIENPTFVNTl9MT09LVVBDVExST1dTVEFUVVMJCTgKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMT09LVVBNSUJfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jCmluZGV4IGM1ZmQyYjcuLmQ2YTkzN2MgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMKQEAgLTE0LDIwICsxNCw2IEBACiAvKgogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0xJTUlUU19ICi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYKLQotCi0KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CkBAIC00Miw4ICsyOCwxMCBAQAogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODIsIDEsIDQgfTsKIAogc3RydWN0IHZhcmlhYmxlMiBsb29rdXBSZXN1bHRzVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9MT09LVVBSRVNVTFRTQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvb2t1cFJlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319CisgICAge0NPTFVNTl9MT09LVVBSRVNVTFRTQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cFJlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319CiB9OwogCiAvKgpAQCAtMjM3LDkgKzIyNSwxNSBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0ID0gTlVMTDsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsIChjaGFyICopICZ0aGVkYXRhLT5sb29rdXBSZXN1bHRzSW5kZXgsIHNpemVvZih0aGVkYXRhLT5sb29rdXBSZXN1bHRzSW5kZXgpKTsgICAvKiBsb29rdXBSZXN1bHRzSW5kZXggKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgCQkoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LAorCQl0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgCQkoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorCQl0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwKKyAgICAJCShjaGFyICopICZ0aGVkYXRhLT5sb29rdXBSZXN1bHRzSW5kZXgsCisJCXNpemVvZih0aGVkYXRhLT5sb29rdXBSZXN1bHRzSW5kZXgpKTsKIAogICAgIC8qCiAgICAgICogWFhYOiBmaWxsIGluIGRlZmF1bHQgcm93IHZhbHVlcyBoZXJlIGludG8gU3RvcmFnZU5ldyAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMKaW5kZXggMWUxMDJhMC4uODdiMDllZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMKQEAgLTU1LDYgKzU1LDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBpcHY2X2FkZHJfYW55KHN0cnVjdCBpbjZfYWRkciAqKTsKIHN0YXRpYyBjaGFyICAgICpwcl9hZGRyKHN0cnVjdCBpbjZfYWRkciAqLCBpbnQpOwogc3RhdGljIGNoYXIgICAgKnByX2FkZHJfbihzdHJ1Y3QgaW42X2FkZHIgKik7Cit2b2lkIHBpbmdDdGxUYWJsZV9jbGVhbmVyKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqdGhlc3R1ZmYpOwogCiAvKgogICpwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZDoKQEAgLTY0LDYgKzY1LDcgQEAKIAogb2lkICAgICAgICAgICAgIHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkW10gPQogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODAsIDEsIDIgfTsKK3N0YXRpYyBjb25zdCBpbnQgcGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWRfbGVuID0gc2l6ZW9mKHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkKS9zaXplb2YocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWRbMF0pOwogCiAvKiB0cmFwICovCiBvaWQgICAgICAgICAgICAgcGluZ1Byb2JlRmFpbGVkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDgwLCAwLCAxIH07CkBAIC03NSwyNyArNzcsNDggQEAKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCi0gICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMREFUQVNJWkUsICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDV9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUSU1FT1VULCAgICAgICAgICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtDT0xVTU5fUElOR0NUTFBST0JFQ09VTlQsICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMQURNSU5TVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMREFUQUZJTEwsICAgICAgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMRlJFUVVFTkNZLCAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMH19LAotICAgIHtDT0xVTU5fUElOR0NUTE1BWFJPV1MsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTF9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExTVE9SQUdFVFlQRSwgICAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEyfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMVFJBUEdFTkVSQVRJT04sICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxM319LAotICAgIHtDT0xVTU5fUElOR0NUTFRSQVBQUk9CRUZBSUxVUkVGSUxURVIsIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTR9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUUkFQVEVTVEZBSUxVUkVGSUxURVIsICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE1fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMVFlQRSwgICAgICAgICAgICBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNn19LAotICAgIHtDT0xVTU5fUElOR0NUTERFU0NSLCAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTd9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExTT1VSQ0VBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE4fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMU09VUkNFQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxOX19LAotICAgIHtDT0xVTU5fUElOR0NUTElGSU5ERVgsICAgICAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjB9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExCWVBBU1NST1VURVRBQkxFLCAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIxfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMRFNGSUVMRCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMn19LAotICAgIHtDT0xVTU5fUElOR0NUTFJPV1NUQVRVUywgICAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjN9fQorICAgIHtDT0xVTU5fUElOR0NUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fUElOR0NUTFRBUkdFVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fUElOR0NUTERBVEFTSVpFLCAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVElNRU9VVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExQUk9CRUNPVU5ULCAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fUElOR0NUTEFETUlOU1RBVFVTLCAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtDT0xVTU5fUElOR0NUTERBVEFGSUxMLCAgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgOX19LAorICAgIHtDT0xVTU5fUElOR0NUTEZSRVFVRU5DWSwgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTB9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExNQVhST1dTLCAgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDExfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMU1RPUkFHRVRZUEUsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMn19LAorICAgIHtDT0xVTU5fUElOR0NUTFRSQVBHRU5FUkFUSU9OLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTN9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExUUkFQUFJPQkVGQUlMVVJFRklMVEVSLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE0fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVFJBUFRFU1RGQUlMVVJFRklMVEVSLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNX19LAorICAgIHtDT0xVTU5fUElOR0NUTFRZUEUsICAgICAgICAgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTZ9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExERVNDUiwgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE3fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMU09VUkNFQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxOH19LAorICAgIHtDT0xVTU5fUElOR0NUTFNPVVJDRUFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTl9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExJRklOREVYLCAgICAgICAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIwfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMQllQQVNTUk9VVEVUQUJMRSwgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMX19LAorICAgIHtDT0xVTU5fUElOR0NUTERTRklFTEQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjJ9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExST1dTVEFUVVMsICAgICAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIzfX0KIH07CiAKIApAQCAtMTM2LDE0ICsxNTksMjQgQEAKICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImRvbmUuXG4iKSk7CiB9CiAKK3ZvaWQgc2h1dGRvd25fcGluZ0N0bFRhYmxlKHZvaWQpCit7CisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZV9waW5nQ3RsVGFibGUsIE5VTEwsIDEpOworICAgIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInBpbmdDdGxUYWJsZSIpOworICAgIHVucmVnaXN0ZXJfbWliKHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkLCBwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZF9sZW4pOworICAgIHBpbmdDdGxUYWJsZV9jbGVhbmVyKHBpbmdDdGxUYWJsZVN0b3JhZ2UpOworICAgIHBpbmdDdGxUYWJsZVN0b3JhZ2UgPSBOVUxMOworfQorCiBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKgogY3JlYXRlX3BpbmdDdGxUYWJsZV9kYXRhKHZvaWQpCiB7CiAgICAgc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKKwogICAgIFN0b3JhZ2VOZXcgPSBTTk1QX01BTExPQ19TVFJVQ1QocGluZ0N0bFRhYmxlX2RhdGEpOwotICAgIGlmIChTdG9yYWdlTmV3ID09IE5VTEwpIHsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9CisgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID0gMTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cCgiIik7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRhcmdldEFkZHJlc3NMZW4gPSAwOwpAQCAtMTUxLDE5ICsxODQsMTcgQEAKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGltZU91dCA9IDM7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFByb2JlQ291bnQgPSAxOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxBZG1pblN0YXR1cyA9IDI7Ci0gICAgU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbigiMDAiKSArIDEpOworICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbCA9IHN0cmR1cCgiMDAiKTsKICAgICBpZiAoU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsID09IE5VTEwpIHsKLSAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgZnJlZShTdG9yYWdlTmV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwsICIwMCIsIHN0cmxlbigiMDAiKSArIDEpOwotICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbFtzdHJsZW4oIjAwIildID0gJ1wwJzsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGxMZW4gPSBzdHJsZW4oU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsKTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsRnJlcXVlbmN5ID0gMDsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsTWF4Um93cyA9IDUwOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxTdG9yYWdlVHlwZSA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uID0gc3RyZHVwKCIiKTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVHJhcEdlbmVyYXRpb25MZW4gPSAwOwotICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUcmFwR2VuZXJhdGlvbkxlbiA9IDA7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBQcm9iZUZhaWx1cmVGaWx0ZXIgPSAxOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUcmFwVGVzdEZhaWx1cmVGaWx0ZXIgPSAxOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUeXBlID0gY2FsbG9jKDEsIHNpemVvZihvaWQpICogc2l6ZW9mKDIpKTsgICAgICAgLyogMC4wICovCkBAIC0xODQsNiArMjE1LDIwIEBACiAgICAgcmV0dXJuIFN0b3JhZ2VOZXc7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfcGluZ0N0bFRhYmxlX2RhdGEoc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlRGVsKQoreworICAgIG5ldHNubXBfYXNzZXJ0KFN0b3JhZ2VEZWwpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bE93bmVySW5kZXgpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFRlc3ROYW1lKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxUYXJnZXRBZGRyZXNzKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxEYXRhRmlsbCk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVHJhcEdlbmVyYXRpb24pOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFR5cGUpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bERlc2NyKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxTb3VyY2VBZGRyZXNzKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwpOworfQorCiAvKgogICogcGluZ0N0bFRhYmxlX2FkZCgpOiBhZGRzIGEgc3RydWN0dXJlIG5vZGUgdG8gb3VyIGRhdGEgc2V0IAogICovCkBAIC0yMDAsMTUgKzI0NSwxNiBAQAogICAgICAqLwogCiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotCi0KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAgICAgaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJnBpbmdDdGxUYWJsZVN0b3JhZ2UsIHZhcnMsIHRoZWRhdGEpOwogCiAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJyZWdpc3RlcmVkIGFuIGVudHJ5XG4iKSk7Ci0gICAgdmFycyA9IE5VTEw7Ci0gICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJkb25lLlxuIikpOworCiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIApAQCAtMjE2LDEyICsyNjIsMTYgQEAKIHBpbmdSZXN1bHRzVGFibGVfYWRkKHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqcCA9IE5VTEw7CisgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqcDsKKwogICAgIHAgPSB0aGVkYXRhLT5waW5nUmVzdWx0czsKICAgICBpZiAodGhlZGF0YS0+cGluZ1Jlc3VsdHMgIT0gTlVMTCkgewogCi0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgcC0+cGluZ0N0bE93bmVySW5kZXgsIHAtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgcC0+cGluZ0N0bFRlc3ROYW1lLCBwLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgICAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5waW5nQ3RsVGVzdE5hbWUsIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBmaWxsIGluIGRlZmF1bHQgcm93IHZhbHVlcyBoZXJlIGludG8gU3RvcmFnZU5ldyAKQEAgLTI0MSw4ICsyOTEsNiBAQAogCiAgICAgfQogCi0gICAgREVCVUdNU0dUTCgoInBpbmdSZXN1bHRzVGFibGUiLCAiZG9uZS5cbiIpKTsKLSAgICB2YXJzX2xpc3QgPSBOVUxMOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKQEAgLTI1MSwxMSArMjk5LDE4IEBACiBwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkKHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnNfbGlzdDsKKwogICAgIHZhcnNfbGlzdCA9IE5VTEw7CiAgICAgaWYgKHRoZWRhdGEgIT0gTlVMTCkgewotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsIChjaGFyICopICZ0aGVkYXRhLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgsIHNpemVvZih0aGVkYXRhLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsgLyogcGluZ1Byb2JlSGlzdG9yeUluZGV4ICovCisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoZWRhdGEtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGhlZGF0YS0+cGluZ1Byb2JlSGlzdG9yeUluZGV4KSk7CiAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBmaWxsIGluIGRlZmF1bHQgcm93IHZhbHVlcyBoZXJlIGludG8gU3RvcmFnZU5ldyAKQEAgLTI3NCw1NiArMzI5LDQzIEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLCAib3V0IGZpbmlzaGVkXG4iKSk7CiAgICAgfQogICAgIAotICAgIHZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJkb25lLlxuIikpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKIGludAogcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZGFsbChzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKnRoZWRhdGEpCiB7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzX2xpc3QgPSBOVUxMOwotICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqcCA9IE5VTEw7Ci0gICAgcCA9IHRoZWRhdGEtPnBpbmdQcm9iZUhpczsKLSAgICBpZiAodGhlZGF0YS0+cGluZ1Byb2JlSGlzICE9IE5VTEwpCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgcC0+cGluZ0N0bE93bmVySW5kZXgsIHAtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsVGVzdE5hbWUsIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELCAoY2hhciAqKSAmcC0+cGluZ1Byb2JlSGlzdG9yeUluZGV4LCBzaXplb2YocC0+cGluZ1Byb2JlSGlzdG9yeUluZGV4KSk7IC8qIHBpbmdQcm9iZUhpc3RvcnlJbmRleCAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0OworICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqcDsKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFhYWDogZmlsbCBpbiBkZWZhdWx0IHJvdyB2YWx1ZXMgaGVyZSBpbnRvIFN0b3JhZ2VOZXcgCi0gICAgICAgICAgICAgKiAKLSAgICAgICAgICAgICAqLworICAgIGZvciAocCA9IHRoZWRhdGEtPnBpbmdQcm9iZUhpczsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAgICAgdmFyc19saXN0ID0gTlVMTDsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5waW5nQ3RsVGVzdE5hbWVMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+cGluZ1Byb2JlSGlzdG9yeUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsKKyAgICAgICAgaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJnBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2UsIHZhcnNfbGlzdCwgcCk7CisgICAgfQogCi0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLCAiYWRkaW5nIGRhdGEuLi4gICIpKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBhZGQgdGhlIGluZGV4IHZhcmlhYmxlcyB0byB0aGUgdmFyYmluZCBsaXN0LCB3aGljaCBpcyAKLSAgICAgICAgICAgICAqIHVzZWQgYnkgaGVhZGVyX2NvbXBsZXggdG8gaW5kZXggdGhlIGRhdGEgCi0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJnBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzX2xpc3QsIHApOwotCi0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLCAib3V0IGZpbmlzaGVkXG4iKSk7Ci0gICAgICAgICAgICB2YXJzX2xpc3QgPSBOVUxMOwotICAgICAgICAgICAgcCA9IHAtPm5leHQ7Ci0gICAgICAgIH0gd2hpbGUgKHAgIT0gTlVMTCk7Ci0KLSAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImRvbmUuXG4iKSk7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAogdm9pZAogcGluZ0N0bFRhYmxlX2NsZWFuZXIoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZikKIHsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjsKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0ciwgKm5leHQ7CisgICAgc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlRGVsOwogCiAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJjbGVhbmVyb3V0ICAiKSk7Ci0gICAgZm9yIChoY2lwdHIgPSB0aGVzdHVmZjsgaGNpcHRyICE9IE5VTEw7IGhjaXB0ciA9IGhjaXB0ci0+bmV4dCkgewotICAgICAgICBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nQ3RsVGFibGVTdG9yYWdlLCBoY2lwdHIpOworICAgIGZvciAoaGNpcHRyID0gdGhlc3R1ZmY7IGhjaXB0cjsgaGNpcHRyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gaGNpcHRyLT5uZXh0OworICAgICAgICBTdG9yYWdlRGVsID0gaGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeSgmcGluZ0N0bFRhYmxlU3RvcmFnZSwgaGNpcHRyKTsKKyAgICAgICAgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShTdG9yYWdlRGVsKTsKICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJjbGVhbmVyICAiKSk7CiAgICAgfQogfQpAQCAtODIxLDEwICs4NjMsMTUgQEAKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKICAgICB1bnNpZ25lZCBsb25nICAgY291bnQgPSAwOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgLyogcGluZ0N0bE9wZXJhdGlvbk5hbWUgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CiAKICAgICBmb3IgKGhjaXB0cjIgPSBwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOyBoY2lwdHIyICE9IE5VTEw7CiAgICAgICAgICBoY2lwdHIyID0gaGNpcHRyMi0+bmV4dCkgewpAQCAtODQyLDE3ICs4ODksMjEgQEAKIHsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIgPSBOVUxMOwogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbGFzdCA9IE5VTEw7Ci0gICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAsICpTdG9yYWdlRGVsOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgb2lkICAgICAgICAgICAgIG5ld29pZFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld29pZF9sZW47CiAgICAgdGltZV90ICAgICAgICAgIGxhc3RfdGltZSA9IDIxNDc0ODM2NDc7CiAgICAgdGltZV90ICAgICAgICAgIHRwOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgLyogcGluZ0N0bE9wZXJhdGlvbk5hbWUgKi8KLQorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CiAKICAgICBmb3IgKGhjaWxhc3QgPSBoY2lwdHIyID0gcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZTsgaGNpcHRyMiAhPSBOVUxMOwogICAgICAgICAgaGNpcHRyMiA9IGhjaXB0cjItPm5leHQpIHsKQEAgLTg3Miw3ICs5MjMsMjUgQEAKIAogICAgICAgICB9CiAgICAgfQotICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2UsIGhjaWxhc3QpOworICAgIFN0b3JhZ2VEZWwgPQorICAgICAgICBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlLCBoY2lsYXN0KTsKKyAgICBmb3IgKGhjaXB0cjIgPSBwaW5nQ3RsVGFibGVTdG9yYWdlOyBoY2lwdHIyOyBoY2lwdHIyID0gaGNpcHRyMi0+bmV4dCkgeworICAgICAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKnRtcDsKKworICAgICAgICB0bXAgPSBoY2lwdHIyLT5kYXRhOworICAgICAgICBpZiAodG1wLT5waW5nUHJvYmVIaXMgPT0gU3RvcmFnZURlbCkgeworICAgICAgICAgICAgdG1wLT5waW5nUHJvYmVIaXMgPSB0bXAtPnBpbmdQcm9iZUhpcy0+bmV4dDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0aW5nIHRoZSBsYXN0IG9uZSBzdWNjZWVkZWQhXG4iKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAJfQorICAgIH0KKyAgICBpZiAoU3RvcmFnZURlbCkgeworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdQcm9iZUhpc3RvcnlUaW1lKTsKKyAgICAgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpOworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxPd25lckluZGV4KTsKKyAgICAgICAgZnJlZShTdG9yYWdlRGVsKTsKKyAgICB9CiAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsCiAgICAgICAgICAgICAgICAgImRlbGV0ZSB0aGUgbGFzdCBvbmUgc3VjY2VzcyFcbiIpKTsKIH0KQEAgLTk0OCw4ICsxMDE3LDEwIEBACiB7CiAgICAgY2hhciAgICAgICAgICAgKnB0cjsKIAotICAgIGlmICgocHRyID0gc29ja19udG9wX2hvc3Qoc2EsIHNhbGVuKSkgPT0gTlVMTCkKLSAgICAgICAgcHJpbnRmKCJzb2NrX250b3BfaG9zdCBlcnJvciIpOyAvKiBpbmV0X250b3AoKSBzZXRzIGVycm5vICovCisgICAgaWYgKChwdHIgPSBzb2NrX250b3BfaG9zdChzYSwgc2FsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIGluZXRfbnRvcCgpIHNldHMgZXJybm8gKi8KKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJwaW5nQ3RsVGFibGU6IHNvY2tfbnRvcF9ob3N0KCkiKTsKKyAgICB9CiAgICAgcmV0dXJuIChwdHIpOwogfQogCkBAIC0xMDAyLDcgKzEwNzMsNyBAQAogICAgIGhpbnRzLmFpX2ZhbWlseSA9IGZhbWlseTsgICAvKiBBRl9VTlNQRUMsIEFGX0lORVQsIEFGX0lORVQ2LCBldGMuICovCiAgICAgaGludHMuYWlfc29ja3R5cGUgPSBzb2NrdHlwZTsgICAgICAgLyogMCwgU09DS19TVFJFQU0sIFNPQ0tfREdSQU0sIGV0Yy4gKi8KIAotICAgIGlmICgobiA9IGdldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApCisgICAgaWYgKChuID0gbmV0c25tcF9nZXRhZGRyaW5mbyhob3N0LCBzZXJ2LCAmaGludHMsICZyZXMpKSAhPSAwKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogCiAgICAgcmV0dXJuIChyZXMpOyAgICAgICAgICAgICAgIC8qIHJldHVybiBwb2ludGVyIHRvIGZpcnN0IG9uIGxpbmtlZCBsaXN0ICovCkBAIC0xMDMwLDE3ICsxMTAxLDE4IEBACiAgICAgaGludHMuYWlfZmFtaWx5ID0gZmFtaWx5OyAgIC8qIDAsIEFGX0lORVQsIEFGX0lORVQ2LCBldGMuICovCiAgICAgaGludHMuYWlfc29ja3R5cGUgPSBzb2NrdHlwZTsgICAgICAgLyogMCwgU09DS19TVFJFQU0sIFNPQ0tfREdSQU0sIGV0Yy4gKi8KIAotICAgIGlmICgobiA9IGdldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApCisgICAgaWYgKChuID0gbmV0c25tcF9nZXRhZGRyaW5mbyhob3N0LCBzZXJ2LCAmaGludHMsICZyZXMpKSAhPSAwKSB7CiAjaWYgSEFWRV9HQUlfU1RSRVJST1IKLSAgICAgICAgcHJpbnRmKCJob3N0X3NlcnYgZXJyb3IgZm9yICVzLCAlczogJXMiLAotICAgICAgICAgICAgICAgKGhvc3QgPT0gTlVMTCkgPyAiKG5vIGhvc3RuYW1lKSIgOiBob3N0LAotICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2VydiwKLSAgICAgICAgICAgICAgIGdhaV9zdHJlcnJvcihuKSk7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJob3N0X3NlcnYgZXJyb3IgZm9yICVzLCAlczogJXMiLAorICAgICAgICAgICAgICAgICAoaG9zdCA9PSBOVUxMKSA/ICIobm8gaG9zdG5hbWUpIiA6IGhvc3QsCisgICAgICAgICAgICAgICAgIChzZXJ2ID09IE5VTEwpID8gIihubyBzZXJ2aWNlIG5hbWUpIiA6IHNlcnYsCisgICAgICAgICAgICAgICAgIGdhaV9zdHJlcnJvcihuKSk7CiAjZWxzZQotICAgICAgICBwcmludGYoImhvc3Rfc2VydiBlcnJvciBmb3IgJXMsICVzIiwKLSAgICAgICAgICAgICAgIChob3N0ID09IE5VTEwpID8gIihubyBob3N0bmFtZSkiIDogaG9zdCwKLSAgICAgICAgICAgICAgIChzZXJ2ID09IE5VTEwpID8gIihubyBzZXJ2aWNlIG5hbWUpIiA6IHNlcnYpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaG9zdF9zZXJ2IGVycm9yIGZvciAlcywgJXMiLAorICAgICAgICAgICAgICAgICAoaG9zdCA9PSBOVUxMKSA/ICIobm8gaG9zdG5hbWUpIiA6IGhvc3QsCisgICAgICAgICAgICAgICAgIChzZXJ2ID09IE5VTEwpID8gIihubyBzZXJ2aWNlIG5hbWUpIiA6IHNlcnYpOwogI2VuZGlmCisgICAgfQogCiAgICAgcmV0dXJuIChyZXMpOyAgICAgICAgICAgICAgIC8qIHJldHVybiBwb2ludGVyIHRvIGZpcnN0IG9uIGxpbmtlZCBsaXN0ICovCiB9CkBAIC0xMDg0LDEzICsxMTU2LDE2IEBACiAgICAgb2lkICAgICAgICAgICAgIHBpbmdSZXN1bHRzU2VuZFByb2Jlc1tdID0KICAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgMywgMSwgOCB9OwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotICAgIFN0b3JhZ2VUbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QocGluZ1Jlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICBpZiAoKFN0b3JhZ2VUbXAgPQotICAgICAgICAgKHN0cnVjdCBwaW5nUmVzdWx0c1RhYmxlX2RhdGEgKikKLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCi0gICAgICAgIHJldHVybiA7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOworICAgIFN0b3JhZ2VUbXAgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmICghU3RvcmFnZVRtcCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLyoKICAgICAgKiBzbm1wVHJhcCBvaWQgCkBAIC0xMjE2LDE0ICsxMjkxLDE2IEBACiAgICAgLyogc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICogY3VycmVudD1OVUxMOyAqLwogICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSBjdXJyZW50X3ZhcjsKICAgICBpbnQgICAgICAgICAgICAgc29ja2ZkOworICAgIGludCAgICAgICAgICAgICBzZWxlY3RfcmVzdWx0OwogICAgIGludCAgICAgICAgICAgICBjdXJyZW50X3Byb2JlX3RlbXA7CiAgICAgaW50ICAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUgPSAwOwogICAgIGludCAgICAgICAgICAgICBmYWlsX3Byb2JlID0gMDsKICAgICBpbnQgICAgICAgICAgICAgZmxhZzsKLSAgICB1bnNpZ25lZCBsb25nICAqc3VtcnR0OworICAgIHVuc2lnbmVkIGxvbmcgICBzdW1ydHQ7CiAgICAgc3RydWN0IHRpbWV2YWwgIHR2OwogCi0gICAgc3VtcnR0ID0gKHVuc2lnbmVkIGxvbmcgKikgbWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisgICAgbWVtc2V0KHNlbmRidWYsIDAsIHNpemVvZihzZW5kYnVmKSk7CisKICAgICBzb2NrZmQgPSBzb2NrZXQocHItPnNhc2VuZC0+c2FfZmFtaWx5LCBTT0NLX1JBVywgcHItPmljbXBwcm90byk7CiAgICAgaWYgKHNvY2tmZCA8IDApIHsKIAlzbm1wX2xvZ19wZXJyb3IoInBpbmdDdGxUYWJsZTogZmFpbGVkIHRvIGNyZWF0ZSBzb2NrZXQiKTsKQEAgLTEyNDIsMjkgKzEzMTksMjkgQEAKICAgICAgICAgKCpwci0+ZnNlbmQpIChkYXRhbGVuLCBwaWQsIG5zZW50LCBzb2NrZmQsIHNlbmRidWYpOwogICAgICAgICBuc2VudCsrOwogICAgICAgICBsZW4gPSBwci0+c2FsZW47Ci0gICAgICAgIGlmIChyZWFkYWJsZV90aW1lbyhzb2NrZmQsIGl0ZW0tPnBpbmdDdGxUaW1lT3V0KSA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBwcmludGYoInNvY2tldCB0aW1lb3V0IVxuIik7ICovCi0gICAgICAgICAgICBuID0gLTE7Ci0gICAgICAgICAgICBmYWlsX3Byb2JlID0gZmFpbF9wcm9iZSArIDE7Ci0gICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG4gPSByZWN2ZnJvbShzb2NrZmQsIHJlY3ZidWYsIHNpemVvZihyZWN2YnVmKSwgMCwgcHItPnNhcmVjdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKLSAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUgPSBzdWNjZXNzX3Byb2JlICsgMTsKLSAgICAgICAgICAgIGZsYWcgPSAwOwotICAgICAgICB9CisgICAgICAgIHNlbGVjdF9yZXN1bHQgPSByZWFkYWJsZV90aW1lbyhzb2NrZmQsIGl0ZW0tPnBpbmdDdGxUaW1lT3V0KTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHNlbGVjdF9yZXN1bHQgPT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAic29ja2V0IHRpbWVvdXRcbiIpKTsKKyAgICAgICAgICAgICAgICBuID0gLTE7CisgICAgICAgICAgICAgICAgZmFpbF9wcm9iZSA9IGZhaWxfcHJvYmUgKyAxOworICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuID0gcmVjdmZyb20oc29ja2ZkLCByZWN2YnVmLCBzaXplb2YocmVjdmJ1ZiksIDAsIHByLT5zYXJlY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pOworICAgICAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUgPSBzdWNjZXNzX3Byb2JlICsgMTsKKyAgICAgICAgICAgICAgICBmbGFnID0gMDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworICAgICAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0dmFsKTsKIAotICAgICAgICB0aW1lKCZ0aW1lcCk7CisgICAgICAgICAgICB0aW1lKCZ0aW1lcCk7CiAKLSAgICAgICAgKCpwci0+ZnByb2MpIChyZWN2YnVmLCBuLCAmdHZhbCwgdGltZXAsIGl0ZW0sIGFpLCBkYXRhbGVuLCBtaW5ydHQsCi0gICAgICAgICAgICAgICAgICAgICAgbWF4cnR0LCBzdW1ydHQsIGF2ZXJhZ2VydHQsIGN1cnJlbnRfcHJvYmVfdGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzX3Byb2JlLCBmYWlsX3Byb2JlLCBmbGFnLCAmY3VycmVudF92YXIsIHBpZCk7Ci0gICAgICAgIGlmIChjdXJyZW50X3Byb2JlX3RlbXAgPj0gaXRlbS0+cGluZ0N0bFByb2JlQ291bnQpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShzdW1ydHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgICAgICAoKnByLT5mcHJvYykgKHJlY3ZidWYsIG4sICZ0dmFsLCB0aW1lcCwgaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4cnR0LCAmc3VtcnR0LCBhdmVyYWdlcnR0LCBjdXJyZW50X3Byb2JlX3RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUsIGZhaWxfcHJvYmUsIGZsYWcsICZjdXJyZW50X3ZhciwgcGlkKTsKKyAgICAgICAgICAgIHNlbGVjdF9yZXN1bHQgPSByZWFkYWJsZV90aW1lbyhzb2NrZmQsIDApOworICAgICAgICB9IHdoaWxlIChzZWxlY3RfcmVzdWx0ID4gMCk7CiAgICAgfQogICAgIGNsb3NlKHNvY2tmZCk7CiB9CkBAIC0xMjk5LDkgKzEzNzYsMTEgQEAKICAgICBzdGF0aWMgaW50ICAgICAgcHJvYmVGYWlsZWQgPSAwOwogICAgIHN0YXRpYyBpbnQgICAgICB0ZXN0RmFpbGVkID0gMDsKICAgICBzdGF0aWMgaW50ICAgICAgc2VyaWVzID0gMDsKLQogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZU5ldyA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInByb2NfdjQoZmxhZyA9ICVkKVxuIiwgZmxhZykpOworCiAgICAgaWYgKGZsYWcgPT0gMCkgewogICAgICAgICBzZXJpZXMgPSAwOwogICAgICAgICBpcCA9IChzdHJ1Y3QgaXAgKikgcHRyOyAvKiBzdGFydCBvZiBJUCBoZWFkZXIgKi8KQEAgLTEzMDksMTQgKzEzODgsMjAgQEAKIAogICAgICAgICBpY21wID0gKHN0cnVjdCBpY21wICopIChwdHIgKyBobGVuMSk7ICAgLyogc3RhcnQgb2YgSUNNUCBoZWFkZXIgKi8KICAgICAgICAgaWYgKChpY21wbGVuID0gbGVuIC0gaGxlbjEpIDwgOCkKLSAgICAgICAgICAgIHByaW50ZigiaWNtcGxlbiAoJWQpIDwgOCIsIGljbXBsZW4pOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJpY21wbGVuICglZCkgPCA4IiwgaWNtcGxlbikpOworCisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiSUNNUCB0eXBlID0gJWQgKCVzYSByZXBseSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGljbXAtPmljbXBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlID09IElDTVBfRUNIT1JFUExZID8gIiIgOiAibm90IGEgIikpOwogCiAgICAgICAgIGlmIChpY21wLT5pY21wX3R5cGUgPT0gSUNNUF9FQ0hPUkVQTFkpIHsKLSAgICAgICAgICAgIGlmIChpY21wLT5pY21wX2lkICE9IHBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsgICAgICAgICAvKiBub3QgYSByZXNwb25zZSB0byBvdXIgRUNIT19SRVFVRVNUICovCi0gICAgICAgICAgICBpZiAoaWNtcGxlbiA8IDE2KQotICAgICAgICAgICAgICAgIHByaW50ZigiaWNtcGxlbiAoJWQpIDwgMTYiLCBpY21wbGVuKTsKKyAgICAgICAgICAgIGlmIChpY21wLT5pY21wX2lkICE9IHBpZCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAibm90IGEgcmVzcG9uc2UgdG8gb3VyIEVDSE9fUkVRVUVTVFxuIikpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoaWNtcGxlbiA8IDE2KQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiaWNtcGxlbiAoJWQpIDwgMTYiLCBpY21wbGVuKSk7CiAKICAgICAgICAgICAgIHR2c2VuZCA9IChzdHJ1Y3QgdGltZXZhbCAqKSBpY21wLT5pY21wX2RhdGE7CiAKQEAgLTEzMjQsMTQgKzE0MDksMTkgQEAKICAgICAgICAgICAgICAgICByb3VuZF9kb3VibGUoKDEwMDAwMDAgKiAodHZyZWN2LT50dl9zZWMgLSB0dnNlbmQtPnR2X3NlYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZyZWN2LT50dl91c2VjIC0gdHZzZW5kLT50dl91c2VjKSAvIDEwMDApOwogCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgLyogcGluZ0N0bFRlc3ROYW1lICovCisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICAgICAgICAgIGlmICgoU3RvcmFnZU5ldyA9Ci0gICAgICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpKSA9PSBOVUxMKQorICAgICAgICAgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgICAgIGlmICghU3RvcmFnZU5ldykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiU3RvcmFnZU5ldyA9PSBOVUxMXG4iKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50X3Byb2JlID09IDEpIHsKICAgICAgICAgICAgICAgICAqYXZlcmFnZXJ0dCA9IHJ0dDsKQEAgLTEzMzksNyArMTQyOSw2IEBACiAgICAgICAgICAgICAgICAgKm1heHJ0dCA9IHJ0dDsKICAgICAgICAgICAgICAgICAqc3VtcnR0ID0gcnR0OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImVsc2VcbiIpOwogICAgICAgICAgICAgICAgIGlmIChydHQgPCAqbWlucnR0KQogICAgICAgICAgICAgICAgICAgICAqbWlucnR0ID0gcnR0OwogICAgICAgICAgICAgICAgIGlmIChydHQgPiAqbWF4cnR0KQpAQCAtMTM2Myw2ICsxNDUyLDcgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1J0dFN1bU9mU3F1YXJlcyArIHJ0dCAqIHJ0dDsKIAogCSAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmVfdGltZSA9IHRpbWVwOworICAgICAgICAgICAgZnJlZShTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmUpOwogICAgICAgICAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlID0KICAgICAgICAgICAgICAgICBuZXRzbm1wX21lbWR1cChkYXRlX25fdGltZSgmdGltZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmVMZW4pLApAQCAtMTQwNyw1MiArMTQ5NywzOSBAQAogCiAgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNTZW5kUHJvYmVzID09IDEpCiAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ1Byb2JlSGlzID0gdGVtcDsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIChjdXJyZW50X3RlbXApLT5uZXh0ID0gdGVtcDsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY3VycmVudF90ZW1wID0gdGVtcDsKIAotICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzU2VuZFByb2JlcyA+PQotICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxQcm9iZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNTZW5kUHJvYmVzID49IGl0ZW0tPnBpbmdDdGxQcm9iZUNvdW50KQogICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVtcC0+bmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpdGVtLT5waW5nUHJvYmVIaXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfY291bnQoaXRlbSkgPAotICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsTWF4Um93cykgewotICAgICAgICAgICAgICAgICAgICBpZiAocGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZChjdXJyZW50X3RlbXApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFuIGVudHJ5IGVycm9yXG4iKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGluZ1Byb2JlSGlzdG9yeVRhYmxlX2NvdW50KGl0ZW0pID49IGl0ZW0tPnBpbmdDdGxNYXhSb3dzKQogICAgICAgICAgICAgICAgICAgICBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGVsTGFzdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGQoY3VycmVudF90ZW1wKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9TVUNDRVNTKQotICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCBhbiBlbnRyeSBlcnJvclxuIikpOwotCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkKGN1cnJlbnRfdGVtcCkgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBhZGQgYSByb3dcbiIpKTsKIAkgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoZmxhZyA9PSAxKQotICAgIHsKLQotCisgICAgfSBlbHNlIGlmIChmbGFnID09IDEpIHsKICAgICAgICAgaWYgKHNlcmllcyA9PSAwKQogICAgICAgICAgICAgcHJvYmVGYWlsZWQgPSAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcm9iZUZhaWxlZCA9IHByb2JlRmFpbGVkICsgMTsKICAgICAgICAgc2VyaWVzID0gMTsKICAgICAgICAgdGVzdEZhaWxlZCA9IHRlc3RGYWlsZWQgKyAxOwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAvKiAgcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgICAgLyogcGluZ0N0bFRlc3ROYW1lICovCisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICAgICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpKSA9PSBOVUxMKQorICAgICAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKTsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgICAgIGlmICghU3RvcmFnZU5ldykKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1NVQ0hOQU1FOwogCiAgICAgICAgIGlmIChjdXJyZW50X3Byb2JlID09IDEpIHsKQEAgLTE1ODIsNyArMTY1OSw3IEBACiAgICAgaWNtcC0+aWNtcF9jb2RlID0gMDsKICAgICBpY21wLT5pY21wX2lkID0gcGlkOwogICAgIGljbXAtPmljbXBfc2VxID0gbnNlbnQ7Ci0gICAgZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSBpY21wLT5pY21wX2RhdGEsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygoc3RydWN0IHRpbWV2YWwgKikgaWNtcC0+aWNtcF9kYXRhKTsKIAogICAgIGxlbiA9IDggKyBkYXRhbGVuOyAgICAgICAgICAvKiBjaGVja3N1bSBJQ01QIGhlYWRlciBhbmQgZGF0YSAqLwogICAgIGljbXAtPmljbXBfY2tzdW0gPSAwOwpAQCAtMTYwMCwxMiArMTY3NywxNSBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZU5ldyA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogcGluZ0N0bE93bmVySW5kZXggICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiBwaW5nQ3RsVGVzdE5hbWUgICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgIGlmICgoU3RvcmFnZU5ldyA9Ci0gICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpKSA9PSBOVUxMKQorICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmICghU3RvcmFnZU5ldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNTZW5kUHJvYmVzID0gMDsKQEAgLTE2MzMsMzQgKzE3MTMsNDEgQEAKIAogICAgICAgICBhaSA9IGhvc3Rfc2Vydihob3N0LCBOVUxMLCAwLCAwKTsKIAotICAgICAgICBwcmludGYoIlBJTkcgJXMgKCVzKTogJWQgZGF0YSBieXRlc1xuIiwgYWktPmFpX2Nhbm9ubmFtZSwKLSAgICAgICAgICAgICAgIHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksIGRhdGFsZW4pOworICAgICAgICBpZiAoYWkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiUElORyAlcyAoJXMpOiAlZCBkYXRhIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYWktPmFpX2Nhbm9ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksIGRhdGFsZW4pKTsKIAotICAgICAgICAvKgotICAgICAgICAgKiA0aW5pdGlhbGl6ZSBhY2NvcmRpbmcgdG8gcHJvdG9jb2wgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0gICAgICAgICAgICBwciA9ICZwcm90b192NDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiA0aW5pdGlhbGl6ZSBhY2NvcmRpbmcgdG8gcHJvdG9jb2wgCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgICAgICAgICBwciA9ICZwcm90b192NDsKICNpZmRlZglJUFY2Ci0gICAgICAgIH0gZWxzZSBpZiAoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgewotICAgICAgICAgICAgcHIgPSAmcHJvdG9fdjY7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICAgICAgICBwciA9ICZwcm90b192NjsKIAotICAgICAgICAgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWktPmFpX2FkZHIpLT5zaW42X2FkZHIpKSkKLSAgICAgICAgICAgICAgICBwcmludGYoImNhbm5vdCBwaW5nIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzcyIpOworICAgICAgICAgICAgICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfYWRkciktPnNpbjZfYWRkcikpKQorICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IHBpbmcgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzIik7CiAjZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwcmludGYoInVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQiLCBhaS0+YWlfZmFtaWx5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQiLCBhaS0+YWlfZmFtaWx5KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBwci0+c2FzZW5kID0gYWktPmFpX2FkZHI7Ci0gICAgICAgIHByLT5zYXJlY3YgPSBjYWxsb2MoMSwgYWktPmFpX2FkZHJsZW4pOwotICAgICAgICBwci0+c2FsZW4gPSBhaS0+YWlfYWRkcmxlbjsKLSAgICAgICAgcmVhZGxvb3AoaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwgbWF4cnR0LCBhdmVyYWdlcnR0LCBwaWQpOworICAgICAgICAgICAgcHItPnNhc2VuZCA9IGFpLT5haV9hZGRyOworICAgICAgICAgICAgcHItPnNhcmVjdiA9IGNhbGxvYygxLCBhaS0+YWlfYWRkcmxlbik7CisgICAgICAgICAgICBwci0+c2FsZW4gPSBhaS0+YWlfYWRkcmxlbjsKKyAgICAgICAgICAgIHJlYWRsb29wKGl0ZW0sIGFpLCBkYXRhbGVuLCBtaW5ydHQsIG1heHJ0dCwgYXZlcmFnZXJ0dCwgcGlkKTsKKyAgICAgICAgICAgIGZyZWUocHItPnNhcmVjdik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiUElORzogbmFtZSByZXNvbHV0aW9uIGZvciAlcyBmYWlsZWQuXG4iLCBob3N0KTsKKyAgICAgICAgfQogCiAgICAgICAgIFNOTVBfRlJFRShtaW5ydHQpOwogICAgICAgICBTTk1QX0ZSRUUobWF4cnR0KTsKICAgICAgICAgU05NUF9GUkVFKGF2ZXJhZ2VydHQpOwotICAgICAgICBTTk1QX0ZSRUUoYWkpOworICAgICAgICBmcmVlYWRkcmluZm8oYWkpOwogICAgIH0KIAogICAgIGVsc2UgaWYgKGl0ZW0tPnBpbmdDdGxUYXJnZXRBZGRyZXNzVHlwZSA9PSAyKSB7CkBAIC0xNzM2LDEzICsxODIzLDExIEBACiAgICAgICAgIGhvc3RuYW1lID0gdGFyZ2V0OwogCiAgICAgICAgIGlmIChpcHY2X2FkZHJfYW55KCZzb3VyY2Uuc2luNl9hZGRyKSkgewotCiAgICAgICAgICAgICBzb2NrbGVuX3QgICAgICAgYWxlbjsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBwcm9iZV9mZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiAKICAgICAgICAgICAgIGlmIChwcm9iZV9mZCA8IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImVycm9yIVxuIik7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInBpbmdDdGxUYWJsZTogSVB2NiBkYXRhZ3JhbSBzb2NrZXQgY3JlYXRpb24iKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGV2aWNlKSB7CkBAIC0xNzYxLDYgKzE4NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKHByb2JlX2ZkLCBTSU9DR0lGSU5ERVgsICZpZnIpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGluZzogdW5rbm93biBpZmFjZSAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UocHJvYmVfZmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0aG9wLnNpbjZfc2NvcGVfaWQgPSBpZnIuaWZyX2lmaW5kZXg7CkBAIC0xNzczLDEyICsxODU5LDE0IEBACiAgICAgICAgICAgICAgICAgKHByb2JlX2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZmaXJzdGhvcCwKICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZpcnN0aG9wKSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBwZXJyb3IoImNvbm5lY3QiKTsKKyAgICAgICAgICAgICAgICBjbG9zZShwcm9iZV9mZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYWxlbiA9IHNpemVvZihzb3VyY2UpOwogICAgICAgICAgICAgaWYgKGdldHNvY2tuYW1lKHByb2JlX2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZzb3VyY2UsICZhbGVuKQogICAgICAgICAgICAgICAgID09IC0xKSB7CiAgICAgICAgICAgICAgICAgcGVycm9yKCJnZXRzb2NrbmFtZSIpOworICAgICAgICAgICAgICAgIGNsb3NlKHByb2JlX2ZkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzb3VyY2Uuc2luNl9wb3J0ID0gMDsKQEAgLTE4OTEsMTUgKzE5NzksMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHByaW50ZigiUElORyAlcyglcykgIiwgaG9zdG5hbWUsCi0gICAgICAgICAgICAgICBwcl9hZGRyKCZ3aGVyZXRvLnNpbjZfYWRkciwgb3B0aW9ucykpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIlBJTkcgJXMoJXMpICIsIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZ3aGVyZXRvLnNpbjZfYWRkciwgb3B0aW9ucykpKTsKICAgICAgICAgaWYgKGZsb3dsYWJlbCkKLSAgICAgICAgICAgIHByaW50ZigiLCBmbG93IDB4JTA1eCwgIiwgKHVuc2lnbmVkKSBudG9obChmbG93bGFiZWwpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBmbG93IDB4JTA1eCwgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkgbnRvaGwoZmxvd2xhYmVsKSkpOwogICAgICAgICBpZiAoZGV2aWNlIHx8IChvcHRpb25zICYgRl9OVU1FUklDKSkgewotICAgICAgICAgICAgcHJpbnRmKCJmcm9tICVzICVzOiAiLAotICAgICAgICAgICAgICAgICAgIHByX2FkZHJfbigmc291cmNlLnNpbjZfYWRkciksIGRldmljZSA/IDogIiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJmcm9tICVzICVzOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJfYWRkcl9uKCZzb3VyY2Uuc2luNl9hZGRyKSwgZGV2aWNlID8gOiAiIikpOwogICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiJWQgZGF0YSBieXRlc1xuIiwgZGF0YWxlbik7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiJWQgZGF0YSBieXRlc1xuIiwgZGF0YWxlbikpOwogCiAgICAgICAgIHNldHVwKGljbXBfc29jaywgb3B0aW9ucywgdWlkLCB0aW1lb3V0LCBwcmVsb2FkLCBpbnRlcnZhbCwgZGF0YWxlbiwKICAgICAgICAgICAgICAgKGNoYXIgKikgb3V0cGFjaywgJmlkZW50LCAmc3RhcnRfdGltZSwgJnNjcmVlbl93aWR0aCwKQEAgLTE5MjUsMTggKzIwMTQsMjAgQEAKICAgICBjaGFyICAgICAgICAgICAqaG9zdCA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAgKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qIHBpbmdDdGxUZXN0TmFtZSAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpICE9IE5VTEwpIHsKKyAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICBpZiAoU3RvcmFnZU5ldykgewogICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPSAwOwogICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1Byb2JlUmVzcG9uc2VzID0gMDsKICAgICAgICAgcmV0dXJuOwotCiAgICAgfQotICAgIGFpID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKKwogICAgIGhvc3QgPSBpdGVtLT5waW5nQ3RsVGFyZ2V0QWRkcmVzczsKICAgICBhaSA9IGhvc3Rfc2Vydihob3N0LCBOVUxMLCAwLCAwKTsKICAgICBTdG9yYWdlVG1wID0gU05NUF9NQUxMT0NfU1RSVUNUKHBpbmdSZXN1bHRzVGFibGVfZGF0YSk7CkBAIC0xOTU5LDI2ICsyMDUwLDE0IEBACiAKICAgICBpZiAoaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDEKICAgICAgICAgfHwgaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDE2KSB7Ci0gICAgICAgIGlmIChhaSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSAwOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPSBzdHJkdXAoIiIpOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NUeXBlID0gMTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgIG1hbGxvYyhzdHJsZW4oc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgKyAxKTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICBzdHJkdXAoc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSk7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT4KLSAgICAgICAgICAgICAgICBwaW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1tzdHJsZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja19udG9wX2hvc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFpLT5haV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWktPmFpX2FkZHJsZW4pKV0gPSAnXDAnOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPQotICAgICAgICAgICAgICAgIHN0cmxlbihzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pKTsKLSAgICAgICAgfQorICAgICAgICBjb25zdCBjaGFyKiBzdHI7CisKKyAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NUeXBlID0gYWkgPyAxIDogMDsKKyAgICAgICAgc3RyID0gYWkgPyBzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDogTlVMTDsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICBzdHIgPSAiIjsKKyAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPSBzdHJkdXAoc3RyKTsKKyAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPSBzdHJsZW4oc3RyKTsKICAgICB9CiAgICAgaWYgKGl0ZW0tPnBpbmdDdGxUYXJnZXRBZGRyZXNzVHlwZSA9PSAyKSB7CiAKQEAgLTE5OTMsMTAgKzIwNzIsNyBAQAogCiAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGhvc3QsICZ0by0+c2luNl9hZGRyKSA+IDApIHsKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzVHlwZSA9IDI7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihob3N0KSArIDEpOwogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPSBzdHJkdXAoaG9zdCk7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1tzdHJsZW4oaG9zdCldID0gJ1wwJzsKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzTGVuID0gc3RybGVuKGhvc3QpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lMihob3N0LCBBRl9JTkVUNik7CkBAIC0yMDA1LDEzICsyMDgxLDggQEAKICAgICAgICAgICAgICAgICBtZW1tb3ZlKChjYWRkcl90KSAmIHRvLT5zaW42X2FkZHIsIGhwLT5oX2FkZHIsIDE2KTsKICAgICAgICAgICAgICAgICBob3N0bmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnRvLT5zaW42X2FkZHIsIHBhLCA2NCk7CiAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NUeXBlID0gMjsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4oaG9zdG5hbWUpICsgMSk7CiAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPSBzdHJkdXAoaG9zdG5hbWUpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzW3N0cmxlbihob3N0bmFtZSldID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgICAgIHN0cmxlbihob3N0bmFtZSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPSBzdHJsZW4oaG9zdG5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYWNlcm91dGU6IHVua25vd24gaG9zdCAlc1xuIiwgaG9zdCk7CkBAIC0yMDQwLDggKzIxMTEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIFNOTVBfRlJFRShhaSk7Ci0KKyAgICBmcmVlYWRkcmluZm8oYWkpOwogfQogCiAKQEAgLTIwNTEsMTIgKzIxMjEsMTYgQEAKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwogICAgIHN0cnVjdCBwaW5nUmVzdWx0c1RhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgLyogcGluZ0N0bFRlc3ROYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICBpZiAoKFN0b3JhZ2VUbXAgPQotICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKSkgPT0gTlVMTCkKKyAgICBTdG9yYWdlVG1wID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICBpZiAoIVN0b3JhZ2VUbXApCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1NVQ0hOQU1FOwogICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzT3BlclN0YXR1cyA9IHZhbDsKIApAQCAtMjA2OCwxOSArMjE0MiwyMyBAQAogaW50CiBwaW5nUmVzdWx0c1RhYmxlX2RlbChzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKnRoZWRhdGEpCiB7Ci0gICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIyID0gTlVMTDsKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIsICpuZXh0OwogICAgIHN0cnVjdCBwaW5nUmVzdWx0c1RhYmxlX2RhdGEgKlN0b3JhZ2VEZWwgPSBOVUxMOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgb2lkICAgICAgICAgICAgIG5ld29pZFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld29pZF9sZW47CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAotICAgIGZvciAoaGNpcHRyMiA9IHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlOyBoY2lwdHIyICE9IE5VTEw7Ci0gICAgICAgICBoY2lwdHIyID0gaGNpcHRyMi0+bmV4dCkgeworICAgIGZvciAoaGNpcHRyMiA9IHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlOyBoY2lwdHIyOyBoY2lwdHIyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gaGNpcHRyMi0+bmV4dDsKICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobmV3b2lkLCBuZXdvaWRfbGVuLCBoY2lwdHIyLT5uYW1lLCBuZXdvaWRfbGVuKQogICAgICAgICAgICAgPT0gMCkgewogICAgICAgICAgICAgU3RvcmFnZURlbCA9CkBAIC0yMTA0LDE5ICsyMTgyLDIzIEBACiBpbnQKIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kZWwoc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICp0aGVkYXRhKQogewotICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyMiA9IE5VTEw7CisgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIyLCAqbmV4dDsKICAgICBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKlN0b3JhZ2VEZWwgPSBOVUxMOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgb2lkICAgICAgICAgICAgIG5ld29pZFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld29pZF9sZW47CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAotICAgIGZvciAoaGNpcHRyMiA9IHBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKLSAgICAgICAgIGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CisgICAgZm9yIChoY2lwdHIyID0gcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZTsgaGNpcHRyMjsgaGNpcHRyMiA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGhjaXB0cjItPm5leHQ7CiAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKG5ld29pZCwgbmV3b2lkX2xlbiwgaGNpcHRyMi0+bmFtZSwgbmV3b2lkX2xlbikKICAgICAgICAgICAgID09IDApIHsKICAgICAgICAgICAgIFN0b3JhZ2VEZWwgPQpAQCAtMjIxNiw2ICsyMjk4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIzMTMsNiArMjM5Niw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNDAyLDYgKzI0ODYsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjQ5Miw2ICsyNTc3LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI1ODQsNiArMjY3MCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNjg2LDYgKzI3NzMsNyBAQAogICAgICAgICAgICAgbW9kaWZ5X1Jlc3VsdHNPcGVyKFN0b3JhZ2VUbXAsIDIpOwogICAgICAgICB9CiAKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI3ODIsNiArMjg3MCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yODY3LDYgKzI5NTYsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjk1Miw2ICszMDQyLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMwMzksNiArMzEzMCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMTM3LDYgKzMyMjksNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzIyOCw2ICszMzIxLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMzMTksNiArMzQxMyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNDE2LDYgKzM1MTEsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzUxMiw2ICszNjA4LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM1OTgsNiArMzY5NSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNjk2LDYgKzM3OTQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzc4MSw2ICszODgwLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM4NjksNiArMzk2OSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zOTU3LDYgKzQwNTgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzk3MCwxNCArNDA3MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7Ci0gICAgc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXA7CiAgICAgc3RhdGljIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqU3RvcmFnZU5ldywgKlN0b3JhZ2VEZWw7CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld2xlbiA9CiAgICAgICAgIG5hbWVfbGVuIC0gKHNpemVvZihwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZCkgLyBzaXplb2Yob2lkKSArCiAgICAgICAgICAgICAgICAgICAgIDMgLSAxKTsKICAgICBzdGF0aWMgaW50ICAgICAgb2xkX3ZhbHVlOwogICAgIGludCAgICAgICAgICAgICBzZXRfdmFsdWU7Ci0gICAgc3RhdGljIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnZwOwogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyID0gTlVMTDsKIAogICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLApAQCAtNDA3Niw2ICs0MTc3LDggQEAKICAgICAgICAgICogbWVtb3J5IHJlc2V2ZXJhdGlvbiwgZmluYWwgcHJlcGFyYXRpb24uLi4gCiAgICAgICAgICAqLwogICAgICAgICBpZiAoU3RvcmFnZVRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICp2cDsKKwogICAgICAgICAgICAgaWYgKHNldF92YWx1ZSA9PSBSU19ERVNUUk9ZKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgICAgICB9CkBAIC00MDk1LDE1ICs0MTk4LDE0IEBACiAgICAgICAgICAgICAgICAgIChuYW1lCiAgICAgICAgICAgICAgICAgICBbc2l6ZW9mKHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkKSAvIHNpemVvZihvaWQpICsKICAgICAgICAgICAgICAgICAgICAyXSksIG5ld2xlbiwgdmFycykgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBYWFg6IGZyZWUsIHplcm8gdmFycyAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAvKiBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsgKi8KKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZwID0gdmFyczsKIAogICAgICAgICAgICAgU3RvcmFnZU5ldyA9IGNyZWF0ZV9waW5nQ3RsVGFibGVfZGF0YSgpOworICAgICAgICAgICAgaWYgKCFTdG9yYWdlTmV3KQorICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICBpZiAodnAtPnZhbF9sZW4gPD0gMzIpIHsKICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsT3duZXJJbmRleCA9IG1hbGxvYyh2cC0+dmFsX2xlbiArIDEpOwogICAgICAgICAgICAgICAgIG1lbWNweShTdG9yYWdlTmV3LT5waW5nQ3RsT3duZXJJbmRleCwgdnAtPnZhbC5zdHJpbmcsCkBAIC00MTQwLDEwICs0MjQyLDcgQEAKICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxSb3dTdGF0dXMgPSBzZXRfdmFsdWU7CiAKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFhYWDogZnJlZSwgemVybyB2YXJzLCBubyBsb25nZXIgbmVlZGVkPyAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLyogc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7ICovCisgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKICAgICAgICAgfQogCiAKQEAgLTQxNTQsMTIgKzQyNTMsMTcgQEAKIAogICAgIGNhc2UgRlJFRToKICAgICAgICAgLyoKLSAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMgCi0gICAgICAgICAqLwotCi0gICAgICAgIC8qCiAgICAgICAgICAqIFJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgCiAgICAgICAgICAqLworCisgICAgICAgIGlmIChzZXRfdmFsdWUgPT0gUlNfREVTVFJPWSAmJiBTdG9yYWdlTmV3KQorICAgICAgICAgICAgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShTdG9yYWdlTmV3KTsKKyAgICAgICAgU3RvcmFnZU5ldyA9IE5VTEw7CisKKyAgICAgICAgaWYgKFN0b3JhZ2VEZWwpIHsKKyAgICAgICAgICAgIGZyZWVfcGluZ0N0bFRhYmxlX2RhdGEoU3RvcmFnZURlbCk7CisgICAgICAgICAgICBTdG9yYWdlRGVsID0gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAogCkBAIC00MjMwLDEwICs0MzM0LDggQEAKICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KHBpbmdDdGxUYWJsZVN0b3JhZ2UsIFN0b3JhZ2VOZXcpOwogICAgICAgICAgICAgU3RvcmFnZURlbCA9CiAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeSgmcGluZ0N0bFRhYmxlU3RvcmFnZSwgaGNpcHRyKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFhYWDogZnJlZSBpdCAKLSAgICAgICAgICAgICAqLworICAgICAgICAgICAgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShTdG9yYWdlRGVsKTsKKyAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOwogICAgICAgICB9IGVsc2UgaWYgKFN0b3JhZ2VEZWwgIT0gTlVMTCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHJvdyBkZWxldGlvbiwgc28gYWRkIGl0IGFnYWluIApAQCAtNDI0MSw2ICs0MzQzLDcgQEAKICAgICAgICAgICAgIHBpbmdDdGxUYWJsZV9hZGQoU3RvcmFnZURlbCk7CiAgICAgICAgICAgICBwaW5nUmVzdWx0c1RhYmxlX2FkZChTdG9yYWdlRGVsKTsKICAgICAgICAgICAgIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGRhbGwoU3RvcmFnZURlbCk7CisgICAgICAgICAgICBTdG9yYWdlRGVsID0gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdDdGxSb3dTdGF0dXMgPSBvbGRfdmFsdWU7CiAgICAgICAgIH0KQEAgLTQyNjIsMzcgKzQzNjUsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKFN0b3JhZ2VEZWwgIT0gTlVMTCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsT3duZXJJbmRleCkhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bE93bmVySW5kZXgpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQxIFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bFRlc3ROYW1lKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQyIFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bFRhcmdldEFkZHJlc3MpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxUYXJnZXRBZGRyZXNzKTsKLSAgICAgICAgICAgICAqIHByaW50ZigiQ09NTUlUMyBcbiIpOwotICAgICAgICAgICAgICogaWYoc3RybGVuKFN0b3JhZ2VEZWwtPnBpbmdDdGxEYXRhRmlsbCkhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bERhdGFGaWxsKTsKLSAgICAgICAgICAgICAqIHByaW50ZigiQ09NTUlUNCBcbiIpOwotICAgICAgICAgICAgICogaWYoc3RybGVuKFN0b3JhZ2VEZWwtPnBpbmdDdGxUcmFwR2VuZXJhdGlvbikhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uKTsKLSAgICAgICAgICAgICAqIHByaW50ZigiQ09NTUlUNSBcbiIpOwotICAgICAgICAgICAgICogaWYoU3RvcmFnZURlbC0+cGluZ0N0bFR5cGVMZW4hPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFR5cGUpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ2IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bERlc2NyKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsRGVzY3IpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ3IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bFNvdXJjZUFkZHJlc3MpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxTb3VyY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAqIHByaW50ZigiQ09NTUlUOCBcbiIpOwotICAgICAgICAgICAgICovCisgICAgICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VEZWwpOwogICAgICAgICAgICAgU3RvcmFnZURlbCA9IE5VTEw7Ci0gICAgICAgICAgICAvKiBTdG9yYWdlRGVsID0gMDsgKi8KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBYWFg6IGZyZWUgaXQsIGl0cyBkZWFkIAotICAgICAgICAgICAgICovCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoU3RvcmFnZVRtcAogICAgICAgICAgICAgICAgICYmIFN0b3JhZ2VUbXAtPnBpbmdDdGxSb3dTdGF0dXMgPT0gUlNfQ1JFQVRFQU5ER08pIHsKQEAgLTQzMjcsNiArNDQwMSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKIAogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDE0ICs0NTM5LDEzIEBACiAgICAgICogQ2hlY2sgdGhhdCBwYWNrZXRzIDwgcmF0ZSp0aW1lICsgcHJlbG9hZCAKICAgICAgKi8KICAgICBpZiAoKCpjdXJfdGltZSkudHZfc2VjID09IDApIHsKLQotICAgICAgICBnZXR0aW1lb2ZkYXkoY3VyX3RpbWUsIE5VTEwpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soY3VyX3RpbWUpOwogICAgICAgICB0b2tlbnMgPSBpbnRlcnZhbCAqIChwcmVsb2FkIC0gMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9uZyAgICAgICAgICAgIG50b2tlbnM7CiAgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0djsKIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0dik7CiAgICAgICAgIG50b2tlbnMgPSAodHYudHZfc2VjIC0gKCpjdXJfdGltZSkudHZfc2VjKSAqIDEwMDAgKwogICAgICAgICAgICAgKHR2LnR2X3VzZWMgLSAoKmN1cl90aW1lKS50dl91c2VjKSAvIDEwMDA7CiAgICAgICAgIGlmICghaW50ZXJ2YWwpIHsKQEAgLTQ2OTYsNyArNDc3MCw3IEBACiAKICAgICAqaWRlbnQgPSBnZXRwaWQoKSAmIDB4RkZGRjsKIAotICAgIGdldHRpbWVvZmRheShzdGFydF90aW1lLCBOVUxMKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soc3RhcnRfdGltZSk7CiAKICNpZiAwCiAgICAgaWYgKCpkZWFkbGluZSkgewpAQCAtNDc4MCwxMSArNDg1NCwxMSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5wYWNrZXRzICYmIG5yZWNlaXZlZCA+PSBucGFja2V0cykgewotICAgICAgICAgICAgcHJpbnRmKCJucGFja2V0cyxucmVjZWl2ZWQ9JWxkXG4iLCBucmVjZWl2ZWQpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJucGFja2V0cyxucmVjZWl2ZWQ9JWxkXG4iLCBucmVjZWl2ZWQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChkZWFkbGluZSAmJiBuZXJyb3JzKSB7Ci0gICAgICAgICAgICBwcmludGYoImRlYWRsaW5lXG4iKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiZGVhZGxpbmVcbiIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTQ3OTksNyArNDg3Myw3IEBACiAgICAgICAgICAqIFNlbmQgcHJvYmVzIHNjaGVkdWxlZCB0byB0aGlzIHRpbWUuIAogICAgICAgICAgKi8KICAgICAgICAgZG8gewotICAgICAgICAgICAgcHJpbnRmKCJwaW5nZXJcbiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJwaW5nZXJcbiIpKTsKICAgICAgICAgICAgIG5leHQgPQogICAgICAgICAgICAgICAgIHBpbmdlcihpY21wX3NvY2ssIHByZWxvYWQsIGNtc2dsZW4sIGNtc2didWYsIHdoZXJldG8sCiAgICAgICAgICAgICAgICAgICAgICAgICZydHRfYWRkZW5kLCB1aWQsIG9wdGlvbnMsIGludGVydmFsLCBkYXRhbGVuLApAQCAtNDgwNywxMSArNDg4MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSwgJmFja2VkLCAmbnBhY2tldHMsICZucmVjZWl2ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICZudHJhbnNtaXR0ZWQsICZuZXJyb3JzLCAmY29uZmlybV9mbGFnLCAmY29uZmlybSwKICAgICAgICAgICAgICAgICAgICAgICAgJnBpcGVzaXplLCAmY3VyX3RpbWUpOwotICAgICAgICAgICAgcHJpbnRmKCIxOm5leHQ9JWRcbiIsIG5leHQpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIxOm5leHQ9JWRcbiIsIG5leHQpKTsKICAgICAgICAgICAgIG5leHQgPQogICAgICAgICAgICAgICAgIHNjaGVkdWxlX2V4aXQobmV4dCwgZGVhZGxpbmUsICZucGFja2V0cywgJm5yZWNlaXZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudHJhbnNtaXR0ZWQsICZ0bWF4KTsKLSAgICAgICAgICAgIHByaW50ZigiMjpuZXh0PSVkXG4iLCBuZXh0KTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiMjpuZXh0PSVkXG4iLCBuZXh0KSk7CiAgICAgICAgIH0gd2hpbGUgKG5leHQgPD0gMCk7CiAKICAgICAgICAgLyoKQEAgLTQ5MDAsOCArNDk3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqdGVtcCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAKLQotCiAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJpZXMgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JlRmFpbGVkID0gMTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNDkwOSwxMyArNDk4MSwxNyBAQAogICAgICAgICAgICAgICAgICAgICBzZXJpZXMgPSAxOwogICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkID0gdGVzdEZhaWxlZCArIDE7CiAKLSAgICAgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgIC8qICBwaW5nQ3RsT3duZXJJbmRleCAgKi8KLSAgICAgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiAgcGluZ0N0bFRlc3ROYW1lICAqLworICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgICAgICAgICAgICAgICAgIGlmICgoU3RvcmFnZU5ldyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghU3RvcmFnZU5ldykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPQpAQCAtNTAxMCw3ICs1MDg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbm90X291cnMgPSAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJjYz49MCxlbHNlXG4iKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImNjPj0wLGVsc2VcbiIpKTsKICNpZmRlZiBTT19USU1FU1RBTVAKICAgICAgICAgICAgICAgICBmb3IgKGMgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjOyBjID0gQ01TR19OWFRIRFIoJm1zZywgYykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGMtPmNtc2dfbGV2ZWwgIT0gU09MX1NPQ0tFVCB8fApAQCAtNTAyNSw3ICs1MTAxLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBGX0xBVEVOQ1kpIHx8IHJlY3ZfdGltZXAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBGX0xBVEVOQ1kpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICBpb2N0bChpY21wX3NvY2ssIFNJT0NHU1RBTVAsICZyZWN2X3RpbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZyZWN2X3RpbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZyZWN2X3RpbWUpOwogICAgICAgICAgICAgICAgICAgICByZWN2X3RpbWVwID0gJnJlY3ZfdGltZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTUxMjUsMTkgKzUyMDEsMTQgQEAKICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRtcF90djsKICAgICAgICAgbWVtY3B5KCZ0bXBfdHYsIHB0ciwgc2l6ZW9mKHRtcF90dikpOwogCi0gICAgICByZXN0YW1wOgogICAgICAgICB0dnN1Yih0diwgJnRtcF90dik7CiAgICAgICAgIHRyaXB0aW1lID0gdHYtPnR2X3NlYyAqIDEwMDAwMDAgKyB0di0+dHZfdXNlYzsKICAgICAgICAgaWYgKHRyaXB0aW1lIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiB0aW1lIG9mIGRheSBnb2VzIGJhY2sgKCVsZHVzKSwgdGFraW5nIGNvdW50ZXJtZWFzdXJlcy5cbiIsCi0gICAgICAgICAgICAgICAgICAgIHRyaXB0aW1lKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IGludmFsaWQgdGltZXN0YW1wIGluIElDTVAgcmVzcG9uc2UuXG4iKTsKICAgICAgICAgICAgIHRyaXB0aW1lID0gMDsKLSAgICAgICAgICAgIGlmICghKG9wdGlvbnMgJiBGX0xBVEVOQ1kpKSB7Ci0gICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KHR2LCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghKG9wdGlvbnMgJiBGX0xBVEVOQ1kpKQogICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRl9MQVRFTkNZOwotICAgICAgICAgICAgICAgIGdvdG8gcmVzdGFtcDsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIWNzZmFpbGVkKSB7CiAgICAgICAgICAgICAoKnRzdW0pICs9IHRyaXB0aW1lOwpAQCAtNTE3OSwzMiArNTI1MCwzNCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGludCAgICAgICAgICAgICBpOwogICAgICAgICBfX3U4ICAgICAgICAgICAqY3AsICpkcDsKLSAgICAgICAgcHJpbnRmKCIlZCBieXRlcyBmcm9tICVzOiBpY21wX3NlcT0ldSIsIGNjLCBmcm9tLCBzZXEpOworCisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiJWQgYnl0ZXMgZnJvbSAlczogaWNtcF9zZXE9JXUiLCBjYywgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgc2VxKSk7CiAKICAgICAgICAgaWYgKGhvcHMgPj0gMCkKLSAgICAgICAgICAgIHByaW50ZigiIHR0bD0lZCIsIGhvcHMpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgdHRsPSVkIiwgaG9wcykpOwogCiAgICAgICAgIGlmIChjYyA8IGRhdGFsZW4gKyA4KSB7Ci0gICAgICAgICAgICBwcmludGYoIiAodHJ1bmNhdGVkKVxuIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiAodHJ1bmNhdGVkKVxuIikpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRpbWluZykgewogICAgICAgICAgICAgaWYgKHRyaXB0aW1lID49IDEwMDAwMCkKLSAgICAgICAgICAgICAgICBwcmludGYoIiB0aW1lPSVsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgdGltZT0lbGQgbXMiLCB0cmlwdGltZSAvIDEwMDApKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHRyaXB0aW1lID49IDEwMDAwKQotICAgICAgICAgICAgICAgIHByaW50ZigiIHRpbWU9JWxkLiUwMWxkIG1zIiwgdHJpcHRpbWUgLyAxMDAwLAotICAgICAgICAgICAgICAgICAgICAgICAodHJpcHRpbWUgJSAxMDAwKSAvIDEwMCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgdGltZT0lbGQuJTAxbGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXB0aW1lIC8gMTAwMCwgKHRyaXB0aW1lICUgMTAwMCkgLyAxMDApKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHRyaXB0aW1lID49IDEwMDApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgdGltZT0lbGQuJTAybGQgbXMiLCB0cmlwdGltZSAvIDEwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICh0cmlwdGltZSAlIDEwMDApIC8gMTApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiIHRpbWU9JWxkLiUwMmxkIG1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlwdGltZSAvIDEwMDAsICh0cmlwdGltZSAlIDEwMDApIC8gMTApKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIiB0aW1lPSVsZC4lMDNsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUgJSAxMDAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0aW1lPSVsZC4lMDNsZCBtcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUgLyAxMDAwLCB0cmlwdGltZSAlIDEwMDApKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZHVwZmxhZykKLSAgICAgICAgICAgIHByaW50ZigiIChEVVAhKSIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgKERVUCEpIikpOwogICAgICAgICBpZiAoY3NmYWlsZWQpCi0gICAgICAgICAgICBwcmludGYoIiAoQkFEIENIRUNLU1VNISkiKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiIChCQUQgQ0hFQ0tTVU0hKSIpKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayB0aGUgZGF0YSAKQEAgLTUyMTMsMTMgKzUyODYsMTQgQEAKICAgICAgICAgZHAgPSAodV9jaGFyICopJm91dHBhY2tbOCArIHNpemVvZihzdHJ1Y3QgdGltZXZhbCldOwogICAgICAgICBmb3IgKGkgPSBzaXplb2Yoc3RydWN0IHRpbWV2YWwpOyBpIDwgZGF0YWxlbjsgKytpLCArK2NwLCArK2RwKSB7CiAgICAgICAgICAgICBpZiAoKmNwICE9ICpkcCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiXG53cm9uZyBkYXRhIGJ5dGUgIyVkIHNob3VsZCBiZSAweCV4IGJ1dCB3YXMgMHgleCIsCi0gICAgICAgICAgICAgICAgICAgICAgIGksICpkcCwgKmNwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG53cm9uZyBkYXRhIGJ5dGUgIyVkIHNob3VsZCBiZSAweCV4IGJ1dCB3YXMgMHgleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgKmRwLCAqY3ApKTsKICAgICAgICAgICAgICAgICBjcCA9ICh1X2NoYXIgKikgcHRyICsgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKTsKICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzaXplb2Yoc3RydWN0IHRpbWV2YWwpOyBpIDwgZGF0YWxlbjsgKytpLCArK2NwKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoaSAlIDMyKSA9PSBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiMlZFx0IiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXggIiwgKmNwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiXG4jJWRcdCIsIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIleCAiLCAqY3ApKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01MjI3LDEyICs1MzAxLDE2IEBACiAgICAgfQogCiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogIHBpbmdDdGxPd25lckluZGV4ICAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgLyogIHBpbmdDdGxUZXN0TmFtZSAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgIGlmICgoU3RvcmFnZU5ldyA9Ci0gICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpKSA9PSBOVUxMKQorICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmICghU3RvcmFnZU5ldykKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CiAKIApAQCAtNTI0Nyw2ICs1MzI1LDcgQEAKICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1J0dFN1bU9mU3F1YXJlcyA9ICp0c3VtMjsKIAogICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZV90aW1lID0gdGltZXA7CisgICAgZnJlZShTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmUpOwogICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZSA9CiAgICAgICAgIG5ldHNubXBfbWVtZHVwKGRhdGVfbl90aW1lKCZ0aW1lcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZUxlbiksCkBAIC01MzU3LDIwICs1NDM2LDIxIEBACiAKICAgICBwdXRjaGFyKCdcbicpOwogICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHByaW50ZigiLS0tICVzIHBpbmcgc3RhdGlzdGljcyAtLS1cbiIsIGhvc3RuYW1lKTsKKyAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIi0tLSAlcyBwaW5nIHN0YXRpc3RpY3MgLS0tXG4iLCBob3N0bmFtZSkpOwogCiAgICAgaWYgKCpucmVwZWF0cykKLSAgICAgICAgcHJpbnRmKCIsICslbGQgZHVwbGljYXRlcyIsICpucmVwZWF0cyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCArJWxkIGR1cGxpY2F0ZXMiLCAqbnJlcGVhdHMpKTsKICAgICBpZiAoKm5jaGVja3N1bSkKLSAgICAgICAgcHJpbnRmKCIsICslbGQgY29ycnVwdGVkIiwgKm5jaGVja3N1bSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCArJWxkIGNvcnJ1cHRlZCIsICpuY2hlY2tzdW0pKTsKICAgICBpZiAoKm5lcnJvcnMpCi0gICAgICAgIHByaW50ZigiLCArJWxkIGVycm9ycyIsICpuZXJyb3JzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICslbGQgZXJyb3JzIiwgKm5lcnJvcnMpKTsKICAgICBpZiAoKm50cmFuc21pdHRlZCkgewotICAgICAgICBwcmludGYoIiwgJWQlJSBsb3NzIiwKLSAgICAgICAgICAgICAgIChpbnQpICgoKChsb25nIGxvbmcpICgoKm50cmFuc21pdHRlZCkgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqbnJlY2VpdmVkKSkpICogMTAwKSAvCi0gICAgICAgICAgICAgICAgICAgICAgKCpudHJhbnNtaXR0ZWQpKSk7Ci0gICAgICAgIHByaW50ZigiLCB0aW1lICVsZG1zIiwgMTAwMCAqIHR2LnR2X3NlYyArIHR2LnR2X3VzZWMgLyAxMDAwKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICVkJSUgbG9zcyIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpICgoKChsb25nIGxvbmcpICgoKm50cmFuc21pdHRlZCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpucmVjZWl2ZWQpKSkgKiAxMDApIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgqbnRyYW5zbWl0dGVkKSkpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsIHRpbWUgJWxkbXMiLAorICAgICAgICAgICAgICAgICAgICAxMDAwICogdHYudHZfc2VjICsgdHYudHZfdXNlYyAvIDEwMDApKTsKICAgICB9CiAgICAgcHV0Y2hhcignXG4nKTsKIApAQCAtNTM4MSwyMSArNTQ2MSwyMyBAQAogICAgICAgICAoKnRzdW0yKSAvPSAoKm5yZWNlaXZlZCkgKyAoKm5yZXBlYXRzKTsKICAgICAgICAgdG1kZXYgPSBsbHNxcnQoKCp0c3VtMikgLSAoKnRzdW0pICogKCp0c3VtKSk7CiAKLSAgICAgICAgcHJpbnRmCi0gICAgICAgICAgICAoInJ0dCBtaW4vYXZnL21heC9tZGV2ID0gJWxkLiUwM2xkLyVsdS4lMDNsZC8lbGQuJTAzbGQvJWxkLiUwM2xkIG1zIiwKLSAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsCi0gICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpICgoKnRzdW0pIC8gMTAwMCksIChsb25nKSAoKCp0c3VtKSAlIDEwMDApLAotICAgICAgICAgICAgICgqdG1heCkgLyAxMDAwLCAoKnRtYXgpICUgMTAwMCwgdG1kZXYgLyAxMDAwLCB0bWRldiAlIDEwMDApOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInJ0dCBtaW4vYXZnL21heC9tZGV2ID0gJWxkLiUwM2xkLyVsdS4lMDNsZCIKKyAgICAgICAgICAgICAgICAgICAgIi8lbGQuJTAzbGQvJWxkLiUwM2xkIG1zIiwKKyAgICAgICAgICAgICAgICAgICAgKCp0bWluKSAvIDEwMDAsICgqdG1pbikgJSAxMDAwLAorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKCgqdHN1bSkgLyAxMDAwKSwgKGxvbmcpICgoKnRzdW0pICUgMTAwMCksCisgICAgICAgICAgICAgICAgICAgICgqdG1heCkgLyAxMDAwLCAoKnRtYXgpICUgMTAwMCwgdG1kZXYgLyAxMDAwLAorICAgICAgICAgICAgICAgICAgICB0bWRldiAlIDEwMDApKTsKICAgICB9CiAgICAgaWYgKCgqcGlwZXNpemUpID4gMSkKLSAgICAgICAgcHJpbnRmKCIsIHBpcGUgJWQiLCAqcGlwZXNpemUpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgcGlwZSAlZCIsICpwaXBlc2l6ZSkpOwogICAgIGlmICgoKm50cmFuc21pdHRlZCkgPiAxCiAgICAgICAgICYmICghaW50ZXJ2YWwgfHwgKG9wdGlvbnMgJiAoRl9GTE9PRCB8IEZfQURBUFRJVkUpKSkpIHsKICAgICAgICAgaW50ICAgICAgICAgICAgIGlwZyA9CiAgICAgICAgICAgICAoMTAwMDAwMCAqIChsb25nIGxvbmcpIHR2LnR2X3NlYyArCiAgICAgICAgICAgICAgdHYudHZfdXNlYykgLyAoKCpudHJhbnNtaXR0ZWQpIC0gMSk7Ci0gICAgICAgIHByaW50ZigiLCBpcGcvZXdtYSAlZC4lMDNkLyVkLiUwM2QgbXMiLCBpcGcgLyAxMDAwLCBpcGcgJSAxMDAwLAotICAgICAgICAgICAgICAgKCpydHQpIC8gODAwMCwgKCgqcnR0KSAvIDgpICUgMTAwMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBpcGcvZXdtYSAlZC4lMDNkLyVkLiUwM2QgbXMiLAorICAgICAgICAgICAgICAgICAgICBpcGcgLyAxMDAwLCBpcGcgJSAxMDAwLAorICAgICAgICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwKSk7CiAgICAgfQogICAgIHB1dGNoYXIoJ1xuJyk7CiAgICAgcmV0dXJuOwpAQCAtNTQxOCwxOSArNTUwMCwxOSBAQAogICAgICAgICAgICAgKCgobG9uZyBsb25nKSAoKCpudHJhbnNtaXR0ZWQpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqbnJlY2VpdmVkKSkpICogMTAwKSAvICgqbnRyYW5zbWl0dGVkKTsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiXHIlbGQvJWxkIHBhY2tldHMsICVkJSUgbG9zcyIsICpudHJhbnNtaXR0ZWQsCi0gICAgICAgICAgICAqbnJlY2VpdmVkLCBsb3NzKTsKKyAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIlxuJWxkLyVsZCBwYWNrZXRzLCAlZCUlIGxvc3MiLCAqbnRyYW5zbWl0dGVkLAorICAgICAgICAgICAgICAgICpucmVjZWl2ZWQsIGxvc3MpKTsKIAogICAgIGlmICgoKm5yZWNlaXZlZCkgJiYgdGltaW5nKSB7CiAgICAgICAgIHRhdmcgPSAoKnRzdW0pIC8gKCgqbnJlY2VpdmVkKSArICgqbnJlcGVhdHMpKTsKIAotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAiLCBtaW4vYXZnL2V3bWEvbWF4ID0gJWxkLiUwM2xkLyVsdS4lMDNsZC8lZC4lMDNkLyVsZC4lMDNsZCBtcyIsCi0gICAgICAgICAgICAgICAgKCp0bWluKSAvIDEwMDAsICgqdG1pbikgJSAxMDAwLCB0YXZnIC8gMTAwMCwgdGF2ZyAlIDEwMDAsCi0gICAgICAgICAgICAgICAgKCpydHQpIC8gODAwMCwgKCgqcnR0KSAvIDgpICUgMTAwMCwgKCp0bWF4KSAvIDEwMDAsCi0gICAgICAgICAgICAgICAgKCp0bWF4KSAlIDEwMDApOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgbWluL2F2Zy9ld21hL21heCA9ICVsZC4lMDNsZC8lbHUuJTAzbGQiCisgICAgICAgICAgICAgICAgICAgICIvJWQuJTAzZC8lbGQuJTAzbGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsIHRhdmcgLyAxMDAwLCB0YXZnICUgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgKCpydHQpIC8gODAwMCwgKCgqcnR0KSAvIDgpICUgMTAwMCwgKCp0bWF4KSAvIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICgqdG1heCkgJSAxMDAwKSk7CiAgICAgfQotICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIlxuIikpOwogfQogCiAKQEAgLTU0ODgsMTIgKzU1NzAsMTAgQEAKICAgICAgICAgaWYgKG9wdGlvbnMgJiBGX0ZMT09EKQogICAgICAgICAgICAgd3JpdGUoU1RET1VUX0ZJTEVOTywgIkUiLCAxKTsKICAgICAgICAgZWxzZSBpZiAoZS0+ZWVfZXJybm8gIT0gRU1TR1NJWkUpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBpbmc6IGxvY2FsIGVycm9yOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZS0+ZWVfZXJybm8pKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJwaW5nOiBsb2NhbCBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGUtPmVlX2Vycm5vKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAicGluZzogbG9jYWwgZXJyb3I6IE1lc3NhZ2UgdG9vIGxvbmcsIG10dT0ldVxuIiwKLSAgICAgICAgICAgICAgICAgICAgZS0+ZWVfaW5mbyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGluZzogbG9jYWwgZXJyb3I6IE1lc3NhZ2UgdG9vIGxvbmcsIG10dT0ldVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGUtPmVlX2luZm8pOwogICAgICAgICAoKm5lcnJvcnMpKys7CiAgICAgfSBlbHNlIGlmIChlLT5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX0lDTVA2KSB7CiAgICAgICAgIGlmIChyZXMgPCBzaXplb2YoaWNtcGgpIHx8CkBAIC01NjE1LDcgKzU2OTUsNyBAQAogICAgIGljbXBoID0gKHN0cnVjdCBpY21wNl9oZHIgKikgYnVmOwogICAgIGlmIChjYyA8IDgpIHsKICAgICAgICAgaWYgKG9wdGlvbnMgJiBGX1ZFUkJPU0UpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBpbmc6IHBhY2tldCB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwgY2MpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInBpbmc6IHBhY2tldCB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwgY2MpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgaWYgKGljbXBoLT5pY21wNl90eXBlID09IElDTVA2X0VDSE9fUkVQTFkpIHsKQEAgLTU2NjgsMTYgKzU3NDgsMTcgQEAKICAgICAgICAgICAgICAgICB3cml0ZShTVERPVVRfRklMRU5PLCAiXGJFIiwgMik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIkZyb20gJXM6IGljbXBfc2VxPSV1ICIsCi0gICAgICAgICAgICAgICAgICAgcHJfYWRkcigmZnJvbS0+c2luNl9hZGRyLCBvcHRpb25zKSwKLSAgICAgICAgICAgICAgICAgICBpY21waDEtPmljbXA2X3NlcSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIkZyb20gJXM6IGljbXBfc2VxPSV1ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZmcm9tLT5zaW42X2FkZHIsIG9wdGlvbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWNtcGgxLT5pY21wNl9zZXEpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBXZSd2ZSBnb3Qgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gRUNIT1JFUExZIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoIShvcHRpb25zICYgRl9WRVJCT1NFKSB8fCB1aWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBwcmludGYoIkZyb20gJXM6ICIsIHByX2FkZHIoJmZyb20tPnNpbjZfYWRkciwgb3B0aW9ucykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJGcm9tICVzOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJfYWRkcigmZnJvbS0+c2luNl9hZGRyLCBvcHRpb25zKSkpOwogICAgICAgICB9CiAgICAgICAgIC8qIHByX2ljbXBoKGljbXBoLT5pY21wNl90eXBlLCBpY21waC0+aWNtcDZfY29kZSwgbnRvaGwoaWNtcGgtPmljbXA2X210dSkpOyAqLwogICAgIH0KQEAgLTU3NDIsOCArNTgyMyw4IEBACiAgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKIAogICAgIGlmICghKG9wdGlvbnMgJiBGX05VTUVSSUMpKQotICAgICAgICBocCA9IGdldGhvc3RieWFkZHIoKF9fdTggKikgYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9JTkVUNik7CisgICAgICAgIGhwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKChfX3U4ICopIGFkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9JTkVUNik7CiAKICAgICByZXR1cm4gaHAgPyBocC0+aF9uYW1lIDogcHJfYWRkcl9uKGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaAppbmRleCBlYThkYTMxLi5jYTY5ZDEzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaApAQCAtMjA2LDYgKzIwNiw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X3BpbmdDdGxUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9waW5nQ3RsVGFibGUodm9pZCk7CiBGaW5kVmFyTWV0aG9kICAgdmFyX3BpbmdDdGxUYWJsZTsKIHZvaWQgICAgICAgICAgICBwYXJzZV9waW5nQ3RsVGFibGUoY29uc3QgY2hhciAqLCBjaGFyICopOwogU05NUENhbGxiYWNrICAgIHN0b3JlX3BpbmdDdGxUYWJsZTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMKaW5kZXggMzFmYTBiOC4uNzhjNzViZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMKQEAgLTUwLDEwICs1MCwxNCBAQAogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODAsIDEsIDQgfTsKIAogc3RydWN0IHZhcmlhYmxlMiBwaW5nUHJvYmVIaXN0b3J5VGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9QSU5HUFJPQkVISVNUT1JZUkVTUE9OU0UsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0NPTFVNTl9QSU5HUFJPQkVISVNUT1JZU1RBVFVTLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9waW5nUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9QSU5HUFJPQkVISVNUT1JZTEFTVFJDLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9waW5nUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9QSU5HUFJPQkVISVNUT1JZVElNRSwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9waW5nUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA1fX0KKyAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllSRVNQT05TRSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllTVEFUVVMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllMQVNUUkMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllUSU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMKaW5kZXggMWY3MWZkNS4uMTQ0NWQ4NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYwpAQCAtNDksMTYgKzQ5LDI2IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgMyB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHBpbmdSZXN1bHRzVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9QSU5HUkVTVUxUU09QRVJTVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNSU5SVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNQVhSVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNBVkVSQUdFUlRULCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNn19LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNQUk9CRVJFU1BPTlNFUywgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNTRU5UUFJPQkVTLCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOH19LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNSVFRTVU1PRlNRVUFSRVMsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOX19LAotICAgIHtDT0xVTU5fUElOR1JFU1VMVFNMQVNUR09PRFBST0JFLCAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgMTB9fQorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNPUEVSU1RBVFVTLCAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgMX19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNJUFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNJUFRBUkdFVEFERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTTUlOUlRULCAgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTTUFYUlRULCAgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTQVZFUkFHRVJUVCwgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTUFJPQkVSRVNQT05TRVMsICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTU0VOVFBST0JFUywgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTUlRUU1VNT0ZTUVVBUkVTLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7Q09MVU1OX1BJTkdSRVNVTFRTTEFTVEdPT0RQUk9CRSwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDEwfX0KIH07CiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jCmluZGV4IDJlNjdiNzMuLjBjYmRiYzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMKQEAgLTQsMTIgKzQsMTYgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgiCiAjaW5jbHVkZSAiZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfdGltZV90b19zZWNzKQorCiBzdGF0aWMgaW50IHNjaGVkRW50cmllczsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY2hlZENvbmYgbW9kdWxlICovCkBAIC01MSw3ICs1NSw3IEBACiB7CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICAgKnJvdzsKICAgICBzdHJ1Y3Qgc2NoZWRUYWJsZV9lbnRyeSAqZW50cnk7Ci0gICAgY2hhciAgIGJ1ZlsyNF07CisgICAgY2hhciAgIGJ1ZlsyNF0sIHRtcGJ1ZltTUFJJTlRfTUFYX0xFTl07CiAgICAgbG9uZyAgIGZyZXF1ZW5jeTsKICAgICBsb25nICAgdmFsdWU7CiAgICAgc2l6ZV90IHRtcGludDsKQEAgLTY1LDcgKzY5LDEzIEBACiAgICAgLyoKICAgICAgKiAgUGFyc2UgdGhlIGNvbmZpZ3VyZSBkaXJlY3RpdmUgbGluZQogICAgICAqLwotICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX0lOVEVHRVIsICAgbGluZSwgJmZyZXF1ZW5jeSwgJnRtcGludCk7CisgICAgbGluZSA9IGNvcHlfbndvcmQobGluZSwgdG1wYnVmLCBzaXplb2YodG1wYnVmKSk7CisgICAgZnJlcXVlbmN5ID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKHRtcGJ1Zik7CisgICAgaWYgKGZyZXF1ZW5jeSA9PSAtMSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJJbGxlZ2FsIGZyZXF1ZW5jeSBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX09CSkVDVF9JRCwgbGluZSwgJnZhcl9wdHIsICAgJnZhcl9sZW4pOwogICAgIGlmICh2YXJfbGVuID09IDApIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBzcGVjaWZpY2F0aW9uIGZvciBzY2hlZFZhcmlhYmxlIik7CkBAIC03NCwxMSArODQsMTEgQEAKICAgICAvKgogICAgICAqIFNraXAgb3ZlciBvcHRpb25hbCBhc3NpZ25tZW50IGluICJ2YXIgPSB2YWx1ZSIKICAgICAgKi8KLSAgICB3aGlsZSAobGluZSAmJiBpc3NwYWNlKCpsaW5lKSkKKyAgICB3aGlsZSAobGluZSAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqbGluZSkpKQogICAgICAgICBsaW5lKys7CiAgICAgaWYgKGxpbmUgJiYgKmxpbmUgPT0gJz0nICkgewogICAgICAgICBsaW5lKys7Ci0gICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKSB7CisgICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpIHsKICAgICAgICAgICAgIGxpbmUrKzsKICAgICAgICAgfQogICAgIH0KQEAgLTExOSw3ICsxMjksNyBAQAogX3NjaGVkX2NvbnZlcnRfYml0cyggY2hhciAqY3Jvbl9zcGVjLCBjaGFyICpiaXRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgaW50ICBiaXRfYnVmX2xlbiwgaW50IG1heF92YWwsIGludCBzdGFydEF0MSApIHsKICAgICBjaGFyICpjcCA9IGNyb25fc3BlYzsKLSAgICBjaGFyIGJbXSA9IHsweDgwLCAweDQwLCAweDIwLCAweDEwLCAweDA4LCAweDA0LCAweDAyLCAweDAxfTsKKyAgICB1X2NoYXIgYltdID0gezB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDF9OwogICAgIGludCB2YWwsIG1ham9yLCBtaW5vcjsKICAgICBpbnQgb3ZlcnNob290OwogCkBAIC0yMTksMTEgKzIyOSwxMSBAQAogICAgIC8qCiAgICAgICogU2tpcCBvdmVyIG9wdGlvbmFsIGFzc2lnbm1lbnQgaW4gInZhciA9IHZhbHVlIgogICAgICAqLwotICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKQorICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpCiAgICAgICAgIGxpbmUrKzsKICAgICBpZiAoICpsaW5lID09ICc9JyApIHsKICAgICAgICAgbGluZSsrOwotICAgICAgICB3aGlsZSAobGluZSAmJiBpc3NwYWNlKCpsaW5lKSkgeworICAgICAgICB3aGlsZSAobGluZSAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqbGluZSkpKSB7CiAgICAgICAgICAgICBsaW5lKys7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTcsNyArMzY3LDcgQEAKIHsKICAgICBjaGFyICAgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKICAgICBjaGFyICAgICAgICAgICAgICB0aW1lX2JpdHNbMjJdOyAgLyogc2NoZWRXZWVrRGF5Li5zY2hlZE1pbnV0ZSAqLwotICAgIGNoYXIgICAgICAgICAgICAgKmNwdHI7CisgICAgY2hhciAgICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICAgIHRpbnQ7CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKQEAgLTM4NywxMiArMzk3LDEyIEBACiAgICAgICAgIHN0cmNweShsaW5lLCAiX3NjaGVkVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWRPd25lcjsgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWROYW1lOyAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWREZXNjcjsgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+c2NoZWRPd25lcjsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+c2NoZWROYW1lOyAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+c2NoZWREZXNjcjsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+c2NoZWRJbnRlcnZhbDsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKIApAQCAtNDA4LDggKzQxOCw4IEBACiAgICAgICAgIHZwICAgPSB0aW1lX2JpdHM7ICAgIHRpbnQgPSAyMjsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWRDb250ZXh0TmFtZTsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZENvbnRleHROYW1lOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB2cCAgID0gZW50cnktPnNjaGVkVmFyaWFibGU7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+c2NoZWRWYXJpYWJsZV9sZW47CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQkpFQ1RfSUQsIGNwdHIsICZ2cCwgICZ0aW50ICk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMKaW5kZXggNDA1NWQ0Ni4uYzNkYjM0ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYwpAQCAtNCwxMyArNCwzNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgiCiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzY2hlZF9uZXh0cm93dGltZSwgbmV0c25tcF91bnVzZWQpCisKIG5ldHNubXBfdGRhdGEgKnNjaGVkdWxlX3RhYmxlOwogCisKKyNpZiAhZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSAmJiAhZGVmaW5lZChsb2NhbHRpbWVfcikKKy8qCisgKiBsb2NhbHRpbWVfcigpIHJlcGxhY2VtZW50IGZvciBvbGRlciBNaW5HVyB2ZXJzaW9ucy4KKyAqIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IHRocmVhZC1zYWZlLCB3aGlsZSBpdCBzaG91bGQuCisgKi8KK3N0cnVjdCB0bSAgICAgICoKK2xvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqIHRpbWVyLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKK3sKKyAgICBzdHJ1Y3QgdG0gICAgICAqcmVzdWx0X3A7CisKKyAgICByZXN1bHRfcCA9IGxvY2FsdGltZSh0aW1lcik7CisgICAgaWYgKHJlc3VsdCAmJiByZXN1bHRfcCkKKyAgICAgICAgKnJlc3VsdCA9ICpyZXN1bHRfcDsKKyAgICByZXR1cm4gcmVzdWx0X3A7Cit9CisjZW5kaWYKKworCiAgICAgLyoKICAgICAgKiBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIHRoZSBzY2hlZHVsZSB0YWJsZSwKICAgICAgKiByZWdhcmRsZXNzIG9mIHdoaWNoIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUgaXMgY2FsbGVkIGZpcnN0LgpAQCAtMjIsNyArNDYsNyBAQAogICAgIGlmICghc2NoZWR1bGVfdGFibGUpIHsKICAgICAgICAgc2NoZWR1bGVfdGFibGUgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgic2NoZWRUYWJsZSIsIDApOwogICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOmluaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZSBzY2hlZHVsZSBjb250YWluZXIoJXgpXG4iLCBzY2hlZHVsZV90YWJsZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZSBzY2hlZHVsZSBjb250YWluZXIoJXApXG4iLCBzY2hlZHVsZV90YWJsZSkpOwogICAgIH0KIH0KIApAQCAtNTMsMTMgKzc3LDEzIEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6Y2FsbGJhY2siLCAibWlzc2luZyBlbnRyeVxuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVudHJ5LT5zY2hlZExhc3RSdW4gPSB0aW1lKDApOworICAgIGVudHJ5LT5zY2hlZExhc3RSdW4gPSB0aW1lKE5VTEwpOwogICAgIGVudHJ5LT5zY2hlZFRyaWdnZXJzKys7CiAKICAgICBERUJVR01TR1RMKCggImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICJhc3NpZ25tZW50ICIpKTsKICAgICBERUJVR01TR09JRCgoImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsIGVudHJ5LT5zY2hlZFZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkVmFyaWFibGVfbGVuKSk7Ci0gICAgREVCVUdNU0coKCAgICJkaXNtYW46c2NoZWR1bGU6Y2FsbGJhY2siLCAiID0gJWRcbiIsIGVudHJ5LT5zY2hlZFZhbHVlKSk7CisgICAgREVCVUdNU0coKCAgICJkaXNtYW46c2NoZWR1bGU6Y2FsbGJhY2siLCAiID0gJWxkXG4iLCBlbnRyeS0+c2NoZWRWYWx1ZSkpOwogCiAgICAgbWVtc2V0KCZhc3NpZ24sIDAsIHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKICAgICBzbm1wX3NldF92YXJfb2JqaWQoJmFzc2lnbiwgZW50cnktPnNjaGVkVmFyaWFibGUsIGVudHJ5LT5zY2hlZFZhcmlhYmxlX2xlbik7CkBAIC04NCwxMCArMTA4LDEwIEBACiAgICAgICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcyB0byBoZWxwIGludGVycHJldAogICAgICAqICBjYWxlbmRhci1iYXNlZCBzY2hlZHVsZSBiaXQgc3RyaW5ncwogICAgICAqLwotc3RhdGljIGNoYXIgX21hc2tzW10gPSB7IC8qIDB4ZmYsICovIDB4N2YsIDB4M2YsIDB4MWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwZiwgMHgwNywgMHgwMywgMHgwMSwgMHgwMCB9Owotc3RhdGljIGNoYXIgX2JpdHNbXSAgPSB7IDB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMSB9Oworc3RhdGljIHVfY2hhciBfbWFza3NbXSA9IHsgLyogMHhmZiwgKi8gMHg3ZiwgMHgzZiwgMHgxZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGYsIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDAgfTsKK3N0YXRpYyB1X2NoYXIgX2JpdHNbXSAgPSB7IDB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAweDA0LCAweDAyLCAweDAxIH07CiAKIC8qCiAgKiBBcmUgYW55IG9mIHRoZSBiaXRzIHNldD8KQEAgLTE0Niw3ICsxNzAsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBMb29rIGZvciB0aGUgZmlyc3QgYml0IHRoYXQncyBzZXQKICAgICAgICAgICovCi0gICAgZm9yICggaT0wOyBpPGxlbjsgaSsrICkgeworICAgIGZvciAoIGk9MDsgaTwoaW50KWxlbjsgaSsrICkgewogICAgICAgICBpZiAoIGJ1ZltpXSAhPSAwICkgewogICAgICAgICAgICAgbWFqb3IgPSBpKjg7CiAgICAgICAgICAgICBmb3IgKCBqPTA7IGo8ODsgaisrICkgewpAQCAtMTY0LDkgKzE4OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEsIDMwLCAzMSwgMzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAsIDMxLCAzMCwgMzEsIDI5IH07CiAKLXN0YXRpYyBjaGFyIF90cnVuY2F0ZVtdID0geyAweGZlLCAweGYwLCAweGZlLCAweGZjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ZmMsIDB4ZmUsIDB4ZmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYywgMHhmZSwgMHhmYywgMHhmZSwgMHhmOCB9Oworc3RhdGljIHVfY2hhciBfdHJ1bmNhdGVbXSA9IHsgMHhmZSwgMHhmMCwgMHhmZSwgMHhmYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ZmMsIDB4ZmUsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjLCAweGZlLCAweGZjLCAweGZlLCAweGY4IH07CiAKIC8qCiAgKiBXaGF0IGlzIHRoZSBuZXh0IGRheSB3aXRoIGEgcmVsZXZhbnQgYml0IHNldD8KQEAgLTIzOSwyMCArMjYzLDYgQEAKIH0KIAogCi0jaWZuZGVmIEhBVkVfTE9DQUxUSU1FX1IKLXN0cnVjdCB0bSAqCi1sb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkgewotICAgIHN0cnVjdCB0bSAqdG1wOwotCi0gICAgdG1wID0gbG9jYWx0aW1lKCB0aW1lcCApOwotICAgIGlmICggdG1wICYmIHJlc3VsdCApIHsKLSAgICAgICAgbWVtY3B5KCByZXN1bHQsIHRtcCwgc2l6ZW9mKHN0cnVjdCB0bSkpOwotICAgIH0KLQotICAgIHJldHVybiAodG1wID8gcmVzdWx0IDogTlVMTCApOwotfQotI2VuZGlmCi0KIC8qCiAgKiBkZXRlcm1pbmUgdGhlIHRpbWUgZm9yIHRoZSBuZXh0IHNjaGVkdWxlZCBhY3Rpb24gb2YgYSBnaXZlbiBlbnRyeQogICovCkBAIC0yOTEsMTYgKzMwMSwxNSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4gPSBub3cgKyBlbnRyeS0+c2NoZWRJbnRlcnZhbDsKICAgICAgICAgfQotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAicGVyaW9kaWM6ICglZCkgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdGltZSgmZW50cnktPnNjaGVkTmV4dFJ1bikpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgInBlcmlvZGljOiAoJWxkKSAlcyIsCisgICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeS0+c2NoZWROZXh0UnVuLCBjdGltZSgmZW50cnktPnNjaGVkTmV4dFJ1bikpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNDSEVEX1RZUEVfT05FU0hPVDoKICAgICAgICAgaWYgKCBlbnRyeS0+c2NoZWRMYXN0UnVuICkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgIm9uZS1zaG90OiBleHBpcmVkICglZCkgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdGltZSgmZW50cnktPnNjaGVkTmV4dFJ1bikpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJvbmUtc2hvdDogZXhwaXJlZCAoJWxkKSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgZW50cnktPnNjaGVkTmV4dFJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCkBAIC0zMzcsOCArMzQ2LDggQEAKICAgICAgICAgICogICAgdGhlIGZpcnN0IHNwZWNpZmllZCBkYXkgKGluIHRoYXQgbW9udGgpCiAgICAgICAgICAqLwogCi0gICAgICAgIGxvY2FsdGltZV9yKCAmbm93LCAmbm93X3RtICk7Ci0gICAgICAgIGxvY2FsdGltZV9yKCAmbm93LCAmbmV4dF90bSApOworICAgICAgICAodm9pZCkgbG9jYWx0aW1lX3IoICZub3csICZub3dfdG0gKTsKKyAgICAgICAgKHZvaWQpIGxvY2FsdGltZV9yKCAmbm93LCAmbmV4dF90bSApOwogCiAgICAgICAgIG5leHRfdG0udG1fbW9uPS0xOwogICAgICAgICBuZXh0X3RtLnRtX21kYXk9LTE7CkBAIC00MTQsMTMgKzQyMywxMiBAQAogICAgICAgICAgKiAnbmV4dF90bScgbm93IGNvbnRhaW5zIHRoZSB0aW1lIGZvciB0aGUgbmV4dCBzY2hlZHVsZWQgcnVuCiAgICAgICAgICAqLwogICAgICAgICBlbnRyeS0+c2NoZWROZXh0UnVuID0gbWt0aW1lKCAmbmV4dF90bSApOwotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAiY2FsZW5kYXI6ICglZCkgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdGltZSgmZW50cnktPnNjaGVkTmV4dFJ1bikpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgImNhbGVuZGFyOiAoJWxkKSAlcyIsCisgICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeS0+c2NoZWROZXh0UnVuLCBjdGltZSgmZW50cnktPnNjaGVkTmV4dFJ1bikpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgInVua25vd24gdHlwZSAoJWQpXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAidW5rbm93biB0eXBlICglbGQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkVHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDMwLDExICs0MzgsMTMgQEAKICAgICByZXR1cm47CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TQ0hFRF9ORVhUUk9XVElNRQogdm9pZAogc2NoZWRfbmV4dFJvd1RpbWUoIG5ldHNubXBfdGRhdGFfcm93ICpyb3cgKQogewogICAgIHNjaGVkX25leHRUaW1lKChzdHJ1Y3Qgc2NoZWRUYWJsZV9lbnRyeSAqKSByb3ctPmRhdGEgKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NDSEVEX05FWFRST1dUSU1FICovCiAKIC8qCiAgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jCmluZGV4IGI4ZTM2ZDcuLmJiYTQ4ZmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYwpAQCAtNywxMiArNywyNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAjaW5jbHVkZSAiZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5oIgogI2luY2x1ZGUgImRpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl91aW50KQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjaGVkVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X3NjaGVkVGFibGUodm9pZCkKQEAgLTIwLDcgKzM1LDYgQEAKICAgICBzdGF0aWMgb2lkICAgICAgc2NoZWRUYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNjMsIDEsIDIgfTsKICAgICBzaXplX3QgICAgICAgICAgc2NoZWRUYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChzY2hlZFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOmluaXQiLCAiSW5pdGlhbGl6aW5nIHRhYmxlXG4iKSk7CiAgICAgLyoKQEAgLTQ4LDYgKzYyLDE0IEBACiAgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIHNjaGVkdWxlX3RhYmxlLCB0YWJsZV9pbmZvKTsKIH0KIAordm9pZAorc2h1dGRvd25fc2NoZWRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY2hlZFRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTE2NSw3ICsxODcsNyBAQAogICAgICAgICAgICAgICAgICAqIENvbnZlcnQgJ3NjaGVkTGFzdEZhaWxlZCcgdGltZXN0YW1wCiAgICAgICAgICAgICAgICAgICogICBpbnRvIERhdGVBbmRUaW1lIHN0cmluZwogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNwID0gZGF0ZV9uX3RpbWUoICZlbnRyeS0+c2NoZWRMYXN0RmFpbGVkLCAmbGVuICk7CisgICAgICAgICAgICAgICAgY3AgPSAoY2hhciAqKSBkYXRlX25fdGltZSggJmVudHJ5LT5zY2hlZExhc3RGYWlsZWQsICZsZW4gKTsKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCwgbGVuKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCmluZGV4IGVmZDFmMmUuLjUyMDMzYmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaApAQCAtOCw2ICs4LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfc2NoZWRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY2hlZFRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2NoZWRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYwppbmRleCA0MmYyNGRjLi5iOTI1YzVlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYwpAQCAtMTgsMTAgKzE4LDE1IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogI2luY2x1ZGUgInRyYWNlUm91dGVDdGxUYWJsZS5oIgogI2luY2x1ZGUgInRyYWNlUm91dGVSZXN1bHRzVGFibGUuaCIKICNpbmNsdWRlICJ0cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuaCIKQEAgLTQxLDMxICs0Niw1NiBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExCWVBBU1NST1VURVRBQkxFLCAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDV9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExEQVRBU0laRSwgICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRJTUVPVVQsICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMUFJPQkVTUEVSSE9QLCBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDh9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExQT1JULCAgICAgICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgOX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1BWFRUTCwgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxMH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERTRklFTEQsICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxMX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNPVVJDRUFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTJ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTT1VSQ0VBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEzfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMSUZJTkRFWCwgICAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUlTQ09QVElPTlMsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE1fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUFYRkFJTFVSRVMsICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMRE9OVEZSQUdNRU5ULCAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMSU5JVElBTFRUTCwgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE4fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMRlJFUVVFTkNZLCAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDE5fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU1RPUkFHRVRZUEUsICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDIwfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQURNSU5TVEFUVVMsICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDIxfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMREVTQ1IsICAgICAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDIyfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUFYUk9XUywgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDIzfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVFJBUEdFTkVSQVRJT04sICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTENSRUFURUhPUFNFTlRSSUVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjV9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUWVBFLCAgICAgICAgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjZ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExST1dTVEFUVVMsICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjd9fQorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEJZUEFTU1JPVVRFVEFCTEUsICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERBVEFTSVpFLCAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVElNRU9VVCwgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExQUk9CRVNQRVJIT1AsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFBPUlQsICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA5fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUFYVFRMLCAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEwfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMRFNGSUVMRCwgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDExfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU09VUkNFQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxMn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNPVVJDRUFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTN9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJRklOREVYLCAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNSVNDT1BUSU9OUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTV9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhGQUlMVVJFUywgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTZ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExET05URlJBR01FTlQsICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTd9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJTklUSUFMVFRMLCAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTh9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExGUkVRVUVOQ1ksICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTl9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTVE9SQUdFVFlQRSwgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjB9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExBRE1JTlNUQVRVUywgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjF9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExERVNDUiwgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjJ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhST1dTLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjN9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUUkFQR0VORVJBVElPTiwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQ1JFQVRFSE9QU0VOVFJJRVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRZUEUsICAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFJPV1NUQVRVUywgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyN319CiAKIH07CiAKQEAgLTEyNiw3ICsxNTYsOCBAQAogICAgICAgICBleGl0KDEpOwogICAgIH0KIAotICAgIGJ6ZXJvKGhvc3QsIHNpemVvZihjaGFyKSAqIChpdGVtLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzc0xlbiArIDEpKTsKKyAgICBtZW1zZXQoaG9zdCwgJ1wwJywKKwkgICBzaXplb2YoY2hhcikgKiAoaXRlbS0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3NMZW4gKyAxKSk7CiAgICAgc3RyY3B5KGhvc3QsIGl0ZW0tPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzKTsKICAgICBob3N0W2l0ZW0tPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzTGVuXSA9ICdcMCc7CiAKQEAgLTIxOSw3ICsyNTAsNyBAQAogICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwogICAgICAgICAvKiBzdHJ1Y3QgaG9zdGVudiBocDsgKi8KICAgICAgICAgY2hhciAgICAgICAgICAgIHBhWzY0XTsKLSAgICAgICAgYnplcm8ocGEsIDY0KTsKKyAgICAgICAgbWVtc2V0KHBhLCAnXDAnLCA2NCk7CiAKICAgICAgICAgdG8tPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CiAgICAgICAgIHRvLT5zaW42X3BvcnQgPSBodG9ucygzMzQzNCk7CkBAIC0yMzQsNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnplcm8oU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsCisgICAgICAgICAgICBtZW1zZXQoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsICdcMCcsCiAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhcikgKiAoc3RybGVuKGhvc3QpICsgMSkpOwogICAgICAgICAgICAgbWVtY3B5KFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVSZXN1bHRzSXBUZ3RBZGRyLCBob3N0LAogICAgICAgICAgICAgICAgICAgIHN0cmxlbihob3N0KSArIDEpOwpAQCAtMjU1LDcgKzI4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwogICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiemVybyhTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwKKyAgICAgICAgICAgICAgICBtZW1zZXQoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsICdcMCcsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoYXIpICogKHN0cmxlbihob3N0KSArIDEpKTsKICAgICAgICAgICAgICAgICBtZW1jcHkoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsIGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oaG9zdG5hbWUpICsgMSk7CkBAIC02OTIsNyArNzIzLDcgQEAKICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXhMZW4pOyAgIC8qIHRyYWNlUm91dGVDdGxPd25lckluZGV4ICovCiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lLCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWVMZW4pOyAgICAgICAvKiB0cmFjZVJvdXRlQ3RsT3BlcmF0aW9uTmFtZSAqLwogCi0gICAgYnplcm8obmV3b2lkLCBzaXplb2Yob2lkKSAqIE1BWF9PSURfTEVOKTsKKyAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBzaXplb2Yob2lkKSAqIE1BWF9PSURfTEVOKTsKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFycyk7CiAKICAgICBmb3IgKGhjaWxhc3QgPSBoY2lwdHIyID0gdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlU3RvcmFnZTsKQEAgLTEzMjYsNyArMTM1Nyw3IEBACiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXgsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4TGVuKTsgICAvKiB0cmFjZVJvdXRlQ3RsT3duZXJJbmRleCAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZSwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lTGVuKTsgICAgICAgLyogdHJhY2VSb3V0ZUN0bFRlc3ROYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKIAogICAgIGZvciAoaGNpcHRyMiA9IHRyYWNlUm91dGVSZXN1bHRzVGFibGVTdG9yYWdlOyBoY2lwdHIyICE9IE5VTEw7CkBAIC0xMzU3LDcgKzEzODgsNyBAQAogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4LCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleExlbik7ICAgLyogdHJhY2VSb3V0ZUN0bE93bmVySW5kZXggKi8KICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZUxlbik7ICAgICAgIC8qIHRyYWNlUm91dGVDdGxPcGVyYXRpb25OYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogCiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCkBAIC0xMzg4LDcgKzE0MTksNyBAQAogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4LCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleExlbik7ICAgLyogdHJhY2VSb3V0ZUN0bE93bmVySW5kZXggKi8KICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZUxlbik7ICAgICAgIC8qIHRyYWNlUm91dGVDdGxUZXN0TmFtZSAqLwogCi0gICAgYnplcm8obmV3b2lkLCBzaXplb2Yob2lkKSAqIE1BWF9PSURfTEVOKTsKKyAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBzaXplb2Yob2lkKSAqIE1BWF9PSURfTEVOKTsKIAogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKIApAQCAtMTQ0Nyw3ICsxNDc4LDcgQEAKICAgICAvKgogICAgICAqIHRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzIAogICAgICAqLwotICAgIGJ6ZXJvKG5ld29pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MpIC8KQEAgLTE0NjEsNyArMTQ5Miw3IEBACiAKICAgICBmb3IgKGhjaXB0ciA9IHRyYWNlUm91dGVIb3BzVGFibGVTdG9yYWdlOyBoY2lwdHIgIT0gTlVMTDsKICAgICAgICAgIGhjaXB0ciA9IGhjaXB0ci0+bmV4dCkgewotICAgICAgICBiemVybyhpbmRleG9pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisJbWVtc2V0KGluZGV4b2lkLCAnXDAnLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKGluZGV4b2lkLCAmaW5kZXhvaWRfbGVuLCBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycyk7CiAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlCkBAIC0xNDcwLDEzICsxNTAxLDEzIEBACiAgICAgICAgICAgICAgICAgKHN0cnVjdCB0cmFjZVJvdXRlSG9wc1RhYmxlX2RhdGEgKikKICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZXRfZnJvbV9vaWQodHJhY2VSb3V0ZUhvcHNUYWJsZVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhjaXB0ci0+bmFtZSwgaGNpcHRyLT5uYW1lbGVuKTsKLSAgICAgICAgICAgIGJ6ZXJvKHRlbXBvaWQsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgbWVtc2V0KHRlbXBvaWQsICdcMCcsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOwogICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKHRlbXBvaWQsICZ0ZW1wb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZVJvdXRlSG9wc0lwVGdBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0cmFjZVJvdXRlSG9wc0lwVGdBZGRyZXNzKSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCksIHZhcnMpOwogICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyX2hvcHMsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJlN0b3JhZ2VIb3BzLT50cmFjZVJvdXRlSG9wc0hvcEluZGV4LCBzaXplb2YoU3RvcmFnZUhvcHMtPnRyYWNlUm91dGVIb3BzSG9wSW5kZXgpKTsgICAgLyogdHJhY2VSb3V0ZUN0bFRlc3ROYW1lICovCi0gICAgICAgICAgICBiemVybyhuZXdvaWQsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgdGVtcG9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb2lkX2xlbiwgdmFyX2hvcHMpOwogICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyX2xpc3QsIG5ld29pZCwgbmV3b2lkX2xlbiwKQEAgLTE1ODAsNiArMTYxMSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNjY4LDggKzE3MDAsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzcyk7Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzID0gTlVMTDsKLQogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzcyA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3NMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMTY4MSw3ICsxNzExLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE3NjMsNiArMTc5Myw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xODQ3LDYgKzE4NzgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTkzNCw2ICsxOTY2LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIwMjMsNiArMjA1Niw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yMTAyLDcgKzIxMzYsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yMTg5LDYgKzIyMjMsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjI3MCw2ICsyMzA1LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIzNTEsNiArMjM4Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNDM1LDcgKzI0NzIsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsU291cmNlQWRkcmVzcyk7Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxTb3VyY2VBZGRyZXNzID0gTlVMTDsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFNvdXJjZUFkZHJlc3MgPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxTb3VyY2VBZGRyZXNzTGVuID0gdG1wbGVuOwogICAgICAgICBicmVhazsKQEAgLTI0NDcsNyArMjQ4Myw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7Ci0gICAgICAgIHRtcHZhciA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNTMxLDYgKzI1NjcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjYxNiw3ICsyNjUzLDYgQEAKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bE1pc2NPcHRpb25zKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bE1pc2NPcHRpb25zID0gTlVMTDsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bE1pc2NPcHRpb25zID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnNMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMjYyOCw3ICsyNjY0LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI3MTIsNiArMjc0OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNzk3LDYgKzI4MzQsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjg4Myw2ICsyOTIxLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI5NjQsNiArMzAwMyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMDU3LDYgKzMwOTcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzE3Myw2ICszMjE0LDcgQEAKICAgICAgICAgICAgICAgICBtb2RpZnlfdHJSZXN1bHRzT3BlcihTdG9yYWdlVG1wLCAyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzI2MCw3ICszMzAyLDYgQEAKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bERlc2NyKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bERlc2NyID0gTlVMTDsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bERlc2NyID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3JMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMzI3Miw3ICszMzEzLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMzNTcsNiArMzM5OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNDQyLDcgKzM0ODQsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHJhcEdlbmVyYXRpb24pOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHJhcEdlbmVyYXRpb24gPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHJhcEdlbmVyYXRpb24gPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbkxlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0zNDU0LDcgKzM0OTUsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzUzNiw2ICszNTc3LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM2MTcsNyArMzY1OSw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUeXBlKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFR5cGUgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHlwZSA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFR5cGVMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMzYyOSw3ICszNjcwLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM5OTQsNiArNDAzNSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNDA5MywxMSArNDEzNSw3IEBACiAgICAgICAgIGZyZWVob3N0aW5mbyhoaSk7CiAKIAotI2lmZGVmIEhBVkVfU0VUTElORUJVRgotICAgICAgICBzZXRsaW5lYnVmKHN0ZG91dCk7Ci0jZWxzZQotICAgICAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTEJGLCAwKTsKLSNlbmRpZgorICAgICAgICBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhzdGRvdXQpOwogCiAgICAgICAgIG91dGlwID0gKHN0cnVjdCBpcCAqKSBtYWxsb2MocGFja2xlbik7CiAgICAgICAgIGlmIChvdXRpcCA9PSBOVUxMKSB7CkBAIC00OTM5LDcgKzQ5NzcsNyBAQAogCiAgICAgICAgIHNldGxpbmVidWYoc3Rkb3V0KTsKIAotICAgICAgICAodm9pZCkgYnplcm8oKGNoYXIgKikgJndoZXJldG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIG1lbXNldCgmd2hlcmV0bywgJ1wwJywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKIAogICAgICAgICB0by0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICAgICAgdG8tPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOwpAQCAtNTAzNiw3ICs1MDc0LDcgQEAKICAgICAgICAgICAgIHNhZGRyLnNpbjZfcG9ydCA9IDA7CiAgICAgICAgICAgICBjbG9zZShwcm9iZV9mZCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAodm9pZCkgYnplcm8oKGNoYXIgKikgJnNhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICAgICAgbWVtc2V0KCZzYWRkciwgJ1wwJywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKICAgICAgICAgICAgIHNhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CiAgICAgICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBzb3VyY2UsICZzYWRkci5zaW42X2FkZHIpIDwgMCkgewogICAgICAgICAgICAgICAgIFByaW50ZigidHJhY2Vyb3V0ZTogdW5rbm93biBhZGRyICVzXG4iLCBzb3VyY2UpOwpAQCAtNTk0MSw3ICs1OTc5LDcgQEAKICAgICAgICAgcmV0dXJuIChoaSk7CiAgICAgfQogCi0gICAgaHAgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKKyAgICBocCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSk7CiAgICAgaWYgKGhwID09IE5VTEwpIHsKICAgICAgICAgRnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBob3N0ICVzXG4iLCAidHJhY2Vyb3V0ZSIsIGhvc3RuYW1lKTsKICAgICAgICAgcHJpbnRmKCJocD1OVUxMXG4iKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgKaW5kZXggMGJlOGRjNC4uMDcxMTk3OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgKQEAgLTUyNSw3ICs1MjUsNyBAQAogI2RlZmluZSBGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdIHw9ICgxIDw8ICgobikgJSBORkRCSVRTKSkpCiAjZGVmaW5lIEZEX0NMUihuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCiAjZGVmaW5lIEZEX0lTU0VUKG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8PCAoKG4pICUgTkZEQklUUykpKQotI2RlZmluZSBGRF9aRVJPKHApICAgICAgYnplcm8oKGNoYXIgKikocCksIHNpemVvZigqKHApKSkKKyNkZWZpbmUgRkRfWkVSTyhwKSAgICAgIG1lbXNldCgocCksICdcMCcsIHNpemVvZigqKHApKSkKICNlbmRpZgogCiAjZGVmaW5lIEZwcmludGYgKHZvaWQpZnByaW50ZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jCmluZGV4IDI5NmRkNTMuLjc2Mzc1N2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMKQEAgLTQwLDE1ICs0MCwyNCBAQAogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODEsIDEsIDUgfTsKIAogc3RydWN0IHZhcmlhYmxlMiB0cmFjZVJvdXRlSG9wc1RhYmxlX3ZhcmlhYmxlc1tdID0gewotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNJUFRHVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgMn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNJUFRHVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgM319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNNSU5SVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNNQVhSVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNBVkVSQUdFUlRULCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNSVFRTVU1PRlNRVUFSRVMsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNTRU5UUFJPQkVTLCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgOH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNQUk9CRVJFU1BPTlNFUywgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgOX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNMQVNUR09PRFBST0JFLCAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgMTB9fQorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNJUFRHVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNJUFRHVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNNSU5SVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNNQVhSVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNBVkVSQUdFUlRULCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNSVFRTVU1PRlNRVUFSRVMsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNTRU5UUFJPQkVTLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgOH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNQUk9CRVJFU1BPTlNFUywgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgOX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUhPUFNMQVNUR09PRFBST0JFLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlSG9wc1RhYmxlLCAyLCB7MSwgMTB9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jCmluZGV4IGYzYjdjZTYuLjBiNDEwYzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jCkBAIC0zOSwxMiArMzksMTggQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgxLCAxLCA0IH07CiAKIHN0cnVjdCB2YXJpYWJsZTIgdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlX3ZhcmlhYmxlc1tdID0gewotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWUhBRERSVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWUhBRERSLCAgIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWVJFU1BPTlNFLCBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWVNUQVRVUywgICAgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWUxBU1RSQywgICAgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgOH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVBST0JFSElTVE9SWVRJTUUsICAgIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgOX19CisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFJUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFIsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZUkVTUE9OU0UsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZU1RBVFVTLCAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZTEFTVFJDLCAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZVElNRSwgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA5fX0KIH07CiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jCmluZGV4IGQ1NjJhZGMuLmFiYTZjZjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMKQEAgLTE4LDYgKzE4LDggQEAKIAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKwogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtNDAsNiArNDIsOCBAQAogI2luY2x1ZGUgInRyYWNlUm91dGVIb3BzVGFibGUuaCIKICNpbmNsdWRlICJoZWFkZXJfY29tcGxleC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorCiAvKgogICp0cmFjZVJvdXRlUmVzdWx0c1RhYmxlX3ZhcmlhYmxlc19vaWQ6CiAgKgpAQCAtNDgsMTQgKzUyLDIyIEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MSwgMSwgMyB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHRyYWNlUm91dGVSZXN1bHRzVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU09QRVJTVEFUVVMsICAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgMX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNDVVJIT1BDT1VOVCwgICAgICBBU05fR0FVR0UsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTQ1VSUFJPQkVDT1VOVCwgICAgQVNOX0dBVUdFLCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0lQVEdUQUREUlRZUEUsICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNJUFRHVEFERFIsICAgIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDV9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTVEVTVEFUVEVNUFRTLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU1RFU1RTVUNDRVNTRVMsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNMQVNUR09PRFBBVEgsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDh9fQorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNPUEVSU1RBVFVTLCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDF9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTQ1VSSE9QQ09VTlQsICAgICAgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0NVUlBST0JFQ09VTlQsICAgIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNJUFRHVEFERFJUWVBFLCAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTSVBUR1RBRERSLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU1RFU1RBVFRFTVBUUywgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNURVNUU1VDQ0VTU0VTLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTTEFTVEdPT0RQQVRILCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA4fX0KIH07CiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNGUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmgKQEAgLTAsMCArMSw3IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlKQorY29uZmlnX2FkZF9taWIoRXRoZXJMaWtlLU1JQikKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyYjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzLmgKQEAgLTAsMCArMSw3IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCisjaWYgZGVmaW5lZChsaW51eCkKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWI2OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYwpAQCAtMCwwICsxLDkzMCBAQAorLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oIgorI2luY2x1ZGUgImV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKyNpbmNsdWRlICJldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaCIKKworLyoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBnZXRpZmFkZHJzIGZhaWxlZCAKKyAqIEByZXR2YWwgLTIgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KKworc3RydWN0IGlmbmFtZSAqCitkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCwgaW50ICpyZXR2YWwpCit7CisgICAgc3RydWN0IGlmYWRkcnMgKmFkZHJzID0gTlVMTCwgKnAgPSBOVUxMOworICAgIHN0cnVjdCBpZm5hbWUgKm5hbWVwdHIxPU5VTEwsICpuYW1lcHRyMiA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKGdldGlmYWRkcnMoJmFkZHJzKSkgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiZ2V0aWZhZGRycyBmYWlsZWRcbiIpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIGdldGlmYWRkcnMgZmFpbGVkXG4iKTsKKyAgICAgICAgKnJldHZhbCA9IC0xOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmb3IgKHAgPSBhZGRyczsgcDsgcCA9IHAtPmlmYV9uZXh0KSB7CisKKyAgICAgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgICAgIGxpc3RfaGVhZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGlmbmFtZSkpOworICAgICAgICAgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICAgICAgICAgICAgICpyZXR2YWwgPSAtMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbXNldChsaXN0X2hlYWQsIDAsIHNpemVvZiAoc3RydWN0IGlmbmFtZSkpOworICAgICAgICAgICAgc3RybGNweShsaXN0X2hlYWQtPm5hbWUsIHAtPmlmYV9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICBmb3IgKG5hbWVwdHIxID0gbGlzdF9oZWFkOyBuYW1lcHRyMTsgbmFtZXB0cjIgPSBuYW1lcHRyMSwgbmFtZXB0cjEgPSBuYW1lcHRyMS0+aWZuX25leHQpCisgICAgICAgICAgICBpZiAoIXN0cm5jbXAocC0+aWZhX25hbWUsIG5hbWVwdHIxLT5uYW1lLCBJRl9OQU1FU0laRSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG5hbWVwdHIxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbmFtZXB0cjItPmlmbl9uZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgIGlmICghbmFtZXB0cjItPmlmbl9uZXh0KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9uYW1lX2xpc3RfZ2V0LCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgZG90M3N0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSAobGlzdF9oZWFkKTsKKyAgICAgICAgICAgIGZyZWVpZmFkZHJzKGFkZHJzKTsKKyAgICAgICAgICAgICpyZXR2YWwgPSAtMjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG5hbWVwdHIyID0gbmFtZXB0cjItPmlmbl9uZXh0OworICAgICAgICBtZW1zZXQobmFtZXB0cjIsIDAsIHNpemVvZiAoc3RydWN0IGlmbmFtZSkpOworICAgICAgICBzdHJsY3B5KG5hbWVwdHIyLT5uYW1lLCBwLT5pZmFfbmFtZSwgSUZfTkFNRVNJWkUpOworICAgICAgICBjb250aW51ZTsKKworICAgIH0KKworICAgIGZyZWVpZmFkZHJzKGFkZHJzKTsKKyAgICByZXR1cm4gbGlzdF9oZWFkOworfQorCisvKgorICogQHJldHZhbCAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgaW52YWxpZCBwb2ludGVyCisgKi8KKworaW50Citkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQpCit7CisgICAgc3RydWN0IGlmbmFtZSAqbmFtZXB0cjEgPSBOVUxMLCAqbmFtZXB0cjIgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICghbGlzdF9oZWFkKSB7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZTogaW52YWxpZCBwb2ludGVyIGxpc3RfaGVhZCIpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSIsCisgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvaW50ZXIgbGlzdF9oZWFkXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKG5hbWVwdHIxID0gbGlzdF9oZWFkOyBuYW1lcHRyMTsgbmFtZXB0cjEgPSBuYW1lcHRyMikgeworICAgICAgICAgICAgbmFtZXB0cjIgPSBuYW1lcHRyMS0+aWZuX25leHQ7CisgICAgICAgICAgICBmcmVlIChuYW1lcHRyMSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIDogbm90IGZvdW5kCisgKiBAcmV0dmFsICEwIDogaWZJbmRleAorICovCisKK2ludCAKK2RvdDNzdGF0c19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQgKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkgeworI2lmbmRlZiBTSU9DR0lGSU5ERVgKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgc3RydWN0IGlmcmVxICAgIGlmcnE7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0IiwgImNhbGxlZFxuIikpOworICAgICAgICAgICAgICAgICAKKyAgICByYyA9IF9kb3QzU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DR0lGSU5ERVgsICZpZnJxLCBuYW1lKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImVycm9yIG9uIGludGVyZmFjZSAnJXMnXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCwgZXJyb3Igb24gaW50ZXJmYWNlICclcydcbiIsIG5hbWUpOworICAgICAgICByZXR1cm4gMDsKKworICAgIH0KKworICAgIHJldHVybiBpZnJxLmlmcl9pZmluZGV4OworI2VuZGlmIC8qIFNJT0NHSUZJTkRFWCAqLworfQorCisjIGlmIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggLyogeyBORVRMSU5LICovCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIHVwb24gY29kZSBJIGdvdCBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyCisgKi8KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitzdHJ1Y3QgcnRubF9oYW5kbGUgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgIGZkOworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCAgICAgIGxvY2FsOworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCAgICAgIHBlZXI7CisgICAgX191MzIgICAgICAgICAgICAgICAgICAgc2VxOworICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGR1bXA7Cit9OworCitzdHJ1Y3QgaWZzdGF0X2VudCB7CisgICAgc3RydWN0IGlmc3RhdF9lbnQgKm5leHQ7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgaWZpbmRleDsKKyAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzIHN0YXRzOworfTsKKwordHlwZWRlZiBpbnQgKCpydG5sX2ZpbHRlcl90KShjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfbmwgKiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICopOworCitzdHJ1Y3QgcnRubF9kdW1wX2ZpbHRlcl9hcmcKK3sKKyAgICBydG5sX2ZpbHRlcl90IGZpbHRlcjsKKyAgICB2b2lkICphcmcxOworICAgIHJ0bmxfZmlsdGVyX3QganVuazsKKyAgICB2b2lkICphcmcyOworfTsKKworc3RhdGljIHN0cnVjdCBpZnN0YXRfZW50ICprZXJuX2RiOworc3RhdGljIGNvbnN0IGludCByY3ZidWZfc2l6ZSA9IDEwMjQgKiAxMDI0OworCitzdGF0aWMgaW50CitydG5sX29wZW5fYnlwcm90byhzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwgdW5zaWduZWQgc3Vic2NyaXB0aW9ucywgaW50IHByb3RvY29sKQoreworICAgIHNvY2tsZW5fdCBhZGRyX2xlbjsKKyAgICBpbnQgc25kYnVmID0gMzI3Njg7CisKKyAgICBtZW1zZXQocnRoLCAwLCBzaXplb2YoKnJ0aCkpOworCisgICAgcnRoLT5mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgcHJvdG9jb2wpOworICAgIGlmIChydGgtPmZkIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2Fubm90IG9wZW4gbmV0bGluayBzb2NrZXQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZXRzb2Nrb3B0KHJ0aC0+ZmQsU09MX1NPQ0tFVCxTT19TTkRCVUYsJnNuZGJ1ZixzaXplb2Yoc25kYnVmKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTT19TTkRCVUYiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZXRzb2Nrb3B0KHJ0aC0+ZmQsU09MX1NPQ0tFVCxTT19SQ1ZCVUYsJnJjdmJ1Zl9zaXplLHNpemVvZihyY3ZidWZfc2l6ZSkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU09fUkNWQlVGIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoJnJ0aC0+bG9jYWwsIDAsIHNpemVvZihydGgtPmxvY2FsKSk7CisgICAgcnRoLT5sb2NhbC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICAgIHJ0aC0+bG9jYWwubmxfZ3JvdXBzID0gc3Vic2NyaXB0aW9uczsKKworICAgIGlmIChiaW5kKHJ0aC0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZydGgtPmxvY2FsLCBzaXplb2YocnRoLT5sb2NhbCkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2Fubm90IGJpbmQgbmV0bGluayBzb2NrZXQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBhZGRyX2xlbiA9IHNpemVvZihydGgtPmxvY2FsKTsKKyAgICBpZiAoZ2V0c29ja25hbWUocnRoLT5mZCwgKHN0cnVjdCBzb2NrYWRkciopJnJ0aC0+bG9jYWwsICZhZGRyX2xlbikgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3QgZ2V0c29ja25hbWUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHJ0aC0+bG9jYWwpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJXcm9uZyBhZGRyZXNzIGxlbmd0aCAlZFxuIiwgYWRkcl9sZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChydGgtPmxvY2FsLm5sX2ZhbWlseSAhPSBBRl9ORVRMSU5LKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJXcm9uZyBhZGRyZXNzIGZhbWlseSAlZFxuIiwgcnRoLT5sb2NhbC5ubF9mYW1pbHkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJ0aC0+c2VxID0gdGltZShOVUxMKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRubF9vcGVuKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoLCB1bnNpZ25lZCBzdWJzY3JpcHRpb25zKQoreworICAgIHJldHVybiBydG5sX29wZW5fYnlwcm90byhydGgsIHN1YnNjcmlwdGlvbnMsIE5FVExJTktfUk9VVEUpOworfQorCitzdGF0aWMgdm9pZAorcnRubF9jbG9zZShzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCkKK3sKKyAgICBpZiAocnRoLT5mZCAhPSAtMSkKKyAgICAgICAgY2xvc2UocnRoLT5mZCk7CisgICAgcnRoLT5mZCA9IC0xOworCisgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW50CitydG5sX3dpbGRkdW1wX3JlcXVlc3Qoc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsIGludCBmYW1pbHksIGludCB0eXBlKQoreworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBubGg7CisgICAgICAgIHN0cnVjdCBydGdlbm1zZyBnOworICAgIH0gcmVxOworCisgICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgICByZXEubmxoLm5sbXNnX2xlbiA9IHNpemVvZihyZXEpOworICAgIHJlcS5ubGgubmxtc2dfdHlwZSA9IHR5cGU7CisgICAgcmVxLm5saC5ubG1zZ19mbGFncyA9IE5MTV9GX1JPT1R8TkxNX0ZfTUFUQ0h8TkxNX0ZfUkVRVUVTVDsKKyAgICByZXEubmxoLm5sbXNnX3BpZCA9IDA7CisgICAgcmVxLm5saC5ubG1zZ19zZXEgPSBydGgtPmR1bXAgPSArK3J0aC0+c2VxOworICAgIHJlcS5nLnJ0Z2VuX2ZhbWlseSA9IGZhbWlseTsKKworICAgIHJldHVybiBzZW5kKHJ0aC0+ZmQsICh2b2lkKikmcmVxLCBzaXplb2YocmVxKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX3J0YXR0cihzdHJ1Y3QgcnRhdHRyICp0YltdLCBpbnQgbWF4LCBzdHJ1Y3QgcnRhdHRyICpydGEsIGludCBsZW4pCit7CisgICAgbWVtc2V0KHRiLCAwLCBzaXplb2Yoc3RydWN0IHJ0YXR0ciAqKSAqIChtYXggKyAxKSk7CisgICAgd2hpbGUgKFJUQV9PSyhydGEsIGxlbikpCisgICAgeworICAgICAgICBpZiAocnRhLT5ydGFfdHlwZSA8PSBtYXgpCisgICAgICAgICAgICB0YltydGEtPnJ0YV90eXBlXSA9IHJ0YTsKKyAgICAgICAgcnRhID0gUlRBX05FWFQocnRhLGxlbik7CisgICAgfQorCisgICAgaWYgKGxlbikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInBhcnNlX3J0YXR0cjogISEhRGVmaWNpdCAlZCwgcnRhX2xlbj0lZFxuIiwgbGVuLCBydGEtPnJ0YV9sZW4pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9ubG1zZyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfbmwgKndobywgc3RydWN0IG5sbXNnaGRyICptLCB2b2lkICphcmcpCit7CisgICAgc3RydWN0IGlmaW5mb21zZyAqaWZpID0gTkxNU0dfREFUQShtKTsKKyAgICBzdHJ1Y3QgcnRhdHRyICogdGJbSUZMQV9NQVgrMV07CisgICAgaW50IGxlbiA9IG0tPm5sbXNnX2xlbjsKKyAgICBzdHJ1Y3QgaWZzdGF0X2VudCAqbjsKKworICAgIGlmIChtLT5ubG1zZ190eXBlICE9IFJUTV9ORVdMSU5LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxlbiAtPSBOTE1TR19MRU5HVEgoc2l6ZW9mKCppZmkpKTsKKyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcGFyc2VfcnRhdHRyKHRiLCBJRkxBX01BWCwgSUZMQV9SVEEoaWZpKSwgbGVuKTsKKyAgICBpZiAodGJbSUZMQV9JRk5BTUVdID09IE5VTEwgfHwgdGJbSUZMQV9TVEFUU10gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBuID0gbWFsbG9jKHNpemVvZigqbikpOworICAgIG1lbXNldChuLCAwLCBzaXplb2YoKm4pKTsKKworICAgIG4tPmlmaW5kZXggPSBpZmktPmlmaV9pbmRleDsKKyAgICBuLT5uYW1lID0gc3RyZHVwKFJUQV9EQVRBKHRiW0lGTEFfSUZOQU1FXSkpOworICAgIG1lbWNweSgmbi0+c3RhdHMsIFJUQV9EQVRBKHRiW0lGTEFfU1RBVFNdKSwgc2l6ZW9mKG4tPnN0YXRzKSk7CisgICAgbi0+bmV4dCA9IGtlcm5fZGI7CisgICAga2Vybl9kYiA9IG47CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3J0bmxfZHVtcF9maWx0ZXJfbChzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9kdW1wX2ZpbHRlcl9hcmcgKmFyZykKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgbmxhZGRyOworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgc3RydWN0IG1zZ2hkciBtc2cgPSB7CisgICAgICAgIC5tc2dfbmFtZSA9ICZubGFkZHIsCisgICAgICAgIC5tc2dfbmFtZWxlbiA9IHNpemVvZihubGFkZHIpLAorICAgICAgICAubXNnX2lvdiA9ICZpb3YsCisgICAgICAgIC5tc2dfaW92bGVuID0gMSwKKyAgICB9OworICAgIGNoYXIgYnVmWzE2Mzg0XTsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpbnQgc3RhdHVzOworICAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9kdW1wX2ZpbHRlcl9hcmcgKmE7CisKKyAgICAgICAgaW92Lmlvdl9sZW4gPSBzaXplb2YoYnVmKTsKKyAgICAgICAgc3RhdHVzID0gcmVjdm1zZyhydGgtPmZkLCAmbXNnLCAwKTsKKworICAgICAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibmV0bGluayByZWNlaXZlIGVycm9yICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRU9GIG9uIG5ldGxpbmtcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhID0gYXJnOyBhLT5maWx0ZXI7IGErKykgeworICAgICAgICAgICAgc3RydWN0IG5sbXNnaGRyICpoID0gKHN0cnVjdCBubG1zZ2hkciopYnVmOworCisgICAgICAgICAgICB3aGlsZSAoTkxNU0dfT0soaCwgc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICAgICAgICBpZiAobmxhZGRyLm5sX3BpZCAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBoLT5ubG1zZ19waWQgIT0gcnRoLT5sb2NhbC5ubF9waWQgfHwKKyAgICAgICAgICAgICAgICAgICAgIGgtPm5sbXNnX3NlcSAhPSBydGgtPmR1bXApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGEtPmp1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGEtPmp1bmsoJm5sYWRkciwgaCwgYS0+YXJnMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9pdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgbmxtc2dlcnIgKmVyciA9IChzdHJ1Y3Qgbmxtc2dlcnIqKU5MTVNHX0RBVEEoaCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoLT5ubG1zZ19sZW4gPCBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBubG1zZ2VycikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIHRydW5jYXRlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IC1lcnItPmVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJSVE5FVExJTksgYW5zd2VycyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXJyID0gYS0+ZmlsdGVyKCZubGFkZHIsIGgsIGEtPmFyZzEpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCitza2lwX2l0OgorICAgICAgICAgICAgICAgIGggPSBOTE1TR19ORVhUKGgsIHN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKDApOworICAgICAgICBpZiAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJNZXNzYWdlIHRydW5jYXRlZFxuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiEhIVJlbW5hbnQgb2Ygc2l6ZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3J0bmxfZHVtcF9maWx0ZXIoc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsCisgICAgICAgICAgICAgICAgIHJ0bmxfZmlsdGVyX3QgZmlsdGVyLAorICAgICAgICAgICAgICAgICB2b2lkICphcmcxLAorICAgICAgICAgICAgICAgICBydG5sX2ZpbHRlcl90IGp1bmssCisgICAgICAgICAgICAgICAgIHZvaWQgKmFyZzIpCit7CisgICAgY29uc3Qgc3RydWN0IHJ0bmxfZHVtcF9maWx0ZXJfYXJnIGFbMl0gPSB7CisgICAgICAgIHsgLmZpbHRlciA9IGZpbHRlciwgLmFyZzEgPSBhcmcxLCAuanVuayA9IGp1bmssIC5hcmcyID0gYXJnMiB9LAorICAgICAgICB7IC5maWx0ZXIgPSBOVUxMLCAgIC5hcmcxID0gTlVMTCwgLmp1bmsgPSBOVUxMLCAuYXJnMiA9IE5VTEwgfQorICAgIH07CisKKyAgICByZXR1cm4gcnRubF9kdW1wX2ZpbHRlcl9sKHJ0aCwgYSk7Cit9CisKK2ludAorX2RvdDNTdGF0c19uZXRsaW5rX2dldF9lcnJvcmNudHJzKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3RydWN0IHJ0bmxfaGFuZGxlIHJ0aDsKKyAgICBzdHJ1Y3QgaWZzdGF0X2VudCAqa2U7CisgICAgaW50IGRvbmU7CisKKyAgICBpZiAocnRubF9vcGVuKCZydGgsIDApIDwgMCkKKyAgICB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnM6IHJ0bmxfb3BlbigpIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChydG5sX3dpbGRkdW1wX3JlcXVlc3QoJnJ0aCwgQUZfSU5FVCwgUlRNX0dFVExJTkspIDwgMCkKKyAgICB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnM6IENhbm5vdCBzZW5kIGR1bXAgcmVxdWVzdCIpOworICAgICAgICBydG5sX2Nsb3NlKCZydGgpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAocnRubF9kdW1wX2ZpbHRlcigmcnRoLCBnZXRfbmxtc2csIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkKKyAgICB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnM6IER1bXAgdGVybWluYXRlZFxuIik7CisgICAgICAgIHJ0bmxfY2xvc2UoJnJ0aCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJ0bmxfY2xvc2UoJnJ0aCk7CisKKyAgICAvKgorICAgICAqIE5vdyBzY2FuIGtlcm5fZGIgZm9yIHRoaXMgaWYncyBkYXRhCisgICAgICogV2hpbGUgZG9pbmcgc28sIHdlJ2xsIHRocm93IGF3YXkgdGhlIGtlcm4gZGIuCisgICAgICovCisgICAgZG9uZSA9IDA7CisKKyAgICB3aGlsZSAoKGtlID0ga2Vybl9kYikgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoa2UtPm5hbWUsIG5hbWUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2RhdGEgKmRhdGEgPSAmcm93cmVxX2N0eC0+ZGF0YTsKKworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJJRkxBX1NUQVRTIGZvciAlc1xuIiwgbmFtZSkpOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNGQ1NFcnJvcnMgPSBrZS0+c3RhdHMucnhfY3JjX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgPSBrZS0+c3RhdHMudHhfZHJvcHBlZDsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzID0ga2UtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgPSBrZS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRzsKKworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRnJhbWVUb29Mb25ncyA9IGtlLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IGtlLT5zdGF0cy5yeF9maWZvX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SU19GTEFHOworCisgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgfQorICAgICAgICBrZXJuX2RiID0ga2UtPm5leHQ7CisgICAgICAgIGZyZWUoa2UpOworICAgIH0KKworICAgIHJldHVybiAhZG9uZTsKK30KKyMgZWxzZSAvKiB9eyAqLworaW50CitfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnMoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICByZXR1cm4gMTsKK30KKyMgZW5kaWYgLyogfSAqLworCisKKy8qCisgKiBOQU1FOiBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MKKyAqIFBVUlBPU0U6IFRvIGdldCBhIHNpbmdsZSBzdGF0aXN0aWNzIHZhbHVlIGZyb20gL3N5cy9jbGFzcy9uZXQvPGlmbmFtZT4vc3RhdGlzdGljcy88Y3RybmFtZT4KKyAqIEFSR1VNRU5UUzogaWZuYW1lOiBpbnRlcmZhY2UgbmFtZQorICogICAgICBjdHJuYW1lOiBjb3VudGVyIG5hbWUKKyAqICAgICAgdmFsdWVwOiB3aGVyZSB0byBzdG9yZSB2YWx1ZQorICogUkVUVVJOUzogMCBpZiB2YWx1ZSBub3QgYXZhaWxhYmxlCisgKiAgICAgIG5vbi0wIGlmIHZhbHVlIGF2YWlsYWJsZQorICovCitzdGF0aWMgaW50CitnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MoY29uc3QgY2hhciAqaWZuYW1lLCBjb25zdCBjaGFyICpjdHJuYW1lLCB1X2xvbmcgKnZhbHVlcCkKK3sKKyAgICBjaGFyIHBhdGhbMjU2XTsKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgcnY7CisKKyAgICBpZiAoaWZuYW1lID09IE5VTEwgfHwgY3RybmFtZSA9PSBOVUxMIHx8IHZhbHVlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9zeXMvY2xhc3MvbmV0LyVzL3N0YXRpc3RpY3MvJXMiLCBpZm5hbWUsIGN0cm5hbWUpOworICAgIGZwID0gZm9wZW4ocGF0aCwgInJ0Iik7CisgICAgaWYgKGZwID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgcnYgPSAxOworICAgIGlmIChmc2NhbmYoZnAsICIlbHUiLCB2YWx1ZXApICE9IDEpCisgICAgICAgIHJ2ID0gMDsKKworICAgIGZjbG9zZShmcCk7CisKKyAgICByZXR1cm4gcnY7Cit9CisKKy8qCisgKiBOQU1FOiBpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzCisgKiBQVVJQT1NFOiBUbyBnZXQgZXRoZXJuZXQgZXJyb3Igc3RhdGlzdGljcworICogQVJHVU1FTlRTOiByb3dyZXFfY3R4OiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUocykKKyAqICAgICAgbmFtZTogaW50ZXJmYWNlIG5hbWUKKyAqIFJFVFVSTlM6IG5vdGhpbmcuIGZpZWxkcyBub3Qgc2V0IGlmIGRhdGEgbm90IGF2YWlsYWJsZQorICovCit2b2lkCitpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzIChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHVfbG9uZyB2YWx1ZTsKKyAgICBkb3QzU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisgICAgRklMRSAqZGV2OworICAgIGNvbnN0IGNoYXIgTkVUREVWX0ZJTEVbXSA9ICIvcHJvYy9uZXQvZGV2IjsKKworICAgIGlmIChfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnMocm93cmVxX2N0eCwgbmFtZSkgPT0gMCkKKyAgICB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiaW50ZXJmYWNlX2RvdDNzdGF0c19nZXRfZXJyb3Jjb3VudGVyczogZ290IGRhdGEgZnJvbSBJRkxBX1NUQVRTXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKGRldiA9IGZvcGVuKE5FVERFVl9GSUxFLCAiciIpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgY2hhciBsaW5lWzI1Nl0sICpscCwgKm5leHQ7CisgICAgICAgIHNpemVfdCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworICAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWU7CisgICAgICAgIHVuc2lnbmVkIGludCBjb2x1bW47CisKKyAgICAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2KSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAvKiAgICBicjA6NjgzOTU2MzUgMTAzODIxNCAgICAwICAgIDAgICAgMCAgICAgMCAgICAgICAgICAwICAgIDkzOTQxMSAyNTYyNjYwNiAgIDkwNzA4ICAgIDAgICAgMCAgICAwICAgICAwICAgICAgIDAgICAgICAgICAgMCAqLworICAgICAgICAgICAgbHAgPSBsaW5lOworICAgICAgICAgICAgd2hpbGUgKCpscCA9PSAnICcgfHwgKmxwID09ICdcdCcpCisgICAgICAgICAgICAgICAgbHArKzsKKyAgICAgICAgICAgIGlmIChzdHJuY21wKGxwLCBuYW1lLCBuYW1lbGVuKSAhPSAwIHx8IGxwW25hbWVsZW5dICE9ICc6JykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxwICs9IG5hbWVsZW4gKyAxOyAgICAgICAgIC8qIFNraXAgbmFtZSBhbmQgY29sb24gKi8KKworICAgICAgICAgICAgY29sdW1uID0gMTsKKyAgICAgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbHVlID0gc3RydG91bChscCwgJm5leHQsIDEwKTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSBscCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgIC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IAorICAgICAgICAgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNGQ1NFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNERUZFUlJFRFRSQU5TTUlTU0lPTlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbHVtbisrOworICAgICAgICAgICAgICAgIGxwID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZmNsb3NlKGRldik7CisgICAgfQorCisgICAgaWYgKCEocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyAmIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlNfRkxBRykgJiYKKyAgICAgICAgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInJ4X2Vycm9ycyIsICZ2YWx1ZSkpIHsKKyAgICAgICAgZGF0YS0+ZG90M1N0YXRzRkNTRXJyb3JzID0gdmFsdWU7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAidHhfZHJvcHBlZCIsICZ2YWx1ZSkpIHsKKyAgICAgICAgZGF0YS0+ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zID0gdmFsdWU7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRykgJiYKKyAgICAgICAgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2ZpZm9fZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzID0gdmFsdWU7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRzsKKyAgICB9CisgICAgaWYgKCEocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyAmIENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRykgJiYKKyAgICAgICAgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2NhcnJpZXJfZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmICghKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgJiBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZnJhbWVfZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzID0gdmFsdWU7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKyAgICB9CisgICAgaWYgKCEocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyAmIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRykgJiYKKyAgICAgICAgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInJ4X2ZpZm9fZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGNhbm5vdCBnZXQgRVRIVE9PTF9EUlZJTkZPIGZhaWxlZCAKKyAqIEByZXR2YWwgLTIgbnN0YXRzIHplcm8gLSBubyBzdGF0aXN0Y3MgYXZhaWxhYmxlCisgKiBAcmV0dmFsIC0zIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBob2xkaW5nIHRoZSBzdGF0aXN0aWNzIGZhaWxlZAorICogQHJldHZhbCAtNCBjYW5ub3QgZ2V0IEVUSFRPT0xfR1NUUklOR1MgaW5mb3JtYXRpb24KKyAqIEByZXR2YWwgLTUgY2Fubm90IGdldCBFVEhUT09MX0dTVEFUUyBpbmZvcm1hdGlvbgorICogQHJldHZhbCAtNiBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGlmIEhBVkVfTElOVVhfRVRIVE9PTF9IIG5vdCBkZWZpbmVkCisgKi8KKworCitpbnQgCitpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2dldCAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKSB7CisKKyNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAorICAgIGRvdDNTdGF0c1RhYmxlX2RhdGEgKmRhdGEgPSAmcm93cmVxX2N0eC0+ZGF0YTsKKyAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGRyaXZlcl9pbmZvOworICAgIHN0cnVjdCBldGh0b29sX2dzdHJpbmdzICpldGhfc3RyaW5nczsKKyAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZXRoX3N0YXRzOworICAgIHN0cnVjdCBpZnJlcSBpZnI7IAorICAgIHVuc2lnbmVkIGludCBuc3RhdHMsIHNpemVfc3RyLCBpOworICAgIGludCBlcnI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBtZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworICAgIHN0cmxjcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisKKyAgICBtZW1zZXQoJmRyaXZlcl9pbmZvLCAwLCBzaXplb2YgKGRyaXZlcl9pbmZvKSk7CisgICAgZHJpdmVyX2luZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTzsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSZkcml2ZXJfaW5mbzsKKworICAgIGVyciA9IF9kb3QzU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJFVEhUT09MX0dFVERSVklORk8gZmFpbGVkIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG5zdGF0cyA9IGRyaXZlcl9pbmZvLm5fc3RhdHM7CisgICAgaWYgKG5zdGF0cyA8IDEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBzdGF0cyBhdmFpbGFibGUgZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgc2l6ZV9zdHIgPSBuc3RhdHMgKiBFVEhfR1NUUklOR19MRU47CisKKyAgICBldGhfc3RyaW5ncyA9IG1hbGxvYyhzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MpKTsKKyAgICBpZiAoIWV0aF9zdHJpbmdzKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAibm8gbWVtb3J5IGF2YWlsYWJsZVxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCwgbm8gbWVtb3J5IGF2YWlsYWJsZVxuIik7CisKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBtZW1zZXQgKGV0aF9zdHJpbmdzLCAwLCAoc2l6ZV9zdHIgKyBzaXplb2YgKHN0cnVjdCBldGh0b29sX2dzdHJpbmdzKSkpOworCisgICAgZXRoX3N0YXRzID0gbWFsbG9jIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfc3RhdHMpKTsKKyAgICBpZiAoIWV0aF9zdGF0cykgeworICAgICAgICBmcmVlIChldGhfc3RyaW5ncyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAibm8gbWVtb3J5IGF2YWlsYWJsZVxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCwgbm8gbWVtb3J5IGF2YWlsYWJsZVxuIik7CisKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICAgbWVtc2V0IChldGhfc3RhdHMsIDAsIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfc3RhdHMpKSk7CisKKyAgICBldGhfc3RyaW5ncy0+Y21kID0gRVRIVE9PTF9HU1RSSU5HUzsKKyAgICBldGhfc3RyaW5ncy0+c3RyaW5nX3NldCA9IEVUSF9TU19TVEFUUzsKKyAgICBldGhfc3RyaW5ncy0+bGVuID0gbnN0YXRzOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopIGV0aF9zdHJpbmdzOworICAgIGVyciA9IF9kb3QzU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCwgY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpOworCisgICAgICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgICAgICBmcmVlKGV0aF9zdGF0cyk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICBldGhfc3RhdHMtPmNtZCA9IEVUSFRPT0xfR1NUQVRTOworICAgIGV0aF9zdGF0cy0+bl9zdGF0cyA9IG5zdGF0czsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSBldGhfc3RhdHM7CisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBjYW5ub3QgZ2V0IHN0YXRzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpOworCisgICAgICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgICAgICBmcmVlKGV0aF9zdGF0cyk7CisgICAgICAgIHJldHVybiAtNTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRzOyBpKyspIHsKKyAgICAgICAgY2hhciBzW0VUSF9HU1RSSU5HX0xFTl07CisKKyAgICAgICAgc3RybGNweShzLCAoY29uc3QgY2hhciAqKSAmZXRoX3N0cmluZ3MtPmRhdGFbaSAqIEVUSF9HU1RSSU5HX0xFTl0sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHMpKTsKKyAgICAKKyAgICAgICAgaWYgKERPVDNTVEFUU0FMSUdOTUVOVEVSUk9SUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzID0gKHVfbG9uZylldGhfc3RhdHMtPmRhdGFbaV07CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNBTElHTk1FTlRFUlJPUlNfRkxBRzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChET1QzU1RBVFNNVUxUSVBMRUNPTExJU0lPTkZSQU1FUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTX0ZMQUc7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoRE9UM1NUQVRTTEFURUNPTExJU0lPTlMocykpIHsKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0xhdGVDb2xsaXNpb25zID0gKHVfbG9uZylldGhfc3RhdHMtPmRhdGFbaV07CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNMQVRFQ09MTElTSU9OU19GTEFHOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gKHVfbG9uZylldGhfc3RhdHMtPmRhdGFbaV07CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVNfRkxBRzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChET1QzU1RBVFNFWENFU1NJVkVDT0xMSVNJT05TKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zID0gKHVfbG9uZylldGhfc3RhdHMtPmRhdGFbaV07CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNFWENFU1NJVkVDT0xMSVNJT05TX0ZMQUc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKGV0aF9zdHJpbmdzKTsKKyAgICBmcmVlKGV0aF9zdGF0cyk7CisKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIC02OworI2VuZGlmCit9CisKKworLyoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBFVEhUT09MX0dTRVQgZmFpbGVkCisgKiBAcmV0dmFsIC0yIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaWYgSEFWRV9MSU5VWF9FVEhUT09MX0ggbm90IGRlZmluZWQKKyAqLworCitpbnQKK2ludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZHVwbGV4X2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKworI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICisgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworICAgIHN0cnVjdCBldGh0b29sX2NtZCBlZGF0YTsKKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgIGludCBlcnI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZHVwbGV4X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbWVtc2V0KCZlZGF0YSwgMCwgc2l6ZW9mIChlZGF0YSkpOworICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YgKGlmcikpOworICAgIGVkYXRhLmNtZCA9IEVUSFRPT0xfR1NFVDsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSZlZGF0YTsKKworICAgIGVyciA9IF9kb3QzU3RhdHNfaW9jdGxfZ2V0IChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19kdXBsZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIkVUSFRPT0xfR1NFVCBmYWlsZWRcbiIpKTsKKworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVNfRkxBRzsKKyAgICAgICAgc3dpdGNoIChlZGF0YS5kdXBsZXgpIHsKKyAgICAgICAgY2FzZSBEVVBMRVhfSEFMRjoKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0R1cGxleFN0YXR1cyA9ICh1X2xvbmcpIERPVDNTVEFUU0RVUExFWFNUQVRVU19IQUxGRFVQTEVYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFVQTEVYX0ZVTEw6CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNEdXBsZXhTdGF0dXMgPSAodV9sb25nKSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRlVMTERVUExFWDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRHVwbGV4U3RhdHVzID0gKHVfbG9uZykgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX1VOS05PV047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZHVwbGV4X2dldCIsCisgICAgICAgICAgICAgICAgIkVUSFRPT0xfR1NFVCBwcm9jZXNzZWRcbiIpKTsKKyAgICByZXR1cm4gZXJyOworI2Vsc2UKKyAgICByZXR1cm4gLTI7CisjZW5kaWYKK30KKworCisvKgorICogTkFNRTogaW50ZXJmYWNlX3N5c2NsYXNzbmV0X2RvdDNzdGF0c19nZXQKKyAqIFBVUlBPU0U6IFRvIGdldCBldGhlcm5ldCBzdGF0aXN0aWNzIGZyb20gL3N5cy9jbGFzcy9uZXQvLi4uCisgKiBBUkdVTUVOVFM6IHJvd3JlcV9jdHg6IHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZShzKQorICoJbmFtZTogaW50ZXJmYWNlIG5hbWUKKyAqIFJFVFVSTlM6IG5vdGhpbmcuIGZpZWxkcyBub3Qgc2V0IGlmIGRhdGEgbm90IGF2YWlsYWJsZQorICovCit2b2lkCitpbnRlcmZhY2Vfc3lzY2xhc3NuZXRfZG90M3N0YXRzX2dldCAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICB1X2xvbmcgdmFsdWU7CisgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworCisgICAgaWYgKGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0ZDU0Vycm9ycyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJ0eF9kcm9wcGVkIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHOworICAgIH0KKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJ0eF9maWZvX2Vycm9ycyIsICZ2YWx1ZSkpIHsKKwlkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJ0eF9jYXJyaWVyX2Vycm9ycyIsICZ2YWx1ZSkpIHsKKwlkYXRhLT5kb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgPSB2YWx1ZTsKKwlyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRzsKKyAgICB9CisgICAgaWYgKGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZnJhbWVfZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgPSB2YWx1ZTsKKwlyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInJ4X2ZpZm9fZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SU19GTEFHOworICAgIH0KKworICAgIHJldHVybjsKK30KKworCisKKy8qIGlvY3RsIHdyYXBwZXIKKyAqCisgKiBAcGFyYW0gICAgICBmZCA6IHNvY2tldCBmZCB0byB1c2Ugdy9pb2N0bCwgb3IgLTEgdG8gb3Blbi9jbG9zZSBvbmUKKyAqIEBwYXJhbSAgd2hpY2gKKyAqIEBwYXJhbSBpZnJxCisgKiBwYXJhbSBpZmVudHJ5IDogaWZlbnRyeSB0byB1cGRhdGUKKyAqIEBwYXJhbSBuYW1lCisgKgorICogQHJldHZhbCAgMCA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgOiBpbnZhbGlkIHBhcmFtZXRlcnMKKyAqIEByZXR2YWwgLTIgOiBjb3VsZG4ndCBjcmVhdGUgc29ja2V0CisgKiBAcmV0dmFsIC0zIDogaW9jdGwgY2FsbCBmYWlsZWQKKyAqLworaW50CitfZG90M1N0YXRzX2lvY3RsX2dldChpbnQgZmQsIGludCB3aGljaCwgc3RydWN0IGlmcmVxICppZnJxLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGludCBvdXJmZCA9IC0xLCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsIiwgIl9kb3QzU3RhdHNfaW9jdGxfZ2V0XG4iKSk7CisKKyAgICAvKgorICAgICAqIHNhbml0eSBjaGVja3MKKyAgICAgKi8KKyAgICBpZihOVUxMID09IG5hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJfZG90M1N0YXRzX2lvY3RsX2dldCBpbnZhbGlkIGlmbmFtZSAnJXMnXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsLCBfZG90M1N0YXRzX2lvY3RsX2dldCBlcnJvciBvbiBpbnRlcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBzb2NrZXQgZm9yIGlvY3RscworICAgICAqLworICAgIGlmKGZkIDwgMCkgeworICAgICAgICBmZCA9IG91cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgICAgICBpZihvdXJmZCA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c19pb2N0bF9nZXQgY291bGRuJ3QgY3JlYXRlIGEgc29ja2V0XG4iKSk7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppb2N0bCwgX2RvdDNTdGF0c19pb2N0bF9nZXQgZXJyb3Igb24gaW50ZXJmYWNlICclcydcbiIsIG5hbWUpOworCisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJsY3B5KGlmcnEtPmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZycS0+aWZyX25hbWUpKTsKKyAgICByYyA9IGlvY3RsKGZkLCB3aGljaCwgaWZycSk7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c19pb2N0bF9nZXQgaW9jdGwgJWQgcmV0dXJuZWQgJWRcbiIsIHdoaWNoLCByYykpOworICAgICAgICByYyA9IC0zOworICAgIH0KKworICAgIGlmKG91cmZkID49IDApCisgICAgICAgIGNsb3NlKG91cmZkKTsKKworICAgIHJldHVybiByYzsKK30KKworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0ZjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaApAQCAtMCwwICsxLDExIEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0cykKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUpCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0KQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldCkKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MpCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZSkKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjM4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKiogXHBhZ2UgTUZEIGhlbHBlciBmb3IgZG90M1N0YXRzVGFibGUKKyAqCisgKiBcc2VjdGlvbiBpbnRybyBJbnRyb2R1Y3Rpb24KKyAqIEludHJvZHVjdG9yeSB0ZXh0LgorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisKK29pZCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRbXSA9IHsgRE9UM1NUQVRTVEFCTEVfT0lEIH07CitpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGRvdDNTdGF0c1RhYmxlX29pZCk7CisKK2RvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiBkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICpkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfZG90M1N0YXRzVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfZG90M1N0YXRzVGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgZG90M1N0YXRzVGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfZG90M1N0YXRzVGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTppbml0X2RvdDNTdGF0c1RhYmxlIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMDpvOiBQZXJmb3JtIGRvdDNTdGF0c1RhYmxlIG9uZS10aW1lIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcKKyAgICAgKi8KKyAgICBpZiAoc2hvdWxkX2luaXQoImRvdDNTdGF0c1RhYmxlIikpCisgICAgICAgIGluaXRpYWxpemVfdGFibGVfZG90M1N0YXRzVGFibGUoKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2RvdDNTdGF0c1RhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBkb3QzU3RhdHNUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2RvdDNTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJkb3QzU3RhdHNUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9kb3QzU3RhdHNUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgZG90M1N0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmluaXRpYWxpemVfdGFibGVfZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDE6bzogUGVyZm9ybSBkb3QzU3RhdHNUYWJsZSBvbmUtdGltZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVE9ETzozMDI6bzogfC0+SW5pdGlhbGl6ZSBkb3QzU3RhdHNUYWJsZSB1c2VyIGNvbnRleHQKKyAgICAgKiBpZiB5b3UnZCBsaWtlIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIHNvbWUgZGF0YSBmb3IgdGhpcworICAgICAqIHRhYmxlLCBhbGxvY2F0ZSBvciBzZXQgaXQgdXAgaGVyZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGEgbmV0c25tcF9kYXRhX2xpc3QgaXMgYSBzaW1wbGUgd2F5IHRvIHN0b3JlIHZvaWQgcG9pbnRlcnMuIEEgc2ltcGxlCisgICAgICogc3RyaW5nIHRva2VuIGlzIHVzZWQgdG8gYWRkLCBmaW5kIG9yIHJlbW92ZSBwb2ludGVycy4KKyAgICAgKi8KKyAgICBkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcAorCT0gbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KCJkb3QzU3RhdHNUYWJsZSIsIE5VTEwsIE5VTEwpOworCisgICAgLyoKKyAgICAgKiBObyBzdXBwb3J0IGZvciBhbnkgZmxhZ3MgeWV0LCBidXQgaW4gdGhlIGZ1dHVyZSB5b3Ugd291bGQKKyAgICAgKiBzZXQgYW55IGZsYWdzIGhlcmUuCisgICAgICovCisgICAgZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgX2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wLCBmbGFncyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemVfdGFibGVfZG90M1N0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0ZG93biB0aGUgdGFibGUgZG90M1N0YXRzVGFibGUgCisgKi8KK3ZvaWQKK3NodXRkb3duX3RhYmxlX2RvdDNTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBzaHV0ZG93biBjb2RlCisgICAgICovCisgICAgX2RvdDNTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoZG90M1N0YXRzVGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMDpvOiB8LT4gUGVyZm9ybSBleHRyYSBkb3QzU3RhdHNUYWJsZSByb3dyZXEgaW5pdGlhbGl6YXRpb24uIChlZyBERUZWQUxTKQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGRvdDNTdGF0c1RhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KKworLyoqCisgKiBwcmUtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTEwOm86IFBlcmZvcm0gZG90M1N0YXRzVGFibGUgcHJlLXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBwb3N0LXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlOgorICogICBOZXcgcm93cyBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyLCBhbmQKKyAqICAgZGVsZXRlZCByb3dzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQKKyAqICAgcmVsZWFzZWQuCisgKgorICogQHBhcmFtIHVzZXJfY29udGV4dAorICogQHBhcmFtIHJjIDogTUZEX1NVQ0NFU1MgaWYgYWxsIHJlcXVlc3RzIHN1Y2NlZWRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IG90aGVyIGVycm9yIChpZ25vcmVkKQorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMTpvOiBQZXJmb3JtIGRvdDNTdGF0c1RhYmxlIHBvc3QtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworCisvKiogQHsgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDcxM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIERPVDNTVEFUU1RBQkxFX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIG1pc2MgbWlzYzogTWlzY2VsbGFuZW91cyByb3V0aW5lcworICoKKyAqIEB7CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKworICAgIC8qCisgICAgICogT0lEIGFuZCBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciBkb3QzU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9vaWRzLmgiCisKKyAgICAvKgorICAgICAqIGVudW0gZGVmaW5pb25zIAorICAgICAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2VudW1zLmgiCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fZG90M1N0YXRzVGFibGUodm9pZCk7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICAgICAqLworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFdoZW4geW91IHJlZ2lzdGVyIHlvdXIgbWliLCB5b3UgZ2V0IHRvIHByb3ZpZGUgYSBnZW5lcmljCisgICAgICogcG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8geW91IGZvciBtb3N0IG9mIHRoZQorICAgICAqIGZ1bmN0aW9ucyBjYWxscy4KKyAgICAgKgorICAgICAqIFRPRE86MTAwOnI6IFJldmlldyBhbGwgY29udGV4dCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBUT0RPOjEwMTpvOiB8LT4gUmV2aWV3IGRvdDNTdGF0c1RhYmxlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9kYXRhX2xpc3QgZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFRPRE86MTEwOnI6IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgZG90M1N0YXRzVGFibGUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBzdG9yYWdlIGZvciBhbGwgdGhlIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUKKyAgICAgKiBkb3QzU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBkb3QzU3RhdHNUYWJsZV9kYXRhX3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0FsaWdubWVudEVycm9ycygyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZDU0Vycm9ycygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzRkNTRXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyg0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzKDYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzKDEzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzRnJhbWVUb29Mb25nczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRXRoZXJDaGlwU2V0KDE3KS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICBvaWQgICAgICAgICAgICAgZG90M1N0YXRzRXRoZXJDaGlwU2V0WzEyOF07CisgICAgICAgIHNpemVfdCAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuOyAgICAgIC8qICMgb2Ygb2lkIGVsZW1lbnRzLCBub3QgYnl0ZXMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRHVwbGV4U3RhdHVzKDE5KS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0R1cGxleFN0YXR1czsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHkoMjApL1RydXRoVmFsdWUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5OworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzKDIxKS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzOworCisgICAgfSBkb3QzU3RhdHNUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgZG90M1N0YXRzVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgZG90M1N0YXRzVGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0luZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL0gKKyAgICAgICAgICovCisgICAgICAgIGxvbmcgICAgICAgICAgICBkb3QzU3RhdHNJbmRleDsKKworCisgICAgfSBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXg7CisKKyAgICAvKgorICAgICAqIFRPRE86MTIxOnI6IHwgICB8LT4gUmV2aWV3IGRvdDNTdGF0c1RhYmxlIG1heCBpbmRleCBsZW5ndGguCisgICAgICogSWYgeW91IEtOT1cgdGhhdCB5b3VyIGluZGV4ZXMgd2lsbCBuZXZlciBleGNlZWQgYSBjZXJ0YWluCisgICAgICogbGVuZ3RoLCB1cGRhdGUgdGhpcyBtYWNybyB0byB0aGF0IGxlbmd0aC4KKyAgICAgKi8KKyNkZWZpbmUgTUFYX2RvdDNTdGF0c1RhYmxlX0lEWF9MRU4gICAgIDI1NQorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjEzMDpvOiB8LT4gUmV2aWV3IGRvdDNTdGF0c1RhYmxlIFJvdyByZXF1ZXN0IChyb3dyZXEpIGNvbnRleHQuCisgICAgICogV2hlbiB5b3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB5b3Ugd2lsbCBiZSBwYXNzZWQgYQorICAgICAqIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggcG9pbnRlci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X3MgeworCisgICAgLyoqIHRoaXMgbXVzdCBiZSBmaXJzdCBmb3IgY29udGFpbmVyIGNvbXBhcmUgdG8gd29yayAqLworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICAgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX2RvdDNTdGF0c1RhYmxlX0lEWF9MRU5dOworCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCB0YmxfaWR4OworCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX2RhdGEgZGF0YTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGNvbHVtbl9leGlzdHNfZmxhZ3M7ICAgIC8qIGZsYWdzIGZvciBleGlzdGVuY2UgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBmbGFncyBwZXIgcm93LiBDdXJyZW50bHksIHRoZSBmaXJzdCAobG93ZXIpIDggYml0cyBhcmUgcmVzZXJ2ZWQKKyAgICAgICAgICogZm9yIHRoZSB1c2VyLiBTZWUgbWZkLmggZm9yIG90aGVyIGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICAgIHJvd3JlcV9mbGFnczsKKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjEzMTpvOiB8ICAgfC0+IEFkZCB1c2VmdWwgZGF0YSB0byBkb3QzU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogc3RvcmFnZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmRvdDNTdGF0c1RhYmxlX2RhdGFfbGlzdDsKKworICAgIH0gZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eDsKKworICAgIHR5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX3JlZl9yb3dyZXFfY3R4X3MgeworICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIH0gZG90M1N0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHg7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCk7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0LCBpbnQgcmMpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIHZvaWQgKnVzZXJfaW5pdF9jdHgpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworCisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqZG90M1N0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisKKyAgICBleHRlcm4gb2lkICAgICAgZG90M1N0YXRzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGludCAgICAgIGRvdDNTdGF0c1RhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmgiCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuaCIKKworICAgIC8qCisgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCisgICAgICoKKyAgICAgKiBUT0RPOjA5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mjk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjM5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzo0OTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNUQUJMRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGYzM2JmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGUuaCIKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorCisjaWYgZGVmaW5lZChsaW51eCkKKyNpbmNsdWRlICJpb2N0bF9pbXBfY29tbW9uLmgiCisjZW5kaWYKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c1RhYmxlIGlzIHN1YmlkIDIgb2YgZG90My4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgZG90M1N0YXRzVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBkb3QzU3RhdHNUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5pdF9kYXRhKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIGRvdDNTdGF0c1RhYmxlX3JlZykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbml0X2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBkb3QzU3RhdHNUYWJsZSBkYXRhLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9pbml0X2RhdGEgKi8KKworLyoqCisgKiBjb250YWluZXIgb3ZlcnZpZXcKKyAqCisgKi8KKworLyoqCisgKiBjb250YWluZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0cl9wdHIgQSBwb2ludGVyIHRvIGEgY29udGFpbmVyIHBvaW50ZXIuIElmIHlvdQorICogICAgICAgIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIsIHVzZSB0aGlzIHBhcmFtZXRlciB0byByZXR1cm4gaXQKKyAqICAgICAgICB0byB0aGUgTUZEIGhlbHBlci4gSWYgc2V0IHRvIE5VTEwsIHRoZSBNRkQgaGVscGVyIHdpbGwKKyAqICAgICAgICBhbGxvY2F0ZSBhIGNvbnRhaW5lciBmb3IgeW91LgorICogQHBhcmFtICBjYWNoZSBBIHBvaW50ZXIgdG8gYSBjYWNoZSBzdHJ1Y3R1cmUuIFlvdSBjYW4gc2V0IHRoZSB0aW1lb3V0CisgKiAgICAgICAgIGFuZCBvdGhlciBjYWNoZSBmbGFncyB1c2luZyB0aGlzIHBvaW50ZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLiBJZiBubyBjdXN0b20KKyAqICBjb250YWluZXIgaXMgYWxsb2NhdGVkLCB0aGUgTUZEIGNvZGUgd2lsbCBjcmVhdGUgb25lIGZvciB5b3VyLgorICoKKyAqICBUaGlzIGlzIGFsc28gdGhlIHBsYWNlIHRvIHNldCB1cCBjYWNoZSBiZWhhdmlvci4gVGhlIGRlZmF1bHQsIHRvCisgKiAgc2ltcGx5IHNldCB0aGUgY2FjaGUgdGltZW91dCwgd2lsbCB3b3JrIHdlbGwgd2l0aCB0aGUgZGVmYXVsdAorICogIGNvbnRhaW5lci4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb250YWluZXIsIHlvdSBtYXkgd2FudCB0bworICogIGxvb2sgYXQgdGhlIGNhY2hlIGhlbHBlciBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55CisgKiAgZmxhZ3MgeW91IHdhbnQgdG8gc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgb3BlbmluZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCB3aWxsIHN1cHBseSB0aGUgZGF0YSwgb3BlbmluZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNvbnRhaW5lciBwYXJhbSB0byBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiB1c2UgYSBjdXN0b20gY29udGFpbmVyLiBJZiB5b3UKKyAgICAgKiBkbyBub3QgY3JlYXRlIG9uZSwgb25lIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LgorICAgICAqLworICAgICpjb250YWluZXJfcHRyX3B0ciA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNhY2hlIHBhcmFtIHRvIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogVE9ETzozNDU6QTogU2V0IHVwIGRvdDNTdGF0c1RhYmxlIGNhY2hlIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCisgICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKKyAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAorICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCisgICAgICovCisgICAgY2FjaGUtPnRpbWVvdXQgPSBET1QzU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUOyAgICAgIC8qIHNlY29uZHMgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93blxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgZG90M1N0YXRzVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGRvdDNTdGF0c1RhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KKworLyoKKyAqCisgKiBAcmV0dmFsICBNRkRfU1VDQ0VTUyBzdWNjZXNzCisgKiBAcmV0dmFsICBNRkRfRVJST1IgY291bGQgbm90IGdldCB0aGUgaW50ZXJmYWNlIG5hbWVzIAorICogQHJldHZhbCAgTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkKKyAqIEByZXR2YWwgIC0yIGNvdWxkIG5vdCBvcGVuIGEgc29ja2V0CisgKi8KKworCitpbnQKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIHNpemVfdCAgICAgICAgICBjb3VudCA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGZkOworI2lmIGRlZmluZWQobGludXgpCisgICAgbG9uZyAgICAgICAgICAgIGRvdDNTdGF0c0luZGV4OworICAgIGludCAgICAgICAgICAgICByYyA9IDAsIHJldHZhbCA9IDA7CisgICAgc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkID0gTlVMTCwgKnAgPSBOVUxMOworI2VuZGlmCisgICAgCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKyAgICAgIAorICAgIC8qCisgICAgICogVE9ETzozNTI6TTogfCAgIHwtPiBzZXQgaW5kZXhlcyBpbiBuZXcgZG90M1N0YXRzVGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICogZGF0YSBjb250ZXh0IHdpbGwgYmUgc2V0IGZyb20gdGhlIHBhcmFtICh1bmxlc3MgTlVMTCwKKyAgICAgKiBpbiB3aGljaCBjYXNlIGEgbmV3IGRhdGEgY29udGV4dCB3aWxsIGJlIGFsbG9jYXRlZCkKKyAgICAgKi8KKyAgICAKKyAgICAvKgorICAgICAqIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBpbmRleCB2YWx1ZXMKKyAgICAgKi8KKworICAgIC8qCisgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSAorICAgICAqLworCisKKworICAgIC8qCisgICAgICogY3JlYXRlIHNvY2tldCBmb3IgaW9jdGxzCisgICAgICovCisgICAgCisgICAgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgaWYoZmQgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIHNvY2tldFxuIik7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgaW50ZXJmYWNlIG5hbWVzIG9mIHRoZSBkZXZpY2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSwgaW4gY2FzZSBvZiBmYWlsdXJlIHJldHZhbCBzdWdnZXN0cyB0aGUgcmVzb24gZm9yIGZhaWx1cmUKKyAgICAgKiBhbmQgbGlzdF9oZWFkIGNvbnRhaW5zIG51bGwKKyAgICAgKi8KKworI2lmIGRlZmluZWQobGludXgpCisgICAgbGlzdF9oZWFkID0gZG90M3N0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IChsaXN0X2hlYWQsICZyZXR2YWwpOworCisgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsIGVycm9yIGdldHRpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBwcmVzZW50IGluIHRoZSBzeXN0ZW1cbiIpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgImVycm9yIGdldHRpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0iKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBXYWxrIG92ZXIgdGhlIGxpc3Qgb2YgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBhbmQgcmV0cmVpdmUgdGhlIHN0YXRpc3RpY3MgCisgICAgICovCisKKyAgICBmb3IgKHAgPSBsaXN0X2hlYWQ7IHA7IHAgPSBwLT5pZm5fbmV4dCkgeworICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAicHJvY2Vzc2luZyAnJXMnXG4iLCBwLT5uYW1lKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IGluZGV4IHZpYSBpb2N0bC4KKyAgICAgICAgICovCisKKyAgICAgICAgZG90M1N0YXRzSW5kZXggPSAobG9uZykgZG90M3N0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCgtMSwgcC0+bmFtZSk7CisKKyAgICAgICAgLyogCisgICAgICAgICAqICAgIGdldCB0aGUgZG90M3N0YXRzIGNvbnRlbnRzIHBvcHVsYXRlZCwgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gZXRoZXJuZXQgZGV2aWNlCisgICAgICAgICAqICAgIHRoZSBvcGVyYXRpb24gd2lsbCBub3QgYmUgc3VwcG9ydGVkIGFuZCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbG9nZ2VkCisgICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgcm93cmVxX2N0eCA9IGRvdDNTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoTlVMTCk7CisgICAgICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtZW1vcnkgYWxsb2NhdGlvbiBmb3IgZG90M1N0YXRzVGFibGUgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwgZG90M1N0YXRzSW5kZXgpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzVGFibGUgZGF0YS5cbiIpOworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjM1MjpyOiB8ICAgfC0+IHBvcHVsYXRlIGRvdDNTdGF0c1RhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgICAgICogUG9wdWxhdGUgZGF0YSBjb250ZXh0IGhlcmUuIChvcHRpb25hbGx5LCBkZWxheSB1bnRpbCByb3cgcHJlcCkKKyAgICAgICAgICovCisgICAgICAgIC8qCisgICAgICAgICAqIG5vbi1UUkFOU0lFTlQgZGF0YTogbm8gbmVlZCB0byBjb3B5LiBzZXQgcG9pbnRlciB0byBkYXRhIAorICAgICAgICAgKi8KKworICAgICAgICBtZW1zZXQgKCZyb3dyZXFfY3R4LT5kYXRhLCAwLCBzaXplb2YgKHJvd3JlcV9jdHgtPmRhdGEpKTsKKyAgICAgICAgcmMgPSBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2dldCAocm93cmVxX2N0eCwgZmQsIHAtPm5hbWUpOworCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgZ2V0dGluZyB0aGUgc3RhdGlzdGljcyBmb3IgaW50ZXJmYWNlIHwlc3wgIgorICAgICAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlIGRhdGEsIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgc3VwcG9ydGVkXG4iLCBwLT5uYW1lKSk7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gaW50ZXJmYWNlX2lvY3RsX2RvdDNzdGF0c19kdXBsZXhfZ2V0KHJvd3JlcV9jdHgsIGZkLCBwLT5uYW1lKTsKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJlcnJvciBnZXR0aW5nIHRoZSBkdXBsZXggc3RhdHVzIGZvciB8JXN8ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZSBkYXRhLCBvcGVyYXRpb24gbWlnaHQgbm90IGJlIHN1cHBvcnRlZFxuIiwgcC0+bmFtZSkpOworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworCWludGVyZmFjZV9zeXNjbGFzc25ldF9kb3Qzc3RhdHNfZ2V0KHJvd3JlcV9jdHgsIHAtPm5hbWUpOworCisJaW50ZXJmYWNlX2RvdDNzdGF0c19nZXRfZXJyb3Jjb3VudGVycyhyb3dyZXFfY3R4LCBwLT5uYW1lKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBpbnNlcnQgaW50byB0YWJsZSBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgImVycm9yIGluc2VydGluZyB8JXN8IiwgcC0+bmFtZSkpOworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIGNsb3NlKGZkKTsKKworICAgIC8qCisgICAgICogZnJlZSB0aGUgaW50ZXJmYWNlIG5hbWVzIGxpc3QgCisgICAgICovCisKKyAgICBpZiAoIChkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlKGxpc3RfaGVhZCkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLCBlcnJvciBmcmVlaW5nIHRoZSBpbnRlcmZhY2UgbmFtZSBsaXN0IFxuIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgZnJlZWluZyB0aGUgaW50ZXJmYWNlIG5hbWUgbGlzdFxuIikpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyNlbmRpZgorCisgICAgREVCVUdNU0dUKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgJSIgTkVUU05NUF9QUkl6ICJkIHJlY29yZHNcbiIsIGNvdW50KSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGRvdDNTdGF0c1RhYmxlIGNvbnRhaW5lciBkYXRhLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIHByZXBhcmUgcm93IGZvciBwcm9jZXNzaW5nLgorICoKKyAqICBXaGVuIHRoZSBhZ2VudCBoYXMgbG9jYXRlZCB0aGUgcm93IGZvciBhIHJlcXVlc3QsIHRoaXMgZnVuY3Rpb24gaXMKKyAqICBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgcm93IGZvciBwcm9jZXNzaW5nLiBJZiB5b3UgZnVsbHkgcG9wdWxhdGVkCisgKiAgdGhlIGRhdGEgY29udGV4dCBkdXJpbmcgdGhlIGluZGV4IHNldHVwIHBoYXNlLCB5b3UgbWF5IG5vdCBuZWVkIHRvCisgKiAgZG8gYW55dGhpbmcuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggcG9pbnRlciB0byBhIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfcm93X3ByZXAgKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMzlhOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIERPVDNTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZG90M1N0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c1RhYmxlIGlzIHN1YmlkIDIgb2YgZG90My4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLCBsZW5ndGg6IDkKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVnKTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjE4MDpvOiBSZXZpZXcgZG90M1N0YXRzVGFibGUgY2FjaGUgdGltZW91dC4KKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjYWNoZSB0aW1lcyBvdXQKKyAgICAgKi8KKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVCAgIDYwCisKKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSk7CisgICAgdm9pZCAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyKTsKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jYWNoZV9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jYWNoZV9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisjZGVmaW5lIE1BWF9MSU5FX1NJWkUgMjU2CisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcm93X3ByZXAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgdm9pZCAgICAgICAgICAgIGludGVyZmFjZV9zeXNjbGFzc25ldF9kb3Qzc3RhdHNfZ2V0CisgICAgICAgIChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgdm9pZCAgICAgICAgICAgIGludGVyZmFjZV9kb3Qzc3RhdHNfZ2V0X2Vycm9yY291bnRlcnMKKyAgICAgICAgKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjY0NmUwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jCkBAIC0wLDAgKzEsMTQ1MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZS5oIgorCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9nZXQgZGF0YV9nZXQ6IFJvdXRpbmVzIHRvIGdldCBkYXRhCisgKgorICogVE9ETzoyMzA6TTogSW1wbGVtZW50IGRvdDNTdGF0c1RhYmxlIGdldCByb3V0aW5lcy4KKyAqIFRPRE86MjQwOk06IEltcGxlbWVudCBkb3QzU3RhdHNUYWJsZSBtYXBwaW5nIHJvdXRpbmVzIChpZiBhbnkpLgorICoKKyAqIFRoZXNlIHJvdXRpbmUgYXJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB3aGVyZSB0aGUKKyAqIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQuCisgKgorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLCBsZW5ndGg6IDkKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBkb3QzU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisKKworLyoqCisgKiBzZXQgbWliIGluZGV4KGVzKQorICoKKyAqIEBwYXJhbSB0YmxfaWR4IG1pYiBpbmRleCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBkb3QzU3RhdHNJbmRleF92YWwKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igc2V0dGluZyBhbGwgdGhlIE1JQiBpbmRleAorICogIGNvbXBvbmVudHMgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBJdCBpcyBhc3N1bWUgdGhhdCB0aGUgQyB2YWx1ZXMKKyAqICBoYXZlIGFscmVhZHkgYmVlbiBtYXBwZWQgZnJvbSB0aGVpciBuYXRpdmUvcmF3Zm9ybWF0IHRvIHRoZSBNSUIgZm9ybWF0LgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICogdGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICB0YmxfaWR4LT5kb3QzU3RhdHNJbmRleCA9IGRvdDNTdGF0c0luZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KCZyb3dyZXFfY3R4LT50YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0luZGV4X3ZhbCkpCisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQgbWliIGluZGV4IHRvIG9pZCBpbmRleAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gc2l6ZW9mKHJvd3JlcV9jdHgtPm9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisgICAgaWYgKDAgIT0gZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkKCZyb3dyZXFfY3R4LT5vaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+dGJsX2lkeCkpIHsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0FsaWdubWVudEVycm9ycworICogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzIGlzIHN1YmlkIDIgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMgorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyByZWNlaXZlZCBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRoYXQgYXJlIG5vdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgb2N0ZXRzIGluIGxlbmd0aCBhbmQgZG8gbm90IHBhc3MgdGhlIEZDUyBjaGVjay4KKworICAgICAgICAgICAgICAgICAgICBUaGUgY291bnQgcmVwcmVzZW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgaW5jcmVtZW50ZWQgd2hlbiB0aGUgYWxpZ25tZW50RXJyb3IKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGlzIHJldHVybmVkIGJ5IHRoZSBNQUMgc2VydmljZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgTExDIChvciBvdGhlciBNQUMgdXNlcikuIFJlY2VpdmVkIGZyYW1lcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVsdGlwbGUgZXJyb3IgY29uZGl0aW9ucyBwZXJ0YWluIGFyZSwKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiBJRUVFIDgwMi4zCisgICAgICAgICAgICAgICAgICAgIExheWVyIE1hbmFnZW1lbnQsIGNvdW50ZWQgZXhjbHVzaXZlbHkgYWNjb3JkaW5nCisKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGVycm9yIHN0YXR1cyBwcmVzZW50ZWQgdG8gdGhlIExMQy4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IGZvciBncm91cAorICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyBzY2hlbWVzIGdyZWF0ZXIgdGhhbiA0IGJpdHMgcGVyIGdyb3VwLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgY2FuIHJvbGwgb3ZlciBpbiBsZXNzIHRoYW4gNSBtaW51dGVzIGlmCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluY3JlbWVudGluZyBhdCBpdHMgbWF4aW11bSByYXRlLiAgU2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbW91bnQgb2YgdGltZSBjb3VsZCBiZSBsZXNzIHRoYW4gYQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN0YXRpb24ncyBwb2xsIGN5Y2xlIHRpbWUsIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGEgbG9zcyBvZiBpbmZvcm1hdGlvbiwgYSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN0YXRpb24gaXMgYWR2aXNlZCB0byBwb2xsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzSENTdGF0c0FsaWdubWVudEVycm9ycyBvYmplY3QgZm9yIDEwIEdiL3MKKyAgICAgICAgICAgICAgICAgICAgb3IgZmFzdGVyIGludGVyZmFjZXMuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0ZDU0Vycm9ycworICogZG90M1N0YXRzRkNTRXJyb3JzIGlzIHN1YmlkIDMgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMworICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyByZWNlaXZlZCBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRoYXQgYXJlIGFuIGludGVncmFsIG51bWJlciBvZiBvY3RldHMKKyAgICAgICAgICAgICAgICAgICAgaW4gbGVuZ3RoIGJ1dCBkbyBub3QgcGFzcyB0aGUgRkNTIGNoZWNrLiAgVGhpcworICAgICAgICAgICAgICAgICAgICBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgIGZyYW1lLXRvby1sb25nIG9yIGZyYW1lLXRvby1zaG9ydCBlcnJvci4KKworICAgICAgICAgICAgICAgICAgICBUaGUgY291bnQgcmVwcmVzZW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgaW5jcmVtZW50ZWQgd2hlbiB0aGUgZnJhbWVDaGVja0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyBpcyByZXR1cm5lZCBieSB0aGUgTUFDIHNlcnZpY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIExMQyAob3Igb3RoZXIgTUFDIHVzZXIpLiBSZWNlaXZlZCBmcmFtZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIG11bHRpcGxlIGVycm9yIGNvbmRpdGlvbnMgcGVydGFpbiBhcmUsCisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgY29udmVudGlvbnMgb2YgSUVFRSA4MDIuMworICAgICAgICAgICAgICAgICAgICBMYXllciBNYW5hZ2VtZW50LCBjb3VudGVkIGV4Y2x1c2l2ZWx5IGFjY29yZGluZworICAgICAgICAgICAgICAgICAgICB0byB0aGUgZXJyb3Igc3RhdHVzIHByZXNlbnRlZCB0byB0aGUgTExDLgorCisgICAgICAgICAgICAgICAgICAgIE5vdGU6ICBDb2RpbmcgZXJyb3JzIGRldGVjdGVkIGJ5IHRoZSBwaHlzaWNhbAorICAgICAgICAgICAgICAgICAgICBsYXllciBmb3Igc3BlZWRzIGFib3ZlIDEwIE1iL3Mgd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUgdG8gZmFpbCB0aGUgRkNTIGNoZWNrLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgY2FuIHJvbGwgb3ZlciBpbiBsZXNzIHRoYW4gNSBtaW51dGVzIGlmCisKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzRkNTRXJyb3JzIG9iamVjdCBmb3IgMTAgR2IvcyBvcgorICAgICAgICAgICAgICAgICAgICBmYXN0ZXIgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ZDU0Vycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzRkNTRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0ZDU0Vycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNGQ1NFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0ZDU0Vycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRkNTRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzCisgKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMgaXMgc3ViaWQgNCBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS40CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHRoYXQgYXJlIGludm9sdmVkIGluIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbiwgYW5kIGFyZSBzdWJzZXF1ZW50bHkgdHJhbnNtaXR0ZWQKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5LgorCisgICAgICAgICAgICAgICAgICAgIEEgZnJhbWUgdGhhdCBpcyBjb3VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGFsc28gY291bnRlZCBieSB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiBlaXRoZXIgdGhlIGlmT3V0VWNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBpZk91dE11bHRpY2FzdFBrdHMsIG9yIGlmT3V0QnJvYWRjYXN0UGt0cywKKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIG5vdCBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIHRoZSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcworICAgICAgICAgICAgICAgICAgICBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcworICogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgaXMgc3ViaWQgNSBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS41CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHRoYXQgYXJlIGludm9sdmVkIGluIG1vcmUKKworICAgICAgICAgICAgICAgICAgICB0aGFuIG9uZSBjb2xsaXNpb24gYW5kIGFyZSBzdWJzZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bGx5LgorCisgICAgICAgICAgICAgICAgICAgIEEgZnJhbWUgdGhhdCBpcyBjb3VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGFsc28gY291bnRlZCBieSB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiBlaXRoZXIgdGhlIGlmT3V0VWNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBpZk91dE11bHRpY2FzdFBrdHMsIG9yIGlmT3V0QnJvYWRjYXN0UGt0cywKKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIG5vdCBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIHRoZSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c1NRRVRlc3RFcnJvcnMKKyAqIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMgaXMgc3ViaWQgNiBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS42CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgdGltZXMgdGhhdCB0aGUgU1FFIFRFU1QgRVJST1IKKyAgICAgICAgICAgICAgICAgICAgaXMgcmVjZWl2ZWQgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZS4gVGhlCisgICAgICAgICAgICAgICAgICAgIFNRRSBURVNUIEVSUk9SIGlzIHNldCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHJ1bGVzIGZvciB2ZXJpZmljYXRpb24gb2YgdGhlIFNRRSBkZXRlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgbWVjaGFuaXNtIGluIHRoZSBQTFMgQ2FycmllciBTZW5zZSBGdW5jdGlvbiBhcworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gSUVFRSBTdGQuIDgwMi4zLCAyMDAwIEVkaXRpb24sCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gNy4yLjQuNi4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IG9uIGludGVyZmFjZXMKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIGF0IHNwZWVkcyBncmVhdGVyIHRoYW4gMTAgTWIvcywgb3Igb24KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU1FFVGVzdEVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzU1FFVGVzdEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNTUUVUZXN0RXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zCisgKiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgaXMgc3ViaWQgNyBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS43CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIGZvciB3aGljaCB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uIGF0dGVtcHQgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICBpcyBkZWxheWVkIGJlY2F1c2UgdGhlIG1lZGl1bSBpcyBidXN5LgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBkb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyBpbnZvbHZlZCBpbgorICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25zLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMKKyAqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zIGlzIHN1YmlkIDggb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYSBjb2xsaXNpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSBsYXRlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIG9uZSBzbG90VGltZSBpbnRvIHRoZSB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQuCisKKyAgICAgICAgICAgICAgICAgICAgQSAobGF0ZSkgY29sbGlzaW9uIGluY2x1ZGVkIGluIGEgY291bnQKKyAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgYWxzbyBjb25zaWRlcmVkIGFzIGEgKGdlbmVyaWMpIGNvbGxpc2lvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgcHVycG9zZXMgb2Ygb3RoZXIgY29sbGlzaW9uLXJlbGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0xhdGVDb2xsaXNpb25zX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucworICogZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBpcyBzdWJpZCA5IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjkKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgZm9yIHdoaWNoIHRyYW5zbWlzc2lvbiBvbiBhCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgaW50ZXJmYWNlIGZhaWxzIGR1ZSB0byBleGNlc3NpdmUKKyAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9ucy4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMKKyAqIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgaXMgc3ViaWQgMTAgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTAKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgZm9yIHdoaWNoIHRyYW5zbWlzc2lvbiBvbiBhCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgaW50ZXJmYWNlIGZhaWxzIGR1ZSB0byBhbiBpbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBNQUMgc3VibGF5ZXIgdHJhbnNtaXQgZXJyb3IuIEEgZnJhbWUgaXMgb25seQorICAgICAgICAgICAgICAgICAgICBjb3VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IGlmIGl0IGlzCisgICAgICAgICAgICAgICAgICAgIG5vdCBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aGUgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgb2JqZWN0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBvYmplY3QsIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgb2JqZWN0LgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmVjaXNlIG1lYW5pbmcgb2YgdGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IGlzIGltcGxlbWVudGF0aW9uLQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYy4gIEluIHBhcnRpY3VsYXIsIGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IG1heSByZXByZXNlbnQgYSBjb3VudCBvZiB0cmFuc21pc3Npb24KKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzIG9uIGEgcGFydGljdWxhciBpbnRlcmZhY2UgdGhhdCBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBjb3VudGVkLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgY2FuIHJvbGwgb3ZlciBpbiBsZXNzIHRoYW4gNSBtaW51dGVzIGlmCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluY3JlbWVudGluZyBhdCBpdHMgbWF4aW11bSByYXRlLiAgU2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbW91bnQgb2YgdGltZSBjb3VsZCBiZSBsZXNzIHRoYW4gYQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN0YXRpb24ncyBwb2xsIGN5Y2xlIHRpbWUsIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGEgbG9zcyBvZiBpbmZvcm1hdGlvbiwgYSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN0YXRpb24gaXMgYWR2aXNlZCB0byBwb2xsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzSENTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgb2JqZWN0IGZvcgorICAgICAgICAgICAgICAgICAgICAxMCBHYi9zIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycworICogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzIGlzIHN1YmlkIDExIG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjExCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgY2FycmllciBzZW5zZQorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gd2FzIGxvc3Qgb3IgbmV2ZXIgYXNzZXJ0ZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICBhdHRlbXB0aW5nIHRvIHRyYW5zbWl0IGEgZnJhbWUgb24gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4KKworICAgICAgICAgICAgICAgICAgICBUaGUgY291bnQgcmVwcmVzZW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgaW5jcmVtZW50ZWQgYXQgbW9zdCBvbmNlIHBlcgorICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gYXR0ZW1wdCwgZXZlbiBpZiB0aGUgY2FycmllciBzZW5zZQorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gZmx1Y3R1YXRlcyBkdXJpbmcgYSB0cmFuc21pc3Npb24KKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdC4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRnJhbWVUb29Mb25ncworICogZG90M1N0YXRzRnJhbWVUb29Mb25ncyBpcyBzdWJpZCAxMyBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xMworICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyByZWNlaXZlZCBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIHBlcm1pdHRlZAorICAgICAgICAgICAgICAgICAgICBmcmFtZSBzaXplLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmcmFtZVRvb0xvbmcKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGlzIHJldHVybmVkIGJ5IHRoZSBNQUMgc2VydmljZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgTExDIChvciBvdGhlciBNQUMgdXNlcikuIFJlY2VpdmVkIGZyYW1lcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVsdGlwbGUgZXJyb3IgY29uZGl0aW9ucyBwZXJ0YWluIGFyZSwKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiBJRUVFIDgwMi4zCisgICAgICAgICAgICAgICAgICAgIExheWVyIE1hbmFnZW1lbnQsIGNvdW50ZWQgZXhjbHVzaXZlbHkgYWNjb3JkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBlcnJvciBzdGF0dXMgcHJlc2VudGVkIHRvIHRoZSBMTEMuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA4MCBtaW51dGVzIGlmCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluY3JlbWVudGluZyBhdCBpdHMgbWF4aW11bSByYXRlLiAgU2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbW91bnQgb2YgdGltZSBjb3VsZCBiZSBsZXNzIHRoYW4gYQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN0YXRpb24ncyBwb2xsIGN5Y2xlIHRpbWUsIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGEgbG9zcyBvZiBpbmZvcm1hdGlvbiwgYSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN0YXRpb24gaXMgYWR2aXNlZCB0byBwb2xsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzSENTdGF0c0ZyYW1lVG9vTG9uZ3Mgb2JqZWN0IGZvciAxMCBHYi9zCisgICAgICAgICAgICAgICAgICAgIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRnJhbWVUb29Mb25ncyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3M7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMKKyAqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyBpcyBzdWJpZCAxNiBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xNgorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyBmb3Igd2hpY2ggcmVjZXB0aW9uIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBpbnRlcmZhY2UgZmFpbHMgZHVlIHRvIGFuIGludGVybmFsCisgICAgICAgICAgICAgICAgICAgIE1BQyBzdWJsYXllciByZWNlaXZlIGVycm9yLiBBIGZyYW1lIGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgY291bnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpZiBpdCBpcworICAgICAgICAgICAgICAgICAgICBub3QgY291bnRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdGhlIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3Mgb2JqZWN0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzIG9iamVjdCwgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0ZDU0Vycm9ycyBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZWNpc2UgbWVhbmluZyBvZiB0aGUgY291bnQgcmVwcmVzZW50ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaXMgaW1wbGVtZW50YXRpb24tCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljLiAgSW4gcGFydGljdWxhciwgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgbWF5IHJlcHJlc2VudCBhIGNvdW50IG9mIHJlY2VpdmUgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgIG9uIGEgcGFydGljdWxhciBpbnRlcmZhY2UgdGhhdCBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBjb3VudGVkLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgY2FuIHJvbGwgb3ZlciBpbiBsZXNzIHRoYW4gNSBtaW51dGVzIGlmCisKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIG9iamVjdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgMTAgR2IvcyBvciBmYXN0ZXIgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0V0aGVyQ2hpcFNldAorICogZG90M1N0YXRzRXRoZXJDaGlwU2V0IGlzIHN1YmlkIDE3IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBEZXByZWNhdGVkLCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjE3CisgKiBEZXNjcmlwdGlvbjoKKyoqKioqKioqIFRISVMgT0JKRUNUIElTIERFUFJFQ0FURUQgKioqKioqKioKKworICAgICAgICAgICAgICAgICAgICBUaGlzIG9iamVjdCBjb250YWlucyBhbiBPQkpFQ1QgSURFTlRJRklFUgorICAgICAgICAgICAgICAgICAgICB3aGljaCBpZGVudGlmaWVzIHRoZSBjaGlwc2V0IHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVhbGl6ZSB0aGUgaW50ZXJmYWNlLiBFdGhlcm5ldC1saWtlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXMgYXJlIHR5cGljYWxseSBidWlsdCBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBkaWZmZXJlbnQgY2hpcHMuIFRoZSBNSUIgaW1wbGVtZW50b3IKKyAgICAgICAgICAgICAgICAgICAgaXMgcHJlc2VudGVkIHdpdGggYSBkZWNpc2lvbiBvZiB3aGljaCBjaGlwCisgICAgICAgICAgICAgICAgICAgIHRvIGlkZW50aWZ5IHZpYSB0aGlzIG9iamVjdC4gVGhlIGltcGxlbWVudG9yCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBpZGVudGlmeSB0aGUgY2hpcCB3aGljaCBpcyB1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZCB0aGUgTWVkaXVtIEFjY2VzcyBDb250cm9sIGNoaXAuCisgICAgICAgICAgICAgICAgICAgIElmIG5vIHN1Y2ggY2hpcCBpcyBlYXNpbHkgaWRlbnRpZmlhYmxlLAorICAgICAgICAgICAgICAgICAgICB0aGUgaW1wbGVtZW50b3Igc2hvdWxkIGlkZW50aWZ5IHRoZSBjaGlwCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFjdHVhbGx5IGdhdGhlcnMgdGhlIHRyYW5zbWl0CisgICAgICAgICAgICAgICAgICAgIGFuZCByZWNlaXZlIHN0YXRpc3RpY3MgYW5kIGVycm9yCisgICAgICAgICAgICAgICAgICAgIGluZGljYXRpb25zLiBUaGlzIHdvdWxkIGFsbG93IGEKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlciBzdGF0aW9uIHRvIGNvcnJlbGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyBhbmQgdGhlIGNoaXAgZ2VuZXJhdGluZworICAgICAgICAgICAgICAgICAgICB0aGVtLCBnaXZpbmcgaXQgdGhlIGFiaWxpdHkgdG8gdGFrZQorICAgICAgICAgICAgICAgICAgICBpbnRvIGFjY291bnQgYW55IGtub3duIGFub21hbGllcworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY2hpcC4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIG9iamVjdCBoYXMgYmVlbiBkZXByZWNhdGVkLiAgSW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2sgaW5kaWNhdGVzIHRoYXQgaXQgaXMgb2YgbGltaXRlZCB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBuZXR3b3JrIHByb2JsZW1zIGluIHRoZSBmaWVsZCwgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGl2ZSBvdmVyaGVhZCBpbnZvbHZlZCBpbgorICAgICAgICAgICAgICAgICAgICBtYWludGFpbmluZyBhIHJlZ2lzdHJ5IG9mIGNoaXBzZXQgT0lEcyBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAganVzdGlmaWVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgT0JKRUNUSUQgKGJhc2VkIG9uIHBlcmx0eXBlIE9CSkVDVElEKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX09CSkVDVF9JRC4gVGhlIEMgdHlwZSBkZWNsIGlzIG9pZCAob2lkKQorICogVGhpcyBkYXRhIHR5cGUgcmVxdWlyZXMgYSBsZW5ndGguCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIG9pZCB2YXJpYWJsZQorICogQHBhcmFtIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIGEgc2l6ZV90LiBPbiBlbnRyeSwgaXQgd2lsbCBjb250YWluIHRoZSBzaXplIChpbiBieXRlcykKKyAqICAgICAgICBwb2ludGVkIHRvIGJ5IGRvdDNTdGF0c0V0aGVyQ2hpcFNldC4KKyAqICAgICAgICBPbiBleGl0LCB0aGlzIHZhbHVlIHNob3VsZCBjb250YWluIHRoZSBkYXRhIHNpemUgKGluIGJ5dGVzKS4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorKgorICogQG5vdGUgSWYgeW91IG5lZWQgbW9yZSB0aGFuICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cikgYnl0ZXMgb2YgbWVtb3J5LAorICogICAgICAgYWxsb2NhdGUgaXQgdXNpbmcgbWFsbG9jKCkgYW5kIHVwZGF0ZSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIuCisgKiAgICAgICA8Yj5ETyBOT1Q8L2I+IGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgKiAgICAgICBUaGUgTUZEIGhlbHBlciB3aWxsIHJlbGVhc2UgdGhlIG1lbW9yeSB5b3UgYWxsb2NhdGUuCisgKgorICogQHJlbWFyayBJZiB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uIHlvdXJzZWxmLCB5b3UgYXJlIHJlc3BvbnNpYmxlCisgKiAgICAgICAgIGZvciBjaGVja2luZyBpZiB0aGUgcG9pbnRlciBjaGFuZ2VkLCBhbmQgZnJlZWluZyBhbnkKKyAqICAgICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5LiAoTm90IG5lY2Vzc2FyeSBpZiB5b3UgcGFzcworICogICAgICAgICBpbiBhIHBvaW50ZXIgdG8gc3RhdGljIG1lbW9yeSwgb2J2aW91c2x5LikKKyAqLworaW50Citkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiogZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0cikKKyAgICAgICAgICAgICAgICAgICAmJiAoTlVMTCAhPSAqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKSk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzRXRoZXJDaGlwU2V0X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0V0aGVyQ2hpcFNldCBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyICkgZGF0YSBhbmQgKCogZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIC8qCisgICAgICogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEKKyAgICAgKi8KKyAgICBpZiAoKE5VTEwgPT0gKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpKSB8fAorICAgICAgICAoKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyKSA8CisgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuICoKKyAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pKSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIGRvdDNTdGF0c0V0aGVyQ2hpcFNldCBkYXRhCisgICAgICAgICAqLworICAgICAgICAoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0cikgPQorICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0X2xlbiAqCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0WzBdKSk7CisgICAgICAgIGlmIChOVUxMID09ICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICAoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuICoKKyAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0WzBdKTsKKyAgICBtZW1jcHkoKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldCwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuICoKKyAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0WzBdKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c1N5bWJvbEVycm9ycworICogZG90M1N0YXRzU3ltYm9sRXJyb3JzIGlzIHN1YmlkIDE4IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjE4CisgKiBEZXNjcmlwdGlvbjoKK0ZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGF0IDEwMCBNYi9zLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRpbWVzIHRoZXJlIHdhcyBhbiBpbnZhbGlkIGRhdGEgc3ltYm9sCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYSB2YWxpZCBjYXJyaWVyIHdhcyBwcmVzZW50LgorCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGluIGhhbGYtZHVwbGV4IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXQgMTAwMCBNYi9zLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByZWNlaXZpbmcKKyAgICAgICAgICAgICAgICAgICAgbWVkaWEgaXMgbm9uLWlkbGUgKGEgY2FycmllciBldmVudCkgZm9yIGEgcGVyaW9kCisgICAgICAgICAgICAgICAgICAgIG9mIHRpbWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHNsb3RUaW1lLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHdoaWNoIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgb2NjdXJyZW5jZQorICAgICAgICAgICAgICAgICAgICBvZiBhbiBldmVudCB0aGF0IGNhdXNlcyB0aGUgUEhZIHRvIGluZGljYXRlCisgICAgICAgICAgICAgICAgICAgICdEYXRhIHJlY2VwdGlvbiBlcnJvcicgb3IgJ2NhcnJpZXIgZXh0ZW5kIGVycm9yJworICAgICAgICAgICAgICAgICAgICBvbiB0aGUgR01JSS4KKworICAgICAgICAgICAgICAgICAgICBGb3IgYW4gaW50ZXJmYWNlIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlCisgICAgICAgICAgICAgICAgICAgIGF0IDEwMDAgTWIvcywgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcmVjZWl2aW5nCisgICAgICAgICAgICAgICAgICAgIG1lZGlhIGlzIG5vbi1pZGxlIChhIGNhcnJpZXIgZXZlbnQpIGZvciBhIHBlcmlvZAorICAgICAgICAgICAgICAgICAgICBvZiB0aW1lIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBtaW5GcmFtZVNpemUsCisgICAgICAgICAgICAgICAgICAgIGFuZCBkdXJpbmcgd2hpY2ggdGhlcmUgd2FzIGF0IGxlYXN0IG9uZQorICAgICAgICAgICAgICAgICAgICBvY2N1cnJlbmNlIG9mIGFuIGV2ZW50IHRoYXQgY2F1c2VzIHRoZSBQSFkgdG8KKyAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgJ0RhdGEgcmVjZXB0aW9uIGVycm9yJyBvbiB0aGUgR01JSS4KKworICAgICAgICAgICAgICAgICAgICBGb3IgYW4gaW50ZXJmYWNlIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRpbWVzIHRoZSByZWNlaXZpbmcgbWVkaWEgaXMgbm9uLWlkbGUKKyAgICAgICAgICAgICAgICAgICAgKGEgY2FycmllciBldmVudCkgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZXF1YWwgdG8KKyAgICAgICAgICAgICAgICAgICAgb3IgZ3JlYXRlciB0aGFuIG1pbkZyYW1lU2l6ZSwgYW5kIGR1cmluZyB3aGljaAorICAgICAgICAgICAgICAgICAgICB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIG9jY3VycmVuY2Ugb2YgYW4gZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZXMgdGhlIFBIWSB0byBpbmRpY2F0ZSAnUmVjZWl2ZSBFcnJvcicKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIFhHTUlJLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBhdCBtb3N0IG9uY2UgcGVyIGNhcnJpZXIKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQsIGV2ZW4gaWYgbXVsdGlwbGUgc3ltYm9sIGVycm9ycyBvY2N1cgorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGNhcnJpZXIgZXZlbnQuICBUaGlzIGNvdW50IGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGluY3JlbWVudCBpZiBhIGNvbGxpc2lvbiBpcyBwcmVzZW50LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBhdCAxMCBNYi9zLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCAxMCBHYi9zLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgY2FuIHJvbGwgb3ZlciBpbiBsZXNzIHRoYW4gNSBtaW51dGVzIGlmCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluY3JlbWVudGluZyBhdCBpdHMgbWF4aW11bSByYXRlLiAgU2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbW91bnQgb2YgdGltZSBjb3VsZCBiZSBsZXNzIHRoYW4gYQorCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzU3ltYm9sRXJyb3JzIG9iamVjdCBmb3IgMTAgR2IvcworICAgICAgICAgICAgICAgICAgICBvciBmYXN0ZXIgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1N5bWJvbEVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1N5bWJvbEVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNTeW1ib2xFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c1N5bWJvbEVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRHVwbGV4U3RhdHVzCisgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMgaXMgc3ViaWQgMTkgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTkKKyAqIERlc2NyaXB0aW9uOgorVGhlIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRpb24gb2YgdGhlIE1BQworICAgICAgICAgICAgICAgICAgICBlbnRpdHkuICAndW5rbm93bicgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZHVwbGV4IG1vZGUgY291bGQgbm90IGJlIGRldGVybWluZWQuCisKKyAgICAgICAgICAgICAgICAgICAgTWFuYWdlbWVudCBjb250cm9sIG9mIHRoZSBkdXBsZXggbW9kZSBpcworICAgICAgICAgICAgICAgICAgICBhY2NvbXBsaXNoZWQgdGhyb3VnaCB0aGUgTUFVIE1JQi4gIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgYW4gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgYXV0b25lZ290aWF0aW9uLAorICAgICAgICAgICAgICAgICAgICBvciB3aGVuIGF1dG9uZWdvdGlhdGlvbiBpcyBub3QgZW5hYmxlZCwgdGhlCisgICAgICAgICAgICAgICAgICAgIGR1cGxleCBtb2RlIGlzIGNvbnRyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgaWZNYXVEZWZhdWx0VHlwZS4gIFdoZW4gYXV0b25lZ290aWF0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCwgZHVwbGV4IG1vZGUgaXMgY29udHJvbGxlZAorICAgICAgICAgICAgICAgICAgICB1c2luZyBpZk1hdUF1dG9OZWdBZHZlcnRpc2VkQml0cy4gIEluIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICBjYXNlLCB0aGUgY3VycmVudGx5IG9wZXJhdGluZyBkdXBsZXggbW9kZSBpcworICAgICAgICAgICAgICAgICAgICByZWZsZWN0ZWQgYm90aCBpbiB0aGlzIG9iamVjdCBhbmQgaW4gaWZNYXVUeXBlLgorCisgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIG9iamVjdCBwcm92aWRlcyByZWR1bmRhbnQKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gd2l0aCBpZk1hdVR5cGUuICBOb3JtYWxseSwgcmVkdW5kYW50CisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMgYXJlIGRpc2NvdXJhZ2VkLiAgSG93ZXZlciwgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgaXQgYWxsb3dzIGEgbWFuYWdlbWVudCBhcHBsaWNhdGlvbiB0bworICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgdGhlIGR1cGxleCBzdGF0dXMgb2YgYW4gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgZXZlcnkgcG9zc2libGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgaWZNYXVUeXBlLiAgVGhpcyB3YXMgZmVsdCB0byBiZSBzdWZmaWNpZW50bHkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWFibGUgdG8ganVzdGlmeSB0aGUgcmVkdW5kYW5jeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIEVudW0gcmFuZ2U6IDMvOC4gVmFsdWVzOiAgdW5rbm93bigxKSwgaGFsZkR1cGxleCgyKSwgZnVsbER1cGxleCgzKQorICoKKyAqIEl0cyBzeW50YXggaXMgSU5URUdFUiAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0R1cGxleFN0YXR1cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNEdXBsZXhTdGF0dXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRHVwbGV4U3RhdHVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNEdXBsZXhTdGF0dXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eQorICogZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5IGlzIHN1YmlkIDIwIG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjIwCisgKiBEZXNjcmlwdGlvbjoKKyd0cnVlJyBmb3IgaW50ZXJmYWNlcyBvcGVyYXRpbmcgYXQgc3BlZWRzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgIDEwMDAgTWIvcyB0aGF0IHN1cHBvcnQgUmF0ZSBDb250cm9sIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgbG93ZXJpbmcgdGhlIGF2ZXJhZ2UgZGF0YSByYXRlIG9mIHRoZSBNQUMKKyAgICAgICAgICAgICAgICAgICAgc3VibGF5ZXIsIHdpdGggZnJhbWUgZ3JhbnVsYXJpdHksIGFuZCAnZmFsc2UnCisgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIEVudW0gcmFuZ2U6IDIvOC4gVmFsdWVzOiAgdHJ1ZSgxKSwgZmFsc2UoMikKKyAqCisgKiBJdHMgc3ludGF4IGlzIFRydXRoVmFsdWUgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHkgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBsb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cworICogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgaXMgc3ViaWQgMjEgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIGN1cnJlbnQgUmF0ZSBDb250cm9sIG1vZGUgb2Ygb3BlcmF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBNQUMgc3VibGF5ZXIgb2YgdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMSAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKiBFbnVtIHJhbmdlOiAzLzguIFZhbHVlczogIHJhdGVDb250cm9sT2ZmKDEpLCByYXRlQ29udHJvbE9uKDIpLCB1bmtub3duKDMpCisgKgorICogSXRzIHN5bnRheCBpcyBJTlRFR0VSIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX2dldCAqLworCisKKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0M2NkMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkCisgKgorICogJElkOiQKKyAqCisgKiBAZmlsZSBkb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5oCisgKgorICogQGFkZHRvZ3JvdXAgZ2V0CisgKgorICogUHJvdG90eXBlcyBmb3IgZ2V0IGZ1bmN0aW9ucworICoKKyAqIEB7CisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfREFUQV9HRVRfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICAgICAqLworICAgIC8qCisgICAgICogaW5kZXhlcworICAgICAqLworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzRkNTRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyKTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG90M1N0YXRzSW5kZXhfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG90M1N0YXRzSW5kZXhfdmFsKTsKKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfREFUQV9HRVRfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjMmRhMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA3NyAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX3NldCBkYXRhX3NldDogUm91dGluZXMgdG8gc2V0IGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBzZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIHRoZSBuZXcgdmFsdWUuCisgKiAKKyAqIEB7CisgKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDMzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwNzcgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfREFUQV9TRVRfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9EQVRBX1NFVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNFVCBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNUQUJMRV9EQVRBX1NFVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2VudW1zLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhNzJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtZW51bXMubTJjIDEyNTI2IDIwMDUtMDctMTUgMjI6NDE6MTZaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9FTlVNU19ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX0VOVU1TX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBOT1RFUyBvbiBlbnVtcworICAgICAqID09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBWYWx1ZSBNYXBwaW5nCisgICAgICogLS0tLS0tLS0tLS0tLQorICAgICAqIElmIHRoZSB2YWx1ZXMgZm9yIHlvdXIgZGF0YSB0eXBlIGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICogcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIG1pYiwgeW91IHNob3VsZCBtYXAgdGhlbQorICAgICAqIGJlbG93LiBGb3IgZXhhbXBsZSwgYSBib29sZWFuIGZsYWcgKDEvMCkgaXMgdXN1YWxseSByZXByZXNlbnRlZAorICAgICAqIGFzIGEgVHJ1dGhWYWx1ZSBpbiBhIE1JQiwgd2hpY2ggbWFwcyB0byB0aGUgdmFsdWVzICgxLzIpLgorICAgICAqCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBlbnVtIGRlZmluaXRpb25zIGZvciB0YWJsZSBkb3QzU3RhdHNUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogZG90M1N0YXRzRHVwbGV4U3RhdHVzIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRU5VTVMKKyNkZWZpbmUgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0VOVU1TCisKKyNkZWZpbmUgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX1VOS05PV04gIDEKKyNkZWZpbmUgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0hBTEZEVVBMRVggIDIKKyNkZWZpbmUgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0ZVTExEVVBMRVggIDMKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRU5VTVMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHkgKFRydXRoVmFsdWUgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIFRSVVRIVkFMVUVfRU5VTVMKKyNkZWZpbmUgVFJVVEhWQUxVRV9FTlVNUworCisjZGVmaW5lIFRSVVRIVkFMVUVfVFJVRSAgMQorI2RlZmluZSBUUlVUSFZBTFVFX0ZBTFNFICAyCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFJVVEhWQUxVRV9FTlVNUyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVU19FTlVNUworI2RlZmluZSBET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVU19FTlVNUworCisjZGVmaW5lIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX1JBVEVDT05UUk9MT0ZGICAxCisjZGVmaW5lIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX1JBVEVDT05UUk9MT04gIDIKKyNkZWZpbmUgRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfVU5LTk9XTiAgMworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0VOVU1TICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzQxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZG90M1N0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICovCit0eXBlZGVmIHN0cnVjdCBkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4X3MgeworCisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKK30gZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggZG90M1N0YXRzVGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAgX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOworCisKK25ldHNubXBfY29udGFpbmVyICoKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZG90M1N0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKworZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2RvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZG90M1N0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworfQorCitkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCit7CisgICAgZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICpvbGQgPSBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7CisgICAgZG90M1N0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOworICAgIHJldHVybiBvbGQ7Cit9CisKK2ludAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoZG90M1N0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7Cit9CisKKy8qCisgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKKyAqLworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlczsKKy8qKgorICogQGludGVybmFsCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmZG90M1N0YXRzVGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZkb3QzU3RhdHNUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9kb3QzU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGRvdDNTdGF0c1RhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogZG90M1N0YXRzSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IERPVDNTVEFUU1RBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBET1QzU1RBVFNUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBkb3QzU3RhdHNUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KCZkb3QzU3RhdHNUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGRvdDNTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgZG90M1N0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0gX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9IF9tZmRfZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJkb3QzU3RhdHNUYWJsZTppbml0X2RvdDNTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgZG90M1N0YXRzVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiZG90M1N0YXRzVGFibGUiLCBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgZG90M1N0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmRvdDNTdGF0c1RhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9JUlJFVkVSU0lCTEVfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9zeW50YXhfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX09CSkVDVDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3Qgcm93X21lcmdlIGhlbHBlciB3aXRoIHByZWZpeCByb290b2lkX2xlbiArIDIgKGVudHJ5LmNvbCkKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjb250YWluZXJfdGFibGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KHRibF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pZl9jdHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjYWNoZSBoZWxwZXIKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBkb3QzU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpIHsKKyAgICAgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoZG90M1N0YXRzVGFibGVfaWZfY3R4LmNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRhYmxlCisgICAgICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YmxfaW5mbyk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgZG90M1N0YXRzVGFibGUKKyAqLwordm9pZAorX2RvdDNTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmRvdDNTdGF0c1RhYmxlX2lmX2N0eCk7Cit9CisKK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKQoreworICAgIGRvdDNTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mby52YWxpZF9jb2x1bW5zID0gdmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBjb252ZXJ0IHRoZSBpbmRleCBjb21wb25lbnQgc3RvcmVkIGluIHRoZSBjb250ZXh0IHRvIGFuIG9pZAorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfZG90M1N0YXRzSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2RvdDNTdGF0c0luZGV4LCAweDAwLCBzaXplb2YodmFyX2RvdDNTdGF0c0luZGV4KSk7CisgICAgdmFyX2RvdDNTdGF0c0luZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9kb3QzU3RhdHNJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGRvdDNTdGF0c0luZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL0ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfZG90M1N0YXRzSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5kb3QzU3RhdHNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pYl9pZHgtPmRvdDNTdGF0c0luZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2RvdDNTdGF0c0luZGV4KTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfZG90M1N0YXRzSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBkb3QzU3RhdHNUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9kb3QzU3RhdHNJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfZG90M1N0YXRzSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfZG90M1N0YXRzSW5kZXgpKTsKKyAgICB2YXJfZG90M1N0YXRzSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2RvdDNTdGF0c0luZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2RvdDNTdGF0c0luZGV4KTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5kb3QzU3RhdHNJbmRleCA9CisgICAgICAgICAgICAqKChsb25nICopIHZhcl9kb3QzU3RhdHNJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2RvdDNTdGF0c0luZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkICovCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBpbnRlcm5hbAorICogYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBhIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqLworZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCitkb3QzU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSAiCisgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4LlxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5kb3QzU3RhdHNUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIGZyZWUgaW5kZXggb2lkIHBvaW50ZXIKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzICE9IHJvd3JlcV9jdHgtPm9pZF90bXApCisgICAgICAgIGZyZWUocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzKTsKKworICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIGFkZGl0aW9uYWwgcHJlX3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcmMgPSBkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9kb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHJvdyBjb250ZXh0LCBpZiBkZWxldGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHggJiYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkpCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogd2FpdCBmb3IgbGFzdCBjYWxsIGJlZm9yZSBjYWxsaW5nIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndhaXRpbmcgZm9yIGxhc3QgcG9zdF9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHBhY2tldF9yYyA9IG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKGFndHJlcV9pbmZvLT5hc3AsIDApOworICAgIHJjID0gZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfZG90M1N0YXRzVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBnZXQgb3VyIGNvbnRleHQgZnJvbSBtZmQKKyAgICAgKiBkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICppZl9jdHggPQorICAgICAqICAgICAgICAgICAgIChkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICopcmVnaW5mby0+bXlfcmVnX3ZvaWQ7CisgICAgICovCisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9DUkVBVElPTjsKKyAgICB9CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCByYyk7CisgICAgZWxzZQorICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcChyb3dyZXFfY3R4KTsKKworICAgIHJldHVybiBTTk1QX1ZBTElEQVRFX0VSUihyYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZG90M1N0YXRzVGFibGVfb2JqZWN0X2xvb2t1cCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbihkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIChJTkRFWCkgZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTSU5ERVg6CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YobG9uZyk7CisgICAgICAgICgqdmFyLT52YWwuaW50ZWdlcikgPSByb3dyZXFfY3R4LT50YmxfaWR4LmRvdDNTdGF0c0luZGV4OworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMoMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTQUxJR05NRU5URVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNBTElHTk1FTlRFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZDU0Vycm9ycygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNGQ1NFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0ZDU0Vycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNNVUxUSVBMRUNPTExJU0lPTkZSQU1FU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTU1FFVEVTVEVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTU1FFVEVTVEVSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNTUUVUZXN0RXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNMQVRFQ09MTElTSU9OU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNMYXRlQ29sbGlzaW9ucykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyg5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNFWENFU1NJVkVDT0xMSVNJT05TOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNFWENFU1NJVkVDT0xMSVNJT05TX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzKDEwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMoMTEpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzKDEzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0V0aGVyQ2hpcFNldCgxNykvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTRVRIRVJDSElQU0VUOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNFVEhFUkNISVBTRVRfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRXRoZXJDaGlwU2V0KSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQkpFQ1RfSUQ7CisgICAgICAgIHJjID0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9pZCAqKikgJiB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU3ltYm9sRXJyb3JzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNTWU1CT0xFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNTeW1ib2xFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c1N5bWJvbEVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRHVwbGV4U3RhdHVzKDE5KS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTRFVQTEVYU1RBVFVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRHVwbGV4U3RhdHVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSgyMCkvVHJ1dGhWYWx1ZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS93L0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MQUJJTElUWToKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSkgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cygyMSkvSU5URUdFUi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS93L0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoRE9UM1NUQVRTVEFCTEVfTUlOX0NPTCA8PSBjb2x1bW4KKyAgICAgICAgICAgICYmIGNvbHVtbiA8PSBET1QzU1RBVFNUQUJMRV9NQVhfQ09MKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImFzc3VtZSBjb2x1bW4gJWQgaXMgcmVzZXJ2ZWRcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmMgPSBNRkRfU0tJUDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4gKi8KKworaW50CitfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF92YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOworICAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKHZvaWQgKik7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlcyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCI5OmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlcyIsCisgICAgICAgICAgICAgICAgImV4aXN0cyAldVxuIiwgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncykpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgb2xkIHBvaW50ZXIsIHNvIHdlIGNhbiBmcmVlIGl0IGlmIHJlcGxhY2VkCisgICAgICAgICAqLworICAgICAgICBvbGRfc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZzsKKyAgICAgICAgZGF0YUZyZWVIb29rID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+ZGF0YUZyZWVIb29rOworICAgICAgICBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmOworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmID09CisgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbihyb3dyZXFfY3R4LCByZXF1ZXN0cy0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBpZiAoTUZEX1NLSVAgPT0gcmMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTlVMTCB2YXJiaW5kIGRhdGEgcG9pbnRlciFcbiIpOworICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBpZiB0aGUgYnVmZmVyIHdhc24ndCB1c2VkIHByZXZpb3VzbHkgZm9yIHRoZSBvbGQgZGF0YSAoaS5lLiBpdAorICAgICAgICAgKiB3YXMgYWxsY29hdGVkIG1lbW9yeSkgIGFuZCB0aGUgZ2V0IHJvdXRpbmUgcmVwbGFjZWQgdGhlIHBvaW50ZXIsCisgICAgICAgICAqIHdlIG5lZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChvbGRfc3RyaW5nICYmIChvbGRfc3RyaW5nICE9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZikgJiYKKyAgICAgICAgICAgIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nICE9IG9sZF9zdHJpbmcpKSB7CisgICAgICAgICAgICBpZiAoZGF0YUZyZWVIb29rKQorICAgICAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAob2xkX3N0cmluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJlZShvbGRfc3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlcyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU0VUIFBST0NFU1NJTkcgTk9UIEFQUExJQ0FCTEUgKHBlciBNSUIgb3IgdXNlciBzZXR0aW5nKQorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQVRBIEFDQ0VTUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICAgICBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpOworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgZm9yIGRvdDNTdGF0c1RhYmxlX2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgYW4gaW52YWxpZCBvciBleHBpcmVkIGNhY2hlICovCisgICAgbmV0c25tcF9hc3NlcnQoKDAgPT0gY2FjaGUtPnZhbGlkKSB8fCAoMSA9PSBjYWNoZS0+ZXhwaXJlZCkpOworCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIHJldHVybiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCgobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgaW4gZG90M1N0YXRzVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2l0ZW1fZnJlZShkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2NvbnRhaW5lcl9pdGVtX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9pdGVtX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2NvbnRhaW5lcl9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBpbiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuIGluZWZmaWNpZW50LCBidXQgZWFzeS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbnRhaW5lcl9pdGVtX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGRvdDNTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiZG90M1N0YXRzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNodXRkb3duIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmX2N0eC0+Y29udGFpbmVyKTsKKworICAgIF9jb250YWluZXJfZnJlZShpZl9jdHgtPmNvbnRhaW5lcik7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisKK2RvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorZG90M1N0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfT0lEX0xFTl07CisgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgc3RvcmFnZSBmb3IgT0lECisgICAgICovCisgICAgb2lkX2lkeC5vaWRzID0gb2lkX3RtcDsKKyAgICBvaWRfaWR4LmxlbiA9IHNpemVvZihvaWRfdG1wKSAvIHNpemVvZihvaWQpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0CisgICAgICovCisgICAgcmMgPSBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJm9pZF9pZHgsIG1pYl9pZHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3dyZXFfY3R4ID0gQ09OVEFJTkVSX0ZJTkQoZG90M1N0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzJiNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlOiBSb3V0aW5lcyB0byBpbnRlcmZhY2UgdG8gTmV0LVNOTVAKKyAqCisgKiBcd2FybmluZyBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgY2FsbGVkIGRpcmVjdGx5LAorICogICAgICAgICAgb3IgdXNlZCB0byBpbnRlcnByZXQgZnVuY3Rpb25hbGl0eS4gSXQgaXMgc3ViamVjdCB0bworICogICAgICAgICAgY2hhbmdlIGF0IGFueSB0aW1lLgorICogCisgKiBAeworICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfSU5URVJGQUNFX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfSU5URVJGQUNFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZS5oIgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKiBQVUJMSUMgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9kb3QzU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHVfbG9uZyBmbGFncyk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9kb3QzU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCk7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCk7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKmRvdDNTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgodm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisKKyAgICAvKgorICAgICAqIGFjY2VzcyB0byBjZXJ0YWluIGludGVybmFscy4gdXNlIHdpdGggY2F1dGlvbiEKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmMpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0lOVEVSRkFDRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfb2lkcy5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliMTZjZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfb2lkcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1vaWRzLm0yYyAxMjg1NSAyMDA1LTA5LTI3IDE1OjU2OjA4WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfT0lEU19ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX09JRFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgZG90M1N0YXRzVGFibGUgCisgICAgICovCisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX09JRCAgICAgICAgICAgICAgMSwzLDYsMSwyLDEsMTAsNywyCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOREVYICAgICAgICAgMQorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5ERVhfRkxBRyAgICAoMHgxIDw8IDApCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SUyAgICAgICAgIDIKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SU19GTEFHICAgICgweDEgPDwgMSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTICAgICAgICAgMworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUcgICAgKDB4MSA8PCAyKQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVMgICAgICAgICA0CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVNfRkxBRyAgICAoMHgxIDw8IDMpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTICAgICAgICAgNQorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVNfRkxBRyAgICAoMHgxIDw8IDQpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NRRVRFU1RFUlJPUlMgICAgICAgICA2CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNTUUVURVNURVJST1JTX0ZMQUcgICAgKDB4MSA8PCA1KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNERUZFUlJFRFRSQU5TTUlTU0lPTlMgICAgICAgICA3CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNERUZFUlJFRFRSQU5TTUlTU0lPTlNfRkxBRyAgICAoMHgxIDw8IDYpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TICAgICAgICAgOAorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTEFURUNPTExJU0lPTlNfRkxBRyAgICAoMHgxIDw8IDcpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlMgICAgICAgICA5CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNFWENFU1NJVkVDT0xMSVNJT05TX0ZMQUcgICAgKDB4MSA8PCA4KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTICAgICAgICAgMTAKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDkpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SUyAgICAgICAgIDExCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDEwKQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTICAgICAgICAgMTMKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRyAgICAoMHgxIDw8IDEyKQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlMgICAgICAgICAxNgorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUcgICAgKDB4MSA8PCAxNSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRVRIRVJDSElQU0VUICAgICAgICAgMTcKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0VUSEVSQ0hJUFNFVF9GTEFHICAgICgweDEgPDwgMTYpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SUyAgICAgICAgIDE4CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNTWU1CT0xFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDE3KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVMgICAgICAgICAxOQorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0ZMQUcgICAgKDB4MSA8PCAxOCkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZICAgICAgICAgMjAKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MQUJJTElUWV9GTEFHICAgICgweDEgPDwgMTkpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTICAgICAgICAgMjEKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0ZMQUcgICAgKDB4MSA8PCAyMCkKKworCisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX01JTl9DT0wgICBDT0xVTU5fRE9UM1NUQVRTSU5ERVgKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVUworCisJCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5MjMyYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oCkBAIC0wLDAgKzEsNjUgQEAKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGlmYWRkcnMuaD4KKworLyogdXNlIGtlcm5lbCdzIGV0aHRvb2wuaCAgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cit0eXBlZGVmIF9fdTY0IHU2NDsKK3R5cGVkZWYgX191MzIgdTMyOwordHlwZWRlZiBfX3UxNiB1MTY7Cit0eXBlZGVmIF9fdTggdTg7CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCisvKiBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBpbiB0aGUgc3lzdGVtICovCisKK3N0cnVjdCBpZm5hbWUgeworICAgIHN0cnVjdCBpZm5hbWUgKmlmbl9uZXh0OworICAgIGNoYXIgbmFtZSBbSUZfTkFNRVNJWkVdOworfTsKKworc3RydWN0IGlmbmFtZSAqZG90M3N0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IChzdHJ1Y3QgaWZuYW1lICosIGludCAqKTsKK2ludCBkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQpOworaW50IGRvdDNzdGF0c19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQgKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgX2RvdDNTdGF0c19pb2N0bF9nZXQoaW50IGZkLCBpbnQgd2hpY2gsIHN0cnVjdCBpZnJlcSAqaWZycSwgY29uc3QgY2hhciogbmFtZSk7CitpbnQgaW50ZXJmYWNlX2lvY3RsX2RvdDNzdGF0c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgaW50IGZkLCBjb25zdCBjaGFyKiBuYW1lKTsKK2ludCBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2R1cGxleF9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgaW50IGZkLCBjb25zdCBjaGFyKiBuYW1lKTsKKworCisvKiBmb3IgbWFpbnRhaW5hYmlsaXR5ICovCisKKyNkZWZpbmUgSU5URUxfUkVDRUlWRV9BTElHTl9FUlJPUlMgICAgICAgICAgICAgICAgICAgICAgInJ4X2FsaWduX2Vycm9ycyIKKyNkZWZpbmUgQlJPQURDT01fUkVDRUlWRV9BTElHTl9FUlJPUlMgICAgICAgICAgICAgICAgICAgSU5URUxfUkVDRUlWRV9BTElHTl9FUlJPUlMKKworI2RlZmluZSBJTlRFTF9UUkFOU01JVF9NVUxUSVBMRV9DT0xMSVNJT05TICAgICAgICAgICAgICAidHhfbXVsdGlfY29sbF9vayIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19CTlgyICAgICAgInR4X211bHRpX2NvbGxpc2lvbnMiCisjZGVmaW5lIEJST0FEQ09NX1RSQU5TTUlUX01VTFRJUExFX0NPTExJU0lPTlNfVEczICAgICAgICJ0eF9tdWx0X2NvbGxpc2lvbnMiCisKKyNkZWZpbmUgSU5URUxfVFJBTlNNSVRfTEFURV9DT0xMSVNJT05TICAgICAgICAgICAgICAgICAgInR4X2Fib3J0X2xhdGVfY29sbCIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfTEFURV9DT0xMSVNJT05TICAgICAgICAgICAgICAgInR4X2xhdGVfY29sbGlzaW9ucyIKKworI2RlZmluZSBJTlRFTF9UUkFOU01JVF9TSU5HTEVfQ09MTElTSU9OUyAgICAgICAgICAgICAgICAidHhfc2luZ2xlX2NvbGxfb2siCisjZGVmaW5lIEJST0FEQ09NX1RSQU5TTUlUX1NJTkdMRV9DT0xMSVNJT05TICAgICAgICAgICAgICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIKKworI2RlZmluZSBCUk9BRENPTV9UUkFOU01JVF9FWENFU1NfQ09MTElTSU9OU19CTlgyICAgICAgICAidHhfZXhjZXNzX2NvbGxpc2lvbnMiCisjZGVmaW5lIEJST0FEQ09NX1RSQU5TTUlUX0VYQ0VTU19DT0xMSVNJT05TX1RHMyAgICAgICAgICJ0eF9leGNlc3NpdmVfY29sbGlzaW9ucyIKKworCisjZGVmaW5lIERPVDNTVEFUU0FMSUdOTUVOVEVSUk9SUyh4KSAgICAgICAgICAgIHN0cnN0cih4LCBJTlRFTF9SRUNFSVZFX0FMSUdOX0VSUk9SUykKKworI2RlZmluZSBET1QzU1RBVFNNVUxUSVBMRUNPTExJU0lPTkZSQU1FUyh4KSAgICAoc3Ryc3RyKHgsIElOVEVMX1RSQU5TTUlUX01VTFRJUExFX0NPTExJU0lPTlMpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJzdHIoeCwgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19CTlgyKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ryc3RyKHgsIEJST0FEQ09NX1RSQU5TTUlUX01VTFRJUExFX0NPTExJU0lPTlNfVEczKSkKKworI2RlZmluZSBET1QzU1RBVFNMQVRFQ09MTElTSU9OUyh4KSAgICAgICAgICAgICAoc3Ryc3RyKHgsIElOVEVMX1RSQU5TTUlUX0xBVEVfQ09MTElTSU9OUykpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9MQVRFX0NPTExJU0lPTlMpKQorCisjZGVmaW5lIERPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FUyh4KSAgICAgIChzdHJzdHIoeCwgSU5URUxfVFJBTlNNSVRfU0lOR0xFX0NPTExJU0lPTlMpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJzdHIoeCwgQlJPQURDT01fVFJBTlNNSVRfU0lOR0xFX0NPTExJU0lPTlMpKQorCisjZGVmaW5lIERPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlMoeCkgICAgICAgIChzdHJzdHIoeCwgQlJPQURDT01fVFJBTlNNSVRfRVhDRVNTX0NPTExJU0lPTlNfQk5YMikpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9FWENFU1NfQ09MTElTSU9OU19URzMpKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYwppbmRleCBkYWVkOGYzLi5jYzZhMDRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMKQEAgLTY1LDggKzY1LDE4IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGVsZXRlX3RhYmxlX2RhdGFfc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0X3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKQorCitzdGF0aWMgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0OworCiAvKgogICogb3VyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGJ5IHRoZSBhZ2VudCAKICAqLwpAQCAtNzYsNyArODYsNiBAQAogdm9pZAogaW5pdF9kYXRhX3NldCh2b2lkKQogewotICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldDsKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93OwogCiAgICAgLyoKQEAgLTIwNCwzICsyMTMsMTEgQEAKIAogICAgIERFQlVHTVNHVEwoKCJleGFtcGxlX2RhdGFfc2V0IiwgIkRvbmUgaW5pdGlhbGl6aW5nLlxuIikpOwogfQorCit2b2lkCitzaHV0ZG93bl9kYXRhX3NldCh2b2lkKQoreworICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUodGFibGVfc2V0LCBOVUxMKTsKKyAgICBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCh0YWJsZV9zZXQpOworICAgIHRhYmxlX3NldCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaAppbmRleCBlNTZmNjAwLi5jOWNmOGIyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmgKQEAgLTYsNiArNiw3IEBACiAjZW5kaWYKIAogdm9pZCAgICAgICAgICAgIGluaXRfZGF0YV9zZXQodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fZGF0YV9zZXQodm9pZCk7CiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMKaW5kZXggNDg5NTM5MC4uNWQ1NDU2OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGVsYXlfdGltZSkpOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayB0eXBlIApAQCAtMjIzLDcgKzIyNCw3IEBACiAgICAgICAgICAqIHVwZGF0ZSBjdXJyZW50IHZhbHVlIAogICAgICAgICAgKi8KICAgICAgICAgZGVsYXlfdGltZSA9ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCBkZWxheV90aW1lIC0+ICVkXG4iLAorICAgICAgICBERUJVR01TR1RMKCgidGVzdGhhbmRsZXIiLCAidXBkYXRlZCBkZWxheV90aW1lIC0+ICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZSkpOwogICAgICAgICBicmVhazsKIApAQCAtMjQ2LDYgKzI0Nyw3IEBACiAgICAgICAgICAqIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gYWN0dWFsbHkgZG8gaGVyZSAKICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMKaW5kZXggMGNlODE3Yi4uZGQ5N2RhZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYwpAQCAtMTYsMzggKzE2LDEzIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLS8qCi0gKiBuZWVkZWQgYnkgdXRpbF9mdW5jcy5oIAotICovCi0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogLyoKICAqIGhlYWRlcl9nZW5lcmljKCkgY29tZXMgZnJvbSBoZXJlIAogICovCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogLyoKICAqIGluY2x1ZGUgb3VyIC5oIGZpbGUgCkBAIC0xMDYsNyArODEsNyBAQAogICAgICAqICAgICAgMjogQVNOX09DVEVUX1NUUjoKICAgICAgKiAgICAgICAgICBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LgogICAgICAqICAgICAgICAgIFZhbGlkIHR5cGVzIGFyZSBsaXN0ZWQgaW4gPHNubXBfaW1wbC5oPgotICAgICAqICAgICAgMzogUk9OTFkgKG9yIFJXUklURSk6CisgICAgICogICAgICAzOiBORVRTTk1QX09MREFQSV9ST05MWSAob3IgTkVUU05NUF9PTERBUElfUldSSVRFKToKICAgICAgKiAgICAgICAgICBXaGV0aGVyIHRoaXMgb2JqZWN0IGNhbiBiZSBTRVQgb3Igbm90LgogICAgICAqICAgICAgNDogdmFyX2V4YW1wbGU6CiAgICAgICogICAgICAgICAgVGhlIGNhbGxiYWNrIHJvdXRpbmUsIHVzZWQgd2hlbiB0aGUgb2JqZWN0IGlzIHF1ZXJpZWQuCkBAIC0xMjIsMTUgKzk3LDI0IEBACiAgICAgICogICAgICAgICAgICB0byBvYnRhaW4gdGhlIGZ1bGwgT0lEIG9mIGVhY2ggZW50cnkuCiAgICAgICovCiBzdHJ1Y3QgdmFyaWFibGUyIGV4YW1wbGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0VYQU1QTEVTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXhhbXBsZSwgMSwgezF9fSwKLSAgICB7RVhBTVBMRUlOVEVHRVIsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leGFtcGxlLCAyLCB7MiwgMX19LAotICAgIHtFWEFNUExFT0JKRUNUSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfZXhhbXBsZSwgMiwgezIsIDJ9fSwKLSAgICB7RVhBTVBMRVRJTUVUSUNLUywgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9leGFtcGxlLCAxLCB7M319LAotICAgIHtFWEFNUExFSVBBRERSRVNTLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHs0fX0sCi0gICAge0VYQU1QTEVDT1VOVEVSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leGFtcGxlLCAxLCB7NX19LAotICAgIHtFWEFNUExFR0FVR0UsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9leGFtcGxlLCAxLCB7Nn19LAotICAgIHtFWEFNUExFVFJJR0dFUlRSQVAsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leGFtcGxlLCAxLCB7N319LAotICAgIHtFWEFNUExFVFJJR0dFUlRSQVAyLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhhbXBsZSwgMSwgezh9fQorICAgIHtFWEFNUExFU1RSSU5HLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4YW1wbGUsIDEsIHsxfX0sCisgICAge0VYQU1QTEVJTlRFR0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhhbXBsZSwgMiwgezIsIDF9fSwKKyAgICB7RVhBTVBMRU9CSkVDVElELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4YW1wbGUsIDIsIHsyLCAyfX0sCisgICAge0VYQU1QTEVUSU1FVElDS1MsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezN9fSwKKyAgICB7RVhBTVBMRUlQQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7NH19LAorICAgIHtFWEFNUExFQ09VTlRFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezV9fSwKKyAgICB7RVhBTVBMRUdBVUdFLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezZ9fSwKKyAgICB7RVhBTVBMRVRSSUdHRVJUUkFQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezd9fSwKKyAgICB7RVhBTVBMRVRSSUdHRVJUUkFQMiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4YW1wbGUsIDEsIHs4fX0KIH07CiAKICAgICAvKgpAQCAtMzM5LDcgKzMyMyw3IEBACiAgICAgICovCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIEVYQU1QTEVTVFJJTkc6Ci0gICAgICAgIHNwcmludGYoc3RyaW5nLCBleGFtcGxlX3N0cik7CisgICAgICAgIHN0cmNweShzdHJpbmcsIGV4YW1wbGVfc3RyKTsKICAgICAgICAgLyoKICAgICAgICAgICogTm90ZSB0aGF0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGFuc3dlciB3aWxsIGJlIGFuCiAgICAgICAgICAqICBpbnRlZ2VyIGRvZXMgbm90IGhvbGQgdHJ1ZSBpbiB0aGlzIGNhc2UsIHNvIHRoZSBsZW5ndGgKQEAgLTQ2OCwxMyArNDUyLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IHNpemVvZihsb25nKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICV4IiwgdmFyX3ZhbF9sZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAlIiBORVRTTk1QX1BSSXogInUiLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3ZhbF9sZW4pKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKICAgICAgICAgfQogCiAgICAgICAgIGludHZhbCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CiAgICAgICAgIGlmIChpbnR2YWwgPiBNQVhfRVhBTVBMRV9JTlQpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICV4IiwgaW50dmFsKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyB2YWx1ZSAlbHgiLCBpbnR2YWwpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNTUzLDEzICs1MzgsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJXgiLCB2YXJfdmFsX2xlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICUiIE5FVFNOTVBfUFJJeiAidSIsCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfdmFsX2xlbikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwogICAgICAgICB9CiAKICAgICAgICAgaW50dmFsID0gKigobG9uZyAqKSB2YXJfdmFsKTsKICAgICAgICAgaWYgKGludHZhbCAhPSAxKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyB2YWx1ZSAleCIsIGludHZhbCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgdmFsdWUgJWx4IiwgaW50dmFsKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTYyMCwxMCArNjA2LDEwIEBACiAgKiBzZWNvbmQgc2luY2UgdGhlIG5ldHdvayBtYW5hZ2VtZW50IHBvcnRpb24gb2Ygc3lzdGVtIHdhcyBsYXN0CiAgKiByZWluaXRpYWxpemVkLiAgLSBzbm1wVHJhcE9JRC4wIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHRyYXAgZ3JvdXAgU05NUHYyCiAgKiBNSUIgd2hvc2UgdmFsdWUgaXMgdGhlIG9iamVjdC1pZCBvZiB0aGUgc3BlY2lmaWMgdHJhcCB5b3UgaGF2ZSBkZWZpbmVkCi0gKiBpbiB5b3VyIG93biBNSUIuICBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFkZGVkIHRvIGNhcmFjdGVyaXplIHRoZQorICogaW4geW91ciBvd24gTUlCLiAgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhZGRlZCB0byBjaGFyYWN0ZXJpemUgdGhlCiAgKiB0cmFwLgogICogCi0gKiBUaGUgZnVuY3Rpb24gc2VuZF92MnRyYXAgYWRkcyBhdXRvbWF0aWNhbGx5cyB0aGUgdHdvIG9iamVjdHMgYnV0IHRoZQorICogVGhlIGZ1bmN0aW9uIHNlbmRfdjJ0cmFwIGFkZHMgYXV0b21hdGljYWxseSB0aGUgdHdvIG9iamVjdHMgYnV0IHRoZQogICogdmFsdWUgb2Ygc25tcFRyYXBPSUQuMCBpcyAwLjAgYnkgZGVmYXVsdC4gSWYgeW91IHdhbnQgdG8gYWRkIHlvdXIgdHJhcAogICogbmFtZSwgeW91IGhhdmUgdG8gcmVjb25zdHJ1Y3QgdGhpcyBvYmplY3QgYW5kIHRvIGFkZCB5b3VyIG93bgogICogdmFyaWFibGUuCkBAIC02NjMsMTMgKzY0OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiBzaXplb2YobG9uZykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAleCIsIHZhcl92YWxfbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJSIgTkVUU05NUF9QUkl6ICJ1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl92YWxfbGVuKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CiAgICAgICAgIH0KIAogICAgICAgICBpbnR2YWwgPSAqKChsb25nICopIHZhcl92YWwpOwogICAgICAgICBpZiAoaW50dmFsICE9IDEpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICV4IiwgaW50dmFsKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyB2YWx1ZSAlbHgiLCBpbnR2YWwpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNzMyLDcgKzcxOSw3IEBACiAgICAgICAgIHZhcl9vYmoubmFtZSA9IGV4YW1wbGVfc3RyaW5nX29pZDsKICAgICAgICAgdmFyX29iai5uYW1lX2xlbmd0aCA9IHNpemVvZihleGFtcGxlX3N0cmluZ19vaWQpIC8gc2l6ZW9mKG9pZCk7IC8qIG51bWJlciBvZiBzdWItaWRzICovCiAgICAgICAgIHZhcl9vYmoudHlwZSA9IEFTTl9PQ1RFVF9TVFI7ICAgLyogdHlwZSBvZiB2YXJpYWJsZSAqLwotICAgICAgICB2YXJfb2JqLnZhbC5zdHJpbmcgPSBleGFtcGxlX3N0cjsgICAgICAgLyogdmFsdWUgKi8KKyAgICAgICAgdmFyX29iai52YWwuc3RyaW5nID0gKHVuc2lnbmVkIGNoYXIgKikgZXhhbXBsZV9zdHI7ICAgICAgIC8qIHZhbHVlICovCiAgICAgICAgIHZhcl9vYmoudmFsX2xlbiA9IHN0cmxlbihleGFtcGxlX3N0cik7CiAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyaXRlX2V4YW1wbGV0cmFwMiBzZW5kaW5nIHRoZSB2MiB0cmFwXG4iKSk7CiAgICAgICAgIHNlbmRfdjJ0cmFwKCZ2YXJfdHJhcCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmggYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmgKaW5kZXggOWRlNTc0OC4uMDRiNzNlMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaApAQCAtMTQsMTAgKzE0LDEwIEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogV2UgdXNlICdoZWFkZXJfZ2VuZXJpYycgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUsCisgICAgICogV2UgdXNlICdoZWFkZXJfZ2VuZXJpYycgZnJvbSB0aGUgdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYyBtb2R1bGUsCiAgICAgICogIHNvIG1ha2Ugc3VyZSB0aGlzIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgYWdlbnQuCiAgICAgICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jCmluZGV4IDM2YWI3ZTMuLjhlYTJkMDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYwpAQCAtNCwxMiArNCwxNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZS5oIgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9nZXRfZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9hZGRfZGF0YSkKKwogc3RhdGljIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnVuZG9TdG9yYWdlID0gTlVMTDsKIHN0YXRpYyBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICpjb21taXRTdG9yYWdlID0gTlVMTDsKIApAQCAtNzEsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogCiAgICAgLyoqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICAgIG9wdGltaXplcyByZXRyaXZhbC4gKi8KKyAgICAgICAgb3B0aW1pemVzIHJldHJpZXZhbC4gKi8KICAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gMjsKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gNTsKIApAQCAtOTIsNyArOTcsNyBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX25ldFNubXBIb3N0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgdGFibGUgbmV0U25tcEhvc3RzVGFibGUgYXMgYSB0YWJsZSBpdGVyYXRvclxuIikpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IobXlfaGFuZGxlciwgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKG15X2hhbmRsZXIsIGlpbmZvKTsKIH0KIAogLyoqIEluaXRpYWxpemVzIHRoZSBuZXRTbm1wSG9zdHNUYWJsZSBtb2R1bGUgKi8KQEAgLTExNCwxOSArMTE5LDE1IEBACiAKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcjsKICAgICBzdHJ1Y3QgY29tbWl0SW5mbyAqY2kgPSBOVUxMOwogCiAgICAgdm9pZCAgICAgICAgICAgKmRhdGFfY29udGV4dCA9IE5VTEw7CiAKLSAgICBvaWQgICAgICAgICAgICAqc3VmZml4OwotICAgIHNpemVfdCAgICAgICAgICBzdWZmaXhfbGVuOwotCiAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgIC8qIGNvbHVtbiBhbmQgcm93IGluZGV4IGVuY29kZWQgcG9ydGlvbiAqLwotICAgICAgICB2YXIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7Ci0gICAgICAgIHN1ZmZpeCAgICAgPSB2YXItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7Ci0gICAgICAgIHN1ZmZpeF9sZW4gPSB2YXItPm5hbWVfbGVuZ3RoIC0gKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMSk7CisgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyID0gcmVxdWVzdC0+cmVxdWVzdHZiOworICAgICAgICBjb25zdCBvaWQgKiBjb25zdCBzdWZmaXggPSB2YXItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7CisgICAgICAgIGNvbnN0IHNpemVfdCBzdWZmaXhfbGVuID0gdmFyLT5uYW1lX2xlbmd0aCAtIChyZWdpbmZvLT5yb290b2lkX2xlbiArIDEpOwogCiAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYwppbmRleCBlNTZjZDFkLi4zZDJlNWZiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIC8qKiBDcmVhdGUgYSBkYXRhX2NvbnRleHQgZm9yIG5vbi1leGlzdGVudCByb3dzIHRoYXQgU0VUcyBhcmUgcGVyZm9ybWVkIG9uLgogICogIHJldHVybiBhIHZvaWQgKiBwb2ludGVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHN1YnNlcXVlbnQgZ2V0X1hYWAotICogIGFuZCBzZXRfWFhYIGZ1bmN0aW9ucyBmb3IgZGF0YSByZXRyaXZhbCBhbmQgbW9kaWZpY2F0aW9uIGR1cmluZworICogIGFuZCBzZXRfWFhYIGZ1bmN0aW9ucyBmb3IgZGF0YSByZXRyaWV2YWwgYW5kIG1vZGlmaWNhdGlvbiBkdXJpbmcKICAqICB0aGlzIFNFVCByZXF1ZXN0LgogICoKICAqICBUaGUgaW5kZXhzIGFyZSBlbmNvZGVkIChpbiBvcmRlcikgaW50byB0aGUgaW5kZXhfZGF0YSBwb2ludGVyIGlmIGl0CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYwppbmRleCA0Y2I5MzM5Li4yNWE3MzMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMKQEAgLTE0LDExICsxNCwxNCBAQAogICogc3RhbmRhcmQgaGVhZGVycyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5oIgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfZW51bXMuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKQorCiAvKiogRGVjaWRlcyBpZiBhbiBpbmNvbWluZyB2YWx1ZSBmb3IgdGhlIG5ldFNubXBIb3N0QWRkcmVzc1R5cGUgbWliIG5vZGUgaXMgbGVnYWwuCiAgKiAgQHBhcmFtIHR5cGUgICAgVGhlIGluY29taW5nIGRhdGEgdHlwZS4KICAqICBAcGFyYW0gdmFsICAgICBUaGUgdmFsdWUgdG8gYmUgY2hlY2tlZC4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYwppbmRleCA1MDNiZGQ0Li5kYjRkMjk1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jCkBAIC0yMywxMCArMjMsMTcgQEAKICAqIHN0YXJ0IGJlIGluY2x1ZGluZyB0aGUgYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKIC8qCisgKiBpZiAtLWVuYWJsZS1taW5pbWFsaXN0IGhhcyBiZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byByZWdpc3RlcgorICogdGhlIHN1cHBvcnQgd2UgbmVlZCBzbyB0aGUgbmVlZGVkIGZ1bmN0aW9ucyBhcmVuJ3QgcmVtb3ZlZCBhdCBjb21waWxlIHRpbWUKKyAqLworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobG9uZ19pbnN0YW5jZSkKKworLyoKICAqIFRoZW4sIHdlIGRlY2xhcmUgdGhlIHZhcmlhYmxlcyB3ZSB3YW50IHRvIGJlIGFjY2Vzc2VkIAogICovCiBzdGF0aWMgbG9uZyAgICAgZXhhbXBsZTEgPSA0MjsgIC8qIGRlZmF1bHQgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYwppbmRleCA5N2E4ZjQ3Li44ZTllNjZhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jCkBAIC0xMywxMSArMTMsNyBAQAogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTI3LDE1ICsyMywxMSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidWNkRGVtb1B1YmxpYy5oIgogCiAjZGVmaW5lIE1ZTUFYIDEwMjQKQEAgLTczLDExICs2NSwxNCBAQAogICovCiAKIHN0cnVjdCB2YXJpYWJsZTIgdWNkRGVtb1B1YmxpY192YXJpYWJsZXNbXSA9IHsKLSAgICB7VUNEREVNT1JFU0VUS0VZUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHsxfX0sCi0gICAge1VDRERFTU9QVUJMSUNTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VjZERlbW9QdWJsaWMsIDEsCi0gICAgIHsyfX0sCi0gICAge1VDRERFTU9VU0VSTElTVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezN9fSwKLSAgICB7VUNEREVNT1BBU1NQSFJBU0UsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHs0fX0sCisgICAge1VDRERFTU9SRVNFVEtFWVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91Y2REZW1vUHVibGljLCAxLCB7MX19LAorICAgIHtVQ0RERU1PUFVCTElDU1RSSU5HLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91Y2REZW1vUHVibGljLCAxLCB7Mn19LAorICAgIHtVQ0RERU1PVVNFUkxJU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHszfX0sCisgICAge1VDRERFTU9QQVNTUEhSQVNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91Y2REZW1vUHVibGljLCAxLCB7NH19LAogCiB9OwogCkBAIC0xMzAsNyArMTI1LDcgQEAKIAogICAgIGNhc2UgVUNEREVNT1BVQkxJQ1NUUklORzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3VjZERlbW9QdWJsaWNTdHJpbmc7Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHB1YmxpY1N0cmluZyk7CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKChjb25zdCBjaGFyKilwdWJsaWNTdHJpbmcpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgcHVibGljU3RyaW5nOwogCiAgICAgY2FzZSBVQ0RERU1PVVNFUkxJU1Q6CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmggYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKaW5kZXggZmQ5ZjEyZi4uMjUzZjRmZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaApAQCAtNiwxMCArNiwxMCBAQAogI2RlZmluZSBfTUlCR1JPVVBfVUNEREVNT1BVQkxJQ19ICiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMKaW5kZXggNTgxMjJjNC4uYjQ4NmJhYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYwpAQCAtNDUsNyArNDUsNyBAQAogICAgICAqIHZhcmlhYmxlcyBuZWVkZWQgZm9yIHJlZ2lzdHJhdGlvbgogICAgICAqLwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87Ci0gICAgbmV0c25tcF93YXRjaGVyX2luZm8gKndhdGNoZXJfaW5mbzsKKyAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gd2F0Y2hlcl9pbmZvOwogICAgIGludCB3YXRjaGVyX2ZsYWdzOwogCiAgICAgLyoKQEAgLTU3LDggKzU3LDYgQEAKICAgICAgICAgICAgICAgICBteV9zdHJpbmcpKTsKIAogICAgIC8qCi0gICAgICogY3JlYXRlIHRoZSByZWdpc3RyYXRpb24gaW5mbyBmb3Igb3VyIHN0cmluZy4gSWYgeW91IHdhbnQgdG8KLSAgICAgKgogICAgICAqIElmIHdlIHdhbnRlZCBhIGNhbGxiYWNrIHdoZW4gdGhlIHZhbHVlIHdhcyByZXRyaWV2ZWQgb3Igc2V0CiAgICAgICogKGV2ZW4gdGhvdWdoIHRoZSBkZXRhaWxzIG9mIGRvaW5nIHRoaXMgYXJlIGhhbmRsZWQgZm9yIHlvdSksCiAgICAgICogeW91IGNvdWxkIGNoYW5nZSB0aGUgTlVMTCBwb2ludGVyIGJlbG93IHRvIGEgdmFsaWQgaGFuZGxlcgpAQCAtNzIsMzIgKzcwLDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIC8qCi0gICAgICogdGhlIHR3byBvcHRpb25zIGZvciBhIHN0cmluZyB3YXRjaGVyIGFyZToKKyAgICAgKiB0aGUgdGhyZWUgb3B0aW9ucyBmb3IgYSBzdHJpbmcgd2F0Y2hlciBhcmU6CiAgICAgICogICBmaXhlZCBzaXplIHN0cmluZyAobGVuZ3RoIG5ldmVyIGNoYW5nZXMpCiAgICAgICogICB2YXJpYWJsZSBzaXplIChsZW5ndGggY2FuIGJlIDAgLSBNQVgsIGZvciBzb21lIE1BWCkKKyAgICAgKiAgIGMgc3RyaW5nIChsZW5ndGggY2FuIGJlIDAgLSBNQVgtMSBmb3Igc29tZSBtYXgsIFwwIGlzIG5vdCBhIHZhbGlkCisgICAgICogICAgIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLCB0aGUgbGVuZ3RoIGlzIHByb3ZpZGVkIGJ5IHN0cmxlbikKICAgICAgKgogICAgICAqIHdlJ2xsIHVzZSBhIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmcuCiAgICAgICovCiAgICAgd2F0Y2hlcl9mbGFncyA9IFdBVENIRVJfTUFYX1NJWkU7CiAKICAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgd2F0Y2hlciBpbmZvIGZvciBvdXIgc3RyaW5nLCBhbmQgc2V0IHRoZSBtYXggc2l6ZS4KKyAgICAgKiBjcmVhdGUgdGhlIHdhdGNoZXIgaW5mbyBmb3Igb3VyIHN0cmluZy4KICAgICAgKi8KLSAgICB3YXRjaGVyX2luZm8gPQotICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8obXlfc3RyaW5nLCBzdHJsZW4obXlfc3RyaW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIHdhdGNoZXJfZmxhZ3MpOwotICAgIHdhdGNoZXJfaW5mby0+bWF4X3NpemUgPSBzaXplb2YobXlfc3RyaW5nKTsKKyAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvNigmd2F0Y2hlcl9pbmZvLCBteV9zdHJpbmcsIHN0cmxlbihteV9zdHJpbmcpLAorCQkJICAgICAgIEFTTl9PQ1RFVF9TVFIsIHdhdGNoZXJfZmxhZ3MsCisJCQkgICAgICAgc2l6ZW9mKG15X3N0cmluZyksIE5VTEwpOwogCiAgICAgLyoKICAgICAgKiB0aGUgbGluZSBiZWxvdyByZWdpc3RlcnMgb3VyICJteV9zdHJpbmciIHZhcmlhYmxlIGFib3ZlIGFzCiAgICAgICogYWNjZXNzaWJsZSBhbmQgbWFrZXMgaXQgd3JpdGFibGUuIAotICAgICAqIAotICAgICAqIElmIHdlIHdhbnRlZCBhIGNhbGxiYWNrIHdoZW4gdGhlIHZhbHVlIHdhcyByZXRyaWV2ZWQgb3Igc2V0Ci0gICAgICogKGV2ZW4gdGhvdWdoIHRoZSBkZXRhaWxzIG9mIGRvaW5nIHRoaXMgYXJlIGhhbmRsZWQgZm9yIHlvdSksCi0gICAgICogeW91IGNvdWxkIGNoYW5nZSB0aGUgTlVMTCBwb2ludGVyIGJlbG93IHRvIGEgdmFsaWQgaGFuZGxlcgotICAgICAqIGZ1bmN0aW9uLiAKICAgICAgKi8KLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UocmVnaW5mbywgd2F0Y2hlcl9pbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UocmVnaW5mbywgJndhdGNoZXJfaW5mbyk7CiAKICAgICBERUJVR01TR1RMKCgiZXhhbXBsZV9zdHJpbmdfaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICJEb25lIGluaXRhbGl6aW5nIGV4YW1wbGUgc3RyaW5nIGluc3RhbmNlXG4iKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oCmluZGV4IGVkZDMzODcuLjM5NTY2NzkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oCkBAIC0xNSwxMyArMTUsMTMgQEAKICNlbGlmIGRlZmluZWQoZHJhZ29uZmx5KQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1L2NwdV9raW5mbykKIAotI2VsaWYgKGRlZmluZWQobmV0YnNkKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQobmV0YnNkZWxmKSB8fCBkZWZpbmVkKG5ldGJzZGVsZjIpfHwgZGVmaW5lZChuZXRic2RlbGYzKSB8fCBkZWZpbmVkKG9wZW5ic2QpIHx8IGRlZmluZWQoZnJlZWJzZDQpICB8fCBkZWZpbmVkKGZyZWVic2Q1KSB8fCBkZWZpbmVkKGZyZWVic2Q2KSkKKyNlbGlmIChkZWZpbmVkKG5ldGJzZCkgfHwgZGVmaW5lZChuZXRic2QxKSB8fCBkZWZpbmVkKG5ldGJzZGVsZikgfHwgZGVmaW5lZChuZXRic2RlbGYyKXx8IGRlZmluZWQobmV0YnNkZWxmMykgfHwgZGVmaW5lZChvcGVuYnNkKSB8fCBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KSB8fCBkZWZpbmVkKGZyZWVic2Q2KSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2NwdS9jcHVfc3lzY3RsKQogCiAjZWxpZiAoZGVmaW5lZChmcmVlYnNkMikgfHwgZGVmaW5lZChmcmVlYnNkMykpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9jcHUvY3B1X25saXN0KQogCi0jZWxpZiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpCisjZWxpZiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQpCiAKICNlbGlmIChkZWZpbmVkKHNvbGFyaXMyKSkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYwppbmRleCA0YjI5ZGJjLi4yNzcyMDAxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jCkBAIC0xLDggKzEsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX2NwdSwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYXJkd2FyZV9jcHVfY29weV9zdGF0cywgaGFyZHdhcmVfY3B1KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX2NwdV9sb2FkLCBoYXJkd2FyZV9jcHUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1X2dldF9jYWNoZSwgaGFyZHdhcmVfY3B1KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX2NwdV9nZXRfYnlOYW1lLCBoYXJkd2FyZV9jcHUpCisKIGV4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIG5ldHNubXBfY3B1X2FyY2hfbG9hZDsKIHN0YXRpYyB2b2lkIF9jcHVfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQsIHZvaWQqICk7CiAKQEAgLTg0LDggKzkyLDggQEAKICAgICAgICAgICovCiAgICAgY3B1ID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF9jcHVfaW5mbyApOwogICAgIGlmICghY3B1KSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBERUJVR01TRygoImNwdSIsICIoZmFpbGVkKVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgREVCVUdNU0coKCJjcHUiLCAiKGNyZWF0ZWQpXG4iKSk7CiAgICAgY3B1LT5pZHggPSBpZHg7CkBAIC0xMDcsMTQgKzExNSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIGNwdTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoY3B1KQotICAgICAgICBTTk1QX0ZSRUUoY3B1KTsgLyoganVzdCBpbiBjYXNlICovCisgICAgU05NUF9GUkVFKGNwdSk7IC8qIGp1c3QgaW4gY2FzZSAqLwogICAgIHJldHVybiBOVUxMOyAgLyogU2hvdWxkbid0IGhhcHBlbiEgKi8KIH0KIAogICAgIC8qCiAgICAgICogV29yayB3aXRoIGEgbGlzdCBvZiBDUFUgZW50cmllcywgaW5kZXhlZCBieSBuYW1lCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9CWU5BTUUKIG5ldHNubXBfY3B1X2luZm8gKm5ldHNubXBfY3B1X2dldF9ieU5hbWUoIGNoYXIgKm5hbWUsIGludCBjcmVhdGUgKSB7CiAgICAgbmV0c25tcF9jcHVfaW5mbyAqY3B1OwogCkBAIC0xNTIsMTEgKzE2MCwxNSBAQAogICAgIH0KICAgICByZXR1cm4gY3B1OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9CWU5BTUUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9HRVRfQ0FDSEUKIG5ldHNubXBfY2FjaGUgKm5ldHNubXBfY3B1X2dldF9jYWNoZSggdm9pZCApIHsKICAgICByZXR1cm4gX2NwdV9jYWNoZTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9HRVRfQ0FDSEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9MT0FECiBpbnQgbmV0c25tcF9jcHVfbG9hZCggdm9pZCApIHsKICAgICAgICAgLyoKICAgICAgICAgICogSWYgd2UncmUgYXV0b21hdGljYWxseSB1cGRhdGluZyB0aGUgc3RhdHMgcmVndWxhcmx5LApAQCAtMTY1LDYgKzE3Nyw3IEBACiAgICAgcmV0dXJuICggX2NwdUF1dG9VcGRhdGUgPyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoIF9jcHVfY2FjaGUgKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfTE9BRCAqLwogCiAgICAgLyoKICAgICAgKiBDYWxsIHRoZSBzeXN0ZW0tc3BlY2lmaWMgbG9hZCByb3V0aW5lIHJlZ3VsYXJseSwKQEAgLTE4MSw3ICsxOTQsNyBAQAogICAgICAgICAgICAgICogRmlyc3QgdGltZSB0aHJvdWdoLCB3ZSBuZWVkIHRvIGNyZWF0ZSBidWZmZXJzCiAgICAgICAgICAgICAgKiBmb3IgdGhlIGhpc3RvcmljYWwgc3RhdHMKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY3B1LT5oaXN0b3J5ICA9IGNhbGxvYyggX2NwdUhpc3RvcnlMZW4sIHNpemVvZihzdHJ1Y3QgbmV0c25tcF9jcHVfaGlzdG9yeSkpOworICAgICAgICAgICAgY3B1LT5oaXN0b3J5ICA9IChzdHJ1Y3QgbmV0c25tcF9jcHVfaGlzdG9yeSAqKWNhbGxvYyggX2NwdUhpc3RvcnlMZW4sIHNpemVvZihzdHJ1Y3QgbmV0c25tcF9jcHVfaGlzdG9yeSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIE90aGVyd2lzZSwgcm90YXRlIHRoZXNlIHZhbHVlcyAtIGluIGRlc2NlbmRpbmcgb3JkZXIKQEAgLTIyMCwxMCArMjMzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPndhaXRfdGlja3MgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5rZXJuX3RpY2tzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+aW50cnB0X3RpY2tzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+c2lycV90aWNrczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+c2lycV90aWNrcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPnN0ZWFsX3RpY2tzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+Z3Vlc3RfdGlja3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5ndWVzdG5pY2VfdGlja3M7CiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0NPUFlfU1RBVFMKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKQogewogICAgIG5ldHNubXBfY3B1X2luZm8gKmNwdTI7CkBAIC0yNDMsNiArMjYwLDkgQEAKICAgICBjcHUyLT5rZXJuX3RpY2tzID0gY3B1LT5rZXJuX3RpY2tzOwogICAgIGNwdTItPmludHJwdF90aWNrcyA9IGNwdS0+aW50cnB0X3RpY2tzOwogICAgIGNwdTItPnNpcnFfdGlja3MgPSBjcHUtPnNpcnFfdGlja3M7CisgICAgY3B1Mi0+c3RlYWxfdGlja3MgPSBjcHUtPnN0ZWFsX3RpY2tzOworICAgIGNwdTItPmd1ZXN0X3RpY2tzID0gY3B1LT5ndWVzdF90aWNrczsKKyAgICBjcHUyLT5ndWVzdG5pY2VfdGlja3MgPSBjcHUtPmd1ZXN0bmljZV90aWNrczsKIAogICAgIGNwdTItPm5JbnRlcnJ1cHRzICA9IGNwdS0+bkludGVycnVwdHM7CiAgICAgY3B1Mi0+bkN0eFN3aXRjaGVzID0gY3B1LT5uQ3R4U3dpdGNoZXM7CkBAIC0yNTEsMyArMjcxLDQgQEAKICAgICBjcHUyLT5wYWdlSW4gICAgID0gY3B1LT5wYWdlSW47CiAgICAgY3B1Mi0+cGFnZU91dCAgICA9IGNwdS0+cGFnZU91dDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9DT1BZX1NUQVRTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMKaW5kZXggZmFjYmM3Yi4uMzdjZjg0NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYwpAQCAtMiw2ICsyLDcgQEAKICAqICBEcmFnb25GbHkga2luZm8gaW50ZXJmYWNlCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaD4KQEAgLTEzLDYgKzE0LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhhcmR3YXJlX2NwdV9jb3B5X3N0YXRzKQogdm9pZCBfY3B1X2NvcHlfc3RhdHMoIG5ldHNubXBfY3B1X2luZm8gKmNwdSApOwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYwppbmRleCBlMTZhZmI3Li4zM2YxODhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICogICAoaW5jbHVkaW5nIGRlc2NyaXB0aW9ucykKICAgICAgKi8KIHZvaWQgaW5pdF9jcHVfa3N0YXQoIHZvaWQgKSB7Ci0gICAgaW50ICAgICAgICAgICAgICAgaSwgbj0wLCBjbG9jaywgc3RhdGVfYmVnaW47CisgICAgaW50ICAgICAgICAgICAgICAgaSA9IDAsIG4gPSAwLCBjbG9jaywgc3RhdGVfYmVnaW47CiAgICAgY2hhciAgICAgICAgICAgICAgY3R5cGVbMTVdLCBmdHlwZVsxNV0sIHN0YXRlWzEwXTsKICAgICBrc3RhdF90ICAgICAgICAgICprc3A7CiAgICAga3N0YXRfbmFtZWRfdCAgICAqa3NfZGF0YTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgaSAgICA9IGtzcC0+a3NfaW5zdGFuY2U7CiAgICAgICAgICAgICBjcHUyID0gbmV0c25tcF9jcHVfZ2V0X2J5SWR4KCBpLCAwICk7CiAgICAgICAgICAgICBpZiAoICFjcHUyICkgIAotICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8qIG9yIGNvbnRpbnVlID8gKi8gICAgLyogU2tpcCBuZXcgQ1BVcyAqLworICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8qIG9yIGNvbnRpbnVlID8gKi8gIC8qIFNraXAgbmV3IENQVXMgKi8KICAgICAgICAgICAgIGlmICgoa3NwLT5rc190eXBlICE9IEtTVEFUX1RZUEVfUkFXKSB8fAogICAgICAgICAgICAgICAgIChrc3AtPmtzX2RhdGFfc2l6ZSAhPSBzaXplb2YoY3MpKXx8CiAgICAgICAgICAgICAgICAgKGtzdGF0X3JlYWQoa3N0YXRfZmQsIGtzcCwgJmNzKSA9PSAtMSkpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYwppbmRleCBlMjdlMTJlLi5iMWRjMzA4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjZW5kaWYKICAgICAgICAgfQogI2lmIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKQotCS8qIHMzOTAgbWF5IGRpZmZlcmVudCBmb3JtYXQgb2YgQ1BVX0ZJTEUgKi8KKwkvKiBzMzkwIG1heSBoYXZlIGRpZmZlcmVudCBmb3JtYXQgb2YgQ1BVX0ZJTEUgKi8KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3NjYW5mKCBidWYsICJwcm9jZXNzb3IgJWQ6IiwgJmkgKSA9PSAxKSAgewogICAgICAgICAgICAgICAgIG4rKzsKQEAgLTk5LDExICs5OSwxMiBAQAogICAgIHN0YXRpYyBjaGFyICpidWZmICA9IE5VTEw7CiAgICAgc3RhdGljIGludCAgIGJzaXplID0gMDsKICAgICBzdGF0aWMgaW50ICAgZmlyc3QgPSAxOwotICAgIHN0YXRpYyBpbnQgICBoYXNfY3B1XzI2ID0gMTsKKyAgICBzdGF0aWMgaW50ICAgbnVtX2NwdWxpbmVfZWxlbSA9IDA7CiAgICAgaW50ICAgICAgICAgIGJ5dGVzX3JlYWQsIHN0YXRmZCwgaTsKICAgICBjaGFyICAgICAgICAqYjEsICpiMjsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VzZWxsID0gMCwgY2ljZWxsID0gMCwgY3N5c2xsID0gMCwgY2lkZWxsID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2lvd2xsID0gMCwgY2lycWxsID0gMCwgY3NvZnRsbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgIGNpb3dsbCA9IDAsIGNpcnFsbCA9IDAsIGNzb2Z0bGwgPSAwLCBjc3RlYWxsbCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgIGNndWVzdGxsID0gMCwgY2d1ZXN0X25pY2VsbCA9IDA7CiAgICAgbmV0c25tcF9jcHVfaW5mbyogY3B1OwogCiAgICAgaWYgKChzdGF0ZmQgPSBvcGVuKFNUQVRfRklMRSwgT19SRE9OTFksIDApKSA9PSAtMSkgewpAQCAtMTEyLDExICsxMTMsMTEgQEAKICAgICB9CiAgICAgaWYgKGJzaXplID09IDApIHsKICAgICAgICAgYnNpemUgPSBnZXRwYWdlc2l6ZSgpLTE7Ci0gICAgICAgIGJ1ZmYgPSBtYWxsb2MoYnNpemUrMSk7CisgICAgICAgIGJ1ZmYgPSAoY2hhciopbWFsbG9jKGJzaXplKzEpOwogICAgIH0KICAgICB3aGlsZSAoKGJ5dGVzX3JlYWQgPSByZWFkKHN0YXRmZCwgYnVmZiwgYnNpemUpKSA9PSBic2l6ZSkgewogICAgICAgICBic2l6ZSArPSBCVUZTSVo7Ci0gICAgICAgIGJ1ZmYgPSByZWFsbG9jKGJ1ZmYsIGJzaXplKzEpOworICAgICAgICBidWZmID0gKGNoYXIqKXJlYWxsb2MoYnVmZiwgYnNpemUrMSk7CiAgICAgICAgIERFQlVHTVNHVEwoKCJjcHUiLCAiL3Byb2Mvc3RhdCBidWZmZXIgaW5jcmVhc2VkIHRvICVkXG4iLCBic2l6ZSkpOwogICAgICAgICBjbG9zZShzdGF0ZmQpOwogICAgICAgICBzdGF0ZmQgPSBvcGVuKFNUQVRfRklMRSwgT19SRE9OTFksIDApOwpAQCAtMTU4LDIyICsxNTksMzMgQEAKICAgICAgICAgICAgIGIxKys7CiAgICAgICAgIH0KIAotCWlmICghaGFzX2NwdV8yNiB8fAotICAgICAgICAgICAgc3NjYW5mKGIxLCAiJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSIsICZjdXNlbGwsCi0gICAgICAgICAgICAgICAgICAgJmNpY2VsbCwgJmNzeXNsbCwgJmNpZGVsbCwgJmNpb3dsbCwgJmNpcnFsbCwgJmNzb2Z0bGwpICE9IDcpIHsKLQkgICAgaGFzX2NwdV8yNiA9IDA7Ci0JICAgIHNzY2FuZihiMSwgIiVsbHUgJWxsdSAlbGx1ICVsbHUiLCAmY3VzZWxsLCAmY2ljZWxsLCAmY3N5c2xsLAotICAgICAgICAgICAgICAgICAgICZjaWRlbGwpOworICAgICAgICBudW1fY3B1bGluZV9lbGVtID0gc3NjYW5mKGIxLCAiJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSIsCisgICAgICAgICAmY3VzZWxsLCAmY2ljZWxsLCAmY3N5c2xsLCAmY2lkZWxsLCAmY2lvd2xsLCAmY2lycWxsLCAmY3NvZnRsbCwgJmNzdGVhbGxsLCAmY2d1ZXN0bGwsICZjZ3Vlc3RfbmljZWxsKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImNwdSIsICIvcHJvYy9zdGF0IGNwdSBsaW5lIG51bWJlciBvZiBlbGVtZW50czogJWlcbiIsIG51bV9jcHVsaW5lX2VsZW0pKTsKIAotCX0gZWxzZSB7Ci0gICAgICAgICAgICBjcHUtPndhaXRfdGlja3MgICA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2lvd2xsOwotICAgICAgICAgICAgY3B1LT5pbnRycHRfdGlja3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWNpcnFsbDsKLSAgICAgICAgICAgIGNwdS0+c2lycV90aWNrcyAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljc29mdGxsOwotIAl9Ci0gICAgICAgIGNwdS0+dXNlcl90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3VzZWxsOwotICAgICAgICBjcHUtPm5pY2VfdGlja3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWNpY2VsbDsKLSAgICAgICAgY3B1LT5zeXNfdGlja3MgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljc3lzbGw7Ci0gICAgICAgIGNwdS0+aWRsZV90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2lkZWxsOworICAgICAgICAvKiBrZXJuZWwgMi42LjMzIGFuZCBhYm92ZSAqLworICAgICAgICBpZiAobnVtX2NwdWxpbmVfZWxlbSA9PSAxMCkgeworICAgICAgICAgICAgY3B1LT5ndWVzdG5pY2VfdGlja3MgPSBjZ3Vlc3RfbmljZWxsOworICAgICAgICB9CisgICAgICAgIC8qIGtlcm5lbCAyLjYuMjQgYW5kIGFib3ZlICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID49IDkpIHsKKyAgICAgICAgICAgIGNwdS0+Z3Vlc3RfdGlja3MgPSBjZ3Vlc3RsbDsKKyAgICAgICAgfQorICAgICAgICAvKiBrZXJuZWwgMi42LjExIGFuZCBhYm92ZSAqLworICAgICAgICBpZiAobnVtX2NwdWxpbmVfZWxlbSA+PSA4KSB7CisgICAgICAgICAgICBjcHUtPnN0ZWFsX3RpY2tzID0gY3N0ZWFsbGw7CisgICAgICAgIH0KKyAgICAgICAgLyoga2VybmVsIDIuNiAqLworICAgICAgICBpZiAobnVtX2NwdWxpbmVfZWxlbSA+PSA1KSB7CisgICAgICAgICAgICBjcHUtPndhaXRfdGlja3MgICA9IGNpb3dsbDsKKyAgICAgICAgICAgIGNwdS0+aW50cnB0X3RpY2tzID0gY2lycWxsOworICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzICAgPSBjc29mdGxsOworICAgICAgICB9CisgICAgICAgIC8qIHJlc3QgKi8KKyAgICAgICAgY3B1LT51c2VyX3RpY2tzID0gY3VzZWxsOworICAgICAgICBjcHUtPm5pY2VfdGlja3MgPSBjaWNlbGw7CisgICAgICAgIGNwdS0+c3lzX3RpY2tzICA9IGNzeXNsbDsKKyAgICAgICAgY3B1LT5pZGxlX3RpY2tzID0gY2lkZWxsOwogICAgIH0KICAgICBpZiAoIGIxID09IGJ1ZmYgKSB7CiAJaWYgKGZpcnN0KQpAQCAtMjE5LDExICsyMzEsMTEgQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh2bWJzaXplID09IDApIHsKIAkgICAgdm1ic2l6ZSA9IGdldHBhZ2VzaXplKCktMTsKLQkgICAgdm1idWZmID0gbWFsbG9jKHZtYnNpemUrMSk7CisJICAgIHZtYnVmZiA9IChjaGFyKiltYWxsb2Modm1ic2l6ZSsxKTsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoKGJ5dGVzX3JlYWQgPSByZWFkKHZtc3RhdGZkLCB2bWJ1ZmYsIHZtYnNpemUpKSA9PSB2bWJzaXplKSB7CiAJICAgIHZtYnNpemUgKz0gQlVGU0laOwotCSAgICB2bWJ1ZmYgPSByZWFsbG9jKHZtYnVmZiwgdm1ic2l6ZSsxKTsKKwkgICAgdm1idWZmID0gKGNoYXIqKXJlYWxsb2Modm1idWZmLCB2bWJzaXplKzEpOwogCSAgICBjbG9zZSh2bXN0YXRmZCk7CiAJICAgIHZtc3RhdGZkID0gb3BlbihWTVNUQVRfRklMRSwgT19SRE9OTFksIDApOwogCSAgICBpZiAodm1zdGF0ZmQgPT0gLTEpIHsKQEAgLTIzMiw3ICsyNDQsNiBAQAogCSAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xvc2Uodm1zdGF0ZmQpOwotCiAgICAgICAgIGlmICggYnl0ZXNfcmVhZCA8IDAgKSB7CiAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoVk1TVEFUX0ZJTEUgInJlYWQgZXJyb3IiKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbWFjaC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMKaW5kZXggZDUyN2IzZC4uN2YwOTBjOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogICAgIGNwdTAtPnBhZ2VJbiA9IHZtc3RhdC5wYWdlaW5zOwogICAgIGNwdTAtPnBhZ2VPdXQgPSB2bXN0YXQucGFnZW91dHM7CiAJLyogbm90IGltcGxlbWVudGVkOiBzd2FwSW4sIHN3YXBPdXQsIG5JbnRlcnJ1cHRzLCBuQ3R4U3dpdGNoZXMgKi8KKyAgICByZXR1cm4gMTsKIH0KIAogIAkgIAkgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMKaW5kZXggYTllYjFlMi4uOTc0MDI4YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYwpAQCAtMyw2ICszLDcgQEAKICAqICAgICBlLmcuIEZyZWVCU0QKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgpAQCAtMzEsNiArMzIsNyBAQAogI2RlZmluZSBDUFVfU1lNQk9MICAiY3BfdGltZSIKICNkZWZpbmUgTUVNX1NZTUJPTCAgImNudCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2NvcHlfc3RhdHMpCiB2b2lkIF9jcHVfY29weV9zdGF0cyggbmV0c25tcF9jcHVfaW5mbyAqY3B1ICk7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jCmluZGV4IGY0NGYyOTUuLjVmZGQ1MzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMKQEAgLTMsNiArMyw3IEBACiAgKiAgICAgZS5nLiBBSVgKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgpAQCAtMTEsOCArMTIsMTAgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2NvcHlfc3RhdHMpCiB2b2lkIF9jcHVfY29weV9zdGF0cyggbmV0c25tcF9jcHVfaW5mbyAqY3B1ICk7CiAKICAgICAvKgpAQCAtMjcsNyArMzAsNyBAQAogICAgIHN0cmNweShjcHUtPm5hbWUsICJPdmVyYWxsIENQVSBzdGF0aXN0aWNzIik7CiAKICAgICBjcHVfbnVtID0gcGVyZnN0YXRfY3B1KCBOVUxMLCBOVUxMLCBzaXplb2YocGVyZnN0YXRfY3B1X3QpLCAwICk7Ci0gICAgY3MyID0gbWFsbG9jKCBjcHVfbnVtKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOworICAgIGNzMiA9IChwZXJmc3RhdF9jcHVfdCopbWFsbG9jKCBjcHVfbnVtKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOwogIAogICAgIHN0cmNweSggbmFtZS5uYW1lLCAiIik7CiAgICAgaWYgKHBlcmZzdGF0X2NwdSgmbmFtZSwgY3MyLCBzaXplb2YocGVyZnN0YXRfY3B1X3QpLCBjcHVfbnVtKSA+IDApIHsKQEAgLTgzLDcgKzg2LDcgQEAKICAgICAgKiBQZXItQ1BVIHN0YXRpc3RpY3MKICAgICAgKi8KICAgICBuICAgPSBjcy5uY3B1czsgICAvKiBYWFggLSBDb21wYXJlIGFnYWluc3QgY3B1X251bSAqLwotICAgIGNzMiA9IG1hbGxvYyggbipzaXplb2YocGVyZnN0YXRfY3B1X3QpKTsKKyAgICBjczIgPSAocGVyZnN0YXRfY3B1X3QqKW1hbGxvYyggbipzaXplb2YocGVyZnN0YXRfY3B1X3QpKTsKICAgICBzdHJjcHkoIG5hbWUubmFtZSwgIiIpOwogICAgIGlmIChwZXJmc3RhdF9jcHUoJm5hbWUsIGNzMiwgc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSwgbikgPiAwKSB7CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgaSsrICkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMKaW5kZXggYzYxMDI2OS4uNWVjYjY4ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jCkBAIC0zLDYgKzMsNyBAQAogICogICAgIGUuZy4gQlNEL09TLCBOZXRCU0QsIE9wZW5CU0QsIGxhdGVyIERhcndpbiByZWxlYXNlcwogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1Lmg+CkBAIC0zMCw2ICszMSw4IEBACiAjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2NvcHlfc3RhdHMpCisKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKTsKIAogICAgIC8qCkBAIC03NSwxMyArNzgsMjAgQEAKIAogI2lmIGRlZmluZWQoX19OZXRCU0RfXykKICNkZWZpbmUgTkVUU05NUF9LRVJOX0NQVSAgS0VSTl9DUF9USU1FCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVX1RZUEUgTkVUU05NUF9DUFVfU1RBVFMKICNlbGlmIGRlZmluZWQoS0VSTl9DUFVTVEFUUykgICAgICAgICAgICAgIC8qIEJTRGkgKi8KICNkZWZpbmUgTkVUU05NUF9LRVJOX0NQVSAgS0VSTl9DUFVTVEFUUworI2VsaWYgZGVmaW5lZChLRVJOX0NQVElNRTIpICAgICAgICAgICAgICAgIC8qIE9wZW5CU0QgKi8KKyNkZWZpbmUgTkVUU05NUF9LRVJOX0NQVSAgS0VSTl9DUFRJTUUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFVfVFlQRSB1X2ludDY0X3QKICNlbGlmIGRlZmluZWQoS0VSTl9DUFRJTUUpICAgICAgICAgICAgICAgIC8qIE9wZW5CU0QgKi8KICNkZWZpbmUgTkVUU05NUF9LRVJOX0NQVSAgS0VSTl9DUFRJTUUKIAogI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNkZWZpbmUgTkVUU05NUF9LRVJOX0NQVSAgMCAgICAvKiBkdW1teSB2YWx1ZSAtIHN5c2N0bG5hbWV0b21pYigyKSBzaG91bGQgYmUgdXNlZCAqLworI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVSAxICAgIC8qIEVuYWJsZSBzdXBwb3J0IGZvciBtdWx0aS1jcHUgc3RhdHMuIFZhbGlkIGZvciBGcmVlQlNEID49Ni40LCA+PTcuMSwgPj04LjAgYW5kIGJleW9uZCAqLworI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVV9UWVBFIE5FVFNOTVBfQ1BVX1NUQVRTCiAKICNlbHNlCiAjZXJyb3IgIk5vIENQVSBzdGF0aXN0aWNzIHN5c2N0bCB0b2tlbiIKQEAgLTEwMyw4ICsxMTMsMTMgQEAKICAgICAjZGVmaW5lIE5TX1ZNX1NXVENICQlzd3RjaAogICAgICNkZWZpbmUgTlNfVk1fUEFHRUlOCXBhZ2VpbnMKICAgICAjZGVmaW5lIE5TX1ZNX1BBR0VPVVQJcGRwYWdlb3V0cworI2lmZGVmIEhBVkVfU1RSVUNUX1VWTUVYUF9QR1NXQVBJTgorICAgICNkZWZpbmUgTlNfVk1fU1dBUElOCXBnc3dhcGluCisgICAgI2RlZmluZSBOU19WTV9TV0FQT1VUCXBnc3dhcG91dAorI2Vsc2UKICAgICAjZGVmaW5lIE5TX1ZNX1NXQVBJTglzd2FwaW5zCiAgICAgI2RlZmluZSBOU19WTV9TV0FQT1VUCXN3YXBvdXRzCisjZW5kaWYKIAogI2lmIGRlZmluZWQoVk1fVVZNRVhQMikgICAgICAgICAgICAgICAgICAgLyogTmV0QlNEIDEuNisgKi8KICNkZWZpbmUgTkVUU05NUF9WTV9TVEFUUyAgICAgICBWTV9VVk1FWFAyCkBAIC0xNDQsNyArMTU5LDYgQEAKICAgICAgKiBMb2FkIHRoZSBsYXRlc3QgQ1BVIHVzYWdlIHN0YXRpc3RpY3MKICAgICAgKi8KIGludCBuZXRzbm1wX2NwdV9hcmNoX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICptYWdpYyApIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICBpOwogCiAgICAgLyoKICAgICAgKiBTdHJpY3RseSBzcGVha2luZywgQlNEaSBvdWdodCB0byB1c2UKQEAgLTE1NCwxMSArMTY4LDIwIEBACiAgICAgICogRG9uJ3QgZmlnaHQgaXQsIERhdmUgLSBnbyB3aXRoIHRoZSBmbG93Li4uLgogICAgICAqLwogICAgIE5FVFNOTVBfQ1BVX1NUQVRTIGNwdV9zdGF0c1tDUFVTVEFURVNdOwotICAgIGludCAgICAgICAgICAgIGNwdV9taWJbXSA9IHsgQ1RMX0tFUk4sIE5FVFNOTVBfS0VSTl9DUFUgfTsKICAgICBzaXplX3QgICAgICAgICBjcHVfc2l6ZSAgPSBzaXplb2YoY3B1X3N0YXRzKTsKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKKyAgICBpbnQgICAgICAgICAgICBjcHVfbWliW10gPSB7IENUTF9LRVJOLCBORVRTTk1QX0tFUk5fQ1BVIH07CisjZW5kaWYKKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIHN0YXRpYyBpbnQgICAgIGNwX3RpbWVzID0gLTE7CisjZW5kaWYKKyNpZmRlZiBLRVJOX0NQVElNRTIKKyAgICBpbnQgICAgICAgICAgICBtY3B1X21pYltdID0geyBDVExfS0VSTiwgS0VSTl9DUFRJTUUyLCAwIH07CisjZW5kaWYKICNpZmRlZiBORVRTTk1QX0tFUk5fTUNQVSAKKyAgICBpbnQgICAgICAgICAgICBpOworICAgIGludCAgICAgICAgICAgIGFjdF9jcHUgPSBjcHVfbnVtOwogICAgIE5FVFNOTVBfS0VSTl9NQ1BVX1RZUEUgKm1jcHVfc3RhdHM7Ci0gICAgaW50ICAgICAgICAgICAgbWNwdV9taWJbXSA9IHsgQ1RMX0tFUk4sIE5FVFNOTVBfS0VSTl9NQ1BVIH07CiAgICAgc2l6ZV90ICAgICAgICAgbWNwdV9zaXplOwogI2VuZGlmCiAgICAgTkVUU05NUF9WTV9TVEFUU19UWVBFIG1lbV9zdGF0czsKQEAgLTE2NiwxNyArMTg5LDE3IEBACiAgICAgc2l6ZV90ICAgICAgICAgbWVtX3NpemUgID0gc2l6ZW9mKE5FVFNOTVBfVk1fU1RBVFNfVFlQRSk7CiAgICAgbmV0c25tcF9jcHVfaW5mbyAqY3B1ID0gbmV0c25tcF9jcHVfZ2V0X2J5SWR4KCAtMSwgMCApOwogCi0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykpCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQogICAgIHN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lIiwgY3B1X3N0YXRzLCAmY3B1X3NpemUsIE5VTEwsIDApOwogI2Vsc2UKICAgICBzeXNjdGwoY3B1X21pYiwgMiwgIGNwdV9zdGF0cywgJmNwdV9zaXplLCBOVUxMLCAwKTsKICNlbmRpZgotICAgIGNwdS0+dXNlcl90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX1VTRVJdOwotICAgIGNwdS0+bmljZV90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX05JQ0VdOwotICAgIGNwdS0+c3lzMl90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX1NZU10rY3B1X3N0YXRzW0NQX0lOVFJdOwotICAgIGNwdS0+a2Vybl90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX1NZU107Ci0gICAgY3B1LT5pZGxlX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfSURMRV07Ci0gICAgY3B1LT5pbnRycHRfdGlja3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWNwdV9zdGF0c1tDUF9JTlRSXTsKKyAgICBjcHUtPnVzZXJfdGlja3MgPSBjcHVfc3RhdHNbQ1BfVVNFUl07CisgICAgY3B1LT5uaWNlX3RpY2tzID0gY3B1X3N0YXRzW0NQX05JQ0VdOworICAgIGNwdS0+c3lzMl90aWNrcyA9IGNwdV9zdGF0c1tDUF9TWVNdK2NwdV9zdGF0c1tDUF9JTlRSXTsKKyAgICBjcHUtPmtlcm5fdGlja3MgPSBjcHVfc3RhdHNbQ1BfU1lTXTsKKyAgICBjcHUtPmlkbGVfdGlja3MgPSBjcHVfc3RhdHNbQ1BfSURMRV07CisgICAgY3B1LT5pbnRycHRfdGlja3MgPSBjcHVfc3RhdHNbQ1BfSU5UUl07CiAgICAgICAgIC8qIHdhaXRfdGlja3MsIHNpcnFfdGlja3MgdW51c2VkICovCiAgICAgCiAgICAgICAgIC8qCkBAIC0xODQsMzAgKzIwNyw4MyBAQAogICAgICAgICAgKiAgIFhYWCAtIERvIHRoZXNlIHJlYWxseSBiZWxvbmcgaGVyZSA/CiAgICAgICAgICAqLwogICAgIHN5c2N0bChtZW1fbWliLCAyLCAmbWVtX3N0YXRzLCAmbWVtX3NpemUsIE5VTEwsIDApOwotICAgIGNwdS0+bkludGVycnVwdHMgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fSU5UUjsKLSAgICBjcHUtPm5DdHhTd2l0Y2hlcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtX3N0YXRzLk5TX1ZNX1NXVENIOwotICAgIGNwdS0+c3dhcEluICAgICAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fU1dBUElOOwotICAgIGNwdS0+c3dhcE91dCAgICAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fU1dBUE9VVDsKKyAgICBjcHUtPm5JbnRlcnJ1cHRzICA9IG1lbV9zdGF0cy5OU19WTV9JTlRSOworICAgIGNwdS0+bkN0eFN3aXRjaGVzID0gbWVtX3N0YXRzLk5TX1ZNX1NXVENIOworICAgIGNwdS0+c3dhcEluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1NXQVBJTjsKKyAgICBjcHUtPnN3YXBPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9TV0FQT1VUOwogI2lmZGVmIE5TX1ZNX1BBR0VJTgotICAgIGNwdS0+cGFnZUluICAgICAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fUEFHRUlOOworICAgIGNwdS0+cGFnZUluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1BBR0VJTjsKICNlbmRpZgogI2lmZGVmIE5TX1ZNX1BBR0VPVVQKLSAgICBjcHUtPnBhZ2VPdXQgICAgICA9ICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtX3N0YXRzLk5TX1ZNX1BBR0VPVVQ7CisgICAgY3B1LT5wYWdlT3V0ICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fUEFHRU9VVDsKICNlbmRpZgogCiAjaWZkZWYgTkVUU05NUF9LRVJOX01DUFUKLSAgICBtY3B1X3NpemUgID0gY3B1X251bSpzaXplb2YoTkVUU05NUF9LRVJOX01DUFVfVFlQRSk7CisjaWYgZGVmaW5lZChLRVJOX0NQVElNRTIpCisgICAgbWNwdV9zaXplICA9IGNwdV9udW0qc2l6ZW9mKGNwdV9zdGF0cyk7CiAgICAgbWNwdV9zdGF0cyA9IG1hbGxvYyhtY3B1X3NpemUpOwotICAgIHN5c2N0bChtY3B1X21pYiwgMiwgbWNwdV9zdGF0cywgJm1jcHVfc2l6ZSwgTlVMTCwgMCk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBjcHVfbnVtOyBpKysgKSB7CisjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisgICAgbWNwdV9zaXplICA9IGNwdV9udW0qc2l6ZW9mKGNwdV9zdGF0cyk7CisgICAgbWNwdV9zdGF0cyA9IG1hbGxvYyhtY3B1X3NpemUpOworICAgIHN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lIiwgbWNwdV9zdGF0cywgJm1jcHVfc2l6ZSwgTlVMTCwgMCk7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgIGlmIChjcF90aW1lcyA9PSAtMSkgeworCWludCByZXQgPSBzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZXMiLCBOVUxMLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKwljcF90aW1lcyA9IHJldCA9PSAtMSA/IDAgOiAxOworICAgIH0KKyAgICBpZiAoY3BfdGltZXMpIHsKKwlzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZXMiLCBOVUxMLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKwltY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7CisJc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWVzIiwgbWNwdV9zdGF0cywgJm1jcHVfc2l6ZSwgTlVMTCwgMCk7CisgICAgfQorICAgIGVsc2UgeworCW1jcHVfc2l6ZSAgPSBzaXplb2YoY3B1X3N0YXRzKTsKKwltY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7CisJc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWUiLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKwlhY3RfY3B1ID0gMTsKKyAgICB9CisjZW5kaWYKKyAgICBmb3IgKCBpID0gMDsgaSA8IGFjdF9jcHU7IGkrKyApIHsKICAgICAgICAgY3B1ID0gbmV0c25tcF9jcHVfZ2V0X2J5SWR4KCBpLCAwICk7CiAgICAgICAgIC8qIFhYWCAtIHBlci1DUFUgc3RhdGlzdGljcyAtIG1jcHVfbWliW2ldLj8/PyAqLworI2lmZGVmIEtFUk5fQ1BUSU1FMgorCW1jcHVfbWliWzJdID0gaTsKKwlzeXNjdGwobWNwdV9taWIsIDMsIG1jcHVfc3RhdHMraSpDUFVTVEFURVMsICZtY3B1X3NpemUsIE5VTEwsIDApOworI2VuZGlmCisJLyogQWxtb3N0IGNvcHkgJiBwYXN0ZSBvZiBwcmV2aW91cyBjcHUgc3RhdHMgc3R1ZmYgOikgKi8KKwljcHUtPnVzZXJfdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfVVNFUl07CisJY3B1LT5uaWNlX3RpY2tzID0gbWNwdV9zdGF0c1soaSpDUFVTVEFURVMpK0NQX05JQ0VdOworCWNwdS0+c3lzMl90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9TWVNdK21jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9JTlRSXTsKKwljcHUtPmtlcm5fdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfU1lTXTsKKwljcHUtPmlkbGVfdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfSURMRV07CisJY3B1LT5pbnRycHRfdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfSU5UUl07CisJICAgIC8qIHdhaXRfdGlja3MsIHNpcnFfdGlja3MgdW51c2VkICovCisKKwkgICAgLyoKKwkgICAgICogSW50ZXJydXB0L0NvbnRleHQgU3dpdGNoIHN0YXRpc3RpY3MKKwkgICAgICogICBYWFggLSBEbyB0aGVzZSByZWFsbHkgYmVsb25nIGhlcmUgPworCSAgICAgKi8KKworCS8qIFRoZXJlJ3Mgbm8gcmVhbCBuZWVkIHRvIGV4ZWN1dGUgYW5vdGhlciBzeXNjdGwoKQorCSAqCisJICogc3lzY3RsKG1lbV9taWIsIDIsICZtZW1fc3RhdHMsICZtZW1fc2l6ZSwgTlVMTCwgMCk7CisJICovCisJY3B1LT5uSW50ZXJydXB0cyAgPSBtZW1fc3RhdHMuTlNfVk1fSU5UUjsKKwljcHUtPm5DdHhTd2l0Y2hlcyA9IG1lbV9zdGF0cy5OU19WTV9TV1RDSDsKKwljcHUtPnN3YXBJbiAgICAgICA9IG1lbV9zdGF0cy5OU19WTV9TV0FQSU47CisJY3B1LT5zd2FwT3V0ICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fU1dBUE9VVDsKKyNpZmRlZiBOU19WTV9QQUdFSU4KKwljcHUtPnBhZ2VJbiAgICAgICA9IG1lbV9zdGF0cy5OU19WTV9QQUdFSU47CisjZW5kaWYKKyNpZmRlZiBOU19WTV9QQUdFT1VUCisJY3B1LT5wYWdlT3V0ICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fUEFHRU9VVDsKKyNlbmRpZgogICAgIH0KICAgICBmcmVlKG1jcHVfc3RhdHMpOwotI2Vsc2UKKyNlbHNlCS8qIE5FVFNOTVBfS0VSTl9NQ1BVICovCiAgICAgICAgIC8qIENvcHkgIm92ZXJhbGwiIGZpZ3VyZXMgdG8gY3B1MCBlbnRyeSAqLwogICAgIF9jcHVfY29weV9zdGF0cyggY3B1ICk7Ci0jZW5kaWYKKyNlbmRpZiAgLyogTkVUU05NUF9LRVJOX01DUFUgKi8KIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYmY0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9od19mc3lzKQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwpCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUVkZTU1RBVCkgfHwgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzKQorI2VsaWYgZGVmaW5lZChIQVZFX0dFVE1OVEVOVCkgJiYgIWRlZmluZWQoaXJpeDYpCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50KQorI2Vsc2UKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMvZnN5c192b2lkKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAyN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYwpAQCAtMCwwICsxLDE2OCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaW5jbHVkZSAiaGFyZHdhcmUvZnN5cy9od19mc3lzLmgiCisKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKworICAgIC8qCisgICAgICogSGFuZGxlIG1pbm9yIG5hbWluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHN0YXRmcy9zdGF0dmZzCisgICAgICovCisjaWYgZGVmaW5lZChfVkZTX05BTUVMRU4pCisjZGVmaW5lIE5TRlNfTkFNRUxFTiAgX1ZGU19OQU1FTEVOCisjZWxzZQorI2RlZmluZSBOU0ZTX05BTUVMRU4gIE1OQU1FTEVOCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9HRVRWRlNTVEFUKSAmJiBkZWZpbmVkKF9fTmV0QlNEX18pCisjZGVmaW5lIE5TRlNfR0VURlNTVEFUICBnZXR2ZnNzdGF0CisjZGVmaW5lIE5TRlNfU1RBVEZTICAgICBzdGF0dmZzCisjZGVmaW5lIE5TRlNfRkxBR1MgICAgICBmX2ZsYWcKKyNlbHNlCisjZGVmaW5lIE5TRlNfR0VURlNTVEFUICBnZXRmc3N0YXQKKyNkZWZpbmUgTlNGU19TVEFURlMgICAgIHN0YXRmcworI2RlZmluZSBOU0ZTX0ZMQUdTICAgICAgZl9mbGFncworI2VuZGlmCisKK2ludAorX2ZzX3R5cGUoIGNoYXIgKnR5cGVuYW1lICkKK3sKKyAgICBERUJVR01TR1RMKCgiZnN5czp0eXBlIiwgIkNsYXNzaWZ5aW5nICVzXG4iLCB0eXBlbmFtZSkpOworCisgICAgaWYgKCAhdHlwZW5hbWUgfHwgKnR5cGVuYW1lPT0nXDAnICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX1VOS05PV047CisKKyNpbmNsdWRlICJtb3VudHMuaCIKKworICAgICAgIC8qCisgICAgICAgICogTGlzdCBvZiBtb3VudCB0eXBlcyBmcm9tIDxzeXMvbW91bnQuaD4KKyAgICAgICAgKi8KKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfRkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9VRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0JFUktFTEVZOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9ORlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX05GUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfTUZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9NRlM7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX01TRE9TKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9NU0RPU0ZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9GQVQ7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX0FGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfQUZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9DRDk2NjApICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lTTzk2NjA7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX0VYVDJGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfRVhUMjsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfTlRGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTlRGUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfWkZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfQUNGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfT1RIRVI7CisKKyAgICAgICAvKgorICAgICAgICAqIE5ldEJTRCBhbHNvIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIHR5cGVzOgorICAgICAgICAqICAgICBNT1VOVF9OVUxMCisgICAgICAgICogICAgIE1PVU5UX09WRVJMQVkKKyAgICAgICAgKiAgICAgTU9VTlRfVU1BUAorICAgICAgICAqICAgICBNT1VOVF9VTklPTgorICAgICAgICAqICAgICBNT1VOVF9DRlMvQ09EQQorICAgICAgICAqICAgICBNT1VOVF9GSUxFQ09SRQorICAgICAgICAqICAgICBNT1VOVF9TTUJGUworICAgICAgICAqICAgICBNT1VOVF9QVFlGUworICAgICAgICAqIE9wZW5CU0QgYWxzbyByZWNvZ25pc2VzIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSB0eXBlczoKKyAgICAgICAgKiAgICAgTU9VTlRfTE9GUworICAgICAgICAqICAgICBNT1VOVF9OQ1BGUworICAgICAgICAqICAgICBNT1VOVF9YRlMKKyAgICAgICAgKiAgICAgTU9VTlRfVURGCisgICAgICAgICogQm90aCBvZiB0aGVtIHJlY29nbmlzZSB0aGUgZm9sbG93aW5nIGZpbGVzeXN0ZW0gdHlwZXM6CisgICAgICAgICogICAgIE1PVU5UX0xGUworICAgICAgICAqICAgICBNT1VOVF9GREVTQworICAgICAgICAqICAgICBNT1VOVF9QT1JUQUwKKyAgICAgICAgKiAgICAgTU9VTlRfS0VSTkZTCisgICAgICAgICogICAgIE1PVU5UX1BST0NGUworICAgICAgICAqICAgICBNT1VOVF9BRE9TRlMKKyAgICAgICAgKgorICAgICAgICAqIEFsbCBvZiB0aGVzZSBmaWxlc3lzdGVtcyBhcmUgbWFwcGVkIHRvIE5FVFNOTVBfRlNfVFlQRV9PVEhFUgorICAgICAgICAqICAgc28gd2lsbCBiZSBwaWNrZWQgdXAgYnkgdGhlIGZvbGxvd2luZyBkZWZhdWx0IGJyYW5jaC4KKyAgICAgICAgKi8KKyAgICBlbHNlCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKK30KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggdm9pZCApCit7CisgICAgcmV0dXJuOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9sb2FkKCB2b2lkICkKK3sKKyAgICBpbnQgbiwgaTsKKyAgICBzdHJ1Y3QgTlNGU19TVEFURlMgKnN0YXRzOworICAgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKworICAgIC8qCisgICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnRseSBtb3VudGVkIGZpbGVzeXN0ZW1zLi4uCisgICAgICovCisgICAgbiA9IE5TRlNfR0VURlNTVEFUKCBOVUxMLCAwLCAwICk7CisgICAgaWYgKCBuPT0wICkKKyAgICAgICAgcmV0dXJuOworICAgIHN0YXRzID0gKHN0cnVjdCBOU0ZTX1NUQVRGUyAqKW1hbGxvYyggbiAqIHNpemVvZiggc3RydWN0IE5TRlNfU1RBVEZTICkpOworICAgIG4gPSBOU0ZTX0dFVEZTU1RBVCggc3RhdHMsIG4gKiBzaXplb2YoIHN0cnVjdCBOU0ZTX1NUQVRGUyApLCBNTlRfTk9XQUlUICk7CisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgaW5zZXJ0IHRoaXMgaW50byB0aGUgZmlsZXN5c3RlbSBjb250YWluZXIuCisgICAgICovCisgICAgZm9yICggaT0wOyBpPG47IGkrKyApIHsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggc3RhdHNbaV0uZl9tbnRvbm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlNfRklORF9DUkVBVEUgKTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN0cmxjcHkoIGVudHJ5LT5wYXRoLCAgIHN0YXRzW2ldLmZfbW50b25uYW1lLCAgIHNpemVvZihlbnRyeS0+cGF0aCkpOworICAgICAgICBlbnRyeS0+cGF0aFtzaXplb2YoZW50cnktPnBhdGgpLTFdID0gJ1wwJzsKKyAgICAgICAgc3RybGNweSggZW50cnktPmRldmljZSwgc3RhdHNbaV0uZl9tbnRmcm9tbmFtZSwgc2l6ZW9mKGVudHJ5LT5kZXZpY2UpKTsKKyAgICAgICAgZW50cnktPmRldmljZVtzaXplb2YoZW50cnktPmRldmljZSktMV0gPSAnXDAnOworICAgICAgICBlbnRyeS0+dW5pdHMgPSBzdGF0c1tpXS5mX2JzaXplOyAgICAvKiBvciBmX2Zyc2l6ZSAqLworICAgICAgICBlbnRyeS0+c2l6ZSAgPSBzdGF0c1tpXS5mX2Jsb2NrczsKKyAgICAgICAgZW50cnktPnVzZWQgID0gKHN0YXRzW2ldLmZfYmxvY2tzIC0gc3RhdHNbaV0uZl9iZnJlZSk7CisgICAgICAgIC8qIGVudHJ5LT5hdmFpbCBpcyBjdXJyZW50bHkgdW5zaWduZWQsIHNvIHByb3RlY3QgYWdhaW5zdCBuZWdhdGl2ZQorICAgICAgICAgKiB2YWx1ZXMhCisgICAgICAgICAqIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBzaWduZWQgZmllbGQuCisgICAgICAgICAqLworICAgICAgICBpZiAoc3RhdHNbaV0uZl9iYXZhaWwgPCAwKQorICAgICAgICAgICAgZW50cnktPmF2YWlsID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPmF2YWlsID0gc3RhdHNbaV0uZl9iYXZhaWw7CisgICAgICAgIGVudHJ5LT5pbnVtc190b3RhbCA9IHN0YXRzW2ldLmZfZmlsZXM7CisgICAgICAgIGVudHJ5LT5pbnVtc19hdmFpbCA9IHN0YXRzW2ldLmZfZmZyZWU7CisKKyAgICAgICAgZW50cnktPnR5cGUgPSBfZnNfdHlwZSggc3RhdHNbaV0uZl9mc3R5cGVuYW1lICk7CisgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfQUNUSVZFOworCisgICAgICAgIGlmICghIChzdGF0c1tpXS5OU0ZTX0ZMQUdTICYgTU5UX0xPQ0FMICkpIHsKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFOworICAgICAgICB9CisgICAgICAgIGlmICggIHN0YXRzW2ldLk5TRlNfRkxBR1MgJiBNTlRfUkRPTkxZICkgeworICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19ST05MWTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICBzdGF0c1tpXS5OU0ZTX0ZMQUdTICYgTU5UX1JPT1RGUyApIHsKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfQk9PVEFCTEU7CisgICAgICAgIH0KKyAgICAgICAgbmV0c25tcF9mc3lzX2NhbGN1bGF0ZTMyKGVudHJ5KTsKKyAgICB9CisKKyAgICBmcmVlKHN0YXRzKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmJiMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jCkBAIC0wLDAgKzEsMTgyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TWVNfTU5UQ1RMX0gKKyNpbmNsdWRlIDxzeXMvbW50Y3RsLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19WTU9VTlRfSAorI2luY2x1ZGUgPHN5cy92bW91bnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorCisKK2ludAorX2ZzeXNfcmVtb3RlKCBjaGFyICpkZXZpY2UsIGludCB0eXBlLCBjaGFyICpob3N0ICkKK3sKKyAgICBpZiAoKCB0eXBlID09IE5FVFNOTVBfRlNfVFlQRV9ORlMpIHx8CisgICAgICAgICggdHlwZSA9PSBORVRTTk1QX0ZTX1RZUEVfQUZTKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworaW50CitfZnN5c190eXBlKCBpbnQgdHlwZSkKK3sKKyAgICBERUJVR01TR1RMKCgiZnN5czp0eXBlIiwgIkNsYXNzaWZ5aW5nICVkXG4iLCB0eXBlKSk7CisKKyAgICBzd2l0Y2ggKCB0eXBlICkgeworICAgICAgICBjYXNlICBNTlRfQUlYOgorICAgICAgICBjYXNlICBNTlRfSkZTOgorICAgICAgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWTsKKworICAgICAgICBjYXNlICBNTlRfQ0RST006CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lTTzk2NjA7CisKKyAgICAgICAgY2FzZSAgTU5UX05GUzoKKyAgICAgICAgY2FzZSAgTU5UX05GUzM6CisgICAgICAgIGNhc2UgIE1OVF9BVVRPRlM6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX05GUzsKKworICAgIC8qCisgICAgICogIFRoZSBmb2xsb3dpbmcgY29kZSBjb3ZlcnMgc2VsZWN0ZWQgZmlsZXN5c3RlbXMKKyAgICAgKiAgICB3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIEhSLVRZUEVTIGVudW1lcmF0aW9ucywKKyAgICAgKiAgICBidXQgc2hvdWxkIHN0aWxsIGJlIG1vbml0b3JlZC4KKyAgICAgKiAgVGhlc2UgYXJlIGFsbCBtYXBwZWQgaW50byB0eXBlICJvdGhlciIKKyAgICAgKgorICAgICAqLyAgICAKKyNpZmRlZiBNTlRfTkFNRUZTCisgICAgICAgIGNhc2UgTU5UX05BTUVGUzoKKyNlbmRpZgorI2lmZGVmIE1OVF9QUk9DRlMKKyAgICAgICAgY2FzZSBNTlRfUFJPQ0ZTOgorI2VuZGlmCisjaWZkZWYgTU5UX0FDRlMKKyAgICAgICAgY2FzZSBNTlRfQUNGUzoKKyNlbmRpZgorICAgICAgICBjYXNlIE1OVF9TRlM6CisgICAgICAgIGNhc2UgTU5UX0NBQ0hFRlM6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX09USEVSOworCisgICAgLyogICAgCisgICAgICogIEFsbCBvdGhlciB0eXBlcyBhcmUgc2lsZW50bHkgc2tpcHBlZAorICAgICAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JR05PUkU7CisgICAgfQorICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSUdOT1JFOyAgLyogTm90IHJlYWNoZWQgKi8KK30KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggdm9pZCApCit7CisgICAgcmV0dXJuOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9sb2FkKCB2b2lkICkKK3sKKyAgICBpbnQgIHJldCAgPSAwLCBpID0gMDsKKyAgICB1aW50IHNpemUgPSAwOworCisgICAgc3RydWN0IHZtb3VudCAqYWl4bW50LCAqYWl4Y3VycjsKKyAgICBjaGFyICAgICAgICAgICpwYXRoOworICAgIHN0cnVjdCBzdGF0ZnMgIHN0YXRfYnVmOworICAgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKyAgICBjaGFyICAgICAgICAgICAgICAgdG1wYnVmWzEwMjRdOworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IG1vdW50ZWQgZmlsZXN5c3RlbXMuLi4KKyAgICAgKi8KKyAgICByZXQgPSBtbnRjdGwoTUNUTF9RVUVSWSwgc2l6ZW9mKHVpbnQpLCAodm9pZCAqKSAmc2l6ZSk7CisgICAgaWYgKCByZXQgIT0gMCB8fCBzaXplPD0wICkgeworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoICJpbml0aWFsIG1udGN0bCBmYWlsZWQiICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhaXhtbnQgPSAoc3RydWN0IHZtb3VudCAqKW1hbGxvYyggc2l6ZSApOworICAgIGlmICggYWl4bW50ID09IE5VTEwgKSB7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1udGN0bCBkYXRhIiApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmV0ID0gbW50Y3RsKE1DVExfUVVFUlksIHNpemUsICh2b2lkICopIGFpeG1udCk7CisgICAgaWYgKCByZXQgPD0gMCApIHsKKyAgICAgICAgZnJlZShhaXhtbnQpOworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoICJtYWluIG1udGN0bCBmYWlsZWQiICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWl4Y3VyciA9IGFpeG1udDsKKworCisgICAgLyoKKyAgICAgKiAuLi4gYW5kIGluc2VydCB0aGlzIGludG8gdGhlIGZpbGVzeXN0ZW0gY29udGFpbmVyLgorICAgICAqLworCisgICAgZm9yIChpID0gMDsKKyAgICAgICAgIGkgPCByZXQ7CisgICAgICAgICBpKyssIGFpeGN1cnIgPSAoc3RydWN0IHZtb3VudCAqKSAoKGNoYXIqKWFpeGN1cnIgKyBhaXhjdXJyLT52bXRfbGVuZ3RoKSApIHsKKworICAgICAgICBwYXRoID0gdm10MmRhdGFwdHIoIGFpeGN1cnIsIFZNVF9TVFVCICk7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9mc3lzX2J5X3BhdGgoIHBhdGgsIE5FVFNOTVBfRlNfRklORF9DUkVBVEUgKTsKKyAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzdHJsY3B5KGVudHJ5LT5wYXRoLCBwYXRoLCBzaXplb2YoZW50cnktPnBhdGgpKTsKKyAgICAgICAgc3RybGNweShlbnRyeS0+ZGV2aWNlLCB2bXQyZGF0YXB0cihhaXhjdXJyLCBWTVRfT0JKRUNUKSwKKyAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmRldmljZSkpOworICAgICAgICBlbnRyeS0+dHlwZSAgID0gX2ZzeXNfdHlwZSggYWl4Y3Vyci0+dm10X2dmc3R5cGUgKTsKKworICAgICAgICBpZiAoIShlbnRyeS0+dHlwZSAmIF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQpKQorICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19BQ1RJVkU7CisKKyAgICAgICAgaWYgKCBfZnN5c19yZW1vdGUoIGVudHJ5LT5kZXZpY2UsIGVudHJ5LT50eXBlLCB2bXQyZGF0YXB0ciggYWl4Y3VyciwgVk1UX0hPU1QpICkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JFTU9URTsKKyAgICAgICAgaWYgKCBhaXhjdXJyLT52bXRfZmxhZ3MgJiBNTlRfUkVBRE9OTFkgKQorICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19ST05MWTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRoZSByb290IGRldmljZSBpcyBwcmVzdW1hYmx5IGJvb3RhYmxlLgorICAgICAgICAgKiAgT3RoZXIgcGFydGl0aW9ucyBwcm9iYWJseSBhcmVuJ3QhCisgICAgICAgICAqLworICAgICAgICBpZiAoKGVudHJ5LT5wYXRoWzBdID09ICcvJykgJiYgKGVudHJ5LT5wYXRoWzFdID09ICdcMCcpKQorICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19CT09UQUJMRTsKKworICAgICAgICAvKgorICAgICAgICAgKiAgWFhYIC0gaWRlbnRpZnkgcmVtb3ZlYWJsZSBkaXNrcworICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiAgT3B0aW9uYWxseSBza2lwIHJldHJpZXZpbmcgc3RhdGlzdGljcyBmb3IgcmVtb3RlIG1vdW50cworICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAoZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JFTU9URSkgJiYKKyAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9TS0lQTkZTSU5IT1NUUkVTT1VSQ0VTKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggc3RhdGZzKCBlbnRyeS0+cGF0aCwgJnN0YXRfYnVmICkgPCAwICkgeworICAgICAgICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW5ub3Qgc3RhdGZzICVzIiwgZW50cnktPnBhdGggKTsKKyAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvciggdG1wYnVmICk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbnRyeS0+dW5pdHMgPSAgc3RhdF9idWYuZl9ic2l6ZTsKKyAgICAgICAgZW50cnktPnNpemUgID0gIHN0YXRfYnVmLmZfYmxvY2tzOworICAgICAgICBlbnRyeS0+dXNlZCAgPSAoc3RhdF9idWYuZl9ibG9ja3MgLSBzdGF0X2J1Zi5mX2JmcmVlKTsKKyAgICAgICAgZW50cnktPmF2YWlsID0gIHN0YXRfYnVmLmZfYmF2YWlsOworICAgICAgICBlbnRyeS0+aW51bXNfdG90YWwgPSBzdGF0X2J1Zi5mX2ZpbGVzOworICAgICAgICBlbnRyeS0+aW51bXNfYXZhaWwgPSBzdGF0X2J1Zi5mX2ZmcmVlOworICAgICAgICBuZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIoZW50cnkpOworICAgIH0KKyAgICBmcmVlKGFpeG1udCk7CisgICAgYWl4bW50ICA9IE5VTEw7CisgICAgYWl4Y3VyciA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQyM2RiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jCkBAIC0wLDAgKzEsMjYyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9NTlRFTlRfSAorI2luY2x1ZGUgPG1udGVudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU5UVEFCX0gKKyNpbmNsdWRlIDxzeXMvbW50dGFiLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19WRlNfSAorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorCisjaWZkZWYgc29sYXJpczIKKyNkZWZpbmUgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTIDEKKyNlbHNlCisjdW5kZWYgIF9ORVRTTk1QX0dFVE1OVEVOVF9UV09fQVJHUyAKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBIYW5kbGUgbmFtaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZ2V0bW50ZW50KCkgQVBJcworICAgICAqLworI2lmZGVmIF9ORVRTTk1QX0dFVE1OVEVOVF9UV09fQVJHUworICAgIC8qIFR3by1hcmd1bWVudCBmb3JtIChTb2xhcmlzKSAqLworI2RlZmluZSBOU0ZTX01OVEVOVCAgIHN0cnVjdCBtbnR0YWIKKyNkZWZpbmUgTlNGU19QQVRIICAgICBtbnRfbW91bnRwCisjZGVmaW5lIE5TRlNfREVWICAgICAgbW50X3NwZWNpYWwKKyNkZWZpbmUgTlNGU19UWVBFICAgICBtbnRfZnN0eXBlCisKKyNkZWZpbmUgTlNGU19TVEFURlMgICBzdGF0dmZzCisjZGVmaW5lIE5TRlNfU0laRSAgICAgZl9mcnNpemUKKworI2Vsc2UKKyAgICAvKiBPbmUtYXJndW1lbnQgZm9ybSAoZXZlcnl0aGluZyBlbHNlPykgKi8KKyNkZWZpbmUgTlNGU19NTlRFTlQgICBzdHJ1Y3QgbW50ZW50CisjZGVmaW5lIE5TRlNfUEFUSCAgICAgbW50X2RpcgorI2RlZmluZSBOU0ZTX0RFViAgICAgIG1udF9mc25hbWUKKyNkZWZpbmUgTlNGU19UWVBFICAgICBtbnRfdHlwZQorCisjZGVmaW5lIE5TRlNfU1RBVEZTICAgc3RhdGZzCisjZGVmaW5lIE5TRlNfU0laRSAgICAgZl9ic2l6ZQorCisjZW5kaWYKKworaW50CitfZnN5c19yZW1vdGUoIGNoYXIgKmRldmljZSwgaW50IHR5cGUgKQoreworICAgIGlmICgoIHR5cGUgPT0gTkVUU05NUF9GU19UWVBFX05GUykgfHwKKyAgICAgICAgKCB0eXBlID09IE5FVFNOTVBfRlNfVFlQRV9BRlMpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitpbnQKK19mc3lzX3R5cGUoIGNoYXIgKnR5cGVuYW1lICkKK3sKKyAgICBERUJVR01TR1RMKCgiZnN5czp0eXBlIiwgIkNsYXNzaWZ5aW5nICVzXG4iLCB0eXBlbmFtZSkpOworCisgICAgaWYgKCAhdHlwZW5hbWUgfHwgKnR5cGVuYW1lPT0nXDAnICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX1VOS05PV047CisKKyNpbmNsdWRlICJtbnR0eXBlcy5oIgorCisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRkZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWTsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9VRlMpICkKKyAgICAgICByZXR1cm4gX05FVFNOTVBfRlNfVFlQRV9VRlM7ICAgLyogZWl0aGVyIE5fRlNfVFlQRV9CRVJLRUxFWSBvciBOX0ZTX1RZUEVfU1lTViAqLworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1NZU1YpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX1NZU1Y7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfUEMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTVNET1MpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0ZBVDsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9IRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0hGUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9NRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX01GUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9OVEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9OVEZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0lTTzk2NjApIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQ0Q5NjYwKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JU085NjYwOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0NERlMpICkKKyAgICAgICByZXR1cm4gX05FVFNOTVBfRlNfVFlQRV9DREZTOyAgIC8qIGVpdGhlciBOX0ZTX1RZUEVfSVNPOTY2MCBvciBOX0ZTX1RZUEVfUk9DS1JJREdFICovCisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfSFNGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfUk9DS1JJREdFOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05GUykgIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTkZTMykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9ORlM0KSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0NJRlMpIHx8ICAvKiBpLmUuIFNNQiAtID8/ICovCisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfU01CRlMpICAgIC8qID8/ICovICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX05GUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9OQ1BGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkVUV0FSRTsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9BRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0FGUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUNCkgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQyRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUM0ZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDRGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfRVhUMjsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9GQVQzMikgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9WRkFUKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9GQVQzMjsKKworICAgIC8qCisgICAgICogIFRoZSBmb2xsb3dpbmcgY29kZSBjb3ZlcnMgc2VsZWN0ZWQgZmlsZXN5c3RlbXMKKyAgICAgKiAgICB3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIEhSLVRZUEVTIGVudW1lcmF0aW9ucywKKyAgICAgKiAgICBidXQgc2hvdWxkIHN0aWxsIGJlIG1vbml0b3JlZC4KKyAgICAgKiAgVGhlc2UgYXJlIGFsbCBtYXBwZWQgaW50byB0eXBlICJvdGhlciIKKyAgICAgKgorICAgICAqICAgIChUaGUgc3lzdGVtcyBsaXN0ZWQgYXJlIG5vdCBmaXhlZCBpbiBzdG9uZSwKKyAgICAgKiAgICAgYnV0IGFyZSBzaW1wbHkgaGVyZSB0byBpbGx1c3RyYXRlIHRoZSBwcmluY2lwbGUhKQorICAgICAqLyAgICAKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9NVkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1RNUEZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0dGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9HRlMyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1hGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9KRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfVlhGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9SRUlTRVJGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9PQ0ZTMikgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9DVkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1NJTUZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0JUUkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1pGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9BQ0ZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0xPRlMpKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfT1RIRVI7CisKKyAgICAvKiAgICAKKyAgICAgKiAgQWxsIG90aGVyIHR5cGVzIGFyZSBzaWxlbnRseSBza2lwcGVkCisgICAgICovCisgICAgZWxzZQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSUdOT1JFOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKQoreworICAgIEZJTEUgICAgICAgICAgICAgICpmcD1OVUxMOworI2lmZGVmIF9ORVRTTk1QX0dFVE1OVEVOVF9UV09fQVJHUworICAgIHN0cnVjdCBtbnR0YWIgICAgICBtdG1wOworICAgIHN0cnVjdCBtbnR0YWIgICAgICptID0gJm10bXA7CisjZWxzZQorICAgIHN0cnVjdCBtbnRlbnQgICAgICptOworI2VuZGlmCisgICAgc3RydWN0IE5TRlNfU1RBVEZTIHN0YXRfYnVmOworICAgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKyAgICBjaGFyICAgICAgICAgICAgICAgdG1wYnVmWzEwMjRdOworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IG1vdW50ZWQgZmlsZXN5c3RlbXMuLi4KKyAgICAgKi8KKyAgICBmcCA9IGZvcGVuKCBFVENfTU5UVEFCLCAiciIgKTsgICAvKiBPUiBzZXRtbnRlbnQoKT8/ICovCisgICAgaWYgKCAhZnAgKSB7CisgICAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2Fubm90IG9wZW4gJXMiLCBFVENfTU5UVEFCICk7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggdG1wYnVmICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgaW5zZXJ0IHRoaXMgaW50byB0aGUgZmlsZXN5c3RlbSBjb250YWluZXIuCisgICAgICovCisgICAgd2hpbGUgCisjaWZkZWYgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTCisgICAgICAgICAgKChnZXRtbnRlbnQoZnAsIG0pKSA9PSAwICkKKyNlbHNlCisgICAgICAgICAgKChtID0gZ2V0bW50ZW50KGZwKSkgIT0gTlVMTCApCisjZW5kaWYKKyAgICB7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9mc3lzX2J5X3BhdGgoIG0tPk5TRlNfUEFUSCwgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmxjcHkoZW50cnktPnBhdGgsIG0tPk5TRlNfUEFUSCwgc2l6ZW9mKGVudHJ5LT5wYXRoKSk7CisgICAgICAgIHN0cmxjcHkoZW50cnktPmRldmljZSwgbS0+TlNGU19ERVYsIHNpemVvZihlbnRyeS0+ZGV2aWNlKSk7CisgICAgICAgIGVudHJ5LT50eXBlID0gX2ZzeXNfdHlwZShtLT5OU0ZTX1RZUEUpOworICAgICAgICBpZiAoIShlbnRyeS0+dHlwZSAmIF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQpKQorICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19BQ1RJVkU7CisKKyAgICAgICAgaWYgKCBfZnN5c19yZW1vdGUoIGVudHJ5LT5kZXZpY2UsIGVudHJ5LT50eXBlICkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JFTU9URTsKKyNpZiBIQVZFX0hBU01OVE9QVAorICAgICAgICBpZiAoaGFzbW50b3B0KCBtLCAicm8iICkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JPTkxZOworI2VuZGlmCisgICAgICAgIC8qCisgICAgICAgICAqICBUaGUgcm9vdCBkZXZpY2UgaXMgcHJlc3VtYWJseSBib290YWJsZS4KKyAgICAgICAgICogIE90aGVyIHBhcnRpdGlvbnMgcHJvYmFibHkgYXJlbid0IQorICAgICAgICAgKgorICAgICAgICAgKiAgWFhYIC0gd2hhdCBhYm91dCAvYm9vdCA/PworICAgICAgICAgKi8KKyAgICAgICAgaWYgKChlbnRyeS0+cGF0aFswXSA9PSAnLycpICYmCisgICAgICAgICAgICAoZW50cnktPnBhdGhbMV0gPT0gJ1wwJykpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFOworCisgICAgICAgIC8qCisgICAgICAgICAqICBYWFggLSBpZGVudGlmeSByZW1vdmVhYmxlIGRpc2tzCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICBPcHRpb25hbGx5IHNraXAgcmV0cmlldmluZyBzdGF0aXN0aWNzIGZvciByZW1vdGUgbW91bnRzCisgICAgICAgICAqLworICAgICAgICBpZiAoIChlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFKSAmJgorICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyNpZmRlZiBpcml4NgorICAgICAgICBpZiAoIE5TRlNfU1RBVEZTKCBlbnRyeS0+cGF0aCwgJnN0YXRfYnVmLCBzaXplb2Yoc3RydWN0IHN0YXRmcyksIDApIDwgMCApCisjZWxzZQorICAgICAgICBpZiAoIE5TRlNfU1RBVEZTKCBlbnRyeS0+cGF0aCwgJnN0YXRfYnVmICkgPCAwICkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbm5vdCBzdGF0ZnMgJXMiLCBlbnRyeS0+cGF0aCApOworICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCB0bXBidWYgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVudHJ5LT51bml0cyA9ICBzdGF0X2J1Zi5OU0ZTX1NJWkU7CisgICAgICAgIGVudHJ5LT5zaXplICA9ICBzdGF0X2J1Zi5mX2Jsb2NrczsKKyAgICAgICAgZW50cnktPnVzZWQgID0gKHN0YXRfYnVmLmZfYmxvY2tzIC0gc3RhdF9idWYuZl9iZnJlZSk7CisgICAgICAgIC8qIGVudHJ5LT5hdmFpbCBpcyBjdXJyZW50bHkgdW5zaWduZWQsIHNvIHByb3RlY3QgYWdhaW5zdCBuZWdhdGl2ZQorICAgICAgICAgKiB2YWx1ZXMhCisgICAgICAgICAqIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBzaWduZWQgZmllbGQuCisgICAgICAgICAqLworICAgICAgICBpZiAoc3RhdF9idWYuZl9iYXZhaWwgPCAwKQorICAgICAgICAgICAgZW50cnktPmF2YWlsID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPmF2YWlsID0gIHN0YXRfYnVmLmZfYmF2YWlsOworICAgICAgICBlbnRyeS0+aW51bXNfdG90YWwgPSBzdGF0X2J1Zi5mX2ZpbGVzOworICAgICAgICBlbnRyeS0+aW51bXNfYXZhaWwgPSBzdGF0X2J1Zi5mX2ZmcmVlOworICAgICAgICBuZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIoZW50cnkpOworICAgIH0KKyAgICBmY2xvc2UoIGZwICk7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfdm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfdm9pZC5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCitpbnQKK19mc3lzX3JlbW90ZSggY2hhciAqZGV2aWNlLCBpbnQgdHlwZSApCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX2ZzeXNfdHlwZSggY2hhciAqdHlwZW5hbWUgKQoreworICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTjsKK30KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggdm9pZCApCit7IH0KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfbG9hZCggdm9pZCApCit7IH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjZDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jCkBAIC0wLDAgKzEsMzQ5IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGh3X2ZzeXNfZ2V0X2NvbnRhaW5lciwgbmV0c25tcF91bnVzZWQpCisKK2V4dGVybiB2b2lkICAgICAgICAgICAgIG5ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKTsKK2V4dGVybiB2b2lkICAgICAgICAgICAgIG5ldHNubXBfZnN5c19hcmNoX2luaXQoIHZvaWQgKTsKK3N0YXRpYyBpbnQgIF9mc3lzX2xvYWQoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIF9mc3lzX2ZyZWUoIHZvaWQgKTsKKworc3RhdGljIGludCBfZnN5c0F1dG9VcGRhdGUgPSAwOyAgIC8qIDAgbWVhbnMgb24tZGVtYW5kIGNhY2hpbmcgKi8KK3N0YXRpYyB2b2lkIF9mc3lzX3VwZGF0ZV9zdGF0cyggdW5zaWduZWQgaW50LCB2b2lkKiApOworCituZXRzbm1wX2NhY2hlICAgICAqX2ZzeXNfY2FjaGUgICAgID0gTlVMTDsKK25ldHNubXBfY29udGFpbmVyICpfZnN5c19jb250YWluZXIgPSBOVUxMOworc3RhdGljIGludCAgICAgICAgIF9mc3lzX2lkeCAgICAgICA9IDA7CitzdGF0aWMgbmV0c25tcF9mc3lzX2luZm8gKiBfZnN5c19jcmVhdGVfZW50cnkoIHZvaWQgKTsKKwordm9pZCBpbml0X2h3X2ZzeXMoIHZvaWQgKSB7CisKKyAgICBpZiAoIF9mc3lzX2NvbnRhaW5lciApCisgICAgICAgIHJldHVybjsgICAvKiBBbHJlYWR5IGluaXRpYWxpc2VkICovCisKKyAgICBERUJVR01TR1RMKCgiZnN5cyIsICJJbml0aWFsaXNlIEhhcmR3YXJlIEZpbGVTeXN0ZW0gbW9kdWxlXG4iKSk7CisKKyAgICAvKgorICAgICAqIERlZmluZSBhIGNvbnRhaW5lciB0byBob2xkIHRoZSBsaXN0IG9mIGZpbGVzeXN0ZW1zCisgICAgICovCisgICAgX2ZzeXNfY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZnN5c1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmICggTlVMTCA9PSBfZnN5c19jb250YWluZXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiZmFpbGVkIHRvIGNyZWF0ZSBjb250YWluZXIgZm9yIGZzeXNUYWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHNubXBfZnN5c19hcmNoX2luaXQoICk7CisKKyAgICAvKgorICAgICAqIElmIHdlJ3JlIHNhbXBsaW5nIHRoZSBmaWxlIHN5c3RlbSBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LAorICAgICAqICAgdGhlbiBhcnJhbmdlIGZvciB0aGlzIHRvIGJlIHRyaWdnZXJlZCByZWd1bGFybHkuCisgICAgICoKKyAgICAgKiBJZiB3ZSdyZSBub3Qgc2FtcGxpbmcgdGhlc2UgdmFsdWVzIHJlZ3VsYXJseSwKKyAgICAgKiAgIGNyZWF0ZSBhIHN1aXRhYmxlIGNhY2hlIGhhbmRsZXIgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBpZiAoIF9mc3lzQXV0b1VwZGF0ZSApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImZzeXMiLCAiUmVsb2FkaW5nIEhhcmR3YXJlIEZpbGVTeXN0ZW1zIGF1dG9tYXRpY2FsbHkgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnN5c0F1dG9VcGRhdGUpKTsKKyAgICAgICAgc25tcF9hbGFybV9yZWdpc3RlciggX2ZzeXNBdXRvVXBkYXRlLCBTQV9SRVBFQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mc3lzX3VwZGF0ZV9zdGF0cywgTlVMTCApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgX2ZzeXNfY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSggNSwgbmV0c25tcF9mc3lzX2xvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnN5c19mcmVlLCBOVUxMLCAwICk7CisgICAgICAgIERFQlVHTVNHVEwoKCJmc3lzIiwgIlJlbG9hZGluZyBIYXJkd2FyZSBGaWxlU3lzdGVtcyBvbi1kZW1hbmQgKCVwKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnN5c19jYWNoZSkpOworICAgIH0KK30KKwordm9pZCBzaHV0ZG93bl9od19mc3lzKCB2b2lkICkgeworICAgIF9mc3lzX2ZyZWUoKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hXX0ZTWVNfR0VUX0NPTlRBSU5FUgorLyoKKyAqICBSZXR1cm4gdGhlIG1haW4gZnN5cyBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfZnN5c19nZXRfY29udGFpbmVyKCB2b2lkICkgeyByZXR1cm4gX2ZzeXNfY29udGFpbmVyOyB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IV19GU1lTX0dFVF9DT05UQUlORVIgKi8KKworLyoKKyAqICBSZXR1cm4gdGhlIG1haW4gZnN5cyBjYWNoZSBjb250cm9sIHN0cnVjdHVyZSAoaWYgZGVmaW5lZCkKKyAqLworbmV0c25tcF9jYWNoZSAqbmV0c25tcF9mc3lzX2dldF9jYWNoZSggdm9pZCApIHsgcmV0dXJuIF9mc3lzX2NhY2hlOyB9CisKKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgYXV0b21hdGljYWxseSB1cGRhdGluZyBmc3lzIGluZm9ybWF0aW9uCisgKi8KK3ZvaWQKK19mc3lzX3VwZGF0ZV9zdGF0cyggdW5zaWduZWQgaW50IGNsaWVudHJlZywgdm9pZCAqZGF0YSApCit7CisgICAgX2ZzeXNfZnJlZSgpOworICAgIF9mc3lzX2xvYWQoKTsKK30KKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgcmUtbG9hZGluZyBmaWxlc3lzdGVtIHN0YXRpc3RpY3Mgb24gZGVtYW5kCisgKi8KK2ludAorbmV0c25tcF9mc3lzX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICkKK3sKKyAgICAvKiBYWFggLSBjaGVjayBjYWNoZSB0aW1lbGluZXNzICovCisgICAgcmV0dXJuIF9mc3lzX2xvYWQoKTsKK30KKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgcmVsZWFzaW5nIGV4cGlyZWQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCisgKi8KK3ZvaWQKK25ldHNubXBfZnN5c19mcmVlKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqZGF0YSApCit7CisgICAgX2ZzeXNfZnJlZSgpOworfQorCisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcHJvY2Vzc2luZyBvZiBsb2FkaW5nIGZpbGVzeXN0ZW0gc3RhdGlzdGljcworICovCitzdGF0aWMgaW50CitfZnN5c19sb2FkKCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX2ZzeXNfYXJjaF9sb2FkKCk7CisgICAgLyogWFhYIC0gdXBkYXRlIGNhY2hlIHRpbWVzdGFtcCAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogQXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IHJlbGVhc2Ugb2YgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyB2b2lkCitfZnN5c19mcmVlKCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX2ZzeXNfaW5mbyAqc3A7CisKKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfZnN5c19jb250YWluZXIgKTsKKyAgICAgICAgIHNwOworICAgICAgICAgc3AgPSBDT05UQUlORVJfTkVYVCggIF9mc3lzX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgICBzcC0+ZmxhZ3MgJj0gfk5FVFNOTVBfRlNfRkxBR19BQ1RJVkU7CisgICAgfQorfQorCisKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfZ2V0X2ZpcnN0KCB2b2lkICkgeworICAgIHJldHVybiBDT05UQUlORVJfRklSU1QoIF9mc3lzX2NvbnRhaW5lciApOworfQorbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfbmV4dCggbmV0c25tcF9mc3lzX2luZm8gKnRoaXNfcHRyICkgeworICAgIHJldHVybiBDT05UQUlORVJfTkVYVCggX2ZzeXNfY29udGFpbmVyLCB0aGlzX3B0ciApOworfQorCisvKgorICogUmV0cmlldmUgYSBmaWxlc3lzdGVtIGVudHJ5IGJhc2VkIG9uIHRoZSBwYXRoIHdoZXJlIGl0IGlzIG1vdW50ZWQsCisgKiAgb3IgKG9wdGlvbmFsbHkpIGluc2VydCBhIG5ldyBvbmUgaW50byB0aGUgY29udGFpbmVyCisgKi8KK25ldHNubXBfZnN5c19pbmZvICoKK25ldHNubXBfZnN5c19ieV9wYXRoKCBjaGFyICpwYXRoLCBpbnQgY3JlYXRlX3R5cGUgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIERFQlVHTVNHVEwoKCJmc3lzOnBhdGgiLCAiR2V0IGZpbGVzeXN0ZW0gZW50cnkgKCVzKVxuIiwgcGF0aCkpOworCisgICAgLyoKKyAgICAgKiAgTG9vayB0aHJvdWdoIHRoZSBsaXN0IGZvciBhIG1hdGNoaW5nIGVudHJ5CisgICAgICovCisgICAgICAgIC8qIC4uIG9yIHVzZSBhIHNlY29uZGFyeSBpbmRleCBjb250YWluZXIgPz8gKi8KKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfZnN5c19jb250YWluZXIgKTsKKyAgICAgICAgIHNwOworICAgICAgICAgc3AgPSBDT05UQUlORVJfTkVYVCggIF9mc3lzX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgIGlmICggIXN0cmNtcCggcGF0aCwgc3AtPnBhdGggKSkKKyAgICAgICAgICAgIHJldHVybiBzcDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdCBmb3VuZC4uLgorICAgICAqLworICAgIGlmICggY3JlYXRlX3R5cGUgPT0gTkVUU05NUF9GU19GSU5EX0VYSVNUICkgeworICAgICAgICBERUJVR01TR1RMKCgiZnN5czpwYXRoIiwgIk5vIHN1Y2ggZmlsZXN5c3RlbSBlbnRyeVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIC4uLiBzbyBsZXQncyBjcmVhdGUgYSBuZXcgb25lCisgICAgICovCisgICAgc3AgPSBfZnN5c19jcmVhdGVfZW50cnkoKTsKKyAgICBpZiAoc3ApCisgICAgICAgIHN0cmxjcHkoc3AtPnBhdGgsIHBhdGgsIHNpemVvZihzcC0+cGF0aCkpOworICAgIHJldHVybiBzcDsKK30KKworCisvKgorICogUmV0cmlldmUgYSBmaWxlc3lzdGVtIGVudHJ5IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBkZXZpY2UsCisgKiAgIChvciBleHBvcnRlZCBwYXRoIGZvciByZW1vdGUgbW91bnRzKS4KKyAqIChPcHRpb25hbGx5KSBpbnNlcnQgYSBuZXcgb25lIGludG8gdGhlIGNvbnRhaW5lci4KKyAqLworbmV0c25tcF9mc3lzX2luZm8gKgorbmV0c25tcF9mc3lzX2J5X2RldmljZSggY2hhciAqZGV2aWNlLCBpbnQgY3JlYXRlX3R5cGUgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIERFQlVHTVNHVEwoKCJmc3lzOmRldmljZSIsICJHZXQgZmlsZXN5c3RlbSBlbnRyeSAoJXMpXG4iLCBkZXZpY2UpKTsKKworICAgIC8qCisgICAgICogIExvb2sgdGhyb3VnaCB0aGUgbGlzdCBmb3IgYSBtYXRjaGluZyBlbnRyeQorICAgICAqLworICAgICAgICAvKiAuLiBvciB1c2UgYSBzZWNvbmRhcnkgaW5kZXggY29udGFpbmVyID8/ICovCisgICAgZm9yIChzcCA9IENPTlRBSU5FUl9GSVJTVCggX2ZzeXNfY29udGFpbmVyICk7CisgICAgICAgICBzcDsKKyAgICAgICAgIHNwID0gQ09OVEFJTkVSX05FWFQoICBfZnN5c19jb250YWluZXIsIHNwICkpIHsKKworICAgICAgICBpZiAoICFzdHJjbXAoIGRldmljZSwgc3AtPmRldmljZSApKQorICAgICAgICAgICAgcmV0dXJuIHNwOworICAgIH0KKworICAgIC8qCisgICAgICogTm90IGZvdW5kLi4uCisgICAgICovCisgICAgaWYgKCBjcmVhdGVfdHlwZSA9PSBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJmc3lzOmRldmljZSIsICJObyBzdWNoIGZpbGVzeXN0ZW0gZW50cnlcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAuLi4gc28gbGV0J3MgY3JlYXRlIGEgbmV3IG9uZQorICAgICAqLworICAgIHNwID0gX2ZzeXNfY3JlYXRlX2VudHJ5KCk7CisgICAgaWYgKHNwKQorICAgICAgICBzdHJsY3B5KHNwLT5kZXZpY2UsIGRldmljZSwgc2l6ZW9mKHNwLT5kZXZpY2UpKTsKKyAgICByZXR1cm4gc3A7Cit9CisKKworbmV0c25tcF9mc3lzX2luZm8gKgorX2ZzeXNfY3JlYXRlX2VudHJ5KCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX2ZzeXNfaW5mbyAqc3A7CisKKyAgICBzcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfZnN5c19pbmZvICk7CisgICAgaWYgKCBzcCApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2V0IHVwIHRoZSBpbmRleCB2YWx1ZS4KKyAgICAgICAgICogIAorICAgICAgICAgKiBBbGwgdGhpcyB0cm91YmxlLCBqdXN0IGZvciBhIHNpbXBsZSBpbnRlZ2VyLgorICAgICAgICAgKiBTdXJlbHkgdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXk/CisgICAgICAgICAqLworICAgICAgICBzcC0+aWR4LmxlbiAgPSAxOworICAgICAgICBzcC0+aWR4Lm9pZHMgPSBTTk1QX01BTExPQ19UWVBFREVGKCBvaWQgKTsKKyAgICAgICAgc3AtPmlkeC5vaWRzWzBdID0gKytfZnN5c19pZHg7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImZzeXM6bmV3IiwgIkNyZWF0ZSBmaWxlc3lzdGVtIGVudHJ5IChpbmRleCA9ICVkKVxuIiwgX2ZzeXNfaWR4KSk7CisgICAgQ09OVEFJTkVSX0lOU0VSVCggX2ZzeXNfY29udGFpbmVyLCBzcCApOworICAgIHJldHVybiBzcDsKK30KKworCisvKgorICogIENvbnZlcnQgZnN5cyBzaXplIGluZm9ybWF0aW9uIHRvIDFLIHVuaXRzCisgKiAgICAoYXR0ZW1wdGluZyB0byBhdm9pZCAzMi1iaXQgb3ZlcmZsb3chKQorICovCit1bnNpZ25lZCBsb25nIGxvbmcKK19mc3lzX3RvX0soIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgdW5pdHMgKQoreworICAgIGludCBmYWN0b3IgPSAxOworCisgICAgaWYgKCB1bml0cyA9PSAwICkgeworICAgICAgICByZXR1cm4gMDsgICAgLyogWFhYICovCisgICAgfSBlbHNlIGlmICggdW5pdHMgPT0gMTAyNCApIHsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfSBlbHNlIGlmICggdW5pdHMgPT0gNTEyICkgeyAgICAgIC8qIFRvIGF2b2lkIHVubmVjZXNzYXJ5IGRpdmlzaW9uICovCisgICAgICAgIHJldHVybiBzaXplLzI7CisgICAgfSBlbHNlIGlmICggdW5pdHMgPCAxMDI0ICkgeworICAgICAgICBmYWN0b3IgPSAxMDI0IC8gdW5pdHM7ICAgLyogQXNzdW1pbmcgcG93ZXIgb2YgdHdvICovCisgICAgICAgIHJldHVybiAoc2l6ZSAvIGZhY3Rvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yID0gdW5pdHMgLyAxMDI0OyAgIC8qIEFzc3VtaW5nIG11bHRpcGxlIG9mIDFLICovCisgICAgICAgIHJldHVybiAoc2l6ZSAqIGZhY3Rvcik7CisgICAgfQorfQorCit1bnNpZ25lZCBsb25nIGxvbmcKK25ldHNubXBfZnN5c19zaXplX3VsbCggbmV0c25tcF9mc3lzX2luZm8gKmYpIHsKKyAgICBpZiAoICFmICkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIF9mc3lzX3RvX0soIGYtPnNpemUsIGYtPnVuaXRzICk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZworbmV0c25tcF9mc3lzX3VzZWRfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIGlmICggIWYgKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gX2ZzeXNfdG9fSyggZi0+dXNlZCwgZi0+dW5pdHMgKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nCituZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIGlmICggIWYgKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gX2ZzeXNfdG9fSyggZi0+YXZhaWwsIGYtPnVuaXRzICk7Cit9CisKKworaW50CituZXRzbm1wX2ZzeXNfc2l6ZSggbmV0c25tcF9mc3lzX2luZm8gKmYpIHsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdiA9IG5ldHNubXBfZnN5c19zaXplX3VsbChmKTsKKyAgICByZXR1cm4gKGludCl2OworfQorCitpbnQKK25ldHNubXBfZnN5c191c2VkKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gbmV0c25tcF9mc3lzX3VzZWRfdWxsKGYpOworICAgIHJldHVybiAoaW50KXY7Cit9CisKK2ludAorbmV0c25tcF9mc3lzX2F2YWlsKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChmKTsKKyAgICByZXR1cm4gKGludCl2OworfQorCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggMHg3ZmZmZmZmZgorI2VuZGlmCisKKyNpZm5kZWYgUFJJdTY0CisjZGVmaW5lIFBSSXU2NCAibGx1IgorI2VuZGlmCisKKy8qIHJlY2FsY3VsYXRlIGYtPnNpemVfMzIsIHVzZWRfMzIsIGF2YWlsXzMyIGFuZCB1bml0c18zMiBmcm9tIGYtPnNpemUgJiBjb21wLiovCit2b2lkCituZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIobmV0c25tcF9mc3lzX2luZm8gKmYpCit7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHMgPSBmLT5zaXplOworICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKKworICAgIHdoaWxlIChzID4gSU5UMzJfTUFYKSB7CisgICAgICAgIHMgPSBzID4+IDE7CisgICAgICAgIHNoaWZ0Kys7CisgICAgfQorCisgICAgZi0+c2l6ZV8zMiA9IHM7CisgICAgZi0+dW5pdHNfMzIgPSBmLT51bml0cyA8PCBzaGlmdDsKKyAgICBmLT5hdmFpbF8zMiA9IGYtPmF2YWlsID4+IHNoaWZ0OworICAgIGYtPnVzZWRfMzIgPSBmLT51c2VkID4+IHNoaWZ0OworCisgICAgREVCVUdNU0dUTCgoImZzeXMiLCAiUmVzdWx0cyBvZiAzMi1iaXQgY29udmVyc2lvbjogc2l6ZSAlIiBQUkl1NjQgIiAtPiAlbHU7IgorCQkiIHVuaXRzICUiIFBSSXU2NCAiIC0+ICVsdTsgYXZhaWwgJSIgUFJJdTY0ICIgLT4gJWx1OyIKKyAgICAgICAgICAgICAgICAiIHVzZWQgJSIgUFJJdTY0ICIgLT4gJWx1XG4iLAorCQkodWludDY0X3QpZi0+c2l6ZSwgZi0+c2l6ZV8zMiwgKHVpbnQ2NF90KWYtPnVuaXRzLCBmLT51bml0c18zMiwKKwkJKHVpbnQ2NF90KWYtPmF2YWlsLCBmLT5hdmFpbF8zMiwgKHVpbnQ2NF90KWYtPnVzZWQsIGYtPnVzZWRfMzIpKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmOTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oCkBAIC0wLDAgKzEsMiBAQAordm9pZCBpbml0X2h3X2ZzeXModm9pZCk7Cit2b2lkIHNodXRkb3duX2h3X2ZzeXMoIHZvaWQgKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2VkNGZiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oCkBAIC0wLDAgKzEsMTg3IEBACisjaWZuZGVmIF9ORVRTTk1QX0ZTWVNfTU5UVFlQRVNfSAorI2RlZmluZSBfTkVUU05NUF9GU1lTX01OVFRZUEVTX0gKKy8qCisgKiAgU29tZSBtb3VudHMgY2FuIG1hcCB0byBvbmUgb2YgdHdvIGhyRlMgdHlwZXMKKyAqICAgIChkZXBlbmRpbmcgb24gb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzeXN0ZW0pCisgKiAgTm90ZSB3aGljaCBzaG91bGQgYmUgdXNlZCAqYmVmb3JlKiBkZWZpbmluZyBhbnkKKyAqICAgIHR5cGUgdG9rZW5zIHdoaWNoIG1heSBiZSBtaXNzaW5nLgorICovCisKKyNpZiAoZGVmaW5lZChCZXJrZWx5RlMpICYmICFkZWZpbmVkKE1OVFRZUEVfSEZTKSkgfHwgZGVmaW5lZChzb2xhcmlzMikKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfQkVSS0VMRVkKKyNlbHNlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX1VGUyAgTkVUU05NUF9GU19UWVBFX1NZU1YKKyNlbmRpZgorCisjaWZkZWYgUm9ja1JpZGdlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX0NERlMgIE5FVFNOTVBfRlNfVFlQRV9ST0NLUklER0UKKyNlbHNlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX0NERlMgIE5FVFNOTVBfRlNfVFlQRV9JU085NjYwCisjZW5kaWYKKworCisvKgorICogIEVuc3VyZSBhbGwgcmVjb2duaXNlZCBmaWxlc3lzdGVtIG1vdW50IHR5cGUgdG9rZW5zIGFyZQorICogICAgYXZhaWxhYmxlIChldmVuIG9uIHN5c3RlbXMgd2hlcmUgdGhleSdyZSBub3QgdXNlZCkKKyAqLworI2lmbmRlZiBNTlRUWVBFX0FGUworI2RlZmluZSBNTlRUWVBFX0FGUyAgICAgICJhZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DREZTCisjZGVmaW5lIE1OVFRZUEVfQ0RGUyAgICAgImNkZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DRDk2NjAKKyNkZWZpbmUgTU5UVFlQRV9DRDk2NjAgICAiY2Q5NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMgorI2RlZmluZSBNTlRUWVBFX0VYVDIgICAgICJleHQyIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMworI2RlZmluZSBNTlRUWVBFX0VYVDMgICAgICJleHQzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUNAorI2RlZmluZSBNTlRUWVBFX0VYVDQgICAgICJleHQ0IgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMkZTCisjZGVmaW5lIE1OVFRZUEVfRVhUMkZTICAgImV4dDJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDNGUworI2RlZmluZSBNTlRUWVBFX0VYVDNGUyAgICJleHQzZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQ0RlMKKyNkZWZpbmUgTU5UVFlQRV9FWFQ0RlMgICAiZXh0NGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRkFUMzIKKyNkZWZpbmUgTU5UVFlQRV9GQVQzMiAgICAiZmF0MzIiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GRlMKKyNkZWZpbmUgTU5UVFlQRV9GRlMgICAgICAiZmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSEZTCisjZGVmaW5lIE1OVFRZUEVfSEZTICAgICAgImhmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0hTRlMKKyNkZWZpbmUgTU5UVFlQRV9IU0ZTICAgICAiaHNmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0lTTzk2NjAKKyNkZWZpbmUgTU5UVFlQRV9JU085NjYwICAiaXNvOTY2MCIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01GUworI2RlZmluZSBNTlRUWVBFX01GUyAgICAgICJtZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9NU0RPUworI2RlZmluZSBNTlRUWVBFX01TRE9TICAgICJtc2RvcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05DUEZTCisjZGVmaW5lIE1OVFRZUEVfTkNQRlMgICAgIm5jcGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTCisjZGVmaW5lIE1OVFRZUEVfTkZTICAgICAgIm5mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05GUzMKKyNkZWZpbmUgTU5UVFlQRV9ORlMzICAgICAibmZzMyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05GUzQKKyNkZWZpbmUgTU5UVFlQRV9ORlM0ICAgICAibmZzNCIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05URlMKKyNkZWZpbmUgTU5UVFlQRV9OVEZTICAgICAibnRmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1BDCisjZGVmaW5lIE1OVFRZUEVfUEMgICAgICAgInBjIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfU01CRlMKKyNkZWZpbmUgTU5UVFlQRV9TTUJGUyAgICAic21iZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DSUZTCisjZGVmaW5lIE1OVFRZUEVfQ0lGUyAgICAgImNpZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TWVNWCisjZGVmaW5lIE1OVFRZUEVfU1lTViAgICAgInN5c3YiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9VRlMKKyNkZWZpbmUgTU5UVFlQRV9VRlMgICAgICAidWZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVkZBVAorI2RlZmluZSBNTlRUWVBFX1ZGQVQgICAgICJ2ZmF0IgorI2VuZGlmCisKKy8qCisgKiAgRmlsZSBzeXN0ZW1zIHRvIG1vbml0b3IsIGJ1dCBub3QgY292ZXJlZCBieSBIUi1UWVBFUyBlbnVtZXJhdGlvbnMKKyAqLworI2lmbmRlZiBNTlRUWVBFX01WRlMKKyNkZWZpbmUgTU5UVFlQRV9NVkZTICAgICAibXZmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1RNUEZTCisjZGVmaW5lIE1OVFRZUEVfVE1QRlMgICAgInRtcGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfR0ZTCisjZGVmaW5lIE1OVFRZUEVfR0ZTICAgICAgImdmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0dGUzIKKyNkZWZpbmUgTU5UVFlQRV9HRlMyICAgICAiZ2ZzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1hGUworI2RlZmluZSBNTlRUWVBFX1hGUyAgICAgICJ4ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9KRlMKKyNkZWZpbmUgTU5UVFlQRV9KRlMgICAgICAiamZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVlhGUworI2RlZmluZSBNTlRUWVBFX1ZYRlMgICAgICAidnhmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1JFSVNFUkZTCisjZGVmaW5lIE1OVFRZUEVfUkVJU0VSRlMgInJlaXNlcmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTE9GUworI2RlZmluZSBNTlRUWVBFX0xPRlMgICAgICJsb2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfT0NGUzIKKyNkZWZpbmUgTU5UVFlQRV9PQ0ZTMiAgICAib2NmczIiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DVkZTCisjZGVmaW5lIE1OVFRZUEVfQ1ZGUyAgICAgImN2ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TSU1GUworI2RlZmluZSBNTlRUWVBFX1NJTUZTICAgICAic2ltZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9CVFJGUworI2RlZmluZSBNTlRUWVBFX0JUUkZTICAgICAiYnRyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9aRlMKKyNkZWZpbmUgTU5UVFlQRV9aRlMgICAgICAgInpmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0FDRlMKKyNkZWZpbmUgTU5UVFlQRV9BQ0ZTICAgICAgImFjZnMiCisjZW5kaWYKKworLyoKKyAqICBGaWxlIHN5c3RlbXMgdG8gc2tpcAorICogICAgKFByb2JhYmx5IG5vdCBzdHJpY3RseSBuZWVkZWQpCisgKi8KKyNpZm5kZWYgTU5UVFlQRV9BUFAKKyNkZWZpbmUgTU5UVFlQRV9BUFAgICAgICAiYXBwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfREVWUFRTCisjZGVmaW5lIE1OVFRZUEVfREVWUFRTICAgImRldnB0cyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0lHTk9SRQorI2RlZmluZSBNTlRUWVBFX0lHTk9SRSAgICJpZ25vcmUiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9QUk9DCisjZGVmaW5lIE1OVFRZUEVfUFJPQyAgICAgInByb2MiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TWVNGUworI2RlZmluZSBNTlRUWVBFX1NZU0ZTICAgICJzeXNmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VTQkZTCisjZGVmaW5lIE1OVFRZUEVfVVNCRlMgICAgInVzYmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfQklORk1UCisjZGVmaW5lIE1OVFRZUEVfQklORk1UICAgImJpbmZtdF9taXNjIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUlBDUElQRQorI2RlZmluZSBNTlRUWVBFX1JQQ1BJUEUgICJycGNfcGlwZWZzIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfTkVUU05NUF9GU1lTX01OVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21vdW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjY1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21vdW50cy5oCkBAIC0wLDAgKzEsMTY1IEBACisjaWZuZGVmIF9ORVRTTk1QX0ZTWVNfTU9VTlRTX0gKKyNkZWZpbmUgX05FVFNOTVBfRlNZU19NT1VOVFNfSAorLyoKKyAqICBTb21lIG1vdW50cyBjYW4gbWFwIHRvIG9uZSBvZiB0d28gaHJGUyB0eXBlcworICogICAgKGRlcGVuZGluZyBvbiBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHN5c3RlbSkKKyAqICBOb3RlIHdoaWNoIHNob3VsZCBiZSB1c2VkICpiZWZvcmUqIGRlZmluaW5nIGFueQorICogICAgdHlwZSB0b2tlbnMgd2hpY2ggbWF5IGJlIG1pc3NpbmcuCisgKi8KKworLyoKKyNpZiAoZGVmaW5lZChCZXJrZWx5RlMpICYmICFkZWZpbmVkKE1OVFRZUEVfSEZTKSkgfHwgZGVmaW5lZChzb2xhcmlzMikKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfQkVSS0VMRVkKKyNlbHNlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX1VGUyAgTkVUU05NUF9GU19UWVBFX1NZU1YKKyNlbmRpZgorCisjaWZkZWYgUm9ja1JpZGdlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX0NERlMgIE5FVFNOTVBfRlNfVFlQRV9ST0NLUklER0UKKyNlbHNlCisjZGVmaW5lICBfTkVUU05NUF9GU19UWVBFX0NERlMgIE5FVFNOTVBfRlNfVFlQRV9JU085NjYwCisjZW5kaWYKKyAqLworCisKKy8qCisgKiAgRW5zdXJlIGFsbCByZWNvZ25pc2VkIGZpbGVzeXN0ZW0gbW91bnQgdHlwZSB0b2tlbnMgYXJlCisgKiAgICBhdmFpbGFibGUgKGV2ZW4gb24gc3lzdGVtcyB3aGVyZSB0aGV5J3JlIG5vdCB1c2VkKQorICovCisjaWZuZGVmIE1PVU5UX0ZGUworI2RlZmluZSBNT1VOVF9GRlMgICAgImZmcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9ORlMKKyNkZWZpbmUgTU9VTlRfTkZTICAgICJuZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTUZTCisjZGVmaW5lIE1PVU5UX01GUyAgICAibWZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX01TRE9TCisjZGVmaW5lIE1PVU5UX01TRE9TICAibXNkb3MiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTVNET1NGUworI2RlZmluZSBNT1VOVF9NU0RPU0ZTICJtc2Rvc2ZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX0FGUworI2RlZmluZSBNT1VOVF9BRlMgICAgImFmcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9DRDk2NjAKKyNkZWZpbmUgTU9VTlRfQ0Q5NjYwICJjZDk2NjAiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfRVhUMkZTCisjZGVmaW5lIE1PVU5UX0VYVDJGUyAiZXh0MmZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX05URlMKKyNkZWZpbmUgTU9VTlRfTlRGUyAgICJudGZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX1VGUworI2RlZmluZSBNT1VOVF9VRlMgICAgInVmcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9aRlMKKyNkZWZpbmUgTU9VTlRfWkZTICAgICJ6ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfQUNGUworI2RlZmluZSBNT1VOVF9BQ0ZTICAgImFjZnMiCisjZW5kaWYKKworLyoKKyNpZm5kZWYgTU5UVFlQRV9BRlMKKyNkZWZpbmUgTU5UVFlQRV9BRlMgICAgICAiYWZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfQ0RGUworI2RlZmluZSBNTlRUWVBFX0NERlMgICAgICJjZGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfQ0Q5NjYwCisjZGVmaW5lIE1OVFRZUEVfQ0Q5NjYwICAgImNkOTY2MCIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDIKKyNkZWZpbmUgTU5UVFlQRV9FWFQyICAgICAiZXh0MiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDMKKyNkZWZpbmUgTU5UVFlQRV9FWFQzICAgICAiZXh0MyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDJGUworI2RlZmluZSBNTlRUWVBFX0VYVDJGUyAgICJleHQyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQzRlMKKyNkZWZpbmUgTU5UVFlQRV9FWFQzRlMgICAiZXh0M2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRkFUMzIKKyNkZWZpbmUgTU5UVFlQRV9GQVQzMiAgICAiZmF0MzIiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GRlMKKyNkZWZpbmUgTU5UVFlQRV9GRlMgICAgICAiZmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSEZTCisjZGVmaW5lIE1OVFRZUEVfSEZTICAgICAgImhmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0hTRlMKKyNkZWZpbmUgTU5UVFlQRV9IU0ZTICAgICAiaHNmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0lTTzk2NjAKKyNkZWZpbmUgTU5UVFlQRV9JU085NjYwICAiaXNvOTY2MCIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01GUworI2RlZmluZSBNTlRUWVBFX01GUyAgICAgICJtZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9NU0RPUworI2RlZmluZSBNTlRUWVBFX01TRE9TICAgICJtc2RvcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05DUEZTCisjZGVmaW5lIE1OVFRZUEVfTkNQRlMgICAgIm5jcGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTCisjZGVmaW5lIE1OVFRZUEVfTkZTICAgICAgIm5mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05GUzMKKyNkZWZpbmUgTU5UVFlQRV9ORlMzICAgICAibmZzMyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX05URlMKKyNkZWZpbmUgTU5UVFlQRV9OVEZTICAgICAibnRmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1BDCisjZGVmaW5lIE1OVFRZUEVfUEMgICAgICAgInBjIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUkVJU0VSRlMKKyNkZWZpbmUgTU5UVFlQRV9SRUlTRVJGUyAicmVpc2VyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TTUJGUworI2RlZmluZSBNTlRUWVBFX1NNQkZTICAgICJzbWJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU1YKKyNkZWZpbmUgTU5UVFlQRV9TWVNWICAgICAic3lzdiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VGUworI2RlZmluZSBNTlRUWVBFX1VGUyAgICAgICJ1ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9WRkFUCisjZGVmaW5lIE1OVFRZUEVfVkZBVCAgICAgInZmYXQiCisjZW5kaWYKKyovCisKKy8qCisgKiAgRmlsZSBzeXN0ZW1zIHRvIHNraXAKKyAqLworLyoKKyNpZm5kZWYgTU5UVFlQRV9ERVZQVFMKKyNkZWZpbmUgTU5UVFlQRV9ERVZQVFMgICAiZGV2cHRzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSUdOT1JFCisjZGVmaW5lIE1OVFRZUEVfSUdOT1JFICAgImlnbm9yZSIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1BST0MKKyNkZWZpbmUgTU5UVFlQRV9QUk9DICAgICAicHJvYyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU0ZTCisjZGVmaW5lIE1OVFRZUEVfU1lTRlMgICAgInN5c2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVE1QRlMKKyNkZWZpbmUgTU5UVFlQRV9UTVBGUyAgICAidG1wZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9VU0JGUworI2RlZmluZSBNTlRUWVBFX1VTQkZTICAgICJ1c2JmcyIKKyNlbmRpZgorKi8KKworI2VuZGlmIC8qIF9ORVRTTk1QX0ZTWVNfTU9VTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgKaW5kZXggYzA2NzBlNC4uN2U0ZTg4ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgKQEAgLTMsNyArMyw3IEBACiAjaWYgZGVmaW5lZChsaW51eCkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXgpCiAKLSNlbGlmIChkZWZpbmVkKGRhcndpbjcpIHx8IGRlZmluZWQoZGFyd2luOCkgfHwgZGVmaW5lZChkYXJ3aW45KSkKKyNlbGlmIChkZWZpbmVkKGRhcndpbikpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2RhcndpbikKIAogI2VsaWYgKGRlZmluZWQoZnJlZWJzZDIpIHx8IGRlZmluZWQoZnJlZWJzZDMpIHx8IGRlZmluZWQoZnJlZWJzZDQpICB8fCBkZWZpbmVkKGZyZWVic2Q1KXx8IGRlZmluZWQoZnJlZWJzZDYpKQpAQCAtMTIsNyArMTIsNyBAQAogI2VsaWYgKGRlZmluZWQobmV0YnNkKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQobmV0YnNkZWxmKSB8fCBkZWZpbmVkKG5ldGJzZGVsZjIpfHwgZGVmaW5lZChuZXRic2RlbGYzKSB8fCBkZWZpbmVkKG9wZW5ic2QpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QpCiAKLSNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkKKyNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXgpCiAKICNlbGlmIChkZWZpbmVkKHNvbGFyaXMyKSkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYwppbmRleCBiMThhOWI4Li4xZjQ0NzRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jCkBAIC0zLDE0ICszLDI3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYXJkd2FyZV9tZW1vcnksIG5ldHNubXBfdW51c2VkKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWVtb3J5X2dldF9jYWNoZSwgaGFyZHdhcmVfbWVtb3J5KQorCiBleHRlcm4gTmV0c25tcENhY2hlTG9hZCBuZXRzbm1wX21lbV9hcmNoX2xvYWQ7CiAKIG5ldHNubXBfbWVtb3J5X2luZm8gKl9tZW1faGVhZCAgPSBOVUxMOwogbmV0c25tcF9jYWNoZSAgICAgICAqX21lbV9jYWNoZSA9IE5VTEw7CiAKKyNpZmRlZiBkYXJ3aW4KKy8qIHRoZSBjb2RlIGluIG1lbW9yeV9kYXJ3aW4uYyBpcyAqdmVyeSogZXhwZW5zaXZlICovCisjZGVmaW5lCU1FTU9SWV9DQUNIRV9TRUNPTkRTCTMwMAorI2Vsc2UKKyNkZWZpbmUJTUVNT1JZX0NBQ0hFX1NFQ09ORFMJNQorI2VuZGlmCisKIHZvaWQgaW5pdF9od19tZW0oIHZvaWQgKSB7CiAgICAgb2lkIG5zTWVtb3J5W10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDMxIH07Ci0gICAgX21lbV9jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCA1LCBuZXRzbm1wX21lbV9hcmNoX2xvYWQsIE5VTEwsCisgICAgX21lbV9jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCBNRU1PUllfQ0FDSEVfU0VDT05EUywgbmV0c25tcF9tZW1fYXJjaF9sb2FkLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNNZW1vcnksIE9JRF9MRU5HVEgobnNNZW1vcnkpKTsKIH0KIApAQCAtODcsOSArMTAwLDExIEBACiAKIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX0dFVF9DQUNIRQogbmV0c25tcF9jYWNoZSAqbmV0c25tcF9tZW1vcnlfZ2V0X2NhY2hlKCB2b2lkICkgewogICAgIHJldHVybiBfbWVtX2NhY2hlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX0dFVF9DQUNIRSAqLwogCiBpbnQgbmV0c25tcF9tZW1vcnlfbG9hZCggdm9pZCApIHsKICAgICAgcmV0dXJuIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggX21lbV9jYWNoZSApOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMKaW5kZXggMjUxOWRkOS4uYWQyNDUyNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2Rhcndpbi5jCmluZGV4IDQ5MTRmMGMuLjQ0NjJjNDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYwpAQCAtNSwxMCArNSwxNCBAQAogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX2hvc3QuaD4KKwogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPElPS2l0L3BzL0lPUG93ZXJTb3VyY2VzLmg+CiAKIC8qCiAgKiBSZXRhaW5lZCBmcm9tIFVDRCBpbXBsZW1lbnRhdGlvbgpAQCAtNDQsOCArNDgsNyBAQAogICAgICBtYWNoX3BvcnQgPSBtYWNoX2hvc3Rfc2VsZigpOwogICAgICBlcnJvciA9IGhvc3RfcHJvY2Vzc29yX3NldHMobWFjaF9wb3J0LCAmcHNldHMsICZwY250KTsKICAgICAgaWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLCAiRXJyb3IgaW4gaG9zdF9wcm9jZXNzb3Jfc2V0cygpOiAlc1xuIiwgbWFjaF9lcnJvcl9zdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgc25tcF9sb2dfcGVycm9yKGVycm1zZyk7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBob3N0X3Byb2Nlc3Nvcl9zZXRzKCk6ICVzXG4iLCBtYWNoX2Vycm9yX3N0cmluZyhlcnJvcikpOwogICAgICAgICByZXR1cm4oMCk7CiAgICAgIH0KIApAQCAtNzUsNyArNzgsMTEgQEAKICAgICAgICAgICAgIGZvciAoYWRkcmVzcyA9IDA7OyBhZGRyZXNzICs9IHNpemUpIHsKICAgICAgICAgICAgICAgICAvKiBHZXQgbWVtb3J5IHJlZ2lvbi4gKi8KICAgICAgICAgICAgICAgICBjb3VudCA9IFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPX0NPVU5UOyAKLSAgICAgICAgICAgICAgICBpZiAodm1fcmVnaW9uKHRhc2tzW2pdLCAmYWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPLCAodm1fcmVnaW9uX2V4dGVuZGVkX2luZm9fdCkmaW5mbywgJmNvdW50LCAmb2JqZWN0X25hbWUpICE9IEtFUk5fU1VDQ0VTUykgeworI2lmIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgICAgICAgICAgICAgaWYgKHZtX3JlZ2lvbl82NCh0YXNrc1tqXSwgJmFkZHJlc3MsICZzaXplLCBWTV9SRUdJT05fRVhURU5ERURfSU5GTywgJmluZm8sICZjb3VudCwgJm9iamVjdF9uYW1lKSAhPSBLRVJOX1NVQ0NFU1MpIHsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKHZtX3JlZ2lvbih0YXNrc1tqXSwgJmFkZHJlc3MsICZzaXplLCBWTV9SRUdJT05fRVhURU5ERURfSU5GTywgJmluZm8sICZjb3VudCwgJm9iamVjdF9uYW1lKSAhPSBLRVJOX1NVQ0NFU1MpIHsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIG1lbW9yeSByZWdpb25zLiAqLwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jCmluZGV4IDAyZThiZTIuLjhkMTg2OTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jCkBAIC0yNCw3ICsyNCw3IEBACiBxdWFkX3QgICAgc3dhcFVzZWQ7CiBxdWFkX3QgICAgc3dhcEZyZWU7CiAKLWludCBzd2FwbW9kZShsb25nKTsKK3N0YXRpYyBpbnQgc3dhcG1vZGUobG9uZyk7CiAKIAogICAgIC8qCkBAIC0zNiwxMCArMzYsMTUgQEAKICAgICBsb25nICAgICAgICAgICBwYWdlc2l6ZTsKICAgICBpbnQgICAgICAgICAgICBuc3dhcDsKIAotICAgIHN0cnVjdCB2bW1ldGVyIHZtZW07CisjaWYgIWRlZmluZWQoVk1fVE9UQUwpCisgICAgdW5zaWduZWQgaW50ICAgZnJlZV9tZW07CisgICAgc2l6ZV90ICAgICAgICAgZnJlZV9zaXplID0gc2l6ZW9mKGZyZWVfbWVtKTsKKyAgICB1bnNpZ25lZCBpbnQgICBtZW1fcGFnZXM7CisjZWxzZQogICAgIHN0cnVjdCB2bXRvdGFsIHRvdGFsOwogICAgIHNpemVfdCAgICAgICAgIHRvdGFsX3NpemUgID0gc2l6ZW9mKHRvdGFsKTsKLSAgICBpbnQgICAgICAgICAgICB0b3RhbF9taWJbXSA9IHsgQ1RMX1ZNLCBWTV9NRVRFUiB9OworICAgIGludCAgICAgICAgICAgIHRvdGFsX21pYltdID0geyBDVExfVk0sIFZNX1RPVEFMIH07CisjZW5kaWYKIAogICAgIHVfbG9uZyAgICAgICAgIHBoeXNfbWVtOwogICAgIHVfbG9uZyAgICAgICAgIHVzZXJfbWVtOwpAQCAtNTgsNyArNjMsMTIgQEAKICAgICAvKgogICAgICAqIFJldHJpZXZlIHRoZSBtZW1vcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgdW5kZXJseWluZyBPL1MuLi4KICAgICAgKi8KKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKyAgICBzeXNjdGxieW5hbWUoInZtLnN0YXRzLnZtLnZfZnJlZV9jb3VudCIsICZmcmVlX21lbSwgICAgJmZyZWVfc2l6ZSwgICAgTlVMTCwgMCk7CisgICAgc3lzY3RsYnluYW1lKCJ2bS5zdGF0cy52bS52X3BhZ2VfY291bnQiLCAmbWVtX3BhZ2VzLCAgICAmZnJlZV9zaXplLCAgICBOVUxMLCAwKTsKKyNlbHNlCiAgICAgc3lzY3RsKHRvdGFsX21pYiwgICAgMiwgJnRvdGFsLCAgICAmdG90YWxfc2l6ZSwgICAgTlVMTCwgMCk7CisjZW5kaWYKICAgICBzeXNjdGwocGh5c19tZW1fbWliLCAyLCAmcGh5c19tZW0sICZtZW1fc2l6ZSwgICAgICBOVUxMLCAwKTsKICAgICBzeXNjdGwodXNlcl9tZW1fbWliLCAyLCAmdXNlcl9tZW0sICZtZW1fc2l6ZSwgICAgICBOVUxMLCAwKTsKICAgICBzeXNjdGxieW5hbWUoInZtLnN0YXRzLnZtLnZfY2FjaGVfY291bnQiLCAgICAmY2FjaGVfY291bnQsICZjYWNoZV9zaXplLCBOVUxMLCAwKTsKQEAgLTgzLDcgKzkzLDExIEBACiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiUGh5c2ljYWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKICAgICAgICAgbWVtLT5zaXplICA9IHBoeXNfbWVtL3BhZ2VzaXplOworI2lmICFkZWZpbmVkKFZNX1RPVEFMKQorCW1lbS0+ZnJlZSAgPSBmcmVlX21lbTsKKyNlbHNlCiAgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2ZyZWU7CisjZW5kaWYKICAgICB9CiAKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfVVNFUk1FTSwgMSApOwpAQCAtOTMsOCArMTA3LDEzIEBACiAgICAgICAgIGlmICghbWVtLT5kZXNjcikKICAgICAgICAgICAgICBtZW0tPmRlc2NyID0gc3RyZHVwKCJSZWFsIG1lbW9yeSIpOwogICAgICAgICBtZW0tPnVuaXRzID0gcGFnZXNpemU7CisjaWYgIWRlZmluZWQoVk1fVE9UQUwpCisJbWVtLT5zaXplICA9IHVzZXJfbWVtL3BhZ2VzaXplOworCW1lbS0+ZnJlZSAgPSBmcmVlX21lbTsKKyNlbHNlCiAgICAgICAgIG1lbS0+c2l6ZSAgPSB0b3RhbC50X3JtOwotICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF9hcm07CisgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X3JtIC0gdG90YWwudF9hcm07CisjZW5kaWYKICAgICB9CiAKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfVklSVE1FTSwgMSApOwpAQCAtMTA0LDEwICsxMjMsMTYgQEAKICAgICAgICAgaWYgKCFtZW0tPmRlc2NyKQogICAgICAgICAgICAgIG1lbS0+ZGVzY3IgPSBzdHJkdXAoIlZpcnR1YWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKwltZW0tPnNpemUgID0gbWVtX3BhZ2VzK3N3YXBUb3RhbDsKKwltZW0tPmZyZWUgID0gZnJlZV9tZW0rc3dhcEZyZWU7CisjZWxzZQogICAgICAgICBtZW0tPnNpemUgID0gdG90YWwudF92bTsKLSAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfYXZtOworICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF92bSAtIHRvdGFsLnRfYXZtOworI2VuZGlmCiAgICAgfQogCisjaWYgZGVmaW5lZChWTV9UT1RBTCkKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfU0hBUkVELCAxICk7CiAgICAgaWYgKCFtZW0pIHsKICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJObyBTaGFyZWQgTWVtb3J5IGluZm8gZW50cnkiKTsKQEAgLTExNiw3ICsxNDEsNyBAQAogICAgICAgICAgICAgIG1lbS0+ZGVzY3IgPSBzdHJkdXAoIlNoYXJlZCB2aXJ0dWFsIG1lbW9yeSIpOwogICAgICAgICBtZW0tPnVuaXRzID0gcGFnZXNpemU7CiAgICAgICAgIG1lbS0+c2l6ZSAgPSB0b3RhbC50X3Ztc2hyOwotICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF9hdm1zaHI7CisgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X3Ztc2hyIC0gdG90YWwudF9hdm1zaHI7CiAgICAgfQogCiAgICAgbWVtID0gbmV0c25tcF9tZW1vcnlfZ2V0X2J5SWR4KCBORVRTTk1QX01FTV9UWVBFX1NIQVJFRDIsIDEgKTsKQEAgLTEyNyw4ICsxNTIsOSBAQAogICAgICAgICAgICAgIG1lbS0+ZGVzY3IgPSBzdHJkdXAoIlNoYXJlZCByZWFsIG1lbW9yeSIpOwogICAgICAgICBtZW0tPnVuaXRzID0gcGFnZXNpemU7CiAgICAgICAgIG1lbS0+c2l6ZSAgPSB0b3RhbC50X3Jtc2hyOwotICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF9hcm1zaHI7CisgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X3Jtc2hyIC0gdG90YWwudF9hcm1zaHI7CiAgICAgfQorI2VuZGlmCiAKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfQ0FDSEVELCAxICk7CiAgICAgaWYgKCFtZW0pIHsKQEAgLTEzNyw4ICsxNjMsOCBAQAogICAgICAgICBpZiAoIW1lbS0+ZGVzY3IpCiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiQ2FjaGVkIG1lbW9yeSIpOwogICAgICAgICBtZW0tPnVuaXRzID0gcGFnZXNpemU7Ci0gICAgICAgIG1lbS0+c2l6ZSAgPSBjYWNoZV9tYXggKyBpbmFjdF9jb3VudDsKLSAgICAgICAgbWVtLT5mcmVlICA9IGNhY2hlX21heCAtIGNhY2hlX2NvdW50OworICAgICAgICBtZW0tPnNpemUgID0gY2FjaGVfY291bnQ7CisgICAgICAgIG1lbS0+ZnJlZSAgPSAwOwogICAgIH0KIAogICAgIG5zd2FwID0gc3dhcG1vZGUocGFnZXNpemUpOwpAQCAtMTgxLDcgKzIwNyw3IEBACiAgKiBUaGlzIGlzIGp1c3Qgd2F5IHRvbyB1Z2x5IDspIAogICovCiAKLWludAorc3RhdGljIGludAogc3dhcG1vZGUobG9uZyBwYWdlc2l6ZSkKIHsKICAgICBzdHJ1Y3QgZXh0ZW5zaWJsZSBleHQ7CkBAIC0yMTIsMjIgKzIzOCwyMSBAQAogCiAjaW5jbHVkZSA8c3lzL2NvbmYuaD4KIAotaW50CitleHRlcm4ga3ZtX3QgKmtkOworCitzdGF0aWMgaW50CiBzd2FwbW9kZShsb25nIHBhZ2VzaXplKQogewogICAgIGludCAgICAgICAgICAgICBpLCBuOwotICAgIHN0YXRpYyBrdm1fdCAgICprZCA9IE5VTEw7CiAgICAgc3RydWN0IGt2bV9zd2FwIGtzd2FwWzE2XTsKICAgICBuZXRzbm1wX21lbW9yeV9pbmZvICptZW07CiAgICAgY2hhciBidWZbMTAyNF07CiAKLSAgICBpZiAoa2QgPT0gTlVMTCkKLSAgICAgICAga2QgPSBrdm1fb3BlbmZpbGVzKE5VTEwsIE5VTEwsIE5VTEwsIE9fUkRPTkxZLCBOVUxMKTsKICAgICBuID0ga3ZtX2dldHN3YXBpbmZvKGtkLCBrc3dhcCwgc2l6ZW9mKGtzd2FwKSAvIHNpemVvZihrc3dhcFswXSksIDApOwogCiAgICAgc3dhcFVzZWQgPSBzd2FwVG90YWwgPSBzd2FwRnJlZSA9IDA7CiAKLSAgICBpZiAoIG4gPiAxICkgeworICAgIGlmICggbiA+IDAgKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzd2FwIGRldmljZXMsIHRoZW4gcmVjb3JkCiAgICAgICAgICAqICAgdGhlIHN0YXRpc3RpY3MgZm9yIGVhY2ggb25lIHNlcGFyYXRlbHkuLi4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYwppbmRleCAzNmQ0MzFlLi44YzE4OWM1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jCkBAIC00Myw3ICs0Myw3IEBACiAgICAgfQogICAgIGlmIChic2l6ZSA9PSAwKSB7CiAgICAgICAgIGJzaXplID0gTUVNSU5GT19JTklUX1NJWkU7Ci0gICAgICAgIGJ1ZmYgPSBtYWxsb2MoYnNpemUrMSk7CisgICAgICAgIGJ1ZmYgPSAoY2hhciopbWFsbG9jKGJzaXplKzEpOwogICAgICAgICBpZiAoTlVMTCA9PSBidWZmKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWFsbG9jIGZhaWxlZFxuIik7CiAgICAgICAgICAgICBjbG9zZShzdGF0ZmQpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlICgoYnl0ZXNfcmVhZCA9IHJlYWQoc3RhdGZkLCBidWZmLCBic2l6ZSkpID09IGJzaXplKSB7Ci0gICAgICAgIGIgPSByZWFsbG9jKGJ1ZmYsIGJzaXplICsgTUVNSU5GT19TVEVQX1NJWkUgKyAxKTsKKyAgICAgICAgYiA9IChjaGFyKilyZWFsbG9jKGJ1ZmYsIGJzaXplICsgTUVNSU5GT19TVEVQX1NJWkUgKyAxKTsKICAgICAgICAgaWYgKE5VTEwgPT0gYikgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1hbGxvYyBmYWlsZWRcbiIpOwogICAgICAgICAgICAgY2xvc2Uoc3RhdGZkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMKaW5kZXggM2RmZmY4Yi4uNDJmMjAzZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIGNoYXIgYnVmWzEwMjRdOwogCiAgICAgbnVtID0gc3dhcGN0bChTQ19HRVROU1dQLCAwKTsKLSAgICBzID0gbWFsbG9jKG51bSAqIHNpemVvZihzd2FwZW50X3QpICsgc2l6ZW9mKHN0cnVjdCBzd2FwdGFibGUpKTsKKyAgICBzID0gKHN3YXB0YmxfdCopbWFsbG9jKG51bSAqIHNpemVvZihzd2FwZW50X3QpICsgc2l6ZW9mKHN0cnVjdCBzd2FwdGFibGUpKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGQ5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgKQEAgLTAsMCArMSwxNyBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQorCisjaWYgZGVmaW5lZChzb2xhcmlzMikKKyMgaWYgZGVmaW5lZChIQVZFX1BJQ0xfSCkKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycykKKyMgZWxzZQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzKQorIyBlbmRpZgorI2Vsc2UKKyMgIGlmIGRlZmluZWQoTkVUU05NUF9VU0VfU0VOU09SU19WMykKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzKQorIyAgZWxzZQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIpCisjICBlbmRpZgorI2VuZGlmCisKKy8qIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycykgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyNTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5jCkBAIC0wLDAgKzEsNjAgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisKK3ZvaWQgbmV0c25tcF9zZW5zb3JfYXJjaF9pbml0KCB2b2lkICkgeworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIkluaXRpYWxpc2UgRHVtbXkgU2Vuc29ycyBtb2R1bGVcbiIpKTsKK30KKworaW50CituZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZwKSB7CisgICAgdGltZV90IG5vdzsKKyAgICBzdHJ1Y3QgdG0gICAgICAgICAgICAgICAgICAqdG07CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworCisgICAgdGltZSgmbm93KTsKKyAgICB0bSA9IGxvY2FsdGltZSgmbm93KTsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIER1bW15IFNlbnNvcnMgbW9kdWxlXG4iKSk7CisKKyAgICAvKiBGaXJzdCBwc2V1ZG8tc2Vuc29yIC0gc2xvd2x5LXJpc2luZyB0ZW1wZXJhdHVyZSAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJtaW51dGUiLCBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFICk7CisgICAgc3AtPnZhbHVlID0gdG0tPnRtX21pbjsKKyAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTYsICJNaW51dGUtYmFzZWQgcHNldWRvLXNlbnNvciAtIHNsb3dseS1yaXNpbmcgdGVtcGVyYXR1cmUiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBTZWNvbmQgcHNldWRvLXNlbnNvciAtIHF1aWNrbHktcmlzaW5nIHRlbXBlcmF0dXJlICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggInNlY29uZCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1fc2VjOworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIlNlY29uZC1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gcXVpY2tseS1yaXNpbmcgdGVtcGVyYXR1cmUiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBUaGlyZCBwc2V1ZG8tc2Vuc29yIC0gYW5udWFsIGZhbiBzcGVlZCAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJ5ZWFyIiwgTkVUU05NUF9TRU5TT1JfVFlQRV9SUE0gKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1feWVhciArIDE5MDA7CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiUlBNIHBzZXVkby1zZW5zb3IgLSBhbm51YWwgZmFuIHNwZWVkIiApOworICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworCisgICAgLyogRm91cnRoIHBzZXVkby1zZW5zb3IgLSBkYWlseSB2b2x0YWdlICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggImRheSIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV9tZGF5LTIwOworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIkRheS1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gcG9zaXRpdmUgb3IgbmVnYXRpdmUgdm9sdGFnZSIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIC8qIEZpZnRoIHBzZXVkby1zZW5zb3IgLSBtb250aGx5IHZvbHRhZ2UgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAibW9udGgiLCBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREMgKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1fbW9uOworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIk1vbnRoLWJhc2VkIHBzZXVkby1zZW5zb3IgLSBwb3NpdGl2ZSB2b2x0YWdlIiApOworICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworCisgICAgLyogU2l4dGggcHNldWRvLXNlbnNvciAtIGFubnVhbCBkYWlseSBzb21ldGhpbmcgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAieWRheSIsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIgKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1feWRheTsKKyAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTYsICJEYXktYmFzZWQgcHNldWRvLXNlbnNvciAtIGFubnVhbCBzb21ldGhpbmciICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMTY0NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jCkBAIC0wLDAgKzEsMTg5IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworCitleHRlcm4gTmV0c25tcENhY2hlTG9hZCBuZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQ7CitleHRlcm4gdm9pZCAgICAgICAgICAgICBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoIHZvaWQgKTsKK3N0YXRpYyBpbnQgIF9zZW5zb3JfbG9hZCggdm9pZCApOworc3RhdGljIHZvaWQgX3NlbnNvcl9mcmVlKCB2b2lkICk7CisKK3N0YXRpYyBpbnQgX3NlbnNvckF1dG9VcGRhdGUgPSAwOyAgIC8qIDAgbWVhbnMgb24tZGVtYW5kIGNhY2hpbmcgKi8KK3N0YXRpYyB2b2lkIF9zZW5zb3JfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQsIHZvaWQqICk7CisKK25ldHNubXBfY2FjaGUgICAgICpfc2Vuc29yX2NhY2hlICAgICA9IE5VTEw7CituZXRzbm1wX2NvbnRhaW5lciAqX3NlbnNvcl9jb250YWluZXIgPSBOVUxMOworc3RhdGljIGludCAgICAgICAgIF9zZW5zb3JfaWR4ICAgICAgID0gMDsKKwordm9pZCBpbml0X2h3X3NlbnNvcnMoIHZvaWQgKSB7CisKKyAgICBpZiAoIF9zZW5zb3JfY29udGFpbmVyICkKKyAgICAgICAgcmV0dXJuOyAgIC8qIEFscmVhZHkgaW5pdGlhbGlzZWQgKi8KKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzIiwgIkluaXRpYWxpc2UgSGFyZHdhcmUgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIGEgY29udGFpbmVyIHRvIGhvbGQgdGhlIGJhc2ljIGxpc3Qgb2Ygc2Vuc29ycworICAgICAqIFRoZSBmb3VyIExNLVNFTlNPUi1NSUIgY29udGFpbmVycyB3aWxsIGJlIGNyZWF0ZWQgaW4KKyAgICAgKiAgdGhlIHJlbGV2YW50IGluaXRpYWxpc2F0aW9uIHJvdXRpbmUocykKKyAgICAgKi8KKyAgICBfc2Vuc29yX2NvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInNlbnNvclRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmICggTlVMTCA9PSBfc2Vuc29yX2NvbnRhaW5lciApIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRhaW5lciBmb3Igc2Vuc29yVGFibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoICk7CisKKyAgICAvKgorICAgICAqIElmIHdlJ3JlIHNhbXBsaW5nIHRoZSBzZW5zb3IgaW5mb3JtYXRpb24gYXV0b21hdGljYWxseSwKKyAgICAgKiAgIHRoZW4gYXJyYW5nZSBmb3IgdGhpcyB0byBiZSB0cmlnZ2VyZWQgcmVndWxhcmx5LgorICAgICAqCisgICAgICogSWYgd2UncmUgbm90IHNhbXBsaW5nIHRoZXNlIHZhbHVlcyByZWd1bGFybHksCisgICAgICogICBjcmVhdGUgYSBzdWl0YWJsZSBjYWNoZSBoYW5kbGVyIGluc3RlYWQuCisgICAgICovCisgICAgaWYgKCBfc2Vuc29yQXV0b1VwZGF0ZSApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnMiLCAiUmVsb2FkaW5nIEhhcmR3YXJlIFNlbnNvcnMgYXV0b21hdGljYWxseSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JBdXRvVXBkYXRlKSk7CisgICAgICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoIF9zZW5zb3JBdXRvVXBkYXRlLCBTQV9SRVBFQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfdXBkYXRlX3N0YXRzLCBOVUxMICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfc2Vuc29yX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoIDUsIG5ldHNubXBfc2Vuc29yX2xvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZW5zb3JfZnJlZSwgTlVMTCwgMCApOworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29ycyIsICJSZWxvYWRpbmcgSGFyZHdhcmUgU2Vuc29ycyBvbi1kZW1hbmQgKCVwKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vuc29yX2NhY2hlKSk7CisgICAgfQorfQorCit2b2lkIHNodXRkb3duX2h3X3NlbnNvcnMoIHZvaWQgKSB7CisgICAgX3NlbnNvcl9mcmVlKCk7Cit9CisKKy8qCisgKiAgUmV0dXJuIHRoZSBtYWluIHNlbnNvciBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKmdldF9zZW5zb3JfY29udGFpbmVyKCB2b2lkICkgeyByZXR1cm4gX3NlbnNvcl9jb250YWluZXI7IH0KKworLyoKKyAqICBSZXR1cm4gdGhlIG1haW4gc2Vuc29yIGNhY2hlIGNvbnRyb2wgc3RydWN0dXJlIChpZiBkZWZpbmVkKQorICovCituZXRzbm1wX2NhY2hlICpnZXRfc2Vuc29yX2NhY2hlKCB2b2lkICkgeyByZXR1cm4gX3NlbnNvcl9jYWNoZTsgfQorCisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgZm9yIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgc2Vuc29yIHN0YXRpc3RpY3MKKyAqLwordm9pZAorX3NlbnNvcl91cGRhdGVfc3RhdHMoIHVuc2lnbmVkIGludCBjbGllbnRyZWcsIHZvaWQgKmRhdGEgKQoreworICAgIF9zZW5zb3JfZnJlZSgpOworICAgIF9zZW5zb3JfbG9hZCgpOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciByZS1sb2FkaW5nIHNlbnNvciBzdGF0aXN0aWNzIG9uIGRlbWFuZAorICovCitpbnQKK25ldHNubXBfc2Vuc29yX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICkKK3sKKyAgICByZXR1cm4gX3NlbnNvcl9sb2FkKCk7Cit9CisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgZm9yIHJlbGVhc2luZyBleHBpcmVkIHNlbnNvciBzdGF0aXN0aWNzCisgKi8KK3ZvaWQKK25ldHNubXBfc2Vuc29yX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICkKK3sKKyAgICBfc2Vuc29yX2ZyZWUoKTsKK30KKworCisvKgorICogQXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IHByb2Nlc3Npbmcgb2YgbG9hZGluZyBzZW5zb3Igc3RhdGlzdGljcworICovCitzdGF0aWMgaW50Citfc2Vuc29yX2xvYWQoIHZvaWQgKQoreworICAgIG5ldHNubXBfc2Vuc29yX2FyY2hfbG9hZCggTlVMTCwgTlVMTCApOworICAgIHJldHVybiAwOworfQorCisvKgorICogQXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IHJlbGVhc2Ugb2Ygc2Vuc29yIHN0YXRpc3RpY3MKKyAqLworc3RhdGljIHZvaWQKK19zZW5zb3JfZnJlZSggdm9pZCApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3A7CisKKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfc2Vuc29yX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX3NlbnNvcl9jb250YWluZXIsIHNwICkpIHsKKworICAgICAgICAgc3AtPmZsYWdzICY9IH4gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgfQorfQorCisKKy8qCisgKiBSZXRyaWV2ZSBhIHNlbnNvciBlbnRyeSBieSBuYW1lLAorICogIG9yIChvcHRpb25hbGx5KSBpbnNlcnQgYSBuZXcgb25lIGludG8gdGhlIGNvbnRhaW5lcgorICovCituZXRzbm1wX3NlbnNvcl9pbmZvICoKK3NlbnNvcl9ieV9uYW1lKCBjb25zdCBjaGFyICpuYW1lLCBpbnQgY3JlYXRlX3R5cGUgKQoreworICAgIG5ldHNubXBfc2Vuc29yX2luZm8gKnNwOworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6bmFtZSIsICJHZXQgc2Vuc29yIGVudHJ5ICglcylcbiIsIG5hbWUpKTsKKworICAgIC8qCisgICAgICogIExvb2sgdGhyb3VnaCB0aGUgbGlzdCBmb3IgYSBtYXRjaGluZyBlbnRyeQorICAgICAqLworICAgICAgICAvKiAuLiBvciB1c2UgYSBzZWNvbmRhcnkgaW5kZXggY29udGFpbmVyID8/ICovCisgICAgZm9yIChzcCA9IENPTlRBSU5FUl9GSVJTVCggX3NlbnNvcl9jb250YWluZXIgKTsKKyAgICAgICAgIHNwOworICAgICAgICAgc3AgPSBDT05UQUlORVJfTkVYVCggIF9zZW5zb3JfY29udGFpbmVyLCBzcCApKSB7CisKKyAgICAgICAgaWYgKCAhc3RyY21wKCBuYW1lLCBzcC0+bmFtZSApKQorICAgICAgICAgICAgcmV0dXJuIHNwOworICAgIH0KKworICAgIC8qCisgICAgICogTm90IGZvdW5kLi4uCisgICAgICovCisgICAgaWYgKCBjcmVhdGVfdHlwZSA9PSBORVRTTk1QX1NFTlNPUl9GSU5EX0VYSVNUICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczpuYW1lIiwgIk5vIHN1Y2ggc2Vuc29yIGVudHJ5XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogLi4uIHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBvbmUsIHVzaW5nIHRoZSB0eXBlIHN1cHBsaWVkCisgICAgICovCisgICAgc3AgPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3NlbnNvcl9pbmZvICk7CisgICAgaWYgKCBzcCApIHsKKyAgICAgICAgaWYgKHN0cmxlbihuYW1lKSA+PSBzaXplb2Yoc3AtPm5hbWUpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU2Vuc29yIG5hbWUgaXMgdG9vIGxhcmdlOiAlc1xuIiwgbmFtZSk7CisgICAgICAgICAgICBmcmVlKHNwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHN0cmNweSggc3AtPm5hbWUsIG5hbWUgKTsKKyAgICAgICAgc3AtPnR5cGUgPSBjcmVhdGVfdHlwZTsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2V0IHVwIHRoZSBpbmRleCB2YWx1ZS4KKyAgICAgICAgICogIAorICAgICAgICAgKiBBbGwgdGhpcyB0cm91YmxlLCBqdXN0IGZvciBhIHNpbXBsZSBpbnRlZ2VyLgorICAgICAgICAgKiBTdXJlbHkgdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXk/CisgICAgICAgICAqLworICAgICAgICBzcC0+aWR4LmxlbiAgPSAxOworICAgICAgICBzcC0+aWR4Lm9pZHMgPSBTTk1QX01BTExPQ19UWVBFREVGKCBvaWQgKTsKKyAgICAgICAgc3AtPmlkeC5vaWRzWzBdID0gKytfc2Vuc29yX2lkeDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczpuYW1lIiwgIkNyZWF0ZSBzZW5zb3IgZW50cnkgKHR5cGUgPSAlZCwgaW5kZXggPSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV90eXBlLCBfc2Vuc29yX2lkeCkpOworICAgIENPTlRBSU5FUl9JTlNFUlQoIF9zZW5zb3JfY29udGFpbmVyLCBzcCApOworICAgIHJldHVybiBzcDsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VjY2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmgKQEAgLTAsMCArMSwyIEBACit2b2lkIGluaXRfaHdfc2Vuc29ycyggdm9pZCApOwordm9pZCBzaHV0ZG93bl9od19zZW5zb3JzKCB2b2lkICk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYmJiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYwpAQCAtMCwwICsxLDE2MSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxrc3RhdC5oPgorI2luY2x1ZGUgPC91c3IvcGxhdGZvcm0vc3VuNHUvaW5jbHVkZS9zeXMvZW52Y3RybC5oPgorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIkluaXRpYWxpc2UgS1N0YXQgU2Vuc29ycyBtb2R1bGVcbiIpKTsKK30KKworCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisKKyAgICBpbnQgICAgICAgICBpOworICAgIGNvbnN0IGNoYXIgKmZhbnR5cGVzW109eyJDUFUiLCJQV1IiLCJBRkIifTsKKyAgICBjaGFyICAgICAgICBuYW1lWyAyNTYgXTsKKworICAgIGtzdGF0X2N0bF90ICAgICprYzsKKyAgICBrc3RhdF90ICAgICAgICAqa3A7CisgICAgZW52Y3RybF9mYW5fdCAgKmZhbl9pbmZvOworICAgIGVudmN0cmxfcHNfdCAgICpwb3dlcl9pbmZvOworICAgIGVudmN0cmxfZW5jbF90ICplbmNfaW5mbzsKKworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJSZWxvYWQgS1N0YXQgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKworICAgIGtjID0ga3N0YXRfb3BlbigpOworICAgIGlmICgga2MgPT0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIkNvdWxkbid0IG9wZW4ga3N0YXRcbiIpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBmYW4gaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBrcCA9IGtzdGF0X2xvb2t1cCgga2MsIEVOVkNUUkxfTU9EVUxFX05BTUUsIDAsIEVOVkNUUkxfS1NUQVRfRkFOU1RBVCk7CisgICAgaWYgKCgga3AgPT0gMCApIHx8IChrc3RhdF9yZWFkKCBrYywga3AsIDAgKSA9PSAtMSApKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiTm8gZmFuIGluZm9ybWF0aW9uXG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFuX2luZm8gPSAoZW52Y3RybF9mYW5fdCAqKWtwLT5rc19kYXRhOyAgICAgICAgCisgICAgICAgIGZvciAoaT0wOyBpPGtwLT5rc19uZGF0YTsgaSsrKSB7CisgICAgICAgICAgICBtZW1zZXQoIG5hbWUsIDAsIDI1NiApOworICAgICAgICAgICAgc25wcmludGYoIG5hbWUsIDI1NSwgIiVzJWQiLCBmYW50eXBlc1tmYW5faW5mby0+dHlwZV0sIGZhbl9pbmZvLT5pbnN0YW5jZSApOworCisgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCBuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBmYW5faW5mby0+ZmFuc3BlZWQ7CisgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU1LCAiZmFuIHR5cGUgJXMgbnVtYmVyICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmFudHlwZXNbZmFuX2luZm8tPnR5cGVdLCBmYW5faW5mby0+aW5zdGFuY2UgKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGZhbl9pbmZvKys7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qCisgICAgICogUmV0cmlldmUgUG93ZXIgU3VwcGx5IGluZm9ybWF0aW9uCisgICAgICovCisgICAga3AgPSBrc3RhdF9sb29rdXAoIGtjLCBFTlZDVFJMX01PRFVMRV9OQU1FLCAwLCBFTlZDVFJMX0tTVEFUX1BTTkFNRSk7CisgICAgaWYgKCgga3AgPT0gMCApIHx8IChrc3RhdF9yZWFkKCBrYywga3AsIDAgKSA9PSAtMSApKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiTm8gUFNVIGluZm9ybWF0aW9uXG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcG93ZXJfaW5mbyA9IChlbnZjdHJsX3BzX3QgKilrcC0+a3NfZGF0YTsgICAgICAgIAorICAgICAgICBmb3IgKGk9MDsgaTxrcC0+a3NfbmRhdGE7IGkrKykgeworICAgICAgICAgICAgbWVtc2V0KCBuYW1lLCAwLCAyNTYgKTsKKyAgICAgICAgICAgIHNucHJpbnRmKCBuYW1lLCAyNTUsICJQU1UlZCIsIHBvd2VyX2luZm8tPmluc3RhbmNlICk7CisKKyAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUpOworICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBwb3dlcl9pbmZvLT5wc190ZW1wcjsKKyAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTUsICJwb3dlciBzdXBwbHkgJWQiLCBwb3dlcl9pbmZvLT5pbnN0YW5jZSApOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgcG93ZXJfaW5mbysrOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIEVuY2xvc3VyZSBpbmZvcm1hdGlvbgorICAgICAqLworICAgIGtwID0ga3N0YXRfbG9va3VwKCBrYywgRU5WQ1RSTF9NT0RVTEVfTkFNRSwgMCwgRU5WQ1RSTF9LU1RBVF9FTkNMKTsKKyAgICBpZiAoKCBrcCA9PSAwICkgfHwgKGtzdGF0X3JlYWQoIGtjLCBrcCwgMCApID09IC0xICkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJObyBlbmNsb3N1cmUgaW5mb3JtYXRpb25cbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbmNfaW5mbyA9IChlbnZjdHJsX2VuY2xfdCAqKWtwLT5rc19kYXRhOyAgICAgICAgCisgICAgICAgIGZvciAoaT0wOyBpPGtwLT5rc19uZGF0YTsgaSsrKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGVuY2xvc3VyZSBpbmZvcm1hdGlvbiBjb3ZlcnMgc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2Vuc29yCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN3aXRjaCAoIGVuY19pbmZvLT50eXBlICkgeworICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfRlNQOgorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkVuY2xvc3VyZSBGcm9udCBQYW5lbFxuIikpOworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJGU1AiLCBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRU5WQ1RSTF9FTkNMX0FNQlRFTVBSOgorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkVuY2xvc3VyZSBBbWJpZW50IFRlbXBlcmF0dXJlXG4iKSk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIkFtYmllbnQiLCBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQ1BVVEVNUFI6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIENQVSBUZW1wZXJhdHVyZVxuIikpOworICAgICAgICAgICAgICAgIG1lbXNldCggbmFtZSwgMCwgMjU2ICk7CisgICAgICAgICAgICAgICAgc25wcmludGYoIG5hbWUsIDI1NSwgIkNQVSVkIiwgZW5jX2luZm8tPmluc3RhbmNlICk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggbmFtZSwgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSk7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gZW5jX2luZm8tPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU1LCAiQ1BVJWQgdGVtcGVyYXR1cmUiLCBlbmNfaW5mby0+aW5zdGFuY2UgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU5WQ1RSTF9FTkNMX0JBQ0tQTEFORTQ6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIEJhY2twbGFuZTRcbiIpKTsKKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAiQmFja3BsYW5lNCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIpOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGVuY19pbmZvLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQkFDS1BMQU5FODoKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbmNsb3N1cmUgQmFja3BsYW5lNFxuIikpOworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJCYWNrcGxhbmU0IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUik7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gZW5jX2luZm8tPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgIAorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIlVucmVjb2duaXNlZCBFbmNsb3N1cmUgZW50cnkgKCVkKW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19pbmZvLT50eXBlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY19pbmZvKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBrc3RhdF9jbG9zZShrYyk7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmZiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuaApAQCAtMCwwICsxIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNmMTQwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuYwpAQCAtMCwwICsxLDc0IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KKwordm9pZCBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoIHZvaWQgKSB7CisgICAgRklMRSAqZnAgPSBmb3BlbigiL2V0Yy9zZW5zb3JzLmNvbmYiLCAiciIpOworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBMTSBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHNlbnNvcnNfaW5pdCggZnAgKTsKK30KKworaW50CituZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZwKSB7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworICAgIGNvbnN0IHNlbnNvcnNfY2hpcF9uYW1lICAgICpjaGlwOworICAgIGNvbnN0IHNlbnNvcnNfZmVhdHVyZV9kYXRhICpkYXRhOworICAgIGludCAgICAgICAgICAgICBjaGlwX25yID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgd2hpbGUgKChjaGlwID0gc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMoJmNoaXBfbnIpKSkgeworCWludCAgICAgICAgICAgICBhID0gMDsKKwlpbnQgICAgICAgICAgICAgYiA9IDA7CisKKyAgICAgICAgd2hpbGUgKChkYXRhID0gc2Vuc29yc19nZXRfYWxsX2ZlYXR1cmVzKCpjaGlwLCAmYSwgJmIpKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiZ2V0X2FsbF9mZWF0dXJlcyAoJWQsICVkKVxuIiwgYSwgYikpOworICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmxhYmVsID0gTlVMTDsKKyAgICAgICAgICAgIGRvdWJsZSAgICAgICAgICB2YWw7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVI7CisKKyAgICAgICAgICAgIGlmICgoZGF0YS0+bW9kZSAmIFNFTlNPUlNfTU9ERV9SKSAmJgorICAgICAgICAgICAgICAgIChkYXRhLT5tYXBwaW5nID09IFNFTlNPUlNfTk9fTUFQUElORykgJiYKKyAgICAgICAgICAgICAgICAhc2Vuc29yc19nZXRfbGFiZWwoKmNoaXAsIGRhdGEtPm51bWJlciwgJmxhYmVsKSAmJgorICAgICAgICAgICAgICAgICFzZW5zb3JzX2dldF9mZWF0dXJlKCpjaGlwLCBkYXRhLT5udW1iZXIsICZ2YWwpKSB7CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICIlcyA9ICVmXG4iLCBsYWJlbCwgdmFsKSk7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygc2Vuc29yIGZyb20gdGhlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogSWYgdGhlIHRleHQgYmVpbmcgbG9va2VkIGZvciBiZWxvdyBpcyBub3QgaW4gdGhlIGxhYmVsIG9mIGEKKyAgICAgICAgICAgICAgICAgKiBnaXZlbiBzZW5zb3IgKGUuZy4sIHRoZSB0ZW1wMSBzZW5zb3IgaGFzIGJlZW4gbGFiZWxlZCAnQ1BVJworICAgICAgICAgICAgICAgICAqIHJhdGhlciB0aGFuICdDUFUgdGVtcCcpIGl0IHdpbGwgYmUgY2F0ZWdvcmlzZWQgYXMgT1RIRVIuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihsYWJlbCwgIlYiKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGxhYmVsLCAiZmFuIikgfHwgc3Ryc3RyKGxhYmVsLCAiRmFuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGxhYmVsLCAidGVtcCIpIHx8IHN0cnN0cihsYWJlbCwgIlRlbXAiKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFVzZSB0aGlzIHR5cGUgdG8gY3JlYXRlIGEgbmV3IHNlbnNvciBlbnRyeQorICAgICAgICAgICAgICAgICAqICAoaW5zZXJ0aW5nIGl0IGluIHRoZSBhcHByb3ByaWF0ZSBzdWItY29udGFpbmVycykKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCBsYWJlbCwgdHlwZSApOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCSAgICBpZiAobGFiZWwpIHsKKwkJZnJlZShsYWJlbCk7CisJCWxhYmVsID0gTlVMTDsKKwkgICAgfQorICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhICovCisgICAgfSAvKiBlbmQgd2hpbGUgY2hpcCAqLworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuaApAQCAtMCwwICsxIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRkYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYwpAQCAtMCwwICsxLDEwMiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+CisKKwordm9pZCBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoIHZvaWQgKSB7CisgICAgRklMRSAqZnAgPSBmb3BlbigiL2V0Yy9zZW5zb3JzLmNvbmYiLCAiciIpOworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSB2MyBMTSBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHNlbnNvcnNfaW5pdCggZnAgKTsKK30KKworaW50CituZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZwKSB7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworICAgIGNvbnN0IHNlbnNvcnNfY2hpcF9uYW1lICAgICpjaGlwOworICAgIGNvbnN0IHNlbnNvcnNfZmVhdHVyZSAgICAgICpkYXRhOworICAgIGNvbnN0IHNlbnNvcnNfc3ViZmVhdHVyZSAgICpkYXRhMjsKKyAgICBpbnQgICAgICAgICAgICAgY2hpcF9uciA9IDA7CisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIlJlbG9hZCB2MyBMTSBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHdoaWxlICgoY2hpcCA9IHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzKCBOVUxMLCAmY2hpcF9ucikpKSB7CisJaW50ICAgICAgICAgICAgIGEgPSAwOworCisgICAgICAgIHdoaWxlICgoZGF0YSA9IHNlbnNvcnNfZ2V0X2ZlYXR1cmVzKCBjaGlwLCAmYSkpKSB7CisJICAgIGludCAgICAgICAgICAgICBiID0gMDsKKworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiZ2V0X2ZlYXR1cmVzICglcywgJWQpXG4iLCBkYXRhLT5uYW1lLCBkYXRhLT5udW1iZXIpKTsKKworICAgICAgICAgICAgd2hpbGUgKChkYXRhMiA9IHNlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlcyggY2hpcCwgZGF0YSwgJmIpKSkgeworICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICpsYWJlbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZG91YmxlICAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSOworCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBnZXRfc3ViZmVhdHVyZXMgKCVzLCAlZClcbiIsIGRhdGEyLT5uYW1lLCBkYXRhMi0+bnVtYmVyKSk7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDaGVjayB0aGUgdHlwZSBvZiB0aGlzIHN1YmZlYXR1cmUsCisgICAgICAgICAgICAgICAgICogICBjb25jZW50cmF0aW5nIG9uIHRoZSBtYWluICJpbnB1dCIgbWVhc3VyZW1lbnRzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHN3aXRjaCAoIGRhdGEyLT50eXBlICkgeworICAgICAgICAgICAgICAgIGNhc2UgU0VOU09SU19TVUJGRUFUVVJFX0lOX0lOUFVUOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFTlNPUlNfU1VCRkVBVFVSRV9GQU5fSU5QVVQ6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTRU5TT1JTX1NVQkZFQVRVUkVfVEVNUF9JTlBVVDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0VOU09SU19TVUJGRUFUVVJFX1ZJRDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlc2UgYmFzaWMgc2Vuc29yIGZlYXR1cmVzIC0gPz8/ICovCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiAgU2tpcCB0eXBlICV4XG4iLCBkYXRhMi0+dHlwZSkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIEdldCB0aGUgbmFtZSBhbmQgdmFsdWUgb2YgdGhpcyBzdWJmZWF0dXJlCisgICAgICAgICAgICAgICAgICovCisvKgorICAgICAgICAgICAgICAgIGlmICghKGxhYmVsID0gc2Vuc29yc19nZXRfbGFiZWwoY2hpcCwgZGF0YSkpKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiAgQ2FuJ3QgZ2V0IG5hbWUgKCVzKVxuIiwgbGFiZWwpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZW5zb3JzX2dldF92YWx1ZShjaGlwLCBkYXRhMi0+bnVtYmVyLCAmdmFsKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBDYW4ndCBnZXQgdmFsdWUgKCVmKVxuIiwgdmFsKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyovCisgICAgICAgICAgICAgICAgaWYgKCEobGFiZWwgPSBzZW5zb3JzX2dldF9sYWJlbChjaGlwLCBkYXRhKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgIChzZW5zb3JzX2dldF92YWx1ZShjaGlwLCBkYXRhMi0+bnVtYmVyLCAmdmFsKSA8IDApKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiAgQ2FuJ3QgZ2V0IG5hbWUvdmFsdWUgKCVzLCAlZilcbiIsIGxhYmVsLCB2YWwpKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShsYWJlbCk7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiVzID0gJWZcbiIsIGxhYmVsLCB2YWwpKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVXNlIHRoaXMgdHlwZSB0byBjcmVhdGUgYSBuZXcgc2Vuc29yIGVudHJ5CisgICAgICAgICAgICAgICAgICogIChpbnNlcnRpbmcgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIHN1Yi1jb250YWluZXJzKQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIGxhYmVsLCB0eXBlICk7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gdmFsOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgICBpZiAobGFiZWwpIHsKKwkJICAgIGZyZWUobGFiZWwpOworCQkgICAgbGFiZWwgPSBOVUxMOworCSAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBlbmQgd2hpbGUgZGF0YTIgKi8KKyAgICAgICAgfSAvKiBlbmQgd2hpbGUgZGF0YSAqLworICAgIH0gLyogZW5kIHdoaWxlIGNoaXAgKi8KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmgKQEAgLTAsMCArMSBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDYxN2IyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMKQEAgLTAsMCArMSwzMzQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8cGljbC5oPgorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIkluaXRpYWxpc2UgUElDTGQgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKyAgICBwaWNsX2luaXRpYWxpemUoKTsKK30KKworCisvKgorICogSGFuZGxlIGEgbnVtZXJpYy12YWx1ZWQgc2Vuc29yCisgKi8KK3N0YXRpYyBpbnQKK3JlYWRfbnVtX3NlbnNvciggcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjb25zdCBjaGFyICpwcm9wdmFsLCBmbG9hdCAqdmFsdWUgKQoreworICAgIHBpY2xfbm9kZWhkbF90ICBzZW5zb3JoOworICAgIHBpY2xfcHJvcGluZm9fdCBzZW5zb3JfaW5mbzsKKyAgICBwaWNsX2Vycm5vX3QgICAgZXJyb3JfY29kZTsKKworICAgIHVuaW9uIHZhbHUgeworICAgICAgICBjaGFyIGJ1ZltQSUNMX1BST1BTSVpFX01BWF07CisgICAgICAgIHVpbnQzMl90IHVzNDsKKyAgICAgICAgdWludDE2X3QgdXMyOworICAgICAgICBpbnQzMl90IGlzNDsKKyAgICAgICAgaW50MTZfdCBpczI7CisgICAgICAgIGZsb2F0IGY7CisgICAgfSB2YWw7CisKKyAgICAvKgorICAgICAqICBSZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIHNlbnNvciBpbmZvcm1hdGlvbiBhbmQgdmFsdWUKKyAgICAgKi8KKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcGluZm9fYnlfbmFtZShjaGlsZGgsIHByb3B2YWwsICZzZW5zb3JfaW5mbywgJnNlbnNvcmgpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgInNlbnNvciBpbmZvIGxvb2t1cCBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbChzZW5zb3JoLCAmdmFsLmJ1Ziwgc2Vuc29yX2luZm8uc2l6ZSk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIHZhbHVlIGxvb2t1cCBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBDaGVjayB0aGUgdmFsaWRpdHkgKHR5cGUgYW5kIHNpemUpIG9mIHRoaXMgdmFsdWUKKyAgICAgKi8KKyAgICBpZiAoIHNlbnNvcl9pbmZvLnR5cGUgPT0gUElDTF9QVFlQRV9GTE9BVCApIHsKKyAgICAgICAgKnZhbHVlID0gdmFsLmY7CisgICAgfSBlbHNlIGlmICggc2Vuc29yX2luZm8udHlwZSA9PSBQSUNMX1BUWVBFX1VOU0lHTkVEX0lOVCApIHsKKyAgICAgICAgLyogMTYtYml0IG9yIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyAqLworICAgICAgICBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gMiApIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IHZhbC51czI7CisgICAgICAgIH0gZWxzZSBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gNCApIHsgCisgICAgICAgICAgICAqdmFsdWUgPSB2YWwudXM0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAidW5zaWduZWQgaW50ZWdlciAoJWQgYml0KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLnNpemUgKiA4KSk7CisgICAgICAgICAgICByZXR1cm4gUElDTF9GQUlMVVJFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICggc2Vuc29yX2luZm8udHlwZSA9PSBQSUNMX1BUWVBFX0lOVCApIHsKKyAgICAgICAgLyogMTYtYml0IG9yIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgKi8KKyAgICAgICAgaWYgKCBzZW5zb3JfaW5mby5zaXplID09IDIgKSB7CisgICAgICAgICAgICAqdmFsdWUgPSB2YWwuaXMyOworICAgICAgICB9IGVsc2UgaWYgKCBzZW5zb3JfaW5mby5zaXplID09IDQgKSB7IAorICAgICAgICAgICAgKnZhbHVlID0gdmFsLmlzNDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgInNpZ25lZCBpbnRlZ2VyICglZCBiaXQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8uc2l6ZSAqIDgpKTsKKyAgICAgICAgICAgIHJldHVybiBQSUNMX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJ1bnJlY29nbmlzZWQgdHlwZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby50eXBlKSk7CisgICAgICAgIHJldHVybiBQSUNMX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfbnVtX3NlbnNvciggcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjb25zdCBjaGFyICpwcm9wbmFtZSwgY29uc3QgY2hhciAqcHJvcHZhbCwgaW50IHR5cCApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKKyAgICBwaWNsX2Vycm5vX3QgICAgZXJyb3JfY29kZTsKKworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIHByb3BuYW1lLCB0eXAgKTsKKyAgICBpZiAoICFzcCApIHsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlID0gcmVhZF9udW1fc2Vuc29yKCBjaGlsZGgsIHByb3B2YWwsICZ2YWx1ZSApOworICAgIGlmICggZXJyb3JfY29kZSA9PSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIHNwLT52YWx1ZSA9IHZhbHVlOworICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJGYWlsZWQgdG8gcmVhZCAlcyBzZW5zb3IgdmFsdWUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcG5hbWUsIGVycm9yX2NvZGUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisKKy8qCisgKiAgICBIYW5kbGUgYW4gZW51bWVyYXRpb24tdmFsdWVkIHNlbnNvcgorICovCitjb25zdCBjaGFyICpzd2l0Y2hfc2V0dGluZ3NbXSA9IHsgIk9GRiIsIk9OIiwiTk9STUFMIiwiTE9DS0VEIiwKKwkJCQkgICJVTktOT1dOIiwiRElBRyIsIlNFQ1VSRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB9OworY29uc3QgY2hhciAqbGVkX3NldHRpbmdzW10gICAgPSB7ICJPRkYiLCJPTiIsIkJMSU5LIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIH07Citjb25zdCBjaGFyICppMmNfc2V0dGluZ3NbXSAgICA9IHsgIk9LIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIH07CisKK3N0YXRpYyBpbnQKK3JlYWRfZW51bV9zZW5zb3IoIHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgZmxvYXQgKnZhbHVlLCBjb25zdCBjaGFyICoqb3B0aW9ucyApCit7CisgICAgcGljbF9ub2RlaGRsX3QgIHNlbnNvcmg7CisgICAgcGljbF9wcm9waW5mb190IHNlbnNvcl9pbmZvOworICAgIHBpY2xfZXJybm9fdCAgICBlcnJvcl9jb2RlOworICAgIGNoYXIgICAgICAgICAgICBzdGF0ZVtQSUNMX1BST1BTSVpFX01BWF07CisgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAvKgorICAgICAqICBSZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIHNlbnNvciBpbmZvcm1hdGlvbiBhbmQgdmFsdWUKKyAgICAgKi8KKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcGluZm9fYnlfbmFtZShjaGlsZGgsICJTdGF0ZSIsICZzZW5zb3JfaW5mbywgJnNlbnNvcmgpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgInNlbnNvciBpbmZvIGxvb2t1cCBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbChzZW5zb3JoLCBzdGF0ZSwgc2Vuc29yX2luZm8uc2l6ZSk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIHZhbHVlIGxvb2t1cCBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKyAgICAgKiBOb3RlIHRoYXQgc29tZSBwbGF0Zm9ybXMgbWF5IHVzZSB1cHBlciBvciBsb3dlciBjYXNlCisgICAgICogICB2ZXJzaW9ucyBvZiB0aGVzZSBlbnVtZXJhdGlvbiB2YWx1ZXMKKyAgICAgKiAgKHNvIHRoZSBjaGVja3MgYXJlIGNhc2UgaW5zZW5zaXRpdmUpCisgICAgICovCisgICAgKnZhbHVlID0gOTk7ICAgIC8qIER1bW15IHZhbHVlICovCisgICAgZm9yICggaT0wOyAgb3B0aW9uc1tpXSAhPSBOVUxMOyBpKysgKSB7CisgICAgICAgIGlmIChzdHJuY2FzZWNtcChzdGF0ZSwgb3B0aW9uc1tpXSwgc3RybGVuKG9wdGlvbnNbaV0pKSA9PSAwKSB7CisgICAgICAgICAgICAqdmFsdWUgPSBpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW51bWVyYXRpb24gc3RhdGUgJXMgbm90IG1hdGNoZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKTsKKyAgICByZXR1cm4gMDsgIC8qIE9yIGFuIGVycm9yID8gKi8KK30KKworc3RhdGljIGludAorcHJvY2Vzc19lbnVtX3NlbnNvciggcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjb25zdCBjaGFyICpwcm9wbmFtZSwgaW50IHR5cCwgY29uc3QgY2hhciAqKm9wdGlvbnMgKQoreworICAgIG5ldHNubXBfc2Vuc29yX2luZm8gICAgICAgICpzcDsKKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7CisgICAgcGljbF9lcnJub190ICAgIGVycm9yX2NvZGU7CisKKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCBwcm9wbmFtZSwgdHlwICk7CisgICAgaWYgKCAhc3AgKSB7CisgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZXJyb3JfY29kZSA9IHJlYWRfZW51bV9zZW5zb3IoIGNoaWxkaCwgJnZhbHVlLCBvcHRpb25zICk7CisgICAgaWYgKCBlcnJvcl9jb2RlID09IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgc3AtPnZhbHVlID0gdmFsdWU7CisgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkZhaWxlZCB0byByZWFkICVzIHNlbnNvciB2YWx1ZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wbmFtZSwgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworLyoKKyAqICBSZWN1cnNpdmVseSB3YWxrIHRocm91Z2ggdGhlIHRyZWUgb2Ygc2Vuc29ycworICovCitzdGF0aWMgaW50Citwcm9jZXNzX3NlbnNvcnMoIGludCBsZXZlbCwgcGljbF9ub2RlaGRsX3Qgbm9kZWggKSB7CisgICAgcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBuZXh0aDsKKyAgICBjaGFyICAgICAgICAgICBwcm9wbmFtZVsgIFBJQ0xfUFJPUE5BTUVMRU5fTUFYICBdOworICAgIGNoYXIgICAgICAgICAgIHByb3BjbGFzc1sgUElDTF9DTEFTU05BTUVMRU5fTUFYIF07CisgICAgcGljbF9lcnJub190ICAgZXJyb3JfY29kZTsKKworICAgIGxldmVsKys7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAicHJvY2Vzc19zZW5zb3JzIC0gbGV2ZWwgJWRcbiIsIGxldmVsKSk7CisKKyAgICAvKiBMb29rIHVwIHRoZSBmaXJzdCBjaGlsZCBub2RlIGF0IHRoaXMgbGV2ZWwgKi8KKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbF9ieV9uYW1lKCBub2RlaCwgUElDTF9QUk9QX0NISUxELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlsZGgsIHNpemVvZihjaGlsZGgpKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJGYWlsZWQgdG8gZ2V0IGZpcnN0IGNoaWxkIG5vZGUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICB9CisKKyAgICAvKiBTdGVwIHRocm91Z2ggdGhlIGNoaWxkIG5vZGVzLCByZXRyaWV2aW5nIHRoZSBuYW1lIGFuZCBjbGFzcyBvZiBlYWNoIG9uZSAqLworICAgIHdoaWxlICggZXJyb3JfY29kZSA9PSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsX2J5X25hbWUoIGNoaWxkaCwgUElDTF9QUk9QX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BuYW1lLCBzaXplb2YocHJvcG5hbWUpLTEpOworICAgICAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICAgICAgLyogVGhlIE5vZGUgV2l0aCBObyBOYW1lICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXQgcHJvcGVydHkgbmFtZSBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUpKTsKKyAgICAgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3JfY29kZSA9IHBpY2xfZ2V0X3Byb3B2YWxfYnlfbmFtZSggY2hpbGRoLCBQSUNMX1BST1BfQ0xBU1NOQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wY2xhc3MsIHNpemVvZihwcm9wY2xhc3MpLTEpOworICAgICAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICAgICAgLyogVGhlIENsYXNzbGVzcyBTb2NpZXR5ICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXQgcHJvcGVydHkgY2xhc3MgZmFpbGVkICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgICAgICByZXR1cm4oIGVycm9yX2NvZGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIk5hbWU6ICVzLCBDbGFzcyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcG5hbWUsIHByb3BjbGFzcyApKTsKKworCisgICAgICAgIC8qCisgICAgICAgICAqICBUaHJlZSBjbGFzc2VzIHJlcHJlc2VudCBmdXJ0aGVyIGdyb3VwcyBvZiBzZW5zb3JzLCBldGMuCisgICAgICAgICAqICBDYWxsICdwcm9jZXNzX3NlbnNvcnMnIHJlY3Vyc2l2ZWx5IHRvIGhhbmRsZSB0aGlzIG5leHQgbGV2ZWwKKyAgICAgICAgICovCisgICAgICAgIGlmICgoIHN0cnN0ciggcHJvcGNsYXNzLCAicGljbCIgICAgKSkgfHwKKyAgICAgICAgICAgICggc3Ryc3RyKCBwcm9wY2xhc3MsICJmcnV0cmVlIiApKSB8fAorICAgICAgICAgICAgKCBzdHJzdHIoIHByb3BjbGFzcywgIm9icCIgICAgICkpKSB7CisgICAgICAgICAgICBwcm9jZXNzX3NlbnNvcnMoIGxldmVsLCBjaGlsZGggKTsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiAgT3RoZXJ3aXNlIHJldHJpZXZlIHRoZSB2YWx1ZSBhcHByb3ByaWF0ZWx5IGJhc2VkIG9uIHRoZQorICAgICAgICAgKiAgICAgY2xhc3Mgb2YgdGhlIHNlbnNvci4KKyAgICAgICAgICoKKyAgICAgICAgICogIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgUElDTCBwcm9wZXJ0eSB0byByZXRyaWV2ZQorICAgICAgICAgKiAgICAgZm9yIHRoaXMgY2xhc3Mgb2Ygc2Vuc29yLCBhbmQgdGhlIE5ldC1TTk1QIHNlbnNvciB0eXBlLgorICAgICAgICAgKi8KKyAgICAgICAgZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAiZmFuLXRhY2hvbWV0ZXIiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfbnVtX3NlbnNvciggY2hpbGRoLCBwcm9wbmFtZSwgIkF0b0RTZW5zb3JWYWx1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgImZhbiIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiU3BlZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRU5TT1JfVFlQRV9SUE0gKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJ0ZW1wZXJhdHVyZS1zZW5zb3IiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfbnVtX3NlbnNvciggY2hpbGRoLCBwcm9wbmFtZSwgIlRlbXBlcmF0dXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJ2b2x0YWdlLXNlbnNvciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiVm9sdGFnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA/PyAqLyBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREMgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJkaWdpdGFsLXNlbnNvciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiQXRvRFNlbnNvclZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID8/ICovIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEVudW1lcmF0aW9uLXZhbHVlZCBzZW5zb3JzIHVzZSBhIGZpeGVkIFBJQ0wgcHJvcGVydHkgKCJTdGF0ZSIpLAorICAgICAgICAgICAgICogICBidXQgdGFrZSBhIGxpc3Qgb2YgdGhlIHZhbHVlcyBhcHByb3ByaWF0ZSBmb3IgdGhhdCBzZW5zb3IsCisgICAgICAgICAgICAgKiAgIGFzIHdlbGwgYXMgdGhlIE5ldC1TTk1QIHNlbnNvciB0eXBlLgorICAgICAgICAgICAgICovCisgICAgICAgIH0gZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAic3dpdGNoIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX2VudW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoX3NldHRpbmdzICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAibGVkIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX2VudW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVkX3NldHRpbmdzICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAiaTJjIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX2VudW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX0JPT0xFQU4sIC8qID8/ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc2V0dGluZ3MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFNraXAgb3RoZXIgY2xhc3NlcyBvZiBzZW5zb3IgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIlNraXBwaW5nIGNsYXNzICVzXG4iLCBwcm9wY2xhc3MgKSk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAgTW92ZSBvbiB0byB0aGUgbmV4dCBjaGlsZCBub2RlIGF0IHRoZSBjdXJyZW50IGxldmVsIChpZiBhbnkpCisgICAgICAgICAqLworICAgICAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbF9ieV9uYW1lKCBjaGlsZGgsIFBJQ0xfUFJPUF9QRUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV4dGgsIHNpemVvZihuZXh0aCkpOworICAgICAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICAgICAgLyogVGhhdCdzIEFsbCBGb2xrcyEgKi8KKyAgICAgICAgICAgIHJldHVybiAoKCBlcnJvcl9jb2RlID09IFBJQ0xfUFJPUE5PVEZPVU5EICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQSUNMX1NVQ0NFU1MgOiBlcnJvcl9jb2RlICk7CisgICAgICAgIH0KKyAgICAgICAgY2hpbGRoID0gbmV4dGg7CisgICAgfQorICAgIAorICAgIHJldHVybiBlcnJvcl9jb2RlOworfQorCisKK2ludAorbmV0c25tcF9zZW5zb3JfYXJjaF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2cCkgeworICAgIGludCAgICAgICAgICAgICAgIGVycm9yX2NvZGU7CisgICAgcGljbF9ub2RlaGRsX3QgICAgcm9vdGg7CisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIlJlbG9hZCBQSUNMZCBTZW5zb3JzIG1vZHVsZVxuIikpOworCisgICAgZXJyb3JfY29kZSA9IHBpY2xfZ2V0X3Jvb3QoJnJvb3RoKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiQ291bGRuJ3QgZ2V0IHJvb3Qgbm9kZSAoZXJyb3IgJWQpXG4iLCBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSBwcm9jZXNzX3NlbnNvcnMoMCwgcm9vdGgpOworICAgIGlmICggZXJyb3JfY29kZSAhPSAyNTUgKQorICAgICAgICBpZiAoIGVycm9yX2NvZGUgIT0gNyApICAvKiBpZ25vcmUgUElDTF9QUk9QTk9URk9VTkQgZXJyb3IgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW50ZXJuYWwgUElDTGQgcHJvYmxlbSAoZXJyb3IgJWQpXG4iLCBlcnJvcl9jb2RlKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBuZXRzbm1wX3NlbnNvcl9hcmNoX3NodXRkb3duKCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiU2h1dGRvd24gUGljTEQgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKyAgICBwaWNsX3NodXRkb3duKCk7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMgYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jCmluZGV4IGMzODVlZGUuLmQzNGQ5MDYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYwpAQCAtNSw5ICs1LDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0yMSw2ICsxOCwxMyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiaGVhZGVyX2NvbXBsZXguaCIKIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoZWFkZXJfY29tcGxleF9hbGwsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGVhZGVyX2NvbXBsZXhfZnJlZV9hbGwsIGhlYWRlcl9jb21wbGV4X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5LCBoZWFkZXJfY29tcGxleF9hbGwpCisKIGludAogaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfdmFyb2lkKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcikKIHsKQEAgLTk0LDcgKzk4LDcgQEAKICAgICBpZiAodmFyLT5uYW1lX2xlbmd0aCA+IE1BWF9PSURfTEVOKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV92YXJvaWQiLAogICAgICAgICAgICAgICAgICAgICAiU29tZXRoaW5nIHRlcnJpYmx5IHdyb25nLCBuYW1lbGVuID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZV9sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCl2YXItPm5hbWVfbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAKQEAgLTEzMCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKGxvbmcpOwogICAgICAgICAgICAgb2lkTGVuLS07CiAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVhZGVyX2NvbXBsZXhfcGFyc2Vfb2lkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzZWQgaW50KCVkKTogJWRcbiIsIHZhci0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzZWQgaW50KCVkKTogJWxkXG4iLCB2YXItPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyLT52YWwuaW50ZWdlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTM0MCw4ICszNDQsOSBAQAogfQogCiBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKgotaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgdm9pZCAqZGF0YSkKK2hlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9udF9hbGxvd19kdXBsaWNhdGVzKQogewogICAgIG9pZCAgICAgICAgICAgICBuZXdvaWRbTUFYX09JRF9MRU5dOwogICAgIHNpemVfdCAgICAgICAgICBuZXdvaWRfbGVuOwpAQCAtMzUyLDcgKzM1Nyw4IEBACiAKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFyKTsKICAgICByZXQgPQotICAgICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQodGhlZGF0YSwgbmV3b2lkLCBuZXdvaWRfbGVuLCBkYXRhKTsKKyAgICAgICAgaGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGFfYnlfb2lkKHRoZWRhdGEsIG5ld29pZCwgbmV3b2lkX2xlbiwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfYWxsb3dfZHVwbGljYXRlcyk7CiAgICAgLyoKICAgICAgKiBmcmVlIHRoZSB2YXJpYWJsZSBsaXN0LCBidXQgbm90IHRoZSBlbmNsb3NlZCBkYXRhISAgaXQncyBub3Qgb3VycyEgCiAgICAgICovCkBAIC0zNjEsMzQgKzM2NywyMSBAQAogfQogCiBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKgotaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGFfYnlfb2lkKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSkKK2hlYWRlcl9jb21wbGV4X2FkZF9kYXRhKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIHZvaWQgKmRhdGEpCiB7Ci0gICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHJuLCAqaGNpcHRycCwgKm91cnNlbGY7Ci0gICAgaW50IHJjOworICAgIHJldHVybgorICAgICAgICBoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YSh0aGVkYXRhLCB2YXIsIGRhdGEsIDApOworfQogCi0gICAgaWYgKHRoZWRhdGEgPT0gTlVMTCB8fCBuZXdvaWQgPT0gTlVMTCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZm9yIChoY2lwdHJuID0gKnRoZWRhdGEsIGhjaXB0cnAgPSBOVUxMOwotICAgICAgICAgaGNpcHRybiAhPSBOVUxMOyBoY2lwdHJwID0gaGNpcHRybiwgaGNpcHRybiA9IGhjaXB0cm4tPm5leHQpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYOiBjaGVjayBmb3IgPT0gYW5kIGVycm9yIChvdmVybGFwcGluZyB0YWJsZSBlbnRyaWVzKSAKLSAgICAgICAgICogOC8yMDA1IHJrcyBPaywgSSBhZGRlZCBkdXBsaWNhdGUgZW50cnkgY2hlY2ssIGJ1dCBvbmx5IGxvZwotICAgICAgICAgKiAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLCBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgbm9ib2R5Ci0gICAgICAgICAqICAgICAgICAgICAgdGhhdCBjYWxscyB0aGlzIGZ1Y250aW9uIGRvZXMgZXJyb3IgY2hlY2tpbmchLgotICAgICAgICAgKi8KLSAgICAgICAgcmMgPSBzbm1wX29pZF9jb21wYXJlKGhjaXB0cm4tPm5hbWUsIGhjaXB0cm4tPm5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdvaWQsIG5ld29pZF9sZW4pOwotICAgICAgICBpZiAocmMgPiAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGVsc2UgaWYgKDAgPT0gcmMpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGFfYnlfb2lkIHdpdGggIgotICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSBpbmRleC5cbiIpOwotICAgICAgICAgICAgLyoqIHVuY29tbWVudCBudWxsIHJldHVybiB3aGVuIGNhbGxlcnMgZG8gZXJyb3IgY2hlY2tpbmcgKi8KLSAgICAgICAgICAgIC8qKiByZXR1cm4gTlVMTDsgKi8KLSAgICAgICAgfQotICAgIH0KK3N0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCitfaGVhZGVyX2NvbXBsZXhfYWRkX2JldHdlZW4oc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5ld29pZCwgc2l6ZV90IG5ld29pZF9sZW4sIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpvdXJzZWxmOwogCiAgICAgLyoKICAgICAgKiBucHRyIHNob3VsZCBub3cgcG9pbnQgdG8gdGhlIHNwb3QgdGhhdCB3ZSBuZWVkIHRvIGFkZCBvdXJzZWx2ZXMKQEAgLTQwMCw2ICszOTMsOCBAQAogICAgICAqLwogICAgIG91cnNlbGYgPSAoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICopCiAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChoZWFkZXJfY29tcGxleF9pbmRleCk7CisgICAgaWYgKG91cnNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgogICAgICAqIGNoYW5nZSBvdXIgcG9pbnRlcnMgCkBAIC00MzAsNiArNDI1LDUwIEBACiAgICAgcmV0dXJuIGhjaXB0cnA7CiB9CiAKKworc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoKK2hlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhX2J5X29pZChzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5ld29pZCwgc2l6ZV90IG5ld29pZF9sZW4sIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvbnRfYWxsb3dfZHVwbGljYXRlcykKK3sKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cm4sICpoY2lwdHJwOworICAgIGludCByYzsKKworICAgIGlmICh0aGVkYXRhID09IE5VTEwgfHwgbmV3b2lkID09IE5VTEwgfHwgZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaGNpcHRybiA9ICp0aGVkYXRhLCBoY2lwdHJwID0gTlVMTDsKKyAgICAgICAgIGhjaXB0cm4gIT0gTlVMTDsgaGNpcHRycCA9IGhjaXB0cm4sIGhjaXB0cm4gPSBoY2lwdHJuLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFhYWDogY2hlY2sgZm9yID09IGFuZCBlcnJvciAob3ZlcmxhcHBpbmcgdGFibGUgZW50cmllcykgCisgICAgICAgICAqIDgvMjAwNSBya3MgT2ssIEkgYWRkZWQgZHVwbGljYXRlIGVudHJ5IGNoZWNrLCBidXQgb25seSBsb2cKKyAgICAgICAgICogICAgICAgICAgICB3YXJuaW5nIGFuZCBjb250aW51ZSwgYmVjYXVzZSBpdCBzZWVtcyB0aGF0IG5vYm9keQorICAgICAgICAgKiAgICAgICAgICAgIHRoYXQgY2FsbHMgdGhpcyBmdWNudGlvbiBkb2VzIGVycm9yIGNoZWNraW5nIS4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gc25tcF9vaWRfY29tcGFyZShoY2lwdHJuLT5uYW1lLCBoY2lwdHJuLT5uYW1lbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3b2lkLCBuZXdvaWRfbGVuKTsKKyAgICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgwID09IHJjKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgImhlYWRlcl9jb21wbGV4X2FkZF9kYXRhX2J5X29pZCB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgaW5kZXguXG4iKTsKKyAgICAgICAgICAgIGlmIChkb250X2FsbG93X2R1cGxpY2F0ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gX2hlYWRlcl9jb21wbGV4X2FkZF9iZXR3ZWVuKHRoZWRhdGEsIGhjaXB0cnAsIGhjaXB0cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdvaWQsIG5ld29pZF9sZW4sIGRhdGEpOworfQorCitzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKgoraGVhZGVyX2NvbXBsZXhfYWRkX2RhdGFfYnlfb2lkKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSkKK3sKKyAgICByZXR1cm4gaGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGFfYnlfb2lkKHRoZWRhdGEsIG5ld29pZCwgbmV3b2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIDApOworfQorCiAvKgogICogZXh0cmFjdHMgYW4gZW50cnkgZnJvbSB0aGUgc3RvcmFnZSBzcGFjZSAocmVtb3ZpbmcgaXQgZnJvbSBmdXR1cmUKICAqIGFjY2Vzc2VzKSBhbmQgcmV0dXJucyB0aGUgZGF0YSBzdG9yZWQgdGhlcmUKQEAgLTQ4Niw2ICs1MjUsNyBAQAogLyoKICAqIGNvbXBsZXRlbHkgd2lwZSBvdXQgYWxsIGVudHJpZXMgaW4gb3VyIGRhdGEgc3RvcmUgCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUFERVJfQ09NUExFWF9GUkVFX0FMTAogdm9pZAogaGVhZGVyX2NvbXBsZXhfZnJlZV9hbGwoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZiwKICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlckNvbXBsZXhDbGVhbmVyICogY2xlYW5lcikKQEAgLTQ5Nyw3ICs1MzcsOSBAQAogICAgICAgICBoZWFkZXJfY29tcGxleF9mcmVlX2VudHJ5KGhjaXB0ciwgY2xlYW5lcik7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVBREVSX0NPTVBMRVhfRlJFRV9BTEwgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFQURFUl9DT01QTEVYX0ZJTkRfRU5UUlkKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCiBoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqdGhlc3R1ZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnRoZWVudHJ5KQpAQCAtNTA4LDYgKzU1MCw3IEBACiAgICAgICAgICBoY2lwdHIgPSBoY2lwdHItPm5leHQpOwogICAgIHJldHVybiBoY2lwdHI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUFERVJfQ09NUExFWF9GSU5EX0VOVFJZICovCiAKICNpZmRlZiBURVNUSU5HCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmggYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5oCmluZGV4IDIwMjhjZWUuLjJhMTcyOGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaApAQCAtNTcsNiArNTcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip0aGVkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB2YXIsIHZvaWQgKmRhdGEpOworc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YShzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X2FsbG93X2R1cGxpY2F0ZXMpOwogCiAvKgogICogTm90ZTogbmV3b2lkIGlzIGNvcGllZC9jbG9uZWQgZm9yIHlvdSAKQEAgLTY4LDUgKzcyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKK3N0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGFfYnlfb2lkKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuZXdvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3b2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9udF9hbGxvd19kdXBsaWNhdGVzKTsKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfSEVBREVSX0NPTVBMRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC5oCmluZGV4IDRiNzg3MDYuLmU4ZTY1NTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QuaAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0LmgKQEAgLTIsOSArMiwxOCBAQAogICogIEhvc3QgUmVzb3VyY2VzICd3cmFwcGVyJyBpbnRlcmZhY2UKICAqCWNhbGxzIHRoZSBwZXItZ3JvdXAgaW50ZXJmYWNlcyBmcm9tICdocl8qLmgnCiAgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9zeXN0ZW0pCi0JY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9zdG9yYWdlKQogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZGV2aWNlKQogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfb3RoZXIpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9wcm9jKQpAQCAtMTIsOSArMjEsMTIgQEAKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3ByaW50KQogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZGlzaykKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3BhcnRpdGlvbikKLQljb25maWdfcmVxdWlyZShob3N0L2hyX2ZpbGVzeXMpCi0JY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9zd3J1bikKLQljb25maWdfcmVxdWlyZShob3N0L2hyX3N3aW5zdCkKKworCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfc3RvcmFnZSwgNS43LCBob3N0L2hyaF9zdG9yYWdlKSkKKwljb25maWdfdmVyc2lvbl9yZXF1aXJlKChob3N0L2hyX2ZpbGVzeXMsIDUuNywgaG9zdC9ocmhfZmlsZXN5cykpCisKKwljb25maWdfdmVyc2lvbl9yZXF1aXJlKChob3N0L2hyX3N3aW5zdCwgIDUuNiwgaG9zdC9oclNXSW5zdGFsbGVkVGFibGUpKQorCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfc3dydW4sICAgNS42LCBob3N0L2hyU1dSdW5UYWJsZSkpCiAKIC8qIGFkZCB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHRvIHRoZSBkZWZhdWx0IG1pYnMgdG8gbG9hZCAqLwogY29uZmlnX2FkZF9taWIoSE9TVC1SRVNPVVJDRVMtTUlCKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMDVlOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBzd2luc3QuYyA6IGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzcworICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNvZnR3YXJlX2luc3RhbGxlZCwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzd2luc3RfZW50cnlfcmVtb3ZlLCBuZXRzbm1wX3VudXNlZCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHZvaWQgbmV0c25tcF9zd2luc3RfZW50cnlfZnJlZV9jYihuZXRzbm1wX3N3aW5zdF9lbnRyeSAqLCB2b2lkICopOworCitleHRlcm4gdm9pZCBuZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBuZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpOworZXh0ZXJuIGludCBuZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQobmV0c25tcF9jb250YWluZXIgKiwgdV9pbnQpOworCit2b2lkIGluaXRfc3dpbnN0KCB2b2lkICkKK3sKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3QiLCAiaW5pdCBjYWxsZWRcbiIpKTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOyAvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisKKworICAgIC8qCisgICAgICogY2FsbCBhcmNoIGluaXQgY29kZQorICAgICAqLworICAgIG5ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCgpOworfQorCit2b2lkIHNodXRkb3duX3N3aW5zdCggdm9pZCApCit7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdCIsICJzaHV0ZG93biBjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24oKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIGxvYWQgYSBjb250YWluZXIgd2l0aCBpbnN0YWxsZWQgc29mdHdhcmUuIElmIHVzZXJfY29udGFpbmVyIGlzIE5VTEwsCisgKiBhIG5ldyBjb250YWluZXIgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIHJldHVybmVkLCBhbmQgdGhlIGNhbGxlcgorICogaXMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgYWxsb2NhdGVkIG1lbW9yeSB3aGVuIGRvbmUuCisgKgorICogaWYgZmxhZ3MgY29udGFpbnMgTkVUU05NUF9TV0lOU1RfQUxMX09SX05PTkUgYW5kIGFueSBlcnJvciBvY2N1cnMsCisgKiB0aGUgY29udGFpbmVyIHdpbGwgYmUgY29tcGxldGVseSBjbGVhcmVkLgorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX3N3aW5zdF9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKnVzZXJfY29udGFpbmVyLCBpbnQgZmxhZ3MgKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSB1c2VyX2NvbnRhaW5lcjsKKyAgICBpbnQgYXJjaF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6Y29udGFpbmVyIiwgImxvYWRcbiIpKTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXIsIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJzd2luc3Q6dGFibGVfY29udGFpbmVyIik7CisgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXItPmNvbnRhaW5lcl9uYW1lKQorICAgICAgICBjb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJzd2luc3QgY29udGFpbmVyIik7CisKKyAgICAvKgorICAgICAqIGNhbGwgdGhlIGFyY2ggc3BlY2lmaWMgY29kZSB0byBsb2FkIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBhcmNoX3JjID0gbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBjb250YWluZXIsIGZsYWdzICk7CisgICAgaWYgKGFyY2hfcmMgJiYgKGZsYWdzICYgTkVUU05NUF9TV0lOU1RfQUxMX09SX05PTkUpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNhbGxlciBkb2VzIG5vdCB3YW50IGEgcGFydGlhbCBsb2FkLCBzbyBlbXB0eSB0aGUgY29udGFpbmVyLgorICAgICAgICAgKiBpZiB3ZSBjcmVhdGVkIHRoZSBjb250YWluZXIsIGRlc3Ryb3kgaXQuCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcyhjb250YWluZXIpOworICAgICAgICBpZiAoY29udGFpbmVyICE9IHVzZXJfY29udGFpbmVyKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmcmVlX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6Y29udGFpbmVyIiwgImZyZWVcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX1NXSU5TVF9ET05UX0ZSRUVfSVRFTVMpKQorICAgICAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcyhjb250YWluZXIpOworCisgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKK30KKworLyoKKyAqIGZyZWUgYSBzd2luc3QgY29udGFpbmVyCisgKi8KK3ZvaWQgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWVfaXRlbXMobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmNvbnRhaW5lciIsICJmcmVlX2l0ZW1zXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtc1xuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGZyZWUgYWxsIGl0ZW1zLgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopbmV0c25tcF9zd2luc3RfZW50cnlfZnJlZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIAorICovCituZXRzbm1wX3N3aW5zdF9lbnRyeSAqCituZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoaW50MzJfdCBzd0luZGV4KQoreworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeTsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3N3aW5zdF9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+c3dJbmRleCA9IHN3SW5kZXg7CisgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAxOworICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9ICZlbnRyeS0+c3dJbmRleDsKKworICAgIGVudHJ5LT5zd1R5cGUgPSBIUlNXSU5TVEFMTEVEVFlQRV9BUFBMSUNBVElPTjsKKworICAgIHJldHVybiBlbnRyeTsKK30KKworLyoKKyAqIGZyZWUgYSByb3cKKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfZW50cnlfZnJlZShuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkpCit7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdDplbnRyeTpmcmVlIiwgImluZGV4ICUiIE5FVFNOTVBfUFJJbyAidVxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3dJbmRleCkpOworCisgICAgZnJlZShlbnRyeSk7Cit9CisKKy8qCisgKiBmcmVlIGEgcm93CisgKi8KK3N0YXRpYyB2b2lkCituZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlX2NiKG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBmcmVlKGVudHJ5KTsKK30KKworLyoKKyAqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAKKyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NXSU5TVF9FTlRSWV9SRU1PVkUKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2VudHJ5X3JlbW92ZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkpCit7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpjb250YWluZXIiLCAicmVtb3ZlXG4iKSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKyAgICBDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgZW50cnkpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1dJTlNUX0VOVFJZX1JFTU9WRSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZkZWYgVEVTVAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBjb25zdCBjaGFyICp0b2tlbnMgPSBnZXRlbnYoIlNOTVBfREVCVUciKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCgpOworCisgICAgLyoqIHN3aW5zdCx2ZXJib3NlOnN3aW5zdCAqLworICAgIGlmICh0b2tlbnMpCisgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2Vucyh0b2tlbnMpOworICAgIGVsc2UKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKCJzd2luc3QiKTsKKyAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CisKKyAgICBpbml0X3N3aW5zdCgpOworICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKE5VTEwsIDApOworICAgIHNodXRkb3duX3N3aW5zdCgpOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmggYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTNlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBzd2luc3QgZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBzd2luc3QuaCAxNTM0NiAyMDA2LTA5LTI2IDIzOjM0OjUwWiByc3RvcnkgJAorICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIE5FVFNOTVBfQUNDRVNTX1NXSU5TVF9DT05GSUdfSAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TV0lOU1RfQ09ORklHX0gKKworLyoKKyAqIGFsbCBwbGF0Zm9ybXMgdXNlIHRoaXMgZ2VuZXJpYyBjb2RlCisgKi8KK2NvbmZpZ19leGNsdWRlKGhvc3QvaHJfc3dpbnN0KQorCisvKgorICogc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW50ZXJmYWNlIGNvZGUKKyAqLworI2lmICAgZGVmaW5lZCggZGFyd2luICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4pCisjZWxpZiBkZWZpbmVkKCBIQVZFX0RQS0dfUVVFUlkgKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdCkKKyNlbGlmIGRlZmluZWQoIEhBVkVfTElCUlBNICkgJiYgZGVmaW5lZCggbGludXggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbSkKKyNlbGlmIGRlZmluZWQoIEhBVkVfUEtHTE9DU19IICkgfHwgZGVmaW5lZCggaHB1eDkgKSB8fCBkZWZpbmVkKCBocHV4MTAgKSB8fCBkZWZpbmVkKCBocHV4MTEgKSB8fCBkZWZpbmVkKCBmcmVlYnNkMiApIHx8IGRlZmluZWQoIGxpbnV4ICkgfHwgZGVmaW5lZCggb3BlbmJzZCApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mbykKKyNlbHNlCisgICAgY29uZmlnX3dhcm5pbmcoVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBoclNXSW5zdGFsbGVkVGFibGUgcmV3cml0ZXMpCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbCkKKyNlbmRpZgorCit2b2lkIGluaXRfc3dpbnN0KCB2b2lkICk7Cit2b2lkIHNodXRkb3duX3N3aW5zdCggdm9pZCApOworCisjZW5kaWYgLyogTkVUU05NUF9BQ0NFU1NfU1dJTlNUX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9hcHQuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjA2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9hcHQuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIHN3aW5zdF9ycG0uYzoKKyAqICAgICBoclNXSW5zdGFsbGVkVGFibGUgZGF0YSBhY2Nlc3M6CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworY2hhciBwa2dfZGlyZWN0b3J5W1NOTVBfTUFYQlVGXTsKK3N0YXRpYyBjaGFyIGFwdF9mbXRbU05NUF9NQVhCVUZdOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KHZvaWQpCit7CisgICAgc3RybGNweShwa2dfZGlyZWN0b3J5LCAiL3Zhci9saWIvZHBrZy9pbmZvIiwgc2l6ZW9mKHBrZ19kaXJlY3RvcnkpKTsKKyAgICBzbnByaW50ZihhcHRfZm10LCBTTk1QX01BWEJVRiwgIiUlJWRbXiNdIyUlJWRbXiNdIyUlJWRbXiNdIyUlJWRbXiNdIyUlJWRbXiNdIyUlJWRzIiwKKwlTTk1QX01BWEJVRi0xLCBTTk1QX01BWEJVRi0xLCBTTk1QX01BWEJVRi0xLAorCVNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEpOworfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpCit7CisgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIEZJTEUgKnAgPSBwb3BlbigiZHBrZy1xdWVyeSAtLXNob3cgLS1zaG93Zm9ybWF0ICcke1BhY2thZ2V9IyR7VmVyc2lvbn0jJHtTZWN0aW9ufSMke1ByaW9yaXR5fSMke0Vzc2VudGlhbH0jJHtTdGF0dXN9XG4nIiwgInIiKTsKKyAgICBjaGFyIHBhY2thZ2VbU05NUF9NQVhCVUZdOworICAgIGNoYXIgdmVyc2lvbltTTk1QX01BWEJVRl07CisgICAgY2hhciBzZWN0aW9uW1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIHByaW9yaXR5W1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIGVzc2VudGlhbFtTTk1QX01BWEJVRl07CisgICAgY2hhciBzdGF0dXNbU05NUF9NQVhCVUZdOworICAgIGNoYXIgYnVmW0JVRlNJWl07CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworICAgIGludCBpID0gMDsKKworICAgIGlmIChwID09IE5VTEwpIHsKKwlzbm1wX3BlcnJvcigiZHBrZy1saXN0Iik7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgd2hpbGUgKGZnZXRzKGJ1ZiwgQlVGU0laLCBwKSkgeworCURFQlVHTVNHKCgic3dpbnN0X2FwdCIsICJlbnRyeTogJXNcbiIsIGJ1ZikpOworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworCXNzY2FuZihidWYsIGFwdF9mbXQsIHBhY2thZ2UsIHZlcnNpb24sIHNlY3Rpb24sIHByaW9yaXR5LCBlc3NlbnRpYWwsIHN0YXR1cyk7CisJaWYgKHN0cnN0cihzdGF0dXMsICJub3QtaW5zdGFsbGVkIikpCisJICAgIGNvbnRpbnVlOworCisgICAgICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc25wcmludGYoIGVudHJ5LT5zd05hbWUsIHNpemVvZihlbnRyeS0+c3dOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLSVzIiwgcGFja2FnZSwgdmVyc2lvbik7CisJaWYgKGVudHJ5LT5zd05hbWVfbGVuID49IHNpemVvZihlbnRyeS0+c3dOYW1lKSkKKwkgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKyAgICAgICAgZW50cnktPnN3VHlwZSA9IChzdHJjbXAoZXNzZW50aWFsLCAieWVzIikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgICAgIC8qIG9wZXJhdGluZ1N5c3RlbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgOiA0OyAgICAgLyogIGFwcGxpY2F0aW9uICAgICovCisKKyAgICAgICAgZW50cnktPnN3RGF0ZV9sZW4gPSA4OworCW1lbWNweShlbnRyeS0+c3dEYXRlLCAiXDBcMFwxXDFcMFwwXDBcMCIsIDgpOworICAgIH0KKyAgICBwY2xvc2UocCk7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludCkgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDczNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYwpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIHN3aW5zdC5jIDogaHJTV0luc3RhbGxlZFRhYmxlIGRhdGEgYWNjZXNzCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIF9fQVBQTEVfQVBJX0VWT0xWSU5HIDEKKyNpbmNsdWRlIDxzeXMvYWNsLmg+IC8qIG9yIGVsc2UgQ29yZUZvdW5kYXRpb24uaCBiYXJmcyAqLworI3VuZGVmIF9fQVBQTEVfQVBJX0VWT0xWSU5HIAorCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2RpcmVjdG9yeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludCBfYWRkX2FwcGxpY2F0aW9uc19pbl9kaXIobmV0c25tcF9jb250YWluZXIgKiwgY29uc3QgY2hhciogcGF0aCk7CitzdGF0aWMgaW50MzJfdCBfaW5kZXg7CitzdGF0aWMgaW50IF9jaGVja19idW5kbGVkX2FwcChDRlVSTFJlZiBjdXJyZW50VVJMLCBDRlN0cmluZ1JlZiAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmICppbmZvLCBjb25zdCBjaGFyKiBwYXRoKTsKK3N0YXRpYyBpbnQgX2NoZWNrX2NsYXNzaWNfYXBwKENGVVJMUmVmIGN1cnJlbnRVUkwsIENGU3RyaW5nUmVmICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgKmluZm8sIGNvbnN0IGNoYXIqIHBhdGgpOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpkaXJzID0gTlVMTDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCggdm9pZCApCit7CisgICAgc3RydWN0IHN0YXQgc3RhdF9idWY7CisgICAgY29uc3QgY2hhciAqZGVmYXVsdF9kaXJzW10gPSB7CisgICAgICAgICIvQXBwbGljYXRpb25zIiwKKyAgICAgICAgIi9BcHBsaWNhdGlvbnMgKE1hYyBPUyA5KSIsCisgICAgICAgICIvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzIiwKKyAgICAgICAgIi9TeXN0ZW0vTGlicmFyeS9FeHRlbnNpb25zIiwKKyAgICAgICAgIi9TeXN0ZW0vTGlicmFyeS9TZXJ2aWNlcyIKKyNpZmRlZiBURVNUCisgICAgICAgICwgIi9EZXZlbG9wZXIvQXBwbGljYXRpb25zIgorICAgICAgICAsICIvVm9sdW1lcy9hdWRYL0FwcGxpY2F0aW9ucyAoTWFjIE9TIDkpIgorI2VuZGlmCisgICAgfTsKKyAgICBpbnQgaSwgY291bnQgPSBzaXplb2YoZGVmYXVsdF9kaXJzKS9zaXplb2YoZGVmYXVsdF9kaXJzWzBdKTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXIsIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChOVUxMID09IGRpcnMpIHsKKyAgICAgICAgZGlycyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImRpcmVjdG9yeV9jb250YWluZXI6Y3N0cmluZyIpOworICAgICAgICBpZiAoTlVMTCA9PSBkaXJzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgYWxsb2NhdGUgY29udGFpbmVyIGZvciBkaXIgbGlzdFxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGlycy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImRpcmVjdG9yeSBzZWFyY2ggbGlzdCIpOworICAgICAgICBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChkaXJzLCAxLCBDT05UQUlORVJfS0VZX1VOU09SVEVEKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFkZCBkaXJzCisgICAgICovCisgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBjaGFyICogICAgICB0bXA7CisgICAgICAgIC8qKiB4eHg6IGdldC9zYXZlIHRoZSBsYXN0IG1vZCBkYXRlPyAqLworICAgICAgICBpZigtMSA9PSBzdGF0KGRlZmF1bHRfZGlyc1tpXSwgJnN0YXRfYnVmKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJza2lwcGluZyBkaXIgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2RpcnNbaV0pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAiYWRkaW5nIGRpciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZGlyc1tpXSkpOworICAgICAgICB0bXAgPSBzdHJkdXAoZGVmYXVsdF9kaXJzW2ldKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdG1wKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJzdHJkdXAgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoZGlycywgdG1wKTsKKyAgICB9Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24oIHZvaWQgKQoreworICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGRpcnMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQKK25ldHNubXBfc3dpbnN0X2FyY2hfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MgKQoreworICAgIG5ldHNubXBfaXRlcmF0b3IgICAqaXQ7CisgICAgY29uc3QgY2hhciAgICAgICAgICpkaXI7CisgICAgaW50ICAgICAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAibG9hZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gZGlycykgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIm5vIGRpcnMgdG8gc2NhbiFcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIF9pbmRleCA9IDA7CisgICAgCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoZGlycyk7CisgICAgZm9yIChkaXIgPSBJVEVSQVRPUl9GSVJTVChpdCk7IGRpcjsgZGlyID0gSVRFUkFUT1JfTkVYVChpdCkpIHsKKyAgICAgICAgcmMgPSBfYWRkX2FwcGxpY2F0aW9uc19pbl9kaXIoY29udGFpbmVyLCBkaXIpOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgImxvYWRlZCAlZCBhcHBzXG4iLF9pbmRleCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitfZHVtcF9mbGFncyh1X2xvbmcgZmxhZ3MpCit7CisgICAgc3RhdGljIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGNoYXIqbmFtZTsKKyAgICAgICAgdV9sb25nIGJpdHM7CisgICAgfSBuYW1lc1tdID0geworICAgICAgICB7ICJrTFNJdGVtSW5mb0lzUGxhaW5GaWxlIiwgMHgwMDAwMDAwMSB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzUGFja2FnZSIsIDB4MDAwMDAwMDIgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc0FwcGxpY2F0aW9uIiwgMHgwMDAwMDAwNCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQ29udGFpbmVyIiwgMHgwMDAwMDAwOCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQWxpYXNGaWxlIiwgMHgwMDAwMDAxMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzU3ltbGluayIsIDB4MDAwMDAwMjAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc0ludmlzaWJsZSIsIDB4MDAwMDAwNDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc05hdGl2ZUFwcCIsIDB4MDAwMDAwODAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc0NsYXNzaWNBcHAiLCAweDAwMDAwMTAwIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvQXBwUHJlZmVyc05hdGl2ZSIsIDB4MDAwMDAyMDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9BcHBQcmVmZXJzQ2xhc3NpYyIsIDB4MDAwMDA0MDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9BcHBJc1NjcmlwdGFibGUiLCAweDAwMDAwODAwIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNWb2x1bWUiLCAweDAwMDAxMDAwIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvRXh0ZW5zaW9uSXNIaWRkZW4iLCAweDAwMTAwMDAwIH0KKyAgICB9OworICAgIGludCBpLCBjb3VudCA9IHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKTsKKworICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgbmFtZXNbaV0uYml0cykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbjpmbGFncyIsICJcdCVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBuYW1lc1tpXS5uYW1lKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19hZGRfYXBwbGljYXRpb25zX2luX2RpcihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBjb25zdCBjaGFyKiBwYXRoKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICAqZmlsZXM7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICppdDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgKmZpbGU7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc3RhdAkgICAgICAgIHN0YXRfYnVmOworICAgIHNpemVfdCAgICAgICAgICAgICAgZGF0ZV9sZW47CisgICAgdV9jaGFyICAgICAgICAgICAgICpkYXRlX2J1ZjsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIENGU3RyaW5nUmVmICAgICAgICAgY3VycmVudFBhdGggPSBOVUxMOworICAgIENGVVJMUmVmICAgICAgICAgICAgY3VycmVudFVSTCA9IE5VTEw7CisgICAgTFNJdGVtSW5mb1JlY29yZCAgICBpdGVtSW5mb1JlY29yZDsKKyAgICBDRlN0cmluZ1JlZiAgICAgICAgIHByb2ROYW1lID0gTlVMTDsKKyAgICBDRlN0cmluZ1JlZiAgICAgICAgIHZlcnNpb24gPSBOVUxMOworICAgIAorICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAiIGFkZGluZyBmaWxlcyBmcm9tICVzXG4iLCBwYXRoKSk7CisgICAgZmlsZXMgPSBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZChOVUxMLCBwYXRoLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBmaWxlcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic3dpbnN0OiBjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgJXNcbiIsIHBhdGgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoZmlsZXMpOworICAgIGlmIChOVUxMID09IGl0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yXG4iKTsKKyAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoZmlsZXMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZvciAoZmlsZSA9IElURVJBVE9SX0ZJUlNUKGl0KTsKKyAgICAgICAgIGZpbGU7CisgICAgICAgICBmaWxlID0gSVRFUkFUT1JfTkVYVChpdCksCisgICAgICAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRQYXRoKSwKKyAgICAgICAgICAgICBDRlJlbGVhc2UoY3VycmVudFVSTCkpIHsKKworICAgICAgICBpbnQgICAgICAgICAgICAgICAgIHJjMiA9IDA7CisgICAgICAgIAorICAgICAgICBjdXJyZW50UGF0aCA9CisgICAgICAgICAgICBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgICAgIGN1cnJlbnRVUkwgPQorICAgICAgICAgICAgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY3VycmVudFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgdHJ1ZSk7IAorICAgICAgICBMU0NvcHlJdGVtSW5mb0ZvclVSTChjdXJyZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFNSZXF1ZXN0QmFzaWNGbGFnc09ubHl8a0xTUmVxdWVzdEFwcFR5cGVGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW1JbmZvUmVjb3JkKTsgCisgICAgICAgIGlmKCgwID09IGl0ZW1JbmZvUmVjb3JkLmZsYWdzKSB8fAorICAgICAgICAgICAoa0xTSXRlbUluZm9Jc1BsYWluRmlsZSA9PSBpdGVtSW5mb1JlY29yZC5mbGFncykgfHwKKyAgICAgICAgICAgKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0ludmlzaWJsZSkgfHwKKyAgICAgICAgICAgKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0FsaWFzRmlsZSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qKiByZWN1cnNlIG9uIG5vbi1hcHBsaWNhdGlvbiBjb250YWluZXJzIChpLmUuIGRpcmVjdG9yeSkgKi8KKyAgICAgICAgaWYgKChpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNDb250YWluZXIpICYmCisgICAgICAgICAgICAoIShpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNBcHBsaWNhdGlvbikpKSB7CisgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZChmaWxlcywgZmlsZSwgMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICB9CisKKyAgICAgICAgLyoqIHNraXAgYW55IG90aGVyIG5vbi1hcHBsaWNhdGlvbiBmaWxlcyAqLworICAgICAgICBpZiAoIShpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNBcHBsaWNhdGlvbikpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgIH0KKworICAgICAgICBpZiAoKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc1BhY2thZ2UpIHx8ICAgICAgICAgICAKKyAgICAgICAgICAgIChpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNDb250YWluZXIpKSB7CisgICAgICAgICAgICByYzIgPSBfY2hlY2tfYnVuZGxlZF9hcHAoY3VycmVudFVSTCwgJnByb2ROYW1lLCAmdmVyc2lvbiwgZmlsZSk7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgaWYgKChpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNDbGFzc2ljQXBwKSB8fAorICAgICAgICAgICAgICAgICAoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzUGxhaW5GaWxlKSkgeworICAgICAgICAgICAgcmMyID0gX2NoZWNrX2NsYXNzaWNfYXBwKGN1cnJlbnRVUkwsICZwcm9kTmFtZSwgJnZlcnNpb24sIGZpbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwic3dpbnN0IHNob3VsZG4ndCBnZXQgaGVyZTogJXNcbiIsIGZpbGUpOworICAgICAgICAgICAgX2R1bXBfZmxhZ3MoaXRlbUluZm9SZWNvcmQuZmxhZ3MpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjMikgeyAvKiBub3QgYW4gYXBwLiBpZiBkaXJlY3RvcnksIHJlY3Vyc2U7IGVsc2UgY29udGludWUgKi8KKyAgICAgICAgICAgIF9kdW1wX2ZsYWdzKGl0ZW1JbmZvUmVjb3JkLmZsYWdzKTsKKyAgICAgICAgICAgIGlmICgxID09IHJjMikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZChmaWxlcywgZmlsZSwgMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxsb2NhdGUgZW50cnkKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKCsrX2luZGV4KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBzd2luc3QgZW50cnlcbiIpOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHByb2ROYW1lKTsKKyAgICAgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHZlcnNpb24pOworICAgICAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRQYXRoKTsKKyAgICAgICAgICAgIENGUmVsZWFzZShjdXJyZW50VVJMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPQorICAgICAgICAgICAgc25wcmludGYoZW50cnktPnN3TmFtZSwgc2l6ZW9mKGVudHJ5LT5zd05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgIiVzICVzIiwgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKHByb2ROYW1lLDApLAorICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKHZlcnNpb24sMCkpOworCWlmIChlbnRyeS0+c3dOYW1lX2xlbiA+PSBzaXplb2YoZW50cnktPnN3TmFtZSkpCisJICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpLTE7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJcdCVzICVzXG4iLCBmaWxlLCBlbnRyeS0+c3dOYW1lKSk7CisKKyAgICAgICAgLyoqIGdldCB0aGUgbGFzdCBtb2QgZGF0ZSAqLworICAgICAgICBpZihzdGF0KGZpbGUsICZzdGF0X2J1ZikgIT0gLTEpIHsKKyAgICAgICAgICAgIGRhdGVfYnVmID0gZGF0ZV9uX3RpbWUoJnN0YXRfYnVmLnN0X210aW1lLCAmZGF0ZV9sZW4pOworICAgICAgICAgICAgZW50cnktPnN3RGF0ZV9sZW4gPSBkYXRlX2xlbjsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+c3dEYXRlLCBkYXRlX2J1ZiwgZW50cnktPnN3RGF0ZV9sZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgICAgICBlbnRyeSA9IE5VTEw7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHByb2ROYW1lKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UodmVyc2lvbik7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGZpbGVzKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorX2NoZWNrX2J1bmRsZWRfYXBwKENGVVJMUmVmIGN1cnJlbnRVUkwsIENGU3RyaW5nUmVmICpwcm9kTmFtZSwKKyAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiAqdmVyc2lvbiwgY29uc3QgY2hhciogZmlsZSkKK3sKKyAgICBDRkJ1bmRsZVJlZiAgICAgICAgIHRoZUJ1bmRsZSA9IE5VTEw7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmICAgICBpbmZvRGljdCA9IE5VTEw7CisgICAgICAgICAgICAKKyAgICBpZiAoKE5VTEwgPT0gcHJvZE5hbWUpIHx8IChOVUxMID09IHZlcnNpb24pKQorICAgICAgIHJldHVybiAtMTsKKworICAgIHRoZUJ1bmRsZSA9IENGQnVuZGxlQ3JlYXRlIChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjdXJyZW50VVJMKTsKKyAgICBpZih0aGVCdW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOyAvKiBub3QgYSBidW5kbGUgKi8KKworICAgIGluZm9EaWN0ID0gQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeSh0aGVCdW5kbGUpOworICAgIGlmKDAgPT0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoaW5mb0RpY3QpKSB7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHRoZUJ1bmRsZSk7CisgICAgICAgIHJldHVybiAxOyAvKiBkaXJlY3RvcnkgKi8KKyAgICB9CisKKyAgICAqcHJvZE5hbWUgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwgQ0ZTVFIoIkNGQnVuZGxlTmFtZSIpKTsKKyAgICBpZiAoTlVMTCA9PSAqcHJvZE5hbWUpIHsKKyAgICAgICAgKnByb2ROYW1lID0gKENGU3RyaW5nUmVmKQorICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LCBDRlNUUigiQ0ZCdW5kbGVEaXNwbGF5TmFtZSIpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gKnByb2ROYW1lKSB7CisgICAgICAgICAgICAqcHJvZE5hbWUgPSAoQ0ZTdHJpbmdSZWYpIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTVFIoIkNGQnVuZGxlRXhlY3V0YWJsZSIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihOVUxMID09ICpwcm9kTmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIlx0bWlzc2luZyBuYW1lOiAlc1xuIixmaWxlKSk7CisgICAgICAgIC8qQ0ZTaG93KGluZm9EaWN0KTsqLworICAgICAgICBTTk1QX0NGUmVsZWFzZSh0aGVCdW5kbGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgKnZlcnNpb24gPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwgQ0ZTVFIoIkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIikpOworICAgIGlmKE5VTEwgPT0gKnZlcnNpb24pIHsKKyAgICAgICAgKnZlcnNpb24gPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoaW5mb0RpY3QsIENGU1RSKCJDRkJ1bmRsZVZlcnNpb24iKSk7CisgICAgICAgIGlmICgqdmVyc2lvbiA9PSBOVUxMKSAKKyAgICAgICAgICAgICp2ZXJzaW9uID0gKENGU3RyaW5nUmVmKSBDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoaW5mb0RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGU1RSKCJDRkJ1bmRsZUdldEluZm9TdHJpbmciKSk7CisgICAgfQorICAgIGlmKE5VTEwgPT0gKnZlcnNpb24pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJcdG1pc3NpbmcgdmVyc2lvbjogJXNcbiIsZmlsZSkpOworICAgICAgICAvKkNGU2hvdyhpbmZvRGljdCk7Ki8KKyAgICAgICAgU05NUF9DRlJlbGVhc2UodGhlQnVuZGxlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBpZih0aGVCdW5kbGUgIT0gTlVMTCkgeworICAgICAgICBDRlJldGFpbigqcHJvZE5hbWUpOworICAgICAgICBDRlJldGFpbigqdmVyc2lvbik7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHRoZUJ1bmRsZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfY2hlY2tfY2xhc3NpY19hcHAoQ0ZVUkxSZWYgY3VycmVudFVSTCwgQ0ZTdHJpbmdSZWYgKnByb2ROYW1lLAorICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmICp2ZXJzaW9uLCBjb25zdCBjaGFyKiBmaWxlKQoreworICAgIC8qCisgICAgICogZ2V0IGluZm8gZm9yIGNsYXNzaWMgb3Igc2luZ2xlLWZpbGUgYXBwcworICAgICAqLworICAgIEZTUmVmIHRoZUZTUmVmOworICAgIGludCB0aGVSZXNGaWxlOworCisgICAgaWYgKChOVUxMID09IHByb2ROYW1lKSB8fCAoTlVMTCA9PSB2ZXJzaW9uKSkKKyAgICAgICByZXR1cm4gLTE7CisKKyAgICAqcHJvZE5hbWUgPSBDRlVSTENvcHlMYXN0UGF0aENvbXBvbmVudChjdXJyZW50VVJMKTsKKyAgICBpZiAoISBDRlVSTEdldEZTUmVmKGN1cnJlbnRVUkwsICZ0aGVGU1JlZikpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJHZXRGU1JlZiBmYWlsZWQ6ICVzXG4iLCBmaWxlKSk7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKCpwcm9kTmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdGhlUmVzRmlsZSA9IEZTT3BlblJlc0ZpbGUoJnRoZUZTUmVmLCBmc1JkUGVybSk7CisgICAgaWYgKFJlc0Vycm9yKCkgIT0gbm9FcnIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJGU09wZW5SZXNGaWxlIGZhaWxlZDogJXNcbiIsIGZpbGUpKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UoKnByb2ROYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBWZXJzUmVjSG5kbCB2ZXJzSGFuZGxlID0gKFZlcnNSZWNIbmRsKUdldDFJbmRSZXNvdXJjZSgndmVycycsIDEpOworICAgIGlmICh2ZXJzSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgKnZlcnNpb24gPSBDRlN0cmluZ0NyZWF0ZVdpdGhQYXNjYWxTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgKCoqdmVyc0hhbmRsZSkuc2hvcnRWZXJzaW9uLCBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgaWYgKCp2ZXJzaW9uID09IE5VTEwpIHsKKyAgICAgICAgICAgIFN0cmluZ1B0ciBsb25nVmVyc2lvblB0ciA9ICgqKnZlcnNIYW5kbGUpLnNob3J0VmVyc2lvbjsKKyAgICAgICAgICAgIGxvbmdWZXJzaW9uUHRyID0gKFN0cmluZ1B0cikoKChQdHIpIGxvbmdWZXJzaW9uUHRyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICsgKCh1bnNpZ25lZCBjaGFyKSAqbG9uZ1ZlcnNpb25QdHIpKTsKKyAgICAgICAgICAgICp2ZXJzaW9uID0gQ0ZTdHJpbmdDcmVhdGVXaXRoUGFzY2FsU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdWZXJzaW9uUHRyLCAga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbik7CisgICAgICAgIH0KKyAgICAgICAgUmVsZWFzZVJlc291cmNlKChIYW5kbGUpdmVyc0hhbmRsZSk7CisgICAgfQorICAgIENsb3NlUmVzRmlsZSh0aGVSZXNGaWxlKTsKKyAgICBpZigqdmVyc2lvbiA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLAorICAgICAgICAgICAgICAgICAgICAiXHRtaXNzaW5nIGNsYXNzaWMvZmlsZSB2ZXJzaW9uOiAlc1xuIiwgZmlsZSkpOworICAgICAgICBTTk1QX0NGUmVsZWFzZSgqcHJvZE5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmOTE1OAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogc3dpbnN0X251bGwuYzoKKyAqICAgICBoclNXSW5zdGFsbGVkVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgZHVtbXkgaW50ZXJmYWNlIGZvciBub24tc3VwcG9ydGVkIHN5c3RlbXMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bih2b2lkKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfc3dpbnN0X2FyY2hfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6bG9hZDphcmNoIiwiIGxvYWRlZCAlIiBORVRTTk1QX1BSSXogImQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTIyY2IxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogc3dpbnN0X3BrZ2luZm8uYzoKKyAqICAgICBoclNXSW5zdGFsbGVkVGFibGUgZGF0YSBhY2Nlc3M6CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BLR0xPQ1NfSAorI2luY2x1ZGUgPHBrZ2xvY3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtHSU5GT19ICisjaW5jbHVkZSA8cGtnaW5mby5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BLR19ICisjZGVmaW5lIHJlc3RyaWN0CisjaW5jbHVkZSA8cGtnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKworICAgLyoKKyAgICAqIExvY2F0aW9uIG9mIHBhY2thZ2UgZGlyZWN0b3J5LgorICAgICogVXNlZCBmb3I6CisgICAgKiAgICAtIHJlcG9ydGluZyBoclNXSW5zdGFsbGVkTGFzdCogb2JqZWN0cworICAgICogICAgLSBkZXRlY3Rpbmcgd2hlbiB0aGUgY2FjaGVkIGNvbnRlbnRzIGFyZSBvdXQgb2YgZGF0ZS4KKyAgICAqLworY2hhciBwa2dfZGlyZWN0b3J5W1NOTVBfTUFYUEFUSF07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKFBLR0xPQykKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiJXMiLCBQS0dMT0MgKTsKKyNlbGlmIGRlZmluZWQoaHB1eDkpCisgICAgc25wcmludGYoIHBrZ19kaXJlY3RvcnksIFNOTVBfTUFYUEFUSCwgIi9zeXN0ZW0iICk7CisjZWxpZiBkZWZpbmVkKGhwdXgxMCkgfHwgIGRlZmluZWQoaHB1eDExKSAKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3Zhci9hZG0vc3cvcHJvZHVjdHMiICk7CisjZWxpZiBkZWZpbmVkKGZyZWVic2QyKSB8fCBkZWZpbmVkKG9wZW5ic2QpCisgICAgc25wcmludGYoIHBrZ19kaXJlY3RvcnksIFNOTVBfTUFYUEFUSCwgIi92YXIvZGIvcGtnIiApOworI2VsaWYgZGVmaW5lZChsaW51eCkKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3Zhci9jYWNoZS9ocm1pYiIgKTsKKyNlbHNlCisgICAgcGtnX2RpcmVjdG9yeVswXSA9ICdcMCc7CisgICAgc25tcF9sb2coIExPR19FUlIsICJTV0luc3Q6IE5vIHBhY2thZ2UgZGlyZWN0b3J5XG4iICk7CisjZW5kaWYKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6aW5pdDphcmNoIiwiIHBhY2thZ2UgZGlyZWN0b3J5ID0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19kaXJlY3RvcnkpKTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24odm9pZCkKK3sKKyAgICBwa2dfZGlyZWN0b3J5WzBdID0gJ1wwJzsKKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfc3dpbnN0X2FyY2hfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgICAgICAgKmQ7CisgICAgc3RydWN0IGRpcmVudCAgICAgICAgKmRwOworICAgIHN0cnVjdCBzdGF0ICAgICAgICAgICBzdGF0X2J1ZjsKKyNpZmRlZiBIQVZFX1BLR0lORk8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAqdiwgKmM7CisjZW5kaWYKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgYnVmWyBCVUZTSVogXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAqY3A7CisgICAgdGltZV90ICAgICAgICAgICAgICAgIGluc3RhbGxfdGltZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgZGF0ZV9sZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGkgPSAxOworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeTsKKyNpZmRlZiBIQVZFX0xJQlBLRworICAgIHN0cnVjdCBwa2dkYiAqZGIgPSBOVUxMOworICAgIHN0cnVjdCBwa2dkYl9pdCAqaXQgPSBOVUxMOworICAgIHN0cnVjdCBwa2cgKnBrZyA9IE5VTEw7CisgICAgY2hhciBwa2duYW1lWyBTTk1QX01BWFBBVEggXTsKKyAgICBjaGFyIHBrZ2RhdGVbIEJVRlNJWiBdOworICAgIGludCBwa2duZyA9IDA7CisKKyAgICBpZiAocGtnX2luaXQoTlVMTCwgTlVMTCkpIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJTV0luc3Q6IGVycm9yIGluaXRpYWxpemluZyBwa2duZyBkYlxuIiApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAocGtnZGJfb3BlbigmZGIsIFBLR0RCX0RFRkFVTFQpICE9IEVQS0dfT0spIHsKKwlzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogZXJyb3Igb3BlbmluZyBwa2duZyBkYlxuIiApOworCXJldHVybiAxOworICAgIH0KKworICAgIGlmIChwa2dfc3RhdHVzKE5VTEwpID09IFBLR19TVEFUVVNfQUNUSVZFKSB7CisJcGtnbmcgPSAxOworICAgIH0gZWxzZSB7CisJc25tcF9sb2coIExPR19JTkZPLCAiU1dJbnN0OiBub3QgYSBwa2duZyBzeXN0ZW1cbiIgKTsKKyAgICB9CisKKyAgICAvKiBpZiB3ZSBhcmUgdXNpbmcgRnJlZUJTRCdzIHBrZ25nICovCisgICAgaWYgKHBrZ25nKSB7CisgICAgICAgIGlmICgoaXQgPSBwa2dkYl9xdWVyeShkYiwgTlVMTCwgTUFUQ0hfQUxMKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJTV0luc3Q6IGVycm9yIHF1ZXJ5aW5nIHBrZ25nIGRiXG4iICk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChwa2dkYl9pdF9uZXh0KGl0LCAmcGtnLCBQS0dfTE9BRF9CQVNJQykgPT0gRVBLR19PSykgeworICAgICAgICAgICAgcGtnX3NucHJpbnRmKHBrZ25hbWUsIHNpemVvZihwa2duYW1lKSwgIiVuLSV2IiwgcGtnLCBwa2cpOworICAgICAgICAgICAgcGtnX3NucHJpbnRmKHBrZ2RhdGUsIHNpemVvZihwa2dkYXRlKSwgIiV0IiwgcGtnKTsKKworICAgICAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoIGkrKyApOworCisgICAgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworCisgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwa2duYW1lICk7CisgICAgICAgICAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpLTE7CisKKyAgICAgICAgICAgIGluc3RhbGxfdGltZSA9IGF0b2kocGtnZGF0ZSk7CisgICAgICAgICAgICBjcCA9IGRhdGVfbl90aW1lKCAmaW5zdGFsbF90aW1lLCAmZGF0ZV9sZW4gKTsKKyAgICAgICAgICAgIG1lbWNweSggZW50cnktPnN3RGF0ZSwgY3AsIGRhdGVfbGVuICk7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworICAgICAgICB9CisKKyAgICAgICAgcGtnZGJfaXRfZnJlZShpdCk7CisgICAgICAgIHBrZ2RiX2Nsb3NlKGRiKTsKKyAgICAgICAgcGtnX3NodXRkb3duKCk7CisgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBIQVZFX0xJQlBLRyAqLworICAgICAgICBpZiAoICFwa2dfZGlyZWN0b3J5WzBdICkgeworICAgICAgICAgICAgcmV0dXJuIDE7ICAgIC8qIENhbid0IHJlcG9ydCBpbnN0YWxsZWQgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGVyZSBpc24ndCBhIGxpc3Qgb2YgdGhlbSEgKi8KKyAgICAgICAgfQorCisgICAgICAgIGQgPSBvcGVuZGlyKCBwa2dfZGlyZWN0b3J5ICk7CisgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoICcuJyA9PSBkcC0+ZF9uYW1lWzBdICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNucHJpbnRmKCBidWYsIEJVRlNJWiwgIiVzLyVzIiwgcGtnX2RpcmVjdG9yeSwgZHAtPmRfbmFtZSApOworICAgICAgICAgICAgaWYgKHN0YXQoIGJ1ZiwgJnN0YXRfYnVmICkgPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoIGkrKyApOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyNpZmRlZiBIQVZFX1BLR0lORk8KKwkgICAgdiA9IHBrZ3BhcmFtKCBkcC0+ZF9uYW1lLCAiVkVSU0lPTiIgKTsKKwkgICAgYyA9IHBrZ3BhcmFtKCBkcC0+ZF9uYW1lLCAiQ0FURUdPUlkiICk7CisKKwkgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzbnByaW50ZiggZW50cnktPnN3TmFtZSwgc2l6ZW9mKGVudHJ5LT5zd05hbWUpLAorCQkJCQkgICIlcy0lcyIsIGRwLT5kX25hbWUsIHYgKTsKKwkgICAgaWYgKGVudHJ5LT5zd05hbWVfbGVuID49IHNpemVvZihlbnRyeS0+c3dOYW1lKSkKKwkJZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKwkgICAgZW50cnktPnN3VHlwZSA9IChOVUxMICE9IHN0cnN0ciggYywgInN5c3RlbSIpKQorCQkJICAgID8gMiAgICAgIC8qIG9wZXJhdGluZ1N5c3RlbSAqLworCQkJICAgIDogNDsgICAgIC8qICBhcHBsaWNhdGlvbiAgICAqLworCisJICAgIC8qIERvIHdlIG5lZWQgdG8gZnJlZSAndicgJiAnYycgPz8/ICovCisjZWxzZQorCSAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisJCQkJCSAgIiVzIiwgZHAtPmRfbmFtZSApOworCSAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorCQllbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKS0xOworCisJICAgIC8qIG5vIGluZm9ybWF0aW9uIGFib3V0IE8vUyB2cyBhcHBsaWNhdGlvbiBwYWNrYWdlcyA/Pz8gKi8KKyNlbmRpZgorCisJICAgIGluc3RhbGxfdGltZSA9IHN0YXRfYnVmLnN0X210aW1lOworCSAgICBjcCA9IGRhdGVfbl90aW1lKCAmaW5zdGFsbF90aW1lLCAmZGF0ZV9sZW4gKTsKKwkgICAgbWVtY3B5KCBlbnRyeS0+c3dEYXRlLCBjcCwgZGF0ZV9sZW4gKTsKKwkgICAgZW50cnktPnN3RGF0ZV9sZW4gPSBkYXRlX2xlbjsKKwl9CisJY2xvc2VkaXIoIGQgKTsKKyNpZmRlZiBIQVZFX0xJQlBLRworICAgIH0KKyNlbmRpZgorCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1OTViZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogc3dpbnN0X3JwbS5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9SUE1fUlBNTElCX0gKKyNpbmNsdWRlIDxycG0vcnBtbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1JQTV9SUE1MSUJfSAorI2luY2x1ZGUgPHJwbS9oZWFkZXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUlBNR0VUUEFUSAkJLyogSEFWRV9SUE1fUlBNTUFDUk9fSCAqLworI2luY2x1ZGUgPHJwbS9ycG1tYWNyby5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9SUE1fUlBNVFNfSAorI2luY2x1ZGUgPHJwbS9ycG10cy5oPgorI2luY2x1ZGUgPHJwbS9ycG1kYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCisKKyAgIC8qCisgICAgKiBMb2NhdGlvbiBvZiBSUE0gcGFja2FnZSBkaXJlY3RvcnkuCisgICAgKiBVc2VkIGZvcjoKKyAgICAqICAgIC0gcmVwb3J0aW5nIGhyU1dJbnN0YWxsZWRMYXN0KiBvYmplY3RzCisgICAgKiAgICAtIGRldGVjdGluZyB3aGVuIHRoZSBjYWNoZWQgY29udGVudHMgYXJlIG91dCBvZiBkYXRlLgorICAgICovCitjaGFyIHBrZ19kaXJlY3RvcnlbU05NUF9NQVhQQVRIXTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCh2b2lkKQoreworICAgIGNoYXIgICAgICAgICpycG1kYnBhdGggPSBOVUxMOworICAgIGNvbnN0IGNoYXIgICpkYnBhdGg7CisgICAgc3RydWN0IHN0YXQgIHN0YXRfYnVmOworCisjaWZkZWYgSEFWRV9SUE1HRVRQQVRICisgICAgcnBtUmVhZENvbmZpZ0ZpbGVzKCBOVUxMLCBOVUxMICk7CisgICAgcnBtZGJwYXRoID0gcnBtR2V0UGF0aCggIiV7X2RicGF0aH0iLCBOVUxMICk7CisgICAgZGJwYXRoID0gcnBtZGJwYXRoOworI2Vsc2UKKyAgICBkYnBhdGggPSAiL3Zhci9saWIvcnBtIjsgICAvKiBNb3N0IGxpa2VseSAqLworI2VuZGlmCisKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiJXMvUGFja2FnZXMiLCBkYnBhdGggKTsKKyAgICBTTk1QX0ZSRUUocnBtZGJwYXRoKTsKKyAgICBkYnBhdGggPSBOVUxMOworICAgIGlmICgtMSA9PSBzdGF0KCBwa2dfZGlyZWN0b3J5LCAmc3RhdF9idWYgKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2FuJ3QgZmluZCBkaXJlY3Rvcnkgb2YgUlBNIHBhY2thZ2VzIik7CisgICAgICAgIHBrZ19kaXJlY3RvcnlbMF0gPSAnXDAnOworICAgIH0KK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bih2b2lkKQoreworICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBycG10cyAgICAgICAgICAgICAgICAgdHM7CisKKyAgICBycG1kYk1hdGNoSXRlcmF0b3IgICAgbWk7CisgICAgSGVhZGVyICAgICAgICAgICAgICAgIGg7CisgICAgY2hhciAgICAgICAgICAgICAgICAgKm4sICp2LCAqciwgKmc7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgKnQ7CisgICAgdGltZV90ICAgICAgICAgICAgICAgIGluc3RhbGxfdGltZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgZGF0ZV9sZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGkgPSAxOworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeTsKKworICAgIHRzID0gcnBtdHNDcmVhdGUoKTsKKyAgICBycG10c1NldFZTRmxhZ3MoIHRzLCAoX1JQTVZTRl9OT1NJR05BVFVSRVN8X1JQTVZTRl9OT0RJR0VTVFMpKTsKKworICAgIG1pID0gcnBtdHNJbml0SXRlcmF0b3IoIHRzLCBSUE1EQklfUEFDS0FHRVMsIE5VTEwsIDApOworICAgIGlmIChtaSA9PSBOVUxMKQorCU5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgInJwbWRiT3BlbigpIGZhaWxlZFxuIikpOworCisgICAgd2hpbGUgKE5VTEwgIT0gKGggPSBycG1kYk5leHRJdGVyYXRvciggbWkgKSkpCisgICAgeworICAgICAgICBjb25zdCB1X2NoYXIgKmR0OworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICBoID0gaGVhZGVyTGluayggaCApOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX05BTUUsICAgICAgICBOVUxMLCAodm9pZCoqKSZuLCBOVUxMKTsKKyAgICAgICAgaGVhZGVyR2V0RW50cnkoIGgsIFJQTVRBR19WRVJTSU9OLCAgICAgTlVMTCwgKHZvaWQqKikmdiwgTlVMTCk7CisgICAgICAgIGhlYWRlckdldEVudHJ5KCBoLCBSUE1UQUdfUkVMRUFTRSwgICAgIE5VTEwsICh2b2lkKiopJnIsIE5VTEwpOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX0dST1VQLCAgICAgICBOVUxMLCAodm9pZCoqKSZnLCBOVUxMKTsKKyAgICAgICAgaGVhZGVyR2V0RW50cnkoIGgsIFJQTVRBR19JTlNUQUxMVElNRSwgTlVMTCwgKHZvaWQqKikmdCwgTlVMTCk7CisKKyAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzbnByaW50ZiggZW50cnktPnN3TmFtZSwgc2l6ZW9mKGVudHJ5LT5zd05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMtJXMtJXMiLCBuLCB2LCByKTsKKyAgICAgICAgaWYgKGVudHJ5LT5zd05hbWVfbGVuID4gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorICAgICAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSk7CisgICAgICAgIGVudHJ5LT5zd1R5cGUgPSAoTlVMTCAhPSBzdHJzdHIoIGcsICJTeXN0ZW0gRW52aXJvbm1lbnQiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgICAgIC8qIG9wZXJhdGluZ1N5c3RlbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgOiA0OyAgICAgLyogIGFwcGxpY2F0aW9uICAgICovCisKKyAgICAgICAgaW5zdGFsbF90aW1lID0gKnQ7CisgICAgICAgIGR0ID0gZGF0ZV9uX3RpbWUoICZpbnN0YWxsX3RpbWUsICZkYXRlX2xlbiApOworICAgICAgICBpZiAoZGF0ZV9sZW4gIT0gOCAmJiBkYXRlX2xlbiAhPSAxMSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkJvZ3VzIGxlbmd0aCBmcm9tIGRhdGVfbl90aW1lIGZvciAlcyIsIGVudHJ5LT5zd05hbWUpOworICAgICAgICAgICAgZW50cnktPnN3RGF0ZV9sZW4gPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW50cnktPnN3RGF0ZV9sZW4gPSBkYXRlX2xlbjsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+c3dEYXRlLCBkdCwgZW50cnktPnN3RGF0ZV9sZW4pOworICAgICAgICB9CisKKyAgICAgICAgaGVhZGVyRnJlZSggaCApOworICAgIH0KKyAgICBycG1kYkZyZWVJdGVyYXRvciggbWkgKTsKKyAgICBycG10c0ZyZWUoIHRzICk7CisKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmxvYWQ6YXJjaCIsICJsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGVhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiAgU3dydW4gTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkOiBzd3J1bi5jIDE1NzY4IDIwMDctMDEtMjIgMTY6MTg6MjlaIHJzdG9yeSAkCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzb2Z0d2FyZV9ydW5uaW5nLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN3cnVuX21heF9wcm9jZXNzZXMsIHNvZnR3YXJlX3J1bm5pbmcpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3dydW5fY291bnRfcHJvY2Vzc2VzX2J5X25hbWUsIHNvZnR3YXJlX3J1bm5pbmcpCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogbG9jYWwgc3RhdGljIHZhcnMKKyAqLworc3RhdGljIGludCBfc3dydW5faW5pdCA9IDA7CisgICAgICAgaW50IF9zd3J1bl9tYXggID0gMDsKK3N0YXRpYyBuZXRzbm1wX2NhY2hlICAgICAqc3dydW5fY2FjaGUgICAgID0gTlVMTDsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc3dydW5fY29udGFpbmVyID0gTlVMTDsKKworbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcih2b2lkKTsKK25ldHNubXBfY2FjaGUgICAgICogbmV0c25tcF9zd3J1bl9jYWNoZSAgICAodm9pZCk7CisKKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBfc3dydW5fZW50cnlfcmVsZWFzZShuZXRzbm1wX3N3cnVuX2VudHJ5ICogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCk7CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogZXh0ZXJuYWwgcGVyLWFyY2hpdGVjdHVyZSBmdW5jdGlvbnMgcHJvdG90eXBlcworICoKKyAqIFRoZXNlIHNob3VsZG4ndCBiZSBjYWxsZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljLCBzbyB0aGV5IGFyZW4ndCBpbgorICogdGhlIGhlYWRlciBmaWxlLgorICovCitleHRlcm4gdm9pZCBuZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKKworLyoqCisgKiBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitpbml0X3N3cnVuKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmFjY2VzcyIsICJpbml0XG4iKSk7CisKKyAgICBpZiAoMSA9PSBfc3dydW5faW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3N3cnVuX2luaXQgPSAxOworCisgICAgKHZvaWQpbmV0c25tcF9zd3J1bl9jb250YWluZXIoKTsKKyAgICBuZXRzbm1wX2FyY2hfc3dydW5faW5pdCgpOworICAgICh2b2lkKSBuZXRzbm1wX3N3cnVuX2NhY2hlKCk7Cit9CisKK3ZvaWQKK3NodXRkb3duX3N3cnVuKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmFjY2VzcyIsICJzaHV0ZG93blxuIikpOworCit9CisKK2ludAorc3dydW5fY291bnRfcHJvY2Vzc2VzKCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoc3dydW5fY2FjaGUpOworICAgIHJldHVybiAoIHN3cnVuX2NvbnRhaW5lciA/IENPTlRBSU5FUl9TSVpFKHN3cnVuX2NvbnRhaW5lcikgOiAwICk7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9NQVhfUFJPQ0VTU0VTCitpbnQKK3N3cnVuX21heF9wcm9jZXNzZXMoIHZvaWQgKQoreworICAgIHJldHVybiBfc3dydW5fbWF4OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1dSVU5fTUFYX1BST0NFU1NFUyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1dSVU5fQ09VTlRfUFJPQ0VTU0VTX0JZX05BTUUKK2ludAorc3dydW5fY291bnRfcHJvY2Vzc2VzX2J5X25hbWUoIGNoYXIgKm5hbWUgKQoreworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdDsKKyAgICBpbnQgaSA9IDA7CisKKyAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoc3dydW5fY2FjaGUpOworICAgIGlmICggIXN3cnVuX2NvbnRhaW5lciB8fCAhbmFtZSApCisgICAgICAgIHJldHVybiAwOyAgICAvKiBvciAtMSAqLworCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoIHN3cnVuX2NvbnRhaW5lciApOworICAgIHdoaWxlICgoZW50cnkgPSAobmV0c25tcF9zd3J1bl9lbnRyeSopSVRFUkFUT1JfTkVYVCggaXQgKSkgIT0gTlVMTCkgeworICAgICAgICBpZiAoMCA9PSBzdHJjbXAoIGVudHJ5LT5oclNXUnVuTmFtZSwgbmFtZSApKQorICAgICAgICAgICAgaSsrOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKCBpdCApOworCisgICAgcmV0dXJuIGk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9DT1VOVF9QUk9DRVNTRVNfQllfTkFNRSAqLworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGNhY2hlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgIHZvaWQgKm1hZ2ljICkKK3sKKyAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBzd3J1bl9jb250YWluZXIsIDAgKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgIHZvaWQgKm1hZ2ljICkKK3sKKyAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKCBzd3J1bl9jb250YWluZXIgKTsKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogY3JlYXRlIHN3cnVuIGNhY2hlCisgKi8KK25ldHNubXBfY2FjaGUgKgorbmV0c25tcF9zd3J1bl9jYWNoZSh2b2lkKQoreworICAgIG9pZCAgICBoclNXUnVuVGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDQsIDIgfTsKKyAgICBzaXplX3QgaHJTV1J1blRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKGhyU1dSdW5UYWJsZV9vaWQpOworCisgICAgaWYgKCAhc3dydW5fY2FjaGUgKSB7CisgICAgICAgIHN3cnVuX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blRhYmxlX29pZCwgaHJTV1J1blRhYmxlX29pZF9sZW4pOworICAgICAgICBpZiAoc3dydW5fY2FjaGUpCisgICAgICAgICAgICBzd3J1bl9jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisgICAgfQorICAgIHJldHVybiBzd3J1bl9jYWNoZTsKK30KKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGNvbnRhaW5lciBmdW5jdGlvbnMKKyAqLworLyoqCisgKiBjcmVhdGUgc3dydW4gY29udGFpbmVyCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfc3dydW5fY29udGFpbmVyKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmNvbnRhaW5lciIsICJpbml0XG4iKSk7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVyLgorICAgICAqLworICBpZiAoIXN3cnVuX2NvbnRhaW5lcikgeworICAgIHN3cnVuX2NvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInN3cnVuOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IHN3cnVuX2NvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzd3J1bl9jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJzd3J1biBjb250YWluZXIiKTsKKyAgfQorCisgICAgcmV0dXJuIHN3cnVuX2NvbnRhaW5lcjsKK30KKworLyoqCisgKiBsb2FkIHN3cnVuIGluZm9ybWF0aW9uIGluIHNwZWNpZmllZCBjb250YWluZXIKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGVtcHR5IGNvbnRhaW5lciB0byBiZSBmaWxsZWQuCisgKiAgICAgICAgICAgICAgICAgIHBhc3MgTlVMTCB0byBoYXZlIHRoZSBmdW5jdGlvbiBjcmVhdGUgb25lLgorICogQHBhcmFtIGxvYWRfZmxhZ3MgZmxhZ3MgdG8gbW9kaWZ5IGJlaGF2aW91ci4gRXhhbXBsZXM6CisgKiAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NXUlVOX0FMTF9PUl9OT05FCisgKgorICogQHJldHZhbCBOVUxMICBlcnJvcgorICogQHJldHZhbCAhTlVMTCBwb2ludGVyIHRvIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lcioKK25ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIHVzZXJfY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIgPSB1c2VyX2NvbnRhaW5lcjsKKyAgICBpbnQgcmM7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyOmxvYWQiLCAibG9hZFxuIikpOworICAgIG5ldHNubXBfYXNzZXJ0KDEgPT0gX3N3cnVuX2luaXQpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQorICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3Igc3dydW5cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByYyA9ICBuZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKyAgICBpZiAoMCAhPSByYykgeworICAgICAgICBpZiAoTlVMTCA9PSB1c2VyX2NvbnRhaW5lcikgeworICAgICAgICAgICAgbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZShjb250YWluZXIsIE5FVFNOTVBfU1dSVU5fTk9GTEFHUyk7CisgICAgICAgICAgICBjb250YWluZXIgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX1NXUlVOX0FMTF9PUl9OT05FKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyOmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBkaXNjYXJkaW5nIHBhcnRpYWwgcmVzdWx0c1xuIikpOworICAgICAgICAgICAgbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZV9pdGVtcyhjb250YWluZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKwordm9pZAorbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmcmVlX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpjb250YWluZXIiLCAiZnJlZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNvbnRhaW5lciBmb3IgbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9TV1JVTl9ET05UX0ZSRUVfSVRFTVMpKQorICAgICAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisKKyAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCit2b2lkCituZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmNvbnRhaW5lciIsICJmcmVlX2l0ZW1zXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfc3dydW5fZW50cnlfcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogc3dydW5fZW50cnkgZnVuY3Rpb25zCisgKi8KKy8qKgorICovCituZXRzbm1wX3N3cnVuX2VudHJ5ICoKK25ldHNubXBfc3dydW5fZW50cnlfZ2V0X2J5X2luZGV4KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIG9pZCBpbmRleCkKK3sKKyAgICBuZXRzbm1wX2luZGV4ICAgdG1wOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmVudHJ5IiwgImJ5X2luZGV4XG4iKSk7CisgICAgbmV0c25tcF9hc3NlcnQoMSA9PSBfc3dydW5faW5pdCk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX3N3cnVuX2VudHJ5X2dldF9ieV9pbmRleFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHRtcC5sZW4gPSAxOworICAgIHRtcC5vaWRzID0gJmluZGV4OworCisgICAgcmV0dXJuIChuZXRzbm1wX3N3cnVuX2VudHJ5ICopIENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lciwgJnRtcCk7Cit9CisKKy8qKgorICovCituZXRzbm1wX3N3cnVuX2VudHJ5ICoKK25ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKGludDMyX3QgaW5kZXgpCit7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnkgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3dydW5fZW50cnkpOworCisgICAgaWYoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+aHJTV1J1bkluZGV4ID0gaW5kZXg7CisgICAgZW50cnktPmhyU1dSdW5UeXBlID0gMTsgLyogdW5rbm93biAqLworICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gMjsgLyogcnVubmFibGUgKi8KKworICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKKyAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAob2lkICopICYgZW50cnktPmhyU1dSdW5JbmRleDsKKworICAgIHJldHVybiBlbnRyeTsKK30KKworLyoqCisgKi8KK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfc3dydW5fZW50cnlfZnJlZShuZXRzbm1wX3N3cnVuX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICogU05NUF9GUkVFIG5vdCBuZWVkZWQsIGZvciBhbnkgb2YgdGhlc2UsIAorICAgICAqIHNpbmNlIHRoZSB3aG9sZSBlbnRyeSBpcyBhYm91dCB0byBiZSBmcmVlZAorICAgICAqLworICAgIGZyZWUoZW50cnkpOworfQorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFV0aWxpdHkgcm91dGluZXMKKyAqLworCisvKioKKyAqLworc3RhdGljIHZvaWQKK19zd3J1bl9lbnRyeV9yZWxlYXNlKG5ldHNubXBfc3dydW5fZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworfQorCisKKyNpZmRlZiBURVNUCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNvbnN0IGNoYXIgKnRva2VucyA9IGdldGVudigiU05NUF9ERUJVRyIpOworCisgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisKKyAgICAvKiogc3dydW4sdmVyYm9zZTpzd3J1biw5OnN3cnVuLDg6c3dydW4sNTpzd3J1biAqLworICAgIGlmICh0b2tlbnMpCisgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2Vucyh0b2tlbnMpOworICAgIGVsc2UKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKCJzd3J1biIpOworICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKworICAgIGluaXRfc3dydW4oKTsKKyAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9sb2FkKE5VTEwsIDApOworICAgIHNodXRkb3duX3N3cnVuKCk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTUzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIHN3cnVuIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDogc3dydW4uaCAxNTM0NiAyMDA2LTA5LTI2IDIzOjM0OjUwWiByc3RvcnkgJAorICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIE5FVFNOTVBfQUNDRVNTX1NXUlVOX0NPTkZJR19ICisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NXUlVOX0NPTkZJR19ICisKKy8qCisgKiBhbGwgcGxhdGZvcm1zIHVzZSB0aGlzIGdlbmVyaWMgY29kZQorICovCitjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuKQorY29uZmlnX2V4Y2x1ZGUoaG9zdC9ocl9zd3J1bikKKworLyoKKyAqIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGludGVyZmFjZSBjb2RlCisgKi8KKyNpZiAgIGRlZmluZWQoIGRhcndpbiApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4pCisjZWxpZiBkZWZpbmVkKCBIQVZFX1NZU19QU1RBVF9IICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0KQorI2VsaWYgZGVmaW5lZCggZHluaXggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8pCisjZWxpZiBkZWZpbmVkKCBzb2xhcmlzMiApCisjIGlmIF9TTEFTSF9QUk9DX01FVEhPRF8KKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8pCisjIGVsc2UKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jKQorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCggYWl4NCApIHx8IGRlZmluZWQoIGFpeDUgKSB8fCBkZWZpbmVkKCBhaXg2ICkgfHwgZGVmaW5lZCggYWl4NyApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mbykKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0NTCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mbykKKyNlbGlmIGRlZmluZWQoIGxpbnV4ICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMpCisjZWxpZiBkZWZpbmVkKCBjeWd3aW4gKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luKQorI2Vsc2UKKyAgICBjb25maWdfd2FybmluZyhUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHlldCBzdXBwb3J0IGhyU1dSdW5UYWJsZSByZXdyaXRlcykKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX251bGwpCisjZW5kaWYKKwordm9pZCBpbml0X3N3cnVuKHZvaWQpOwordm9pZCBzaHV0ZG93bl9zd3J1bih2b2lkKTsKKworbmV0c25tcF9jYWNoZSAgICAgKm5ldHNubXBfc3dydW5fY2FjaGUodm9pZCk7CituZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9zd3J1bl9jb250YWluZXIodm9pZCk7CisKKyNlbmRpZiAvKiBORVRTTk1QX0FDQ0VTU19TV1JVTl9DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlMTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBzd3J1bl9jeWd3aW4uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgQ3lnd2luIGludGVyZmFjZSAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzeXMvY3lnd2luLmg+CisjaW5jbHVkZSA8dGxoZWxwMzIuaD4KKyNpbmNsdWRlIDxwc2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKgorICogYSBsb3Qgb2YgdGhpcyBpcyAic3RvbGVuIiBmcm9tIGN5Z3dpbiBwcy5jYworICovCisKK3R5cGVkZWYgICAgICAgICBCT09MKFdJTkFQSSAqIEVOVU1QUk9DRVNTTU9EVUxFUykgKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhNT0RVTEUgKiBscGhNb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBjYk5lZWRlZCk7CisKK3R5cGVkZWYgICAgICAgICBEV09SRChXSU5BUEkgKiBHRVRNT0RVTEVGSUxFTkFNRSkgKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhNT0RVTEUgaE1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVFNUUiBscHN0ckZJbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgblNpemUpOworCit0eXBlZGVmICAgICAgICAgRFdPUkQoV0lOQVBJICogR0VUUFJPQ0VTU01FTU9SWUlORk8pIChIQU5ETEUgaFByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUFJPQ0VTU19NRU1PUllfQ09VTlRFUlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtYywgRFdPUkQgblNpemUpOworCit0eXBlZGVmICAgICAgICAgSEFORExFKFdJTkFQSSAqIENSRUFURVNOQVBTSE9UKSAoRFdPUkQgZHdGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCB0aDMyUHJvY2Vzc0lEKTsKKwordHlwZWRlZiAgICAgICAgIEJPT0woV0lOQVBJICogUFJPQ0VTU1dBTEspIChIQU5ETEUgaFNuYXBzaG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFBST0NFU1NFTlRSWTMyIGxwcGUpOworCitFTlVNUFJPQ0VTU01PRFVMRVMgbXlFbnVtUHJvY2Vzc01vZHVsZXM7CitHRVRNT0RVTEVGSUxFTkFNRSBteUdldE1vZHVsZUZpbGVOYW1lRXg7CitDUkVBVEVTTkFQU0hPVCAgbXlDcmVhdGVUb29saGVscDMyU25hcHNob3Q7CitQUk9DRVNTV0FMSyAgICAgbXlQcm9jZXNzMzJGaXJzdDsKK1BST0NFU1NXQUxLICAgICBteVByb2Nlc3MzMk5leHQ7CitHRVRQUk9DRVNTTUVNT1JZSU5GTyBteUdldFByb2Nlc3NNZW1vcnlJbmZvID0gTlVMTDsKK2N5Z3dpbl9nZXRpbmZvX3R5cGVzIHF1ZXJ5ID0gQ1dfR0VUUElORk87CisKK3N0YXRpYyBCT09MIFdJTkFQSQorZHVtbXlwcm9jZXNzbW9kdWxlcyhIQU5ETEUgaFByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgIEhNT0RVTEUgKiBscGhNb2R1bGUsIERXT1JEIGNiLCBMUERXT1JEIGxwY2JOZWVkZWQpCit7CisgICAgbHBoTW9kdWxlWzBdID0gKEhNT0RVTEUpICogbHBjYk5lZWRlZDsKKyAgICAqbHBjYk5lZWRlZCA9IDE7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEV09SRCBXSU5BUEkKK0dldE1vZHVsZUZpbGVOYW1lRXg5NShIQU5ETEUgaFByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSBoTW9kdWxlLCBMUFRTVFIgbHBzdHJGaWxlTmFtZSwgRFdPUkQgbikKK3sKKyAgICBIQU5ETEUgICAgICAgICAgaDsKKyAgICBEV09SRCAgICAgICAgICAgcGlkID0gKERXT1JEKSBoTW9kdWxlOworICAgIFBST0NFU1NFTlRSWTMyICBwcm9jOworCisgICAgaCA9IG15Q3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7CisgICAgaWYgKCFoKQorICAgICAgICByZXR1cm4gMDsKKyAgICBwcm9jLmR3U2l6ZSA9IHNpemVvZihwcm9jKTsKKyAgICBpZiAobXlQcm9jZXNzMzJGaXJzdChoLCAmcHJvYykpCisgICAgICAgIGRvCisgICAgICAgICAgICBpZiAocHJvYy50aDMyUHJvY2Vzc0lEID09IHBpZCkgeworICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGgpOworICAgICAgICAgICAgICAgIHN0cmNweShscHN0ckZpbGVOYW1lLCBwcm9jLnN6RXhlRmlsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIHdoaWxlIChteVByb2Nlc3MzMk5leHQoaCwgJnByb2MpKTsKKyAgICBDbG9zZUhhbmRsZShoKTsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBGQUNUT1IgKDB4MTlkYjFkZWQ1M2VhNzEwTEwpCisjZGVmaW5lIE5TUEVSU0VDIDEwMDAwMDAwTEwKKyNkZWZpbmUgTlNQRVJNU0VDIDEwMDAwTEwKKworc3RhdGljIHRpbWVfdCAgIF9fc3RkY2FsbAordG9fdGltZV90KFBGSUxFVElNRSBwdHIpCit7CisgICAgbG9uZyAgICAgICAgICAgIHJlbTsKKyAgICBsb25nIGxvbmcgICAgICAgeCA9CisgICAgICAgICgobG9uZyBsb25nKSBwdHItPmR3SGlnaERhdGVUaW1lIDw8IDMyKSArCisgICAgICAgICgodW5zaWduZWQpIHB0ci0+ZHdMb3dEYXRlVGltZSk7CisgICAgeCAtPSBGQUNUT1I7CisgICAgcmVtID0geCAlIE5TUEVSU0VDOworICAgIHJlbSArPSBOU1BFUlNFQyAvIDI7CisgICAgeCAvPSBOU1BFUlNFQzsKKyAgICB4ICs9IHJlbSAvIE5TUEVSU0VDOworICAgIHJldHVybiB4OworfQorCitzdGF0aWMgbG9uZwordG9fbXNlYyhQRklMRVRJTUUgcHRyKQoreworICAgIGxvbmcgbG9uZyAgICAgICB4ID0KKyAgICAgICAgKChsb25nIGxvbmcpIHB0ci0+ZHdIaWdoRGF0ZVRpbWUgPDwgMzIpICsKKyAgICAgICAgKHVuc2lnbmVkKSBwdHItPmR3TG93RGF0ZVRpbWU7CisgICAgeCAvPSBOU1BFUk1TRUM7CisgICAgcmV0dXJuIHg7Cit9CisKK09TVkVSU0lPTklORk8gICB2ZXI7CitITU9EVUxFICAgICAgICAgaDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgbWVtc2V0KCZ2ZXIsIDAsIHNpemVvZiB2ZXIpOworICAgIHZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mIHZlcjsKKyAgICBHZXRWZXJzaW9uRXgoJnZlcik7CisKKyAgICBpZiAodmVyLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQpIHsKKyAgICAgICAgaCA9IExvYWRMaWJyYXJ5KCJwc2FwaS5kbGwiKTsKKyAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgIG15RW51bVByb2Nlc3NNb2R1bGVzICAgPSAoRU5VTVBST0NFU1NNT0RVTEVTKQorICAgICAgICAgICAgICAgICAgICAgICBHZXRQcm9jQWRkcmVzcyhoLCAiRW51bVByb2Nlc3NNb2R1bGVzIik7CisgICAgICAgICAgICBteUdldE1vZHVsZUZpbGVOYW1lRXggID0gKEdFVE1PRFVMRUZJTEVOQU1FKQorICAgICAgICAgICAgICAgICAgICAgICBHZXRQcm9jQWRkcmVzcyhoLCAiR2V0TW9kdWxlRmlsZU5hbWVFeEEiKTsKKyAgICAgICAgICAgIG15R2V0UHJvY2Vzc01lbW9yeUluZm8gPSAoR0VUUFJPQ0VTU01FTU9SWUlORk8pCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJHZXRQcm9jZXNzTWVtb3J5SW5mbyIpOworICAgICAgICAgICAgaWYgKG15RW51bVByb2Nlc3NNb2R1bGVzICYmIG15R2V0TW9kdWxlRmlsZU5hbWVFeCkKKyAgICAgICAgICAgICAgICBxdWVyeSA9IENXX0dFVFBJTkZPX0ZVTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImhyX3N3cnVuIGZhaWxlZCBOVCBpbml0XG4iKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaHJfc3dydW4gZmFpbGVkIHRvIGxvYWQgcHNhcGkuZGxsXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBoID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMi5ETEwiKTsKKyAgICAgICAgbXlDcmVhdGVUb29saGVscDMyU25hcHNob3QgPSAoQ1JFQVRFU05BUFNIT1QpCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJDcmVhdGVUb29saGVscDMyU25hcHNob3QiKTsKKyAgICAgICAgbXlQcm9jZXNzMzJGaXJzdCA9IChQUk9DRVNTV0FMSykgR2V0UHJvY0FkZHJlc3MoaCwgIlByb2Nlc3MzMkZpcnN0Iik7CisgICAgICAgIG15UHJvY2VzczMyTmV4dCAgPSAoUFJPQ0VTU1dBTEspIEdldFByb2NBZGRyZXNzKGgsICJQcm9jZXNzMzJOZXh0Iik7CisgICAgICAgIG15RW51bVByb2Nlc3NNb2R1bGVzICA9IGR1bW15cHJvY2Vzc21vZHVsZXM7CisgICAgICAgIG15R2V0TW9kdWxlRmlsZU5hbWVFeCA9IEdldE1vZHVsZUZpbGVOYW1lRXg5NTsKKyAgICAgICAgaWYgKG15Q3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90ICYmIG15UHJvY2VzczMyRmlyc3QKKyAgICAgICAgICAgICYmIG15UHJvY2VzczMyTmV4dCkKKyNpZiAwCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyBkb2Vzbid0IHdvcmsgYWZ0ZXIgYWxsIG9uIFdpbjk4IFNFIAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBxdWVyeSA9IENXX0dFVFBJTkZPX0ZVTEw7CisjZWxzZQorICAgICAgICAgICAgcXVlcnkgPSBDV19HRVRQSU5GTzsKKyNlbmRpZgorICAgICAgICBlbHNlCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaHJfc3dydW4gZmFpbGVkIG5vbi1OVCBpbml0XG4iKTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBleHRlcm5hbF9waW5mbyAgKmN1cnByb2M7CisgICAgcGlkX3QgICAgICAgICAgICAgICAgICAgY3VycGlkID0gMDsKKyAgICBEV09SRCAgICAgICAgICAgICAgICAgICBuOworICAgIEhBTkRMRSAgICAgICAgICAgICAgICAgIGg7CisgICAgRklMRVRJTUUgICAgICAgICAgICAgICAgY3QsIGV0LCBrdCwgdXQ7CisgICAgUFJPQ0VTU19NRU1PUllfQ09VTlRFUlMgcG1jOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgKmNwMSwgKmNwMjsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICAgICplbnRyeTsKKworICAgIGN5Z3dpbl9pbnRlcm5hbChDV19MT0NLX1BJTkZPLCAxMDAwKTsKKyAgICB3aGlsZSAoY3VycHJvYyA9IChzdHJ1Y3QgZXh0ZXJuYWxfcGluZm8gKikKKyAgICAgICAgICAgICAgIGN5Z3dpbl9pbnRlcm5hbChxdWVyeSwgY3VycGlkIHwgQ1dfTkVYVFBJRCkpIHsKKworICAgICAgICBjdXJwaWQgPSBjdXJwcm9jLT5waWQ7CisgICAgICAgIGlmICgoIFBJRF9FWElURUQgJiBjdXJwcm9jLnByb2Nlc3Nfc3RhdGUgKSB8fAorICAgICAgICAgICAgICAgKCB+MHhmZmZmICYgY3VycHJvYy5leGl0Y29kZSApKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUoY3VycGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKworICAgICAgICBuID0gbG93cHJvYy5kd1Byb2Nlc3NJZCAmIDB4ZmZmZjsKKyAgICAgICAgaCA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQsIEZBTFNFLCBuKTsKKworICAgICAgICBpZiAoY3VycHJvYy5wcGlkKSB7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBjeWd3aW5fY29udl90b19wb3NpeF9wYXRoKGN1cnByb2MucHJvZ25hbWUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWVyeSA9PSBDV19HRVRQSU5GT19GVUxMKSB7CisKKyAgICAgICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICAgICAgSE1PRFVMRSAgICAgICAgIGhtWzEwMDBdOworICAgICAgICAgICAgICAgIGlmICghbXlFbnVtUHJvY2Vzc01vZHVsZXMoaCwgaG0sIHNpemVvZiBobSwgJm4pKQorICAgICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobiAmJiBteUdldE1vZHVsZUZpbGVOYW1lRXgoaCwgaG1bMF0sIHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIHN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpIC0gMSwgc3RyaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogU2V0IGhyU1dSdW5OYW1lIHRvIGJlIHRoZSBsYXN0IGNvbXBvbmVudCBvZiBoclNXUnVuUGF0aCwKKyAgICAgICAgICogICAgYnV0IHdpdGhvdXQgYW55IGZpbGUgZXh0ZW5zaW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gKSB7CisgICAgICAgICAgICBjcDEgPSBzdHJyY2hyKCBlbnRyeS0+aHJTV1J1blBhdGgsICcuJyApOworICAgICAgICAgICAgaWYgKCBjcDEgKQorICAgICAgICAgICAgICAgICpjcDEgPSAnXDAnOyAgICAvKiBNYXNrIHRoZSBmaWxlIGV4dGVuc2lvbiAqLworCisgICAgICAgICAgICBjcDIgID0gc3RycmNociggZW50cnktPmhyU1dSdW5QYXRoLCAnLycgKTsKKyAgICAgICAgICAgIGlmIChjcDIpIAorICAgICAgICAgICAgICAgIGNwMisrOyAgICAgICAgICAgLyogRmluZCB0aGUgZmluYWwgY29tcG9uZW50IC4uLiAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNwMiA9IGVudHJ5LT5oclNXUnVuUGF0aDsgICAgICAgICAgLyogLi4uIGlmIGFueSAqLworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9CisgICAgICAgICAgICAgICAgc3ByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSkgLSAxLCBjcDIpOworCisgICAgICAgICAgICBpZiAoIGNwMSApCisgICAgICAgICAgICAgICAgKmNwMSA9ICcuJzsgICAgIC8qIFJlc3RvcmUgdGhlIGZpbGUgZXh0ZW5zaW9uICovCisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBYWFggLSBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgcHJvY2VzcyBhcmd1bWVudHMKKyAgICAgICAgICogWFhYIC0gTm8gaW5mb3JtYXRpb24gcmVnYXJkaW5nIHN5c3RlbSBwcm9jZXNzZXMgdnMgYXBwbGljYXRpb25zCisgICAgICAgICAqLworCisgICAgICAgIGlmIChQSURfU1RPUFBFRCAmIGN1cnByb2MucHJvY2Vzc19zdGF0ZSApIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgfQorICAgICAgLyogIGVsc2UgaWYgKFBJRF9aT01CSUUgJiBjdXJwcm9jLnByb2Nlc3Nfc3RhdGUgKSAgKi8KKyAgICAgICAgICBlbHNlIGlmICggICB+MHhmZmZmICYgY3VycHJvYy5leGl0Y29kZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICB9IGVsc2UgeworICAgICAgICAvKiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOyAgPz8gKi8KKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgIGlmIChHZXRQcm9jZXNzVGltZXMoaCwgJmN0LCAmZXQsICZrdCwgJnV0KSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgPSAodG9fbXNlYygma3QpICsgdG9fbXNlYygmdXQpKSAvIDEwOworICAgICAgICAgICAgaWYgKG15R2V0UHJvY2Vzc01lbW9yeUluZm8KKyAgICAgICAgICAgICAgICAmJiBteUdldFByb2Nlc3NNZW1vcnlJbmZvKGgsICZwbWMsIHNpemVvZiBwbWMpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSA9IHBtYy5Xb3JraW5nU2V0U2l6ZSAvIDEwMjQ7CisKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGgpOworICAgICAgICB9CisgICAgfQorICAgIGN5Z3dpbl9pbnRlcm5hbChDV19VTkxPQ0tfUElORk8pOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2Rhcndpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDBmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2Rhcndpbi5jCkBAIC0wLDAgKzEsNDk1IEBACisvKgorICogc3dydW5fZGFyd2luLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIERhcndpbgorICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8bGlicHJvYy5oPgorI2luY2x1ZGUgPHN5cy9wcm9jX2luZm8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CS8qIGZvciBzeXNjdGwoKSBhbmQgc3RydWN0IGtpbmZvX3Byb2MgKi8KKworI2RlZmluZSBfX0FQUExFX0FQSV9FVk9MVklORyAxCisjaW5jbHVkZSA8c3lzL2FjbC5oPiAvKiBvciBlbHNlIENvcmVGb3VuZGF0aW9uLmggYmFyZnMgKi8KKyN1bmRlZiBfX0FQUExFX0FQSV9FVk9MVklORyAKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oPgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTnVtYmVyLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9DRkJ1bmRsZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisKKy8qKiBzaWdoLi4uIGNhbid0IGZpbmQgUHJvY2Vzc2VzLmggKi8KKyNpZm5kZWYga1Byb2Nlc3NEaWN0aW9uYXJ5SW5jbHVkZUFsbEluZm9ybWF0aW9uTWFzayAKKyNkZWZpbmUga1Byb2Nlc3NEaWN0aW9uYXJ5SW5jbHVkZUFsbEluZm9ybWF0aW9uTWFzayAobG9uZykweEZGRkZGRkZGCisjZW5kaWYKKyNpZm5kZWYgcHJvY05vdEZvdW5kCisjZGVmaW5lIHByb2NOb3RGb3VuZCAtNjAwCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBpbnQgX2tlcm5fYXJnbWF4Oworc3RhdGljIGludCBfc2V0X2NvbW1hbmRfbmFtZShuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSk7CisKKy8qKiBhdm9pZCBrZXJuZWwgYnVnIGluIDEwLjIuIDgxOTIgb3VnaHRhIGJlIGVub3VnaCBhbnl3YXlzLCByaWdodD8gKi8KKyNkZWZpbmUgTUFYX0tFUk5fQVJHTUFYIDgxOTIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgaW50ICAgIG1pYlsyXSA9IHsgQ1RMX0tFUk4sIEtFUk5fQVJHTUFYIH07CisgICAgc2l6ZV90IHNpemUsIG1pYl9zaXplID0gc2l6ZW9mKG1pYikvc2l6ZW9mKG1pYlswXSk7CisgICAgCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsImluaXRcbiIpKTsKKworICAgIHNpemUgPSBzaXplb2YoX2tlcm5fYXJnbWF4KTsKKyAgICBpZiAoc3lzY3RsKG1pYiwgbWliX3NpemUsICZfa2Vybl9hcmdtYXgsICZzaXplLCBOVUxMLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXJyb3IgaW4gQVJHTUFYIHN5c2N0bCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIF9rZXJuX2FyZ21heCA9IE1BWF9LRVJOX0FSR01BWDsKKyAgICB9CisgICAgZWxzZSBpZiAoX2tlcm5fYXJnbWF4ID4gTUFYX0tFUk5fQVJHTUFYKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAiYXJ0aWZpY2lhbGx5IGxpbWl0aW5nIEFSR01BWCB0byAlZCAoZnJvbSAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgIE1BWF9LRVJOX0FSR01BWCwgX2tlcm5fYXJnbWF4KSk7CisgICAgICAgIF9rZXJuX2FyZ21heCA9IE1BWF9LRVJOX0FSR01BWDsKKyAgICB9CisKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBTV1JVTklOREVOVCAiICAgICAgICAgICAiCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgaW50CSAgICAgICAgICAgICAgICAgbWliWzRdID0ge0NUTF9LRVJOLCBLRVJOX1BST0MsIEtFUk5fUFJPQ19BTEx9OworICAgIHNpemVfdCAgICAgICAgICAgICAgIGJ1Zl9zaXplLCBtaWJfc2l6ZSA9IHNpemVvZihtaWIpL3NpemVvZihtaWJbMF0pOworICAgIHN0cnVjdCBraW5mb19wcm9jICAgKnByb2Nlc3NlcyA9IE5VTEw7CisgICAgc3RydWN0IHByb2NfdGFza2FsbGluZm8gdGFza2luZm87CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmMsIG51bV9lbnRyaWVzLCBpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBzaXplIHRvIGFsbG9jYXRlLiBUaGlzIGludHJvZHVjZXMgYSBiaXQgb2YgYSByYWNlIGNvbmRpdGlvbiwKKyAgICAgKiBhcyB0aGUgc2l6ZSBjb3VsZCBjaGFuZ2UgYmV0d2VlbiB0aGlzIGNhbGwgYW5kIHRoZSBuZXh0Li4uCisgICAgICovCisgICAgcmMgPSBzeXNjdGwobWliLCBtaWJfc2l6ZSwgTlVMTCwgJmJ1Zl9zaXplLCBOVUxMLCAwKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJLRVJOX1BST0NfQUxMIHNpemUgc3lzY3RsIGZhaWxlZDogJWRcbiIsIHJjKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHByb2Nlc3NlcyA9IChzdHJ1Y3Qga2luZm9fcHJvYyopIG1hbGxvYyhidWZfc2l6ZSk7CisgICAgaWYgKE5VTEwgPT0gcHJvY2Vzc2VzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gc3lzY3RsKG1pYiwgbWliX3NpemUsIHByb2Nlc3NlcywgJmJ1Zl9zaXplLCBOVUxMLCAwKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJLRVJOX1BST0NfQUxMIHN5c2N0bCBmYWlsZWQ6ICVkXG4iLCByYyk7CisgICAgICAgIGZyZWUocHJvY2Vzc2VzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBudW1fZW50cmllcyA9IGJ1Zl9zaXplIC8gc2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jKTsKKyAgICAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgeworICAgICAgICAvKgorICAgICAgICAgKiBza2lwIGVtcHR5IG5hbWVzLgorICAgICAgICAgKiBwX3N0YXQgPSAoU0lETHxTUlVOfFNTTEVFUHxTU1RPUHxTWk9NQikKKyAgICAgICAgICovCisgICAgICAgIGlmICgoJ1wwJyA9PSBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX2NvbW1bMF0pIHx8CisgICAgICAgICAgICAoMCA9PSBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3BpZCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBza2lwcGluZyBwX2NvbW0gJyVzJywgcGlkICU1ZCwgcF9wc3RhdCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9jb21tIDogIk5VTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9waWQsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3N0YXQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiAlcyBwaWQgJTVkXG4iLAorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX2NvbW0sCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkKSk7CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3BpZCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7IC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBwX2NvbW0gaXMgYSBwYXJ0aWFsIG5hbWUsIGJ1dCBpdCBpcyBhbGwgd2UgaGF2ZSBhdCB0aGlzIHBvaW50LgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX2NvbW0pOworCisgICAgICAgIC8qKiBzeXNjdGwgZm9yIG5hbWUsIHBhdGgsIHBhcmFtcyAqLworICAgICAgICByYyA9IF9zZXRfY29tbWFuZF9uYW1lKGVudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBtYXAgcF9zdGF0IHRvIFJ1blN0YXR1cy4gT2RkIHRoYXQgdGhlcmUgaXMgbm8gJ3J1bm5pbmcnIHN0YXR1cy4KKyAgICAgICAgICovCisgICAgICAgIHN3aXRjaChwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3N0YXQpIHsKKyAgICAgICAgICAgIGNhc2UgU1JVTjoKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNTTEVFUDoKKyAgICAgICAgICAgIGNhc2UgU1NUT1A6CisgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTSURMOgorICAgICAgICAgICAgY2FzZSBTWk9NQjoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgZm9yIHN5c3RlbSBwcm9jZXNzZXMKKyAgICAgICAgICovCisgICAgICAgIGlmIChQX1NZU1RFTSAmIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfZmxhZykgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gSFJTV1JVTlRZUEVfT1BFUkFUSU5HU1lTVEVNOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIFNXUlVOSU5ERU5UICJTWVNURU1cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGVudHJ5LT5oclNXUnVuVHlwZSA9IEhSU1dSVU5UWVBFX0FQUExJQ0FUSU9OOworCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBtZW0gc2l6ZSwgcnVuIHRpbWUKKyAgICAgICAgICovCisgICAgICAgIHJjID0gcHJvY19waWRpbmZvKCBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3BpZCwgUFJPQ19QSURUQVNLQUxMSU5GTywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXNraW5mbywgc2l6ZW9mKHRhc2tpbmZvKSk7CisgICAgICAgIGlmIChzaXplb2YodGFza2luZm8pICE9IHJjKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgIiBwcm9jX3BpZGluZm8gcmV0dXJuZWQgJWRcbiIsIHJjKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1aW50NjRfdCB0YXNrX21lbSA9IHRhc2tpbmZvLnB0aW5mby5wdGlfcmVzaWRlbnRfc2l6ZSAvIDEwMjQ7CisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgdV9xdWFkX3QgICAgIHVxOyAvKiB1X2ludDY0X3QgKi8KKyAgICAgICAgICAgICAgICBVbnNpZ25lZFdpZGUgdXc7IC8qIHN0cnVjdCB1X2ludDMyX3QgaGkvbG8gKi8KKyAgICAgICAgICAgIH0gYXQsIG5zOworICAgICAgICAgICAgYXQudXEgPSB0YXNraW5mby5wdGluZm8ucHRpX3RvdGFsX3VzZXIgKworICAgICAgICAgICAgICAgICAgICB0YXNraW5mby5wdGluZm8ucHRpX3RvdGFsX3N5c3RlbTsKKyAgICAgICAgICAgIG5zID0gYXQ7CisgICAgICAgICAgICBucy51cSA9IG5zLnVxIC8gMTAwMDAwMDBMTDsgLyogbmFubyB0byBkZWNpICovCisgICAgICAgICAgICBpZiAodGFza19tZW0gPiBJTlQzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgU1dSVU5JTkRFTlQgIm1lbSBvdmVyZmxvd1xuIikpOworICAgICAgICAgICAgICAgIHRhc2tfbWVtID0gSU5UMzJfTUFYOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5zLnVxID4gSU5UMzJfTUFYKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIFNXUlVOSU5ERU5UICJ0aW1lIG92ZXJmbG93XG4iKSk7CisgICAgICAgICAgICAgICAgbnMudXEgPSBJTlQzMl9NQVg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gPSB0YXNrX21lbTsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSA9IG5zLnVxOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUocHJvY2Vzc2VzKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIHNuYWdnZWQgZnJvbSBEYXJ3aW4gY29kZSwgYW5kIHRoZSBvcmlnaW5hbAorICogZmlsZSBoYWQgdGhlIGZvbGxvd2luZyBsaWNlbmNlczoKKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQEFQUExFX0xJQ0VOU0VfSEVBREVSX1NUQVJUQAorICogCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGNvbnN0aXR1dGUgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZAorICogYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlCisgKiAiTGljZW5zZSIpLiAgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICogTGljZW5zZS4gIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS4KKyAqIAorICogVGhpcyBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCisgKiBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKKyAqIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQuICBQbGVhc2Ugc2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqIAorICogQEFQUExFX0xJQ0VOU0VfSEVBREVSX0VOREAKKyAqLworI2lmZGVmIEpBR1VBUiAvKiB4eHggY29uZmlndXJlIHRlc3Q/ICovCitzdGF0aWMgaW50Citfc2V0X2NvbW1hbmRfbmFtZV9qYWd1YXIobmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnkpCit7CisgICAgaW50CSAgICAgICAgbWliWzNdID0ge0NUTF9LRVJOLCBLRVJOX1BST0NBUkdTLCAwfTsKKyAgICBzaXplX3QgICAgICBwcm9jYXJnc3NpemUsIG1pYl9zaXplID0gc2l6ZW9mKG1pYikvc2l6ZW9mKG1pYlswXSk7CisgICAgY2hhciAgICAgICAqYXJnX2VuZCwgKmV4ZWNfcGF0aDsKKyAgICBpbnQgICAgICAgICppcDsKKyAgICBpbnQgICAgICAgICBsZW47CisgICAgY2hhciAgICAgICAqY29tbWFuZF9iZWcsICpjb21tYW5kLCAqY29tbWFuZF9lbmQ7CisgICAgY2hhciAgICAgICAgYXJnX2J1ZltNQVhfS0VSTl9BUkdNQVhdOyAvKiBtYXggdG8gYXZvaWQga2VybmVsIGJ1ZyAqLworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgcGlkICVkXG4iLCBlbnRyeS0+aHJTV1J1bkluZGV4KSk7CisKKyAgICBtaWJbMl0gPSBlbnRyeS0+aHJTV1J1bkluZGV4OworCisgICAgbWVtc2V0KGFyZ19idWYsIDB4MCwgc2l6ZW9mKGFyZ19idWYpKTsKKyAgICBwcm9jYXJnc3NpemUgPSBfa2Vybl9hcmdtYXg7CisgICAgaWYgKHN5c2N0bChtaWIsIG1pYl9zaXplLCBhcmdfYnVmLCAmcHJvY2FyZ3NzaXplLCBOVUxMLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXJyb3IgaW4gUFJPQ0FSR1Mgc3lzY3RsKCkgZm9yICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFNldCBpcCBqdXN0IGFib3ZlIHRoZSBlbmQgb2YgYXJnX2J1Zi4gKi8KKyAgICBhcmdfZW5kID0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXTsKKyAgICBpcCA9IChpbnQgKilhcmdfZW5kOworICAgIAorICAgIC8qCisgICAgICogU2tpcCB0aGUgbGFzdCAyIHdvcmRzLCBzaW5jZSB0aGUgbGFzdCBpcyBhIDAgd29yZCwgYW5kCisgICAgICogdGhlIHNlY29uZCB0byBsYXN0IG1heSBiZSBhcyB3ZWxsLCBpZiB0aGVyZSBhcmUgbm8KKyAgICAgKiBhcmd1bWVudHMuCisgICAgICovCisgICAgaXAgLT0gMzsKKyAgICAKKyAgICAvKiBJdGVyYXRlIGRvd24gdGhlIGFyZ3VtZW50cyB1bnRpbCBhIDAgd29yZCBpcyBmb3VuZC4gKi8KKyAgICBmb3IgKDsgKmlwICE9IDA7IGlwLS0pIHsKKyAgICAgICAgaWYgKGlwID09IChpbnQgKilhcmdfYnVmKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB1bmV4cGVjdGVkIHRvcGFyZ1xuIikpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIFRoZSBzYXZlZCBleGVjX3BhdGggaXMganVzdCBhYm92ZSB0aGUgMCB3b3JkLiAqLworICAgIGlwKys7CisgICAgZXhlY19wYXRoID0gKGNoYXIgKilpcDsKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBleGVjX3BhdGggJXNcbiIsIGV4ZWNfcGF0aCkpOworICAgIGxlbiA9IHN0cmxlbihleGVjX3BhdGgpOworICAgIHN0cmxjcHkoZW50cnktPmhyU1dSdW5QYXRoLCBleGVjX3BhdGgsIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpKTsKKyAgICBpZiAobGVuID4gc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB0cnVuY2F0aW5nIGxvbmcgcnVuIHBhdGhcbiIpKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoW3NpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTJdID0gJyQnOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMTsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgZXhlY19wYXRoICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGgpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gbGVuOworICAgIAorICAgIC8qCisgICAgICogR2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGFyZ3VtZW50LiAgSXQgaXMgd29yZC1hbGlnbmVkLAorICAgICAqIHNvIHNraXAgcGFkZGluZyAnXDAnIGJ5dGVzLgorICAgICAqLworICAgIGNvbW1hbmRfYmVnID0gZXhlY19wYXRoICsgc3RybGVuKGV4ZWNfcGF0aCk7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgY29tbWFuZF9iZWcgJyVzJ1xuIiwgY29tbWFuZF9iZWcpKTsKKyAgICBmb3IgKDsgKmNvbW1hbmRfYmVnID09ICdcMCc7IGNvbW1hbmRfYmVnKyspIHsKKyAgICAgICAgaWYgKGNvbW1hbmRfYmVnID49IGFyZ19lbmQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIGNvbW1hbmRfYmVnICclcydcbiIsIGNvbW1hbmRfYmVnKSk7CisgICAgCisgICAgLyogR2V0IHRoZSBiYXNlbmFtZSBvZiBjb21tYW5kLiAqLworICAgIGNvbW1hbmQgPSBjb21tYW5kX2VuZCA9IGNvbW1hbmRfYmVnICsgc3RybGVuKGNvbW1hbmRfYmVnKSArIDE7CisgICAgZm9yIChjb21tYW5kLS07IGNvbW1hbmQgPj0gY29tbWFuZF9iZWc7IGNvbW1hbmQtLSkgeworICAgICAgICBpZiAoKmNvbW1hbmQgPT0gJy8nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNvbW1hbmQrKzsKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBjb21tYW5kICclcydcbiIsIGNvbW1hbmQpKTsKKyAgICAKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGNvbW1hbmQgYW5kIGNvcHkuICovCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLAorICAgICAgICAgICAgICAgIFNXUlVOSU5ERU5UICJrZXJuZWwgbmFtZSAlc1xuIiwgY29tbWFuZCkpOworICAgIGlmIChzdHJuY21wKGNvbW1hbmQsIGVudHJ5LT5oclNXUnVuTmFtZSwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSkpIHsKKyAgICAgICAgc3RybGNweShlbnRyeS0+aHJTV1J1bk5hbWUsIGNvbW1hbmQsIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHN0cmxlbihlbnRyeS0+aHJTV1J1bk5hbWUpOworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsICIqKiIKKyAgICAgICAgICAgICAgICAgICAgU1dSVU5JTkRFTlQgInVwZGF0ZWQgbmFtZSB0byAlc1xuIiwgZW50cnktPmhyU1dSdW5OYW1lKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKiBubyBlcnJvciwgbm8gY2hhbmdlICovCisgICAgcmV0dXJuIDE7Cit9CisjZWxzZQorc3RhdGljIGludAorX3NldF9jb21tYW5kX25hbWUobmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnkpCit7CisgICAgaW50CSAgICAgICAgbWliWzNdID0ge0NUTF9LRVJOLCAwLCAwfTsKKyAgICBzaXplX3QgICAgICBwcm9jYXJnc3NpemUsIG1pYl9zaXplID0gc2l6ZW9mKG1pYikvc2l6ZW9mKG1pYlswXSk7CisgICAgY2hhciAgICAgICAqY3A7CisgICAgaW50ICAgICAgICAgbGVuLCBuYXJnczsKKyAgICBjaGFyICAgICAgICpjb21tYW5kX2JlZywgKmNvbW1hbmQsICpjb21tYW5kX2VuZCwgKmV4ZWNfcGF0aCwgKmFyZ047CisgICAgY2hhciAgICAgICAgYXJnX2J1ZltNQVhfS0VSTl9BUkdNQVhdOyAvKiBtYXggdG8gYXZvaWQga2VybmVsIGJ1ZyAqLworCisgICAgLyoKKyAgICAgKiBhcmd1bWVudHMKKyAgICAgKi8KKyAgICBtaWJbMV0gPSBLRVJOX1BST0NBUkdTMjsKKyAgICBtaWJbMl0gPSBlbnRyeS0+aHJTV1J1bkluZGV4OworCisgICAgbWVtc2V0KGFyZ19idWYsIDB4MCwgc2l6ZW9mKGFyZ19idWYpKTsKKyAgICBwcm9jYXJnc3NpemUgPSBfa2Vybl9hcmdtYXg7CisgICAgaWYgKHN5c2N0bChtaWIsIG1pYl9zaXplLCBhcmdfYnVmLCAmcHJvY2FyZ3NzaXplLCBOVUxMLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXJyb3IgaW4gUFJPQ0FSR1MyIHN5c2N0bCgpIGZvciAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IDA7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtZW1jcHkoJm5hcmdzLGFyZ19idWYsIHNpemVvZihuYXJncykpOworICAgIH0KKworICAgIGV4ZWNfcGF0aCA9IGFyZ19idWYgKyBzaXplb2YobmFyZ3MpOworICAgIGxlbiA9IHN0cmxlbihleGVjX3BhdGgpOworICAgIHN0cmxjcHkoZW50cnktPmhyU1dSdW5QYXRoLCBleGVjX3BhdGgsIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpKTsKKyAgICBpZiAobGVuID4gc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB0cnVuY2F0aW5nIGxvbmcgcnVuIHBhdGhcbiIpKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoW3NpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTJdID0gJyQnOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gbGVuOworCisgICAgLyoqIFNraXAgdGhlIHNhdmVkIGV4ZWNfcGF0aC4gKi8KKyNpZiAwCisgICAgY3AgPSBleGVjX3BhdGggKyBsZW47CisjZWxzZQorICAgIGZvciAoY3AgPSBleGVjX3BhdGg7IGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXTsgY3ArKykgeworICAgICAgICBpZiAoKmNwID09ICdcMCcpIAorICAgICAgICAgICAgYnJlYWs7IC8qIEVuZCBvZiBleGVjX3BhdGggcmVhY2hlZC4gKi8KKyAgICB9CisgICAgaWYgKGNwICE9IGV4ZWNfcGF0aCArIGxlbikgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsICIgT0ZGIEJZICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAoaW50KSgoZXhlY19wYXRoICsgbGVuKSAtIGNwKSkpOworICAgICAgICBuZXRzbm1wX2Fzc2VydCggY3AgPT0gZXhlY19wYXRoICsgbGVuICk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGNwID09ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgdW5leHBlY3RlZCBlbmQgb2YgYnVmZmVyXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogU2tpcCB0cmFpbGluZyAnXDAnIGNoYXJhY3RlcnMuICovCisgICAgZm9yICg7IGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXTsgY3ArKykgeworICAgICAgICBpZiAoKmNwICE9ICdcMCcpCisgICAgICAgICAgICBicmVhazsgLyogQmVnaW5uaW5nIG9mIGZpcnN0IGFyZ3VtZW50IHJlYWNoZWQuICovCisgICAgfQorICAgIGlmIChjcCA9PSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHVuZXhwZWN0ZWQgZW5kIG9mIGJ1ZmZlclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNvbW1hbmRfYmVnID0gY3A7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb21tYW5kIGlzICdcMCctdGVybWluYXRlZC4gIFRoaXMgcHJvdGVjdHMKKyAgICAgKiBhZ2FpbnN0IG1hbGljaW91cyBwcm9ncmFtczsgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbiB0aGlzIG5ldmVyCisgICAgICogZW5kcyB1cCBiZWluZyBhIHByb2JsZW0uLgorICAgICAqLworICAgIGZvciAoOyBjcCA8ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV07IGNwKyspIHsKKyAgICAgICAgaWYgKCpjcCA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7IC8qIEVuZCBvZiBmaXJzdCBhcmd1bWVudCByZWFjaGVkLiAqLworICAgIH0KKyAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB1bmV4cGVjdGVkIGVuZCBvZiBidWZmZXJcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjb21tYW5kX2VuZCA9IGNvbW1hbmQgPSBjcDsKKyAgICAtLW5hcmdzOworCisgICAgLyoKKyAgICAgKiBzYXZlIGFyZ3VtZW50cworICAgICAqLworICAgIHdoaWxlKCBuYXJncyAmJiBjcCA8ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0gKSB7CisgICAgICAgIC8qKiBTa2lwIHRyYWlsaW5nICdcMCcgY2hhcmFjdGVycyBmcm9tIHByZXYgYXJnLiAqLworICAgICAgICBmb3IgKDsgKGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgJiYgKCpjcCA9PSAwKTsgY3ArKykgCisgICAgICAgICAgICA7IC8qIG5vb3AgKi8KKyAgICAgICAgaWYgKGNwID09ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0pCisgICAgICAgICAgICBjb250aW51ZTsgLyogZWZmZWN0aXZlbHkgYSBicmVhayAqLworICAgIAorICAgICAgICAvKiogc2F2ZSBhcmdOIHN0YXJ0ICovCisgICAgICAgIGFyZ04gPSBjcDsKKyAgICAgICAgLS1uYXJnczsKKyAgICAgICAgaWYgKDAgPT0gbmFyZ3MpCisgICAgICAgICAgICBjb250aW51ZTsgLyogZWZmZWN0aXZlbHkgYSBicmVhayAqLworCisgICAgICAgIC8qKiBTa2lwIHRvIGVuZCBvZiBhcmcgKi8KKyAgICAgICAgZm9yICg7IChjcCA8ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0pICYmICgqY3AgIT0gMCk7IGNwKyspIAorICAgICAgICAgICAgOyAgLyogbm9vcCAqLworICAgICAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBlZmZlY3RpdmVseSBhIGJyZWFrICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgZm9yIG92ZXJydW4gaW50byBlbnYKKyAgICAgICAgICovCisgICAgICAgIGlmICgoKmFyZ04gIT0gJy0nKSAmJiBzdHJjaHIoYXJnTiwnPScpKSAgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCAiICoqKiBPVkVSUlVOIElOVE8gRU5WICVkXG4iLG5hcmdzKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgYXJnCisgICAgICAgICAqLworICAgICAgICBpZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuIDwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycyktMSkgeworICAgICAgICAgICAgc3RybGNhdCgmZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzW2VudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW5dLAorICAgICAgICAgICAgICAgICAgICBhcmdOLCBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS1lbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuLTEpOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IHN0cmxlbihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpOworICAgICAgICAgICAgaWYgKChlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuKzIgPCBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xKSAmJiAoMCAhPSBuYXJncykpIHsKKyAgICAgICAgICAgICAgICAvKiBhZGQgc3BhY2UgYmV0d2VlbiBwYXJhbXMgKi8KKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbisrXSA9ICcgJzsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbl0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB0cnVuY2F0aW5nIGxvbmcgYXJnIGxpc3RcbiIpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbisrXSA9ICckJzsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbl0gPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCcgJyA9PSBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbl0pCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuLS1dID0gMDsKKworICAgIAorICAgIC8qIEdldCB0aGUgYmFzZW5hbWUgb2YgY29tbWFuZC4gKi8KKyAgICBmb3IgKGNvbW1hbmQtLTsgY29tbWFuZCA+PSBjb21tYW5kX2JlZzsgY29tbWFuZC0tKSB7CisgICAgICAgIGlmICgqY29tbWFuZCA9PSAnLycpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgY29tbWFuZCsrOworICAgIAorICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY29tbWFuZCBhbmQgY29weS4gKi8KKyAgICBpZiAoc3RybmNtcChjb21tYW5kLCBlbnRyeS0+aHJTV1J1bk5hbWUsIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEpKSB7CisgICAgICAgIHN0cmxjcHkoZW50cnktPmhyU1dSdW5OYW1lLCBjb21tYW5kLCBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzdHJsZW4oZW50cnktPmhyU1dSdW5OYW1lKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLAorICAgICAgICAgICAgICAgICAgICAiICoqdXBkYXRlZCBuYW1lIHRvICVzXG4iLCBlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2U2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBzd3J1bl9raW5mby5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBrdm1fZ2V0cHJvY3MoKSBpbnRlcmZhY2UgLSBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QKKyAqCisgKiBOQjogbGF0ZXIgRnJlZUJTRCBhbmQgT3BlbkJTRCB1c2UgZGlmZmVyZW50IGtpbmZvX3Byb2Mgc3RydWN0dXJlcworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0tWTV9ICisjaW5jbHVkZSA8a3ZtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TWVNDVExfSAorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BST0NfSAorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19VU0VSX0gKKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVk1fVVZNX0VYVEVSTkFMX0gKKyNpbmNsdWRlIDx1dm0vdXZtX2V4dGVybmFsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKK2V4dGVybiBrdm1fdCAqa2Q7CisKKworI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAorICAgIC8qCisgICAgICogbGF0ZXIgRnJlZUJTRCBraW5mb19wcm9jIGZpZWxkIG5hbWVzCisgICAgICovCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNkZWZpbmUgU1dSVU5fS19TVEFUCWtpX3N0YXQKKyNkZWZpbmUgU1dSVU5fS19QSUQJa2lfcGlkCisjZGVmaW5lIFNXUlVOX0tfUFBJRAlraV9wcGlkCisjZGVmaW5lIFNXUlVOX0tfVElECWtpX3RpZAorI2RlZmluZSBTV1JVTl9LX0NPTU0Ja2lfY29tbQorI2RlZmluZSBTV1JVTl9LX0ZMQUcJa2lfZmxhZworI2RlZmluZSBTV1JVTl9LX0NMQVNTCWtpX3ByaS5wcmlfY2xhc3MKKworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIgfHwgZGVmaW5lZChvcGVuYnNkNSkKKyAgICAvKgorICAgICAqIG5ld2VyIE5ldEJTRCwgT3BlbkJTRCBraW5mb19wcm9jMiBmaWVsZCBuYW1lcworICAgICAqLworI2lmIGRlZmluZWQob3BlbmJzZDUpCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNlbHNlCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MyCisjZW5kaWYKKyNkZWZpbmUgU1dSVU5fS19TVEFUCXBfc3RhdAorI2RlZmluZSBTV1JVTl9LX1BJRAlwX3BpZAorI2RlZmluZSBTV1JVTl9LX0NPTU0JcF9jb21tCisjZGVmaW5lIFNXUlVOX0tfRkxBRwlwX2ZsYWcKKy8qICAgICAgU1dSVU5fS19DTEFTUwlub3QgZGVmaW5lZCAgICAgKi8KKworI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgLyoKKyAgICAgKiBEcmFnb25GbHkgaXMgZGlmZmVyZW50IC4uLgorICAgICAqLworI2RlZmluZSBTV1JVTl9UQUJMRQlraW5mb19wcm9jCisjZGVmaW5lIFNXUlVOX0tfU1RBVAlrcF9zdGF0CisjZGVmaW5lIFNXUlVOX0tfUElEIAlrcF9waWQKKyNkZWZpbmUgU1dSVU5fS19DT01NCWtwX2NvbW0KKyNkZWZpbmUgU1dSVU5fS19GTEFHCWtwX2ZsYWdzCisvKiAgICAgIFNXUlVOX0tfQ0xBU1MJbm90IGRlZmluZWQgICAgICovCisKKyNlbHNlCisgICAgLyoKKyAgICAgKiBlYXJseSBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0Qga2luZm9fcHJvYyBmaWVsZCBuYW1lcworICAgICAqLworI2RlZmluZSBTV1JVTl9UQUJMRQlraW5mb19wcm9jCisjZGVmaW5lIFNXUlVOX0tfU1RBVAlrcF9wcm9jLnBfc3RhdAorI2RlZmluZSBTV1JVTl9LX1BJRAlrcF9wcm9jLnBfcGlkCisjZGVmaW5lIFNXUlVOX0tfQ09NTQlrcF9wcm9jLnBfY29tbQorI2RlZmluZSBTV1JVTl9LX0ZMQUcJa3BfcHJvYy5wX2ZsYWcKKy8qICAgICAgU1dSVU5fS19DTEFTUwlub3QgZGVmaW5lZCAgICAgKi8KKyNlbmRpZgorCisvKgorICogIERlZmluZSBkdW1teSB2YWx1ZXMgaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbQorICovCisKKyNpZmRlZiBkcmFnb25mbHkKKworLyoKKyAqIERyYWdvbkZseSBpcyBzcGVjaWFsLiBwX3N0YXQgaXMgYW4gZW51bSEKKyAqLworCisjZGVmaW5lIFNSVU4JMjAwCisjZGVmaW5lIFNTTEVFUAkyMDIKKyNkZWZpbmUgU1dBSVQJMjAzCisjZGVmaW5lIFNMT0NLCTIwNQorI2RlZmluZSBTREVBRAkyMDgKKyNkZWZpbmUgU09OUFJPQwkyMDkKKworCisjZWxzZQorCisjaWZuZGVmIFNSVU4KKyNkZWZpbmUgU1JVTgkyMDAJLyogRGVmaW5lZCBieSBGcmVlQlNEL09wZW5CU0QsIG1pc3NpbmcgaW4gIE5ldEJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNBQ1RJVkUKKyNkZWZpbmUgU0FDVElWRQkyMDEJLyogRGVmaW5lZCBieSAgTmV0QlNELCBtaXNzaW5nIGluIEZyZWVCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNTTEVFUAorI2RlZmluZSBTU0xFRVAJMjAyCS8qIERlZmluZWQgYnkgRnJlZUJTRC9PcGVuQlNELCBtaXNzaW5nIGluICBOZXRCU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTV0FJVAorI2RlZmluZSBTV0FJVAkyMDMJLyogRGVmaW5lZCBieSBGcmVlQlNELCBtaXNzaW5nIGluICBOZXRCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNTVE9QCisjZGVmaW5lIFNTVE9QCTIwNAkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTTE9DSworI2RlZmluZSBTTE9DSwkyMDUJLyogRGVmaW5lZCBieSBGcmVlQlNELCBtaXNzaW5nIGluIE5ldEJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU0lETAorI2RlZmluZSBTSURMCTIwNgkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTWk9NQgorI2RlZmluZSBTWk9NQgkyMDcJLyogRGVmaW5lZCBieSBGcmVlQlNEL05ldEJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU0RFQUQKKyNkZWZpbmUgU0RFQUQJMjA4CS8qIERlZmluZWQgYnkgT3BlbkJTRCwgbWlzc2luZyBpbiBGcmVlQlNEL05ldEJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNPTlBST0MKKyNkZWZpbmUgU09OUFJPQwkyMDkJLyogRGVmaW5lZCBieSBPcGVuQlNELCBtaXNzaW5nIGluIEZyZWVCU0QvTmV0QlNEICovCisjZW5kaWYKKworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworI2lmIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgJiYgZGVmaW5lZChDVExfS0VSTikgJiYgZGVmaW5lZChLRVJOX01BWFBST0MpCisgICAgZXh0ZXJuIGludCBfc3dydW5fbWF4OworICAgIHNpemVfdCBtYXhfc2l6ZSA9IHNpemVvZihfc3dydW5fbWF4KTsKKyAgICBpbnQgbWF4cHJvY19taWJbXSA9IHsgQ1RMX0tFUk4sIEtFUk5fTUFYUFJPQyB9OworICAgIHN5c2N0bChtYXhwcm9jX21pYiwgMiwgJl9zd3J1bl9tYXgsICZtYXhfc2l6ZSwgTlVMTCwgMCk7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IFNXUlVOX1RBQkxFICAqcHJvY190YWJsZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBucHJvY3MsIGksIHJjOworICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZltCVUZTSVorMV0sICoqYXJndjsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIGlmICggMCA9PSBrZCApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBDYW4ndCBxdWVyeSBrdm0gaW5mb1xuIikpOworICAgICAgICByZXR1cm4gMTsgICAgIC8qIE5vIGhhbmRsZSBmb3IgcmV0cmlldmluZyBwcm9jZXNzIHRhYmxlICovCisgICAgfQorI2lmIGRlZmluZWQob3BlbmJzZDUpCisgICAgcHJvY190YWJsZSA9IGt2bV9nZXRwcm9jcyhrZCwgS0VSTl9QUk9DX0tUSFJFQUQsIDAsIHNpemVvZihzdHJ1Y3Qga2luZm9fcHJvYyksICZucHJvY3MgKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9LVk1fR0VUUFJPQzIpCisgICAgcHJvY190YWJsZSA9IGt2bV9nZXRwcm9jMihrZCwgS0VSTl9QUk9DX0FMTCwgMCwgc2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jMiksICZucHJvY3MgKTsKKyNlbHNlCisgICAgcHJvY190YWJsZSA9IGt2bV9nZXRwcm9jcyhrZCwgS0VSTl9QUk9DX0FMTCwgMCwgJm5wcm9jcyApOworI2VuZGlmCisgICAgZm9yICggaT0wIDsgaTxucHJvY3M7IGkrKyApIHsKKyAgICAgICAgaWYgKCAwID09IHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFUICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIC0xID09IHByb2NfdGFibGVbaV0uU1dSVU5fS19QSUQgKQorICAgICAgICAgICAgY29udGludWU7CisjaWZkZWYgU1dSVU5fS19USUQKKwlpZiAoIDAgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1BQSUQgKQorCSAgICBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfUElEID0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1RJRDsKKyNlbmRpZgorICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0uU1dSVU5fS19QSUQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNvdXJjZXMgZm9yIHRoZSBjb21tYW5kIGJlaW5nIHJ1bjoKKyAgICAgICAgICogICAtIFNXUlVOX0tfQ09NTSAgKGZyb20gdGhlIHByb2NfdGFibGUgZW50cnkgZGlyZWN0bHkpCisgICAgICAgICAqICAgLSBydW5uaW5nIGt2bV9nZXRhcmd2IG9uIHRoZSBwcm9jZXNzIGVudHJ5LgorICAgICAgICAgKgorICAgICAgICAgKiBXZSdsbCB1c2UgYXJndlswXSAoaWYgc2V0KSBmb3IgaHJTV1J1blBhdGgsCisgICAgICAgICAqICAgc2luY2UgdGhhdCBtaWdodCBwb3RlbnRpYWxseSBjb250YWluIHRoZQorICAgICAgICAgKiAgIGFic29sdXRlIHBhdGggdG8gdGhlIHJ1bm5pbmcgYmluYXJ5LgorICAgICAgICAgKiBXZSdsbCB1c2UgU1dSVU5fS19DT01NIGZvciBoclNXUnVuTmFtZSwKKyAgICAgICAgICogICBhbmQgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIGhyU1dSdW5QYXRoCisgICAgICAgICAqLworI2lmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGFyZ3YgPSBrdm1fZ2V0YXJndjIoIGtkLCAmKHByb2NfdGFibGVbaV0pLCAwKTsKKyNlbHNlCisgICAgICAgIGFyZ3YgPSBrdm1fZ2V0YXJndiggIGtkLCAmKHByb2NfdGFibGVbaV0pLCBCVUZTSVopOworI2VuZGlmCisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5OYW1lLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfQ09NTSk7CisKKyAgICAgICAgaWYgKGFyZ3YgJiYgKmFyZ3YpIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkoIGVudHJ5LT5oclNXUnVuUGF0aCwgZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gKTsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RpdGNoIHRvZ2V0aGVyIHRoZSByZXN0IG9mIGFyZ3ZbXSB0byBidWlsZCBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKgorICAgICAgICAgKiBOb3RlOgorICAgICAgICAgKiAgIFdlIGFkZCBhIHNlcGFyYXRpbmcgc3BhY2UgYmVmb3JlIGVhY2ggYXJndltdIHBhcmFtZXRlciwKKyAgICAgICAgICogICAqaW5jbHVkaW5nKiB0aGUgZmlyc3Qgb25lLiAgU28gd2UgbmVlZCB0byBza2lwIHRoaXMKKyAgICAgICAgICogICBsZWFkaW5nIHNwYWNlIChidWZbMF0pIHdoZW4gc2V0dGluZyBoclNXUnVuUGFyYW1ldGVycy4KKyAgICAgICAgICogVGhpcyBpcyBhbHNvIHdoeSB3ZSBjbGVhcmVkIHRoZSBmaXJzdCAqdHdvKiBjaGFyYWN0ZXJzCisgICAgICAgICAqICAgaW4gdGhlIGJ1ZmZlciBpbml0aWFsbHkuIElmIHRoZXJlIHdlcmUgbm8gY29tbWFuZC1saW5lCisgICAgICAgICAqICAgYXJndW1lbnRzLCB0aGVuIGJ1ZlsxXSB3b3VsZCBzdGlsbCBiZSBhIG51bGwgc3RyaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgYnVmWzBdID0gJ1wwJzsKKyAgICAgICAgYnVmWzFdID0gJ1wwJzsKKyAgICAgICAgaWYgKGFyZ3YpCisgICAgICAgICAgICBhcmd2Kys7ICAgIC8qIFNraXAgYXJndlswXSAqLworICAgICAgICB3aGlsZSAoIGFyZ3YgJiYgKmFyZ3YgKSB7CisgICAgICAgICAgICBzdHJsY2F0KGJ1ZiwgIiAiLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICBzdHJsY2F0KGJ1ZiwgKmFyZ3YsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RybGVuKGJ1ZikgPj0gQlVGU0laLTEwKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInBhcmFtcyAlbHUvJWQgJXNcbiIsIHN0cmxlbihidWYpLCBCVUZTSVosIGJ1Zik7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPQorICAgICAgICAgICAgc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKSAtIDEsIGJ1ZisxKTsKKworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoUF9TWVNURU0gJiBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfRkxBRykgCisjaWZkZWYgU1dSVU5fS19DTEFTUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgoUFJJX0lUSEQgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX0NMQVNTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDMgIC8qIGRldmljZSBkcml2ZXIgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAyICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDQgIC8qICBhcHBsaWNhdGlvbiAgICAgKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDQgIC8qICBhcHBsaWNhdGlvbiAgICAgKi8KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyNpZmRlZiBuZXRic2Q1CisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQpIHsKKwljYXNlIExTT05QUk9DOgorICAgICAgICBjYXNlIExTUlVOOiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExTU0xFRVA6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMU0lETDoKKwljYXNlIExTU1VTUEVOREVEOgorICAgICAgICBjYXNlIExTU1RPUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIExTREVBRDoKKyAgICAgICAgY2FzZSBMU1pPTUI6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKwkJICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgCisJCSAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworCQkgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQmFkIHByb2Nlc3Mgc3RhdHVzICVjICgweCV4KVxuIiwgcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQsIHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFUKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCAmIDB4RkYpIHsKKyAgICAgICAgY2FzZSBTT05QUk9DOgorICAgICAgICBjYXNlIFNSVU46ICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTEVFUDoKKwljYXNlIFNBQ1RJVkU6CisgICAgICAgIGNhc2UgU1dBSVQ6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1NUT1A6CisgICAgICAgIGNhc2UgU0xPQ0s6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU0RFQUQ6CisgICAgICAgIGNhc2UgU1pPTUI6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7ICAgLyogaS5lLiAibm90IGxvYWRlZCIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOyAgIC8qIEFjdHVhbGx5IGludmFsaWQgICovCisJCSAgICAgIHNubXBfbG9nKExPR19FUlIsICJCYWQgcHJvY2VzcyBzdGF0dXMgJWMgKDB4JXgpXG4iLCBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCwgcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQpOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgCisjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CisgICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKHByb2NfdGFibGVbaV0ua2lfcnVzYWdlLnJ1X3V0aW1lLnR2X3NlYyoxMDAwMDAwICsgcHJvY190YWJsZVtpXS5raV9ydXNhZ2UucnVfdXRpbWUudHZfdXNlYykgLyAxMDAwMDsKKwkgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZS5ydV9zdGltZS50dl9zZWMqMTAwMDAwMCArIHByb2NfdGFibGVbaV0ua2lfcnVzYWdlLnJ1X3N0aW1lLnR2X3VzZWMpIC8gMTAwMDA7CisJIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5raV9ydXNhZ2VfY2gucnVfdXRpbWUudHZfc2VjKjEwMDAwMDAgKyBwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZV9jaC5ydV91dGltZS50dl91c2VjKSAvIDEwMDAwOworCSBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ua2lfcnVzYWdlX2NoLnJ1X3N0aW1lLnR2X3NlYyoxMDAwMDAwICsgcHJvY190YWJsZVtpXS5raV9ydXNhZ2VfY2gucnVfc3RpbWUudHZfdXNlYykgLyAxMDAwMDsKKwkgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IHByb2NfdGFibGVbaV0ua2lfcnNzaXplICogKGdldHBhZ2VzaXplKCkvMTAyNCk7ICAvKiBpbiBrQiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0tWTV9HRVRQUk9DMikgfHwgZGVmaW5lZChvcGVuYnNkNSkKKyAgICAgICAgLyoKKyAgICAgICAgICogbmV3ZXIgTmV0QlNELCBPcGVuQlNECisgICAgICAgICAqLworCWVudHJ5LT5oclNXUnVuUGVyZkNQVSA9IHByb2NfdGFibGVbaV0ucF9ydGltZV9zZWMqMTAwOworCWVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSBwcm9jX3RhYmxlW2ldLnBfcnRpbWVfdXNlYyAvIDEwMDAwOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBwcm9jX3RhYmxlW2ldLnBfdm1fcnNzaXplOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gKj0gKGdldHBhZ2VzaXplKCkgLyAxMDI0KTsKKyNlbGlmIGRlZmluZWQoZHJhZ29uZmx5KSAmJiBfX0RyYWdvbkZseV92ZXJzaW9uID49IDE5MDAwMAorCWVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSBwcm9jX3RhYmxlW2ldLmtwX2x3cC5rbF91dGlja3M7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ua3BfbHdwLmtsX3N0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9sd3Aua2xfaXRpY2tzOworCWVudHJ5LT5oclNXUnVuUGVyZkNQVSA9IGVudHJ5LT5oclNXUnVuUGVyZkNQVSAvIDEwMDAwOworCisJZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IHByb2NfdGFibGVbaV0ua3Bfdm1fbWFwX3NpemUgLyAxMDI0OworI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpCisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IHByb2NfdGFibGVbaV0ua3BfZXByb2MuZV91dGlja3M7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ua3BfZXByb2MuZV9zdGlja3M7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ua3BfZXByb2MuZV9pdGlja3M7CisKKwllbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5rcF92bV9tYXBfc2l6ZSAvIDEwMjQ7CisKKyNlbHNlCisgICAgICAgIC8qCisgICAgICAgICAqIGVhcmx5IEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRAorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IHByb2NfdGFibGVbaV0ua3BfcHJvYy5wX3V0aWNrczsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ua3BfcHJvYy5wX3N0aWNrczsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ua3BfcHJvYy5wX2l0aWNrczsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IHByb2NfdGFibGVbaV0ua3BfZXByb2MuZV92bS52bV9yc3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoZ2V0cGFnZXNpemUoKSAvIDEwMjQpOworI2VuZGlmCisgICAgfQorICAgIC8qCisgICAgICogJ3Byb2NfdGFibGUnIGlzIG93bmVkIGJ5IHRoZSBrdm0gbGlicmFyeSwKKyAgICAgKiAgIHNvIHNob3VsZG4ndCBiZSBmcmVlZCBoZXJlLgorICAgICAqLworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsImxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1NmNmOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIHN3cnVuX2t2bV9wcm9jLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGt2bV9nZXRwcm9jKCkgaW50ZXJmYWNlIC0gU29sYXJpcworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19VU0VSX0gKKyNkZWZpbmUgX0tNRU1VU0VSCisjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BST0NfSAorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyAgICAvKiBYWFggLSBzaG91bGQgcmVhbGx5IGJlIHByb3RlY3RlZCAqLworI2luY2x1ZGUgPHN5cy92YXIuaD4KKworI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfS1ZNX0gKKyNpbmNsdWRlIDxrdm0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfS1NUQVRfSAorI2luY2x1ZGUgPGtzdGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjaW5jbHVkZSAia2VybmVsLmgiCisjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXg7CisgICAga3N0YXRfY3RsX3QgKmtzYzsKKyAgICBrc3RhdF90ICAgICAqa3M7CisgICAgc3RydWN0IHZhciAgIHY7CisKKyAgICBpZiAoTlVMTCAhPSAoa3NjID0ga3N0YXRfb3BlbigpKSkgeworICAgICAgICBpZiAoKE5VTEwgIT0gKGtzICA9IGtzdGF0X2xvb2t1cChrc2MsICJ1bml4IiwgMCwgInZhciIpKSkgJiYKKyAgICAgICAgICAgICggLTEgICE9IGtzdGF0X3JlYWQoa3NjLCBrcywgJnYgKSkpIHsKKyAgICAgICAgICAgIF9zd3J1bl9tYXggPSB2LnZfcHJvYzsKKyAgICAgICAgfQorICAgICAgICBrc3RhdF9jbG9zZShrc2MpOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgICAgICAqcHJvY2RpciA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAgICAgICAqcHJvY2VudHJ5X3A7CisgICAgc3RydWN0IHByb2MgICAgICAgICAqcHJvY19idWY7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcGlkLCByYywgaTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICpjcDsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKyAgICAKKyAgICAvKgorICAgICAqIEV2ZW4gaWYgd2UncmUgdXNpbmcga3ZtX3Byb2MoKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbgorICAgICAqICAgYWJvdXQgYSBwYXJ0aWN1bGFyIHByb2Nlc3MsIHdlIHNlZW0gdG8gdXNlIC9wcm9jIHRvIGdldAorICAgICAqICAgdGhlIGluaXRpYWwgbGlzdCBvZiBwcm9jZXNzZXMgdG8gcmVwb3J0IG9uLgorICAgICAqLworICAgIHByb2NkaXIgPSBvcGVuZGlyKCIvcHJvYyIpOworICAgIGlmICggTlVMTCA9PSBwcm9jZGlyICkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVuIC9wcm9jIiApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXYWxrIHRocm91Z2ggdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIGluIHRoZSAvcHJvYyB0cmVlCisgICAgICovCisgICAgd2hpbGUgKCBOVUxMICE9IChwcm9jZW50cnlfcCA9IHJlYWRkaXIoIHByb2NkaXIgKSkpIHsKKyAgICAgICAgcGlkID0gYXRvaSggcHJvY2VudHJ5X3AtPmRfbmFtZSApOworICAgICAgICBpZiAoIDAgPT0gcGlkICkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIFByZXN1bWFibHkgJy4nIG9yICcuLicgKi8KKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHBpZCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgaWYgKE5VTEwgPT0gKHByb2NfYnVmID0ga3ZtX2dldHByb2MoIGtkLCBwaWQpKSkgeworICAgICAgICAgICAgLyogcmVsZWFzZSBlbnRyeSAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfYnVmLT5wX3VzZXIudV9jb21tKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHVfcHNhcmdzIGludG8gdHdvOgorICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAqICAgICBhcmd2WzEuLl0gaXMgaHJTV1J1blBhcmFtZXRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoIGNwID0gcHJvY19idWYtPnBfdXNlci51X3BzYXJnczsgJyAnID09ICpjcDsgY3ArKyApCisgICAgICAgICAgICA7CisgICAgICAgICpjcCA9ICdcMCc7ICAgIC8qIEVuZCBvZiBhcmd2WzBdICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19idWYtPnBfdXNlci51X3BzYXJncyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPQorICAgICAgICAgICAgc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKSAtIDEsIGNwICsgMSk7CisgICAgICAgICpjcCA9ICcgJzsgICAgIC8qIFJlc3RvcmUgdV9wc2FyZ3MgdmFsdWUgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igc3lzdGVtIHByb2Nlc3NlcworICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gKFNTWVMgJiBwcm9jX2J1Zi0+cF9mbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgLyoga2VybmVsIHByb2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgIC8qICBhcHBsaWNhdGlvbiAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgc3dpdGNoIChwcm9jX2J1Zi0+cF9zdGF0KSB7CisgICAgICAgIGNhc2UgU1JVTjoKKyAgICAgICAgY2FzZSBTT05QUk9DOiBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xFRVA6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHJvY19idWYtPnBfdXRpbWUgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfYnVmLT5wX3N0aW1lICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9ICBwcm9jX2J1Zi0+cF9zd3JzczsKKwkJLyogWFhYIC0gaXMgdGhpcyByZXBvcnRlZCBpbiBrQj8gKi8KKyAgICB9CisgICAgY2xvc2VkaXIoIHByb2NkaXIgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX25saXN0LmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX25saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiNmM5YwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIHN3cnVuX25saXN0LmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIG5saXN0KCkgaW50ZXJmYWNlCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXg7CisKKyAgICBhdXRvX25saXN0KCAgUFJPQ19TWU1CT0wsIDAsIDApOworICAgIGF1dG9fbmxpc3QoIE5QUk9DX1NZTUJPTCwgKGNoYXIgKikmX3N3cnVuX21heCwgc2l6ZW9mKGludCkpOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgcHJvYyAgICAgICAgICpwcm9jX3RhYmxlOworICAgIGludCAgICAgICAgICAgICAgICAgIHByb2NfdHlwZV9iYXNlOworICAgIGludCAgICAgICAgICAgICAgICAgIG5wcm9jLCBpLCByYzsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIGF1dG9fbmxpc3QoIE5QUk9DX1NZTUJPTCwgKGNoYXIgKikmbnByb2MsIHNpemVvZihpbnQpKTsKKyAgICBwcm9jX3RhYmxlID0gKHN0cnVjdCBwcm9jICopIG1hbGxvYyhucHJvYyooc2l6ZW9mKHN0cnVjdCBwcm9jKSkpOworCisgICAgYXV0b19ubGlzdCggIFBST0NfU1lNQk9MLCAoY2hhciAqKSZwcm9jX3RhYmxlX2Jhc2UsIHNpemVvZihpbnQpKTsKKyAgICBORVRTTk1QX0tMT09LVVAocHJvY190YWJsZV9iYXNlLCAoY2hhciAqKXByb2NfdGFibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wcm9jKihzaXplb2Yoc3RydWN0IHByb2MpKSk7CisKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jOyBpKysgKSB7CisgICAgICAgIGlmICgwID09IHByb2NfdGFibGVbaV0ucF9zdGF0KQorICAgICAgICAgICAgY29udGludWU7CS8qIFNraXAgdW51c2VkIGVudHJpZXMgKi8KKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShwcm9jX3RhYmxlW2ldLnBfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYIC0gV2hhdCBpbmZvcm1hdGlvbiBkb2VzICdzdHJ1Y3QgcHJvYycgY29udGFpbj8KKyAgICAgICAgICovCisgICAgICAgIAorLyoKKyBBcHBhcmVudGx5IG5vIHByb2Nlc3MgbmFtZS9hcmd1bWVudCBpbmZvcm1hdGlvbgorICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgcHJvY190YWJsZVtpXS4/Pz8pOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgcHJvY190YWJsZVtpXS4/Pz8pOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgPz8/KTsKKyAqLworCisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtpXS5wX3N0YXQpIHsKKy8qIFhYWCAtIHdoaWNoIG5hbWVzIHRvIHVzZSA/PyAqLworICAgICAgICBjYXNlIFNBQ1RJVkU6CisgICAgICAgIGNhc2UgU1JVTjoKKyAgICAgICAgY2FzZSBTT05QUk9DOiBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1dBUDoKKyAgICAgICAgY2FzZSBTU0xFRVA6CisgICAgICAgIGNhc2UgU1dBSVQ6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTVE9QOiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSURMOgorICAgICAgICBjYXNlIFNaT01COgorICAgICAgICBkZWZhdWx0OiAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKHByb2NfdGFibGVbaV0ucF91dGltZS50dl9zZWMgICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBfdXRpbWUudHZfdXNlYyAvIDEwMDAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBfc3RpbWUudHZfc2VjICAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5wX3N0aW1lLnR2X3VzZWMgLyAxMDAwMCk7CisgICAgLyoKKyAgICAgb3IgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IHByb2NfdGFibGVbaV0ucF90aW1lOworICAgICAqLworICAgIH0KKyAgICBmcmVlKHByb2NfdGFibGUpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZDQwZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBzd3J1bl9udWxsLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGR1bW15IGludGVyZmFjZSBmb3Igbm9uLXN1cHBvcnRlZCBzeXN0ZW1zCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk2MWVlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBzd3J1bl9wcm9jZnNfcHNpbmZvLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIC9wcm9jL3twaWR9L3BzaW5mbyBpbnRlcmZhY2UgLSBTb2xhcmlzCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNkZWZpbmUgSEFWRV9TWVNfUFJPQ0ZTX0ggICAgLyogWFhYIC0gTmVlZHMgYSBjb25maWd1cmUgY2hlY2shICovCisjaWZkZWYgSEFWRV9TWVNfUFJPQ0ZTX0gKKyNkZWZpbmUgX0tFUk5FTCAgICAgICAgICAgICAgLyogRm9yIHBzaW5mb190ICovCisjaW5jbHVkZSA8c3lzL3Byb2Nmcy5oPgorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BST0NfSAorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgICAgICAqcHJvY2RpciA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAgICAgICAqcHJvY2VudHJ5X3A7CisgICAgcHNpbmZvX3QgICAgICAgICAgICAgcHNpbmZvOworICAgIGludCAgICAgICAgICAgICAgICAgIHBpZCwgcmMsIGZkOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwLCBidWZbNTEyXTsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIHByb2NkaXIgPSBvcGVuZGlyKCIvcHJvYyIpOworICAgIGlmICggTlVMTCA9PSBwcm9jZGlyICkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVuIC9wcm9jIiApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXYWxrIHRocm91Z2ggdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIGluIHRoZSAvcHJvYyB0cmVlCisgICAgICovCisgICAgd2hpbGUgKCBOVUxMICE9IChwcm9jZW50cnlfcCA9IHJlYWRkaXIoIHByb2NkaXIgKSkpIHsKKyAgICAgICAgcGlkID0gYXRvaSggcHJvY2VudHJ5X3AtPmRfbmFtZSApOworICAgICAgICBpZiAoIDAgPT0gcGlkICkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIFByZXN1bWFibHkgJy4nIG9yICcuLicgKi8KKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHBpZCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdyBleHRyYWN0IHRoZSBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbgorICAgICAgICAgKiAgIGZyb20gdGhlIHZhcmlvdXMgL3Byb2N7UElEfS8gaW50ZXJmYWNlIGZpbGVzCisgICAgICAgICAqLworCisgICAgICAgIHNucHJpbnRmKCBidWYsIHNpemVvZihidWYpLCAiL3Byb2MvJWQvcHNpbmZvIiwgcGlkICk7CisgICAgICAgIGZkID0gb3BlbiggYnVmLCBPX1JET05MWSApOworICAgICAgICByZWFkKCBmZCwgJnBzaW5mbywgc2l6ZW9mKHBzaW5mbykpOworICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbgorICAgICAgICAgICAgPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgIHBzaW5mby5wcl9mbmFtZSk7CisgICAgICAgIC8qCisgICAgICAgICAqICBTcGxpdCBwcl9wc2FyZ3MgaW50byB0d286CisgICAgICAgICAqICAgICBhcmd2WzBdICAgaXMgaHJTV1J1blBhdGgKKyAgICAgICAgICogICAgIGFyZ3ZbMS4uXSBpcyBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKi8KKyAgICAgICAgZm9yICggY3AgPSBwc2luZm8ucHJfcHNhcmdzOyAnICcgPT0gKmNwOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbgorICAgICAgICAgICAgPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgIHBzaW5mby5wcl9wc2FyZ3MpOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4KKyAgICAgICAgICAgID0gc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpIC0gMSwgY3ArMSk7CisgICAgICAgICpjcCA9ICcgJzsgICAgIC8qIFJlc3RvcmUgcHJfcHNhcmdzIHZhbHVlICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgZm9yIHN5c3RlbSBwcm9jZXNzZXMKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IChQUl9JU1NZUyAmIHBzaW5mby5wcl9mbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgLyoga2VybmVsIHByb2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgIC8qICBhcHBsaWNhdGlvbiAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgc3dpdGNoIChwc2luZm8ucHJfbHdwLnByX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU1JVTjoKKyAgICAgICAgY2FzZSBTT05QUk9DOiBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xFRVA6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHNpbmZvLnByX3RpbWUudHZfc2VjICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwc2luZm8ucHJfdGltZS50dl9uc2VjIC8gMTAwMDAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gIHBzaW5mby5wcl9yc3NpemU7CisJCS8qIFhYWCAtIGlzIHRoaXMgcmVwb3J0ZWQgaW4ga0I/ICovCisgICAgfQorICAgIGNsb3NlZGlyKCBwcm9jZGlyICk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOWUyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIHN3cnVuX3Byb2Nmc19saW51eC5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICAvcHJvYy97cGlkfS9zdGF0dXMgaW50ZXJmYWNlIC0gTGludXgKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9UQVNLU19ICisjaW5jbHVkZSA8bGludXgvdGFza3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworc3RhdGljIGxvbmcgcGFnZXNpemU7CitzdGF0aWMgbG9uZyBzY19jbGtfdGNrOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyNpZmRlZiBIQVZFX0xJTlVYX1RBU0tTX0gKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXggPSBOUl9UQVNLUzsgICAvKiBmcm9tIDxsaW51eC90YXNrcy5oPiAqLworI2VuZGlmCisgICAgCisgICAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICAgIHNjX2Nsa190Y2sgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgICAgICAqcHJvY2RpciA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAgICAgICAqcHJvY2VudHJ5X3A7CisgICAgRklMRSAgICAgICAgICAgICAgICAqZnA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcGlkLCBpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIGNwdTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICBidWZbQlVGU0laXSwgYnVmMltCVUZTSVpdLCAqY3AsICpjcDE7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisgICAgCisgICAgcHJvY2RpciA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgaWYgKCBOVUxMID09IHByb2NkaXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gL3Byb2MiICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgaW4gdGhlIC9wcm9jIHRyZWUKKyAgICAgKi8KKyAgICB3aGlsZSAoIE5VTEwgIT0gKHByb2NlbnRyeV9wID0gcmVhZGRpciggcHJvY2RpciApKSkgeworICAgICAgICBwaWQgPSBhdG9pKCBwcm9jZW50cnlfcC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggMCA9PSBwaWQgKQorICAgICAgICAgICAgY29udGludWU7ICAgLyogUHJlc3VtYWJseSAnLicgb3IgJy4uJyAqLworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdyBleHRyYWN0IHRoZSBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbgorICAgICAgICAgKiAgIGZyb20gdGhlIHZhcmlvdXMgL3Byb2N7UElEfS8gaW50ZXJmYWNlIGZpbGVzCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICAgTmFtZTogIHByb2Nlc3MgbmFtZQorICAgICAgICAgKi8KKyAgICAgICAgc25wcmludGYoIGJ1ZjIsIEJVRlNJWiwgIi9wcm9jLyVkL3N0YXR1cyIsIHBpZCApOworICAgICAgICBmcCA9IGZvcGVuKCBidWYyLCAiciIgKTsKKyAgICAgICAgaWYgKCFmcCkgeworICAgICAgICAgICAgbmV0c25tcF9zd3J1bl9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBmaWxlIChwcm9jZXNzKSBwcm9iYWJseSB3ZW50IGF3YXkgKi8KKwl9CisgICAgICAgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgICAgICAgaWYgKGZnZXRzKCBidWYsIEJVRlNJWi0xLCBmcCApID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGZwKTsKKworICAgICAgICBmb3IgKCBjcCA9IGJ1ZjsgKmNwICE9ICc6JzsgY3ArKyApCisgICAgICAgICAgICA7CisgICAgICAgIHdoaWxlIChpc3NwYWNlKCooKytjcCkpKQkvKiBTa2lwICc6JyBhbmQgZm9sbG93aW5nIHNwYWNlcyAqLworICAgICAgICAgICAgOworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xLCAiJXMiLCBjcCk7CisgICAgICAgIGlmICggJ1xuJyA9PSBlbnRyeS0+aHJTV1J1bk5hbWVbIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4tMSBdKSB7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVbIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4tMSBdID0gJ1wwJzsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4tLTsgICAgICAgICAgIC8qIFN0YW1wIG9uIHRyYWlsaW5nIG5ld2xpbmUgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICBDb21tYW5kIExpbmU6CisgICAgICAgICAqICAgICBhcmd2WzBdICdcMCcgYXJndlsxXSAnXDAnIC4uLi4KKyAgICAgICAgICovCisgICAgICAgIHNucHJpbnRmKCBidWYyLCBCVUZTSVosICIvcHJvYy8lZC9jbWRsaW5lIiwgcGlkICk7CisgICAgICAgIGZwID0gZm9wZW4oIGJ1ZjIsICJyIiApOworICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7IC8qIGZpbGUgKHByb2Nlc3MpIHByb2JhYmx5IHdlbnQgYXdheSAqLworICAgICAgICB9CisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IEhSU1dSVU5UWVBFX0FQUExJQ0FUSU9OOworICAgICAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGNwID0gZmdldHMoIGJ1ZiwgQlVGU0laLTEsIGZwICk7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogICAgIGFyZ3ZbMF0gICBpcyBoclNXUnVuUGF0aAorICAgICAgICAgICAgICovIAorICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsICIlcyIsIGJ1Zik7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU3RpdGNoIHRvZ2V0aGVyIGFyZ3ZbMS4uXSB0byBjb25zdHJ1Y3QgaHJTV1J1blBhcmFtZXRlcnMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY3AgPSBidWYgKyBlbnRyeS0+aHJTV1J1blBhdGhfbGVuKzE7CisgICAgICAgICAgICB3aGlsZSAoIDEgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCpjcCkKKyAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICBpZiAoICdcMCcgPT0gKihjcCsxKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgLyogJ1wwJydcMCcgPT4gRW5kIG9mIGNvbW1hbmQgbGluZSAqLworICAgICAgICAgICAgICAgICpjcCA9ICcgJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4KKyAgICAgICAgICAgICAgICA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycykgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBlbnRyeS0+aHJTV1J1blBhdGhfbGVuICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBlbXB0eSAvcHJvYy9QSUQvY21kbGluZSwgaXQncyBwcm9iYWJseSBhIGtlcm5lbCB0aHJlYWQgKi8KKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSAwOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IDA7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSBIUlNXUlVOVFlQRV9PUEVSQVRJTkdTWVNURU07CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAgIHt4eHh9IHt4eHh9IFNUQVRVUyAge3h4eH0qMTAgIFVUSU1FIFNUSU1FICB7eHh4fSo4IFJTUworICAgICAgICAgKi8KKyAgICAgICAgc25wcmludGYoIGJ1ZiwgQlVGU0laLCAiL3Byb2MvJWQvc3RhdCIsIHBpZCApOworICAgICAgICBmcCA9IGZvcGVuKCBidWYsICJyIiApOworICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7IC8qIGZpbGUgKHByb2Nlc3MpIHByb2JhYmx5IHdlbnQgYXdheSAqLworCX0KKyAgICAgICAgaWYgKGZnZXRzKCBidWYsIEJVRlNJWi0xLCBmcCApID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGZwKTsKKworICAgICAgICBjcCA9IGJ1ZjsKKyAgICAgICAgd2hpbGUgKCAnICcgIT0gKihjcCsrKSkgICAgLyogU2tpcCBmaXJzdCBmaWVsZCAqLworICAgICAgICAgICAgOworICAgICAgICBjcDEgPSBjcDsgICAgICAgICAgICAgICAgICAvKiBTa2lwIHNlY29uZCBmaWVsZCAqLworICAgICAgICB3aGlsZSAoKmNwMSkgeworICAgICAgICAgICAgaWYgKCpjcDEgPT0gJyknKSBjcCA9IGNwMTsKKyAgICAgICAgICAgIGNwMSsrOworICAgICAgICB9CisgICAgICAgIGNwICs9IDI7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKCpjcCkgeworICAgICAgICBjYXNlICdSJzogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdTJzogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRCc6CisgICAgICAgIGNhc2UgJ1QnOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdaJzoKKyAgICAgICAgZGVmYXVsdDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGk9MTE7IGk7IGktLSkgeyAgIC8qIFNraXAgU1RBVFVTICsgMTAgZmllbGRzICovCisgICAgICAgICAgICB3aGlsZSAoJyAnICE9ICooKytjcCkpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgfQorICAgICAgICBjcHUgID0gYXRvbCggY3AgKTsgICAgICAgICAgICAgICAgICAgICAvKiAgdXRpbWUgKi8KKyAgICAgICAgd2hpbGUgKCAnICcgIT0gKigrK2NwKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgY3B1ICs9IGF0b2woIGNwICk7ICAgICAgICAgICAgICAgICAgICAgLyogK3N0aW1lICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSBjcHUgKiAxMDAgLyBzY19jbGtfdGNrOworCisgICAgICAgIGZvciAoaT05OyBpOyBpLS0pIHsgICAvKiBTa2lwIHN0aW1lICsgOCBmaWVsZHMgKi8KKyAgICAgICAgICAgIHdoaWxlICgnICcgIT0gKigrK2NwKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBjcCsrOworICAgICAgICB9CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBhdG9sKCBjcCApOyAgICAgICAvKiByc3MgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gKj0gKHBhZ2VzaXplLzEwMjQpOyAgLyogaW4ga0IgKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICB9CisgICAgY2xvc2VkaXIoIHByb2NkaXIgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICUiIE5FVFNOTVBfUFJJeiAiZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjQwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBzd3J1bl9wcm9jaW5mby5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBnZXRwcm9jcygpIGludGVyZmFjZSAtIEFJWAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8cHJvY2luZm8uaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKK2ludCBhdmFpbCA9IDEwMjQ7ICAgIC8qIFNpemUgb2YgdGFibGUgdG8gYWxsb2NhdGUgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgcHJvY3NpbmZvICAgICpwcm9jX3RhYmxlOworICAgIHBpZF90ICAgICAgICAgICAgICAgIHByb2NfaW5kZXggPSAwOworICAgIGludCAgICAgICAgICAgICAgICAgIG5wcm9jcywgaTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICBwZW50cnlbMTI4XSwgKnBwZW50cnksIGZ1bGxwYXRoWzEyOF07CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIGJ1ZmZlciBmb3IgdGhlIHByb2Nlc3MgdGFibGUsIGJhc2VkIG9uIHRoZSBzaXplIG9mCisgICAgICogICB0aGUgdGFibGUgdGhlIGxhc3QgdGltZSB3ZSBsb2FkZWQgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgKiBJZiB0aGlzIGlzbid0IGJpZyBlbm91Z2gsIGtlZXAgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgKiAgIHRhYmxlIHVudGlsIHdlIGNhbiByZXRyaWV2ZSB0aGUgd2hvbGUgdGhpbmcuCisgICAgICovCisgICAgcHJvY190YWJsZSA9IChzdHJ1Y3QgcHJvY3NpbmZvICopIG1hbGxvYyhhdmFpbCooc2l6ZW9mKHN0cnVjdCBwcm9jc2luZm8pKSk7CisgICAgd2hpbGUgKCBhdmFpbCA9PSAobnByb2NzID0gZ2V0cHJvY3MocHJvY190YWJsZSwgc2l6ZW9mKHN0cnVjdCBwcm9jc2luZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihzdHJ1Y3QgZmRzaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2NfaW5kZXgsIGF2YWlsKSkpIHsKKyAgICAgICAgYXZhaWwgKz0gMTAyNDsKKyAgICAgICAgZnJlZSggcHJvY190YWJsZSApOworICAgICAgICBwcm9jX3RhYmxlID0gKHN0cnVjdCBwcm9jc2luZm8gKikgbWFsbG9jKGF2YWlsKihzaXplb2Yoc3RydWN0IHByb2NzaW5mbykpKTsKKyAgICB9CisKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jczsgaSsrICkgeworICAgICAgICBpZiAoMCA9PSBwcm9jX3RhYmxlW2ldLnBpX3N0YXRlKQorICAgICAgICAgICAgY29udGludWU7CS8qIFNraXAgdW51c2VkIGVudHJpZXMgKi8KKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShwcm9jX3RhYmxlW2ldLnBpX3BpZCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworCW1lbXNldChwZW50cnksIDAsIHNpemVvZihwZW50cnkpKTsJCQkJCQkJCS8qIEVtcHR5IGVhY2ggdGltZSAqLworCWlmKCEoU0tQUk9DICYgcHJvY190YWJsZVtpXS5waV9mbGFncykpIHsJCQkJCQkJLyogUmVtb3ZlIGtlcm5lbCBwcm9jZXNzZXMgKi8KKwkJZ2V0YXJncygmcHJvY190YWJsZVtpXSwgc2l6ZW9mKHN0cnVjdCBwcm9jc2luZm8pLCBwZW50cnksIHNpemVvZihwZW50cnkpKTsgICAgICAgICAgICAgIC8qIENhbGwgZ2V0YXJncygpICovCisJCWZvcihwcGVudHJ5ID0gcGVudHJ5OyAhKCgqcHBlbnRyeSA9PSAnXDAnKSAmJiAoKihwcGVudHJ5KzEpID09ICdcMCcpKTsgcHBlbnRyeSsrKSB7ICAgICAvKiBQcm9jZXNzIHVudGlsIDB4MDAgMHgwMCAqLworCQkJaWYoKCpwcGVudHJ5ID09ICdcMCcpICYmICghKCoocHBlbnRyeSsxKSA9PSAnXDAnKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiAweDAwICEweDAwICovCisJCQkJKnBwZW50cnkgPSAnICc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbmdlIHRvIDB4MjAgITB4MDAgKi8KKwkJfQorCQlzbnByaW50ZihmdWxscGF0aCwgc2l6ZW9mKGZ1bGxwYXRoKS0xLCAiJS4qcyIsIChpbnQpKHN0cmNocihwZW50cnksICcgJyktcGVudHJ5KSwgcGVudHJ5KTsKKworCQllbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXRoLAorCQkJc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCksICIlcyIsIGZ1bGxwYXRoKTsKKwkJcHBlbnRyeSA9IHN0cnJjaHIoZnVsbHBhdGgsICcvJyk7CisJCWlmKHBwZW50cnkgPT0gTlVMTCkgeworCQkJZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKwkJCQlzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSwgIiVzIiwgZnVsbHBhdGgpOworCQl9CisJCWVsc2UgeworCQkJZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKwkJCQlzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSwgIiVzIiwgcHBlbnRyeSArIDEpOworCQl9CisKKwkJcHBlbnRyeSA9IHN0cmNocihwZW50cnksICcgJyk7CisJCWVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisJCQlzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKSwgIiUuKnMiLCAoaW50KShwZW50cnkgLSBwcGVudHJ5KSwgcHBlbnRyeSArIDEpOworCX0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoU0tQUk9DICYgcHJvY190YWJsZVtpXS5waV9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgIC8qIGtlcm5lbCBwcm9jZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDQgICAvKiAgYXBwbGljYXRpb24gICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtpXS5waV9zdGF0ZSkgeworICAgICAgICBjYXNlIFNBQ1RJVkU6CisgICAgICAgIGNhc2UgU1JVTjogICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NMRUVQOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTVE9QOiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSURMOgorICAgICAgICBjYXNlIFNaT01COgorICAgICAgICBkZWZhdWx0OiAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChwcm9jX3RhYmxlW2ldLnBpX3J1LnJ1X3V0aW1lLnR2X3NlYyAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5waV9ydS5ydV91dGltZS50dl91c2VjIC8gMTAwMDAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucGlfcnUucnVfc3RpbWUudHZfc2VjICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBpX3J1LnJ1X3N0aW1lLnR2X3VzZWMgLyAxMDAwMDAwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSAgcHJvY190YWJsZVtpXS5waV9zaXplOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gKj0gKGdldHBhZ2VzaXplKCkvMTAyNCk7ICAvKiBpbiBrQiAqLworICAgIH0KKyAgICBmcmVlKHByb2NfdGFibGUpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KSBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JiYjIzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogc3dydW5fcHJwc2luZm8uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgZ2V0cHJwc2luZm8oKSBpbnRlcmZhY2UgLSBEeW5peAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV8/Pz8/P19ICisjaW5jbHVkZSA8Pz8/Pz8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBwaWRfdCAgICAgICAgICAgICAgICBuZXh0cHJvYyA9IDA7CisgICAgZ2V0cHJwc2luZm9fdCAgICAgICAqc2VsZWN0ICAgPSAwOworICAgIHBycHNpbmZvX3QgICAgICAgICAgIG15cHNpbmZvOworICAgIGludCAgICAgICAgICAgICAgICAgIHJjOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgd2hpbGUgKCAwIDw9ICggbmV4dHByb2MgPSBnZXRwcnBzaW5mbyggbmV4dHByb2MsIHNlbGVjdCwgJm15cHNpbmZvICkpKSB7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUobXlwc2luZm8ucHJfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIG15cHNpbmZvLnByX2ZuYW1lKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHByX3BzYXJncyBpbnRvIHR3bzoKKyAgICAgICAgICogICAgIGFyZ3ZbMF0gICBpcyBoclNXUnVuUGF0aAorICAgICAgICAgKiAgICAgYXJndlsxLi5dIGlzIGhyU1dSdW5QYXJhbWV0ZXJzCisgICAgICAgICAqLworICAgICAgICBmb3IgKCBjcCA9IG15cHNpbmZvLnByX3BzYXJnczsgJyAnID09ICpjcDsgY3ArKyApCisgICAgICAgICAgICA7CisgICAgICAgICpjcCA9ICdcMCc7ICAgIC8qIEVuZCBvZiBhcmd2WzBdICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBteXBzaW5mby5wcl9wc2FyZ3MpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgY3ArMSk7CisgICAgICAgICpjcCA9ICcgJzsgICAgIC8qIFJlc3RvcmUgcHJfcHNhcmdzIHZhbHVlICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYIC0gTm8gaW5mb3JtYXRpb24gcmVnYXJkaW5nIHN5c3RlbSBwcm9jZXNzZXMgdnMgYXBwbGljYXRpb25zCisgICAgICAgICAqLworCisgICAgICAgIHN3aXRjaCAobXlwc2luZm8ucHJfc3RhdGUpIHsKKy8qIFhYWCAtIHdoaWNoIG5hbWVzIHRvIHVzZSA/PyAqLworICAgICAgICBjYXNlIFNBQ1RJVkU6CisgICAgICAgIGNhc2UgU1JVTjoKKyAgICAgICAgY2FzZSBTT05QUk9DOiBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1dBUDoKKyAgICAgICAgY2FzZSBTU0xFRVA6CisgICAgICAgIGNhc2UgU1dBSVQ6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTVE9QOiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSURMOgorICAgICAgICBjYXNlIFNaT01COgorICAgICAgICBkZWZhdWx0OiAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChteXBzaW5mby5wcl90aW1lLnR2X3NlYyAgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKG15cHNpbmZvLnByX3RpbWUudHZfbnNlYyAvIDEwMDAwMDAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IChteXBzaW5mby5wcl9yc3NpemUpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gKj0gKE1VX1BBR0VTSVpFLzEwMjQpOyAgLyogaW4ga0IgKi8KKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWNlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBzd3J1bl9wc3RhdC5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBwc3RhdF9nZXRkeW5hbWljKCkgaW50ZXJmYWNlIC0gSFBVWAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFNUQVRfSAorI2RlZmluZSBfUFNUQVQ2NAorI2luY2x1ZGUgPHN5cy9wc3RhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXg7CisgICAgc3RydWN0IHBzdF9zdGF0aWMgcHN0X2J1ZjsKKworICAgIHBzdGF0X2dldHN0YXRpYyggJnBzdF9idWYsIHNpemVvZihzdHJ1Y3QgcHN0X3N0YXRpYyksIDEsIDApOworICAgIF9zd3J1bl9tYXggPSBwc3RfYnVmLm1heF9wcm9jOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgcHN0X3N0YXR1cyAgICpwcm9jX3RhYmxlOworICAgIHN0cnVjdCBwc3RfZHluYW1pYyAgIHBzdF9keW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgbnByb2MsIGksIHJjOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwMSwgKmNwMjsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIHBzdGF0X2dldGR5bmFtaWMoICZwc3RfZHluLCBzaXplb2Yoc3RydWN0IHBzdF9keW5hbWljKSwgMSwgMCk7CisgICAgbnByb2MgPSBwc3RfZHluLnBzZF9hY3RpdmVwcm9jczsKKyAgICBwcm9jX3RhYmxlID0gKHN0cnVjdCBwc3Rfc3RhdHVzICopIG1hbGxvYyhucHJvYyooc2l6ZW9mKHN0cnVjdCBwc3Rfc3RhdHVzKSkpOworICAgIHBzdGF0X2dldHByb2MocHJvY190YWJsZSwgc2l6ZW9mKHN0cnVjdCBwc3Rfc3RhdHVzKSwgbnByb2MsIDApOworCisgICAgZm9yICggaT0wIDsgaTxucHJvYzsgaSsrICkgeworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0ucHN0X3BpZCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLnBzdF91Y29tbSk7CisgICAgICAgIC8qCisgICAgICAgICAqICBTcGxpdCBwc3RfY21kIGludG8gdHdvOgorICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAqICAgICBhcmd2WzEuLl0gaXMgaHJTV1J1blBhcmFtZXRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoIGNwMSA9IHByb2NfdGFibGVbaV0ucHN0X2NtZDsgJyAnID09ICpjcDE7IGNwMSsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwMSA9ICdcMCc7ICAgIC8qIEVuZCBvZiBhcmd2WzBdICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLnBzdF9jbWQpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgY3AxKzEpOworICAgICAgICAqY3AxID0gJyAnOyAgICAgLyogUmVzdG9yZSBwc3RfY21kIHZhbHVlICovCisKKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gKFBTX1NZUyAmIHByb2NfdGFibGVbaV0ucHN0X2ZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgICAvKiBrZXJuZWwgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0ICAgLyogIGFwcGxpY2F0aW9uICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBzd2l0Y2ggKHByb2NfdGFibGVbaV0ucHN0X3N0YXQpIHsKKyAgICAgICAgY2FzZSBQU19SVU46ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTX1NMRUVQOiBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTX1NUT1A6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTX0lETEU6CisgICAgICAgIGNhc2UgUFNfWk9NQklFOgorICAgICAgICBjYXNlIFBTX09USEVSOgorICAgICAgICBkZWZhdWx0OiAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5wc3RfY3B0aWNrc3RvdGFsOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5wc3RfcnNzaXplOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gKj0gZ2V0cGFnZXNpemUoKSAvIDEwMjQ7ICAvKiBpbiBrQiAqLworCQkvKiBYWFggLSBDaGVjayB0aGlzIGxhc3QgY2FsY3VsYXRpb24gKi8KKyAgICB9CisgICAgZnJlZShwcm9jX3RhYmxlKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhhZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KKyNpbmNsdWRlICJoclNXSW5zdGFsbGVkVGFibGUuaCIKKworI2RlZmluZSBNWVRBQkxFICJoclNXSW5zdGFsbGVkVGFibGUiCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCitzdGF0aWMgdm9pZCBfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKK3N0YXRpYyBpbnQgX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYyk7CisKKy8qKiBJbml0aWFsaXplcyB0aGUgaHJTV0luc3RhbGxlZFRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9oclNXSW5zdGFsbGVkVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nIAorICAgICAqLworICAgIGluaXRpYWxpemVfdGFibGVfaHJTV0luc3RhbGxlZFRhYmxlKCk7Cit9CisKK3ZvaWQKK3NodXRkb3duX2hyU1dJbnN0YWxsZWRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KKworLyoqIEluaXRpYWxpemUgdGhlIGhyU1dJbnN0YWxsZWRUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpCit7CisgICAgc3RhdGljIG9pZCAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWRbXSA9CisgICAgICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDYsIDMgfTsKKyAgICBzaXplX3QgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZF9sZW4gPQorICAgICAgICBPSURfTEVOR1RIKGhyU1dJbnN0YWxsZWRUYWJsZV9vaWQpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKKyAgICBuZXRzbm1wX2NhY2hlICpjYWNoZSA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiaHJTV0luc3RhbGxlZCIsICJpbml0aWFsaXplXG4iKSk7CisKKyAgICByZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaHJTV0luc3RhbGxlZFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJoclNXSW5zdGFsbGVkVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsICAgLyogaW5kZXg6IGhyU1dJbnN0YWxsZWRJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fSFJTV0lOU1RBTExFRElOREVYOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fSFJTV0lOU1RBTExFRERBVEU7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY29udGFpbmVyX3RhYmxlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCwgd2lsbCByZXVzZSBiZWxvdyAqLworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjYWNoZSBoZWxwZXIKKyAgICAgKi8KKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXSW5zdGFsbGVkVGFibGVfb2lkX2xlbik7CisKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBjYWNoZS0+bWFnaWMgPSBjb250YWluZXI7CisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQqLworCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHJldHVybjsgLyogb2sgKi8KKworCisgIGJhaWw6IC8qIG5vdCBvayAqLworICAgIAorICAgIGlmIChoYW5kbGVyKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKKworICAgIGlmIChjYWNoZSkKKyAgICAgICAgbmV0c25tcF9jYWNoZV9mcmVlKGNhY2hlKTsKKworICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKKyAgICBpZiAoY29udGFpbmVyKQorICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworCisgICAgaWYgKHJlZykgCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOworCit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgaHJTV0luc3RhbGxlZFRhYmxlIHRhYmxlICovCitpbnQKK2hyU1dJbnN0YWxsZWRUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqdGFibGVfZW50cnk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dpbnN0X2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRURJTkRFWDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zd0luZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRUROQU1FOiB7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+c3dOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c3dOYW1lX2xlbik7CisgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRURJRDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZudWxsT2lkLCBudWxsT2lkTGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRURUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnN3VHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXSU5TVEFMTEVEREFURToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT5zd0RhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c3dEYXRlX2xlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQW4gdW5zdXBwb3J0ZWQvdW5yZWFkYWJsZSBjb2x1bW4gKGlmIGFwcGxpY2FibGUpIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNULCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKiBUaGUgZGF0YSBhY2Nlc3MgbWVjaGFuaXNtIGhlcmUgaXMgcmF0aGVyIHNpbXBsZTogbGV0IG5ld3NubXBfc3dpbnN0XyoKKyAqIHRha2UgY2FyZSBvZiBpdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJoclNXSW5zdGFsbGVkVGFibGU6Y2FjaGUiLCAibG9hZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNhY2hlIGZvciBoclNXSW5zdGFsbGVkVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICBjYWNoZS0+bWFnaWMgPQorICAgICAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfbG9hZCgobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljLCAwKTsKKworICAgIHJldHVybiAwOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfbG9hZCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYykKK3sKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgaW4gaHJTV0luc3RhbGxlZFRhYmxlX2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJoclNXSW5zdGFsbGVkVGFibGU6Y2FjaGUiLCAiZnJlZVxuIikpOworCisgICAgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWVfaXRlbXMoKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGYxN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLmNvbnRhaW5lci5jb25mLHYgMS44IDIwMDYvMDcvMjYgMTU6NTg6MjYgZHRzMTIgRXhwICQKKyAqLworI2lmbmRlZiBIUlNXSU5TVEFMTEVEVEFCTEVfSAorI2RlZmluZSBIUlNXSU5TVEFMTEVEVEFCTEVfSAorCitjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdCkKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfaHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX2hyU1dJbnN0YWxsZWRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dJbnN0YWxsZWRUYWJsZSh2b2lkKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGhyU1dJbnN0YWxsZWRUYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaHJTV0luc3RhbGxlZFRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9IUlNXSU5TVEFMTEVESU5ERVgJCTEKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRUROQU1FCQkyCisjZGVmaW5lIENPTFVNTl9IUlNXSU5TVEFMTEVESUQJCTMKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRURUWVBFCQk0CisjZGVmaW5lIENPTFVNTl9IUlNXSU5TVEFMTEVEREFURQkJNQorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIUlNXSU5TVEFMTEVEVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2I0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorI2luY2x1ZGUgImhyU1dSdW5QZXJmVGFibGUuaCIKKyNpbmNsdWRlICJkYXRhX2FjY2Vzcy9zd3J1bi5oIgorCisjZGVmaW5lIE1ZVEFCTEUgImhyU1dSdW5QZXJmVGFibGUiCisKKy8qKiBJbml0aWFsaXplcyB0aGUgaHJTV1J1blBlcmZUYWJsZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfaHJTV1J1blBlcmZUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcgCisgICAgICovCisgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXUnVuUGVyZlRhYmxlKCk7Cit9CisKK3ZvaWQKK3NodXRkb3duX2hyU1dSdW5QZXJmVGFibGUodm9pZCkKK3sKKyAgICBzaHV0ZG93bl90YWJsZV9oclNXUnVuUGVyZlRhYmxlKCk7Cit9CisKK2V4dGVybiBvaWQgICAgICBoclNXUnVuVGFibGVfb2lkW107CitleHRlcm4gc2l6ZV90ICAgaHJTV1J1blRhYmxlX29pZF9sZW47CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKworLyoqIEluaXRpYWxpemUgdGhlIGhyU1dSdW5QZXJmVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUodm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgaHJTV1J1blBlcmZUYWJsZV9vaWRbXSA9CisgICAgICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDUsIDEgfTsKKyAgICBzaXplX3QgICAgICAgICAgaHJTV1J1blBlcmZUYWJsZV9vaWRfbGVuID0KKyAgICAgICAgT0lEX0xFTkdUSChoclNXUnVuUGVyZlRhYmxlX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworCisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImhyU1dSdW5QZXJmVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGVyZlRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QZXJmVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGVyZlRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogaHJTV1J1bkluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9IUlNXUlVOUEVSRkNQVTsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX0hSU1dSVU5QRVJGTUVNOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjb250YWluZXJfdGFibGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KHRhYmxlX2luZm8sIG5ldHNubXBfc3dydW5fY29udGFpbmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjb250YWluZXJfdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0LCB3aWxsIHJldXNlIGJlbG93ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQobmV0c25tcF9zd3J1bl9jYWNoZSgpKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY2FjaGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0Ki8KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICByZXR1cm47IC8qIG9rICovCisKKworICBiYWlsOiAvKiBub3Qgb2sgKi8KKyAgICAKKyAgICBpZiAoaGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CisKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCisgICAgaWYgKHJlZykgCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOworfQorCit2b2lkCitzaHV0ZG93bl90YWJsZV9oclNXUnVuUGVyZlRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIGhyU1dSdW5QZXJmVGFibGUgdGFibGUgKi8KK2ludAoraHJTV1J1blBlcmZUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICp0YWJsZV9lbnRyeTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAobmV0c25tcF9zd3J1bl9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOUEVSRkNQVToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuUGVyZkNQVSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOUEVSRk1FTToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuUGVyZk1lbSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQW4gdW5zdXBwb3J0ZWQvdW5yZWFkYWJsZSBjb2x1bW4gKGlmIGFwcGxpY2FibGUpIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNULCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzZmRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgSFJTV1JVTlBFUkZUQUJMRV9ICisjZGVmaW5lIEhSU1dSVU5QRVJGVEFCTEVfSAorCitjb25maWdfcmVxdWlyZShob3N0L2hyU1dSdW5UYWJsZSkKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfaHJTV1J1blBlcmZUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaHJTV1J1blBlcmZUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaHJTV1J1blBlcmZUYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaHJTV1J1blBlcmZUYWJsZSAKKyAqLworI2RlZmluZSBDT0xVTU5fSFJTV1JVTlBFUkZDUFUJCTEKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5QRVJGTUVNCQkyCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhSU1dSVU5QRVJGVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZDI1NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KKyNpbmNsdWRlICJkYXRhX2FjY2Vzcy9zd3J1bi5oIgorI2luY2x1ZGUgImhyU1dSdW5UYWJsZS5oIgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNkZWZpbmUgTVlUQUJMRSAiaHJTV1J1blRhYmxlIgorCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKworLyoqIEluaXRpYWxpemVzIHRoZSBoclNXUnVuVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X2hyU1dSdW5UYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcgCisgICAgICovCisgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXUnVuVGFibGUoKTsKK30KKwordm9pZAorc2h1dGRvd25faHJTV1J1blRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCitvaWQgICAgICBoclNXUnVuVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCA0LCAyIH07CitzaXplX3QgICBoclNXUnVuVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoaHJTV1J1blRhYmxlX29pZCk7CisKKy8qKiBJbml0aWFsaXplIHRoZSBoclNXUnVuVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5UYWJsZSh2b2lkKQoreworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisjaWZkZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorIyAgZGVmaW5lIFNXUlVOX0FDQ0VTU19MRVZFTCBIQU5ETEVSX0NBTl9SV1JJVEUKKyNlbHNlCisjICBkZWZpbmUgU1dSVU5fQUNDRVNTX0xFVkVMIEhBTkRMRVJfQ0FOX1JPTkxZCisjZW5kaWYKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCisjICBkZWZpbmUgU1dSVU5fQUNDRVNTX0xFVkVMIEhBTkRMRVJfQ0FOX1JPTkxZCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKE1ZVEFCTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5UYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dSVU5fQUNDRVNTX0xFVkVMKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICByZWctPm1vZGVzIHw9IEhBTkRMRVJfQ0FOX05PVF9DUkVBVEU7CisKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogaHJTV1J1bkluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9IUlNXUlVOSU5ERVg7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9IUlNXUlVOU1RBVFVTOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjb250YWluZXJfdGFibGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KHRhYmxlX2luZm8sIG5ldHNubXBfc3dydW5fY29udGFpbmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjb250YWluZXJfdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0LCB3aWxsIHJldXNlIGJlbG93ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KG5ldHNubXBfc3dydW5fY2FjaGUoKSk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgaGFuZGxlciBmb3IgIiBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCovCisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgcmV0dXJuOyAvKiBvayAqLworCisKKyAgYmFpbDogLyogbm90IG9rICovCisgICAgCisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKworICAgIGlmIChyZWcpIAorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKKworfQorCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIGhyU1dSdW5UYWJsZSB0YWJsZSAqLworaW50CitoclNXUnVuVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKnRhYmxlX2VudHJ5OworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5JTkRFWDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTk5BTUU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1bk5hbWVfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5JRDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorI2lmZGVmIE5FVFNOTVBfU1dSVU5fSEFWRV9JRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT5oclNXUnVuSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuSURfbGVuCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZudWxsT2lkLCBudWxsT2lkTGVuCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QQVRIOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5QYXRoX2xlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOUEFSQU1FVEVSUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blBhcmFtZXRlcnNfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5UWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5UeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5TVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQW4gdW5zdXBwb3J0ZWQvdW5yZWFkYWJsZSBjb2x1bW4gKGlmIGFwcGxpY2FibGUpIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNULCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyNpZmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpbnQgcGlkOworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAobmV0c25tcF9zd3J1bl9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOU1RBVFVTOgorICAgICAgICAgICAgICAgIGlmICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlciAhPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVkFMVUUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGlkID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lW3JlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGgtMV07CisgICAgICAgICAgICAgICAgaWYgKDEgPT0gcGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCJyZWZ1c2luZyB0byBraWxsIHBpZCAxXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PQUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5TVEFUVVM6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9oclNXUnVuU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5TdGF0dXM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5TVEFUVVM6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2hyU1dSdW5TdGF0dXM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9oclNXUnVuU3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGludCBwaWQ7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwaWQgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVbcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aC0xXTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoclNXUnVuVGFibGU6Y29tbWl0IiwgImtpbGwoJWQsVEVSTSlcbiIsIHBpZCkpOworICAgICAgICAgICAga2lsbChwaWQsIFNJR1RFUk0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTgwZmMwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLmNvbnRhaW5lci5jb25mLHYgMS44IDIwMDYvMDcvMjYgMTU6NTg6MjYgZHRzMTIgRXhwICQKKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIEhSU1dSVU5UQUJMRV9ICisjZGVmaW5lIEhSU1dSVU5UQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW4pCitjb25maWdfcmVxdWlyZShob3N0L2hyU1dSdW5QZXJmVGFibGUpCisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X2hyU1dSdW5UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9oclNXUnVuVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXUnVuVGFibGUodm9pZCk7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoclNXUnVuVGFibGVfaGFuZGxlcjsKKworLyoKKyAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGhyU1dSdW5UYWJsZSAKKyAqLworI2RlZmluZSBDT0xVTU5fSFJTV1JVTklOREVYCQkxCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOTkFNRQkJMgorI2RlZmluZSBDT0xVTU5fSFJTV1JVTklECQkzCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOUEFUSAkJNAorI2RlZmluZSBDT0xVTU5fSFJTV1JVTlBBUkFNRVRFUlMJCTUKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5UWVBFCQk2CisjZGVmaW5lIENPTFVNTl9IUlNXUlVOU1RBVFVTCQk3CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhSU1dSVU5UQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYwppbmRleCA3YjEzNjRkLi4yNDAzMWJmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMKQEAgLTYzLDEyICs2MywxOCBAQAogI2RlZmluZQlIUkRFVl9FUlJPUlMJCTYKIAogc3RydWN0IHZhcmlhYmxlNCBocmRldmljZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJERVZfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZGV2aWNlLCAyLCB7MSwgMX19LAotICAgIHtIUkRFVl9UWVBFLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyZGV2aWNlLCAyLCB7MSwgMn19LAotICAgIHtIUkRFVl9ERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDN9fSwKLSAgICB7SFJERVZfSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCA0fX0sCi0gICAge0hSREVWX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCA1fX0sCi0gICAge0hSREVWX0VSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCA2fX0KKyAgICB7SFJERVZfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGV2aWNlLCAyLCB7MSwgMX19LAorICAgIHtIUkRFVl9UWVBFLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGV2aWNlLCAyLCB7MSwgMn19LAorICAgIHtIUkRFVl9ERVNDUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDN9fSwKKyAgICB7SFJERVZfSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCA0fX0sCisgICAge0hSREVWX1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCA1fX0sCisgICAge0hSREVWX0VSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCA2fX0KIH07CiBvaWQgICAgICAgICAgICAgaHJkZXZpY2VfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgMiB9OwogCkBAIC0xOTEsNyArMTk3LDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKChpbnQpIHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kZXZpY2UiLCAiLi4uIGdldCBkZXZpY2Ugc3RhdHMgIikpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYwppbmRleCBmMzY3OWI1Li5jNGFjNTJmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYwpAQCAtMiw2ICsyLDE2IEBACiAgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gZGlzayBkZXZpY2UgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBocl9kaXNrLmMKICAqCiAgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSAiaG9zdF9yZXMuaCIKQEAgLTYxLDEwICs3MSwyMyBAQAogIyBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEhBVkVfUkVHRVhfSCkgJiYgZGVmaW5lZChIQVZFX1JFR0NPTVApCisjaW5jbHVkZSA8cmVnZXguaD4KKyNlbmRpZgorCiAjaWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPElPS2l0L0lPS2l0TGliLmg+CisjaW5jbHVkZSA8SU9LaXQvc3RvcmFnZS9JT0Jsb2NrU3RvcmFnZURyaXZlci5oPgorI2luY2x1ZGUgPElPS2l0L3N0b3JhZ2UvSU9NZWRpYS5oPgorI2luY2x1ZGUgPElPS2l0L0lPQlNELmg+CisjaW5jbHVkZSA8RGlza0FyYml0cmF0aW9uL0RBRGlzay5oPgorI2VuZGlmCisKICNpZmRlZiBsaW51eAogLyoKICAqIGRlZmluZSBCTEtHRVRTSVpFIGZyb20gPGxpbnV4L2ZzLmg+OgpAQCAtNzksNiArMTAyLDI3IEBACiAKICNkZWZpbmUgSFJEX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBockRpc2tTdG9yYWdlQWNjZXNzIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKi8KKyNkZWZpbmUgSFJESVNLU1RPUkFHRUFDQ0VTU19SRUFEV1JJVEUgIDEKKyNkZWZpbmUgSFJESVNLU1RPUkFHRUFDQ0VTU19SRUFET05MWSAgMgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGhyRGlza1N0b3JhZ2VNZWRpYSAoSU5URUdFUiAvIEFTTl9JTlRFR0VSKQorICovCisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9PVEhFUiAgMQorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTiAgMgorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfSEFSRERJU0sgIDMKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX0ZMT1BQWURJU0sgIDQKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLUk9NICA1CisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1dPUk0gIDYKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLUlcgIDcKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX1JBTURJU0sgIDgKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgS2VybmVsICYgaW50ZXJmYWNlIGluZm9ybWF0aW9uLApAQCAtODksOCArMTMzLDEwIEBACiB2b2lkICAgICAgICAgICAgSW5pdF9IUl9EaXNrKHZvaWQpOwogaW50ICAgICAgICAgICAgIEdldF9OZXh0X0hSX0Rpc2sodm9pZCk7CiBpbnQgICAgICAgICAgICAgR2V0X05leHRfSFJfRGlza19QYXJ0aXRpb24oY2hhciAqLCBzaXplX3QsIGludCk7CisjaWYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogc3RhdGljIHZvaWQgICAgIEFkZF9IUl9EaXNrX2VudHJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOworI2VuZGlmCiBzdGF0aWMgdm9pZCAgICAgU2F2ZV9IUl9EaXNrX0dlbmVyYWwodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgU2F2ZV9IUl9EaXNrX1NwZWNpZmljKHZvaWQpOwogc3RhdGljIGludCAgICAgIFF1ZXJ5X0Rpc2soaW50LCBjb25zdCBjaGFyICopOwpAQCAtMTA2LDcgKzE1Miw5IEBACiBzdGF0aWMgaW50ICAgICAgSFJEX2luZGV4Owogc3RhdGljIGNoYXIgICAgIEhSRF9zYXZlZE1vZGVsWzQwXTsKIHN0YXRpYyBsb25nICAgICBIUkRfc2F2ZWRDYXBhY2l0eSA9IDEwNDQ7CisjaWYgZGVmaW5lZChESU9DX0RFU0NSSUJFKSB8fCBkZWZpbmVkKERLSU9DSU5GTykgfHwgZGVmaW5lZChIQVZFX0xJTlVYX0hEUkVHX0gpCiBzdGF0aWMgaW50ICAgICAgSFJEX3NhdmVkRmxhZ3M7CisjZW5kaWYKIHN0YXRpYyB0aW1lX3QgICBIUkRfaGlzdG9yeVtIUkRFVl9UWVBFX01BU0sgKyAxXTsKIAogI2lmZGVmIERJT0NfREVTQ1JJQkUKQEAgLTEzMiw5ICsxODAsMjcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGlza2xhYmVsIEhSRF9pbmZvOwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KK3N0YXRpYyBpbnQ2NF90ICBIUkRfY2FwOworc3RhdGljIGludCAgICAgIEhSRF9hY2Nlc3M7CitzdGF0aWMgaW50ICAgICAgSFJEX3R5cGU7CitzdGF0aWMgaW50ICAgICAgSFJEX3JlbW92ZWJsZTsKK3N0YXRpYyBjaGFyICAgICBIUkRfbW9kZWxbNDBdOworc3RhdGljIGludCAgICAgIEhSRF9zYXZlZF9hY2Nlc3M7CitzdGF0aWMgaW50ICAgICAgSFJEX3NhdmVkX3R5cGU7CitzdGF0aWMgaW50ICAgICAgSFJEX3NhdmVkX3JlbW92ZWJsZTsKK3N0YXRpYyBpbnQgX2dldF90eXBlX2Zyb21fcHJvdG9jb2woIGNvbnN0IGNoYXIgKnByb3QgKTsKK3N0YXRpYyBpbnQgX2dldF90eXBlX3ZhbHVlKCBjb25zdCBjaGFyICpzdHJfdHlwZSApOworI2VuZGlmCisKIHN0YXRpYyB2b2lkICAgICBwYXJzZV9kaXNrX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7CiBzdGF0aWMgdm9pZCAgICAgZnJlZV9kaXNrX2NvbmZpZyh2b2lkKTsKIAorI2lmZGVmIGxpbnV4CitzdGF0aWMgdm9pZCAgICAgQWRkX0xWTV9EaXNrcyh2b2lkKTsKK3N0YXRpYyB2b2lkICAgICBSZW1vdmVfTFZNX0Rpc2tzKHZvaWQpOworI2VuZGlmCisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEluaXRpYWxpc2F0aW9uICYgY29tbW9uIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwpAQCAtMTQ3LDEwICsyMTMsMTQgQEAKICNkZWZpbmUJSFJESVNLX0NBUEFDSVRZCQk0CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJkaXNrX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUkRJU0tfQUNDRVNTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRpc2ssIDIsIHsxLCAxfX0sCi0gICAge0hSRElTS19NRURJQSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkaXNrLCAyLCB7MSwgMn19LAotICAgIHtIUkRJU0tfUkVNT1ZFQUJMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkaXNrLCAyLCB7MSwgM319LAotICAgIHtIUkRJU0tfQ0FQQUNJVFksIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZGlzaywgMiwgezEsIDR9fQorICAgIHtIUkRJU0tfQUNDRVNTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRpc2ssIDIsIHsxLCAxfX0sCisgICAge0hSRElTS19NRURJQSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkaXNrLCAyLCB7MSwgMn19LAorICAgIHtIUkRJU0tfUkVNT1ZFQUJMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkaXNrLCAyLCB7MSwgM319LAorICAgIHtIUkRJU0tfQ0FQQUNJVFksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGlzaywgMiwgezEsIDR9fQogfTsKIG9pZCAgICAgICAgICAgICBocmRpc2tfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgNiB9OwogCkBAIC0xNzIsNiArMjQyLDkgQEAKICAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9zZCVjJWQiLCAtMSwgLTEsICdhJywgJ3AnLCAiL2Rldi9zZCVjIiwgMSwgMTUpOwogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L21kJWQiLCAtMSwgLTEsIDAsIDMsICIvZGV2L21kJWQiLCAwLCAwKTsKICAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9mZCVkIiwgLTEsIC0xLCAwLCAxLCAiL2Rldi9mZCVkIiwgMCwgMCk7CisKKyAgICBBZGRfTFZNX0Rpc2tzKCk7CisKICNlbGlmIGRlZmluZWQoaHB1eCkKICNpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpCiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvcmRzay9jJWR0JXhkJWQiLCAwLCAxLCAwLCAxNSwKQEAgLTE4NSw2ICsyNTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3Jkc2svYyVkdCVkZDBzMCIsIDAsIDcpOwogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L3Jkc2svYyVkZCVkcyVkIiwgMCwgNywgMCwgMTUsCiAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvcmRzay9jJWRkJWRzMCIsIDAsIDcpOworI2VsaWYgZGVmaW5lZChkYXJ3aW4pCisgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvZGlzayVkcyVkIiwgLTEsIC0xLCAwLCAzMiwgIi9kZXYvZGlzayVkIiwgMSwgMzIpOwogI2VsaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKICAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9hZCVkcyVkJWMiLCAwLCAxLCAxLCA0LCAiL2Rldi9hZCVkcyVkIiwgJ2EnLCAnaCcpOwogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L2RhJWRzJWQlYyIsIDAsIDEsIDEsIDQsICIvZGV2L2RhJWRzJWQiLCAnYScsICdoJyk7CkBAIC0yMTUsNiArMjkwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9kaXNrX2NvbmZpZywgIm5hbWUiKTsKIH0KIAordm9pZAorc2h1dGRvd25faHJfZGlzayh2b2lkKQoreworI2lmZGVmIGxpbnV4CisgICAgUmVtb3ZlX0xWTV9EaXNrcygpOworI2VuZGlmCit9CisKICNkZWZpbmUgSVRFTV9TVFJJTkcJMQogI2RlZmluZSBJVEVNX1NFVAkyCiAjZGVmaW5lIElURU1fU1RBUgkzCkBAIC0yNDAsMTIgKzMyMywxMiBAQAogc3RhdGljIHZvaWQKIHBhcnNlX2Rpc2tfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNvbmZfZGlza19saXN0ICpkX25ldyA9IDA7Ci0gICAgY29uZl9kaXNrX2l0ZW0gKmRpX2N1cnIgPSAwOwotICAgIGRldGFpbHNfc2V0ICAgICpkX3NldCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKm5hbWUgPSAwLCAqcCA9IDAsICpkX3N0ciA9IDAsIGM7CisgICAgY29uZl9kaXNrX2xpc3QgKmRfbmV3ID0gTlVMTDsKKyAgICBjb25mX2Rpc2tfaXRlbSAqZGlfY3VyciA9IE5VTEw7CisgICAgZGV0YWlsc19zZXQgICAgKmRfc2V0ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAqbmFtZSA9IE5VTEwsICpwID0gTlVMTCwgKmRfc3RyID0gTlVMTCwgYzsKICAgICB1bnNpZ25lZCBpbnQgICAgaSwgbmVnLCBjMSwgYzI7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ID0gMDsKKyAgICBjaGFyICAgICAgICAgICAqc3QgPSBOVUxMOwogCiAgICAgbmFtZSA9IHN0cnRva19yKGNwdHIsICIgXHQiLCAmc3QpOwogICAgIGlmICghbmFtZSkgewpAQCAtNDgyLDYgKzU2NSw3IEBACiAgICAgSW5pdF9IUl9EaXNrKCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBkaXNrX2lkeCA9IEdldF9OZXh0X0hSX0Rpc2soKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICIuLi4gaW5kZXggJWRcbiIsIGRpc2tfaWR4KSk7CiAgICAgICAgIGlmIChkaXNrX2lkeCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXduYW1lW0hSRElTS19FTlRSWV9OQU1FX0xFTkdUSF0gPSBkaXNrX2lkeDsKQEAgLTUxMiw3ICs1OTYsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLCAiLi4uIGdldCBkaXNrIHN0YXRzICIpKTsKQEAgLTU4OCw2ICs2NzIsNyBAQAogc3RhdGljIEhSRF9kaXNrX3QgZGlza19kZXZpY2VzW01BWF9OVU1CRVJfRElTS19UWVBFU107CiBzdGF0aWMgaW50ICAgICAgSFJfbnVtYmVyX2Rpc2tfdHlwZXMgPSAwOwogCisjaWYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogc3RhdGljIHZvaWQKIEFkZF9IUl9EaXNrX2VudHJ5KGNvbnN0IGNoYXIgKmRldnBhcnRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X2N0bCwKQEAgLTYwMSw3ICs2ODYsNyBAQAogCiAgICAgd2hpbGUgKGZpcnN0X2N0bCA8PSBsYXN0X2N0bCkgewogICAgICAgZm9yIChsb2RldiA9IGZpcnN0X2RldjsKLSAgICAgICAgICAgbG9kZXYgPCBsYXN0X2RldiAmJiBNQVhfTlVNQkVSX0RJU0tfVFlQRVMgPiBIUl9udW1iZXJfZGlza190eXBlczsKKyAgICAgICAgICAgbG9kZXYgPD0gbGFzdF9kZXYgJiYgTUFYX05VTUJFUl9ESVNLX1RZUEVTID4gSFJfbnVtYmVyX2Rpc2tfdHlwZXM7CiAgICAgICAgICAgIGxvZGV2ICs9ICgxK01BWF9ESVNLU19QRVJfVFlQRSksIEhSX251bWJlcl9kaXNrX3R5cGVzKyspCiAgICAgICB7CiAgICAgICAgIG5icl9jcmVhdGVkKys7CkBAIC02NDQsNiArNzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGV2cGFydF9zdHJpbmcsIG5icl9jcmVhdGVkKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkCiBJbml0X0hSX0Rpc2sodm9pZCkKQEAgLTY1NiwxNCArNzQyLDE0IEBACiBpbnQKIEdldF9OZXh0X0hSX0Rpc2sodm9pZCkKIHsKLSAgICBjaGFyICAgICAgICAgICAgc3RyaW5nWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICBzdHJpbmdbUEFUSF9NQVgrMV07CiAgICAgaW50ICAgICAgICAgICAgIGZkLCByZXN1bHQ7CiAgICAgaW50ICAgICAgICAgICAgIGlpbmRleDsKICAgICBpbnQgICAgICAgICAgICAgbWF4X2Rpc2tzOwogICAgIHRpbWVfdCAgICAgICAgICBub3c7CiAKICAgICBIUkRfaW5kZXgrKzsKLSAgICAodm9pZCAqKSB0aW1lKCZub3cpOworICAgIHRpbWUoJm5vdyk7CiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICJOZXh0X0Rpc2sgdHlwZSAlZCBvZiAlZFxuIiwKICAgICAgICAgICAgICAgICBIUkRfdHlwZV9pbmRleCwgSFJfbnVtYmVyX2Rpc2tfdHlwZXMpKTsKICAgICB3aGlsZSAoSFJEX3R5cGVfaW5kZXggPCBIUl9udW1iZXJfZGlza190eXBlcykgewpAQCAtNjk3LDYgKzc4Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrX2RldmljZXNbSFJEX3R5cGVfaW5kZXhdLmRpc2tfY29udHJvbGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZpY2VfZmlyc3QgKwogICAgICAgICAgICAgICAgICAgICAgICAgSFJEX2luZGV4KTsKKwkgICAgfSBlbHNlIGlmIChkaXNrX2RldmljZXNbSFJEX3R5cGVfaW5kZXhdLmRpc2tfZGV2aWNlX2ZpcnN0ID09IGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZpY2VfbGFzdCkgeworCQkvKiBleGFjdCBkZXZpY2UgbmFtZSAqLworCQlzbnByaW50ZihzdHJpbmcsIHNpemVvZihzdHJpbmcpLTEsICIlcyIsIGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZmdWxsX3N0cmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyktMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZmdWxsX3N0cmluZywKQEAgLTc0Nyw2ICs4MzYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgSFJEX2hpc3RvcnlbaWluZGV4XSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKEhSREVWX0RJU0sgPDwgSFJERVZfVFlQRV9TSElGVCkgKyBpaW5kZXgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0X05leHRfSFJfRGlzazogY2FuJ3QgcXVlcnkgJXNcbiIsIHN0cmluZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldF9OZXh0X0hSX0Rpc2s6IGNhbid0IG9wZW4gJXNcbiIsIHN0cmluZykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSFJEX2hpc3RvcnlbaWluZGV4XSA9IG5vdzsKICAgICAgICAgICAgIEhSRF9pbmRleCsrOwpAQCAtNzk5LDYgKzg5NCw2MiBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgZGFyd2luCitpbnQKK0dldF9IUl9EaXNrX0xhYmVsKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sIGNvbnN0IGNoYXIgKmRldmZ1bGwpCit7CisgICAgREFTZXNzaW9uUmVmICAgICAgICBzZXNzX3JlZjsKKyAgICBEQURpc2tSZWYgICAgICAgICAgIGRpc2s7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmICAgICBkZXNjOworICAgIENGU3RyaW5nUmVmICAgICAgICAgc3RyX3JlZjsKKyAgICBDRlN0cmluZ0VuY29kaW5nICAgIHN5c19lbmNvZGluZyA9IENGU3RyaW5nR2V0U3lzdGVtRW5jb2RpbmcoKTsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLCAiRGlzayBMYWJlbCB0eXBlICVzXG4iLCBkZXZmdWxsKSk7CisKKyAgICBzZXNzX3JlZiA9IERBU2Vzc2lvbkNyZWF0ZSggTlVMTCApOworICAgIGlmIChOVUxMID09IHNlc3NfcmVmKSB7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBkZXZmdWxsLCBzdHJfbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGRpc2sgPSBEQURpc2tDcmVhdGVGcm9tQlNETmFtZSggTlVMTCwgc2Vzc19yZWYsIGRldmZ1bGwgKTsKKyAgICBpZiAoTlVMTCA9PSBkaXNrKSB7CisgICAgICAgIENGUmVsZWFzZShzZXNzX3JlZik7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBkZXZmdWxsLCBzdHJfbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGRlc2MgPSBEQURpc2tDb3B5RGVzY3JpcHRpb24oIGRpc2sgKTsKKyAgICBpZiAoTlVMTCA9PSBkZXNjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJkaXNrbWdyOiBjb3VsZG4ndCBnZXQgZGlzayBkZXNjcmlwdGlvbiBmb3IgJXMsIHNraXBwaW5nXG4iLAorICAgICAgICAgICAgICAgICBkZXZmdWxsKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGRpc2spOworICAgICAgICBDRlJlbGVhc2Uoc2Vzc19yZWYpOworICAgICAgICBzdHJsY3B5KHN0cmluZywgZGV2ZnVsbCwgc3RyX2xlbik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogbW9kZWwgKi8KKyAgICBzdHJfcmVmID0gKENGU3RyaW5nUmVmKQorICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXNjLCBrREFEaXNrRGVzY3JpcHRpb25NZWRpYU5hbWVLZXkpOworICAgIGlmIChzdHJfcmVmKSB7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICBzdHJfbGVuKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIG5hbWUgJXNcbiIsIHN0cmluZykpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIGRldmZ1bGwsIHN0cl9sZW4pOworICAgIH0KKyAgICAKKyAgICBDRlJlbGVhc2UoZGlzayk7CisgICAgQ0ZSZWxlYXNlKGRlc2MpOworICAgIENGUmVsZWFzZShzZXNzX3JlZik7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQKIFNhdmVfSFJfRGlza19TcGVjaWZpYyh2b2lkKQogewpAQCAtODIwLDYgKzk3MSwxMyBAQAogI2lmZGVmIERJT0NHRElORk8KICAgICBIUkRfc2F2ZWRDYXBhY2l0eSA9IEhSRF9pbmZvLmRfc2VjcGVydW5pdCAvIDI7CiAjZW5kaWYKKyNpZmRlZiBkYXJ3aW4KKyAgICBIUkRfc2F2ZWRDYXBhY2l0eSA9IEhSRF9jYXAgLyAxMDI0OworICAgIEhSRF9zYXZlZF9hY2Nlc3MgPSBIUkRfYWNjZXNzOworICAgIEhSRF9zYXZlZF90eXBlID0gSFJEX3R5cGU7CisgICAgSFJEX3NhdmVkX3JlbW92ZWJsZSA9IEhSRF9yZW1vdmVibGU7CisjZW5kaWYKKwogfQogCiBzdGF0aWMgdm9pZApAQCAtODM5LDYgKzk5Nyw5IEBACiAgICAgc3RybGNweShIUkRfc2F2ZWRNb2RlbCwgZGt0eXBlbmFtZXNbSFJEX2luZm8uZF90eXBlXSwKICAgICAgICAgICAgIHNpemVvZihIUkRfc2F2ZWRNb2RlbCkpOwogI2VuZGlmCisjaWZkZWYgZGFyd2luCisgICAgc3RybGNweShIUkRfc2F2ZWRNb2RlbCwgSFJEX21vZGVsLCBzaXplb2YoSFJEX3NhdmVkTW9kZWwpKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqCkBAIC04NzEsNyArMTAzMiw3IEBACiAjaWZkZWYgSEFWRV9MSU5VWF9IRFJFR19ICiAgICAgaWYgKEhSRF90eXBlX2luZGV4ID09IDApICAgIC8qIElERSBoYXJkIGRpc2sgKi8KICAgICAgICAgcmVzdWx0ID0gaW9jdGwoZmQsIEhESU9fR0VUX0lERU5USVRZLCAmSFJEX2luZm8pOwotICAgIGVsc2UgaWYgKEhSRF90eXBlX2luZGV4IDw9IDIpIHsgICAgIC8qIFNDU0kgaGFyZCBkaXNrIGFuZCBtZCBkZXZpY2VzICovCisgICAgZWxzZSBpZiAoSFJEX3R5cGVfaW5kZXggIT0gMykgeyAgICAgLyogU0NTSSBoYXJkIGRpc2ssIG1kIGFuZCBMVk0gZGV2aWNlcyAqLwogICAgICAgICBsb25nICAgICAgICAgICAgaDsKICAgICAgICAgcmVzdWx0ID0gaW9jdGwoZmQsIEJMS0dFVFNJWkUsICZoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSAmJiBIUkRfdHlwZV9pbmRleCA9PSAyICYmIGggPT0gMEwpCkBAIC04NzksMTAgKzEwNDAsMTMgQEAKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgewogICAgICAgICAgICAgSFJEX2luZm8ubGJhX2NhcGFjaXR5ID0gaDsKICAgICAgICAgICAgIGlmIChIUkRfdHlwZV9pbmRleCA9PSAxKQotICAgICAgICAgICAgICAgIHNucHJpbnRmKCBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKCAoY2hhciAqKSBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICJTQ1NJIGRpc2sgKCVzKSIsIGRldmZ1bGwpOworCSAgICBlbHNlIGlmIChIUkRfdHlwZV9pbmRleCA+PSA0KQorCQlzbnByaW50ZiggKGNoYXIgKikgSFJEX2luZm8ubW9kZWwsIHNpemVvZihIUkRfaW5mby5tb2RlbCktMSwKKwkJCSAiTFZNIHZvbHVtZSAoJXMpIiwgZGV2ZnVsbCArIHN0cmxlbigiL2Rldi9tYXBwZXIvIikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNucHJpbnRmKCBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKCAoY2hhciAqKSBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgIlJBSUQgZGlzayAoJXMpIiwgZGV2ZnVsbCk7CiAgICAgICAgICAgICBIUkRfaW5mby5tb2RlbFsgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xIF0gPSAwOwogICAgICAgICAgICAgSFJEX2luZm8uY29uZmlnID0gMDsKQEAgLTg5NCw2ICsxMDU4LDEwMyBAQAogICAgIHJlc3VsdCA9IGlvY3RsKGZkLCBESU9DR0RJTkZPLCAmSFJEX2luZm8pOwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICBEQVNlc3Npb25SZWYgICAgICAgIHNlc3NfcmVmOworICAgIERBRGlza1JlZiAgICAgICAgICAgZGlzazsKKyAgICBDRkRpY3Rpb25hcnlSZWYgICAgIGRlc2M7CisgICAgQ0ZTdHJpbmdSZWYgICAgICAgICBzdHJfcmVmOworICAgIENGTnVtYmVyUmVmICAgICAgICAgbnVtYmVyX3JlZjsKKyAgICBDRkJvb2xlYW5SZWYgICAgICAgIGJvb2xfcmVmOworICAgIENGU3RyaW5nRW5jb2RpbmcgICAgc3lzX2VuY29kaW5nID0gQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpOworCisgICAgc2Vzc19yZWYgPSBEQVNlc3Npb25DcmVhdGUoIE5VTEwgKTsKKyAgICBpZiAoTlVMTCA9PSBzZXNzX3JlZikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZGlzayA9IERBRGlza0NyZWF0ZUZyb21CU0ROYW1lKCBOVUxMLCBzZXNzX3JlZiwgZGV2ZnVsbCApOworICAgIGlmIChOVUxMID09IGRpc2spIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGRlc2MgPSBEQURpc2tDb3B5RGVzY3JpcHRpb24oIGRpc2sgKTsKKyAgICBpZiAoTlVMTCA9PSBkZXNjKSB7CisgICAgICAgIENGUmVsZWFzZShkaXNrKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG51bWJlcl9yZWYgPSAoQ0ZOdW1iZXJSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhU2l6ZUtleSk7CisgICAgaWYgKG51bWJlcl9yZWYpCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyX3JlZiwga0NGTnVtYmVyU0ludDY0VHlwZSwgJkhSRF9jYXApOworICAgIGVsc2UKKyAgICAgICAgSFJEX2NhcCA9IDA7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIHNpemUgJWxsZFxuIiwgSFJEX2NhcCkpOworCisgICAgLyoqIHdyaXRhYmxlPyAgKi8KKyAgICBib29sX3JlZiA9IChDRkJvb2xlYW5SZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhV3JpdGFibGVLZXkpOworICAgIGlmIChib29sX3JlZikgeworICAgICAgICBIUkRfYWNjZXNzID0gQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbF9yZWYpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIEhSRF9hY2Nlc3MgPSAwOworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiB3cml0YWJsZSAlZFxuIiwKKyAgICAgICAgICAgICAgICBIUkRfYWNjZXNzKSk7CisKKyAgICAvKiogcmVtb3ZhYmxlPyAgKi8KKyAgICBib29sX3JlZiA9IChDRkJvb2xlYW5SZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhUmVtb3ZhYmxlS2V5KTsKKyAgICBpZiAoYm9vbF9yZWYpIHsKKyAgICAgICAgSFJEX3JlbW92ZWJsZSA9IENGQm9vbGVhbkdldFZhbHVlKGJvb2xfcmVmKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBIUkRfcmVtb3ZlYmxlID0gMDsKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgcmVtb3ZhYmxlICVkXG4iLAorICAgICAgICAgICAgICAgIEhSRF9yZW1vdmVibGUpKTsKKworICAgIC8qKiBnZXQgdHlwZSAqLworICAgIHN0cl9yZWYgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhVHlwZUtleSk7CisgICAgaWYgKHN0cl9yZWYpIHsKKyAgICAgICAgSFJEX3R5cGUgPSBfZ2V0X3R5cGVfdmFsdWUoQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKHN0cl9yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfZW5jb2RpbmcpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIHR5cGUgJXMgLyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKHN0cl9yZWYsIHN5c19lbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgIEhSRF90eXBlKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdHJfcmVmID0gKENGU3RyaW5nUmVmKQorICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uRGV2aWNlUHJvdG9jb2xLZXkpOworICAgICAgICBpZiAoc3RyX3JlZikgeworICAgICAgICAgICAgSFJEX3R5cGUgPSAKKyAgICAgICAgICAgICAgICBfZ2V0X3R5cGVfZnJvbV9wcm90b2NvbChDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX2VuY29kaW5nKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgdHlwZSAlcyAvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKHN0cl9yZWYsIHN5c19lbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICBIUkRfdHlwZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhSRF90eXBlID0gSFJESVNLU1RPUkFHRU1FRElBX1VOS05PV047CisgICAgfQorCisgICAgLyoqIG1vZGVsICovCisgICAgc3RyX3JlZiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uRGV2aWNlTW9kZWxLZXkpOworICAgIGlmIChzdHJfcmVmKSB7CisgICAgICAgIHN0cmxjcHkoSFJEX21vZGVsLCBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICBzaXplb2YoSFJEX21vZGVsKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiBtb2RlbCAlc1xuIiwgSFJEX21vZGVsKSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgSFJEX21vZGVsWzBdID0gMDsKKyAgICBDRlJlbGVhc2UoZGlzayk7CisgICAgQ0ZSZWxlYXNlKGRlc2MpOworICAgIENGUmVsZWFzZShzZXNzX3JlZik7CisgICAgcmVzdWx0ID0gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIChyZXN1bHQpOwogfQogCkBAIC05MTIsNiArMTE3MywxMSBAQAogICAgICAgICByZXR1cm4gKDIpOyAgICAgICAgICAgICAvKiByZWFkIG9ubHkgKi8KICNlbmRpZgogCisjaWZkZWYgZGFyd2luCisgICAgaWYgKCFIUkRfYWNjZXNzKQorICAgICAgICByZXR1cm4gKDIpOworI2VuZGlmCisKICAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAgICAgLyogcmVhZC13cml0ZSAqLwogfQogCkBAIC05ODQsNiArMTI1MCw5IEBACiAgICAgfQogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICByZXR1cm4gSFJEX3R5cGU7CisjZW5kaWYKIAogICAgIHJldHVybiAoMik7ICAgICAgICAgICAgICAgICAvKiBVbmtub3duICovCiB9CkBAIC0xMDE0LDUgKzEyODMsMTUwIEBACiAgICAgICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgIC8qIHRydWUgKi8KICNlbmRpZgogCisjaWZkZWYgZGFyd2luCisgICAgaWYgKEhSRF9yZW1vdmVibGUpCisgICAgICAgIHJldHVybiAoMSk7CisjZW5kaWYKKwogICAgIHJldHVybiAoMik7ICAgICAgICAgICAgICAgICAvKiBmYWxzZSAqLwogfQorCisjaWZkZWYgZGFyd2luCit0eXBlZGVmIHN0cnVjdCB0eXBlX3ZhbHVlX21hcF9zIHsKKyAgICAgY29uc3QgY2hhciAqdHlwZTsKKyAgICAgdWludDMyX3QgICAgdmFsdWU7Cit9IHR5cGVfdmFsdWVfbWFwOworCitzdGF0aWMgdHlwZV92YWx1ZV9tYXAgbWVkaWFfdHlwZV9tYXBbXSA9IHsKKyAgICB7ICJDRC1ST00iLCBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tST019LAorICAgIHsgIkRWRC1SIiwgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLV09STX0sCisgICAgeyAiRFZEK1IiLCBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tXT1JNfSwKK307ICAKK3N0YXRpYyBpbnQgbWVkaWFfdHlwZXMgPSBzaXplb2YobWVkaWFfdHlwZV9tYXApL3NpemVvZihtZWRpYV90eXBlX21hcFswXSk7CisKK3N0YXRpYyBpbnQKK19nZXRfdHlwZV92YWx1ZSggY29uc3QgY2hhciAqc3RyX3R5cGUgKQoreworICAgIGludCAgICAgICAgICAgaSwgbGVuOworICAgIAorICAgIGlmIChOVUxMID09IHN0cl90eXBlKQorICAgICAgICByZXR1cm4gSFJESVNLU1RPUkFHRU1FRElBX1VOS05PV047CisKKyAgICBsZW4gPSBzdHJsZW4oc3RyX3R5cGUpOworICAgIGZvcihpPTA7IGkgPCBtZWRpYV90eXBlczsgKytpKSB7CisgICAgICAgIGlmICgwID09IHN0cmNtcChtZWRpYV90eXBlX21hcFtpXS50eXBlLCBzdHJfdHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbWVkaWFfdHlwZV9tYXBbaV0udmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIEhSRElTS1NUT1JBR0VNRURJQV9VTktOT1dOOworfQorCitzdGF0aWMgdHlwZV92YWx1ZV9tYXAgcHJvdG9fbWFwW10gPSB7CisgICAgeyAiQVRBIiwgSFJESVNLU1RPUkFHRU1FRElBX0hBUkRESVNLfSwKKyAgICB7ICJBVEFQSSIsIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1JPTX0KK307CitzdGF0aWMgaW50IHByb3RvX21hcHMgPSBzaXplb2YocHJvdG9fbWFwKS9zaXplb2YocHJvdG9fbWFwWzBdKTsKKworc3RhdGljIGludCBfZ2V0X3R5cGVfZnJvbV9wcm90b2NvbCggY29uc3QgY2hhciAqcHJvdCApCit7ICAgCisgICAgaW50ICAgICAgICAgICBpLCBsZW47CisKKyAgICBpZiAoTlVMTCA9PSBwcm90KQorICAgICAgICByZXR1cm4gVFZfRkFMU0U7CisKKyAgICBsZW4gPSBzdHJsZW4ocHJvdCk7CisgICAgZm9yKGk9MDsgaSA8IHByb3RvX21hcHM7ICsraSkgeworICAgICAgICBpZiAoMCA9PSBzdHJjbXAocHJvdG9fbWFwW2ldLnR5cGUsIHByb3QpKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvX21hcFtpXS52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gSFJESVNLU1RPUkFHRU1FRElBX1VOS05PV047Cit9CisjZW5kaWYKKworCisjaWZkZWYgbGludXgKKyNpZiBkZWZpbmVkKEhBVkVfUkVHRVhfSCkgJiYgZGVmaW5lZChIQVZFX1JFR0NPTVApCitzdGF0aWMgY2hhciAgICAqbHZtX2RldmljZV9uYW1lc1tNQVhfTlVNQkVSX0RJU0tfVFlQRVNdOworc3RhdGljIGludCAgICAgIGx2bV9kZXZpY2VfY291bnQ7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK0FkZF9MVk1fRGlza3Modm9pZCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfUkVHRVhfSCkgJiYgZGVmaW5lZChIQVZFX1JFR0NPTVApCisgICAgLyoKKyAgICAgKiBMVk0gZGV2aWNlcyBhcmUgaGFyZGVyIGJlY2F1c2UgdGhlaXIgbmFtZSBjYW4gYmUgYWxtb3N0IGFueXRoaW5nIChzZWUgCisgICAgICogcmVnZXhwIGJlbG93KS4gRWFjaCBsb2dpY2FsIHZvbHVtZSBpcyBpbnRlcnByZXRlZCBhcyBpdHMgb3duIGRldmljZSB3aXRoCisgICAgICogb25lIHBhcnRpdGlvbiwgZXZlbiBpZiB0d28gbG9naWNhbCB2b2x1bWVzIHNoYXJlIGNvbW1vbiB2b2x1bWUgZ3JvdXAuIAorICAgICAqLworICAgIHJlZ2V4X3QgICAgICAgICBsdm9sOworICAgIGludCAgICAgICAgICAgICByZXM7CisgICAgRElSICAgICAgICAgICAgKmRpcjsKKyAgICBzdHJ1Y3QgZGlyZW50ICAqZDsKKworICAgIHJlcyA9CisgICAgICAgIHJlZ2NvbXAoJmx2b2wsICJbMC05YS16QS1aK19cXC4tXSstWzAtOWEtekEtWitfXFwuLV0rIiwKKyAgICAgICAgICAgICAgICBSRUdfRVhURU5ERUQgfCBSRUdfTk9TVUIpOworICAgIGlmIChyZXMgIT0gMCkgeworICAgICAgICBjaGFyICAgICAgICAgICAgZXJyb3JbMjAwXTsKKyAgICAgICAgcmVnZXJyb3IocmVzLCAmbHZvbCwgZXJyb3IsIHNpemVvZihlcnJvciktMSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAiQWRkX0xWTV9EaXNrczogY2Fubm90IGNvbXBpbGUgcmVnZXhwOiAlcyIsIGVycm9yKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaXIgPSBvcGVuZGlyKCIvZGV2L21hcHBlci8iKTsKKyAgICBpZiAoZGlyID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBjYW5ub3Qgb3BlbiAvZGV2L21hcHBlciIpKTsKKyAgICAgICAgcmVnZnJlZSgmbHZvbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoKGQgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gcmVnZXhlYygmbHZvbCwgZC0+ZF9uYW1lLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICBjaGFyICpwYXRoID0gKGNoYXIqKW1hbGxvYyhQQVRIX01BWCArIDEpOworICAgICAgICAgICAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmRfbmFtZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc25wcmludGYocGF0aCwgUEFUSF9NQVgtMSwgIi9kZXYvbWFwcGVyLyVzIiwgZC0+ZF9uYW1lKTsKKyAgICAgICAgICAgIEFkZF9IUl9EaXNrX2VudHJ5KHBhdGgsIC0xLCAtMSwgMCwgMCwgcGF0aCwgMCwgMCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzdG9yZSB0aGUgZGV2aWNlIG5hbWUgc28gd2UgY2FuIGZyZWUgaXQgaW4gUmVtb3ZlX0xWTV9EaXNrcyAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbHZtX2RldmljZV9uYW1lc1tsdm1fZGV2aWNlX2NvdW50XSA9IHBhdGg7CisgICAgICAgICAgICArK2x2bV9kZXZpY2VfY291bnQ7CisgICAgICAgICAgICBpZiAobHZtX2RldmljZV9jb3VudCA+PSBNQVhfTlVNQkVSX0RJU0tfVFlQRVMpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkX0xWTV9EaXNrczogbWF4aW11bSBjb3VudCBvZiBMVk0gZGV2aWNlcyByZWFjaGVkIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNsb3NlZGlyKGRpcik7CisgICAgcmVnZnJlZSgmbHZvbCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK1JlbW92ZV9MVk1fRGlza3Modm9pZCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfUkVHRVhfSCkgJiYgZGVmaW5lZChIQVZFX1JFR0NPTVApCisgICAgLyoKKyAgICAgKiBqdXN0IGZyZWUgdGhlIGRldmljZSBuYW1lcyBhbGxvY2F0ZWQgaW4gYWRkX2x2bV9kaXNrcyAKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbHZtX2RldmljZV9jb3VudDsgaSsrKSB7CisgICAgICAgIGZyZWUobHZtX2RldmljZV9uYW1lc1tpXSk7CisgICAgICAgIGx2bV9kZXZpY2VfbmFtZXNbaV0gPSBOVUxMOworICAgIH0KKyAgICBsdm1fZGV2aWNlX2NvdW50ID0gMDsKKyNlbmRpZgorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oCmluZGV4IGVmZjJhNjcuLmIzYzQzOWMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oCkBAIC04LDYgKzgsOCBAQAogY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9kZXZpY2UpCiAKIGV4dGVybiB2b2lkICAgICBpbml0X2hyX2Rpc2sodm9pZCk7CitleHRlcm4gdm9pZCAgICAgc2h1dGRvd25faHJfZGlzayh2b2lkKTsKKwogZXh0ZXJuIHZvaWQgICAgIEluaXRfSFJfRGlzayh2b2lkKTsKIGV4dGVybiBpbnQgICAgICBHZXRfTmV4dF9IUl9EaXNrKHZvaWQpOwogZXh0ZXJuIGludCAgICAgIEdldF9OZXh0X0hSX0Rpc2tfUGFydGl0aW9uKGNoYXIgKiwgc2l6ZV90LCBpbnQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYwppbmRleCA3ZmEyMDU4Li5iMjNkMzIyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYwpAQCAtMiwxNCArMiwyNiBAQAogICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIEZpbGUgU3lzdGVtIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyX2ZpbGVzeXMuYwogICoKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaD4KICNpbmNsdWRlICJob3N0X3Jlcy5oIgogI2luY2x1ZGUgImhyX2ZpbGVzeXMuaCIKICNpbmNsdWRlICJocl9zdG9yYWdlLmgiCisjaW5jbHVkZSAiaHJfZGlzay5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogCiAjaWYgSEFWRV9NTlRFTlRfSApAQCAtNDIsMTIgKzU0LDIwIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAjaW5jbHVkZSA8c3lzL21udGN0bC5oPgogI2luY2x1ZGUgPHN5cy92bW91bnQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc2VfZmluZF9mcmVlX3ZhbHVlX2luX3NsaXN0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjdGltZV90b190aW1ldCkKKwogI2lmIGRlZmluZWQoYnNkaTQpIHx8IGRlZmluZWQoZnJlZWJzZDMpIHx8IGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpIHx8IGRlZmluZWQoZGFyd2luKQogI2lmIEhBVkVfR0VURlNTVEFUICYmIGRlZmluZWQoTUZTTkFNRUxFTikKICNkZWZpbmUgTU9VTlRfTkZTCSJuZnMiCkBAIC0xMDksNiArMTI5LDE2IEBACiAjZGVmaW5lCUhSRlNfbmFtZQlmX21udGZyb21uYW1lCiAjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXR2ZnMKICNkZWZpbmUJSFJGU190eXBlCWZfZnN0eXBlbmFtZQorI2VsaWYgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkgJiYgIWRlZmluZWQoSEFWRV9TVEFURlMpICYmIGRlZmluZWQoSEFWRV9TVEFUVkZTKQorCitzdGF0aWMgc3RydWN0IHN0YXRmcwkqZnNzdGF0cyA9IE5VTEw7CitzdHJ1Y3Qgc3RhdGZzCQkqSFJGU19lbnRyeTsKK3N0YXRpYyBpbnQJCWZzY291bnQ7CisjZGVmaW5lIEhSRlNfbW91bnQJZl9tbnRvbm5hbWUKKyNkZWZpbmUgSFJGU19uYW1lCWZfbW50ZnJvbW5hbWUKKyNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcworI2RlZmluZSBIUkZTX3R5cGUJZl9mc3R5cGVuYW1lCisKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRGU1NUQVQpCiBzdGF0aWMgc3RydWN0IHN0YXRmcyAqZnNzdGF0cyA9IDA7CiBzdGF0aWMgaW50ICAgICAgZnNjb3VudDsKQEAgLTEzNyw3ICsxNjcsNyBAQAogI2RlZmluZSBIUkZTX3N0YXRmcwl3aW5fc3RhdGZzCiAjZGVmaW5lCUhSRlNfdHlwZQlmX3R5cGUKIAotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIAogc3RydWN0IHZtb3VudCAqYWl4bW50LCAqYWl4Y3VycjsKIHN0cnVjdCBIUkZTX2VudHJ5IHsKQEAgLTE5NSwxNSArMjI1LDI0IEBACiAjZGVmaW5lIEhSRlNZU19QQVJURFVNUAkJOQogCiBzdHJ1Y3QgdmFyaWFibGU0IGhyZnN5c192YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJGU1lTX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAxfX0sCi0gICAge0hSRlNZU19NT1VOVCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAyfX0sCi0gICAge0hSRlNZU19STU9VTlQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgM319LAotICAgIHtIUkZTWVNfVFlQRSwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA0fX0sCi0gICAge0hSRlNZU19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDV9fSwKLSAgICB7SFJGU1lTX0JPT1QsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDZ9fSwKLSAgICB7SFJGU1lTX1NUT1JFSURYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA3fX0sCi0gICAge0hSRlNZU19GVUxMRFVNUCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA4fX0sCi0gICAge0hSRlNZU19QQVJURFVNUCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA5fX0sCisgICAge0hSRlNZU19JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgMX19LAorICAgIHtIUkZTWVNfTU9VTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgMn19LAorICAgIHtIUkZTWVNfUk1PVU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZmlsZXN5cywgMiwgezEsIDN9fSwKKyAgICB7SFJGU1lTX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgNH19LAorICAgIHtIUkZTWVNfQUNDRVNTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA1fX0sCisgICAge0hSRlNZU19CT09ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA2fX0sCisgICAge0hSRlNZU19TVE9SRUlEWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgN319LAorICAgIHtIUkZTWVNfRlVMTERVTVAsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgOH19LAorICAgIHtIUkZTWVNfUEFSVERVTVAsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgOX19LAogfTsKIG9pZCAgICAgICAgICAgICBocmZzeXNfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgOCB9OwogCkBAIC0yMTIsNyArMjUxLDcgQEAKIHsKICAgICBSRUdJU1RFUl9NSUIoImhvc3QvaHJfZmlsZXN5cyIsIGhyZnN5c192YXJpYWJsZXMsIHZhcmlhYmxlNCwKICAgICAgICAgICAgICAgICAgaHJmc3lzX3ZhcmlhYmxlc19vaWQpOwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIAorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAvKiBzb21ldGhpbmcgbGVha3MsIG1ha2UgaXQgaWRpb3Qtc2FmZSAqLwogICAgIGFpeG1udCA9IE5VTEw7CiAgICAgYWl4Y3VyciA9IE5VTEw7CkBAIC0yNzksNyArMzE4LDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9maWxlc3lzIiwgIi4uLiBnZXQgZmlsZXN5cyBzdGF0cyAiKSk7CkBAIC00MDUsNyArNDQ0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIH0KLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIHN3aXRjaCAoSFJGU19lbnRyeS0+SFJGU190eXBlKSB7CiAgICAgICAgIGNhc2UgTU5UX0FJWDoKICAgICAgICAgY2FzZSBNTlRfSkZTOgpAQCAtNTI2LDEwICs1NjUsMTQgQEAKICNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgJiYgZGVmaW5lZChfX05ldEJTRF9fKQogCWxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+Zl9mbGFnICYgTU5UX1JET05MWSA/IDIgOiAxOwogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkKKyNpZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GTEFHUwogICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZfZmxhZ3MgJiBNTlRfUkRPTkxZID8gMiA6IDE7CisjZWxzZQorICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZfZmxhZyAmIE1OVF9SRE9OTFkgPyAyIDogMTsKKyNlbmRpZgogI2VsaWYgZGVmaW5lZChjeWd3aW4pCiAgICAgICAgIGxvbmdfcmV0dXJuID0gMTsKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKEhSRlNfZW50cnktPkhSRlNfZmxhZ3MgJiBNTlRfUkVBRE9OTFkpID09IDAgPyAxIDogMjsKICNlbHNlCiAjaWYgSEFWRV9IQVNNTlRPUFQKQEAgLTU5Miw3ICs2MzUsNyBAQAogICAgIGdldGZzc3RhdChmc3N0YXRzLCBmc2NvdW50ICogc2l6ZW9mKCpmc3N0YXRzKSwgTU5UX05PV0FJVCk7CiAjZW5kaWYKICAgICBIUkZTX2luZGV4ID0gMDsKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaW50IHJldDsKICAgICB1aW50IHNpemU7CiAgICAgcmV0ID0gMDsKQEAgLTYyMSw5ICs2NjQsNyBAQAogICAgICAgICBmY2xvc2UoZnApOwogICAgIGZwID0gZm9wZW4oRVRDX01OVFRBQiwgInIiKTsKICAgICBpZiAoIWZwKSB7Ci0gICAgICBjaGFyIHRtcGJ1ZltTVFJJTkdNQVhdOwotICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW4ndCBvcGVuIG1udHRhYiAlc1xuIiwgRVRDX01OVFRBQiApOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gbW50dGFiICVzXG4iLCBFVENfTU5UVEFCKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTY3OCw3ICs3MTksNyBAQAogICAgICJwcm9jIiwKICAgICAiZmQiLAogI2VuZGlmCi0gICAgMAorICAgIE5VTEwKIH07CiAKIGludApAQCAtNjg5LDcgKzczMCw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBIUkZTX2VudHJ5ID0gZnNzdGF0cyArIEhSRlNfaW5kZXg7CiAgICAgcmV0dXJuICsrSFJGU19pbmRleDsKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaWYoYWl4Y3VyciA9PSBOVUxMKSB7CiAgICAgICAgIGlmKGFpeG1udCAhPSBOVUxMKSBmcmVlKGFpeG1udCk7CiAgICAgICAgIGFpeG1udCA9IE5VTEw7CkBAIC03MjksMTMgKzc3MCw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29sYXJpczIgKi8KIAotICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAiR2V0X05leHRfSFJGUyAlc1xuIiwgSFJGU19lbnRyeS0+SFJGU19uYW1lKSk7Ci0KICAgICBmb3IgKGNwcCA9IEhSRlNfaWdub3JlczsgKmNwcCAhPSBOVUxMOyArK2NwcCkKLSAgICAgICAgaWYgKCFzdHJjbXAoSFJGU19lbnRyeS0+SFJGU190eXBlLCAqY3BwKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICJHZXRfTmV4dF9IUkZTOiBza2lwcGluZyAlcyAoJXMpXG4iLCBIUkZTX2VudHJ5LT5IUkZTX3R5cGUsICpjcHApKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoSFJGU19lbnRyeS0+SFJGU190eXBlLCAqY3BwKSkKICAgICAgICAgICAgIHJldHVybiBHZXRfTmV4dF9IUl9GaWxlU3lzKCk7Ci0gICAgICAgIH0KIAogICAgIC8qCiAgICAgICogVHJ5IGFuZCBlbnN1cmUgdGhhdCBpbmRleCB2YWx1ZXMgYXJlIHBlcnNpc3RlbnQKQEAgLTc2NSw3ICs4MDIsNyBAQAogI2lmIEhBVkVfR0VURlNTVEFUICYmICFkZWZpbmVkKE1GU05BTUVMRU4pCiAgICAgaWYgKChIUkZTX2VudHJ5LT5IUkZTX3R5cGUgPT0gTU9VTlRfTkZTKSB8fAogICAgICAgICAoSFJGU19lbnRyeS0+SFJGU190eXBlID09IE1PVU5UX0FGUykpCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIGlmKEhSRlNfZW50cnktPkhSRlNfdHlwZSA9PSBNTlRfTkZTIHx8IEhSRlNfZW50cnktPkhSRlNfdHlwZSA9PSBNTlRfTkZTMykKICNlbHNlIC8qIEhBVkVfR0VURlNTVEFUICovCiAgICAgaWYgKCBIUkZTX2VudHJ5LT5IUkZTX3R5cGUgIT0gTlVMTCAmJiAoCkBAIC04MDksNyArODQ2LDcgQEAKICAgICBpZiAoZnNzdGF0cykKICAgICAgICAgZnJlZSgoY2hhciAqKSBmc3N0YXRzKTsKICAgICBmc3N0YXRzID0gTlVMTDsKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaWYoYWl4bW50ICE9IE5VTEwpIHsKICAgICAgICAgZnJlZShhaXhtbnQpOwogICAgICAgICBhaXhtbnQgPSBOVUxMOwpAQCAtODY2LDEzICs5MDMsMTMgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgKytjcDI7Ci0gICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3AyKSkKKyAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIgJiAweEZGKSkKICAgICAgICAgICAgICAgICArK2NwMjsgICAgICAgICAgLyogTm93IGZpbmQgdGhlIGR1bXAgbGV2ZWwgKi8KIAogICAgICAgICAgICAgaWYgKGxldmVsID09IEZVTExfRFVNUCkgewogICAgICAgICAgICAgICAgIGlmICgqKGNwMisrKSAhPSAnMCcpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIHBhcnRpYWwgZHVtcHMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3AyKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3AyICYgMHhGRikpCiAgICAgICAgICAgICAgICAgICAgICsrY3AyOwogCiAgICAgICAgICAgICAgICAgZHVtcGRhdGUgPSBjdGltZV90b190aW1ldChjcDIpOwpAQCAtODgxLDcgKzkxOCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIFBhcnRpYWwgRHVtcCAqLwogICAgICAgICAgICAgICAgIGlmICgqKGNwMisrKSA9PSAnMCcpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIGZ1bGwgZHVtcHMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3AyKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3AyICYgMHhGRikpCiAgICAgICAgICAgICAgICAgICAgICsrY3AyOwogCiAgICAgICAgICAgICAgICAgdG1wID0gY3RpbWVfdG9fdGltZXQoY3AyKTsKQEAgLTk1NSw3ICs5OTIsNyBAQAogICAJCSAqIGluIGNhc2Ugb2YgNTEyIChmX2Jsb2Nrcy8yKSBpcyByZXR1cm5lZAogICAJCSAqIG90aGVyd2lzZSAoZl9ibG9ja3MqKGZfYnNpemUvMTAyNCkpIGlzIHJldHVybmVkCiAgIAkJICovCi0jaWYgZGVmaW5lZChzb2xhcmlzMikgJiYgZGVmaW5lZChTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUpCisjaWYgZGVmaW5lZChzb2xhcmlzMikgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFKQogICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdGZzX2J1Zi5mX2Jsb2Nrcyooc3RhdGZzX2J1Zi5mX2Zyc2l6ZS8xMDI0KSk7CiAjZWxzZQogICAJCWlmIChzdGF0ZnNfYnVmLmZfYnNpemUgPT0gNTEyKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYwppbmRleCA0Zjg1Zjk2Li42Y2NlNThjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CkBAIC0yMiw2ICsyMyw5IEBACiAjaW5jbHVkZSAibWliSUkvaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgImhyX25ldHdvcmsuaCIKIAorI2lmICFkZWZpbmVkKCBzb2xhcmlzMiApCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfbGVnYWN5KQorI2VuZGlmIC8qICFzb2xhcmlzMiAqLwogCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgpAQCAtNTEsNyArNTUsOCBAQAogI2RlZmluZQlIUk5FVF9JRklOREVYCQkxCiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJuZXRfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSTkVUX0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hybmV0LCAyLCB7MSwgMX19CisgICAge0hSTkVUX0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hybmV0LCAyLCB7MSwgMX19CiB9Owogb2lkICAgICAgICAgICAgIGhybmV0X3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDMsIDQgfTsKIApAQCAtMTM2LDcgKzE0MSw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfbmV0d29yayIsICIuLi4gZ2V0IG5ldCBzdGF0cyAiKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYwppbmRleCBhZTBiZDhlLi4zYjlhYmQ2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMKQEAgLTEsOCArMSwxNyBAQAotCiAvKgogICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHBhcnRpdGlvbiBkZXZpY2UgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBocl9wYXJ0aXRpb24uYwogICoKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxmY250bC5oPgpAQCAtMzUsNiArNDQsMTMgQEAKIHN0YXRpYyBpbnQgICAgICBIUlBfc2F2ZWREaXNrSW5kZXg7CiBzdGF0aWMgaW50ICAgICAgSFJQX3NhdmVkUGFydEluZGV4Owogc3RhdGljIGNoYXIgICAgIEhSUF9zYXZlZE5hbWVbMTAyNF07CisjaWZkZWYgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwKK3N0YXRpYyBjaGFyICAgICBIUlBfc2F2ZWRMYWJlbFsxMDI0XTsKKyNlbmRpZgorI2lmZGVmIGRhcndpbgorZXh0ZXJuIGludAorR2V0X0hSX0Rpc2tfTGFiZWwoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwgY29uc3QgY2hhciAqZGV2ZnVsbCk7CisjZW5kaWYKIAogc3RhdGljIGludCAgICAgIEhSUF9EaXNrSW5kZXg7CiAKQEAgLTYwLDExICs3NiwxNiBAQAogI2RlZmluZQlIUlBBUlRfRlNJRFgJCTUKIAogc3RydWN0IHZhcmlhYmxlNCBocnBhcnRpdGlvbl92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJQQVJUX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDF9fSwKLSAgICB7SFJQQVJUX0xBQkVMLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgMn19LAotICAgIHtIUlBBUlRfSUQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAzfX0sCi0gICAge0hSUEFSVF9TSVpFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDR9fSwKLSAgICB7SFJQQVJUX0ZTSURYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDV9fQorICAgIHtIUlBBUlRfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgMX19LAorICAgIHtIUlBBUlRfTEFCRUwsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAyfX0sCisgICAge0hSUEFSVF9JRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDN9fSwKKyAgICB7SFJQQVJUX1NJWkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNH19LAorICAgIHtIUlBBUlRfRlNJRFgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNX19CiB9Owogb2lkICAgICAgICAgICAgIGhycGFydGl0aW9uX3ZhcmlhYmxlc19vaWRbXSA9CiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgNyB9OwpAQCAtMTM1LDYgKzE1Niw3IEBACiAgICAgICAgICAgICAobmFtZVtIUlBBUlRfRElTS19OQU1FX0xFTkdUSF0gJgogICAgICAgICAgICAgICgoMSA8PCBIUkRFVl9UWVBFX1NISUZUKSAtIDEpKTsKIAorICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiLi4uIGxvdyBpbmRleCAlZFxuIiwgTG93RGlza0luZGV4KSk7CiAgICAgICAgIHdoaWxlIChIUlBfRGlza0luZGV4IDwgTG93RGlza0luZGV4KSB7CiAgICAgICAgICAgICBJbml0X0hSX1BhcnRpdGlvbigpOyAgICAgICAgLyogbW92ZXMgdG8gbmV4dCBkaXNrICovCiAgICAgICAgICAgICBpZiAoSFJQX0Rpc2tJbmRleCA9PSAtMSkKQEAgLTE0NCw2ICsxNjYsNyBAQAogCiAgICAgZm9yICg7OykgewogICAgICAgICBwYXJ0X2lkeCA9IEdldF9OZXh0X0hSX1BhcnRpdGlvbigpOworICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiLi4uIHBhcnQgaW5kZXggJWRcbiIsIHBhcnRfaWR4KSk7CiAgICAgICAgIGlmIChwYXJ0X2lkeCA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5ld25hbWVbSFJQQVJUX0RJU0tfTkFNRV9MRU5HVEhdID0KQEAgLTE4NSw3ICsyMDgsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAyKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAyOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gZ2V0IHBhcnRpdGlvbiBzdGF0cyAiKSk7CkBAIC0yMjUsOCArMjQ4LDEzIEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gcGFydF9pZHg7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgY2FzZSBIUlBBUlRfTEFCRUw6CisjaWZkZWYgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oSFJQX3NhdmVkTGFiZWwpOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBIUlBfc2F2ZWRMYWJlbDsKKyNlbHNlCiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKEhSUF9zYXZlZE5hbWUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBIUlBfc2F2ZWROYW1lOworI2VuZGlmCiAgICAgY2FzZSBIUlBBUlRfSUQ6ICAgICAgICAgICAgLyogVXNlIHRoZSBkZXZpY2UgbnVtYmVyICovCiAgICAgICAgIHNwcmludGYoc3RyaW5nLCAiMHgleCIsIChpbnQpIHN0YXRfYnVmLnN0X3JkZXYpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOwpAQCAtMjU5LDkgKzI4NywxMSBAQAogc3RhdGljIHZvaWQKIEluaXRfSFJfUGFydGl0aW9uKHZvaWQpCiB7CisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcGFydGl0aW9uIiwgIkluaXRfSFJfUGFydGl0aW9uXG4iKSk7CiAgICAgSFJQX0Rpc2tJbmRleCA9IEdldF9OZXh0X0hSX0Rpc2soKTsKICAgICBpZiAoSFJQX0Rpc2tJbmRleCAhPSAtMSkKICAgICAgICAgSFJQX0Rpc2tJbmRleCAmPSAoKDEgPDwgSFJERVZfVFlQRV9TSElGVCkgLSAxKTsKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiLi4uICAlZFxuIixIUlBfRGlza0luZGV4KSk7CiAKICAgICBIUlBfaW5kZXggPSAtMTsKIH0KQEAgLTI3Miw2ICszMDIsNyBAQAogICAgIGNoYXIgICAgICAgICAgICBzdHJpbmdbMTAyNF07CiAgICAgaW50ICAgICAgICAgICAgIGZkOwogCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcGFydGl0aW9uIiwgIkdldF9OZXh0X0hSX1BhcnRpdGlvbiAlZFxuIixIUlBfRGlza0luZGV4KSk7CiAgICAgaWYgKEhSUF9EaXNrSW5kZXggPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMzA5LDQgKzM0MCw3IEBACiAgICAgSFJQX3NhdmVkRGlza0luZGV4ID0gZGlza19pZHg7CiAgICAgSFJQX3NhdmVkUGFydEluZGV4ID0gcGFydF9pZHg7CiAgICAgKHZvaWQpIEdldF9OZXh0X0hSX0Rpc2tfUGFydGl0aW9uKEhSUF9zYXZlZE5hbWUsIHNpemVvZihIUlBfc2F2ZWROYW1lKSwgSFJQX2luZGV4KTsKKyNpZmRlZiBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTAorICAgICh2b2lkKSBHZXRfSFJfRGlza19MYWJlbChIUlBfc2F2ZWRMYWJlbCwgc2l6ZW9mKEhSUF9zYXZlZExhYmVsKSwgSFJQX3NhdmVkTmFtZSk7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYwppbmRleCAxZDFmMmVmLi40Y2ZhMjViIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jCkBAIC00OCw4ICs0OCwxMCBAQAogI2RlZmluZQlIUlBSSU5UX0VSUk9SCQkyCiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJwcmludF92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJQUklOVF9TVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycHJpbnQsIDIsIHsxLCAxfX0sCi0gICAge0hSUFJJTlRfRVJST1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJwcmludCwgMiwgezEsIDJ9fQorICAgIHtIUlBSSU5UX1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwcmludCwgMiwgezEsIDF9fSwKKyAgICB7SFJQUklOVF9FUlJPUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByaW50LCAyLCB7MSwgMn19CiB9Owogb2lkICAgICAgICAgICAgIGhycHJpbnRfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgNSB9OwogCkBAIC0xMzksNyArMTQxLDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wcmludCIsICIuLi4gZ2V0IHByaW50IHN0YXRzICIpKTsKQEAgLTE3Nyw5ICsxNzksMTAgQEAKICAgICBjYXNlIEhSUFJJTlRfRVJST1I6CiAjaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKKyNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsgICAgICAgIC8qIE51bGwgc3RyaW5nICovCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wcmludCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfaHJwcmludFxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgKaW5kZXggMjNjYTE0My4uN2FjZWU4ZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaApAQCAtNiw2ICs2LDcgQEAKICNkZWZpbmUgX01JQkdST1VQX0hSUFJJTlRfSAogCiBjb25maWdfcmVxdWlyZShob3N0L2hyX2RldmljZSkKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiAKIGV4dGVybiB2b2lkICAgICBpbml0X2hyX3ByaW50KHZvaWQpOwogZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2hycHJpbnQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jCmluZGV4IGVjZTMzOGQuLjZmOTMwNzkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jCkBAIC01MSw4ICs1MSwxMCBAQAogI2RlZmluZQlIUlBST0NfTE9BRAkJMgogCiBzdHJ1Y3QgdmFyaWFibGU0IGhycHJvY192YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJQUk9DX0lELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hycHJvYywgMiwgezEsIDF9fSwKLSAgICB7SFJQUk9DX0xPQUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycHJvYywgMiwgezEsIDJ9fQorICAgIHtIUlBST0NfSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwcm9jLCAyLCB7MSwgMX19LAorICAgIHtIUlBST0NfTE9BRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwcm9jLCAyLCB7MSwgMn19CiB9Owogb2lkICAgICAgICAgICAgIGhycHJvY192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCAzIH07CiAKQEAgLTEzOCw3ICsxNDAsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3Byb2MiLCAiLi4uIGdldCBwcm9jIHN0YXRzICIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMKaW5kZXggMjVmZjNkYi4uMjY0ZmVjYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMKQEAgLTgsNyArOCw3IEBACiAjaWYgZGVmaW5lZChmcmVlYnNkNSkKIC8qIHVuZGVmaW5lIHRoZXNlIGluIG9yZGVyIHRvIHVzZSBnZXRmc3N0YXQgKi8KICN1bmRlZiBIQVZFX1NUQVRWRlMKLSN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTksMTMgKzE5LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8d2luZG93cy5oPgotIyAgaW5jbHVkZSA8ZXJybm8uaD4KLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTExMiw3ICsxMDYsMTAgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgSEFWRV9TWVNfU1lTQ1RMX0ggKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZuZGVmIGR5bml4ICovCiAKLSNpZiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpICYmIEhBVkVfTElCUEVSRlNUQVRfSAorI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiBIQVZFX0xJQlBFUkZTVEFUX0gKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNlbmRpZgogCkBAIC0xNjAsNiArMTU3LDkgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCisjaWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CkBAIC0xODksNyArMTg5LDcgQEAKIGV4dGVybiBzdHJ1Y3QgbW50dGFiICpIUkZTX2VudHJ5OwogI2RlZmluZSBIUkZTX21vdW50CW1udF9tb3VudHAKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcwotI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCisjZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFCiAKICNlbGlmIGRlZmluZWQoV0lOMzIpCiAvKiBmYWtlIGJsb2NrIHNpemUgKi8KQEAgLTIwNSwxNCArMjA1LDIyIEBACiBleHRlcm4gaW50ICAgICAgZnNjb3VudDsKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcwogI2RlZmluZSBIUkZTX21vdW50CWZfbW50b25uYW1lCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKIAotI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpICAmJiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19NTlRfRElSKQorI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpICAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRWRlNfTU5UX0RJUikKIAogZXh0ZXJuIHN0cnVjdCBtbnRlbnQgKkhSRlNfZW50cnk7CiBleHRlcm4gaW50ICAgICAgZnNjb3VudDsKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcwogI2RlZmluZSBIUkZTX21vdW50CW1udF9kaXIKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKKworI2VsaWYgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkgJiYgIWRlZmluZWQoSEFWRV9TVEFURlMpICYmIGRlZmluZWQoSEFWRV9TVEFUVkZTKQorCitleHRlcm4gc3RydWN0IHN0YXRmcyAqSFJGU19lbnRyeTsKK2V4dGVybiBpbnQgICAgICBmc2NvdW50OworI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCisjZGVmaW5lIEhSRlNfbW91bnQJZl9tbnRvbm5hbWUKICNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQogCiAjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKQpAQCAtMjIxLDE0ICsyMjksMTQgQEAKIGV4dGVybiBpbnQgICAgICBmc2NvdW50OwogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0ZnMKICNkZWZpbmUgSFJGU19tb3VudAlmX21udG9ubmFtZQotI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgU1RSVUNUX1NUQVRGU19IQVNfRl9GUlNJWkUKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZSU0laRQogCiAjZWxzZQogCiBleHRlcm4gc3RydWN0IG1udGVudCAqSFJGU19lbnRyeTsKICNkZWZpbmUgSFJGU19tb3VudAltbnRfZGlyCiAjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXRmcwotI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgU1RSVUNUX1NUQVRGU19IQVNfRl9GUlNJWkUKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZSU0laRQogCiAjZW5kaWYKIAkKQEAgLTI0OSw2ICsyNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CiB2b2lkKiAgICAgICAgICAgaGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaGFuZGxlX21lbXNpemU7CiAKICNpZmRlZiBzb2xhcmlzMgogdm9pZCAgICAgICAgICAgIHNvbF9nZXRfc3dhcGluZm8oaW50ICosIGludCAqKTsKQEAgLTI2MywxNyArMjcyLDI1IEBACiAjZGVmaW5lCUhSU1RPUkVfVVNFRAkJNwogI2RlZmluZQlIUlNUT1JFX0ZBSUxTCQk4CiAKLXN0cnVjdCB2YXJpYWJsZTQgaHJzdG9yZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJTVE9SRV9NRU1TSVpFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAxLCB7Mn19LAotICAgIHtIUlNUT1JFX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgMX19LAotICAgIHtIUlNUT1JFX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJzdG9yZSwgMywgezMsIDEsIDJ9fSwKLSAgICB7SFJTVE9SRV9ERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgM319LAotICAgIHtIUlNUT1JFX1VOSVRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgNH19LAotICAgIHtIUlNUT1JFX1NJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCA1fX0sCi0gICAge0hSU1RPUkVfVVNFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzdG9yZSwgMywgezMsIDEsIDZ9fSwKLSAgICB7SFJTVE9SRV9GQUlMUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaHJzdG9yZSwgMywgezMsIDEsIDd9fQorc3RydWN0IHZhcmlhYmxlMiBocnN0b3JlX3ZhcmlhYmxlc1tdID0geworICAgIHtIUlNUT1JFX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7MX19LAorICAgIHtIUlNUT1JFX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezJ9fSwKKyAgICB7SFJTVE9SRV9ERVNDUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7M319LAorICAgIHtIUlNUT1JFX1VOSVRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7NH19LAorICAgIHtIUlNUT1JFX1NJWkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs1fX0sCisgICAge0hSU1RPUkVfVVNFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezZ9fSwKKyAgICB7SFJTVE9SRV9GQUlMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezd9fQogfTsKIG9pZCAgICAgICAgICAgICBocnN0b3JlX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIgfTsKK29pZCAgICAgICAgICAgICBock1lbW9yeVNpemVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIsIDIgfTsKK29pZCAgICAgICAgICAgICBoclN0b3JhZ2VUYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIsIDMsIDEgfTsKIAogCiB2b2lkCkBAIC0yODEsOCArMjk4LDEyIEBACiB7CiAgICAgY2hhciAqYXBwbmFtZTsKIAotICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9zdG9yYWdlIiwgaHJzdG9yZV92YXJpYWJsZXMsIHZhcmlhYmxlNCwKLSAgICAgICAgICAgICAgICAgaHJzdG9yZV92YXJpYWJsZXNfb2lkKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcigKKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImhvc3QvaHJNZW1vcnlTaXplIiwgaGFuZGxlX21lbXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBock1lbW9yeVNpemVfb2lkLCBPSURfTEVOR1RIKGhyTWVtb3J5U2l6ZV9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpKTsKKyAgICBSRUdJU1RFUl9NSUIoImhvc3QvaHJfc3RvcmFnZSIsIGhyc3RvcmVfdmFyaWFibGVzLCB2YXJpYWJsZTIsCisgICAgICAgICAgICAgICAgIGhyU3RvcmFnZVRhYmxlX29pZCk7CiAKICAgICBhcHBuYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwpAQCAtMzE3LDcgKzMzOCw3IEBACiB9CiAKIC8qCi0gKiBoZWFkZXJfaHJzdG9yZSguLi4KKyAqIGhlYWRlcl9ocnN0b3JlRW50cnkoLi4uCiAgKiBBcmd1bWVudHM6CiAgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQogICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCkBAIC0zMjgsMzQgKzM0OSw2IEBACiAgKiAKICAqLwogCi1pbnQKLWhlYWRlcl9ocnN0b3JlKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0jZGVmaW5lIEhSU1RPUkVfTkFNRV9MRU5HVEgJOQotICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKLSAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OwotCi0gICAgREVCVUdNU0dUTCgoImhvc3QvaHJfc3RvcmFnZSIsICJ2YXJfaHJzdG9yZTogIikpOwotICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmFtZSwgKmxlbmd0aCkpOwotICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIiAlZFxuIiwgZXhhY3QpKTsKLQotICAgIG1lbWNweSgoY2hhciAqKSBuZXduYW1lLCAoY2hhciAqKSB2cC0+bmFtZSwgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgbmV3bmFtZVtIUlNUT1JFX05BTUVfTEVOR1RIXSA9IDA7Ci0gICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOwotICAgIGlmICgoZXhhY3QgJiYgKHJlc3VsdCAhPSAwKSkgfHwgKCFleGFjdCAmJiAocmVzdWx0ID49IDApKSkKLSAgICAgICAgcmV0dXJuIChNQVRDSF9GQUlMRUQpOwotICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAotICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKLSAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotCi0gICAgKndyaXRlX21ldGhvZCA9IDA7Ci0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KLSAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7Ci19Ci0KIHZvaWQgKgogaGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLAogICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLApAQCAtNDY3LDcgKzQ2MCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICAvKgpAQCAtNDc1LDcgKzQ2OCw3IEBACiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfc3RvcmFnZSIsICJ2YXJfaHJzdG9yZUVudHJ5OiBwcm9jZXNzICIpKTsKICAgICBERUJVR01TR09JRCgoImhvc3QvaHJfc3RvcmFnZSIsIG5hbWUsICpsZW5ndGgpKTsKLSAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgKCV4KVxuIiwgbWVtKSk7CisgICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiICglcClcbiIsIG1lbSkpOwogICAgIHJldHVybiAodm9pZCopbWVtOwogfQogCkBAIC00ODksMTMgKzQ4Miw0NyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKmhyc19kZXNjcltdID0gewotICAgIE5VTEwsCi0gICAgIk1lbW9yeSBCdWZmZXJzIiwgICAgICAgICAgIC8qIEhSU19UWVBFX01CVUYgKi8KLSAgICAiUmVhbCBNZW1vcnkiLCAgICAgICAgICAgICAgLyogSFJTX1RZUEVfTUVNICovCi0gICAgIlN3YXAgU3BhY2UiICAgICAgICAgICAgICAgIC8qIEhSU19UWVBFX1NXQVAgKi8KLX07CitpbnQKK2hhbmRsZV9tZW1zaXplKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9tZW1vcnlfaW5mbyAqbWVtX2luZm87CisgICAgaW50IHZhbDsKIAorICAgIC8qCisgICAgICogV2UganVzdCBuZWVkIHRvIGhhbmRsZSB2YWxpZCBHRVQgcmVxdWVzdHMsIGFzIGludmFsaWQgaW5zdGFuY2VzCisgICAgICogICBhcmUgcmVqZWN0ZWQgYXV0b21hdGljYWxseSwgYW5kICh2YWxpZCkgR0VUTkVYVCByZXF1ZXN0cyBhcmUKKyAgICAgKiAgIGNvbnZlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBHRVQgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIFdlIGFsc28gb25seSBldmVyIHJlY2VpdmUgb25lIHJlcXVlc3QgYXQgYSB0aW1lLgorICAgICAqLworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKKyAgICAgICAgbWVtX2luZm8gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfUEhZU01FTSwgMCApOworICAgICAgICBpZiAoICFtZW1faW5mbyB8fCBtZW1faW5mby0+c2l6ZSA9PSAtMSB8fCBtZW1faW5mby0+dW5pdHMgPT0gLTEgKQorICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfTk9TVUNIT0JKRUNUICk7CisJZWxzZSB7CisgICAgICAgICAgICB2YWwgID0gIG1lbV9pbmZvLT5zaXplOyAgICAgLyogbWVtdG90YWwgKi8KKyAgICAgICAgICAgIHZhbCAqPSAobWVtX2luZm8tPnVuaXRzLzEwMjQpOworICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKgorICAgICAgICAgKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIHNvIHRoaXMgaXMgYSByZWFsbHkgYmFkIGVycm9yIAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9tZW1zaXplXG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KIAogCiB1X2NoYXIgICAgICAgICAqCkBAIC01MTAsMTIgKzUzNyw2IEBACiAgICAgdm9pZCAgICAgICAgICAgICAgICAqcHRyOwogICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbSA9IE5VTEw7CiAKLSAgICBpZiAodnAtPm1hZ2ljID09IEhSU1RPUkVfTUVNU0laRSkgewotICAgICAgICBpZiAoaGVhZGVyX2hyc3RvcmUodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkKLSAgICAgICAgICAgID09IE1BVENIX0ZBSUxFRCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7Ci0KIHJlYWxseV90cnlfbmV4dDoKIAlwdHIgPSBoZWFkZXJfaHJzdG9yZUVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLAogCQkJCQl3cml0ZV9tZXRob2QpOwpAQCAtNTM1LDE5ICs1NTYsMTAgQEAKIAl9IGVsc2UgewogCSAgICBtZW0gPSAobmV0c25tcF9tZW1vcnlfaW5mbyopcHRyOwogICAgICAgICB9Ci0gICAgfQogCiAKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBIUlNUT1JFX01FTVNJWkU6Ci0gICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKLSAgICAgICAgbWVtID0gbmV0c25tcF9tZW1vcnlfZ2V0X2J5SWR4KCBORVRTTk1QX01FTV9UWVBFX1BIWVNNRU0sIDAgKTsKLSAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+c2l6ZSA9PSAtMSB8fCBtZW0tPnVuaXRzID09IC0xICkKLQkgICAgcmV0dXJuIE5VTEw7Ci0JbG9uZ19yZXR1cm4gPSBtZW0tPnNpemUgKiAobWVtLT51bml0cyAvIDEwMjQpOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotCiAgICAgY2FzZSBIUlNUT1JFX0lOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IHN0b3JlX2lkeDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKQEAgLTU1NSw3ICs1NjcsNyBAQAogICAgICAgICBpZiAoc3RvcmVfaWR4ID4gTkVUU05NUF9NRU1fVFlQRV9NQVgpCiAgICAgICAgICAgICBpZiAoc3RvcmFnZVVzZU5GUyAmJiBDaGVja19IUl9GaWxlU3lzX05GUygpKQogICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSAxMDsgICAgIC8qIE5ldHdvcmsgRGlzayAqLwotI2lmIEhBVkVfSEFTTU5UT1BUICYmICEoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpCisjaWYgSEFWRV9IQVNNTlRPUFQgJiYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogICAgICAgICAgICAgLyogCiAgICAgICAgICAgICAgKiBoYXNtbnRvcHQgdGFrZXMgImNvbnN0IHN0cnVjdCBtbnRlbnQqIiwgYnV0IEhSRlNfZW50cnkgaGFzIGJlZW4KICAgICAgICAgICAgICAqIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIEFJWCwgc28gc2tpcCB0aGlzIGZvciBBSVgKQEAgLTY1Niw3ICs2NjgsNiBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCAgICAgIEZTX3N0b3JhZ2U7CiBzdGF0aWMgaW50ICAgICAgSFJTX2luZGV4OwogCiB2b2lkCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCmluZGV4IGZmYTFmNTIuLjIwMDdjMzIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHN0b3JhZ2UgZ3JvdXAgaW50ZXJmYWNlIC0gaHJfc3lzdGVtLmgKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBzdG9yYWdlIGdyb3VwIGludGVyZmFjZSAtIGhyX3N0b3JhZ2UuaAogICoKICAqLwogI2lmbmRlZiBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKICNkZWZpbmUgX01JQkdST1VQX0hSU1RPUkFHRV9ICiAKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL21lbW9yeSkKLWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZmlsZXN5cykKKy8qIGNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZmlsZXN5cykgKi8KIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJfc3RvcmFnZSh2b2lkKTsKIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9ocnN0b3JlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMKaW5kZXggY2Y5MGRmMi4uMjU1ODJiZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtNDUsNiArNDYsMTAgQEAKICNpbmNsdWRlIDxycG0vaGVhZGVyLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIAorI2lmZGVmIEhBVkVfUlBNX1JQTUZJTEVVVElMX0gKKyNpbmNsdWRlIDxycG0vcnBtZmlsZXV0aWwuaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9SUE1HRVRQQVRICiAjaW5jbHVkZSA8cnBtL3JwbW1hY3JvLmg+CiAjZW5kaWYKQEAgLTY3LDYgKzcyLDggQEAKIAogI2RlZmluZSBIUlNXSU5TVF9NT05PVE9OSUNBTExZX0lOQ1JFQVNJTkcKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKQEAgLTEyNyw3ICsxMzQsNyBAQAogaW50ICAgICAgICAgICAgIGhlYWRlcl9ocnN3SW5zdEVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOwogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOworI2RlZmluZSBzdGFydHRpbWUgKCooY29uc3Qgc3RydWN0IHRpbWV2YWwqKW5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpKQogCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgpAQCAtMTU3LDEzICsxNjQsMjAgQEAKICNkZWZpbmUJSFJTV0lOU1RfREFURQkJNwogCiBzdHJ1Y3QgdmFyaWFibGU0IGhyc3dpbnN0X3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNXSU5TVF9DSEFOR0UsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDEsIHsxfX0sCi0gICAge0hSU1dJTlNUX1VQREFURSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ocnN3aW5zdCwgMSwgezJ9fSwKLSAgICB7SFJTV0lOU1RfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMX19LAotICAgIHtIUlNXSU5TVF9OQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMn19LAotICAgIHtIUlNXSU5TVF9JRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDN9fSwKLSAgICB7SFJTV0lOU1RfVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA0fX0sCi0gICAge0hSU1dJTlNUX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA1fX0KKyAgICB7SFJTV0lOU1RfQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAxLCB7MX19LAorICAgIHtIUlNXSU5TVF9VUERBVEUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDEsIHsyfX0sCisgICAge0hSU1dJTlNUX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDF9fSwKKyAgICB7SFJTV0lOU1RfTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDJ9fSwKKyAgICB7SFJTV0lOU1RfSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCAzfX0sCisgICAge0hSU1dJTlNUX1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgNH19LAorICAgIHtIUlNXSU5TVF9EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgNX19CiB9Owogb2lkICAgICAgICAgICAgIGhyc3dpbnN0X3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDYgfTsKIApAQCAtMTg2LDkgKzIwMCw2IEBACiAjaWYgZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoSEFWRV9MSUJSUE0pCiAjZGVmaW5lCV9QQVRIX0hSU1dfZGlyZWN0b3J5CSIvdmFyL2NhY2hlL2hybWliIgogI2VuZGlmCi0jaWYgZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoSEFWRV9MSUJSUE0pCi0jZGVmaW5lCV9QQVRIX0hSU1dfZGlyZWN0b3J5CSIvdmFyL2NhY2hlL2hybWliIgotI2VuZGlmCiAKIHZvaWQKIGluaXRfaHJfc3dpbnN0KHZvaWQpCkBAIC0yNzgsNyArMjg5LDcgQEAKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKIAotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KICAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7CiB9CkBAIC0zNDgsNyArMzU5LDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9pbnN0IiwgIi4uLiBnZXQgaW5zdGFsbGVkIFMvVyBzdGF0cyAiKSk7CkBAIC00MzEsNyArNDQyLDcgQEAKICNpZmRlZiBIQVZFX1BLR0lORk8KICAgICAgICAgICAgIHB2ZXIgPSBwa2dwYXJhbShzd2ktPnN3aV9uYW1lLCAiVkVSU0lPTiIpOwogICAgICAgICAgICAgLyogMSBzcG90IGZvciB0aGUgdGVybWluYXRpbmcgbnVsbCBhbmQgb25lIGZvciB0aGUgZGFzaCAqLwotICAgICAgICAgICAgaWYgKHB2ZXIgJiYKKyAgICAgICAgICAgIGlmIChwdmVyICYmIAogICAgICAgICAgICAgICAgKHN0cmxlbihwdmVyKSArIDIgKyBzdHJsZW4oc3RyaW5nKSA8PSBzaXplb2Yoc3RyaW5nKSkpIHsKICAgICAgICAgICAgICAgICBzdHJjYXQoc3RyaW5nLCAiLSIpOwogICAgICAgICAgICAgICAgIHN0cmNhdChzdHJpbmcsIHB2ZXIpOwpAQCAtNDkyLDI3ICs1MDMsMzEgQEAKICAgICBjYXNlIEhSU1dJTlNUX0RBVEU6CiAgICAgICAgIHsKICNpZmRlZiBIQVZFX0xJQlJQTQotICAgICAgICAgICAgaW50ICAgICAgICAgKnJwbV9kYXRhOworICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpycG1fZGF0YTsKICAgICAgICAgICAgIGlmICggaGVhZGVyR2V0RW50cnkoc3dpLT5zd2lfaCwgUlBNVEFHX0lOU1RBTExUSU1FLCBOVUxMLCAodm9pZCAqKikgJnJwbV9kYXRhLCBOVUxMKSApIHsKICAgICAgICAgICAgICAgICB0aW1lX3QgICAgICAgICAgaW5zdGFsbFRpbWUgPSAqcnBtX2RhdGE7CiAgICAgICAgICAgICAgICAgcmV0ID0gZGF0ZV9uX3RpbWUoJmluc3RhbGxUaW1lLCB2YXJfbGVuKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gZGF0ZV9uX3RpbWUoMCwgdmFyX2xlbik7CisgICAgICAgICAgICAgICAgcmV0ID0gZGF0ZV9uX3RpbWUoTlVMTCwgdmFyX2xlbik7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAgaWYgKHN3aS0+c3dpX2RpcmVjdG9yeSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIiVzLyVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzd2ktPnN3aV9kaXJlY3RvcnksIHN3aS0+c3dpX25hbWUpOwogICAgICAgICAgICAgICAgIHN0cmluZ1sgc2l6ZW9mKHN0cmluZyktMSBdID0gMDsKLSAgICAgICAgICAgICAgICBzdGF0KHN0cmluZywgJnN0YXRfYnVmKTsKLSAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgmc3RhdF9idWYuc3RfbXRpbWUsIHZhcl9sZW4pOworICAgICAgICAgICAgICAgIGlmIChzdGF0KHN0cmluZywgJnN0YXRfYnVmKSA+PSAwKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgmc3RhdF9idWYuc3RfbXRpbWUsIHZhcl9sZW4pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7CiAgICAgICAgICAgICB9IGVsc2UgeworZXJyOgogI2lmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICByZXQgPSBOVUxMOworI2Vsc2UKICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0cmluZywgImJhY2sgaW4gdGhlIG1pc3RzIG9mIHRpbWUiKTsKICAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICAgICAgICAgIHJldCA9ICh1X2NoYXIgKikgc3RyaW5nOworI2VuZGlmCiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNjg0LDcgKzY5OSw3IEBACiAgICAgICAgIHN3aS0+c3dpX25hbWVbIHNpemVvZihzd2ktPnN3aV9uYW1lKS0xIF0gPSAwOwogICAgIH0KICNlbHNlCi0gICAgc25wcmludGYoc3dpLT5zd2lfbmFtZSwgc2l6ZW9mKHN3aS0+c3dpX25hbWUpLCBzd2ktPnN3aV9kZXAtPmRfbmFtZSk7CisgICAgc25wcmludGYoc3dpLT5zd2lfbmFtZSwgc2l6ZW9mKHN3aS0+c3dpX25hbWUpLCAiJXMiLCBzd2ktPnN3aV9kZXAtPmRfbmFtZSk7CiAgICAgc3dpLT5zd2lfbmFtZVsgc2l6ZW9mKHN3aS0+c3dpX25hbWUpLTEgXSA9IDA7CiAjZW5kaWYKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYwppbmRleCAxMzRiMjdmLi5mNDBlOTk3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jCkBAIC05MSw3ICs5MSw3IEBACiAKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICNpbmNsdWRlIDxwcm9jaW5mby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCkBAIC0xMjIsMTEgKzEyMiwxMyBAQAogI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKIHN0cnVjdCBwc3Rfc3RhdHVzICpwcm9jX3RhYmxlOwogc3RydWN0IHBzdF9keW5hbWljIHBzdF9keW47CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorc3RydWN0IGtpbmZvX3Byb2MyICpwcm9jX3RhYmxlOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKIHN0cnVjdCBraW5mb19wcm9jICpwcm9jX3RhYmxlOwogI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKIGludCAgICAgICAgICAgICpwcm9jX3RhYmxlOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIHN0cnVjdCBwcm9jc2luZm8gKnByb2NfdGFibGU7CiAjZWxzZQogc3RydWN0IHByb2MgICAgKnByb2NfdGFibGU7CkBAIC0xNTAsMTkgKzE1MiwyOSBAQAogI2RlZmluZQlIUlNXUlVOUEVSRl9NRU0JCTEwCiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJzd3J1bl92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJTV1JVTl9PU0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAxLCB7MX19LAotICAgIHtIUlNXUlVOX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgMX19LAotICAgIHtIUlNXUlVOX05BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezIsIDEsIDJ9fSwKLSAgICB7SFJTV1JVTl9JRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgM319LAotICAgIHtIUlNXUlVOX1BBVEgsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezIsIDEsIDR9fSwKLSAgICB7SFJTV1JVTl9QQVJBTVMsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezIsIDEsIDV9fSwKLSAgICB7SFJTV1JVTl9UWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNn19LAotICAgIHtIUlNXUlVOX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezIsIDEsIDd9fQorICAgIHtIUlNXUlVOX09TSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDEsIHsxfX0sCisgICAge0hSU1dSVU5fSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAxfX0sCisgICAge0hSU1dSVU5fTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgMn19LAorICAgIHtIUlNXUlVOX0lELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAzfX0sCisgICAge0hSU1dSVU5fUEFUSCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNH19LAorICAgIHtIUlNXUlVOX1BBUkFNUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNX19LAorICAgIHtIUlNXUlVOX1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA2fX0sCisgICAge0hSU1dSVU5fU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgN319CiB9OwogCiBzdHJ1Y3QgdmFyaWFibGU0IGhyc3dydW5wZXJmX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNXUlVOUEVSRl9DUFUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsxLCAxLCAxfX0sCi0gICAge0hSU1dSVU5QRVJGX01FTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezEsIDEsIDJ9fQorICAgIHtIUlNXUlVOUEVSRl9DUFUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsxLCAxLCAxfX0sCisgICAge0hSU1dSVU5QRVJGX01FTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezEsIDEsIDJ9fQogfTsKIAogb2lkICAgICAgICAgICAgIGhyc3dydW5fdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNCB9OwpAQCAtMzI2LDcgKzMzOCw3IEBACiAgICAgYXV0b19ubGlzdChOUFJPQ19TWU1CT0wsIDAsIDApOwogI2VuZGlmCiAKLSAgICBwcm9jX3RhYmxlID0gMDsKKyAgICBwcm9jX3RhYmxlID0gTlVMTDsKIAogICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9zd3J1biIsIGhyc3dydW5fdmFyaWFibGVzLCB2YXJpYWJsZTQsCiAgICAgICAgICAgICAgICAgIGhyc3dydW5fdmFyaWFibGVzX29pZCk7CkBAIC0zNjksNyArMzgxLDcgQEAKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKIAotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KICAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7CiB9CkBAIC00NTMsNyArNDY1LDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zd3J1biIsICIuLi4gZ2V0IHByb2Nlc3Mgc3RhdHMgIikpOwpAQCAtNTEyLDYgKzUyNCwxMiBAQAogICAgIGlmICgoY3AgPSBnZXRfcHJvY19maWxlX2xpbmUoIi9wcm9jLyVkL3N0YXQiLCBwaWQsIGJ1ZiwgYnVmbGVuKSkgPT0gTlVMTCApCiAJcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgKmNwICYmIGkgPCBza2lwOyArK2kpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHNlY29uZCBmaWVsZCBpcyAnY29tbScgYW5kIGNhbiBjb250YWluIHNwYWNlcy4gSGVuY2Ugc2tpcCB0bworICAgICAgICAgKiB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcy4KKyAgICAgICAgICovCisgICAgICAgIGlmIChpID09IDEgJiYgKmNwID09ICcoJykKKyAgICAgICAgICAgIGNwID0gc3RycmNocihjcCwgJyknKTsKIAljcCA9IHNraXBfdG9fbmV4dF9maWVsZChjcCk7CiAgICAgfQogICAgIHJldHVybiBjcDsKQEAgLTU3MCw3ICs1ODgsNyBAQAogICAgIHRpbWVfdCAgICAgICAgICBub3c7CiAgICAgc3RhdGljIGludCAgICAgIG9sZHBpZCA9IC0xOwogI2VuZGlmCi0jaWYgSEFWRV9LVk1fR0VUUFJPQ1MKKyNpZiAoZGVmaW5lZChIQVZFX0tWTV9HRVRQUk9DUykgfHwgZGVmaW5lZChIQVZFX0tWTV9HRVRQUk9DMikpCiAgICAgY2hhciAgICAgICAgICAqKmFyZ3Y7CiAjZW5kaWYKICNpZmRlZiBsaW51eApAQCAtNjY3LDExICs2ODUsMTcgQEAKICNlbHNlCiAgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX2J1Zi0+cF91c2VyLnVfY29tbSwgc2l6ZW9mKHN0cmluZykpOwogI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBzdHJsY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX2NvbW0sIHNpemVvZihzdHJpbmcpKTsKICAgICAgICAgY3AgPSBzdHJjaHIoc3RyaW5nLCAnICcpOwogICAgICAgICBpZiAoY3AgIT0gTlVMTCkKICAgICAgICAgICAgICpjcCA9ICdcMCc7CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgICAgICBzdHJsY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfY29tbSwgc2l6ZW9mKHN0cmluZykpOworICAgICAgICAvKiBwcm9jZXNzIG5hbWU6IHRydW5jYXRlIHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IHNwYWNlICovCisgICAgICAgIGNwID0gc3RyY2hyKHN0cmluZywgJyAnKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpCisgICAgICAgICAgICAqY3AgPSAnXDAnOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CiAgICAgICAgIHN0cmNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5raV9jb21tKTsKQEAgLTc4NCwxMSArODA4LDE3IEBACiAgICAgICAgICAgICAqY3AxKysgPSAqY3ArKzsKICAgICAgICAgKmNwMSA9IDA7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfY29tbSwgc2l6ZW9mKHN0cmluZykpOwogICAgICAgICBjcCA9IHN0cmNocihzdHJpbmcsICcgJyk7CiAgICAgICAgIGlmIChjcCAhPSBOVUxMKQogICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIC8qIFNob3VsZCBiZSBwYXRoLCBidXQgdGhpcyBpcyBub3QgYXZhaWxhYmxlLCBqdXN0IHVzZSBhcmd2WzBdIGFnYWluICovCisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CisgICAgICAgIGNwID0gc3RyY2hyKHN0cmluZywgJyAnKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpCisgICAgICAgICAgICAqY3AgPSAnXDAnOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CiAgICAgICAgIHN0cmNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5raV9jb21tKTsKQEAgLTg4MywxMyArOTEzLDI0IEBACiAgICAgICAgICAgICBjcCsrOwogICAgICAgICBzdHJjcHkoc3RyaW5nLCBjcCk7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGNwID0gc3RyY2hyKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9jb21tLCAnICcpOwogICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewogICAgICAgICAgICAgY3ArKzsKICAgICAgICAgICAgIHNwcmludGYoc3RyaW5nLCAiJXMiLCBjcCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3RyaW5nWzBdID0gJ1wwJzsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIHN0cmluZ1swXSA9IDA7CisgICAgICAgIGFyZ3YgPSBrdm1fZ2V0YXJndjIoa2QsIHByb2NfdGFibGUgKyBMb3dQcm9jSW5kZXgsIHNpemVvZihzdHJpbmcpKTsKKyAgICAgICAgaWYgKGFyZ3YpCisgICAgICAgICAgICBhcmd2Kys7CisgICAgICAgIHdoaWxlIChhcmd2ICYmICphcmd2KSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nWzBdICE9IDApCisgICAgICAgICAgICAgICAgc3RyY2F0KHN0cmluZywgIiAiKTsKKyAgICAgICAgICAgIHN0cmNhdChzdHJpbmcsICphcmd2KTsKKyAgICAgICAgICAgIGFyZ3YrKzsKKyAgICAgICAgfQogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAgICAgc3RyaW5nWzBdID0gMDsKICAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2KGtkLCBwcm9jX3RhYmxlICsgTG93UHJvY0luZGV4LCBzaXplb2Yoc3RyaW5nKSk7CkBAIC05MDMsNyArOTQ0LDcgQEAKICAgICAgICAgfQogI2VsaWYgZGVmaW5lZChsaW51eCkKICAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBpZiggKGNwPWdldF9wcm9jX25hbWVfZnJvbV9jbWRsaW5lKHBpZCxidWYsc2l6ZW9mKGJ1ZiktMikpID09IE5VTEwgKSB7CisJaWYoIChjcD1nZXRfcHJvY19uYW1lX2Zyb21fY21kbGluZShwaWQsYnVmLHNpemVvZihidWYpLTIpKSA9PSBOVUxMICkgewogICAgICAgICAgICAgc3RyY3B5KHN0cmluZywgIiIpOwogICAgICAgICAgICAgKnZhcl9sZW4gPSAwOwogICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RyaW5nOwpAQCAtOTUyLDExICs5OTMsMTYgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMjsgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gNDsgICAgLyogYXBwbGljYXRpb24gKi8KLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAJCWlmIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfZmxhZ3MgJiBTS1BST0MpIHsKIAkJCWxvbmdfcmV0dXJuID0gMjsJLyoga2VybmVsIHByb2Nlc3MgKi8KIAkJfSBlbHNlCiAJCQlsb25nX3JldHVybiA9IDQ7CS8qIGFwcGxpY2F0aW9uICovCisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgICAgICBpZiAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfZmxhZyAmIFBfU1lTVEVNKQorCSAgICBsb25nX3JldHVybiA9IDI7CS8qIG9wZXJhdGluZ1N5c3RlbSAqLworCWVsc2UKKwkgICAgbG9uZ19yZXR1cm4gPSA0OwkvKiBhcHBsaWNhdGlvbiAqLwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CiAJaWYgKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5raV9mbGFnICYgUF9TWVNURU0pIHsKQEAgLTEwMTQsNyArMTA2MCw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2Vsc2UKLSNpZiBIQVZFX0tWTV9HRVRQUk9DUworI2lmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfc3RhdCkgeworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CiAgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX3N0YXQpIHsKICAgICAjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkgJiYgX19EcmFnb25GbHlfdmVyc2lvbiA+PSAxOTAwMDAKQEAgLTEwMzIsNyArMTA4MCw3IEBACiAjZWxzZQogICAgICAgICBzd2l0Y2ggKHByb2NfYnVmLT5wX3N0YXQpIHsKICNlbmRpZgotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfc3RhdGUpIHsKICNlbHNlCiAgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfc3RhdCkgewpAQCAtMTEwOSw2ICsxMTU3LDEwIEBACiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IHByb2NfYnVmLT5wX3V0aW1lICogMTAwICsgcHJvY19idWYtPnBfc3RpbWUgKiAxMDA7CiAjZW5kaWYKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdXRpY2tzICsKKyAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX3N0aWNrcyArCisgICAgICAgICAgICBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9pdGlja3M7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKE5PVF9ERUZJTkVEKSAmJiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgLyogWFhYOiBBY2Nlc3Npbmcga2lfcGFkZHIgY2F1c2VzIHNpZzEwIC4uLgpAQCAtMTE3MSw3ICsxMjIzLDcgQEAKICAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX3J1LnJ1X3V0aW1lLnR2X3NlYyAqIDEwMCArCiAgICAgICAgICAgICBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfcnUucnVfdXRpbWUudHZfdXNlYyAvIDEwMDAwMDAwICsgLyogbmFub3NlY29uZHMgKi8KICAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9ydS5ydV9zdGltZS50dl9zZWMgKiAxMDAgKwpAQCAtMTIyMyw4ICsxMjc1LDEzIEBACiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IHByb2NfYnVmLT5wX3N3cnNzOwogI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9IHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9zaXplICogZ2V0cGFnZXNpemUoKSAvIDEwMjQ7CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgICAgICBsb25nX3JldHVybiA9IHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX3ZtX3RzaXplICsKKyAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX3ZtX3NzaXplICsKKyAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX3ZtX2RzaXplOworICAgICAgICBsb25nX3JldHVybiA9IGxvbmdfcmV0dXJuICogKGdldHBhZ2VzaXplKCkgLyAxMDI0KTsKICNlbGlmIEhBVkVfS1ZNX0dFVFBST0NTICYmICFkZWZpbmVkKGRhcndpbjgpCiAgICNpZiBkZWZpbmVkKE5PVF9ERUZJTkVEKSAmJiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKIAkgICAgLyogWFhYCkBAIC0xNDY4LDcgKzE1MjUsNyBAQAogICAgICAgICAgICAgbnByb2MgPSBjdXJyZW50X3Byb2NfZW50cnk7CiAgICAgICAgIGNsb3NlZGlyKGYpOwogICAgIH0KLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgewogCQlwaWRfdCBwcm9jX2luZGV4ID0gMDsKIAkJaW50IGF2YWlsID0gMTAyNDsKQEAgLTE0OTUsNiArMTU1MiwxNCBAQAogCQkJcHJvY190YWJsZSA9IHJlYWxsb2MocHJvY190YWJsZSwgYXZhaWwgKiBzaXplb2YocHJvY190YWJsZVswXSkpOwogCQl9CiAgICAgfQorI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICB7CisgICAgICAgIGlmIChrZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBucHJvYyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJvY190YWJsZSA9IGt2bV9nZXRwcm9jMihrZCwgS0VSTl9QUk9DX0FMTCwgMCwgc2l6ZW9mIChzdHJ1Y3Qga2luZm9fcHJvYzIpLCAmbnByb2MpOworICAgIH0KICNlbGlmIEhBVkVfS1ZNX0dFVFBST0NTCiAgICAgewogICAgICAgICBpZiAoa2QgPT0gTlVMTCkgewpAQCAtMTU1NSw2ICsxNjIwLDkgQEAKICAgICAgICAgcmV0dXJuIHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5KytdLnBzdF9waWQ7CiAjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQogICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK107CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgICAgICBpZiAocHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnldLnBfc3RhdCAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5KytdLnBfcGlkOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICAjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CiAgICAgICAgIGlmIChwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeV0ua2lfc3RhdCAhPSAwKQpAQCAtMTU2OSw3ICsxNjM3LDcgQEAKICAgICAgICAgaWYgKHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5XS5rcF9wcm9jLnBfc3RhdCAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5KytdLmtwX3Byb2MucF9waWQ7CiAgICAgI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBpZiAocHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnldLnBpX3N0YXRlICE9IDApCiAgICAgICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ucGlfcGlkOwogICAgICAgICBlbHNlCkBAIC0xNTk1LDE2ICsxNjYzLDE2IEBACiBpbnQKIGNvdW50X3Byb2Nlc3Nlcyh2b2lkKQogewotI2lmICEoZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChjeWd3aW4pIHx8IGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkgfHwgZGVmaW5lZChzb2xhcmlzMikgfHwgSEFWRV9LVk1fR0VUUFJPQ1MgfHwgZGVmaW5lZChkeW5peCkpCisjaWYgIShkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGN5Z3dpbikgfHwgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBkZWZpbmVkKHNvbGFyaXMyKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBIQVZFX0tWTV9HRVRQUk9DMiB8fCBkZWZpbmVkKGR5bml4KSkKICAgICBpbnQgICAgICAgICAgICAgaTsKICNlbmRpZgogICAgIGludCAgICAgICAgICAgICB0b3RhbCA9IDA7CiAKICAgICBJbml0X0hSX1NXUnVuKCk7Ci0jaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBkZWZpbmVkKHNvbGFyaXMyKQorI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkgfHwgSEFWRV9LVk1fR0VUUFJPQ1MgfHwgSEFWRV9LVk1fR0VUUFJPQzIgfHwgZGVmaW5lZChzb2xhcmlzMikKICAgICB0b3RhbCA9IG5wcm9jOwogI2Vsc2UKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBmb3IgKGkgPSAwOyBpIDwgbnByb2M7ICsraSkgewogICAgICAgICBpZiAocHJvY190YWJsZVtpXS5waV9zdGF0ZSAhPSAwKQogI2VsaWYgIWRlZmluZWQobGludXgpICYmICFkZWZpbmVkKGN5Z3dpbikgJiYgIWRlZmluZWQoZHluaXgpCkBAIC0xNjE1LDcgKzE2ODMsNyBAQAogI2VuZGlmCiAgICAgICAgICsrdG90YWw7CiAgICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhaHB1eDEwICYmICFocHV4MTEgJiYgIUhBVkVfS1ZNX0dFVFBST0NTICYmICFzb2xhcmlzMiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhaHB1eDEwICYmICFocHV4MTEgJiYgIUhBVkVfS1ZNX0dFVFBST0NTICYmICFIQVZFX0tWTV9HRVRQUk9DMiAmJiAhc29sYXJpczIgKi8KICAgICBFbmRfSFJfU1dSdW4oKTsKICAgICByZXR1cm4gdG90YWw7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYwppbmRleCBjYmM4ZmM4Li5kOTljYzdkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZWxzZQpAQCAtNzcsNiArNzgsOCBAQAogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKwogI2lmICFkZWZpbmVkKFVUTVBfRklMRSkgJiYgZGVmaW5lZChfUEFUSF9VVE1QKQogI2RlZmluZSBVVE1QX0ZJTEUgX1BBVEhfVVRNUAogI2VuZGlmCkBAIC05OCwxNSArMTAxLDIwIEBACiAjaWYgZGVmaW5lZChzb2xhcmlzMikKIHN0YXRpYyBzdHJ1Y3Qgb3BlbnByb21pbyAqIG9wX21hbGxvYyhzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCBvcF9mcmVlKHN0cnVjdCBvcGVucHJvbWlvICpvcCk7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdGF0aWMgaW50IHNldF9zb2xhcmlzX2Jvb3Rjb21tYW5kX3BhcmFtZXRlcihpbnQgYWN0aW9uLCB1X2NoYXIgKiB2YXJfdmFsLCB1X2NoYXIgdmFyX3ZhbF90eXBlLCBzaXplX3QgdmFyX3ZhbF9sZW4sIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogc3RhdGljIGludCBzZXRfc29sYXJpc19lZXByb21fcGFyYW1ldGVyKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pOwogc3RhdGljIGludCBnZXRfc29sYXJpc19lZXByb21fcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnBhcmFtZXRlciwgY2hhciAqb3V0cHV0KTsKIHN0YXRpYyBsb25nICAgICBnZXRfbWF4X3NvbGFyaXNfcHJvY2Vzc2VzKHZvaWQpOwogI2VuZGlmCisKIHN0YXRpYyBpbnQgICAgICBnZXRfbG9hZF9kZXYodm9pZCk7CiBzdGF0aWMgaW50ICAgICAgY291bnRfdXNlcnModm9pZCk7CiBleHRlcm4gaW50ICAgICAgY291bnRfcHJvY2Vzc2VzKHZvaWQpOwotCitleHRlcm4gaW50ICAgICAgc3dydW5fY291bnRfcHJvY2Vzc2VzKHZvaWQpOwogCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgpAQCAtMTIzLDI2ICsxMzEsNjAgQEAKICNkZWZpbmUJSFJTWVNfTUFYUFJPQ1MJCTcKIAogI2lmIGRlZmluZWQoc29sYXJpczIpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBocnN5c3RlbV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7MX19LAotICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9ocnN5cywgMSwgezJ9fSwKLSAgICB7SFJTWVNfTE9BRF9ERVYsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7M319LAotICAgIHtIUlNZU19MT0FEX1BBUkFNLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9ocnN5cywgMSwgezR9fSwKLSAgICB7SFJTWVNfVVNFUlMsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9ocnN5cywgMSwgezV9fSwKLSAgICB7SFJTWVNfUFJPQ1MsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9ocnN5cywgMSwgezZ9fSwKLSAgICB7SFJTWVNfTUFYUFJPQ1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7N319CisgICAge0hSU1lTX1VQVElNRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezF9fSwKKyAgICB7SFJTWVNfREFURSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaHJzeXMsIDEsIHsyfX0sCisgICAge0hSU1lTX0xPQURfREVWLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezN9fSwKKyAgICB7SFJTWVNfTE9BRF9QQVJBTSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaHJzeXMsIDEsIHs0fX0sCisgICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs1fX0sCisgICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs2fX0sCisgICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezd9fQogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgaHJzeXN0ZW1fdmFyaWFibGVzW10gPSB7CisgICAge0hSU1lTX1VQVElNRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezF9fSwKKyAgICB7SFJTWVNfREFURSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezJ9fSwKKyAgICB7SFJTWVNfTE9BRF9ERVYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7M319LAorICAgIHtIUlNZU19MT0FEX1BBUkFNLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7NH19LAorICAgIHtIUlNZU19VU0VSUywgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7NX19LAorICAgIHtIUlNZU19QUk9DUywgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7Nn19LAorICAgIHtIUlNZU19NQVhQUk9DUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs3fX0KK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2Vsc2UKIHN0cnVjdCB2YXJpYWJsZTIgaHJzeXN0ZW1fdmFyaWFibGVzW10gPSB7Ci0gICAge0hSU1lTX1VQVElNRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ocnN5cywgMSwgezF9fSwKLSAgICB7SFJTWVNfREFURSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN5cywgMSwgezJ9fSwKLSAgICB7SFJTWVNfTE9BRF9ERVYsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7M319LAotICAgIHtIUlNZU19MT0FEX1BBUkFNLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7NH19LAotICAgIHtIUlNZU19VU0VSUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7NX19LAotICAgIHtIUlNZU19QUk9DUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7Nn19LAotICAgIHtIUlNZU19NQVhQUk9DUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs3fX0KKyAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7MX19LAorICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7Mn19LAorICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHszfX0sCisgICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs0fX0sCisgICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs1fX0sCisgICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs2fX0sCisgICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezd9fQogfTsKICNlbmRpZgorCiBvaWQgICAgICAgICAgICAgaHJzeXN0ZW1fdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMSB9OwogCiAKQEAgLTE5MSw3ICsyMzMsNyBAQAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0gLyogZW5kIGhlYWRlcl9ocnN5cyAqLwpAQCAtMjM2LDkgKzI3OCwxMSBAQAogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIGNhc2UgSFJTWVNfREFURToKICNpZiBkZWZpbmVkKEhBVkVfTUtUSU1FKSAmJiBkZWZpbmVkKEhBVkVfU1RJTUUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICAgICAgKndyaXRlX21ldGhvZD1uc19zZXRfdGltZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZW5kaWYKLSAgICAgICAgKHZvaWQgKikgdGltZSgmbm93KTsKKyAgICAgICAgdGltZSgmbm93KTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgZGF0ZV9uX3RpbWUoJm5vdywgdmFyX2xlbik7CiAgICAgY2FzZSBIUlNZU19MT0FEX0RFVjoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBnZXRfbG9hZF9kZXYoKTsKQEAgLTI1Miw3ICsyOTYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICNlbGlmIGRlZmluZWQoc29sYXJpczIpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kPXNldF9zb2xhcmlzX2Jvb3Rjb21tYW5kX3BhcmFtZXRlcjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGlmICggZ2V0X3NvbGFyaXNfZWVwcm9tX3BhcmFtZXRlcigiYm9vdC1jb21tYW5kIixib290cGFyYW0pICkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwidW5hYmxlIHRvIGxvb2t1cCBib290LWNvbW1hbmQgZnJvbSBlZXByb21cbiIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNzAsNyArMzE2LDkgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSBjb3VudF91c2VycygpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIGNhc2UgSFJTWVNfUFJPQ1M6Ci0jaWYgVVNJTkdfSE9TVF9IUl9TV1JVTl9NT0RVTEUKKyNpZiBVU0lOR19IT1NUX0RBVEFfQUNDRVNTX1NXUlVOX01PRFVMRQorICAgICAgICBsb25nX3JldHVybiA9IHN3cnVuX2NvdW50X3Byb2Nlc3NlcygpOworI2VsaWYgVVNJTkdfSE9TVF9IUl9TV1JVTl9NT0RVTEUKICAgICAgICAgbG9uZ19yZXR1cm4gPSBjb3VudF9wcm9jZXNzZXMoKTsKICNlbHNlCiAjaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKQEAgLTM0OSw2ICszOTcsNyBAQAogICAgIGZyZWUob3ApOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RhdGljIGludAogc2V0X3NvbGFyaXNfYm9vdGNvbW1hbmRfcGFyYW1ldGVyKGludCBhY3Rpb24sCiAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtNDEzLDYgKzQ2Miw3IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogc3RhdGljIGludCBzZXRfc29sYXJpc19lZXByb21fcGFyYW1ldGVyKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuKSB7CkBAIC00OTIsNiArNTQyLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX01LVElNRSkgJiYgZGVmaW5lZChIQVZFX1NUSU1FKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogbnNfc2V0X3RpbWUoaW50IGFjdGlvbiwKICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC01ODUsNiArNjM2LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2VuZGlmCiAKICAgICAgICAgICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmgKaW5kZXggNWUxMmMwZC4uZmVmZmE2MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oCkBAIC05LDcgKzksOSBAQAogZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2hyc3lzOwogCiAjaWYgZGVmaW5lZChIQVZFX01LVElNRSkgJiYgZGVmaW5lZChIQVZFX1NUSU1FKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludCBuc19zZXRfdGltZShpbnQgYWN0aW9uLCB1X2NoYXIgKiB2YXJfdmFsLCB1X2NoYXIgdmFyX3ZhbF90eXBlLCBzaXplX3QgdmFyX3ZhbF9sZW4sIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZgogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IUlNZU1RFTV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhYjZhMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYwpAQCAtMCwwICsxLDQyOSBAQAorLyoKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBGaWxlIFN5c3RlbSBkZXZpY2UgZ3JvdXAgaW1wbGVtZW50YXRpb24gKEhBTCByZXdyaXRlKSAtIGhyaF9maWxlc3lzLmMKKyAqCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorI2luY2x1ZGUgImhvc3RfcmVzLmgiCisjaW5jbHVkZSAiaHJoX2ZpbGVzeXMuaCIKKyNpbmNsdWRlICJocmhfc3RvcmFnZS5oIgorI2luY2x1ZGUgImhyX2Rpc2suaCIKKyNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KKworI2lmIEhBVkVfTU5URU5UX0gKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01OVEVOVF9ICisjaW5jbHVkZSA8c3lzL21udGVudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU5UVEFCX0gKKyNpbmNsdWRlIDxzeXMvbW50dGFiLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVkZTX0gKKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCisjaW5jbHVkZSA8c3lzL21udGN0bC5oPgorI2luY2x1ZGUgPHN5cy92bW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjdGltZV90b190aW1ldCkKKworI2RlZmluZSBIUkZTX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCisJICogICBhbmQgaW50ZXJuYWwgZm9yd2FyZCBkZWNsYXJhdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCituZXRzbm1wX2ZzeXNfaW5mbyAqSFJGU19lbnRyeTsKKworI2RlZmluZQlGVUxMX0RVTVAJMAorI2RlZmluZQlQQVJUX0RVTVAJMQorCitleHRlcm4gdm9pZCAgICAgSW5pdF9IUl9GaWxlU3lzKHZvaWQpOworZXh0ZXJuIGludCAgICAgIEdldF9OZXh0X0hSX0ZpbGVTeXModm9pZCk7CitjaGFyICAgICAgICAgICAqY29va19kZXZpY2UoY2hhciAqKTsKK3N0YXRpYyB1X2NoYXIgICp3aGVuX2R1bXBlZChjaGFyICpmaWxlc3lzLCBpbnQgbGV2ZWwsIHNpemVfdCAqIGxlbmd0aCk7CitpbnQgICAgICAgICAgICAgaGVhZGVyX2hyaGZpbGVzeXMoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCisJICoKKwkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEhSRlNZU19JTkRFWAkJMQorI2RlZmluZSBIUkZTWVNfTU9VTlQJCTIKKyNkZWZpbmUgSFJGU1lTX1JNT1VOVAkJMworI2RlZmluZSBIUkZTWVNfVFlQRQkJNAorI2RlZmluZSBIUkZTWVNfQUNDRVNTCQk1CisjZGVmaW5lIEhSRlNZU19CT09UCQk2CisjZGVmaW5lIEhSRlNZU19TVE9SRUlEWAkJNworI2RlZmluZSBIUkZTWVNfRlVMTERVTVAJCTgKKyNkZWZpbmUgSFJGU1lTX1BBUlREVU1QCQk5CisKK3N0cnVjdCB2YXJpYWJsZTQgaHJmc3lzX3ZhcmlhYmxlc1tdID0geworICAgIHtIUkZTWVNfSU5ERVgsICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDF9fSwKKyAgICB7SFJGU1lTX01PVU5ULCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCAyfX0sCisgICAge0hSRlNZU19STU9VTlQsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgM319LAorICAgIHtIUkZTWVNfVFlQRSwgICAgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDR9fSwKKyAgICB7SFJGU1lTX0FDQ0VTUywgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA1fX0sCisgICAge0hSRlNZU19CT09ULCAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgNn19LAorICAgIHtIUkZTWVNfU1RPUkVJRFgsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDd9fSwKKyAgICB7SFJGU1lTX0ZVTExEVU1QLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA4fX0sCisgICAge0hSRlNZU19QQVJURFVNUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgOX19LAorfTsKK29pZCAgICAgICAgICAgICBocmZzeXNfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgOCB9OworCit2b2lkCitpbml0X2hyaF9maWxlc3lzKHZvaWQpCit7CisgICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX2ZpbGVzeXMiLCBocmZzeXNfdmFyaWFibGVzLCB2YXJpYWJsZTQsCisgICAgICAgICAgICAgICAgIGhyZnN5c192YXJpYWJsZXNfb2lkKTsKK30KKworLyoKKyAqIGhlYWRlcl9ocmhmaWxlc3lzKC4uLgorICogQXJndW1lbnRzOgorICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKKyAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKKyAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAorICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKKyAqIHdyaXRlX21ldGhvZAorICogCisgKi8KKworaW50CitoZWFkZXJfaHJoZmlsZXN5cyhzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworI2RlZmluZSBIUkZTWVNfRU5UUllfTkFNRV9MRU5HVEgJMTEKKyAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07CisgICAgaW50ICAgICAgICAgICAgIGZzeXNfaWR4LCBMb3dJbmRleCA9IC0xOworICAgIGludCAgICAgICAgICAgICByZXN1bHQ7CisKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9maWxlc3lzIiwgInZhcl9ocmhmaWxlc3lzOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX2ZpbGVzeXMiLCBuYW1lLCAqbGVuZ3RoKSk7CisgICAgREVCVUdNU0coKCJob3N0L2hyX2ZpbGVzeXMiLCAiICVkXG4iLCBleGFjdCkpOworCisgICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLCB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKKyAgICAvKgorICAgICAqIEZpbmQgIm5leHQiIGZpbGUgc3lzdGVtIGVudHJ5IAorICAgICAqLworCisgICAgSW5pdF9IUl9GaWxlU3lzKCk7CisgICAgZm9yICg7OykgeworICAgICAgICBmc3lzX2lkeCA9IEdldF9OZXh0X0hSX0ZpbGVTeXMoKTsKKyAgICAgICAgaWYgKGZzeXNfaWR4ID09IC0xKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG5ld25hbWVbSFJGU1lTX0VOVFJZX05BTUVfTEVOR1RIXSA9IGZzeXNfaWR4OworICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7CisgICAgICAgIGlmIChleGFjdCAmJiAocmVzdWx0ID09IDApKSB7CisgICAgICAgICAgICBMb3dJbmRleCA9IGZzeXNfaWR4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCghZXhhY3QgJiYgKHJlc3VsdCA8IDApKSAmJgorICAgICAgICAgICAgKExvd0luZGV4ID09IC0xIHx8IGZzeXNfaWR4IDwgTG93SW5kZXgpKSB7CisgICAgICAgICAgICBMb3dJbmRleCA9IGZzeXNfaWR4OworI2lmZGVmIEhSRlNfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKExvd0luZGV4ID09IC0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAiLi4uIGluZGV4IG91dCBvZiByYW5nZVxuIikpOworICAgICAgICByZXR1cm4gKE1BVENIX0ZBSUxFRCk7CisgICAgfQorCisgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCisgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAiLi4uIGdldCBmaWxlc3lzIHN0YXRzICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfZmlsZXN5cyIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfZmlsZXN5cyIsICJcbiIpKTsKKworICAgIHJldHVybiBMb3dJbmRleDsKK30KKworCitvaWQgICAgICAgICAgICAgZnN5c190eXBlX2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA5LCAxIH07ICAgICAvKiBockZTT3RoZXIgKi8KK2ludCAgICAgICAgICAgICBmc3lzX3R5cGVfbGVuID0KKyAgICBzaXplb2YoZnN5c190eXBlX2lkKSAvIHNpemVvZihmc3lzX3R5cGVfaWRbMF0pOworCisKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCisJICoKKwkgKiAgU3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworCit1X2NoYXIgICAgICAgICAqCit2YXJfaHJoZmlsZXN5cyhzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIGludCAgICAgICAgICAgICBmc3lzX2lkeDsKKyAgICBzdGF0aWMgY2hhciAgICAgc3RyaW5nWzEwMjRdOworCisgICAgZnN5c19pZHggPQorICAgICAgICBoZWFkZXJfaHJoZmlsZXN5cyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKTsKKyAgICBpZiAoZnN5c19pZHggPT0gTUFUQ0hfRkFJTEVEKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisgICAgY2FzZSBIUkZTWVNfSU5ERVg6CisgICAgICAgIGxvbmdfcmV0dXJuID0gZnN5c19pZHg7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfTU9VTlQ6CisgICAgICAgIHNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyksICIlcyIsIEhSRlNfZW50cnktPnBhdGgpOworICAgICAgICBzdHJpbmdbIHNpemVvZihzdHJpbmcpLTEgXSA9IDA7CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIHN0cmluZzsKKyAgICBjYXNlIEhSRlNZU19STU9VTlQ6CisgICAgICAgIGlmIChIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUpIHsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyksICIlcyIsIEhSRlNfZW50cnktPmRldmljZSk7CisgICAgICAgICAgICBzdHJpbmdbIHNpemVvZihzdHJpbmcpLTEgXSA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RyaW5nOworCisgICAgY2FzZSBIUkZTWVNfVFlQRToKKyAgICAgICAgZnN5c190eXBlX2lkW2ZzeXNfdHlwZV9sZW4gLSAxXSA9IAorICAgICAgICAgICAgKEhSRlNfZW50cnktPnR5cGUgPiBfTkVUU05NUF9GU19UWVBFX0xPQ0FMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlNfVFlQRV9PVEhFUiA6IEhSRlNfZW50cnktPnR5cGUpOworICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihmc3lzX3R5cGVfaWQpOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBmc3lzX3R5cGVfaWQ7CisKKyAgICBjYXNlIEhSRlNZU19BQ0NFU1M6CisJbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19ST05MWSA/IDIgOiAxOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJGU1lTX0JPT1Q6CisJbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19CT09UQUJMRSA/IDEgOiAyOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJGU1lTX1NUT1JFSURYOgorICAgICAgICBsb25nX3JldHVybiA9IGZzeXNfaWR4ICsgTkVUU05NUF9NRU1fVFlQRV9NQVg7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfRlVMTERVTVA6CisgICAgICAgIHJldHVybiB3aGVuX2R1bXBlZChIUkZTX2VudHJ5LT5wYXRoLCBGVUxMX0RVTVAsIHZhcl9sZW4pOworICAgIGNhc2UgSFJGU1lTX1BBUlREVU1QOgorICAgICAgICByZXR1cm4gd2hlbl9kdW1wZWQoSFJGU19lbnRyeS0+cGF0aCwgUEFSVF9EVU1QLCB2YXJfbGVuKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2hyaGZpbGVzeXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50ICAgICAgSFJGU19pbmRleDsKKwordm9pZAorSW5pdF9IUl9GaWxlU3lzKHZvaWQpCit7CisgICAgbmV0c25tcF9jYWNoZSAqYyA9IG5ldHNubXBfZnN5c19nZXRfY2FjaGUoKTsKKyAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoIGMgKTsKKworICAgIEhSRlNfZW50cnkgPSBOVUxMOworICAgIEhSRlNfaW5kZXggPSAwOworfQorCitpbnQKK0dldF9OZXh0X0hSX0ZpbGVTeXModm9pZCkKK3sKKyAgICBpZiAoIEhSRlNfZW50cnkgKSB7CisgICAgICAgIEhSRlNfZW50cnkgPSBuZXRzbm1wX2ZzeXNfZ2V0X25leHQoIEhSRlNfZW50cnkgKTsKKyAgICB9IGVsc2UgeyAgICAgCisgICAgICAgIEhSRlNfZW50cnkgPSBuZXRzbm1wX2ZzeXNfZ2V0X2ZpcnN0KCk7CisgICAgfQorICAgIC8qIFNraXAgImluYWN0aXZlIiBlbnRyaWVzICovCisgICAgd2hpbGUgKCBIUkZTX2VudHJ5ICYmICEoSFJGU19lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfQUNUSVZFKSkKKyAgICAgICAgSFJGU19lbnRyeSA9IG5ldHNubXBfZnN5c19nZXRfbmV4dCggSFJGU19lbnRyeSApOworCisgICAgSFJGU19pbmRleCA9IChIUkZTX2VudHJ5ID8gSFJGU19lbnRyeS0+aWR4Lm9pZHNbMF0gOiAtMSApOworICAgIHJldHVybiBIUkZTX2luZGV4OworfQorCisKKworc3RhdGljIHVfY2hhciAgKgord2hlbl9kdW1wZWQoY2hhciAqZmlsZXN5cywgaW50IGxldmVsLCBzaXplX3QgKiBsZW5ndGgpCit7CisgICAgdGltZV90ICAgICAgICAgIGR1bXBkYXRlID0gMCwgdG1wOworICAgIEZJTEUgICAgICAgICAgICpkdW1wX2ZwOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpjcDEsICpjcDIsICpjcDM7CisKKyAgICAvKgorICAgICAqIExvb2sgZm9yIHRoZSByZWxldmVudCBlbnRyaWVzIGluIC9ldGMvZHVtcGRhdGVzCisgICAgICoKKyAgICAgKiBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgZGlza3MgYXJlCisgICAgICogICBtb3VudGVkIHVzaW5nIGJsb2NrIGRldmljZXMsIGJ1dCBkdW1wcyBhcmUKKyAgICAgKiAgIGRvbmUgdmlhIHRoZSByYXcgY2hhcmFjdGVyIGRldmljZXMuCisgICAgICogVGh1cyB0aGUgZGV2aWNlIG5hbWVzIGluIC9ldGMvZHVtcGRhdGVzIGFuZAorICAgICAqICAgL2V0Yy9tbnR0YWIgZG9uJ3QgbWF0Y2guCisgICAgICogICBUaGVzZSBjb21wYXJpc29ucyBhcmUgdGhlcmVmb3JlIG1hZGUgdXNpbmcgdGhlCisgICAgICogICBmaW5hbCBwb3J0aW9uIG9mIHRoZSBkZXZpY2UgbmFtZSBvbmx5LgorICAgICAqLworCisgICAgaWYgKCpmaWxlc3lzID09ICdcMCcpICAgICAgIC8qIE5vIGZpbGVzeXN0ZW0gbmFtZT8gKi8KKyAgICAgICAgcmV0dXJuIGRhdGVfbl90aW1lKE5VTEwsIGxlbmd0aCk7CisgICAgY3AxID0gc3RycmNocihmaWxlc3lzLCAnLycpOyAgICAgICAgLyogRmluZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBjdXJyZW50IEZTICovCisKKyAgICBpZiAoY3AxID09IE5VTEwpCisgICAgICAgIGNwMSA9IGZpbGVzeXM7CisKKyAgICBpZiAoKGR1bXBfZnAgPSBmb3BlbigiL2V0Yy9kdW1wZGF0ZXMiLCAiciIpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZGF0ZV9uX3RpbWUoTlVMTCwgbGVuZ3RoKTsKKworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGR1bXBfZnApICE9IE5VTEwpIHsKKyAgICAgICAgY3AyID0gc3RyY2hyKGxpbmUsICcgJyk7ICAgICAgICAvKiBTdGFydCBieSBsb29raW5nIGF0IHRoZSBkZXZpY2UgbmFtZSBvbmx5ICovCisgICAgICAgIGlmIChjcDIgIT0gTlVMTCkgeworICAgICAgICAgICAgKmNwMiA9ICdcMCc7CisgICAgICAgICAgICBjcDMgPSBzdHJyY2hyKGxpbmUsICcvJyk7ICAgLyogYW5kIGZpbmQgdGhlIGxhc3QgZWxlbWVudCAqLworICAgICAgICAgICAgaWYgKGNwMyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGNwMyA9IGxpbmU7CisKKyAgICAgICAgICAgIGlmIChzdHJjbXAoY3AxLCBjcDMpICE9IDApICAvKiBXcm9uZyBGUyAqLworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICArK2NwMjsKKyAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKDB4RkYgJiAqY3AyKSkKKyAgICAgICAgICAgICAgICArK2NwMjsgICAgICAgICAgLyogTm93IGZpbmQgdGhlIGR1bXAgbGV2ZWwgKi8KKworICAgICAgICAgICAgaWYgKGxldmVsID09IEZVTExfRFVNUCkgeworICAgICAgICAgICAgICAgIGlmICgqKGNwMisrKSAhPSAnMCcpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIHBhcnRpYWwgZHVtcHMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgweEZGICYgKmNwMikpCisgICAgICAgICAgICAgICAgICAgICsrY3AyOworCisgICAgICAgICAgICAgICAgZHVtcGRhdGUgPSBjdGltZV90b190aW1ldChjcDIpOworICAgICAgICAgICAgICAgIGZjbG9zZShkdW1wX2ZwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZV9uX3RpbWUoJmR1bXBkYXRlLCBsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBQYXJ0aWFsIER1bXAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKihjcDIrKykgPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBOb3QgaW50ZXJlc3RlZCBpbiBmdWxsIGR1bXBzICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoMHhGRiAmICpjcDIpKQorICAgICAgICAgICAgICAgICAgICArK2NwMjsKKworICAgICAgICAgICAgICAgIHRtcCA9IGN0aW1lX3RvX3RpbWV0KGNwMik7CisgICAgICAgICAgICAgICAgaWYgKHRtcCA+IGR1bXBkYXRlKQorICAgICAgICAgICAgICAgICAgICBkdW1wZGF0ZSA9IHRtcDsgICAgIC8qIFJlbWVtYmVyIHRoZSAnbGF0ZXN0JyBwYXJ0aWFsIGR1bXAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZjbG9zZShkdW1wX2ZwKTsKKworICAgIHJldHVybiBkYXRlX25fdGltZSgmZHVtcGRhdGUsIGxlbmd0aCk7Cit9CisKKworI2RlZmluZSBSQVdfREVWSUNFX1BSRUZJWAkiL2Rldi9yZHNrIgorI2RlZmluZSBDT09LRURfREVWSUNFX1BSRUZJWAkiL2Rldi9kc2siCisKK2NoYXIgICAgICAgICAgICoKK2Nvb2tfZGV2aWNlKGNoYXIgKmRldikKK3sKKyAgICBzdGF0aWMgY2hhciAgICAgY29va2VkX2RldltTTk1QX01BWFBBVEgrMV07CisKKyAgICBpZiAoIXN0cm5jbXAoZGV2LCBSQVdfREVWSUNFX1BSRUZJWCwgc3RybGVuKFJBV19ERVZJQ0VfUFJFRklYKSkpIHsKKyAgICAgICAgc3RybGNweShjb29rZWRfZGV2LCBDT09LRURfREVWSUNFX1BSRUZJWCwgc2l6ZW9mKGNvb2tlZF9kZXYpKTsKKyAgICAgICAgc3RybGNhdChjb29rZWRfZGV2LCBkZXYgKyBzdHJsZW4oUkFXX0RFVklDRV9QUkVGSVgpLAorICAgICAgICAgICAgICAgIHNpemVvZihjb29rZWRfZGV2KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RybGNweShjb29rZWRfZGV2LCBkZXYsIHNpemVvZihjb29rZWRfZGV2KSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvb2tlZF9kZXY7Cit9CisKKworaW50CitHZXRfRlNJbmRleChjaGFyICpkZXYpCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmZzeXM7CisKKyAgICBmc3lzID0gbmV0c25tcF9mc3lzX2J5X2RldmljZSggZGV2LCBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKTsKKyAgICByZXR1cm4gKGZzeXMgPyBmc3lzLT5pZHgub2lkc1swXSA6IC0xICk7Cit9CisKK2xvbmcKK0dldF9GU1NpemUoY2hhciAqZGV2KQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpmc3lzOworCisgICAgZnN5cyA9IG5ldHNubXBfZnN5c19ieV9kZXZpY2UoIGRldiwgTkVUU05NUF9GU19GSU5EX0VYSVNUICk7CisgICAgaWYgKCBmc3lzICkgICAgICAgCisgICAgICAgIHJldHVybiBuZXRzbm1wX2ZzeXNfc2l6ZSggZnN5cyApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0xOworfQorCitpbnQKK0NoZWNrX0hSX0ZpbGVTeXNfTkZTICh2b2lkKQoreworICAgIHJldHVybiAoSFJGU19lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFKSA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODkxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBmaWxlIHN5c3RlbSBkZXZpY2UgZ3JvdXAgaW50ZXJmYWNlIChIQUwgcmV3cml0ZSkgLSBocmhfZmlsZXN5cy5oCisgKgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9IUkZTWVNfSAorI2RlZmluZSBfTUlCR1JPVVBfSFJGU1lTX0gKKworZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJoX2ZpbGVzeXModm9pZCk7CitleHRlcm4gdm9pZCAgICAgSW5pdF9IUl9GaWxlU3lzKHZvaWQpOworZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2hyaGZpbGVzeXM7CitleHRlcm4gaW50ICAgICAgR2V0X05leHRfSFJfRmlsZVN5cyh2b2lkKTsKK2V4dGVybiBpbnQgICAgICBDaGVja19IUl9GaWxlU3lzX05GUyh2b2lkKTsKKworZXh0ZXJuIGludCAgICAgIEdldF9GU0luZGV4KGNoYXIgKik7CitleHRlcm4gbG9uZyAgICAgR2V0X0ZTU2l6ZShjaGFyICopOyAgICAgLyogVGVtcG9yYXJ5ICovCisKK2NvbmZpZ19leGNsdWRlKCBob3N0L2hyX2ZpbGVzeXMgKQorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IUkZTWVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmY4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMKQEAgLTAsMCArMSw1MjAgQEAKKy8qCisgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gc3RvcmFnZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyaF9zdG9yYWdlLmMKKyAqCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaW5jbHVkZSAiaG9zdF9yZXMuaCIKKyNpbmNsdWRlICJocmhfZmlsZXN5cy5oIgorI2luY2x1ZGUgImhyaF9zdG9yYWdlLmgiCisjaW5jbHVkZSAiaHJfZGlzay5oIgorI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgorCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaWZkZWYgV0lOMzIKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGluY2x1ZGUgPGVycm5vLmg+CisjICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4KKworI2RlZmluZSBIUlNUT1JFX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCisJICogICBhbmQgaW50ZXJuYWwgZm9yd2FyZCBkZWNsYXJhdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCisKKworZXh0ZXJuIG5ldHNubXBfZnN5c19pbmZvICpIUkZTX2VudHJ5OworCitzdGF0aWMgdm9pZCBwYXJzZV9zdG9yYWdlX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7CisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEluaXRpYWxpc2F0aW9uICYgY29tbW9uIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KK2ludCAgICAgICAgICAgICBHZXRfTmV4dF9IUl9TdG9yZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBJbml0X0hSX1N0b3JlKHZvaWQpOworaW50ICAgICAgICAgICAgIGhlYWRlcl9ocnN0b3JlKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOwordm9pZCogICAgICAgICAgIGhlYWRlcl9ocnN0b3JlRW50cnkoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9tZW1zaXplOworCisKKyNkZWZpbmUJSFJTVE9SRV9NRU1TSVpFCQkxCisjZGVmaW5lCUhSU1RPUkVfSU5ERVgJCTIKKyNkZWZpbmUJSFJTVE9SRV9UWVBFCQkzCisjZGVmaW5lCUhSU1RPUkVfREVTQ1IJCTQKKyNkZWZpbmUJSFJTVE9SRV9VTklUUwkJNQorI2RlZmluZQlIUlNUT1JFX1NJWkUJCTYKKyNkZWZpbmUJSFJTVE9SRV9VU0VECQk3CisjZGVmaW5lCUhSU1RPUkVfRkFJTFMJCTgKKworc3RydWN0IHZhcmlhYmxlMiBocnN0b3JlX3ZhcmlhYmxlc1tdID0geworICAgIHtIUlNUT1JFX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7MX19LAorICAgIHtIUlNUT1JFX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezJ9fSwKKyAgICB7SFJTVE9SRV9ERVNDUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7M319LAorICAgIHtIUlNUT1JFX1VOSVRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7NH19LAorICAgIHtIUlNUT1JFX1NJWkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs1fX0sCisgICAge0hSU1RPUkVfVVNFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezZ9fSwKKyAgICB7SFJTVE9SRV9GQUlMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezd9fQorfTsKK29pZCAgICAgICAgICAgICBocnN0b3JlX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIgfTsKK29pZCAgICAgICAgICAgICBock1lbW9yeVNpemVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIsIDIgfTsKK29pZCAgICAgICAgICAgICBoclN0b3JhZ2VUYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIsIDMsIDEgfTsKKworCit2b2lkCitpbml0X2hyaF9zdG9yYWdlKHZvaWQpCit7CisgICAgY2hhciAqYXBwbmFtZTsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaG9zdC9ock1lbW9yeVNpemUiLCBoYW5kbGVfbWVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWQsIE9JRF9MRU5HVEgoaHJNZW1vcnlTaXplX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOworICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9zdG9yYWdlIiwgaHJzdG9yZV92YXJpYWJsZXMsIHZhcmlhYmxlMiwKKyAgICAgICAgICAgICAgICAgaHJTdG9yYWdlVGFibGVfb2lkKTsKKworICAgIGFwcG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcG5hbWUsICJza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIiwgCisJCQkgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKwkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpOworCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcG5hbWUsICJyZWFsU3RvcmFnZVVuaXRzIiwKKyAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUkVBTFNUT1JBR0VVTklUUyk7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic3RvcmFnZVVzZU5GUyIsIHBhcnNlX3N0b3JhZ2VfY29uZmlnLCBOVUxMLAorCSIxIHwgMlx0XHQoMSA9IGVuYWJsZSwgMiA9IGRpc2FibGUpIik7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmFnZVVzZU5GUyA9IDE7CS8qIERlZmF1bHQgdG8gcmVwb3J0aW5nIE5GUyBtb3VudHMgYXMgTmV0d29ya0Rpc2sgKi8KKworc3RhdGljIHZvaWQKK3BhcnNlX3N0b3JhZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICAgIGNoYXIgKnZhbDsKKyAgICBpbnQgaXZhbDsKKyAgICBjaGFyICpzdDsKKworICAgIHZhbCA9IHN0cnRva19yKGNwdHIsICIgXHQiLCAmc3QpOworICAgIGlmICghdmFsKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIk1pc3NpbmcgRkxBRyBwYXJhbWV0ZXIgaW4gc3RvcmFnZVVzZU5GUyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGl2YWwgPSBhdG9pKHZhbCk7CisgICAgaWYgKGl2YWwgPCAxIHx8IGl2YWwgPiAyKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInN0b3JhZ2VVc2VORlMgbXVzdCBiZSAxIG9yIDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdG9yYWdlVXNlTkZTID0gKGl2YWwgPT0gMSkgPyAxIDogMDsKK30KKworLyoKKyAqIGhlYWRlcl9ocnN0b3JlRW50cnkoLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKiAKKyAqLworCit2b2lkICoKK2hlYWRlcl9ocnN0b3JlRW50cnkoc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyNkZWZpbmUgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSAkxMQorICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZV9pZHgsIExvd0luZGV4ID0gLTE7CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBpZHggPSAtMTsKKyAgICBuZXRzbm1wX21lbW9yeV9pbmZvICptZW0gID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3N0b3JhZ2UiLCAidmFyX2hyc3RvcmVFbnRyeTogcmVxdWVzdCAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX3N0b3JhZ2UiLCBuYW1lLCAqbGVuZ3RoKSk7CisgICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiIGV4YWN0PSVkXG4iLCBleGFjdCkpOworCisgICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLAorICAgICAgICAgICAoaW50KSB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKKyAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIHZwLT5uYW1lLCB2cC0+bmFtZWxlbik7CisKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlRW50cnk6IGNvbXBhcmUgIikpOworICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuKSk7CisgICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiID0+ICVkXG4iLCByZXN1bHQpKTsKKworCisgICAgaWYgKHJlc3VsdCA8IDAgfHwKKyAgICAgICAgKmxlbmd0aCA8PSBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIICkgeworICAgICAgIC8qCisgICAgICAgICogUmVxdWVzdGVkIE9JRCB0b28gZWFybHkgb3IgdG9vIHNob3J0IHRvIHJlZmVyCisgICAgICAgICogICB0byBhIHZhbGlkIHJvdyAoZm9yIHRoZSBjdXJyZW50IGNvbHVtbiBvYmplY3QpLgorICAgICAgICAqIEdFVCByZXF1ZXN0cyBzaG91bGQgZmFpbCwgR0VUTkVYVCByZXF1ZXN0cworICAgICAgICAqICAgc2hvdWxkIHVzZSB0aGUgZmlyc3Qgcm93LgorICAgICAgICAqLworICAgICAgICBpZiAoIGV4YWN0ICkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBuZXRzbm1wX21lbW9yeV9sb2FkKCk7CisgICAgICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9maXJzdCggMCApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogT3RoZXJ3aXNlLCByZXRyaWV2ZSB0aGUgcmVxdWVzdGVkCisgICAgICAgICAqICAob3IgZm9sbG93aW5nKSByb3cgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGV4YWN0ICYmICpsZW5ndGggPiBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIKzEgKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgLyogVG9vIGxvbmcgZm9yIGEgdmFsaWQgaW5zdGFuY2UgKi8KKyAgICAgICAgaWR4ID0gbmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdOworICAgICAgICBpZiAoIGlkeCA8IE5FVFNOTVBfTUVNX1RZUEVfTUFYICkgeworICAgICAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOworICAgICAgICAgICAgbWVtID0gKCBleGFjdCA/IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggaWR4LCAwICkgOgorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21lbW9yeV9nZXRfbmV4dF9ieUlkeCggaWR4LCAwICkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGlzIG1hdGNoZWQgYSBtZW1vcnktYmFzZWQgZW50cnksIHRoZW4KKyAgICAgKiAgICB1cGRhdGUgdGhlIE9JRCBwYXJhbWV0ZXIocykgZm9yIEdFVE5FWFQgcmVxdWVzdHMuCisgICAgICovCisgICAgaWYgKCBtZW0gKSB7CisgICAgICAgIGlmICggIWV4YWN0ICkgeworICAgICAgICAgICAgbmV3bmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdID0gbWVtLT5pZHg7CisgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKKyAgICAgICAgICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoKKyAgICAgKiBJZiB0aGlzIGRpZG4ndCBtYXRjaCBhIG1lbW9yeS1iYXNlZCBlbnRyeSwKKyAgICAgKiAgIHRoZW4gY29uc2lkZXIgdGhlIGRpc2stYmFzZWQgc3RvcmFnZS4KKyAgICAgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgSW5pdF9IUl9TdG9yZSgpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzdG9yYWdlX2lkeCA9IEdldF9OZXh0X0hSX1N0b3JlKCk7CisgICAgICAgICAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIoaW5kZXggJWQgLi4uLiIsIHN0b3JhZ2VfaWR4KSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZV9pZHggPT0gLTEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBuZXduYW1lW0hSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEhdID0gc3RvcmFnZV9pZHg7CisgICAgICAgICAgICBERUJVR01TR09JRCgoImhvc3QvaHJfc3RvcmFnZSIsIG5ld25hbWUsICpsZW5ndGgpKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIlxuIikpOworICAgICAgICAgICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOworICAgICAgICAgICAgaWYgKGV4YWN0ICYmIChyZXN1bHQgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBMb3dJbmRleCA9IHN0b3JhZ2VfaWR4OworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogU2F2ZSBzdG9yYWdlIHN0YXR1cyBpbmZvcm1hdGlvbiAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoIWV4YWN0ICYmIChyZXN1bHQgPCAwKSkgJiYKKyAgICAgICAgICAgICAgICAoTG93SW5kZXggPT0gLTEgfHwgc3RvcmFnZV9pZHggPCBMb3dJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBMb3dJbmRleCA9IHN0b3JhZ2VfaWR4OworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogU2F2ZSBzdG9yYWdlIHN0YXR1cyBpbmZvcm1hdGlvbiAKKyAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBIUlNUT1JFX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBMb3dJbmRleCAhPSAtMSApIHsKKyAgICAgICAgICAgIGlmICggIWV4YWN0ICkgeworICAgICAgICAgICAgICAgIG5ld25hbWVbIEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEggXSA9IExvd0luZGV4OworICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtID0gKG5ldHNubXBfbWVtb3J5X2luZm8qKTB4ZmZmZmZmZmY7ICAgLyogVG8gaW5kaWNhdGUgJ3N1Y2Nlc3MnICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCisKKyAgICAvKgorICAgICAqICAuLi4gYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgcm93CisgICAgICovCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfc3RvcmFnZSIsICJ2YXJfaHJzdG9yZUVudHJ5OiBwcm9jZXNzICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfc3RvcmFnZSIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgKCVwKVxuIiwgbWVtKSk7CisgICAgcmV0dXJuICh2b2lkKiltZW07Cit9CisKK29pZCAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDIsIDEsIDEgfTsgIC8qIGhyU3RvcmFnZU90aGVyICovCitpbnQgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2xlbiA9CisgICAgc2l6ZW9mKHN0b3JhZ2VfdHlwZV9pZCkgLyBzaXplb2Yoc3RvcmFnZV90eXBlX2lkWzBdKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCisJICoKKwkgKiAgU3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworaW50CitoYW5kbGVfbWVtc2l6ZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbV9pbmZvOworICAgIGludCB2YWw7CisKKyAgICAvKgorICAgICAqIFdlIGp1c3QgbmVlZCB0byBoYW5kbGUgdmFsaWQgR0VUIHJlcXVlc3RzLCBhcyBpbnZhbGlkIGluc3RhbmNlcworICAgICAqICAgYXJlIHJlamVjdGVkIGF1dG9tYXRpY2FsbHksIGFuZCAodmFsaWQpIEdFVE5FWFQgcmVxdWVzdHMgYXJlCisgICAgICogICBjb252ZXJ0ZWQgaW50byB0aGUgYXBwcm9wcmlhdGUgR0VUIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBXZSBhbHNvIG9ubHkgZXZlciByZWNlaXZlIG9uZSByZXF1ZXN0IGF0IGEgdGltZS4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBuZXRzbm1wX21lbW9yeV9sb2FkKCk7CisgICAgICAgIG1lbV9pbmZvID0gbmV0c25tcF9tZW1vcnlfZ2V0X2J5SWR4KCBORVRTTk1QX01FTV9UWVBFX1BIWVNNRU0sIDAgKTsKKyAgICAgICAgaWYgKCAhbWVtX2luZm8gfHwgbWVtX2luZm8tPnNpemUgPT0gLTEgfHwgbWVtX2luZm8tPnVuaXRzID09IC0xICkKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX05PU1VDSE9CSkVDVCApOworCWVsc2UgeworICAgICAgICAgICAgdmFsICA9ICBtZW1faW5mby0+c2l6ZTsgICAgIC8qIG1lbXRvdGFsICovCisgICAgICAgICAgICB2YWwgKj0gKG1lbV9pbmZvLT51bml0cy8xMDI0KTsKKyAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfbWVtc2l6ZVxuIiwKKyAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKwordV9jaGFyICAgICAgICAgKgordmFyX2hyc3RvcmUoc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgc3RvcmVfaWR4ID0gMDsKKyAgICBzdGF0aWMgY2hhciAgICAgc3RyaW5nWzEwMjRdOworICAgIHZvaWQgICAgICAgICAgICAgICAgKnB0cjsKKyAgICBuZXRzbm1wX21lbW9yeV9pbmZvICptZW0gPSBOVUxMOworCityZWFsbHlfdHJ5X25leHQ6CisJcHRyID0gaGVhZGVyX2hyc3RvcmVFbnRyeSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwKKwkJCQkJd3JpdGVfbWV0aG9kKTsKKwlpZiAocHRyID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHN0b3JlX2lkeCA9IG5hbWVbIEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEggXTsKKyAgICAgICAgaWYgKEhSRlNfZW50cnkgJiYKKwkgICAgc3RvcmVfaWR4ID4gTkVUU05NUF9NRU1fVFlQRV9NQVggJiYKKyAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9TS0lQTkZTSU5IT1NUUkVTT1VSQ0VTKSAmJgorICAgICAgICAgICAgQ2hlY2tfSFJfRmlsZVN5c19ORlMoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoc3RvcmVfaWR4IDw9IE5FVFNOTVBfTUVNX1RZUEVfTUFYICkgeworCSAgICBtZW0gPSAobmV0c25tcF9tZW1vcnlfaW5mbyopcHRyOworICAgICAgICB9CisKKworCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIEhSU1RPUkVfSU5ERVg6CisgICAgICAgIGxvbmdfcmV0dXJuID0gc3RvcmVfaWR4OworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJTVE9SRV9UWVBFOgorICAgICAgICBpZiAoc3RvcmVfaWR4ID4gTkVUU05NUF9NRU1fVFlQRV9NQVgpCisgICAgICAgICAgICBpZiAoSFJGU19lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFICkKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gMTA7ICAgICAvKiBOZXR3b3JrIERpc2sgKi8KKyAgICAgICAgICAgIGVsc2UgaWYgKEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JFTU9WRSApCisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDU7ICAgICAgLyogUmVtb3ZhYmxlIERpc2sgKi8KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gNDsgICAgICAvKiBBc3N1bWUgZml4ZWQgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dpdGNoIChzdG9yZV9pZHgpIHsKKyAgICAgICAgICAgIGNhc2UgTkVUU05NUF9NRU1fVFlQRV9QSFlTTUVNOgorICAgICAgICAgICAgY2FzZSBORVRTTk1QX01FTV9UWVBFX1VTRVJNRU06CisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDI7ICAgICAgLyogUkFNICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5FVFNOTVBfTUVNX1RZUEVfVklSVE1FTToKKyAgICAgICAgICAgIGNhc2UgTkVUU05NUF9NRU1fVFlQRV9TV0FQOgorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSAzOyAgICAgIC8qIFZpcnR1YWwgTWVtICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSAxOyAgICAgIC8qIE90aGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0b3JhZ2VfdHlwZV9pZCk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIHN0b3JhZ2VfdHlwZV9pZDsKKyAgICBjYXNlIEhSU1RPUkVfREVTQ1I6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkgeworICAgICAgICAgICAgc3RybGNweShzdHJpbmcsIEhSRlNfZW50cnktPnBhdGgsIHNpemVvZihzdHJpbmcpKTsKKyAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdHJpbmc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoICFtZW0gfHwgIW1lbS0+ZGVzY3IgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihtZW0tPmRlc2NyKTsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIG1lbS0+ZGVzY3I7CisgICAgICAgIH0KKyAgICBjYXNlIEhSU1RPUkVfVU5JVFM6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkgeworICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9SRUFMU1RPUkFHRVVOSVRTKSkKKyAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPnVuaXRzICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPnVuaXRzXzMyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+dW5pdHMgPT0gLTEgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IG1lbS0+dW5pdHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSU1RPUkVfU0laRToKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMpKQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+c2l6ZSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5zaXplXzMyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+c2l6ZSA9PSAtMSApCisgICAgICAgICAgICAgICAgZ290byB0cnlfbmV4dDsKKyAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gbWVtLT5zaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUlNUT1JFX1VTRUQ6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkgeworICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9SRUFMU1RPUkFHRVVOSVRTKSkKKyAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPnVzZWQgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dXNlZF8zMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggIW1lbSB8fCBtZW0tPnNpemUgPT0gLTEgfHwgbWVtLT5mcmVlID09IC0xICkKKyAgICAgICAgICAgICAgICBnb3RvIHRyeV9uZXh0OworICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBtZW0tPnNpemUgLSBtZW0tPmZyZWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSU1RPUkVfRkFJTFM6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkKKyNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUworCSAgICBnb3RvIHRyeV9uZXh0OworI2Vsc2UKKyAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKKyNlbmRpZgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICggIW1lbSB8fCBtZW0tPm90aGVyID09IC0xICkKKyAgICAgICAgICAgICAgICBnb3RvIHRyeV9uZXh0OworICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBtZW0tPm90aGVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9ocnN0b3JlXG4iLAorICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CisKKyAgdHJ5X25leHQ6CisgICAgaWYgKCFleGFjdCkKKyAgICAgICAgZ290byByZWFsbHlfdHJ5X25leHQ7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgICAgICBIUlNfaW5kZXg7CisKK3ZvaWQKK0luaXRfSFJfU3RvcmUodm9pZCkKK3sKKyAgICBIUlNfaW5kZXggPSAwOworICAgIEluaXRfSFJfRmlsZVN5cygpOworfQorCitpbnQKK0dldF9OZXh0X0hSX1N0b3JlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBGaWxlLWJhc2VkIHN0b3JhZ2UgCisgICAgICovCisJZm9yICg7OykgeworICAgIAlIUlNfaW5kZXggPSBHZXRfTmV4dF9IUl9GaWxlU3lzKCk7CisJCWlmIChIUlNfaW5kZXggPj0gMCkgeworCQkJaWYgKCEobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKwkJCQkJCQlORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpICYmIAorCQkJCQkJQ2hlY2tfSFJfRmlsZVN5c19ORlMoKSkpIHsKKwkJCQlyZXR1cm4gSFJTX2luZGV4ICsgTkVUU05NUF9NRU1fVFlQRV9NQVg7CQorCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzIzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBzdG9yYWdlIGdyb3VwIGludGVyZmFjZSAoSEFMIHJld3JpdGUpIC0gaHJoX3N0b3JhZ2UuaAorICoKKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKKyNkZWZpbmUgX01JQkdST1VQX0hSU1RPUkFHRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL21lbW9yeSkKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMpCitjb25maWdfcmVxdWlyZShob3N0L2hyaF9maWxlc3lzKQorCitjb25maWdfZXhjbHVkZSggaG9zdC9ocl9zdG9yYWdlICkKKworZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJoX3N0b3JhZ2Uodm9pZCk7CitleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJzdG9yZTsKKworCisjZGVmaW5lCUhSU19UWVBFX01CVUYJCTEKKyNkZWZpbmUJSFJTX1RZUEVfTUVNCQkyCisjZGVmaW5lCUhSU19UWVBFX1NXQVAJCTMKKyNkZWZpbmUJSFJTX1RZUEVfRklYRURfTUFYCTMgICAgIC8qIHRoZSBsYXJnZXN0IGZpeGVkIHR5cGUgKi8KKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfSFJTVE9SQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3RfcmVzLmggYi9hZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oCmluZGV4IDhjOTUwOTAuLjFkYmEzODggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaApAQCAtMTcsMTYgKzE3LDE2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oPgogCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKLSNpZiBkZWZpbmVkIChXSU4zMikgJiYgIWRlZmluZWQgKGN5Z3dpbikKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZWxzZSAvKiBXSU4zMiAqLworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAogI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYKICNpZmRlZiBfSV9ERUZJTkVEX0tFUk5FTAogI3VuZGVmIF9LRVJORUwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jCmluZGV4IGQ2NWZhZDAuLjI2ZTMxZmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMKQEAgLTQsMTUgKzQsMjUgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKLSNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KIAorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCIKKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfYWxsLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2UsIGludGVyZmFjZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FjY2Vzc19lbnRyeV9zZXRfYWRtaW5fc3RhdHVzLCBpbnRlcmZhY2VfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9sZWdhY3ksIGludGVyZmFjZV9hbGwpCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9hcmNoX3NldF9hZG1pbl9zdGF0dXMpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSU5URVJGQUNFX0FDQ0VTU19FTlRSWV9TRVRfQURNSU5fU1RBVFVTICovCiAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtMjUwLDggKzI2MCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHRtcC5uYW1lID0gKGNoYXIgKiluYW1lOwotICAgIHJldHVybiBDT05UQUlORVJfRklORChjb250YWluZXItPm5leHQsICZ0bXApOworICAgIHRtcC5uYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBuYW1lKTsKKyAgICByZXR1cm4gKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5KilDT05UQUlORVJfRklORChjb250YWluZXItPm5leHQsICZ0bXApOwogfQogCiAvKioKQEAgLTMzNyw2ICszNDcsNyBAQAogICAgIGZyZWUoZW50cnkpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0xFR0FDWQogLyoKICAqIEJsZWNoIC0gYmFja3dhcmRzIGNvbXBhdGlibGUgbWliSUkvaW50ZXJmYWNlcyBzdHlsZSBpbnRlcmZhY2UKICAqIGZ1bmN0aW9ucywgc28gd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGUgb2xkZXIgbW9kdWxlcyB0byB1c2UKQEAgLTM0NiwzMyArMzU3LDMzIEBACiAgICAgISBkZWZpbmVkKCBORVRTTk1QX05PX0JBQ0tXQVJEU19DT01QQVRBQklMSVRZICkKIAogc3RhdGljIG5ldHNubXBfaXRlcmF0b3IgKml0ID0gTlVMTDsKLXN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IE5VTEw7Ci1zdGF0aWMgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmUgPSBOVUxMOworc3RhdGljIGlmVGFibGVfcm93cmVxX2N0eCAqcm93ID0gTlVMTDsKIAogLyoqCi0gKiAKKyAqIFNldHVwIGFuIGl0ZXJhdG9yIGZvciBzY2FubmluZyB0aGUgaW50ZXJmYWNlcyB1c2luZyB0aGUgY2FjaGVkIGVudHJ5CisgKiBmcm9tIGlmLW1pYi9pZlRhYmxlLgogICovCiB2b2lkCiBJbnRlcmZhY2VfU2Nhbl9Jbml0KHZvaWQpCiB7Ci0gICAgLyoKLSAgICAgKiBpZlRhYmxlIGNvbnRhaW5lciBzaG91bGRuJ3QgY2hhbmdlLCBzbyB3ZSBzaG91bGRuJyBoYXZlIHRvCi0gICAgICogcmUtZmV0Y2ggaXQgZXZlcnkgdGltZS4KLSAgICAgKi8KLSAgICBpZiAoTlVMTCAhPSBjKQotICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2ZyZWUoYywgMCk7Ci0KLSAgICBjID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9sb2FkKE5VTEwsIDApOworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250ID0gTlVMTDsKKyAgICBuZXRzbm1wX2NhY2hlICpjYWNoZSAgICA9IE5VTEw7IAogICAgIAotICAgIGlmIChOVUxMICE9IGMpIHsKKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQoaWZUYWJsZV9vaWQsIGlmVGFibGVfb2lkX3NpemUpOworICAgIGlmIChOVUxMICE9IGNhY2hlKSB7CisgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChjYWNoZSk7CisgICAgICAgIGNvbnQgPSAobmV0c25tcF9jb250YWluZXIqKSBjYWNoZS0+bWFnaWM7CisgICAgfQorICAgIAorICAgIGlmIChOVUxMICE9IGNvbnQpIHsKICAgICAgICAgaWYgKE5VTEwgIT0gaXQpCiAgICAgICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKICAgICAKLSAgICAgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoYyk7CisgICAgICAgIGl0ID0gQ09OVEFJTkVSX0lURVJBVE9SKGNvbnQpOwogICAgIH0KICAgIAogICAgIGlmIChOVUxMICE9IGl0KQotICAgICAgICBlID0gSVRFUkFUT1JfRklSU1QoaXQpOworICAgICAgICByb3cgPSAoaWZUYWJsZV9yb3dyZXFfY3R4KilJVEVSQVRPUl9GSVJTVChpdCk7CiB9CiAKIGludApAQCAtMzk0LDkgKzQwNSwxMiBAQAogSW50ZXJmYWNlX1NjYW5fTmV4dEludChpbnQgKmluZGV4LCBjaGFyICpuYW1lLCBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICB2b2lkICpkYykKIHsKLSAgICBpZiAoTlVMTCA9PSBlKQotICAgICAgICByZXR1cm4gMDsKKyAgICBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSogZSA9IE5VTEw7CiAKKyAgICBpZiAoTlVMTCA9PSByb3cpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGUgPSByb3ctPmRhdGEuaWZlbnRyeTsKICAgICBpZihpbmRleCkKICAgICAgICAgKmluZGV4ID0gZS0+aW5kZXg7CiAKQEAgLTQwNiwxMyArNDIwLDE0IEBACiAgICAgaWYgKGVudHJ5KQogICAgICAgICAqZW50cnkgPSBlOwogCi0gICAgZSA9IElURVJBVE9SX05FWFQoaXQpOworICAgIHJvdyA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKSBJVEVSQVRPUl9ORVhUKGl0KTsKIAogICAgIHJldHVybiAxOwogfQogI2VuZGlmIC8qIE5FVFNOTVBfTk9fQkFDS1dBUkRTX0NPTVBBVEFCSUxJVFkgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9MRUdBQ1kgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FDQ0VTU19FTlRSWV9TRVRfQURNSU5fU1RBVFVTCiAvKioKICAqCiAgKiBAcmV0dmFsIDAgICA6IHN1Y2Nlc3MKQEAgLTQ0MSw2ICs0NTYsNyBAQAogICAgIHJldHVybiByYzsKIH0KICNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FDQ0VTU19FTlRSWV9TRVRfQURNSU5fU1RBVFVTICovCiAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtNDU2LDYgKzQ3Miw3IEBACiAgICAgICAgICAgICAgICAgICAoKGNvbnN0IG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICopIHJocyktPm5hbWUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfQUNDRVNTX0lOVEVSRkFDRV9OT0FSQ0gKIC8qKgogICovCiBzdGF0aWMgdm9pZApAQCAtNDYzLDEzICs0ODAsMTQgQEAKIHsKICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfZnJlZShlbnRyeSk7CiB9CisjZW5kaWYKIAogLyoqCiAgKi8KIHN0YXRpYyB2b2lkCiBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSwgb2lkIGluZGV4KQogewotICAgIG9pZCB0bXA7CisgICAgaW50IHRtcDsKIAogICAgIGlmKE5VTEwgPT0gbmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc3LDE5ICs0OTUsMTcgQEAKICAgICB0bXAgPSBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJpbnRlcmZhY2VzIiwgbmFtZSk7CiAgICAgaWYgKHRtcCA9PSBTRV9ETkUpIHsKICAgICAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImludGVyZmFjZXMiLCBzdHJkdXAobmFtZSksIGluZGV4KTsKLSAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6aWZJbmRleCIsICJzYXZlZCBpZkluZGV4ICVkIGZvciAlc1xuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6aWZJbmRleCIsCisgICAgICAgICAgICAgICAgICAgICJzYXZlZCBpZkluZGV4ICUiIE5FVFNOTVBfUFJJbyAidSBmb3IgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBuYW1lKSk7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgaWYgKGluZGV4ICE9IHRtcCkgewotICAgICAgICAgICAgc3RhdGljIGludCBsb2dnZWQgPSAwOwotICAgICAgICAgICAgaWYgKCFsb2dnZWQpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiSWZJbmRleCBvZiBhbiBpbnRlcmZhY2UgY2hhbmdlZC4gU3VjaCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlcyB3aWxsIGFwcGVhciBtdWx0aXBsZSB0aW1lcyBpbiBJRi1NSUIuXG4iKTsKLSAgICAgICAgICAgICAgICBsb2dnZWQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6aWZJbmRleCIsICJpbmRleCAlZCAhPSB0bXAgZm9yICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBuYW1lKSk7CisgICAgICAgIGlmIChpbmRleCAhPSAob2lkKXRtcCkgeworICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiSWZJbmRleCBvZiBhbiBpbnRlcmZhY2UgY2hhbmdlZC4gU3VjaCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlcyB3aWxsIGFwcGVhciBtdWx0aXBsZSB0aW1lcyBpbiBJRi1NSUIuXG4iKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCAlIiBORVRTTk1QX1BSSW8gInUgIT0gdG1wIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBuYW1lKSk7CiAgICAgICAgIH0KIH0KIApAQCAtNTMyLDM5ICs1NDgsNzggQEAKICAgICAgICAgbWVtY3B5KHByZXZfdmFscy0+b2xkX3N0YXRzLCAmcHJldl92YWxzLT5zdGF0cywgc2l6ZW9mKHByZXZfdmFscy0+c3RhdHMpKTsKICAgICB9CiAKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmlieXRlcywKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmlieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaWJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLml1Y2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJbk9jdGV0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPm5zX2ZsYWdzICYgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfQ0FMQ1VMQVRFX1VDQVNUKSB7CisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLmlhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgcGFja2V0IGNvdW50IHRvIDY0Yml0c1xuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLml1Y2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLml1Y2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPml1Y2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJblVjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5pdWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLml1Y2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+aXVjYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5pbWNhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBpZkhDSW5VY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmltY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaW1jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pbWNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmliY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJbk11bHRpY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmliY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaWJjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pYmNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJbkJyb2FkY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMub2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5vYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm91Y2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENPdXRPY3RldHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm91Y2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMub3VjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5vdWNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9tY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENPdXRVY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9tY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMub21jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5vbWNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9iY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENPdXRNdWx0aWNhc3RQa3RzIHRvIDY0Yml0c1xuIikpOworCisgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5vYmNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLm9iY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+b2JjYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBpZkhDT3V0QnJvYWRjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKwogICAgIC8qCiAgICAgICogQ29weSAzMiBiaXQgY291bnRlcnMKICAgICAgKi8KQEAgLTU5Niw2ICs2NTEsMjMgQEAKIH0KIAogLyoqCisgKiBDYWxjdWxhdGUgc3RhdHMKKyAqCisgKiBAcmV0dmFsICAwIDogc3VjY2VzcworICogQHJldHZhbCAtMSA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2NhbGN1bGF0ZV9zdGF0cyhuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqZW50cnkpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLCAiY2FsY3VsYXRlX3N0YXRzXG4iKSk7CisgICAgaWYgKGVudHJ5LT5uc19mbGFncyAmIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0NBTENVTEFURV9VQ0FTVCkgeworICAgICAgICB1NjRTdWJ0cmFjdCgmZW50cnktPnN0YXRzLmlhbGwsICZlbnRyeS0+c3RhdHMuaW1jYXN0LAorICAgICAgICAgICAgICAgICZlbnRyeS0+c3RhdHMuaXVjYXN0KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgogICogY29weSBpbnRlcmZhY2UgZW50cnkgZGF0YSAoYWZ0ZXIgY2hlY2tpbmcgZm9yIGNvdW50ZXIgd3JhcHMpCiAgKgogICogQHJldHZhbCAtMiA6IG1hbGxvYyBmYWlsZWQKQEAgLTYxNyw2ICs2ODksNyBAQAogICAgICAqIHVwZGF0ZSBzdGF0cwogICAgICAqLwogICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV91cGRhdGVfc3RhdHMobGhzLCByaHMpOworICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9jYWxjdWxhdGVfc3RhdHMobGhzKTsKIAogICAgIC8qCiAgICAgICogdXBkYXRlIGRhdGEKQEAgLTYyNiw4ICs2OTksNyBAQAogICAgICAgICgwID09IHN0cmNtcChsaHMtPmRlc2NyLCByaHMtPmRlc2NyKSkpCiAgICAgICAgIDsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKE5VTEwgIT0gbGhzLT5kZXNjcikKLSAgICAgICAgICAgIFNOTVBfRlJFRShsaHMtPmRlc2NyKTsKKyAgICAgICAgU05NUF9GUkVFKGxocy0+ZGVzY3IpOwogICAgICAgICBpZiAocmhzLT5kZXNjcikgewogICAgICAgICAgICAgbGhzLT5kZXNjciA9IHN0cmR1cChyaHMtPmRlc2NyKTsKICAgICAgICAgICAgIGlmKE5VTEwgPT0gbGhzLT5kZXNjcikKQEAgLTY1NSwxMCArNzI3LDkgQEAKICAgICAgICAgaWYocmhzLT5wYWRkcl9sZW4pCiAgICAgICAgICAgICBtZW1jcHkobGhzLT5wYWRkcixyaHMtPnBhZGRyLHJocy0+cGFkZHJfbGVuKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoTlVMTCAhPSBsaHMtPnBhZGRyKQotICAgICAgICAgICAgU05NUF9GUkVFKGxocy0+cGFkZHIpOworICAgICAgICBTTk1QX0ZSRUUobGhzLT5wYWRkcik7CiAgICAgICAgIGlmIChyaHMtPnBhZGRyKSB7Ci0gICAgICAgICAgICBsaHMtPnBhZGRyID0gbWFsbG9jKHJocy0+cGFkZHJfbGVuKTsKKyAgICAgICAgICAgIGxocy0+cGFkZHIgPSAoY2hhciopbWFsbG9jKHJocy0+cGFkZHJfbGVuKTsKICAgICAgICAgICAgIGlmKE5VTEwgPT0gbGhzLT5wYWRkcikKICAgICAgICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgICAgICBtZW1jcHkobGhzLT5wYWRkcixyaHMtPnBhZGRyLHJocy0+cGFkZHJfbGVuKTsKQEAgLTc5Niw3ICs4NjcsNyBAQAogICAgIG5ldHNubXBfY29uZl9pZl9saXN0ICAgKmlmX3B0ciA9IGNvbmZfbGlzdCwgKmlmX25leHQ7CiAgICAgd2hpbGUgKGlmX3B0cikgewogICAgICAgICBpZl9uZXh0ID0gaWZfcHRyLT5uZXh0OwotICAgICAgICBmcmVlKGlmX3B0ci0+bmFtZSk7CisgICAgICAgIGZyZWUoTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBpZl9wdHItPm5hbWUpKTsKICAgICAgICAgZnJlZShpZl9wdHIpOwogICAgICAgICBpZl9wdHIgPSBpZl9uZXh0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAppbmRleCAyNTZkMDQ3Li4zNTNiMjU0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCkBAIC0zMiwxMiArMzIsMTMgQEAKIAogIyAgIGlmIGRlZmluZWQoIGxpbnV4ICkKIAorICAgIGNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiAgICAgY29uZmlnX3JlcXVpcmUoaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eCkKICAgICBjb25maWdfcmVxdWlyZShpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsKQogCiAjICAgZWxpZiBkZWZpbmVkKCBvcGVuYnNkMyApIHx8IFwKICAgICAgICAgIGRlZmluZWQoIGZyZWVic2Q0ICkgfHwgZGVmaW5lZCggZnJlZWJzZDUgKSB8fCBkZWZpbmVkKCBmcmVlYnNkNiApIHx8IFwKLSAgICAgICAgIGRlZmluZWQgKGRhcndpbikgICAgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkKKyAgICAgICAgIGRlZmluZWQoIGRhcndpbiApICAgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggbmV0YnNkMSApCiAKICAgICBjb25maWdfcmVxdWlyZShpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bCkKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jCmluZGV4IDU3MDhjNjQuLmRiMmMyNDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMKQEAgLTQsNiArNCw3IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCIKQEAgLTEzLDYgKzE0LDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KICNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfaW9jdGxfZmxhZ3Nfc2V0LCBpbnRlcmZhY2VfYWxsKQorCiAjaWZkZWYgSEFWRV9ORVRfSUZfSAogI2luY2x1ZGUgPG5ldC9pZi5oPgogI2VuZGlmCkBAIC0xMDcsNyArMTEwLDcgQEAKICAgICAgICAgU05NUF9GUkVFKGlmZW50cnktPnBhZGRyKTsKICAgICB9CiAgICAgaWYoTlVMTCA9PSBpZmVudHJ5LT5wYWRkcikgCi0gICAgICAgIGlmZW50cnktPnBhZGRyID0gbWFsbG9jKElGSFdBRERSTEVOKTsKKyAgICAgICAgaWZlbnRyeS0+cGFkZHIgPSAoY2hhciopbWFsbG9jKElGSFdBRERSTEVOKTsKIAogICAgIGlmKE5VTEwgPT0gaWZlbnRyeS0+cGFkZHIpIHsKICAgICAgICAgICAgIHJjID0gLTQ7CkBAIC0yODIsNiArMjg1LDcgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfSU9DVExfRkxBR1NfU0VUCiAvKioKICAqIGludGVyZmFjZSBlbnRyeSBmbGFncyBpb2N0bCB3cmFwcGVyCiAgKgpAQCAtMzQ5LDYgKzM1Myw3IEBACiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9JT0NUTF9GTEFHU19TRVQgKi8KICNlbmRpZiAvKiBTSU9DR0lGRkxBR1MgKi8KIAogI2lmZGVmIFNJT0NHSUZNVFUKQEAgLTQ3OSw4ICs0ODQsNyBAQAogICAgICAgICAgICAgaWYgKE5VTEwgIT0gcHRyKQogICAgICAgICAgICAgICAgICpwdHIgPSAwOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaWZfaW5kZXggIT0KLSAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQoc2QsIGlmcnAtPmlmcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIChpZl9pbmRleCAhPSAoaW50KW5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldChzZCwgaWZycC0+aWZyX25hbWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYwppbmRleCA5NGJkOTgzLi5mMTk2ZmM4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jCkBAIC00LDE0ICs0LDU2IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZkX2V2ZW50X21hbmFnZXIpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkZWxldGVfcHJlZml4X2luZm8pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjcmVhdGVfcHJlZml4X2luZm8pCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9pb2N0bF9mbGFnc19zZXQpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUyAqLworCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CitzdGF0aWMgc3RydWN0IHBjaV9hY2Nlc3MgKnBjaV9hY2Nlc3M7CisKKy8qIEF2b2lkIGxldHRpbmcgbGlicGNpIGNhbGwgZXhpdCgxKSB3aGVuIG5vIFBDSSBidXMgaXMgYXZhaWxhYmxlLiAqLworc3RhdGljIGludCBkb19sb25nam1wID0wOworc3RhdGljIGptcF9idWYgZXJyX2J1ZjsKK3N0YXRpYyB2b2lkCituZXRzbm1wX3BjaV9lcnJvcihjaGFyICptc2csIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgY2hhciAqYnVmOworICAgIGludCBidWZsZW47CisKKyAgICB2YV9zdGFydChhcmdzLCBtc2cpOworICAgIGJ1ZmxlbiA9IHN0cmxlbigicGNpbGliOiAiKStzdHJsZW4obXNnKSsyOworICAgIGJ1ZiA9IG1hbGxvYyhidWZsZW4pOworICAgIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAicGNpbGliOiAlc1xuIiwgbXNnKTsKKyAgICBzbm1wX3Zsb2coTE9HX0VSUiwgYnVmLCBhcmdzKTsKKyAgICBmcmVlKGJ1Zik7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIGlmIChkb19sb25nam1wKQorCWxvbmdqbXAoZXJyX2J1ZiwgMSk7CisgICAgZWxzZQorCWV4aXQoMSk7Cit9CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpZm5kZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKIHR5cGVkZWYgX191NjQgdTY0OyAgICAgICAgIC8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwogdHlwZWRlZiBfX3UzMiB1MzI7ICAgICAgICAgLyogZGl0dG8gKi8KIHR5cGVkZWYgX191MTYgdTE2OyAgICAgICAgIC8qIGRpdHRvICovCiB0eXBlZGVmIF9fdTggdTg7ICAgICAgICAgICAvKiBkaXR0byAqLworI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjZW5kaWYgLyogSEFWRV9MSU5VWF9FVEhUT09MX0ggKi8KIApAQCAtMjksMTggKzcxLDM3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CiAjaW5jbHVkZSAiaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJpbnRlcmZhY2VfaW9jdGwuaCIKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCiAjaWZuZGVmIElGX05BTUVTSVpFCiAjZGVmaW5lIElGX05BTUVTSVpFIDE2CiAjZW5kaWYKIAorI2lmbmRlZiBTSU9DR01JSVBIWQorI2RlZmluZSBTSU9DR01JSVBIWSAweDg5NDcKKyNlbmRpZgorCisjaWZuZGVmIFNJT0NHTUlJUkVHCisjZGVmaW5lIFNJT0NHTUlJUkVHIDB4ODk0OAorI2VuZGlmCisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2lmZGVmIFJUTUdSUF9JUFY2X1BSRUZJWAorI2RlZmluZSBTVVBQT1JUX1BSRUZJWF9GTEFHUyAxCisjZW5kaWYgIC8qIFJUTUdSUF9JUFY2X1BSRUZJWCAqLworI2VuZGlmICAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCisjZW5kaWYgIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KIHVuc2lnbmVkIGxvbmcgbG9uZwogbmV0c25tcF9saW51eF9pbnRlcmZhY2VfZ2V0X2lmX3NwZWVkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRzcGVlZCk7CkBAIC02MCw2ICsxMjEsMTYgQEAKICNkZWZpbmUgUFJPQ19TWVNfTkVUX0lQVnhfQkFTRV9SRUFDSEFCTEVfVElNRSAiL3Byb2Mvc3lzL25ldC9pcHYlZC9uZWlnaC8lcy9iYXNlX3JlYWNoYWJsZV90aW1lIgogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Nfc3lzX2Jhc2VyZWFjaGFibGVfdGltZTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBiYXNlcmVhY2hhYmxlX3RpbWVfbXMgPSAwOworI2lmZGVmIFNVUFBPUlRfUFJFRklYX0ZMQUdTCitwcmVmaXhfY2J4ICpwcmVmaXhfaGVhZF9saXN0ID0gTlVMTDsKK25ldHNubXBfcHJlZml4X2xpc3Rlbl9pbmZvIGxpc3RfaW5mbzsKKyNkZWZpbmUgSUZfUFJFRklYX09OTElOSyAgICAgICAgMHgwMQorI2RlZmluZSBJRl9QUkVGSVhfQVVUT0NPTkYgICAgICAweDAyCisgCitpbnQgbmV0c25tcF9wcmVmaXhfbGlzdGVuKHZvaWQpOworI2VuZGlmCisKKwogdm9pZAogbmV0c25tcF9hcmNoX2ludGVyZmFjZV9pbml0KHZvaWQpCiB7CkBAIC05Miw2ICsxNjMsMzEgQEAKICAgICBlbHNlIHsKICAgICAgICAgcHJvY19zeXNfYmFzZXJlYWNoYWJsZV90aW1lID0gUFJPQ19TWVNfTkVUX0lQVnhfQkFTRV9SRUFDSEFCTEVfVElNRTsKICAgICB9CisKKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUworICAgIGxpc3RfaW5mby5saXN0X2hlYWQgPSAmcHJlZml4X2hlYWRfbGlzdDsKKyAgICBuZXRzbm1wX3ByZWZpeF9saXN0ZW4oKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKyAgICBwY2lfYWNjZXNzID0gcGNpX2FsbG9jKCk7CisgICAgaWYgKCFwY2lfYWNjZXNzKSB7CisJc25tcF9sb2coTE9HX0VSUiwgInBjaWxpYjogcGNpX2FsbG9jIGZhaWxlZFxuIik7CisJcmV0dXJuOworICAgIH0KKworICAgIHBjaV9hY2Nlc3MtPmVycm9yID0gbmV0c25tcF9wY2lfZXJyb3I7CisKKyAgICBkb19sb25nam1wID0gMTsKKyAgICBpZiAoc2V0am1wKGVycl9idWYpKSB7CisgICAgICAgIHBjaV9jbGVhbnVwKHBjaV9hY2Nlc3MpOworCXNubXBfbG9nKExPR19FUlIsICJwY2lsaWI6IHBjaV9pbml0IGZhaWxlZFxuIik7CisgICAgICAgIHBjaV9hY2Nlc3MgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChwY2lfYWNjZXNzKQorCXBjaV9pbml0KHBjaV9hY2Nlc3MpOworICAgIGRvX2xvbmdqbXAgPSAwOworI2VuZGlmCiB9CiAKIC8qCkBAIC0xMjgsMTQgKzIyNCw2IEBACiAKICAgICAqZmxhZ3MgJj0gfk5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JUFY2OwogCi0jaWZuZGVmIFNJT0NHTUlJUEhZCi0jZGVmaW5lIFNJT0NHTUlJUEhZIDB4ODk0NwotI2VuZGlmCi0KLSNpZm5kZWYgU0lPQ0dNSUlSRUcKLSNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4Ci0jZW5kaWYKLQogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKICAgICAvKgogICAgICAqIGdldCBpcHY2IGFkZHJlc3NlcwpAQCAtMjI5LDYgKzMxNyw2OSBAQAogICAgIH0KIH0KIAorI2lmZGVmIEhBVkVfUENJX0xPT0tVUF9OQU1FCisKKy8qIEdldCB2YWx1ZSBmcm9tIHN5c2ZzIGZpbGUgKi8KK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2lkKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0ICppZCkKK3sKKyAgICBGSUxFICpmaW47CisgICAgaW50IG47CisKKyAgICBpZiAoIShmaW4gPSBmb3BlbihwYXRoLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgcGF0aCkpOworCXJldHVybiAwOworICAgIH0KKworICAgIG4gPSBmc2NhbmYoZmluLCAiJWh4IiwgaWQpOworICAgIGZjbG9zZShmaW4pOworCisgICAgcmV0dXJuIG4gPT0gMTsKK30KKworLyogR2V0IGludGVyZmFjZSBkZXNjcmlwdGlvbiBmb3IgUENJIGRldmljZQorICogYnkgdXNpbmcgc3lzZnMgdG8gZmluZCB2ZW5kb3IgYW5kIGRldmljZQorICogdGhlbiBsb29rdXAgbmFtZSAoLWxwY2kpCisgKgorICogRm9yIHNvZnR3YXJlIGludGVyZmFjZXMgdGhlcmUgaXMgbm8gUENJIGluZm9ybWF0aW9uCisgKiBzbyBkZXNjcmlwdGlvbiB3aWxsIG5vdCBiZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkCitfYXJjaF9pbnRlcmZhY2VfZGVzY3JpcHRpb25fZ2V0KG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBjb25zdCBjaGFyICpkZXNjcjsKKyAgICBjaGFyIGJ1ZlsyNTZdOworICAgIHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwgZGV2aWNlX2lkOworCisgICAgaWYgKCFwY2lfYWNjZXNzKQorCXJldHVybjsKKworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJICAgICAiL3N5cy9jbGFzcy9uZXQvJXMvZGV2aWNlL3ZlbmRvciIsIGVudHJ5LT5uYW1lKTsKKworICAgIGlmICghc3lzZnNfZ2V0X2lkKGJ1ZiwgJnZlbmRvcl9pZCkpCisJcmV0dXJuOworCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkgICAgICIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2UvZGV2aWNlIiwgZW50cnktPm5hbWUpOworCisgICAgaWYgKCFzeXNmc19nZXRfaWQoYnVmLCAmZGV2aWNlX2lkKSkKKwlyZXR1cm47CisKKyAgICBkZXNjciA9IHBjaV9sb29rdXBfbmFtZShwY2lfYWNjZXNzLCBidWYsIHNpemVvZihidWYpLAorCQkJICAgIFBDSV9MT09LVVBfVkVORE9SIHwgUENJX0xPT0tVUF9ERVZJQ0UsCisJCQkgICAgdmVuZG9yX2lkLCBkZXZpY2VfaWQsIDAsIDApOworICAgIGlmIChkZXNjcikgeworCWZyZWUoZW50cnktPmRlc2NyKTsKKwllbnRyeS0+ZGVzY3IgPSBzdHJkdXAoZGVzY3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBwY2lfbG9va3VwX25hbWUgdmVuZG9yPSUjaHggZGV2aWNlPSUjaHhcbiIsCisJCSAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCkpOworICAgIH0KK30KKyNlbmRpZgorCiAKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CiAvKioKQEAgLTQwMiwxNiArNTUzLDE1IEBACiAgICAgICogc3VidHJhY3Qgb3V0IG11bHRpY2FzdCBwYWNrZXRzIGZyb20gcmVjX3BrdCBiZWZvcmUKICAgICAgKiB3ZSBzdG9yZSBpdCBhcyB1bmljYXN0IGNvdW50ZXIuCiAgICAgICovCi0gICAgcmVjX3BrdCAtPSByZWNfbWNhc3Q7Ci0KKyAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfQ0FMQ1VMQVRFX1VDQVNUOwogICAgIGVudHJ5LT5zdGF0cy5pYnl0ZXMubG93ID0gcmVjX29jdCAmIDB4ZmZmZmZmZmY7Ci0gICAgZW50cnktPnN0YXRzLml1Y2FzdC5sb3cgPSByZWNfcGt0ICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuaWFsbC5sb3cgPSByZWNfcGt0ICYgMHhmZmZmZmZmZjsKICAgICBlbnRyeS0+c3RhdHMuaW1jYXN0LmxvdyA9IHJlY19tY2FzdCAmIDB4ZmZmZmZmZmY7CiAgICAgZW50cnktPnN0YXRzLm9ieXRlcy5sb3cgPSBzbmRfb2N0ICYgMHhmZmZmZmZmZjsKICAgICBlbnRyeS0+c3RhdHMub3VjYXN0LmxvdyA9IHNuZF9wa3QgJiAweGZmZmZmZmZmOwogI2lmZGVmIFNDTnVNQVggICAvKiBYWFggLSBzaG91bGQgYmUgZmxhZyBmb3IgNjQtYml0IHZhcmlhYmxlcyAqLwogICAgIGVudHJ5LT5zdGF0cy5pYnl0ZXMuaGlnaCA9IHJlY19vY3QgPj4gMzI7Ci0gICAgZW50cnktPnN0YXRzLml1Y2FzdC5oaWdoID0gcmVjX3BrdCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuaWFsbC5oaWdoID0gcmVjX3BrdCA+PiAzMjsKICAgICBlbnRyeS0+c3RhdHMuaW1jYXN0LmhpZ2ggPSByZWNfbWNhc3QgPj4gMzI7CiAgICAgZW50cnktPnN0YXRzLm9ieXRlcy5oaWdoID0gc25kX29jdCA+PiAzMjsKICAgICBlbnRyeS0+c3RhdHMub3VjYXN0LmhpZ2ggPSBzbmRfcGt0ID4+IDMyOwpAQCAtNDU1LDcgKzYwNSw3IEBACiAgICAgbmV0c25tcF9jb250YWluZXIgKmFkZHJfY29udGFpbmVyOwogI2VuZGlmCiAKLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAlcClcbiIsCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLCAibG9hZCAoZmxhZ3MgJXgpXG4iLAogICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKIAogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewpAQCAtNDY2LDcgKzYxNiw3IEBACiAgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L2RldiIsICJyIikpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIEludGVyZmFjZSBUYWJsZSAobGludXgxKVxuIikpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2RldiAuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvZGV2IC4uLlxuIikpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCkBAIC01ODcsOSArNzM3LDkgQEAKICAgICAgICAgfQogICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgPSBmbGFnczsgLyogaW5pdGlhbCBmbGFnczsgd2UnbGwgc2V0IG1vcmUgbGF0ZXIgKi8KIAotICAgICAgICAvKgotICAgICAgICAgKiB4eHgtcmtzOiBnZXQgZGVzY3IgYnkgbGlua2luZyBtZW0gZnJvbSAvcHJvYy9wY2kgYW5kIC9wcm9jL2lvbWVtCi0gICAgICAgICAqLworI2lmZGVmIEhBVkVfUENJX0xPT0tVUF9OQU1FCisJX2FyY2hfaW50ZXJmYWNlX2Rlc2NyaXB0aW9uX2dldChlbnRyeSk7CisjZW5kaWYKIAogCiAgICAgICAgIC8qCkBAIC02MjIsNyArNzcyLDcgQEAKICAgICAgICAgICAgICAgICB7SUFOQUlGVFlQRV9CQVNJQ0lTRE4sICJpcHBwIn0sCiAgICAgICAgICAgICAgICAge0lBTkFJRlRZUEVfUFJPUFZJUlRVQUwsICJib25kIn0sIC8qIEJvbmRpbmcgZHJpdmVyIGZpbmQgZmFzdGVzdCBzbGF2ZSAqLwogICAgICAgICAgICAgICAgIHtJQU5BSUZUWVBFX1BST1BWSVJUVUFMLCAidmFkIn0sICAvKiBBTlMgZHJpdmVyIC0gP3NwZWVkPyAqLwotICAgICAgICAgICAgICAgIHswLCAwfSAgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiBsaXN0ICovCisgICAgICAgICAgICAgICAgezAsIE5VTEx9ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGxpc3QgKi8KICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBsZW47CkBAIC02MzksNiArNzg5LDM2IEBACiAgICAgICAgICAgICAgICAgZW50cnktPnR5cGUgPSBJQU5BSUZUWVBFX09USEVSOwogICAgICAgICB9CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogaW50ZXJmYWNlIGlkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJhc2VkIG9uIHBoeXNhZGRyIGFuZCB0eXBlCisgICAgICAgICAqLworICAgICAgICBzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisgICAgICAgIGNhc2UgSUFOQUlGVFlQRV9FVEhFUk5FVENTTUFDRDoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0VUSEVSTkVUM01CSVQ6CisgICAgICAgIGNhc2UgSUFOQUlGVFlQRV9GQVNURVRIRVI6CisgICAgICAgIGNhc2UgSUFOQUlGVFlQRV9GQVNURVRIRVJGWDoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0dJR0FCSVRFVEhFUk5FVDoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0ZEREk6CisgICAgICAgIGNhc2UgSUFOQUlGVFlQRV9JU084ODAyNVRPS0VOUklORzoKKyAgICAgICAgICAgIGlmIChOVUxMICE9IGVudHJ5LT5wYWRkciAmJiBFVEhfQUxFTiAhPSBlbnRyeS0+cGFkZHJfbGVuKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRfbGVuID0gZW50cnktPnBhZGRyX2xlbiArIDI7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPnY2X2lmX2lkLCBlbnRyeS0+cGFkZHIsIDMpOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT52Nl9pZl9pZCArIDUsIGVudHJ5LT5wYWRkciArIDMsIDMpOworICAgICAgICAgICAgZW50cnktPnY2X2lmX2lkWzBdIF49IDI7CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRbM10gPSAweEZGOworICAgICAgICAgICAgZW50cnktPnY2X2lmX2lkWzRdID0gMHhGRTsKKworICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9JRklEOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX1NPRlRXQVJFTE9PUEJBQ0s6CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRfbGVuID0gMDsKKyAgICAgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfVjZfSUZJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgaWYgKElBTkFJRlRZUEVfRVRIRVJORVRDU01BQ0QgPT0gZW50cnktPnR5cGUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzcGVlZDsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0c3BlZWQgPSBOT01JTkFMX0xJTktfU1BFRUQ7CkBAIC03MjMsNiArOTAzLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMKIGludAogbmV0c25tcF9hcmNoX3NldF9hZG1pbl9zdGF0dXMobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKiBlbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZkFkbWluU3RhdHVzX3ZhbCkKQEAgLTczOSw2ICs5MjAsNyBAQAogICAgIHJldHVybiBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW9jdGxfZmxhZ3Nfc2V0KC0xLCBlbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRkZfVVAsIGFuZF9jb21wbGVtZW50KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KIAogI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICiAvKioKQEAgLTg3OCwzICsxMDYwLDE5MCBAQAogICAgIH0KICAgICByZXR1cm4gcmV0c3BlZWQ7CiB9CisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK3ZvaWQgbmV0c25tcF9wcmVmaXhfcHJvY2VzcyhpbnQgZmQsIHZvaWQgKmRhdGEpOworCisvKiBPcGVuIG5ldGxpbmsgc29ja2V0IHRvIHdhdGNoIG5ldyBpcHY2IGFkZHJlc3NlcyBhbmQgcHJlZml4ZXMuICovCitpbnQgbmV0c25tcF9wcmVmaXhfbGlzdGVuKCkKK3sKKyAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIHN0cnVjdCBubG1zZ2hkciBuOworICAgICAgICAgICAgICAgIHN0cnVjdCBpZmluZm9tc2cgcjsKKyAgICAgICAgICAgICAgICBjaGFyICAgYnVmWzEwMjRdOworICAgIH0gcmVxOworCisgICAgc3RydWN0IHJ0YXR0ciAgICAgICpydGE7CisgICAgaW50ICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgbG9jYWxhZGRyaW5mbzsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgZ3JvdXBzID0gMDsKKworICAgIGludCBmZCA9IHNvY2tldChQRl9ORVRMSU5LLCBTT0NLX0RHUkFNLCBORVRMSU5LX1JPVVRFKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IENhbm5vdCBjcmVhdGUgc29ja2V0LlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoJmxvY2FsYWRkcmluZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKTsKKworICAgIGdyb3VwcyB8PSBSVE1HUlBfSVBWNl9JRkFERFI7CisgICAgZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X1BSRUZJWDsKKyAgICBsb2NhbGFkZHJpbmZvLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgICAgbG9jYWxhZGRyaW5mby5ubF9ncm91cHMgPSBncm91cHM7CisKKyAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciopJmxvY2FsYWRkcmluZm8sIHNpemVvZihsb2NhbGFkZHJpbmZvKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3RlbjogQmluZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgICByZXEubi5ubG1zZ19sZW4gPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBydGdlbm1zZykpOworICAgIHJlcS5uLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX1JPT1Q7CisgICAgcmVxLm4ubmxtc2dfdHlwZSA9IFJUTV9HRVRMSU5LOworICAgIHJlcS5yLmlmaV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSgoKGNoYXIgKikmcmVxKSArIE5MTVNHX0FMSUdOKHJlcS5uLm5sbXNnX2xlbikpOworICAgIHJ0YS0+cnRhX2xlbiA9IFJUQV9MRU5HVEgoMTYpOworCisgICAgc3RhdHVzID0gc2VuZChmZCwgJnJlcSwgcmVxLm4ubmxtc2dfbGVuLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IHNlbmQgZmFpbGVkXG4iKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHJlZ2lzdGVyX3JlYWRmZChmZCwgbmV0c25tcF9wcmVmaXhfcHJvY2VzcywgTlVMTCkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IGVycm9yIHJlZ2lzdGVyaW5nIG5ldGxpbmsgc29ja2V0XG4iKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBQcm9jZXNzIG9uZSBpbmNvbWluZyBuZXRsaW5rIHBhY2tldHMuCisgKiBSVE1fTkVXQUREUiBhbmQgUlRNX05FV1BSRUZJWCB1c3VhbGx5IGFycml2ZSBpbiBzZXBhcmF0ZSBwYWNrZXRzCisgKiAtPiBpbmZvcm1hdGlvbiBmcm9tIHRoZXNlIHBhY2tldHMgbXVzdCBiZSBzdG9yZWQgbG9jYWxseSBhbmQKKyAqIG5ldyBwcmVmaXggaXMgYWRkZWQgd2hlbiBpbmZvcm1hdGlvbiBmcm9tIGJvdGggcGFja2V0cyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZCBuZXRzbm1wX3ByZWZpeF9wcm9jZXNzKGludCBmZCwgdm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIGNoYXIgICAgICAgICAgICAgICBidWZbMTYzODRdOworICAgIHN0cnVjdCBubG1zZ2hkciAgICAqbmxtcDsKKyAgICBzdHJ1Y3QgcnRhdHRyICAgICAgKnJ0YXRwOworICAgIHN0cnVjdCBpZmFkZHJtc2cgICAqaWZhOworICAgIHN0cnVjdCBwcmVmaXhtc2cgICAqcHJlZml4OworICAgIHN0cnVjdCBpbjZfYWRkciAgICAqaW42cDsKKworICAgIC8qIHRoZXNlIHZhbHVlcyBtdXN0IHBlcnNpc3QgYmV0d2VlbiBjYWxscyAqLworICAgIHN0YXRpYyBjaGFyICAgICAgICAgICAgICAgaW42cEFkZHJbNDBdOworICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgaGF2ZV9hZGRyID0gMCxoYXZlX3ByZWZpeCA9IDA7CisgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICBvbmxpbmsgPSAyLGF1dG9ub21vdXMgPSAyOyAvKkFzc3VtZSBhcyBmYWxzZSovCisKKyAgICBpbnQgICAgICAgICAgICAgICAgaXJldDsKKyAgICBwcmVmaXhfY2J4ICAgICAgICAgKm5ldzsKKyAgICBpbnQgICAgICAgICAgICAgICAgbGVuLCByZXFfbGVuLCBsZW5ndGg7IAorCisgICAgc3RhdHVzID0gcmVjdihmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IFJlY2VpdmUgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihzdGF0dXMgPT0gMCl7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJFbmQgb2YgRmlsZVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yKG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOyBzdGF0dXMgPiBzaXplb2YoKm5sbXApOyl7CisgICAgICAgIGxlbiA9IG5sbXAtPm5sbXNnX2xlbjsKKyAgICAgICAgcmVxX2xlbiA9IGxlbiAtIHNpemVvZigqbmxtcCk7CisKKyAgICAgICAgaWYgKHJlcV9sZW4gPCAwIHx8IGxlbiA+IHN0YXR1cykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9wcmVmaXhfbGlzdGVuOiBFcnJvciBpbiBsZW5ndGguXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghTkxNU0dfT0sobmxtcCwgc3RhdHVzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIk5MTVNHIG5vdCBPS1xuIikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmxtcC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXQUREUiB8fCBubG1wLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERSKSB7CisgICAgICAgICAgICBpZmEgPSBOTE1TR19EQVRBKG5sbXApOworICAgICAgICAgICAgbGVuZ3RoID0gbmxtcC0+bmxtc2dfbGVuOworICAgICAgICAgICAgbGVuZ3RoIC09IE5MTVNHX0xFTkdUSChzaXplb2YoKmlmYSkpOworCisgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJ3cm9uZyBubG1zZyBsZW5ndGggJWRcbiIsIGxlbmd0aCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZighaWZhLT5pZmFfZmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBydGF0cCA9IElGQV9SVEEoaWZhKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoUlRBX09LKHJ0YXRwLCBsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChydGF0cC0+cnRhX3R5cGUgPT0gSUZBX0FERFJFU1MpeworICAgICAgICAgICAgICAgICAgICAgICAgaW42cCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgUlRBX0RBVEEocnRhdHApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYobmxtcC0+bmxtc2dfdHlwZSA9PSBSVE1fREVMQUREUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGluNnBBZGRyLCBzaXplb2YoaW42cEFkZHIpLCAiJTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCUwNHgiLCBOSVA2KCppbjZwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9hZGRyID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGluNnBBZGRyLCBzaXplb2YoaW42cEFkZHIpLCAiJTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCUwNHgiLCBOSVA2KCppbjZwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9hZGRyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydGF0cCA9IFJUQV9ORVhUKHJ0YXRwLGxlbmd0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYobmxtcC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXUFJFRklYKSB7CisgICAgICAgICAgICBwcmVmaXggPSBOTE1TR19EQVRBKG5sbXApOworICAgICAgICAgICAgbGVuZ3RoID0gbmxtcC0+bmxtc2dfbGVuOworICAgICAgICAgICAgbGVuZ3RoIC09IE5MTVNHX0xFTkdUSChzaXplb2YoKnByZWZpeCkpOworCisgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJ3cm9uZyBubG1zZyBsZW5ndGggJWRcbiIsIGxlbmd0aCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGF2ZV9wcmVmaXggPSAxOworICAgICAgICAgICAgaWYgKHByZWZpeC0+cHJlZml4X2ZsYWdzICYgSUZfUFJFRklYX09OTElOSykgeworICAgICAgICAgICAgICAgIG9ubGluayA9IDE7IAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZWZpeC0+cHJlZml4X2ZsYWdzICYgSUZfUFJFRklYX0FVVE9DT05GKSB7CisgICAgICAgICAgICAgICAgYXV0b25vbW91cyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzIC09IE5MTVNHX0FMSUdOKGxlbik7CisgICAgICAgIG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyKikoKGNoYXIqKW5sbXAgKyBOTE1TR19BTElHTihsZW4pKTsKKyAgICB9CisKKyAgICBpZigoaGF2ZV9hZGRyID09IDEpICYmIChoYXZlX3ByZWZpeCA9PSAxKSl7CisgICAgICAgIGlmKCEobmV3ID0gbmV0X3NubXBfY3JlYXRlX3ByZWZpeF9pbmZvIChvbmxpbmssIGF1dG9ub21vdXMsIGluNnBBZGRyKSkpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpwcmVmaXgiLCAiVW5hYmxlIHRvIGNyZWF0ZSBwcmVmaXggaW5mb1xuIikpOworICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgaXJldCA9IG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8gKGxpc3RfaW5mby5saXN0X2hlYWQsIG5ldywgMCk7CisgICAgICAgICAgICBpZihpcmV0IDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gYWRkL3VwZGF0ZSBwcmVmaXggaW5mb1xuIikpOworICAgICAgICAgICAgICAgIGZyZWUobmV3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGlyZXQgPT0gMikgLypPbmx5IHdoZW4gZW5ydHkgYWxyZWFkeSBleGlzdHMgYW5kIHdlIGFyZSBvbmx5IHVwZGF0aW5nKi8KKyAgICAgICAgICAgICAgICBmcmVlKG5ldyk7CisgICAgICAgIH0KKyAgICAgICAgaGF2ZV9hZGRyID0gaGF2ZV9wcmVmaXggPSAwOworICAgICAgICBvbmxpbmsgPSBhdXRvbm9tb3VzID0gMjsgLypTZXQgdG8gZGVmYXVsdHMgYWdhaW4qLworICAgIH0gZWxzZSBpZiAoaGF2ZV9hZGRyID09IC0xKSB7CisgICAgICAgIGlyZXQgPSBuZXRfc25tcF9kZWxldGVfcHJlZml4X2luZm8gKGxpc3RfaW5mby5saXN0X2hlYWQsIGluNnBBZGRyKTsKKyAgICAgICAgaWYoaXJldCA8IDApCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpwcmVmaXgiLCAiVW5hYmxlIHRvIGRlbGV0ZSB0aGUgcHJlZml4IGluZm9cbiIpKTsKKyAgICAgICAgICAgIGlmKCFpcmV0KQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gZmluZCB0aGUgbm9kZSB0byBkZWxldGVcbiIpKTsKKyAgICAgICAgICAgIGhhdmVfYWRkciA9IDA7CisgICAgfQorfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0MGRjNgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9hcmNoX3NldF9hZG1pbl9zdGF0dXMsIGludGVyZmFjZV9hbGwpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2Vsc2UKKyNlcnJvciAibGludXggc2hvdWxkIGhhdmUgc3lzL2lvY3RsIGhlYWRlciIKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CisjaW5jbHVkZSAiaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKworI2RlZmluZSBzdGFydHRpbWUgKCooY29uc3Qgc3RydWN0IHRpbWV2YWwqKW5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpKQorCitpbnQKK25ldHNubXBfb3BlbmJzZF9pbnRlcmZhY2VfZ2V0X2lmX3NwZWVkKGNoYXIgKm5hbWUsIHVfaW50ICpzcGVlZCwgdV9pbnQgKnNwZWVkX2hpZ2gpOworCit2b2lkCituZXRzbm1wX2FyY2hfaW50ZXJmYWNlX2luaXQodm9pZCkKK3sKKyAgICAvKgorICAgICAqIG5vdGhpbmcgdG8gZG8KKyAgICAgKi8KK30KKworLyoKKyAqIGZpbmQgdGhlIGlmSW5kZXggZm9yIGFuIGludGVyZmFjZSBuYW1lCisgKgorICogQHJldHZhbCAwIDogbm8gaW5kZXggZm91bmQKKyAqIEByZXR2YWwgPjA6IGlmSW5kZXggZm9yIGludGVyZmFjZQorICovCitvaWQKK25ldHNubXBfYXJjaF9pbnRlcmZhY2VfaW5kZXhfZmluZChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJldHVybiBpZl9uYW1ldG9pbmRleChuYW1lKTsKK30KKworLyogc2FfbGVuIHJvdW5kdXAgbWFjcm8uICovCisjZGVmaW5lIFJPVU5EVVAoYSkgXAorICAoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorCisvKgorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBnZXQgaW50ZXJmYWNlIGluZm8KKyAqIEByZXR2YWwgLTMgY291bGQgbm90IGNyZWF0ZSBlbnRyeSAocHJvYmFibHkgbWFsbG9jKQorICovCitpbnQKK25ldHNubXBfYXJjaF9pbnRlcmZhY2VfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHVfY2hhciAqaWZfbGlzdCA9IE5VTEwsICpjcDsKKyAgICBzaXplX3QgaWZfbGlzdF9zaXplID0gMDsKKyAgICBzdHJ1Y3QgaWZfbXNnaGRyICppZnA7CisgICAgaW50IHN5c2N0bF9vaWRbXSA9IHsgQ1RMX05FVCwgUEZfUk9VVEUsIDAsIDAsIE5FVF9SVF9JRkxJU1QsIDAgfTsKKyAgICBzdHJ1Y3QgaWZhX21zZ2hkciAqaWZhOworICAgIHN0cnVjdCBzb2NrYWRkciAqYTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKmFkbDsKKyAgICBpbnQgYW1hc2s7CisgICAgY2hhciAqaWZfbmFtZTsKKyAgICBpbnQgZmxhZ3M7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgImxvYWQgKGZsYWdzICVwKVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBpbnRlcmZhY2VcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChzeXNjdGxfb2lkLCBzaXplb2Yoc3lzY3RsX29pZCkgLyBzaXplb2YoaW50KSwgMCwgJmlmX2xpc3Rfc2l6ZSwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaW50ZXJmYWNlIGluZm8gKHNpemUpXG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIGlmX2xpc3QgPSAodV9jaGFyKiltYWxsb2MoaWZfbGlzdF9zaXplKTsKKyAgICBpZiAoaWZfbGlzdCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcmZhY2UgaW5mbyAoJXUgYnl0ZXMpXG4iLCBpZl9saXN0X3NpemUpOworICAgICAgICByZXR1cm4gLTM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGVkICV1IGJ5dGVzIGZvciBpZl9saXN0XG4iLCBpZl9saXN0X3NpemUpKTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKHN5c2N0bF9vaWQsIHNpemVvZihzeXNjdGxfb2lkKSAvIHNpemVvZihpbnQpLCBpZl9saXN0LCAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mb1xuIik7CisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICAvKiAxc3QgcGFzczogY3JlYXRlIGludGVyZmFjZSBlbnRyaWVzICovCisgICAgZm9yIChjcCA9IGlmX2xpc3Q7IGNwIDwgaWZfbGlzdCArIGlmX2xpc3Rfc2l6ZTsgY3AgKz0gaWZwLT5pZm1fbXNnbGVuKSB7CisKKyAgICAgICAgaWZwID0gKHN0cnVjdCBpZl9tc2doZHIgKikgY3A7CisgICAgICAgIGlmX25hbWUgPSBOVUxMOworICAgICAgICBmbGFncyA9IDA7CisgICAgICAgIGFkbCA9IE5VTEw7CisKKyAgICAgICAgaWYgKGlmcC0+aWZtX3R5cGUgIT0gUlRNX0lGSU5GTykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChpZnAtPmlmbV9hZGRycyAmIFJUQV9JRlApIHsKKyAgICAgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopIChpZnAgKyAxKTsKKyAgICAgICAgICAgIC8qIGlmX21zZ2hkciBpcyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBzb2NrYWRkcnMsIG9mIHdoaWNoIHdlIG5lZWQgb25seSBSVEFfSUZQICovCisgICAgICAgICAgICAvKiBtb3N0IG9mIHRoZSB0aW1lIFJUQV9JRlAgaXMgdGhlIGZpcnN0IGFkZHJlc3Mgd2UgZ2V0LCBoZW5jZSB0aGUgc2hvcnRjdXQgKi8KKyAgICAgICAgICAgIGlmICgoaWZwLT5pZm1fYWRkcnMgJiAoflJUQV9JRlAgLSAxKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8qIHNraXAgYWxsIGFkZHJlc3NlcyB1cCB0byBSVEFfSUZQLiAqLworICAgICAgICAgICAgICAgIGZvciAoYW1hc2sgPSAoUlRBX0lGUCA+PiAxKTsgYW1hc2sgIT0gMDsgYW1hc2sgPj49IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlmcC0+aWZtX2FkZHJzICYgYW1hc2spIHsgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCAoKGNoYXIgKikgYSkgKyBST1VORFVQKGEtPnNhX2xlbikgKTsgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikgYTsKKyAgICAgICAgICAgIGlmX25hbWUgPSAoY2hhciAqKSBhZGwtPnNkbF9kYXRhOworICAgICAgICAgICAgaWZfbmFtZVthZGwtPnNkbF9ubGVuXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoaWZwLT5pZm1fYWRkcnMgJiBSVEFfSUZQKSB8fCBpZl9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpZm1faW5kZXggJXU6IG5vIGludGVyZmFjZSBuYW1lIGluIG1lc3NhZ2UsIHNraXBwaW5nXG4iLCBpZnAtPmlmbV9pbmRleCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2NyZWF0ZShpZl9uYW1lLCBpZnAtPmlmbV9pbmRleCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9jb250YWluZXJfZnJlZShjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfSU5URVJGQUNFX0ZSRUVfTk9GTEFHUyk7CisgICAgICAgICAgICBmcmVlKGlmX2xpc3QpOworICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisKKyAgICAgICAgLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgaWYgKGFkbCAhPSBOVUxMICYmIGFkbC0+c2RsX2FsZW4gPiAwKSB7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHJfbGVuID0gYWRsLT5zZGxfYWxlbjsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoZW50cnktPnBhZGRyX2xlbik7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPnBhZGRyLCBhZGwtPnNkbF9kYXRhICsgYWRsLT5zZGxfbmxlbiwgYWRsLT5zZGxfYWxlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHBhZGRyX2xlbj0lZCwgZW50cnktPnBhZGRyPSV4OiV4OiV4OiV4OiV4OiV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWZfbmFtZSwgZW50cnktPnBhZGRyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWRkclswXSwgZW50cnktPnBhZGRyWzFdLCBlbnRyeS0+cGFkZHJbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGFkZHJbM10sIGVudHJ5LT5wYWRkcls0XSwgZW50cnktPnBhZGRyWzVdKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSAoY2hhciopbWFsbG9jKDYpOworICAgICAgICAgICAgZW50cnktPnBhZGRyX2xlbiA9IDY7CisgICAgICAgICAgICBtZW1zZXQoZW50cnktPnBhZGRyLCAwLCA2KTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LT5tdHUgPSBpZnAtPmlmbV9kYXRhLmlmaV9tdHU7CisgICAgICAgIGVudHJ5LT50eXBlID0gaWZwLT5pZm1fZGF0YS5pZmlfdHlwZTsKKworCisgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfSUZfRkxBR1M7CisgICAgICAgIGVudHJ5LT5vc19mbGFncyA9IGlmcC0+aWZtX2ZsYWdzOworICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoaWZwLT5pZm1fZmxhZ3MgJiBJRkZfVVApIHsKKyAgICAgICAgICAgIGVudHJ5LT5hZG1pbl9zdGF0dXMgPSBJRkFETUlOU1RBVFVTX1VQOworI2lmIGRlZmluZWQoIExJTktfU1RBVEVfVVAgKSAmJiBkZWZpbmVkKCBMSU5LX1NUQVRFX0RPV04gKQorICAgICAgICAgICAgaWYgKGlmcC0+aWZtX2RhdGEuaWZpX2xpbmtfc3RhdGUgPT0gTElOS19TVEFURV9VUCkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5vcGVyX3N0YXR1cyA9IElGT1BFUlNUQVRVU19VUDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaWZwLT5pZm1fZGF0YS5pZmlfbGlua19zdGF0ZSA9PSBMSU5LX1NUQVRFX0RPV04pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+b3Blcl9zdGF0dXMgPSBJRk9QRVJTVEFUVVNfRE9XTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX1VOS05PV047CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX1VQOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+YWRtaW5fc3RhdHVzID0gSUZBRE1JTlNUQVRVU19ET1dOOworICAgICAgICAgICAgLyogSUYtTUlCIHNwZWNpZmljYWxseSBzYXlzIHRoYXQgaWZPcGVyU3RhdHVzIHNob3VsZCBiZSBkb3duIGluIHRoaXMgY2FzZSAqLyAKKyAgICAgICAgICAgIGVudHJ5LT5vcGVyX3N0YXR1cyA9IElGT1BFUlNUQVRVU19ET1dOOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNF9SRUFTTU1BWDsKKyAgICAgICAgZW50cnktPnJlYXNtX21heCA9IElQX01BWFBBQ0tFVDsKKworICAgICAgICAvKiBnZXQgY291bnRlcnMgKi8KKyAgICAgICAgZW50cnktPnN0YXRzLmlieXRlcy5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9pYnl0ZXM7IGVudHJ5LT5zdGF0cy5pYnl0ZXMuaGlnaCA9IDA7CisgICAgICAgIGVudHJ5LT5zdGF0cy5pdWNhc3QubG93ID0gaWZwLT5pZm1fZGF0YS5pZmlfaXBhY2tldHM7IGVudHJ5LT5zdGF0cy5pdWNhc3QuaGlnaCA9IDA7CisgICAgICAgIGVudHJ5LT5zdGF0cy5pbWNhc3QubG93ID0gaWZwLT5pZm1fZGF0YS5pZmlfaW1jYXN0czsgZW50cnktPnN0YXRzLmltY2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLmllcnJvcnMgPSBpZnAtPmlmbV9kYXRhLmlmaV9pZXJyb3JzOworICAgICAgICBlbnRyeS0+c3RhdHMuaWRpc2NhcmRzID0gaWZwLT5pZm1fZGF0YS5pZmlfaXFkcm9wczsKKyAgICAgICAgZW50cnktPnN0YXRzLml1bmtub3duX3Byb3RvcyA9IGlmcC0+aWZtX2RhdGEuaWZpX25vcHJvdG87CisKKyAgICAgICAgZW50cnktPnN0YXRzLm9ieXRlcy5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9vYnl0ZXM7IGVudHJ5LT5zdGF0cy5vYnl0ZXMuaGlnaCA9IDA7CisgICAgICAgIGVudHJ5LT5zdGF0cy5vdWNhc3QubG93ID0gaWZwLT5pZm1fZGF0YS5pZmlfb3BhY2tldHM7IGVudHJ5LT5zdGF0cy5vdWNhc3QuaGlnaCA9IDA7CisgICAgICAgIGVudHJ5LT5zdGF0cy5vbWNhc3QubG93ID0gaWZwLT5pZm1fZGF0YS5pZmlfb21jYXN0czsgZW50cnktPnN0YXRzLm9tY2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLm9lcnJvcnMgPSBpZnAtPmlmbV9kYXRhLmlmaV9vZXJyb3JzOworICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19CWVRFUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0RST1BTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfTUNBU1RfUEtUUzsKKworICAgICAgICBpZiAodGltZXJjbXAoJmlmcC0+aWZtX2RhdGEuaWZpX2xhc3RjaGFuZ2UsICZzdGFydHRpbWUsID4pKSB7CisgICAgICAgICAgICBlbnRyeS0+bGFzdGNoYW5nZSA9IChpZnAtPmlmbV9kYXRhLmlmaV9sYXN0Y2hhbmdlLnR2X3NlYyAtIHN0YXJ0dGltZS50dl9zZWMpICogMTAwOworICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19MQVNUQ0hBTkdFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW50cnktPmxhc3RjaGFuZ2UgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlmcC0+aWZtX2ZsYWdzICYgSUZGX1BST01JU0MpIGVudHJ5LT5wcm9taXNjdW91cyA9IDE7CisKKyAgICAgICAgLyogdHJ5IHRvIGd1ZXNzIHRoZSBzcGVlZCBmcm9tIG1lZGlhIHR5cGUgKi8KKyAgICAgICAgbmV0c25tcF9vcGVuYnNkX2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoZW50cnktPm5hbWUsICZlbnRyeS0+c3BlZWQsICZlbnRyeS0+c3BlZWRfaGlnaCk7CisgICAgICAgIGlmIChlbnRyeS0+c3BlZWRfaGlnaCAhPSAwKSB7CisgICAgICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0hJR0hfU1BFRUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBvciByZXNvcnQgdG8gaWZpX2JhdWRyYXRlICovCisgICAgICAgICAgICBlbnRyeS0+c3BlZWQgPSBpZnAtPmlmbV9kYXRhLmlmaV9iYXVkcmF0ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X292ZXJyaWRlcyhlbnRyeSk7CisKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAiY3JlYXRlZCBlbnRyeSAldSBmb3IgJXNcbiIsIGVudHJ5LT5pbmRleCwgZW50cnktPm5hbWUpKTsKKyAgICB9IC8qIGZvciAoZWFjaCBpbnRlcmZhY2UgZW50cnkpICovCisKKyAgICAvKiBwYXNzIDI6IHdhbGsgYWRkcmVzc2VzICovCisgICAgZm9yIChjcCA9IGlmX2xpc3Q7IGNwIDwgaWZfbGlzdCArIGlmX2xpc3Rfc2l6ZTsgY3AgKz0gaWZhLT5pZmFtX21zZ2xlbikgeworCisgICAgICAgIGlmYSA9IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBjcDsKKworICAgICAgICBpZiAoaWZhLT5pZmFtX3R5cGUgIT0gUlRNX05FV0FERFIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCAweCV4IGluIFJUTV9ORVdBRERSIGZvciBpZmluZGV4ICV1XG4iLAorICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYW1fYWRkcnMsIGlmYS0+aWZhbV9pbmRleCkpOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2dldF9ieV9pbmRleChjb250YWluZXIsIGlmYS0+aWZhbV9pbmRleCk7CisgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYWRkcmVzcyBmb3IgYSBub25leGlzdGVudCBpbnRlcmZhY2U/IGluZGV4PSVkIiwgaWZhLT5pZmFtX2luZGV4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogd2FsayB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgcmVjZWl2ZWQuCisgICAgICAgICAgIHdlIGRvIG5vdCB1c2UgYWN0dWFsIGFkZHJlc3NlcywgdGhlIHNvbGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIHNldCBmbGFncyAqLworICAgICAgICBhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoaWZhICsgMSk7CisgICAgICAgIGZvciAoYW1hc2sgPSBpZmEtPmlmYW1fYWRkcnM7IGFtYXNrICE9IDA7IGFtYXNrID4+PSAxKSB7CisgICAgICAgICAgICBpZiAoKGFtYXNrICYgMSkgIT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGE9JXAsIHNhX2xlbj0lZCwgc2FfZmFtaWx5PTB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5hbWUsIGEsIGEtPnNhX2xlbiwgYS0+c2FfZmFtaWx5KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfSVBWNDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfSVBWNjsKKworICAgICAgICAgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopICggKChjaGFyICopIGEpICsgUk9VTkRVUChhLT5zYV9sZW4pICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAiJXM6IGZsYWdzPTB4JXhcbiIsIGVudHJ5LT5uYW1lLCBlbnRyeS0+bnNfZmxhZ3MpKTsKKyAgICB9CisKKyAgICBpZiAoaWZfbGlzdCAhPSBOVUxMKQorICAgICAgICBmcmVlKGlmX2xpc3QpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzdWJyb3V0aW5lIHRvIHRyYW5zbGF0ZSBrbm93biBtZWRpYSB0eXBlZCB0byBzcGVlZC4KKyAqIHNlZSAvdXNyL2luY2x1ZGUvbmV0L2lmX21lZGlhLmggZm9yIGRlZmluaXRpb25zCisgKi8KKwordm9pZAorX29wZW5ic2RfaW50ZXJmYWNlX2lmbWVkaWFfdG9fc3BlZWQoaW50IG1lZGlhLCB1X2ludCAqc3BlZWQsIHVfaW50ICpzcGVlZF9oaWdoKQoreworICAgICpzcGVlZCA9IDA7ICpzcGVlZF9oaWdoID0gMDsKKworICAgIHN3aXRjaCAoSUZNX1RZUEUobWVkaWEpKSB7CisgICAgICAgIGNhc2UgSUZNX0VUSEVSOgorICAgICAgICAgICAgc3dpdGNoIChJRk1fU1VCVFlQRShtZWRpYSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF9UOgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwXzI6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTBfNToKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF9TVFA6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTBfRkw6CisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9IDEwMDAwMDAwOyAqc3BlZWRfaGlnaCA9IDEwOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfVFg6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwX0ZYOgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMF9UNDoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfVkc6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwX1QyOgorICAgICAgICAgICAgICAgICAgICAqc3BlZWQgPSAxMDAwMDAwMDA7ICpzcGVlZF9oaWdoID0gMTAwOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDAwX0xYOgorCQljYXNlIElGTV8xMDAwX1NYOgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMDBfQ1g6CisjaWZkZWYgSUZNXzEwMDBfVAorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMDBfVDoKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAqc3BlZWQgPSAxMDAwMDAwMDAwOyAqc3BlZWRfaGlnaCA9IDEwMDA7IGJyZWFrOworI2lmZGVmIElGTV8xMEdCQVNFX1NSCisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTBHQkFTRV9TUjoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMEdCQVNFX0xSOgorICAgICAgICAgICAgICAgICAgICAqc3BlZWQgPSAodV9pbnQpIC0xOyAvKiA0Mjk0OTY3Mjk1OyAqLyAqc3BlZWRfaGlnaCA9IDEwMDAwOyBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybjsKK30KKworLyoKKyAqIEByZXR2YWwgIDAgc3BlZWQgY291bGQgbm90IGJlIGRldGVybWluZWQgKGVycm9yLCB1bmtub3duIG1lZGlhKQorICogQHJldHZhbCA+MCBzcGVlZCwgZXF1YWwgdG8gKnNwZWVkLgorICogICAgICAgICAgICBzZXRzICpzcGVlZD0yXjMxIGFuZCByZXR1cm5zICpzcGVlZF9oaWdoPXNwZWVkLzEwXjYgYXMgcmVxdWlyZWQgYnkgaWZTcGVlZC9pZkhpZ2hTcGVlZC4KKyAqLworCitpbnQKK25ldHNubXBfb3BlbmJzZF9pbnRlcmZhY2VfZ2V0X2lmX3NwZWVkKGNoYXIgKm5hbWUsIHVfaW50ICpzcGVlZCwgdV9pbnQgKnNwZWVkX2hpZ2gpCit7CisgICAgaW50IHM7CisgICAgc3RydWN0IGlmbWVkaWFyZXEgaWZtcjsKKyAgICBpbnQgKm1lZGlhX2xpc3QsIGk7CisgICAgdV9pbnQgdF9zcGVlZCwgdF9zcGVlZF9oaWdoOyAKKyAgICB1X2ludCBtX3NwZWVkLCBtX3NwZWVkX2hpZ2g7CisKKyAgICAqc3BlZWQgPSAwOyAqc3BlZWRfaGlnaCA9IDA7CisKKyAgICBpZiAoKHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQoJmlmbXIsIDAsIHNpemVvZihpZm1yKSk7CisgICAgc3RybGNweShpZm1yLmlmbV9uYW1lLCBuYW1lLCBzaXplb2YoaWZtci5pZm1fbmFtZSkpOworCisgICAgaWYgKGlvY3RsKHMsIFNJT0NHSUZNRURJQSwgKGNhZGRyX3QpJmlmbXIpIDwgMCB8fCBpZm1yLmlmbV9jb3VudCA9PSAwKSB7CisgICAgICAgIGNsb3NlKHMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHRyeSB0byBnZXQgc3BlZWQgZnJvbSBjdXJyZW50IG1lZGlhLgorICAgICAqIGlmIHVuc3VjY2Vzc2Z1bCAoZS5nLiwgaW50ZXJmYWNlIGlzIGRvd24pLCBnZXQgYSBsaXN0IG9mIGNhcGFiaWxpdGllcywKKyAgICAgKiB0cnkgZWFjaCBhbmQgcmV0dXJuIG1heGltdW0gc3BlZWQgdGhlIGludGVyZmFjZSBpcyBjYXBhYmxlIG9mLgorICAgICAqLworCisgICAgX29wZW5ic2RfaW50ZXJmYWNlX2lmbWVkaWFfdG9fc3BlZWQoaWZtci5pZm1fY3VycmVudCwgc3BlZWQsIHNwZWVkX2hpZ2gpOworCisgICAgaWYgKCpzcGVlZCA9PSAwICYmCisgICAgICAgIChtZWRpYV9saXN0ID0gKGludCAqKSBtYWxsb2MoaWZtci5pZm1fY291bnQgKiBzaXplb2YoaW50KSkpICE9IE5VTEwgKSB7CisKKyAgICAgICAgaWZtci5pZm1fdWxpc3QgPSBtZWRpYV9saXN0OworCisgICAgICAgIGlmIChpb2N0bChzLCBTSU9DR0lGTUVESUEsIChjYWRkcl90KSZpZm1yKSA9PSAwKSB7CisgICAgICAgICAgICBtX3NwZWVkID0gMDsgbV9zcGVlZF9oaWdoID0gMDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpZm1yLmlmbV9jb3VudDsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBfb3BlbmJzZF9pbnRlcmZhY2VfaWZtZWRpYV90b19zcGVlZChtZWRpYV9saXN0W2ldLCAmdF9zcGVlZCwgJnRfc3BlZWRfaGlnaCk7CisKKyAgICAgICAgICAgICAgICBpZiAodF9zcGVlZF9oaWdoID4gbV9zcGVlZF9oaWdoIHx8CisgICAgICAgICAgICAgICAgICAgICh0X3NwZWVkX2hpZ2ggPT0gbV9zcGVlZF9oaWdoICYmIHRfc3BlZWQgPiB0X3NwZWVkKSkgeworICAgICAgICAgICAgICAgICAgICBtX3NwZWVkX2hpZ2ggPSB0X3NwZWVkX2hpZ2g7IG1fc3BlZWQgPSB0X3NwZWVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzcGVlZCA9IG1fc3BlZWQ7ICpzcGVlZF9oaWdoID0gbV9zcGVlZF9oaWdoOworICAgICAgICB9CisgICAgICAgIGZyZWUobWVkaWFfbGlzdCk7CisgICAgfQorCisgICAgY2xvc2Uocyk7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgIiVzOiBzcGVlZDogJXUsIHNwZWVkX2hpZ2g6ICV1XG4iLAorICAgICAgICAgICAgICAgIG5hbWUsICpzcGVlZCwgKnNwZWVkX2hpZ2gpKTsKKworICAgIHJldHVybiAqc3BlZWQ7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTCitpbnQKK25ldHNubXBfYXJjaF9zZXRfYWRtaW5fc3RhdHVzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZBZG1pblN0YXR1c192YWwpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6YXJjaCIsICJzZXRfYWRtaW5fc3RhdHVzXG4iKSk7CisKKyAgICAvKiBUT0RPOiBpbXBsZW1lbnQgdGhpcyBjYWxsICovCisKKyAgICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAibmV0c25tcF9hcmNoX3NldF9hZG1pbl9zdGF0dXMgaXMgbm90ICh5ZXQpIGltcGxlbWVudGVkIGZvciBGcmVlQlNELlxuIik7CisKKyAgICByZXR1cm4gLTQ7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTICovCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYwppbmRleCA2NmZiMjJmLi44YWE0N2Y4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jCkBAIC0yLDEwICsyLDExIEBACiAgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgU29sYXJpcwogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgogI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMTYsNiArMTcsOCBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9hcmNoX3NldF9hZG1pbl9zdGF0dXMsIGludGVyZmFjZV9hbGwpCisKIHN0YXRpYyBpbnQgX3NldF9pcF9mbGFnc192NChuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqLCBtaWIyX2lmRW50cnlfdCAqKTsKIHN0YXRpYyBpbnQgX21hdGNoX2lmbmFtZV92NGFkZHIodm9pZCAqaWZuYW1lLCB2b2lkICppcGFkZHIpOwogc3RhdGljIGludCBfZ2V0X3Y0YWRkcihtaWIyX2lmRW50cnlfdCAqaWZlLCBtaWIyX2lwQWRkckVudHJ5X3QgKmUpOwpAQCAtNjMsNyArNjYsNyBAQAogICAgIHJlcV9lICAgICAgICAgICAgICAgICAgIHJlcSA9IEdFVF9GSVJTVDsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IDA7CiAKLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAlcClcbiIsCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLCAibG9hZCAoZmxhZ3MgJXUpXG4iLAogICAgICAgICAgICAgICAgIGxfZmxhZ3MpKTsKIAogICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkgewpAQCAtMTA0LDcgKzEwNyw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGNvbGxlY3QgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBieSBJRi1NSUIKICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5wYWRkciA9IG1hbGxvYyhpZmUuaWZQaHlzQWRkcmVzcy5vX2xlbmd0aCk7CisgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoaWZlLmlmUGh5c0FkZHJlc3Mub19sZW5ndGgpOwogICAgICAgICBpZiAoZW50cnktPnBhZGRyID09IE5VTEwpIHsKICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9mcmVlKGVudHJ5KTsKICAgICAgICAgICAgIGVycm9yID0gMTsKQEAgLTMwNiw3ICszMDksNyBAQAogICAgIGlmICgocmMgPSBnZXRNaWJzdGF0KE1JQl9JUF9BRERSLCBpcHY0ZSwgc2l6ZW9mKCppcHY0ZSksIEdFVF9FWEFDVCwgCiAgICAgICAgICZfbWF0Y2hfaWZuYW1lX3Y0YWRkciwgJmlmZS0+aWZEZXNjci5vX2J5dGVzKSkgPT0gMCkKICAgICAgICAgcmV0dXJuICgxKTsKLSAgICBiemVybygodm9pZCAqKWlwdjRlLCBzaXplb2YoKmlwdjRlKSk7CisgICAgbWVtc2V0KGlwdjRlLCAnXDAnLCBzaXplb2YoKmlwdjRlKSk7CiAgICAgcmV0dXJuICgwKTsKIH0KIApAQCAtMzQwLDExICszNDMsMTIgQEAKICAgICAgICAgJl9tYXRjaF9pZm5hbWVfdjZhZGRyLCAmaWZlLT5pZkRlc2NyLm9fYnl0ZXMpKSA9PSAwKSB7CiAgICAgICAgIHJldHVybiAoMSk7CiAgICAgfSAKLSAgICBiemVybygodm9pZCAqKWlwdjZlLCBzaXplb2YoKmlwdjZlKSk7CisgICAgbWVtc2V0KGlwdjZlLCAnXDAnLCBzaXplb2YoKmlwdjZlKSk7CiAgICAgcmV0dXJuICgwKTsKIH0KICNlbmRpZiAvKiBTT0xBUklTX0hBVkVfSVBWNl9NSUJfU1VQUE9SVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUwogaW50CiBuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyhuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlmQWRtaW5TdGF0dXNfdmFsKQpAQCAtMzU2LDMgKzM2MCw0IEBACiAgICAgICovCiAgICAgcmV0dXJuICgtMSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYwppbmRleCAwNmNmZWZlLi42MDc2ZDE5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMKQEAgLTYsNiArNiw3IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCIKQEAgLTI5LDYgKzMwLDggQEAKICNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9hcmNoX3NldF9hZG1pbl9zdGF0dXMsIGludGVyZmFjZV9hbGwpCisKIC8qCiAgKiBhY2NvdW50IGZvciBtaW5vciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZyZWVCU0QgYW5kIE9wZW5CU0QuCiAgKiBJZiB0aGlzIGdldHMgdW5ydWx5LCBzcGxpdCBzdHVmZiBvdXQgaW50byB0aGUgcmVzcGVjdGl2ZQpAQCAtNDksNyArNTIsNyBAQAogIyAgIGRlZmluZSBBUkNIX1BST01JU0NfRkxBRyBJRkZfUFJPTUlTQwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCiAKIC8qIHNhX2xlbiByb3VuZHVwIG1hY3JvLiAqLwogI2RlZmluZSBST1VORFVQKGEpIFwKQEAgLTI4MSw3ICsyODQsNyBAQAogICAgICAgICAgICAgICAgIG5ldHNubXBfc3lzY3RsX2lmbWVkaWFfdG9fc3BlZWQobWVkaWFfbGlzdFtpXSwgJnRfc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdF9zcGVlZF9oaWdoKTsKICAgICAgICAgICAgICAgICBpZiAodF9zcGVlZF9oaWdoID4gbV9zcGVlZF9oaWdoIHx8Ci0gICAgICAgICAgICAgICAgICAgICh0X3NwZWVkX2hpZ2ggPT0gbV9zcGVlZF9oaWdoICYmIHRfc3BlZWQgPiB0X3NwZWVkKSkgeworICAgICAgICAgICAgICAgICAgICAodF9zcGVlZF9oaWdoID09IG1fc3BlZWRfaGlnaCAmJiB0X3NwZWVkID4gbV9zcGVlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9zcGVlZF9oaWdoID0gdF9zcGVlZF9oaWdoOwogICAgICAgICAgICAgICAgICAgICBtX3NwZWVkID0gdF9zcGVlZDsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksNyArMzUyLDcgQEAKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KIAotICAgIGlmX2xpc3QgPSBtYWxsb2MoaWZfbGlzdF9zaXplKTsKKyAgICBpZl9saXN0ID0gKHVfY2hhciopbWFsbG9jKGlmX2xpc3Rfc2l6ZSk7CiAgICAgaWYgKGlmX2xpc3QgPT0gTlVMTCkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW50ZXJmYWNlIGluZm8gIgogICAgICAgICAgICAgICAgICAiKCV1IGJ5dGVzKVxuIiwgKHVuc2lnbmVkKSBpZl9saXN0X3NpemUpOwpAQCAtNDE0LDcgKzQxNyw3IEBACiAgICAgICAgIC8qIGdldCBwaHlzaWNhbCBhZGRyZXNzICovCiAgICAgICAgIGlmIChhZGwgIT0gTlVMTCAmJiBhZGwtPnNkbF9hbGVuID4gMCkgewogICAgICAgICAgICAgZW50cnktPnBhZGRyX2xlbiA9IGFkbC0+c2RsX2FsZW47Ci0gICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSBtYWxsb2MoZW50cnktPnBhZGRyX2xlbik7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSAoY2hhciopbWFsbG9jKGVudHJ5LT5wYWRkcl9sZW4pOwogICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5wYWRkciwgYWRsLT5zZGxfZGF0YSArIGFkbC0+c2RsX25sZW4sIGFkbC0+c2RsX2FsZW4pOwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOnN5c2N0bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHBhZGRyX2xlbj0lZCwgZW50cnktPnBhZGRyPSV4OiV4OiV4OiV4OiV4OiV4XG4iLApAQCAtNDIyLDcgKzQyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGFkZHJbMF0sIGVudHJ5LT5wYWRkclsxXSwgZW50cnktPnBhZGRyWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhZGRyWzNdLCBlbnRyeS0+cGFkZHJbNF0sIGVudHJ5LT5wYWRkcls1XSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZW50cnktPnBhZGRyID0gbWFsbG9jKDYpOworICAgICAgICAgICAgZW50cnktPnBhZGRyID0gKGNoYXIqKW1hbGxvYyg2KTsKICAgICAgICAgICAgIGVudHJ5LT5wYWRkcl9sZW4gPSA2OwogICAgICAgICAgICAgbWVtc2V0KGVudHJ5LT5wYWRkciwgMCwgNik7CiAgICAgICAgIH0KQEAgLTU2MSw2ICs1NjQsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUwogaW50CiBuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyhuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlmQWRtaW5TdGF0dXNfdmFsKQpAQCAtNTc1LDMgKzU3OSw0IEBACiAKICAgICByZXR1cm4gLTQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMKaW5kZXggNjk0MDBmYy4uZDliNzI1MiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYwpAQCAtMTQsOSArMTQsMTQgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfYWNjZXNzX2VudHJ5X3NldF9hZG1pbl9zdGF0dXMpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAogICovCkBAIC0zMSwxNCArMzYsMTQgQEAKICMgICBpbmNsdWRlICJpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oIgogI2VuZGlmCiAjaWZkZWYgVVNJTkdfSVBfTUlCX0lQVjZJTlRFUkZBQ0VUQUJMRV9JUFY2SU5URVJGQUNFVEFCTEVfTU9EVUxFCi0jICAgaW5jbHVkZSAiaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCIKKyMgICBpbmNsdWRlICJpcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oIgogI2VuZGlmCiAjaWZkZWYgVVNJTkdfSUZfTUlCX0lGWFRBQkxFX0lGWFRBQkxFX01PRFVMRQogIyAgIGluY2x1ZGUgImlmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oIgogI2VuZGlmCiAKLW9pZCAgICAgICAgICAgICBpZlRhYmxlX29pZFtdID0geyBJRlRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlmVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlmVGFibGVfb2lkKTsKK2NvbnN0IG9pZCAgICAgICBpZlRhYmxlX29pZFtdID0geyBJRlRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlmVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlmVGFibGVfb2lkKTsKIAogaWZUYWJsZV9yZWdpc3RyYXRpb24gaWZUYWJsZV91c2VyX2NvbnRleHQ7CiBzdGF0aWMgaWZUYWJsZV9yZWdpc3RyYXRpb24gKmlmVGFibGVfdXNlcl9jb250ZXh0X3A7CkBAIC0xNDcsOCArMTUyLDcgQEAKICAgICAgKiByZWdpc3RlciBzY2FsYXIgZm9yIGlmTnVtYmVyCiAgICAgICovCiAgICAgewotICAgICAgICBvaWQgICAgICAgICAgICAgcmVnX29pZFtdID0KLSAgICAgICAgICAgIHsgSUZUQUJMRV9OVU1CRVIgfTsKKyAgICAgICAgY29uc3Qgb2lkICAgICAgIHJlZ19vaWRbXSA9IHsgSUZUQUJMRV9OVU1CRVIgfTsKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7CiAKICAgICAgICAgbXlyZWcgPQpAQCAtMjc5LDkgKzI4Myw5IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBzYXZlIGNoYW5nZWQgcm93cywgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICogbm90aWZ5IGxpYnJhcnkgdG8gc2F2ZSBjaGFuZ2VkIHJvd3MKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9zdG9yZShuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKICAgICAgICAgfQogCkBAIC00NzQsNyArNDc4LDcgQEAKICAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIGlmRGVzY3IgZGF0YQogICAgICAgICAgKi8KICAgICAgICAgKCppZkRlc2NyX3ZhbF9wdHJfcHRyKSA9Ci0gICAgICAgICAgICBtYWxsb2ModG1wX2xlbiAqIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmlmRGVzY3JbMF0pKTsKKyAgICAgICAgICAgIChjaGFyKiltYWxsb2ModG1wX2xlbiAqIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmlmRGVzY3JbMF0pKTsKICAgICAgICAgaWYgKE5VTEwgPT0gKCppZkRlc2NyX3ZhbF9wdHJfcHRyKSkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwogICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKQEAgLTc1Miw3ICs3NTYsNyBAQAogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZQaHlzQWRkcmVzcyBkYXRhCiAgICAgICAgICAqLwogICAgICAgICAoKmlmUGh5c0FkZHJlc3NfdmFsX3B0cl9wdHIpID0KLSAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmlmUGh5c0FkZHJlc3NfbGVuICoKKyAgICAgICAgICAgIChjaGFyKiltYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5pZlBoeXNBZGRyZXNzX2xlbiAqCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZQaHlzQWRkcmVzc1swXSkpOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmUGh5c0FkZHJlc3NfdmFsX3B0cl9wdHIpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CkBAIC0xNzczLDkgKzE3NzcsOSBAQAogICAgIC8qCiAgICAgICogaGFyZCBjb2RlZAogICAgICAqLwotICAgIG5ldHNubXBfYXNzZXJ0KCgqaWZTcGVjaWZpY192YWxfcHRyX2xlbl9wdHIpID4gbnVsbE9pZExlbik7Ci0gICAgKCppZlNwZWNpZmljX3ZhbF9wdHJfbGVuX3B0cikgPSBudWxsT2lkTGVuOwotICAgIG1lbWNweSgqaWZTcGVjaWZpY192YWxfcHRyX3B0ciwgJm51bGxPaWQsIG51bGxPaWRMZW4pOworICAgIG5ldHNubXBfYXNzZXJ0KCgqaWZTcGVjaWZpY192YWxfcHRyX2xlbl9wdHIpID4gKHNpemVfdCludWxsT2lkTGVuKTsKKyAgICAoKmlmU3BlY2lmaWNfdmFsX3B0cl9sZW5fcHRyKSA9IChzaXplX3QpbnVsbE9pZExlbjsKKyAgICBtZW1jcHkoKmlmU3BlY2lmaWNfdmFsX3B0cl9wdHIsICZudWxsT2lkLCAoc2l6ZV90KW51bGxPaWRMZW4pOwogI2VuZGlmCiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CkBAIC0xNzg0LDYgKzE3ODgsOSBAQAogCiAKIC8qKiBAfSAqLworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTIzMzAsNiArMjMzNyw4IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzICovCiAKIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogc3RhdGljIGludAogX2lmX251bWJlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAppbmRleCA2YTZmMGU1Li5lOTA2MzRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCkBAIC0zNDMsNiArMzQzLDkgQEAKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcwogICAgICAqLworICAgIAkKKyAgICBpbnQgICAgICAgICAgICAgX21mZF9pZlRhYmxlX3VuZG9fc2V0dXBfYWxsb2NhdGUoaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAgX21mZF9pZlRhYmxlX3VuZG9fc2V0dXBfcmVsZWFzZShpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgpOwogICAgIGludCAgICAgICAgICAgICBpZlRhYmxlX3ByZV9yZXF1ZXN0KGlmVGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQpOwogICAgIGludCAgICAgICAgICAgICBpZlRhYmxlX3Bvc3RfcmVxdWVzdChpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqCkBAIC0zNjEsOCArMzY0LDggQEAKICAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKmlmVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlmVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlmVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlmVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCBpZlRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgaWZUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaWZUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTQ0OCw2ICs0NTEsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAvKgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKiBTRVQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCkBAIC02NjMsNyArNjY3LDcgQEAKIAogCiAgICAgaW50ICAgICAgICAgICAgIGlmVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzKGlmVGFibGVfcm93cmVxX2N0eCAqIGN0eCk7Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDA1MTkxZTcuLmZiODM4ZWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsOSArOCwxMiBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpbmtlZF9saXN0KQorCiAvKgogICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKICAqLwpAQCAtMjMsMTIgKzI2LDM0IEBACiAjICAgaW5jbHVkZSAibWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCIKICNlbmRpZgogCisjaWZkZWYgVVNJTkdfSVBfTUlCX0lQVjZJTlRFUkZBQ0VUQUJMRV9JUFY2SU5URVJGQUNFVEFCTEVfTU9EVUxFCisjICAgaW5jbHVkZSAibWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaCIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBjZF9jb250YWluZXJfcyB7CisgICAgbmV0c25tcF9jb250YWluZXIgKmN1cnJlbnQ7CisgICAgbmV0c25tcF9jb250YWluZXIgKmRlbGV0ZWQ7Cit9IGNkX2NvbnRhaW5lcjsKKwogLyoKICAqIGZsYWcgc28gd2Uga25vdyBub3QgdG8gc2V0IHJvdy90YWJsZSBsYXN0IGNoYW5nZSB0aW1lcwogICogZHVyaW5nIHN0YXJ0dXAuCiAgKi8KIHN0YXRpYyBpbnQgICAgICBfZmlyc3RfbG9hZCA9IDE7CiAKKy8qCisgKiBWYWx1ZSBvZiBpbnRlcmZhY2VfZmFkZW91dCBjb25maWcgb3B0aW9uCisgKi8KK3N0YXRpYyBpbnQgZmFkZW91dCA9IElGVEFCTEVfUkVNT1ZFX01JU1NJTkdfQUZURVI7CisvKgorICogVmFsdWUgb2YgaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIGNvbmZpZyBvcHRpb24KKyAqLworc3RhdGljIGludCByZXBsYWNlX29sZCA9IDA7CisKK3N0YXRpYyB2b2lkCitfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlKGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcik7CisKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAZGVmZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtNTAsNiArNzUsMzIgQEAKICAqIE9JRDogLjEuMy42LjEuMi4xLjIuMiwgbGVuZ3RoOiA4CiAgKi8KIAorc3RhdGljIHZvaWQKK3BhcnNlX2ludGVyZmFjZV9mYWRlb3V0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIGZhZGVvdXQgPSBhdG9pKGxpbmUpOworfQorc3RhdGljIHZvaWQKK3BhcnNlX2ludGVyZmFjZV9yZXBsYWNlX29sZChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBpZiAoc3RyY21wKGxpbmUsICJ5ZXMiKSA9PSAwCisgICAgICAgICAgICB8fCBzdHJjbXAobGluZSwgInkiKSA9PSAwCisgICAgICAgICAgICB8fCBzdHJjbXAobGluZSwgInRydWUiKSA9PSAwCisgICAgICAgICAgICB8fCBzdHJjbXAobGluZSwgIjEiKSA9PSAwKSB7CisgICAgICAgIHJlcGxhY2Vfb2xkID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3RyY21wKGxpbmUsICJubyIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAibiIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAiZmFsc2UiKSA9PSAwCisgICAgICAgICAgICB8fCBzdHJjbXAobGluZSwgIjAiKSA9PSAwKSB7CisgICAgICAgIHJlcGxhY2Vfb2xkID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiSW52YWxpZCB2YWx1ZSBvZiBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgcGFyYW1ldGVyOiAnJXMnXG4iLAorICAgICAgICAgICAgbGluZSk7Cit9CisKIC8qKgogICogaW5pdGlhbGl6YXRpb24gZm9yIGlmVGFibGUgZGF0YSBhY2Nlc3MKICAqCkBAIC03MCw2ICsxMjEsMTAgQEAKICAgICAvKgogICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgaWZUYWJsZSBkYXRhLgogICAgICAqLworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJpbnRlcmZhY2VfZmFkZW91dCIsIHBhcnNlX2ludGVyZmFjZV9mYWRlb3V0LCBOVUxMLAorICAgICAgICAgICAgImludGVyZmFjZV9mYWRlb3V0IHNlY29uZHMiKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIiwKKyAgICAgICAgICAgIHBhcnNlX2ludGVyZmFjZV9yZXBsYWNlX29sZCwgTlVMTCwgImludGVyZmFjZV9yZXBsYWNlX29sZCB5ZXN8bm8iKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZUYWJsZV9pbml0X2RhdGEgKi8KQEAgLTE1MiwyMyArMjA3LDEyMiBAQAogICAgICAgICAgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCB8IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmVGFibGVfY29udGFpbmVyX2luaXQgKi8KIAordm9pZAorc2VuZF9saW5rVXBEb3duTm90aWZpY2F0aW9ucyhvaWQgKm5vdGlmaWNhdGlvbl9vaWQsIHNpemVfdCBub3RpZmljYXRpb25fb2lkX2xlbiwgaW50IGlmX2luZGV4LCBpbnQgaWZfYWRtaW5fc3RhdHVzLCBpbnQgaWZfb3Blcl9zdGF0dXMpCit7CisgICAgLyoKKyAgICAgKiBJbiB0aGUgbm90aWZpY2F0aW9uLCB3ZSBoYXZlIHRvIGFzc2lnbiBvdXIgbm90aWZpY2F0aW9uIE9JRCB0bworICAgICAqIHRoZSBzbm1wVHJhcE9JRC4wIG9iamVjdC4gSGVyZSBpcyBpdCdzIGRlZmluaXRpb24uIAorICAgICAqLworICAgIG9pZCAgICAgICAgICAgICBvYmppZF9zbm1wdHJhcFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxLCAxLCA0LCAxLCAwIH07CisgICAgc2l6ZV90ICAgICAgICAgIG9iamlkX3NubXB0cmFwX2xlbiA9IE9JRF9MRU5HVEgob2JqaWRfc25tcHRyYXApOworCisgICAgLyoKKyAgICAgKiBkZWZpbmUgdGhlIE9JRHMgZm9yIHRoZSB2YXJiaW5kcyB3ZSdyZSBnb2luZyB0byBpbmNsdWRlCisgICAgICogIHdpdGggdGhlIG5vdGlmaWNhdGlvbiAtCisgICAgICogSUYtTUlCOjppZkluZGV4LAorICAgICAqIElGLU1JQjo6aWZBZG1pblN0YXR1cywgYW5kCisgICAgICogSUYtTUlCOjppZk9wZXJTdGF0dXMKKyAgICAgKi8KKyAgICBvaWQgICAgICBpZl9pbmRleF9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAwIH07CisgICAgc2l6ZV90ICAgaWZfaW5kZXhfb2lkX2xlbiA9IE9JRF9MRU5HVEgoaWZfaW5kZXhfb2lkKTsKKyAgICBvaWQgICAgICBpZl9hZG1pbl9zdGF0dXNfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgNywgMCB9OworICAgIHNpemVfdCAgIGlmX2FkbWluX3N0YXR1c19vaWRfbGVuID0gT0lEX0xFTkdUSChpZl9hZG1pbl9zdGF0dXNfb2lkKTsKKyAgICBvaWQgICAgICBpZl9vcGVyX3N0YXR1c19vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCA4LCAwIH07CisgICAgc2l6ZV90ICAgaWZfb3Blcl9zdGF0dXNfb2lkX2xlbiA9IE9JRF9MRU5HVEgoaWZfb3Blcl9zdGF0dXNfb2lkKTsKKworICAgIC8qCisgICAgICogaGVyZSBpcyB3aGVyZSB3ZSBzdG9yZSB0aGUgdmFyaWFibGVzIHRvIGJlIHNlbnQgaW4gdGhlIHRyYXAgCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpub3RpZmljYXRpb25fdmFycyA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgicnN5czpsaW5rVXBEb3duTm90aWZpY2F0aW9ucyIsICJkZWZpbmluZyB0aGUgdHJhcFxuIikpOworCisgICAgLyoKKyAgICAgKiB1cGRhdGUgdGhlIGluc3RhbmNlIGZvciBlYWNoIHZhcmlhYmxlIHRvIGJlIHNlbnQgaW4gdGhlIHRyYXAKKyAgICAgKi8KKyAgICBpZl9pbmRleF9vaWRbMTBdID0gaWZfaW5kZXg7CisgICAgaWZfYWRtaW5fc3RhdHVzX29pZFsxMF0gPSBpZl9pbmRleDsKKyAgICBpZl9vcGVyX3N0YXR1c19vaWRbMTBdID0gaWZfaW5kZXg7CisKKyAgICAvKgorICAgICAqIGFkZCBpbiB0aGUgdHJhcCBkZWZpbml0aW9uIG9iamVjdCAKKyAgICAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZub3RpZmljYXRpb25fdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgc25tcFRyYXBPSUQuMCB2YXJpYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRfc25tcHRyYXAsIG9iamlkX3NubXB0cmFwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB2YWx1ZSB0eXBlIGlzIGFuIE9JRCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB2YWx1ZSBjb250ZW50cyBpcyBvdXIgbm90aWZpY2F0aW9uIE9JRCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBub3RpZmljYXRpb25fb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemUgaW4gYnl0ZXMgPSBvaWQgbGVuZ3RoICogc2l6ZW9mKG9pZCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbl9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworCisgICAgLyoKKyAgICAgKiBhZGQgaW4gdGhlIGFkZGl0aW9uYWwgb2JqZWN0cyBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlIHRyYXAKKyAgICAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZub3RpZmljYXRpb25fdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9pbmRleF9vaWQsIGlmX2luZGV4X29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmlmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZl9pbmRleCkpOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSB3YW50IHRvIGluc2VydCBhZGRpdGlvbmFsIG9iamVjdHMsIHdlIGRvIGl0IGhlcmUgCisgICAgICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmbm90aWZpY2F0aW9uX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfYWRtaW5fc3RhdHVzX29pZCwgaWZfYWRtaW5fc3RhdHVzX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmlmX2FkbWluX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaWZfYWRtaW5fc3RhdHVzKSk7CisKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZub3RpZmljYXRpb25fdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9vcGVyX3N0YXR1c19vaWQsIGlmX29wZXJfc3RhdHVzX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmlmX29wZXJfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZl9vcGVyX3N0YXR1cykpOworCisgICAgLyoKKyAgICAgKiBzZW5kIHRoZSB0cmFwIG91dC4gIFRoaXMgd2lsbCBzZW5kIGl0IHRvIGFsbCByZWdpc3RlcmVkCisgICAgICogcmVjZWl2ZXJzIChzZWUgdGhlICJTRVRUSU5HIFVQIFRSQVAgQU5EL09SIElORk9STSBERVNUSU5BVElPTlMiCisgICAgICogc2VjdGlvbiBvZiB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZS4gCisgICAgICovCisgICAgREVCVUdNU0dUTCgoInJzeXM6bGlua1VwRG93bk5vdGlmaWNhdGlvbnMiLCAic2VuZGluZyB0aGUgdHJhcFxuIikpOworICAgIHNlbmRfdjJ0cmFwKG5vdGlmaWNhdGlvbl92YXJzKTsKKworICAgIC8qCisgICAgICogZnJlZSB0aGUgY3JlYXRlZCBub3RpZmljYXRpb24gdmFyaWFibGUgbGlzdCAKKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgicnN5czpsaW5rVXBEb3duTm90aWZpY2F0aW9ucyIsICJjbGVhbmluZyB1cFxuIikpOworICAgIHNubXBfZnJlZV92YXJiaW5kKG5vdGlmaWNhdGlvbl92YXJzKTsKK30KKwogLyoqCiAgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCiAgKgogICovCiBzdGF0aWMgdm9pZAogX2NoZWNrX2ludGVyZmFjZV9lbnRyeV9mb3JfdXBkYXRlcyhpZlRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqaWZjb250YWluZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkX2NvbnRhaW5lciAqY2RjKQogewogICAgIGNoYXIgICAgICAgICAgICBvcGVyX2NoYW5nZWQgPSAwOwotICAgIHVfbG9uZyBsYXN0Y2hhbmdlID0gcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2U7CisgICAgaW50IGxhc3RjaGFuZ2VkID0gcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2U7CisgICAgbmV0c25tcF9jb250YWluZXIgKmlmY29udGFpbmVyID0gY2RjLT5jdXJyZW50OwogCiAgICAgLyoKICAgICAgKiBjaGVjayBmb3IgbWF0Y2hpbmcgZW50cnkuIFdlIGNhbiBkbyB0aGlzIGRpcmVjdGx5LCBzaW5jZQogICAgICAqIGJvdGggY29udGFpbmVycyB1c2UgdGhlIHNhbWUgaW5kZXguCiAgICAgICovCiAgICAgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmlmZW50cnkgPQotICAgICAgICBDT05UQUlORVJfRklORChpZmNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIChuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSopQ09OVEFJTkVSX0ZJTkQoaWZjb250YWluZXIsIHJvd3JlcV9jdHgpOwogCiAjaWZkZWYgVVNJTkdfSVBfTUlCX0lQVjRJTlRFUkZBQ0VUQUJMRV9JUFY0SU5URVJGQUNFVEFCTEVfTU9EVUxFCiAgICAgLyoKQEAgLTE5MywyOCArMzQ3LDQwIEBACiAgICAgICAgICAqIGRlbGV0ZWQgKGFuZCB0aHVzIG5lZWQgdG8gdXBkYXRlIGlmVGFibGVMYXN0Q2hhbmdlZCk/CiAgICAgICAgICAqLwogICAgICAgICBpZiAoIXJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpZlRhYmxlOmFjY2VzcyIsICJ1cGRhdGluZyBtaXNzaW5nIGVudHJ5XG4iKSk7CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nID0gMTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpZlRhYmxlOmFjY2VzcyIsICJ1cGRhdGluZyBtaXNzaW5nIGVudHJ5ICVzXG4iLHJvd3JlcV9jdHgtPmRhdGEuaWZOYW1lKSk7CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmQWRtaW5TdGF0dXMgPSBJRkFETUlOU1RBVFVTX0RPV047Ci0gICAgICAgICAgICBpZiAoKCEocm93cmVxX2N0eC0+ZGF0YS5pZmVudHJ5LT5uc19mbGFncyAmIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19MQVNUQ0hBTkdFKSkKLSAgICAgICAgICAgICAgICAmJiAocm93cmVxX2N0eC0+ZGF0YS5pZk9wZXJTdGF0dXMgIT0gSUZPUEVSU1RBVFVTX0RPV04pKQotICAgICAgICAgICAgICAgIG9wZXJfY2hhbmdlZCA9IDE7CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyA9IElGT1BFUlNUQVRVU19ET1dOOworICAgICAgICAgICAgb3Blcl9jaGFuZ2VkID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocm93cmVxX2N0eC0+a25vd25fbWlzc2luZykgeworICAgICAgICAgICAgdGltZV90IG5vdyA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworICAgICAgICAgICAgdV9sb25nIGRpZmYgPSAobm93IC0gcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UpIC8gMTAwOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aWZUYWJsZTphY2Nlc3MiLCAibWlzc2luZyBlbnRyeSBmb3IgJWxkIHNlY29uZHNcbiIsIGRpZmYpKTsKKyAgICAgICAgICAgIGlmIChkaWZmID49IGZhZGVvdXQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAibWFya2luZyBtaXNzaW5nIGVudHJ5ICVzIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92YWwgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwgcm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZW91dCkpOworICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNkYy0+ZGVsZXRlZCkKKyAgICAgICAgICAgICAgICAgICBjZGMtPmRlbGV0ZWQgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpZlRhYmxlX2RlbGV0ZWQ6bGlua2VkX2xpc3QiKTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBjZGMtPmRlbGV0ZWQpCisgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkbid0IGNyZWF0ZSBjb250YWluZXIgZm9yIGRlbGV0ZWQgaW50ZXJmYWNlXG4iKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNkYy0+ZGVsZXRlZCwgcm93cmVxX2N0eCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIGV4aXN0aW5nIGVudHJ5XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJpZlRhYmxlOmFjY2VzcyIsICJ1cGRhdGluZyBleGlzdGluZyBlbnRyeSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUpKTsKIAogI2lmZGVmIFVTSU5HX0lGX01JQl9JRlhUQUJMRV9JRlhUQUJMRV9NT0RVTEUKICAgICAgICAgewogICAgICAgICAgICAgaW50IHJjID0gc3RyY21wKHJvd3JlcV9jdHgtPmRhdGEuaWZOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZW50cnktPm5hbWUpOwogICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGxvZ2dlZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFsb2dnZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5hbWUgb2YgYW4gaW50ZXJmYWNlIGNoYW5nZWQuIFN1Y2ggIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlcyB3aWxsIGtlZXAgaXRzIG9sZCBuYW1lIGluIElGLU1JQi5cbiIpOwotICAgICAgICAgICAgICAgICAgICBsb2dnZWQgPSAxOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJOYW1lIG9mIGFuIGludGVyZmFjZSBjaGFuZ2VkLiBTdWNoICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVyZmFjZXMgd2lsbCBrZWVwIGl0cyBvbGQgbmFtZSBpbiBJRi1NSUIuXG4iKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgImludGVyZmFjZSAlcyBjaGFuZ2VkIG5hbWUgdG8gJXMsIGlnbm9yaW5nXG4iLAogICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSwgaWZlbnRyeS0+bmFtZSkpOwogICAgICAgICAgICAgfQpAQCAtMjUzLDEwICs0MTksNjMgQEAKICAgICAvKgogICAgICAqIGlmIGlmT3BlclN0YXR1cyBjaGFuZ2VkLCB1cGRhdGUgaWZMYXN0Q2hhbmdlCiAgICAgICovCi0gICAgaWYgKG9wZXJfY2hhbmdlZCkKKyAgICBpZiAob3Blcl9jaGFuZ2VkKSB7CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZMYXN0Q2hhbmdlID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisjaWZkZWYgVVNJTkdfSUZfTUlCX0lGWFRBQkxFX0lGWFRBQkxFX01PRFVMRQorICAgICAgICBpZiAocm93cmVxX2N0eC0+ZGF0YS5pZkxpbmtVcERvd25UcmFwRW5hYmxlID09IDEpIHsKKyAgICAgICAgICAgIGlmIChyb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyA9PSBJRk9QRVJTVEFUVVNfVVApIHsKKyAgICAgICAgICAgICAgICBvaWQgbm90aWZpY2F0aW9uX29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxLCAxLCA1LCA0IH07CisgICAgICAgICAgICAgICAgc2VuZF9saW5rVXBEb3duTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25fb2lkLCBPSURfTEVOR1RIKG5vdGlmaWNhdGlvbl9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+dGJsX2lkeC5pZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkFkbWluU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZk9wZXJTdGF0dXMpOworICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyA9PSBJRk9QRVJTVEFUVVNfRE9XTikgeworICAgICAgICAgICAgICAgIG9pZCBub3RpZmljYXRpb25fb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDUsIDMgfTsKKyAgICAgICAgICAgICAgICBzZW5kX2xpbmtVcERvd25Ob3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbl9vaWQsIE9JRF9MRU5HVEgobm90aWZpY2F0aW9uX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmQWRtaW5TdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKwogICAgIGVsc2UKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UgPSBsYXN0Y2hhbmdlOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZSA9IGxhc3RjaGFuZ2VkOworfQorCisvKioKKyAqIFJlbW92ZSBhbGwgb2xkIGludGVyZmFjZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBuZXdseSBhZGRlZCBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitfY2hlY2tfYW5kX3JlcGxhY2Vfb2xkKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICppZmVudHJ5LAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAqaXQ7CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlOworCisgICAgdG9fZGVsZXRlID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiaWZUYWJsZV9kZWxldGVkOmxpbmtlZF9saXN0Iik7CisgICAgaWYgKE5VTEwgPT0gdG9fZGVsZXRlKSB7CisgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkbid0IGNyZWF0ZSBjb250YWluZXIgZm9yIGRlbGV0ZWQgaW50ZXJmYWNlXG4iKTsKKyAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoY29udGFpbmVyKTsKKyAgICBmb3IgKHJvd3JlcV9jdHggPSBJVEVSQVRPUl9GSVJTVChpdCk7IHJvd3JlcV9jdHg7IHJvd3JlcV9jdHggPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworICAgICAgICBpZiAoc3RyY21wKGlmZW50cnktPm5hbWUsIHJvd3JlcV9jdHgtPmRhdGEuaWZlbnRyeS0+bmFtZSkgPT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgInJlbW92aW5nIGludGVyZmFjZSAlbGQgZHVlIHRvIG5ldyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHJvd3JlcV9jdHgtPmRhdGEuaWZlbnRyeS0+aW5kZXgsIGlmZW50cnktPm5hbWUpKTsKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQodG9fZGVsZXRlLCByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKworICAgIENPTlRBSU5FUl9GT1JfRUFDSCh0b19kZWxldGUsCisgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIENPTlRBSU5FUl9GUkVFKHRvX2RlbGV0ZSk7CiB9CiAKIC8qKgpAQCAtMjc3LDYgKzQ5Niw5IEBACiAgICAgcm93cmVxX2N0eCA9IGlmVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpZmVudHJ5KTsKICAgICBpZiAoKE5VTEwgIT0gcm93cmVxX2N0eCkgJiYKICAgICAgICAgKE1GRF9TVUNDRVNTID09IGlmVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwgaWZlbnRyeS0+aW5kZXgpKSkgeworICAgICAgICBpZiAocmVwbGFjZV9vbGQpCisgICAgICAgICAgICAgICAgX2NoZWNrX2FuZF9yZXBsYWNlX29sZChpZmVudHJ5LCBjb250YWluZXIpOworCiAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKICAgICAgICAgaWYgKDAgPT0gX2ZpcnN0X2xvYWQpIHsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZMYXN0Q2hhbmdlID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CkBAIC0zMDgsNiArNTMwLDIxIEBACiB9CiAKIC8qKgorICogYWRkIG5ldyBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2RlbGV0ZV9taXNzaW5nX2ludGVyZmFjZShpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInJlbW92aW5nIG1pc3NpbmcgZW50cnkgJXNcbiIsCisgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUpKTsKKworICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKworICAgIGlmVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfQorCisvKioKICAqIGNvbnRhaW5lciBzaHV0ZG93bgogICoKICAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgpAQCAtMzcxLDcgKzYwOCw3IEBACiBpbnQKIGlmVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKIHsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqaWZjb250YWluZXI7CisgICAgY2RfY29udGFpbmVyIGNkYzsKIAogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlmVGFibGU6aWZUYWJsZV9jb250YWluZXJfbG9hZCIsICJjYWxsZWRcbiIpKTsKIApAQCAtMzg0LDIzICs2MjEsMzUgQEAKICAgICAvKgogICAgICAqIGlmVGFibGUgZ2V0cyBpdHMgZGF0YSBmcm9tIHRoZSBuZXRzbm1wX2ludGVyZmFjZSBBUEkuCiAgICAgICovCi0gICAgaWZjb250YWluZXIgPQorICAgIGNkYy5jdXJyZW50ID0KICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9sb2FkKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19JTlRFUkZBQ0VfSU5JVF9OT0ZMQUdTKTsKLSAgICBpZiAoTlVMTCA9PSBpZmNvbnRhaW5lcikKKyAgICBpZiAoTlVMTCA9PSBjZGMuY3VycmVudCkKICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLwogCisgICAgY2RjLmRlbGV0ZWQgPSBOVUxMOyAvKiBjcmVhdGVkIGFzIG5lZWRlZCAqLworCiAgICAgLyoKICAgICAgKiB3ZSBqdXN0IGdvdCBhIGZyZXNoIGNvcHkgb2YgaW50ZXJmYWNlIGRhdGEuIGNvbXBhcmUgaXQgdG8KICAgICAgKiB3aGF0IHdlJ3ZlIGFscmVhZHkgZ290LCBhbmQgbWFrZSBhbnkgYWRqdXN0ZW1lbnRzLi4uCiAgICAgICovCiAgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGNvbnRhaW5lciwgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCi0gICAgICAgICAgICAgICAgICAgICAgIF9jaGVja19pbnRlcmZhY2VfZW50cnlfZm9yX3VwZGF0ZXMsIGlmY29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX2ludGVyZmFjZV9lbnRyeV9mb3JfdXBkYXRlcywgJmNkYyk7CisKKyAgICAvKgorICAgICAqIG5vdyByZW1vdmUgYW55IG1pc3NpbmcgaW50ZXJmYWNlcworICAgICAqLworICAgIGlmIChOVUxMICE9IGNkYy5kZWxldGVkKSB7CisgICAgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGNkYy5kZWxldGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2RlbGV0ZV9taXNzaW5nX2ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICAgICBDT05UQUlORVJfRlJFRShjZGMuZGVsZXRlZCk7CisgICAgfQogCiAgICAgLyoKICAgICAgKiBub3cgYWRkIGFueSBuZXcgaW50ZXJmYWNlcwogICAgICAqLwotICAgIENPTlRBSU5FUl9GT1JfRUFDSChpZmNvbnRhaW5lciwKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY2RjLmN1cnJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfYWRkX25ld19pbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CiAKQEAgLTQwOCwxMSArNjU3LDExIEBACiAgICAgICogZnJlZSB0aGUgY29udGFpbmVyLiB3ZSd2ZSBlaXRoZXIgY2xhaW1lZCBlYWNoIGlmZW50cnksIG9yIHJlbGVhc2VkIGl0LAogICAgICAqIHNvIHRoZSBkYWwgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGNsZWFyIHRoZSBjb250YWluZXIuCiAgICAgICovCi0gICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9mcmVlKGlmY29udGFpbmVyLAorICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9jb250YWluZXJfZnJlZShjZGMuY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfSU5URVJGQUNFX0ZSRUVfRE9OVF9DTEVBUik7CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlmVGFibGU6aWZUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWx1IHJlY29yZHNcbiIsICh1bnNpZ25lZCBsb25nKUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIGlmIChfZmlyc3RfbG9hZCkKICAgICAgICAgX2ZpcnN0X2xvYWQgPSAwOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCmluZGV4IDlhYWE0MmUuLjQ0NTkyOWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTQ2LDcgKzQ2LDkgQEAKICAgICAgKiBBIDEwIE1icHMgc3RyZWFtIGNhbiB3cmFwIGlmKk9jdGV0cyBpbiB+NTcgbWludXRlcy4KICAgICAgKiBBdCAxMDAgTWJwcyBpdCBpcyB+NSBtaW51dGVzLCBhbmQgYXQgMSBHYnBzLCB+MzQgc2Vjb25kcy4KICAgICAgKi8KLSNkZWZpbmUgSUZUQUJMRV9DQUNIRV9USU1FT1VUICAgMTUKKyNkZWZpbmUgSUZUQUJMRV9DQUNIRV9USU1FT1VUICAgMworCisjZGVmaW5lIElGVEFCTEVfUkVNT1ZFX01JU1NJTkdfQUZURVIgICAgICg1ICogNjApIC8qIHNlY29uZHMgKi8KIAogICAgIHZvaWQgICAgICAgICAgICBpZlRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipjb250YWluZXJfcHRyX3B0ciwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDI1NzQ5ZTMuLjQxZDM4ZWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDcsNiArNDgsMjEgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZlRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZ0YWJsZV9jb250YWluZXJfZ2V0LCBpZlRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnh0YWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmWFRhYmxlX2NvbnRhaW5lcl9zaXplLCBpZlhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaWZYVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmWFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZlhUYWJsZV9jb250YWluZXJfZ2V0LCBpZlhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZ0YWJsZV9jb250YWluZXJfc2l6ZSwgaWZUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZ0YWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpZlRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgyLDE5ICs5OCwyMyBAQAogc3RhdGljIHZvaWQgICAgIF9pZlRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpZlRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGlmVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpZlRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaWZUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlmVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGlmVGFibGVfcmVnaXN0cmF0aW9uICoKIGlmVGFibGVfcmVnaXN0cmF0aW9uX3NldChpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKIHsKQEAgLTEwMiwxMiArMTIyLDE1IEBACiAgICAgaWZUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiBpZlRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlmVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIHVfaW50CiBpZlRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTQ1LDcgKzE2OCw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmVGFibGVfb2JqZWN0X2xvb2t1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV91bmRvX3NldHVwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTYwLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIGlmVGFibGVfZGF0YSAgICppZlRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CiAKQEAgLTIyMiw3ICsyNDUsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJRlRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJRlRBQkxFX01BWF9DT0w7CkBAIC0yNTAsNyArMjczLDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfaWZUYWJsZV9wb3N0X3JlcXVlc3Q7CiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI3Myw3ICsyOTYsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF9pZlRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTI4NiwxMSArMzA5LDE0IEBACiAgICAgcmVnaW5mbyA9CiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCJpZlRhYmxlIiwgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZUYWJsZV9vaWQsIGlmVGFibGVfb2lkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEFORExFUl9DQU5fUldSSVRFCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUCB8CisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworICAgICAgICAgICAgKTsKKwogICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlmVGFibGVcbiIpOwogICAgICAgICByZXR1cm47CkBAIC0zMDgsNyArMzM0LDcgQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTMzMSw3ICszNTcsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtMzcyLDggKzM5OCw4IEBACiAgICAgICogcmVnaXN0ZXIgaWZUYWJsZUxhc3RDaGFuZ2VkCiAgICAgICovCiAgICAgewotICAgICAgICBvaWQgICAgICAgICAgICAgaWZ0bGNfb2lkW10gPSB7IElGVEFCTEVfTEFTVF9DSEFOR0UgfTsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICBjb25zdCBvaWQgICAgICAgaWZ0bGNfb2lkW10gPSB7IElGVEFCTEVfTEFTVF9DSEFOR0UgfTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlmVGFibGVMYXN0Q2hhbmdlZCIsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdGxjX29pZCwgT0lEX0xFTkdUSChpZnRsY19vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCkBAIC02NTYsNyArNjgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC03MTAsNyArNzM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV9vYmplY3RfbG9va3VwIiwKQEAgLTk3MCw3ICs5OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTAzOSw4ICsxMDY1LDggQEAKIAogCiAKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTI2NSw3ICsxMjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xMzEyLDcgKzEzMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CkBAIC0xNDIzLDcgKzE0NDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE0OTcsNyArMTUyMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE1NzYsNyArMTYwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE2MjMsNyArMTY0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmVGFibGU6X21mZF9pZlRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE2NjUsNyArMTY5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfdW5kb19jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNzQzLDcgKzE3NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAKQEAgLTE3OTYsNyArMTgyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmVGFibGU6X21mZF9pZlRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLApAQCAtMTgxOCw3ICsxODQ0LDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lmVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xOTY0LDYgKzE5OTAsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaWZUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGlmVGFibGVfcm93cmVxX2N0eCAqCiBpZlRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpZlRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCiB7CkBAIC0xOTg1LDcgKzIwMTIsOCBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0gQ09OVEFJTkVSX0ZJTkQoaWZUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisgICAgcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSU5EKGlmVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYwppbmRleCA4YjliN2NlLi5iYjNlNzM2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYwpAQCAtMTQsNiArMTQsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjksNiArMzAsOSBAQAogCiAjaW5jbHVkZSAiaWZYVGFibGVfaW50ZXJmYWNlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlmVGFibGVfY29udGFpbmVyX2dldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlmVGFibGVfY29udGFpbmVyX3NpemUpCisKIC8qCiAgKiBub3Qgc3VyZSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgc2V0IGZvciBwcm9taXNjdW91cyBtb2RlLCBiZWNhdXNlCiAgKiAxKSBjYXJlZnVsIHRob3VnaHQgc2hvdWxkIGdvIGludG8gYW55IHNldHRhYmxlIG9iamVjdCB0aGF0IHBlcmZvcm1zCkBAIC0zOCw5ICs0Miw4IEBACiAgKi8KICN1bmRlZiBORVRTTk1QX0VOQUJMRV9QUk9NSVNDVU9VU01PREVfU0VUCiAKLW9pZCAgICAgICAgICAgICBpZlhUYWJsZV9vaWRbXSA9IHsgSUZYVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaWZYVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlmWFRhYmxlX29pZCk7Ci1jb25zdCBjaGFyICAgICAqcm93X3Rva2VuID0gImlmWFRhYmxlIjsKK2NvbnN0IG9pZCAgICAgICBpZlhUYWJsZV9vaWRbXSA9IHsgSUZYVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaWZYVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlmWFRhYmxlX29pZCk7CiAKIGlmWFRhYmxlX3JlZ2lzdHJhdGlvbiBpZlhUYWJsZV91c2VyX2NvbnRleHQ7CiBzdGF0aWMgaWZYVGFibGVfcmVnaXN0cmF0aW9uICppZlhUYWJsZV91c2VyX2NvbnRleHRfcDsKQEAgLTIzNiw5ICsyMzksOSBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogc2F2ZSBjaGFuZ2VkIHJvd3MsIGlmIHlvdSBoYXZlbid0IGFscmVhZHkKKyAgICAgICAgICAgICAqIG5vdGlmeSBsaWJyYXJ5IHRvIHNhdmUgY2hhbmdlZCByb3dzCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfc3RvcmUobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7CiAgICAgICAgIH0KIApAQCAtNDAwLDcgKzQwMyw3IEBACiBpZk5hbWVfZ2V0KGlmWFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCBjaGFyICoqaWZOYW1lX3ZhbF9wdHJfcHRyLAogICAgICAgICAgICBzaXplX3QgKiBpZk5hbWVfdmFsX3B0cl9sZW5fcHRyKQogewotICAgIGludCAgICAgICAgICAgICB0bXBfbGVuOworICAgIHNpemVfdCB0bXBfbGVuOwogCiAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLwogICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGlmTmFtZV92YWxfcHRyX3B0cikKQEAgLTQyNSw3ICs0MjgsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZOYW1lIGRhdGEKICAgICAgICAgICovCi0gICAgICAgICgqaWZOYW1lX3ZhbF9wdHJfcHRyKSA9IG1hbGxvYyh0bXBfbGVuKTsKKyAgICAgICAgKCppZk5hbWVfdmFsX3B0cl9wdHIpID0gKGNoYXIqKW1hbGxvYyh0bXBfbGVuKTsKICAgICAgICAgaWYgKE5VTEwgPT0gKCppZk5hbWVfdmFsX3B0cl9wdHIpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwpAQCAtMTQ5Myw3ICsxNDk2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIGlmQWxpYXMgZGF0YQogICAgICAgICAgKi8KLSAgICAgICAgKCppZkFsaWFzX3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICgqaWZBbGlhc192YWxfcHRyX3B0cikgPSAoY2hhciopCiAgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5pZkFsaWFzX2xlbiAqCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZBbGlhc1swXSkpOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmQWxpYXNfdmFsX3B0cl9wdHIpKSB7CkBAIC0xNTczLDYgKzE1NzYsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZV9nZXQgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogCiAvKiogQH0gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTMxLDUgKzI1MzUsNyBAQAogICAgIHJldHVybiByYzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZYVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzICovCiAKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qKiBAfSAqLwogLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oCmluZGV4IGUzMmFjYzguLmJhMjJmOTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oCkBAIC05NCw4ICs5NCw4IEBACiAgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqaWZYVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlmWFRhYmxlX21pYl9pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlmWFRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpZlhUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaWZYVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlmWFRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpZlhUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjMxLjEuMSwgbGVuZ3RoOiA5CiAgICAgICovCiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBpbnQgICAgICAgICAgICAgaWZYVGFibGVfdW5kb19zZXR1cChpZlhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgIGlmWFRhYmxlX3VuZG9fY2xlYW51cChpZlhUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwpAQCAtNDM4LDcgKzQzOCw3IEBACiAKIAogICAgIGludCAgICAgICAgICAgICBpZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoaWZYVGFibGVfcm93cmVxX2N0eCAqIGN0eCk7Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oCmluZGV4IDcyOGVmNTcuLjY3ZTE5OTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgKQEAgLTY3LDcgKzY3LDExIEBACiAgICAgICogVE9ETzo0MDU6cjogUmV2aWV3IElGWFRBQkxFX1NFVFRBQkxFX0NPTFMgbWFjcm8uCiAgICAgICogT1IgdG9nZXRoZXIgYWxsIHRoZSB3cml0YWJsZSBjb2xzLgogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgSUZYVEFCTEVfU0VUVEFCTEVfQ09MUyAoQ09MVU1OX0lGTElOS1VQRE9XTlRSQVBFTkFCTEVfRkxBRyB8IENPTFVNTl9JRkFMSUFTX0ZMQUcpCisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisjZGVmaW5lIElGWFRBQkxFX1NFVFRBQkxFX0NPTFMgMAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgLyoKICAgICAgKiBOT1RFUyBvbiBlbnVtcwogICAgICAqID09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggZDliMTg0Ny4uMjNiNTBkMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsOCBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00OCw2ICs1MCwxNiBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhY2hlX2ZpbmRfYnlfb2lkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MSwxOSArOTMsMjMgQEAKIHN0YXRpYyB2b2lkICAgICBfaWZYVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmWFRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaWZYVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpZlhUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaWZYVGFibGVfcmVnaXN0cmF0aW9uICoKIGlmWFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaWZYVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaWZYVGFibGVfcmVnaXN0cmF0aW9uICoKIGlmWFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaWZYVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAxLDEyICsxMTcsMTUgQEAKICAgICBpZlhUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlmWFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlmWFRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTMwLDcgKzE0OSw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9wb3N0X3JlcXVlc3Q7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZYVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZYVGFibGVfY2hlY2tfb2JqZWN0czsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTQ1LDcgKzE2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciwgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIGlmWFRhYmxlX2RhdGEgICppZlhUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOwogCkBAIC0xODgsNyArMjA3LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSUZYVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElGWFRBQkxFX01BWF9DT0w7CkBAIC0yMjMsNyArMjQyLDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfaWZYVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNDYsNyArMjY1LDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfaWZYVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjYwLDExICsyNzksMTQgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlmWFRhYmxlIiwgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZYVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlhUYWJsZV9vaWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZiAgICAgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KKyAgICAgICAgICAgICk7CisKICAgICBpZiAoTlVMTCA9PSByZWdpbmZvKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBpZlhUYWJsZVxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI4Miw3ICszMDQsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzA1LDcgKzMyNyw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC0zNTIsNiArMzc0LDcgQEAKICAqIEBpbnRlcm5hbAogICogU2h1dGRvd24gdGhlIHRhYmxlIGlmWFRhYmxlCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9TSFVURE9XTl9JTlRFUkZBQ0UKIHZvaWQKIF9pZlhUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoaWZYVGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0cikKIHsKQEAgLTM2MCw2ICszODMsNyBAQAogICAgICAqLwogICAgIF9pZlhUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmlmWFRhYmxlX2lmX2N0eCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9TSFVURE9XTl9JTlRFUkZBQ0UgKi8KIAogdm9pZAogaWZYVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCkBAIC01NTIsNyArNTc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTYwNyw3ICs2MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX29iamVjdF9sb29rdXAiLApAQCAtODQ1LDcgKzg2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTkxMiw3ICs5MzYsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lmWFRhYmxlX2dldF92YWx1ZXMgKi8KIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTE2Miw3ICsxMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTExOTMsNyArMTIxNyw2IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaWZYVGFibGVfY2hlY2tfb2JqZWN0cyAqLwogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIFNFVDogY2hlY2sgZGVwZW5kZW5jaWVzCkBAIC0xMjEwLDcgKzEyMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CkBAIC0xMjk0LDcgKzEzMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTEzNTcsNyArMTM4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTQ1OSw3ICsxNDgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNTA2LDcgKzE1MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV9jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNTM5LDcgKzE1NjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX3VuZG9fY29tbWl0IiwKQEAgLTE2MzIsNyArMTY1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAKQEAgLTE2ODcsNyArMTcxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwKQEAgLTE3MDksNyArMTczMiw4IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pZlhUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTc4NCw3ICsxODA4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIHVfaW50IGNvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Zik7CiAKLXN0YXRpYyBjaGFyICAgICByb3dfdG9rZW5bXSA9ICJpZlhUYWJsZSI7CitzdGF0aWMgY29uc3QgY2hhciByb3dfdG9rZW5bXSA9ICJpZlhUYWJsZSI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICpfaW5pdF9wZXJzaXN0ZW5jZSBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGFibGUKQEAgLTE3OTgsMTMgKzE4MjIsMTcgQEAKIHZvaWQKIGlmWFRhYmxlX2NvbnRhaW5lcl9pbml0X3BlcnNpc3RlbmNlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCiB7CisgICAgbmV0c25tcF9jb250YWluZXIgKipjb250YWluZXJfcDsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCByb3dfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lmWFRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZSwgTlVMTCwgTlVMTCk7CisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyKTsKKyAgICBjb250YWluZXJfcCA9IG5ldHNubXBfbWVtZHVwKCZjb250YWluZXIsIHNpemVvZihjb250YWluZXIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXJfcCk7CiAgICAgcmMgPSBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3NhdmVfcm93cywgY29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lmWFRhYmxlX2NvbnRhaW5lcl9zYXZlX3Jvd3MsIGNvbnRhaW5lcl9wKTsKIAogICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgZm9yIFNUT1JFX0RBVEEgY2FsbGJhY2sgIgpAQCAtMTgyNyw3ICsxODU1LDcgQEAKICAgICAvKgogICAgICAqIHNhdmUgYWxsIHJvd3MKICAgICAgKi8KLSAgICBDT05UQUlORVJfRk9SX0VBQ0goKG5ldHNubXBfY29udGFpbmVyICopIGNsaWVudGFyZywKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goKihuZXRzbm1wX2NvbnRhaW5lciAqKiljbGllbnRhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKQogICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3Jvd19zYXZlLCB0eXBlKTsKIApAQCAtMTg3MCw3ICsxODk4LDcgQEAKICAgICAgKiBiZSB0cmVhdGVkIGEgbGl0dGxlIGRpZmZlcmVudGx5LiBTcGVjaWZpY2FsbHksIHlvdSB3aWxsIG5lZWQKICAgICAgKiAoNCAqIGxlbikgKyA0IFszIEFTQ0lJIGNoYXJzIHBlciBieXRlICsgMSBmb3IgLiwgKyA0IGZvciBsZW5dLgogICAgICAqCi0gICAgICogMykgQWxzbywgcmVtZWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBlcmF0b3IKKyAgICAgKiAzKSBBbHNvLCByZW1lbWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBhcmF0b3IKICAgICAgKiBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgZWFjaCBjb2x1bW4gaXMgcHJlZml4ZWQgYnkgdGhlCiAgICAgICogY29sdW1uIG51bWJlciBhbmQgYSBzZW1pY29sb24uIFRvIGFsbG93IGZvciB0aGUgbWF4aW11bQogICAgICAqIGNvbHVtbiB2YWx1ZXMsIDEyIGJ5dGVzIFsxMSBmb3Igb2lkICsgMSBmb3IgJzonXSBwZXIKQEAgLTE5OTEsNyArMjAxOSw3IEBACiAgICAgICAgICAgICAgICAgICJfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlXG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByb3dyZXFfY3R4ID0gQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAmaW5kZXgpOworICAgIHJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAmaW5kZXgpOwogICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiZXJyb3IgZmluZGluZyByb3cgaW5kZXggaW4gIgogICAgICAgICAgICAgICAgICAiX2lmWFRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZVxuIik7CkBAIC0yMDAyLDcgKzIwMzAsNyBAQAogICAgICAqIGxvb3AgdGhyb3VnaCBhbmQgZ2V0IGVhY2ggY29sdW1uCiAgICAgICovCiAgICAgYnVmID0gc2tpcF93aGl0ZShidWYpOwotICAgIHdoaWxlICgoTlVMTCAhPSBidWYpICYmIGlzZGlnaXQoKmJ1ZikpIHsKKyAgICB3aGlsZSAoKE5VTEwgIT0gYnVmKSAmJiBpc2RpZ2l0KCpidWYgJiAweEZGKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBleHRyYWN0IGNvbHVtbiwgc2tpcCAnOicKICAgICAgICAgICovCkBAIC0yMDgxLDcgKzIxMDksOCBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ09MVU1OX0lGQUxJQVM6ICAgLyoqIERpc3BsYXlTdHJpbmcgPSBBU05fT0NURVRfU1RSICovCi0gICAgICAgIGJ1ZiA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGJ1Ziwgcm93cmVxX2N0eC0+ZGF0YS5pZkFsaWFzLAorICAgICAgICBidWYgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgcm93cmVxX2N0eC0+ZGF0YS5pZkFsaWFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXNfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTIxNDMsNiArMjE3Miw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaWZYVGFibGVfcm93cmVxX2N0eCAqCiBpZlhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaWZYVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKIHsKQEAgLTIxNjQsNyArMjE5NCw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChpZlhUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisgICAgcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChpZlhUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlLmgKaW5kZXggZGFjNzBjZS4uMmM3MzFhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oCkBAIC0yMiw4ICsyMiwxMiBAQAogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4KQogY29uZmlnX3JlcXVpcmUoaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNyApIHx8IGRlZmluZWQoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkNCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zeXNjdGwpCisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKCBIQVZFX01JQjJfSVBJRlNUQVRTRU5UUllfVCApCitjb25maWdfcmVxdWlyZShpcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zb2xhcmlzKQogI2Vsc2UKLSNlcnJvciAidGhlIHJvdXRlIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybS4iCitjb25maWdfZXJyb3IodGhlIHJvdXRlIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LikKICNlbmRpZgogCiAvKiogbmVlZCBpbnRlcmZhY2UgZm9yIGlmSW5kZXggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMKaW5kZXggOTliM2RlNC4uODRjMTgxMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMKQEAgLTU1LDYgKzU1LDggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoIl9yb3V0ZSIpOworCiAgICAgcmMgPSAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfY29udGFpbmVyX2FyY2hfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOwogICAgIGlmICgwICE9IHJjKSB7CiAgICAgICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgTkVUU05NUF9BQ0NFU1NfUk9VVEVfRlJFRV9OT0ZMQUdTKTsKQEAgLTI0MCw4ICsyNDIsNyBAQAogICAgIGxocy0+cnRfcHJvdG8gPSByaHMtPnJ0X3Byb3RvOwogCiAjaWZkZWYgVVNJTkdfSVBfRk9SV0FSRF9NSUJfSVBDSURSUk9VVEVUQUJMRV9JUENJRFJST1VURVRBQkxFX01PRFVMRQotICAgIGlmIChOVUxMICE9IGxocy0+cnRfaW5mbykKLSAgICAgICAgU05NUF9GUkVFKGxocy0+cnRfaW5mbyk7CisgICAgU05NUF9GUkVFKGxocy0+cnRfaW5mbyk7CiAgICAgaWYgKE5VTEwgIT0gcmhzLT5ydF9pbmZvKQogICAgICAgICBzbm1wX2Nsb25lX21lbSgodm9pZCAqKikgJmxocy0+cnRfaW5mbywgcmhzLT5ydF9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICByaHMtPnJ0X2luZm9fbGVuICogc2l6ZW9mKG9pZCkpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMKaW5kZXggZGU0MjkyMC4uZmY4OTE2MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jCkBAIC01NCwxMiArNTQsOSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmg+CiAKICNpbmNsdWRlICJpcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgiCkBAIC02OSwxMCArNjYsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCiAjICAgZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNICiAjICAgZGVmaW5lIHJ0X2hhc2ggcnRfcGFkMQogI2VuZGlmCiAKQEAgLTEwMSw3ICs5OCw3IEBACiAKICAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBORVRTTk1QX1JPVVRFX1dSSVRFX1BST1RPQ09MKTsKICAgICBpZiAocyA8IDApIHsKLSAgICAgICAgc25tcF9sb2dfcGVycm9yKCJzb2NrZXQiKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJuZXRzbm1wX2lvY3RsX3JvdXRlX3NldF92NDogc29ja2V0Iik7CiAgICAgICAgIHJldHVybiAtMzsKICAgICB9CiAKQEAgLTExMCw3ICsxMDcsNyBAQAogICAgIGRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICBtZW1jcHkoJmRzdC5zaW5fYWRkci5zX2FkZHIsIGVudHJ5LT5ydF9kZXN0LCA0KTsKICAgICBERUJVR1NUUiA9IGluZXRfbnRvYShkc3Quc2luX2FkZHIpOwotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCIqKiogcm91dGUgdG8gJXNcbiIsIERFQlVHU1RSKSk7CisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZSIsImFkZCByb3V0ZSB0byAlc1xuIiwgREVCVUdTVFIpKTsKIAogICAgIGdhdGV3YXkuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgbWVtY3B5KCZnYXRld2F5LnNpbl9hZGRyLnNfYWRkciwgZW50cnktPnJ0X25leHRob3AsIDQpOwpAQCAtMTE4LDcgKzExNSwxMCBAQAogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCIgICAgdmlhICVzXG4iLCBERUJVR1NUUikpOwogCiAgICAgbWFzay5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICBtYXNrLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDApOworICAgIGlmIChlbnRyeS0+cnRfcGZ4X2xlbiAhPSAwKQorCW1hc2suc2luX2FkZHIuc19hZGRyID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGVudHJ5LT5ydF9wZnhfbGVuKTsKKyAgICBlbHNlCisJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBlbnRyeS0+cnRfbWFzazsKICAgICBERUJVR1NUUiA9IGluZXRfbnRvYShtYXNrLnNpbl9hZGRyKTsKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlIiwiICAgIG1hc2sgJXNcbiIsIERFQlVHU1RSKSk7CiAKQEAgLTEzNywzMCArMTM3LDMxIEBACiAjZW5kaWYKIAogICAgIHJjID0gaW9jdGwocywgU0lPQ0FERFJULCAoY2FkZHJfdCkgJiByb3V0ZSk7Ci0gICAgY2xvc2Uocyk7CiAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImlvY3RsIik7Ci0gICAgICAgIHJldHVybiAtNDsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJuZXRzbm1wX2lvY3RsX3JvdXRlX3NldF92NDogaW9jdGwiKTsKKyAgICAgICAgcmMgPSAtNDsKICAgICB9CisgICAgY2xvc2Uocyk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcmM7CiB9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQgU0lPQ0RFTFJUICYmICFkZWZpbmVkKGlyaXg2KQogaW50IF9uZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NChuZXRzbm1wX3JvdXRlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGRzdDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0LCBtYXNrOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBnYXRld2F5OwogICAgIGludCAgICAgICAgICAgICBzLCByYzsKICAgICBSVEVOVFJZICAgICAgICAgcm91dGU7CisgICAgY2hhciAgICAgICAgICAgKkRFQlVHU1RSOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBlbnRyeSk7IC8qIGNoZWNrZWQgaW4gbmV0c25tcF9hcmNoX3JvdXRlX2RlbGV0ZSAqLwogICAgIG5ldHNubXBfYXNzZXJ0KCg0ID09IGVudHJ5LT5ydF9kZXN0X2xlbikgJiYgKDQgPT0gZW50cnktPnJ0X25leHRob3BfbGVuKSk7CiAKICAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBORVRTTk1QX1JPVVRFX1dSSVRFX1BST1RPQ09MKTsKICAgICBpZiAocyA8IDApIHsKLSAgICAgICAgc25tcF9sb2dfcGVycm9yKCJzb2NrZXQiKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJuZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NDogc29ja2V0Iik7CiAgICAgICAgIHJldHVybiAtMzsKICAgICB9CiAKQEAgLTE2OCwxMSArMTY5LDIwIEBACiAKICAgICBkc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgbWVtY3B5KCZkc3Quc2luX2FkZHIuc19hZGRyLCBlbnRyeS0+cnRfZGVzdCwgNCk7CisgICAgREVCVUdTVFIgPSBpbmV0X250b2EoZHN0LnNpbl9hZGRyKTsKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlIiwiZGVsIHJvdXRlIHRvICVzXG4iLCBERUJVR1NUUikpOworCisgICAgbWFzay5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBpZiAoZW50cnktPnJ0X3BmeF9sZW4gIT0gMCkKKwltYXNrLnNpbl9hZGRyLnNfYWRkciA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfbWFzayhlbnRyeS0+cnRfcGZ4X2xlbik7CisgICAgZWxzZQorCW1hc2suc2luX2FkZHIuc19hZGRyID0gZW50cnktPnJ0X21hc2s7CiAKICAgICBnYXRld2F5LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogICAgIG1lbWNweSgmZ2F0ZXdheS5zaW5fYWRkci5zX2FkZHIsIGVudHJ5LT5ydF9uZXh0aG9wLCA0KTsKIAogICAgIG1lbWNweSgmcm91dGUucnRfZHN0LCAmZHN0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgbWVtY3B5KCZyb3V0ZS5ydF9nZW5tYXNrLCAmbWFzaywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwogICAgIG1lbWNweSgmcm91dGUucnRfZ2F0ZXdheSwgJmdhdGV3YXksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIAogICAgIGlmICgzMiA9PSBlbnRyeS0+cnRfcGZ4X2xlbikKQEAgLTE4NiwxMSArMTk2LDExIEBACiAjZW5kaWYKIAogICAgIHJjID0gaW9jdGwocywgU0lPQ0RFTFJULCAoY2FkZHJfdCkgJiByb3V0ZSk7Ci0gICAgY2xvc2Uocyk7CiAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImlvY3RsIik7CisgICAgICAgIHNubXBfbG9nX3BlcnJvcigibmV0c25tcF9pb2N0bF9yb3V0ZV9kZWxldGVfdjQ6IGlvY3RsIik7CiAgICAgICAgIHJjID0gLTQ7CiAgICAgfQorICAgIGNsb3NlKHMpOwogCiAgICAgcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMKaW5kZXggNmJmNmIwNC4uMGY4MGZlOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICogZmV0Y2ggcm91dGVzIGZyb20gdGhlIHByb2MgZmlsZS1zeXN0ZW06CiAgICAgICovCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3JvdXRlIiwgInIiKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9yb3V0ZVxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9yb3V0ZVxuIikpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCkBAIC03MSw5ICs3MSw5IEBACiAKICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgIHJ0ZW50X25hbWVbMzJdOwotICAgICAgICBpbnQgICAgICAgICAgICAgcmVmY250LCBmbGFncywgcmM7CisgICAgICAgIGludCAgICAgICAgICAgICByZWZjbnQsIHJjOwogICAgICAgICB1aW50MzJfdCAgICAgICAgZGVzdCwgbmV4dGhvcCwgbWFzazsKLSAgICAgICAgdW5zaWduZWQgICAgICAgIHVzZTsKKyAgICAgICAgdW5zaWduZWQgICAgICAgIGZsYWdzLCB1c2U7CiAKICAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9lbnRyeV9jcmVhdGUoKTsKIApAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgKiBCRSBldGgwICAwMDAwMDAwMCBDMEE4MDEwMSAwMDAzICAwICAgICAgMCAgIDAgICBGRkZGRkZGRiAxNTAwIDAgICAwIAogICAgICAgICAgKiBMRSBldGgwICAwMDAwMDAwMCAwMTAxQThDMCAwMDAzICAwICAgICAgMCAgIDAgICAwMEZGRkZGRiAgICAwIDAgICAwICAKICAgICAgICAgICovCi0gICAgICAgIHJjID0gc3NjYW5mKGxpbmUsICIlcyAleCAleCAleCAldSAlZCAlZCAleCAlKmQgJSpkICUqZFxuIiwKKyAgICAgICAgcmMgPSBzc2NhbmYobGluZSwgIiVzICV4ICV4ICV4ICVkICV1ICVkICV4ICUqZCAlKmQgJSpkXG4iLAogICAgICAgICAgICAgICAgICAgICBydGVudF9uYW1lLCAmZGVzdCwgJm5leHRob3AsCiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAqIFhYWDogZml4IHR5cGUgb2YgdGhlIGFyZ3MgCkBAIC0xNjEsMTIgKzE2MSwxMiBAQAogICAgICAgICAgKiBhcyB0aGUgcG9saWN5LCB0byBkaXN0aW5ndWlzZSBiZXR3ZWVuIHRoZW0uIEhvcGVmdWxseSB0aGlzIGlzCiAgICAgICAgICAqIHVuaXF1ZS4KICAgICAgICAgICogeHh4LXJrczogSXQgc2hvdWxkIHJlYWxseSBvbmx5IGJlIGZvciB0aGUgZHVwbGljYXRlIGNhc2UsIGJ1dCB0aGF0Ci0gICAgICAgICAqICAgICB3b3VsZCBiZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW5JIHdhbnQgdG8gZ2V0IGludG8gbm93LiBGaXggbGF0ZXIuCisgICAgICAgICAqICAgICB3b3VsZCBiZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gSSB3YW50IHRvIGdldCBpbnRvIG5vdy4gRml4IGxhdGVyLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKDAgPT0gbmV4dGhvcCkgewotICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeSA9ICZlbnRyeS0+aWZfaW5kZXg7Ci0gICAgICAgICAgICBlbnRyeS0+cnRfcG9saWN5X2xlbiA9IDE7Ci0gICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9BQ0NFU1NfUk9VVEVfUE9MSUNZX1NUQVRJQzsKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wb2xpY3kgPSBjYWxsb2MoMywgc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeVsyXSA9IGVudHJ5LT5pZl9pbmRleDsKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wb2xpY3lfbGVuID0gc2l6ZW9mKG9pZCkqMzsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTIwMSw3ICsyMDEsNiBAQAogICAgIEZJTEUgICAgICAgICAgICppbjsKICAgICBjaGFyICAgICAgICAgICAgbGluZVsyNTZdOwogICAgIG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5ID0gTlVMTDsKLSAgICBzdGF0aWMgaW50ICAgICAgbG9nX29wZW5fZXJyID0gMTsKIAogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKICAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY2XG4iKSk7CkBAIC0yMTIsMTggKzIxMSwxMCBAQAogICAgICAqIGZldGNoIHJvdXRlcyBmcm9tIHRoZSBwcm9jIGZpbGUtc3lzdGVtOgogICAgICAqLwogICAgIGlmICghKGluID0gZm9wZW4oIi9wcm9jL25ldC9pcHY2X3JvdXRlIiwgInIiKSkpIHsKLSAgICAgICAgaWYgKDEgPT0gbG9nX29wZW5fZXJyKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2lwdjZfcm91dGVcbiIpOwotICAgICAgICAgICAgbG9nX29wZW5fZXJyID0gMDsKLSAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgiOTphY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9pcHY2X3JvdXRlXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0gICAgLyoKLSAgICAgKiBpZiB3ZSB0dXJuZWQgb2ZmIGxvZ2dpbmcgb2Ygb3BlbiBlcnJvcnMsIHR1cm4gaXQgYmFjayBvbiBub3cgdGhhdAotICAgICAqIHdlIGhhdmUgYmVlbiBhYmxlIHRvIG9wZW4gdGhlIGZpbGUuCi0gICAgICovCi0gICAgaWYgKDAgPT0gbG9nX29wZW5fZXJyKQotICAgICAgICBsb2dfb3Blbl9lcnIgPSAxOworICAgIAogICAgIGZnZXRzKGxpbmUsc2l6ZW9mKGxpbmUpLGluKTsgLyogc2tpcCBoZWFkZXIgKi8KICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgIGNfbmFtZVtJRk5BTVNJWisxXTsKQEAgLTMyMCwxMSArMzExLDExIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIG9uIGxpbnV4LCBkZWZhdWx0IHJvdXRlcyBhbGwgbG9vayBhbGlrZSwgYW5kIHdvdWxkIGhhdmUgdGhlIHNhbWUKICAgICAgICAgICogaW5kZXhlZCBiYXNlZCBvbiBkZXN0IGFuZCBuZXh0IGhvcC4gU28gd2UgdXNlIG91ciBhcmJpdHJhcnkgaW5kZXgKLSAgICAgICAgICogYXMgdGhlIHBvbGljeSwgdG8gZGlzdGluZ3Vpc2UgYmV0d2VlbiB0aGVtLgorICAgICAgICAgKiBhcyB0aGUgcG9saWN5LCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uCiAgICAgICAgICAqLwotICAgICAgICBlbnRyeS0+cnRfcG9saWN5ID0gJmVudHJ5LT5uc19ydF9pbmRleDsKLSAgICAgICAgZW50cnktPnJ0X3BvbGljeV9sZW4gPSAxOwotICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9BQ0NFU1NfUk9VVEVfUE9MSUNZX1NUQVRJQzsKKyAgICAgICAgZW50cnktPnJ0X3BvbGljeSA9IGNhbGxvYygzLCBzaXplb2Yob2lkKSk7CisgICAgICAgIGVudHJ5LT5ydF9wb2xpY3lbMl0gPSBlbnRyeS0+bnNfcnRfaW5kZXg7CisgICAgICAgIGVudHJ5LT5ydF9wb2xpY3lfbGVuID0gc2l6ZW9mKG9pZCkqMzsKICNlbmRpZgogCiAgICAgICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zb2xhcmlzLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zb2xhcmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4YWQyMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKworI2luY2x1ZGUgPGluZXQvaXAuaD4KKyNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKworI2luY2x1ZGUgImlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmgiCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmgiCisKK3N0YXRpYyBpbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9sb25nICpjb3VudCk7CitzdGF0aWMgaW50IF9sb2FkX3Y2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfbG9uZyAqY291bnQpOworCisvKiogYXJjaCBzcGVjaWZpYyBsb2FkCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgbm8gY29udGFpbmVyIHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3Qgb3BlbiBkYXRhIGZpbGUKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgdV9sb25nICAgICAgICAgIGNvdW50ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3Nfcm91dGVcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZF92NChjb250YWluZXIsICZjb3VudCk7CisgICAgCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIGlmKCgwICE9IHJjKSB8fCAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0xPQURfSVBWNF9PTkxZKSkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyoKKyAgICAgKiBsb2FkIGlwdjYuIGlwdjYgbW9kdWxlIG1pZ2h0IG5vdCBiZSBsb2FkZWQsCisgICAgICogc28gaWdub3JlIC0yIGVyciAoZmlsZSBub3QgZm91bmQpCisgICAgICovCisgICAgcmMgPSBfbG9hZF92Nihjb250YWluZXIsICZjb3VudCk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IDA7CisjZW5kaWYKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF9yb3V0ZV9jcmVhdGUobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ICE9IGVudHJ5LT5ydF9kZXN0X2xlbikgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6cm91dGU6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIHJldHVybiBfbmV0c25tcF9pb2N0bF9yb3V0ZV9zZXRfdjQoZW50cnkpOyAqLworICAgIHJldHVybiAtMjsKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF9yb3V0ZV9kZWxldGUobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ICE9IGVudHJ5LT5ydF9kZXN0X2xlbikgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6cm91dGU6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIHJldHVybiBfbmV0c25tcF9pb2N0bF9yb3V0ZV9kZWxldGVfdjQoZW50cnkpOyAqLworICAgIHJldHVybiAtMjsKK30KKworCitzdGF0aWMgaW50CitJUF9DbXBfUm91dGUodm9pZCAqYWRkciwgdm9pZCAqZXApCit7CisgICAgbWliMl9pcFJvdXRlRW50cnlfdCAqRXAgPSBlcCwgKkFkZHIgPSBhZGRyOworCisgICAgaWYgKChFcC0+aXBSb3V0ZURlc3QgPT0gQWRkci0+aXBSb3V0ZURlc3QpICYmCisgICAgICAgIChFcC0+aXBSb3V0ZU5leHRIb3AgPT0gQWRkci0+aXBSb3V0ZU5leHRIb3ApICYmCisgICAgICAgIChFcC0+aXBSb3V0ZVR5cGUgPT0gQWRkci0+aXBSb3V0ZVR5cGUpICYmCisgICAgICAgIChFcC0+aXBSb3V0ZVByb3RvID09IEFkZHItPmlwUm91dGVQcm90bykgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlTWFzayA9PSBBZGRyLT5pcFJvdXRlTWFzaykgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9tYXhfZnJhZyA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9tYXhfZnJhZykgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9ydHQgPT0gQWRkci0+aXBSb3V0ZUluZm8ucmVfcnR0KSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX3JlZiA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9yZWYpICYmCisgICAgICAgIChFcC0+aXBSb3V0ZUluZm8ucmVfZnJhZ19mbGFnID09IEFkZHItPmlwUm91dGVJbmZvLnJlX2ZyYWdfZmxhZykgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9zcmNfYWRkciA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9zcmNfYWRkcikgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9pcmVfdHlwZSA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9pcmVfdHlwZSkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9vYnBrdCA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9vYnBrdCkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9pYnBrdCA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9pYnBrdCkKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gKDApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgLyogTm90IGZvdW5kICovCit9CisKKworc3RhdGljIGludAorSVA2X0NtcF9Sb3V0ZSh2b2lkICphZGRyLCB2b2lkICplcCkKK3sKKyAgICBtaWIyX2lwdjZSb3V0ZUVudHJ5X3QgKkVwID0gZXAsICpBZGRyID0gYWRkcjsKKworICAgIGlmICgobWVtY21wKCZFcC0+aXB2NlJvdXRlRGVzdCwgJkFkZHItPmlwdjZSb3V0ZURlc3QsIDE2KSA9PSAwKSAmJgorICAgICAgICAobWVtY21wKCZFcC0+aXB2NlJvdXRlTmV4dEhvcCwgJkFkZHItPmlwdjZSb3V0ZU5leHRIb3AsIDE2KSA9PSAwKSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZVR5cGUgPT0gQWRkci0+aXB2NlJvdXRlVHlwZSkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX21heF9mcmFnID09IEFkZHItPmlwdjZSb3V0ZUluZm8ucmVfbWF4X2ZyYWcpICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9ydHQgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9ydHQpICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9yZWYgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9yZWYpICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9mcmFnX2ZsYWcgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9mcmFnX2ZsYWcpICYmCisgICAgICAgIChtZW1jbXAoJkVwLT5pcHY2Um91dGVJbmZvLnJlX3NyY19hZGRyLCAmQWRkci0+aXB2NlJvdXRlSW5mby5yZV9zcmNfYWRkciwgMTYpID09IDApICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9pcmVfdHlwZSA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX2lyZV90eXBlKSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZUluZm8ucmVfb2Jwa3QgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9vYnBrdCkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX2licGt0ID09IEFkZHItPmlwdjZSb3V0ZUluZm8ucmVfaWJwa3QpCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgIC8qIE5vdCBmb3VuZCAqLworfQorCisKK3N0YXRpYyBpbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9sb25nICpjb3VudCkKK3sKKyAgICBuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeTsKKyAgICBtaWIyX2lwUm91dGVFbnRyeV90IEN1cmVudHJ5LCBOZXh0ZW50cnk7CisgICAgaW50IHJlcV90eXBlOworCisgICAgZm9yIChOZXh0ZW50cnkuaXBSb3V0ZURlc3QgPSAodV9sb25nKSAtMiwgcmVxX3R5cGUgPSBHRVRfRklSU1Q7OworICAgICAgICAgICAgIE5leHRlbnRyeSA9IEN1cmVudHJ5LCByZXFfdHlwZSA9IEdFVF9ORVhUKSB7CisJaWYgKGdldE1pYnN0YXQoTUlCX0lQX1JPVVRFLCAmQ3VyZW50cnksIHNpemVvZihtaWIyX2lwUm91dGVFbnRyeV90KSwKKwkJICAgICAgIHJlcV90eXBlLCAmSVBfQ21wX1JvdXRlLCAmTmV4dGVudHJ5KSAhPSAwKQorCSAgICBicmVhazsKKyNpZmRlZiBIQVZFX0RFRklORURfSVJFX0NBQ0hFCisJaWYgKEN1cmVudHJ5LmlwUm91dGVJbmZvLnJlX2lyZV90eXBlICYgSVJFX0NBQ0hFKQorCSAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBIQVZFX0RFRklORURfSVJFX0NBQ0hFICovCisJaWYgKEN1cmVudHJ5LmlwUm91dGVJbmZvLnJlX2lyZV90eXBlICYgSVJFX0JST0FEQ0FTVCkKKwkgICAgY29udGludWU7CisJZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9lbnRyeV9jcmVhdGUoKTsKKwlDdXJlbnRyeS5pcFJvdXRlSWZJbmRleC5vX2J5dGVzW0N1cmVudHJ5LmlwUm91dGVJZkluZGV4Lm9fbGVuZ3RoXSA9ICdcMCc7CisJZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoCisgICAgICAgICAgICAgICAgQ3VyZW50cnkuaXBSb3V0ZUlmSW5kZXgub19ieXRlcyk7CisJZW50cnktPm5zX3J0X2luZGV4ID0gZW50cnktPmlmX2luZGV4OworCisJZW50cnktPnJ0X2Rlc3RfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworCWVudHJ5LT5ydF9kZXN0X2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5ydF9kZXN0LCAmQ3VyZW50cnkuaXBSb3V0ZURlc3QsIDQpOworCW1lbWNweSgmZW50cnktPnJ0X21hc2ssICZDdXJlbnRyeS5pcFJvdXRlTWFzaywgNCk7CisKKwllbnRyeS0+cnRfbmV4dGhvcF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisJZW50cnktPnJ0X25leHRob3BfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnJ0X25leHRob3AsICZDdXJlbnRyeS5pcFJvdXRlTmV4dEhvcCwgNCk7CisKKwllbnRyeS0+cnRfcGZ4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbihDdXJlbnRyeS5pcFJvdXRlTWFzayk7CisJZW50cnktPnJ0X3R5cGUgPSBDdXJlbnRyeS5pcFJvdXRlVHlwZTsKKwllbnRyeS0+cnRfcHJvdG8gPSBDdXJlbnRyeS5pcFJvdXRlUHJvdG87CisJZW50cnktPnJ0X2FnZSA9IEN1cmVudHJ5LmlwUm91dGVBZ2U7CisJZW50cnktPnJ0X21ldHJpYzEgPSBDdXJlbnRyeS5pcFJvdXRlTWV0cmljMTsKKwllbnRyeS0+cnRfbWV0cmljMiA9IEN1cmVudHJ5LmlwUm91dGVNZXRyaWMyOworCWVudHJ5LT5ydF9tZXRyaWMzID0gQ3VyZW50cnkuaXBSb3V0ZU1ldHJpYzM7CisJZW50cnktPnJ0X21ldHJpYzQgPSBDdXJlbnRyeS5pcFJvdXRlTWV0cmljNDsKKworCS8qCisJICogaW5zZXJ0IGludG8gY29udGFpbmVyCisJICovCisJaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisJICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwgImVycm9yIHdpdGggcm91dGVfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisJICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2ZyZWUoZW50cnkpOworCSAgICBjb250aW51ZTsKKwl9CisJKmNvdW50Kys7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX2xvYWRfdjYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9sb25nICpjb3VudCkKK3sKKyAgICBuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeTsKKyAgICBtaWIyX2lwdjZSb3V0ZUVudHJ5X3QgQ3VyZW50cnksIE5leHRlbnRyeTsKKyAgICBpbnQgcmVxX3R5cGU7CisKKyAgICBtZW1zZXQoJk5leHRlbnRyeSwgMCwgc2l6ZW9mKE5leHRlbnRyeSkpOworICAgIGZvciAocmVxX3R5cGUgPSBHRVRfRklSU1Q7OworICAgICAgICAgICAgIE5leHRlbnRyeSA9IEN1cmVudHJ5LCByZXFfdHlwZSA9IEdFVF9ORVhUKSB7CisJaWYgKGdldE1pYnN0YXQoTUlCX0lQNl9ST1VURSwgJkN1cmVudHJ5LCBzaXplb2YobWliMl9pcHY2Um91dGVFbnRyeV90KSwKKwkJICAgICAgIHJlcV90eXBlLCAmSVA2X0NtcF9Sb3V0ZSwgJk5leHRlbnRyeSkgIT0gMCkKKwkgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9ERUZJTkVEX0lSRV9DQUNIRQorCWlmIChDdXJlbnRyeS5pcHY2Um91dGVJbmZvLnJlX2lyZV90eXBlICYgSVJFX0NBQ0hFKQorCSAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBIQVZFX0RFRklORURfSVJFX0NBQ0hFICovCisJaWYgKEN1cmVudHJ5LmlwdjZSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQlJPQURDQVNUKQorCSAgICBjb250aW51ZTsKKwllbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOworCUN1cmVudHJ5LmlwdjZSb3V0ZUlmSW5kZXgub19ieXRlc1tDdXJlbnRyeS5pcHY2Um91dGVJZkluZGV4Lm9fbGVuZ3RoXSA9ICdcMCc7CisJZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoCisgICAgICAgICAgICAgICAgQ3VyZW50cnkuaXB2NlJvdXRlSWZJbmRleC5vX2J5dGVzKTsKKwllbnRyeS0+bnNfcnRfaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisKKwllbnRyeS0+cnRfZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisJZW50cnktPnJ0X2Rlc3RfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5ydF9kZXN0LCAmQ3VyZW50cnkuaXB2NlJvdXRlRGVzdCwgMTYpOworCisJZW50cnktPnJ0X25leHRob3BfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworCWVudHJ5LT5ydF9uZXh0aG9wX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwgJkN1cmVudHJ5LmlwdjZSb3V0ZU5leHRIb3AsIDE2KTsKKworCWVudHJ5LT5ydF9wZnhfbGVuID0gQ3VyZW50cnkuaXB2NlJvdXRlUGZ4TGVuZ3RoOworCWVudHJ5LT5ydF90eXBlID0gQ3VyZW50cnkuaXB2NlJvdXRlVHlwZTsKKwllbnRyeS0+cnRfcHJvdG8gPSBDdXJlbnRyeS5pcHY2Um91dGVQcm90b2NvbDsKKwllbnRyeS0+cnRfYWdlID0gQ3VyZW50cnkuaXB2NlJvdXRlQWdlOworCWVudHJ5LT5ydF9wb2xpY3kgPSBjYWxsb2MoMywgc2l6ZW9mKG9pZCkpOworCWVudHJ5LT5ydF9wb2xpY3lfbGVuID0gMzsKKwllbnRyeS0+cnRfcG9saWN5WzJdID0gQ3VyZW50cnkuaXB2NlJvdXRlUG9saWN5OworCWVudHJ5LT5ydF9tZXRyaWMxID0gQ3VyZW50cnkuaXB2NlJvdXRlTWV0cmljOworCWVudHJ5LT5ydF9tZXRyaWMyID0gQ3VyZW50cnkuaXB2NlJvdXRlV2VpZ2h0OworCisJLyoKKwkgKiBpbnNlcnQgaW50byBjb250YWluZXIKKwkgKi8KKwlpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKwkgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLCAiZXJyb3Igd2l0aCByb3V0ZV9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKwkgICAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfZnJlZShlbnRyeSk7CisJICAgIGNvbnRpbnVlOworCX0KKwkqY291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjkyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zeXNjdGwuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKworI2luY2x1ZGUgImlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5oIgorI2luY2x1ZGUgImlwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5oIgorCitzdGF0aWMgaW50IF9sb2FkX2lwdjQobmV0c25tcF9jb250YWluZXIqLCBpbnQqKTsKK3N0YXRpYyBpbnQgX2xvYWRfaXB2NihuZXRzbm1wX2NvbnRhaW5lciosIGludCopOworc3RhdGljIGludCBfY3JlYXRlX2lwdjQobmV0c25tcF9yb3V0ZV9lbnRyeSAqKTsKK3N0YXRpYyBpbnQgX2NyZWF0ZV9pcHY2KG5ldHNubXBfcm91dGVfZW50cnkgKik7CitzdGF0aWMgaW50IF9kZWxldGVfaXB2NChuZXRzbm1wX3JvdXRlX2VudHJ5ICopOworc3RhdGljIGludCBfZGVsZXRlX2lwdjYobmV0c25tcF9yb3V0ZV9lbnRyeSAqKTsKKworI2lmICFkZWZpbmVkKFNBX1NJWkUpICYmICFkZWZpbmVkKFJUX1JPVU5EVVApCisjZGVmaW5lIFJUX1JPVU5EVVAoYSkgIFwKKyAgICAgICAgKChhKSA+IDAgPyAoMSArICgoKGEpIC0gMSkgfCAoc2l6ZW9mKGxvbmcpIC0gMSkpKSA6IHNpemVvZihsb25nKSkKKyNlbmRpZgorI2lmbmRlZiBTQV9TSVpFCisjZGVmaW5lIFNBX1NJWkUoeCkgUlRfUk9VTkRVUCgoKHN0cnVjdCBzb2NrYWRkciAqKSh4KSktPnNhX2xlbikKKyNlbmRpZgorCisvKiogYXJjaCBzcGVjaWZpYyBsb2FkCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgbm8gY29udGFpbmVyIHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3QgYWNjZXNzIGRhdGEgc291cmNlCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3Nfcm91dGVfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorCQkJCQkgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgY291bnQsIGVycjsKKworICAgIGVyciA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsICJyb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkXG4iKSk7CisKKyAgICBpZiAoY29udGFpbmVyID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19yb3V0ZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlcnIgPSBfbG9hZF9pcHY0KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiX2xvYWRfaXB2NCBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoZXJyICE9IDAgfHwgbG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0xPQURfSVBWNF9PTkxZKQorCXJldHVybiBlcnI7CisKKyAgICBlcnIgPSBfbG9hZF9pcHY2KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiX2xvYWRfaXB2NiBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKK291dDoKKyAgICByZXR1cm4gKGVyciA9PSAwID8gMCA6IC0zKTsKK30KKworLyoqIGFyY2ggc3BlY2lmaWMgbmV3IHJvdXRlIGVudHJ5IGNyZWF0aW9uCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgaW52YWxpZCBlbnRyeSBzcGVjaWZpZWQKKyAqIEByZXR2YWwgLTIgY291bGQgbm90IGNyZWF0ZSByb3V0ZSBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF9yb3V0ZV9jcmVhdGUobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisgICAgaW50IGVycjsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzd2l0Y2ggKGVudHJ5LT5ydF9kZXN0X3R5cGUpIHsKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY0OgorICAgICAgICBlcnIgPSBfY3JlYXRlX2lwdjQoZW50cnkpOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgY2FzZSBJTkVUQUREUkVTU1RZUEVfSVBWNjoKKyAgICAgICAgZXJyID0gX2NyZWF0ZV9pcHY2KGVudHJ5KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnIgPSAwOworICAgIH0KKworICAgIHJldHVybiAoZXJyID09IDAgPyAwIDogLTIpOworfQorCisvKiogYXJjaCBzcGVjaWZpYyBuZXcgcm91dGUgZW50cnkgZGVsZXRpb24KKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIGVudHJ5IHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3QgZGVsZXRlIHJvdXRlIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2RlbGV0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQgZXJyOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJyb3V0ZV9jb250YWluZXJfYXJjaF9kZWxldGVcbiIpKTsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzd2l0Y2ggKGVudHJ5LT5ydF9kZXN0X3R5cGUpIHsKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY0OgorICAgICAgICBlcnIgPSBfZGVsZXRlX2lwdjQoZW50cnkpOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgY2FzZSBJTkVUQUREUkVTU1RZUEVfSVBWNjoKKyAgICAgICAgZXJyID0gX2RlbGV0ZV9pcHY2KGVudHJ5KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnIgPSAwOworICAgIH0KKworICAgIHJldHVybiAoZXJyID09IDAgPyAwIDogLTIpOworfQorCisjaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChuZXRic2Q0KSB8fCBkZWZpbmVkKG9wZW5ic2QpIHx8IGRlZmluZWQoZGFyd2luKQorc3RhdGljIGludAorX3R5cGVfZnJvbV9mbGFncyhpbnQgZmxhZ3MpCit7CisgICAgaWYgKGZsYWdzICYgUlRGX1VQKSB7CisgICAgICAgIGlmIChmbGFncyAmIFJURl9CTEFDS0hPTEUpCisgICAgICAgICAgICByZXR1cm4gSU5FVENJRFJST1VURVRZUEVfUkVKRUNUOworI2lmZGVmIFJURl9MT0NBTAorICAgICAgICBlbHNlIGlmIChmbGFncyAmIFJURl9MT0NBTCkKKyAgICAgICAgICAgIHJldHVybiBJTkVUQ0lEUlJPVVRFVFlQRV9MT0NBTDsKKyNlbmRpZgorICAgICAgICBlbHNlIGlmIChmbGFncyAmIFJURl9HQVRFV0FZKQorICAgICAgICAgICAgcmV0dXJuIElORVRDSURSUk9VVEVUWVBFX1JFTU9URTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIElORVRDSURSUk9VVEVUWVBFX09USEVSOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitfbG9hZF9yb3V0aW5nX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIGludCAqaW5kZXgsCisgICAgaW50IGZhbWlseSkKK3sKKyAgICBjaGFyICpidWYsICpsaW0sICpuZXh0OworICAgIGludCBtaWJbNl07CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgZXJyOworICAgIHVfY2hhciBkZXN0X2xlbiwgZGVzdF90eXBlOworICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKworICAgIGJ1ZiA9IE5VTEw7CisgICAgZXJyID0gMDsKKworICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICBkZXN0X2xlbiA9IDQ7CisgICAgICAgIGRlc3RfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworICAgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIGRlc3RfbGVuID0gMTY7CisgICAgICAgIGRlc3RfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworICAgIH0gZWxzZSB7CisgICAgICAgIGVyciA9IEVJTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbWliWzBdID0gQ1RMX05FVDsKKyAgICBtaWJbMV0gPSBQRl9ST1VURTsKKyAgICBtaWJbMl0gPSAwOworICAgIG1pYlszXSA9IGZhbWlseTsKKyAgICBtaWJbNF0gPSBORVRfUlRfRFVNUDsKKyAgICBtaWJbNV0gPSAwOworCisgICAgaWYgKHN5c2N0bChtaWIsIChzaXplb2YobWliKSAvIHNpemVvZihtaWJbMF0pKSwgTlVMTCwgJm5lZWRlZCwgTlVMTCwKKyAgICAgICAgMCkgPT0gLTEpIHsKKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICgoYnVmID0gbWFsbG9jKG5lZWRlZCkpID09IE5VTEwpIHsKKyAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgKHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSkpLCBidWYsICZuZWVkZWQsIE5VTEwsCisgICAgICAgIDApID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisKKyAgICBmb3IgKG5leHQgPSBidWY7IG5leHQgPCBsaW07IG5leHQgKz0gcnRtLT5ydG1fbXNnbGVuKSB7ICAgIAorCXN0cnVjdCBzb2NrYWRkciAqaWZfbmFtZSA9IE5VTEwsICppZl9hZGRyID0gTlVMTDsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmRlc3Rfc2EgPSBOVUxMLCAqZ2F0ZXdheV9zYSA9IE5VTEwsICpuZXRtYXNrX3NhID0gTlVMTDsKKwluZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeTsKKwljaGFyICphZGRyX3B0cjsKKworICAgICAgICBydG0gPSAoc3RydWN0IHJ0X21zZ2hkciopbmV4dDsKKworICAgICAgICAvKiAKKyAgICAgICAgICogU29tZSBjb2RlIGluIG5ldHN0YXQgY2hlY2tzIGZvciB0aGlzICgibmV0bWFza3MgZG9uZSIgY2FzZSkuCisgICAgICAgICAqIEZpbHRlciB0aGlzIG91dCAoSSBkb24ndCBrbm93IHdoeSBpdCBzaG91bGQgZXhpc3QpLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHJ0bS0+cnRtX2FkZHJzID09IFJUQV9EU1QpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgbWVtc2V0KGVudHJ5LT5ydF9kZXN0LCAwLCBkZXN0X2xlbik7CisgICAgICAgIGVudHJ5LT5ydF9tYXNrID0gMDsKKyAgICAgICAgbWVtc2V0KGVudHJ5LT5ydF9uZXh0aG9wLCAwLCBkZXN0X2xlbik7CisKKyAgICAgICAgYWRkcl9wdHIgPSAoY2hhciAqKShydG0gKyAxKTsKKworCWlmIChydG0tPnJ0bV9hZGRycyAmICBSVEFfRFNUKSB7CisJICAgIGRlc3Rfc2EgPSAoc3RydWN0IHNvY2thZGRyICopYWRkcl9wdHI7CisJICAgIGFkZHJfcHRyICs9IFNBX1NJWkUoZGVzdF9zYSk7CisJfQorCWlmIChydG0tPnJ0bV9hZGRycyAmICBSVEFfR0FURVdBWSkgeworCSAgICBnYXRld2F5X3NhID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKGdhdGV3YXlfc2EpOworCX0KKwlpZiAocnRtLT5ydG1fYWRkcnMgJiAgUlRBX05FVE1BU0spIHsKKwkgICAgbmV0bWFza19zYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX3B0cjsKKwkgICAgYWRkcl9wdHIgKz0gU0FfU0laRShuZXRtYXNrX3NhKTsKKwl9CisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9JRlApIHsKKwkgICAgaWZfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX3B0cjsKKwkgICAgYWRkcl9wdHIgKz0gU0FfU0laRShpZl9uYW1lKTsKKwl9CisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9JRkEpIHsKKwkgICAgaWZfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX3B0cjsKKwkgICAgYWRkcl9wdHIgKz0gU0FfU0laRShpZl9hZGRyKTsKKwl9CisKKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisKKyAgICAgICAgLyogYXJiaXRyYXJ5IGluZGV4ICovCisgICAgICAgIGVudHJ5LT5uc19ydF9pbmRleCA9ICsrKCppbmRleCk7CisKKyAgICAgICAgLyogY29weSBkZXN0ICYgbmV4dCBob3AgKi8KKyAgICAgICAgZW50cnktPnJ0X2Rlc3RfdHlwZSA9IGRlc3RfdHlwZTsKKyAgICAgICAgZW50cnktPnJ0X2Rlc3RfbGVuID0gZGVzdF9sZW47CisgICAgICAgIGlmIChydG0tPnJ0bV9hZGRycyAmIFJUQV9EU1QpIHsKKyAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X2Rlc3QsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopZGVzdF9zYSktPnNpbl9hZGRyLCBkZXN0X2xlbik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X2Rlc3QsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWRlc3Rfc2EpLT5zaW42X2FkZHIsIGRlc3RfbGVuKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgZW50cnktPnJ0X25leHRob3BfdHlwZSA9IGRlc3RfdHlwZTsKKyAgICAgICAgZW50cnktPnJ0X25leHRob3BfbGVuID0gZGVzdF9sZW47CisgICAgICAgIGlmIChydG0tPnJ0bV9hZGRycyAmIFJUQV9HQVRFV0FZKSB7CisgICAgICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5ydF9uZXh0aG9wLAorICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWdhdGV3YXlfc2EpLT5zaW5fYWRkciwgZGVzdF9sZW4pOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5ydF9uZXh0aG9wLAorICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42KilnYXRld2F5X3NhKS0+c2luNl9hZGRyLCBkZXN0X2xlbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopaWZfYWRkciktPnNpbl9hZGRyLCBkZXN0X2xlbik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWlmX2FkZHIpLT5zaW42X2FkZHIsIGRlc3RfbGVuKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisJICAgIGlmIChuZXRtYXNrX3NhKSB7CisgICAgICAgICAgICAvKiBjb3VudCBiaXRzIGluIG1hc2sgKi8KKwkJZW50cnktPnJ0X3BmeF9sZW4gPSBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oCisJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5ldG1hc2tfc2EpLT5zaW5fYWRkci5zX2FkZHIpOworCQltZW1jcHkoJmVudHJ5LT5ydF9tYXNrLCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluZXRtYXNrX3NhKS0+c2luX2FkZHIsIDQpOworCSAgICB9CisJICAgIGVsc2UgeworCQllbnRyeS0+cnRfcGZ4X2xlbiA9IDMyOworCSAgICB9CisgICAgICAgIH0KKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkgICAgaWYgKG5ldG1hc2tfc2EpIHsKKyAgICAgICAgICAgIC8qIGNvdW50IGJpdHMgaW4gbWFzayAqLworCQllbnRyeS0+cnRfcGZ4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjZfcHJlZml4X2xlbigKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKW5ldG1hc2tfc2EpLT5zaW42X2FkZHIpOworCQltZW1jcHkoJmVudHJ5LT5ydF9tYXNrLCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmV0bWFza19zYSktPnNpbjZfYWRkciwgMTYpOworCSAgICB9CisJICAgIGVsc2UgeworCQllbnRyeS0+cnRfcGZ4X2xlbiA9IDEyODsKKwkgICAgfQorICAgICAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTSU5HX0lQX0ZPUldBUkRfTUlCX0lORVRDSURSUk9VVEVUQUJMRV9JTkVUQ0lEUlJPVVRFVEFCTEVfTU9EVUxFCisgICAgICAgIC8qCisgICAgaW5ldENpZHJSb3V0ZVBvbGljeSBPQkpFQ1QtVFlQRSAKKyAgICAgICAgU1lOVEFYICAgICBPQkpFQ1QgSURFTlRJRklFUiAKKyAgICAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgU1RBVFVTICAgICBjdXJyZW50IAorICAgICAgICBERVNDUklQVElPTiAKKyAgICAgICAgICAgICAgICJUaGlzIG9iamVjdCBpcyBhbiBvcGFxdWUgb2JqZWN0IHdpdGhvdXQgYW55IGRlZmluZWQgCisgICAgICAgICAgICAgICAgc2VtYW50aWNzLiAgSXRzIHB1cnBvc2UgaXMgdG8gc2VydmUgYXMgYW4gYWRkaXRpb25hbCAKKyAgICAgICAgICAgICAgICBpbmRleCB3aGljaCBtYXkgZGVsaW5lYXRlIGJldHdlZW4gbXVsdGlwbGUgZW50cmllcyB0byAKKyAgICAgICAgICAgICAgICB0aGUgc2FtZSBkZXN0aW5hdGlvbi4gIFRoZSB2YWx1ZSB7IDAgMCB9IHNoYWxsIGJlIHVzZWQgCisgICAgICAgICAgICAgICAgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgb2JqZWN0LiIKKyAgICAgICAgKi8KKwllbnRyeS0+cnRfcG9saWN5ID0gY2FsbG9jKDMsIHNpemVvZihvaWQpKTsKKwllbnRyeS0+cnRfcG9saWN5WzJdID0gZW50cnktPmlmX2luZGV4OworCWVudHJ5LT5ydF9wb2xpY3lfbGVuID0gc2l6ZW9mKG9pZCkqMzsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5LT5ydF90eXBlID0gX3R5cGVfZnJvbV9mbGFncyhydG0tPnJ0bV9mbGFncyk7CisJZW50cnktPnJ0X2FnZSA9IHJ0bS0+cnRtX3JteC5ybXhfZXhwaXJlOworCWVudHJ5LT5ydF9uZXh0aG9wX2FzID0gMDsKKwkvKiBlbnRyeS0+cnRfbWV0cmljMSA9IHJ0bS0+cnRtX3JteC5ybXhfaG9wY291bnQ7ICovCisKKyAgICAgICAgaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRGX0RZTkFNSUMpCisgICAgICAgICAgICBlbnRyeS0+cnRfcHJvdG8gPSBJQU5BSVBST1VURVBST1RPQ09MX0lDTVA7CisgICAgICAgIGVsc2UgaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRGX1NUQVRJQykKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfTkVUTUdNVDsKKyNpZmRlZiBSVEZfTE9DQUwKKyAgICAgICAgZWxzZSBpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVEZfTE9DQUwpCisgICAgICAgICAgICBlbnRyeS0+cnRfcHJvdG8gPSBJQU5BSVBST1VURVBST1RPQ09MX0xPQ0FMOworI2VuZGlmCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfT1RIRVI7CisKKyAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgImVycm9yIHdpdGggcm91dGVfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCitvdXQ6CisgICAgZnJlZShidWYpOworCisgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKiBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkX2lwdjQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgaW50ICppbmRleCkKK3sKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY0XG4iKSk7CisgICAgcmV0dXJuIF9sb2FkX3JvdXRpbmdfdGFibGVfZnJvbV9zeXNjdGwoY29udGFpbmVyLCBpbmRleCwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyBpbnQKK19sb2FkX2lwdjYobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgaW50ICppbmRleCkKK3sKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQgaXB2NlxuIikpOworICAgIHJldHVybiBfbG9hZF9yb3V0aW5nX3RhYmxlX2Zyb21fc3lzY3RsKGNvbnRhaW5lciwgaW5kZXgsIEFGX0lORVQ2KTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisgKiBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9jcmVhdGUqIGZ1bmN0aW9ucy4KKyAqCisgKiBUT0RPOiBhZGQgbG9naWMgc2ltaWxhciB0byBuZXdyb3V0ZSguLikgaW4gc2Jpbi9yb3V0ZS9yb3V0ZS5jIC4KKyAqLworc3RhdGljIGludAorX2NyZWF0ZV9pcHY0KG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jcmVhdGVfaXB2NihuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIG5ldHNubXBfYWNjZXNzX3JvdXRlX2RlbGV0ZSogZnVuY3Rpb25zLgorICoKKyAqIFRPRE86IGFkZCBsb2dpYyBzaW1pbGFyIHRvIG5ld3JvdXRlKC4uKSBpbiBzYmluL3JvdXRlL3JvdXRlLmMgLgorICovCitzdGF0aWMgaW50CitfZGVsZXRlX2lwdjQobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2RlbGV0ZV9pcHY2KG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChmcmVlYnNkNykgfHwgZGVmaW5lZChuZXRic2QpIHx8IGRlZmluZWQob3BlbmJzZCkgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlY2NjNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5oCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpZmFkZHJzLmg+CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKaW5kZXggNDFiNWM5NS4uMGYwMTNlYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwpAQCAtMTQsNiArMTQsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjYsOCArMjcsMTEgQEAKIAogI2luY2x1ZGUgImluZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRbXSA9IHsgSU5FVENJRFJST1VURVRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZSA9CituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbmV0Q2lkclJvdXRlVGFibGVfY29udGFpbmVyX2dldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2l6ZSkKKworY29uc3Qgb2lkICAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRbXSA9IHsgSU5FVENJRFJST1VURVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGluZXRDaWRyUm91dGVUYWJsZV9vaWQpOwogCiBpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uIGluZXRDaWRyUm91dGVUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC00MTAsMjUgKzQxNCwyNyBAQAogICAgIC8qCiAgICAgICogaW5ldENpZHJSb3V0ZVBvbGljeSg0KS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML2Evdy9lL3IvZC9oIAogICAgICAqLwotICAgIHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lfbGVuID0gc2l6ZW9mKHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3kpIC8gc2l6ZW9mKHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lbMF0pOyAgLyogbWF4IGxlbmd0aCAqLworICAgIHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lfbGVuID0gc2l6ZW9mKHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3kpIC8gc2l6ZW9mKHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lbMF0pOwogICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfcm91dGVfZW50cnkgKi8KICAgICAvKgogICAgICAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGluZXRDaWRyUm91dGVQb2xpY3kgZGF0YQogICAgICAqLwogICAgIGlmICgoTlVMTCA9PSB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5KSB8fAogICAgICAgICAodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPAotICAgICAgICAgKGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4pKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWVcbiIpOworICAgICAgICAgKGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gLyBzaXplb2YoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyWzBdKSkpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisJICAgICJpbmV0Q2lkclJvdXRlUG9saWN5OiBOb3QgZW5vdWdoIHNwYWNlIGZvciB2YWx1ZSAoJWQgPCAlZClcbiIsCisJICAgIChpbnQpdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4sCisJICAgIChpbnQpKGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gLyBzaXplb2YoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyWzBdKSkpOwogICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogICAgIH0KICAgICBpZiAoMCA9PSBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuKSB7Ci0gICAgICAgIGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gPSBudWxsT2lkTGVuIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgIGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gPSBudWxsT2lkTGVuOwogICAgICAgICBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHIgPSBudWxsT2lkOwogICAgIH0KLSAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiA9IGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW47CisgICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPSBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuIC8gc2l6ZW9mKG9pZCk7CiAgICAgbWVtY3B5KHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3ksIGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0ciwKLSAgICAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiAqCi0gICAgICAgICAgIHNpemVvZihpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJbMF0pKTsKKyAgICAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbik7CiAKICAgICAvKgogICAgICAqIGluZXRDaWRyUm91dGVOZXh0SG9wVHlwZSg1KS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oIApAQCAtNDQ2LDExICs0NTIsMTQgQEAKICAgICAgKi8KICAgICBpZiAoKE5VTEwgPT0gdGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3ApIHx8CiAgICAgICAgICh0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcF9sZW4gPAotICAgICAgICAgKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJfbGVuKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vdCBlbm91Z2ggc3BhY2UgZm9yIHZhbHVlXG4iKTsKKyAgICAgICAgIChpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKSkpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisJICAgICJpbmV0Q2lkclJvdXRlTmV4dGhvcDogTm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWUgKCVkIDwgJWQpXG4iLAorCSAgICAoaW50KXRibF9pZHgtPmluZXRDaWRyUm91dGVOZXh0SG9wX2xlbiwKKwkgICAgKGludCkoaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0cl9sZW4gLyBzaXplb2YoaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0clswXSkpKTsKICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKICAgICB9Ci0gICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3BfbGVuID0gaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0cl9sZW47CisgICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3BfbGVuID0gaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0cl9sZW4gLyBzaXplb2YoaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0clswXSk7CiAgICAgbWVtY3B5KHRibF9pZHgtPmluZXRDaWRyUm91dGVOZXh0SG9wLCBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyLAogICAgICAgICAgICBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAqCiAgICAgICAgICAgIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKaW5kZXggOGQ5MDQ4NS4uYjgxMzJlMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaApAQCAtMjE3LDggKzIxNyw4IEBACiAgICAgICAgICogaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaW5ldENpZHJSb3V0ZVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpbmV0Q2lkclJvdXRlVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDk0NjJiZTcuLmJlZWJiMmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgICAgICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfbG9hZChOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ST1VURV9MT0FEX05PRkxBR1MpOwogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aW5ldENpZHJSb3V0ZVRhYmxlOmluZXRDaWRyUm91dGVUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShyb3V0ZV9jb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShyb3V0ZV9jb250YWluZXIpKSk7CiAKICAgICBpZiAoTlVMTCA9PSByb3V0ZV9jb250YWluZXIpCiAgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7ICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0ZSRUVfRE9OVF9DTEVBUik7CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmluZXRDaWRyUm91dGVUYWJsZTppbmV0Q2lkclJvdXRlVGFibGVfY2FjaGVfbG9hZCIsCi0gICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0Q2lkclJvdXRlVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCmluZGV4IGY0ODUzNjAuLjVkZjQ2YjYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTYgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2l6ZSwgaW5ldENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaW5ldENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaW5ldENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0Q2lkclJvdXRlVGFibGVfY29udGFpbmVyX2dldCwgaW5ldENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODIsMTkgKzkzLDIzIEBACiAgICAgICAgICAgICAgICAgX2luZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpbmV0Q2lkclJvdXRlVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaW5ldENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTA0LDEyICsxMTksMTUgQEAKICAgICBpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRShpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGluZXRDaWRyUm91dGVUYWJsZV9kaXJ0eV9nZXQodm9pZCkKQEAgLTE0MCw3ICsxNTgsNyBAQAogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2dldF92YWx1ZXM7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfc2V0X3ZhbHVlczsKQEAgLTE1MCwxMiArMTY4LDEwIEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19jb21taXQ7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKLSAgICAgICAgICAgICAgICBfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKLQorICAgICAgICAgICAgICAgIF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfaW5kZXhlcyhpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGluZXRDaWRyUm91dGVUYWJsZSAKQEAgLTE5OSw3ICsyMTUsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJTkVUQ0lEUlJPVVRFVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElORVRDSURSUk9VVEVUQUJMRV9NQVhfQ09MOwpAQCAtMjM5LDcgKzI1NSw3IEBACiAgICAgICAgIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjY0LDcgKzI4MCw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0zMDAsNyArMzE2LDcgQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTMyMyw3ICszMzksNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNzkzLDcgKzgwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTkxMSw3ICs5MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xMTA1LDcgKzExMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEyMTIsNiArMTIyOCw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKIAorICAgIC8qIE1PUkUgQ0hFQ0tJTkcgUkVRVUlSRUQgKi8KKwogICAgIC8qCiAgICAgICogKElOREVYKSBpbmV0Q2lkclJvdXRlRGVzdCgyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2ggCiAgICAgICovCkBAIC0xMzEwLDcgKzEzMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMgKi8KIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTYxNSw3ICsxNjMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTY2Myw3ICsxNjgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTc4NSw3ICsxODAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xODUwLDcgKzE4NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMjAwNSw3ICsyMDIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIwNTMsNyArMjA3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTIwODcsNyArMjEwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0yMTMzLDcgKzIxNTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX3VuZG9fdmFsdWVzIiwgImNhbGxlZFxuIikpOwpAQCAtMjE2Nyw3ICsyMTg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXRDaWRyUm91dGVUYWJsZTpfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjE5NCw3ICsyMjEyLDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIzMjgsOSArMjM0NiwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogc2V0IGFsbG93IGR1cGxpY2F0ZXMgdGhpcyBtYWtlcyBpbnNlcnQgTygxKSAqLwotICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGlmX2N0eC0+Y29udGFpbmVyLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyk7CisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpbmV0Q2lkclJvdXRlVGFibGUiKTsKKworICAgLyogc2V0IGFsbG93IGR1cGxpY2F0ZXMgdGhpcyBtYWtlcyBpbnNlcnQgTygxKSAqLworICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoaWZfY3R4LT5jb250YWluZXIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMpOwogCiAgICAgaWYgKE5VTEwgIT0gaWZfY3R4LT5jYWNoZSkKICAgICAgICAgaWZfY3R4LT5jYWNoZS0+bWFnaWMgPSAodm9pZCAqKSBpZl9jdHgtPmNvbnRhaW5lcjsKQEAgLTIzNTMsNiArMjM3Myw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pbmV0Q2lkclJvdXRlVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICoKIGluZXRDaWRyUm91dGVUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaW5ldENpZHJSb3V0ZVRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0yMzc1LDggKzIzOTYsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQoaW5ldENpZHJSb3V0ZVRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYwppbmRleCA3NWZkZTg4Li4wZmYwMGMxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGlwQ2lkclJvdXRlVGFibGVfb2lkW10gPSB7IElQQ0lEUlJPVVRFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRbXSA9IHsgSVBDSURSUk9VVEVUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaXBDaWRyUm91dGVUYWJsZV9vaWQpOwogCiBpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiBpcENpZHJSb3V0ZVRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTcwNiwxMyArNzA2LDEzIEBACiAgICAgICogY29weSAoKiBpcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIgKSBkYXRhIGFuZCAoKiBpcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9sZW5fcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCiAgICAgLyoqIG51bGxPaWRMZW4gaXMgaW4gYnl0ZXMsIHNvIG5vdCBzaXplb2Yob2lkKSBuZWVkZWQgKi8KLSAgICBpZiAoKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9sZW5fcHRyKSA8IG51bGxPaWRMZW4pIHsKLSAgICAgICAgKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpID0gbWFsbG9jKG51bGxPaWRMZW4pOworICAgIGlmICgoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpIDwgKHNpemVfdCludWxsT2lkTGVuKSB7CisgICAgICAgICgqaXBDaWRyUm91dGVJbmZvX3ZhbF9wdHJfcHRyKSA9IChvaWQqKW1hbGxvYyhudWxsT2lkTGVuKTsKICAgICAgICAgaWYgKE5VTEwgPT0gKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpKQogICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKICAgICB9Ci0gICAgKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9sZW5fcHRyKSA9IG51bGxPaWRMZW47Ci0gICAgbWVtY3B5KCgqaXBDaWRyUm91dGVJbmZvX3ZhbF9wdHJfcHRyKSwgbnVsbE9pZCwgbnVsbE9pZExlbik7CisgICAgKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9sZW5fcHRyKSA9IChzaXplX3QpbnVsbE9pZExlbjsKKyAgICBtZW1jcHkoKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpLCBudWxsT2lkLCAoc2l6ZV90KW51bGxPaWRMZW4pOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcENpZHJSb3V0ZUluZm9fZ2V0ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCmluZGV4IDQ5Njk0ODAuLjJjZTMwYmUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCkBAIC0xOTQsOCArMTk0LDggQEAKICAgICAgICAgKiBpcENpZHJSb3V0ZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcENpZHJSb3V0ZVRhYmxlX21pYl9pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggYzI3ZDBhYS4uYmIyNzY3NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0ZSRUVfRE9OVF9DTEVBUik7CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwQ2lkclJvdXRlVGFibGU6aXBDaWRyUm91dGVUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwppbmRleCBkMDUxYzI1Li40NWY4NDgzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxNyBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQ2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpcENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlwQ2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX2dldCwgaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgxLDE5ICs5MywyMyBAQAogICAgICAgICAgICAgICAgIF9pcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGlwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcENpZHJSb3V0ZVRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKIHsKQEAgLTEwMSwxMiArMTE3LDE1IEBACiAgICAgaXBDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiBpcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIHVfaW50CiBpcENpZHJSb3V0ZVRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTMwLDcgKzE0OSw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQ2lkclJvdXRlVGFibGVfb2JqZWN0X2xvb2t1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQ2lkclJvdXRlVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV91bmRvX3NldHVwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTQ0LDcgKzE2Myw3IEBACiAgICAgICAgICAgICAgICAgX2lwQ2lkclJvdXRlVGFibGVfdW5kb19jb2x1bW4oaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKICAgICAgICAgICAgICAgICBfaXBDaWRyUm91dGVUYWJsZV9jaGVja19pbmRleGVzKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOwpAQCAtMTg4LDcgKzIwNyw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQQ0lEUlJPVVRFVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQQ0lEUlJPVVRFVEFCTEVfTUFYX0NPTDsKQEAgLTIyNyw3ICsyNDYsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pcENpZHJSb3V0ZVRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjQ1LDcgKzI2NCw3IEBACiAgICAgYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCA9IF9tZmRfaXBDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdDsKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQgPQogICAgICAgICBfbWZkX2lwQ2lkclJvdXRlVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTI3OCw3ICsyOTcsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzAxLDcgKzMyMCw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC02NzIsNyArNjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC03OTEsNyArODEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcENpZHJSb3V0ZVRhYmxlOl9tZmRfaXBDaWRyUm91dGVUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtMTAyMiw3ICsxMDQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTExNTEsNyArMTE3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBDaWRyUm91dGVUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTE0NTYsNyArMTQ3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTYxMSw3ICsxNjMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNjc1LDcgKzE2OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xODQwLDcgKzE4NTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xODg4LDcgKzE5MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcENpZHJSb3V0ZVRhYmxlOl9tZmRfaXBDaWRyUm91dGVUYWJsZV9jb21taXQiLApAQCAtMTkyMiw3ICsxOTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcENpZHJSb3V0ZVRhYmxlOl9tZmRfaXBDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTIwNjQsNyArMjA4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMjExOCw3ICsyMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBDaWRyUm91dGVUYWJsZTpfbWZkX2lwQ2lkclJvdXRlVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTIxNDUsNyArMjE2NCw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcENpZHJSb3V0ZVRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjI3Nyw2ICsyMjk2LDggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiaXBDaWRyUm91dGVUYWJsZSIpOworCiAgICAgLyogc2V0IGFsbG93IGR1cGxpY2F0ZXMgdGhpcyBtYWtlcyBpbnNlcnQgTygxKSAqLwogICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGlmX2N0eC0+Y29udGFpbmVyLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyk7CkBAIC0yMzAyLDYgKzIzMjMsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqCiBpcENpZHJSb3V0ZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcENpZHJSb3V0ZVRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQpAQCAtMjMyNCw4ICsyMzQ2LDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpcENpZHJSb3V0ZVRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliLmgKaW5kZXggYjQ1Y2JiNC4uNGU4MzE3ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliLmgKQEAgLTMsNyArMywxMyBAQAogICovCiAKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcEFkZHJlc3NUYWJsZSk7Citjb25maWdfcmVxdWlyZShpcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUpOworY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlKTsKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlKTsKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUpOwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwX3NjYWxhcnMpOworI2lmZGVmIGxpbnV4Citjb25maWdfcmVxdWlyZShpcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUpOworY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlKTsKKyNlbmRpZgogY29uZmlnX2FkZF9taWIoSVAtTUlCKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oCmluZGV4IDcwYTQ3M2MuLjY0OGNiMjggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgKQEAgLTE4LDEzICsxOCwxNiBAQAogICogICAgYmUgaGFuZGxlZCBpbiB0aGUgKl9ocHV4LmggaGVhZGVyIGZpbGUuCiAgKi8KIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uKQotI2lmIGRlZmluZWQoIGxpbnV4ICkKKyNpZiBkZWZpbmVkKCBIQVZFX0xJTlVYX1JUTkVUTElOS19IICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluaykKKyNlbGlmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXgpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNyApIHx8IGRlZmluZWQgKCBuZXRic2Q1ICkgfHwgZGVmaW5lZCggb3BlbmJzZDQgKSB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKSB8fCBkZWZpbmVkKCBkYXJ3aW4gKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9zeXNjdGwpCiAjZWxzZQogLyoKICAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQotICogcmVxdWlyZSBhIGJvZ3VzIGZpbGUgdG8gZ2VuZXJhdGUgYW4gZXJyb3IuCiAgKi8KLWNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9hcnAtdW5rbm93bi1hcmNoKQorY29uZmlnX2Vycm9yKHRoZSBhcnAgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jCmluZGV4IGMwY2M2ODAuLjI5NTg3MTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYwpAQCAtMTEsOTkgKzExLDYgQEAKIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCi0gKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcwotICovCi1zdGF0aWMgdm9pZCBfYWNjZXNzX2FycF9lbnRyeV9yZWxlYXNlKG5ldHNubXBfYXJwX2VudHJ5ICogZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCk7Ci0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogZXh0ZXJuYWwgcGVyLWFyY2hpdGVjdHVyZSBmdW5jdGlvbnMgcHJvdG90eXBlcwotICoKLSAqIFRoZXNlIHNob3VsZG4ndCBiZSBjYWxsZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljLCBzbyB0aGV5IGFyZW4ndCBpbgotICogdGhlIGhlYWRlciBmaWxlLgotICovCi1leHRlcm4gaW50Ci1uZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7Ci0KLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBjb250YWluZXIgZnVuY3Rpb25zCi0gKi8KLS8qKgotICovCi1uZXRzbm1wX2NvbnRhaW5lciAqCi1uZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2luaXQodV9pbnQgZmxhZ3MpCi17Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjE7Ci0KLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmFycDpjb250YWluZXIiLCAiaW5pdFxuIikpOwotCi0gICAgLyoKLSAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lcnMuIG9uZSBpbmRleGVkIGJ5IGlmSW5kZXgsIHRoZSBvdGhlcgotICAgICAqIGluZGV4ZWQgYnkgaWZOYW1lLgotICAgICAqLwotICAgIGNvbnRhaW5lcjEgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJhY2Nlc3NfYXJwOnRhYmxlX2NvbnRhaW5lciIpOwotICAgIGlmIChOVUxMID09IGNvbnRhaW5lcjEpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBjb250YWluZXIxOwotfQotCi0vKioKLSAqIEByZXR2YWwgTlVMTCAgZXJyb3IKLSAqIEByZXR2YWwgIU5VTEwgcG9pbnRlciB0byBjb250YWluZXIKLSAqLwotbmV0c25tcF9jb250YWluZXIqCi1uZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKLXsKLSAgICBpbnQgcmM7Ci0KLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmFycDpjb250YWluZXIiLCAibG9hZFxuIikpOwotCi0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQotICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJhY2Nlc3M6YXJwOnRhYmxlX2NvbnRhaW5lciIpOwotICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX2FycFxuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJjID0gIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfYXJjaF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7Ci0gICAgaWYgKDAgIT0gcmMpIHsKLSAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX05PRkxBR1MpOwotICAgICAgICBjb250YWluZXIgPSBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBjb250YWluZXI7Ci19Ci0KLXZvaWQKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmcmVlX2ZsYWdzKQotewotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7Ci0KLSAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX2FjY2Vzc19hcnBfZnJlZVxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfRE9OVF9DTEVBUikpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZnJlZSBhbGwgaXRlbXMuCi0gICAgICAgICAqLwotICAgICAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfYWNjZXNzX2FycF9lbnRyeV9yZWxlYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0tFRVBfQ09OVEFJTkVSKSkKLSAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKLX0KLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCiAgKiBhcnBfZW50cnkgZnVuY3Rpb25zCiAgKi8KIC8qKgpAQCAtMTM3LDkgKzQ0LDQwIEBACiAgKi8KIAogLyoqCisgKiBVcGRhdGUgZ2l2ZW4gZW50cnkgd2l0aCBuZXcgZGF0YS4gQ2FsY3VsYXRlIG5ldyBhcnBfbGFzdF91cGRhdGVkLCBpZiBhbnkKKyAqIGZpZWxkIGlzIGNoYW5nZWQuCiAgKi8KLXZvaWQKLV9hY2Nlc3NfYXJwX2VudHJ5X3JlbGVhc2UobmV0c25tcF9hcnBfZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKK3ZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X3VwZGF0ZShuZXRzbm1wX2FycF9lbnRyeSAqZW50cnksCisgICAgICAgIG5ldHNubXBfYXJwX2VudHJ5ICpuZXdfZGF0YSkKIHsKLSAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShlbnRyeSk7CisgICAgaW50IG1vZGlmaWVkID0gMDsKKworICAgIGVudHJ5LT5nZW5lcmF0aW9uID0gbmV3X2RhdGEtPmdlbmVyYXRpb247CisgICAgaWYgKGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiAhPSBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzc19sZW4KKyAgICAgICAgICAgIHx8IG1lbWNtcChlbnRyeS0+YXJwX2lwYWRkcmVzcywgbmV3X2RhdGEtPmFycF9pcGFkZHJlc3MsIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbikgIT0gMCApIHsKKyAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4gPSBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzc19sZW47CisgICAgICAgIG1lbWNweShlbnRyeS0+YXJwX2lwYWRkcmVzcywgbmV3X2RhdGEtPmFycF9pcGFkZHJlc3MsIHNpemVvZihlbnRyeS0+YXJwX2lwYWRkcmVzcykpOworICAgIH0KKyAgICBpZiAoZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gIT0gbmV3X2RhdGEtPmFycF9waHlzYWRkcmVzc19sZW4gfHwKKyAgICAgICAgICAgIG1lbWNtcChlbnRyeS0+YXJwX3BoeXNhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX3BoeXNhZGRyZXNzLCBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbikgIT0gMCkgeworICAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSBuZXdfZGF0YS0+YXJwX3BoeXNhZGRyZXNzX2xlbjsKKyAgICAgICAgIG1lbWNweShlbnRyeS0+YXJwX3BoeXNhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX3BoeXNhZGRyZXNzLCBzaXplb2YoZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4pKTsKKyAgICAgfQorICAgIGlmIChlbnRyeS0+YXJwX3N0YXRlICE9IG5ld19kYXRhLT5hcnBfc3RhdGUpIHsKKyAgICAgICAgIG1vZGlmaWVkID0gMTsKKyAgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBuZXdfZGF0YS0+YXJwX3N0YXRlOworICAgICB9CisgICAgaWYgKGVudHJ5LT5hcnBfdHlwZSAhPSBuZXdfZGF0YS0+YXJwX3R5cGUpIHsKKyAgICAgICAgIG1vZGlmaWVkID0gMTsKKyAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IG5ld19kYXRhLT5hcnBfdHlwZTsKKyAgICAgfQorICAgIGlmIChlbnRyeS0+ZmxhZ3MgIT0gbmV3X2RhdGEtPmZsYWdzKSB7CisgICAgICAgICBtb2RpZmllZCA9IDE7CisgICAgICAgICBlbnRyeS0+ZmxhZ3MgPSBuZXdfZGF0YS0+ZmxhZ3M7CisgICAgIH0KKworICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgZW50cnktPmFycF9sYXN0X3VwZGF0ZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYwppbmRleCA3NWQ5NGMwLi5hMmZhNDlhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jCkBAIC0xLDcgKzEsNSBAQAogLyoKICAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0Ci0gKgotICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KQEAgLTE0LDQ2ICsxMiw3NiBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotaW50IF9sb2FkX3Y0KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KTsKK3N0YXRpYyBpbnQgX2xvYWRfdjQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpOwogCi0vKioKLSAqLwotaW50Ci1uZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQorbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKQogewotICAgIGludCByYyA9IDAsIGlkeF9vZmZzZXQgPSAwOworICAgIG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzOwogCi0gICAgcmMgPSBfbG9hZF92NChjb250YWluZXIsIGlkeF9vZmZzZXQpOwotICAgIGlmKHJjIDwgMCkgewotICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0tFRVBfQ09OVEFJTkVSOwotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7Ci0gICAgICAgIHJldHVybiByYzsKKyAgICBhY2Nlc3MgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfYXJwX2FjY2Vzcyk7CisgICAgaWYgKE5VTEwgPT0gYWNjZXNzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm1hbGxvYyBlcnJvciBpbiBuZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0jaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikgJiYgMCAvKiB4eC1ya3M6IGFycCBmb3IgdjY/ICovCi0gICAgaWR4X29mZnNldCA9IHJjOworICAgIGFjY2Vzcy0+YXJjaF9tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT5tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT51cGRhdGVfaG9vayA9IHVwZGF0ZV9ob29rOworICAgIGFjY2Vzcy0+Z2NfaG9vayA9IGdjX2hvb2s7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOwogCi0gICAgcmMgPSBfbG9hZF92Nihjb250YWluZXIsIGlkeF9vZmZzZXQpOwotICAgIGlmKHJjIDwgMCkgewotICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0tFRVBfQ09OVEFJTkVSOwotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKGNhY2hlX3RpbWVvdXQgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX3RpbWVvdXQgPSA1OworICAgIGlmIChjYWNoZV9mbGFncyAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfZmxhZ3MgfD0gTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRDsKKyAgICBhY2Nlc3MtPmNhY2hlX2V4cGlyZWQgPSBjYWNoZV9leHBpcmVkOwogCi0gICAgLyoKLSAgICAgKiByZXR1cm4gbm8gZXJyb3JzICgwKSBpZiB3ZSBmb3VuZCBhbnkgaW50ZXJmYWNlcwotICAgICAqLwotICAgIGlmKHJjID4gMCkKLSAgICAgICAgcmMgPSAwOworICAgIHJldHVybiBhY2Nlc3M7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfZGVsZXRlKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGlmIChOVUxMID09IGFjY2VzcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKGFjY2Vzcyk7CisgICAgZnJlZShhY2Nlc3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgYWNjZXNzLT5nZW5lcmF0aW9uKys7CisgICAgcmMgPV9sb2FkX3Y0KGFjY2Vzcyk7CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAocmMgPT0gMCk7CiAKICAgICByZXR1cm4gcmM7CiB9CiAKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMDsKKworICAgIHJldHVybiAwOworfQorCiAvKioKICAqLwotaW50Ci1fbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3N0YXRpYyBpbnQKK19sb2FkX3Y0KG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQogewogICAgIEZJTEUgICAgICAgICAgICppbjsKICAgICBjaGFyICAgICAgICAgICAgbGluZVsxMjhdOwpAQCAtNjMsMTEgKzkxLDExIEBACiAgICAgY2hhciAgICAgICAgICAgKmFycF90b2tlbjsKICAgICBpbnQgICAgICAgICAgICAgaTsKIAotICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFjY2Vzcyk7CiAKICNkZWZpbmUgUFJPQ0ZJTEUgIi9wcm9jL25ldC9hcnAiCiAgICAgaWYgKCEoaW4gPSBmb3BlbihQUk9DRklMRSwgInIiKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCkBAIC04Myw3ICsxMTEsNyBAQAogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICAKICAgICAgICAgaW50ICAgICAgICAgICAgIHphLCB6YiwgemMsIHpkOwotICAgICAgICBpbnQgICAgICAgICAgICAgdG1wX2ZsYWdzOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdG1wX2ZsYWdzOwogICAgICAgICBjaGFyICAgICAgICAgICAgaWZuYW1lWzIxXTsKIAogICAgICAgICByYyA9IHNzY2FuZihsaW5lLApAQCAtMTEwLDYgKzEzOCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGxvb2sgdXAgaWZJbmRleAogICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CiAgICAgICAgIGVudHJ5LT5pZl9pbmRleCA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pbmRleF9maW5kKGlmbmFtZSk7CiAgICAgICAgIGlmKDAgPT0gZW50cnktPmlmX2luZGV4KSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZG4ndCBmaW5kIGlmSW5kZXggZm9yICclcycsIHNraXBwaW5nXG4iLApAQCAtMTIyLDcgKzE1MSw3IEBACiAgICAgICAgICAqIG5vdyB0aGF0IHdlJ3ZlIHBhc3NlZCBhbGwgdGhlIHBvc3NpYmxlICdjb250aW51ZScsIGFzc2lnbgogICAgICAgICAgKiBpbmRleCBvZmZzZXQuCiAgICAgICAgICAqLwotICAgICAgICBlbnRyeS0+bnNfYXJwX2luZGV4ID0gKytpZHhfb2Zmc2V0OworICAgICAgICAvKiBlbnRyeS0+bnNfYXJwX2luZGV4ID0gKytpZHhfb2Zmc2V0OyAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHBhcnNlIGlwIGFkZHIKQEAgLTE3NywxNyArMjA2LDkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmFycDpjb250YWluZXIiLCJlcnJvciB3aXRoIGFycF9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKLSAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGVudHJ5KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CiAgICAgfQogCiAgICAgZmNsb3NlKGluKTsKLSAgICBpZiggcmMgPCAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmV0dXJuIGlkeF9vZmZzZXQ7CisgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTljMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX25ldGxpbmsuYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKworCitzdGF0aWMgaW50IGZpbGx1cF9lbnRyeV9pbmZvKG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSwgc3RydWN0IG5sbXNnaGRyICpoKTsKK3N0YXRpYyB2b2lkIG5ldHNubXBfYWNjZXNzX2FycF9yZWFkX25ldGxpbmsoaW50IGZkLCB2b2lkICpkYXRhKTsKKworLyoqCisgKi8KK25ldHNubXBfYXJwX2FjY2VzcyAqCituZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlKHVfaW50IGluaXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBVcGRhdGUgKnVwZGF0ZV9ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwR0MgKmdjX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2FjaGVfdGltZW91dCwgaW50ICpjYWNoZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY2FjaGVfZXhwaXJlZCkKK3sKKyAgICBuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzczsKKworICAgIGFjY2VzcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9hcnBfYWNjZXNzKTsKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibWFsbG9jIGVycm9yIGluIG5ldHNubXBfYWNjZXNzX2FycF9jcmVhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+bWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2sgPSB1cGRhdGVfaG9vazsKKyAgICBhY2Nlc3MtPmdjX2hvb2sgPSBnY19ob29rOworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMDsKKworICAgIGlmIChjYWNoZV90aW1lb3V0ICE9IE5VTEwpCisgICAgICAgICpjYWNoZV90aW1lb3V0ID0gNTsKKyAgICBpZiAoY2FjaGVfZmxhZ3MgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX2ZsYWdzIHw9IE5FVFNOTVBfQ0FDSEVfUkVTRVRfVElNRVJfT05fVVNFIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQ7CisgICAgYWNjZXNzLT5jYWNoZV9leHBpcmVkID0gY2FjaGVfZXhwaXJlZDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6bmV0bGluazphcnAiLCAiY3JlYXRlIGFycCBjYWNoZVxuIikpOworCisgICAgcmV0dXJuIGFjY2VzczsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaWYgKE5VTEwgPT0gYWNjZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQoYWNjZXNzKTsKKyAgICBmcmVlKGFjY2Vzcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGludCByLCBmZCA9ICh1aW50cHRyX3QpIGFjY2Vzcy0+YXJjaF9tYWdpYzsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgbjsKKyAgICAgICAgc3RydWN0IG5kbXNnIHI7CisgICAgfSByZXE7CisKKyAgICBpZiAoYWNjZXNzLT5zeW5jaHJvbml6ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGZkID09IDApIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX25sIHNhOworCisgICAgICAgIGZkID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfUk9VVEUpOworICAgICAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZDogbmV0bGluayBzb2NrZXQgY3JlYXRlIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSAodm9pZCAqKSh1aW50cHRyX3QpZmQ7CisKKyAgICAgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgICAgIHNhLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgICAgICAgIHNhLm5sX2dyb3VwcyA9IFJUTUdSUF9ORUlHSDsKKyAgICAgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2EsIHNpemVvZihzYSkpIDwgMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQ6IG5ldGxpbmsgYmluZCBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlZ2lzdGVyX3JlYWRmZChmZCwgbmV0c25tcF9hY2Nlc3NfYXJwX3JlYWRfbmV0bGluaywgYWNjZXNzKSAhPSAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZDogZXJyb3IgcmVnaXN0ZXJpbmcgbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJzeW5jaHJvbml6aW5nIGFycCB0YWJsZVxuIikpOworCisgICAgYWNjZXNzLT5nZW5lcmF0aW9uKys7CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIHJlcS5uLm5sbXNnX2xlbiA9IHNpemVvZihyZXEpOworICAgIHJlcS5uLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX1JPT1Q7CisgICAgcmVxLm4ubmxtc2dfdHlwZSA9IFJUTV9HRVRORUlHSDsKKyAgICByZXEuci5uZG1fZmFtaWx5ID0gQUZfVU5TUEVDOworCisgICAgciA9IHNlbmQoZmQsICZyZXEsIHJlcS5uLm5sbXNnX2xlbiwgMCk7CisgICAgaWYgKHIgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYWNjZXNzX2FycF9yZWZyZXNoOiBzZW5kIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB3aGlsZSAoIWFjY2Vzcy0+c3luY2hyb25pemVkKQorICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfcmVhZF9uZXRsaW5rKGZkLCBhY2Nlc3MpOworICAgIGFjY2Vzcy0+Z2NfaG9vayhhY2Nlc3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGludCBmZDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6bmV0bGluazphcnAiLCAidW5sb2FkIGFycCBjYWNoZVxuIikpOworCisgICAgZmQgPSAodWludHB0cl90KSBhY2Nlc3MtPmFyY2hfbWFnaWM7CisgICAgaWYgKGZkID4gMCkgeworICAgICAgICAgdW5yZWdpc3Rlcl9yZWFkZmQoZmQpOworICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgYWNjZXNzLT5hcmNoX21hZ2ljID0gTlVMTDsKKwkgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX3JlYWRfbmV0bGluayhpbnQgZmQsIHZvaWQgKmRhdGEpCit7CisgICAgbmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MgPSAobmV0c25tcF9hcnBfYWNjZXNzICopIGRhdGE7CisgICAgbmV0c25tcF9hcnBfZW50cnkgKmVudHJ5OworICAgIGNoYXIgYnVmWzE2Mzg0XTsKKyAgICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgICAgaW50IHIsIGxlbjsKKworICAgIGRvIHsKKyAgICAgICAgciA9IHJlY3YoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7CisgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm5ldGxpbmsgYnVmZmVyIG92ZXJydW5cbiIpOworICAgICAgICAgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworICAgICAgICAgICAgaWYgKGFjY2Vzcy0+Y2FjaGVfZXhwaXJlZCAhPSBOVUxMKQorCQkqYWNjZXNzLT5jYWNoZV9leHBpcmVkID0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKDApOworICAgIGxlbiA9IHI7CisKKyAgICBmb3IgKGggPSAoc3RydWN0IG5sbXNnaGRyICopIGJ1ZjsgTkxNU0dfT0soaCwgbGVuKTsgaCA9IE5MTVNHX05FWFQoaCwgbGVuKSkgeworICAgICAgICAgaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkgeworICAgICAgICAgICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMTsKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKworICAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfY3JlYXRlKCk7CisgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJhcnAgbmV0bGluayBub3RpZmljYXRpb25cbiIpKTsKKyAgICAKKyAgICAgICAgIGVudHJ5LT5nZW5lcmF0aW9uID0gYWNjZXNzLT5nZW5lcmF0aW9uOworICAgICAgICAgciA9IGZpbGx1cF9lbnRyeV9pbmZvIChlbnRyeSwgaCk7CisgICAgICAgICBpZiAociA+IDApIHsKKyAgICAgICAgICAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rKGFjY2VzcywgZW50cnkpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiZmlsbGluZyBlbnRyeSBpbmZvIGZhaWxlZFxuIikpOworICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwgImZpbGxpbmcgZW50cnkgaW5mbyBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludAorZmlsbHVwX2VudHJ5X2luZm8obmV0c25tcF9hcnBfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXApCit7CisgICAgc3RydWN0IG5kbXNnICAgKnJ0bXA7CisgICAgc3RydWN0IHJ0YXR0ciAgKnRiW05EQV9NQVggKyAxXSwgKnJ0YTsKKyAgICBpbnQgICAgICAgICAgICAgbGVuZ3RoOworCisgICAgcnRtcCA9IChzdHJ1Y3QgbmRtc2cgKikgTkxNU0dfREFUQShubG1wKTsKKyAgICBzd2l0Y2ggKG5sbXAtPm5sbXNnX3R5cGUpIHsKKyAgICBjYXNlIFJUTV9ORVdORUlHSDoKKyAgICAgICAgaWYgKHJ0bXAtPm5kbV9zdGF0ZSA9PSBOVURfRkFJTEVEKQorICAgICAgICAgICAgZW50cnktPmZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0VOVFJZX0ZMQUdfREVMRVRFOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUTV9ERUxORUlHSDoKKyAgICAgICAgZW50cnktPmZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0VOVFJZX0ZMQUdfREVMRVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUTV9HRVRORUlHSDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsCisgICAgICAgICAgICAgICAgICAgICJXcm9uZyBOZXRsaW5rIG1lc3NhZ2UgdHlwZSAlZFxuIiwgbmxtcC0+bmxtc2dfdHlwZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHJ0bXAtPm5kbV9zdGF0ZSA9PSBOVURfTk9BUlApIHsKKyAgICAgICAgLyogTlVEX05PQVJQIGlzIGZvciBicm9hZGNhc3QgYWRkcmVzc2VzIGFuZCBzaW1pbGFyLAorICAgICAgICAgKiBkcm9wIHRoZW0gc2lsZW50bHkgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbWVtc2V0KHRiLCAwLCBzaXplb2Yoc3RydWN0IHJ0YXR0ciAqKSAqIChOREFfTUFYICsgMSkpOworICAgIGxlbmd0aCA9IG5sbXAtPm5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKnJ0bXApKTsKKyAgICBydGEgPSAoKHN0cnVjdCBydGF0dHIgKikgKCgoY2hhciAqKSAocnRtcCkpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZG1zZykpKSk7CisgICAgd2hpbGUgKFJUQV9PSyhydGEsIGxlbmd0aCkpIHsKKyAgICAgICAgaWYgKHJ0YS0+cnRhX3R5cGUgPD0gTkRBX01BWCkKKyAgICAgICAgICAgIHRiW3J0YS0+cnRhX3R5cGVdID0gcnRhOworICAgICAgICBydGEgPSBSVEFfTkVYVChydGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGaWxsIHVwIHRoZSBpbmRleCBhbmQgYWRkcmVzc2VzCisgICAgICovCisgICAgZW50cnktPmlmX2luZGV4ID0gcnRtcC0+bmRtX2lmaW5kZXg7CisgICAgaWYgKHRiW05EQV9EU1RdKSB7CisgICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA9IFJUQV9QQVlMT0FEKHRiW05EQV9EU1RdKTsKKyAgICAgICAgaWYgKGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA+IHNpemVvZihlbnRyeS0+YXJwX2lwYWRkcmVzcykpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRsaW5rIGlwIGFkZHJlc3MgbGVuZ3RoICVkIGlzIHRvbyBsb25nXG4iLAorICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoZW50cnktPmFycF9pcGFkZHJlc3MsIFJUQV9EQVRBKHRiW05EQV9EU1RdKSwKKyAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworICAgIH0KKyAgICBpZiAodGJbTkRBX0xMQUREUl0pIHsKKyAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSBSVEFfUEFZTE9BRCh0YltOREFfTExBRERSXSk7CisgICAgICAgIGlmIChlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiA+IHNpemVvZihlbnRyeS0+YXJwX3BoeXNhZGRyZXNzKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldGxpbmsgaHcgYWRkcmVzcyBsZW5ndGggJWQgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIFJUQV9EQVRBKHRiW05EQV9MTEFERFJdKSwKKyAgICAgICAgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHJ0bXAtPm5kbV9zdGF0ZSkgeworICAgIGNhc2UgTlVEX0lOQ09NUExFVEU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX0lOQ09NUExFVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX1JFQUNIQUJMRToKKyAgICBjYXNlIE5VRF9QRVJNQU5FTlQ6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1JFQUNIQUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfU1RBTEU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1NUQUxFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9ERUxBWToKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfREVMQVk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX1BST0JFOgorICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9QUk9CRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfRkFJTEVEOgorICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9JTlZBTElEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9OT05FOgorICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9VTktOT1dOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVW5yZWNvZ25pemVkIEFSUCBlbnRyeSBzdGF0ZSAlZCIsIHJ0bXAtPm5kbV9zdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAocnRtcC0+bmRtX3N0YXRlKSB7CisgICAgY2FzZSBOVURfSU5DT01QTEVURToKKyAgICBjYXNlIE5VRF9GQUlMRUQ6CisgICAgY2FzZSBOVURfTk9ORToKKyAgICAgICAgZW50cnktPmFycF90eXBlID0gSU5FVE5FVFRPTUVESUFUWVBFX0lOVkFMSUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX1JFQUNIQUJMRToKKyAgICBjYXNlIE5VRF9TVEFMRToKKyAgICBjYXNlIE5VRF9ERUxBWToKKyAgICBjYXNlIE5VRF9QUk9CRToKKyAgICAgICAgZW50cnktPmFycF90eXBlID0gSU5FVE5FVFRPTUVESUFUWVBFX0RZTkFNSUM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX1BFUk1BTkVOVDoKKyAgICAgICAgZW50cnktPmFycF90eXBlID0gSU5FVE5FVFRPTUVESUFUWVBFX1NUQVRJQzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZW50cnktPmFycF90eXBlID0gSU5FVE5FVFRPTUVESUFUWVBFX0xPQ0FMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTljZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX3N5c2N0bC5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiAhZGVmaW5lZChTQV9TSVpFKSAmJiAhZGVmaW5lZChSVF9ST1VORFVQKQorI2RlZmluZSBSVF9ST1VORFVQKGEpICBcCisJKChhKSA+IDAgPyAoMSArICgoKGEpIC0gMSkgfCAoc2l6ZW9mKGxvbmcpIC0gMSkpKSA6IHNpemVvZihsb25nKSkKKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkX2FycF90YWJsZV9mcm9tX3N5c2N0bChuZXRzbm1wX2FycF9hY2Nlc3MgKik7CitzdGF0aWMgaW50IF9sb2FkX25kcF90YWJsZV9mcm9tX3N5c2N0bChuZXRzbm1wX2FycF9hY2Nlc3MgKik7CisKK25ldHNubXBfYXJwX2FjY2VzcyAqCituZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlKHVfaW50IGluaXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBVcGRhdGUgKnVwZGF0ZV9ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwR0MgKmdjX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2FjaGVfdGltZW91dCwgaW50ICpjYWNoZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY2FjaGVfZXhwaXJlZCkKK3sKKyAgICBuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzczsKKworICAgIGFjY2VzcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9hcnBfYWNjZXNzKTsKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1hbGxvYyBlcnJvciBpbiBuZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYWNjZXNzLT5hcmNoX21hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPm1hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rID0gdXBkYXRlX2hvb2s7CisgICAgYWNjZXNzLT5nY19ob29rID0gZ2NfaG9vazsKKyAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CisKKyAgICBpZiAoY2FjaGVfdGltZW91dCAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfdGltZW91dCA9IDU7CisgICAgaWYgKGNhY2hlX2ZsYWdzICE9IE5VTEwpCisgICAgICAgICpjYWNoZV9mbGFncyB8PSBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRAorICAgICAgICAgICAgICAgICAgICAgICAgfCBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEOworICAgIGFjY2Vzcy0+Y2FjaGVfZXhwaXJlZCA9IGNhY2hlX2V4cGlyZWQ7CisKKyAgICByZXR1cm4gYWNjZXNzOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2RlbGV0ZShuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgbmV0c25tcF9hY2Nlc3NfYXJwX3VubG9hZChhY2Nlc3MpOworICAgIGZyZWUoYWNjZXNzKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaW50IGVyciA9IDA7CisKKyAgICBhY2Nlc3MtPmdlbmVyYXRpb24rKzsKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQgaXB2NFxuIikpOworICAgIGVyciA9IF9sb2FkX2FycF90YWJsZV9mcm9tX3N5c2N0bChhY2Nlc3MpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAibmV0c25tcF9hY2Nlc3NfYXJwX2lwdjQgZmFpbGVkICVkXG4iLCBlcnIpKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGFjY2Vzcy0+Z2NfaG9vayhhY2Nlc3MpOworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gKGVyciA9PSAwKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQgaXB2NlxuIikpOworICAgIGVyciA9IF9sb2FkX25kcF90YWJsZV9mcm9tX3N5c2N0bChhY2Nlc3MpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAibmV0c25tcF9hY2Nlc3NfYXJwX2lwdjYgZmFpbGVkICVkXG4iLCBlcnIpKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGFjY2Vzcy0+Z2NfaG9vayhhY2Nlc3MpOworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gKGVyciA9PSAwKTsKKyNlbmRpZgorCitvdXQ6CisgICAgcmV0dXJuIChlcnIgPT0gMCA/IDAgOiAtMSk7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbG9hZF9hcnBfdGFibGVfZnJvbV9zeXNjdGwobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgbmV0c25tcF9hcnBfZW50cnkgKmVudHJ5OworICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW5hcnAgKnNpbjI7CisgICAgc3RydWN0IHNvY2thZGRyX2RsICpzZGw7CisgICAgY2hhciAqYnVmLCAqbGltLCAqbmV3YnVmLCAqbmV4dDsKKyAgICBpbnQgbWliWzZdOworICAgIHNpemVfdCBuZWVkZWQ7CisgICAgaW50IGVyciwgc3Q7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFjY2Vzcyk7CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gQUZfSU5FVDsKKyAgICBtaWJbNF0gPSBORVRfUlRfRkxBR1M7CisgICAgbWliWzVdID0gUlRGX0xMSU5GTzsKKworICAgIGVyciA9IDA7CisgICAgYnVmID0gbmV3YnVmID0gTlVMTDsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbG9naWMgd2FzIGFkYXB0ZWQgZnJvbSBzZWFyY2goLi4pIGluIHVzci5zYmluL2FycC9hcnAuYyAqLworCisgICAgaWYgKHN5c2N0bChtaWIsIDYsIE5VTEwsICZuZWVkZWQsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogRW1wdHkgYXJwIHRhYmxlLiAqLworICAgIGlmIChuZWVkZWQgPT0gMCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG5ld2J1ZiA9IHJlYWxsb2MoYnVmLCBuZWVkZWQpOworICAgICAgICBpZiAobmV3YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IG5ld2J1ZjsKKyAgICAgICAgc3QgPSBzeXNjdGwobWliLCA2LCBidWYsICZuZWVkZWQsIE5VTEwsIDApOworICAgICAgICBpZiAoc3QgPT0gMCB8fCBlcnJubyAhPSBFTk9NRU0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZGVkICs9IG5lZWRlZCAvIDg7IC8qIFhYWDogd2h5IDg/ICovCisgICAgfQorICAgIGlmIChzdCA9PSAtMSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbGltID0gYnVmICsgbmVlZGVkOworICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pIHsKKworICAgICAgICBydG0gPSAoc3RydWN0IHJ0X21zZ2hkciAqKW5leHQ7CisgICAgICAgIHNpbjIgPSAoc3RydWN0IHNvY2thZGRyX2luYXJwKikocnRtICsgMSk7CisjaWZkZWYgU0FfU0laRQorICAgICAgICBzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsKikoKGNoYXIgKilzaW4yICsgU0FfU0laRShzaW4yKSk7CisjZWxzZQorCXNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSh2b2lkICopKFJUX1JPVU5EVVAoc2luMi0+c2luX2xlbikgKyAoY2hhciAqKSh2b2lkICopc2luMik7CisjZW5kaWYKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisgICAgICAgIGVudHJ5LT5pZl9pbmRleCA9IHJ0bS0+cnRtX2luZGV4OworCisgICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA9IDQ7CisKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfaXBhZGRyZXNzLCAmc2luMi0+c2luX2FkZHIuc19hZGRyLAorICAgICAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKTsKKworICAgICAgICAvKiBIVyBBZGRyZXNzICovCisgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuID0gNjsKKyAgICAgICAgaWYgKDAgPCBzZGwtPnNkbF9hbGVuICYmCisgICAgICAgICAgICBzZGwtPnNkbF9hbGVuIDw9IE5FVFNOTVBfQUNDRVNTX0FSUF9QSFlTQUREUl9CVUZfU0laRSkgeworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIExMQUREUihzZGwpLCBzZGwtPnNkbF9hbGVuKTsKKyAgICAgICAgICAgIC8qIFByb2Nlc3Mgc3RhdHVzICovCisgICAgICAgICAgICAvKiBYWFg6IHNldHRpbmcgdGhpcyB2YWx1ZSBmb3IgYWxsIHN0YXRlcyBpcyB3cm9uZy4gKi8KKyAgICAgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1JFQUNIQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NbMF0gPSAnXDAnOworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfSU5DT01QTEVURTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFByb2Nlc3MgdHlwZSAqLworICAgICAgICAvKiBYWFg6IG1vcmUgc3RhdGVzIHNob3VsZCBiZSBoYW5kbGVkIGhlcmUsIHByb2JhYmx5Li4gKi8KKyAgICAgICAgaWYgKHJ0bS0+cnRtX3JteC5ybXhfZXhwaXJlID09IDApCisgICAgICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfU1RBVElDOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfRFlOQU1JQzsKKworICAgICAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rKGFjY2VzcywgZW50cnkpOworCisgICAgfQorCitvdXQ6CisgICAgZnJlZShidWYpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK19sb2FkX25kcF90YWJsZV9mcm9tX3N5c2N0bChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyNpZiAxCisgICAgbmV0c25tcF9hcnBfZW50cnkgKmVudHJ5OworICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4yOworICAgIHN0cnVjdCBzb2NrYWRkcl9kbCAqc2RsOworICAgIHNpemVfdCBuZWVkZWQ7CisgICAgaW50IGVyciwgbWliWzZdLCBzdDsKKyAgICBjaGFyICpidWYsICpsaW0sICpuZXdidWYsICpuZXh0OworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBhY2Nlc3MpOworCisgICAgbWliWzBdID0gQ1RMX05FVDsKKyAgICBtaWJbMV0gPSBQRl9ST1VURTsKKyAgICBtaWJbMl0gPSAwOworICAgIG1pYlszXSA9IEFGX0lORVQ2OworICAgIG1pYls0XSA9IE5FVF9SVF9GTEFHUzsKKyAgICBtaWJbNV0gPSBSVEZfTExJTkZPOworCisgICAgZXJyID0gMDsKKyAgICBidWYgPSBuZXdidWYgPSBOVUxMOworCisgICAgaWYgKHN5c2N0bChtaWIsIDYsIE5VTEwsICZuZWVkZWQsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogRW1wdHkgYXJwIHRhYmxlLiAqLworICAgIGlmIChuZWVkZWQgPT0gMCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG5ld2J1ZiA9IHJlYWxsb2MoYnVmLCBuZWVkZWQpOworICAgICAgICBpZiAobmV3YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IG5ld2J1ZjsKKyAgICAgICAgc3QgPSBzeXNjdGwobWliLCA2LCBidWYsICZuZWVkZWQsIE5VTEwsIDApOworICAgICAgICBpZiAoc3QgPT0gMCB8fCBlcnJubyAhPSBFTk9NRU0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZGVkICs9IG5lZWRlZCAvIDg7IC8qIFhYWDogd2h5IDg/ICovCisgICAgfQorICAgIGlmIChzdCA9PSAtMSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbGltID0gYnVmICsgbmVlZGVkOworICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pIHsKKworICAgICAgICBydG0gPSAoc3RydWN0IHJ0X21zZ2hkciAqKW5leHQ7CisgICAgICAgIHNpbjIgPSAoc3RydWN0IHNvY2thZGRyX2luNiopKHJ0bSArIDEpOworI2lmZGVmIFNBX1NJWkUKKyAgICAgICAgc2RsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCopKChjaGFyICopc2luMiArIFNBX1NJWkUoc2luMikpOworI2Vsc2UKKwlzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsKikodm9pZCAqKShSVF9ST1VORFVQKHNpbjItPnNpbjZfbGVuKSArIChjaGFyICopKHZvaWQgKilzaW4yKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghKHJ0bS0+cnRtX2ZsYWdzICYgUlRGX0hPU1QpIHx8CisgICAgICAgICAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNpbjItPnNpbjZfYWRkcikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisgICAgICAgIGVudHJ5LT5pZl9pbmRleCA9IHJ0bS0+cnRtX2luZGV4OworCisgICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA9IDE2OworCisgICAgICAgIG1lbWNweShlbnRyeS0+YXJwX2lwYWRkcmVzcywgJnNpbjItPnNpbjZfYWRkci5zNl9hZGRyLAorICAgICAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKTsKKworICAgICAgICAvKiBIVyBBZGRyZXNzICovCisgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuID0gc2RsLT5zZGxfYWxlbjsKKyAgICAgICAgaWYgKDAgPCBzZGwtPnNkbF9hbGVuICYmCisgICAgICAgICAgICBzZGwtPnNkbF9hbGVuIDw9IE5FVFNOTVBfQUNDRVNTX0FSUF9QSFlTQUREUl9CVUZfU0laRSkgeworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIExMQUREUihzZGwpLCBzZGwtPnNkbF9hbGVuKTsKKyAgICAgICAgICAgIC8qIFByb2Nlc3Mgc3RhdHVzICovCisgICAgICAgICAgICAvKiBYWFg6IHNldHRpbmcgdGhpcyB2YWx1ZSBmb3IgYWxsIHN0YXRlcyBpcyB3cm9uZy4gKi8KKyAgICAgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1JFQUNIQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NbMF0gPSAnXDAnOworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfSU5DT01QTEVURTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFByb2Nlc3MgdHlwZSAqLworICAgICAgICAvKiBYWFg6IG1vcmUgc3RhdGVzIHNob3VsZCBiZSBoYW5kbGVkIGhlcmUsIHByb2JhYmx5Li4gKi8KKyAgICAgICAgaWYgKHJ0bS0+cnRtX3JteC5ybXhfZXhwaXJlID09IDApCisgICAgICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfU1RBVElDOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfRFlOQU1JQzsKKworICAgICAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rKGFjY2VzcywgZW50cnkpOworCisgICAgfQorCitvdXQ6CisgICAgZnJlZShidWYpOworICAgIHJldHVybiBlcnI7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWI5OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogZGVmYXVsdHJvdXRlciBkYXRhIGFjY2VzcyBoZWFkZXIKKyAqCisgKiAkSWQ6ICQKKyAqLworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBjb25maWd1cmUgcmVxdWlyZWQgZmlsZXMKKyAqCisgKiBOb3RlczoKKyAqCisgKiAxKSBwcmVmZXIgZnVuY3Rpb25hbGl0eSBvdmVyIHBsYXRmb3JtLCB3aGVyZSBwb3NzaWJsZS4gSWYgYSBtZXRob2QKKyAqICAgIGlzIGF2YWlsYWJsZSBmb3IgbXVsdGlwbGUgcGxhdGZvcm1zLCB0ZXN0IHRoYXQgZmlyc3QuIFRoYXQgd2F5CisgKiAgICB3aGVuIGEgbmV3IHBsYXRmb3JtIGlzIHBvcnRlZCwgaXQgd29uJ3QgbmVlZCBhIG5ldyB0ZXN0IGhlcmUuCisgKgorICogMikgZG9uJ3QgZG8gZGV0YWlsIHJlcXVpcmVtZW50cyBoZXJlLiBJZiwgZm9yIGV4YW1wbGUsCisgKiAgICBIUFVYMTEgaGFkIGRpZmZlcmVudCByZXVpcmVtZW50cyB0aGFuIG90aGVyIEhQVVgsIHRoYXQgc2hvdWxkCisgKiAgICBiZSBoYW5kbGVkIGluIHRoZSAqX2hwdXguaCBoZWFkZXIgZmlsZS4KKyAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uKQorI2lmIGRlZmluZWQoIGxpbnV4ICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggZnJlZWJzZDQgKSB8fCBkZWZpbmVkKCBuZXRic2Q1ICkgfHwgZGVmaW5lZCggb3BlbmJzZCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwpCisjZWxzZQorLyoKKyAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQorICovCitjb25maWdfZXJyb3IodGhlIGRlZmF1bHRyb3V0ZXIgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlODViZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqICBkZWZhdWx0cm91dGVyIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDokCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmg+CisKKyNpbmNsdWRlICJpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgaW50IF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb21wYXJlX2FkZHIoY29uc3Qgdm9pZCAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnJocyk7CitzdGF0aWMgdm9pZCBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfcmVsZWFzZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCk7CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogZXh0ZXJuYWwgcGVyLWFyY2hpdGVjdHVyZSBmdW5jdGlvbnMgcHJvdG90eXBlcworICoKKyAqIFRoZXNlIHNob3VsZG4ndCBiZSBjYWxsZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljLCBzbyB0aGV5IGFyZW4ndCBpbgorICogdGhlIGhlYWRlciBmaWxlLgorICovCitleHRlcm4gaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9lbnRyeV9pbml0KG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZW50cnkpOworCitleHRlcm4gaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY29udGFpbmVyIGZ1bmN0aW9ucworICovCisvKioKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfaW5pdCh1X2ludCBmbGFncykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyMTsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjpjb250YWluZXIiLCAiaW5pdFxuIikpOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lcnMuIG9uZSBpbmRleGVkIGJ5IGlmSW5kZXgsIHRoZSBvdGhlcgorICAgICAqIGluZGV4ZWQgYnkgaWZOYW1lLgorICAgICAqLworICAgIGNvbnRhaW5lcjEgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJhY2Nlc3NfZGVmYXVsdHJvdXRlcjp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIxKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkZWZhdWx0cm91dGVyIHByaW1hcnkgY29udGFpbmVyIGlzIG5vdCBmb3VuZFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjb250YWluZXIxLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZHJfaW5kZXgiKTsKKworICAgIGlmIChmbGFncyAmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSU5JVF9BRERMX0lEWF9CWV9BRERSKSB7CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIyID0KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImRlZmF1bHRyb3V0ZXJfYWRkcjphY2Nlc3NfZGVmYXVsdHJvdXRlcjp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyMikgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRlZmF1bHRyb3V0ZXIgc2Vjb25kYXJ5IGNvbnRhaW5lciBub3QgZm91bmRcbiIpOworICAgICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyMSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lcjItPmNvbXBhcmUgPSBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY29tcGFyZV9hZGRyOworICAgICAgICBjb250YWluZXIyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZHJfYWRkciIpOworCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChjb250YWluZXIxLCBjb250YWluZXIyKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyMTsKK30KKworLyoqCisgKiBAcmV0dmFsIE5VTEwgIGVycm9yCisgKiBAcmV0dmFsICFOVUxMIHBvaW50ZXIgdG8gY29udGFpbmVyCisgKi8KK25ldHNubXBfY29udGFpbmVyKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzsKKyAgICAgdV9pbnQgY29udGFpbmVyX2ZsYWdzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjpjb250YWluZXIiLCAibG9hZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX0FERExfSURYX0JZX0FERFIpIHsKKyAgICAgICAgICAgIGNvbnRhaW5lcl9mbGFncyB8PQorICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSU5JVF9BRERMX0lEWF9CWV9BRERSOworICAgICAgICB9CisgICAgICAgIGNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9pbml0KGNvbnRhaW5lcl9mbGFncyk7CisgICAgfQorCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfZGVmYXVsdHJvdXRlclxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gIG5ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgaWYgKDAgIT0gcmMpIHsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfTk9GTEFHUyk7CisgICAgICAgIGNvbnRhaW5lciA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKwordm9pZAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmcmVlX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjpjb250YWluZXIiLCAiZnJlZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBmb3IgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfRE9OVF9DTEVBUikpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfS0VFUF9DT05UQUlORVIpKQorICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGRlZmF1bHRyb3V0ZXJfZW50cnkgZnVuY3Rpb25zCisgKi8KKy8qKgorICovCisvKioKKyAqLworbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICoKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKHZvaWQpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkpOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmVudHJ5IiwgImNyZWF0ZVxuIikpOworCisgICAgaWYoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gJmVudHJ5LT5uc19kcl9pbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIGRlZmF1bHRzCisgICAgICovCisgICAgZW50cnktPmRyX2xpZmV0aW1lICAgPSBJUERFRkFVTFRST1VURVJMSUZFVElNRV9NQVg7CisgICAgZW50cnktPmRyX3ByZWZlcmVuY2UgPSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX01FRElVTTsKKworICAgIHJjID0gbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfZW50cnlfaW5pdChlbnRyeSk7CisgICAgaWYgKFNOTVBfRVJSX05PRVJST1IgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmRlZmF1bHRyb3V0ZXI6Y3JlYXRlIiwiZXJyb3IgJWQgaW4gYXJjaCBpbml0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICBlbnRyeSA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIGZyZWUoZW50cnkpOworfQorCisvKioKKyAqIHVwZGF0ZSBhbiBvbGQgZGVmYXVsdHJvdXRlcl9lbnRyeSBmcm9tIGEgbmV3IG9uZQorICoKKyAqIEBub3RlOiBvbmx5IG1pYiByZWxhdGVkIGl0ZW1zIGFyZSBjb21wYXJlZC4gSW50ZXJuYWwgb2JqZWN0cworICogc3VjaCBhcyBvaWRfaW5kZXgsIG5zX2RyX2luZGV4IGFuZCBmbGFncyBhcmUgbm90IGNvbXBhcmVkLgorICoKKyAqIEByZXR2YWwgLTEgIDogZXJyb3IKKyAqIEByZXR2YWwgPj0wIDogbnVtYmVyIG9mIGZpZWxkcyB1cGRhdGVkCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV91cGRhdGUobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqcmhzKQoreworICAgIGludCBjaGFuZ2VkID0gMDsKKworICAgIGlmIChsaHMtPmRyX2FkZHJlc3N0eXBlICE9IHJocy0+ZHJfYWRkcmVzc3R5cGUpIHsKKyAgICAgICAgKytjaGFuZ2VkOworICAgICAgICBsaHMtPmRyX2FkZHJlc3N0eXBlID0gcmhzLT5kcl9hZGRyZXNzdHlwZTsKKyAgICB9CisKKyAgICBpZiAobGhzLT5kcl9hZGRyZXNzX2xlbiAhPSByaHMtPmRyX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIGNoYW5nZWQgKz0gMjsKKyAgICAgICAgbGhzLT5kcl9hZGRyZXNzX2xlbiA9IHJocy0+ZHJfYWRkcmVzc19sZW47CisgICAgICAgIG1lbWNweShsaHMtPmRyX2FkZHJlc3MsIHJocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzX2xlbik7CisgICAgfQorICAgIGVsc2UgaWYgKG1lbWNtcChsaHMtPmRyX2FkZHJlc3MsIHJocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzX2xlbikgIT0gMCkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIG1lbWNweShsaHMtPmRyX2FkZHJlc3MsIHJocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzX2xlbik7CisgICAgfQorCisgICAgaWYgKGxocy0+ZHJfaWZfaW5kZXggIT0gcmhzLT5kcl9pZl9pbmRleCkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfaWZfaW5kZXggPSByaHMtPmRyX2lmX2luZGV4OworICAgIH0KKworICAgIGlmIChsaHMtPmRyX2xpZmV0aW1lICE9IHJocy0+ZHJfbGlmZXRpbWUpIHsKKyAgICAgICAgKytjaGFuZ2VkOworICAgICAgICBsaHMtPmRyX2xpZmV0aW1lID0gcmhzLT5kcl9saWZldGltZTsKKyAgICB9CisKKyAgICBpZiAobGhzLT5kcl9wcmVmZXJlbmNlICE9IHJocy0+ZHJfcHJlZmVyZW5jZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfcHJlZmVyZW5jZSA9IHJocy0+ZHJfcHJlZmVyZW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworLyoqCisgKiBjb3B5IGFuICBkZWZhdWx0cm91dGVyX2VudHJ5CisgKgorICogQHJldHZhbCAtMSAgOiBlcnJvcgorICogQHJldHZhbCAwICAgOiBubyBlcnJvcgorICovCitpbnQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY29weShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqcmhzKQoreworICAgIGxocy0+ZHJfYWRkcmVzc3R5cGUgPSByaHMtPmRyX2FkZHJlc3N0eXBlOworICAgIGxocy0+ZHJfYWRkcmVzc19sZW4gPSByaHMtPmRyX2FkZHJlc3NfbGVuOworICAgIG1lbWNweShsaHMtPmRyX2FkZHJlc3MsIHJocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzX2xlbik7CisgICAgbGhzLT5kcl9pZl9pbmRleCAgICA9IHJocy0+ZHJfaWZfaW5kZXg7CisgICAgbGhzLT5kcl9saWZldGltZSAgICA9IHJocy0+ZHJfbGlmZXRpbWU7CisgICAgbGhzLT5kcl9wcmVmZXJlbmNlICA9IHJocy0+ZHJfcHJlZmVyZW5jZTsKKworICAgIHJldHVybiAwOworfQorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFV0aWxpdHkgcm91dGluZXMKKyAqLworCisvKioKKyAqLwordm9pZAorX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X3JlbGVhc2UobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICogZW50cnksIHZvaWQgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGVudHJ5KTsKK30KKworc3RhdGljIGludCBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY29tcGFyZV9hZGRyKGNvbnN0IHZvaWQgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnJocykKK3sKKyAgICBjb25zdCBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmxoID0gKGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqKWxoczsKKyAgICBjb25zdCBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKnJoID0gKGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqKXJoczsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbGhzKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJocyk7CisKKyAgICAvKgorICAgICAqIGNvbXBhcmUgYWRkcmVzcyBsZW5ndGgKKyAgICAgKi8KKyAgICBpZiAobGgtPmRyX2FkZHJlc3NfbGVuIDwgcmgtPmRyX2FkZHJlc3NfbGVuKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGgtPmRyX2FkZHJlc3NfbGVuID4gcmgtPmRyX2FkZHJlc3NfbGVuKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8qCisgICAgICogbGVuZ3RoIGVxdWFsLCBjb21wYXJlIGFkZHJlc3MKKyAgICAgKi8KKyAgICByZXR1cm4gbWVtY21wKGxoLT5kcl9hZGRyZXNzLCByaC0+ZHJfYWRkcmVzcywgbGgtPmRyX2FkZHJlc3NfbGVuKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODAxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQ6JAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oPgorCisjaW5jbHVkZSAiaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgUkNWQlVGX1NJWkUgMzI3NjgKKyNkZWZpbmUgU05EQlVGX1NJWkUgNTEyCisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisjZGVmaW5lIERSX0FERFJTVFJMRU4gIElORVQ2X0FERFJTVFJMRU4KKyNlbHNlCisjZGVmaW5lIERSX0FERFJTVFJMRU4gIElORVRfQUREUlNUUkxFTgorI2VuZGlmCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogbG9jYWwgc3RhdGljIHByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKTsKKworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2VudHJ5X2luaXQobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjplbnRyeTphcmNoIiwgImxvYWQgKGxpbnV4KVxuIikpOworCisgICAgcmMgPSBfbG9hZChjb250YWluZXIpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyNpZm5kZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlciIsCisgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgZGVmYXVsdCByb3V0ZXIgaW5mb3JtYXRpb24iCisgICAgICAgICAgICAgICAgImFzIG5ldGxpbmsgc29ja2V0IGlzIG5vdCBhdmFpbGFibGVcbiIpKTsKKyAgICByZXR1cm4gLTE7CisjZWxzZQorICAgIGludCByYyA9IDA7CisgICAgaW50IGlkeF9vZmZzZXQgPSAwOworICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZW50cnk7CisgICAgaW50IG5sc2s7CisgICAgc3RydWN0IHNvY2thZGRyX25sIGFkZHI7CisgICAgaW50IHJjdmJ1Zl9zaXplID0gUkNWQlVGX1NJWkU7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgaGRyOworICAgICAgICB1bnNpZ25lZCBjaGFyIHJjdmJ1ZltSQ1ZCVUZfU0laRV07CisgICAgfSByY3ZidWZfdW5pb247CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgaGRyOworICAgICAgICB1bnNpZ25lZCBjaGFyIHNuZGJ1ZltTTkRCVUZfU0laRV07CisgICAgfSBzbmRidWZfdW5pb247CisgICAgdW5zaWduZWQgY2hhciAqY29uc3QgcmN2YnVmID0gcmN2YnVmX3VuaW9uLnJjdmJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyICpjb25zdCBzbmRidWYgPSBzbmRidWZfdW5pb24uc25kYnVmOworICAgIHN0cnVjdCBubG1zZ2hkciAqaGRyOworICAgIHN0cnVjdCBydG1zZyAqcnRoZHI7CisgICAgaW50IGNvdW50OworICAgIGludCBlbmRfb2ZfbWVzc2FnZSA9IDA7CisgICAgbG9uZyBoeiA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBPcGVuIGEgbmV0bGluayBzb2NrZXQKKyAgICAgKi8KKyAgICBubHNrID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfUk9VVEUpOworICAgIGlmIChubHNrIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IG9wZW4gbmV0bGluayBzb2NrZXQgOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZXRzb2Nrb3B0KG5sc2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKKyAgICAgICAgICAgICAgICAgICAmcmN2YnVmX3NpemUsIHNpemVvZihyY3ZidWZfc2l6ZSkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IG9wZW4gbmV0bGluayBzb2NrZXQgOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2xvc2Uobmxzayk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgbWVtc2V0KCZhZGRyLCAnXDAnLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKSk7CisgICAgYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworCisgICAgbWVtc2V0KHNuZGJ1ZiwgJ1wwJywgU05EQlVGX1NJWkUpOworICAgIGhkciA9ICZzbmRidWZfdW5pb24uaGRyOworICAgIGhkci0+bmxtc2dfdHlwZSA9IFJUTV9HRVRST1VURTsKKyAgICBoZHItPm5sbXNnX3BpZCA9IGdldHBpZCgpOworICAgIGhkci0+bmxtc2dfc2VxID0gMDsKKyAgICBoZHItPm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVCB8IE5MTV9GX01BVENIIHwgTkxNX0ZfUkVRVUVTVDsKKyAgICBoZHItPm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0bXNnKSk7CisgICAgcnRoZHIgPSAoc3RydWN0IHJ0bXNnICopTkxNU0dfREFUQShoZHIpOworICAgIHJ0aGRyLT5ydG1fdGFibGUgPSBSVF9UQUJMRV9NQUlOOworCisgICAgLyoKKyAgICAgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUga2VybmVsIHRvIGR1bXAgdGhlIHJvdXRpbmcgdGFibGUgdG8gdXMKKyAgICAgKi8KKyAgICBjb3VudCA9IHNlbmR0byhubHNrLCBzbmRidWYsIGhkci0+bmxtc2dfbGVuLCAwLAorICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9ubCkpOworICAgIGlmIChjb3VudCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuYWJsZSB0byBzZW5kIG5ldGxpbmsgbWVzc2FnZSB0byBrZXJuZWwgOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2xvc2Uobmxzayk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdyBsaXN0ZW4gZm9yIHJlc3BvbnNlCisgICAgICovCisgICAgZG8geworICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5sbWhwOworICAgICAgICBzdHJ1Y3QgcnRtc2cgKnJ0bXA7CisgICAgICAgIHN0cnVjdCBydGF0dHIgKnJ0YXA7CisgICAgICAgIHN0cnVjdCBydGFfY2FjaGVpbmZvICpydGNpOworICAgICAgICBzb2NrbGVuX3Qgc29ja19sZW47CisgICAgICAgIGludCBydGNvdW50OworCisgICAgICAgIG1lbXNldChyY3ZidWYsICdcMCcsIFJDVkJVRl9TSVpFKTsKKyAgICAgICAgc29ja19sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBHZXQgdGhlIG1lc3NhZ2UKKyAgICAgICAgICovCisgICAgICAgIGNvdW50ID0gcmVjdmZyb20obmxzaywgcmN2YnVmLCBSQ1ZCVUZfU0laRSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZzb2NrX2xlbik7CisgICAgICAgIGlmIChjb3VudCA8IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gcmVjZWl2ZSBuZXRsaW5rIG1lc3NhZ2VzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBXYWxrIGFsbCBvZiB0aGUgcmV0dXJuZWQgbWVzc2FnZXMKKyAgICAgICAgICovCisgICAgICAgIG5sbWhwID0gJnJjdmJ1Zl91bmlvbi5oZHI7CisgICAgICAgIHdoaWxlIChOTE1TR19PSyhubG1ocCwgY291bnQpKSB7CisgICAgICAgICAgICB1X2NoYXIgYWRkcmVzc3R5cGU7CisgICAgICAgICAgICBjaGFyICAgYWRkcmVzc1tORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFICsgMV07CisgICAgICAgICAgICBzaXplX3QgYWRkcmVzc19sZW4gPSAgMDsKKyAgICAgICAgICAgIGludCAgICBpZl9pbmRleCAgICA9IC0xOworICAgICAgICAgICAgdV9sb25nIGxpZmV0aW1lICAgID0gIDA7CisgICAgICAgICAgICBpbnQgICAgcHJlZmVyZW5jZSAgPSAtMzsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE1ha2Ugc3VyZSB0aGUgbWVzc2FnZSBpcyBvaworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAobmxtaHAtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAia2VybmVsIHByb2R1Y2VkIG5sbXNnIGVyclxuIik7CisgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEVuZCBvZiBtZXNzYWdlLCB3ZSdyZSBkb25lCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChubG1ocC0+bmxtc2dfdHlwZSAmIE5MTVNHX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBlbmRfb2ZfbWVzc2FnZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHJ0bXNnIHN0cnVjdAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBydG1wID0gTkxNU0dfREFUQShubG1ocCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB6ZXJvIGxlbmd0aCBkZXN0aW5hdGlvbiBpcyBhIGRlZmF1bHQgcm91dGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHJ0bXAtPnJ0bV9kc3RfbGVuICE9IDApCisgICAgICAgICAgICAgICAgZ290byBuZXh0X25sbXNnaGRyOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU3RhcnQgc2Nhbm5pbmcgdGhlIGF0dHJpYnV0ZXMgZm9yIG5lZWRlZCBpbmZvCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChydG1wLT5ydG1fZmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworICAgICAgICAgICAgICAgIGxpZmV0aW1lID0gSVBERUZBVUxUUk9VVEVSTElGRVRJTUVfTUFYOyAgICAgLyogaW5maW5pdHkgKi8KKyAgICAgICAgICAgIH0KKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBlbHNlIGlmIChydG1wLT5ydG1fZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgICAgICAgICAgYWRkcmVzc3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKyAgICAgICAgICAgICAgICAvKiByb3V0ZXIgbGlmZXRpbWUgZm9yIElQdjYgaXMgcmV0cmlldmVkIGJ5IFJUQV9DQUNIRUlORk8gKi8KKyAgICAgICAgICAgICAgICBsaWZldGltZSA9IDA7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIG5leHRfbmxtc2doZHI7IC8qIHNraXAsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhpcyByb3V0ZSAqLworCisgICAgICAgICAgICBwcmVmZXJlbmNlID0gMDsgICAgIC8qIHByZWZlcmVuY2UgaXMgbWVkaXVtKDApIGZvciBub3cgKi8KKworICAgICAgICAgICAgcnRhcCA9IFJUTV9SVEEocnRtcCk7CisgICAgICAgICAgICBydGNvdW50ID0gUlRNX1BBWUxPQUQobmxtaHApOworICAgICAgICAgICAgd2hpbGUgKFJUQV9PSyhydGFwLCBydGNvdW50KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocnRhcC0+cnRhX3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSVEFfT0lGOgorICAgICAgICAgICAgICAgICAgICAgICAgaWZfaW5kZXggPSAqKGludCAqKShSVEFfREFUQShydGFwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFJUQV9HQVRFV0FZOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19sZW4gPSBSVEFfUEFZTE9BRChydGFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAnXDAnLCBzaXplb2YoYWRkcmVzcykpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsIFJUQV9EQVRBKHJ0YXApLCBhZGRyZXNzX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSVEFfQ0FDSEVJTkZPOgorICAgICAgICAgICAgICAgICAgICAgICAgcnRjaSA9IFJUQV9EQVRBKHJ0YXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChydG1wLT5ydG1fZmxhZ3MgJiBSVE1fRl9DTE9ORUQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0Y2kgJiYgcnRjaS0+cnRhX2V4cGlyZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWUgPSBydGNpLT5ydGFfZXhwaXJlcyAvIGh6OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgIC8qIHN3aXRjaCAqLworCisgICAgICAgICAgICAgICAgcnRhcCA9IFJUQV9ORVhUKHJ0YXAsIHJ0Y291bnQpOworICAgICAgICAgICAgfSAvKiB3aGlsZSBSVEFfT0socnRhcCkgKi8KKworICAgICAgICAgICAgaWYgKGFkZHJlc3NfbGVuICE9IDAgJiYgaWZfaW5kZXggIT0gLTEgJiYKKyAgICAgICAgICAgICAgICBsaWZldGltZSAhPSAwICYmIHByZWZlcmVuY2UgIT0gLTMgKSB7CisgICAgICAgICAgICAgICAgREVCVUdJRigiYWNjZXNzOmRlZmF1bHRyb3V0ZXIiKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYWRkcl9zdHJbRFJfQUREUlNUUkxFTl07CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChhZGRyX3N0ciwgJ1wwJywgRFJfQUREUlNUUkxFTik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ0bXAtPnJ0bV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCBhZGRyZXNzLCBhZGRyX3N0ciwgRFJfQUREUlNUUkxFTik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGFkZHJlc3MsIGFkZHJfc3RyLCBEUl9BRERSU1RSTEVOKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRlZmF1bHRyb3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91bmQgZGVmYXVsdCByb3V0ZTogJXMgaWZfaW5kZXggJWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlmZXRpbWUgJWx1IHByZWZlcmVuY2UgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfc3RyLCBpZl9pbmRleCwgbGlmZXRpbWUsIHByZWZlcmVuY2UpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZW50cnktPm5zX2RyX2luZGV4ICAgID0gKytpZHhfb2Zmc2V0OworICAgICAgICAgICAgICAgIGVudHJ5LT5kcl9hZGRyZXNzdHlwZSA9IGFkZHJlc3N0eXBlOworICAgICAgICAgICAgICAgIGVudHJ5LT5kcl9hZGRyZXNzX2xlbiA9IGFkZHJlc3NfbGVuOworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+ZHJfYWRkcmVzcywgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9CVUZfU0laRSk7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2lmX2luZGV4ICAgID0gaWZfaW5kZXg7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2xpZmV0aW1lICAgID0gbGlmZXRpbWU7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX3ByZWZlcmVuY2UgID0gcHJlZmVyZW5jZTsKKworICAgICAgICAgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciB3aXRoIGRlZmF1bHRyb3V0ZXJfZW50cnk6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCituZXh0X25sbXNnaGRyOgorICAgICAgICAgICAgbmxtaHAgPSBOTE1TR19ORVhUKG5sbWhwLCBjb3VudCk7CisgICAgICAgIH0gLyogd2hpbGUgTkxNU0dfT0sobmxtaHApICovCisKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgfSB3aGlsZSAoIWVuZF9vZl9tZXNzYWdlKTsKKworICAgIGNsb3NlKG5sc2spOworICAgIHJldHVybiByYzsKKyNlbmRpZiAgLyogSEFWRV9MSU5VWF9SVE5FVExJTktfSCAqLworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ2ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfc3lzY3RsLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDokCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmg+CisKKyNpbmNsdWRlICJpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAhZGVmaW5lZChTQV9TSVpFKSAmJiAhZGVmaW5lZChSVF9ST1VORFVQKQorI2RlZmluZSBSVF9ST1VORFVQKGEpICBcCisgICAgICAgICgoYSkgPiAwID8gKDEgKyAoKChhKSAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpKSkgOiBzaXplb2YobG9uZykpCisjZW5kaWYKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgaW50IF9sb2FkX2RlZmF1bHRyb3V0ZXJfZnJvbV9zeXNjdGwobmV0c25tcF9jb250YWluZXIgKiwgaW50KTsKKworc3RhdGljIGludCBpZHhfb2Zmc2V0OworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2VudHJ5X2luaXQobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IGVycjsKKworICAgIGVyciA9IDA7CisgICAgaWR4X29mZnNldCA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRlZmF1bHRyb3V0ZXI6ZW50cnk6YXJjaCIsICJsb2FkXG4iKSk7CisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAibmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQ6IGNvbnRhaW5lciBpbnZhbGlkXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZXJyID0gX2xvYWRfZGVmYXVsdHJvdXRlcl9mcm9tX3N5c2N0bChjb250YWluZXIsIEFGX0lORVQpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUjsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIGVyciA9IF9sb2FkX2RlZmF1bHRyb3V0ZXJfZnJvbV9zeXNjdGwoY29udGFpbmVyLCBBRl9JTkVUNik7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0tFRVBfQ09OVEFJTkVSOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisjZW5kaWYKKworb3V0OgorICAgIHJldHVybiBlcnI7Cit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZF9kZWZhdWx0cm91dGVyX2Zyb21fc3lzY3RsKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBmYW1pbHkpCit7CisgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeTsKKyAgICBzdHJ1Y3QgcnRfbXNnaGRyICpydG07CisgICAgc3RydWN0IHNvY2thZGRyICpkc3Rfc2EsICpnd19zYTsKKyAgICBjaGFyICpidWYsICpsaW0sICpuZXdidWYsICpuZXh0OworICAgIGNoYXIgYWRkcmVzc1tORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFXTsKKyAgICBpbnQgbWliWzZdOworICAgIHNpemVfdCBhZGRyZXNzX2xlbiwgbmVlZGVkOworICAgIGludCBhZGRyZXNzX3R5cGUsIGVyciwgcHJlZmVyZW5jZSwgc3Q7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gZmFtaWx5OworICAgIG1pYls0XSA9IE5FVF9SVF9EVU1QOworICAgIG1pYls1XSA9IDA7CisKKyAgICBlcnIgPSAwOworCisgICAgYnVmID0gbmV3YnVmID0gTlVMTDsKKworICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICBhZGRyZXNzX2xlbiA9IDQ7CisgICAgICAgIGFkZHJlc3NfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICB9IGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICBhZGRyZXNzX2xlbiA9IDE2OworICAgICAgICBhZGRyZXNzX3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGVyciA9IEVJTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChtaWIsIDYsIE5VTEwsICZuZWVkZWQsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogRW1wdHkgYXJwIHRhYmxlLiAqLworICAgIGlmIChuZWVkZWQgPT0gMCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG5ld2J1ZiA9IHJlYWxsb2MoYnVmLCBuZWVkZWQpOworICAgICAgICBpZiAobmV3YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IG5ld2J1ZjsKKyAgICAgICAgc3QgPSBzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZihtaWJbMF0pLCBidWYsICZuZWVkZWQsIE5VTEwsIDApOworICAgICAgICBpZiAoc3QgPT0gMCB8fCBlcnJubyAhPSBFTk9NRU0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZGVkICs9IG5lZWRlZCAvIDg7IC8qIFhYWDogd2h5IDg/ICovCisgICAgfQorICAgIGlmIChzdCA9PSAtMSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbGltID0gYnVmICsgbmVlZGVkOworICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pIHsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisJc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55ID0gSU42QUREUl9BTllfSU5JVDsKKyNlbmRpZgorCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKworICAgICAgICBpZiAoIShydG0tPnJ0bV9hZGRycyAmIFJUQV9HQVRFV0FZKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRzdF9zYSA9IChzdHJ1Y3Qgc29ja2FkZHIqKShydG0gKyAxKTsKKyNpZmRlZiBTQV9TSVpFCisgICAgICAgIGd3X3NhID0gKHN0cnVjdCBzb2NrYWRkciopKFNBX1NJWkUoZHN0X3NhKSArIChjaGFyKilkc3Rfc2EpOworI2Vsc2UKKyAgICAgICAgZ3dfc2EgPSAoc3RydWN0IHNvY2thZGRyKikoUlRfUk9VTkRVUChkc3Rfc2EtPnNhX2xlbikgKyAoY2hhciopZHN0X3NhKTsKKyNlbmRpZgorCisgICAgICAgIHN3aXRjaCAoZmFtaWx5KSB7CisgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgIGlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbiopZHN0X3NhKS0+c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisJICAgIG1lbWNweShhZGRyZXNzLCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWd3X3NhKS0+c2luX2FkZHIuc19hZGRyLAorCSAgICAgICAgICAgYWRkcmVzc19sZW4pOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgaWYgKG1lbWNtcCgoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWRzdF9zYSktPnNpbjZfYWRkci5zNl9hZGRyLAorCQkJJmluNmFkZHJfYW55LCBzaXplb2YgaW42YWRkcl9hbnkpICE9IDApCisJCWNvbnRpbnVlOyAvKiBYWFg6IG5lZWQgdG8gZGV0ZXJtaW5lIHF1YWxpZnlpbmcgY3JpdGVyaWEgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICogZGVmYXVsdCBnYXRld2F5cyBpbiBJUHY2LiAqLworICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWRzdF9zYSktPnNpbjZfYWRkci5zNl9hZGRyLAorCQkgICBhZGRyZXNzX2xlbik7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICBlcnIgPSBFTk9NRU07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFhYWDogdGhpcyBpcyB3cm9uZyAoaGFyZGNvZGluZyB0aGUgcm91dGVyIHByZWZlcmVuY2UgdG8gbWVkaXVtKS4gKi8KKyAgICAgICAgcHJlZmVyZW5jZSA9IDA7CisKKyAgICAgICAgZW50cnktPm5zX2RyX2luZGV4ICAgID0gKytpZHhfb2Zmc2V0OworICAgICAgICBlbnRyeS0+ZHJfYWRkcmVzc3R5cGUgPSBhZGRyZXNzX3R5cGU7CisgICAgICAgIGVudHJ5LT5kcl9hZGRyZXNzX2xlbiA9IGFkZHJlc3NfbGVuOworICAgICAgICBtZW1jcHkoZW50cnktPmRyX2FkZHJlc3MsIGFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSk7CisgICAgICAgIGVudHJ5LT5kcl9pZl9pbmRleCA9IHJ0bS0+cnRtX2luZGV4OworICAgICAgICBlbnRyeS0+ZHJfbGlmZXRpbWUgICAgPSBydG0tPnJ0bV9ybXgucm14X2V4cGlyZTsKKyAgICAgICAgZW50cnktPmRyX3ByZWZlcmVuY2UgID0gcHJlZmVyZW5jZTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3Igd2l0aCBkZWZhdWx0cm91dGVyX2VudHJ5OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworb3V0OgorICAgIGZyZWUoYnVmKTsKKyAgICByZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCmluZGV4IGM2NmYxNjEuLmQ3OWM3YzIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKQEAgLTIwLDExICsyMCwxMSBAQAogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eCkKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNyApIHx8IGRlZmluZWQoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkNCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bCkKICNlbHNlCi0vKgotICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0gKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KLSAqLwotY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy11bmtub3duLWFyY2gpCitjb25maWdfZXJyb3IodGhlIGlwYWRkcmVzcyBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMKaW5kZXggMzE3NjU0ZS4uYTY2Mzk4NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jCkBAIC0xMiw2ICsxMiwxOSBAQAogCiAjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oIgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19jb21tb24sIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX2NvbW1vbl9jb3B5X3V0aWxpdGllcywgaXBhZGRyZXNzX2NvbW1vbikKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfZW50cnlfY29weSwgaXBhZGRyZXNzX2NvbW1vbikKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfZW50cnlfdXBkYXRlLCBpcGFkZHJlc3NfY29tbW9uKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19wcmVmaXhfY29weSwgaXBhZGRyZXNzX2NvbW1vbl9jb3B5X3V0aWxpdGllcykKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lQQUREUkVTU19FTlRSWV9DT1BZCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfYXJjaF9lbnRyeV9jb3B5KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lQQUREUkVTU19FTlRSWV9DT1BZICovCisKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogbG9jYWwgc3RhdGljIHByb3RvdHlwZXMKQEAgLTIxMSw3ICsyMjQsOCBAQAogICAgICAqIG1ha2Ugc3VyZSBpbnRlcmZhY2UgYW5kIGlmSW5kZXggbWF0Y2ggdXAKICAgICAgKi8KICAgICBpZiAoTlVMTCA9PSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfbmFtZV9maW5kKGVudHJ5LT5pZl9pbmRleCkpIHsKLSAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpzZXQiLCAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICVkXG4iLAorICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsCisgICAgICAgICAgICAgICAgICAgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWZfaW5kZXgpKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTI0Niw2ICsyNjAsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19FTlRSWV9VUERBVEUKIC8qKgogICogdXBkYXRlIGFuIG9sZCBpcGFkZHJlc3NfZW50cnkgZnJvbSBhIG5ldyBvbmUKICAqCkBAIC0zMDQsMTAgKzMxOSwzMyBAQAogICAgICAgICArK2NoYW5nZWQ7CiAgICAgICAgIGxocy0+aWFfb3JpZ2luID0gcmhzLT5pYV9vcmlnaW47CiAgICAgfQorICAgCisgICAgaWYgKGxocy0+aWFfb25saW5rX2ZsYWcgIT0gcmhzLT5pYV9vbmxpbmtfZmxhZykgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+aWFfb25saW5rX2ZsYWcgPSByaHMtPmlhX29ubGlua19mbGFnOworICAgIH0KKworICAgIGlmIChsaHMtPmlhX2F1dG9ub21vdXNfZmxhZyAhPSByaHMtPmlhX2F1dG9ub21vdXNfZmxhZykgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+aWFfYXV0b25vbW91c19mbGFnID0gcmhzLT5pYV9hdXRvbm9tb3VzX2ZsYWc7CisgICAgfQorCisgICAgaWYgKGxocy0+aWFfcHJlZmVyZWRfbGlmZXRpbWUgIT0gcmhzLT5pYV9wcmVmZXJlZF9saWZldGltZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+aWFfcHJlZmVyZWRfbGlmZXRpbWUgPSByaHMtPmlhX3ByZWZlcmVkX2xpZmV0aW1lOworICAgIH0KKworICAgIGlmIChsaHMtPmlhX3ZhbGlkX2xpZmV0aW1lICE9IHJocy0+aWFfdmFsaWRfbGlmZXRpbWUpIHsKKyAgICAgICAgKytjaGFuZ2VkOworICAgICAgICBsaHMtPmlhX3ZhbGlkX2xpZmV0aW1lID0gcmhzLT5pYV92YWxpZF9saWZldGltZTsKKyAgICB9CisKIAogICAgIHJldHVybiBjaGFuZ2VkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX1VQREFURSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX0NPUFkKIC8qKgogICogY29weSBhbiAgaXBhZGRyZXNzX2VudHJ5CiAgKgpAQCAtMzM5LDEyICszNzcsMTQgQEAKICAgICAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19FTlRSWV9DT1BZICovCiAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogVXRpbGl0eSByb3V0aW5lcwogICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfUFJFRklYX0NPUFkKIC8qKgogICogY29weSB0aGUgcHJlZml4IHBvcnRpb24gb2YgYW4gaXAgYWRkcmVzcwogICovCkBAIC0zNzAsNiArNDEwLDcgQEAKIAogICAgIHJldHVybiBwZnhfbGVuOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX1BSRUZJWF9DT1BZICovCiAKIAogLyoqCkBAIC00MDAsNiArNDQxLDUwIEBACiAgICAgcmV0dXJuIGxlbjsKIH0KIAoraW5fYWRkcl90IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfbWFzayhpbnQgbGVuKQoreworICAgIGludCBpID0gMCwgbSA9IDB4ODA7CisgICAgaW5fYWRkcl90IG1hc2s7CisgICAgdW5zaWduZWQgY2hhciAqbXAgPSAodW5zaWduZWQgY2hhciAqKSZtYXNrOworCisgICAgaWYgKGxlbiA8IDAgfHwgbGVuID4gMzIpIGFib3J0KCk7CisKKyAgICBtZW1zZXQobXAsIDAsIHNpemVvZihtYXNrKSk7CisKKyAgICB3aGlsZSAobGVuID49IDgpIHsKKyAgICAgICAgbXBbaV0gPSAweEZGOworCWxlbiAtPSA4OworCWkrKzsKKyAgICB9CisgICAgd2hpbGUgKGxlbikgeworICAgICAgICBtcFtpXSB8PSBtOworCW0gPj49IDE7CisJbGVuLS07CisgICAgfQorICAgIHJldHVybiBtYXNrOworfQorCitpbnQKK25ldHNubXBfaXBhZGRyZXNzX2lwdjZfcHJlZml4X2xlbihzdHJ1Y3QgaW42X2FkZHIgbWFzaykKK3sKKyAgICBpbnQgaSwgbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICptcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hc2suczZfYWRkcjsKKworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCWlmIChtcFtpXSA9PSAweEZGKSBsZW4gKz0gODsKKwllbHNlIGJyZWFrOworCisgICAgaWYgKGkgPT0gMTYpCisJcmV0dXJuIGxlbjsKKworICAgIHdoaWxlKDB4ODAgJiBtcFtpXSkgeworICAgICAgICArK2xlbjsKKyAgICAgICAgbXBbaV0gPDw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGxlbjsKK30KKwogCiAvKioKICAqLwpAQCAtNDMxLDMgKzUxNiw1MSBAQAogICAgICAqLwogICAgIHJldHVybiBtZW1jbXAobGgtPmlhX2FkZHJlc3MsIHJoLT5pYV9hZGRyZXNzLCBsaC0+aWFfYWRkcmVzc19sZW4pOwogfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0NPTU1PTl9DT1BZX1VUSUxJVElFUworaW50CituZXRzbm1wX2lwYWRkcmVzc19mbGFnc19jb3B5KHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppYV9wcmVmZXJlZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppYV92YWxpZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppYV9vbmxpbmtfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppYV9hdXRvbm9tb3VzX2ZsYWcpCit7CisKKyAgICAvKkNvcHkgYWxsIHRoZSBmbGFncyovCisgICAgKmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lID0gKmlhX3ByZWZlcmVkX2xpZmV0aW1lOworICAgICppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lID0gKmlhX3ZhbGlkX2xpZmV0aW1lOworICAgICppcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnID0gKmlhX29ubGlua19mbGFnOworICAgICppcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZyA9ICppYV9hdXRvbm9tb3VzX2ZsYWc7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9pcGFkZHJlc3NfcHJlZml4X29yaWdpbl9jb3B5KHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciBpYV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NBZGRyVHlwZSkKK3sKKyAgICBpZihpcEFkZHJlc3NBZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNCl7CisgICAgICAgaWYoaWFfb3JpZ2luID09IDYpIC8qUmFuZG9tKi8KKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSAzIC8qSVBBRERSRVNTUFJFRklYT1JJR0lOVENfV0VMTEtOT1dOKi87CisgICAgICAgZWxzZQorICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IGlhX29yaWdpbjsKKyAgICB9IGVsc2UgeworICAgICAgIGlmKGlhX29yaWdpbiA9PSA1KSB7IC8qTGluayBMYXllciovCisgICAgICAgICAgaWYoIWZsYWdzKSAvKkdsb2JhbCBhZGRyZXNzIGFzc2lnbmVkIGJ5IHJvdXRlciBhZHYqLworICAgICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IDUgLypJUEFERFJFU1NQUkVGSVhPUklHSU5UQ19ST1VURVJBRFYqLzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gMyAvKklQQUREUkVTU1BSRUZJWE9SSUdJTlRDX1dFTExLTk9XTiovOworICAgICAgIH0KKyAgICAgICBlbHNlIGlmKGlhX29yaWdpbiA9PSA2KSAvKlJhbmRvbSovCisgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gNSAvKklQQUREUkVTU1BSRUZJWE9SSUdJTlRDX1JPVVRFUkFEViovOworICAgICAgIGVsc2UKKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSBpYV9vcmlnaW47CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0NPTU1PTl9DT1BZX1VUSUxJVElFUyAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMKaW5kZXggYjE5Nzg2ZC4uNjAyNWYwNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKIApAQCAtMjAsNiArMjEsOCBAQAogCiAjaW5jbHVkZSAiaXBhZGRyZXNzX2lvY3RsLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkcmVzc19pb2N0bF9lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorCiBzdGF0aWMgdm9pZCBfcHJpbnRfZmxhZ3Moc2hvcnQgZmxhZ3MpOwogCiAjZGVmaW5lIExJU1RfVE9LRU4gImlvY3RsX2V4dHJhcyIKQEAgLTM1LDcgKzM4LDcgQEAKICAgICBpZiAoKE5VTEwgPT0gZW50cnkpIHx8IChOVUxMID09IGVudHJ5LT5hcmNoX2RhdGEpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBuZXRzbm1wX2dldF9saXN0X2RhdGEoZW50cnktPmFyY2hfZGF0YSwgTElTVF9UT0tFTik7CisgICAgcmV0dXJuIChfaW9jdGxfZXh0cmFzKiluZXRzbm1wX2dldF9saXN0X2RhdGEoZW50cnktPmFyY2hfZGF0YSwgTElTVF9UT0tFTik7CiB9CiAKIC8qKgpAQCAtODYsNiArODksNyBAQAogICAgIG5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZSgmZW50cnktPmFyY2hfZGF0YSwgTElTVF9UT0tFTik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfSU9DVExfRU5UUllfQ09QWQogLyoqCiAgKiBjb3B5IGlvY3RsIGV4dHJhcwogICoKQEAgLTEyMiw2ICsxMjYsNyBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0lPQ1RMX0VOVFJZX0NPUFkgKi8KIAogLyoqCiAgKiBsb2FkIGlwdjQgYWRkcmVzcyB2aWEgaW9jdGwKQEAgLTEzNSw3ICsxNDAsOCBAQAogICAgIHN0cnVjdCBpZnJlcSAgICppZnJwOwogICAgIHN0cnVjdCBzb2NrYWRkciBzYXZlX2FkZHI7CiAgICAgc3RydWN0IHNvY2thZGRyX2luICogc2k7Ci0gICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5OworICAgIHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbyBhZGRyX2luZm87CisgICAgaW5fYWRkcl90ICAgICAgIGlwdmFsOwogICAgIF9pb2N0bF9leHRyYXMgICAgICAgICAgICpleHRyYXM7CiAKICAgICBpZiAoKHNkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKQEAgLTE1NCw5ICsxNjAsMTggQEAKIAogICAgIGlmcnAgPSBpZmMuaWZjX3JlcTsKICAgICBmb3IoaT0wOyBpIDwgaW50ZXJmYWNlczsgKytpLCArK2lmcnApIHsKKyAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5LCAqYmNhc3RlbnRyeSA9IE5VTEw7CiAKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwKICAgICAgICAgICAgICAgICAgICAgIiBpbnRlcmZhY2UgJWQsICVzXG4iLCBpLCBpZnJwLT5pZnJfbmFtZSkpOworCisgICAgICAgIGlmIChBRl9JTkVUICE9IGlmcnAtPmlmcl9hZGRyLnNhX2ZhbWlseSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgc2tpcHBpbmcgJXM7IG5vbiBBRl9JTkVUIGZhbWlseSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmcnAtPmlmcl9uYW1lLCBpZnJwLT5pZnJfYWRkci5zYV9mYW1pbHkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgLyoKICAgICAgICAgICovCiAgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOwpAQCAtMTgxLDkgKzE5Niw5IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHNldCBpbmRleGVzCiAgICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX2Fzc2VydChBRl9JTkVUID09IGlmcnAtPmlmcl9hZGRyLnNhX2ZhbWlseSk7CiAgICAgICAgIHNpID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWZycC0+aWZyX2FkZHI7CiAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihzaS0+c2luX2FkZHIuc19hZGRyKTsKKyAgICAgICAgaXB2YWwgPSBzaS0+c2luX2FkZHIuc19hZGRyOwogICAgICAgICBtZW1jcHkoZW50cnktPmlhX2FkZHJlc3MsICZzaS0+c2luX2FkZHIuc19hZGRyLAogICAgICAgICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKIApAQCAtMjIwLDYgKzIzNSwyNiBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IGJyb2FkY2FzdAorICAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KCZhZGRyX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8pKTsKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgICAgICBhZGRyX2luZm8gPSBuZXRzbm1wX2FjY2Vzc19vdGhlcl9pbmZvX2dldChlbnRyeS0+aWZfaW5kZXgsIEFGX0lORVQpOworICAgICAgICBpZihhZGRyX2luZm8uYmNhc3RmbGcpIHsKKyAgICAgICAgICAgYmNhc3RlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgICAgaWYoTlVMTCA9PSBiY2FzdGVudHJ5KSB7CisgICAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisgICAgICAgICAgIGJjYXN0ZW50cnktPmlmX2luZGV4ID0gZW50cnktPmlmX2luZGV4OworICAgICAgICAgICBiY2FzdGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfYWRkcmVzc19sZW4gPSBzaXplb2YoYWRkcl9pbmZvLmFkZHIpOworICAgICAgICAgICBtZW1jcHkoYmNhc3RlbnRyeS0+aWFfYWRkcmVzcywgJmFkZHJfaW5mby5hZGRyLAorICAgICAgICAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfYWRkcmVzc19sZW4pOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvKgogICAgICAgICAgKiBnZXQgbmV0bWFzawogICAgICAgICAgKi8KICAgICAgICAgaWZycC0+aWZyX2FkZHIgPSBzYXZlX2FkZHI7CkBAIC0yMzMsNiArMjY4LDkgQEAKICAgICAgICAgc2kgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZnJwLT5pZnJfYWRkcjsKICAgICAgICAgZW50cnktPmlhX3ByZWZpeF9sZW4gPQogICAgICAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuKHNpLT5zaW5fYWRkci5zX2FkZHIpOworICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gZW50cnktPmlhX3ByZWZpeF9sZW47CisKIAogICAgICAgICAvKgogICAgICAgICAgKiBnZXQgZmxhZ3MKQEAgLTI0Niw3ICsyODQsMTIgQEAKICAgICAgICAgfQogICAgICAgICBleHRyYXMtPmZsYWdzID0gaWZycC0+aWZyX2ZsYWdzOwogCi0gICAgICAgIGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9VTklDQVNUOyAvKiBhc3N1bWUgdW5pY2FzdD8gKi8KKyAgICAgICAgaWYoYmNhc3RlbnRyeSkKKyAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfQlJPQURDQVNUOworICAgICAgICBpZihhZGRyX2luZm8uYW55Y2FzdGZsZykKKyAgICAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX0FOWUNBU1Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7CiAKICAgICAgICAgLyoqIGVudHJ5LT5pYV9wcmVmaXhfb2lkID8gKi8KIApAQCAtMjU2LDE2ICsyOTksMjcgQEAKICAgICAgICAgICogICBhbHdheXMgcHJlZmVycmVkKDEpLgogICAgICAgICAgKi8KICAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IElQQUREUkVTU1NUQVRVU1RDX1BSRUZFUlJFRDsKKyAgICAgICAgaWYoYmNhc3RlbnRyeSkKKyAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNhbiB3ZSBmaWd1cmUgb3V0IGlmIGFuIGFkZHJlc3MgaXMgZnJvbSBESENQPwogICAgICAgICAgKiB1c2UgbWFudWFsIHVudGlsIHRoZW4uLi4KICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgIGlmKElTX0FQSVBBKGlwdmFsKSkgeworICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfUkFORE9NOworICAgICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19SQU5ET007CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgICAgIGlmKGJjYXN0ZW50cnkpCisgICAgICAgICAgICAgIGJjYXN0ZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKyAgICAgICAgfQogCiAgICAgICAgIERFQlVHSUYoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIikgewogICAgICAgICAgICAgREVCVUdNU0dUX05DKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlmICVkOiBhZGRyIGxlbiAlZCwgaW5kZXggMHglbHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgJWQ6IGFkZHIgbGVuICVkLCBpbmRleCAweCUiIE5FVFNOTVBfUFJJbyAieFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZW50cnktPmlhX2FkZHJlc3NfbGVuLCBlbnRyeS0+aWZfaW5kZXgpKTsKICAgICAgICAgICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikKICAgICAgICAgICAgICAgICBERUJVR01TR1RfTkMoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICIgYWRkcmVzcyAlcFxuIiwKQEAgLTI3OSw5ICszMzMsMTkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQotICAgICAgICB7CisgICAgICAgIGlmKGJjYXN0ZW50cnkpeworICAgICAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBiY2FzdGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCJlcnJvciB3aXRoIGlwYWRkcmVzc19lbnRyeTogaW5zZXJ0IGJyb2FkY2FzdCBlbnRyeSBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoYmNhc3RlbnRyeSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmNhc3RlbnRyeSA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsImVycm9yIHdpdGggaXBhZGRyZXNzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiRHVwbGljYXRlIElQdjQgYWRkcmVzcyBkZXRlY3RlZCwgc29tZSBpbnRlcmZhY2VzIG1heSBub3QgYmUgdmlzaWJsZSBpbiBJUC1NSUJcbiIpKTsKICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9mcmVlKGVudHJ5KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zMzIsNyArMzk2LDcgQEAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlmYy5pZmNfYnVmKTsKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAicHJvY2Vzc2luZyAlZCBpbnRlcmZhY2VzXG4iLCBpbnRlcmZhY2VzKSk7CiAKLSAgICBhbGlhc19saXN0ID0gbWFsbG9jKGludGVyZmFjZXMgKiBzaXplb2YoaW50KSk7CisgICAgYWxpYXNfbGlzdCA9IChpbnQqKW1hbGxvYyhpbnRlcmZhY2VzICogc2l6ZW9mKGludCkpOwogICAgIGlmIChOVUxMID09IGFsaWFzX2xpc3QpIHsKICAgICAgICAgY2xvc2Uoc2QpOwogICAgICAgICByZXR1cm4gLTI7CkBAIC0zNjgsMTAgKzQzMiwxMyBAQAogICAgICAgICBmb3Ioaz0wO2s8ajsrK2spCiAgICAgICAgICAgICBpZiAoYWxpYXNfbGlzdFtrXSA9PSBpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoayA9PSBqKQorICAgICAgICBpZiAoayA9PSBqKSB7CisgICAgICAgICAgICBmcmVlKGFsaWFzX2xpc3QpOwogICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBmcmVlKGFsaWFzX2xpc3QpOwogICAgIHJldHVybiBpbnRlcmZhY2VzICsgMTsKIH0KIApAQCAtNDEyLDcgKzQ3OSw4IEBACiAgICAgICAgIGludCAgIGFsaWFzX2lkeDsKIAogICAgICAgICBpZiAoTlVMTCA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJWxkXG4iLAorICAgICAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpzZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4KSk7CiAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC00ODksNiArNTU3LDkxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKworLyoqCisgKiBBZGQvcmVtb3ZlIElQdjYgYWRkcmVzcyB1c2luZyBpb2N0bC4KKyAqIEByZXR2YWwgIDAgOiBubyBlcnJvcgorICogQHJldHZhbCAtMSA6IGJhZCBwYXJhbWV0ZXIKKyAqIEByZXR2YWwgLTIgOiBjb3VsZG4ndCBjcmVhdGUgc29ja2V0CisgKiBAcmV0dmFsIC0zIDogaW9jdGwgZmFpbGVkCisgKi8KK2ludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnksIGludCBvcGVyYXRpb24pCit7CisjaWZkZWYgbGludXgKKyAgICAvKgorICAgICAqIEZyb20gbGludXgvaXB2Ni5oLiBJdCBjYW5ub3QgYmUgaW5jbHVkZWQgYmVjYXVzZSBpdCBjb2xsaWRlcworICAgICAqIHdpdGggbmV0aW5ldC9pbi5oCisgICAgICovCisgICAgc3RydWN0IGluNl9pZnJlcSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaWZyNl9hZGRyOworICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGlmcjZfcHJlZml4bGVuOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGlmcjZfaWZpbmRleDsKKyAgICB9OworCisgICAgc3RydWN0IGluNl9pZnJlcSAgICAgICAgICAgICAgIGlmcnE7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBmZCA9IC0xOworCisgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpzZXQiLCAiX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NiBzdGFydGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbmV0c25tcF9hc3NlcnQoMTYgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKworICAgIGZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZihmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGRuJ3QgY3JlYXRlIHNvY2tldFxuIik7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAgbWVtc2V0KCZpZnJxLCAwLCBzaXplb2YoaWZycSkpOworICAgIGlmcnEuaWZyNl9pZmluZGV4ID0gZW50cnktPmlmX2luZGV4OworICAgIGlmcnEuaWZyNl9wcmVmaXhsZW4gPSA2NDsKKworICAgIG1lbWNweSgmaWZycS5pZnI2X2FkZHIsIGVudHJ5LT5pYV9hZGRyZXNzLAorICAgICAgICAgICBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOworCisgICAgcmMgPSBpb2N0bChmZCwgb3BlcmF0aW9uLCAmaWZycSk7CisgICAgY2xvc2UoZmQpOworICAgIGlmKHJjIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBzZXR0aW5nIGFkZHJlc3M6ICVzKCVkKVxuIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpzZXQiLCAiX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NiBmaW5pc2hlZFxuIikpOworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGlwdjYgb24gdGhpcyBwbGF0Zm9ybSAoeWV0KSAqLworICAgIHJldHVybiAtMzsKKyNlbmRpZgorCit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgOiBubyBlcnJvcgorICogQHJldHZhbCAtMSA6IGJhZCBwYXJhbWV0ZXIKKyAqIEByZXR2YWwgLTIgOiBjb3VsZG4ndCBjcmVhdGUgc29ja2V0CisgKiBAcmV0dmFsIC0zIDogaW9jdGwgZmFpbGVkCisgKi8KK2ludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NihuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KQoreworICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfdjYoZW50cnksIFNJT0NTSUZBRERSKTsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCA6IG5vIGVycm9yCisgKiBAcmV0dmFsIC0xIDogYmFkIHBhcmFtZXRlcgorICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBmYWlsZWQKKyAqLworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZGVsZXRlX3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpCit7CisgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc192NihlbnRyeSwgU0lPQ0RJRkFERFIpOworfQorCiAvKioKICAqIGdldCB0aGUgaW50ZXJmYWNlIGNvdW50IGFuZCBwb3B1bGF0ZSB0aGUgaWZjX2J1ZgogICoKQEAgLTUxNSw3ICs2NjgsNyBAQAogICAgICAqLwogCiAgICAgZm9yIChpID0gODs7IGkgKj0gMikgewotICAgICAgICBpZmMtPmlmY19idWYgPSBjYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpOworICAgICAgICBpZmMtPmlmY19idWYgPSAoY2FkZHJfdCljYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpOwogICAgICAgICBpZiAoTlVMTCA9PSBpZmMtPmlmY19idWYpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlZCBpbnRlcmZhY2VzXG4iLAogICAgICAgICAgICAgICAgICAgICAgaSk7CkBAIC01ODAsNyArNzMzLDcgQEAKICAgICAgICAgeyBJRkZfQVVUT01FRElBLCAgICJhdXRvIG1lZGlhIHNlbGVjdCBhY3RpdmUifSwKICAgICB9OwogICAgIHNob3J0IHVua25vd24gPSBmbGFnczsKLSAgICBpbnQgaTsKKyAgICBzaXplX3QgaTsKIAogICAgIGZvcihpID0gMDsgaSA8IHNpemVvZihtYXApL3NpemVvZihtYXBbMF0pOyArK2kpCiAgICAgICAgIGlmKGZsYWdzICYgbWFwW2ldLmZsYWcpIHsKQEAgLTU5MSw0ICs3NDQsMyBAQAogICAgIGlmKHVua25vd24pCiAgICAgICAgIERFQlVHTVNHVF9OQygoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiICB1bmtub3duIDB4JXhcbiIsIHVua25vd24pKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oCmluZGV4IGE3YTBlYTIuLmYyYjc4NDcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgKQEAgLTIsNiArMiwxNyBAQAogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAorLyoKKyAqIHN0cnVjdCBmb3IgbmV0bGluayBleHRyYXMKKyAqLworc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvIHsKKyAgICBpbnQgYmNhc3RmbGc7CisgICAgaW50IGFueWNhc3RmbGc7CisgICAgaW5fYWRkcl90IGFkZHI7Cit9OworIAorI2RlZmluZSBJU19BUElQQShhKSAgKCgoaW5fYWRkcl90KShhIDw8IDE2KSkgPT0gMHhGRUE5MDAwMCkKKwogaW50CiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeF9vZmZzZXQpOwpAQCAtMTEsOCArMjIsMTUgQEAKIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19yZW1vdmVfdjQobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSk7CiAKIGludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NihuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKK2ludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3JlbW92ZV92NihuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKKworaW50CiBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfaW9jdGxfZ2V0X2ludGVyZmFjZV9jb3VudChpbnQgc2QsIHN0cnVjdCBpZmNvbmYgKiBpZmMpOwogCitzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8KK25ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGludCBpbmRleCwgaW50IGZhbWlseSk7CiAKIC8qCiAgKiBzdHJ1Y3QgaW9jdGwgZm9yIGFyY2hfZGF0YQpAQCAtMzcsNiArNTUsOCBAQAogCiBpbnQKIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjQobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSk7CitpbnQKK19uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjYobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jCmluZGV4IGU3OGM4YmQuLmYxY2VmMGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMKQEAgLTQsNiArNCw3IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAKQEAgLTEyLDE5ICsxMyw0NSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbmRfcHJlZml4X2luZm8pCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfYXJjaF9lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2lvY3RsX2VudHJ5X2NvcHkpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLworCiAjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9SVE5FVExJTktfSCkKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaWZkZWYgUlRNR1JQX0lQVjZfUFJFRklYCisjZGVmaW5lIFNVUFBPUlRfUFJFRklYX0ZMQUdTIDEKKyNlbmRpZiAvKiBSVE1HUlBfSVBWNl9QUkVGSVggKi8KKyNlbmRpZiAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCiAjZW5kaWYKIAogI2luY2x1ZGUgImlwYWRkcmVzc19pb2N0bC5oIgotCisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK2V4dGVybiBwcmVmaXhfY2J4ICpwcmVmaXhfaGVhZF9saXN0OworI2VuZGlmCiBpbnQgX2xvYWRfdjYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKK2ludAorbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2V4dHJhX3ByZWZpeF9pbmZvKGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKnByZWZlcmVkbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmcgKnZhbGlkbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkcik7CisjZW5kaWYKIAogLyoKICAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCkBAIC02Niw2ICs5Myw3IEBACiAgICAgICovCiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZCiAvKgogICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKICAqLwpAQCAtODksNiArMTE3LDcgQEAKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkgKi8KIAogLyoKICAqIGNyZWF0ZSBhIG5ldyBlbnRyeQpAQCAtOTksMTIgKzEyOCwxNCBAQAogICAgIGlmIChOVUxMID09IGVudHJ5KQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoNCAhPSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKLSAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpjcmVhdGUiLCAib25seSBpcHY0IHN1cHBvcnRlZFxuIikpOworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NChlbnRyeSk7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19zZXRfdjYoZW50cnkpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIndyb25nIGxlbmd0aCBvZiBJUCBhZGRyZXNzXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0KLSAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NChlbnRyeSk7CiB9CiAKIC8qCkBAIC0xMTYsMTIgKzE0NywxNCBAQAogICAgIGlmIChOVUxMID09IGVudHJ5KQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoNCAhPSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICBpZiAoNCA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjQoZW50cnkpOworICAgIH0gZWxzZSBpZiAoMTYgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZGVsZXRlX3Y2KGVudHJ5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJvbmx5IGlwdjQgc3VwcG9ydGVkXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0KLSAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NChlbnRyeSk7CiB9CiAKIC8qKgpAQCAtMTc5LDYgKzIxMiwxMiBAQAogaW50CiBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKIHsKKyNpZm5kZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgaXAgYWRkcmVzcyBpbmZvcm1hdGlvbiIKKyAgICAgICAgICAgICAgICAiYXMgbmV0bGluayBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZVxuIikpOworICAgIHJldHVybiAtMTsKKyNlbHNlCiAgICAgRklMRSAgICAgICAgICAgKmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzgwXSwgYWRkcls0MF07CiAgICAgY2hhciAgICAgICAgICAgIGlmX25hbWVbSUZOQU1TSVorMV07LyogKzEgZm9yICdcMCcgYmVjYXVzZSBvZiB0aGUgdWdseSBzc2NhbmYgYmVsb3cgKi8gCkBAIC0xODcsMjQgKzIyNiwxNSBAQAogICAgIHNpemVfdCAgICAgICAgICBpbl9sZW4sIG91dF9sZW47CiAgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5OwogICAgIF9pb2N0bF9leHRyYXMgICAgICAgICAgICpleHRyYXM7Ci0gICAgc3RhdGljIGludCAgICAgIGxvZ19vcGVuX2VyciA9IDE7CisgICAgc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvIGFkZHJfaW5mbzsKICAgICAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CiAKICNkZWZpbmUgUFJPQ0ZJTEUgIi9wcm9jL25ldC9pZl9pbmV0NiIKICAgICBpZiAoIShpbiA9IGZvcGVuKFBST0NGSUxFLCAiciIpKSkgewotICAgICAgICBpZiAoMSA9PSBsb2dfb3Blbl9lcnIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIik7Ci0gICAgICAgICAgICBsb2dfb3Blbl9lcnIgPSAwOwotICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIikpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQotICAgIC8qCi0gICAgICogaWYgd2UgaGFkbid0IGJlZW4gYWJsZSB0byBvcGVuIGZpbGUgYW5kIHR1cm5lZCBvZiBlcnIgbG9nZ2luZywKLSAgICAgKiB0dXJuIGl0IGJhY2sgb24gbm93IHRoYXQgd2Ugb3BlbmVkIHRoZSBmaWxlLgotICAgICAqLwotICAgIGlmICgwID09IGxvZ19vcGVuX2VycikKLSAgICAgICAgbG9nX29wZW5fZXJyID0gMTsKIAogICAgIC8qCiAgICAgICogYWRkcmVzcyBpbmRleCBwcmVmaXhfbGVuIHNjb3BlIHN0YXR1cyBpZl9uYW1lCkBAIC0yNDEsNiArMjcxLDcgQEAKICAgICAgICAgaW5fbGVuID0gZW50cnktPmlhX2FkZHJlc3NfbGVuID0gc2l6ZW9mKGVudHJ5LT5pYV9hZGRyZXNzKTsKICAgICAgICAgbmV0c25tcF9hc3NlcnQoMTYgPT0gaW5fbGVuKTsKICAgICAgICAgb3V0X2xlbiA9IDA7CisgICAgICAgIGVudHJ5LT5mbGFncyA9IGZsYWdzOwogICAgICAgICBidWYgPSBlbnRyeS0+aWFfYWRkcmVzczsKICAgICAgICAgaWYoMSAhPSBuZXRzbm1wX2hleF90b19iaW5hcnkoJmJ1ZiwgJmluX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9sZW4sIDAsIGFkZHIsICI6IikpIHsKQEAgLTI2OCw2ICsyOTksOCBAQAogICAgICAgICAgKiBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZC4KICAgICAgICAgICovCiAgICAgICAgIGVudHJ5LT5pZl9pbmRleCA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pbmRleF9maW5kKGlmX25hbWUpOworICAgICAgICBtZW1zZXQoJmFkZHJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbykpOworICAgICAgICBhZGRyX2luZm8gPSBuZXRzbm1wX2FjY2Vzc19vdGhlcl9pbmZvX2dldChlbnRyeS0+aWZfaW5kZXgsIEFGX0lORVQ2KTsKIAogICAgICAgICAvKgogICAgICAgICAgICNkZWZpbmUgSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEICAxCkBAIC0yNzgsOCArMzExLDEyIEBACiAgICAgICAgICAgI2RlZmluZSBJUEFERFJFU1NTVEFUVVNUQ19URU5UQVRJVkUgIDYKICAgICAgICAgICAjZGVmaW5lIElQQUREUkVTU1NUQVRVU1RDX0RVUExJQ0FURSAgNwogICAgICAgICAqLwotICAgICAgICBpZihmbGFncyAmIElGQV9GX1BFUk1BTkVOVCkKKyAgICAgICAgaWYoKGZsYWdzICYgSUZBX0ZfUEVSTUFORU5UKSB8fCAoIWZsYWdzKSkKICAgICAgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7IC8qID8/ICovCisjaWZkZWYgSUZBX0ZfVEVNUE9SQVJZCisgICAgICAgIGVsc2UgaWYoZmxhZ3MgJiBJRkFfRl9URU1QT1JBUlkpCisgICAgICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEOyAvKiA/PyAqLworI2VuZGlmCiAgICAgICAgIGVsc2UgaWYoZmxhZ3MgJiBJRkFfRl9ERVBSRUNBVEVEKQogICAgICAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IElQQUREUkVTU1NUQVRVU1RDX0RFUFJFQ0FURUQ7CiAgICAgICAgIGVsc2UgaWYoZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpCkBAIC0yOTQsNyArMzMxLDcgQEAKICAgICAgICAgICogaWYgaXQncyBub3QgbXVsdGksIGl0IG11c3QgYmUgdW5pLgogICAgICAgICAgKiAgKGFuIGlwdjYgYWRkcmVzcyBpcyBuZXZlciBicm9hZGNhc3QpCiAgICAgICAgICAqLwotICAgICAgICBpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKGVudHJ5LT5pYV9hZGRyZXNzKSkKKyAgICAgICAgaWYoYWRkcl9pbmZvLmFueWNhc3RmbGcpCiAgICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfQU5ZQ0FTVDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7CkBAIC0zMTQsMTMgKzM1MSw0OCBAQAogICAgICAgICAgKgogICAgICAgICAgKiBhcmUgJ2xvY2FsJyBhZGRyZXNzIGFzc2lnbmVkIGJ5IGxpbmsgbGF5ZXI/PwogICAgICAgICAgKi8KLSAgICAgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTChlbnRyeS0+aWFfYWRkcmVzcykgfHwKLSAgICAgICAgICAgIElONl9JU19BRERSX1NJVEVMT0NBTChlbnRyeS0+aWFfYWRkcmVzcykpCi0gICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTElOS0xBWUVSOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTUFOVUFMOworICAgICAgICAgaWYgKCFmbGFncykKKyAgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTElOS0xBWUVSOworI2lmZGVmIElGQV9GX1RFTVBPUkFSWQorICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBJRkFfRl9URU1QT1JBUlkpCisgICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX1JBTkRPTTsKKyNlbmRpZgorICAgICAgICAgZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGVudHJ5LT5pYV9hZGRyZXNzKSkKKyAgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTElOS0xBWUVSOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisKKyAgICAgICAgIGlmKGVudHJ5LT5pYV9vcmlnaW4gPT0gSVBBRERSRVNTT1JJR0lOVENfTElOS0xBWUVSKQorICAgICAgICAgICAgZW50cnktPmlhX3N0b3JhZ2V0eXBlID0gU1RPUkFHRVRZUEVfUEVSTUFORU5UOwogCiAgICAgICAgIC8qIHh4eC1ya3M6IHdoYXQgY2FuIHdlIGRvIHdpdGggc2NvcGU/ICovCisjaWZkZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAorICAgICAgICBpZihuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZXh0cmFfcHJlZml4X2luZm8oZW50cnktPmlmX2luZGV4LCAmZW50cnktPmlhX3ByZWZlcmVkX2xpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsJmVudHJ5LT5pYV92YWxpZF9saWZldGltZSwgYWRkcikgPCAwKXsKKyAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgInVuYWJsZSB0byBmZXRjaCBleHRyYSBwcmVmaXggaW5mb1xuIikpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBlbnRyeS0+aWFfcHJlZmVyZWRfbGlmZXRpbWUgPSAwOworICAgICAgICBlbnRyeS0+aWFfdmFsaWRfbGlmZXRpbWUgPSAwOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKKyAgICAgICAgeworICAgICAgICBwcmVmaXhfY2J4ICAgICAgcHJlZml4X3ZhbDsKKyAgICAgICAgbWVtc2V0KCZwcmVmaXhfdmFsLCAwLCBzaXplb2YocHJlZml4X2NieCkpOworICAgICAgICBpZihuZXRfc25tcF9maW5kX3ByZWZpeF9pbmZvKCZwcmVmaXhfaGVhZF9saXN0LCBhZGRyLCAmcHJlZml4X3ZhbCkgPCAwKSB7CisgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJ1bmFibGUgdG8gZmluZCBpbmZvXG4iKSk7CisgICAgICAgICAgIGVudHJ5LT5pYV9vbmxpbmtfZmxhZyA9IDE7ICAvKlNldCBieSBkZWZhdWx0IGFzIHRydWUqLworICAgICAgICAgICBlbnRyeS0+aWFfYXV0b25vbW91c19mbGFnID0gMjsgLypTZXQgYnkgZGVmYXVsdCBhcyBmYWxzZSovCisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgZW50cnktPmlhX29ubGlua19mbGFnID0gcHJlZml4X3ZhbC5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnOyAKKyAgICAgICAgICAgZW50cnktPmlhX2F1dG9ub21vdXNfZmxhZyA9IHByZWZpeF92YWwuaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWc7CisgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgZW50cnktPmlhX29ubGlua19mbGFnID0gMTsgIC8qU2V0IGJ5IGRlZmF1bHQgYXMgdHJ1ZSovCisgICAgICAgIGVudHJ5LT5pYV9hdXRvbm9tb3VzX2ZsYWcgPSAyOyAvKlNldCBieSBkZWZhdWx0IGFzIGZhbHNlKi8KKyNlbmRpZgogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKQEAgLTMzOSw0ICs0MTEsMTkwIEBACiAKICAgICByZXR1cm4gaWR4X29mZnNldDsKIH0KKworc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvCituZXRzbm1wX2FjY2Vzc19vdGhlcl9pbmZvX2dldChpbnQgaW5kZXgsIGludCBmYW1pbHkpCit7CisgICBzdHJ1Y3QgeworICAgICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgbjsKKyAgICAgICAgICAgc3RydWN0IGlmYWRkcm1zZyByOworICAgICAgICAgICBjaGFyICAgYnVmWzEwMjRdOworICAgfSByZXE7CisgICBzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8gYWRkcjsKKyAgIHN0cnVjdCBydGF0dHIgICAgKnJ0YTsKKyAgIGludCAgICBzdGF0dXM7CisgICBjaGFyICAgYnVmWzE2Mzg0XTsKKyAgIHN0cnVjdCBubG1zZ2hkciAgKm5sbXA7CisgICBzdHJ1Y3QgaWZhZGRybXNnICpydG1wOworICAgc3RydWN0IHJ0YXR0ciAgICAqcnRhdHA7CisgICBpbnQgICAgcnRhdHRybGVuOworICAgaW50ICAgIHNkOworCisgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8pKTsKKyAgIHNkID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfUk9VVEUpOworICAgaWYoc2QgPCAwKSB7CisgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IG9wZW4gbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgcmV0dXJuIGFkZHI7CisgICB9CisKKyAgIG1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisgICByZXEubi5ubG1zZ19sZW4gPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKTsKKyAgIHJlcS5uLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX1JPT1Q7CisgICByZXEubi5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgICByZXEuci5pZmFfZmFtaWx5ID0gZmFtaWx5OworICAgcnRhID0gKHN0cnVjdCBydGF0dHIgKikoKChjaGFyICopJnJlcSkgKyBOTE1TR19BTElHTihyZXEubi5ubG1zZ19sZW4pKTsKKyAgIGlmKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCg0KTsKKyAgIGVsc2UKKyAgICAgIHJ0YS0+cnRhX2xlbiA9IFJUQV9MRU5HVEgoMTYpOworCisgICAgc3RhdHVzID0gc2VuZChzZCwgJnJlcSwgcmVxLm4ubmxtc2dfbGVuLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHNlbmQgbmV0bGluayByZXF1ZXN0XG4iKTsKKyAgICAgICAgcmV0dXJuIGFkZHI7CisgICAgfQorCisgICAgc3RhdHVzID0gcmVjdihzZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJjb3VsZCBub3QgcmVjaWV2ZSBuZXRsaW5rIHJlcXVlc3RcbiIpOworICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBpZihzdGF0dXMgPT0gMCkgeworICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAibm90aGluZyB0byByZWFkXG4iKTsKKyAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBmb3IobmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7IHN0YXR1cyA+IHNpemVvZigqbmxtcCk7KSB7CisgICAgICAgIGludCBsZW4gPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgIGludCByZXFfbGVuID0gbGVuIC0gc2l6ZW9mKCpubG1wKTsKKworICAgICAgICBpZiAocmVxX2xlbiA8IDAgfHwgbGVuID4gc3RhdHVzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImludmFsaWQgbmV0bGluayBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOTE1TR19PSyhubG1wLCBzdGF0dXMpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImludmFsaWQgTkxNU0cgbWVzc2FnZVxuIik7CisgICAgICAgICAgICByZXR1cm4gYWRkcjsKKyAgICAgICAgfQorICAgICAgICBydG1wID0gKHN0cnVjdCBpZmFkZHJtc2cgKilOTE1TR19EQVRBKG5sbXApOworICAgICAgICBydGF0cCA9IChzdHJ1Y3QgcnRhdHRyICopSUZBX1JUQShydG1wKTsKKyAgICAgICAgcnRhdHRybGVuID0gSUZBX1BBWUxPQUQobmxtcCk7CisgICAgICAgIGlmKGluZGV4ID09IHJ0bXAtPmlmYV9pbmRleCl7CisgICAgICAgICAgIGZvciAoOyBSVEFfT0socnRhdHAsIHJ0YXR0cmxlbik7IHJ0YXRwID0gUlRBX05FWFQocnRhdHAsIHJ0YXR0cmxlbikpIHsKKyAgICAgICAgICAgICAgICBpZihydGF0cC0+cnRhX3R5cGUgPT0gSUZBX0JST0FEQ0FTVCl7CisgICAgICAgICAgICAgICAgICAgYWRkci5hZGRyID0gKChzdHJ1Y3QgaW5fYWRkciAqKVJUQV9EQVRBKHJ0YXRwKSktPnNfYWRkcjsKKyAgICAgICAgICAgICAgICAgICBhZGRyLmJjYXN0ZmxnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYocnRhdHAtPnJ0YV90eXBlID09IElGQV9BTllDQVNUKXsKKyAgICAgICAgICAgICAgICAgICBhZGRyLmFkZHIgPSAoKHN0cnVjdCBpbl9hZGRyICopUlRBX0RBVEEocnRhdHApKS0+c19hZGRyOworICAgICAgICAgICAgICAgICAgIGFkZHIuYW55Y2FzdGZsZyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzIC09IE5MTVNHX0FMSUdOKGxlbik7CisgICAgICAgIG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyKikoKGNoYXIqKW5sbXAgKyBOTE1TR19BTElHTihsZW4pKTsKKyAgICB9CisgICAgY2xvc2Uoc2QpOworICAgIHJldHVybiBhZGRyOwogI2VuZGlmCit9CisKKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICitpbnQKK25ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19leHRyYV9wcmVmaXhfaW5mbyhpbnQgaW5kZXgsIHVfbG9uZyAqcHJlZmVyZWRsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyAqdmFsaWRsdCwgY2hhciAqYWRkcikKK3sKKworICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgbmxoZHI7CisgICAgICAgICAgICBzdHJ1Y3QgaWZhZGRybXNnIGlmYWNlaW5mbzsKKyAgICAgICAgICAgIGNoYXIgICBidWZbMTAyNF07CisgICAgfSByZXE7CisKKyAgICBzdHJ1Y3QgcnRhdHRyICAgICAgICAqcnRhOworICAgIGludCAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBjaGFyICAgICAgICAgICAgICAgICBidWZbMTYzODRdOworICAgIGNoYXIgICAgICAgICAgICAgICAgIHRtcGFkZHJbNDBdOworICAgIHN0cnVjdCBubG1zZ2hkciAgICAgICpubG1wOworICAgIHN0cnVjdCBpZmFkZHJtc2cgICAgICpydG1wOworICAgIHN0cnVjdCBydGF0dHIgICAgICAgICpydGF0cDsKKyAgICBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqY2FjaGVfaW5mbzsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgICAgICAqaW42cDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBydGF0dHJsZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgc2Q7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmVxYWRkciA9IDA7CisgICAgc2QgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICAgaWYoc2QgPCAwKSB7CisgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBvcGVuIG5ldGxpbmsgc29ja2V0XG4iKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisgICAgcmVxLm5saGRyLm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpOworICAgIHJlcS5ubGhkci5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QgfCBOTE1fRl9ST09UOworICAgIHJlcS5ubGhkci5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgICAgcmVxLmlmYWNlaW5mby5pZmFfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgcnRhID0gKHN0cnVjdCBydGF0dHIgKikoKChjaGFyICopJnJlcSkgKyBOTE1TR19BTElHTihyZXEubmxoZHIubmxtc2dfbGVuKSk7CisgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCgxNik7IC8qRm9yIGlwdjYqLworCisgICAgc3RhdHVzID0gc2VuZCAoc2QsICZyZXEsIHJlcS5ubGhkci5ubG1zZ19sZW4sIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgc2VuZCBuZXRsaW5rIHJlcXVlc3RcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHN0YXR1cyA9IHJlY3YgKHNkLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImNvdWxkIG5vdCByZWNpZXZlIG5ldGxpbmsgcmVxdWVzdFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHN0YXR1cyA9PSAwKSB7CisgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJub3RoaW5nIHRvIHJlYWRcbiIpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChubG1wID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1Zjsgc3RhdHVzID4gc2l6ZW9mKCpubG1wKTsgKXsKKworICAgICAgICBpbnQgbGVuID0gbmxtcC0+bmxtc2dfbGVuOworICAgICAgICBpbnQgcmVxX2xlbiA9IGxlbiAtIHNpemVvZigqbmxtcCk7CisKKyAgICAgICAgaWYgKHJlcV9sZW4gPCAwIHx8IGxlbiA+IHN0YXR1cykgeworICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJpbnZhbGlkIG5ldGxpbmsgbWVzc2FnZVxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIU5MTVNHX09LIChubG1wLCBzdGF0dXMpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImludmFsaWQgTkxNU0cgbWVzc2FnZVxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcnRtcCA9IChzdHJ1Y3QgaWZhZGRybXNnICopTkxNU0dfREFUQShubG1wKTsKKyAgICAgICAgcnRhdHAgPSAoc3RydWN0IHJ0YXR0ciAqKUlGQV9SVEEocnRtcCk7CisgICAgICAgIHJ0YXR0cmxlbiA9IElGQV9QQVlMT0FEKG5sbXApOworICAgICAgICBpZihpbmRleCA9PSBydG1wLT5pZmFfaW5kZXgpIHsKKyAgICAgICAgICAgZm9yICg7IFJUQV9PSyhydGF0cCwgcnRhdHRybGVuKTsgcnRhdHAgPSBSVEFfTkVYVChydGF0cCwgcnRhdHRybGVuKSkgeworICAgICAgICAgICAgICAgIGlmKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUykgeworICAgICAgICAgICAgICAgICAgIGluNnAgPSAoc3RydWN0IGluNl9hZGRyICopUlRBX0RBVEEocnRhdHApOworICAgICAgICAgICAgICAgICAgIHNwcmludGYodG1wYWRkciwgIiUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCUwNHglMDR4IiwgTklQNigqaW42cCkpOworICAgICAgICAgICAgICAgICAgIGlmKCFzdHJjbXAodG1wYWRkciAsYWRkcikpCisgICAgICAgICAgICAgICAgICAgICAgIHJlcWFkZHIgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihydGF0cC0+cnRhX3R5cGUgPT0gSUZBX0NBQ0hFSU5GTykgeworICAgICAgICAgICAgICAgICAgIGNhY2hlX2luZm8gPSAoc3RydWN0IGlmYV9jYWNoZWluZm8gKilSVEFfREFUQShydGF0cCk7CisgICAgICAgICAgICAgICAgICAgaWYocmVxYWRkcikgeworICAgICAgICAgICAgICAgICAgICAgIHJlcWFkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICp2YWxpZGx0ID0gY2FjaGVfaW5mby0+aWZhX3ZhbGlkOworICAgICAgICAgICAgICAgICAgICAgICpwcmVmZXJlZGx0ID0gY2FjaGVfaW5mby0+aWZhX3ByZWZlcmVkOworICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzIC09IE5MTVNHX0FMSUdOKGxlbik7CisgICAgICAgIG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyKikoKGNoYXIqKW5sbXAgKyBOTE1TR19BTElHTihsZW4pKTsKKyAgICB9CisgICAgY2xvc2Uoc2QpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oCmluZGV4IDFjYWUyNzkuLjYwMGNlYWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgKQEAgLTE3LDYgKzE3LDUgQEAKICAqICAgIEhQVVgxMSBoYWQgZGlmZmVyZW50IHJldWlyZW1lbnRzIHRoYW4gb3RoZXIgSFBVWCwgdGhhdCBzaG91bGQKICAqICAgIGJlIGhhbmRsZWQgaW4gdGhlICpfaHB1eC5oIGhlYWRlciBmaWxlLgogICovCi1jb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4KQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bCkKLQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQ4NWUzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIElQLU1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgiCisKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfYXJjaF9lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorCitzdGF0aWMgaW50IF9sb2FkX3Y0KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KTsKKyNpZiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkKK3N0YXRpYyBpbnQgX2xvYWRfdjYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworI2VuZGlmCisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9pbml0KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbml0X2tlcm5lbF9zdW5vczUoKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfZW50cnlfY2xlYW51cChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBOb3RoaW5nIHRvIGRvLgorICAgICAqLworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jb3B5KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKnJocykKK3sKKyAgICAvKgorICAgICAqIE5vdGhpbmcgdG8gZG8uIAorICAgICAqLworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLworCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jcmVhdGUobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJub3QgYXBwbGljYWJsZVxuIikpOworICAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfZGVsZXRlKG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpjcmVhdGUiLCAibm90IGFwcGxpY2FibGVcbiIpKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYyA9IDAsIGlkeF9vZmZzZXQgPSAwOworCisgICAgaWYgKCEobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0lQQUREUkVTU19MT0FEX0lQVjZfT05MWSkpIHsKKyAgICAgICAgcmMgPSBfbG9hZF92NChjb250YWluZXIsIGlkeF9vZmZzZXQpOworICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkKKworICAgIGlmICghKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfTE9BRF9JUFY0X09OTFkpKSB7CisgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICByYyA9IDA7CisKKyAgICAgICAgaWR4X29mZnNldCA9IHJjOworCisgICAgICAgIHJjID0gX2xvYWRfdjYoY29udGFpbmVyLCBpZHhfb2Zmc2V0KTsKKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0lQQUREUkVTU19GUkVFX0tFRVBfQ09OVEFJTkVSOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIHJldHVybiBubyBlcnJvcnMgKDApIGlmIHdlIGZvdW5kIGFueSBpbnRlcmZhY2VzCisgICAgICovCisgICAgaWYocmMgPiAwKQorICAgICAgICByYyA9IDA7CisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogQHJldHZhbCA+PWlkeF9vZmZzZXQgb2sKKyAqIEByZXR2YWwgLTEgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKyAqIEByZXR2YWwgLTIgaW50ZXJmYWNlIGxvb2t1cCBlcnJvcgorICogQHJldHZhbCAtMyBjb250YWluZXIgZXJyb3IKKyAqLworc3RhdGljIGludAorX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpCit7CisgICAgbWliMl9pcEFkZHJFbnRyeV90ICAgICAgaXBhZTsKKyAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CisgICAgcmVxX2UgICAgICAgICAgICAgICAgICAgcmVxID0gR0VUX0ZJUlNUOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJsb2FkaW5nIHY0XG4iKSk7CisgICAgd2hpbGUgKChyYyA9IGdldE1pYnN0YXQoTUlCX0lQX0FERFIsICZpcGFlLCBzaXplb2YoaXBhZSksIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpKSA9PSAwKSB7CisgICAgICAgIHJlcSA9IEdFVF9ORVhUOworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gKC0xKTsgICAgCisgICAgICAgIGlmIChpcGFlLmlwQWRFbnRBZGRyID09IElOQUREUl9BTlkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXNbaXBhZS5pcEFkRW50SWZJbmRleC5vX2xlbmd0aF0gPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiZm91bmQgaWYgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlcykpOworICAgICAgICAvKiBPYnRhaW4gaW50ZXJmYWNlIGluZGV4ICovCisgICAgICAgIGVudHJ5LT5pZl9pbmRleCA9IAorICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoaXBhZS5pcEFkRW50SWZJbmRleC5vX2J5dGVzKTsKKyAgICAgICAgaWYgKGVudHJ5LT5pZl9pbmRleCA9PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiY2Fubm90IGZpbmQgaWYgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAoLTIpOyAgICAKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjaHIoKGNvbnN0IGNoYXIgKikmaXBhZS5pcEFkRW50SWZJbmRleC5vX2J5dGVzLCAnOicpICE9IDApCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0lTQUxJQVM7CisKKyAgICAgICAgLyogR2V0IHRoZSBhZGRyZXNzICovCisgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihpcGFlLmlwQWRFbnRBZGRyKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnktPmlhX2FkZHJlc3NfbGVuID09IDQgJiYKKyAgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA8PSBzaXplb2YoZW50cnktPmlhX2FkZHJlc3MpKTsKKyAgICAgICAgbWVtY3B5KCZlbnRyeS0+aWFfYWRkcmVzcywgJmlwYWUuaXBBZEVudEFkZHIsIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisKKyAgICAgICAgLyogcHJlZml4ICovCisgICAgICAgIGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gaXBhZS5pcEFkRW50SW5mby5hZV9zdWJuZXRfbGVuOworCisgICAgICAgIC8qIHNldCB0aGUgT3JpZ2luICovCisgICAgICAgIGlmIChpcGFlLmlwQWRFbnRJbmZvLmFlX2ZsYWdzICYgSUZGX0RIQ1BSVU5OSU5HKQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX0RIQ1A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisKKyAgICAgICAgLyogc2V0IGlwdjQgY29uc3RhbnRzICovCisgICAgICAgIGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9VTklDQVNUOworICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEOworCisgICAgICAgIGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiaW5zZXJ0IGlmICUiIE5FVFNOTVBfUFJJbyAidSwgYWRkcmxlbiAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pZl9pbmRleCwgZW50cnktPmlhX2FkZHJlc3NfbGVuKSk7CisKKyAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAidW5hYmxlIHRvIGluc2VydCAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAoLTMpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAoaWR4X29mZnNldCk7Cit9CisKKy8qCisgKiBAcmV0dmFsID49aWR4X29mZnNldCBvaworICogQHJldHZhbCAtMSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorICogQHJldHZhbCAtMiBpbnRlcmZhY2UgbG9va3VwIGVycm9yCisgKiBAcmV0dmFsIC0zIGNvbnRhaW5lciBlcnJvcgorICovCisjaWYgZGVmaW5lZCggTkVUU05NUF9FTkFCTEVfSVBWNiApCitzdGF0aWMgaW50CitfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3sKKyAgICBtaWIyX2lwdjZBZGRyRW50cnlfdCAgICBpcDZhZTsKKyAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CisgICAgcmVxX2UgICAgICAgICAgICAgICAgICAgcmVxID0gR0VUX0ZJUlNUOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJsb2FkaW5nIHY2Li4uIGNhY2hlICVkXG4iLAorICAgICAgICAgICAgICAgIE1JQl9JUDZfQUREUikpOworICAgIHdoaWxlICgocmMgPSBnZXRNaWJzdGF0KE1JQl9JUDZfQUREUiwgJmlwNmFlLCBzaXplb2YoaXA2YWUpLCByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdldF9ldmVyeXRoaW5nLCBOVUxMKSkgPT0gMCkgeworICAgICAgICByZXEgPSBHRVRfTkVYVDsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuICgtMSk7ICAgIAorICAgICAgICBpZiAobWVtY21wKChjb25zdCB2b2lkICopJmlwNmFlLmlwdjZBZGRyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSZpbjZhZGRyX2FueSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YgKGlwNmFlLmlwdjZBZGRyQWRkcmVzcykpID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpcDZhZS5pcHY2QWRkcklmSW5kZXgub19ieXRlc1tpcDZhZS5pcHY2QWRkcklmSW5kZXgub19sZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgImZvdW5kIGlmICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkcklmSW5kZXgub19ieXRlcykpOworCisgICAgICAgIC8qIE9idGFpbiBpbnRlcmZhY2UgaW5kZXggKi8KKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZCgKKyAgICAgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzKTsKKyAgICAgICAgaWYgKGVudHJ5LT5pZl9pbmRleCA9PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiY2Fubm90IGZpbmQgaWYgJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWUuaXB2NkFkZHJJZkluZGV4Lm9fYnl0ZXMpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAoLTIpOyAgICAKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCB0aGUgYWRkcmVzcyAqLworICAgICAgICBlbnRyeS0+aWFfYWRkcmVzc19sZW4gPSBzaXplb2YoaXA2YWUuaXB2NkFkZHJBZGRyZXNzKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnktPmlhX2FkZHJlc3NfbGVuID09IDE2ICYmCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA8PSBzaXplb2YoZW50cnktPmlhX2FkZHJlc3MpKTsKKyAgICAgICAgbWVtY3B5KCZlbnRyeS0+aWFfYWRkcmVzcywgJmlwNmFlLmlwdjZBZGRyQWRkcmVzcywgCisgICAgICAgICAgICAgICBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOworICAgICAgICAgICAgICAgCisgICAgICAgIC8qIHByZWZpeCAqLworICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9IGlwNmFlLmlwdjZBZGRyUGZ4TGVuZ3RoOworCisgICAgICAgIC8qIHR5cGUgaXMgYW55Y2FzdD8gKG1pYjIuaDogMSA9IHllcywgMiA9IG5vKSAqLworICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IChpcDZhZS5pcHY2QWRkckFueWNhc3RGbGFnID09IDEpID8gCisgICAgICAgICAgICBJUEFERFJFU1NUWVBFX0FOWUNBU1QgOiBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7CisKKyAgICAgICAgLyogb3JpZ2luIChtaWIyLmg6IDEgPSBzdGF0ZWxlc3MsIDIgPSBzdGF0ZWZ1bCwgMyA9IHVua25vd24pICovCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJvcmlnaW4gJWRcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWUuaXB2NkFkZHJUeXBlKSk7CisgICAgICAgIGlmIChpcDZhZS5pcHY2QWRkclR5cGUgPT0gMSkKKyAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7CisgICAgICAgIGVsc2UgaWYgKGlwNmFlLmlwdjZBZGRySW5mby5hZV9mbGFncyAmIElGRl9ESENQUlVOTklORykKKyAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19ESENQOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTUFOVUFMOworICAgICAgICAKKyAgICAgICAgLyogc3RhdHVzICovCisgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBpcDZhZS5pcHY2QWRkclN0YXR1czsKKworICAgICAgICBlbnRyeS0+bnNfaWFfaW5kZXggPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIAorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiaW5zZXJ0IGlmICUiIE5FVFNOTVBfUFJJbyAidSwgYWRkcmxlbiAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pZl9pbmRleCwgZW50cnktPmlhX2FkZHJlc3NfbGVuKSk7CisKKyAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAidW5hYmxlIHRvIGluc2VydCAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkcklmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMyk7CisgICAgICAgIH0KKyAgICB9ICAgIAorICAgIHJldHVybiAoaWR4X29mZnNldCk7Cit9CisjZW5kaWYgLyogZGVmaW5lZCggTkVUU05NUF9FTkFCTEVfSVBWNiApICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYyMjFiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zeXNjdGwuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocHJlZml4X2luZm8pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmaW5kX3ByZWZpeF9pbmZvKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX2FyY2hfZW50cnlfY29weSwgaXBhZGRyZXNzX2NvbW1vbikKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19pb2N0bF9lbnRyeV9jb3B5KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkgKi8KKworI2luY2x1ZGUgImlwYWRkcmVzc19pb2N0bC5oIgorI2lmZGVmIFNVUFBPUlRfUFJFRklYX0ZMQUdTCitleHRlcm4gcHJlZml4X2NieCAqcHJlZml4X2hlYWRfbGlzdDsKKyNlbmRpZgorCisjZGVmaW5lIFJPVU5EVVAoYSkgXAorICAoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfZW50cnlfaW5pdChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0IGlwdjQgc3R1ZmYKKyAgICAgKi8KKyAgICAvKiBpZiAoTlVMTCA9PSBuZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19lbnRyeV9pbml0KGVudHJ5KSkgKi8KKyAgICAvKiAgICAgcmV0dXJuIC0xOyAqLworCisgICAgLyoKKyAgICAgKiBpbml0IGlwdjYgc3R1ZmYKKyAgICAgKiAgIHNvIGZhciwgd2UgY2FuIGp1c3Qgc2hhcmUgdGhlIGlwdjQgc3R1ZmYsIHNvIG5vdGhpbmcgdG8gZG8KKyAgICAgKi8KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfZW50cnlfY2xlYW51cChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwIGlwdjQgc3R1ZmYKKyAgICAgKi8KKyAgICAvKm5ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2VudHJ5X2NsZWFudXAoZW50cnkpOyAqLworCisgICAgLyoKKyAgICAgKiBjbGVhbnVwIGlwdjYgc3R1ZmYKKyAgICAgKiAgIHNvIGZhciwgd2UgY2FuIGp1c3Qgc2hhcmUgdGhlIGlwdjQgc3R1ZmYsIHNvIG5vdGhpbmcgdG8gZG8KKyAgICAgKi8KK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfZW50cnlfY29weShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICpyaHMpCit7CisgICAgaW50IHJjOworCisgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiBjb3B5IGlwdjQgc3R1ZmYKKyAgICAgKi8KKyAgICAvKnJjID0gbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZW50cnlfY29weShsaHMsIHJocyk7ICovCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIGNvcHkgaXB2NiBzdHVmZgorICAgICAqICAgc28gZmFyLCB3ZSBjYW4ganVzdCBzaGFyZSB0aGUgaXB2NCBzdHVmZiwgc28gbm90aGluZyB0byBkbworICAgICAqLworCisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLworCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jcmVhdGUobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoNCA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoMTYgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJ3cm9uZyBsZW5ndGggb2YgSVAgYWRkcmVzc1xuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorfQorCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19kZWxldGUobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoNCA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0gZWxzZSBpZiAoMTYgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJvbmx5IGlwdjQgc3VwcG9ydGVkXG4iKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9Cit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHVfY2hhciAqaWZfbGlzdCA9IE5VTEwsICpjcDsKKyAgICBzaXplX3QgaWZfbGlzdF9zaXplID0gMDsKKyAgICBpbnQgc3lzY3RsX29pZFtdID0geyBDVExfTkVULCBQRl9ST1VURSwgMCwgMCwgTkVUX1JUX0lGTElTVCwgMCB9OworICAgIHN0cnVjdCBpZmFfbXNnaGRyICppZmE7CisgICAgc3RydWN0IHNvY2thZGRyICphOworICAgIGludCBhbWFzazsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBpZHhfb2Zmc2V0ID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorICAgICAgICAgICAgICAgICJsb2FkIChmbGFncyAldSlcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgaW50ZXJmYWNlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzeXNjdGwoc3lzY3RsX29pZCwgc2l6ZW9mKHN5c2N0bF9vaWQpL3NpemVvZihpbnQpLCAwLAorICAgICAgICAgICAgICAgJmlmX2xpc3Rfc2l6ZSwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaW50ZXJmYWNlIGluZm8gKHNpemUpXG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIGlmX2xpc3QgPSAodV9jaGFyKiltYWxsb2MoaWZfbGlzdF9zaXplKTsKKyAgICBpZiAoaWZfbGlzdCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcmZhY2UgaW5mbyAiCisgICAgICAgICAgICAgICAgICIoJXp1IGJ5dGVzKVxuIiwgaWZfbGlzdF9zaXplKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGVkICV6dSBieXRlcyBmb3IgaWZfbGlzdFxuIiwgaWZfbGlzdF9zaXplKSk7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChzeXNjdGxfb2lkLCBzaXplb2Yoc3lzY3RsX29pZCkvc2l6ZW9mKGludCksIGlmX2xpc3QsCisgICAgICAgICAgICAgICAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mb1xuIik7CisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICAvKiBwYXNzIDI6IHdhbGsgYWRkcmVzc2VzICovCisgICAgZm9yIChjcCA9IGlmX2xpc3Q7IGNwIDwgaWZfbGlzdCArIGlmX2xpc3Rfc2l6ZTsgY3AgKz0gaWZhLT5pZmFtX21zZ2xlbikgeworICAgICAgICBpZmEgPSAoc3RydWN0IGlmYV9tc2doZHIgKikgY3A7CisgICAgICAgIGludCBydGF4OworCisgICAgICAgIGlmIChpZmEtPmlmYW1fdHlwZSAhPSBSVE1fTkVXQUREUikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorICAgICAgICAgICAgICAgICAgICAicmVjZWl2ZWQgMHgleCBpbiBSVE1fTkVXQUREUiBmb3IgaWZpbmRleCAldVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFtX2FkZHJzLCBpZmEtPmlmYW1faW5kZXgpKTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopIChpZmEgKyAxKTsKKyAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IElQQUREUkVTU1NUQVRVU1RDX1VOS05PV047CisgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19PVEhFUjsKKwllbnRyeS0+aWFfYWRkcmVzc19sZW4gPSAwOworICAgICAgICBmb3IgKGFtYXNrID0gaWZhLT5pZmFtX2FkZHJzLCBydGF4ID0gMDsgYW1hc2sgIT0gMDsgYW1hc2sgPj49IDEsIHJ0YXgrKykgeworICAgICAgICAgICAgaWYgKChhbWFzayAmIDEpICE9IDApIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+bnNfaWFfaW5kZXggPSArK2lkeF9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4ID0gaWZhLT5pZmFtX2luZGV4OworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZDogYT0lcCwgc2FfbGVuPSVkLCBzYV9mYW1pbHk9MHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWVudHJ5LT5pZl9pbmRleCwgYSwgYS0+c2FfbGVuLCBhLT5zYV9mYW1pbHkpKTsKKworICAgICAgICAgICAgICAgIGlmIChhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCB8fCBhLT5zYV9mYW1pbHkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmE0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWE7CisJCSAgICBjaGFyIHN0clsxMjhdOworCQkgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisJCSAgICAgICAgICAgICAgICAiSVB2NCBhZGRyICVzXG4iLCBpbmV0X250b3AoQUZfSU5FVCwgJmE0LT5zaW5fYWRkci5zX2FkZHIsIHN0ciwgMTI4KSkpOworICAgICAgICAgICAgICAgICAgICBpZiAocnRheCA9PSBSVEFYX0lGQSkgeworCQkJZW50cnktPmlhX2FkZHJlc3NfbGVuID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+aWFfYWRkcmVzcywgJmE0LT5zaW5fYWRkci5zX2FkZHIsIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ0YXggPT0gUlRBWF9ORVRNQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmlhX3ByZWZpeF9sZW4gPSBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oYTQtPnNpbl9hZGRyLnNfYWRkcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYTsKKwkJICAgIGNoYXIgc3RyWzEyOF07CisJCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXI6c3lzY3RsIiwKKwkJICAgICAgICAgICAgICAgICJJUHY2IGFkZHIgJXNcbiIsIGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LT5zaW42X2FkZHIuczZfYWRkciwgc3RyLCAxMjgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChydGF4ID09IFJUQVhfSUZBKSB7CisJCQllbnRyeS0+aWFfYWRkcmVzc19sZW4gPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+aWFfYWRkcmVzcywgJmE2LT5zaW42X2FkZHIsIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ0YXggPT0gUlRBWF9ORVRNQVNLKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjZfcHJlZml4X2xlbihhNi0+c2luNl9hZGRyKTsKKwkJCURFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorCQkJICAgICAgICAgICAgInByZWZpeF9sZW49JWRcbiIsIGVudHJ5LT5pYV9wcmVmaXhfbGVuKSk7CisJCSAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopICggKChjaGFyICopIGEpICsgUk9VTkRVUChhLT5zYV9sZW4pICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwlpZiAoZW50cnktPmlhX2FkZHJlc3NfbGVuID09IDApIHsKKwkgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisJICAgICAgICAgICAgICAgICJlbnRyeSBza2lwcGVkXG4iKSk7CisJICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9mcmVlKGVudHJ5KTsKKwl9CisJZWxzZSBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsImVycm9yIHdpdGggaXBhZGRyZXNzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaWZfbGlzdCAhPSBOVUxMKQorICAgICAgICBmcmVlKGlmX2xpc3QpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDgxYjNmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogc2NvcGV6b25lIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDogaXB2NnNjb3Blem9uZS5oIDE0MTcwIDIwMDctMDQtMjkgMDI6MjI6MTJaIHZhcnVuX2MgJAorICovCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGNvbmZpZ3VyZSByZXF1aXJlZCBmaWxlcworICoKKyAqIE5vdGVzOgorICoKKyAqIDEpIHByZWZlciBmdW5jdGlvbmFsaXR5IG92ZXIgcGxhdGZvcm0sIHdoZXJlIHBvc3NpYmxlLiBJZiBhIG1ldGhvZAorICogICAgaXMgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBwbGF0Zm9ybXMsIHRlc3QgdGhhdCBmaXJzdC4gVGhhdCB3YXkKKyAqICAgIHdoZW4gYSBuZXcgcGxhdGZvcm0gaXMgcG9ydGVkLCBpdCB3b24ndCBuZWVkIGEgbmV3IHRlc3QgaGVyZS4KKyAqCisgKiAyKSBkb24ndCBkbyBkZXRhaWwgcmVxdWlyZW1lbnRzIGhlcmUuIElmLCBmb3IgZXhhbXBsZSwKKyAqICAgIEhQVVgxMSBoYWQgZGlmZmVyZW50IHJldWlyZW1lbnRzIHRoYW4gb3RoZXIgSFBVWCwgdGhhdCBzaG91bGQKKyAqICAgIGJlIGhhbmRsZWQgaW4gdGhlICpfaHB1eC5oIGhlYWRlciBmaWxlLgorICovCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24pCisjaWYgZGVmaW5lZCggbGludXggKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXgpCisjZWxzZQorLyoKKyAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQorICogcmVxdWlyZSBhIGJvZ3VzIGZpbGUgdG8gZ2VuZXJhdGUgYW4gZXJyb3IuCisgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lLXVua25vd24tYXJjaCk7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDYyZWJlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiAgaXB2NlNjb3BlSW5kZXhUYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQ6IGlwdjZzY29wZXpvbmVfY29tbW9uLmMgMTQxNzAgMjAwNy0wNC0yOSAwMjoyMjoxMlogdmFydW5fYyAkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaD4KKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBfZW50cnlfcmVsZWFzZShuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICogZW50cnksIHZvaWQgKnVudXNlZCk7CisKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKgorICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCisgKiB0aGUgaGVhZGVyIGZpbGUuCisgKi8KK2V4dGVybiBpbnQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKK2V4dGVybiB2b2lkCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfYXJjaF9pbml0KHZvaWQpOworCisvKioKKyAqIGluaXRpYWxpemUgc3lzdGVtc3RhdHMgY29udGFpbmVyCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfaW5pdCh1X2ludCBmbGFncykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzY29wZXpvbmU6Y29udGFpbmVyIiwgImluaXRcbiIpKTsKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVycy4gb25lIGluZGV4ZWQgYnkgaWZJbmRleCwgdGhlIG90aGVyCisgICAgICogaW5kZXhlZCBieSBpZk5hbWUuCisgICAgICovCisgICAgY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiYWNjZXNzX3Njb3Blem9uZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworLyoqCisgKiBsb2FkIHNjb3Blem9uZSBpbmZvcm1hdGlvbiBpbiBzcGVjaWZpZWQgY29udGFpbmVyCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBlbXB0eSBjb250YWluZXIsIG9yIE5VTEwgdG8gaGF2ZSBvbmUgY3JlYXRlZCBmb3IgeW91CisgKiBAcGFyYW0gbG9hZF9mbGFncyBmbGFncyB0byBtb2RpZnkgYmVoYXZpb3VyLgorICoKKyAqIEByZXR2YWwgTlVMTCAgZXJyb3IKKyAqIEByZXR2YWwgIU5VTEwgcG9pbnRlciB0byBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIqCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmM7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAibG9hZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfaW5pdChsb2FkX2ZsYWdzKTsKKyAgICAgICAgaWYgKGNvbnRhaW5lcikKKyAgICAgICAgICAgIGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInNjb3Blem9uZSIpOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zY29wZXpvbmVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByYyA9ICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2FyY2hfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIGlmICgwICE9IHJjKSB7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZShjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgY29udGFpbmVyID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZnJlZV9mbGFncykKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAiZnJlZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNvbnRhaW5lciBmb3IgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX0RPTlRfQ0xFQVIpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGZyZWUgYWxsIGl0ZW1zLgorICAgICAgICAgKi8KKyAgICAgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX2VudHJ5X3JlbGVhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCisvKioKKyAqLworbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfY3JlYXRlKHZvaWQpCit7CisgICAgbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqZW50cnkgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkpOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzY29wZXpvbmU6ZW50cnkiLCAiY3JlYXRlXG4iKSk7CisKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworCisgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAxOworICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9ICAmZW50cnktPm5zX3Njb3Blem9uZV9pbmRleDsKKworICAgIHJldHVybiBlbnRyeTsKK30KKworLyoqCisgKi8KK3ZvaWQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKiBlbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTplbnRyeSIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisKKyAgICBmcmVlKGVudHJ5KTsKK30KKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBVdGlsaXR5IHJvdXRpbmVzCisgKi8KKworLyoqCisgKiBcaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19lbnRyeV9yZWxlYXNlKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShlbnRyeSk7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjA2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQ6IGlwdjZzY29wZXpvbmVfbGludXguYyAxNDE3MCAyMDA3LTA0LTI5IDAyOjIyOjEyWiB2YXJ1bl9jICQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oPgorCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKK3N0YXRpYyBpbnQgX3Njb3Blem9uZV92NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCk7CisjZW5kaWYKKworLyoKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgbm8gY29udGFpbmVyIHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3Qgb3BlbiBmaWxlCisgKiBAcmV0dmFsIC0zIGNvdWxkIG5vdCBjcmVhdGUgZW50cnkgKHByb2JhYmx5IG1hbGxvYykKKyAqIEByZXR2YWwgLTQgZmlsZSBmb3JtYXQgZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmMxID0gMDsKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIGludCBpZHhfb2Zmc2V0ID0gMDsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3Njb3Blem9uZV9cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMxID0gX3Njb3Blem9uZV92Nihjb250YWluZXIsIGlkeF9vZmZzZXQpOworI2VuZGlmCisgICAgaWYocmMxID4gMCkKKyAgICAgICAgcmMxID0gMDsKKyAgICByZXR1cm4gcmMxOworfQorCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworLyogc2NvcGUgaWRlbnRpZmllcnMsIGZyb20ga2VybmVsIC0gaW5jbHVkZS9uZXQvaXB2Ni5oICovCisjZGVmaW5lIElQVjZfQUREUl9MT09QQkFDSyAgICAgIDB4MDAxMFUKKyNkZWZpbmUgSVBWNl9BRERSX0xJTktMT0NBTCAgICAgMHgwMDIwVQorI2RlZmluZSBJUFY2X0FERFJfU0lURUxPQ0FMICAgICAweDAwNDBVCisKK3N0YXRpYyBpbnQKK19zY29wZXpvbmVfdjYobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpCit7CisKKyAgICAvKgorICAgICAqIE9uIExpbnV4LCB3ZSBzdXBwb3J0IG9ubHkgbGluay1sb2NhbCBzY29wZSB6b25lcy4KKyAgICAgKiBFYWNoIGludGVyZmFjZSwgd2hpY2ggaGFzIGxpbmstbG9jYWwgYWRkcmVzcywgZ2V0cyB1bmlxdWUgc2NvcGUKKyAgICAgKiB6b25lIGluZGV4LgorICAgICAqLworICAgIEZJTEUgICAgICAgICAgICppbjsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVs4MF0sIGFkZHJbNDBdOworICAgIGludCAgICAgICAgICAgICBpZl9pbmRleCwgcGZ4X2xlbiwgc2NvcGUsIGZsYWdzLCByYyA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGxhc3RfaWZfaW5kZXggPSAtMTsKKyAgICBuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICplbnRyeTsKKyAgICAKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyNkZWZpbmUgUFJPQ0ZJTEUgIi9wcm9jL25ldC9pZl9pbmV0NiIKKyAgICBpZiAoIShpbiA9IGZvcGVuKFBST0NGSUxFLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIGFkZHJlc3MgaW5kZXggcHJlZml4X2xlbiBzY29wZSBzdGF0dXMgaWZfbmFtZQorICAgICAqLworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBmZTgwMDAwMDAwMDAwMDAwMDIwMGU4ZmZmZTViNWM5MyAwNSA0MCAyMCA4MCBldGgwCisgICAgICAgICAqICAgICAgICAgICAgIEEgICAgICAgICAgICAgICAgICAgIEQgIFAgIFMgIEYgIEkKKyAgICAgICAgICogQTogYWRkcmVzcworICAgICAgICAgKiBEOiBkZXZpY2UgbnVtYmVyCisgICAgICAgICAqIFA6IHByZWZpeCBsZW4KKyAgICAgICAgICogUzogc2NvcGUgKHNlZSBpbmNsdWRlL25ldC9pcHY2LmgsIG5ldC9pcHY2L2FkZHJjb25mLmMpCisgICAgICAgICAqIEY6IGZsYWdzIChzZWUgaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCwgbmV0L2lwdjYvYWRkcmNvbmYuYykKKyAgICAgICAgICogSTogaW50ZXJmYWNlCisgICAgICAgICAqLworICAgICAgICByYyA9IHNzY2FuZihsaW5lLCAiJTM5cyAlMDR4ICUwMnggJTAyeCAlMDJ4XG4iLAorICAgICAgICAgICAgICAgICAgICBhZGRyLCAmaWZfaW5kZXgsICZwZnhfbGVuLCAmc2NvcGUsICZmbGFncyk7CisgICAgICAgIGlmKCA1ICE9IHJjICkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgUFJPQ0ZJTEUgIiBkYXRhIGZvcm1hdCBlcnJvciAoJWQhPTUpLCBsaW5lID09fCVzfFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHJjLCBsaW5lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyICVzLCBpbmRleCAlZCwgcGZ4ICVkLCBzY29wZSAlZCwgZmxhZ3MgMHglWFxuIiwKKyAgICAgICAgICAgICAgICAgICAgYWRkciwgaWZfaW5kZXgsIHBmeF9sZW4sIHNjb3BlLCBmbGFncykpOworCisgICAgICAgIGlmICghIChzY29wZSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgYWRkcmVzcyBpcyBub3QgbGluay1sb2NhbCwgc2tpcHBpbmdcbiIpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIAorICAgICAgICAgKiBDaGVjayB0aGF0IHRoZSBpbnRlcmZhY2Ugd2FzIG5vdCBpbnNlcnRlZCBiZWZvcmUsIGp1c3QgaW4gY2FzZQorICAgICAgICAgKiBvbmUgaW50ZXJmYWNlIGhhcyB0d28gb3IgbW9yZSBsaW5rLWxvY2FsIGFkZHJlc3Nlcy4KKyAgICAgICAgICovCisgICAgICAgIGlmIChsYXN0X2lmX2luZGV4ID09IGlmX2luZGV4KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGluc2VydGVkLCBza2lwcGluZ1xuIikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsYXN0X2lmX2luZGV4ID0gaWZfaW5kZXg7IAorICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVudHJ5LT5uc19zY29wZXpvbmVfaW5kZXggPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIGVudHJ5LT5pbmRleCA9IGlmX2luZGV4OworICAgICAgICBlbnRyeS0+c2NvcGV6b25lX2xpbmtsb2NhbCA9IGlmX2luZGV4OworIAorICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKyAgICBmY2xvc2UoaW4pOworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiBpZHhfb2Zmc2V0OworfQorI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaAppbmRleCAyZjBhNjNhLi5lYmVhMjFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaApAQCAtMTksNiArMTksOCBAQAogICovCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXgpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNCApIHx8IGRlZmluZWQoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkNCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19zeXNjdGwpCiAjZWxzZQogLyoKICAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQpAQCAtMjYsNCArMjgsMyBAQAogICovCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFycy11bmtub3duLWFyY2gpCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMKaW5kZXggZDljMzkxNC4uODVlOTEyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jCkBAIC01LDEwICs1LDE0OCBAQAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oPgogCi1zdGF0aWMgY29uc3QgY2hhciBpcGZ3X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvZm9yd2FyZGluZyI7CituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZSkKKworc3RhdGljIGNvbnN0IGNoYXIgaXBmd19uYW1lW10gPSAiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2ZvcndhcmRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgaXB0dGxfbmFtZVtdID0gIi9wcm9jL3N5cy9uZXQvaXB2NC9pcF9kZWZhdWx0X3R0bCI7CitzdGF0aWMgY29uc3QgY2hhciBpcGZ3Nl9uYW1lW10gPSAiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvYWxsL2ZvcndhcmRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgaXBob3A2X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvaG9wX2xpbWl0IjsKKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgRklMRSAqZmlsZXA7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworCisgICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgcmMgPSBmc2NhbmYoZmlsZXAsICIlbHUiLCB2YWx1ZSk7CisgICAgZmNsb3NlKGZpbGVwKTsKKyAgICBpZiAoMSAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsICJjb3VsZCBub3QgcmVhZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisKKyAgICBpZiAoKDAgIT0gKnZhbHVlKSAmJiAoMSAhPSAqdmFsdWUpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgInVuZXhwZWN0ZWQgdmFsdWUgJWxkIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAqdmFsdWUsIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gLTQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX3NldCh1X2xvbmcgdmFsdWUpCit7CisgICAgRklMRSAqZmlsZXA7CisgICAgaW50IHJjOworCisgICAgaWYgKDEgPT0gdmFsdWUpCisgICAgICAgIDsKKyAgICBlbHNlIGlmICgyID09IHZhbHVlKQorICAgICAgICB2YWx1ZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImJhZCB2YWx1ZSAlbGQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKworICAgIGZpbGVwID0gZm9wZW4oaXBmd19uYW1lLCAidyIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgfQorCisgICAgcmMgPSBmcHJpbnRmKGZpbGVwLCAiJWxkIiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgRklMRSAqZmlsZXA7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworCisgICAgZmlsZXAgPSBmb3BlbihpcHR0bF9uYW1lLCAiciIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICByYyA9IGZzY2FuZihmaWxlcCwgIiVsdSIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImNvdWxkIG5vdCByZWFkICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisKKyAgICBpZiAoKDAgPT0gKnZhbHVlKSB8fCAoMjU1IDwgKnZhbHVlKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdFRUTCIsICJ1bmV4cGVjdGVkIHZhbHVlICVsZCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlLCBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1ZSA+IDI1NSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdFRUTCIsICJiYWQgdmFsdWUgJWxkIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgZmlsZXAgPSBmb3BlbihpcHR0bF9uYW1lLCAidyIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgIH0KKworICAgIHJjID0gZnByaW50ZihmaWxlcCwgIiVsZCIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImNvdWxkIG5vdCB3cml0ZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXB0dGxfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiAwOworfQogCiBpbnQKIG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpCkBAIC0yMCwyNCArMTU4LDI0IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogCi0gICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJyIik7CisgICAgZmlsZXAgPSBmb3BlbihpcGZ3Nl9uYW1lLCAiciIpOwogICAgIGlmIChOVUxMID09IGZpbGVwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGlwZnc2X25hbWUpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KIAotICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWxkIiwgdmFsdWUpOworICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWx1IiwgdmFsdWUpOwogICAgIGZjbG9zZShmaWxlcCk7CiAgICAgaWYgKDEgIT0gcmMpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCByZWFkICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXBmdzZfbmFtZSkpOwogICAgICAgICByZXR1cm4gLTM7CiAgICAgfQogCiAgICAgaWYgKCgwICE9ICp2YWx1ZSkgJiYgKDEgIT0gKnZhbHVlKSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLCAidW5leHBlY3RlZCB2YWx1ZSAlbGQgaW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBmd19uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBmdzZfbmFtZSkpOwogICAgICAgICByZXR1cm4gLTQ7CiAgICAgfQogCkBAIC02MCwxMCArMTk4LDEwIEBACiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgIH0KIAotICAgIGZpbGVwID0gZm9wZW4oaXBmd19uYW1lLCAidyIpOworICAgIGZpbGVwID0gZm9wZW4oaXBmdzZfbmFtZSwgInciKTsKICAgICBpZiAoTlVMTCA9PSBmaWxlcCkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwogICAgIH0KIApAQCAtNzEsOSArMjA5LDg2IEBACiAgICAgZmNsb3NlKGZpbGVwKTsKICAgICBpZiAoMSAhPSByYykgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXBmdzZfbmFtZSkpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBmaWxlcCA9IGZvcGVuKGlwaG9wNl9uYW1lLCAiciIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwaG9wNl9uYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICByYyA9IGZzY2FuZihmaWxlcCwgIiVsdSIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IHJlYWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwaG9wNl9uYW1lKSk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisKKyAgICBpZiAoKDAgPT0gKnZhbHVlKSB8fCAoMjU1IDwgKnZhbHVlKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdEhvcExpbWl0IiwgInVuZXhwZWN0ZWQgdmFsdWUgJWxkIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAqdmFsdWUsIGlwaG9wNl9uYW1lKSk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1ZSA+IDI1NSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdEhvcExpbWl0IiwgImJhZCB2YWx1ZSAlbGQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgZmlsZXAgPSBmb3BlbihpcGhvcDZfbmFtZSwgInciKTsKKyAgICBpZiAoTlVMTCA9PSBmaWxlcCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdEhvcExpbWl0IiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGhvcDZfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICB9CisKKyAgICByYyA9IGZwcmludGYoZmlsZXAsICIlbGQiLCB2YWx1ZSk7CisgICAgZmNsb3NlKGZpbGVwKTsKKyAgICBpZiAoMSAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdEhvcExpbWl0IiwgImNvdWxkIG5vdCB3cml0ZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkIGlwUmVhc21UaW1lb3V0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAxMywgMCB9OworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZQorICAgICAgICAoImlwUmVhc21UaW1lb3V0IiwKKyAgICAgICAgIGlwUmVhc21UaW1lb3V0X29pZCwgT0lEX0xFTkdUSChpcFJlYXNtVGltZW91dF9vaWQpLAorICAgICAgICAgIi9wcm9jL3N5cy9uZXQvaXB2NC9pcGZyYWdfdGltZSIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIE5VTEwsIE5VTEwpOworCit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWM3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19zeXNjdGwuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqICBJUC1NSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIFhYWDogdGhlIHZhbHVlcyBwYXNzZWQgdG8gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnMoLi4pIG1heSBvciBtYXkgbm90IGJlCisgKiBwb3J0YWJsZSB0byB0aGUgb3RoZXIgQlNEcyAtLSBpdCBzZWVtcyB0byBiZSBwb3J0YWJsZSBiYWNrIHRvIEZyZWVCU0QgNC54CisgKiAoRGFyd2luIDEwLjguMCkgYXQgbGVhc3QuCisgKi8KKworc3RhdGljIGludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKGNvbnN0IGNoYXIgKmFjY2Vzc19tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pYltdLCBzaXplX3QgbWliX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKm9sZF92YWx1ZSwgdV9sb25nICpuZXdfdmFsdWUpCit7CisgICAgaW50IG5ld2ludCwgb2xkaW50OworICAgIHNpemVfdCBuZWVkZWQ7CisgICAgaW50IHJjOworCisgICAgbmVlZGVkID0gc2l6ZW9mKG9sZGludCk7CisgICAgaWYgKG5ld192YWx1ZSkKKyAgICAgICAgbmV3aW50ID0gKm5ld192YWx1ZTsKKworICAgIHJjID0gc3lzY3RsKG1pYiwgbWliX2xlbiwgJm9sZGludCwgJm5lZWRlZCwKKyAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPyAmbmV3aW50IDogTlVMTCwgKG5ld192YWx1ZSA/IHNpemVvZihuZXdpbnQpIDogMCkpOworICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICBERUJVR01TR1RMKChhY2Nlc3NfbW9kdWxlLCAic3lzY3RsICVzIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAobmV3X3ZhbHVlID09IE5VTEwgPyAiZ2V0IiA6ICJzZXQiKSwKKyAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgfQorICAgICpvbGRfdmFsdWUgPSBvbGRpbnQ7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgaXBEZWZhdWx0VFRMX21pYltdID0geworICAgIENUTF9ORVQsCisgICAgUEZfSU5FVCwKKyAgICBJUFBST1RPX0lQLAorICAgIElQQ1RMX0RFRlRUTAorfTsKKworaW50IGlwRm9yd2FyZGluZ19taWJbXSA9IHsKKyAgICBDVExfTkVULAorICAgIFBGX0lORVQsCisgICAgSVBQUk9UT19JUCwKKyAgICBJUENUTF9GT1JXQVJESU5HCit9OworCitpbnQgaXB2NklwRGVmYXVsdEhvcExpbWl0X21pYltdID0geworICAgIENUTF9ORVQsCisgICAgUEZfSU5FVDYsCisgICAgSVBQUk9UT19JUCwKKyAgICBJUFY2Q1RMX0RFRkhMSU0KK307CisKK2ludCBpcHY2SXBGb3J3YXJkaW5nX21pYltdID0geworICAgIENUTF9ORVQsCisgICAgUEZfSU5FVDYsCisgICAgSVBQUk9UT19JUCwKKyAgICBJUFY2Q1RMX0ZPUldBUkRJTkcKK307CisKKyNkZWZpbmUgTUlCX0xFTihhKQkJKHNpemVvZihhKSAvIHNpemVvZigqYSkpCisKKyNkZWZpbmUgSVBERUZBVUxUVFRMX0xFTglNSUJfTEVOKGlwRGVmYXVsdFRUTF9taWIpCisjZGVmaW5lIElQRk9SV0FSRElOR19MRU4JTUlCX0xFTihpcEZvcndhcmRpbmdfbWliKQorI2RlZmluZSBJUFY2SVBERUZBVUxUSE9QTElNSVRfTEVOCU1JQl9MRU4oaXB2NklwRGVmYXVsdEhvcExpbWl0X21pYikKKyNkZWZpbmUgSVBWNklQRk9SV0FSRElOR19MRU4JTUlCX0xFTihpcHY2SXBGb3J3YXJkaW5nX21pYikKKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRUVExfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQREVGQVVMVFRUTF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIE5VTEwpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTI7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEZvcndhcmRpbmdfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQRk9SV0FSRElOR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIE5VTEwpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTI7CisKKyAgICAvKiBPbiBGcmVlQlNEIDcuMiBhdCBsZWFzdCwgdGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgc3lzY3RsIGNhbiBiZSBjb2VyY2VkCisgICAgICogaW50byBhIG5vbi16ZXJvIHZhbHVlOyBjb252ZXJ0IGl0IGludG8gYSB2YWx1ZSB0aGF0J3Mgc2FuZSBwZXIgdGhlCisgICAgICogSVAtTUlCIGRlZmluaXRpb24uCisgICAgICovCisgICAgaWYgKCp2YWx1ZSAhPSAwKQorICAgICAgICAqdmFsdWUgPSAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX3NldCh1X2xvbmcgdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKDEgPT0gdmFsdWUpCisgICAgICAgIDsKKyAgICBlbHNlIGlmICgyID09IHZhbHVlKQorICAgICAgICB2YWx1ZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImJhZCB2YWx1ZSAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEZvcndhcmRpbmdfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQRk9SV0FSRElOR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnZhbHVlKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCh1X2xvbmcgKnZhbHVlKQoreworICAgIGludCByYzsKKworICAgIGlmIChOVUxMID09IHZhbHVlKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX3N5c2N0bCgiYWNjZXNzOmlwdjZJcERlZmF1bHRIb3BMaW1pdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NklwRGVmYXVsdEhvcExpbWl0X21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2SVBERUZBVUxUSE9QTElNSVRfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBOVUxMKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0yOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X3NldCh1X2xvbmcgdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKDEgPT0gdmFsdWUpCisgICAgICAgIDsKKyAgICBlbHNlIGlmICgyID09IHZhbHVlKQorICAgICAgICB2YWx1ZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRGVmYXVsdEhvcExpbWl0IiwgImJhZCB2YWx1ZSAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZJUERFRkFVTFRIT1BMSU1JVF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnZhbHVlKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBGb3J3YXJkaW5nX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2SVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgTlVMTCk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIC8qIE9uIEZyZWVCU0QgNy4yIGF0IGxlYXN0LCB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBzeXNjdGwgY2FuIGJlIGNvZXJjZWQKKyAgICAgKiBpbnRvIGEgbm9uLXplcm8gdmFsdWU7IGNvbnZlcnQgaXQgaW50byBhIHZhbHVlIHRoYXQncyBzYW5lIHBlciB0aGUKKyAgICAgKiBJUC1NSUIgZGVmaW5pdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoKnZhbHVlICE9IDApCisgICAgICAgICp2YWx1ZSA9IDE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX3NldCh1X2xvbmcgdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKDEgPT0gdmFsdWUpCisgICAgICAgIDsKKyAgICBlbHNlIGlmICgyID09IHZhbHVlKQorICAgICAgICB2YWx1ZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImJhZCB2YWx1ZSAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NklwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNklQRk9SV0FSRElOR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnZhbHVlKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGlwUmVhc21UaW1lb3V0X3ZhbDsKKwordm9pZAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkIGlwUmVhc21UaW1lb3V0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAxMywgMCB9OworCisgICAgLyogCisgICAgICogVGhpcyB2YWx1ZSBpcyBzdGF0aWMgYXQgY29tcGlsZSB0aW1lIG9uIEZyZWVCU0Q7IGl0IHJlYWxseSBzaG91bGQgYmUgYQorICAgICAqIHByb2JlZCB2aWEgZWl0aGVyIHN5c2N0bCBvciBzeXNjb25mIGF0IHJ1bnRpbWUgYXMgdGhlIGNvbXBpbGVkIHZhbHVlIGFuZAorICAgICAqIHRoZSBydW50aW1lIHZhbHVlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gdmFyeS4KKyAgICAgKgorICAgICAqIFBsZWFzZSByZWZlciB0byBzeXMvcHJvdG9zdy5oIGZvciBtb3JlIGRldGFpbHMgb24gd2hhdCB0aGlzIHZhbHVlIGlzIChpbgorICAgICAqIHBhcnRpY3VsYXIgUFJfU0xPV0haKS4KKyAgICAgKi8KKyAgICBpcFJlYXNtVGltZW91dF92YWwgPSBJUEZSQUdUVEwgLyBQUl9TTE9XSFo7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2UoImlwUmVhc21UaW1lb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBSZWFzbVRpbWVvdXRfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwUmVhc21UaW1lb3V0X29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcFJlYXNtVGltZW91dF92YWwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaAppbmRleCA2YmJhNmQ5Li41MTQ4MDdhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaApAQCAtMjAsMTEgKzIwLDEwIEBACiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uKQogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eCkKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMikKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zeXNjdGwpCiAjZWxzZQotLyoKLSAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQotICogcmVxdWlyZSBhIGJvZ3VzIGZpbGUgdG8gZ2VuZXJhdGUgYW4gZXJyb3IuCi0gKi8KLWNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy11bmtub3duLWFyY2gpOworY29uZmlnX2Vycm9yKHRoZSBzeXN0ZW1zdGF0cyBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jCmluZGV4IGYyN2UwZWEuLjI5MTA5YmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIFN5c3RlbXN0YXRzIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICogIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBJZlN0YXRzVGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CiAgKgogICogJElkJAogICovCkBAIC05Niw4ICs5NiwxMSBAQAogCiAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCAibG9hZFxuIikpOwogCi0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQorICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewogICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfaW5pdChsb2FkX2ZsYWdzKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gY29udGFpbmVyKQorICAgICAgICAgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgic3lzdGVtc3RhdHNfYXV0b2NyZWF0ZSIpOworICAgIH0KICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zeXN0ZW1zdGF0c1xuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTYzLDcgKzE2Niw4IEBACiAvKioKICAqLwogbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqCi1uZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoaW50IHZlcnNpb24pCituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoaW50IHZlcnNpb24sIGludCBpZl9pbmRleCwKKyAgICAgICAgY29uc3QgY2hhciAqdGFibGVOYW1lKQogewogICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0KICAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KTsKQEAgLTE3MywxMSArMTc3LDExIEBACiAgICAgaWYoTlVMTCA9PSBlbnRyeSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBlbnRyeS0+bnNfaXBfdmVyc2lvbiA9IHZlcnNpb247Ci0KLSAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7Ci0gICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gKG9pZCAqKSAmIGVudHJ5LT5uc19pcF92ZXJzaW9uOwotCisgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAyOworICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9IGVudHJ5LT5pbmRleDsKKyAgICBlbnRyeS0+aW5kZXhbMF0gPSB2ZXJzaW9uOworICAgIGVudHJ5LT5pbmRleFsxXSA9IGlmX2luZGV4OworICAgIGVudHJ5LT50YWJsZU5hbWUgPSB0YWJsZU5hbWU7CiAgICAgcmV0dXJuIGVudHJ5OwogfQogCkBAIC0yMTcsNiArMjIxLDYyIEBACiAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShlbnRyeSk7CiB9CiAKKy8qCisgKiBDYWxjdWxhdGVzIHRoZSBlbnRyaWVzLCB3aGljaCBhcmUgbm90IHByb3ZpZGVkIGJ5IE9TLCBidXQgY2FuIGJlIAorICogY29tcHV0ZWQgZnJvbSB0aGUgb3RoZXJzLgorICovCitzdGF0aWMgdm9pZAorX2NhbGN1bGF0ZV9lbnRyaWVzKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKiBlbnRyeSkKK3sKKyAgICAvKgorICAgICAqIEhDSW5Gb3J3RGF0YWdyYW1zID0gSENJbk5vUm91dGVzICsgSENPdXRGb3J3RGF0YWdyYW1zCisgICAgICovCisgICAgaWYgKCFlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10KKyAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKSB7CisgICAgICAgIAorICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMgPSBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzOworICAgICAgICB1NjRJbmNyKCZlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMsICZlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zKTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10gPSAxOworICAgIH0KKworICAgIC8qCisgICAgICogSENPdXRGcmFnUmVxZHMgPSBIQ091dEZyYWdPS3MgKyBIQ091dEZyYWdGYWlscworICAgICAqLworICAgIGlmICghZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEU10KKyAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdCisgICAgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdKSB7CisgICAgICAgIAorICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnUmVxZHMgPSBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzOworICAgICAgICB1NjRJbmNyKCZlbnRyeS0+c3RhdHMuSENPdXRGcmFnUmVxZHMsICZlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMpOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXSA9IDE7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogSENPdXRUcmFuc21pdHMgPSBIQ091dFJlcXVlc3RzICArIEhDT3V0Rm9yd0RhdGFncmFtcyArIEhDT3V0RnJhZ0NyZWF0ZXMgIAorICAgICAqICAgICAgICAgICAgICAgICAgLSBIQ091dEZyYWdSZXFkcyAtIEhDT3V0Tm9Sb3V0ZXMgIC0gSENPdXREaXNjYXJkcworICAgICAqLworICAgIGlmICghZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUU10KKyAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10KKyAgICAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEU10KKyAgICAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXQorICAgICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdCisgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10pIHsKKworICAgICAgICBVNjQgdG1wLCB0bXAyLCB0bXAzOworICAgICAgICB0bXAgPSBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0czsKKyAgICAgICAgdTY0SW5jcigmdG1wLCAmZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcyk7CisgICAgICAgIHU2NEluY3IoJnRtcCwgJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzKTsKKyAgICAgICAgCisgICAgICAgIHU2NFN1YnRyYWN0KCZ0bXAsICZlbnRyeS0+c3RhdHMuSENPdXRGcmFnUmVxZHMsICZ0bXAyKTsKKyAgICAgICAgdTY0U3VidHJhY3QoJnRtcDIsICZlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcywgJnRtcDMpOworICAgICAgICB1NjRTdWJ0cmFjdCgmdG1wMywgJmVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLCAmZW50cnktPnN0YXRzLkhDT3V0VHJhbnNtaXRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUU10gPSAxOworICAgIH0KK30KKwogLyoqCiAgKiB1cGRhdGUgZW50cnkgc3RhdHMgKGNoZWNraW5nIGZvciBjb3VudGVyIHdyYXApCiAgKgpAQCAtMjMzLDcgKzI5Myw4IEBACiAgICAgICogc2FuaXR5IGNoZWNrcwogICAgICAqLwogICAgIGlmICgoTlVMTCA9PSBwcmV2X3ZhbHMpIHx8IChOVUxMID09IG5ld192YWxzKSB8fAotICAgICAgICAocHJldl92YWxzLT5uc19pcF92ZXJzaW9uICE9IG5ld192YWxzLT5uc19pcF92ZXJzaW9uKSkKKyAgICAgICAgKHByZXZfdmFscy0+aW5kZXhbMF0gIT0gbmV3X3ZhbHMtPmluZGV4WzBdKQorICAgICAgICB8fCAocHJldl92YWxzLT5pbmRleFsxXSAhPSBuZXdfdmFscy0+aW5kZXhbMV0pKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKgpAQCAtMjQxLDYgKzMwMiw3IEBACiAgICAgICovCiAgICAgaWYgKDAgPT0gbmVlZF93cmFwX2NoZWNrKSB7CiAgICAgICAgIG1lbWNweSgmcHJldl92YWxzLT5zdGF0cywgJm5ld192YWxzLT5zdGF0cywgc2l6ZW9mKG5ld192YWxzLT5zdGF0cykpOworICAgICAgICBfY2FsY3VsYXRlX2VudHJpZXMocHJldl92YWxzKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yNTgsOCArMzIwLDggQEAKICAgICAgICAgLyoKICAgICAgICAgICogdXBkYXRlIHN0cmFpZ2h0IDMyIGJpdCBjb3VudGVycwogICAgICAgICAgKi8KKyAgICAgICAgbWVtY3B5KCZwcmV2X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsWzBdLCAmbmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsWzBdLCBzaXplb2YobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsKSk7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5IZHJFcnJvcnMgPSBuZXdfdmFscy0+c3RhdHMuSW5IZHJFcnJvcnM7Ci0gICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5Ob1JvdXRlcyA9IG5ld192YWxzLT5zdGF0cy5Jbk5vUm91dGVzOwogICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLkluQWRkckVycm9ycyA9IG5ld192YWxzLT5zdGF0cy5JbkFkZHJFcnJvcnM7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gbmV3X3ZhbHMtPnN0YXRzLkluVW5rbm93blByb3RvczsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBuZXdfdmFscy0+c3RhdHMuSW5UcnVuY2F0ZWRQa3RzOwpAQCAtMjY3LDg3ICszMjksMjM2IEBACiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuUmVhc21PS3MgPSBuZXdfdmFscy0+c3RhdHMuUmVhc21PS3M7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuUmVhc21GYWlscyA9IG5ld192YWxzLT5zdGF0cy5SZWFzbUZhaWxzOwogICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLkluRGlzY2FyZHMgPSBuZXdfdmFscy0+c3RhdHMuSW5EaXNjYXJkczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5PdXROb1JvdXRlcyA9IG5ld192YWxzLT5zdGF0cy5PdXROb1JvdXRlczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5PdXREaXNjYXJkcyA9IG5ld192YWxzLT5zdGF0cy5PdXREaXNjYXJkczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5PdXRGcmFnUmVxZHMgPSBuZXdfdmFscy0+c3RhdHMuT3V0RnJhZ1JlcWRzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdPS3MgPSBuZXdfdmFscy0+c3RhdHMuT3V0RnJhZ09LczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5PdXRGcmFnRmFpbHMgPSBuZXdfdmFscy0+c3RhdHMuT3V0RnJhZ0ZhaWxzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdDcmVhdGVzID0gbmV3X3ZhbHMtPnN0YXRzLk91dEZyYWdDcmVhdGVzOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHVwZGF0ZSA2NGJpdCBjb3VudGVycwogICAgICAgICAgKi8KLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5SZWNlaXZlcywKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5Ob1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbk5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luTm9Sb3V0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5Ob1JvdXRlcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXROb1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXROb1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXROb1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXROb1JvdXRlcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXREaXNjYXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXREaXNjYXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXREaXNjYXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXREaXNjYXJkcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZyYWdSZXFkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRGcmFnUmVxZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0RnJhZ1JlcWRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ09LcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRGcmFnT0tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdPS3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0RnJhZ09LcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZyYWdGYWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRGcmFnRmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0RnJhZ0ZhaWxzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdDcmVhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dEZyYWdDcmVhdGVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5SZWNlaXZlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJblJlY2VpdmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luUmVjZWl2ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5PY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5SZWNlaXZlcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbk9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENJbk9jdGV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5PY3RldHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5Gb3J3RGF0YWdyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luRGVsaXZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5Gb3J3RGF0YWdyYW1zIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5EZWxpdmVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbkRlbGl2ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luRGVsaXZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0UmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5EZWxpdmVycyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRSZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRSZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRSZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dFJlcXVlc3RzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZvcndEYXRhZ3JhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dEZvcndEYXRhZ3JhbXMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dFRyYW5zbWl0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRUcmFuc21pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0VHJhbnNtaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dE9jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRUcmFuc21pdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRPY3RldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0T2N0ZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luTWNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk1jYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbk1jYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENJbk1jYXN0UGt0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ0luTWNhc3RQa3RzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luTWNhc3RPY3RldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ0luTWNhc3RPY3RldHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE1jYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRNY2FzdFBrdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0TWNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE1jYXN0UGt0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRNY2FzdE9jdGV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJbkJjYXN0UGt0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRNY2FzdE9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbkJjYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENJbkJjYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENJbkJjYXN0UGt0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRCY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5CY2FzdFBrdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dEJjYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuSENPdXRCY2FzdFBrdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0QmNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0QmNhc3RQa3RzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBpZiB3ZSd2ZSBkZWNpZGVkIHdlIG5vIGxvbmdlciBuZWVkIHRvIGNoZWNrIHdyYXBzLCBmcmVlIG9sZCBzdGF0cwogICAgICAqLwogICAgIGlmICgwID09IG5lZWRfd3JhcF9jaGVjaykgewogICAgICAgICBTTk1QX0ZSRUUocHJldl92YWxzLT5vbGRfc3RhdHMpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAvKgogICAgICAgICAgKiB1cGRhdGUgb2xkIHN0YXRzIGZyb20gbmV3IHN0YXRzLgogICAgICAgICAgKiBjYXJlZnVsIC0gb2xkX3N0YXRzIGlzIGEgcG9pbnRlciB0byBzdGF0cy4uLgogICAgICAgICAgKi8KICAgICAgICAgbWVtY3B5KHByZXZfdmFscy0+b2xkX3N0YXRzLCAmbmV3X3ZhbHMtPnN0YXRzLCBzaXplb2YobmV3X3ZhbHMtPnN0YXRzKSk7CiAgICAgfQorCisgICAgX2NhbGN1bGF0ZV9lbnRyaWVzKHByZXZfdmFscyk7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzY4LDcgKzU3OSw4IEBACiAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsICJjb3B5XG4iKSk7CiAgICAgCiAgICAgaWYgKChOVUxMID09IGxocykgfHwgKE5VTEwgPT0gcmhzKSB8fAotICAgICAgICAobGhzLT5uc19pcF92ZXJzaW9uICE9IHJocy0+bnNfaXBfdmVyc2lvbikpCisgICAgICAgIChsaHMtPmluZGV4WzBdICE9IHJocy0+aW5kZXhbMF0pCisgICAgICAgIHx8IChsaHMtPmluZGV4WzFdICE9IHJocy0+aW5kZXhbMV0pKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYwppbmRleCAzZTBmZDg3Li40YTI2ZTQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICogIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBJZlN0YXRzVGFibGUgaW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAogICoKICAqICRJZCQKICAqLwpAQCAtMTAsMTIgKzEwLDIwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CiAKKyNpbmNsdWRlICIuLi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCiBzdGF0aWMgaW50IF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKTsKK3N0YXRpYyBpbnQgX2FkZGl0aW9uYWxfc3lzdGVtc3RhdHNfdjQobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworCiAjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKIHN0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOwogI2VuZGlmCiAKLQogdm9pZAogbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfYXJjaF9pbml0KHZvaWQpCiB7CkBAIC02Miw3ICs3MCw3IEBACiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3Nfc3lzdGVtc3RhdHNfXG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQorICAgIAogICAgIC8qCiAgICAgICogbG9hZCB2NCBhbmQgdjYgc3RhdHMuIEV2ZW4gaWYgb25lIGZhaWxzLCB0cnkgdGhlIG90aGVyLgogICAgICAqIElmIHRoZXkgaGF2ZSB0aGUgc2FtZSByYywgcmV0dXJuIGl0LiBpZiB0aGUgZGlmZmVyLCByZXR1cm4KQEAgLTgxLDYgKzg5LDkgQEAKICNlbmRpZgogfQogCisvKgorICogQmFzZWQgb24gbG9hZF9mbGFncywgbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgb3IgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgZW50cmllcy4gCisgKi8KIHN0YXRpYyBpbnQKIF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQogewpAQCAtOTIsMTUgKzEwMywyMCBAQAogICAgIGludCAgICAgICAgICAgICBsZW47CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNjYW5fdmFsc1sxOV07CiAKLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgdjQgKGZsYWdzICVwKVxuIiwKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgdjQgKGZsYWdzICV4KVxuIiwKICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzKSk7CiAKICAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXIgIT0gTlVMTCk7IC8qIGxvYWQgZnVuY3Rpb24gc2hvdWxkYSBjaGVja2VkIHRoaXMgKi8KIAorICAgIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFKSB7CisgICAgICAgIC8qIHdlIGRvIG5vdCBzdXBwb3J0IGlwSWZTdGF0c1RhYmxlIGZvciBpcHY0ICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGlmICghKGRldmluID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wIiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsCiAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbG9hZCBTeXN0ZW1zdGF0cyBUYWJsZSAobGludXgxKVxuIikpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3NubXAgLi4uXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3NubXAgLi4uXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTE0NCw3ICsxNjAsOCBAQAogICAgICAgICB3aGlsZSAoKnN0YXRzID09ICcgJykgLyogc2tpcCBzcGFjZXMgYmVmb3JlIHN0YXRzICovCiAgICAgICAgICAgICBzdGF0cysrOwogCi0gICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDEpOworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgxLCAwLAorICAgICAgICAgICAgICAgICAgICAiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjQiKTsKICAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgewogICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKQEAgLTE4NSwyMyArMjAyLDU0IEBACiAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IHNjYW5fdmFsc1syXSA+PiAzMjsKICAgICAgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gc2Nhbl92YWxzWzNdOwogICAgICAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gc2Nhbl92YWxzWzRdOwotICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93ID0gc2Nhbl92YWxzWzVdICYgMHhmZmZmZmZmZjsKLSAgICAgICAgZW50cnktPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmhpZ2ggPSBzY2FuX3ZhbHNbNV0gPj4gMzI7CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gc2Nhbl92YWxzWzVdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gc2Nhbl92YWxzWzVdID4+IDMyOwogICAgICAgICBlbnRyeS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gc2Nhbl92YWxzWzZdOwogICAgICAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IHNjYW5fdmFsc1s3XTsKICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5sb3cgPSBzY2FuX3ZhbHNbOF0gJiAweGZmZmZmZmZmOwogICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBzY2FuX3ZhbHNbOF0gPj4gMzI7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdyA9IHNjYW5fdmFsc1s5XSAmIDB4ZmZmZmZmZmY7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBzY2FuX3ZhbHNbOV0gPj4gMzI7Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXREaXNjYXJkcyA9IHNjYW5fdmFsc1sxMF07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXROb1JvdXRlcyA9IHNjYW5fdmFsc1sxMV07CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IHNjYW5fdmFsc1sxMF0gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IHNjYW5fdmFsc1sxMF0gPj4gMzI7CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IHNjYW5fdmFsc1sxMV0gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IHNjYW5fdmFsc1sxMV0gPj4gMzI7CiAgICAgICAgIC8qIGVudHJ5LT5zdGF0cy4gPSBzY2FuX3ZhbHNbMTJdOyAvICogUmVhc21UaW1lb3V0ICovCiAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gc2Nhbl92YWxzWzEzXTsKICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gc2Nhbl92YWxzWzE0XTsKICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtRmFpbHMgPSBzY2FuX3ZhbHNbMTVdOwotICAgICAgICBlbnRyeS0+c3RhdHMuT3V0RnJhZ09LcyA9IHNjYW5fdmFsc1sxNl07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnRmFpbHMgPSBzY2FuX3ZhbHNbMTddOwotICAgICAgICBlbnRyeS0+c3RhdHMuT3V0RnJhZ0NyZWF0ZXMgPSBzY2FuX3ZhbHNbMThdOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IHNjYW5fdmFsc1sxNl0gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gc2Nhbl92YWxzWzE2XSA+PiAzMjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmxvdyA9IHNjYW5fdmFsc1sxN10gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBzY2FuX3ZhbHNbMTddID4+IDMyOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBzY2FuX3ZhbHNbMThdICYgMHhmZmZmZmZmZjs7CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBzY2FuX3ZhbHNbMThdID4+IDMyOworCisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1NdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBsb2FkIGFkZHRpb25hbCBzdGF0aXN0aWNzIGRlZmluZWQgYnkgUkZDIDQyOTMKKyAgICAgICAgICogQXMgdGhlc2UgYXJlIHN1cHBvcnRlZCBsaW51eCAyLjYuMjIgb3IgbGF0ZXIsIGl0IGlzIG5vIHByb2JsZW0KKyAgICAgICAgICogaWYgbG9hZGluZyB0aGVtIGFyZSBmYWlsZWQuCisgICAgICAgICAqLworICAgICAgICBfYWRkaXRpb25hbF9zeXN0ZW1zdGF0c192NChlbnRyeSwgbG9hZF9mbGFncyk7CiAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIHRvIGNvbnRhaW5lcgpAQCAtMjE2LDQ4ICsyNjQsMTIyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAgICAgCi0jaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKyNkZWZpbmUgSVBfRVhUX0hFQUQgIklwRXh0OiIKIHN0YXRpYyBpbnQKLV9zeXN0ZW1zdGF0c192NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQorX2FkZGl0aW9uYWxfc3lzdGVtc3RhdHNfdjQobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQogewogICAgIEZJTEUgICAgICAgICAgICpkZXZpbjsKICAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKLSAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgKnN0YXRzLCAqc3RhcnQgPSBsaW5lOwotICAgIGludCAgICAgICAgICAgICBsZW4sIHJjOwotICAgIHVpbnRtYXhfdCAgICAgICBzY2FuX3ZhbDsKLSAgICBjb25zdCBjaGFyICAgICAqZmlsZW5hbWUgPSAiL3Byb2MvbmV0L3NubXA2IjsKLSAgICBzdGF0aWMgaW50ICAgICAgd2FybmVkX29wZW4gPSAwOworICAgIGludCAgICAgICAgICAgICBzY2FuX2NvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2FuX3ZhbHNbMTJdOworICAgIGludCAgICAgICAgICAgICByZXR2YWwgPSAwOwogCi0gICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAldSlcbiIsCi0gICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICJsb2FkIGFkZHRpb25hbCB2NCAoZmxhZ3MgJXUpXG4iLCBsb2FkX2ZsYWdzKSk7CiAKLSAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXIgIT0gTlVMTCk7IC8qIGxvYWQgZnVuY3Rpb24gc2hvdWxkYSBjaGVja2VkIHRoaXMgKi8KLQotICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDIpOwotICAgIGlmKE5VTEwgPT0gZW50cnkpCi0gICAgICAgIHJldHVybiAtMzsKLSAgICAKLSAgICAvKgotICAgICAqIHRyeSB0byBvcGVuIGZpbGUuIElmIHdlIGNhbid0LCB0aGF0J3Mgb2sgLSBtYXliZSB0aGUgbW9kdWxlIGhhc24ndAotICAgICAqIGJlZW4gbG9hZGVkIHlldC4KLSAgICAgKi8KLSAgICBpZiAoIShkZXZpbiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSkgeworICAgIGlmICghKGRldmluID0gZm9wZW4oIi9wcm9jL25ldC9uZXRzdGF0IiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbG9hZCBTeXN0ZW1zdGF0cyBUYWJsZSAobGludXgxKVxuIikpOwotICAgICAgICBpZighd2FybmVkX29wZW4pIHsKLSAgICAgICAgICAgICsrd2FybmVkX29wZW47Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gJXMgLi4uXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJlZShlbnRyeSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L25ldHN0YXRcbiIpKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvbmV0c3RhdFxuIikpOworICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIHN0YXRpc3RpY3MgZm9yIGVhY2ggc3lzdGVtc3RhdHMuCisgICAgICogR2V0IGhlYWRlciBhbmQgc3RhdCBsaW5lcworICAgICAqLworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKSkgeworICAgICAgICBpZiAoc3RybmNtcChJUF9FWFRfSEVBRCwgbGluZSwgc2l6ZW9mKElQX0VYVF9IRUFEKSAtIDEpID09IDApIHsKKyAgICAgICAgICAgIC8qIG5leHQgbGluZSBzaG91bGQgaW5jbHVkZXMgSVB2NCBhZGR0aW9uYWwgc3RhdGlzdGljcyAqLworICAgICAgICAgICAgaWYgKChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IC00OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cm5jbXAoSVBfRVhUX0hFQUQsIGxpbmUsIHNpemVvZihJUF9FWFRfSEVBRCkgLSAxKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lbXNldChzY2FuX3ZhbHMsIDB4MCwgc2l6ZW9mKHNjYW5fdmFscykpOworICAgICAgICAgICAgc2Nhbl9jb3VudCA9IHNzY2FuZihsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSpzIiAgIC8qIGlnbm9yZSBgSXBFeHQ6JyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbl92YWxzWzBdLCAmc2Nhbl92YWxzWzFdLCAmc2Nhbl92YWxzWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbl92YWxzWzNdLCAmc2Nhbl92YWxzWzRdLCAmc2Nhbl92YWxzWzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbl92YWxzWzZdLCAmc2Nhbl92YWxzWzddLCAmc2Nhbl92YWxzWzhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbl92YWxzWzldLCAmc2Nhbl92YWxzWzEwXSwgJnNjYW5fdmFsc1sxMV0pOworICAgICAgICAgICAgaWYgKHNjYW5fY291bnQgPCA2KSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBzY2FubmluZyBhZGR0aW9uYWwgc3lzdGVtc3RhdHMgZGF0YSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIobWluaW11bSBleHBlY3RlZCAlZCwgZ290ICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDYsIHNjYW5fY291bnQpOworICAgICAgICAgICAgICAgIHJldHZhbCA9IC00OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdyAgICA9IHNjYW5fdmFsc1swXSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmhpZ2ggICA9IHNjYW5fdmFsc1swXSA+PiAzMjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JblRydW5jYXRlZFBrdHMgICAgID0gc2Nhbl92YWxzWzFdOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMubG93ICAgPSBzY2FuX3ZhbHNbMl0gJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCAgPSBzY2FuX3ZhbHNbMl0gPj4gMzI7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93ICA9IHNjYW5fdmFsc1szXSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsc1szXSA+PiAzMjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdyAgID0gc2Nhbl92YWxzWzRdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2ggID0gc2Nhbl92YWxzWzRdID4+IDMyOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdyAgPSBzY2FuX3ZhbHNbNV0gJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbHNbNV0gPj4gMzI7CisKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTXSA9IDE7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUU10gPSAxOworICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSA9IDE7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSA9IDE7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdID0gMTsKKwkgICAgaWYgKHNjYW5fY291bnQgPj0gMTIpIHsKKwkJZW50cnktPnN0YXRzLkhDSW5PY3RldHMubG93ICAgICAgICA9IHNjYW5fdmFsc1s2XSAmIDB4ZmZmZmZmZmY7CisJCWVudHJ5LT5zdGF0cy5IQ0luT2N0ZXRzLmhpZ2ggICAgICAgPSBzY2FuX3ZhbHNbNl0gPj4gMzI7CisJCWVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5sb3cgICAgICAgPSBzY2FuX3ZhbHNbN10gJiAweGZmZmZmZmZmOworCQllbnRyeS0+c3RhdHMuSENPdXRPY3RldHMuaGlnaCAgICAgID0gc2Nhbl92YWxzWzddID4+IDMyOworCQllbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyAgID0gc2Nhbl92YWxzWzhdICYgMHhmZmZmZmZmZjsKKwkJZW50cnktPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5oaWdoICA9IHNjYW5fdmFsc1s4XSA+PiAzMjsKKwkJZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93ICA9IHNjYW5fdmFsc1s5XSAmIDB4ZmZmZmZmZmY7CisJCWVudHJ5LT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbHNbOV0gPj4gMzI7CisJCS8qIDEwIGFuZCAxMSBhcmUgSW4vT3V0QmNhc3RPY3RldHMgKi8KKwkJZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSA9IDE7CisJCWVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdID0gMTsKKwkJZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdID0gMTsKKwkJZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSA9IDE7CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZjbG9zZShkZXZpbik7CisKKyAgICBpZiAocmV0dmFsIDwgMCkKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICIvcHJvYy9uZXQvbmV0c3RhdCBkb2VzIG5vdCBpbmNsdWRlIGFkZHRpb25hbCBzdGF0c1xuIikpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKyAgIAorI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisKKy8qCisgKiBMb2FkIG9uZSAvcHJvYy9uZXQvc25tcDYgLSBsaWtlIGZpbGUgKGUuZy4gL3Byb2MvbmV0L2Rldl9zbm1wNikKKyAqLyAKK3N0YXRpYyBpbnQgCitfc3lzdGVtc3RhdHNfdjZfbG9hZF9maWxlKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5LCBGSUxFICpkZXZpbikKK3sKKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICBjaGFyICAgICAgICAgICAqc3RhdHMsICpzdGFydCA9IGxpbmU7CisgICAgaW50ICAgICAgICAgICAgIGxlbiwgcmM7CisgICAgdWludG1heF90ICAgICAgIHNjYW5fdmFsOworCisgICAgLyoKICAgICAgKiBSZWFkIGluIGVhY2ggbGluZSBpbiB0dXJuLCBpc29sYXRlIHRoZSBzeXN0ZW1zdGF0cyBuYW1lCiAgICAgICogICBhbmQgcmV0cmlldmUgKG9yIGNyZWF0ZSkgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBzdHJ1Y3R1cmUuCiAgICAgICovCisgICAgcmMgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHN0YXJ0ID0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXZpbik7CiAgICAgICAgIGlmIChOVUxMID09IHN0YXJ0KQpAQCAtMjg3LDc3ICs0MDksMTIzIEBACiAgICAgICAgICAqICAgICAgZGF0YSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkuCiAgICAgICAgICAqLwogICAgICAgICBzY2FuX3ZhbCA9IGF0b2xsKHN0YXRzKTsKLSAgICAgICAgaWYgKDAgPT0gc2Nhbl92YWwpCi0gICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICByYyA9IDA7CiAgICAgICAgIGlmICgnSScgPT0gbGluZVszXSkgeyAvKiBJbiAqLwogICAgICAgICAgICAgaWYgKCdBJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluQWRkckVycm9ycyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdEJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgaWYgKCdlJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnaScgPT0gbGluZVs2XSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdpJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gc2Nhbl92YWw7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnSCcgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ00nID09IGxpbmVbNV0pIHsKLSAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOwotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBpZiAoJ1AnID09IGxpbmVbMTBdKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVsxMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTicgPT0gbGluZVs1XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5Jbk5vUm91dGVzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5Ob1JvdXRlcy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5Ob1JvdXRlcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnVCcgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGlmICgncicgPT0gbGluZVs2XSkgewogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSW5UcnVuY2F0ZWRQa3RzID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlRSVU5DQVRFRFBLVFNdID0gMTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdvJyA9PSBsaW5lWzZdKQogICAgICAgICAgICAgICAgICAgICA7IC8qIFRvb0JpZyBpc24ndCBpbiB0aGUgTUlCLCBzbyBpZ25vcmUgaXQgKi8KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJjID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1UnID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1NdID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJ08nID09IGxpbmVbNV0pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5PY3RldHMuaGlnaCA9IHNjYW5fdmFsICA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJjID0gMTsKICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVszXSkgeyAvKiBPdXQgKi8KICAgICAgICAgICAgIGlmICgnRCcgPT0gbGluZVs2XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5PdXREaXNjYXJkcyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdGJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ00nID09IGxpbmVbNl0pIHsKLSAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOwotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgaWYgKCdQJyA9PSBsaW5lWzExXSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVsxMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTicgPT0gbGluZVs2XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5PdXROb1JvdXRlcyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdSJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJ08nID09IGxpbmVbNl0pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRPY3RldHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKCdSJyA9PSBsaW5lWzNdKSB7IC8qIFJlYXNtICovCiAgICAgICAgICAgICBpZiAoJ0YnID09IGxpbmVbOF0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbU9LcyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbOF0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IHNjYW5fdmFsOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnVCcgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIDsgLyogbm8gbWliIGVudHJ5IGZvciByZWFzbSB0aW1lb3V0ICovCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoJ0YnID09IGxpbmVbM10pIHsgLyogRnJhZyAqLwotICAgICAgICAgICAgaWYgKCdDJyA9PSBsaW5lWzddKQotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnQ3JlYXRlcyA9IHNjYW5fdmFsOwotICAgICAgICAgICAgZWxzZSBpZiAoJ08nID09IGxpbmVbN10pCi0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdPS3MgPSBzY2FuX3ZhbDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCdGJyA9PSBsaW5lWzddKQotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnRmFpbHMgPSBzY2FuX3ZhbDsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICgnQycgPT0gbGluZVs3XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzddKSB7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0YnID09IGxpbmVbN10pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10gPSAxOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJjID0gMTsKQEAgLTM2NSw2ICs1MzMsNDMgQEAKICAgICAgICAgaWYgKHJjKQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsICJ1bmtub3duIHN0YXQgJXNcbiIsIGxpbmUpKTsKICAgICB9CisgICAgLyoKKyAgICAgKiBMZXQgRGlzY29udGludWl0eVRpbWUgYW5kIFJlZnJlc2hSYXRlIGFjdGl2ZQorICAgICAqLworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUVdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFXSA9IDE7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzCisgKi8KK3N0YXRpYyBpbnQgCitfc3lzdGVtc3RhdHNfdjZfbG9hZF9zeXN0ZW1zdGF0cyhuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIEZJTEUgKmRldmluOworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICAgICAqZmlsZW5hbWUgPSAiL3Byb2MvbmV0L3NubXA2IjsKKyAgICBpbnQgcmMgPSAwOworICAgIAorICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDIsIDAsCisgICAgICAgICAgICAiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjYiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTM7CisgICAgCisgICAgLyoKKyAgICAgKiB0cnkgdG8gb3BlbiBmaWxlLiBJZiB3ZSBjYW4ndCwgdGhhdCdzIG9rIC0gbWF5YmUgdGhlIG1vZHVsZSBoYXNuJ3QKKyAgICAgKiBiZWVuIGxvYWRlZCB5ZXQuCisgICAgICovCisgICAgaWYgKCEoZGV2aW4gPSBmb3BlbihmaWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0cyIsCisgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIFN5c3RlbXN0YXRzIFRhYmxlIChsaW51eDEpLCBjYW5ub3Qgb3BlbiAlc1xuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmMgPSBfc3lzdGVtc3RhdHNfdjZfbG9hZF9maWxlKGVudHJ5LCBkZXZpbik7CiAKICAgICBmY2xvc2UoZGV2aW4pOwogCkBAIC0zODAsNCArNTg1LDExOCBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorCisjZGVmaW5lIERFVl9TTk1QNl9ESVJOQU1FICAgIi9wcm9jL25ldC9kZXZfc25tcDYiCisjZGVmaW5lIElGSU5ERVhfTElORSAgICAgICAgImlmSW5kZXgiCisjZGVmaW5lIERFVl9GSUxFTkFNRV9MRU4gICAgNjQKKworLyoKKyAqIGxvYWQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcworICovCitzdGF0aWMgaW50IAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfaWZzdGF0cyhuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIERJUiAgICAgICAgICAgICpkZXZfc25tcDZfZGlyOworICAgIHN0cnVjdCBkaXJlbnQgICpkZXZfc25tcDZfZW50cnk7CisgICAgY2hhciAgICAgICAgICAgZGV2X2ZpbGVuYW1lW0RFVl9GSUxFTkFNRV9MRU5dOworICAgIEZJTEUgICAgICAgICAgICpkZXZpbjsKKyAgICBjaGFyICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpzdGFydCA9IGxpbmU7CisgICAgY2hhciAgICAgICAgICAgKnNjYW5fc3RyOworICAgIHVpbnRtYXhfdCAgICAgICBzY2FuX3ZhbDsKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAKKyAgICAvKgorICAgICAqIHRyeSB0byBvcGVuIC9wcm9jL25ldC9kZXZfc25tcDYgZGlyZWN0b3J5LiBJZiB3ZSBjYW4ndCwgdGhhdCcgb2sgLQorICAgICAqIG1heWJlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcnVubmluZyBrZXJuZWwuCisgICAgICovCisgICAgaWYgKChkZXZfc25tcDZfZGlyID0gb3BlbmRpcihERVZfU05NUDZfRElSTkFNRSkpID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppZnN0YXRzIiwKKyAgICAgICAgIkZhaWxlZCB0byBsb2FkIElQdjYgSWZTdGF0cyBUYWJsZSAobGludXgpXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIFJlYWQgZWFjaCBwZXIgaW50ZXJmYWNlIHN0YXRpc3RpY3MgcHJvYyBmaWxlCisgICAgICovCisgICAgd2hpbGUgKChkZXZfc25tcDZfZW50cnkgPSByZWFkZGlyKGRldl9zbm1wNl9kaXIpKSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChkZXZfc25tcDZfZW50cnktPmRfbmFtZVswXSA9PSAnLicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAKKyAgICAgICAgaWYgKHNucHJpbnRmKGRldl9maWxlbmFtZSwgREVWX0ZJTEVOQU1FX0xFTiwgIiVzLyVzIiwgREVWX1NOTVA2X0RJUk5BTUUsCisgICAgICAgICAgICAgICAgZGV2X3NubXA2X2VudHJ5LT5kX25hbWUpID4gREVWX0ZJTEVOQU1FX0xFTikgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkludGVyZmFjZSBuYW1lICVzIGlzIHRvbyBsb25nXG4iLAorICAgICAgICAgICAgICAgICAgICBkZXZfc25tcDZfZW50cnktPmRfbmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoTlVMTCA9PSAoZGV2aW4gPSBmb3BlbihkZXZfZmlsZW5hbWUsICJyIikpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIsIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBJZiBhIHN0YXQgZmlsZSBuYW1lIGlzIG1hZGUgb2YgZGlnaXRzLCB0aGUgbmFtZSBpcyBpbnRlcmZhY2UgaW5kZXguCisgICAgICAgICAqIElmIGl0IGlzIGFuIGludGVyZmFjZSBuYW1lLCB0aGUgZmlsZSBpbmNsdWRlcyBhIGxpbmUgbGFiZWxlZCBpZkluZGV4LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGlzZGlnaXQoZGV2X3NubXA2X2VudHJ5LT5kX25hbWVbMF0pKSB7CisgICAgICAgICAgICBzY2FuX3ZhbCA9IHN0cnRvdWxsKGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lLCBOVUxMLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChOVUxMID09IChzdGFydCA9IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2aW4pKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyBkb2Vzbid0IGluY2x1ZGUgYW55IGxpbmVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYgKDAgIT0gc3RybmNtcChzdGFydCwgSUZJTkRFWF9MSU5FLCA3KSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyBkb2Vzbid0IGluY2x1ZGUgaWZJbmRleCBsaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2Nhbl9zdHIgPSBzdHJyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBzY2FuX3N0cikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyBpcyB3cm9uZyBmb3JtYXQiLCBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY2FuX3ZhbCA9IHN0cnRvdWxsKHNjYW5fc3RyLCBOVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgc2Nhbl92YWwsCisgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlLmlwdjYiKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgIGNsb3NlZGlyKGRldl9zbm1wNl9kaXIpOworICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBfc3lzdGVtc3RhdHNfdjZfbG9hZF9maWxlKGVudHJ5LCBkZXZpbik7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgfQorICAgIGNsb3NlZGlyKGRldl9zbm1wNl9kaXIpOworICAgIHJldHVybiAwOworfQorCisvKgorICogQmFzZWQgb24gbG9hZF9mbGFncywgbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgb3IgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcy4gCisgKi8KK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NiAoZmxhZ3MgJXUpXG4iLAorICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLworCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogbG9hZCBpcElmU3RhdHNUYWJsZSAqLworICAgICAgICByZXR1cm4gX3N5c3RlbXN0YXRzX3Y2X2xvYWRfaWZzdGF0cyhjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9zeXN0ZW1zdGF0cyhjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIH0KK30KICNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWM0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYwpAQCAtMCwwICsxLDIxMyBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oPgorCisjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorCitzdGF0aWMgaW50IF9zeXN0ZW1zdGF0cyhtaWJncm91cF9lLCBuZXRzbm1wX2NvbnRhaW5lciAqLCB1X2ludCk7CitzdGF0aWMgdm9pZCBfYWRkX2lwc3RhdHMobWliMl9pcElmU3RhdHNFbnRyeV90ICosIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqKTsKK3N0YXRpYyBpbnQgX2luc2VydF9lbnRyeShuZXRzbm1wX2NvbnRhaW5lciAqLCBtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKik7CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2FyY2hfaW5pdCh2b2lkKQoreworICAgIGluaXRfa2VybmVsX3N1bm9zNSgpOworfQorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGNvbnRhaW5lciBlcnJvcgorICogQHJldHZhbCAtMiBjb3VsZCBub3QgY3JlYXRlIGVudHJ5IChwcm9iYWJseSBtYWxsb2MpCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmM7IAorICAgIAorICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuICgtMSk7CisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkKKwlyZXR1cm4gMDsgLyogd2UgZG8gbm90IHN1cHBvcnQgaXBJZlN0YXRzVGFibGUgeWV0ICovCisKKyAgICBpZiAoKHJjID0gX3N5c3RlbXN0YXRzKE1JQl9JUF9UUkFGRklDX1NUQVRTLCBjb250YWluZXIsIGxvYWRfZmxhZ3MpKSA8IDApCisgICAgICAgIHJldHVybiAocmMpOworI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICBpZiAoKHJjID0gX3N5c3RlbXN0YXRzKE1JQl9JUDYsIGNvbnRhaW5lciwgbG9hZF9mbGFncykpIDwgMCkgeworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLAorICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfTk9GTEFHUyk7CisgICAgICAgIHJldHVybiAocmMpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiAoMCk7Cit9CisKKy8qCisgKiBAcmV0dmFsIDAgc3VjY2VzcyAKKyAqIEByZXR2YWwgPDAgZXJyb3IKKyAqLworc3RhdGljIGludAorX3N5c3RlbXN0YXRzKG1pYmdyb3VwX2UgbWliLCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG1pYjJfaXBJZlN0YXRzRW50cnlfdCBpcGUsIGlwdG90OworICAgIHJlcV9lIHJlcSA9IEdFVF9GSVJTVDsKKyAgICBpbnQgaXB2ZXJzaW9uID0gKG1pYiA9PSBNSUJfSVA2KSA/IE1JQjJfSU5FVEFERFJFU1NUWVBFX2lwdjYgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlCMl9JTkVUQUREUkVTU1RZUEVfaXB2NDsKKyAgICBtZW1zZXQoJmlwdG90LCAnXDAnLCBzaXplb2YoaXB0b3QpKTsKKworICAgIHdoaWxlIChnZXRNaWJzdGF0KG1pYiwgJmlwZSwgc2l6ZW9mKGlwZSksIHJlcSwgCisgICAgICAgICAgICAgICAgICAgICAgJkdldF9ldmVyeXRoaW5nLCBOVUxMKSA9PSAwKSB7IAorICAgICAgICByZXEgPSBHRVRfTkVYVDsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoaXBlLmlwSWZTdGF0c0lQVmVyc2lvbiA9PSBpcHZlcnNpb24pOworICAgICAgICBfYWRkX2lwc3RhdHMoJmlwdG90LCAmaXBlKTsKKyAgICB9CisgICAgaXB0b3QuaXBJZlN0YXRzSVBWZXJzaW9uID0gaXB2ZXJzaW9uOworICAgIHJldHVybiBfaW5zZXJ0X2VudHJ5KGNvbnRhaW5lciwgJmlwdG90KTsKK30KKworc3RhdGljIHZvaWQKK19hZGRfaXBzdGF0cyhtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKm8xLCBtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKm8yKQoreworICAgIG8xLT5pcElmU3RhdHNJbkhkckVycm9ycyArPSBvMi0+aXBJZlN0YXRzSW5IZHJFcnJvcnM7CisgICAgbzEtPmlwSWZTdGF0c0luVG9vQmlnRXJyb3JzICs9IG8yLT5pcElmU3RhdHNJblRvb0JpZ0Vycm9yczsKKyAgICBvMS0+aXBJZlN0YXRzSW5Ob1JvdXRlcyArPSBvMi0+aXBJZlN0YXRzSW5Ob1JvdXRlczsKKyAgICBvMS0+aXBJZlN0YXRzSW5BZGRyRXJyb3JzICs9IG8yLT5pcElmU3RhdHNJbkFkZHJFcnJvcnM7CisgICAgbzEtPmlwSWZTdGF0c0luVW5rbm93blByb3RvcyArPSBvMi0+aXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zOworICAgIG8xLT5pcElmU3RhdHNJblRydW5jYXRlZFBrdHMgKz0gbzItPmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0czsKKyAgICBvMS0+aXBJZlN0YXRzSW5EaXNjYXJkcyArPSBvMi0+aXBJZlN0YXRzSW5EaXNjYXJkczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0RGlzY2FyZHMgKz0gbzItPmlwSWZTdGF0c091dERpc2NhcmRzOworICAgIG8xLT5pcElmU3RhdHNPdXRGcmFnT0tzICs9IG8yLT5pcElmU3RhdHNPdXRGcmFnT0tzOworICAgIG8xLT5pcElmU3RhdHNPdXRGcmFnRmFpbHMgKz0gbzItPmlwSWZTdGF0c091dEZyYWdGYWlsczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgKz0gbzItPmlwSWZTdGF0c091dEZyYWdDcmVhdGVzOworICAgIG8xLT5pcElmU3RhdHNSZWFzbVJlcWRzICs9IG8yLT5pcElmU3RhdHNSZWFzbVJlcWRzOworICAgIG8xLT5pcElmU3RhdHNSZWFzbU9LcyArPSBvMi0+aXBJZlN0YXRzUmVhc21PS3M7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtRmFpbHMgKz0gbzItPmlwSWZTdGF0c1JlYXNtRmFpbHM7CisgICAgbzEtPmlwSWZTdGF0c091dE5vUm91dGVzICs9IG8yLT5pcElmU3RhdHNPdXROb1JvdXRlczsKKyAgICBvMS0+aXBJZlN0YXRzUmVhc21EdXBsaWNhdGVzICs9IG8yLT5pcElmU3RhdHNSZWFzbUR1cGxpY2F0ZXM7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtUGFydER1cHMgKz0gbzItPmlwSWZTdGF0c1JlYXNtUGFydER1cHM7CisgICAgbzEtPmlwSWZTdGF0c0ZvcndQcm9oaWJpdHMgKz0gbzItPmlwSWZTdGF0c0ZvcndQcm9oaWJpdHM7CisgICAgbzEtPnVkcEluQ2tzdW1FcnJzICs9IG8yLT51ZHBJbkNrc3VtRXJyczsKKyAgICBvMS0+dWRwSW5PdmVyZmxvd3MgKz0gbzItPnVkcEluT3ZlcmZsb3dzOworICAgIG8xLT5yYXdpcEluT3ZlcmZsb3dzICs9IG8yLT5yYXdpcEluT3ZlcmZsb3dzOworICAgIG8xLT5pcElmU3RhdHNJbldyb25nSVBWZXJzaW9uICs9IG8yLT5pcElmU3RhdHNJbldyb25nSVBWZXJzaW9uOworICAgIG8xLT5pcElmU3RhdHNPdXRXcm9uZ0lQVmVyc2lvbiArPSBvMi0+aXBJZlN0YXRzT3V0V3JvbmdJUFZlcnNpb247CisgICAgbzEtPmlwSWZTdGF0c091dFN3aXRjaElQVmVyc2lvbiArPSBvMi0+aXBJZlN0YXRzT3V0U3dpdGNoSVBWZXJzaW9uOworICAgIG8xLT5pcElmU3RhdHNIQ0luUmVjZWl2ZXMgKz0gbzItPmlwSWZTdGF0c0hDSW5SZWNlaXZlczsKKyAgICBvMS0+aXBJZlN0YXRzSENJbk9jdGV0cyArPSBvMi0+aXBJZlN0YXRzSENJbk9jdGV0czsKKyAgICBvMS0+aXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgKz0gbzItPmlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zOworICAgIG8xLT5pcElmU3RhdHNIQ0luRGVsaXZlcnMgKz0gbzItPmlwSWZTdGF0c0hDSW5EZWxpdmVyczsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRSZXF1ZXN0cyArPSBvMi0+aXBJZlN0YXRzSENPdXRSZXF1ZXN0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zICs9IG8yLT5pcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXM7CisgICAgbzEtPmlwSWZTdGF0c091dEZyYWdSZXFkcyArPSBvMi0+aXBJZlN0YXRzT3V0RnJhZ1JlcWRzOworICAgIG8xLT5pcElmU3RhdHNIQ091dFRyYW5zbWl0cyArPSBvMi0+aXBJZlN0YXRzSENPdXRUcmFuc21pdHM7CisgICAgbzEtPmlwSWZTdGF0c0hDT3V0T2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ091dE9jdGV0czsKKyAgICBvMS0+aXBJZlN0YXRzSENJbk1jYXN0UGt0cyArPSBvMi0+aXBJZlN0YXRzSENJbk1jYXN0UGt0czsKKyAgICBvMS0+aXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHM7CisgICAgbzEtPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzICs9IG8yLT5pcElmU3RhdHNIQ091dE1jYXN0UGt0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyArPSBvMi0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0czsKKyAgICBvMS0+aXBJZlN0YXRzSENJbkJjYXN0UGt0cyArPSBvMi0+aXBJZlN0YXRzSENJbkJjYXN0UGt0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgKz0gbzItPmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzOworICAgIG8xLT5pcHNlY0luU3VjY2VlZGVkICs9IG8yLT5pcHNlY0luU3VjY2VlZGVkOworICAgIG8xLT5pcHNlY0luRmFpbGVkICs9IG8yLT5pcHNlY0luRmFpbGVkOworICAgIG8xLT5pcEluQ2tzdW1FcnJzICs9IG8yLT5pcEluQ2tzdW1FcnJzOworICAgIG8xLT50Y3BJbkVycnMgKz0gbzItPnRjcEluRXJyczsKKyAgICBvMS0+dWRwTm9Qb3J0cyArPSBvMi0+dWRwTm9Qb3J0czsKK30KKworLyoKKyAqIEByZXR2YWwgMCBlbnRyeSB3YXMgc3VjY2Vzc2Z1bGx5IGluc2VydGVkIGluIHRoZSBjb250YWluZXIgCisgKiBAcmV0dmFsIC0xIGNvbnRhaW5lciBlcnJvcgorICogQHJldHZhbCAtMiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorICovCitzdGF0aWMgaW50IAorX2luc2VydF9lbnRyeShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKmlwZSkKK3sKKyAgICBpbnQgaTsKKyAgICAKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplcCA9CisgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpcGUtPmlwSWZTdGF0c0lQVmVyc2lvbiwgMCwKKyAgICAgICAgICAgICAgICAiaXBTeXN0ZW1TdGF0c1RhYmxlIik7IAorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czphcmNoIiwgImluc2VydCBlbnRyeSBmb3IgdiVkXG4iLAorICAgICAgICAgICAgICAgIGlwZS0+aXBJZlN0YXRzSVBWZXJzaW9uKSk7IAorICAgIGlmIChlcCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczpzeXN0ZW1zdGF0czphcmNoIiwgImluc2VydCBmYWlsZWQgKGFsbG9jKSIpKTsKKyAgICAgICAgcmV0dXJuICgtMik7CisgICAgfQorCisgICAgZXAtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luUmVjZWl2ZXMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJblJlY2VpdmVzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ0luT2N0ZXRzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5PY3RldHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luT2N0ZXRzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDSW5PY3RldHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkluSGRyRXJyb3JzID0gaXBlLT5pcElmU3RhdHNJbkhkckVycm9yczsKKyAgICBlcC0+c3RhdHMuSW5BZGRyRXJyb3JzID0gaXBlLT5pcElmU3RhdHNJbkFkZHJFcnJvcnM7CisgICAgZXAtPnN0YXRzLkluVW5rbm93blByb3RvcyA9IGlwZS0+aXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zOworICAgIGVwLT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBpcGUtPmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0czsKKyAgICBlcC0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgPj4gMzI7CisgICAgZXAtPnN0YXRzLlJlYXNtUmVxZHMgPSBpcGUtPmlwSWZTdGF0c1JlYXNtUmVxZHM7IAorICAgIGVwLT5zdGF0cy5SZWFzbU9LcyA9IGlwZS0+aXBJZlN0YXRzUmVhc21PS3M7IAorICAgIGVwLT5zdGF0cy5SZWFzbUZhaWxzID0gaXBlLT5pcElmU3RhdHNSZWFzbUZhaWxzOyAKKyAgICBlcC0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwZS0+aXBJZlN0YXRzSW5EaXNjYXJkczsKKyAgICBlcC0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5EZWxpdmVycyAmIDB4ZmZmZmZmZmY7IAorICAgIGVwLT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5EZWxpdmVycyA+PiAzMjsgCisgICAgZXAtPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRSZXF1ZXN0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0UmVxdWVzdHMgPj4gMzI7IAorICAgIGVwLT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwZS0+aXBJZlN0YXRzT3V0Tm9Sb3V0ZXMgJiAweGZmZmZmZmZmOyAKKyAgICBlcC0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IGlwZS0+aXBJZlN0YXRzT3V0RGlzY2FyZHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSAwOyAKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwZS0+aXBJZlN0YXRzT3V0RnJhZ09LcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBlLT5pcElmU3RhdHNPdXRGcmFnRmFpbHMgJiAweGZmZmZmZmZmOyAKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IDA7CisgICAgZXAtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gaXBlLT5pcElmU3RhdHNPdXRGcmFnQ3JlYXRlcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IDA7CisgICAgZXAtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRUcmFuc21pdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRUcmFuc21pdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdyA9IGlwZS0+aXBJZlN0YXRzSENPdXRPY3RldHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ091dE9jdGV0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ091dE9jdGV0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3cgPSBpcGUtPmlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dE1jYXN0UGt0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93ID0gaXBlLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENJbkJjYXN0UGt0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ091dEJjYXN0UGt0cy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dEJjYXN0UGt0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzID4+IDMyOworCisgICAgZm9yIChpPTA7IGk8PUlQU1lTVEVNU1RBVFNUQUJMRV9MQVNUOyBpKyspCisgICAgICAgIGVwLT5zdGF0cy5jb2x1bW5BdmFpbFtpXSA9IDE7CisgICAgCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlcCkgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczpzeXN0ZW1zdGF0czphcmNoIiwgInVuYWJsZSB0byBpbnNlcnQgZW50cnkiKSk7IAorICAgICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVwKTsgCisgICAgICAgIHJldHVybiAoLTEpOworICAgIH0KKyAgICByZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExY2ExNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc3lzY3RsLmMKQEAgLTAsMCArMSw3OTEgQEAKKy8qCisgKiAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcElmU3RhdHNUYWJsZSBpbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CisKKyNpbmNsdWRlICIuLi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgiCisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2RlZmluZSBfS0VSTkVMIDEKKyNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKKyNlbmRpZgorI2lmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjaWYgSEFWRV9ORVRJTkVUNl9JUDZfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CisjZW5kaWYKKyNpZm5kZWYgZnJlZWJzZDcKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pbjZfdmFyLmg+CisjZW5kaWYKKworI2lmZGVmIGRhcndpbgorCisvKiBUaGlzIHN0cnVjdCBpcyBpbiBuZXRpbmV0Ni9pcDZfdmFyLmggd2hpY2ggQXBwbGUgZm9yIG9ic2N1cmUgcmVhc29ucworICogZG8gbm90IGRpc3RyaWJ1dGUgYXMgcGFydCBvZiAvdXNyL2luY2x1ZGUgOi0oCisgKi8KKworc3RydWN0CWlwNnN0YXQgeworCXVfcXVhZF90IGlwNnNfdG90YWw7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkICovCisJdV9xdWFkX3QgaXA2c190b29zaG9ydDsJCS8qIHBhY2tldCB0b28gc2hvcnQgKi8KKwl1X3F1YWRfdCBpcDZzX3Rvb3NtYWxsOwkJLyogbm90IGVub3VnaCBkYXRhICovCisJdV9xdWFkX3QgaXA2c19mcmFnbWVudHM7CS8qIGZyYWdtZW50cyByZWNlaXZlZCAqLworCXVfcXVhZF90IGlwNnNfZnJhZ2Ryb3BwZWQ7CS8qIGZyYWdzIGRyb3BwZWQoZHVwcywgb3V0IG9mIHNwYWNlKSAqLworCXVfcXVhZF90IGlwNnNfZnJhZ3RpbWVvdXQ7CS8qIGZyYWdtZW50cyB0aW1lZCBvdXQgKi8KKwl1X3F1YWRfdCBpcDZzX2ZyYWdvdmVyZmxvdzsJLyogZnJhZ21lbnRzIHRoYXQgZXhjZWVkZWQgbGltaXQgKi8KKwl1X3F1YWRfdCBpcDZzX2ZvcndhcmQ7CQkvKiBwYWNrZXRzIGZvcndhcmRlZCAqLworCXVfcXVhZF90IGlwNnNfY2FudGZvcndhcmQ7CS8qIHBhY2tldHMgcmN2ZCBmb3IgdW5yZWFjaGFibGUgZGVzdCAqLworCXVfcXVhZF90IGlwNnNfcmVkaXJlY3RzZW50OwkvKiBwYWNrZXRzIGZvcndhcmRlZCBvbiBzYW1lIG5ldCAqLworCXVfcXVhZF90IGlwNnNfZGVsaXZlcmVkOwkvKiBkYXRhZ3JhbXMgZGVsaXZlcmVkIHRvIHVwcGVyIGxldmVsKi8KKwl1X3F1YWRfdCBpcDZzX2xvY2Fsb3V0OwkJLyogdG90YWwgaXAgcGFja2V0cyBnZW5lcmF0ZWQgaGVyZSAqLworCXVfcXVhZF90IGlwNnNfb2Ryb3BwZWQ7CQkvKiBsb3N0IHBhY2tldHMgZHVlIHRvIG5vYnVmcywgZXRjLiAqLworCXVfcXVhZF90IGlwNnNfcmVhc3NlbWJsZWQ7CS8qIHRvdGFsIHBhY2tldHMgcmVhc3NlbWJsZWQgb2sgKi8KKwl1X3F1YWRfdCBpcDZzX2ZyYWdtZW50ZWQ7CS8qIGRhdGFncmFtcyBzdWNlc3NmdWxseSBmcmFnbWVudGVkICovCisJdV9xdWFkX3QgaXA2c19vZnJhZ21lbnRzOwkvKiBvdXRwdXQgZnJhZ21lbnRzIGNyZWF0ZWQgKi8KKwl1X3F1YWRfdCBpcDZzX2NhbnRmcmFnOwkJLyogZG9uJ3QgZnJhZ21lbnQgZmxhZyB3YXMgc2V0LCBldGMuICovCisJdV9xdWFkX3QgaXA2c19iYWRvcHRpb25zOwkvKiBlcnJvciBpbiBvcHRpb24gcHJvY2Vzc2luZyAqLworCXVfcXVhZF90IGlwNnNfbm9yb3V0ZTsJCS8qIHBhY2tldHMgZGlzY2FyZGVkIGR1ZSB0byBubyByb3V0ZSAqLworCXVfcXVhZF90IGlwNnNfYmFkdmVyczsJCS8qIGlwNiB2ZXJzaW9uICE9IDYgKi8KKwl1X3F1YWRfdCBpcDZzX3Jhd291dDsJCS8qIHRvdGFsIHJhdyBpcCBwYWNrZXRzIGdlbmVyYXRlZCAqLworCXVfcXVhZF90IGlwNnNfYmFkc2NvcGU7CQkvKiBzY29wZSBlcnJvciAqLworCXVfcXVhZF90IGlwNnNfbm90bWVtYmVyOwkvKiBkb24ndCBqb2luIHRoaXMgbXVsdGljYXN0IGdyb3VwICovCisJdV9xdWFkX3QgaXA2c19ueHRoaXN0WzI1Nl07CS8qIG5leHQgaGVhZGVyIGhpc3RvcnkgKi8KKwl1X3F1YWRfdCBpcDZzX20xOwkJLyogb25lIG1idWYgKi8KKwl1X3F1YWRfdCBpcDZzX20ybVszMl07CQkvKiB0d28gb3IgbW9yZSBtYnVmICovCisJdV9xdWFkX3QgaXA2c19tZXh0MTsJCS8qIG9uZSBleHQgbWJ1ZiAqLworCXVfcXVhZF90IGlwNnNfbWV4dDJtOwkJLyogdHdvIG9yIG1vcmUgZXh0IG1idWYgKi8KKwl1X3F1YWRfdCBpcDZzX2V4dGhkcnRvb2xvbmc7CS8qIGV4dCBoZHIgYXJlIG5vdCBjb250aW51b3VzICovCisJdV9xdWFkX3QgaXA2c19ub2dpZjsJCS8qIG5vIG1hdGNoIGdpZiBmb3VuZCAqLworCXVfcXVhZF90IGlwNnNfdG9vbWFueWhkcjsJLyogZGlzY2FyZGVkIGR1ZSB0byB0b28gbWFueSBoZWFkZXJzICovCisKKwkvKgorCSAqIHN0YXRpc3RpY3MgZm9yIGltcHJvdmVtZW50IG9mIHRoZSBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24KKwkgKiBhbGdvcml0aG06CisJICogWFhYOiBoYXJkY29kZWQgMTYgPSAjIG9mIGlwNiBtdWx0aWNhc3Qgc2NvcGUgdHlwZXMgKyAxCisJICovCisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYWRkcmVzcyBzZWxlY3Rpb24gZmFpbHMgKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfbm9uZTsKKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBhZGRyZXNzIG9uIHRoZSBvdXRnb2luZyBJL0YgaXMgY2hvc2VuICovCisJdV9xdWFkX3QgaXA2c19zb3VyY2VzX3NhbWVpZlsxNl07CisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gYWRkcmVzcyBvbiBhIG5vbi1vdXRnb2luZyBJL0YgaXMgY2hvc2VuICovCisJdV9xdWFkX3QgaXA2c19zb3VyY2VzX290aGVyaWZbMTZdOworCS8qCisJICogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gYWRkcmVzcyB0aGF0IGhhcyB0aGUgc2FtZSBzY29wZQorCSAqIGZyb20gdGhlIGRlc3RpbmF0aW9uIGlzIGNob3Nlbi4KKwkgKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfc2FtZXNjb3BlWzE2XTsKKwkvKgorCSAqIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGFkZHJlc3MgdGhhdCBoYXMgYSBkaWZmZXJlbnQgc2NvcGUKKwkgKiBmcm9tIHRoZSBkZXN0aW5hdGlvbiBpcyBjaG9zZW4uCisJICovCisJdV9xdWFkX3QgaXA2c19zb3VyY2VzX290aGVyc2NvcGVbMTZdOworCS8qIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGRlcHJlY2F0ZWQgYWRkcmVzcyBpcyBjaG9zZW4gKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfZGVwcmVjYXRlZFsxNl07CisKKwl1X3F1YWRfdCBpcDZzX2ZvcndhcmRfY2FjaGVoaXQ7CisJdV9xdWFkX3QgaXA2c19mb3J3YXJkX2NhY2hlbWlzczsKK307CisKKyNlbmRpZiAvKiBkYXJ3aW4qLworCitzdGF0aWMgaW50IF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKTsKKworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCitzdGF0aWMgaW50IF9zeXN0ZW1zdGF0c192NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG5jcHVzOworCit2b2lkCituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19hcmNoX2luaXQodm9pZCkKK3sKKyAgICBpbnQgICAgbmNwdV9taWJbXSAgPSB7IENUTF9IVywgSFdfTkNQVSB9OworICAgIHNpemVfdCBzaXogPSBzaXplb2YobmNwdXMpOworICAgIGlmIChzeXNjdGwobmNwdV9taWIsIDIsICZuY3B1cywgJnNpeiwgTlVMTCwgMCkgPCAwKSB7CisJc25tcF9sb2dfcGVycm9yKCJody5uY3B1Iik7CisgICAgICAgIG5jcHVzID0gMTsKKyAgICB9Cit9CisKKy8qCisgKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQKKyAqIEByZXR2YWwgLTIgY291bGQgbm90IG9wZW4gZmlsZQorICogQHJldHZhbCAtMyBjb3VsZCBub3QgY3JlYXRlIGVudHJ5IChwcm9iYWJseSBtYWxsb2MpCisgKiBAcmV0dmFsIC00IGZpbGUgZm9ybWF0IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmMxOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgaW50IHJjMjsKKyNlbmRpZgorCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3Nfc3lzdGVtc3RhdHNfXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIGxvYWQgdjQgYW5kIHY2IHN0YXRzLiBFdmVuIGlmIG9uZSBmYWlscywgdHJ5IHRoZSBvdGhlci4KKyAgICAgKiBJZiB0aGV5IGhhdmUgdGhlIHNhbWUgcmMsIHJldHVybiBpdC4gaWYgdGhlIGRpZmZlciwgcmV0dXJuCisgICAgICogdGhlIHNtYWxsZXIgb25lLiBObyBsb2cgbWVzc2FnZXMsIHNpbmNlIGVhY2ggaW5kaXZpZHVhbCBmdW5jdGlvbgorICAgICAqIHdvdWxkIGhhdmUgbG9nZ2VkIGl0cyBvd24gbWVzc2FnZS4KKyAgICAgKi8KKyAgICByYzEgPSBfc3lzdGVtc3RhdHNfdjQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIHJjMiA9IF9zeXN0ZW1zdGF0c192Nihjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIGlmICgocmMxID09IHJjMikgfHwgKHJjMSA8IHJjMikpCisgICAgICAgIHJldHVybiByYzE7CisgICAgICAgIAorICAgIHJldHVybiByYzI7CisjZWxzZQorICAgIHJldHVybiByYzE7CisjZW5kaWYKK30KKworLyoKKyAqIEJhc2VkIG9uIGxvYWRfZmxhZ3MsIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlIG9yIGlwSWZTdGF0c1RhYmxlIGZvciBpcHY0IGVudHJpZXMuIAorICovCisjaWZkZWYgX19OZXRCU0RfXworCitzdGF0aWMgaW50Citfc3lzdGVtc3RhdHNfdjQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdWludDY0X3QgaXBzdGF0W0lQX05TVEFUU107CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZihpcHN0YXQpOworCisgICAgaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuaXAuc3RhdHMiLCAmaXBzdGF0LCAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwlORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJDYW5ub3Qgc3lzY3RsYnluYW1lIG5ldC5pbmV0LmlwLnN0YXRzXG4iKSk7CisJcmV0dXJuIC0yOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXgpXG4iLAorICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLworCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogd2UgZG8gbm90IHN1cHBvcnQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMSwgMCwKKwkJImlwU3lzdGVtU3RhdHNUYWJsZS5pcHY0Iik7CisgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworCXNubXBfbG9nKExPR19FUlIsICJzeXN0ZW1zdGF0c192NDogY2Fubm90IGNyZWF0ZSBlbnRyeVxuIik7CisJbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLAorCQkJCQkJICBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19GUkVFX05PRkxBR1MpOworCXJldHVybiAtMzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9LIC0gd2UndmUgbm93IGdvdCAob3IgY3JlYXRlZCkgdGhlIGRhdGEgc3RydWN0dXJlIGZvcgorICAgICAqICAgICAgdGhpcyBzeXN0ZW1zdGF0cywgaW5jbHVkaW5nIGFueSAic3RhdGljIiBpbmZvcm1hdGlvbi4KKyAgICAgKiBOb3cgcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKGkuZS4gc3RhcnRpbmcgZnJvbSAnc3RhdHMnKQorICAgICAqICAgICAgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgc3RhdGlzdGljcywgYW5kIHBvcHVsYXRlCisgICAgICogICAgICBkYXRhIHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgKi8KKworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93ID0gaXBzdGF0W0lQX1NUQVRfVE9UQUxdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9UT1RBTF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gaXBzdGF0W0lQX1NUQVRfQkFEU1VNXQorCQkgICAgKyBpcHN0YXRbSVBfU1RBVF9UT09TSE9SVF0gKyBpcHN0YXRbSVBfU1RBVF9UT09TTUFMTF0KKwkgICAgICAgICAgICArIGlwc3RhdFtJUF9TVEFUX0JBREhMRU5dICsgaXBzdGF0W0lQX1NUQVRfQkFETEVOXTsKKyAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gaXBzdGF0W0lQX1NUQVRfQ0FOVEZPUldBUkRdOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gaXBzdGF0W0lQX1NUQVRfRk9SV0FSRF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX0ZPUldBUkRdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBpcHN0YXRbSVBfU1RBVF9OT1BST1RPXTsKKyAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwc3RhdFtJUF9TVEFUX0ZSQUdEUk9QUEVEXTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX0RFTElWRVJFRF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX0RFTElWRVJFRF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gaXBzdGF0W0lQX1NUQVRfTE9DQUxPVVRdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfTE9DQUxPVVRdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX09EUk9QUEVEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX09EUk9QUEVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9OT0dJRl0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9OT0dJRl0gPj4gMzI7CisgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KKyAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IGlwc3RhdFtJUF9TVEFUX0ZSQUdNRU5UU107CisgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gaXBzdGF0W0lQX1NUQVRfUkVBU1NFTUJMRURdOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbUZhaWxzID0gaXBzdGF0W0lQX1NUQVRfRlJBR0RST1BQRURdCisJCSAgICArIGlwc3RhdFtJUF9TVEFUX0ZSQUdUSU1FT1VUXTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX0ZSQUdNRU5UU10gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX0ZSQUdNRU5UU10gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX0NBTlRGUkFHXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9DQU5URlJBR10gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gaXBzdGF0W0lQX1NUQVRfT0ZSQUdNRU5UU10gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9PRlJBR01FTlRTXSA+PiAzMjsKKworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUVdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFXSA9IDE7CisKKyAgICAvKgorICAgICAqIGFkZCB0byBjb250YWluZXIKKyAgICAgKi8KKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApCisgICAgeworCXNubXBfbG9nKExPR19FUlIsICJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX3Y0OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIik7CisJbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShlbnRyeSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisKK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHVpbnQ2NF90IGlwc3RhdFtJUDZfTlNUQVRTXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGlwc3RhdCk7CisKKyAgICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldDYuaXA2LnN0YXRzIiwgJmlwc3RhdCwgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiQ2Fubm90IHN5c2N0bGJ5bmFtZSBuZXQuaW5ldDYuaXA2LnN0YXRzXG4iKSk7CisJcmV0dXJuIC0yOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NiAoZmxhZ3MgJXgpXG4iLAorICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLworCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgMCwKKwkJImlwU3lzdGVtU3RhdHNUYWJsZS5pcHY2Iik7CisgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworCXNubXBfbG9nKExPR19FUlIsICJzeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzOiBjYW5ub3QgY3JlYXRlIGVudHJ5XG4iKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisJCQkJCQkgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfTk9GTEFHUyk7CisJcmV0dXJuIC0zOworICAgIH0KKworICAgIC8qCisgICAgICogT0sgLSB3ZSd2ZSBub3cgZ290IChvciBjcmVhdGVkKSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCisgICAgICogICAgICB0aGlzIHN5c3RlbXN0YXRzLCBpbmNsdWRpbmcgYW55ICJzdGF0aWMiIGluZm9ybWF0aW9uLgorICAgICAqLworCisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfVE9UQUxdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfVE9UQUxdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IGlwc3RhdFtJUDZfU1RBVF9CQURPUFRJT05TXQorCQkgICAgKyBpcHN0YXRbSVA2X1NUQVRfVE9PU0hPUlRdICsgaXBzdGF0W0lQNl9TVEFUX1RPT1NNQUxMXQorCQkgICAgKyBpcHN0YXRbSVA2X1NUQVRfVE9PTUFOWUhEUl0gKyBpcHN0YXRbSVA2X1NUQVRfRVhUSERSVE9PTE9OR107CisgICAgZW50cnktPnN0YXRzLkluQWRkckVycm9ycyA9IGlwc3RhdFtJUDZfU1RBVF9DQU5URk9SV0FSRF07CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfRk9SV0FSRF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9GT1JXQVJEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHRFJPUFBFRF07CisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfREVMSVZFUkVEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0RFTElWRVJFRF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gaXBzdGF0W0lQNl9TVEFUX0xPQ0FMT1VUXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9MT0NBTE9VVF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBzdGF0W0lQNl9TVEFUX09EUk9QUEVEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9PRFJPUFBFRF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gaXBzdGF0W0lQNl9TVEFUX05PR0lGXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9OT0dJRl0gPj4gMzI7CisgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KKyAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHTUVOVFNdOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbU9LcyA9IGlwc3RhdFtJUDZfU1RBVF9SRUFTU0VNQkxFRF07CisgICAgZW50cnktPnN0YXRzLlJlYXNtRmFpbHMgPSBpcHN0YXRbSVA2X1NUQVRfRlJBR0RST1BQRURdCisJCSAgICArIGlwc3RhdFtJUDZfU1RBVF9GUkFHVElNRU9VVF07CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0ZSQUdNRU5UU10gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9DQU5URlJBR10gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0NBTlRGUkFHXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfT0ZSQUdNRU5UU10gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfT0ZSQUdNRU5UU10gPj4gMzI7CisKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIC8qCisgICAgICogYWRkIHRvIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkKKyAgICB7CisJc25tcF9sb2coTE9HX0VSUiwgInN5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHM6IGNhbm5vdCBpbnNlcnQgZW50cnlcbiIpOworCURFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBzeXN0ZW1zdGF0c19lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisvKgorICogbG9hZCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzCisgKi8KK3N0YXRpYyBpbnQgCitfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc3RydWN0IGlmX25hbWVpbmRleCAqaWZzID0gaWZfbmFtZWluZGV4KCk7CisgICAgaW50IGl4OworICAgIGludCByYyA9IDA7CisKKyAgICBmb3IgKGl4ID0gMDsgaWZzW2l4XS5pZl9pbmRleDsgaXgrKykgeworCXN0cnVjdCBpbjZfaWZzdGF0ICppZnM2OworCXN0cnVjdCBpbjZfaWZyZXEgaWZyOworCWludCBzOworCisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZzW2l4XS5pZl9uYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKS0xKTsKKwlpZiAoKHMgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKKwkgICAgcmMgPSAtMTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChpb2N0bChzLCBTSU9DR0lGU1RBVF9JTjYsIChjYWRkcl90KSZpZnIpIDwgMCkgeworCSAgICByYyA9IC0yOworCSAgICBjbG9zZShzKTsKKwkgICAgYnJlYWs7CisJfQorCWNsb3NlKHMpOworCWlmczYgPSAmaWZyLmlmcl9pZnJ1LmlmcnVfc3RhdDsKKyAgICB9CisgICAgaWZfZnJlZW5hbWVpbmRleChpZnMpOworICAgIHJldHVybiByYzsKK30KKyNlbmRpZgorCisjZWxzZQorCitzdGF0aWMgaW50Citfc3lzdGVtc3RhdHNfdjQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisjaWZkZWYgX19EcmFnb25GbHlfXworICAgIHNpemVfdCBsZW4gPSBuY3B1cypzaXplb2Yoc3RydWN0IGlwX3N0YXRzKTsKKyAgICBzdHJ1Y3QgaXBfc3RhdHMgKmlwc3RhdCA9IG1hbGxvYyhsZW4pOworICAgIGludCBjOworI2Vsc2UKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBpcHN0YXQpOworICAgIHN0cnVjdCBpcHN0YXQgKmlwc3RhdCA9IG1hbGxvYyhsZW4pOworI2VuZGlmCisgICAgaW50IG1pYltdID0geyBDVExfTkVULCBQRl9JTkVULCBJUFBST1RPX0lQLCBJUENUTF9TVEFUUyB9OworCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSksIGlwc3RhdCwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKwlzbm1wX2xvZ19wZXJyb3IoIkNhbm5vdCBzeXNjdGxieW5hbWUgbmV0LmluZXQuaXAuc3RhdHMiKTsKKwlmcmVlKGlwc3RhdCk7CisJcmV0dXJuIC0yOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXgpXG4iLAorICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLworCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogd2UgZG8gbm90IHN1cHBvcnQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgKi8KKwlmcmVlKGlwc3RhdCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDEsIDAsCisJCSJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NCIpOworICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisJCQkJCQkgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfTk9GTEFHUyk7CisJZnJlZShpcHN0YXQpOworCXJldHVybiAtMzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9LIC0gd2UndmUgbm93IGdvdCAob3IgY3JlYXRlZCkgdGhlIGRhdGEgc3RydWN0dXJlIGZvcgorICAgICAqICAgICAgdGhpcyBzeXN0ZW1zdGF0cywgaW5jbHVkaW5nIGFueSAic3RhdGljIiBpbmZvcm1hdGlvbi4KKyAgICAgKiBOb3cgcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKGkuZS4gc3RhcnRpbmcgZnJvbSAnc3RhdHMnKQorICAgICAqICAgICAgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgc3RhdGlzdGljcywgYW5kIHBvcHVsYXRlCisgICAgICogICAgICBkYXRhIHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgKi8KKworI2lmZGVmIGRyYWdvbmZseQorICAgIGZvciAoYyA9IDE7IGMgPCBuY3B1czsgYysrKSB7CisJaW50IGksIG4gPSBzaXplb2Yoc3RydWN0IGlwX3N0YXRzKS9zaXplb2YodV9sb25nKTsKKwl1X2xvbmcgKnVwID0gKHVfbG9uZyAqKWlwc3RhdDsKKwl1X2xvbmcgKmNwID0gKHVfbG9uZyAqKShpcHN0YXQrYyk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICAqdXAgKz0gKmNwOworCSAgICB1cCsrOworCSAgICBjcCsrOworCX0KKyAgICB9CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IGlwc3RhdC0+aXBzX3RvdGFsICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gaXBzdGF0LT5pcHNfdG90YWwgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcHN0YXQtPmlwc19iYWRzdW0gKyBpcHN0YXQtPmlwc190b29zaG9ydAorCQkgICAgICAgICAgICArIGlwc3RhdC0+aXBzX3Rvb3NtYWxsICsgaXBzdGF0LT5pcHNfYmFkaGxlbgorCQkJICAgICsgaXBzdGF0LT5pcHNfYmFkbGVuOworICAgIGVudHJ5LT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBpcHN0YXQtPmlwc19jYW50Zm9yd2FyZDsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IGlwc3RhdC0+aXBzX2ZvcndhcmQgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBpcHN0YXQtPmlwc19mb3J3YXJkID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkluVW5rbm93blByb3RvcyA9IGlwc3RhdC0+aXBzX25vcHJvdG87CisgICAgZW50cnktPnN0YXRzLkluRGlzY2FyZHMgPSBpcHN0YXQtPmlwc19mcmFnZHJvcHBlZDsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IGlwc3RhdC0+aXBzX2RlbGl2ZXJlZCAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IGlwc3RhdC0+aXBzX2RlbGl2ZXJlZCA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdyA9IGlwc3RhdC0+aXBzX2xvY2Fsb3V0ICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IGlwc3RhdC0+aXBzX2xvY2Fsb3V0ID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBzdGF0LT5pcHNfb2Ryb3BwZWQgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gaXBzdGF0LT5pcHNfb2Ryb3BwZWQgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5sb3cgPSBpcHN0YXQtPmlwc19ub2dpZiAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBpcHN0YXQtPmlwc19ub2dpZiA+PiAzMjsKKyNlbmRpZgorICAgIC8qIGVudHJ5LT5zdGF0cy4gPSBzY2FuX3ZhbHNbMTJdOyAvICogUmVhc21UaW1lb3V0ICovCisgICAgZW50cnktPnN0YXRzLlJlYXNtUmVxZHMgPSBpcHN0YXQtPmlwc19mcmFnbWVudHM7CisgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gaXBzdGF0LT5pcHNfcmVhc3NlbWJsZWQ7CisgICAgZW50cnktPnN0YXRzLlJlYXNtRmFpbHMgPSBpcHN0YXQtPmlwc19mcmFnZHJvcHBlZCArIGlwc3RhdC0+aXBzX2ZyYWd0aW1lb3V0OworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gaXBzdGF0LT5pcHNfZnJhZ21lbnRzICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gaXBzdGF0LT5pcHNfZnJhZ21lbnRzID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmxvdyA9IGlwc3RhdC0+aXBzX2NhbnRmcmFnICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBpcHN0YXQtPmlwc19jYW50ZnJhZyA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IGlwc3RhdC0+aXBzX29mcmFnbWVudHMgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5oaWdoID0gaXBzdGF0LT5pcHNfb2ZyYWdtZW50cyA+PiAzMjsKKyNlbmRpZgorCisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIC8qCisgICAgICogYWRkIHRvIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkKKyAgICB7CisJREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworICAgIGZyZWUoaXBzdGF0KTsKKyAgICByZXR1cm4gMDsKK30KKworCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworLyoKKyAqIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc3RydWN0IGlwNnN0YXQgaXA2c3RhdDsKKyAgICBpbnQgbWliW10gPSB7IENUTF9ORVQsIEFGX0lORVQ2LCBJUFBST1RPX0lQVjYsIElQVjZDVExfU1RBVFMgfTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGlwNnN0YXQpOworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKworICAgIGlmIChzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZihtaWJbMF0pLCAmaXA2c3RhdCwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKyAgCU5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIkNhbm5vdCBzeXNjdGwoQ1RMX05FVCwgQUZfSU5FVDYsIElQUFJPVE9fSVBWNiwgSVBWNkNUTF9TVEFUUylcbiIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDIsIDAsCisgICAgICAgICAgICAiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjYiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTM7CisgICAgCisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3cgPSBpcDZzdGF0LmlwNnNfdG90YWwgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwNnN0YXQuaXA2c190b3RhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10gPSAxOworICAgIC8qCisgICAgZW50cnktPnN0YXRzLkhDSW5PY3RldHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luT2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCAgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSA9IDE7CisgICAgKi8KKyAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcDZzdGF0LmlwNnNfYmFkb3B0aW9ucyArIGlwNnN0YXQuaXA2c190b29zaG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGlwNnN0YXQuaXA2c190b29zbWFsbCArIGlwNnN0YXQuaXA2c19iYWR2ZXJzCisJCQkgICAgICsgaXA2c3RhdC5pcDZzX3Rvb21hbnloZHI7CisjaWYgSEFWRV9TVFJVQ1RfSVA2U1RBVF9JUDZTX0VYVEhEUlRPT0xPTkcKKyAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgKz0gaXA2c3RhdC5pcDZzX2V4dGhkcnRvb2xvbmc7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDSW5Ob1JvdXRlcy5sb3cgPSBpcDZzdGF0LmlwNnNfY2FudGZvcndhcmQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXMuaGlnaCA9IGlwNnN0YXQuaXA2c19jYW50Zm9yd2FyZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10gPSAxOworICAgIC8qCisgICAgZW50cnktPnN0YXRzLmluQWRkckVycm9ycyA9IDA7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gc2Nhbl92YWw7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSW5UcnVuY2F0ZWRQa3RzID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUU10gPSAxOworICAgICovCisgICAgZW50cnktPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdyA9IGlwNnN0YXQuaXA2c19mb3J3YXJkICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMuaGlnaCA9IGlwNnN0YXQuaXA2c19mb3J3YXJkID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IGlwNnN0YXQuaXA2c19mcmFnbWVudHM7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gaXA2c3RhdC5pcDZzX3JlYXNzZW1ibGVkOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IGlwNnN0YXQuaXA2c19mcmFnZHJvcHBlZCArIGlwNnN0YXQuaXA2c19mcmFndGltZW91dDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwNnN0YXQuaXA2c19mcmFnZHJvcHBlZDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IGlwNnN0YXQuaXA2c19kZWxpdmVyZWQgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfZGVsaXZlcmVkID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gaXA2c3RhdC5pcDZzX2xvY2Fsb3V0ICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXA2c3RhdC5pcDZzX2xvY2Fsb3V0ID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwNnN0YXQuaXA2c19ub3JvdXRlICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gaXA2c3RhdC5pcDZzX25vcm91dGUgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBpcDZzdGF0LmlwNnNfZm9yd2FyZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gaXA2c3RhdC5pcDZzX2ZvcndhcmQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3cgPSBpcDZzdGF0LmlwNnNfb2Ryb3BwZWQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfb2Ryb3BwZWQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLmxvdyA9IChpcDZzdGF0LmlwNnNfZnJhZ21lbnRlZCArIGlwNnN0YXQuaXA2c19jYW50ZnJhZykgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcy5oaWdoID0gKGlwNnN0YXQuaXA2c19mcmFnbWVudGVkICsgaXA2c3RhdC5pcDZzX2NhbnRmcmFnKSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3cgPSBpcDZzdGF0LmlwNnNfZnJhZ21lbnRlZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gaXA2c3RhdC5pcDZzX2ZyYWdtZW50ZWQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXA2c3RhdC5pcDZzX2NhbnRmcmFnICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IGlwNnN0YXQuaXA2c19jYW50ZnJhZyA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gaXA2c3RhdC5pcDZzX29mcmFnbWVudHMgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfb2ZyYWdtZW50cyA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICAvKgorICAgIGVudHJ5LT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkJjYXN0UGt0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUQkNBU1RQS1RTXSA9IDE7CisgICAgKi8KKworICAgIC8qCisgICAgICogYWRkIHRvIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworCURFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBzeXN0ZW1zdGF0c19lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworI2RlZmluZSBERVZfU05NUDZfRElSTkFNRSAgICIvcHJvYy9uZXQvZGV2X3NubXA2IgorI2RlZmluZSBJRklOREVYX0xJTkUgICAgICAgICJpZkluZGV4IgorI2RlZmluZSBERVZfRklMRU5BTUVfTEVOICAgIDY0CisKKy8qCisgKiBsb2FkIGlwSWZTdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX2lmc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAqZGV2X3NubXA2X2RpcjsKKyAgICBzdHJ1Y3QgZGlyZW50ICAqZGV2X3NubXA2X2VudHJ5OworICAgIGNoYXIgICAgICAgICAgIGRldl9maWxlbmFtZVtERVZfRklMRU5BTUVfTEVOXTsKKyAgICBGSUxFICAgICAgICAgICAqZGV2aW47CisgICAgY2hhciAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICBjaGFyICAgICAgICAgICAqc3RhcnQgPSBsaW5lOworICAgIGludCAgICAgICAgICAgIHJjOworICAgIGNoYXIgICAgICAgICAgICpzY2FuX3N0cjsKKyAgICB1aW50bWF4X3QgICAgICAgc2Nhbl92YWw7CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworICAgICAgICAgICAgCisgICAgLyoKKyAgICAgKiB0cnkgdG8gb3BlbiAvcHJvYy9uZXQvZGV2X3NubXA2IGRpcmVjdG9yeS4gSWYgd2UgY2FuJ3QsIHRoYXQnIG9rIC0KKyAgICAgKiBtYXliZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHJ1bm5pbmcga2VybmVsLgorICAgICAqLworICAgIGlmICgoZGV2X3NubXA2X2RpciA9IG9wZW5kaXIoREVWX1NOTVA2X0RJUk5BTUUpKSA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aWZzdGF0cyIsCisgICAgICAgICJGYWlsZWQgdG8gbG9hZCBJUHY2IElmU3RhdHMgVGFibGUgKGxpbnV4KVxuIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBSZWFkIGVhY2ggcGVyIGludGVyZmFjZSBzdGF0aXN0aWNzIHByb2MgZmlsZQorICAgICAqLworICAgIHJjID0gMDsKKyAgICB3aGlsZSAoKGRldl9zbm1wNl9lbnRyeSA9IHJlYWRkaXIoZGV2X3NubXA2X2RpcikpICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lWzBdID09ICcuJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBpZiAoc25wcmludGYoZGV2X2ZpbGVuYW1lLCBERVZfRklMRU5BTUVfTEVOLCAiJXMvJXMiLCBERVZfU05NUDZfRElSTkFNRSwKKyAgICAgICAgICAgICAgICBkZXZfc25tcDZfZW50cnktPmRfbmFtZSkgPiBERVZfRklMRU5BTUVfTEVOKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiSW50ZXJmYWNlIG5hbWUgJXMgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgIGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChOVUxMID09IChkZXZpbiA9IGZvcGVuKGRldl9maWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIElmIGEgc3RhdCBmaWxlIG5hbWUgaXMgbWFkZSBvZiBkaWdpdHMsIHRoZSBuYW1lIGlzIGludGVyZmFjZSBpbmRleC4KKyAgICAgICAgICogSWYgaXQgaXMgYW4gaW50ZXJmYWNlIG5hbWUsIHRoZSBmaWxlIGluY2x1ZGVzIGEgbGluZSBsYWJlbGVkIGlmSW5kZXguCisgICAgICAgICAqLworICAgICAgICBpZiAoaXNkaWdpdChkZXZfc25tcDZfZW50cnktPmRfbmFtZVswXSkpIHsKKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoZGV2X3NubXA2X2VudHJ5LT5kX25hbWUsIE5VTEwsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKE5VTEwgPT0gKHN0YXJ0ID0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXZpbikpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBhbnkgbGluZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBpZiAoMCAhPSBzdHJuY21wKHN0YXJ0LCBJRklOREVYX0xJTkUsIDcpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBpZkluZGV4IGxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzY2FuX3N0ciA9IHN0cnJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHNjYW5fc3RyKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGlzIHdyb25nIGZvcm1hdCIsIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoc2Nhbl9zdHIsIE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgyLCBzY2FuX3ZhbCwKKyAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGUuaXB2NiIpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qIF9zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUoZW50cnksIGRldmluKTsgKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworI2VuZGlmCisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisvKgorICogQmFzZWQgb24gbG9hZF9mbGFncywgbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgb3IgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcy4gCisgKi8KK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NiAoZmxhZ3MgJXUpXG4iLAorICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLworCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogbG9hZCBpcElmU3RhdHNUYWJsZSAqLworICAgICAgICByZXR1cm4gX3N5c3RlbXN0YXRzX3Y2X2xvYWRfaWZzdGF0cyhjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9zeXN0ZW1zdGF0cyhjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIH0KK30KKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMKaW5kZXggNjVhYThlMy4uYWFhZTJlMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkW10gPSB7IElORVRORVRUT01FRElBVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9vaWRbXSA9IHsgSU5FVE5FVFRPTUVESUFUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaW5ldE5ldFRvTWVkaWFUYWJsZV9vaWQpOwogCiBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbiBpbmV0TmV0VG9NZWRpYVRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTE1OSwxMCArMTU5LDEwIEBACiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aW5ldE5ldFRvTWVkaWFUYWJsZTppbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7Ci0KICAgICAvKgogICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGluZXROZXRUb01lZGlhVGFibGUgcm93cmVxIGNsZWFudXAuCiAgICAgICovCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgtPmRhdGEpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLwogCiAvKioKQEAgLTUzNiwxMSArNTM2LDcgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5ldE5ldFRvTWVkaWFMYXN0VXBkYXRlZCBkYXRhLgogICAgICAqIGNvcHkgKCogaW5ldE5ldFRvTWVkaWFMYXN0VXBkYXRlZF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCi0gICAgLyoKLSAgICAgKiB4eHgtcmtzOiBnZXQgdGhpcyB2YWx1ZT8KLSAgICAgKi8KLSAgICByZXR1cm4gTUZEX1NLSVA7Ci0KKyAgICAqaW5ldE5ldFRvTWVkaWFMYXN0VXBkYXRlZF92YWxfcHRyID0gcm93cmVxX2N0eC0+ZGF0YS0+YXJwX2xhc3RfdXBkYXRlZDsKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhTGFzdFVwZGF0ZWRfZ2V0ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAppbmRleCA3ZjNmY2UyLi43M2FmYWU2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oCkBAIC0yMDAsOCArMjAwLDggQEAKICAgICAgICAgKiBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaW5ldE5ldFRvTWVkaWFUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjUwLDEyICsyNTAsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVN0YXRlX3ZhbF9wdHIpOworCiAgICAgaW50CiAgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX2dldChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVJvd1N0YXR1c192YWxfcHRyKTsKIAorICAgIGludAorICAgICAgICBpbmV0TmV0VG9NZWRpYVJvd1N0YXR1c19zZXQoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX3ZhbCk7CisKIAogICAgIGludAogICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCA4MTk0NTM0Li4xZWM4Y2M2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC04LDYgKzgsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMTksNiArMjAsOSBAQAogCiAjaW5jbHVkZSAiaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlmbykKK3N0YXRpYyBuZXRzbm1wX2FycF9hY2Nlc3MgKiBhcnBfYWNjZXNzID0gTlVMTDsKKwogLyoqIEBpbmdyb3VwIGludGVyZmFjZSAKICAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQogICoKQEAgLTcxLDYgKzc1LDEyMyBAQAogICovCiAKIC8qKgorICogY2hlY2sgZW50cnkgZm9yIHVwZGF0ZQorICovCitzdGF0aWMgdm9pZAorX2FkZF9vcl91cGRhdGVfYXJwX2VudHJ5KG5ldHNubXBfYXJwX2VudHJ5ICphcnBfZW50cnksCisgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCAqb2xkOworICAgIGludCAgICAgICAgICAgICBpbmV0QWRkcmVzc1R5cGU7CisKKyAgICBERUJVR1RSQUNFOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBhcnBfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogY29udmVydCB0aGUgYWRkciBsZW4gdG8gYW4gaW5ldEFkZHJlc3NUeXBlCisgICAgICovCisgICAgc3dpdGNoIChhcnBfZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKSB7CisgICAgY2FzZSA0OgorICAgICAgICBpbmV0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE2OgorICAgICAgICBpbmV0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW5ldE5ldFRvTWVkaWFUYWJsZTpfYWRkX29yX3VwZGF0ZV9hcnBlbnRyeTogdW5zdXBwb3J0ZWQgYWRkcmVzcyB0eXBlLCBsZW4gPSAlZFxuIiwgYXJwX2VudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbik7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGFycF9lbnRyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIGFuIHJvdyBjb250ZXh0IGFuZCBzZXQgdGhlIGluZGV4KGVzKSwgdGhlbiB0cnkgdG8gZmluZCBpdCBpbgorICAgICAqIHRoZSBjYWNoZS4KKyAgICAgKi8KKyAgICByb3dyZXFfY3R4ID0gaW5ldE5ldFRvTWVkaWFUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGFycF9lbnRyeSwgTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCisgICAgICAgIChNRkRfU1VDQ0VTUyA9PSBpbmV0TmV0VG9NZWRpYVRhYmxlX2luZGV4ZXNfc2V0CisgICAgICAgICAocm93cmVxX2N0eCwgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgsIGluZXRBZGRyZXNzVHlwZSwKKyAgICAgICAgICAoY2hhciAqKSByb3dyZXFfY3R4LT5kYXRhLT5hcnBfaXBhZGRyZXNzLAorICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9pcGFkZHJlc3NfbGVuKSkpIHsKKworICAgICAgICAvKiB0cnkgdG8gZmluZCBvbGQgZW50cnkgKi8KKyAgICAgICAgb2xkID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgaWYgKGFycF9lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEUpIHsKKyAgICAgICAgICAgIC8qIGRlbGV0ZSBleGlzdGluZyBlbnRyeSAqLworICAgICAgICAgICAgaWYgKG9sZCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIG9sZCk7CisgICAgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgob2xkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UgaWYgKG9sZCAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiB0aGUgZW50cnkgaXMgYWxyZWFkeSB0aGVyZSwgdXBkYXRlIGl0ICovCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfdXBkYXRlKG9sZC0+ZGF0YSwgYXJwX2VudHJ5KTsKKyAgICAgICAgICAgIC8qIGRlbGV0ZSB0aGUgYXV4aWxpYXJ5IGNvbnRleHQgd2UgdXNlZCB0byBmaW5kIHRoZSBlbnRyeQorICAgICAgICAgICAgICogKHRoaXMgZGVsZXRlcyBhbHNvIGFycF9lbnRyeSkgKi8KKyAgICAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogY3JlYXRlIG5ldyBlbnRyeSBhbmQgYWRkIGl0IHRvIHRoZSBjYWNoZSovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5pbmV0TmV0VG9NZWRpYVJvd1N0YXR1cyA9IFJPV1NUQVRVU19BQ1RJVkU7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5hcnBfbGFzdF91cGRhdGVkID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaW5ldE5ldFRvTWVkaWFUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoYXJwX2VudHJ5KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkICBfYXJwX2hvb2tfdXBkYXRlKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzLCBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnkpCit7CisgICAgX2FkZF9vcl91cGRhdGVfYXJwX2VudHJ5KGVudHJ5LCBhY2Nlc3MtPm1hZ2ljKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGdlbmVyYXRpb247CisgICAgbmV0c25tcF9jb250YWluZXIgKnRvX2RlbGV0ZTsKK30gX2NvbGxlY3RfY3R4OworCisvKioKKyAqIFB1dCBhbGwgZW50cmllcyB3aXRoIG91dGRhdGVkIGdlbmVyYXRpb24gdG8gZGVsZXRpb24gbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK19jb2xsZWN0X2ludmFsaWRfYXJwX2N0eChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29sbGVjdF9jdHggKmNjdHgpCit7CisgICAgaWYgKGN0eC0+ZGF0YS0+Z2VuZXJhdGlvbiAhPSBjY3R4LT5nZW5lcmF0aW9uKQorICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNjdHgtPnRvX2RlbGV0ZSwgY3R4KTsKK30KKworc3RhdGljIHZvaWQgX2FycF9ob29rX2djKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBhY2Nlc3MtPm1hZ2ljOworICAgIF9jb2xsZWN0X2N0eCBjY3R4OworCisgICAgY2N0eC50b19kZWxldGUgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJsaWZvIik7CisgICAgY2N0eC5nZW5lcmF0aW9uID0gYWNjZXNzLT5nZW5lcmF0aW9uOworCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jb2xsZWN0X2ludmFsaWRfYXJwX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmNjdHgpOworCisgICAgd2hpbGUgKENPTlRBSU5FUl9TSVpFKGNjdHgudG9fZGVsZXRlKSkgeworICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKmN0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSVJTVChjY3R4LnRvX2RlbGV0ZSk7CisgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCBjdHgpOworICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChjdHgpOworICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGNjdHgudG9fZGVsZXRlLCBOVUxMKTsKKyAgICB9CisgICAgQ09OVEFJTkVSX0ZSRUUoY2N0eC50b19kZWxldGUpOworfQorCisvKioKICAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgogICoKICAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CkBAIC0xMjAsNzIgKzI0MSwxOSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaW5ldE5ldFRvTWVkaWFUYWJsZSBjYWNoZSBwcm9wZXJ0aWVzLgotICAgICAqCi0gICAgICogQWxzbyBmb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gc2V0IHBhcmFtZXRlcnMgZm9yIHRoZQotICAgICAqIGNhY2hlLiBEbyBub3QgY2hhbmdlIHRoZSBtYWdpYyBwb2ludGVyLCBhcyBpdCBpcyB1c2VkCi0gICAgICogYnkgdGhlIE1GRCBoZWxwZXIuIFRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBzZXQKLSAgICAgKiBjYWNoZS0+ZW5hYmxlZCB0byAwLgotICAgICAqLwotICAgIGNhY2hlLT50aW1lb3V0ID0gSU5FVE5FVFRPTUVESUFUQUJMRV9DQUNIRV9USU1FT1VUOyAvKiBzZWNvbmRzICovCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2luaXQgKi8KLQotLyoqCi0gKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCi0gKgotICovCi1zdGF0aWMgdm9pZAotX3NuYXJmX2FycF9lbnRyeShuZXRzbm1wX2FycF9lbnRyeSAqYXJwX2VudHJ5LAotICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQotewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKLSAgICBpbnQgICAgICAgICAgICAgaW5ldEFkZHJlc3NUeXBlOwotCi0gICAgREVCVUdUUkFDRTsKLQotICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYXJwX2VudHJ5KTsKLSAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7Ci0KLSAgICAvKgotICAgICAqIGNvbnZlcnQgdGhlIGFkZHIgbGVuIHRvIGFuIGluZXRBZGRyZXNzVHlwZQotICAgICAqLwotICAgIHN3aXRjaCAoYXJwX2VudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbikgewotICAgIGNhc2UgNDoKLSAgICAgICAgaW5ldEFkZHJlc3NUeXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSA2OgotICAgICAgICBpbmV0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShhcnBfZW50cnkpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5zdXBwb3J0ZWQgYWRkcmVzcyB0eXBlXG4iKTsKKyAgICBhcnBfYWNjZXNzID0gbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0FSUF9DUkVBVEVfTk9GTEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hcnBfaG9va191cGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXJwX2hvb2tfZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGUtPnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGUtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlLT5leHBpcmVkKTsKKyAgICBpZiAoYXJwX2FjY2VzcyA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gY3JlYXRlIGFycCBhY2Nlc3MgaW4gaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvKgotICAgICAqIGFsbG9jYXRlIGFuIHJvdyBjb250ZXh0IGFuZCBzZXQgdGhlIGluZGV4KGVzKSwgdGhlbiBhZGQgaXQgdG8KLSAgICAgKiB0aGUgY29udGFpbmVyCi0gICAgICovCi0gICAgcm93cmVxX2N0eCA9IGluZXROZXRUb01lZGlhVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChhcnBfZW50cnksIE5VTEwpOwotICAgIGlmICgoTlVMTCAhPSByb3dyZXFfY3R4KSAmJgotICAgICAgICAoTUZEX1NVQ0NFU1MgPT0gaW5ldE5ldFRvTWVkaWFUYWJsZV9pbmRleGVzX3NldAotICAgICAgICAgKHJvd3JlcV9jdHgsIHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4LCBpbmV0QWRkcmVzc1R5cGUsCi0gICAgICAgICAgKGNoYXIgKikgcm93cmVxX2N0eC0+ZGF0YS0+YXJwX2lwYWRkcmVzcywKLSAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5hcnBfaXBhZGRyZXNzX2xlbikpKSB7Ci0gICAgICAgIHJvd3JlcV9jdHgtPmluZXROZXRUb01lZGlhUm93U3RhdHVzID0gUk9XU1RBVFVTX0FDVElWRTsKLSAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyb3dyZXFfY3R4KSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICJpbmV0TmV0VG9NZWRpYVRhYmxlIGNhY2hlLlxuIik7Ci0gICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShhcnBfZW50cnkpOwotICAgIH0KLX0KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCiAvKioKICAqIGNvbnRhaW5lciBzaHV0ZG93bgpAQCAtMjA4LDEyICsyNzYsMTYgQEAKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppbmV0TmV0VG9NZWRpYVRhYmxlOmluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOwogCisgICAgaWYgKE5VTEwgIT0gYXJwX2FjY2VzcykgeworICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZGVsZXRlKGFycF9hY2Nlc3MpOworICAgICAgICBhcnBfYWNjZXNzID0gTlVMTDsKKyAgICB9CisKICAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAvKioKQEAgLTI1MiwzNyArMzI0LDExIEBACiBpbnQKIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKIHsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqYXJwX2NvbnRhaW5lcjsKLQogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jYWNoZV9sb2FkIiwgImNhbGxlZFxuIikpOwogCi0gICAgLyoKLSAgICAgKiBUT0RPOjM1MTpNOiB8LT4gTG9hZC91cGRhdGUgZGF0YSBpbiB0aGUgaW5ldE5ldFRvTWVkaWFUYWJsZSBjb250YWluZXIuCi0gICAgICogbG9vcCBvdmVyIHlvdXIgaW5ldE5ldFRvTWVkaWFUYWJsZSBkYXRhLCBhbGxvY2F0ZSBhIHJvd3JlcSBjb250ZXh0LAotICAgICAqIHNldCB0aGUgaW5kZXgoZXMpIFthbmQgZGF0YSwgb3B0aW9uYWxseV0gYW5kIGluc2VydCBpbnRvCi0gICAgICogdGhlIGNvbnRhaW5lci4KLSAgICAgKi8KLSAgICBhcnBfY29udGFpbmVyID0KLSAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9sb2FkKE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19BUlBfTE9BRF9OT0ZMQUdTKTsKLSAgICBpZiAoTlVMTCA9PSBhcnBfY29udGFpbmVyKQotICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOyAgICAgICAgLyogbXNnIGFscmVhZHkgbG9nZ2VkICovCi0KLSAgICAvKgotICAgICAqIHdlIGp1c3QgZ290IGEgZnJlc2ggY29weSBvZiBkYXRhLiBzbmFyZiBkYXRhCi0gICAgICovCi0gICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGFycF9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfc25hcmZfYXJwX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOwotCi0gICAgLyoKLSAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggZW50cnksIG9yIHJlbGVhc2VkIGl0LAotICAgICAqIHNvIHRoZSBhY2Nlc3MgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGNsZWFyIHRoZSBjb250YWluZXIuCi0gICAgICovCi0gICAgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9mcmVlKGFycF9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0RPTlRfQ0xFQVIpOwotCi0gICAgREVCVUdNU0dUKCgidmVyYm9zZTppbmV0TmV0VG9NZWRpYVRhYmxlOmluZXROZXRUb01lZGlhVGFibGVfY2FjaGVfbG9hZCIsICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgYXJwX2FjY2Vzcy0+bWFnaWMgPSBjb250YWluZXI7CisgICAgaWYgKG5ldHNubXBfYWNjZXNzX2FycF9sb2FkKGFycF9hY2Nlc3MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfbG9hZCAqLwpAQCAtMzA1LDYgKzM1MSwxMSBAQAogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKIAorICAgIGlmIChOVUxMICE9IGFycF9hY2Nlc3MpIHsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX3VubG9hZChhcnBfYWNjZXNzKTsKKyAgICAgICAgYXJwX2FjY2Vzcy0+bWFnaWMgPSBOVUxMOworICAgIH0KKwogICAgIC8qCiAgICAgICogVE9ETzozODA6TTogRnJlZSBpbmV0TmV0VG9NZWRpYVRhYmxlIGNvbnRhaW5lciBkYXRhLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggNDJlYmNjMC4uYzE4Njg5YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOSBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaXplLCBpbmV0TmV0VG9NZWRpYVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaW5ldE5ldFRvTWVkaWFUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfZ2V0LCBpbmV0TmV0VG9NZWRpYVRhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MiwxOSArOTYsMjMgQEAKICAgICAgICAgICAgICAgICBfaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2VfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaW5ldE5ldFRvTWVkaWFUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX1JFR0lTVFJBVElPTl9HRVQKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC51c2VyX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZykKQEAgLTEwNCwxMiArMTIyLDE1IEBACiAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGluZXROZXRUb01lZGlhVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIHVfaW50CiBpbmV0TmV0VG9NZWRpYVRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTMzLDcgKzE1NCw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfb2JqZWN0X2xvb2t1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV91bmRvX3NldHVwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTQ5LDcgKzE3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciwgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKICAgICAgICAgICAgICAgICBfaW5ldE5ldFRvTWVkaWFUYWJsZV9jaGVja19pbmRleGVzKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqCkBAIC0xOTIsNyArMjEzLDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSU5FVE5FVFRPTUVESUFUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSU5FVE5FVFRPTUVESUFUQUJMRV9NQVhfQ09MOwpAQCAtMjMyLDcgKzI1Myw3IEBACiAgICAgICAgIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9wb3N0X3JlcXVlc3Q7CiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI1Nyw3ICsyNzgsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTI5Myw3ICszMTQsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzE2LDcgKzMzNyw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC02OTAsNyArNzExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC03MzUsNiArNzU2LDcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3Bvc3RfcmVxdWVzdCAqLwogCisKIC8qKgogICogQGludGVybmFsCiAgKiB3cmFwcGVyCkBAIC04MDgsNyArODMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtOTQ2LDcgKzk2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMDk2LDcgKzExMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4LCByb3dyZXFfY3R4KTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2luZXROZXRUb01lZGlhVGFibGVfY2hlY2tfaW5kZXhlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMjU3LDcgKzEyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTEzMDUsNyArMTMyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLCAiY2FsbGVkXG4iKSk7CiAKQEAgLTEzOTEsNyArMTQxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTQ1Niw3ICsxNDc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTU2Miw3ICsxNTg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTYxMCw3ICsxNjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldE5ldFRvTWVkaWFUYWJsZTpfbWZkX2luZXROZXRUb01lZGlhVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTY0NCw3ICsxNjY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE3MzgsNyArMTc2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTc5Myw3ICsxODE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywgbmV0c25tcF9yZXF1ZXN0X2luZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldE5ldFRvTWVkaWFUYWJsZTpfbWZkX2luZXROZXRUb01lZGlhVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE4MjAsNyArMTg0Miw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTk0Niw5ICsxOTY4LDEyIEBACiAgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CiAKICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7Ci0gICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQogICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiaW5ldE5ldFRvTWVkaWFUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICAgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpbmV0TmV0VG9NZWRpYVRhYmxlIik7CisgICAgfQogICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgaW4gIgogICAgICAgICAgICAgICAgICAiaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CkBAIC0xOTc2LDYgKzIwMDEsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqCiBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpbmV0TmV0VG9NZWRpYVRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQpAQCAtMTk5OCw4ICsyMDI0LDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMKaW5kZXggMTZlMjIwMC4uZjRiYjA4NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgImlwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkW10gPSB7IElQQUREUkVTU1BSRUZJWFRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRbXSA9IHsgSVBBRERSRVNTUFJFRklYVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWQpOwogCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gaXBBZGRyZXNzUHJlZml4VGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBBZGRyZXNzUHJlZml4SWZJbmRleF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhUeXBlX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHJfbGVuLApAQCAtMzE4LDcgKzMxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhUeXBlX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzUHJlZml4TGVuZ3RoX3ZhbCkKIHsKQEAgLTM5NSwxMCArMzk1LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBBZGRyZXNzUHJlZml4T3JpZ2luIGRhdGEuCiAgICAgICogY29weSAoKiBpcEFkZHJlc3NQcmVmaXhPcmlnaW5fdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLwotICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pcEFkZHJlc3NQcmVmaXhPcmlnaW47Ci0KLSAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CisgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW5fdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeE9yaWdpbjsKKyAgICAKKyAgICAgICAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcEFkZHJlc3NQcmVmaXhPcmlnaW5fZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTQsNyArNTkzLDcgQEAKICAgICAgKiBjb3B5ICgqIGlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KICAgICBpZiAoSU5FVEFERFJFU1NUWVBFX0lQVjQgPT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NQcmVmaXhUeXBlKQotICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lX3ZhbF9wdHIpID0gNDI5NDk2NzI5NTsgICAgLyogcGVyIE1JQiAqLworICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lX3ZhbF9wdHIpID0gNDI5NDk2NzI5NVU7ICAgIC8qIHBlciBNSUIgKi8KICAgICBlbHNlCiAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0cikgPQogICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZTsKQEAgLTY2MSw3ICs2NjAsNyBAQAogICAgICAqIGNvcHkgKCogaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCiAgICAgaWYgKElORVRBRERSRVNTVFlQRV9JUFY0ID09IHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzUHJlZml4VHlwZSkKLSAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lX3ZhbF9wdHIpID0gNDI5NDk2NzI5NTsgICAgICAgIC8qIHBlciBNSUIgKi8KKyAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lX3ZhbF9wdHIpID0gNDI5NDk2NzI5NVU7ICAgICAgICAvKiBwZXIgTUlCICovCiAgICAgZWxzZQogICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWVfdmFsX3B0cikgPQogICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAppbmRleCBkZmU5NzNlLi4yNGIyMmEyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaApAQCAtMjExLDggKzIxMSw4IEBACiAgICAgICAgICogaXBBZGRyZXNzUHJlZml4VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpcEFkZHJlc3NQcmVmaXhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgiCkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeAogICAgICAgICAoaXBBZGRyZXNzUHJlZml4VGFibGVfbWliX2luZGV4ICogdGJsX2lkeCwKICAgICAgICAgIGxvbmcgaXBBZGRyZXNzUHJlZml4SWZJbmRleF92YWwsIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhUeXBlX3ZhbCwKLSAgICAgICAgIGNoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAorICAgICAgICAgdV9jaGFyICppcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0ciwKICAgICAgICAgIHNpemVfdCBpcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0cl9sZW4sCiAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzUHJlZml4TGVuZ3RoX3ZhbCk7CiAgICAgaW50CkBAIC0yNzksNyArMjc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0cl9sZW4sCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgKaW5kZXggNjZmMjEwOS4uNWVjYWRlNCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaApAQCAtMTM3LDMgKzEzNywxNyBAQAogfQogI2VuZGlmCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQQUREUkVTU1BSRUZJWFRBQkxFX09JRFNfSCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQWRkaXRpb25hbCBjb25zdGFudHMgYW5kIGRlZmluaXRpb25zIGZvciBjb21tb24gaW1wbGVtZW50YXRpb24KKyovCisjZGVmaW5lIElORklOSVRZX0xJRkVfVElNRSAgICAgIDB4RkZGRkZGRkZVCisjZGVmaW5lIE5JUDYoYWRkcikgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzBdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzFdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzJdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzNdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzRdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzVdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzZdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzddKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDJmNjRjYmUuLjQ0Mzc4MjkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC04LDYgKzgsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjEsNiArMjIsMTAgQEAKIAogI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfZ2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2NvbW1vbl9jb3B5X3V0aWxpdGllcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19wcmVmaXhfY29weSkKKwogLyoqIEBpbmdyb3VwIGludGVyZmFjZSAKICAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQogICoKQEAgLTIwMiw3ICsyMDcsNyBAQAogICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKmFkZHJfcm93cmVxX2N0eDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcl9jb250YWluZXI7CiAgICAgbmV0c25tcF9pdGVyYXRvciAqYWRkcl9pdDsKLSAgICBzaXplX3QgICAgICAgICAgY291bnQgPSAwOworICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDA7CiAgICAgdV9jaGFyICAgICAgICAgIHRtcF9wZnhbTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0JVRl9TSVpFXTsKIAogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwQWRkcmVzc1ByZWZpeFRhYmxlOmlwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImNhbGxlZFxuIikpOwpAQCAtMjUxLDYgKzI1NiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9hZGRyZXNzX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfcHJlZml4X2xlbik7CisgICAgICAgIG5ldHNubXBfaXBhZGRyZXNzX2ZsYWdzX2NvcHkoJnJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfcHJlZmVyZWRfbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfdmFsaWRfbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfb25saW5rX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfYXV0b25vbW91c19mbGFnKTsKKwogICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgpAQCAtMjc4LDggKzMwMCwxNCBAQAogICAgICAgICAgKiBUT0RPOjM1MjpyOiB8ICAgfC0+IHBvcHVsYXRlIGlwQWRkcmVzc1ByZWZpeFRhYmxlIGRhdGEgY29udGV4dC4KICAgICAgICAgICogUG9wdWxhdGUgZGF0YSBjb250ZXh0IGhlcmUuIChvcHRpb25hbGx5LCBkZWxheSB1bnRpbCByb3cgcHJlcCkKICAgICAgICAgICovCi0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaXBBZGRyZXNzUHJlZml4T3JpZ2luID0KLSAgICAgICAgICAgIGFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+aWFfb3JpZ2luOworICAgICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19wcmVmaXhfb3JpZ2luX2NvcHkoJnJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFfb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9yb3dyZXFfY3R4LT50YmxfaWR4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzQWRkclR5cGUpOwogCiAgICAgICAgIC8qKiBkZWZlciB0aGUgcmVzdCB0aWwgcm93IHByZXAgKi8KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDE5MDlhNGIuLmUxNGEzMzcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE2IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzcHJlZml4dGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4LCBpcGFkZHJlc3NwcmVmaXh0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzcHJlZml4dGFibGVfY29udGFpbmVyX2dldCwgaXBhZGRyZXNzcHJlZml4dGFibGVfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpcGFkZHJlc3NwcmVmaXh0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX3NpemUsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MSwxOCArOTIsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWZfY3R4KTsKIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uICoKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaXBBZGRyZXNzUHJlZml4VGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uICoKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTAyLDEyICsxMTgsMTUgQEAKICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1BSRUZJWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1BSRUZJWFRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwQWRkcmVzc1ByZWZpeFRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogLyoKICAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcwpAQCAtMTU1LDcgKzE3NCw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQQUREUkVTU1BSRUZJWFRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUEFERFJFU1NQUkVGSVhUQUJMRV9NQVhfQ09MOwpAQCAtMjI5LDcgKzI0OCw4IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgLyogWFhYIC0gYXJlIHRoZXNlIGFjdHVhbGx5IG5lY2Vzc2FyeT8gKi8KICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTI1Miw3ICsyNzIsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtODQ5LDcgKzg2OSw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBBZGRyZXNzUHJlZml4VGFibGVfZ2V0X3ZhbHVlcyAqLwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEwMTQsNiArMTAzNCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUk9XX0ZJTkRfQllfTUlCX0lOREVYCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yb3dyZXFfY3R4ICoKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcEFkZHJlc3NQcmVmaXhUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xMDQxLDMgKzEwNjIsNCBAQAogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9ST1dfRklORF9CWV9NSUJfSU5ERVggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMKaW5kZXggODQ4YzYzZC4uZGVmZjRlOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTI4LDggKzI5LDEyIEBACiAKICNpbmNsdWRlICJpcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX29pZFtdID0geyBJUEFERFJFU1NUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaXBBZGRyZXNzVGFibGVfb2lkKTsKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19lbnRyeV9jb3B5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX3ByZWZpeF9jb3B5KQorCitjb25zdCBvaWQgICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW10gPSB7IElQQUREUkVTU1RBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChpcEFkZHJlc3NUYWJsZV9vaWQpOwogCiBpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gaXBBZGRyZXNzVGFibGVfdXNlcl9jb250ZXh0Owogc3RhdGljIGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbiAqaXBBZGRyZXNzVGFibGVfdXNlcl9jb250ZXh0X3A7CkBAIC0zMzMsOCArMzM4LDggQEAKICAqICBPdGhlcndpc2UsIGp1c3QgZG8gYSBkaXJlY3QgY29weS4KICAqLwogaW50Ci1pcEFkZHJlc3NBZGRyVHlwZV9tYXAodV9sb25nICogbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHJhd19pcEFkZHJlc3NBZGRyVHlwZV92YWwpCitpcEFkZHJlc3NBZGRyVHlwZV9tYXAobG9uZyAqIG1pYl9pcEFkZHJlc3NBZGRyVHlwZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmF3X2lwQWRkcmVzc0FkZHJUeXBlX3ZhbCkKIHsKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IG1pYl9pcEFkZHJlc3NBZGRyVHlwZV92YWxfcHRyKTsKIApAQCAtMzgyLDggKzM4Nyw4IEBACiAgKi8KIGludAogaXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcEFkZHJlc3NUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzQWRkclR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBBZGRyZXNzQWRkclR5cGVfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc0FkZHJfdmFsX3B0cl9sZW4pCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBBZGRyZXNzVGFibGU6aXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKQEAgLTQzMSw3ICs0MzYsNyBAQAogaW50CiBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpcEFkZHJlc3NBZGRyX3ZhbF9wdHJfbGVuKQogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwQWRkcmVzc1RhYmxlOmlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0IiwKQEAgLTYyNiw3ICs2MzEsNyBAQAogICAgIG9pZCAgICAgICAgICAgICpkc3QsIHRtcF9vaWRbTUFYX09JRF9MRU5dID0KICAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSB9OwogICAgIHVfY2hhciAgICAgICAgICB0bXBfYnVmW05FVFNOTVBfQUNDRVNTX0lQQUREUkVTU19CVUZfU0laRV07Ci0gICAgaW50ICAgICAgICAgICAgIGxlbjsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOwogCiAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLwogICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX3B0cikKQEAgLTY1Nyw3ICs2NjIsNyBAQAogCiAgICAgbGVuICo9IHNpemVvZigoKmlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX3B0cilbMF0pOwogICAgIGlmICgoKmlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX2xlbl9wdHIpIDwgbGVuKSB7Ci0gICAgICAgICgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKSA9IG1hbGxvYyhsZW4pOworICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX3B0cikgPSAob2lkKiltYWxsb2MobGVuKTsKICAgICAgICAgaWYgKE5VTEwgPT0gKCppcEFkZHJlc3NQcmVmaXhfdmFsX3B0cl9wdHIpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwpAQCAtOTQ0LDcgKzk0OSwxMCBAQAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBBZGRyZXNzUm93U3RhdHVzX3ZhbF9wdHIpOwogCiAgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKi8KLSAgICAoKmlwQWRkcmVzc1Jvd1N0YXR1c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmlwQWRkcmVzc1Jvd1N0YXR1czsKKyAgICBpZihyb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCkKKyAgICAgICAoKmlwQWRkcmVzc1Jvd1N0YXR1c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmlwQWRkcmVzc1Jvd1N0YXR1czsKKyAgICBlbHNlCisgICAgICAgKCppcEFkZHJlc3NSb3dTdGF0dXNfdmFsX3B0cikgPSBST1dTVEFUVVNfTk9UUkVBRFk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQWRkcmVzc1Jvd1N0YXR1c19nZXQgKi8KQEAgLTE0NjksNyArMTQ3Nyw3IEBACiAgICAgLyoKICAgICAgKiBpZiB0aGUgbmV3IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQsIGFjY2VwdCBpdC4KICAgICAgKi8KLSAgICBpZiAoaXBBZGRyZXNzSWZJbmRleF92YWwgPT0gcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgpCisgICAgaWYgKGlwQWRkcmVzc0lmSW5kZXhfdmFsID09IChsb25nKXJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4KQogICAgICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiAKICAgICAvKgpAQCAtMTQ4Niw3ICsxNDk0LDcgQEAKICAgICAgKiBmaW5kIG5hbWUgZm9yIGlmSW5kZXgKICAgICAgKi8KICAgICBpZiAoTlVMTCA9PSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfbmFtZV9maW5kKGlwQWRkcmVzc0lmSW5kZXhfdmFsKSkgewotICAgICAgICBERUJVR01TR1QoKCJpcEFkZHJlc3NUYWJsZSIsICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJWRcbiIsCisgICAgICAgIERFQlVHTVNHVCgoImlwQWRkcmVzc1RhYmxlIiwgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzSWZJbmRleF92YWwpKTsKICAgICAgICAgcmV0dXJuIE1GRF9OT1RfVkFMSURfTk9XOwogICAgIH0KQEAgLTE1NTYsOCArMTU2NCw4IEBACiAgICAgICogVE9ETzo0NjE6TTogfC0+IFNldCBpcEFkZHJlc3NJZkluZGV4IHZhbHVlLgogICAgICAqIHNldCBpcEFkZHJlc3NJZkluZGV4IHZhbHVlIGluIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KLSAgICBpZiAocm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggIT0gaXBBZGRyZXNzSWZJbmRleF92YWwpCi0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4ID0gaXBBZGRyZXNzSWZJbmRleF92YWw7CisgICAgaWYgKHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4ICE9IChvaWQpaXBBZGRyZXNzSWZJbmRleF92YWwpCisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4ICA9IChvaWQpaXBBZGRyZXNzSWZJbmRleF92YWw7CiAgICAgZWxzZQogICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzICY9IH5DT0xVTU5fSVBBRERSRVNTSUZJTkRFWF9GTEFHOwogCkBAIC0yMDMyLDcgKzIwNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUm93U3RhdHVzX3ZhbCk7CiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJpcEFkZHJlc3NUYWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJyb3cgc3RhdHVzIHRyYW5zaXRpb24gZnJvbSAlZCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgInJvdyBzdGF0dXMgdHJhbnNpdGlvbiBmcm9tICVkIHRvICVsdVxuIiwKICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+aXBBZGRyZXNzUm93U3RhdHVzLAogICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NSb3dTdGF0dXNfdmFsKSk7CiAgICAgICAgIHJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKaW5kZXggNTBhZDE4OC4uZmU4ZjA0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKQEAgLTk2LDEzICs5NiwxMyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBpcEFkZHJlc3NBZGRyVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCiAgICAgICAgICAqLwotICAgICAgICB1X2xvbmcgICAgICAgICAgaXBBZGRyZXNzQWRkclR5cGU7CisgICAgICAgIGxvbmcgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBpcEFkZHJlc3NBZGRyKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaAogICAgICAgICAgKi8KICAgICAgICAgLyoqIDEyOCAtIDEob3RoZXIgaW5kZXhlcykgLSBvaWQgbGVuZ3RoKDEwKSA9IDExNiAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgaXBBZGRyZXNzQWRkclsxMTZdOworICAgICAgICB1X2NoYXIgICAgICAgICAgaXBBZGRyZXNzQWRkclsxMTZdOwogICAgICAgICBzaXplX3QgICAgICAgICAgaXBBZGRyZXNzQWRkcl9sZW47CiAKIApAQCAtMTk3LDggKzE5Nyw4IEBACiAgICAgICAgICogaXBBZGRyZXNzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwQWRkcmVzc1RhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTIyNyw5ICsyMjcsOSBAQAogICAgIC8qCiAgICAgICogaW5kZXhlcwogICAgICAqLwotICAgIGludCAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZV9tYXAodV9sb25nICoKKyAgICBpbnQgICAgICAgICAgICAgaXBBZGRyZXNzQWRkclR5cGVfbWFwKGxvbmcgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19pcEFkZHJlc3NBZGRyVHlwZV92YWwpOwogCiAgICAgaW50ICAgICAgICAgICAgIGlwQWRkcmVzc0lmSW5kZXhfZ2V0KGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKgpAQCAtMjcwLDE1ICsyNzAsMTUgQEAKICAgICBpbnQKICAgICAgICAgaXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcEFkZHJlc3NUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzQWRkcl92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0KGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzQWRkclR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaXBBZGRyZXNzQWRkcl92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzQWRkcl92YWxfcHRyX2xlbik7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggYTBkOGM0YS4uZDgwYjNlNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yMiw2ICsyMyw4IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpZm8pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfZW50cnlfdXBkYXRlKQogCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCkBAIC0xMzQsNiArMTM3LDcgQEAKICAgICAqY29udGFpbmVyX3B0cl9wdHIgPQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcEFkZHJlc3NUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKICAgICBpZiAoTlVMTCAhPSAqY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgKCpjb250YWluZXJfcHRyX3B0ciktPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcEFkZHJlc3NUYWJsZSIpOwogICAgICAgICBpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfbG9hZCgqY29udGFpbmVyX3B0cl9wdHIpOwogICAgICAgICBDT05UQUlORVJfRk9SX0VBQ0goKmNvbnRhaW5lcl9wdHJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jbGVhcl90aW1lcywKQEAgLTIwMSwxMyArMjA1LDEzIEBACiBfY2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm1hZ2ljKQogewotICAgIG5ldHNubXBfY29udGFpbmVyICppcGFkZHJlc3NfY29udGFpbmVyID0gbWFnaWNbMF07Ci0gICAgbmV0c25tcF9jb250YWluZXIgKnRvX2RlbGV0ZSA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBtYWdpY1sxXTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqaXBhZGRyZXNzX2NvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciopbWFnaWNbMF07CisgICAgbmV0c25tcF9jb250YWluZXIgKnRvX2RlbGV0ZSAgICAgICAgICAgPSAobmV0c25tcF9jb250YWluZXIqKW1hZ2ljWzFdOwogCiAgICAgLyoKICAgICAgKiBjaGVjayBmb3IgbWF0Y2hpbmcgZW50cnkgdXNpbmcgc2Vjb25kYXJ5IGluZGV4LgogICAgICAqLwotICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICppcGFkZHJlc3NfZW50cnkgPQorICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICppcGFkZHJlc3NfZW50cnkgPSAobmV0c25tcF9pcGFkZHJlc3NfZW50cnkqKQogICAgICAgICBDT05UQUlORVJfRklORChpcGFkZHJlc3NfY29udGFpbmVyLCByb3dyZXFfY3R4LT5kYXRhKTsKICAgICBpZiAoTlVMTCA9PSBpcGFkZHJlc3NfZW50cnkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImlwQWRkcmVzc1RhYmxlOmFjY2VzcyIsICJyZW1vdmluZyBtaXNzaW5nIGVudHJ5XG4iKSk7CkBAIC0yNTksNyArMjYzLDcgQEAKICAgICAgICAgKE1GRF9TVUNDRVNTID09CiAgICAgICAgICBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGlwYWRkcmVzc19lbnRyeS0+aWFfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzc19lbnRyeS0+aWFfYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzc19lbnRyeS0+aWFfYWRkcmVzc19sZW4pKSkgewogICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpIDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCAoKCJpcEFkZHJlc3NUYWJsZTphY2Nlc3MiLCJjb250YWluZXIgaW5zZXJ0IGZhaWxlZCBmb3IgbmV3IGVudHJ5XG4iKSk7CkBAIC0zNzksNyArMzgzLDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBnZXQgZnJvbSBkZWxldGUgbGlzdAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0bXBfY3R4ID0gQ09OVEFJTkVSX0ZJUlNUKHRtcF9jb250YWluZXIpOworICAgICAgICAgICAgdG1wX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklSU1QodG1wX2NvbnRhaW5lcik7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiByZWxlYXNlIGNvbnRleHQsIGRlbGV0ZSBmcm9tIHRhYmxlIGNvbnRhaW5lcgpAQCAtMzk1LDcgKzM5OSw3IEBACiAgICAgfQogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTppcEFkZHJlc3NUYWJsZTppcEFkZHJlc3NUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWx1IHJlY29yZHNcbiIsICh1bnNpZ25lZCBsb25nKUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0KQEAgLTY3Miw5ICs2NzYsOSBAQAogICAgICAqIFRPRE86NDMwOk06IHwtPiBWYWxpZGF0ZSBwb3RlbnRpYWwgaXBBZGRyZXNzVGFibGUgaW5kZXguCiAgICAgICoKICAgICAgKgotICAgICAqIHh4eC1ya3M6IHdlIG9ubHkgcGxhbiBpcHY0IHN1cHBvcnQgaW5pdGlhbGx5CiAgICAgICovCi0gICAgaWYgKCg0ICE9IHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW4pKSB7CisgICAgaWYgKCg0ICE9IHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW4pCisgICAgICAgICAgICAmJiAoMTYgIT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyX2xlbikpIHsKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJpbnZhbGlkIGluZGV4IGZvciBhIG5ldyByb3cgaW4gdGhlICIKICAgICAgICAgICAgICAgICAgImlwQWRkcmVzc1RhYmxlIHRhYmxlLlxuIik7CiAgICAgICAgIC8qCkBAIC02OTEsMTUgKzY5NSw5IEBACiAgICAgICAgICAgICByZXR1cm4gTUZEX0NBTk5PVF9DUkVBVEVfTk9XOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc1swXSA9Ci0gICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJbMF07Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlhX2FkZHJlc3NbMV0gPQotICAgICAgICAgICAgcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyWzFdOwotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzWzJdID0KLSAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkclsyXTsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc1szXSA9Ci0gICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJbM107Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlhX2FkZHJlc3NfbGVuID0gNDsKKyAgICAgICAgbWVtY3B5KHJvd3JlcV9jdHgtPmRhdGEtPmlhX2FkZHJlc3MsIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkciwKKyAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJfbGVuKTsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc19sZW4gPSByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJfbGVuOwogICAgIH0KIAogICAgIHJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYwppbmRleCAwYzg1MDczLi40ODc3MGIwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOSBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1RhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NpemUsIGlwQWRkcmVzc1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpcEFkZHJlc3NUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9nZXQsIGlwQWRkcmVzc1RhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MCwxOSArOTQsMjMgQEAKIHN0YXRpYyB2b2lkCiAgICAgICAgICAgICAgICAgX2lwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaXBBZGRyZXNzVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAwLDEyICsxMTgsMTUgQEAKICAgICBpcEFkZHJlc3NUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwQWRkcmVzc1RhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlwQWRkcmVzc1RhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTI5LDcgKzE1MCw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9wb3N0X3JlcXVlc3Q7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBBZGRyZXNzVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBBZGRyZXNzVGFibGVfY2hlY2tfb2JqZWN0czsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTQ0LDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgX2lwQWRkcmVzc1RhYmxlX3VuZG9fY29sdW1uKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW4pOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiBORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CiAgICAgICAgICAgICAgICAgX2lwQWRkcmVzc1RhYmxlX2NoZWNrX2luZGV4ZXMoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOwpAQCAtMTg0LDcgKzIwNSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQQUREUkVTU1RBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUEFERFJFU1NUQUJMRV9NQVhfQ09MOwpAQCAtMjIyLDcgKzI0Myw3IEBACiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2lwQWRkcmVzc1RhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjQ2LDcgKzI2Nyw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2lwQWRkcmVzc1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTI4Miw3ICszMDMsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzA1LDcgKzMyNiw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC02NDAsNyArNjYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTY4Niw2ICs3MDcsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwQWRkcmVzc1RhYmxlX3Bvc3RfcmVxdWVzdCAqLwogCisKIC8qKgogICogQGludGVybmFsCiAgKiB3cmFwcGVyCkBAIC03NTgsNyArNzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBBZGRyZXNzVGFibGU6X21mZF9pcEFkZHJlc3NUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtOTMzLDcgKzk1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEwNjAsNyArMTA4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBBZGRyZXNzVGFibGVfY2hlY2tfaW5kZXhlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMjkxLDcgKzEzMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTMzOCw3ICsxMzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTQzNyw3ICsxNDU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX3VuZG9fc2V0dXAiLApAQCAtMTUwMiw3ICsxNTI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNjIxLDcgKzE2NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE2NjksNyArMTY5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX2NvbW1pdCIsCkBAIC0xNzAzLDcgKzE3MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX3VuZG9fY29tbWl0IiwKQEAgLTE4MTEsNyArMTgzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAKQEAgLTE4NjYsNyArMTg4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBBZGRyZXNzVGFibGU6X21mZF9pcEFkZHJlc3NUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTg5Miw3ICsxOTE0LDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwQWRkcmVzc1RhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjA0MSw2ICsyMDYzLDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKgogaXBBZGRyZXNzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCiB7CkBAIC0yMDYyLDcgKzIwODUsOCBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0gQ09OVEFJTkVSX0ZJTkQoaXBBZGRyZXNzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworICAgIHJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoaXBBZGRyZXNzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlZDg0YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBlMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKiogXHBhZ2UgTUZEIGhlbHBlciBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqCisgKiBcc2VjdGlvbiBpbnRybyBJbnRyb2R1Y3Rpb24KKyAqIEludHJvZHVjdG9yeSB0ZXh0LgorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgiCisKK2NvbnN0IG9pZCAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRbXSA9IHsgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkX3NpemUgPQorT0lEX0xFTkdUSChpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWQpOworCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0Oworc3RhdGljIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3A7CisKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpOworCisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIG1vZHVsZQorICovCit2b2lkCitpbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aW5pdF9pcERlZmF1bHRSb3V0ZXJUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMDpvOiBQZXJmb3JtIGlwRGVmYXVsdFJvdXRlclRhYmxlIG9uZS10aW1lIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcKKyAgICAgKi8KKyAgICBpZiAoc2hvdWxkX2luaXQoImlwRGVmYXVsdFJvdXRlclRhYmxlIikpCisgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUoKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJpcERlZmF1bHRSb3V0ZXJUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmluaXRpYWxpemVfdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAxOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgb25lLXRpbWUgdGFibGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIFRPRE86MzAyOm86IHwtPkluaXRpYWxpemUgaXBEZWZhdWx0Um91dGVyVGFibGUgdXNlciBjb250ZXh0CisgICAgICogaWYgeW91J2QgbGlrZSB0byBwYXNzIGluIGEgcG9pbnRlciB0byBzb21lIGRhdGEgZm9yIHRoaXMKKyAgICAgKiB0YWJsZSwgYWxsb2NhdGUgb3Igc2V0IGl0IHVwIGhlcmUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBhIG5ldHNubXBfZGF0YV9saXN0IGlzIGEgc2ltcGxlIHdheSB0byBzdG9yZSB2b2lkIHBvaW50ZXJzLiBBIHNpbXBsZQorICAgICAqIHN0cmluZyB0b2tlbiBpcyB1c2VkIHRvIGFkZCwgZmluZCBvciByZW1vdmUgcG9pbnRlcnMuCisgICAgICovCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3AgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImlwRGVmYXVsdFJvdXRlclRhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfaXBEZWZhdWx0Um91dGVyVGFibGVfc2h1dGRvd25faW50ZXJmYWNlCisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9pbml0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTA6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXBEZWZhdWx0Um91dGVyVGFibGUgcm93cmVxIGluaXRpYWxpemF0aW9uLiAoZWcgREVGVkFMUykKKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9pbml0ICovCisKKy8qKgorICogZXh0cmEgY29udGV4dCBjbGVhbnVwCisgKgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMTpvOiB8LT4gUGVyZm9ybSBleHRyYSBpcERlZmF1bHRSb3V0ZXJUYWJsZSByb3dyZXEgY2xlYW51cC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUocm93cmVxX2N0eC0+ZGF0YSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YSA9IE5VTEw7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLworCisvKioKKyAqIHByZS1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMDpvOiBQZXJmb3JtIGlwRGVmYXVsdFJvdXRlclRhYmxlIHByZS1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogcG9zdC1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICogTm90ZToKKyAqICAgTmV3IHJvd3MgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciwgYW5kCisgKiAgIGRlbGV0ZWQgcm93cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kCisgKiAgIHJlbGVhc2VkLgorICoKKyAqIEBwYXJhbSB1c2VyX2NvbnRleHQKKyAqIEBwYXJhbSByYyA6IE1GRF9TVUNDRVNTIGlmIGFsbCByZXF1ZXN0cyBzdWNjZWVkZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBvdGhlciBlcnJvciAoaWdub3JlZCkKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQsIGludCByYykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTExOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgcG9zdC1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmVmMjlhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaD4KKworICAgIC8qCisgICAgICogb3RoZXIgcmVxdWlyZWQgbW9kdWxlIGNvbXBvbmVudHMgCisgICAgICovCisgICAgLyogKklOREVOVC1PRkYqICAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0KQorICAgIC8qICpJTkRFTlQtT04qICAqLworCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlIAorICAgICAqLworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9pcERlZmF1bHRSb3V0ZXJUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBpcERlZmF1bHRSb3V0ZXJUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBUT0RPOjExMDpyOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgY29udGV4dCBzdHJ1Y3R1cmUuCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGRhdGEgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5IGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGE7CisKKworICAgIC8qCisgICAgICogVE9ETzoxMjA6cjogfC0+IFJldmlldyBpcERlZmF1bHRSb3V0ZXJUYWJsZSBtaWIgaW5kZXguCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGluZGV4IGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXhfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oCisgICAgICAgICAqLworICAgICAgICAvKiogMTI4IC0gMihvdGhlciBpbmRleGVzKSAtIG9pZCBsZW5ndGgoMTApID0gMTE1ICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzWzExNV07CisgICAgICAgIHNpemVfdCAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX2xlbjsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4KDMpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgICAgICovCisgICAgICAgIGxvbmcgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJJZkluZGV4OworCisKKyAgICB9IGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleDsKKworICAgIC8qCisgICAgICogVE9ETzoxMjE6cjogfCAgIHwtPiBSZXZpZXcgaXBEZWZhdWx0Um91dGVyVGFibGUgbWF4IGluZGV4IGxlbmd0aC4KKyAgICAgKiBJZiB5b3UgS05PVyB0aGF0IHlvdXIgaW5kZXhlcyB3aWxsIG5ldmVyIGV4Y2VlZCBhIGNlcnRhaW4KKyAgICAgKiBsZW5ndGgsIHVwZGF0ZSB0aGlzIG1hY3JvIHRvIHRoYXQgbGVuZ3RoLgorICAgICAqCisgICAgICogQkUgVkVSWSBDQVJFRlVMIFRPIFRBS0UgSU5UTyBBQ0NPVU5UIFRIRSBNQVhJTVVNCisgICAgICogUE9TU0lCTEUgTEVOR0hUIEZPUiBFVkVSWSBWQVJJQUJMRSBMRU5HVEggSU5ERVghCisgICAgICogR3Vlc3NpbmcgMTI4IC0gY29sL2VudHJ5KDIpICAtIG9pZCBsZW4oOCkKKyAgICAgKi8KKyNkZWZpbmUgTUFYX2lwRGVmYXVsdFJvdXRlclRhYmxlX0lEWF9MRU4gICAgIDExOAorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjEzMDpvOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIFJvdyByZXF1ZXN0IChyb3dyZXEpIGNvbnRleHQuCisgICAgICogV2hlbiB5b3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB5b3Ugd2lsbCBiZSBwYXNzZWQgYQorICAgICAqIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggcG9pbnRlci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X3MgeworCisgICAgLyoqIHRoaXMgbXVzdCBiZSBmaXJzdCBmb3IgY29udGFpbmVyIGNvbXBhcmUgdG8gd29yayAqLworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICAgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX2lwRGVmYXVsdFJvdXRlclRhYmxlX0lEWF9MRU5dOworCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCB0YmxfaWR4OworCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEgKmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZmxhZ3MgcGVyIHJvdy4gQ3VycmVudGx5LCB0aGUgZmlyc3QgKGxvd2VyKSA4IGJpdHMgYXJlIHJlc2VydmVkCisgICAgICAgICAqIGZvciB0aGUgdXNlci4gU2VlIG1mZC5oIGZvciBvdGhlciBmbGFncy4KKyAgICAgICAgICovCisgICAgICAgIHVfaW50ICAgICAgICAgICByb3dyZXFfZmxhZ3M7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzoxMzE6bzogfCAgIHwtPiBBZGQgdXNlZnVsIGRhdGEgdG8gaXBEZWZhdWx0Um91dGVyVGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICppcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCwgaW50IHJjKTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9kYXRhKGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CisKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgiCisKKyAgICAvKgorICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQorICAgICAqCisgICAgICogVE9ETzowOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjI5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzozOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86NDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkN2RjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saWZvKQorCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlCisgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBsb2NhdGUgdGhlIGRhdGEgdXNlZCB0byBzYXRpc2Z5CisgKiByZXF1ZXN0cy4KKyAqIAorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZSBpcyBzdWJpZCAzNyBvZiBpcC4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcsIGxlbmd0aDogOAorICovCisKKy8qKgorICogaW5pdGlhbGl6YXRpb24gZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgYWNjZXNzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvCisgKiBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIHlvdSBuZWVkIGZvciB0aGUgZGF0YSB0YWJsZS4KKyAqCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnCisgKiAgICAgICAgUG9pbnRlciB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiB1bnJlY292ZXJhYmxlIGVycm9yLgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRfZGF0YShpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YS4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqIEBwYXJhbSAgY2FjaGUgQSBwb2ludGVyIHRvIGEgY2FjaGUgc3RydWN0dXJlLiBZb3UgY2FuIHNldCB0aGUgdGltZW91dAorICogICAgICAgICBhbmQgb3RoZXIgY2FjaGUgZmxhZ3MgdXNpbmcgdGhpcyBwb2ludGVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzdGFydHVwIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4gSWYgbm8gY3VzdG9tCisgKiAgY29udGFpbmVyIGlzIGFsbG9jYXRlZCwgdGhlIE1GRCBjb2RlIHdpbGwgY3JlYXRlIG9uZSBmb3IgeW91ci4KKyAqCisgKiAgVGhpcyBpcyBhbHNvIHRoZSBwbGFjZSB0byBzZXQgdXAgY2FjaGUgYmVoYXZpb3IuIFRoZSBkZWZhdWx0LCB0bworICogIHNpbXBseSBzZXQgdGhlIGNhY2hlIHRpbWVvdXQsIHdpbGwgd29yayB3ZWxsIHdpdGggdGhlIGRlZmF1bHQKKyAqICBjb250YWluZXIuIElmIHlvdSBhcmUgdXNpbmcgYSBjdXN0b20gY29udGFpbmVyLCB5b3UgbWF5IHdhbnQgdG8KKyAqICBsb29rIGF0IHRoZSBjYWNoZSBoZWxwZXIgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueQorICogIGZsYWdzIHlvdSB3YW50IHRvIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgaW5pdGlhbGl6YXRpb24gbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIG9wZW5pbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgd2lsbCBzdXBwbHkgdGhlIGRhdGEsIG9wZW5pbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKiBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaXBEZWZhdWx0Um91dGVyVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IElQREVGQVVMVFJPVVRFUlRBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAgICAvKiBzZWNvbmRzICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogY29udGFpbmVyIHNodXRkb3duCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHIgQSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHNodXRkb3duIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9mcmVlKCkuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGNsZWFudXAgbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIGNsb3NpbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgc3VwcGxpZWQgdGhlIGRhdGEsIGNsb3NpbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXJfcHRyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKi8KK3N0YXRpYyB2b2lkCitfY2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpkZWZhdWx0cm91dGVyX2NvbnRhaW5lciA9IG1hZ2ljWzBdOworICAgIG5ldHNubXBfY29udGFpbmVyICp0b19kZWxldGUgPSAobmV0c25tcF9jb250YWluZXIgKikgbWFnaWNbMV07CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeSB1c2luZyBzZWNvbmRhcnkgaW5kZXguCisgICAgICovCisgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpkZWZhdWx0cm91dGVyX2VudHJ5ID0KKyAgICAgICAgQ09OVEFJTkVSX0ZJTkQoZGVmYXVsdHJvdXRlcl9jb250YWluZXIsIHJvd3JlcV9jdHgtPmRhdGEpOworICAgIGlmIChOVUxMID09IGRlZmF1bHRyb3V0ZXJfZW50cnkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImlwRGVmYXVsdFJvdXRlclRhYmxlOmFjY2VzcyIsICJyZW1vdmluZyBtaXNzaW5nIGVudHJ5XG4iKSk7CisKKyAgICAgICAgaWYgKE5VTEwgPT0gdG9fZGVsZXRlKSB7CisgICAgICAgICAgICBtYWdpY1sxXSA9IHRvX2RlbGV0ZSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImxpZm8iKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHRvX2RlbGV0ZSkKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgY3JlYXRlIGRlbGV0ZSBjb250YWluZXJcbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChOVUxMICE9IHRvX2RlbGV0ZSkKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQodG9fZGVsZXRlLCByb3dyZXFfY3R4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIGV4aXN0aW5nIGVudHJ5XG4iKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIGNoYW5nZXMgJiB1cGRhdGUKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfdXBkYXRlKHJvd3JlcV9jdHgtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRyb3V0ZXJfZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSBlbnRyeSBmcm9tIGlmY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGRlZmF1bHRyb3V0ZXJfY29udGFpbmVyLCBkZWZhdWx0cm91dGVyX2VudHJ5KTsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGRlZmF1bHRyb3V0ZXJfZW50cnkpOworICAgIH0KK30KKworLyoqCisgKiBhZGQgbmV3IGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkCitfYWRkX25ld19lbnRyeShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmRlZmF1bHRyb3V0ZXJfZW50cnksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGU6YWNjZXNzIiwgImNyZWF0aW5nIG5ldyBlbnRyeVxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkZWZhdWx0cm91dGVyX2VudHJ5KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIGFuIHJvdyBjb250ZXh0IGFuZCBzZXQgdGhlIGluZGV4KGVzKQorICAgICAqLworICAgIHJvd3JlcV9jdHggPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGRlZmF1bHRyb3V0ZXJfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCisgICAgICAgICAgICAoTUZEX1NVQ0NFU1MgPT0KKyAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICBkZWZhdWx0cm91dGVyX2VudHJ5LT5kcl9hZGRyZXNzdHlwZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeS0+ZHJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeS0+ZHJfYWRkcmVzc19sZW4sCisgICAgICAgICAgICAgICAgIGRlZmF1bHRyb3V0ZXJfZW50cnktPmRyX2lmX2luZGV4KSkpIHsKKyAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcEFkZHJlc3NUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb250YWluZXIgaW5zZXJ0IGZhaWxlZCBmb3IgbmV3IGVudHJ5XG4iKSk7CisgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSByb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlIGNhY2hlLlxuIik7CisgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIHdoaWxlIGxvYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlIGNhY2hlLlxuIik7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorfQorCisvKioKKyAqIGxvYWQgaW5pdGlhbCBkYXRhCisgKgorICogVE9ETzozNTA6TTogSW1wbGVtZW50IGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgbG9hZAorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBjYWNoZSBoZWxwZXIgdG8gbG9hZAorICogdGhlIGNvbnRhaW5lciBhZ2FpbiAoYWZ0ZXIgdGhlIGNvbnRhaW5lciBmcmVlIGZ1bmN0aW9uIGhhcyBiZWVuCisgKiBjYWxsZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgY29udGVudHMpLgorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHRvIHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBpbnNlcnRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFIDogQ2FuJ3QgYWNjZXNzIGRhdGEgc291cmNlCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBpbmRleChlcykgKGFuZCBkYXRhLCBvcHRpb25hbGx5KQorICogIGZvciB0aGUgZXZlcnkgcm93IGluIHRoZSBkYXRhIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgV2hpbGUgbG9hZGluZyB0aGUgZGF0YSwgdGhlIG9ubHkgaW1wb3J0YW50IHRoaW5nIGlzIHRoZSBpbmRleGVzLgorICogIElmIGFjY2VzcyB0byB5b3VyIGRhdGEgaXMgY2hlYXAvZmFzdCAoZS5nLiB5b3UgaGF2ZSBhIHBvaW50ZXIgdG8gYQorICogIHN0cnVjdHVyZSBpbiBtZW1vcnkpLCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHVwZGF0ZSB0aGUgZGF0YSBoZXJlLgorICogIElmLCBob3dldmVyLCB0aGUgYWNjZXNzaW5nIHRoZSBkYXRhIGludm92bGVzIG1vcmUgd29yayAoZS5nLiBwYXJzaW5nCisgKiAgc29tZSBvdGhlciBleGlzdGluZyBkYXRhLCBvciBwZWZvcm1pbmcgY2FsY3VsYXRpb25zIHRvIGRlcml2ZSB0aGUgZGF0YSksCisgKiAgdGhlbiB5b3UgY2FuIGxpbWl0IHlvdXJzZWxmIHRvIHNldHRpbmcgdGhlIGluZGV4ZXMgYW5kIHNhdmluZyBhbnkKKyAqICBpbmZvcm1hdGlvbiB5b3Ugd2lsbCBuZWVkIGxhdGVyLiBUaGVuIHVzZSB0aGUgc2F2ZWQgaW5mb3JtYXRpb24gaW4KKyAqICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dfcHJlcCgpIGZvciBwb3B1bGF0aW5nIGRhdGEuCisgKgorICogQG5vdGUKKyAqICBJZiB5b3UgbmVlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHJvd3MgKGxpa2UgeW91IHdhbnQgc3RhdGlzdGljcworICogIGZvciBlYWNoIHJvdyB0byBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgZnJhbWUpLCB5b3Ugc2hvdWxkIHNldCBhbGwKKyAqICBkYXRhIGhlcmUuCisgKgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpkZWZhdWx0cm91dGVyX2NvbnRhaW5lcjsKKyAgICB2b2lkICAgICAgICAgICAgICAqdG1wX3B0clsyXTsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MTpNOiB8LT4gTG9hZC91cGRhdGUgZGF0YSBpbiB0aGUgaXBEZWZhdWx0Um91dGVyVGFibGUgY29udGFpbmVyLgorICAgICAqIGxvb3Agb3ZlciB5b3VyIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCisgICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KKyAgICAgKiB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIGRlZmF1bHRyb3V0ZXJfY29udGFpbmVyID0KKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX0FERExfSURYX0JZX0FERFIpOworCisgICAgaWYgKE5VTEwgPT0gZGVmYXVsdHJvdXRlcl9jb250YWluZXIpCisgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7ICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKworICAgIC8qCisgICAgICogd2UganVzdCBnb3QgYSBmcmVzaCBjb3B5IG9mIGludGVyZmFjZSBkYXRhLiBjb21wYXJlIGl0IHRvCisgICAgICogd2hhdCB3ZSd2ZSBhbHJlYWR5IGdvdCwgYW5kIG1ha2UgYW55IGFkanVzdG1lbnRzLCBzYXZpbmcKKyAgICAgKiBtaXNzaW5nIGFkZHJlc3NlcyB0byBiZSBkZWxldGVkLgorICAgICAqLworICAgIHRtcF9wdHJbMF0gPSBkZWZhdWx0cm91dGVyX2NvbnRhaW5lci0+bmV4dDsKKyAgICB0bXBfcHRyWzFdID0gTlVMTDsKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NoZWNrX2VudHJ5X2Zvcl91cGRhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICB0bXBfcHRyKTsKKworICAgIC8qCisgICAgICogbm93IGFkZCBhbnkgbmV3IGludGVyZmFjZXMKKyAgICAgKi8KKyAgICBDT05UQUlORVJfRk9SX0VBQ0goZGVmYXVsdHJvdXRlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfYWRkX25ld19lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSB0aGUgY29udGFpbmVyLiB3ZSd2ZSBlaXRoZXIgY2xhaW1lZCBlYWNoIGVudHJ5LCBvciByZWxlYXNlZCBpdCwKKyAgICAgKiBzbyB0aGUgYWNjZXNzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBjbGVhciB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2ZyZWUoZGVmYXVsdHJvdXRlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0RPTlRfQ0xFQVIpOworCisgICAgLyoKKyAgICAgKiByZW1vdmUgZGVsZXRlZCBhZGRyZXNzZXMgZnJvbSB0YWJsZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSB0bXBfcHRyWzFdKSB7CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyICp0bXBfY29udGFpbmVyID0KKyAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lciAqKSB0bXBfcHRyWzFdOworICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICp0bXBfY3R4OworCisgICAgICAgIC8qCisgICAgICAgICAqIHRoaXMgd29ya3MgYmVjYXVzZSB0aGUgdG1wX2NvbnRhaW5lciBpcyBhIGxpbmtlZCBsaXN0LAorICAgICAgICAgKiB3aGljaCBjYW4gYmUgdXNlZCBsaWtlIGEgc3RhY2suLi4KKyAgICAgICAgICovCisgICAgICAgIHdoaWxlIChDT05UQUlORVJfU0laRSh0bXBfY29udGFpbmVyKSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGdldCBmcm9tIGRlbGV0ZSBsaXN0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHRtcF9jdHggPSBDT05UQUlORVJfRklSU1QodG1wX2NvbnRhaW5lcik7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiByZWxlYXNlIGNvbnRleHQsIGRlbGV0ZSBmcm9tIHRhYmxlIGNvbnRhaW5lcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgdG1wX2N0eCk7CisgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgodG1wX2N0eCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBwb3Agb2ZmIGRlbGV0ZSBsaXN0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUodG1wX2NvbnRhaW5lciwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSXogImQgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfQorCisvKioKKyAqIGNvbnRhaW5lciBjbGVhbiB1cAorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHdpdGggYWxsIGN1cnJlbnQgaXRlbXMKKyAqCisgKiAgVGhpcyBvcHRpb25hbCBjYWxsYmFjayBpcyBjYWxsZWQgcHJpb3IgdG8gYWxsCisgKiAgaXRlbSdzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyLiBJZiB5b3UKKyAqICBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGJlZm9yZSB0aGF0LCBkbyBpdCBoZXJlLgorICoKKyAqIEBub3RlCisgKiAgVGhlIE1GRCBoZWxwZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVsZWFzaW5nIGFsbCB0aGUgcm93IGNvbnRleHRzLgorICoKKyAqLwordm9pZAoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzgwOk06IEZyZWUgaXBEZWZhdWx0Um91dGVyVGFibGUgY29udGFpbmVyIGRhdGEuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogcHJlcGFyZSByb3cgZm9yIHByb2Nlc3NpbmcuCisgKgorICogIFdoZW4gdGhlIGFnZW50IGhhcyBsb2NhdGVkIHRoZSByb3cgZm9yIGEgcmVxdWVzdCwgdGhpcyBmdW5jdGlvbiBpcworICogIGNhbGxlZCB0byBwcmVwYXJlIHRoZSByb3cgZm9yIHByb2Nlc3NpbmcuIElmIHlvdSBmdWxseSBwb3B1bGF0ZWQKKyAqICB0aGUgZGF0YSBjb250ZXh0IGR1cmluZyB0aGUgaW5kZXggc2V0dXAgcGhhc2UsIHlvdSBtYXkgbm90IG5lZWQgdG8KKyAqICBkbyBhbnl0aGluZy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCBwb2ludGVyIHRvIGEgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwKGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAgKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDMzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUlRBQkxFX0RBVEFfQUNDRVNTX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9BQ0NFU1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUgaXMgc3ViaWQgMzcgb2YgaXAuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcsIGxlbmd0aDogOAorICAgICAqLworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdF9kYXRhKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWcpOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTgwOm86IFJldmlldyBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjYWNoZSB0aW1lb3V0LgorICAgICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGNhY2hlIHRpbWVzIG91dAorICAgICAqLworI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9DQUNIRV9USU1FT1VUICAgNjAKKworICAgIHZvaWQgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NhY2hlX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NhY2hlX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwKGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQREVGQVVMVFJPVVRFUlRBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3Nzg5NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5jCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGlwRGVmYXVsdFJvdXRlclRhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgKi8KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogKiBUT0RPOjIwMDpyOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBjb250ZXh0IGZ1bmN0aW9ucy4KKyAqLworLyoKKyAqIGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiBjcmVhdGUgbmV3IGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEuCisgKi8KK2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEgKgoraXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKQoreworICAgIC8qCisgICAgICogVE9ETzoyMDE6cjogfC0+IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICpydG4gPQorICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2NyZWF0ZSgpOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkgZm9yIG5ldyAiCisgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YSAqLworCisvKgorICogaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9kYXRhCisgKgorICogUHVycG9zZTogcmVsZWFzZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhLgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqIGRhdGEpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIwMjpyOiB8LT4gcmVsZWFzZSBtZW1vcnkgZm9yIHRoZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGRhdGEpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEgKi8KKworCisKKy8qKgorICogc2V0IG1pYiBpbmRleChlcykKKyAqCisgKiBAcGFyYW0gdGJsX2lkeCBtaWIgaW5kZXggc3RydWN0dXJlCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyQWRkcmVzc19wdHIKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3B0cl9sZW4KKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJJZkluZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKDEpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCisgICAgICovCisgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICovCisgICAgdGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgPSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWw7CisKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oIAorICAgICAqLworICAgIHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuID0gc2l6ZW9mKHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3MpIC8gc2l6ZW9mKHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NbMF0pOyAvKiBtYXggbGVuZ3RoICovCisgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICovCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoKE5VTEwgPT0gdGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcykgfHwKKyAgICAgICAgKHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuIDwKKyAgICAgICAgIChpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vdCBlbm91Z2ggc3BhY2UgZm9yIHZhbHVlXG4iKTsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisgICAgdGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPQorICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuOworICAgIG1lbWNweSh0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLCBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHIsCisgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4gKgorICAgICAgICAgICBzaXplb2YoaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyWzBdKSk7CisKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKi8KKyAgICB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4ID0gaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWw7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2V0IHJvdyBjb250ZXh0IGluZGV4ZXMKKyAqCisgKiBAcGFyYW0gcmVxcmVxX2N0eCB0aGUgcm93IGNvbnRleHQgdGhhdCBuZWVkcyB1cGRhdGVkIGluZGV4ZXMKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1pYiBpbmRleHMsIHRoZW4gdXBkYXRlcyB0aGUgb2lkIGluZGV4cworICogIGZyb20gdGhlIG1pYiBpbmRleC4KKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoJnJvd3JlcV9jdHgtPnRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJFbnRyeS5pcERlZmF1bHRSb3V0ZXJMaWZldGltZQorICogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWUgaXMgc3ViaWQgNCBvZiBpcERlZmF1bHRSb3V0ZXJFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LjEuNAorICogRGVzY3JpcHRpb246CitUaGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoaXMgcm91dGVyCisgICAgICAgICAgICB3aWxsIGNvbnRpbnVlIHRvIGJlIHVzZWZ1bCBhcyBhIGRlZmF1bHQgcm91dGVyLiAgQSB2YWx1ZSBvZgorICAgICAgICAgICAgemVybyBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBubyBsb25nZXIgdXNlZnVsIGFzIGEgZGVmYXVsdAorICAgICAgICAgICAgcm91dGVyLiAgSXQgaXMgbGVmdCB0byB0aGUgaW1wbGVtZW50ZXIgb2YgdGhlIE1JQiBhcyB0bworICAgICAgICAgICAgd2hldGhlciBhIHJvdXRlciB3aXRoIGEgbGlmZXRpbWUgb2YgemVybyBpcyByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICAgICBsaXN0LgorCisgICAgICAgICAgICBGb3IgSVB2NiwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgZXh0cmFjdGVkIGZyb20gdGhlIHJvdXRlcgorICAgICAgICAgICAgYWR2ZXJ0aXNlbWVudCBtZXNzYWdlcy4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMSAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIFJhbmdlczogIDAgLSA2NTUzNTsKKyAqCisgKiBJdHMgc3ludGF4IGlzIFVOU0lHTkVEMzIgKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLT5kcl9saWZldGltZTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlckVudHJ5LmlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UKKyAqIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgaXMgc3ViaWQgNSBvZiBpcERlZmF1bHRSb3V0ZXJFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LjEuNQorICogRGVzY3JpcHRpb246CitBbiBpbmRpY2F0aW9uIG9mIHByZWZlcmVuY2UgZ2l2ZW4gdG8gdGhpcyByb3V0ZXIgYXMgYQorICAgICAgICAgICAgZGVmYXVsdCByb3V0ZXIgYXMgZGVzY3JpYmVkIGluIGhlIERlZmF1bHQgUm91dGVyCisgICAgICAgICAgICBQcmVmZXJlbmNlcyBkb2N1bWVudC4gIFRyZWF0aW5nIHRoZSB2YWx1ZSBhcyBhCisgICAgICAgICAgICAyIGJpdCBzaWduZWQgaW50ZWdlciBhbGxvd3MgZm9yIHNpbXBsZSBhcml0aG1ldGljCisgICAgICAgICAgICBjb21wYXJpc29ucy4KKworICAgICAgICAgICAgRm9yIElQdjQgcm91dGVycyBvciBJUHY2IHJvdXRlcnMgdGhhdCBhcmUgbm90IHVzaW5nIHRoZQorICAgICAgICAgICAgdXBkYXRlZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBmb3JtYXQsIHRoaXMgb2JqZWN0IGlzIHNldCB0bworICAgICAgICAgICAgbWVkaXVtICgwKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIEVudW0gcmFuZ2U6IDMvOC4gVmFsdWVzOiAgcmVzZXJ2ZWQoLTIpLCBsb3coLTEpLCBtZWRpdW0oMCksIGhpZ2goMSkKKyAqCisgKiBJdHMgc3ludGF4IGlzIElOVEVHRVIgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclByZWZlcmVuY2VfZ2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS0+ZHJfcHJlZmVyZW5jZTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQgKi8KKworCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njk4Njc1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkCisgKgorICogJElkOiQKKyAqCisgKiBAZmlsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCisgKgorICogQGFkZHRvZ3JvdXAgZ2V0CisgKgorICogUHJvdG90eXBlcyBmb3IgZ2V0IGZ1bmN0aW9ucworICoKKyAqIEB7CisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9HRVRfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0dFVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZSBpcyBzdWJpZCAzNyBvZiBpcC4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgICAgICovCisgICAgLyoKKyAgICAgKiBpbmRleGVzCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfZ2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2VfdmFsX3B0cik7CisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgdV9sb25nIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlX3ZhbCwKKyAgICAgICAgIGNoYXIgKmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgIHNpemVfdCBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuLAorICAgICAgICAgbG9uZyBpcERlZmF1bHRSb3V0ZXJJZkluZGV4X3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKTsKKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9HRVRfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDZkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtZW51bXMubTJjIDEyNTI2IDIwMDUtMDctMTUgMjI6NDE6MTZaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9FTlVNU19ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0VOVU1TX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBOT1RFUyBvbiBlbnVtcworICAgICAqID09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBWYWx1ZSBNYXBwaW5nCisgICAgICogLS0tLS0tLS0tLS0tLQorICAgICAqIElmIHRoZSB2YWx1ZXMgZm9yIHlvdXIgZGF0YSB0eXBlIGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICogcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIG1pYiwgeW91IHNob3VsZCBtYXAgdGhlbQorICAgICAqIGJlbG93LiBGb3IgZXhhbXBsZSwgYSBib29sZWFuIGZsYWcgKDEvMCkgaXMgdXN1YWxseSByZXByZXNlbnRlZAorICAgICAqIGFzIGEgVHJ1dGhWYWx1ZSBpbiBhIE1JQiwgd2hpY2ggbWFwcyB0byB0aGUgdmFsdWVzICgxLzIpLgorICAgICAqCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBlbnVtIGRlZmluaXRpb25zIGZvciB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWUgKFVOU0lHTkVEMzIgLyBBU05fVU5TSUdORUQpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJMSUZFVElNRV9FTlVNUworI2RlZmluZSBJUERFRkFVTFRST1VURVJMSUZFVElNRV9FTlVNUworCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX01JTiAgMAorI2RlZmluZSBJUERFRkFVTFRST1VURVJMSUZFVElNRV9NQVggIDB4RkZGRkZGRkZVTAorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX0VOVU1TICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgKEluZXRBZGRyZXNzVHlwZSAvIEFTTl9JTlRFR0VSKQorICoKKyAqIHNpbmNlIGEgVGV4dHVhbCBDb252ZW50aW9uIG1heSBiZSByZWZlcmVuY2VkIG1vcmUgdGhhbiBvbmNlIGluIGEKKyAqIE1JQiwgcHJvdGVjdCBhZ2FpbnQgcmVkZWZpbml0aW9ucyBvZiB0aGUgZW51bSB2YWx1ZXMuCisgKi8KKyNpZm5kZWYgSU5FVEFERFJFU1NUWVBFX0VOVU1TCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9FTlVNUworCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9VTktOT1dOICAwCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0ICAxCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2ICAyCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0WiAgMworI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfSVBWNlogIDQKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0ROUyAgMTYKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTkVUQUREUkVTU1RZUEVfRU5VTVMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0VOVU1TCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfRU5VTVMKKworI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX1JFU0VSVkVEICAtMgorI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0xPVyAgLTEKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRV9NRURJVU0gIDAKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRV9ISUdIICAxCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRV9FTlVNUyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9FTlVNU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhZDcyYgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDEwMjYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZSBpcyBzdWJpZCAzNyBvZiBpcC4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcsIGxlbmd0aDogOAorICovCit0eXBlZGVmIHN0cnVjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4X3MgeworCisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKK30gaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOworCisKK25ldHNubXBfY29udGFpbmVyICoKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKworaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICoKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnVzZXJfY3R4OworfQorCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgoraXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICpvbGQgPQorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHg7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOworICAgIHJldHVybiBvbGQ7Cit9CisKK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7Cit9CisKKy8qCisgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKKyAqLworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vYmplY3RfbG9va3VwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlczsKKy8qKgorICogQGludGVybmFsCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitfaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKyAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0ciwgdV9sb25nIGZsYWdzKQoreworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyAqYWNjZXNzX211bHRpcGxleGVyID0KKyAgICAgICAgJmlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC5hY2Nlc3NfbXVsdGlwbGV4ZXI7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGJsX2luZm8gPQorICAgICAgICAmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnRibF9pbmZvOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcjsKKyAgICBpbnQgICAgICAgICAgICAgbWZkX21vZGVzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UiLCAiY2FsbGVkXG4iKSk7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzYXZlIGludGVyZmFjZSBjb250ZXh0IGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICAgICAqLworICAgIC8qCisgICAgICogU2V0dGluZyB1cCB0aGUgdGFibGUncyBkZWZpbml0aW9uCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGJsX2luZm8sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwRGVmYXVsdFJvdXRlckFkZHJlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICAvKgorICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCisgICAgICovCisgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJUERFRkFVTFRST1VURVJUQUJMRV9NSU5fQ09MOworICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBERUZBVUxUUk9VVEVSVEFCTEVfTUFYX0NPTDsKKworICAgIC8qCisgICAgICogc2F2ZSB1c2VycyBjb250ZXh0CisgICAgICovCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gcmVnX3B0cjsKKworICAgIC8qCisgICAgICogY2FsbCBkYXRhIGFjY2VzcyBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdF9kYXRhKHJlZ19wdHIpOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdCgmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4KTsKKyAgICBpZiAoTlVMTCA9PSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250YWluZXIgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWNjZXNzX211bHRpcGxleGVyOiBSRVFVSVJFRCB3cmFwcGVyIGZvciBnZXQgcmVxdWVzdCBoYW5kbGluZworICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCA9CisgICAgICAgIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfb2JqZWN0X2xvb2t1cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmdldF92YWx1ZXMgPSBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF92YWx1ZXM7CisKKyAgICAvKgorICAgICAqIG5vIHdyYXBwZXJzIHlldAorICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0KKyAgICAgICAgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3Q7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBDcmVhdGUgYSByZWdpc3RyYXRpb24sIHNhdmUgb3VyIHJlZyBkYXRhLCByZWdpc3RlciB0YWJsZS4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGU6aW5pdF9pcERlZmF1bHRSb3V0ZXJUYWJsZSIsCisgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIGlwRGVmYXVsdFJvdXRlclRhYmxlIGFzIGEgbWlicy1mb3ItZHVtbWllcyB0YWJsZS5cbiIpKTsKKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tdWx0aXBsZXhlcl9nZXQoYWNjZXNzX211bHRpcGxleGVyKTsKKyAgICByZWdpbmZvID0KKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWdpbmZvLT5teV9yZWdfdm9pZCA9ICZpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHg7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2V0IHVwIGJhYnkgc3RlcHMgaGFuZGxlciwgY3JlYXRlIGl0IGFuZCBpbmplY3QgaXQKKyAgICAgKi8KKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX09CSkVDVF9MT09LVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUFJFX1JFUVVFU1Q7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKKworI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXR1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY2xlYW51cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NMRUFOVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXRzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUUzsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnJvd19jcmVhdGlvbikKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9ST1dfQ1JFQVRFOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19DT05TSVNURU5DWTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRhYmxlCisgICAgICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YmxfaW5mbyk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqLwordm9pZAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eCk7Cit9CisKK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKQoreworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC50YmxfaW5mby52YWxpZF9jb2x1bW5zID0gdmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBjb252ZXJ0IHRoZSBpbmRleCBjb21wb25lbnQgc3RvcmVkIGluIHRoZSBjb250ZXh0IHRvIGFuIG9pZAorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGU7CisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzczsKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpKTsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUudHlwZSA9IEFTTl9JTlRFR0VSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcykpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnR5cGUgPSBBU05fT0NURVRfU1RSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCkpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS5uZXh0X3ZhcmlhYmxlID0KKyAgICAgICAgJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLm5leHRfdmFyaWFibGUgPSAmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuICoKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NbMF0pKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVySWZJbmRleCgzKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVySWZJbmRleCkpOworCisKKyAgICBlcnIgPSBidWlsZF9vaWRfbm9hbGxvYyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sICZvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSk7CisgICAgaWYgKGVycikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yICVkIGNvbnZlcnRpbmcgaW5kZXggdG8gb2lkXG4iLCBlcnIpOworCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCAqLworCisvKioKKyAqIGV4dHJhY3QgaXBEZWZhdWx0Um91dGVyVGFibGUgaW5kZXhlcyBmcm9tIGEgbmV0c25tcF9pbmRleAorICoKKyAqIEByZXR2YWwgU05NUF9FUlJfTk9FUlJPUiAgOiBubyBlcnJvcgorICogQHJldHZhbCBTTk1QX0VSUl9HRU5FUlIgICA6IGVycm9yCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKDEpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlOworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3M7CisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4KDMpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLCAweDAwLAorICAgICAgICAgICBzaXplb2YodmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKSk7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICBtZW1zZXQoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLCAweDAwLAorICAgICAgICAgICBzaXplb2YodmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MpKTsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy50eXBlID0gQVNOX09DVEVUX1NUUjsKKyAgICBtZW1zZXQoJnZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4LCAweDAwLAorICAgICAgICAgICBzaXplb2YodmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgpKTsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUubmV4dF92YXJpYWJsZSA9CisgICAgICAgICZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzczsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy5uZXh0X3ZhcmlhYmxlID0gJnZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4OworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcGFyc2UgdGhlIG9pZCBpbnRvIHRoZSBpbmRpdmlkdWFsIGluZGV4IGNvbXBvbmVudHMKKyAgICAgKi8KKyAgICBlcnIgPSBwYXJzZV9vaWRfaW5kZXhlcyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSk7CisgICAgaWYgKGVyciA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvcHkgb3V0IHZhbHVlcworICAgICAgICAgKi8KKyAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgPQorICAgICAgICAgICAgKigodV9sb25nICopIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS52YWwuc3RyaW5nKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogTk9URTogdmFsX2xlbiBpcyBpbiBieXRlcywgaXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gbWlnaHQgbm90IGJlCisgICAgICAgICAqLworICAgICAgICBpZiAodmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MudmFsX2xlbiA+CisgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcykpCisgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MudmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWxfbGVuKTsKKyAgICAgICAgICAgIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuID0KKyAgICAgICAgICAgICAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWxfbGVuIC8KKyAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1swXSk7CisgICAgICAgIH0KKyAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVySWZJbmRleCA9CisgICAgICAgICAgICAqKChsb25nICopIHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4LnZhbC5zdHJpbmcpOworCisKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICovCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSAiCisgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4LlxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IGRhdGEpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB0cmFjayBpZiB3ZSBnb3QgZGF0YSBmcm9tIHVzZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzIHw9IE1GRF9ST1dfREFUQV9GUk9NX1VTRVI7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhID0gZGF0YTsKKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09CisgICAgICAgICAgICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEgPQorICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhKCkpKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogdW5kbyBjb250ZXh0IHdpbGwgYmUgYWxsb2NhdGVkIHdoZW4gbmVlZGVkIChpbiAqX3VuZG9fc2V0dXApCisgICAgICovCisKKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgPSByb3dyZXFfY3R4LT5vaWRfdG1wOworCisgICAgcm93cmVxX2N0eC0+aXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9saXN0ID0gTlVMTDsKKworICAgIC8qCisgICAgICogaWYgd2UgYWxsb2NhdGVkIGRhdGEsIGNhbGwgaW5pdCByb3V0aW5lCisgICAgICovCisgICAgaWYgKCEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPQorICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9pbml0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogZm9yIG5vbi10cmFuc2llbnQgZGF0YSwgZG9uJ3QgZnJlZSBkYXRhIHdlIGdvdCBmcm9tIHRoZSB1c2VyCisgICAgICovCisgICAgaWYgKChyb3dyZXFfY3R4LT5kYXRhKSAmJgorICAgICAgICAhKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREFUQV9GUk9NX1VTRVIpKQorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEocm93cmVxX2N0eC0+ZGF0YSk7CisKKyAgICAvKgorICAgICAqIGZyZWUgaW5kZXggb2lkIHBvaW50ZXIKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzICE9IHJvd3JlcV9jdHgtPm9pZF90bXApCisgICAgICAgIGZyZWUocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzKTsKKworICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHJvdyBjb250ZXh0LCBpZiBkZWxldGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHggJiYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkpCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogd2FpdCBmb3IgbGFzdCBjYWxsIGJlZm9yZSBjYWxsaW5nIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndhaXRpbmcgZm9yIGxhc3QgcG9zdF9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHBhY2tldF9yYyA9IG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKGFndHJlcV9pbmZvLT5hc3AsIDApOworICAgIHJjID0gaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0KGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcGFja2V0X3JjKTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImlwRGVmYXVsdFJvdXRlclRhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0XG4iLCByYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uKGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uIiwgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSg0KS9VTlNJR05FRDMyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSTElGRVRJTUU6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSg1KS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICByYyA9IGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2VfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChJUERFRkFVTFRST1VURVJUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IElQREVGQVVMVFJPVVRFUlRBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKKyAgICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spICh2b2lkICopOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF92YWx1ZXMiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgb2xkIHBvaW50ZXIsIHNvIHdlIGNhbiBmcmVlIGl0IGlmIHJlcGxhY2VkCisgICAgICAgICAqLworICAgICAgICBvbGRfc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZzsKKyAgICAgICAgZGF0YUZyZWVIb29rID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+ZGF0YUZyZWVIb29rOworICAgICAgICBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmOworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmID09CisgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X2NvbHVtbihyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjYWNoZSBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS0+bWFnaWMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfbG9hZCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jYWNoZV9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIGluIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYzsKKworICAgIF9jb250YWluZXJfZnJlZShjb250YWluZXIpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9pdGVtX2ZyZWUoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfY29udGFpbmVyX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgaW4gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGZyZWUgYWxsIGl0ZW1zLiBpbmVmZmljaWVudCwgYnV0IGVhc3kuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jb250YWluZXJfaXRlbV9mcmVlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBpbml0aWFsaXplIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBjYWNoZSBpbml0CisgICAgICovCisgICAgaWZfY3R4LT5jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZF9zaXplKTsKKworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlwRGVmYXVsdFJvdXRlclRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgaW4gIgorICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKE5VTEwgIT0gaWZfY3R4LT5jYWNoZSkKKyAgICAgICAgaWZfY3R4LT5jYWNoZS0+bWFnaWMgPSAodm9pZCAqKSBpZl9jdHgtPmNvbnRhaW5lcjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpZl9jdHgtPmNvbnRhaW5lcik7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoaWZfY3R4LT5jb250YWluZXIpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfT0lEX0xFTl07CisgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgc3RvcmFnZSBmb3IgT0lECisgICAgICovCisgICAgb2lkX2lkeC5vaWRzID0gb2lkX3RtcDsKKyAgICBvaWRfaWR4LmxlbiA9IHNpemVvZihvaWRfdG1wKSAvIHNpemVvZihvaWQpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0CisgICAgICovCisgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF90b19vaWQoJm9pZF9pZHgsIG1pYl9pZHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3dyZXFfY3R4ID0KKyAgICAgICAgQ09OVEFJTkVSX0ZJTkQoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc4MDQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlOiBSb3V0aW5lcyB0byBpbnRlcmZhY2UgdG8gTmV0LVNOTVAKKyAqCisgKiBcd2FybmluZyBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgY2FsbGVkIGRpcmVjdGx5LAorICogICAgICAgICAgb3IgdXNlZCB0byBpbnRlcnByZXQgZnVuY3Rpb25hbGl0eS4gSXQgaXMgc3ViamVjdCB0bworICogICAgICAgICAgY2hhbmdlIGF0IGFueSB0aW1lLgorICogCisgKiBAeworICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfSU5URVJGQUNFX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfSU5URVJGQUNFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKiBQVUJMSUMgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jdHgsIHVfbG9uZyBmbGFncyk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY3R4KTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uX3NldAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICppcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpOworICAgIGludCAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICopOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworICAgIGludCAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisKKyAgICAvKgorICAgICAqIGFjY2VzcyB0byBjZXJ0YWluIGludGVybmFscy4gdXNlIHdpdGggY2F1dGlvbiEKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQREVGQVVMVFJPVVRFUlRBQkxFX0lOVEVSRkFDRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTRlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1vaWRzLm0yYyAxMjg1NSAyMDA1LTA5LTI3IDE1OjU2OjA4WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEU19ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX09JRFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUgCisgICAgICovCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX09JRCAgICAgICAgICAgICAgMSwzLDYsMSwyLDEsNCwzNworCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJBRERSRVNTVFlQRSAgICAgICAgIDEKKworI2RlZmluZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSQUREUkVTUyAgICAgICAgIDIKKworI2RlZmluZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSSUZJTkRFWCAgICAgICAgIDMKKworI2RlZmluZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSTElGRVRJTUUgICAgICAgICA0CisKKyNkZWZpbmUgQ09MVU1OX0lQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0UgICAgICAgICA1CisKKworI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9NSU5fQ09MICAgQ09MVU1OX0lQREVGQVVMVFJPVVRFUkxJRkVUSU1FCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX01BWF9DT0wgICBDT0xVTU5fSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRQorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUuaApAQCAtMCwwICsxLDggQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cykKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDgwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBpcElmU3RhdHNUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworY29uc3Qgb2lkICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZFtdID0geyBJUElGU1RBVFNUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcElmU3RhdHNUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaXBJZlN0YXRzVGFibGVfb2lkKTsKKworaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uIGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKK3N0YXRpYyBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wOworCit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9pcElmU3RhdHNUYWJsZSh2b2lkKTsKKworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBpcElmU3RhdHNUYWJsZSBtb2R1bGUKKyAqLwordm9pZAoraW5pdF9pcElmU3RhdHNUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmluaXRfaXBJZlN0YXRzVGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gaXBJZlN0YXRzVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiaXBJZlN0YXRzVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSgpOworCisgICAgLyoKKyAgICAgKiBsYXN0IGNoYW5nZWQgc2hvdWxkIGJlIDAgYXQgc3RhcnR1cAorICAgICAqLworICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KDApOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2lwSWZTdGF0c1RhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBpcElmU3RhdHNUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJpcElmU3RhdHNUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9pcElmU3RhdHNUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmluaXRpYWxpemVfdGFibGVfaXBJZlN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDE6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBvbmUtdGltZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVE9ETzozMDI6bzogfC0+SW5pdGlhbGl6ZSBpcElmU3RhdHNUYWJsZSB1c2VyIGNvbnRleHQKKyAgICAgKiBpZiB5b3UnZCBsaWtlIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIHNvbWUgZGF0YSBmb3IgdGhpcworICAgICAqIHRhYmxlLCBhbGxvY2F0ZSBvciBzZXQgaXQgdXAgaGVyZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGEgbmV0c25tcF9kYXRhX2xpc3QgaXMgYSBzaW1wbGUgd2F5IHRvIHN0b3JlIHZvaWQgcG9pbnRlcnMuIEEgc2ltcGxlCisgICAgICogc3RyaW5nIHRva2VuIGlzIHVzZWQgdG8gYWRkLCBmaW5kIG9yIHJlbW92ZSBwb2ludGVycy4KKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcAorCT0gbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KCJpcElmU3RhdHNUYWJsZSIsIE5VTEwsIE5VTEwpOworCisgICAgLyoKKyAgICAgKiBObyBzdXBwb3J0IGZvciBhbnkgZmxhZ3MgeWV0LCBidXQgaW4gdGhlIGZ1dHVyZSB5b3Ugd291bGQKKyAgICAgKiBzZXQgYW55IGZsYWdzIGhlcmUuCisgICAgICovCisgICAgZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisJKGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wLCBmbGFncyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemVfdGFibGVfaXBJZlN0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUgCisgKi8KK3ZvaWQKK3NodXRkb3duX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBzaHV0ZG93biBjb2RlCisgICAgICovCisgICAgX2lwSWZTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMDpvOiB8LT4gUGVyZm9ybSBleHRyYSBpcElmU3RhdHNUYWJsZSByb3dyZXEgaW5pdGlhbGl6YXRpb24uIChlZyBERUZWQUxTKQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwSWZTdGF0c1RhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUocm93cmVxX2N0eC0+ZGF0YSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YSA9IE5VTEw7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLworCisvKioKKyAqIHByZS1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTExOm86IFBlcmZvcm0gaXBJZlN0YXRzVGFibGUgcG9zdC1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE5NTZmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBJRlNUQVRTVEFCTEVfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oPgorCisgICAgLyoKKyAgICAgKiBvdGhlciByZXF1aXJlZCBtb2R1bGUgY29tcG9uZW50cyAKKyAgICAgKi8KKyAgICAvKiAqSU5ERU5ULU9GRiogICovCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0KQorICAgIC8qICpJTkRFTlQtT04qICAqLworCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGlwSWZTdGF0c1RhYmxlIAorICAgICAqLworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwSWZTdGF0c1RhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9pcElmU3RhdHNUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogV2hlbiB5b3UgcmVnaXN0ZXIgeW91ciBtaWIsIHlvdSBnZXQgdG8gcHJvdmlkZSBhIGdlbmVyaWMKKyAgICAgKiBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3UgZm9yIG1vc3Qgb2YgdGhlCisgICAgICogZnVuY3Rpb25zIGNhbGxzLgorICAgICAqCisgICAgICogVE9ETzoxMDA6cjogUmV2aWV3IGFsbCBjb250ZXh0IHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRPRE86MTAxOm86IHwtPiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RhdGFfbGlzdCBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgc3RydWN0dXJlLgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBkYXRhIGZvciBpcElmU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgaXBJZlN0YXRzVGFibGVfZGF0YTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMDpyOiB8LT4gUmV2aWV3IGlwSWZTdGF0c1RhYmxlIG1pYiBpbmRleC4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggZm9yIGlwSWZTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleF9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJUFZlcnNpb24oMSkvSW5ldFZlcnNpb24vQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgaXBJZlN0YXRzSVBWZXJzaW9uOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0lmSW5kZXgoMikvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwSWZTdGF0c0lmSW5kZXg7CisKKworICAgIH0gaXBJZlN0YXRzVGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICovCisjZGVmaW5lIE1BWF9pcElmU3RhdHNUYWJsZV9JRFhfTEVOICAgICAyCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfaXBJZlN0YXRzVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfZGF0YSAqZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiBmbGFncyBwZXIgcm93LiBDdXJyZW50bHksIHRoZSBmaXJzdCAobG93ZXIpIDggYml0cyBhcmUgcmVzZXJ2ZWQKKyAgICAgICAgICogZm9yIHRoZSB1c2VyLiBTZWUgbWZkLmggZm9yIG90aGVyIGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICAgIHJvd3JlcV9mbGFnczsKKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjEzMTpvOiB8ICAgfC0+IEFkZCB1c2VmdWwgZGF0YSB0byBpcElmU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgICAgICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBrbm93bl9taXNzaW5nOworICAgICAgICB1aW50MzJfdCAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBpcElmU3RhdHNSZWZyZXNoUmF0ZTsKKworICAgICAgICAvKgorICAgICAgICAgKiBzdG9yYWdlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqaXBJZlN0YXRzVGFibGVfZGF0YV9saXN0OworCisgICAgfSBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXBJZlN0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHhfcyB7CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgfSBpcElmU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eDsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaXBJZlN0YXRzVGFibGVfZGF0YSAqaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKGlwSWZTdGF0c1RhYmxlX2RhdGEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisKKworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmlwSWZTdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpOworCisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwSWZTdGF0c1RhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpcElmU3RhdHNUYWJsZV9vaWRfc2l6ZTsKKworCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9kYXRhX2dldC5oIgorCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTE5ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGUuaCIKKworCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKworc3RhdGljIGludCAgICAgIGlwaXNfY2FjaGVfcmVmcmVzaCA9IElQSUZTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7CisKKy8qKiBAaW5ncm91cCBpbnRlcmZhY2UKKyAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZGF0YSB1c2VkIHRvIHNhdGlzZnkKKyAqIHJlcXVlc3RzLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMsIGxlbmd0aDogOQorICovCisKKy8qKgorICogaW5pdGlhbGl6YXRpb24gZm9yIGlwSWZTdGF0c1RhYmxlIGRhdGEgYWNjZXNzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvCisgKiBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIHlvdSBuZWVkIGZvciB0aGUgZGF0YSB0YWJsZS4KKyAqCisgKiBAcGFyYW0gaXBJZlN0YXRzVGFibGVfcmVnCisgKiAgICAgICAgUG9pbnRlciB0byBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiB1bnJlY292ZXJhYmxlIGVycm9yLgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2luaXRfZGF0YShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiBpcElmU3RhdHNUYWJsZV9yZWcpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgaXBJZlN0YXRzVGFibGUgZGF0YS4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19pbml0KCk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2luaXRfZGF0YSAqLworCisvKioKKyAqIGNvbnRhaW5lciBvdmVydmlldworICoKKyAqLworCisvKioKKyAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CisgKiAgICAgICAgY3JlYXRlIGEgY3VzdG9tIGNvbnRhaW5lciwgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHJldHVybiBpdAorICogICAgICAgIHRvIHRoZSBNRkQgaGVscGVyLiBJZiBzZXQgdG8gTlVMTCwgdGhlIE1GRCBoZWxwZXIgd2lsbAorICogICAgICAgIGFsbG9jYXRlIGEgY29udGFpbmVyIGZvciB5b3UuCisgKiBAcGFyYW0gIGNhY2hlIEEgcG9pbnRlciB0byBhIGNhY2hlIHN0cnVjdHVyZS4gWW91IGNhbiBzZXQgdGhlIHRpbWVvdXQKKyAqICAgICAgICAgYW5kIG90aGVyIGNhY2hlIGZsYWdzIHVzaW5nIHRoaXMgcG9pbnRlci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogIFRoaXMgaXMgYWxzbyB0aGUgcGxhY2UgdG8gc2V0IHVwIGNhY2hlIGJlaGF2aW9yLiBUaGUgZGVmYXVsdCwgdG8KKyAqICBzaW1wbHkgc2V0IHRoZSBjYWNoZSB0aW1lb3V0LCB3aWxsIHdvcmsgd2VsbCB3aXRoIHRoZSBkZWZhdWx0CisgKiAgY29udGFpbmVyLiBJZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIGNvbnRhaW5lciwgeW91IG1heSB3YW50IHRvCisgKiAgbG9vayBhdCB0aGUgY2FjaGUgaGVscGVyIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkKKyAqICBmbGFncyB5b3Ugd2FudCB0byBzZXQuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKiogY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgLyoKKyAgICAgKiBXZSBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyIGhlcmUgc28gd2UgY2FuIHByZS1sb2FkIGl0LCB3aGljaAorICAgICAqIHdpbGwgcmVzdWx0IGluIGFsbCBuZXcgZW50cmllcyB3aXRoIGxhc3QgY2hhbmdlZCB2YWx1ZXMuIHdlIG5lZWQKKyAgICAgKiB0byBjbGVhciB0aG9zZS4uLiAgV2UgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBpZkluZGV4ZXMgaGF2ZSBiZWVuCisgICAgICogYXNzaWduZWQuLi4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcElmU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCAhPSAqY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgKCpjb250YWluZXJfcHRyX3B0ciktPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcElmU3RhdHNUYWJsZSIpOworICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCgqY29udGFpbmVyX3B0cl9wdHIpOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNhY2hlIHBhcmFtIHRvIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogVE9ETzozNDU6QTogU2V0IHVwIGlwSWZTdGF0c1RhYmxlIGNhY2hlIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCisgICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKKyAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAorICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCisgICAgICovCisgICAgY2FjaGUtPnRpbWVvdXQgPSBJUElGU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUOyAgICAgIC8qIHNlY29uZHMgKi8KKworICAgIGNhY2hlLT5mbGFncyB8PQorICAgICAgICAoTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSB8IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQKKyAgICAgICAgIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQgfAorICAgICAgICAgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogY2hlY2sgZW50cnkgZm9yIHVwZGF0ZQorICovCitzdGF0aWMgdm9pZAorX2NoZWNrX2Zvcl91cGRhdGVzKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpzdGF0cykKK3sKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICppZnN0YXRzX2VudHJ5OworCisgICAgLyoKKyAgICAgKiBjaGVjayBmb3IgbWF0Y2hpbmcgZW50cnkuIHdvcmtzIGJlY2F1c2UgaW5kZXhlcyBhcmUgdGhlIHNhbWUuCisgICAgICovCisgICAgaWZzdGF0c19lbnRyeSA9IChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KilDT05UQUlORVJfRklORChzdGF0cywgcm93cmVxX2N0eC0+ZGF0YSk7CisgICAgaWYgKE5VTEwgPT0gaWZzdGF0c19lbnRyeSkgeworICAgICAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGU6YWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgInVwZGF0aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBtYXJrIHJvdyBhcyBtaXNzaW5nLCBzbyB3ZSBjYW4gc2V0IGRpc2NvbnRpbnVpdHkKKyAgICAgICAgICogd2hlbiBpdCBjb21lcyBiYWNrLgorICAgICAgICAgKgorICAgICAgICAgKiB3aGF0IGVsc2Ugc2hvdWxkIHdlIGRvPyBzZXQgcmVmcmVzaCB0byAwPyB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0Li4uCisgICAgICAgICAqLworICAgICAgICByb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGU6YWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgInVwZGF0aW5nIGV4aXN0aW5nIGVudHJ5XG4iKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIGNoYW5nZXMgJiB1cGRhdGUKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X3VwZGF0ZShyb3dyZXFfY3R4LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnN0YXRzX2VudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBzZXQgZGlzY29udGludWl0eSBpZiBwcmV2aW91c2x5IG1pc3NpbmcuCisgICAgICAgICAqLworICAgICAgICBpZiAoMSA9PSByb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nKSB7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nID0gMDsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSBlbnRyeSBmcm9tIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShzdGF0cywgaWZzdGF0c19lbnRyeSk7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoaWZzdGF0c19lbnRyeSk7CisgICAgfQorfQorCisvKioKKyAqIGFkZCBuZXcgZW50cnkKKyAqLworc3RhdGljIHZvaWQKK19hZGRfbmV3KG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmlmc3RhdHNfZW50cnksCisgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGU6YWNjZXNzIiwgImNyZWF0aW5nIG5ldyBlbnRyeVxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpZnN0YXRzX2VudHJ5KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIGFuIHJvdyBjb250ZXh0IGFuZCBzZXQgdGhlIGluZGV4KGVzKQorICAgICAqLworICAgIHJvd3JlcV9jdHggPQorICAgICAgICBpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlmc3RhdHNfZW50cnksIE5VTEwpOworICAgIGlmICgoTlVMTCAhPSByb3dyZXFfY3R4KQorICAgICAgICAmJiAoTUZEX1NVQ0NFU1MgPT0KKyAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnN0YXRzX2VudHJ5LT5pbmRleFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmc3RhdHNfZW50cnktPmluZGV4WzFdKSkpIHsKKyAgICAgICAgcm93cmVxX2N0eC0+aXBJZlN0YXRzUmVmcmVzaFJhdGUgPSBpcGlzX2NhY2hlX3JlZnJlc2ggKiAxMDAwOyAgIC8qIG1pbGxpLXNlY29uZHMgKi8KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICBpcElmU3RhdHNUYWJsZV9sYXN0Q2hhbmdlX3NldChuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gcm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoaWZzdGF0c19lbnRyeSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogY29udGFpbmVyIHNodXRkb3duCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHIgQSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHNodXRkb3duIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKCkuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGNsZWFudXAgbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIGNsb3NpbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgc3VwcGxpZWQgdGhlIGRhdGEsIGNsb3NpbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXJfcHRyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIHBhcmFtcyB0byBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisvKioKKyAqIGxvYWQgaW5pdGlhbCBkYXRhCisgKgorICogVE9ETzozNTA6TTogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIGRhdGEgbG9hZAorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBjYWNoZSBoZWxwZXIgdG8gbG9hZAorICogdGhlIGNvbnRhaW5lciBhZ2FpbiAoYWZ0ZXIgdGhlIGNvbnRhaW5lciBmcmVlIGZ1bmN0aW9uIGhhcyBiZWVuCisgKiBjYWxsZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgY29udGVudHMpLgorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHRvIHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBpbnNlcnRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFIDogQ2FuJ3QgYWNjZXNzIGRhdGEgc291cmNlCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBpbmRleChlcykgKGFuZCBkYXRhLCBvcHRpb25hbGx5KQorICogIGZvciB0aGUgZXZlcnkgcm93IGluIHRoZSBkYXRhIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgV2hpbGUgbG9hZGluZyB0aGUgZGF0YSwgdGhlIG9ubHkgaW1wb3J0YW50IHRoaW5nIGlzIHRoZSBpbmRleGVzLgorICogIElmIGFjY2VzcyB0byB5b3VyIGRhdGEgaXMgY2hlYXAvZmFzdCAoZS5nLiB5b3UgaGF2ZSBhIHBvaW50ZXIgdG8gYQorICogIHN0cnVjdHVyZSBpbiBtZW1vcnkpLCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHVwZGF0ZSB0aGUgZGF0YSBoZXJlLgorICogIElmLCBob3dldmVyLCB0aGUgYWNjZXNzaW5nIHRoZSBkYXRhIGludm92bGVzIG1vcmUgd29yayAoZS5nLiBwYXJzaW5nCisgKiAgc29tZSBvdGhlciBleGlzdGluZyBkYXRhLCBvciBwZWZvcm1pbmcgY2FsY3VsYXRpb25zIHRvIGRlcml2ZSB0aGUgZGF0YSksCisgKiAgdGhlbiB5b3UgY2FuIGxpbWl0IHlvdXJzZWxmIHRvIHNldHRpbmcgdGhlIGluZGV4ZXMgYW5kIHNhdmluZyBhbnkKKyAqICBpbmZvcm1hdGlvbiB5b3Ugd2lsbCBuZWVkIGxhdGVyLiBUaGVuIHVzZSB0aGUgc2F2ZWQgaW5mb3JtYXRpb24gaW4KKyAqICBpcElmU3RhdHNUYWJsZV9yb3dfcHJlcCgpIGZvciBwb3B1bGF0aW5nIGRhdGEuCisgKgorICogQG5vdGUKKyAqICBJZiB5b3UgbmVlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHJvd3MgKGxpa2UgeW91IHdhbnQgc3RhdGlzdGljcworICogIGZvciBlYWNoIHJvdyB0byBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgZnJhbWUpLCB5b3Ugc2hvdWxkIHNldCBhbGwKKyAqICBkYXRhIGhlcmUuCisgKgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpzdGF0czsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICBzdGF0cyA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9sb2FkKE5VTEwsIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSk7CisgICAgaWYgKE5VTEwgPT0gc3RhdHMpCisgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7ICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKworICAgIC8qCisgICAgICogVE9ETzozNTE6TTogfC0+IExvYWQvdXBkYXRlIGRhdGEgaW4gdGhlIGlwSWZTdGF0c1RhYmxlIGNvbnRhaW5lci4KKyAgICAgKiBsb29wIG92ZXIgeW91ciBpcElmU3RhdHNUYWJsZSBkYXRhLCBhbGxvY2F0ZSBhIHJvd3JlcSBjb250ZXh0LAorICAgICAqIHNldCB0aGUgaW5kZXgoZXMpIFthbmQgZGF0YSwgb3B0aW9uYWxseV0gYW5kIGluc2VydCBpbnRvCisgICAgICogdGhlIGNvbnRhaW5lci4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogd2UganVzdCBnb3QgYSBmcmVzaCBjb3B5IG9mIGRhdGEuIGNvbXBhcmUgaXQgdG8KKyAgICAgKiB3aGF0IHdlJ3ZlIGFscmVhZHkgZ290LCBhbmQgbWFrZSBhbnkgYWRqdXN0ZW1lbnRzLi4uCisgICAgICovCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGNvbnRhaW5lciwgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCisgICAgICAgICAgICAgICAgICAgICAgIF9jaGVja19mb3JfdXBkYXRlcywgc3RhdHMpOworCisgICAgLyoKKyAgICAgKiBub3cgYWRkIGFueSBuZXcgZW50cmllcworICAgICAqLworICAgIENPTlRBSU5FUl9GT1JfRUFDSChzdGF0cywgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCisgICAgICAgICAgICAgICAgICAgICAgIF9hZGRfbmV3LCBjb250YWluZXIpOworCisKKyAgICAvKgorICAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggaWZlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCisgICAgICogc28gdGhlIGRhbCBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfRE9OVF9DTEVBUik7CisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICIlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCAqLworCisvKioKKyAqIGNvbnRhaW5lciBjbGVhbiB1cAorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHdpdGggYWxsIGN1cnJlbnQgaXRlbXMKKyAqCisgKiAgVGhpcyBvcHRpb25hbCBjYWxsYmFjayBpcyBjYWxsZWQgcHJpb3IgdG8gYWxsCisgKiAgaXRlbSdzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyLiBJZiB5b3UKKyAqICBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGJlZm9yZSB0aGF0LCBkbyBpdCBoZXJlLgorICoKKyAqIEBub3RlCisgKiAgVGhlIE1GRCBoZWxwZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVsZWFzaW5nIGFsbCB0aGUgcm93IGNvbnRleHRzLgorICoKKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBpcElmU3RhdHNUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfcm93X3ByZXAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcm93X3ByZXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzkwOm86IFByZXBhcmUgcm93IGZvciByZXF1ZXN0LgorICAgICAqIElmIHBvcHVsYXRpbmcgcm93IGRhdGEgd2FzIGRlbGF5ZWQsIHRoaXMgaXMgdGhlIHBsYWNlIHRvCisgICAgICogZmlsbCBpbiB0aGUgcm93IGZvciB0aGlzIHJlcXVlc3QuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwICovCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY3NjgyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19ICisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9pbml0X2RhdGEoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlZyk7CisKKworICAgIC8qCisgICAgICogVE9ETzoxODA6bzogUmV2aWV3IGlwSWZTdGF0c1RhYmxlIGNhY2hlIHRpbWVvdXQuCisgICAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgY2FjaGUgdGltZXMgb3V0CisgICAgICovCisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQgICA2MAorCisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfY2FjaGVfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfY2FjaGVfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dfcHJlcChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzNkYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5jCkBAIC0wLDAgKzEsMzAxNSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9nZXQgZGF0YV9nZXQ6IFJvdXRpbmVzIHRvIGdldCBkYXRhCisgKgorICogVE9ETzoyMzA6TTogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIGdldCByb3V0aW5lcy4KKyAqIFRPRE86MjQwOk06IEltcGxlbWVudCBpcElmU3RhdHNUYWJsZSBtYXBwaW5nIHJvdXRpbmVzIChpZiBhbnkpLgorICoKKyAqIFRoZXNlIHJvdXRpbmUgYXJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB3aGVyZSB0aGUKKyAqIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQuCisgKgorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcElmU3RhdHNUYWJsZSBpcyBzdWJpZCAzIG9mIGlwVHJhZmZpY1N0YXRzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBpcElmU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisvKgorICogaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YQorICoKKyAqIFB1cnBvc2U6IGNyZWF0ZSBuZXcgaXBJZlN0YXRzVGFibGVfZGF0YS4KKyAqLworaXBJZlN0YXRzVGFibGVfZGF0YSAqCitpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBUT0RPOjIwMTpyOiB8LT4gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXBJZlN0YXRzVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAqLworICAgIGlwSWZTdGF0c1RhYmxlX2RhdGEgKnJ0biA9IFNOTVBfTUFMTE9DX1RZUEVERUYoaXBJZlN0YXRzVGFibGVfZGF0YSk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBydG4pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuYWJsZSB0byBtYWxsb2MgbWVtb3J5IGZvciBuZXcgIgorICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGVfZGF0YS5cbiIpOworICAgIH0KKworICAgIHJldHVybiBydG47Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEgKi8KKworLyoKKyAqIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YQorICoKKyAqIFB1cnBvc2U6IHJlbGVhc2UgaXBJZlN0YXRzVGFibGUgZGF0YS4KKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKGlwSWZTdGF0c1RhYmxlX2RhdGEgKiBkYXRhKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIwMjpyOiB8LT4gcmVsZWFzZSBtZW1vcnkgZm9yIHRoZSBpcElmU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgZnJlZShkYXRhKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhICovCisKKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwKKyAqIEBwYXJhbSBpcElmU3RhdHNJZkluZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBpcElmU3RhdHNJUFZlcnNpb24oMSkvSW5ldFZlcnNpb24vQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oIAorICAgICAqLworICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfaWZzdGF0c19lbnRyeSAqLworICAgIHRibF9pZHgtPmlwSWZTdGF0c0lQVmVyc2lvbiA9IGlwSWZTdGF0c0lQVmVyc2lvbl92YWw7CisKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lmSW5kZXgoMikvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2lmc3RhdHNfZW50cnkgKi8KKyAgICB0YmxfaWR4LT5pcElmU3RhdHNJZkluZGV4ID0gaXBJZlN0YXRzSWZJbmRleF92YWw7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2V0IHJvdyBjb250ZXh0IGluZGV4ZXMKKyAqCisgKiBAcGFyYW0gcmVxcmVxX2N0eCB0aGUgcm93IGNvbnRleHQgdGhhdCBuZWVkcyB1cGRhdGVkIGluZGV4ZXMKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1pYiBpbmRleHMsIHRoZW4gdXBkYXRlcyB0aGUgb2lkIGluZGV4cworICogIGZyb20gdGhlIG1pYiBpbmRleC4KKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoJnJvd3JlcV9jdHgtPnRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJZkluZGV4X3ZhbCkpCisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQgbWliIGluZGV4IHRvIG9pZCBpbmRleAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gc2l6ZW9mKHJvd3JlcV9jdHgtPm9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisgICAgaWYgKDAgIT0gaXBJZlN0YXRzVGFibGVfaW5kZXhfdG9fb2lkKCZyb3dyZXFfY3R4LT5vaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+dGJsX2lkeCkpIHsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5SZWNlaXZlcworICogaXBJZlN0YXRzSW5SZWNlaXZlcyBpcyBzdWJpZCAzIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgcmVjZWl2ZWQsIGluY2x1ZGluZworICAgICAgICAgICAgdGhvc2UgcmVjZWl2ZWQgaW4gZXJyb3IuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5SZWNlaXZlcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luUmVjZWl2ZXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luUmVjZWl2ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5SZWNlaXZlc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblJlY2VpdmVzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luUmVjZWl2ZXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJblJlY2VpdmVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ0luUmVjZWl2ZXMKKyAqIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyBpcyBzdWJpZCA0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgcmVjZWl2ZWQsIGluY2x1ZGluZworICAgICAgICAgICAgdGhvc2UgcmVjZWl2ZWQgaW4gZXJyb3IuICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUKKyAgICAgICAgICAgIGRhdGFncmFtcyBhcyBpcElmU3RhdHNJblJlY2VpdmVzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIKKyAgICAgICAgICAgIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luUmVjZWl2ZXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5SZWNlaXZlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luUmVjZWl2ZXMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93OworICAgICgqaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJblJlY2VpdmVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk9jdGV0cworICogaXBJZlN0YXRzSW5PY3RldHMgaXMgc3ViaWQgNSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS41CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIGlucHV0IElQIGRhdGFncmFtcywKKyAgICAgICAgICAgIGluY2x1ZGluZyB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4gIE9jdGV0cyBmcm9tIGRhdGFncmFtcworICAgICAgICAgICAgY291bnRlZCBpbiBpcElmU3RhdHNJblJlY2VpdmVzIE1VU1QgYmUgY291bnRlZCBoZXJlLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luT2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5PY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luT2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5PY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luT2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luT2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5PY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5PY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5PY3RldHMKKyAqIGlwSWZTdGF0c0hDSW5PY3RldHMgaXMgc3ViaWQgNiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS42CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIGlucHV0IElQIGRhdGFncmFtcywKKyAgICAgICAgICAgIGluY2x1ZGluZyB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUKKyAgICAgICAgICAgIHNhbWUgb2N0ZXRzIGFzIGlwSWZTdGF0c0luT2N0ZXRzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIKKyAgICAgICAgICAgIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luT2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENJbk9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luT2N0ZXRzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5PY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk9jdGV0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ0luT2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkhkckVycm9ycworICogaXBJZlN0YXRzSW5IZHJFcnJvcnMgaXMgc3ViaWQgNyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS43CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgaW5wdXQgSVAgZGF0YWdyYW1zIGRpc2NhcmRlZCBkdWUgdG8gZXJyb3JzIGluCisgICAgICAgICAgICB0aGVpciBJUCBoZWFkZXJzLCBpbmNsdWRpbmcgdmVyc2lvbiBudW1iZXIgbWlzbWF0Y2gsIG90aGVyCisgICAgICAgICAgICBmb3JtYXQgZXJyb3JzLCBob3AgY291bnQgZXhjZWVkZWQsIGVycm9ycyBkaXNjb3ZlcmVkIGluCisgICAgICAgICAgICBwcm9jZXNzaW5nIHRoZWlyIElQIG9wdGlvbnMsIGV0Yy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkhkckVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkhkckVycm9yc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbkhkckVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkhkckVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluSGRyRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbkhkckVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5Ob1JvdXRlcworICogaXBJZlN0YXRzSW5Ob1JvdXRlcyBpcyBzdWJpZCA4IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjgKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGJlY2F1c2Ugbm8gcm91dGUKKyAgICAgICAgICAgIGNvdWxkIGJlIGZvdW5kIHRvIHRyYW5zbWl0IHRoZW0gdG8gdGhlaXIgZGVzdGluYXRpb24uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5Ob1JvdXRlcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5Ob1JvdXRlc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk5vUm91dGVzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTm9Sb3V0ZXMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbk5vUm91dGVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkFkZHJFcnJvcnMKKyAqIGlwSWZTdGF0c0luQWRkckVycm9ycyBpcyBzdWJpZCA5IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjkKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIElQCisgICAgICAgICAgICBhZGRyZXNzIGluIHRoZWlyIElQIGhlYWRlcidzIGRlc3RpbmF0aW9uIGZpZWxkIHdhcyBub3QgYQorICAgICAgICAgICAgdmFsaWQgYWRkcmVzcyB0byBiZSByZWNlaXZlZCBhdCB0aGlzIGVudGl0eS4gIFRoaXMgY291bnQKKyAgICAgICAgICAgIGluY2x1ZGVzIGludmFsaWQgYWRkcmVzc2VzIChlLmcuLCA6OjApLiAgRm9yIGVudGl0aWVzIHRoYXQKKyAgICAgICAgICAgIGFyZSBub3QgSVAgcm91dGVycyBhbmQgdGhlcmVmb3JlIGRvIG5vdCBmb3J3YXJkIGRhdGFncmFtcywKKyAgICAgICAgICAgIHRoaXMgY291bnRlciBpbmNsdWRlcyBkYXRhZ3JhbXMgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgICAgICAgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzIHdhcyBub3QgYSBsb2NhbCBhZGRyZXNzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luQWRkckVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luQWRkckVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkFkZHJFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JbkFkZHJFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luQWRkckVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zCisgKiBpcElmU3RhdHNJblVua25vd25Qcm90b3MgaXMgc3ViaWQgMTAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTAKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBsb2NhbGx5LWFkZHJlc3NlZCBJUCBkYXRhZ3JhbXMgcmVjZWl2ZWQKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBidXQgZGlzY2FyZGVkIGJlY2F1c2Ugb2YgYW4gdW5rbm93biBvcgorICAgICAgICAgICAgdW5zdXBwb3J0ZWQgcHJvdG9jb2wuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGRhdGFncmFtcyB3ZXJlIGFkZHJlc3NlZCBpcworICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGRhdGFncmFtcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorCisKKworICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblVua25vd25Qcm90b3MgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJblVua25vd25Qcm90b3NfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJblVua25vd25Qcm90b3NfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cworICogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzIGlzIHN1YmlkIDExIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjExCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgaW5wdXQgSVAgZGF0YWdyYW1zIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgZGF0YWdyYW0gZnJhbWUgZGlkbid0IGNhcnJ5IGVub3VnaCBkYXRhLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblRydW5jYXRlZFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JblRydW5jYXRlZFBrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zCisgKiBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMTIgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTIKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QKKyAgICAgICAgICAgIHRoZWlyIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggdGhpcyBlbnRpdHkKKyAgICAgICAgICAgIGF0dGVtcHRlZCB0byBmaW5kIGEgcm91dGUgdG8gZm9yd2FyZCB0aGVtIHRvIHRoYXQgZmluYWwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLiAgSW4gZW50aXRpZXMgdGhhdCBkbyBub3QgYWN0IGFzIElQIHJvdXRlcnMsCisgICAgICAgICAgICB0aGlzIGNvdW50ZXIgd2lsbCBpbmNsdWRlIG9ubHkgdGhvc2UgZGF0YWdyYW1zIHRoYXQgd2VyZQorICAgICAgICAgICAgU291cmNlLVJvdXRlZCB2aWEgdGhpcyBlbnRpdHksIGFuZCB0aGUgU291cmNlLVJvdXRlCisgICAgICAgICAgICBwcm9jZXNzaW5nIHdhcyBzdWNjZXNzZnVsLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIGluY29taW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBkYXRhZ3JhbS4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMKKyAqIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zIGlzIHN1YmlkIDEzIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgaW5wdXQgZGF0YWdyYW1zIGZvciB3aGljaCB0aGlzIGVudGl0eSB3YXMgbm90CisgICAgICAgICAgICB0aGVpciBmaW5hbCBJUCBkZXN0aW5hdGlvbiBhbmQgZm9yIHdoaWNoIHRoaXMgZW50aXR5CisgICAgICAgICAgICBhdHRlbXB0ZWQgdG8gZmluZCBhIHJvdXRlIHRvIGZvcndhcmQgdGhlbSB0byB0aGF0IGZpbmFsCisgICAgICAgICAgICBkZXN0aW5hdGlvbi4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBwYWNrZXRzIGFzCisKKworCisgICAgICAgICAgICBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzUmVhc21SZXFkcworICogaXBJZlN0YXRzUmVhc21SZXFkcyBpcyBzdWJpZCAxNCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGZyYWdtZW50cyByZWNlaXZlZCB0aGF0IG5lZWRlZCB0byBiZQorICAgICAgICAgICAgcmVhc3NlbWJsZWQgYXQgdGhpcyBpbnRlcmZhY2UuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGZyYWdtZW50cyB3ZXJlIGFkZHJlc3NlZCBpcworICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGZyYWdtZW50cy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbVJlcWRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzUmVhc21SZXFkc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzUmVhc21SZXFkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNSZWFzbVJlcWRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c1JlYXNtUmVxZHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5SZWFzbVJlcWRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNSZWFzbVJlcWRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNSZWFzbU9LcworICogaXBJZlN0YXRzUmVhc21PS3MgaXMgc3ViaWQgMTUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgc3VjY2Vzc2Z1bGx5IHJlYXNzZW1ibGVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIGludGVyZmFjZSB0byB3aGljaCB0aGVzZSBkYXRhZ3JhbXMgd2VyZSBhZGRyZXNzZWQgaXMKKyAgICAgICAgICAgIGluY3JlbWVudGVkLiAgVGhpcyBpbnRlcmZhY2UgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgaW5wdXQgaW50ZXJmYWNlIGZvciBzb21lIG9mIHRoZSBkYXRhZ3JhbXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21PS3MgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNSZWFzbU9Lc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzUmVhc21PS3NfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNSZWFzbU9Lc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzUmVhc21PS3NfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21PS3MgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5SZWFzbU9LczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzUmVhc21PS3NfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c1JlYXNtRmFpbHMKKyAqIGlwSWZTdGF0c1JlYXNtRmFpbHMgaXMgc3ViaWQgMTYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTYKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBmYWlsdXJlcyBkZXRlY3RlZCBieSB0aGUgSVAgcmUtYXNzZW1ibHkKKyAgICAgICAgICAgIGFsZ29yaXRobSAoZm9yIHdoYXRldmVyIHJlYXNvbjogdGltZWQgb3V0LCBlcnJvcnMsIGV0Yy4pLgorICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGEgY291bnQgb2YgZGlzY2FyZGVkIElQCisgICAgICAgICAgICBmcmFnbWVudHMgc2luY2Ugc29tZSBhbGdvcml0aG1zIChub3RhYmx5IHRoZSBhbGdvcml0aG0gaW4KKyAgICAgICAgICAgIFJGQyA4MTUpIGNhbiBsb3NlIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGJ5CisgICAgICAgICAgICBjb21iaW5pbmcgdGhlbSBhcyB0aGV5IGFyZSByZWNlaXZlZC4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZnJhZ21lbnRzIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZnJhZ21lbnRzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c1JlYXNtRmFpbHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWFzbUZhaWxzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c1JlYXNtRmFpbHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlYXNtRmFpbHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21GYWlscyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtRmFpbHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luRGlzY2FyZHMKKyAqIGlwSWZTdGF0c0luRGlzY2FyZHMgaXMgc3ViaWQgMTcgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTcKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZm9yIHdoaWNoIG5vIHByb2JsZW1zIHdlcmUKKyAgICAgICAgICAgIGVuY291bnRlcmVkIHRvIHByZXZlbnQgdGhlaXIgY29udGludWVkIHByb2Nlc3NpbmcsIGJ1dAorICAgICAgICAgICAgd2VyZSBkaXNjYXJkZWQgKGUuZy4sIGZvciBsYWNrIG9mIGJ1ZmZlciBzcGFjZSkuICBOb3RlIHRoYXQKKyAgICAgICAgICAgIHRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNsdWRlIGFueSBkYXRhZ3JhbXMgZGlzY2FyZGVkIHdoaWxlCisgICAgICAgICAgICBhd2FpdGluZyByZS1hc3NlbWJseS4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkRpc2NhcmRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5EaXNjYXJkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbkRpc2NhcmRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGlzY2FyZHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JbkRpc2NhcmRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbkRpc2NhcmRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkRlbGl2ZXJzCisgKiBpcElmU3RhdHNJbkRlbGl2ZXJzIGlzIHN1YmlkIDE4IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjE4CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgZGF0YWdyYW1zIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gSVAKKyAgICAgICAgICAgIHVzZXItcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGRhdGFncmFtcyB3ZXJlIGFkZHJlc3NlZCBpcworICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisKKworCisgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGRhdGFncmFtcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkRlbGl2ZXJzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5EZWxpdmVyc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbkRlbGl2ZXJzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGVsaXZlcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5EZWxpdmVyc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5EZWxpdmVycy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luRGVsaXZlcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5EZWxpdmVycworICogaXBJZlN0YXRzSENJbkRlbGl2ZXJzIGlzIHN1YmlkIDE5IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjE5CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgZGF0YWdyYW1zIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gSVAKKyAgICAgICAgICAgIHVzZXItcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkuICBUaGlzIG9iamVjdCBjb3VudHMgdGhlCisgICAgICAgICAgICBzYW1lIHBhY2tldHMgYXMgaXBJZlN0YXRzSW5EZWxpdmVycywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyCisgICAgICAgICAgICB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENJbkRlbGl2ZXJzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luRGVsaXZlcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENJbkRlbGl2ZXJzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0UmVxdWVzdHMKKyAqIGlwSWZTdGF0c091dFJlcXVlc3RzIGlzIHN1YmlkIDIwIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjIwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgbG9jYWwgSVAgdXNlci0KKyAgICAgICAgICAgIHByb3RvY29scyAoaW5jbHVkaW5nIElDTVApIHN1cHBsaWVkIHRvIElQIGluIHJlcXVlc3RzIGZvcgorICAgICAgICAgICAgdHJhbnNtaXNzaW9uLiAgTm90ZSB0aGF0IHRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNsdWRlIGFueQorICAgICAgICAgICAgZGF0YWdyYW1zIGNvdW50ZWQgaW4gaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRSZXF1ZXN0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dFJlcXVlc3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRSZXF1ZXN0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dFJlcXVlc3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNPdXRSZXF1ZXN0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRSZXF1ZXN0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dFJlcXVlc3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c091dFJlcXVlc3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dFJlcXVlc3RzCisgKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzIGlzIHN1YmlkIDIxIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjIxCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgbG9jYWwgSVAgdXNlci0KKyAgICAgICAgICAgIHByb3RvY29scyAoaW5jbHVkaW5nIElDTVApIHN1cHBsaWVkIHRvIElQIGluIHJlcXVlc3RzIGZvcgorICAgICAgICAgICAgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIHBhY2tldHMgYXMKKworCisKKyAgICAgICAgICAgIGlwSWZTdGF0c091dFJlcXVlc3RzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dFJlcXVlc3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0UmVxdWVzdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMKKyAqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMjMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjMKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QgdGhlaXIKKyAgICAgICAgICAgIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggaXQgd2FzIHN1Y2Nlc3NmdWwgaW4KKyAgICAgICAgICAgIGZpbmRpbmcgYSBwYXRoIHRvIHRoZWlyIGZpbmFsIGRlc3RpbmF0aW9uLiAgSW4gZW50aXRpZXMKKyAgICAgICAgICAgIHRoYXQgZG8gbm90IGFjdCBhcyBJUCByb3V0ZXJzLCB0aGlzIGNvdW50ZXIgd2lsbCBpbmNsdWRlCisgICAgICAgICAgICBvbmx5IHRob3NlIGRhdGFncmFtcyB0aGF0IHdlcmUgU291cmNlLVJvdXRlZCB2aWEgdGhpcworICAgICAgICAgICAgZW50aXR5LCBhbmQgdGhlIFNvdXJjZS1Sb3V0ZSBwcm9jZXNzaW5nIHdhcyBzdWNjZXNzZnVsLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZvcndhcmRlZCBkYXRhZ3JhbS4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcworICogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zIGlzIHN1YmlkIDI0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjI0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgZGF0YWdyYW1zIGZvciB3aGljaCB0aGlzIGVudGl0eSB3YXMgbm90IHRoZWlyCisgICAgICAgICAgICBmaW5hbCBJUCBkZXN0aW5hdGlvbiBhbmQgZm9yIHdoaWNoIGl0IHdhcyBzdWNjZXNzZnVsIGluCisgICAgICAgICAgICBmaW5kaW5nIGEgcGF0aCB0byB0aGVpciBmaW5hbCBkZXN0aW5hdGlvbi4gIFRoaXMgb2JqZWN0CisgICAgICAgICAgICBjb3VudHMgdGhlIHNhbWUgcGFja2V0cyBhcyBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zLCBidXQKKyAgICAgICAgICAgIGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorCisKKworICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXREaXNjYXJkcworICogaXBJZlN0YXRzT3V0RGlzY2FyZHMgaXMgc3ViaWQgMjUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBvdXRwdXQgSVAgZGF0YWdyYW1zIGZvciB3aGljaCBubyBwcm9ibGVtIHdhcworICAgICAgICAgICAgZW5jb3VudGVyZWQgdG8gcHJldmVudCB0aGVpciB0cmFuc21pc3Npb24gdG8gdGhlaXIKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLCBidXQgd2VyZSBkaXNjYXJkZWQgKGUuZy4sIGZvciBsYWNrIG9mCisgICAgICAgICAgICBidWZmZXIgc3BhY2UpLiAgTm90ZSB0aGF0IHRoaXMgY291bnRlciB3b3VsZCBpbmNsdWRlCisgICAgICAgICAgICBkYXRhZ3JhbXMgY291bnRlZCBpbiBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zIGlmIGFueSBzdWNoCisgICAgICAgICAgICBkYXRhZ3JhbXMgbWV0IHRoaXMgKGRpc2NyZXRpb25hcnkpIGRpc2NhcmQgY3JpdGVyaW9uLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dERpc2NhcmRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dERpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dERpc2NhcmRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dERpc2NhcmRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0RGlzY2FyZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZyYWdSZXFkcworICogaXBJZlN0YXRzT3V0RnJhZ1JlcWRzIGlzIHN1YmlkIDI2IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjI2CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgd291bGQgcmVxdWlyZSBmcmFnbWVudGF0aW9uCisgICAgICAgICAgICBpbiBvcmRlciB0byBiZSB0cmFuc21pdHRlZC4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBvdXRnb2luZyBpbnRlcmZhY2UgaXMgaW5jcmVtZW50ZWQgZm9yIGEgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdSZXFkcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZyYWdSZXFkc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRGcmFnUmVxZHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRGcmFnT0tzCisgKiBpcElmU3RhdHNPdXRGcmFnT0tzIGlzIHN1YmlkIDI3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjI3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgZnJhZ21lbnRlZC4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisKKworCisgICAgICAgICAgICBvdXRnb2luZyBpbnRlcmZhY2UgaXMgaW5jcmVtZW50ZWQgZm9yIGEgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdPS3MgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGcmFnT0tzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZyYWdPS3NfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ09LcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0RnJhZ09Lc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzCisgKiBpcElmU3RhdHNPdXRGcmFnRmFpbHMgaXMgc3ViaWQgMjggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjgKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBoYXZlIGJlZW4gZGlzY2FyZGVkIGJlY2F1c2UKKyAgICAgICAgICAgIHRoZXkgbmVlZGVkIHRvIGJlIGZyYWdtZW50ZWQgYnV0IGNvdWxkIG5vdCBiZS4gIFRoaXMKKyAgICAgICAgICAgIGluY2x1ZGVzIElQdjQgcGFja2V0cyB0aGF0IGhhdmUgdGhlIERGIGJpdCBzZXQgYW5kIElQdjYKKyAgICAgICAgICAgIHBhY2tldHMgdGhhdCBhcmUgYmVpbmcgZm9yd2FyZGVkIGFuZCBleGNlZWQgdGhlIG91dGdvaW5nCisgICAgICAgICAgICBsaW5rIE1UVS4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBvdXRnb2luZyBpbnRlcmZhY2UgaXMgaW5jcmVtZW50ZWQgZm9yIGFuIHVuc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdGYWlscyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZyYWdGYWlsc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRGcmFnRmFpbHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRGcmFnQ3JlYXRlcworICogaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgaXMgc3ViaWQgMjkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjkKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBvdXRwdXQgZGF0YWdyYW0gZnJhZ21lbnRzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgSVAgZnJhZ21lbnRhdGlvbi4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBvdXRnb2luZyBpbnRlcmZhY2UgaXMgaW5jcmVtZW50ZWQgZm9yIGEgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dEZyYWdDcmVhdGVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZyYWdDcmVhdGVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dFRyYW5zbWl0cworICogaXBJZlN0YXRzT3V0VHJhbnNtaXRzIGlzIHN1YmlkIDMwIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjMwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgdGhpcyBlbnRpdHkgc3VwcGxpZWQKKyAgICAgICAgICAgIHRvIHRoZSBsb3dlciBsYXllcnMgZm9yIHRyYW5zbWlzc2lvbi4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgICAgIGRhdGFncmFtcyBnZW5lcmF0ZWQgbG9jYWxseSBhbmQgdGhvc2UgZm9yd2FyZGVkIGJ5IHRoaXMKKyAgICAgICAgICAgIGVudGl0eS4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRUcmFuc21pdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNPdXRUcmFuc21pdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0VHJhbnNtaXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRUcmFuc21pdHMKKyAqIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzIGlzIHN1YmlkIDMxIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjMxCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgdGhpcyBlbnRpdHkgc3VwcGxpZWQKKyAgICAgICAgICAgIHRvIHRoZSBsb3dlciBsYXllcnMgZm9yIHRyYW5zbWlzc2lvbi4gIFRoaXMgb2JqZWN0IGNvdW50cworICAgICAgICAgICAgdGhlIHNhbWUgZGF0YWdyYW1zIGFzIGlwSWZTdGF0c091dFRyYW5zbWl0cywgYnV0IGFsbG93cyBmb3IKKyAgICAgICAgICAgIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENPdXRUcmFuc21pdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRUcmFuc21pdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENPdXRUcmFuc21pdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dFRyYW5zbWl0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0T2N0ZXRzCisgKiBpcElmU3RhdHNPdXRPY3RldHMgaXMgc3ViaWQgMzIgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzIKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgaW4gSVAgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB0aGUKKyAgICAgICAgICAgIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zCisgICAgICAgICAgICBjb3VudGVkIGluIGlwSWZTdGF0c091dFRyYW5zbWl0cyBNVVNUIGJlIGNvdW50ZWQgaGVyZS4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNPdXRPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE9jdGV0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c091dE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRPY3RldHMKKyAqIGlwSWZTdGF0c0hDT3V0T2N0ZXRzIGlzIHN1YmlkIDMzIG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjMzCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIGluIElQIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdGhlCisgICAgICAgICAgICBsb3dlciBsYXllcnMgZm9yIHRyYW5zbWlzc2lvbi4gIFRoaXMgb2JqZWN0cyBjb3VudHMgdGhlIHNhbWUKKyAgICAgICAgICAgIG9jdGV0cyBhcyBpcElmU3RhdHNPdXRPY3RldHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENPdXRPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENPdXRPY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE9jdGV0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5NY2FzdFBrdHMKKyAqIGlwSWZTdGF0c0luTWNhc3RQa3RzIGlzIHN1YmlkIDM0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjM0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgbXVsdGljYXN0IGRhdGFncmFtcyByZWNlaXZlZC4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk1jYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbk1jYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbk1jYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk1jYXN0UGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luTWNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ0luTWNhc3RQa3RzCisgKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzIGlzIHN1YmlkIDM1IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjM1CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgbXVsdGljYXN0IGRhdGFncmFtcyByZWNlaXZlZC4gIFRoaXMgb2JqZWN0CisgICAgICAgICAgICBjb3VudHMgdGhlIHNhbWUgZGF0YWdyYW1zIGFzIGlwSWZTdGF0c0luTWNhc3RQa3RzLCBidXQKKyAgICAgICAgICAgIGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENJbk1jYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5NY2FzdFBrdHMubG93OworICAgICgqaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk1jYXN0T2N0ZXRzCisgKiBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzIGlzIHN1YmlkIDM2IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjM2CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIElQIG11bHRpY2FzdAorCisKKworICAgICAgICAgICAgZGF0YWdyYW1zLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zIGNvdW50ZWQgaW4KKyAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RQa3RzIE1VU1QgYmUgY291bnRlZCBoZXJlLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5NY2FzdE9jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMKKyAqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0cyBpcyBzdWJpZCAzNyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zNworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZWNlaXZlZCBpbiBJUCBtdWx0aWNhc3QKKyAgICAgICAgICAgIGRhdGFncmFtcy4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBvY3RldHMgYXMKKyAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RPY3RldHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0TWNhc3RQa3RzCisgKiBpcElmU3RhdHNPdXRNY2FzdFBrdHMgaXMgc3ViaWQgMzggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzgKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE1jYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dE1jYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dE1jYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRNY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dE1jYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dE1jYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dE1jYXN0UGt0cworICogaXBJZlN0YXRzSENPdXRNY2FzdFBrdHMgaXMgc3ViaWQgMzkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzkKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLiAgVGhpcworICAgICAgICAgICAgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzT3V0TWNhc3RQa3RzLAorICAgICAgICAgICAgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorCisKKworICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dE1jYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dE1jYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dE1jYXN0UGt0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRNY2FzdE9jdGV0cworICogaXBJZlN0YXRzT3V0TWNhc3RPY3RldHMgaXMgc3ViaWQgNDAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgdHJhbnNtaXR0ZWQgaW4gSVAgbXVsdGljYXN0CisgICAgICAgICAgICBkYXRhZ3JhbXMuICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMgY291bnRlZCBpbgorICAgICAgICAgICAgaXBJZlN0YXRzT3V0TWNhc3RQa3RzIE1VU1QgYmUgY291bnRlZCBoZXJlLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMKKyAqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgaXMgc3ViaWQgNDEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgdHJhbnNtaXR0ZWQgaW4gSVAgbXVsdGljYXN0CisgICAgICAgICAgICBkYXRhZ3JhbXMuICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgb2N0ZXRzIGFzCisgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdE9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkJjYXN0UGt0cworICogaXBJZlN0YXRzSW5CY2FzdFBrdHMgaXMgc3ViaWQgNDIgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDIKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luQmNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luQmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luQmNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luQmNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5CY2FzdFBrdHMKKyAqIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgaXMgc3ViaWQgNDMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDMKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLiAgVGhpcyBvYmplY3QKKyAgICAgICAgICAgIGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzSW5CY2FzdFBrdHMsIGJ1dAorICAgICAgICAgICAgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luQmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkJjYXN0UGt0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEJjYXN0UGt0cworICogaXBJZlN0YXRzT3V0QmNhc3RQa3RzIGlzIHN1YmlkIDQ0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQ0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgYnJvYWRjYXN0IGRhdGFncmFtcyB0cmFuc21pdHRlZC4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRCY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNPdXRCY2FzdFBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0QmNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUQkNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEJjYXN0UGt0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMKKyAqIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzIGlzIHN1YmlkIDQ1IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQ1CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgYnJvYWRjYXN0IGRhdGFncmFtcyB0cmFuc21pdHRlZC4gIFRoaXMKKyAgICAgICAgICAgIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgZGF0YWdyYW1zIGFzIGlwSWZTdGF0c091dEJjYXN0UGt0cywKKyAgICAgICAgICAgIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEJjYXN0UGt0cy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dEJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUKKyAqIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lIGlzIHN1YmlkIDQ2IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQ2CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB2YWx1ZSBvZiBzeXNVcFRpbWUgb24gdGhlIG1vc3QgcmVjZW50IG9jY2FzaW9uIGF0IHdoaWNoCisKKworCisgICAgICAgICAgICBhbnkgb25lIG9yIG1vcmUgb2YgdGhpcyBlbnRyeSdzIGNvdW50ZXJzIHN1ZmZlcmVkIGEKKyAgICAgICAgICAgIGRpc2NvbnRpbnVpdHkuCisKKyAgICAgICAgICAgIElmIG5vIHN1Y2ggZGlzY29udGludWl0aWVzIGhhdmUgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgcmUtCisgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgbG9jYWwgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRoZW4gdGhpcworICAgICAgICAgICAgb2JqZWN0IGNvbnRhaW5zIGEgemVybyB2YWx1ZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIFRpbWVTdGFtcCAoYmFzZWQgb24gcGVybHR5cGUgVElDS1MpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVElNRVRJQ0tTLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNEaXNjb250aW51aXR5VGltZTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c1JlZnJlc2hSYXRlCisgKiBpcElmU3RhdHNSZWZyZXNoUmF0ZSBpcyBzdWJpZCA0NyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40NworICogRGVzY3JpcHRpb246CitUaGUgbWluaW11bSByZWFzb25hYmxlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIHRoaXMgZW50cnkuCisgICAgICAgICAgICBUaGlzIG9iamVjdCBwcm92aWRlcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtaW5pbXVtIGFtb3VudCBvZgorICAgICAgICAgICAgdGltZSByZXF1aXJlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGluIHRoaXMgZW50cnkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBVTlNJR05FRDMyIChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVmcmVzaFJhdGUgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzUmVmcmVzaFJhdGVfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzUmVmcmVzaFJhdGVfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVmcmVzaFJhdGUgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNSZWZyZXNoUmF0ZTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzUmVmcmVzaFJhdGVfZ2V0ICovCisKKworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjN2U0NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5oCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGlwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKiBpbmRleGVzCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5SZWNlaXZlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luUmVjZWl2ZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5SZWNlaXZlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5PY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luSGRyRXJyb3JzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkFkZHJFcnJvcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNSZWFzbU9Lc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNSZWFzbUZhaWxzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5EaXNjYXJkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luRGVsaXZlcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luRGVsaXZlcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dFJlcXVlc3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXREaXNjYXJkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dERpc2NhcmRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnUmVxZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdPS3NfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbk1jYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dE1jYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJbkJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzUmVmcmVzaFJhdGVfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoaXBJZlN0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBJZlN0YXRzSWZJbmRleF92YWwpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBJZlN0YXRzSWZJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUElGU1RBVFNUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2NTdkNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX0VOVU1TX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcElmU3RhdHNJUFZlcnNpb24gKEluZXRWZXJzaW9uIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBJTkVUVkVSU0lPTl9FTlVNUworI2RlZmluZSBJTkVUVkVSU0lPTl9FTlVNUworCisjZGVmaW5lIElORVRWRVJTSU9OX1VOS05PV04gIDAKKyNkZWZpbmUgSU5FVFZFUlNJT05fSVBWNCAgMQorI2RlZmluZSBJTkVUVkVSU0lPTl9JUFY2ICAyCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5FVFZFUlNJT05fRU5VTVMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWQxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxNDIwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlLmgiCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBJZlN0YXRzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwSWZTdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2dldCwgaXBJZlN0YXRzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMsIGxlbmd0aDogOQorICovCit0eXBlZGVmIHN0cnVjdCBpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4X3MgeworCisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisKKyAgICBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKKyAgICB1X2xvbmcgbGFzdF9jaGFuZ2VkOworCit9IGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHg7CisKK3N0YXRpYyBpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4IGlwSWZTdGF0c1RhYmxlX2lmX2N0eDsKKworc3RhdGljIHZvaWQgICAgIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWZfY3R4KTsKK3N0YXRpYyB2b2lkICAgIAorX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQKK25ldHNubXBfY29udGFpbmVyICoKK2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9HRVQKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9TRVQKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9IGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBpcElmU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX0NPTlRBSU5FUl9TSVpFCitpbnQKK2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCit7CisgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KKworLyoKKyAqIGlwSWZTdGF0c1RhYmxlTGFzdENoYW5nZWQsIHdoaWNoIGlzIHRoZSBsYXN0IHRpbWUgdGhhdCBhIHJvdyBpbgorICogdGhlIHRhYmxlIHdhcyBjaGFuZ2VkIG9yIHRoZSBsYXN0IHRpbWUgYSByb3cgd2FzIGFkZGVkL2RlbGV0ZWQgZnJvbSB0aGUKKyAqIHRhYmxlLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9sYXN0Q2hhbmdlX3NldCh1X2xvbmcgdGFibGVfY2hhbmdlZCkKK3sKKyAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGU6bGFzdENoYW5nZWRfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkLiB3YXMgJWxkLCBub3cgJWxkXG4iLAorICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5sYXN0X2NoYW5nZWQsIHRhYmxlX2NoYW5nZWQpKTsKKyAgICBpcElmU3RhdHNUYWJsZV9pZl9jdHgubGFzdF9jaGFuZ2VkID0gdGFibGVfY2hhbmdlZDsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcElmU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwSWZTdGF0c1RhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19pcElmU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBmbGFncykKK3sKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgKmFjY2Vzc19tdWx0aXBsZXhlciA9CisgICAgICAgICZpcElmU3RhdHNUYWJsZV9pZl9jdHguYWNjZXNzX211bHRpcGxleGVyOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibF9pbmZvID0KKyAgICAgICAgJmlwSWZTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mbzsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXI7CisgICAgaW50ICAgICAgICAgICAgIG1mZF9tb2RlcyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlIiwgImNhbGxlZFxuIikpOworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2F2ZSBpbnRlcmZhY2UgY29udGV4dCBmb3IgaXBJZlN0YXRzVGFibGUKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFNldHRpbmcgdXAgdGhlIHRhYmxlJ3MgZGVmaW5pdGlvbgorICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRibF9pbmZvLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBpcElmU3RhdHNJUFZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBpcElmU3RhdHNJZkluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICAvKgorICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCisgICAgICovCisgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJUElGU1RBVFNUQUJMRV9NSU5fQ09MOworICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBJRlNUQVRTVEFCTEVfTUFYX0NPTDsKKworICAgIC8qCisgICAgICogc2F2ZSB1c2VycyBjb250ZXh0CisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gcmVnX3B0cjsKKworICAgIC8qCisgICAgICogY2FsbCBkYXRhIGFjY2VzcyBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhKHJlZ19wdHIpOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaXBJZlN0YXRzVGFibGVfaWZfY3R4KTsKKyAgICBpZiAoTlVMTCA9PSBpcElmU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250YWluZXIgZm9yIGlwSWZTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWNjZXNzX211bHRpcGxleGVyOiBSRVFVSVJFRCB3cmFwcGVyIGZvciBnZXQgcmVxdWVzdCBoYW5kbGluZworICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCA9IF9tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmdldF92YWx1ZXMgPSBfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXM7CisKKyAgICAvKgorICAgICAqIG5vIHdyYXBwZXJzIHlldAorICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QgPSBfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3Q7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBDcmVhdGUgYSByZWdpc3RyYXRpb24sIHNhdmUgb3VyIHJlZyBkYXRhLCByZWdpc3RlciB0YWJsZS4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGU6aW5pdF9pcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIGlwSWZTdGF0c1RhYmxlIGFzIGEgbWlicy1mb3ItZHVtbWllcyB0YWJsZS5cbiIpKTsKKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tdWx0aXBsZXhlcl9nZXQoYWNjZXNzX211bHRpcGxleGVyKTsKKyAgICByZWdpbmZvID0KKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlwSWZTdGF0c1RhYmxlIiwgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9vaWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlwSWZTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWdpbmZvLT5teV9yZWdfdm9pZCA9ICZpcElmU3RhdHNUYWJsZV9pZl9jdHg7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2V0IHVwIGJhYnkgc3RlcHMgaGFuZGxlciwgY3JlYXRlIGl0IGFuZCBpbmplY3QgaXQKKyAgICAgKi8KKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX09CSkVDVF9MT09LVVA7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QUkVfUkVRVUVTVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXR1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY2xlYW51cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NMRUFOVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXRzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUUzsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnJvd19jcmVhdGlvbikKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9ST1dfQ1JFQVRFOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19DT05TSVNURU5DWTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChpcElmU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKyAgICAKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIExhc3RDaGFuZ2VkCisgICAgICovCisgICAgeworICAgICAgICBvaWQgICAgIGxjX29pZFtdID0geyBJUElGU1RBVFNUQUJMRUxBU1RDSEFOR0VfT0lEIH07CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgKCJpcElmU3RhdHNUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgbGNfb2lkLCBPSURfTEVOR1RIKGxjX29pZCksCisgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICZpcElmU3RhdHNUYWJsZV9pZl9jdHguCisgICAgICAgICAgICAgICAgICAgIGxhc3RfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mCisgICAgICAgICAgICAgICAgICAgICh1X2xvbmcpLAorICAgICAgICAgICAgICAgICAgICBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKKyAgICB9Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcElmU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogU2h1dGRvd24gdGhlIHRhYmxlIGlwSWZTdGF0c1RhYmxlCisgKi8KK3ZvaWQKK19pcElmU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0cikKK3sKKyAgICAvKgorICAgICAqIHNodXRkb3duIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKCZpcElmU3RhdHNUYWJsZV9pZl9jdHgpOworfQorCit2b2lkCitpcElmU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9pZl9jdHgudGJsX2luZm8udmFsaWRfY29sdW1ucyA9IHZjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogY29udmVydCB0aGUgaW5kZXggY29tcG9uZW50IHN0b3JlZCBpbiB0aGUgY29udGV4dCB0byBhbiBvaWQKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbjsKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lmSW5kZXgoMikvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBJZlN0YXRzSWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLCAweDAwLCBzaXplb2YodmFyX2lwSWZTdGF0c0lQVmVyc2lvbikpOworICAgIHZhcl9pcElmU3RhdHNJUFZlcnNpb24udHlwZSA9IEFTTl9JTlRFR0VSOworICAgIG1lbXNldCgmdmFyX2lwSWZTdGF0c0lmSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfaXBJZlN0YXRzSWZJbmRleCkpOworICAgIHZhcl9pcElmU3RhdHNJZkluZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9pcElmU3RhdHNJUFZlcnNpb24ubmV4dF92YXJpYWJsZSA9ICZ2YXJfaXBJZlN0YXRzSWZJbmRleDsKKyAgICB2YXJfaXBJZlN0YXRzSWZJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfaW5kZXhfdG9fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBJZlN0YXRzSVBWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBJZlN0YXRzSVBWZXJzaW9uKSk7CisKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lmSW5kZXgoMikvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcElmU3RhdHNJZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBJZlN0YXRzSWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pYl9pZHgtPmlwSWZTdGF0c0lmSW5kZXgpKTsKKworCisgICAgZXJyID0gYnVpbGRfb2lkX25vYWxsb2Mob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLCAmb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZCAqLworCisvKioKKyAqIGV4dHJhY3QgaXBJZlN0YXRzVGFibGUgaW5kZXhlcyBmcm9tIGEgbmV0c25tcF9pbmRleAorICoKKyAqIEByZXR2YWwgU05NUF9FUlJfTk9FUlJPUiAgOiBubyBlcnJvcgorICogQHJldHZhbCBTTk1QX0VSUl9HRU5FUlIgICA6IGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBJZlN0YXRzSVBWZXJzaW9uKDEpL0luZXRWZXJzaW9uL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uOworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcElmU3RhdHNJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24sIDB4MDAsIHNpemVvZih2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKSk7CisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgbWVtc2V0KCZ2YXJfaXBJZlN0YXRzSWZJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9pcElmU3RhdHNJZkluZGV4KSk7CisgICAgdmFyX2lwSWZTdGF0c0lmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi5uZXh0X3ZhcmlhYmxlID0gJnZhcl9pcElmU3RhdHNJZkluZGV4OworICAgIHZhcl9pcElmU3RhdHNJZkluZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2lwSWZTdGF0c0lQVmVyc2lvbik7CisgICAgaWYgKGVyciA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvcHkgb3V0IHZhbHVlcworICAgICAgICAgKi8KKyAgICAgICAgbWliX2lkeC0+aXBJZlN0YXRzSVBWZXJzaW9uID0KKyAgICAgICAgICAgICooKHVfbG9uZyAqKSB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLnZhbC5zdHJpbmcpOworICAgICAgICBtaWJfaWR4LT5pcElmU3RhdHNJZkluZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2lwSWZTdGF0c0lmSW5kZXgudmFsLnN0cmluZyk7CisKKworICAgIH0KKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24pOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICovCitpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK2lwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXBJZlN0YXRzVGFibGVfZGF0YSAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSAiCisgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4LlxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IGRhdGEpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB0cmFjayBpZiB3ZSBnb3QgZGF0YSBmcm9tIHVzZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzIHw9IE1GRF9ST1dfREFUQV9GUk9NX1VTRVI7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhID0gZGF0YTsKKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09CisgICAgICAgICAgICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEgPSBpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKCkpKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogdW5kbyBjb250ZXh0IHdpbGwgYmUgYWxsb2NhdGVkIHdoZW4gbmVlZGVkIChpbiAqX3VuZG9fc2V0dXApCisgICAgICovCisKKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgPSByb3dyZXFfY3R4LT5vaWRfdG1wOworCisgICAgcm93cmVxX2N0eC0+aXBJZlN0YXRzVGFibGVfZGF0YV9saXN0ID0gTlVMTDsKKworICAgIC8qCisgICAgICogaWYgd2UgYWxsb2NhdGVkIGRhdGEsIGNhbGwgaW5pdCByb3V0aW5lCisgICAgICovCisgICAgaWYgKCEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPQorICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KHJvd3JlcV9jdHgsIHVzZXJfaW5pdF9jdHgpKSB7CisgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICByb3dyZXFfY3R4ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByb3dyZXFfY3R4OworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4ICovCisKKy8qCisgKiBAaW50ZXJuYWwKKyAqIHJlbGVhc2UgcmVzb3VyY2VzIGZvciBhIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBmb3Igbm9uLXRyYW5zaWVudCBkYXRhLCBkb24ndCBmcmVlIGRhdGEgd2UgZ290IGZyb20gdGhlIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoKHJvd3JlcV9jdHgtPmRhdGEpICYmCisgICAgICAgICEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT5kYXRhKTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgYWRkaXRpb25hbCBwcmVfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICByYyA9IGlwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcmVsZWFzZSByb3cgY29udGV4dCwgaWYgZGVsZXRlZAorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4ICYmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RFTEVURUQpKQorICAgICAgICBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIHdhaXQgZm9yIGxhc3QgY2FsbCBiZWZvcmUgY2FsbGluZyB1c2VyCisgICAgICovCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJ3YWl0aW5nIGZvciBsYXN0IHBvc3RfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICBwYWNrZXRfcmMgPSBuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcihhZ3RyZXFfaW5mby0+YXNwLCAwKTsKKyAgICByYyA9IGlwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChpcElmU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X3JjKTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImlwSWZTdGF0c1RhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0XG4iLCByYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwSWZTdGF0c1RhYmxlX29iamVjdF9sb29rdXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBnZXQgb3VyIGNvbnRleHQgZnJvbSBtZmQKKyAgICAgKiBpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICppZl9jdHggPQorICAgICAqICAgICAgICAgICAgIChpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICopcmVnaW5mby0+bXlfcmVnX3ZvaWQ7CisgICAgICovCisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9DUkVBVElPTjsKKyAgICB9CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCByYyk7CisgICAgZWxzZQorICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dfcHJlcChyb3dyZXFfY3R4KTsKKworICAgIHJldHVybiBTTk1QX1ZBTElEQVRFX0VSUihyYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtbihpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luUmVjZWl2ZXMoMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5SRUNFSVZFUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luUmVjZWl2ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luUmVjZWl2ZXMoNCkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5SRUNFSVZFUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJblJlY2VpdmVzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbk9jdGV0cyg1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTk9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luT2N0ZXRzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5PY3RldHMoNikvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5PQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5PY3RldHNfZ2V0KHJvd3JlcV9jdHgsIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5IZHJFcnJvcnMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5IRFJFUlJPUlM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJbkhkckVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbk5vUm91dGVzKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOTk9ST1VURVM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJbk5vUm91dGVzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5BZGRyRXJyb3JzKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOQUREUkVSUk9SUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luQWRkckVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zKDEwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTlVOS05PV05QUk9UT1M6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJblVua25vd25Qcm90b3NfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5UUlVOQ0FURURQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMoMTIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lORk9SV0RBVEFHUkFNUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMoMTMpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lORk9SV0RBVEFHUkFNUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzUmVhc21SZXFkcygxNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01SRVFEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNSZWFzbU9LcygxNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01PS1M6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNSZWFzbU9Lc19nZXQocm93cmVxX2N0eCwgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNSZWFzbUZhaWxzKDE2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUFTTUZBSUxTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzUmVhc21GYWlsc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luRGlzY2FyZHMoMTcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lORElTQ0FSRFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJbkRpc2NhcmRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5EZWxpdmVycygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5ERUxJVkVSUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luRGVsaXZlcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luRGVsaXZlcnMoMTkpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOREVMSVZFUlM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0UmVxdWVzdHMoMjApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVFJFUVVFU1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0UmVxdWVzdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRSZXF1ZXN0cygyMSkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDT1VUUkVRVUVTVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zKDIzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRGT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcygyNCkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDT1VURk9SV0RBVEFHUkFNUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXREaXNjYXJkcygyNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURElTQ0FSRFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXREaXNjYXJkc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnUmVxZHMoMjYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdSRVFEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dEZyYWdSZXFkc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0RnJhZ09LcygyNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR09LUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dEZyYWdPS3NfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnRmFpbHMoMjgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdGQUlMUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dEZyYWdGYWlsc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMoMjkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdDUkVBVEVTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0VHJhbnNtaXRzKDMwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRUUkFOU01JVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRUcmFuc21pdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzKDMxKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRUUkFOU01JVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dE9jdGV0cygzMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VUT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ091dE9jdGV0cygzMykvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDT1VUT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dE9jdGV0c19nZXQocm93cmVxX2N0eCwgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbk1jYXN0UGt0cygzNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5NQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJbk1jYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzKDM1KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTk1DQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbk1jYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luTWNhc3RPY3RldHMoMzYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOTUNBU1RPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzKDM3KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTk1DQVNUT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dE1jYXN0UGt0cygzOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VUTUNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0cygzOSkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDT1VUTUNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dE1jYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0cyg0MCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VUTUNBU1RPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzKDQxKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVE9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luQmNhc3RQa3RzKDQyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTkJDQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luQmNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHMoNDMpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOQkNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0QmNhc3RQa3RzKDQ0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRCQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRCY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzKDQ1KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRCQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lKDQ2KS9UaW1lU3RhbXAvQVNOX1RJTUVUSUNLUy91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTRElTQ09OVElOVUlUWVRJTUU6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVElNRVRJQ0tTOworICAgICAgICByYyA9IGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c1JlZnJlc2hSYXRlKDQ3KS9VTlNJR05FRDMyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTUkVGUkVTSFJBVEU6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzUmVmcmVzaFJhdGVfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoSVBJRlNUQVRTVEFCTEVfTUlOX0NPTCA8PSBjb2x1bW4KKyAgICAgICAgICAgICYmIGNvbHVtbiA8PSBJUElGU1RBVFNUQUJMRV9NQVhfQ09MKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImFzc3VtZSBjb2x1bW4gJWQgaXMgcmVzZXJ2ZWRcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmMgPSBNRkRfU0tJUDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW4gKi8KKworaW50CitfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X21mZF9pcElmU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgb2xkIHBvaW50ZXIsIHNvIHdlIGNhbiBmcmVlIGl0IGlmIHJlcGxhY2VkCisgICAgICAgICAqLworICAgICAgICBvbGRfc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZzsKKyAgICAgICAgZGF0YUZyZWVIb29rID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+ZGF0YUZyZWVIb29rOworICAgICAgICBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmOworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmID09CisgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtbihyb3dyZXFfY3R4LCByZXF1ZXN0cy0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBpZiAoTUZEX1NLSVAgPT0gcmMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTlVMTCB2YXJiaW5kIGRhdGEgcG9pbnRlciFcbiIpOworICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBpZiB0aGUgYnVmZmVyIHdhc24ndCB1c2VkIHByZXZpb3VzbHkgZm9yIHRoZSBvbGQgZGF0YSAoaS5lLiBpdAorICAgICAgICAgKiB3YXMgYWxsY29hdGVkIG1lbW9yeSkgIGFuZCB0aGUgZ2V0IHJvdXRpbmUgcmVwbGFjZWQgdGhlIHBvaW50ZXIsCisgICAgICAgICAqIHdlIG5lZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChvbGRfc3RyaW5nICYmIChvbGRfc3RyaW5nICE9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZikgJiYKKyAgICAgICAgICAgIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nICE9IG9sZF9zdHJpbmcpKSB7CisgICAgICAgICAgICBpZiAoZGF0YUZyZWVIb29rKQorICAgICAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAob2xkX3N0cmluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJlZShvbGRfc3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBJZlN0YXRzVGFibGVfZ2V0X3ZhbHVlcyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU0VUIFBST0NFU1NJTkcgTk9UIEFQUExJQ0FCTEUgKHBlciBNSUIgb3IgdXNlciBzZXR0aW5nKQorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQVRBIEFDQ0VTUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICAgICBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpOworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgZm9yIGlwSWZTdGF0c1RhYmxlX2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgYW4gaW52YWxpZCBvciBleHBpcmVkIGNhY2hlICovCisgICAgbmV0c25tcF9hc3NlcnQoKDAgPT0gY2FjaGUtPnZhbGlkKSB8fCAoMSA9PSBjYWNoZS0+ZXhwaXJlZCkpOworCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIHJldHVybiBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCgobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgaW4gaXBJZlN0YXRzVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2l0ZW1fZnJlZShpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2NvbnRhaW5lcl9pdGVtX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpCisgICAgICAgIHJldHVybjsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9pdGVtX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2NvbnRhaW5lcl9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBpbiBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuIGluZWZmaWNpZW50LCBidXQgZWFzeS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbnRhaW5lcl9pdGVtX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBJZlN0YXRzVGFibGU6X2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGlwSWZTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiaXBJZlN0YXRzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNodXRkb3duIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmX2N0eC0+Y29udGFpbmVyKTsKKworICAgIF9jb250YWluZXJfZnJlZShpZl9jdHgtPmNvbnRhaW5lcik7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUElGU1RBVFNUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKK2lwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgoraXBJZlN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfT0lEX0xFTl07CisgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgc3RvcmFnZSBmb3IgT0lECisgICAgICovCisgICAgb2lkX2lkeC5vaWRzID0gb2lkX3RtcDsKKyAgICBvaWRfaWR4LmxlbiA9IHNpemVvZihvaWRfdG1wKSAvIHNpemVvZihvaWQpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0CisgICAgICovCisgICAgcmMgPSBpcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJm9pZF9pZHgsIG1pYl9pZHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3dyZXFfY3R4ID0gKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSU5EKGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKworICAgIHJldHVybiByb3dyZXFfY3R4OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzZGU4NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlOiBSb3V0aW5lcyB0byBpbnRlcmZhY2UgdG8gTmV0LVNOTVAKKyAqCisgKiBcd2FybmluZyBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgY2FsbGVkIGRpcmVjdGx5LAorICogICAgICAgICAgb3IgdXNlZCB0byBpbnRlcnByZXQgZnVuY3Rpb25hbGl0eS4gSXQgaXMgc3ViamVjdCB0bworICogICAgICAgICAgY2hhbmdlIGF0IGFueSB0aW1lLgorICogCisgKiBAeworICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgSVBJRlNUQVRTVEFCTEVfSU5URVJGQUNFX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfSU5URVJGQUNFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKiBQVUJMSUMgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9pcElmU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHVfbG9uZyBmbGFncyk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9pcElmU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICppcElmU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXBJZlN0YXRzVGFibGVfZGF0YSAqLCB2b2lkICopOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2Yyk7CisKKyAgICAvKgorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9sYXN0Q2hhbmdlX3NldCh1X2xvbmcgdXB0aW1lKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUElGU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjYwN2E5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9PSURTX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBpcElmU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSw0LDMxLDMKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVMQVNUQ0hBTkdFX09JRCAgICAxLDMsNiwxLDIsMSw0LDMxLDIKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSVBWRVJTSU9OICAgICAgICAgMQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJRklOREVYICAgICAgICAgMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTlJFQ0VJVkVTICAgICAgICAgMworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ0lOUkVDRUlWRVMgICAgICAgICA0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOT0NURVRTICAgICAgICAgNQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ0lOT0NURVRTICAgICAgICAgNgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkhEUkVSUk9SUyAgICAgICAgIDcKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSU5OT1JPVVRFUyAgICAgICAgIDgKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSU5BRERSRVJST1JTICAgICAgICAgOQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTlVOS05PV05QUk9UT1MgICAgICAgICAxMAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTlRSVU5DQVRFRFBLVFMgICAgICAgICAxMQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkZPUldEQVRBR1JBTVMgICAgICAgICAxMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ0lORk9SV0RBVEFHUkFNUyAgICAgICAgIDEzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU1JFQVNNUkVRRFMgICAgICAgICAxNAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNSRUFTTU9LUyAgICAgICAgIDE1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU1JFQVNNRkFJTFMgICAgICAgICAxNgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkRJU0NBUkRTICAgICAgICAgMTcKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSU5ERUxJVkVSUyAgICAgICAgIDE4CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5ERUxJVkVSUyAgICAgICAgIDE5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVFJFUVVFU1RTICAgICAgICAgMjAKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRSRVFVRVNUUyAgICAgICAgIDIxCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZPUldEQVRBR1JBTVMgICAgICAgICAyMworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVEZPUldEQVRBR1JBTVMgICAgICAgICAyNAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRESVNDQVJEUyAgICAgICAgIDI1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdSRVFEUyAgICAgICAgIDI2CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdPS1MgICAgICAgICAyNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRGUkFHRkFJTFMgICAgICAgICAyOAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRGUkFHQ1JFQVRFUyAgICAgICAgIDI5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVFRSQU5TTUlUUyAgICAgICAgIDMwCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VUVFJBTlNNSVRTICAgICAgICAgMzEKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUT0NURVRTICAgICAgICAgMzIKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRPQ1RFVFMgICAgICAgICAzMworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTk1DQVNUUEtUUyAgICAgICAgIDM0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5NQ0FTVFBLVFMgICAgICAgICAzNQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTk1DQVNUT0NURVRTICAgICAgICAgMzYKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTk1DQVNUT0NURVRTICAgICAgICAgMzcKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUTUNBU1RQS1RTICAgICAgICAgMzgKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVFBLVFMgICAgICAgICAzOQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVE9DVEVUUyAgICAgICAgIDQwCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VUTUNBU1RPQ1RFVFMgICAgICAgICA0MQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkJDQVNUUEtUUyAgICAgICAgIDQyCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5CQ0FTVFBLVFMgICAgICAgICA0MworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRCQ0FTVFBLVFMgICAgICAgICA0NAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVEJDQVNUUEtUUyAgICAgICAgIDQ1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0RJU0NPTlRJTlVJVFlUSU1FICAgICAgICAgNDYKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTUkVGUkVTSFJBVEUgICAgICAgICA0NworCisKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9JUElGU1RBVFNJTlJFQ0VJVkVTCisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX01BWF9DT0wgICBDT0xVTU5fSVBJRlNUQVRTUkVGUkVTSFJBVEUKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX09JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMKaW5kZXggYzg2NTYwNy4uMTA1ODdlMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfb2lkW10gPSB7IElQU1lTVEVNU1RBVFNUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXSA9IHsgSVBTWVNURU1TVEFUU1RBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGlwU3lzdGVtU3RhdHNUYWJsZV9vaWQpOwogCiBpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uIGlwU3lzdGVtU3RhdHNUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0xNjMsNiArMTYzLDggQEAKICAgICAvKgogICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwU3lzdGVtU3RhdHNUYWJsZSByb3dyZXEgY2xlYW51cC4KICAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKHJvd3JlcV9jdHgtPmRhdGEpOworICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBOVUxMOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCiAKIC8qKgpAQCAtMzkwLDExICszOTIsMTQgQEAKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOwotCisgICAgCiAgICAgLyoKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdzsKIApAQCAtNDU2LDYgKzQ2MSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5SZWNlaXZlcyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtNTIwLDYgKzUyOCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbk9jdGV0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5PY3RldHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmxvdzsKIApAQCAtNTc3LDYgKzU4OCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5PY3RldHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDSW5PY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5PY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5PY3RldHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk9jdGV0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyKS5oaWdoID0KQEAgLTY0NCw2ICs2NTgsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5IZHJFcnJvcnMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkhkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbkhkckVycm9yc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluSGRyRXJyb3JzOwogCkBAIC03MDUsOCArNzIyLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbk5vUm91dGVzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5Ob1JvdXRlc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5Ob1JvdXRlc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluTm9Sb3V0ZXM7CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Ob1JvdXRlcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNJbk5vUm91dGVzX2dldCAqLwpAQCAtNzcyLDYgKzc5Miw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkFkZHJFcnJvcnMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luQWRkckVycm9yc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluQWRkckVycm9yczsKIApAQCAtODQzLDYgKzg2Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJblVua25vd25Qcm90b3MgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluVW5rbm93blByb3RvczsKIApAQCAtOTA1LDYgKzkzMSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJblRydW5jYXRlZFBrdHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluVHJ1bmNhdGVkUGt0czsKIApAQCAtOTc2LDYgKzEwMDUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5Gb3J3RGF0YWdyYW1zIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdzsKIApAQCAtMTAzNiw2ICsxMDY4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbkZvcndEYXRhZ3JhbXMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyKS5oaWdoID0KQEAgLTExMDUsNiArMTE0MCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNSZWFzbVJlcWRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzUmVhc21SZXFkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c1JlYXNtUmVxZHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5SZWFzbVJlcWRzOwogCkBAIC0xMTc1LDYgKzEyMTMsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzUmVhc21PS3MgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWFzbU9Lc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNSZWFzbU9Lc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtT0tzOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwpAQCAtMTI0NSw2ICsxMjg2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c1JlYXNtRmFpbHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzUmVhc21GYWlsc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtRmFpbHM7CiAKQEAgLTEzMDksNiArMTM1Myw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkRpc2NhcmRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5EaXNjYXJkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luRGlzY2FyZHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JbkRpc2NhcmRzOwogCkBAIC0xMzc2LDYgKzE0MjMsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5EZWxpdmVycyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luRGVsaXZlcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luRGVsaXZlcnNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93OwogCkBAIC0xNDMzLDYgKzE0ODMsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ0luRGVsaXZlcnMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKS5oaWdoID0KQEAgLTE0OTgsNiArMTU1MSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRSZXF1ZXN0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dFJlcXVlc3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKIApAQCAtMTU1NSw2ICsxNjExLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRSZXF1ZXN0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTYxOSw4ICsxNjc4LDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXROb1JvdXRlcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0Tm9Sb3V0ZXNfdmFsX3B0cikgPQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5PdXROb1JvdXRlczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXROb1JvdXRlcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXROb1JvdXRlc19nZXQgKi8KQEAgLTE2OTQsNiArMTc1Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3c7CiAKQEAgLTE3NTQsNiArMTgxOSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTgyMSw4ICsxODg5LDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXREaXNjYXJkcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dERpc2NhcmRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cikgPQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5PdXREaXNjYXJkczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXREaXNjYXJkc19nZXQgKi8KQEAgLTE4OTAsOCArMTk2MSwxMSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0RnJhZ1JlcWRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dEZyYWdSZXFkc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dEZyYWdSZXFkczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnUmVxZHMubG93OwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ1JlcWRzX2dldCAqLwpAQCAtMTk1Niw5ICsyMDMwLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnT0tzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ09Lc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCi0gICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAiaXBTeXN0ZW1TdGF0c1RhYmxlIG5vZGUgaXBTeXN0ZW1TdGF0c091dEZyYWdPS3Mgbm90IGltcGxlbWVudGVkOiBza2lwcGluZ1xuIik7Ci0gICAgcmV0dXJuIE1GRF9TS0lQOworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBTeXN0ZW1TdGF0c091dEZyYWdPS3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdPS3MubG93OwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ09Lc19nZXQgKi8KQEAgLTIwMjYsOCArMjEwMiwxMSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dEZyYWdGYWlsc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dEZyYWdGYWlsczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93OwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzX2dldCAqLwpAQCAtMjA5Miw4ICsyMTcxLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnQ3JlYXRlcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dEZyYWdDcmVhdGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0cikgPQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5PdXRGcmFnQ3JlYXRlczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnQ3JlYXRlc19nZXQgKi8KQEAgLTIxNTUsNiArMjIzNyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRUcmFuc21pdHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93OwogCkBAIC0yMjEyLDYgKzIyOTcsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ091dFRyYW5zbWl0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjI3Niw2ICsyMzY0LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dE9jdGV0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRPY3RldHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE9jdGV0cy5sb3c7CiAKQEAgLTIzMzMsNiArMjQyNCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0T2N0ZXRzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRPY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE9jdGV0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yMzk1LDYgKzI0ODksOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5NY2FzdFBrdHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbk1jYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3c7CiAKQEAgLTI0NTEsNiArMjU0OCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdFBrdHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KQEAgLTI1MTQsNiArMjYxNCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbk1jYXN0T2N0ZXRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3c7CiAKQEAgLTI1NzIsNiArMjY3NSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdE9jdGV0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjYzNCw2ICsyNzQwLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dE1jYXN0UGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dE1jYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3c7CiAKQEAgLTI2OTAsNiArMjc5OSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RQa3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yNzU0LDYgKzI4NjYsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0TWNhc3RPY3RldHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3c7CiAKQEAgLTI4MTYsNiArMjkzMSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RPY3RldHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyKS5oaWdoID0KQEAgLTI4NzgsNiArMjk5Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkJjYXN0UGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdzsKIApAQCAtMjkzNCw2ICszMDU1LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbkJjYXN0UGt0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjk5Niw2ICszMTIwLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEJjYXN0UGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dEJjYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEJjYXN0UGt0cy5sb3c7CiAKQEAgLTMwNTIsNiArMzE3OSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0QmNhc3RQa3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEJjYXN0UGt0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0zMTE2LDYgKzMyNDYsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUVdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZTsKIApAQCAtMzE3Miw2ICszMzA1LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c1JlZnJlc2hSYXRlIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5pcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGU7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCmluZGV4IDlhYTAxNmQuLmNhMWUxZjMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaApAQCAtMjM0LDggKzIzNCw4IEBACiAgICAgICAgICogaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaXBTeXN0ZW1TdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggYjYzMzI5Yi4uMzAwZWQ3YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpbmNsdWRlICJpcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKIAotc3RhdGljIGludCAgICAgIGlwc3NfY2FjaGVfcmVmcmVzaCA9IDMwOworc3RhdGljIGludCAgICAgIGlwc3NfY2FjaGVfcmVmcmVzaCA9IElQU1lTVEVNU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUOwogCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCkBAIC01OCw2MSArNTgsMTAgQEAKIGlwU3lzdGVtU3RhdHNUYWJsZV9pbml0X2RhdGEoaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWcpCiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBteV9jb2x1bW5zW10gPSB7Ci0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5SRUNFSVZFUywgQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lOUkVDRUlWRVMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0lOT0NURVRTLCAqLwotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5PQ1RFVFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5IRFJFUlJPUlMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0lOTk9ST1VURVMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5BRERSRVJST1JTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0lOVU5LTk9XTlBST1RPUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5UUlVOQ0FURURQS1RTLCAqLwotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0lORk9SV0RBVEFHUkFNUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lORk9SV0RBVEFHUkFNUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNSRUFTTVJFUURTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU1JFQVNNT0tTLCBDT0xVTU5fSVBTWVNURU1TVEFUU1JFQVNNRkFJTFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5ESVNDQVJEUywgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkRFTElWRVJTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5ERUxJVkVSUywgQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRSRVFVRVNUUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ09VVFJFUVVFU1RTLCBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE5PUk9VVEVTLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRGT1JXREFUQUdSQU1TLCAqLwotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VURk9SV0RBVEFHUkFNUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRESVNDQVJEUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR1JFUURTLCAqLwotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU09VVEZSQUdPS1MsIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR0ZBSUxTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU09VVEZSQUdDUkVBVEVTLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRUUkFOU01JVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VUVFJBTlNNSVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRPQ1RFVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTk1DQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTk1DQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5NQ0FTVE9DVEVUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTk1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRNQ0FTVFBLVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VUTUNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRNQ0FTVE9DVEVUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRNQ0FTVE9DVEVUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5CQ0FTVFBLVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5CQ0FTVFBLVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVEJDQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRCQ0FTVFBLVFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTRElTQ09OVElOVUlUWVRJTUUsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTUkVGUkVTSFJBVEUKLSAgICB9OwotICAgIHN0YXRpYyBuZXRzbm1wX2NvbHVtbl9pbmZvIHZhbGlkX2NvbHVtbnM7Ci0KLSAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcFN5c3RlbVN0YXRzVGFibGU6aXBTeXN0ZW1TdGF0c1RhYmxlX2luaXRfZGF0YSIsCisgICBERUJVR01TR1RMKCgidmVyYm9zZTppcFN5c3RlbVN0YXRzVGFibGU6aXBTeXN0ZW1TdGF0c1RhYmxlX2luaXRfZGF0YSIsCiAgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOwogCiAgICAgLyoKLSAgICAgKiB3ZSBvbmx5IHdhbnQgdG8gcHJvY2VzcyBjZXJ0YWluIGNvbHVtbnMsIGFuZCBpZ25vcmUKLSAgICAgKiBhbnl0aGluZyBlbHNlLgotICAgICAqLwotICAgIHZhbGlkX2NvbHVtbnMuaXNSYW5nZSA9IDA7Ci0gICAgdmFsaWRfY29sdW1ucy5kZXRhaWxzLmxpc3QgPSBteV9jb2x1bW5zOwotICAgIHZhbGlkX2NvbHVtbnMubGlzdF9jb3VudCA9IHNpemVvZihteV9jb2x1bW5zKSAvIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgIGlwU3lzdGVtU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldCgmdmFsaWRfY29sdW1ucyk7Ci0gICAgLyoKICAgICAgKiBUT0RPOjMwMzpvOiBJbml0aWFsaXplIGlwU3lzdGVtU3RhdHNUYWJsZSBkYXRhLgogICAgICAqLwogCkBAIC0xNjcsNyArMTE2LDExIEBACiAgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQogICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCiAgICAgICovCi0gICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKworCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiaXBTeXN0ZW1TdGF0c1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMICE9ICpjb250YWluZXJfcHRyX3B0cikKKyAgICAgICAgKCpjb250YWluZXJfcHRyX3B0ciktPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcFN5c3RlbVN0YXRzVGFibGUiKTsKIAogICAgIGlmIChOVUxMID09IGNhY2hlKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCkBAIC0xOTIsNiArMTQ1LDcgQEAKICAgICAgICAgKE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UgfCBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9FWFBJUkVECiAgICAgICAgICB8IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0JFRk9SRV9MT0FEIHwKICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQpOworICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCgqY29udGFpbmVyX3B0cl9wdHIpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KIAogLyoqCkBAIC0yMDQsNyArMTU4LDcgQEAKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeS4gd29ya3MgYmVjYXVzZSBpbmRleGVzIGFyZSB0aGUgc2FtZS4KICAgICAgKi8KLSAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICpzeXN0ZW1zdGF0c19lbnRyeSA9CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqc3lzdGVtc3RhdHNfZW50cnkgPSAobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKHN0YXRzLCByb3dyZXFfY3R4LT5kYXRhKTsKICAgICBpZiAoTlVMTCA9PSBzeXN0ZW1zdGF0c19lbnRyeSkgewogICAgICAgICBERUJVR01TR1RMKCgiaXBTeXN0ZW1TdGF0c1RhYmxlOmFjY2VzcyIsCkBAIC0yNjcsNyArMjIxLDcgQEAKICAgICAgICAgJiYgKE1GRF9TVUNDRVNTID09CiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zdGF0c19lbnRyeS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNfaXBfdmVyc2lvbikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhbMF0pKSkgewogICAgICAgICByb3dyZXFfY3R4LT5pcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGUgPSBpcHNzX2NhY2hlX3JlZnJlc2ggKiAxMDAwOyAgICAgICAvKiBtaWxsaS1zZWNvbmRzICovCiAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKICAgICB9IGVsc2UgewpAQCAtMzg2LDcgKzM0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBTeXN0ZW1TdGF0c1RhYmxlOmlwU3lzdGVtU3RhdHNUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJSIgTkVUU05NUF9QUkl6ICJ1IHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jCmluZGV4IDA4OTgxMmMuLmUxY2EyY2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOCBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwU3lzdGVtU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX3NpemUsIGlwU3lzdGVtU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwU3lzdGVtU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlwU3lzdGVtU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQsIGlwU3lzdGVtU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODAsMTkgKzkzLDIzIEBACiAgICAgICAgICAgICAgICAgX2lwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTAyLDEyICsxMTksMTUgQEAKICAgICBpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRShpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogLyoKICAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcwpAQCAtMTQ5LDcgKzE2OSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQU1lTVEVNU1RBVFNUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBTWVNURU1TVEFUU1RBQkxFX01BWF9DT0w7CkBAIC0yMjAsNyArMjQwLDggQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMjQzLDcgKzI2NCw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC01NDgsNyArNTY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNTk0LDcgKzYxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcFN5c3RlbVN0YXRzVGFibGU6X21mZF9pcFN5c3RlbVN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTExMDYsNyArMTEyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcFN5c3RlbVN0YXRzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTE3NSw3ICsxMTk2LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcFN5c3RlbVN0YXRzVGFibGVfZ2V0X3ZhbHVlcyAqLwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEzMzksNiArMTM2MCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBTeXN0ZW1TdGF0c1RhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xMzYxLDggKzEzODMsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQoaXBTeXN0ZW1TdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMKaW5kZXggOGFmOTYxMy4uOTA5NjI2OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMTEsNDQgKzEyLDI4NSBAQAogCiAjaW5jbHVkZSAiaXBfc2NhbGFycy5oIgogCi1pbnQKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcERlZmF1bHRUVEwobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CisKK3N0YXRpYyBpbnQKIGhhbmRsZV9pcHY2SXBGb3J3YXJkaW5nKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOwogCitzdGF0aWMgaW50CitoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworCitzdGF0aWMgaW50IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWU7CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEFkZHJlc3NTcGluTG9jayhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKwogLyoqIEluaXRpYWxpemVzIHRoZSBpcCBtb2R1bGUgKi8KIHZvaWQKIGluaXRfaXBfc2NhbGFycyh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgICAgICBpcFJlYXNtVGltZW91dF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMTMsIDAgfTsKKyAgICBzdGF0aWMgb2lkIAkgICAgaXBGb3J3YXJkaW5nX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAxIH07CisgICAgc3RhdGljIG9pZCAJICAgIGlwRGVmYXVsdFRUTF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMiB9OwogICAgIHN0YXRpYyBvaWQgICAgICBpcHY2SXBGb3J3YXJkaW5nX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAyNSB9OwotICAgIHN0YXRpYyBvaWQgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfb2lkW10gPQotICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDI2LCAwIH07CisgICAgc3RhdGljIG9pZCAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMjYgfTsKKyAgICBzdGF0aWMgb2lkICAgICAgaXBBZGRyZXNzU3BpbkxvY2tfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMzIH07CiAKICAgICBERUJVR01TR1RMKCgiaXBfc2NhbGFyIiwgIkluaXRpYWxpemluZ1xuIikpOwogCi0gICAgbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZQotICAgICAgICAoImlwUmVhc21UaW1lb3V0IiwKLSAgICAgICAgIGlwUmVhc21UaW1lb3V0X29pZCwgT0lEX0xFTkdUSChpcFJlYXNtVGltZW91dF9vaWQpLAotICAgICAgICAgIi9wcm9jL3N5cy9uZXQvaXB2NC9pcGZyYWdfdGltZSIsIEFTTl9JTlRFR0VSLAotICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksIE5VTEwsIE5VTEwpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBGb3J3YXJkaW5nIiwgaGFuZGxlX2lwRm9yd2FyZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwRm9yd2FyZGluZ19vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwRGVmYXVsdFRUTCIsIGhhbmRsZV9pcERlZmF1bHRUVEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRUVExfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChpcERlZmF1bHRUVExfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdjZJcEZvcndhcmRpbmciLCBoYW5kbGVfaXB2NklwRm9yd2FyZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NklwRm9yd2FyZGluZ19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXB2NklwRm9yd2FyZGluZ19vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpKTsKIAotICAgIG5ldHNubXBfcmVnaXN0ZXJfbnVtX2ZpbGVfaW5zdGFuY2UKLSAgICAgICAgKCJpcHY2SXBEZWZhdWx0SG9wTGltaXQiLAotICAgICAgICAgaXB2NklwRGVmYXVsdEhvcExpbWl0X29pZCwgT0lEX0xFTkdUSChpcHY2SXBEZWZhdWx0SG9wTGltaXRfb2lkKSwKLSAgICAgICAgICIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9kZWZhdWx0L2hvcF9saW1pdCIsIEFTTl9JTlRFR0VSLAotICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcHY2SXBEZWZhdWx0SG9wTGltaXQiLCBoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpKTsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcEFkZHJlc3NTcGluTG9jayIsIGhhbmRsZV9pcEFkZHJlc3NTcGluTG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzU3BpbkxvY2tfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwQWRkcmVzc1NwaW5Mb2NrX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOworCisgICAgLyogSW5pdGlhbGl6ZSBzcGluIGxvY2sgd2l0aCByYW5kb20gdmFsdWUgKi8KKyAgICBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlID0gKGludCkgcmFuZG9tKCk7CisKIH0KIAotaW50CitzdGF0aWMgaW50CitoYW5kbGVfaXBGb3J3YXJkaW5nKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgKnJlcXVlc3RzKQoreworICAgIGludCAgICAgIHJjOworICAgIHVfbG9uZyAgIHZhbHVlOworCisgICAgLyogV2UgYXJlIG5ldmVyIGNhbGxlZCBmb3IgYSBHRVRORVhUIGlmIGl0J3MgcmVnaXN0ZXJlZCBhcyBhCisgICAgICAgImluc3RhbmNlIiwgYXMgaXQncyAibWFnaWNhbGx5IiBoYW5kbGVkIGZvciB1cy4gICovCisKKyAgICAvKiBhIGluc3RhbmNlIGhhbmRsZXIgYWxzbyBvbmx5IGhhbmRzIHVzIG9uZSByZXF1ZXN0IGF0IGEgdGltZSwgc28KKyAgICAgICB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciBhIGxpc3Qgb2YgcmVxdWVzdHM7IHdlJ2xsIG9ubHkgZ2V0IG9uZS4gKi8KKworICAgIHN3aXRjaChyZXFpbmZvLT5tb2RlKSB7CisKKyAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX2dldCgmdmFsdWUpOworICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyAxIDogMjsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQoJnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9DUkVBVElPTik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVfbG9uZyAqdmFsdWVfc2F2ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZV9zYXZlID0gbmV0c25tcF9tZW1kdXAoJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAoIE5VTEwgPT0gdmFsdWVfc2F2ZSApCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwZnciLCB2YWx1ZV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKSk7CisJICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgICAgIC8qIFhYWDogZnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGluIFJFU0VSVkUxIGFuZC9vcgorICAgICAgICAgICAgICAgUkVTRVJWRTIuICBTb21ldGhpbmcgZmFpbGVkIHNvbWV3aGVyZSwgYW5kIHRoZSBzdGF0ZXMKKyAgICAgICAgICAgICAgIGJlbG93IHdvbid0IGJlIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICAgICAgLyogWFhYOiBwZXJmb3JtIHRoZSB2YWx1ZSBjaGFuZ2UgaGVyZSAqLworICAgICAgICAgICAgdmFsdWUgPSAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7CisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19zZXQodmFsdWUpOworICAgICAgICAgICAgaWYgKCAwICE9IHJjICkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIHJjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgIHZhbHVlID0KKyAgICAgICAgICAgICAgICAgKigodV9sb25nICopIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlwZnciKSk7CisgICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHZhbHVlKTsKKyAgICAgICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CisgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1VORE9GQUlMRUQpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfaXBGb3J3YXJkaW5nXG4iLCByZXFpbmZvLT5tb2RlICk7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcERlZmF1bHRUVEwobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgcmM7CisgICAgdV9sb25nICAgdmFsdWU7CisKKyAgICAvKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgICAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgKi8KKworICAgIC8qIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAgIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAqLworCisgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKKworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfZ2V0KCZ2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIC8qCisgICAgICAgICAqIFNFVCBSRVFVRVNUCisgICAgICAgICAqCisgICAgICAgICAqIG11bHRpcGxlIHN0YXRlcyBpbiB0aGUgdHJhbnNhY3Rpb24uICBTZWU6CisgICAgICAgICAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC9taWJfbW9kdWxlL3NldC1hY3Rpb25zLmpwZworICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc3RvcmUgb2xkIGluZm8gZm9yIHVuZG8gbGF0ZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfZ2V0KCZ2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PQ1JFQVRJT04pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1X2xvbmcgKnZhbHVlX3NhdmU7CisgICAgICAgICAgICAgICAgdmFsdWVfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKCZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgaWYgKCBOVUxMID09IHZhbHVlX3NhdmUgKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcHR0bCIsIHZhbHVlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKKwkgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgLyogWFhYOiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gUkVTRVJWRTEgYW5kL29yCisgICAgICAgICAgICAgICBSRVNFUlZFMi4gIFNvbWV0aGluZyBmYWlsZWQgc29tZXdoZXJlLCBhbmQgdGhlIHN0YXRlcworICAgICAgICAgICAgICAgYmVsb3cgd29uJ3QgYmUgY2FsbGVkLiAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICAvKiBYWFg6IHBlcmZvcm0gdGhlIHZhbHVlIGNoYW5nZSBoZXJlICovCisgICAgICAgICAgICB2YWx1ZSA9ICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBEZWZhdWx0VFRMX3NldCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICAgdmFsdWUgPQorICAgICAgICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXB0dGwiKSk7CisgICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHZhbHVlKTsKKyAgICAgICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CisgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1VORE9GQUlMRUQpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfaXBEZWZhdWx0VFRMXG4iLCByZXFpbmZvLT5tb2RlICk7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQKIGhhbmRsZV9pcHY2SXBGb3J3YXJkaW5nKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCkBAIC04MSw2ICszMjMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBTRVQgUkVRVUVTVAogICAgICAgICAgKgpAQCAtMTEwLDcgKzM1Myw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwZnciLCB2YWx1ZV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXA2ZnciLCB2YWx1ZV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEzMywxMiArMzc2LDEzIEBACiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICB2YWx1ZSA9CiAgICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlwZnciKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlwNmZ3IikpOwogICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfc2V0KHZhbHVlKTsKICAgICAgICAgaWYgKCAwICE9IHJjICkgewogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyoKQEAgLTE1MSwzICszOTUsMTkzIEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworCitzdGF0aWMgaW50CitoYW5kbGVfaXBBZGRyZXNzU3BpbkxvY2sobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisgICAgbG9uZyAgIHZhbHVlOworCisgICAgLyogV2UgYXJlIG5ldmVyIGNhbGxlZCBmb3IgYSBHRVRORVhUIGlmIGl0J3MgcmVnaXN0ZXJlZCBhcyBhCisgICAgICAgImluc3RhbmNlIiwgYXMgaXQncyAibWFnaWNhbGx5IiBoYW5kbGVkIGZvciB1cy4gICovCisKKyAgICAvKiBhIGluc3RhbmNlIGhhbmRsZXIgYWxzbyBvbmx5IGhhbmRzIHVzIG9uZSByZXF1ZXN0IGF0IGEgdGltZSwgc28KKyAgICAgICB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciBhIGxpc3Qgb2YgcmVxdWVzdHM7IHdlJ2xsIG9ubHkgZ2V0IG9uZS4gKi8KKworICAgIHN3aXRjaChyZXFpbmZvLT5tb2RlKSB7CisKKyAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpcEFkZHJlc3NTcGluTG9ja1ZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAgICAgLyoganVzdCBjaGVjayB0aGUgdmFsdWUgKi8KKyAgICAgICAgICAgIHZhbHVlID0gICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUpCisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICAvKiBwZXJmb3JtIHRoZSBmaW5hbCBzcGlubG9jayBjaGVjayBhbmQgaW5jcmVhc2UgaXRzIHZhbHVlICovCisgICAgICAgICAgICB2YWx1ZSA9ICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlKys7CisgICAgICAgICAgICAgICAgLyogYW5kIGNoZWNrIGl0IGZvciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIGlmIChpcEFkZHJlc3NTcGluTG9ja1ZhbHVlID4gMjE0NzQ4MzY0NyB8fCBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfaXBBZGRyZXNzU3BpbkxvY2tcbiIsIHJlcWluZm8tPm1vZGUgKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAoraGFuZGxlX2lwdjZJcERlZmF1bHRIb3BMaW1pdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIHVfbG9uZyAgICAgICAgICB2YWx1ZTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgLyoKKyAgICAgKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgKiAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgCisgICAgICovCisKKyAgICAvKgorICAgICAqIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAqIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAKKyAgICAgKi8KKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworCisgICAgY2FzZSBNT0RFX0dFVDoKKworICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9nZXQoJnZhbHVlKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisjaWZkZWYgTk9UWUVUCisgICAgICAgIC8qCisgICAgICAgICAqIFNFVCBSRVFVRVNUCisgICAgICAgICAqCisgICAgICAgICAqIG11bHRpcGxlIHN0YXRlcyBpbiB0aGUgdHJhbnNhY3Rpb24uICBTZWU6CisgICAgICAgICAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC9taWJfbW9kdWxlL3NldC1hY3Rpb25zLmpwZworICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAvKgorICAgICAgICAgKiBvciB5b3UgY291bGQgdXNlIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZSBpbnN0ZWFkIAorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIpOworICAgICAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYIG1hbGxvYyAidW5kbyIgc3RvcmFnZSBidWZmZXIgCisgICAgICAgICAqLworICAgICAgICBpZiAoIC8qIFhYWCBpZiBtYWxsb2MsIG9yIHdoYXRldmVyLCBmYWlsZWQ6ICovICkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgIC8qCisgICAgICAgICAqIFhYWDogZnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGluIFJFU0VSVkUxIGFuZC9vcgorICAgICAgICAgKiBSRVNFUlZFMi4gIFNvbWV0aGluZyBmYWlsZWQgc29tZXdoZXJlLCBhbmQgdGhlIHN0YXRlcworICAgICAgICAgKiBiZWxvdyB3b24ndCBiZSBjYWxsZWQuIAorICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBwZXJmb3JtIHRoZSB2YWx1ZSBjaGFuZ2UgaGVyZSAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYOiBlcnJvcj8gKi8gKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCAvKiBzb21lIGVycm9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBkZWxldGUgdGVtcG9yYXJ5IHN0b3JhZ2UgCisgICAgICAgICAqLworICAgICAgICBpZiAoIC8qIFhYWDogZXJyb3I/ICovICkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyeSBfcmVhbGx5X3JlYWxseV8gaGFyZCB0byBuZXZlciBnZXQgdG8gdGhpcyBwb2ludCAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfQ09NTUlURkFJTEVEKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBVTkRPIGFuZCByZXR1cm4gdG8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBvYmplY3QgCisgICAgICAgICAqLworICAgICAgICBpZiAoIC8qIFhYWDogZXJyb3I/ICovICkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyeSBfcmVhbGx5X3JlYWxseV8gaGFyZCB0byBuZXZlciBnZXQgdG8gdGhpcyBwb2ludCAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBtb2RlICglZCkgaW4gaGFuZGxlX2lwdjZJcERlZmF1bHRIb3BMaW1pdFxuIiwKKyAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYwppbmRleCBiZDI3Yjc4Li4zNTFkZGQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgImlwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRbXSA9IHsgSVBWNElOVEVSRkFDRVRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZFtdID0geyBJUFY0SU5URVJGQUNFVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaXB2NEludGVyZmFjZVRhYmxlX29pZCk7CiAKIGlwdjRJbnRlcmZhY2VUYWJsZV9yZWdpc3RyYXRpb24gaXB2NEludGVyZmFjZVRhYmxlX3VzZXJfY29udGV4dDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oCmluZGV4IGFkNWE2NzguLjgxMjM5MDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaApAQCAtMzksNiArMzksNyBAQAogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKICAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9pcHY0SW50ZXJmYWNlVGFibGUodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfaXB2NEludGVyZmFjZVRhYmxlKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9pcHY0SW50ZXJmYWNlVGFibGUodm9pZCk7CiAKQEAgLTEwNyw4ICsxMDgsOCBAQAogICAgICAgICAqIGlwdjRJbnRlcmZhY2VUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKGlwdjRJbnRlcmZhY2VUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImlwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDg0YTk4ZmYuLmM5ZTE0ZmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICAgKiB5ZXMuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY0SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgImluc2VydGVkIHJvdyBmb3IgJWRcbiIsIGVudHJ5LT5pbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgImluc2VydGVkIHJvdyBmb3IgJSIgTkVUU05NUF9QUklvICJkXG4iLCBlbnRyeS0+aW5kZXgpKTsKICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoYywgaWZ0X3JyYyk7CiAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKICAgICAgICAgfQpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAgKiBubwogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgiaXB2NEludGVyZmFjZVRhYmxlOmNoZWNrX2VudHJ5X2Zvcl91cGRhdGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVkICByb3cgZm9yICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZWQgIHJvdyBmb3IgJSIgTkVUU05NUF9QUklvICJkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShjLCBpZnRfcnJjKTsKICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+cmV0cmFuc21pdF92NCkgfHwKICAgICAgICAgICAgICAgICAoZW50cnktPnJlYXNtX21heF92NCAhPSBpZnRfcnJjLT5kYXRhLmlmZW50cnktPnJlYXNtX21heF92NCkpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaXB2NEludGVyZmFjZVRhYmxlOmNoZWNrX2VudHJ5X2Zvcl91cGRhdGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm93IGNoYW5nZWQgZm9yICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgY2hhbmdlZCBmb3IgJSIgTkVUU05NUF9QUklvICJkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+aW5kZXgpKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggNmYxYWE0OS4uYTg1MWEzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ0LDggKzQ1LDE0IEBACiAKICNpbmNsdWRlICJpcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgiCiAKKyNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgiCisKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTE5NCw3ICsyMDEsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJUFY0SU5URVJGQUNFVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQVjRJTlRFUkZBQ0VUQUJMRV9NQVhfQ09MOwpAQCAtMzQ1LDcgKzM1Miw3IEBACiAgICAgICovCiAgICAgewogICAgICAgICBvaWQgICAgICAgICAgICAgbGNfb2lkW10gPSB7IElQVjRJTlRFUkZBQ0VUQUJMRUxBU1RDSEFOR0VfT0lEIH07Ci0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdjRUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGNfb2lkLCBPSURfTEVOR1RIKGxjX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKQEAgLTQ0Nyw4ICs0NTQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXB2NEludGVyZmFjZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQotICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NEludGVyZmFjZVRhYmxlOl9tZmRfaXB2NEludGVyZmFjZVRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKQEAgLTEyNzAsNiArMTI3NSw3IEBACiAgICAgICAgICAgICAgICAgICJpcHY0SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2luaXRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiaXB2NEludGVyZmFjZVRhYmxlIik7CiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjRJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYwppbmRleCAzYzg1YTU0Li4zNWIyZTk2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMKQEAgLTYsOSArNiwxNCBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWdlbnR4X2VuYWJsZV9zdWJhZ2VudCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZW5hYmxlX3N0ZGVycmxvZykKKwogLyoKICAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jCmluZGV4IGY5Y2FhZWYuLjkyZjBhNWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZFtdID0geyBJUFY2SU5URVJGQUNFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkW10gPSB7IElQVjZJTlRFUkZBQ0VUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcHY2SW50ZXJmYWNlVGFibGVfb2lkKTsKIAogaXB2NkludGVyZmFjZVRhYmxlX3JlZ2lzdHJhdGlvbiBpcHY2SW50ZXJmYWNlVGFibGVfdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgKaW5kZXggODI5MmVjMC4uZTJhODdhMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwogICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwdjZJbnRlcmZhY2VUYWJsZSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9pcHY2SW50ZXJmYWNlVGFibGUodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwdjZJbnRlcmZhY2VUYWJsZSh2b2lkKTsKIApAQCAtMTkxLDggKzE5Miw4IEBACiAgICAgICAgICogaXB2NkludGVyZmFjZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaXB2NkludGVyZmFjZVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggYjE0MDhmZC4uMzNjNjVhOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgICAqIHllcy4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjZJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciBpbmRleCAlZFxuIiwgZW50cnktPmluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciBpbmRleCAlIiBORVRTTk1QX1BSSW8gImRcbiIsIGVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBpZnRfcnJjKTsKICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICB9CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgICAqIG5vCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY2SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZWQgIHJvdyBmb3IgaW5kZXggJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlZCAgcm93IGZvciBpbmRleCAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGMsIGlmdF9ycmMpOwogICAgICAgICAgICAgY2hhbmdlZCA9IDE7CkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgJiYgKGVudHJ5LT5mb3J3YXJkaW5nX3Y2ICE9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmZvcndhcmRpbmdfdjYpKSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY2SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgY2hhbmdlZCBmb3IgaW5kZXggJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBjaGFuZ2VkIGZvciBpbmRleCAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICAgICAgfQpAQCAtMzI5LDcgKzMyOSw3IEBACiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCi0gICAgREVCVUdNU0dUKCgidmVyYm9zZTppcHY2SW50ZXJmYWNlVGFibGU6aXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVkIHJlY29yZHNcbiIsIGNvdW50KSk7CisgICAgREVCVUdNU0dUKCgidmVyYm9zZTppcHY2SW50ZXJmYWNlVGFibGU6aXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVkIHJlY29yZHNcbiIsIChpbnQpY291bnQpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuaAppbmRleCA0MWQ3MTU3Li42NjRjM2Q3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTM1LDI2ICszNSwxNCBAQAogICAgICAqLwogCiAKLSAgICBpbnQKLSAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2luaXRfZGF0YShpcHY2SW50ZXJmYWNlVGFibGVfcmVnaXN0cmF0aW9uICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfcmVnKTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2luaXRfZGF0YShpcHY2SW50ZXJmYWNlVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfcmVnKTsKIAogCisgICAgdm9pZCAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9jaGVja19lbnRyeV9mb3JfdXBkYXRlcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZlRhYmxlX3Jvd3JlcV9jdHggKiBpZnRfcnJjLAorCQkJICAgIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSk7CisKICAgICB2b2lkICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnRhaW5lcl9wdHJfcHRyKTsKICAgICB2b2lkICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lcgpAQCAtNjUsMjQgKzUzLDggQEAKICAgICB2b2lkICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGFpbmVyKTsKIAotICAgIGludAotICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfcm93X3ByZXAoaXB2NkludGVyZmFjZVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yb3dfcHJlcChpcHY2SW50ZXJmYWNlVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKIAogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggNDIwMjYxNi4uY2JkNTMzYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ4LDYgKzQ5LDEwIEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTE5NCw3ICsxOTksNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJUFY2SU5URVJGQUNFVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQVjZJTlRFUkZBQ0VUQUJMRV9NQVhfQ09MOwpAQCAtMzQ1LDcgKzM1MCw3IEBACiAgICAgICovCiAgICAgewogICAgICAgICBvaWQgICAgICAgICAgICAgbGNfb2lkW10gPSB7IElQVjZJTlRFUkZBQ0VUQUJMRUxBU1RDSEFOR0VfT0lEIH07Ci0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdjZUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGNfb2lkLCBPSURfTEVOR1RIKGxjX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKQEAgLTEzNTIsNyArMTM1Nyw3IEBACiAgICAgICAgICAgICAgICAgICJpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2luaXRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcHY2SW50ZXJmYWNlVGFibGUiKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5YmQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk0MDkzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMKQEAgLTAsMCArMSwxMDA5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMgMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworLyoqIFxwYWdlIE1GRCBoZWxwZXIgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKgorICogXHNlY3Rpb24gaW50cm8gSW50cm9kdWN0aW9uCisgKiBJbnRyb2R1Y3RvcnkgdGV4dC4KKyAqCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIgorCitjb25zdCBvaWQgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkW10gPQorICAgIHsgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkX3NpemUgPQorT0lEX0xFTkdUSChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWQpOworCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0Oworc3RhdGljIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3A7CisKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpOworCisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG1vZHVsZQorICovCit2b2lkCitpbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aW5pdF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDA6bzogUGVyZm9ybSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBvbmUtdGltZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nCisgICAgICovCisgICAgaWYgKHNob3VsZF9pbml0KCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIpKQorICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKCk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSAqLworCisvKioKKyAqIFNodXQtZG93biB0aGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbW9kdWxlIChhZ2VudCBpcyBleGl0aW5nKQorICovCit2b2lkCitzaHV0ZG93bl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKQoreworICAgIGlmIChzaG91bGRfaW5pdCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiKSkKKyAgICAgICAgc2h1dGRvd25fdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUoKTsKKworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCkKK3sKKyAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppbml0aWFsaXplX3RhYmxlX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3VzZXJfY29udGV4dF9wID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsIE5VTEwsIE5VTEwpOworCisgICAgLyoKKyAgICAgKiBObyBzdXBwb3J0IGZvciBhbnkgZmxhZ3MgeWV0LCBidXQgaW4gdGhlIGZ1dHVyZSB5b3Ugd291bGQKKyAgICAgKiBzZXQgYW55IGZsYWdzIGhlcmUuCisgICAgICovCisgICAgZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisJKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3VzZXJfY29udGV4dF9wLCBmbGFncyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgKi8KKworLyoqCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgCisgKi8KK3ZvaWQKK3NodXRkb3duX3RhYmxlX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBzaHV0ZG93biBjb2RlCisgICAgICovCisgICAgX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHRfcCA9IE5VTEw7Cit9CisKKy8qKgorICogZXh0cmEgY29udGV4dCBpbml0aWFsaXphdGlvbiAoZWcgZGVmYXVsdCB2YWx1ZXMpCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggICAgOiByb3cgcmVxdWVzdCBjb250ZXh0CisgKiBAcGFyYW0gdXNlcl9pbml0X2N0eCA6IHZvaWQgcG9pbnRlciBmb3IgdXNlciAocGFyYW1ldGVyIHRvIHJvd3JlcV9jdHhfYWxsb2NhdGUpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgOiBubyBlcnJvcnMKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgIDogZXJyb3IgKGNvbnRleHQgYWxsb2NhdGUgd2lsbCBmYWlsKQorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfaW5pdChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCB2b2lkICp1c2VyX2luaXRfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfaW5pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMTpvOiB8LT4gUGVyZm9ybSBleHRyYSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSByb3dyZXEgY2xlYW51cC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShyb3dyZXFfY3R4LT5kYXRhKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhID0gTlVMTDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTEwOm86IFBlcmZvcm0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcHJlLXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBwb3N0LXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlOgorICogICBOZXcgcm93cyBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyLCBhbmQKKyAqICAgZGVsZXRlZCByb3dzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQKKyAqICAgcmVsZWFzZWQuCisgKgorICogQHBhcmFtIHVzZXJfY29udGV4dAorICogQHBhcmFtIHJjIDogTUZEX1NVQ0NFU1MgaWYgYWxsIHJlcXVlc3RzIHN1Y2NlZWRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IG90aGVyIGVycm9yIChpZ25vcmVkKQorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCwgaW50IHJjKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qCisgKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhCisgKgorICogUHVycG9zZTogY3JlYXRlIG5ldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhLgorICovCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCkKK3sKKyAgICAvKgorICAgICAqIFRPRE86MjAxOnI6IHwtPiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YSAqcnRuID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2NyZWF0ZSgpOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkgZm9yIG5ldyAiCisgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSAqLworCisvKgorICogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhCisgKgorICogUHVycG9zZTogcmVsZWFzZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhLgorICovCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX2RhdGEoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YSAqIGRhdGEpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIwMjpyOiB8LT4gcmVsZWFzZSBtZW1vcnkgZm9yIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2ZyZWUoZGF0YSk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2VfZGF0YSAqLworCisvKiogQGRlZmdyb3VwIGRhdGFfZ2V0IGRhdGFfZ2V0OiBSb3V0aW5lcyB0byBnZXQgZGF0YQorICoKKyAqIFRPRE86MjMwOk06IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBnZXQgcm91dGluZXMuCisgKiBUT0RPOjI0MDpNOiBJbXBsZW1lbnQgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbWFwcGluZyByb3V0aW5lcyAoaWYgYW55KS4KKyAqCisgKiBUaGVzZSByb3V0aW5lIGFyZSB1c2VkIHRvIGdldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgd2hlcmUgdGhlCisgKiB2YWx1ZSBzaG91bGQgYmUgY29waWVkLgorICoKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaXMgc3ViaWQgMzYgb2YgaXAuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisKKworLyoqCisgKiBzZXQgbWliIGluZGV4KGVzKQorICoKKyAqIEBwYXJhbSB0YmxfaWR4IG1pYiBpbmRleCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICBsb25nIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIHRibF9pZHgtPmlwdjZTY29wZVpvbmVJbmRleElmSW5kZXggPSBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbCkpCisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQgbWliIGluZGV4IHRvIG9pZCBpbmRleAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gc2l6ZW9mKHJvd3JlcV9jdHgtPm9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisgICAgaWYgKDAgIT0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKCZyb3dyZXFfY3R4LT5vaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+dGJsX2lkeCkpIHsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsCisgKiBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWwgaXMgc3ViaWQgMiBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuMgorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3IgdGhlIGxpbmstbG9jYWwgc2NvcGUgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWwgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnNjb3Blem9uZV9saW5rbG9jYWw7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4MworICogaXB2NlNjb3BlWm9uZUluZGV4MyBpcyBzdWJpZCAzIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4zCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSAzIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4MyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleDNfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4M19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXgzIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0cikgPSAwOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleDNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWwKKyAqIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWwgaXMgc3ViaWQgNCBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuNAorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3IgdGhlIGFkbWluLWxvY2FsIHNjb3BlIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWwKKyAqIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbCBpcyBzdWJpZCA1IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS41CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciB0aGUgc2l0ZS1sb2NhbCBzY29wZSBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF9nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXg2CisgKiBpcHY2U2NvcGVab25lSW5kZXg2IGlzIHN1YmlkIDYgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDYgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg2IGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4Nl92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4Nl9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXg2X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDYgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleDZfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4Nl92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleDZfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleDcKKyAqIGlwdjZTY29wZVpvbmVJbmRleDcgaXMgc3ViaWQgNyBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuNworICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgNyBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDcgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXg3X3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXg3X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleDdfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4NyBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXg3X3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4N19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWwKKyAqIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsIGlzIHN1YmlkIDggb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjgKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHRoZSBvcmdhbml6YXRpb24tbG9jYWwgc2NvcGUgb24gdGhpcworICAgICAgICAgICAgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWwgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbCBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4OQorICogaXB2NlNjb3BlWm9uZUluZGV4OSBpcyBzdWJpZCA5IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS45CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSA5IG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4OSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleDlfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleDlfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4OV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg5IGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXg5X3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleDlfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXg5X2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhBCisgKiBpcHY2U2NvcGVab25lSW5kZXhBIGlzIHN1YmlkIDEwIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4xMAorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgQSBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEEgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhBX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhBX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleEFfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QSBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4QV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhBX3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4QV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4QgorICogaXB2NlNjb3BlWm9uZUluZGV4QiBpcyBzdWJpZCAxMSBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIEIgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhCIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4Ql92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4Ql9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhCX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEIgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleEJfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4Ql92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleEJfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEMKKyAqIGlwdjZTY29wZVpvbmVJbmRleEMgaXMgc3ViaWQgMTIgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjEyCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSBDIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleENfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleENfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4Q19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhDIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhDX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleENfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhDX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhECisgKiBpcHY2U2NvcGVab25lSW5kZXhEIGlzIHN1YmlkIDEzIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4xMworICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgRCBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEQgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhEX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhEX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleERfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4RCBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4RF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhEX3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4RF9nZXQgKi8KKworCisvKiogQHsgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NGZlZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0gKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIG1pc2MgbWlzYzogTWlzY2VsbGFuZW91cyByb3V0aW5lcworICoKKyAqIEB7CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaD4KKyAgICAvKgorICAgICAqIG90aGVyIHJlcXVpcmVkIG1vZHVsZSBjb21wb25lbnRzIAorICAgICAqLworICAgIC8qICpJTkRFTlQtT0ZGKiAgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZSkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2VzcykKKyAgICAvKiAqSU5ERU5ULU9OKiAgKi8KKworICAgIC8qCisgICAgICogT0lEIGFuZCBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSAKKyAgICAgKi8KKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgiCisKKyAgICAvKgorICAgICAqIGVudW0gZGVmaW5pb25zIAorICAgICAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgiCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25faXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCk7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhUYWJsZSBpcyBzdWJpZCAzNiBvZiBpcC4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNiwgbGVuZ3RoOiA4CisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogV2hlbiB5b3UgcmVnaXN0ZXIgeW91ciBtaWIsIHlvdSBnZXQgdG8gcHJvdmlkZSBhIGdlbmVyaWMKKyAgICAgKiBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3UgZm9yIG1vc3Qgb2YgdGhlCisgICAgICogZnVuY3Rpb25zIGNhbGxzLgorICAgICAqCisgICAgICogVE9ETzoxMDA6cjogUmV2aWV3IGFsbCBjb250ZXh0IHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRPRE86MTAxOm86IHwtPiBSZXZpZXcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RhdGFfbGlzdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFRPRE86MTEwOnI6IHwtPiBSZXZpZXcgaXB2NlNjb3BlWm9uZVRhYmxlIGRhdGEgY29udGV4dCBzdHJ1Y3R1cmUuCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGRhdGEgZm9yIGlwdjZTY29wZVpvbmVUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMDpyOiB8LT4gUmV2aWV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG1pYiBpbmRleC4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleF9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgICAgICovCisgICAgICAgIGxvbmcgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4OworCisKKyAgICB9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleDsKKworICAgIC8qCisgICAgICogVE9ETzoxMjE6cjogfCAgIHwtPiBSZXZpZXcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbWF4IGluZGV4IGxlbmd0aC4KKyAgICAgKiBJZiB5b3UgS05PVyB0aGF0IHlvdXIgaW5kZXhlcyB3aWxsIG5ldmVyIGV4Y2VlZCBhIGNlcnRhaW4KKyAgICAgKiBsZW5ndGgsIHVwZGF0ZSB0aGlzIG1hY3JvIHRvIHRoYXQgbGVuZ3RoLgorICAgICAqLworI2RlZmluZSBNQVhfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfSURYX0xFTiAgICAgMQorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxMzA6bzogfC0+IFJldmlldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBSb3cgcmVxdWVzdCAocm93cmVxKSBjb250ZXh0LgorICAgICAqIFdoZW4geW91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgeW91IHdpbGwgYmUgcGFzc2VkIGEKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4IHBvaW50ZXIuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9zIHsKKworICAgIC8qKiB0aGlzIG11c3QgYmUgZmlyc3QgZm9yIGNvbnRhaW5lciBjb21wYXJlIHRvIHdvcmsgKi8KKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9JRFhfTEVOXTsKKworICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggdGJsX2lkeDsKKworICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICpkYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBzdG9yYWdlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9saXN0OworCisgICAgfSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVmX3Jvd3JlcV9jdHhfcyB7CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgfSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWZfcm93cmVxX2N0eDsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0LCBpbnQgcmMpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfaW5pdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9jbGVhbnVwCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICoKKyAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworCisgICAgdm9pZAorICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2VfZGF0YShpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICogZGF0YSk7CisKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleDNfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXg2X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4Nl92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4N19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX2dldAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4OV9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDlfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEFfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhBX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhCX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4Ql92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4Q19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleENfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleERfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhEX3ZhbF9wdHIpOworCisKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICogdGJsX2lkeCwKKyAgICAgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICBsb25nIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsKTsKKworICAgIC8qCisgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCisgICAgICoKKyAgICAgKiBUT0RPOjA5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mjk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjM5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzo0OTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyNWRkMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMgMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgiCisKKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgiCisKKy8qKiBAaW5ncm91cCBpbnRlcmZhY2UKKyAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZGF0YSB1c2VkIHRvIHNhdGlzZnkKKyAqIHJlcXVlc3RzLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNiwgbGVuZ3RoOiA4CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdF9kYXRhKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YSIsICJjYWxsZWRcbiIpKTsKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YSAqLworCisvKioKKyAqIGNvbnRhaW5lciBvdmVydmlldworICoKKyAqLworCisvKioKKyAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CisgKiAgICAgICAgY3JlYXRlIGEgY3VzdG9tIGNvbnRhaW5lciwgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHJldHVybiBpdAorICogICAgICAgIHRvIHRoZSBNRkQgaGVscGVyLiBJZiBzZXQgdG8gTlVMTCwgdGhlIE1GRCBoZWxwZXIgd2lsbAorICogICAgICAgIGFsbG9jYXRlIGEgY29udGFpbmVyIGZvciB5b3UuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLiBJZiBubyBjdXN0b20KKyAqICBjb250YWluZXIgaXMgYWxsb2NhdGVkLCB0aGUgTUZEIGNvZGUgd2lsbCBjcmVhdGUgb25lIGZvciB5b3VyLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgb3BlbmluZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCB3aWxsIHN1cHBseSB0aGUgZGF0YSwgb3BlbmluZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNhY2hlIHBhcmFtIHRvIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogVE9ETzozNDU6QTogU2V0IHVwIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGNhY2hlIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCisgICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKKyAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAorICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCisgICAgICovCisgICAgY2FjaGUtPnRpbWVvdXQgPSA2MDsgLyogc2Vjb25kcyAqLworCisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyX3B0cikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93blxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKy8qKgorICogY2hlY2sgZW50cnkgZm9yIHVwZGF0ZQorICoKKyAqLworc3RhdGljIHZvaWQKK19zbmFyZl96b25laW5kZXhfZW50cnkobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqc2NvcGV6b25lX2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICBERUJVR1RSQUNFOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gc2NvcGV6b25lX2VudHJ5KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisgICAgcm93cmVxX2N0eCA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoc2NvcGV6b25lX2VudHJ5LE5VTEwpOworICAgIGlmICgoTlVMTCAhPSByb3dyZXFfY3R4KSAmJgorICAgICAgICAgKE1GRF9TVUNDRVNTID09IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0CisgICAgICAgICAocm93cmVxX2N0eCwgcm93cmVxX2N0eC0+ZGF0YS0+aW5kZXgpKSkgeworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgfSBlbHNlIHsKKyAgICAgICBpZiAocm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShzY29wZXpvbmVfZW50cnkpOworICAgIH0KKyAgICAgIAorfQorCisvKioKKyAqIGxvYWQgaW5pdGlhbCBkYXRhCisgKgorICogVE9ETzozNTA6TTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgbG9hZAorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHRvIHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBpbnNlcnRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFIDogQ2FuJ3QgYWNjZXNzIGRhdGEgc291cmNlCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBpbmRleChlcykgKGFuZCBkYXRhLCBvcHRpb25hbGx5KQorICogIGZvciB0aGUgZXZlcnkgcm93IGluIHRoZSBkYXRhIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgV2hpbGUgbG9hZGluZyB0aGUgZGF0YSwgdGhlIG9ubHkgaW1wb3J0YW50IHRoaW5nIGlzIHRoZSBpbmRleGVzLgorICogIElmIGFjY2VzcyB0byB5b3VyIGRhdGEgaXMgY2hlYXAvZmFzdCAoZS5nLiB5b3UgaGF2ZSBhIHBvaW50ZXIgdG8gYQorICogIHN0cnVjdHVyZSBpbiBtZW1vcnkpLCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHVwZGF0ZSB0aGUgZGF0YSBoZXJlLgorICogIElmLCBob3dldmVyLCB0aGUgYWNjZXNzaW5nIHRoZSBkYXRhIGludm92bGVzIG1vcmUgd29yayAoZS5nLiBwYXJzaW5nCisgKiAgc29tZSBvdGhlciBleGlzdGluZyBkYXRhLCBvciBwZWZvcm1pbmcgY2FsY3VsYXRpb25zIHRvIGRlcml2ZSB0aGUgZGF0YSksCisgKiAgdGhlbiB5b3UgY2FuIGxpbWl0IHlvdXJzZWxmIHRvIHNldHRpbmcgdGhlIGluZGV4ZXMgYW5kIHNhdmluZyBhbnkKKyAqICBpbmZvcm1hdGlvbiB5b3Ugd2lsbCBuZWVkIGxhdGVyLiBUaGVuIHVzZSB0aGUgc2F2ZWQgaW5mb3JtYXRpb24gaW4KKyAqICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfcHJlcCgpIGZvciBwb3B1bGF0aW5nIGRhdGEuCisgKgorICogQG5vdGUKKyAqICBJZiB5b3UgbmVlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHJvd3MgKGxpa2UgeW91IHdhbnQgc3RhdGlzdGljcworICogIGZvciBlYWNoIHJvdyB0byBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgZnJhbWUpLCB5b3Ugc2hvdWxkIHNldCBhbGwKKyAqICBkYXRhIGhlcmUuCisgKgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworCisgICAgLyoKKyAgICAgKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgaW5kZXggdmFsdWVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqem9uZWluZGV4ID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9sb2FkKE5VTEwsIDApOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSB6b25laW5kZXgpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmNvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGdldCBzY29wZXpvbmUgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBUT0RPOjM1MTpNOiB8LT4gTG9hZC91cGRhdGUgZGF0YSBpbiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgY29udGFpbmVyLgorICAgICAqIGxvb3Agb3ZlciB5b3VyIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCisgICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KKyAgICAgKiB0aGUgY29udGFpbmVyLgorICAgICAqLworCisgICAgIENPTlRBSU5FUl9GT1JfRUFDSCh6b25laW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfc25hcmZfem9uZWluZGV4X2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICAvKgorICAgICAqIGZyZWUgdGhlIGNvbnRhaW5lci4gd2UndmUgZWl0aGVyIGNsYWltZWQgZWFjaCBlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCisgICAgICogc28gdGhlIGFjY2VzcyBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2ZyZWUoem9uZWluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEpOworCisgICAgREVCVUdNU0dUKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfbG9hZCIsICJpbnNlcnRlZCAlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfbG9hZCAqLworCisvKioKKyAqIGNvbnRhaW5lciBjbGVhbiB1cAorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHdpdGggYWxsIGN1cnJlbnQgaXRlbXMKKyAqCisgKiAgVGhpcyBvcHRpb25hbCBjYWxsYmFjayBpcyBjYWxsZWQgcHJpb3IgdG8gYWxsCisgKiAgaXRlbSdzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyLiBJZiB5b3UKKyAqICBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGJlZm9yZSB0aGF0LCBkbyBpdCBoZXJlLgorICoKKyAqIEBub3RlCisgKiAgVGhlIE1GRCBoZWxwZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVsZWFzaW5nIGFsbCB0aGUgcm93IGNvbnRleHRzLgorICoKKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzgwOk06IEZyZWUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgY29udGFpbmVyIGRhdGEuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogcHJlcGFyZSByb3cgZm9yIHByb2Nlc3NpbmcuCisgKgorICogIFdoZW4gdGhlIGFnZW50IGhhcyBsb2NhdGVkIHRoZSByb3cgZm9yIGEgcmVxdWVzdCwgdGhpcyBmdW5jdGlvbiBpcworICogIGNhbGxlZCB0byBwcmVwYXJlIHRoZSByb3cgZm9yIHByb2Nlc3NpbmcuIElmIHlvdSBmdWxseSBwb3B1bGF0ZWQKKyAqICB0aGUgZGF0YSBjb250ZXh0IGR1cmluZyB0aGUgaW5kZXggc2V0dXAgcGhhc2UsIHlvdSBtYXkgbm90IG5lZWQgdG8KKyAqICBkbyBhbnl0aGluZy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCBwb2ludGVyIHRvIGEgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfcHJlcCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzkwOm86IFByZXBhcmUgcm93IGZvciByZXF1ZXN0LgorICAgICAqIElmIHBvcHVsYXRpbmcgcm93IGRhdGEgd2FzIGRlbGF5ZWQsIHRoaXMgaXMgdGhlIHBsYWNlIHRvCisgICAgICogZmlsbCBpbiB0aGUgcm93IGZvciB0aGlzIHJlcXVlc3QuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5OGU5MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKyNpZm5kZWYgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhUYWJsZSBpcyBzdWJpZCAzNiBvZiBpcC4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNiwgbGVuZ3RoOiA4CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0X2RhdGEKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWcpOworCisKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyKTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworI2RlZmluZSBNQVhfTElORV9TSVpFIDI1NgorICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfcHJlcChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9EQVRBX0FDQ0VTU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWVjODgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtZW51bXMubTJjIDEyNTI2IDIwMDUtMDctMTUgMjI6NDE6MTZaIHJzdG9yeSAkCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmggMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworI2lmbmRlZiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9FTlVNU19ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0VOVU1TX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBOT1RFUyBvbiBlbnVtcworICAgICAqID09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBWYWx1ZSBNYXBwaW5nCisgICAgICogLS0tLS0tLS0tLS0tLQorICAgICAqIElmIHRoZSB2YWx1ZXMgZm9yIHlvdXIgZGF0YSB0eXBlIGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICogcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIG1pYiwgeW91IHNob3VsZCBtYXAgdGhlbQorICAgICAqIGJlbG93LiBGb3IgZXhhbXBsZSwgYSBib29sZWFuIGZsYWcgKDEvMCkgaXMgdXN1YWxseSByZXByZXNlbnRlZAorICAgICAqIGFzIGEgVHJ1dGhWYWx1ZSBpbiBhIE1JQiwgd2hpY2ggbWFwcyB0byB0aGUgdmFsdWVzICgxLzIpLgorICAgICAqCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBlbnVtIGRlZmluaXRpb25zIGZvciB0YWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMTE1NCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkIAorICoKKyAqICRJZDppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYyAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCIKKworCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NpemUsIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9nZXQsIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2V4dGVybmFsX2FjY2VzcykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhUYWJsZSBpcyBzdWJpZCAzNiBvZiBpcC4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYsIGxlbmd0aDogOAorICovCit0eXBlZGVmIHN0cnVjdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4X3MgeworCisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICp1c2VyX2N0eDsKKworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gdGJsX2luZm87CisKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgYWNjZXNzX211bHRpcGxleGVyOworCit9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHg7CisKK3N0YXRpYyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdAorKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duCisoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYyk7CitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYyk7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9DT05UQUlORVJfR0VUCituZXRzbm1wX2NvbnRhaW5lciAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXI7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9DT05UQUlORVJfR0VUICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKgoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9SRUdJU1RSQVRJT05fU0VUCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKgoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uX3NldAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICpvbGQgPQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHg7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOworICAgIHJldHVybiBvbGQ7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9DT05UQUlORVJfU0laRQoraW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9TSVpFICovCisKKy8qCisgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKKyAqLworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlczsKKy8qKgorICogQGludGVybmFsCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0ciwgdV9sb25nIGZsYWdzKQoreworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyAqYWNjZXNzX211bHRpcGxleGVyID0KKyAgICAgICAgJmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5hY2Nlc3NfbXVsdGlwbGV4ZXI7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGJsX2luZm8gPQorICAgICAgICAmaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LnRibF9pbmZvOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcjsKKyAgICBpbnQgICAgICAgICAgICAgbWZkX21vZGVzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UiLCAiY2FsbGVkXG4iKSk7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzYXZlIGludGVyZmFjZSBjb250ZXh0IGZvciBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICAgICAqLworICAgIC8qCisgICAgICogU2V0dGluZyB1cCB0aGUgdGFibGUncyBkZWZpbml0aW9uCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGJsX2luZm8sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0CisgICAgICAgICgmaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4KTsKKyAgICBpZiAoTlVMTCA9PSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHguY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250YWluZXIgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWNjZXNzX211bHRpcGxleGVyOiBSRVFVSVJFRCB3cmFwcGVyIGZvciBnZXQgcmVxdWVzdCBoYW5kbGluZworICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCA9CisgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2JqZWN0X2xvb2t1cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmdldF92YWx1ZXMgPQorICAgICAgICBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF92YWx1ZXM7CisKKyAgICAvKgorICAgICAqIG5vIHdyYXBwZXJzIHlldAorICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0KKyAgICAgICAgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3Q7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBDcmVhdGUgYSByZWdpc3RyYXRpb24sIHNhdmUgb3VyIHJlZyBkYXRhLCByZWdpc3RlciB0YWJsZS4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aW5pdF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsCisgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGFzIGEgbWlicy1mb3ItZHVtbWllcyB0YWJsZS5cbiIpKTsKKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tdWx0aXBsZXhlcl9nZXQoYWNjZXNzX211bHRpcGxleGVyKTsKKyAgICByZWdpbmZvID0KKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWdpbmZvLT5teV9yZWdfdm9pZCA9ICZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHg7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2V0IHVwIGJhYnkgc3RlcHMgaGFuZGxlciwgY3JlYXRlIGl0IGFuZCBpbmplY3QgaXQKKyAgICAgKi8KKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX09CSkVDVF9MT09LVVA7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QUkVfUkVRVUVTVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXR1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY2xlYW51cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NMRUFOVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXRzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUUzsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnJvd19jcmVhdGlvbikKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9ST1dfQ1JFQVRFOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19DT05TSVNURU5DWTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisgICAKKyAgICBpZiAoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHguY2FjaGUpIHsKKyAgICAgICAgaGFuZGxlciA9CisgICAgICAgICAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jYWNoZSk7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWdpc3RlciB0YWJsZQorICAgICAqLworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGJsX2luZm8pOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogU2h1dGRvd24gdGhlIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UKKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0cikKK3sKKyAgICAvKgorICAgICAqIHNodXRkb3duIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duCisgICAgICAgICgmaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4KTsKK30KKwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KSk7CisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X3RvX29pZCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCkpOworCisKKyAgICBlcnIgPSBidWlsZF9vaWRfbm9hbGxvYyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sICZvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF90b19vaWQgKi8KKworLyoqCisgKiBleHRyYWN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGluZGV4ZXMgZnJvbSBhIG5ldHNubXBfaW5kZXgKKyAqCisgKiBAcmV0dmFsIFNOTVBfRVJSX05PRVJST1IgIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgU05NUF9FUlJfR0VORVJSICAgOiBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCkpOworICAgIHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF9mcm9tX29pZCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcGFyc2UgdGhlIG9pZCBpbnRvIHRoZSBpbmRpdmlkdWFsIGluZGV4IGNvbXBvbmVudHMKKyAgICAgKi8KKyAgICBlcnIgPSBwYXJzZV9vaWRfaW5kZXhlcyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgudmFsLnN0cmluZyk7CisKKworICAgIH0KKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkICovCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBpbnRlcm5hbAorICogYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBhIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAqLworaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2luaXRfY3R4KQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgpOworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gZGF0YSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyYWNrIGlmIHdlIGdvdCBkYXRhIGZyb20gdXNlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19EQVRBX0ZST01fVVNFUjsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBkYXRhOworICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0KKyAgICAgICAgICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YSA9CisgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEoKSkpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisKKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgPSByb3dyZXFfY3R4LT5vaWRfdG1wOworCisgICAgcm93cmVxX2N0eC0+aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9saXN0ID0gTlVMTDsKKworICAgIC8qCisgICAgICogaWYgd2UgYWxsb2NhdGVkIGRhdGEsIGNhbGwgaW5pdCByb3V0aW5lCisgICAgICovCisgICAgaWYgKCEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPQorICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgKKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAocm93cmVxX2N0eCk7CisgICAgLyoKKyAgICAgKiBmb3Igbm9uLXRyYW5zaWVudCBkYXRhLCBkb24ndCBmcmVlIGRhdGEgd2UgZ290IGZyb20gdGhlIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoKHJvd3JlcV9jdHgtPmRhdGEpICYmCisgICAgICAgICEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT5kYXRhKTsKKworCisgICAgLyoKKyAgICAgKiBmcmVlIGluZGV4IG9pZCBwb2ludGVyCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyAhPSByb3dyZXFfY3R4LT5vaWRfdG1wKQorICAgICAgICBmcmVlKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyk7CisKKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgYWRkaXRpb25hbCBwcmVfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3QKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eCwgcGFja2V0X3JjKTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0XG4iLCByYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCitfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9mcm9tX2luZGV4KG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmNfcHRyKQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4IG1pYl9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByY19wdHIpCisgICAgICAgIHJjX3B0ciA9ICZyYzsKKyAgICAqcmNfcHRyID0gTUZEX1NVQ0NFU1M7CisKKyAgICBtZW1zZXQoJm1pYl9pZHgsIDB4MCwgc2l6ZW9mKG1pYl9pZHgpKTsKKworICAgIC8qCisgICAgICogdHJ5IHRvIHBhcnNlIG9pZAorICAgICAqLworICAgICpyY19wdHIgPSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF9mcm9tX29pZChvaWRfaWR4LCAmbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9ICpyY19wdHIpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiZXJyb3IgcGFyc2luZyBpbmRleFxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIG5ldyBjb250ZXh0CisgICAgICovCisgICAgcm93cmVxX2N0eCA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoTlVMTCwgTlVMTCk7CisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICAqcmNfcHRyID0gTUZEX0VSUk9SOworICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKyAgICB9CisKKyAgICBtZW1jcHkoJnJvd3JlcV9jdHgtPnRibF9pZHgsICZtaWJfaWR4LCBzaXplb2YobWliX2lkeCkpOworCisKKyAgICAvKgorICAgICAqIGNvcHkgaW5kZXhlcworICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gb2lkX2lkeC0+bGVuOworICAgIG1lbWNweShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMsIG9pZF9pZHgtPm9pZHMsCisgICAgICAgICAgIG9pZF9pZHgtPmxlbiAqIHNpemVvZihvaWQpKTsKKworICAgIHJldHVybiByb3dyZXFfY3R4OworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9mcm9tX2luZGV4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBnZXQgb3VyIGNvbnRleHQgZnJvbSBtZmQKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4ICppZl9jdHggPQorICAgICAqICAgICAgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4ICopcmVnaW5mby0+bXlfcmVnX3ZvaWQ7CisgICAgICovCisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxyZXFfaW5mbzsKKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisKKyAgICAgICAgdGJscmVxX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRibHJlcV9pbmZvKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicmVxdWVzdCBoYWQgbm8gdGFibGUgaW5mb1xuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdHJ5IGNyZWF0ZSByb3dyZXEKKyAgICAgICAgICovCisgICAgICAgIG9pZF9pZHgub2lkcyA9IHRibHJlcV9pbmZvLT5pbmRleF9vaWQ7CisgICAgICAgIG9pZF9pZHgubGVuID0gdGJscmVxX2luZm8tPmluZGV4X29pZF9sZW47CisKKyAgICAgICAgcm93cmVxX2N0eCA9CisgICAgICAgICAgICBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9mcm9tX2luZGV4KCZvaWRfaWR4LCAmcmMpOworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19DUkVBVEVEOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGFkZCByb3dyZXFfY3R4IHRvIHJlcXVlc3QgZGF0YSBsaXN0cworICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KHJlcXVlc3RzLCAobmV0c25tcF9pbmRleCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgcmMpOworICAgIGVsc2UKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X3ByZXAocm93cmVxX2N0eCk7CisKKyAgICByZXR1cm4gU05NUF9WQUxJREFURV9FUlIocmMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29iamVjdF9sb29rdXAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQGludGVybmFsCisgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4oaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfY29sdW1uIiwgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWwoMikvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWExJTktMT0NBTDoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleDMoMykvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4M19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWwoNCkvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEFETUlOTE9DQUw6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbCg1KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYU0lURUxPQ0FMOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4Nig2KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNjoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXg2X2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4Nyg3KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXg3X2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWwoOCkvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWE9SR0FOSVpBVElPTkxPQ0FMOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXg5KDkpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg5OgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleDlfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhBKDEwKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhBX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4QigxMSkvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEI6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4Ql9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEMoMTIpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhDOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleENfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhEKDEzKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYRDoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhEX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUlOX0NPTCA8PSBjb2x1bW4KKyAgICAgICAgICAgICYmIGNvbHVtbiA8PSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9NQVhfQ09MKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfY29sdW1uIiwgImFzc3VtZSBjb2x1bW4gJWQgaXMgcmVzZXJ2ZWRcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmMgPSBNRkRfU0tJUDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4gKi8KKworaW50CitfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF92YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOworICAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKHZvaWQgKik7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlcyIsICJjYWxsZWRcbiIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgb2xkIHBvaW50ZXIsIHNvIHdlIGNhbiBmcmVlIGl0IGlmIHJlcGxhY2VkCisgICAgICAgICAqLworICAgICAgICBvbGRfc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZzsKKyAgICAgICAgZGF0YUZyZWVIb29rID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+ZGF0YUZyZWVIb29rOworICAgICAgICBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmOworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmID09CisgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtbihyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X2NvbnRhaW5lcl9pdGVtX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpCisgICAgICAgIHJldHVybjsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9pdGVtX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X2NvbnRhaW5lcl9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNvbnRhaW5lciBpbml0CisgICAgICovCisgICAgaWZfY3R4LT5jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZF9zaXplKTsKKworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciBpcFNjb3BlWm9uZUluZGV4VGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CisgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQKKyAgICAgICAgICAgICgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgICAgIGlmIChpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9CisgICAgICAgICAgICAgICAgIHN0cmR1cCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiKTsKKyAgICB9CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKE5VTEwgIT0gaWZfY3R4LT5jYWNoZSkKKyAgICAgICAgaWZfY3R4LT5jYWNoZS0+bWFnaWMgPSAodm9pZCAqKSBpZl9jdHgtPmNvbnRhaW5lcjsKKworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duCisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0VYVEVSTkFMX0FDQ0VTUworaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIENPTlRBSU5FUl9GSU5EKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKworICAgIHJldHVybiByb3dyZXFfY3R4OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCisKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcFNjb3BlWm9uZUluZGV4VGFibGU6X2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgZm9yIGlwU2NvcGVab25lSW5kZXhUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBTY29wZVpvbmVJbmRleFRhYmxlOl9jYWNoZV9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIGluIGlwU2NvcGVab25lSW5kZXhUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzMxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jdHgpOworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpOworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fc2V0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0ZGFhMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaCAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX09JRFNfSAorI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSURTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICAgICAqLworI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSUQgICAgICAgICAgICAgIDEsMyw2LDEsMiwxLDQsMzYKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYSUZJTkRFWCAgICAgICAgIDEKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYTElOS0xPQ0FMICAgICAgICAgMgorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVgzICAgICAgICAgMworCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhBRE1JTkxPQ0FMICAgICAgICAgNAorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhTSVRFTE9DQUwgICAgICAgICA1CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDYgICAgICAgICA2CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDcgICAgICAgICA3CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWE9SR0FOSVpBVElPTkxPQ0FMICAgICAgICAgOAorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg5ICAgICAgICAgOQorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhBICAgICAgICAgMTAKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQiAgICAgICAgIDExCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEMgICAgICAgICAxMgorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhEICAgICAgICAgMTMKKworCisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01JTl9DT0wgICBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYTElOS0xPQ0FMCisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01BWF9DT0wgICBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYRAorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfT0lEU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMgYi9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMKaW5kZXggNmEzYjgxMi4uMzMxZWU2ZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGtzdGF0Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CkBAIC0xMDMsMTIgKzEwNCwyOSBAQAogICAgIHtNSUJfVFJBTlNNSVNTSU9OLCAwLCAodm9pZCAqKSAtMSwgMCwgMCwgMCwgMH0sCiAgICAge01JQl9TTk1QLCAwLCAodm9pZCAqKSAtMSwgMCwgMCwgMCwgMH0sCiAjaWZkZWYgU09MQVJJU19IQVZFX0lQVjZfTUlCX1NVUFBPUlQKKyNpZmRlZiBTT0xBUklTX0hBVkVfUkZDNDI5M19TVVBQT1JUCisgICAge01JQl9JUF9UUkFGRklDX1NUQVRTLCAyMCAqIHNpemVvZihtaWIyX2lwSWZTdGF0c0VudHJ5X3QpLCAodm9pZCAqKS0xLCAwLAorICAgICAzMCwgMCwgMH0sCisgICAge01JQl9JUDYsIDIwICogc2l6ZW9mKG1pYjJfaXBJZlN0YXRzRW50cnlfdCksICh2b2lkICopLTEsIDAsIDMwLCAwLCAwfSwKKyNlbHNlCisgICAge01JQl9JUDYsIDIwICogc2l6ZW9mKG1pYjJfaXB2NklmU3RhdHNFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAorI2VuZGlmCiAgICAge01JQl9JUDZfQUREUiwgMjAgKiBzaXplb2YobWliMl9pcHY2QWRkckVudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCAzMCwgMCwgMH0sCisgICAge01JQl9JUDZfUk9VVEUsIDIwMCAqIHNpemVvZihtaWIyX2lwdjZBZGRyRW50cnlfdCksICh2b2lkICopLTEsIDAsIDMwLCAwLCAwfSwKKyAgICB7TUlCX0lDTVA2LCAyMCAqIHNpemVvZihtaWIyX2lwdjZJZkljbXBFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAogICAgIHtNSUJfVENQNl9DT05OLCAxMDAwICogc2l6ZW9mKG1pYjJfdGNwNkNvbm5FbnRyeV90KSwgKHZvaWQgKikgLTEsIDAsIDMwLAogICAgICAwLCAwfSwKICAgICB7TUlCX1VEUDZfRU5EUE9JTlQsIDEwMDAgKiBzaXplb2YobWliMl91ZHA2RW50cnlfdCksICh2b2lkICopIC0xLCAwLCAzMCwKICAgICAgMCwgMH0sCiAjZW5kaWYKKyNpZmRlZiBNSUIyX1NDVFAKKyAgICB7TUlCX1NDVFAsIHNpemVvZihtaWIyX3NjdHBfdCksICh2b2lkICopLTEsIDAsIDYwLCAwLCAwfSwKKyAgICB7TUlCX1NDVFBfQ09OTiwgc2l6ZW9mKG1pYjJfc2N0cENvbm5FbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgNjAsIDAsIDB9LAorICAgIHtNSUJfU0NUUF9DT05OX0xPQ0FMLCBzaXplb2YobWliMl9zY3RwQ29ubkxvY2FsRW50cnlfdCksICh2b2lkICopLTEsIDAsCisgICAgIDYwLCAwLCAwfSwKKyAgICB7TUlCX1NDVFBfQ09OTl9SRU1PVEUsIHNpemVvZihtaWIyX3NjdHBDb25uUmVtb3RlRW50cnlfdCksICh2b2lkICopLTEsIDAsCisgICAgIDYwLCAwLCAwfSwKKyNlbmRpZgogICAgIHswfSwKIH07CiAKQEAgLTEzMSwxMCArMTQ5LDIyIEBACiAgICAge01JQjJfVFJBTlNNSVNTSU9OLCAwLH0sCiAgICAge01JQjJfU05NUCwgMCx9LAogI2lmZGVmIFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUCisjaWZkZWYgU09MQVJJU19IQVZFX1JGQzQyOTNfU1VQUE9SVAorICAgIHtNSUIyX0lQLCBNSUIyX0lQX1RSQUZGSUNfU1RBVFN9LAorI2VuZGlmCisgICAge01JQjJfSVA2LCAwfSwKICAgICB7TUlCMl9JUDYsIE1JQjJfSVA2X0FERFJ9LAorICAgIHtNSUIyX0lQNiwgTUlCMl9JUDZfUk9VVEV9LAorICAgIHtNSUIyX0lDTVA2LCAwfSwKICAgICB7TUlCMl9UQ1A2LCBNSUIyX1RDUDZfQ09OTn0sCiAgICAge01JQjJfVURQNiwgTUlCMl9VRFA2X0VOVFJZfSwKICNlbmRpZgorI2lmZGVmIE1JQjJfU0NUUAorICAgIHtNSUIyX1NDVFAsIDB9LAorICAgIHtNSUIyX1NDVFAsIE1JQjJfU0NUUF9DT05OfSwKKyAgICB7TUlCMl9TQ1RQLCBNSUIyX1NDVFBfQ09OTl9MT0NBTH0sCisgICAge01JQjJfU0NUUCwgTUlCMl9TQ1RQX0NPTk5fUkVNT1RFfSwKKyNlbmRpZgogICAgIHswfSwKIH07CiAKQEAgLTE0OSw3ICsxNzksNyBAQAogICAgICAgICAgdm9pZCAqcmVzcCwgaW50ICgqY29tcCkodm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcpOwogCiBzdGF0aWMgaW50Ci1nZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqc3RhdGJ1Ziwgc2l6ZV90IHNpemUsCitnZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqKnN0YXRidWYsIHNpemVfdCAqc2l6ZSwKICAgICAgICBzaXplX3QgZW50cnlzaXplLCByZXFfZSByZXFfdHlwZSwgdm9pZCAqcmVzcCwgc2l6ZV90ICpsZW5ndGgsCiAgICAgICAgaW50ICgqY29tcCkodm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcpOwogCkBAIC0yMTQsNyArMjQ0LDcgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBNSUJDQUNIRV9TSVpFOyBpKyspIHsKIAlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJjYWNoZVslZF0gdGltZSAlbGQgdHRsICVkXG4iLCBpLAotCQkgICAgTWliY2FjaGVbaV0uY2FjaGVfdGltZSwgTWliY2FjaGVbaV0uY2FjaGVfdHRsKSk7CisJCSAgICBNaWJjYWNoZVtpXS5jYWNoZV90aW1lLCAoaW50KU1pYmNhY2hlW2ldLmNhY2hlX3R0bCkpOwogCWlmIChNaWJjYWNoZVtpXS5jYWNoZV90aW1lIDwgcGVyaW9kKSB7CiAJICAgIE1pYmNhY2hlW2ldLmNhY2hlX3RpbWUgPSAwOwogCX0gZWxzZSB7CkBAIC0zNDgsNyArMzc4LDggQEAKICAgICBrc3RhdF9jdGxfdCAgICAqa3NjOwogICAgIGtzdGF0X3QgICAgICAgICprcywgKmtzdGF0X2RhdGE7CiAgICAga3N0YXRfbmFtZWRfdCAgKmQ7Ci0gICAgc2l6ZV90ICAgICAgICAgIGksIGluc3RhbmNlOworICAgIHVpbnRfdCAgICAgICAgICBpOworICAgIGludCAgICAgICAgICAgICBpbnN0YW5jZSA9IDA7CiAgICAgY2hhciAgICAgICAgICAgIG1vZHVsZV9uYW1lWzY0XTsKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogICAgIHVfbG9uZ2xvbmdfdCAgICB2YWw7ICAgIC8qIFRoZSBsYXJnZXN0IHZhbHVlICovCkBAIC00NTUsMTEgKzQ4NiwxMSBAQAogCQlicmVhazsKIAkgICAgY2FzZSBLU1RBVF9EQVRBX0lOVDY0OgogCQkqKGludDY0X3QgKil2ID0gZC0+dmFsdWUuaTY0OwotCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJ2YWx1ZTogJWxkXG4iLCBkLT52YWx1ZS5pNjQpKTsKKwkJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAidmFsdWU6ICVsZFxuIiwgKGxvbmcpZC0+dmFsdWUuaTY0KSk7CiAJCWJyZWFrOwogCSAgICBjYXNlIEtTVEFUX0RBVEFfVUlOVDY0OgogCQkqKHVpbnQ2NF90ICopdiA9IGQtPnZhbHVlLnVpNjQ7Ci0JCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgInZhbHVlOiAlbHVcbiIsIGQtPnZhbHVlLnVpNjQpKTsKKwkJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAidmFsdWU6ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpZC0+dmFsdWUudWk2NCkpOwogCQlicmVhazsKICNlbHNlCiAJICAgIGNhc2UgS1NUQVRfREFUQV9MT05HOgpAQCAtNTEyLDcgKzU0Myw3IEBACiAgICAga3N0YXRfY3RsX3QgICAgKmtzYzsKICAgICBrc3RhdF90ICAgICAgICAqa3MsICprc3RhdF9kYXRhOwogICAgIGtzdGF0X25hbWVkX3QgICpkOwotICAgIHNpemVfdCAgICAgICAgICBpLCBpbnN0YW5jZTsKKyAgICBzaXplX3QgICAgICAgICAgaSwgaW5zdGFuY2UgPSAwOwogICAgIGNoYXIgICAgICAgICAgICBtb2R1bGVfbmFtZVs2NF07CiAgICAgaW50ICAgICAgICAgICAgIHJldDsKIApAQCAtNjM3LDcgKzY2OCw3IEBACiAgICAgICovCiAKICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJnZXRNaWJzdGF0ICglZCwgKiwgJWQsICVkLCAqLCAqKVxuIiwKLQkJZ3JpZCwgZW50cnlzaXplLCByZXFfdHlwZSkpOworCQlncmlkLCAoaW50KWVudHJ5c2l6ZSwgcmVxX3R5cGUpKTsKICAgICBjYWNoZXAgPSAmTWliY2FjaGVbZ3JpZF07CiAgICAgbWliZ3IgPSBNaWJtYXBbZ3JpZF0uZ3JvdXA7CiAgICAgbWlidGIgPSBNaWJtYXBbZ3JpZF0udGFibGU7CkBAIC02NTUsNyArNjg2LDcgQEAKICAgICBjYWNoZV92YWxpZCA9IChjYWNoZXAtPmNhY2hlX3RpbWUgPiAwKTsKIAogICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwiLi4uIGNhY2hlX3ZhbGlkICVkIHRpbWUgJWxkIHR0bCAlZCBub3cgJWxkXG4iLAotCQljYWNoZV92YWxpZCwgY2FjaGVwLT5jYWNoZV90aW1lLCBjYWNoZXAtPmNhY2hlX3R0bCwKKwkJY2FjaGVfdmFsaWQsIGNhY2hlcC0+Y2FjaGVfdGltZSwgKGludCljYWNoZXAtPmNhY2hlX3R0bCwKIAkJdGltZShOVUxMKSkpOwogICAgIGlmIChjYWNoZV92YWxpZCkgewogCS8qCkBAIC02OTgsOCArNzI5LDggQEAKIAkJICAgICAgIGNhY2hlcC0+Y2FjaGVfc2l6ZSwgcmVxX3R5cGUsCiAJCSAgICAgICAobWliMl9pZkVudHJ5X3QgKikgJiBlcCwgJmxlbmd0aCwgY29tcCwgYXJnKTsKIAl9IGVsc2UgewotCSAgICByYyA9IGdldG1pYihtaWJnciwgbWlidGIsIGNhY2hlcC0+Y2FjaGVfYWRkciwKLQkJCWNhY2hlcC0+Y2FjaGVfc2l6ZSwgZW50cnlzaXplLCByZXFfdHlwZSwgJmVwLAorCSAgICByYyA9IGdldG1pYihtaWJnciwgbWlidGIsICYoY2FjaGVwLT5jYWNoZV9hZGRyKSwKKwkJCSYoY2FjaGVwLT5jYWNoZV9zaXplKSwgZW50cnlzaXplLCByZXFfdHlwZSwgJmVwLAogCQkJJmxlbmd0aCwgY29tcCwgYXJnKTsKIAl9CiAKQEAgLTc2Miw3ICs3OTMsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAKICAgICAgICAgICAgICJiYWQgY2FjaGUgbGVuZ3RoICVkIC0gbm90IG11bHRpcGxlIG9mIGVudHJ5IHNpemUgJWRcbiIsIAotICAgICAgICAgICAgbGVuLCBlbnRyeXNpemUpKTsKKyAgICAgICAgICAgIChpbnQpbGVuLCAoaW50KWVudHJ5c2l6ZSkpOwogICAgICAgICByZXR1cm4gTk9UX0ZPVU5EOwogICAgIH0KIApAQCAtODQxLDcgKzg3Miw3IEBACiAgKi8KIAogc3RhdGljIGludAotZ2V0bWliKGludCBncm91cG5hbWUsIGludCBzdWJncm91cG5hbWUsIHZvaWQgKnN0YXRidWYsIHNpemVfdCBzaXplLAorZ2V0bWliKGludCBncm91cG5hbWUsIGludCBzdWJncm91cG5hbWUsIHZvaWQgKipzdGF0YnVmLCBzaXplX3QgKnNpemUsCiAgICAgICAgc2l6ZV90IGVudHJ5c2l6ZSwgcmVxX2UgcmVxX3R5cGUsIHZvaWQgKnJlc3AsCiAgICAgICAgc2l6ZV90ICpsZW5ndGgsIGludCAoKmNvbXApKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKQogewpAQCAtODUzLDYgKzg4NCw3IEBACiAgICAgc3RydWN0IFRfZXJyb3JfYWNrICp0ZWEgPSAoc3RydWN0IFRfZXJyb3JfYWNrICopIGJ1ZjsKICAgICBzdHJ1Y3Qgb3B0aGRyICAqcmVxOwogICAgIGZvdW5kX2UgICAgICAgICByZXN1bHQgPSBGT1VORDsKKyAgICBzaXplX3Qgb2xkc2l6ZTsKIAogICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgIi4uLi4uLiBnZXRtaWIgKCVkLCAlZCwgLi4uKVxuIiwKIAkJZ3JvdXBuYW1lLCBzdWJncm91cG5hbWUpKTsKQEAgLTk2NiwyMyArOTk4LDQyIEBACiAJICogcmVkdWNpbmcgdGhlIG51bWJlciBvZiBnZXRtc2cgY2FsbHMKIAkgKi8KIAotCXN0cmJ1Zi5idWYgPSBzdGF0YnVmOwotCXN0cmJ1Zi5tYXhsZW4gPSBzaXplOworCXN0cmJ1Zi5idWYgPSAqc3RhdGJ1ZjsKKwlzdHJidWYubWF4bGVuID0gKnNpemU7CiAJc3RyYnVmLmxlbiA9IDA7CiAJZmxhZ3MgPSAwOwogCWRvIHsKIAkgICAgcmMgPSBnZXRtc2coc2QsIE5VTEwsICZzdHJidWYsICZmbGFncyk7CiAJICAgIHN3aXRjaCAocmMpIHsKIAkgICAgY2FzZSAtMToKLQkJcmMgPSAtRU5PU1I7CisJCXJldCA9IC1FTk9TUjsKKwkJc25tcF9wZXJyb3IoImdldG1zZyIpOwogCQlnb3RvIFJldHVybjsKIAogCSAgICBkZWZhdWx0OgotCQlyYyA9IC1FTk9EQVRBOworCQlzbm1wX2xvZyhMT0dfRVJSLCAia2VybmVsX3N1bm9zNS9nZXRtaWI6IGdldG1zZyByZXR1cm5lZCAlZFxuIiwgcmMpOworCQlyZXQgPSAtRU5PREFUQTsKIAkJZ290byBSZXR1cm47CiAKIAkgICAgY2FzZSBNT1JFREFUQToKKwkJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAiLi4uLi4uIGdldG1pYiBpbmNyZWFzZWQgYnVmZmVyIHNpemVcbiIpKTsKKwkJb2xkc2l6ZSA9ICggc3RyYnVmLmJ1ZiAtIChjaGFyICopKnN0YXRidWYpICsgc3RyYnVmLmxlbjsKKwkJc3RyYnVmLmJ1ZiA9IChjaGFyICopcmVhbGxvYygqc3RhdGJ1Ziwgb2xkc2l6ZSs0MDk2KTsKKwkJaWYoc3RyYnVmLmJ1ZiAhPSBOVUxMKSB7CisJCSAgICAqc3RhdGJ1ZiA9IHN0cmJ1Zi5idWY7CisJCSAgICAqc2l6ZSA9IG9sZHNpemUgKyA0MDk2OworCQkgICAgc3RyYnVmLmJ1ZiA9IChjaGFyICopKnN0YXRidWYgKyBvbGRzaXplOworCQkgICAgc3RyYnVmLm1heGxlbiA9IDQwOTY7CisJCSAgICByZXN1bHQgPSBOT1RfRk9VTkQ7CisJCSAgICBicmVhazsKKwkJfQorCQlzdHJidWYuYnVmID0gKGNoYXIgKikqc3RhdGJ1ZiArIChvbGRzaXplIC0gc3RyYnVmLmxlbik7CiAJICAgIGNhc2UgMDoKKwkJLyogZml4IGJ1ZmZlciB0byByZWFsIHNpemUgJiBwb3NpdGlvbiAqLworCQlzdHJidWYubGVuICs9IHN0cmJ1Zi5idWYgLSAoY2hhciopKnN0YXRidWY7CisJCXN0cmJ1Zi5idWYgPSAqc3RhdGJ1ZjsKKwkJc3RyYnVmLm1heGxlbiA9ICpzaXplOworCiAJCWlmIChyZXFfdHlwZSA9PSBHRVRfTkVYVCAmJiByZXN1bHQgPT0gTkVFRF9ORVhUKQogCQkgICAgLyoKIAkJICAgICAqIEVuZCBvZiBidWZmZXIsIHNvICJuZXh0IiBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbmV4dApAQCAtOTk2LDYgKzEwNDcsOCBAQAogCSAgICB9CiAJfSB3aGlsZSAocmMgPT0gTU9SRURBVEEgJiYgcmVzdWx0ICE9IEZPVU5EKTsKIAorCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgIi4uLi4uLiBnZXRtaWIgYnVmZmVyIHNpemUgaXMgJWRcbiIsIChpbnQpKnNpemUpKTsKKwogCWlmIChyZXN1bHQgPT0gRk9VTkQpIHsgICAgICAvKiBTZWFyY2ggaXMgc3VjY2Vzc2Z1bCAqLwogCSAgICBpZiAocmMgIT0gTU9SRURBVEEpIHsKIAkJcmV0ID0gMDsgICAgLyogRm91bmQgYW5kIG5vIG1vcmUgZGF0YSAqLwpAQCAtMTEzNSw3ICsxMTg4LDcgQEAKICAgICAgICAgcmV0dXJuIChlcnJwLT5kbF9lcnJubyk7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGU6ICV4XG4iLCBkbHAtPmRsX3ByaW1pdGl2ZSkpOworICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNTpkbHBpIiwgImdvdCB0eXBlOiAleFxuIiwgKHVuc2lnbmVkKWRscC0+ZGxfcHJpbWl0aXZlKSk7CiAgICAgICAgIHJldHVybiAoLTEpOwogICAgIH0KIH0KQEAgLTExODEsNyArMTIzNCw3IEBACiAgICAgICAgICAgICByZXR1cm4gKC0xKTsgCiAKICAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczU6ZGxwaSIsICJkbF9tYWNfdHlwZTogJXhcbiIsCi0JICAgICAgICAgICBpbmZvLT5kbF9tYWNfdHlwZSkpOworCSAgICAgICAgICAgKHVuc2lnbmVkKWluZm8tPmRsX21hY190eXBlKSk7CiAJc3dpdGNoIChpbmZvLT5kbF9tYWNfdHlwZSkgewogCWNhc2UgRExfQ1NNQUNEOgogCWNhc2UgRExfRVRIRVI6CkBAIC0xMjQ2LDE1ICsxMjk5LDE1IEBACiAgICAgICAgIGRsX2Vycm9yX2Fja190ICplcnJwID0gKGRsX2Vycm9yX2Fja190ICopYnVmOwogCiAgICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLAotICAgICAgICAgICAgICAgICAgICAiZ290IERMX0VSUk9SX0FDSzogZGxwaSAlZCwgZXJyb3IgJWRcbiIsIGVycnAtPmRsX2Vycm5vLAotICAgICAgICAgICAgICAgICAgICBlcnJwLT5kbF91bml4X2Vycm5vKSk7CisgICAgICAgICAgICAgICAgICAgICJnb3QgRExfRVJST1JfQUNLOiBkbHBpICVsZCwgZXJyb3IgJWxkXG4iLAorCQkgICAgKGxvbmcpZXJycC0+ZGxfZXJybm8sIChsb25nKWVycnAtPmRsX3VuaXhfZXJybm8pKTsKIAogICAgICAgICBpZiAoY3RsYnVmLmxlbiA8IERMX0VSUk9SX0FDS19TSVpFKQogICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgIHJldHVybiAoZXJycC0+ZGxfZXJybm8pOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNTpkbHBpIiwgImdvdCB0eXBlICV4XG4iLCBkbHAtPmRsX3ByaW1pdGl2ZSkpOworICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNTpkbHBpIiwgImdvdCB0eXBlICV4XG4iLCAodW5zaWduZWQpZGxwLT5kbF9wcmltaXRpdmUpKTsKICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgfQogfQpAQCAtMTI5Nyw3ICsxMzUwLDcgQEAKICAgICBpbnQgbSA9IDE7CiAgICAgaW50IGkgPSBzdHJsZW4oZGV2bmFtZSkgLSAxOwogCi0gICAgd2hpbGUgKGkgPj0gMCAmJiBpc2RpZ2l0KGRldm5hbWVbaV0pKSB7CisgICAgd2hpbGUgKGkgPj0gMCAmJiBpc2RpZ2l0KGRldm5hbWVbaV0gJiAweEZGKSkgewogICAgICAgICBwcGEgKz0gbSAqIChkZXZuYW1lW2ldIC0gJzAnKTsgCiAgICAgICAgIG0gKj0gMTA7CiAgICAgICAgIGktLTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCBiL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaAppbmRleCBjZGQyMzc1Li5iZjMzN2FlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oCkBAIC03MSwxMCArNzEsMjIgQEAKICAgICBNSUJfVFJBTlNNSVNTSU9OID0gMTQsCiAgICAgTUlCX1NOTVAgPSAxNSwKICNpZmRlZiBTT0xBUklTX0hBVkVfSVBWNl9NSUJfU1VQUE9SVAotICAgIE1JQl9JUDZfQUREUiA9IDE2LAorI2lmZGVmIFNPTEFSSVNfSEFWRV9SRkM0MjkzX1NVUFBPUlQKKyAgICBNSUJfSVBfVFJBRkZJQ19TVEFUUywKKyNlbmRpZgorICAgIE1JQl9JUDYsCisgICAgTUlCX0lQNl9BRERSLAorICAgIE1JQl9JUDZfUk9VVEUsCisgICAgTUlCX0lDTVA2LAogICAgIE1JQl9UQ1A2X0NPTk4sCiAgICAgTUlCX1VEUDZfRU5EUE9JTlQsCiAjZW5kaWYKKyNpZmRlZiBNSUIyX1NDVFAKKyAgICBNSUJfU0NUUCwKKyAgICBNSUJfU0NUUF9DT05OLAorICAgIE1JQl9TQ1RQX0NPTk5fTE9DQUwsCisgICAgTUlCX1NDVFBfQ09OTl9SRU1PVEUsCisjZW5kaWYKICAgICBNSUJDQUNIRV9TSVpFCQogfSBtaWJncm91cF9lOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkuaAppbmRleCBjNTRkMjMzLi5mMzE1N2ZjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJLmgKQEAgLTcsNyArNyw3IEBACiBjb25maWdfcmVxdWlyZShtaWJJSS9hdCkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2lmVGFibGUpCiBjb25maWdfcmVxdWlyZShtaWJJSS9pcCkKLWNvbmZpZ19yZXF1aXJlKG1pYklJL3NubXBfbWliKQorY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgobWliSUkvc25tcF9taWIsIDUuNSwgbWliSUkvc25tcF9taWJfNV81KSkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3RjcCkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2ljbXApCiBjb25maWdfcmVxdWlyZShtaWJJSS91ZHApCkBAIC0xNSw3ICsxNSw3IEBACiBjb25maWdfcmVxdWlyZShtaWJJSS9zZXRTZXJpYWxObykKIAogLyogbWliSUkvaXB2NiBpcyBhY3RpdmF0ZWQgdmlhIC0tZW5hYmxlLWlwdjYgYW5kIG9ubHkgYnVpbGRzIG9uIExpbnV4KypCU0QgKi8KLSNpZiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpICYmIChkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGZyZWVic2QzKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQob3BlbmJzZCkpCisjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KSAmJiAoZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChuZXRic2QxKSB8fCBkZWZpbmVkKG9wZW5ic2Q0KSkgCiBjb25maWdfcmVxdWlyZShtaWJJSS9pcHY2KQogI2VuZGlmCiAKQEAgLTI1LDggKzI1LDI1IEBACiAKIC8qCiAgKiB0aGVzZSBuZXcgbW9kdWxlIHJlLXJld3JpdGVzIGhhdmUgb25seSBiZWVuIGltcGxlbWVudGVkIGZvcgotICogbGludXguCisgKiBMaW51eCBhbmQgKkJTRC4KICAqLwotI2lmIGRlZmluZWQoIGxpbnV4ICkKKyNpZiBkZWZpbmVkKGxpbnV4KQogY29uZmlnX3JlcXVpcmUoaXAtbWliIGlwLWZvcndhcmQtbWliIHRjcC1taWIgdWRwLW1pYikKKyNlbGlmIGRlZmluZWQoZHJhZ29uZmx5KSB8fCBkZWZpbmVkKGZyZWVic2Q3KSB8fCBcCisgICAgZGVmaW5lZChuZXRic2Q1KSB8fCBkZWZpbmVkKG9wZW5ic2Q0KSB8fCBkZWZpbmVkKCBkYXJ3aW4gKQorY29uZmlnX3JlcXVpcmUoaXAtbWliIGlwLWZvcndhcmQtbWliIHRjcC1taWIgdWRwLW1pYikKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCitjb25maWdfcmVxdWlyZSh0Y3AtbWliIHVkcC1taWIpCisjZWxpZiBkZWZpbmVkKGZyZWVic2Q0KQorY29uZmlnX3JlcXVpcmUodGNwLW1pYiB1ZHAtbWliKQorI2VsaWYgZGVmaW5lZChuZXRic2QxKQorY29uZmlnX3JlcXVpcmUodGNwLW1pYiB1ZHAtbWliKQorI2VuZGlmCisKKy8qCisgKiBGb3IgU29sYXJpcywgZW5hYmxlIGFkZGl0aW9uYWwgdGFibGVzIHdoZW4gaXQgaGFzIGV4dGVuZGVkIE1JQiBzdXBwb3J0LgorICovCisjaWYgZGVmaW5lZCggc29sYXJpczIgKSAmJiBkZWZpbmVkKCBIQVZFX01JQjJfSVBJRlNUQVRTRU5UUllfVCApCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlIGlwLW1pYi9pcEFkZHJlc3NUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9hdC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYwppbmRleCA0NWFiNTE2Li5mNTdiYTJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9hdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2F0LmMKQEAgLTI1LDE3ICsyNSwxMyBAQAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTg5LDkgKzg1LDYgQEAKICNpZmRlZiBzb2xhcmlzMgogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZmRlZiBocHV4MTEKICNpbmNsdWRlIDxzeXMvbWliLmg+CkBAIC0xNDYsOSArMTM5LDEyIEBACiAgKiBpbmZvcm1hdGlvbiBhdCAKICAqLwogc3RydWN0IHZhcmlhYmxlMSBhdF92YXJpYWJsZXNbXSA9IHsKLSAgICB7QVRJRklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7MX19LAotICAgIHtBVFBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2F0RW50cnksIDEsIHsyfX0sCi0gICAge0FUTkVUQUREUkVTUywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7M319CisgICAge0FUSUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezF9fSwKKyAgICB7QVRQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAorICAgIHtBVE5FVEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezN9fQogfTsKIAogLyoKQEAgLTMwNCw3ICszMDAsNyBAQAogCiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIGxvd2VzdCwgb2lkX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gb2lkX2xlbmd0aDsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBJUE1FRElBSUZJTkRFWDogICAgICAgLyogYWxzbyBBVElGSU5ERVggKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YgbG9uZ19yZXR1cm47CkBAIC0zNTcsNyArMzUzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wLT5pcE5ldFRvTWVkaWFJZkluZGV4Lm9fbGVuZ3RoKTsKICNlbmRpZgogICAgIERFQlVHTVNHVEwoKCJtaWJJSS9hdCIsICIuLi4uLi4uLi4gQVRfQ21wICVseDw+JWx4ICVkPD4lZCAoJS41cylcbiIsCi0gICAgICAgICAgICAgICAgbXAtPmlwTmV0VG9NZWRpYU5ldEFkZHJlc3MsICgoaWZfaXBfdCAqKSBhZGRyKS0+aXBBZGRyLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKW1wLT5pcE5ldFRvTWVkaWFOZXRBZGRyZXNzLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSgoaWZfaXBfdCAqKSBhZGRyKS0+aXBBZGRyLAogICAgICAgICAgICAgICAgICgoaWZfaXBfdCAqKSBhZGRyKS0+aWZJZHgsIGluZGV4LAogICAgICAgICAgICAgICAgIG1wLT5pcE5ldFRvTWVkaWFJZkluZGV4Lm9fYnl0ZXMpKTsKICAgICBpZiAobXAtPmlwTmV0VG9NZWRpYU5ldEFkZHJlc3MgIT0gKChpZl9pcF90ICopIGFkZHIpLT5pcEFkZHIpCkBAIC0zOTMsNyArMzkwLDcgQEAKICAgICBzdGF0aWMgbWliMl9pcE5ldFRvTWVkaWFFbnRyeV90IExvd2VudHJ5OwogICAgIGludCAgICAgICAgICAgICBGb3VuZCA9IDA7CiAgICAgcmVxX2UgICAgICAgICAgIHJlcV90eXBlOwotICAgIGludCAgICAgICAgICAgICBvZmZzZXQsIG9sZW5ndGg7CisgICAgaW50ICAgICAgICAgICAgIG9mZnNldCwgb2xlbmd0aCA9IDA7CiAgICAgc3RhdGljIGluX2FkZHJfdCAgICAgIGFkZHJfcmV0OwogCiAgICAgLyoKQEAgLTUxMCw3ICs1MDcsNyBAQAogc3RhdGljIGNoYXIgICAgKmxpbSwgKnJ0bmV4dDsKIHN0YXRpYyBjaGFyICAgICphdCA9IDA7CiAjZWxzZQotI2lmZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAorI2lmZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQKIHN0YXRpYyBzdHJ1Y3QgYXJwaGQgKmF0ID0gMDsKIHN0YXRpYyBzdHJ1Y3QgYXJwdGFiICphdF9wdHIsIGF0X2VudHJ5Owogc3RhdGljIHN0cnVjdCBhcnBjb20gYXRfY29tOwpAQCAtNTI4LDcgKzUyNSw2IEBACiAgKi8KICNkZWZpbmUgQVJQX0NBQ0hFX0lOQ1IgMTAyNAogc3RhdGljIHN0cnVjdCBhcnB0YWIgKmF0ID0gTlVMTDsKLXN0YXRpYyBpbnQgICAgICBhcnB0YWJfY3Vycl9tYXhfc2l6ZSA9IDA7CiAKICNlbmRpZgogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMICovCkBAIC01ODMsNyArNTc5LDcgQEAKICNpZmRlZiBBUlBUQUJfU0laRV9TWU1CT0wKICAgICAgICAgYXV0b19ubGlzdChBUlBUQUJfU0laRV9TWU1CT0wsIChjaGFyICopICZhcnB0YWJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBzaXplb2YgYXJwdGFiX3NpemUpOwotI2lmZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAorI2lmZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQKICAgICAgICAgYXQgPSAoc3RydWN0IGFycGhkICopIG1hbGxvYyhhcnB0YWJfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYXJwaGQpKTsKICNlbHNlCiAgICAgICAgIGF0ID0gKHN0cnVjdCBhcnB0YWIgKikgbWFsbG9jKGFycHRhYl9zaXplICogc2l6ZW9mKHN0cnVjdCBhcnB0YWIpKTsKQEAgLTU5Miw3ICs1ODgsNyBAQAogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICB9Ci0jaWZkZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCisjaWZkZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVAogICAgIGF1dG9fbmxpc3QoQVJQVEFCX1NZTUJPTCwgKGNoYXIgKikgYXQsCiAgICAgICAgICAgICAgICBhcnB0YWJfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYXJwaGQpKTsKICAgICBhdF9wdHIgPSBhdFswXS5hdF9uZXh0OwpAQCAtNjM0LDggKzYzMCwxMCBAQAogCiAgICAgaSA9IDA7CiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIHN0YXRpYyBpbnQgICAgICBhcnB0YWJfY3Vycl9tYXhfc2l6ZTsKICAgICAgICAgdV9sb25nICAgICAgICAgIHRtcF9hOwotICAgICAgICBpbnQgICAgICAgICAgICAgdG1wX2ZsYWdzOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdG1wX2ZsYWdzOworCiAgICAgICAgIGlmIChpID49IGFycHRhYl9jdXJyX21heF9zaXplKSB7CiAgICAgICAgICAgICBzdHJ1Y3QgYXJwdGFiICAqbmV3dGFiID0gKHN0cnVjdCBhcnB0YWIgKikKICAgICAgICAgICAgICAgICByZWFsbG9jKGF0LCAoc2l6ZW9mKHN0cnVjdCBhcnB0YWIpICoKQEAgLTc3OSw3ICs3NzcsNyBAQAogICAgIHJlZ2lzdGVyIHN0cnVjdCBhcnB0YWIgKmF0YWI7CiAKICAgICB3aGlsZSAoYXJwdGFiX2N1cnJlbnQgPCBhcnB0YWJfc2l6ZSkgewotI2lmZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAorI2lmZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIGFycCB0YWJsZSBpcyBhbiBhcnJheSBvZiBsaW5rZWQgbGlzdHMgb2YgYXJwdGFiIGVudHJpZXMuCiAgICAgICAgICAqIFVudXNlZCBzbG90cyBoYXZlIHBvaW50ZXJzIGJhY2sgdG8gdGhlIGFycmF5IGVudHJ5IGl0c2VsZiAKQEAgLTgwOCw5ICs4MDYsOSBAQAogICAgICAgICBhdF9wdHIgPSBhdF9lbnRyeS5hdF9uZXh0OwogICAgICAgICBhdGFiID0gJmF0X2VudHJ5OwogICAgICAgICAqaWZJbmRleCA9IGF0X2NvbS5hY19pZi5pZl9pbmRleDsgICAgICAgLyogbm90IHN0cmljdGx5IEFSUEhEICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVCAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUICovCiAgICAgICAgIGF0YWIgPSAmYXRbYXJwdGFiX2N1cnJlbnQrK107Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUICovCiAgICAgICAgIGlmICghKGF0YWItPmF0X2ZsYWdzICYgQVRGX0NPTSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgKmlmVHlwZSA9IChhdGFiLT5hdF9mbGFncyAmIEFURl9QRVJNKSA/IDQgOiAzOwpAQCAtODU5LDcgKzg1Nyw3IEBACiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvbGFyaXMyICovCiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBITFBBUElfSCkgIC8qIFdJTjMyIGN5Z3dpbiAqLwogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAKIGV4dGVybiBXcml0ZU1ldGhvZCB3cml0ZV9hcnA7CkBAIC04OTMsNiArODkxLDcgQEAKICAgICBEV09SRCAgICAgICAgICAgc3RhdHVzID0gTk9fRVJST1I7CiAgICAgRFdPUkQgICAgICAgICAgIGR3QWN0dWFsU2l6ZSA9IDA7CiAgICAgVUlOVCAgICAgICAgICAgIGk7CisgICAgaW50ICAgICAgICAgICAgIGo7CiAgICAgdV9jaGFyICAgICAgICAgIGRlc3RfYWRkcls0XTsKICAgICB2b2lkICAgICAgICAgICAqcmVzdWx0ID0gTlVMTDsKICAgICBzdGF0aWMgaW5fYWRkcl90CWFkZHJfcmV0OwpAQCAtOTE2LDYgKzkxNSw3IEBACiAgICAgICAgICAgICBzdGF0dXMgPSBHZXRJcE5ldFRhYmxlKHBJcE5ldFRhYmxlLCAmZHdBY3R1YWxTaXplLCBUUlVFKTsKICAgICB9CiAKKyAgICBpID0gLTE7CiAKICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwSXBOZXRUYWJsZS0+ZHdOdW1FbnRyaWVzOyArK2kpIHsKQEAgLTk3MCwxNiArOTcwLDE2IEBACiAgICAgICAgICAgICBhcnBfcm93LT5kd0luZGV4ID0gbmFtZVsxMF07CiAKICAgICAgICAgICAgIGlmICgqbGVuZ3RoID09IDE1KSB7ICAgICAgICAvKiBpcE5ldFRvTWVkaWFUYWJsZSAqLwotICAgICAgICAgICAgICAgIGkgPSAxMTsKKyAgICAgICAgICAgICAgICBqID0gMTE7CiAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIGF0IFRhYmxlICovCiAKLSAgICAgICAgICAgICAgICBpID0gMTI7CisgICAgICAgICAgICAgICAgaiA9IDEyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBkZXN0X2FkZHJbMF0gPSAodV9jaGFyKSBuYW1lW2ldOwotICAgICAgICAgICAgZGVzdF9hZGRyWzFdID0gKHVfY2hhcikgbmFtZVtpICsgMV07Ci0gICAgICAgICAgICBkZXN0X2FkZHJbMl0gPSAodV9jaGFyKSBuYW1lW2kgKyAyXTsKLSAgICAgICAgICAgIGRlc3RfYWRkclszXSA9ICh1X2NoYXIpIG5hbWVbaSArIDNdOworICAgICAgICAgICAgZGVzdF9hZGRyWzBdID0gKHVfY2hhcikgbmFtZVtqXTsKKyAgICAgICAgICAgIGRlc3RfYWRkclsxXSA9ICh1X2NoYXIpIG5hbWVbaiArIDFdOworICAgICAgICAgICAgZGVzdF9hZGRyWzJdID0gKHVfY2hhcikgbmFtZVtqICsgMl07CisgICAgICAgICAgICBkZXN0X2FkZHJbM10gPSAodV9jaGFyKSBuYW1lW2ogKyAzXTsKICAgICAgICAgICAgIGFycF9yb3ctPmR3QWRkciA9ICooKERXT1JEICopIGRlc3RfYWRkcik7CiAKICAgICAgICAgICAgIGFycF9yb3ctPmR3VHlwZSA9IDQ7ICAgICAgICAvKiBTdGF0aWMgKi8KQEAgLTk5Miw2ICs5OTIsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBsb3dlc3QsIG9pZF9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IG9pZF9sZW5ndGg7CiAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2FycDsKKyAgICBuZXRzbm1wX2Fzc2VydCgwIDw9IGkgJiYgaSA8IHBJcE5ldFRhYmxlLT5kd051bUVudHJpZXMpOwogICAgICphcnBfcm93ID0gcElwTmV0VGFibGUtPnRhYmxlW2ldOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYwppbmRleCBjODBmMGVlLi5iZTgwM2VlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqICBJQ01QIE1JQiBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGljbXAuYwotICoKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CkBAIC05LDYgKzgsMTMgQEAKICNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CiAjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNpZiBIQVZFX05FVElORVRfSUNNUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKyNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKwogI2lmIEhBVkVfTkVUSU5FVF9JQ01QX1ZBUl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPgogI2VuZGlmCkBAIC0xOSwxMCArMjUsMTAgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIgogI2luY2x1ZGUgImljbXAuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZm5kZWYgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNkZWZpbmUgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQJNQpAQCAtMzEsNyArMzcsMTggQEAKICNkZWZpbmUgSUNNUF9TVEFUU19DQUNIRV9USU1FT1VUCU1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorLyogcmVkZWZpbmUgSUNNUDYgbWVzc2FnZSB0eXBlcyBmcm9tIGdsaWJjIDwgMi40IHRvIG5ld2VyIG5hbWVzICovCisjaWZuZGVmIE1MRF9MSVNURU5FUl9RVUVSWQorI2RlZmluZSBNTERfTElTVEVORVJfUVVFUlkgSUNNUDZfTUVNQkVSU0hJUF9RVUVSWQorI2RlZmluZSBNTERfTElTVEVORVJfUkVQT1JUIElDTVA2X01FTUJFUlNISVBfUkVQT1JUCisjZGVmaW5lIE1MRF9MSVNURU5FUl9SRURVQ1RJT04gSUNNUDZfTUVNQkVSU0hJUF9SRURVQ1RJT04KKyNlbmRpZiAvKiBJQ01QNl9NRU1CRVJTSElQX1FVRVJZICovCisKKworI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaWZkZWYgRklSU1RfUFJPVE9DT0wKIHBlcmZzdGF0X3Byb3RvY29sX3QgcHNfcHJvdG87CkBAIC01NCw0MCArNzEsNjY1IEBACiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAogCisjaWZkZWYgaHB1eDExCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJaW50CisjZW5kaWYKKworI2lmZGVmIGxpbnV4CisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGljbXBfbWliCisjZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorI3VuZGVmIElDTVBTVEFUX1NZTUJPTAorI2VuZGlmCisKKyNpZmRlZiBzb2xhcmlzMgorI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQltaWIyX2ljbXBfdAorI2luY2x1ZGUgImtlcm5lbF9taWIuaCIKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wX3N0YXQoSUNNUF9TVEFUX1NUUlVDVFVSRSAqKTsKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wX21zZ19zdGF0KElDTVBfU1RBVF9TVFJVQ1RVUkUgKiwgc3RydWN0IGljbXA0X21zZ19taWIgKiwgaW50ICopOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKik7CitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqLCBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqLCBpbnQgKik7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRSAgICAgc3RydWN0IGljbXBfbWliCisjZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorI3VuZGVmIElDTVBfTlNUQVRTCisjZW5kaWYKKworI2lmZGVmIEhBVkVfSVBITFBBUElfSAorI2luY2x1ZGUgPGlwaGxwYXBpLmg+CisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUgTUlCX0lDTVAKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaWNtcF9taWIKKyNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisjdW5kZWYgSUNNUFNUQVRfU1lNQk9MCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX0lDTVBJUFNUQVRTX0gKKy8qIG9yICNpZmRlZgkJSEFWRV9TWVNfVENQSVBTVEFUU19IICA/Pz8gKi8KKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3Qga25hCisjZGVmaW5lIFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSUNNUF9TVEFUX1NUUlVDVFVSRSkKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaWNtcHN0YXQKKyNkZWZpbmUgVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVAorI2VuZGlmCisKK0lDTVBfU1RBVF9TVFJVQ1RVUkUgaWNtcHN0YXQ7CisjaWYgZGVmaW5lZChzb2xhcmlzMikgJiYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorc3RhdGljIHN0cnVjdCBpY21wNl9taWIgaWNtcDZzdGF0OworI2VuZGlmCisKKy8qIElmIHRoZXkganVzdCBhbGwgYWdyZWVkIC4uLiAqLworCisjaWZuZGVmIElDTVBfREVTVF9VTlJFQUNICisjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIElDTVBfVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIElDTVBfU09VUkNFX1FVRU5DSAorI2RlZmluZSBJQ01QX1NPVVJDRV9RVUVOQ0ggSUNNUF9TT1VSQ0VRVUVOQ0gKKyNlbmRpZgorI2lmbmRlZiBJQ01QX1RJTUVfRVhDRUVERUQKKyNkZWZpbmUgSUNNUF9USU1FX0VYQ0VFREVEIElDTVBfVElNWENFRUQKKyNlbmRpZgorI2lmbmRlZiBJQ01QX1BBUkFNRVRFUlBST0IKKyNkZWZpbmUgSUNNUF9QQVJBTUVURVJQUk9CIElDTVBfUEFSQU1QUk9CCisjZW5kaWYKKyNpZm5kZWYgSUNNUF9USU1FU1RBTVAKKyNkZWZpbmUgSUNNUF9USU1FU1RBTVAgSUNNUF9UU1RBTVAKKyNlbmRpZgorI2lmbmRlZiBJQ01QX1RJTUVTVEFNUFJFUExZCisjZGVmaW5lIElDTVBfVElNRVNUQU1QUkVQTFkgSUNNUF9UU1RBTVBSRVBMWQorI2VuZGlmCisjaWZuZGVmIElDTVBfQUREUkVTUworI2RlZmluZSBJQ01QX0FERFJFU1MgSUNNUF9NQVNLUkVRCisjZW5kaWYKKyNpZm5kZWYgSUNNUF9BRERSRVNTUkVQTFkKKyNkZWZpbmUgSUNNUF9BRERSRVNTUkVQTFkgSUNNUF9NQVNLUkVQTFkKKyNlbmRpZgorI2lmbmRlZiBNTERfTElTVEVORVJfUkVEVUNUSU9OCisjZGVmaW5lIE1MRF9MSVNURU5FUl9SRURVQ1RJT04gTUxEX0xJU1RFTkVSX0RPTkUKKyNlbmRpZgogCiAvKgogICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCiAgKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAogICovCi1vaWQgICAgICAgICAgICAgaWNtcF9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNSB9Oworc3RhdGljIGNvbnN0IG9pZCBpY21wX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA1IH07CitzdGF0aWMgY29uc3Qgb2lkIGljbXBfc3RhdHNfdGJsX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA1LCAyOSB9Oworc3RhdGljIGNvbnN0IG9pZCBpY21wX21zZ19zdGF0c190Ymxfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDUsIDMwIH07CiAjaWZkZWYgVVNJTkdfTUlCSUlfSVBfTU9EVUxFCiBleHRlcm4gb2lkICAgICAgaXBfbW9kdWxlX29pZFtdOwogZXh0ZXJuIGludCAgICAgIGlwX21vZHVsZV9vaWRfbGVuOwogZXh0ZXJuIGludCAgICAgIGlwX21vZHVsZV9jb3VudDsKICNlbmRpZgogCisjaWZkZWYgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCitzdHJ1Y3QgaWNtcF9zdGF0c190YWJsZV9lbnRyeSB7CisJdWludDMyX3QgaXBWZXI7CisgICAgICAgIHVpbnQzMl90IGljbXBTdGF0c0luTXNnczsKKyAgICAgICAgdWludDMyX3QgaWNtcFN0YXRzSW5FcnJvcnM7CisgICAgICAgIHVpbnQzMl90IGljbXBTdGF0c091dE1zZ3M7CisgICAgICAgIHVpbnQzMl90IGljbXBTdGF0c091dEVycm9yczsKK307CisKK3N0cnVjdCBpY21wX3N0YXRzX3RhYmxlX2VudHJ5IGljbXBfc3RhdHNfdGFibGVbMl07CisgCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0hBU19JTiAxCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0hBU19PVVQgMgorCitzdHJ1Y3QgaWNtcF9tc2dfc3RhdHNfdGFibGVfZW50cnkgeworICAgICAgICB1aW50MzJfdCBpcFZlcjsKKyAgICAgICAgdWludDMyX3QgaWNtcE1zZ1N0YXRzVHlwZTsKKyAgICAgICAgdWludDMyX3QgaWNtcE1zZ1N0YXRzSW5Qa3RzOworICAgICAgICB1aW50MzJfdCBpY21wTXNnU3RhdHNPdXRQa3RzOworICAgICAgICBpbnQgZmxhZ3M7Cit9OworCisjaWZkZWYgbGludXgKKy8qIExpbnV4IGtlZXBzIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBtZXNzYWdlIHR5cGVzICovCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0lQVjRfQ09VTlQgMjU2CisjZWxzZQorI2RlZmluZSBJQ01QX01TR19TVEFUU19JUFY0X0NPVU5UIDExCisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNpZmRlZiBsaW51eAorLyogTGludXgga2VlcHMgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIG1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSVBWNl9DT1VOVCAyNTYKKyNlbHNlCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0lQVjZfQ09VTlQgMTQKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSVBWNl9DT1VOVCAwCisjZW5kaWYgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworCitzdHJ1Y3QgaWNtcF9tc2dfc3RhdHNfdGFibGVfZW50cnkgaWNtcF9tc2dfc3RhdHNfdGFibGVbSUNNUF9NU0dfU1RBVFNfSVBWNF9DT1VOVCArIElDTVBfTVNHX1NUQVRTX0lQVjZfQ09VTlRdOworCitpbnQKK2ljbXBfc3RhdHNfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworCisgICAgLyoKKyAgICAgKiBub3RlIGRvbid0IGJvdGhlciB1c2luZyB0aGUgcGFzc2VkIGluIGNhY2hlCisgICAgICogYW5kIHZtYWdpYyBwb2ludGVycy4gIFRoZXkgYXJlIHVzZWxlc3MgYXMgdGhleSAKKyAgICAgKiBjdXJyZW50bHkgcG9pbnQgdG8gdGhlIGljbXAgc3lzdGVtIHN0YXRzIGNhY2hlCQorICAgICAqIHNpbmNlIEkgc2VlIGxpdHRsZSBwb2ludCBpbiByZWdpc3RlcmluZyBhbm90aGVyCisgICAgICogY2FjaGUgZm9yIHRoaXMgdGFibGUuICBJdHMgbm90IHJlYWxseSBuZWVkZWQKKyAgICAgKi8KKworICAgIGludCBpOworICAgIElDTVBfU1RBVF9TVFJVQ1RVUkUgdjRpY21wOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBzdHJ1Y3QgaWNtcDZfbWliIHY2aWNtcDsKKyNlbmRpZgorICAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBzd2l0Y2goaSkgeworICAgICAgICBjYXNlIDA6CisjaWZkZWYgbGludXgKKyAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcF9zdGF0KCZ2NGljbXApOworI2VsaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKKwkgICAgbmV0YnNkX3JlYWRfaWNtcF9zdGF0KCZ2NGljbXApOworI2VsaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkKKwkgICAgc3lzY3RsX3JlYWRfaWNtcF9zdGF0KCZ2NGljbXApOworI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKwkgICAgc29sYXJpc19yZWFkX2ljbXBfc3RhdCgmdjRpY21wKTsKKyNlbHNlCisJICAgIHJldHVybiAtMTsKKyNlbmRpZgorICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNJbk1zZ3MgPSB2NGljbXAuaWNtcEluTXNnczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzSW5FcnJvcnMgPSB2NGljbXAuaWNtcEluRXJyb3JzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNPdXRNc2dzID0gdjRpY21wLmljbXBPdXRNc2dzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNPdXRFcnJvcnMgPSB2NGljbXAuaWNtcE91dEVycm9yczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgbWVtc2V0KCZpY21wX3N0YXRzX3RhYmxlW2ldLDAsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcF9zdGF0c190YWJsZV9lbnRyeSkpOworI2lmZGVmIGxpbnV4CisgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXA2X3N0YXQoJnY2aWNtcCk7CisjZWxpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQorCSAgICBuZXRic2RfcmVhZF9pY21wNl9zdGF0KCZ2NmljbXApOworI2VsaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkKKwkgICAgc3lzY3RsX3JlYWRfaWNtcDZfc3RhdCgmdjZpY21wKTsKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCisJICAgIHNvbGFyaXNfcmVhZF9pY21wNl9zdGF0KCZ2NmljbXApOworI2Vsc2UKKwkgICAgcmV0dXJuIC0xOworI2VuZGlmCisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c0luTXNncyA9IHY2aWNtcC5pY21wNkluTXNnczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzSW5FcnJvcnMgPSB2NmljbXAuaWNtcDZJbkVycm9yczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzT3V0TXNncyA9IHY2aWNtcC5pY21wNk91dE1zZ3M7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c091dEVycm9ycyA9CisgICAgICAgICAgICAgICAgICAgICAgICB2NmljbXAuaWNtcDZPdXREZXN0VW5yZWFjaHMgKworICAgICAgICAgICAgICAgICAgICAgICAgdjZpY21wLmljbXA2T3V0UGt0VG9vQmlncyArICB2NmljbXAuaWNtcDZPdXRUaW1lRXhjZHMgKworICAgICAgICAgICAgICAgICAgICAgICAgdjZpY21wLmljbXA2T3V0UGFybVByb2JsZW1zOworI2VuZGlmCS8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CitpY21wX21zZ19zdGF0c19sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgSUNNUF9TVEFUX1NUUlVDVFVSRSB2NGljbXA7CisgICAgc3RydWN0IGljbXA0X21zZ19taWIgdjRpY21wbXNnOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBzdHJ1Y3QgaWNtcDZfbWliIHY2aWNtcDsKKyAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiB2NmljbXBtc2c7CisjZW5kaWYKKyAgICBpbnQgaSwgaywgZmxhZywgaW5jOworCisgICAgbWVtc2V0KCZpY21wX21zZ19zdGF0c190YWJsZSwgMCwgc2l6ZW9mKGljbXBfbXNnX3N0YXRzX3RhYmxlKSk7CisKKyAgICBpID0gMDsKKyAgICBmbGFnID0gMDsKKyAgICBrID0gMDsKKyAgICBpbmMgPSAwOworI2lmZGVmIGxpbnV4CisgICAgbGludXhfcmVhZF9pY21wX21zZ19zdGF0KCZ2NGljbXAsICZ2NGljbXBtc2csICZmbGFnKTsKKyNlbGlmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCisgICAgbmV0YnNkX3JlYWRfaWNtcF9tc2dfc3RhdCgmdjRpY21wLCAmdjRpY21wbXNnLCAmZmxhZyk7CisjZWxpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKQorICAgIHN5c2N0bF9yZWFkX2ljbXBfbXNnX3N0YXQoJnY0aWNtcCwgJnY0aWNtcG1zZywgJmZsYWcpOworI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKyAgICBzb2xhcmlzX3JlYWRfaWNtcF9tc2dfc3RhdCgmdjRpY21wLCAmdjRpY21wbXNnLCAmZmxhZyk7CisjZWxzZQorICAgIHJldHVybiAtMTsKKyNlbmRpZgorICAgIGlmIChmbGFnKSB7CisgICAgICAgIHdoaWxlICgyNTUgPj0gaykgeworICAgICAgICAgICAgaWYgKHY0aWNtcG1zZy52YWxzW2tdLkluVHlwZSkgeworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gazsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXBtc2cudmFsc1trXS5JblR5cGU7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyB8IElDTVBfTVNHX1NUQVRTX0hBU19JTjsKKyAgICAgICAgICAgICAgICBpbmMgPSAxOyAvKiBTZXQgdGhpcyBpZiB3ZSBmb3VuZCBhIHZhbGlkIGVudHJ5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodjRpY21wbXNnLnZhbHNba10uT3V0VHlwZSkgeworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gazsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wbXNnLnZhbHNba10uT3V0VHlwZTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgICAgICAgICBpbmMgPSAxOyAvKiBTZXQgdGhpcyBpZiB3ZSBmb3VuZCBhIHZhbGlkIGVudHJ5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5jKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGluYyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9FQ0hPUkVQTFk7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5FY2hvUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0RWNob1JlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfREVTVF9VTlJFQUNIOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluRGVzdFVucmVhY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXREZXN0VW5yZWFjaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfU09VUkNFX1FVRU5DSDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblNyY1F1ZW5jaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFNyY1F1ZW5jaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfUkVESVJFQ1Q7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5SZWRpcmVjdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFJlZGlyZWN0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9FQ0hPOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluRWNob3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dEVjaG9zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1RJTUVfRVhDRUVERUQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5UaW1lRXhjZHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFRpbWVFeGNkczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9QQVJBTUVURVJQUk9COworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluUGFybVByb2JzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRQYXJtUHJvYnM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfVElNRVNUQU1QOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluVGltZXN0YW1wczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0VGltZXN0YW1wczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9USU1FU1RBTVBSRVBMWTsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblRpbWVzdGFtcFJlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFRpbWVzdGFtcFJlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfQUREUkVTUzsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJbkFkZHJNYXNrczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0QWRkck1hc2tzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX0FERFJFU1NSRVBMWTsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJbkFkZHJNYXNrUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0QWRkck1hc2tSZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworICAgIH0KKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBmbGFnID0gMDsKKyAgICBrID0gMDsKKyAgICBpbmMgPSAwOworI2lmZGVmIGxpbnV4CisgICAgbGludXhfcmVhZF9pY21wNl9tc2dfc3RhdCgmdjZpY21wLCAmdjZpY21wbXNnLCAmZmxhZyk7CisjZWxpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQorICAgIG5ldGJzZF9yZWFkX2ljbXA2X21zZ19zdGF0KCZ2NmljbXAsICZ2NmljbXBtc2csICZmbGFnKTsKKyNlbGlmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpCisgICAgc3lzY3RsX3JlYWRfaWNtcDZfbXNnX3N0YXQoJnY2aWNtcCwgJnY2aWNtcG1zZywgJmZsYWcpOworI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKyAgICBzb2xhcmlzX3JlYWRfaWNtcDZfbXNnX3N0YXQoJnY2aWNtcCwgJnY2aWNtcG1zZywgJmZsYWcpOworI2Vsc2UKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKKyAgICBpZiAoZmxhZykgeworICAgICAgICB3aGlsZSAoMjU1ID49IGspIHsKKyAgICAgICAgICAgIGlmICh2NmljbXBtc2cudmFsc1trXS5JblR5cGUpIHsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IGs7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wbXNnLnZhbHNba10uSW5UeXBlOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgfCBJQ01QX01TR19TVEFUU19IQVNfSU47CisgICAgICAgICAgICAgICAgaW5jID0gMTsgLyogU2V0IHRoaXMgaWYgd2UgZm91bmQgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHY2aWNtcG1zZy52YWxzW2tdLk91dFR5cGUpIHsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IGs7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcG1zZy52YWxzW2tdLk91dFR5cGU7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgICAgICAgICAgaW5jID0gMTsgLyogU2V0IHRoaXMgaWYgd2UgZm91bmQgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluYykgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBpbmMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaysrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X0RTVF9VTlJFQUNIOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkRlc3RVbnJlYWNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dERlc3RVbnJlYWNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfUEFDS0VUX1RPT19CSUc7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluUGt0VG9vQmlnczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dFBrdFRvb0JpZ3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X1RJTUVfRVhDRUVERUQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluVGltZUV4Y2RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0VGltZUV4Y2RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9QQVJBTV9QUk9COworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblBhcm1Qcm9ibGVtczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dFBhcm1Qcm9ibGVtczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfRUNIT19SRVFVRVNUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkVjaG9zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0RWNob3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X0VDSE9fUkVQTFk7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluRWNob1JlcGxpZXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRFY2hvUmVwbGllczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworI2lmZGVmIE1MRF9MSVNURU5FUl9RVUVSWQorICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTUxEX0xJU1RFTkVSX1FVRVJZOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSAwOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE1MRF9MSVNURU5FUl9SRVBPUlQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBNTERfTElTVEVORVJfUkVEVUNUSU9OOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkdyb3VwTWVtYlJlZHVjdGlvbnM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBORF9ST1VURVJfU09MSUNJVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Sb3V0ZXJTb2xpY2l0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dFJvdXRlclNvbGljaXRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBORF9ST1VURVJfQURWRVJUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblJvdXRlckFkdmVydGlzZW1lbnRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gMDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTjsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBORF9ORUlHSEJPUl9TT0xJQ0lUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbk5laWdoYm9yU29saWNpdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXROZWlnaGJvclNvbGljaXRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBORF9ORUlHSEJPUl9BRFZFUlQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE5EX1JFRElSRUNUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblJlZGlyZWN0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dFJlZGlyZWN0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworICAgIHJldHVybiAwOworfQorCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgoraWNtcF9zdGF0c19uZXh0X2VudHJ5KCB2b2lkICoqbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRhdGFfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRhdGEpCit7CisgICAgaW50IGkgPSAoaW50KShpbnRwdHJfdCkoKmxvb3BfY29udGV4dCk7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppZHggPSBpbmRleDsKKworICAgIGlmKGkgPiAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKworCisgICAgLyoKKyAgICAgKnNldCBJUCB2ZXJzaW9uCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKGlkeCwgQVNOX0lOVEVHRVIsICh1X2NoYXIgKikmaWNtcF9zdGF0c190YWJsZVtpXS5pcFZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpKTsKKyAgICBpZHggPSBpZHgtPm5leHRfdmFyaWFibGU7CisKKyAgICAqZGF0YV9jb250ZXh0ID0gJmljbXBfc3RhdHNfdGFibGVbaV07CisKKyAgICAqbG9vcF9jb250ZXh0ID0gKHZvaWQgKikoaW50cHRyX3QpKCsraSk7CisgICAgCisgICAgcmV0dXJuIGluZGV4OworfQorCisKK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitpY21wX3N0YXRzX2ZpcnN0X2VudHJ5KCB2b2lkICoqbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRhdGFfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRhdGEpCit7CisgICAgKmxvb3BfY29udGV4dCA9IE5VTEw7CisgICAgKmRhdGFfY29udGV4dCA9IE5VTEw7CisgICAgcmV0dXJuIGljbXBfc3RhdHNfbmV4dF9lbnRyeShsb29wX2NvbnRleHQsIGRhdGFfY29udGV4dCwgaW5kZXgsIGRhdGEpOworfQorCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgoraWNtcF9tc2dfc3RhdHNfbmV4dF9lbnRyeSh2b2lkICoqbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRhdGEpCit7CisgICAgaW50IGkgPSAoaW50KShpbnRwdHJfdCkoKmxvb3BfY29udGV4dCk7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppZHggPSBpbmRleDsKKworICAgIGlmKGkgPj0gSUNNUF9NU0dfU1RBVFNfSVBWNF9DT1VOVCArIElDTVBfTVNHX1NUQVRTX0lQVjZfQ09VTlQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogc2V0IElQIHZlcnNpb24gKi8KKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoaWR4LCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICh1X2NoYXIgKikmaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIsCisgICAgICAgICAgICBzaXplb2YodWludDMyX3QpKTsKKworICAgIC8qIHNldCBwYWNrZXQgdHlwZSAqLworICAgIGlkeCA9IGlkeC0+bmV4dF92YXJpYWJsZTsKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoaWR4LCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICh1X2NoYXIgKikmaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSwKKyAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCkpOworCisgICAgKmRhdGFfY29udGV4dCA9ICZpY21wX21zZ19zdGF0c190YWJsZVtpXTsKKyAgICAqbG9vcF9jb250ZXh0ID0gKHZvaWQgKikoaW50cHRyX3QpKCsraSk7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKKworbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK2ljbXBfbXNnX3N0YXRzX2ZpcnN0X2VudHJ5KHZvaWQgKipsb29wX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqZGF0YSkKK3sKKyAgICAqbG9vcF9jb250ZXh0ID0gTlVMTDsKKyAgICAqZGF0YV9jb250ZXh0ID0gTlVMTDsKKyAgICByZXR1cm4gaWNtcF9tc2dfc3RhdHNfbmV4dF9lbnRyeShsb29wX2NvbnRleHQsIGRhdGFfY29udGV4dCwgaW5kZXgsIGRhdGEpOworfQorI2VuZGlmCisKIHZvaWQKIGluaXRfaWNtcCh2b2lkKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisjaWZkZWYgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXNnX3N0YXRzX3JlZ2luZm8gPSBOVUxMOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnRhYmxlX3JlZ2luZm8gPSBOVUxMOworICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm87CisgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICptc2dfc3RhdHNfaWluZm87CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICptc2dfc3RhdHNfdGFibGVfaW5mbzsKKyNlbmRpZgorICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnNjYWxhcl9yZWdpbmZvID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwogCiAgICAgLyoKICAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgYXMgYSBncm91cCBvZiBzY2FsYXJzLi4uCiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiSW5pdGlhbGlzaW5nIElDTVAgZ3JvdXBcbiIpKTsKLSAgICByZWdpbmZvID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImljbXAiLCBpY21wX2hhbmRsZXIsCisgICAgc2NhbGFyX3JlZ2luZm8gPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaWNtcCIsIGljbXBfaGFuZGxlciwKIAkJICAgIGljbXBfb2lkLCBPSURfTEVOR1RIKGljbXBfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm8sIElDTVBJTk1TR1MsIElDTVBPVVRBRERSTUFTS1JFUFMpOworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAoc2NhbGFyX3JlZ2luZm8sIElDTVBJTk1TR1MsIElDTVBPVVRBRERSTUFTS1JFUFMpOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKICAgICAvKgogICAgICAqIC4uLi4gd2l0aCBhIGxvY2FsIGNhY2hlCiAgICAgICogICAgKGV4Y2VwdCBmb3IgSFAtVVggMTEsIHdoaWNoIGV4dHJhY3RzIG9iamVjdHMgaW5kaXZpZHVhbGx5KQogICAgICAqLwogI2lmbmRlZiBocHV4MTEKLSAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKCByZWdpbmZvLAorICAgIHJjID0gbmV0c25tcF9pbmplY3RfaGFuZGxlciggc2NhbGFyX3JlZ2luZm8sCiAJCSAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyKElDTVBfU1RBVFNfQ0FDSEVfVElNRU9VVCwKIAkJCSAgIAkJaWNtcF9sb2FkLCBpY21wX2ZyZWUsCiAJCQkJCWljbXBfb2lkLCBPSURfTEVOR1RIKGljbXBfb2lkKSkpOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisJZ290byBiYWlsOwogI2VuZGlmCisjaWZkZWYgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisKKyAgICAvKiByZWdpc3RlciBpY21wU3RhdHNUYWJsZSAqLworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmICghdGFibGVfaW5mbykKKyAgICAgICAgZ290byBiYWlsOworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gSUNNUF9TVEFUX0lOTVNHOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBJQ01QX1NUQVRfT1VURVJSOworCisKKyAgICBpaW5mbyAgICAgID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2l0ZXJhdG9yX2luZm8pOworICAgIGlmICghaWluZm8pCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBpaW5mby0+Z2V0X2ZpcnN0X2RhdGFfcG9pbnQgPSBpY21wX3N0YXRzX2ZpcnN0X2VudHJ5OworICAgIGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50ICA9IGljbXBfc3RhdHNfbmV4dF9lbnRyeTsKKyAgICBpaW5mby0+dGFibGVfcmVnaW5mbyAgICAgICAgPSB0YWJsZV9pbmZvOworCisgICAgdGFibGVfcmVnaW5mbyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJpY21wU3RhdHNUYWJsZSIsCisJCWljbXBfc3RhdHNfdGFibGVfaGFuZGxlciwgaWNtcF9zdGF0c190Ymxfb2lkLAorCQlPSURfTEVOR1RIKGljbXBfc3RhdHNfdGJsX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIodGFibGVfcmVnaW5mbywgaWluZm8pOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgdGFibGVfcmVnaW5mbyA9IE5VTEw7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlciggdGFibGVfcmVnaW5mbywKKyAgICAgICAgICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoSUNNUF9TVEFUU19DQUNIRV9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgaWNtcF9sb2FkLCBpY21wX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICBpY21wX3N0YXRzX3RibF9vaWQsIE9JRF9MRU5HVEgoaWNtcF9zdGF0c190Ymxfb2lkKSkpOworCisgICAgLyogcmVnaXN0ZXIgaWNtcE1zZ1N0YXRzVGFibGUgKi8KKyAgICBtc2dfc3RhdHNfdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKCFtc2dfc3RhdHNfdGFibGVfaW5mbykKKyAgICAgICAgZ290byBiYWlsOworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKG1zZ19zdGF0c190YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgQVNOX0lOVEVHRVIsIDApOworICAgIG1zZ19zdGF0c190YWJsZV9pbmZvLT5taW5fY29sdW1uID0gSUNNUF9NU0dfU1RBVF9JTl9QS1RTOworICAgIG1zZ19zdGF0c190YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gSUNNUF9NU0dfU1RBVF9PVVRfUEtUUzsKKworICAgIG1zZ19zdGF0c19paW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9pdGVyYXRvcl9pbmZvKTsKKyAgICBpZiAoIW1zZ19zdGF0c19paW5mbykKKyAgICAgICAgZ290byBiYWlsOworICAgIG1zZ19zdGF0c19paW5mby0+Z2V0X2ZpcnN0X2RhdGFfcG9pbnQgPSBpY21wX21zZ19zdGF0c19maXJzdF9lbnRyeTsKKyAgICBtc2dfc3RhdHNfaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQgID0gaWNtcF9tc2dfc3RhdHNfbmV4dF9lbnRyeTsKKyAgICBtc2dfc3RhdHNfaWluZm8tPnRhYmxlX3JlZ2luZm8gICAgICAgID0gbXNnX3N0YXRzX3RhYmxlX2luZm87CisKKyAgICBtc2dfc3RhdHNfcmVnaW5mbyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJpY21wTXNnU3RhdHNUYWJsZSIsCisgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZV9oYW5kbGVyLCBpY21wX21zZ19zdGF0c190Ymxfb2lkLAorICAgICAgICAgICAgT0lEX0xFTkdUSChpY21wX21zZ19zdGF0c190Ymxfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworCisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihtc2dfc3RhdHNfcmVnaW5mbywgbXNnX3N0YXRzX2lpbmZvKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIG1zZ19zdGF0c19yZWdpbmZvID0gTlVMTDsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoIG1zZ19zdGF0c19yZWdpbmZvLAorICAgICAgICAgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihJQ01QX1NUQVRTX0NBQ0hFX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgaWNtcF9sb2FkLCBpY21wX2ZyZWUsCisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGJsX29pZCwgT0lEX0xFTkdUSChpY21wX21zZ19zdGF0c190Ymxfb2lkKSkpOworI2VuZGlmIC8qIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVCAqLwogCiAjaWZkZWYgVVNJTkdfTUlCSUlfSVBfTU9EVUxFCiAgICAgaWYgKCsraXBfbW9kdWxlX2NvdW50ID09IDIpCkBAIC0xMDMsNiArNzQ1LDE5IEBACiAgICAgaW5pdF9rZXJuZWxfc3Vub3M1KCk7CiAjZW5kaWYKICNlbmRpZgorICAgIHJldHVybjsKKworI2lmbmRlZiBocHV4MTEKK2JhaWw6CisjZW5kaWYKKyNpZmRlZiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyAgICBpZiAobXNnX3N0YXRzX3JlZ2luZm8pCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShtc2dfc3RhdHNfcmVnaW5mbyk7CisgICAgaWYgKHRhYmxlX3JlZ2luZm8pCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZSh0YWJsZV9yZWdpbmZvKTsKKyNlbmRpZgorICAgIGlmIChzY2FsYXJfcmVnaW5mbykKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHNjYWxhcl9yZWdpbmZvKTsKIH0KIAogCkBAIC0xMTIsNDggKzc2Nyw2IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgaHB1eDExCi0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJaW50Ci0jZW5kaWYKLQotI2lmZGVmIGxpbnV4Ci0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGljbXBfbWliCi0jZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAotI3VuZGVmIElDTVBTVEFUX1NZTUJPTAotI2VuZGlmCi0KLSNpZmRlZiBzb2xhcmlzMgotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCW1pYjJfaWNtcF90Ci0jZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAotI2VuZGlmCi0KLSNpZmRlZiBORVRCU0RfU1RBVFNfVklBX1NZU0NUTAotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFICAgICBzdHJ1Y3QgaWNtcF9taWIKLSNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCi0jdW5kZWYgSUNNUF9OU1RBVFMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSNpbmNsdWRlIDxpcGhscGFwaS5oPgotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFIE1JQl9JQ01QCi0jZW5kaWYKLQotLyogPz8gI2lmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpID8/ICovCi0KLSNpZmRlZiBIQVZFX1NZU19JQ01QSVBTVEFUU19ICi0vKiBvciAjaWZkZWYJCUhBVkVfU1lTX1RDUElQU1RBVFNfSCAgPz8/ICovCi0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGtuYQotI2RlZmluZSBVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKElDTVBfU1RBVF9TVFJVQ1RVUkUpCi0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGljbXBzdGF0Ci0jZGVmaW5lIFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQKLSNlbmRpZgotCi1JQ01QX1NUQVRfU1RSVUNUVVJFIGljbXBzdGF0OwotCi0KICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIFN5c3RlbSBpbmRlcGVuZGVudCBoYW5kbGVyCkBAIC0xNzEsOSArNzg0LDYgQEAKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlcXVlc3R2YjsKICAgICBsb25nICAgICByZXRfdmFsdWU7CiAgICAgb2lkICAgICAgc3ViaWQ7Ci0jaWZkZWYgVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVAotICAgIGludCAgICAgIGk7Ci0jZW5kaWYKIAogICAgIC8qCiAgICAgICogVGhlIGNhY2hlZCBkYXRhIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBsb2FkZWQgYnkgdGhlCkBAIC0yODEsMTMgKzg5MSwxNiBAQAogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY21wT3V0QWRkck1hc2tSZXBzOwogICAgICAgICBicmVhazsKICNlbGlmIGRlZmluZWQoVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVCkgJiYgIWRlZmluZWQoX1VTRV9QRVJGU1RBVF9QUk9UT0NPTCkKLSAgICBjYXNlIElDTVBJTk1TR1M6CisgICAgY2FzZSBJQ01QSU5NU0dTOiB7CisgICAgICAgIGludCBpOworCiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljcHNfYmFkY29kZSArCiAgICAgICAgICAgICBpY21wc3RhdC5pY3BzX3Rvb3Nob3J0ICsKICAgICAgICAgICAgIGljbXBzdGF0LmljcHNfY2hlY2tzdW0gKyBpY21wc3RhdC5pY3BzX2JhZGxlbjsKICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QX01BWFRZUEU7IGkrKykKICAgICAgICAgICAgIHJldF92YWx1ZSArPSBpY21wc3RhdC5pY3BzX2luaGlzdFtpXTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgSUNNUElORVJST1JTOgogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY3BzX2JhZGNvZGUgKwogICAgICAgICAgICAgaWNtcHN0YXQuaWNwc190b29zaG9ydCArCkBAIC0zMjYsMTEgKzkzOSwxNCBAQAogICAgIGNhc2UgSUNNUElOQUREUk1BU0tSRVBTOgogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX01BU0tSRVBMWV07CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSUNNUE9VVE1TR1M6CisgICAgY2FzZSBJQ01QT1VUTVNHUzogeworICAgICAgICBpbnQgaTsKKwogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY3BzX29sZHNob3J0ICsgaWNtcHN0YXQuaWNwc19vbGRpY21wOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVBfTUFYVFlQRTsgaSsrKQogICAgICAgICAgICAgcmV0X3ZhbHVlICs9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtpXTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgSUNNUE9VVEVSUk9SUzoKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNwc19vbGRzaG9ydCArIGljbXBzdGF0LmljcHNfb2xkaWNtcDsKICAgICAgICAgYnJlYWs7CkBAIC01MzIsNiArMTE0OCw3IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtNTQxLDYgKzExNTgsNyBAQAogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXA6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcDogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKQEAgLTU1MSw2ICsxMTY5LDE1MyBAQAogfQogCiAKKyNpZmRlZiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKK2ludAoraWNtcF9zdGF0c190YWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKwluZXRzbm1wX3JlcXVlc3RfaW5mbyAgKnJlcXVlc3Q7CisJbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZXF1ZXN0dmI7CisJbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisJc3RydWN0IGljbXBfc3RhdHNfdGFibGVfZW50cnkgICAqZW50cnk7CisJb2lkICAgICAgc3ViaWQ7CisKKwlzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKwkJY2FzZSBNT0RFX0dFVDoKKwkJCWZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisJCQkJcmVxdWVzdHZiID0gcmVxdWVzdC0+cmVxdWVzdHZiOworCQkJCWVudHJ5ID0gKHN0cnVjdCBpY21wX3N0YXRzX3RhYmxlX2VudHJ5ICopbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQocmVxdWVzdCk7CisJCQkJaWYgKCFlbnRyeSkKKwkJCQkJY29udGludWU7CisJCQkJdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCQkJCXN1YmlkICAgICAgPSB0YWJsZV9pbmZvLT5jb2xudW07CisJCQkJREVCVUdNU0dUTCgoICJtaWJJSS9pY21wU3RhdHNUYWJsZSIsICJvaWQ6ICIgKSk7CisJCQkJREVCVUdNU0dPSUQoKCAibWliSUkvaWNtcFN0YXRzVGFibGUiLCByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUsCisJCQkJCQkgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCApKTsKKwkJCQlERUJVR01TRygoICJtaWJJSS9pY21wU3RhdHNUYWJsZSIsICIgSW4gJWQgSW5FcnIgJWQgT3V0ICVkIE91dEVyciAlZFxuIiwKKwkJCQkJICAgICAgZW50cnktPmljbXBTdGF0c0luTXNncywgZW50cnktPmljbXBTdGF0c0luRXJyb3JzLAorCQkJCQkgICAgICBlbnRyeS0+aWNtcFN0YXRzT3V0TXNncywgZW50cnktPmljbXBTdGF0c091dEVycm9ycyApKTsKKworCQkJCXN3aXRjaCAoc3ViaWQpIHsKKwkJCQkJY2FzZSBJQ01QX1NUQVRfSU5NU0c6CisJCQkJCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKwkJCQkJCQkodV9jaGFyICopJmVudHJ5LT5pY21wU3RhdHNJbk1zZ3MsIHNpemVvZih1aW50MzJfdCkpOworCQkJCQkJYnJlYWs7CQorCQkJCQljYXNlIElDTVBfU1RBVF9JTkVSUjoKKwkJCQkJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorCQkJCQkJCSh1X2NoYXIgKikmZW50cnktPmljbXBTdGF0c0luRXJyb3JzLCBzaXplb2YodWludDMyX3QpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIElDTVBfU1RBVF9PVVRNU0c6CisJCQkJCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKwkJCQkJCQkodV9jaGFyICopJmVudHJ5LT5pY21wU3RhdHNPdXRNc2dzLCBzaXplb2YodWludDMyX3QpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIElDTVBfU1RBVF9PVVRFUlI6CisJCQkJCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKwkJCQkJCQkodV9jaGFyICopJmVudHJ5LT5pY21wU3RhdHNPdXRFcnJvcnMsIHNpemVvZih1aW50MzJfdCkpOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBTdGF0c1RhYmxlOiBVbnJlY29nbmlzZWQgY29sdW1uICglZClcbiIsKGludClzdWJpZCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTU9ERV9HRVRORVhUOgorCQljYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisJCWNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisJCWNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisJCWNhc2UgTU9ERV9TRVRfQUNUSU9OOgorCQljYXNlIE1PREVfU0VUX0NPTU1JVDoKKwkJY2FzZSBNT0RFX1NFVF9GUkVFOgorCQljYXNlIE1PREVfU0VUX1VORE86CisJCQlzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBTdGF0c1RhYmxlOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCisJCQkJcmVxaW5mby0+bW9kZSk7CisJCQlicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisJCWRlZmF1bHQ6CisJCQlzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBTdGF0c1RhYmxlOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAorCQkJCXJlcWluZm8tPm1vZGUpOworCQkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworaW50CitpY21wX21zZ19zdGF0c190YWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgICAgICAgICAgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqcmVxdWVzdHZiOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIHN0cnVjdCBpY21wX21zZ19zdGF0c190YWJsZV9lbnRyeSAqZW50cnk7CisgICAgb2lkIHN1YmlkOworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0dmIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CisgICAgICAgICAgICAgICAgZW50cnkgPSAoc3RydWN0IGljbXBfbXNnX3N0YXRzX3RhYmxlX2VudHJ5ICopbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgICAgIHN1YmlkID0gdGFibGVfaW5mby0+Y29sbnVtOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAibWliSUkvaWNtcE1zZ1N0YXRzVGFibGUiLCAib2lkOiAiICkpOworICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCggIm1pYklJL2ljbXBNc2dTdGF0c1RhYmxlIiwgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCApKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoICJtaWJJSS9pY21wTXNnU3RhdHNUYWJsZSIsICIgSW4gJWQgT3V0ICVkIEZsYWdzIDB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWNtcE1zZ1N0YXRzSW5Qa3RzLCBlbnRyeS0+aWNtcE1zZ1N0YXRzT3V0UGt0cywgZW50cnktPmZsYWdzICkpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJpZCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIElDTVBfTVNHX1NUQVRfSU5fUEtUUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+ZmxhZ3MgJiBJQ01QX01TR19TVEFUU19IQVNfSU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmZW50cnktPmljbXBNc2dTdGF0c0luUGt0cywgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJQ01QX01TR19TVEFUX09VVF9QS1RTOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5mbGFncyAmIElDTVBfTVNHX1NUQVRTX0hBU19PVVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmZW50cnktPmljbXBNc2dTdGF0c091dFBrdHMsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBNc2dTdGF0c1RhYmxlOiBVbnJlY29nbmlzZWQgY29sdW1uICglZClcbiIsKGludClzdWJpZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgorICAgICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBTdGF0c1RhYmxlOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wU3RhdHNUYWJsZTogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorI2VuZGlmCQkvKiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQgKi8KKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCkBAIC02ODAsMTMgKzE0NDUsMTkgQEAKICAgICB9IGVsc2UgewogICAgICAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUCBHcm91cCAobGludXgpXG4iKSk7CiAgICAgfQorICAgIGljbXBfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKKyAgICBpY21wX21zZ19zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOwogICAgIHJldHVybiByZXRfdmFsdWU7CiB9CiAjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQogaW50CiBpY21wX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKIHsKLSAgICBsb25nICAgICAgICAgICAgcmV0X3ZhbHVlID0gLTE7CisgICAgaW50IHJldF92YWx1ZSA9IC0xOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBtaWIyX2lwdjZJZkljbXBFbnRyeV90IGlmc3RhdDsKKyAgICBpbnQgcmVxID0gR0VUX0ZJUlNUOworI2VuZGlmCiAKICAgICByZXRfdmFsdWUgPQogICAgICAgICBnZXRNaWJzdGF0KE1JQl9JQ01QLCAmaWNtcHN0YXQsIHNpemVvZihtaWIyX2ljbXBfdCksIEdFVF9GSVJTVCwKQEAgLTY5Nyw4ICsxNDY4LDg1IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVAgR3JvdXAgKHNvbGFyaXMpXG4iKSk7CiAgICAgfQorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIG1lbXNldCgmaWNtcDZzdGF0LCAwLCBzaXplb2YoaWNtcDZzdGF0KSk7CisgICAgd2hpbGUgKChyZXRfdmFsdWUgPSBnZXRNaWJzdGF0KE1JQl9JQ01QNiwgJmlmc3RhdCwgc2l6ZW9mKGlmc3RhdCksIHJlcSwKKyAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpKSA9PSAwKSB7CisJaWYgKCByZXRfdmFsdWUgPCAwICkgeworCSAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJGYWlsZWQgdG8gbG9hZCBJQ01QNiBHcm91cCAoc29sYXJpcylcbiIpKTsKKwl9IGVsc2UgeworCSAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUDYgR3JvdXAgKHNvbGFyaXMpXG4iKSk7CisJfQorCWljbXA2c3RhdC5pY21wNk91dE1zZ3MgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRNc2dzOworCWljbXA2c3RhdC5pY21wNkluTXNncyArPSBpZnN0YXQuaXB2NklmSWNtcEluTXNnczsKKwlpY21wNnN0YXQuaWNtcDZJbkVycm9ycyArPSBpZnN0YXQuaXB2NklmSWNtcEluRXJyb3JzOworCWljbXA2c3RhdC5pY21wNk91dERlc3RVbnJlYWNocyArPSBpZnN0YXQuaXB2NklmSWNtcE91dERlc3RVbnJlYWNoczsKKwlpY21wNnN0YXQuaWNtcDZJbkRlc3RVbnJlYWNocyArPSBpZnN0YXQuaXB2NklmSWNtcEluRGVzdFVucmVhY2hzOworCWljbXA2c3RhdC5pY21wNk91dFBrdFRvb0JpZ3MgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRQa3RUb29CaWdzOworCWljbXA2c3RhdC5pY21wNkluUGt0VG9vQmlncyArPSBpZnN0YXQuaXB2NklmSWNtcEluUGt0VG9vQmlnczsKKwlpY21wNnN0YXQuaWNtcDZPdXRUaW1lRXhjZHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRUaW1lRXhjZHM7CisJaWNtcDZzdGF0LmljbXA2SW5UaW1lRXhjZHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJblRpbWVFeGNkczsKKwlpY21wNnN0YXQuaWNtcDZPdXRQYXJtUHJvYmxlbXMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRQYXJtUHJvYmxlbXM7CisJaWNtcDZzdGF0LmljbXA2SW5QYXJtUHJvYmxlbXMgKz0gaWZzdGF0LmlwdjZJZkljbXBJblBhcm1Qcm9ibGVtczsKKwlpY21wNnN0YXQuaWNtcDZPdXRFY2hvcyArPSBpZnN0YXQuaXB2NklmSWNtcE91dEVjaG9zOworCWljbXA2c3RhdC5pY21wNkluRWNob3MgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkVjaG9zOworCWljbXA2c3RhdC5pY21wNk91dEVjaG9SZXBsaWVzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0RWNob1JlcGxpZXM7CisJaWNtcDZzdGF0LmljbXA2SW5FY2hvUmVwbGllcyArPSBpZnN0YXQuaXB2NklmSWNtcEluRWNob1JlcGxpZXM7CisJaWNtcDZzdGF0LmljbXA2T3V0Um91dGVyU29saWNpdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRSb3V0ZXJTb2xpY2l0czsKKwlpY21wNnN0YXQuaWNtcDZJblJvdXRlclNvbGljaXRzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Sb3V0ZXJTb2xpY2l0czsKKwlpY21wNnN0YXQuaWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKwlpY21wNnN0YXQuaWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisJaWNtcDZzdGF0LmljbXA2T3V0TmVpZ2hib3JTb2xpY2l0cyArPSBpZnN0YXQuaXB2NklmSWNtcE91dE5laWdoYm9yU29saWNpdHM7CisJaWNtcDZzdGF0LmljbXA2SW5OZWlnaGJvclNvbGljaXRzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5OZWlnaGJvclNvbGljaXRzOworCWljbXA2c3RhdC5pY21wNk91dFJlZGlyZWN0cyArPSBpZnN0YXQuaXB2NklmSWNtcE91dFJlZGlyZWN0czsKKwlpY21wNnN0YXQuaWNtcDZJblJlZGlyZWN0cyArPSBpZnN0YXQuaXB2NklmSWNtcEluUmVkaXJlY3RzOworCWljbXA2c3RhdC5pY21wNkluR3JvdXBNZW1iUXVlcmllcyArPSBpZnN0YXQuaXB2NklmSWNtcEluR3JvdXBNZW1iUXVlcmllczsKKwlpY21wNnN0YXQuaWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRHcm91cE1lbWJSZXNwb25zZXM7CisJaWNtcDZzdGF0LmljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkdyb3VwTWVtYlJlc3BvbnNlczsKKwlpY21wNnN0YXQuaWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0R3JvdXBNZW1iUmVkdWN0aW9uczsKKwlpY21wNnN0YXQuaWNtcDZJbkdyb3VwTWVtYlJlZHVjdGlvbnMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkdyb3VwTWVtYlJlZHVjdGlvbnM7CisJcmVxID0gR0VUX05FWFQ7CisgICAgfQorI2VuZGlmCisKKyAgICBpY21wX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CisgICAgaWNtcF9tc2dfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKICAgICByZXR1cm4gcmV0X3ZhbHVlOwogfQorCitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcF9zdGF0KElDTVBfU1RBVF9TVFJVQ1RVUkUgKm1pYikKK3sKKyAgICAqbWliID0gaWNtcHN0YXQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wX21zZ19zdGF0KElDTVBfU1RBVF9TVFJVQ1RVUkUgKm1pYiwgc3RydWN0IGljbXA0X21zZ19taWIgKm1zZ19taWIsIGludCAqZmxhZykKK3sKKyAgICAqbWliID0gaWNtcHN0YXQ7CisgICAgKmZsYWcgPSAwOworICAgIHJldHVybiAwOworfQorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliKQoreworICAgICptaWIgPSBpY21wNnN0YXQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIsIHN0cnVjdCBpY21wNl9tc2dfbWliICptc2dfbWliLCBpbnQgKmZsYWcpCit7CisgICAgKm1pYiA9IGljbXA2c3RhdDsKKyAgICAqZmxhZyA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2VsaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKIGludAogaWNtcF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCkBAIC03MTIsOSArMTU2MCwxMCBAQAogICAgIH0gZWxzZSB7CiAJREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKICAgICB9CisgICAgaWNtcF9zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOworICAgIGljbXBfbXNnX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CiAgICAgcmV0dXJuIHJldF92YWx1ZTsKIH0KLQogI2VsaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKIGludAogaWNtcF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCkBAIC03NTIsMTcgKzE2MDEsMTYgQEAKIGljbXBfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQogewogICAgIGxvbmcgICAgICAgICAgICByZXRfdmFsdWUgPSAtMTsKLSAgICBzdGF0aWMgaW50ICAgICAgc25hbWVbNF0gPQotICAgICAgICB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fSUNNUCwgSUNNUENUTF9TVEFUUyB9OwotICAgIHNpemVfdCAgICAgICAgICBsZW4gPSBzaXplb2YoaWNtcHN0YXQpOwogCi0gICAgcmV0X3ZhbHVlID0gc3lzY3RsKHNuYW1lLCA0LCAmaWNtcHN0YXQsICZsZW4sIDAsIDApOworICAgIHJldF92YWx1ZSA9IHN5c2N0bF9yZWFkX2ljbXBfc3RhdCgmaWNtcHN0YXQpOwogCiAgICAgaWYgKCByZXRfdmFsdWUgPCAwICkgewotICAgICAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJGYWlsZWQgdG8gbG9hZCBJQ01QIEdyb3VwIChzeXNjdGwpXG4iKSk7CisJREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiRmFpbGVkIHRvIGxvYWQgSUNNUCBHcm91cCAobmV0YnNkKVxuIikpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QIEdyb3VwIChzeXNjdGwpXG4iKSk7CisJREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKICAgICB9CisgICAgaWNtcF9zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOworICAgIGljbXBfbXNnX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CiAgICAgcmV0dXJuIHJldF92YWx1ZTsKIH0KICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfVENQSVBTVEFUU19IKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oCmluZGV4IGNkYWFjNWQuLmQwNzg0MWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmgKQEAgLTUsMTUgKzUsMzIgQEAKICNpZm5kZWYgX01JQkdST1VQX0lDTVBfSAogI2RlZmluZSBfTUlCR1JPVVBfSUNNUF9ICiAKLWNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsICAgICAgICBrZXJuZWxfc3Vub3M1KQorY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwgIGtlcm5lbF9zdW5vczUpCiBjb25maWdfYXJjaF9yZXF1aXJlKGxpbnV4LCAgICAgbWliSUkva2VybmVsX2xpbnV4KQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkNCwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q1LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDYsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkNywgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q4LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDksICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkMTAsIG1pYklJL2tlcm5lbF9zeXNjdGwpCiBjb25maWdfYXJjaF9yZXF1aXJlKG5ldGJzZCwgICAgbWliSUkva2VybmVsX25ldGJzZCkKIGNvbmZpZ19hcmNoX3JlcXVpcmUobmV0YnNkZWxmLCBtaWJJSS9rZXJuZWxfbmV0YnNkKQorY29uZmlnX2FyY2hfcmVxdWlyZShvcGVuYnNkNCwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKG9wZW5ic2Q1LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZHJhZ29uZmx5MiwgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZHJhZ29uZmx5MywgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZGFyd2luMTAsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkYXJ3aW4xMSwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRhcndpbjEyLCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZGFyd2luMTMsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgogCiBleHRlcm4gdm9pZCAgICAgaW5pdF9pY21wKHZvaWQpOwogZXh0ZXJuIE5ldHNubXBfTm9kZV9IYW5kbGVyIGljbXBfaGFuZGxlcjsKK2V4dGVybiBOZXRzbm1wX05vZGVfSGFuZGxlciBpY21wX3N0YXRzX3RhYmxlX2hhbmRsZXI7CitleHRlcm4gTmV0c25tcF9Ob2RlX0hhbmRsZXIgaWNtcF9tc2dfc3RhdHNfdGFibGVfaGFuZGxlcjsKIGV4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIGljbXBfbG9hZDsKIGV4dGVybiBOZXRzbm1wQ2FjaGVGcmVlIGljbXBfZnJlZTsKIApAQCAtNDQsNCArNjEsMTcgQEAKICNkZWZpbmUgSUNNUE9VVEFERFJNQVNLUyAgICAgMjUKICNkZWZpbmUgSUNNUE9VVEFERFJNQVNLUkVQUyAgMjYKIAorI2RlZmluZSBJQ01QU1RBVFNUQUJMRSAgICAgICAyOQorI2RlZmluZSBJQ01QX1NUQVRfSVBWRVIgICAgICAgMQorI2RlZmluZSBJQ01QX1NUQVRfSU5NU0cgICAgICAgMiAKKyNkZWZpbmUgSUNNUF9TVEFUX0lORVJSICAgICAgIDMgCisjZGVmaW5lIElDTVBfU1RBVF9PVVRNU0cgICAgICA0IAorI2RlZmluZSBJQ01QX1NUQVRfT1VURVJSICAgICAgNSAKKworI2RlZmluZSBJQ01QTVNHU1RBVFNUQUJMRSAgICAgMzAKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVF9JUFZFUiAgICAxCisjZGVmaW5lIElDTVBfTVNHX1NUQVRfVFlQRSAgICAgMgorI2RlZmluZSBJQ01QX01TR19TVEFUX0lOX1BLVFMgIDMKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVF9PVVRfUEtUUyA0CisKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0lDTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jCmluZGV4IGM4OTZmZjIuLjI2ZmZlYmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMKQEAgLTE1LDggKzE1LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUpCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShpbnRlcmZhY2VfbGVnYWN5KQorCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfTEFURSkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKQEAgLTM3LDEwICs0MCw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTF9MQVRFKQorI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpICYmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfTEFURSkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKQEAgLTU3LDExICs1Nyw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xOTcsNDkgKzE5Myw3OSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCi0vKiBpZiB5b3Ugd2FudCBjYWNoaW5nIGVuYWJsZWQgZm9yIHNwZWVkIHJldHJpdmFsIHB1cnBvc2VzLCBzZXQgdGhpcyB0byA1PyovCisvKiBpZiB5b3Ugd2FudCBjYWNoaW5nIGVuYWJsZWQgZm9yIHNwZWVkIHJldHJpZXZhbCBwdXJwb3Nlcywgc2V0IHRoaXMgdG8gNT8qLwogI2RlZmluZSBNSU5MT0FERlJFUSAwICAgICAgICAgICAgICAgICAgICAgLyogbWluIHJlbG9hZCBmcmVxdWVuY3kgaW4gc2Vjb25kcyAqLwogI2lmZGVmIGxpbnV4CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBMYXN0TG9hZCA9IDA7ICAgICAgICAvKiBFVCBpbiBzZWNzIGF0IGxhc3QgdGFibGUgbG9hZCAqLwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCiAKIHN0cnVjdCB2YXJpYWJsZTMgaW50ZXJmYWNlc192YXJpYWJsZXNbXSA9IHsKLSAgICB7SUZOVU1CRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2ludGVyZmFjZXMsIDEsIHsxfX0sCi0gICAge0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxfX0sCi0gICAge0lGREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDJ9fSwKLSAgICB7TkVUU05NUF9JRlRZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAzfX0sCi0gICAge0lGTVRVLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNH19LAotICAgIHtJRlNQRUVELCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDV9fSwKLSAgICB7SUZQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNn19LAorICAgIHtORVRTTk1QX0lGTlVNQkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pbnRlcmZhY2VzLCAxLCB7MX19LAorICAgIHtORVRTTk1QX0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxfX0sCisgICAge05FVFNOTVBfSUZERVNDUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMn19LAorICAgIHtORVRTTk1QX0lGVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDN9fSwKKyAgICB7TkVUU05NUF9JRk1UVSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDR9fSwKKyAgICB7TkVUU05NUF9JRlNQRUVELCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDV9fSwKKyAgICB7TkVUU05NUF9JRlBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA2fX0sCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0gICAge0lGQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgN319LAorICAgIHtORVRTTk1QX0lGQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgN319LAogI2Vsc2UKLSAgICB7SUZBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDd9fSwKKyAgICB7TkVUU05NUF9JRkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgN319LAogI2VuZGlmCi0gICAge0lGT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDh9fSwKLSAgICB7SUZMQVNUQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA5fX0sCi0gICAge0lGSU5PQ1RFVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMH19LAotICAgIHtJRklOVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTF9fSwKLSAgICB7SUZJTk5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMn19LAotICAgIHtJRklORElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxM319LAotICAgIHtJRklORVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTR9fSwKLSAgICB7SUZJTlVOS05PV05QUk9UT1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNX19LAotICAgIHtJRk9VVE9DVEVUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE2fX0sCi0gICAge0lGT1VUVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTd9fSwKLSAgICB7SUZPVVROVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTh9fSwKLSAgICB7SUZPVVRESVNDQVJEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE5fX0sCi0gICAge0lGT1VURVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjB9fSwKLSAgICB7SUZPVVRRTEVOLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIxfX0sCi0gICAge0lGU1BFQ0lGSUMsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIyfX0KKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAge05FVFNOTVBfSUZBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDd9fSwKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAge05FVFNOTVBfSUZPUEVSU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgOH19LAorICAgIHtORVRTTk1QX0lGTEFTVENIQU5HRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgOX19LAorICAgIHtORVRTTk1QX0lGSU5PQ1RFVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMH19LAorICAgIHtORVRTTk1QX0lGSU5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMX19LAorICAgIHtORVRTTk1QX0lGSU5OVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTJ9fSwKKyAgICB7TkVUU05NUF9JRklORElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxM319LAorICAgIHtORVRTTk1QX0lGSU5FUlJPUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNH19LAorICAgIHtORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTV9fSwKKyAgICB7TkVUU05NUF9JRk9VVE9DVEVUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE2fX0sCisgICAge05FVFNOTVBfSUZPVVRVQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxN319LAorICAgIHtORVRTTk1QX0lGT1VUTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE4fX0sCisgICAge05FVFNOTVBfSUZPVVRESVNDQVJEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE5fX0sCisgICAge05FVFNOTVBfSUZPVVRFUlJPUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMH19LAorICAgIHtORVRTTk1QX0lGT1VUUUxFTiwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMX19LAorICAgIHtORVRTTk1QX0lGU1BFQ0lGSUMsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIyfX0KIH07CiAKIC8qCkBAIC0zODUsNyArNDExLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZOVU1CRVI6CisgICAgY2FzZSBORVRTTk1QX0lGTlVNQkVSOgogICAgICAgICBsb25nX3JldHVybiA9IEludGVyZmFjZV9TY2FuX0dldF9Db3VudCgpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIGRlZmF1bHQ6CkBAIC01NzIsMTAgKzU5OCwxMCBAQAogICAgIGlmX3B0ciA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9vdmVycmlkZXNfZ2V0KGlmX25hbWUpOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaW50ZXJmYWNlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICAgICAgICAgY3AgPSBpZl9uYW1lOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihpZl9uYW1lKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgY3A7CkBAIC01ODUsMTQgKzYxMSwxNCBAQAogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfdHlwZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOgorICAgIGNhc2UgTkVUU05NUF9JRk1UVToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9tdHU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlIHsKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFX0lGU19WQUxVRQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFX0lGU19WQUxVRQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfYmF1ZHJhdGUuaWZzX3ZhbHVlIDw8CiAgICAgICAgICAgICBpZl9tc2cuaWZtX2RhdGEuaWZpX2JhdWRyYXRlLmlmc19sb2cyOwogI2Vsc2UKQEAgLTYwMCw1MiArNjI2LDUyIEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIAogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmX21zZy5pZm1fZmxhZ3MgJiBJRkZfVVAgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmX21zZy5pZm1fZmxhZ3MgJiBJRkZfUlVOTklORyA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgICAgICAvKgogICAgICAgICAgKiBpZkxhc3RDaGFuZ2UgCiAgICAgICAgICAqLwotICAgIGNhc2UgSUZJTk9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2lieXRlczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0KICAgICAgICAgICAgICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfaXBhY2tldHMgLQogICAgICAgICAgICAgaWZfbXNnLmlmbV9kYXRhLmlmaV9pbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfaW1jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfaXFkcm9wczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9pZXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfbm9wcm90bzsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX29ieXRlczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPQogICAgICAgICAgICAgKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9vcGFja2V0cyAtCiAgICAgICAgICAgICBpZl9tc2cuaWZtX2RhdGEuaWZpX29tY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX29tY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgogI2lmZGVmIGlmX29kcm9wcwogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfb2Ryb3BzOwogI2Vsc2UKQEAgLTY1NSwxMCArNjgxLDEwIEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfb2Vycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgogI2lmZGVmIGlyaXg2CiAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKICNlbHNlCkBAIC03NTIsOSArNzc4LDYgQEAKICAgICBzdGF0aWMgY2hhciAgICAgTmFtZVsxNl07CiAgICAgY2hhciAgICAgICAgICAgKmNwOwogICAgIGNvbmZfaWZfbGlzdCAgICppZl9wdHI7Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQwotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0jZW5kaWYKIAogICAgIGludGVyZmFjZSA9CiAgICAgICAgIGhlYWRlcl9pZkVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpOwpAQCAtNzY1LDEwICs3ODgsMTAgQEAKICAgICBpZl9wdHIgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzX2dldChOYW1lKTsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGludGVyZmFjZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAgICAgICAgIGNwID0gTmFtZTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oY3ApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBjcDsKQEAgLTc3NiwyNiArNzk5LDI2IEBACiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+dHlwZTsKICAgICAgICAgZWxzZSB7Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9UWVBFCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl90eXBlOwogI2Vsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMTsgICAgLyogT1RIRVIgKi8KICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVTp7CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOnsKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmbmV0LmlmX210dTsKICAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgICAgIH0KLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UgewotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEUKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9iYXVkcmF0ZTsKLSNlbGlmIFNUUlVDVF9JRk5FVF9IQVNfSUZfU1BFRUQKKyNlbGlmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1NQRUVECiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NwZWVkOwotI2VsaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9UWVBFICYmIGRlZmluZWQoSUZUX0VUSEVSKQorI2VsaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRSAmJiBkZWZpbmVkKElGVF9FVEhFUikKICAgICAgICAgICAgIGlmIChpZm5ldC5pZl90eXBlID09IElGVF9FVEhFUikKICAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IDEwMDAwMDAwOwogICAgICAgICAgICAgaWYgKGlmbmV0LmlmX3R5cGUgPT0gSUZUX1AxMCkKQEAgLTgxNCw5ICs4MzcsOSBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAgICAgICAgIEludGVyZmFjZV9HZXRfRXRoZXJfQnlfSW5kZXgoaW50ZXJmYWNlLCByZXR1cm5fYnVmKTsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIAkqdmFyX2xlbiA9IDA7CiAjZWxzZQogICAgICAgICBpZiAoKHJldHVybl9idWZbMF0gPT0gMCkgJiYgKHJldHVybl9idWZbMV0gPT0gMCkgJiYKQEAgLTgyNywxNCArODUwLDE0IEBACiAgICAgICAgICAgICAqdmFyX2xlbiA9IDY7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcmV0dXJuX2J1ZjsKLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZmxhZ3MgJiBJRkZfVVAgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKLSNpZiBkZWZpbmVkKFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMpICYmICEoZGVmaW5lZChmcmVlYnNkMikgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCAxOTk2MDcpCisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDKSAmJiAhKGRlZmluZWQoZnJlZWJzZDIpICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTk5NjA3KQogICAgICAgICAvKgogICAgICAgICAgKiBYWFggLSBTTk1QJ3MgaWZMYXN0Y2hhbmdlIGlzIHRpbWUgd2hlbiBvcC4gc3RhdHVzIGNoYW5nZWQKICAgICAgICAgICogKiBGcmVlQlNEJ3MgaWZfbGFzdGNoYW5nZSBpcyB0aW1lIHdoZW4gcGFja2V0IHdhcyBpbnB1dCBvciBvdXRwdXQKQEAgLTg2Myw5ICs4ODYsOSBAQAogICAgICAgICBsb25nX3JldHVybiA9IDA7ICAgICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk9DVEVUUzoKLSNpZmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lCWVRFUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CisjaWZkZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSUJZVEVTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lieXRlcyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lieXRlczsKQEAgLTg3NywxNSArOTAwLDE1IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXBhY2tldHMgKiAzMDg7IC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogICAgICAgICB7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lwYWNrZXRzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lwYWNrZXRzOwogI2VuZGlmCi0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JTUNBU1RTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZuZXQuaWZfaW1jYXN0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZuZXQuaWZfaW1jYXN0czsKQEAgLTg5Myw5ICs5MTYsOSBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaW1jYXN0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2ltY2FzdHM7CkBAIC05MDcsOSArOTMwLDkgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JUURST1BTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lxZHJvcHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcWRyb3BzOwpAQCAtOTIxLDE2ICs5NDQsMTYgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pZXJyb3JzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaWVycm9yczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9OT1BST1RPCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTk9QUk9UTworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9ub3Byb3RvICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfbm9wcm90bzsKQEAgLTk0Miw5ICs5NjUsOSBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKLSNpZmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgorI2lmZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09CWVRFUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vYnl0ZXMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vYnl0ZXM7CkBAIC05NTYsMTUgKzk3OSwxNSBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29wYWNrZXRzICogMzA4OyAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogICAgICAgICB7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29wYWNrZXRzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29wYWNrZXRzOwogI2VuZGlmCi0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PTUNBU1RTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZuZXQuaWZfb21jYXN0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZuZXQuaWZfb21jYXN0czsKQEAgLTk3Miw5ICs5OTUsOSBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vbWNhc3RzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb21jYXN0czsKQEAgLTk4NiwyOCArMTAwOSwyOCBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfZHJvcHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2Ryb3BzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfb2Vycm9ycyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX29lcnJvcnM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUUUxFTjoKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRk9VVFFMRU46CisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfbGVuICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9sZW47CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFQ0lGSUM6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFQ0lGSUM6CiAgICAgICAgICp2YXJfbGVuID0gbnVsbE9pZExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbnVsbE9pZDsKICAgICBkZWZhdWx0OgpAQCAtMTA0MCw3ICsxMDYzLDcgQEAKICAgICBzdGF0aWMgY2hhciAgICAgTmFtZVsxNl07CiAjZW5kaWYKICAgICByZWdpc3RlciBjaGFyICAqY3A7Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQworI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDCiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKICNlbmRpZgogI2lmICFkZWZpbmVkKGhwdXgxMSkKQEAgLTEwODMsMTAgKzExMDYsMTAgQEAKICAgICBpZl9wdHIgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzX2dldChOYW1lKTsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGludGVyZmFjZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGNwID0gaWZuZXQuaWZfZW50cnkuaWZEZXNjcjsKICNlbHNlCkBAIC0xMTExLDcgKzExMzQsNyBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOnsKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6ewogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZuZXQuaWZfZW50cnkuaWZNdHU7CiAjZWxzZQpAQCAtMTExOSw3ICsxMTQyLDcgQEAKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICAgICAgfQotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZSB7CkBAIC0xMTMzLDcgKzExNTYsNyBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgICp2YXJfbGVuID0gaWZuZXQuaWZfZW50cnkuaWZQaHlzQWRkcmVzcy5vX2xlbmd0aDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgaWZuZXQuaWZfZW50cnkuaWZQaHlzQWRkcmVzcy5vX2J5dGVzOwpAQCAtMTE0NywyMSArMTE3MCwyMSBAQAogICAgICAgICAgICAgKnZhcl9sZW4gPSA2OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSByZXR1cm5fYnVmOwogI2VuZGlmCi0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmQWRtaW47CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2ZsYWdzICYgSUZGX1VQID8gMSA6IDI7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3BlcjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZmxhZ3MgJiBJRkZfUlVOTklORyA/IDEgOiAyOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6CisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkxhc3RDaGFuZ2U7CiAjZWxzZQpAQCAtMTE3MSw3ICsxMTk0LDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5PQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJbk9jdGV0czsKICNlbHNlCkBAIC0xMTgxLDcgKzEyMDQsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcGFja2V0cyAqIDMwODsgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5VY2FzdFBrdHM7CiAjZWxzZQpAQCAtMTE5MSw3ICsxMjE0LDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXBhY2tldHM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluTlVjYXN0UGt0czsKICNlbHNlCkBAIC0xMjAxLDcgKzEyMjQsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluRGlzY2FyZHM7CiAjZWxzZQpAQCAtMTIxMSwxNCArMTIzNCwxNCBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5FcnJvcnM7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2llcnJvcnM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluVW5rbm93blByb3RvczsKICNlbHNlCkBAIC0xMjI4LDcgKzEyNTEsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXRPY3RldHM7CiAjZWxzZQpAQCAtMTIzOCw3ICsxMjYxLDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb3BhY2tldHMgKiAzMDg7ICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0VWNhc3RQa3RzOwogI2Vsc2UKQEAgLTEyNDgsNyArMTI3MSw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29wYWNrZXRzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dE5VY2FzdFBrdHM7CiAjZWxzZQpAQCAtMTI1OCwyOCArMTI4MSwyOCBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0RGlzY2FyZHM7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfZHJvcHM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dEVycm9yczsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfb2Vycm9yczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRRTEVOOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFFMRU46CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXRRbGVuOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2xlbjsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVDSUZJQzoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVDSUZJQzoKICAgICAgICAgKnZhcl9sZW4gPSBudWxsT2lkTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBudWxsT2lkOwogICAgIGRlZmF1bHQ6CkBAIC0xMzMxLDEwICsxMzU0LDEwIEBACiAgICAgICogaWZfcHRyID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X292ZXJyaWRlc19nZXQoTmFtZSk7CiAgICAgICovCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZzdGF0LmlmSW5kZXg7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogICAgICAgICAqdmFyX2xlbiA9IGlmc3RhdC5pZkRlc2NyLm9fbGVuZ3RoOwogICAgICAgICAodm9pZCkgbWVtY3B5KHJldHVybl9idWYsIGlmc3RhdC5pZkRlc2NyLm9fYnl0ZXMsICp2YXJfbGVuKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcmV0dXJuX2J1ZjsKQEAgLTEzNDQsNjUgKzEzNjcsNjUgQEAKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZlR5cGU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVToKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmTXR1OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZlNwZWVkOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICAgICAgICAgKnZhcl9sZW4gPSBpZnN0YXQuaWZQaHlzQWRkcmVzcy5vX2xlbmd0aDsKICAgICAgICAgKHZvaWQpIG1lbWNweShyZXR1cm5fYnVmLCBpZnN0YXQuaWZQaHlzQWRkcmVzcy5vX2J5dGVzLCAqdmFyX2xlbik7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHJldHVybl9idWY7Ci0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkFkbWluU3RhdHVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3BlclN0YXR1czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkxhc3RDaGFuZ2U7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluT2N0ZXRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJblVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJbk5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJbkRpc2NhcmRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJbkVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJblVua25vd25Qcm90b3M7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0T2N0ZXRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dFVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dE5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dERpc2NhcmRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dEVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUUUxFTjoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRRTEVOOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dFFMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUNJRklDOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUNJRklDOgogCWxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmU3BlY2lmaWM7CiAJcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICBkZWZhdWx0OgpAQCAtMTUwMiw3ICsxNTI1LDcgQEAKIAogI2lmZGVmIGxpbnV4CiAgICAgLyogIGRpc2FsbG93IHJlbG9hZGluZyBvZiBzdHJ1Y3R1cmVzIHRvbyBvZnRlbiAqLwotICAgIGdldHRpbWVvZmRheSAoICZldCwgKCBzdHJ1Y3QgdGltZXpvbmUgKiApIDAgKTsgIC8qICBnZXQgdGltZS1vZi1kYXkgKi8KKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJmV0KTsKICAgICBpZiAoIGV0LnR2X3NlYyA8IExhc3RMb2FkICsgTUlOTE9BREZSRVEgKSB7ICAgICAvKiAgb25seSByZWxvYWQgc28gb2Z0ZW4gKi8KICAgICAgIGlmbmV0YWRkciA9IGlmbmV0YWRkcl9saXN0OyAgICAgICAgICAgICAgICAgICAvKiAgaW5pdGlhbGl6ZSBwb2ludGVyICovCiAgICAgICByZXR1cm47CkBAIC0xNTM4LDcgKzE1NjEsNyBAQAogICAgICAqLwogICAgIGlmICghKGRldmluID0gZm9wZW4oIi9wcm9jL25ldC9kZXYiLCAiciIpKSkgewogICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvZGV2IC0gY29udGludWluZy4uLlxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9kZXYuXG4iKSk7CiAgICAgICAgIHJldHVybjsgLyoqIGV4aXQgKDEpOyAqKi8KICAgICB9CiAKQEAgLTE4NzksNiArMTkwMiwxMCBAQAogI2lmZGVmIGxpbnV4CiAgICAgICAgIHN0cmxjYXQoc2F2ZU5hbWUsIGlmbmV0LmlmX3VuaXQsIHNpemVvZihzYXZlTmFtZSkpOwogI2Vsc2UKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTgorICAgICAgICAvKiB0aGlzIGV4aXN0cyBoZXJlIGp1c3Qgc28gd2UgZG9uJ3QgY29weSBpZmRlZiBsb2dpYyBlbHNld2hlcmUgKi8KKyAgICAgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX2FwcGVuZF9pbnQpOworI2VuZGlmCiAgICAgICAgIHN0cmluZ19hcHBlbmRfaW50KGNwLCBpZm5ldC5pZl91bml0KTsKICNlbmRpZgogICAgICAgICBpZiAoMSB8fCBzdHJjbXAoc2F2ZU5hbWUsICJsbzAiKSAhPSAwKSB7ICAgICAgICAvKiBYWFggKi8KQEAgLTE5NDcsMTAgKzE5NzQsMTMgQEAKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogCiAgICAgaWYgKCFpZl9wdHIpIHsKLSAgICAgICAgaWYgKGNvdW50KQorICAgICAgICBpZiAoY291bnQpIHsKICAgICAgICAgICAgIGlmX3B0ciA9CiAgICAgICAgICAgICAgICAgKG5tYXBpX3BoeXN0YXQgKikgbWFsbG9jKHNpemVvZihubWFwaV9waHlzdGF0KSAqIGNvdW50KTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKGlmX3B0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gKDApOyAgICAgICAgIC8qIEVPRiAqLwogICAgIH0KIApAQCAtMTk5Nyw3ICsyMDI3LDcgQEAKICAgICBzdHJ1Y3QgaWZuZXQgICAgaWZuZXQ7CiAgICAgc3RydWN0IGluX2lmYWRkciAqaWEsIGluX2lmYWRkcjsKICAgICBzaG9ydCAgICAgICAgICAgaGFzX2lwYWRkciA9IDA7Ci0jaWYgIVNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKKyNpZiAhSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUKICAgICByZWdpc3RlciBjaGFyICAqY3A7CiAjZW5kaWYKIApAQCAtMjAwOSw3ICsyMDM5LDcgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pbnRlcmZhY2VzOkludGVyZmFjZV9TY2FuX05leHQiLCAia2xvb2t1cCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FCiAjaWYgZGVmaW5lZChuZXRic2QxKSB8fCBkZWZpbmVkKG9wZW5ic2QyKQogICAgICAgICBzdHJsY3B5KHNhdmVOYW1lLCBpZm5ldC5pZl94bmFtZSwgc2l6ZW9mKHNhdmVOYW1lKSk7CiAjZWxzZQpAQCAtMjAyNyw2ICsyMDU3LDEwIEBACiAKICAgICAgICAgc2F2ZU5hbWVbc2l6ZW9mKHNhdmVOYW1lKSAtIDFdID0gJ1wwJzsKICAgICAgICAgY3AgPSBzdHJjaHIoc2F2ZU5hbWUsICdcMCcpOworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOCisgICAgICAgIC8qIHRoaXMgZXhpc3RzIGhlcmUganVzdCBzbyB3ZSBkb24ndCBjb3B5IGlmZGVmIGxvZ2ljIGVsc2V3aGVyZSAqLworICAgICAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfYXBwZW5kX2ludCk7CisjZW5kaWYKICAgICAgICAgc3RyaW5nX2FwcGVuZF9pbnQoY3AsIGlmbmV0LmlmX3VuaXQpOwogI2VuZGlmCiAgICAgICAgIGlmICgxIHx8IHN0cmNtcChzYXZlTmFtZSwgImxvMCIpICE9IDApIHsgICAgICAgIC8qIFhYWCAqLwpAQCAtMjA2OCw3ICsyMTAyLDcgQEAKICNlbmRpZgogICAgICAgICAgICAgfQogCi0jaWYgIWRlZmluZWQobmV0YnNkMSkgJiYgIWRlZmluZWQoZnJlZWJzZDIpICYmICFkZWZpbmVkKG9wZW5ic2QyKSAmJiAhZGVmaW5lZChTVFJVQ1RfSUZORVRfSEFTX0lGX0FERFJMSVNUKQorI2lmICFkZWZpbmVkKG5ldGJzZDEpICYmICFkZWZpbmVkKGZyZWVic2QyKSAmJiAhZGVmaW5lZChvcGVuYnNkMikgJiYgIWRlZmluZWQoSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QpCiAgICAgICAgICAgICBpZm5ldC5pZl9hZGRybGlzdCA9IChzdHJ1Y3QgaWZhZGRyICopIGlhOyAgIC8qIFdST05HIERBVEEgVFlQRTsgT05MWSBBIEZMQUcgKi8KICNlbmRpZgogICAgICAgICAgICAgLyoKQEAgLTI1MjksMTAgKzI1NjMsMTAgQEAKICAgICAgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGludGVyZmFjZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAgICAgICAgIGNwID0gaWZtZC5pZm1kX25hbWU7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGNwKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgY3A7CkBAIC0yNTQyLDE2ICsyNTc2LDE2IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZGF0YS5pZmlfdHlwZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOgorICAgIGNhc2UgTkVUU05NUF9JRk1UVToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX210dTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZGF0YS5pZmlfYmF1ZHJhdGU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogICAgICAgICB7CiAgICAgICAgICAgICBjaGFyICAgICAgICAgICAqY3A7CiAgICAgICAgICAgICBpZiAoZ2V0X3BoeXNfYWRkcmVzcyhpbnRlcmZhY2UsICZjcCwgdmFyX2xlbikpCkBAIC0yNTU5LDEzICsyNTkzLDEzIEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNwOwogICAgICAgICB9Ci0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9mbGFncyAmIElGRl9VUCA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2ZsYWdzICYgSUZGX1JVTk5JTkcgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgogICAgICAgICBpZiAoaWZtZC5pZm1kX2RhdGEuaWZpX2xhc3RjaGFuZ2UudHZfc2VjID09IDAgJiYKICAgICAgICAgICAgIGlmbWQuaWZtZF9kYXRhLmlmaV9sYXN0Y2hhbmdlLnR2X3VzZWMgPT0gMCkgewogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOwpAQCAtMjU3OSw0NSArMjYxMyw0NSBAQAogICAgICAgICAgICAgICAgICAgIHN0YXJ0dGltZS50dl91c2VjKSAvIDEwMDAwKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5PQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX2lieXRlczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX2lwYWNrZXRzOwogICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfaW1jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfaW1jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9pcWRyb3BzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZGF0YS5pZmlfaWVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfbm9wcm90bzsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfb2J5dGVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9vcGFja2V0czsKICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX29tY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfb21jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX3NuZF9kcm9wczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZGF0YS5pZmlfb2Vycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUUUxFTjoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRRTEVOOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9zbmRfbGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVDSUZJQzoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVDSUZJQzoKICAgICAgICAgKnZhcl9sZW4gPSBudWxsT2lkTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBudWxsT2lkOwogICAgIGRlZmF1bHQ6CkBAIC0yNjMwLDEwICsyNjY0LDEyIEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfTkVUX0lGX01JQl9IICovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFVU0VfU1lTQ1RMX0lGTElTVCAqLwogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lQSExQQVBJX0gpICAvKiBXSU4zMiBjeWd3aW4gKi8KICNpbmNsdWRlIDxpcGhscGFwaS5oPgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogV3JpdGVNZXRob2QgICAgIHdyaXRlSWZFbnRyeTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiBsb25nICAgICAgICAgICAgYWRtaW5fc3RhdHVzID0gMDsKIGxvbmcgICAgICAgICAgICBvbGRhZG1pbl9zdGF0dXMgPSAwOwogCkBAIC0yNzEyLDcgKzI3NDgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRk5VTUJFUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZOVU1CRVI6CiAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHNpemVvZihEV09SRCkgPT0gc2l6ZW9mKGxvbmdfcmV0dXJuKSk7CiAgICAgICAgIEdldE51bWJlck9mSW50ZXJmYWNlcygoRFdPUkQgKikgJmxvbmdfcmV0dXJuKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKQEAgLTI3NTAsMTAgKzI3ODYsMTAgQEAKICAgICBpZiAoR2V0SWZFbnRyeSgmaWZSb3cpICE9IE5PX0VSUk9SKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZkluZGV4OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICAgICAgICAgKnZhcl9sZW4gPSBpZlJvdy5kd0Rlc2NyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBpZlJvdy5iRGVzY3I7CiAgICAgY2FzZSBORVRTTk1QX0lGVFlQRToKQEAgLTI3NjIsNjggKzI3OTgsNzAgQEAKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3VHlwZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOgorICAgIGNhc2UgTkVUU05NUF9JRk1UVToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZSb3cuZHdNdHU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQotICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOworICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZlJvdy5kd1NwZWVkOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICAgICAgICAgKnZhcl9sZW4gPSBpZlJvdy5kd1BoeXNBZGRyTGVuOwogICAgICAgICBtZW1jcHkocmV0dXJuX2J1ZiwgaWZSb3cuYlBoeXNBZGRyLCAqdmFyX2xlbik7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHJldHVybl9idWY7Ci0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3QWRtaW5TdGF0dXM7CiAgICAgICAgIGFkbWluX3N0YXR1cyA9IGxvbmdfcmV0dXJuOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlSWZFbnRyeTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPQogICAgICAgICAgICAoTUlCX0lGX09QRVJfU1RBVFVTX09QRVJBVElPTkFMID09IGlmUm93LmR3T3BlclN0YXR1cykgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgogICAgICAgICBsb25nX3JldHVybiA9IDAgLyogWFhYIG5vdCBhIFVOSVggZXBvY2hhbCB0aW1lIGlmUm93LmR3TGFzdENoYW5nZSAqLyA7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5PY3RldHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJbk5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luRGlzY2FyZHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5FcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJblVua25vd25Qcm90b3M7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXRPY3RldHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXRVY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dE5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0RGlzY2FyZHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXRFcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFFMRU46CisgICAgY2FzZSBORVRTTk1QX0lGT1VUUUxFTjoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dFFMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUNJRklDOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUNJRklDOgogICAgICAgICAqdmFyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIG51bGxPaWQ7CiAgICAgZGVmYXVsdDoKQEAgLTI4MzQsNiArMjg3Miw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVJZkVudHJ5KGludCBhY3Rpb24sCiAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTI4NDIsNyArMjg4MSw3IEBACiAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKICAgICBNSUJfSUZST1cgICAgICAgaWZFbnRyeVJvdzsKLSAgICBpZiAoKGNoYXIpIG5hbWVbOV0gIT0gSUZBRE1JTlNUQVRVUykgeworICAgIGlmICgoY2hhcikgbmFtZVs5XSAhPSBORVRTTk1QX0lGQURNSU5TVEFUVVMpIHsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwogICAgIH0KIApAQCAtMjkwNSw0ICsyOTQ0LDUgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiB3cml0ZUlmRW50cnkgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaAppbmRleCA1MWQ0YjFkLi5jMTliN2E2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oCkBAIC04LDcgKzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBjb25maWd1cmUgbWFjcm9zCiAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAvKgogICogY29uZmxpY3RzIHdpdGggdGhlIG5ldyBNRkQgcmV3cml0ZQpAQCAtNjEsMjkgKzYxLDI5IEBACiAKICNlbmRpZiAvKiBVU0lOR19JRl9NSUJfSUZUQUJMRV9NT0RVTEUgKi8KIAotI2RlZmluZSBJRk5VTUJFUiAgICAgICAgMAotI2RlZmluZSBJRklOREVYICAgICAgICAgMQotI2RlZmluZSBJRkRFU0NSICAgICAgICAgMgorI2RlZmluZSBORVRTTk1QX0lGTlVNQkVSICAgICAgICAwCisjZGVmaW5lIE5FVFNOTVBfSUZJTkRFWCAgICAgICAgIDEKKyNkZWZpbmUgTkVUU05NUF9JRkRFU0NSICAgICAgICAgMgogI2RlZmluZSBORVRTTk1QX0lGVFlQRSAgICAgICAgICAzCi0jZGVmaW5lIElGTVRVICAgICAgICAgICA0Ci0jZGVmaW5lIElGU1BFRUQgICAgICAgICA1Ci0jZGVmaW5lIElGUEhZU0FERFJFU1MgICA2Ci0jZGVmaW5lIElGQURNSU5TVEFUVVMgICA3Ci0jZGVmaW5lIElGT1BFUlNUQVRVUyAgICA4Ci0jZGVmaW5lIElGTEFTVENIQU5HRSAgICA5Ci0jZGVmaW5lIElGSU5PQ1RFVFMgICAgICAxMAotI2RlZmluZSBJRklOVUNBU1RQS1RTICAgMTEKLSNkZWZpbmUgSUZJTk5VQ0FTVFBLVFMgIDEyCi0jZGVmaW5lIElGSU5ESVNDQVJEUyAgICAxMwotI2RlZmluZSBJRklORVJST1JTICAgICAgMTQKLSNkZWZpbmUgSUZJTlVOS05PV05QUk9UT1MgMTUKLSNkZWZpbmUgSUZPVVRPQ1RFVFMgICAgIDE2Ci0jZGVmaW5lIElGT1VUVUNBU1RQS1RTICAxNwotI2RlZmluZSBJRk9VVE5VQ0FTVFBLVFMgMTgKLSNkZWZpbmUgSUZPVVRESVNDQVJEUyAgIDE5Ci0jZGVmaW5lIElGT1VURVJST1JTICAgICAyMAotI2RlZmluZSBJRk9VVFFMRU4gICAgICAgMjEKLSNkZWZpbmUgSUZTUEVDSUZJQyAgICAgIDIyCisjZGVmaW5lIE5FVFNOTVBfSUZNVFUgICAgICAgICAgIDQKKyNkZWZpbmUgTkVUU05NUF9JRlNQRUVEICAgICAgICAgNQorI2RlZmluZSBORVRTTk1QX0lGUEhZU0FERFJFU1MgICA2CisjZGVmaW5lIE5FVFNOTVBfSUZBRE1JTlNUQVRVUyAgIDcKKyNkZWZpbmUgTkVUU05NUF9JRk9QRVJTVEFUVVMgICAgOAorI2RlZmluZSBORVRTTk1QX0lGTEFTVENIQU5HRSAgICA5CisjZGVmaW5lIE5FVFNOTVBfSUZJTk9DVEVUUyAgICAgIDEwCisjZGVmaW5lIE5FVFNOTVBfSUZJTlVDQVNUUEtUUyAgIDExCisjZGVmaW5lIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFMgIDEyCisjZGVmaW5lIE5FVFNOTVBfSUZJTkRJU0NBUkRTICAgIDEzCisjZGVmaW5lIE5FVFNOTVBfSUZJTkVSUk9SUyAgICAgIDE0CisjZGVmaW5lIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1MgMTUKKyNkZWZpbmUgTkVUU05NUF9JRk9VVE9DVEVUUyAgICAgMTYKKyNkZWZpbmUgTkVUU05NUF9JRk9VVFVDQVNUUEtUUyAgMTcKKyNkZWZpbmUgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFMgMTgKKyNkZWZpbmUgTkVUU05NUF9JRk9VVERJU0NBUkRTICAgMTkKKyNkZWZpbmUgTkVUU05NUF9JRk9VVEVSUk9SUyAgICAgMjAKKyNkZWZpbmUgTkVUU05NUF9JRk9VVFFMRU4gICAgICAgMjEKKyNkZWZpbmUgTkVUU05NUF9JRlNQRUNJRklDICAgICAgMjIKIAogI2lmZGVmIGxpbnV4CiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwLmMKaW5kZXggNjcxN2UyZS4uZjM5ZDMyMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcC5jCkBAIC0xOSwxMiArMTksMTIgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgiCiAjaW5jbHVkZSAiaXAuaCIKICNpbmNsdWRlICJpcEFkZHIuaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZuZGVmIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZGVmaW5lIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCTUKQEAgLTMzLDcgKzMzLDEwIEBACiAjZGVmaW5lIElQX1NUQVRTX0NBQ0hFX1RJTUVPVVQJTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNpZmRlZiBGSVJTVF9QUk9UT0NPTAogcGVyZnN0YXRfcHJvdG9jb2xfdCBwc19wcm90bzsKQEAgLTY0LDQzICs2Nyw2OSBAQAogICogaW5mb3JtYXRpb24gYXQgCiAgKi8KIHN0cnVjdCB2YXJpYWJsZTEgaXBhZGRyX3ZhcmlhYmxlc1tdID0gewotICAgIHtJUEFEQUREUiwgICAgICBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwQWRkckVudHJ5LCAxLCB7MX19LAotICAgIHtJUEFESUZJTkRFWCwgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2lwQWRkckVudHJ5LCAxLCB7Mn19LAorICAgIHtJUEFEQUREUiwgICAgICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwQWRkckVudHJ5LCAxLCB7MX19LAorICAgIHtJUEFESUZJTkRFWCwgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwQWRkckVudHJ5LCAxLCB7Mn19LAogI2lmbmRlZiBzdW5WMwotICAgIHtJUEFETkVUTUFTSywgICBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwQWRkckVudHJ5LCAxLCB7M319LAorICAgIHtJUEFETkVUTUFTSywgICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwQWRkckVudHJ5LCAxLCB7M319LAogI2VuZGlmCi0gICAge0lQQURCQ0FTVEFERFIsIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfaXBBZGRyRW50cnksIDEsIHs0fX0sCi0gICAge0lQQURSRUFTTU1BWCwgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfaXBBZGRyRW50cnksIDEsIHs1fX0KKyAgICB7SVBBREJDQVNUQUREUiwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcEFkZHJFbnRyeSwgMSwgezR9fSwKKyAgICB7SVBBRFJFQVNNTUFYLCAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcEFkZHJFbnRyeSwgMSwgezV9fQogfTsKIAogc3RydWN0IHZhcmlhYmxlMSBpcHJvdXRlX3ZhcmlhYmxlc1tdID0gewotICAgIHtJUFJPVVRFREVTVCwgICAgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MX19LAotICAgIHtJUFJPVVRFSUZJTkRFWCwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7Mn19LAotICAgIHtJUFJPVVRFTUVUUklDMSwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7M319LAotICAgIHtJUFJPVVRFTUVUUklDMiwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7NH19LAotICAgIHtJUFJPVVRFTUVUUklDMywgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7NX19LAotICAgIHtJUFJPVVRFTUVUUklDNCwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7Nn19LAotICAgIHtJUFJPVVRFTkVYVEhPUCwgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7N319LAotICAgIHtJUFJPVVRFVFlQRSwgICAgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7OH19LAotICAgIHtJUFJPVVRFUFJPVE8sICAgQVNOX0lOVEVHRVIsICAgUk9OTFksICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7OX19LAotICAgIHtJUFJPVVRFQUdFLCAgICAgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTB9fSwKLSAgICB7SVBST1VURU1BU0ssICAgIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezExfX0sCi0gICAge0lQUk9VVEVNRVRSSUM1LCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMn19LAotICAgIHtJUFJPVVRFSU5GTywgICAgQVNOX09CSkVDVF9JRCwgUk9OTFksICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTN9fQorICAgIHtJUFJPVVRFREVTVCwgICAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MX19LAorICAgIHtJUFJPVVRFSUZJTkRFWCwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7Mn19LAorICAgIHtJUFJPVVRFTUVUUklDMSwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7M319LAorICAgIHtJUFJPVVRFTUVUUklDMiwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7NH19LAorICAgIHtJUFJPVVRFTUVUUklDMywgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7NX19LAorICAgIHtJUFJPVVRFTUVUUklDNCwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7Nn19LAorICAgIHtJUFJPVVRFTkVYVEhPUCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7N319LAorICAgIHtJUFJPVVRFVFlQRSwgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7OH19LAorICAgIHtJUFJPVVRFUFJPVE8sICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs5fX0sCisgICAge0lQUk9VVEVBR0UsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMH19LAorICAgIHtJUFJPVVRFTUFTSywgICAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTF9fSwKKyAgICB7SVBST1VURU1FVFJJQzUsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEyfX0sCisgICAge0lQUk9VVEVJTkZPLCAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEzfX0KIH07CiAKIHN0cnVjdCB2YXJpYWJsZTEgaXBtZWRpYV92YXJpYWJsZXNbXSA9IHsKICNpZmRlZiBVU0lOR19NSUJJSV9BVF9NT0RVTEUKICNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotICAgIHtJUE1FRElBSUZJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2F0RW50cnksIDEsIHsxfX0sCi0gICAge0lQTUVESUFQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKLSAgICB7SVBNRURJQU5FVEFERFJFU1MsICBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9hdEVudHJ5LCAxLCB7M319LAotICAgIHtJUE1FRElBVFlQRSwgICAgICAgIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2F0RW50cnksIDEsIHs0fX0KKyAgICB7SVBNRURJQUlGSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7MX19LAorICAgIHtJUE1FRElBUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsyfX0sCisgICAge0lQTUVESUFORVRBRERSRVNTLCAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezN9fSwKKyAgICB7SVBNRURJQVRZUEUsICAgICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7NH19CiAjZWxzZQotICAgIHtJUE1FRElBSUZJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezF9fSwKLSAgICB7SVBNRURJQVBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2F0RW50cnksIDEsIHsyfX0sCi0gICAge0lQTUVESUFORVRBRERSRVNTLCAgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7M319LAotICAgIHtJUE1FRElBVFlQRSwgICAgICAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezR9fQorICAgIHtJUE1FRElBSUZJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezF9fSwKKyAgICB7SVBNRURJQVBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsyfX0sCisgICAge0lQTUVESUFORVRBRERSRVNTLCAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7M319LAorICAgIHtJUE1FRElBVFlQRSwgICAgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezR9fQogI2VuZGlmCiAjZW5kaWYKIH07CkBAIC0xMjIsNiArMTUxLDcgQEAKIGluaXRfaXAodm9pZCkKIHsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworICAgIGludCByYzsKIAogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IGFzIGEgZ3JvdXAgb2Ygc2NhbGFycy4uLgpAQCAtMTI5LDcgKzE1OSw5IEBACiAgICAgREVCVUdNU0dUTCgoIm1pYklJL2lwIiwgIkluaXRpYWxpc2luZyBJUCBncm91cFxuIikpOwogICAgIHJlZ2luZm8gPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaXAiLCBpcF9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwX29pZCwgT0lEX0xFTkdUSChpcF9vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mbywgSVBGT1JXQVJESU5HLCBJUFJPVVRFRElTQ0FSRFMpOworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mbywgSVBGT1JXQVJESU5HLCBJUFJPVVRFRElTQ0FSRFMpOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKIAogICAgIC8qCiAgICAgICogLi4uLiB3aXRoIGEgbG9jYWwgY2FjaGUKQEAgLTIwMCwxMiArMjMyLDEyIEBACiAjZW5kaWYKIAogI2lmZGVmIE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMCi0jZGVmaW5lIElQX1NUQVRfU1RSVUNUVVJFICAgICAgc3RydWN0IGlwX21pYgorI2RlZmluZSBJUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaXBfbWliCiAjZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JUFNUQVQKICN1bmRlZiBJUF9OU1RBVFMKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2RlZmluZSBJUF9TVEFUX1NUUlVDVFVSRSBNSUJfSVBTVEFUUwogbG9uZyAgICAgICAgICAgIGlwRm9yd2FyZGluZzsKQEAgLTM3OCw3ICs0MTAsNyBAQAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2ZvcndhcmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVBJTlVOS05PV05QUk9UT1M6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUFJPVE8KKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUFJPVE8KICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19ub3Byb3RvOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC0zODYsNyArNDE4LDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQSU5ESVNDQVJEUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR0RST1BQRUQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdEUk9QUEVECiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQ7ICAgLyogPz8gKi8KICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtMzk0LDcgKzQyNiw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUElOREVMSVZFUlM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfREVMSVZFUkVECiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZGVsaXZlcmVkICYgMHhmZmZmZmZmZjsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDAyLDcgKzQzNCw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUE9VVFJFUVVFU1RTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTE9DQUxPVVQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19sb2NhbG91dCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQxMCw3ICs0NDIsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBPVVRESVNDQVJEUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09EUk9QUEVECiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfb2Ryb3BwZWQ7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQzMyw3ICs0NjUsNyBAQAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2ZyYWdtZW50czsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJUFJFQVNNT0tTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfUkVBU1NFTUJMRUQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19yZWFzc2VtYmxlZDsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDQ0LDcgKzQ3Niw3IEBACiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQgKyBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIElQRlJBR09LUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR01FTlRFRAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR01FTlRFRAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2ZyYWdtZW50czsKICAgICAgICAgYnJlYWs7CiAjZWxzZSAgICAgICAgICAgIC8qIFhYWCAqLwpAQCAtNDUzLDcgKzQ4NSw3IEBACiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJUEZSQUdGQUlMUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZSQUcKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGUkFHCiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfY2FudGZyYWc7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQ2MSw3ICs0OTMsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBGUkFHQ1JFQVRFUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUworI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0ZSQUdNRU5UUwogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX29mcmFnbWVudHM7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQ2OSw3ICs1MDEsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBST1VURURJU0NBUkRTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1JPVVRFCisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1JPVVRFCiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfbm9yb3V0ZTsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNjQ1LDYgKzY3Nyw3IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKIAkJLyogWFhYIC0gV2luZG93cyBjdXJyZW50bHkgc3VwcG9ydHMgc2V0dGluZyB0aGlzICovCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKQEAgLTY1NSw2ICs2ODgsNyBAQAogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2lwOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2lwOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpAQCAtODA2LDkgKzg0MCw5IEBACiAgICAgcmV0X3ZhbHVlID0gbmV0YnNkX3JlYWRfaXBfc3RhdCgmaXBzdGF0KTsKIAogICAgIGlmICggcmV0X3ZhbHVlIDwgMCkgewotICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pcCIsICJGYWlsZWQgdG8gbG9hZCBJUCBHcm91cCAobmV0YnNkKVxuIikpOworCURFQlVHTVNHVEwoKCJtaWJJSS9pcCIsICJGYWlsZWQgdG8gbG9hZCBJUCBHcm91cCAobmV0YnNkKVxuIikpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2lwIiwgIkxvYWRlZCBJUCBHcm91cCAobmV0YnNkKVxuIikpOworCURFQlVHTVNHVEwoKCJtaWJJSS9pcCIsICJMb2FkZWQgSVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldF92YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMKaW5kZXggZjU5YTYzYS4uYTRkNTc3ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMKQEAgLTE1LDggKzE1LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCkBAIC0zOSw5ICs0MCw2IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TWVNDVExfSAogI2lmZGVmIF9JX0RFRklORURfS0VSTkVMCiAjdW5kZWYgX0tFUk5FTApAQCAtMTE4LDEyICsxMTYsMTMgQEAKIAogI2luY2x1ZGUgImlwLmgiCiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmZGVmIGN5Z3dpbgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfbGVnYWN5KQorCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCkBAIC0yMjEsNyArMjIwLDcgQEAKICNpZiAhZGVmaW5lZChmcmVlYnNkMikgJiYgIWRlZmluZWQoaHB1eDExKSAmJiAhZGVmaW5lZChsaW51eCkKICAgICAgICAgaWYgKEludGVyZmFjZV9TY2FuX05leHQoJmludGVyZmFjZSwgTlVMTCwgJmlmbmV0LCAmaW5faWZhZGRyKSA9PSAwKQogICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVAorI2lmZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUCiAgICAgICAgIGlmIChpZm5ldC5pZl9hZGRybGlzdCA9PSAwKQogICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAvKiBObyBhZGRyZXNzIGZvdW5kIGZvciBpbnRlcmZhY2UgKi8KICNlbmRpZgpAQCAtMjkwLDcgKzI4OSw3IEBACiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIGxvd2VzdCwgMTQgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IDE0OwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXR1cm4pOwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBJUEFEQUREUjoKQEAgLTk2MCw3ICs5NTksNyBAQAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgJiYgSVBDVExfU1RBVFMgKi8KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKSAgLyogV0lOMzIgY3lnd2luICovCiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KIHVfY2hhciAgICAgICAgICoKIHZhcl9pcEFkZHJFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaAppbmRleCA1MjZhMDYwLi5lYzY5Y2YzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX01JQkdST1VQX0lQQUREUl9ICiAjZGVmaW5lIF9NSUJHUk9VUF9JUEFERFJfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUykKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2lwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMKaW5kZXggMDBkN2QxNy4uODYwOWJiMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlICJyb3V0ZV9oZWFkZXJzLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMTMsNiArMTQsMTEgQEAKIAogI2luY2x1ZGUgInZhcl9yb3V0ZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShnZXRfcm91dGVzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2dldF9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorCiBzdGF0aWMgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqdW5kb1N0b3JhZ2U7CiAKIHN0cnVjdCB1bmRvSW5mbyB7CkBAIC03Myw3ICs3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAKICAgICAvKiogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgICAgb3B0aW1pemVzIHJldHJpdmFsLiAqLworICAgICAgICBvcHRpbWl6ZXMgcmV0cmlldmFsLiAqLwogICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSAxOwogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSAxNjsKIApAQCAtOTksNyArMTA1LDcgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgiaW5pdGlhbGl6ZV90YWJsZV9pcENpZHJSb3V0ZVRhYmxlIiwKICAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgdGFibGUgaXBDaWRyUm91dGVUYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIGlwQ2lkclJvdXRlVGFibGUgbW9kdWxlICovCkBAIC0yNjAsMTIgKzI2NiwxMCBAQAogCiAgICAgdm9pZCAgICAgICAgICAgKmRhdGFfY29udGV4dDsKIAotICAgIG9pZCAgICAgICAgICAgICpzdWZmaXg7Ci0gICAgc2l6ZV90ICAgICAgICAgIHN1ZmZpeF9sZW47Ci0KICAgICAvKiogY29sdW1uIGFuZCByb3cgaW5kZXggZW5jb2RlZCBwb3J0aW9uICovCi0gICAgc3VmZml4ID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKLSAgICBzdWZmaXhfbGVuID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLQorICAgIGNvbnN0IG9pZCAqIGNvbnN0IHN1ZmZpeCA9CisgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7CisgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCiAgICAgICAgIChyZWdpbmZvLT5yb290b2lkX2xlbiArIDEpOwogCiAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMKaW5kZXggNGUxODY4Yi4uOTlkNTBlOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYwpAQCAtNCwxMCArNCwxNCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCisjaWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMKKyNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTEzNywxMCArMTQxLDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCiAjaW5jbHVkZSAia2VybmVsLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImlwdjYuaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGxpbnV4X3JlYWRfaXA2X3N0YXQpCisKICNpZiBkZWZpbmVkKG5ldGJzZDEpICYmICFkZWZpbmVkKG9wZW5ic2Q0KQogI2RlZmluZSBpbnBfbHBvcnQgaW42cF9scG9ydAogI2RlZmluZSBpbnBfZnBvcnQgaW42cF9mcG9ydApAQCAtMTYxLDEwMSArMTY2LDEzMCBAQAogI2VuZGlmCiAKIHN0cnVjdCB2YXJpYWJsZTMgaXB2Nl92YXJpYWJsZXNbXSA9IHsKLSAgICB7SVBWNkZPUldBUkRJTkcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwdjYsIDEsIHsxfX0sCi0gICAge0lQVjZERUZBVUxUSE9QTElNSVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwdjYsIDEsIHsyfX0sCi0gICAge0lQVjZJTlRFUkZBQ0VTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaXB2NiwgMSwgezN9fSwKLSAgICB7SVBWNklGVEJMTEFTVENIRywgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9pcHY2LCAxLCB7NH19LAorICAgIHtJUFY2Rk9SV0FSRElORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NiwgMSwgezF9fSwKKyAgICB7SVBWNkRFRkFVTFRIT1BMSU1JVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NiwgMSwgezJ9fSwKKyAgICB7SVBWNklOVEVSRkFDRVMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2LCAxLCB7M319LAorICAgIHtJUFY2SUZUQkxMQVNUQ0hHLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjYsIDEsIHs0fX0sCiAKLSAgICB7SVBWNklGREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMn19LAotICAgIHtJUFY2SUZMT1dMQVlFUiwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAzfX0sCi0gICAge0lQVjZJRkVGRkVDVE1UVSwgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDR9fSwKLSAgICB7SVBWNklGUkVBU01NQVhTSVpFLCBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNX19LAorICAgIHtJUFY2SUZERVNDUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAyfX0sCisgICAge0lQVjZJRkxPV0xBWUVSLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDN9fSwKKyAgICB7SVBWNklGRUZGRUNUTVRVLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNH19LAorICAgIHtJUFY2SUZSRUFTTU1BWFNJWkUsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA1fX0sCiAKLSAgICB7SVBWNklGVE9LRU4sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNn19LAotICAgIHtJUFY2SUZUT0tFTkxFTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgN319LAotICAgIHtJUFY2SUZQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA4fX0sCi0gICAge0lQVjZJRkFETVNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgOX19LAotICAgIHtJUFY2SUZPUEVSU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAxMH19LAotICAgIHtJUFY2SUZMQVNUQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDExfX0sCisgICAge0lQVjZJRlRPS0VOLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDZ9fSwKKyAgICB7SVBWNklGVE9LRU5MRU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDd9fSwKKyAgICB7SVBWNklGUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgOH19LAorICAgIHtJUFY2SUZBRE1TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDl9fSwKKyAgICB7SVBWNklGT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMTB9fSwKKyAgICB7SVBWNklGTEFTVENIQU5HRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAxMX19LAogCi0gICAge0lQVjZJRlNUQVRTSU5SQ1ZTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxfX0sCi0gICAge0lQVjZJRlNUQVRTSU5IRFJFUlJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAyfX0sCi0gICAge0lQVjZJRlNUQVRTVE9PQklHRVJSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgM319LAotICAgIHtJUFY2SUZTVEFUU0lOTk9ST1VURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDR9fSwKLSAgICB7SVBWNklGU1RBVFNJTkFERFJFUlJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA1fX0sCi0gICAge0lQVjZJRlNUQVRTSU5VTktOT1dQUk9UUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgNn19LAotICAgIHtJUFY2SUZTVEFUU0lOVFJVTkNBVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDd9fSwKLSAgICB7SVBWNklGU1RBVFNJTkRJU0NBUkRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA4fX0sCi0gICAge0lQVjZJRlNUQVRTSU5ERUxJVkVSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgOX19LAotICAgIHtJUFY2SUZTVEFUU09VVEZPUldEQVRBUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTB9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRSRVFTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxMX19LAotICAgIHtJUFY2SUZTVEFUU09VVERJU0NBUkRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxMn19LAotICAgIHtJUFY2SUZTVEFUU09VVEZSQUdPS1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDEzfX0sCi0gICAge0lQVjZJRlNUQVRTT1VURlJBR0ZBSUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxNH19LAotICAgIHtJUFY2SUZTVEFUU09VVEZSQUdDUkVBVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE1fX0sCi0gICAge0lQVjZJRlNUQVRTT1VUUkVBU01SRVFTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxNn19LAotICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNT0tTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxN319LAotICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNRkFJTFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE4fX0sCi0gICAge0lQVjZJRlNUQVRTSU5NQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE5fX0sCi0gICAge0lQVjZJRlNUQVRTT1VUTUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAyMH19LAorICAgIHtJUFY2SUZTVEFUU0lOUkNWUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMX19LAorICAgIHtJUFY2SUZTVEFUU0lOSERSRVJSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMn19LAorICAgIHtJUFY2SUZTVEFUU1RPT0JJR0VSUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDN9fSwKKyAgICB7SVBWNklGU1RBVFNJTk5PUk9VVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA0fX0sCisgICAge0lQVjZJRlNUQVRTSU5BRERSRVJSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgNX19LAorICAgIHtJUFY2SUZTVEFUU0lOVU5LTk9XUFJPVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDZ9fSwKKyAgICB7SVBWNklGU1RBVFNJTlRSVU5DQVRQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA3fX0sCisgICAge0lQVjZJRlNUQVRTSU5ESVNDQVJEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgOH19LAorICAgIHtJUFY2SUZTVEFUU0lOREVMSVZFUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDl9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRGT1JXREFUQVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDEwfX0sCisgICAge0lQVjZJRlNUQVRTT1VUUkVRUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTF9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRESVNDQVJEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTJ9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRGUkFHT0tTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxM319LAorICAgIHtJUFY2SUZTVEFUU09VVEZSQUdGQUlMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTR9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRGUkFHQ1JFQVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxNX19LAorICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNUkVRUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTZ9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRSRUFTTU9LUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTd9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRSRUFTTUZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxOH19LAorICAgIHtJUFY2SUZTVEFUU0lOTUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxOX19LAorICAgIHtJUFY2SUZTVEFUU09VVE1DQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMjB9fSwKIAogI2lmIDAKLSAgICB7SVBWNkFERFJQUkVGSVhPTkxJTktGTEcsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywKLSAgICAgezcsIDEsIDN9fSwKLSAgICB7SVBWNkFERFJQUkVGSVhBVVRPTk9NT1VTRkxBRywgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLAotICAgICB7NywgMSwgNH19LAotICAgIHtJUFY2QUREUlBSRUZJWEFEVlBSRUZFUkxJRkUsIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywKLSAgICAgezcsIDEsIDV9fSwKLSAgICB7SVBWNkFERFJQUkVGSVhWQUxJRExJRkUsIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywKLSAgICAgezcsIDEsIDZ9fSwKKyAgICB7SVBWNkFERFJQUkVGSVhPTkxJTktGTEcsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezcsIDEsIDN9fSwKKyAgICB7SVBWNkFERFJQUkVGSVhBVVRPTk9NT1VTRkxBRywgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7NywgMSwgNH19LAorICAgIHtJUFY2QUREUlBSRUZJWEFEVlBSRUZFUkxJRkUsIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezcsIDEsIDV9fSwKKyAgICB7SVBWNkFERFJQUkVGSVhWQUxJRExJRkUsIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezcsIDEsIDZ9fSwKIAotICAgIHtJUFY2QUREUlBGWExFTiwgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgMn19LAotICAgIHtJUFY2QUREUlRZUEUsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDN9fSwKLSAgICB7SVBWNkFERFJBTllDQVNURkxBRywgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgNH19LAotICAgIHtJUFY2QUREUlNUQVRVUywgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgNX19LAorICAgIHtJUFY2QUREUlBGWExFTiwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgMn19LAorICAgIHtJUFY2QUREUlRZUEUsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDN9fSwKKyAgICB7SVBWNkFERFJBTllDQVNURkxBRywgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgNH19LAorICAgIHtJUFY2QUREUlNUQVRVUywgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgNX19LAogCi0gICAge0lQVjZST1VURUlGSU5ERVgsIElwVjZJRklOREVYLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDR9fSwKLSAgICB7SVBWNlJPVVRFTkVYVEhPUCwgSXBWNkFERFJFU1MsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgNX19LAotICAgIHtJUFY2Uk9VVEVUWVBFLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDZ9fSwKLSAgICB7SVBWNlJPVVRFUFJPVE9DT0wsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgN319LAotICAgIHtJUFY2Uk9VVEVQT0xJQ1ksIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgOH19LAotICAgIHtJUFY2Uk9VVEVBR0UsIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgOX19LAotICAgIHtJUFY2Uk9VVEVORVhUSE9QUkRJLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDEwfX0sCi0gICAge0lQVjZST1VURU1FVFJJQywgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCAxMX19LAotICAgIHtJUFY2Uk9VVEVXRUlHSFQsIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgMTJ9fSwKLSAgICB7SVBWNlJPVVRFSU5GTywgT0JKSUQsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTN9fSwKLSAgICB7SVBWNlJPVVRFVkFMSUQsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTR9fSwKKyAgICB7SVBWNlJPVVRFSUZJTkRFWCwgSXBWNklGSU5ERVgsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgNH19LAorICAgIHtJUFY2Uk9VVEVORVhUSE9QLCBJcFY2QUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA1fX0sCisgICAge0lQVjZST1VURVRZUEUsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgNn19LAorICAgIHtJUFY2Uk9VVEVQUk9UT0NPTCwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA3fX0sCisgICAge0lQVjZST1VURVBPTElDWSwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA4fX0sCisgICAge0lQVjZST1VURUFHRSwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA5fX0sCisgICAge0lQVjZST1VURU5FWFRIT1BSREksIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTB9fSwKKyAgICB7SVBWNlJPVVRFTUVUUklDLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDExfX0sCisgICAge0lQVjZST1VURVdFSUdIVCwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxMn19LAorICAgIHtJUFY2Uk9VVEVJTkZPLCBPQkpJRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxM319LAorICAgIHtJUFY2Uk9VVEVWQUxJRCwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxNH19LAogCi0gICAge0lQVjZORVRUT01FRElBUEhZQUREUiwgU1RSSU5HLCBST05MWSwgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDJ9fSwKLSAgICB7SVBWNk5FVFRPTUVESUFUWVBFLCBJTlRFR0VSLCBST05MWSwgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDN9fSwKLSAgICB7SVBWNk5FVFRPTUVESUFTVEFURSwgSU5URUdFUiwgUk9OTFksIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCA0fX0sCi0gICAge0lQVjZORVRUT01FRElBTEFTVFVQREFURSwgVElNRVRJQ0tTLCBST05MWSwgdmFyX25kcEVudHJ5LCAzLAotICAgICB7MTIsIDEsIDV9fSwKLSAgICB7SVBWNk5FVFRPTUVESUFWQUxJRCwgSU5URUdFUiwgUk9OTFksIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCA2fX0sCisgICAge0lQVjZORVRUT01FRElBUEhZQUREUiwgU1RSSU5HLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDJ9fSwKKyAgICB7SVBWNk5FVFRPTUVESUFUWVBFLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDN9fSwKKyAgICB7SVBWNk5FVFRPTUVESUFTVEFURSwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCA0fX0sCisgICAge0lQVjZORVRUT01FRElBTEFTVFVQREFURSwgVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDV9fSwKKyAgICB7SVBWNk5FVFRPTUVESUFWQUxJRCwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCA2fX0sCiAjZW5kaWYKIH07CiBvaWQgICAgICAgICAgICAgaXB2Nl92YXJpYWJsZXNfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDU1LCAxIH07CkBAIC0yNjUsNzQgKzI5OSw3NCBAQAogICAgIGNvbmZpZ19hZGRfbWliKElQVjYgLSBNSUIpCiAjZW5kaWYKICAgICAgc3RydWN0IHZhcmlhYmxlMyBpcHY2aWNtcF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5NU0csIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElORVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMn19LAotICAgICAgICAge0lQVjZJRklDTVBJTkRTVFVOUkNIUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDN9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5BRE1QUk9IUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDR9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5USU1FWENEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDV9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5QQVJNUFJPQlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA2fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOUEtUVE9PQklHUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDd9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5FQ0hPUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDh9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5FQ0hPUkVQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDl9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5SVFJTTElDSVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTB9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5SVFJBRFZTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTF9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5OQlJTTElDSVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTJ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5OQlJBRFZTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTN9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5SRURJUkVDVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxNH19LAotICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUUVSWVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxNX19LAotICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUlNQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE2fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVSRURDUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE3fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVE1TRywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE4fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE5fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVERTVFVOUkNIUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDIwfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEFETVBST0hTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjF9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUVElNRVhDRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyMn19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRQQVJNUFJPQlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyM319LAotICAgICAgICAge0lQVjZJRklDTVBPVVRQS1RUT09CSUdTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjR9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VURUNIT1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyNX19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRFQ0hPUkVQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI2fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFJUUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyN319LAotICAgICAgICAge0lQVjZJRklDTVBPVVRSVFJBRFZTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjh9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUTkJSU0xJQ0lUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI5fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVE5CUkFEVlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzMH19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRSRURJUkVDVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzMX19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVFFUllTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMzJ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVSU1BTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMzN9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVSRURDUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDM0fX0KKyAgICAgICAgIHtJUFY2SUZJQ01QSU5NU0csIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAgICAgICB7SVBWNklGSUNNUElORVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMn19LAorICAgICAgICAge0lQVjZJRklDTVBJTkRTVFVOUkNIUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5BRE1QUk9IUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5USU1FWENEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDV9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5QQVJNUFJPQlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA2fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOUEtUVE9PQklHUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDd9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5FQ0hPUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDh9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5FQ0hPUkVQUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDl9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5SVFJTTElDSVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTB9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5SVFJBRFZTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTF9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5OQlJTTElDSVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTJ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5OQlJBRFZTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTN9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5SRURJUkVDVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxNH19LAorICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUUVSWVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxNX19LAorICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUlNQUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE2fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVSRURDUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE3fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVE1TRywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE4fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE5fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVERTVFVOUkNIUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDIwfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEFETVBST0hTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjF9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUVElNRVhDRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyMn19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRQQVJNUFJPQlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyM319LAorICAgICAgICAge0lQVjZJRklDTVBPVVRQS1RUT09CSUdTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjR9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VURUNIT1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyNX19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRFQ0hPUkVQUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI2fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFJUUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyN319LAorICAgICAgICAge0lQVjZJRklDTVBPVVRSVFJBRFZTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjh9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUTkJSU0xJQ0lUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI5fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVE5CUkFEVlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzMH19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRSRURJUkVDVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzMX19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVFFUllTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMzJ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVSU1BTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMzN9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVSRURDUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDM0fX0KICAgICAgfTsKIG9pZCAgICAgICAgICAgICBpcHY2aWNtcF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDU2LCAxIH07CiAjaWYgMApAQCAtMzQwLDcgKzM3NCw4IEBACiAgICAgY29uZmlnX2FkZF9taWIoSVBWNiAtIElDTVAgLSBNSUIpCiAjZW5kaWYKICAgICAgc3RydWN0IHZhcmlhYmxlMiBpcHY2dWRwX3ZhcmlhYmxlc1tdID0gewotICAgICAgICAge0lQVjZVRFBJRklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl91ZHA2LCAyLCB7MSwgM319CisgICAgICAgICB7SVBWNlVEUElGSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfdWRwNiwgMiwgezEsIDN9fQogICAgICB9Owogb2lkICAgICAgICAgICAgIGlwdjZ1ZHBfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA3LCA2IH07CiAjaWYgMApAQCAtMzQ4LDE1ICszODMsMTcgQEAKICAgICBjb25maWdfYWRkX21pYihJUFY2IC0gVURQIC0gTUlCKQogI2VuZGlmCiAgICAgIHN0cnVjdCB2YXJpYWJsZTIgaXB2NnRjcF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAgIHtJUFY2VENQQ09OTlNUQVRFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90Y3A2LCAyLCB7MSwgNn19LAorICAgICAgICAge0lQVjZUQ1BDT05OU1RBVEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfdGNwNiwgMiwgezEsIDZ9fSwKICAgICAgfTsKIG9pZCAgICAgICAgICAgICBpcHY2dGNwX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNiwgMTYgfTsKICNpZiAwCiBjb25maWdfbG9hZF9taWIoMS4zIC42IC4xIC4zIC44NiAuMSwgNywgaXB2NnRjcF92YXJpYWJsZXMpCiAgICAgY29uZmlnX2FkZF9taWIoSVBWNiAtIFRDUCAtIE1JQikKICNlbmRpZgotICAgICB2b2lkCi0gICAgICAgICAgICAgICAgICAgICBpbml0X2lwdjYoKQorCit2b2lkCitpbml0X2lwdjYodm9pZCkKIHsKICAgICAvKgogICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIApAQCAtNDAwLDcgKzQzNyw3IEBACiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOwogfQpAQCAtNDQwLDcgKzQ3Nyw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTkzMSw3ICs5NjgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICNlbmRpZgotI2lmZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKKyNpZmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQwogICAgICAgICAgICAgaWYgKCFnb3RhbnN3ZXIpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQgICAgaWZuZXQ7CiAKQEAgLTE5NjAsNyArMTk5Nyw3IEBACiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbGludXhfcmVhZF9pcDZfc3RhdChzdHJ1Y3QgaXA2X21pYiAqaXA2c3RhdCkKIHsKICAgICBpZiAoIWlwNnN0YXQpCkBAIC0yMDQ4LDcgKzIwODUsNyBAQAogICAgICAgICBwID0gaWZfZ2V0bmFtZShpbnRlcmZhY2UpOwogICAgICAgICBpZiAocCkgewogICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIHA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJUFY2SUZMT1dMQVlFUjoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKaW5kZXggYmI2Zjg2Ny4uOTkzMTRkZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKQEAgLTQsMTEgKzQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKQEAgLTE2LDQzICsxNSwxMTMgQEAKICNpZiBIQVZFX1NZU19QQVJBTV9ICiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgogCiAjaW5jbHVkZSAia2VybmVsX2xpbnV4LmgiCiAKIHN0cnVjdCBpcF9taWIgICBjYWNoZWRfaXBfbWliOworc3RydWN0IGlwNl9taWIgICBjYWNoZWRfaXA2X21pYjsKIHN0cnVjdCBpY21wX21pYiBjYWNoZWRfaWNtcF9taWI7CitzdHJ1Y3QgaWNtcDZfbWliIGNhY2hlZF9pY21wNl9taWI7CitzdHJ1Y3QgaWNtcDRfbXNnX21pYiBjYWNoZWRfaWNtcDRfbXNnX21pYjsKIHN0cnVjdCB0Y3BfbWliICBjYWNoZWRfdGNwX21pYjsKIHN0cnVjdCB1ZHBfbWliICBjYWNoZWRfdWRwX21pYjsKK3N0cnVjdCB1ZHA2X21pYiAgY2FjaGVkX3VkcDZfbWliOwogCiAjZGVmaW5lIElQX1NUQVRTX0xJTkUJIklwOiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiCiAjZGVmaW5lIElDTVBfU1RBVFNfTElORQkiSWNtcDogJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfTElORSAiSWNtcE1zZzogIgogI2RlZmluZSBUQ1BfU1RBVFNfTElORQkiVGNwOiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1IgogI2RlZmluZSBVRFBfU1RBVFNfTElORQkiVWRwOiAlbHUgJWx1ICVsdSAlbHUiCisjZGVmaW5lIElQNl9TVEFUU19MSU5FICAgIklwNiIKKyNkZWZpbmUgSUNNUDZfU1RBVFNfTElORSAiSWNtcDYiCiAjZGVmaW5lIFVEUDZfU1RBVFNfTElORSAiVWRwNiIKIAogI2RlZmluZSBJUF9TVEFUU19QUkVGSVhfTEVOCTQKICNkZWZpbmUgSUNNUF9TVEFUU19QUkVGSVhfTEVOCTYKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfUFJFRklYX0xFTiA5CiAjZGVmaW5lIFRDUF9TVEFUU19QUkVGSVhfTEVOCTUKICNkZWZpbmUgVURQX1NUQVRTX1BSRUZJWF9MRU4JNQorI2RlZmluZSBJUDZfU1RBVFNfUFJFRklYX0xFTgkzCisjZGVmaW5lIElDTVA2X1NUQVRTX1BSRUZJWF9MRU4JNQogI2RlZmluZSBVRFA2X1NUQVRTX1BSRUZJWF9MRU4gICA0CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsaW51eF9pcDZfc3RhdF9hbGwsIGxpYm5ldHNubXBtaWJzKQogCi1pbnQKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsaW51eF9yZWFkX2lwNl9zdGF0LCBsaW51eF9pcDZfc3RhdF9hbGwpCisKK3N0YXRpYyBpbnQKK2RlY29kZV9pY21wX21zZyhjaGFyICpsaW5lLCBjaGFyICpkYXRhLCBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqbXNnKQoreworICAgIGNoYXIgKnRva2VuLCAqc2F2ZXB0ciwgKmxpbmVwdHIsICpzYXZlcHRyMSwgKmRhdGFwdHIsICpkZWxpbSA9IE5VTEw7CisgICAgY2hhciBsaW5lX2NweVsxMDI0XTsKKyAgICBjaGFyIGRhdGFfY3B5WzEwMjRdOworICAgIGxvbmcgaW5kZXg7CisKKyAgICBpZihkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qCisgICAgICogU2luY2Ugd2UgYXJlIHVzaW5nIHN0cnRvaywgdGhlcmUgaXMgYSBwb3NzaWJsaXR5IG9mIHRoZSBvcmdpbmFsIGRhdGEKKyAgICAgKiBnZXR0aW5nIG1vZGlmaWVkLiBTbyB3ZSB0YWtlIGEgbG9jYWwgY29weSBmb3IgdGhpcyBwdXJwb3NlIGV2ZW4gdGhvdWdoCisgICAgICogaXRzIGV4cGVuc2l2ZS4KKyAgICAgKi8KKyAgICBzdHJsY3B5KGxpbmVfY3B5LCBsaW5lLCBzaXplb2YobGluZV9jcHkpKTsKKyAgICBzdHJsY3B5KGRhdGFfY3B5LCBkYXRhLCBzaXplb2YoZGF0YV9jcHkpKTsKKworICAgIGxpbmVwdHIgPSBsaW5lX2NweTsKKyAgICBkYXRhcHRyID0gZGF0YV9jcHk7CisgICAgc2F2ZXB0cjEgPSBOVUxMOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmKE5VTEwgPT0gKHRva2VuID0gc3RydG9rX3IobGluZXB0ciwgIiAiLCAmc2F2ZXB0cikpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGxpbmVwdHIgPSBOVUxMOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGlmICgwID09IHN0cm5jbXAoc3Ryc2VwKCZ0b2tlbiwgImUiKSwgIk91dFR5cCIsIDYpKSB7CisgICAgICAgICAgICBpbmRleCA9IHN0cnRvbCh0b2tlbiwgJmRlbGltLCAwKTsKKyAgICAgICAgICAgIGlmIChFUkFOR0UgPT0gZXJybm8pIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiAyNTUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTlVMTCA9PSAodG9rZW4gPSBzdHJ0b2tfcihkYXRhcHRyLCAiICIsICZzYXZlcHRyMSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGF0YXB0ciA9IE5VTEw7CisgICAgICAgICAgICBtc2ctPnZhbHNbaW5kZXhdLk91dFR5cGUgPSBhdG9pKHRva2VuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RydG9sKHRva2VuLCAmZGVsaW0sIDApOworICAgICAgICAgICAgaWYgKEVSQU5HRSA9PSBlcnJubykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDI1NSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKE5VTEwgPT0gKHRva2VuID0gc3RydG9rX3IoZGF0YXB0ciwgIiAiLCAmc2F2ZXB0cjEpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRhdGFwdHIgPSBOVUxMOworICAgICAgICAgICAgbXNnLT52YWxzW2luZGV4XS5JblR5cGUgPSBhdG9pKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbGludXhfcmVhZF9taWJJSV9zdGF0cyh2b2lkKQogewogICAgIEZJTEUgICAgICAgICAgICppbiA9IGZvcGVuKCIvcHJvYy9uZXQvc25tcCIsICJyIik7Ci0jaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotICAgIEZJTEUgICAgICAgICAgICppbjY7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHZhbHVlOwotI2VuZGlmCi0gICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07Ci0KKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XSwgZGF0YVsxMDI0XTsKKyAgICBpbnQgcmV0ID0gMDsKICAgICBpZiAoIWluKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgiLCJVbmFibGUgdG8gb3BlbiAvcHJvYy9uZXQvc25tcCIpKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogCisgICAgbWVtc2V0KGxpbmUsICdcMCcsIHNpemVvZihsaW5lKSk7CisgICAgbWVtc2V0KGRhdGEsICdcMCcsIHNpemVvZihkYXRhKSk7CiAgICAgd2hpbGUgKGxpbmUgPT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsIElQX1NUQVRTX0xJTkUsIElQX1NUQVRTX1BSRUZJWF9MRU4pKSB7CiAgICAgICAgICAgICBzc2NhbmYobGluZSwgSVBfU1RBVFNfTElORSwKQEAgLTEwNCw2ICsxNzMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2ljbXBfbWliLmljbXBPdXRUaW1lc3RhbXBSZXBzLAogICAgICAgICAgICAgICAgICAgICZjYWNoZWRfaWNtcF9taWIuaWNtcE91dEFkZHJNYXNrcywKICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2ljbXBfbWliLmljbXBPdXRBZGRyTWFza1JlcHMpOworICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsIElDTVBfTVNHX1NUQVRTX0xJTkUsIElDTVBfTVNHX1NUQVRTX1BSRUZJWF9MRU4pKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm90ZTogV2UgaGF2ZSB0byBkbyB0aGlzIGRpZmZlcmVudGx5IGZyb20gb3RoZXIgc3RhdHMgYXMgdGhlCisgICAgICAgICAgICAgKiBjb3VudGVycyB0byB0aGlzIHN0YXRzIGFyZSBkeW5hbWljLiBTbyB3ZSB3aWxsIG5vdCBrbm93IHRoZQorICAgICAgICAgICAgICogbnVtYmVyIG9mIGNvdW50ZXJzIGF0IGEgZ2l2ZW4gdGltZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZmdldHMoZGF0YSwgc2l6ZW9mKGRhdGEpLCBpbik7CisgICAgICAgICAgICBpZihkZWNvZGVfaWNtcF9tc2cobGluZSArIElDTVBfTVNHX1NUQVRTX1BSRUZJWF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgSUNNUF9NU0dfU1RBVFNfUFJFRklYX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfaWNtcDRfbXNnX21pYikgPCAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsIFRDUF9TVEFUU19MSU5FLCBUQ1BfU1RBVFNfUFJFRklYX0xFTikpIHsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICByZXQgPSBzc2NhbmYobGluZSwgVENQX1NUQVRTX0xJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfdGNwX21pYi50Y3BSdG9BbGdvcml0aG0sCkBAIC0xMzIsMzUgKzIxNCw2IEBACiAgICAgfQogICAgIGZjbG9zZShpbik7CiAKLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0gICAgaW42ID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wNiIsICJyIik7Ci0gICAgaWYgKGluNikgewotICAgICAgCi0gICAgICAgIHdoaWxlIChsaW5lID09IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW42KSkgewotCi0gICAgICAgICAgICBpZiAoKCdVJyAhPSBsaW5lWzBdKSB8fAotICAgICAgICAgICAgICAgICgwICE9IHN0cm5jbXAobGluZSwgVURQNl9TVEFUU19MSU5FLCBVRFA2X1NUQVRTX1BSRUZJWF9MRU4pKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgc3NjYW5mKGxpbmUsICIlKnMgJWx1IiAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCdPJyA9PSBsaW5lWzRdKSAvKiBVZHA2T3V0RGF0YWdyYW1zICovCi0gICAgICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwT3V0RGF0YWdyYW1zICs9IHZhbHVlOwotICAgICAgICAgICAgZWxzZSBpZiAoJ04nID09IGxpbmVbNF0pIC8qIFVkcDZOb1BvcnRzICovCi0gICAgICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwTm9Qb3J0cyArPSB2YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCdEJyA9PSBsaW5lWzZdKSAvKiBVZHA2SW5EYXRhZ3JhbXMgKi8KLSAgICAgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBJbkRhdGFncmFtcyArPSB2YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCdFJyA9PSBsaW5lWzZdKSAvKiBVZHA2SW5FcnJvcnMgKi8KLSAgICAgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBJbkVycm9ycyArPSB2YWx1ZTsKLQotICAgICAgICB9Ci0gICAgICAgIGZjbG9zZShpbjYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgiLCJVbmFibGUgdG8gb3BlbiAvcHJvYy9uZXQvc25tcDYiKSk7Ci0gICAgfQotCi0jZW5kaWYKLQogICAgIC8qCiAgICAgICogVHdlYWsgaWxsZWdhbCB2YWx1ZXM6CiAgICAgICoKQEAgLTE3Niw3ICsyMjksOCBAQAogICAgICAqLwogICAgIGlmICghY2FjaGVkX3RjcF9taWIudGNwUnRvQWxnb3JpdGhtKQogICAgICAgICBjYWNoZWRfdGNwX21pYi50Y3BSdG9BbGdvcml0aG0gPSAxOwotICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHJldDsKIH0KIAogaW50CkBAIC0xODksNiArMjQzLDEzOCBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTElOVVhfUkVBRF9JUDZfU1RBVAoraW50IGxpbnV4X3JlYWRfaXA2X3N0YXQoIHN0cnVjdCBpcDZfbWliICppcDZzdGF0KQoreworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBGSUxFICAgICAgICAgICAqaW47CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgdW5zaWduZWQgbG9uZyAgIHN0YXRzOworICAgIGNoYXIgICAgICAgICAgICplbmRwOworICAgIGludCAgICAgICAgICAgICBtYXRjaDsKKyNlbmRpZgorCisgICAgbWVtc2V0KChjaGFyICopIGlwNnN0YXQsICgwKSwgc2l6ZW9mKCppcDZzdGF0KSk7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgIlJlYWRpbmcgL3Byb2MvbmV0L3NubXA2IHN0YXRzXG4iKSk7CisgICAgaWYgKE5VTEwgPT0gKGluID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wNiIsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIG9wZW4gL3Byb2MvbmV0L3NubXA2XG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB3aGlsZSAoTlVMTCAhPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgeworICAgICAgICBpZiAoMCAhPSBzdHJuY21wKGxpbmUsIElQNl9TVEFUU19MSU5FLCBJUDZfU1RBVFNfUFJFRklYX0xFTikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoMSAhPSBzc2NhbmYobGluZSwgIiUqcyAlbHUiLCAmc3RhdHMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW5kcCA9IHN0cmNocihsaW5lLCAnICcpOworICAgICAgICAqZW5kcCA9ICdcMCc7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaXA2c3RhdHMiLCAiRmluZCB0YWc6ICVzXG4iLCBsaW5lKSk7CisKKyAgICAgICAgbWF0Y2ggPSAxOworICAgICAgICBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyAzLCAiSW4iLCAyKSkgeyAgLyogSW4gKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIkFkZHJFcnJvcnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluQWRkckVycm9ycyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIkRlbGl2ZXJzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbkRlbGl2ZXJzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiRGlzY2FyZHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluRGlzY2FyZHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJIZHJFcnJvcnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluSGRyRXJyb3JzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiTWNhc3RQa3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbk1jYXN0UGt0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIk5vUm91dGVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbk5vUm91dGVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiUmVjZWl2ZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluUmVjZWl2ZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJUcnVuY2F0ZWRQa3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJblRydW5jYXRlZFBrdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJUb29CaWdFcnJvcnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluVG9vQmlnRXJyb3JzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiVW5rbm93blByb3RvcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5Vbmtub3duUHJvdG9zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cm5jbXAobGluZSArIDMsICJPdXQiLCAzKSkgeyAgLyogT3V0ICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDYsICJEaXNjYXJkcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2T3V0RGlzY2FyZHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDYsICJGb3J3RGF0YWdyYW1zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZPdXRGb3J3RGF0YWdyYW1zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA2LCAiTWNhc3RQa3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZPdXRNY2FzdFBrdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDYsICJOb1JvdXRlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2T3V0Tm9Sb3V0ZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDYsICJSZXF1ZXN0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2T3V0UmVxdWVzdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgMywgIlJlYXNtIiwgNSkpIHsgIC8qIFJlYXNtICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJGYWlscyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2UmVhc21GYWlscyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIk9LcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2UmVhc21PS3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJSZXFkcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2UmVhc21SZXFkcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlRpbWVvdXQiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNlJlYXNtVGltZW91dCA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyAzLCAiRnJhZyIsIDQpKSB7ICAvKiBGcmFnICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJDcmVhdGVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZGcmFnQ3JlYXRlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkZhaWxzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZGcmFnRmFpbHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJPS3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkZyYWdPS3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYoIW1hdGNoKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgYW4gdW5rbm93biB0YWdcbiIsIGxpbmUpKTsKKyAgICB9CisKKyAgICBmY2xvc2UoaW4pOworI2VuZGlmCisKKyAgICBtZW1jcHkoKGNoYXIgKikgaXA2c3RhdCwgKGNoYXIgKikgJmNhY2hlZF9pcDZfbWliLCBzaXplb2YoKmlwNnN0YXQpKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xJTlVYX1JFQURfSVA2X1NUQVQgKi8KKworaW50CitsaW51eF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICppY21wc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqaWNtcG1zZ3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFnKQoreworICAgIGludCByZXQ7CisKKyAgICBtZW1zZXQoaWNtcHN0YXQsIDAsIHNpemVvZigqaWNtcHN0YXQpKTsKKyAgICBtZW1zZXQoaWNtcG1zZ3N0YXQsIDAsIHNpemVvZigqaWNtcG1zZ3N0YXQpKTsKKworICAgIGlmICgocmV0ID0gbGludXhfcmVhZF9taWJJSV9zdGF0cygpKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChyZXQpIHsKKyAgICAgICBtZW1jcHkoaWNtcG1zZ3N0YXQsICZjYWNoZWRfaWNtcDRfbXNnX21pYiwgc2l6ZW9mKCppY21wbXNnc3RhdCkpOworICAgICAgICpmbGFnID0gMTsgLyogV2UgaGF2ZSBhIHZhbGlkIGljbXBtc2cgKi8KKyAgICB9CisKKyAgICBtZW1jcHkoaWNtcHN0YXQsICZjYWNoZWRfaWNtcF9taWIsIHNpemVvZigqaWNtcHN0YXQpKTsKKyAgICByZXR1cm4gMDsKK30KKwogaW50CiBsaW51eF9yZWFkX2ljbXBfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKmljbXBzdGF0KQogewpAQCAtMjAwLDYgKzM4NiwxNjkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbGludXhfcmVhZF9pY21wNl9wYXJzZShzdHJ1Y3QgaWNtcDZfbWliICppY21wNnN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICppY21wNm1zZ3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3VwcG9ydCkKK3sKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgRklMRSAgICAgICAgICAgKmluOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICBuYW1lWzI1NV07CisgICAgdW5zaWduZWQgbG9uZyAgIHN0YXRzOworICAgIGNoYXIgICAgICAgICAgICplbmRwLCAqdmFsczsKKyAgICBpbnQgICAgICAgICAgICAgbWF0Y2g7CisjZW5kaWYKKworICAgIG1lbXNldChpY21wNnN0YXQsIDAsIHNpemVvZigqaWNtcDZzdGF0KSk7CisgICAgaWYgKE5VTEwgIT0gaWNtcDZtc2dzdGF0KQorICAgICAgICBtZW1zZXQoaWNtcDZtc2dzdGF0LCAwLCBzaXplb2YoKmljbXA2bXNnc3RhdCkpOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaWNtcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgIlJlYWRpbmcgL3Byb2MvbmV0L3NubXA2IHN0YXRzXG4iKSk7CisgICAgaWYgKE5VTEwgPT0gKGluID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wNiIsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaWNtcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiAvcHJvYy9uZXQvc25tcDZcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHdoaWxlIChOVUxMICE9IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIGlmICgwICE9IHN0cm5jbXAobGluZSwgSUNNUDZfU1RBVFNfTElORSwgSUNNUDZfU1RBVFNfUFJFRklYX0xFTikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoMiAhPSBzc2NhbmYobGluZSwgIiVzICVsdSIsIG5hbWUsICZzdGF0cykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbmRwID0gc3RyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICplbmRwID0gJ1wwJzsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pY21wNnN0YXRzIiwgIkZpbmQgdGFnOiAlc1xuIiwgbGluZSkpOworCisgICAgICAgIHZhbHMgPSBuYW1lOworICAgICAgICBpZiAoTlVMTCAhPSBpY21wNm1zZ3N0YXQpIHsKKyAgICAgICAgICAgIGludCB0eXBlOworICAgICAgICAgICAgaWYgKDAgPT0gc3RybmNtcChuYW1lLCAiSWNtcDZPdXRUeXBlIiwgMTIpKSB7CisgICAgICAgICAgICAgICAgc3Ryc2VwKCZ2YWxzLCAiZSIpOworICAgICAgICAgICAgICAgIHR5cGUgPSBhdG9pKHZhbHMpOworICAgICAgICAgICAgICAgIGlmICggdHlwZSA8IDAgfHwgdHlwZSA+IDI1NSApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGljbXA2bXNnc3RhdC0+dmFsc1t0eXBlXS5PdXRUeXBlID0gc3RhdHM7CisgICAgICAgICAgICAgICAgKnN1cHBvcnQgPSAxOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cm5jbXAobmFtZSwgIkljbXA2SW5UeXBlIiwgMTEpKSB7CisgICAgICAgICAgICAgICAgc3Ryc2VwKCZ2YWxzLCAiZSIpOworICAgICAgICAgICAgICAgIHR5cGUgPSBhdG9pKHZhbHMpOworICAgICAgICAgICAgICAgIGlmICggdHlwZSA8IDAgfHwgdHlwZSA+IDI1NSApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGljbXA2bXNnc3RhdC0+dmFsc1t0eXBlXS5JblR5cGUgPSBzdGF0czsKKyAgICAgICAgICAgICAgICAqc3VwcG9ydCA9IDE7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtYXRjaCA9IDE7CisgICAgICAgIGlmICgwID09IHN0cm5jbXAobGluZSArIDUsICJJbiIsIDIpKSB7ICAvKiBJbiAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiRGVzdFVucmVhY2hzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5EZXN0VW5yZWFjaHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJFY2hvcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluRWNob3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJFY2hvUmVwbGllcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluRWNob1JlcGxpZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJFcnJvcnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkVycm9ycyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkdyb3VwTWVtYlF1ZXJpZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJHcm91cE1lbWJSZWR1Y3Rpb25zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Hcm91cE1lbWJSZWR1Y3Rpb25zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiR3JvdXBNZW1iUmVzcG9uc2VzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJNc2dzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Nc2dzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiTmVpZ2hib3JBZHZlcnRpc2VtZW50cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIk5laWdoYm9yU29saWNpdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbk5laWdoYm9yU29saWNpdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJQa3RUb29CaWdzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Qa3RUb29CaWdzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiUGFybVByb2JsZW1zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5QYXJtUHJvYmxlbXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJSZWRpcmVjdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblJlZGlyZWN0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlJvdXRlckFkdmVydGlzZW1lbnRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Sb3V0ZXJBZHZlcnRpc2VtZW50cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlJvdXRlclNvbGljaXRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Sb3V0ZXJTb2xpY2l0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlRpbWVFeGNkcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluVGltZUV4Y2RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cm5jbXAobGluZSArIDUsICJPdXQiLCAzKSkgeyAgLyogT3V0ICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJEZXN0VW5yZWFjaHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXREZXN0VW5yZWFjaHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJFY2hvcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dEVjaG9zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiRWNob1JlcGxpZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRFY2hvUmVwbGllcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkdyb3VwTWVtYlJlZHVjdGlvbnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiR3JvdXBNZW1iUmVzcG9uc2VzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiTXNncyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dE1zZ3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJOZWlnaGJvckFkdmVydGlzZW1lbnRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIk5laWdoYm9yU29saWNpdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXROZWlnaGJvclNvbGljaXRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiUGt0VG9vQmlncyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dFBrdFRvb0JpZ3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJQYXJtUHJvYmxlbXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRQYXJtUHJvYmxlbXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJSZWRpcmVjdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRSZWRpcmVjdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJSb3V0ZXJTb2xpY2l0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dFJvdXRlclNvbGljaXRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiVGltZUV4Y2RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0VGltZUV4Y2RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZighbWF0Y2gpCisgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2ljbXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGFuIHVua25vd24gdGFnXG4iLCBsaW5lKSk7CisgICAgfQorCisgICAgZmNsb3NlKGluKTsKKyNlbmRpZgorCisgICAgbWVtY3B5KChjaGFyICopIGljbXA2c3RhdCwgKGNoYXIgKikgJmNhY2hlZF9pY21wNl9taWIsCisgICAgICAgICAgIHNpemVvZigqaWNtcDZzdGF0KSk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbGludXhfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICppY21wNnN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICppY21wNm1zZ3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3VwcG9ydCkKK3sKKyAgICAgaWYgKGxpbnV4X3JlYWRfaWNtcDZfcGFyc2UoaWNtcDZzdGF0LCBpY21wNm1zZ3N0YXQsIHN1cHBvcnQpIDwgMCkKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbGludXhfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKmljbXA2c3RhdCkKK3sKKyAgIGlmIChsaW51eF9yZWFkX2ljbXA2X3BhcnNlKGljbXA2c3RhdCwgTlVMTCwgTlVMTCkgPCAwKQorICAgICAgIHJldHVybiAtMTsKKyAgIGVsc2UKKyAgICAgICByZXR1cm4gMDsKK30KKwogaW50CiBsaW51eF9yZWFkX3RjcF9zdGF0KHN0cnVjdCB0Y3BfbWliICp0Y3BzdGF0KQogewpAQCAtMjE2LDYgKzU2NSw3MyBAQAogICAgIG1lbXNldCgoY2hhciAqKSB1ZHBzdGF0LCAoMCksIHNpemVvZigqdWRwc3RhdCkpOwogICAgIGlmIChsaW51eF9yZWFkX21pYklJX3N0YXRzKCkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICB7CisgICAgICAgIHN0cnVjdCB1ZHA2X21pYiB1ZHA2c3RhdDsKKyAgICAgICAgbWVtc2V0KCZ1ZHA2c3RhdCwgMCwgc2l6ZW9mKHVkcDZzdGF0KSk7CisKKyAgICAgICAgaWYgKGxpbnV4X3JlYWRfdWRwNl9zdGF0KCZ1ZHA2c3RhdCkgPT0gMCkgeworICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwT3V0RGF0YWdyYW1zICs9IHVkcDZzdGF0LnVkcDZPdXREYXRhZ3JhbXM7CisgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBOb1BvcnRzICAgICAgKz0gdWRwNnN0YXQudWRwNk5vUG9ydHM7CisgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBJbkRhdGFncmFtcyAgKz0gdWRwNnN0YXQudWRwNkluRGF0YWdyYW1zOworICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwSW5FcnJvcnMgICAgICs9IHVkcDZzdGF0LnVkcDZJbkVycm9yczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgogICAgIG1lbWNweSgoY2hhciAqKSB1ZHBzdGF0LCAoY2hhciAqKSAmY2FjaGVkX3VkcF9taWIsIHNpemVvZigqdWRwc3RhdCkpOwogICAgIHJldHVybiAwOwogfQorCitpbnQKK2xpbnV4X3JlYWRfdWRwNl9zdGF0KHN0cnVjdCB1ZHA2X21pYiAqdWRwNnN0YXQpCit7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIEZJTEUgICAgICAgICAgICppbjsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICB1bnNpZ25lZCBsb25nICAgc3RhdHM7CisgICAgY2hhciAgICAgICAgICAgKmVuZHA7CisjZW5kaWYKKworICAgIG1lbXNldCh1ZHA2c3RhdCwgMCwgc2l6ZW9mKCp1ZHA2c3RhdCkpOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvdWRwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAiUmVhZGluZyAvcHJvYy9uZXQvc25tcDYgc3RhdHNcbiIpKTsKKyAgICBpZiAoTlVMTCA9PSAoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXA2IiwgInIiKSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC91ZHA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIG9wZW4gL3Byb2MvbmV0L3NubXA2XG4iKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHdoaWxlIChOVUxMICE9IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIGlmICgwICE9IHN0cm5jbXAobGluZSwgVURQNl9TVEFUU19MSU5FLCBVRFA2X1NUQVRTX1BSRUZJWF9MRU4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKDEgIT0gc3NjYW5mKGxpbmUsICIlKnMgJWx1IiwgJnN0YXRzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVuZHAgPSBzdHJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgKmVuZHAgPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L3VkcDZzdGF0cyIsICJGaW5kIHRhZzogJXNcbiIsIGxpbmUpKTsKKworICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDQsICJPdXREYXRhZ3JhbXMiKSkgeworICAgICAgICAgICAgY2FjaGVkX3VkcDZfbWliLnVkcDZPdXREYXRhZ3JhbXMgPSBzdGF0czsKKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNCwgIk5vUG9ydHMiKSkgeworICAgICAgICAgICAgY2FjaGVkX3VkcDZfbWliLnVkcDZOb1BvcnRzID0gc3RhdHM7CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDQsICJJbkRhdGFncmFtcyIpKSB7CisgICAgICAgICAgICBjYWNoZWRfdWRwNl9taWIudWRwNkluRGF0YWdyYW1zID0gc3RhdHM7CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDQsICJJbkVycm9ycyIpKSB7CisgICAgICAgICAgICBjYWNoZWRfdWRwNl9taWIudWRwNkluRXJyb3JzID0gc3RhdHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L3VkcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgYW4gdW5rbm93biB0YWdcbiIsIGxpbmUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZjbG9zZShpbik7CisjZW5kaWYKKworICAgIG1lbWNweSgoY2hhciAqKSB1ZHA2c3RhdCwgKGNoYXIgKikgJmNhY2hlZF91ZHA2X21pYiwgc2l6ZW9mKCp1ZHA2c3RhdCkpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmggYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaAppbmRleCBmYjdkYjk2Li5iM2M1OGQzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaApAQCAtNiw4OCArNiwyMCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfS0VSTkVMX0xJTlVYX0gKICNkZWZpbmUgX01JQkdST1VQX0tFUk5FTF9MSU5VWF9ICiAKLXN0cnVjdCBpcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndhcmRpbmc7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRGVmYXVsdFRUTDsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJblJlY2VpdmVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluSGRyRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluQWRkckVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3RGF0YWdyYW1zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluVW5rbm93blByb3RvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRpc2NhcmRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGVsaXZlcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0UmVxdWVzdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0RGlzY2FyZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0Tm9Sb3V0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21UaW1lb3V0OwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtUmVxZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21PS3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21GYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnT0tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdGYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnQ3JlYXRlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSb3V0aW5nRGlzY2FyZHM7Ci19OwotCi1zdHJ1Y3QgaWNtcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5Nc2dzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkRlc3RVbnJlYWNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZUV4Y2RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5QYXJtUHJvYnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblNyY1F1ZW5jaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblJlZGlyZWN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9SZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dE1zZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXREZXN0VW5yZWFjaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lRXhjZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRQYXJtUHJvYnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRTcmNRdWVuY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UmVkaXJlY3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tSZXBzOwotfTsKLQotc3RydWN0IHVkcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkRhdGFncmFtczsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwTm9Qb3J0czsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5FcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcE91dERhdGFncmFtczsKLX07Ci0KLXN0cnVjdCB0Y3BfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvQWxnb3JpdGhtOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NaW47Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01heDsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwTWF4Q29ubjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQWN0aXZlT3BlbnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFBhc3NpdmVPcGVuczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQXR0ZW1wdEZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BFc3RhYlJlc2V0czsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQ3VyckVzdGFiOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJblNlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFNlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJldHJhbnNTZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJbkVycnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFJzdHM7Ci0gICAgc2hvcnQgICAgICAgICAgIHRjcEluRXJyc1ZhbGlkOwotICAgIHNob3J0ICAgICAgICAgICB0Y3BPdXRSc3RzVmFsaWQ7Ci19OwotCisjaW5jbHVkZSAia2VybmVsX21pYi5oIgogCiBpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pcF9zdGF0KHN0cnVjdCBpcF9taWIgKik7CitpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pcDZfc3RhdChzdHJ1Y3QgaXA2X21pYiAqKTsKIGludCAgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXBfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKik7CitpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKik7CiBpbnQgICAgICAgICAgICAgbGludXhfcmVhZF91ZHBfc3RhdChzdHJ1Y3QgdWRwX21pYiAqKTsKK2ludCAgICAgICAgICAgICBsaW51eF9yZWFkX3VkcDZfc3RhdChzdHJ1Y3QgdWRwNl9taWIgKik7CiBpbnQgICAgICAgICAgICAgbGludXhfcmVhZF90Y3Bfc3RhdChzdHJ1Y3QgdGNwX21pYiAqKTsKK2ludCAgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZmxhZyk7CitpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdXBwb3J0KTsKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfS0VSTkVMX0xJTlVYX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9taWIuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjg2MzlmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX21pYi5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogIE1JQiBzdGF0aXN0aWNzIGdhdGhlcmluZyBzdHJ1Y3R1cmVzCisgKi8KKworI2lmbmRlZiBfTUlCR1JPVVBfS0VSTkVMX01JQl9ICisjZGVmaW5lIF9NSUJHUk9VUF9LRVJORUxfTUlCX0gKKworc3RydWN0IGlwX21pYiB7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd2FyZGluZzsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBEZWZhdWx0VFRMOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluUmVjZWl2ZXM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5IZHJFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5BZGRyRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndEYXRhZ3JhbXM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5Vbmtub3duUHJvdG9zOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EZWxpdmVyczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBPdXRSZXF1ZXN0czsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBPdXREaXNjYXJkczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBPdXROb1JvdXRlczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVRpbWVvdXQ7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21SZXFkczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbU9LczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbUZhaWxzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdPS3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0ZhaWxzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdDcmVhdGVzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcFJvdXRpbmdEaXNjYXJkczsKK307CisKK3N0cnVjdCBpcDZfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluUmVjZWl2ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbkhkckVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluVG9vQmlnRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5Ob1JvdXRlczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluQWRkckVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluVW5rbm93blByb3RvczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluVHJ1bmNhdGVkUGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluRGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbkRlbGl2ZXJzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2T3V0Rm9yd0RhdGFncmFtczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNk91dFJlcXVlc3RzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2T3V0RGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZPdXROb1JvdXRlczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNlJlYXNtVGltZW91dDsKKyAgICB1bnNpZ25lZCBsb25nIGlwNlJlYXNtUmVxZHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZSZWFzbU9LczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNlJlYXNtRmFpbHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZGcmFnT0tzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2RnJhZ0ZhaWxzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2RnJhZ0NyZWF0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbk1jYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGlwNk91dE1jYXN0UGt0czsKK307CisKK3N0cnVjdCBpY21wX21pYiB7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbk1zZ3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRGVzdFVucmVhY2hzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lRXhjZHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblBhcm1Qcm9iczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluU3JjUXVlbmNoczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUmVkaXJlY3RzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob1JlcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcFJlcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tSZXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0TXNnczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dERlc3RVbnJlYWNoczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVFeGNkczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFBhcm1Qcm9iczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFNyY1F1ZW5jaHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRSZWRpcmVjdHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9SZXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcFJlcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza1JlcHM7Cit9OworCitzdHJ1Y3QgaWNtcDZfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Nc2dzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5EZXN0VW5yZWFjaHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluUGt0VG9vQmlnczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5UaW1lRXhjZHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluUGFybVByb2JsZW1zOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkVjaG9zOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkVjaG9SZXBsaWVzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkdyb3VwTWVtYlJlZHVjdGlvbnM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluUm91dGVyU29saWNpdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluTmVpZ2hib3JTb2xpY2l0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblJlZGlyZWN0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0TXNnczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0RGVzdFVucmVhY2hzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRQa3RUb29CaWdzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRUaW1lRXhjZHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dFBhcm1Qcm9ibGVtczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0RWNob3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dEVjaG9SZXBsaWVzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRSb3V0ZXJTb2xpY2l0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0TmVpZ2hib3JTb2xpY2l0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0UmVkaXJlY3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnM7Cit9OworCitzdHJ1Y3QgaWNtcF9tc2dfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nIEluVHlwZTsKKyAgICB1bnNpZ25lZCBsb25nIE91dFR5cGU7Cit9OworCisvKiBMZXRzIHVzZSB3cmFwcGVyIHN0cnVjdHVyZXMgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KK3N0cnVjdCBpY21wNF9tc2dfbWliIHsKKyAgICBzdHJ1Y3QgaWNtcF9tc2dfbWliIHZhbHNbMjU2XTsKK307CisKK3N0cnVjdCBpY21wNl9tc2dfbWliIHsKKyAgICBzdHJ1Y3QgaWNtcF9tc2dfbWliIHZhbHNbMjU2XTsKK307CisKK3N0cnVjdCB1ZHBfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5EYXRhZ3JhbXM7CisgICAgdW5zaWduZWQgbG9uZyAgIHVkcE5vUG9ydHM7CisgICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBPdXREYXRhZ3JhbXM7Cit9OworCitzdHJ1Y3QgdWRwNl9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgdWRwNkluRGF0YWdyYW1zOworICAgIHVuc2lnbmVkIGxvbmcgdWRwNk5vUG9ydHM7CisgICAgdW5zaWduZWQgbG9uZyB1ZHA2SW5FcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyB1ZHA2T3V0RGF0YWdyYW1zOworfTsKKworc3RydWN0IHRjcF9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9BbGdvcml0aG07CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01pbjsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWF4OworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BNYXhDb25uOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBY3RpdmVPcGVuczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwUGFzc2l2ZU9wZW5zOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBdHRlbXB0RmFpbHM7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEVzdGFiUmVzZXRzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BDdXJyRXN0YWI7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEluU2VnczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0U2VnczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwUmV0cmFuc1NlZ3M7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEluRXJyczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0UnN0czsKKyAgICBzaG9ydCAgICAgICAgICAgdGNwSW5FcnJzVmFsaWQ7CisgICAgc2hvcnQgICAgICAgICAgIHRjcE91dFJzdHNWYWxpZDsKK307CisKKyNlbmRpZiAgLyogX01JQkdST1VQX0tFUk5FTF9NSUJfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5jCmluZGV4IDkzZjM4YjcuLjA4MDYxODAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2luY2x1ZGUgPG5ldGluZXQvaWNtcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgogI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgpAQCAtMzgsOCArMzksMTAgQEAKIAogICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CiAKLSAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pY21wLnN0YXRzIiwgaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pY21wLnN0YXRzIiwgaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF9pY21wX3N0YXQ6IG5ldC5pbmV0LmljbXAuc3RhdHMiKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIG1pYi0+aWNtcEluTXNncyA9IGljbXBzdGF0W0lDTVBfU1RBVF9CQURDT0RFXQogICAgICAgICArIGljbXBzdGF0W0lDTVBfU1RBVF9UT09TSE9SVF0KQEAgLTg2LDYgKzg5LDEwNCBAQAogICAgIHJldHVybiAwOwogfQogCisKK2ludAorbmV0YnNkX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIpCit7CisgICAgdWludDY0X3QgaWNtcHN0YXRbSUNNUDZfTlNUQVRTXTsKKyAgICBzaXplX3QgICBzaXplID0gc2l6ZW9mKGljbXBzdGF0KTsKKyAgICBpbnQgICAgICBpOworCisgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKKworICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0Ni5pY21wNi5zdGF0cyIsIGljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfaWNtcDZfc3RhdDogbmV0LmluZXQ2LmljbXA2LnN0YXRzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtaWItPmljbXA2SW5Nc2dzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9CQURDT0RFXQorICAgICAgICAgICAgKyBpY21wc3RhdFtJQ01QX1NUQVRfVE9PU0hPUlRdCisJICAgICsgaWNtcHN0YXRbSUNNUF9TVEFUX0NIRUNLU1VNXQorICAgICAgICAgICAgKyBpY21wc3RhdFtJQ01QX1NUQVRfQkFETEVOXTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVA2X01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wNkluTXNncyAgKz0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBpXTsKKyAgICBtaWItPmljbXA2SW5FcnJvcnMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0JBRENPREVdCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9UT09TSE9SVF0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX0NIRUNLU1VNXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfQkFETEVOXTsKKyAgICBtaWItPmljbXA2SW5EZXN0VW5yZWFjaHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X0RTVF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXA2SW5Qa3RUb29CaWdzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9QQUNLRVRfVE9PX0JJR107CisgICAgbWliLT5pY21wNkluVGltZUV4Y2RzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9USU1FX0VYQ0VFREVEXTsKKyAgICBtaWItPmljbXA2SW5QYXJtUHJvYmxlbXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X1BBUkFNX1BST0JdOworICAgIG1pYi0+aWNtcDZJbkVjaG9zID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9FQ0hPX1JFUVVFU1RdOworICAgIG1pYi0+aWNtcDZJbkVjaG9SZXBsaWVzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9FQ0hPX1JFUExZXTsKKyAgICBtaWItPmljbXA2SW5Hcm91cE1lbWJRdWVyaWVzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBNTERfTElTVEVORVJfUVVFUlldOworICAgIG1pYi0+aWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTUxEX0xJU1RFTkVSX1JFUE9SVF07CisgICAgbWliLT5pY21wNkluUm91dGVyU29saWNpdHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE5EX1JPVVRFUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2SW5Sb3V0ZXJBZHZlcnRpc2VtZW50cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTkRfUk9VVEVSX0FEVkVSVF07CisgICAgbWliLT5pY21wNkluTmVpZ2hib3JTb2xpY2l0cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTkRfTkVJR0hCT1JfU09MSUNJVF07CisgICAgbWliLT5pY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTkRfTkVJR0hCT1JfQURWRVJUXTsKKyAgICBtaWItPmljbXA2SW5SZWRpcmVjdHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE5EX1JFRElSRUNUXTsKKworICAgIG1pYi0+aWNtcDZPdXRNc2dzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9CQURDT0RFXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfVE9PU0hPUlRdCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9DSEVDS1NVTV0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX0JBRExFTl07CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QNl9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcDZPdXRNc2dzICs9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIGldOworICAgIG1pYi0+aWNtcDZPdXREZXN0VW5yZWFjaHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9EU1RfVU5SRUFDSF07CisgICAgbWliLT5pY21wNk91dFBrdFRvb0JpZ3MgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfUEFDS0VUX1RPT19CSUddOworICAgIG1pYi0+aWNtcDZPdXRUaW1lRXhjZHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9USU1FX0VYQ0VFREVEXTsKKyAgICBtaWItPmljbXA2T3V0UGFybVByb2JsZW1zID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfUEFSQU1fUFJPQl07CisgICAgbWliLT5pY21wNk91dEVjaG9zID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfRUNIT19SRVFVRVNUXTsKKyAgICBtaWItPmljbXA2T3V0RWNob1JlcGxpZXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9FQ0hPX1JFUExZXTsKKyAgICBtaWItPmljbXA2T3V0Um91dGVyU29saWNpdHMgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTkRfUk9VVEVSX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZPdXROZWlnaGJvclNvbGljaXRzID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE5EX05FSUdIQk9SX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE5EX05FSUdIQk9SX0FEVkVSVF07CisgICAgbWliLT5pY21wNk91dFJlZGlyZWN0cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE5EX1JFRElSRUNUXTsKKyAgICBtaWItPmljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE1MRF9MSVNURU5FUl9SRVBPUlRdOworICAgIG1pYi0+aWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE1MRF9MSVNURU5FUl9ET05FXTsKKworICAgIHJldHVybiAwOworfQorCisKK2ludAorbmV0YnNkX3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKm1zZ21pYiwKKwkJCSAgaW50ICpmbGFnKQoreworICAgIG5ldGJzZF9yZWFkX2ljbXBfc3RhdChtaWIpOworICAgICpmbGFnID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK25ldGJzZF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICptc2dtaWIsCisJCQkgICBpbnQgKnN1cHBvcnQpCit7CisgICAgdWludDY0X3QgaWNtcHN0YXRbSUNNUDZfTlNUQVRTXTsKKyAgICBzaXplX3QgICBzaXplID0gc2l6ZW9mKGljbXBzdGF0KTsKKyAgICBpbnQgICAgICBpOworCisgICAgbmV0YnNkX3JlYWRfaWNtcDZfc3RhdChtaWIpOworCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQ2LmljbXA2LnN0YXRzIiwgaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF9pY21wNl9zdGF0OiBuZXQuaW5ldDYuaWNtcDYuc3RhdHMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCW1zZ21pYi0+dmFsc1tpXS5JblR5cGUgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCtpXTsKKwltc2dtaWItPnZhbHNbaV0uT3V0VHlwZSA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCtpXTsKKyAgICB9CisgICAgKnN1cHBvcnQgPSAxOworICAgIHJldHVybiAwOworfQorCisKIGludAogbmV0YnNkX3JlYWRfaXBfc3RhdChzdHJ1Y3QgaXBfbWliICptaWIpCiB7CkBAIC05Nyw4ICsxOTgsMTAgQEAKIAogICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CiAKLSAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pcC5zdGF0cyIsIGlwc3RhdCwgJnNpemUsIE5VTEwsIDApKQorICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LmlwLnN0YXRzIiwgaXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfaXBfc3RhdDogbmV0LmluZXQuaXAuc3RhdHMiKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIG1pYi0+aXBGb3J3YXJkaW5nID0gMDsKICAgICBsZW4gPSBzaXplb2YgaTsKQEAgLTEzOCw2ICsyNDEsNyBAQAogICAgIHJldHVybiAwOwogfQogCisKIGludAogbmV0YnNkX3JlYWRfdGNwX3N0YXQoc3RydWN0IHRjcF9taWIgKm1pYikKIHsKQEAgLTE0Niw4ICsyNTAsMTAgQEAKIAogICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CiAKLSAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC50Y3Auc3RhdHMiLCB0Y3BzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQudGNwLnN0YXRzIiwgdGNwc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX3RjcF9zdGF0OiBuZXQuaW5ldC50Y3Auc3RhdHMiKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIG1pYi0+dGNwUnRvQWxnb3JpdGhtID0gNDsgLyogQXNzdW1lIFZhbiBKYWNvYnNlbidzIGFsZ29yaXRobSAqLwogICAgIG1pYi0+dGNwUnRvTWluID0gVENQVFZfTUlOOwpAQCAtMTc0LDYgKzI4MCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKwogaW50CiBuZXRic2RfcmVhZF91ZHBfc3RhdChzdHJ1Y3QgdWRwX21pYiAqbWliKQogewpAQCAtMTgyLDE0ICsyODksMTYgQEAKIAogICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CiAKLSAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC51ZHAuc3RhdHMiLCB1ZHBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQudWRwLnN0YXRzIiwgdWRwc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX3VkcF9zdGF0OiBuZXQuaW5ldC51ZHAuc3RhdHMiKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIG1pYi0+dWRwSW5EYXRhZ3JhbXMgPSB1ZHBzdGF0W1VEUF9TVEFUX0lQQUNLRVRTXTsKICAgICBtaWItPnVkcE5vUG9ydHMgPSB1ZHBzdGF0W1VEUF9TVEFUX05PUE9SVF07CiAgICAgbWliLT51ZHBPdXREYXRhZ3JhbXMgPSB1ZHBzdGF0W1VEUF9TVEFUX09QQUNLRVRTXTsKICAgICBtaWItPnVkcEluRXJyb3JzID0gdWRwc3RhdFtVRFBfU1RBVF9IRFJPUFNdCi0gICAgICAgICsgdWRwc3RhdFtVRFBfU1RBVF9CQURTVU1dIC8qICsgdWRwc3RhdFtVRFBfU1RBVF9ESVNDQVJEXSAvKiBGSVhNRSAqLworICAgICAgICArIHVkcHN0YXRbVURQX1NUQVRfQkFEU1VNXSAvKiArIHVkcHN0YXRbVURQX1NUQVRfRElTQ0FSRF0gKi8gLyogRklYTUUgKi8KICAgICAgICAgKyB1ZHBzdGF0W1VEUF9TVEFUX0ZVTExTT0NLXSArIHVkcHN0YXRbVURQX1NUQVRfQkFETEVOXTsKIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5oCmluZGV4IDkwMDA2ODIuLmFjY2I5YTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmgKQEAgLTMsODUgKzMsMTYgQEAKIAogI2lmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCiAKLXN0cnVjdCBpY21wX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbk1zZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRGVzdFVucmVhY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lRXhjZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblBhcm1Qcm9iczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluU3JjUXVlbmNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUmVkaXJlY3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcFJlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0TXNnczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dERlc3RVbnJlYWNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVFeGNkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFBhcm1Qcm9iczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFNyY1F1ZW5jaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRSZWRpcmVjdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9SZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcFJlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza1JlcHM7Ci19OwotCi1zdHJ1Y3QgaXBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3YXJkaW5nOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcERlZmF1bHRUVEw7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5SZWNlaXZlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkhkckVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkFkZHJFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd0RhdGFncmFtczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJblVua25vd25Qcm90b3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EaXNjYXJkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRlbGl2ZXJzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dFJlcXVlc3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dERpc2NhcmRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dE5vUm91dGVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtVGltZW91dDsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVJlcWRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtT0tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtRmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ09LczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnRmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0NyZWF0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUm91dGluZ0Rpc2NhcmRzOwotfTsKLQotc3RydWN0IHRjcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9BbGdvcml0aG07Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01pbjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWF4OwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BNYXhDb25uOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBY3RpdmVPcGVuczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUGFzc2l2ZU9wZW5zOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBdHRlbXB0RmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEVzdGFiUmVzZXRzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BDdXJyRXN0YWI7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEluU2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0U2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUmV0cmFuc1NlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEluRXJyczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0UnN0czsKLSAgICBzaG9ydCAgICAgICAgICAgdGNwSW5FcnJzVmFsaWQ7Ci0gICAgc2hvcnQgICAgICAgICAgIHRjcE91dFJzdHNWYWxpZDsKLX07Ci0KLXN0cnVjdCB1ZHBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5EYXRhZ3JhbXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcE5vUG9ydHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBPdXREYXRhZ3JhbXM7Ci19OworI2luY2x1ZGUgImtlcm5lbF9taWIuaCIKIAogaW50ICAgICAgbmV0YnNkX3JlYWRfaWNtcF9zdGF0KHN0cnVjdCBpY21wX21pYiAqKTsKK2ludCAgICAgIG5ldGJzZF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqKTsKK2ludCAgICAgIG5ldGJzZF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICosCisJCSAJCSAgaW50ICpmbGFnKTsKK2ludCAgICAgIG5ldGJzZF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICosCisJCQkJICAgIGludCAqc3VwcG9ydCk7CiBpbnQgICAgICBuZXRic2RfcmVhZF9pcF9zdGF0KHN0cnVjdCBpcF9taWIgKik7CiBpbnQgICAgICBuZXRic2RfcmVhZF90Y3Bfc3RhdChzdHJ1Y3QgdGNwX21pYiAqKTsKIGludCAgICAgIG5ldGJzZF9yZWFkX3VkcF9zdGF0KHN0cnVjdCB1ZHBfbWliICopOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmY2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBzeXNjdGwgaW50ZXJmYWNlIGZvciBpY21wIHN0YXRzIGZvciBvdGhlcnMgdGhhbiBOZXRCU0QKKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaWNtcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJrZXJuZWxfc3lzY3RsLmgiCisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpCisKK2ludAorc3lzY3RsX3JlYWRfaWNtcF9zdGF0KHN0cnVjdCBpY21wX21pYiAqbWliKQoreworICAgIHN0cnVjdCBpY21wc3RhdCBpY21wc3RhdDsKKyAgICBzaXplX3QgICBzaXplID0gc2l6ZW9mKGljbXBzdGF0KTsKKyAgICBpbnQgICAgICBpOworICAgIHN0YXRpYyBpbnQgICAgICBzbmFtZVs0XSA9CisgICAgICAgIHsgQ1RMX05FVCwgUEZfSU5FVCwgSVBQUk9UT19JQ01QLCBJQ01QQ1RMX1NUQVRTIH07CisKKyAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOworCisgICAgaWYgKC0xID09IHN5c2N0bChzbmFtZSwgNCwgJmljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigic3lzY3RsX3JlYWRfaWNtcF9zdGF0OiBuZXQuaW5ldC5pY21wLnN0YXRzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtaWItPmljbXBJbk1zZ3MgPSBpY21wc3RhdC5pY3BzX2JhZGNvZGUKKyAgICAgICAgKyBpY21wc3RhdC5pY3BzX3Rvb3Nob3J0CisgICAgICAgICsgaWNtcHN0YXQuaWNwc19jaGVja3N1bQorICAgICAgICArIGljbXBzdGF0LmljcHNfYmFkbGVuOworICAgIG1pYi0+aWNtcEluRXJyb3JzID0gbWliLT5pY21wSW5Nc2dzOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUF9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcEluTXNncyAgKz0gaWNtcHN0YXQuaWNwc19pbmhpc3RbaV07CisgICAgbWliLT5pY21wSW5EZXN0VW5yZWFjaHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcEluVGltZUV4Y2RzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9USU1YQ0VFRF07CisgICAgbWliLT5pY21wSW5QYXJtUHJvYnMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1BBUkFNUFJPQl07CisgICAgbWliLT5pY21wSW5TcmNRdWVuY2hzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9TT1VSQ0VRVUVOQ0hdOworICAgIG1pYi0+aWNtcEluUmVkaXJlY3RzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9SRURJUkVDVF07CisgICAgbWliLT5pY21wSW5FY2hvcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfRUNIT107CisgICAgbWliLT5pY21wSW5FY2hvUmVwcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfRUNIT1JFUExZXTsKKyAgICBtaWItPmljbXBJblRpbWVzdGFtcHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1RTVEFNUF07CisgICAgbWliLT5pY21wSW5UaW1lc3RhbXBSZXBzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9UU1RBTVBSRVBMWV07CisgICAgbWliLT5pY21wSW5BZGRyTWFza3MgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX01BU0tSRVFdOworICAgIG1pYi0+aWNtcEluQWRkck1hc2tSZXBzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9NQVNLUkVQTFldOworICAgIG1pYi0+aWNtcE91dE1zZ3MgPSBpY21wc3RhdC5pY3BzX29sZHNob3J0ICsgaWNtcHN0YXQuaWNwc19vbGRpY21wOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUF9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcE91dE1zZ3MgKz0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W2ldOworICAgIG1pYi0+aWNtcE91dEVycm9ycyA9IGljbXBzdGF0LmljcHNfb2xkc2hvcnQgKyBpY21wc3RhdC5pY3BzX29sZGljbXA7CisgICAgbWliLT5pY21wT3V0RGVzdFVucmVhY2hzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfVU5SRUFDSF07CisgICAgbWliLT5pY21wT3V0VGltZUV4Y2RzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfVElNWENFRURdOworICAgIG1pYi0+aWNtcE91dFBhcm1Qcm9icyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1BBUkFNUFJPQl07CisgICAgbWliLT5pY21wT3V0U3JjUXVlbmNocyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1NPVVJDRVFVRU5DSF07CisgICAgbWliLT5pY21wT3V0UmVkaXJlY3RzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfUkVESVJFQ1RdOworICAgIG1pYi0+aWNtcE91dEVjaG9zID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfRUNIT107CisgICAgbWliLT5pY21wT3V0RWNob1JlcHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9FQ0hPUkVQTFldOworICAgIG1pYi0+aWNtcE91dFRpbWVzdGFtcHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9UU1RBTVBdOworICAgIG1pYi0+aWNtcE91dFRpbWVzdGFtcFJlcHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9UU1RBTVBSRVBMWV07CisgICAgbWliLT5pY21wT3V0QWRkck1hc2tzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfTUFTS1JFUV07CisgICAgbWliLT5pY21wT3V0QWRkck1hc2tSZXBzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfTUFTS1JFUExZXTsKKworICAgIHJldHVybiAwOworfQorCisKK2ludAorc3lzY3RsX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIpCit7CisgICAgc3RydWN0IGljbXA2c3RhdCBpY21wc3RhdDsKKyAgICBzaXplX3QgICBzaXplID0gc2l6ZW9mKGljbXBzdGF0KTsKKyAgICBpbnQgICAgICBpOworICAgIHN0YXRpYyBpbnQgICAgICBzbmFtZVs0XSA9CisgICAgICAgIHsgQ1RMX05FVCwgUEZfSU5FVDYsIElQUFJPVE9fSUNNUFY2LCBJQ01QVjZDVExfU1RBVFMgfTsKKworICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CisKKyAgICBpZiAoLTEgPT0gc3lzY3RsKHNuYW1lLCA0LCAmaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJzeXNjdGxfcmVhZF9pY21wNl9zdGF0OiBuZXQuaW5ldDYuaWNtcDYuc3RhdHMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1pYi0+aWNtcDZJbk1zZ3MgPSBpY21wc3RhdC5pY3A2c19iYWRjb2RlCisgICAgICAgICAgICArIGljbXBzdGF0LmljcDZzX3Rvb3Nob3J0CisJICAgICsgaWNtcHN0YXQuaWNwNnNfY2hlY2tzdW0KKyAgICAgICAgICAgICsgaWNtcHN0YXQuaWNwNnNfYmFkbGVuOworICAgIG1pYi0+aWNtcDZJbkVycm9ycyA9IG1pYi0+aWNtcDZJbk1zZ3M7CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QNl9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcDZJbk1zZ3MgICs9IGljbXBzdGF0LmljcDZzX2luaGlzdFtpXTsKKyAgICBtaWItPmljbXA2SW5EZXN0VW5yZWFjaHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfRFNUX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcDZJblBrdFRvb0JpZ3MgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfUEFDS0VUX1RPT19CSUddOworICAgIG1pYi0+aWNtcDZJblRpbWVFeGNkcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9USU1FX0VYQ0VFREVEXTsKKyAgICBtaWItPmljbXA2SW5QYXJtUHJvYmxlbXMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfUEFSQU1fUFJPQl07CisgICAgbWliLT5pY21wNkluRWNob3MgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfRUNIT19SRVFVRVNUXTsKKyAgICBtaWItPmljbXA2SW5FY2hvUmVwbGllcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9FQ0hPX1JFUExZXTsKKyAgICBtaWItPmljbXA2SW5Hcm91cE1lbWJRdWVyaWVzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W01MRF9MSVNURU5FUl9RVUVSWV07CisgICAgbWliLT5pY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W01MRF9MSVNURU5FUl9SRVBPUlRdOworICAgIG1pYi0+aWNtcDZJblJvdXRlclNvbGljaXRzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W05EX1JPVVRFUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2SW5Sb3V0ZXJBZHZlcnRpc2VtZW50cyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtORF9ST1VURVJfQURWRVJUXTsKKyAgICBtaWItPmljbXA2SW5OZWlnaGJvclNvbGljaXRzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W05EX05FSUdIQk9SX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTkRfTkVJR0hCT1JfQURWRVJUXTsKKyAgICBtaWItPmljbXA2SW5SZWRpcmVjdHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTkRfUkVESVJFQ1RdOworCisgICAgbWliLT5pY21wNk91dE1zZ3MgPSBpY21wc3RhdC5pY3A2c19jYW50ZXJyb3IKKyAgICAgICAgKyBpY21wc3RhdC5pY3A2c190b29mcmVxOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUDZfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXA2T3V0TXNncyArPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W2ldOworICAgIG1pYi0+aWNtcDZPdXREZXN0VW5yZWFjaHMgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X0RTVF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXA2T3V0UGt0VG9vQmlncyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X1BBQ0tFVF9UT09fQklHXTsKKyAgICBtaWItPmljbXA2T3V0VGltZUV4Y2RzID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9USU1FX0VYQ0VFREVEXTsKKyAgICBtaWItPmljbXA2T3V0UGFybVByb2JsZW1zID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9QQVJBTV9QUk9CXTsKKyAgICBtaWItPmljbXA2T3V0RWNob3MgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X0VDSE9fUkVRVUVTVF07CisgICAgbWliLT5pY21wNk91dEVjaG9SZXBsaWVzID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9FQ0hPX1JFUExZXTsKKyAgICBtaWItPmljbXA2T3V0Um91dGVyU29saWNpdHMgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtORF9ST1VURVJfU09MSUNJVF07CisgICAgbWliLT5pY21wNk91dE5laWdoYm9yU29saWNpdHMgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtORF9ORUlHSEJPUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W05EX05FSUdIQk9SX0FEVkVSVF07CisgICAgbWliLT5pY21wNk91dFJlZGlyZWN0cyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbTkRfUkVESVJFQ1RdOworICAgIG1pYi0+aWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXMgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtNTERfTElTVEVORVJfUkVQT1JUXTsKKyAgICBtaWItPmljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9ucyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W01MRF9MSVNURU5FUl9ET05FXTsKKworICAgIHJldHVybiAwOworfQorCisKK2ludAorc3lzY3RsX3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKm1zZ21pYiwKKwkJCSAgaW50ICpmbGFnKQoreworICAgIHN5c2N0bF9yZWFkX2ljbXBfc3RhdChtaWIpOworICAgICpmbGFnID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK3N5c2N0bF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICptc2dtaWIsCisJCQkgICBpbnQgKnN1cHBvcnQpCit7CisgICAgc3RydWN0IGljbXA2c3RhdCBpY21wc3RhdDsKKyAgICBzaXplX3QgICBzaXplID0gc2l6ZW9mKGljbXBzdGF0KTsKKyAgICBpbnQgICAgICBpOworICAgIHN0YXRpYyBpbnQgICAgICBzbmFtZVs0XSA9CisgICAgICAgIHsgQ1RMX05FVCwgUEZfSU5FVDYsIElQUFJPVE9fSUNNUFY2LCBJQ01QVjZDVExfU1RBVFMgfTsKKworICAgIHN5c2N0bF9yZWFkX2ljbXA2X3N0YXQobWliKTsKKworICAgIGlmICgtMSA9PSBzeXNjdGwoc25hbWUsIDQsICZpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoInN5c2N0bF9yZWFkX2ljbXA2X3N0YXQ6IG5ldC5pbmV0Ni5pY21wNi5zdGF0cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJbXNnbWliLT52YWxzW2ldLkluVHlwZSA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtpXTsKKwltc2dtaWItPnZhbHNbaV0uT3V0VHlwZSA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbaV07CisgICAgfQorICAgICpzdXBwb3J0ID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDg0OTczCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX01JQkdST1VQX0tFUk5FTF9TWVNDVExfSAorI2RlZmluZSBfTUlCR1JPVVBfS0VSTkVMX1NZU0NUTF9ICisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpCisKKyNpbmNsdWRlICJrZXJuZWxfbWliLmgiCisKK2ludCAgICAgIHN5c2N0bF9yZWFkX2ljbXBfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKik7CitpbnQgICAgICBzeXNjdGxfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKik7CitpbnQgICAgICBzeXNjdGxfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqLAorCQkgCQkgIGludCAqZmxhZyk7CitpbnQgICAgICBzeXNjdGxfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqLAorCQkJCSAgICBpbnQgKnN1cHBvcnQpOworCisjZW5kaWYgLyogTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAqLworCisjZW5kaWYgLyogX01JQkdST1VQX0tFUk5FTF9TWVNDVExfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaAppbmRleCA0MGE4YzkzLi44N2VmOWQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaApAQCAtMTEsOSArMTEsNiBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZiBIQVZFX1NZU19QQVJBTV9ICiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CkBAIC0yOCw3ICsyNSw3IEBACiAjaWYgSEFWRV9TWVNfVENQSVBTVEFUU19ICiAjaW5jbHVkZSA8c3lzL3RjcGlwc3RhdHMuaD4KICNlbmRpZgotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCkBAIC05MSw3ICs4OCw2IEBACiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCiAKLQogI2lmZGVmIHNvbGFyaXMyCiAjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgogI2Vsc2UKQEAgLTEwMyw2ICs5OSwxMCBAQAogI2lmZGVmIE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMCiAjaW5jbHVkZSAia2VybmVsX25ldGJzZC5oIgogI2VuZGlmCisjaWYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAvKiAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpICovCisjaW5jbHVkZSAia2VybmVsX3N5c2N0bC5oIgorI2VuZGlmCisKIAkvKiBvciBNSUJfeHh4Q09VTlRFUl9TWU1CT0wgfHwgaHB1eDExICovCiAjaWZkZWYgaHB1eAogI2luY2x1ZGUgPHN5cy9taWIuaD4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMKaW5kZXggNTkyMWQ2OC4uYzFlZGQwNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMKQEAgLTEwMSwxMyArMTAxLDggQEAKICMgZW5kaWYKICNlbmRpZgogCi0jaWYgSEFWRV9TVERBUkdfSAotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CiAKICAvKiovCiAvKiogIm1hY3JvcyBhbmQgdmFyaWFibGVzIGZvciByZWdpc3RlcmluZyB0aGUgT0lEIHRyZWUiICovCkBAIC0xNTIsMzEgKzE0NywzNyBAQAogICogc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIGFnZW50LCB3aGljaCBmdW5jdGlvbiByZXR1cm5zIHdoYXQgdmFsdWVzIAogICovCiBzdGF0aWMgc3RydWN0IHZhcmlhYmxlMyBtdGFfdmFyaWFibGVzW10gPSB7Ci0gICAge01UQVJFQ0VJVkVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgMX19LAotICAgIHtNVEFTVE9SRURNRVNTQUdFUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgMn19LAotICAgIHtNVEFUUkFOU01JVFRFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywKLSAgICAgezEsIDEsIDN9fSwKLSAgICB7TVRBUkVDRUlWRURWT0xVTUUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNH19LAotICAgIHtNVEFTVE9SRURWT0xVTUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDV9fSwKLSAgICB7TVRBVFJBTlNNSVRURURWT0xVTUUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgIHtNVEFSRUNFSVZFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDF9fSwKKyAgICB7TVRBU1RPUkVETUVTU0FHRVMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDJ9fSwKKyAgICB7TVRBVFJBTlNNSVRURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCAzfX0sCisgICAge01UQVJFQ0VJVkVEVk9MVU1FLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICB7TVRBU1RPUkVEVk9MVU1FLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA1fX0sCisgICAge01UQVRSQU5TTUlUVEVEVk9MVU1FLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDZ9fSwKIAotICAgIHtNVEFHUk9VUFJFQ0VJVkVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCAyfX0sCi0gICAge01UQUdST1VQUkVKRUNURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDN9fSwKLSAgICB7TVRBR1JPVVBTVE9SRURNRVNTQUdFUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCA0fX0sCi0gICAge01UQUdST1VQVFJBTlNNSVRURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDV9fSwKLSAgICB7TVRBR1JPVVBSRUNFSVZFRFZPTFVNRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDZ9fSwKLSAgICB7TVRBR1JPVVBTVE9SRURWT0xVTUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgN319LAotICAgIHtNVEFHUk9VUFRSQU5TTUlUVEVEVk9MVU1FLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgOH19LAotICAgIHtNVEFHUk9VUE5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDI1fX0sCi0gICAge01UQUdST1VQSElFUkFSQ0hZLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgMzF9fQorICAgIHtNVEFHUk9VUFJFQ0VJVkVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCAyfX0sCisgICAge01UQUdST1VQUkVKRUNURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDN9fSwKKyAgICB7TVRBR1JPVVBTVE9SRURNRVNTQUdFUywgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCA0fX0sCisgICAge01UQUdST1VQVFJBTlNNSVRURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDV9fSwKKyAgICB7TVRBR1JPVVBSRUNFSVZFRFZPTFVNRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDZ9fSwKKyAgICB7TVRBR1JPVVBTVE9SRURWT0xVTUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgN319LAorICAgIHtNVEFHUk9VUFRSQU5TTUlUVEVEVk9MVU1FLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgOH19LAorICAgIHtNVEFHUk9VUE5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDI1fX0sCisgICAge01UQUdST1VQSElFUkFSQ0hZLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgMzF9fQogfTsKICAvKiovCiAvKiogIm90aGVyIG1hY3JvcyBhbmQgc3RydWN0dXJlcyIgKi8KQEAgLTM0MiwzNyArMzQzLDE1IEBACiAgKiAgICAuLi46ICAgICAgICAgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIGluc2VydCBpbnRvIHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZwogICoKICAqLwotI2lmIEhBVkVfU1REQVJHX0gKLSAgICBzdGF0aWMgdm9pZAorc3RhdGljIHZvaWQKIHByaW50X2Vycm9yKGludCBwcmlvcml0eSwgQk9PTCBjb25maWcsIEJPT0wgY29uZmlnX29ubHksCiAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0jZWxzZQotICAgIHN0YXRpYyB2b2lkCi1wcmludF9lcnJvcih2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKICAgICB2YV9saXN0ICAgICAgICAgYXA7CiAgICAgY2hhciAgICAgICAgICAgIGJ1ZmZlclsyICogRklMRU5BTUVMRU4gKyAyMDBdOyAgICAgIC8qIEkga25vdywgdGhhdCdzIG5vdCBwZXJmZWN0bHkgc2FmZSwgYnV0IHNpbmNlIEkgZG9uJ3QgdXNlIG1vcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhbiB0d28gZmlsZW5hbWVzIGluIG9uZSBlcnJvciBtZXNzYWdlLCB0aGF0IHNob3VsZCBiZSBlbm91Z2ggKi8KIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKLSNlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OwotICAgIEJPT0wgICAgICAgICAgICBjb25maWc7Ci0gICAgQk9PTCAgICAgICAgICAgIGNvbmZpZ19vbmx5OwotICAgIGNvbnN0IGNoYXIgICAgICpmdW5jdGlvbjsKLSAgICBjb25zdCBjaGFyICAgICAqZm9ybWF0OwotCi0gICAgdmFfc3RhcnQoYXApOwotICAgIHByaW9yaXR5ID0gdmFfYXJnKGFwLCBpbnQpOwotICAgIGNvbmZpZyA9IHZhX2FyZyhhcCwgQk9PTCk7Ci0gICAgY29uZmlnX29ubHkgPSB2YV9hcmcoYXAsIEJPT0wpOwotICAgIGZ1bmN0aW9uID0gdmFfYXJnKGFwLCBjaGFyICopOwotICAgIGZvcm1hdCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLSNlbmRpZgotCiAgICAgdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgYXApOwogCiAgICAgaWYgKGNvbmZpZykgewpAQCAtMTA1NCw5ICsxMDMzLDcgQEAKICAgICAgICAgb3Blbl9zZW5kbWFpbHN0KFRSVUUpOwogCiAgICAgICAgIGlmIChzZW5kbWFpbHN0X2ZoID09IC0xKSB7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAgc3RyW0ZJTEVOQU1FTEVOICsgNTBdOwotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJjb3VsZG4ndCBvcGVuIGZpbGUgXCIlc1wiIiwgc2VuZG1haWxzdF9mbik7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHN0cik7CisJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJjb3VsZG4ndCBvcGVuIGZpbGUgXCIlc1wiIiwgc2VuZG1haWxzdF9mbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCmluZGV4IDM0ODMwZjIuLmVhY2UyZTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKQEAgLTI3LDggKzI3LDYgQEAKICNpbmNsdWRlICJpcC5oIgogI2luY2x1ZGUgImtlcm5lbC5oIgogI2luY2x1ZGUgImludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAKICNlbHNlIC8qICFORVRTTk1QX0NBTl9VU0VfU1lTQ1RMICovCiAKQEAgLTQyLDExICs0MCw3IEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTk0LDI4ICs4OCwyOCBAQAogI2VuZGlmCiAjdW5kZWYJS0VSTkVMCiAjaWZkZWYgUlRFTlRSWV80XzQKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUCiAjZGVmaW5lIHJ0X3VuaXQgcnRfcmVmY250ICAgICAgIC8qIFJldXNlIHRoaXMgZmllbGQgZm9yIGRldmljZSAjICovCiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAogI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQogI2VuZGlmCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJURU5UUllfNF8zICovCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0gKICNkZWZpbmUgcnRfaGFzaCBydF9wYWQxCiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1JFRkNOVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1JFRkNOVAogI2lmbmRlZiBocHV4MTAKICNkZWZpbmUgcnRfcmVmY250IHJ0X3BhZDIKICNlbmRpZgogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VU0UKICNkZWZpbmUgcnRfdXNlIHJ0X3BhZDMKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQKICNkZWZpbmUgcnRfdW5pdCBydF9yZWZjbnQgICAgICAgLyogUmV1c2UgdGhpcyBmaWVsZCBmb3IgZGV2aWNlICMgKi8KICNlbmRpZgogI2VuZGlmCkBAIC0xNTEsMTYgKzE0NSwyMyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpZiBIQVZFX05MSVNUX0gKICNpbmNsdWRlIDxubGlzdC5oPgogI2VuZGlmCiAKICNpZmRlZiBzb2xhcmlzMgogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKKy8qIFNvbGFyaXMgMi42LzcgbmVlZCBzeXMvc3RyZWFtLmggKG1ibGtfdCkgdG8gaW5jbHVkZSBpbmV0L2lwLmggKi8KKyNpZmRlZiBIQVZFX1NZU19TVFJFQU1fSAorI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNlbmRpZgorLyogU29sYXJpcyAyLjYgbmVlZHMgaW5ldC9jb21tb24uaCAodTE2KSB0byBpbmNsdWRlIGluZXQvaXAuaCAqLworI2lmZGVmIEhBVkVfSU5FVF9DT01NT05fSAorI2luY2x1ZGUgPGluZXQvY29tbW9uLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lORVRfSVBfSAorI2luY2x1ZGUgPGluZXQvaXAuaD4KKyNlbmRpZiAvKiBIQVZFX0lORVRfSVBfSCAqLwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NZU19TWVNDVExfSApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMKaW5kZXggZjZhNGYzZS4uNTgyMGVlMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jCkBAIC02MCwxMCArNjAsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC03NiwxMCArNzIsMTAgQEAKIAogI2lmICFkZWZpbmVkIChXSU4zMikgJiYgIWRlZmluZWQgKGN5Z3dpbikKIAotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCiAjZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNICiAjZGVmaW5lIHJ0X2hhc2ggcnRfcGFkMQogI2VuZGlmCiAKQEAgLTI2OSw3ICsyNjUsNyBAQAogfQogCiAKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAogI3VuZGVmIHJ0X2RzdAogI2VuZGlmCiAKQEAgLTMxMyw3ICszMDksNyBAQAogICAgICAgICAgICAgcmV0dXJuICgmcnRjYWNoZVtpXSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBydGVudCAgICoKQEAgLTMyOSw3ICszMjUsNyBAQAogICAgICAgICAgICAgcmV0dXJuICgmcnRjYWNoZVtpXSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5VTEw7CiAKIH0KIApAQCAtMzUxLDcgKzM0Nyw3IEBACiBzdHJ1Y3QgcnRlbnQgICAqCiBjYWNoZUtlcm5lbFJURSh1X2xvbmcgZHN0KQogewotICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBmb3Igbm93ICovCisgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGZvciBub3cgKi8KICAgICAvKgogICAgICAqIC4uLi4uLiAKICAgICAgKi8KQEAgLTU5Nyw3ICs1OTMsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lQSExQQVBJX0gpICAvKiBXSU4zMiBjeWd3aW4gKi8KICNpbmNsdWRlIDxpcGhscGFwaS5oPgogCiBleHRlcm4gUE1JQl9JUEZPUldBUkRST1cgcm91dGVfcm93OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMKaW5kZXggOTBhMGFiYS4uODVhNDA5OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jCkBAIC0yLDkgKzIsMTMgQEAKICAqICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc25tcFNldFNlcmlhbE5vIFRlc3RBbmRJbmNyIGNvdW50ZXIKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh3YXRjaGVyX3NwaW5sb2NrKQorCisKICNpbmNsdWRlICJzZXRTZXJpYWxOby5oIgogCiAvKgpAQCAtNjAsMTMgKzY0LDIxIEBACiAgICAgLyoKICAgICAgKiBSZWdpc3RlciAnc2V0c2VyaWFsbm8nIGFzIGEgd2F0Y2hlZCBzcGlubG9jayBvYmplY3QKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NwaW5sb2NrKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFNldFNlcmlhbE5vIiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NlcmlhbF9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc2V0X3NlcmlhbF9vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNldHNlcmlhbG5vICk7Ci0KKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NwaW5sb2NrKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFNldFNlcmlhbE5vIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NlcmlhbF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc2V0X3NlcmlhbF9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2V0c2VyaWFsbm8gKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgREVCVUdNU0dUTCgoInNjYWxhcl9pbnQiLCAiRG9uZSBpbml0YWxpemluZyBleGFtcGxlIHNjYWxhciBpbnRcbiIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMKaW5kZXggYjE0M2JmNy4uMWViZTY0YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jCkBAIC0xLDk3ICsxLDIwIEBACi0vKgotICogIFNOTVB2MSBNSUIgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBzbm1wLmMKLSAqCi0gKi8KLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAic25tcF9taWIuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAidXBkYXRlcy5oIgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCi0JICoKLQkgKiAgS2VybmVsICYgaW50ZXJmYWNlIGluZm9ybWF0aW9uLAotCSAqICAgYW5kIGludGVybmFsIGZvcndhcmQgZGVjbGFyYXRpb25zCi0JICoKLQkgKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IG9pZCBzbm1wX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxMSB9OwogCi1leHRlcm4gbG9uZyAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwczsKLWV4dGVybiBpbnQgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0OwotaW50ICAgICAgICAgICAgIG9sZF9zbm1wX2VuYWJsZWF1dGhlbnRyYXBzOwotCi0vKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIEluaXRpYWxpc2F0aW9uICYgY29tbW9uIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBkZWZpbmUgdGhlIHN0cnVjdHVyZSB3ZSdyZSBnb2luZyB0byBhc2sgdGhlIGFnZW50IHRvIHJlZ2lzdGVyIG91cgotICogaW5mb3JtYXRpb24gYXQgCi0gKi8KLXN0cnVjdCB2YXJpYWJsZTEgc25tcF92YXJpYWJsZXNbXSA9IHsKLSAgICB7U05NUElOUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezF9fSwKLSAgICB7U05NUE9VVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyfX0sCi0gICAge1NOTVBJTkJBRFZFUlNJT05TLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7M319LAotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgIHtTTk1QSU5CQURDT01NVU5JVFlOQU1FUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezR9fSwKLSAgICB7U05NUElOQkFEQ09NTVVOSVRZVVNFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezV9fSwKLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotICAgIHtTTk1QSU5BU05QQVJTRUVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezZ9fSwKLSAgICB7U05NUElOVE9PQklHUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezh9fSwKLSAgICB7U05NUElOTk9TVUNITkFNRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHs5fX0sCi0gICAge1NOTVBJTkJBRFZBTFVFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezEwfX0sCi0gICAge1NOTVBJTlJFQURPTkxZUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezExfX0sCi0gICAge1NOTVBJTkdFTkVSUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxMn19LAotICAgIHtTTk1QSU5UT1RBTFJFUVZBUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxM319LAotICAgIHtTTk1QSU5UT1RBTFNFVFZBUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxNH19LAotICAgIHtTTk1QSU5HRVRSRVFVRVNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE1fX0sCi0gICAge1NOTVBJTkdFVE5FWFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTZ9fSwKLSAgICB7U05NUElOU0VUUkVRVUVTVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxN319LAotICAgIHtTTk1QSU5HRVRSRVNQT05TRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxOH19LAotICAgIHtTTk1QSU5UUkFQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE5fX0sCi0gICAge1NOTVBPVVRUT09CSUdTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjB9fSwKLSAgICB7U05NUE9VVE5PU1VDSE5BTUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjF9fSwKLSAgICB7U05NUE9VVEJBRFZBTFVFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezIyfX0sCi0gICAge1NOTVBPVVRHRU5FUlJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjR9fSwKLSAgICB7U05NUE9VVEdFVFJFUVVFU1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjV9fSwKLSAgICB7U05NUE9VVEdFVE5FWFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjZ9fSwKLSAgICB7U05NUE9VVFNFVFJFUVVFU1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7Mjd9fSwKLSAgICB7U05NUE9VVEdFVFJFU1BPTlNFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI4fX0sCi0gICAge1NOTVBPVVRUUkFQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI5fX0sCi0gICAge1NOTVBFTkFCTEVBVVRIRU5UUkFQUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXAsIDEsIHszMH19LAotICAgIHtTTk1QU0lMRU5URFJPUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHszMX19LAotICAgIHtTTk1QUFJPWFlEUk9QUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezMyfX0KLX07Ci0KLS8qCi0gKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKLSAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCi0gKi8KLW9pZCAgICAgICAgICAgICBzbm1wX3ZhcmlhYmxlc19vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgMTEgfTsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotZXh0ZXJuIG9pZCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkW107Ci1leHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuOwotZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfY291bnQ7Ci0jZW5kaWYKK2V4dGVybiBsb25nIHNubXBfZW5hYmxlYXV0aGVudHJhcHM7CitleHRlcm4gaW50IHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQ7CiAKIHN0YXRpYyBpbnQKIHNubXBfZW5hYmxlYXV0aGVudHJhcHNfc3RvcmUoaW50IGEsIGludCBiLCB2b2lkICpjLCB2b2lkICpkKQpAQCAtMTA2LDE0ICsyOSwxMDMgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAoraGFuZGxlX3RydXRodmFsdWUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpIHsKKyAgICAgICAgaW50IHJlcyA9IG5ldHNubXBfY2hlY2tfdmJfdHJ1dGh2YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiKTsKKyAgICAgICAgaWYgKHJlcyAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgcmVzKTsKKyAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBuZXRzbm1wX21pYl9oYW5kbGVyKgorbmV0c25tcF9nZXRfdHJ1dGh2YWx1ZSh2b2lkKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIqIGhuZCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoInRydXRodmFsdWUiLCBoYW5kbGVfdHJ1dGh2YWx1ZSk7CisgICAgaWYgKGhuZCkKKyAgICAgICAgaG5kLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CisgICAgcmV0dXJuIGhuZDsKK30KKworc3RhdGljIGludAoraGFuZGxlX3NubXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKwkgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKwkgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisJICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICBjYXNlIE1PREVfR0VUOgorCXsKKwkgICAgb2lkIGlkeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbT0lEX0xFTkdUSChzbm1wX29pZCldOworCSAgICBzd2l0Y2goaWR4KSB7CisJICAgIGNhc2UgNzoKKwkgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIGNhc2UgMzA6CisJCW5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisJCQkJCSAgU05NUF9OT1NVQ0hPQkpFQ1QpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJeworCQkgICAgdV9pbnQgdmFsdWUgPQorCQkJc25tcF9nZXRfc3RhdGlzdGljKGlkeCAtIDEgKyBTVEFUX1NOTVBJTlBLVFMpOworCQkgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorCQkJCQkgICAgICh1X2NoYXIgKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCWJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9zbm1wXG4iLCByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitleHRlcm4gb2lkICAgICAgc3lzdGVtX21vZHVsZV9vaWRbXTsKK2V4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW47CitleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9jb3VudDsKKyNlbmRpZgorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXAgbW9kdWxlICovCiB2b2lkCiBpbml0X3NubXBfbWliKHZvaWQpCiB7Ci0gICAgLyoKLSAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKLSAgICAgKi8KLSAgICBSRUdJU1RFUl9NSUIoIm1pYklJL3NubXAiLCBzbm1wX3ZhcmlhYmxlcywgdmFyaWFibGUxLAotICAgICAgICAgICAgICAgICBzbm1wX3ZhcmlhYmxlc19vaWQpOworICAgIERFQlVHTVNHVEwoKCJzbm1wIiwgIkluaXRpYWxpemluZ1xuIikpOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAoCisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKwkibWliSUkvc25tcCIsIGhhbmRsZV9zbm1wLCBzbm1wX29pZCwgT0lEX0xFTkdUSChzbm1wX29pZCksCisJSEFORExFUl9DQU5fUk9OTFkpLCAxLCAzMik7CisgICAgeworICAgICAgICBjb25zdCBvaWQgc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxMSwgMzAsIDAgfTsKKwlzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gZW5hYmxlYXV0aGVuX2luZm87CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9CisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3NubXBFbmFibGVBdXRoZW5UcmFwcyIsCisgICAgICAgICAgICAgICAgc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgJnNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgbmV0c25tcF9nZXRfdHJ1dGh2YWx1ZSgpKTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKAorICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKwkJJmVuYWJsZWF1dGhlbl9pbmZvLAorICAgICAgICAgICAgICAgICZzbm1wX2VuYWJsZWF1dGhlbnRyYXBzLCBzaXplb2Yoc25tcF9lbmFibGVhdXRoZW50cmFwcyksCisgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOworICAgIH0KIAogI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCiAgICAgaWYgKCsrc3lzdGVtX21vZHVsZV9jb3VudCA9PSAzKQpAQCAtMTIzLDEzMSArMTM1LDMgQEAKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwc19zdG9yZSwgTlVMTCk7CiB9Ci0KLS8qCi0gKiBoZWFkZXJfc25tcCguLi4KLSAqIEFyZ3VtZW50czoKLSAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCi0gKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKLSAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCi0gKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKLSAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCi0gKiB3cml0ZV9tZXRob2QKLSAqIAotICovCi0KLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgotCSAqCi0JICogIFN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLQkgKgkoYWN0dWFsbHkgY29tbW9uISkKLQkgKgotCSAqKioqKioqKioqKioqKioqKioqKiovCi0KLQotdV9jaGFyICAgICAgICAgKgotdmFyX3NubXAoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7Ci0KLSAgICAqd3JpdGVfbWV0aG9kID0gMDsgICAgICAgICAgLyogYXNzdW1lIGl0IGlzbnQgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCi0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOyAgICAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KLQotICAgIGlmIChoZWFkZXJfZ2VuZXJpYyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKQotICAgICAgICA9PSBNQVRDSF9GQUlMRUQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLiAKLSAgICAgKi8KLSAgICBpZiAodnAtPm1hZ2ljID09IFNOTVBFTkFCTEVBVVRIRU5UUkFQUykgewotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcDsKLSAgICAgICAgbG9uZ19yZXR1cm4gPSBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoKHZwLT5tYWdpYyA+PSAxKQotICAgICAgICAgICAgICAgJiYgKHZwLT5tYWdpYyA8PQotICAgICAgICAgICAgICAgICAgIChTVEFUX1NOTVBfU1RBVFNfRU5EIC0gU1RBVF9TTk1QX1NUQVRTX1NUQVJUICsgMSkpKSB7Ci0gICAgICAgIGxvbmdfcmV0ID0KLSAgICAgICAgICAgIHNubXBfZ2V0X3N0YXRpc3RpYyh2cC0+bWFnaWMgKyBTVEFUX1NOTVBfU1RBVFNfU1RBUlQgLSAxKTsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBvbmx5IGZvciBzbm1wRW5hYmxlQXV0aGVuVHJhcHM6Ci0gKi8KLQotaW50Ci13cml0ZV9zbm1wKGludCBhY3Rpb24sCi0gICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCi0gICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCi0gICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKLXsKLSAgICBsb25nICAgICAgICAgICAgaW50dmFsID0gMDsKLQotICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgY2FzZSBSRVNFUlZFMTogICAgICAgICAgICAgLyogQ2hlY2sgdmFsdWVzIGZvciBhY2NlcHRhYmlsaXR5ICovCi0gICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX0lOVEVHRVIpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zbm1wX21pYiIsICIleCBub3QgaW50ZWdlciB0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcl92YWxfdHlwZSkpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKLSAgICAgICAgfQotCi0gICAgICAgIGludHZhbCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7Ci0gICAgICAgIGlmIChpbnR2YWwgIT0gMSAmJiBpbnR2YWwgIT0gMikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3NubXBfbWliIiwgIm5vdCB2YWxpZCAleFxuIiwgaW50dmFsKSk7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCA8IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGUgb2JqZWN0IGlzIHNldCBpbiBhIHJlYWQtb25seSBjb25maWd1cmF0aW9uIGZpbGUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSRVNFUlZFMjogICAgICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGFuZCBzaW1pbGFyIHJlc291cmNlcyAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFVzaW5nIHN0YXRpYyB2YXJpYWJsZXMsIHNvIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSAKLSAgICAgICAgICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQ1RJT046ICAgICAgICAgICAgICAgLyogUGVyZm9ybSB0aGUgU0VUIGFjdGlvbiAoaWYgcmV2ZXJzaWJsZSkgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBTYXZlIHRoZSBvbGQgdmFsdWUsIGluIGNhc2Ugb2YgVU5ETyAKLSAgICAgICAgICovCi0gICAgICAgIGludHZhbCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7Ci0gICAgICAgIG9sZF9zbm1wX2VuYWJsZWF1dGhlbnRyYXBzID0gc25tcF9lbmFibGVhdXRoZW50cmFwczsKLSAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwcyA9IGludHZhbDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFVORE86ICAgICAgICAgICAgICAgICAvKiBSZXZlcnNlIHRoZSBTRVQgYWN0aW9uIGFuZCBmcmVlIHJlc291cmNlcyAqLwotCi0gICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgPSBvbGRfc25tcF9lbmFibGVhdXRoZW50cmFwczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENPTU1JVDoKLSAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCA9IDE7Ci0gICAgICAgIHNubXBfc2F2ZV9wZXJzaXN0ZW50KG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKLSAgICAgICAgKHZvaWQpIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19MSUJSQVJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsIE5VTEwpOwotICAgICAgICBzbm1wX2NsZWFuX3BlcnNpc3RlbnQobmV0c25tcF9kc19nZXRfc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGUkVFOiAgICAgICAgICAgICAgICAgLyogRnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oCmluZGV4IDY0MWYxMWUuLjM5ZTBhM2MgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaApAQCAtMSw4MyArMSw5IEBACi0vKgotICogIFNOTVAgTUlCIGdyb3VwIGludGVyZmFjZSAtIHNubXAuaAotICoKLSAqLwogI2lmbmRlZiBfTUlCR1JPVVBfU05NUF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9TTk1QX0gKIAotc3RydWN0IHZhcmlhYmxlOwotCi1leHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc25tcDsKLWV4dGVybiBXcml0ZU1ldGhvZCB3cml0ZV9zbm1wOworY29uZmlnX3JlcXVpcmUobWliSUkvdXBkYXRlcykKK2NvbmZpZ19leGNsdWRlKG1pYklJL3NubXBfbWliXzVfNSkKIAogdm9pZCAgICAgICAgICAgIGluaXRfc25tcF9taWIodm9pZCk7CiAKLWV4dGVybiBpbnQgICAgICBzbm1wX2lucGt0czsgICAgLyogIDEgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRwa3RzOyAgIC8qICAyIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luYmFkdmVyc2lvbnM7ICAgICAvKiAgMyAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luYmFkY29tbXVuaXR5bmFtZXM7ICAgICAgIC8qICA0IC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5iYWRjb21tdW5pdHl1c2VzOyAgICAgICAgLyogIDUgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmFzbnBhcnNlZXJyb3JzOyAgLyogIDYgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnRvb2JpZ3M7IC8qICA4IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2lubm9zdWNobmFtZXM7ICAgICAvKiAgOSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmJhZHZhbHVlczsgICAgICAgLyogMTAgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5yZWFkb25seXM7ICAgICAgIC8qIDExIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luZ2VuZXJyczsgLyogMTIgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW50b3RhbHJlcXZhcnM7ICAgIC8qIDEzIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2ludG90YWxzZXR2YXJzOyAgICAvKiAxNCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmdldHJlcXVlc3RzOyAgICAgLyogMTUgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5nZXRuZXh0czsgICAgICAgIC8qIDE2IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luc2V0cmVxdWVzdHM7ICAgICAvKiAxNyAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmdldHJlc3BvbnNlczsgICAgLyogMTggLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW50cmFwczsgICAvKiAxOSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXR0b29iaWdzOyAgICAgICAgLyogMjAgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0bm9zdWNobmFtZXM7ICAgIC8qIDIxIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dGJhZHZhbHVlczsgICAgICAvKiAyMiAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRnZW5lcnJzOyAgICAgICAgLyogMjQgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0Z2V0cmVxdWVzdHM7ICAgIC8qIDI1IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dGdldG5leHRzOyAgICAgICAvKiAyNiAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRzZXRyZXF1ZXN0czsgICAgLyogMjcgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0Z2V0cmVzcG9uc2VzOyAgIC8qIDI4IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dHRyYXBzOyAgLyogMjkgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGxvbmcgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHM7IC8qIDMwIC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfc2lsZW50ZHJvcHM7ICAgICAgIC8qIDMxIC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfcHJveHlkcm9wczsgICAgICAgIC8qIDMyIC0gY3VycmVudCAqLwotCi1leHRlcm4gY2hhciAgICAqc25tcF90cmFwc2luazsKLWV4dGVybiBjaGFyICAgICpzbm1wX3RyYXBjb21tdW5pdHk7Ci0KLQotI2RlZmluZSBTTk1QSU5QS1RTCQkxCi0jZGVmaW5lIFNOTVBPVVRQS1RTCQkyCi0jZGVmaW5lIFNOTVBJTkJBRFZFUlNJT05TCTMKLSNkZWZpbmUgU05NUElOQkFEQ09NTVVOSVRZTkFNRVMJNAotI2RlZmluZSBTTk1QSU5CQURDT01NVU5JVFlVU0VTCTUKLSNkZWZpbmUgU05NUElOQVNOUEFSU0VFUlJPUlMJNgotI2RlZmluZSBTTk1QSU5CQURUWVBFUwkJNwotI2RlZmluZSBTTk1QSU5UT09CSUdTCQk4Ci0jZGVmaW5lIFNOTVBJTk5PU1VDSE5BTUVTCTkKLSNkZWZpbmUgU05NUElOQkFEVkFMVUVTCQkxMAotI2RlZmluZSBTTk1QSU5SRUFET05MWVMJCTExCi0jZGVmaW5lIFNOTVBJTkdFTkVSUlMJCTEyCi0jZGVmaW5lIFNOTVBJTlRPVEFMUkVRVkFSUwkxMwotI2RlZmluZSBTTk1QSU5UT1RBTFNFVFZBUlMJMTQKLSNkZWZpbmUgU05NUElOR0VUUkVRVUVTVFMJMTUKLSNkZWZpbmUgU05NUElOR0VUTkVYVFMJCTE2Ci0jZGVmaW5lIFNOTVBJTlNFVFJFUVVFU1RTCTE3Ci0jZGVmaW5lIFNOTVBJTkdFVFJFU1BPTlNFUwkxOAotI2RlZmluZSBTTk1QSU5UUkFQUwkJMTkKLSNkZWZpbmUgU05NUE9VVFRPT0JJR1MJCTIwCi0jZGVmaW5lIFNOTVBPVVROT1NVQ0hOQU1FUwkyMQotI2RlZmluZSBTTk1QT1VUQkFEVkFMVUVTCTIyCi0jZGVmaW5lIFNOTVBPVVRSRUFET05MWVMJMjMKLSNkZWZpbmUgU05NUE9VVEdFTkVSUlMJCTI0Ci0jZGVmaW5lIFNOTVBPVVRHRVRSRVFVRVNUUwkyNQotI2RlZmluZSBTTk1QT1VUR0VUTkVYVFMJCTI2Ci0jZGVmaW5lIFNOTVBPVVRTRVRSRVFVRVNUUwkyNwotI2RlZmluZSBTTk1QT1VUR0VUUkVTUE9OU0VTCTI4Ci0jZGVmaW5lIFNOTVBPVVRUUkFQUwkJMjkKLSNkZWZpbmUgU05NUEVOQUJMRUFVVEhFTlRSQVBTCTMwCi0jZGVmaW5lIFNOTVBTSUxFTlREUk9QUwkJMzEKLSNkZWZpbmUgU05NUFBST1hZRFJPUFMJCTMyCi0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1NOTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNlZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMKQEAgLTAsMCArMSwxMzIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworI2luY2x1ZGUgInNubXBfbWliXzVfNS5oIgorI2luY2x1ZGUgInVwZGF0ZXMuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVscGVyX3N0YXRpc3RpY3MpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHJ1dGh2YWx1ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworI2RlZmluZSBTTk1QX09JRCAxLCAzLCA2LCAxLCAyLCAxLCAxMQorCitzdGF0aWMgb2lkIHNubXBfb2lkW10gPSB7IFNOTVBfT0lEIH07CisKK2V4dGVybiBsb25nIHNubXBfZW5hYmxlYXV0aGVudHJhcHM7CitleHRlcm4gaW50IHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQ7CisKK3N0YXRpYyBpbnQKK3NubXBfZW5hYmxlYXV0aGVudHJhcHNfc3RvcmUoaW50IGEsIGludCBiLCB2b2lkICpjLCB2b2lkICpkKQoreworICAgIGNoYXIgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGX1NNQUxMXTsKKworICAgIGlmIChzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0ID4gMCkgeworICAgICAgICBzbnByaW50ZihsaW5lLCBTTk1QX01BWEJVRl9TTUFMTCwgInBhdXRodHJhcGVuYWJsZSAlbGQiLAorICAgICAgICAgICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzKTsKKyAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraGFuZGxlX3RydXRodmFsdWUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpIHsKKyAgICAgICAgaW50IHJlcyA9IG5ldHNubXBfY2hlY2tfdmJfdHJ1dGh2YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiKTsKKyAgICAgICAgaWYgKHJlcyAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgcmVzKTsKKyAgICB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlcioKK25ldHNubXBfZ2V0X3RydXRodmFsdWUodm9pZCkKK3sKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyKiBobmQgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJ0cnV0aHZhbHVlIiwgaGFuZGxlX3RydXRodmFsdWUpOworICAgIGlmIChobmQpCisgICAgICAgIGhuZC0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUOworICAgIHJldHVybiBobmQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9zbm1wKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisJICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisJICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorCSAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgc3dpdGNoKHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbT0lEX0xFTkdUSChzbm1wX29pZCldKSB7CisgICAgY2FzZSA3OgorICAgIGNhc2UgMjM6CisgICAgY2FzZSAzMDoKKyAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitleHRlcm4gb2lkICAgICAgc3lzdGVtX21vZHVsZV9vaWRbXTsKK2V4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW47CitleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9jb3VudDsKKyNlbmRpZgorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXAgbW9kdWxlICovCit2b2lkCitpbml0X3NubXBfbWliXzVfNSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJzbm1wIiwgIkluaXRpYWxpemluZ1xuIikpOworCisgICAgTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUigKKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAibWliSUkvc25tcCIsIGhhbmRsZV9zbm1wLCBzbm1wX29pZCwgT0lEX0xFTkdUSChzbm1wX29pZCksCisgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgIDEsIFNOTVApOworICAgIHsKKyAgICAgICAgb2lkIHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWRbXSA9IHsgU05NUF9PSUQsIDMwLCAwIH07CisJc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIGVuYWJsZWF1dGhlbl9pbmZvOworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc25tcEVuYWJsZUF1dGhlblRyYXBzIiwKKyAgICAgICAgICAgICAgICBzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCAmc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCk7CisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zbm1wRW5hYmxlQXV0aGVuVHJhcHMiLAorICAgICAgICAgICAgICAgIHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgJnNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgbmV0c25tcF9nZXRfdHJ1dGh2YWx1ZSgpKTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKAorICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKwkJJmVuYWJsZWF1dGhlbl9pbmZvLAorICAgICAgICAgICAgICAgICZzbm1wX2VuYWJsZWF1dGhlbnRyYXBzLCBzaXplb2Yoc25tcF9lbmFibGVhdXRoZW50cmFwcyksCisgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOworICAgIH0KKworI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisgICAgaWYgKCsrc3lzdGVtX21vZHVsZV9jb3VudCA9PSAzKQorICAgICAgICBSRUdJU1RFUl9TWVNPUl9UQUJMRShzeXN0ZW1fbW9kdWxlX29pZCwgc3lzdGVtX21vZHVsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIFNOTVB2MiBlbnRpdGllcyIpOworI2VuZGlmCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHNfc3RvcmUsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmggYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU2MTAzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgKQEAgLTAsMCArMSw0IEBACitjb25maWdfcmVxdWlyZShtaWJJSS91cGRhdGVzKQorY29uZmlnX2V4Y2x1ZGUobWliSUkvc25tcF9taWIpCisKK3ZvaWQgICAgICAgICAgICBpbml0X3NubXBfbWliXzVfNSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYwppbmRleCBmOGZmYTUwLi5lZDI2OTE5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jCkBAIC0xLDM0NCArMSwyOTUgQEAKLS8qCi0gKiAgVGVtcGxhdGUgTUlCIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gc3lzT1JUYWJsZS5jCi0gKgotICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCi0jaW5jbHVkZSAic25tcGQuaCIKIAotI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLSNpbmNsdWRlICJhZ2VudHgvc3ViYWdlbnQuaCIKLSNpbmNsdWRlICJhZ2VudHgvY2xpZW50LmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXIpCiAKIAotc3RhdGljIGludAotX3JlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7Ci1zdGF0aWMgaW50Ci1fdW5yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwotc3RhdGljIGludAotX3VucmVnaXN0ZXJfc3lzT1JfYnlfc2Vzc2lvbl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKLQotc3RydWN0IHRpbWV2YWwgIHN5c09SX2xhc3RjaGFuZ2U7Ci1zdGF0aWMgc3RydWN0IHN5c09SVGFibGUgKnRhYmxlID0gTlVMTDsKLXN0YXRpYyBpbnQgICAgICBudW1FbnRyaWVzID0gMDsKKy8qKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAqLwordHlwZWRlZiBzdHJ1Y3Qgc3lzT1JUYWJsZV9lbnRyeV9zIHsKKyAgICBuZXRzbm1wX2luZGV4ICAgICAgICAgICAgb2lkX2luZGV4OworICAgIG9pZCAgICAgICAgICAgICAgICAgICAgICBzeXNPUkluZGV4OworICAgIGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiBkYXRhOworfSBzeXNPUlRhYmxlX2VudHJ5OwogCiAvKgotICogZGVmaW5lIHRoZSBzdHJ1Y3R1cmUgd2UncmUgZ29pbmcgdG8gYXNrIHRoZSBhZ2VudCB0byByZWdpc3RlciBvdXIKLSAqIGluZm9ybWF0aW9uIGF0IAorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgc3lzT1JUYWJsZQogICovCi1zdHJ1Y3QgdmFyaWFibGUxIHN5c09SVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge1NZU09SVEFCTEVJRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9zeXNPUlRhYmxlLCAxLCB7Mn19LAotICAgIHtTWVNPUlRBQkxFREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfc3lzT1JUYWJsZSwgMSwgezN9fSwKLSAgICB7U1lTT1JUQUJMRVVQVElNRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9zeXNPUlRhYmxlLCAxLCB7NH19Ci19OworI2RlZmluZSBDT0xVTU5fU1lTT1JJTkRFWAkxCisjZGVmaW5lIENPTFVNTl9TWVNPUklECQkyCisjZGVmaW5lIENPTFVNTl9TWVNPUkRFU0NSCTMKKyNkZWZpbmUgQ09MVU1OX1NZU09SVVBUSU1FCTQKIAotLyoKLSAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQotICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKLSAqLwotb2lkICAgICAgICAgICAgIHN5c09SVGFibGVfdmFyaWFibGVzX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCAxLCA5LCAxIH07CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnRhYmxlID0gTlVMTDsKK3N0YXRpYyB1X2xvbmcgICAgICAgICAgICAgc3lzT1JMYXN0Q2hhbmdlOworc3RhdGljIG9pZCAgICAgICAgICAgICAgICBzeXNPUk5leHRJbmRleCA9IDE7CisKKy8qKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAqLworc3RhdGljIHZvaWQKK3JlZ2lzdGVyX2ZvcmVhY2goY29uc3Qgc3RydWN0IHN5c09SVGFibGUqIGRhdGEsIHZvaWQqIGR1bW15KQoreworICAgIHN5c09SVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgc3lzT1JMYXN0Q2hhbmdlID0gZGF0YS0+T1JfdXB0aW1lOworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHN5c09SVGFibGVfZW50cnkpOworICAgIGlmICghZW50cnkpIHsKKwlzbm1wX2xvZyhMT0dfRVJSLAorCQkgImNvdWxkIG5vdCBhbGxvY2F0ZSBzdG9yYWdlLCBzeXNPUlRhYmxlIGlzIGluY29uc2lzdGVudFxuIik7CisgICAgfSBlbHNlIHsKKwljb25zdCBvaWQgZmlyc3ROZXh0ID0gc3lzT1JOZXh0SW5kZXg7CisJbmV0c25tcF9pdGVyYXRvciogaXQgPSBDT05UQUlORVJfSVRFUkFUT1IodGFibGUpOworCisJZG8geworCSAgICBjb25zdCBzeXNPUlRhYmxlX2VudHJ5KiB2YWx1ZTsKKwkgICAgY29uc3Qgb2lkIGN1ciA9IHN5c09STmV4dEluZGV4OworCisJICAgIGlmIChzeXNPUk5leHRJbmRleCA9PSBTTk1QX01JTihNQVhfU1VCSUQsIDIxNDc0ODM2NDdVTCkpCisJCXN5c09STmV4dEluZGV4ID0gMTsKKwkgICAgZWxzZQorCQkrK3N5c09STmV4dEluZGV4OworCisJICAgIGZvciAodmFsdWUgPSAoc3lzT1JUYWJsZV9lbnRyeSopaXQtPmN1cnIoaXQpOworCQkgdmFsdWUgJiYgdmFsdWUtPnN5c09SSW5kZXggPCBjdXI7CisJCSB2YWx1ZSA9IChzeXNPUlRhYmxlX2VudHJ5KilJVEVSQVRPUl9ORVhUKGl0KSkgeworCSAgICB9CisKKwkgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5zeXNPUkluZGV4ID09IGN1cikgeworCQlpZiAoc3lzT1JOZXh0SW5kZXggPCBjdXIpCisJCSAgICBpdC0+cmVzZXQoaXQpOworCSAgICB9IGVsc2UgeworCQllbnRyeS0+c3lzT1JJbmRleCA9IGN1cjsKKwkJYnJlYWs7CisJICAgIH0KKwl9IHdoaWxlIChmaXJzdE5leHQgIT0gc3lzT1JOZXh0SW5kZXgpOworCisJSVRFUkFUT1JfUkVMRUFTRShpdCk7CisKKwlpZihmaXJzdE5leHQgPT0gc3lzT1JOZXh0SW5kZXgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gbG9jYXRlIGEgZnJlZSBpbmRleCBpbiBzeXNPUlRhYmxlXG4iKTsKKyAgICAgICAgICAgIGZyZWUoZW50cnkpOworCX0gZWxzZSB7CisJICAgIGVudHJ5LT5kYXRhID0gZGF0YTsKKwkgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAxOworCSAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAmZW50cnktPnN5c09SSW5kZXg7CisKKwkgICAgQ09OVEFJTkVSX0lOU0VSVCh0YWJsZSwgZW50cnkpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3JlZ2lzdGVyX2NiKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkKiBzZXJ2LCB2b2lkKiBjbGllbnQpCit7CisgICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUvcmVnaXN0ZXJfY2IiLAorICAgICAgICAgICAgICAgICJyZWdpc3Rlcl9jYiglZCwgJWQsICVwLCAlcClcbiIsIG1ham9yLCBtaW5vciwgc2VydiwgY2xpZW50KSk7CisgICAgcmVnaXN0ZXJfZm9yZWFjaCgoc3RydWN0IHN5c09SVGFibGUqKXNlcnYsIE5VTEwpOworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKiogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCitzdGF0aWMgaW50Cit1bnJlZ2lzdGVyX2NiKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkKiBzZXJ2LCB2b2lkKiBjbGllbnQpCit7CisgICAgc3lzT1JUYWJsZV9lbnRyeSAqdmFsdWU7CisgICAgbmV0c25tcF9pdGVyYXRvciogaXQgPSBDT05UQUlORVJfSVRFUkFUT1IodGFibGUpOworCisgICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUvdW5yZWdpc3Rlcl9jYiIsCisgICAgICAgICAgICAgICAgInVucmVnaXN0ZXJfY2IoJWQsICVkLCAlcCwgJXApXG4iLCBtYWpvciwgbWlub3IsIHNlcnYsIGNsaWVudCkpOworICAgIHN5c09STGFzdENoYW5nZSA9ICgoc3RydWN0IHN5c09SVGFibGUqKShzZXJ2KSktPk9SX3VwdGltZTsKKworICAgIHdoaWxlICgodmFsdWUgPSAoc3lzT1JUYWJsZV9lbnRyeSopSVRFUkFUT1JfTkVYVChpdCkpICYmIHZhbHVlLT5kYXRhICE9IHNlcnYpOworICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworICAgIGlmKHZhbHVlKSB7CisJQ09OVEFJTkVSX1JFTU9WRSh0YWJsZSwgdmFsdWUpOworCWZyZWUodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzeXNPUlRhYmxlIHRhYmxlICovCitzdGF0aWMgaW50CitzeXNPUlRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKworICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlL3N5c09SVGFibGVfaGFuZGxlciIsCisgICAgICAgICAgICAgICAgInN5c09SVGFibGVfaGFuZGxlciBjYWxsZWRcbiIpKTsKKworICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfR0VUKSB7CisJc25tcF9sb2coTE9HX0VSUiwKKwkJICJHb3QgdW5leHBlY3RlZCBvcGVyYXRpb24gZm9yIHN5c09SVGFibGVcbiIpOworCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICovCisgICAgcmVxdWVzdCA9IHJlcXVlc3RzOworICAgIHdoaWxlKHJlcXVlc3QgJiYgcmVxdWVzdC0+cHJvY2Vzc2VkKQorCXJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworICAgIHdoaWxlKHJlcXVlc3QpIHsKKwlzeXNPUlRhYmxlX2VudHJ5ICp0YWJsZV9lbnRyeTsKKwluZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKworCWlmIChOVUxMID09ICh0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCkpKSB7CisJICAgIHNubXBfbG9nKExPR19FUlIsCisJCSAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGluZm8gZm9yIHN5c09SVGFibGVcbiIpOworCSAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoCisJCSAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisJfSBlbHNlIGlmKE5VTEwgPT0gKHRhYmxlX2VudHJ5ID0gKHN5c09SVGFibGVfZW50cnkgKikKKwkJCSAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KSkpIHsKKwkgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JJRDoKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JERVNDUjoKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JVUFRJTUU6CisJCW5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKwkJCQkJICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCW5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisJICAgIGNhc2UgQ09MVU1OX1NZU09SSUQ6CisJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSgKKwkJCXJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09CSkVDVF9JRCwKKwkJCShjb25zdCB1X2NoYXIqKXRhYmxlX2VudHJ5LT5kYXRhLT5PUl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+ZGF0YS0+T1Jfb2lkbGVuICogc2l6ZW9mKG9pZCkpOworCQlicmVhazsKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JERVNDUjoKKwkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKAorCQkJcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorCQkJKGNvbnN0IHVfY2hhciopdGFibGVfZW50cnktPmRhdGEtPk9SX2Rlc2NyLAorCQkJc3RybGVuKHRhYmxlX2VudHJ5LT5kYXRhLT5PUl9kZXNjcikpOworCQlicmVhazsKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JVUFRJTUU6CisJCXNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKAorCQkJcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmRhdGEtPk9SX3VwdGltZSk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQluZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZG8geworCSAgICByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dDsKKwl9IHdoaWxlKHJlcXVlc3QgJiYgcmVxdWVzdC0+cHJvY2Vzc2VkKTsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKICNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQogZXh0ZXJuIG9pZCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkW107CiBleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuOwogZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfY291bnQ7CiAjZW5kaWYKIAorc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnN5c09STGFzdENoYW5nZV9yZWc7CitzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzT1JMYXN0Q2hhbmdlX3dpbmZvOworc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnN5c09SVGFibGVfcmVnOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnN5c09SVGFibGVfdGFibGVfaW5mbzsKKworLyoqIEluaXRpYWxpemVzIHRoZSBzeXNPUlRhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9zeXNPUlRhYmxlKHZvaWQpCiB7CisgICAgY29uc3Qgb2lkIHN5c09STGFzdENoYW5nZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgOCB9OworICAgIGNvbnN0IG9pZCBzeXNPUlRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA5IH07CisKKyAgICBzeXNPUlRhYmxlX3RhYmxlX2luZm8gPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworCisgICAgdGFibGUgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJzeXNPUlRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworCisgICAgaWYgKHN5c09SVGFibGVfdGFibGVfaW5mbyA9PSBOVUxMIHx8IHRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgU05NUF9GUkVFKHN5c09SVGFibGVfdGFibGVfaW5mbyk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKHRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0YWJsZS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInN5c09SVGFibGUiKTsKKworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHN5c09SVGFibGVfdGFibGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgLyoqIGluZGV4OiBzeXNPUkluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgc3lzT1JUYWJsZV90YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX1NZU09SSUQ7CisgICAgc3lzT1JUYWJsZV90YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX1NZU09SVVBUSU1FOworCisgICAgc3lzT1JMYXN0Q2hhbmdlX3JlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgIm1pYklJL3N5c09STGFzdENoYW5nZSIsIE5VTEwsCisgICAgICAgICAgICBzeXNPUkxhc3RDaGFuZ2Vfb2lkLCBPSURfTEVOR1RIKHN5c09STGFzdENoYW5nZV9vaWQpLAorICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisJICAgICZzeXNPUkxhc3RDaGFuZ2Vfd2luZm8sCisgICAgICAgICAgICAmc3lzT1JMYXN0Q2hhbmdlLCBzaXplb2YodV9sb25nKSwKKyAgICAgICAgICAgIEFTTl9USU1FVElDS1MsIFdBVENIRVJfRklYRURfU0laRSk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihzeXNPUkxhc3RDaGFuZ2VfcmVnLAorCQkJCSAgICAmc3lzT1JMYXN0Q2hhbmdlX3dpbmZvKTsKKworICAgIHN5c09SVGFibGVfcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAibWliSUkvc3lzT1JUYWJsZSIsIHN5c09SVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgIHN5c09SVGFibGVfb2lkLCBPSURfTEVOR1RIKHN5c09SVGFibGVfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3JlZ2lzdGVyKHN5c09SVGFibGVfcmVnLCBzeXNPUlRhYmxlX3RhYmxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisKKyAgICBzeXNPUkxhc3RDaGFuZ2UgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKwogICAgIC8qCi0gICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCisgICAgICogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUKICAgICAgKi8KKyAgICBuZXRzbm1wX3N5c09SVGFibGVfZm9yZWFjaCgmcmVnaXN0ZXJfZm9yZWFjaCwgTlVMTCk7CiAKLSNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0gICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9ST0xFKSA9PSBNQVNURVJfQUdFTlQpCi0gICAgICAgICh2b2lkKSByZWdpc3Rlcl9taWJfcHJpb3JpdHkoIm1pYklJL3N5c09SVGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNPUlRhYmxlX3ZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZhcmlhYmxlMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5c09SVGFibGVfdmFyaWFibGVzKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c09SVGFibGVfdmFyaWFibGVzX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3lzT1JUYWJsZV92YXJpYWJsZXNfb2lkKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCksIDEpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBSRUdJU1RFUl9NSUIoIm1pYklJL3N5c09SVGFibGUiLCBzeXNPUlRhYmxlX3ZhcmlhYmxlcywgdmFyaWFibGUxLAotICAgICAgICAgICAgICAgICAgICAgc3lzT1JUYWJsZV92YXJpYWJsZXNfb2lkKTsKLQorICAgIC8qCisgICAgICogUmVnaXN0ZXIgY2FsbGJhY2tzCisgICAgICovCiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1JFR19TWVNPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjaywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdfU1lTT1IsIHJlZ2lzdGVyX2NiLCBOVUxMKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBfdW5yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjaywgTlVMTCk7Ci0gICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SX1NFU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBfdW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHX1NZU09SLCB1bnJlZ2lzdGVyX2NiLCBOVUxMKTsKIAogI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCiAgICAgaWYgKCsrc3lzdGVtX21vZHVsZV9jb3VudCA9PSAzKQogICAgICAgICBSRUdJU1RFUl9TWVNPUl9UQUJMRShzeXN0ZW1fbW9kdWxlX29pZCwgc3lzdGVtX21vZHVsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIFNOTVB2MiBlbnRpdGllcyIpOwogI2VuZGlmCi0KLSAgICBnZXR0aW1lb2ZkYXkoJnN5c09SX2xhc3RjaGFuZ2UsIE5VTEwpOwotfQotCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKLQkgKgotCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCi0JICoKLQkgKioqKioqKioqKioqKioqKioqKioqLwotCi11X2NoYXIgICAgICAgICAqCi12YXJfc3lzT1JUYWJsZShzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotICAgIHVuc2lnbmVkIGxvbmcgICBpID0gMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXQ7Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnB0ciA9IHRhYmxlOwotCi0gICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKLSAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG51bUVudHJpZXMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoaSA9IDE7IHB0ciAhPSBOVUxMICYmIGkgPCBuYW1lWypsZW5ndGggLSAxXTsgcHRyID0gcHRyLT5uZXh0LCBpKyspIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSAtLSAlbHUgIT0gJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICBpLCBuYW1lWypsZW5ndGggLSAxXSkpOwotICAgIH0KLSAgICBpZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSAtLSBubyBtYXRjaDogJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICBpKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZSIsICJzeXNPUlRhYmxlIC0tIG1hdGNoOiAlbHVcbiIsIGkpKTsKLQotICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBTWVNPUlRBQkxFSUQ6Ci0gICAgICAgICp2YXJfbGVuID0gcHRyLT5PUl9vaWRsZW4gKiBzaXplb2YocHRyLT5PUl9vaWRbMF0pOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBwdHItPk9SX29pZDsKLQotICAgIGNhc2UgU1lTT1JUQUJMRURFU0NSOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihwdHItPk9SX2Rlc2NyKTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcHRyLT5PUl9kZXNjcjsKLQotICAgIGNhc2UgU1lTT1JUQUJMRVVQVElNRToKLSAgICAgICAgcmV0ID0gbmV0c25tcF90aW1ldmFsX3VwdGltZSgmcHRyLT5PUl91cHRpbWUpOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIHJldDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfc3lzT1JUYWJsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLWludAotcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3IsIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQotewotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwdHIsICoqbnB0cjsKLSAgICBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyByZWdfc3lzT1JfcGFybXM7Ci0KLSAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZSIsICJzeXNPUlRhYmxlIHJlZ2lzdGVyaW5nOiAiKSk7Ci0gICAgREVCVUdNU0dPSUQoKCJtaWJJSS9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOwotICAgIERFQlVHTVNHKCgibWliSUkvc3lzT1JUYWJsZSIsICJcbiIpKTsKLQotICAgIHB0ciA9IChzdHJ1Y3Qgc3lzT1JUYWJsZSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNPUlRhYmxlKSk7Ci0gICAgaWYgKHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOwotICAgIH0KLSAgICBwdHItPk9SX2Rlc2NyID0gKGNoYXIgKikgc3RyZHVwKGRlc2NyKTsKLSAgICBpZiAocHRyLT5PUl9kZXNjciA9PSBOVUxMKSB7Ci0gICAgICAgIGZyZWUocHRyKTsKLSAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQ7Ci0gICAgfQotICAgIHB0ci0+T1Jfb2lkbGVuID0gb2lkbGVuOwotICAgIHB0ci0+T1Jfb2lkID0gKG9pZCAqKSBtYWxsb2Moc2l6ZW9mKG9pZCkgKiBvaWRsZW4pOwotICAgIGlmIChwdHItPk9SX29pZCA9PSBOVUxMKSB7Ci0gICAgICAgIGZyZWUocHRyLT5PUl9kZXNjcik7Ci0gICAgICAgIGZyZWUocHRyKTsKLSAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQ7Ci0gICAgfQotICAgIG1lbWNweShwdHItPk9SX29pZCwgb2lkaW4sIHNpemVvZihvaWQpICogb2lkbGVuKTsKLSAgICBnZXR0aW1lb2ZkYXkoJihwdHItPk9SX3VwdGltZSksIE5VTEwpOwotICAgIGdldHRpbWVvZmRheSgmKHN5c09SX2xhc3RjaGFuZ2UpLCBOVUxMKTsKLSAgICBwdHItPk9SX3Nlc3MgPSBzczsKLSAgICBwdHItPm5leHQgPSBOVUxMOwotICAgIG51bUVudHJpZXMrKzsKLQotICAgIC8qIGFkZCB0aGlzIGVudHJ5IHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluZWQgbGlzdCAqLwotICAgIG5wdHIgPSAmdGFibGU7Ci0gICAgd2hpbGUgKCpucHRyICE9IE5VTEwpCi0gICAgICAgIG5wdHIgPSAmKCgqbnB0ciktPm5leHQpOwotICAgICpucHRyID0gcHRyOwotCi0gICAgcmVnX3N5c09SX3Bhcm1zLm5hbWUgPSBvaWRpbjsKLSAgICByZWdfc3lzT1JfcGFybXMubmFtZWxlbiA9IG9pZGxlbjsKLSAgICByZWdfc3lzT1JfcGFybXMuZGVzY3IgPSBkZXNjcjsKLSAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdfU1lTT1IsICZyZWdfc3lzT1JfcGFybXMpOwotCi0gICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVEVSRURfT0s7Ci19Ci0KLWludAotcmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiBvaWRpbiwgc2l6ZV90IG9pZGxlbiwgY29uc3QgY2hhciAqZGVzY3IpCi17Ci0gICAgcmV0dXJuIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWRpbiwgb2lkbGVuLCBkZXNjciwgTlVMTCk7Ci19Ci0KLQotCi1pbnQKLXVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9pZGxlbiwgbmV0c25tcF9zZXNzaW9uICogc3MpCi17Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnB0ciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKLSAgICBpbnQgICAgICAgICAgICAgZm91bmQgPSBTWVNfT1JUQUJMRV9OT19TVUNIX1JFR0lTVFJBVElPTjsKLSAgICBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyByZWdfc3lzT1JfcGFybXM7Ci0KLSAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZSIsICJzeXNPUlRhYmxlIHVucmVnaXN0ZXJpbmc6ICIpKTsKLSAgICBERUJVR01TR09JRCgoIm1pYklJL3N5c09SVGFibGUiLCBvaWRpbiwgb2lkbGVuKSk7Ci0gICAgREVCVUdNU0coKCJtaWJJSS9zeXNPUlRhYmxlIiwgIlxuIikpOwotCi0gICAgZm9yIChwdHIgPSB0YWJsZTsgcHRyOyBwdHIgPSBuZXh0KQotICAgIHsKLSAgICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKLSAgICAgICAgaWYgKHB0ci0+T1Jfc2VzcyA9PSBzcyAmJgotICAgICAgICAgIChzbm1wX29pZF9jb21wYXJlKG9pZGluLCBvaWRsZW4sIHB0ci0+T1Jfb2lkLCBwdHItPk9SX29pZGxlbikgPT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcmV2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgdGFibGUgPSBwdHItPm5leHQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHB0ci0+bmV4dDsKLQotICAgICAgICAgICAgZnJlZShwdHItPk9SX29pZCk7Ci0gICAgICAgICAgICBmcmVlKHB0ci0+T1JfZGVzY3IpOwotICAgICAgICAgICAgZnJlZShwdHIpOwotICAgICAgICAgICAgbnVtRW50cmllcy0tOwotICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCYoc3lzT1JfbGFzdGNoYW5nZSksIE5VTEwpOwotICAgICAgICAgICAgZm91bmQgPSBTWVNfT1JUQUJMRV9VTlJFR0lTVEVSRURfT0s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwcmV2ID0gcHRyOwotICAgIH0KLQotICAgIHJlZ19zeXNPUl9wYXJtcy5uYW1lID0gb2lkaW47Ci0gICAgcmVnX3N5c09SX3Bhcm1zLm5hbWVsZW4gPSBvaWRsZW47Ci0gICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsICZyZWdfc3lzT1JfcGFybXMpOwotCi0gICAgcmV0dXJuIGZvdW5kOwotfQotCi0KLWludAotdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqIG9pZGluLCBzaXplX3Qgb2lkbGVuKQotewotICAgIHJldHVybiB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWRpbiwgb2lkbGVuLCBOVUxMKTsKIH0KIAogdm9pZAotdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc3MpCitzaHV0ZG93bl9zeXNPUlRhYmxlKHZvaWQpCiB7Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnB0ciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKKyNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorICAgIGlmIChzeXN0ZW1fbW9kdWxlX2NvdW50LS0gPT0gMykKKyAgICAgICAgVU5SRUdJU1RFUl9TWVNPUl9UQUJMRShzeXN0ZW1fbW9kdWxlX29pZCwgc3lzdGVtX21vZHVsZV9vaWRfbGVuKTsKKyNlbmRpZgogCi0gICAgZm9yIChwdHIgPSB0YWJsZTsgcHRyOyBwdHIgPSBuZXh0KQotICAgIHsKLSAgICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKLSAgICAgICAgaWYgKCgoc3MtPmZsYWdzICYgU05NUF9GTEFHU19TVUJTRVNTSU9OKSAmJiBwdHItPk9SX3Nlc3MgPT0gc3MpIHx8Ci0gICAgICAgICAgICAoIShzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NVQlNFU1NJT04pICYmIHB0ci0+T1Jfc2VzcyAmJgotICAgICAgICAgICAgIHB0ci0+T1Jfc2Vzcy0+c3Vic2Vzc2lvbiA9PSBzcykpIHsKLSAgICAgICAgICAgIGlmIChwcmV2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgdGFibGUgPSBuZXh0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSBuZXh0OwotICAgICAgICAgICAgZnJlZShwdHItPk9SX29pZCk7Ci0gICAgICAgICAgICBmcmVlKHB0ci0+T1JfZGVzY3IpOwotICAgICAgICAgICAgZnJlZShwdHIpOwotICAgICAgICAgICAgbnVtRW50cmllcy0tOwotICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCYoc3lzT1JfbGFzdGNoYW5nZSksIE5VTEwpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByZXYgPSBwdHI7Ci0gICAgfQorICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19VTlJFR19TWVNPUiwgdW5yZWdpc3Rlcl9jYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwgcmVnaXN0ZXJfY2IsIE5VTEwsIDEpOworCisgICAgaWYgKHRhYmxlKQorICAgICAgICBDT05UQUlORVJfQ0xFQVIodGFibGUsIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlLCBOVUxMKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV91bnJlZ2lzdGVyKHN5c09SVGFibGVfcmVnKTsKKyAgICBzeXNPUlRhYmxlX3JlZyA9IE5VTEw7CisgICAgdGFibGUgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZShzeXNPUlRhYmxlX3RhYmxlX2luZm8pOworICAgIHN5c09SVGFibGVfdGFibGVfaW5mbyA9IE5VTEw7CisgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoc3lzT1JMYXN0Q2hhbmdlX3JlZyk7CisgICAgc3lzT1JMYXN0Q2hhbmdlX3JlZyA9IE5VTEw7CiB9Ci0KLXN0YXRpYyBpbnQKLV9yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCi17Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnBhcm1zID0gKHN0cnVjdCBzeXNPUlRhYmxlICopIHNlcnZlcmFyZzsKLQotICAgIHJldHVybiByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3MocGFybXMtPk9SX29pZCwgcGFybXMtPk9SX29pZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9kZXNjciwgcGFybXMtPk9SX3Nlc3MpOwotfQotCi1zdGF0aWMgaW50Ci1fdW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCi17Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uID0gKG5ldHNubXBfc2Vzc2lvbiAqKSBzZXJ2ZXJhcmc7Ci0KLSAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihzZXNzaW9uKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1fdW5yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQotewotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwYXJtcyA9IChzdHJ1Y3Qgc3lzT1JUYWJsZSAqKSBzZXJ2ZXJhcmc7Ci0KLSAgICByZXR1cm4gdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3MocGFybXMtPk9SX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFybXMtPk9SX29pZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFybXMtPk9SX3Nlc3MpOwotfQotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKaW5kZXggNTlmYjdlMC4uZTk4OGZkYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaApAQCAtMSw1NyArMSwxNSBAQAotLyoKLSAqICBUZW1wbGF0ZSBNSUIgZ3JvdXAgaW50ZXJmYWNlIC0gc3lzT1JUYWJsZS5oCi0gKgotICovCi0jaWZuZGVmIF9NSUJHUk9VUF9TWVNPUlRBQkxFX0gKLSNkZWZpbmUgX01JQkdST1VQX1NZU09SVEFCTEVfSAorI2lmbmRlZiBNSUJHUk9VUF9TWVNPUlRBQkxFX0gKKyNkZWZpbmUgTUlCR1JPVVBfU1lTT1JUQUJMRV9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCi1jb25maWdfcmVxdWlyZShtaWJJSS9zeXN0ZW1fbWliKQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCi0gICAgIHN0cnVjdCBzeXNPUlRhYmxlIHsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICpPUl9kZXNjcjsKLSAgICAgICAgIG9pZCAgICAgICAgICAgICpPUl9vaWQ7Ci0gICAgICAgICBzaXplX3QgICAgICAgICAgT1Jfb2lkbGVuOwotICAgICAgICAgc3RydWN0IHRpbWV2YWwgIE9SX3VwdGltZTsKLSAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqT1Jfc2VzczsKLSAgICAgICAgIHN0cnVjdCBzeXNPUlRhYmxlICpuZXh0OwotICAgICB9OworZXh0ZXJuIHZvaWQgICAgIGluaXRfc3lzT1JUYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBzaHV0ZG93bl9zeXNPUlRhYmxlKHZvaWQpOwogCi0gICAgIHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzIHsKLSAgICAgICAgIG9pZCAgICAgICAgICAgICpuYW1lOwotICAgICAgICAgaW50ICAgICAgICAgICAgIG5hbWVsZW47Ci0gICAgICAgICBjb25zdCBjaGFyICAgICAqZGVzY3I7Ci0gICAgIH07CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgogCi0gICAgIGV4dGVybiB2b2lkICAgICBpbml0X3N5c09SVGFibGUodm9pZCk7Ci0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zeXNPUlRhYmxlOwotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc3lzT1JMYXN0Q2hhbmdlOwotICAgICBleHRlcm4gaW50ICAgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopOwotICAgICBleHRlcm4gaW50ICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QpOwotICAgICBleHRlcm4gaW50ICAgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgIGV4dGVybiBpbnQgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiwgc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICopOwotICAgICBleHRlcm4gdm9pZCAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICopOwotCi0jZGVmaW5lCVNZU09SVEFCTEVJTkRFWAkJICAgICAgICAxCi0jZGVmaW5lCVNZU09SVEFCTEVJRAkJICAgICAgICAyCi0jZGVmaW5lCVNZU09SVEFCTEVERVNDUgkJICAgICAgICAzCi0jZGVmaW5lCVNZU09SVEFCTEVVUFRJTUUJICAgICAgICA0Ci0KLSNkZWZpbmUgU1lTX09SVEFCTEVfUkVHSVNURVJFRF9PSyAgICAgICAgICAgICAgMAotI2RlZmluZSBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEICAgICAgIC0xCi0jZGVmaW5lIFNZU19PUlRBQkxFX1VOUkVHSVNURVJFRF9PSyAgICAgICAgICAgIDAKLSNkZWZpbmUgU1lTX09SVEFCTEVfTk9fU1VDSF9SRUdJU1RSQVRJT04gICAgICAtMQotCi0jaWZkZWYgIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0jZGVmaW5lIFJFR0lTVEVSX1NZU09SX0VOVFJZKHRoZW9pZCwgZGVzY3IpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHZvaWQpcmVnaXN0ZXJfc3lzT1JUYWJsZSh0aGVvaWQsIHNpemVvZih0aGVvaWQpL3NpemVvZihvaWQpLCBkZXNjcik7Ci0jZGVmaW5lIFJFR0lTVEVSX1NZU09SX1RBQkxFKHRoZW9pZCwgbGVuLCBkZXNjcikgICAgICAgICAgICAgICAgICAgICAgXAotICAodm9pZClyZWdpc3Rlcl9zeXNPUlRhYmxlKHRoZW9pZCwgbGVuLCBkZXNjcik7Ci0KLSNlbHNlCi0jZGVmaW5lIFJFR0lTVEVSX1NZU09SX0VOVFJZKHgseSkKLSNkZWZpbmUgUkVHSVNURVJfU1lTT1JfVEFCTEUoeCx5LHopCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9TWVNPUlRBQkxFX0ggKi8KKyNlbmRpZiAvKiBNSUJHUk9VUF9TWVNPUlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYwppbmRleCBlZDk3YWYzLi42NWIwYjdjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yNywxNSArMjgsNyBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChtaW5ndzMyKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIEhBVkVfVVRTTkFNRV9ICiAjaW5jbHVkZSA8dXRzbmFtZS5oPgogI2Vsc2UKQEAgLTQzLDE4ICszNiwxNiBAQAogI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInN5c3RlbV9taWIuaCIKLSNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAidXBkYXRlcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh3YXRjaGVyX3JlYWRfb25seV9pbnRfc2NhbGFyKQogCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgpAQCAtNjQsMzMgKzU1LDI0IEBACiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBTWVNfU1RSSU5HX0xFTgkyNTYKLWNoYXIgICAgICAgICAgICB2ZXJzaW9uX2Rlc2NyW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfVkVSU19ERVNDOwotY2hhciAgICAgICAgICAgIHN5c0NvbnRhY3RbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfQ09OVEFDVDsKLWNoYXIgICAgICAgICAgICBzeXNOYW1lW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX05BTUU7Ci1jaGFyICAgICAgICAgICAgc3lzTG9jYXRpb25bU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfTE9DOwotb2lkICAgICAgICAgICAgIHN5c09iamVjdElEW01BWF9PSURfTEVOXTsKLXNpemVfdCAgICAgICAgICBzeXNPYmplY3RJRExlbmd0aDsKK3N0YXRpYyBjaGFyICAgICB2ZXJzaW9uX2Rlc2NyW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfVkVSU19ERVNDOworc3RhdGljIGNoYXIgICAgIHN5c0NvbnRhY3RbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfQ09OVEFDVDsKK3N0YXRpYyBjaGFyICAgICBzeXNOYW1lW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX05BTUU7CitzdGF0aWMgY2hhciAgICAgc3lzTG9jYXRpb25bU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfTE9DOworc3RhdGljIG9pZCAgICAgIHN5c09iamVjdElEW01BWF9PSURfTEVOXTsKK3N0YXRpYyBzaXplX3Qgc3lzT2JqZWN0SURCeXRlTGVuZ3RoOwogCiBleHRlcm4gb2lkICAgICAgdmVyc2lvbl9zeXNvaWRbXTsKIGV4dGVybiBpbnQgICAgICB2ZXJzaW9uX3N5c29pZF9sZW47CiAKLWNoYXIgICAgICAgICAgICBvbGR2ZXJzaW9uX2Rlc2NyW1NZU19TVFJJTkdfTEVOXTsKLWNoYXIgICAgICAgICAgICBvbGRzeXNDb250YWN0W1NZU19TVFJJTkdfTEVOXTsKLWNoYXIgICAgICAgICAgICBvbGRzeXNOYW1lW1NZU19TVFJJTkdfTEVOXTsKLWNoYXIgICAgICAgICAgICBvbGRzeXNMb2NhdGlvbltTWVNfU1RSSU5HX0xFTl07Ci0KLWludCAgICAgICAgICAgICBzeXNTZXJ2aWNlcyA9IDcyOwotaW50ICAgICAgICAgICAgIHN5c1NlcnZpY2VzQ29uZmlnZWQgPSAwOworc3RhdGljIGludCAgICAgIHN5c1NlcnZpY2VzID0gNzI7CitzdGF0aWMgaW50ICAgICAgc3lzU2VydmljZXNDb25maWdlZCA9IDA7CiAKIGV4dGVybiBvaWQgICAgICB2ZXJzaW9uX2lkW107CiBleHRlcm4gaW50ICAgICAgdmVyc2lvbl9pZF9sZW47CiAKIHN0YXRpYyBpbnQgICAgICBzeXNDb250YWN0U2V0ID0gMCwgc3lzTG9jYXRpb25TZXQgPSAwLCBzeXNOYW1lU2V0ID0gMDsKIAotV3JpdGVNZXRob2QgICAgIHdyaXRlU3lzdGVtOwotaW50ICAgICAgICAgICAgIGhlYWRlcl9zeXN0ZW0oc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKLQogI2lmIChkZWZpbmVkIChXSU4zMikgJiYgZGVmaW5lZCAoSEFWRV9XSU4zMl9QTEFURk9STV9TREspKSB8fCBkZWZpbmVkIChtaW5ndzMyKQogc3RhdGljIHZvaWQgICAgIHdpbmRvd3NPU1ZlcnNpb25TdHJpbmcoY2hhciBbXSwgc2l6ZV90KTsKICNlbmRpZgpAQCAtMTAxLDE4NyArODMsMTAwIEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkCitzdGF0aWMgdm9pZAorc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc3RybGVuKGNwdHIpIDwgc2l6ZSkgeworICAgICAgICBzdHJjcHkodmFsdWUsIGNwdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCIlcyB0b2tlbiB0b28gbG9uZyAobXVzdCBiZSA8ICVsdSk6XG5cdCVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sICh1bnNpZ25lZCBsb25nKXNpemUsIGNwdHIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3N5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgY2hhciogdmFsdWUsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBndWFyZCkKK3sKKyAgICBpZiAoKnRva2VuID09ICdwJykgeworICAgICAgICBpZiAoKmd1YXJkIDwgMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgcmVhZC1vbmx5LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5ICVzLjBcbiIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmd1YXJkID0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgqZ3VhcmQgPiAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB3ZSBhbHJlYWR5IHJlYWQgYQorICAgICAgICAgICAgICogcGVyc2lzdGVudCB2YWx1ZSB3aGljaCB3ZSBzaG91bGQgaWdub3JlIGluIGZhdm91ciBvZiB0aGlzIG9uZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSAlcy4wXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGYWxsIHRocm91Z2ggYW5kIGNvcHkgaW4gdGhpcyB2YWx1ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICB9CisgICAgICAgICpndWFyZCA9IC0xOworICAgIH0KKworICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nMih0b2tlbiwgY3B0ciwgdmFsdWUsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAogc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNkZXNjcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwotCi0gICAgaWYgKHN0cmxlbihjcHRyKSA+PSBzaXplb2YodmVyc2lvbl9kZXNjcikpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLAotICAgICAgICAgICAgICAgICBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgInN5c2Rlc2NyIHRva2VuIHRvbyBsb25nIChtdXN0IGJlIDwgJWx1KTpcblx0JXMiLAotICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzaXplb2YodmVyc2lvbl9kZXNjciksCi0gICAgICAgICAgICAgICAgIGNwdHIpOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAoY3B0ciwgIlwiXCIiKSA9PSAwKSB7Ci0gICAgICAgIHZlcnNpb25fZGVzY3JbMF0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cmNweSh2ZXJzaW9uX2Rlc2NyLCBjcHRyKTsKLSAgICB9CisgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcyKHRva2VuLCBjcHRyLCB2ZXJzaW9uX2Rlc2NyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmVyc2lvbl9kZXNjcikpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNsb2MoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLQotICAgIGlmIChzdHJsZW4oY3B0cikgPj0gc2l6ZW9mKHN5c0xvY2F0aW9uKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIDEwMjQsCi0gICAgICAgICAgICAgICAgICJzeXNsb2NhdGlvbiB0b2tlbiB0b28gbG9uZyAobXVzdCBiZSA8ICVsdSk6XG5cdCVzIiwKLSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHN5c0xvY2F0aW9uKSwgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKHRva2VuLCAicHN5c2xvY2F0aW9uIikgPT0gMCkgewotICAgICAgICBpZiAoc3lzTG9jYXRpb25TZXQgPCAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB0aGUgc3lzTG9jYXRpb24KLSAgICAgICAgICAgICAqIGlzIGFscmVhZHkgY29uZmlndXJlZCByZWFkLW9ubHkuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNMb2NhdGlvbi4wXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5c0xvY2F0aW9uU2V0Kys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3lzTG9jYXRpb25TZXQgPiAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB3ZSBhbHJlYWR5IHJlYWQgYQotICAgICAgICAgICAgICogcGVyc2lzdGVudCB2YWx1ZSBvZiBzeXNMb2NhdGlvbiwgd2hpY2ggd2Ugc2hvdWxkIGlnbm9yZSBpbgotICAgICAgICAgICAgICogZmF2b3VyIG9mIHRoaXMgb25lLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzTG9jYXRpb24uMFxuIik7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoIGFuZCBjb3B5IGluIHRoaXMgdmFsdWUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICAgIHN5c0xvY2F0aW9uU2V0ID0gLTE7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChjcHRyLCAiXCJcIiIpID09IDApIHsKLSAgICAgICAgc3lzTG9jYXRpb25bMF0gPSAnXDAnOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNwdHIpIDwgc2l6ZW9mKHN5c0xvY2F0aW9uKSkgewotICAgICAgICBzdHJjcHkoc3lzTG9jYXRpb24sIGNwdHIpOwotICAgIH0KKyAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZyh0b2tlbiwgY3B0ciwgInN5c0xvY2F0aW9uIiwgc3lzTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5c0xvY2F0aW9uKSwgJnN5c0xvY2F0aW9uU2V0KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzY29uKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0KLSAgICBpZiAoc3RybGVuKGNwdHIpID49IHNpemVvZihzeXNDb250YWN0KSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIDEwMjQsCi0gICAgICAgICAgICAgICAgICJzeXNjb250YWN0IHRva2VuIHRvbyBsb25nIChtdXN0IGJlIDwgJWx1KTpcblx0JXMiLAotICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzaXplb2Yoc3lzQ29udGFjdCksIGNwdHIpOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcCh0b2tlbiwgInBzeXNjb250YWN0IikgPT0gMCkgewotICAgICAgICBpZiAoc3lzQ29udGFjdFNldCA8IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHRoZSBzeXNDb250YWN0Ci0gICAgICAgICAgICAgKiBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgcmVhZC1vbmx5LiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzQ29udGFjdC4wXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5c0NvbnRhY3RTZXQrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzeXNDb250YWN0U2V0ID4gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gd2UgYWxyZWFkeSByZWFkIGEKLSAgICAgICAgICAgICAqIHBlcnNpc3RlbnQgdmFsdWUgb2Ygc3lzQ29udGFjdCwgd2hpY2ggd2Ugc2hvdWxkIGlnbm9yZSBpbiBmYXZvdXIKLSAgICAgICAgICAgICAqIG9mIHRoaXMgb25lLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzQ29udGFjdC4wXG4iKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGYWxsIHRocm91Z2ggYW5kIGNvcHkgaW4gdGhpcyB2YWx1ZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgIH0KLSAgICAgICAgc3lzQ29udGFjdFNldCA9IC0xOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAoY3B0ciwgIlwiXCIiKSA9PSAwKSB7Ci0gICAgICAgIHN5c0NvbnRhY3RbMF0gPSAnXDAnOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNwdHIpIDwgc2l6ZW9mKHN5c0NvbnRhY3QpKSB7Ci0gICAgICAgIHN0cmNweShzeXNDb250YWN0LCBjcHRyKTsKLSAgICB9CisgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcodG9rZW4sIGNwdHIsICJzeXNDb250YWN0Iiwgc3lzQ29udGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3lzQ29udGFjdCksICZzeXNDb250YWN0U2V0KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzbmFtZShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwotCi0gICAgaWYgKHN0cmxlbihjcHRyKSA+PSBzaXplb2Yoc3lzTmFtZSkpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCAxMDI0LAotICAgICAgICAgICAgICAgICAic3lzbmFtZSB0b2tlbiB0b28gbG9uZyAobXVzdCBiZSA8ICVsdSk6XG5cdCVzIiwKLSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHN5c05hbWUpLCBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAodG9rZW4sICJwc3lzbmFtZSIpID09IDApIHsKLSAgICAgICAgaWYgKHN5c05hbWVTZXQgPCAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB0aGUgc3lzTmFtZQotICAgICAgICAgICAgICogaXMgYWxyZWFkeSBjb25maWd1cmVkIHJlYWQtb25seS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c05hbWUuMFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeXNOYW1lU2V0Kys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3lzTmFtZVNldCA+IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHdlIGFscmVhZHkgcmVhZCBhCi0gICAgICAgICAgICAgKiBwZXJzaXN0ZW50IHZhbHVlIG9mIHN5c05hbWUsIHdoaWNoIHdlIHNob3VsZCBpZ25vcmUgaW4gZmF2b3VyCi0gICAgICAgICAgICAgKiBvZiB0aGlzIG9uZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c05hbWUuMFxuIik7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoIGFuZCBjb3B5IGluIHRoaXMgdmFsdWUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICAgIHN5c05hbWVTZXQgPSAtMTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKGNwdHIsICJcIlwiIikgPT0gMCkgewotICAgICAgICBzeXNOYW1lWzBdID0gJ1wwJzsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjcHRyKSA8IHNpemVvZihzeXNOYW1lKSkgewotICAgICAgICBzdHJjcHkoc3lzTmFtZSwgY3B0cik7Ci0gICAgfQorICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nKHRva2VuLCBjcHRyLCAic3lzTmFtZSIsIHN5c05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5c05hbWUpLCAmc3lzTmFtZVNldCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c1NlcnZpY2VzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewogICAgIHN5c1NlcnZpY2VzID0gYXRvaShjcHRyKTsKICAgICBzeXNTZXJ2aWNlc0NvbmZpZ2VkID0gMTsKIH0KIAotdm9pZCBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c09iamVjdElEKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQorc3RhdGljIHZvaWQKK3N5c3RlbV9wYXJzZV9jb25maWdfc3lzT2JqZWN0SUQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciB0bXBidWZbMTAyNF07Ci0KLSAgICBzeXNPYmplY3RJRExlbmd0aCA9IE1BWF9PSURfTEVOOworICAgIHNpemVfdCBzeXNPYmplY3RJRExlbmd0aCA9IE1BWF9PSURfTEVOOwogICAgIGlmICghcmVhZF9vYmppZChjcHRyLCBzeXNPYmplY3RJRCwgJnN5c09iamVjdElETGVuZ3RoKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsCi0gICAgICAgICAgICAgICAgIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAic3lzb2JqZWN0aWQgdG9rZW4gbm90IGEgcGFyc2FibGUgT0lEOlxuXHQlcyIsCi0gICAgICAgICAgICAgICAgIGNwdHIpOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7Ci0gICAgICAgIG1lbWNweShzeXNPYmplY3RJRCwgdmVyc2lvbl9zeXNvaWQsIHZlcnNpb25fc3lzb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKLSAgICAgICAgc3lzT2JqZWN0SURMZW5ndGggPSB2ZXJzaW9uX3N5c29pZF9sZW47Ci0gICAgfQorCW5ldHNubXBfY29uZmlnX2Vycm9yKCJzeXNvYmplY3RpZCB0b2tlbiBub3QgYSBwYXJzYWJsZSBPSUQ6XG5cdCVzIiwKKwkJCSAgICAgY3B0cik7CisgICAgICAgIHN5c09iamVjdElEQnl0ZUxlbmd0aCA9IHZlcnNpb25fc3lzb2lkX2xlbiAgKiBzaXplb2Yob2lkKTsKKyAgICAgICAgbWVtY3B5KHN5c09iamVjdElELCB2ZXJzaW9uX3N5c29pZCwgc3lzT2JqZWN0SURCeXRlTGVuZ3RoKTsKKyAgICB9IGVsc2UKKworCQlzeXNPYmplY3RJREJ5dGVMZW5ndGggPSBzeXNPYmplY3RJRExlbmd0aCAqIHNpemVvZihvaWQpOwogfQogCiAKQEAgLTI5MSwyOCArMTg2LDggQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gKiBkZWZpbmUgdGhlIHN0cnVjdHVyZSB3ZSdyZSBnb2luZyB0byBhc2sgdGhlIGFnZW50IHRvIHJlZ2lzdGVyIG91cgotICogaW5mb3JtYXRpb24gYXQgCi0gKi8KLXN0cnVjdCB2YXJpYWJsZTEgc3lzdGVtX3ZhcmlhYmxlc1tdID0gewotICAgIHtWRVJTSU9OX0RFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3N5c3RlbSwgMSwgezF9fSwKLSAgICB7VkVSU0lPTklELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX3N5c3RlbSwgMSwgezJ9fSwKLSAgICB7VVBUSU1FLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX3N5c3RlbSwgMSwgezN9fSwKLSAgICB7U1lTQ09OVEFDVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfc3lzdGVtLCAxLCB7NH19LAotICAgIHtTWVNURU1OQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9zeXN0ZW0sIDEsIHs1fX0sCi0gICAge1NZU0xPQ0FUSU9OLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9zeXN0ZW0sIDEsIHs2fX0sCi0gICAge1NZU1NFUlZJQ0VTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9zeXN0ZW0sIDEsIHs3fX0sCi0gICAge1NZU09STEFTVENIQU5HRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9zeXN0ZW0sIDEsIHs4fX0KLX07Ci0vKgotICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCi0gKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAotICovCi1vaWQgICAgICAgICAgICAgc3lzdGVtX3ZhcmlhYmxlc19vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgMSB9Owogb2lkICAgICAgICAgICAgIHN5c3RlbV9tb2R1bGVfb2lkW10gPSB7IFNOTVBfT0lEX1NOTVBNT0RVTEVTLCAxIH07Ci1pbnQgICAgICAgICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuID0KLSAgICBzaXplb2Yoc3lzdGVtX21vZHVsZV9vaWQpIC8gc2l6ZW9mKG9pZCk7CitpbnQgICAgICAgICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChzeXN0ZW1fbW9kdWxlX29pZCk7CiBpbnQgICAgICAgICAgICAgc3lzdGVtX21vZHVsZV9jb3VudCA9IDA7CiAKIHN0YXRpYyBpbnQKQEAgLTMzNiw2ICsyMTEsMzAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAoraGFuZGxlX3N5c1NlcnZpY2VzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisjaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKKyAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVCAmJiAhc3lzU2VydmljZXNDb25maWdlZCkKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisjZW5kaWYKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAoraGFuZGxlX3N5c1VwVGltZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkpOworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCiB2b2lkCiBpbml0X3N5c3RlbV9taWIodm9pZCkKIHsKQEAgLTM5OSwzMCArMjk4LDEzMCBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX0dFVEhPU1ROQU1FICovCiAKICNpZiAoZGVmaW5lZCAoV0lOMzIpICYmIGRlZmluZWQgKEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLKSkgfHwgZGVmaW5lZCAobWluZ3czMikKLSAgewotICAgIEhLRVkgaEtleTsKLSAgICAvKiBEZWZhdWx0IHN5c0NvbnRhY3QgaXMgdGhlIHJlZ2lzdGVyZWQgd2luZG93cyB1c2VyICovCi0gICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsICJTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvbiIsIDAsIEtFWV9RVUVSWV9WQUxVRSwgJmhLZXkpID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICBjaGFyIHJlZ2lzdGVyZWRPd25lclsyNTZdID0gIiI7Ci0gICAgICAgRFdPUkQgcmVnaXN0ZXJlZE93bmVyU3ogPSAyNTY7Ci0gICAgICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoS2V5LCAiUmVnaXN0ZXJlZE93bmVyIiwgTlVMTCwgTlVMTCwgKExQQllURSlyZWdpc3RlcmVkT3duZXIsICZyZWdpc3RlcmVkT3duZXJTeikgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgIHN0cmNweShzeXNDb250YWN0LCByZWdpc3RlcmVkT3duZXIpOwotICAgICAgIH0KLSAgICAgICBSZWdDbG9zZUtleShoS2V5KTsKKyAgICB7CisgICAgICBIS0VZIGhLZXk7CisgICAgICAvKiBEZWZhdWx0IHN5c0NvbnRhY3QgaXMgdGhlIHJlZ2lzdGVyZWQgd2luZG93cyB1c2VyICovCisgICAgICBpZiAoUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIlNPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgS0VZX1FVRVJZX1ZBTFVFLCAmaEtleSkgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgIGNoYXIgcmVnaXN0ZXJlZE93bmVyWzI1Nl0gPSAiIjsKKyAgICAgICAgICBEV09SRCByZWdpc3RlcmVkT3duZXJTeiA9IDI1NjsKKyAgICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhLZXksICJSZWdpc3RlcmVkT3duZXIiLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQQllURSlyZWdpc3RlcmVkT3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVnaXN0ZXJlZE93bmVyU3opID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgc3RyY3B5KHN5c0NvbnRhY3QsIHJlZ2lzdGVyZWRPd25lcik7CisgICAgICAgICAgfQorICAgICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOworICAgICAgfQogICAgIH0KLSAgfQogI2VuZGlmCiAKICAgICAvKiBkZWZhdWx0IHN5c09iamVjdElEICovCiAgICAgbWVtY3B5KHN5c09iamVjdElELCB2ZXJzaW9uX3N5c29pZCwgdmVyc2lvbl9zeXNvaWRfbGVuICogc2l6ZW9mKG9pZCkpOwotICAgIHN5c09iamVjdElETGVuZ3RoID0gdmVyc2lvbl9zeXNvaWRfbGVuOworICAgIHN5c09iamVjdElEQnl0ZUxlbmd0aCA9IHZlcnNpb25fc3lzb2lkX2xlbiAqIHNpemVvZihvaWQpOwogCi0gICAgLyoKLSAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKLSAgICAgKi8KLSAgICBSRUdJU1RFUl9NSUIoIm1pYklJL3N5c3RlbSIsIHN5c3RlbV92YXJpYWJsZXMsIHZhcmlhYmxlMSwKLSAgICAgICAgICAgICAgICAgc3lzdGVtX3ZhcmlhYmxlc19vaWQpOwotCisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzRGVzY3Jfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDEgfTsKKyAgICAgICAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c0Rlc2NyX3dpbmZvOworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c0Rlc2NyIiwgTlVMTCwgc3lzRGVzY3Jfb2lkLCBPSURfTEVOR1RIKHN5c0Rlc2NyX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygmc3lzRGVzY3Jfd2luZm8sIHZlcnNpb25fZGVzY3IsIDAsCisJCQkJICAgICAgQVNOX09DVEVUX1NUUiwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNPYmplY3RJRF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgMiB9OworICAgICAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzT2JqZWN0SURfd2luZm87CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzT2JqZWN0SUQiLCBOVUxMLAorICAgICAgICAgICAgICAgIHN5c09iamVjdElEX29pZCwgT0lEX0xFTkdUSChzeXNPYmplY3RJRF9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KAorCQkmc3lzT2JqZWN0SURfd2luZm8sIHN5c09iamVjdElELCAwLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfSVNfUFRSLAorICAgICAgICAgICAgICAgIE1BWF9PSURfTEVOLCAmc3lzT2JqZWN0SURCeXRlTGVuZ3RoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c1VwVGltZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgMyB9OworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNVcFRpbWUiLCBoYW5kbGVfc3lzVXBUaW1lLAorICAgICAgICAgICAgICAgIHN5c1VwVGltZV9vaWQsIE9JRF9MRU5HVEgoc3lzVXBUaW1lX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzQ29udGFjdF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgNCB9OworICAgICAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzQ29udGFjdF93aW5mbzsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c0NvbnRhY3QiLCBzeXNDb250YWN0X29pZCwgT0lEX0xFTkdUSChzeXNDb250YWN0X29pZCksIAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgJnN5c0NvbnRhY3RTZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAmc3lzQ29udGFjdF93aW5mbywgc3lzQ29udGFjdCwgU1lTX1NUUklOR19MRU4gLSAxLAorICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNDb250YWN0Iiwgc3lzQ29udGFjdF9vaWQsIE9JRF9MRU5HVEgoc3lzQ29udGFjdF9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCAmc3lzQ29udGFjdFNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICZzeXNDb250YWN0X3dpbmZvLCBzeXNDb250YWN0LCBTWVNfU1RSSU5HX0xFTiAtIDEsCisgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c05hbWVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDUgfTsKKyAgICAgICAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c05hbWVfd2luZm87CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNOYW1lIiwgc3lzTmFtZV9vaWQsIE9JRF9MRU5HVEgoc3lzTmFtZV9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgJnN5c05hbWVTZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAmc3lzTmFtZV93aW5mbywgc3lzTmFtZSwgU1lTX1NUUklOR19MRU4gLSAxLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNOYW1lIiwgc3lzTmFtZV9vaWQsIE9JRF9MRU5HVEgoc3lzTmFtZV9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCAmc3lzTmFtZVNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICZzeXNOYW1lX3dpbmZvLCBzeXNOYW1lLCBTWVNfU1RSSU5HX0xFTiAtIDEsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c0xvY2F0aW9uX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA2IH07CisgICAgICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNMb2NhdGlvbl93aW5mbzsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c0xvY2F0aW9uIiwgc3lzTG9jYXRpb25fb2lkLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc3lzTG9jYXRpb25fb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsICZzeXNMb2NhdGlvblNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorCQkmc3lzTG9jYXRpb25fd2luZm8sIHN5c0xvY2F0aW9uLCBTWVNfU1RSSU5HX0xFTiAtIDEsCisJCUFTTl9PQ1RFVF9TVFIsIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNMb2NhdGlvbiIsIHN5c0xvY2F0aW9uX29pZCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHN5c0xvY2F0aW9uX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksICZzeXNMb2NhdGlvblNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorCQkmc3lzTG9jYXRpb25fd2luZm8sIHN5c0xvY2F0aW9uLCBTWVNfU1RSSU5HX0xFTiAtIDEsCisJCUFTTl9PQ1RFVF9TVFIsIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNTZXJ2aWNlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgNyB9OworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfc2NhbGFyKAorICAgICAgICAgICAgIm1pYklJL3N5c1NlcnZpY2VzIiwgc3lzU2VydmljZXNfb2lkLCBPSURfTEVOR1RIKHN5c1NlcnZpY2VzX29pZCksCisgICAgICAgICAgICAmc3lzU2VydmljZXMsIGhhbmRsZV9zeXNTZXJ2aWNlcyk7CisgICAgfQogICAgIGlmICgrK3N5c3RlbV9tb2R1bGVfY291bnQgPT0gMykKICAgICAgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoc3lzdGVtX21vZHVsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIG1vZHVsZSBmb3IgU05NUHYyIGVudGl0aWVzIik7CkBAIC00NTYsMTg3ICs0NTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSUQiKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX3N0b3JlLCBOVUxMKTsKLQogfQogCi0KLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgotCSAqCi0JICogIFN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLQkgKgotCSAqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN5c09SX2xhc3RjaGFuZ2U7Ci0jZW5kaWYKLQotdV9jaGFyICAgICAgICAgKgotdmFyX3N5c3RlbShzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotICAgIHN0YXRpYyB1X2xvbmcgICB1bHJldDsKLQotICAgIGlmIChoZWFkZXJfZ2VuZXJpYyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSA9PQotICAgICAgICBNQVRDSF9GQUlMRUQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIFZFUlNJT05fREVTQ1I6Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHZlcnNpb25fZGVzY3IpOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSB2ZXJzaW9uX2Rlc2NyOwotICAgIGNhc2UgVkVSU0lPTklEOgotICAgICAgICAqdmFyX2xlbiA9IHN5c09iamVjdElETGVuZ3RoICogc2l6ZW9mKHN5c09iamVjdElEWzBdKTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKilzeXNPYmplY3RJRDsKLSAgICBjYXNlIFVQVElNRToKLSAgICAgICAgdWxyZXQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICYgdWxyZXQpOwotICAgIGNhc2UgU1lTQ09OVEFDVDoKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3lzQ29udGFjdCk7Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZVN5c3RlbTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3lzQ29udGFjdDsKLSAgICBjYXNlIFNZU1RFTU5BTUU6Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN5c05hbWUpOwotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVTeXN0ZW07Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHN5c05hbWU7Ci0gICAgY2FzZSBTWVNMT0NBVElPTjoKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3lzTG9jYXRpb24pOwotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVTeXN0ZW07Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHN5c0xvY2F0aW9uOwotICAgIGNhc2UgU1lTU0VSVklDRVM6Ci0jaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLSAgICAgICAgaWYgKCFzeXNTZXJ2aWNlc0NvbmZpZ2VkKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKLSAgICAgICAgbG9uZ19yZXR1cm4gPSBzeXNTZXJ2aWNlczsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLQotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0gICAgY2FzZSBTWVNPUkxBU1RDSEFOR0U6Ci0gICAgICAgIHVscmV0ID0gbmV0c25tcF90aW1ldmFsX3VwdGltZSgmc3lzT1JfbGFzdGNoYW5nZSk7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAmIHVscmV0KTsKLSNlbmRpZgotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9zeXN0ZW1cbiIsCi0gICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0KLWludAotd3JpdGVTeXN0ZW0oaW50IGFjdGlvbiwKLSAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCi0gICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLAotICAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuLAotICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKLXsKLSAgICB1X2NoYXIgICAgICAgICAqY3A7Ci0gICAgY2hhciAgICAgICAgICAgKmJ1ZiA9IE5VTEwsICpvbGRidWYgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBjb3VudCwgKnNldHZhciA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKChjaGFyKSBuYW1lWzddKSB7Ci0gICAgY2FzZSBWRVJTSU9OX0RFU0NSOgotICAgIGNhc2UgVkVSU0lPTklEOgotICAgIGNhc2UgVVBUSU1FOgotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQXR0ZW1wdCB0byB3cml0ZSB0byBSL08gT0lEXG4iKTsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgIGNhc2UgU1lTQ09OVEFDVDoKLSAgICAgICAgYnVmID0gc3lzQ29udGFjdDsKLSAgICAgICAgb2xkYnVmID0gb2xkc3lzQ29udGFjdDsKLSAgICAgICAgc2V0dmFyID0gJnN5c0NvbnRhY3RTZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1lTVEVNTkFNRToKLSAgICAgICAgYnVmID0gc3lzTmFtZTsKLSAgICAgICAgb2xkYnVmID0gb2xkc3lzTmFtZTsKLSAgICAgICAgc2V0dmFyID0gJnN5c05hbWVTZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1lTTE9DQVRJT046Ci0gICAgICAgIGJ1ZiA9IHN5c0xvY2F0aW9uOwotICAgICAgICBvbGRidWYgPSBvbGRzeXNMb2NhdGlvbjsKLSAgICAgICAgc2V0dmFyID0gJnN5c0xvY2F0aW9uU2V0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNZU1NFUlZJQ0VTOgotICAgIGNhc2UgU1lTT1JMQVNUQ0hBTkdFOgotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQXR0ZW1wdCB0byB3cml0ZSB0byBSL08gT0lEXG4iKTsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7IC8qID8/PyAqLwotICAgIH0KLQotICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgY2FzZSBSRVNFUlZFMTogICAgICAgICAgICAgLyogQ2hlY2sgdmFsdWVzIGZvciBhY2NlcHRhYmlsaXR5ICovCi0gICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX09DVEVUX1NUUikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vdCBzdHJpbmdcbiIpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiBzaXplb2Yoc3lzTG9jYXRpb24pIC0gMSkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBsZW5ndGhcbiIpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjcCA9IHZhcl92YWwsIGNvdW50ID0gMDsgY291bnQgPCAoaW50KSB2YXJfdmFsX2xlbjsKLSAgICAgICAgICAgICBjb3VudCsrLCBjcCsrKSB7Ci0gICAgICAgICAgICBpZiAoIWlzcHJpbnQoKmNwKSkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJub3QgcHJpbnQgJXhcbiIsICpjcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNldHZhciAhPSBOVUxMICYmICpzZXR2YXIgPCAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlIG9iamVjdCBpcyBzZXQgaW4gYSByZWFkLW9ubHkgY29uZmlndXJhdGlvbiBmaWxlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUkVTRVJWRTI6ICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgc2ltaWxhciByZXNvdXJjZXMgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBVc2luZyBzdGF0aWMgc3RyaW5ncywgc28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFDVElPTjogICAgICAgICAgICAgICAvKiBQZXJmb3JtIHRoZSBTRVQgYWN0aW9uIChpZiByZXZlcnNpYmxlKSAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNhdmUgdGhlIG9sZCB2YWx1ZSwgaW4gY2FzZSBvZiBVTkRPIAotICAgICAgICAgKi8KLSAgICAgICAgc3RyY3B5KG9sZGJ1ZiwgYnVmKTsKLSAgICAgICAgbWVtY3B5KGJ1ZiwgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOwotICAgICAgICBidWZbdmFyX3ZhbF9sZW5dID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFVORE86ICAgICAgICAgICAgICAgICAvKiBSZXZlcnNlIHRoZSBTRVQgYWN0aW9uIGFuZCBmcmVlIHJlc291cmNlcyAqLwotCi0gICAgICAgIHN0cmNweShidWYsIG9sZGJ1Zik7Ci0gICAgICAgIG9sZGJ1ZlswXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDT01NSVQ6Ci0gICAgICAgIGlmIChzZXR2YXIgIT0gTlVMTCkgewotICAgICAgICAgICAgKnNldHZhciA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgc25tcF9zYXZlX3BlcnNpc3RlbnQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwotICAgICAgICAodm9pZCkgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0xJQlJBUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwgTlVMTCk7Ci0gICAgICAgIHNubXBfY2xlYW5fcGVyc2lzdGVudChuZXRzbm1wX2RzX2dldF9zdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKLQotICAgIGNhc2UgRlJFRTogICAgICAgICAgICAgICAgIC8qIEZyZWUgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBObyByZXNvdXJjZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgYnV0ICJlbXB0eSIgdGhlICdvbGRidWYnIAotICAgICAgICAgKi8KLSAgICAgICAgb2xkYnVmWzBdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2Ygd3JpdGVTeXN0ZW0gKi8KLQogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zIC0gTm9uZQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCmluZGV4IGVjMzMxMmQuLmRkMTZmMDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgKQEAgLTEsMzEgKzEsMTYgQEAKLS8qCi0gKiAgU3lzdGVtIE1JQiBncm91cCBpbnRlcmZhY2UgLSBzeXN0ZW0uaAotICoKLSAqLwogI2lmbmRlZiBfTUlCR1JPVVBfU1lTVEVNX01JQl9ICiAjZGVmaW5lIF9NSUJHUk9VUF9TWVNURU1fTUlCX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAotICAgICBleHRlcm4gY2hhciAgICAgdmVyc2lvbl9kZXNjcltdOworY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcyBtaWJJSS91cGRhdGVzKQogCi0gICAgIHZvaWQgICAgICAgICAgICBpbml0X3N5c3RlbV9taWIodm9pZCk7Ci0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zeXN0ZW07Cit2b2lkIGluaXRfc3lzdGVtX21pYih2b2lkKTsKIAotLyoKLSAqIGNvbmZpZyBmaWxlIHBhcnNpbmcgcm91dGluZXMgCi0gKi8KLSAgICAgdm9pZCAgICAgICAgICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzbG9jKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLSAgICAgdm9pZCAgICAgICAgICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzY29uKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLSAgICAgdm9pZCAgICAgICAgICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzbmFtZShjb25zdCBjaGFyICosIGNoYXIgKik7Ci0KLSNkZWZpbmUJVkVSU0lPTl9ERVNDUgkJMQotI2RlZmluZQlWRVJTSU9OSUQJCTIKLSNkZWZpbmUJVVBUSU1FCQkJMwotI2RlZmluZSBTWVNDT05UQUNUCQk0Ci0jZGVmaW5lIFNZU1RFTU5BTUUJCTUKLSNkZWZpbmUgU1lTTE9DQVRJT04JCTYKLSNkZWZpbmUgU1lTU0VSVklDRVMJCTcKLSNkZWZpbmUgU1lTT1JMQVNUQ0hBTkdFCQk4CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9TWVNURU1fTUlCX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMKaW5kZXggYmMyZTJkMC4uM2M3OWZhZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMKQEAgLTUsNiArNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSAibWliSUlfY29tbW9uLmgiCiAKICNpZiBIQVZFX1NURExJQl9ICkBAIC00OSwxMSArNTAsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgiCiAjaW5jbHVkZSAidGNwLmgiCiAjaW5jbHVkZSAidGNwVGFibGUuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZm5kZWYgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNkZWZpbmUgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQJNQpAQCAtNjIsNyArNjMsMTAgQEAKICNkZWZpbmUgVENQX1NUQVRTX0NBQ0hFX1RJTUVPVVQJTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNpZmRlZiBGSVJTVF9QUk9UT0NPTAogcGVyZnN0YXRfcHJvdG9jb2xfdCBwc19wcm90bzsKQEAgLTg4LDcgKzkyLDkgQEAKIGludCAgaHogPSAxMDAwOwogI2VuZGlmCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMKIGV4dGVybiBpbnQgVENQX0NvdW50X0Nvbm5lY3Rpb25zKCB2b2lkICk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMgKi8KICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEluaXRpYWxpc2F0aW9uICYgY29tbW9uIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwpAQCAtMTc2LDcgKzE4Miw3IEBACiAjdW5kZWYgVENQX05TVEFUUwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmZGVmIEhBVkVfSVBITFBBUElfSAogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjZGVmaW5lIFRDUF9TVEFUX1NUUlVDVFVSRSAgICAgTUlCX1RDUFNUQVRTCiAjZW5kaWYKQEAgLTM2NywxMSArMzczLDE0IEBACiAgICAgICAgIHJldF92YWx1ZSA9IHRjcHN0YXQudGNwc19kcm9wczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUQ1BDVVJSRVNUQUI6Ci0jaWZkZWYgVVNJTkdfTUlCSUlfVENQVEFCTEVfTU9EVUxFCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisgICAgICAgIG5ldHNubXBfZmVhdHVyZV93YW50KHRjcF9jb3VudF9jb25uZWN0aW9ucykKKyNlbmRpZgorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUwogICAgICAgICByZXRfdmFsdWUgPSBUQ1BfQ291bnRfQ29ubmVjdGlvbnMoKTsKICNlbHNlCiAgICAgICAgIHJldF92YWx1ZSA9IDA7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUyAqLwogICAgICAgICB0eXBlID0gQVNOX0dBVUdFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRDUElOU0VHUzoKQEAgLTM4OSw3ICszOTgsNyBAQAogICAgICAgICBicmVhazsKICAgICBjYXNlIFRDUElORVJSUzoKICAgICAgICAgcmV0X3ZhbHVlID0gdGNwc3RhdC50Y3BzX3JjdmJhZHN1bSArIHRjcHN0YXQudGNwc19yY3ZiYWRvZmYKLSNpZmRlZiBTVFJVQ1RfVENQU1RBVF9IQVNfVENQU19SQ1ZNRU1EUk9QCisjaWZkZWYgSEFWRV9TVFJVQ1RfVENQU1RBVF9UQ1BTX1JDVk1FTURST1AKICAgICAgICAgICAgICsgdGNwc3RhdC50Y3BzX3Jjdm1lbWRyb3AKICNlbmRpZgogICAgICAgICAgICAgKyB0Y3BzdGF0LnRjcHNfcmN2c2hvcnQ7CkBAIC01NDYsNiArNTU1LDcgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC01NTUsNiArNTY1LDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS90Y3A6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdGNwOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmggYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuaAppbmRleCA5MjZkZjQ5Li4wNDlkZGQxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuaApAQCAtNiw3ICs2LDcgQEAKICNkZWZpbmUgX01JQkdST1VQX1RDUF9ICiAKIAotY29uZmlnX3JlcXVpcmUobWliSUkvdGNwVGFibGUgdXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKG1pYklJL3RjcFRhYmxlKQogCiBjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCAgICAgICAga2VybmVsX3N1bm9zNSkKIGNvbmZpZ19hcmNoX3JlcXVpcmUobGludXgsICAgICBtaWJJSS9rZXJuZWxfbGludXgpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYwppbmRleCAyYjFjMmM2Li4wM2M4NWU1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlICJtaWJJSV9jb21tb24uaCIKIAogI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSApAQCAtMjksNiArMzAsMTEgQEAKICNpZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CiAjZW5kaWYKKyNpZiBIQVZFX05FVExJTktfTkVUTElOS19ICisjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0bGluay9tc2cuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2RpYWcuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMzYsNyArNDIsMTAgQEAKIAogI2luY2x1ZGUgInRjcC5oIgogI2luY2x1ZGUgInRjcFRhYmxlLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwdGFibGVfYWxsLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcF9jb3VudF9jb25uZWN0aW9ucywgdGNwdGFibGVfYWxsKQogCiAjaWZkZWYgaHB1eDExCiAjZGVmaW5lCVRDUFRBQkxFX0VOVFJZX1RZUEUJbWliX3RjcENvbm5FbnQgCkBAIC02Myw3ICs3Miw3IEBACiAjZGVmaW5lCVRDUFRBQkxFX0lTX0xJTktFRF9MSVNUCiAjZWxzZQogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2RlZmluZQlUQ1BUQUJMRV9FTlRSWV9UWVBFCU1JQl9UQ1BST1cKICNkZWZpbmUJVENQVEFCTEVfU1RBVEUJCWR3U3RhdGUgCkBAIC05MSw2ICsxMDAsNyBAQAogICAgIGludCAgICAgICAgICAgICBzdGF0ZTsKICAgICBuZXRzbm1wX2lucGNiICAqaW5wX25leHQ7CiB9OworI3VuZGVmIElOUF9ORVhUX1NZTUJPTAogI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wJCWlucF9uZXh0CiAjZGVmaW5lCVRDUFRBQkxFX0VOVFJZX1RZUEUJbmV0c25tcF9pbnBjYiAKICNkZWZpbmUJVENQVEFCTEVfU1RBVEUJCXN0YXRlIApAQCAtMTI5LDE1ICsxMzksMTUgQEAKICNkZWZpbmUgVENQX1BPUlRfVE9fSE9TVF9PUkRFUih4KSBudG9ocyh4KQogI2VuZGlmCiAKLW9pZCAgICAgICAgICAgICB0Y3BUYWJsZV9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNiwgMTMgfTsKLQogdm9pZAogaW5pdF90Y3BUYWJsZSh2b2lkKQogeworICAgIGNvbnN0IG9pZCB0Y3BUYWJsZV9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNiwgMTMgfTsKKwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbzsKLSAgICBpbnQgcmM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmM7CiAKICAgICBERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiSW5pdGlhbGlzaW5nIFRDUCBUYWJsZVxuIikpOwogICAgIC8qCkBAIC0xNzcsNyArMTg3LDcgQEAKICAgICAgICAgICAgIHRjcFRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICB0Y3BUYWJsZV9vaWQsIE9JRF9MRU5HVEgodGNwVGFibGVfb2lkKSwKICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKLSAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IocmVnaW5mbywgaWluZm8pOworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIocmVnaW5mbywgaWluZm8pOwogICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjY4LDEyICsyNzgsMTQgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdGNwVGFibGU6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC0yODYsMTEgKzI5OCwxMyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TCiBpbnQKIFRDUF9Db3VudF9Db25uZWN0aW9ucyggdm9pZCApIHsKICAgICB0Y3BUYWJsZV9sb2FkKE5VTEwsIE5VTEwpOwogICAgIHJldHVybiB0Y3BfZXN0YWI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMgKi8KIAogCS8qCiAJICogVHdvIGZvcm1zIG9mIGl0ZXJhdGlvbiBob29rIHJvdXRpbmVzOgpAQCAtNDA0LDcgKzQxOCw3IEBACiAgICAgICogWFhYIC0gSG93IGNhbiB3ZSB0ZWxsIGlmIHRoZSBjYWNoZSBpcyB2YWxpZD8KICAgICAgKiAgICAgICBObyBhY2Nlc3MgdG8gJ3JlcWluZm8nCiAgICAgICovCi0gICAgaWYgKHRjcF9oZWFkID09IDApCisgICAgaWYgKHRjcF9oZWFkID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKQEAgLTU0Nyw2ICs1NjEsMTQ0IEBACiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhwdXgxMSAqLwogCiAjaWZkZWYgbGludXgKKworLyogIHNlZSA8bmV0aW5ldC90Y3AuaD4gKi8KKyNkZWZpbmUgVENQX0FMTCAoKDEgPDwgKFRDUF9DTE9TSU5HICsgMSkpIC0gMSkKKworY29uc3Qgc3RhdGljIGludCBsaW51eF9zdGF0ZXNbMTJdID0geyAxLCA1LCAzLCA0LCA2LCA3LCAxMSwgMSwgOCwgOSwgMiwgMTAgfTsKKworI2lmIEhBVkVfTkVUTElOS19ORVRMSU5LX0gKKworI2lmICFkZWZpbmVkKEhBVkVfTElCTkwzKQorLyogbGlibmwzIEFQSSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIGxpYm5sMSBBUEkgKi8KKworI2RlZmluZSBubF9zb2NrIG5sX2hhbmRsZQorCitzdGF0aWMgY29uc3QgY2hhciAqbmxfZ2V0ZXJyb3JfY29tcGF0KGludCBlKQoreworICAgIHJldHVybiBubF9nZXRlcnJvcigpOworfQorCisjZGVmaW5lIG5sX2dldGVycm9yKGUpIG5sX2dldGVycm9yX2NvbXBhdChlKQorCitzdGF0aWMgc3RydWN0IG5sX2hhbmRsZSAqbmxfc29ja2V0X2FsbG9jKHZvaWQpCit7CisgICAgcmV0dXJuIG5sX2hhbmRsZV9hbGxvYygpOworfQorCitzdGF0aWMgdm9pZCBubF9zb2NrZXRfZnJlZShzdHJ1Y3QgbmxfaGFuZGxlICpucykKK3sKKyAgICBubF9oYW5kbGVfZGVzdHJveShucyk7Cit9CisjZW5kaWYgLyogSEFWRV9MSUJOTDMgKi8KKworc3RhdGljIGludAordGNwVGFibGVfbG9hZF9uZXRsaW5rKHZvaWQpCit7CisJLyogVE9ETzogcGVyaGFwcyB1c2UgcGVybWFuZW50IG5sIHNvY2tldCA/ICovCisJc3RydWN0IG5sX3NvY2sgKm5sID0gbmxfc29ja2V0X2FsbG9jKCk7CisJc3RydWN0IGluZXRfZGlhZ19yZXEgcmVxID0geworCQkuaWRpYWdfZmFtaWx5ID0gQUZfSU5FVCwKKwkJLmlkaWFnX3N0YXRlcyA9IFRDUF9BTEwsCisJfTsKKworCXN0cnVjdCBubF9tc2cgKm5tOworCisJc3RydWN0IHNvY2thZGRyX25sIHBlZXI7CisJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKwlpbnQgcnVubmluZyA9IDEsIGxlbiwgZXJyOworCisJaWYgKG5sID09IE5VTEwpIHsKKwkJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXRsaW5rIGhhbmRsZVxuIikpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IEZhaWxlZCB0byBhbGxvY2F0ZSBuZXRsaW5rIGhhbmRsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwllcnIgPSBubF9jb25uZWN0KG5sLCBORVRMSU5LX0lORVRfRElBRyk7CisJaWYgKGVyciA8IDApIHsKKwkJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkZhaWxlZCB0byBjb25uZWN0IHRvIG5ldGxpbms6ICVzXG4iLCBubF9nZXRlcnJvcihlcnIpKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJzbm1wZDogQ291bGRuJ3QgY29ubmVjdCB0byBuZXRsaW5rOiAlc1xuIiwgbmxfZ2V0ZXJyb3IoZXJyKSk7CisJCW5sX3NvY2tldF9mcmVlKG5sKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW5tID0gbmxtc2dfYWxsb2Nfc2ltcGxlKFRDUERJQUdfR0VUU09DSywgTkxNX0ZfUk9PVHxOTE1fRl9NQVRDSHxOTE1fRl9SRVFVRVNUKTsKKwlubG1zZ19hcHBlbmQobm0sICZyZXEsIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX3JlcSksIDApOworCisJZXJyID0gbmxfc2VuZF9hdXRvX2NvbXBsZXRlKG5sLCBubSk7CisJaWYgKGVyciA8IDApIHsKKwkJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIm5sX3NlbmRfYXV0b2NvbXBsZXRlKCk6ICVzXG4iLCBubF9nZXRlcnJvcihlcnIpKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJzbm1wZDogbmxfc2VuZF9hdXRvY29tcGxldGUoKTogJXNcbiIsIG5sX2dldGVycm9yKGVycikpOworCQlubF9zb2NrZXRfZnJlZShubCk7CisJCXJldHVybiAtMTsKKwl9CisJbmxtc2dfZnJlZShubSk7CisKKwl3aGlsZSAocnVubmluZykgeworCQlzdHJ1Y3Qgbmxtc2doZHIgKmg7CisJCWlmICgobGVuID0gbmxfcmVjdihubCwgJnBlZXIsICZidWYsIE5VTEwpKSA8PSAwKSB7CisJCQlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAibmxfcmVjdigpOiAlc1xuIiwgbmxfZ2V0ZXJyb3IobGVuKSkpOworCQkJc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBubF9yZWN2KCk6ICVzXG4iLCBubF9nZXRlcnJvcihsZW4pKTsKKwkJCW5sX3NvY2tldF9mcmVlKG5sKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWggPSAoc3RydWN0IG5sbXNnaGRyKilidWY7CisKKwkJd2hpbGUgKG5sbXNnX29rKGgsIGxlbikpIHsKKwkJCXN0cnVjdCBpbmV0X2RpYWdfbXNnICpyID0gbmxtc2dfZGF0YShoKTsKKwkJCXN0cnVjdCBpbnBjYiAgICBwY2IsICpubmV3OworCisJCQlpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKSB7CisJCQkJcnVubmluZyA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXIgPSBubG1zZ19kYXRhKGgpOworCisJCQlpZiAoci0+aWRpYWdfZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJCQloID0gbmxtc2dfbmV4dChoLCAmbGVuKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWVtY3B5KCZwY2IuaW5wX2xhZGRyLnNfYWRkciwgci0+aWQuaWRpYWdfc3JjLCByLT5pZGlhZ19mYW1pbHkgPT0gQUZfSU5FVCA/IDQgOiA2KTsKKwkJCW1lbWNweSgmcGNiLmlucF9mYWRkci5zX2FkZHIsIHItPmlkLmlkaWFnX2RzdCwgci0+aWRpYWdfZmFtaWx5ID09IEFGX0lORVQgPyA0IDogNik7CisKKwkJCXBjYi5pbnBfbHBvcnQgPSByLT5pZC5pZGlhZ19zcG9ydDsKKwkJCXBjYi5pbnBfZnBvcnQgPSByLT5pZC5pZGlhZ19kcG9ydDsKKworCQkJcGNiLmlucF9zdGF0ZSA9IChyLT5pZGlhZ19zdGF0ZSAmIDB4ZikgPCAxMiA/IGxpbnV4X3N0YXRlc1tyLT5pZGlhZ19zdGF0ZSAmIDB4Zl0gOiAyOworCQkJaWYgKHBjYi5pbnBfc3RhdGUgPT0gNSAvKiBlc3RhYmxpc2hlZCAqLyB8fAorCQkJCXBjYi5pbnBfc3RhdGUgPT0gOCAvKiAgY2xvc2VXYWl0ICAqLyApCisJCQkJdGNwX2VzdGFiKys7CisJCQlwY2IudWlkID0gci0+aWRpYWdfdWlkOworCisJCQlubmV3ID0gU05NUF9NQUxMT0NfVFlQRURFRihzdHJ1Y3QgaW5wY2IpOworCQkJaWYgKG5uZXcgPT0gTlVMTCkgeworCQkJCXJ1bm5pbmcgPSAwOworCQkJCS8qICBYWFggcmVwb3J0IG1hbGxvYyBlcnJvciBhbmQgcmV0dXJuIC0xPyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJbWVtY3B5KG5uZXcsICZwY2IsIHNpemVvZihzdHJ1Y3QgaW5wY2IpKTsKKwkJCW5uZXctPmlucF9uZXh0ID0gdGNwX2hlYWQ7CisJCQl0Y3BfaGVhZCAgICAgICA9IG5uZXc7CisKKwkJCWggPSBubG1zZ19uZXh0KGgsICZsZW4pOworCQl9CisJCWZyZWUoYnVmKTsKKwl9CisKKwlubF9zb2NrZXRfZnJlZShubCk7CisKKwlpZiAodGNwX2hlYWQpIHsKKwkJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkxvYWRlZCBUQ1AgVGFibGUgdXNpbmcgbmV0bGlua1xuIikpOworCQlyZXR1cm4gMDsKKwl9CisJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkZhaWxlZCB0byBsb2FkIFRDUCBUYWJsZSAobmV0bGluaylcbiIpKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKwogaW50CiB0Y3BUYWJsZV9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCiB7CkBAIC01NTUsOSArNzA3LDE1IEBACiAKICAgICB0Y3BUYWJsZV9mcmVlKGNhY2hlLCBOVUxMKTsKIAorI2lmIEhBVkVfTkVUTElOS19ORVRMSU5LX0gKKwlpZiAodGNwVGFibGVfbG9hZF9uZXRsaW5rKCkgPT0gMCkgeworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogICAgIGlmICghKGluID0gZm9wZW4oIi9wcm9jL25ldC90Y3AiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiRmFpbGVkIHRvIGxvYWQgVENQIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbmV0L3RjcCAuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbmV0L3RjcCAuLi5cbiIpKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTY4LDkgKzcyNiw4IEBACiAgICAgICovCiAgICAgd2hpbGUgKGxpbmUgPT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgc3RydWN0IGlucGNiICAgIHBjYiwgKm5uZXc7Ci0gICAgICAgIHN0YXRpYyBpbnQgICAgICBsaW51eF9zdGF0ZXNbMTJdID0KLSAgICAgICAgICAgIHsgMSwgNSwgMywgNCwgNiwgNywgMTEsIDEsIDgsIDksIDIsIDEwIH07Ci0gICAgICAgIGludCAgICAgICAgICAgICBzdGF0ZSwgbHAsIGZwLCB1aWQ7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBscCwgZnA7CisgICAgICAgIGludCAgICAgICAgICAgICBzdGF0ZSwgdWlkOwogCiAgICAgICAgIGlmICg2ICE9IHNzY2FuZihsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIiUqZDogJXg6JXggJXg6JXggJXggJSpYOiUqWCAlKlg6JSpYICUqWCAlZCIsCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaAppbmRleCBhNWE2Zjc2Li41NWZlOTdiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgKQEAgLTYsNyArNiw2IEBACiAjZGVmaW5lIF9NSUJHUk9VUF9UQ1BUQUJMRV9ICiAKIGNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsIGtlcm5lbF9zdW5vczUpCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUykKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2lwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5jCmluZGV4IGUxNWEyZGUuLjFkZGNiYzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5jCkBAIC0xNiwxNSArMTYsMTUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgiCiAKICNpZmRlZiBsaW51eAogI2luY2x1ZGUgInRjcC5oIgogI2VuZGlmCiAjaW5jbHVkZSAidWRwLmgiCiAjaW5jbHVkZSAidWRwVGFibGUuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZmRlZiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMCiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgpAQCAtMzcsNyArMzcsMTAgQEAKICNkZWZpbmUgVURQX1NUQVRTX0NBQ0hFX1RJTUVPVVQJTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNpZmRlZiBGSVJTVF9QUk9UT0NPTAogcGVyZnN0YXRfcHJvdG9jb2xfdCBwc19wcm90bzsKQEAgLTEzOCw3ICsxNDEsNyBAQAogI3VuZGVmIFVEUF9OU1RBVFMKICNlbmRpZgogCi0jaWZkZWYgV0lOMzIKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2RlZmluZSBVRFBfU1RBVF9TVFJVQ1RVUkUgTUlCX1VEUFNUQVRTCiAjZW5kaWYKQEAgLTIzNSw3ICsyMzgsNyBAQAogI2RlZmluZSB1ZHBzdGF0ICAgICAgICAgIHVkcHN0YXQudWRwc3RhdAogI2VuZGlmCiAgICAgY2FzZSBVRFBJTkRBVEFHUkFNUzoKLSNpZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19JUEFDS0VUUworI2lmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19JUEFDS0VUUwogICAgICAgICByZXRfdmFsdWUgPSB1ZHBzdGF0LnVkcHNfaXBhY2tldHM7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTI0NCw3ICsyNDcsNyBAQAogI2VuZGlmCiAKICAgICBjYXNlIFVEUE5PUE9SVFM6Ci0jaWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUCisjaWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVAogICAgICAgICByZXRfdmFsdWUgPSB1ZHBzdGF0LnVkcHNfbm9wb3J0OwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC0yNTMsNyArMjU2LDcgQEAKICNlbmRpZgogCiAgICAgY2FzZSBVRFBPVVREQVRBR1JBTVM6Ci0jaWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfT1BBQ0tFVFMKKyNpZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfT1BBQ0tFVFMKICAgICAgICAgcmV0X3ZhbHVlID0gdWRwc3RhdC51ZHBzX29wYWNrZXRzOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC0yNjMsMTAgKzI2NiwxMCBAQAogCiAgICAgY2FzZSBVRFBJTkVSUk9SUzoKICAgICAgICAgcmV0X3ZhbHVlID0gdWRwc3RhdC51ZHBzX2hkcm9wcyArIHVkcHN0YXQudWRwc19iYWRzdW0gKwotI2lmZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0RJU0NBUkQKKyNpZmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRElTQ0FSRAogICAgICAgICAgICAgdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKwogI2VuZGlmCi0jaWZkZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRlVMTFNPQ0sKKyNpZmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRlVMTFNPQ0sKICAgICAgICAgICAgIHVkcHN0YXQudWRwc19mdWxsc29jayArCiAjZW5kaWYKICAgICAgICAgICAgIHVkcHN0YXQudWRwc19iYWRsZW47CkBAIC0zMjYsNiArMzI5LDcgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC0zMzUsNiArMzM5LDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS91ZHA6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdWRwOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmggYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuaAppbmRleCAwODE2ZjAxLi45ZDQ2NzFiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuaApAQCAtNiw3ICs2LDcgQEAKICNkZWZpbmUgX01JQkdST1VQX1VEUF9ICiAKIAotY29uZmlnX3JlcXVpcmUobWliSUkvdWRwVGFibGUgdXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKG1pYklJL3VkcFRhYmxlKQogCiBjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCAgICAgICAga2VybmVsX3N1bm9zNSkKIGNvbmZpZ19hcmNoX3JlcXVpcmUobGludXgsICAgICBtaWJJSS9rZXJuZWxfbGludXgpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYwppbmRleCA1N2U5NjdjLi4yYzg4NzQ5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNlbmRpZgogI2luY2x1ZGUgInVkcC5oIgogI2luY2x1ZGUgInVkcFRhYmxlLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZkZWYgaHB1eDExCiAjZGVmaW5lCVVEUFRBQkxFX0VOVFJZX1RZUEUJbWliX3VkcExzbkVudCAKQEAgLTU0LDcgKzUzLDcgQEAKICNkZWZpbmUJVURQVEFCTEVfSVNfTElOS0VEX0xJU1QKICNlbHNlCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmZGVmIEhBVkVfSVBITFBBUElfSAogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjZGVmaW5lCVVEUFRBQkxFX0VOVFJZX1RZUEUJTUlCX1VEUFJPVwkJLyogPz8/ICovCiAjZGVmaW5lCVVEUFRBQkxFX0xPQ0FMQUREUkVTUwlkd0xvY2FsQWRkcgpAQCAtMTMwLDcgKzEyOSw3IEBACiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvOwotICAgIGludCByYzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYzsKIAogICAgIERFQlVHTVNHVEwoKCJtaWJJSS91ZHBUYWJsZSIsICJJbml0aWFsaXNpbmcgVURQIFRhYmxlXG4iKSk7CiAgICAgLyoKQEAgLTE1MSw2ICsxNTAsNyBAQAogICAgICAqLwogICAgIGlpbmZvICAgICAgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaXRlcmF0b3JfaW5mbyk7CiAgICAgaWYgKCFpaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50ID0gdWRwVGFibGVfZmlyc3RfZW50cnk7CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgICAgIHVkcFRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICB1ZHBUYWJsZV9vaWQsIE9JRF9MRU5HVEgodWRwVGFibGVfb2lkKSwKICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKLSAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IocmVnaW5mbywgaWluZm8pOworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIocmVnaW5mbywgaWluZm8pOwogICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM5LDEyICsyMzksMTQgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdWRwVGFibGU6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDksNyArMzUxLDcgQEAKICAgICAgKiBYWFggLSBIb3cgY2FuIHdlIHRlbGwgaWYgdGhlIGNhY2hlIGlzIHZhbGlkPwogICAgICAqICAgICAgIE5vIGFjY2VzcyB0byAncmVxaW5mbycKICAgICAgKi8KLSAgICBpZiAodWRwX2hlYWQgPT0gMCkKKyAgICBpZiAodWRwX2hlYWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgpAQCAtNDc4LDcgKzQ4MCw3IEBACiAKICAgICBpZiAoIShpbiA9IGZvcGVuKCIvcHJvYy9uZXQvdWRwIiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3VkcFRhYmxlIiwgIkZhaWxlZCB0byBsb2FkIFVEUCBUYWJsZSAobGludXgpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbmV0L3VkcCAuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbmV0L3VkcCAuLi5cbiIpKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmgKaW5kZXggMmM2MWNkYS4uZjlhZmQ1YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBfTUlCR1JPVVBfVURQVEFCTEVfSAogCiBjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCBrZXJuZWxfc3Vub3M1KQotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcyBtaWJJSS9pcCkKK2NvbmZpZ19yZXF1aXJlKG1pYklJL2lwKQogCiBleHRlcm4gdm9pZCAgICAgaW5pdF91ZHBUYWJsZSh2b2lkKTsKIGV4dGVybiBOZXRzbm1wX05vZGVfSGFuZGxlciB1ZHBUYWJsZV9oYW5kbGVyOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGVhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMKQEAgLTAsMCArMSw0NSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworc3RhdGljIGludAoraGFuZGxlX3VwZGF0ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaW50ICpzZXQgPSAoaW50KiloYW5kbGVyLT5teXZvaWQ7CisKKyAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSAmJiAqc2V0IDwgMCkKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9FUlJfTk9UV1JJVEFCTEUpOworICAgIGVsc2UgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfQ09NTUlUKSB7CisgICAgICAgICpzZXQgPSAxOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChyZWdpbmZvLT5oYW5kbGVyTmFtZSk7CisgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCituZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKgorbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IG9pZCogaWQsIHNpemVfdCBpZGxlbiwgaW50IG1vZGUsIGludCogc2V0KQoreworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlczsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpobmQ7CisKKyAgICBobmQgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJ1cGRhdGUiLCBoYW5kbGVfdXBkYXRlcyk7CisgICAgaWYgKGhuZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGhuZC0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUOworICAgIGhuZC0+bXl2b2lkID0gc2V0OworCisgICAgcmVzID0gbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUobmFtZSwgaG5kLCBpZCwgaWRsZW4sIG1vZGUpOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShobmQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTRlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBVUERBVEVTX0gKKyNkZWZpbmUgVVBEQVRFU19ICisKKy8qKgorICogQ3JlYXRlIGEgaGFuZGxlcl9yZWdpc3RyYXRpb24gdGhhdCBjaGVja3MgKnNldCB0byBkZXRlcm1pbmUgaG93IHRvIHByb2NlZWRlLAorICogaWYgKnNldCBpcyBsZXNzIHRoYW4gMCB0aGVuIHRoZSBvYmplY3QgaXMgbm9ud3JpdGVhYmxlLCBvdGhlcndpc2UsICpzZXQgaXMKKyAqIHNldCB0byAxIGluIHRoZSBjb21taXQgcGhhc2UuIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBhcyBpbgorICogbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24uCisgKi8KKworZXh0ZXJuIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qCituZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQqIGlkLCBzaXplX3QgaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGludCogc2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jCmluZGV4IDdkNzhhMWYuLmYyZmFmODYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jCkBAIC00MCwzNCArNDAsMTIgQEAKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogI2luY2x1ZGUgInZhY21fY29uZi5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCi0jZW5kaWYKIAogI2luY2x1ZGUgInNubXBkLmgiCiAKQEAgLTg4LDE0ICs2NiwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIGNvbnRleHQgbW9kZWwgbGV2ZWwgcHJlZml4IHZpZXduYW1lIHZpZXd2YWwiKTsKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidmlldyIsIHZhY21fcGFyc2VfdmlldywgdmFjbV9mcmVlX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgdHlwZSBzdWJ0cmVlIFttYXNrXSIpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ2YWNtVmlldyIsIHZhY21fcGFyc2VfY29uZmlnX3ZpZXcsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInZhY21Hcm91cCIsIHZhY21fcGFyc2VfY29uZmlnX2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ2YWNtQWNjZXNzIiwgdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ2YWNtQXV0aEFjY2VzcyIsIHZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJ2YWNtVmlldyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfdmlldywgTlVMTCwgTlVMTCk7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoInZhY21Hcm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoInZhY21BY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigidmFjbUF1dGhBY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwogCiAgICAgLyogZWFzeSBjb21tdW5pdHkgYXV0aCBoYW5kbGVyICovCiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImF1dGhjb21tdW5pdHkiLApAQCAtMTE5LDcgKzEwMCw3IEBACiAgICAgICogRGVmaW5lIHN0YW5kYXJkIHZpZXdzICJfYWxsXyIgYW5kICJfbm9uZV8iCiAgICAgICovCiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1BPU1RfUFJFTUlCX1JFQURfQ09ORklHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19QUkVfUkVBRF9DT05GSUcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWNtX3N0YW5kYXJkX3ZpZXdzLCBOVUxMKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfUE9TVF9SRUFEX0NPTkZJRywKQEAgLTE3NCwyNCArMTU1LDI0IEBACiB2b2lkCiB2YWNtX3BhcnNlX2dyb3VwKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKIHsKLSAgICBjaGFyICAgICAgICAgICAqZ3JvdXAsICptb2RlbCwgKnNlY3VyaXR5OworICAgIGNoYXIgICAgICAgICAgICBncm91cFtWQUNNU1RSSU5HTEVOXSwgbW9kZWxbVkFDTVNUUklOR0xFTl0sIHNlY3VyaXR5W1ZBQ01TVFJJTkdMRU5dOwogICAgIGludCAgICAgICAgICAgICBpbW9kZWw7CiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqZ3AgPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICpzdDsKIAotICAgIGdyb3VwID0gc3RydG9rX3IocGFyYW0sICIgXHRcbiIsICZzdCk7Ci0gICAgbW9kZWwgPSBzdHJ0b2tfcihOVUxMLCAiIFx0XG4iLCAmc3QpOwotICAgIHNlY3VyaXR5ID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwgJnN0KTsKKyAgICBzdCA9IGNvcHlfbndvcmQocGFyYW0sIGdyb3VwLCBzaXplb2YoZ3JvdXApLTEpOworICAgIHN0ID0gY29weV9ud29yZChzdCwgbW9kZWwsIHNpemVvZihtb2RlbCktMSk7CisgICAgc3QgPSBjb3B5X253b3JkKHN0LCBzZWN1cml0eSwgc2l6ZW9mKHNlY3VyaXR5KS0xKTsKIAotICAgIGlmIChncm91cCA9PSBOVUxMIHx8ICpncm91cCA9PSAwKSB7CisgICAgaWYgKGdyb3VwWzBdID09IDApIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBHUk9VUCBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobW9kZWwgPT0gTlVMTCB8fCAqbW9kZWwgPT0gMCkgeworICAgIGlmIChtb2RlbFswXSA9PSAwKSB7CiAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTU9ERUwgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNlY3VyaXR5ID09IE5VTEwgfHwgKnNlY3VyaXR5ID09IDApIHsKKyAgICBpZiAoc2VjdXJpdHlbMF0gPT0gMCkgewogICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNFQ1VSSVRZIHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjcwLDcgKzI1MSw3IEBACiAgICAgICAgIHJldHVybiBQQVJTRV9GQUlMOwogICAgIH0KIAotICAgIGlmIChzdHJjbXAoKmNvbnRleHQsICJcIlwiIikgPT0gMCkKKyAgICBpZiAoc3RyY21wKCpjb250ZXh0LCAiXCJcIiIpID09IDAgfHwgc3RyY21wKCpjb250ZXh0LCAiXCdcJyIpID09IDApCiAgICAgICAgICoqY29udGV4dCA9IDA7CiAgICAgaWYgKHN0cmNhc2VjbXAobW9kZWwsICJhbnkiKSA9PSAwKQogICAgICAgICAqaW1vZGVsID0gU05NUF9TRUNfTU9ERUxfQU5ZOwpAQCAtNjQzLDcgKzYyNCw3IEBACiAgICAgc2l6ZV90ICAgICAgICAgIHN1Ym9pZF9sZW4gPSAwOwogICAgIHNpemVfdCAgICAgICAgICBtYXNrX2xlbiA9IDA7CiAgICAgdV9jaGFyICAgICAgICAgIHZpZXdNYXNrW1ZBQ01TVFJJTkdMRU5dOwotICAgIGludCAgICAgICAgICAgICBpOworICAgIHNpemVfdCAgICAgICAgICBpOwogICAgIGNoYXIgICAgICAgICAgICAqc3Q7CiAKICAgICBuYW1lID0gc3RydG9rX3IocGFyYW0sICIgXHRcbiIsICZzdCk7CkBAIC02ODAsNyArNjYxLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobWFzaykgewotICAgICAgICBpbnQgICAgICAgICAgICAgdmFsOworICAgICAgICB1bnNpZ25lZCBpbnQgdmFsOwogICAgICAgICBpID0gMDsKICAgICAgICAgZm9yIChtYXNrID0gc3RydG9rX3IobWFzaywgIiAuOiIsICZzdCk7IG1hc2s7IG1hc2sgPSBzdHJ0b2tfcihOVUxMLCAiIC46IiwgJnN0KSkgewogICAgICAgICAgICAgaWYgKGkgPj0gc2l6ZW9mKHZpZXdNYXNrKSkgewpAQCAtOTYyLDYgKzk0Myw3IEBACiAgICAgY29tbWNvdW50Kys7CiAKICNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOCiAgICAgaWYgKHBhcnNldHlwZSA9PSBWQUNNX0NSRUFURV9TSU1QTEVfQ09NSVBWNCB8fAogICAgICAgICBwYXJzZXR5cGUgPT0gVkFDTV9DUkVBVEVfU0lNUExFX0NPTSkgewogICAgICAgICB2YWNtX2dlbl9jb20yc2VjKGNvbW1jb3VudCwgY29tbXVuaXR5LCBhZGRyZXNzbmFtZSwKQEAgLTk2OSwxMyArOTUxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjbmFtZSwgc2l6ZW9mKHNlY25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdfcHRyLCBzaXplb2Yodmlld25hbWUpLCBjb21tdmVyc2lvbiwgY29udGV4dCk7CiAgICAgfQotICAgIAorI2VuZGlmCisKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgogICAgIGlmIChwYXJzZXR5cGUgPT0gVkFDTV9DUkVBVEVfU0lNUExFX0NPTVVOSVggfHwKICAgICAgICAgcGFyc2V0eXBlID09IFZBQ01fQ1JFQVRFX1NJTVBMRV9DT00pIHsKLSAgICAgICAgaWYgKGNvbnRleHQgJiYgKmNvbnRleHQpCi0gICAgICAgICAgICBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICItQ24gJXMgJXMgJXMgJyVzJyIsCi0gICAgICAgICAgICAgICAgIGNvbnRleHQsIHNlY25hbWUsIGFkZHJlc3NuYW1lLCBjb21tdW5pdHkpOworICAgICAgICBpZiAoICpjb250ZXh0ICkKKyAgICAgICAgICAgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiLUNuICVzICVzICVzICclcyciLAorICAgICAgICAgICAgIGNvbnRleHQsIHNlY25hbWUsIGFkZHJlc3NuYW1lLCBjb21tdW5pdHkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICIlcyAlcyAnJXMnIiwKICAgICAgICAgICAgICAgICAgc2VjbmFtZSwgYWRkcmVzc25hbWUsIGNvbW11bml0eSk7CkBAIC0xMDE0LDEwICs5OTcsMTAgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc25wcmludGYoZ3JwbmFtZSwgc2l6ZW9mKGdycG5hbWUpLCAiZ3JwJS4yOHMiLCBzZWNuYW1lKTsKICAgICAgICAgICAgIGZvciAodG1wPWdycG5hbWU7ICp0bXA7IHRtcCsrKQotICAgICAgICAgICAgICAgIGlmICghaXNhbG51bSgqdG1wKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzYWxudW0oKHVuc2lnbmVkIGNoYXIpKCp0bXApKSkKICAgICAgICAgICAgICAgICAgICAgKnRtcCA9ICdfJzsKICAgICAgICAgICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwKLSAgICAgICAgICAgICAgICAgICAgICIlcyAlcyAlcyIsIGdycG5hbWUsIG1vZGVsLCBzZWNuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICIlcyAlcyBcIiVzXCIiLCBncnBuYW1lLCBtb2RlbCwgc2VjbmFtZSk7CiAgICAgICAgICAgICBsaW5lWyBzaXplb2YobGluZSktMSBdID0gMDsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKHRva2VuLCAicGFzc2luZzogJXMgJXNcbiIsICJncm91cCIsIGxpbmUpKTsKICAgICAgICAgICAgIHZhY21fcGFyc2VfZ3JvdXAoImdyb3VwIiwgbGluZSk7CkBAIC0xMDI1LDcgKzEwMDgsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIHNucHJpbnRmKGdycG5hbWUsIHNpemVvZihncnBuYW1lKSwgImdycCUuMjhzIiwgc2VjbmFtZSk7CiAgICAgICAgIGZvciAodG1wPWdycG5hbWU7ICp0bXA7IHRtcCsrKQotICAgICAgICAgICAgaWYgKCFpc2FsbnVtKCp0bXApKQorICAgICAgICAgICAgaWYgKCFpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKSgqdG1wKSkpCiAgICAgICAgICAgICAgICAgKnRtcCA9ICdfJzsKICAgICB9CiAKQEAgLTEyMTgsOSArMTIwMSwxMSBAQAogICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKICAgICAgICAgdmlld3R5cGUgPSBWQUNNX1ZJRVdfUkVBRDsKICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfU0VUOgogICAgICAgICB2aWV3dHlwZSA9IFZBQ01fVklFV19XUklURTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKICAgICBjYXNlIFNOTVBfTVNHX1RSQVAyOgogICAgIGNhc2UgU05NUF9NU0dfSU5GT1JNOgpAQCAtMTI2MiwxMiArMTI0NywyMCBAQAogdmFjbV9jaGVja192aWV3KG5ldHNubXBfcGR1ICpwZHUsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAgICAgICAgICAgIGludCBjaGVja19zdWJ0cmVlLCBpbnQgdmlld3R5cGUpCiB7CisgICAgcmV0dXJuIHZhY21fY2hlY2tfdmlld19jb250ZW50cyhwZHUsIG5hbWUsIG5hbWVsZW4sIGNoZWNrX3N1YnRyZWUsIHZpZXd0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFDTV9DSEVDS19WSUVXX0NPTlRFTlRTX05PX0ZMQUdTKTsKK30KKworaW50Cit2YWNtX2NoZWNrX3ZpZXdfY29udGVudHMobmV0c25tcF9wZHUgKnBkdSwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoZWNrX3N1YnRyZWUsIGludCB2aWV3dHlwZSwgaW50IGZsYWdzKQorewogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICphcDsKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICpncDsKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZwOwogICAgIGNoYXIgICAgICAgICAgICB2YWNtX2RlZmF1bHRfY29udGV4dFsxXSA9ICIiOwotICAgIGNoYXIgICAgICAgICAgICpjb250ZXh0TmFtZSA9IHZhY21fZGVmYXVsdF9jb250ZXh0OwotICAgIGNoYXIgICAgICAgICAgICpzbiA9IE5VTEw7CisgICAgY29uc3QgY2hhciAgICAgKmNvbnRleHROYW1lID0gdmFjbV9kZWZhdWx0X2NvbnRleHQ7CisgICAgY29uc3QgY2hhciAgICAgKnNuID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAqdm47CiAgICAgY29uc3QgY2hhciAgICAgKnBkdV9jb21tdW5pdHk7CiAKQEAgLTEzMTQsNyArMTMwNyw5IEBACiAgICAgICAgICAqIGNvbW11bml0eSBzdHJpbmcgdG8gYSBzZWN1cml0eSBuYW1lIGZvciB1cy4gIAogICAgICAgICAgKi8KIAotICAgICAgICBpZiAocGR1LT50RG9tYWluID09IG5ldHNubXBVRFBEb21haW4KKyAgICAgICAgaWYgKDApIHsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOCisgICAgICAgIH0gZWxzZSBpZiAocGR1LT50RG9tYWluID09IG5ldHNubXBVRFBEb21haW4KICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCiAgICAgICAgICAgICB8fCBwZHUtPnREb21haW4gPT0gbmV0c25tcF9zbm1wVENQRG9tYWluCiAjZW5kaWYKQEAgLTEzMzMsNiArMTMyOCw3IEBACiAgICAgICAgICAgICBTTk1QX0ZSRUUocGR1LT5jb250ZXh0TmFtZSk7CiAgICAgICAgICAgICBwZHUtPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKICAgICAgICAgICAgIHBkdS0+Y29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dE5hbWUpOworI2VuZGlmCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KICAgICAgICAgfSBlbHNlIGlmIChwZHUtPnREb21haW4gPT0gbmV0c25tcF9VRFBJUHY2RG9tYWluCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KQEAgLTE0MjEsNyArMTQxNyw4IEBACiAgICAgICAgIGNvbnRleHROYW1lSW5kZXhbMF0gPSAnXDAnOwogCiAgICAgY29udGV4dE5hbWVJbmRleFtwZHUtPmNvbnRleHROYW1lTGVuXSA9ICdcMCc7Ci0gICAgaWYgKCFuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0TmFtZUluZGV4KSkgeworICAgIGlmICghKGZsYWdzICYgVkFDTV9DSEVDS19WSUVXX0NPTlRFTlRTX0RORV9DT05URVhUX09LKSAmJgorICAgICAgICAhbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dE5hbWVJbmRleCkpIHsKICAgICAgICAgLyoKICAgICAgICAgICogcmZjIDM0MTUgc2VjdGlvbiAzLjIsIHN0ZXAgMQogICAgICAgICAgKiBubyBzdWNoIGNvbnRleHQgaGVyZTsgcmV0dXJuIG5vIHN1Y2ggY29udGV4dCBlcnJvciAKQEAgLTE0NDcsNyArMTQ0NCw3IEBACiAgICAgICAgIHJldHVybiBWQUNNX05PQUNDRVNTOwogICAgIH0KIAotICAgIGlmIChuYW1lID09IDApIHsgICAgICAgICAgICAvKiBvbmx5IGNoZWNrIHRoZSBzZXR1cCBvZiB0aGUgdmFjbSBmb3IgdGhlIHJlcXVlc3QgKi8KKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7IC8qIG9ubHkgY2hlY2sgdGhlIHNldHVwIG9mIHRoZSB2YWNtIGZvciB0aGUgcmVxdWVzdCAqLwogICAgICAgICBERUJVR01TRygoIm1pYklJL3ZhY21fdmFycyIsICIsIERvbmUgY2hlY2tpbmcgc2V0dXBcbiIpKTsKICAgICAgICAgcmV0dXJuIFZBQ01fU1VDQ0VTUzsKICAgICB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCmluZGV4IDhlMTU5NzguLjc4NjRjZTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCkBAIC03LDcgKzcsNiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiBjb25maWdfYmVsb25nc19pbihhZ2VudF9tb2R1bGUpCiAKICNkZWZpbmUgVkFDTV9DUkVBVEVfU0lNUExFX1YzICAgICAgIDEKQEAgLTQzLDUgKzQyLDEwIEBACiAKICAgICAgaW50ICAgICAgICAgICAgIHZhY21faW5fdmlldyhuZXRzbm1wX3BkdSAqLCBvaWQgKiwgc2l6ZV90LCBpbnQpOwogICAgICBpbnQgICAgICAgICAgICAgdmFjbV9jaGVja192aWV3KG5ldHNubXBfcGR1ICosIG9pZCAqLCBzaXplX3QsIGludCwgaW50KTsKKyAgICAgaW50ICAgICAgICAgICAgIHZhY21fY2hlY2tfdmlld19jb250ZW50cyhuZXRzbm1wX3BkdSAqLCBvaWQgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQpOworCisjZGVmaW5lIFZBQ01fQ0hFQ0tfVklFV19DT05URU5UU19OT19GTEFHUyAgICAgICAgMAorI2RlZmluZSBWQUNNX0NIRUNLX1ZJRVdfQ09OVEVOVFNfRE5FX0NPTlRFWFRfT0sgIDEKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfVkFDTV9DT05GX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMKaW5kZXggYzQ3NDE4MC4uOGY0M2NkMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGlpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCA9IGdldF9maXJzdF9jb250ZXh0OwogICAgIGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50ID0gZ2V0X25leHRfY29udGV4dDsKICAgICBpaW5mby0+dGFibGVfcmVnaW5mbyA9IHRhYmxlX2luZm87Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCiAvKgpAQCAtMTQ5LDcgKzE0OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUpKTsKIAogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGdldG5leHQgYWxyZWFkeSBoYXZlIGJlZW4KQEAgLTE1OSw4ICsxNTgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgInZhY21fY29udGV4dCB0YWJsZSBhY2Nlc3NlZCBhcyBtb2RlPSVkLiAgV2UncmUgaW1wcm9wZXJseSByZWdpc3RlcmVkISIsCiAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotCi0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYwppbmRleCAwOTM3ZmM1Li44NWNlZjk0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYwpAQCAtNDAsMjQgKzQwLDE3IEBACiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAjaW5jbHVkZSAidmFjbV92YXJzLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02Niw0MSArNTksNTIgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKLSNlbmRpZgorCiBzdGF0aWMgdW5zaWduZWQgaW50IHZhY21WaWV3U3BpbkxvY2sgPSAwOwogCiB2b2lkCiBpbml0X3ZhY21fdmFycyh2b2lkKQogewogCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSAgICBzdGF0aWMgb2lkICAgICAgcmVnW10gPSB7IFNOTVBfT0lEX1NOTVBNT0RVTEVTLCAxNiwgMiwgMiwgMSB9OwotI2VuZGlmCisgICAgb2lkICAgICAgcmVnW10gPSB7IFNOTVBfT0lEX1NOTVBNT0RVTEVTLCAxNiwgMiwgMiwgMSB9OwogCiAjZGVmaW5lIFBSSVZSVwkoTkVUU05NUF9TTk1QVjJBTlkgfCAweDUwMDApCiAKICAgICBzdHJ1Y3QgdmFyaWFibGUxIHZhY21fc2VjMmdyb3VwW10gPSB7Ci0gICAgICAgIHtTRUNVUklUWUdST1VQLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezN9fSwKLSAgICAgICAge1NFQ1VSSVRZU1RPUkFHRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7NH19LAotICAgICAgICB7U0VDVVJJVFlTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezV9fSwKKyAgICAgICAge1NFQ1VSSVRZR1JPVVAsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezN9fSwKKyAgICAgICAge1NFQ1VSSVRZU1RPUkFHRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezR9fSwKKyAgICAgICAge1NFQ1VSSVRZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7NX19LAogICAgIH07CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUxIHZhY21fYWNjZXNzW10gPSB7Ci0gICAgICAgIHtBQ0NFU1NNQVRDSCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7NH19LAotICAgICAgICB7QUNDRVNTUkVBRCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs1fX0sCi0gICAgICAgIHtBQ0NFU1NXUklURSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs2fX0sCi0gICAgICAgIHtBQ0NFU1NOT1RJRlksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7N319LAotICAgICAgICB7QUNDRVNTU1RPUkFHRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7OH19LAotICAgICAgICB7QUNDRVNTU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs5fX0sCisgICAgICAgIHtBQ0NFU1NNQVRDSCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezR9fSwKKyAgICAgICAge0FDQ0VTU1JFQUQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezV9fSwKKyAgICAgICAge0FDQ0VTU1dSSVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs2fX0sCisgICAgICAgIHtBQ0NFU1NOT1RJRlksIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezd9fSwKKyAgICAgICAge0FDQ0VTU1NUT1JBR0UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs4fX0sCisgICAgICAgIHtBQ0NFU1NTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs5fX0sCiAgICAgfTsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTMgdmFjbV92aWV3W10gPSB7Ci0gICAgICAgIHtWQUNNVklFV1NQSU5MT0NLLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV92aWV3LCAxLCB7MX19LAotICAgICAgICB7VklFV01BU0ssIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDN9fSwKLSAgICAgICAge1ZJRVdUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNH19LAotICAgICAgICB7VklFV1NUT1JBR0UsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA1fX0sCi0gICAgICAgIHtWSUVXU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNn19LAorICAgICAgICB7VkFDTVZJRVdTUElOTE9DSywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3ZpZXcsIDEsIHsxfX0sCisgICAgICAgIHtWSUVXTUFTSywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDN9fSwKKyAgICAgICAge1ZJRVdUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDR9fSwKKyAgICAgICAge1ZJRVdTVE9SQUdFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDV9fSwKKyAgICAgICAge1ZJRVdTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNn19LAogICAgIH07CiAKICAgICAvKgpAQCAtMTI2LDExICsxMzAsNyBAQAogICAgICAgICAgICAgICAgICB2YWNtX2FjY2Vzc19vaWQpOwogICAgIFJFR0lTVEVSX01JQigibWliSUkvdmFjbTp2aWV3IiwgdmFjbV92aWV3LCB2YXJpYWJsZTMsIHZhY21fdmlld19vaWQpOwogCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKHJlZywgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVmlldy1iYXNlZCBBY2Nlc3MgQ29udHJvbCBNb2RlbCBmb3IgU05NUC4iKTsKLSNlbmRpZgotCisgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkocmVnLCAiVmlldy1iYXNlZCBBY2Nlc3MgQ29udHJvbCBNb2RlbCBmb3IgU05NUC4iKTsKIH0KIAogCkBAIC0xNDQsNyArMTQ0LDcgQEAKIHsKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICpncDsKICAgICBvaWQgICAgICAgICAgICAqZ3JvdXBTdWJ0cmVlOwotICAgIGludCAgICAgICAgICAgICBncm91cFN1YnRyZWVMZW47CisgICAgc3NpemVfdCAgICAgICAgIGdyb3VwU3VidHJlZUxlbjsKICAgICBpbnQgICAgICAgICAgICAgc2VjbW9kZWw7CiAgICAgY2hhciAgICAgICAgICAgIHNlY25hbWVbVkFDTVNUUklOR0xFTl0sICpjcDsKIApAQCAtMTU2LDYgKzE1Niw3IEBACiAgICAgICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgY2FzZSBTRUNVUklUWUdST1VQOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbUdyb3VwTmFtZTsKICAgICAgICAgYnJlYWs7CkBAIC0xNjUsMTAgKzE2NiwxMyBAQAogICAgIGNhc2UgU0VDVVJJVFlTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtU2VjdXJpdHlUb0dyb3VwU3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KIAorCSp2YXJfbGVuID0gMDsgLyogYXNzdW1lIDAgbGVuZ3RoIHVudGlsIGZvdW5kICovCisKICAgICBpZiAobWVtY21wKG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKSAhPSAwKSB7CiAgICAgICAgIG1lbWNweShuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbik7CiAgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbjsKQEAgLTE4MSwxMyArMTg1LDEzIEBACiAgICAgICAgIGdyb3VwU3VidHJlZSA9IG5hbWUgKyAxMzsKICAgICAgICAgZ3JvdXBTdWJ0cmVlTGVuID0gKmxlbmd0aCAtIDEzOwogICAgICAgICBpZiAoIG5hbWVbMTJdICE9IGdyb3VwU3VidHJlZUxlbiApCi0gICAgICAgICAgICByZXR1cm4gMDsJCS8qIEVpdGhlciBleHRyYSBzdWJpZHMsIG9yIGFuIGluY29tcGxldGUgc3RyaW5nICovCisgICAgICAgICAgICByZXR1cm4gTlVMTDsJLyogRWl0aGVyIGV4dHJhIHN1Ymlkcywgb3IgYW4gaW5jb21wbGV0ZSBzdHJpbmcgKi8KICAgICAgICAgY3AgPSBzZWNuYW1lOwogICAgICAgICB3aGlsZSAoZ3JvdXBTdWJ0cmVlTGVuLS0gPiAwKSB7CiAgICAgICAgICAgICBpZiAoKmdyb3VwU3VidHJlZSA+IDI1NSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICBpZiAoY3AgLSBzZWNuYW1lID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKmdyb3VwU3VidHJlZSsrOwogICAgICAgICB9CiAgICAgICAgICpjcCA9IDA7CkBAIC0yMDAsOSArMjA0LDkgQEAKICAgICAgICAgY3AgPSBzZWNuYW1lOwogICAgICAgICB3aGlsZSAoZ3JvdXBTdWJ0cmVlTGVuLS0gPiAwKSB7CiAgICAgICAgICAgICBpZiAoKmdyb3VwU3VidHJlZSA+IDI1NSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICBpZiAoY3AgLSBzZWNuYW1lID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKmdyb3VwU3VidHJlZSsrOwogICAgICAgICB9CiAgICAgICAgICpjcCA9IDA7CkBAIC0yNTIsNiArMjU2LDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4LDYgKzI4Myw3IEBACiAgICAgICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgY2FzZSBBQ0NFU1NNQVRDSDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21BY2Nlc3NDb250ZXh0TWF0Y2g7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk2LDEwICszMDIsMTMgQEAKICAgICBjYXNlIEFDQ0VTU1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21BY2Nlc3NTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQogCisJKnZhcl9sZW4gPSAwOyAvKiBhc3N1bWUgMCBsZW5ndGggdW50aWwgZm91bmQgKi8KKwogICAgIGlmIChtZW1jbXAobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pICE9IDApIHsKICAgICAgICAgbWVtY3B5KG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKTsKICAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuOwpAQCAtMzE1LDExICszMjQsMTEgQEAKICAgICAgICAgb3AgPSBuYW1lICsgMTE7CiAgICAgICAgIGxlbiA9ICpvcCsrOwogICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgY3AgPSBncm91cE5hbWU7CiAgICAgICAgIHdoaWxlIChsZW4tLSA+IDApIHsKICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgIH0KICAgICAgICAgKmNwID0gMDsKQEAgLTMyOSwxMSArMzM4LDExIEBACiAgICAgICAgICAqLwogICAgICAgICBsZW4gPSAqb3ArKzsKICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNwID0gY29udGV4dFByZWZpeDsKICAgICAgICAgd2hpbGUgKGxlbi0tID4gMCkgewogICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgfQogICAgICAgICAqY3AgPSAwOwpAQCAtMzYxLDExICszNzAsMTEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxlbiA9ICpvcDsKICAgICAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjcCA9IGdyb3VwTmFtZTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgICAgIH0KQEAgLTM3NSwxMSArMzg0LDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsZW4gPSAqb3A7CiAgICAgICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgY3AgPSBjb250ZXh0UHJlZml4OwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICAgICAgfQpAQCAtNDY5LDYgKzQ3OCw3IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gZ3AtPnN0YXR1czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICB9CisKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDk1LDYgKzUwNSw3IEBACiAgICAgICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgY2FzZSBWSUVXTUFTSzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21WaWV3TWFzazsKICAgICAgICAgYnJlYWs7CkBAIC01MDcsMTEgKzUxOCwxMyBAQAogICAgIGNhc2UgVklFV1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21WaWV3U3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KIAogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0dXJuKTsKKwogICAgIGlmICh2cC0+bWFnaWMgIT0gVkFDTVZJRVdTUElOTE9DSykgewogICAgICAgICBpZiAobWVtY21wKG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKSAhPSAwKSB7CiAgICAgICAgICAgICBtZW1jcHkobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pOwpAQCAtNTI4LDExICs1NDEsMTEgQEAKICAgICAgICAgICAgIG9wID0gbmFtZSArIDEyOwogICAgICAgICAgICAgbGVuID0gKm9wKys7CiAgICAgICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgY3AgPSB2aWV3TmFtZTsKICAgICAgICAgICAgIHdoaWxlIChsZW4tLSA+IDApIHsKICAgICAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqY3AgPSAwOwpAQCAtNTQzLDcgKzU1Niw3IEBACiAgICAgICAgICAgICBzdWJ0cmVlWzBdID0gbGVuID0gKm9wKys7CiAgICAgICAgICAgICBzdWJ0cmVlTGVuID0gMTsKICAgICAgICAgICAgIGlmIChsZW4gPiBNQVhfT0lEX0xFTikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmICggKG9wK2xlbikgIT0gKG5hbWUgKyAqbGVuZ3RoKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAvKiBEZWNsYXJlZCBsZW5ndGggZG9lc24ndCBtYXRjaCB3aGF0IHdlIGFjdHVhbGx5IGdvdCAqLwogICAgICAgICAgICAgb3AxID0gJihzdWJ0cmVlWzFdKTsKQEAgLTU2NiwxMSArNTc5LDExIEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxlbiA9ICpvcDsKICAgICAgICAgICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgY3AgPSB2aWV3TmFtZTsKICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbiAmJiBvcCA8IG5hbWUgKyAqbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgICAgICAgICB9CkBAIC02MjMsNyArNjM2LDkgQEAKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBWQUNNVklFV1NQSU5MT0NLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21WaWV3U3BpbkxvY2s7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBsb25nX3JldHVybiA9IHZhY21WaWV3U3BpbkxvY2s7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAKQEAgLTY1MSwzNCArNjY2LDExIEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gZ3AtPnZpZXdTdGF0dXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgfQorCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLW9pZCAgICAgICAgICAgICoKLXNlYzJncm91cF9nZW5lcmF0ZV9PSUQob2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4TGVuLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICogZ2VwdHIsIHNpemVfdCAqIGxlbmd0aCkKLXsKLSAgICBvaWQgICAgICAgICAgICAqaW5kZXhPaWQ7Ci0gICAgaW50ICAgICAgICAgICAgIGksIHNlY3VyaXR5TmFtZUxlbjsKLQotICAgIHNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbihnZXB0ci0+c2VjdXJpdHlOYW1lKTsKLQotICAgICpsZW5ndGggPSAyICsgc2VjdXJpdHlOYW1lTGVuICsgcHJlZml4TGVuOwotICAgIGluZGV4T2lkID0gKG9pZCAqKSBtYWxsb2MoKmxlbmd0aCAqIHNpemVvZihvaWQpKTsKLSAgICBpZiAoaW5kZXhPaWQpIHsKLSAgICAgICAgbWVtbW92ZShpbmRleE9pZCwgcHJlZml4LCBwcmVmaXhMZW4gKiBzaXplb2Yob2lkKSk7Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuXSA9IGdlcHRyLT5zZWN1cml0eU1vZGVsOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIDFdID0gc2VjdXJpdHlOYW1lTGVuOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdXJpdHlOYW1lTGVuOyBpKyspCi0gICAgICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyAyICsgaV0gPSAob2lkKSBnZXB0ci0+c2VjdXJpdHlOYW1lW2ldOwotCi0gICAgfQotICAgIHJldHVybiBpbmRleE9pZDsKLQotfQotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKIGludAogc2VjMmdyb3VwX3BhcnNlX29pZChvaWQgKiBvaWRJbmRleCwgc2l6ZV90IG9pZExlbiwKICAgICAgICAgICAgICAgICAgICAgaW50ICptb2RlbCwgdW5zaWduZWQgY2hhciAqKm5hbWUsIHNpemVfdCAqIG5hbWVMZW4pCkBAIC05ODEsNDAgKzk3Myw2IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKLW9pZCAgICAgICAgICAgICoKLWFjY2Vzc19nZW5lcmF0ZV9PSUQob2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4TGVuLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqIGFwdHIsIHNpemVfdCAqIGxlbmd0aCkKLXsKLSAgICBvaWQgICAgICAgICAgICAqaW5kZXhPaWQ7Ci0gICAgaW50ICAgICAgICAgICAgIGksIGdyb3VwTmFtZUxlbiwgY29udGV4dFByZWZpeExlbjsKLQotICAgIGdyb3VwTmFtZUxlbiA9IHN0cmxlbihhcHRyLT5ncm91cE5hbWUpOwotICAgIGNvbnRleHRQcmVmaXhMZW4gPSBzdHJsZW4oYXB0ci0+Y29udGV4dFByZWZpeCk7Ci0KLSAgICAqbGVuZ3RoID0gNCArIGdyb3VwTmFtZUxlbiArIGNvbnRleHRQcmVmaXhMZW4gKyBwcmVmaXhMZW47Ci0gICAgaW5kZXhPaWQgPSAob2lkICopIG1hbGxvYygqbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwotICAgIGlmIChpbmRleE9pZCkgewotICAgICAgICBtZW1tb3ZlKGluZGV4T2lkLCBwcmVmaXgsIHByZWZpeExlbiAqIHNpemVvZihvaWQpKTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW5dID0gZ3JvdXBOYW1lTGVuOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBOYW1lTGVuOyBpKyspCi0gICAgICAgICAgICBpbmRleE9pZFtncm91cE5hbWVMZW4gKyAxICsgaV0gPSAob2lkKSBhcHRyLT5ncm91cE5hbWVbaV07Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgZ3JvdXBOYW1lTGVuICsgMV0gPSBjb250ZXh0UHJlZml4TGVuOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29udGV4dFByZWZpeExlbjsgaSsrKQotICAgICAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgZ3JvdXBOYW1lTGVuICsgMiArIGldID0KLSAgICAgICAgICAgICAgICAob2lkKSBhcHRyLT5jb250ZXh0UHJlZml4W2ldOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIGdyb3VwTmFtZUxlbiArIGNvbnRleHRQcmVmaXhMZW4gKyAzXSA9Ci0gICAgICAgICAgICBhcHRyLT5zZWN1cml0eU1vZGVsOwotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyBncm91cE5hbWVMZW4gKyBjb250ZXh0UHJlZml4TGVuICsgNF0gPQotICAgICAgICAgICAgYXB0ci0+c2VjdXJpdHlMZXZlbDsKLQotICAgIH0KLSAgICByZXR1cm4gaW5kZXhPaWQ7Ci0KLX0KLQogaW50CiBhY2Nlc3NfcGFyc2Vfb2lkKG9pZCAqIG9pZEluZGV4LCBzaXplX3Qgb2lkTGVuLAogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqZ3JvdXBOYW1lLCBzaXplX3QgKiBncm91cE5hbWVMZW4sCkBAIC0xNTUwLDM1ICsxNTA4LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotb2lkICAgICAgICAgICAgKgotdmlld19nZW5lcmF0ZV9PSUQob2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4TGVuLAotICAgICAgICAgICAgICAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICogdnB0ciwgc2l6ZV90ICogbGVuZ3RoKQotewotICAgIG9pZCAgICAgICAgICAgICppbmRleE9pZDsKLSAgICBpbnQgICAgICAgICAgICAgaSwgdmlld05hbWVMZW4sIHZpZXdTdWJ0cmVlTGVuOwotCi0gICAgdmlld05hbWVMZW4gPSBzdHJsZW4odnB0ci0+dmlld05hbWUpOwotICAgIHZpZXdTdWJ0cmVlTGVuID0gdnB0ci0+dmlld1N1YnRyZWVMZW47Ci0KLSAgICAqbGVuZ3RoID0gMiArIHZpZXdOYW1lTGVuICsgdmlld1N1YnRyZWVMZW4gKyBwcmVmaXhMZW47Ci0gICAgaW5kZXhPaWQgPSAob2lkICopIG1hbGxvYygqbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwotICAgIGlmIChpbmRleE9pZCkgewotICAgICAgICBtZW1tb3ZlKGluZGV4T2lkLCBwcmVmaXgsIHByZWZpeExlbiAqIHNpemVvZihvaWQpKTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW5dID0gdmlld05hbWVMZW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3TmFtZUxlbjsgaSsrKQotICAgICAgICAgICAgaW5kZXhPaWRbdmlld05hbWVMZW4gKyAxICsgaV0gPSAob2lkKSB2cHRyLT52aWV3TmFtZVtpXTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyB2aWV3TmFtZUxlbiArIDFdID0gdmlld1N1YnRyZWVMZW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3U3VidHJlZUxlbjsgaSsrKQotICAgICAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgdmlld05hbWVMZW4gKyAyICsgaV0gPQotICAgICAgICAgICAgICAgIChvaWQpIHZwdHItPnZpZXdTdWJ0cmVlW2ldOwotCi0gICAgfQotICAgIHJldHVybiBpbmRleE9pZDsKLQotfQotCiBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKgogdmlld19wYXJzZV92aWV3RW50cnkob2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewpAQCAtMTkxMSwzICsxODQwLDQgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgKaW5kZXggODA5MzE1Ny4uNDcxZjc1OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgKQEAgLTcsNyArNyw3IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3ZhY20uaD4KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX2NvbnRleHQpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX2NvbmYpCiBjb25maWdfYWRkX21pYihTTk1QLVZJRVctQkFTRUQtQUNNLU1JQikKQEAgLTE5LDYgKzE5LDcgQEAKICAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3ZhY21fYWNjZXNzOwogICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfdmFjbV92aWV3OwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3ZhY21Hcm91cE5hbWU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV92YWNtU2VjdXJpdHlUb0dyb3VwU3RhdHVzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdmFjbVNlY3VyaXR5VG9Hcm91cFN0b3JhZ2VUeXBlOwpAQCAtMzYsNyArMzcsNiBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdmFjbVZpZXdTdG9yYWdlVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3ZhY21WaWV3VHlwZTsKIAotCiAgICAgIG9pZCAgICAgICAgICAgICphY2Nlc3NfZ2VuZXJhdGVfT0lEKG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKmFwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCk7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBzdWJ0cmVlTGVuKTsKICAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2aWV3X3BhcnNlX3ZpZXdFbnRyeShvaWQgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2xlbik7Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogCiAKICNkZWZpbmUgT0lEX1NOTVBWQUNNTUlCCQlTTk1QX09JRF9TTk1QTU9EVUxFUywgMTYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMKaW5kZXggNWNlZjFjZi4uNzJhNTAzZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgInJvdXRlX2hlYWRlcnMuaCIKICNkZWZpbmUgQ0FDSEVfVElNRSAoMTIwKSAgICAgICAgLyogU2Vjb25kcyAqLwpAQCAtNjMsNiArNjQsOCBAQAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGdldF9yb3V0ZXMsIGxpYm5ldHNubXBtaWJzKQorCiAjaWZuZGVmICBNSU4KICNkZWZpbmUgIE1JTihhLGIpICAgICAgICAgICAgICAgICAgICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQogI2VuZGlmCkBAIC0zMTMsMTcgKzMxNiwxOSBAQAogc3RhdGljIG1pYl9pcFJvdXRlRW50ICpydCA9IChtaWJfaXBSb3V0ZUVudCAqKSAwOwogc3RhdGljIHZvaWQgICAgIFJvdXRlX1NjYW5fUmVsb2FkKHZvaWQpOwogI2VsaWYgIWRlZmluZWQoc29sYXJpczIpCi1zdGF0aWMgUlRFTlRSWSAqKnJ0aGVhZCA9IDA7CitzdGF0aWMgUlRFTlRSWSAqKnJ0aGVhZCA9IE5VTEw7CiBzdGF0aWMgaW50ICAgICAgcnRzaXplID0gMCwgcnRhbGxvY2F0ZSA9IDA7CiAKIHN0YXRpYyB2b2lkICAgICBSb3V0ZV9TY2FuX1JlbG9hZCh2b2lkKTsKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9ST1VURVMKIFJURU5UUlkgKipuZXRzbm1wX2dldF9yb3V0ZXMoc2l6ZV90ICpzaXplKSB7CiAgICAgUm91dGVfU2Nhbl9SZWxvYWQoKTsKICAgICBpZiAoc2l6ZSkKICAgICAgICAgKnNpemUgPSBydHNpemU7CiAgICAgcmV0dXJuIHJ0aGVhZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9ST1VURVMgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaHB1eDExICovCiAKICNpZiAhKGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoc29sYXJpczIpIHx8IGRlZmluZWQoaHB1eDExKSkgJiYgZGVmaW5lZChSVEhPU1RfU1lNQk9MKSAmJiBkZWZpbmVkKFJUTkVUX1NZTUJPTCkKQEAgLTQzMiw3ICs0MzcsOCBAQAogICAgICAqIElQQUREUiBzdGFydHMgYXQgb2Zmc2V0IDEwLgogICAgICAqLwogICAgIHJlZ2lzdGVyIGludCAgICBTYXZlX1ZhbGlkLCByZXN1bHQsIFJ0SW5kZXg7Ci0gICAgc3RhdGljIGludCAgICAgIHNhdmVOYW1lTGVuID0gMCwgc2F2ZUV4YWN0ID0gMCwgc2F2ZVJ0SW5kZXggPSAwOworICAgIHN0YXRpYyBzaXplX3QgICBzYXZlTmFtZUxlbiA9IDA7CisgICAgc3RhdGljIGludCAgICAgIHNhdmVFeGFjdCA9IDAsIHNhdmVSdEluZGV4ID0gMDsKICAgICBzdGF0aWMgb2lkICAgICAgc2F2ZU5hbWVbTUFYX09JRF9MRU5dLCBDdXJyZW50W01BWF9PSURfTEVOXTsKICAgICB1X2NoYXIgICAgICAgICAqY3A7CiAgICAgb2lkICAgICAgICAgICAgKm9wOwpAQCAtNzYyLDYgKzc2OCwxMCBAQAogICAgICAgICBpZiAoZ2V0TWlic3RhdChNSUJfSVBfUk9VVEUsICZlbnRyeSwgc2l6ZW9mKG1pYjJfaXBSb3V0ZUVudHJ5X3QpLAogICAgICAgICAgICAgICAgICAgICAgICByZXFfdHlwZSwgJklQX0NtcF9Sb3V0ZSwgJk5leHRlbnRyeSkgIT0gMCkKICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUKKyAgICAgICAgaWYoZW50cnkuaXBSb3V0ZUluZm8ucmVfaXJlX3R5cGUmSVJFX0NBQ0hFKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogSEFWRV9ERUZJTkVEX0lSRV9DQUNIRSAqLwogICAgICAgICBDT1BZX0lQQUREUihjcCwgKHVfY2hhciAqKSAmIGVudHJ5LmlwUm91dGVEZXN0LCBvcCwKICAgICAgICAgICAgICAgICAgICAgY3VycmVudCArIElQX1JPVVRFQUREUl9PRkYpOwogICAgICAgICBpZiAoZXhhY3QpIHsKQEAgLTg2NSw3ICs4NzUsNyBAQAogc3RhdGljIGludCAgICAgIHFzb3J0X2NvbXBhcmUoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFJURU5UUllfNF80KSB8fCBkZWZpbmVkKFJURU5UUllfUlRfTkVYVCkgfHwgZGVmaW5lZChocHV4MTEpCisjaWYgZGVmaW5lZChSVEVOVFJZXzRfNCkgfHwgZGVmaW5lZChSVEVOVFJZX1JUX05FWFQpIHx8IGRlZmluZWQgKGhwdXgxMSkKIAogI2lmIGRlZmluZWQoUlRFTlRSWV80XzQpICYmICFkZWZpbmVkKGhwdXgxMSkKIHZvaWQKQEAgLTg3NSw3ICs4ODUsNyBAQAogICAgIFJURU5UUlkgICAgICAgICBydDsKICAgICBzdHJ1Y3QgaWZuZXQgICAgaWZuZXQ7CiAgICAgY2hhciAgICAgICAgICAgIG5hbWVbMTZdLCB0ZW1wWzE2XTsKLSNpZiAhU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRQorI2lmICFIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRQogICAgIHJlZ2lzdGVyIGNoYXIgICpjcDsKICNlbmRpZgogCkBAIC05MDgsNyArOTE4LDcgQEAKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkvdmFyX3JvdXRlIiwgImtsb29rdXAgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRQogI2lmIGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChvcGVuYnNkMikKICAgICAgICAgICAgIHN0cmxjcHkobmFtZSwgaWZuZXQuaWZfeG5hbWUsIHNpemVvZihuYW1lKSk7CiAjZWxzZQpAQCAtOTE5LDYgKzkyOSwxMCBAQAogI2VuZGlmCiAgICAgICAgICAgICBuYW1lW3NpemVvZihuYW1lKSAtIDFdID0gJ1wwJzsKICNlbHNlCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4KKyAgICAgICAgICAgIC8qIHRoaXMgZXhpc3RzIGhlcmUganVzdCBzbyB3ZSBkb24ndCBjb3B5IGlmZGVmIGxvZ2ljIGVsc2V3aGVyZSAqLworICAgICAgICAgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX2FwcGVuZF9pbnQpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoIU5FVFNOTVBfS0xPT0tVUChpZm5ldC5pZl9uYW1lLCBuYW1lLCBzaXplb2YgbmFtZSkpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkvdmFyX3JvdXRlIiwgImtsb29rdXAgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTI3LDYgKzk0MSw5IEBACiAgICAgICAgICAgICBjcCA9IChjaGFyICopIHN0cmNocihuYW1lLCAnXDAnKTsKICAgICAgICAgICAgIHN0cmluZ19hcHBlbmRfaW50KGNwLCBpZm5ldC5pZl91bml0KTsKICNlbmRpZgorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOCisgICAgICAgICAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfbGVnYWN5KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOICovCiAgICAgICAgICAgICBJbnRlcmZhY2VfU2Nhbl9Jbml0KCk7CiAgICAgICAgICAgICBydC5ydF91bml0ID0gMDsKICAgICAgICAgICAgIHdoaWxlIChJbnRlcmZhY2VfU2Nhbl9OZXh0CkBAIC0xMDMxLDEwICsxMDQ4LDEwIEBACiAgICAgY2hhciAgICAgICAgICAgIG5hbWVbMTZdLCB0ZW1wWzE2XTsKICAgICBpbnQgICAgICAgICAgICAgaGFzaHNpemU7CiAjZW5kaWYKLSAgICBzdGF0aWMgaW50ICAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IDA7CisgICAgc3RhdGljIHRpbWVfdCAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQ7CiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKIAotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICBpZiAoVGltZV9PZl9MYXN0X1JlbG9hZCArIENBQ0hFX1RJTUUgPiBub3cudHZfc2VjKQogICAgICAgICByZXR1cm47CiAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IG5vdy50dl9zZWM7CkBAIC0xMDc2LDYgKzEwOTMsMTEgQEAKICAgICB9CiAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnRlbnRyeSBpcyBhIEJTRCA0LjMgY29tcGF0ICovCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4KKyAgICAvKiB0aGlzIGV4aXN0cyBoZXJlIGp1c3Qgc28gd2UgZG9uJ3QgY29weSBpZmRlZiBsb2dpYyBlbHNld2hlcmUgKi8KKyAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfYXBwZW5kX2ludCk7CisgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2xlZ2FjeSkKKyNlbmRpZgogICAgIGZvciAodGFibGUgPSAwOyB0YWJsZSA8IE5VTV9ST1VURV9TWU1CT0xTOyB0YWJsZSsrKSB7CiAgICAgICAgIGF1dG9fbmxpc3QoUlRIQVNIU0laRV9TWU1CT0wsIChjaGFyICopICZoYXNoc2l6ZSwKICAgICAgICAgICAgICAgICAgICBzaXplb2YoaGFzaHNpemUpKTsKQEAgLTExNjAsNiArMTE4Miw4IEBACiAjZWxzZQogCiAjaWYgSEFWRV9TWVNfTUJVRl9ICituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfYXBwZW5kX2ludCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCiBzdGF0aWMgdm9pZAogUm91dGVfU2Nhbl9SZWxvYWQodm9pZCkKIHsKQEAgLTExNzAsMTEgKzExOTQsMTEgQEAKICAgICBpbnQgICAgICAgICAgICAgaSwgdGFibGU7CiAgICAgcmVnaXN0ZXIgY2hhciAgKmNwOwogICAgIGNoYXIgICAgICAgICAgICBuYW1lWzE2XSwgdGVtcFsxNl07Ci0gICAgc3RhdGljIGludCAgICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSAwOworICAgIHN0YXRpYyB0aW1lX3QgICBUaW1lX09mX0xhc3RfUmVsb2FkOwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CiAgICAgaW50ICAgICAgICAgICAgIGhhc2hzaXplOwogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgIGlmIChUaW1lX09mX0xhc3RfUmVsb2FkICsgQ0FDSEVfVElNRSA+IG5vdy50dl9zZWMpCiAgICAgICAgIHJldHVybjsKICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gbm93LnR2X3NlYzsKQEAgLTEyODYsMTAgKzEzMTAsMTAgQEAKICAgICBjaGFyICAgICAgICAgICAgbGluZVsyNTZdOwogICAgIHN0cnVjdCBydGVudHJ5ICpydDsKICAgICBjaGFyICAgICAgICAgICAgbmFtZVsxNl07Ci0gICAgc3RhdGljIGludCAgICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSAwOworICAgIHN0YXRpYyB0aW1lX3QgICBUaW1lX09mX0xhc3RfUmVsb2FkOwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgaWYgKFRpbWVfT2ZfTGFzdF9SZWxvYWQgKyBDQUNIRV9USU1FID4gbm93LnR2X3NlYykKICAgICAgICAgcmV0dXJuOwogICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSBub3cudHZfc2VjOwpAQCAtMTMxMywxNSArMTMzNywxNSBAQAogICAgIHJ0c2l6ZSA9IDA7CiAKICAgICBpZiAoIShpbiA9IGZvcGVuKCIvcHJvYy9uZXQvcm91dGUiLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlIC0gYnVycHNcbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvcm91dGUgLSBidXJwc1xuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIHN0cnVjdCBydGVudHJ5ICBydGVudDsKICAgICAgICAgY2hhciAgICAgICAgICAgIHJ0ZW50X25hbWVbMzJdOwotICAgICAgICBpbnQgICAgICAgICAgICAgcmVmY250LCBmbGFncywgbWV0cmljOwotICAgICAgICB1bnNpZ25lZCAgICAgICAgdXNlOworICAgICAgICBpbnQgICAgICAgICAgICAgcmVmY250LCBtZXRyaWM7CisgICAgICAgIHVuc2lnbmVkICAgICAgICBmbGFncywgdXNlOwogCiAgICAgICAgIHJ0ID0gJnJ0ZW50OwogICAgICAgICBtZW1zZXQoKGNoYXIgKikgcnQsICgwKSwgc2l6ZW9mKCpydCkpOwpAQCAtMTMzMiwxOCArMTM1NiwxNSBAQAogICAgICAgICAgKiBJZmFjZSBEZXN0IEdXIEZsYWdzIFJlZkNudCBVc2UgTWV0cmljIE1hc2sgTVRVIFdpbiBJUlRUCiAgICAgICAgICAqIGV0aDAgMEEwQTBBMEEgMDAwMDAwMDAgMDUgMCAwIDAgRkZGRkZGRkYgMTUwMCAwIDAgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoOCAhPSBzc2NhbmYobGluZSwgIiVzICV4ICV4ICV4ICV1ICVkICVkICV4ICUqZCAlKmQgJSpkXG4iLAorICAgICAgICBpZiAoOCAhPSBzc2NhbmYobGluZSwgIiVzICV4ICV4ICV4ICVkICV1ICVkICV4ICUqZCAlKmQgJSpkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgcnQtPnJ0X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9kc3QpKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbl9hZGRyLnNfYWRkciksCi0gICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZ2F0ZXdheSkpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2luX2FkZHIuc19hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9kc3QpKS0+c2luX2FkZHIuc19hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9nYXRld2F5KSktPnNpbl9hZGRyLnNfYWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogWFhYOiBmaXggdHlwZSBvZiB0aGUgYXJncyAKICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgJmZsYWdzLCAmcmVmY250LCAmdXNlLCAmbWV0cmljLAotICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2dlbm1hc2spKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbl9hZGRyLnNfYWRkcikpKQorICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2dlbm1hc2spKS0+c2luX2FkZHIuc19hZGRyKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzdHJsY3B5KG5hbWUsIHJ0LT5ydF9kZXYsIHNpemVvZihuYW1lKSk7CkBAIC0xNDQyLDcgKzE0NjMsNyBAQAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvbGFyaXMyICovCiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBITFBBUElfSCkgIC8qIFdJTjMyIGN5Z3dpbiAqLwogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjaWZuZGVmIE1JQl9JUFBST1RPX05FVE1HTVQKICNkZWZpbmUgTUlCX0lQUFJPVE9fTkVUTUdNVCAzCkBAIC0xNDY2LDcgKzE0ODcsNyBAQAogICAgICAqIDEuMy42LjEuMi4xLjQuMjEuMS4/LkEuQi5DLkQsICB3aGVyZSBBLkIuQy5EIGlzIElQIGFkZHJlc3MuCiAgICAgICogSVBBRERSIHN0YXJ0cyBhdCBvZmZzZXQgMTAuCiAgICAgICovCi0gICAgcmVnaXN0ZXIgaW50ICAgIFNhdmVfVmFsaWQsIHJlc3VsdCwgUnRJbmRleDsKKyAgICByZWdpc3RlciBpbnQgICAgU2F2ZV9WYWxpZCwgcmVzdWx0LCBSdEluZGV4ID0gMDsKICAgICBzdGF0aWMgaW50ICAgICAgc2F2ZU5hbWVMZW4gPSAwLCBzYXZlRXhhY3QgPSAwLCBzYXZlUnRJbmRleCA9CiAgICAgICAgIDAsIHJ0c2l6ZSA9IDA7CiAgICAgc3RhdGljIG9pZCAgICAgIHNhdmVOYW1lW01BWF9PSURfTEVOXSwgQ3VycmVudFtNQVhfT0lEX0xFTl07CkBAIC0xNDc2LDkgKzE0OTcsNyBAQAogICAgIERXT1JEICAgICAgICAgICBkd0FjdHVhbFNpemUgPSAwOwogICAgIHN0YXRpYyBQTUlCX0lQRk9SV0FSRFRBQkxFIHBJcFJ0clRhYmxlID0gTlVMTDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwotICAgIHN0YXRpYyBsb25nICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gMDsKLSAgICB1X2NoYXIgICAgICAgICAgZGVzdF9hZGRyWzRdOwotICAgIE1JQl9JUEZPUldBUkRST1cgdGVtcF9yb3c7CisgICAgc3RhdGljIHRpbWVfdCAgICBUaW1lX09mX0xhc3RfUmVsb2FkOwogICAgIHN0YXRpYyBpbl9hZGRyX3QgYWRkcl9yZXQ7CiAKIApAQCAtMTQ5NSw3ICsxNTE0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHJvdXRlX3JvdyA9IChQTUlCX0lQRk9SV0FSRFJPVykgbWFsbG9jKHNpemVvZihNSUJfSVBGT1JXQVJEUk9XKSk7CiAgICAgfQotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICBpZiAoKHJ0c2l6ZSA8PSAxKSB8fCAoVGltZV9PZl9MYXN0X1JlbG9hZCArIDUgPD0gbm93LnR2X3NlYykpCiAgICAgICAgIFNhdmVfVmFsaWQgPSAwOwogICAgIGVsc2UKQEAgLTE1NzMsMTIgKzE1OTIsMTYgQEAKICAgICAgICAgICAgICAqIGZvciBjcmVhdGlvbiBvZiBuZXcgcm93LCBvbmx5IGlwTmV0VG9NZWRpYVRhYmxlIGNhc2UgaXMgY29uc2lkZXJlZCAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCpsZW5ndGggPT0gMTQpIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgICAgICAgICAgIGRlc3RfYWRkcls0XTsKKyAgICAgICAgICAgICAgICBNSUJfSVBGT1JXQVJEUk9XIHRlbXBfcm93OworCiAgICAgICAgICAgICAgICAgY3JlYXRlX2ZsYWcgPSAxOwogICAgICAgICAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9ydGU7CiAgICAgICAgICAgICAgICAgZGVzdF9hZGRyWzBdID0gKHVfY2hhcikgbmFtZVsxMF07CiAgICAgICAgICAgICAgICAgZGVzdF9hZGRyWzFdID0gKHVfY2hhcikgbmFtZVsxMV07CiAgICAgICAgICAgICAgICAgZGVzdF9hZGRyWzJdID0gKHVfY2hhcikgbmFtZVsxMl07CiAgICAgICAgICAgICAgICAgZGVzdF9hZGRyWzNdID0gKHVfY2hhcikgbmFtZVsxM107CisgICAgICAgICAgICAgICAgbWVtc2V0KCZ0ZW1wX3JvdywgMCwgc2l6ZW9mKHRlbXBfcm93KSk7CiAgICAgICAgICAgICAgICAgdGVtcF9yb3cuZHdGb3J3YXJkRGVzdCA9ICooKERXT1JEICopIGRlc3RfYWRkcik7CiAgICAgICAgICAgICAgICAgdGVtcF9yb3cuZHdGb3J3YXJkUG9saWN5ID0gMDsKICAgICAgICAgICAgICAgICB0ZW1wX3Jvdy5kd0ZvcndhcmRQcm90byA9IE1JQl9JUFBST1RPX05FVE1HTVQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oCmluZGV4IDkxZWNlZTguLjc4NjJjNDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oCkBAIC01LDcgKzUsNyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVkFSX1JPVVRFX0gKICNkZWZpbmUgX01JQkdST1VQX1ZBUl9ST1VURV9ICiAKLWNvbmZpZ19yZXF1aXJlKG1pYklJL2lwIHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZShtaWJJSS9pcCkKIGNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsIGtlcm5lbF9zdW5vczUpCiAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfdmFyX3JvdXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oCmluZGV4IDI4ZWQ1OTkuLjNkNDg3NjggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYmluY2wuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJpbmNsLmgKQEAgLTEyLDExICsxMiw3IEBACiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jIGIvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMKaW5kZXggNjYzYTVlNS4uY2NhOTg3MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAjaW5jbHVkZSAiaXBmd2FjYy5oIgogCiAvKgpAQCAtMTg1LDQwICsxODUsNTggQEAKICAqLwogCiBzdHJ1Y3QgdmFyaWFibGUyIGlwZndhY2NfdmFyaWFibGVzW10gPSB7Ci0gICAge0lQRldBQ0NJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NJTkRFWH19LAotICAgIHtJUEZXQUNDU1JDQUREUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ1NSQ0FERFJ9fSwKLSAgICB7SVBGV0FDQ1NSQ05NLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDU1JDTk19fSwKLSAgICB7SVBGV0FDQ0RTVEFERFIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NEU1RBRERSfX0sCi0gICAge0lQRldBQ0NEU1ROTSwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RTVE5NfX0sCi0gICAge0lQRldBQ0NWSUFOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDVklBTkFNRX19LAotICAgIHtJUEZXQUNDVklBQUREUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ1ZJQUFERFJ9fSwKLSAgICB7SVBGV0FDQ1BST1RPLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BST1RPfX0sCi0gICAge0lQRldBQ0NCSURJUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NCSURJUn19LAotICAgIHtJUEZXQUNDRElSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RJUn19LAotICAgIHtJUEZXQUNDQllURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDQllURVN9fSwKLSAgICB7SVBGV0FDQ1BBQ0tFVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUEFDS0VUU319LAotICAgIHtJUEZXQUNDTlNSQ1BSVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDTlNSQ1BSVFN9fSwKLSAgICB7SVBGV0FDQ05EU1RQUlRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ05EU1RQUlRTfX0sCi0gICAge0lQRldBQ0NTUkNJU1JORywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NTUkNJU1JOR319LAotICAgIHtJUEZXQUNDRFNUSVNSTkcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDRFNUSVNSTkd9fSwKLSAgICB7SVBGV0FDQ1BPUlQxLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQxfX0sCi0gICAge0lQRldBQ0NQT1JUMiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMn19LAotICAgIHtJUEZXQUNDUE9SVDMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDN9fSwKLSAgICB7SVBGV0FDQ1BPUlQ0LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ0fX0sCi0gICAge0lQRldBQ0NQT1JUNSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNX19LAotICAgIHtJUEZXQUNDUE9SVDYsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDZ9fSwKLSAgICB7SVBGV0FDQ1BPUlQ3LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ3fX0sCi0gICAge0lQRldBQ0NQT1JUOCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUOH19LAotICAgIHtJUEZXQUNDUE9SVDksIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDl9fSwKLSAgICB7SVBGV0FDQ1BPUlQxMCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMTB9fQorICAgIHtJUEZXQUNDSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDSU5ERVh9fSwKKyAgICB7SVBGV0FDQ1NSQ0FERFIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NTUkNBRERSfX0sCisgICAge0lQRldBQ0NTUkNOTSwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1NSQ05NfX0sCisgICAge0lQRldBQ0NEU1RBRERSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRFNUQUREUn19LAorICAgIHtJUEZXQUNDRFNUTk0sIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NEU1ROTX19LAorICAgIHtJUEZXQUNDVklBTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1ZJQU5BTUV9fSwKKyAgICB7SVBGV0FDQ1ZJQUFERFIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NWSUFBRERSfX0sCisgICAge0lQRldBQ0NQUk9UTywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQUk9UT319LAorICAgIHtJUEZXQUNDQklESVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDQklESVJ9fSwKKyAgICB7SVBGV0FDQ0RJUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NESVJ9fSwKKyAgICB7SVBGV0FDQ0JZVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0JZVEVTfX0sCisgICAge0lQRldBQ0NQQUNLRVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BBQ0tFVFN9fSwKKyAgICB7SVBGV0FDQ05TUkNQUlRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ05TUkNQUlRTfX0sCisgICAge0lQRldBQ0NORFNUUFJUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NORFNUUFJUU319LAorICAgIHtJUEZXQUNDU1JDSVNSTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDU1JDSVNSTkd9fSwKKyAgICB7SVBGV0FDQ0RTVElTUk5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RTVElTUk5HfX0sCisgICAge0lQRldBQ0NQT1JUMSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMX19LAorICAgIHtJUEZXQUNDUE9SVDIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDJ9fSwKKyAgICB7SVBGV0FDQ1BPUlQzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQzfX0sCisgICAge0lQRldBQ0NQT1JUNCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNH19LAorICAgIHtJUEZXQUNDUE9SVDUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDV9fSwKKyAgICB7SVBGV0FDQ1BPUlQ2LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ2fX0sCisgICAge0lQRldBQ0NQT1JUNywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUN319LAorICAgIHtJUEZXQUNDUE9SVDgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDh9fSwKKyAgICB7SVBGV0FDQ1BPUlQ5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ5fX0sCisgICAge0lQRldBQ0NQT1JUMTAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDEwfX0KIH07CiAKIG9pZCAgICAgICAgICAgICBpcGZ3YWNjX3ZhcmlhYmxlc19vaWRbXSA9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaCBiL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oCmluZGV4IGQ5YjZlNjEuLjYzOWM3MzkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oCkBAIC02LDEwICs2LDEwIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9JUEZXQUNDX0gKIAogLyoKLSAqIHdlIHVzZSBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfc2ltcGxlX3RhYmxlIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIAogICAgIC8qCiAgICAgICogYWRkIHRoZSBtaWIgd2UgaW1wbGVtZW50IHRvIHRoZSBsaXN0IG9mIGRlZmF1bHQgbWlicyB0byBsb2FkIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jCmluZGV4IDliMWZmNTEuLmExMmEzMzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYworKysgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICkBAIC0xNiw5ICsxNywxNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaD4KLSNpbmNsdWRlICJtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAibmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oIgogI2luY2x1ZGUgIm5vdGlmaWNhdGlvbl9sb2cuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRlbGV0ZV90YWJsZV9kYXRhX3NldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKwogLyoKICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIG5sbUxvZ1RhYmxlCiAgKi8KQEAgLTE0MywxMSArMTUwLDExIEBACiAgICAgICovCiAgICAgY291bnQgPSBuZXRzbm1wX3RhYmxlX3NldF9udW1fcm93cyhubG1Mb2dUYWJsZSk7CiAgICAgREVCVUdNU0dUTCgoIm5vdGlmaWNhdGlvbl9sb2ciLAotICAgICAgICAgICAgICAgICJsb2dnZWQgbm90aWZpY2F0aW9ucyAlZDsgbWF4ICVkXG4iLAorICAgICAgICAgICAgICAgICJsb2dnZWQgbm90aWZpY2F0aW9ucyAlbHU7IG1heCAlbHVcbiIsCiAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBtYXhfbG9nZ2VkKSk7CiAgICAgaWYgKGNvdW50ID4gbWF4X2xvZ2dlZCkgewogICAgICAgICBjb3VudCA9IGNvdW50IC0gbWF4X2xvZ2dlZDsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5vdGlmaWNhdGlvbl9sb2ciLCAicmVtb3ZpbmcgJWQgZXh0cmEgbm90aWZpY2F0aW9uc1xuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoIm5vdGlmaWNhdGlvbl9sb2ciLCAicmVtb3ZpbmcgJWx1IGV4dHJhIG5vdGlmaWNhdGlvbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CiAgICAgICAgIG5ldHNubXBfbm90aWZfbG9nX3JlbW92ZV9vbGRlc3QoY291bnQpOwogICAgIH0KQEAgLTE2NSwxMyArMTcyLDEzIEBACiAgICAgICAgIGRhdGEgPSAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICopIHJvdy0+ZGF0YTsKICAgICAgICAgZGF0YSA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfZmluZF9jb2x1bW4oZGF0YSwgQ09MVU1OX05MTUxPR1RJTUUpOwogCi0gICAgICAgIGlmICh1cHRpbWUgPCAoKGxvbmcpKCooZGF0YS0+ZGF0YS5pbnRlZ2VyKSArIG1heF9hZ2UgKiAxMDAgKiA2MCkpKQorICAgICAgICBpZiAodXB0aW1lIDwgKCh1X2xvbmcpKCooZGF0YS0+ZGF0YS5pbnRlZ2VyKSArIG1heF9hZ2UgKiAxMDAgKiA2MCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCiAgICAgaWYgKGNvdW50KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJub3RpZmljYXRpb25fbG9nIiwgInJlbW92aW5nICVkIGV4cGlyZWQgbm90aWZpY2F0aW9uc1xuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoIm5vdGlmaWNhdGlvbl9sb2ciLCAicmVtb3ZpbmcgJWx1IGV4cGlyZWQgbm90aWZpY2F0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKICAgICAgICAgbmV0c25tcF9ub3RpZl9sb2dfcmVtb3ZlX29sZGVzdChjb3VudCk7CiAgICAgfQpAQCAtNDY3LDggKzQ3NCwxMCBAQAogICAgICAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGdldCBzZXQgdG8gYSB2YWx1ZSBhbmQgdGh1cwogICAgICAqIG5vdGlmaWNhdGlvbnMgbXVzdCBiZSBwb3NzaWJseSBkZWxldGVkIGZyb20gb3VyIGFyY2hpdmVzLgogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9DT01NSVQpCiAgICAgICAgIGNoZWNrX2xvZ19zaXplKDAsIE5VTEwpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIApAQCAtNTYyLDcgKzU3MSw3IEBACiAgICAgbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQobmxtTG9nVGFibGUpOwogICAgIG5sbUxvZ1RhYmxlID0gTlVMTDsKIAotICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShubG1fbW9kdWxlX29pZCwgT0lEX0xFTkdUSChubG1fbW9kdWxlX29pZCkpOworICAgIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkobmxtX21vZHVsZV9vaWQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYwppbmRleCA4OTczNTQ2Li5lOWIxMWQzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMKQEAgLTEwLDkgKzEwLDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0yNiwxMiArMjMsMTYgQEAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKICAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAiaGVhZGVyX2NvbXBsZXguaCIKICNpbmNsdWRlICJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgiCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV92YXJpYWJsZXNfb2lkOgpAQCAtNTcsMTMgKzU4LDEzIEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBTTk1QTk9USUZZRklMVEVSUFJPRklMRU5BTUUgIDMKLSAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVOQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUgICBTTk1QTk9USUZZRklMVEVSUFJPRklMRVNUT1JUWVBFICA0Ci0gICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFU1RPUlRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFU1RPUlRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZSAgIFNOTVBOT1RJRllGSUxURVJQUk9GSUxFUk9XU1RBVFVTICA1Ci0gICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRVJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUsIDIsIHsxLCAzfX0sCiAKIH07CkBAIC0xMzQsNyArMTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7Ci0KKyAgICBpbnQgcmV0VmFsOwogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUiLCAiYWRkaW5nIGRhdGEuLi4gICIpKTsKICAgICAvKgpAQCAtMTQ2LDEzICsxNDcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGhlZGF0YS0+c25tcFRhcmdldFBhcmFtc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5zbm1wVGFyZ2V0UGFyYW1zTmFtZUxlbik7CiAKLSAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZVN0b3JhZ2UsIHZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YSk7Ci0gICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUiLCAicmVnaXN0ZXJlZCBhbiBlbnRyeVxuIikpOworICAgIGlmIChoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YSgmc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZVN0b3JhZ2UsIHZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEsIDEpICE9IE5VTEwpeworICAgICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKKyAgICAgICByZXRWYWwgPSBTTk1QRVJSX1NVQ0NFU1M7CisgICAgfWVsc2V7CisgICAgICAgcmV0VmFsID0gU05NUEVSUl9HRU5FUlI7ICAJCisgICAgfQogCiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSIsICJkb25lLlxuIikpOwotICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgcmV0dXJuIHJldFZhbDsKIH0KIAogCkBAIC0yMDMsNyArMjA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVJvd1N0YXR1cywgJnRtcGludCk7CiAKLSAgICBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX2FkZChTdG9yYWdlVG1wKTsKKyAgICBpZiAoc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV9hZGQoU3RvcmFnZVRtcCkgIT0gU05NUEVSUl9TVUNDRVNTKXsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnNubXBUYXJnZXRQYXJhbXNOYW1lKTsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZSk7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wKTsKKyAgICB9CiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSIsICJkb25lLlxuIikpOwogfQpAQCAtMjIxLDcgKzIzMCw2IEBACiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwogICAgIGNoYXIgICAgICAgICAgICpjcHRyOwotICAgIHNpemVfdCAgICAgICAgICB0bXBpbnQ7CiAgICAgc3RydWN0IHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfZGF0YSAqU3RvcmFnZVRtcDsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXg7CiAKQEAgLTI1NSwxMiArMjYzLDEyIEBACiAgICAgICAgICAgICAgICAgcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlU3RvclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1waW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgY3B0ciA9CiAgICAgICAgICAgICAgICAgcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlUm93U3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CkBAIC0zMDQsNiArMzEyLDcgQEAKICAgICB9CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBOT1RJRllGSUxURVJQUk9GSUxFTkFNRToKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTUsNyArMzI0LDcgQEAKICAgICBjYXNlIFNOTVBOT1RJRllGSUxURVJQUk9GSUxFUk9XU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVSb3dTdGF0dXM7CiAgICAgICAgIGJyZWFrOwotCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KQEAgLTM0NSw2ICszNTQsNyBAQAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEVSUk9SX01TRygiIik7CiAgICAgfQorCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTM1Miw2ICszNjIsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfZGF0YSAqU3RvcmFnZU5ldzsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCisKIGludAogd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTQwMiw3ICs0MTQsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgdG1wdmFyID0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lOwogICAgICAgICB0bXBsZW4gPSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWVMZW47Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZSA9IGNhbGxvYygxLCB2YXJfdmFsX2xlbiArIDEpOworICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWUgPSAoY2hhciopY2FsbG9jKDEsIHZhcl92YWxfbGVuICsgMSk7CiAgICAgICAgIGlmIChOVUxMID09IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZSkKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwogICAgICAgICBicmVhazsKQEAgLTQ0Miw2ICs0NTQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNTM0LDcgKzU0Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTY0OSw2ICs2NjIsOCBAQAogCiAgICAgICAgICAgICBTdG9yYWdlTmV3ID0KICAgICAgICAgICAgICAgICBTTk1QX01BTExPQ19TVFJVQ1Qoc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnNubXBUYXJnZXRQYXJhbXNOYW1lID0KICAgICAgICAgICAgICAgICBuZXRzbm1wX21lbWR1cCh2YXJzLT52YWwuc3RyaW5nLCB2YXJzLT52YWxfbGVuKTsKICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnNubXBUYXJnZXRQYXJhbXNOYW1lTGVuID0gdmFycy0+dmFsX2xlbjsKQEAgLTc4NSwxMiArODAwLDE1IEBACiAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVSb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CiAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gTlVMTDsKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCiAKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAorCiAKIGNoYXIgICAgICAgICAgICoKIGdldF9GaWx0ZXJQcm9maWxlTmFtZShjb25zdCBjaGFyICpwYXJhbU5hbWUsIHNpemVfdCBwYXJhbU5hbWVfbGVuLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKaW5kZXggOTczNGNiZS4uNjE2YmNkYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCkBAIC01NSw5ICs1NSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICopOwogICAgICBTTk1QQ2FsbGJhY2sgICAgc3RvcmVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVN0b3JUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVSb3dTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgIGNoYXIgICAgICAgICAgICpnZXRfRmlsdGVyUHJvZmlsZU5hbWUoY29uc3QgY2hhciAqcGFyYW1OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJhbU5hbWVfbGVuLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jCmluZGV4IDNkM2U0MDEuLjkxYWRiMmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMKQEAgLTgsMTEgKzgsOSBAQAogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0zOCwxMiArMzYsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaD4KLSNpbmNsdWRlICJtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAibmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oIgogCiAjaWZkZWYgVVNJTkdfTk9USUZJQ0FUSU9OX0xPR19NSUJfTk9USUZJQ0FUSU9OX0xPR19NT0RVTEUKICMgICBpbmNsdWRlICJub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgiCiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIFNOTVBDYWxsYmFjayAgICBzdG9yZV9zbm1wTm90aWZ5VGFibGU7CiAKIC8qCkBAIC02MCwxMSArNjIsNiBAQAogc3RhdGljIG9pZCBzbm1wTm90aWZ5RnVsbENvbXBsaWFuY2VbXSA9CiAgICAgeyBTTk1QX09JRF9TTk1QTU9EVUxFUywgMTMsIDMsIDEsIDMgfTsgLyogU05NUC1OT1RJRklDQVRJT04tTUlCOjpzbm1wTm90aWZ5RnVsbENvbXBsaWFuY2UgKi8KIAotdm9pZCBzaHV0ZG93bl9zbm1wTm90aWZ5VGFibGUodm9pZCkKLXsKLSAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUoc25tcE5vdGlmeUZ1bGxDb21wbGlhbmNlLCBPSURfTEVOR1RIKHNubXBOb3RpZnlGdWxsQ29tcGxpYW5jZSkpOwotfQotCiAKIC8qCiAgKiB2YXJpYWJsZTIgc25tcE5vdGlmeVRhYmxlX3ZhcmlhYmxlczoKQEAgLTc4LDE1ICs3NSwxNyBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgU05NUE5PVElGWVRBRyAgICAgICAgIDQKLSAgICB7U05NUE5PVElGWVRBRywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtTTk1QTk9USUZZVEFHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgU05NUE5PVElGWVRZUEUgICAgICAgIDUKLSAgICB7U05NUE5PVElGWVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCAzfX0sCisgICAge1NOTVBOT1RJRllUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIFNOTVBOT1RJRllTVE9SQUdFVFlQRSAgNgotICAgIHtTTk1QTk9USUZZU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCisgICAge1NOTVBOT1RJRllTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUgICBTTk1QTk9USUZZUk9XU1RBVFVTICAgNwotICAgIHtTTk1QTk9USUZZUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLAotICAgICB7MSwgNX19LAorICAgIHtTTk1QTk9USUZZUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgNX19LAogCiB9OwogLyoKQEAgLTExMCw4ICsxMDksOCBAQAogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgcHJvZmlsZU5hbWVMZW47CiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2cCwgKmhlYWQ7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICB2Yl9vaWRfZXhjbHVkZWQgPSAwOwotICAgIGV4dGVybiBvaWQgICAgICAgICAgICAgc25tcHRyYXBfb2lkW107Ci0gICAgZXh0ZXJuIHNpemVfdCAgICAgICAgICBzbm1wdHJhcF9vaWRfbGVuOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICAgc25tcHRyYXBfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IHNpemVfdCAgICBzbm1wdHJhcF9vaWRfbGVuOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBwYXJhbU5hbWUpOwogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcGR1KTsKQEAgLTIxOSw3ICsyMTgsNyBAQAogICAgIG5ldHNubXBfcGR1ICAgICp0ZW1wbGF0ZV9wZHUgPSAobmV0c25tcF9wZHUgKikgc2VydmVyYXJnOwogICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDAsIHNlbmQgPSAwOwogCi0gICAgREVCVUdNU0dUTCgoInNlbmRfbm90aWZpY2F0aW9ucyIsICJzdGFydGluZzogcGR1PSV4LCB2YXJzPSV4XG4iLAorICAgIERFQlVHTVNHVEwoKCJzZW5kX25vdGlmaWNhdGlvbnMiLCAic3RhcnRpbmc6IHBkdT0lcCwgdmFycz0lcFxuIiwKICAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9wZHUsIHRlbXBsYXRlX3BkdS0+dmFyaWFibGVzKSk7CiAKICAgICBmb3IgKGhwdHIgPSBzbm1wTm90aWZ5VGFibGVTdG9yYWdlOyBocHRyOyBocHRyID0gaHB0ci0+bmV4dCkgewpAQCAtMjg2LDcgKzI4NSw3IEBACiAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnB0cjsKICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnBwdHI7CiAgICAgc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICpucHRyOwotICAgIGludCAgICAgICAgICAgICBjb25maXJtLCBpOworICAgIGludCAgICAgICAgICAgICBjb25maXJtLCBpLCBidWZMZW47CiAgICAgY2hhciAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF07CiAgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwogICAgIHN0cnVjdCBhZ2VudF9hZGRfdHJhcF9hcmdzICphcmdzID0KQEAgLTMwMyw4ICszMDIsOSBAQAogICAgICAqIFhYWDogU1RBUlQgbW92ZSB0YXJnZXQgY3JlYXRpb24gdG8gdGFyZ2V0IGNvZGUgCiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9FTlRSSUVTOyBpKyspIHsKLSAgICAgICAgc3ByaW50ZihidWYsICJpbnRlcm5hbCVkIiwgaSk7Ci0gICAgICAgIGlmIChnZXRfYWRkckZvck5hbWUoYnVmKSA9PSBOVUxMICYmIGdldF9wYXJhbUVudHJ5KGJ1ZikgPT0gTlVMTCkKKyAgICAgICAgYnVmTGVuID0gc3ByaW50ZihidWYsICJpbnRlcm5hbCVkIiwgaSk7CisgICAgICAgIGlmIChnZXRfYWRkckZvck5hbWUyKGJ1ZiwgYnVmTGVuKSA9PSBOVUxMICYmCisgICAgICAgICAgICBnZXRfcGFyYW1FbnRyeShidWYpID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGkgPT0gTUFYX0VOVFJJRVMpIHsKQEAgLTMyNiw3ICszMjYsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcHRyID0gc25tcFRhcmdldEFkZHJUYWJsZV9jcmVhdGUoKTsKLSAgICBwdHItPm5hbWUgPSBzdHJkdXAoYnVmKTsKKyAgICBwdHItPm5hbWVEYXRhID0gbmV0c25tcF9tZW1kdXAoYnVmLCBidWZMZW4pOworICAgIHB0ci0+bmFtZUxlbiA9IGJ1ZkxlbjsKICAgICBtZW1jcHkocHRyLT50RG9tYWluLCB0LT5kb21haW4sIHQtPmRvbWFpbl9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAgICAgcHRyLT50RG9tYWluTGVuID0gdC0+ZG9tYWluX2xlbmd0aDsKICAgICBwdHItPnRBZGRyZXNzTGVuID0gdC0+cmVtb3RlX2xlbmd0aDsKQEAgLTMzNSw4ICszMzYsOCBAQAogICAgIHB0ci0+dGltZW91dCA9IHNzLT50aW1lb3V0IC8gMTAwMDA7CiAgICAgcHRyLT5yZXRyeUNvdW50ID0gc3MtPnJldHJpZXM7CiAgICAgU05NUF9GUkVFKHB0ci0+dGFnTGlzdCk7Ci0gICAgcHRyLT50YWdMaXN0ID0gc3RyZHVwKHB0ci0+bmFtZSk7Ci0gICAgcHRyLT5wYXJhbXMgPSBzdHJkdXAocHRyLT5uYW1lKTsKKyAgICBwdHItPnRhZ0xpc3QgPSBzdHJkdXAoYnVmKTsgLyogc3RyZHVwIG9rIHNpbmNlIGJ1ZiBjb250YWlucyAnaW50ZXJuYWwlZCcgKi8KKyAgICBwdHItPnBhcmFtcyA9IHN0cmR1cChidWYpOwogICAgIHB0ci0+c3RvcmFnZVR5cGUgPSBTVF9SRUFET05MWTsKICAgICBwdHItPnJvd1N0YXR1cyA9IFJTX0FDVElWRTsKICAgICBwdHItPnNlc3MgPSBzczsKQEAgLTM1Myw2ICszNTQsMTAgQEAKICAgICAgICAgcHB0ci0+c2VjTW9kZWwgPSBzcy0+c2VjdXJpdHlNb2RlbDsKICAgICAgICAgcHB0ci0+c2VjTGV2ZWwgPSBzcy0+c2VjdXJpdHlMZXZlbDsKICAgICAgICAgcHB0ci0+c2VjTmFtZSA9IChjaGFyICopIG1hbGxvYyhzcy0+c2VjdXJpdHlOYW1lTGVuICsgMSk7CisgICAgICAgIGlmIChwcHRyLT5zZWNOYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2UocHB0cik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkoKHZvaWQgKikgcHB0ci0+c2VjTmFtZSwgKHZvaWQgKikgc3MtPnNlY3VyaXR5TmFtZSwKICAgICAgICAgICAgICAgIHNzLT5zZWN1cml0eU5hbWVMZW4pOwogICAgICAgICBwcHRyLT5zZWNOYW1lW3NzLT5zZWN1cml0eU5hbWVMZW5dID0gMDsKQEAgLTM2OCw2ICszNzMsMTAgQEAKICAgICAgICAgcHB0ci0+c2VjTmFtZSA9IE5VTEw7CiAgICAgICAgIGlmIChzcy0+Y29tbXVuaXR5ICYmIChzcy0+Y29tbXVuaXR5X2xlbiA+IDApKSB7CiAgICAgICAgICAgICBwcHRyLT5zZWNOYW1lID0gKGNoYXIgKikgbWFsbG9jKHNzLT5jb21tdW5pdHlfbGVuICsgMSk7CisgICAgICAgICAgICBpZiAocHB0ci0+c2VjTmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZShwcHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSgodm9pZCAqKSBwcHRyLT5zZWNOYW1lLCAodm9pZCAqKSBzcy0+Y29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgIHNzLT5jb21tdW5pdHlfbGVuKTsKICAgICAgICAgICAgIHBwdHItPnNlY05hbWVbc3MtPmNvbW11bml0eV9sZW5dID0gMDsKQEAgLTM4NSw2ICszOTQsOCBAQAogICAgICAqIG5vdGlmeSB0YWJsZSAKICAgICAgKi8KICAgICBucHRyID0gU05NUF9NQUxMT0NfU1RSVUNUKHNubXBOb3RpZnlUYWJsZV9kYXRhKTsKKyAgICBpZiAobnB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKICAgICBucHRyLT5zbm1wTm90aWZ5TmFtZSA9IHN0cmR1cChidWYpOwogICAgIG5wdHItPnNubXBOb3RpZnlOYW1lTGVuID0gc3RybGVuKGJ1Zik7CiAgICAgbnB0ci0+c25tcE5vdGlmeVRhZyA9IHN0cmR1cChidWYpOwpAQCAtNDExLDE4ICs0MjIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhwdHIsICpuaHB0cjsKLSAgICBzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKm5wdHI7CiAKICAgICBmb3IgKGhwdHIgPSBzbm1wTm90aWZ5VGFibGVTdG9yYWdlOyBocHRyOyBocHRyID0gbmhwdHIpIHsKLSAgICAgICAgbnB0ciA9IChzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKikgaHB0ci0+ZGF0YTsKKyAgICAgICAgc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICpucHRyID0gaHB0ci0+ZGF0YTsKICAgICAgICAgbmhwdHIgPSBocHRyLT5uZXh0OwogICAgICAgICBpZiAobnB0ci0+c25tcE5vdGlmeVN0b3JhZ2VUeXBlID09IFNUX1JFQURPTkxZKSB7CiAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZzbm1wTm90aWZ5VGFibGVTdG9yYWdlLCBocHRyKTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShucHRyLT5zbm1wTm90aWZ5TmFtZSk7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobnB0ci0+c25tcE5vdGlmeVRhZyk7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobnB0cik7CisgICAgICAgICAgICBmcmVlKG5wdHItPnNubXBOb3RpZnlOYW1lKTsKKyAgICAgICAgICAgIGZyZWUobnB0ci0+c25tcE5vdGlmeVRhZyk7CisgICAgICAgICAgICBmcmVlKG5wdHIpOwogICAgICAgICB9CiAgICAgfQorICAgIHNubXBOb3RpZnlUYWJsZVN0b3JhZ2UgPSBOVUxMOwogICAgIHJldHVybiAoMCk7CiB9CiAKQEAgLTQ4Miw2ICs0OTMsMzcgQEAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgImRvbmUuXG4iKSk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3NubXBOb3RpZnlUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAic2h1dHRpbmcgZG93biAuLi4gIikpOworCisgICAgbm90aWZ5VGFibGVfdW5yZWdpc3Rlcl9ub3RpZmljYXRpb25zKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1BSRV9VUERBVEVfQ09ORklHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19QUkVfVVBEQVRFX0NPTkZJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5VGFibGVfdW5yZWdpc3Rlcl9ub3RpZmljYXRpb25zLCBOVUxMLCBGQUxTRSk7CisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX05PVElGSUNBVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVRhYmxlX3JlZ2lzdGVyX25vdGlmaWNhdGlvbnMsIE5VTEwsIEZBTFNFKTsKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfU0VORF9UUkFQMiwgc2VuZF9ub3RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBGQUxTRSk7CisjaWZuZGVmIERJU0FCTEVfU05NUFYxCisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1NFTkRfVFJBUDEsIHNlbmRfbm90aWZpY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgRkFMU0UpOworI2VuZGlmCisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZV9zbm1wTm90aWZ5VGFibGUsIE5VTEwsIEZBTFNFKTsKKworICAgIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkoc25tcE5vdGlmeUZ1bGxDb21wbGlhbmNlKTsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAiZG9uZS5cbiIpKTsKK30KIAogLyoKICAqIHNubXBOb3RpZnlUYWJsZV9hZGQoKTogYWRkcyBhIHN0cnVjdHVyZSBub2RlIHRvIG91ciBkYXRhIHNldCAKQEAgLTQ5MCw3ICs1MzIsNyBAQAogc25tcE5vdGlmeVRhYmxlX2FkZChzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKnRoZWRhdGEpCiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKLQorICAgIGludCByZXRWYWw7CQogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwogICAgIC8qCkBAIC01MDMsMTIgKzU0NSwxNyBAQAogCiAKIAotICAgIGhlYWRlcl9jb21wbGV4X2FkZF9kYXRhKCZzbm1wTm90aWZ5VGFibGVTdG9yYWdlLCB2YXJzLCB0aGVkYXRhKTsKLSAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKKyAgICBpZiAoaGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGEoJnNubXBOb3RpZnlUYWJsZVN0b3JhZ2UsIHZhcnMsIHRoZWRhdGEsIDEpCisgICAgICAgICE9IE5VTEwpeworICAgIAlERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKKwlyZXRWYWwgPSBTTk1QRVJSX1NVQ0NFU1M7CisgICAgfWVsc2V7CisgICAgICAgIHJldFZhbCA9IFNOTVBFUlJfR0VORVJSOyAKKyAgICB9CQogCiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgImRvbmUuXG4iKSk7Ci0gICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICByZXR1cm4gcmV0VmFsOwogfQogCiAKQEAgLTU1OSwxNSArNjA2LDIxIEBACiAgICAgbGluZSA9CiAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fSU5URUdFUiwgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5zbm1wTm90aWZ5U3RvcmFnZVR5cGUsICZ0bXBpbnQpOworICAgIGlmICghU3RvcmFnZVRtcC0+c25tcE5vdGlmeVN0b3JhZ2VUeXBlKQorICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5U3RvcmFnZVR5cGUgPSBTVF9SRUFET05MWTsKIAogICAgIGxpbmUgPQogICAgICAgICByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX0lOVEVHRVIsIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+c25tcE5vdGlmeVJvd1N0YXR1cywgJnRtcGludCk7CisgICAgaWYgKCFTdG9yYWdlVG1wLT5zbm1wTm90aWZ5Um93U3RhdHVzKQorICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5Um93U3RhdHVzID0gUlNfQUNUSVZFOwogCiAKLQotCi0gICAgc25tcE5vdGlmeVRhYmxlX2FkZChTdG9yYWdlVG1wKTsKKyAgICBpZiAoc25tcE5vdGlmeVRhYmxlX2FkZChTdG9yYWdlVG1wKSAhPSBTTk1QRVJSX1NVQ0NFU1MpeworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+c25tcE5vdGlmeU5hbWUpOworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZyk7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wKTsKKyAgICB9CiAKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAiZG9uZS5cbiIpKTsKQEAgLTY2OCw2ICs3MjEsNyBAQAogICAgIH0KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUE5PVElGWVRBRzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBOb3RpZnlUYWc7CiAgICAgICAgIGJyZWFrOwpAQCAtNjgwLDYgKzczNCw3IEBACiAgICAgY2FzZSBTTk1QTk9USUZZUk9XU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcE5vdGlmeVJvd1N0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KQEAgLTY4OCw2ICs3NDMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19SRUFEX1NVUFBPUlQKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgU05NUE5PVElGWVRBRzoKICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnTGVuOwpAQCAtNzA4LDYgKzc2NCw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgRVJST1JfTVNHKCIiKTsKICAgICB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fUkVBRF9TVVBQT1JUICovIAogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC03MzYsNiArNzkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqU3RvcmFnZU5ldzsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCisKIGludAogd3JpdGVfc25tcE5vdGlmeVRhZyhpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtNzcwLDEwICs4MjksMTAgQEAKICAgICAgICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fT0NURVRfU1RSKSB7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YXJfdmFsX2xlbiA8IDAgfHwgdmFyX3ZhbF9sZW4gPiAyNTUpIHsKKyAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gMjU1KSB7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzbm1wVGFnVmFsaWQodmFyX3ZhbCwgdmFyX3ZhbF9sZW4pKSB7CisgICAgICAgIGlmICghc25tcFRhZ1ZhbGlkKChjaGFyICopIHZhcl92YWwsIHZhcl92YWxfbGVuKSkgewogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03ODUsNyArODQ0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHRtcHZhciA9IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWc7CiAgICAgICAgIHRtcGxlbiA9IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWdMZW47Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWcgPSBjYWxsb2MoMSwgdmFyX3ZhbF9sZW4gKyAxKTsKKyAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZyA9IChjaGFyKiljYWxsb2MoMSwgdmFyX3ZhbF9sZW4gKyAxKTsKICAgICAgICAgaWYgKE5VTEwgPT0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZykKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwogICAgICAgICBicmVhazsKQEAgLTgyMSw2ICs4ODAsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMDQxLDcgKzExMDEsNyBAQAogICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RvcmFnZU5ldy0+c25tcE5vdGlmeU5hbWUgPSBjYWxsb2MoIDEsIHZwLT52YWxfbGVuICsgMSApOworICAgICAgICAgICAgU3RvcmFnZU5ldy0+c25tcE5vdGlmeU5hbWUgPSAoY2hhciopY2FsbG9jKCAxLCB2cC0+dmFsX2xlbiArIDEgKTsKICAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3LT5zbm1wTm90aWZ5TmFtZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgICAgICAgICB9CkBAIC0xMTU2LDcgKzEyMTYsOSBAQAogICAgICAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeVJvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKICAgICAgICAgICAgIFN0b3JhZ2VOZXcgPSBOVUxMOwogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCmluZGV4IDlhOTM2NDUuLjE4YmYxYmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKQEAgLTY0LDEwICs2NCwxMiBAQAogICAgICBpbnQgICAgICAgICAgICAgc25tcE5vdGlmeVRhYmxlX2FkZChzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoZWRhdGEpOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeVRhZzsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeVN0b3JhZ2VUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeVJvd1N0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA5ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIuaApAQCAtMCwwICsxLDggQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZSkKK2NvbmZpZ19hZGRfbWliKFJNT04tTUlCKQorCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVkZDYxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cy5oCkBAIC0wLDAgKzEsNyBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworI2lmIGRlZmluZWQobGludXgpCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNDJjMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgInJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaCIKKyNpbmNsdWRlICJybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAicm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaCIKKworLyoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBnZXRpZmFkZHJzIGZhaWxlZCAKKyAqIEByZXR2YWwgLTIgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KKworc3RydWN0IGlmbmFtZSAqCitldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IChzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQsIGludCAqcmV0dmFsKQoreworICAgIHN0cnVjdCBpZmFkZHJzICphZGRycyA9IE5VTEwsICpwID0gTlVMTDsKKyAgICBzdHJ1Y3QgaWZuYW1lICpuYW1lcHRyMT1OVUxMLCAqbmFtZXB0cjIgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoZ2V0aWZhZGRycygmYWRkcnMpKSA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiZ2V0aWZhZGRycyBmYWlsZWRcbiIpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9uYW1lX2xpc3RfZ2V0LCBnZXRpZmFkZHJzIGZhaWxlZFxuIik7CisgICAgICAgICpyZXR2YWwgPSAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yIChwID0gYWRkcnM7IHA7IHAgPSBwLT5pZmFfbmV4dCkgeworCisgICAgICAgIGlmICghbGlzdF9oZWFkKSB7CisgICAgICAgICAgICBsaXN0X2hlYWQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgICAgIGlmICghbGlzdF9oZWFkKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICAgICAgICAgICAgICpyZXR2YWwgPSAtMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbXNldChsaXN0X2hlYWQsIDAsIHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBzdHJsY3B5KGxpc3RfaGVhZC0+bmFtZSwgcC0+aWZhX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgICBmb3IgKG5hbWVwdHIxID0gbGlzdF9oZWFkOyBuYW1lcHRyMTsgbmFtZXB0cjIgPSBuYW1lcHRyMSwgbmFtZXB0cjEgPSBuYW1lcHRyMS0+aWZuX25leHQpCisgICAgICAgICAgICBpZiAoIXN0cm5jbXAocC0+aWZhX25hbWUsIG5hbWVwdHIxLT5uYW1lLCBJRl9OQU1FU0laRSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG5hbWVwdHIxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbmFtZXB0cjItPmlmbl9uZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgIGlmICghbmFtZXB0cjItPmlmbl9uZXh0KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKSk7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICBldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSAobGlzdF9oZWFkKTsKKyAgICAgICAgICAgIGZyZWVpZmFkZHJzKGFkZHJzKTsKKyAgICAgICAgICAgICpyZXR2YWwgPSAtMjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG5hbWVwdHIyID0gbmFtZXB0cjItPmlmbl9uZXh0OworICAgICAgICBtZW1zZXQobmFtZXB0cjIsIDAsIHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgIHN0cmxjcHkobmFtZXB0cjItPm5hbWUsIHAtPmlmYV9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGZyZWVpZmFkZHJzKGFkZHJzKTsKKyAgICAqcmV0dmFsID0gMDsKKyAgICByZXR1cm4gbGlzdF9oZWFkOworfQorCisKKy8qCisgKiBAcmV0dmFsIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIHBvaW50ZXIKKyAqLworCitpbnQKK2V0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQpCit7CisgICAgc3RydWN0IGlmbmFtZSAqbmFtZXB0cjEgPSBOVUxMLCAqbmFtZXB0cjIgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlOiBpbnZhbGlkIHBvaW50ZXIgbGlzdF9oZWFkIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSIsCisgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvaW50ZXIgbGlzdF9oZWFkXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKG5hbWVwdHIxID0gbGlzdF9oZWFkOyBuYW1lcHRyMTsgbmFtZXB0cjEgPSBuYW1lcHRyMikgeworICAgICAgICAgICAgbmFtZXB0cjIgPSBuYW1lcHRyMS0+aWZuX25leHQ7CisgICAgICAgICAgICBmcmVlIChuYW1lcHRyMSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIDogbm90IGZvdW5kCisgKiBAcmV0dmFsICEwIDogaWZJbmRleAorICovCisKK2ludAorZXRoZXJzdGF0c19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQgKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkgeworI2lmbmRlZiBTSU9DR0lGSU5ERVgKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgc3RydWN0IGlmcmVxICAgIGlmcnE7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsIiwgImlmaW5kZXhfZ2V0XG4iKSk7CisKKyAgICByYyA9IF9ldGhlclN0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0dJRklOREVYLCAmaWZycSwgbmFtZSk7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHM6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAiaWZpbmRleF9nZXQgZXJyb3Igb24gaW5lcmZhY2UgJyVzJ1xuIiwgbmFtZSkpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwsIGlmaW5kZXhfZ2V0IGVycm9yIG9uIGluZXJmYWNlICclcydcbiIsIG5hbWUpOworICAgICAgICByZXR1cm4gMDsKKworICAgIH0KKworICAgIHJldHVybiBpZnJxLmlmcl9pZmluZGV4OworI2VuZGlmIC8qIFNJT0NHSUZJTkRFWCAqLworfQorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGNhbm5vdCBnZXQgRVRIVE9PTF9EUlZJTkZPIGZhaWxlZCAKKyAqIEByZXR2YWwgLTIgbl9zdGF0cyB6ZXJvIC0gbm8gc3RhdGlzdGNzIGF2YWlsYWJsZQorICogQHJldHZhbCAtMyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgaG9sZGluZyB0aGUgc3RhdGlzdGljcyBmYWlsZWQKKyAqIEByZXR2YWwgLTQgY2Fubm90IGdldCBFVEhUT09MX0dTVFJJTkdTIGluZm9ybWF0aW9uCisgKiBAcmV0dmFsIC01IGNhbm5vdCBnZXQgRVRIVE9PTF9HU1RBVFMgaW5mb3JtYXRpb24KKyAqIEByZXR2YWwgLTYgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBpZiBIQVZFX0xJTlVYX0VUSFRPT0xfSCBub3QgZGVmaW5lZAorICovCisKK2ludAoraW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCAsIGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkgeworCisjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKKworICAgIGV0aGVyU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBkcml2ZXJfaW5mbzsKKyAgICBzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncyAqZXRoX3N0cmluZ3M7CisgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmV0aF9zdGF0czsKKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgIHVuc2lnbmVkIGludCBuc3RhdHMsIHNpemVfc3RyLCBpOworICAgIGludCBlcnI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisgICAgc3RybGNweShpZnIuaWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKworICAgIG1lbXNldCgmZHJpdmVyX2luZm8sIDAsIHNpemVvZihkcml2ZXJfaW5mbykpOworICAgIGRyaXZlcl9pbmZvLmNtZCA9IEVUSFRPT0xfR0RSVklORk87CisgICAgaWZyLmlmcl9kYXRhID0gKGNoYXIgKikmZHJpdmVyX2luZm87CisKKyAgICBlcnIgPSBfZXRoZXJTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAiRVRIVE9PTF9HRVREUlZJTkZPIGZhaWxlZCBvbiBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG5zdGF0cyA9IGRyaXZlcl9pbmZvLm5fc3RhdHM7CisgICAgaWYgKG5zdGF0cyA8IDEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIHN0YXRzIGF2YWlsYWJsZSBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICBzaXplX3N0ciA9IG5zdGF0cyAqIEVUSF9HU1RSSU5HX0xFTjsKKworICAgIGV0aF9zdHJpbmdzID0gbWFsbG9jKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncykpOworICAgIGlmICghZXRoX3N0cmluZ3MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIG1lbW9yeSBhdmFpbGFibGVcbiIpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCwgbm8gbWVtb3J5IGF2YWlsYWJsZVxuIik7CisKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBtZW1zZXQgKGV0aF9zdHJpbmdzLCAwLCAoc2l6ZV9zdHIgKyBzaXplb2YgKHN0cnVjdCBldGh0b29sX2dzdHJpbmdzKSkpOworCisgICAgZXRoX3N0YXRzID0gbWFsbG9jIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfc3RhdHMpKTsKKyAgICBpZiAoIWV0aF9zdGF0cykgeworICAgICAgICBmcmVlIChldGhfc3RyaW5ncyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQsIG5vIG1lbW9yeSBhdmFpbGFibGVcbiIpOworCisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgbWVtc2V0IChldGhfc3RhdHMsIDAsIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfc3RhdHMpKSk7CisKKyAgICBldGhfc3RyaW5ncy0+Y21kID0gRVRIVE9PTF9HU1RSSU5HUzsKKyAgICBldGhfc3RyaW5ncy0+c3RyaW5nX3NldCA9IEVUSF9TU19TVEFUUzsKKyAgICBldGhfc3RyaW5ncy0+bGVuID0gbnN0YXRzOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopIGV0aF9zdHJpbmdzOworCisgICAgZXJyID0gX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQsIGNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKTsKKworICAgICAgICBmcmVlKGV0aF9zdHJpbmdzKTsKKyAgICAgICAgZnJlZShldGhfc3RhdHMpOworICAgICAgICByZXR1cm4gLTQ7CisgICAgfQorCisgICAgZXRoX3N0YXRzLT5jbWQgPSBFVEhUT09MX0dTVEFUUzsKKyAgICBldGhfc3RhdHMtPm5fc3RhdHMgPSBuc3RhdHM7CisgICAgaWZyLmlmcl9kYXRhID0gKGNoYXIgKikgZXRoX3N0YXRzOworICAgIGVyciA9IF9ldGhlclN0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0LCBjYW5ub3QgZ2V0IHN0YXRzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpOworCisgICAgICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgICAgICBmcmVlKGV0aF9zdGF0cyk7CisgICAgICAgIHJldHVybiAtNTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRzOyBpKyspIHsKKyAgICAgICAgY2hhciBzW0VUSF9HU1RSSU5HX0xFTl07CisKKyAgICAgICAgc3RybGNweShzLCAoY29uc3QgY2hhciAqKSAmZXRoX3N0cmluZ3MtPmRhdGFbaSAqIEVUSF9HU1RSSU5HX0xFTl0sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHMpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChFVEhFUlNUQVRTSkFCQkVSUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZXRoZXJTdGF0c0phYmJlcnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTX0ZMQUc7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgZnJlZShldGhfc3RhdHMpOworCisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHJldHVybiAtNjsKKyNlbmRpZgorCit9CisKKworLyogaW9jdGwgd3JhcHBlcgorICoKKyAqIEBwYXJhbSBmZCA6IHNvY2tldCBmZCB0byB1c2Ugdy9pb2N0bCwgb3IgLTEgdG8gb3Blbi9jbG9zZSBvbmUKKyAqIEBwYXJhbSB3aGljaAorICogQHBhcmFtIGlmcnEKKyAqIHBhcmFtIGlmZW50cnkgOiBpZmVudHJ5IHRvIHVwZGF0ZQorICogQHBhcmFtIG5hbWUKKyAqCisgKiBAcmV0dmFsICAwIDogc3VjY2VzcworICogQHJldHZhbCAtMSA6IGludmFsaWQgcGFyYW1ldGVycworICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBjYWxsIGZhaWxlZAorICovCitpbnQKK19ldGhlclN0YXRzX2lvY3RsX2dldChpbnQgZmQsIGludCB3aGljaCwgc3RydWN0IGlmcmVxICppZnJxLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGludCBvdXJmZCA9IC0xLCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCIsICJfZXRoZXJTdGF0c19pb2N0bF9nZXRcbiIpKTsKKyAgICAvKgorICAgICAqIHNhbml0eSBjaGVja3MKKyAgICAgKi8KKyAgICBpZihOVUxMID09IG5hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAiX2V0aGVyU3RhdHNfaW9jdGxfZ2V0IGludmFsaWQgaWZuYW1lICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsLCBfZXRoZXJTdGF0c19pb2N0bF9nZXQgZXJyb3Igb24gaW5lcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBzb2NrZXQgZm9yIGlvY3RscworICAgICAqLworICAgIGlmKGZkIDwgMCkgeworICAgICAgICBmZCA9IG91cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgICAgICBpZihvdXJmZCA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfZXRoZXJTdGF0c19pb2N0bF9nZXQgY291bGRuJ3QgY3JlYXRlIGEgc29ja2V0XG4iKSk7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwsIF9ldGhlclN0YXRzX2lvY3RsX2dldCBlcnJvciBvbiBpbmVyZmFjZSAnJXMnXG4iLCBuYW1lKTsKKworICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisgICAgfQorCisgICAgc3RybGNweShpZnJxLT5pZnJfbmFtZSwgbmFtZSwgc2l6ZW9mKGlmcnEtPmlmcl9uYW1lKSk7CisgICAgcmMgPSBpb2N0bChmZCwgd2hpY2gsIGlmcnEpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAiX2V0aGVyU3RhdHNfaW9jdGxfZ2V0IGlvY3RsICVkIHJldHVybmVkICVkXG4iLCB3aGljaCwgcmMpKTsKKyAgICAgICAgcmMgPSAtMzsKKyAgICB9CisKKyAgICBpZihvdXJmZCA+PSAwKQorICAgICAgICBjbG9zZShvdXJmZCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyODQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMpCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlKQorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldCkKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQpCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzKSAKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhNmUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBldGhlclN0YXRzVGFibGUKKyAqCisgKiBcc2VjdGlvbiBpbnRybyBJbnRyb2R1Y3Rpb24KKyAqIEludHJvZHVjdG9yeSB0ZXh0LgorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KKworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworb2lkICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRbXSA9IHsgRVRIRVJTVEFUU1RBQkxFX09JRCB9OworaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoZXRoZXJTdGF0c1RhYmxlX29pZCk7CisKK2V0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKK3N0YXRpYyBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICpldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3A7CisKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9ldGhlclN0YXRzVGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgZXRoZXJTdGF0c1RhYmxlIG1vZHVsZQorICovCit2b2lkCitpbml0X2V0aGVyU3RhdHNUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTppbml0X2V0aGVyU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMDpvOiBQZXJmb3JtIGV0aGVyU3RhdHNUYWJsZSBvbmUtdGltZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nCisgICAgICovCisgICAgaWYgKHNob3VsZF9pbml0KCJldGhlclN0YXRzVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9ldGhlclN0YXRzVGFibGUoKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2V0aGVyU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXQtZG93biB0aGUgZXRoZXJTdGF0c1RhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25fZXRoZXJTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJldGhlclN0YXRzVGFibGUiKSkKKyAgICAgICAgc2h1dGRvd25fdGFibGVfZXRoZXJTdGF0c1RhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBldGhlclN0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9ldGhlclN0YXRzVGFibGUodm9pZCkKK3sKKyAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9ldGhlclN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDE6bzogUGVyZm9ybSBldGhlclN0YXRzVGFibGUgb25lLXRpbWUgdGFibGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIFRPRE86MzAyOm86IHwtPkluaXRpYWxpemUgZXRoZXJTdGF0c1RhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcAorCT0gbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KCJldGhlclN0YXRzVGFibGUiLCBOVUxMLCBOVUxMKTsKKworICAgIC8qCisgICAgICogTm8gc3VwcG9ydCBmb3IgYW55IGZsYWdzIHlldCwgYnV0IGluIHRoZSBmdXR1cmUgeW91IHdvdWxkCisgICAgICogc2V0IGFueSBmbGFncyBoZXJlLgorICAgICAqLworICAgIGZsYWdzID0gMDsKKworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIF9ldGhlclN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wLCBmbGFncyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemVfdGFibGVfZXRoZXJTdGF0c1RhYmxlICovCisKKy8qKgorICogU2h1dGRvd24gdGhlIHRhYmxlIGV0aGVyU3RhdHNUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfZXRoZXJTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBzaHV0ZG93biBjb2RlCisgICAgICovCisgICAgX2V0aGVyU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCA9IE5VTEw7Cit9CisKKy8qKgorICogZXh0cmEgY29udGV4dCBpbml0aWFsaXphdGlvbiAoZWcgZGVmYXVsdCB2YWx1ZXMpCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggICAgOiByb3cgcmVxdWVzdCBjb250ZXh0CisgKiBAcGFyYW0gdXNlcl9pbml0X2N0eCA6IHZvaWQgcG9pbnRlciBmb3IgdXNlciAocGFyYW1ldGVyIHRvIHJvd3JlcV9jdHhfYWxsb2NhdGUpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgOiBubyBlcnJvcnMKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgIDogZXJyb3IgKGNvbnRleHQgYWxsb2NhdGUgd2lsbCBmYWlsKQorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2luaXRfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMDpvOiB8LT4gUGVyZm9ybSBleHRyYSBldGhlclN0YXRzVGFibGUgcm93cmVxIGluaXRpYWxpemF0aW9uLiAoZWcgREVGVkFMUykKKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMTpvOiB8LT4gUGVyZm9ybSBleHRyYSBldGhlclN0YXRzVGFibGUgcm93cmVxIGNsZWFudXAuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KKworLyoqCisgKiBwcmUtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMDpvOiBQZXJmb3JtIGV0aGVyU3RhdHNUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBwb3N0LXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlOgorICogICBOZXcgcm93cyBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyLCBhbmQKKyAqICAgZGVsZXRlZCByb3dzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQKKyAqICAgcmVsZWFzZWQuCisgKgorICogQHBhcmFtIHVzZXJfY29udGV4dAorICogQHBhcmFtIHJjIDogTUZEX1NVQ0NFU1MgaWYgYWxsIHJlcXVlc3RzIHN1Y2NlZWRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IG90aGVyIGVycm9yIChpZ25vcmVkKQorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTExOm86IFBlcmZvcm0gZXRoZXJTdGF0c1RhYmxlIHBvc3QtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBjaGVjayB0byBzZXQgaWYgYW55IHJvd3Mgd2VyZSBjaGFuZ2VkLgorICAgICAqLworICAgIGlmIChldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgaWYgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgc28sIHRoaXMgd291bGQgYmUKKyAgICAgICAgICogYSBnb29kIHBsYWNlIHRvIHNhdmUgZGF0YSB0byBpdHMgcGVyc2lzdGVudCBzdG9yZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNhdmUgY2hhbmdlZCByb3dzLCBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5CisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQoMCk7ICAgLyogY2xlYXIgdGFibGUgZGlydHkgZmxhZyAqLworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmN2YwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBtaXNjIG1pc2M6IE1pc2NlbGxhbmVvdXMgcm91dGluZXMKKyAqCisgKiBAeworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisKKyAgICAvKgorICAgICAqIE9JRCBhbmQgY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgZXRoZXJTdGF0c1RhYmxlIAorICAgICAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9vaWRzLmgiCisKKyAgICAvKgorICAgICAqIGVudW0gZGVmaW5pb25zIAorICAgICAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9lbnVtcy5oIgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfZXRoZXJTdGF0c1RhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9ldGhlclN0YXRzVGFibGUodm9pZCk7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICAgICAqLworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFdoZW4geW91IHJlZ2lzdGVyIHlvdXIgbWliLCB5b3UgZ2V0IHRvIHByb3ZpZGUgYSBnZW5lcmljCisgICAgICogcG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8geW91IGZvciBtb3N0IG9mIHRoZQorICAgICAqIGZ1bmN0aW9ucyBjYWxscy4KKyAgICAgKgorICAgICAqIFRPRE86MTAwOnI6IFJldmlldyBhbGwgY29udGV4dCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBUT0RPOjEwMTpvOiB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgZXRoZXJTdGF0c1RhYmxlLgorICAgICAqLworICAgIC8qCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgc3RvcmFnZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlCisgICAgICogZXRoZXJTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGV0aGVyU3RhdHNUYWJsZV9kYXRhX3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZVsxMjhdOworICAgICAgICBzaXplX3QgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuOyAgICAgICAvKiAjIG9mIG9pZCBlbGVtZW50cywgbm90IGJ5dGVzICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Ryb3BFdmVudHMoMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPY3RldHMoNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzKDYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzTXVsdGljYXN0UGt0cyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNGcmFnbWVudHMoMTEpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNKYWJiZXJzKDEyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NvbGxpc2lvbnMoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uczsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzKDE0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMoMTUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cygxNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMoMTkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2gKKyAgICAgICAgICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBldGhlclN0YXRzT3duZXJbMTI3XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl9sZW47ICAgIC8qICMgb2YgY2hhciBlbGVtZW50cywgbm90IGJ5dGVzICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1czsKKworICAgIH0gZXRoZXJTdGF0c1RhYmxlX2RhdGE7CisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTE1Om86IHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIHVuZG8gY29udGV4dC4KKyAgICAgKiBXZSdyZSBqdXN0IGdvaW5nIHRvIHVzZSB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZSBmb3Igb3VyCisgICAgICogdW5kb19jb250ZXh0LiBJZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgbW9yZSBlZmZpY2VudCwKKyAgICAgKiBkZWZpbmUgeW91ciB0eXBlZGVmIGhlcmUuCisgICAgICovCisgICAgdHlwZWRlZiBldGhlclN0YXRzVGFibGVfZGF0YSBldGhlclN0YXRzVGFibGVfdW5kb19kYXRhOworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMDpyOiB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSBtaWIgaW5kZXguCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGluZGV4IGZvciBldGhlclN0YXRzVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleF9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2gKKyAgICAgICAgICovCisgICAgICAgIGxvbmcgICAgICAgICAgICBldGhlclN0YXRzSW5kZXg7CisKKworICAgIH0gZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleDsKKworICAgIC8qCisgICAgICogVE9ETzoxMjE6cjogfCAgIHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIG1heCBpbmRleCBsZW5ndGguCisgICAgICogSWYgeW91IEtOT1cgdGhhdCB5b3VyIGluZGV4ZXMgd2lsbCBuZXZlciBleGNlZWQgYSBjZXJ0YWluCisgICAgICogbGVuZ3RoLCB1cGRhdGUgdGhpcyBtYWNybyB0byB0aGF0IGxlbmd0aC4KKyAgICAgKi8KKyNkZWZpbmUgTUFYX2V0aGVyU3RhdHNUYWJsZV9JRFhfTEVOICAgICAxCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIFJvdyByZXF1ZXN0IChyb3dyZXEpIGNvbnRleHQuCisgICAgICogV2hlbiB5b3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB5b3Ugd2lsbCBiZSBwYXNzZWQgYQorICAgICAqIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4IHBvaW50ZXIuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfZXRoZXJTdGF0c1RhYmxlX0lEWF9MRU5dOworCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggdGJsX2lkeDsKKworICAgICAgICBldGhlclN0YXRzVGFibGVfZGF0YSBkYXRhOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uX2V4aXN0c19mbGFnczsgICAgLyogZmxhZ3MgZm9yIGV4aXN0ZW5jZSAqLworICAgICAgICBldGhlclN0YXRzVGFibGVfdW5kb19kYXRhICp1bmRvOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uX3NldF9mbGFnczsgICAgICAgLyogZmxhZ3MgZm9yIHNldCBjb2x1bW5zICovCisKKworICAgICAgICAvKgorICAgICAgICAgKiBmbGFncyBwZXIgcm93LiBDdXJyZW50bHksIHRoZSBmaXJzdCAobG93ZXIpIDggYml0cyBhcmUgcmVzZXJ2ZWQKKyAgICAgICAgICogZm9yIHRoZSB1c2VyLiBTZWUgbWZkLmggZm9yIG90aGVyIGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICAgIHJvd3JlcV9mbGFnczsKKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjEzMTpvOiB8ICAgfC0+IEFkZCB1c2VmdWwgZGF0YSB0byBldGhlclN0YXRzVGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpldGhlclN0YXRzVGFibGVfZGF0YV9saXN0OworCisgICAgfSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eDsKKworICAgIHR5cGVkZWYgc3RydWN0IGV0aGVyU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgfSBldGhlclN0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHg7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb250ZXh0LCBpbnQgcmMpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIHZvaWQgKnVzZXJfaW5pdF9jdHgpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29tbWl0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICpldGhlclN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KTsKKworICAgIGV4dGVybiBvaWQgICAgICBldGhlclN0YXRzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGludCAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRfc2l6ZTsKKworCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oIgorI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oIgorCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGQ0YWNhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0wLDAgKzEsNTMzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorCisjaWYgZGVmaW5lZChsaW51eCkKKyNpbmNsdWRlICJpb2N0bF9pbXBfY29tbW9uLmgiCisjZW5kaWYKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgZXRoZXJTdGF0c1RhYmxlIGRhdGEgYWNjZXNzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvCisgKiBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIHlvdSBuZWVkIGZvciB0aGUgZGF0YSB0YWJsZS4KKyAqCisgKiBAcGFyYW0gZXRoZXJTdGF0c1RhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2luaXRfZGF0YShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlZykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2luaXRfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMzpvOiBJbml0aWFsaXplIGV0aGVyU3RhdHNUYWJsZSBkYXRhLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqIEBwYXJhbSAgY2FjaGUgQSBwb2ludGVyIHRvIGEgY2FjaGUgc3RydWN0dXJlLiBZb3UgY2FuIHNldCB0aGUgdGltZW91dAorICogICAgICAgICBhbmQgb3RoZXIgY2FjaGUgZmxhZ3MgdXNpbmcgdGhpcyBwb2ludGVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzdGFydHVwIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4gSWYgbm8gY3VzdG9tCisgKiAgY29udGFpbmVyIGlzIGFsbG9jYXRlZCwgdGhlIE1GRCBjb2RlIHdpbGwgY3JlYXRlIG9uZSBmb3IgeW91ci4KKyAqCisgKiAgVGhpcyBpcyBhbHNvIHRoZSBwbGFjZSB0byBzZXQgdXAgY2FjaGUgYmVoYXZpb3IuIFRoZSBkZWZhdWx0LCB0bworICogIHNpbXBseSBzZXQgdGhlIGNhY2hlIHRpbWVvdXQsIHdpbGwgd29yayB3ZWxsIHdpdGggdGhlIGRlZmF1bHQKKyAqICBjb250YWluZXIuIElmIHlvdSBhcmUgdXNpbmcgYSBjdXN0b20gY29udGFpbmVyLCB5b3UgbWF5IHdhbnQgdG8KKyAqICBsb29rIGF0IHRoZSBjYWNoZSBoZWxwZXIgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueQorICogIGZsYWdzIHlvdSB3YW50IHRvIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgaW5pdGlhbGl6YXRpb24gbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIG9wZW5pbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgd2lsbCBzdXBwbHkgdGhlIGRhdGEsIG9wZW5pbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKiogY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiB1c2UgYSBjdXN0b20gY29udGFpbmVyLiBJZiB5b3UKKyAgICAgKiBkbyBub3QgY3JlYXRlIG9uZSwgb25lIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LgorICAgICAqLworICAgICpjb250YWluZXJfcHRyX3B0ciA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNhY2hlIHBhcmFtIHRvIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRPRE86MzQ1OkE6IFNldCB1cCBldGhlclN0YXRzVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IEVUSEVSU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUOyAgICAgLyogc2Vjb25kcyAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKCkuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGNsZWFudXAgbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIGNsb3NpbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgc3VwcGxpZWQgdGhlIGRhdGEsIGNsb3NpbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyX3B0cikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93blxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisvKioKKyAqIGxvYWQgaW5pdGlhbCBkYXRhCisgKgorICogVE9ETzozNTA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBkYXRhIGxvYWQKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgY2FjaGUgaGVscGVyIHRvIGxvYWQKKyAqIHRoZSBjb250YWluZXIgYWdhaW4gKGFmdGVyIHRoZSBjb250YWluZXIgZnJlZSBmdW5jdGlvbiBoYXMgYmVlbgorICogY2FsbGVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIGNvbnRlbnRzKS4KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB0byB3aGljaCBpdGVtcyBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRSA6IENhbid0IGFjY2VzcyBkYXRhIHNvdXJjZQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgaW5kZXgoZXMpIChhbmQgZGF0YSwgb3B0aW9uYWxseSkKKyAqICBmb3IgdGhlIGV2ZXJ5IHJvdyBpbiB0aGUgZGF0YSBzZXQuCisgKgorICogQHJlbWFyaworICogIFdoaWxlIGxvYWRpbmcgdGhlIGRhdGEsIHRoZSBvbmx5IGltcG9ydGFudCB0aGluZyBpcyB0aGUgaW5kZXhlcy4KKyAqICBJZiBhY2Nlc3MgdG8geW91ciBkYXRhIGlzIGNoZWFwL2Zhc3QgKGUuZy4geW91IGhhdmUgYSBwb2ludGVyIHRvIGEKKyAqICBzdHJ1Y3R1cmUgaW4gbWVtb3J5KSwgaXQgd291bGQgbWFrZSBzZW5zZSB0byB1cGRhdGUgdGhlIGRhdGEgaGVyZS4KKyAqICBJZiwgaG93ZXZlciwgdGhlIGFjY2Vzc2luZyB0aGUgZGF0YSBpbnZvdmxlcyBtb3JlIHdvcmsgKGUuZy4gcGFyc2luZworICogIHNvbWUgb3RoZXIgZXhpc3RpbmcgZGF0YSwgb3IgcGVmb3JtaW5nIGNhbGN1bGF0aW9ucyB0byBkZXJpdmUgdGhlIGRhdGEpLAorICogIHRoZW4geW91IGNhbiBsaW1pdCB5b3Vyc2VsZiB0byBzZXR0aW5nIHRoZSBpbmRleGVzIGFuZCBzYXZpbmcgYW55CisgKiAgaW5mb3JtYXRpb24geW91IHdpbGwgbmVlZCBsYXRlci4gVGhlbiB1c2UgdGhlIHNhdmVkIGluZm9ybWF0aW9uIGluCisgKiAgZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIHNpemVfdCAgICAgICAgICBjb3VudCA9IDA7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzUyOk06IHwgICB8LT4gc2V0IGluZGV4ZXMgaW4gbmV3IGV0aGVyU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgKiBkYXRhIGNvbnRleHQgd2lsbCBiZSBzZXQgZnJvbSB0aGUgcGFyYW0gKHVubGVzcyBOVUxMLAorICAgICAqICAgICAgaW4gd2hpY2ggY2FzZSBhIG5ldyBkYXRhIGNvbnRleHQgd2lsbCBiZSBhbGxvY2F0ZWQpCisgICAgICovCisKKyAgICAvKgorICAgICAqIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBpbmRleCB2YWx1ZXMKKyAgICAgKi8KKyAgICAKKyAgICAvKgorICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaAorICAgICAqLworCisgICAgaW50ICAgICAgICAgICAgIGZkOworCisjaWYgZGVmaW5lZChsaW51eCkKKyAgICBzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQgPSBOVUxMLCAqcCA9IE5VTEw7CisjZW5kaWYKKyAgICAKKyAgICAvKgorICAgICAqIGNyZWF0ZSBzb2NrZXQgZm9yIGlvY3RscworICAgICAqLworCisgICAgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgaWYoZmQgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIHNvY2tldFxuIik7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgaW50ZXJmYWNlIG5hbWVzIG9mIHRoZSBkZXZpY2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSwgaW4gY2FzZSBvZiBmYWlsdXJlIHJldHZhbCBzdWdnZXN0cyB0aGUgcmVzb24gZm9yIGZhaWx1cmUKKyAgICAgKiBhbmQgbGlzdF9oZWFkIGNvbnRhaW5zIG51bGwKKyAgICAgKi8KKworI2lmIGRlZmluZWQobGludXgpCisgICAgeworICAgICAgICBpbnQgcmV0dmFsOworCisgICAgICAgIGxpc3RfaGVhZCA9IGV0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQobGlzdF9oZWFkLCAmcmV0dmFsKTsKKyAgICB9CisKKyAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsIGVycm9yIGdldHRpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBwcmVzZW50IGluIHRoZSBzeXN0ZW1cbiIpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciBnZXR0aW5nIHRoZSBpbnRlcmZhY2UgbmFtZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIikpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXYWxrIG92ZXIgdGhlIGxpc3Qgb2YgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBhbmQgcmV0cmVpdmUgdGhlIHN0YXRpc3RpY3MgCisgICAgICovCisKKyAgICBmb3IgKHAgPSBsaXN0X2hlYWQ7IHA7IHAgPSBwLT5pZm5fbmV4dCkgeworICAgICAgICBsb25nICAgICAgICAgICAgZXRoZXJTdGF0c0luZGV4OworICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSIsICJwcm9jZXNzaW5nICclcydcbiIsIHAtPm5hbWUpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgaW5kZXggdmlhIGlvY3RsLgorICAgICAgICAgKi8KKworICAgICAgICBldGhlclN0YXRzSW5kZXggPSAobG9uZykgZXRoZXJzdGF0c19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQoLTEsIHAtPm5hbWUpOworCisgICAgICAgIC8qIAorICAgICAgICAgKiAgZ2V0IHRoZSBldGhlcnN0YXRzIGNvbnRlbnRzIHBvcHVsYXRlZCwgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gZXRoZXJuZXQgZGV2aWNlCisgICAgICAgICAqICB0aGUgb3BlcmF0aW9uIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBhbmQgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGxvZ2dlZAorICAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIHJvd3JlcV9jdHggPSBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwgZXRoZXJTdGF0c0luZGV4KSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBkYXRhLlxuIik7CisgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjM1MjpyOiB8ICAgfC0+IHBvcHVsYXRlIGV0aGVyU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICAgICAqIFBvcHVsYXRlIGRhdGEgY29udGV4dCBoZXJlLiAob3B0aW9uYWxseSwgZGVsYXkgdW50aWwgcm93IHByZXApCisgICAgICAgICAqLworICAgICAgICAvKgorICAgICAgICAgKiBub24tVFJBTlNJRU5UIGRhdGE6IG5vIG5lZWQgdG8gY29weS4gc2V0IHBvaW50ZXIgdG8gZGF0YSAKKyAgICAgICAgICovCisKKyAgICAgICAgbWVtc2V0ICgmcm93cmVxX2N0eC0+ZGF0YSwgMCwgc2l6ZW9mIChyb3dyZXFfY3R4LT5kYXRhKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByYzsKKworICAgICAgICAgICAgcmMgPSBpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQgKHJvd3JlcV9jdHgsIGZkLCBwLT5uYW1lKTsKKworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yIGdldHRpbmcgdGhlIHN0YXRpc3RpY3MgZm9yIGludGVyZmFjZSB8JXN8ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGRhdGEsIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgc3VwcG9ydGVkXG4iLCBwLT5uYW1lKSk7CisgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGluc2VydCBpbnRvIHRhYmxlIGNvbnRhaW5lcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciBpbnNlcnRpbmcgfCVzfCAiLCBwLT5uYW1lKSk7CisgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBpbnRlcmZhY2UgbmFtZXMgbGlzdCAKKyAgICAgKi8KKworICAgIGlmICggKGV0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlKGxpc3RfaGVhZCkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSwgZXJyb3IgZnJlZWluZyB0aGUgaW50ZXJmYWNlIG5hbWUgbGlzdCBcbiIpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciBmcmVlaW5nIHRoZSBpbnRlcmZhY2UgbmFtZSBsaXN0XG4iKSk7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgREVCVUdNU0dUKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICJpbnNlcnRlZCAlIiBORVRTTk1QX1BSSXogImQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQgKi8KKworCisvKioKKyAqIGNvbnRhaW5lciBjbGVhbiB1cAorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHdpdGggYWxsIGN1cnJlbnQgaXRlbXMKKyAqCisgKiAgVGhpcyBvcHRpb25hbCBjYWxsYmFjayBpcyBjYWxsZWQgcHJpb3IgdG8gYWxsCisgKiAgaXRlbSdzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyLiBJZiB5b3UKKyAqICBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGJlZm9yZSB0aGF0LCBkbyBpdCBoZXJlLgorICoKKyAqIEBub3RlCisgKiAgVGhlIE1GRCBoZWxwZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVsZWFzaW5nIGFsbCB0aGUgcm93IGNvbnRleHRzLgorICoKKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBldGhlclN0YXRzVGFibGUgY29udGFpbmVyIGRhdGEuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIHByZXBhcmUgcm93IGZvciBwcm9jZXNzaW5nLgorICoKKyAqICBXaGVuIHRoZSBhZ2VudCBoYXMgbG9jYXRlZCB0aGUgcm93IGZvciBhIHJlcXVlc3QsIHRoaXMgZnVuY3Rpb24gaXMKKyAqICBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgcm93IGZvciBwcm9jZXNzaW5nLiBJZiB5b3UgZnVsbHkgcG9wdWxhdGVkCisgKiAgdGhlIGRhdGEgY29udGV4dCBkdXJpbmcgdGhlIGluZGV4IHNldHVwIHBoYXNlLCB5b3UgbWF5IG5vdCBuZWVkIHRvCisgKiAgZG8gYW55dGhpbmcuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggcG9pbnRlciB0byBhIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfcm93X3ByZXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcm93X3ByZXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzkwOm86IFByZXBhcmUgcm93IGZvciByZXF1ZXN0LgorICAgICAqIElmIHBvcHVsYXRpbmcgcm93IGRhdGEgd2FzIGRlbGF5ZWQsIHRoaXMgaXMgdGhlIHBsYWNlIHRvCisgICAgICogZmlsbCBpbiB0aGUgcm93IGZvciB0aGlzIHJlcXVlc3QuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcCAqLworCisvKgorICogVE9ETzo0MjA6cjogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBpbmRleCB2YWxpZGF0aW9uLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzSW5kZXgKKyAqIGV0aGVyU3RhdHNJbmRleCBpcyBzdWJpZCAxIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMKKyAgICAgICAgZXRoZXJTdGF0cyBlbnRyeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMSAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIFJhbmdlczogIDEgLSA2NTUzNTsKKyAqCisgKiBJdHMgc3ludGF4IGlzIElOVEVHRVIzMiAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUjMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nIChsb25nKQorICovCisvKioKKyAqIGNoZWNrIHZhbGlkaXR5IG9mIGV0aGVyU3RhdHNJbmRleCBpbmRleCBwb3J0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgIDogdGhlIGluY29taW5nIHZhbHVlIGlzIGxlZ2FsCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgOiB0aGUgaW5jb21pbmcgdmFsdWUgaXMgTk9UIGxlZ2FsCisgKgorICogQG5vdGUgdGhpcyBpcyBub3QgdGhlIHBsYWNlIHRvIGRvIGFueSBjaGVja3MgZm9yIHRoZSBzYW5pdHkKKyAqICAgICAgIG9mIG11bHRpcGxlIGluZGV4ZXMuIFRob3NlIHR5cGVzIG9mIGNoZWNrcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUKKyAqICAgICAgIGV0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleCgpIGZ1bmN0aW9uLgorICoKKyAqIEBub3RlIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgaWYgdGhlIGluZGV4IHJlZmVycyB0byBhIHJvdyBpbiB0aGlzIG9yCisgKiAgICAgICBzb21lIG90aGVyIHRhYmxlLCB5b3UgY2FuJ3QgY2hlY2sgZm9yIHRoYXQgcm93IGhlcmUgdG8gbWFrZQorICogICAgICAgZGVjaXNpb25zLCBzaW5jZSB0aGF0IHJvdyBtaWdodCBub3QgYmUgY3JlYXRlZCB5ZXQsIGJ1dCBtYXkKKyAqICAgICAgIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdC4gSWYgeW91IGhhdmUKKyAqICAgICAgIHN1Y2ggY2hlY2tzLCB0aGV5IHNob3VsZCBiZSBkb25lIGluIHRoZSBjaGVja19kZXBlbmRlbmNpZXMKKyAqICAgICAgIGZ1bmN0aW9uLCBiZWNhdXNlIGFueSBuZXcvZGVsZXRlZC9jaGFuZ2VkIHJvd3Mgc2hvdWxkIGJlCisgKiAgICAgICBhdmFpbGFibGUgdGhlbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNoZWNrcyBoYXZlIGFscmVhZHkgYmVlbiBkb25lIGZvciB5b3U6CisgKiAgICBUaGUgdmFsdWUgaXMgaW4gKG9uZSBvZikgdGhlIHJhbmdlIHNldChzKTogIDEgLSA2NTUzNQorICoKKyAqIElmIHRoZXJlIGEgbm8gb3RoZXIgY2hlY2tzIHlvdSBuZWVkIHRvIGRvLCBzaW1wbHkgcmV0dXJuIE1GRF9TVUNDRVNTLgorICovCitpbnQKK2V0aGVyU3RhdHNJbmRleF9jaGVja19pbmRleChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNJbmRleF9jaGVja19pbmRleCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0MjY6TTogfC0+IENoZWNrIGV0aGVyU3RhdHNUYWJsZSBpbmRleCBldGhlclN0YXRzSW5kZXguCisgICAgICogY2hlY2sgdGhhdCBpbmRleCB2YWx1ZSBpbiB0aGUgdGFibGUgY29udGV4dCBpcyBsZWdhbC4KKyAgICAgKiAocm93cmVxX2N0eC0+dGJsX2luZGV4LmV0aGVyU3RhdHNJbmRleCkKKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsgICAgICAgICAvKiBldGhlclN0YXRzSW5kZXggaW5kZXggb2sgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0luZGV4X2NoZWNrX2luZGV4ICovCisKKy8qKgorICogdmVyaWZ5IHNwZWNpZmllZCBpbmRleCBpcyB2YWxpZC4KKyAqCisgKiBUaGlzIGNoZWNrIGlzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGZvcgorICogdGhlIGNvbHVtbnMgb2YgdGhlIG5ldyByb3cgYXJlIHZhbGlkLiBDb2x1bW4gdmFsdWVzIGFuZCByb3cgY29uc2lzdGVuY3kKKyAqIHdpbGwgYmUgY2hlY2tlZCBsYXRlci4gQXQgdGhpcyBwb2ludCwgb25seSB0aGUgaW5kZXggdmFsdWVzIHNob3VsZCBiZQorICogY2hlY2tlZC4KKyAqCisgKiBBbGwgb2YgdGhlIGluZGl2aWR1YWwgaW5kZXggdmFsaWRhdGlvbiBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNhbGxlZCwgc28gdGhpcworICogaXMgdGhlIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSB2YWxpZCBhcyBhIHdob2xlIHdoZW4gY29tYmluZWQuIElmCisgKiB5b3Ugb25seSBoYXZlIG9uZSBpbmRleCwgdGhlbiB5b3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBlbHNlCisgKiBoZXJlLgorICogCisgKiBAbm90ZSBLZWVwIGluIG1pbmQgdGhhdCBpZiB0aGUgaW5kZXhlcyByZWZlciB0byBhIHJvdyBpbiB0aGlzIG9yCisgKiAgICAgICBzb21lIG90aGVyIHRhYmxlLCB5b3UgY2FuJ3QgY2hlY2sgZm9yIHRoYXQgcm93IGhlcmUgdG8gbWFrZQorICogICAgICAgZGVjaXNpb25zLCBzaW5jZSB0aGF0IHJvdyBtaWdodCBub3QgYmUgY3JlYXRlZCB5ZXQsIGJ1dCBtYXkKKyAqICAgICAgIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdC4gSWYgeW91IGhhdmUKKyAqICAgICAgIHN1Y2ggY2hlY2tzLCB0aGV5IHNob3VsZCBiZSBkb25lIGluIHRoZSBjaGVja19kZXBlbmRlbmNpZXMKKyAqICAgICAgIGZ1bmN0aW9uLCBiZWNhdXNlIGFueSBuZXcvZGVsZXRlZC9jaGFuZ2VkIHJvd3Mgc2hvdWxkIGJlCisgKiAgICAgICBhdmFpbGFibGUgdGhlbi4KKyAqCisgKgorICogQHBhcmFtIGV0aGVyU3RhdHNUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBkYXRhCisgKiBAcGFyYW0gZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfQ0FOTk9UX0NSRUFURV9OT1cgIDogaW5kZXggbm90IHZhbGlkIHJpZ2h0IG5vdworICogQHJldHZhbCBNRkRfQ0FOTk9UX0NSRUFURV9FVkVSIDogaW5kZXggbmV2ZXIgdmFsaWQKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0MzA6TTogfC0+IFZhbGlkYXRlIHBvdGVudGlhbCBldGhlclN0YXRzVGFibGUgaW5kZXguCisgICAgICovCisgICAgaWYgKDEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJpbnZhbGlkIGluZGV4IGZvciBhIG5ldyByb3cgaW4gdGhlICIKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSB0YWJsZS5cbiIpOworICAgICAgICAvKgorICAgICAgICAgKiBkZXRlcm1pbmUgZmFpbHVyZSB0eXBlLgorICAgICAgICAgKgorICAgICAgICAgKiBJZiB0aGUgaW5kZXggY291bGQgbm90IGV2ZXIgYmUgY3JlYXRlZCwgcmV0dXJuIE1GRF9OT1RfRVZFUgorICAgICAgICAgKiBJZiB0aGUgaW5kZXggY2FuIG5vdCBiZSBjcmVhdGVkIHVuZGVyIHRoZSBwcmVzZW50IGNpcmN1bXN0YW5jZXMKKyAgICAgICAgICogKGV2ZW4gdGhvdWdoIGl0IGNvdWxkIGJlIGNyZWF0ZWQgdW5kZXIgb3RoZXIgY2lyY3Vtc3RhbmNlcyksCisgICAgICAgICAqIHJldHVybiBNRkRfTk9UX05PVy4KKyAgICAgICAgICovCisgICAgICAgIGlmICgwKSB7CisgICAgICAgICAgICByZXR1cm4gTUZEX0NBTk5PVF9DUkVBVEVfRVZFUjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBNRkRfQ0FOTk9UX0NSRUFURV9OT1c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDcwMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaW5pdF9kYXRhKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGV0aGVyU3RhdHNUYWJsZV9yZWcpOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTgwOm86IFJldmlldyBldGhlclN0YXRzVGFibGUgY2FjaGUgdGltZW91dC4KKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjYWNoZSB0aW1lcyBvdXQKKyAgICAgKi8KKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQgICA2MAorCisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpOworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyKTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NhY2hlX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY2FjaGVfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyNkZWZpbmUgTUFYX0xJTkVfU0laRSAyNTYKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcm93X3ByZXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzSW5kZXhfY2hlY2tfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsgICAgICAgLyogaW50ZXJuYWwgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTUxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwxNDExIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9nZXQgZGF0YV9nZXQ6IFJvdXRpbmVzIHRvIGdldCBkYXRhCisgKgorICogVE9ETzoyMzA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBnZXQgcm91dGluZXMuCisgKiBUT0RPOjI0MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisKKworLyoqCisgKiBzZXQgbWliIGluZGV4KGVzKQorICoKKyAqIEBwYXJhbSB0YmxfaWR4IG1pYiBpbmRleCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBldGhlclN0YXRzSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICogdGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXRoZXJTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICB0YmxfaWR4LT5ldGhlclN0YXRzSW5kZXggPSBldGhlclN0YXRzSW5kZXhfdmFsOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldGhlclN0YXRzSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0luZGV4X3ZhbCkpCisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQgbWliIGluZGV4IHRvIG9pZCBpbmRleAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gc2l6ZW9mKHJvd3JlcV9jdHgtPm9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisgICAgaWYgKDAgIT0gZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmcm93cmVxX2N0eC0+b2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0RhdGFTb3VyY2UKKyAqIGV0aGVyU3RhdHNEYXRhU291cmNlIGlzIHN1YmlkIDIgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yCisgKiBEZXNjcmlwdGlvbjoKK1RoaXMgb2JqZWN0IGlkZW50aWZpZXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0CisgICAgICAgIHRoaXMgZXRoZXJTdGF0cyBlbnRyeSBpcyBjb25maWd1cmVkIHRvIGFuYWx5emUuICBUaGlzCisgICAgICAgIHNvdXJjZSBjYW4gYmUgYW55IGV0aGVybmV0IGludGVyZmFjZSBvbiB0aGlzIGRldmljZS4KKyAgICAgICAgSW4gb3JkZXIgdG8gaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwgdGhpcyBvYmplY3QKKyAgICAgICAgc2hhbGwgaWRlbnRpZnkgdGhlIGluc3RhbmNlIG9mIHRoZSBpZkluZGV4IG9iamVjdCwKKyAgICAgICAgZGVmaW5lZCBpbiBSRkMgMjIzMyBbMTddLCBmb3IgdGhlIGRlc2lyZWQgaW50ZXJmYWNlLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYW4gZW50cnkgd2VyZSB0byByZWNlaXZlIGRhdGEgZnJvbQorICAgICAgICBpbnRlcmZhY2UgIzEsIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHNldCB0byBpZkluZGV4LjEuCisKKyAgICAgICAgVGhlIHN0YXRpc3RpY3MgaW4gdGhpcyBncm91cCByZWZsZWN0IGFsbCBwYWNrZXRzCisgICAgICAgIG9uIHRoZSBsb2NhbCBuZXR3b3JrIHNlZ21lbnQgYXR0YWNoZWQgdG8gdGhlIGlkZW50aWZpZWQKKyAgICAgICAgaW50ZXJmYWNlLgorCisgICAgICAgIEFuIGFnZW50IG1heSBvciBtYXkgbm90IGJlIGFibGUgdG8gdGVsbCBpZiBmdW5kYW1lbnRhbAorICAgICAgICBjaGFuZ2VzIHRvIHRoZSBtZWRpYSBvZiB0aGUgaW50ZXJmYWNlIGhhdmUgb2NjdXJyZWQgYW5kCisgICAgICAgIG5lY2Vzc2l0YXRlIGFuIGludmFsaWRhdGlvbiBvZiB0aGlzIGVudHJ5LiAgRm9yIGV4YW1wbGUsIGEKKyAgICAgICAgaG90LXBsdWdnYWJsZSBldGhlcm5ldCBjYXJkIGNvdWxkIGJlIHB1bGxlZCBvdXQgYW5kIHJlcGxhY2VkCisgICAgICAgIGJ5IGEgdG9rZW4tcmluZyBjYXJkLiAgSW4gc3VjaCBhIGNhc2UsIGlmIHRoZSBhZ2VudCBoYXMgc3VjaAorICAgICAgICBrbm93bGVkZ2Ugb2YgdGhlIGNoYW5nZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpdAorICAgICAgICBpbnZhbGlkYXRlIHRoaXMgZW50cnkuCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWF5IG5vdCBiZSBtb2RpZmllZCBpZiB0aGUgYXNzb2NpYXRlZAorICAgICAgICBldGhlclN0YXRzU3RhdHVzIG9iamVjdCBpcyBlcXVhbCB0byB2YWxpZCgxKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIE9CSkVDVElEIChiYXNlZCBvbiBwZXJsdHlwZSBPQkpFQ1RJRCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9PQkpFQ1RfSUQuIFRoZSBDIHR5cGUgZGVjbCBpcyBvaWQgKG9pZCkKKyAqIFRoaXMgZGF0YSB0eXBlIHJlcXVpcmVzIGEgbGVuZ3RoLgorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNEYXRhU291cmNlIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgb2lkIHZhcmlhYmxlCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBhIHNpemVfdC4gT24gZW50cnksIGl0IHdpbGwgY29udGFpbiB0aGUgc2l6ZSAoaW4gYnl0ZXMpCisgKiAgICAgICAgcG9pbnRlZCB0byBieSBldGhlclN0YXRzRGF0YVNvdXJjZS4KKyAqICAgICAgICBPbiBleGl0LCB0aGlzIHZhbHVlIHNob3VsZCBjb250YWluIHRoZSBkYXRhIHNpemUgKGluIGJ5dGVzKS4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorKgorICogQG5vdGUgSWYgeW91IG5lZWQgbW9yZSB0aGFuICgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKSBieXRlcyBvZiBtZW1vcnksCisgKiAgICAgICBhbGxvY2F0ZSBpdCB1c2luZyBtYWxsb2MoKSBhbmQgdXBkYXRlIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyLgorICogICAgICAgPGI+RE8gTk9UPC9iPiBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICogICAgICAgVGhlIE1GRCBoZWxwZXIgd2lsbCByZWxlYXNlIHRoZSBtZW1vcnkgeW91IGFsbG9jYXRlLgorICoKKyAqIEByZW1hcmsgSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiB5b3Vyc2VsZiwgeW91IGFyZSByZXNwb25zaWJsZQorICogICAgICAgICBmb3IgY2hlY2tpbmcgaWYgdGhlIHBvaW50ZXIgY2hhbmdlZCwgYW5kIGZyZWVpbmcgYW55CisgKiAgICAgICAgIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeS4gKE5vdCBuZWNlc3NhcnkgaWYgeW91IHBhc3MKKyAqICAgICAgICAgaW4gYSBwb2ludGVyIHRvIHN0YXRpYyBtZW1vcnksIG9idmlvdXNseS4pCisgKi8KK2ludAorZXRoZXJTdGF0c0RhdGFTb3VyY2VfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKQorICAgICAgICAgICAgICAgICAgICYmIChOVUxMICE9ICpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cikpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEYXRhU291cmNlX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNEYXRhU291cmNlIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0ciApIGRhdGEgYW5kICgqIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIC8qCisgICAgICogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgZXRoZXJTdGF0c0RhdGFTb3VyY2UgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSAoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKSkgfHwKKyAgICAgICAgKCgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKSA8CisgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKSkpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBldGhlclN0YXRzRGF0YVNvdXJjZSBkYXRhCisgICAgICAgICAqLworICAgICAgICAoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKSk7CisgICAgICAgIGlmIChOVUxMID09ICgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgICgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pOworICAgIG1lbWNweSgoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKSwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0Ryb3BFdmVudHMKKyAqIGV0aGVyU3RhdHNEcm9wRXZlbnRzIGlzIHN1YmlkIDMgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBldmVudHMgaW4gd2hpY2ggcGFja2V0cworICAgICAgICB3ZXJlIGRyb3BwZWQgYnkgdGhlIHByb2JlIGR1ZSB0byBsYWNrIG9mIHJlc291cmNlcy4KKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgbnVtYmVyIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbnVtYmVyIG9mCisgICAgICAgIHBhY2tldHMgZHJvcHBlZDsgaXQgaXMganVzdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMKKyAgICAgICAgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0Ryb3BFdmVudHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0Ryb3BFdmVudHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRHJvcEV2ZW50c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRHJvcEV2ZW50cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEcm9wRXZlbnRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRHJvcEV2ZW50c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c09jdGV0cworICogZXRoZXJTdGF0c09jdGV0cyBpcyBzdWJpZCA0IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS40CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIG9mIGRhdGEgKGluY2x1ZGluZworICAgICAgICB0aG9zZSBpbiBiYWQgcGFja2V0cykgcmVjZWl2ZWQgb24gdGhlCisgICAgICAgIG5ldHdvcmsgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZworICAgICAgICBGQ1Mgb2N0ZXRzKS4KKworICAgICAgICBUaGlzIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhIHJlYXNvbmFibGUgZXN0aW1hdGUgb2YKKyAgICAgICAgMTAtTWVnYWJpdCBldGhlcm5ldCB1dGlsaXphdGlvbi4gIElmIGdyZWF0ZXIgcHJlY2lzaW9uIGlzCisgICAgICAgIGRlc2lyZWQsIHRoZSBldGhlclN0YXRzUGt0cyBhbmQgZXRoZXJTdGF0c09jdGV0cyBvYmplY3RzCisgICAgICAgIHNob3VsZCBiZSBzYW1wbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgYSBjb21tb24gaW50ZXJ2YWwuICBUaGUKKyAgICAgICAgZGlmZmVyZW5jZXMgaW4gdGhlIHNhbXBsZWQgdmFsdWVzIGFyZSBQa3RzIGFuZCBPY3RldHMsCisgICAgICAgIHJlc3BlY3RpdmVseSwgYW5kIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgaW50ZXJ2YWwgaXMKKyAgICAgICAgSW50ZXJ2YWwuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBVdGlsaXphdGlvbgorICAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgUGt0cyAqICg5LjYgKyA2LjQpICsgKE9jdGV0cyAqIC44KQorICAgICAgICAgVXRpbGl6YXRpb24gPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnZhbCAqIDEwLDAwMAorCisgICAgICAgIFRoZSByZXN1bHQgb2YgdGhpcyBlcXVhdGlvbiBpcyB0aGUgdmFsdWUgVXRpbGl6YXRpb24gd2hpY2gKKyAgICAgICAgaXMgdGhlIHBlcmNlbnQgdXRpbGl6YXRpb24gb2YgdGhlIGV0aGVybmV0IHNlZ21lbnQgb24gYQorICAgICAgICBzY2FsZSBvZiAwIHRvIDEwMCBwZXJjZW50LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c09jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c09jdGV0c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c09jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c09jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHMKKyAqIGV0aGVyU3RhdHNQa3RzIGlzIHN1YmlkIDUgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkIHBhY2tldHMsCisgICAgICAgIGJyb2FkY2FzdCBwYWNrZXRzLCBhbmQgbXVsdGljYXN0IHBhY2tldHMpIHJlY2VpdmVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzUGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0c19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzCisgKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyBpcyBzdWJpZCA2IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS42CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgZ29vZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZQorICAgICAgICBkaXJlY3RlZCB0byB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuICBOb3RlIHRoYXQgdGhpcworICAgICAgICBkb2VzIG5vdCBpbmNsdWRlIG11bHRpY2FzdCBwYWNrZXRzLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzQnJvYWRjYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c011bHRpY2FzdFBrdHMKKyAqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzIGlzIHN1YmlkIDcgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjcKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBnb29kIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlCisgICAgICAgIGRpcmVjdGVkIHRvIGEgbXVsdGljYXN0IGFkZHJlc3MuICBOb3RlIHRoYXQgdGhpcyBudW1iZXIKKyAgICAgICAgZG9lcyBub3QgaW5jbHVkZSBwYWNrZXRzIGRpcmVjdGVkIHRvIHRoZSBicm9hZGNhc3QKKworICAgICAgICBhZGRyZXNzLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c011bHRpY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzTXVsdGljYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzTXVsdGljYXN0UGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzTXVsdGljYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzCisgKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMgaXMgc3ViaWQgOCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuOAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdAorICAgICAgICBoYWQgYSBsZW5ndGggKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMsIGJ1dAorICAgICAgICBpbmNsdWRpbmcgRkNTIG9jdGV0cykgb2YgYmV0d2VlbiA2NCBhbmQgMTUxOAorICAgICAgICBvY3RldHMsIGluY2x1c2l2ZSwgYnV0IGhhZCBlaXRoZXIgYSBiYWQKKyAgICAgICAgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKEZDUykgd2l0aCBhbiBpbnRlZ3JhbAorICAgICAgICBudW1iZXIgb2Ygb2N0ZXRzIChGQ1MgRXJyb3IpIG9yIGEgYmFkIEZDUyB3aXRoCisgICAgICAgIGEgbm9uLWludGVncmFsIG51bWJlciBvZiBvY3RldHMgKEFsaWdubWVudCBFcnJvcikuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNDUkNBbGlnbkVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzVW5kZXJzaXplUGt0cworICogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMgaXMgc3ViaWQgOSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuOQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlCisgICAgICAgIGxlc3MgdGhhbiA2NCBvY3RldHMgbG9uZyAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cywKKyAgICAgICAgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKSBhbmQgd2VyZSBvdGhlcndpc2Ugd2VsbAorICAgICAgICBmb3JtZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzVW5kZXJzaXplUGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVW5kZXJzaXplUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzT3ZlcnNpemVQa3RzCisgKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzIGlzIHN1YmlkIDEwIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xMAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlCisgICAgICAgIGxvbmdlciB0aGFuIDE1MTggb2N0ZXRzIChleGNsdWRpbmcgZnJhbWluZyBiaXRzLAorICAgICAgICBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpIGFuZCB3ZXJlIG90aGVyd2lzZQorICAgICAgICB3ZWxsIGZvcm1lZC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzT3ZlcnNpemVQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c092ZXJzaXplUGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT3ZlcnNpemVQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPdmVyc2l6ZVBrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNGcmFnbWVudHMKKyAqIGV0aGVyU3RhdHNGcmFnbWVudHMgaXMgc3ViaWQgMTEgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjExCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUgbGVzcyB0aGFuCisgICAgICAgIDY0IG9jdGV0cyBpbiBsZW5ndGggKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZworICAgICAgICBGQ1Mgb2N0ZXRzKSBhbmQgaGFkIGVpdGhlciBhIGJhZCBGcmFtZSBDaGVjayBTZXF1ZW5jZQorICAgICAgICAoRkNTKSB3aXRoIGFuIGludGVncmFsIG51bWJlciBvZiBvY3RldHMgKEZDUyBFcnJvcikgb3IgYQorICAgICAgICBiYWQgRkNTIHdpdGggYSBub24taW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cyAoQWxpZ25tZW50CisgICAgICAgIEVycm9yKS4KKworICAgICAgICBOb3RlIHRoYXQgaXQgaXMgZW50aXJlbHkgbm9ybWFsIGZvciBldGhlclN0YXRzRnJhZ21lbnRzIHRvCisgICAgICAgIGluY3JlbWVudC4gIFRoaXMgaXMgYmVjYXVzZSBpdCBjb3VudHMgYm90aCBydW50cyAod2hpY2ggYXJlCisgICAgICAgIG5vcm1hbCBvY2N1cnJlbmNlcyBkdWUgdG8gY29sbGlzaW9ucykgYW5kIG5vaXNlIGhpdHMuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRnJhZ21lbnRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0ZyYWdtZW50c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNGcmFnbWVudHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0ZyYWdtZW50cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRnJhZ21lbnRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRnJhZ21lbnRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzSmFiYmVycworICogZXRoZXJTdGF0c0phYmJlcnMgaXMgc3ViaWQgMTIgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjEyCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUKKyAgICAgICAgbG9uZ2VyIHRoYW4gMTUxOCBvY3RldHMgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMsCisgICAgICAgIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cyksIGFuZCBoYWQgZWl0aGVyIGEgYmFkCisgICAgICAgIEZyYW1lIENoZWNrIFNlcXVlbmNlIChGQ1MpIHdpdGggYW4gaW50ZWdyYWwgbnVtYmVyCisgICAgICAgIG9mIG9jdGV0cyAoRkNTIEVycm9yKSBvciBhIGJhZCBGQ1Mgd2l0aCBhIG5vbi1pbnRlZ3JhbAorICAgICAgICBudW1iZXIgb2Ygb2N0ZXRzIChBbGlnbm1lbnQgRXJyb3IpLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGRlZmluaXRpb24gb2YgamFiYmVyIGlzIGRpZmZlcmVudAorICAgICAgICB0aGFuIHRoZSBkZWZpbml0aW9uIGluIElFRUUtODAyLjMgc2VjdGlvbiA4LjIuMS41CisgICAgICAgICgxMEJBU0U1KSBhbmQgc2VjdGlvbiAxMC4zLjEuNCAoMTBCQVNFMikuICBUaGVzZQorICAgICAgICBkb2N1bWVudHMgZGVmaW5lIGphYmJlciBhcyB0aGUgY29uZGl0aW9uIHdoZXJlIGFueQorICAgICAgICBwYWNrZXQgZXhjZWVkcyAyMCBtcy4gIFRoZSBhbGxvd2VkIHJhbmdlIHRvIGRldGVjdAorICAgICAgICBqYWJiZXIgaXMgYmV0d2VlbiAyMCBtcyBhbmQgMTUwIG1zLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0phYmJlcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzSmFiYmVyc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0phYmJlcnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzSmFiYmVyc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzSmFiYmVyc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0phYmJlcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzSmFiYmVyczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0phYmJlcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNDb2xsaXNpb25zCisgKiBldGhlclN0YXRzQ29sbGlzaW9ucyBpcyBzdWJpZCAxMyBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTMKKyAqIERlc2NyaXB0aW9uOgorVGhlIGJlc3QgZXN0aW1hdGUgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBjb2xsaXNpb25zCisgICAgICAgIG9uIHRoaXMgRXRoZXJuZXQgc2VnbWVudC4KKworICAgICAgICBUaGUgdmFsdWUgcmV0dXJuZWQgd2lsbCBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICAgICBSTU9OIHByb2JlLiBTZWN0aW9uIDguMi4xLjMgKDEwQkFTRS01KSBhbmQgc2VjdGlvbgorICAgICAgICAxMC4zLjEuMyAoMTBCQVNFLTIpIG9mIElFRUUgc3RhbmRhcmQgODAyLjMgc3RhdGVzIHRoYXQgYQorICAgICAgICBzdGF0aW9uIG11c3QgZGV0ZWN0IGEgY29sbGlzaW9uLCBpbiB0aGUgcmVjZWl2ZSBtb2RlLCBpZgorICAgICAgICB0aHJlZSBvciBtb3JlIHN0YXRpb25zIGFyZSB0cmFuc21pdHRpbmcgc2ltdWx0YW5lb3VzbHkuICBBCisgICAgICAgIHJlcGVhdGVyIHBvcnQgbXVzdCBkZXRlY3QgYSBjb2xsaXNpb24gd2hlbiB0d28gb3IgbW9yZQorCisgICAgICAgIHN0YXRpb25zIGFyZSB0cmFuc21pdHRpbmcgc2ltdWx0YW5lb3VzbHkuICBUaHVzIGEgcHJvYmUKKyAgICAgICAgcGxhY2VkIG9uIGEgcmVwZWF0ZXIgcG9ydCBjb3VsZCByZWNvcmQgbW9yZSBjb2xsaXNpb25zCisgICAgICAgIHRoYW4gYSBwcm9iZSBjb25uZWN0ZWQgdG8gYSBzdGF0aW9uIG9uIHRoZSBzYW1lIHNlZ21lbnQKKyAgICAgICAgd291bGQuCisKKyAgICAgICAgUHJvYmUgbG9jYXRpb24gcGxheXMgYSBtdWNoIHNtYWxsZXIgcm9sZSB3aGVuIGNvbnNpZGVyaW5nCisgICAgICAgIDEwQkFTRS1ULiAgMTQuMi4xLjQgKDEwQkFTRS1UKSBvZiBJRUVFIHN0YW5kYXJkIDgwMi4zCisgICAgICAgIGRlZmluZXMgYSBjb2xsaXNpb24gYXMgdGhlIHNpbXVsdGFuZW91cyBwcmVzZW5jZSBvZiBzaWduYWxzCisgICAgICAgIG9uIHRoZSBETyBhbmQgUkQgY2lyY3VpdHMgKHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nCisgICAgICAgIGF0IHRoZSBzYW1lIHRpbWUpLiAgQSAxMEJBU0UtVCBzdGF0aW9uIGNhbiBvbmx5IGRldGVjdAorICAgICAgICBjb2xsaXNpb25zIHdoZW4gaXQgaXMgdHJhbnNtaXR0aW5nLiAgVGh1cyBwcm9iZXMgcGxhY2VkIG9uCisgICAgICAgIGEgc3RhdGlvbiBhbmQgYSByZXBlYXRlciwgc2hvdWxkIHJlcG9ydCB0aGUgc2FtZSBudW1iZXIgb2YKKyAgICAgICAgY29sbGlzaW9ucy4KKworICAgICAgICBOb3RlIGFsc28gdGhhdCBhbiBSTU9OIHByb2JlIGluc2lkZSBhIHJlcGVhdGVyIHNob3VsZAorICAgICAgICBpZGVhbGx5IHJlcG9ydCBjb2xsaXNpb25zIGJldHdlZW4gdGhlIHJlcGVhdGVyIGFuZCBvbmUgb3IKKyAgICAgICAgbW9yZSBvdGhlciBob3N0cyAodHJhbnNtaXQgY29sbGlzaW9ucyBhcyBkZWZpbmVkIGJ5IElFRUUKKyAgICAgICAgODAyLjNrKSBwbHVzIHJlY2VpdmVyIGNvbGxpc2lvbnMgb2JzZXJ2ZWQgb24gYW55IGNvYXgKKyAgICAgICAgc2VnbWVudHMgdG8gd2hpY2ggdGhlIHJlcGVhdGVyIGlzIGNvbm5lY3RlZC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNDb2xsaXNpb25zIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNDb2xsaXNpb25zX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0NvbGxpc2lvbnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0NvbGxpc2lvbnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzQ29sbGlzaW9uczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0NvbGxpc2lvbnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzNjRPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMgaXMgc3ViaWQgMTQgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgNjQgb2N0ZXRzIGluIGxlbmd0aAorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM2NE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzNjRPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czY0T2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHM2NE9jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMgaXMgc3ViaWQgMTUgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE1CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbgorICAgICAgICA2NSBhbmQgMTI3IG9jdGV0cyBpbiBsZW5ndGggaW5jbHVzaXZlCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIGlzIHN1YmlkIDE2IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xNgorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4KKyAgICAgICAgMTI4IGFuZCAyNTUgb2N0ZXRzIGluIGxlbmd0aCBpbmNsdXNpdmUKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzIGlzIHN1YmlkIDE3IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xNworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4KKyAgICAgICAgMjU2IGFuZCA1MTEgb2N0ZXRzIGluIGxlbmd0aCBpbmNsdXNpdmUKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cworICogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMgaXMgc3ViaWQgMTggb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE4CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbgorICAgICAgICA1MTIgYW5kIDEwMjMgb2N0ZXRzIGluIGxlbmd0aCBpbmNsdXNpdmUKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cworICogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIGlzIHN1YmlkIDE5IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xOQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4KKyAgICAgICAgMTAyNCBhbmQgMTUxOCBvY3RldHMgaW4gbGVuZ3RoIGluY2x1c2l2ZQorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNPd25lcgorICogZXRoZXJTdGF0c093bmVyIGlzIHN1YmlkIDIwIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorVGhlIGVudGl0eSB0aGF0IGNvbmZpZ3VyZWQgdGhpcyBlbnRyeSBhbmQgaXMgdGhlcmVmb3JlCisgICAgICAgIHVzaW5nIHRoZSByZXNvdXJjZXMgYXNzaWduZWQgdG8gaXQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDEgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKiBSYW5nZXM6ICAwIC0gMTI3OworICoKKyAqIEl0cyBzeW50YXggaXMgT3duZXJTdHJpbmcgKGJhc2VkIG9uIHBlcmx0eXBlIE9DVEVUU1RSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX09DVEVUX1NUUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGNoYXIgKGNoYXIpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4gIChNYXggMTI3KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPd25lciBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBjaGFyIHZhcmlhYmxlCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gYSBzaXplX3QuIE9uIGVudHJ5LCBpdCB3aWxsIGNvbnRhaW4gdGhlIHNpemUgKGluIGJ5dGVzKQorICogICAgICAgIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c093bmVyLgorICogICAgICAgIE9uIGV4aXQsIHRoaXMgdmFsdWUgc2hvdWxkIGNvbnRhaW4gdGhlIGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisqCisgKiBAbm90ZSBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKSBieXRlcyBvZiBtZW1vcnksCisgKiAgICAgICBhbGxvY2F0ZSBpdCB1c2luZyBtYWxsb2MoKSBhbmQgdXBkYXRlIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0ci4KKyAqICAgICAgIDxiPkRPIE5PVDwvYj4gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAqICAgICAgIFRoZSBNRkQgaGVscGVyIHdpbGwgcmVsZWFzZSB0aGUgbWVtb3J5IHlvdSBhbGxvY2F0ZS4KKyAqCisgKiBAcmVtYXJrIElmIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24geW91cnNlbGYsIHlvdSBhcmUgcmVzcG9uc2libGUKKyAqICAgICAgICAgZm9yIGNoZWNraW5nIGlmIHRoZSBwb2ludGVyIGNoYW5nZWQsIGFuZCBmcmVlaW5nIGFueQorICogICAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuIChOb3QgbmVjZXNzYXJ5IGlmIHlvdSBwYXNzCisgKiAgICAgICAgIGluIGEgcG9pbnRlciB0byBzdGF0aWMgbWVtb3J5LCBvYnZpb3VzbHkuKQorICovCitpbnQKK2V0aGVyU3RhdHNPd25lcl9nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICBjaGFyICoqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cikKKyAgICAgICAgICAgICAgICAgICAmJiAoTlVMTCAhPSAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKSk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPd25lcl9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT3duZXIgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0ciApIGRhdGEgYW5kICgqIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGV0aGVyU3RhdHNPd25lciBkYXRhCisgICAgICovCisgICAgaWYgKChOVUxMID09ICgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKSkgfHwKKyAgICAgICAgKCgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cikgPAorICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyWzBdKSkpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBldGhlclN0YXRzT3duZXIgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpID0KKyAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lclswXSkpOworICAgICAgICBpZiAoTlVMTCA9PSAoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cikpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICAgKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lclswXSk7CisgICAgbWVtY3B5KCgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKSwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lclswXSkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3duZXJfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNTdGF0dXMKKyAqIGV0aGVyU3RhdHNTdGF0dXMgaXMgc3ViaWQgMjEgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yMQorICogRGVzY3JpcHRpb246CitUaGUgc3RhdHVzIG9mIHRoaXMgZXRoZXJTdGF0cyBlbnRyeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqIEVudW0gcmFuZ2U6IDIvOC4gVmFsdWVzOiAgdmFsaWQoMSksIGNyZWF0ZVJlcXVlc3QoMiksIHVuZGVyQ3JlYXRpb24oMyksIGludmFsaWQoNCkKKyAqCisgKiBJdHMgc3ludGF4IGlzIEVudHJ5U3RhdHVzIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1N0YXR1cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBsb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzU3RhdHVzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1N0YXR1c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzU3RhdHVzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXNfZ2V0ICovCisKKworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc1MjEyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGV0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oCisgKgorICogQGFkZHRvZ3JvdXAgZ2V0CisgKgorICogUHJvdG90eXBlcyBmb3IgZ2V0IGZ1bmN0aW9ucworICoKKyAqIEB7CisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKiBpbmRleGVzCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzUGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl9nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyKTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV0aGVyU3RhdHNJbmRleF92YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXRoZXJTdGF0c0luZGV4X3ZhbCk7CisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2YzYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5jCkBAIC0wLDAgKzEsOTc3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA3NyAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9zZXQgZGF0YV9zZXQ6IFJvdXRpbmVzIHRvIHNldCBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gc2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCB0aGUgbmV3IHZhbHVlLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICovCisgICAgLyoKKyAgICAgKiBOT1RFOiBpZiB5b3UgdXBkYXRlIHRoaXMgY2hhcnQsIHBsZWFzZSB1cGRhdGUgdGhlIHZlcnNpb25zIGluCisgICAgICogICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3BhcmVudC1zZXQubTJpCisgICAgICogICAgICAgYWdlbnQvbWliZ3JvdXAvaGVscGVycy9iYWJ5X3N0ZXBzLmMKKyAgICAgKiB3aGlsZSB5b3UncmUgYXQgaXQuCisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBCYWJ5IFN0ZXBzIEZsb3cgQ2hhcnQgKDIwMDQuMDYuMDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgKiArLS0tLS0tLS0tLS0tLS0rICAgICs9PT09PT09PT09PT09PT09KyAgICBVID0gdW5jb25kaXRpb25hbCBwYXRoICAgICoKKyAgICAgKiB8b3B0aW9uYWwgc3RhdGV8ICAgIHx8cmVxdWlyZWQgc3RhdGV8fCAgICBTID0gcGF0aCBmb3Igc3VjY2VzcyAgICAgICoKKyAgICAgKiArLS0tLS0tLS0tLS0tLS0rICAgICs9PT09PT09PT09PT09PT09KyAgICBFID0gcGF0aCBmb3IgZXJyb3IgICAgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgcHJlICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHJlcXVlc3QgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVQorICAgICAqICstLS0tLS0tLS0tLS0tKyAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqIHwgICAgcm93ICAgIHxmfDwtLS0tLS0tfHwgIG9iamVjdCAgICB8fAorICAgICAqIHwgIGNyZWF0ZSAgIHwxfCAgICAgIEUgfHwgIGxvb2t1cCAgICB8fAorICAgICAqICstLS0tLS0tLS0tLS0tKyAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICBFIHwgICB8IFMgICAgICAgICAgICAgICAgIHwgUworICAgICAqICAgICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICBFIHx8ICAgY2hlY2sgICAgfHwKKyAgICAgKiAgICAgICB8PC0tLS0tLS0tLS0tLS0tLXx8ICAgdmFsdWVzICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IFMKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgICs8LS0tLS0tLXx8ICAgdW5kbyAgICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICBFIHx8ICAgc2V0dXAgICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICB8IFMKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHx8ICAgIHNldCAgICAgfHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8fCAgIHZhbHVlICAgIHx8IEUgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKz09PT09PT09PT09PT09KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICB8IFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfCAgICBjaGVjayAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHwgIGNvbnNpc3RlbmN5IHwgRSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICs9PT09PT09PT09PT09PSsgICAgICAgICArPT09PT09PT09PT09PT0rICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8fCAgIGNvbW1pdCAgIHx8LS0tLS0tLS0+fHwgICAgIHVuZG8gICB8fCAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfHwgICAgICAgICAgICB8fCBFICAgICAgIHx8ICAgIGNvbW1pdCAgfHwgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICs9PT09PT09PT09PT09PSsgICAgICAgICArPT09PT09PT09PT09PT0rICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCBTICAgICAgICAgICAgICAgICAgICAgVSB8PC0tLS0tLS0tKworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHwgaXJyZXZlcnNpYmxlIHwgICAgICAgICB8fCAgICB1bmRvICAgIHx8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8ICAgIGNvbW1pdCAgICB8ICAgICAgICAgfHwgICAgIHNldCAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICB8IFUgICAgICAgICAgICAgICAgICAgICBVIHwKKyAgICAgKiAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0tLT58PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgIHx8ICAgdW5kbyAgICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgIHx8ICBjbGVhbnVwICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58IFUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChlcnIgJiYgZjEpLS0tLS0tLS0tLS0tLS0tLS0tLT4rCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBwb3N0ICAgICAgfDwtLS0tLS0tLXwgICAgICByb3cgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICByZXF1ZXN0ICAgIHwgICAgICAgVSB8ICAgIHJlbGVhc2UgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAqCisgICAgICovCisKKy8qKgorICogU2V0dXAgdXAgY29udGV4dCB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCB0byB1bmRvIGEgc2V0IHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGluZGl2aWR1YWwgbm9kZSB1bmRvIHNldHVwCisgKiBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gSWYgeW91IG5lZWQgdG8gZG8gYW55IHVuZG8gc2V0dXAgdGhhdCBpcyBub3QKKyAqIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb2x1bW4sIHlvdSBjYW4gZG8gaXQgaGVyZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHVuZG8gY29udGV4dCBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aAorICogZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEoKSwgYnV0IG1heSBuZWVkIGV4dHJhCisgKiBpbml0aWFsaXphdGlvbiBzaW1pbGFyIHRvIHdoYXQgeW91IG1heSBoYXZlIGRvbmUgaW4KKyAqIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoKS4KKyAqIE5vdGUgdGhhdCBhbiBpbmRpdmlkdWFsIG5vZGUncyB1bmRvX3NldHVwIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQKKyAqIGlmIHRoYXQgbm9kZSBpcyBiZWluZyBzZXQgdG8gYSBuZXcgdmFsdWUuCisgKgorICogSWYgdGhlcmUgaXMgYW55IHNldHVwIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjb2x1bW4gKGUuZy4gYWxsb2NhdGluZworICogbWVtb3J5IGZvciBhIHN0cmluZyksIHlvdSBzaG91bGQgZG8gdGhhdCBzZXR1cCBpbiB0aGUgbm9kZSdzIHVuZG9fc2V0dXAKKyAqIGZ1bmN0aW9uLCBzbyBpdCB3b24ndCBiZSBkb25lIHVubGVzcyBpdCBpcyBuZWNlc3NhcnkuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yLiBzZXQgd2lsbCBmYWlsLgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDUxOk06IHwtPiBTZXR1cCBldGhlclN0YXRzVGFibGUgdW5kby4KKyAgICAgKiBzZXQgdXAgZXRoZXJTdGF0c1RhYmxlIHVuZG8gaW5mb3JtYXRpb24sIGluIHByZXBhcmF0aW9uIGZvciBhIHNldC4KKyAgICAgKiBVbmRvIHN0b3JhZ2UgaXMgaW4gKCogZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyICkqCisgICAgICovCisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwICovCisKKy8qKgorICogVW5kbyBhIHNldCByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBpbmRpdmlkdWFsIG5vZGUgdW5kbworICogZnVuY3Rpb25zIGFyZSBjYWxsZWQuIElmIHlvdSBuZWVkIHRvIGRvIGFueSB1bmRvIHRoYXQgaXMgbm90CisgKiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY29sdW1uLCB5b3UgY2FuIGRvIGl0IGhlcmUuCisgKgorICogTm90ZSB0aGF0IGFuIGluZGl2aWR1YWwgbm9kZSdzIHVuZG8gZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZAorICogaWYgdGhhdCBub2RlIGlzIGJlaW5nIHNldCB0byBhIG5ldyB2YWx1ZS4KKyAqCisgKiBJZiB0aGVyZSBpcyBhbnl0aGluZyAgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAoZS5nLiByZWxlYXNpbmcKKyAqIG1lbW9yeSBmb3IgYSBzdHJpbmcpLCB5b3Ugc2hvdWxkIGRvIHRoYXQgc2V0dXAgaW4gdGhlIG5vZGUncyB1bmRvCisgKiBmdW5jdGlvbiwgc28gaXQgd29uJ3QgYmUgZG9uZSB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvci4gc2V0IHdpbGwgZmFpbC4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3VuZG8iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1MTpNOiB8LT4gZXRoZXJTdGF0c1RhYmxlIHVuZG8uCisgICAgICogZXRoZXJTdGF0c1RhYmxlIHVuZG8gaW5mb3JtYXRpb24sIGluIHJlc3BvbnNlIHRvIGEgZmFpbGVkIHNldC4KKyAgICAgKiBVbmRvIHN0b3JhZ2UgaXMgaW4gKCogZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyICkqCisgICAgICovCisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwICovCisKKy8qKgorICogQ2xlYW51cCB1cCBjb250ZXh0IHVuZG8gaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBzZXQvY29tbWl0IHByb2Nlc3NpbmcuIElmIHlvdQorICogYWxsb2NhdGVkIGFueSByZXNvdXJjZXMgaW4gdW5kb19zZXR1cCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8gcmVsZWFzZQorICogdGhvc2UgcmVzb3VyY2VzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgc2V0CisgKiByZXF1ZXN0LiBJZiB5b3UgbmVlZCB0byBwZXJmb3JtIGRpZmZlcmVudCBzdGVwcyBmb3IgY2xlYW51cCBkZXBlbmRpbmcKKyAqIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgeW91IGNhbiBhZGQgYSBmbGFnIHRvIHRoZSByb3dyZXFfY3R4LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1MjpNOiB8LT4gQ2xlYW51cCBldGhlclN0YXRzVGFibGUgdW5kby4KKyAgICAgKiBVbmRvIHN0b3JhZ2UgaXMgaW4gKCogZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyICkqCisgICAgICovCisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAgKi8KKworLyoqCisgKiBjb21taXQgbmV3IHZhbHVlcy4KKyAqCisgKiBBdCB0aGlzIHBvaW50LCB5b3Ugc2hvdWxkIGhhdmUgZG9uZSBldmVyeXRoaW5nIHlvdSBjYW4gdG8gZW5zdXJlIHRoYXQKKyAqIHRoaXMgY29tbWl0IHdpbGwgbm90IGZhaWwuCisgKgorICogU2hvdWxkIHlvdSBuZWVkIGRpZmZlcmVudCBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hpY2ggY29sdW1ucyB3ZXJlCisgKiBzZXQsIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3Mgd2lsbCBpbmRpY2F0ZSB3aGljaCB3cml0ZWFibGUgY29sdW1ucyB3ZXJlCisgKiBzZXQuIFRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIENPTFVNTl8qX0ZMQUcgYml0cyBjYW4gYmUgZm91bmQgaW4KKyAqIGV0aGVyU3RhdHNUYWJsZV9vaWRzLmguCisgKiBBIG5ldyByb3cgd2lsbCBoYXZlIHRoZSBNRkRfUk9XX0NSRUFURUQgYml0IHNldCBpbiByb3dyZXFfZmxhZ3MuCisgKgorICogQHBhcmFtIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2NvbW1pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisgICAgaW50ICAgICAgICAgICAgIHNhdmVfZmxhZ3M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbW1pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIHNhdmUgZmxhZ3MsIHRoZW4gY2xlYXIgdW50aWwgd2UgYWN0dWFsbHkgZG8gc29tZXRoaW5nCisgICAgICovCisgICAgc2F2ZV9mbGFncyA9IHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3M7CisgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNvbW1pdCBldGhlclN0YXRzVGFibGUgZGF0YQorICAgICAqIDEpIGNoZWNrIHRoZSBjb2x1bW4ncyBmbGFnIGluIHNhdmVfZmxhZ3MgdG8gc2VlIGlmIGl0IHdhcyBzZXQuCisgICAgICogMikgY2xlYXIgdGhlIGZsYWcgd2hlbiB5b3UgaGFuZGxlIHRoYXQgY29sdW1uCisgICAgICogMykgc2V0IHRoZSBjb2x1bW4ncyBmbGFnIGluIGNvbHVtbl9zZXRfZmxhZ3MgaWYgaXQgbmVlZHMgdW5kbworICAgICAqICAgIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiBhIGZhaWx1cmUuCisgICAgICovCisgICAgaWYgKHNhdmVfZmxhZ3MgJiBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRykgeworICAgICAgICBzYXZlX2ZsYWdzICY9IH5DT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRzsgICAgICAgIC8qIGNsZWFyIGV0aGVyU3RhdHNEYXRhU291cmNlICovCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86NDgyOm86IHwtPiBjb21taXQgY29sdW1uIGV0aGVyU3RhdHNEYXRhU291cmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgaWYgKC0xID09IHJjKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBjb2x1bW4gZXRoZXJTdGF0c0RhdGFTb3VyY2UgY29tbWl0IGZhaWxlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2V0IGZsYWcsIGluIGNhc2Ugd2UgbmVlZCB0byB1bmRvIGV0aGVyU3RhdHNEYXRhU291cmNlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0KKyAgICAgICAgICAgICAgICBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzYXZlX2ZsYWdzICYgQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHKSB7CisgICAgICAgIHNhdmVfZmxhZ3MgJj0gfkNPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRzsgICAgIC8qIGNsZWFyIGV0aGVyU3RhdHNPd25lciAqLworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjQ4MjpvOiB8LT4gY29tbWl0IGNvbHVtbiBldGhlclN0YXRzT3duZXIuCisgICAgICAgICAqLworICAgICAgICByYyA9IC0xOworICAgICAgICBpZiAoLTEgPT0gcmMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGNvbHVtbiBldGhlclN0YXRzT3duZXIgY29tbWl0IGZhaWxlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2V0IGZsYWcsIGluIGNhc2Ugd2UgbmVlZCB0byB1bmRvIGV0aGVyU3RhdHNPd25lcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzYXZlX2ZsYWdzICYgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRykgeworICAgICAgICBzYXZlX2ZsYWdzICY9IH5DT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHOyAgICAvKiBjbGVhciBldGhlclN0YXRzU3RhdHVzICovCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86NDgyOm86IHwtPiBjb21taXQgY29sdW1uIGV0aGVyU3RhdHNTdGF0dXMuCisgICAgICAgICAqLworICAgICAgICByYyA9IC0xOworICAgICAgICBpZiAoLTEgPT0gcmMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGNvbHVtbiBldGhlclN0YXRzU3RhdHVzIGNvbW1pdCBmYWlsZWRcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNldCBmbGFnLCBpbiBjYXNlIHdlIG5lZWQgdG8gdW5kbyBldGhlclN0YXRzU3RhdHVzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogaWYgd2Ugc3VjY2Vzc2Z1bGx5IGNvbW1pdGVkIHRoaXMgcm93LCBzZXQgdGhlIGRpcnR5IGZsYWcuCisgICAgICovCisgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CisgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0RJUlRZOworICAgIH0KKworICAgIGlmIChzYXZlX2ZsYWdzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmhhbmRsZWQgY29sdW1ucyAoMHgleCkgaW4gY29tbWl0XG4iLAorICAgICAgICAgICAgICAgICBzYXZlX2ZsYWdzKTsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9jb21taXQgKi8KKworLyoqCisgKiB1bmRvIGNvbW1pdCBuZXcgdmFsdWVzLgorICoKKyAqIFNob3VsZCB5b3UgbmVlZCBkaWZmZXJlbnQgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHdoaWNoIGNvbHVtbnMgd2VyZQorICogc2V0LCByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHdpbGwgaW5kaWNhdGUgd2hpY2ggd3JpdGVhYmxlIGNvbHVtbnMgd2VyZQorICogc2V0LiBUaGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBDT0xVTU5fKl9GTEFHIGJpdHMgY2FuIGJlIGZvdW5kIGluCisgKiBldGhlclN0YXRzVGFibGVfb2lkcy5oLgorICogQSBuZXcgcm93IHdpbGwgaGF2ZSB0aGUgTUZEX1JPV19DUkVBVEVEIGJpdCBzZXQgaW4gcm93cmVxX2ZsYWdzLgorICoKKyAqIEBwYXJhbSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0ODU6TTogfC0+IFVuZG8gZXRoZXJTdGF0c1RhYmxlIGNvbW1pdC4KKyAgICAgKiBjaGVjayB0aGUgY29sdW1uJ3MgZmxhZyBpbiByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHRvIHNlZQorICAgICAqIGlmIGl0IHdhcyBzZXQgZHVyaW5nIGNvbW1pdCwgdGhlbiB1bmRvIGl0LgorICAgICAqCisgICAgICogZWc6IGlmIChyb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzICYgQ09MVU1OX19GTEFHKSB7fQorICAgICAqLworCisKKyAgICAvKgorICAgICAqIGlmIHdlIHN1Y2Nlc3NmdWxseSB1bi1jb21taXRlZCB0aGlzIHJvdywgY2xlYXIgdGhlIGRpcnR5IGZsYWcuCisgICAgICovCisgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CisgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmPSB+TUZEX1JPV19ESVJUWTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdCAqLworCisvKgorICogVE9ETzo0NDA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBub2RlIHZhbHVlIGNoZWNrcy4KKyAqIFRPRE86NDUwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgdW5kbyBmdW5jdGlvbnMuCisgKiBUT0RPOjQ2MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIHNldCBmdW5jdGlvbnMuCisgKiBUT0RPOjQ4MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIGNvbW1pdCBmdW5jdGlvbnMuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNEYXRhU291cmNlCisgKiBldGhlclN0YXRzRGF0YVNvdXJjZSBpcyBzdWJpZCAyIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMgorICogRGVzY3JpcHRpb246CitUaGlzIG9iamVjdCBpZGVudGlmaWVzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgdGhhdAorICAgICAgICB0aGlzIGV0aGVyU3RhdHMgZW50cnkgaXMgY29uZmlndXJlZCB0byBhbmFseXplLiAgVGhpcworICAgICAgICBzb3VyY2UgY2FuIGJlIGFueSBldGhlcm5ldCBpbnRlcmZhY2Ugb24gdGhpcyBkZXZpY2UuCisgICAgICAgIEluIG9yZGVyIHRvIGlkZW50aWZ5IGEgcGFydGljdWxhciBpbnRlcmZhY2UsIHRoaXMgb2JqZWN0CisgICAgICAgIHNoYWxsIGlkZW50aWZ5IHRoZSBpbnN0YW5jZSBvZiB0aGUgaWZJbmRleCBvYmplY3QsCisgICAgICAgIGRlZmluZWQgaW4gUkZDIDIyMzMgWzE3XSwgZm9yIHRoZSBkZXNpcmVkIGludGVyZmFjZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGFuIGVudHJ5IHdlcmUgdG8gcmVjZWl2ZSBkYXRhIGZyb20KKyAgICAgICAgaW50ZXJmYWNlICMxLCB0aGlzIG9iamVjdCB3b3VsZCBiZSBzZXQgdG8gaWZJbmRleC4xLgorCisgICAgICAgIFRoZSBzdGF0aXN0aWNzIGluIHRoaXMgZ3JvdXAgcmVmbGVjdCBhbGwgcGFja2V0cworICAgICAgICBvbiB0aGUgbG9jYWwgbmV0d29yayBzZWdtZW50IGF0dGFjaGVkIHRvIHRoZSBpZGVudGlmaWVkCisgICAgICAgIGludGVyZmFjZS4KKworICAgICAgICBBbiBhZ2VudCBtYXkgb3IgbWF5IG5vdCBiZSBhYmxlIHRvIHRlbGwgaWYgZnVuZGFtZW50YWwKKyAgICAgICAgY2hhbmdlcyB0byB0aGUgbWVkaWEgb2YgdGhlIGludGVyZmFjZSBoYXZlIG9jY3VycmVkIGFuZAorICAgICAgICBuZWNlc3NpdGF0ZSBhbiBpbnZhbGlkYXRpb24gb2YgdGhpcyBlbnRyeS4gIEZvciBleGFtcGxlLCBhCisgICAgICAgIGhvdC1wbHVnZ2FibGUgZXRoZXJuZXQgY2FyZCBjb3VsZCBiZSBwdWxsZWQgb3V0IGFuZCByZXBsYWNlZAorICAgICAgICBieSBhIHRva2VuLXJpbmcgY2FyZC4gIEluIHN1Y2ggYSBjYXNlLCBpZiB0aGUgYWdlbnQgaGFzIHN1Y2gKKyAgICAgICAga25vd2xlZGdlIG9mIHRoZSBjaGFuZ2UsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaXQKKyAgICAgICAgaW52YWxpZGF0ZSB0aGlzIGVudHJ5LgorCisgICAgICAgIFRoaXMgb2JqZWN0IG1heSBub3QgYmUgbW9kaWZpZWQgaWYgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgZXRoZXJTdGF0c1N0YXR1cyBvYmplY3QgaXMgZXF1YWwgdG8gdmFsaWQoMSkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBPQkpFQ1RJRCAoYmFzZWQgb24gcGVybHR5cGUgT0JKRUNUSUQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0JKRUNUX0lELiBUaGUgQyB0eXBlIGRlY2wgaXMgb2lkIChvaWQpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4KKyAqLworLyoqCisgKiBDaGVjayB0aGF0IHRoZSBwcm9wb3NlZCBuZXcgdmFsdWUgaXMgcG90ZW50aWFsbHkgdmFsaWQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIKKyAqICAgICAgICBBIG9pZCBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4KKyAqICAgICAgICBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgIDogaW5jb21pbmcgdmFsdWUgaXMgbGVnYWwKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9OT1cgIDogaW5jb21pbmcgdmFsdWUgaXMgbm90IHZhbGlkIG5vdworICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX0VWRVIgOiBpbmNvbWluZyB2YWx1ZSBpcyBuZXZlciB2YWxpZAorICoKKyAqIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNoZWNrIGZvciByZXF1aXJlbWVudHMgdGhhdCBhcmUgbm90CisgKiBleHByZXNzZWQgaW4gdGhlIG1pYiBzeW50YXggKGZvciBleGFtcGxlLCBhIHJlcXVpcmVtZW50IHRoYXQKKyAqIGlzIGRldGFpbGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgYW4gb2JqZWN0KS4KKyAqCisgKiBZb3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBjaGFuZ2UgYmV0d2VlbiB0aGUgdW5kbyB2YWx1ZSBhbmQgdGhlCisgKiBuZXcgdmFsdWUgaXMgbGVnYWwgKGllLCB0aGUgdHJhbnNpc3Rpb24gZnJvbSBvbmUgdmFsdWUgdG8gYW5vdGhlcgorICogaXMgbGVnYWwpLgorICogICAgICAKKyAqQG5vdGUKKyAqIFRoaXMgY2hlY2sgaXMgb25seSB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyB2YWx1ZQorICogaXMgXGIgcG90ZW50aWFsbHkgdmFsaWQuIFRoaXMgaXMgdGhlIGZpcnN0IGNoZWNrIG9mIG1hbnksIGFuZAorICogaXMgb25lIG9mIHRoZSBzaW1wbGVzdCBvbmVzLgorICogCisgKkBub3RlCisgKiB0aGlzIGlzIG5vdCB0aGUgcGxhY2UgdG8gZG8gYW55IGNoZWNrcyBmb3IgdmFsdWVzCisgKiB3aGljaCBkZXBlbmQgb24gc29tZSBvdGhlciB2YWx1ZSBpbiB0aGUgbWliLiBUaG9zZQorICogdHlwZXMgb2YgY2hlY2tzIHNob3VsZCBiZSBkb25lIGluIHRoZQorICogZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llcygpIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHlvdToKKyAqICAgIFRoZSBzeW50YXggaXMgQVNOX09CSkVDVF9JRAorICogICAgVGhlIGxlbmd0aCBpcyA8IHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlKS4KKyAqCisgKiBJZiB0aGVyZSBhIG5vIG90aGVyIGNoZWNrcyB5b3UgbmVlZCB0byBkbywgc2ltcGx5IHJldHVybiBNRkRfU1VDQ0VTUy4KKyAqCisgKi8KK2ludAorZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ0MTpvOiB8LT4gQ2hlY2sgZm9yIHZhbGlkIGV0aGVyU3RhdHNEYXRhU291cmNlIHZhbHVlLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOyAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlIHZhbHVlIG5vdCBpbGxlZ2FsICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlICovCisKKy8qKgorICogU2F2ZSBvbGQgdmFsdWUgaW5mb3JtYXRpb24KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IuIHNldCB3aWxsIGZhaWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgdGFibGUgbGV2ZWwgdW5kbyBzZXR1cCBmdW5jdGlvbgorICogZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgaGFzIGJlZW4gY2FsbGVkLgorICoKKyAqQG5vdGUKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBhIG5ldyB2YWx1ZSBpcyBzZXQgZm9yIHRoaXMgY29sdW1uLgorICoKKyAqIElmIHRoZXJlIGlzIGFueSBzZXR1cCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY29sdW1uIChlLmcuIGFsbG9jYXRpbmcKKyAqIG1lbW9yeSBmb3IgYSBzdHJpbmcpLCB5b3Ugc2hvdWxkIGRvIHRoYXQgc2V0dXAgaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQKKyAqIHdvbid0IGJlIGRvbmUgdW5sZXNzIGl0IGlzIG5lY2Vzc2FyeS4KKyAqLworaW50CitldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kb19zZXR1cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NTpvOiB8LT4gU2V0dXAgZXRoZXJTdGF0c0RhdGFTb3VyY2UgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c0RhdGFTb3VyY2UgYW5kIGV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlIGZyb20gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZQorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSkpKTsKKyAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbjsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvX3NldHVwICovCisKKy8qKgorICogU2V0IHRoZSBuZXcgdmFsdWUuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LiBZb3Ugc2hvdWxkIGtub3cgaG93IHRvCisgKiAgICAgICAgbWFuaXB1bGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyCisgKiAgICAgICAgQSBvaWQgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuCisgKiAgICAgICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIKKyAqLworaW50CitldGhlclN0YXRzRGF0YVNvdXJjZV9zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuKQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEYXRhU291cmNlX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86NDYxOk06IHwtPiBTZXQgZXRoZXJTdGF0c0RhdGFTb3VyY2UgdmFsdWUuCisgICAgICogc2V0IGV0aGVyU3RhdHNEYXRhU291cmNlIHZhbHVlIGluIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0ciwgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4pOworICAgIC8qKiBjb252ZXJ0IGJ5dGVzIHRvIG51bWJlciBvZiBvaWQgKi8KKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiA9CisgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuIC8KKyAgICAgICAgc2l6ZW9mKGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJbMF0pOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZV9zZXQgKi8KKworLyoqCisgKiB1bmRvIHRoZSBwcmV2aW91cyBzZXQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICovCitpbnQKK2V0aGVyU3RhdHNEYXRhU291cmNlX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG8iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU2Om86IHwtPiBDbGVhbiB1cCBldGhlclN0YXRzRGF0YVNvdXJjZSB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzRGF0YVNvdXJjZSBhbmQgZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSBmcm9tIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICAocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKSkpOworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuID0KKyAgICAgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG8gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c093bmVyCisgKiBldGhlclN0YXRzT3duZXIgaXMgc3ViaWQgMjAgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yMAorICogRGVzY3JpcHRpb246CitUaGUgZW50aXR5IHRoYXQgY29uZmlndXJlZCB0aGlzIGVudHJ5IGFuZCBpcyB0aGVyZWZvcmUKKyAgICAgICAgdXNpbmcgdGhlIHJlc291cmNlcyBhc3NpZ25lZCB0byBpdC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMSAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqIFJhbmdlczogIDAgLSAxMjc7CisgKgorICogSXRzIHN5bnRheCBpcyBPd25lclN0cmluZyAoYmFzZWQgb24gcGVybHR5cGUgT0NURVRTVFIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0NURVRfU1RSLiBUaGUgQyB0eXBlIGRlY2wgaXMgY2hhciAoY2hhcikKKyAqIFRoaXMgZGF0YSB0eXBlIHJlcXVpcmVzIGEgbGVuZ3RoLiAgKE1heCAxMjcpCisgKi8KKy8qKgorICogQ2hlY2sgdGhhdCB0aGUgcHJvcG9zZWQgbmV3IHZhbHVlIGlzIHBvdGVudGlhbGx5IHZhbGlkLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cgorICogICAgICAgIEEgY2hhciBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuCisgKiAgICAgICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgOiBpbmNvbWluZyB2YWx1ZSBpcyBsZWdhbAorICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX05PVyAgOiBpbmNvbWluZyB2YWx1ZSBpcyBub3QgdmFsaWQgbm93CisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfRVZFUiA6IGluY29taW5nIHZhbHVlIGlzIG5ldmVyIHZhbGlkCisgKgorICogVGhpcyBpcyB0aGUgcGxhY2UgdG8gY2hlY2sgZm9yIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBub3QKKyAqIGV4cHJlc3NlZCBpbiB0aGUgbWliIHN5bnRheCAoZm9yIGV4YW1wbGUsIGEgcmVxdWlyZW1lbnQgdGhhdAorICogaXMgZGV0YWlsZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGZvciBhbiBvYmplY3QpLgorICoKKyAqIFlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIGNoYW5nZSBiZXR3ZWVuIHRoZSB1bmRvIHZhbHVlIGFuZCB0aGUKKyAqIG5ldyB2YWx1ZSBpcyBsZWdhbCAoaWUsIHRoZSB0cmFuc2lzdGlvbiBmcm9tIG9uZSB2YWx1ZSB0byBhbm90aGVyCisgKiBpcyBsZWdhbCkuCisgKiAgICAgIAorICpAbm90ZQorICogVGhpcyBjaGVjayBpcyBvbmx5IHRvIGRldGVybWluZSBpZiB0aGUgbmV3IHZhbHVlCisgKiBpcyBcYiBwb3RlbnRpYWxseSB2YWxpZC4gVGhpcyBpcyB0aGUgZmlyc3QgY2hlY2sgb2YgbWFueSwgYW5kCisgKiBpcyBvbmUgb2YgdGhlIHNpbXBsZXN0IG9uZXMuCisgKiAKKyAqQG5vdGUKKyAqIHRoaXMgaXMgbm90IHRoZSBwbGFjZSB0byBkbyBhbnkgY2hlY2tzIGZvciB2YWx1ZXMKKyAqIHdoaWNoIGRlcGVuZCBvbiBzb21lIG90aGVyIHZhbHVlIGluIHRoZSBtaWIuIFRob3NlCisgKiB0eXBlcyBvZiBjaGVja3Mgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCisgKiBldGhlclN0YXRzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzKCkgZnVuY3Rpb24uCisgKgorICogVGhlIGZvbGxvd2luZyBjaGVja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSBmb3IgeW91OgorICogICAgVGhlIHN5bnRheCBpcyBBU05fT0NURVRfU1RSCisgKiAgICBUaGUgbGVuZ3RoIGlzIDwgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyKS4KKyAqICAgIFRoZSBsZW5ndGggaXMgaW4gKG9uZSBvZikgdGhlIHJhbmdlIHNldChzKTogIDAgLSAxMjcKKyAqCisgKiBJZiB0aGVyZSBhIG5vIG90aGVyIGNoZWNrcyB5b3UgbmVlZCB0byBkbywgc2ltcGx5IHJldHVybiBNRkRfU1VDQ0VTUy4KKyAqCisgKi8KK2ludAorZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpldGhlclN0YXRzT3duZXJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzo0NDE6bzogfC0+IENoZWNrIGZvciB2YWxpZCBldGhlclN0YXRzT3duZXIgdmFsdWUuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7ICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyIHZhbHVlIG5vdCBpbGxlZ2FsICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZSAqLworCisvKioKKyAqIFNhdmUgb2xkIHZhbHVlIGluZm9ybWF0aW9uCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yLiBzZXQgd2lsbCBmYWlsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRhYmxlIGxldmVsIHVuZG8gc2V0dXAgZnVuY3Rpb24KKyAqIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwIGhhcyBiZWVuIGNhbGxlZC4KKyAqCisgKkBub3RlCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgYSBuZXcgdmFsdWUgaXMgc2V0IGZvciB0aGlzIGNvbHVtbi4KKyAqCisgKiBJZiB0aGVyZSBpcyBhbnkgc2V0dXAgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAoZS5nLiBhbGxvY2F0aW5nCisgKiBtZW1vcnkgZm9yIGEgc3RyaW5nKSwgeW91IHNob3VsZCBkbyB0aGF0IHNldHVwIGluIHRoaXMgZnVuY3Rpb24sIHNvIGl0CisgKiB3b24ndCBiZSBkb25lIHVubGVzcyBpdCBpcyBuZWNlc3NhcnkuCisgKi8KK2ludAorZXRoZXJTdGF0c093bmVyX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3duZXJfdW5kb19zZXR1cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NTpvOiB8LT4gU2V0dXAgZXRoZXJTdGF0c093bmVyIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNPd25lciBhbmQgZXRoZXJTdGF0c093bmVyX2xlbiBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lciBmcm9tIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lciwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIsCisgICAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lclswXSkpKTsKKyAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXJfbGVuID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lcl91bmRvX3NldHVwICovCisKKy8qKgorICogU2V0IHRoZSBuZXcgdmFsdWUuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LiBZb3Ugc2hvdWxkIGtub3cgaG93IHRvCisgKiAgICAgICAgbWFuaXB1bGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cgorICogICAgICAgIEEgY2hhciBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuCisgKiAgICAgICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyCisgKi8KK2ludAorZXRoZXJTdGF0c093bmVyX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuKQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPd25lcl9zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzo0NjE6TTogfC0+IFNldCBldGhlclN0YXRzT3duZXIgdmFsdWUuCisgICAgICogc2V0IGV0aGVyU3RhdHNPd25lciB2YWx1ZSBpbiByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyLCBldGhlclN0YXRzT3duZXJfdmFsX3B0ciwKKyAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuKTsKKyAgICAvKiogY29udmVydCBieXRlcyB0byBudW1iZXIgb2YgY2hhciAqLworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiA9CisgICAgICAgIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbiAvIHNpemVvZihldGhlclN0YXRzT3duZXJfdmFsX3B0clswXSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lcl9zZXQgKi8KKworLyoqCisgKiB1bmRvIHRoZSBwcmV2aW91cyBzZXQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICovCitpbnQKK2V0aGVyU3RhdHNPd25lcl91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3duZXJfdW5kbyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTY6bzogfC0+IENsZWFuIHVwIGV0aGVyU3RhdHNPd25lciB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzT3duZXIgYW5kIGV0aGVyU3RhdHNPd25lcl9sZW4gZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lciBmcm9tIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lcgorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lciwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyLAorICAgICAgICAgICAocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJbMF0pKSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuID0KKyAgICAgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyX2xlbjsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3duZXJfdW5kbyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzU3RhdHVzCisgKiBldGhlclN0YXRzU3RhdHVzIGlzIHN1YmlkIDIxIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHN0YXR1cyBvZiB0aGlzIGV0aGVyU3RhdHMgZW50cnkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMSAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKiBFbnVtIHJhbmdlOiAyLzguIFZhbHVlczogIHZhbGlkKDEpLCBjcmVhdGVSZXF1ZXN0KDIpLCB1bmRlckNyZWF0aW9uKDMpLCBpbnZhbGlkKDQpCisgKgorICogSXRzIHN5bnRheCBpcyBFbnRyeVN0YXR1cyAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIENoZWNrIHRoYXQgdGhlIHByb3Bvc2VkIG5ldyB2YWx1ZSBpcyBwb3RlbnRpYWxseSB2YWxpZC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1N0YXR1c192YWwKKyAqICAgICAgICBBIGxvbmcgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgIDogaW5jb21pbmcgdmFsdWUgaXMgbGVnYWwKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9OT1cgIDogaW5jb21pbmcgdmFsdWUgaXMgbm90IHZhbGlkIG5vdworICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX0VWRVIgOiBpbmNvbWluZyB2YWx1ZSBpcyBuZXZlciB2YWxpZAorICoKKyAqIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNoZWNrIGZvciByZXF1aXJlbWVudHMgdGhhdCBhcmUgbm90CisgKiBleHByZXNzZWQgaW4gdGhlIG1pYiBzeW50YXggKGZvciBleGFtcGxlLCBhIHJlcXVpcmVtZW50IHRoYXQKKyAqIGlzIGRldGFpbGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgYW4gb2JqZWN0KS4KKyAqCisgKiBZb3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBjaGFuZ2UgYmV0d2VlbiB0aGUgdW5kbyB2YWx1ZSBhbmQgdGhlCisgKiBuZXcgdmFsdWUgaXMgbGVnYWwgKGllLCB0aGUgdHJhbnNpc3Rpb24gZnJvbSBvbmUgdmFsdWUgdG8gYW5vdGhlcgorICogaXMgbGVnYWwpLgorICogICAgICAKKyAqQG5vdGUKKyAqIFRoaXMgY2hlY2sgaXMgb25seSB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyB2YWx1ZQorICogaXMgXGIgcG90ZW50aWFsbHkgdmFsaWQuIFRoaXMgaXMgdGhlIGZpcnN0IGNoZWNrIG9mIG1hbnksIGFuZAorICogaXMgb25lIG9mIHRoZSBzaW1wbGVzdCBvbmVzLgorICogCisgKkBub3RlCisgKiB0aGlzIGlzIG5vdCB0aGUgcGxhY2UgdG8gZG8gYW55IGNoZWNrcyBmb3IgdmFsdWVzCisgKiB3aGljaCBkZXBlbmQgb24gc29tZSBvdGhlciB2YWx1ZSBpbiB0aGUgbWliLiBUaG9zZQorICogdHlwZXMgb2YgY2hlY2tzIHNob3VsZCBiZSBkb25lIGluIHRoZQorICogZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llcygpIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHlvdToKKyAqICAgIFRoZSBzeW50YXggaXMgQVNOX0lOVEVHRVIKKyAqICAgIFRoZSB2YWx1ZSBpcyBvbmUgb2YgIHZhbGlkKDEpLCBjcmVhdGVSZXF1ZXN0KDIpLCB1bmRlckNyZWF0aW9uKDMpLCBpbnZhbGlkKDQpCisgKgorICogSWYgdGhlcmUgYSBubyBvdGhlciBjaGVja3MgeW91IG5lZWQgdG8gZG8sIHNpbXBseSByZXR1cm4gTUZEX1NVQ0NFU1MuCisgKgorICovCitpbnQKK2V0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1N0YXR1c192YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NDE6bzogfC0+IENoZWNrIGZvciB2YWxpZCBldGhlclN0YXRzU3RhdHVzIHZhbHVlLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOyAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXMgdmFsdWUgbm90IGlsbGVnYWwgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZSAqLworCisvKioKKyAqIFNhdmUgb2xkIHZhbHVlIGluZm9ybWF0aW9uCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yLiBzZXQgd2lsbCBmYWlsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRhYmxlIGxldmVsIHVuZG8gc2V0dXAgZnVuY3Rpb24KKyAqIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwIGhhcyBiZWVuIGNhbGxlZC4KKyAqCisgKkBub3RlCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgYSBuZXcgdmFsdWUgaXMgc2V0IGZvciB0aGlzIGNvbHVtbi4KKyAqCisgKiBJZiB0aGVyZSBpcyBhbnkgc2V0dXAgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAoZS5nLiBhbGxvY2F0aW5nCisgKiBtZW1vcnkgZm9yIGEgc3RyaW5nKSwgeW91IHNob3VsZCBkbyB0aGF0IHNldHVwIGluIHRoaXMgZnVuY3Rpb24sIHNvIGl0CisgKiB3b24ndCBiZSBkb25lIHVubGVzcyBpdCBpcyBuZWNlc3NhcnkuCisgKi8KK2ludAorZXRoZXJTdGF0c1N0YXR1c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1N0YXR1c191bmRvX3NldHVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU1Om86IHwtPiBTZXR1cCBldGhlclN0YXRzU3RhdHVzIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNTdGF0dXMgZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzU3RhdHVzIGZyb20gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzCisgICAgICovCisgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c1N0YXR1cyA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1czsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBTZXQgdGhlIG5ldyB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuIFlvdSBzaG91bGQga25vdyBob3cgdG8KKyAqICAgICAgICBtYW5pcHVsYXRlIHRoZSB2YWx1ZSBmcm9tIHRoaXMgb2JqZWN0LgorICogQHBhcmFtIGV0aGVyU3RhdHNTdGF0dXNfdmFsCisgKiAgICAgICAgQSBsb25nIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqLworaW50CitldGhlclN0YXRzU3RhdHVzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1N0YXR1c192YWwpCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1N0YXR1c19zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NjE6TTogfC0+IFNldCBldGhlclN0YXRzU3RhdHVzIHZhbHVlLgorICAgICAqIHNldCBldGhlclN0YXRzU3RhdHVzIHZhbHVlIGluIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXMgPSBldGhlclN0YXRzU3RhdHVzX3ZhbDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1c19zZXQgKi8KKworLyoqCisgKiB1bmRvIHRoZSBwcmV2aW91cyBzZXQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICovCitpbnQKK2V0aGVyU3RhdHNTdGF0dXNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1N0YXR1c191bmRvIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NjpvOiB8LT4gQ2xlYW4gdXAgZXRoZXJTdGF0c1N0YXR1cyB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzU3RhdHVzIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzIGZyb20gcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c1N0YXR1cworICAgICAqLworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1cyA9IHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNTdGF0dXM7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1c191bmRvICovCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGUwODcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmgKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDc3ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9EQVRBX1NFVF9ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9EQVRBX1NFVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNFVCBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICAgICAqLworCisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb21taXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV9zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1BrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c0phYmJlcnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2NoZWNrX3ZhbHVlCisgICAgICAgIChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfY2hlY2tfdmFsdWUKKyAgICAgICAgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3VuZG9fc2V0dXAKKyAgICAgICAgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl9zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzU3RhdHVzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0RBVEFfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZW51bXMuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNjMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9FTlVNU19ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9FTlVNU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTk9URVMgb24gZW51bXMKKyAgICAgKiA9PT09PT09PT09PT09PQorICAgICAqCisgICAgICogVmFsdWUgTWFwcGluZworICAgICAqIC0tLS0tLS0tLS0tLS0KKyAgICAgKiBJZiB0aGUgdmFsdWVzIGZvciB5b3VyIGRhdGEgdHlwZSBkb24ndCBleGFjdGx5IG1hdGNoIHRoZQorICAgICAqIHBvc3NpYmxlIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBtaWIsIHlvdSBzaG91bGQgbWFwIHRoZW0KKyAgICAgKiBiZWxvdy4gRm9yIGV4YW1wbGUsIGEgYm9vbGVhbiBmbGFnICgxLzApIGlzIHVzdWFsbHkgcmVwcmVzZW50ZWQKKyAgICAgKiBhcyBhIFRydXRoVmFsdWUgaW4gYSBNSUIsIHdoaWNoIG1hcHMgdG8gdGhlIHZhbHVlcyAoMS8yKS4KKyAgICAgKgorICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZW51bSBkZWZpbml0aW9ucyBmb3IgdGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBldGhlclN0YXRzU3RhdHVzIChFbnRyeVN0YXR1cyAvIEFTTl9JTlRFR0VSKQorICoKKyAqIHNpbmNlIGEgVGV4dHVhbCBDb252ZW50aW9uIG1heSBiZSByZWZlcmVuY2VkIG1vcmUgdGhhbiBvbmNlIGluIGEKKyAqIE1JQiwgcHJvdGVjdCBhZ2FpbnQgcmVkZWZpbml0aW9ucyBvZiB0aGUgZW51bSB2YWx1ZXMuCisgKi8KKyNpZm5kZWYgRU5UUllTVEFUVVNfRU5VTVMKKyNkZWZpbmUgRU5UUllTVEFUVVNfRU5VTVMKKworI2RlZmluZSBFTlRSWVNUQVRVU19WQUxJRCAgMQorI2RlZmluZSBFTlRSWVNUQVRVU19DUkVBVEVSRVFVRVNUICAyCisjZGVmaW5lIEVOVFJZU1RBVFVTX1VOREVSQ1JFQVRJT04gIDMKKyNkZWZpbmUgRU5UUllTVEFUVVNfSU5WQUxJRCAgNAorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVOVFJZU1RBVFVTX0VOVU1TICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9FTlVNU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFjNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDIyMzIgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgKi8KK3R5cGVkZWYgc3RydWN0IGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4X3MgeworCisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisKKyAgICBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICp1c2VyX2N0eDsKKworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gdGJsX2luZm87CisKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgYWNjZXNzX211bHRpcGxleGVyOworCisgICAgdV9pbnQgICAgICAgICAgIHRhYmxlX2RpcnR5OworCit9IGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4OworCitzdGF0aWMgZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggZXRoZXJTdGF0c1RhYmxlX2lmX2N0eDsKKworc3RhdGljIHZvaWQgICAgCitfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKK3N0YXRpYyB2b2lkICAgIAorX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKKworCituZXRzbm1wX2NvbnRhaW5lciAqCitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKworZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworfQorCitldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2V0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqb2xkID0gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOworICAgIHJldHVybiBvbGQ7Cit9CisKK2ludAorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCit7CisgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKwordV9pbnQKK2V0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC50YWJsZV9kaXJ0eTsKK30KKwordm9pZAorZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldCh1X2ludCBzdGF0dXMpCit7CisgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfZGlydHlfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkLiB3YXMgJWQsIG5vdyAlZFxuIiwKKyAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LnRhYmxlX2RpcnR5LCBzdGF0dXMpKTsKKyAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LnRhYmxlX2RpcnR5ID0gc3RhdHVzOworfQorCisvKgorICogbWZkIG11bHRpcGxleGVyIG1vZGVzCisgKi8KK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX29iamVjdHM7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9zZXRfdmFsdWVzOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3ZhbHVlczsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jb21taXQ7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQ7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdDsKKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbik7CisKK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfY2hlY2tfaW5kZXhlcyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworCitldGhlclN0YXRzVGFibGVfZGF0YSAqZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CisKKy8qKgorICogQGludGVybmFsCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBldGhlclN0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAorX2V0aGVyU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3B0ciwgdV9sb25nIGZsYWdzKQoreworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyAqYWNjZXNzX211bHRpcGxleGVyID0KKyAgICAgICAgJmV0aGVyU3RhdHNUYWJsZV9pZl9jdHguYWNjZXNzX211bHRpcGxleGVyOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibF9pbmZvID0KKyAgICAgICAgJmV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlIiwgImNhbGxlZFxuIikpOworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2F2ZSBpbnRlcmZhY2UgY29udGV4dCBmb3IgZXRoZXJTdGF0c1RhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogZXRoZXJTdGF0c0luZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICAvKgorICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCisgICAgICovCisgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBFVEhFUlNUQVRTVEFCTEVfTUlOX0NPTDsKKyAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IEVUSEVSU1RBVFNUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gcmVnX3B0cjsKKworICAgIC8qCisgICAgICogY2FsbCBkYXRhIGFjY2VzcyBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgZXRoZXJTdGF0c1RhYmxlX2luaXRfZGF0YShyZWdfcHRyKTsKKworICAgIC8qCisgICAgICogc2V0IHVwIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KCZldGhlclN0YXRzVGFibGVfaWZfY3R4KTsKKyAgICBpZiAoTlVMTCA9PSBldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGluaXRpYWxpemUgY29udGFpbmVyIGZvciBldGhlclN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0gX21mZF9ldGhlclN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmdldF92YWx1ZXMgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworCisgICAgLyoKKyAgICAgKiBubyB3cmFwcGVycyB5ZXQKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0ID0gX21mZF9ldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3Q7CisKKworICAgIC8qCisgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcyA9CisgICAgICAgIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX29iamVjdHM7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwID0gX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY2xlYW51cCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9zZXRfdmFsdWVzOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXRzID0gX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb192YWx1ZXM7CisKKyAgICAvKgorICAgICAqIG5vIHdyYXBwZXJzIHlldAorICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29tbWl0ID0gX21mZF9ldGhlclN0YXRzVGFibGVfY29tbWl0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQgPQorICAgICAgICBfbWZkX2V0aGVyU3RhdHNUYWJsZV9pcnJldmVyc2libGVfY29tbWl0OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6aW5pdF9ldGhlclN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyBldGhlclN0YXRzVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiZXRoZXJTdGF0c1RhYmxlIiwgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGV0aGVyU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVnaW5mby0+bXlfcmVnX3ZvaWQgPSAmZXRoZXJTdGF0c1RhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9JUlJFVkVSU0lCTEVfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9zeW50YXhfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX09CSkVDVDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3Qgcm93X21lcmdlIGhlbHBlciB3aXRoIHByZWZpeCByb290b2lkX2xlbiArIDIgKGVudHJ5LmNvbCkKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjb250YWluZXJfdGFibGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KHRibF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChldGhlclN0YXRzVGFibGVfaWZfY3R4LmNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRhYmxlCisgICAgICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YmxfaW5mbyk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogU2h1dGRvd24gdGhlIHRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICovCit2b2lkCitfZXRoZXJTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogcmVnX3B0cikKK3sKKyAgICAvKgorICAgICAqIHNodXRkb3duIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmZXRoZXJTdGF0c1RhYmxlX2lmX2N0eCk7Cit9CisKK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBjb252ZXJ0IHRoZSBpbmRleCBjb21wb25lbnQgc3RvcmVkIGluIHRoZSBjb250ZXh0IHRvIGFuIG9pZAorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9ldGhlclN0YXRzSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2V0aGVyU3RhdHNJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9ldGhlclN0YXRzSW5kZXgpKTsKKyAgICB2YXJfZXRoZXJTdGF0c0luZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9ldGhlclN0YXRzSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9ldGhlclN0YXRzSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5ldGhlclN0YXRzSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5ldGhlclN0YXRzSW5kZXgpKTsKKworCisgICAgZXJyID0gYnVpbGRfb2lkX25vYWxsb2Mob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLCAmb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZ2YXJfZXRoZXJTdGF0c0luZGV4KTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfZXRoZXJTdGF0c0luZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQgKi8KKworLyoqCisgKiBleHRyYWN0IGV0aGVyU3RhdHNUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2V0aGVyU3RhdHNJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfZXRoZXJTdGF0c0luZGV4LCAweDAwLCBzaXplb2YodmFyX2V0aGVyU3RhdHNJbmRleCkpOworICAgIHZhcl9ldGhlclN0YXRzSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2V0aGVyU3RhdHNJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2V0aGVyU3RhdHNJbmRleCk7CisgICAgaWYgKGVyciA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvcHkgb3V0IHZhbHVlcworICAgICAgICAgKi8KKyAgICAgICAgbWliX2lkeC0+ZXRoZXJTdGF0c0luZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2V0aGVyU3RhdHNJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2V0aGVyU3RhdHNJbmRleCk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICogZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiBjcmVhdGUgbmV3IGV0aGVyU3RhdHNUYWJsZV9kYXRhLgorICovCitldGhlclN0YXRzVGFibGVfZGF0YSAqCitldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9kYXRhICpydG4gPSBTTk1QX01BTExPQ19UWVBFREVGKGV0aGVyU3RhdHNUYWJsZV9kYXRhKTsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gbWFsbG9jIG1lbW9yeSBmb3IgbmV3ICIKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9kYXRhLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEgKi8KKworLyoKKyAqIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiByZWxlYXNlIGV0aGVyU3RhdHNUYWJsZSBkYXRhLgorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKGV0aGVyU3RhdHNUYWJsZV9kYXRhICogZGF0YSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgZnJlZShkYXRhKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YSAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqLworZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgodm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSAiCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eC5cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgPSByb3dyZXFfY3R4LT5vaWRfdG1wOworCisgICAgcm93cmVxX2N0eC0+ZXRoZXJTdGF0c1RhYmxlX2RhdGFfbGlzdCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIGlmIHdlIGFsbG9jYXRlZCBkYXRhLCBjYWxsIGluaXQgcm91dGluZQorICAgICAqLworICAgIGlmICghKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREFUQV9GUk9NX1VTRVIpKSB7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0KKyAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICByb3dyZXFfY3R4ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByb3dyZXFfY3R4OworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKworICAgIGlmIChyb3dyZXFfY3R4LT51bmRvKQorICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPnVuZG8pOworCisgICAgLyoKKyAgICAgKiBmcmVlIGluZGV4IG9pZCBwb2ludGVyCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyAhPSByb3dyZXFfY3R4LT5vaWRfdG1wKQorICAgICAgICBmcmVlKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyk7CisKKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9ldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9ldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogd2FpdCBmb3IgbGFzdCBjYWxsIGJlZm9yZSBjYWxsaW5nIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJ3YWl0aW5nIGZvciBsYXN0IHBvc3RfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICBwYWNrZXRfcmMgPSBuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcihhZ3RyZXFfaW5mby0+YXNwLCAwKTsKKyAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHBhY2tldF9yYykgJiYgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCgpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIHNob3VsZG4ndCBnZXQgaGVyZS4gdGhlIHVuZG8gc3RlcHMgc2hvdWxkIGFsc28gY2xlYXIKKyAgICAgICAgICogdGhlIGRpcnR5IGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgZGlydHkgZmxhZyBzZXQgaW4gcG9zdF9yZXF1ZXN0ICIKKyAgICAgICAgICAgICAgICAgImJ1dCBzdGF0dXMgIT0gU1VDQ0VTUy5cbiIpOworICAgIH0KKworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCitfbWZkX2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfZnJvbV9pbmRleChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmNfcHRyKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggbWliX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9mcm9tX2luZGV4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcmNfcHRyKQorICAgICAgICByY19wdHIgPSAmcmM7CisgICAgKnJjX3B0ciA9IE1GRF9TVUNDRVNTOworCisgICAgbWVtc2V0KCZtaWJfaWR4LCAweDAsIHNpemVvZihtaWJfaWR4KSk7CisKKyAgICAvKgorICAgICAqIHRyeSB0byBwYXJzZSBvaWQKKyAgICAgKi8KKyAgICAqcmNfcHRyID0gZXRoZXJTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG9pZF9pZHgsICZtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gKnJjX3B0cikgeworICAgICAgICBERUJVR01TR1QoKCJldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgcGFyc2luZyBpbmRleFxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIG5ldyBjb250ZXh0CisgICAgICovCisgICAgcm93cmVxX2N0eCA9IGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KE5VTEwpOworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgKnJjX3B0ciA9IE1GRF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogbXNnIGFscmVhZHkgbG9nZ2VkICovCisgICAgfQorCisgICAgbWVtY3B5KCZyb3dyZXFfY3R4LT50YmxfaWR4LCAmbWliX2lkeCwgc2l6ZW9mKG1pYl9pZHgpKTsKKworICAgIC8qCisgICAgICogY2hlY2sgaW5kZXhlcworICAgICAqLworICAgICpyY19wdHIgPSBfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2luZGV4ZXMocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9ICpyY19wdHIpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoKCpyY19wdHIgPT0gU05NUF9FUlJfTk9DUkVBVElPTikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCpyY19wdHIgPT0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRSkpOworICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvcHkgaW5kZXhlcworICAgICAqLworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgubGVuID0gb2lkX2lkeC0+bGVuOworICAgIG1lbWNweShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMsIG9pZF9pZHgtPm9pZHMsCisgICAgICAgICAgIG9pZF9pZHgtPmxlbiAqIHNpemVvZihvaWQpKTsKKworICAgIHJldHVybiByb3dyZXFfY3R4OworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfZnJvbV9pbmRleCAqLworCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX29iamVjdF9sb29rdXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZ2V0IG91ciBjb250ZXh0IGZyb20gbWZkCisgICAgICogZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICopcmVnaW5mby0+bXlfcmVnX3ZvaWQ7CisgICAgICovCisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxyZXFfaW5mbzsKKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisKKyAgICAgICAgdGJscmVxX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRibHJlcV9pbmZvKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicmVxdWVzdCBoYWQgbm8gdGFibGUgaW5mb1xuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdHJ5IGNyZWF0ZSByb3dyZXEKKyAgICAgICAgICovCisgICAgICAgIG9pZF9pZHgub2lkcyA9IHRibHJlcV9pbmZvLT5pbmRleF9vaWQ7CisgICAgICAgIG9pZF9pZHgubGVuID0gdGJscmVxX2luZm8tPmluZGV4X29pZF9sZW47CisKKyAgICAgICAgcm93cmVxX2N0eCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9mcm9tX2luZGV4KCZvaWRfaWR4LCAmcmMpOworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19DUkVBVEVEOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGFkZCByb3dyZXFfY3R4IHRvIHJlcXVlc3QgZGF0YSBsaXN0cworICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9pbmRleCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcChyb3dyZXFfY3R4KTsKKworICAgIHJldHVybiBTTk1QX1ZBTElEQVRFX0VSUihyYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX29iamVjdF9sb29rdXAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQGludGVybmFsCisgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIGludCBjb2x1bW4pCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIChJTkRFWCkgZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTSU5ERVg6CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YobG9uZyk7CisgICAgICAgICgqdmFyLT52YWwuaW50ZWdlcikgPSByb3dyZXFfY3R4LT50YmxfaWR4LmV0aGVyU3RhdHNJbmRleDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0U6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0RhdGFTb3VyY2UpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX09CSkVDVF9JRDsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRGF0YVNvdXJjZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9pZCAqKikgJiB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRHJvcEV2ZW50cygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzRHJvcEV2ZW50cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0Ryb3BFdmVudHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c09jdGV0cyg0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTT0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c09jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c09jdGV0c19nZXQocm93cmVxX2N0eCwgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0cyg1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzTXVsdGljYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzT3ZlcnNpemVQa3RzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT3ZlcnNpemVQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0ZyYWdtZW50cygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNGcmFnbWVudHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNGcmFnbWVudHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzSmFiYmVycygxMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0phYmJlcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNKYWJiZXJzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDb2xsaXNpb25zKDEzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzQ29sbGlzaW9ucykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0NvbGxpc2lvbnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NE9jdGV0cygxNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzNjRPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMoMTUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cygxNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cygxOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzT3duZXIpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX09DVEVUX1NUUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT3duZXJfZ2V0KHJvd3JlcV9jdHgsIChjaGFyICoqKSAmdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNTdGF0dXMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNTdGF0dXNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoRVRIRVJTVEFUU1RBQkxFX01JTl9DT0wgPD0gY29sdW1uCisgICAgICAgICAgICAmJiBjb2x1bW4gPD0gRVRIRVJTVEFUU1RBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJhc3N1bWUgY29sdW1uICVkIGlzIHJlc2VydmVkXG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJjID0gTUZEX1NLSVA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbi5cbiIsCisgICAgICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uICovCisKK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOworICAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKHZvaWQgKik7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgREVCVUdNU0dUTCgoIjk6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXMiLAorICAgICAgICAgICAgICAgICJleGlzdHMgJXVcbiIsIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MpKTsKKworICAgIGZvciAoOyByZXF1ZXN0czsgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dCkgeworICAgICAgICAvKgorICAgICAgICAgKiBzYXZlIG9sZCBwb2ludGVyLCBzbyB3ZSBjYW4gZnJlZSBpdCBpZiByZXBsYWNlZAorICAgICAgICAgKi8KKyAgICAgICAgb2xkX3N0cmluZyA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmc7CisgICAgICAgIGRhdGFGcmVlSG9vayA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPmRhdGFGcmVlSG9vazsKKyAgICAgICAgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZjsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpOworICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZiA9PQorICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuICE9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZikpCisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IGNvbHVtbiBkYXRhCisgICAgICAgICAqLworICAgICAgICB0cmkgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRyaSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJjID0gX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBpZiAoTUZEX1NLSVAgPT0gcmMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTlVMTCB2YXJiaW5kIGRhdGEgcG9pbnRlciFcbiIpOworICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBpZiB0aGUgYnVmZmVyIHdhc24ndCB1c2VkIHByZXZpb3VzbHkgZm9yIHRoZSBvbGQgZGF0YSAoaS5lLiBpdAorICAgICAgICAgKiB3YXMgYWxsY29hdGVkIG1lbW9yeSkgIGFuZCB0aGUgZ2V0IHJvdXRpbmUgcmVwbGFjZWQgdGhlIHBvaW50ZXIsCisgICAgICAgICAqIHdlIG5lZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChvbGRfc3RyaW5nICYmIChvbGRfc3RyaW5nICE9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1ZikgJiYKKyAgICAgICAgICAgIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nICE9IG9sZF9zdHJpbmcpKSB7CisgICAgICAgICAgICBpZiAoZGF0YUZyZWVIb29rKQorICAgICAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAob2xkX3N0cmluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJlZShvbGRfc3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXMgKi8KKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV9jaGVja19pbmRleGVzKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY2hlY2tfaW5kZXhlcyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworCisgICAgLyoKKyAgICAgKiAoSU5ERVgpIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNoZWNrIGRlZmluZWQgcmFuZ2UocykuIAorICAgICAqLworICAgIGlmICgoU05NUEVSUl9TVUNDRVNTID09IHJjKQorICAgICAgICAmJiAoKHJvd3JlcV9jdHgtPnRibF9pZHguZXRoZXJTdGF0c0luZGV4IDwgMSkKKyAgICAgICAgICAgIHx8IChyb3dyZXFfY3R4LT50YmxfaWR4LmV0aGVyU3RhdHNJbmRleCA+IDY1NTM1KSkKKyAgICAgICAgKSB7CisgICAgICAgIHJjID0gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gcmM7CisgICAgcmMgPSBldGhlclN0YXRzSW5kZXhfY2hlY2tfaW5kZXgocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKKworICAgIC8qCisgICAgICogaWYgaW5kaXZpZHVhbCBwYXJ0cyBsb29rIG9rLCBjaGVjayB0aGVtIGFzIGEgd2hvbGUKKyAgICAgKi8KKyAgICByZXR1cm4gZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9jaGVja19pbmRleGVzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IFN5bnRheCBjaGVja3MKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogQGludGVybmFsCisgKiBDaGVjayB0aGUgc3ludGF4IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogKElOREVYKSBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNJTkRFWDoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsgICAgICAvKiBjYW4gbm90IGNoYW5nZSBpbmRleCBvZiBhY3RpdmUgcm93ICovCisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFOgorICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUodmFyLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2UpKTsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbjpldGhlclN0YXRzRGF0YVNvdXJjZSIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZShyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2lkICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCisgICAgICAgICAgICAgICAgJiYgKE1GRF9OT1RfVkFMSURfTk9XICE9IHJjKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByYyAlZCBmcm9tIGV0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJjKTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRHJvcEV2ZW50cygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c09jdGV0cyg0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0cyg1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzVW5kZXJzaXplUGt0cyg5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c092ZXJzaXplUGt0cygxMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0ZyYWdtZW50cygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0phYmJlcnMoMTIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ29sbGlzaW9ucygxMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMoMTQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cygxNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzKDE2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzKDE3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cygxOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSOgorICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUodmFyLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIGRlZmluZWQgcmFuZ2UocykuIAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChTTk1QRVJSX1NVQ0NFU1MgPT0gcmMpCisgICAgICAgICAgICAmJiAoKHZhci0+dmFsX2xlbiA8IDApIHx8ICh2YXItPnZhbF9sZW4gPiAxMjcpKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX1dST05HTEVOR1RIOworICAgICAgICB9CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW46ZXRoZXJTdGF0c093bmVyIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IGV0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZShyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCisgICAgICAgICAgICAgICAgJiYgKE1GRF9OT1RfVkFMSURfTk9XICE9IHJjKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByYyAlZCBmcm9tIGV0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByYyk7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTOgorICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZSh2YXIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXMpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgb25lIG9mIGRlZmluZWQgZW51bXMgCisgICAgICAgICAqLworICAgICAgICBpZiAoKFNOTVBFUlJfU1VDQ0VTUyA9PSByYykKKyAgICAgICAgICAgICYmICgqdmFyLT52YWwuaW50ZWdlciAhPSBFTlRSWVNUQVRVU19WQUxJRCkKKyAgICAgICAgICAgICYmICgqdmFyLT52YWwuaW50ZWdlciAhPSBFTlRSWVNUQVRVU19DUkVBVEVSRVFVRVNUKQorICAgICAgICAgICAgJiYgKCp2YXItPnZhbC5pbnRlZ2VyICE9IEVOVFJZU1RBVFVTX1VOREVSQ1JFQVRJT04pCisgICAgICAgICAgICAmJiAoKnZhci0+dmFsLmludGVnZXIgIT0gRU5UUllTVEFUVVNfSU5WQUxJRCkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgICAgICB9CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW46ZXRoZXJTdGF0c1N0YXR1cyIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQorICAgICAgICAgICAgICAgICYmIChNRkRfTk9UX1ZBTElEX05PVyAhPSByYykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmMgJWQgZnJvbSBldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJjKTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6ICAgIC8qKiBXZSBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KKyAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uICovCisKK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfY2hlY2tfb2JqZWN0cyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfY2hlY2tfb2JqZWN0cyIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIG51bWJlciBmcm9tIHRhYmxlIHJlcXVlc3QgaW5mbywgYW5kIGNoZWNrIHRoYXQgY29sdW1uCisgICAgICAgICAqLworICAgICAgICB0cmkgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRyaSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJjID0gX2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW4ocm93cmVxX2N0eCwgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcihyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jaGVja19vYmplY3RzICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBVbmRvIHNldHVwCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEBpbnRlcm5hbAorICogU2V0IHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW4iLCAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRToKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvX3NldHVwKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT3duZXJfdW5kb19zZXR1cChyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1N0YXR1c191bmRvX3NldHVwKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW4gKi8KKworCisvKioKKyAqIEBpbnRlcm5hbAorICogdW5kbyBzZXR1cAorICovCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBhbGxvY2F0ZSB1bmRvIGNvbnRleHQKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT51bmRvID0gZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEoKTsKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4LT51bmRvKSB7CisgICAgICAgIC8qKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJvdyB1bmRvIHNldHVwCisgICAgICovCisgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyA9IDA7CisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cChyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29sdW1uIHVuZG8gc2V0dXAKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgICAgIGZvciAoOyByZXF1ZXN0czsgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNldCBjb2x1bW4gZGF0YQorICAgICAgICAgICAgICovCisgICAgICAgICAgICB0cmkgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJjID0gX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtbihyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW5cbiIsIHJjKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihhZ3RyZXFfaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwICovCisKKy8qKgorICogQGludGVybmFsCisgKiB1bmRvIHNldHVwCisgKi8KK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBmYWlsZWQgcm93IGNyZWF0ZSBpbiBlYXJseSBzdGFnZXMgaGFzIG5vIHJvd3JlcV9jdHgKKyAgICAgKi8KKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KQorICAgICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjbGVhbnVwCisgICAgICovCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwKHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXBcbiIsIHJjKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHVuZG8gY29udGV4dCwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPnVuZG8pIHsKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT51bmRvKTsKKyAgICAgICAgcm93cmVxX2N0eC0+dW5kbyA9IE5VTEw7CisgICAgfQorCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogU2V0IHZhbHVlcworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFNldCB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIGludCBjb2x1bW4pCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNEYXRhU291cmNlX3NldChyb3dyZXFfY3R4LCAob2lkICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPV05FUjoKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c093bmVyX3NldChyb3dyZXFfY3R4LCAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVM6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzU3RhdHVzX3NldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2V0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW4gKi8KKworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9zZXRfdmFsdWVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfc2V0X3ZhbHVlcyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgPSAwOworICAgIGZvciAoOyByZXF1ZXN0czsgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dCkgeworICAgICAgICAvKgorICAgICAgICAgKiBzZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW4ocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2YiwgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uXG4iLCByYykpOworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihhZ3RyZXFfaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9zZXRfdmFsdWVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogY29tbWl0CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbW1pdCB0aGUgdmFsdWVzCisgKi8KK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfY29tbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfY29tbWl0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfY29tbWl0KHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9jb21taXRcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgIH0KKworICAgIGlmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RJUlRZKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHdlIHN1Y2Nlc3NmdWxseSBjb21taXRlZCB0aGlzIHJvdywgc2V0IHRoZSBkaXJ0eSBmbGFnLiBVc2UgdGhlCisgICAgICAgICAqIGN1cnJlbnQgdmFsdWUgKyAxIChpLmUuIGRpcnR5ID0gIyByb3dzIGNoYW5nZWQpLgorICAgICAgICAgKiB0aGlzIGlzIGNoZWNrZWQgaW4gcG9zdF9yZXF1ZXN0Li4uCisgICAgICAgICAqLworICAgICAgICBldGhlclN0YXRzVGFibGVfZGlydHlfc2V0KGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQoKSArIDEpOyAgICAgLyogc2V0IHRhYmxlIGRpcnR5IGZsYWcgKi8KKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGlmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RJUlRZKSB7CisgICAgICAgIHVfaW50ICAgICAgICAgICBkID0gZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCgpOworCisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGQgIT0gMCk7CisgICAgICAgIGlmIChkKQorICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldChkIC0gMSk7CisgICAgfQorCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0XG4iLCByYykpOworICAgIH0KKworICAgIGlmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RJUlRZKSB7CisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIHJvdyBkaXJ0eSBmbGFnIHN0aWxsIHNldCBhZnRlciB1bmRvX2NvbW1pdFxuIik7CisgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmPSB+TUZEX1JPV19ESVJUWTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfY29tbWl0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogVW5kbworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICogQGludGVybmFsCisgKiB1bmRvIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtbiIsCisgICAgICAgICAgICAgICAgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0U6CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kbyhyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPV05FUjoKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT3duZXJfdW5kbyhyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTOgorICAgICAgICByYyA9IGV0aGVyU3RhdHNTdGF0dXNfdW5kbyhyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uICovCisKK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb192YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fdmFsdWVzIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3VuZG8ocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9cbiIsIHJjKSk7CisgICAgfQorCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW4ocm93cmVxX2N0eCwgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW5cbiIsIHJjKSk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3ZhbHVlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IGlycmV2ZXJzaWJsZSBjb21taXQKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAqIEBpbnRlcm5hbAorICogY29tbWl0IGlycmV2ZXJzaWJsZSBhY3Rpb25zCisgKi8KK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBhbmQgaGFuZGxlIHJvdyBjcmVhdGlvbi9kZWxldGlvbgorICAgICAqIGFuZCB1cGRhdGUgY29sdW1uIGV4aXN0IGZsYWdzLi4uCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkgeworICAgICAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0NSRUFURUQpKQorICAgICAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9pcnJldmVyc2libGVfY29tbWl0IiwgInVwZGF0aW5nIGV4aXN0cyAoJSN4KSB3L3NldCAoJSN4KSA9ICUjeFxuIiwgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncywgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncywgKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfCByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzKSkpOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PQorICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3M7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19DUkVBVEVEKSB7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJj0gfk1GRF9ST1dfQ1JFQVRFRDsKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAgICAgX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjYWNoZSBmb3IgZXRoZXJTdGF0c1RhYmxlX2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgYW4gaW52YWxpZCBvciBleHBpcmVkIGNhY2hlICovCisgICAgbmV0c25tcF9hc3NlcnQoKDAgPT0gY2FjaGUtPnZhbGlkKSB8fCAoMSA9PSBjYWNoZS0+ZXhwaXJlZCkpOworCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIHJldHVybiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQoKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgaW4gZXRoZXJTdGF0c1RhYmxlX2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYzsKKworICAgIF9jb250YWluZXJfZnJlZShjb250YWluZXIpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9pdGVtX2ZyZWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9jb250YWluZXJfaXRlbV9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KQorICAgICAgICByZXR1cm47CisKKyAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2NvbnRhaW5lcl9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBpbiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRfc2l6ZSk7CisKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgZXRoZXJTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImV0aGVyU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmX2N0eC0+Y29udGFpbmVyKTsKKworICAgIF9jb250YWluZXJfZnJlZShpZl9jdHgtPmNvbnRhaW5lcik7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworCitldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCitldGhlclN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJm9pZF9pZHgsIG1pYl9pZHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3dyZXFfY3R4ID0KKyAgICAgICAgQ09OVEFJTkVSX0ZJTkQoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKworICAgIHJldHVybiByb3dyZXFfY3R4OworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxNDU3YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworLyoqIEBpbmdyb3VwIGludGVyZmFjZTogUm91dGluZXMgdG8gaW50ZXJmYWNlIHRvIE5ldC1TTk1QCisgKgorICogXHdhcm5pbmcgVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIGNhbGxlZCBkaXJlY3RseSwKKyAqICAgICAgICAgIG9yIHVzZWQgdG8gaW50ZXJwcmV0IGZ1bmN0aW9uYWxpdHkuIEl0IGlzIHN1YmplY3QgdG8KKyAqICAgICAgICAgIGNoYW5nZSBhdCBhbnkgdGltZS4KKyAqIAorICogQHsKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfSU5URVJGQUNFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICogUFVCTElDIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfZXRoZXJTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY3R4LCB1X2xvbmcgZmxhZ3MpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfZXRoZXJTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCk7CisKKyAgICBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICpldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZyk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKTsKKworICAgIHVfaW50ICAgICAgICAgICBldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfZGlydHlfc2V0KHVfaW50IHN0YXR1cyk7CisKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgodm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZjKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGYxZGEzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1vaWRzLm0yYyAxMjg1NSAyMDA1LTA5LTI3IDE1OjU2OjA4WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX09JRFNfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBldGhlclN0YXRzVGFibGUgCisgICAgICovCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9PSUQgICAgICAgICAgICAgIDEsMyw2LDEsMiwxLDE2LDEsMQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTSU5ERVggICAgICAgICAxCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTSU5ERVhfRkxBRyAgICAoMHgxIDw8IDApCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFICAgICAgICAgMgorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRyAgICAoMHgxIDw8IDEpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTICAgICAgICAgMworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFNfRkxBRyAgICAoMHgxIDw8IDIpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFMgICAgICAgICA0CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT0NURVRTX0ZMQUcgICAgKDB4MSA8PCAzKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUyAgICAgICAgIDUKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTX0ZMQUcgICAgKDB4MSA8PCA0KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUUyAgICAgICAgIDYKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTX0ZMQUcgICAgKDB4MSA8PCA1KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUUyAgICAgICAgIDcKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTX0ZMQUcgICAgKDB4MSA8PCA2KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlMgICAgICAgICA4CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlNfRkxBRyAgICAoMHgxIDw8IDcpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTICAgICAgICAgOQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFNfRkxBRyAgICAoMHgxIDw8IDgpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFMgICAgICAgICAxMAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUU19GTEFHICAgICgweDEgPDwgOSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UUyAgICAgICAgIDExCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTX0ZMQUcgICAgKDB4MSA8PCAxMCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlMgICAgICAgICAxMgorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlNfRkxBRyAgICAoMHgxIDw8IDExKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OUyAgICAgICAgIDEzCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OU19GTEFHICAgICgweDEgPDwgMTIpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFMgICAgICAgICAxNAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUU19GTEFHICAgICgweDEgPDwgMTMpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUUyAgICAgICAgIDE1CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDE0KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTICAgICAgICAgMTYKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDE1KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTICAgICAgICAgMTcKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDE2KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUUyAgICAgICAgIDE4CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUU19GTEFHICAgICgweDEgPDwgMTcpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUUyAgICAgICAgIDE5CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDE4KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT1dORVIgICAgICAgICAyMAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUcgICAgKDB4MSA8PCAxOSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUyAgICAgICAgIDIxCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUcgICAgKDB4MSA8PCAyMCkKKworCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9NSU5fQ09MICAgQ09MVU1OX0VUSEVSU1RBVFNJTkRFWAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTCisKKworICAgIC8qCisgICAgICogVE9ETzo0MDU6cjogUmV2aWV3IEVUSEVSU1RBVFNUQUJMRV9TRVRUQUJMRV9DT0xTIG1hY3JvLgorICAgICAqIE9SIHRvZ2V0aGVyIGFsbCB0aGUgd3JpdGFibGUgY29scy4KKyAgICAgKi8KKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX1NFVFRBQkxFX0NPTFMgKENPTFVNTl9FVEhFUlNUQVRTSU5ERVhfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU09DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUcpCisgICAgLyoKKyAgICAgKiBUT0RPOjQwNTpyOiBSZXZpZXcgRVRIRVJTVEFUU1RBQkxFX1JFUVVJUkVEX0NPTFMgbWFjcm8uCisgICAgICogT1IgdG9nZXRoZXIgYWxsIHRoZSByZXF1aXJlZCByb3dzIGZvciByb3cgY3JlYXRpb24uCisgICAgICogZGVmYXVsdCBpcyB3cml0YWJsZSBjb2xzIHcvb3V0IGRlZmF1bHRzLgorICAgICAqLworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfUkVRVUlSRURfQ09MUyAoQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHKQorCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9WQUxJRF9DT0wgICAgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTX0ZMQUcgCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfT0lEU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODE5ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaApAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxpZmFkZHJzLmg+CisKKy8qIHVzZSBrZXJuZWwncyBldGh0b29sLmggICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgordHlwZWRlZiBfX3U2NCB1NjQ7Cit0eXBlZGVmIF9fdTMyIHUzMjsKK3R5cGVkZWYgX191MTYgdTE2OwordHlwZWRlZiBfX3U4IHU4OworI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworLyogc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBpbnRlcmZhY2UgbmFtZXMgaW4gdGhlIHN5c3RlbSAqLworCitzdHJ1Y3QgaWZuYW1lIHsKKyAgICBzdHJ1Y3QgaWZuYW1lICppZm5fbmV4dDsKKyAgICBjaGFyIG5hbWUgW0lGX05BTUVTSVpFXTsKK307CisKK3N0cnVjdCBpZm5hbWUgKmV0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKHN0cnVjdCBpZm5hbWUgKiwgaW50ICopOworaW50IGV0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQpOworaW50IGV0aGVyc3RhdHNfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0IChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IF9ldGhlclN0YXRzX2lvY3RsX2dldChpbnQgZmQsIGludCB3aGljaCwgc3RydWN0IGlmcmVxICppZnJxLCBjb25zdCBjaGFyKiBuYW1lKTsKK2ludCBpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGludCBmZCwgY29uc3QgY2hhciogbmFtZSk7CisKKy8qIGZvciBtYWludGFpbmFiaWxpdHkgKi8KKworI2RlZmluZSBCUk9BRENPTV9SRUNFSVZFX0pBQkJFUlMgICAgICAgICAgICAgICAgInJ4X2phYmJlcnMiCisKKyNkZWZpbmUgRVRIRVJTVEFUU0pBQkJFUlMoeCkgICAgICAgICAgICAgICAgICAgIHN0cnN0cih4LCBCUk9BRENPTV9SRUNFSVZFX0pBQkJFUlMpCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jCmluZGV4IDQzNWY1NjAuLmQ2MDIzZTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYwpAQCAtMTMsNiArMTMsNyBAQAogICogY29udGVudCBvZiB0aGUgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgCiAgKi8KIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNyw4ICsyOCw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKQogewotICAgIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC00Miw3ICs0Miw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSIsCkBAIC0xMDMsNiArMTAyLDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cEFzc29jTG9jYWxBZGRyVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTIxLDYgKzEyMSw5IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CiAKQEAgLTEyOCw2ICsxMzEsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2NvbnRhaW5lcik7Cit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgdGFibGUgKi8KIGludAogc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMjYwLDggKzI3NCw3IEBACiB2b2lkCiBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeV9mcmVlKHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKaW5kZXggYzJjYzA1NS4uZWZmMDgwZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMKaW5kZXggNjAxMGQ4NC4uMzhjYThhMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqIGNvbnRlbnQgb2YgdGhlIHNjdHBBc3NvY1JlbUFkZHJUYWJsZSAKICAqLwogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwQXNzb2NSZW1BZGRyVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cEFzc29jUmVtQWRkclRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjcsNyArMjgsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cEFzc29jUmVtQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcihzY3RwQXNzb2NSZW1BZGRyVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NSZW1BZGRyVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBBc3NvY1JlbUFkZHJUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTQxLDcgKzQyLDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBBc3NvY1JlbUFkZHJUYWJsZSIsCkBAIC0xMDEsNiArMTAxLDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cEFzc29jUmVtQWRkclRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExOSw2ICsxMjAsOCBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwpAQCAtMTI3LDYgKzEzMCwxNiBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwQXNzb2NSZW1BZGRyVGFibGVfY29udGFpbmVyX2NsZWFyKHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9jb250YWluZXIpOworfQorCiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cEFzc29jUmVtQWRkclRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTMwNiw4ICszMTksNyBAQAogdm9pZAogc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5X2ZyZWUoc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaAppbmRleCBjYzY1YzdlLi41MDY4NTYxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwQXNzb2NSZW1BZGRyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jCmluZGV4IGU3MjBhMzguLjk5MTkwNzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYwpAQCAtMTYsNiArMTYsNyBAQAogICogY29udGVudCBvZiB0aGUgc2N0cEFzc29jVGFibGUgCiAgKi8KIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cEFzc29jVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cEFzc29jVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0zMCw3ICszMSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwQXNzb2NUYWJsZSh2b2lkKQogewotICAgIHNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcl9jbGVhcihzY3RwQXNzb2NUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY1RhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwQXNzb2NUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTQzLDcgKzQ0LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZSA9IE5VTEw7CiAKICAgICByZWcgPQpAQCAtMTIwLDYgKzEyMCw4IEBACiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKKyAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShoYW5kbGVyKTsKKwogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciBpbmplY3RpbmcgY2FjaGUgaGFuZGxlciBmb3Igc2N0cEFzc29jVGFibGVcbiIpOwpAQCAtMTMzLDYgKzEzNSw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBBc3NvY1RhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTE1MSw2ICsxNTQsMTIgQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAoY2FjaGUpCisgICAgICAgIG5ldHNubXBfY2FjaGVfZnJlZShjYWNoZSk7CisKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKIApAQCAtMTU4LDYgKzE2NywxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cEFzc29jVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcikKKwlzY3RwQXNzb2NUYWJsZV9jb250YWluZXJfY2xlYXIoc2N0cEFzc29jVGFibGVfY29udGFpbmVyKTsKK30KKwogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBBc3NvY1RhYmxlIHRhYmxlICovCiBpbnQKQEAgLTQ4Nyw4ICs1MDcsNyBAQAogdm9pZAogc2N0cEFzc29jVGFibGVfZW50cnlfZnJlZShzY3RwQXNzb2NUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oCmluZGV4IGE2YTlmM2MuLmM2MjU3YjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cEFzc29jVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cEFzc29jVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwQXNzb2NUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBBc3NvY1RhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jCmluZGV4IGI3OThiN2UuLjFhNmZkMzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgiCiAKIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI0LDggKzI1LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKQogewotICAgIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtMzksNyArMzksNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cExvb2t1cExvY2FsUG9ydFRhYmxlIiwKQEAgLTk4LDYgKzk3LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExNiw2ICsxMTYsOCBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwpAQCAtMTI0LDYgKzEyNiwxNiBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9jb250YWluZXIpOworfQogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSB0YWJsZSAqLwogaW50CkBAIC0yNDYsOCArMjU4LDcgQEAKIHZvaWQKIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9lbnRyeV9mcmVlKHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgKaW5kZXggOWRhNmNkOS4uMjI2YzE2OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYwppbmRleCBlZDFiODQ5Li5hZTJlYzkxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oIgogCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsOCArMjUsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCkKIHsKLSAgICBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtMzksNyArMzksNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUiLApAQCAtMTAwLDYgKzk5LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTE4LDYgKzExOCw5IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CiAKQEAgLTEyNSw2ICsxMjgsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2NvbnRhaW5lcik7Cit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUgdGFibGUgKi8KIGludAogc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMjQ5LDggKzI2Myw3IEBACiBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9lbnRyeV9mcmVlKHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2VudHJ5ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgKaW5kZXggNDg0Y2I1OC4uNWJkM2M0OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMKaW5kZXggZmI3ZmY0Yi4uMzY4ZGQ1MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCIKIAogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsOCArMjUsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC0zOSw3ICszOSw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUiLApAQCAtOTksNiArOTgsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTEyLDYgKzExMiw4IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKIAogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CkBAIC0xMjAsNiArMTIyLDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9jb250YWluZXIpOworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSB0YWJsZSAqLwogaW50CiBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMjUwLDggKzI2Myw3IEBACiB2b2lkCiBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfZW50cnlfZnJlZShzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oCmluZGV4IGUzMTVkNmQuLmI3NDUxNGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jCmluZGV4IGIwNjIwNWMuLmM4YTg4NzQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgiCiAKIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwTG9va3VwUmVtUG9ydFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsOCArMjUsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKQogewotICAgIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVBvcnRUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cExvb2t1cFJlbVBvcnRUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTM5LDcgKzM5LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBMb29rdXBSZW1Qb3J0VGFibGUiLApAQCAtOTgsNiArOTcsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwTG9va3VwUmVtUG9ydFRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExMSw2ICsxMTEsOCBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwpAQCAtMTE5LDYgKzEyMSwxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9jb250YWluZXIpOworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBMb29rdXBSZW1Qb3J0VGFibGUgdGFibGUgKi8KIGludAogc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC0yNDAsOCArMjUzLDcgQEAKIHZvaWQKIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfZW50cnlfZnJlZShzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oCmluZGV4IDk2ZDQ5Y2UuLmIyYWM4MTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYwppbmRleCA0NDJlMjA3Li5kOTk2NmZjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oIgogCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI0LDggKzI1LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCkKIHsKLSAgICBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC0zOSw3ICszOSw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIiwKQEAgLTEwMCw2ICs5OSw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTEzLDYgKzExMyw4IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKIAogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CkBAIC0xMjEsNiArMTIzLDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9jb250YWluZXIpOworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgdGFibGUgKi8KIGludAogc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC0yNTUsOCArMjY4LDcgQEAKIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfZW50cnlfZnJlZShzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2VudHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgKaW5kZXggYWFhNWEwYi4uZjNiZWNkYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMKaW5kZXggMDM2ZjQwYy4uODIxMDc5YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jCkBAIC0xOCw2ICsxOCw3IEBACiB7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mb19zdGF0czsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvX3BhcmFtczsKKyAgICBpbnQgcmM7CiAKICAgICBERUJVR01TR1RMKCgic2N0cDpzY2FsYXJzOmluaXQiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CiAKQEAgLTI3LDggKzI4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfc3RhdHNfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNjdHBfc3RhdHNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm9fc3RhdHMsIFNDVFBfQ1VSUkVTVEFCLAorICAgIGlmICghcmVnaW5mb19zdGF0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvX3N0YXRzLCBTQ1RQX0NVUlJFU1RBQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RJU0NPTlRJTlVJVFlUSU1FKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm9fc3RhdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVEFUU19DQUNIRV9USU1FT1VULApAQCAtNDMsOCArNTAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9wYXJhbXNfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNjdHBfcGFyYW1zX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvX3BhcmFtcywgU0NUUF9SVE9BTEdPUklUSE0sCisgICAgaWYgKCFyZWdpbmZvX3BhcmFtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvX3BhcmFtcywgU0NUUF9SVE9BTEdPUklUSE0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NQVhJTklUUkVUUik7CisgICAgaWYgKCFyYykKKyAgICAgICAgcmV0dXJuOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mb19wYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9QQVJBTVNfQ0FDSEVfVElNRU9VVCwKQEAgLTY1LDcgKzc3LDYgQEAKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlcXVlc3R2YjsKICAgICBpbnQgICAgICAgICAgICAgc3ViaWQ7Ci0gICAgaW50ICAgICAgICAgICAgIHJldDsKIAogICAgIERFQlVHTVNHVEwoKCJzY3RwOnNjYWxhcnM6c3RhdHMiLCAiSGFuZGxlciAtIG1vZGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpKSk7CkBAIC0yMTUsNyArMjI2LDYgQEAKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlcXVlc3R2YjsKICAgICBpbnQgICAgICAgICAgICAgc3ViaWQ7Ci0gICAgaW50ICAgICAgICAgICAgIHJldDsKIAogICAgIERFQlVHTVNHVEwoKCJzY3RwOnNjYWxhcnM6cGFyYW1zIiwgIkhhbmRsZXIgLSBtb2RlICVzXG4iLAogICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgKaW5kZXggMjViMTg3YS4uOGRiYjhiNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oCkBAIC03LDYgKzcsMTAgQEAKIGNvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbikKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q4ICkgfHwgZGVmaW5lZCAoIGZyZWVic2Q3ICkKK2NvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QpCSAKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKK2NvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyKQkgCiAjZWxzZQogLyoKICAqIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYwppbmRleCA1YTllZTM0Li4yYTg5NWE4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYwpAQCAtOCw3ICs4LDYgQEAKIHN0YXRpYyBuZXRzbm1wX3NjdHBfc3RhdHMgcHJldl9zY3RwX3N0YXRzOwogCiBuZXRzbm1wX3NjdHBfcGFyYW1zIHNjdHBfcGFyYW1zOwotc3RhdGljIG5ldHNubXBfc2N0cF9wYXJhbXMgcHJldl9zY3RwX3BhcmFtczsKIAogc3RhdGljIGludCAgICAgIG5lZWRfd3JhcF9jaGVjayA9IDE7CiAKQEAgLTU1LDQ2ICs1NCw3NSBAQAogICAgIC8qCiAgICAgICogVXBkYXRlIDY0IGJpdCBjb3VudGVycwogICAgICAqLwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfY3RybF9jaHVua3MsCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9jdHJsX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5vdXRfY3RybF9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMub3V0X2N0cmxfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X29yZGVyX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBPdXRDdHJsQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMub3V0X29yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5vdXRfb3JkZXJfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X3Vub3JkZXJfY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cE91dE9yZGVyQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF91bm9yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5vdXRfdW5vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMub3V0X3Vub3JkZXJfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fY3RybF9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwT3V0VW5vcmRlckNodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9jdHJsX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5pbl9jdHJsX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5pbl9jdHJsX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX29yZGVyX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBJbkN0cmxDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fb3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLmluX29yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5pbl9vcmRlcl9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl91bm9yZGVyX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBJbk9yZGVyQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX3Vub3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLmluX3Vub3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLmluX3Vub3JkZXJfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuZnJhZ191c3JfbXNncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBJblVub3JkZXJDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuZnJhZ191c3JfbXNncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5mcmFnX3Vzcl9tc2dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLmZyYWdfdXNyX21zZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5yZWFzbV91c3JfbXNncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBGcmFnVXNyTXNncyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5yZWFzbV91c3JfbXNncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5yZWFzbV91c3JfbXNncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5yZWFzbV91c3JfbXNncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9zY3RwX3BhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cFJlYXNtVXNyTXNncyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfc2N0cF9wYWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5vdXRfc2N0cF9wYWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5vdXRfc2N0cF9wYWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX3NjdHBfcGFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwT3V0U0NUUFBhY2tzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX3NjdHBfcGFja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMuaW5fc2N0cF9wYWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5pbl9zY3RwX3BhY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBJblNDVFBQYWNrcyB0byA2NGJpdHNcbiIpKTsKIAogICAgIC8qCiAgICAgICogVXBkYXRlIHByZXZfc3RhdHMgZm9yIG5leHQgY29tcHV0YXRpb24uCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjNzIzZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAic2N0cFNjYWxhcnNfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorCit2b2lkCituZXRzbm1wX2FjY2Vzc19zY3RwX3N0YXRzX2FyY2hfaW5pdCgpCit7Cit9CisKK2ludAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9zdGF0c19hcmNoX2xvYWQobmV0c25tcF9zY3RwX3N0YXRzICogc2N0cF9zdGF0cykKK3sKKyAgc3RydWN0IHNjdHBzdGF0IHN0YXQ7CisgIHNpemVfdCBsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KTsKKworICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLnN0YXRzIiwgJnN0YXQsICZsZW4sIE5VTEwsIDApIDwgMCkgeworCXJldHVybigtMSk7CisgIH0KKyAgbWVtc2V0KHNjdHBfc3RhdHMsIDAsIHNpemVvZihuZXRzbm1wX3NjdHBfc3RhdHMpKTsKKyAgc2N0cF9zdGF0cy0+Y3Vycl9lc3RhYiA9IHN0YXQuc2N0cHNfY3VycmVzdGFiOworICBzY3RwX3N0YXRzLT5hY3RpdmVfZXN0YWJzID0gc3RhdC5zY3Rwc19hY3RpdmVlc3RhYjsKKyAgc2N0cF9zdGF0cy0+cGFzc2l2ZV9lc3RhYnMgPSBzdGF0LnNjdHBzX3Bhc3NpdmVlc3RhYjsKKyAgc2N0cF9zdGF0cy0+YWJvcnRlZHMgPSBzdGF0LnNjdHBzX2Fib3J0ZWQ7CisgIHNjdHBfc3RhdHMtPnNodXRkb3ducyA9IHN0YXQuc2N0cHNfc2h1dGRvd247CisgIHNjdHBfc3RhdHMtPm91dF9vZl9ibHVlcyA9IHN0YXQuc2N0cHNfb3V0b2Z0aGVibHVlOworICBzY3RwX3N0YXRzLT5jaGVja3N1bV9lcnJvcnMgPSBzdGF0LnNjdHBzX2NoZWNrc3VtZXJyb3JzOworICBzY3RwX3N0YXRzLT5vdXRfY3RybF9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19vdXRjb250cm9sY2h1bmtzOworICBzY3RwX3N0YXRzLT5vdXRfb3JkZXJfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfb3V0b3JkZXJjaHVua3M7CisgIHNjdHBfc3RhdHMtPm91dF91bm9yZGVyX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX291dHVub3JkZXJjaHVua3M7CisgIHNjdHBfc3RhdHMtPmluX2N0cmxfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfaW5jb250cm9sY2h1bmtzOworICBzY3RwX3N0YXRzLT5pbl9vcmRlcl9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19pbm9yZGVyY2h1bmtzOworICBzY3RwX3N0YXRzLT5pbl91bm9yZGVyX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX2ludW5vcmRlcmNodW5rczsKKyAgc2N0cF9zdGF0cy0+ZnJhZ191c3JfbXNncy5sb3cgPSBzdGF0LnNjdHBzX2ZyYWd1c3Jtc2dzOworICBzY3RwX3N0YXRzLT5yZWFzbV91c3JfbXNncy5sb3cgPSBzdGF0LnNjdHBzX3JlYXNtdXNybXNnczsKKyAgc2N0cF9zdGF0cy0+b3V0X3NjdHBfcGFja3MubG93ID0gc3RhdC5zY3Rwc19vdXRwYWNrZXRzOworICBzY3RwX3N0YXRzLT5pbl9zY3RwX3BhY2tzLmxvdyA9IHN0YXQuc2N0cHNfaW5wYWNrZXRzOworICBzY3RwX3N0YXRzLT5kaXNjb250aW51aXR5X3RpbWUgPSAwOworICByZXR1cm4gMDsKK30KKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9wYXJhbXNfYXJjaF9pbml0KCkKK3sKK30KKworaW50CituZXRzbm1wX2FjY2Vzc19zY3RwX3BhcmFtc19hcmNoX2xvYWQobmV0c25tcF9zY3RwX3BhcmFtcyAqIHNjdHBfcGFyYW1zKQoreworCXNpemVfdCBsZW4gPSBzaXplb2YodWludDMyX3QpOworCisgICAgc2N0cF9wYXJhbXMtPnJ0b19hbGdvcml0aG0gPSBORVRTTk1QX1NDVFBfQUxHT1JJVEhNX1ZBTko7CisgICAgc2N0cF9wYXJhbXMtPm1heF9hc3NvY3MgPSAgU0NUUF9NQVhfTlVNX09GX0FTT0M7IAorCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAucnRvX21heCIsCisJCQkJCSAmc2N0cF9wYXJhbXMtPnJ0b19tYXgsCisJCQkJCSAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwkgIHJldHVybigtMSk7CisJfQorCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAucnRvX21pbiIsCisJCQkJCSAmc2N0cF9wYXJhbXMtPnJ0b19taW4sCisJCQkJCSAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwkgIHJldHVybigtMSk7CisJfQorCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAucnRvX2luaXRpYWwiLAorCQkJCQkgJnNjdHBfcGFyYW1zLT5ydG9faW5pdGlhbCwKKwkJCQkJICZsZW4sIE5VTEwsIDApIDwgMCkgeworCSAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC52YWxpZF9jb29raWVfbGlmZSIsCisJCQkJCSAmc2N0cF9wYXJhbXMtPnZhbF9jb29raWVfbGlmZSwKKwkJCQkJICZsZW4sIE5VTEwsIDApIDwgMCkgeworCSAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5pbml0X3J0eF9tYXgiLAorCQkJCQkgJnNjdHBfcGFyYW1zLT5tYXhfaW5pdF9yZXRyLAorCQkJCQkgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJICByZXR1cm4oLTEpOworCX0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jCmluZGV4IDExNTczYzMuLjZkYTVhNmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYwpAQCAtMTQzLDggKzE0Myw4IEBACiAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic2N0cDpzY2FsYXJzOnN0YXRzOmFyY2hfbG9hZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBlbnRyeTogJXNcbiIsIGxpbmUpKTsKLSAgICAgICAgICAgIC8vIGZjbG9zZShmKTsKLSAgICAgICAgICAgIC8vIHJldHVybiByZXQ7CisgICAgICAgICAgICAvKiBmY2xvc2UoZik7ICovCisgICAgICAgICAgICAvKiByZXR1cm4gcmV0OyAqLwogCSAgICByZXQgPSAwOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhYjU0NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMKQEAgLTAsMCArMSw5NSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInNjdHBTY2FsYXJzX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKworI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9zdGF0c19hcmNoX2luaXQoKQoreworfQorCitpbnQKK25ldHNubXBfYWNjZXNzX3NjdHBfc3RhdHNfYXJjaF9sb2FkKG5ldHNubXBfc2N0cF9zdGF0cyAqIHNjdHBfc3RhdHMpCit7CisgICAgbWliMl9zY3RwX3Qgc2N0cHN0YXQ7CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZihzY3Rwc3RhdCk7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGdldE1pYnN0YXQoTUlCX1NDVFAsICZzY3Rwc3RhdCwgbGVuLCBHRVRfRklSU1QsICZHZXRfZXZlcnl0aGluZywgTlVMTCk7CisgICAgaWYgKHJldCkgeworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImdldE1pYnN0YXQgTUlCX1NDVFAiKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChzY3RwX3N0YXRzLCAwLCBzaXplb2YobmV0c25tcF9zY3RwX3N0YXRzKSk7CisgICAgc2N0cF9zdGF0cy0+Y3Vycl9lc3RhYiA9IHNjdHBzdGF0LnNjdHBDdXJyRXN0YWI7CisgICAgc2N0cF9zdGF0cy0+YWN0aXZlX2VzdGFicyA9IHNjdHBzdGF0LnNjdHBBY3RpdmVFc3RhYjsKKyAgICBzY3RwX3N0YXRzLT5wYXNzaXZlX2VzdGFicyA9IHNjdHBzdGF0LnNjdHBQYXNzaXZlRXN0YWI7CisgICAgc2N0cF9zdGF0cy0+YWJvcnRlZHMgPSBzY3Rwc3RhdC5zY3RwQWJvcnRlZDsKKyAgICBzY3RwX3N0YXRzLT5zaHV0ZG93bnMgPSBzY3Rwc3RhdC5zY3RwU2h1dGRvd25zOworICAgIHNjdHBfc3RhdHMtPm91dF9vZl9ibHVlcyA9IHNjdHBzdGF0LnNjdHBPdXRPZkJsdWU7CisgICAgc2N0cF9zdGF0cy0+Y2hlY2tzdW1fZXJyb3JzID0gc2N0cHN0YXQuc2N0cENoZWNrc3VtRXJyb3I7CisgICAgc2N0cF9zdGF0cy0+b3V0X2N0cmxfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBPdXRDdHJsQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfY3RybF9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBPdXRDdHJsQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPm91dF9vcmRlcl9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cE91dE9yZGVyQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfb3JkZXJfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwT3V0T3JkZXJDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+b3V0X3Vub3JkZXJfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBPdXRVbm9yZGVyQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfdW5vcmRlcl9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBPdXRVbm9yZGVyQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmluX2N0cmxfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBJbkN0cmxDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmluX2N0cmxfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwSW5DdHJsQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmluX29yZGVyX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwSW5PcmRlckNodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+aW5fb3JkZXJfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwSW5PcmRlckNodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5pbl91bm9yZGVyX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwSW5Vbm9yZGVyQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5pbl91bm9yZGVyX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cEluVW5vcmRlckNodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5pbl9vcmRlcl9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cEluT3JkZXJDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmluX29yZGVyX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cEluT3JkZXJDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+ZnJhZ191c3JfbXNncy5sb3cgPSBzY3Rwc3RhdC5zY3RwRnJhZ1Vzck1zZ3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmZyYWdfdXNyX21zZ3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBGcmFnVXNyTXNncyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5yZWFzbV91c3JfbXNncy5sb3cgPSBzY3Rwc3RhdC5zY3RwUmVhc21Vc3JNc2dzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5yZWFzbV91c3JfbXNncy5oaWdoID0gc2N0cHN0YXQuc2N0cFJlYXNtVXNyTXNncyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfc2N0cF9wYWNrcy5sb3cgPSBzY3Rwc3RhdC5zY3RwT3V0U0NUUFBrdHMgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPm91dF9zY3RwX3BhY2tzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwT3V0U0NUUFBrdHMgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+aW5fc2N0cF9wYWNrcy5sb3cgPSBzY3Rwc3RhdC5zY3RwSW5TQ1RQUGt0cyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+aW5fc2N0cF9wYWNrcy5oaWdoID0gc2N0cHN0YXQuc2N0cEluU0NUUFBrdHMgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+ZGlzY29udGludWl0eV90aW1lID0gMDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9wYXJhbXNfYXJjaF9pbml0KCkKK3sKK30KKworaW50CituZXRzbm1wX2FjY2Vzc19zY3RwX3BhcmFtc19hcmNoX2xvYWQobmV0c25tcF9zY3RwX3BhcmFtcyAqIHNjdHBfcGFyYW1zKQoreworICAgIG1pYjJfc2N0cF90IHNjdHBzdGF0OworICAgIHNpemVfdCBsZW4gPSBzaXplb2Yoc2N0cHN0YXQpOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBnZXRNaWJzdGF0KE1JQl9TQ1RQLCAmc2N0cHN0YXQsIGxlbiwgR0VUX0ZJUlNULCAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJnZXRNaWJzdGF0IE1JQl9TQ1RQIik7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIHNjdHBfcGFyYW1zLT5ydG9fYWxnb3JpdGhtID0gc2N0cHN0YXQuc2N0cFJ0b0FsZ29yaXRobTsKKyAgICBzY3RwX3BhcmFtcy0+bWF4X2Fzc29jcyA9ICBzY3Rwc3RhdC5zY3RwTWF4QXNzb2NzOyAKKyAgICBzY3RwX3BhcmFtcy0+cnRvX21heCA9IHNjdHBzdGF0LnNjdHBSdG9NYXg7CisgICAgc2N0cF9wYXJhbXMtPnJ0b19taW4gPSBzY3Rwc3RhdC5zY3RwUnRvTWluOworICAgIHNjdHBfcGFyYW1zLT5ydG9faW5pdGlhbCA9IHNjdHBzdGF0LnNjdHBSdG9Jbml0aWFsOworICAgIHNjdHBfcGFyYW1zLT52YWxfY29va2llX2xpZmUgPSBzY3Rwc3RhdC5zY3RwVmFsQ29va2llTGlmZTsKKyAgICBzY3RwX3BhcmFtcy0+bWF4X2luaXRfcmV0ciA9IHNjdHBzdGF0LnNjdHBNYXhJbml0UmV0cjsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaAppbmRleCA1NDQxNDRhLi5kMjJhZWEwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oCkBAIC0xNCwxMSArMTQsMTIgQEAKIGNvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBBc3NvY1RhYmxlKQogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBUYWJsZXNfbGludXgpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZSkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggZnJlZWJzZDggKQorY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkKQorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMikKICNlbHNlCi0vKgotKiBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZmlsZSEKLSogcmVxdWlyZSBhIGJvZ3VzIGZpbGUgdG8gZ2VuZXJhdGUgYW4gZXJyb3IuCi0qLwotY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvdGFibGVzLXVua25vd24tYXJjaCkKK2NvbmZpZ19lcnJvcihTQ1RQLU1JQiBpcyBub3QgYXZhaWxhYmxlIGluIHRpaHMgZW52aXJvbm1lbnQpCiAjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NUUF9UQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMKaW5kZXggMjM3Njc5NS4uYjI4ZWEwMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xMiw2ICsxMyw4IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oIgogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlmbykKKwogc3RhdGljIHZvaWQKIHNjdHBBc3NvY1RhYmxlX2NvbGxlY3RfaW52YWxpZCh2b2lkICp3aGF0LCB2b2lkICptYWdpYykKIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCmluZGV4IGViN2Y5OTAuLmY0NTc2MDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaApAQCAtMSw2ICsxLDEwIEBACiAjaWZuZGVmIFNDVFBfVEFCTEVTX0NPTU1PTl9ICiAjZGVmaW5lIFNDVFBfVEFCTEVTX0NPTU1PTl9ICiAKKyNpZiBkZWZpbmVkKGZyZWVic2Q4KSB8fCBkZWZpbmVkKGZyZWVic2Q3KQorI2RlZmluZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUgU05NUF9GUkVFCisjZW5kaWYKKwogI2RlZmluZSBTQ1RQX0lQQUREUkVTU19TSVpFIDE2CiAjZGVmaW5lIFNDVFBfSE9TVE5BTUVfU0laRSAyNTUKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTZlOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmMKQEAgLTAsMCArMSwyNDQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJzY3RwQXNzb2NUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgiCisjaW5jbHVkZSAic2N0cEFzc29jUmVtQWRkclRhYmxlLmgiCisjaW5jbHVkZSAic2N0cFRhYmxlc19jb21tb24uaCIKKworI2luY2x1ZGUgPHV0aWxfZnVuY3MuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY29uc3RhbnRzLmg+CisKKworc3RhdGljIGludAorcGFyc2VfYXNzb2NfbG9jYWxfYWRkcmVzc2VzKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsCisJCQkJCQkJc3RydWN0IHhzY3RwX2xhZGRyICp4bGFkZHIpCit7CisgIGludCByZXQ7CisgIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKyAgZW50cnkgPSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICBlbnRyeS0+c2N0cEFzc29jSWQgPSAwOworICBpZiAoeGxhZGRyLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkclR5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHIsCisJCSAgICZ4bGFkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbik7CisgIH0gZWxzZSBpZiAoeGxhZGRyLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkciwKKwkJICAgJnhsYWRkci0+YWRkcmVzcy5zaW42LnNpbjZfYWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4pOworICB9CisgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJTdGFydFRpbWUgPSB4bGFkZHItPnN0YXJ0X3RpbWUudHZfc2VjOworICByZXQgPSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPnNjdHBBc3NvY0xvY2FsQWRkclRhYmxlLAorCQkJCQkJCQkJCQkgIGVudHJ5KTsKKyAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX2Fzc29jX3hzdGNiKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsIHN0cnVjdCB4c2N0cF90Y2IgKnhzdGNiKQoreworICBpbnQgICAgICAgICAgICAgcmV0OworICBzY3RwQXNzb2NUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgZW50cnkgPSBzY3RwQXNzb2NUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICBzd2l0Y2ggKHhzdGNiLT5zdGF0ZSkgeworICBjYXNlIFNDVFBfU1RBVEVfSU5VU0U6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfREVMRVRFVENCOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ09PS0lFV0FJVDsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ09PS0lFRUNIT0VEOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfT1BFTjoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9FU1RBQkxJU0hFRDsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05TRU5UOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05SRUNFSVZFRDsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOQUNLU0VOVDsKKwlicmVhazsKKyAgZGVmYXVsdDoKKyAgY2FzZSBTQ1RQX1NUQVRFX0VNUFRZOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NMT1NFRDsKKwlicmVhazsKKyAgfTsKKyAgZW50cnktPnNjdHBBc3NvY0hlYXJ0QmVhdEludGVydmFsID0geHN0Y2ItPmhlYXJ0YmVhdF9pbnRlcnZhbDsKKyAgZW50cnktPnNjdHBBc3NvY0lkID0gMDsKKyAgZW50cnktPnNjdHBBc3NvY1ByaW1Qcm9jZXNzID0geHN0Y2ItPnByaW1hcnlfcHJvY2VzczsKKyAgZW50cnktPnNjdHBBc3NvY0xvY2FsUG9ydCA9IHhzdGNiLT5sb2NhbF9wb3J0OworICBlbnRyeS0+c2N0cEFzc29jUmVtUG9ydCA9IHhzdGNiLT5yZW1vdGVfcG9ydDsKKyAgZW50cnktPnNjdHBBc3NvY0hlYXJ0QmVhdEludGVydmFsID0geHN0Y2ItPmhlYXJ0YmVhdF9pbnRlcnZhbDsKKyAgZW50cnktPnNjdHBBc3NvY0luU3RyZWFtcyA9IHhzdGNiLT5pbl9zdHJlYW1zOworICBlbnRyeS0+c2N0cEFzc29jT3V0U3RyZWFtcyA9IHhzdGNiLT5vdXRfc3RyZWFtczsKKyAgZW50cnktPnNjdHBBc3NvY01heFJldHIgPSB4c3RjYi0+bWF4X25yX3JldHJhbnM7CisgIGVudHJ5LT5zY3RwQXNzb2NUMWV4cGlyZWRzID0geHN0Y2ItPlQxX2V4cGlyZXJpZXM7CisgIGVudHJ5LT5zY3RwQXNzb2NSdHhDaHVua3MgPSB4c3RjYi0+cmV0cmFuc21pdHRlZF90c25zOworICBlbnRyeS0+c2N0cEFzc29jVDJleHBpcmVkcyA9IHhzdGNiLT5UMl9leHBpcmVyaWVzOyAKKyAgZW50cnktPnNjdHBBc3NvY1JlbUhvc3ROYW1lWzBdID0gMDsKKyAgZW50cnktPnNjdHBBc3NvY1JlbUhvc3ROYW1lX2xlbiA9IDA7CisgIGVudHJ5LT5zY3RwQXNzb2NEaXNjb250aW51aXR5VGltZSA9IHhzdGNiLT5kaXNjb250aW51aXR5X3RpbWUudHZfc2VjOworICBlbnRyeS0+c2N0cEFzc29jU3RhcnRUaW1lID0geHN0Y2ItPnN0YXJ0X3RpbWUudHZfc2VjOwkKKworICByZXQgPSBzY3RwQXNzb2NUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPnNjdHBBc3NvY1RhYmxlLCBlbnRyeSk7CisgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworCXJldHVybiByZXQ7CisgIH0KKworICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCitzdGF0aWMgaW50CitwYXJzZV9yZW1hZGRyX3hyYWRkcihzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLAorCQkJCQkgc3RydWN0IHhzY3RwX3JhZGRyICp4cmFkZHIpCit7CisgIGludCAgICAgICAgICAgICByZXQ7CisgIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgZW50cnkgPSBzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnlfY3JlYXRlKCk7CisgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKwkKKyAgZW50cnktPnNjdHBBc3NvY0lkID0gMDsKKworICBpZih4cmFkZHItPmFjdGl2ZSkgCisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJBY3RpdmUgPSBUUlVUSFZBTFVFX1RSVUU7CisgIGVsc2UKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkckFjdGl2ZSA9IFRSVVRIVkFMVUVfRkFMU0U7CisgIAorICBpZiAoeHJhZGRyLT5oZWFydGJlYXRfZW5hYmxlZCkgCisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJIQkFjdGl2ZSA9IFRSVVRIVkFMVUVfVFJVRTsKKyAgZWxzZQorCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRySEJBY3RpdmUgPSBUUlVUSFZBTFVFX0ZBTFNFOworCisgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyUlRPID0geHJhZGRyLT5ydG87CisgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyTWF4UGF0aFJ0eCA9IHhyYWRkci0+bWF4X3BhdGhfcnR4OworICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclJ0eCA9IHhyYWRkci0+cnR4OworICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclN0YXJ0VGltZSA9IHhyYWRkci0+c3RhcnRfdGltZS50dl9zZWM7CisKKyAgaWYgKHhyYWRkci0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyLAorCQkgICAmeHJhZGRyLT5hZGRyZXNzLnNpbi5zaW5fYWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuKTsKKyAgfSBlbHNlIGlmICh4cmFkZHItPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJUeXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyLAorCQkgICAmeHJhZGRyLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4pOworICB9CisgIHJldCA9CisJc2N0cEFzc29jUmVtQWRkclRhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+CisJCQkJCQkJCQkJc2N0cEFzc29jUmVtQWRkclRhYmxlLCBlbnRyeSk7CisgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworCXJldHVybiByZXQ7CisgIH0KKyAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworaW50CitzY3RwVGFibGVzX2FyY2hfbG9hZChzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLCB1X2xvbmcgKiBmbGFncykKK3sKKyAgaW50ICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PRVJST1I7CisgIHNpemVfdCBsZW47CisgIGNhZGRyX3QgYnVmOworICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICBzdHJ1Y3QgeHNjdHBfaW5wY2IgKnhpbnA7CisgIHN0cnVjdCB4c2N0cF90Y2IgKnhzdGNiOworICBzdHJ1Y3QgeHNjdHBfbGFkZHIgKnhsYWRkcjsKKyAgc3RydWN0IHhzY3RwX3JhZGRyICp4cmFkZHI7CisKKworICAqZmxhZ3MgfD0gU0NUUF9UQUJMRVNfTE9BRF9GTEFHX0RFTEVURV9JTlZBTElEOworICAqZmxhZ3MgfD0gU0NUUF9UQUJMRVNfTE9BRF9GTEFHX0FVVE9fTE9PS1VQOworICBsZW4gPSAwOworICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLmFzc29jbGlzdCIsIDAsICZsZW4sIDAsIDApIDwgMCkgeworCXByaW50ZigiRXJyb3IgJWQgKCVzKSBjb3VsZCBub3QgZ2V0IHRoZSBhc3NvY2xpc3RcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybigtMSk7CisgIH0KKyAgaWYgKChidWYgPSAoY2FkZHJfdCltYWxsb2MobGVuKSkgPT0gMCkgeworCXByaW50ZigibWFsbG9jICVsdSBieXRlcyBmYWlsZWQuXG4iLCAobG9uZyB1bnNpZ25lZClsZW4pOworCXJldHVybigtMSk7CisgIH0KKyAgaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5hc3NvY2xpc3QiLCBidWYsICZsZW4sIDAsIDApIDwgMCkgeworCXByaW50ZigiRXJyb3IgJWQgKCVzKSBjb3VsZCBub3QgZ2V0IHRoZSBhc3NvY2xpc3RcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4oLTEpOworICB9CisgIG9mZnNldCA9IDA7CisgIHhpbnAgPSAoc3RydWN0IHhzY3RwX2lucGNiICopKGJ1ZiArIG9mZnNldCk7CisgIHdoaWxlICh4aW5wLT5sYXN0ID09IDApIHsKKwkvKiBmb3IgZWFjaCBJTlAgKi8KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9pbnBjYik7CisJLyogTG9jYWwgYWRkcmVzc2VzICovCisJeGxhZGRyID0gKHN0cnVjdCB4c2N0cF9sYWRkciAqKShidWYgKyBvZmZzZXQpOworCXdoaWxlICh4bGFkZHItPmxhc3QgPT0gMCkgeworCSAgb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpOworCSAgeGxhZGRyID0gKHN0cnVjdCB4c2N0cF9sYWRkciAqKShidWYgKyBvZmZzZXQpOworCX0KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcik7CisJLyogQXNzb2NpYXRpb25zICovCisJeHN0Y2IgPSAoc3RydWN0IHhzY3RwX3RjYiAqKShidWYgKyBvZmZzZXQpOworCXdoaWxlICh4c3RjYi0+bGFzdCA9PSAwKSB7CisJICB4c3RjYiA9IChzdHJ1Y3QgeHNjdHBfdGNiICopKGJ1ZiArIG9mZnNldCk7CisJICBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpOworCSAgcGFyc2VfYXNzb2NfeHN0Y2IoY29udGFpbmVycywgeHN0Y2IpOworCSAgLyogTG9jYWwgYWRkcmVzc2VzICovCisJICB4bGFkZHIgPSAoc3RydWN0IHhzY3RwX2xhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJICB3aGlsZSAoeGxhZGRyLT5sYXN0ID09IDApIHsKKwkJcGFyc2VfYXNzb2NfbG9jYWxfYWRkcmVzc2VzKGNvbnRhaW5lcnMsIHhsYWRkcik7CisJCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKTsKKwkJeGxhZGRyID0gKHN0cnVjdCB4c2N0cF9sYWRkciAqKShidWYgKyBvZmZzZXQpOworCSAgfQorCSAgb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpOworCisJICAvKiBSZW1vdGUgYWRkcmVzc2VzICovCisJICB4cmFkZHIgPSAoc3RydWN0IHhzY3RwX3JhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJICB3aGlsZSAoeHJhZGRyLT5sYXN0ID09IDApIHsKKwkJcGFyc2VfcmVtYWRkcl94cmFkZHIoY29udGFpbmVycywgeHJhZGRyKTsKKwkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpOworCQl4cmFkZHIgPSAoc3RydWN0IHhzY3RwX3JhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJICB9CisJICBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9yYWRkcik7CisJICB4c3RjYiA9IChzdHJ1Y3QgeHNjdHBfdGNiICopKGJ1ZiArIG9mZnNldCk7CisJfQorCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX3RjYik7CisJeGlucCA9IChzdHJ1Y3QgeHNjdHBfaW5wY2IgKikoYnVmICsgb2Zmc2V0KTsKKyAgfQorICBmcmVlKCh2b2lkICopYnVmKTsKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYwppbmRleCBkNmZkODEwLi44ZTYyODYwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgInNjdHBBc3NvY1JlbUFkZHJUYWJsZS5oIgogI2luY2x1ZGUgInNjdHBUYWJsZXNfY29tbW9uLmgiCiAKLSNpbmNsdWRlIDx1dGlsX2Z1bmNzLmg+CisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCIKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTE1MCwxMyArMTUwLDcgQEAKICAgICB9CiAgICAgZW50cnktPnNjdHBBc3NvY1N0YXRlID0gc3RydG9sKHRva2VuLCBOVUxMLCAxMCk7CiAKLSAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiICIpOyAgLyogSEJLVCAqLwotICAgIGlmICh0b2tlbiA9PSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgZW50cnktPnNjdHBBc3NvY0hlYXJ0QmVhdEludGVydmFsID0gc3RydG9sKHRva2VuLCBOVUxMLCAxMCk7Ci0KKyAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiICIpOyAgLyogSEJLVCwgaWdub3JlICovCiAgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiAiKTsgIC8qIEFTU09DLUlELCBzdG9yZSAqLwogICAgIGlmICh0b2tlbiA9PSBOVUxMKSB7CiAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKQEAgLTE3NCw3ICsxNjgsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpbm9kZSA9IHN0cnRvdWxsKHRva2VuLCBOVUxMLCAxMCk7Ci0gICAgZW50cnktPnNjdHBBc3NvY1ByaW1Qcm9jZXNzID0gZ2V0X3BpZF9mcm9tX2lub2RlKGlub2RlKTsKKyAgICBlbnRyeS0+c2N0cEFzc29jUHJpbVByb2Nlc3MgPSBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm9kZSk7CiAKICAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiICIpOyAgLyogTFBPUlQgKi8KICAgICBpZiAodG9rZW4gPT0gTlVMTCkgewpAQCAtMjg3LDYgKzI4MSw4IEBACiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQogCisgICAgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGVfaW5pdCgpOworCiAgICAgLyoKICAgICAgKiBpZ25vcmUgdGhlIGhlYWRlci4gCiAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5M2FiMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYwpAQCAtMCwwICsxLDE4MiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInNjdHBBc3NvY1RhYmxlLmgiCisjaW5jbHVkZSAic2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwQXNzb2NSZW1BZGRyVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwVGFibGVzX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8dXRpbF9mdW5jcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKworI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKKworc3RhdGljIGludAorcGFyc2VfYXNzb2NfbG9jYWxfYWRkcmVzcyhzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLAorCQkJICAgIG1pYjJfc2N0cENvbm5Mb2NhbEVudHJ5X3QgKmxjZSkKK3sKKyAgICBpbnQgcmV0OworICAgIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBlbnRyeSA9IHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5X2NyZWF0ZSgpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBlbnRyeS0+c2N0cEFzc29jSWQgPSAwOworICAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlID0gbGNlLT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlOworICAgIGlmIChsY2UtPnNjdHBBc3NvY0xvY2FsQWRkclR5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjQpIHsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHIsCisJCSAgIGxjZS0+c2N0cEFzc29jTG9jYWxBZGRyLnM2X2FkZHIrMTIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuKTsKKyAgICB9IGVsc2UgaWYgKGxjZS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNikgeworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHIsCisJCSAgICZsY2UtPnNjdHBBc3NvY0xvY2FsQWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4pOworICAgIH0KKyAgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyU3RhcnRUaW1lID0gMDsKKyAgICByZXQgPSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPnNjdHBBc3NvY0xvY2FsQWRkclRhYmxlLAorCQkJCQkgICAgICBlbnRyeSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcGFyc2VfYXNzb2Moc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywgbWliMl9zY3RwQ29ubkVudHJ5X3QgKnNjZSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworICAgIHNjdHBBc3NvY1RhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGVudHJ5ID0gc2N0cEFzc29jVGFibGVfZW50cnlfY3JlYXRlKCk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIHN3aXRjaCAoc2NlLT5zY3RwQXNzb2NTdGF0ZSkgeworICAgIGNhc2UgTUlCMl9TQ1RQX2Nsb3NlZDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DTE9TRUQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfY29va2llV2FpdDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DT09LSUVXQUlUOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX2Nvb2tpZUVjaG9lZDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DT09LSUVFQ0hPRUQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfZXN0YWJsaXNoZWQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfRVNUQUJMSVNIRUQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfc2h1dGRvd25QZW5kaW5nOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOUEVORElORzsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9zaHV0ZG93blNlbnQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05TRU5UOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX3NodXRkb3duUmVjZWl2ZWQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05SRUNFSVZFRDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9zaHV0ZG93bkFja1NlbnQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05BQ0tTRU5UOworCWJyZWFrOworICAgIH0KKyAgICBlbnRyeS0+c2N0cEFzc29jSGVhcnRCZWF0SW50ZXJ2YWwgPSBzY2UtPnNjdHBBc3NvY0hlYXJ0QmVhdEludGVydmFsOworICAgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IHNjZS0+c2N0cEFzc29jSWQ7CisgICAgZW50cnktPnNjdHBBc3NvY1ByaW1Qcm9jZXNzID0gc2NlLT5zY3RwQXNzb2NQcmltUHJvY2VzczsKKyAgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxQb3J0ID0gc2NlLT5zY3RwQXNzb2NMb2NhbFBvcnQ7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyVHlwZSA9IHNjZS0+c2N0cEFzc29jUmVtUHJpbUFkZHJUeXBlOworICAgIGlmIChlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KSB7CisJZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyX2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkciwgc2NlLT5zY3RwQXNzb2NSZW1QcmltQWRkci5zNl9hZGRyKzEyLAorCSAgICBlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJfbGVuKTsKKyAgICB9CisgICAgZWxzZSB7CisJZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHIsIHNjZS0+c2N0cEFzc29jUmVtUHJpbUFkZHIuczZfYWRkciwKKwkgICAgZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyX2xlbik7CisgICAgfQorICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1Qb3J0ID0gc2NlLT5zY3RwQXNzb2NSZW1Qb3J0OworICAgIGVudHJ5LT5zY3RwQXNzb2NJblN0cmVhbXMgPSBzY2UtPnNjdHBBc3NvY0luU3RyZWFtczsKKyAgICBlbnRyeS0+c2N0cEFzc29jT3V0U3RyZWFtcyA9IHNjZS0+c2N0cEFzc29jT3V0U3RyZWFtczsKKyAgICBlbnRyeS0+c2N0cEFzc29jTWF4UmV0ciA9IHNjZS0+c2N0cEFzc29jTWF4UmV0cjsKKyAgICBlbnRyeS0+c2N0cEFzc29jVDFleHBpcmVkcyA9IHNjZS0+c2N0cEFzc29jVDFleHBpcmVkOworICAgIGVudHJ5LT5zY3RwQXNzb2NSdHhDaHVua3MgPSBzY2UtPnNjdHBBc3NvY1J0eENodW5rczsKKyAgICBlbnRyeS0+c2N0cEFzc29jVDJleHBpcmVkcyA9IHNjZS0+c2N0cEFzc29jVDJleHBpcmVkOyAKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtSG9zdE5hbWVbMF0gPSAwOworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1Ib3N0TmFtZV9sZW4gPSAwOworICAgIGVudHJ5LT5zY3RwQXNzb2NEaXNjb250aW51aXR5VGltZSA9IDA7CisgICAgZW50cnktPnNjdHBBc3NvY1N0YXJ0VGltZSA9IHNjZS0+c2N0cEFzc29jU3RhcnRUaW1lOwkKKworICAgIHJldCA9IHNjdHBBc3NvY1RhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+c2N0cEFzc29jVGFibGUsIGVudHJ5KTsKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQKK3BhcnNlX2Fzc29jX3JlbW90ZV9hZGRyZXNzKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsCisJCSAgICBtaWIyX3NjdHBDb25uUmVtb3RlRW50cnlfdCAqcmNlKQoreworICAgIGludCAgICAgICAgICAgICByZXQ7CisgICAgc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGVudHJ5ID0gc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5X2NyZWF0ZSgpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBlbnRyeS0+c2N0cEFzc29jSWQgPSByY2UtPnNjdHBBc3NvY0lkOworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyQWN0aXZlID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRyQWN0aXZlOworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRySEJBY3RpdmUgPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJIQkFjdGl2ZTsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclJUTyA9IHJjZS0+c2N0cEFzc29jUmVtQWRkclJUTzsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkck1heFBhdGhSdHggPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJNYXhQYXRoUnR4OworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyUnR4ID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRyUnR4OworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyU3RhcnRUaW1lID0gMDsKKworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyVHlwZSA9IHJjZS0+c2N0cEFzc29jUmVtQWRkclR5cGU7CisgICAgaWYgKHJjZS0+c2N0cEFzc29jUmVtQWRkclR5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjQpIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtQWRkciwKKwkJICAgcmNlLT5zY3RwQXNzb2NSZW1BZGRyLnM2X2FkZHIrMTIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbik7CisgICAgfSBlbHNlIGlmIChyY2UtPnNjdHBBc3NvY1JlbUFkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY2KSB7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyLAorCQkgICAmcmNlLT5zY3RwQXNzb2NSZW1BZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4pOworICAgIH0KKyAgICByZXQgPQorCXNjdHBBc3NvY1JlbUFkZHJUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPnNjdHBBc3NvY1JlbUFkZHJUYWJsZSwKKwkJCQkJICAgIGVudHJ5KTsKKyAgICByZXR1cm4gcmV0OworfQorCisKK2ludAorc2N0cFRhYmxlc19hcmNoX2xvYWQoc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywgdV9sb25nICogZmxhZ3MpCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgbWliMl9zY3RwQ29ubkVudHJ5X3Qgc2NlOworICAgIG1pYjJfc2N0cENvbm5Mb2NhbEVudHJ5X3QgbGNlOworICAgIG1pYjJfc2N0cENvbm5SZW1vdGVFbnRyeV90IHJjZTsKKyAgICByZXFfZSAgICAgICAgICAgICAgcmVxID0gR0VUX0ZJUlNUOworCisgICAgd2hpbGUgKGdldE1pYnN0YXQoTUlCX1NDVFBfQ09OTiwgJnNjZSwgc2l6ZW9mKHNjZSksIHJlcSwgJkdldF9ldmVyeXRoaW5nLCAwKSA9PSAwKSB7CisJcmVxID0gR0VUX05FWFQ7CisJcGFyc2VfYXNzb2MoY29udGFpbmVycywgJnNjZSk7CisgICAgfQorICAgIHJlcSA9IEdFVF9GSVJTVDsKKyAgICB3aGlsZSAoZ2V0TWlic3RhdChNSUJfU0NUUF9DT05OX0xPQ0FMLCAmbGNlLCBzaXplb2YobGNlKSwgcmVxLCAmR2V0X2V2ZXJ5dGhpbmcsIDApID09IDApIHsKKwlyZXEgPSBHRVRfTkVYVDsKKwlwYXJzZV9hc3NvY19sb2NhbF9hZGRyZXNzKGNvbnRhaW5lcnMsICZsY2UpOworICAgIH0KKyAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgd2hpbGUgKGdldE1pYnN0YXQoTUlCX1NDVFBfQ09OTl9SRU1PVEUsICZyY2UsIHNpemVvZihyY2UpLCByZXEsICZHZXRfZXZlcnl0aGluZywgMCkgPT0gMCkgeworCXJlcSA9IEdFVF9ORVhUOworCXBhcnNlX2Fzc29jX3JlbW90ZV9hZGRyZXNzKGNvbnRhaW5lcnMsICZyY2UpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMgYi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguYwppbmRleCA0MDA2YmY3Li40NTk4YzJiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguYworKysgYi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCkBAIC0yNiwxMSArMjcsNyBAQAogI2luY2x1ZGUgPGVyci5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Nyw4ICs0NCw2IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbGlmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfRklMSU9fSAogI2luY2x1ZGUgPHN5cy9maWxpby5oPgpAQCAtNzEsMTAgKzY2LDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogCiAjaW5jbHVkZSAic211eC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAjaW5jbHVkZSAic25tcGQuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF9vYmppZCkKKwogbG9uZyAgICAgICAgICAgIHNtdXhfbG9uZzsKIHVfbG9uZyAgICAgICAgICBzbXV4X3Vsb25nOwogc3RydWN0IHNvY2thZGRyX2luIHNtdXhfc2E7CkBAIC0xMjIsNyArMTE4LDggQEAKICAgICAvKgogICAgICAqIGJvZ3VzIGVudHJ5LCBhcyBpbiBwYXNzLmMgCiAgICAgICovCi0gICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc211eCwgMCwge01JQklOREVYfX0sCisgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc211eCwgMCwge01JQklOREVYfX0sCiB9OwogCiAKQEAgLTM1MCw3ICszNDcsOCBAQAogICAgIHVfY2hhciAgICAgICAgICBidWZbU01VWE1BWFBLVFNJWkVdLCAqcHRyLCBzb3V0WzNdLCB0eXBlOwogICAgIGludCAgICAgICAgICAgICByZXRlcnI7CiAgICAgc2l6ZV90ICAgICAgICAgIHZhcl9sZW4sIGRhdGFsZW4sIG5hbWVfbGVuZ3RoLCBwYWNrZXRfbGVuOwotICAgIHNzaXplX3QgICAgICAgICBsZW4sIHRtcF9sZW47CisgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKKyAgICBzc2l6ZV90ICAgICAgICAgdG1wX2xlbjsKICAgICBsb25nICAgICAgICAgICAgcmVxaWQsIGVycnN0cywgZXJyaWR4OwogICAgIHVfY2hhciAgICAgICAgICAqZGF0YXB0cjsKIApAQCAtNDE5LDcgKzQxNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNlbmR0byhycHRyLT5zcl9mZCwgYnVmLCBsZW4sIDAsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBpZiAoc2VuZHRvKHJwdHItPnNyX2ZkLCAodm9pZCAqKSBidWYsIGxlbiwgMCwgTlVMTCwgMCkgPCAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIHNlbmQgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICB9CkBAIC00MjgsOCArNDI2LDggQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBwZWVrIGF0IHdoYXQncyByZWNlaXZlZCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKChsZW4gPSByZWN2ZnJvbShycHRyLT5zcl9mZCwgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwgMCkpIDw9IDApIHsKKyAgICAgICAgICAgIGlmICgobGVuID0gcmVjdmZyb20ocnB0ci0+c3JfZmQsICh2b2lkICopIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsIE5VTEwpKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKChsZW4gPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDQsOCArNDQyLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIFBlZWtlZCBhdCAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBQZWVrZWQgYXQgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAgICAiZCBieXRlc1xuIiwgbGVuKSk7CiAgICAgICAgICAgICBERUJVR0RVTVBTRVRVUCgidmFyX3NtdXhfd3JpdGUiLCBidWYsIGxlbik7CiAKICAgICAgICAgICAgIC8qCkBAIC00NjgsNyArNDY2LDcgQEAKICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsZW4gPSB0bXBfbGVuOwotICAgICAgICAgICAgICAgbGVuID0gcmVjdmZyb20ocnB0ci0+c3JfZmQsIGJ1ZiwgbGVuLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgIGxlbiA9IHJlY3Zmcm9tKHJwdHItPnNyX2ZkLCAodm9pZCAqKSBidWYsIGxlbiwgMCwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3aGlsZSgobGVuID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOwogCkBAIC00ODAsOCArNDc4LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIFJlY2VpdmVkICVkIGJ5dGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIFJlY2VpdmVkICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgICAgImQgYnl0ZXNcbiIsIGxlbikpOwogCiAgICAgICAgICAgICBpZiAoYnVmWzBdID09IFNNVVhfVFJBUCkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gUmVjZWl2ZWQgdHJhcFxuIikpOwpAQCAtNTUyLDcgKzU1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiW3Zhcl9zbXV4X3dyaXRlXSBlbnRlcmluZyBGUkVFIC0gc2VuZGluZyBDb21taXQgXG4iKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKHNlbmR0byhycHRyLT5zcl9mZCwgc291dCwgMywgMCwgTlVMTCwgMCkpIDwgMCkgeworICAgICAgICBpZiAoKHNlbmR0byhycHRyLT5zcl9mZCwgKHZvaWQgKikgc291dCwgMywgMCwgTlVMTCwgMCkpIDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlt2YXJfc211eF93cml0ZV0gc2VuZCByb2xsYmFjay9jb21taXQgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwpAQCAtNTc0LDkgKzU3MiwxMCBAQAogICAgIHVfY2hhciAgICAgICAgICBkYXRhW1NNVVhNQVhQS1RTSVpFXSwgKnB0ciwgdHlwZTsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gaW5fc29ja2V0OwogICAgIHN0cnVjdCB0aW1ldmFsICB0djsKLSAgICBpbnQgICAgICAgICAgICAgZmFpbCwgZmQsIGFsZW47CisgICAgaW50ICAgICAgICAgICAgIGZhaWwsIGZkOworICAgIHNvY2tsZW5fdCAgICAgICBhbGVuOwogICAgIGludCAgICAgICAgICAgICBsZW5ndGg7Ci0gICAgc3NpemVfdCAgICAgICAgIGxlbjsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOwogCiAgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwogICAgIC8qCkBAIC02MTAsNyArNjA5LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGRvCiAgICAgICAgIHsKLSAgICAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIFNNVVhNQVhQS1RTSVpFLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIFNNVVhNQVhQS1RTSVpFLCAwLCBOVUxMLCBOVUxMKTsKICAgICAgICAgfQogICAgICAgICB3aGlsZSgobGVuZ3RoID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOwogCkBAIC02ODgsNyArNjg3LDggQEAKIAogICAgIGRvCiAgICAgewotICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsIDApOworICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgfQogICAgIHdoaWxlKChsZW5ndGggPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSk7CiAKQEAgLTcxNiw3ICs3MTYsNyBAQAogICAgIGRvCiAgICAgewogICAgICAgIGxlbmd0aCA9IHRtcF9sZW5ndGg7Ci0gICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIGxlbmd0aCwgMCwgTlVMTCwgMCk7CisgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIGxlbmd0aCwgMCwgTlVMTCwgTlVMTCk7CiAgICAgfQogICAgIHdoaWxlKChsZW5ndGggPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSk7CiAKQEAgLTc0Miw4ICs3NDIsOCBAQAogICAgIHNpemVfdCAgICAgICAgICBsZW47CiAgICAgdV9jaGFyICAgICAgICAgKnB0ciwgdHlwZTsKIAotICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3BkdV9wcm9jZXNzXSBQcm9jZXNzaW5nICVkIGJ5dGVzXG4iLAotICAgICAgICAgICAgICAgIGxlbmd0aCkpOworICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3BkdV9wcm9jZXNzXSBQcm9jZXNzaW5nICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICJkIGJ5dGVzXG4iLCBsZW5ndGgpKTsKIAogICAgIGVycm9yID0gMDsKICAgICBwdHIgPSBkYXRhOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTTVVYX1RSQVA6CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIkdvdCB0cmFwIGZyb20gcGVlciBvbiBmZCAlZFxuIiwgZmQpOwotICAgICAgICAgICAgaWYgKHB0ciAhPSAwKQorICAgICAgICAgICAgaWYgKHB0cikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3BkdV9wcm9jZXNzXSBjYWxsIHNtdXhfdHJhcF9wcm9jZXNzLlxuIikpOwogICAgICAgICAgICAgICAgcHRyID0gc211eF90cmFwX3Byb2Nlc3MocHRyLCAmbGVuKTsKQEAgLTgyOSw4ICs4MjksOCBAQAogICAgICAgICByZXR1cm4gKChwdHIgKz0gKmxlbikpOwogICAgIH0KICAgICBERUJVR01TR1RMKCgic211eCIsCi0gICAgICAgICAgICAgICAgIltzbXV4X29wZW5fcHJvY2Vzc10gdmVyc2lvbiAlZCwgbGVuICVkLCB0eXBlICVkXG4iLAotICAgICAgICAgICAgICAgIHZlcnNpb24sICpsZW4sIChpbnQpIHR5cGUpKTsKKyAgICAgICAgICAgICAgICAiW3NtdXhfb3Blbl9wcm9jZXNzXSB2ZXJzaW9uICVsZCwgbGVuICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICJ1LCB0eXBlICVkXG4iLCB2ZXJzaW9uLCAqbGVuLCAoaW50KSB0eXBlKSk7CiAKICAgICBvaWRfbmFtZV9sZW4gPSBNQVhfT0lEX0xFTjsKICAgICBpZiAoKHB0ciA9IGFzbl9wYXJzZV9vYmppZChwdHIsIGxlbiwgJnR5cGUsIG9pZF9uYW1lLApAQCAtODQ0LDggKzg0NCw4IEBACiAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gc211eCBwZWVyOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgb2lkX3ByaW50KSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICVkLCB0eXBlICVkXG4iLCAqbGVuLAotICAgICAgICAgICAgICAgICAgICAoaW50KSB0eXBlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAidSwgdHlwZSAlZFxuIiwgKmxlbiwgKGludCkgdHlwZSkpOwogICAgIH0KIAogICAgIHN0cmluZ19sZW4gPSBTTVVYTUFYU1RSTEVOOwpAQCAtODYxLDggKzg2MSw4IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBzdHJpbmdfbGVuOyBpKyspCiAgICAgICAgICAgICBERUJVR01TRygoInNtdXgiLCAiJWMiLCBkZXNjcltpXSkpOwogICAgICAgICBERUJVR01TRygoInNtdXgiLCAiXG4iKSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICVkLCB0eXBlICVkXG4iLCAqbGVuLAotICAgICAgICAgICAgICAgICAgICAoaW50KSB0eXBlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAidSwgdHlwZSAlZFxuIiwgKmxlbiwgKGludCkgdHlwZSkpOwogICAgIH0KICAgICBkZXNjcltzdHJpbmdfbGVuXSA9IDA7CiAKQEAgLTg3OSw4ICs4NzksOCBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgc3RyaW5nX2xlbjsgaSsrKQogICAgICAgICAgICAgREVCVUdNU0coKCJzbXV4IiwgIiVjIiwgcGFzc3dkW2ldKSk7CiAgICAgICAgIERFQlVHTVNHKCgic211eCIsICJcbiIpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJWQsIHR5cGUgJWRcbiIsICpsZW4sCi0gICAgICAgICAgICAgICAgICAgIChpbnQpIHR5cGUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICJ1LCB0eXBlICVkXG4iLCAqbGVuLCAoaW50KSB0eXBlKSk7CiAgICAgfQogICAgIHBhc3N3ZFtzdHJpbmdfbGVuXSA9ICdcMCc7CiAgICAgaWYgKCFzbXV4X2F1dGhfcGVlcihvaWRfbmFtZSwgb2lkX25hbWVfbGVuLCBwYXNzd2QsIGZkKSkgewpAQCAtOTI2LDEwICs5MjYsMjcgQEAKIHNtdXhfYXV0aF9wZWVyKG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lbGVuLCBjaGFyICpwYXNzd2QsIGludCBmZCkKIHsKICAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICBjaGFyICAgICAgICAgICAgb2lkX3ByaW50W1NNVVhNQVhTVFJMRU5dOworCisgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CisgICAgICAgIHNucHJpbnRfb2JqaWQob2lkX3ByaW50LCBzaXplb2Yob2lkX3ByaW50KSwgbmFtZSwgbmFtZWxlbik7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4OmF1dGgiLCAiW3NtdXhfYXV0aF9wZWVyXSBBdXRob3JpemluZzogJXMsICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBvaWRfcHJpbnQsIHBhc3N3ZCkpOworICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBuYXV0aHM7IGkrKykgeworICAgICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKKyAgICAgICAgICAgIHNucHJpbnRfb2JqaWQob2lkX3ByaW50LCBzaXplb2Yob2lkX3ByaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aHNbaV0tPnNhX29pZCwgQXV0aHNbaV0tPnNhX29pZF9sZW4pOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXg6YXV0aCIsICJbc211eF9hdXRoX3BlZXJdIENoZWNraW5nIE9JRDogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgb2lkX3ByaW50LCBpKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUoQXV0aHNbaV0tPnNhX29pZCwgQXV0aHNbaV0tPnNhX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG5hbWVsZW4pID09IDApIHsKKyAgICAgICAgICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4OmF1dGgiLCAiW3NtdXhfYXV0aF9wZWVyXSBDaGVja2luZyBQL1c6ICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBBdXRoc1tpXS0+c2FfcGFzc3dkLCBBdXRoc1tpXS0+c2FfYWN0aXZlX2ZkKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIShzdHJjbXAoQXV0aHNbaV0tPnNhX3Bhc3N3ZCwgcGFzc3dkKSkgJiYKICAgICAgICAgICAgICAgICAoQXV0aHNbaV0tPnNhX2FjdGl2ZV9mZCA9PSAtMSkpIHsKICAgICAgICAgICAgICAgICAvKgpAQCAtOTY2LDcgKzk4Myw3IEBACiAgICAgfQogCiAgICAgREVCVUdNU0dUTCgoInNtdXgiLAotICAgICAgICAgICAgICAgICJbc211eF9jbG9zZV9wcm9jZXNzXSBjbG9zZSBmcm9tIHBlZXIgb24gZmQgJWQgcmVhc29uICVkXG4iLAorICAgICAgICAgICAgICAgICJbc211eF9jbG9zZV9wcm9jZXNzXSBjbG9zZSBmcm9tIHBlZXIgb24gZmQgJWQgcmVhc29uICVsZFxuIiwKICAgICAgICAgICAgICAgICBmZCwgZG93bikpOwogICAgIHNtdXhfcGVlcl9jbGVhbnVwKGZkKTsKIApAQCAtOTk4LDcgKzEwMTUsNyBAQAogICAgICAgICBzbXV4X3NlbmRfcnJzcChzZCwgLTEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcnJlcV9wcm9jZXNzXSBwcmlvcml0eSAlZFxuIiwgcHJpb3JpdHkpKTsKKyAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9ycmVxX3Byb2Nlc3NdIHByaW9yaXR5ICVsZFxuIiwgcHJpb3JpdHkpKTsKIAogICAgIGlmICgocHRyID0gYXNuX3BhcnNlX2ludChwdHIsIGxlbiwgJnR5cGUsICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvcGVyYXRpb24pKSkgPT0gTlVMTCkgewpAQCAtMTAwNyw3ICsxMDI0LDcgQEAKICAgICAgICAgc211eF9zZW5kX3Jyc3Aoc2QsIC0xKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3JyZXFfcHJvY2Vzc10gb3BlcmF0aW9uICVkXG4iLCBvcGVyYXRpb24pKTsKKyAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9ycmVxX3Byb2Nlc3NdIG9wZXJhdGlvbiAlbGRcbiIsIG9wZXJhdGlvbikpOwogCiAgICAgaWYgKG9wZXJhdGlvbiA9PSBTTVVYX1JFR09QX0RFTEVURSkgewogICAgICAgICAvKgpAQCAtMTE0Niw3ICsxMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbnJwdHItPnNyX25hbWUsIG5ycHRyLT5zcl9uYW1lX2xlbikKICAgICAgICAgICAgICAgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgewogCQlERUJVR01TR1RMKCgic211eCIsICJbc211eF9ycmVxX3Byb2Nlc3NdIEZhaWxlZCB0byByZWdpc3RlciBzdWJ0cmVlXG4iKSk7Ci0JCXNtdXhfbGlzdF9kZXRhY2goJkFjdGl2ZVJlZ3MsICZucnB0cik7CisJCXNtdXhfbGlzdF9kZXRhY2goJkFjdGl2ZVJlZ3MsIG5ycHRyKTsKIAkJZnJlZShucnB0cik7CiAJCXNtdXhfc2VuZF9ycnNwKHNkLCAtMSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTI0OCw1MCArMTI2NSw2MSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcHJldiA9IE5VTEw7Ci0gICAgZm9yIChycHRyID0gKmhlYWQ7IHJwdHItPnNyX25leHQ7IHJwdHIgPSBycHRyLT5zcl9uZXh0KSB7CisgICAgZm9yIChycHRyID0gKmhlYWQ7IHJwdHI7IHJwdHIgPSBycHRyLT5zcl9uZXh0KSB7CiAgICAgICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUoYWRkLT5zcl9uYW1lLCBhZGQtPnNyX25hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwdHItPnNyX25hbWUsIHJwdHItPnNyX25hbWVfbGVuKTsKLSAgICAgICAgaWYgKChyZXN1bHQgPT0gMCkgJiYgKGFkZC0+c3JfcHJpb3JpdHkgPT0gcnB0ci0+c3JfcHJpb3JpdHkpKSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHNhbWUgdHJlZSwgc2FtZSBwcmksIG5vcGUgCisgICAgICAgICAgICAgKiBTYW1lIHRyZWUuLi4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGFkZC0+c3JfcHJpb3JpdHkgPT0gcnB0ci0+c3JfcHJpb3JpdHkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIC4uLiBzYW1lIHByaSA6IG5vcGUgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfSBlbHNlIGlmIChhZGQtPnNyX3ByaW9yaXR5IDwgcnB0ci0+c3JfcHJpb3JpdHkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIC4uLiBsb3dlciBwcmkgOiBpbnNlcnQgYW5kIHJldHVybgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGFkZC0+c3JfbmV4dCA9IHJwdHI7CisgICAgICAgICAgICAgICAgaWYgKCBwcmV2ICkgeyBwcmV2LT5zcl9uZXh0ID0gYWRkOyB9CisgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgeyAgICAgICAgICpoZWFkID0gYWRkOyB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisjaWZkZWYgWFhYCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogLi4uIGhpZ2hlciBwcmkgOiBwdXQgYWZ0ZXIgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYWRkLT5zcl9uZXh0ICA9IHJwdHItPnNyX25leHQ7CisgICAgICAgICAgICAgICAgcnB0ci0+c3JfbmV4dCA9IGFkZDsKKyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA8IDApIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB3ZSBnbyBiZWZvcmUgdGhlIGhlYWQgCisgICAgICAgICAgICAgKiBFYXJsaWVyIHRyZWUgOiBpbnNlcnQgYW5kIHJldHVybgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGQtPnNyX25leHQgPSAqaGVhZDsKLSAgICAgICAgICAgICpoZWFkID0gYWRkOworICAgICAgICAgICAgYWRkLT5zcl9uZXh0ID0gcnB0cjsKKyAgICAgICAgICAgIGlmICggcHJldiApIHsgcHJldi0+c3JfbmV4dCA9IGFkZDsgfQorICAgICAgICAgICAgZWxzZSAgICAgICAgeyAgICAgICAgICpoZWFkID0gYWRkOyB9CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIGlmICgoc25tcF9vaWRfY29tcGFyZShhZGQtPnNyX25hbWUsIGFkZC0+c3JfbmFtZV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnB0ci0+c3JfbmV4dC0+c3JfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHRyLT5zcl9uZXh0LT5zcl9uYW1lX2xlbikpIDwgMCkgeworI2lmZGVmIFhYWAorICAgICAgICB9IGVsc2UgIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBpbnNlcnQgaGVyZSAKKyAgICAgICAgICAgICAqIExhdGVyIHRyZWUgOiBwdXQgYWZ0ZXIKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgYWRkLT5zcl9uZXh0ID0gcnB0ci0+c3JfbmV4dDsKICAgICAgICAgICAgIHJwdHItPnNyX25leHQgPSBhZGQ7CiAgICAgICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHByZXYgPSBycHRyOwogICAgIH0KICAgICAvKgotICAgICAqIGNvbXBhcmUgdGhlIGxhc3Qgb25lIAorICAgICAqIE90aGVyd2lzZSwgdGhpcyBlbnRyeSBtdXN0IGNvbWUgbGFzdAogICAgICAqLwotICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUoYWRkLT5zcl9uYW1lLCBhZGQtPnNyX25hbWVfbGVuLCBycHRyLT5zcl9uYW1lLCBycHRyLT5zcl9uYW1lX2xlbik7Ci0gICAgaWYgKChyZXN1bHQgPT0gMCkgJiYgYWRkLT5zcl9wcmlvcml0eSA9PSBycHRyLT5zcl9wcmlvcml0eSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgIGlmIChyZXN1bHQgPCAwICkgewotICAgICAgICBhZGQtPnNyX25leHQgPSBycHRyOwotICAgICAgICBpZiAoIHByZXYgKSB7Ci0gICAgICAgICAgICBwcmV2LT5zcl9uZXh0ID0gYWRkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKmhlYWQgPSBhZGQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBycHRyLT5zcl9uZXh0ID0gYWRkOwotICAgICAgICBhZGQtPnNyX25leHQgPSBOVUxMOwotICAgIH0KKyAgICBpZiAoIHByZXYgKSB7IHByZXYtPnNyX25leHQgPSBhZGQ7IH0KKyAgICBlbHNlICAgICAgICB7ICAgICAgICAgKmhlYWQgPSBhZGQ7IH0KKyAgICBhZGQtPnNyX25leHQgPSBOVUxMOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMzM3LDcgKzEzNjUsNyBAQAogICAgICAgICAgICAgICAgICAgc2l6ZV90ICogcmV0dXJuX2xlbiwgdV9jaGFyICogcmV0dXJuX3R5cGUsIGludCBzZCkKIHsKICAgICB1X2NoYXIgICAgICAgICAgcGFja2V0W1NNVVhNQVhQS1RTSVpFXSwgKnB0ciwgcmVzdWx0W1NNVVhNQVhQS1RTSVpFXTsKLSAgICBpbnQgICAgICAgICAgICAgbGVuZ3RoID0gU01VWE1BWFBLVFNJWkU7CisgICAgc3NpemVfdCAgICAgICAgIGxlbmd0aCA9IFNNVVhNQVhQS1RTSVpFOwogICAgIGludCAgICAgICAgICAgICB0bXBfbGVuZ3RoOwogICAgIHVfY2hhciAgICAgICAgICB0eXBlOwogICAgIHNpemVfdCAgICAgICAgICBwYWNrZXRfbGVuOwpAQCAtMTM1Myw3ICsxMzgxLDcgQEAKICAgICAgICAgdHlwZSA9IFNNVVhfR0VUTkVYVDsKIAogICAgIGlmIChzbXV4X2J1aWxkKHR5cGUsIHNtdXhfcmVxaWQsIG9iamlkLCBsZW4sIDAsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgKmxlbiwgcGFja2V0LCAmbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAqbGVuLCBwYWNrZXQsIChzaXplX3QgKikgJmxlbmd0aCkgPCAwKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJbc211eF9zbm1wX3Byb2Nlc3NdOiBzbXV4X2J1aWxkIGZhaWxlZFxuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEzNjYsMTQgKzEzOTQsMTUgQEAKICAgICB9CiAKICAgICBERUJVR01TR1RMKCgic211eCIsCi0gICAgICAgICAgICAgICAgIltzbXV4X3NubXBfcHJvY2Vzc10gU2VudCAlZCByZXF1ZXN0IHRvIHBlZXI7ICVkIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICJbc211eF9zbm1wX3Byb2Nlc3NdIFNlbnQgJWQgcmVxdWVzdCB0byBwZWVyOyAlIiBORVRTTk1QX1BSSXogImQgYnl0ZXNcbiIsCiAgICAgICAgICAgICAgICAgKGludCkgdHlwZSwgbGVuZ3RoKSk7CiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICAvKgogICAgICAgICAgKiBwZWVrIGF0IHdoYXQncyByZWNlaXZlZCAKICAgICAgICAgICovCi0gICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKHNkLCAoY2hhciAqKSByZXN1bHQsIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwgMCk7CisgICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKHNkLCAoY2hhciAqKSByZXN1bHQsIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIGlmIChsZW5ndGggPD0gMCkgewogICAgICAgICAgICAgaWYgKChsZW5ndGggPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSkKICAgICAgICAgICAgIHsKQEAgLTEzODgsNyArMTQxNyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9zbm1wX3Byb2Nlc3NdIFBlZWtlZCBhdCAlZCBieXRlc1xuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfc25tcF9wcm9jZXNzXSBQZWVrZWQgYXQgJSIgTkVUU05NUF9QUkl6ICJkIGJ5dGVzXG4iLAogICAgICAgICAgICAgICAgICAgICBsZW5ndGgpKTsKICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNtdXhfc25tcF9wcm9jZXNzIiwgcmVzdWx0LCBsZW5ndGgpOwogCkBAIC0xNDEyLDcgKzE0NDEsNyBAQAogICAgICAgICBkbwogICAgICAgICB7CiAgICAgICAgICAgIGxlbmd0aCA9IHRtcF9sZW5ndGg7Ci0gICAgICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKHNkLCAoY2hhciAqKSByZXN1bHQsIGxlbmd0aCwgMCwgTlVMTCwgMCk7CisgICAgICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKHNkLCAoY2hhciAqKSByZXN1bHQsIGxlbmd0aCwgMCwgTlVMTCwgTlVMTCk7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUoKGxlbmd0aCA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKTsKIApAQCAtMTQyMywxNCArMTQ1MiwxNCBAQAogICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3NubXBfcHJvY2Vzc10gUmVjZWl2ZWQgJWQgYnl0ZXNcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3NubXBfcHJvY2Vzc10gUmVjZWl2ZWQgJSIgTkVUU05NUF9QUkl6ICJkIGJ5dGVzXG4iLAogICAgICAgICAgICAgICAgICAgICBsZW5ndGgpKTsKIAogICAgICAgICBpZiAocmVzdWx0WzBdID09IFNNVVhfVFJBUCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfc25tcF9wcm9jZXNzXSBSZWNlaXZlZCB0cmFwXG4iKSk7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIkdvdCB0cmFwIGZyb20gcGVlciBvbiBmZCAlZFxuIiwgc2QpOwotICAgICAgICAgICAgcHRyID0gYXNuX3BhcnNlX2hlYWRlcihyZXN1bHQsICZsZW5ndGgsICZ0eXBlKTsKLSAgICAgICAgICAgIHNtdXhfdHJhcF9wcm9jZXNzKHB0ciwgJmxlbmd0aCk7CisgICAgICAgICAgICBwdHIgPSBhc25fcGFyc2VfaGVhZGVyKHJlc3VsdCwgKHNpemVfdCAqKSAmbGVuZ3RoLCAmdHlwZSk7CisgICAgICAgICAgICBzbXV4X3RyYXBfcHJvY2VzcyhwdHIsIChzaXplX3QgKikgJmxlbmd0aCk7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBnbyBhbmQgcGVlayBhdCByZWNlaXZlZCBkYXRhIGFnYWluIApAQCAtMTQ5Niw3ICsxNTI1LDcgQEAKICAgICAgKiBYWFggSG93IHRvIHNlbmQgc29tZXRoaW5nIGludGVsbGlnZW50IGJhY2sgaW4gY2FzZSBvZiBhbiBlcnJvciAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgic211eCIsCi0gICAgICAgICAgICAgICAgIltzbXV4X3BhcnNlXSBNZXNzYWdlIHR5cGUgJWQsIHJlcWlkICVkLCBlcnJzdGF0ICVkLCBcblx0ZXJyaW5kZXggJWRcbiIsCisgICAgICAgICAgICAgICAgIltzbXV4X3BhcnNlXSBNZXNzYWdlIHR5cGUgJWQsIHJlcWlkICVsZCwgZXJyc3RhdCAlbGQsIFxuXHRlcnJpbmRleCAlbGRcbiIsCiAgICAgICAgICAgICAgICAgKGludCkgdHlwZSwgcmVxaWQsIGVycnN0YXQsIGVycmluZGV4KSk7CiAgICAgaWYgKHB0ciA9PSBOVUxMIHx8IGVycnN0YXQgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTU2LDggKzE1ODUsOCBAQAogICAgICAqLwogICAgIGxlbiA9IFNNVVhNQVhQS1RTSVpFOwogICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKLSAgICAgICAgICAgICAgICAiW3NtdXhfcGFyc2VfdmFyXSBBc24gY29kZWQgbGVuIG9mIHZhciAlZCwgdHlwZSAlZFxuIiwKLSAgICAgICAgICAgICAgICB2YXJfdmFsX2xlbiwgKGludCkgKnZhcnR5cGUpKTsKKyAgICAgICAgICAgICAgICAiW3NtdXhfcGFyc2VfdmFyXSBBc24gY29kZWQgbGVuIG9mIHZhciAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAidSwgdHlwZSAlZFxuIiwgdmFyX3ZhbF9sZW4sIChpbnQpICp2YXJ0eXBlKSk7CiAKICAgICBzd2l0Y2ggKChzaG9ydCkgKnZhcnR5cGUpIHsKICAgICBjYXNlIEFTTl9JTlRFR0VSOgpAQCAtMTk2Miw3ICsxOTkxLDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFggCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgIGlmIChsZW4gPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHZhcl92YWxfbGVuID0gU01VWE1BWFNUUkxFTjsKICAgICAgICAgICAgIGFzbl9wYXJzZV9zdHJpbmcodmFyX3ZhbCwgJm1heGxlbiwgJnZhcnR5cGUsCkBAIC0xOTg2LDcgKzIwMTUsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFhYWCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgdmFyX3ZhbF9sZW4gPSBTTVVYTUFYU1RSTEVOOwogICAgICAgICAgICAgYXNuX3BhcnNlX2JpdHN0cmluZyh2YXJfdmFsLCAmbWF4bGVuLCAmdmFydHlwZSwKQEAgLTIwNzAsNyArMjA5OSw3IEBACiAgICByZXR1cm4oMCk7CiB9CiAKLWludCBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZ2V0X2xlbmd0aCgpCitpbnQgc211eF9zbm1wX3NlbGVjdF9saXN0X2dldF9sZW5ndGgodm9pZCkKIHsKICAgIHJldHVybihzZGxlbik7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCBiL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5oCmluZGV4IGQxNTFmN2QuLjg4YjhhM2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5oCkBAIC0yLDYgKzIsMTEgQEAKICAqIFNtdXggbW9kdWxlIGF1dGhvcmVkIGJ5IFJvaGl0IER1YmUuCiAgKiBSZXdyaXR0ZW4gYnkgTmljayBBbWF0byA8bmFhbWF0b0BtZXJpdC5uZXQ+LgogICovCisKKyNpZm5kZWYgTkVUU05NUF9UUkFOU1BPUlRfSVBWNEJBU0VfRE9NQUlOCitjb25maWdfZXJyb3Ioc211eC9zbXV4IGRlcGVuZHMgb24gdGhlIElQdjRCYXNlIHRyYW5zcG9ydCBkb21haW4pCisjZW5kaWYKKwogY29uZmlnX2JlbG9uZ3NfaW4oYWdlbnRfbW9kdWxlKQogCiAjZGVmaW5lIFNNVVhQT1JUIDE5OQpAQCAtNjUsOCArNzAsNiBAQAogZXh0ZXJuIGludCAgICAgIHNtdXhfcHJvY2VzcyhpbnQpOwogZXh0ZXJuIHZvaWQgICAgIHNtdXhfcGFyc2VfcGVlcl9hdXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIGV4dGVybiB2b2lkICAgICBzbXV4X2ZyZWVfcGVlcl9hdXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgICAgIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMoaW50LCBpbnQsIG9pZCAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7CiAKIC8qIEFkZCBzb2NrZXQtZmQgdG8gbGlzdCAqLwogaW50IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9hZGQoaW50IHNkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYwppbmRleCAzZTVkNWNlLi4xNmIwMTg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jCkBAIC01MiwzMiArNTIsNTUgQEAKICNpbmNsdWRlICJzbm1wX2JncC5oIgogCiBzdHJ1Y3QgdmFyaWFibGUxMyBiZ3BfdmFyaWFibGVzW10gPSB7Ci0gICAge0JHUFZFUlNJT04sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYmdwLCAxLCB7MX19LAotICAgIHtCR1BMT0NBTEFTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDEsIHsyfX0sCi0gICAge0JHUElERU5USUZJRVIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAxLCB7NH19LAotICAgIHtCR1BQRUVSSURFTlRJRklFUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxfX0sCi0gICAge0JHUFBFRVJTVEFURSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMn19LAotICAgIHtCR1BQRUVSQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDN9fSwKLSAgICB7QkdQUEVFUk5FR09USUFURURWRVJTSU9OLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA0fX0sCi0gICAge0JHUFBFRVJMT0NBTEFERFIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgNX19LAotICAgIHtCR1BQRUVSTE9DQUxQT1JULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA2fX0sCi0gICAge0JHUFBFRVJSRU1PVEVBRERSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDd9fSwKLSAgICB7QkdQUEVFUlJFTU9URVBPUlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDh9fSwKLSAgICB7QkdQUEVFUlJFTU9URUFTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA5fX0sCi0gICAge0JHUFBFRVJJTlVQREFURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDEwfX0sCi0gICAge0JHUFBFRVJPVVRVUERBVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxMX19LAotICAgIHtCR1BQRUVSSU5UT1RBTE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxMn19LAotICAgIHtCR1BQRUVST1VUVE9UQUxNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMTN9fSwKLSAgICB7QkdQUEVFUkxBU1RFUlJPUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxNH19LAotICAgIHtCR1BQQVRIQVRUUlBFRVIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgMX19LAotICAgIHtCR1BQQVRIQVRUUkRFU1RORVRXT1JLLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDJ9fSwKLSAgICB7QkdQUEFUSEFUVFJPUklHSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDN9fSwKLSAgICB7QkdQUEFUSEFUVFJBU1BBVEgsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgNH19LAotICAgIHtCR1BQQVRIQVRUUk5FWFRIT1AsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDV9fSwKLSAgICB7QkdQUEFUSEFUVFJJTlRFUkFTTUVUUklDLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDZ9fQorICAgIHtCR1BWRVJTSU9OLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMSwgezF9fSwKKyAgICB7QkdQTE9DQUxBUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAxLCB7Mn19LAorICAgIHtCR1BJREVOVElGSUVSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMSwgezR9fSwKKyAgICB7QkdQUEVFUklERU5USUZJRVIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMX19LAorICAgIHtCR1BQRUVSU1RBVEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDJ9fSwKKyAgICB7QkdQUEVFUkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAzfX0sCisgICAge0JHUFBFRVJORUdPVElBVEVEVkVSU0lPTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgNH19LAorICAgIHtCR1BQRUVSTE9DQUxBRERSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDV9fSwKKyAgICB7QkdQUEVFUkxPQ0FMUE9SVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgNn19LAorICAgIHtCR1BQRUVSUkVNT1RFQUREUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA3fX0sCisgICAge0JHUFBFRVJSRU1PVEVQT1JULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA4fX0sCisgICAge0JHUFBFRVJSRU1PVEVBUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgOX19LAorICAgIHtCR1BQRUVSSU5VUERBVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxMH19LAorICAgIHtCR1BQRUVST1VUVVBEQVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMTF9fSwKKyAgICB7QkdQUEVFUklOVE9UQUxNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMTJ9fSwKKyAgICB7QkdQUEVFUk9VVFRPVEFMTUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDEzfX0sCisgICAge0JHUFBFRVJMQVNURVJST1IsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMTR9fSwKKyAgICB7QkdQUEFUSEFUVFJQRUVSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDF9fSwKKyAgICB7QkdQUEFUSEFUVFJERVNUTkVUV09SSywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCAyfX0sCisgICAge0JHUFBBVEhBVFRST1JJR0lOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCAzfX0sCisgICAge0JHUFBBVEhBVFRSQVNQQVRILCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDR9fSwKKyAgICB7QkdQUEFUSEFUVFJORVhUSE9QLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCA1fX0sCisgICAge0JHUFBBVEhBVFRSSU5URVJBU01FVFJJQywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCA2fX0KIH07CiAKLW9pZCAgICAgICAgICAgICBiZ3BfdmFyaWFibGVzX29pZFtdID0geyBNSUIsIDE1IH07CitvaWQgICAgICAgICAgICAgYmdwX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9NSUIyX09JRCwgMTUgfTsKIAogdm9pZAogaW5pdF9zbm1wX2JkcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMKaW5kZXggNGY0NzU4Yy4uNzNmMGU0MyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYworKysgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jCkBAIC01NywxMjkgKzU3LDIyNSBAQAogZXh0ZXJuIHVfY2hhciAgIHNtdXhfdHlwZTsKIAogc3RydWN0IHZhcmlhYmxlMTMgb3NwZl92YXJpYWJsZXNbXSA9IHsKLSAgICB7b3NwZlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MSwgMSwgMX19LAotICAgIHtvc3BmQWRtaW5TdGF0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEsIDEsIDJ9fSwKLSAgICB7b3NwZlZlcnNpb25OdW1iZXIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCAzfX0sCi0gICAge29zcGZBcmVhQmRyUnRyU3RhdHVzLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgNH19LAotICAgIHtvc3BmQVNCZHJSdHJTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MSwgMSwgNX19LAotICAgIHtvc3BmRXh0ZXJuTHNhQ291bnQsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgNn19LAotICAgIHtvc3BmRXh0ZXJuTHNhQ2tzdW1TdW0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCA3fX0sCi0gICAge29zcGZUT1NTdXBwb3J0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEsIDEsIDh9fSwKLSAgICB7b3NwZk9yaWdpbmF0ZU5ld0xzYXMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCA5fX0sCi0gICAge29zcGZSeE5ld0xzYXMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCAxMCwgMH19LAotICAgIHtvc3BmRXh0THNkYkxpbWl0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEsIDEsIDExfX0sCi0gICAge29zcGZNdWx0aWNhc3RFeHRlbnNpb25zLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezEsIDEsIDEyfX0sCi0gICAge29zcGZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDF9fSwKLSAgICB7b3NwZkF1dGhUeXBlLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezIsIDEsIDJ9fSwKLSAgICB7b3NwZkltcG9ydEFzRXh0ZXJuLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezIsIDEsIDN9fSwKLSAgICB7b3NwZlNwZlJ1bnMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCA0fX0sCi0gICAge29zcGZBcmVhQmRyUnRyQ291bnQsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgNX19LAotICAgIHtvc3BmQXNCZHJSdHJDb3VudCwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCA2fX0sCi0gICAge29zcGZBcmVhTHNhQ291bnQsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgN319LAotICAgIHtvc3BmQXJlYUxzYUNrc3VtU3VtLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgOH19LAotICAgIHtvc3BmQXJlYVN1bW1hcnksIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MiwgMSwgOX19LAotICAgIHtvc3BmQXJlYVN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsyLCAxLCAxMH19LAotICAgIHtvc3BmU3R1YkFyZWFJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MywgMSwgMX19LAotICAgIHtvc3BmU3R1YlRPUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezMsIDEsIDJ9fSwKLSAgICB7b3NwZlN0dWJNZXRyaWMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MywgMSwgM319LAotICAgIHtvc3BmU3R1YlN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHszLCAxLCA0fX0sCi0gICAge29zcGZTdHViTWV0cmljVHlwZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHszLCAxLCA1fX0sCi0gICAge29zcGZMc2RiQXJlYUlkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCAxfX0sCi0gICAge29zcGZMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDJ9fSwKLSAgICB7b3NwZkxzZGJMc2lkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCAzfX0sCi0gICAge29zcGZMc2RiUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDR9fSwKLSAgICB7b3NwZkxzZGJTZXF1ZW5jZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDV9fSwKLSAgICB7b3NwZkxzZGJBZ2UsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCA2fX0sCi0gICAge29zcGZMc2RiQ2hlY2tzdW0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCA3fX0sCi0gICAge29zcGZMc2RiQWR2ZXJ0aXNlbWVudCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgOH19LAotICAgIHtvc3BmQXJlYVJhbmdlQXJlYUlkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs1LCAxLCAxfX0sCi0gICAge29zcGZBcmVhUmFuZ2VOZXQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezUsIDEsIDJ9fSwKLSAgICB7b3NwZkFyZWFSYW5nZU1hc2ssIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX29zcGYsIDMsIHs1LCAxLCAzfX0sCi0gICAge29zcGZBcmVhUmFuZ2VTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NSwgMSwgNH19LAotICAgIHtvc3BmQXJlYVJhbmdlRWZmZWN0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezUsIDEsIDV9fSwKLSAgICB7b3NwZkhvc3RJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezYsIDEsIDF9fSwKLSAgICB7b3NwZkhvc3RUT1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs2LCAxLCAyfX0sCi0gICAge29zcGZIb3N0TWV0cmljLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezYsIDEsIDN9fSwKLSAgICB7b3NwZkhvc3RTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NiwgMSwgNH19LAotICAgIHtvc3BmSG9zdEFyZWFJRCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NiwgMSwgNX19LAotICAgIHtvc3BmSWZJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezcsIDEsIDF9fSwKLSAgICB7b3NwZkFkZHJlc3NMZXNzSWYsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs3LCAxLCAyfX0sCi0gICAge29zcGZJZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDN9fSwKLSAgICB7b3NwZklmVHlwZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA0fX0sCi0gICAge29zcGZJZkFkbWluU3RhdCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA1fX0sCi0gICAge29zcGZJZlJ0clByaW9yaXR5LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDZ9fSwKLSAgICB7b3NwZklmVHJhbnNpdERlbGF5LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDd9fSwKLSAgICB7b3NwZklmUmV0cmFuc0ludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDh9fSwKLSAgICB7b3NwZklmSGVsbG9JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA5fX0sCi0gICAge29zcGZJZlJ0ckRlYWRJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxMH19LAotICAgIHtvc3BmSWZQb2xsSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgMTF9fSwKLSAgICB7b3NwZklmU3RhdGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxMn19LAotICAgIHtvc3BmSWZEZXNpZ25hdGVkUm91dGVyLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHs3LCAxLCAxM319LAotICAgIHtvc3BmSWZCYWNrdXBEZXNpZ25hdGVkUm91dGVyLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHs3LCAxLCAxNH19LAotICAgIHtvc3BmSWZFdmVudHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxNX19LAotICAgIHtvc3BmSWZBdXRoS2V5LCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgMTZ9fSwKLSAgICB7b3NwZklmU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDE3fX0sCi0gICAge29zcGZJZk11bHRpY2FzdEZvcndhcmRpbmcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7NywgMSwgMTh9fSwKLSAgICB7b3NwZklmTWV0cmljSXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs4LCAxLCAxfX0sCi0gICAge29zcGZJZk1ldHJpY0FkZHJlc3NMZXNzSWYsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHs4LCAxLCAyfX0sCi0gICAge29zcGZJZk1ldHJpY1RPUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezgsIDEsIDN9fSwKLSAgICB7b3NwZklmTWV0cmljVmFsdWUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OCwgMSwgNH19LAotICAgIHtvc3BmSWZNZXRyaWNTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OCwgMSwgNX19LAotICAgIHtvc3BmVmlydElmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs5LCAxLCAxfX0sCi0gICAge29zcGZWaXJ0SWZOZWlnaGJvciwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7OSwgMSwgMn19LAotICAgIHtvc3BmVmlydElmVHJhbnNpdERlbGF5LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezksIDEsIDN9fSwKLSAgICB7b3NwZlZpcnRJZlJldHJhbnNJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHs5LCAxLCA0fX0sCi0gICAge29zcGZWaXJ0SWZIZWxsb0ludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezksIDEsIDV9fSwKLSAgICB7b3NwZlZpcnRJZlJ0ckRlYWRJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHs5LCAxLCA2fX0sCi0gICAge29zcGZWaXJ0SWZTdGF0ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezksIDEsIDd9fSwKLSAgICB7b3NwZlZpcnRJZkV2ZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezksIDEsIDh9fSwKLSAgICB7b3NwZlZpcnRJZkF1dGhLZXksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs5LCAxLCA5fX0sCi0gICAge29zcGZWaXJ0SWZTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OSwgMSwgMTB9fSwKLSAgICB7b3NwZk5icklwQWRkciwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDF9fSwKLSAgICB7b3NwZk5ickFkZHJlc3NMZXNzSW5kZXgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgMn19LAotICAgIHtvc3BmTmJyUnRySWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCAzfX0sCi0gICAge29zcGZOYnJPcHRpb25zLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDR9fSwKLSAgICB7b3NwZk5iclByaW9yaXR5LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEwLCAxLCA1fX0sCi0gICAge29zcGZOYnJTdGF0ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCA2fX0sCi0gICAge29zcGZOYnJFdmVudHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgN319LAotICAgIHtvc3BmTmJyTHNSZXRyYW5zUUxlbiwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgOH19LAotICAgIHtvc3BmTmJtYU5iclN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgOX19LAotICAgIHtvc3BmTmJtYU5iclBlcm1hbmVuY2UsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDEwfX0sCi0gICAge29zcGZWaXJ0TmJyQXJlYSwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDF9fSwKLSAgICB7b3NwZlZpcnROYnJSdHJJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDJ9fSwKLSAgICB7b3NwZlZpcnROYnJJcEFkZHIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCAzfX0sCi0gICAge29zcGZWaXJ0TmJyT3B0aW9ucywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCA0fX0sCi0gICAge29zcGZWaXJ0TmJyU3RhdGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgNX19LAotICAgIHtvc3BmVmlydE5ickV2ZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCA2fX0sCi0gICAge29zcGZWaXJ0TmJyTHNSZXRyYW5zUUxlbiwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgN319LAotICAgIHtvc3BmRXh0THNkYlR5cGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgMX19LAotICAgIHtvc3BmRXh0THNkYkxzaWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCAyfX0sCi0gICAge29zcGZFeHRMc2RiUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCAzfX0sCi0gICAge29zcGZFeHRMc2RiU2VxdWVuY2UsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgNH19LAotICAgIHtvc3BmRXh0THNkYkFnZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCA1fX0sCi0gICAge29zcGZFeHRMc2RiQ2hlY2tzdW0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgNn19LAotICAgIHtvc3BmRXh0THNkYkFkdmVydGlzZW1lbnQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezEyLCAxLCA3fX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlQXJlYUlELCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHsxNCwgMSwgMX19LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUxzZGJUeXBlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7MTQsIDEsIDJ9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVOZXQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezE0LCAxLCAzfX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlTWFzaywgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezE0LCAxLCA0fX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezE0LCAxLCA1fX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlRWZmZWN0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezE0LCAxLCA2fX0KKyAgICB7b3NwZlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgMX19LAorICAgIHtvc3BmQWRtaW5TdGF0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDJ9fSwKKyAgICB7b3NwZlZlcnNpb25OdW1iZXIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAzfX0sCisgICAge29zcGZBcmVhQmRyUnRyU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgNH19LAorICAgIHtvc3BmQVNCZHJSdHJTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgNX19LAorICAgIHtvc3BmRXh0ZXJuTHNhQ291bnQsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgNn19LAorICAgIHtvc3BmRXh0ZXJuTHNhQ2tzdW1TdW0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA3fX0sCisgICAge29zcGZUT1NTdXBwb3J0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDh9fSwKKyAgICB7b3NwZk9yaWdpbmF0ZU5ld0xzYXMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA5fX0sCisgICAge29zcGZSeE5ld0xzYXMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAxMCwgMH19LAorICAgIHtvc3BmRXh0THNkYkxpbWl0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDExfX0sCisgICAge29zcGZNdWx0aWNhc3RFeHRlbnNpb25zLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDEyfX0sCisgICAge29zcGZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDF9fSwKKyAgICB7b3NwZkF1dGhUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDJ9fSwKKyAgICB7b3NwZkltcG9ydEFzRXh0ZXJuLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDN9fSwKKyAgICB7b3NwZlNwZlJ1bnMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA0fX0sCisgICAge29zcGZBcmVhQmRyUnRyQ291bnQsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgNX19LAorICAgIHtvc3BmQXNCZHJSdHJDb3VudCwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA2fX0sCisgICAge29zcGZBcmVhTHNhQ291bnQsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgN319LAorICAgIHtvc3BmQXJlYUxzYUNrc3VtU3VtLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgOH19LAorICAgIHtvc3BmQXJlYVN1bW1hcnksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgOX19LAorICAgIHtvc3BmQXJlYVN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCAxMH19LAorICAgIHtvc3BmU3R1YkFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MywgMSwgMX19LAorICAgIHtvc3BmU3R1YlRPUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezMsIDEsIDJ9fSwKKyAgICB7b3NwZlN0dWJNZXRyaWMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MywgMSwgM319LAorICAgIHtvc3BmU3R1YlN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHszLCAxLCA0fX0sCisgICAge29zcGZTdHViTWV0cmljVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHszLCAxLCA1fX0sCisgICAge29zcGZMc2RiQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCAxfX0sCisgICAge29zcGZMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDJ9fSwKKyAgICB7b3NwZkxzZGJMc2lkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCAzfX0sCisgICAge29zcGZMc2RiUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDR9fSwKKyAgICB7b3NwZkxzZGJTZXF1ZW5jZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDV9fSwKKyAgICB7b3NwZkxzZGJBZ2UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCA2fX0sCisgICAge29zcGZMc2RiQ2hlY2tzdW0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCA3fX0sCisgICAge29zcGZMc2RiQWR2ZXJ0aXNlbWVudCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgOH19LAorICAgIHtvc3BmQXJlYVJhbmdlQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs1LCAxLCAxfX0sCisgICAge29zcGZBcmVhUmFuZ2VOZXQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezUsIDEsIDJ9fSwKKyAgICB7b3NwZkFyZWFSYW5nZU1hc2ssIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs1LCAxLCAzfX0sCisgICAge29zcGZBcmVhUmFuZ2VTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NSwgMSwgNH19LAorICAgIHtvc3BmQXJlYVJhbmdlRWZmZWN0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezUsIDEsIDV9fSwKKyAgICB7b3NwZkhvc3RJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezYsIDEsIDF9fSwKKyAgICB7b3NwZkhvc3RUT1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs2LCAxLCAyfX0sCisgICAge29zcGZIb3N0TWV0cmljLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezYsIDEsIDN9fSwKKyAgICB7b3NwZkhvc3RTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NiwgMSwgNH19LAorICAgIHtvc3BmSG9zdEFyZWFJRCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NiwgMSwgNX19LAorICAgIHtvc3BmSWZJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDF9fSwKKyAgICB7b3NwZkFkZHJlc3NMZXNzSWYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAyfX0sCisgICAge29zcGZJZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDN9fSwKKyAgICB7b3NwZklmVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA0fX0sCisgICAge29zcGZJZkFkbWluU3RhdCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA1fX0sCisgICAge29zcGZJZlJ0clByaW9yaXR5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDZ9fSwKKyAgICB7b3NwZklmVHJhbnNpdERlbGF5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDd9fSwKKyAgICB7b3NwZklmUmV0cmFuc0ludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDh9fSwKKyAgICB7b3NwZklmSGVsbG9JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA5fX0sCisgICAge29zcGZJZlJ0ckRlYWRJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxMH19LAorICAgIHtvc3BmSWZQb2xsSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTF9fSwKKyAgICB7b3NwZklmU3RhdGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxMn19LAorICAgIHtvc3BmSWZEZXNpZ25hdGVkUm91dGVyLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxM319LAorICAgIHtvc3BmSWZCYWNrdXBEZXNpZ25hdGVkUm91dGVyLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxNH19LAorICAgIHtvc3BmSWZFdmVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxNX19LAorICAgIHtvc3BmSWZBdXRoS2V5LCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTZ9fSwKKyAgICB7b3NwZklmU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDE3fX0sCisgICAge29zcGZJZk11bHRpY2FzdEZvcndhcmRpbmcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTh9fSwKKyAgICB7b3NwZklmTWV0cmljSXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs4LCAxLCAxfX0sCisgICAge29zcGZJZk1ldHJpY0FkZHJlc3NMZXNzSWYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs4LCAxLCAyfX0sCisgICAge29zcGZJZk1ldHJpY1RPUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezgsIDEsIDN9fSwKKyAgICB7b3NwZklmTWV0cmljVmFsdWUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OCwgMSwgNH19LAorICAgIHtvc3BmSWZNZXRyaWNTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OCwgMSwgNX19LAorICAgIHtvc3BmVmlydElmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCAxfX0sCisgICAge29zcGZWaXJ0SWZOZWlnaGJvciwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgMn19LAorICAgIHtvc3BmVmlydElmVHJhbnNpdERlbGF5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDN9fSwKKyAgICB7b3NwZlZpcnRJZlJldHJhbnNJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA0fX0sCisgICAge29zcGZWaXJ0SWZIZWxsb0ludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDV9fSwKKyAgICB7b3NwZlZpcnRJZlJ0ckRlYWRJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA2fX0sCisgICAge29zcGZWaXJ0SWZTdGF0ZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDd9fSwKKyAgICB7b3NwZlZpcnRJZkV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDh9fSwKKyAgICB7b3NwZlZpcnRJZkF1dGhLZXksIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA5fX0sCisgICAge29zcGZWaXJ0SWZTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgMTB9fSwKKyAgICB7b3NwZk5icklwQWRkciwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDF9fSwKKyAgICB7b3NwZk5ickFkZHJlc3NMZXNzSW5kZXgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgMn19LAorICAgIHtvc3BmTmJyUnRySWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCAzfX0sCisgICAge29zcGZOYnJPcHRpb25zLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDR9fSwKKyAgICB7b3NwZk5iclByaW9yaXR5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA1fX0sCisgICAge29zcGZOYnJTdGF0ZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA2fX0sCisgICAge29zcGZOYnJFdmVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgN319LAorICAgIHtvc3BmTmJyTHNSZXRyYW5zUUxlbiwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgOH19LAorICAgIHtvc3BmTmJtYU5iclN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgOX19LAorICAgIHtvc3BmTmJtYU5iclBlcm1hbmVuY2UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDEwfX0sCisgICAge29zcGZWaXJ0TmJyQXJlYSwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDF9fSwKKyAgICB7b3NwZlZpcnROYnJSdHJJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDJ9fSwKKyAgICB7b3NwZlZpcnROYnJJcEFkZHIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCAzfX0sCisgICAge29zcGZWaXJ0TmJyT3B0aW9ucywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCA0fX0sCisgICAge29zcGZWaXJ0TmJyU3RhdGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgNX19LAorICAgIHtvc3BmVmlydE5ickV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCA2fX0sCisgICAge29zcGZWaXJ0TmJyTHNSZXRyYW5zUUxlbiwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgN319LAorICAgIHtvc3BmRXh0THNkYlR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgMX19LAorICAgIHtvc3BmRXh0THNkYkxzaWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCAyfX0sCisgICAge29zcGZFeHRMc2RiUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCAzfX0sCisgICAge29zcGZFeHRMc2RiU2VxdWVuY2UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgNH19LAorICAgIHtvc3BmRXh0THNkYkFnZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCA1fX0sCisgICAge29zcGZFeHRMc2RiQ2hlY2tzdW0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgNn19LAorICAgIHtvc3BmRXh0THNkYkFkdmVydGlzZW1lbnQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCA3fX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlQXJlYUlELCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgMX19LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUxzZGJUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDJ9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVOZXQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCAzfX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlTWFzaywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCA0fX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCA1fX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlRWZmZWN0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCA2fX0KIH07CiAKLW9pZCAgICAgICAgICAgICBvc3BmX3ZhcmlhYmxlc19vaWRbXSA9IHsgTUlCLCAxNCB9Oworb2lkICAgICAgICAgICAgIG9zcGZfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX01JQjJfT0lELCAxNCB9OwogCiB2b2lkCiBpbml0X3NubXBfb3NwZih2b2lkKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMKaW5kZXggYzViMTM2NC4uYjk4N2EwOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYworKysgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jCkBAIC01NywzMSArNTcsNTMgQEAKIGV4dGVybiB1X2NoYXIgICBzbXV4X3R5cGU7CiAKIHN0cnVjdCB2YXJpYWJsZTEzIHJpcDJfdmFyaWFibGVzW10gPSB7Ci0gICAge1JJUDJHTE9CQUxST1VURUNIQU5HRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDIsIHsxLCAxfX0sCi0gICAge1JJUDJHTE9CQUxRVUVSSUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAyLCB7MSwgMn19LAotICAgIHtSSVAySUZTVEFUQUREUkVTUywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9yaXAyLCAzLCB7MiwgMSwgMX19LAotICAgIHtSSVAySUZTVEFUUkNWQkFEUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezIsIDEsIDJ9fSwKLSAgICB7UklQMklGU1RBVFJDVkJBRFJPVVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezIsIDEsIDN9fSwKLSAgICB7UklQMklGU1RBVFNFTlRVUERBVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7MiwgMSwgNH19LAotICAgIHtSSVAySUZTVEFUU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezIsIDEsIDV9fSwKLSAgICB7UklQMklGQ09ORkFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfcmlwMiwgMywgezMsIDEsIDF9fSwKLSAgICB7UklQMklGQ09ORkRPTUFJTiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDJ9fSwKLSAgICB7UklQMklGQ09ORkFVVEhUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDN9fSwKLSAgICB7UklQMklGQ09ORkFVVEhLRVksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA0fX0sCi0gICAge1JJUDJJRkNPTkZTRU5ELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDV9fSwKLSAgICB7UklQMklGQ09ORlJFQ0VJVkUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgNn19LAotICAgIHtSSVAySUZDT05GREVGQVVMVE1FVFJJQywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA3fX0sCi0gICAge1JJUDJJRkNPTkZTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgOH19LAotICAgIHtSSVAySUZDT05GU1JDQUREUkVTUywgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDl9fSwKLSAgICB7UklQMlBFRVJBRERSRVNTLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCAxfX0sCi0gICAge1JJUDJQRUVSRE9NQUlOLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCAyfX0sCi0gICAge1JJUDJQRUVSTEFTVFVQREFURSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgM319LAotICAgIHtSSVAyUEVFUlZFUlNJT04sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCA0fX0sCi0gICAge1JJUDJQRUVSUkNWQkFEUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDV9fSwKLSAgICB7UklQMlBFRVJSQ1ZCQURST1VURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCA2fX0KKyAgICB7UklQMkdMT0JBTFJPVVRFQ0hBTkdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMiwgezEsIDF9fSwKKyAgICB7UklQMkdMT0JBTFFVRVJJRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDIsIHsxLCAyfX0sCisgICAge1JJUDJJRlNUQVRBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHsyLCAxLCAxfX0sCisgICAge1JJUDJJRlNUQVRSQ1ZCQURQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7MiwgMSwgMn19LAorICAgIHtSSVAySUZTVEFUUkNWQkFEUk9VVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7MiwgMSwgM319LAorICAgIHtSSVAySUZTVEFUU0VOVFVQREFURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHsyLCAxLCA0fX0sCisgICAge1JJUDJJRlNUQVRTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MiwgMSwgNX19LAorICAgIHtSSVAySUZDT05GQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgMX19LAorICAgIHtSSVAySUZDT05GRE9NQUlOLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgMn19LAorICAgIHtSSVAySUZDT05GQVVUSFRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgM319LAorICAgIHtSSVAySUZDT05GQVVUSEtFWSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDR9fSwKKyAgICB7UklQMklGQ09ORlNFTkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgNX19LAorICAgIHtSSVAySUZDT05GUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA2fX0sCisgICAge1JJUDJJRkNPTkZERUZBVUxUTUVUUklDLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDd9fSwKKyAgICB7UklQMklGQ09ORlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA4fX0sCisgICAge1JJUDJJRkNPTkZTUkNBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgOX19LAorICAgIHtSSVAyUEVFUkFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDF9fSwKKyAgICB7UklQMlBFRVJET01BSU4sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDJ9fSwKKyAgICB7UklQMlBFRVJMQVNUVVBEQVRFLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCAzfX0sCisgICAge1JJUDJQRUVSVkVSU0lPTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDR9fSwKKyAgICB7UklQMlBFRVJSQ1ZCQURQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgNX19LAorICAgIHtSSVAyUEVFUlJDVkJBRFJPVVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDZ9fQogfTsKIAotb2lkICAgICAgICAgICAgIHJpcDJfdmFyaWFibGVzX29pZFtdID0geyBNSUIsIDIzIH07CitvaWQgICAgICAgICAgICAgcmlwMl92YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfTUlCMl9PSUQsIDIzIH07CiAKIHZvaWQKIGluaXRfc25tcF9yaXAyKHZvaWQpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYwppbmRleCBjYjAwZjY1Li5kMWM1NzVmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTI2LDkgKzI3LDExIEBACiAKICNpbmNsdWRlICJzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkW10gPQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKQorCitjb25zdCBvaWQgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZFtdID0KICAgICB7IFNOTVBOT1RJRllGSUxURVJUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkX3NpemUgPQorY29uc3QgaW50ICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWQpOwogCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0yNjcsOSArMjcwLDkgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHNhdmUgY2hhbmdlZCByb3dzLCBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5CisgICAgICAgICAgICAgKiBub3RpZnkgbGlicmFyeSB0byBzYXZlIGNoYW5nZWQgcm93cwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX3N0b3JlKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwogICAgICAgICB9CiAKQEAgLTU0NCw3ICs1NDcsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3Igc25tcE5vdGlmeUZpbHRlck1hc2sgZGF0YQogICAgICAgICAgKi8KLSAgICAgICAgKCpzbm1wTm90aWZ5RmlsdGVyTWFza192YWxfcHRyX3B0cikgPQorICAgICAgICAoKnNubXBOb3RpZnlGaWx0ZXJNYXNrX3ZhbF9wdHJfcHRyKSA9IChjaGFyKikKICAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLnNubXBOb3RpZnlGaWx0ZXJNYXNrX2xlbiAqCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuc25tcE5vdGlmeUZpbHRlck1hc2tbMF0pKTsKICAgICAgICAgaWYgKE5VTEwgPT0gKCpzbm1wTm90aWZ5RmlsdGVyTWFza192YWxfcHRyX3B0cikpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCmluZGV4IDViZmViN2QuLjNmZjJmOTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaApAQCAtMzExLDggKzMxMSw4IEBACiAgICAgICAgICogc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoc25tcE5vdGlmeUZpbHRlclRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAic25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMzQyZTA2NC4uOTQyYTg2NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC04LDYgKzgsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3ZhY20uaD4KQEAgLTIwLDYgKzIxLDggQEAKIAogI2luY2x1ZGUgInNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2dldCkKKwogLyoqIEBpbmdyb3VwIGludGVyZmFjZSAKICAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQogICoKQEAgLTI0Myw3ICsyNDYsOCBAQAogICAgICAgICArK2NvdW50OwogICAgIH0KIAotICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c25tcE5vdGlmeUZpbHRlclRhYmxlOnNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfbG9hZCIsICJpbnNlcnRlZCAlZCByZWNvcmRzXG4iLCBjb3VudCkpOworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c25tcE5vdGlmeUZpbHRlclRhYmxlOnNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgJSIgTkVUU05NUF9QUkl6ICJ1IHJlY29yZHNcbiIsIGNvdW50KSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfbG9hZCAqLwpAQCAtNDk1LDcgKzQ5OSw3IEBACiB7CiAgICAgb2lkICAgICAgICAgICAgIHRtcF9vaWRbTUFYX09JRF9MRU5dOwogICAgIG5ldHNubXBfaW5kZXggICB0bXBfaWR4OwotICAgIGludCAgICAgICAgICAgICBpLCBqOworICAgIHNpemVfdCAgICAgICAgICBpLCBqOwogICAgIG5ldHNubXBfdm9pZF9hcnJheSAqczsKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnRtcDsKICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxOwpAQCAtNTI1LDcgKzUyOSw3IEBACiAgICAgLyoKICAgICAgKiBhbGxvY2F0ZSB0ZW1wb3Jhcnkgc3RvcmFnZQogICAgICAqLwotICAgIHRtcCA9IGNhbGxvYyhzaXplb2Yoc3RydWN0IHZhY21fdmlld0VudHJ5KSwgcy0+c2l6ZSArIDEpOworICAgIHRtcCA9IChzdHJ1Y3QgdmFjbV92aWV3RW50cnkqKWNhbGxvYyhzaXplb2Yoc3RydWN0IHZhY21fdmlld0VudHJ5KSwgcy0+c2l6ZSArIDEpOwogICAgIGlmIChOVUxMID09IHRtcCkgewogICAgICAgICBmcmVlKHMtPmFycmF5KTsKICAgICAgICAgZnJlZShzKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggNDhmM2U3ZS4uNDA0MGUzZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDIyIEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcE5vdGlmeUZpbHRlclRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zaXplLCBzbm1wTm90aWZ5RmlsdGVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBzbm1wTm90aWZ5RmlsdGVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBzbm1wTm90aWZ5RmlsdGVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfZ2V0LCBzbm1wTm90aWZ5RmlsdGVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTk2LDE5ICsxMTMsMjMgQEAKICAgICBfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bgogICAgIChzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uICoKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0KHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTE4LDEyICsxMzksMTUgQEAKICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRShzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kaXJ0eV9nZXQodm9pZCkKQEAgLTIyMCw3ICsyNDQsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBTTk1QTk9USUZZRklMVEVSVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IFNOTVBOT1RJRllGSUxURVJUQUJMRV9NQVhfQ09MOwpAQCAtMjYxLDcgKzI4NSw3IEBACiAgICAgICAgIF9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjg3LDcgKzMxMSw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0zMDMsOCArMzI3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhBTkRMRVJfQ0FOX1JXUklURQorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICBpZiAoTlVMTCA9PSByZWdpbmZvKSB7CkBAIC0zMjUsNyArMzQ5LDcgQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTM0OCw3ICszNzIsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNzI5LDcgKzc1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTc3NCw2ICs3OTgsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9wb3N0X3JlcXVlc3QgKi8KIAorCiAvKioKICAqIEBpbnRlcm5hbAogICogd3JhcHBlcgpAQCAtODQ3LDcgKzg3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTk3NCw3ICs5OTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEwODIsNyArMTEwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY2hlY2tfaW5kZXhlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMjUzLDcgKzEyNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xMzAxLDcgKzEzMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xMzk0LDcgKzE0MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE0NTksNyArMTQ4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNTczLDcgKzE1OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTYyMSw3ICsxNjQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTY1NCw3ICsxNjc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE3NTQsNyArMTc3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0xODEwLDcgKzE4MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sIG5ldHNubXBfcmVxdWVzdF9pbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0cykKIHsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xODM4LDcgKzE4NjMsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjAxMywxNSArMjAzOCwxOCBAQAogc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9pbml0X3BlcnNpc3RlbmNlKG5ldHNubXBfY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRhaW5lcikKIHsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqKmNvbnRhaW5lcl9wOwogICAgIGludCAgICAgICAgICAgICByYzsKIAogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIHJvd190b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBjb250YWluZXJfcCA9IG5ldHNubXBfbWVtZHVwKCZjb250YWluZXIsIHNpemVvZihjb250YWluZXIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXJfcCk7CiAgICAgcmMgPSBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zYXZlX3Jvd3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wKTsKIAogICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgZm9yIFNUT1JFX0RBVEEgY2FsbGJhY2sgIgpAQCAtMjAzOSw5ICsyMDY3LDExIEBACiAgICAgICAgICIjXG4iICIjIHNubXBOb3RpZnlGaWx0ZXJUYWJsZSBwZXJzaXN0ZW50IGRhdGFcbiIgIiMiOwogICAgIGNoYXIgICAgICAgICAgICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjbGllbnRhcmc7CisgICAgbmV0c25tcF9jb250YWluZXIgKmMgPSAqKG5ldHNubXBfY29udGFpbmVyICoqKWNsaWVudGFyZzsKIAotICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2F2ZV9yb3dzIiwgInNhdmluZyAlZCByb3dzXG4iLCBDT05UQUlORVJfU0laRShjKSkpOworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6IgorICAgICAgICAgICAgICAgICJfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zYXZlX3Jvd3MiLAorICAgICAgICAgICAgICAgICJzYXZpbmcgJSIgTkVUU05NUF9QUkl6ICJ1IHJvd3NcbiIsIENPTlRBSU5FUl9TSVpFKGMpKSk7CiAKICAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOwogICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7CkBAIC0yMDkyLDcgKzIxMjIsNyBAQAogICAgICAqIGJlIHRyZWF0ZWQgYSBsaXR0bGUgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgeW91IHdpbGwgbmVlZAogICAgICAqICg0ICogbGVuKSArIDQgWzMgQVNDSUkgY2hhcnMgcGVyIGJ5dGUgKyAxIGZvciAuLCArIDQgZm9yIGxlbl0uCiAgICAgICoKLSAgICAgKiAzKSBBbHNvLCByZW1lYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGVyYXRvcgorICAgICAqIDMpIEFsc28sIHJlbWVtYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGFyYXRvcgogICAgICAqIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBlYWNoIGNvbHVtbiBpcyBwcmVmaXhlZCBieSB0aGUKICAgICAgKiBjb2x1bW4gbnVtYmVyIGFuZCBhIHNlbWljb2xvbi4gVG8gYWxsb3cgZm9yIHRoZSBtYXhpbXVtCiAgICAgICogY29sdW1uIHZhbHVlcywgMTIgYnl0ZXMgWzExIGZvciBvaWQgKyAxIGZvciAnOiddIHBlcgpAQCAtMjIyMCw3ICsyMjUwLDcgQEAKICAgICAgKiBsb29wIHRocm91Z2ggYW5kIGdldCBlYWNoIGNvbHVtbgogICAgICAqLwogICAgIGJ1ZiA9IHNraXBfd2hpdGUoYnVmKTsKLSAgICB3aGlsZSAoKE5VTEwgIT0gYnVmKSAmJiBpc2RpZ2l0KCpidWYpKSB7CisgICAgd2hpbGUgKChOVUxMICE9IGJ1ZikgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmJ1ZikpKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGV4dHJhY3QgY29sdW1uLCBza2lwICc6JwogICAgICAgICAgKi8KQEAgLTI0MDMsNiArMjQzMyw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoc25tcE5vdGlmeUZpbHRlclRhYmxlX21pYl9pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpCkBAIC0yNDI1LDggKzI0NTYsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQoc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmMKaW5kZXggMDVkODMxMS4uNTAxMDE5NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJ1c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZFtdID0geyBVU01ESFVTRVJLRVlUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkW10gPSB7IFVTTURIVVNFUktFWVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgodXNtREhVc2VyS2V5VGFibGVfb2lkKTsKIAogdXNtREhVc2VyS2V5VGFibGVfcmVnaXN0cmF0aW9uIHVzbURIVXNlcktleVRhYmxlX3VzZXJfY29udGV4dDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5oCmluZGV4IGUyMGQ1YmMuLmIzNDNkNzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuaApAQCAtMTk5LDggKzE5OSw4IEBACiAgICAgICAgICp1c21ESFVzZXJLZXlUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKHVzbURIVXNlcktleVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJ1c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDM1MWNiZDMuLmExMzljOWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCi0gICAgREVCVUdNU0dUKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJLZXlUYWJsZV9jb250YWluZXJfbG9hZCIsICJpbnNlcnRlZCAlZCByZWNvcmRzXG4iLCBjb3VudCkpOworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyS2V5VGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgKGludCljb3VudCkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c21ESFVzZXJLZXlUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMKaW5kZXggZDYwOWNlNi4uNDI3ZDI2ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KICNkZWZpbmUgTkVFRF9VU01ESF9GVU5DVElPTlMKICNpbmNsdWRlICJ1c21ESFVzZXJLZXlUYWJsZS5oIgorI2luY2x1ZGUgInNubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy91c21ESFBhcmFtZXRlcnMuaCIKIAogREggICAgICAgICAgICAgKgogdXNtREhHZXRVc2VyREhwdHIoc3RydWN0IHVzbVVzZXIgKnVzZXIsIGludCBmb3JfYXV0aF9rZXkpCkBAIC01Nyw3ICs1OCw3IEBACiAKIGludAogdXNtREhHZXRVc2VyS2V5Q2hhbmdlKHN0cnVjdCB1c21Vc2VyICp1c2VyLCBpbnQgZm9yX2F1dGhfa2V5LAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiprZXlvYmosIHNpemVfdCAqa2V5b2JqX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiprZXlvYmosIHNpemVfdCAqa2V5b2JqX2xlbikKIHsKICAgICBESCAgICAgICAgICAgICAqZGg7CiAKQEAgLTE4Myw3ICsxODQsNyBAQAogaW50CiB1c21ESFVzZXJLZXlUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KHVzbURIVXNlcktleVRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyTmFtZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlck5hbWVfdmFsX3B0cl9sZW4pCkBAIC0yNDUsNyArMjQ2LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJLZXlUYWJsZV9pbmRleGVzX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyRW5naW5lSURfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyTmFtZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJOYW1lX3ZhbF9wdHJfbGVuKQpAQCAtMzI4LDcgKzMyOSw3IEBACiAgKi8KIGludAogdXNtREhVc2VyQXV0aEtleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKQogewogICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciBhbmQgZW5vdWdoIHN0b3JhZ2UgKi8KQEAgLTQxMSw3ICs0MTIsNyBAQAogICovCiBpbnQKIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpCiB7CkBAIC00OTUsNyArNDk2LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpCiB7CiAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLwpAQCAtNTc4LDcgKzU3OSw3IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cikKIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5oCmluZGV4IGI3MjVlMTEuLjgzYzAyOGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuaApAQCAtMjYsNyArMjYsOCBAQAogCiAjaWZkZWYgTkVFRF9VU01ESF9GVU5DVElPTlMKICAgICBpbnQgICAgICAgICAgICAgdXNtREhHZXRVc2VyS2V5Q2hhbmdlKHN0cnVjdCB1c21Vc2VyICp1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcl9hdXRoX2tleSwgY2hhciAqKmtleW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JfYXV0aF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiprZXlvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmtleW9ial9sZW4pOwogICAgIERIICAgICAgICAgICAgICp1c21ESEdldFVzZXJESHB0cihzdHJ1Y3QgdXNtVXNlciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcl9hdXRoX2tleSk7CkBAIC01NCwyOSArNTUsMzggQEAKICAgICAgKi8KIAogICAgIGludCAgICAgICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKTsKICAgICBpbnQgICAgICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cik7CiAKIAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KHVzbURIVXNlcktleVRhYmxlX21pYl9pbmRleCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbVVzZXJFbmdpbmVJRF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyTmFtZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdApAQCAtODQsNyArOTQsNyBAQAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9pbmRleGVzX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyRW5naW5lSURfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJOYW1lX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyTmFtZV92YWxfcHRyX2xlbik7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYwppbmRleCBlYTA4YzEwLi41NjdkMjBlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMKQEAgLTIyLDEzICsyMiwxMyBAQAogCiBpbnQKIHVzbURIVXNlckNoZWNrVmFsdWUoc3RydWN0IHVzbVVzZXIgKnVzZXIsIGludCBmb3JfYXV0aF9rZXksCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCisgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbikKIHsKICAgICAvKgogICAgICAqIFRoZSBzZXQgdmFsdWUgbXVzdCBiZSBjb21wb3NlZCBvZiAyIHBhcnRzLCB0aGUgZmlyc3QgYmVpbmcgdGhlCiAgICAgICogY3VycmVudCB2YWx1ZSAKICAgICAgKi8KLSAgICBjaGFyICAgICAgICAgICAqY3VycmVudF92YWx1ZTsKKyAgICB1X2NoYXIgICAgICAgICAqY3VycmVudF92YWx1ZTsKICAgICBzaXplX3QgICAgICAgICAgY3VycmVudF92YWx1ZV9sZW47CiAKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJDaGVja1ZhbHVlIiwKQEAgLTUwLDExICs1MCwxMSBAQAogCiBpbnQKIHVzbURIU2V0S2V5KHN0cnVjdCB1c21Vc2VyICp1c2VyLCBpbnQgZm9yX2F1dGhfa2V5LAotICAgICAgICAgICAgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbikKKyAgICAgICAgICAgIHVfY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbikKIHsKICAgICBESCAgICAgICAgICAgICAqZGg7CiAgICAgQklHTlVNICAgICAgICAgKm90aGVyX3B1YjsKLSAgICBjaGFyICAgICAgICAgICAqa2V5OworICAgIHVfY2hhciAgICAgICAgICprZXk7CiAgICAgc2l6ZV90ICAgICAgICAgIGtleV9sZW47CiAKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFNldEtleSIsICJjYWxsZWRcbiIpKTsKQEAgLTMzNiw3ICszMzYsNiBAQAogdXNtREhVc2VyS2V5VGFibGVfY29tbWl0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQogewogICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOwotICAgIGludCAgICAgICAgICAgICBzYXZlX2ZsYWdzOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyS2V5VGFibGVfY29tbWl0IiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CkBAIC01MjgsNyArNTI3LDcgQEAKIGludAogdXNtREhVc2VyQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CkBAIC02MDUsNyArNjA0LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAKQEAgLTcyOCw4ICs3MjcsOSBAQAogICovCiBpbnQKIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlIiwgImNhbGxlZFxuIikpOwpAQCAtNzk4LDcgKzc5OCw3IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogCkBAIC05MTIsNyArOTEyLDcgQEAKIGludAogdXNtREhVc2VyUHJpdktleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CkBAIC05ODksNyArOTg5LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAKQEAgLTExMTMsOCArMTExMyw5IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUiLCAiY2FsbGVkXG4iKSk7CkBAIC0xMTgzLDcgKzExODQsNyBAQAogICovCiBpbnQKIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuaCBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmgKaW5kZXggMDRmNGViZS4uZTdjNzA1OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5oCkBAIC01NCwxNSArNTQsMTkgQEAKIAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdW5kb19zZXR1cCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogICAgIGludCAgICAgICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3VuZG8odXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCkBAIC03MCwxNiArNzQsMjAgQEAKIAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV91bmRvX3NldHVwKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3VuZG8odXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCkBAIC04NywxNSArOTUsMTkgQEAKIAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdW5kb19zZXR1cCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogICAgIGludCAgICAgICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3VuZG8odXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCkBAIC0xMDMsMTYgKzExNSwyMCBAQAogCiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3VuZG9fc2V0dXAodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdW5kbyh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMKaW5kZXggOWFiYWY5Yy4uMDQyMzFmOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDEwIEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTE4NCw3ICsxODksNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBVU01ESFVTRVJLRVlUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gVVNNREhVU0VSS0VZVEFCTEVfTUFYX0NPTDsKQEAgLTc2NCw3ICs3NjksNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUkFVVEhLRVlDSEFOR0U6CiAgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiAgICAgICAgIHJjID0gdXNtREhVc2VyQXV0aEtleUNoYW5nZV9nZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtNzc0LDcgKzc3OSw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VST1dOQVVUSEtFWUNIQU5HRToKICAgICAgICAgdmFyLT50eXBlID0gQVNOX09DVEVUX1NUUjsKICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2dldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC03ODQsNyArNzg5LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJQUklWS0VZQ0hBTkdFOgogICAgICAgICB2YXItPnR5cGUgPSBBU05fT0NURVRfU1RSOwogICAgICAgICByYyA9IHVzbURIVXNlclByaXZLZXlDaGFuZ2VfZ2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZ2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTc5NCw3ICs3OTksNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUk9XTlBSSVZLRVlDSEFOR0U6CiAgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiAgICAgICAgIHJjID0gdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9nZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtOTE5LDcgKzkyNCw3IEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtREhVc2VyS2V5VGFibGU6X3VzbURIVXNlcktleVRhYmxlX2NoZWNrX2NvbHVtbjp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByYyA9IHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHZhci0+dmFsX2xlbik7CiAgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQogICAgICAgICAgICAgICAgICYmIChNRkRfTk9UX1ZBTElEX05PVyAhPSByYykpIHsKQEAgLTk0MCw3ICs5NDUsNyBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbURIVXNlcktleVRhYmxlOl91c21ESFVzZXJLZXlUYWJsZV9jaGVja19jb2x1bW46dXNtREhVc2VyT3duQXV0aEtleUNoYW5nZSIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQpAQCAtOTYyLDcgKzk2Nyw3IEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtREhVc2VyS2V5VGFibGU6X3VzbURIVXNlcktleVRhYmxlX2NoZWNrX2NvbHVtbjp1c21ESFVzZXJQcml2S2V5Q2hhbmdlIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByYyA9IHVzbURIVXNlclByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHZhci0+dmFsX2xlbik7CiAgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQogICAgICAgICAgICAgICAgICYmIChNRkRfTk9UX1ZBTElEX05PVyAhPSByYykpIHsKQEAgLTk4Myw3ICs5ODgsNyBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbURIVXNlcktleVRhYmxlOl91c21ESFVzZXJLZXlUYWJsZV9jaGVja19jb2x1bW46dXNtREhVc2VyT3duUHJpdktleUNoYW5nZSIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQpAQCAtMTI4Myw3ICsxMjg4LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJBVVRIS0VZQ0hBTkdFOgogICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9VU01ESFVTRVJBVVRIS0VZQ0hBTkdFX0ZMQUc7CiAgICAgICAgIHJjID0gdXNtREhVc2VyQXV0aEtleUNoYW5nZV9zZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMjk0LDcgKzEyOTksNyBAQAogICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9CiAgICAgICAgICAgICBDT0xVTU5fVVNNREhVU0VST1dOQVVUSEtFWUNIQU5HRV9GTEFHOwogICAgICAgICByYyA9IHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2Vfc2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtMTMwNCw3ICsxMzA5LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJQUklWS0VZQ0hBTkdFOgogICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9VU01ESFVTRVJQUklWS0VZQ0hBTkdFX0ZMQUc7CiAgICAgICAgIHJjID0gdXNtREhVc2VyUHJpdktleUNoYW5nZV9zZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzE1LDcgKzEzMjAsNyBAQAogICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9CiAgICAgICAgICAgICBDT0xVTU5fVVNNREhVU0VST1dOUFJJVktFWUNIQU5HRV9GTEFHOwogICAgICAgICByYyA9IHVzbURIVXNlck93blByaXZLZXlDaGFuZ2Vfc2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMKaW5kZXggNGNhMjk4Ny4uZTc1Njc4OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jCkBAIC0zLDI4ICszLDQxIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLSNpbmNsdWRlICJtaWJJSS9zeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInNubXBFbmdpbmUuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBlbmdpbmVfYWxsLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3NubXBFbmdpbmVfc2NhbGFyc19jb250ZXh0LCBzbm1wZW5naW5lX2FsbCkKKwogc3RydWN0IHZhcmlhYmxlMiBzbm1wRW5naW5lX3ZhcmlhYmxlc1tdID0gewotICAgIHtTTk1QRU5HSU5FSUQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfc25tcEVuZ2luZSwgMSwgezF9fSwKKyAgICB7U05NUEVOR0lORUlELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHsxfX0sCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKLSAgICB7U05NUEVOR0lORUJPT1RTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcEVuZ2luZSwgMSwgezJ9fSwKLSAgICB7U05NUEVOR0lORVRJTUUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wRW5naW5lLCAxLCB7M319LAorICAgIHtTTk1QRU5HSU5FQk9PVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7Mn19LAorICAgIHtTTk1QRU5HSU5FVElNRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHszfX0sCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KLSAgICB7U05NUEVOR0lORUJPT1RTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9zbm1wRW5naW5lLCAxLCB7Mn19LAotICAgIHtTTk1QRU5HSU5FVElNRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfc25tcEVuZ2luZSwgMSwgezN9fSwKKyAgICB7U05NUEVOR0lORUJPT1RTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7Mn19LAorICAgIHtTTk1QRU5HSU5FVElNRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezN9fSwKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCi0gICAge1NOTVBFTkdJTkVNQVhNRVNTQUdFU0laRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfc25tcEVuZ2luZSwgMSwgezR9fSwKKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAorICAgIHtTTk1QRU5HSU5FQk9PVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHsyfX0sCisgICAge1NOTVBFTkdJTkVUSU1FLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7M319LAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCisgICAge1NOTVBFTkdJTkVNQVhNRVNTQUdFU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezR9fSwKIH07CiAKIC8qCkBAIC00MCw2ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgIHNubXBFbmdpbmVfdmFyaWFibGVzX29pZCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TTk1QRU5HSU5FX1NDQUxBUlNfQ09OVEVYVAogdm9pZAogcmVnaXN0ZXJfc25tcEVuZ2luZV9zY2FsYXJzX2NvbnRleHQoY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7CkBAIC01MiwyNSArNjYsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX01JQl9QUklPUklUWSwgMCwgMCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSwgLTEsIDApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfU05NUEVOR0lORV9TQ0FMQVJTX0NPTlRFWFQgKi8KIAogdm9pZAogaW5pdF9zbm1wRW5naW5lKHZvaWQpCiB7Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSAgICBzdGF0aWMgb2lkICAgICAgcmVnW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEwLCAzLCAxLCAxIH07Ci0gICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShyZWcsIDEwLCAiVGhlIFNOTVAgTWFuYWdlbWVudCBBcmNoaXRlY3R1cmUgTUlCLiIpOwotI2VuZGlmCisgICAgb2lkICAgICAgcmVnW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEwLCAzLCAxLCAxIH07CisgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkocmVnLCAiVGhlIFNOTVAgTWFuYWdlbWVudCBBcmNoaXRlY3R1cmUgTUlCLiIpOwogICAgIHJlZ2lzdGVyX3NubXBFbmdpbmVfc2NhbGFycygpOwogfQogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOwotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogaW50ICAgICAgICAgICAgIHdyaXRlX2VuZ2luZUJvb3RzKGludCwgdV9jaGFyICosIHVfY2hhciwgc2l6ZV90LCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiwgc2l6ZV90KTsKIGludCAgICAgICAgICAgICB3cml0ZV9lbmdpbmVUaW1lKGludCwgdV9jaGFyICosIHVfY2hhciwgc2l6ZV90LCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqLCBzaXplX3QpOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogdV9jaGFyICAgICAgICAgKgogdmFyX3NubXBFbmdpbmUoc3RydWN0IHZhcmlhYmxlICp2cCwKQEAgLTg1LDExICs5OCwxMSBAQAogICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlbmdpbmVJRFtTTk1QX01BWEJVRl07CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsgICAgICAgICAgLyogYXNzdW1lIGl0IGlzbnQgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsgICAgLyogYXNzdW1lIGl0IGlzbnQgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOyAgICAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KIAogICAgIGlmIChoZWFkZXJfZ2VuZXJpYyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKICAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLiAKQEAgLTEwNCwxNiArMTE3LDIwIEBACiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBlbmdpbmVJRDsKIAogICAgIGNhc2UgU05NUEVOR0lORUJPT1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2VuZ2luZUJvb3RzOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGxvbmdfcmV0ID0gc25tcHYzX2xvY2FsX3NubXBFbmdpbmVCb290cygpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogCiAgICAgY2FzZSBTTk1QRU5HSU5FVElNRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9lbmdpbmVUaW1lOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGxvbmdfcmV0ID0gc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAKQEAgLTEyNSw5ICsxNDIsMTEgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9zbm1wRW5naW5lXG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKIC8qCiAgKiB3cml0ZV9lbmdpbmVCb290cygpOgpAQCAtMjI0LDMgKzI0Myw0IEBACiB9CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaAppbmRleCAzNDNlZWFhLi5iNjJhMjIwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKQEAgLTEwLDEwICsxMCwxMCBAQAogI2RlZmluZSBfTUlCR1JPVVBfU05NUEVOR0lORV9ICiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiBjb25maWdfYWRkX21pYihTTk1QLUZSQU1FV09SSy1NSUIpCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jCmluZGV4IGM3ZWZiYzguLmFlNzkyZGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMKQEAgLTMsMjQgKzMsMjEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKICNpbmNsdWRlICJzbm1wTVBEU3RhdHMuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAKIHN0cnVjdCB2YXJpYWJsZTIgc25tcE1QRFN0YXRzX3ZhcmlhYmxlc1tdID0gewotICAgIHtTTk1QVU5LTk9XTlNFQ1VSSVRZTU9ERUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wTVBEU3RhdHMsIDEsCi0gICAgIHsxfX0sCi0gICAge1NOTVBJTlZBTElETVNHUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcE1QRFN0YXRzLCAxLCB7Mn19LAotICAgIHtTTk1QVU5LTk9XTlBEVUhBTkRMRVJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wTVBEU3RhdHMsIDEsIHszfX0sCisgICAge1NOTVBVTktOT1dOU0VDVVJJVFlNT0RFTFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBNUERTdGF0cywgMSwgezF9fSwKKyAgICB7U05NUElOVkFMSURNU0dTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wTVBEU3RhdHMsIDEsIHsyfX0sCisgICAge1NOTVBVTktOT1dOUERVSEFORExFUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBNUERTdGF0cywgMSwgezN9fSwKIH07CiAKIC8qCkBAIC0zMiwxMiArMjksOSBAQAogdm9pZAogaW5pdF9zbm1wTVBEU3RhdHModm9pZCkKIHsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQogICAgIHN0YXRpYyBvaWQgICAgICByZWdbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTEsIDMsIDEsIDEgfTsKLSAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKHJlZywgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBmb3IgTWVzc2FnZSBQcm9jZXNzaW5nIGFuZCBEaXNwYXRjaGluZy4iKTsKLSNlbmRpZgotCisgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkocmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIGZvciBNZXNzYWdlIFByb2Nlc3NpbmcgYW5kIERpc3BhdGNoaW5nLiIpOwogICAgIFJFR0lTVEVSX01JQigic25tcHYzL3NubXBNUERTdGF0cyIsIHNubXBNUERTdGF0c192YXJpYWJsZXMsIHZhcmlhYmxlMiwKICAgICAgICAgICAgICAgICAgc25tcE1QRFN0YXRzX3ZhcmlhYmxlc19vaWQpOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCmluZGV4IGQxN2MzNzEuLjQxZWFiMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgKQEAgLTgsMTAgKzgsMTEgQEAKICNkZWZpbmUgX01JQkdST1VQX1NOTVBNUERTVEFUU19ICiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorY29uZmlnX2V4Y2x1ZGUoc25tcHYzL3NubXBNUERTdGF0c181XzUpCiBjb25maWdfYWRkX21pYihTTk1QLU1QRC1NSUIpCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmYzJjZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHNubXBNUERTdGF0cy5jOiB0YWxsaWVzIGVycm9ycyBmb3IgU05NUHYzIG1lc3NhZ2UgcHJvY2Vzc2luZy4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKworI2luY2x1ZGUgInNubXBNUERTdGF0c181XzUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oPgorCisjZGVmaW5lIHNubXBNUERNSUIgMSwgMywgNiwgMSwgNiwgMywgMTEKKyNkZWZpbmUgc25tcE1QRE1JQk9iamVjdHMgc25tcE1QRE1JQiwgMgorI2RlZmluZSBzbm1wTVBETUlCQ29tcGxpYW5jZXMgc25tcE1QRE1JQiwgMywgMQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWxwZXJfc3RhdGlzdGljcykKKworc3RhdGljIG9pZCBzbm1wTVBEU3RhdHNbXSA9IHsgc25tcE1QRE1JQk9iamVjdHMsIDEgfTsKKworc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIHNubXBNUERTdGF0c19yZWcgPSBOVUxMOworc3RhdGljIG9pZCBzbm1wTVBEQ29tcGxpYW5jZVtdID0geyBzbm1wTVBETUlCQ29tcGxpYW5jZXMsIDEgfTsKKwordm9pZAoraW5pdF9zbm1wTVBEU3RhdHNfNV81KHZvaWQpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogcyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgInNubXBNUERTdGF0cyIsIE5VTEwsIHNubXBNUERTdGF0cywgT0lEX0xFTkdUSChzbm1wTVBEU3RhdHMpLAorICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChzICYmCisJTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUihzLCAxLCBNUEQpID09IE1JQl9SRUdJU1RFUkVEX09LKSB7CisgICAgICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHNubXBNUERDb21wbGlhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBmb3IgTWVzc2FnZSBQcm9jZXNzaW5nIGFuZCBEaXNwYXRjaGluZy4iKTsKKyAgICAgICAgc25tcE1QRFN0YXRzX3JlZyA9IHM7CisgICAgfQorfQorCit2b2lkCitzaHV0ZG93bl9zbm1wTVBEU3RhdHNfNV81KHZvaWQpCit7CisgICAgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWShzbm1wTVBEQ29tcGxpYW5jZSk7CisgICAgaWYgKHNubXBNUERTdGF0c19yZWcpIHsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoc25tcE1QRFN0YXRzX3JlZyk7CisgICAgICAgIHNubXBNUERTdGF0c19yZWcgPSBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjNkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX01JQkdST1VQX1NOTVBNUERTVEFUU19ICisjZGVmaW5lIF9NSUJHUk9VUF9TTk1QTVBEU1RBVFNfSAorCitjb25maWdfZXhjbHVkZShzbm1wdjMvc25tcE1QRFN0YXRzKQorY29uZmlnX2FkZF9taWIoU05NUC1NUEQtTUlCKQorCit2b2lkIGluaXRfc25tcE1QRFN0YXRzXzVfNSh2b2lkKTsKK3ZvaWQgc2h1dGRvd25fc25tcE1QRFN0YXRzXzVfNSh2b2lkKTsKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9TTk1QTVBEU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYwppbmRleCBkODFlMTI3Li43MThlMDcxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYwpAQCAtNCwyNiArNCwyNiBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidXNtU3RhdHMuaCIKIAogc3RydWN0IHZhcmlhYmxlMiB1c21TdGF0c192YXJpYWJsZXNbXSA9IHsKLSAgICB7VVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsCi0gICAgIHsxfX0sCi0gICAge1VTTVNUQVRTTk9USU5USU1FV0lORE9XUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsIHsyfX0sCi0gICAge1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsIHszfX0sCi0gICAge1VTTVNUQVRTVU5LTk9XTkVOR0lORUlEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsIHs0fX0sCi0gICAge1VTTVNUQVRTV1JPTkdESUdFU1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwgezV9fSwKLSAgICB7VVNNU1RBVFNERUNSWVBUSU9ORVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwgezZ9fSwKKyAgICB7VVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHsxfX0sCisgICAge1VTTVNUQVRTTk9USU5USU1FV0lORE9XUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHsyfX0sCisgICAge1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHszfX0sCisgICAge1VTTVNUQVRTVU5LTk9XTkVOR0lORUlEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHs0fX0sCisgICAge1VTTVNUQVRTV1JPTkdESUdFU1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezV9fSwKKyAgICB7VVNNU1RBVFNERUNSWVBUSU9ORVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezZ9fSwKIH07CiAKIC8qCkBAIC0zNSwxMiArMzUsMTAgQEAKIHZvaWQKIGluaXRfdXNtU3RhdHModm9pZCkKIHsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQogICAgIHN0YXRpYyBvaWQgICAgICByZWdbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTUsIDIsIDEsIDEgfTsKLSAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKHJlZywgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBTTk1QIFVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwuIik7Ci0jZW5kaWYKLQorICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVAgVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbC4iKTsKICAgICBSRUdJU1RFUl9NSUIoInNubXB2My91c21TdGF0cyIsIHVzbVN0YXRzX3ZhcmlhYmxlcywgdmFyaWFibGUyLAogICAgICAgICAgICAgICAgICB1c21TdGF0c192YXJpYWJsZXNfb2lkKTsKIH0KQEAgLTczLDUgKzcxLDYgQEAKICAgICAgICAgbG9uZ19yZXQgPSBzbm1wX2dldF9zdGF0aXN0aWModG1hZ2ljICsgU1RBVF9VU01fU1RBVFNfU1RBUlQpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogICAgIH0KKwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaAppbmRleCA3MTg4ZTFhLi41Njg1MzgxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaApAQCAtOSwxMCArOSwxMSBAQAogI2RlZmluZSBfTUlCR1JPVVBfVVNNU1RBVFNfSAogCiAvKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKK2NvbmZpZ19leGNsdWRlKHNubXB2My91c21TdGF0c181XzUpCiBjb25maWdfYWRkX21pYihTTk1QLVVTRVItQkFTRUQtU00tTUlCKQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2QwNGUxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiB1c21TdGF0cy5jOiBpbXBsZW1lbnRzIHRoZSB1c21TdGF0cyBwb3J0aW9uIG9mIHRoZSBTTk1QLVVTRVItQkFTRUQtU00tTUlCCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CisKKyNpbmNsdWRlICJ1c21TdGF0c181XzUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oPgorCisjZGVmaW5lIHNubXBVc21NSUIgMSwgMywgNiwgMSwgNiwgMywgMTUKKyNkZWZpbmUgdXNtTUlCQ29tcGxpYW5jZXMgc25tcFVzbU1JQiwgMiwgMQorCitzdGF0aWMgb2lkIHVzbVN0YXRzW10gPSB7IHNubXBVc21NSUIsIDEsIDEgfTsKKworc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIHVzbVN0YXRzX3JlZyA9IE5VTEw7CitzdGF0aWMgb2lkIHVzbU1JQkNvbXBsaWFuY2VbXSA9IHsgdXNtTUlCQ29tcGxpYW5jZXMsIDEgfTsKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVscGVyX3N0YXRpc3RpY3MpCisKK3ZvaWQKK2luaXRfdXNtU3RhdHNfNV81KHZvaWQpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogcyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgInVzbVN0YXRzIiwgTlVMTCwgdXNtU3RhdHMsIE9JRF9MRU5HVEgodXNtU3RhdHMpLAorICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChzICYmCisJTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUihzLCAxLCBVU00pID09IE1JQl9SRUdJU1RFUkVEX09LKSB7CisgICAgICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHVzbU1JQkNvbXBsaWFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBkZWZpbml0aW9ucyBmb3IgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVAgVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbC4iKTsKKyAgICAgICAgdXNtU3RhdHNfcmVnID0gczsKKyAgICB9Cit9CisKK3ZvaWQKK3NodXRkb3duX3VzbVN0YXRzXzVfNSh2b2lkKQoreworICAgIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkodXNtTUlCQ29tcGxpYW5jZSk7CisgICAgaWYgKHVzbVN0YXRzX3JlZykgeworICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcih1c21TdGF0c19yZWcpOworICAgICAgICB1c21TdGF0c19yZWcgPSBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA3MTllCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX01JQkdST1VQX1VTTVNUQVRTX0gKKyNkZWZpbmUgX01JQkdST1VQX1VTTVNUQVRTX0gKKworY29uZmlnX2V4Y2x1ZGUoc25tcHYzL3VzbVN0YXRzKQorY29uZmlnX2FkZF9taWIoU05NUC1VU0VSLUJBU0VELVNNLU1JQikKKwordm9pZCBpbml0X3VzbVN0YXRzXzVfNSh2b2lkKTsKK3ZvaWQgc2h1dGRvd25fdXNtU3RhdHNfNV81KHZvaWQpOworCisjZW5kaWYgLyogX01JQkdST1VQX1VTTVNUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jCmluZGV4IDBlYjBkYWMuLjlmMDUwM2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKQEAgLTExLDM3ICsxMiw0NCBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidXNtVXNlci5oIgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKIGludCB1c21TdGF0dXNDaGVjayhzdHJ1Y3QgdXNtVXNlciAqdXB0cik7CisjZW5kaWYgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbXVzZXJfYWxsLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbml0X3JlZ2lzdGVyX3VzbXVzZXJfY29udGV4dCwgdXNtdXNlcl9hbGwpCiAKIHN0cnVjdCB2YXJpYWJsZTQgdXNtVXNlcl92YXJpYWJsZXNbXSA9IHsKLSAgICB7VVNNVVNFUlNQSU5MT0NLLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMSwgezF9fSwKLSAgICB7VVNNVVNFUlNFQ1VSSVRZTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgM319LAotICAgIHtVU01VU0VSQ0xPTkVGUk9NLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgNH19LAotICAgIHtVU01VU0VSQVVUSFBST1RPQ09MLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgNX19LAotICAgIHtVU01VU0VSQVVUSEtFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDZ9fSwKLSAgICB7VVNNVVNFUk9XTkFVVEhLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCA3fX0sCi0gICAge1VTTVVTRVJQUklWUFJPVE9DT0wsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCA4fX0sCi0gICAge1VTTVVTRVJQUklWS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgOX19LAotICAgIHtVU01VU0VST1dOUFJJVktFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDEwfX0sCi0gICAge1VTTVVTRVJQVUJMSUMsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxMX19LAotICAgIHtVU01VU0VSU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTJ9fSwKLSAgICB7VVNNVVNFUlNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxM319LAorICAgIHtVU01VU0VSU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAxLCB7MX19LAorICAgIHtVU01VU0VSU0VDVVJJVFlOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAzfX0sCisgICAge1VTTVVTRVJDTE9ORUZST00sIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA0fX0sCisgICAge1VTTVVTRVJBVVRIUFJPVE9DT0wsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA1fX0sCisgICAge1VTTVVTRVJBVVRIS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgNn19LAorICAgIHtVU01VU0VST1dOQVVUSEtFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDd9fSwKKyAgICB7VVNNVVNFUlBSSVZQUk9UT0NPTCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDh9fSwKKyAgICB7VVNNVVNFUlBSSVZLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA5fX0sCisgICAge1VTTVVTRVJPV05QUklWS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTB9fSwKKyAgICB7VVNNVVNFUlBVQkxJQywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDExfX0sCisgICAge1VTTVVTRVJTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxMn19LAorICAgIHtVU01VU0VSU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDEzfX0sCiAKIH07CiAKQEAgLTYyLDYgKzcwLDcgQEAKICAgICAgICAgICAgICAgICAgdXNtVXNlcl92YXJpYWJsZXNfb2lkKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOSVRfUkVHSVNURVJfVVNNVVNFUl9DT05URVhUCiB2b2lkCiBpbml0X3JlZ2lzdGVyX3VzbVVzZXJfY29udGV4dChjb25zdCBjaGFyICpjb250ZXh0TmFtZSkgewogICAgIHJlZ2lzdGVyX21pYl9jb250ZXh0KCJzbm1wdjMvdXNtVXNlciIsCkBAIC03Myw2ICs4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9NSUJfUFJJT1JJVFksIDAsIDAsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUsIC0xLCAwKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOSVRfUkVHSVNURVJfVVNNVVNFUl9DT05URVhUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiB1c21fZ2VuZXJhdGVfT0lECkBAIC0zMDEsOCArMzExLDExIEBACiAgICAgaWYgKCF2cCB8fCAhbmFtZSB8fCAhbGVuZ3RoIHx8ICF2YXJfbGVuKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICp3cml0ZV9tZXRob2QgPSAwOyAgICAgICAgICAvKiBhc3N1bWUgaXQgaXNudCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7ICAgICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgIC8qIGFzc3VtZSBpdCBpc250IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7ICAgIAorCisgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7CiAKICAgICBpZiAodnAtPm1hZ2ljICE9IFVTTVVTRVJTUElOTE9DSykgewogICAgICAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07CkBAIC0zMTUsNyArMzI4LDcgQEAKICAgICAgICAgICAgIChleGFjdCA9PSAxICYmIHJ0ZXN0ICE9IDApKSB7CiAgICAgICAgICAgICBpZiAodmFyX2xlbikKICAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIG1lbXNldChuZXduYW1lLCAwLCBzaXplb2YobmV3bmFtZSkpOwogICAgICAgICBpZiAoKChpbnQpICpsZW5ndGgpIDw9IChpbnQpIHZwLT5uYW1lbGVuIHx8IHJ0ZXN0ID09IC0xKSB7CkBAIC0zNzIsNiArMzg1LDcgQEAKICAgICAgICAgICAgIGluZGV4T2lkID0gdXNtX2dlbmVyYXRlX09JRCh2cC0+bmFtZSwgdnAtPm5hbWVsZW4sIHVwdHIsICZsZW4pOwogICAgICAgICAgICAgKmxlbmd0aCA9IGxlbjsKICAgICAgICAgICAgIG1lbW1vdmUobmFtZSwgaW5kZXhPaWQsIGxlbiAqIHNpemVvZihvaWQpKTsKKwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbVVzZXIiLCAiRm91bmQgdXNlcjogJXMgLSAiLCB1cHRyLT5uYW1lKSk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgdXB0ci0+ZW5naW5lSURMZW47IGkrKykgewogICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidXNtVXNlciIsICIgJXgiLCB1cHRyLT5lbmdpbmVJRFtpXSkpOwpAQCAtMzg0LDEwICszOTgsMTEgQEAKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChoZWFkZXJfZ2VuZXJpYyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGlmIC0tIHZwLT5tYWdpYyAhPSBVU01VU0VSU1BJTkxPQ0sgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICBjYXNlIFVTTVVTRVJTUElOTE9DSzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3VzbVVzZXJTcGluTG9jazsKICAgICAgICAgbG9uZ19yZXQgPSB1c21Vc2VyU3BpbkxvY2s7CkBAIC00NTgsNyArNDczLDcgQEAKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3VzbVVzZXJQdWJsaWM7CiAgICAgICAgIGlmICh1cHRyKSB7CiAgICAgICAgICAgICBpZiAodXB0ci0+dXNlclB1YmxpY1N0cmluZykgewotICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKChjaGFyICopIHVwdHItPnVzZXJQdWJsaWNTdHJpbmcpOworICAgICAgICAgICAgICAgICp2YXJfbGVuID0gdXB0ci0+dXNlclB1YmxpY1N0cmluZ0xlbjsKICAgICAgICAgICAgICAgICByZXR1cm4gdXB0ci0+dXNlclB1YmxpY1N0cmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpzdHJpbmcgPSAwOwpAQCAtNDgzLDE1ICs0OTgsMjEgQEAKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBkZWZhdWx0OgogICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3VzbVVzZXJcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAibm8gd3JpdGUgc3VwcG9ydCBmb3IgdmFyX3VzbVVzZXJcbiIpKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTlVMTDsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdmFyX3VzbVVzZXIoKSAqLwogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAorCiAvKgogICogd3JpdGVfdXNtVXNlclNwaW5Mb2NrKCk6IGNhbGxlZCB3aGVuIGEgc2V0IGlzIHBlcmZvcm1lZCBvbiB0aGUKICAqIHVzbVVzZXJTcGluTG9jayBvYmplY3QgCkBAIC03NDUsNyArNzY2LDYgQEAKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob3B0cik7Ci0gICAgICAgIG9wdHIgPSBOVUxMOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgaWYgKCh1cHRyID0gdXNtX3BhcnNlX3VzZXIobmFtZSwgbmFtZV9sZW4pKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAocmVzZXRPbkZhaWwpIHsKQEAgLTg4OCw3ICs5MDgsNiBAQAogICAgICAgICB1cHRyLT5hdXRoS2V5TGVuID0gYnVmbGVuOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob2xka2V5KTsKLSAgICAgICAgb2xka2V5ID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIGlmICgodXB0ciA9IHVzbV9wYXJzZV91c2VyKG5hbWUsIG5hbWVfbGVuKSkgIT0gTlVMTCAmJiByZXNldE9uRmFpbCkgewogICAgICAgICAgICAgU05NUF9GUkVFKHVwdHItPmF1dGhLZXkpOwpAQCAtMTAxMyw3ICsxMDMyLDYgQEAKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob3B0cik7Ci0gICAgICAgIG9wdHIgPSBOVUxMOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgaWYgKCh1cHRyID0gdXNtX3BhcnNlX3VzZXIobmFtZSwgbmFtZV9sZW4pKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAocmVzZXRPbkZhaWwpIHsKQEAgLTExMzgsNyArMTE1Niw2IEBACiAgICAgICAgIHVwdHItPnByaXZLZXlMZW4gPSBidWZsZW47CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvbGRrZXkpOwotICAgICAgICBvbGRrZXkgPSBOVUxMOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgaWYgKCh1cHRyID0gdXNtX3BhcnNlX3VzZXIobmFtZSwgbmFtZV9sZW4pKSAhPSBOVUxMICYmIHJlc2V0T25GYWlsKSB7CiAgICAgICAgICAgICBTTk1QX0ZSRUUodXB0ci0+cHJpdktleSk7CkBAIC0xMTY0LDcgKzExODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gdXNtVXNlclB1YmxpYyBub3QgQVNOX09DVEVUX1NUUlxuIikpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgIH0KLSAgICBpZiAodmFyX3ZhbF9sZW4gPCAwIHx8IHZhcl92YWxfbGVuID4gMzIpIHsKKyAgICBpZiAodmFyX3ZhbF9sZW4gPiAzMikgewogICAgICAgICBERUJVR01TR1RMKCgidXNtVXNlciIsICJ3cml0ZSB0byB1c21Vc2VyUHVibGljOiBiYWQgbGVuZ3RoXG4iKSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKICAgICB9CkBAIC0xMTc3LDE0ICsxMTk0LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKHVwdHItPnVzZXJQdWJsaWNTdHJpbmcpCiAgICAgICAgICAgICBmcmVlKHVwdHItPnVzZXJQdWJsaWNTdHJpbmcpOwotICAgICAgICB1cHRyLT51c2VyUHVibGljU3RyaW5nID0gKHVfY2hhciAqKSBtYWxsb2ModmFyX3ZhbF9sZW4gKyAxKTsKKyAgICAgICAgdXB0ci0+dXNlclB1YmxpY1N0cmluZyA9ICh1X2NoYXIgKikgbWFsbG9jKHZhcl92YWxfbGVuKTsKICAgICAgICAgaWYgKHVwdHItPnVzZXJQdWJsaWNTdHJpbmcgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgfQogICAgICAgICBtZW1jcHkodXB0ci0+dXNlclB1YmxpY1N0cmluZywgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOwotICAgICAgICB1cHRyLT51c2VyUHVibGljU3RyaW5nW3Zhcl92YWxfbGVuXSA9IDA7Ci0gICAgICAgIERFQlVHTVNHKCgidXNtVXNlciIsICJzZXR0aW5nIHB1YmxpYyBzdHJpbmc6ICVkIC0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICB2YXJfdmFsX2xlbiwgdXB0ci0+dXNlclB1YmxpY1N0cmluZykpOworICAgICAgICB1cHRyLT51c2VyUHVibGljU3RyaW5nTGVuID0gdmFyX3ZhbF9sZW47CisgICAgICAgIERFQlVHTVNHKCgidXNtVXNlciIsICJzZXR0aW5nIHB1YmxpYyBzdHJpbmc6ICVkIC0gIiwgKGludCl2YXJfdmFsX2xlbikpOworICAgICAgICBERUJVR01TR0hFWCgoInVzbVVzZXIiLCB1cHRyLT51c2VyUHVibGljU3RyaW5nLCB2YXJfdmFsX2xlbikpOworICAgICAgICBERUJVR01TRygoInVzbVVzZXIiLCAiXG4iKSk7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgd3JpdGVfdXNtVXNlclB1YmxpYygpICovCkBAIC0xMjQxLDcgKzEyNTksNyBAQAogICAgICAgICAgICAgICogQ29udmVudGlvbiBhcHBseS4gIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtVXNlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9uZ19yZXQgJWQgdXB0ci0+c3QgJWQgdXB0ci0+c3RhdHVzICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvbmdfcmV0ICVsZCB1cHRyLT5zdCAlZCB1cHRyLT5zdGF0dXMgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsb25nX3JldCwgdXB0ci0+dXNlclN0b3JhZ2VUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgdXB0ci0+dXNlclN0YXR1cykpOwogCkBAIC0xMjczLDYgKzEyOTEsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgd3JpdGVfdXNtVXNlclN0b3JhZ2VUeXBlKCkgKi8KIAorCiAvKgogICogUmV0dXJuIDEgaWYgZW5vdWdoIG9iamVjdHMgaGF2ZSBiZWVuIHNldCB1cCB0byB0cmFuc2l0aW9uIHJvd1N0YXR1cyB0bwogICogbm90SW5TZXJ2aWNlKDIpIG9yIGFjdGl2ZSgxKS4gIApAQCAtMTQ3OSw3ICsxNDk4LDkgQEAKICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gIC8qIHdyaXRlX3VzbVVzZXJTdGF0dXMgKi8KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKICNpZiAwCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oCmluZGV4IGU5MjBiMjAuLjUzZDE0MTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaApAQCAtMTUsMTAgKzE1LDEwIEBACiAjZGVmaW5lIFVTTV9MRU5HVEhfT0lEX01BWAk2NgogCiAvKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZQogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogY29uZmlnX2FkZF9taWIoU05NUC1VU0VSLUJBU0VELVNNLU1JQikKIAogICAgIC8qCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGVuZ2luZUlETGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqbmFtZSwgc2l6ZV90ICogbmFtZUxlbik7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlclNwaW5Mb2NrOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlckNsb25lRnJvbTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJBdXRoUHJvdG9jb2w7CkBAIC02Myw1ICs2NCw2IEBACiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyUHVibGljOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlclN0b3JhZ2VUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlclN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9VU01VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaAppbmRleCA2MGY2NjZkLi4wY2NhOWEzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oCkBAIC03LDggKzcsMTAgQEAKICAqLwogCiBjb25maWdfcmVxdWlyZShzbm1wdjMvc25tcEVuZ2luZSkKLWNvbmZpZ19yZXF1aXJlKHNubXB2My9zbm1wTVBEU3RhdHMpCi1jb25maWdfcmVxdWlyZShzbm1wdjMvdXNtU3RhdHMpCitjb25maWdfdmVyc2lvbl9yZXF1aXJlKChzbm1wdjMvc25tcE1QRFN0YXRzLCA1LjUsIHNubXB2My9zbm1wTVBEU3RhdHNfNV81KSkKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KK2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKHNubXB2My91c21TdGF0cywgNS41LCBzbm1wdjMvdXNtU3RhdHNfNV81KSkKIGNvbmZpZ19yZXF1aXJlKHNubXB2My91c21Db25mKQogY29uZmlnX3JlcXVpcmUoc25tcHYzL3VzbVVzZXIpCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5TTVBWM01JQlNfSCAqLworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVjNNSUJTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3N0cnVjdC5oIGIvYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgKaW5kZXggMTBiODQzZC4uZDAyNWVkMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgKQEAgLTE2LDkgKzE2LDEwIEBACiAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKICAgICBjaGFyICAgICAgICAgICAgb3V0cHV0W1NUUk1BWF07CiAgICAgc3RydWN0IGV4dGVuc2libGUgKm5leHQ7Ci0gICAgdW5zaWduZWQgbG9uZyAgIG1pYm9pZFtNSUJNQVhdOworICAgIG9pZCAgICAgICAgICAgICBtaWJvaWRbTUlCTUFYXTsKICAgICBzaXplX3QgICAgICAgICAgbWlibGVuOwotICAgIGludCAgICAgICAgICAgICBwaWQ7CisgICAgaW50ICAgICAgICAgICAgIG1pYnByaW9yaXR5OworICAgIG5ldHNubXBfcGlkX3QgICBwaWQ7CiAjaWYgZGVmaW5lZChXSU4zMikKICAgICBIQU5ETEUgICAgICAgICAgdGlkOyAgICAgICAgICAgICAgICAvKiBXSU4zMiB0aHJlYWQgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmggYi9hZ2VudC9taWJncm91cC90YXJnZXQuaAppbmRleCAzOWZhZGZlLi41OGM1YjRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQuaAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQuaApAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZ19yZXF1aXJlKHRhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5KQogY29uZmlnX3JlcXVpcmUodGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeSkKIGNvbmZpZ19yZXF1aXJlKHRhcmdldC90YXJnZXQpCi1jb25maWdfcmVxdWlyZSh0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzKQorY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgodGFyZ2V0L3RhcmdldF9jb3VudGVycywgNS41LCB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNSkpCiBjb25maWdfYWRkX21pYihTTk1QLVRBUkdFVC1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYwppbmRleCBiYjczMDJkLi5iMWViMDBhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMKQEAgLTE1LDI2ICsxNSwyNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAic25tcFRhcmdldEFkZHJFbnRyeS5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKICNkZWZpbmUgc25tcFRhcmdldEFkZHJPSURMZW4gMTEgLypUaGlzIGlzIGJhc2UrY29sdW1uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaS5lLiBldmVyeXRoaW5nIGJ1dCBpbmRleCAqLwogCi1vaWQgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJPSURbc25tcFRhcmdldEFkZHJPSURMZW5dID0KK3N0YXRpYyBvaWQgICAgICBzbm1wVGFyZ2V0QWRkck9JRFtzbm1wVGFyZ2V0QWRkck9JRExlbl0gPQogICAgIHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDIsIDEsIDAgfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc25tcFRhcmdldFNwaW5Mb2NrID0gMDsKLXN0YXRpYyBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqYUFkZHJUYWJsZSA9IDA7CitzdGF0aWMgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmFBZGRyVGFibGUgPSBOVUxMOwogCiAKK3N0YXRpYyBpbnQKK3N0b3JlX3NubXBUYXJnZXRBZGRyRW50cnkoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CisKIC8qCiAgKiBVdGlsaXR5IHJvdXRpbmVzIAogICovCkBAIC00NSwxMSArNDYsMTIgQEAKIH0KIAogc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKgotZ2V0X2FkZHJGb3JOYW1lKGNoYXIgKm5hbWUpCitnZXRfYWRkckZvck5hbWUyKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgbmFtZUxlbikKIHsKICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqcHRyOwogICAgIGZvciAocHRyID0gYUFkZHJUYWJsZTsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAocHRyLT5uYW1lICYmIHN0cmNtcChwdHItPm5hbWUsIG5hbWUpID09IDApCisgICAgICAgIGlmIChwdHItPm5hbWVMZW4gPT0gbmFtZUxlbiAmJgorICAgICAgICAgICAgbWVtY21wKHB0ci0+bmFtZURhdGEsIG5hbWUsIG5hbWVMZW4pID09IDApCiAgICAgICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTY3LDIxICs2OSwyMiBAQAogICAgIG5ld0VudHJ5ID0gbWFsbG9jKHNpemVvZigqbmV3RW50cnkpKTsKIAogICAgIGlmIChuZXdFbnRyeSkgewotICAgICAgICBuZXdFbnRyeS0+bmFtZSA9IDA7CisgICAgICAgIG5ld0VudHJ5LT5uYW1lRGF0YSA9IE5VTEw7CisgICAgICAgIG5ld0VudHJ5LT5uYW1lTGVuID0gMDsKIAogICAgICAgICBuZXdFbnRyeS0+dERvbWFpbkxlbiA9IDA7Ci0gICAgICAgIG5ld0VudHJ5LT50QWRkcmVzcyA9IDA7CisgICAgICAgIG5ld0VudHJ5LT50QWRkcmVzcyA9IE5VTEw7CiAKICAgICAgICAgbmV3RW50cnktPnRpbWVvdXQgPSAxNTAwOwogICAgICAgICBuZXdFbnRyeS0+cmV0cnlDb3VudCA9IDM7CiAKICAgICAgICAgbmV3RW50cnktPnRhZ0xpc3QgPSBzdHJkdXAoIiIpOwotICAgICAgICBuZXdFbnRyeS0+cGFyYW1zID0gMDsKKyAgICAgICAgbmV3RW50cnktPnBhcmFtcyA9IE5VTEw7CiAKICAgICAgICAgbmV3RW50cnktPnN0b3JhZ2VUeXBlID0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFOwogICAgICAgICBuZXdFbnRyeS0+cm93U3RhdHVzID0gU05NUF9ST1dfTk9ORVhJU1RFTlQ7CiAgICAgICAgIG5ld0VudHJ5LT5zZXNzID0gTlVMTDsKLSAgICAgICAgbmV3RW50cnktPm5leHQgPSAwOworICAgICAgICBuZXdFbnRyeS0+bmV4dCA9IE5VTEw7CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld0VudHJ5OwpAQCAtOTUsMTEgKzk4LDExIEBACiB2b2lkCiBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2Uoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnJlYXBlZCkKIHsKLSAgICBpZiAocmVhcGVkLT5zZXNzICE9IE5VTEwpIHsKKyAgICBpZiAocmVhcGVkLT5zZXNzKQogICAgICAgICBzbm1wX2Nsb3NlKHJlYXBlZC0+c2Vzcyk7Ci0gICAgfQotICAgIFNOTVBfRlJFRShyZWFwZWQtPm5hbWUpOwotICAgIFNOTVBfRlJFRShyZWFwZWQtPnRBZGRyZXNzKTsKKyAgICBlbHNlCisgICAgICAgIFNOTVBfRlJFRShyZWFwZWQtPnRBZGRyZXNzKTsKKyAgICBTTk1QX0ZSRUUocmVhcGVkLT5uYW1lRGF0YSk7CiAgICAgU05NUF9GUkVFKHJlYXBlZC0+dGFnTGlzdCk7CiAgICAgU05NUF9GUkVFKHJlYXBlZC0+cGFyYW1zKTsKIApAQCAtMTE5LDM0ICsxMjIsMjggQEAKIHsKICAgICBzdGF0aWMgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmN1cnJfc3RydWN0LCAqcHJldl9zdHJ1Y3Q7CiAgICAgaW50ICAgICAgICAgICAgIGk7Ci0gICAgc2l6ZV90ICAgICAgICAgIG5ld09JRExlbiA9IDAsIGN1cnJPSURMZW4gPSAwOwotICAgIG9pZCAgICAgICAgICAgICBuZXdPSURbMTI4XSwgY3Vyck9JRFsxMjhdOwogCiAgICAgLyoKICAgICAgKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIHRvcCAKICAgICAgKi8KLSAgICBpZiAoKHByZXZfc3RydWN0ID0gY3Vycl9zdHJ1Y3QgPSAqbGlzdFB0cikgPT0gMCkgeworICAgIGlmICgocHJldl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdCA9ICpsaXN0UHRyKSA9PSBOVUxMKSB7CiAgICAgICAgICpsaXN0UHRyID0gbmV3RW50cnk7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewogICAgICAgICAvKgotICAgICAgICAgKiBnZXQgdGhlICdPSUQnIHZhbHVlIG9mIHRoZSBuZXcgZW50cnkgCi0gICAgICAgICAqLwotICAgICAgICBuZXdPSURMZW4gPSBzdHJsZW4obmV3RW50cnktPm5hbWUpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgbmV3T0lETGVuOyBpKyspIHsKLSAgICAgICAgICAgIG5ld09JRFtpXSA9IG5ld0VudHJ5LT5uYW1lW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKICAgICAgICAgICogc2VhcmNoIHRocm91Z2ggdGhlIGxpc3QgZm9yIGFuIGVxdWFsIG9yIGdyZWF0ZXIgT0lEIHZhbHVlIAogICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IDApIHsKLSAgICAgICAgICAgIGN1cnJPSURMZW4gPSBzdHJsZW4oY3Vycl9zdHJ1Y3QtPm5hbWUpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGN1cnJPSURMZW47IGkrKykgewotICAgICAgICAgICAgICAgIGN1cnJPSURbaV0gPSBjdXJyX3N0cnVjdC0+bmFtZVtpXTsKKyAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGkgPSBtZW1jbXAobmV3RW50cnktPm5hbWVEYXRhLCBjdXJyX3N0cnVjdC0+bmFtZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5uYW1lTGVuIDwgY3Vycl9zdHJ1Y3QtPm5hbWVMZW4gPworICAgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+bmFtZUxlbiA6IGN1cnJfc3RydWN0LT5uYW1lTGVuKTsKKyAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3RW50cnktPm5hbWVMZW4gPCBjdXJyX3N0cnVjdC0+bmFtZUxlbikKKyAgICAgICAgICAgICAgICAgICAgaSA9IC0xOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld0VudHJ5LT5uYW1lTGVuID4gY3Vycl9zdHJ1Y3QtPm5hbWVMZW4pCisgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpID0gc25tcF9vaWRfY29tcGFyZShuZXdPSUQsIG5ld09JRExlbiwgY3Vyck9JRCwgY3Vyck9JRExlbik7CiAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7ICAgICAgIC8qIEV4YWN0IG1hdGNoLCBvdmVyd3JpdGUgd2l0aCBuZXcgc3RydWN0ICovCiAgICAgICAgICAgICAgICAgbmV3RW50cnktPm5leHQgPSBjdXJyX3N0cnVjdC0+bmV4dDsKICAgICAgICAgICAgICAgICAvKgpAQCAtMTk3LDE0ICsxOTQsMTQgQEAKIHsKICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqdHB0cjsKIAotICAgIGlmICgodHB0ciA9ICpsaXN0UHRyKSA9PSAwKQorICAgIGlmICgodHB0ciA9ICpsaXN0UHRyKSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgZWxzZSBpZiAodHB0ciA9PSBvbGRFbnRyeSkgewogICAgICAgICAqbGlzdFB0ciA9ICgqbGlzdFB0ciktPm5leHQ7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZSh0cHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0cHRyLT5uZXh0ICE9IDApIHsKKyAgICAgICAgd2hpbGUgKHRwdHItPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHRwdHItPm5leHQgPT0gb2xkRW50cnkpIHsKICAgICAgICAgICAgICAgICB0cHRyLT5uZXh0ID0gdHB0ci0+bmV4dC0+bmV4dDsKICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2Uob2xkRW50cnkpOwpAQCAtMjM0LDEyICsyMzEsMTIgQEAKICAgICAgKi8KICAgICBtZW1jcHkobmV3TnVtLCBiYXNlTmFtZSwgYmFzZU5hbWVMZW4gKiBzaXplb2Yob2lkKSk7CiAKLSAgICBmb3IgKHRlbXBfc3RydWN0ID0gYUFkZHJUYWJsZTsgdGVtcF9zdHJ1Y3QgIT0gMDsKKyAgICBmb3IgKHRlbXBfc3RydWN0ID0gYUFkZHJUYWJsZTsgdGVtcF9zdHJ1Y3QgIT0gTlVMTDsKICAgICAgICAgIHRlbXBfc3RydWN0ID0gdGVtcF9zdHJ1Y3QtPm5leHQpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIHN0cmxlbih0ZW1wX3N0cnVjdC0+bmFtZSk7IGkrKykgewotICAgICAgICAgICAgbmV3TnVtW2Jhc2VOYW1lTGVuICsgaV0gPSB0ZW1wX3N0cnVjdC0+bmFtZVtpXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBfc3RydWN0LT5uYW1lTGVuOyBpKyspIHsKKyAgICAgICAgICAgIG5ld051bVtiYXNlTmFtZUxlbiArIGldID0gKHVuc2lnbmVkIGNoYXIpdGVtcF9zdHJ1Y3QtPm5hbWVEYXRhW2ldOwogICAgICAgICB9Ci0gICAgICAgIG15T0lETGVuID0gYmFzZU5hbWVMZW4gKyBzdHJsZW4odGVtcF9zdHJ1Y3QtPm5hbWUpOworICAgICAgICBteU9JRExlbiA9IGJhc2VOYW1lTGVuICsgdGVtcF9zdHJ1Y3QtPm5hbWVMZW47CiAgICAgICAgIGkgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld051bSwgbXlPSURMZW4pOwogICAgICAgICAvKgogICAgICAgICAgKiBBc3N1bWVzIHRoYXQgdGhlIGxpbmtlZCBsaXN0IHNvcnRlZCBieSBPSUQsIGxvdyB0byBoaWdoIApAQCAtMjUyLDcgKzI0OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gdGVtcF9zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuICgwKTsKKyAgICByZXR1cm4gTlVMTDsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUgICovCiAKIApAQCAtMjc3LDQzICsyNzQsNDQgQEAKICAqIGZvciB0aGUgc25tcFRhcmdldEFkZHJFbnRyeSBtaWIgCiAgKi8KIAotc3RydWN0IHZhcmlhYmxlMiBzbm1wVGFyZ2V0QWRkckVudHJ5X3ZhcmlhYmxlc1tdID0gewotICAgIHtTTk1QVEFSR0VUQUREUlRET01BSU4sIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmFyaWFibGUyIHNubXBUYXJnZXRBZGRyRW50cnlfdmFyaWFibGVzW10gPSB7CisgICAge1NOTVBUQVJHRVRBRERSVERPTUFJTiwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSVERPTUFJTkNPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlRBRERSRVNTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSVEFERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlRBRERSRVNTQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSVElNRU9VVCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJUSU1FT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSVElNRU9VVENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlJFVFJZQ09VTlQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSUkVUUllDT1VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlJFVFJZQ09VTlRDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJUQUdMSVNULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSVEFHTElTVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSVEFHTElTVENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlBBUkFNUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlBBUkFNUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSUEFSQU1TQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJTVE9SQUdFVFlQRUNPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJST1dTVEFUVVNDT0xVTU59fSwKIAogfTsKIAotc3RydWN0IHZhcmlhYmxlMiBzbm1wVGFyZ2V0U3BpbkxvY2tfdmFyW10gPSB7Ci0gICAge1NOTVBUQVJHRVRTUElOTE9DSywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3RhcmdldFNwaW5Mb2NrLCAxLCB7MX19CitzdGF0aWMgY29uc3Qgc3RydWN0IHZhcmlhYmxlMiBzbm1wVGFyZ2V0U3BpbkxvY2tfdmFyW10gPSB7CisgICAge1NOTVBUQVJHRVRTUElOTE9DSywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RhcmdldFNwaW5Mb2NrLCAxLCB7MX19CiB9OwogCi1zdGF0aWMgb2lkICAgICAgc25tcFRhcmdldFNwaW5Mb2NrX29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSB9Oworc3RhdGljIGNvbnN0IG9pZCBzbm1wVGFyZ2V0U3BpbkxvY2tfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxIH07CiAKIC8qCiAgKiBub3cgbG9hZCB0aGlzIG1pYiBpbnRvIHRoZSBhZ2VudHMgbWliIHRhYmxlIAogICovCi1vaWQgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJFbnRyeV92YXJpYWJsZXNfb2lkW10gPQorc3RhdGljIGNvbnN0IG9pZCBzbm1wVGFyZ2V0QWRkckVudHJ5X3ZhcmlhYmxlc19vaWRbXSA9CiAgICAgeyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgMiwgMSB9OwogCiAKIHZvaWQKIGluaXRfc25tcFRhcmdldEFkZHJFbnRyeSh2b2lkKQogewotICAgIGFBZGRyVGFibGUgPSAwOworICAgIGFBZGRyVGFibGUgPSBOVUxMOwogICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgImluaXRcbiIpKTsKICAgICBSRUdJU1RFUl9NSUIoInRhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJFbnRyeV92YXJpYWJsZXMsIHZhcmlhYmxlMiwKQEAgLTMyMiw3ICszMjAsOCBAQAogICAgICAgICAgICAgICAgICB2YXJpYWJsZTIsIHNubXBUYXJnZXRTcGluTG9ja19vaWQpOwogCiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInRhcmdldEFkZHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyLCAwLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAoKikodm9pZCkpMCwgTlVMTCk7CiAKICAgICAvKgogICAgICAqIHdlIG5lZWQgdG8gYmUgY2FsbGVkIGJhY2sgbGF0ZXIgCkBAIC0zMzIsMzcgKzMzMSwyOCBAQAogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfc25tcFRhcmdldEFkZHJFbnRyeSAqLwogCi0KLWludAotc25tcFRhcmdldEFkZHJfYWRkTmFtZShzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksIGNoYXIgKmNwdHIpCit2b2lkCitzaHV0ZG93bl9zbm1wVGFyZ2V0QWRkckVudHJ5KHZvaWQpCiB7Ci0gICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICBpZiAoY3B0ciA9PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIG5hbWUgaW4gY29uZmlnIHN0cmluZ1xuIikpOwotICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihjcHRyKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogc3BlYyBjaGVjayBmb3Igc3RyaW5nIDEtMzIgCi0gICAgICAgICAqLwotICAgICAgICBpZiAobGVuIDwgMSB8fCBsZW4gPiAzMikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5hbWUgb3V0IG9mIHJhbmdlIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKLSAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnktPm5hbWUgPSBzdHJkdXAoY3B0cik7Ci0gICAgfQotICAgIHJldHVybiAoMSk7Ci19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZE5hbWUgKi8KKyAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqcHRyOworICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpuZXh0OwogCisgICAgZm9yIChwdHIgPSBhQWRkclRhYmxlOyBwdHI7IHB0ciA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKKyAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKHB0cik7CisgICAgfQorICAgIGFBZGRyVGFibGUgPSBOVUxMOworCisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZV9zbm1wVGFyZ2V0QWRkckVudHJ5LCBOVUxMLCBGQUxTRSk7Cit9CiAKIGludAogc25tcFRhcmdldEFkZHJfYWRkVERvbWFpbihzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksIGNoYXIgKmNwdHIpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbiA9IDEyODsKIAotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHREb21haW4gaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtMzkyLDcgKzM4Miw3IEBACiBzbm1wVGFyZ2V0QWRkcl9hZGRUQWRkcmVzcyhzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyLCBzaXplX3QgbGVuKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHRBZGRyZXNzIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQxOCwxMSArNDA4LDExIEBACiBpbnQKIHNubXBUYXJnZXRBZGRyX2FkZFRpbWVvdXQoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LCBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gVGltZW91dCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogVGltZW91dCBpcyBub3QgYSBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC00NDMsMTEgKzQzMywxMSBAQAogc25tcFRhcmdldEFkZHJfYWRkUmV0cnlDb3VudChzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBSZXRyeSBDb3VudCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogUmV0cnkgQ291bnQgaXMgbm90IGEgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNDcwLDE3ICs0NjAsMTYgQEAKIGludAogc25tcFRhcmdldEFkZHJfYWRkVGFnTGlzdChzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksIGNoYXIgKmNwdHIpCiB7Ci0gICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyB0YWcgbGlzdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbGVuID0gc3RybGVuKGNwdHIpOworICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGNwdHIpOwogICAgICAgICAvKgogICAgICAgICAgKiBzcGVjIGNoZWNrIGZvciBzdHJpbmcgMC0yNTUgCiAgICAgICAgICAqLwotICAgICAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiAyNTUpIHsKKyAgICAgICAgaWYgKGxlbiA+IDI1NSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IHRhZyBsaXN0IG91dCBvZiByYW5nZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gKDApOwpAQCAtNDk2LDcgKzQ4NSw3IEBACiBzbm1wVGFyZ2V0QWRkcl9hZGRQYXJhbXMoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LCBjaGFyICpjcHRyKQogewogICAgIHNpemVfdCAgICAgICAgICBsZW47Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gcGFyYW1zIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTUyMCwxNSArNTA5LDE1IEBACiBzbm1wVGFyZ2V0QWRkcl9hZGRTdG9yYWdlVHlwZShzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICBidWZmWzEwMjRdOwotCi0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gc3RvcmFnZSB0eXBlIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHN0b3JhZ2UgdHlwZSBpbiBjb25maWcgIgorICAgICAgICAgICAgICAgICAgICAic3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBzdG9yYWdlIHR5cGUgaXMgbm90IGEgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOworICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogc3RvcmFnZSB0eXBlIGlzIG5vdCBhIGRpZ2l0ICIKKyAgICAgICAgICAgICAgICAgICAgImluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKICAgICB9CiAgICAgLyoKQEAgLTU0MCwxNCArNTI5LDEzIEBACiAgICAgICAgICAgICAgKGVudHJ5LT5zdG9yYWdlVHlwZSAhPSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUpICYmCiAgICAgICAgICAgICAgKGVudHJ5LT5zdG9yYWdlVHlwZSAhPSBTTk1QX1NUT1JBR0VfUEVSTUFORU5UKSAmJgogICAgICAgICAgICAgIChlbnRyeS0+c3RvcmFnZVR5cGUgIT0gU05NUF9TVE9SQUdFX1JFQURPTkxZKSkgewotICAgICAgICBzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZiksCi0gICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IHN0b3JhZ2UgdHlwZSBub3QgYSB2YWxpZCB2YWx1ZSBvZiBvdGhlciglZCksIHZvbGF0aWxlKCVkKSwgbm9udm9sYXRpbGUoJWQpLCBwZXJtYW5lbnQoJWQpLCBvciByZWFkb25seSglZCkgaW4gY29uZmlnIHN0cmluZy5cbiIsCi0gICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX09USEVSLCBTTk1QX1NUT1JBR0VfVk9MQVRJTEUsCi0gICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFLCBTTk1QX1NUT1JBR0VfUEVSTUFORU5ULAotICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9SRUFET05MWSk7Ci0gICAgICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOwotICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsIGJ1ZmYpKTsKLQorICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBzdG9yYWdlIHR5cGUgbm90IGEgdmFsaWQgIgorICAgICAgICAgICAgICAgICAgICAidmFsdWUgb2Ygb3RoZXIoJWQpLCB2b2xhdGlsZSglZCksIG5vbnZvbGF0aWxlKCVkKSwgIgorICAgICAgICAgICAgICAgICAgICAicGVybWFuZW50KCVkKSwgb3IgcmVhZG9ubHkoJWQpIGluIGNvbmZpZyBzdHJpbmcuXG4iLAorICAgICAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfT1RIRVIsIFNOTVBfU1RPUkFHRV9WT0xBVElMRSwKKyAgICAgICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFLCBTTk1QX1NUT1JBR0VfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfUkVBRE9OTFkpKTsKICAgICAgICAgcmV0dXJuICgwKTsKICAgICB9CiAgICAgcmV0dXJuICgxKTsKQEAgLTU1OCwxNSArNTQ2LDE1IEBACiBzbm1wVGFyZ2V0QWRkcl9hZGRSb3dTdGF0dXMoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZmZbMTAyNF07Ci0KLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBSb3cgU3RhdHVzIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIFJvdyBTdGF0dXMgaW4gY29uZmlnICIKKyAgICAgICAgICAgICAgICAgICAgInN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogUm93IFN0YXR1cyBpcyBub3QgYSBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBSb3cgU3RhdHVzIGlzIG5vdCBhIGRpZ2l0IGluICIKKyAgICAgICAgICAgICAgICAgICAgImNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKICAgICB9CiAgICAgLyoKQEAgLTU3NiwxMiArNTY0LDExIEBACiAgICAgICAgICAgICAgICE9IFNOTVBfUk9XX0FDVElWRSkgJiYKICAgICAgICAgICAgICAoZW50cnktPnJvd1N0YXR1cyAhPSBTTk1QX1JPV19OT1RJTlNFUlZJQ0UpICYmCiAgICAgICAgICAgICAgKGVudHJ5LT5yb3dTdGF0dXMgIT0gU05NUF9ST1dfTk9UUkVBRFkpKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmYsIHNpemVvZihidWZmKSwKLSAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogUm93IFN0YXR1cyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiBhY3RpdmUoJWQpLCBub3RpbnNlcnZpY2UoJWQpLCBvciBub3RyZWFkeSglZCkgaW4gY29uZmlnIHN0cmluZy5cbiIsCi0gICAgICAgICAgICAgICAgU05NUF9ST1dfQUNUSVZFLCBTTk1QX1JPV19OT1RJTlNFUlZJQ0UsIFNOTVBfUk9XX05PVFJFQURZKTsKLSAgICAgICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgYnVmZikpOwotCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IFJvdyBTdGF0dXMgaXMgbm90IGEgdmFsaWQgIgorICAgICAgICAgICAgICAgICAgICAidmFsdWUgb2YgYWN0aXZlKCVkKSwgbm90aW5zZXJ2aWNlKCVkKSwgb3Igbm90cmVhZHkoJWQpICIKKyAgICAgICAgICAgICAgICAgICAgImluIGNvbmZpZyBzdHJpbmcuXG4iLAorICAgICAgICAgICAgICAgICAgICBTTk1QX1JPV19BQ1RJVkUsIFNOTVBfUk9XX05PVElOU0VSVklDRSwgU05NUF9ST1dfTk9UUkVBRFkpKTsKICAgICAgICAgcmV0dXJuICgwKTsKICAgICB9CiAgICAgcmV0dXJuICgxKTsKQEAgLTU5MSwyNCArNTc4LDQyIEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY2hhcl9wdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHIgPSBjaGFyX3B0ciwgYnVmZlsxMDI0XTsKKyAgICBjb25zdCBjaGFyICAgICAqY3B0ciA9IGNoYXJfcHRyOworICAgIGNoYXIgICAgICAgICAgICBidWZmWzEwMjRdLCAqYnB0cjsKICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqbmV3RW50cnk7CiAgICAgaW50ICAgICAgICAgICAgIGk7CisgICAgc2l6ZV90ICAgICAgICAgIGJ1Zmw7CiAKICAgICBuZXdFbnRyeSA9IHNubXBUYXJnZXRBZGRyVGFibGVfY3JlYXRlKCk7CiAKLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwotICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGROYW1lKG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CisgICAgY3B0ciA9IHNraXBfd2hpdGVfY29uc3QoY3B0cik7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBuYW1lIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworCisgICAgYnVmbCA9IDA7CisgICAgY3B0ciA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGNwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKikmbmV3RW50cnktPm5hbWVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmbCk7CisgICAgaWYgKGJ1ZmwgPCAxIHx8IGJ1ZmwgPiAzMikgeworICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBuYW1lIG91dCBvZiByYW5nZSBpbiBjb25maWcgIgorICAgICAgICAgICAgICAgICAgICAic3RyaW5nXG4iKSk7CisgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV3RW50cnktPm5hbWVMZW4gPSBidWZsOworCisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkVERvbWFpbihuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNwdHIgPQotICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjcHRyLAorICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChjcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICoqKSAmIG5ld0VudHJ5LT50QWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld0VudHJ5LT50QWRkcmVzc0xlbik7CiAgICAgaWYgKCFjcHRyIHx8ICEobmV3RW50cnktPnRBZGRyZXNzKSkgewpAQCAtNjE3LDUxICs2MjIsNTMgQEAKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFRpbWVvdXQobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFJldHJ5Q291bnQobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFRhZ0xpc3QobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFBhcmFtcyhuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkU3RvcmFnZVR5cGUobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFJvd1N0YXR1cyhuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNucHJpbnRmKGJ1ZmYsIHNpemVvZihidWZmKSwgInNubXBfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIsIHJlYWQ6ICVzXG4iLAotICAgICAgICAgICAgbmV3RW50cnktPm5hbWUpOwotICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOworICAgIGJwdHIgPSBidWZmOworICAgIGJwdHIgKz0gc3ByaW50ZihicHRyLCAic25tcF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkciwgcmVhZDogIik7CisgICAgYnB0ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGJwdHIsICh1X2NoYXIqKW5ld0VudHJ5LT5uYW1lRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPm5hbWVMZW4pOworICAgICpicHRyKysgPSAnXG4nOwogICAgIGZvciAoaSA9IDA7IGkgPCBuZXdFbnRyeS0+dERvbWFpbkxlbjsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKCZidWZmW3N0cmxlbihidWZmKV0sIHNpemVvZihidWZmKS1zdHJsZW4oYnVmZiktMSwKLSAgICAgICAgICAgICAgICAgIi4lZCIsIChpbnQpIG5ld0VudHJ5LT50RG9tYWluW2ldKTsKLSAgICAgICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7CisgICAgICAgIGJwdHIgKz0gc25wcmludGYoYnB0ciwgYnVmZiArIHNpemVvZihidWZmKSAtIGJwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIi4lZCIsIChpbnQpIG5ld0VudHJ5LT50RG9tYWluW2ldKTsKICAgICB9Ci0gICAgc25wcmludGYoJmJ1ZmZbc3RybGVuKGJ1ZmYpXSwgc2l6ZW9mKGJ1ZmYpLXN0cmxlbihidWZmKS0xLAotICAgICAgICAgICAgIiAlcyAlZCAlZCAlcyAlcyAlZCAlZFxuIiwKLSAgICAgICAgICAgIG5ld0VudHJ5LT50QWRkcmVzcywgbmV3RW50cnktPnRpbWVvdXQsIG5ld0VudHJ5LT5yZXRyeUNvdW50LAotICAgICAgICAgICAgbmV3RW50cnktPnRhZ0xpc3QsIG5ld0VudHJ5LT5wYXJhbXMsIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSwKLSAgICAgICAgICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMpOwotICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOwotICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgYnVmZikpOworICAgIGJwdHIgKz0gc25wcmludGYoYnB0ciwgYnVmZiArIHNpemVvZihidWZmKSAtIGJwdHIsCisgICAgICAgICAgICAgICAgICAgICAiICVzICVkICVkICVzICVzICVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPnRBZGRyZXNzLCBuZXdFbnRyeS0+dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5yZXRyeUNvdW50LCBuZXdFbnRyeS0+dGFnTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5wYXJhbXMsIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMpOworICAgIGJ1ZmZbIHNpemVvZihidWZmKSAtIDEgXSA9IDA7CisgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCAiJXMiLCBidWZmKSk7CiAKICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2FkZFRvTGlzdChuZXdFbnRyeSwgJmFBZGRyVGFibGUpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0ICovCkBAIC02NzcsNTMgKzY4NCw0OCBAQAogICogZm9yIHRoaXMgTUlCIHRhYmxlLiBJdCB3cml0ZXMgb3V0IGFsbCB0aGUgbm9uLXZvbGF0aWxlIHJvd3MgCiAgKiB0byBwZXJtYW5lbnQgc3RvcmFnZSBvbiBhIHNodXRkb3duICAKICAqLwotaW50CitzdGF0aWMgaW50CiBzdG9yZV9zbm1wVGFyZ2V0QWRkckVudHJ5KGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCiB7Ci0gICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmN1cnJfc3RydWN0OwotICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNvbnN0IHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpjdXJyX3N0cnVjdDsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XSwgKmN1ciwgKmVwID0gbGluZSArIHNpemVvZihsaW5lKTsKICAgICBpbnQgICAgICAgICAgICAgaTsKIAotICAgIGlmICgoY3Vycl9zdHJ1Y3QgPSBhQWRkclRhYmxlKSAhPSAwKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoKGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUgfHwKLSAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQpCi0gICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAoY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyA9PSBTTk1QX1JPV19BQ1RJVkUgfHwKLSAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyA9PSBTTk1QX1JPV19OT1RJTlNFUlZJQ0UpKSB7Ci0gICAgICAgICAgICAgICAgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgInRhcmdldEFkZHIgJXMgIiwgY3Vycl9zdHJ1Y3QtPm5hbWUpOwotICAgICAgICAgICAgICAgIGxpbmVbIHNpemVvZihsaW5lKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJyX3N0cnVjdC0+dERvbWFpbkxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKCZsaW5lW3N0cmxlbihsaW5lKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxpbmUpLXN0cmxlbihsaW5lKS0xLCAiLiVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBjdXJyX3N0cnVjdC0+dERvbWFpbltpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVbIHNpemVvZihsaW5lKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHJsY2F0KGxpbmUsICIgIiwgc2l6ZW9mKGxpbmUpKTsKLSAgICAgICAgICAgICAgICByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZygmbGluZVtzdHJsZW4obGluZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT50QWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+dEFkZHJlc3NMZW4pOwotCi0gICAgICAgICAgICAgICAgc25wcmludGYoJmxpbmVbc3RybGVuKGxpbmUpXSwgc2l6ZW9mKGxpbmUpLXN0cmxlbihsaW5lKS0xLAotICAgICAgICAgICAgICAgICAgICAgICAgIiAlaSAlaSBcIiVzXCIgJXMgJWkgJWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cmV0cnlDb3VudCwgY3Vycl9zdHJ1Y3QtPnRhZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cGFyYW1zLCBjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cm93U3RhdHVzKTsKLSAgICAgICAgICAgICAgICBsaW5lWyBzaXplb2YobGluZSktMSBdID0gMDsKLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogc3RvcmUgdG8gZmlsZSAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CisgICAgY3Vycl9zdHJ1Y3QgPSBhQWRkclRhYmxlOworICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSBOVUxMKSB7CisgICAgICAgIGlmICgoY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSB8fAorICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfUEVSTUFORU5UKSAmJgorICAgICAgICAgICAgKGN1cnJfc3RydWN0LT5yb3dTdGF0dXMgPT0gU05NUF9ST1dfQUNUSVZFIHx8CisgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyA9PSBTTk1QX1JPV19OT1RJTlNFUlZJQ0UpKSB7CisgICAgICAgICAgICBjdXIgPSBsaW5lICsgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAidGFyZ2V0QWRkciAiKTsKKyAgICAgICAgICAgIGN1ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKAorICAgICAgICAgICAgICAgIGN1ciwgKHVfY2hhciopY3Vycl9zdHJ1Y3QtPm5hbWVEYXRhLCBjdXJyX3N0cnVjdC0+bmFtZUxlbik7CisgICAgICAgICAgICAqY3VyKysgPSAnICc7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3Vycl9zdHJ1Y3QtPnREb21haW5MZW47IGkrKykgeworICAgICAgICAgICAgICAgIGN1ciArPSBzbnByaW50ZihjdXIsIGVwIC0gY3VyLCAiLiVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgY3Vycl9zdHJ1Y3QtPnREb21haW5baV0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3Vycl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdC0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICAgICAgKmN1cisrID0gJyAnOworICAgICAgICAgICAgY3VyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoCisgICAgICAgICAgICAgICAgY3VyLCBjdXJyX3N0cnVjdC0+dEFkZHJlc3MsIGN1cnJfc3RydWN0LT50QWRkcmVzc0xlbik7CisgICAgICAgICAgICBjdXIgKz0gc25wcmludGYoY3VyLCBlcCAtIGN1ciwgIiAlaSAlaSBcIiVzXCIgJXMgJWkgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yZXRyeUNvdW50LCBjdXJyX3N0cnVjdC0+dGFnTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cGFyYW1zLCBjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyk7CisgICAgICAgICAgICBsaW5lWyBzaXplb2YobGluZSktMSBdID0gMDsKIAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHN0b3JlIHRvIGZpbGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOworICAgICAgICB9CisKKyAgICAgICAgY3Vycl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdC0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgc3RvcmVfc25tcFRhcmdldEFkZHJFbnRyeSAgKi8KIAogCkBAIC03NTcsNiArNzU5LDcgQEAKICAgICAgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUFRBUkdFVEFERFJURE9NQUlOOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcFRhcmdldEFkZHJURG9tYWluOwogICAgICAgICBicmVhazsKQEAgLTc4MSwxOSArNzg0LDIxIEBACiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlJPV1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBUYXJnZXRBZGRyUm93U3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAgIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KIAotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsgICAgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7CiAKICAgICAvKgogICAgICAqIGxvb2sgZm9yIE9JRCBpbiBjdXJyZW50IHRhYmxlIAogICAgICAqLwogICAgIGlmICgodGVtcF9zdHJ1Y3QgPSBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZSh2cC0+bmFtZSwgdnAtPm5hbWVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3QpKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0KSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKgpAQCAtODA1LDcgKzgxMCw3IEBACiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSVERPTUFJTjoKICAgICAgICAgaWYgKHRlbXBfc3RydWN0LT50RG9tYWluTGVuIDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wX3N0cnVjdC0+dERvbWFpbkxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgb2JqaWRbaV0gPSB0ZW1wX3N0cnVjdC0+dERvbWFpbltpXTsKQEAgLTgxNSw4ICs4MjAsOCBAQAogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgb2JqaWQ7CiAKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSVEFERFJFU1M6Ci0gICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+dEFkZHJlc3MgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+dEFkZHJlc3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAqdmFyX2xlbiA9IHRlbXBfc3RydWN0LT50QWRkcmVzc0xlbjsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIHRlbXBfc3RydWN0LT50QWRkcmVzczsKIApAQCAtODMwLDcgKzgzNSw3IEBACiAKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSVEFHTElTVDoKICAgICAgICAgaWYgKHRlbXBfc3RydWN0LT50YWdMaXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHN0cmNweShzdHJpbmcsIHRlbXBfc3RydWN0LT50YWdMaXN0KTsKKyAgICAgICAgICAgIHN0cmxjcHkoc3RyaW5nLCB0ZW1wX3N0cnVjdC0+dGFnTGlzdCwgc2l6ZW9mKHN0cmluZykpOwogICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBzdHJpbmc7CiAgICAgICAgIH0gZWxzZSB7CkBAIC04MzgsOSArODQzLDkgQEAKICAgICAgICAgfQogCiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlBBUkFNUzoKLSAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5wYXJhbXMgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgIHN0cmNweShzdHJpbmcsIHRlbXBfc3RydWN0LT5wYXJhbXMpOworICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnBhcmFtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCB0ZW1wX3N0cnVjdC0+cGFyYW1zLCBzaXplb2Yoc3RyaW5nKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBzdHJpbmc7CiAKQEAgLTg1NywxMCArODYyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfc25tcFRhcmdldEFkZHJFbnRyeVxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CiAgICAgfQotICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5ICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVfc25tcFRhcmdldEFkZHJURG9tYWluKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTg5MCw3ICs4OTcsNyBAQAogICAgICAgICBpZiAoKHRhcmdldCA9CiAgICAgICAgICAgICAgc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUoc25tcFRhcmdldEFkZHJPSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJPSURMZW4sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0QWRkclREb21haW46IEJBRCBPSUQhXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKQEAgLTkyNSw2ICs5MzIsOCBAQAogICAgICAgICAgICAgICAgIHRhcmdldC0+cm93U3RhdHVzID0gU05NUF9ST1dfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgLyoKICAgICAgICAgICogVHJ5IHRvIHVuZG8gdGhlIFNFVCBoZXJlIChhYm5vcm1hbCB1c2FnZSBvZiBGUkVFIGNsYXVzZSkgIApAQCAtOTc2LDcgKzk4NSw3IEBACiAgICAgICAgIGlmICgodGFyZ2V0ID0KICAgICAgICAgICAgICBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZShzbm1wVGFyZ2V0QWRkck9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRExlbiwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRBZGRyVEFkZHJlc3M6IEJBRCBPSUQhXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKQEAgLTEwMTIsNiArMTAyMSw3IEBACiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvbGRfYWRkcik7CiAgICAgICAgIG9sZF9hZGRyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICAvKgogICAgICAgICAgKiBUcnkgdG8gdW5kbyB0aGUgU0VUIGhlcmUgKGFibm9ybWFsIHVzYWdlIG9mIEZSRUUgY2xhdXNlKSAgCkBAIC0xMDgyLDcgKzEwOTIsNyBAQAogICAgICAgICBpZiAoKHRlbXBfc3RydWN0ID0KICAgICAgICAgICAgICBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZShzbm1wVGFyZ2V0QWRkck9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRExlbiwgbmFtZSwgJm5hbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0QWRkclRpbWVvdXQgOiBCQUQgT0lEXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKQEAgLTExMDcsNiArMTExNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpICE9IE5VTEwpIHsKICAgICAgICAgICAgIHRlbXBfc3RydWN0LT50aW1lb3V0ID0gbG9uZ19yZXQ7CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMTY0LDYgKzExNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICB0YXJnZXQtPnJldHJ5Q291bnQgPSBsb25nX3JldDsKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTEyNTQsNiArMTI2Niw3IEBACiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvbGRfdGxpc3QpOwogICAgICAgICBvbGRfdGxpc3QgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lEW3NubXBUYXJnZXRBZGRyT0lETGVuIC0gMV0gPQogICAgICAgICAgICAgU05NUFRBUkdFVEFERFJUQUdMSVNUQ09MVU1OOwpAQCAtMTI5Niw3ICsxMzA5LDcgQEAKICAgICAgICAgaWYgKCh0YXJnZXQgPQogICAgICAgICAgICAgIHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlKHNubXBUYXJnZXRBZGRyT0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lETGVuLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldEFkZHJQYXJhbXM6IEJBRCBPSUQhXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKQEAgLTEzMzEsNiArMTM0NCw3IEBACiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvbGRfcGFyYW1zKTsKICAgICAgICAgb2xkX3BhcmFtcyA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgLyoKICAgICAgICAgICogVHJ5IHRvIHVuZG8gdGhlIFNFVCBoZXJlIChhYm5vcm1hbCB1c2FnZSBvZiBGUkVFIGNsYXVzZSkgIApAQCAtMTQxNyw2ICsxNDMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgdGFyZ2V0LT5zdG9yYWdlVHlwZSA9IGxvbmdfcmV0OwogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTQ0NSwxOCArMTQ2MCwxOCBAQAogICAgICAgICB0ZW1wX3N0cnVjdCA9IHNubXBUYXJnZXRBZGRyVGFibGVfY3JlYXRlKCk7CiAgICAgICAgIGlmICghdGVtcF9zdHJ1Y3QpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwotICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZSA9IChjaGFyICopIG1hbGxvYyhuZXdOYW1lTGVuICsgMSk7Ci0gICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+bmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHRlbXBfc3RydWN0LT5uYW1lRGF0YSA9IChjaGFyICopIG1hbGxvYyhuZXdOYW1lTGVuKTsKKyAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5uYW1lRGF0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBTTk1QX0ZSRUUodGVtcF9zdHJ1Y3QtPnRhZ0xpc3QpOwogICAgICAgICAgICAgU05NUF9GUkVFKHRlbXBfc3RydWN0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKKyAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWVMZW4gPSBuZXdOYW1lTGVuOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgbmV3TmFtZUxlbjsgaSsrKSB7Ci0gICAgICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZVtpXSA9IChjaGFyKSBuYW1lW2kgKyBzbm1wVGFyZ2V0QWRkck9JRExlbl07CisgICAgICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZURhdGFbaV0gPSAoY2hhcikgbmFtZVtpICsgc25tcFRhcmdldEFkZHJPSURMZW5dOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWVbbmV3TmFtZUxlbl0gPSAnXDAnOwogICAgICAgICB0ZW1wX3N0cnVjdC0+cm93U3RhdHVzID0gU05NUF9ST1dfTk9UUkVBRFk7CiAKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9hZGRUb0xpc3QodGVtcF9zdHJ1Y3QsICZhQWRkclRhYmxlKTsKQEAgLTE1MDQsNyArMTUxOSw3IEBACiAgICAgICAgIGlmIChuYW1lX2xlbiA8IHNubXBUYXJnZXRBZGRyT0lETGVuICsgMSB8fAogICAgICAgICAgICAgbmFtZV9sZW4gPiBzbm1wVGFyZ2V0QWRkck9JRExlbiArIDMyKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsICJiYWQgaW5kZXggbGVuZ3RoICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4gLSBzbm1wVGFyZ2V0QWRkck9JRExlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobmFtZV9sZW4gLSBzbm1wVGFyZ2V0QWRkck9JRExlbikpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwogICAgICAgICB9CiAKQEAgLTE2MDYsNiArMTYyMSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IFVORE8gfHwgYWN0aW9uID09IEZSRUUpIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJPSURbc25tcFRhcmdldEFkZHJPSURMZW4gLSAxXSA9CiAgICAgICAgICAgICBTTk1QVEFSR0VUQUREUlJPV1NUQVRVU0NPTFVNTjsKQEAgLTE2NTEsNiArMTY2Nyw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogdV9jaGFyICAgICAgICAgKgpAQCAtMTY2MiwxMiArMTY3OSwyMCBAQAogewogICAgIGlmIChoZWFkZXJfZ2VuZXJpYyh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSA9PQogICAgICAgICBNQVRDSF9GQUlMRUQpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV90YXJnZXRTcGluTG9jazsKKyNlbHNlCisJCSp3cml0ZV9tZXRob2QgPSBOVUxMOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICh2cC0+bWFnaWMgPT0gU05NUFRBUkdFVFNQSU5MT0NLKSB7Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV90YXJnZXRTcGluTG9jazsKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdGFyZ2V0U3BpbkxvY2s7CisjZWxzZQorCQkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgKHNubXBUYXJnZXRTcGluTG9jayk7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKaW5kZXggYjFiNWFkMS4uMGI3MGFmNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCkBAIC0xMCwxMCArMTAsMTAgQEAKICNkZWZpbmUgX01JQkdST1VQX1NOTVBUQVJHRVRBRERSRU5UUllfSAogCiAvKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZQogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAKICAgICAvKgpAQCAtNDYsNyArNDYsOCBAQAogICAgICAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAKICAgICAgKi8KICAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgewotICAgICAgICAgY2hhciAgICAgICAgICAgKm5hbWU7CisgICAgICAgICBjaGFyICAgICAgICAgICAqbmFtZURhdGE7CisgICAgICAgICB1bnNpZ25lZCBjaGFyICAgbmFtZUxlbjsKICAgICAgICAgIG9pZCAgICAgICAgICAgICB0RG9tYWluW01BWF9PSURfTEVOXTsKICAgICAgICAgIGludCAgICAgICAgICAgICB0RG9tYWluTGVuOwogICAgICAgICAgdW5zaWduZWQgY2hhciAgKnRBZGRyZXNzOwpAQCAtNjcsMTkgKzY4LDE5IEBACiAgKi8KIAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGFyZ2V0QWRkckVudHJ5KHZvaWQpOwotICAgICBpbnQgICAgICAgICAgICAgc3RvcmVfc25tcFRhcmdldEFkZHJFbnRyeShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKKyAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NubXBUYXJnZXRBZGRyRW50cnkodm9pZCk7CiAgICAgIEZpbmRWYXJNZXRob2QgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeTsKIAogICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZ2V0X2FkZHJUYWJsZSh2b2lkKTsKLSAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmdldF9hZGRyRm9yTmFtZShjaGFyICpuYW1lKTsKKyAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmdldF9hZGRyRm9yTmFtZTIoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuYW1lTGVuKTsKICAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnNubXBUYXJnZXRBZGRyVGFibGVfY3JlYXRlKHZvaWQpOwogICAgICB2b2lkICAgICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9hZGQoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXdFbnRyeSk7CiAKICAgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRBZGRyVERvbWFpbjsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRBZGRyVEFkZHJlc3M7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0QWRkclRpbWVvdXQ7CkBAIC04OSw3ICs5MCw4IEBACiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0QWRkclN0b3JhZ2VUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldEFkZHJSb3dTdGF0dXM7CiAKLSAgICAgRmluZFZhck1ldGhvZCAgIHZhcl90YXJnZXRTcGluTG9jazsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3RhcmdldFNwaW5Mb2NrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgRmluZFZhck1ldGhvZCAgIHZhcl90YXJnZXRTcGluTG9jazsKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfU05NUFRBUkdFVEFERFJFTlRSWV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMKaW5kZXggMDY5MzZiMS4uNGUxZjRlMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYwpAQCAtMTUsOSArMTUsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMzAsNyArMjcsNyBAQAogb2lkICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNPSURbc25tcFRhcmdldFBhcmFtc09JRExlbl0gPQogICAgIHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDMsIDEsIDAgfTsKIAotc3RhdGljIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqYVBUYWJsZSA9IDA7CitzdGF0aWMgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICphUFRhYmxlID0gTlVMTDsKIAogCiAvKgpAQCAtNTEsMTYgKzQ4LDE2IEBACiAgICAgbmV3RW50cnkgPSAoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICopCiAgICAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0KSk7CiAKLSAgICBuZXdFbnRyeS0+cGFyYW1OYW1lID0gMDsKKyAgICBuZXdFbnRyeS0+cGFyYW1OYW1lID0gTlVMTDsKICAgICBuZXdFbnRyeS0+bXBNb2RlbCA9IC0xOwogCiAgICAgbmV3RW50cnktPnNlY01vZGVsID0gLTE7Ci0gICAgbmV3RW50cnktPnNlY05hbWUgPSAwOworICAgIG5ld0VudHJ5LT5zZWNOYW1lID0gTlVMTDsKICAgICBuZXdFbnRyeS0+c2VjTGV2ZWwgPSAtMTsKIAogICAgIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSA9IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRTsKICAgICBuZXdFbnRyeS0+cm93U3RhdHVzID0gU05NUF9ST1dfTk9ORVhJU1RFTlQ7Ci0gICAgbmV3RW50cnktPm5leHQgPSAwOworICAgIG5ld0VudHJ5LT5uZXh0ID0gTlVMTDsKICAgICByZXR1cm4gbmV3RW50cnk7CiB9CiAKQEAgLTk4LDcgKzk1LDcgQEAKICAgICAvKgogICAgICAqIGlmIHRoZSBsaXN0IGlzIGVtcHR5LCBhZGQgdGhlIG5ldyBlbnRyeSB0byB0aGUgdG9wIAogICAgICAqLwotICAgIGlmICgocHJldl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdCA9ICpsaXN0UHRyKSA9PSAwKSB7CisgICAgaWYgKChwcmV2X3N0cnVjdCA9IGN1cnJfc3RydWN0ID0gKmxpc3RQdHIpID09IE5VTEwpIHsKICAgICAgICAgKmxpc3RQdHIgPSBuZXdFbnRyeTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CkBAIC0xMTMsNyArMTEwLDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogc2VhcmNoIHRocm91Z2ggdGhlIGxpc3QgZm9yIGFuIGVxdWFsIG9yIGdyZWF0ZXIgT0lEIHZhbHVlIAogICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IDApIHsKKyAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGN1cnJPSURMZW4gPSBzdHJsZW4oY3Vycl9zdHJ1Y3QtPnBhcmFtTmFtZSk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgY3Vyck9JRExlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY3Vyck9JRFtpXSA9IGN1cnJfc3RydWN0LT5wYXJhbU5hbWVbaV07CkBAIC0xNjgsMTQgKzE2NSwxNCBAQAogewogICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqdHB0cjsKIAotICAgIGlmICgodHB0ciA9ICpsaXN0UHRyKSA9PSAwKQorICAgIGlmICgodHB0ciA9ICpsaXN0UHRyKSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgZWxzZSBpZiAodHB0ciA9PSBvbGRFbnRyeSkgewogICAgICAgICAqbGlzdFB0ciA9ICgqbGlzdFB0ciktPm5leHQ7CiAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2UodHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAodHB0ci0+bmV4dCAhPSAwKSB7CisgICAgICAgIHdoaWxlICh0cHRyLT5uZXh0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmICh0cHRyLT5uZXh0ID09IG9sZEVudHJ5KSB7CiAgICAgICAgICAgICAgICAgdHB0ci0+bmV4dCA9IHRwdHItPm5leHQtPm5leHQ7CiAgICAgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZShvbGRFbnRyeSk7CkBAIC0yMDUsNyArMjAyLDcgQEAKICAgICAgKi8KICAgICBtZW1jcHkobmV3TnVtLCBiYXNlTmFtZSwgYmFzZU5hbWVMZW4gKiBzaXplb2Yob2lkKSk7CiAKLSAgICBmb3IgKHRlbXBfc3RydWN0ID0gYVBUYWJsZTsgdGVtcF9zdHJ1Y3QgIT0gMDsKKyAgICBmb3IgKHRlbXBfc3RydWN0ID0gYVBUYWJsZTsgdGVtcF9zdHJ1Y3QgIT0gTlVMTDsKICAgICAgICAgIHRlbXBfc3RydWN0ID0gdGVtcF9zdHJ1Y3QtPm5leHQpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIHN0cmxlbih0ZW1wX3N0cnVjdC0+cGFyYW1OYW1lKTsgaSsrKSB7CiAgICAgICAgICAgICBuZXdOdW1bYmFzZU5hbWVMZW4gKyBpXSA9IHRlbXBfc3RydWN0LT5wYXJhbU5hbWVbaV07CkBAIC0yMjMsNyArMjIwLDcgQEAKICAgICAgICAgICAgIHJldHVybiB0ZW1wX3N0cnVjdDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKDApOworICAgIHJldHVybiBOVUxMOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2hfc25tcFRhcmdldFBhcmFtc1RhYmxlICovCiAKIApAQCAtMjM2LDcgKzIzMyw3IEBACiBzbm1wVGFyZ2V0UGFyYW1zX3Jvd1N0YXR1c0NoZWNrKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnkpCiB7CiAgICAgaWYgKChlbnRyeS0+bXBNb2RlbCA8IDApIHx8IChlbnRyeS0+c2VjTW9kZWwgPCAwKSB8fAotICAgICAgICAoZW50cnktPnNlY0xldmVsIDwgMCkgfHwgKGVudHJ5LT5zZWNOYW1lID09IDApKQorICAgICAgICAoZW50cnktPnNlY0xldmVsIDwgMCkgfHwgKGVudHJ5LT5zZWNOYW1lID09IE5VTEwpKQogICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjU0LDE3ICsyNTEsMTcgQEAKICAqLwogCiBzdHJ1Y3QgdmFyaWFibGUyIHNubXBUYXJnZXRQYXJhbXNFbnRyeV92YXJpYWJsZXNbXSA9IHsKLSAgICB7U05NUFRBUkdFVFBBUkFNU01QTU9ERUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNNUE1PREVMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU01QTU9ERUxDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUxDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTQ09MVU1OfX0KIH07CiAKQEAgLTI3OCwxNSArMjc1LDE1IEBACiB2b2lkCiBpbml0X3NubXBUYXJnZXRQYXJhbXNFbnRyeSh2b2lkKQogewotICAgIGFQVGFibGUgPSAwOworICAgIGFQVGFibGUgPSBOVUxMOwogCiAgICAgUkVHSVNURVJfTUlCKCJ0YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtc0VudHJ5X3ZhcmlhYmxlcywgdmFyaWFibGUyLAogICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zRW50cnlfdmFyaWFibGVzX29pZCk7CiAKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidGFyZ2V0UGFyYW1zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKCopKHZvaWQpKTAsIE5VTEwpOwogCiAgICAgLyoKICAgICAgKiB3ZSBuZWVkIHRvIGJlIGNhbGxlZCBiYWNrIGxhdGVyIApAQCAtMjk1LDEzICsyOTIsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgTlVMTCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBpbml0X3NubXBUYXJnZXRQYXJtc0VudHJ5ICAqLwogCit2b2lkCitzaHV0ZG93bl9zbm1wVGFyZ2V0UGFyYW1zRW50cnkodm9pZCkKK3sKKyAgICB3aGlsZSAoYVBUYWJsZSkKKwlzbm1wVGFyZ2V0UGFyYW1UYWJsZV9yZW1Gcm9tTGlzdChhUFRhYmxlLCAmYVBUYWJsZSk7Cit9CisKIAogaW50CiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFBhcmFtTmFtZShzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBwYXJhbSBuYW1lIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTMyNSwxMSArMzI5LDExIEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZE1QTW9kZWwoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBtcCBtb2RlbCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBtcCBtb2RlbCBpcyBub3QgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtMzUwLDExICszNTQsMTEgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkU2VjTW9kZWwoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gc2VjIG1vZGVsIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IHNlY3VyaXR5IG1vZGVsIGlzIG5vdCBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC0zNzYsNyArMzgwLDcgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkU2VjTmFtZShzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHNlY3VyaXR5IG5hbWUgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtMzkxLDExICszOTUsMTEgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkU2VjTGV2ZWwoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gc2VjdXJpdHkgbGV2ZWwgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogc2VjdXJpdHkgbGV2ZWwgaXMgbm90IGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQxNywxMSArNDIxLDExIEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFN0b3JhZ2VUeXBlKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHN0b3JhZ2UgdHlwZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBzdG9yYWdlIHR5cGUgaXMgbm90IGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQ1NSwxMSArNDU5LDExIEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFJvd1N0YXR1cyhzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gcm93IHN0YXR1cyBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiByb3cgc3RhdHVzIGlzIG5vdCBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC01MzUsMTMgKzUzOSwxMSBAQAogICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZiksCi0gICAgICAgICAgICAic25tcF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zLCByZWFkOiAlcyAlZCAlZCAlcyAlZCAlZCAlZFxuIiwKLSAgICAgICAgICAgIG5ld0VudHJ5LT5wYXJhbU5hbWUsIG5ld0VudHJ5LT5tcE1vZGVsLCBuZXdFbnRyeS0+c2VjTW9kZWwsCi0gICAgICAgICAgICBuZXdFbnRyeS0+c2VjTmFtZSwgbmV3RW50cnktPnNlY0xldmVsLCBuZXdFbnRyeS0+c3RvcmFnZVR5cGUsCi0gICAgICAgICAgICBuZXdFbnRyeS0+cm93U3RhdHVzKTsKLSAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKLSAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwgYnVmZikpOworICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAorICAgICAgICAgICAgICAgICJzbm1wX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMsIHJlYWQ6ICVzICVkICVkICVzICVkICVkICVkXG4iLAorICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5wYXJhbU5hbWUsIG5ld0VudHJ5LT5tcE1vZGVsLCBuZXdFbnRyeS0+c2VjTW9kZWwsCisgICAgICAgICAgICAgICAgbmV3RW50cnktPnNlY05hbWUsIG5ld0VudHJ5LT5zZWNMZXZlbCwgbmV3RW50cnktPnN0b3JhZ2VUeXBlLAorICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMpKTsKIAogICAgIHVwZGF0ZV90aW1lc3RhbXAobmV3RW50cnkpOwogICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2FkZFRvTGlzdChuZXdFbnRyeSwgJmFQVGFibGUpOwpAQCAtNTY2LDggKzU2OCw4IEBACiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CiAKICAgICBzdHJjcHkobGluZSwgIiIpOwotICAgIGlmICgoY3Vycl9zdHJ1Y3QgPSBhUFRhYmxlKSAhPSAwKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSAwKSB7CisgICAgaWYgKChjdXJyX3N0cnVjdCA9IGFQVGFibGUpICE9IE5VTEwpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmICgoY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSB8fAogICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX1BFUk1BTkVOVCkKICAgICAgICAgICAgICAgICAmJgpAQCAtNjEzLDYgKzYxNSw3IEBACiAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICp0ZW1wX3N0cnVjdDsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUFRBUkdFVFBBUkFNU01QTU9ERUw6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zTVBNb2RlbDsKICAgICAgICAgYnJlYWs7CkBAIC02MzEsMTkgKzYzNCwyMSBAQAogICAgIGNhc2UgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBUYXJnZXRQYXJhbXNSb3dTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CiAKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7ICAgICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOwogCiAgICAgLyoKICAgICAgKiBsb29rIGZvciBPSUQgaW4gY3VycmVudCB0YWJsZSAKICAgICAgKi8KICAgICBpZiAoKHRlbXBfc3RydWN0ID0gc2VhcmNoX3NubXBUYXJnZXRQYXJhbXNUYWJsZSh2cC0+bmFtZSwgdnAtPm5hbWVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0KSkgPT0gMCkgewotICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0KSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKgpAQCAtNjU5LDcgKzY2NCw3IEBACiAgICAgICAgICAqIGlmIHVuc2V0IHZhbHVlLCAoaS5lLiBuZXcgcm93KSAKICAgICAgICAgICovCiAgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+bXBNb2RlbCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbG9uZ19yZXQgPSB0ZW1wX3N0cnVjdC0+bXBNb2RlbDsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKIApAQCAtNjY4LDcgKzY3Myw3IEBACiAgICAgICAgICAqIGlmIHVuc2V0IHZhbHVlLCAoaS5lLiBuZXcgcm93KSAKICAgICAgICAgICovCiAgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+c2VjTW9kZWwgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGxvbmdfcmV0ID0gdGVtcF9zdHJ1Y3QtPnNlY01vZGVsOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogCkBAIC02NzYsOCArNjgxLDggQEAKICAgICAgICAgLyoKICAgICAgICAgICogaWYgdW5zZXQgdmFsdWUsIChpLmUuIG5ldyByb3cpIAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5zZWNOYW1lID09IDApCi0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnNlY05hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAvKgogICAgICAgICAgKiBpbmNsdWRpbmcgbnVsbCBjaGFyYWN0ZXIuIAogICAgICAgICAgKi8KQEAgLTY5MSw3ICs2OTYsNyBAQAogICAgICAgICAgKiBpZiB1bnNldCB2YWx1ZSwgKGkuZS4gbmV3IHJvdykgCiAgICAgICAgICAqLwogICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnNlY0xldmVsID09IC0xKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBsb25nX3JldCA9IHRlbXBfc3RydWN0LT5zZWNMZXZlbDsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKIApAQCAtNzA4LDkgKzcxMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeVxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CiAgICAgfQotICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnkgKi8KIAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogLyoKICAqIEFzc2lnbiBhIHZhbHVlIHRvIHRoZSBtcE1vZGVsIHZhcmlhYmxlLiAgCiAgKi8KQEAgLTg0Miw3ICs4NTAsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChmaW5kX3NlY19tb2QobG9uZ19yZXQpID09IE5VTEwgJiYgbG9uZ19yZXQgPj0gMykgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldFBhcmFtc1NlY01vZGVsOiBzZWNNb2RlbCAlZCB1bnN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0UGFyYW1zU2VjTW9kZWw6IHNlY01vZGVsICVsZCB1bnN1cHBvcnRlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfcmV0KSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CiAgICAgICAgIH0KQEAgLTExMTYsNyArMTEyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldFBhcmFtc1NlY05hbWU6IG5vdCBBU05fT0NURVRfU1RSXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IDI1NSB8fCB2YXJfdmFsX2xlbiA8IDApIHsKKyAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gMjU1KSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0UGFyYW1zU2VjTmFtZTogYmFkIGxlbmd0aFxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwpAQCAtMTI3Myw3ICsxMjgxLDcgQEAKICAgICAgICAgaWYgKG5hbWVfbGVuIDwgc25tcFRhcmdldFBhcmFtc09JRExlbiArIDEgfHwKICAgICAgICAgICAgIG5hbWVfbGVuID4gc25tcFRhcmdldFBhcmFtc09JRExlbiArIDMyKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwgImJhZCBpbmRleCBsZW5ndGggJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbiAtIHNubXBUYXJnZXRQYXJhbXNPSURMZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG5hbWVfbGVuIC0gc25tcFRhcmdldFBhcmFtc09JRExlbikpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwogICAgICAgICB9CiAKQEAgLTEzNjYsNiArMTM3NCw3IEBACiAgICAgICAgICAgICAgICAgdXBkYXRlX3RpbWVzdGFtcChwYXJhbXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IFVORE8gfHwgYWN0aW9uID09IEZSRUUpIHsKICAgICAgICAgc25tcFRhcmdldFBhcmFtc09JRFtzbm1wVGFyZ2V0UGFyYW1zT0lETGVuIC0gMV0gPQogICAgICAgICAgICAgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVU0NPTFVNTjsKQEAgLTEzODIsNiArMTM5MSw5IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKwogc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICoKIGdldF9wYXJhbUVudHJ5KGNoYXIgKm5hbWUpCiB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmggYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKaW5kZXggOWI1YWI4NS4uYmQzMDU4MiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaApAQCAtMSw3NyArMSw3NSBAQAogCi0vKgotICogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbWliMmMgYW5kIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSBtaWIgbW9kdWxlCi0gKiBmb3IgdGhlIHVjZC1zbm1wIHNubXBkIGFnZW50LiBFZGl0ZWQgYnkgTWljaGFlbCBCYWVyCi0gKiAKLSAqIGxhc3QgY2hhbmdlZCAyLzIvOTkuCi0gKi8KLQotI2lmbmRlZiBfTUlCR1JPVVBfU05NUFRBUkdFVFBBUkFNU0VOVFJZX0gKLSNkZWZpbmUgX01JQkdST1VQX1NOTVBUQVJHRVRQQVJBTVNFTlRSWV9ICi0KLS8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAotICovCi0KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCi0KLSAgICAvKgotICAgICAqIE1hZ2ljIG51bWJlciBkZWZpbml0aW9uczogCi0gICAgICovCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU01QTU9ERUwgICAgICAgIDEKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTCAgMgotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUUgICAzCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUwgIDQKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEUgICAgNQotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVMgICAgICA2Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU01QTU9ERUxDT0xVTU4gICAgICAgIDIKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTENPTFVNTiAgMwotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUVDT0xVTU4gICA0Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUxDT0xVTU4gIDUKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEVDT0xVTU4gICAgNgotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVNDT0xVTU4gICAgICA3Ci0gICAgLyoKLSAgICAgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgCi0gICAgICovCi0gICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCB7Ci0gICAgICAgICBjaGFyICAgICAgICAgICAqcGFyYW1OYW1lOwotICAgICAgICAgaW50ICAgICAgICAgICAgIG1wTW9kZWw7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgc2VjTW9kZWw7Ci0gICAgICAgICBjaGFyICAgICAgICAgICAqc2VjTmFtZTsKLSAgICAgICAgIGludCAgICAgICAgICAgICBzZWNMZXZlbDsKLSAgICAgICAgIGludCAgICAgICAgICAgICBzdG9yYWdlVHlwZTsKLSAgICAgICAgIGludCAgICAgICAgICAgICByb3dTdGF0dXM7Ci0gICAgICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKm5leHQ7Ci0gICAgICAgICB0aW1lX3QgICAgICAgICAgdXBkYXRlVGltZTsKLSAgICAgfTsKLQotLyoKLSAqIHV0aWxpdHkgZnVuY3Rpb25zIAotICovCi0gICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZ2V0X3BhcmFtRW50cnkoY2hhciAqbmFtZSk7Ci0gICAgIHZvaWQgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9hZGQoc3RydWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3RW50cnkpOwotICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnNubXBUYXJnZXRQYXJhbVRhYmxlX2NyZWF0ZSh2b2lkKTsKLQotLyoKLSAqIGZ1bmN0aW9uIGRlZmluaXRpb25zIAotICovCi0KLSAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcFRhcmdldFBhcmFtc0VudHJ5KHZvaWQpOwotICAgICBpbnQgICAgICAgICAgICAgc3RvcmVfc25tcFRhcmdldFBhcmFtc0VudHJ5KGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeTsKLQotICAgICB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcyhjb25zdCBjaGFyICosIGNoYXIgKik7Ci0KKyAgLyoKKyAgICogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbWliMmMgYW5kIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSBtaWIgbW9kdWxlCisgICAqIGZvciB0aGUgdWNkLXNubXAgc25tcGQgYWdlbnQuIEVkaXRlZCBieSBNaWNoYWVsIEJhZXIKKyAgICogCisgICAqIGxhc3QgY2hhbmdlZCAyLzIvOTkuCisgICAqLworIAorICAjaWZuZGVmIF9NSUJHUk9VUF9TTk1QVEFSR0VUUEFSQU1TRU5UUllfSAorICAjZGVmaW5lIF9NSUJHUk9VUF9TTk1QVEFSR0VUUEFSQU1TRU5UUllfSAorIAorICAgICAgLyoKKyAgICAgICAqIE1hZ2ljIG51bWJlciBkZWZpbml0aW9uczogCisgICAgICAgKi8KKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNNUE1PREVMICAgICAgICAxCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTCAgMgorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRSAgIDMKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMICA0CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEUgICAgNQorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVUyAgICAgIDYKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNNUE1PREVMQ09MVU1OICAgICAgICAyCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTENPTFVNTiAgMworICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRUNPTFVNTiAgIDQKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMQ09MVU1OICA1CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEVDT0xVTU4gICAgNgorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVU0NPTFVNTiAgICAgIDcKKyAgICAgIC8qCisgICAgICAgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgCisgICAgICAgKi8KKyAgICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgeworICAgICAgICAgICBjaGFyICAgICAgICAgICAqcGFyYW1OYW1lOworICAgICAgICAgICBpbnQgICAgICAgICAgICAgbXBNb2RlbDsKKyAgICAgICAgICAgaW50ICAgICAgICAgICAgIHNlY01vZGVsOworICAgICAgICAgICBjaGFyICAgICAgICAgICAqc2VjTmFtZTsKKyAgICAgICAgICAgaW50ICAgICAgICAgICAgIHNlY0xldmVsOworICAgICAgICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZVR5cGU7CisgICAgICAgICAgIGludCAgICAgICAgICAgICByb3dTdGF0dXM7CisgICAgICAgICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqbmV4dDsKKyAgICAgICAgICAgdGltZV90ICAgICAgICAgIHVwZGF0ZVRpbWU7CisgICAgICAgfTsKKyAKKyAgLyoKKyAgICogdXRpbGl0eSBmdW5jdGlvbnMgCisgICAqLworICAgICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZ2V0X3BhcmFtRW50cnkoY2hhciAqbmFtZSk7CisgICAgICAgdm9pZCAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2FkZChzdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhcmFtVGFibGVfc3RydWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3RW50cnkpOworICAgICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqc25tcFRhcmdldFBhcmFtVGFibGVfY3JlYXRlKHZvaWQpOworICAgICAgIHZvaWQgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZShzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKik7CisgCisgIC8qCisgICAqIGZ1bmN0aW9uIGRlZmluaXRpb25zIAorICAgKi8KKyAKKyAgICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGFyZ2V0UGFyYW1zRW50cnkodm9pZCk7CisgICAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NubXBUYXJnZXRQYXJhbXNFbnRyeSh2b2lkKTsKKyAgICAgICBpbnQgICAgICAgICAgICAgc3RvcmVfc25tcFRhcmdldFBhcmFtc0VudHJ5KGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CisgICAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeTsKKyAKKyAgICAgICB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcyhjb25zdCBjaGFyICosIGNoYXIgKik7CisgCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc01QTW9kZWw7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zU2VjTW9kZWw7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zU2VjTmFtZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNTZWNMZXZlbDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNTdG9yYWdlVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNSb3dTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1NOTVBUQVJHRVRQQVJBTVNFTlRSWV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMKaW5kZXggM2NjYmExYy4uNTYxOWUzNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYwpAQCAtMSw4ICsxLDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZWxzZQpAQCAtMTIsMTAgKzEwLDI2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCisjaWYgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTikgfHwgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOKQorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInNubXBUYXJnZXRBZGRyRW50cnkuaCIKICNpbmNsdWRlICJzbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGRvbWFpbl9zdXBwb3J0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGRvbWFpbl90cmFuc3BvcnRfb2lkKQorbmV0c25tcF9mZWF0dXJlX3dhbnQobmV0c25tcF90bHN0bUFkZHJfZ2V0X3NlcnZlcklkKQorCiAjZGVmaW5lIE1BWF9UQUdTIDEyOAogCiBuZXRzbm1wX3Nlc3Npb24gKgpAQCAtMjcsNiArNDEsOSBAQAogICAgIGNoYXIgICAgICAgICAgICBidWZbU1BSSU5UX01BWF9MRU5dOwogICAgIGNoYXIgICAgICAgICAgICB0YWdzW01BWF9UQUdTXVtTUFJJTlRfTUFYX0xFTl0sICpjcDsKICAgICBpbnQgICAgICAgICAgICAgbnVtdGFncyA9IDAsIGk7CisjaWYgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTikgfHwgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOKQorICAgIGludCAgICAgICAgICAgICB0bHMgPSAwOworI2VuZGlmCiAgICAgc3RhdGljIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqcGFyYW07CiAKICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwgImxvb2tpbmcgZm9yOiAlc1xuIiwgdGFnbGlzdCkpOwpAQCAtNTQsNyArNzEsNyBAQAogICAgICAgICAgICAgKHRhcmdhZGRycy0+dERvbWFpbiwgdGFyZ2FkZHJzLT50RG9tYWluTGVuLCBOVUxMLCBOVUxMKSA9PSAwKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGRvbWFpbiBmb3IgdGFyZ2V0IGFkZHJlc3MgdGFibGUgZW50cnkgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5uYW1lRGF0YSk7CiAgICAgICAgIH0KIAogICAgICAgICAvKgpAQCAtMTU5LDE5ICsxNzYsODcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoZHN0X3N0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiB0RG9tYWluIGlzIHRscyByZWxhdGVkLCBjaGVjayBmb3IgdGxzIGNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxzID0gc25tcF9vaWRfY29tcGFyZSh0YXJnYWRkcnMtPnREb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPnREb21haW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wRFRMU1VEUERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluX2xlbik7CisKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHMgPSBzbm1wX29pZF9jb21wYXJlKHRhcmdhZGRycy0+dERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPnREb21haW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wVExTVENQRG9tYWluX2xlbik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOKSB8fCBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0bHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0ICpjZXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgKnNlcnZlcl9pZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIJICAgICAgYnVmWzMzXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbG9va2luZyB1cCBvdXIgaWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPnBhcmFtcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfSURFTlRJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19DRVJUS0VZX1RBUkdFVF9QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+cGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQodC0+Zl9jb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGZvdW5kIGZpbmdlcnByaW50OiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+Zl9jb25maWcodCwgImxvY2FsQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5maW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgdGFyZ2FkZHJzLT5uYW1lRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+bmFtZUxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zlt0YXJnYWRkcnMtPm5hbWVMZW5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGxvb2tpbmcgdXAgdGhlaXIgaWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNfQ0VSVEtFWV9UQVJHRVRfQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZm91bmQgZmluZ2VycHJpbnQ6ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5mX2NvbmZpZyh0LCAicGVlckNlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0dFVF9TRVJWRVJJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQgPSBuZXRzbm1wX3Rsc3RtQWRkcl9nZXRfc2VydmVySWQoYnVmKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9HRVRfU0VSVkVSSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlcl9pZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGZvdW5kIHNlcnZlcklkOiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPmZfY29uZmlnKHQsICJ0aGVpcl9ob3N0bmFtZSIsIHNlcnZlcl9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnRoaXNzZXNzLCAwLCBzaXplb2YodGhpc3Nlc3MpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzc2Vzcy50aW1lb3V0ID0gKHRhcmdhZGRycy0+dGltZW91dCkgKiAxMDAwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzc2Vzcy5yZXRyaWVzID0gdGFyZ2FkZHJzLT5yZXRyeUNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0OiAlZCAtPiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dDogJWQgLT4gJWxkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+dGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzc2Vzcy50aW1lb3V0KSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0tPm1wTW9kZWwgPT0gU05NUF9WRVJTSU9OXzMgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNlY01vZGVsICE9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNlY01vZGVsICE9IFNOTVBfU0VDX01PREVMX1VTTSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2VjTW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVFNNKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBtb2RlbC9zZWNtb2RlbCBjb21ibyBmb3IgdGFyZ2V0ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgbXBNb2RlbC9zZWNNb2RlbCBjb21ibyAlZC8lZCBmb3IgdGFyZ2V0ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+bXBNb2RlbCwgcGFyYW0tPnNlY01vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPm5hbWVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogWFhYOiBtZW1sZWFrIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYwppbmRleCAwMmViYjcyLi4wMTA5OTc0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jCkBAIC0xMiwxMiArMTIsMTIgQEAKICNpbmNsdWRlICJ0YXJnZXRfY291bnRlcnMuaCIKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oPgogCi1zdGF0aWMgb2lkICAgdW5hdmFpbGFibGVfY29udGV4dF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDQgfTsKLXN0YXRpYyBvaWQgICB1bmtub3duX2NvbnRleHRfb2lkW10gICAgID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgNSB9OwotCiB2b2lkCiBpbml0X3RhcmdldF9jb3VudGVycyh2b2lkKQogeworICAgIGNvbnN0IG9pZCB1bmF2YWlsYWJsZV9jb250ZXh0X29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgNCB9OworICAgIGNvbnN0IG9pZCB1bmtub3duX2NvbnRleHRfb2lkW10gICAgID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgNSB9OworCiAgICAgREVCVUdNU0dUTCgoInRhcmdldF9jb3VudGVycyIsICJpbml0aWFsaXppbmdcbiIpKTsKIAogICAgIC8qCkBAIC00NCw2ICs0NCw3IEBACiAKIH0KIAorCiBpbnQKIGdldF91bmtub3duX2NvbnRleHRfY291bnQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaCBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAppbmRleCBhN2RiZjBhLi4zNTVmMzkxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCkBAIC0yLDYgKzIsOSBAQAogICogdGVzdGhhbmRsZXIuaCAKICAqLwogCitjb25maWdfZXhjbHVkZSh0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzKQorCiB2b2lkICAgICAgICAgICAgaW5pdF90YXJnZXRfY291bnRlcnModm9pZCk7CisKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGdldF91bmF2YWlsYWJsZV9jb250ZXh0X2NvdW50OwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgZ2V0X3Vua25vd25fY29udGV4dF9jb3VudDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAidGFyZ2V0X2NvdW50ZXJzXzVfNS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlbHBlcl9zdGF0aXN0aWNzKQorCit2b2lkCitpbml0X3RhcmdldF9jb3VudGVyc181XzUodm9pZCkKK3sKKyAgICBvaWQgdGFyZ2V0X29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSB9OworCisgICAgREVCVUdNU0dUTCgoInRhcmdldF9jb3VudGVycyIsICJpbml0aWFsaXppbmdcbiIpKTsKKworICAgIE5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIoCisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgInRhcmdldF9jb3VudGVycyIsIE5VTEwsIHRhcmdldF9vaWQsIE9JRF9MRU5HVEgodGFyZ2V0X29pZCksCisgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksIDQsIFRBUkdFVCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwYmYxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaApAQCAtMCwwICsxLDMgQEAKK2NvbmZpZ19leGNsdWRlKHRhcmdldC90YXJnZXRfY291bnRlcnMpCisKK3ZvaWQgICAgICAgICAgICBpbml0X3RhcmdldF9jb3VudGVyc181XzUodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaCBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oCmluZGV4IDUwMDMxNTcuLjBjMTNhMGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oCkBAIC0yMCw4ICsyMCwxNSBAQAogY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbikKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXgpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZSkKICNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKIGNvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMikKKyNlbGlmIGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZHJhZ29uZmx5KSB8fCBkZWZpbmVkKGRhcndpbikKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNCkKKyNlbGlmIGRlZmluZWQob3BlbmJzZDQpCitjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZCkKKyNlbGlmIGRlZmluZWQobmV0YnNkMSkKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QpCiAjZWxzZQogY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3Vuc3VwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMKaW5kZXggOWIwY2I3OC4uYmJhMDFmZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYwpAQCAtMTY0LDYgKzE2NCwxMyBAQAogICAgIGZyZWUoZW50cnkpOwogfQogCisjaWZkZWYgVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVECisKKy8qIFhYWCBUT0RPOiB0aGVzZSBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkIGV2ZXJ5d2hlcmU7IHRvIGVuYWJsZSB0aGUKKyAgIGZ1bmN0aW9ucyBmaXJzdCBpbXBsZW1lbnQgbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlIGluIHRoZQorICAgdGNwQ29ubl97T1N9LmMgZmlsZSBhbmQgdGhlbiBkZWZpbmUgVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVEIGluIHRoZQorICAgdGNwQ29ubl97T1N9LmggZmlsZSAod2hpY2ggbWF5IG5lZWQgdG8gYmUgY3JlYXRlZCBmaXJzdCkuICovCisKIC8qKgogICogdXBkYXRlIHVuZGVybHlpbmcgZGF0YSBzdG9yZSAoa2VybmVsKSBmb3IgZW50cnkKICAqCkBAIC0xODksMTAgKzE5NiwxMSBAQAogICAgIGlmICghIChlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0RFTEVURSkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICByYyA9IG5ldHNubXBfYXJjaF90Y3Bjb25uX2RlbGV0ZShlbnRyeSk7CisgICAgcmMgPSBuZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUoZW50cnkpOwogICAgIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQgKi8KIAogLyoqCiAgKiB1cGRhdGUgYW4gb2xkIHRjcGNvbm5fZW50cnkgZnJvbSBhIG5ldyBvbmUKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkMWU4NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogIHRjcENvbm5UYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIEZyZWVCU0QvRHJhZ29uRmx5QlNECisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy90Y3BDb25uLmg+CisKKyNpbmNsdWRlICJ0Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9pbml0KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NvcHkobmV0c25tcF90Y3Bjb25uX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdGNwQ29ubiBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInRjcGNvbm5fY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc190Y3Bjb25uXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKworICAgIHJldHVybiByYzsKK30KKworI2lmIGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZGFyd2luKQorICAgICNkZWZpbmUgTlNfRUxFTSBzdHJ1Y3QgeHRjcGNiCisjZWxzZQorICAgICNkZWZpbmUgTlNfRUxFTSBzdHJ1Y3QgeGlucGNiCisjZW5kaWYKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc2l6ZV90ICAgbGVuOworICAgIGludCAgICAgIHNuYW1lW10gPSB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fVENQLCBUQ1BDVExfUENCTElTVCB9OworICAgIGNoYXIgICAgICp0Y3BjYl9idWYgPSBOVUxMOworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHN0cnVjdCB4aW5wY2IgICp4aWcgPSBOVUxMOworICAgIGludCAgICAgIFN0YXRlTWFwW10gPSB7IDEsIDEsIDIsIDMsIDQsIDUsIDgsIDYsIDEwLCA5LCA3LCAxMSB9OworI2Vsc2UKKyAgICBzdHJ1Y3QgeGlucGdlbiAqeGlnID0gTlVMTDsKKyAgICBpbnQgICAgICBTdGF0ZU1hcFtdID0geyAxLCAyLCAzLCA0LCA1LCA4LCA2LCAxMCwgOSwgNywgMTEgfTsKKyNlbmRpZgorICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIHN0YXRlOworICAgIGludCAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIGxlbiA9IDA7CisgICAgaWYgKHN5c2N0bChzbmFtZSwgNCwgMCwgJmxlbiwgMCwgMCkgPCAwIHx8CisgICAgICAgKHRjcGNiX2J1ZiA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN5c2N0bChzbmFtZSwgNCwgdGNwY2JfYnVmLCAmbGVuLCAwLCAwKSA8IDApIHsKKyAgICAgICAgZnJlZSh0Y3BjYl9idWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgVW5waWNrIHRoaXMgaW50byB0aGUgY29uc3RpdHVlbnQgJ3hpbnBnZW4nIHN0cnVjdHVyZXMsIGFuZCBleHRyYWN0CisgICAgICogICAgIHRoZSAnaW5wY2InIGVsZW1lbnRzIGludG8gYSBsaW5rZWQgbGlzdCAoYnVpbHQgaW4gcmV2ZXJzZSkKKyAgICAgKi8KKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBjYiAgKikgdGNwY2JfYnVmOworI2Vsc2UKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgdGNwY2JfYnVmOworICAgIHhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aWdfbGVuKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgd2hpbGUgKHhpZyAmJiAoeGlnLT54aV9sZW4gPiBzaXplb2Yoc3RydWN0IHhpbnBjYikpKQorI2Vsc2UKKyAgICB3aGlsZSAoeGlnICYmICh4aWctPnhpZ19sZW4gPiBzaXplb2Yoc3RydWN0IHhpbnBnZW4pKSkKKyNlbmRpZgorICAgIHsKKwlOU19FTEVNIHBjYiA9ICooKE5TX0VMRU0gKikgeGlnKTsKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKwl4aWcgPSAoc3RydWN0IHhpbnBjYiAgKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlfbGVuKTsKKyNlbHNlCisJeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpZ19sZW4pOworI2VuZGlmCisJc3RhdGUgPSBTdGF0ZU1hcFtwY2IueHRfdHAudF9zdGF0ZV07CisKKwlpZiAobG9hZF9mbGFncykgeworCSAgICBpZiAoc3RhdGUgPT0gVENQQ09OTkVDVElPTlNUQVRFX0xJU1RFTikgeworCQlpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9OT0xJU1RFTikgeworCQkgICAgREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICAgICIgc2tpcHBpbmcgbGlzdGVuXG4iKSk7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfT05MWUxJU1RFTikgeworCQlERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgIiBza2lwcGluZyBub24tbGlzdGVuXG4iKSk7CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCisjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKwlpZiAocGNiLnh0X2lucC5pbnBfdmZsYWcgJiBJTlBfSVBWNikKKwkgICAgY29udGludWU7CisjZW5kaWYKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3RjcGNvbm5fZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBvZGRseSBlbm91Z2gsIHRoZXNlIGFwcGVhciB0byBhbHJlYWR5IGJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgICAgZW50cnktPmxvY19wb3J0ID0gaHRvbnMocGNiLnh0X2lucC5pbnBfbHBvcnQpOworICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSBodG9ucyhwY2IueHRfaW5wLmlucF9mcG9ydCk7CisgICAgICAgIGVudHJ5LT50Y3BDb25uU3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KKwlpZiAocGNiLnh0X2lucC5pbnBfdmZsYWcgJiBJTlBfSVBWNikgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmcGNiLnh0X2lucC5pbjZwX2xhZGRyLCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZwY2IueHRfaW5wLmluNnBfZmFkZHIsIDE2KTsKKwl9CisJZWxzZSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnBjYi54dF9pbnAuaW5wX2xhZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJnBjYi54dF9pbnAuaW5wX2ZhZGRyLCA0KTsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmFyYml0cmFyeV9pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYwppbmRleCA4ZWEwODJiLi41ZjkzYmUwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYwpAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSAidGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9wcml2YXRlLmgiCi0KKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oIgogc3RhdGljIGludAogbGludXhfc3RhdGVzWzEyXSA9IHsgMSwgNSwgMywgNCwgNiwgNywgMTEsIDEsIDgsIDksIDIsIDEwIH07CiAKQEAgLTU2LDE4ICs1NiwxOSBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVECiAvKgogICogZGVsZXRlIGFuIGVudHJ5CiAgKi8KIGludAotbmV0c25tcF9hcmNoX3RjcGNvbm5fZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKIHsKICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIC8qKiB4eHgtcmtzOjkgdGNwQ29ubiBkZWxldGUgbm90IGltcGxlbWVudGVkICovCiAgICAgcmV0dXJuIC0xOwogfQotCisjZW5kaWYgLyogVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVEICovCiAKIC8qKgogICoKQEAgLTgxLDcgKzgyLDEwIEBACiAgICAgaW50IHJjID0gMDsKIAogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAotICAgICAgICAgICAgICAgICJ0Y3Bjb25uX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICVwKVxuIiwgbG9hZF9mbGFncykpOworICAgICAgICAgICAgICAgICJ0Y3Bjb25uX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgLyogU2V0dXAgdGhlIHBpZF9mcm9tX2lub2RlIHRhYmxlLCBhbmQgZmlsbCBpdC4qLworICAgIG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlX2luaXQoKTsKIAogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3RjcGNvbm5cbiIpOwpAQCAtMTM0LDE3ICsxMzgsMjAgQEAKICAgICAgKi8KICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXRlLCByYywgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHRtcF9zdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHN0YXRlLCBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydCwgdG1wX3N0YXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW5vZGU7CiAgICAgICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuLCBvZmZzZXQ7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBsb2NhbF9hZGRyWzEwXSwgcmVtb3RlX2FkZHJbMTBdOwogICAgICAgICB1X2NoYXIgICAgICAgICAqdG1wX3B0cjsKIAotICAgICAgICBpZiAoNSAhPSAocmMgPSBzc2NhbmYobGluZSwgIiUqZDogJThbMC05QS1aXToleCAlOFswLTlBLVpdOiV4ICV4IiwKKyAgICAgICAgaWYgKDYgIT0gKHJjID0gc3NjYW5mKGxpbmUsICIlKmQ6ICU4WzAtOUEtWl06JXggJThbMC05QS1aXToleCAleCAlKng6JSp4ICUqeDolKnggJSp4ICUqeCAlKnggJWxsdSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyLCAmbG9jYWxfcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCAmcmVtb3RlX3BvcnQsICZ0bXBfc3RhdGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2FkZHIsICZyZW1vdGVfcG9ydCwgJnRtcF9zdGF0ZSwgJmlub2RlKSkpIHsKICAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCi0gICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIGxpbmUgKCVkICE9IDUpXG4iLCByYykpOworICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBsaW5lICglZCAhPSA2KVxuIiwgcmMpKTsKICAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsIiBsaW5lICclcydcbiIsIGxpbmUpKTsKKwkgICAgc25tcF9sb2coTE9HX0VSUiwgInRjcDpfbG9hZDQ6IGJhZCBsaW5lIGluICIgUFJPQ0ZJTEUgIjogJXNcbiIsIGxpbmUpOworCSAgICByYyA9IDA7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsIiBsaW5lICclcydcbiIsIGxpbmUpKTsKQEAgLTE4MCw3ICsxODcsOCBAQAogICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSAodW5zaWduZWQgc2hvcnQpIGxvY2FsX3BvcnQ7CiAgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydCkgcmVtb3RlX3BvcnQ7CiAgICAgICAgIGVudHJ5LT50Y3BDb25uU3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgCisgICAgICAgIGVudHJ5LT5waWQgPSBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm9kZSk7CisKICAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCiAgICAgICAgIGJ1Zl9sZW4gPSBzdHJsZW4obG9jYWxfYWRkcik7CiAgICAgICAgIGlmICgoOCAhPSBidWZfbGVuKSB8fApAQCAtMjUzLDI4ICsyNjEsMTcgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwogICAgIEZJTEUgICAgICAgICAgICppbjsKLSAgICBjaGFyICAgICAgICAgICAgbGluZVsxODBdOwotICAgIHN0YXRpYyBpbnQgICAgICBsb2dfb3Blbl9lcnIgPSAxOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzM2MF07CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CiAKICN1bmRlZiBQUk9DRklMRQogI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L3RjcDYiCiAgICAgaWYgKCEoaW4gPSBmb3BlbihQUk9DRklMRSwgInIiKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKTsKLSAgICAgICAgaWYgKDEgPT0gbG9nX29wZW5fZXJyKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpOwotICAgICAgICAgICAgbG9nX29wZW5fZXJyID0gMDsKLSAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0gICAgLyoKLSAgICAgKiBpZiB3ZSB0dXJuZWQgb2ZmIGxvZ2dpbmcgb2Ygb3BlbiBlcnJvcnMsIHR1cm4gaXQgYmFjayBvbiBub3cgdGhhdAotICAgICAqIHdlIGhhdmUgYmVlbiBhYmxlIHRvIG9wZW4gdGhlIGZpbGUuCi0gICAgICovCi0gICAgaWYgKDAgPT0gbG9nX29wZW5fZXJyKQotICAgICAgICBsb2dfb3Blbl9lcnIgPSAxOwotICAgIAorCiAgICAgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbik7IC8qIHNraXAgaGVhZGVyICovCiAKICAgICAvKgpAQCAtMjg2LDE2ICsyODMsMTkgQEAKICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeTsKICAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXRlLCBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydCwgdG1wX3N0YXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgIGlub2RlOwogICAgICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiwgb2Zmc2V0OwogICAgICAgICBjaGFyICAgICAgICAgICAgbG9jYWxfYWRkcls0OF0sIHJlbW90ZV9hZGRyWzQ4XTsKICAgICAgICAgdV9jaGFyICAgICAgICAgKnRtcF9wdHI7CiAKLSAgICAgICAgaWYgKDUgIT0gKHJjID0gc3NjYW5mKGxpbmUsICIlKmQ6ICU0N1swLTlBLVpdOiV4ICU0N1swLTlBLVpdOiV4ICV4IiwKKyAgICAgICAgaWYgKDYgIT0gKHJjID0gc3NjYW5mKGxpbmUsICIlKmQ6ICU0N1swLTlBLVpdOiV4ICU0N1swLTlBLVpdOiV4ICV4ICUqeDolKnggJSp4OiUqeCAlKnggJSp4ICUqeCAlbGx1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHIsICZsb2NhbF9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2FkZHIsICZyZW1vdGVfcG9ydCwgJnRtcF9zdGF0ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkciwgJnJlbW90ZV9wb3J0LCAmdG1wX3N0YXRlLCAmaW5vZGUpKSkgewogICAgICAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgbGluZSAoJWQgIT0gNSlcbiIsIHJjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIGxpbmUgKCVkICE9IDYpXG4iLCByYykpOwogICAgICAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwiIGxpbmUgJyVzJ1xuIiwgbGluZSkpOworCSAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGNwOl9sb2FkNjogYmFkIGxpbmUgaW4gIiBQUk9DRklMRSAiOiAlc1xuIiwgbGluZSk7CisJICAgIHJjID0gMDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwiIGxpbmUgJyVzJ1xuIiwgbGluZSkpOwpAQCAtMzMxLDYgKzMzMSw3IEBACiAgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydCkgbG9jYWxfcG9ydDsKICAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gKHVuc2lnbmVkIHNob3J0KSByZW1vdGVfcG9ydDsKICAgICAgICAgZW50cnktPnRjcENvbm5TdGF0ZSA9IHN0YXRlOworICAgICAgICBlbnRyeS0+cGlkID0gbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vZGUpOwogCiAgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLwogICAgICAgICBidWZfbGVuID0gc3RybGVuKGxvY2FsX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjI5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiAgdGNwQ29ublRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgTmV0QlNECisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy90Y3BDb25uLmg+CisKKyNpbmNsdWRlICJ0Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzLCBpbnQgdmFyKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9pbml0KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NvcHkobmV0c25tcF90Y3Bjb25uX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdGNwQ29ubiBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInRjcGNvbm5fY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc190Y3Bjb25uXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzLCA0KTsKKyNpZiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MsIDYpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MsIGludCB2ZXIpCit7CisgICAgY29uc3QgY2hhciAqbWlibmFtZTsKKyAgICBpbnQgICAgICBtaWJbOF07CisgICAgc2l6ZV90ICAgbWliX2xlbjsKKyAgICBzdHJ1Y3Qga2luZm9fcGNiICpwY2JsaXN0OworICAgIHNpemVfdCAgIHBjYl9sZW47CisgICAgaW50ICAgICAgU3RhdGVNYXBbXSA9IHsgMSwgMiwgMywgNCwgNSwgOCwgNiwgMTAsIDksIDcsIDExIH07CisgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgc3RhdGU7CisgICAgaW50ICAgICAgaSwgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgc3dpdGNoICh2ZXIpIHsKKyAgICBjYXNlIDQ6CisgICAgCW1pYm5hbWUgPSAibmV0LmluZXQudGNwLnBjYmxpc3QiOworICAgIAlicmVhazsKKyAgICBjYXNlIDY6CisgICAgCW1pYm5hbWUgPSAibmV0LmluZXQ2LnRjcDYucGNibGlzdCI7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInRjcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGJhZCB2ZXJzaW9uICVkXG4iLCB2ZXIpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsbmFtZXRvbWliKG1pYm5hbWUsIG1pYiwgJm1pYl9sZW4pID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ0Y3AtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHJlc29sdmUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKCptaWIpLCBOVUxMLCAmcGNiX2xlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInRjcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgc2l6ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKHBjYmxpc3QgPSBtYWxsb2MocGNiX2xlbikpID09IE5VTEwpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInRjcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgYWxsb2NhdGUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChwY2JsaXN0LCAwLCBwY2JfbGVuKTsKKworICAgIG1pYls2XSA9IHNpemVvZigqcGNibGlzdCk7CisgICAgbWliWzddID0gcGNiX2xlbiAvIHNpemVvZigqcGNibGlzdCk7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YoKm1pYiksCisJCSAgICBwY2JsaXN0LCAmcGNiX2xlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInRjcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgc2l6ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBVbnBpY2sgdGhpcyBpbnRvIHRoZSBjb25zdGl0dWVudCBzdHJ1Y3R1cmVzLCBhbmQgZXh0cmFjdAorICAgICAqICAgICB0aGUgJ2lucGNiJyBlbGVtZW50cyBpbnRvIGEgbGlua2VkIGxpc3QgKGJ1aWx0IGluIHJldmVyc2UpCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHBjYl9sZW4gLyBzaXplb2YoKnBjYmxpc3QpOyBpKyspIHsKKwlzdHJ1Y3Qga2luZm9fcGNiICpwY2IgPSBwY2JsaXN0K2k7CisJc3RhdGUgPSBTdGF0ZU1hcFtwY2ItPmtpX3RzdGF0ZV07CisKKwlpZiAobG9hZF9mbGFncykgeworCSAgICBpZiAoc3RhdGUgPT0gVENQQ09OTkVDVElPTlNUQVRFX0xJU1RFTikgeworCQlpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9OT0xJU1RFTikgeworCQkgICAgREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICAgICIgc2tpcHBpbmcgbGlzdGVuXG4iKSk7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfT05MWUxJU1RFTikgeworCQlERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgIiBza2lwcGluZyBub24tbGlzdGVuXG4iKSk7CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdGNwY29ubl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPnRjcENvbm5TdGF0ZSA9IHN0YXRlOworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisJaWYgKHZlciA9PSA2KSB7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJICAgIG1lbWNweSgmc3JjLCAmcGNiLT5raV9zLCBzaXplb2Yoc3JjKSk7CisJICAgIG1lbWNweSgmZHN0LCAmcGNiLT5raV9kLCBzaXplb2YoZHN0KSk7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZzcmMuc2luNl9hZGRyLCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZkc3Quc2luNl9hZGRyLCAxNik7CisJICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKHNyYy5zaW42X3BvcnQpOworCSAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhkc3Quc2luNl9wb3J0KTsKKwl9CisJZWxzZSB7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKKwkgICAgbWVtY3B5KCZzcmMsICZwY2ItPmtpX3MsIHNpemVvZihzcmMpKTsKKwkgICAgbWVtY3B5KCZkc3QsICZwY2ItPmtpX2QsIHNpemVvZihkc3QpKTsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmc3JjLnNpbl9hZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmRzdC5zaW5fYWRkciwgNCk7CisJICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKHNyYy5zaW5fcG9ydCk7CisJICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGRzdC5zaW5fcG9ydCk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5hcmJpdHJhcnlfaW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICB9CisKKyAgICBpZihyYzwwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTA2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogIHRjcENvbm5UYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIE9wZW5CU0QKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3RjcENvbm4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisKKyNpbmNsdWRlICJ0Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9pbml0KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NvcHkobmV0c25tcF90Y3Bjb25uX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdGNwQ29ubiBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInRjcGNvbm5fY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc190Y3Bjb25uXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKworICAgIHJldHVybiByYzsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaW5wY2J0YWJsZSB0YWJsZTsKKyAgICBzdHJ1Y3QgaW5wY2IgICAqaGVhZCwgKm5leHQsICpwcmV2OworICAgIHN0cnVjdCBpbnBjYiAgIGlucGNiOworICAgIHN0cnVjdCB0Y3BjYiAgIHRjcGNiOworICAgIGludCAgICAgIFN0YXRlTWFwW10gPSB7IDEsIDIsIDMsIDQsIDUsIDgsIDYsIDEwLCA5LCA3LCAxMSB9OworICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIHN0YXRlOworICAgIGludCAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIGlmICghYXV0b19ubGlzdChUQ1BfU1lNQk9MLCAoY2hhciAqKSZ0YWJsZSwgc2l6ZW9mKHRhYmxlKSkpIHsKKwlERUJVR01TR1RMKCgidGNwLW1pYi90Y3BDb25uX29wZW5ic2QiLCAiRmFpbGVkIHRvIHJlYWQgdGNwX3N5bWJvbFxuIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBwcmV2ID0gKHN0cnVjdCBpbnBjYiAqKSZDSVJDTEVRX0ZJUlNUKCZ0YWJsZS5pbnB0X3F1ZXVlKTsKKyAgICBwcmV2ID0gTlVMTDsKKyAgICBoZWFkID0gbmV4dCA9IENJUkNMRVFfRklSU1QoJnRhYmxlLmlucHRfcXVldWUpOworCisgICAgd2hpbGUgKG5leHQpIHsKKwlpZiAoIU5FVFNOTVBfS0xPT0tVUChuZXh0LCAoY2hhciAqKSZpbnBjYiwgc2l6ZW9mKGlucGNiKSkpIHsKKwkgICAgREVCVUdNU0dUTCgoInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubiIsICJrbG9va3VwIGlucGNiIGZhaWxlZFxuIikpOworCSAgICBicmVhazsKKwl9CisJaWYgKHByZXYgJiYgQ0lSQ0xFUV9QUkVWKCZpbnBjYiwgaW5wX3F1ZXVlKSAhPSBwcmV2KSB7CisJICAgIHNubXBfbG9nKExPR19FUlIsInRjYnRhYmxlIGxpbmsgZXJyb3JcbiIpOworCSAgICBicmVhazsKKwl9CisJcHJldiA9IG5leHQ7CisJbmV4dCA9IENJUkNMRVFfTkVYVCgmaW5wY2IsIGlucF9xdWV1ZSk7CisJaWYgKCFORVRTTk1QX0tMT09LVVAoaW5wY2IuaW5wX3BwY2IsIChjaGFyICopJnRjcGNiLCBzaXplb2YodGNwY2IpKSkgeworCSAgICBERUJVR01TR1RMKCgidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uIiwgImtsb29rdXAgdGNwY2IgZmFpbGVkXG4iKSk7CisJICAgIGJyZWFrOworCX0KKwlzdGF0ZSA9IFN0YXRlTWFwW3RjcGNiLnRfc3RhdGVdOworCisJaWYgKGxvYWRfZmxhZ3MpIHsKKwkgICAgaWYgKHN0YXRlID09IFRDUENPTk5FQ1RJT05TVEFURV9MSVNURU4pIHsKKwkJaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfTk9MSVNURU4pIHsKKwkJICAgIERFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAgICAiIHNraXBwaW5nIGxpc3RlblxuIikpOworCQkgICAgZ290byBza2lwOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9PTkxZTElTVEVOKSB7CisJCURFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAiIHNraXBwaW5nIG5vbi1saXN0ZW5cbiIpKTsKKwkJZ290byBza2lwOworCSAgICB9CisJfQorCisjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICAgICAgaWYgKGlucGNiLmlucF9mbGFncyAmIElOUF9JUFY2KQorCSAgICBnb3RvIHNraXA7CisjZW5kaWYKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3RjcGNvbm5fZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBvZGRseSBlbm91Z2gsIHRoZXNlIGFwcGVhciB0byBhbHJlYWR5IGJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoaW5wY2IuaW5wX2xwb3J0KTsKKyAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoaW5wY2IuaW5wX2Zwb3J0KTsKKyAgICAgICAgZW50cnktPnRjcENvbm5TdGF0ZSA9IHN0YXRlOworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLworCWlmIChpbnBjYi5pbnBfZmxhZ3MgJiBJTlBfSVBWNikgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmaW5wY2IuaW5wX2xhZGRyNiwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmaW5wY2IuaW5wX2ZhZGRyNiwgMTYpOworCX0KKwllbHNlIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmaW5wY2IuaW5wX2xhZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmlucGNiLmlucF9mYWRkciwgNCk7CisJfQorCURFQlVHTVNHVEwoKCJ0Y3AtbWliL2RhdGFfYWNjZXNzIiwgInRjcCAlZCAlZCAlZFxuIiwKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiwgZW50cnktPmxvY19wb3J0LCBlbnRyeS0+cm10X3BvcnQpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+YXJiaXRyYXJ5X2luZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7Citza2lwOgorCWlmIChoZWFkID09IG5leHQpCisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYwppbmRleCA3YzJjNmFlLi44ODkyOTlhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYwpAQCAtMzksMTQgKzM5LDE2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQKIGludCAKLW5ldHNubXBfYXJjaF90Y3Bjb25uX2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVwKQorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZXApCiB7CiAgICAgLyoKICAgICAgKiBOb3QgaW1wbGVtZW50ZWQgCiAgICAgICovCiAgICAgcmV0dXJuICgtMSk7CiB9CisjZW5kaWYgLyogVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVEICovCiAKIGludCAKIG5ldHNubXBfYXJjaF90Y3Bjb25uX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyLCAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMKaW5kZXggZWI5MGY0MC4uYzk5OWEwZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgInRjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRbXSA9IHsgVENQQ09OTkVDVElPTlRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZFtdID0geyBUQ1BDT05ORUNUSU9OVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgodGNwQ29ubmVjdGlvblRhYmxlX29pZCk7CiAKIHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb24gdGNwQ29ubmVjdGlvblRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTM1NSw4ICszNTUsNyBAQAogICAgICAgICB0Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzX3ZhbF9wdHJfbGVuOwogICAgIG1lbWNweSh0YmxfaWR4LT50Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzLAogICAgICAgICAgICB0Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzX3ZhbF9wdHIsCi0gICAgICAgICAgIHRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3NfdmFsX3B0cl9sZW4gKgotICAgICAgICAgICBzaXplb2YodGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzc192YWxfcHRyWzBdKSk7CisgICAgICAgICAgIHRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3NfdmFsX3B0cl9sZW4pOwogCiAgICAgLyoKICAgICAgKiB0Y3BDb25uZWN0aW9uTG9jYWxQb3J0KDMpL0luZXRQb3J0TnVtYmVyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9hL3cvZS9SL2QvSCAKQEAgLTM4OSw4ICszODgsNyBAQAogICAgICAgICB0Y3BDb25uZWN0aW9uUmVtQWRkcmVzc192YWxfcHRyX2xlbjsKICAgICBtZW1jcHkodGJsX2lkeC0+dGNwQ29ubmVjdGlvblJlbUFkZHJlc3MsCiAgICAgICAgICAgIHRjcENvbm5lY3Rpb25SZW1BZGRyZXNzX3ZhbF9wdHIsCi0gICAgICAgICAgIHRjcENvbm5lY3Rpb25SZW1BZGRyZXNzX3ZhbF9wdHJfbGVuICoKLSAgICAgICAgICAgc2l6ZW9mKHRjcENvbm5lY3Rpb25SZW1BZGRyZXNzX3ZhbF9wdHJbMF0pKTsKKyAgICAgICAgICAgdGNwQ29ubmVjdGlvblJlbUFkZHJlc3NfdmFsX3B0cl9sZW4pOwogCiAgICAgLyoKICAgICAgKiB0Y3BDb25uZWN0aW9uUmVtUG9ydCg2KS9JbmV0UG9ydE51bWJlci9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvYS93L2UvUi9kL0ggCkBAIC00MDYsNyArNDA0LDcgQEAKICAqIEBpbnRlcm5hbAogICogc2V0IHJvdyBjb250ZXh0IGluZGV4ZXMKICAqCi0gKiBAcGFyYW0gcmVxcmVxX2N0eCB0aGUgcm93IGNvbnRleHQgdGhhdCBuZWVkcyB1cGRhdGVkIGluZGV4ZXMKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcwogICoKICAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KICAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oCmluZGV4IDlhN2IyOWIuLjE3ZDMxMDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oCkBAIC0zMDEsOCArMzAxLDggQEAKICAgICAgICAgKiB0Y3BDb25uZWN0aW9uVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgICh0Y3BDb25uZWN0aW9uVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJ0Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDY2YzQyYjUuLmRmYjk2NDkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0xODcsNyArMTg3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJtdF9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5ybXRfYWRkcl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJtdF9wb3J0KSkpIHsKLSAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpKSB7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19ERUJVRywKKyAgICAgICAgICAgICAgICAgICAgIkVycm9yIGluc2VydGluZyBlbnRyeSB0byB0Y3BDb25uZWN0aW9uVGFibGUsIlwKKyAgICAgICAgICAgICAgICAgICAgIiBlbnRyeSBhbHJlYWR5IGV4aXN0cy5cbiIpKTsKKyAgICAgICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAocm93cmVxX2N0eCkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCkBAIC0yNjAsNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6dGNwQ29ubmVjdGlvblRhYmxlOnRjcENvbm5lY3Rpb25UYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDUzNDg2MTQuLmQwYjI3ZTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE4IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwQ29ubmVjdGlvblRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfc2l6ZSwgdGNwQ29ubmVjdGlvblRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgdGNwQ29ubmVjdGlvblRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgdGNwQ29ubmVjdGlvblRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX2dldCwgdGNwQ29ubmVjdGlvblRhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MiwxOSArOTUsMjMgQEAKICAgICAgICAgICAgICAgICBfdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bih0Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHRjcENvbm5lY3Rpb25UYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9SRUdJU1RSQVRJT05fR0VUCiB0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uICoKIHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHRjcENvbm5lY3Rpb25UYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb24gKgogdGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQodGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDQsMTIgKzEyMSwxNSBAQAogICAgIHRjcENvbm5lY3Rpb25UYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKHRjcENvbm5lY3Rpb25UYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogdGNwQ29ubmVjdGlvblRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTMzLDcgKzE1Myw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTQ4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICAgICAgX3RjcENvbm5lY3Rpb25UYWJsZV91bmRvX2NvbHVtbih0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqCiAgKiBAaW50ZXJuYWwKQEAgLTE5Myw3ICsyMTMsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBUQ1BDT05ORUNUSU9OVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IFRDUENPTk5FQ1RJT05UQUJMRV9NQVhfQ09MOwpAQCAtMjMyLDggKzI1Miw3IEBACiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPQogICAgICAgICBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9wb3N0X3JlcXVlc3Q7CiAKLQotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI1OCw3ICsyNzcsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjczLDcgKzI5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEFORExFUl9DQU5fUldSSVRFCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CkBAIC0yOTQsNyArMzEzLDcgQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTMxNyw3ICszMzYsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNzg0LDcgKzgwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTg0MCw3ICs4NTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05MjEsNyArOTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC05OTAsNyArMTAwOSw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2dldF92YWx1ZXMgKi8KIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMTE4LDcgKzExMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xMTY2LDcgKzExODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xMjMzLDcgKzEyNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTEyOTgsNyArMTMxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xMzgxLDcgKzE0MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTQyOSw3ICsxNDQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTQ2Myw3ICsxNDgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE1NDIsNyArMTU2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0xNTk3LDcgKzE2MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNjE4LDcgKzE2MzcsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTc0Miw5ICsxNzYxLDEyIEBACiAgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CiAKICAgICB0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKLSAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CiAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0Y3BDb25uZWN0aW9uVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgICAgIGlmIChpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ0Y3BDb25uZWN0aW9uVGFibGUiKTsKKyAgICB9CiAgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCiAgICAgICAgICAgICAgICAgICJ0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX2luaXRcbiIpOwpAQCAtMTc3Miw2ICsxNzk0LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX3RjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKgogdGNwQ29ubmVjdGlvblRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleCh0Y3BDb25uZWN0aW9uVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTE3OTQsOCArMTgxNyw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORCh0Y3BDb25uZWN0aW9uVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYwppbmRleCAyYTZmZTdiLi5lYmQ2NzJiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgInRjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZFtdID0geyBUQ1BMSVNURU5FUlRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkW10gPSB7IFRDUExJU1RFTkVSVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKHRjcExpc3RlbmVyVGFibGVfb2lkKTsKIAogdGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb24gdGNwTGlzdGVuZXJUYWJsZV91c2VyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaAppbmRleCAwODk4ZjljLi4wOGE3NDFhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgKQEAgLTE4Miw4ICsxODIsOCBAQAogICAgICAgICAqIHRjcExpc3RlbmVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHRjcExpc3RlbmVyVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJ0Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMDUwM2ZiMy4uNGFhMTRmZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6dGNwTGlzdGVuZXJUYWJsZTp0Y3BMaXN0ZW5lclRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYwppbmRleCBjZmFiZGQxLi4yZTQxMzgwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTggQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BMaXN0ZW5lclRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX3NpemUsIHRjcExpc3RlbmVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgdGNwTGlzdGVuZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCB0Y3BMaXN0ZW5lclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9nZXQsIHRjcExpc3RlbmVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTc5LDE5ICs5MiwyMyBAQAogICAgICAgICAgICAgICAgIF90Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bih0Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiB0Y3BMaXN0ZW5lclRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogdGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb24gKgogdGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHRjcExpc3RlbmVyVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uICoKIHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uX3NldCh0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKIHsKQEAgLTk5LDEyICsxMTYsMTUgQEAKICAgICB0Y3BMaXN0ZW5lclRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUodGNwTGlzdGVuZXJUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogLyoKICAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcwpAQCAtMTUwLDcgKzE3MCw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IFRDUExJU1RFTkVSVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IFRDUExJU1RFTkVSVEFCTEVfTUFYX0NPTDsKQEAgLTIyMCw3ICsyNDAsOCBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0yNDMsNyArMjY0LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTYwOSw3ICs2MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTY1Niw3ICs2NzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcExpc3RlbmVyVGFibGU6X21mZF90Y3BMaXN0ZW5lclRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC03MjcsNyArNzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTkyNCw5ICs5NDUsMTIgQEAKICAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKIAogICAgIHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKLSAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CiAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0Y3BMaXN0ZW5lclRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgICAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInRjcExpc3RlbmVyVGFibGUiKTsKKyAgICB9CiAgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCiAgICAgICAgICAgICAgICAgICJ0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKQEAgLTk1NCw2ICs5NzgsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqCiB0Y3BMaXN0ZW5lclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleCh0Y3BMaXN0ZW5lclRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQpAQCAtOTc2LDggKzEwMDEsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKHRjcExpc3RlbmVyVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYyBiL2FnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMKaW5kZXggODA4NTljZS4uZjc0NjhmMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYworKysgYi9hZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC05LDYgKzEwLDExIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVsb25nX2luc3RhbmNlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVnaXN0ZXJfcmVhZF9vbmx5X3RhYmxlX2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9idWlsZF9yZXN1bHQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC03NCw2ICs4MCw4IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmICh0YWJsZV9pbmZvID09IE5VTEwpCisgICAgICAgIHJldHVybjsKIAogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCBBU05fSU5URUdFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKQEAgLTEyMyw2ICsxMzEsOCBAQAogICAgICAqIGF1dG9tYXRpY2FsbHkgcGFyc2VkIGNvbHVtbiBhbmQgaW5kZXggaW5mb3JtYXRpb24gCiAgICAgICovCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKHRhYmxlX2luZm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgMCk7CkBAIC0zMjUsNiArMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBhY2Nlc3Nlcywgc2l6ZW9mKGFjY2Vzc2VzKSk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IEFTTl9VTlNJR05FRCkKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCkBAIC0zNjcsNiArMzc4LDcgQEAKICAgICAgICAgICogbm90aGluZyB0byBkbyAKICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU2OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uKQorY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSkKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZSkKK2NvbmZpZ19hZGRfbWliKFNOTVAtVExTLVRNLU1JQikKK2NvbmZpZ19hZGRfbWliKFNOTVAtVFNNLU1JQikKKworI2RlZmluZSBTTk1QX1RMU19UTV9CQVNFICAgICAxLCAzLCA2LCAxLCAyLCAxLCAxOTgKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjEwOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBTTk1QVExTVE1BRERSVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1BRERSVEFCTEVfSAorCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZSkKKworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUTFNUTUFERFJUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDkzZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYwpAQCAtMCwwICsxLDE0MzggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgInRsc3RtLW1pYi5oIgorI2luY2x1ZGUgInNubXBUbHN0bUFkZHJUYWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRsc3RtYWRkcl9jb250YWluZXIpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfcmVtb3ZlX3JvdykKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9zdG9yYWdldHlwZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqIFhYWCAtIG1vdmUgdGhlc2UgdG8gdGFibGVfZGF0YSBoZWFkZXI/ICovCisjZGVmaW5lIEZBVEVfTkVXTFlfQ1JFQVRFRCAgICAxCisjZGVmaW5lIEZBVEVfTk9fQ0hBTkdFICAgICAgICAwCisjZGVmaW5lIEZBVEVfREVMRVRFX01FICAgICAgICAtMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIHN0cnVjdHVyZSBmb3IgdW5kbyBzdG9yYWdlIGFuZCBvdGhlciB2YXJzIGZvciBzZXQgcHJvY2Vzc2luZyAKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IHRsc3RtQWRkclRhYmxlX3VuZG9fcyB7CisgICAgY2hhciAgICAgICAgICAgIGZhdGU7CisgICAgY2hhciAgICAgICAgICAgIGNvcGllZDsKKyAgICBjaGFyICAgICAgICAgICAgaXNfY29uc2lzdGVudDsKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxW1RMU1RNQUREUlRBQkxFX01BWF9DT0xVTU4gKyAxXTsKKyAgICAvKgorICAgICAqIHVuZG8gQ29sdW1uIHNwYWNlIAorICAgICAqLworICAgIGNoYXIgICAgICAgdGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRbVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW47CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclNlcnZlcklkZW50aXR5W1RMU1RNQUREUlNFUlZFUklERU5USVRZX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgdGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJTdG9yYWdlVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyUm93U3RhdHVzOworICAgIGNoYXIgICAgICAgICAgICBoYXNoVHlwZTsKK30gdGxzdG1BZGRyVGFibGVfdW5kbzsKKworICAgIC8qCisgICAgICogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgCisgICAgICovCit0eXBlZGVmIHN0cnVjdCB0bHN0bUFkZHJUYWJsZV9lbnRyeV9zIHsKKyAgICAvKgorICAgICAqIEluZGV4IHZhbHVlcyAKKyAgICAgKi8KKyAgICBjaGFyICAgICAgICAgICAgc25tcFRhcmdldEFkZHJOYW1lW1NOTVBUQVJHRVRBRERSTkFNRV9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIHNubXBUYXJnZXRBZGRyTmFtZV9sZW47CisKKyAgICAvKgorICAgICAqIENvbHVtbiB2YWx1ZXMgCisgICAgICovCisgICAgY2hhciAgICAgICAgdGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRbVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW47CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclNlcnZlcklkZW50aXR5W1RMU1RNQUREUlNFUlZFUklERU5USVRZX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgdGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJTdG9yYWdlVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyUm93U3RhdHVzOworICAgIGNoYXIgICAgICAgICAgICBoYXNoVHlwZTsKKworICAgIC8qCisgICAgICogdXNlZCBkdXJpbmcgc2V0IHByb2Nlc3NpbmcgCisgICAgICovCisgICAgdGxzdG1BZGRyVGFibGVfdW5kbyAqdW5kbzsKKworICAgIC8qCisgICAgICogdXNlciBkYXRhCisgICAgICovCisgICAgc3RydWN0IG5ldHNubXBfY2VydF9zICAgKmNlcnQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgIGFkZHJfZmxhZ3M7CisKK30gdGxzdG1BZGRyVGFibGVfZW50cnk7CisKK25ldHNubXBfdGRhdGFfcm93ICp0bHN0bUFkZHJUYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzbm1wVGFyZ2V0QWRkck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNubXBUYXJnZXRBZGRyTmFtZV9sZW4pOwordm9pZCB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKiByb3cpOworCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgdGxzdG1BZGRyVGFibGVfaGFuZGxlcjsKK3N0YXRpYyBpbnQgX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKTsKK3N0YXRpYyB2b2lkIF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSk7CitzdGF0aWMgdWludDMyX3QgX2xhc3RfY2hhbmdlZCA9IDA7CitzdGF0aWMgaW50IF9jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworCitzdGF0aWMgdm9pZCBfdGxzdG1BZGRyX2luaXRfcGVyc2lzdGVuY2Uodm9pZCk7CitzdGF0aWMgdm9pZCBfYWRkcnNfYWRkKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBfYWRkcnNfcmVtb3ZlKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBfYWRkcl90d2Vha19zdG9yYWdlKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgbmV0c25tcF90ZGF0YSAgKl90YWJsZV9kYXRhID0gTlVMTDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogSW5pdGlhbGl6ZXMgdGhlIHRsc3RtQWRkclRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wVGxzdG1BZGRyVGFibGUodm9pZCkKK3sKKyAgICBvaWQgICAgICAgICAgICAgcmVnX29pZFtdID0geyBTTk1QX1RMU19UTV9BRERSX1RBQkxFIH07CisgICAgY29uc3Qgc2l6ZV90ICAgIHJlZ19vaWRfbGVuID0gT0lEX0xFTkdUSChyZWdfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX2NhY2hlICAgICAgICAgICAgICAgICAgICpjYWNoZTsKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICAgICp3YXRjaGVyOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmluaXQiLAorICAgICAgICAgICAgICAgICJpbml0aWFsaXppbmcgdGFibGUgdGxzdG1BZGRyVGFibGVcbiIpKTsKKworICAgIHJlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJ0bHN0bUFkZHJUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworCisgICAgX3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgidGxzdG1BZGRyVGFibGUiLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBfdGFibGVfZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgdGRhdGEgdGFibGUgZm9yIHRsc3RtQWRkclRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyB0YWJsZSBpbmZvIGZvciB0bHN0bUFkZHJUYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZV9kYXRhKTsKKyAgICAgICAgX3RhYmxlX2RhdGEgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWNoZSBpbml0CisgICAgICovCisgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgKE5ldHNubXBDYWNoZUxvYWQqKV9jYWNoZV9sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5ldHNubXBDYWNoZUZyZWUqKV9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4pOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlX2RhdGEpOworICAgICAgICBfdGFibGVfZGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FjaGUtPm1hZ2ljID0gKHZvaWQgKilfdGFibGVfZGF0YTsKKyAgICBjYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICAvKgorICAgICAqIHBvcHVsYXRlIGluZGV4IHR5cGVzCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleDogc25tcFRhcmdldEFkZHJOYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1BSSVZfSU1QTElFRF9PQ1RFVF9TVFIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IFRMU1RNQUREUlRBQkxFX01JTl9DT0xVTU47CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IFRMU1RNQUREUlRBQkxFX01BWF9DT0xVTU47CisKKyAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworCisgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGVfY29udGFpbmVyIik7CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHNjYWxhcnMKKyAgICAgKi8KKyAgICByZWdfb2lkWzEwXSA9IDc7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBUbHN0bUFkZHJDb3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvdW50X2hhbmRsZXIsIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1BZGRyQ291bnRcbiIpOworICAgIGVsc2UgeworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihyZWcpOworICAgICAgICBpZiAoY2FjaGUpIAorICAgICAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUocmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic25tcFRsc3RtQWRkckNvdW50Iik7CisgICAgfQorICAgIAorICAgIHJlZ19vaWRbMTBdID0gODsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgInNubXBUbHN0bUFkZHJUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwgcmVnX29pZCwKKyAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIHdhdGNoZXIgPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQqKSZfbGFzdF9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9sYXN0X2NoYW5nZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1RJTUVUSUNLUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBVENIRVJfRklYRURfU0laRSk7CisgICAgaWYgKChOVUxMID09IHJlZykgfHwgKE5VTEwgPT0gd2F0Y2hlcikpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bUFkZHJUYWJsZUxhc3RDaGFuZ2VkXG4iKTsKKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKHJlZywgd2F0Y2hlcik7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlIAorICAgICAqLworICAgIF90bHN0bUFkZHJfaW5pdF9wZXJzaXN0ZW5jZSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKKyAqLworbmV0c25tcF90ZGF0YV9yb3cgKgordGxzdG1BZGRyVGFibGVfY3JlYXRlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzbm1wVGFyZ2V0QWRkck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc25tcFRhcmdldEFkZHJOYW1lX2xlbikKK3sKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKworICAgIGlmIChzbm1wVGFyZ2V0QWRkck5hbWVfbGVuID4gc2l6ZW9mKGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRih0bHN0bUFkZHJUYWJsZV9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3coKTsKKyAgICBpZiAoIXJvdykgeworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcm93LT5kYXRhID0gZW50cnk7CisKKyAgICBERUJVR0lGKCJ0bHN0bUFkZHJUYWJsZTplbnRyeTpjcmVhdGUiKSB7CisgICAgICAgIGNoYXIgbmFtZVtzaXplb2YoZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSkrMV07CisgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgc25tcFRhcmdldEFkZHJOYW1lKTsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzdG1BZGRyVGFibGU6ZW50cnk6Y3JlYXRlIiwgImVudHJ5ICVzICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGVudHJ5LCByb3cpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBvcHVsYXRlIGluZGV4CisgICAgICovCisgICAgbWVtY3B5KGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsIHNubXBUYXJnZXRBZGRyTmFtZSwKKyAgICAgICAgICAgc25tcFRhcmdldEFkZHJOYW1lX2xlbik7CisgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZV9sZW4gPSBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuOworICAgIG5ldHNubXBfdGRhdGFfcm93X2FkZF9pbmRleChyb3csIEFTTl9QUklWX0lNUExJRURfT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuKTsKKworICAgIC8qCisgICAgICogZGVmYXVsdHMKKyAgICAgKi8KKyAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRbMF0gPSAnXDAnOworICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPSAwOworICAgIGVudHJ5LT5oYXNoVHlwZSA9IDA7CisgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5WzBdID0gJ1wwJzsKKyAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0gMDsKKyAgICBlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKyAgICBlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisKKyAgICBpZiAodGFibGVfZGF0YSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6cm93Omluc2VydCIsICJyb3cgJXBcbiIscm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZV9kYXRhLCByb3cpOworICAgIH0KKyAgICByZXR1cm4gcm93OworfQorCisvKgorICogYWxsb2NhdGUgdW5kbyByZXNvdXJjZXMgCisgKi8KK3N0YXRpYyB0bHN0bUFkZHJUYWJsZV91bmRvICoKK19hbGxvY1VuZG8odGxzdG1BZGRyVGFibGVfZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT51bmRvID0gU05NUF9NQUxMT0NfVFlQRURFRih0bHN0bUFkZHJUYWJsZV91bmRvKTsKKyAgICBpZiAoIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gLTE7ICAgIC8qIGRvbid0IGtub3cgKi8KKworICAgIHJldHVybiBlbnRyeS0+dW5kbzsKK30KKworLyoKKyAqIGZyZWUgdW5kbyByZXNvdXJjZXMgCisgKi8KK3N0YXRpYyB2b2lkCitfZnJlZVVuZG8odGxzdG1BZGRyVGFibGVfZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuOworCisgICAgU05NUF9GUkVFKGVudHJ5LT51bmRvKTsKK30KKworLyoKKyAqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAKKyAqLwordm9pZAordGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqIHJvdykKK3sKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKworICAgIGVudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopIHJvdy0+ZGF0YTsKKworICAgIGlmICh0YWJsZV9kYXRhKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpyb3c6cmVtb3ZlIiwgInJvdyAlcFxuIixyb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGVfZGF0YSwgcm93KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3cocm93KTsKKworICAgIERFQlVHSUYoInRsc3RtQWRkclRhYmxlOmVudHJ5OmRlbGV0ZSIpIHsKKyAgICAgICAgY2hhciBuYW1lW3NpemVvZihlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lKSsxXTsKKyAgICAgICAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lKTsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzdG1BZGRyVGFibGU6ZW50cnk6ZGVsZXRlIiwgImVudHJ5ICVzICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGVudHJ5LCByb3cpKTsKKyAgICB9CisgICAgaWYgKGVudHJ5ICYmIGVudHJ5LT51bmRvKQorICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHRsc3RtQWRkclRhYmxlIHRhYmxlICovCitzdGF0aWMgaW50Cit0bHN0bUFkZHJUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF90ZGF0YSAgKnRhYmxlX2RhdGE7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnRhYmxlX3JvdzsKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAqdGFibGVfZW50cnk7CisgICAgaW50ICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6aGFuZGxlciIsICJQcm9jZXNzaW5nIG1vZGUgJXMgKCVkKSByZXF1ZXN0XG4iLAorICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSwKKyAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEdFVCAjIyMjIworICAgICAqCisgICAgICogICBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdV9jaGFyIGJpbls0Ml0sICpwdHIgPSBiaW47CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHNpemVvZihiaW4pLCBvZmZzZXQgPSAxOworICAgICAgICAgICAgICAgIGludCAgICByYzsKKworICAgICAgICAgICAgICAgIGlmICgodGFibGVfZW50cnktPmhhc2hUeXBlID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID09MCkpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJpblswXSA9IHRhYmxlX2VudHJ5LT5oYXNoVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2hleF90b19iaW5hcnkoCisgICAgICAgICAgICAgICAgICAgICAgICAmcHRyLCAmbGVuLCAmb2Zmc2V0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gcmMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbiwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFkgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfR0VUICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMSAjIyMjIworICAgICAqCisgICAgICogICBJbiBSRVNFUlZFMSB3ZSBhcmUganVzdCBjaGVja2luZyBiYXNpYyBBU04uMSBzaXplL3R5cGUgcmVzdHJpY3Rpb25zLgorICAgICAqIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnkgb2YgdGhpcyBjb2RlLiBEb24ndCBjaGFuZ2UgYW55CisgICAgICogb2YgdGhlIGNvbHVtbiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBSRVNFUlZFMiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICgoTlVMTCAhPSB0YWJsZV9lbnRyeSkgJiYKKyAgICAgICAgICAgICAgICAoU1RfUkVBRE9OTFkgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICAvKiogY2hlY2sgbGVuL2FsZ29yaXRobSBNSUIgcmVxdWlyZW1lbnRzICovCisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NlcnRfY2hlY2tfdmJfZmluZ2VycHJpbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFkgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3N0b3JhZ2V0eXBlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPworICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA6IFNUX05PTkUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/CisgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA6IFJTX05PTkVYSVNURU5UKSwKKyAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/CisgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlIDogU1RfTk9ORSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTEgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUyICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJFU0VSVkUyIGlzIGZvciBjaGVja2luZyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBmcm9tIHRoZSBNSUIuCisgICAgICogU2luY2UgdGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBvZnRlbiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdCwKKyAgICAgKiBtaWIyYyBjYW4ndCBnZW5lcmF0ZSBjb2RlLiBJdCdzIHBvc3NpYmxlIHRoYXQgeW91IG5lZWQgdG8gYWRkCisgICAgICogYWRkaXRpb25hbCBjaGVja3MgaGVyZS4gSG93ZXZlciwgZG9uJ3QgY2hhbmdlIGFueSBvZiB0aGUgY29sdW1uCisgICAgICogdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgQUNUSU9OIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaWYgbm8gdGFibGVfcm93LCBjcmVhdGUgb25lCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnkpIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSB0bHN0bUFkZHJUYWJsZV9jcmVhdGVFbnRyeQorICAgICAgICAgICAgICAgICAgICAodGFibGVfZGF0YSwgKGNoYXIqKXRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX3JvdykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSB0YWJsZV9yb3ctPmRhdGE7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmZhdGUgPSBGQVRFX05FV0xZX0NSRUFURUQ7CisgICAgICAgICAgICAgICAgLyoqIGFzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiogYWxsb2NhdGUgdW5kbyBzdHJ1Y3R1cmUsIGlmIG5lZWRlZCAqLworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiogZG9uJ3QgYWxsb3cgbXVsdGlwbGUgc2V0cyBvZiBzYW1lIGNvbHVtbiAqLworICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbdGFibGVfaW5mby0+Y29sbnVtXSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoInRsc3RtQWRkclRhYmxlOnJlc2VydmUyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBzZXRzIHRvIGNvbCAlZCBpbiByZXF1ZXN0XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtKSk7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbdGFibGVfaW5mby0+Y29sbnVtXSA9IHJlcXVlc3Q7CisKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoqIG1ha2Ugc3VyZSByb3dzdGF0dXMgaXMgdXNlZCB0byBjcmVhdGUgcm93cyAqLworICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIGlmICgodGFibGVfZW50cnktPnVuZG8tPmZhdGUgIT0gRkFURV9ORVdMWV9DUkVBVEVEKSB8fAorICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVU10pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgLyBjcmVhdGlvbiAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBubyBlcnJvciAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUyICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRlJFRSAjIyMjIworICAgICAqCisgICAgICogICBGUkVFIGlzIGZvciBjbGVhbmluZyB1cCBhZnRlciBhIGZhaWxlZCByZXF1ZXN0IChkdXJpbmcgZWl0aGVyCisgICAgICogUkVTRVJWRTEgb3IgUkVTRVJWRTIpLiBTbyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyBuZWVkIHRvIGJlCisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gcmVzb3VyY2VzLCAgcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgID0gIG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0KKyAgICAgICAgICAgICAgICAodGxzdG1BZGRyVGFibGVfZW50cnkgKikgdGFibGVfcm93ID8gdGFibGVfcm93LT4KKyAgICAgICAgICAgICAgICBkYXRhIDogTlVMTDsKKworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0ZSRUUgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQUNUSU9OICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIHRoZSBBQ1RJT04gcGhhc2UsIHdlIHBlcmZvcm0gYW55IHNldHMgdGhhdCBjYW4gYmUgdW5kb25lLgorICAgICAqIChTYXZlIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgdW5kb25lIGZvciB0aGUgQ09NTUlUIHBoYXNlLikKKyAgICAgKgorICAgICAqICAgQWZ0ZXIgaW5kaXZpZHVhbCBjb2x1bW5zIGhhdmUgYmVlbiBkb25lLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlCisgICAgICogcm93IGFzIGEgd2hvbGUgaXMgY29uc2lzdGVudC4KKyAgICAgKgorICAgICAqIFRoZSBuZXh0IHBoYXNlIGlzIFVORE8gb3IgQ09NTUlULgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVfY2hhciAqdG1wID0gKHVfY2hhciopdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50OworCisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW47CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmhhc2hUeXBlID0gdGFibGVfZW50cnktPmhhc2hUeXBlOworCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhhc2hUeXBlID0gcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LCAwLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYmluYXJ5X3RvX2hleCgmdG1wLCAmdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmdbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoMCA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZOgorICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuOworICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksIDAsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclJvd1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICovCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHZhbHVlcyBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFsbCBjb2x1bW5zIG5vdyBoYXZlIHRoZWlyIGZpbmFsIHZhbHVlcyBzZXQuIGNoZWNrIHRoZQorICAgICAgICAgICAgICogaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgZWFjaCByb3cuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGFscmVhZHkgY2hlY2tlZCAqLworCisgICAgICAgICAgICAgICAgLyoqIGFzc3VtZSBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcGVyIG1pYiwgY2FuJ3QgaGF2ZSBlbXB0eSBmaW5nZXJwcmludCBhbmQgd2lsZGNhcmQgaWQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoICgwID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4pICYmCisgICAgICAgICAgICAgICAgICAgICAoMSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuKSAmJgorICAgICAgICAgICAgICAgICAgICAgKCcqJyA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlbMF0pICkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGUiLCAiZmluZ2VycHJpbnQgbXVzdCBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgZW1wdHkgZm9yIHdpbGRjYXJkICgqKSBpZGVudGl0eVxuIikpOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpKSAmJgorICAgICAgICAgICAgICAgICAgICAoKCF0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTXSkgfHwKKyAgICAgICAgICAgICAgICAgICAgIChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclJvd1N0YXR1cykpKSkgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBjaGVjayBtaWIgcmVzdHJpY3Rpb25zIG9uIGFjdGl2ZSByb3dzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlRdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7IC8qIHBlciBtaWIgKi8KKyAgICAgICAgICAgICAgICB9IC8qIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChSU19JU19HT0lOR19BQ1RJVkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoqIGlmIGdvaW5nIGFjdGl2ZSwgaW5jb25zaXN0ZW5jeSBpcyBmYXRhbCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVU107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8qIGdvaW5nIGFjdGl2ZSAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJTX0RFU1RST1kgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAvKiogY2FuJ3QgZGVsZXRlIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyUm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVU107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgLyogZGVzdHJveSAqLworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIGNvbnNpc3RlbmN5IGZvciByZXF1ZXN0cyAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBubyBlcnJvciAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0FDVElPTiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFVORE8gIyMjIyMKKyAgICAgKgorICAgICAqICAgVU5ETyBpcyBmb3IgY2xlYW5pbmcgdXAgYW55IGZhaWxlZCByZXF1ZXN0cyB0aGF0IHdlbnQgdGhyb3VnaCB0aGUKKyAgICAgKiBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9CisgICAgICAgICAgICAgICAgKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopIHRhYmxlX3JvdyA/IHRhYmxlX3Jvdy0+CisgICAgICAgICAgICAgICAgZGF0YSA6IE5VTEw7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVzdG9yZSB0bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCB2YWx1ZSAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbjsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aGFzaFR5cGUgPSB0YWJsZV9lbnRyeS0+dW5kby0+aGFzaFR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVzdG9yZSB0bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSB2YWx1ZSAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZXN0b3JlIHRsc3RtQWRkclN0b3JhZ2VUeXBlIHZhbHVlIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVzdG9yZSB0bHN0bUFkZHJSb3dTdGF0dXMgdmFsdWUgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJSb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gZGF0YQorICAgICAgICAgKiBvciByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPQorICAgICAgICAgICAgICAgICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKSB0YWJsZV9yb3cgPyB0YWJsZV9yb3ctPgorICAgICAgICAgICAgICAgIGRhdGEgOiBOVUxMOworCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHRhYmxlX3Jvdyk7CisKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9VTkRPICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENPTU1JVCAjIyMjIworICAgICAqCisgICAgICogICBDT01NSVQgaXMgdGhlIGZpbmFsIHN1Y2Nlc3Mgc3RhdGUsIHdoZW4gYWxsIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4KKyAgICAgKiBUaGVyZSBpcyBub3QgcmVjb3Zlcnkgc3RhdGUgc2hvdWxkIHNvbWV0aGluZyBmYWlsZSBoZXJlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoKFJTX05PVFJFQURZID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpICYmCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgIGVsc2UgaWYgKChSU19OT1RJTlNFUlZJQ0UgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykgJiYKKyAgICAgICAgICAgICAgICAgICAgICgwID09IHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSkKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisKKyAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSBmb3IgcmVxdWVzdHMgd2l0aCBubyByb3dzdGF0dXMgKi8KKyAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kbyAmJgorICAgICAgICAgICAgICAgICF0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTXSAhPSAwKSB7CisKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworCisgICAgICAgICAgICAgICAgLyoqIHVwZGF0ZSBhY3RpdmUgYWRkcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKDAgPT0gdGFibGVfZW50cnktPmFkZHJfZmxhZ3MpICYmCisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID09IFJTX0FDVElWRSkpCisgICAgICAgICAgICAgICAgICAgIF9hZGRyc19hZGQodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgwICE9IHRhYmxlX2VudHJ5LT5hZGRyX2ZsYWdzKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID09IFJTX0RFU1RST1kpKQorICAgICAgICAgICAgICAgICAgICBfYWRkcnNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSB0YWJsZV9lbnRyeS0+YWRkcl9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWRkcnNfYWRkKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19OT1RJTlNFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAvKiogc2ltcGx5IHNldCBzdGF0dXMgYmFzZWQgb24gY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IHRhYmxlX2VudHJ5LT5hZGRyX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRyc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19ERVNUUk9ZOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gdGFibGVfZW50cnktPmFkZHJfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FkZHJzX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICovCisKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgICAgIGlmIChSU19BQ1RJVkUgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRyX3R3ZWFrX3N0b3JhZ2UodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qKiB1cGRhdGUgbGFzdCBjaGFuZ2VkICovCisgICAgICAgIF9sYXN0X2NoYW5nZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKworICAgICAgICAvKiogc2V0IHVwIHRvIHNhdmUgcGVyc2lzdGVudCBzdG9yZSAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0NPTU1JVCAqLworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpICovCisKKyAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQKK19jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHZhbDsKKworICAgIGlmIChNT0RFX0dFVCAhPSByZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgbW9kZSBpbiBSTyBoYW5kbGVyIik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgaWYgKChOVUxMID09IF90YWJsZV9kYXRhKSB8fCAoTlVMTCA9PSBfdGFibGVfZGF0YS0+Y29udGFpbmVyKSkKKyAgICAgICAgdmFsID0gMDsKKyAgICBlbHNlCisgICAgICAgIHZhbCA9IENPTlRBSU5FUl9TSVpFKF90YWJsZV9kYXRhLT5jb250YWluZXIpOworCisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9HQVVHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmdmFsLCBzaXplb2YodmFsKSk7CisgICAKKyAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQorICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CisgICAgCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGhhbmRsZSBjYWNoZSAvIGludGVyYWN0aW9ucyB3aXRoIHRsc3RtQWRkciBjb250YWluZXIgaW4gc25tcGxpYgorICoKKyAqKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK19hZGRyc19hZGQodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyczsKKyAgICBzbm1wVGxzdG1BZGRyICAgICAqYWRkcjsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6YWRkcnM6YWRkIiwgIm5hbWUgJXMsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBhZGRycyAqLworICAgIGFkZHJzID0gbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcnMpCisgICAgICAgIHJldHVybjsKKworICAgIGFkZHIgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jcmVhdGUoZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSk7CisgICAgaWYgKE5VTEwgPT0gYWRkcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4pCisgICAgICAgIGFkZHItPmZpbmdlcnByaW50ID0gc3RyZHVwKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCk7CisgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4pCisgICAgICAgIGFkZHItPmlkZW50aXR5ID0gc3RyZHVwKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSk7CisgICAgYWRkci0+aGFzaFR5cGUgPSBlbnRyeS0+aGFzaFR5cGU7CisKKyAgICBhZGRyLT5mbGFncyA9IFRMU1RNX0FERFJfRlJPTV9NSUI7CisgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgYWRkci0+ZmxhZ3MgfD0gVExTVE1fQUREUl9OT05WT0xBVElMRTsKKworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGFkZHJzLCBhZGRyKSAhPSAwKSB7CisgICAgICAgIG5ldHNubXBfdGxzdG1BZGRyX2ZyZWUoYWRkcik7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgaW5zZXJ0IG5ldyB0bHN0bSBhZGRyIik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX2FkZHJzX3JlbW92ZSh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFkZHJzOworICAgIHNubXBUbHN0bUFkZHIgICAgICBhZGRyOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTphZGRyOnJlbW92ZSIsICJuYW1lICVzLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLCBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgYWRkcnMgKi8KKyAgICBhZGRycyA9IG5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGFkZHJzKQorICAgICAgICByZXR1cm47CisKKyAgICBhZGRyLm5hbWUgPSBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lOworICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKGFkZHJzLCAmYWRkcikgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHJlbW92ZSB0bHN0bSBhZGRyIik7CisgICAgfQorICAgIGVudHJ5LT5hZGRyX2ZsYWdzID0gMDsKK30KKworc3RhdGljIHZvaWQKK19hZGRyX3R3ZWFrX3N0b3JhZ2UodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyczsKKyAgICBzbm1wVGxzdG1BZGRyICAgICAqYWRkciwgaW5kZXg7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmFkZHI6dHdlYWsiLCAibmFtZSAlcywgc3QgJWRcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwgZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlKSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIGFkZHJzICovCisgICAgYWRkcnMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRycykKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5kZXgubmFtZSA9IGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWU7CisgICAgYWRkciA9IENPTlRBSU5FUl9GSU5EKGFkZHJzLCAmaW5kZXgpOworICAgIGlmIChOVUxMID09IGFkZHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmFkZHI6dHdlYWsiLCAiY291bGRuJ3QgZmluZCBhZGRyIVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgYWRkci0+ZmxhZ3MgfD0gVExTVE1fQUREUl9OT05WT0xBVElMRTsKKyAgICBlbHNlCisgICAgICAgIGFkZHItPmZsYWdzICY9IH5UTFNUTV9BRERSX05PTlZPTEFUSUxFOworfQorCitzdGF0aWMgbmV0c25tcF90ZGF0YV9yb3cgKgorX2VudHJ5X2Zyb21fYWRkcihzbm1wVGxzdG1BZGRyICAqYWRkcikKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIHJvdyA9IHRsc3RtQWRkclRhYmxlX2NyZWF0ZUVudHJ5KE5VTEwsIGFkZHItPm5hbWUsIHN0cmxlbihhZGRyLT5uYW1lKSk7CisgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW4gY3JlYXRlIHRsc3RtQWRkciByb3cgZW50cnlcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICBpZiAoYWRkci0+ZmxhZ3MgJiBUTFNUTV9BRERSX0ZST01fQ09ORklHKQorICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPSBTVF9QRVJNQU5FTlQ7CisgICAgZWxzZSBpZiAoISAoYWRkci0+ZmxhZ3MgJiBUTFNUTV9BRERSX05PTlZPTEFUSUxFKSkKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0gU1RfVk9MQVRJTEU7CisKKyAgICBlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfQUNUSVZFOworCisgICAgaWYgKGFkZHItPmZpbmdlcnByaW50KSB7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPSBzdHJsZW4oYWRkci0+ZmluZ2VycHJpbnQpOworICAgICAgICBpZiAoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA+CisgICAgICAgICAgICBzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSkKKyAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpIC0gMTsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwgYWRkci0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuKTsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50W3NpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpIC0gMV0gPSAwOworICAgIH0KKworICAgIGlmIChhZGRyLT5pZGVudGl0eSkgeworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0gc3RybGVuKGFkZHItPmlkZW50aXR5KTsKKyAgICAgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPgorICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkpCisgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSAtIDE7CisgICAgICAgIG1lbWNweShlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksIGFkZHItPmlkZW50aXR5LAorICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbik7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eVtzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSAtIDFdID0gMDsKKyAgICB9CisKKyAgICBlbnRyeS0+aGFzaFR5cGUgPSBhZGRyLT5oYXNoVHlwZTsKKyAgICBlbnRyeS0+YWRkcl9mbGFncyA9IGFkZHItPmZsYWdzOworCisgICAgcmV0dXJuIHJvdzsKK30KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyczsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRyOworICAgIHNubXBUbHN0bUFkZHIgICAgICphZGRyOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpsb2FkIiwgImNhbGxlZCwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgcm93cyAqLworICAgIGFkZHJzID0gbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmxvYWQiLCAidGxzdG1BZGRyICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGFkZHJzKSkpOworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihhZGRycyk7CisgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpsb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGluc2VydCByb3dzIGZvciBhY3RpdmUgYWRkcnMgaW50byB0YmwgY29udGFpbmVyCisgICAgICovCisgICAgYWRkciA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7IGFkZHI7IGFkZHIgPSBJVEVSQVRPUl9ORVhUKGl0cikpIHsKKworICAgICAgICByb3cgPSBfZW50cnlfZnJvbV9hZGRyKGFkZHIpOworICAgICAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgICAgIHJjID0tMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZSwgcm93KSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmxvYWQiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSkKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIG5ldHNubXBfaXRlcmF0b3IgICAqdGJsX2l0cjsKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAgICplbnRyeTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpmcmVlIiwgImNhbGxlZCwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IodGFibGUtPmNvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6ZnJlZSIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBlbnRyeSBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiByZW1vdmUgYWxsIGFjdGl2ZSByb3dzICh0aGV5IGFyZSBpbiB0aGUgYWRkcnMgY29udGFpbmVyIGtlcHQKKyAgICAgICAgICogYnkgdGhlIGxpYnJhcnkpLiBLZWVwIGluYWN0aXZlIG9uZXMgZm9yIG5leHQgdGltZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID09IFJTX0FDVElWRSkgeworICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIElURVJBVE9SX1JFTU9WRSh0YmxfaXRyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6ZnJlZSIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCAgX3Rsc3RtQWRkclRhYmxlX3NhdmVfcm93cyhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOworc3RhdGljIHZvaWQgX3Rsc3RtQWRkclRhYmxlX3Jvd19yZXN0b3JlX21pYihjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYpOworc3RhdGljIGNvbnN0IGNoYXIgbWliX3Rva2VuW10gPSAic25tcFRsc3RtQWRkckVudHJ5IjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKl9pbml0X3BlcnNpc3RlbmNlIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0YWJsZQorICogaW5pdCByb3V0aW5lLgorICoKKyAqIElmIHlvdXIgdGFibGUgZGVwZW5kcyBvbiByb3dzIGluIGFub3RoZXIgdGFibGUsCisgKiB5b3Ugc2hvdWxkIHJlZ2lzdGVyIHlvdXIgY2FsbGJhY2sgYWZ0ZXIgdGhlIG90aGVyIHRhYmxlLAorICogd2hpY2ggc2hvdWxkIGVuc3VyZSB0aGUgcm93cyBvbiB3aGljaCB5b3UgZGVwZW5kIGFyZSBzYXZlZAorICogKGFuZCByZS1jcmVhdGVkKSBiZWZvcmUgdGhlIGRlcGVuZGVudCByb3dzLgorICovCitzdGF0aWMgdm9pZAorX3Rsc3RtQWRkcl9pbml0X3BlcnNpc3RlbmNlKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgaWYgKE5VTEwgPT0gX3RhYmxlX2RhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIHRhYmxlIGRhdGEgZm9yIHRsc3RtQWRkciBwZXJzaXN0ZW5jZSFcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgbWliX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90bHN0bUFkZHJUYWJsZV9yb3dfcmVzdG9yZV9taWIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgcmMgPSBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGxzdG1BZGRyVGFibGVfc2F2ZV9yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsKKworICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgZm9yIFNUT1JFX0RBVEEgY2FsbGJhY2sgIgorICAgICAgICAgICAgICAgICAiaW4gX3Rsc3RtQWRkclRhYmxlX2luaXRfcGVyc2lzdGVuY2VcbiIpOworfQorCitzdGF0aWMgaW50Citfc2F2ZV9lbnRyeSh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnksIHZvaWQgKnR5cGUpCit7CisgICAgY2hhciAgIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZTsKKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBlbnRyeS0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogYnVpbGQgdGhlIGxpbmUKKyAgICAgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgwID09IGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWVbCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWVfbGVuXSk7CisgICAgbmV0c25tcF9hc3NlcnQoMCA9PSBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRbCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW5dKTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXMgLS0lcyAlcyAlcyAlZCIsIG1pYl90b2tlbiwKKyAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLCBoYXNoVHlwZSwKKyAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpOworICAgIGJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBidWYpOworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpyb3c6c2F2ZSIsICJzYXZpbmcgZW50cnkgJyVzJ1xuIiwgYnVmKSk7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX3NhdmVfYWRkcnMoc25tcFRsc3RtQWRkciAqYWRkcnMsIHZvaWQgKmFwcF90eXBlKQoreworICAgIGNoYXIgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlOworCisgICAgaWYgKE5VTEwgPT0gYWRkcnMpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBhZGRycy0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgYWRkcnMtPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzIC0tJXMgJXMgJXMgJWQiLCBtaWJfdG9rZW4sIGFkZHJzLT5uYW1lLAorICAgICAgICAgICAgIGhhc2hUeXBlLCBhZGRycy0+ZmluZ2VycHJpbnQsIGFkZHJzLT5pZGVudGl0eSwgUlNfQUNUSVZFKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTphZGRyczpzYXZlIiwgInNhdmluZyBhZGRycyAnJXMnXG4iLAorICAgICAgICAgICAgICAgIGJ1ZikpOworICAgIHJlYWRfY29uZmlnX3N0b3JlKGFwcF90eXBlLCBidWYpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK190bHN0bUFkZHJUYWJsZV9zYXZlX3Jvd3MoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQoreworICAgIGNoYXIgICAgICAgICAgICBzZXBbXSA9CisgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyI7CisgICAgY2hhciAgICAgICAgICAgIGJ1ZltdID0gIiNcbiIgIiMgdGxzdG1BZGRyIHBlcnNpc3RlbnQgZGF0YVxuIiAiIyI7CisgICAgY2hhciAgICAgICAgICAgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKm1pYl9hZGRycyA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjbGllbnRhcmc7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFjdGl2ZV9hZGRycyA9IG5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfaXRlcmF0b3IgICp0YmxfaXRyLCAqYWRkcnNfaXRyID0gTlVMTDsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIHNubXBUbHN0bUFkZHIgICAgICphZGRyOworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGlmICgoKE5VTEwgPT0gbWliX2FkZHJzKSB8fCAoQ09OVEFJTkVSX1NJWkUobWliX2FkZHJzKSA9PSAwKSkgJiYKKyAgICAgICAgKChOVUxMID09IGFjdGl2ZV9hZGRycykgfHwgKENPTlRBSU5FUl9TSVpFKGFjdGl2ZV9hZGRycykgPT0gMCkpKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGFjdGl2ZSByb3dzIGZyb20gYWRkciBjb250YWluZXIKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBhY3RpdmVfYWRkcnMpIHsKKyAgICAgICAgYWRkcnNfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGFjdGl2ZV9hZGRycyk7CisgICAgICAgIGlmIChOVUxMID09IGFkZHJzX2l0cikgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOnNhdmUiLCAiY2FudCBnZXQgYWRkcnMgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgICAgIGFkZHIgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZHIgPSBJVEVSQVRPUl9GSVJTVChhZGRyc19pdHIpOworCisgICAgICAgIGZvciggOyBhZGRyOyBhZGRyID0gSVRFUkFUT1JfTkVYVChhZGRyc19pdHIpKSB7CisgICAgICAgICAgICAvKiogZG9uJ3Qgc3RvcmUgY29uZmlnIHJvd3MgKi8KKyAgICAgICAgICAgIGlmICgoYWRkci0+ZmxhZ3MgJiBUTFNUTV9BRERSX0ZST01fQ09ORklHKSB8fAorICAgICAgICAgICAgICAgICEgKGFkZHItPmZsYWdzICYgVExTVE1fQUREUl9OT05WT0xBVElMRSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBfc2F2ZV9hZGRycyhhZGRyLCB0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGFkZHJzX2l0cik7CisKKyAgICAvKgorICAgICAqIHNhdmUgaW5hY3RpdmUgcm93cyBmcm9tIG1pYgorICAgICAqLworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IobWliX2FkZHJzKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKQorICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6c2F2ZSIsICJjYW50IGdldCB0YWJsZSBpdGVyYXRvclxuIikpOworICAgIGVsc2UgeworICAgICAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICAgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwIGFsbCBhY3RpdmUgcm93cyAoc2hvdWxkIGJlIGluIGFjdGl2ZV9hZGRycyBhbmQgdGh1cyBzYXZlZAorICAgICAgICAgICAgICogYWJvdmUpIGFuZCB2b2xhdGlsZSByb3dzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB8fAorICAgICAgICAgICAgICAgIChlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgIT0gU1RfTk9OVk9MQVRJTEUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBfc2F2ZV9lbnRyeShlbnRyeSwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKyAgICB9CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsICJcbiIpOworCisgICAgLyoKKyAgICAgKiBuZXZlciBmYWlscyAKKyAgICAgKi8KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZAorX3Rsc3RtQWRkclRhYmxlX3Jvd19yZXN0b3JlX21pYihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqYnVmKQoreworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgbmFtZVtTTk1QQURNSU5MRU5HVEggKyAxXSwgaWRbU05NUEFETUlOTEVOR1RIICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludFtTTk1QVExTRklOR0VSUFJJTlRfTUFYX0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgbmFtZV9sZW4gPSBzaXplb2YobmFtZSksIGlkX2xlbiA9IHNpemVvZihpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcF9sZW4gPSBzaXplb2YoZmluZ2VycHJpbnQpOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgaGFzaFR5cGUsIHJvd1N0YXR1czsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOworCisgICAgLyoqIG5lZWQgc29tZXdoZXJlIHRvIHNhdmUgcm93cyAqLworICAgIG5ldHNubXBfYXNzZXJ0KF90YWJsZV9kYXRhICYmIF90YWJsZV9kYXRhLT5jb250YWluZXIpOyAKKworICAgIHJjID0gbmV0c25tcF90bHN0bUFkZHJfcmVzdG9yZV9jb21tb24oJmJ1ZiwgbmFtZSwgJm5hbWVfbGVuLCBpZCwgJmlkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LCAmZnBfbGVuLCAmaGFzaFR5cGUpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOVUxMID09IGJ1ZikgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbmNvbXBsZXRlIGxpbmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByb3dTdGF0dXMgPSBhdG9pKGJ1Zik7CisKKyAgICAvKgorICAgICAqIGlmIHJvdyBpcyBhY3RpdmUsIGFkZCBpdCB0byB0aGUgYWRkcnMgY29udGFpbmVyIHNvIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIGZvciB1c2UuIERvIG5vdCBhZGQgaXQgdG8gdGhlIHRhYmxlLCBzaW5jZSBpdCB3aWxsIGJlIGFkZGVkCisgICAgICogZHVyaW5nIGNhY2hlX2xvYWQuCisgICAgICovCisgICAgaWYgKFJTX0FDVElWRSA9PSByb3dTdGF0dXMpIHsKKyAgICAgICAgc25tcFRsc3RtQWRkciAqYWRkcjsKKworICAgICAgICBhZGRyID0gbmV0c25tcF90bHN0bUFkZHJfY3JlYXRlKG5hbWUpOworICAgICAgICBpZiAoIWFkZHIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGZwX2xlbikKKyAgICAgICAgICAgIGFkZHItPmZpbmdlcnByaW50ID0gc3RyZHVwKGZpbmdlcnByaW50KTsKKyAgICAgICAgaWYgKGlkX2xlbikKKyAgICAgICAgICAgIGFkZHItPmlkZW50aXR5ID0gc3RyZHVwKGlkKTsKKyAgICAgICAgYWRkci0+aGFzaFR5cGUgPSBoYXNoVHlwZTsKKyAgICAgICAgYWRkci0+ZmxhZ3MgPSBUTFNUTV9BRERSX0ZST01fTUlCIHwgVExTVE1fQUREUl9OT05WT0xBVElMRTsKKworICAgICAgICBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQoYWRkcik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgKnJvdzsKKyAgICAgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgICplbnRyeTsKKworICAgICAgICByb3cgPSB0bHN0bUFkZHJUYWJsZV9jcmVhdGVFbnRyeShfdGFibGVfZGF0YSwgbmFtZSwgbmFtZV9sZW4pOworICAgICAgICBpZiAoIXJvdykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5oYXNoVHlwZSA9IGhhc2hUeXBlOworICAgICAgICBtZW1jcHkoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LGZpbmdlcnByaW50LCBmcF9sZW4pOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0gZnBfbGVuOworICAgICAgICBtZW1jcHkoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LCBpZCwgaWRfbGVuKTsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9IGlkX2xlbjsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSByb3dTdGF0dXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwYjgwYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy50YWJsZV9kYXRhLmNvbmYgMTU5OTkgMjAwNy0wMy0yNSAyMjozMjowMlogZHRzMTIgJAorICovCisjaWZuZGVmIFNOTVBUTFNUTUFERFJUQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTUFERFJUQUJMRV9ICisKKyNkZWZpbmUgU05NUF9UTFNfVE1fQUREUl9DT1VOVCAgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA3CisjZGVmaW5lIFNOTVBfVExTX1RNX0FERFJfQ0hBTkdFRCAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgOAorI2RlZmluZSBTTk1QX1RMU19UTV9BRERSX1RBQkxFICAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDkKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfc25tcFRsc3RtQWRkclRhYmxlKHZvaWQpOworCisvKgorICogaW5kZXggZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHRsc3RtQWRkclRhYmxlIAorICovCisjZGVmaW5lIFNOTVBUQVJHRVRBRERSTkFNRV9NQVhfU0laRSAgMjU1CisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSB0bHN0bUFkZHJUYWJsZSAKKyAqLworI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UICAgICAgIDEKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWSAgICAgICAgICAyCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEUgICAgICAgICAgICAgMworI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAgICAgICAgICAgICAgIDQKKworI2RlZmluZSBUTFNUTUFERFJUQUJMRV9NSU5fQ09MVU1OICAgICAgICAgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVAorI2RlZmluZSBUTFNUTUFERFJUQUJMRV9NQVhfQ09MVU1OICAgICAgICAgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMKKworI2RlZmluZSBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVF9NQVhfU0laRSAgICAgIDI1NQorI2RlZmluZSBUTFNUTUFERFJTRVJWRVJJREVOVElUWV9NQVhfU0laRSAgICAgICAgIDI1NQorCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRMU1RNQUREUlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYTBlYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBTTk1QVExTVE1DRVJUVE9UU05UQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTlRBQkxFX0gKKworY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlKQorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUTFNUTUNFUlRUT1RTTlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMWFmYgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jCkBAIC0wLDAgKzEsMTM3NyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSAidGxzdG0tbWliLmgiCisjaW5jbHVkZSAic25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X2ZpbmdlcnByaW50cykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2RlbGV0ZV90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9yZW1vdmVfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGxzX2ZpbmdlcnByaW50X2J1aWxkKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3N0b3JhZ2V0eXBlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKy8qKiBYWFggLSBtb3ZlIHRoZXNlIHRvIHRhYmxlX2RhdGEgaGVhZGVyPyAqLworI2RlZmluZSBGQVRFX05FV0xZX0NSRUFURUQgICAgMQorI2RlZmluZSBGQVRFX05PX0NIQU5HRSAgICAgICAgMAorI2RlZmluZSBGQVRFX0RFTEVURV9NRSAgICAgICAgLTEKKworI2RlZmluZSBNQVBfTUlCX0NPTkZJR19UT0tFTiAic25tcFRsc3RtQ2VydFRvVFNORW50cnkiCisKK2V4dGVybiBuZXRzbm1wX2NlcnRfbWFwICpuZXRzbm1wX2NlcnRUb1RTTl9wYXJzZV9jb21tb24oY2hhciAqKmxpbmUpOworCisKKyAgICAvKgorICAgICAqIHN0cnVjdHVyZSBmb3IgdW5kbyBzdG9yYWdlIGFuZCBvdGhlciB2YXJzIGZvciBzZXQgcHJvY2Vzc2luZyAKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IGNlcnRUb1RTTl91bmRvX3MgeworICAgIGNoYXIgICAgICAgICAgICBmYXRlOworICAgIGNoYXIgICAgICAgICAgICBjb3BpZWQ7CisgICAgY2hhciAgICAgICAgICAgIGlzX2NvbnNpc3RlbnQ7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcVtTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfTUFYX0NPTCsxXTsKKworICAgIC8qCisgICAgICogdW5kbyBDb2x1bW4gc3BhY2UgCisgICAgICovCisgICAgY2hhciAgICAgICAgICAgIGZpbmdlcnByaW50W1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIGZpbmdlcnByaW50X2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgbWFwVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgZGF0YVtTTk1QVExTVE1DRVJUVE9UU05fREFUQV9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIGRhdGFfbGVuOworICAgIHVfY2hhciAgICAgICAgICBoYXNoVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgc3RvcmFnZVR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHJvd1N0YXR1czsKK30gY2VydFRvVFNOX3VuZG87CisKKyAgICAvKgorICAgICAqIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5IAorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgY2VydFRvVFNOX2VudHJ5X3MgeworICAgIC8qCisgICAgICogSW5kZXggdmFsdWVzIAorICAgICAqLworICAgIHVfbG9uZyAgICAgICAgICB0bHN0bUNlcnRUb1RTTklEOworCisgICAgLyoKKyAgICAgKiBDb2x1bW4gdmFsdWVzIAorICAgICAqLworICAgIGNoYXIgICAgICAgICAgICBmaW5nZXJwcmludFtTTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICBmaW5nZXJwcmludF9sZW47CisgICAgaW50ICAgICAgICAgICAgIG1hcFR5cGU7CisgICAgY2hhciAgICAgICAgICAgIGRhdGFbU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEFfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICBkYXRhX2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgc3RvcmFnZVR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHJvd1N0YXR1czsKKyAgICB1X2NoYXIgICAgICAgICAgaGFzaFR5cGU7CisgICAgY2hhciAgICAgICAgICAgIG1hcF9mbGFnczsKKworICAgIC8qCisgICAgICogdXNlZCBkdXJpbmcgc2V0IHByb2Nlc3NpbmcgCisgICAgICovCisgICAgY2VydFRvVFNOX3VuZG8gKnVuZG87Cit9IGNlcnRUb1RTTl9lbnRyeTsKKworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIHRsc3RtQ2VydFRvVFNOVGFibGVfaGFuZGxlcjsKK3N0YXRpYyBvaWQgX29pZDJ0eXBlKG9pZCAqdmFsLCBpbnQgdmFsX2xlbik7CisvKiogc3RhdGljIGludCBfdHlwZTJvaWQoaW50IHR5cGUsIG9pZCAqdmFsLCBpbnQgKnZhbF9sZW4pOyAqLworc3RhdGljIGludCBfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpOworc3RhdGljIHZvaWQgX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKTsKK3N0YXRpYyB2b2lkIF9jZXJ0X21hcF9hZGQoY2VydFRvVFNOX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBfY2VydF9tYXBfcmVtb3ZlKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpOworc3RhdGljIGludCBfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKK3N0YXRpYyB2b2lkIF9wYXJzZV9taWJfbWFwcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CitzdGF0aWMgaW50IF9zYXZlX21hcHMoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXIsIHZvaWQgKmNsaWVudCk7CitzdGF0aWMgaW50IF9zYXZlX21hcChuZXRzbm1wX2NlcnRfbWFwICptYXAsIGludCByb3dfc3RhdHVzLCB2b2lkICp0eXBlKTsKK3N0YXRpYyB2b2lkIF9jZXJ0X21hcF90d2Vha19zdG9yYWdlKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpOworCitzdGF0aWMgbmV0c25tcF90ZGF0YSAqX3RhYmxlID0gTlVMTDsKK3N0YXRpYyB1aW50MzJfdCBfbGFzdF9jaGFuZ2VkID0gMDsKKworCisvKiogSW5pdGlhbGl6ZXMgdGhlIHRsc3RtQ2VydFRvVFNOVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlKHZvaWQpCit7CisgICAgaW5pdF9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZV9jb250ZXh0KE5VTEwpOworfQorCit2b2lkCitpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlX2NvbnRleHQoY29uc3QgY2hhciAqY29udGV4dE5hbWUpCit7CisgICAgb2lkICAgICAgICAgICAgIHJlZ19vaWRbXSAgID0gIHsgU05NUF9UTFNfVE1fQ0VSVF9UQUJMRSB9OworICAgIGNvbnN0IHNpemVfdCAgICByZWdfb2lkX2xlbiA9ICBPSURfTEVOR1RIKHJlZ19vaWQpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICppbmZvOworICAgIG5ldHNubXBfY2FjaGUgICAgICAgICAgICAgICAgICAgKmNhY2hlOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgICAgKndhdGNoZXI7CisgICAgY29uc3QgY2hhciAqbWliX21hcF9oZWxwID0gCisgICAgICAgIE1BUF9NSUJfQ09ORklHX1RPS0VOICIgdGFibGUgcGVyc2lzdGVuY2UgKGludGVybmFsIHVzZSkiOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvU046aW5pdCIsCisgICAgICAgICAgICAgICAgImluaXRpYWxpemluZyB0YWJsZSB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKSk7CisKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAoInRsc3RtQ2VydFRvVFNOVGFibGUiLCB0bHN0bUNlcnRUb1RTTlRhYmxlX2hhbmRsZXIsCisgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisgICAgaWYgKE5VTEwgPT0gcmVnKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgdGxzdG1DZXJ0VG9TTlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBjb250ZXh0TmFtZSkKKyAgICAgICAgcmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisKKyAgICBfdGFibGUgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgidGxzdG1DZXJ0VG9UU05UYWJsZSIsIDApOworICAgIGlmIChOVUxMID09IF90YWJsZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgdGRhdGEgdGFibGUgZm9yIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGluZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmIChOVUxMID09IGluZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIHRhYmxlIGluZm8gZm9yIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGUpOworICAgICAgICBfdGFibGUgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKGluZm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4OiB0bHN0bUNlcnRUb1RTTklEICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCAgMCk7CisKKyAgICBpbmZvLT5taW5fY29sdW1uID0gU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX01JTl9DT0w7CisgICAgaW5mby0+bWF4X2NvbHVtbiA9IFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBjYWNoZSBpbml0CisgICAgICovCisgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgKE5ldHNubXBDYWNoZUxvYWQqKV9jYWNoZV9sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5ldHNubXBDYWNoZUZyZWUqKV9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZSk7CisgICAgICAgIF90YWJsZSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FjaGUtPm1hZ2ljID0gKHZvaWQgKilfdGFibGU7CisgICAgY2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIF90YWJsZSwgaW5mbyk7CisKKyAgICBpZiAoY2FjaGUpIAorICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9jb250YWluZXIiKTsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgc2NhbGFycworICAgICAqLworICAgIHJlZ19vaWRbMTBdID0gMTsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFRsc3RtQ2VydFRvVFNOQ291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb3VudF9oYW5kbGVyLCByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZykKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtQ2VydFRvVFNOQ291bnRcbiIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSBjb250ZXh0TmFtZSkKKyAgICAgICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZyk7CisgICAgICAgIGlmIChjYWNoZSkgCisgICAgICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZShyZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2NvbnRhaW5lciIpOworICAgIH0KKyAgICAKKyAgICByZWdfb2lkWzEwXSA9IDI7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwgcmVnX29pZCwKKyAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIHdhdGNoZXIgPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQqKSZfbGFzdF9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9sYXN0X2NoYW5nZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1RJTUVUSUNLUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBVENIRVJfRklYRURfU0laRSk7CisgICAgaWYgKChOVUxMID09IHJlZykgfHwgKE5VTEwgPT0gd2F0Y2hlcikpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bUNlcnRUb1RTTkNvdW50XG4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gY29udGV4dE5hbWUpCisgICAgICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIocmVnLCB3YXRjaGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBlcnNpc3RlbmNlCisgICAgICovCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgTUFQX01JQl9DT05GSUdfVE9LRU4sIF9wYXJzZV9taWJfbWFwcywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfbWFwX2hlbHApOworICAgIGlmIChzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zYXZlX21hcHMsIE5VTEwpICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCisgICAgICAgICAgICAgICAgICJmb3IgY2VydFRvVFNOXG4iKTsKKworfQorCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK25ldHNubXBfdGRhdGFfcm93ICoKK3Rsc3RtQ2VydFRvVFNOVGFibGVfY3JlYXRlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlLCB1X2xvbmcgdGxzdG1DZXJ0VG9UU05JRCkKK3sKKyAgICBjZXJ0VG9UU05fZW50cnkgKmVudHJ5OworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2VydFRvVFNOX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdygpOworICAgIGlmICghcm93KSB7CisgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByb3ctPmRhdGEgPSBlbnRyeTsKKworICAgIERFQlVHTVNHVCgoInRsc3RtQ2VydFRvU046ZW50cnk6Y3JlYXRlIiwgImVudHJ5ICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgZW50cnksIHJvdykpOworICAgIC8qCisgICAgICogcG9wdWxhdGUgaW5kZXgKKyAgICAgKi8KKyAgICBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCA9IHRsc3RtQ2VydFRvVFNOSUQ7CisgICAgbmV0c25tcF90ZGF0YV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGVudHJ5LT50bHN0bUNlcnRUb1RTTklEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT50bHN0bUNlcnRUb1RTTklEKSk7CisgICAvKgorICAgICogYXNzaWduIGRlZmF1bHQgY29sdW1uIHZhbHVlcworICAgICovCisgICAgZW50cnktPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZDsKKyAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKyAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisKKyAgICBpZiAodGFibGUpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOOnJvdzppbnNlcnQiLCAicm93ICVwXG4iLCByb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCByb3cpOworICAgIH0KKyAgICByZXR1cm4gcm93OworfQorCisvKgorICogYWxsb2NhdGUgdW5kbyByZXNvdXJjZXMgCisgKi8KK3N0YXRpYyBjZXJ0VG9UU05fdW5kbyAqCitfYWxsb2NVbmRvKGNlcnRUb1RTTl9lbnRyeSAqIGVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbmV0c25tcF9hc3NlcnQoIWVudHJ5LT51bmRvKTsKKworICAgIGVudHJ5LT51bmRvID0gU05NUF9NQUxMT0NfVFlQRURFRihjZXJ0VG9UU05fdW5kbyk7CisgICAgaWYgKCFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IC0xOyAgIC8qIGRvbid0IGtub3cgKi8KKworICAgIHJldHVybiBlbnRyeS0+dW5kbzsKK30KKworLyoKKyAqIGZyZWUgdW5kbyByZXNvdXJjZXMgCisgKi8KK3N0YXRpYyB2b2lkCitfZnJlZVVuZG8oY2VydFRvVFNOX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSB8fCAhZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICogVE9ETzogcmVsZWFzZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyAKKyAgICAgKi8KKyAgICBTTk1QX0ZSRUUoZW50cnktPnVuZG8pOworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCit2b2lkCit0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKiByb3cpCit7CisgICAgY2VydFRvVFNOX2VudHJ5ICplbnRyeTsKKworICAgIGlmICghcm93KQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworCisgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIHJvdy0+ZGF0YTsKKworICAgIERFQlVHTVNHVCgoInRsc3RtQ2VydFRvU046ZW50cnk6ZGVsZXRlIiwgImVudHJ5ICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgZW50cnksIHJvdykpOworCisgICAgaWYgKGVudHJ5ICYmIGVudHJ5LT51bmRvKQorICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CisKKyAgICBpZiAodGFibGUpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvU046cm93OnJlbW92ZSIsICJyb3cgJXBcbiIsIHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZSwgcm93KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3cocm93KTsKK30KKworCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHRsc3RtQ2VydFRvVFNOVGFibGUgdGFibGUgKi8KK3N0YXRpYyBpbnQKK3Rsc3RtQ2VydFRvVFNOVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG9pZCB0c25tW10gPSB7IFNOTVBfVExTX1RNX0JBU0UsIDEsIDEsIDAgfTsKKyAgICBzdGF0aWMgY29uc3QgaW50IHRzbm1fcG9zID0gT0lEX0xFTkdUSCh0c25tKSAtIDE7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICppbmZvOworICAgIG5ldHNubXBfdGRhdGEgICp0YWJsZTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIGNlcnRUb1RTTl9lbnRyeSAqZW50cnk7CisgICAgaW50ICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9TTjpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAobW9kZSAlcyAoJWQpKVxuIiwKKyAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCisgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHRVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVudHJ5ICYmIGluZm8pOworCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogYnVpbGQgU25tcFRMU0ZpbmdlcnByaW50CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdV9jaGFyIGJpbls0Ml0sICpwdHIgPSBiaW47CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHNpemVvZihiaW4pOworICAgICAgICAgICAgICAgIGludCAgICByYzsKKyAgICAgICAgICAgICAgICByYyA9IG5ldHNubXBfdGxzX2ZpbmdlcnByaW50X2J1aWxkKGVudHJ5LT5oYXNoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdHIsICZsZW4sIDApOworICAgICAgICAgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRToKKyAgICAgICAgICAgICAgICB0c25tW3Rzbm1fcG9zXSA9IGVudHJ5LT5tYXBUeXBlOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzbm0sIHNpemVvZih0c25tKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+ZGF0YSwgZW50cnktPmRhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdG9yYWdlVHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfR0VUICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMSAjIyMjIworICAgICAqCisgICAgICogICBJbiBSRVNFUlZFMSB3ZSBhcmUganVzdCBjaGVja2luZyBiYXNpYyBBU04uMSBzaXplL3R5cGUgcmVzdHJpY3Rpb25zLgorICAgICAqIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnkgb2YgdGhpcyBjb2RlLiBEb24ndCBjaGFuZ2UgYW55CisgICAgICogb2YgdGhlIGNvbHVtbiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBSRVNFUlZFMiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocmVxdWVzdC0+cHJvY2Vzc2VkID09IDApOworCisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoKE5VTEwgIT0gZW50cnkpICYmIChTVF9SRUFET05MWSA9PSBlbnRyeS0+c3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIC8qKiBjaGVjayBsZW4vYWxnb3JpdGhtIE1JQiByZXF1aXJlbWVudHMgKi8KKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2VydF9jaGVja192Yl9maW5nZXJwcmludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgIFNOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFX01BWF9TSVpFKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9vaWQydHlwZShyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5vYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pID4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0X01BWCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLCBzaXplb2YoZW50cnktPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3N0b3JhZ2V0eXBlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsKGVudHJ5ID8gZW50cnktPnN0b3JhZ2VUeXBlIDogU1RfTk9ORSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgKGVudHJ5ID8gZW50cnktPnJvd1N0YXR1cyA6UlNfTk9ORVhJU1RFTlQpLAorICAgICAgICAgICAgICAgICAgICAgKGVudHJ5ID8gZW50cnktPnN0b3JhZ2VUeXBlIDpTVF9OT05FKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTIgIyMjIyMKKyAgICAgKgorICAgICAqICAgUkVTRVJWRTIgaXMgZm9yIGNoZWNraW5nIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGZyb20gdGhlIE1JQi4KKyAgICAgKiBTaW5jZSB0aGVzZSByZXN0cmljdGlvbnMgYXJlIG9mdGVuIGluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0LAorICAgICAqIG1pYjJjIGNhbid0IGdlbmVyYXRlIGNvZGUuIEl0J3MgcG9zc2libGUgdGhhdCB5b3UgbmVlZCB0byBhZGQKKyAgICAgKiBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLiBIb3dldmVyLCBkb24ndCBjaGFuZ2UgYW55IG9mIHRoZSBjb2x1bW4KKyAgICAgKiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBBQ1RJT04gb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJlcXVlc3QtPnByb2Nlc3NlZCA9PSAwKTsKKworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGlmIG5vIHJvdywgY3JlYXRlIG9uZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICAgICAgcm93ID0gdGxzdG1DZXJ0VG9UU05UYWJsZV9jcmVhdGVFbnRyeQorICAgICAgICAgICAgICAgICAgICAodGFibGUsKmluZm8tPmluZGV4ZXMtPnZhbC5pbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJvdykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyhlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlLCByb3cpOworICAgICAgICAgICAgICAgICAgICByb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmZhdGUgPSBGQVRFX05FV0xZX0NSRUFURUQ7CisgICAgICAgICAgICAgICAgLyoqIGFzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhyZXF1ZXN0LCByb3cpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiogYWxsb2NhdGUgdW5kbyBzdHJ1Y3R1cmUsIGlmIG5lZWRlZCAqLworICAgICAgICAgICAgaWYgKCFlbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8oZW50cnkpOworICAgICAgICAgICAgICAgIGlmICghZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2F2ZSByZXF1ZXN0IHB0ciBmb3IgY29sdW1uLiBpZiB3ZSBhbHJlYWR5CisgICAgICAgICAgICAgKiBoYXZlIGEgdmFsdWUsIGJhaWwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChlbnRyeS0+dW5kby0+cmVxW2luZm8tPmNvbG51bV0pIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJ0bHN0bUNlcnRUb1NOOnJlc2VydmUyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBzZXRzIHRvIGNvbCAlZCBpbiByZXF1ZXN0XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+Y29sbnVtKSk7CisgICAgICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSBlbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50cnktPnVuZG8tPnJlcVtpbmZvLT5jb2xudW1dID0gcmVxdWVzdDsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAvKiogbWFrZSBzdXJlIHJvd3N0YXR1cyBpcyB1c2VkIHRvIGNyZWF0ZSByb3dzICovCisgICAgICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgaWYgKChlbnRyeS0+dW5kby0+ZmF0ZSAhPSBGQVRFX05FV0xZX0NSRUFURUQpIHx8CisgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8qIGNyZWF0aW9uIGZvciByZXF1ZXN0cyAqLworICAgICAgICB9IC8qIG5vIGVycm9yICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTIgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGUkVFICMjIyMjCisgICAgICoKKyAgICAgKiAgIEZSRUUgaXMgZm9yIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIHJlcXVlc3QgKGR1cmluZyBlaXRoZXIKKyAgICAgKiBSRVNFUlZFMSBvciBSRVNFUlZFMikuIFNvIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG5lZWQgdG8gYmUKKyAgICAgKiByZWxlYXNlZC4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyByZXNvdXJjZXMKKyAgICAgICAgICogcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGUgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCAhZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCByb3cpOworCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IGVudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkodGFibGUsIHJvdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0ZSRUUgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQUNUSU9OICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIHRoZSBBQ1RJT04gcGhhc2UsIHdlIHBlcmZvcm0gYW55IHNldHMgdGhhdCBjYW4gYmUgdW5kb25lLgorICAgICAqIChTYXZlIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgdW5kb25lIGZvciB0aGUgQ09NTUlUIHBoYXNlLikKKyAgICAgKgorICAgICAqICAgQWZ0ZXIgaW5kaXZpZHVhbCBjb2x1bW5zIGhhdmUgYmVlbiBkb25lLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlCisgICAgICogcm93IGFzIGEgd2hvbGUgaXMgY29uc2lzdGVudC4KKyAgICAgKgorICAgICAqIFRoZSBuZXh0IHBoYXNlIGlzIFVORE8gb3IgQ09NTUlULgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIC8qKiByZXNlcnZlMiBzaG91bGQgZW5mb3JjZSB0aGlzICovCisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChyZXF1ZXN0ID09IGVudHJ5LT51bmRvLT5yZXFbaW5mby0+Y29sbnVtXSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBmb3IgZWFjaCBjb2wsIHNhdmUgb2xkIHZhbHVlIGFuZCB0aGUgc2V0IG5ldyB2YWx1ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVfY2hhciAqdG1wID0gKHVfY2hhciopZW50cnktPmZpbmdlcnByaW50OworICAgICAgICAgICAgICAgIHVfaW50IHNpemUgPSBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZiID0gcmVxdWVzdC0+cmVxdWVzdHZiOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT51bmRvLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmZpbmdlcnByaW50LCBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmZpbmdlcnByaW50X2xlbiA9IGVudHJ5LT5maW5nZXJwcmludF9sZW47CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmhhc2hUeXBlID0gZW50cnktPmhhc2hUeXBlOworICAgICAgICAgICAgICAgIG1lbXNldChlbnRyeS0+ZmluZ2VycHJpbnQsIDAsIHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKworICAgICAgICAgICAgICAgICh2b2lkKW5ldHNubXBfdGxzX2ZpbmdlcnByaW50X3BhcnNlKHZiLT52YWwuc3RyaW5nLCB2Yi0+dmFsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZ0bXAsICZzaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+aGFzaFR5cGUpOworICAgICAgICAgICAgICAgIGVudHJ5LT5maW5nZXJwcmludF9sZW4gPSBzaXplOworICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LT5maW5nZXJwcmludF9sZW4pCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRToKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+bWFwVHlwZSA9IGVudHJ5LT5tYXBUeXBlOworICAgICAgICAgICAgICAgIGVudHJ5LT5tYXBUeXBlID0gX29pZDJ0eXBlKHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQToKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnVuZG8tPmRhdGEsIGVudHJ5LT5kYXRhLCBzaXplb2YoZW50cnktPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+ZGF0YV9sZW4gPSBlbnRyeS0+ZGF0YV9sZW47CisgICAgICAgICAgICAgICAgbWVtc2V0KGVudHJ5LT5kYXRhLCAwLCBzaXplb2YoZW50cnktPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPmRhdGEsIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZGF0YV9sZW4gPSByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPnN0b3JhZ2VUeXBlID0gZW50cnktPnN0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9ICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPnJvd1N0YXR1cyA9IGVudHJ5LT5yb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9ICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICovCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHZhbHVlcyBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIAorICAgICAgICAgICAgYnJlYWs7IC8qIHNraXAgY29uc2lzdGVuY3kgaWYgd2UndmUgYWxyZWFkeSBnb3QgZXJyb3IgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBBbGwgY29sdW1ucyBub3cgaGF2ZSB0aGVpciBmaW5hbCB2YWx1ZXMgc2V0LiBjaGVjayB0aGUKKyAgICAgICAgICogaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgZWFjaCByb3cuCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmIChlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCAhPSAtMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogYWxyZWFkeSBjaGVja2VkICovCisKKyAgICAgICAgICAgIC8qKiBhc3N1bWUgY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHBlciBtaWIsIGNhbid0IGhhdmUgZW1wdHkgZmluZ2VycHJpbnQgYW5kIG11c3QKKyAgICAgICAgICAgICAqIGhhdmUgZGF0YSBpZiBpbmRpY2F0ZWQgYnkgbWFwIHR5cGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgwID09IGVudHJ5LT5maW5nZXJwcmludF9sZW4pIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTppbmNvbnNpc3RlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5nZXJwcmludCBtdXN0IG5vdCBiZSBlbXB0eVxuIikpOworICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCA9PSBlbnRyeS0+bWFwVHlwZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICgwID09IGVudHJ5LT5kYXRhX2xlbikpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTppbmNvbnNpc3RlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHNwZWNpZnkgRGF0YSBmb3IgQ2VydFNwZWNpZmllZCBpZGVudGl0eVxuIikpOworICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChSU19JU19BQ1RJVkUoZW50cnktPnJvd1N0YXR1cykpICYmCisgICAgICAgICAgICAgICAgKCghZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU10pIHx8CisgICAgICAgICAgICAgICAgIChSU19JU19BQ1RJVkUoZW50cnktPnVuZG8tPnJvd1N0YXR1cykpKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcGVyIG1pYiwgY2FuJ3QgbW9kaWZ5IHRoZXNlIHdoaWxlIHJvdyBhY3RpdmUKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjaGFyIF9jb2xzWzNdID0geyBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSwgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBIH07CisgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCAzOyArK2kgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW50cnktPnVuZG8tPnJlcVtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTppbmNvbnNpc3RlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbW9kaWZ5IHJvdyAlZCB3aGlsZSBhY3RpdmVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xzW2ldKSk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q9IGVudHJ5LT51bmRvLT5yZXFbaV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUlNfSVNfR09JTkdfQUNUSVZFKGVudHJ5LT5yb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBpZiBnb2luZyBhY3RpdmUsIGluY29uc2lzdGVuY3kgaXMgZmF0YWwKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSBlbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChSU19ERVNUUk9ZID09IGVudHJ5LT5yb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGNhbid0IGRlc3Ryb3kgYWN0aXZlIHJvdworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChSU19JU19BQ1RJVkUoZW50cnktPnVuZG8tPnJvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6aW5jb25zaXN0ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGRlc3Ryb3kgYWN0aXZlIHJvd1xuIikpOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXSk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zaXN0ZW5jeSBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9BQ1RJT04gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBVTkRPICMjIyMjCisgICAgICoKKyAgICAgKiAgIFVORE8gaXMgZm9yIGNsZWFuaW5nIHVwIGFueSBmYWlsZWQgcmVxdWVzdHMgdGhhdCB3ZW50IHRocm91Z2ggdGhlCisgICAgICogQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNraXAgbmV3bHkgY3JlYXRlZCByb3dzLCBhcyB3ZSdyZSBnb2luZyB0byBkZWxldGUKKyAgICAgICAgICAgICAqIHRoZW0gYmVsb3cgYW55d2F5cworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IGVudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcmVzdG9yZSB2YWx1ZXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPmZpbmdlcnByaW50LCBlbnRyeS0+dW5kby0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuID0gZW50cnktPnVuZG8tPmZpbmdlcnByaW50X2xlbjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aGFzaFR5cGUgPSBlbnRyeS0+dW5kby0+aGFzaFR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU6CisgICAgICAgICAgICAgICAgZW50cnktPm1hcFR5cGUgPSBlbnRyeS0+dW5kby0+bWFwVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOgorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+ZGF0YSwgZW50cnktPnVuZG8tPmRhdGEsIHNpemVvZihlbnRyeS0+ZGF0YSkpOworICAgICAgICAgICAgICAgIGVudHJ5LT5kYXRhX2xlbiA9IGVudHJ5LT51bmRvLT5kYXRhX2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSBlbnRyeS0+dW5kby0+c3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gZW50cnktPnVuZG8tPnJvd1N0YXR1czsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyBkYXRhCisgICAgICAgICAqIG9yIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICghZW50cnkgfHwgIWVudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgcm93KTsKKworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSBlbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlLCByb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1VORE8gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09NTUlUICMjIyMjCisgICAgICoKKyAgICAgKiAgIENPTU1JVCBpcyB0aGUgZmluYWwgc3VjY2VzcyBzdGF0ZSwgd2hlbiBhbGwgY2hhbmdlcyBhcmUgZmluYWxpemVkLgorICAgICAqIFRoZXJlIGlzIG5vdCByZWNvdmVyeSBzdGF0ZSBzaG91bGQgc29tZXRoaW5nIGZhaWxlIGhlcmUuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKChSU19OT1RSRUFEWSA9PSBlbnRyeS0+cm93U3RhdHVzKSAmJiBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgZWxzZSBpZiAoKFJTX05PVElOU0VSVklDRSA9PSBlbnRyeS0+cm93U3RhdHVzKSAmJgorICAgICAgICAgICAgICAgICAgICAgKDAgPT0gZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKworICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhIGZvciByZXF1ZXN0cyB3aXRoIG5vIHJvd3N0YXR1cyAqLworICAgICAgICAgICAgaWYgKGVudHJ5LT51bmRvICYmICFlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXSkgeworICAgICAgICAgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKCgwID09IGVudHJ5LT5tYXBfZmxhZ3MpICYmIChlbnRyeS0+cm93U3RhdHVzID09IFJTX0FDVElWRSkpCisgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF9hZGQoZW50cnkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgwICE9IGVudHJ5LT5tYXBfZmxhZ3MpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5yb3dTdGF0dXMgPT0gUlNfREVTVFJPWSkpCisgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF9yZW1vdmUoZW50cnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LT5yb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gZW50cnktPm1hcF9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF9hZGQoZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgorICAgICAgICAgICAgICAgICAgICAvKiogc2ltcGx5IHNldCBzdGF0dXMgYmFzZWQgb24gY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSBlbnRyeS0+bWFwX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX3JlbW92ZShlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19ERVNUUk9ZOgorICAgICAgICAgICAgICAgICAgICAvKiogcmVtb3ZlIGZyb20gY2VydCBtYXAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gZW50cnktPm1hcF9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF9yZW1vdmUoZW50cnkpOworICAgICAgICAgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCByb3cpOworICAgICAgICAgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlLCByb3cpOworICAgICAgICAgICAgICAgICAgICByb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSAqLworICAgICAgICAgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIGlmIChSU19BQ1RJVkUgPT0gZW50cnktPnJvd1N0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX3R3ZWFrX3N0b3JhZ2UoZW50cnkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOgorICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU6CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qKiB1cGRhdGUgbGFzdCBjaGFuZ2VkICovCisgICAgICAgIF9sYXN0X2NoYW5nZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKworICAgICAgICAvKiogc2V0IHVwIHRvIHNhdmUgcGVyc2lzdGVudCBzdG9yZSAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0NPTU1JVCAqLworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpICovCisKKyAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50CitfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICAgICB2YWw7CisKKyAgICBpZiAoTU9ERV9HRVQgIT0gcmVxaW5mby0+bW9kZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIG1vZGUgaW4gUk8gaGFuZGxlciIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIGlmIChOVUxMID09IF90YWJsZS0+Y29udGFpbmVyKQorICAgICAgICB2YWwgPSAwOworICAgIGVsc2UKKyAgICAgICAgdmFsID0gQ09OVEFJTkVSX1NJWkUoX3RhYmxlLT5jb250YWluZXIpOworCisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9HQVVHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmdmFsLCBzaXplb2YodmFsKSk7CisgICAKKyAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQorICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CisgICAgCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9tYXBfYWRkKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbWFwOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOm1hcDphZGQiLCAicHJpICVsZCwgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQ2VydFRvVFNOSUQsIGVudHJ5LT5maW5nZXJwcmludCkpOworCisgICAgbWFwID0gbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhlbnRyeS0+ZmluZ2VycHJpbnQsIE5VTEwpOworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFwLT5wcmlvcml0eSA9IGVudHJ5LT50bHN0bUNlcnRUb1RTTklEOworICAgIG1hcC0+bWFwVHlwZSA9IGVudHJ5LT5tYXBUeXBlOworICAgIGlmIChlbnRyeS0+ZGF0YSkKKyAgICAgICAgbWFwLT5kYXRhID0gc3RyZHVwKGVudHJ5LT5kYXRhKTsKKyAgICBtYXAtPmhhc2hUeXBlID0gZW50cnktPmhhc2hUeXBlOworCisgICAgbWFwLT5mbGFncyA9IE5TQ01fRlJPTV9NSUI7CisgICAgaWYgKGVudHJ5LT5zdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgbWFwLT5mbGFncyB8PSBOU0NNX05PTlZPTEFUSUxFOworCisgICAgaWYgKG5ldHNubXBfY2VydF9tYXBfYWRkKG1hcCkgIT0gMCkKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9tYXBfdHdlYWtfc3RvcmFnZShjZXJ0VG9UU05fZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICptYXBzOworICAgIG5ldHNubXBfY2VydF9tYXAgKm1hcCwgaW5kZXg7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6bWFwOnR3ZWFrIiwgInByaSAlbGQsIHN0ICVkXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUNlcnRUb1RTTklELCBlbnRyeS0+c3RvcmFnZVR5cGUpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgbWFwcyAqLworICAgIG1hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IG1hcHMpCisgICAgICAgIHJldHVybjsKKworICAgIGluZGV4LnByaW9yaXR5ID0gZW50cnktPnRsc3RtQ2VydFRvVFNOSUQ7CisgICAgbWFwID0gQ09OVEFJTkVSX0ZJTkQobWFwcywgJmluZGV4KTsKKyAgICBpZiAoTlVMTCA9PSBtYXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6bWFwOnR3ZWFrIiwgImNvdWxkbid0IGZpbmQgbWFwIVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5zdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgbWFwLT5mbGFncyB8PSBOU0NNX05PTlZPTEFUSUxFOworICAgIGVsc2UKKyAgICAgICAgbWFwLT5mbGFncyAmPSB+TlNDTV9OT05WT0xBVElMRTsKK30KKworc3RhdGljIHZvaWQKK19jZXJ0X21hcF9yZW1vdmUoY2VydFRvVFNOX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbWFwczsKKyAgICBuZXRzbm1wX2NlcnRfbWFwIG1hcDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTptYXA6cmVtb3ZlIiwgInByaSAlbGQsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUNlcnRUb1RTTklELCBlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgbWFwcyAqLworICAgIG1hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IG1hcHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcC5wcmlvcml0eSA9IGVudHJ5LT50bHN0bUNlcnRUb1RTTklEOworICAgIG1hcC5maW5nZXJwcmludCA9IGVudHJ5LT5maW5nZXJwcmludDsKKworICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKG1hcHMsICZtYXApICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCByZW1vdmUgY2VydGlmaWNhdGUgbWFwIik7CisgICAgfQorICAgIGVudHJ5LT5tYXBfZmxhZ3MgPSAwOworfQorCitzdGF0aWMgbmV0c25tcF90ZGF0YV9yb3cgKgorX2VudHJ5X2Zyb21fbWFwKG5ldHNubXBfY2VydF9tYXAgICptYXApCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBjZXJ0VG9UU05fZW50cnkgICAqZW50cnk7CisKKyAgICByb3cgPSB0bHN0bUNlcnRUb1RTTlRhYmxlX2NyZWF0ZUVudHJ5KE5VTEwsIG1hcC0+cHJpb3JpdHkpOworICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2FuIGNyZWF0ZSB0bHN0bUNlcnRUb1RTTiByb3cgZW50cnlcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICBpZiAobWFwLT5mbGFncyAmIE5TQ01fRlJPTV9DT05GSUcpCisgICAgICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9IFNUX1BFUk1BTkVOVDsKKyAgICBlbHNlIGlmICghIChtYXAtPmZsYWdzICYgTlNDTV9OT05WT0xBVElMRSkpCisgICAgICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9IFNUX1ZPTEFUSUxFOworICAgIGVudHJ5LT5tYXBfZmxhZ3MgPSBtYXAtPmZsYWdzOworCisgICAgZW50cnktPmZpbmdlcnByaW50X2xlbiA9IHN0cmxlbihtYXAtPmZpbmdlcnByaW50KTsKKyAgICBpZiAoZW50cnktPmZpbmdlcnByaW50X2xlbiA+IHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpKQorICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuID0gc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkgLSAxOworICAgIG1lbWNweShlbnRyeS0+ZmluZ2VycHJpbnQsIG1hcC0+ZmluZ2VycHJpbnQsIGVudHJ5LT5maW5nZXJwcmludF9sZW4pOworICAgIGVudHJ5LT5maW5nZXJwcmludFtzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSAtIDFdID0gMDsKKyAgICBlbnRyeS0+aGFzaFR5cGUgPSBtYXAtPmhhc2hUeXBlOworICAgIAorICAgIGlmIChtYXAtPmRhdGEpIHsKKyAgICAgICAgZW50cnktPmRhdGFfbGVuID0gc3RybGVuKG1hcC0+ZGF0YSk7CisgICAgICAgIGlmIChlbnRyeS0+ZGF0YV9sZW4pIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+ZGF0YV9sZW4gPiBzaXplb2YoZW50cnktPmRhdGEpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5kYXRhX2xlbiA9IHNpemVvZihlbnRyeS0+ZGF0YSkgLSAxOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5kYXRhLCBtYXAtPmRhdGEsIGVudHJ5LT5kYXRhX2xlbik7CisgICAgICAgICAgICBlbnRyeS0+ZGF0YVtzaXplb2YoZW50cnktPmRhdGEpIC0gMV0gPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVudHJ5LT5tYXBUeXBlID0gbWFwLT5tYXBUeXBlOworCisgICAgcmV0dXJuIHJvdzsKK30KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICptYXBzOworICAgIG5ldHNubXBfaXRlcmF0b3IgICptYXBfaXRyOworICAgIG5ldHNubXBfY2VydF9tYXAgICptYXA7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBjZXJ0VG9UU05fZW50cnkgICAqZW50cnk7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmxvYWQiLCAiY2FsbGVkLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBtYXBzICovCisgICAgbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gbWFwcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6bG9hZCIsICJtYXBzICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKG1hcHMpKSk7CisKKyAgICBtYXBfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKG1hcHMpOworICAgIGlmIChOVUxMID09IG1hcF9pdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBtYXAgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogaW5zZXJ0IHJvd3MgZm9yIGFjdGl2ZSBtYXBzIGludG8gdGJsIGNvbnRhaW5lcgorICAgICAqLworICAgIG1hcCA9IElURVJBVE9SX0ZJUlNUKG1hcF9pdHIpOworICAgIGZvciggOyBtYXA7IG1hcCA9IElURVJBVE9SX05FWFQobWFwX2l0cikpIHsKKworICAgICAgICByb3cgPSBfZW50cnlfZnJvbV9tYXAobWFwKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgICAgICByYyA9LTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkqKXJvdy0+ZGF0YTsKKyAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX0FDVElWRTsKKworICAgICAgICBpZiAobmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCByb3cpICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UobWFwX2l0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpsb2FkIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKnRibF9pdHI7CisgICAgY2VydFRvVFNOX2VudHJ5ICAgKmVudHJ5OworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6ZnJlZSIsICJjYWxsZWQsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICAvKiogaW5zZXJ0IHJvd3MgZm9yIGFjdGl2ZSBtYXBzIGludG8gdGJsIGNvbnRhaW5lciAqLworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IodGFibGUtPmNvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpmcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IG1hcCBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiByZW1vdmUgYWxsIGFjdGl2ZSByb3dzICh0aGV5IGFyZSBpbiB0aGUgbWFwcyBjb250YWluZXIga2VwdAorICAgICAgICAgKiBieSB0aGUgbGlicmFyeSkuIEtlZXAgaW5hY3RpdmUgb25lcyBmb3IgbmV4dCB0aW1lLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5yb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB7CisgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICBJVEVSQVRPUl9SRU1PVkUodGJsX2l0cik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6ZnJlZSIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworfQorCitzdGF0aWMgdm9pZAorX3BhcnNlX21pYl9tYXBzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgY2VydFRvVFNOX2VudHJ5ICAgKmVudHJ5OworICAgIG5ldHNubXBfY2VydF9tYXAgKm1hcCA9IG5ldHNubXBfY2VydFRvVFNOX3BhcnNlX2NvbW1vbigmbGluZSk7CisKKyAgICBpZiAoTlVMTCA9PSBsaW5lKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJpbmNvbXBsZXRlIGxpbmUiKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtYXAtPmZsYWdzID0gTlNDTV9GUk9NX01JQiB8IE5TQ01fTk9OVk9MQVRJTEU7CisgICAgcm93ID0gX2VudHJ5X2Zyb21fbWFwKG1hcCk7CisgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSopcm93LT5kYXRhOworICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBhdG9pKGxpbmUpOworICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworCisgICAgLyoKKyAgICAgKiBpZiByb3cgaXMgYWN0aXZlLCBhZGQgaXQgdG8gdGhlIG1hcHMgY29udGFpbmVyIHNvIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIGZvciB1c2UuIERvIG5vdCBhZGQgaXQgdG8gdGhlIHRhYmxlLCBzaW5jZSBpdCB3aWxsIGJlIGFkZGVkCisgICAgICogZHVyaW5nIGNhY2hlX2xvYWQuCisgICAgICovCisgICAgaWYgKFJTX0FDVElWRSA9PSBlbnRyeS0+cm93U3RhdHVzKSB7CisgICAgICAgIGlmIChuZXRzbm1wX2NlcnRfbWFwX2FkZChtYXApICE9IDApCisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgICAgICBpZiAobmV0c25tcF90ZGF0YV9hZGRfcm93KF90YWJsZSwgcm93KSAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgfQorfQorCitzdGF0aWMgaW50Citfc2F2ZV9lbnRyeShjZXJ0VG9UU05fZW50cnkgKmVudHJ5LCB2b2lkICphcHBfdHlwZSkKK3sKKyAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZSwgKm1hcFR5cGUsICpkYXRhID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgZW50cnktPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIG1hcFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgZW50cnktPm1hcFR5cGUpOworICAgIGlmIChUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCA9PSBlbnRyeS0+bWFwVHlwZSkKKyAgICAgICAgZGF0YSA9IGVudHJ5LT5kYXRhOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlbGQgLS0lcyAlcyAtLSVzICVzICVkIiwKKyAgICAgICAgICAgICBNQVBfTUlCX0NPTkZJR19UT0tFTiwgZW50cnktPnRsc3RtQ2VydFRvVFNOSUQsIGhhc2hUeXBlLAorICAgICAgICAgICAgIGVudHJ5LT5maW5nZXJwcmludCwgbWFwVHlwZSwgZGF0YSA/IGRhdGEgOiAiIiwgZW50cnktPnJvd1N0YXR1cyk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpzYXZlIiwgInNhdmluZyAnJXMnXG4iLCBidWYpKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZShhcHBfdHlwZSwgYnVmKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50Citfc2F2ZV9tYXAobmV0c25tcF9jZXJ0X21hcCAqbWFwLCBpbnQgcm93X3N0YXR1cywgdm9pZCAqYXBwX3R5cGUpCit7CisgICAgY2hhciBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGUsICptYXBUeXBlLCAqZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICAvKiogZG9uJ3Qgc3RvcmUgdmFsdWVzIGZyb20gY29uZiBmaWxlcyAqLworICAgIGlmICghIChtYXAtPmZsYWdzICYgTlNDTV9OT05WT0xBVElMRSkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpzYXZlIiwgCisgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIFJPL3Blcm1hbmVudC92b2xhdGlsZSByb3dcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgbWFwLT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBtYXAtPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgbWFwVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBtYXAtPm1hcFR5cGUpOworICAgIGlmIChUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCA9PSBtYXAtPm1hcFR5cGUpCisgICAgICAgIGRhdGEgPSAoY2hhciopbWFwLT5kYXRhOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlZCAtLSVzICVzIC0tJXMgJXMgJWQiLAorICAgICAgICAgICAgIE1BUF9NSUJfQ09ORklHX1RPS0VOLCBtYXAtPnByaW9yaXR5LCBoYXNoVHlwZSwgbWFwLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICBtYXBUeXBlLCBkYXRhID8gZGF0YSA6ICIiLCByb3dfc3RhdHVzKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOnNhdmUiLCAic2F2aW5nICclcydcbiIsIGJ1ZikpOworICAgIHJlYWRfY29uZmlnX3N0b3JlKGFwcF90eXBlLCBidWYpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX21hcHMoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBjaGFyICAgICAgICAgICAgc2VwW10gPQorICAgICAgICAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyI7CisgICAgY2hhciAgICAgICAgICAgIGJ1ZltdID0KKyAgICAgICAgIiNcbiIgIiMgY2VydGlmaWNhdGUgc2VjTmFtZSBtYXBwaW5nIHBlcnNpc3RlbnQgZGF0YVxuIiAiIyI7CisgICAgY2hhciAgICAgICAgICAgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworICAgIG5ldHNubXBfY29udGFpbmVyICptYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIG5ldHNubXBfaXRlcmF0b3IgICp0YmxfaXRyLCAqbWFwX2l0cjsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAqbWFwOworICAgIGNlcnRUb1RTTl9lbnRyeSAgICplbnRyeTsKKworICAgIGlmICgoTlVMTCA9PSBtYXBzKSB8fCAoKENPTlRBSU5FUl9TSVpFKG1hcHMpID09IDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ09OVEFJTkVSX1NJWkUoX3RhYmxlLT5jb250YWluZXIpID09IDApKSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKKworICAgIC8qCisgICAgICogc2F2ZSBhY3RpdmUgcm93cyBmcm9tIG1hcHMKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBtYXBzKSB7CisgICAgICAgIG1hcF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IobWFwcyk7CisgICAgICAgIGlmIChOVUxMID09IG1hcF9pdHIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOnNhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IG1hcCBpdGVyYXRvclxuIikpOworICAgICAgICAgICAgbWFwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXAgPSBJVEVSQVRPUl9GSVJTVChtYXBfaXRyKTsKKworICAgICAgICBmb3IoIDsgbWFwOyBtYXAgPSBJVEVSQVRPUl9ORVhUKG1hcF9pdHIpKSB7CisgICAgICAgICAgICAvKiogZG9uJ3Qgc3RvcmUgY29uZmlnIHJvd3MgKi8KKyAgICAgICAgICAgIGlmIChtYXAtPmZsYWdzICYgTlNDTV9GUk9NX0NPTkZJRykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIF9zYXZlX21hcChtYXAsIFJTX0FDVElWRSwgdHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShtYXBfaXRyKTsKKworICAgIC8qCisgICAgICogc2F2ZSBpbmFjdGl2ZSByb3dzIGZyb20gbWliCisgICAgICovCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihfdGFibGUtPmNvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6c2F2ZSIsICJjYW50IGdldCB0YWJsZSBpdGVyYXRvclxuIikpOworICAgIGVsc2UgeworICAgICAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICAgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwIGFsbCBhY3RpdmUgcm93cyAoc2hvdWxkIGJlIGluIG1hcHMgYW5kIHRodXMgc2F2ZWQKKyAgICAgICAgICAgICAqIGFib3ZlKSBhbmQgdm9sYXRpbGUgcm93cy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChlbnRyeS0+cm93U3RhdHVzID09IFJTX0FDVElWRSkgfHwKKyAgICAgICAgICAgICAgICAoZW50cnktPnN0b3JhZ2VUeXBlICE9IFNUX05PTlZPTEFUSUxFKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgX3NhdmVfZW50cnkoZW50cnksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisgICAgfQorCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCAiXG4iKTsKKworICAgIC8qCisgICAgICogbmV2ZXIgZmFpbHMgCisgICAgICovCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworCitzdGF0aWMgY29uc3Qgb2lkIF90c25tX2Jhc2VbXSA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSB9Oworc3RhdGljIGNvbnN0IGludCBfdHNubV9iYXNlX2xlbiA9IHNpemVvZihfdHNubV9iYXNlKTsKKworc3RhdGljIG9pZAorX29pZDJ0eXBlKG9pZCAqdmFsLCBpbnQgdmFsX2xlbikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCh2YWwpOworCisgICAgaWYgKHZhbF9sZW4gIT0gKF90c25tX2Jhc2VfbGVuICsgc2l6ZW9mKG9pZCkpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobWVtY21wKF90c25tX2Jhc2UsdmFsLF90c25tX2Jhc2VfbGVuKSAhPSAwKQorICAgICAgICByZXR1cm4gLTI7CisKKyAgICBpZiAoKHZhbFtPSURfTEVOR1RIKF90c25tX2Jhc2UpXSA+IFRTTk1fdGxzdG1DZXJ0X01BWCkgfHwKKyAgICAgICAgKDAgPT0gdmFsW09JRF9MRU5HVEgoX3Rzbm1fYmFzZSldKSkKKyAgICAgICAgcmV0dXJuIC0zOworCisgICAgcmV0dXJuIHZhbFtPSURfTEVOR1RIKF90c25tX2Jhc2UpXTsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQKK190eXBlMm9pZChpbnQgdHlwZSwgb2lkICp2YWwsIGludCAqdmFsX2xlbikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCggdmFsICYmIHZhbF9sZW4gKTsKKworICAgIGlmICgqdmFsX2xlbiA8IF90c25tX2Jhc2VfbGVuICsgc2l6ZW9mKG9pZCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1lbWNweSh2YWwsIF90c25tX2Jhc2UsIF90c25tX2Jhc2VfbGVuICsgc2l6ZW9mKG9pZCkpOworICAgIHZhbFtfdHNubV9iYXNlX2xlbiArIHNpemVvZihvaWQpXSA9IHR5cGU7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmI4MDk3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisjaWZuZGVmIFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9ICisKKyNkZWZpbmUgU05NUF9UTFNfVE1fQ0VSVF9DT1VOVCAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDEKKyNkZWZpbmUgU05NUF9UTFNfVE1fQ0VSVF9DSEFOR0VEIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDIKKyNkZWZpbmUgU05NUF9UTFNfVE1fQ0VSVF9UQUJMRSAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDMKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZV9jb250ZXh0KGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiBpbmRleCBkZWZpbml0aW9ucyBmb3IgdGFibGUgdGxzdG1DZXJ0VG9UU05UYWJsZSAKKyAqLworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgdGxzdG1DZXJ0VG9UU05UYWJsZSAKKyAqLworI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0lEICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgICAgICAgICAgICAgICAgNgorCisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9NSU5fQ09MIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX01BWF9DT0wgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMKKworI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlRfTUFYX1NJWkUgICAgICAgICAgMjU1CisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFX01BWF9TSVpFICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEFfTUFYX1NJWkUgICAgICAgICAgICAgICAgIDEwMjQKKworI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWUgICAgICAgICAgICAgMgorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTkROU05hbWUgICAgICAgICAgICAgICAgMworI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzcyAgICAgICAgICAgICAgNAorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTkFueSAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWUgICAgICAgICAgICAgICAgNgorI2RlZmluZSBUU05NX3Rsc3RtQ2VydF9NQVggICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNGJlMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBTTk1QVExTVE1QQVJBTVNUQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0gKKworY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlKQorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1NDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jCkBAIC0wLDAgKzEsMTI4NiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlICJ0bHN0bS1taWIuaCIKKworI2luY2x1ZGUgInNubXBUbHN0bVBhcmFtc1RhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGxzdG1wYXJhbXNfZmluZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRsc3RtcGFyYW1zX2V4dGVybmFsKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2VydF9maW5nZXJwcmludHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfcmVtb3ZlX3JvdykKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9zdG9yYWdldHlwZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogWFhYIC0gbW92ZSB0aGVzZSB0byB0YWJsZV9kYXRhIGhlYWRlcj8gKi8KKyNkZWZpbmUgRkFURV9ORVdMWV9DUkVBVEVEICAgIDEKKyNkZWZpbmUgRkFURV9OT19DSEFOR0UgICAgICAgIDAKKyNkZWZpbmUgRkFURV9ERUxFVEVfTUUgICAgICAgIC0xCisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRhYmxlIHN0cnVjdHVyZXMKKyAqCisgKi8KKyAgICAvKgorICAgICAqIHN0cnVjdHVyZSBmb3IgdW5kbyBzdG9yYWdlIGFuZCBvdGhlciB2YXJzIGZvciBzZXQgcHJvY2Vzc2luZworICAgICAqLworIHR5cGVkZWYgc3RydWN0IHNubXBUbHN0bVBhcmFtc1RhYmxlX3VuZG9fcyB7CisgICAgY2hhciAgZmF0ZTsKKyAgICBjaGFyICBjb3BpZWQ7CisgICAgY2hhciAgaXNfY29uc2lzdGVudDsKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxW1NOTVBUTFNUTVBBUkFNU1RBQkxFX01BWF9DT0xVTU4gKyAxXTsKKyAgICAvKiB1bmRvIENvbHVtbiBzcGFjZSAqLworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRbU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW47CisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZTsKKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1czsKKyB9IHNubXBUbHN0bVBhcmFtc1RhYmxlX3VuZG87CisKKyAgICAvKgorICAgICAqIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5CisgICAgICovCit0eXBlZGVmIHN0cnVjdCBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeV9zIHsKKyAgICAvKiBJbmRleCB2YWx1ZXMgKi8KKyAgICBjaGFyIHNubXBUYXJnZXRQYXJhbXNOYW1lW1NOTVBUQVJHRVRQQVJBTVNOQU1FX01BWF9TSVpFXTsKKyAgICBzaXplX3Qgc25tcFRhcmdldFBhcmFtc05hbWVfbGVuOworCisgICAgLyogQ29sdW1uIHZhbHVlcyAqLworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRbU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW47CisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZTsKKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1czsKKworICAgIGNoYXIgICAgICAgICAgICBoYXNoVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgcGFyYW1zX2ZsYWdzOworCisgICAgLyogdXNlZCBkdXJpbmcgc2V0IHByb2Nlc3NpbmcgKi8KKyAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfdW5kbyAqdW5kbzsKK30gc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnk7CisKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBzbm1wVGxzdG1QYXJhbXNUYWJsZV9oYW5kbGVyOworc3RhdGljIE5ldHNubXBDYWNoZUxvYWQgc25tcFRsc3RtUGFyYW1zVGFibGVfbG9hZDsKK3N0YXRpYyBOZXRzbm1wQ2FjaGVGcmVlIHNubXBUbHN0bVBhcmFtc1RhYmxlX2ZyZWU7CisKK3N0YXRpYyBpbnQgX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CitzdGF0aWMgdm9pZCBfdGxzdG1QYXJhbXNfaW5pdF9wZXJzaXN0ZW5jZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wYXJhbXNfYWRkKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBfcGFyYW1zX3JlbW92ZShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgX3BhcmFtc190d2Vha19zdG9yYWdlKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSk7CisKK3N0YXRpYyB1aW50MzJfdCAgICAgICAgICAgICAgICBfbGFzdF9jaGFuZ2VkID0gMDsKK3N0YXRpYyBuZXRzbm1wX3RkYXRhICAgICAgICAgICpfdGFibGVfZGF0YSA9IE5VTEw7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBzbm1wVGxzdG1QYXJhbXNUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMKKyAqIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkCisgKi8KK3ZvaWQKK2luaXRfc25tcFRsc3RtUGFyYW1zVGFibGUodm9pZCkKK3sKKyAgICBvaWQgcmVnX29pZFtdID0ge1NOTVBfVExTX1RNX0JBU0UsMiwyLDEsNn07CisgICAgY29uc3Qgc2l6ZV90IHJlZ19vaWRfbGVuICAgPSBPSURfTEVOR1RIKHJlZ19vaWQpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfY2FjaGUgICAgICAgICAgICAgICAgICAgKmNhY2hlOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgICAgKndhdGNoZXI7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSBzbm1wVGxzdG1QYXJhbXNUYWJsZVxuIikpOworCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgKCJzbm1wVGxzdG1QYXJhbXNUYWJsZSIsIHNubXBUbHN0bVBhcmFtc1RhYmxlX2hhbmRsZXIsIHJlZ19vaWQsCisgICAgICAgICByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKTsKKworICAgIF90YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoICJzbm1wVGxzdG1QYXJhbXNUYWJsZSIsIDAgKTsKKyAgICBpZiAoTlVMTCA9PSBfdGFibGVfZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyB0ZGF0YSB0YWJsZSBmb3Igc25tcFRsc3RtUGFyYW1zVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoU05NUFRMU1RNUEFSQU1TVEFCTEVfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIHNubXBUbHN0bVBhcmFtc1RhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlX2RhdGEpOworICAgICAgICBfdGFibGVfZGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FjaGUtPm1hZ2ljID0gKHZvaWQgKilfdGFibGVfZGF0YTsKKyAgICBjYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyApOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgdGFibGUgaW5mbyBmb3Igc25tcFRsc3RtUGFyYW1zVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGVfZGF0YSk7CisgICAgICAgIF90YWJsZV9kYXRhID0gTlVMTDsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9mcmVlKGNhY2hlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKgorICAgICAqIHBvcHVsYXRlIGluZGV4IHR5cGVzCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleDogc25tcFRhcmdldFBhcmFtc05hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fUFJJVl9JTVBMSUVEX09DVEVUX1NUUiwgIDApOworCisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IFNOTVBUTFNUTVBBUkFNU1RBQkxFX01JTl9DT0xVTU47CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IFNOTVBUTFNUTVBBUkFNU1RBQkxFX01BWF9DT0xVTU47CisgICAgCisgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlciggcmVnLCBfdGFibGVfZGF0YSwgdGFibGVfaW5mbyApOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGVfY29udGFpbmVyIik7CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHNjYWxhcnMKKyAgICAgKi8KKyAgICByZWdfb2lkWzEwXSA9IDQ7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBUbHN0bVBhcmFtc0NvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY291bnRfaGFuZGxlciwgcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bVBhcmFtc0NvdW50XG4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnKTsKKyAgICAgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNubXBUbHN0bVBhcmFtc0NvdW50Iik7CisgICAgfQorICAgIAorICAgIHJlZ19vaWRbMTBdID0gNTsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgInNubXBUbHN0bVBhcmFtc1RhYmxlTGFzdENoYW5nZWQiLCBOVUxMLCByZWdfb2lkLAorICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgd2F0Y2hlciA9IG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygodm9pZCopJl9sYXN0X2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX2xhc3RfY2hhbmdlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKKyAgICBpZiAoKE5VTEwgPT0gcmVnKSB8fCAoTlVMTCA9PSB3YXRjaGVyKSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtUGFyYW1zVGFibGVMYXN0Q2hhbmdlZFxuIik7CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihyZWcsIHdhdGNoZXIpOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZQorICAgICAqLworICAgIF90bHN0bVBhcmFtc19pbml0X3BlcnNpc3RlbmNlKCk7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0YWJsZSBzdHJ1Y3R1cmVzCisgKgorICovCisvKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAqLworbmV0c25tcF90ZGF0YV9yb3cgKgorc25tcFRsc3RtUGFyYW1zVGFibGVfY3JlYXRlRW50cnkobmV0c25tcF90ZGF0YSAqdGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNubXBUYXJnZXRQYXJhbXNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbiApIHsKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKworICAgIGlmICgoTlVMTCA9PSBzbm1wVGFyZ2V0UGFyYW1zTmFtZSkgfHwgKHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3coKTsKKyAgICBpZiAoIXJvdykgeworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcm93LT5kYXRhID0gZW50cnk7CisKKyAgICBERUJVR01TR1QoKCJ0bHN0bVBhcmFtc1RhYmxlOmVudHJ5OmNyZWF0ZSIsICJlbnRyeSAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgIGVudHJ5LCByb3cpKTsKKworICAgIERFQlVHSUYoInNubXBUbHN0bVBhcmFtVGFibGU6ZW50cnk6Y3JlYXRlIikgeworICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSkrMV07CisgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgc25tcFRhcmdldFBhcmFtc05hbWUpOworICAgICAgICBERUJVR01TR1QoKCJ0bHN0bVBhcmFtc1RhYmxlOmVudHJ5OmNyZWF0ZSIsCisgICAgICAgICAgICAgICAgICAgImVudHJ5ICVzICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGVudHJ5LCByb3cpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBvcHVsYXRlIGluZGV4CisgICAgICovCisgICAgbWVtY3B5KGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwgc25tcFRhcmdldFBhcmFtc05hbWUsCisgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbik7CisgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbiA9IHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbjsKKyAgICBuZXRzbm1wX3RkYXRhX3Jvd19hZGRfaW5kZXgoIHJvdywgQVNOX1BSSVZfSU1QTElFRF9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW4pOworCisgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50WzBdID0gJ1wwJzsKKyAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0gMDsKKyAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisgICAgICAgIAorICAgIGlmICh0YWJsZV9kYXRhKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnJvdzppbnNlcnQiLCAicm93ICVwXG4iLAorICAgICAgICAgICAgICAgICAgICByb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KCB0YWJsZV9kYXRhLCByb3cgKTsKKyAgICB9CisgICAgcmV0dXJuIHJvdzsKK30KKworLyogYWxsb2NhdGUgdW5kbyByZXNvdXJjZXMgKi8KK3N0YXRpYyBzbm1wVGxzdG1QYXJhbXNUYWJsZV91bmRvICoKK19hbGxvY1VuZG8oc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGVudHJ5LT51bmRvID0gU05NUF9NQUxMT0NfVFlQRURFRihzbm1wVGxzdG1QYXJhbXNUYWJsZV91bmRvKTsKKyAgICBpZiAoIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gLTE7IC8qIGRvbid0IGtub3cgKi8KKworICAgIC8qIFRPRE86IGFsbG9jYXRlZCBhbnkgb3RoZXIgcmVzb3VyY2VzIG5lZWRlZCAqLworCisgICAgcmV0dXJuIGVudHJ5LT51bmRvOworfQorCisvKiBmcmVlIHVuZG8gcmVzb3VyY2VzICovCitzdGF0aWMgdm9pZAorX2ZyZWVVbmRvKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogVE9ETzogcmVsZWFzZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyAqLworICAgIFNOTVBfRlJFRShlbnRyeS0+dW5kbyk7Cit9CisKKy8qIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLwordm9pZAorc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkobmV0c25tcF90ZGF0YSAgICAgKnRhYmxlX2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdykKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuOyAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworCisgICAgZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKilyb3ctPmRhdGE7CisKKyAgICBERUJVR01TR1QoKCJ0bHN0bVBhcmFtc1RhYmxlOmVudHJ5OmRlbGV0ZSIsICJlbnRyeSAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgIGVudHJ5LCByb3cpKTsKKworICAgIGlmICh0YWJsZV9kYXRhKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnJvdzpyZW1vdmUiLCAicm93ICVwXG4iLCByb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3coIHRhYmxlX2RhdGEsIHJvdyApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3Jvdyggcm93ICk7ICAgIAorCisgICAgaWYgKGVudHJ5ICYmIGVudHJ5LT51bmRvKQorICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgIFNOTVBfRlJFRSggZW50cnkgKTsgLyogVE9ETyAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBoYW5kbGUgY2FjaGUgLyBpbnRlcmFjdGlvbnMgd2l0aCBzbm1wVGxzdG1QYXJhbXMgY29udGFpbmVyIGluIHNubXBsaWIKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitfcGFyYW1zX2FkZChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgc25tcFRsc3RtUGFyYW1zICAgICAqcGFyYW1zOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnBhcmFtczphZGQiLCAibmFtZSAlcywgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLCBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKworICAgIHBhcmFtcyA9CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfY3JlYXRlKGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmhhc2hUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4pOworICAgIGlmIChOVUxMID09IHBhcmFtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyYW1zLT5mbGFncyA9IFRMU1RNX1BBUkFNU19GUk9NX01JQjsKKyAgICBpZiAoZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBwYXJhbXMtPmZsYWdzIHw9IFRMU1RNX1BBUkFNU19OT05WT0xBVElMRTsKKworICAgIGlmIChuZXRzbm1wX3Rsc3RtUGFyYW1zX2FkZChwYXJhbXMpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHBhcmFtcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX3BhcmFtc19yZW1vdmUoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIHNubXBUbHN0bVBhcmFtcyAgICAgIGluZGV4LCAqZm91bmQ7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cGFyYW1zOnJlbW92ZSIsICJuYW1lICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSkpOworCisgICAgaW5kZXgubmFtZSA9IGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZTsKKyAgICBmb3VuZCA9IG5ldHNubXBfdGxzdG1QYXJhbXNfZmluZCgmaW5kZXgpOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX3JlbW92ZShmb3VuZCk7CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShmb3VuZCk7CisgICAgfQorICAgIGVudHJ5LT5wYXJhbXNfZmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZAorX3BhcmFtc190d2Vha19zdG9yYWdlKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAgICpwYXJhbXMsIGluZGV4OworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnBhcmFtczp0d2VhayIsICJuYW1lICVzLCBzdCAlZFxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSkpOworCisgICAgaW5kZXgubmFtZSA9IGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZTsKKyAgICBwYXJhbXMgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZpbmQoJmluZGV4KTsKKyAgICBpZiAoTlVMTCA9PSBwYXJhbXMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cGFyYW1zOnR3ZWFrIiwKKyAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGZpbmQgcGFyYW1zIVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgcGFyYW1zLT5mbGFncyB8PSBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEU7CisgICAgZWxzZQorICAgICAgICBwYXJhbXMtPmZsYWdzICY9IH5UTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEU7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3RkYXRhX3JvdyAqCitfZW50cnlfZnJvbV9wYXJhbXMoc25tcFRsc3RtUGFyYW1zICAqcGFyYW1zKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgcm93ID0gc25tcFRsc3RtUGFyYW1zVGFibGVfY3JlYXRlRW50cnkoTlVMTCwgcGFyYW1zLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHBhcmFtcy0+bmFtZSkpOworICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2FuIGNyZWF0ZSBzbm1wVGxzdG1QYXJhbXMgcm93IGVudHJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgaWYgKHBhcmFtcy0+ZmxhZ3MgJiBUTFNUTV9QQVJBTVNfRlJPTV9DT05GSUcpCisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9IFNUX1BFUk1BTkVOVDsKKyAgICBlbHNlIGlmICghIChwYXJhbXMtPmZsYWdzICYgVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFKSkKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gU1RfVk9MQVRJTEU7CisKKyAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfQUNUSVZFOworCisgICAgaWYgKHBhcmFtcy0+ZmluZ2VycHJpbnQpIHsKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9IAorICAgICAgICAgICAgc3RybGVuKHBhcmFtcy0+ZmluZ2VycHJpbnQpOworICAgICAgICBpZiAoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA+CisgICAgICAgICAgICBzaXplb2YoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSkKKyAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpIC0gMTsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwgcGFyYW1zLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4pOworICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRbc2l6ZW9mKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkgLSAxXSA9IDA7CisgICAgfQorICAgIGVudHJ5LT5oYXNoVHlwZSA9IHBhcmFtcy0+aGFzaFR5cGU7CisgICAgZW50cnktPnBhcmFtc19mbGFncyA9IHBhcmFtcy0+ZmxhZ3M7CisKKyAgICByZXR1cm4gcm93OworfQorCitzdGF0aWMgaW50Citzbm1wVGxzdG1QYXJhbXNUYWJsZV9sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljICkKKyB7CisgICAgbmV0c25tcF90ZGF0YSAgICAgKnRhYmxlID0gKG5ldHNubXBfdGRhdGEgKil2bWFnaWM7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWN0aXZlX3BhcmFtczsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRyOworICAgIHNubXBUbHN0bVBhcmFtcyAgICpwYXJhbXM7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIGFjdGl2ZV9wYXJhbXMgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGFjdGl2ZV9wYXJhbXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6bG9hZCIsICJzbm1wVGxzdG1QYXJhbXMgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoYWN0aXZlX3BhcmFtcykpKTsKKyAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoYWN0aXZlX3BhcmFtcyk7CisgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogaW5zZXJ0IHJvd3MgZm9yIGFjdGl2ZSBwYXJhbXMgaW50byB0YmwgY29udGFpbmVyCisgICAgICovCisgICAgcGFyYW1zID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsgcGFyYW1zOyBwYXJhbXMgPSBJVEVSQVRPUl9ORVhUKGl0cikpIHsKKworICAgICAgICByb3cgPSBfZW50cnlfZnJvbV9wYXJhbXMocGFyYW1zKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgICAgICByYyA9LTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCByb3cpICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpsb2FkIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitzbm1wVGxzdG1QYXJhbXNUYWJsZV9mcmVlKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljICkKK3sKKyAgICBuZXRzbm1wX3RkYXRhICAgICAgICAgICAgKnRhYmxlID0gKG5ldHNubXBfdGRhdGEgKil2bWFnaWM7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICAgICpyb3c7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICAgICAgICp0YmxfaXRyOworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICAgKmVudHJ5OworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6ZnJlZSIsICJjYWxsZWQsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKHRhYmxlLT5jb250YWluZXIpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6ZnJlZSIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBlbnRyeSBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiByZW1vdmUgYWxsIGFjdGl2ZSByb3dzICh0aGV5IGFyZSBpbiB0aGUgcGFyYW1zIGNvbnRhaW5lciBrZXB0CisgICAgICAgICAqIGJ5IHRoZSBsaWJyYXJ5KS4gS2VlcCBpbmFjdGl2ZSBvbmVzIGZvciBuZXh0IHRpbWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHsKKyAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICBJVEVSQVRPUl9SRU1PVkUodGJsX2l0cik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6ZnJlZSIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUgdGFibGUKKyAqCisgKi8KK3N0YXRpYyBpbnQKK3NubXBUbHN0bVBhcmFtc1RhYmxlX2hhbmRsZXIoCisgICAgbmV0c25tcF9taWJfaGFuZGxlciAgICAgICAgICAgICAgICpoYW5kbGVyLAorICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAqcmVnaW5mbywKKyAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICAgICAgKnJlcWluZm8sCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAgICAgICpyZXF1ZXN0cykgeworCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgKnJlcXVlc3QgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfdGRhdGEgICAgICAgICAgICAgICp0YWJsZV9kYXRhOworICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICAgICAgICp0YWJsZV9yb3c7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIAorICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmhhbmRsZXIiLCAiUHJvY2Vzc2luZyAlcyBtb2RlICglZCkgcmVxdWVzdFxuIiwKKyAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCisgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHRVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOiAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgYmluWzQyXSwgKnB0ciA9IGJpbjsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGJpbiksIG9mZnNldCA9IDE7CisgICAgICAgICAgICAgICAgaW50ICAgIHJjOworICAgICAgICAgICAgICAgIGJpblswXSA9IHRhYmxlX2VudHJ5LT5oYXNoVHlwZTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCh0YWJsZV9lbnRyeS0+aGFzaFR5cGUgIT0gMCk7CisgICAgICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2hleF90b19iaW5hcnkoCisgICAgICAgICAgICAgICAgICAgICZwdHIsICZsZW4sICZvZmZzZXQsIDAsCisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKDEgIT0gcmMpCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbiwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX0dFVCAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTEgIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gUkVTRVJWRTEgd2UgYXJlIGp1c3QgY2hlY2tpbmcgYmFzaWMgQVNOLjEgc2l6ZS90eXBlIHJlc3RyaWN0aW9ucy4KKyAgICAgKiBZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZS4gRG9uJ3QgY2hhbmdlIGFueQorICAgICAqIG9mIHRoZSBjb2x1bW4gdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgUkVTRVJWRTIgb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKChOVUxMICE9IHRhYmxlX2VudHJ5KSAmJgorICAgICAgICAgICAgICAgIChTVF9SRUFET05MWSA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBmb3IgZWFjaCBjb2x1bW4sIGFsbG9jYXRlIGFueSBhZGRpdGlvbmFsIHJlc291cmNlcyBuZWVkZWQKKyAgICAgICAgICAgICAqIGJleW9uZCB3aGF0IGlzIGluIHRoZSB1bmRvIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwgc2l6ZW9mKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIC8qKiBjaGVjayBsZW4vYWxnb3JpdGhtIE1JQiByZXF1aXJlbWVudHMgKi8KKyAgICAgICAgICAgICAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiA9PSByZXQpCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2VydF9jaGVja192Yl9maW5nZXJwcmludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworCisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfc3RvcmFnZXR5cGUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA6IFNUX05PTkUgKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIDogUlNfTk9ORVhJU1RFTlQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgOiBTVF9OT05FKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgIH0gLyogc3dpdGNoIGNvbG51bSAqLworCisgICAgICAgICAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfS8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTIgIyMjIyMKKyAgICAgKgorICAgICAqICAgUkVTRVJWRTIgaXMgZm9yIGNoZWNraW5nIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGZyb20gdGhlIE1JQi4KKyAgICAgKiBTaW5jZSB0aGVzZSByZXN0cmljdGlvbnMgYXJlIG9mdGVuIGluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0LAorICAgICAqIG1pYjJjIGNhbid0IGdlbmVyYXRlIGNvZGUuIEl0J3MgcG9zc2libGUgdGhhdCB5b3UgbmVlZCB0byBhZGQKKyAgICAgKiBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLiBIb3dldmVyLCBkb24ndCBjaGFuZ2UgYW55IG9mIHRoZSBjb2x1bW4KKyAgICAgKiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBBQ1RJT04gb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpZiBubyB0YWJsZV9yb3csIGNyZWF0ZSBvbmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gc25tcFRsc3RtUGFyYW1zVGFibGVfY3JlYXRlRW50cnkKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2RhdGEsICAoY2hhciopdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLnN0cmluZywgCisgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX3JvdykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSB0YWJsZV9yb3ctPmRhdGE7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmZhdGUgPSBGQVRFX05FV0xZX0NSRUFURUQ7CisgICAgICAgICAgICAgICAgLyoqIGFzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyggcmVxdWVzdCwgdGFibGVfcm93ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qKiBhbGxvY2F0ZSB1bmRvIHN0cnVjdHVyZSwgaWYgbmVlZGVkICovCisgICAgICAgICAgICBpZighdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyoqIGRvbid0IGFsbG93IG11bHRpcGxlIHNldHMgb2Ygc2FtZSBjb2x1bW4gKi8KKyAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW3RhYmxlX2luZm8tPmNvbG51bV0pIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJ0bHN0bVBhcmFtc1RhYmxlOnJlc2VydmUyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBzZXRzIHRvIGNvbCAlZCBpbiByZXF1ZXN0XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtKSk7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbdGFibGVfaW5mby0+Y29sbnVtXSA9IHJlcXVlc3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qKiBtYWtlIHN1cmUgcm93c3RhdHVzIGlzIHVzZWQgdG8gY3JlYXRlIHJvd3MgKi8KKyAgICAgICAgaWYgKCByZXQgPT0gU05NUF9FUlJfTk9FUlJPUiApIHsKKyAgICAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIGlmICgodGFibGVfZW50cnktPnVuZG8tPmZhdGUgIT0gRkFURV9ORVdMWV9DUkVBVEVEKSB8fAorICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzIC8gY3JlYXRpb24gKi8KKyAgICAgICAgfSAvKiBpZiBubyBlcnJvciAqLworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZSRUUgIyMjIyMKKyAgICAgKgorICAgICAqICAgRlJFRSBpcyBmb3IgY2xlYW5pbmcgdXAgYWZ0ZXIgYSBmYWlsZWQgcmVxdWVzdCAoZHVyaW5nIGVpdGhlcgorICAgICAqIFJFU0VSVkUxIG9yIFJFU0VSVkUyKS4gU28gYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgbmVlZCB0byBiZQorICAgICAqIHJlbGVhc2VkLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIHJlc291cmNlcworICAgICAgICAgKiByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyAgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3coICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgID0gIG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbyApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyggcmVxdWVzdCwgdGFibGVfcm93ICk7CisKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUgKQorICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KCB0YWJsZV9kYXRhLCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX0ZSRUUgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQUNUSU9OICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIHRoZSBBQ1RJT04gcGhhc2UsIHdlIHBlcmZvcm0gYW55IHNldHMgdGhhdCBjYW4gYmUgdW5kb25lLgorICAgICAqIChTYXZlIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgdW5kb25lIGZvciB0aGUgQ09NTUlUIHBoYXNlLikKKyAgICAgKgorICAgICAqICAgQWZ0ZXIgaW5kaXZpZHVhbCBjb2x1bW5zIGhhdmUgYmVlbiBkb25lLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlCisgICAgICogcm93IGFzIGEgd2hvbGUgaXMgY29uc2lzdGVudC4KKyAgICAgKgorICAgICAqIFRoZSBuZXh0IHBoYXNlIGlzIFVORE8gb3IgQ09NTUlULgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVfY2hhciAqdG1wID0gKHVfY2hhciopdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50OworCisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW47CisKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aGFzaFR5cGUgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmdbMF07CisgICAgICAgICAgICAgICAgbWVtc2V0KCB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2JpbmFyeV90b19oZXgoJnRtcCwgJnRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKDAgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbikKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVCAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICAvKiBzYXZlIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlIHZhbHVlICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIC8qIGdldCB2YWx1ZSBmcm9tIHZhcmJpbmQgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIC8qIHNhdmUgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIHZhbHVlICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgLyogZ2V0IHZhbHVlIGZyb20gdmFyYmluZCAgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzICAgICA9ICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICAgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gLyogc2V0IHZhbHVlcyBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICBpZiAoIHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SICkgeworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQWxsIGNvbHVtbnMgbm93IGhhdmUgdGhlaXIgZmluYWwgdmFsdWVzIHNldC4gY2hlY2sgdGhlCisgICAgICAgICAgICAgKiBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBlYWNoIHJvdy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGFscmVhZHkgY2hlY2tlZCAqLworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qKiBhc3N1bWUgY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykpICYmCisgICAgICAgICAgICAgICAgICAgICgoIXRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVU10pIHx8CisgICAgICAgICAgICAgICAgICAgICAoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogY2hlY2sgbWliIHJlc3RyaWN0aW9ucyBvbiBhY3RpdmUgcm93cy4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVF07CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsgLyogcGVyIG1pYiAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvKiBhY3RpdmUgcm93ICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUlNfSVNfR09JTkdfQUNUSVZFKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIGNoZWNrIHJlc3RyaWN0aW9ucyBmb3IgYWN0aXZhdGluZyBhIHJvdworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyoqIGlmIGdvaW5nIGFjdGl2ZSwgaW5jb25zaXN0ZW5jeSBpcyBmYXRhbCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLyogZ29pbmcgYWN0aXZlICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUlNfREVTVFJPWSA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRPRE86IGNoZWNrIHJlc3RyaWN0aW9ucyBmb3IgZGVsZXRpbmcgYSByb3cKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qKiBjYW4ndCBkZWxldGUgYWN0aXZlIHJvdyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVNdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvKiBkZXN0cm95ICovCisgICAgICAgICAgICAgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvKiBjb25zaXN0ZW5jeSBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgfSAvKiBpZiBubyBlcnJvciAqLworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9BQ1RJT04gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBVTkRPICMjIyMjCisgICAgICoKKyAgICAgKiAgIFVORE8gaXMgZm9yIGNsZWFuaW5nIHVwIGFueSBmYWlsZWQgcmVxdWVzdHMgdGhhdCB3ZW50IHRocm91Z2ggdGhlCisgICAgICogQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9yb3cgICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KCAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50IHZhbHVlICovCisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICovCisKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzOworICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICovCisgICAgICAgICAgICB9IC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gZGF0YQorICAgICAgICAgKiBvciByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyAgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3coICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbyApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyggcmVxdWVzdCwgdGFibGVfcm93ICk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUgKQorICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KCB0YWJsZV9kYXRhLCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9VTkRPICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENPTU1JVCAjIyMjIworICAgICAqCisgICAgICogICBDT01NSVQgaXMgdGhlIGZpbmFsIHN1Y2Nlc3Mgc3RhdGUsIHdoZW4gYWxsIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4KKyAgICAgKiBUaGVyZSBpcyBub3QgcmVjb3Zlcnkgc3RhdGUgc2hvdWxkIHNvbWV0aGluZyBmYWlsZSBoZXJlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ICAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyggIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oICAgIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoUlNfTk9UUkVBRFkgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykgJiYKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgZWxzZSBpZiAoKFJTX05PVElOU0VSVklDRSA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSAmJgorICAgICAgICAgICAgICAgICAgICAgKDAgPT0gdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpKQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKworICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhIGZvciByZXF1ZXN0cyB3aXRoIG5vIHJvd3N0YXR1cyAqLworICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvICYmCisgICAgICAgICAgICAgICAgIXRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVU10gIT0gMCkgeworICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyoqIHVwZGF0ZSBhY3RpdmUgYWRkcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKDAgPT0gdGFibGVfZW50cnktPnBhcmFtc19mbGFncykgJiYKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSkKKyAgICAgICAgICAgICAgICAgICAgX3BhcmFtc19hZGQodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgwICE9IHRhYmxlX2VudHJ5LT5wYXJhbXNfZmxhZ3MpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPT0gUlNfREVTVFJPWSkpCisgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gdGFibGVfZW50cnktPnBhcmFtc19mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfYWRkKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgLyoqIHNpbXBseSBzZXQgc3RhdHVzIGJhc2VkIG9uIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gdGFibGVfZW50cnktPnBhcmFtc19mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0RFU1RST1k6CisgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IHRhYmxlX2VudHJ5LT5wYXJhbXNfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KCByZXF1ZXN0LCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93ICk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhICovCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgICAgICBpZiAoUlNfQUNUSVZFID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX3R3ZWFrX3N0b3JhZ2UodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKiogdXBkYXRlIGxhc3QgY2hhbmdlZCAqLworICAgICAgICBfbGFzdF9jaGFuZ2VkID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfQ09NTUlUICovCisgICAgfSAgLyogc3dpdGNoIChyZXFpbmZvLT5tb2RlKSAqLworICAgIAorICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKQorICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgIAorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQKK19jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHZhbDsKKworICAgIGlmIChNT0RFX0dFVCAhPSByZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgbW9kZSBpbiBSTyBoYW5kbGVyIik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgaWYgKE5VTEwgPT0gX3RhYmxlX2RhdGEtPmNvbnRhaW5lcikKKyAgICAgICAgdmFsID0gMDsKKyAgICBlbHNlCisgICAgICAgIHZhbCA9IENPTlRBSU5FUl9TSVpFKF90YWJsZV9kYXRhLT5jb250YWluZXIpOworCisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9HQVVHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmdmFsLCBzaXplb2YodmFsKSk7CisgICAKKyAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQorICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CisgICAgCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF90bHN0bVBhcmFtc1RhYmxlX3NhdmUoaW50IG1ham9ySUQsIGludCBtaW5vcklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKK3N0YXRpYyBpbnQgX3NhdmVfcGFyYW1zKHNubXBUbHN0bVBhcmFtcyAqcGFyYW1zLCB2b2lkICphcHBfdHlwZSk7CitzdGF0aWMgaW50IF9zYXZlX2VudHJ5KHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSwgdm9pZCAqdHlwZSk7CitzdGF0aWMgdm9pZCBfdGxzdG1QYXJhbXNUYWJsZV9yb3dfcmVzdG9yZV9taWIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmJ1Zik7CisKK3N0YXRpYyBjb25zdCBjaGFyIG1pYl90b2tlbltdID0gInNubXBUbHN0bVBhcmFtc0VudHJ5IjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKl9pbml0X3BlcnNpc3RlbmNlIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0YWJsZQorICogaW5pdCByb3V0aW5lLgorICoKKyAqIElmIHlvdXIgdGFibGUgZGVwZW5kcyBvbiByb3dzIGluIGFub3RoZXIgdGFibGUsCisgKiB5b3Ugc2hvdWxkIHJlZ2lzdGVyIHlvdXIgY2FsbGJhY2sgYWZ0ZXIgdGhlIG90aGVyIHRhYmxlLAorICogd2hpY2ggc2hvdWxkIGVuc3VyZSB0aGUgcm93cyBvbiB3aGljaCB5b3UgZGVwZW5kIGFyZSBzYXZlZAorICogKGFuZCByZS1jcmVhdGVkKSBiZWZvcmUgdGhlIGRlcGVuZGVudCByb3dzLgorICovCit2b2lkCitfdGxzdG1QYXJhbXNfaW5pdF9wZXJzaXN0ZW5jZSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIG1pYl90b2tlbiwgX3Rsc3RtUGFyYW1zVGFibGVfcm93X3Jlc3RvcmVfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHJjID0gc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rsc3RtUGFyYW1zVGFibGVfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7CisKKyAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIGZvciBTVE9SRV9EQVRBIGNhbGxiYWNrICIKKyAgICAgICAgICAgICAgICAgImluIF90bHN0bVBhcmFtc19pbml0X3BlcnNpc3RlbmNlXG4iKTsKK30KKworc3RhdGljIGludAorX3Rsc3RtUGFyYW1zVGFibGVfc2F2ZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQoreworICAgIGNoYXIgICAgICAgICAgICBzZXBbXSA9CisgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyI7CisgICAgY2hhciAgICAgICAgICAgIGJ1ZltdID0gIiNcbiIgIiMgdGxzdG1QYXJhbXMgcGVyc2lzdGVudCBkYXRhXG4iICIjIjsKKyAgICBjaGFyICAgICAgICAgICAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWN0aXZlX3BhcmFtcyA9IG5ldHNubXBfdGxzdG1QYXJhbXNfY29udGFpbmVyKCk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqdGJsX2l0ciwgKnBhcmFtc19pdHI7CisgICAgc25tcFRsc3RtUGFyYW1zICAgKnBhcmFtczsKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBpZiAoKENPTlRBSU5FUl9TSVpFKGFjdGl2ZV9wYXJhbXMpID09IDApICYmCisgICAgICAgIChDT05UQUlORVJfU0laRShfdGFibGVfZGF0YS0+Y29udGFpbmVyKSA9PSAwKSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKKworICAgIC8qCisgICAgICogc2F2ZSBhY3RpdmUgcm93cyBmcm9tIHBhcmFtcyBjb250YWluZXIKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBhY3RpdmVfcGFyYW1zKSB7CisgICAgICAgIHBhcmFtc19pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoYWN0aXZlX3BhcmFtcyk7CisgICAgICAgIGlmIChOVUxMID09IHBhcmFtc19pdHIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnNhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IHBhcmFtcyBpdGVyYXRvclxuIikpOworICAgICAgICAgICAgcGFyYW1zID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbXMgPSBJVEVSQVRPUl9GSVJTVChwYXJhbXNfaXRyKTsKKworICAgICAgICBmb3IoIDsgcGFyYW1zOyBwYXJhbXMgPSBJVEVSQVRPUl9ORVhUKHBhcmFtc19pdHIpKSB7CisgICAgICAgICAgICAvKiogZG9uJ3Qgc3RvcmUgY29uZmlnIHJvd3MgKi8KKyAgICAgICAgICAgIGlmICgocGFyYW1zLT5mbGFncyAmIFRMU1RNX1BBUkFNU19GUk9NX0NPTkZJRykgfHwKKyAgICAgICAgICAgICAgICAhIChwYXJhbXMtPmZsYWdzICYgVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIF9zYXZlX3BhcmFtcyhwYXJhbXMsIHR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UocGFyYW1zX2l0cik7CisKKyAgICAvKgorICAgICAqIHNhdmUgaW5hY3RpdmUgcm93cyBmcm9tIG1pYgorICAgICAqLworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6c2F2ZSIsICJjYW50IGdldCB0YWJsZSBpdGVyYXRvclxuIikpOworICAgIGVsc2UgeworICAgICAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICAgICAgZm9yKCA7IHJvdzsgcm93ID0gSVRFUkFUT1JfTkVYVCh0YmxfaXRyKSkgeworICAgICAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwIGFsbCBhY3RpdmUgcm93cyAoc2hvdWxkIGJlIGluIGFjdGl2ZV9wYXJhbXMgYW5kIHRodXMgc2F2ZWQKKyAgICAgICAgICAgICAqIGFib3ZlKSBhbmQgdm9sYXRpbGUgcm93cy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID09IFJTX0FDVElWRSkgfHwKKyAgICAgICAgICAgICAgICAoZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlICE9IFNUX05PTlZPTEFUSUxFKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgX3NhdmVfZW50cnkoZW50cnksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisgICAgfQorCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCAiXG4iKTsKKworICAgIC8qCisgICAgICogbmV2ZXIgZmFpbHMgCisgICAgICovCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogX3Rsc3RtUGFyYW1zVGFibGVfY29udGFpbmVyX3Jvd19zYXZlCisgKi8KK3N0YXRpYyBpbnQKK19zYXZlX2VudHJ5KHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSwgdm9pZCAqdHlwZSkKK3sKKyAgICBjaGFyICAgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlOworCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgZW50cnktPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBidWlsZCB0aGUgbGluZQorICAgICAqLworICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lWworICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWVfbGVuXSk7CisgICAgbmV0c25tcF9hc3NlcnQoMCA9PSBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRbCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW5dKTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXMgJXMgJXMgJWQiLCBtaWJfdG9rZW4sCisgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLCBoYXNoVHlwZSwKKyAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyk7CisgICAgYnVmW3NpemVvZihidWYpLTFdID0gMDsKKworICAgIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGJ1Zik7CisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cm93OnNhdmUiLCAic2F2aW5nIGVudHJ5ICclcydcbiIsIGJ1ZikpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX3BhcmFtcyhzbm1wVGxzdG1QYXJhbXMgKnBhcmFtcywgdm9pZCAqYXBwX3R5cGUpCit7CisgICAgY2hhciBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGU7CisKKyAgICBpZiAoTlVMTCA9PSBwYXJhbXMpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBwYXJhbXMtPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIHBhcmFtcy0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXMgLS0lcyAlcyAlZCIsIG1pYl90b2tlbiwgcGFyYW1zLT5uYW1lLAorICAgICAgICAgICAgIGhhc2hUeXBlLCBwYXJhbXMtPmZpbmdlcnByaW50LCBSU19BQ1RJVkUpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cGFyYW1zOnNhdmUiLCAic2F2aW5nIHBhcmFtcyAnJXMnXG4iLAorICAgICAgICAgICAgICAgIGJ1ZikpOworICAgIHJlYWRfY29uZmlnX3N0b3JlKGFwcF90eXBlLCBidWYpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkCitfdGxzdG1QYXJhbXNUYWJsZV9yb3dfcmVzdG9yZV9taWIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmJ1ZikKK3sKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgIHJvd1N0YXR1czsKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAgICAgKnBhcmFtczsKKworICAgIC8qKiBuZWVkIHNvbWV3aGVyZSB0byBzYXZlIHJvd3MgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChfdGFibGVfZGF0YSAmJiBfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsgCisKKyAgICBwYXJhbXMgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX3Jlc3RvcmVfY29tbW9uKCZidWYpOworICAgIGlmIChOVUxMID09IHBhcmFtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE5VTEwgPT0gYnVmKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImluY29tcGxldGUgbGluZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJvd1N0YXR1cyA9IGF0b2koYnVmKTsKKworICAgIC8qCisgICAgICogaWYgcm93IGlzIGFjdGl2ZSwgYWRkIGl0IHRvIHRoZSBwYXJhbXMgY29udGFpbmVyIHNvIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIGZvciB1c2UuIERvIG5vdCBhZGQgaXQgdG8gdGhlIHRhYmxlLCBzaW5jZSBpdCB3aWxsIGJlIGFkZGVkCisgICAgICogZHVyaW5nIGNhY2hlX2xvYWQuCisgICAgICovCisgICAgaWYgKFJTX0FDVElWRSA9PSByb3dTdGF0dXMpIHsKKyAgICAgICAgcGFyYW1zLT5mbGFncyA9IFRMU1RNX1BBUkFNU19GUk9NX01JQiB8IFRMU1RNX1BBUkFNU19OT05WT0xBVElMRTsKKworICAgICAgICBpZiAobmV0c25tcF90bHN0bVBhcmFtc19hZGQocGFyYW1zKSAhPSAwKQorICAgICAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHBhcmFtcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgKnJvdzsKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgICplbnRyeTsKKworICAgICAgICByb3cgPSBzbm1wVGxzdG1QYXJhbXNUYWJsZV9jcmVhdGVFbnRyeShfdGFibGVfZGF0YSwgcGFyYW1zLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocGFyYW1zLT5uYW1lKSk7CisgICAgICAgIGlmICghcm93KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworICAgICAgICAKKyAgICAgICAgZW50cnktPmhhc2hUeXBlID0gcGFyYW1zLT5oYXNoVHlwZTsKKyAgICAgICAgc3RybGNweShlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsIHBhcmFtcy0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgIHN0cmxlbihlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpOworICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IHJvd1N0YXR1czsKKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHBhcmFtcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTMzY2FjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisjaWZuZGVmIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TVEFCTEVfSAorCisjZGVmaW5lIFNOTVBfVExTX1RNX1BBUkFNU19DT1VOVCAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDQKKyNkZWZpbmUgU05NUF9UTFNfVE1fUEFSQU1TX0NIQU5HRUQgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgNQorI2RlZmluZSBTTk1QX1RMU19UTV9QQVJBTVNfVEFCTEUgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA2CisKKy8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwordm9pZCBpbml0X3NubXBUbHN0bVBhcmFtc1RhYmxlKHZvaWQpOwordm9pZCBpbml0aWFsaXplX3RhYmxlX3NubXBUbHN0bVBhcmFtc1RhYmxlKHZvaWQpOworI2RlZmluZSBTTk1QVExTVE1QQVJBTVNUQUJMRV9USU1FT1VUICA2MAorCisvKiBpbmRleCBkZWZpbml0aW9ucyBmb3IgdGFibGUgc25tcFRsc3RtUGFyYW1zVGFibGUgKi8KKyNkZWZpbmUgU05NUFRBUkdFVFBBUkFNU05BTUVfTUFYX1NJWkUgIDMyCisKKy8qIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHNubXBUbHN0bVBhcmFtc1RhYmxlICovCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVCAgICAxCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRSAgICAyCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgICAgMworICAgIAorI2RlZmluZSBTTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVF9NQVhfU0laRSAgICAyNTUKKyAgICAKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TVEFCTEVfTUlOX0NPTFVNTiBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TVEFCTEVfTUFYX0NPTFVNTiBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTCisKKyNlbmRpZiAvKiBTTk1QVExTVE1QQVJBTVNUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmY0ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgU05NUFRMU1RNU0VTU0lPTl9ICisjZGVmaW5lIFNOTVBUTFNUTVNFU1NJT05fSAorCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uKQorCisjZW5kaWYgLyogU05NUFRMU1RNU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmMgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljN2I2MAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogc25tcFRsc3RtU2Vzc2lvbgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJ0bHN0bS1taWIuaCIKKyNpbmNsdWRlICJzbm1wVGxzdG1TZXNzaW9uLmgiCisKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiBfbXlyZWcgPSBOVUxMOworCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXBUbHN0bVNlc3Npb24gbW9kdWxlICovCit2b2lkCitpbml0X3NubXBUbHN0bVNlc3Npb24odm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgbXlvaWRbXSA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMiwgMSB9OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVNlc3Npb24iLCAiSW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBfbXlyZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFRsc3RtU2Vzc2lvbiIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlvaWQsIE9JRF9MRU5HVEgobXlvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSBfbXlyZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBjcmVhdGUgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgInNubXBUbHN0bVNlc3Npb25cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmMgPSBORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKF9teXJlZywgMSwgVExTVE0pOworICAgIGlmIChNSUJfUkVHSVNURVJFRF9PSyAhPSByYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHNubXBUbHN0bVNlc3Npb24gbWRvdWxlXG4iKTsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKF9teXJlZyk7CisgICAgICAgIF9teXJlZyA9IE5VTEw7CisgICAgfQorCit9CisKKwordm9pZAorc2h1dGRvd25fc25tcFRsc3RtU2Vzc2lvbih2b2lkKQoreworICAgIGlmIChfbXlyZWcpIHsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoX215cmVnKTsKKyAgICAgICAgX215cmVnID0gTlVMTDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjYzAzYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgU05NUFRMU1RNU0VTU0lPTl9ICisjZGVmaW5lIFNOTVBUTFNUTVNFU1NJT05fSAorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXBUbHN0bVNlc3Npb24gbW9kdWxlICovCit2b2lkIGluaXRfc25tcFRsc3RtU2Vzc2lvbih2b2lkKTsKK3ZvaWQgc2h1dGRvd25fc25tcFRsc3RtU2Vzc2lvbih2b2lkKTsKKworI2VuZGlmIC8qIFNOTVBUTFNUTVNFU1NJT05fSCAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliLmggYi9hZ2VudC9taWJncm91cC90c20tbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjMDFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCitjb25maWdfcmVxdWlyZSh0c20tbWliL3NubXBUc21TdGF0cykKK2NvbmZpZ19yZXF1aXJlKHRzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgpCitjb25maWdfYWRkX21pYihTTk1QLVRTTS1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmMgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5NzZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oIgorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCh2b2lkKQoreworICAgIGNvbnN0IG9pZCAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeF9vaWRbXSA9CisgICAgICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgMTkwLCAxLCAyLCAxIH07CisKKyAgICBERUJVR01TR1RMKCgic25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4X29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeF9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpKTsKK30KKworaW50CitoYW5kbGVfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworICAgIC8qCisgICAgICogV2UgYXJlIG5ldmVyIGNhbGxlZCBmb3IgYSBHRVRORVhUIGlmIGl0J3MgcmVnaXN0ZXJlZCBhcyBhCisgICAgICogImluc3RhbmNlIiwgYXMgaXQncyAibWFnaWNhbGx5IiBoYW5kbGVkIGZvciB1cy4gIAorICAgICAqLworCisgICAgLyoKKyAgICAgKiBhIGluc3RhbmNlIGhhbmRsZXIgYWxzbyBvbmx5IGhhbmRzIHVzIG9uZSByZXF1ZXN0IGF0IGEgdGltZSwgc28KKyAgICAgKiB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciBhIGxpc3Qgb2YgcmVxdWVzdHM7IHdlJ2xsIG9ubHkgZ2V0IG9uZS4gCisgICAgICovCisKKyAgICBsb25nIGN1cnJlbnRfdmFsdWUgPSBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYKTsKKyAgICBzdGF0aWMgbG9uZyBvcmlnaW5hbF92YWx1ZSA9IDA7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGlmIChjdXJyZW50X3ZhbHVlID09IDApCisgICAgICAgICAgICBjdXJyZW50X3ZhbHVlID0gVFZfRkFMU0U7CisgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJyZW50X3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN1cnJlbnRfdmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIC8qCisgICAgICAgICAqIG9yIHlvdSBjb3VsZCB1c2UgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplIGluc3RlYWQgCisgICAgICAgICAqLworICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIpOworICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIHJldCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpICE9IDIgJiYKKyAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpICE9IDEpCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9XUk9OR1ZBTFVFKTsKKyAgICAgICAgb3JpZ2luYWxfdmFsdWUgPSBjdXJyZW50X3ZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBpZiAoVFZfRkFMU0UgPT0gKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikpCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgsIDEpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxfdmFsdWUpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKiB3ZSBkb24ndCBuZWVkIHRoZXNlICovCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXhcbiIsCisgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGM1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICAgJAorICovCisjaWZuZGVmIFNOTVBUU01DT05GSUdVUkFUSU9OVVNFUFJFRklYX0gKKyNkZWZpbmUgU05NUFRTTUNPTkZJR1VSQVRJT05VU0VQUkVGSVhfSAorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCh2b2lkKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeDsKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVFNNQ09ORklHVVJBVElPTlVTRVBSRUZJWF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWM0MTAxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgU05NUFRTTVNUQVRTX0gKKyNkZWZpbmUgU05NUFRTTVNUQVRTX0gKKworY29uZmlnX3JlcXVpcmUodHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzKQorCisjZW5kaWYgLyogU05NUFRTTVNUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2N2QyZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBzbm1wVHNtU3RhdHMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgInNubXBUc21TdGF0cy5oIgorCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogX215cmVnID0gTlVMTDsKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVscGVyX3N0YXRpc3RpY3MpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzaHV0ZG93bl9zbm1wdHNtc2Vzc2lvbiwgbmV0c25tcF91bnVzZWQpCisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcFRzbVN0YXRzIG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wVHNtU3RhdHModm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgc25tcFRzbVN0YXRzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxOTAsIDEsIDEgfTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgic25tcFRzbVN0YXRzIiwgIkluaXRpYWxpemluZ1xuIikpOworCisgICAgX215cmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBUc21TdGF0cyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRzbVN0YXRzX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNubXBUc21TdGF0c19vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSBfbXlyZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBjcmVhdGUgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgInNubXBUc21TdGF0c1xuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmMgPSBORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKF9teXJlZywgMSwgVFNNKTsKKyAgICBpZiAoTUlCX1JFR0lTVEVSRURfT0sgIT0gcmMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byByZWdpc3RlciBzbm1wVHNtU3RhdHMgbWRvdWxlXG4iKTsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKF9teXJlZyk7CisgICAgICAgIF9teXJlZyA9IE5VTEw7CisgICAgfQorfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0hVVERPV05fU05NUFRTTVNFU1NJT04KK3ZvaWQKK3NodXRkb3duX3NubXBUc21TZXNzaW9uKHZvaWQpCit7CisgICAgaWYgKF9teXJlZykgeworICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihfbXlyZWcpOworICAgICAgICBfbXlyZWcgPSBOVUxMOworICAgIH0KK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NIVVRET1dOX1NOTVBUU01TRVNTSU9OICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDA3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgU05NUFRTTVNUQVRTX0gKKyNkZWZpbmUgU05NUFRTTVNUQVRTX0gKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wVHNtU3RhdHMgbW9kdWxlICovCit2b2lkIGluaXRfc25tcFRzbVN0YXRzKHZvaWQpOwordm9pZCBzaHV0ZG93bl9zbm1wVHNtU3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBTTk1QVFNNU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jIGIvYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jCmluZGV4IGNmYmVlNDYuLmY5NjQ5ZWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYworKysgYi9hZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMKQEAgLTYyLDggKzYyLDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInR1bm5lbC5oIgogCiAjaWZuZGVmIE1JTgpAQCAtMTM3LDMyICsxMzcsMzUgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIExPQ0FMQUREUkVTUyAgICAgICAgICAxCi0gICAge0xPQ0FMQUREUkVTUywgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDF9fSwKKyAgICB7TE9DQUxBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgMX19LAogI2RlZmluZSAgIFJFTU9URUFERFJFU1MgICAgICAgICAyCi0gICAge1JFTU9URUFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX3R1bm5lbElmRW50cnksIDMsCi0gICAgIHsxLCAxLCAyfX0sCisgICAge1JFTU9URUFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCAyfX0sCiAjZGVmaW5lICAgRU5DQVBTTUVUSE9EICAgICAgICAgIDMKLSAgICB7RU5DQVBTTUVUSE9ELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgM319LAorICAgIHtFTkNBUFNNRVRIT0QsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCAzfX0sCiAjZGVmaW5lICAgSE9QTElNSVQgICAgICAgICAgICAgIDQKLSAgICB7SE9QTElNSVQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNH19LAorICAgIHtIT1BMSU1JVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA0fX0sCiAjZGVmaW5lICAgU0VDVVJJVFkgICAgICAgICAgICAgIDUKLSAgICB7U0VDVVJJVFksIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA1fX0sCisgICAge1NFQ1VSSVRZLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNX19LAogI2RlZmluZSAgIFRPUyAgICAgICAgICAgICAgICAgICA2Ci0gICAge1RPUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA2fX0sCisgICAge1RPUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA2fX0sCiAKICNkZWZpbmUgICBJRklOREVYICAgICAgICAgICAgICAgNwotICAgIHtJRklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90dW5uZWxDb25maWdFbnRyeSwgMywgezIsIDEsIDV9fSwKKyAgICB7SUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHVubmVsQ29uZmlnRW50cnksIDMsIHsyLCAxLCA1fX0sCiAjZGVmaW5lICAgUk9XU1RBVFVTICAgICAgICAgICAgIDgKLSAgICB7Uk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHVubmVsQ29uZmlnRW50cnksIDMsIHsyLCAxLCA2fX0sCisgICAge1JPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3R1bm5lbENvbmZpZ0VudHJ5LCAzLCB7MiwgMSwgNn19LAogfTsKIAogCiAKLWV4dGVybiBpbnQgICAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50ICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QpOwotCiBzdGF0aWMgb2lkICAgICAgc3lzT1JUYWJsZV9yZWdbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTAsIDEzMSB9Owotc3RhdGljIHNpemVfdCAgIHN5c09SVGFibGVfcmVnbGVuID0gODsKIAogc3RhdGljIHN0cnVjdCB0dW5uZWwgKnR1bm5lbHM7CiAKQEAgLTE3MSw3ICsxNzQsNyBAQAogdm9pZAogZGVpbml0X3R1bm5lbCh2b2lkKQogewotICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShzeXNPUlRhYmxlX3JlZywgc3lzT1JUYWJsZV9yZWdsZW4pOworICAgIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkoc3lzT1JUYWJsZV9yZWcpOwogfQogCiAKQEAgLTE4OCw3ICsxOTEsNyBAQAogdm9pZAogaW5pdF90dW5uZWwodm9pZCkKIHsKLSAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKHN5c09SVGFibGVfcmVnLCBzeXNPUlRhYmxlX3JlZ2xlbiwKKyAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShzeXNPUlRhYmxlX3JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICJSRkMgMjY2NyBUVU5ORUwtTUlCIGltcGxlbWVudGF0aW9uIGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiTGludXggMi4yLngga2VybmVscy4iKTsKIApAQCAtMjEzLDggKzIxNiw4IEBACiAgICAgb2lkICAgICAgICAgICAgIG5hbWVbTUFYX09JRF9MRU5dID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAzIH07CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgIHN0cnVjdCB2YXJpYWJsZSBpZlR5cGVfdmFyaWFibGUgPQotICAgICAgICB7IDMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDEwLAotICAgICAgICB7MSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgM30KKyAgICAgICAgeyAzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2lmRW50cnksIDEwLCB7MSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgM30KICAgICB9OwogICAgIHVuc2lnbmVkIGNoYXIgICpwOwogICAgIHNpemVfdCAgICAgICAgICB2YXJfbGVuOwpAQCAtMjQ1LDE1ICsyNDgsMTUgQEAKIAogCiAKLXN0YXRpYyBjaGFyICAgICoKK3N0YXRpYyBjb25zdCBjaGFyICoKIGdldE5hbWUoaW50IGluZGV4KQogewogI2lmbmRlZiBVU0lOR19JRl9NSUJfSUZUQUJMRV9JRlRBQkxFX01PRFVMRQogICAgIG9pZCAgICAgICAgICAgICBuYW1lW01BWF9PSURfTEVOXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgMiB9OwogICAgIHNpemVfdCAgICAgICAgICBsZW5ndGggPSAxMDsKICAgICBzdHJ1Y3QgdmFyaWFibGUgaWZOYW1lX3ZhcmlhYmxlID0KLSAgICAgICAgeyAyLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAxMCwKLSAgICAgICAgezEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDJ9CisgICAgICAgIHsgMiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pZkVudHJ5LCAxMCwgezEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDJ9CiAgICAgfTsKICAgICB1bnNpZ25lZCBjaGFyICAqcDsKICAgICBzaXplX3QgICAgICAgICAgdmFyX2xlbjsKQEAgLTQwNyw3ICs0MTAsNyBAQAogICAgIHN0YXRpYyBpbnQgICAgICBtYXhfaW5kZXggPSAxOwogICAgIHN0YXRpYyBzdHJ1Y3QgdHVubmVsICpsYXN0X3R1bm5lbCA9IE5VTEw7CiAgICAgc3RydWN0IHR1bm5lbCAgKnR1bm5lbDsKLSAgICBjaGFyICAgICAgICAgICAqaWZuYW1lOworICAgIGNvbnN0IGNoYXIgICAgICppZm5hbWU7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAKICAgICAvKgpAQCAtNDE1LDcgKzQxOCw3IEBACiAgICAgICovCiAgICAgZm9yICh0dW5uZWwgPSB0dW5uZWxzOyB0dW5uZWw7IHR1bm5lbCA9IHR1bm5lbC0+bmV4dCkgewogICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAidXBkYXRlVHVubmVscygpOiB1cGRhdGluZyAlcyAoaW5kZXg9JWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICJ1cGRhdGVUdW5uZWxzKCk6IHVwZGF0aW5nICVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8gInUpXG4iLAogICAgICAgICAgICAgICAgICAgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOwogICAgICAgICB1cGRhdGVUdW5uZWwodHVubmVsKTsKICAgICB9CkBAIC00NjEsNyArNDY0LDggQEAKICAgICAgICAgICAgIGxhc3RfdHVubmVsID0gdHVubmVsOwogCiAgICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZVR1bm5lbHMoKTogYWRkZWQgJXMgKGluZGV4PSVsdSBzdGF0ZT0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZVR1bm5lbHMoKTogYWRkZWQgJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbworICAgICAgICAgICAgICAgICAgICAgICJ1IHN0YXRlPSVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4LCB0dW5uZWwtPmFjdGl2ZSkpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlID09IDApCkBAIC00ODIsOCArNDg2LDggQEAKICAgICAgICAgaWYgKHR1bm5lbC0+aWZpbmRleCA9PSBpbmRleCkgewogICAgICAgICAgICAgaWYgKCF0dW5uZWwtPmFjdGl2ZSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgKGluZGV4PSVsdSlcbiIsIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwgIiVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8gInUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOwogICAgICAgICAgICAgcmV0dXJuIHR1bm5lbDsKICAgICAgICAgfQogICAgIH0KQEAgLTUwNCw4ICs1MDgsOCBAQAogICAgICAgICBpZiAodHVubmVsLT5pZmluZGV4ID4gaW5kZXgpIHsKICAgICAgICAgICAgIGlmICghdHVubmVsLT5hY3RpdmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzIChpbmRleD0lbHUpXG4iLCB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CisgICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsICIlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvICJ1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CiAgICAgICAgICAgICByZXR1cm4gdHVubmVsOwogICAgICAgICB9CiAgICAgfQpAQCAtNTQ4LDggKzU1Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmxlbmd0aCkgLSB0dW5uZWxfbGVuIC0gMykpIHsKICAgICAgICAgICAgIGlmICghdHVubmVsLT5hY3RpdmUpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzIChpbmRleD0lbHUpXG4iLCB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CisgICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsICIlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvICJ1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CiAgICAgICAgICAgICByZXR1cm4gdHVubmVsOwogICAgICAgICB9CiAgICAgfQpAQCAtNTkyLDggKzU5Niw3IEBACiAgICAgfQogCiAgICAgaWYgKGxhc3RfdHVubmVsKSB7Ci0gICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICIlcyAoaW5kZXg9JWx1KVxuIiwKKyAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLCAiJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbyAidSlcbiIsCiAgICAgICAgICAgICAgICAgICBsYXN0X3R1bm5lbC0+aWZuYW1lLCBsYXN0X3R1bm5lbC0+aWZpbmRleCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwgIk5PTkVcbiIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYwppbmRleCBiZDc4NGZjLi4xMTQ3ZWVmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jCkBAIC00LDYgKzQsMTIgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisvKiB3b3JrYXJvdW5kIGZvciBidWcgaW4gYXV0b2NvbmYgMi42MGIgYW5kIDIuNjEgKi8KKyNpZmRlZiBIQVZFX0dFVE1OVEVOVAorI3VuZGVmIEhBVkVfR0VUTU5URU5UCisjZGVmaW5lIEhBVkVfR0VUTU5URU5UIDEgLyogcHJldmlvdXNseSBtaWdodCBiZSBvbmx5ICIjZGVmaW5lIEhBVkVfR0VUTU5URU5UIiAqLworI2VuZGlmCisKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaWYgSEFWRV9TVERMSUJfSApAQCAtMTE3LDExICsxMjMsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTMwLDkgKzEzMiw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMTQwLDcgKzEzOSw3IEBACiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJkaXNrLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2lmIFVTSU5HX1VDRF9TTk1QX0VSUk9STUlCX01PRFVMRQogI2luY2x1ZGUgImVycm9ybWliLmgiCiAjZWxzZQpAQCAtMTcwLDEwICsxNjksOCBAQAogICAgIGludCAgICAgICAgICAgICBtaW5wZXJjZW50OwogfTsKIAotI2lmbmRlZiAgSU5UMzJfTUFYCi0jZGVmaW5lICBJTlQzMl9NQVggIDB4N2ZmZmZmZmYKLSNlbmRpZgotCisjZGVmaW5lIE1BWF9JTlRfMzIgMHg3ZmZmZmZmZgorI2RlZmluZSBNQVhfVUlOVF8zMiAweGZmZmZmZmZmCiAKIHVuc2lnbmVkIGludCAgICBudW1kaXNrczsKIGludCAgICAgICAgICAgICBhbGxEaXNrc0luY2x1ZGVkID0gMDsKQEAgLTE4MSwyMyArMTc4LDQyIEBACiBzdHJ1Y3QgZGlza3BhcnQgKmRpc2tzOwogCiBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfZGlza192YXJpYWJsZXNbXSA9IHsKLSAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtNSUJJTkRFWH19LAotICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STkFNRX19LAotICB7RElTS0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsCi0gICB7RElTS0RFVklDRX19LAotICB7RElTS01JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwKLSAgIHtESVNLTUlOSU1VTX19LAotICB7RElTS01JTlBFUkNFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwKLSAgIHtESVNLTUlOUEVSQ0VOVH19LAotICB7RElTS1RPVEFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUx9fSwKLSAge0RJU0tBVkFJTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMfX0sCi0gIHtESVNLVVNFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRUR9fSwKLSAge0RJU0tQRVJDRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsCi0gICB7RElTS1BFUkNFTlR9fSwKLSAge0RJU0tQRVJDRU5UTk9ERSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLAotICAge0RJU0tQRVJDRU5UTk9ERX19LAotICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUkZMQUd9fSwKLSAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STVNHfX0KKyAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7TUlCSU5ERVh9fSwKKyAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JOQU1FfX0sCisgIHtESVNLREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLREVWSUNFfX0sCisgIHtESVNLTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tNSU5JTVVNfX0sCisgIHtESVNLTUlOUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tNSU5QRVJDRU5UfX0sCisgIHtESVNLVE9UQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUx9fSwKKyAge0RJU0tBVkFJTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTH19LAorICB7RElTS1VTRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFRH19LAorICB7RElTS1BFUkNFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLUEVSQ0VOVH19LAorICB7RElTS1BFUkNFTlROT0RFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1BFUkNFTlROT0RFfX0sCisgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUkZMQUd9fSwKKyAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk1TR319LAorICAge0RJU0tUT1RBTExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMTE9XfX0sCisgICB7RElTS1RPVEFMSElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMSElHSH19LAorICAge0RJU0tBVkFJTExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMTE9XfX0sCisgICB7RElTS0FWQUlMSElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMSElHSH19LAorICAge0RJU0tVU0VETE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFRExPV319LAorICAge0RJU0tVU0VESElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRURISUdIfX0sCiB9OwogCiAvKgpAQCAtMjQzLDcgKzI1OSw2IEBACiBkaXNrX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKICNpZiBIQVZFX0ZTVEFCX0ggfHwgSEFWRV9HRVRNTlRFTlQgfHwgSEFWRV9TVEFURlMKLSAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKICAgY2hhciAgICAgICAgICAgIHBhdGhbU1RSTUFYXTsKICAgaW50ICAgICAgICAgICAgIG1pbnBlcmNlbnQ7CiAgIGludCAgICAgICAgICAgICBtaW5zcGFjZTsKQEAgLTI1MSwyMyArMjY2LDE5IEBACiAgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgewogICAgICAgaWYgKG1heGRpc2tzID09IDApIHsKICAgICAgICAgICBtYXhkaXNrcyA9IDUwOwotICAgICAgICAgIGRpc2tzID0gbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKW1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7CiAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKLSAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcywgMCwgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIG1heGRpc2tzICo9IDI7Ci0gICAgICAgICAgZGlza3MgPSByZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKilyZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7CiAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKLSAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcyArIG1heGRpc2tzLzIsIDAsIG1heGRpc2tzLzIgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CkBAIC0yODUsNyArMjk2LDcgQEAKICAgICogcmVhZCBvcHRpb25hbCBtaW5pbXVtIGRpc2sgdXNhZ2Ugc3BlYyAKICAgICovCiAgIGlmKGNwdHIgIT0gTlVMTCkgewotICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgPT0gMCkgeworICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgPT0gTlVMTCkgewogICAgICAgICAgIG1pbnNwYWNlID0gYXRvaShjcHRyKTsKICAgICAgICAgICBtaW5wZXJjZW50ID0gLTE7CiAgICAgICB9CkBAIC0zMTAsMjcgKzMyMSwyNCBAQAogZGlza19wYXJzZV9jb25maWdfYWxsKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewogI2lmIEhBVkVfRlNUQUJfSCB8fCBIQVZFX0dFVE1OVEVOVCB8fCBIQVZFX1NUQVRGUwotICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwogICBpbnQgICAgICAgICAgICAgbWlucGVyY2VudCA9IERJU0tNSU5QRVJDRU5UOwogICAgIAogICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKICAgICAgIGlmIChtYXhkaXNrcyA9PSAwKSB7CiAgICAgICAgICAgbWF4ZGlza3MgPSA1MDsKLSAgICAgICAgICBkaXNrcyA9IG1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKiltYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewogICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgY3B0cik7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgY3B0cik7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzLCAwLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgbWF4ZGlza3MgKj0gMjsKLSAgICAgICAgICBkaXNrcyA9IHJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKXJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcyArIG1heGRpc2tzLzIsIDAsIG1heGRpc2tzLzIgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CkBAIC0zNDAsNyArMzQ4LDcgQEAKICAgICogcmVhZCB0aGUgbWluaW11bSBkaXNrIHVzYWdlIHBlcmNlbnQKICAgICovCiAgIGlmKGNwdHIgIT0gTlVMTCkgewotICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgIT0gMCkgeworICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgIT0gTlVMTCkgewogICAgICAgICAgIG1pbnBlcmNlbnQgPSBhdG9pKGNwdHIpOwogICAgICAgfQogICB9CkBAIC0zNTIsOCArMzYwLDcgQEAKICAgICovCiAgIGlmKGFsbERpc2tzSW5jbHVkZWQpIHsKICAgICAgIGNvbmZpZ19wZXJyb3IoImluY2x1ZGVBbGxEaXNrcyBhbHJlYWR5IHNwZWNpZmllZC4iKTsKLSAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiBpbmNsdWRlQWxsRGlza3MgJXMiLCBjcHRyKTsKLSAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiBpbmNsdWRlQWxsRGlza3MgJXMiLCBjcHRyKTsKICAgfQogICBlbHNlIHsKICAgICAgIGFsbERpc2tzSW5jbHVkZWQgPSAxOwpAQCAtMzc2LDI0ICszODMsMTggQEAKICAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CiAgICAgICBpZiAobWF4ZGlza3MgPT0gMCkgewogICAgICAgICAgIG1heGRpc2tzID0gNTA7Ci0gICAgICAgICAgZGlza3MgPSBtYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKLSAgICAgICAgICAgICAgY2hhciB0bXBidWZbMTAyNF07Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBkZXZpY2UpOwotICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgZGV2aWNlKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MsIDAsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgICBtYXhkaXNrcyAqPSAyOwotICAgICAgICAgIGRpc2tzID0gcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewotICAgICAgICAgICAgICBjaGFyIHRtcGJ1ZlsxMDI0XTsKICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGRldmljZSk7Ci0gICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBkZXZpY2UpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcyArIG1heGRpc2tzLzIsIDAsIG1heGRpc2tzLzIgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CkBAIC00NjQsNyArNDY1LDcgQEAKICNpZiBkZWZpbmVkKEhBVkVfR0VUTU5URU5UKSB8fCBkZWZpbmVkKEhBVkVfRlNUQUJfSCkKICAgaW50IGR1bW15ID0gMDsKICNlbmRpZgotICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOworCiAgIC8qIAogICAgKiBmaW5kIHRoZSBkZXZpY2UgZm9yIHRoZSBwYXRoIGFuZCBjb3B5IHRoZSBkZXZpY2UgaW50byB0aGUKICAgICogc3RyaW5nIGRlY2xhcmVkIGFib3ZlIGFuZCBhdCB0aGUgZW5kIG9mIHRoZSByb3V0aW5lIHJldHVybiBpdApAQCAtNDc1LDggKzQ3Niw3IEBACiAjaWYgSEFWRV9TRVRNTlRFTlQKICAgbW50ZnAgPSBzZXRtbnRlbnQoRVRDX01OVFRBQiwgInIiKTsKICAgaWYgKCFtbnRmcCkgewotICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW4ndCBvcGVuICVzIChzZXRtbnRlbnQpXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlcyAoc2V0bW50ZW50KVxuIiwgRVRDX01OVFRBQik7CiAgICAgICByZXR1cm47CiAgIH0KICAgd2hpbGUgKG1udGZwICYmIE5VTEwgIT0gKG1udGVudCA9IGdldG1udGVudChtbnRmcCkpKSB7CkBAIC00OTMsOCArNDkzLDcgQEAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0bWVudGVudCBidXQgbm90IHNldG1udGVudCAqLwogICBtbnRmcCA9IGZvcGVuKEVUQ19NTlRUQUIsICJyIik7CiAgIGlmICghbW50ZnApIHsKLSAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2FuJ3Qgb3BlbiAlcyAoZm9wZW4pXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlcyAoZm9wZW4pXG4iLCBFVENfTU5UVEFCKTsKICAgICAgIHJldHVybjsKICAgfQogICB3aGlsZSAoKGkgPSBnZXRtbnRlbnQobW50ZnAsICZtbnR0YWIpKSA9PSAwKSB7CkBAIC01NDUsMTEgKzU0NCw4IEBACiAgICAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgZGV2aWNlIGZvciBkaXNrICVzIiwKLSAgICAgICAgICAgICBkaXNrc1tudW1kaXNrc10ucGF0aCk7Ci0gICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgIGNvbmZpZ19wd2Fybih0bXBidWYpOworICAgIG5ldHNubXBfY29uZmlnX3dhcm4oIkNvdWxkbid0IGZpbmQgZGV2aWNlIGZvciBkaXNrICVzIiwKKwkJCWRpc2tzW251bWRpc2tzXS5wYXRoKTsKICAgICBkaXNrc1tudW1kaXNrc10ubWluaW11bXNwYWNlID0gLTE7CiAgICAgZGlza3NbbnVtZGlza3NdLm1pbnBlcmNlbnQgPSAtMTsKICAgICBkaXNrc1tudW1kaXNrc10ucGF0aFswXSA9IDA7CkBAIC01NzIsMTEgKzU2OCw5IEBACiAgIEZJTEUgICAgICAgICAgICptbnRmcDsKICNlbGlmIEhBVkVfRlNUQUJfSAogICBzdHJ1Y3QgZnN0YWIgICAqZnN0YWI7Ci0gIHN0cnVjdCBzdGF0ICAgICBzdGF0MTsKICNlbGlmIEhBVkVfU1RBVEZTCiAgIHN0cnVjdCBzdGF0ZnMgICBzdGF0ZjsKICNlbmRpZgotICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwogICBzdGF0aWMgY2hhciAgICAgZGV2aWNlW1NUUk1BWF07CiAjaWYgZGVmaW5lZChIQVZFX0dFVE1OVEVOVCkgJiYgIWRlZmluZWQoSEFWRV9TRVRNTlRFTlQpCiAgIGludCAgICAgICAgICAgICBpOwpAQCAtNTk0LDggKzU4OCw3IEBACiAjaWYgSEFWRV9TRVRNTlRFTlQKICAgbW50ZnAgPSBzZXRtbnRlbnQoRVRDX01OVFRBQiwgInIiKTsKICAgaWYgKCFtbnRmcCkgewotICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW4ndCBvcGVuICVzIChzZXRtbnRlbnQpXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlcyAoc2V0bW50ZW50KVxuIiwgRVRDX01OVFRBQik7CiAgICAgICByZXR1cm4gTlVMTDsKICAgfQogICB3aGlsZSAobW50ZnAgJiYgTlVMTCAhPSAobW50ZW50ID0gZ2V0bW50ZW50KG1udGZwKSkpCkBAIC02MTMsOCArNjA2LDcgQEAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0bWVudGVudCBidXQgbm90IHNldG1udGVudCAqLwogICBtbnRmcCA9IGZvcGVuKEVUQ19NTlRUQUIsICJyIik7CiAgIGlmICghbW50ZnApIHsKLSAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2FuJ3Qgb3BlbiAlcyAoZm9wZW4pXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlcyAoZm9wZW4pXG4iLCBFVENfTU5UVEFCKTsKICAgICAgIHJldHVybiBOVUxMOwogICB9CiAgIHdoaWxlICgoaSA9IGdldG1udGVudChtbnRmcCwgJm1udHRhYikpID09IDApCkBAIC02MjksNyArNjIxLDYgQEAKICAgICBzdHJsY3B5KGRldmljZSwgbW50dGFiLm1udF9zcGVjaWFsLCBzaXplb2YoZGV2aWNlKSk7CiAjZW5kaWYgLyogSEFWRV9TRVRNTlRFTlQgKi8KICNlbGlmIEhBVkVfRlNUQUJfSAotICBzdGF0KHBhdGgsICZzdGF0MSk7CiAgIHNldGZzZW50KCk7CiAgIGlmICgoZnN0YWIgPSBnZXRmc2ZpbGUocGF0aCkpKQogICAgIHN0cmxjcHkoZGV2aWNlLCBmc3RhYi0+ZnNfc3BlYywgc2l6ZW9mKGRldmljZSkpOwpAQCAtNjQ4LDkgKzYzOSw3IEBACiAgIH0KICNlbmRpZgogICBlbHNlIHsKLSAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ291bGRuJ3QgZmluZCBkZXZpY2UgZm9yIGRpc2sgJXMiLAotCSAgICBwYXRoKTsKLSAgICBjb25maWdfcHdhcm4odG1wYnVmKTsKKyAgICBuZXRzbm1wX2NvbmZpZ193YXJuKCJDb3VsZG4ndCBmaW5kIGRldmljZSBmb3IgZGlzayAlcyIsIHBhdGgpOwogICB9CiAjZWxzZQogICBjb25maWdfcGVycm9yKCInZGlzaycgY2hlY2tzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIik7CkBAIC02NTksMzkgKzY0OCwzMyBAQAogfQogI2VuZGlmCiAKLQogLyoKLSAqIHZhcl9leHRlbnNpYmxlX2Rpc2soLi4uCi0gKiBBcmd1bWVudHM6Ci0gKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQotICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCi0gKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAotICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCi0gKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAotICogd3JpdGVfbWV0aG9kCi0gKiAKKyAqIFBhcnQgb2YgVUNELVNOTVAtTUlCOjpkc2tFbnRyeSwgd2hpY2ggaXMgc28gaGFyZCB0byBmaWxsIAorICogKGkuZS4gcGxhdGZvcm0gZGVwZW5kZW50IHBhcnRzKS4KICAqLwotdV9jaGFyICAgICAgICAgKgotdmFyX2V4dGVuc2libGVfZGlzayhzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoteworc3RydWN0IGRza19lbnRyeSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICBkc2tUb3RhbDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgIGRza1VzZWQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICBkc2tBdmFpbDsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGRza1BlcmNlbnQ7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBkc2tQZXJjZW50SW5vZGU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBkc2tFcnJvckZsYWc7Cit9OwogCi0gICAgaW50ICAgICAgICAgICAgIHBlcmNlbnQsIGlzZXJyb3I7Ci0gICAgdW5zaWduZWQgaW50ICAgIGRpc2tudW0gPSAwOwotI2lmICFkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkgJiYgIWRlZmluZWQoSEFWRV9TVEFURlMpCi0gICAgZG91YmxlICAgICAgICAgIHRvdGFsYmxrcywgZnJlZSwgdXNlZCwgYXZhaWwsIGF2YWlsYmxrczsKLSNlbHNlCi0gICAgc3RhdGljIGxvbmcgICAgIGF2YWlsOwotI2lmIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMpIHx8IGRlZmluZWQoU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUykKLSAgICBpbnQgICAgICAgICAgICAgcGVyY2VudF9pbm9kZTsKLSNlbmRpZgotI2VuZGlmCi0gICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwotICAgIHN0YXRpYyBjaGFyICAgICBlcnJtc2dbMzAwXTsKKy8qKgorICogRmlsbCBpbiB0aGUgcHJvdmlkZWQgZHNrX2VudHJ5IHN0cnVjdHVyZS4KKyAqIFJldHVybnMgLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAqLworCitzdGF0aWMgaW50CitmaWxsX2Rza19lbnRyeShpbnQgZGlza251bSwgc3RydWN0IGRza19lbnRyeSAqZW50cnkpCit7CisjaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpIHx8IGRlZmluZWQoSEFWRV9TVEFURlMpCiAgICAgZmxvYXQgICAgICAgICAgIG11bHRpcGxpZXI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfRlNUQUJfSCkgJiYgIWRlZmluZWQoSEFWRV9TWVNfU1RBVFZGU19IKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykKKyAgICBkb3VibGUgICAgICAgICAgdG90YWxibGtzLCBmcmVlLCB1c2VkLCBhdmFpbCwgYXZhaWxibGtzOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgfHwgZGVmaW5lZChIQVZFX1NUQVRGUykKICNpZmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCkBAIC03MTMsNiArNjk2LDEzNiBAQAogI2VuZGlmCiAjZW5kaWYKIAorICAgIGVudHJ5LT5kc2tQZXJjZW50SW5vZGUgPSAtMTsKKworI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSB8fCBkZWZpbmVkKEhBVkVfU1RBVEZTKQorI2lmZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKKyAgICBpZiAoc3RhdHZmcyhkaXNrc1tkaXNrbnVtXS5wYXRoLCAmZnNkKSA9PSAtMSkKKyNlbHNlCisgICAgaWYgKHN0YXR2ZnMoZGlza3NbZGlza251bV0ucGF0aCwgJnZmcykgPT0gLTEpCisjZW5kaWYKKyAgICB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBvcGVuIGRldmljZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKKyAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJzdGF0dmZzIGRldi9kaXNrIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjaWZkZWYgU1RBVF9TVEFURlNfRlNfREFUQQorICAgIHZmcy5mX2Jsb2NrcyA9IGZzZC5mZF9idG90OworICAgIHZmcy5mX2JmcmVlID0gZnNkLmZkX2JmcmVlOworICAgIHZmcy5mX2JhdmFpbCA9IGZzZC5mZF9iZnJlZW47CisgICAgdmZzLmZfYnNpemUgPSAxMDI0OyAgICAgICAgIC8qICBVbHRyaXggZl9ic2l6ZSBpcyBhIFZNIHBhcmFtZXRlciBhcHBhcmVudGx5LiAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9PRFMpCisgICAgdmZzLmZfYmxvY2tzID0gdmZzLmZfc3BhcmVbMF07CisgICAgdmZzLmZfYmZyZWUgPSB2ZnMuZl9zcGFyZVsxXTsKKyAgICB2ZnMuZl9iYXZhaWwgPSB2ZnMuZl9zcGFyZVsyXTsKKyNlbmRpZgorCisgICAgbXVsdGlwbGllciA9IChmbG9hdCl2ZnMuZl9ic2l6ZSAvIChmbG9hdCkxMDI0LjA7CisjaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQorICAgIGlmICh2ZnMuZl9mcnNpemUgPiAyNTUpCisgICAgICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpdmZzLmZfZnJzaXplIC8gKGZsb2F0KTEwMjQuMDsKKyNlbmRpZgorCisgICAgZW50cnktPmRza1RvdGFsID0gKHVuc2lnbmVkIGxvbmcgbG9uZykodmZzLmZfYmxvY2tzICogbXVsdGlwbGllcik7CisgICAgZW50cnktPmRza0F2YWlsID0gKHVuc2lnbmVkIGxvbmcgbG9uZykodmZzLmZfYmF2YWlsICogbXVsdGlwbGllcik7CisgICAgZW50cnktPmRza1VzZWQgPSAodW5zaWduZWQgbG9uZyBsb25nKSgodmZzLmZfYmxvY2tzIC0gdmZzLmZfYmZyZWUpICogbXVsdGlwbGllcik7CisKKyAgICBlbnRyeS0+ZHNrUGVyY2VudCA9IAorICAgICAgICB2ZnMuZl9ibG9ja3MgPT0gMCA/IDAgOgorICAgICAgICB2ZnMuZl9iYXZhaWwgPD0gMCA/IDEwMCA6CisgICAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfYmxvY2tzIC0gdmZzLmZfYmZyZWUpIC8KKyAgICAgICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9ibG9ja3MgLQorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZnMuZl9iZnJlZSAtIHZmcy5mX2JhdmFpbCkpICogMTAwLjAgKyAwLjUpOworCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMpIHx8IGRlZmluZWQgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkFWQUlMCisgICAgZW50cnktPmRza1BlcmNlbnRJbm9kZSA9IHZmcy5mX2ZhdmFpbCA8PSAwID8gMTAwIDoKKyAgICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9maWxlcyAtIHZmcy5mX2ZmcmVlKSAvCisgICAgICAgICAgICAgICAoZG91YmxlKSAodmZzLmZfZmlsZXMgLQorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZnMuZl9mZnJlZSAtIHZmcy5mX2ZhdmFpbCkpICogMTAwLjAgKyAwLjUpOworI2Vsc2UKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZJTEVTKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZGUkVFKQorICAgIGVudHJ5LT5kc2tQZXJjZW50SW5vZGUgPSB2ZnMuZl9maWxlcyA9PSAwID8gMTAwLjAgOgorICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9maWxlcyAtIHZmcy5mX2ZmcmVlKSAvCisgICAgICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9maWxlcykgKiAxMDAuMCArIDAuNSk7CisjZW5kaWYgCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMpICovCisKKyNlbGlmIEhBVkVfRlNUQUJfSAorICAgIC8qCisgICAgICogcmVhZCB0aGUgZGlzayBpbmZvcm1hdGlvbiAKKyAgICAgKi8KKyAgICBpZiAoKGZpbGUgPSBvcGVuKGRpc2tzW2Rpc2tudW1dLmRldmljZSwgMCkpIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3Qgb3BlbiBkZXZpY2UgJXNcbiIsCisgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7CisgICAgICAgIHNldFBlcnJvcnN0YXR1cygib3BlbiBkZXYvZGlzayIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGxzZWVrKGZpbGUsIChsb25nKSAoU0JMT0NLICogREVWX0JTSVpFKSwgMCk7CisgICAgaWYgKHJlYWQoZmlsZSwgKGNoYXIgKikgJmZpbGVzeXMsIFNCU0laRSkgIT0gU0JTSVpFKSB7CisgICAgICAgIHNldFBlcnJvcnN0YXR1cygib3BlbiBkZXYvZGlzayIpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXJyb3IgcmVhZGluZyBkZXZpY2UgJXNcbiIsCisgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7CisgICAgICAgIGNsb3NlKGZpbGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNsb3NlKGZpbGUpOworCisgICAgdG90YWxibGtzID0gZmlsZXN5cy5mc19kc2l6ZTsKKyAgICBmcmVlID0gZmlsZXN5cy5mc19jc3RvdGFsLmNzX25iZnJlZSAqIGZpbGVzeXMuZnNfZnJhZyArCisgICAgICAgIGZpbGVzeXMuZnNfY3N0b3RhbC5jc19uZmZyZWU7CisgICAgdXNlZCA9IHRvdGFsYmxrcyAtIGZyZWU7CisgICAgYXZhaWxibGtzID0gdG90YWxibGtzICogKDEwMCAtIGZpbGVzeXMuZnNfbWluZnJlZSkgLyAxMDA7CisgICAgYXZhaWwgPSBhdmFpbGJsa3MgPiB1c2VkID8gYXZhaWxibGtzIC0gdXNlZCA6IDA7CisgICAgZW50cnktPmRza1BlcmNlbnQgPQorICAgICAgICB0b3RhbGJsa3MgPT0gMCA/IDAgOgorICAgICAgICBhdmFpbGJsa3MgPT0gMCA/IDEwMCA6CisgICAgICAgIChpbnQpICgoZG91YmxlKSB1c2VkIC8gKGRvdWJsZSkgdG90YWxibGtzICogMTAwLjAgKyAwLjUpOworICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpZmlsZXN5cy5mc19mc2l6ZSAvIChmbG9hdCkxMDI0LjA7CisgICAgZW50cnktPmRza1RvdGFsID0gKHVuc2lnbmVkIGxvbmcgbG9uZykodG90YWxibGtzICogbXVsdGlwbGllcik7CisgICAgZW50cnktPmRza0F2YWlsID0gKHVuc2lnbmVkIGxvbmcgbG9uZykoYXZhaWwgKiBtdWx0aXBsaWVyKTsKKyAgICBlbnRyeS0+ZHNrVXNlZCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHVzZWQgKiBtdWx0aXBsaWVyKTsKKyNlbHNlCisgICAgLyogTWluR1cgKi8KKyAgICBlbnRyeS0+ZHNrUGVyY2VudCA9IDA7CisgICAgZW50cnktPmRza1RvdGFsID0gMDsKKyAgICBlbnRyeS0+ZHNrQXZhaWwgPSAwOworICAgIGVudHJ5LT5kc2tVc2VkID0gMDsKKyNlbmRpZgorCisgICAgZW50cnktPmRza0Vycm9yRmxhZyA9CisgICAgICAgIChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UgPj0gMAorICAgICAgICAgICAgPyBlbnRyeS0+ZHNrQXZhaWwgPCAodW5zaWduZWQgbG9uZyBsb25nKWRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZQorICAgICAgICAgICAgOiAxMDAgLSBlbnRyeS0+ZHNrUGVyY2VudCA8PSAodW5zaWduZWQgaW50KWRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQpID8gMSA6IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIHZhcl9leHRlbnNpYmxlX2Rpc2soLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKiAKKyAqLwordV9jaGFyICAgICAgICAgKgordmFyX2V4dGVuc2libGVfZGlzayhzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIGludCAgICAgICAgICAgICByZXQ7CisJdW5zaWduZWQgaW50CWRpc2tudW0gPSAwOworICAgIHN0cnVjdCBkc2tfZW50cnkgZW50cnk7CisgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OworICAgIHN0YXRpYyBjaGFyICAgICBlcnJtc2dbMzAwXTsKKwogdHJ5QWdhaW46CiAgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKICAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG51bWRpc2tzKSkKQEAgLTczNywxODkgKzg1MCw4MyBAQAogICAgICAgICBsb25nX3JldCA9IGRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQ7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CiAgICAgfQotI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSB8fCBkZWZpbmVkKEhBVkVfU1RBVEZTKQotI2lmZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKLSAgICBpZiAoc3RhdHZmcyhkaXNrc1tkaXNrbnVtXS5wYXRoLCAmZnNkKSA9PSAtMSkKLSNlbHNlCi0gICAgaWYgKHN0YXR2ZnMoZGlza3NbZGlza251bV0ucGF0aCwgJnZmcykgPT0gLTEpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBvcGVuIGRldmljZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKLSAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJzdGF0dmZzIGRldi9kaXNrIik7CisKKyAgICByZXQgPSBmaWxsX2Rza19lbnRyeShkaXNrbnVtLCAmZW50cnkpOworICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgIGlmICghZXhhY3QpCiAgICAgICAgICAgICBnb3RvIHRyeUFnYWluOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0jaWZkZWYgU1RBVF9TVEFURlNfRlNfREFUQQotICAgIHZmcy5mX2Jsb2NrcyA9IGZzZC5mZF9idG90OwotICAgIHZmcy5mX2JmcmVlID0gZnNkLmZkX2JmcmVlOwotICAgIHZmcy5mX2JhdmFpbCA9IGZzZC5mZF9iZnJlZW47Ci0gICAgdmZzLmZfYnNpemUgPSAxMDI0OyAgICAgICAgIC8qICBVbHRyaXggZl9ic2l6ZSBpcyBhIFZNIHBhcmFtZXRlciBhcHBhcmVudGx5LiAgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9PRFMpCi0gICAgdmZzLmZfYmxvY2tzID0gdmZzLmZfc3BhcmVbMF07Ci0gICAgdmZzLmZfYmZyZWUgPSB2ZnMuZl9zcGFyZVsxXTsKLSAgICB2ZnMuZl9iYXZhaWwgPSB2ZnMuZl9zcGFyZVsyXTsKLSNlbmRpZgotICAgIHBlcmNlbnQgPQotICAgICAgICB2ZnMuZl9ibG9ja3MgPT0gMCA/IDAgOgotICAgICAgICB2ZnMuZl9iYXZhaWwgPD0gMCA/IDEwMCA6Ci0gICAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfYmxvY2tzIC0gdmZzLmZfYmZyZWUpIC8KLSAgICAgICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9ibG9ja3MgLQotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZnMuZl9iZnJlZSAtIHZmcy5mX2JhdmFpbCkpICogMTAwLjAgKyAwLjUpOwotICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpdmZzLmZfYnNpemUgLyAoZmxvYXQpMTAyNC4wOwotI2lmZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQotICAgIGlmICh2ZnMuZl9mcnNpemUgPiAyNTUpCi0gICAgICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpdmZzLmZfZnJzaXplIC8gKGZsb2F0KTEwMjQuMDsKLSNlbmRpZgotICAgIGF2YWlsID0gKGxvbmcpKHZmcy5mX2JhdmFpbCAqIG11bHRpcGxpZXIpOwotICAgIGlzZXJyb3IgPSAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlID49IDAgPwotICAgICAgICAgICAgICAgdmZzLmZfYmF2YWlsIDwgKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZS9tdWx0aXBsaWVyKSA6Ci0gICAgICAgICAgICAgICAxMDAgLSBwZXJjZW50IDw9IGRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQpID8gMSA6IDA7Ci0jaWYgZGVmaW5lZChTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUykgfHwgZGVmaW5lZCBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZBVkFJTAotICAgIHBlcmNlbnRfaW5vZGUgPSB2ZnMuZl9mYXZhaWwgPD0gMCA/IDEwMCA6Ci0gICAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfZmlsZXMgLSB2ZnMuZl9mZnJlZSkgLwotICAgICAgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAodmZzLmZfZmZyZWUgLSB2ZnMuZl9mYXZhaWwpKSAqIDEwMC4wICsgMC41KTsKLSNlbHNlCi0jaWYgZGVmaW5lZChTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTKSAmJiBkZWZpbmVkKFNUUlVDVF9TVEFURlNfSEFTX0ZfRkZSRUUpCi0gICBwZXJjZW50X2lub2RlID0gdmZzLmZfZmlsZXMgPT0gMCA/IDEwMC4wIDoKLSAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfZmlsZXMgLSB2ZnMuZl9mZnJlZSkgLwotCSAgICAgICAgICAoZG91YmxlKSAodmZzLmZfZmlsZXMpICogMTAwLjAgKyAwLjUpOwotI2VuZGlmIAotI2VuZGlmIC8qIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMpICovIAorCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIERJU0tUT1RBTDoKLSAgICAgICAgaWYgKCB2ZnMuZl9ibG9ja3MgPiAoIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOworICAgICAgICBpZiAoZW50cnkuZHNrVG90YWwgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKSh2ZnMuZl9ibG9ja3MgKiBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKGVudHJ5LmRza1RvdGFsKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tUT1RBTExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tUb3RhbCAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1RPVEFMSElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tUb3RhbCA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICAgICAgCiAgICAgY2FzZSBESVNLQVZBSUw6Ci0gICAgICAgIGlmICggdmZzLmZfYmF2YWlsID4gKCBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKKyAgICAgICAgaWYgKGVudHJ5LmRza0F2YWlsID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykodmZzLmZfYmF2YWlsICogbXVsdGlwbGllcik7CisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKShlbnRyeS5kc2tBdmFpbCk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLQVZBSUxMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrQXZhaWwgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tBVkFJTEhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrQXZhaWwgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKICAgICBjYXNlIERJU0tVU0VEOgotICAgICAgICBpZiAoICh2ZnMuZl9ibG9ja3MgLSB2ZnMuZl9iZnJlZSkgPiAoIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOworICAgICAgICBpZiAoZW50cnkuZHNrVXNlZCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKCh2ZnMuZl9ibG9ja3MgLSB2ZnMuZl9iZnJlZSkgKiBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKGVudHJ5LmRza1VzZWQpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1VTRURMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrVXNlZCAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1VTRURISUdIOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1VzZWQgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKICAgICBjYXNlIERJU0tQRVJDRU5UOgotICAgICAgICBsb25nX3JldCA9IHBlcmNlbnQ7CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrUGVyY2VudDsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSNpZiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTKSB8fCBkZWZpbmVkIChTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTKQorCiAgICAgY2FzZSBESVNLUEVSQ0VOVE5PREU6Ci0gICAgICAgIGxvbmdfcmV0ID0gcGVyY2VudF9pbm9kZTsKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tQZXJjZW50SW5vZGU7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0jZW5kaWYKKwogICAgIGNhc2UgRVJST1JGTEFHOgotICAgICAgICBsb25nX3JldCA9IGlzZXJyb3I7CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrRXJyb3JGbGFnOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCiAgICAgY2FzZSBFUlJPUk1TRzoKLSAgICAgICAgaWYgKGlzZXJyb3IpIHsKKyAgICAgICAgaWYgKGVudHJ5LmRza0Vycm9yRmxhZykgewogICAgICAgICAgICAgaWYgKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSA+PSAwKQogICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCBmcmVlICg9ICVkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5wYXRoLCBkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBhdmFpbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBlbnRyeS5kc2tBdmFpbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkJSUgZnJlZSAoPSAlZCUlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5wYXRoLCBkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWVudHJ5LmRza1BlcmNlbnQpOwogICAgICAgICAgICAgZXJybXNnWyBzaXplb2YoZXJybXNnKS0xIF0gPSAwOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGVycm1zZ1swXSA9IDA7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoZXJybXNnKSk7CiAgICAgfQotI2Vsc2UKLSNpZiBIQVZFX0ZTVEFCX0gKLSAgICAvKgotICAgICAqIHJlYWQgdGhlIGRpc2sgaW5mb3JtYXRpb24gCi0gICAgICovCi0gICAgaWYgKChmaWxlID0gb3BlbihkaXNrc1tkaXNrbnVtXS5kZXZpY2UsIDApKSA8IDApIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IG9wZW4gZGV2aWNlICVzXG4iLAotICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOwotICAgICAgICBzZXRQZXJyb3JzdGF0dXMoIm9wZW4gZGV2L2Rpc2siKTsKLSAgICAgICAgaWYgKCFleGFjdCkKLSAgICAgICAgICAgIGdvdG8gdHJ5QWdhaW47Ci0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotICAgIGxzZWVrKGZpbGUsIChsb25nKSAoU0JMT0NLICogREVWX0JTSVpFKSwgMCk7Ci0gICAgaWYgKHJlYWQoZmlsZSwgKGNoYXIgKikgJmZpbGVzeXMsIFNCU0laRSkgIT0gU0JTSVpFKSB7Ci0gICAgICAgIHNldFBlcnJvcnN0YXR1cygib3BlbiBkZXYvZGlzayIpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXJyb3IgcmVhZGluZyBkZXZpY2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7Ci0gICAgICAgIGNsb3NlKGZpbGUpOwotICAgICAgICBpZiAoIWV4YWN0KQotICAgICAgICAgICAgZ290byB0cnlBZ2FpbjsKLSAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0gICAgY2xvc2UoZmlsZSk7Ci0gICAgdG90YWxibGtzID0gZmlsZXN5cy5mc19kc2l6ZTsKLSAgICBmcmVlID0gZmlsZXN5cy5mc19jc3RvdGFsLmNzX25iZnJlZSAqIGZpbGVzeXMuZnNfZnJhZyArCi0gICAgICAgIGZpbGVzeXMuZnNfY3N0b3RhbC5jc19uZmZyZWU7Ci0gICAgdXNlZCA9IHRvdGFsYmxrcyAtIGZyZWU7Ci0gICAgYXZhaWxibGtzID0gdG90YWxibGtzICogKDEwMCAtIGZpbGVzeXMuZnNfbWluZnJlZSkgLyAxMDA7Ci0gICAgYXZhaWwgPSBhdmFpbGJsa3MgPiB1c2VkID8gYXZhaWxibGtzIC0gdXNlZCA6IDA7Ci0gICAgcGVyY2VudCA9Ci0gICAgICAgIHRvdGFsYmxrcyA9PSAwID8gMCA6Ci0gICAgICAgIGF2YWlsYmxrcyA9PSAwID8gMTAwIDoKLSAgICAgICAgKGludCkgKChkb3VibGUpIHVzZWQgLyAoZG91YmxlKSB0b3RhbGJsa3MgKiAxMDAuMCArIDAuNSk7Ci0gICAgbXVsdGlwbGllciA9IChmbG9hdClmaWxlc3lzLmZzX2ZzaXplIC8gKGZsb2F0KTEwMjQuMDsKLSAgICBpc2Vycm9yID0KLSAgICAgICAgKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSA+PSAwCi0gICAgICAgICAgICA/IGF2YWlsICogbXVsdGlwbGllciA8IGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZQotICAgICAgICAgICAgOiAxMDAgLSBwZXJjZW50IDw9IGRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQpID8gMSA6IDA7Ci0gICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIERJU0tUT1RBTDoKLSAgICAgICAgaWYgKCB0b3RhbGJsa3MgPiAoIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKSh0b3RhbGJsa3MgKiBtdWx0aXBsaWVyKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSAgICBjYXNlIERJU0tBVkFJTDoKLSAgICAgICAgaWYgKCBhdmFpbCA+ICggSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKGF2YWlsICogbXVsdGlwbGllcik7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0gICAgY2FzZSBESVNLVVNFRDoKLSAgICAgICAgaWYgKCB1c2VkID4gKCAgSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKHVzZWQgKiBtdWx0aXBsaWVyKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSAgICBjYXNlIERJU0tQRVJDRU5UOgotICAgICAgICBsb25nX3JldCA9IHBlcmNlbnQ7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0gICAgY2FzZSBFUlJPUkZMQUc6Ci0gICAgICAgIGxvbmdfcmV0ID0gaXNlcnJvcjsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSAgICBjYXNlIEVSUk9STVNHOgotICAgICAgICBpZiAoaXNlcnJvcikgewotICAgICAgICAgICAgaWYgKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSA+PSAwKQotICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCBmcmVlICg9ICVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5wYXRoLCBkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbCAqIGZpbGVzeXMuZnNfZnNpemUgLyAxMDI0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQlJSBmcmVlICg9ICVkJSUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLnBhdGgsIGRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50KTsKLSAgICAgICAgICAgIGVycm1zZ1sgc2l6ZW9mKGVycm1zZyktMSBdID0gMDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlcnJtc2dbMF0gPSAwOwotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKGVycm1zZykpOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCiAgICAgcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgKaW5kZXggNmJjNWIxNC4uMjBlOTMzMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaApAQCAtNyw3ICs3LDcgQEAKIAogdm9pZCAgICAgICAgICAgIGluaXRfZGlzayh2b2lkKTsKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIAogICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfZXh0ZW5zaWJsZV9kaXNrOwogCkBAIC0yMSw1ICsyMSwxMSBAQAogI2RlZmluZSBESVNLVVNFRCA4CiAjZGVmaW5lIERJU0tQRVJDRU5UIDkKICNkZWZpbmUgRElTS1BFUkNFTlROT0RFIDEwCisjZGVmaW5lIERJU0tUT1RBTExPVyAxMQorI2RlZmluZSBESVNLVE9UQUxISUdIIDEyCisjZGVmaW5lIERJU0tBVkFJTExPVyAxMworI2RlZmluZSBESVNLQVZBSUxISUdIIDE0CisjZGVmaW5lIERJU0tVU0VETE9XIDE1CisjZGVmaW5lIERJU0tVU0VESElHSCAxNgogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9ESVNLX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTM3NjEwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogZGlza19ody5jCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKworI2luY2x1ZGUgInN0cnVjdC5oIgorI2luY2x1ZGUgImRpc2suaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKKyNpZiBVU0lOR19VQ0RfU05NUF9FUlJPUk1JQl9NT0RVTEUKKyNpbmNsdWRlICJlcnJvcm1pYi5oIgorI2Vsc2UKKyNkZWZpbmUgc2V0UGVycm9yc3RhdHVzKHgpIHNubXBfbG9nX3BlcnJvcih4KQorI2VuZGlmCisKKy8qCisgKiAgKiBjb25maWcgZmlsZSBwYXJzaW5nIHJvdXRpbmVzCisgKiAgICovCitzdGF0aWMgdm9pZCAgICAgICBkaXNrX2ZyZWVfY29uZmlnKHZvaWQpOworc3RhdGljIHZvaWQgICAgICAgZGlza19wYXJzZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOworc3RhdGljIHZvaWQgICAgICAgZGlza19wYXJzZV9jb25maWdfYWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKworc3RhdGljIG5ldHNubXBfZnN5c19pbmZvICoqIF9leHBhbmRfZGlza19hcnJheSggY2hhciAqY3B0ciApOworCisjZGVmaW5lIE1BWF9JTlRfMzIgMHg3ZmZmZmZmZgorI2RlZmluZSBNQVhfVUlOVF8zMiAweGZmZmZmZmZmCisKK2ludCAgICAgICAgICAgICBudW1kaXNrczsKK2ludCAgICAgICAgICAgICBhbGxEaXNrc0luY2x1ZGVkID0gMDsKK2ludCAgICAgICAgICAgICBtYXhkaXNrcyA9IDA7CituZXRzbm1wX2ZzeXNfaW5mbyAqKmRpc2tzID0gTlVMTDsKKworc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX2Rpc2tfdmFyaWFibGVzW10gPSB7CisgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge01JQklOREVYfX0sCisgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STkFNRX19LAorICB7RElTS0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0RFVklDRX19LAorICB7RElTS01JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLTUlOSU1VTX19LAorICB7RElTS01JTlBFUkNFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLTUlOUEVSQ0VOVH19LAorICB7RElTS1RPVEFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMfX0sCisgIHtESVNLQVZBSUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUx9fSwKKyAge0RJU0tVU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRUR9fSwKKyAge0RJU0tQRVJDRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1BFUkNFTlR9fSwKKyAge0RJU0tQRVJDRU5UTk9ERSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tQRVJDRU5UTk9ERX19LAorICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JGTEFHfX0sCisgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JNU0d9fSwKKyAgIHtESVNLVE9UQUxMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTExPV319LAorICAge0RJU0tUT1RBTEhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTEhJR0h9fSwKKyAgIHtESVNLQVZBSUxMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTExPV319LAorICAge0RJU0tBVkFJTEhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTEhJR0h9fSwKKyAgIHtESVNLVVNFRExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRURMT1d9fSwKKyAgIHtESVNLVVNFREhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VESElHSH19LAorfTsKKworLyoKKyAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQorICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKKyAqLworb2lkICAgICAgICAgICAgIGRpc2tfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCBORVRTTk1QX0RJU0tNSUJOVU0sIDEgfTsKKwordm9pZAoraW5pdF9kaXNrX2h3KHZvaWQpCit7CisgIC8qCisgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIAorICAgKi8KKyAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9kaXNrIiwgZXh0ZW5zaWJsZV9kaXNrX3ZhcmlhYmxlcywgdmFyaWFibGUyLAorCSAgICAgICBkaXNrX3ZhcmlhYmxlc19vaWQpOworCisgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkaXNrIiwgZGlza19wYXJzZV9jb25maWcsCisJCQkJZGlza19mcmVlX2NvbmZpZywKKwkJCQkicGF0aCBbIG1pbnNwYWNlIHwgbWlucGVyY2VudCUgXSIpOworICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiaW5jbHVkZUFsbERpc2tzIiwgZGlza19wYXJzZV9jb25maWdfYWxsLAorCQkJCWRpc2tfZnJlZV9jb25maWcsCisJCQkJIm1pbnBlcmNlbnQlIik7CisgIGFsbERpc2tzSW5jbHVkZWQgPSAwOworfQorCitzdGF0aWMgdm9pZAorZGlza19mcmVlX2NvbmZpZyh2b2lkKQoreworICBuZXRzbm1wX2ZzeXNfaW5mbyAqZW50cnk7CisKKyAgZm9yICggZW50cnkgID0gbmV0c25tcF9mc3lzX2dldF9maXJzdCgpOworICAgICAgICBlbnRyeSAhPSBOVUxMOworICAgICAgICBlbnRyeSAgPSBuZXRzbm1wX2ZzeXNfZ2V0X25leHQoIGVudHJ5ICkpIHsKKworICAgICAgZW50cnktPm1pbnNwYWNlICAgPSAtMTsKKyAgICAgIGVudHJ5LT5taW5wZXJjZW50ID0gLTE7CisgICAgICBlbnRyeS0+ZmxhZ3MgICAgICY9IH5ORVRTTk1QX0ZTX0ZMQUdfVUNEOworICB9CisgIGlmIChkaXNrcykgeworICAgICBmcmVlKCBkaXNrcyApOworICAgICBkaXNrcyA9IE5VTEw7CisgICAgIG1heGRpc2tzID0gbnVtZGlza3MgPSAwOworICB9CisgIGFsbERpc2tzSW5jbHVkZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCAKK2Rpc2tfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICBjaGFyICAgICAgICAgICAgcGF0aFtTVFJNQVhdOworICBpbnQgICAgICAgICAgICAgbWlucGVyY2VudDsKKyAgaW50ICAgICAgICAgICAgIG1pbnNwYWNlOworICBuZXRzbm1wX2ZzeXNfaW5mbyAqZW50cnk7CisKKyAgLyoKKyAgICogRW5zdXJlIHRoZXJlIGlzIHNwYWNlIGZvciB0aGUgbmV3IGVudHJ5CisgICAqLworICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKKyAgICAgIGlmICghX2V4cGFuZF9kaXNrX2FycmF5KCBjcHRyICkpIAorICAgICAgICAgIHJldHVybjsKKyAgfQorCisgIC8qCisgICAqIHJlYWQgZGlzayBwYXRoIChlZywgLzEgb3IgL3VzcikgCisgICAqLworICBjb3B5X253b3JkKGNwdHIsIHBhdGgsIHNpemVvZihwYXRoKSk7CisgIGNwdHIgPSBza2lwX25vdF93aGl0ZShjcHRyKTsKKyAgY3B0ciA9IHNraXBfd2hpdGUoY3B0cik7CisJCisgIC8qCisgICAqIHJlYWQgb3B0aW9uYWwgbWluaW11bSBkaXNrIHVzYWdlIHNwZWMgCisgICAqLworICBpZihjcHRyICE9IE5VTEwpIHsKKyAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpID09IE5VTEwpIHsKKyAgICAgICAgICBtaW5zcGFjZSA9IGF0b2koY3B0cik7CisgICAgICAgICAgbWlucGVyY2VudCA9IC0xOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgICAgbWluc3BhY2UgPSAtMTsKKyAgICAgICAgICBtaW5wZXJjZW50ID0gYXRvaShjcHRyKTsKKyAgICAgIH0KKyAgfSBlbHNlIHsKKyAgICAgIG1pbnNwYWNlID0gTkVUU05NUF9ERUZESVNLTUlOSU1VTVNQQUNFOworICAgICAgbWlucGVyY2VudCA9IC0xOworICB9CisKKyAgLyoKKyAgICogY2hlY2sgaWYgdGhlIGRpc2sgYWxyZWFkeSBleGlzdHMsIGlmIHNvIHRoZW4gbW9kaWZ5IGl0cworICAgKiBwYXJhbWV0ZXJzLiBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGFkZCBpdAorICAgKi8KKyAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggcGF0aCwgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICBpZiAoIGVudHJ5ICkgeworICAgICAgZW50cnktPm1pbnNwYWNlICAgPSBtaW5zcGFjZTsKKyAgICAgIGVudHJ5LT5taW5wZXJjZW50ID0gbWlucGVyY2VudDsKKyAgICAgIGVudHJ5LT5mbGFncyAgICAgfD0gTkVUU05NUF9GU19GTEFHX1VDRDsKKyAgICAgIGRpc2tzW251bWRpc2tzKytdID0gZW50cnk7CisgIH0KK30KKworc3RhdGljIHZvaWQgCitkaXNrX3BhcnNlX2NvbmZpZ19hbGwoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgIGludCAgICAgICAgICAgICBtaW5wZXJjZW50ID0gRElTS01JTlBFUkNFTlQ7CisgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKyAgICAKKyAgLyoKKyAgICogcmVhZCB0aGUgbWluaW11bSBkaXNrIHVzYWdlIHBlcmNlbnQKKyAgICovCisgIGlmKGNwdHIgIT0gTlVMTCkgeworICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgIT0gTlVMTCkgeworICAgICAgICAgIG1pbnBlcmNlbnQgPSBhdG9pKGNwdHIpOworICAgICAgfQorICB9CisgIC8qCisgICAqIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoZSAiaW5jbHVkZUFsbERpc2tzIiBkaXJlY3RpdmUKKyAgICogdGhlbiBzZWFyY2ggZm9yIHRoZSBkaXNrIGluIHRoZSAiZGlza3MiIGFycmF5IGFuZCBtb2RpZnkKKyAgICogdGhlIHZhbHVlcy4gaWYgd2UgaGF2ZW50IHNlZW4gdGhlICJpbmNsdWRlQWxsRGlza3MiCisgICAqIGRpcmVjdGl2ZSB0aGVuIGluY2x1ZGUgdGhpcyBkaXNrCisgICAqLworICBpZihhbGxEaXNrc0luY2x1ZGVkKSB7CisgICAgICBjb25maWdfcGVycm9yKCJpbmNsdWRlQWxsRGlza3MgYWxyZWFkeSBzcGVjaWZpZWQuIik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogaW5jbHVkZUFsbERpc2tzICVzIiwgY3B0cik7CisgIH0KKyAgZWxzZSB7CisKKyAgICAgIG5ldHNubXBfZnN5c19sb2FkKCBOVUxMLCBOVUxMICk7ICAvKiBQcmltZSB0aGUgZnN5cyBIL1cgbW9kdWxlICovCisgICAgICBmb3IgKCBlbnRyeSAgPSBuZXRzbm1wX2ZzeXNfZ2V0X2ZpcnN0KCk7CisgICAgICAgICAgICBlbnRyeSAhPSBOVUxMOworICAgICAgICAgICAgZW50cnkgID0gbmV0c25tcF9mc3lzX2dldF9uZXh0KCBlbnRyeSApKSB7CisKKyAgICAgICAgICBpZiAoICEoZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX0FDVElWRSApKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBlbnRyeS0+bWluc3BhY2UgICA9IC0xOworICAgICAgICAgIGVudHJ5LT5taW5wZXJjZW50ID0gbWlucGVyY2VudDsKKyAgICAgICAgICBlbnRyeS0+ZmxhZ3MgICAgIHw9IE5FVFNOTVBfRlNfRkxBR19VQ0Q7CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBFbnN1cmUgdGhlcmUgaXMgc3BhY2UgZm9yIHRoZSBuZXcgZW50cnkKKyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKKyAgICAgICAgICAgICAgaWYgKCFfZXhwYW5kX2Rpc2tfYXJyYXkoIGVudHJ5LT5kZXZpY2UgKSkgCisgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIGRpc2tzW251bWRpc2tzKytdID0gZW50cnk7CisgICAgICB9CisgICAgICBhbGxEaXNrc0luY2x1ZGVkID0gMTsKKyAgfQorfQorCisKK3N0YXRpYyBpbnQgX3BlcmNlbnQoIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsICkgeworICAgIGZsb2F0IHY9dmFsdWUsIHQ9dG90YWwsIHBjdDsKKworICAgIC8qIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gKi8KKyAgICBpZiAodG90YWwgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwY3QgID0gKHYqMTAwKS90OyAgIC8qIENhbGN1bGF0ZSBwZXJjZW50YWdlIHVzaW5nIGZsb2F0aW5nIHBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcml0aG1ldGljLCB0byBhdm9pZCBvdmVyZmxvdyBlcnJvcnMgKi8KKyAgICBwY3QgKz0gMC41OyAgICAgICAgIC8qIHJvdW5kaW5nICovCisgICAgcmV0dXJuIChpbnQpcGN0OworfQorCitzdGF0aWMgbmV0c25tcF9mc3lzX2luZm8gKioKK19leHBhbmRfZGlza19hcnJheSggY2hhciAqY3B0ciApIHsKKworICAgIGlmICggbWF4ZGlza3MgPT0gMCApCisgICAgICAgIG1heGRpc2tzICA9IDUwOworICAgIGVsc2UKKyAgICAgICAgbWF4ZGlza3MgKj0gMjsKKworICAgIGRpc2tzID0gcmVhbGxvYyggZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKCBuZXRzbm1wX2ZzeXNfaW5mbyopKTsKKyAgICBpZiAoIWRpc2tzKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAlcyIsIGNwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIG1heGRpc2tzID09IDUwICkKKyAgICAgICAgbWVtc2V0KGRpc2tzLCAgICAgICAgICAgICAgMCwgIG1heGRpc2tzICAgKiBzaXplb2YoIG5ldHNubXBfZnN5c19pbmZvKikpOworICAgIGVsc2UKKyAgICAgICAgbWVtc2V0KGRpc2tzICsgbWF4ZGlza3MvMiwgMCwgIG1heGRpc2tzLzIgKiBzaXplb2YoIG5ldHNubXBfZnN5c19pbmZvKikpOworCisgICAgcmV0dXJuIGRpc2tzOworfQorCisKKy8qCisgKiB2YXJfZXh0ZW5zaWJsZV9kaXNrKC4uLgorICogQXJndW1lbnRzOgorICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKKyAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKKyAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAorICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKKyAqIHdyaXRlX21ldGhvZAorICogCisgKi8KK3VfY2hhciAgICAgICAgICoKK3Zhcl9leHRlbnNpYmxlX2Rpc2soc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZGlza251bSA9IDA7CisgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKKyAgICBzdGF0aWMgY2hhciAgICAgZXJybXNnWzMwMF07CisgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlOworCisgICAgLyogVXBkYXRlIHRoZSBmc3lzIEgvVyBtb2R1bGUgKi8KKyAgICBjYWNoZSA9IG5ldHNubXBfZnN5c19nZXRfY2FjaGUoKTsKKyAgICBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQoY2FjaGUpOworCit0cnlBZ2FpbjoKKyAgICBpZiAoaGVhZGVyX3NpbXBsZV90YWJsZQorICAgICAgICAodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCwgbnVtZGlza3MpKQorICAgICAgICByZXR1cm4gKE5VTEwpOworICAgIGRpc2tudW0gPSBuYW1lWypsZW5ndGggLSAxXSAtIDE7CisgICAgZW50cnkgPSBkaXNrc1tkaXNrbnVtXTsKKyAgICBpZiAoICFlbnRyeSApIHsKKyAgICAgICAgaWYgKCFleGFjdCB8fCAhKGVudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19VQ0QpKQorICAgICAgICAgICAgZ290byB0cnlBZ2FpbjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIE1JQklOREVYOgorICAgICAgICBsb25nX3JldCA9IGRpc2tudW0gKyAxOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRVJST1JOQU1FOiAgICAgICAgICAgIC8qIERJU0tQQVRIICovCisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVudHJ5LT5wYXRoKTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopZW50cnktPnBhdGgpOworICAgIGNhc2UgRElTS0RFVklDRToKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZW50cnktPmRldmljZSk7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKWVudHJ5LT5kZXZpY2UpOworICAgIGNhc2UgRElTS01JTklNVU06CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnktPm1pbnNwYWNlOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS01JTlBFUkNFTlQ6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnktPm1pbnBlcmNlbnQ7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIERJU0tUT1RBTDoKKyAgICAgICAgdmFsID0gbmV0c25tcF9mc3lzX3NpemVfdWxsKGVudHJ5KTsKKyAgICAgICAgaWYgKHZhbCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpdmFsOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1RPVEFMTE9XOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c19zaXplX3VsbChlbnRyeSkgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tUT1RBTEhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX3NpemVfdWxsKGVudHJ5KSA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICAgICAgCisgICAgY2FzZSBESVNLQVZBSUw6CisgICAgICAgIHZhbCA9IG5ldHNubXBfZnN5c19hdmFpbF91bGwoZW50cnkpOworICAgICAgICBpZiAodmFsID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZyl2YWw7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLQVZBSUxMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChlbnRyeSkgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tBVkFJTEhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChlbnRyeSkgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIERJU0tVU0VEOgorICAgICAgICB2YWwgPSBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoZW50cnkpOworICAgICAgICBpZiAodmFsID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZyl2YWw7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVVNFRExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoZW50cnkpICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVVNFREhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX3VzZWRfdWxsKGVudHJ5KSA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRElTS1BFUkNFTlQ6CisgICAgICAgIGxvbmdfcmV0ID0gX3BlcmNlbnQoIGVudHJ5LT51c2VkLCBlbnRyeS0+c2l6ZSApOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBESVNLUEVSQ0VOVE5PREU6CisgICAgICAgIGxvbmdfcmV0ID0gX3BlcmNlbnQoIGVudHJ5LT5pbnVtc190b3RhbCAtIGVudHJ5LT5pbnVtc19hdmFpbCwgZW50cnktPmludW1zX3RvdGFsICk7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIEVSUk9SRkxBRzoKKyAgICAgICAgbG9uZ19yZXQgPSAwOworICAgICAgICB2YWwgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGVudHJ5KTsKKyAgICAgICAgaWYgKCggZW50cnktPm1pbnNwYWNlID49IDAgKSAmJgorICAgICAgICAgICAgKCB2YWwgPCBlbnRyeS0+bWluc3BhY2UgKSkKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoKCBlbnRyeS0+bWlucGVyY2VudCA+PSAwICkgJiYKKyAgICAgICAgICAgICAgICAgKF9wZXJjZW50KCBlbnRyeS0+YXZhaWwsIGVudHJ5LT5zaXplICkgPCBlbnRyeS0+bWlucGVyY2VudCApKQorICAgICAgICAgICAgbG9uZ19yZXQgPSAxOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBFUlJPUk1TRzoKKyAgICAgICAgZXJybXNnWzBdID0gMDsKKyAgICAgICAgdmFsID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChlbnRyeSk7CisgICAgICAgIGlmICgoIGVudHJ5LT5taW5zcGFjZSA+PSAwICkgJiYKKyAgICAgICAgICAgICggdmFsIDwgZW50cnktPm1pbnNwYWNlICkpCisgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkIGZyZWUgKD0gJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYXRoLCBlbnRyeS0+bWluc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YWwpOworICAgICAgICBlbHNlIGlmICgoIGVudHJ5LT5taW5wZXJjZW50ID49IDAgKSAmJgorICAgICAgICAgICAgICAgICAoX3BlcmNlbnQoIGVudHJ5LT5hdmFpbCwgZW50cnktPnNpemUgKSA8IGVudHJ5LT5taW5wZXJjZW50ICkpCisgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkJSUgZnJlZSAoPSAlZCUlKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGF0aCwgZW50cnktPm1pbnBlcmNlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBfcGVyY2VudCggZW50cnktPmF2YWlsLCBlbnRyeS0+c2l6ZSApKTsKKyAgICAgICAgZXJybXNnWyBzaXplb2YoZXJybXNnKS0xIF0gPSAwOworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKGVycm1zZykpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQyZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgVGVtcGxhdGUgTUlCIGdyb3VwIGludGVyZmFjZSAtIGRpc2suaAorICoKKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfRElTS19IV19ICisjZGVmaW5lIF9NSUJHUk9VUF9ESVNLX0hXX0gKKwordm9pZCAgICAgICAgICAgIGluaXRfZGlza19odyh2b2lkKTsKKworY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cykKKworICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfZXh0ZW5zaWJsZV9kaXNrOworCisjaW5jbHVkZSAibWliZGVmcy5oIgorCisjZGVmaW5lIERJU0tERVZJQ0UgMworI2RlZmluZSBESVNLTUlOSU1VTSA0CisjZGVmaW5lIERJU0tNSU5QRVJDRU5UIDUKKyNkZWZpbmUgRElTS1RPVEFMIDYKKyNkZWZpbmUgRElTS0FWQUlMIDcKKyNkZWZpbmUgRElTS1VTRUQgOAorI2RlZmluZSBESVNLUEVSQ0VOVCA5CisjZGVmaW5lIERJU0tQRVJDRU5UTk9ERSAxMAorI2RlZmluZSBESVNLVE9UQUxMT1cgMTEKKyNkZWZpbmUgRElTS1RPVEFMSElHSCAxMgorI2RlZmluZSBESVNLQVZBSUxMT1cgMTMKKyNkZWZpbmUgRElTS0FWQUlMSElHSCAxNAorI2RlZmluZSBESVNLVVNFRExPVyAxNQorI2RlZmluZSBESVNLVVNFREhJR0ggMTYKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfRElTS19IV19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jCmluZGV4IDA4ZWYzZjEuLjRlYTg5ODcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jCkBAIC0yNSwxMyArMjUsMTMgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaW5jbHVkZSA8bWF0aC5oPgorCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogCi0vKgotICogaGVhZGVyX2dlbmVyaWMoKSBjb21lcyBmcm9tIGhlcmUgCi0gKi8KLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAKIC8qCiAgKiBpbmNsdWRlIG91ciAuaCBmaWxlIApAQCAtNTIsMjcgKzUyLDM0IEBACiBzdGF0aWMgaW50ICAgICAgY2FjaGVfZGlza25yID0gLTE7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvbGFyaXMyICovCiAKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIC8qCiAgKiBoYW5kbGUgZGlzayBzdGF0aXN0aWNzIHZpYSBsaWJwZXJmc3RhdAogICovCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiBzdGF0aWMgcGVyZnN0YXRfZGlza190ICpwc19kaXNrOwkvKiBzdG9yYWdlIGZvciBhbGwgZGlzayB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgcHNfbnVtZGlza3M7CQkJLyogbnVtYmVyIG9mIGRpc2tzIGluIHN5c3RlbSwgbWF5IGNoYW5nZSB3aGlsZSBydW5uaW5nICovCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoYnNkaTMpIHx8IGRlZmluZWQoYnNkaTQpCisjaWYgZGVmaW5lZChic2RpMykgfHwgZGVmaW5lZChic2RpNCkgfHwgZGVmaW5lZChvcGVuYnNkNCkKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaWZkZWYgb3BlbmJzZDQKKyNpbmNsdWRlIDxzeXMvZGlzay5oPgorI2Vsc2UKICNpbmNsdWRlIDxzeXMvZGlza3N0YXRzLmg+CisjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnNkaSAqLwogCi0jaWYgZGVmaW5lZCAoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpCisjaWYgZGVmaW5lZChIQVZFX0dFVERFVlMpIHx8IGRlZmluZWQoSEFWRV9ERVZTVEFUX0dFVERFVlMpCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTAxCisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4gICAgICAgLyogZm9yIENQVVNUQVRFUyBpbiBkZXZzdGF0LmggKi8KLSNlbGlmICFkZWZpbmVkKGRyYWdvbmZseSkKKyNlbGlmIEhBVkVfU1lTX0RLU1RBVF9ICiAjaW5jbHVkZSA8c3lzL2Rrc3RhdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8ZGV2c3RhdC5oPgpAQCAtODQsMTIgKzkxLDE3IEBACiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZWJzZCAqLwogCi0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgI2RlZmluZSBHRVRERVZTKHgpIGRldnN0YXRfZ2V0ZGV2cyhOVUxMLCAoeCkpCiAjZWxzZQogICAjZGVmaW5lIEdFVERFVlMoeCkgZ2V0ZGV2cygoeCkpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQgKGxpbnV4KQorI2RlZmluZSBESVNLSU9fU0FNUExFX0lOVEVSVkFMIDUKK3ZvaWQgZGV2bGFfZ2V0c3RhdHModW5zaWduZWQgaW50IHJlZ25vLCB2b2lkICogZHVtbXkpOworI2VuZGlmIC8qIGxpbnV4ICovCisKICNpZiBkZWZpbmVkIChkYXJ3aW4pCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNpbmNsdWRlIDxJT0tpdC9JT0tpdExpYi5oPgpAQCAtMTAwLDE0ICsxMTIsMjAgQEAKIHN0YXRpYyBtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0OwkJLyogdG8gY29tbXVuaWNhdGUgd2l0aCBJL08gS2l0CSovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhcndpbiAqLwogCi12b2lkICAgICAgICAgICAgZGlza2lvX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7CisjaWYgIWRlZmluZWQoc29sYXJpczIpICYmICEoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkKK3N0YXRpYyBpbnQgICAgICBnZXRzdGF0cyh2b2lkKTsKKyNlbmRpZgogCi0jaWYgZGVmaW5lZCAoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpCisjaWYgZGVmaW5lZCAoSEFWRV9HRVRERVZTKSB8fCBkZWZpbmVkKEhBVkVfREVWU1RBVF9HRVRERVZTKQogdm9pZAkJZGV2bGFfZ2V0c3RhdHModW5zaWduZWQgaW50IHJlZ25vLCB2b2lkICpkdW1teSk7CiAjZW5kaWYKIAogRklMRSAgICAgICAgICAgKmZpbGU7CiAKKyNpZmRlZiBsaW51eAorc3RhdGljIGludAlkaXNraW9fZnJlZV9jb25maWcoaW50LCBpbnQsIHZvaWQgKiwgdm9pZCAqKTsKKyNlbmRpZgorCiAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCkBAIC0xNDIsMTkgKzE2MCwzMCBAQAogICAgICAqLwogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBkaXNraW9fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtESVNLSU9fSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezF9fSwKLSAgICAgICAge0RJU0tJT19ERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7Mn19LAotICAgICAgICB7RElTS0lPX05SRUFELCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHszfX0sCi0gICAgICAgIHtESVNLSU9fTldSSVRURU4sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezR9fSwKLSAgICAgICAge0RJU0tJT19SRUFEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7NX19LAotICAgICAgICB7RElTS0lPX1dSSVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7Nn19LAotI2lmIGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpCi0gICAgICAgIHtESVNLSU9fTEExLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHs5fX0sCi0gICAgICAgIHtESVNLSU9fTEE1LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsxMH19LAotICAgICAgICB7RElTS0lPX0xBMTUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezExfX0sCisgICAgICAgIHtESVNLSU9fSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsxfX0sCisgICAgICAgIHtESVNLSU9fREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsyfX0sCisgICAgICAgIHtESVNLSU9fTlJFQUQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHszfX0sCisgICAgICAgIHtESVNLSU9fTldSSVRURU4sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHs0fX0sCisgICAgICAgIHtESVNLSU9fUkVBRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHs1fX0sCisgICAgICAgIHtESVNLSU9fV1JJVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7Nn19LAorI2lmIGRlZmluZWQoSEFWRV9HRVRERVZTKSB8fCBkZWZpbmVkKEhBVkVfREVWU1RBVF9HRVRERVZTKSB8fCBkZWZpbmVkKGxpbnV4KQorICAgICAgICB7RElTS0lPX0xBMSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezl9fSwKKyAgICAgICAge0RJU0tJT19MQTUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsxMH19LAorICAgICAgICB7RElTS0lPX0xBMTUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsxMX19LAogI2VuZGlmCi0gICAgICAgIHtESVNLSU9fTlJFQURYLCBBU05fQ09VTlRFUjY0LCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezEyfX0sCi0gICAgICAgIHtESVNLSU9fTldSSVRURU5YLCBBU05fQ09VTlRFUjY0LCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezEzfX0sCisgICAgICAgIHtESVNLSU9fTlJFQURYLCBBU05fQ09VTlRFUjY0LCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsxMn19LAorICAgICAgICB7RElTS0lPX05XUklUVEVOWCwgQVNOX0NPVU5URVI2NCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7MTN9fSwKICAgICB9OwogCiAgICAgLyoKQEAgLTE5Miw3ICsyMjEsNyBAQAogICAgIElPTWFzdGVyUG9ydChib290c3RyYXBfcG9ydCwgJm1hc3RlclBvcnQpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAvKgogICAgICAqIGluaXRpYWxpemUgdmFsdWVzIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBvbiBmaXJzdCByZXF1ZXN0CiAgICAgICovCkBAIC0yMDAsMTQgKzIyOSw1NCBAQAogICAgIHBzX2Rpc2sgPSBOVUxMOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKLQlkZXZsYV9nZXRzdGF0cygwLCBOVUxMKTsKLQkvKiBjb2xsZWN0IExBIGRhdGEgcmVndWxhcmx5ICovCi0Jc25tcF9hbGFybV9yZWdpc3RlcihESVNLSU9fU0FNUExFX0lOVEVSVkFMLCBTQV9SRVBFQVQsIGRldmxhX2dldHN0YXRzLCBOVUxMKTsKKyNpZiBkZWZpbmVkIChIQVZFX0dFVERFVlMpIHx8IGRlZmluZWQoSEFWRV9ERVZTVEFUX0dFVERFVlMpIHx8IGRlZmluZWQobGludXgpCisgICAgZGV2bGFfZ2V0c3RhdHMoMCwgTlVMTCk7CisgICAgLyogY29sbGVjdCBMQSBkYXRhIHJlZ3VsYXJseSAqLworICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoRElTS0lPX1NBTVBMRV9JTlRFUlZBTCwgU0FfUkVQRUFULCBkZXZsYV9nZXRzdGF0cywgTlVMTCk7CiAjZW5kaWYKIAorCisjaWZkZWYgbGludXgKKyAgICBjaGFyICphcHAgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwLCAiZGlza2lvX2V4Y2x1ZGVfZmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fRkQpOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCBhcHAsICJkaXNraW9fZXhjbHVkZV9sb29wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0xPT1ApOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCBhcHAsICJkaXNraW9fZXhjbHVkZV9yYW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fUkFNKTsKKworICAgICAgICAvKiBvciBwb3NzaWJsZSBhbiBleGNsdXNpb24gcGF0dGVybj8gKi8KKworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKwkgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUFJFX1VQREFURV9DT05GSUcsCisJICAgICAgICAgICAgICAgICAgIGRpc2tpb19mcmVlX2NvbmZpZywgTlVMTCk7CisKKyNlbmRpZgogfQogCisjaWZkZWYgbGludXgKKy8qIHRvIGRvOiBtYWtlIHN1cmUgZGlza2lvX2ZyZWVfY29uZmlnKCkgZ2V0cyBpbnZva2VkIHVwb24gU0lHSFVQLiAqLworc3RhdGljIGludAorZGlza2lvX2ZyZWVfY29uZmlnKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBERUJVR01TR1RMKCgiZGlza2lvIiwgImZyZWUgY29uZmlnICVkXG4iLAorCQluZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisJCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX1JBTSkpKTsKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorCQkJICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fRkQsICAgMCk7CisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKwkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0xPT1AsIDApOworICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19SQU0sICAwKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKICNpZmRlZiBzb2xhcmlzMgogaW50CiBnZXRfZGlzayhpbnQgZGlza25yKQpAQCAtNDIyLDEyICs0OTEsMjg5IEBACiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJzZGkgKi8KIAotI2lmIGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpCisjaWYgZGVmaW5lZChvcGVuYnNkNCkKK3N0YXRpYyBpbnQgICAgICBuZGlzazsKK3N0YXRpYyBzdHJ1Y3QgZGlza3N0YXRzICpkazsKK3N0YXRpYyBjaGFyICAgKipka25hbWU7CisKK3N0YXRpYyBpbnQKK2dldHN0YXRzKHZvaWQpCit7CisgICAgdGltZV90ICAgICAgICAgIG5vdzsKKyAgICBpbnQgICAgICAgICAgICAgbWliWzJdOworICAgIGNoYXIgICAgICAgICAgICp0LCAqdHAsKnRlOworICAgIHNpemVfdCAgICAgICAgICBzaXplLCBka25fc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgIG5vdyA9IHRpbWUoTlVMTCk7CisgICAgaWYgKGNhY2hlX3RpbWUgKyBDQUNIRV9USU1FT1VUID4gbm93KSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBtaWJbMF0gPSBDVExfSFc7CisgICAgbWliWzFdID0gSFdfRElTS1NUQVRTOworICAgIHNpemUgPSAwOworICAgIGlmIChzeXNjdGwobWliLCAyLCBOVUxMLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS1NUQVRTIG1pYiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5kaXNrICE9IHNpemUgLyBzaXplb2YoKmRrKSkgeworICAgICAgICBpZiAoZGspCisgICAgICAgICAgICBmcmVlKGRrKTsKKyAgICAgICAgaWYgKGRrbmFtZSkgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5kaXNrOyBpKyspCisgICAgICAgICAgICAgICAgaWYgKGRrbmFtZVtpXSkKKyAgICAgICAgICAgICAgICAgICAgZnJlZShka25hbWVbaV0pOworICAgICAgICAgICAgZnJlZShka25hbWUpOworICAgICAgICB9CisgICAgICAgIG5kaXNrID0gc2l6ZSAvIHNpemVvZigqZGspOworICAgICAgICBpZiAobmRpc2sgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBka25hbWUgPSBtYWxsb2MobmRpc2sgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICAgICAgbWliWzFdID0gSFdfRElTS05BTUVTOworICAgICAgICBpZiAoc3lzY3RsKG1pYiwgMiwgTlVMTCwgJmRrbl9zaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS05BTUVTIG1pYiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdGUgPSB0cCA9IHQgPSBtYWxsb2MoZGtuX3NpemUpOworICAgICAgICBpZiAoc3lzY3RsKG1pYiwgMiwgdCwgJmRrbl9zaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS05BTUVTIG1pYiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5kaXNrOyBpKyspIHsKKwkgICAgd2hpbGUgKHRlLXQgPCBka25fc2l6ZSAmJiAqdGUgIT0gJywnKSB0ZSsrOworCSAgICAqdGUrKyA9ICdcMCc7CisgICAgICAgICAgICBka25hbWVbaV0gPSBzdHJkdXAodHApOworICAgICAgICAgICAgdHAgPSB0ZTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHQpOworICAgICAgICBkayA9IG1hbGxvYyhuZGlzayAqIHNpemVvZigqZGspKTsKKyAgICB9CisgICAgbWliWzBdID0gQ1RMX0hXOworICAgIG1pYlsxXSA9IEhXX0RJU0tTVEFUUzsKKyAgICBpZiAoc3lzY3RsKG1pYiwgMiwgZGssICZzaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgSFdfRElTS1NUQVRTIG1pYiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY2FjaGVfdGltZSA9IG5vdzsKKyAgICByZXR1cm4gMTsKK30KKwordV9jaGFyICAgICAgICAgKgordmFyX2Rpc2tpbyhzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKKyAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7CisgICAgc3RhdGljIHN0cnVjdCBjb3VudGVyNjQgYzY0X3JldDsKKyAgICB1bnNpZ25lZCBpbnQgICAgaW5keDsKKworICAgIGlmIChnZXRzdGF0cygpID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKKyAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG5kaXNrKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpbmR4ID0gKHVuc2lnbmVkIGludCkgKG5hbWVbKmxlbmd0aCAtIDFdIC0gMSk7CisgICAgaWYgKGluZHggPj0gbmRpc2spCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIERJU0tJT19JTkRFWDoKKyAgICAgICAgbG9uZ19yZXQgPSAobG9uZykgaW5keCArIDE7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fREVWSUNFOgorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihka25hbWVbaW5keF0pOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBka25hbWVbaW5keF07CisgICAgY2FzZSBESVNLSU9fTlJFQUQ6CisgICAgICAgIGxvbmdfcmV0ID0gKHVuc2lnbmVkIGxvbmcpIChka1tpbmR4XS5kc19yYnl0ZXMpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19OV1JJVFRFTjoKKyAgICAgICAgbG9uZ19yZXQgPSAodW5zaWduZWQgbG9uZykgKGRrW2luZHhdLmRzX3dieXRlcykgJiAweGZmZmZmZmZmOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX1JFQURTOgorICAgICAgICBsb25nX3JldCA9ICh1bnNpZ25lZCBsb25nKSBka1tpbmR4XS5kc19yeGZlciAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fV1JJVEVTOgorICAgICAgICBsb25nX3JldCA9ICh1bnNpZ25lZCBsb25nKSBka1tpbmR4XS5kc193eGZlciAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fTlJFQURYOgorICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKKyAgICAgICAgYzY0X3JldC5sb3cgPSBka1tpbmR4XS5kc19yYnl0ZXMgJiAweGZmZmZmZmZmOworICAgICAgICBjNjRfcmV0LmhpZ2ggPSBka1tpbmR4XS5kc19yYnl0ZXMgPj4gMzI7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgYzY0X3JldDsKKyAgICBjYXNlIERJU0tJT19OV1JJVFRFTlg6CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOworICAgICAgICBjNjRfcmV0LmxvdyA9IGRrW2luZHhdLmRzX3JieXRlcyAmIDB4ZmZmZmZmZmY7CisgICAgICAgIGM2NF9yZXQuaGlnaCA9IGRrW2luZHhdLmRzX3JieXRlcyA+PiAzMjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBjNjRfcmV0OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRVJST1JfTVNHKCJkaXNraW8uYzogZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMgcmVxdWVzdC4iKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9wZW5ic2QgKi8KKworI2lmZGVmIF9fTmV0QlNEX18KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CitzdGF0aWMgaW50ICAgICAgbmRpc2s7CisjaWZkZWYgSFdfSU9TVEFUTkFNRVMKK3N0YXRpYyBpbnQgbm1pYlsyXSA9IHtDVExfSFcsIEhXX0lPU1RBVE5BTUVTfTsKKyNlbHNlCitzdGF0aWMgaW50IG5taWJbMl0gPSB7Q1RMX0hXLCBIV19ESVNLTkFNRVN9OworI2VuZGlmCisjaWZkZWYgSFdfRElTS1NUQVRTCisjaW5jbHVkZSA8c3lzL2Rpc2suaD4KK3N0YXRpYyBpbnQgZG1pYlszXSA9IHtDVExfSFcsIEhXX0RJU0tTVEFUUywgc2l6ZW9mKHN0cnVjdCBkaXNrX3N5c2N0bCl9Oworc3RhdGljIHN0cnVjdCBkaXNrX3N5c2N0bCAqZGs7CisjZW5kaWYKKyNpZmRlZiBIV19JT1NUQVRTCisjaW5jbHVkZSA8c3lzL2lvc3RhdC5oPgorc3RhdGljIGludCBkbWliWzNdID0ge0NUTF9IVywgSFdfSU9TVEFUUywgc2l6ZW9mKHN0cnVjdCBpb19zeXNjdGwpfTsKK3N0YXRpYyBzdHJ1Y3QgaW9fc3lzY3RsICpkazsKKyNlbmRpZgorc3RhdGljIGNoYXIgICAqKmRrbmFtZTsKKworc3RhdGljIGludAorZ2V0c3RhdHModm9pZCkKK3sKKyAgICB0aW1lX3QgICAgICAgICAgbm93OworICAgIGNoYXIgICAgICAgICAgICp0LCAqdHA7CisgICAgc2l6ZV90ICAgICAgICAgIHNpemUsIGRrbl9zaXplOworICAgIGludCAgICAgICAgICAgICBpOworCisgICAgbm93ID0gdGltZShOVUxMKTsKKyAgICBpZiAoY2FjaGVfdGltZSArIENBQ0hFX1RJTUVPVVQgPiBub3cpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHNpemUgPSAwOworICAgIGlmIChzeXNjdGwoZG1pYiwgMywgTlVMTCwgJnNpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tTVEFUUy9IV19JT1NUQVRTIG1pYiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5kaXNrICE9IHNpemUgLyBkbWliWzJdKSB7CisgICAgICAgIGlmIChkaykKKyAgICAgICAgICAgIGZyZWUoZGspOworICAgICAgICBpZiAoZGtuYW1lKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpc2s7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoZGtuYW1lW2ldKQorICAgICAgICAgICAgICAgICAgICBmcmVlKGRrbmFtZVtpXSk7CisgICAgICAgICAgICBmcmVlKGRrbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgbmRpc2sgPSBzaXplIC8gZG1pYlsyXTsKKyAgICAgICAgaWYgKG5kaXNrID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGtuYW1lID0gbWFsbG9jKG5kaXNrICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICBka25fc2l6ZSA9IDA7CisgICAgICAgIGlmIChzeXNjdGwobm1pYiwgMiwgTlVMTCwgJmRrbl9zaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS05BTUVTIG1pYiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdCA9IG1hbGxvYyhka25fc2l6ZSk7CisgICAgICAgIGlmIChzeXNjdGwobm1pYiwgMiwgdCwgJmRrbl9zaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS05BTUVTIG1pYiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgdHAgPSBzdHJ0b2sodCwgIiAiKTsgdHAgJiYgaSA8IG5kaXNrOyBpKyssCisJICAgIHRwID0gc3RydG9rKE5VTEwsICIgIikpIHsKKyAgICAgICAgICAgIGRrbmFtZVtpXSA9IHN0cmR1cCh0cCk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgZGsgPSBtYWxsb2MobmRpc2sgKiBzaXplb2YoKmRrKSk7CisgICAgfQorICAgIGlmIChzeXNjdGwoZG1pYiwgMywgZGssICZzaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgSFdfRElTS1NUQVRTL0hXX0lPU1RBVFMgbWliIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjYWNoZV90aW1lID0gbm93OworICAgIHJldHVybiAxOworfQorCit1X2NoYXIgKgordmFyX2Rpc2tpbyhzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKKyAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7CisgICAgdW5zaWduZWQgaW50ICAgIGluZHg7CisKKyAgICBpZiAoZ2V0c3RhdHMoKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCisgICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBuZGlzaykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaW5keCA9ICh1bnNpZ25lZCBpbnQpIChuYW1lWypsZW5ndGggLSAxXSAtIDEpOworICAgIGlmIChpbmR4ID49IG5kaXNrKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisgICAgY2FzZSBESVNLSU9fSU5ERVg6CisgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpIGluZHggKyAxOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworCisgICAgY2FzZSBESVNLSU9fREVWSUNFOgorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihka25hbWVbaW5keF0pOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBka25hbWVbaW5keF07CisKKyAgICBjYXNlIERJU0tJT19OUkVBRDoKKyNpZmRlZiBIV19ESVNLU1RBVFMKKyAgICAgCWxvbmdfcmV0ID0gZGtbaW5keF0uZGtfcmJ5dGVzOworI2VuZGlmCisjaWZkZWYgSFdfSU9TVEFUUworCWlmIChka1tpbmR4XS50eXBlID09IElPU1RBVF9ESVNLKQorCSAgICBsb25nX3JldCA9IGRrW2luZHhdLnJieXRlczsKKyNlbmRpZgorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworCisgICAgY2FzZSBESVNLSU9fTldSSVRURU46CisjaWZkZWYgSFdfRElTS1NUQVRTCisgICAgIAlsb25nX3JldCA9IGRrW2luZHhdLmRrX3dieXRlczsKKyNlbmRpZgorI2lmZGVmIEhXX0lPU1RBVFMKKwlpZiAoZGtbaW5keF0udHlwZSA9PSBJT1NUQVRfRElTSykKKwkgICAgbG9uZ19yZXQgPSBka1tpbmR4XS53Ynl0ZXM7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKworICAgIGNhc2UgRElTS0lPX1JFQURTOgorI2lmZGVmIEhXX0RJU0tTVEFUUworICAgICAJbG9uZ19yZXQgPSBka1tpbmR4XS5ka19yeGZlcjsKKyNlbmRpZgorI2lmZGVmIEhXX0lPU1RBVFMKKwlpZiAoZGtbaW5keF0udHlwZSA9PSBJT1NUQVRfRElTSykKKwkgICAgbG9uZ19yZXQgPSBka1tpbmR4XS5yeGZlcjsKKyNlbmRpZgorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworCisgICAgY2FzZSBESVNLSU9fV1JJVEVTOgorI2lmZGVmIEhXX0RJU0tTVEFUUworICAgICAJbG9uZ19yZXQgPSBka1tpbmR4XS5ka193eGZlcjsKKyNlbmRpZgorI2lmZGVmIEhXX0lPU1RBVFMKKwlpZiAoZGtbaW5keF0udHlwZSA9PSBJT1NUQVRfRElTSykKKwkgICAgbG9uZ19yZXQgPSBka1tpbmR4XS53eGZlcjsKKyNlbmRpZgorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRVJST1JfTVNHKCJkaXNraW8uYzogZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMgcmVxdWVzdC4iKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogX19OZXRCU0RfXyAqLworCisjaWYgZGVmaW5lZChIQVZFX0dFVERFVlMpIHx8IGRlZmluZWQoSEFWRV9ERVZTVEFUX0dFVERFVlMpCiAKIC8qIGRpc2sgbG9hZCBhdmVyYWdlIHBhdGNoIGJ5IFJvamVyICovCiAKIHN0cnVjdCBkZXZfbGEgewotI2lmICggZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3ICkKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBzdHJ1Y3QgYmludGltZSBwcmV2OwogI2Vsc2UKICAgICAgICAgc3RydWN0IHRpbWV2YWwgcHJldjsKQEAgLTQzOSw3ICs3ODUsNyBAQAogc3RhdGljIHN0cnVjdCBkZXZfbGEgKmRldmxvYWRzID0gTlVMTDsKIHN0YXRpYyBpbnQgbmRldnMgPSAwOwogCi0jaWYgISAoIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNyApCisjaWYgISBIQVZFX0RFVlNUQVRfR0VUREVWUwogZG91YmxlIGRldmxhX3RpbWV2YWxfZGlmZihzdHJ1Y3QgdGltZXZhbCAqdDEsIHN0cnVjdCB0aW1ldmFsICp0MikgewogCiAgICAgICAgIGRvdWJsZSBkdDEgPSAoZG91YmxlKSB0MS0+dHZfc2VjICsgKGRvdWJsZSkgdDEtPnR2X3VzZWMgKiAwLjAwMDAwMTsKQEAgLTQ4OCw3ICs4MzQsNyBAQAogICAgICAgICBpZiAobmRldnMgPT0gMCkgewogICAgICAgICAgICAgICAgIG5kZXZzID0gbGFzdGF0LT5kaW5mby0+bnVtZGV2czsKICAgICAgICAgICAgICAgICBkZXZsb2FkcyA9IChzdHJ1Y3QgZGV2X2xhICopIG1hbGxvYyhuZGV2cyAqIHNpemVvZihzdHJ1Y3QgZGV2X2xhKSk7Ci0gICAgICAgICAgICAgICAgYnplcm8oZGV2bG9hZHMsIG5kZXZzICogc2l6ZW9mKHN0cnVjdCBkZXZfbGEpKTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoZGV2bG9hZHMsICdcMCcsIG5kZXZzICogc2l6ZW9mKHN0cnVjdCBkZXZfbGEpKTsKICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IG5kZXZzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRldmxvYWRzW2ldLmxhMSA9IGRldmxvYWRzW2ldLmxhNSA9IGRldmxvYWRzW2ldLmxhMTUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZkZXZsb2Fkc1tpXS5wcmV2LCAmbGFzdGF0LT5kaW5mby0+ZGV2aWNlc1tpXS5idXN5X3RpbWUsIHNpemVvZihkZXZsb2Fkc1tpXS5wcmV2KSk7CkBAIC01MDEsNyArODQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgZm9yIChpPTA7IGk8bmRldnM7IGkrKykgewotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgICAgICAgICAgYnVzeV90aW1lID0gZGV2c3RhdF9jb21wdXRlX2V0aW1lKCZsYXN0YXQtPmRpbmZvLT5kZXZpY2VzW2ldLmJ1c3lfdGltZSwgJmRldmxvYWRzW2ldLnByZXYpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBidXN5X3RpbWUgPSBkZXZsYV90aW1ldmFsX2RpZmYoJmRldmxvYWRzW2ldLnByZXYsICZsYXN0YXQtPmRpbmZvLT5kZXZpY2VzW2ldLmJ1c3lfdGltZSk7CkBAIC01OTcsMTQgKzk0MywxNCBAQAogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5kZXZpY2VfbmFtZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmRldmljZV9uYW1lOwogICAgIGNhc2UgRElTS0lPX05SRUFEOgotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc1tERVZTVEFUX1JFQURdOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzX3JlYWQ7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKICAgICBjYXNlIERJU0tJT19OV1JJVFRFTjoKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNbREVWU1RBVF9XUklURV07CiAjZWxzZQogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNfd3JpdHRlbjsKQEAgLTYxMiw3ICs5NTgsNyBAQAogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OwogICAgIGNhc2UgRElTS0lPX05SRUFEWDoKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ2xvbmdfcmV0ID0gc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNbREVWU1RBVF9SRUFEXTsKICNlbHNlCiAgICAgICAgIGxvbmdsb25nX3JldCA9IHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzX3JlYWQ7CkBAIC02MjIsNyArOTY4LDcgQEAKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBjNjRfcmV0OwogICAgIGNhc2UgRElTS0lPX05XUklUVEVOWDoKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ2xvbmdfcmV0ID0gc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNbREVWU1RBVF9XUklURV07CiAjZWxzZQogICAgICAgICBsb25nbG9uZ19yZXQgPSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc193cml0dGVuOwpAQCAtNjMxLDE0ICs5NzcsMTQgQEAKICAgICAgICAgYzY0X3JldC5oaWdoID0gbG9uZ2xvbmdfcmV0ID4+IDMyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGM2NF9yZXQ7CiAgICAgY2FzZSBESVNLSU9fUkVBRFM6Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLm9wZXJhdGlvbnNbREVWU1RBVF9SRUFEXTsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5udW1fcmVhZHM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKICAgICBjYXNlIERJU0tJT19XUklURVM6Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLm9wZXJhdGlvbnNbREVWU1RBVF9XUklURV07CiAjZWxzZQogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0ubnVtX3dyaXRlczsKQEAgLTY4NSw2ICsxMDMxLDEzIEBACiAgICAgdW5zaWduZWQgbG9uZyAgYXZlcTsKIH0gbGludXhfZGlza2lvOwogCisvKiBkaXNrIGxvYWQgYXZlcmFnZXMgKi8KK3R5cGVkZWYgc3RydWN0IGxpbnV4X2Rpc2tpb19sYQoreworICAgIHVuc2lnbmVkIGxvbmcgdXNlX3ByZXY7CisgICAgZG91YmxlIGxhMSwgbGE1LCBsYTE1OworfSBsaW51eF9kaXNraW9fbGE7CisKIHR5cGVkZWYgc3RydWN0IGxpbnV4X2Rpc2tpb19oZWFkZXIKIHsKICAgICBsaW51eF9kaXNraW8qIGluZGljZXM7CkBAIC02OTIsMTAgKzEwNDUsNzkgQEAKICAgICBpbnQgYWxsb2M7CiB9IGxpbnV4X2Rpc2tpb19oZWFkZXI7CiAKK3R5cGVkZWYgc3RydWN0IGxpbnV4X2Rpc2tpb19sYV9oZWFkZXIKK3sKKyAgICBsaW51eF9kaXNraW9fbGEgKiBpbmRpY2VzOyAgIAorICAgIGludCBsZW5ndGg7Cit9IGxpbnV4X2Rpc2tpb19sYV9oZWFkZXI7CisKIHN0YXRpYyBsaW51eF9kaXNraW9faGVhZGVyIGhlYWQ7CitzdGF0aWMgbGludXhfZGlza2lvX2xhX2hlYWRlciBsYV9oZWFkOwogCit2b2lkIGRldmxhX2dldHN0YXRzKHVuc2lnbmVkIGludCByZWdubywgdm9pZCAqIGR1bW15KSB7CiAKLWludCBnZXRzdGF0cyh2b2lkKQorICAgIHN0YXRpYyBkb3VibGUgZXhwb24xLCBleHBvbjUsIGV4cG9uMTU7CisgICAgZG91YmxlIGJ1c3lfdGltZSwgYnVzeV9wZXJjZW50OworICAgIGludCBpZHg7CisKKyAgICBpZiAoZ2V0c3RhdHMoKSA9PSAxKSB7CisgICAgICAgIEVSUk9SX01TRygiY2FuJ3QgZG8gZGlza2lvIGdldHN0YXRzKClcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFsYV9oZWFkLmxlbmd0aCkgeworICAgICAgICBsYV9oZWFkLmluZGljZXMgPSAobGludXhfZGlza2lvX2xhICopIG1hbGxvYyhoZWFkLmxlbmd0aCAqIHNpemVvZihsaW51eF9kaXNraW9fbGEpKTsKKyAgICAgICAgZm9yIChpZHg9MDsgaWR4PGhlYWQubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGE1ID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExNSA9IDAuOyAKKyAgICAgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLnVzZV9wcmV2ID0gaGVhZC5pbmRpY2VzW2lkeF0udXNlOworICAgICAgICB9CisgICAgICAgIGxhX2hlYWQubGVuZ3RoID0gaGVhZC5sZW5ndGg7CisgICAgICAgIGV4cG9uMSA9IGV4cCgtKCgoZG91YmxlKURJU0tJT19TQU1QTEVfSU5URVJWQUwpIC8gKChkb3VibGUpNjApKSk7CisgICAgICAgIGV4cG9uNSA9IGV4cCgtKCgoZG91YmxlKURJU0tJT19TQU1QTEVfSU5URVJWQUwpIC8gKChkb3VibGUpMzAwKSkpOworICAgICAgICBleHBvbjE1ID0gZXhwKC0oKChkb3VibGUpRElTS0lPX1NBTVBMRV9JTlRFUlZBTCkgLyAoKGRvdWJsZSk5MDApKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGhlYWQubGVuZ3RoIC0gbGFfaGVhZC5sZW5ndGgpIHsKKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzID0gKGxpbnV4X2Rpc2tpb19sYSAqKSByZWFsbG9jKGxhX2hlYWQuaW5kaWNlcywgaGVhZC5sZW5ndGggKiBzaXplb2YobGludXhfZGlza2lvX2xhKSk7CisgICAgICAgIGZvciAoaWR4PWxhX2hlYWQubGVuZ3RoOyBpZHg8aGVhZC5sZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTEgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTUgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTE1ID0gMC47IAorICAgICAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0udXNlX3ByZXYgPSBoZWFkLmluZGljZXNbaWR4XS51c2U7CisgICAgICAgIH0KKyAgICAgICAgbGFfaGVhZC5sZW5ndGggPSBoZWFkLmxlbmd0aDsKKyAgICB9CisKKyAgICBmb3IgKGlkeD0wOyBpZHg8aGVhZC5sZW5ndGg7IGlkeCsrKSB7CisgICAgICAgIGJ1c3lfdGltZSA9IGhlYWQuaW5kaWNlc1tpZHhdLnVzZSAtIGxhX2hlYWQuaW5kaWNlc1tpZHhdLnVzZV9wcmV2OworICAgICAgICBidXN5X3BlcmNlbnQgPSBidXN5X3RpbWUgKiAxMDAuIC8gKChkb3VibGUpIERJU0tJT19TQU1QTEVfSU5URVJWQUwpIC8gMTAwMC47CisgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMSAqIGV4cG9uMSArIGJ1c3lfcGVyY2VudCAqICgxLiAtIGV4cG9uMSk7CisgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhNSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhNSAqIGV4cG9uNSArIGJ1c3lfcGVyY2VudCAqICgxLiAtIGV4cG9uNSk7CisgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMTUgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTE1ICogZXhwb24xNSArIGJ1c3lfcGVyY2VudCAqICgxLiAtIGV4cG9uMTUpOworICAgICAgICAvKgorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSB1cGRhdGUgbGExPSVmIGxhNT0lZiBsYTE1PSVmXG4iLAorICAgICAgICAgIGlkeCwgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExLCBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTUsIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMTUpOyAgIAorICAgICAgICAqLworICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS51c2VfcHJldiA9IGhlYWQuaW5kaWNlc1tpZHhdLnVzZTsKKyAgICB9Cit9CisKK2ludCBpc19leGNsdWRlZChjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fRkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHN0cm5jbXAobmFtZSwgImZkIiwgMikpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0xPT1ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHN0cm5jbXAobmFtZSwgImxvb3AiLCA0KSkpCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fUkFNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShzdHJuY21wKG5hbWUsICJyYW0iLCAzKSkpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRzdGF0cyh2b2lkKQogewogICAgIEZJTEUqIHBhcnRzOwogICAgIHRpbWVfdCBub3c7CkBAIC03MzQsNyArMTE1Niw4IEBACiAJCSAgICAmcFRlbXAtPm1ham9yLCAmcFRlbXAtPm1pbm9yLCBwVGVtcC0+bmFtZSwKIAkJICAgICZwVGVtcC0+cmlvLCAmcFRlbXAtPnJzZWN0LAogCQkgICAgJnBUZW1wLT53aW8sICZwVGVtcC0+d3NlY3QpOwotCSAgICBoZWFkLmxlbmd0aCsrOworICAgICAgICAgICAgaWYgKCFpc19leGNsdWRlZChwVGVtcC0+bmFtZSkpCisJICAgICAgICBoZWFkLmxlbmd0aCsrOwogCX0KICAgICB9CiAgICAgZWxzZSB7CkBAIC03NzIsNyArMTE5NSw4IEBACiAgICAgICAgICAgICAgICBmY2xvc2UocGFydHMpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9Ci0JICAgIGhlYWQubGVuZ3RoKys7CisgICAgICAgICAgICBpZiAoIWlzX2V4Y2x1ZGVkKHBUZW1wLT5uYW1lKSkKKwkgICAgICAgIGhlYWQubGVuZ3RoKys7CiAJfQogICAgIH0KIApAQCAtODI2LDYgKzEyNTAsMTUgQEAKICAgICBjYXNlIERJU0tJT19XUklURVM6CiAgICAgICBsb25nX3JldCA9IGhlYWQuaW5kaWNlc1tpbmR4XS53aW8gJiAweGZmZmZmZmZmOwogICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19MQTE6CisgICAgICBsb25nX3JldCA9IGxhX2hlYWQuaW5kaWNlc1tpbmR4XS5sYTE7CisgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX0xBNToKKyAgICAgIGxvbmdfcmV0ID0gbGFfaGVhZC5pbmRpY2VzW2luZHhdLmxhNTsKKyAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fTEExNToKKyAgICAgIGxvbmdfcmV0ID0gbGFfaGVhZC5pbmRpY2VzW2luZHhdLmxhMTU7CisgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OwogICAgIGNhc2UgRElTS0lPX05SRUFEWDoKICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOwogICAgICAgYzY0X3JldC5sb3cgPSBoZWFkLmluZGljZXNbaW5keF0ucnNlY3QgKiA1MTIgJiAweGZmZmZmZmZmOwpAQCAtMTEwMSw3ICsxNTM0LDcgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGFyd2luICovCiAKIAotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogLyoKICAqIGNvbGxlY3Qgc3RhdGlzdGljcyBmb3IgYWxsIGRpc2tzCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmgKaW5kZXggMDU1OTZhYi4uOGNkMjA2YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9ESVNLSU9fSAogI2RlZmluZSBfTUlCR1JPVVBfRElTS0lPX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIGNvbmZpZ19hZGRfbWliKFVDRC1ESVNLSU8tTUlCKQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jCmluZGV4IGE2YjliMzQuLjBiNzExZmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBIQVZFX1NURExJQl9ICkBAIC0xNCwyNCArMTUsMTAgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KLSNpZiBkZWZpbmVkKEhBVkVfRExGQ05fSCkgJiYgKGRlZmluZWQoSEFWRV9ETE9QRU4pIHx8IGRlZmluZWQoSEFWRV9MSUJETCkpIFwKLSAgICB8fCBkZWZpbmVkKFdJTjMyKQotCiAjaWYgZGVmaW5lZChXSU4zMikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZWxzZQpAQCAtMzksNjggKzI2LDMzIEBACiAjZW5kaWYKICNpbmNsdWRlICJkbG1vZC5oIgogCi1zdGF0aWMgc3RydWN0IGRsbW9kICpkbG1vZHM7Ci1zdGF0aWMgaW50ICAgICAgZGxtb2RfbmV4dF9pbmRleCA9IDE7Ci1zdGF0aWMgY2hhciAgICAgZGxtb2RfcGF0aFsxMDI0XTsKKyNpZm5kZWYgU05NUERMTU9EUEFUSAorI2RlZmluZSBTTk1QRExNT0RQQVRIICIvdXNyL2xvY2FsL2xpYi9zbm1wL2RsbW9kIgorI2VuZGlmCiAKLXN0YXRpYyB2b2lkICAgICBkbG1vZF9wYXJzZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwotc3RhdGljIHZvaWQgICAgIGRsbW9kX2ZyZWVfY29uZmlnKHZvaWQpOwotCi0vKgotICogdGhpcyB2YXJpYWJsZSBkZWZpbmVzIGZ1bmN0aW9uIGNhbGxiYWNrcyBhbmQgdHlwZSByZXR1cm4KLSAqIGluZm9ybWF0aW9uIGZvciB0aGUgZGxtb2QgbWliCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdmFyaWFibGU0IGRsbW9kX3ZhcmlhYmxlc1tdID0gewotICAgIHtETE1PRE5FWFRJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZGxtb2QsIDEsIHsxfX0sCi0gICAge0RMTU9ETkFNRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDJ9fSwKLSAgICB7RExNT0RQQVRILCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgM319LAotICAgIHtETE1PREVSUk9SLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCA0fX0sCi0gICAge0RMTU9EU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDV9fSwKK3N0cnVjdCBkbG1vZCB7CisgIHN0cnVjdCBkbG1vZCAgICpuZXh0OworICBpbnQgICAgICAgICAgICAgaW5kZXg7CisgIGNoYXIgICAgICAgICAgICBuYW1lWzY0ICsgMV07CisgIGNoYXIgICAgICAgICAgICBwYXRoWzI1NSArIDFdOworICBjaGFyICAgICAgICAgICAgZXJyb3JbMjU1ICsgMV07CisgIHZvaWQgICAgICAgICAgICpoYW5kbGU7CisgIGludCAgICAgICAgICAgICBzdGF0dXM7CiB9OwogCi1zdGF0aWMgb2lkICAgICAgZGxtb2RfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCAxMywgMTQgfTsKLXN0YXRpYyBpbnQgICAgICBkbG1vZF92YXJpYWJsZXNfb2lkX2xlbiA9IDk7CisjZGVmaW5lIERMTU9EX0xPQURFRAkJMQorI2RlZmluZSBETE1PRF9VTkxPQURFRAkJMgorI2RlZmluZSBETE1PRF9FUlJPUgkJMworI2RlZmluZSBETE1PRF9MT0FECQk0CisjZGVmaW5lIERMTU9EX1VOTE9BRAkJNQorI2RlZmluZSBETE1PRF9DUkVBVEUJCTYKKyNkZWZpbmUgRExNT0RfREVMRVRFCQk3CiAKLXZvaWQKLWluaXRfZGxtb2Qodm9pZCkKLXsKLSAgICBSRUdJU1RFUl9NSUIoImRsbW9kIiwgZGxtb2RfdmFyaWFibGVzLCB2YXJpYWJsZTQsIGRsbW9kX3ZhcmlhYmxlc19vaWQpOworc3RhdGljIHN0cnVjdCBkbG1vZCAqZGxtb2RzOworc3RhdGljIHVuc2lnbmVkIGludCBkbG1vZF9uZXh0X2luZGV4ID0gMTsKK3N0YXRpYyBjaGFyICAgICBkbG1vZF9wYXRoWzEwMjRdOwogCi0gICAgLyoKLSAgICAgKiBUT0RPOiBSRUdJU1RFUl9TWVNPUl9FTlRSWSAKLSAgICAgKi8KLQotICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJyZWdpc3RlciBtaWJcbiIpKTsKLQotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkbG1vZCIsIGRsbW9kX3BhcnNlX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbG1vZF9mcmVlX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlLW5hbWUgbW9kdWxlLXBhdGgiKTsKLQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHAgPSBnZXRlbnYoIlNOTVBETE1PRFBBVEgiKTsKLSAgICAgICAgc3RybGNweShkbG1vZF9wYXRoLCBTTk1QRExNT0RQQVRILCBzaXplb2YoZGxtb2RfcGF0aCkpOwotICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgaWYgKHBbMF0gPT0gRU5WX1NFUEFSQVRPUl9DSEFSKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihkbG1vZF9wYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuID49IDEgJiYgZGxtb2RfcGF0aFtsZW4gLSAxXSAhPSBFTlZfU0VQQVJBVE9SX0NIQVIpCi0gICAgICAgICAgICAgICAgICAgIHN0cmxjYXQoZGxtb2RfcGF0aCwgRU5WX1NFUEFSQVRPUiwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKLSAgICAgICAgICAgICAgICBzdHJsY2F0KGRsbW9kX3BhdGgsIHAgKyAxLCBzaXplb2YoZGxtb2RfcGF0aCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3RybGNweShkbG1vZF9wYXRoLCBwLCBzaXplb2YoZGxtb2RfcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoImRsbW9kIiwgImRsbW9kX3BhdGg6ICVzXG4iLCBkbG1vZF9wYXRoKSk7Ci19Ci0KLXZvaWQKLWRlaW5pdF9kbG1vZCh2b2lkKQotewotICAgIHVucmVnaXN0ZXJfbWliKGRsbW9kX3ZhcmlhYmxlc19vaWQsIGRsbW9kX3ZhcmlhYmxlc19vaWRfbGVuKTsKLSAgICBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkbG1vZCIpOwotfQotCi1zdHJ1Y3QgZGxtb2QgICAqCitzdGF0aWMgc3RydWN0IGRsbW9kICAgKgogZGxtb2RfY3JlYXRlX21vZHVsZSh2b2lkKQogewogICAgIHN0cnVjdCBkbG1vZCAgKipwZGxtb2QsICpkbG07CkBAIC0xMjAsNyArNzIsNyBAQAogICAgIHJldHVybiBkbG07CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBkbG1vZF9kZWxldGVfbW9kdWxlKHN0cnVjdCBkbG1vZCAqZGxtKQogewogICAgIHN0cnVjdCBkbG1vZCAgKipwZGxtb2Q7CkBAIC0yMjcsMTQgKzE3OSw5IEBACiAjZW5kaWYKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGRsbW9kX2xvYWRfbW9kdWxlKHN0cnVjdCBkbG1vZCAqZGxtKQogewotICAgIGNoYXIgICAgICAgICAgICBzeW1faW5pdFs2NF07Ci0gICAgY2hhciAgICAgICAgICAgKnAsIHRtcF9wYXRoWzI1NV07Ci0gICAgZGxfZnVuY3Rpb25fcHRyIGRsX2luaXQ7Ci0gICAgY2hhciAgICAgICAgICAgKnN0OwotCiAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgImRsbW9kX2xvYWRfbW9kdWxlICVzOiAlc1xuIiwgZGxtLT5uYW1lLAogICAgICAgICAgICAgICAgIGRsbS0+cGF0aCkpOwogCkBAIC0yNTEsNiArMTk4LDggQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgKnN0LCAqcCwgdG1wX3BhdGhbMjU1XTsKKwogICAgICAgICBmb3IgKHAgPSBzdHJ0b2tfcihkbG1vZF9wYXRoLCBFTlZfU0VQQVJBVE9SLCAmc3QpOyBwOwogICAgICAgICAgICAgIHAgPSBzdHJ0b2tfcihOVUxMLCBFTlZfU0VQQVJBVE9SLCAmc3QpKSB7CiAgICAgICAgICAgICBzbnByaW50Zih0bXBfcGF0aCwgc2l6ZW9mKHRtcF9wYXRoKSwgIiVzLyVzLiVzIiwgcCwgZGxtLT5wYXRoLApAQCAtMjY3LDI1ICsyMTYsMzAgQEAKICAgICAgICAgaWYgKGRsbS0+c3RhdHVzID09IERMTU9EX0VSUk9SKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzbnByaW50ZihzeW1faW5pdCwgc2l6ZW9mKHN5bV9pbml0KSwgImluaXRfJXMiLCBkbG0tPm5hbWUpOwotICAgIGRsX2luaXQgPSBkbG1vZF9kbHN5bShkbG0tPmhhbmRsZSwgc3ltX2luaXQpOwotICAgIGlmIChkbF9pbml0ID09IE5VTEwpIHsKLSAgICAgICAgZGxtb2RfZGxjbG9zZShkbG0tPmhhbmRsZSk7Ci0gICAgICAgIHNucHJpbnRmKGRsbS0+ZXJyb3IsIHNpemVvZihkbG0tPmVycm9yKSwKLSAgICAgICAgICAgICAgICAgImRsc3ltIGZhaWxlZDogY2FuJ3QgZmluZCBcJyVzXCciLCBzeW1faW5pdCk7Ci0gICAgICAgIGRsbS0+c3RhdHVzID0gRExNT0RfRVJST1I7Ci0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIGNoYXIgc3ltX2luaXRbNjQgKyBzaXplb2YoImluaXRfIildOworICAgICAgICBkbF9mdW5jdGlvbl9wdHIgZGxfaW5pdDsKKworICAgICAgICBzbnByaW50ZihzeW1faW5pdCwgc2l6ZW9mKHN5bV9pbml0KSwgImluaXRfJXMiLCBkbG0tPm5hbWUpOworICAgICAgICBkbF9pbml0ID0gZGxtb2RfZGxzeW0oZGxtLT5oYW5kbGUsIHN5bV9pbml0KTsKKyAgICAgICAgaWYgKGRsX2luaXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZGxtb2RfZGxjbG9zZShkbG0tPmhhbmRsZSk7CisgICAgICAgICAgICBzbnByaW50ZihkbG0tPmVycm9yLCBzaXplb2YoZGxtLT5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAiZGxzeW0gZmFpbGVkOiBjYW4ndCBmaW5kIFwnJXNcJyIsIHN5bV9pbml0KTsKKyAgICAgICAgICAgIGRsbS0+c3RhdHVzID0gRExNT0RfRVJST1I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGxfaW5pdCgpOwogICAgIH0KIAotICAgIGRsX2luaXQoKTsKICAgICBkbG0tPmVycm9yWzBdID0gJ1wwJzsKICAgICBkbG0tPnN0YXR1cyA9IERMTU9EX0xPQURFRDsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGRsbW9kX3VubG9hZF9tb2R1bGUoc3RydWN0IGRsbW9kICpkbG0pCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHN5bV9kZWluaXRbNjRdOworICAgIGNoYXIgICAgICAgICAgICBzeW1fZGVpbml0WzY0ICsgc2l6ZW9mKCJzaHV0ZG93bl8iKV07CiAgICAgZGxfZnVuY3Rpb25fcHRyIGRsX2RlaW5pdDsKIAogICAgIGlmICghZGxtIHx8IGRsbS0+c3RhdHVzICE9IERMTU9EX0xPQURFRCkKQEAgLTI5MywxOCArMjQ3LDIyIEBACiAKICAgICBzbnByaW50ZihzeW1fZGVpbml0LCBzaXplb2Yoc3ltX2RlaW5pdCksICJkZWluaXRfJXMiLCBkbG0tPm5hbWUpOwogICAgIGRsX2RlaW5pdCA9IGRsbW9kX2Rsc3ltKGRsbS0+aGFuZGxlLCBzeW1fZGVpbml0KTsKLSAgICBpZiAoZGxfZGVpbml0ID09IE5VTEwpIHsKLSAgICAgICAgc25wcmludGYoZGxtLT5lcnJvciwgc2l6ZW9mKGRsbS0+ZXJyb3IpLAotICAgICAgICAgICAgICAgICAiZGxzeW0gZmFpbGVkOiBjYW4ndCBmaW5kIFwnJXNcJyIsIHN5bV9kZWluaXQpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFkbF9kZWluaXQpIHsKKyAgICAgICAgc25wcmludGYoc3ltX2RlaW5pdCwgc2l6ZW9mKHN5bV9kZWluaXQpLCAic2h1dGRvd25fJXMiLCBkbG0tPm5hbWUpOworICAgICAgICBkbF9kZWluaXQgPSBkbG1vZF9kbHN5bShkbG0tPmhhbmRsZSwgc3ltX2RlaW5pdCk7CisgICAgfQorICAgIGlmIChkbF9kZWluaXQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgIkNhbGxpbmcgJXMoKVxuIiwgc3ltX2RlaW5pdCkpOwogICAgICAgICBkbF9kZWluaXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiTm8gZGVzdHJ1Y3RvciBmb3IgJXNcbiIsIGRsbS0+bmFtZSkpOwogICAgIH0KICAgICBkbG1vZF9kbGNsb3NlKGRsbS0+aGFuZGxlKTsKICAgICBkbG0tPnN0YXR1cyA9IERMTU9EX1VOTE9BREVEOwogICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJNb2R1bGUgJXMgdW5sb2FkZWRcbiIsIGRsbS0+bmFtZSkpOwogfQogCi1zdHJ1Y3QgZGxtb2QgICAqCitzdGF0aWMgc3RydWN0IGRsbW9kICAgKgogZGxtb2RfZ2V0X2J5X2luZGV4KGludCBpaW5kZXgpCiB7CiAgICAgc3RydWN0IGRsbW9kICAgKmRsbW9kOwpAQCAtMzE2LDYgKzI3NCwxMCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKgorICogRnVuY3Rpb25zIHRvIHBhcnNlIGNvbmZpZyBsaW5lcworICovCisKIHN0YXRpYyB2b2lkCiBkbG1vZF9wYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CkBAIC0zMjgsNyArMjkwLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvKgotICAgICAqIHJlbW92ZSBjb21tZW50cyAKKyAgICAgKiByZW1vdmUgY29tbWVudHMKICAgICAgKi8KICAgICAqKGNwdHIgKyBzdHJjc3BuKGNwdHIsICIjO1xyXG4iKSkgPSAnXDAnOwogCkBAIC0zMzcsNyArMjk5LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyoKLSAgICAgKiBkeW5hbWljIG1vZHVsZSBuYW1lIAorICAgICAqIGR5bmFtaWMgbW9kdWxlIG5hbWUKICAgICAgKi8KICAgICBkbG1fbmFtZSA9IHN0cnRva19yKGNwdHIsICJcdCAiLCAmc3QpOwogICAgIGlmIChkbG1fbmFtZSA9PSBOVUxMKSB7CkBAIC0zNDgsNyArMzEwLDcgQEAKICAgICBzdHJsY3B5KGRsbS0+bmFtZSwgZGxtX25hbWUsIHNpemVvZihkbG0tPm5hbWUpKTsKIAogICAgIC8qCi0gICAgICogZHluYW1pYyBtb2R1bGUgcGF0aCAKKyAgICAgKiBkeW5hbWljIG1vZHVsZSBwYXRoCiAgICAgICovCiAgICAgZGxtX3BhdGggPSBzdHJ0b2tfcihOVUxMLCAiXHQgIiwgJnN0KTsKICAgICBpZiAoZGxtX3BhdGgpCkBAIC0zNzYsMTMgKzMzOCwyMyBAQAogICAgIGRsbW9kcyA9IE5VTEw7CiB9CiAKKy8qCisgKiBGdW5jdGlvbnMgdG8gaGFuZGxlIFNOTVAgbWFuYWdlbWVudAorICovCisKKyNkZWZpbmUgRExNT0RORVhUSU5ERVggCQkxCisjZGVmaW5lIERMTU9ESU5ERVggICAgIAkJMgorI2RlZmluZSBETE1PRE5BTUUgICAgICAJCTMKKyNkZWZpbmUgRExNT0RQQVRIICAgICAgCQk0CisjZGVmaW5lIERMTU9ERVJST1IgICAgIAkJNQorI2RlZmluZSBETE1PRFNUQVRVUyAgICAJCTYKIAogLyoKICAqIGhlYWRlcl9kbG1vZCguLi4KICAqIEFyZ3VtZW50czoKICAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCiAgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKLSAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzCiAgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKICAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCiAgKiB3cml0ZV9tZXRob2QKQEAgLTQxNCw3ICszODYsNyBAQAogfQogCiAKLXVfY2hhciAgICAgICAgICoKK3N0YXRpYyB1X2NoYXIgICAgICAgICAqCiB2YXJfZGxtb2Qoc3RydWN0IHZhcmlhYmxlICogdnAsCiAgICAgICAgICAgb2lkICogbmFtZSwKICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCkBAIC00MjIsNyArMzk0LDcgQEAKIHsKIAogICAgIC8qCi0gICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIgCisgICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIKICAgICAgKi8KIAogICAgICp3cml0ZV9tZXRob2QgPSAwOyAgICAgICAgIC8qIGFzc3VtZSBpdCBpc24ndCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KQEAgLTQzMCwxMCArNDAyLDEwIEBACiAKICAgICBpZiAoaGVhZGVyX2RsbW9kKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LAogICAgICAgICAgICAgICAgICAgICAgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKSA9PSBNQVRDSF9GQUlMRUQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCi0gICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4gCisgICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4KICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgRExNT0RORVhUSU5ERVg6CkBAIC00NDMsMTEyICs0MTUsMTEgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9kbG1vZFxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBOVUxMOwogfQogCiAKLS8qCi0gKiBoZWFkZXJfZGxtb2RFbnRyeSguLi4KLSAqIEFyZ3VtZW50czoKLSAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCi0gKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKLSAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCi0gKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKLSAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCi0gKiB3cml0ZV9tZXRob2QKLSAqIAotICovCi0KLQotc3RhdGljIHN0cnVjdCBkbG1vZCAqCi1oZWFkZXJfZGxtb2RFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotI2RlZmluZSBETE1PREVOVFJZX05BTUVfTEVOR1RIIDEyCi0gICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwotICAgIGludCAgICAgICAgICAgICByZXN1bHQ7Ci0gICAgc3RydWN0IGRsbW9kICAgKmRsbSA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIGRsbW9kX2luZGV4OwotCi0gICAgbWVtY3B5KG5ld25hbWUsIHZwLT5uYW1lLCB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKLQotICAgIGZvciAoZGxtb2RfaW5kZXggPSAxOyBkbG1vZF9pbmRleCA8IGRsbW9kX25leHRfaW5kZXg7IGRsbW9kX2luZGV4KyspIHsKLSAgICAgICAgZGxtID0gZGxtb2RfZ2V0X2J5X2luZGV4KGRsbW9kX2luZGV4KTsKLQotICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiZGxtb2RFbnRyeSBkbG06ICVwIGRsbW9kX2luZGV4OiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGxtLCBkbG1vZF9pbmRleCkpOwotCi0gICAgICAgIGlmIChkbG0pIHsKLSAgICAgICAgICAgIG5ld25hbWVbMTJdID0gZGxtb2RfaW5kZXg7Ci0gICAgICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7Ci0KLSAgICAgICAgICAgIGlmICgoZXhhY3QgJiYgKHJlc3VsdCA9PSAwKSkgfHwgKCFleGFjdCAmJiAocmVzdWx0IDwgMCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRsbW9kX2luZGV4ID49IGRsbW9kX25leHRfaW5kZXgpIHsKLSAgICAgICAgaWYgKGRsbW9kX2luZGV4ID09IGRsbW9kX25leHRfaW5kZXggJiYKLSAgICAgICAgICAgIGV4YWN0ICYmIHZwLT5tYWdpYyA9PSBETE1PRFNUQVRVUykKLQotICAgICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kU3RhdHVzOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1jcHkobmFtZSwgbmV3bmFtZSwgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7Ci0gICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsKLSAgICByZXR1cm4gZGxtOwotfQotCi11X2NoYXIgICAgICAgICAqCi12YXJfZGxtb2RFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKLSAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSAgICAvKgotICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyIAotICAgICAqLwotICAgIHN0cnVjdCBkbG1vZCAgICpkbG07Ci0KLSAgICAqdmFyX2xlbiA9IHNpemVvZihpbnQpOyAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBub3QgKi8KLQotICAgIGRsbSA9IGhlYWRlcl9kbG1vZEVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpOwotICAgIGlmIChkbG0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKgotICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuIAotICAgICAqLwotICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBETE1PRE5BTUU6Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZE5hbWU7Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+bmFtZSk7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPm5hbWU7Ci0gICAgY2FzZSBETE1PRFBBVEg6Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFBhdGg7Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+cGF0aCk7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPnBhdGg7Ci0gICAgY2FzZSBETE1PREVSUk9SOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPmVycm9yKTsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+ZXJyb3I7Ci0gICAgY2FzZSBETE1PRFNUQVRVUzoKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kU3RhdHVzOwotICAgICAgICBsb25nX3JldHVybiA9IGRsbS0+c3RhdHVzOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfZGxtb2RFbnRyeVxuIiwKLSAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQKK3N0YXRpYyBpbnQKIHdyaXRlX2RsbW9kTmFtZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCiAgICAgICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKQEAgLTU2OSwxMyArNDQwLDEzIEBACiAgICAgICAgIGRsbSA9IGRsbW9kX2dldF9ieV9pbmRleChuYW1lWzEyXSk7CiAgICAgICAgIGlmICghZGxtIHx8IGRsbS0+c3RhdHVzID09IERMTU9EX0xPQURFRCkKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwotICAgICAgICBtZW1jcHkoZGxtLT5uYW1lLCB2YXJfdmFsLCB2YXJfdmFsX2xlbik7CisgICAgICAgIHN0cm5jcHkoZGxtLT5uYW1lLCAoY29uc3QgY2hhciAqKSB2YXJfdmFsLCB2YXJfdmFsX2xlbik7CiAgICAgICAgIGRsbS0+bmFtZVt2YXJfdmFsX2xlbl0gPSAwOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAotaW50CitzdGF0aWMgaW50CiB3cml0ZV9kbG1vZFBhdGgoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAogICAgICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCkBAIC01OTYsMTMgKzQ2NywxMyBAQAogICAgICAgICBkbG0gPSBkbG1vZF9nZXRfYnlfaW5kZXgobmFtZVsxMl0pOwogICAgICAgICBpZiAoIWRsbSB8fCBkbG0tPnN0YXR1cyA9PSBETE1PRF9MT0FERUQpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKLSAgICAgICAgbWVtY3B5KGRsbS0+cGF0aCwgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOworICAgICAgICBzdHJuY3B5KGRsbS0+cGF0aCwgKGNvbnN0IGNoYXIgKikgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOwogICAgICAgICBkbG0tPnBhdGhbdmFyX3ZhbF9sZW5dID0gMDsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKLWludAorc3RhdGljIGludAogd3JpdGVfZGxtb2RTdGF0dXMoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCiAgICAgICAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLApAQCAtNjEwLDcgKzQ4MSw3IEBACiAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewogICAgIC8qCi0gICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIgCisgICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIKICAgICAgKi8KICAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtOwogCkBAIC02MjQsOCArNDk1LDggQEAKICAgICB9CiAgICAgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgLyoKLSAgICAgICAgICogb2JqZWN0IGlkZW50aWZpZXIgaW4gZm9ybSAuMS4zLjYuMS40LjEuMjAyMS4xMy4xNC4yLjEuNC54IAotICAgICAgICAgKiB3aGVyZSBYIGlzIGluZGV4IHdpdGggb2Zmc2V0IDEyIAorICAgICAgICAgKiBvYmplY3QgaWRlbnRpZmllciBpbiBmb3JtIC4xLjMuNi4xLjQuMS4yMDIxLjEzLjE0LjIuMS40LngKKyAgICAgICAgICogd2hlcmUgWCBpcyBpbmRleCB3aXRoIG9mZnNldCAxMgogICAgICAgICAgKi8KIAogICAgICAgICBkbG0gPSBkbG1vZF9nZXRfYnlfaW5kZXgobmFtZVsxMl0pOwpAQCAtNjU5LDEzICs1MzAsMTY3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZGxvcGVuIHN1cHBvcnQgKi8KKy8qCisgKiBoZWFkZXJfZGxtb2RFbnRyeSguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MKKyAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAorICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKKyAqIHdyaXRlX21ldGhvZAorICoKKyAqLworCisKK3N0YXRpYyBzdHJ1Y3QgZGxtb2QgKgoraGVhZGVyX2RsbW9kRW50cnkoc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyNkZWZpbmUgRExNT0RFTlRSWV9OQU1FX0xFTkdUSCAxMgorICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworICAgIHN0cnVjdCBkbG1vZCAgICpkbG0gPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAgICBkbG1vZF9pbmRleDsKKworICAgIG1lbWNweShuZXduYW1lLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7CisgICAgKndyaXRlX21ldGhvZCA9IDA7CisKKyAgICBmb3IgKGRsbW9kX2luZGV4ID0gMTsgZGxtb2RfaW5kZXggPCBkbG1vZF9uZXh0X2luZGV4OyBkbG1vZF9pbmRleCsrKSB7CisgICAgICAgIGRsbSA9IGRsbW9kX2dldF9ieV9pbmRleChkbG1vZF9pbmRleCk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgImRsbW9kRW50cnkgZGxtOiAlcCBkbG1vZF9pbmRleDogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGRsbSwgZGxtb2RfaW5kZXgpKTsKKworICAgICAgICBpZiAoZGxtKSB7CisgICAgICAgICAgICBuZXduYW1lWzEyXSA9IGRsbW9kX2luZGV4OworICAgICAgICAgICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOworCisgICAgICAgICAgICBpZiAoKGV4YWN0ICYmIChyZXN1bHQgPT0gMCkpIHx8ICghZXhhY3QgJiYgKHJlc3VsdCA8IDApKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkbG1vZF9pbmRleCA+PSBkbG1vZF9uZXh0X2luZGV4KSB7CisgICAgICAgIGlmIChkbG1vZF9pbmRleCA9PSBkbG1vZF9uZXh0X2luZGV4ICYmCisgICAgICAgICAgICBleGFjdCAmJiB2cC0+bWFnaWMgPT0gRExNT0RTVEFUVVMpCisKKyAgICAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtY3B5KG5hbWUsIG5ld25hbWUsICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7CisgICAgcmV0dXJuIGRsbTsKK30KKworc3RhdGljIHVfY2hhciAgICAgICAgICoKK3Zhcl9kbG1vZEVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqIHZwLAorICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIC8qCisgICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIKKyAgICAgKi8KKyAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtOworCisgICAgKnZhcl9sZW4gPSBzaXplb2YoaW50KTsgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgbm90ICovCisKKyAgICBkbG0gPSBoZWFkZXJfZGxtb2RFbnRyeSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKTsKKyAgICBpZiAoZGxtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLgorICAgICAqLworICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisgICAgY2FzZSBETE1PRE5BTUU6CisgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZE5hbWU7CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+bmFtZSk7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPm5hbWU7CisgICAgY2FzZSBETE1PRFBBVEg6CisgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFBhdGg7CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+cGF0aCk7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPnBhdGg7CisgICAgY2FzZSBETE1PREVSUk9SOgorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPmVycm9yKTsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+ZXJyb3I7CisgICAgY2FzZSBETE1PRFNUQVRVUzoKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kU3RhdHVzOworICAgICAgICBsb25nX3JldHVybiA9IGRsbS0+c3RhdHVzOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfZGxtb2RFbnRyeVxuIiwKKyAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogdGhpcyB2YXJpYWJsZSBkZWZpbmVzIGZ1bmN0aW9uIGNhbGxiYWNrcyBhbmQgdHlwZSByZXR1cm4KKyAqIGluZm9ybWF0aW9uIGZvciB0aGUgZGxtb2QgbWliCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdmFyaWFibGU0IGRsbW9kX3ZhcmlhYmxlc1tdID0geworICAgIHtETE1PRE5FWFRJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZGxtb2QsIDEsIHsxfX0sCisgICAge0RMTU9ETkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDJ9fSwKKyAgICB7RExNT0RQQVRILCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgM319LAorICAgIHtETE1PREVSUk9SLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCA0fX0sCisgICAge0RMTU9EU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDV9fSwKK307CisKK3N0YXRpYyBvaWQgZGxtb2RfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCAxMywgMTQgfTsKIAogdm9pZAogaW5pdF9kbG1vZCh2b2lkKQogewotICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsCi0gICAgICAgICAgICAgICAgIkR5bmFtaWMgbW9kdWxlcyBub3Qgc3VwcG9ydCBvbiB0aGlzIHBsYXRmb3JtXG4iKSk7CisgICAgUkVHSVNURVJfTUlCKCJkbG1vZCIsIGRsbW9kX3ZhcmlhYmxlcywgdmFyaWFibGU0LCBkbG1vZF92YXJpYWJsZXNfb2lkKTsKKworICAgIC8qCisgICAgICogVE9ETzogUkVHSVNURVJfU1lTT1JfRU5UUlkKKyAgICAgKi8KKworICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJyZWdpc3RlciBtaWJcbiIpKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkbG1vZCIsIGRsbW9kX3BhcnNlX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbG1vZF9mcmVlX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlLW5hbWUgbW9kdWxlLXBhdGgiKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHAgPSBnZXRlbnYoIlNOTVBETE1PRFBBVEgiKTsKKyAgICAgICAgc3RybmNweShkbG1vZF9wYXRoLCBTTk1QRExNT0RQQVRILCBzaXplb2YoZGxtb2RfcGF0aCkpOworICAgICAgICBkbG1vZF9wYXRoWyBzaXplb2YoZGxtb2RfcGF0aCkgLSAxIF0gPSAwOworICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgaWYgKHBbMF0gPT0gJzonKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihkbG1vZF9wYXRoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGxtb2RfcGF0aFtsZW4gLSAxXSAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RybmNhdChkbG1vZF9wYXRoLCAiOiIsIHNpemVvZihkbG1vZF9wYXRoKSAtIGxlbiAtIDEpOworICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RybmNhdChkbG1vZF9wYXRoLCBwICsgMSwgICBzaXplb2YoZGxtb2RfcGF0aCkgLSBsZW4pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RybmNweShkbG1vZF9wYXRoLCBwLCBzaXplb2YoZGxtb2RfcGF0aCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZGxtb2RfcGF0aFsgc2l6ZW9mKGRsbW9kX3BhdGgpLTEgXSA9IDA7CisgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgImRsbW9kX3BhdGg6ICVzXG4iLCBkbG1vZF9wYXRoKSk7CiB9CiAKLSNlbmRpZgorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcikKKwordm9pZAorc2h1dGRvd25fZGxtb2Qodm9pZCkKK3sKKyAgICBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkbG1vZCIpOworICAgIHVucmVnaXN0ZXJfbWliKGRsbW9kX3ZhcmlhYmxlc19vaWQsIE9JRF9MRU5HVEgoZGxtb2RfdmFyaWFibGVzX29pZCkpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgKaW5kZXggNjkwYmM0NS4uOTU5MmJkZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oCkBAIC0zLDU4ICszLDE2IEBACiAgKgogICovCiAKLSNpZm5kZWYgX01JQkdST1VQX0RMTU9EX0gKLSNkZWZpbmUgX01JQkdST1VQX0RMTU9EX0gKKyNpZm5kZWYgTUlCR1JPVVBfRExNT0RfSAorI2RlZmluZSBNSUJHUk9VUF9ETE1PRF9ICiAKLS8qCi0gKiBUT0RPICNpbmNsdWRlICJtaWJkZWZzLmgiIAotICovCisjaWYgKCFkZWZpbmVkKEhBVkVfRExGQ05fSCkgfHwgIWRlZmluZWQoSEFWRV9ETE9QRU4pKSAmJiAhZGVmaW5lZChXSU4zMikKK2NvbmZpZ19lcnJvcihEeW5hbWljIG1vZHVsZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtKQorI2VuZGlmCiAKIGNvbmZpZ19hZGRfbWliKFVDRC1ETE1PRC1NSUIpCi0jaWZuZGVmIFNOTVBETE1PRFBBVEgKLSNkZWZpbmUgU05NUERMTU9EUEFUSCAiL3Vzci9sb2NhbC9saWIvc25tcC9kbG1vZCIKLSNlbmRpZgotICAgICBzdHJ1Y3QgZGxtb2QgewotICAgICAgICAgc3RydWN0IGRsbW9kICAgKm5leHQ7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgaW5kZXg7Ci0gICAgICAgICBjaGFyICAgICAgICAgICAgbmFtZVs2NCArIDFdOwotICAgICAgICAgY2hhciAgICAgICAgICAgIHBhdGhbMjU1ICsgMV07Ci0gICAgICAgICBjaGFyICAgICAgICAgICAgZXJyb3JbMjU1ICsgMV07Ci0gICAgICAgICB2b2lkICAgICAgICAgICAqaGFuZGxlOwotICAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKLSAgICAgfTsKIAotICAgICB2b2lkICAgICAgICAgICAgZGxtb2RfbG9hZF9tb2R1bGUoc3RydWN0IGRsbW9kICopOwotICAgICB2b2lkICAgICAgICAgICAgZGxtb2RfdW5sb2FkX21vZHVsZShzdHJ1Y3QgZGxtb2QgKik7Ci0gICAgIHN0cnVjdCBkbG1vZCAgICpkbG1vZF9jcmVhdGVfbW9kdWxlKHZvaWQpOwotICAgICB2b2lkICAgICAgICAgICAgZGxtb2RfZGVsZXRlX21vZHVsZShzdHJ1Y3QgZGxtb2QgKik7Ci0gICAgIHN0cnVjdCBkbG1vZCAgICpkbG1vZF9nZXRfYnlfaW5kZXgoaW50KTsKK3ZvaWQgaW5pdF9kbG1vZCh2b2lkKTsKK3ZvaWQgc2h1dGRvd25fZGxtb2Qodm9pZCk7CiAKLSAgICAgdm9pZCAgICAgICAgICAgIGRsbW9kX2luaXQodm9pZCk7Ci0gICAgIHZvaWQgICAgICAgICAgICBkbG1vZF9kZWluaXQodm9pZCk7Ci0KLSAgICAgZXh0ZXJuIHZvaWQgICAgIGluaXRfZGxtb2Qodm9pZCk7Ci0gICAgIGV4dGVybiB2b2lkICAgICBkZWluaXRfZGxtb2Qodm9pZCk7Ci0KLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2RsbW9kOwotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfZGxtb2RFbnRyeTsKLSAgICAgZXh0ZXJuIFdyaXRlTWV0aG9kIHdyaXRlX2RsbW9kTmFtZTsKLSAgICAgZXh0ZXJuIFdyaXRlTWV0aG9kIHdyaXRlX2RsbW9kUGF0aDsKLSAgICAgZXh0ZXJuIFdyaXRlTWV0aG9kIHdyaXRlX2RsbW9kU3RhdHVzOwotCi0jZGVmaW5lIERMTU9ETkVYVElOREVYIAkJMQotI2RlZmluZSBETE1PRElOREVYICAgICAJCTIKLSNkZWZpbmUgRExNT0ROQU1FICAgICAgCQkzCi0jZGVmaW5lIERMTU9EUEFUSCAgICAgIAkJNAotI2RlZmluZSBETE1PREVSUk9SICAgICAJCTUKLSNkZWZpbmUgRExNT0RTVEFUVVMgICAgCQk2Ci0KLSNkZWZpbmUgRExNT0RfTE9BREVECQkxCi0jZGVmaW5lIERMTU9EX1VOTE9BREVECQkyCi0jZGVmaW5lIERMTU9EX0VSUk9SCQkzCi0jZGVmaW5lIERMTU9EX0xPQUQJCTQKLSNkZWZpbmUJRExNT0RfVU5MT0FECQk1Ci0jZGVmaW5lIERMTU9EX0NSRUFURQkJNgotI2RlZmluZSBETE1PRF9ERUxFVEUJCTcKLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfRExNT0RfSCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNSUJHUk9VUF9ETE1PRF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYwppbmRleCAwZjExZTk5Li43ZjNiY2IxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMKQEAgLTExLDExICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTExMiw5ICsxMDgsNiBAQAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0xMjIsNyArMTE1LDcgQEAKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgImVycm9ybWliLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogc3RhdGljIHRpbWVfdCAgIGVycm9yc3RhdHVzdGltZSA9IDA7CiBzdGF0aWMgaW50ICAgICAgZXJyb3JzdGF0dXNwcmlvciA9IDA7CkBAIC0xNTksMTQgKzE1MiwxNCBAQAogICAgICAqIGluZm9ybWF0aW9uIGF0IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9lcnJvcl92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLAotICAgICAgICAge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCmluZGV4IDVkY2IyY2MuLjUwMTY0MmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaApAQCAtNiw3ICs2LDcgQEAKIAogdm9pZCAgICAgICAgICAgIGluaXRfZXJyb3JtaWIodm9pZCk7CiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAgICAgIHZvaWQgICAgICAgICAgICBzZXRQZXJyb3JzdGF0dXMoY29uc3QgY2hhciAqKTsKICAgICAgdm9pZCAgICAgICAgICAgIHNldGVycm9yc3RhdHVzKGNvbnN0IGNoYXIgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYwppbmRleCA0Mjk5MjE3Li4xNGIwODRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMCwxMSArMTEsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTEwMCwyMiArOTcsMjEgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLSNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAotaW50ICAgICAgICAgICAgIHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJleHRlbnNpYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInV0aWxpdGllcy9leGVjdXRlLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShnZXRfZXh0ZW5faW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwYXJzZV9taWJvaWQpCiAKIGV4dGVybiBzdHJ1Y3QgbXlwcm9jICpwcm9jd2F0Y2g7ICAgICAgICAvKiBtb3ZlZCB0byBwcm9jLmMgKi8KIGV4dGVybiBpbnQgICAgICBudW1wcm9jczsgICAgICAgLyogZGl0dG8gKi8KQEAgLTEzMywyMCArMTI5LDIwIEBACiAgKiB0aGUgcmVsb2NhdGFibGUgZXh0ZW5zaWJsZSBjb21tYW5kcyB2YXJpYWJsZXMgCiAgKi8KIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtNSUJJTkRFWH19LAotICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge0VSUk9STkFNRX19LAotICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge1NIRUxMQ09NTUFORH19LAotICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtFUlJPUkZMQUd9fSwKLSAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge0VSUk9STVNHfX0sCi0gICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge0VSUk9SRklYfX0sCi0gICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtFUlJPUkZJWENNRH19CisgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7TUlCSU5ERVh9fSwKKyAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtTSEVMTENPTU1BTkR9fSwKKyAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7RVJST1JGTEFHfX0sCisgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtFUlJPUk1TR319LAorICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtFUlJPUkZJWH19LAorICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7RVJST1JGSVhDTUR9fQogfTsKIAogCkBAIC0xNTUsMjAgKzE1MSwyMCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX2V4dGVuc2libGVfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtTSEVMTENPTU1BTkR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7RVJST1JNU0d9fSwKLSAgICAgICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtFUlJPUkZJWH19LAotICAgICAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtFUlJPUkZJWENNRH19CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtTSEVMTENPTU1BTkR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7RVJST1JNU0d9fSwKKyAgICAgICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtFUlJPUkZJWH19LAorICAgICAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtFUlJPUkZJWENNRH19CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmgKaW5kZXggNTU4ZjE0Yi4uMjRiZDE2ZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaApAQCAtNyw2ICs3LDcgQEAKIAogdm9pZCAgICAgICAgICAgIGluaXRfZXh0ZW5zaWJsZSh2b2lkKTsKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKIGNvbmZpZ19yZXF1aXJlKHV0aWxpdGllcy9leGVjdXRlKQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMKaW5kZXggMDBjOThkNC4uOWUzNDVkOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYwpAQCAtMTIsMTEgKzEyLDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMjUsOSArMjEsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKQEAgLTQxLDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgImZpbGUuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAKICNkZWZpbmUgTUFYRklMRSAgIDIwCiAKQEAgLTUyLDEyICs0NSwxOCBAQAogaW5pdF9maWxlKHZvaWQpCiB7CiAgICAgc3RydWN0IHZhcmlhYmxlMiBmaWxlX3RhYmxlW10gPSB7Ci0gICAgICAgIHtGSUxFX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7MX19LAotICAgICAgICB7RklMRV9OQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHsyfX0sCi0gICAgICAgIHtGSUxFX1NJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHszfX0sCi0gICAgICAgIHtGSUxFX01BWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezR9fSwKLSAgICAgICAge0ZJTEVfRVJST1IsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHsxMDB9fSwKLSAgICAgICAge0ZJTEVfTVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHsxMDF9fQorICAgICAgICB7RklMRV9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHsxfX0sCisgICAgICAgIHtGSUxFX05BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHsyfX0sCisgICAgICAgIHtGSUxFX1NJWkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7M319LAorICAgICAgICB7RklMRV9NQVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7NH19LAorICAgICAgICB7RklMRV9FUlJPUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHsxMDB9fSwKKyAgICAgICAge0ZJTEVfTVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7MTAxfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaAppbmRleCA4YjIyMmM1Li40NTUwODZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCkBAIC03LDYgKzcsOCBAQAogCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCisKIHZvaWQgICAgICAgICAgICBpbml0X2ZpbGUodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMKaW5kZXggZGIwOTRkMy4uOWM1ZjlmOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYwpAQCAtMzAsMTUgKzMwLDIxIEBACiAgICAgICogaW5mb3JtYXRpb24gYXQgCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBocF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge0hQQ09ORiwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hwLCAxLCB7SFBDT05GfX0sCi0gICAgICAgIHtIUFJFQ09ORklHLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaHAsIDEsIHtIUFJFQ09ORklHfX0sCi0gICAgICAgIHtIUEZMQUcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ocCwgMSwge0hQRkxBR319LAotICAgICAgICB7SFBMT0dNQVNLLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaHAsIDEsIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0hQU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaHAsIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtIUENPTkYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtIUENPTkZ9fSwKKyAgICAgICAge0hQUkVDT05GSUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtIUFJFQ09ORklHfX0sCisgICAgICAgIHtIUEZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtIUEZMQUd9fSwKKyAgICAgICAge0hQTE9HTUFTSywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7SFBTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgaHB0cmFwX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7SFBUUkFQLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9ocCwgMSwge0hQVFJBUH19LAorICAgICAgICB7SFBUUkFQLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtIUFRSQVB9fSwKICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMKaW5kZXggYzVjZTkwNi4uMDVjNjBiNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMKQEAgLTY2LDYgKzY2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTczLDkgKzc0LDEyIEBACiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKICAqLwogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2luY2x1ZGUgPHRpbWUuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyKQorCisKIC8qCiAgKiBMb2FkIHJlcXVpcmVkIGRyaXZlcnMgYW5kIGxpYnJhcmllcy4KICAqLwpAQCAtODQsOSArODgsMTAgQEAKICAgICAjaW5jbHVkZSA8a3N0YXQuaD4KICAgICAjaWZkZWYgSEFWRV9QSUNMX0ggCiAgICAgICAgICNpbmNsdWRlIDxwaWNsLmg+IC8qIGFjY2Vzc2VzIHRoZSBwaWNsZCBkYWVtb24gKi8KKyAgICAjZWxzZSAKKyAgICAgICAgLyogdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IFN1bi1iYXNlZCBzZW5zb3JzICovCisJI2luY2x1ZGUgPC91c3IvcGxhdGZvcm0vc3VuNHUvaW5jbHVkZS9zeXMvZW52Y3RybC5oPgogICAgICNlbmRpZiAKLS8qIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSBTdW4tYmFzZWQgc2Vuc29ycyAqLwotICAgICNpbmNsdWRlIDwvdXNyL3BsYXRmb3JtL3N1bjR1L2luY2x1ZGUvc3lzL2VudmN0cmwuaD4KICNlbHNlCiAgICAgI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgogICAgICNkZWZpbmUgQ09ORklHX0ZJTEVfTkFNRSAiL2V0Yy9zZW5zb3JzLmNvbmYiCkBAIC0xMzEsNDEgKzEzNiw0MSBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTE1URU1QU0VOU09SU0lOREVYICAgIDMKLSAgICB7TE1URU1QU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezIsIDEsIDF9fSwKKyAgICB7TE1URU1QU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezIsIDEsIDF9fSwKICNkZWZpbmUgICBMTVRFTVBTRU5TT1JTREVWSUNFICAgNAotICAgIHtMTVRFTVBTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MiwgMSwgMn19LAorICAgIHtMTVRFTVBTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MiwgMSwgMn19LAogI2RlZmluZSAgIExNVEVNUFNFTlNPUlNWQUxVRSAgICA1Ci0gICAge0xNVEVNUFNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MiwgMSwgM319LAorICAgIHtMTVRFTVBTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezIsIDEsIDN9fSwKICNkZWZpbmUgICBMTUZBTlNFTlNPUlNJTkRFWCAgICAgOAotICAgIHtMTUZBTlNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHszLCAxLCAxfX0sCisgICAge0xNRkFOU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezMsIDEsIDF9fSwKICNkZWZpbmUgICBMTUZBTlNFTlNPUlNERVZJQ0UgICAgOQotICAgIHtMTUZBTlNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHszLCAxLCAyfX0sCisgICAge0xNRkFOU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezMsIDEsIDJ9fSwKICNkZWZpbmUgICBMTUZBTlNFTlNPUlNWQUxVRSAgICAgMTAKLSAgICB7TE1GQU5TRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezMsIDEsIDN9fSwKKyAgICB7TE1GQU5TRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezMsIDEsIDN9fSwKICNkZWZpbmUgICBMTVZPTFRTRU5TT1JTSU5ERVggICAgMTMKLSAgICB7TE1WT0xUU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezQsIDEsIDF9fSwKKyAgICB7TE1WT0xUU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezQsIDEsIDF9fSwKICNkZWZpbmUgICBMTVZPTFRTRU5TT1JTREVWSUNFICAgMTQKLSAgICB7TE1WT0xUU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezQsIDEsIDJ9fSwKKyAgICB7TE1WT0xUU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezQsIDEsIDJ9fSwKICNkZWZpbmUgICBMTVZPTFRTRU5TT1JTVkFMVUUgICAgMTUKLSAgICB7TE1WT0xUU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs0LCAxLCAzfX0sCisgICAge0xNVk9MVFNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NCwgMSwgM319LAogI2RlZmluZSAgIExNTUlTQ1NFTlNPUlNJTkRFWCAgICAxOAotICAgIHtMTU1JU0NTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NSwgMSwgMX19LAorICAgIHtMTU1JU0NTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NSwgMSwgMX19LAogI2RlZmluZSAgIExNTUlTQ1NFTlNPUlNERVZJQ0UgICAxOQotICAgIHtMTU1JU0NTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NSwgMSwgMn19LAorICAgIHtMTU1JU0NTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NSwgMSwgMn19LAogI2RlZmluZSAgIExNTUlTQ1NFTlNPUlNWQUxVRSAgICAyMAotICAgIHtMTU1JU0NTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezUsIDEsIDN9fSwKKyAgICB7TE1NSVNDU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs1LCAxLCAzfX0sCiB9OwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0yNDcsNyArMjUyLDcgQEAKICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCiB7CiAgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwotICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0cmluZ1tTUFJJTlRfTUFYX0xFTl07CisgICAgc3RhdGljIGNoYXIgICAgIHN0cmluZ1tTUFJJTlRfTUFYX0xFTl07CiAKICAgICBpbnQgICAgICAgICAgICAgc19pbmRleDsKICAgICBpbnQgICAgICAgICAgICAgc190eXBlID0gLTE7CkBAIC0zNzksOSArMzg0LDkgQEAKICAgICB9CiAKICAgICBfc2Vuc29yX2xvYWQodCk7IC8qIEknbGwgbGV0IHRoZSBsaW51eCBwZW9wbGUgZGVjaWRlIHdoZXRoZXIgdGhleSB3YW50IHRvIGxvYWQgcmlnaHQgYXdheSAqLworbGVhdmluZzoKICNlbmRpZiAvKiBub3Qgc29sYXJpczIgKi8KIAotbGVhdmluZzoKICAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICI8PSBzZW5zb3JfaW5pdFxuIikpOwogICAgIHJldHVybiByZXM7CiB9CkBAIC00MTUsNyArNDIwLDcgQEAKICAgIHRoZSBzY2FsZSB2YXJpYWJsZSBoYW5kbGVzIG1pbmlWb2x0cyAqLwogCiBzdGF0aWMgaW50Ci1yZWFkX251bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjaGFyICpwcm9wICxpbnQgc2NhbGUsIGludCAqdmFsdWUpCityZWFkX251bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjb25zdCBjaGFyICpwcm9wLCBpbnQgc2NhbGUsIGludCAqdmFsdWUpCiAgewogICBwaWNsX25vZGVoZGxfdCAgc2Vuc29yaDsKICAgcGljbF9wcm9waW5mb190IHNlbnNvcl9pbmZvOwpAQCAtNDgxLDcgKzQ4Niw3IEBACiB9IC8qIGVuZCBvZiByZWFkX251bV9zZW5zb3IoKSAqLwogCiBzdGF0aWMgaW50Ci1yZWFkX2VudW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgY2hhciAqKm9wdGlvbnMsIHVfaW50ICp2YWx1ZSkKK3JlYWRfZW51bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjb25zdCBjaGFyICoqb3B0aW9ucywgdV9pbnQgKnZhbHVlKQogewogICBwaWNsX25vZGVoZGxfdCAgc2Vuc29yaDsKICAgcGljbF9wcm9waW5mb190IHNlbnNvcl9pbmZvOwpAQCAtNTI2LDEwICs1MzEsMTAgQEAKIAogLyogc2NhbGUgdmFyaWFibGUgaGFuZGxlcyBtaW5pVm9sdHMqLwogIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIAotICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0sIAotICAgICAgICAgICAgICAgICAgY2hhciBwcm9wdmFsW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgaW50IHR5cCwgaW50IHNjYWxlKQorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0sIAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wdmFsW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgaW50IHR5cCwgaW50IHNjYWxlKQogewogICBpbnQgdmFsdWUgPSAwOwogICBwaWNsX2Vycm5vX3QgZXJyb3JfY29kZTsKQEAgLTU1MywxMCArNTU4LDEwIEBACiAgIH0KIH0gLyogZW5kIHByb2Nlc3NfbnVtX3NlbnNvcigpICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX2VudW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgCi0gICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgCi0gICAgICAgICAgICAgICAgICBpbnQgdHlwLCBjaGFyICoqb3B0aW9ucykKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCAKKyAgICAgICAgICAgICAgICAgIGludCB0eXAsIGNvbnN0IGNoYXIgKipvcHRpb25zKQogewogICBpbnQgdmFsdWUgPSAwOwogICBwaWNsX2Vycm5vX3QgZXJyb3JfY29kZTsKQEAgLTU4Myw2OSArNTg4LDY5IEBACiAvKiBUaGUgZm9sbG93aW5nIGFyZSBtb2R1bGVzIGZvciBkZWFsaW5nIHdpdGggaW5kaXZpZHVhbCBzZW5zb3JzIHR5cGVzLgogICAgVGhleSBjYWxsIHRoZSBnZW5lcmljIG1vZHVsZXMgYWJvdmUuICAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19pbmRpdmlkdWFsX2ZhbihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIAotICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKICAgcHJvY2Vzc19udW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsICJBdG9EU2Vuc29yVmFsdWUiLCBGQU5fVFlQRSwgMSk7CiB9CiAKIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfbmV3dHlwZV9mYW4ocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKICAgcHJvY2Vzc19udW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsICJTcGVlZCIsIEZBTl9UWVBFLCAxKTsKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc190ZW1wZXJhdHVyZV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogICBwcm9jZXNzX251bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgIlRlbXBlcmF0dXJlIiwgVEVNUF9UWVBFLCAxMDAwKTsKIH0gLyogTUlCIGFza3MgZm9yIG1DICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX3ZvbHRhZ2Vfc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKICAgcHJvY2Vzc19udW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsICJWb2x0YWdlIiwgVk9MVF9UWVBFLCAxMDAwKTsKIH0gLyogTUlCIGFza3MgZm9yIG1WICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX2RpZ2l0YWxfc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKICAgcHJvY2Vzc19udW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsICJBdG9EU2Vuc29yVmFsdWUiLCBWT0xUX1RZUEUsIDEpOwogfQogCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX3N3aXRjaChwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAKLSAgY2hhciAqc2V0dGluZ3NbXT17Ik9GRiIsIk9OIiwiTk9STUFMIiwiTE9DS0VEIiwiVU5LTk9XTiIsCisgIGNvbnN0IGNoYXIgKnNldHRpbmdzW109eyJPRkYiLCJPTiIsIk5PUk1BTCIsIkxPQ0tFRCIsIlVOS05PV04iLAogICAgICAgICAgICAgICAgICAgICJESUFHIiwiU0VDVVJFIixOVUxMfTsKIAogICBwcm9jZXNzX2VudW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsIE1JU0NfVFlQRSwgc2V0dGluZ3MpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19sZWQocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogCi0gIGNoYXIgKnNldHRpbmdzW109eyJPRkYiLCJPTiIsIkJMSU5LIixOVUxMfTsKKyAgY29uc3QgY2hhciAqc2V0dGluZ3NbXT17Ik9GRiIsIk9OIiwiQkxJTksiLE5VTEx9OwogICBwcm9jZXNzX2VudW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsIE1JU0NfVFlQRSwgc2V0dGluZ3MpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19pMmMocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewotICBjaGFyICpzZXR0aW5nc1tdPXsiT0siLE5VTEx9OworICBjb25zdCBjaGFyICpzZXR0aW5nc1tdPXsiT0siLE5VTEx9OwogICBwcm9jZXNzX2VudW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsIE1JU0NfVFlQRSwgc2V0dGluZ3MpOwogfQogCkBAIC03NTIsNiArNzU3LDEyIEBACiB7CiAjaWZkZWYgc29sYXJpczIKICAgICBpbnQgaSxqOworI2lmZGVmIEhBVkVfUElDTF9IIAorICAgIGludCBlcl9jb2RlOworICAgIHBpY2xfZXJybm9fdCAgICAgZXJyb3JfY29kZTsKKyAgICBpbnQgbGV2ZWw9MDsKKyAgICBwaWNsX25vZGVoZGxfdCAgcm9vdGg7CisjZWxzZQogICAgIGludCB0eXA7CiAgICAgaW50IHRlbXA9MDsgLyogZG8gbm90IHJlc2V0IHRoaXMgbGF0ZXIsIG1vcmUgdGhhbiBvbmUgdHlwIGhhcyB0ZW1wZXJhdHVyZXMqLwogICAgIGludCBvdGhlcj0wOwpAQCAtNzYxLDYgKzc3Miw3IEBACiAgICAgZW52Y3RybF9mYW5fdCAqZmFuX2luZm87CiAgICAgZW52Y3RybF9wc190ICpwb3dlcl9pbmZvOwogICAgIGVudmN0cmxfZW5jbF90ICplbmNfaW5mbzsKKyNlbmRpZgogCiAvKiBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICJSZWFkaW5nIHRoZSBzZW5zb3JzXG4iKSk7ICovCiAKQEAgLTc3NiwxMyArNzg4LDYgQEAKIC8qIHRyeSBwaWNsZCAoaWYgc3VwcG9ydGVkKSwgaWYgdGhhdCBkb2Vzbid0IHdvcmssIHRyeSBrc3RhdCAqLwogI2lmZGVmIEhBVkVfUElDTF9IIAogCi0vKiBzb21lIG1vcmUgZGVjbGFyYXRpb25zICovCi0KLSAgICBpbnQgZXJfY29kZTsKLSAgICBwaWNsX2Vycm5vX3QgICAgIGVycm9yX2NvZGU7Ci0gICAgaW50IGxldmVsPTA7Ci0gICAgcGljbF9ub2RlaGRsX3QgIHJvb3RoOwotCiBlcl9jb2RlID0gcGljbF9pbml0aWFsaXplKCk7CiAKIGlmIChlcl9jb2RlID09IFBJQ0xfU1VDQ0VTUykgewpAQCAtODA5LDcgKzgxNCw3IEBACiAKIH0gLyplbmQgZWxzZSBwaWNsX2luaXRpYWxpemUgKi8KIAotI2VuZGlmICAvKiBlbmQgb2YgcGljbGQgc2VjdGlvbiAqLworI2Vsc2UgIC8qIGVuZCBvZiBwaWNsZCBzZWN0aW9uICovCiAvKiBpbml0aWFsaXplIGtzdGF0ICovCiAKIGtjID0ga3N0YXRfb3BlbigpOwpAQCAtOTIzLDcgKzkyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgdGVtcCsrOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICJ1bmtub3duIGVsZW1lbnQgaW5zdGFuY2UgJmQgdHlwZSAmZCB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICJ1bmtub3duIGVsZW1lbnQgaW5zdGFuY2UgJWQgdHlwZSAlZCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZW5jX2luZm8tPmluc3RhbmNlLCBlbmNfaW5mby0+dHlwZSwgZW5jX2luZm8tPnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IC8qIGVuZCBzd2l0Y2ggKi8KQEAgLTkzNywxNCArOTQyLDE3IEBACiAgICAga3N0YXRfY2xvc2Uoa2MpOwogCiB9IC8qIGVuZCBlbHNlIGtzdGF0ICovCisjZW5kaWYKKwogI2Vsc2UgLyogZW5kIHNvbGFyaXMyIG9ubHkgaWUuIGlmZGVmIGV2ZXJ5dGhpbmcgZWxzZSAqLwogCiAgICAgY29uc3Qgc2Vuc29yc19jaGlwX25hbWUgKmNoaXA7CiAgICAgY29uc3Qgc2Vuc29yc19mZWF0dXJlX2RhdGEgKmRhdGE7CiAgICAgaW50ICAgICAgICAgICAgIGNoaXBfbnIgPSAwOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7CiAgICAgdW5zaWduZWQgaW50ICAgIGkgPSAwOwogCisgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAiPT4gc2Vuc29yX2xvYWRcbiIpKTsKKwogICAgIGZvciAoaSA9IDA7IGkgPCBOX1RZUEVTOyBpKyspCiAgICAgewogICAgICAgICBzZW5zb3JfYXJyYXlbaV0ubiA9IDA7CkBAIC05NTYsNyArOTY0LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAvKiBDb250aW51aW5nIHdvdWxkIGJlIHVuc2FmZSAqLwogICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2Fubm90IG1hbGxvYyBzZW5zb3IgYXJyYXkhIik7IAotICAgICAgICAgICByZXR1cm4gKHJjID0gMSk7CisgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9IC8qIGVuZCBpZiAqLwogICAgICAgICBzZW5zb3JfYXJyYXlbaV0uY3VycmVudF9sZW4gPSBERUZBVUxUX1NFTlNPUlM7CiAgICAgfSAvKiBlbmQgZm9yICovCkBAIC05NzQsNyArOTgyLDcgQEAKICAgICAgICAgICAgICAgICAhc2Vuc29yc19nZXRfbGFiZWwoKmNoaXAsIGRhdGEtPm51bWJlciwgJmxhYmVsKSAmJgogICAgICAgICAgICAgICAgICFzZW5zb3JzX2dldF9mZWF0dXJlKCpjaGlwLCBkYXRhLT5udW1iZXIsICZ2YWwpKSB7CiAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHR5cGUgPSAtMTsKLSAgICAgICAgICAgICAgICBmbG9hdCAgICAgICAgICAgbXVsOworICAgICAgICAgICAgICAgIGZsb2F0ICAgICAgICAgICBtdWwgPSAwOwogICAgICAgICAgICAgICAgIF9zZW5zb3JfYXJyYXkgICphcnJheTsKIAogICAgICAgICAgICAgICAgIC8qIFRoZSBsYWJlbCwgYXMgZGV0ZXJtaW5lZCBmb3IgYSBnaXZlbiBjaGlwIGluIHNlbnNvcnMuY29uZiwKQEAgLTEwMTYsMTQgKzEwMjQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUobGFiZWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICB9IC8qIGVuZCBpZiBsYWJlbCAqLwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJjPTEpOworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICAgfSAvKiBlbmQgaWYgYXJyYXktPnNlbnNvciAqLwogICAgICAgICAgICAgICAgICAgICBhcnJheS0+Y3VycmVudF9sZW4gPSBuZXdfc2l6ZSAvIHNpemVvZihfc2Vuc29yKTsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAidHlwZSAjJWQgaW5jcmVhc2VkIHRvICVkIGVsZW1lbnRzXG4iLCB0eXBlLCBhcnJheS0+Y3VycmVudF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAidHlwZSAjJWQgaW5jcmVhc2VkIHRvICVkIGVsZW1lbnRzXG4iLCB0eXBlLCAoaW50KWFycmF5LT5jdXJyZW50X2xlbikpOwogICAgICAgICAgICAgICAgIH0gLyogZW5kIGlmIGFycmF5LT5jdXJyZW50ICovCiAgICAgICAgICAgICAgICAgc3RybGNweShhcnJheS0+c2Vuc29yW2FycmF5LT5uXS5uYW1lLCBsYWJlbCwgTUFYX05BTUUpOwogICAgICAgICAgICAgICAgIGFycmF5LT5zZW5zb3JbYXJyYXktPm5dLnZhbHVlID0gKGludCkgKHZhbCAqIG11bCk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnMiLCJzZW5zb3IgJWQsIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzIiwic2Vuc29yICVzLCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS0+c2Vuc29yW2FycmF5LT5uXS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5zZW5zb3JbYXJyYXktPm5dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPm4rKzsKQEAgLTEwMzQsMTAgKzEwNDIsMTEgQEAKIAkgICAgfSAvKiBlbmQgaWYgbGFiZWwgKi8KICAgICAgICAgfSAvKiBlbmQgd2hpbGUgZGF0YSAqLwogICAgIH0gLyogZW5kIHdoaWxlIGNoaXAgKi8KLSAgICByZXR1cm4gcmM7CisgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAiPD0gc2Vuc29yX2xvYWRcbiIpKTsKICNlbmRpZiAgLyogZW5kIGVsc2UgaWUuIGlmZGVmIGV2ZXJ5dGhpbmcgZWxzZSAqLwogICAgIC8qIFVwZGF0ZSB0aGUgdGltZXN0YW1wIGFmdGVyIGEgbG9hZC4gKi8KICAgICB0aW1lc3RhbXAgPSB0OworICAgIHJldHVybiAwOwogfQogCiAjaWZuZGVmIHNvbGFyaXMyCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oCmluZGV4IGFmZWQ2ZmEuLjkyMDk4YTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oCkBAIC02LDcgKzYsNyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTE1TRU5TT1JTX0gKICNkZWZpbmUgX01JQkdST1VQX0xNU0VOU09SU19ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiBjb25maWdfYWRkX21pYihMTS1TRU5TT1JTLU1JQikKIAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9sbVNlbnNvcnModm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NTc3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYwpAQCAtMCwwICsxLDIwNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSAiaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmgiCisjaW5jbHVkZSAidWNkLXNubXAvbG1zZW5zb3JzTWliLmgiCisKK25ldHNubXBfY29udGFpbmVyICpzZW5zb3JDb250YWluZXIgPSBOVUxMOworCit2b2lkIGluaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoY29uc3QgY2hhciAqdGFibGVOYW1lLCBjb25zdCBvaWQgKnRhYmxlT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICpmaWx0ZXIsIGludCBtdWx0ICk7CisKK2ludCBfc2Vuc29yX2ZpbHRlcl90ZW1wKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApOworaW50IF9zZW5zb3JfZmlsdGVyX2ZhbiggIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICk7CitpbnQgX3NlbnNvcl9maWx0ZXJfdm9sdCggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKTsKK2ludCBfc2Vuc29yX2ZpbHRlcl9taXNjKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApOworCitzdGF0aWMgY29uc3Qgb2lkIGxtVGVtcFNlbnNvcnNUYWJsZV9vaWRbXSAgID0gezEsMyw2LDEsNCwxLDIwMjEsMTMsMTYsMn07CitzdGF0aWMgY29uc3Qgb2lkIGxtRmFuU2Vuc29yc1RhYmxlX29pZFtdICAgID0gezEsMyw2LDEsNCwxLDIwMjEsMTMsMTYsM307CitzdGF0aWMgY29uc3Qgb2lkIGxtVm9sdFNlbnNvcnNUYWJsZV9vaWRbXSAgID0gezEsMyw2LDEsNCwxLDIwMjEsMTMsMTYsNH07CitzdGF0aWMgY29uc3Qgb2lkIGxtTWlzY1NlbnNvcnNUYWJsZV9vaWRbXSAgID0gezEsMyw2LDEsNCwxLDIwMjEsMTMsMTYsNX07CisgICAgICAgICAgICAvKiBBbGwgdGhlIHRhYmxlcyBoYXZlIHRoZSBzYW1lIGxlbmd0aCByb290IE9JRCAqLworY29uc3Qgc2l6ZV90IGxtU2Vuc29yc1RhYmxlc19vaWRfbGVuID0gT0lEX0xFTkdUSChsbU1pc2NTZW5zb3JzVGFibGVfb2lkKTsKKworCisvKiBJbml0aWFsaXNlIHRoZSBMTSBTZW5zb3JzIE1JQiBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfbG1zZW5zb3JzTWliKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL2xtc2Vuc29yc01pYiIsIkluaXRpYWxpemluZyBMTS1TRU5TT1JTLU1JQiB0YWJsZXNcbiIpKTsKKworICAgIC8qIAorICAgICAqIEluaXRpYWxpc2UgdGhlIGZvdXIgTE0tU0VOU09SUy1NSUIgdGFibGVzCisgICAgICoKKyAgICAgKiBUaGV5IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIHJlZ2lzdHJhdGlvbiBjb2RlLgorICAgICAqLworICAgIGluaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoICJsbVRlbXBTZW5zb3JzVGFibGUiLCBsbVRlbXBTZW5zb3JzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vuc29yX2ZpbHRlcl90ZW1wLCAxMDAwICk7ICAvKiBNSUIgYXNrcyBmb3IgbUMgKi8KKyAgICBpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKCAibG1GYW5TZW5zb3JzVGFibGUiLCAgbG1GYW5TZW5zb3JzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vuc29yX2ZpbHRlcl9mYW4sICAxKTsKKyAgICBpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKCAibG1Wb2x0U2Vuc29yc1RhYmxlIiwgbG1Wb2x0U2Vuc29yc1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl9maWx0ZXJfdm9sdCwgMTAwMCApOyAgLyogTUlCIGFza3MgZm9yIG1WICovCisgICAgaW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZSggImxtTWlzY1NlbnNvcnNUYWJsZSIsIGxtTWlzY1NlbnNvcnNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfZmlsdGVyX21pc2MsIDEgKTsKK30KKworLyoKKyAqIENvbW1vbiBpbml0aWFsaXNhdGlvbiBjb2RlLCB1c2VkIGZvciBzZXR0aW5nIHVwIGFsbCBmb3VyIHRhYmxlcworICovCit2b2lkCitpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKGNvbnN0IGNoYXIgKnRhYmxlTmFtZSwgY29uc3Qgb2lkICp0YWJsZU9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgKmZpbHRlciwgaW50IG11bHQgKQoreworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfY2FjaGUgICAgICpjYWNoZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworCisgICAgLyoKKyAgICAgKiBFbnN1cmUgdGhlIEhBTCBzZW5zb3JzIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXNlZCwKKyAgICAgKiAgIGFuZCByZXRyaWV2ZSB0aGUgbWFpbiBzZW5zb3JzIGNvbnRhaW5lci4KKyAgICAgKiBUaGlzIHRhYmxlIHdpbGwgdGhlbiBiZSByZWdpc3RlcmVkIHVzaW5nIGEgZmlsdGVyIG9uIHRoaXMgY29udGFpbmVyLgorICAgICAqLworICAgIHNlbnNvckNvbnRhaW5lciA9IGdldF9zZW5zb3JfY29udGFpbmVyKCk7CisgICAgaWYgKCAhc2Vuc29yQ29udGFpbmVyICkgeworICAgICAgICBpbml0X2h3X3NlbnNvcnMoICk7CisgICAgICAgIHNlbnNvckNvbnRhaW5lciA9IGdldF9zZW5zb3JfY29udGFpbmVyKCk7CisgICAgfQorICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInNlbnNvclRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGNvbnRhaW5lci0+aW5zZXJ0X2ZpbHRlciA9IGZpbHRlcjsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgoIHNlbnNvckNvbnRhaW5lciwgY29udGFpbmVyICk7CisKKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgYmFzaWMgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBmb3IgdGhlIHRhYmxlCisgICAgICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICB0YWJsZU5hbWUsIGxtU2Vuc29yc1RhYmxlc19oYW5kbGVyLAorICAgICAgICAgICAgICAgdGFibGVPSUQsICBsbVNlbnNvcnNUYWJsZXNfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkKKyAgICAgICAgICAgICAgKTsKKworICAgIC8qCisgICAgICogUmVnaXN0ZXIgdGhlIHRhYmxlIHVzaW5nIHRoZSBmaWx0ZXJlZCBjb250YWluZXIKKyAgICAgKiBJbmNsdWRlIGFuIGluZGljYXRvciBvZiBhbnkgc2NhbGluZyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzZW5zb3IgdmFsdWUKKyAgICAgKi8KKyAgICByZWctPm15X3JlZ192b2lkID0gKHZvaWQgKikodWludHB0cl90KW11bHQ7CisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKTsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9MTVNFTlNPUlNfSU5ERVg7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9MTVNFTlNPUlNfVkFMVUU7CisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcmVnaXN0ZXIoIHJlZywgdGFibGVfaW5mbywgY29udGFpbmVyLCAwICk7CisKKyAgICAvKgorICAgICAqIElmIHRoZSBIQUwgc2Vuc29ycyBtb2R1bGUgd2FzIGNvbmZpZ3VyZWQgYXMgYW4gb24tZGVtYW5kIGNhY2hpbmcKKyAgICAgKiAgbW9kdWxlIChyYXRoZXIgdGhhbiBiZWluZyBhdXRvbWF0aWNhbGx5IGxvYWRlZCByZWd1bGFybHkpLAorICAgICAqICB0aGVuIGVuc3VyZSB0aGlzIHRhYmxlIG1ha2VzIHVzZSBvZiB0aGF0IGNhY2hlLgorICAgICAqLworICAgIGNhY2hlID0gZ2V0X3NlbnNvcl9jYWNoZSgpOworICAgIGlmICggY2FjaGUgKSB7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoIGNhY2hlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9jb250YWluZXIiKTsKKyAgICB9CisKK30KKworCisvKgorICogIENvbnRhaW5lciBmaWx0ZXJzIGZvciB0aGUgZm91ciB0YWJsZXMKKyAqCisgKiAgVXNlZCB0byBlbnN1cmUgdGhhdCBzZW5zb3IgZW50cmllcyBhcHBlYXIgaW4gdGhlIGFwcHJvcHJpYXRlIHRhYmxlLgorICovCitpbnQgX3NlbnNvcl9maWx0ZXJfdGVtcCggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKSB7CisgICAgY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3AgPSAoY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqKXY7CisgICAgLyogT25seSBtYXRjaGVzIHRlbXBlcmF0dXJlIHNlbnNvcnMgKi8KKyAgICByZXR1cm4gKCggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApID8gMCA6IDEgKTsKK30KKworaW50IF9zZW5zb3JfZmlsdGVyX2ZhbiggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKSB7CisgICAgY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3AgPSAoY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqKXY7CisgICAgLyogT25seSBtYXRjaGVzIGZhbiBzZW5zb3JzICovCisgICAgcmV0dXJuICgoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICkgPyAwIDogMSApOworfQorCitpbnQgX3NlbnNvcl9maWx0ZXJfdm9sdCggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKSB7CisgICAgY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3AgPSAoY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqKXY7CisgICAgLyogT25seSBtYXRjaGVzIHZvbHRhZ2Ugc2Vuc29ycyAoQUMgb3IgREMpICovCisgICAgcmV0dXJuICgoKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREMgKSB8fAorICAgICAgICAgICAgICggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0FDICkpID8gMCA6IDEgKTsKK30KKworaW50IF9zZW5zb3JfZmlsdGVyX21pc2MoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICkgeworICAgIGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKnNwID0gKGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKil2OworICAgIC8qIE1hdGNoZXMgZXZlcnl0aGluZyBleGNlcHQgdGVtcGVyYXR1cmUsIGZhbiBvciB2b2x0YWdlIHNlbnNvcnMgKi8KKyAgICByZXR1cm4gKCgoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKSB8fAorICAgICAgICAgICAgICggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9SUE0gICAgICAgICApIHx8CisgICAgICAgICAgICAgKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREMgICkgfHwKKyAgICAgICAgICAgICAoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9BQyAgKSkgPyAxIDogMCApOworfQorCisKKy8qCisgKiBIYW5kbGUgcmVxdWVzdHMgZm9yIGFueSBvZiB0aGUgZm91ciBsbVh4eHhTZW5zb3JzVGFibGVzIAorICoKKyAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBhbGwgdGhlIHRhYmxlIHNoYXJlIHRoZQorICogIHNhbWUgc3RydWN0dXJlIGFuZCBiZWhhdmlvdXIuCisgKi8KK2ludAorbG1TZW5zb3JzVGFibGVzX2hhbmRsZXIoCisgICAgbmV0c25tcF9taWJfaGFuZGxlciAgICAgICAgICAgICAgICpoYW5kbGVyLAorICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAqcmVnaW5mbywKKyAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICAgICAgKnJlcWluZm8sCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAgICAgICpyZXF1ZXN0cykgeworCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgKnJlcXVlc3Q7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNlbnNvcl9pbmZvOworICAgIGludCBtdWx0ICA9ICh1aW50cHRyX3QpcmVnaW5mby0+bXlfcmVnX3ZvaWQ7CisKKyAgICBERUJVR01TR1RMKCggInVjZC1zbm1wL2xtc2Vuc29yc01pYiIsImxtU2Vuc29yc1RhYmxlc19oYW5kbGVyIC0gcm9vdDogIikpOworICAgIERFQlVHTVNHT0lEKCgidWNkLXNubXAvbG1zZW5zb3JzTWliIiwgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pKTsKKyAgICBERUJVR01TRygoICAgInVjZC1zbm1wL2xtc2Vuc29yc01pYiIsIiwgbW9kZSAlZFxuIiwgcmVxaW5mby0+bW9kZSApKTsKKyAgICAvKgorICAgICAqIFRoaXMgaXMgYSByZWFkLW9ubHkgdGFibGUsIHNvIHdlIG9ubHkgbmVlZCB0byBoYW5kbGUgR0VUIHJlcXVlc3RzLgorICAgICAqICAgIChUaGUgY29udGFpbmVyIGhlbHBlciBjb252ZXJ0cyBHRVRORVhULT5HRVQgcmVxdWVzdHMgYXV0b21hdGljYWxseSkuCisgICAgICovCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHNlbnNvcl9pbmZvID0gKG5ldHNubXBfc2Vuc29yX2luZm8gKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoICFzZW5zb3JfaW5mbyApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgdGFibGVfaW5mbyAgID0gIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0xNU0VOU09SU19JTkRFWDoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8tPmlkeC5vaWRzWzBdKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0xNU0VOU09SU19ERVZJQ0U6CisgICAgICAgICAgICAgICAgaWYgKCBzZW5zb3JfaW5mby0+ZGVzY3JbMF0gIT0gJ1wwJyApIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8tPmRlc2NyLCBzdHJsZW4oc2Vuc29yX2luZm8tPmRlc2NyKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8tPm5hbWUsICBzdHJsZW4oc2Vuc29yX2luZm8tPm5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9MTVNFTlNPUlNfVkFMVUU6CisgICAgICAgICAgICAgICAgLyogTXVsdGlwbHkgdGhlIHZhbHVlIGJ5IHRoZSBhcHByb3ByaWF0ZSBzY2FsaW5nIGZhY3RvciBmb3IgdGhpcyB0YWJsZSAqLworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9HQVVHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobXVsdCpzZW5zb3JfaW5mby0+dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg1ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBMTV9TRU5TT1JTX01JQl9ICisjZGVmaW5lIExNX1NFTlNPUlNfTUlCX0gKKworY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycykKK2NvbmZpZ19hZGRfbWliKExNLVNFTlNPUlMtTUlCKQorCisvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KK3ZvaWQgaW5pdF9sbXNlbnNvcnNNaWIodm9pZCk7CisKKy8qCisgKiBIYW5kbGVyIGFuZCBDb2x1bW4gZGVmaW5pdGlvbnMgZm9yIGxtWHh4eFNlbnNvcnNUYWJsZQorICoKKyAqIE5vdGUgdGhhdCB0aGUgc2FtZSBoYW5kbGVyIChhbmQgaGVuY2UgdGhlIHNhbWUKKyAqICBjb2x1bW4gaWRlbnRpZmllcnMpIGFyZSB1c2VkIGZvciBhbGwgZm91ciB0YWJsZXMuCisgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYWxsIHRoZSB0YWJsZSBzaGFyZSB0aGUKKyAqICBzYW1lIHN0cnVjdHVyZSBhbmQgYmVoYXZpb3VyLgorICovCitOZXRzbm1wX05vZGVfSGFuZGxlciBsbVNlbnNvcnNUYWJsZXNfaGFuZGxlcjsKKyNkZWZpbmUgQ09MVU1OX0xNU0VOU09SU19JTkRFWAkJMQorI2RlZmluZSBDT0xVTU5fTE1TRU5TT1JTX0RFVklDRQkJMgorI2RlZmluZSBDT0xVTU5fTE1TRU5TT1JTX1ZBTFVFCQkzCisKKyNlbmRpZiAvKiBMTV9TRU5TT1JTX01JQl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMKaW5kZXggYzMwNjUwNi4uMzE3ODMzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYwpAQCAtOTksMTEgKzk5LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTEyLDE2ICsxMDgsMTYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZkZWYgZHluaXgKICNpbmNsdWRlIDxzeXMvbWNfdm1wYXJhbS5oPgogI2VuZGlmCiAjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKQogI2luY2x1ZGUgPHN5cy9wc3RhdC5oPgogI2VuZGlmCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19TWVNHRVRfSApAQCAtMTM0LDEwICsxMzAsMjIgQEAKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgImxvYWRhdmUuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAjaW5jbHVkZSAia2VybmVsLmgiCiAKLWRvdWJsZSAgICAgICAgICBtYXhsb2FkWzNdOworc3RhdGljIGRvdWJsZSBtYXhsb2FkWzNdOworc3RhdGljIGludCBsYUNvbmZpZ1NldCA9IDA7CisKK3N0YXRpYyBpbnQKK2xvYWRhdmVfc3RvcmVfY29uZmlnKGludCBhLCBpbnQgYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgICBjaGFyIGxpbmVbU05NUF9NQVhCVUZfU01BTExdOworICAgIGlmIChsYUNvbmZpZ1NldCA+IDApIHsKKyAgICAgICAgc25wcmludGYobGluZSwgU05NUF9NQVhCVUZfU01BTEwsICJwbG9hZCAlLjAyZiAlLjAyZiAlLjAyZiIsIG1heGxvYWRbMF0sIG1heGxvYWRbMV0sIG1heGxvYWRbMl0pOworICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CiAKIHZvaWQKIGluaXRfbG9hZGF2ZSh2b2lkKQpAQCAtMTQ4LDI0ICsxNTYsMjQgQEAKICAgICAgKiBpbmZvcm1hdGlvbiBhdCAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbG9hZGF2ZV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtMT0FEQVZFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtMT0FEQVZFfX0sCi0gICAgICAgIHtMT0FETUFYVkFMLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtMT0FETUFYVkFMfX0sCi0gICAgICAgIHtMT0FEQVZFSU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7TE9BREFWRUlOVH19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge0xPQURBVkUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0xPQURBVkV9fSwKKyAgICAgICAge0xPQURNQVhWQUwsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtMT0FETUFYVkFMfX0sCisgICAgICAgIHtMT0FEQVZFSU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7TE9BREFWRUlOVH19LAogI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUwotICAgICAgICB7TE9BREFWRUZMT0FULCBBU05fT1BBUVVFX0ZMT0FULCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtMT0FEQVZFRkxPQVR9fSwKKyAgICAgICAge0xPQURBVkVGTE9BVCwgQVNOX09QQVFVRV9GTE9BVCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7TE9BREFWRUZMT0FUfX0sCiAjZW5kaWYKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0VSUk9STVNHfX0KKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKQEAgLTE4MSw5ICsxODksMjIgQEAKICAgICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2xvYWRhdmUiLCBleHRlbnNpYmxlX2xvYWRhdmVfdmFyaWFibGVzLAogICAgICAgICAgICAgICAgICB2YXJpYWJsZTIsIGxvYWRhdmVfdmFyaWFibGVzX29pZCk7CiAKKyAgICBsYUNvbmZpZ1NldCA9IDA7CisKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigibG9hZCIsIGxvYWRhdmVfcGFyc2VfY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRhdmVfZnJlZV9jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heDEgW21heDVdIFttYXgxNV0iKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJwbG9hZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGF2ZV9wYXJzZV9jb25maWcsIE5VTEwsIE5VTEwpOworCisKKyAgICAvKgorICAgICAqIHdlIG5lZWQgdG8gYmUgY2FsbGVkIGJhY2sgbGF0ZXIKKyAgICAgKi8KKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGF2ZV9zdG9yZV9jb25maWcsIE5VTEwpOworCiB9CiAKIHZvaWQKQEAgLTE5MSw2ICsyMTIsMjUgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgaTsKIAorICAgIGlmIChzdHJjbXAodG9rZW4sICJwbG9hZCIpID09IDApIHsKKyAgICAgICAgaWYgKGxhQ29uZmlnU2V0IDwgMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBsb2FkXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxhQ29uZmlnU2V0Kys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobGFDb25maWdTZXQgPiAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IGxvYWRcbiIpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaCBhbmQgY29weSBpbiB0aGlzIHZhbHVlLgorICAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgbGFDb25maWdTZXQgPSAtMTsKKyAgICB9CisKICAgICBmb3IgKGkgPSAwOyBpIDw9IDI7IGkrKykgewogICAgICAgICBpZiAoY3B0ciAhPSBOVUxMKQogICAgICAgICAgICAgbWF4bG9hZFtpXSA9IGF0b2YoY3B0cik7CkBAIC0yMTgsMTIgKzI1OCw2IEBACiBpbnQKIHRyeV9nZXRsb2FkYXZnKGRvdWJsZSAqcl9hdmUsIHNpemVfdCBzX2F2ZSkKIHsKLSNpZiBkZWZpbmVkKEhBVkVfR0VUTE9BREFWRykgfHwgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZCh1bHRyaXgpIFwKLSAgICB8fCBkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKGR5bml4KSBcCi0gICAgfHwgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9OTElTVCkgXAotICAgICAgICYmIGRlZmluZWQoTE9BREFWRV9TWU1CT0wpCi0gICAgZG91YmxlICAgICAgICAgKnBhdmUgPSByX2F2ZTsKLSNlbmRpZgogI2lmbmRlZiBIQVZFX0dFVExPQURBVkcKICNpZmRlZiBIQVZFX1NZU19GSVhQT0lOVF9ICiAgICAgZml4ICAgICAgICAgICAgIGZhdmVucnVuWzNdOwpAQCAtMjM3LDggKzI3MSw3IEBACiAjZGVmaW5lIEZJWF9UT19EQkwoX0lOKSAoKChkb3VibGUpIF9JTikvKChkb3VibGUpIEZTQ0FMRSkpCiAjZW5kaWYKICNlbmRpZgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCi0gICAgaW50ICAgICAgICAgICAgIGZhdmVucnVuWzNdOworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBwZXJmc3RhdF9jcHVfdG90YWxfdCBjczsKICNlbmRpZgogI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKQEAgLTI1MSwxNiArMjg0LDE2IEBACiAjZW5kaWYJLyogIUhBVkVfR0VUTE9BREFWRyAqLwogCiAjaWZkZWYgSEFWRV9HRVRMT0FEQVZHCi0gICAgaWYgKGdldGxvYWRhdmcocGF2ZSwgc19hdmUpID09IC0xKQorICAgIGlmIChnZXRsb2FkYXZnKHJfYXZlLCBzX2F2ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAoLTEpOwogI2VsaWYgZGVmaW5lZChsaW51eCkKICAgICB7CiAgICAgICAgIEZJTEUgICAgICAgICAgICppbiA9IGZvcGVuKCIvcHJvYy9sb2FkYXZnIiwgInIiKTsKICAgICAgICAgaWYgKCFpbikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9sb2FkYXZnXG4iKTsKKyAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9sb2FkYXZnXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICAgfQotICAgICAgICBmc2NhbmYoaW4sICIlbGYgJWxmICVsZiIsIHBhdmUsIChwYXZlICsgMSksIChwYXZlICsgMikpOworICAgICAgICBmc2NhbmYoaW4sICIlbGYgJWxmICVsZiIsIHJfYXZlLCAocl9hdmUgKyAxKSwgKHJfYXZlICsgMikpOwogICAgICAgICBmY2xvc2UoaW4pOwogICAgIH0KICNlbGlmIChkZWZpbmVkKHVsdHJpeCkgfHwgZGVmaW5lZChzdW4pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChkeW5peCkpCkBAIC0yNjgsMTQgKzMwMSwxNCBAQAogICAgICAgICAwKQogICAgICAgICByZXR1cm4gKC0xKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc19hdmU7IGkrKykKLSAgICAgICAgKihwYXZlICsgaSkgPSBGSVhfVE9fREJMKGZhdmVucnVuW2ldKTsKKyAgICAgICAgKihyX2F2ZSArIGkpID0gRklYX1RPX0RCTChmYXZlbnJ1bltpXSk7CiAjZWxpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpCiAgICAgaWYgKHBzdGF0X2dldGR5bmFtaWMoJnBzdF9idWYsIHNpemVvZihzdHJ1Y3QgcHN0X2R5bmFtaWMpLCAxLCAwKSA8IDApCiAgICAgICAgIHJldHVybigtMSk7CiAgICAgcl9hdmVbMF0gPSBwc3RfYnVmLnBzZF9hdmdfMV9taW47CiAgICAgcl9hdmVbMV0gPSBwc3RfYnVmLnBzZF9hdmdfNV9taW47CiAgICAgcl9hdmVbMl0gPSBwc3RfYnVmLnBzZF9hdmdfMTVfbWluOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpZihwZXJmc3RhdF9jcHVfdG90YWwoKHBlcmZzdGF0X2lkX3QgKilOVUxMLCAmY3MsIHNpemVvZihwZXJmc3RhdF9jcHVfdG90YWxfdCksIDEpID4gMCkgewogICAgICAgICByX2F2ZVswXSA9IGNzLmxvYWRhdmdbMF0gLyA2NTUzNi4wOwogICAgICAgICByX2F2ZVsxXSA9IGNzLmxvYWRhdmdbMV0gLyA2NTUzNi4wOwpAQCAtMjkwLDcgKzMyMyw3IEBACiAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL2xvYWRhdmUiLCAiaXJpeDY6ICVkICVkICVkXG4iLCBmYXZlbnJ1blswXSwgZmF2ZW5ydW5bMV0sIGZhdmVucnVuWzJdKSk7CiAjZWxpZiAhZGVmaW5lZChjeWd3aW4pCiAjaWYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfTkxJU1QpICYmIGRlZmluZWQoTE9BREFWRV9TWU1CT0wpCi0gICAgaWYgKGF1dG9fbmxpc3QoTE9BREFWRV9TWU1CT0wsIChjaGFyICopIHBhdmUsIHNpemVvZihkb3VibGUpICogc19hdmUpCisgICAgaWYgKGF1dG9fbmxpc3QoTE9BREFWRV9TWU1CT0wsIChjaGFyICopIHJfYXZlLCBzaXplb2YoZG91YmxlKSAqIHNfYXZlKQogICAgICAgICA9PSAwKQogI2VuZGlmCiAgICAgICAgIHJldHVybiAoLTEpOwpAQCAtMzE2LDYgKzM0OSw3MCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Cit3cml0ZV9sYUNvbmZpZyhpbnQgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisgICAgc3RhdGljIGRvdWJsZSBsYUNvbmZpZyA9IDA7CisKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgUkVTRVJWRTE6IC8qIENoZWNrIHZhbHVlcyBmb3IgYWNjZXB0YWJpbGl0eSAqLworICAgICAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9PQ1RFVF9TVFIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9sb2FkYXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBsYUNvbmZpZyBub3QgQVNOX09DVEVUX1NUUlxuIikpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiA4IHx8IHZhcl92YWxfbGVuIDw9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9sb2FkYXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBsYUNvbmZpZzogYmFkIGxlbmd0aFxuIikpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhQ29uZmlnU2V0IDwgMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBvYmplY3QgaXMgc2V0IGluIGEgcmVhZC1vbmx5IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSRVNFUlZFMjogLyogQWxsb2NhdGUgbWVtb3J5IGFuZCBzaW1pbGFyIHJlc291cmNlcyAqLworICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGJ1Zls4XTsKKyAgICAgICAgICAgIGludCBvbGRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgIGRvdWJsZSB2YWw7CisgICAgICAgICAgICBjaGFyICplbmRwOworCisgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiUuKnMiLCAoaW50KSB2YXJfdmFsX2xlbiwgKGNoYXIgKil2YXJfdmFsKTsKKyAgICAgICAgICAgIHZhbCA9IHN0cnRvZChidWYsICZlbmRwKTsKKworICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSB8fCAqZW5kcCAhPSAnXDAnIHx8IHZhbCA8IDAgfHwgdmFsID4gNjU1MzYuMDApIHsKKyAgICAgICAgICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvbG9hZGF2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIGxhQ29uZmlnOiBpbnZhbGlkIHZhbHVlXG4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVycm5vID0gb2xkX2Vycm5vOworCisgICAgICAgICAgICBsYUNvbmZpZyA9IHZhbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ09NTUlUOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaWR4ID0gbmFtZVtuYW1lX2xlbiAtIDFdIC0gMTsKKyAgICAgICAgICAgIG1heGxvYWRbaWR4XSA9IGxhQ29uZmlnOworICAgICAgICAgICAgbGFDb25maWdTZXQgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKIHVfY2hhciAgICAgICAgICoKIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUoc3RydWN0IHZhcmlhYmxlICogdnAsCiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCkBAIC0zMzUsNiArNDMyLDEwIEBACiAgICAgY2FzZSBNSUJJTkRFWDoKICAgICAgICAgbG9uZ19yZXQgPSBuYW1lWypsZW5ndGggLSAxXTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIExPQURNQVhWQUw6CisgICAgICAgIC8qIHNldHVwIHdyaXRlIG1ldGhvZCwgYnV0IGRvbid0IHJldHVybiB5ZXQgKi8KKyAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2xhQ29uZmlnOworICAgICAgICBicmVhazsKICAgICBjYXNlIEVSUk9STkFNRToKICAgICAgICAgc3ByaW50ZihlcnJtc2csICJMb2FkLSVkIiwgKChuYW1lWypsZW5ndGggLSAxXSA9PSAxKSA/IDEgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuYW1lWypsZW5ndGggLSAxXSA9PSAyKSA/IDUgOiAxNSkpKTsKQEAgLTM0Myw3ICs0NDQsNyBAQAogICAgIH0KICAgICBpZiAodHJ5X2dldGxvYWRhdmcoJmF2ZW5ydW5bMF0sIHNpemVvZihhdmVucnVuKSAvIHNpemVvZihhdmVucnVuWzBdKSkKICAgICAgICAgPT0gLTEpCi0gICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBMT0FEQVZFOgogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmgKaW5kZXggNDk3YmZiOC4uNGY1ZTdhNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaApAQCAtNCw3ICs0LDcgQEAKICNpZm5kZWYgX01JQkdST1VQX0xPQURBVkVfSAogI2RlZmluZSBfTUlCR1JPVVBfTE9BREFWRV9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbG9hZGF2ZSh2b2lkKTsKICAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2V4dGVuc2libGVfbG9hZGF2ZTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jCmluZGV4IDZiNjcyZmEuLjgzYjRlNGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYwpAQCAtOSwyMzUgKzksMTA0IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgImxvZ21hdGNoLmgiCisKICNpZmRlZiBIQVZFX1JFR0VYX0gKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLQotCi0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotI2luY2x1ZGUgImxvZ21hdGNoLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKIAotI2RlZmluZSBNQVhMT0dNQVRDSCAgIDUwCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGZpbGVuYW1lIHBhdHRlcm4KKyAqICBjb250YWlucyB0aGUgJSBjaGFyYWN0ZXIgaW5kaWNhdGluZyBhIHZhcmlhYmxlCisgKiAgZmlsZW5hbWUgKGkuZS4gaXQgdXNlcyBkYXRlL3RpbWUgZm9ybWF0IGNvbnRyb2wKKyAqICBjb2Rlcywgc2VlICdtYW4gZGF0ZScpIHRoZW4gZXhwYW5kcyB0aG9zZSBjb250cm9sCisgKiAgY29kZXMgYmFzZWQgb24gY3VycmVudCB0aW1lIGFuZCBzZXRzIHRoZQorICogIGZpbGVuYW1lIGZpZWxkIGluIHRoZSBzdHJ1Y3QuCisgKiAgUmV0dXJucyAxIGlmIHRoZSBmaWxlbmFtZSBjaGFuZ2VkLCAwIG90aGVyd2lzZQorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwogCi1zdHJ1Y3QgbG9nbWF0Y2hzdGF0IGxvZ21hdGNoVGFibGVbTUFYTE9HTUFUQ0hdOwotaW50ICAgICAgICAgICAgIGxvZ21hdGNoQ291bnQ7Ci0KLXZvaWQKLWluaXRfbG9nbWF0Y2godm9pZCkKK3N0YXRpYyBpbnQKK2xvZ21hdGNoX3VwZGF0ZV9maWxlbmFtZShjb25zdCBjaGFyICogcGF0dGVybiwgY2hhciAqIGN1cnJlbnRGaWxlbmFtZSkKIHsKLSAgICBzdHJ1Y3QgdmFyaWFibGUyIGxvZ21hdGNoX2luZm9bXSA9IHsKLSAgICAgICAge0xPR01BVENIX0lORk8sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAwfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgdmFyaWFibGUyIGxvZ21hdGNoX3RhYmxlW10gPSB7Ci0gICAgICAgIHtMT0dNQVRDSF9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxfX0sCi0gICAgICAgIHtMT0dNQVRDSF9OQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7Mn19LAotICAgICAgICB7TE9HTUFUQ0hfRklMRU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsCi0gICAgICAgICB7M319LAotICAgICAgICB7TE9HTUFUQ0hfUkVHRVgsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs0fX0sCi0gICAgICAgIHtMT0dNQVRDSF9HTE9CQUxDVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLAotICAgICAgICAgezV9fSwKLSAgICAgICAge0xPR01BVENIX0dMT0JBTENOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsCi0gICAgICAgICB7Nn19LAotICAgICAgICB7TE9HTUFUQ0hfQ1VSUkVOVENUUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsCi0gICAgICAgICB7N319LAotICAgICAgICB7TE9HTUFUQ0hfQ1VSUkVOVENOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsCi0gICAgICAgICB7OH19LAotICAgICAgICB7TE9HTUFUQ0hfQ09VTlRFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs5fX0sCi0gICAgICAgIHtMT0dNQVRDSF9DT1VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMH19LAotICAgICAgICB7TE9HTUFUQ0hfRlJFUSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMX19LAotICAgICAgICB7TE9HTUFUQ0hfRVJST1IsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTAwfX0sCi0gICAgICAgIHtMT0dNQVRDSF9NU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMDF9fQotICAgIH07CisgICAgdGltZV90IHQ7CisgICAgc3RydWN0IHRtICp0bXA7CisgICAgY2hhciBuZXdGaWxlbmFtZVsyNTZdOwogCiAgICAgLyoKLSAgICAgKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKLSAgICAgKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiBpZiB0aGUgZmlsZW5hbWUgcGF0dGVybiBkb2Vzbid0IGhhdmUgdGhlICIlIiBjaGFyYWN0ZXIganVzdCByZXR1cm4sCisgICAgICogc2luY2UgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqLwotICAgIG9pZCAgICAgICAgICAgICBsb2dtYXRjaF9pbmZvX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxNiwgMSB9OwotICAgIG9pZCAgICAgICAgICAgICBsb2dtYXRjaF92YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDE2LCAyLCAxIH07Ci0KLSAgICAvKgotICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIAotICAgICAqLwotICAgIFJFR0lTVEVSX01JQigidWNkLXNubXAvbG9nbWF0Y2giLCBsb2dtYXRjaF9pbmZvLCB2YXJpYWJsZTIsCi0gICAgICAgICAgICAgICAgIGxvZ21hdGNoX2luZm9fb2lkKTsKLSAgICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2xvZ21hdGNoIiwgbG9nbWF0Y2hfdGFibGUsIHZhcmlhYmxlMiwKLSAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfdmFyaWFibGVzX29pZCk7Ci0KLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigibG9nbWF0Y2giLCBsb2dtYXRjaF9wYXJzZV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfZnJlZV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZ21hdGNoIG5hbWUgcGF0aCBjeWNsZXRpbWUgcmVnZXgiKTsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICEhIS0tLSEhISBQVUJMSUMgISEhIC0tLSAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qIGxvZ21hdGNoX2ZyZWVfY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGlzIG1pYiBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQKLWxvZ21hdGNoX2ZyZWVfY29uZmlnKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0KLSAgICAvKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgKiB0aGUgb25seSBtZW1vcnkgd2UgaGF2ZSBhbGxvY2F0ZWQgICAgCi0gICAgICogaXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgcmVnY29tcCAgIAotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCBsb2dtYXRjaENvdW50OyBpKyspIHsKLQotICAgICAgICByZWdmcmVlKCYobG9nbWF0Y2hUYWJsZVtpXS5yZWdleEJ1ZmZlcikpOworICAgIGlmIChzdHJjaHIocGF0dGVybiwgJyUnKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBsb2dtYXRjaENvdW50ID0gMDsKLX0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAhISEtLS0hISEgUFVCTElDICEhISAtLS0gISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiBsb2dtYXRjaF9wYXJzZV9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiBwYXJzZSBvbmUgbGluZSBmcm9tIHNubXBkLmNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHQgPSB0aW1lKE5VTEwpOworICAgIHRtcCA9IGxvY2FsdGltZSgmdCk7CiAKLXZvaWQKLWxvZ21hdGNoX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKLXsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKCJsb2NhbHRpbWUiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAgY2hhciBzcGFjZV9uYW1lOwotICAgIGNoYXIgc3BhY2VfcGF0aDsKKyAgICAvKiByZXN1bHQgb2YgZXhwYW5zaW9uIG11c3QgZml0IGludG8gbmV3RmlsZW5hbWUsIG90aGVyd2lzZSByZXR1cm5pbmcgKi8KKyAgICBpZiAoc3RyZnRpbWUobmV3RmlsZW5hbWUsIHNpemVvZihuZXdGaWxlbmFtZSksIHBhdHRlcm4sIHRtcCkgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBpZiAobG9nbWF0Y2hDb3VudCA8IE1BWExPR01BVENIKSB7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5ID0gMzA7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0udGhpc0luZGV4ID0gbG9nbWF0Y2hDb3VudDsKLQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICogYmUgY2FyZWZ1bCB0aGlzIGNvdW50ZXIgbmVlZHMgdG8gYmUgIAotICAgICAgICAgKiByZXNldCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZSAgICAgICAgIAotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqLwotCi0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZ2xvYmFsTWF0Y2hDb3VudGVyID0gMDsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5jdXJyZW50TWF0Y2hDb3VudGVyID0gMDsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5tYXRjaENvdW50ZXIgPSAwOwotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnZpcmdpbiA9IFRSVUU7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uY3VycmVudEZpbGVQb3NpdGlvbiA9IDA7Ci0KLQotICAgICAgICAvKgotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqIGJlIGNhcmVmdWw6IHRoZSBmbGFnIDI1NSBtdXN0IGZpdCB0byAKLSAgICAgICAgICogdGhlIHNpemUgb2YgcmVnRXggYXMgZGVmaW5kZWQgaW4gICAgIAotICAgICAgICAgKiBsb2dtYXRjaC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICovCi0KLSAgICAgICAgc3NjYW5mKGNwdHIsICIlMjU1cyVjJTI1NXMlYyAlZCAlMjU1Y1xuIiwKLSAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubmFtZSwKLQkgICAgICAgJnNwYWNlX25hbWUsCi0gICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lLAotCSAgICAgICAmc3BhY2VfcGF0aCwKLSAgICAgICAgICAgICAgICYobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kpLAotICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeCk7Ci0KLQkvKgotCSAqIExvZyBhbiBlcnJvciB0aGVuIHJldHVybiBpZiBhbnkgb2YgdGhlIHN0cmluZ3Mgc2Nhbm5lZCBpbiB3ZXJlCi0JICogbGFyZ2VyIHRoZW4gdGhleSBzaG91bGQgaGF2ZSBiZWVuLgotCSAqLwotCWlmIChzcGFjZV9uYW1lICE9ICcgJykgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAibG9nbWF0Y2hfcGFyc2VfY29uZmlnOiB0aGUgbmFtZSBzY2FubmVkICIgXAotCQkgImluIGZyb20gbGluZSAlcyBpcyB0b28gbGFyZ2UuIGxvZ21hdGNoQ291bnQgPSAlZFxuIiwKLQkJIGNwdHIsIGxvZ21hdGNoQ291bnQpOwotCQlyZXR1cm47Ci0JfSBlbHNlIGlmIChzcGFjZV9wYXRoICE9ICcgJykgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAibG9nbWF0Y2hfcGFyc2VfY29uZmlnOiB0aGUgZmlsZSBuYW1lICIgXAotCQkgInNjYW5uZWQgaW4gZnJvbSBsaW5lICVzIGlzIHRvbyBsYXJnZS4gbG9nbWF0Y2hDb3VudCA9ICVkXG4iLAotCQkgICAgY3B0ciwgbG9nbWF0Y2hDb3VudCk7Ci0JCXJldHVybjsKLQl9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKiBqdXN0IHRvIGJlIHNhZmUgIk5VTEwiIHRoZSBlbmQgb2YgICAgCi0gICAgICAgICAqIHRoZSBhcmFyeSByZWdFeCBhcyBzc2NhbmYgd29uJ3QgZG8gICAKLSAgICAgICAgICogaXQgd2l0aCB0aGUgJWMgbW9kaWZpZXIgICAgICAgICAgICAgIAotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqLwotCi0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXhbMjU1XSA9ICdcMCc7Ci0KLQotICAgICAgICAvKgotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqIG5vdyBjb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gICAKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKi8KLQotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm15UmVnZXhFcnJvciA9Ci0gICAgICAgICAgICByZWdjb21wKCYobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdleEJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXgsCi0gICAgICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQik7Ci0KLSAgICAgICAgaWYgKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5ID4gMCkgewotICAgICAgICAgICAgc25tcF9hbGFybV9yZWdpc3Rlcihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfUkVQRUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU05NUEFsYXJtQ2FsbGJhY2sgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTG9nbWF0Y2hfU2NoZWR1bGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0pCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvZ21hdGNoQ291bnQrKzsKKyAgICAvKiBpZiBzYW1lIGFzIGN1cnJlbnQgZmlsZW5hbWUsIGp1c3QgcmV0dXJuICovCisgICAgaWYgKHN0cmNtcChjdXJyZW50RmlsZW5hbWUsIG5ld0ZpbGVuYW1lKSA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG90aGVyd2lzZSB1cGRhdGUgY3VycmVudEZpbGVuYW1lIGFuZCByZXR1cm4gMSAqLworICAgICAgICBzdHJjcHkoY3VycmVudEZpbGVuYW1lLCBuZXdGaWxlbmFtZSk7CisgICAgICAgIHJldHVybiAxOwogICAgIH0KIH0KIAorc3RydWN0IGxvZ21hdGNoc3RhdCB7CisgICAgY2hhciAgICAgICAgICAgIGZpbGVuYW1lUGF0dGVyblsyNTZdOworICAgIGNoYXIgICAgICAgICAgICBmaWxlbmFtZVsyNTZdOworICAgIGNoYXIgICAgICAgICAgICByZWdFeFsyNTZdOworICAgIGNoYXIgICAgICAgICAgICBuYW1lWzI1Nl07CisgICAgRklMRSAgICAgICAgICAgKmxvZ2ZpbGU7CisgICAgbG9uZyAgICAgICAgICAgIGN1cnJlbnRGaWxlUG9zaXRpb247CisgICAgdW5zaWduZWQgbG9uZyAgIGdsb2JhbE1hdGNoQ291bnRlcjsKKyAgICB1bnNpZ25lZCBsb25nICAgY3VycmVudE1hdGNoQ291bnRlcjsKKyAgICB1bnNpZ25lZCBsb25nICAgbWF0Y2hDb3VudGVyOworICAgIHJlZ2V4X3QgICAgICAgICByZWdleEJ1ZmZlcjsKKyAgICBpbnQgICAgICAgICAgICAgbXlSZWdleEVycm9yOworICAgIGludCAgICAgICAgICAgICB2aXJnaW47CisgICAgaW50ICAgICAgICAgICAgIHRoaXNJbmRleDsKKyAgICBpbnQgICAgICAgICAgICAgZnJlcXVlbmN5OworfTsKKworI2RlZmluZSBNQVhMT0dNQVRDSCAgIDI1MAorCitzdGF0aWMgc3RydWN0IGxvZ21hdGNoc3RhdCBsb2dtYXRjaFRhYmxlW01BWExPR01BVENIXTsKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgIGxvZ21hdGNoQ291bnQgPSAwOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICEhIS0tLSEhISBQVUJMSUMgISEhIC0tLSAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqIHVwZGF0ZUxvZ21hdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJhY2sgYnkgc25tcGQgYWxhcm1zICAgICAgICAgICAgICAgICAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQotdm9pZAorc3RhdGljIHZvaWQKIHVwZGF0ZUxvZ21hdGNoKGludCBpaW5kZXgpCiB7CiAKQEAgLTI1MCw2ICsxMTksNyBAQAogICAgIGludCAgICAgICAgICAgICB0b29iaWc7CiAgICAgaW50ICAgICAgICAgICAgIGFueUNoYW5nZXMgPSBGQUxTRTsKICAgICBzdHJ1Y3Qgc3RhdCAgICAgc2I7CisgICAgY2hhciAgICAgICAgICAgIGxhc3RGaWxlbmFtZVsyNTZdOwogCiAgICAgLyoKICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCkBAIC0yNjIsNyArMTMyLDcgQEAKICAgICAgKi8KIAogICAgIHNucHJpbnRmKHBlcmZpbGVuYW1lLCBzaXplb2YocGVyZmlsZW5hbWUpLCAiJXMvc25tcGRfbG9nbWF0Y2hfJXMucG9zIiwKLQlnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLm5hbWUpOworICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBsb2dtYXRjaFRhYmxlW2lpbmRleF0ubmFtZSk7CiAKICAgICBpZiAobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLnZpcmdpbikgewogCkBAIC0yNzcsNyArMTQ3LDYgQEAKIAogICAgICAgICBpZiAoKHBlcmZpbGUgPSBmb3BlbihwZXJmaWxlbmFtZSwgInIiKSkpIHsKIAotCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAgICAgICAgICogdGhlIHBlcnNpc3RlbnQgZGF0YSBmaWxlIGV4aXN0cyBzbyAgIApAQCAtMjg4LDcgKzE1Nyw4IEBACiAKICAgICAgICAgICAgIHBvcyA9IGNvdW50ZXIgPSBjY291bnRlciA9IDA7CiAKLSAgICAgICAgICAgIGlmIChmc2NhbmYocGVyZmlsZSwgIiVsdSAlbHUgJWx1IiwgJnBvcywgJmNjb3VudGVyLCAmY291bnRlcikpIHsKKyAgICAgICAgICAgIGlmIChmc2NhbmYocGVyZmlsZSwgIiVsdSAlbHUgJWx1ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgJnBvcywgJmNjb3VudGVyLCAmY291bnRlciwgbGFzdEZpbGVuYW1lKSkgewogCiAKICAgICAgICAgICAgICAgICAvKgpAQCAtMjk5LDQxICsxNjksNTMgQEAKICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICBpZiAoKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlID0KLSAgICAgICAgICAgICAgICAgICAgZm9wZW4obG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lLCAiciIpKSkgewotCisgICAgICAgICAgICAgICAgaWYgKGxvZ21hdGNoX3VwZGF0ZV9maWxlbmFtZShsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWVQYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEZpbGVuYW1lKSA9PSAwKSB7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbG9nIGZpbGUgY291bGQgYmUgb3BlbmVkOyBub3cgICAgCi0gICAgICAgICAgICAgICAgICAgICAqIGxldCdzIHRyeSB0byBzZXQgdGhlIHBvaW50ZXIgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICogdGhlIGZpbGVuYW1lIGlzIHN0aWxsIHRoZSBzYW1lIGFzIAorICAgICAgICAgICAgICAgICAgICAgKiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgcGVyc2lzdGVudAorICAgICAgICAgICAgICAgICAgICAgKiBkYXRhIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICBpZiAoIWZzZWVrCi0gICAgICAgICAgICAgICAgICAgICAgICAobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUsIHBvcywgU0VFS19TRVQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgZm9wZW4obG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lLCAiciIpKSkgewogCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcG9pbnRlciBjb3VsZCBiZSBzZXQgLSB0aGlzIGlzICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbW9zdCB0aGF0IHdlIGNhbiBkbzogaWYgdGhlICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBwb2ludGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlsZSAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplIHdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIHBvaW50ZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGlsbCBwb2ludHMgdG8gd2hlcmUgaXQgcmVhZCB0aGUgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmaWxlIGxhc3QgdGltZTsgbGV0J3MgcmVzdG9yZSB0aGUgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbG9nIGZpbGUgY291bGQgYmUgb3BlbmVkOyBub3cgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBsZXQncyB0cnkgdG8gc2V0IHRoZSBwb2ludGVyICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRGaWxlUG9zaXRpb24gPSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudE1hdGNoQ291bnRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NvdW50ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZ2xvYmFsTWF0Y2hDb3VudGVyID0gY291bnRlcjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmc2VlaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSwgcG9zLCBTRUVLX1NFVCkpIHsKIAotICAgICAgICAgICAgICAgICAgICBmY2xvc2UobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHBvaW50ZXIgY291bGQgYmUgc2V0IC0gdGhpcyBpcyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBtb3N0IHRoYXQgd2UgY2FuIGRvOiBpZiB0aGUgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwb2ludGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlsZSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZSB3ZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBwb2ludGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0aWxsIHBvaW50cyB0byB3aGVyZSBpdCByZWFkIHRoZSAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaWxlIGxhc3QgdGltZTsgbGV0J3MgcmVzdG9yZSB0aGUgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50RmlsZVBvc2l0aW9uID0gcG9zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50TWF0Y2hDb3VudGVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NvdW50ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZShsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmdsb2JhbE1hdGNoQ291bnRlciA9IGNvdW50ZXI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZjbG9zZShwZXJmaWxlKTsKQEAgLTM0Miw2ICsyMjQsMTkgQEAKICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLnZpcmdpbiA9IEZBTFNFOwogICAgIH0KIAorICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIGNoZWNrIGlmIGEgbmV3IGlucHV0IGZpbGUgbmVlZHMgdG8gYmUgb3BlbmVkCisgICAgICogaWYgeWVzLCByZXNldCBjb3VudGVyIGFuZCBwb3NpdGlvbgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKworICAgIGlmIChsb2dtYXRjaF91cGRhdGVfZmlsZW5hbWUobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZSkgPT0gMSkgeworICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudEZpbGVQb3NpdGlvbiA9IDA7IAorICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudE1hdGNoQ291bnRlciA9IDA7CisgICAgfQorCiAKICAgICAvKgogICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKQEAgLTQyOSwxMCArMzI0LDExIEBACiAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgICAgICovCiAKLSAgICAgICAgZnByaW50ZihwZXJmaWxlLCAiJWx1ICVsdSAlbHVcbiIsCisgICAgICAgIGZwcmludGYocGVyZmlsZSwgIiVsdSAlbHUgJWx1ICVzXG4iLAogICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50RmlsZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50TWF0Y2hDb3VudGVyLAotICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5nbG9iYWxNYXRjaENvdW50ZXIpOworICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5nbG9iYWxNYXRjaENvdW50ZXIsCisgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lKTsKIAogICAgICAgICBmY2xvc2UocGVyZmlsZSk7CiAgICAgfQpAQCAtNDQwLDIyICszMzYsMTczIEBACiB9CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHVwZGF0ZUxvZ21hdGNoX1NjaGVkdWxlZCh1bnNpZ25lZCBpbnQgcmVnaXN0cmF0aW9uTnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsb2dtYXRjaHN0YXQgKmxvZ21hdGNodGFibGUpCiB7Ci0KICAgICB1cGRhdGVMb2dtYXRjaChsb2dtYXRjaHRhYmxlLT50aGlzSW5kZXgpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIGxvZ21hdGNoX3BhcnNlX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIHBhcnNlIG9uZSBsaW5lIGZyb20gc25tcGQuY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitsb2dtYXRjaF9wYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisKKyAgICBjaGFyIHNwYWNlX25hbWU7CisgICAgY2hhciBzcGFjZV9wYXRoOworCisgICAgaWYgKGxvZ21hdGNoQ291bnQgPCBNQVhMT0dNQVRDSCkgeworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSA9IDMwOworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnRoaXNJbmRleCA9IGxvZ21hdGNoQ291bnQ7CiAKIAorICAgICAgICAvKgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogYmUgY2FyZWZ1bCB0aGlzIGNvdW50ZXIgbmVlZHMgdG8gYmUKKyAgICAgICAgICogcmVzZXQgZnJvbSBwZXJzaXN0ZW50IHN0b3JhZ2UKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqLworCisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZ2xvYmFsTWF0Y2hDb3VudGVyID0gMDsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5jdXJyZW50TWF0Y2hDb3VudGVyID0gMDsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5tYXRjaENvdW50ZXIgPSAwOworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnZpcmdpbiA9IFRSVUU7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uY3VycmVudEZpbGVQb3NpdGlvbiA9IDA7CisKKworICAgICAgICAvKgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogYmUgY2FyZWZ1bDogdGhlIGZsYWcgMjU1IG11c3QgZml0IHRvCisgICAgICAgICAqIHRoZSBzaXplIG9mIHJlZ0V4IGFzIGRlZmluZGVkIGluCisgICAgICAgICAqIGxvZ21hdGNoLmgKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqLworCisgICAgICAgIHNzY2FuZihjcHRyLCAiJTI1NXMlYyUyNTVzJWMgJWQgJTI1NWNcbiIsCisgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm5hbWUsCisJICAgICAgICZzcGFjZV9uYW1lLAorICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZVBhdHRlcm4sCisJICAgICAgICZzcGFjZV9wYXRoLAorICAgICAgICAgICAgICAgJihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSksCisgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4KTsKKworICAgICAgICAvKiBmaWxsIGluIGZpbGVuYW1lIHdpdGggaW5pdGlhbCBkYXRhICovCisgICAgICAgIHN0cmNweShsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lLAorICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZVBhdHRlcm4pOworICAgICAgICBsb2dtYXRjaF91cGRhdGVfZmlsZW5hbWUobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lKTsKKworCS8qCisJICogTG9nIGFuIGVycm9yIHRoZW4gcmV0dXJuIGlmIGFueSBvZiB0aGUgc3RyaW5ncyBzY2FubmVkIGluIHdlcmUKKwkgKiBsYXJnZXIgdGhlbiB0aGV5IHNob3VsZCBoYXZlIGJlZW4uCisJICovCisJaWYgKHNwYWNlX25hbWUgIT0gJyAnKSB7CisJCXNubXBfbG9nKExPR19FUlIsICJsb2dtYXRjaF9wYXJzZV9jb25maWc6IHRoZSBuYW1lIHNjYW5uZWQgIiBcCisJCSAiaW4gZnJvbSBsaW5lICVzIGlzIHRvbyBsYXJnZS4gbG9nbWF0Y2hDb3VudCA9ICVkXG4iLAorCQkgY3B0ciwgbG9nbWF0Y2hDb3VudCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKHNwYWNlX3BhdGggIT0gJyAnKSB7CisJCXNubXBfbG9nKExPR19FUlIsICJsb2dtYXRjaF9wYXJzZV9jb25maWc6IHRoZSBmaWxlIG5hbWUgIiBcCisJCSAic2Nhbm5lZCBpbiBmcm9tIGxpbmUgJXMgaXMgdG9vIGxhcmdlLiBsb2dtYXRjaENvdW50ID0gJWRcbiIsCisJCSAgICBjcHRyLCBsb2dtYXRjaENvdW50KTsKKwkJcmV0dXJuOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICoganVzdCB0byBiZSBzYWZlICJOVUxMIiB0aGUgZW5kIG9mCisgICAgICAgICAqIHRoZSBhcmFyeSByZWdFeCBhcyBzc2NhbmYgd29uJ3QgZG8KKyAgICAgICAgICogaXQgd2l0aCB0aGUgJWMgbW9kaWZpZXIKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqLworCisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXhbMjU1XSA9ICdcMCc7CisKKworICAgICAgICAvKgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogbm93IGNvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICovCisKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5teVJlZ2V4RXJyb3IgPQorICAgICAgICAgICAgcmVnY29tcCgmbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeCwKKyAgICAgICAgICAgICAgICAgICAgUkVHX0VYVEVOREVEIHwgUkVHX05PU1VCKTsKKworICAgICAgICBpZiAobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5teVJlZ2V4RXJyb3IpIHsKKyAgICAgICAgICAgIGNoYXIgcmVnZXhFcnJvclN0cmluZ1sxMDBdOworICAgICAgICAgICAgcmVnZXJyb3IobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5teVJlZ2V4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAmbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIHJlZ2V4RXJyb3JTdHJpbmcsIDEwMCk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IHByb2Nlc3MgdGhlIGxvZ21hdGNoIHJlZ2V4IC0gJXMsIiBcCisgICAgICAgICAgICAgICAgICAgICAiXG4gc2luY2UgcmVnY29tcCgpIGZhaWxlZCB3aXRoIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4LCByZWdleEVycm9yU3RyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSA+IDApIHsKKyAgICAgICAgICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNOTVBBbGFybUNhbGxiYWNrICopIHVwZGF0ZUxvZ21hdGNoX1NjaGVkdWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0pOworICAgICAgICB9CisKKyAgICAgICAgbG9nbWF0Y2hDb3VudCsrOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBsb2dtYXRjaF9mcmVlX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBtaWIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorbG9nbWF0Y2hfZnJlZV9jb25maWcodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogdGhlIG9ubHkgbWVtb3J5IHdlIGhhdmUgYWxsb2NhdGVkCisgICAgICogaXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgcmVnY29tcAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqLworCisgICAgZm9yIChpID0gMDsgaSA8IGxvZ21hdGNoQ291bnQ7IGkrKykgeworICAgICAgICBpZiAobG9nbWF0Y2hUYWJsZVtpXS5teVJlZ2V4RXJyb3IgPT0gMCkKKyAgICAgICAgICAgIHJlZ2ZyZWUoJmxvZ21hdGNoVGFibGVbaV0ucmVnZXhCdWZmZXIpOworICAgIH0KKyAgICBsb2dtYXRjaENvdW50ID0gMDsKK30KKworCisjZGVmaW5lIExPR01BVENIX0lORk8gICAgICAgMAorI2RlZmluZSBMT0dNQVRDSF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgTE9HTUFUQ0hfTkFNRSAgICAgICAyCisjZGVmaW5lIExPR01BVENIX0ZJTEVOQU1FICAgMworI2RlZmluZSBMT0dNQVRDSF9SRUdFWCAgICAgIDQKKyNkZWZpbmUgTE9HTUFUQ0hfR0xPQkFMQ1RSICA1CisjZGVmaW5lIExPR01BVENIX0dMT0JBTENOVCAgNgorI2RlZmluZSBMT0dNQVRDSF9DVVJSRU5UQ1RSIDcKKyNkZWZpbmUgTE9HTUFUQ0hfQ1VSUkVOVENOVCA4CisjZGVmaW5lIExPR01BVENIX0NPVU5URVIgICAgOQorI2RlZmluZSBMT0dNQVRDSF9DT1VOVCAgICAgIDEwCisjZGVmaW5lIExPR01BVENIX0ZSRVEgICAgICAgMTEKKyNkZWZpbmUgTE9HTUFUQ0hfRVJST1IgICAgICAxMDAKKyNkZWZpbmUgTE9HTUFUQ0hfTVNHICAgICAgICAxMDEKIAogLyoKICAqIE9JRCBmdW5jdGlvbnMgCiAgKi8KIAotdV9jaGFyICAgICAgICAgKgorc3RhdGljIHVfY2hhciAqCiB2YXJfbG9nbWF0Y2hfdGFibGUoc3RydWN0IHZhcmlhYmxlICp2cCwKICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKQEAgLTU0OSw0ICs1OTYsNjIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotI2VuZGlmIC8qIEhBVkVfUkVHRVggKi8KK3ZvaWQKK2luaXRfbG9nbWF0Y2godm9pZCkKK3sKKyAgICBzdHJ1Y3QgdmFyaWFibGUyIGxvZ21hdGNoX2luZm9bXSA9IHsKKyAgICAgICAge0xPR01BVENIX0lORk8sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMH0KKyAgICB9OworCisgICAgc3RydWN0IHZhcmlhYmxlMiBsb2dtYXRjaF90YWJsZVtdID0geworICAgICAgICB7TE9HTUFUQ0hfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezF9fSwKKyAgICAgICAge0xPR01BVENIX05BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7Mn19LAorICAgICAgICB7TE9HTUFUQ0hfRklMRU5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7M319LAorICAgICAgICB7TE9HTUFUQ0hfUkVHRVgsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7NH19LAorICAgICAgICB7TE9HTUFUQ0hfR0xPQkFMQ1RSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs1fX0sCisgICAgICAgIHtMT0dNQVRDSF9HTE9CQUxDTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezZ9fSwKKyAgICAgICAge0xPR01BVENIX0NVUlJFTlRDVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezd9fSwKKyAgICAgICAge0xPR01BVENIX0NVUlJFTlRDTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezh9fSwKKyAgICAgICAge0xPR01BVENIX0NPVU5URVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezl9fSwKKyAgICAgICAge0xPR01BVENIX0NPVU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMH19LAorICAgICAgICB7TE9HTUFUQ0hfRlJFUSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTF9fSwKKyAgICAgICAge0xPR01BVENIX0VSUk9SLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMDB9fSwKKyAgICAgICAge0xPR01BVENIX01TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMDF9fQorICAgIH07CisKKyAgICAvKgorICAgICAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQorICAgICAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGgKKyAgICAgKi8KKyAgICBvaWQgICAgICAgICAgICAgbG9nbWF0Y2hfaW5mb19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTYsIDEgfTsKKyAgICBvaWQgICAgICAgICAgICAgbG9nbWF0Y2hfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxNiwgMiwgMSB9OworCisgICAgLyoKKyAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZQorICAgICAqLworICAgIFJFR0lTVEVSX01JQigidWNkLXNubXAvbG9nbWF0Y2giLCBsb2dtYXRjaF9pbmZvLCB2YXJpYWJsZTIsCisgICAgICAgICAgICAgICAgIGxvZ21hdGNoX2luZm9fb2lkKTsKKyAgICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2xvZ21hdGNoIiwgbG9nbWF0Y2hfdGFibGUsIHZhcmlhYmxlMiwKKyAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfdmFyaWFibGVzX29pZCk7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigibG9nbWF0Y2giLCBsb2dtYXRjaF9wYXJzZV9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfZnJlZV9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZ21hdGNoIG5hbWUgcGF0aCBjeWNsZXRpbWUgcmVnZXgiKTsKKworfQorCisjZW5kaWYgLyogSEFWRV9SRUdFWF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAppbmRleCBlYjJjMDcwLi5iOTRhZDNhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKQEAgLTUsNTMgKzUsOSBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTE9HTUFUQ0hfSAogI2RlZmluZSBfTUlCR1JPVVBfTE9HTUFUQ0hfSAogCi0jaW5jbHVkZSAibWliZGVmcy5oIgotI2luY2x1ZGUgPHJlZ2V4Lmg+Citjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogCi1zdHJ1Y3QgbG9nbWF0Y2hzdGF0IHsKLSAgICBjaGFyICAgICAgICAgICAgZmlsZW5hbWVbMjU2XTsKLSAgICBjaGFyICAgICAgICAgICAgcmVnRXhbMjU2XTsKLSAgICBjaGFyICAgICAgICAgICAgbmFtZVsyNTZdOwotICAgIEZJTEUgICAgICAgICAgICpsb2dmaWxlOwotICAgIGxvbmcgICAgICAgICAgICBjdXJyZW50RmlsZVBvc2l0aW9uOwotICAgIHVuc2lnbmVkIGxvbmcgICBnbG9iYWxNYXRjaENvdW50ZXI7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGN1cnJlbnRNYXRjaENvdW50ZXI7Ci0gICAgdW5zaWduZWQgbG9uZyAgIG1hdGNoQ291bnRlcjsKLSAgICByZWdleF90ICAgICAgICAgcmVnZXhCdWZmZXI7Ci0gICAgaW50ICAgICAgICAgICAgIG15UmVnZXhFcnJvcjsKLSAgICBpbnQgICAgICAgICAgICAgdmlyZ2luOwotICAgIGludCAgICAgICAgICAgICB0aGlzSW5kZXg7Ci0gICAgaW50ICAgICAgICAgICAgIGZyZXF1ZW5jeTsKLX07Ci12b2lkICAgICAgICAgICAgaW5pdF9sb2dtYXRjaCh2b2lkKTsKLQotCi0vKgotICogY29uZmlnIGxvZ21hdGNoIHBhcnNpbmcgcm91dGluZXMgCi0gKi8KLXZvaWQgICAgICAgICAgICBsb2dtYXRjaF9mcmVlX2NvbmZpZyh2b2lkKTsKLXZvaWQgICAgICAgICAgICBsb2dtYXRjaF9wYXJzZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwotdm9pZCAgICAgICAgICAgIHVwZGF0ZUxvZ21hdGNoX1NjaGVkdWxlZCh1bnNpZ25lZCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsb2dtYXRjaHN0YXQgKik7Ci1leHRlcm4gRmluZFZhck1ldGhvZCB2YXJfbG9nbWF0Y2hfdGFibGU7Ci0KLQotCi0jZGVmaW5lIExPR01BVENIX0VSUk9SX01TRyAgIiVzOiBzaXplIGV4Y2VlZHMgJWRrYiAoPSAlZGtiKSIKLQotI2RlZmluZSBMT0dNQVRDSF9JTkZPICAgICAgIDAKLSNkZWZpbmUgTE9HTUFUQ0hfSU5ERVggICAgICAxCi0jZGVmaW5lIExPR01BVENIX05BTUUgICAgICAgMgotI2RlZmluZSBMT0dNQVRDSF9GSUxFTkFNRSAgIDMKLSNkZWZpbmUgTE9HTUFUQ0hfUkVHRVggICAgICA0Ci0jZGVmaW5lIExPR01BVENIX0dMT0JBTENUUiAgNQotI2RlZmluZSBMT0dNQVRDSF9HTE9CQUxDTlQgIDYKLSNkZWZpbmUgTE9HTUFUQ0hfQ1VSUkVOVENUUiA3Ci0jZGVmaW5lIExPR01BVENIX0NVUlJFTlRDTlQgOAotI2RlZmluZSBMT0dNQVRDSF9DT1VOVEVSICAgIDkKLSNkZWZpbmUgTE9HTUFUQ0hfQ09VTlQgICAgICAxMAotI2RlZmluZSBMT0dNQVRDSF9GUkVRICAgICAgIDExCi0jZGVmaW5lIExPR01BVENIX0VSUk9SICAgICAgMTAwCi0jZGVmaW5lIExPR01BVENIX01TRyAgICAgICAgMTAxCit2b2lkIGluaXRfbG9nbWF0Y2godm9pZCk7CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0xPR01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMKaW5kZXggMTA5ZTk2Zi4uNzQyMTg2ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMKQEAgLTEwLDMyICsxMCwzMCBAQAogI2luY2x1ZGUgIm1lbW9yeS5oIgogCiAjZGVmaW5lIERFRkFVTFRNSU5JTVVNU1dBUCAxNjAwMCAgICAgICAgLyoga2lsb2J5dGVzICovCi1pbnQgbWVtb3J5X29iamVjdF9pbmRleDsKLWludCBtaW5pbXVtX3N3YXA7CitzdGF0aWMgaW50IG1pbmltdW1fc3dhcDsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBtZW1vcnkgbW9kdWxlICovCiB2b2lkCiBpbml0X21lbW9yeSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgICAgICBtZW1vcnlfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgbWVtU3dhcEVycm9yX29pZFtdICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCwgMTAwIH07Ci0gICAgc3RhdGljIG9pZCAgICAgIG1lbVN3YXBFcnJNc2dfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQsIDEwMSB9OworICAgIGNvbnN0IG9pZCAgICAgIG1lbW9yeV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCB9OworICAgIGNvbnN0IG9pZCAgICAgIG1lbVN3YXBFcnJvcl9vaWRbXSAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQsIDEwMCB9OworICAgIGNvbnN0IG9pZCAgICAgIG1lbVN3YXBFcnJNc2dfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQsIDEwMSB9OwogCiAgICAgREVCVUdNU0dUTCgoIm1lbW9yeSIsICJJbml0aWFsaXppbmdcbiIpKTsKIAotICAgIG1lbW9yeV9vYmplY3RfaW5kZXggPSBPSURfTEVOR1RIKG1lbW9yeV9vaWQpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibWVtb3J5IiwgaGFuZGxlX21lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9vaWQsIG1lbW9yeV9vYmplY3RfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb2lkLCBPSURfTEVOR1RIKG1lbW9yeV9vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMTcpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibWVtU3dhcEVycm9yIiwgaGFuZGxlX21lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbVN3YXBFcnJvcl9vaWQsIG1lbW9yeV9vYmplY3RfaW5kZXgrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbVN3YXBFcnJvcl9vaWQsIE9JRF9MRU5HVEgobWVtU3dhcEVycm9yX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibWVtU3dhcEVyck1zZyIsIGhhbmRsZV9tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1lbVN3YXBFcnJNc2dfb2lkLCBtZW1vcnlfb2JqZWN0X2luZGV4KzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbVN3YXBFcnJNc2dfb2lkLCBPSURfTEVOR1RIKG1lbVN3YXBFcnJNc2dfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSk7CiAKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic3dhcCIsIG1lbW9yeV9wYXJzZV9jb25maWcsCkBAIC03NCw3ICs3Miw3IEBACiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOwotICAgICAgICBzd2l0Y2ggKHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbIG1lbW9yeV9vYmplY3RfaW5kZXggXSkgeworICAgICAgICBzd2l0Y2ggKHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbIHJlZ2luZm8tPnJvb3RvaWRfbGVuIC0gMiBdKSB7CiAgICAgICAgIGNhc2UgTUVNT1JZX0lOREVYOgogICAgICAgICAgICAgdmFsID0gMDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA0LDggKzIwMiw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKWJ1Ziwgc3RybGVuKGJ1ZikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBvYmplY3QgKCVsdSkgaW4gaGFuZGxlX21lbW9yeVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbIG1lbW9yeV9vYmplY3RfaW5kZXggXSk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInVua25vd24gb2JqZWN0ICglIiBORVRTTk1QX1BSSW8gInUpIGluIGhhbmRsZV9tZW1vcnlcbiIsCisgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lWyByZWdpbmZvLT5yb290b2lkX2xlbiAtIDIgXSk7CiBOT1NVQ0g6CiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0cywgU05NUF9OT1NVQ0hPQkpFQ1QgKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMKaW5kZXggMzE4ZWVlMC4uNzg2ZTVlYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jCkBAIC0zMCwxMCArMzAsMTMgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KICNpbmNsdWRlICJtZW1vcnkuaCIgICAgICAgICAgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KICNpbmNsdWRlICJtZW1vcnlfYWl4NC5oIiAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTU1LDM4ICs1OCw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oCmluZGV4IDlmNTgwNDEuLmMzOTU5NmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX01FTU9SWV9BSVg0X0gKICNkZWZpbmUgX01JQkdST1VQX01FTU9SWV9BSVg0X0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfbWVtb3J5X2FpeDQodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYwppbmRleCA3OWNjNGM5Li43NGQ1MzY1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAibWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtb3J5X2RhcndpbjcuaCIKIApAQCAtNzMsMjMgKzczLDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmgKaW5kZXggZWZhOTljOC4uYWI1ZDI2NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTUVNT1JZX0RBUldJTjdfSAogI2RlZmluZSBfTUlCR1JPVVBfTUVNT1JZX0RBUldJTjdfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiBleHRlcm4gdm9pZCAgICAgaW5pdF9tZW1vcnlfZGFyd2luNyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMKaW5kZXggYjFkNmNiMy4uMjYxYzRjZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KICNpbmNsdWRlICJtZW1vcnkuaCIgICAgICAgICAgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KICNpbmNsdWRlICJtZW1vcnlfZHluaXguaCIgICAgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KIApAQCAtMzQsMzggKzM0LDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaAppbmRleCAwYTY5OThkLi40ZmI1Mjk0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX01FTU9SWV9EWU5JWF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9NRU1PUllfRFlOSVhfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYwppbmRleCAyYmVlNTE3Li4yMmRkZTRjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYwpAQCAtODcsMzggKzg3LDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMKaW5kZXggNWJmOTlhZC4uYzJiMjQ3OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jCkBAIC00OSwzOCArNDksNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYwppbmRleCA2NjMyOTIxLi4zZDI2YTQ0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAibWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtb3J5X25ldGJzZDEuaCIKIApAQCAtNzUsMzggKzc1LDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmgKaW5kZXggYTkzNzU0YS4uYTE5NWY4NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTUVNT1JZX05FVEJTRDFfSAogI2RlZmluZSBfTUlCR1JPVVBfTUVNT1JZX05FVEJTRDFfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiBleHRlcm4gdm9pZCAgICAgaW5pdF9tZW1vcnlfbmV0YnNkMSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMKaW5kZXggMzNmNDFiMi4uMmQzNjI3OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KICNpbmNsdWRlICJtZW1vcnkuaCIgICAgICAgICAgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KICNpbmNsdWRlICJtZW1vcnlfc29sYXJpczIuaCIgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KIApAQCAtNDIsMzggKzQyLDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaAppbmRleCAzMzZiM2RkLi5mZmY1Zjc5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX01FTU9SWV9TT0xBUklTMl9ICiAjZGVmaW5lIF9NSUJHUk9VUF9NRU1PUllfU09MQVJJUzJfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF9tZW1vcnlfc29sYXJpczIodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMKaW5kZXggYTQyYTkxYi4uOGQ2MDJjMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjMsOSArMjQsNiBAQAogI2lmZGVmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZkZWYgV0lOMzIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgpAQCAtMzksNiArMzcsOSBAQAogI2luY2x1ZGUgImV4dGVuc2libGUuaCIKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGdldF9leHRlbl9pbnN0YW5jZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHBhcnNlX21pYm9pZCkKKwogc3RydWN0IGV4dGVuc2libGUgKnBhc3N0aHJ1cyA9IE5VTEw7CiBpbnQgICAgICAgICAgICAgbnVtcGFzc3RocnVzID0gMDsKIApAQCAtNDksNyArNTAsOCBAQAogICAgIC8qCiAgICAgICogYm9ndXMgZW50cnkuICBPbmx5IHNvbWUgb2YgaXQgaXMgYWN0dWFsbHkgdXNlZC4gCiAgICAgICovCi0gICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV9wYXNzLCAwLCB7TUlCSU5ERVh9fSwKKyAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHRlbnNpYmxlX3Bhc3MsIDAsIHtNSUJJTkRFWH19LAogfTsKIAogCkBAIC04MCw3ICs4Miw3IEBACiAJLyogY2hhbmdlIHByaW9yaXR5IGxldmVsICovCiAJY3B0cisrOwogCWNwdHIgPSBza2lwX3doaXRlKGNwdHIpOwotCWlmICghIGlzZGlnaXQoKmNwdHIpKSB7CisJaWYgKCEgaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkgewogCSAgY29uZmlnX3BlcnJvcigicHJpb3JpdHkgbXVzdCBiZSBhbiBpbnRlZ2VyIik7CiAJICByZXR1cm47CiAJfQpAQCAtMTAzLDcgKzEwNSw3IEBACiAgICAgICovCiAgICAgaWYgKCpjcHRyID09ICcuJykKICAgICAgICAgY3B0cisrOwotICAgIGlmICghaXNkaWdpdCgqY3B0cikpIHsKKyAgICBpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigic2Vjb25kIHRva2VuIGlzIG5vdCBhIE9JRCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE1LDkgKzExNywxMCBAQAogICAgIGlmICgqcHBhc3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgICgqcHBhc3MpLT50eXBlID0gUEFTU1RIUlU7CisgICAgKCpwcGFzcyktPm1pYnByaW9yaXR5ID0gcHJpb3JpdHk7CiAKICAgICAoKnBwYXNzKS0+bWlibGVuID0gcGFyc2VfbWlib2lkKGNwdHIsICgqcHBhc3MpLT5taWJvaWQpOwotICAgIHdoaWxlIChpc2RpZ2l0KCpjcHRyKSB8fCAqY3B0ciA9PSAnLicpCisgICAgd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkgfHwgKmNwdHIgPT0gJy4nKQogICAgICAgICBjcHRyKys7CiAgICAgLyoKICAgICAgKiBwYXRoCkBAIC0xMzQsOSArMTM3LDEwIEBACiAgICAgc3RybGNweSgoKnBwYXNzKS0+bmFtZSwgKCpwcGFzcyktPmNvbW1hbmQsIHNpemVvZigoKnBwYXNzKS0+bmFtZSkpOwogICAgICgqcHBhc3MpLT5uZXh0ID0gTlVMTDsKIAotICAgIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgicGFzcyIsIChzdHJ1Y3QgdmFyaWFibGUgKikgZXh0ZW5zaWJsZV9wYXNzdGhydV92YXJpYWJsZXMsCi0JCQkgIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUyKSwKLQkJCSAgMSwgKCpwcGFzcyktPm1pYm9pZCwgKCpwcGFzcyktPm1pYmxlbiwgcHJpb3JpdHkpOworICAgIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgicGFzcyIsCisgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUgKikgZXh0ZW5zaWJsZV9wYXNzdGhydV92YXJpYWJsZXMsCisgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUyKSwgMSwgKCpwcGFzcyktPm1pYm9pZCwKKyAgICAgICAgICAgICAgICAgKCpwcGFzcyktPm1pYmxlbiwgKCpwcGFzcyktPm1pYnByaW9yaXR5KTsKIAogICAgIC8qCiAgICAgICogYXJnZ2dnIC0tIHBhc3N0aHJ1cyBtdXN0IGJlIHNvcnRlZCAKQEAgLTE0OCw3ICsxNTIsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvciAoaSA9IDAsIHB0bXAgPSAoc3RydWN0IGV4dGVuc2libGUgKikgcGFzc3RocnVzOwotICAgICAgICAgICAgIGkgPCBudW1wYXNzdGhydXMgJiYgcHRtcCAhPSAwOyBpKyssIHB0bXAgPSBwdG1wLT5uZXh0KQorICAgICAgICAgICAgIGkgPCBudW1wYXNzdGhydXMgJiYgcHRtcCAhPSBOVUxMOyBpKyssIHB0bXAgPSBwdG1wLT5uZXh0KQogICAgICAgICAgICAgZXRtcFtpXSA9IHB0bXA7CiAgICAgICAgIHFzb3J0KGV0bXAsIG51bXBhc3N0aHJ1cywgc2l6ZW9mKHN0cnVjdCBleHRlbnNpYmxlICopLAogICAgICAgICAgICAgICBwYXNzX2NvbXBhcmUpOwpAQCAtMTcyLDcgKzE3Niw3IEBACiAgICAgZm9yIChldG1wID0gcGFzc3RocnVzOyBldG1wICE9IE5VTEw7KSB7CiAgICAgICAgIGV0bXAyID0gZXRtcDsKICAgICAgICAgZXRtcCA9IGV0bXAtPm5leHQ7Ci0gICAgICAgIHVucmVnaXN0ZXJfbWliKGV0bXAyLT5taWJvaWQsIGV0bXAyLT5taWJsZW4pOworICAgICAgICB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eShldG1wMi0+bWlib2lkLCBldG1wMi0+bWlibGVuLCBldG1wMi0+bWlicHJpb3JpdHkpOwogICAgICAgICBmcmVlKGV0bXAyKTsKICAgICB9CiAgICAgcGFzc3RocnVzID0gTlVMTDsKQEAgLTMwMCwxMiArMzA0LDcgQEAKICAgICAgICAgICAgIGV4ZWNfY29tbWFuZChwYXNzdGhydSk7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvcGFzcyIsICJwYXNzLXJ1bm5pbmcgcmV0dXJuZWQ6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N0aHJ1LT5vdXRwdXQpKTsKLSAgICAgICAgICAgIGlmICghc3RybmNhc2VjbXAocGFzc3RocnUtPm91dHB1dCwgIm5vdC13cml0YWJsZSIsIDEyKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKHBhc3N0aHJ1LT5vdXRwdXQsICJ3cm9uZy10eXBlIiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8ocGFzc3RocnUtPm91dHB1dCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uYwppbmRleCBhY2UwZjA3Li5lM2Q5YTAxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmMKQEAgLTYxLDYgKzYxLDUxIEBACiAgICAgcmV0dXJuIDMgKiBuIC0gMTsKIH0KIAoraW50CituZXRzbm1wX2ludGVybmFsX3Bhc3Nfc3RyX3RvX2Vycm5vKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKyAgICBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgInRvby1iaWciLCA3KSkgeworICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVuICovCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9UT09CSUc7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAibm8tc3VjaC1uYW1lIiwgMTIpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1NVQ0hOQU1FOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImJhZC12YWx1ZSIsIDkpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9CQURWQUxVRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJyZWFkLW9ubHkiLCA5KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVBRE9OTFk7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiZ2VuLWVycm9yIiwgOSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJuby1hY2Nlc3MiLCA5KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9BQ0NFU1M7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctdHlwZSIsIDEwKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLWxlbmd0aCIsIDEyKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctZW5jb2RpbmciLCAxNCkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HRU5DT0RJTkc7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctdmFsdWUiLCAxMSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAibm8tY3JlYXRpb24iLCAxMSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW5jb25zaXN0ZW50LXZhbHVlIiwgMTgpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJyZXNvdXJjZS11bmF2YWlsYWJsZSIsIDIwKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJjb21taXQtZmFpbGVkIiwgMTMpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9DT01NSVRGQUlMRUQ7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAidW5kby1mYWlsZWQiLCAxMSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1VORE9GQUlMRUQ7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiYXV0aG9yaXphdGlvbi1lcnJvciIsIDE5KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfQVVUSE9SSVpBVElPTkVSUk9SOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIm5vdC13cml0YWJsZSIsIDEyKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW5jb25zaXN0ZW50LW5hbWUiLCAxNykpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKIHVuc2lnbmVkIGNoYXIgKgogbmV0c25tcF9pbnRlcm5hbF9wYXNzX3BhcnNlKGNoYXIgKiBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGJ1ZjIsCkBAIC04Miw3ICsxMjcsMTkgQEAKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oYnVmMik7CiAgICAgICAgIHZwLT50eXBlID0gQVNOX09DVEVUX1NUUjsKICAgICAgICAgcmV0dXJuICgodW5zaWduZWQgY2hhciAqKSBidWYyKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbnRlZ2VyIiwgNykpIHsKKyAgICB9CisjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImludGVnZXI2NCIsIDkpKSB7CisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgY291bnRlcjY0IGM2NDsKKyAgICAgICAgdWludDY0X3QgdjY0ID0gc3RydG91bGwoYnVmMiwgTlVMTCwgMTApOworICAgICAgICBjNjQuaGlnaCA9ICh1bnNpZ25lZCBsb25nKSh2NjQgPj4gMzIpOworICAgICAgICBjNjQubG93ICA9ICh1bnNpZ25lZCBsb25nKSh2NjQgJiAweGZmZmZmZmZmKTsKKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoYzY0KTsKKyAgICAgICAgdnAtPnR5cGUgPSBBU05fSU5URUdFUjY0OworICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopICZjNjQpOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbnRlZ2VyIiwgNykpIHsKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOwogICAgICAgICBsb25nX3JldCA9IHN0cnRvbChidWYyLCBOVUxMLCAxMCk7CiAgICAgICAgIHZwLT50eXBlID0gQVNOX0lOVEVHRVI7CkBAIC05Miw3ICsxNDksMTcgQEAKICAgICAgICAgbG9uZ19yZXQgPSBzdHJ0b3VsKGJ1ZjIsIE5VTEwsIDEwKTsKICAgICAgICAgdnAtPnR5cGUgPSBBU05fVU5TSUdORUQ7CiAgICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0KTsKLSAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJjb3VudGVyIiwgNykpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImNvdW50ZXI2NCIsIDkpKSB7CisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgY291bnRlcjY0IGM2NDsKKyAgICAgICAgdWludDY0X3QgdjY0ID0gc3RydG91bGwoYnVmMiwgTlVMTCwgMTApOworICAgICAgICBjNjQuaGlnaCA9ICh1bnNpZ25lZCBsb25nKSh2NjQgPj4gMzIpOworICAgICAgICBjNjQubG93ICA9ICh1bnNpZ25lZCBsb25nKSh2NjQgJiAweGZmZmZmZmZmKTsKKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoYzY0KTsKKyAgICAgICAgdnAtPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopICZjNjQpOworICAgIH0KKyAgICBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiY291bnRlciIsIDcpKSB7CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsKICAgICAgICAgbG9uZ19yZXQgPSBzdHJ0b3VsKGJ1ZjIsIE5VTEwsIDEwKTsKICAgICAgICAgdnAtPnR5cGUgPSBBU05fQ09VTlRFUjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oCmluZGV4IDJjZTZhZmQuLmIxZDdlNGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uaApAQCAtNiw2ICs2LDkgQEAKICAqIG9yIGRpc2FwcGVhciBhdCBhbnkgdGltZQogICovCiAKK2ludAorbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubyhjb25zdCBjaGFyICpidWYpOworCiB1bnNpZ25lZCBjaGFyICoKIG5ldHNubXBfaW50ZXJuYWxfcGFzc19wYXJzZShjaGFyICpidWYsIGNoYXIgKmJ1ZjIsIHNpemVfdCAqdmFyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZwKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMKaW5kZXggYzNmMzg5OS4uODQ2N2UxOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfSU9fSAogI2luY2x1ZGUgPGlvLmg+CkBAIC0yNSw5ICsyNiw2IEBACiAjaWZkZWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZmRlZiBXSU4zMgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCkBAIC00NCwxMiArNDIsMTUgQEAKICNpbmNsdWRlICJleHRlbnNpYmxlLmgiCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShnZXRfZXh0ZW5faW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwYXJzZV9taWJvaWQpCisKIHN0cnVjdCBleHRlbnNpYmxlICpwZXJzaXN0cGFzc3RocnVzID0gTlVMTDsKIGludCAgICAgICAgICAgICBudW1wZXJzaXN0cGFzc3RocnVzID0gMDsKIHN0cnVjdCBwZXJzaXN0X3BpcGVfdHlwZSB7CiAgICAgRklMRSAgICAgICAgICAgKmZJbiwgKmZPdXQ7CiAgICAgaW50ICAgICAgICAgICAgIGZkSW4sIGZkT3V0OwotICAgIGludCAgICAgICAgICAgICBwaWQ7CisgICAgbmV0c25tcF9waWRfdCAgIHBpZDsKIH0gICAgICAgICAgICAgICpwZXJzaXN0X3BpcGVzID0gKHN0cnVjdCBwZXJzaXN0X3BpcGVfdHlwZSAqKSBOVUxMOwogc3RhdGljIHVuc2lnbmVkIHBpcGVfY2hlY2tfYWxhcm1faWQ7CiBzdGF0aWMgaW50ICAgICAgaW5pdF9wZXJzaXN0X3BpcGVzKHZvaWQpOwpAQCAtNjYsOCArNjcsOCBAQAogICAgIC8qCiAgICAgICogYm9ndXMgZW50cnkuICBPbmx5IHNvbWUgb2YgaXQgaXMgYWN0dWFsbHkgdXNlZC4gCiAgICAgICovCi0gICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV9wYXNzX3BlcnNpc3QsIDAsCi0gICAgIHtNSUJJTkRFWH19LAorICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4dGVuc2libGVfcGFzc19wZXJzaXN0LCAwLCB7TUlCSU5ERVh9fSwKIH07CiAKIHZvaWQKQEAgLTExMSw3ICsxMTIsNyBAQAogCS8qIGNoYW5nZSBwcmlvcml0eSBsZXZlbCAqLwogCWNwdHIrKzsKIAljcHRyID0gc2tpcF93aGl0ZShjcHRyKTsKLQlpZiAoISBpc2RpZ2l0KCpjcHRyKSkgeworCWlmICghIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpIHsKIAkgIGNvbmZpZ19wZXJyb3IoInByaW9yaXR5IG11c3QgYmUgYW4gaW50ZWdlciIpOwogCSAgcmV0dXJuOwogCX0KQEAgLTEzNCw3ICsxMzUsNyBAQAogICAgICAqLwogICAgIGlmICgqY3B0ciA9PSAnLicpCiAgICAgICAgIGNwdHIrKzsKLSAgICBpZiAoIWlzZGlnaXQoKmNwdHIpKSB7CisgICAgaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSB7CiAgICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY29uZCB0b2tlbiBpcyBub3QgYSBPSUQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0Niw5ICsxNDcsMTAgQEAKICAgICBpZiAoKnBwYXNzID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKICAgICAoKnBwYXNzKS0+dHlwZSA9IFBBU1NUSFJVX1BFUlNJU1Q7CisgICAgKCpwcGFzcyktPm1pYnByaW9yaXR5ID0gcHJpb3JpdHk7CiAKICAgICAoKnBwYXNzKS0+bWlibGVuID0gcGFyc2VfbWlib2lkKGNwdHIsICgqcHBhc3MpLT5taWJvaWQpOwotICAgIHdoaWxlIChpc2RpZ2l0KCpjcHRyKSB8fCAqY3B0ciA9PSAnLicpCisgICAgd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkgfHwgKmNwdHIgPT0gJy4nKQogICAgICAgICBjcHRyKys7CiAgICAgLyoKICAgICAgKiBwYXRoCkBAIC0xNjgsNyArMTcwLDcgQEAKICAgICByZWdpc3Rlcl9taWJfcHJpb3JpdHkoInBhc3NfcGVyc2lzdCIsCiAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUgKikgZXh0ZW5zaWJsZV9wZXJzaXN0X3Bhc3N0aHJ1X3ZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZTIpLCAxLCAoKnBwYXNzKS0+bWlib2lkLAotICAgICAgICAgICAgICAgICAoKnBwYXNzKS0+bWlibGVuLCBwcmlvcml0eSk7CisgICAgICAgICAgICAgICAgICgqcHBhc3MpLT5taWJsZW4sICgqcHBhc3MpLT5taWJwcmlvcml0eSk7CiAKICAgICAvKgogICAgICAqIGFyZ2dnZyAtLSBwYXN0aHJ1cyBtdXN0IGJlIHNvcnRlZCAKQEAgLTE3OSw3ICsxODEsNyBAQAogICAgICAgICBpZiAoZXRtcCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmb3IgKGkgPSAwLCBwdG1wID0gKHN0cnVjdCBleHRlbnNpYmxlICopIHBlcnNpc3RwYXNzdGhydXM7Ci0gICAgICAgICAgICAgaSA8IG51bXBlcnNpc3RwYXNzdGhydXMgJiYgcHRtcCAhPSAwOyBpKyssIHB0bXAgPSBwdG1wLT5uZXh0KQorICAgICAgICAgICAgIGkgPCBudW1wZXJzaXN0cGFzc3RocnVzICYmIHB0bXAgIT0gTlVMTDsgaSsrLCBwdG1wID0gcHRtcC0+bmV4dCkKICAgICAgICAgICAgIGV0bXBbaV0gPSBwdG1wOwogICAgICAgICBxc29ydChldG1wLCBudW1wZXJzaXN0cGFzc3RocnVzLCBzaXplb2Yoc3RydWN0IGV4dGVuc2libGUgKiksCiAgICAgICAgICAgICAgIHBhc3NfcGVyc2lzdF9jb21wYXJlKTsKQEAgLTE5OSwxMyArMjAxLDE5IEBACiBwYXNzX3BlcnNpc3RfZnJlZV9jb25maWcodm9pZCkKIHsKICAgICBzdHJ1Y3QgZXh0ZW5zaWJsZSAqZXRtcCwgKmV0bXAyOworICAgIGludCBpOwogCiAgICAgZm9yIChldG1wID0gcGVyc2lzdHBhc3N0aHJ1czsgZXRtcCAhPSBOVUxMOykgewogICAgICAgICBldG1wMiA9IGV0bXA7CiAgICAgICAgIGV0bXAgPSBldG1wLT5uZXh0OwotICAgICAgICB1bnJlZ2lzdGVyX21pYihldG1wMi0+bWlib2lkLCBldG1wMi0+bWlibGVuKTsKKyAgICAgICAgdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHkoZXRtcDItPm1pYm9pZCwgZXRtcDItPm1pYmxlbiwgZXRtcDItPm1pYnByaW9yaXR5KTsKICAgICAgICAgZnJlZShldG1wMik7CiAgICAgfQorICAgIGlmIChwZXJzaXN0X3BpcGVzKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbnVtcGVyc2lzdHBhc3N0aHJ1czsgaSsrKSB7CisgICAgICAgICAgICBjbG9zZV9wZXJzaXN0X3BpcGUoaSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcGVyc2lzdHBhc3N0aHJ1cyA9IE5VTEw7CiAgICAgbnVtcGVyc2lzdHBhc3N0aHJ1cyA9IDA7CiB9CkBAIC0zODEsMTggKzM4OSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIm5vdC13cml0YWJsZSIsIDEyKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLXR5cGUiLCAxMCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctbGVuZ3RoIiwgMTIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctdmFsdWUiLCAxMSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImluY29uc2lzdGVudC12YWx1ZSIsIDE4KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8oYnVmKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKQEAgLTQ0MCw3ICs0MzcsNyBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG51bXBlcnNpc3RwYXNzdGhydXM7IGkrKykgewogICAgICAgICAgICAgcGVyc2lzdF9waXBlc1tpXS5mSW4gPSBwZXJzaXN0X3BpcGVzW2ldLmZPdXQgPSAoRklMRSAqKSAwOwogICAgICAgICAgICAgcGVyc2lzdF9waXBlc1tpXS5mZEluID0gcGVyc2lzdF9waXBlc1tpXS5mZE91dCA9IC0xOwotICAgICAgICAgICAgcGVyc2lzdF9waXBlc1tpXS5waWQgPSAtMTsKKyAgICAgICAgICAgIHBlcnNpc3RfcGlwZXNbaV0ucGlkID0gTkVUU05NUF9OT19TVUNIX1BST0NFU1M7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHBlcnNpc3RfcGlwZXMgPyAxIDogMDsKQEAgLTQ1NCw3ICs0NTEsNyBAQAogICovCiBzdGF0aWMgaW50IHByb2Nlc3Nfc3RvcHBlZChpbnQgaWR4KQogewotICAgIGlmIChwZXJzaXN0X3BpcGVzW2lkeF0ucGlkICE9IC0xKSB7CisgICAgaWYgKHBlcnNpc3RfcGlwZXNbaWR4XS5waWQgIT0gTkVUU05NUF9OT19TVUNIX1BST0NFU1MpIHsKICNpZiBIQVZFX1NZU19XQUlUX0gKICAgICAgICAgcmV0dXJuIHdhaXRwaWQocGVyc2lzdF9waXBlc1tpZHhdLnBpZCwgTlVMTCwgV05PSEFORykgPiAwOwogI2VuZGlmCkBAIC01MjEsMTQgKzUxOCwxNSBAQAogICAgIC8qCiAgICAgICogT3BlbiBpZiBpdCdzIG5vdCBhbHJlYWR5IG9wZW4gCiAgICAgICovCi0gICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPT0gLTEpIHsKLSAgICAgICAgaW50ICAgICAgICAgICAgIGZkSW4sIGZkT3V0LCBwaWQ7CisgICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPT0gTkVUU05NUF9OT19TVUNIX1BST0NFU1MpIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGZkSW4sIGZkT3V0OworICAgICAgICBuZXRzbm1wX3BpZF90ICAgcGlkOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIERpZCB3ZSBmYWlsPyAKICAgICAgICAgICovCiAgICAgICAgIGlmICgoMCA9PSBnZXRfZXhlY19waXBlcyhjb21tYW5kLCAmZmRJbiwgJmZkT3V0LCAmcGlkKSkgfHwKLSAgICAgICAgICAgIChwaWQgPT0gLTEpKSB7CisgICAgICAgICAgICAocGlkID09IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTKSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL3Bhc3NfcGVyc2lzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAib3Blbl9wZXJzaXN0X3BpcGU6IHBpZCA9PSAtMVxuIikpOwogICAgICAgICAgICAgcmVjdXJzZSA9IDA7CkBAIC02MDUsNyArNjAzLDcgQEAKICAgICAvKgogICAgICAqIERvbid0IHdyaXRlIHRvIGEgbm9uLWV4aXN0YW50IHByb2Nlc3MgCiAgICAgICovCi0gICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPT0gLTEpIHsKKyAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9PSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUykgewogICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvcGFzc19wZXJzaXN0IiwKICAgICAgICAgICAgICAgICAgICAgIndyaXRlX3BlcnNpc3RfcGlwZTogbm90IHdyaXRpbmcgJXMsIHByb2Nlc3MgaXMgbm9uLWV4aXN0ZW50IiwKICAgICAgICAgICAgICAgICAgICAgZGF0YSkpOwpAQCAtNzIzLDE2ICs3MjEsMjMgQEAKIAl1bmxpbmsoZmlmb19vdXRfcGF0aCk7CiAjZW5kaWYKIAotICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkICE9IC0xKSB7CisgICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgIT0gTkVUU05NUF9OT19TVUNIX1BST0NFU1MpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICoga2lsbCB0aGUgY2hpbGQsIGluIGNhc2Ugd2UgZ290IGFuIGVycm9yIGFuZCB0aGUgY2hpbGQgaXMgbm90CisgICAgICAgICAqIGNvb3BlcmF0aW5nLiAgSWdub3JlIHRoZSByZXR1cm4gY29kZS4KKyAgICAgICAgICovCisjaWZkZWYgSEFWRV9TSUdOQUwKKyAgICAgICAgKHZvaWQpa2lsbChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkLCBTSUdLSUxMKTsKKyNlbmRpZgogI2lmIEhBVkVfU1lTX1dBSVRfSAotICAgICAgICB3YWl0cGlkKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQsIDAsIDApOworICAgICAgICB3YWl0cGlkKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQsIE5VTEwsIDApOwogI2VuZGlmCiAjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQgKG1pbmd3MzIpICYmICFkZWZpbmVkIChIQVZFX1NJR05BTCkKLSAgICAgICAgaWYgKCFDbG9zZUhhbmRsZSgoSEFORExFKXBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQpKSB7CisgICAgICAgIGlmICghQ2xvc2VIYW5kbGUocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCkpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9wYXNzX3BlcnNpc3QiLCJjbG9zZV9wZXJzaXN0X3BpcGUgcGlkOiBjbG9zZSBlcnJvclxuIikpOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgcGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9IC0xOworICAgICAgICBwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID0gTkVUU05NUF9OT19TVUNIX1BST0NFU1M7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMKaW5kZXggNzI1MjFhMC4uZTkwYzJlOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWZkZWYgc29sYXJpczIKICNkZWZpbmUgX0tNRU1VU0VSICAgICAgICAgICAgICAgLyogTmVlZGVkIGJ5IDxzeXMvdXNlci5oPiAqLwpAQCAtMjksMTEgKzMwLDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTQ1LDE1ICs0MiwxNSBAQAogI2lmIEhBVkVfS1ZNX0gKICNpbmNsdWRlIDxrdm0uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJwcm9jLmgiCisjaWZkZWYgVVNJTkdfSE9TVF9EQVRBX0FDQ0VTU19TV1JVTl9NT0RVTEUKKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorI2VuZGlmCiAjaWZkZWYgVVNJTkdfVUNEX1NOTVBfRVJST1JNSUJfTU9EVUxFCiAjaW5jbHVkZSAiZXJyb3JtaWIuaCIKICNlbHNlCkBAIC03NiwyMSArNzMsMjQgQEAKICAgICAgKiBpbmZvcm1hdGlvbiBhdCAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfcHJvY192YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1BST0NNSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge1BST0NNSU59fSwKLSAgICAgICAge1BST0NNQVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge1BST0NNQVh9fSwKLSAgICAgICAge1BST0NDT1VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge1BST0NDT1VOVH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7RVJST1JNU0d9fSwKLSAgICAgICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge0VSUk9SRklYfX0sCi0gICAgICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7RVJST1JGSVhDTUR9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1BST0NNSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtQUk9DTUlOfX0sCisgICAgICAgIHtQUk9DTUFYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7UFJPQ01BWH19LAorICAgICAgICB7UFJPQ0NPVU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7UFJPQ0NPVU5UfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtFUlJPUk1TR319LAorICAgICAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7RVJST1JGSVh9fSwKKyAgICAgICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtFUlJPUkZJWENNRH19CiAgICAgfTsKIAogICAgIC8qCkBAIC0yMTAsOCArMjEwLDEyIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICgqcHJvY3ApLT5taW4gPSAwOwogICAgIH0gZWxzZSB7CisgICAgICAgIC8qIERlZmF1bHQgdG8gYXNzc3VtZSB0aGF0IHdlIHJlcXVpcmUgYXQgbGVhc3Qgb25lCisgICAgICAgICAqICBzdWNoIHByb2Nlc3MgdG8gYmUgcnVubmluZywgYnV0IG5vIHVwcGVyIGxpbWl0ICovCiAgICAgICAgICgqcHJvY3ApLT5tYXggPSAwOwotICAgICAgICAoKnByb2NwKS0+bWluID0gMDsKKyAgICAgICAgKCpwcm9jcCktPm1pbiA9IDE7CisgICAgICAgIC8qIFRoaXMgZnJlZXMgInByb2MgPHByb2NuYW1lPiAwIDAiIHRvIG1vbml0b3IKKyAgICAgICAgICogcHJvY2Vzc2VzIHRoYXQgc2hvdWxkIF9ub3RfIGJlIHJ1bm5pbmcuICovCiAgICAgfQogI2lmZGVmIE5FVFNOTVBfUFJPQ0ZJWENNRAogICAgIHNwcmludGYoKCpwcm9jcCktPmZpeGNtZCwgTkVUU05NUF9QUk9DRklYQ01ELCAoKnByb2NwKS0+bmFtZSk7CkBAIC0yNjEsOSArMjY1LDEyIEBACiAgICAgICAgIGNhc2UgRVJST1JGTEFHOgogICAgICAgICAgICAgbG9uZ19yZXQgPSBzaF9jb3VudF9wcm9jcyhwcm9jLT5uYW1lKTsKICAgICAgICAgICAgIGlmIChsb25nX3JldCA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgLyogVG9vIGZldyBwcm9jZXNzZXMgcnVubmluZyAqLwogICAgICAgICAgICAgICAgICgocHJvYy0+bWluICYmIGxvbmdfcmV0IDwgcHJvYy0+bWluKSB8fAorICAgICAgICAgICAgICAgICAgIC8qIFRvbyBtYW55IHByb2Nlc3NlcyBydW5uaW5nICovCiAgICAgICAgICAgICAgICAgIChwcm9jLT5tYXggJiYgbG9uZ19yZXQgPiBwcm9jLT5tYXgpIHx8Ci0gICAgICAgICAgICAgICAgIChwcm9jLT5taW4gPT0gMCAmJiBwcm9jLT5tYXggPT0gMCAmJiBsb25nX3JldCA8IDEpKSkgeworICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NlcyBydW5uaW5nIHRoYXQgc2hvdWxkbid0IGJlICovCisgICAgICAgICAgICAgICAgIChwcm9jLT5taW4gPT0gMCAmJiBwcm9jLT5tYXggPT0gMCAmJiBsb25nX3JldCA+IDApKSkgewogICAgICAgICAgICAgICAgIGxvbmdfcmV0ID0gMTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbG9uZ19yZXQgPSAwOwpAQCAtMjc0LDE2ICsyODEsMjAgQEAKICAgICAgICAgICAgIGlmIChsb25nX3JldCA8IDApIHsKICAgICAgICAgICAgICAgICBlcnJtc2dbMF0gPSAwOyAgLyogY2F0Y2ggb3V0IG9mIG1lbSBlcnJvcnMgcmV0dXJuIDAgY291bnQgKi8KICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvYy0+bWluICYmIGxvbmdfcmV0IDwgcHJvYy0+bWluKSB7Ci0gICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKKyAgICAgICAgICAgICAgICBpZiAoIGxvbmdfcmV0ID4gMCApCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVG9vIGZldyAlcyBydW5uaW5nICgjID0gJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MtPm5hbWUsIChpbnQpIGxvbmdfcmV0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAiTm8gJXMgcHJvY2VzcyBydW5uaW5nIiwgcHJvYy0+bmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb2MtPm1heCAmJiBsb25nX3JldCA+IHByb2MtPm1heCkgewogICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVG9vIG1hbnkgJXMgcnVubmluZyAoIyA9ICVkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLT5uYW1lLCAoaW50KSBsb25nX3JldCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHByb2MtPm1pbiA9PSAwICYmIHByb2MtPm1heCA9PSAwICYmIGxvbmdfcmV0IDwgMSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jLT5taW4gPT0gMCAmJiBwcm9jLT5tYXggPT0gMCAmJiBsb25nX3JldCA+IDApIHsKICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgIk5vICVzIHByb2Nlc3MgcnVubmluZy4iLCBwcm9jLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBwcm9jZXNzIHNob3VsZCBub3QgYmUgcnVubmluZy4iLCBwcm9jLT5uYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZXJybXNnWzBdID0gMDsKICAgICAgICAgICAgIH0KQEAgLTM0OCw2ICszNTksMTUgQEAKICAgICByZXR1cm4gKHByb2MpOwogfQogCisjaWZkZWYgVVNJTkdfSE9TVF9EQVRBX0FDQ0VTU19TV1JVTl9NT0RVTEUKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN3cnVuX2NvdW50X3Byb2Nlc3Nlc19ieV9uYW1lKQoraW50CitzaF9jb3VudF9wcm9jcyhjaGFyICpwcm9jbmFtZSkKK3sKKyAgICByZXR1cm4gc3dydW5fY291bnRfcHJvY2Vzc2VzX2J5X25hbWUoIHByb2NuYW1lICk7Cit9CisjZWxzZQorCiAjaWZkZWYgYnNkaTIKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CkBAIC0zOTksNyArNDE5LDcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogI2luY2x1ZGUgPHByb2NpbmZvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKQEAgLTc5NCw2ICs4MTQsNyBAQAogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfU0xBU0hfUFJPQ19NRVRIT0RfICovCiAjZWxzZQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmluZF9maWVsZCkKIGludAogc2hfY291bnRfcHJvY3MoY2hhciAqcHJvY25hbWUpCiB7CkBAIC04NTIsMyArODczLDQgQEAKICAgICByZXR1cm4gKHJldCk7CiB9CiAjZW5kaWYKKyNlbmRpZiAgIC8qICFVU0lOR19IT1NUX0RBVEFfQUNDRVNTX1NXUlVOX01PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMKaW5kZXggNTY5MjEwZC4uMDE3ZmQ1YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jCkBAIC05LDExICs5LDkgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKQEAgLTI2LDYgKzI0LDkgQEAKIAogI2luY2x1ZGUgInByb3h5LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyZXF1ZXN0X3NldF9lcnJvcl9pZHgpCisKIHN0YXRpYyBzdHJ1Y3Qgc2ltcGxlX3Byb3h5ICpwcm94aWVzID0gTlVMTDsKIAogb2lkICAgICAgICAgICAgIHRlc3RvaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgODg4OCwgMSB9OwpAQCAtMTA1LDcgKzEwNiw5IEBACiAKICAgICBERUJVR01TR1RMKCgicHJveHlfY29uZmlnIiwgInBhcnNpbmcgYXJnczogJWRcbiIsIGFyZ24pKTsKICAgICAvKiBDYWxsIHNwZWNpYWwgcGFyc2VfYXJncyB0aGF0IGFsbG93cyBmb3Igbm8gc3BlY2lmaWVkIGNvbW11bml0eSBzdHJpbmcgKi8KLSAgICBhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnbiwgYXJndiwgJnNlc3Npb24sICJDOiIsIHByb3h5T3B0UHJvYyk7CisgICAgYXJnID0gbmV0c25tcF9wYXJzZV9hcmdzKGFyZ24sIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBwcm94eU9wdFByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUEFSU0VfQVJHU19OT0xPR0dJTkcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BBUlNFX0FSR1NfTk9aRVJPKTsKIAogICAgIC8qIHJlc2V0IHRoaXMgaW4gY2FzZSB3ZSBtb2RpZmllZCBpdCAqLwogICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELApAQCAtMzU3LDYgKzM2MCw3IEBACiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShyZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19TRVQpOwogICAgICAgICBicmVhazsKQEAgLTM4NCw2ICszODgsNyBAQAogICAgICAgICAgKiAgTm90aGluZyB0byBkbyBpbiB0aGlzIHBhc3MKICAgICAgICAgICovCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgbW9kZSBmb3IgcHJveHkgY2FsbGVkICglZClcbiIsCkBAIC00MDQsNyArNDA5LDMzIEBACiAgICAgICAgIG91cm5hbWUgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWU7CiAgICAgICAgIG91cmxlbmd0aCA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGg7CiAKLSAgICAgICAgaWYgKHNwLT5iYXNlX2xlbiA+IDApIHsKKyAgICAgICAgaWYgKHNwLT5iYXNlX2xlbiAmJgorICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQgJiYKKyAgICAgICAgICAgIChzbm1wX29pZF9jb21wYXJlKG91cm5hbWUsIG91cmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5iYXNlLCBzcC0+YmFzZV9sZW4pIDwgMCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAicHJveHkiLCAicmVxdWVzdCBpcyBvdXQgb2YgcmVnaXN0ZXJlZCByYW5nZVxuIikpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENyZWF0ZSBHRVRORVhUIHJlcXVlc3Qgd2l0aCBhbiBPSUQgc28gdGhlCisgICAgICAgICAgICAgKiBtYXN0ZXIgcmV0dXJucyB0aGUgZmlyc3QgT0lEIGluIHRoZSByZWdpc3RlcmVkIHJhbmdlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1jcHkob3VybmFtZSwgc3AtPmJhc2UsIHNwLT5iYXNlX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgICAgIG91cmxlbmd0aCA9IHNwLT5iYXNlX2xlbjsKKyAgICAgICAgICAgIGlmIChvdXJuYW1lW291cmxlbmd0aC0xXSA8PSAxKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCByYW5nZSBlbmRzIHdpdGggeC55LnouMQorICAgICAgICAgICAgICAgICAqIC0+IGFzayBmb3IgdGhlIG5leHQgb2YgeC55LnoKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBvdXJsZW5ndGgtLTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCByYW5nZSBlbmRzIHdpdGggeC55LnouQQorICAgICAgICAgICAgICAgICAqIC0+IGFzayBmb3IgdGhlIG5leHQgb2YgeC55LnouQS0xLk1BWF9TVUJJRAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG91cm5hbWVbb3VybGVuZ3RoLTFdLS07CisgICAgICAgICAgICAgICAgb3VybmFtZVtvdXJsZW5ndGhdID0gTUFYX1NVQklEOworICAgICAgICAgICAgICAgIG91cmxlbmd0aCsrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNwLT5iYXNlX2xlbiA+IDApIHsKICAgICAgICAgICAgIGlmICgob3VybGVuZ3RoIC0gc3AtPm5hbWVfbGVuICsgc3AtPmJhc2VfbGVuKSA+IE1BWF9PSURfTEVOKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiB0b28gbGFyZ2UgCkBAIC00MTksOCArNDUwLDggQEAKICAgICAgICAgICAgICAqIHN1ZmZpeCBhcHBlbmRlZD8gCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICJsZW5ndGg9JWQsIGJhc2VfbGVuPSVkLCBuYW1lX2xlbj0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91cmxlbmd0aCwgc3AtPmJhc2VfbGVuLCBzcC0+bmFtZV9sZW4pKTsKLSAgICAgICAgICAgIGlmIChvdXJsZW5ndGggPiAoaW50KSBzcC0+bmFtZV9sZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW91cmxlbmd0aCwgKGludClzcC0+YmFzZV9sZW4sIChpbnQpc3AtPm5hbWVfbGVuKSk7CisgICAgICAgICAgICBpZiAob3VybGVuZ3RoID4gc3AtPm5hbWVfbGVuKQogICAgICAgICAgICAgICAgIG1lbWNweSgmKHNwLT5iYXNlW3NwLT5iYXNlX2xlbl0pLCAmKG91cm5hbWVbc3AtPm5hbWVfbGVuXSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpICogKG91cmxlbmd0aCAtIHNwLT5uYW1lX2xlbikpOwogICAgICAgICAgICAgb3VybGVuZ3RoID0gb3VybGVuZ3RoIC0gc3AtPm5hbWVfbGVuICsgc3AtPmJhc2VfbGVuOwpAQCAtNDk1LDcgKzUyNiw3IEBACiAgICAgICAgICAqIFdXV1hYWDogZG9uJ3QgbGVhdmUgcmVxdWVzdHMgZGVsYXllZCBpZiBvcGVyYXRpb24gaXMKICAgICAgICAgICogc29tZXRoaW5nIGxpa2UgVElNRU9VVCAKICAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICJnb3QgdGltZWQgb3V0Li4uIHJlcXVlc3RzID0gJTA4cFxuIiwgcmVxdWVzdHMpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgImdvdCB0aW1lZCBvdXQuLi4gcmVxdWVzdHMgPSAlOHBcbiIsIHJlcXVlc3RzKSk7CiAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKQEAgLTUyMywxMyArNTU0LDE0IEBACiAgICAgICAgICAgICAgKiBOb3Qgc3VyZSBpZiBhbnkgb3RoZXIgZXJyb3IgY29kZXMgbmVlZCB0aGUgc2FtZSB0cmVhdG1lbnQuIExlZnQKICAgICAgICAgICAgICAqIGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSByZWFkZXIuLi4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgImdvdCBlcnJvciByZXNwb25zZSAoJWQpXG4iLCBwZHUtPmVycnN0YXQpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICJnb3QgZXJyb3IgcmVzcG9uc2UgKCVsZClcbiIsIHBkdS0+ZXJyc3RhdCkpOwogICAgICAgICAgICAgaWYoKGNhY2hlLT5yZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVCkgJiYKICAgICAgICAgICAgICAgIChTTk1QX0VSUl9OT1NVQ0hOQU1FID09IHBkdS0+ZXJyc3RhdCkpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAiICBpZ25vcmluZyBlcnJvciByZXNwb25zZVxuIikpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZChyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKICAgICAgICAgICAgIH0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAJICAgIGVsc2UgaWYgKGNhY2hlLT5yZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX0FDVElPTikgewogCQkvKgogCQkgKiBJbiBvcmRlciBmb3IgbmV0c25tcF93cmFwX3VwX3JlcXVlc3QgdG8gY29uc2lkZXIgdGhlCkBAIC01MzksMTMgKzU3MSwxNCBAQAogCQkgKgk/ZnVuYz1kZXRhaWwmYXRpZD0xMTI2OTQmYWlkPTE1NTQyNjEmZ3JvdXBfaWQ9MTI2OTQKIAkJICovCiAJCURFQlVHTVNHVEwoKCJwcm94eSIsCi0JCSAgICAiZ290IFNFVCBlcnJvciAlcywgaW5kZXggJWRcbiIsCisJCSAgICAiZ290IFNFVCBlcnJvciAlcywgaW5kZXggJWxkXG4iLAogCQkgICAgc25tcF9lcnJzdHJpbmcocGR1LT5lcnJzdGF0KSwgcGR1LT5lcnJpbmRleCkpOwogCQluZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQoCiAJCSAgICByZXF1ZXN0cywgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKIAkJbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9pZHgocmVxdWVzdHMsIHBkdS0+ZXJyc3RhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5lcnJpbmRleCk7CiAJICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICBlbHNlIHsKIAkJbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKCByZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRCk7CkBAIC01ODMsNyArNjE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YmFzZV9sZW4pICE9IDApKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJwcm94eSIsICJvdXQgb2YgcmVnaXN0ZXJlZCByYW5nZS4uLiAiKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJwcm94eSIsIHZhci0+bmFtZSwgc3AtPmJhc2VfbGVuKSk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICIgKCVkKSAhPSAiLCBzcC0+YmFzZV9sZW4pKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIiAoJWQpICE9ICIsIChpbnQpc3AtPmJhc2VfbGVuKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJwcm94eSIsIHNwLT5iYXNlLCBzcC0+YmFzZV9sZW4pKTsKICAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIlxuIikpOwogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9OVUxMLCBOVUxMLCAwKTsKQEAgLTU5NSw3ICs2MjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+bmFtZV9sZW4pICE9IDApKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJwcm94eSIsICJvdXQgb2YgcmVnaXN0ZXJlZCBiYXNlIHJhbmdlLi4uICIpKTsKICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoInByb3h5IiwgdmFyLT5uYW1lLCBzcC0+bmFtZV9sZW4pKTsKLSAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIiAoJWQpICE9ICIsIHNwLT5uYW1lX2xlbikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiICglZCkgIT0gIiwgKGludClzcC0+bmFtZV9sZW4pKTsKICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoInByb3h5Iiwgc3AtPm5hbWUsIHNwLT5uYW1lX2xlbikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX05VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMKaW5kZXggYTk0YWY1Yy4uZjdhOGM2MyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jCkBAIC0xLDEyICsxLDkgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xOCw5ICsxNSw2IEBACiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgpAQCAtMzAsNyArMjQsMTIgQEAKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgInZlcnNpb25pbmZvLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL3Jlc3RhcnQuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiIC8qIGNsZWFyX2NhY2hlICovCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNsZWFyX2NhY2hlKQorCiAKIHZvaWQKIGluaXRfdmVyc2lvbmluZm8odm9pZCkKQEAgLTQxLDI4ICs0MCwyOCBAQAogICAgICAqIGluZm9ybWF0aW9uIGF0IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92ZXJzaW9uX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7VkVSVEFHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJUQUd9fSwKLSAgICAgICAge1ZFUkRBVEUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUkRBVEV9fSwKLSAgICAgICAge1ZFUkNEQVRFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJDREFURX19LAotICAgICAgICB7VkVSSURFTlQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUklERU5UfX0sCi0gICAgICAgIHtWRVJDT05GSUcsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUkNPTkZJR319LAotICAgICAgICB7VkVSQ0xFQVJDQUNIRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJDTEVBUkNBQ0hFfX0sCi0gICAgICAgIHtWRVJVUERBVEVDT05GSUcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSVVBEQVRFQ09ORklHfX0sCi0gICAgICAgIHtWRVJSRVNUQVJUQUdFTlQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSUkVTVEFSVEFHRU5UfX0sCi0gICAgICAgIHtWRVJTQVZFUEVSU0lTVEVOVCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJTQVZFUEVSU0lTVEVOVH19LAotICAgICAgICB7VkVSREVCVUdHSU5HLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUkRFQlVHR0lOR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtWRVJUQUcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUlRBR319LAorICAgICAgICB7VkVSREFURSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSREFURX19LAorICAgICAgICB7VkVSQ0RBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUkNEQVRFfX0sCisgICAgICAgIHtWRVJJREVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSSURFTlR9fSwKKyAgICAgICAge1ZFUkNPTkZJRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSQ09ORklHfX0sCisgICAgICAgIHtWRVJDTEVBUkNBQ0hFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUkNMRUFSQ0FDSEV9fSwKKyAgICAgICAge1ZFUlVQREFURUNPTkZJRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJVUERBVEVDT05GSUd9fSwKKyAgICAgICAge1ZFUlJFU1RBUlRBR0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJSRVNUQVJUQUdFTlR9fSwKKyAgICAgICAge1ZFUlNBVkVQRVJTSVNURU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUlNBVkVQRVJTSVNURU5UfX0sCisgICAgICAgIHtWRVJERUJVR0dJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSREVCVUdHSU5HfX0KICAgICB9OwogCiAgICAgLyoKQEAgLTEwOSwyMiArMTA4LDIxIEBACiAgICAgICAgIGxvbmdfcmV0ID0gbmFtZVs4XTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKICAgICBjYXNlIFZFUlRBRzoKLSAgICAgICAgc3ByaW50ZihlcnJtc2csIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7CisgICAgICAgIHN0cmxjcHkoZXJybXNnLCBuZXRzbm1wX2dldF92ZXJzaW9uKCksIHNpemVvZihlcnJtc2cpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGVycm1zZyk7CiAgICAgY2FzZSBWRVJEQVRFOgotICAgICAgICBzcHJpbnRmKGVycm1zZywgIiREYXRlJCIpOworICAgICAgICBzdHJsY3B5KGVycm1zZywgIiREYXRlJCIsIHNpemVvZihlcnJtc2cpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGVycm1zZyk7CiAgICAgY2FzZSBWRVJDREFURToKICAgICAgICAgY3VydGltZSA9IHRpbWUoTlVMTCk7CiAgICAgICAgIGNwdHIgPSBjdGltZSgmY3VydGltZSk7Ci0gICAgICAgIHNwcmludGYoZXJybXNnLCBjcHRyKTsKKyAgICAgICAgc3RybGNweShlcnJtc2csIGNwdHIsIHNpemVvZihlcnJtc2cpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKSAtIDE7IC8qIC0gMSB0byBzdHJpcCB0cmFpbGluZyBuZXdsaW5lICovCiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBlcnJtc2cpOwogICAgIGNhc2UgVkVSSURFTlQ6Ci0gICAgICAgIHNwcmludGYoZXJybXNnLAotICAgICAgICAgICAgICAgICIkSWQkIik7CisgICAgICAgIHN0cmxjcHkoZXJybXNnLCAiJElkJCIsIHNpemVvZihlcnJtc2cpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGVycm1zZyk7CiAgICAgY2FzZSBWRVJDT05GSUc6CkBAIC0xMzQsNyArMTMyLDcgQEAKICAgICAgICAgICAgICp2YXJfbGVuID0gMTAyNDsgICAgLyogbWliIGltcG9zZWQgcmVzdHJpY3Rpb24gKi8KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgY29uZmlnX29wdHM7CiAjZWxzZQotICAgICAgICBzcHJpbnRmKGVycm1zZywgIiIpOworICAgICAgICBzdHJsY3B5KGVycm1zZywgIiIsIHNpemVvZihlcnJtc2cpKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBlcnJtc2cpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAppbmRleCBkOTkxMTQ3Li4wMDc0MjRlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgKQEAgLTI4LDUgKzI4LDggQEAKICNkZWZpbmUgVkVSU0FWRVBFUlNJU1RFTlQgMTMKICNkZWZpbmUgVkVSREVCVUdHSU5HIDIwCiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL3Jlc3RhcnQpCiBjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9WRVJTSU9OSU5GT19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jCmluZGV4IDc5ZjEwMDQuLmY3NmNlOTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jCkBAIC0xMywxNCArMTMsMTQgQEAKIHZvaWQKIGluaXRfdm1zdGF0KHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgdm1zdGF0X29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxMSB9OworICAgIGNvbnN0IG9pZCAgdm1zdGF0X29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxMSB9OwogCiAgICAgREVCVUdNU0dUTCgoInZtc3RhdCIsICJJbml0aWFsaXppbmdcbiIpKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cCgKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInZtc3RhdCIsIHZtc3RhdF9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bXN0YXRfb2lkLCBPSURfTEVOR1RIKHZtc3RhdF9vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCi0gICAgICAgIE1JQklOREVYLCBSQVdTV0FQT1VUKTsKKyAgICAgICAgTUlCSU5ERVgsIENQVU5VTUNQVVMpOwogfQogCiAKQEAgLTM4LDYgKzM4LDcgQEAKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBvYmogPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lWyByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aC0yIF07CisKICAgICAgICAgc3dpdGNoIChvYmopIHsKICAgICAgICAgY2FzZSBNSUJJTkRFWDogICAgICAgICAgICAgLyogZHVtbXkgdmFsdWUgKi8KICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwgMSk7CkBAIC0xMTIsNiArMTEzLDIyIEBACiAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+c2lycV90aWNrcyAmIDB4ZmZmZmZmZmYpOwogICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQVVJBV1NURUFMOgorICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnN0ZWFsX3RpY2tzICYgMHhmZmZmZmZmZik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BVUkFXR1VFU1Q6CisgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+Z3Vlc3RfdGlja3MgJiAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFVSQVdHVUVTVE5JQ0U6CisgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+Z3Vlc3RuaWNlX3RpY2tzICYgMHhmZmZmZmZmZik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BVTlVNQ1BVUzoKKyAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfbnVtICYgMHg3ZmZmZmZmZik7CisgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLyoKICAgICAgICAgICogICdDb29rZWQnIENQVSBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCmluZGV4IGI4ZDUyMDIuLjlmZGY0ZjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCkBAIC0zNiw1ICszNiw5IEBACiAjZGVmaW5lIENQVVJBV1NPRlRJUlEgNjEKICNkZWZpbmUgUkFXU1dBUElOIDYyCiAjZGVmaW5lIFJBV1NXQVBPVVQgNjMKKyNkZWZpbmUgQ1BVUkFXU1RFQUwgNjQKKyNkZWZpbmUgQ1BVUkFXR1VFU1QgNjUKKyNkZWZpbmUgQ1BVUkFXR1VFU1ROSUNFIDY2CisjZGVmaW5lIENQVU5VTUNQVVMgNjcKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfVk1TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jCmluZGV4IGQ0OTA0ZjkuLjYyZDdjZTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYwpAQCAtMzksNiArMzksOSBAQAogLyoKICAqIGxpYnBlcmZzdGF0IHN0cnVjdHMgCiAgKi8KKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgpAQCAtNDYsNyArNDksNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogLyoKICAqIEhlYWRlciBmaWxlIGZvciB0aGlzIG1vZHVsZSAKQEAgLTE1Myw0NSArMTU2LDUyIEBACiAJICogV2hpY2ggdmFyaWFibGVzIGRvIHdlIHNlcnZpY2UgPyAKIAkgKi8KIAlzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotCQl7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge01JQklOREVYfX0sCi0JCXtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7RVJST1JOQU1FfX0sCi0JCXtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0JCXtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLQkJe0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLQkJe0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7SU9SRUNFSVZFfX0sCi0JCXtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtTWVNJTlRFUlJVUFRTfX0sCi0JCXtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtTWVNDT05URVhUfX0sCi0JCXtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLQkJe0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVU1lTVEVNfX0sCi0JCXtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLQkJe0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVJBV1VTRVJ9fSwKLQkJe0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVUkFXU1lTVEVNfX0sCi0JCXtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVSQVdJRExFfX0sCi0JCXtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVSQVdXQUlUfX0sCi0JCXtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVJBV0tFUk5FTH19LAotCQl7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtJT1JBV1NFTlR9fSwKLQkJe0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7SU9SQVdSRUNFSVZFfX0sCi0JCXtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtTWVNSQVdJTlRFUlJVUFRTfX0sCi0JCXtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtTWVNSQVdDT05URVhUfX0sCisJCXtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorCQl7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisJCXtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisJCXtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKwkJe0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKwkJe0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKwkJe1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorCQl7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisJCXtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKwkJe0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKwkJe0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorCQl7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisJCXtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisJCXtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKwkJe0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXV0FJVH19LAorCQl7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorCQl7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAorCQl7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXUkVDRUlWRX19LAorCQl7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdJTlRFUlJVUFRTfX0sCisJCXtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0NPTlRFWFR9fSwKIAkJLyoKIAkJICogRnV0dXJlIHVzZTogCi0JCSAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotCQkgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorCQkgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKwkJICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KIAkJICovCiAJfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgKaW5kZXggNTA4NjlhYi4uYTEzZmNjZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgLyoKICAgICAgKiBEaXJlY3RpdmUgdG8gaW5jbHVkZSB1dGlsaXR5IG1vZHVsZSAKICAgICAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAgICAgLyoKICAgICAgKiB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgaW5kZXggb3Vyc2VsdmVzLCBiZWNhdXNlIHBlcmZzdGF0IHN0cnVjdHVyZXMKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMKaW5kZXggOTRkMzJiMy4uZTM1YjZjZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidm1zdGF0LmgiCiAKIC8qCkBAIC01Nyw0MSArNTcsNDggQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJTlRSfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lOVFJ9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaAppbmRleCAwYjY3YTEyLi43NGJmMzFiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX1ZNU1RBVF9CU0RJNF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9WTVNUQVRfQlNESTRfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF92bXN0YXRfYnNkaTQodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYwppbmRleCA3MDQxNWU1Li5kOTZjNTVjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidm1zdGF0LmgiCiAjaW5jbHVkZSAidm1zdGF0X2RhcndpbjcuaCIKIApAQCAtNzQsNDUgKzc0LDUyIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSU5UUn19LAotICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXSU5URVJSVVBUU319LAotICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXQ09OVEVYVH19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJTlRSfX0sCisgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdDT05URVhUfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oCmluZGV4IGY5MmU1MDkuLmIxYTMwMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX1ZNU1RBVF9EQVJXSU43X0gKICNkZWZpbmUgX01JQkdST1VQX1ZNU1RBVF9EQVJXSU43X0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfdm1zdGF0X2Rhcndpbjcodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jCmluZGV4IDkxNzBiMjYuLjMzZjU0MTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogSGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxlIApAQCAtMTY1LDQzICsxNjUsNTAgQEAKICAgICAgKiBXaGljaCB2YXJpYWJsZXMgZG8gd2Ugc2VydmljZSA/IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1dBSVR9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXU0VOVH19LAotICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1JFQ0VJVkV9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdXQUlUfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKKyAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdSRUNFSVZFfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmgKaW5kZXggYWFlMTc5MC4uODk1NGUzNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIC8qCiAgKiBEaXJlY3RpdmUgdG8gaW5jbHVkZSB1dGlsaXR5IG1vZHVsZSAKICAqLwotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICAgICAvKgogICAgICAqIE1JQiB3YW50cyBWX0NQVV9TWVNURU0gd2hpY2ggaXMgc3lzaW5mbyBWX0NQVV9LRVJORUwgKyBWX0NQVV9XQUlUIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYwppbmRleCA5MTg1YmM2Li4zZGU4OWIyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYwpAQCAtNTcsNyArNTcsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ2bXN0YXQuaCIKICNpbmNsdWRlICJ2bXN0YXRfZnJlZWJzZDIuaCIKIApAQCAtODgsNDUgKzg4LDUyIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSU5UUn19LAotICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXSU5URVJSVVBUU319LAotICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXQ09OVEVYVH19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJTlRSfX0sCisgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdDT05URVhUfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKaW5kZXggZjBlNjBiOC4uMjZiNDRiNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WTVNUQVRfRlJFRUJTRDJfSAogI2RlZmluZSBfTUlCR1JPVVBfVk1TVEFUX0ZSRUVCU0QyX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfdm1zdGF0X2ZyZWVic2QyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMKaW5kZXggODkyZmI3ZS4uYTc4NDUwMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jCkBAIC00NSw3ICs0NSw3IEBACiAvKgogICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIFVDRC1TTk1QIAogICovCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogLyoKICAqIEhlYWRlciBmaWxlIGZvciB0aGlzIG1vZHVsZSAKQEAgLTE3MSw0NSArMTcxLDUyIEBACiAgICAgICogV2hpY2ggdmFyaWFibGVzIGRvIHdlIHNlcnZpY2UgPyAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdXQUlUfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1NFTlR9fSwKLSAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdSRUNFSVZFfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXV0FJVH19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCisgICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXUkVDRUlWRX19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaAppbmRleCBlMTAwOTVlLi44ZjI2NTk0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIC8qCiAgKiBEaXJlY3RpdmUgdG8gaW5jbHVkZSB1dGlsaXR5IG1vZHVsZSAKICAqLwotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICAgICAvKgogICAgICAqIE1ha2UgNjQtYml0IHBzdGF0IGNhbGxzIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYwppbmRleCBmMDllZDM0Li5kNmVmZjUwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMTA4LDkgKzEwOSwxMiBAQAogCiAjaW5jbHVkZSAibWliZGVmcy5oIgogI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidm1zdGF0LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhhcmR3YXJlX2NwdV9sb2FkKQorCisKIEZpbmRWYXJNZXRob2QgdmFyX2V4dGVuc2libGVfdm1zdGF0OwogCiBzdGF0aWMgaW50IGhhc192bXN0YXQgPSAxOwpAQCAtMTI4LDU0ICsxMzIsNjQgQEAKIGluaXRfdm1zdGF0KHZvaWQpCiB7CiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtSQVdTV0FQSU4sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7UkFXU1dBUElOfX0sCi0gICAgICAgIHtSQVdTV0FQT1VULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1JBV1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCi0gICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1dBSVR9fSwKLSAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lOVFJ9fSwKLSAgICAgICAge0NQVVJBV1NPRlRJUlEsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NPRlRJUlF9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge1JBV1NXQVBJTiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7UkFXU1dBUElOfX0sCisgICAgICAgIHtSQVdTV0FQT1VULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtSQVdTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCisgICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXSU5URVJSVVBUU319LAorICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXQ09OVEVYVH19LAorICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXV0FJVH19LAorICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSU5UUn19LAorICAgICAgICB7Q1BVUkFXU09GVElSUSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU09GVElSUX19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oCmluZGV4IDczOGUyZjEuLjZmN2M1MGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oCkBAIC01LDYgKzUsNyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVk1TVEFUX0gKICNkZWZpbmUgX01JQkdST1VQX1ZNU1RBVF9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9jcHUpCiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYwppbmRleCAxMmM3M2RiLi45NzA2YzQyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidm1zdGF0LmgiCiAKIC8qCkBAIC02Niw0MiArNjYsNDkgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJTlRSfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lOVFJ9fSwKIAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCkBAIC0xOTIsNyArMTk5LDcgQEAKICAgICAgICAgICAgIG1lbXNldChjcHVfbmV3LCAwLCBzaXplb2YoY3B1X25ldykpOwogI2VsaWYgZGVmaW5lZChLRVJOX0NQVElNRSkKICAgICAgICAgaW50ICAgICAgICAgICAgIG1pYlsyXSA9IHsgQ1RMX0tFUk4sIEtFUk5fQ1BUSU1FIH07Ci0gICAgICAgIGludCAgICAgICAgICAgICBzc2l6ZSA9IHNpemVvZihjcHVfbmV3KTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIHNzaXplID0gc2l6ZW9mKGNwdV9uZXcpOwogCiAgICAgICAgIGlmIChzeXNjdGwobWliLCAyLCBjcHVfbmV3LCAmc3NpemUsIE5VTEwsIDApIDwgMCkKICAgICAgICAgICAgIG1lbXNldChjcHVfbmV3LCAwLCBzaXplb2YoY3B1X25ldykpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmgKaW5kZXggZWI2YjE3Mi4uYWRmNWQ0NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVk1TVEFUX05FVEJTRDFfSAogI2RlZmluZSBfTUlCR1JPVVBfVk1TVEFUX05FVEJTRDFfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF92bXN0YXRfbmV0YnNkMSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMKaW5kZXggY2E4YTg3Zi4uMzcxNTA0NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAibWliZGVmcy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIC8qCiAgKiBIZWFkZXIgZmlsZSBmb3IgdGhpcyBtb2R1bGUgCkBAIC0xNjksNDEgKzE2OSw0OCBAQAogICAgICAqIFdoaWNoIHZhcmlhYmxlcyBkbyB3ZSBzZXJ2aWNlID8gCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXV0FJVH19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdTRU5UfX0sCi0gICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXUkVDRUlWRX19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1dBSVR9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAorICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1JFQ0VJVkV9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oCmluZGV4IDgyODIyODguLjc3ZmJiM2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgLyoKICAgICAgKiBEaXJlY3RpdmUgdG8gaW5jbHVkZSB1dGlsaXR5IG1vZHVsZSAKICAgICAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAgICAgLyoKICAgICAgKiBNSUIgd2FudHMgQ1BVX1NZU1RFTSB3aGljaCBpcyBzeXNpbmZvIENQVV9LRVJORUwgKyBDUFVfV0FJVCAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZF9zbm1wLmggYi9hZ2VudC9taWJncm91cC91Y2Rfc25tcC5oCmluZGV4IDM0YzJmYmIuLjBkODdlYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZF9zbm1wLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaApAQCAtMywxMiArMywxNCBAQAogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvdmVyc2lvbmluZm8pCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9wYXNzKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvcGFzc19wZXJzaXN0KQotY29uZmlnX3JlcXVpcmUodWNkLXNubXAvZGlzaykKK2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKHVjZC1zbm1wL2Rpc2ssIDUuNywgdWNkLXNubXAvZGlza19odykpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9sb2FkYXZlKQogY29uZmlnX3JlcXVpcmUoYWdlbnQvZXh0ZW5kKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvZXJyb3JtaWIpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9maWxlKQorI2lmIGRlZmluZWQoSEFWRV9ETEZDTl9IKSAmJiBkZWZpbmVkKEhBVkVfRExPUEVOKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvZGxtb2QpCisjZW5kaWYKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL3Byb3h5KQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvbG9nbWF0Y2gpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9tZW1vcnkpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaAppbmRleCBmZDA3Mzk0Li5kOWRlYzFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKQEAgLTIwLDggKzIwLDE1IEBACiBjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXgpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZSkKICNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKIGNvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyKQorI2VsaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChkcmFnb25mbHkpIHx8IGRlZmluZWQoZGFyd2luKQorY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQpCisjZWxpZiBkZWZpbmVkKG9wZW5ic2Q0KQorY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZCkKKyNlbGlmIGRlZmluZWQobmV0YnNkMSkKK2NvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZCkKICNlbHNlCiBjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF91bnN1cCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYwppbmRleCA1MWUzMzc1Li42M2Y4NTQ5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJ1ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaCIKIApAQCAtMTMsNiArMTQsMTAgQEAKIAogI2luY2x1ZGUgInVkcF9lbmRwb2ludF9wcml2YXRlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfY29tbW9uLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUsIHVkcF9lbmRwb2ludF9jb21tb24pCisKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogbG9jYWwgc3RhdGljIHZhcnMKQEAgLTI0LDExICsyOSw2IEBACiAgKiBpbml0aWFsaXphdGlvbgogICovCiAKLXZvaWQKLW5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9pbml0KHZvaWQpCi17Ci19Ci0KIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogY29udGFpbmVyIGZ1bmN0aW9ucwpAQCAtMTA1LDcgKzEwNSw4IEBACiAgICAgICAgICAqIGZyZWUgYWxsIGl0ZW1zLgogICAgICAgICAgKi8KICAgICAgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfZnJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIH0KIApAQCAtMTE5LDYgKzEyMCw3IEBACiAgKi8KIC8qKgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX0VOVFJZX0NSRUFURQogbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKgogbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSh2b2lkKQogewpAQCAtMTM1LDYgKzEzNyw3IEBACiAKICAgICByZXR1cm4gZW50cnk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfRU5UUllfQ1JFQVRFICovCiAKIC8qKgogICovCkBAIC0xNTMsMjMgKzE1NiwzIEBACiAKICAgICBmcmVlKGVudHJ5KTsKIH0KLQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIFV0aWxpdHkgcm91dGluZXMKLSAqLwotCi0vKioKLSAqIFxpbnRlcm5hbAotICovCi1zdGF0aWMgdm9pZAotX2VudHJ5X3JlbGVhc2UobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKLXsKLSAgICBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfZnJlZShlbnRyeSk7Ci19Ci0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICoKLSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiOGJiNgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiAgVURQIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgRnJlZUJTRC9EcmFnb25GbHlCc2QKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oPgorCisjaW5jbHVkZSAidWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfaW5pdChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NsZWFudXAobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NvcHkobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9kZWxldGUobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB0Y3BDb25uIGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dWRwX2VuZHBvaW50OmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInVkcF9lbmRwb2ludF9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3VkcF9lbmRwb2ludFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgTlNfRUxFTSBzdHJ1Y3QgeGlucGNiCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIHNpemVfdCAgIGxlbjsKKyAgICBpbnQgICAgICBzbmFtZVtdID0geyBDVExfTkVULCBQRl9JTkVULCBJUFBST1RPX1VEUCwgVURQQ1RMX1BDQkxJU1QgfTsKKyAgICBjaGFyICAgICAqdWRwY2JfYnVmID0gTlVMTDsKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICBzdHJ1Y3QgeGlucGNiICAqeGlnID0gTlVMTDsKKyNlbHNlCisgICAgc3RydWN0IHhpbnBnZW4gKnhpZyA9IE5VTEw7CisjZW5kaWYKKyAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIGxlbiA9IDA7CisgICAgaWYgKHN5c2N0bChzbmFtZSwgNCwgMCwgJmxlbiwgMCwgMCkgPCAwIHx8CisgICAgICAgKHVkcGNiX2J1ZiA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN5c2N0bChzbmFtZSwgNCwgdWRwY2JfYnVmLCAmbGVuLCAwLCAwKSA8IDApIHsKKyAgICAgICAgZnJlZSh1ZHBjYl9idWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgVW5waWNrIHRoaXMgaW50byB0aGUgY29uc3RpdHVlbnQgJ3hpbnBnZW4nIHN0cnVjdHVyZXMsIGFuZCBleHRyYWN0CisgICAgICogICAgIHRoZSAnaW5wY2InIGVsZW1lbnRzIGludG8gYSBsaW5rZWQgbGlzdCAoYnVpbHQgaW4gcmV2ZXJzZSkKKyAgICAgKi8KKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBjYiAgKikgdWRwY2JfYnVmOworI2Vsc2UKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgdWRwY2JfYnVmOworICAgIHhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aWdfbGVuKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgd2hpbGUgKHhpZyAmJiAoeGlnLT54aV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCB4aW5wY2IpKSkKKyNlbHNlCisgICAgd2hpbGUgKHhpZyAmJiAoeGlnLT54aWdfbGVuID4gc2l6ZW9mKHN0cnVjdCB4aW5wZ2VuKSkpCisjZW5kaWYKKyAgICB7CisJTlNfRUxFTSBwY2IgPSAqKChOU19FTEVNICopIHhpZyk7CisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisJeGlnID0gKHN0cnVjdCB4aW5wY2IgICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpX2xlbik7CisjZWxzZQorCXhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aWdfbGVuKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICAgICAgaWYgKHBjYi54aV9pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjYpCisJICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBvZGRseSBlbm91Z2gsIHRoZXNlIGFwcGVhciB0byBhbHJlYWR5IGJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgICAgZW50cnktPmxvY19wb3J0ID0gaHRvbnMocGNiLnhpX2lucC5pbnBfbHBvcnQpOworICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSBodG9ucyhwY2IueGlfaW5wLmlucF9mcG9ydCk7CisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKyAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCisJaWYgKHBjYi54aV9pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnBjYi54aV9pbnAuaW42cF9sYWRkciwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmcGNiLnhpX2lucC5pbjZwX2ZhZGRyLCAxNik7CisJfQorCWVsc2UgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZwY2IueGlfaW5wLmlucF9sYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZwY2IueGlfaW5wLmlucF9mYWRkciwgNCk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisJZW50cnktPmluZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorCisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYwppbmRleCBiYThmN2EyLi42ZWRiZGMxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMKQEAgLTQsNiArNCw3IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMTQsMTEgKzE1LDE1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50Lmg+CiAKICNpbmNsdWRlICJ1ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaCIKLQorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgiCiAjaW5jbHVkZSAidWRwX2VuZHBvaW50X3ByaXZhdGUuaCIKIAogI2luY2x1ZGUgPGZjbnRsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRleHRfdXRpbHMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X2FsbCwgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X3dyaXRhYmxlLCB1ZHBfZW5kcG9pbnRfYWxsKQorCiBzdGF0aWMgaW50IF9sb2FkNChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CiAjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKIHN0YXRpYyBpbnQgX2xvYWQ2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKQEAgLTMwLDYgKzM1LDcgQEAKICAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKICAqIEByZXR2YWwgPDA6IGVycm9yCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfV1JJVEFCTEUKIGludAogbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9pbml0KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKIHsKQEAgLTcxLDYgKzc3LDcgQEAKICAgICAvKiogeHh4LXJrczo5IHVkcF9lbmRwb2ludCBkZWxldGUgbm90IGltcGxlbWVudGVkICovCiAgICAgcmV0dXJuIC0xOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX1dSSVRBQkxFICovCiAKIAogLyoqCkBAIC04NCw2ICs5MSw5IEBACiB7CiAgICAgaW50IHJjID0gMDsKIAorICAgIC8qIFNldHVwIHRoZSBwaWRfZnJvbV9pbm9kZSB0YWJsZSwgYW5kIGZpbGwgaXQuKi8KKyAgICBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZV9pbml0KCk7CisKICAgICByYyA9IF9sb2FkNChjb250YWluZXIsIGxvYWRfZmxhZ3MpOwogICAgIGlmKHJjIDwgMCkgewogICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX1VEUF9FTkRQT0lOVF9GUkVFX0tFRVBfQ09OVEFJTkVSOwpAQCAtMTUwLDE0ICsxNjAsMTQgQEAKICAgICBsZW4gPSAoc2VwIC0gcHRyKTsKICAgICBpZiAoLTEgPT0gbmV0c25tcF9hZGRyc3RyX2h0b24ocHRyLCBsZW4pKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXh0OnV0aWw6dHZpIiwgImJhZCBsZW5ndGggJWQgZm9yIGxvYyBhZGRyICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIHVfcHRyX2xlbiwgbGluZV9pbmZvLT5zdGFydCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KXVfcHRyX2xlbiwgbGluZV9pbmZvLT5zdGFydCkpOwogICAgICAgICByZXR1cm4gUE1MUF9SQ19NRU1PUllfVU5VU0VEOwogICAgIH0KICAgICBvZmZzZXQgPSAwOwogICAgIG5ldHNubXBfaGV4X3RvX2JpbmFyeSgmdV9wdHIsICZ1X3B0cl9sZW4sICZvZmZzZXQsIDAsIHB0ciwgTlVMTCk7CiAgICAgaWYgKCg0ICE9IG9mZnNldCkgJiYgKDE2ICE9IG9mZnNldCkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInRleHQ6dXRpbDp0dmkiLCAiYmFkIG9mZnNldCAlZCBmb3IgbG9jIGFkZHIgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBsaW5lX2luZm8tPnN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpb2Zmc2V0LCBsaW5lX2luZm8tPnN0YXJ0KSk7CiAgICAgICAgIHJldHVybiBQTUxQX1JDX01FTU9SWV9VTlVTRUQ7CiAgICAgfQogICAgIGVwLT5sb2NfYWRkcl9sZW4gPSBvZmZzZXQ7CkBAIC0xODYsMTQgKzE5NiwxNCBAQAogICAgIGxlbiA9IChzZXAgLSBwdHIpOwogICAgIGlmICgtMSA9PSBuZXRzbm1wX2FkZHJzdHJfaHRvbihwdHIsIGxlbikpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInRleHQ6dXRpbDp0dmkiLCAiYmFkIGxlbmd0aCAlZCBmb3Igcm10IGFkZHIgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgdV9wdHJfbGVuLCBsaW5lX2luZm8tPnN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpdV9wdHJfbGVuLCBsaW5lX2luZm8tPnN0YXJ0KSk7CiAgICAgICAgIHJldHVybiBQTUxQX1JDX01FTU9SWV9VTlVTRUQ7CiAgICAgfQogICAgIG9mZnNldCA9IDA7CiAgICAgbmV0c25tcF9oZXhfdG9fYmluYXJ5KCZ1X3B0ciwgJnVfcHRyX2xlbiwgJm9mZnNldCwgMCwgcHRyLCBOVUxMKTsKICAgICBpZiAoKDQgIT0gb2Zmc2V0KSAmJiAoMTYgIT0gb2Zmc2V0KSkgewogICAgICAgICBERUJVR01TR1RMKCgidGV4dDp1dGlsOnR2aSIsICJiYWQgb2Zmc2V0ICVkIGZvciBybXQgYWRkciAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGxpbmVfaW5mby0+c3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludClvZmZzZXQsIGxpbmVfaW5mby0+c3RhcnQpKTsKICAgICAgICAgcmV0dXJuIFBNTFBfUkNfTUVNT1JZX1VOVVNFRDsKICAgICB9CiAgICAgZXAtPnJtdF9hZGRyX2xlbiA9IG9mZnNldDsKQEAgLTIyMiw4ICsyMzIsMTMgQEAKICAgICBpbm9kZSA9IHN0cnRvdWxsKHB0ciwgJnB0ciwgMCk7CiAgICAgZXAtPmluc3RhbmNlID0gKHVfaW50KWlub2RlOwogCi0gICAgZXAtPmluZGV4ID0gKHVfaW50KShscGktPnVzZXJfY29udGV4dCk7Ci0gICAgbHBpLT51c2VyX2NvbnRleHQgPSAodm9pZCopKCh1X2ludCkobHBpLT51c2VyX2NvbnRleHQpICsgMSk7CisgICAgLyoKKyAgICAgKiBnZXQgdGhlIHBpZCBhbHNvCisgICAgICovCisgICAgZXAtPnBpZCA9IG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlub2RlKTsKKworICAgIGVwLT5pbmRleCA9ICh1aW50cHRyX3QpKGxwaS0+dXNlcl9jb250ZXh0KTsKKyAgICBscGktPnVzZXJfY29udGV4dCA9ICh2b2lkKikoKGNoYXIqKShscGktPnVzZXJfY29udGV4dCkgKyAxKTsKIAogICAgIGVwLT5vaWRfaW5kZXgub2lkcyA9ICZlcC0+aW5kZXg7CiAgICAgZXAtPm9pZF9pbmRleC5sZW4gPSAxOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgzMTRiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiAgdWRwX2VuZHBvaW50VGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBOZXRCU0QKKyAqCisgKiAkSWQ6IHVkcF9lbmRwb2ludF9saW51eC5jIDE4OTk0IDIwMTAtMDYtMTYgMTM6MTM6MjVaIGR0czEyICQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oPgorCisjaW5jbHVkZSAidWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MsIGludCB2YXIpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfaW5pdChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NsZWFudXAobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NvcHkobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9kZWxldGUobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB1ZHBfZW5kcG9pbnQgZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp1ZHBfZW5kcG9pbnQ6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidWRwX2VuZHBvaW50X2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdWRwX2VuZHBvaW50XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzLCA0KTsKKyNpZiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MsIDYpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MsIGludCB2ZXIpCit7CisgICAgY29uc3QgY2hhciAqbWlibmFtZTsKKyAgICBpbnQgICAgICBtaWJbOF07CisgICAgc2l6ZV90ICAgbWliX2xlbjsKKyAgICBzdHJ1Y3Qga2luZm9fcGNiICpwY2JsaXN0OworICAgIHNpemVfdCAgIHBjYl9sZW47CisgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICBpLCByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBzd2l0Y2ggKHZlcikgeworICAgIGNhc2UgNDoKKyAgICAJbWlibmFtZSA9ICJuZXQuaW5ldC51ZHAucGNibGlzdCI7CisgICAgCWJyZWFrOworICAgIGNhc2UgNjoKKyAgICAJbWlibmFtZSA9ICJuZXQuaW5ldDYudWRwNi5wY2JsaXN0IjsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidWRwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogYmFkIHZlcnNpb24gJWRcbiIsIHZlcik7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzeXNjdGxuYW1ldG9taWIobWlibmFtZSwgbWliLCAmbWliX2xlbikgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInVkcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgcmVzb2x2ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YoKm1pYiksIE5VTEwsICZwY2JfbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidWRwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBzaXplIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgocGNibGlzdCA9IG1hbGxvYyhwY2JfbGVuKSkgPT0gTlVMTCkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidWRwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBhbGxvY2F0ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KHBjYmxpc3QsIDAsIHBjYl9sZW4pOworCisgICAgbWliWzZdID0gc2l6ZW9mKCpwY2JsaXN0KTsKKyAgICBtaWJbN10gPSBwY2JfbGVuIC8gc2l6ZW9mKCpwY2JsaXN0KTsKKworICAgIGlmIChzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZigqbWliKSwKKwkJICAgIHBjYmxpc3QsICZwY2JfbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidWRwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBzaXplIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogIFVucGljayB0aGlzIGludG8gdGhlIGNvbnN0aXR1ZW50IHN0cnVjdHVyZXMsIGFuZCBleHRyYWN0CisgICAgICogICAgIHRoZSAnaW5wY2InIGVsZW1lbnRzIGludG8gYSBsaW5rZWQgbGlzdCAoYnVpbHQgaW4gcmV2ZXJzZSkKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGNiX2xlbiAvIHNpemVvZigqcGNibGlzdCk7IGkrKykgeworCXN0cnVjdCBraW5mb19wY2IgKnBjYiA9IHBjYmxpc3QraTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorCWlmICh2ZXIgPT0gNikgeworCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OworCSAgICBtZW1jcHkoJnNyYywgJnBjYi0+a2lfcywgc2l6ZW9mKHNyYykpOworCSAgICBtZW1jcHkoJmRzdCwgJnBjYi0+a2lfZCwgc2l6ZW9mKGRzdCkpOworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmc3JjLnNpbjZfYWRkciwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmZHN0LnNpbjZfYWRkciwgMTYpOworCSAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhzcmMuc2luNl9wb3J0KTsKKwkgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoZHN0LnNpbjZfcG9ydCk7CisJfQorCWVsc2UgeworCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7CisJICAgIG1lbWNweSgmc3JjLCAmcGNiLT5raV9zLCBzaXplb2Yoc3JjKSk7CisJICAgIG1lbWNweSgmZHN0LCAmcGNiLT5raV9kLCBzaXplb2YoZHN0KSk7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnNyYy5zaW5fYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZkc3Quc2luX2FkZHIsIDQpOworCSAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhzcmMuc2luX3BvcnQpOworCSAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhkc3Quc2luX3BvcnQpOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICB9CisKKyAgICBpZihyYzwwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI2N2RjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogIHVkcF9lbmRwb2ludFRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgT3BlbkJTRAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorCisjaW5jbHVkZSAidWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfaW5pdChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBpbml0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjbGVhbnVwIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCit2b2lkCituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NsZWFudXAobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2NvcHkobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9kZWxldGUobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB1ZHBfZW5kcG9pbnQgZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp1ZHBfZW5kcG9pbnQ6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidWRwX2VuZHBvaW50X2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdWRwX2VuZHBvaW50XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc3RydWN0IGlucGNidGFibGUgdGFibGU7CisgICAgc3RydWN0IGlucGNiICAgKmhlYWQsICpuZXh0LCAqcHJldjsKKyAgICBzdHJ1Y3QgaW5wY2IgICBpbnBjYjsKKyAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIGlmICghYXV0b19ubGlzdChVREJfU1lNQk9MLCAoY2hhciAqKSAmdGFibGUsIHNpemVvZih0YWJsZSkpKSB7CisJREVCVUdNU0dUTCgoInVkcC1taWIvdWRwX2VuZHBvaW50X29wZW5ic2QiLCAiRmFpbGVkIHRvIHJlYWQgdWRwX3N5bWJvbFxuIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBwcmV2ID0gKHN0cnVjdCBpbnBjYiAqKSZDSVJDTEVRX0ZJUlNUKCZ0YWJsZS5pbnB0X3F1ZXVlKTsKKyAgICBwcmV2ID0gTlVMTDsKKyAgICBoZWFkID0gbmV4dCA9IENJUkNMRVFfRklSU1QoJnRhYmxlLmlucHRfcXVldWUpOworCisgICAgd2hpbGUgKG5leHQpIHsKKwlORVRTTk1QX0tMT09LVVAobmV4dCwgKGNoYXIgKikmaW5wY2IsIHNpemVvZihpbnBjYikpOworCWlmIChwcmV2ICYmIENJUkNMRVFfUFJFVigmaW5wY2IsIGlucF9xdWV1ZSkgIT0gcHJldikgeworCSAgICBzbm1wX2xvZyhMT0dfRVJSLCJ1ZGJ0YWJsZSBsaW5rIGVycm9yXG4iKTsKKwkgICAgYnJlYWs7CisJfQorCXByZXYgPSBuZXh0OworCW5leHQgPSBDSVJDTEVRX05FWFQoJmlucGNiLCBpbnBfcXVldWUpOworCisjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICAgICAgaWYgKGlucGNiLmlucF9mbGFncyAmIElOUF9JUFY2KQorICAgICAgICAgICAgZ290byBza2lwOworI2VuZGlmCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoqIG9kZGx5IGVub3VnaCwgdGhlc2UgYXBwZWFyIHRvIGFscmVhZHkgYmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhpbnBjYi5pbnBfbHBvcnQpOworICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhpbnBjYi5pbnBfZnBvcnQpOworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLworCWlmIChpbnBjYi5pbnBfZmxhZ3MgJiBJTlBfSVBWNikgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmaW5wY2IuaW5wX2xhZGRyNiwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmaW5wY2IuaW5wX2ZhZGRyNiwgMTYpOworCX0KKwllbHNlIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmaW5wY2IuaW5wX2xhZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmlucGNiLmlucF9mYWRkciwgNCk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgc2tpcDoKKyNlbmRpZgorCWlmIChuZXh0ID09IGhlYWQpCisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMKaW5kZXggZjRiNjlkZi4uZjUyMjQ0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0xMCwxMSArMTEsMTYgQEAKIAogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfYWxsLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfd3JpdGFibGUsIHVkcF9lbmRwb2ludF9hbGwpCisKIHN0YXRpYyBpbnQgX2xvYWRfdWRwX2VuZHBvaW50X3RhYmxlX3Y0KG5ldHNubXBfY29udGFpbmVyICosIGludCk7CiAjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KSAmJiBkZWZpbmVkKFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUKQogc3RhdGljIGludCBfbG9hZF91ZHBfZW5kcG9pbnRfdGFibGVfdjYobmV0c25tcF9jb250YWluZXIgKiwgaW50KTsKICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX1dSSVRBQkxFCiBpbnQgCiBuZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2luaXQobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVwKQogewpAQCAtNDgsNiArNTQsNyBAQAogICAgICAqLwogICAgIHJldHVybiAoLTEpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX1dSSVRBQkxFICovCiAKIGludCAKIG5ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIsIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMKaW5kZXggODAzZjUwNC4uMTQ1ZjRjZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJ1ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRbXSA9IHsgVURQRU5EUE9JTlRUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZFtdID0geyBVRFBFTkRQT0lOVFRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSCh1ZHBFbmRwb2ludFRhYmxlX29pZCk7CiAKIHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uIHVkcEVuZHBvaW50VGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMjI2LDcgKzIyNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFJlbW90ZVBvcnRfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UHJvY2Vzc192YWwpCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dWRwRW5kcG9pbnRUYWJsZTp1ZHBFbmRwb2ludFRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CiAKQEAgLTI5NSw2ICsyOTYsMTAgQEAKICAgICAgKiB1ZHBFbmRwb2ludEluc3RhbmNlKDcpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL2Evdy9lL1IvZC9oIAogICAgICAqLwogICAgIHRibF9pZHgtPnVkcEVuZHBvaW50SW5zdGFuY2UgPSB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbDsKKyAgICAvKgorICAgICAqIHVkcEVuZHBvaW50UHJvY2Vzcyg4KS9VTlNJR05FRDMyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9hL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICB0YmxfaWR4LT51ZHBFbmRwb2ludFByb2Nlc3MgPSB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsOwogCiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CkBAIC0zMjMsNyArMzI4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFJlbW90ZVBvcnRfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UHJvY2Vzc192YWwpCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dWRwRW5kcG9pbnRUYWJsZTp1ZHBFbmRwb2ludFRhYmxlX2luZGV4ZXNfc2V0IiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CkBAIC0zMzgsNyArMzQ0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVQb3J0X3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbCkpCiAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CiAKICAgICAvKgpAQCAtNDA1LDkgKzQxMiw5IEBACiAKICAgICAvKgogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB1ZHBFbmRwb2ludFByb2Nlc3MgZGF0YS4KLSAgICAgKiBjb3B5ICgqIHVkcEVuZHBvaW50UHJvY2Vzc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICogY29weSAoKiB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+dGJsX2lkeC51ZHBFbmRwb2ludFByb2Nlc3MKICAgICAgKi8KLSAgICAoKnVkcEVuZHBvaW50UHJvY2Vzc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEudWRwRW5kcG9pbnRQcm9jZXNzOworICAgICgqdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+dGJsX2lkeC51ZHBFbmRwb2ludFByb2Nlc3M7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVkcEVuZHBvaW50UHJvY2Vzc19nZXQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmggYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oCmluZGV4IDM2NzUyYmYuLjBkZWRhMDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaApAQCAtMTMyLDYgKzEzMiwxMSBAQAogICAgICAgICAgKi8KICAgICAgICAgdV9sb25nICAgICAgICAgIHVkcEVuZHBvaW50SW5zdGFuY2U7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogdWRwRW5kcG9pbnRQcm9jZXNzKDgpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL2Evdy9lL1IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgdWRwRW5kcG9pbnRQcm9jZXNzOworCiAKICAgICB9IHVkcEVuZHBvaW50VGFibGVfbWliX2luZGV4OwogCkBAIC0yMDAsOCArMjA1LDggQEAKICAgICAgICAgKiB1ZHBFbmRwb2ludFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleCh1ZHBFbmRwb2ludFRhYmxlX21pYl9pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAidWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTI1Nyw3ICsyNjIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZVBvcnRfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbCk7CiAgICAgaW50CiAgICAgICAgIHVkcEVuZHBvaW50VGFibGVfaW5kZXhlc19zZXQodWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LApAQCAtMjczLDcgKzI4MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFJlbW90ZVBvcnRfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsKTsKIAogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IGQyMjNiOTYuLjBlMjVjMjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjQzLDcgKzI0Myw4IEBACiAgICAgICAgIG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9jb250YWluZXJfZnJlZShlcF9jLCAwKTsKICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsKICAgICB9Ci0gICAgZm9yIChlcCA9IElURVJBVE9SX0ZJUlNUKGVwX2l0KTsgZXA7IGVwID0gSVRFUkFUT1JfTkVYVChlcF9pdCkpIHsKKyAgICBmb3IgKGVwID0gKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5KilJVEVSQVRPUl9GSVJTVChlcF9pdCk7IGVwOworICAgICAgICAgZXAgPSAobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkqKUlURVJBVE9SX05FWFQgKGVwX2l0KSkgewogCiAgICAgICAgIC8qCiAgICAgICAgICAqIFRPRE86MzUyOk06IHwgICB8LT4gc2V0IGluZGV4ZXMgaW4gbmV3IHVkcEVuZHBvaW50VGFibGUgcm93cmVxIGNvbnRleHQuCkBAIC0yNjUsNyArMjY2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgZXAtPnJtdF9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+cm10X2FkZHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+cm10X3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5pbnN0YW5jZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAtPmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+cGlkKSkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgogICAgICAgICAgICAgICAgICAgICAgInVkcEVuZHBvaW50VGFibGUgZGF0YS5cbiIpOwpAQCAtMjkzLDcgKzI5NSw3IEBACiAKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6dWRwRW5kcG9pbnRUYWJsZTp1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9sb2FkIiwKLSAgICAgICAgICAgICAgICJpbnNlcnRlZCAlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMjhjMmRmMy4uNjBkMzdlOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE4IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwRW5kcG9pbnRUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9zaXplLCB1ZHBFbmRwb2ludFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIHVkcEVuZHBvaW50VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uX2dldCwgdWRwRW5kcG9pbnRUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfZ2V0LCB1ZHBFbmRwb2ludFRhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC03OSwxOSArOTIsMjMgQEAKICAgICAgICAgICAgICAgICBfdWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfc2h1dGRvd24odWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2VfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiB1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdWRwRW5kcG9pbnRUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX1JFR0lTVFJBVElPTl9HRVQKIHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uICoKIHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiB1ZHBFbmRwb2ludFRhYmxlX2lmX2N0eC51c2VyX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiB1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQodWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC05OSwxMiArMTE2LDE1IEBACiAgICAgdWRwRW5kcG9pbnRUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiB1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKHVkcEVuZHBvaW50VGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIC8qCiAgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKQEAgLTE1OCw3ICsxNzgsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBVRFBFTkRQT0lOVFRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBVRFBFTkRQT0lOVFRBQkxFX01BWF9DT0w7CkBAIC0yMjgsNyArMjQ4LDggQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMjUxLDcgKzI3Miw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC03MDEsNyArNzIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC03NDgsNyArNzY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp1ZHBFbmRwb2ludFRhYmxlOl9tZmRfdWRwRW5kcG9pbnRUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtODE5LDcgKzg0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMDI0LDYgKzEwNDUsNyBAQAogICAgICAgICAgICAgICAgICAidWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ1ZHBFbmRwb2ludFRhYmxlIik7CiAKICAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQogICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOwpAQCAtMTA0Niw2ICsxMDY4LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX3VkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfRVhURVJOQUxfQUNDRVNTCiB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKgogdWRwRW5kcG9pbnRUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgodWRwRW5kcG9pbnRUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTEwNjgsOCArMTA5MSw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAodWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQodWRwRW5kcG9pbnRUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMKaW5kZXggYTAxNzY1OC4uNTQwNjhjNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfSU9fSApAQCAtNDMsMTEgKzQ0LDcgQEAKICMgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKCgoc3RhdF92YWwpICYgMjU1KSA9PSAwKQogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03MCw5ICs2Nyw2IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC04NiwyMyArODAsOSBAQAogI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX0RJUkVOVF9ICi0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jZWxzZQotIyBkZWZpbmUgZGlyZW50IGRpcmVjdAotIyBpZiBIQVZFX1NZU19ORElSX0gKLSMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+Ci0jIGVuZGlmCi0jIGlmIEhBVkVfU1lTX0RJUl9ICi0jICBpbmNsdWRlIDxzeXMvZGlyLmg+Ci0jIGVuZGlmCi0jIGlmIEhBVkVfTkRJUl9ICi0jICBpbmNsdWRlIDxuZGlyLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgpAQCAtMTE3LDYgKzk3LDI0IEBACiAjZGVmaW5lIHNldFBlcnJvcnN0YXR1cyh4KSBzbm1wX2xvZ19wZXJyb3IoeCkKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXRpbF9mdW5jcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzaGVsbF9jb21tYW5kLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGdldF9leHRlbl9pbnN0YW5jZSwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjbGVhcl9jYWNoZSwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaW5kX2ZpZWxkLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHBhcnNlX21pYm9pZCwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzdHJpbmdfYXBwZW5kX2ludCwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcm5hbF9taWJfdGFibGUsIHV0aWxfZnVuY3MpCisKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfUlRORVRMSU5LX0gpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocHJlZml4X2luZm9fYWxsLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHByZWZpeF9pbmZvLCBwcmVmaXhfaW5mb19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXBkYXRlX3ByZWZpeF9pbmZvLCBwcmVmaXhfaW5mb19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGVsZXRlX3ByZWZpeF9pbmZvLCBwcmVmaXhfaW5mb19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmluZF9wcmVmaXhfaW5mbywgcHJlZml4X2luZm9fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNyZWF0ZV9wcmVmaXhfaW5mbywgcHJlZml4X2luZm9fYWxsKQorI2VuZGlmIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KIAogI2lmZGVmIE5FVFNOTVBfRVhDQUNIRVRJTUUKIHN0YXRpYyBsb25nICAgICBjYWNoZXRpbWU7CkBAIC0xMjQsMTMgKzEyMiw2IEBACiAKIGV4dGVybiBpbnQgICAgICBudW1wcm9jcywgbnVtZXh0ZW5zOwogCi12b2lkCi1FeGl0KGludCB2YXIpCi17Ci0gICAgc25tcF9sb2coTE9HX0VSUiwgIlNlcnZlciBFeGl0aW5nIHdpdGggY29kZSAlZFxuIiwgdmFyKTsKLSAgICBleGl0KHZhcik7Ci19Ci0KIC8qKiBkZXByZWNhdGVkLCB1c2UgbmV0c25tcF9ta3RlbXAgaW5zdGVhZCAqLwogY29uc3QgY2hhciAqCiBtYWtlX3RlbXBmaWxlKHZvaWQpCkBAIC0xMzgsNiArMTI5LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9ta3RlbXAoKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NIRUxMX0NPTU1BTkQKIGludAogc2hlbGxfY29tbWFuZChzdHJ1Y3QgZXh0ZW5zaWJsZSAqZXgpCiB7CkBAIC0xNzEsNiArMTYzLDcgQEAKICNlbmRpZgogICAgIHJldHVybiAoZXgtPnJlc3VsdCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TSEVMTF9DT01NQU5EICovCiAKICNkZWZpbmUgTUFYT1VUUFVUIDMwMAogCkBAIC0xOTcsNiArMTkwLDcgQEAKICAgICByZXR1cm4gKGV4LT5yZXN1bHQpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX0VYVEVOX0lOU1RBTkNFCiBzdHJ1Y3QgZXh0ZW5zaWJsZSAqCiBnZXRfZXh0ZW5faW5zdGFuY2Uoc3RydWN0IGV4dGVuc2libGUgKmV4dGVuLCBzaXplX3QgaW5zdCkKIHsKQEAgLTIwOCw2ICsyMDIsNyBAQAogICAgICAgICBleHRlbiA9IGV4dGVuLT5uZXh0OwogICAgIHJldHVybiAoZXh0ZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX0VYVEVOX0lOU1RBTkNFICovCiAKIHZvaWQKIHdhaXRfb25fZXhlYyhzdHJ1Y3QgZXh0ZW5zaWJsZSAqZXgpCkBAIC0yMTYsNyArMjExLDcgQEAKICAgaW50IHJjOwogICBpZiAoZXgtPnRpZCAhPSAwICYmIGV4LT5waWQgIT0gMCkgewogICAgIEhBTkRMRSBoVGhyZWFkID0gZXgtPnRpZDsKLSAgICBIQU5ETEUgaFByb2Nlc3MgPSAoSEFORExFKSBleC0+cGlkOworICAgIEhBTkRMRSBoUHJvY2VzcyA9IGV4LT5waWQ7CiAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhQcm9jZXNzLCBORVRTTk1QX1RJTUVPVVRfV0FJVEZPUlNJTkdMRU9CSkVDVCk7CiAgICAgREVCVUdNU0dUKCgiZXhlYzp3YWl0X29uX2V4ZWMiLCJXYWl0Rm9yU2luZ2xlT2JqZWN0IHJjPSglZClcbiIscmMgKSk7CiAgICAgcmMgPSBDbG9zZUhhbmRsZSggaFRocmVhZCApOwpAQCAtMjQxLDYgKzIzNiwxMCBAQAogaW50CiBnZXRfZXhlY19vdXRwdXQoc3RydWN0IGV4dGVuc2libGUgKmV4KQogeworI2lmbmRlZiBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKKyAgICBleC0+cmVzdWx0ID0gLTE7CisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywgInN1cHBvcnQgZm9yIHJ1bl9leGVjX2NvbW1hbmQgbm90IGF2YWlsYWJsZVxuIikpOworI2Vsc2UKICNpZiBIQVZFX0VYRUNWCiAgICAgY2hhciAgICAgICAgICAgIGNhY2hlZmlsZVtTVFJNQVhdOwogICAgIGNoYXIgICAgICAgICAgICBjYWNoZVtORVRTTk1QX01BWENBQ0hFU0laRV07CkBAIC0yNzAsNyArMjY5LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFggIFVzZSBTTk1QX0ZJTEVNT0RFX0NMT1NFRCBpbnN0ZWFkIG9mIDY0ND8gCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKChjZmQgPSBvcGVuKGNhY2hlZmlsZSwgT19XUk9OTFkgfCBPX1RSVU5DIHwgT19DUkVBVCwgMDY0NCkpIDwgMCkgeworICAgICAgICBpZiAoKGNmZCA9IG9wZW4oY2FjaGVmaWxlLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCAwNjAwKSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY2FuIG5vdCBjcmVhdGUgY2FjaGUgZmlsZVxuIik7CiAgICAgICAgICAgICAgICAgc2V0UGVycm9yc3RhdHVzKGNhY2hlZmlsZSk7CiAjaWZkZWYgTkVUU05NUF9FWENBQ0hFVElNRQpAQCAtMzY5LDcgKzM2OCw3IEBACiAgICAgfQogICAgIAogICAgIC8qIFNldCBnbG9iYWwgY2hpbGQgcHJvY2VzcyBoYW5kbGUgKi8KLSAgICBleC0+cGlkID0gKGludClwaS5oUHJvY2VzczsKKyAgICBleC0+cGlkID0gcGkuaFByb2Nlc3M7CiAgICAgZXgtPnRpZCA9IHBpLmhUaHJlYWQ7CiAKICAgICAvKiBDbG9zZSBwaXBlIGhhbmRsZXMgdG8gbWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlcyB0byB0aGUgd3JpdGUgZW5kIG9mIHRoZQpAQCAtMzkwLDExICszODksMTIgQEAKICAgICB9CiAgICAgcmV0dXJuIGZkOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiAqLwotICAgIHJldHVybiAtMTsKICNlbmRpZgorI2VuZGlmIC8qICFkZWZpbmVkKFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRSkgKi8KKyAgICByZXR1cm4gLTE7CiB9CiBpbnQKLWdldF9leGVjX3BpcGVzKGNoYXIgKmNtZCwgaW50ICpmZEluLCBpbnQgKmZkT3V0LCBpbnQgKnBpZCkKK2dldF9leGVjX3BpcGVzKGNoYXIgKmNtZCwgaW50ICpmZEluLCBpbnQgKmZkT3V0LCBuZXRzbm1wX3BpZF90ICpwaWQpCiB7CiAvKiAJQWxleGFuZGVyIFByw7ZtZWwsIGFsZXhhbmRlckBwcm9lbWVsLmRlIDA4LzI0LzIwMDYKIAlUaGUgZm9sbG93aW5nIGNvZGUsIGlzIHRlc3RlZCBvbiBwaWNvdHV4IHJldi4gMS4wMS4KQEAgLTYyNyw3ICs2MjcsNyBAQAogICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzIiwiY2hpbGQgZHdQcm9jZXNzSWQgKHRhc2sgbWFuYWdlcik6ICVkXG4iLChpbnQpcGkuZHdQcm9jZXNzSWQpKTsKIAogICAgIC8qIFNldCBnbG9iYWwgY2hpbGQgcHJvY2VzcyBoYW5kbGUgKi8KLSAgICAqcGlkID0gKGludClwaS5oUHJvY2VzczsKKyAgICAqcGlkID0gcGkuaFByb2Nlc3M7CiAKICAgICAvKiBDbGVhbnVwICovCiAgICAgaWYgKCFDbG9zZUhhbmRsZShwaS5oVGhyZWFkKSkKQEAgLTY1Niw2ICs2NTYsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0xFQVJfQ0FDSEUKIGludAogY2xlYXJfY2FjaGUoaW50IGFjdGlvbiwKICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC02NzgsNzAgKzY3OSw3IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQotCi1jaGFyICAgICAgICAgICoqYXJndnJlc3RhcnRwLCAqYXJndnJlc3RhcnRuYW1lLCAqYXJndnJlc3RhcnQ7Ci0KLVJFVFNJR1RZUEUKLXJlc3RhcnRfZG9pdChpbnQgYSkKLXsKLSAgICBjaGFyICogbmFtZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwotICAgIHNubXBfc2h1dGRvd24obmFtZSk7Ci0KLSAgICAvKiAgVGhpcyBzaWduYWwgaGFuZGxlciBtYXkgcnVuIHdpdGggU0lHQUxBUk0gYmxvY2tlZC4KLSAgICAgKiAgU2luY2UgdGhlIHNpZ25hbCBtYXNrIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGV4ZWN2KCksIHdlIG11c3QgCi0gICAgICogIG1ha2Ugc3VyZSB0aGF0IFNJR0FMQVJNIGlzIHVuYmxvY2tlZCBwcmlvciBvZiBleGVjdidpbmcuCi0gICAgICogIE90aGVyd2lzZSBTSUdBTEFSTSB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIG5leHQgaW5jYXJuYXRpb24KLSAgICAgKiAgb2Ygc25tcGQsIGJlY2F1c2UgdGhlIHNpZ25hbCBpcyBibG9ja2VkLiBBbmQgdGh1cywgdGhlIAotICAgICAqICByZXN0YXJ0IGRvZXNuJ3Qgd29yayBhbnltb3JlLiAKLSAgICAgKgotICAgICAqICBBIHF1b3RlIGZyb20gdGhlIHNpZ3Byb2NtYXNrKCkgbWFuIHBhZ2U6Ci0gICAgICogIFRoZSB1c2Ugb2Ygc2lncHJvY21hc2soKSBpcyB1bnNwZWNpZmllZCBpbiBhIG11bHRpdGhyZWFkZWQgcHJvY2Vzczsgc2VlCi0gICAgICogIHB0aHJlYWRfc2lnbWFzaygzKS4gCi0gICAgICovIAotI2lmIEhBVkVfU0lHUFJPQ01BU0sKLSAgICB7Ci0gICAgICAgIHNpZ3NldF90IGVtcHR5X3NldDsKLSAgICAgIAotICAgICAgICBzaWdlbXB0eXNldCgmZW1wdHlfc2V0KTsKLSAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZlbXB0eV9zZXQsIE5VTEwpOwotICAgIH0KLSNlbGlmIEhBVkVfU0lHQkxPQ0sKLSAgICBzaWdzZXRtYXNrKDApOwotI2VuZGlmCi0KLSAgICAvKgotICAgICAqIGRvIHRoZSBleGVjIAotICAgICAqLwotI2lmIEhBVkVfRVhFQ1YKLSAgICBleGVjdihhcmd2cmVzdGFydG5hbWUsIGFyZ3ZyZXN0YXJ0cCk7Ci0gICAgc2V0UGVycm9yc3RhdHVzKGFyZ3ZyZXN0YXJ0bmFtZSk7Ci0jZW5kaWYKLX0KLQotaW50Ci1yZXN0YXJ0X2hvb2soaW50IGFjdGlvbiwKLSAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAotICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCi0gICAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuLAotICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCi17Ci0KLSAgICBsb25nICAgICAgICAgICAgdG1wID0gMDsKLQotICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX0lOVEVHRVIpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX05PVElDRSwgIldyb25nIHR5cGUgIT0gaW50XG4iKTsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKLSAgICB9Ci0gICAgdG1wID0gKigobG9uZyAqKSB2YXJfdmFsKTsKLSAgICBpZiAodG1wID09IDEgJiYgYWN0aW9uID09IENPTU1JVCkgewotI2lmZGVmIFNJR0FMUk0KLSAgICAgICAgc2lnbmFsKFNJR0FMUk0sIHJlc3RhcnRfZG9pdCk7Ci0jZW5kaWYKLSAgICAgICAgYWxhcm0oTkVUU05NUF9SRVNUQVJUU0xFRVApOwotICAgIH0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NMRUFSX0NBQ0hFICovCiAKIHZvaWQKIHByaW50X21pYl9vaWQob2lkIG5hbWVbXSwgc2l6ZV90IGxlbikKQEAgLTc2MywxNjkgKzcwMSw3IEBACiAgICAgaW50ICAgICAgICAgICAgIGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgbGVuOyBpKyspCi0gICAgICAgIGJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIi4ldSIsICh1bnNpZ25lZCkgbmFtZVtpXSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiBoZWFkZXJfc2ltcGxlX3RhYmxlCi0gKgotICogUGFyYW1ldGVyczoKLSAqCSAgKnZwCQkgVmFyaWFibGUgZGF0YS4KLSAqCSAgKm5hbWUJCSBGdWxseSBpbnN0YW50aWF0ZWQgT0lEIG5hbWUuCi0gKgkgICpsZW5ndGgJIExlbmd0aCBvZiBuYW1lLgotICoJICAgZXhhY3QJIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggaXMgZGVzaXJlZC4KLSAqCSAgKnZhcl9sZW4JIEhvb2sgZm9yIHNpemUgb2YgcmV0dXJuZWQgZGF0YSB0eXBlLgotICoJKCoqd3JpdGVfbWV0aG9kKSBIb29rIGZvciB3cml0ZSBtZXRob2QgKFVOVVNFRCkuCi0gKgkgICBtYXgKLSAqICAgICAgCi0gKiBSZXR1cm5zOgotICoJMAlJZiBuYW1lIG1hdGNoZXMgdnAtPm5hbWUgKGFjY291bnRpbmcgZm9yICdleGFjdCcpIGFuZCBpcwotICoJCQlub3QgZ3JlYXRlciBpbiBsZW5ndGggdGhhbiAnbWF4Jy4KLSAqCTEJT3RoZXJ3aXNlLgotICoKLSAqCi0gKiBDb21wYXJlICduYW1lJyB0byB2cC0+bmFtZSBmb3IgdGhlIGJlc3QgbWF0Y2ggb3IgYW4gZXhhY3QgbWF0Y2ggKGlmCi0gKglyZXF1ZXN0ZWQpLiAgQWxzbyBjaGVjayB0aGF0ICduYW1lJyBpcyBub3QgbG9uZ2VyIHRoYW4gJ21heCcgaWYKLSAqCW1heCBpcyBncmVhdGVyLXRoYW4vZXF1YWwgMC4KLSAqIFN0b3JlIGEgc3VjY2Vzc2Z1bCBtYXRjaCBpbiAnbmFtZScsIGFuZCBpbmNyZW1lbnQgdGhlIE9JRCBpbnN0YW5jZSBpZgotICoJdGhlIG1hdGNoIHdhcyBub3QgZXhhY3QuICAKLSAqCi0gKiAnbmFtZScgYW5kICdsZW5ndGgnIGFyZSB1bmRlZmluZWQgdXBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50Ci1oZWFkZXJfc2ltcGxlX3RhYmxlKHN0cnVjdCB2YXJpYWJsZSAqdnAsIG9pZCAqIG5hbWUsIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLAotICAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QsIGludCBtYXgpCi17Ci0gICAgaW50ICAgICAgICAgICAgIGksIHJ0ZXN0OyAgIC8qIFNldCB0bzogICAgICAtMSAgICAgIElmIG5hbWUgPCB2cC0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgIDEgICAgICAgSWYgbmFtZSA+IHZwLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgMCAgICAgICBPdGhlcndpc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKLQotICAgIGZvciAoaSA9IDAsIHJ0ZXN0ID0gMDsKLSAgICAgICAgIGkgPCAoaW50KSB2cC0+bmFtZWxlbiAmJiBpIDwgKGludCkgKCpsZW5ndGgpICYmICFydGVzdDsgaSsrKSB7Ci0gICAgICAgIGlmIChuYW1lW2ldICE9IHZwLT5uYW1lW2ldKSB7Ci0gICAgICAgICAgICBpZiAobmFtZVtpXSA8IHZwLT5uYW1lW2ldKQotICAgICAgICAgICAgICAgIHJ0ZXN0ID0gLTE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcnRlc3QgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChydGVzdCA+IDAgfHwKLSAgICAgICAgKGV4YWN0ID09IDEKLSAgICAgICAgICYmIChydGVzdCB8fCAoaW50KSAqbGVuZ3RoICE9IChpbnQpICh2cC0+bmFtZWxlbiArIDEpKSkpIHsKLSAgICAgICAgaWYgKHZhcl9sZW4pCi0gICAgICAgICAgICAqdmFyX2xlbiA9IDA7Ci0gICAgICAgIHJldHVybiBNQVRDSF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgbWVtc2V0KG5ld25hbWUsIDAsIHNpemVvZihuZXduYW1lKSk7Ci0KLSAgICBpZiAoKChpbnQpICpsZW5ndGgpIDw9IChpbnQpIHZwLT5uYW1lbGVuIHx8IHJ0ZXN0ID09IC0xKSB7Ci0gICAgICAgIG1lbW1vdmUobmV3bmFtZSwgdnAtPm5hbWUsIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOwotICAgICAgICBuZXduYW1lW3ZwLT5uYW1lbGVuXSA9IDE7Ci0gICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgfSBlbHNlIGlmICgoKGludCkgKmxlbmd0aCkgPiAoaW50KSB2cC0+bmFtZWxlbiArIDEpIHsgICAgICAgLyogZXhhY3QgY2FzZSBjaGVja2VkIGVhcmxpZXIgKi8KLSAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAgICAgbWVtbW92ZShuZXduYW1lLCBuYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7Ci0gICAgICAgIGlmIChuYW1lWypsZW5ndGggLSAxXSA8IFVMT05HX01BWCkgewotICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXSArIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogQ2FyZWZ1bCBub3QgdG8gb3ZlcmZsb3cuLi4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAgICAgbWVtbW92ZShuZXduYW1lLCBuYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7Ci0gICAgICAgIGlmICghZXhhY3QpIHsKLSAgICAgICAgICAgIGlmIChuYW1lWypsZW5ndGggLSAxXSA8IFVMT05HX01BWCkgewotICAgICAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV0gKyAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIENhcmVmdWwgbm90IHRvIG92ZXJmbG93Li4uICAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKG1heCA+PSAwICYmICgoaW50KW5ld25hbWVbKmxlbmd0aCAtIDFdID4gbWF4KSkgfHwKLSAgICAgICAgICAgICAgICggMCA9PSBuZXduYW1lWypsZW5ndGggLSAxXSApKSB7Ci0gICAgICAgIGlmICh2YXJfbGVuKQotICAgICAgICAgICAgKnZhcl9sZW4gPSAwOwotICAgICAgICByZXR1cm4gTUFUQ0hfRkFJTEVEOwotICAgIH0KLQotICAgIG1lbW1vdmUobmFtZSwgbmV3bmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOwotICAgIGlmICh3cml0ZV9tZXRob2QpCi0gICAgICAgICp3cml0ZV9tZXRob2QgPSAwOwotICAgIGlmICh2YXJfbGVuKQotICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7Ci19Ci0KLS8qCi0gKiBoZWFkZXJfZ2VuZXJpYyguLi4KLSAqIEFyZ3VtZW50czoKLSAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCi0gKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKLSAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCi0gKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKLSAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCi0gKiB3cml0ZV9tZXRob2QKLSAqIAotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiBnZW5lcmljX2hlYWRlcgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKgkgICp2cAkgICAoSSkgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZS4KLSAqCSAgKm5hbWUJICAgKEkvTykgICBJbnB1dCBuYW1lIHJlcXVlc3RlZCwgb3V0cHV0IG5hbWUgZm91bmQuCi0gKgkgICpsZW5ndGggIChJL08pICAgTGVuZ3RoIG9mIGlucHV0IGFuZCBvdXRwdXQgb2lkJ3MuCi0gKgkgICBleGFjdCAgIChJKSAgICAgVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkLgotICoJICAqdmFyX2xlbiAoTykgICAgIExlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkLgotICoJKCoqd3JpdGVfbWV0aG9kKSAgIEhvb2sgdG8gbmFtZSBhIHdyaXRlIG1ldGhvZCAoVU5VU0VEKS4KLSAqICAgICAgCi0gKiBSZXR1cm5zOgotICoJTUFUQ0hfU1VDQ0VFREVECUlmIHZwLT5uYW1lIG1hdGNoZXMgbmFtZSAoYWNjb3VudGluZyBmb3IgZXhhY3QgYml0KS4KLSAqCU1BVENIX0ZBSUxFRAlPdGhlcndpc2UsCi0gKgotICoKLSAqIENoZWNrIHdoZXRoZXIgdmFyaWFibGUgKHZwKSBtYXRjaGVzIG5hbWUuCi0gKi8KLWludAotaGVhZGVyX2dlbmVyaWMoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKLQotICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzIiwgImhlYWRlcl9nZW5lcmljOiAiKSk7Ci0gICAgREVCVUdNU0dPSUQoKCJ1dGlsX2Z1bmNzIiwgbmFtZSwgKmxlbmd0aCkpOwotICAgIERFQlVHTVNHKCgidXRpbF9mdW5jcyIsICIgZXhhY3Q9JWRcbiIsIGV4YWN0KSk7Ci0KLSAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsCi0gICAgICAgICAgIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOwotICAgIG5ld25hbWVbdnAtPm5hbWVsZW5dID0gMDsKLSAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7Ci0gICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3MiLCAiICByZXN1bHQ6ICVkXG4iLCByZXN1bHQpKTsKLSAgICBpZiAoKGV4YWN0ICYmIChyZXN1bHQgIT0gMCkpIHx8ICghZXhhY3QgJiYgKHJlc3VsdCA+PSAwKSkpCi0gICAgICAgIHJldHVybiAoTUFUQ0hfRkFJTEVEKTsKLSAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKLSAgICAgICAgICAgKChpbnQpIHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7Ci0gICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLQotICAgICp3cml0ZV9tZXRob2QgPSAwOwotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCi0gICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOworICAgICAgICBidWYgKz0gc3ByaW50ZihidWYsICIuJSIgTkVUU05NUF9QUklvICJ1IiwgbmFtZVtpXSk7CiB9CiAKIC8qCkBAIC05NDQsNiArNzIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX21ldGhvZCwgbWF4KSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX0ZJRUxECiBjaGFyICAgICAgICAgICAqCiBmaW5kX2ZpZWxkKGNoYXIgKnB0ciwgaW50IGZpZWxkKQogewpAQCAtOTU5LDE1ICs3MzYsMTUgQEAKICAgICAgICAgLyoKICAgICAgICAgICogcmV3aW5kIGEgZmllbGQgbGVuZ3RoIAogICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiBpc3NwYWNlKCpwdHIpICYmIGluaXQgPD0gcHRyKQorICAgICAgICB3aGlsZSAoKnB0ciAhPSAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpwdHIpKSAmJiBpbml0IDw9IHB0cikKICAgICAgICAgICAgIHB0ci0tOwotICAgICAgICB3aGlsZSAoKnB0ciAhPSAwICYmICFpc3NwYWNlKCpwdHIpICYmIGluaXQgPD0gcHRyKQorICAgICAgICB3aGlsZSAoKnB0ciAhPSAwICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqcHRyKSkgJiYgaW5pdCA8PSBwdHIpCiAgICAgICAgICAgICBwdHItLTsKLSAgICAgICAgaWYgKGlzc3BhY2UoKnB0cikpCisgICAgICAgIGlmIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqcHRyKSkpCiAgICAgICAgICAgICBwdHIrKzsgICAgICAgICAgICAgIC8qIHBhc3Qgc3BhY2UgKi8KICAgICAgICAgaWYgKHB0ciA8IGluaXQpCiAgICAgICAgICAgICBwdHIgPSBpbml0OwotICAgICAgICBpZiAoIWlzc3BhY2UoKnB0cikgJiYgKnB0ciAhPSAwKQorICAgICAgICBpZiAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpwdHIpKSAmJiAqcHRyICE9IDApCiAgICAgICAgICAgICByZXR1cm4gKHB0cik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKChwdHIgPSBza2lwX3doaXRlKHB0cikpID09IE5VTEwpCkBAIC05ODQsNyArNzYxLDkgQEAKICAgICB9CiAgICAgcmV0dXJuIChOVUxMKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfRklFTEQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX01JQk9JRAogaW50CiBwYXJzZV9taWJvaWQoY29uc3QgY2hhciAqYnVmLCBvaWQgKiBvaWRvdXQpCiB7CkBAIC05OTQsMTIgKzc3MywxMiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoKmJ1ZiA9PSAnLicpCiAgICAgICAgIGJ1ZisrOwotICAgIGZvciAoaSA9IDA7IGlzZGlnaXQoKmJ1Zik7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpidWYpKTsgaSsrKSB7CiAgICAgICAgIC8qIFN1YmlkZW50aWZpZXJzIGFyZSB1bnNpZ25lZCB2YWx1ZXMsIHVwIHRvIDJeMzItMQogICAgICAgICAgKiBzbyB3ZSBuZWVkIHRvIHVzZSAnc3RydG91bCcgcmF0aGVyIHRoYW4gJ2F0b2knCiAgICAgICAgICAqLwogICAgICAgICBvaWRvdXRbaV0gPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHhmZmZmZmZmZjsKLSAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmJ1ZisrKSk7CisgICAgICAgIHdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqYnVmKSkpIGJ1ZisrOwogICAgICAgICBpZiAoKmJ1ZiA9PSAnLicpCiAgICAgICAgICAgICBidWYrKzsKICAgICB9CkBAIC0xMDA4LDcgKzc4Nyw5IEBACiAgICAgICovCiAgICAgcmV0dXJuIGk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9NSUJPSUQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUklOR19BUFBFTkRfSU5UCiB2b2lkCiBzdHJpbmdfYXBwZW5kX2ludChjaGFyICpzLCBpbnQgdmFsKQogewpAQCAtMTAyMywxMyArODA0LDE2IEBACiAgICAgc3RyY3B5KHMsIHRleHRWYWwpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUklOR19BUFBFTkRfSU5UICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUk5BTF9NSUJfVEFCTEUKIAogc3RydWN0IGludGVybmFsX21pYl90YWJsZSB7CiAgICAgaW50ICAgICAgICAgICAgIG1heF9zaXplOyAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgZGF0YSB0YWJsZSAqLwogICAgIGludCAgICAgICAgICAgICBuZXh0X2luZGV4OyAvKiBJbmRleCBvZiB0aGUgbmV4dCBmcmVlIGVudHJ5ICovCiAgICAgaW50ICAgICAgICAgICAgIGN1cnJlbnRfaW5kZXg7ICAgICAgLyogSW5kZXggb2YgdGhlICdjdXJyZW50JyBlbnRyeSAqLwogICAgIGludCAgICAgICAgICAgICBjYWNoZV90aW1lb3V0OwotICAgIG1hcmtlcl90ICAgICAgICBjYWNoZV9tYXJrZXI7CisgICAgbWFya2VyX3QgICAgICAgIGNhY2hlX21hcmtlck07CiAgICAgUkVMT0FEICAgICAgICAgKnJlbG9hZDsgICAgIC8qIFJvdXRpbmUgdG8gcmVhZCBpbiB0aGUgZGF0YSAqLwogICAgIENPTVBBUkUgICAgICAgICpjb21wYXJlOyAgICAvKiBSb3V0aW5lIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgKi8KICAgICBpbnQgICAgICAgICAgICAgZGF0YV9zaXplOyAgLyogU2l6ZSBvZiBhbiBpbmRpdmlkdWFsIGVudHJ5ICovCkBAIC0xMDUwLDcgKzgzNCw3IEBACiAgICAgdC0+bmV4dF9pbmRleCA9IDE7ICAgICAgICAgIC8qIERvbid0IHVzZSBpbmRleCAwICovCiAgICAgdC0+Y3VycmVudF9pbmRleCA9IDE7CiAgICAgdC0+Y2FjaGVfdGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgdC0+Y2FjaGVfbWFya2VyID0gTlVMTDsKKyAgICB0LT5jYWNoZV9tYXJrZXJNID0gTlVMTDsKICAgICB0LT5yZWxvYWQgPSByZWxvYWQ7CiAgICAgdC0+Y29tcGFyZSA9IGNvbXBhcmU7CiAgICAgdC0+ZGF0YV9zaXplID0gc2l6ZTsKQEAgLTEwNzIsOCArODU2LDkgQEAKICAgICAgKiBJZiB0aGUgc2F2ZWQgZGF0YSBpcyBmYWlybHkgcmVjZW50LAogICAgICAqICAgIHdlIGRvbid0IG5lZWQgdG8gcmVsb2FkIGl0CiAgICAgICovCi0gICAgaWYgKHRhYmxlLT5jYWNoZV9tYXJrZXIgJiYKLSAgICAgICAgIShhdGltZV9yZWFkeSh0YWJsZS0+Y2FjaGVfbWFya2VyLCB0YWJsZS0+Y2FjaGVfdGltZW91dCAqIDEwMDApKSkKKyAgICBpZiAodGFibGUtPmNhY2hlX21hcmtlck0gJiYKKyAgICAgICAgIShuZXRzbm1wX3JlYWR5X21vbm90b25pYyh0YWJsZS0+Y2FjaGVfbWFya2VyTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+Y2FjaGVfdGltZW91dCAqIDEwMDApKSkKICAgICAgICAgcmV0dXJuIDE7CiAKIApAQCAtMTA4MywxNSArODY4LDEyIEBACiAgICAgICogTi5COiAgVXBkYXRlIHRoZSBjYWNoZSBtYXJrZXIgKmJlZm9yZSogY2FsbGluZwogICAgICAqICAgdGhpcyByb3V0aW5lLCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJlY3Vyc2lvbgogICAgICAqLwotICAgIGlmICghdGFibGUtPmNhY2hlX21hcmtlcikKLSAgICAgICAgdGFibGUtPmNhY2hlX21hcmtlciA9IGF0aW1lX25ld01hcmtlcigpOwotICAgIGVsc2UKLSAgICAgICAgYXRpbWVfc2V0TWFya2VyKHRhYmxlLT5jYWNoZV9tYXJrZXIpOworICAgIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoJnRhYmxlLT5jYWNoZV9tYXJrZXJNKTsKIAogICAgIHRhYmxlLT5uZXh0X2luZGV4ID0gMTsKICAgICBpZiAodGFibGUtPnJlbG9hZCgobWliX3RhYmxlX3QpIHRhYmxlKSA8IDApIHsKLSAgICAgICAgZnJlZSh0YWJsZS0+Y2FjaGVfbWFya2VyKTsKLSAgICAgICAgdGFibGUtPmNhY2hlX21hcmtlciA9IE5VTEw7CisgICAgICAgIGZyZWUodGFibGUtPmNhY2hlX21hcmtlck0pOworICAgICAgICB0YWJsZS0+Y2FjaGVfbWFya2VyTSA9IE5VTEw7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB0YWJsZS0+Y3VycmVudF9pbmRleCA9IDE7CkBAIC0xMjAxLDg5ICs5ODMsMTQ3IEBACiAgICAgKm1heF9pZHggPSB0YWJsZS0+bmV4dF9pbmRleCAtIDE7CiAgICAgcmV0dXJuIHRhYmxlLT5kYXRhOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJOQUxfTUlCX1RBQkxFICovCiAKLSNpZmRlZiBsaW51eAotIyBkZWZpbmUgUFJPQ19QQVRIICAgICAgICAgICIvcHJvYyIKLSMgZGVmaW5lIEZJTEVfRElTUCAgICAgICAgICAiZmQvIgotIyBkZWZpbmUgU09DS0VUX1RZUEVfMSAgICAgICJzb2NrZXQ6WyIKLSMgZGVmaW5lIFNPQ0tFVF9UWVBFXzIgICAgICAiWzAwMDBdOiIKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfUlRORVRMSU5LX0gpCiAKLXVuc2lnbmVkIGxvbmcgbG9uZwotZXh0cmFjdF9pbm9kZShjaGFyICpmb3JtYXQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ1JFQVRFX1BSRUZJWF9JTkZPCitwcmVmaXhfY2J4ICpuZXRfc25tcF9jcmVhdGVfcHJlZml4X2luZm8odW5zaWduZWQgbG9uZyBPbkxpbmtGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgQXV0b25vbW91c0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW42cHRyKQogewotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwOworICAgcHJlZml4X2NieCAqbm9kZSA9IFNOTVBfTUFMTE9DX1RZUEVERUYocHJlZml4X2NieCk7CisgICBpZighaW42cHRyKSB7CisgICAgICBmcmVlKG5vZGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICBpZighbm9kZSkgeworICAgICAgZnJlZShub2RlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgbm9kZS0+bmV4dF9pbmZvID0gTlVMTDsKKyAgIG5vZGUtPmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcgPSBPbkxpbmtGbGFnOworICAgbm9kZS0+aXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcgPSBBdXRvbm9tb3VzRmxhZzsKKyAgIG1lbWNweShub2RlLT5pbjZwLCBpbjZwdHIsIHNpemVvZihub2RlLT5pbjZwKSk7CiAKLSAgICBpZiAoIXN0cm5jbXAoZm9ybWF0LCBTT0NLRVRfVFlQRV8xLCA4KSkgewotICAgICAgICByZXQgPSBzdHJ0b3VsbChmb3JtYXQgKyA4LCBOVUxMLCAwKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGZvcm1hdCwgU09DS0VUX1RZUEVfMiwgNykpIHsKLSAgICAgICAgcmV0ID0gc3RydG91bGwoZm9ybWF0ICsgNywgTlVMTCwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKKyAgIHJldHVybiBub2RlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ1JFQVRFX1BSRUZJWF9JTkZPICovCiAKLXVuc2lnbmVkIGludAotZ2V0X3BpZF9mcm9tX2lub2RlKHVuc2lnbmVkIGxvbmcgbG9uZyBpbm9kZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX1BSRUZJWF9JTkZPCitpbnQgbmV0X3NubXBfZmluZF9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX2ZpbmQpCiB7Ci0gICAgRElSICAgICAgICAgICAgKnByb2NkaXJzID0gTlVMTCwgKnBpZGRpcnMgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICpuYW1lID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAgcGF0aF9uYW1lW1BBVEhfTUFYICsgMV07Ci0gICAgY2hhciAgICAgICAgICAgIHNvY2tldF9sbmtbTkFNRV9NQVggKyAxXTsKLSAgICBpbnQgICAgICAgICAgICAgZmlsZWxlbiA9IDAsIHJlYWRsZW4gPSAwLCBpZmxhZyA9IDA7Ci0gICAgc3RydWN0IGRpcmVudCAgKnByb2NpbmZvLCAqcGlkaW5mbzsKLSAgICB1bnNpZ25lZCBpbnQgICAgcGlkOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wX2lub2RlOworICAgIGludCBpcmV0OworICAgIG1lbXNldChub2RlX3RvX2ZpbmQsIDAsIHNpemVvZihwcmVmaXhfY2J4KSk7CisgICAgaWYoISpoZWFkKQorICAgICAgIHJldHVybiAtMTsKKyAgICBtZW1jcHkobm9kZV90b19maW5kLT5pbjZwLCBhZGRyZXNzLCBzaXplb2Yobm9kZV90b19maW5kLT5pbjZwKSk7CiAKLSAgICBpZiAoIShwcm9jZGlycyA9IG9wZW5kaXIoUFJPQ19QQVRIKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvY1xuIik7ICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaXJldCA9IG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8oaGVhZCwgbm9kZV90b19maW5kLCAxKTsKKyAgICBpZihpcmV0IDwgMCkgeworICAgICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzOnByZWZpeCIsICJVbmFibGUgdG8gc2VhcmNoIHRoZSBsaXN0XG4iKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoIWlyZXQpIHsKKyAgICAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jczpwcmVmaXgiLCAiQ291bGQgbm90IGZpbmQgcHJlZml4IGluZm9cbiIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlCisgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX1BSRUZJWF9JTkZPICovCiAKLSAgICB3aGlsZSAoKHByb2NpbmZvID0gcmVhZGRpcihwcm9jZGlycykpICE9IE5VTEwpIHsKLSAgICAgICAgbmFtZSA9IHByb2NpbmZvLT5kX25hbWU7Ci0gICAgICAgIGZvciAoOyAqbmFtZTsgbmFtZSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWlzZGlnaXQoKm5hbWUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKCpuYW1lKQotICAgICAgICAgICAgY29udGludWU7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVBEQVRFX1BSRUZJWF9JTkZPCitpbnQgbmV0X3NubXBfdXBkYXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX3VwZGF0ZSkKK3sKKyAgICBpbnQgaXJldDsKKyAgICBpcmV0ID0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyhoZWFkLCBub2RlX3RvX3VwZGF0ZSwgMCk7CisgICAgaWYoaXJldCA8IDApIHsKKyAgICAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jczpwcmVmaXgiLCAiVW5hYmxlIHRvIHVwZGF0ZSBwcmVmaXggaW5mb1xuIikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKCFpcmV0KSB7CisgICAgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3M6cHJlZml4IiwgIlVuYWJsZSB0byBmaW5kIHRoZSBub2RlIHRvIHVwZGF0ZVxuIikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UKKyAgICAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VQREFURV9QUkVGSVhfSU5GTyAqLwogCi0gICAgICAgIG1lbXNldChwYXRoX25hbWUsICdcMCcsIFBBVEhfTUFYICsgMSk7Ci0gICAgICAgIGZpbGVsZW4gPSBzbnByaW50ZihwYXRoX25hbWUsIFBBVEhfTUFYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPQ19QQVRIICIvJXMvIiBGSUxFX0RJU1AsIHByb2NpbmZvLT5kX25hbWUpOwotICAgICAgICBpZiAoZmlsZWxlbiA8PSAwIHx8IFBBVEhfTUFYIDwgZmlsZWxlbikKLSAgICAgICAgICAgIGNvbnRpbnVlOworaW50IG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX3VzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdW5jdGlvbmFsaXR5KQorewogCi0gICAgICAgIHBpZCA9IHN0cnRvdWwocHJvY2luZm8tPmRfbmFtZSwgTlVMTCwgMCk7CisgICAvKiBXZSBkZWZpbmUgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBuZWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICogMCAtIE5lZWQgdG8gZG8gYSBzZWFyY2ggYW5kIHVwZGF0ZS4gV2UgaGF2ZSB0byBwcm92aWRlIHRoZSBub2RlX3RvX3VzZSBzdHJ1Y3R1cmUgZmlsbGVkIGZ1bGx5ICoKKyAgICAqIDEgLSBOZWVkIHRvIGRvIG9ubHkgc2VhcmNoLiBQcm92aWRlIHRoZSBub2RlX3RvX3VzZSB3aXRoIGluNnAgdmFsdWUgZmlsbGVkICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIGlmICghKHBpZGRpcnMgPSBvcGVuZGlyKHBhdGhfbmFtZSkpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgcHJlZml4X2NieCAqdGVtcF9ub2RlOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaGVhZCk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBub2RlX3RvX3VzZSk7CiAKLSAgICAgICAgd2hpbGUgKChwaWRpbmZvID0gcmVhZGRpcihwaWRkaXJzKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGZpbGVsZW4gKyBzdHJsZW4ocGlkaW5mby0+ZF9uYW1lKSA+IFBBVEhfTUFYKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmKGZ1bmN0aW9uYWxpdHkgPiAxKQorICAgICAgIHJldHVybiAtMTsKKyAgICBpZighbm9kZV90b191c2UpCisgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgICAgICBzdHJjcHkocGF0aF9uYW1lICsgZmlsZWxlbiwgcGlkaW5mby0+ZF9uYW1lKTsKIAotICAgICAgICAgICAgbWVtc2V0KHNvY2tldF9sbmssICdcMCcsIE5BTUVfTUFYICsgMSk7Ci0gICAgICAgICAgICByZWFkbGVuID0gcmVhZGxpbmsocGF0aF9uYW1lLCBzb2NrZXRfbG5rLCBOQU1FX01BWCk7Ci0gICAgICAgICAgICBpZiAocmVhZGxlbiA8IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzb2NrZXRfbG5rW3JlYWRsZW5dID0gJ1wwJzsKKyAgICBpZiAoIWZ1bmN0aW9uYWxpdHkpIHsKKyAgICAgICBpZiAoISpoZWFkKSB7CisgICAgICAgICAgICpoZWFkID0gbm9kZV90b191c2U7CisgICAgICAgICAgIHJldHVybiAxOworICAgICAgIH0KIAotICAgICAgICAgICAgdGVtcF9pbm9kZSA9IGV4dHJhY3RfaW5vZGUoc29ja2V0X2xuayk7Ci0gICAgICAgICAgICBpZiAoaW5vZGUgPT0gdGVtcF9pbm9kZSkgewotICAgICAgICAgICAgICAgIGlmbGFnID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBmb3IgKHRlbXBfbm9kZSA9ICpoZWFkOyB0ZW1wX25vZGUtPm5leHRfaW5mbyAhPSBOVUxMIDsgdGVtcF9ub2RlID0gdGVtcF9ub2RlLT5uZXh0X2luZm8pIHsKKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcCh0ZW1wX25vZGUtPmluNnAsIG5vZGVfdG9fdXNlLT5pbjZwKSkgeworICAgICAgICAgICAgICAgIHRlbXBfbm9kZS0+aXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZyA9IG5vZGVfdG9fdXNlLT5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnOworICAgICAgICAgICAgICAgIHRlbXBfbm9kZS0+aXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcgPSBub2RlX3RvX3VzZS0+aXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWc7CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2xvc2VkaXIocGlkZGlycyk7Ci0gICAgICAgIGlmIChpZmxhZyA9PSAxKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorICAgICAgIHRlbXBfbm9kZS0+bmV4dF9pbmZvID0gbm9kZV90b191c2U7CisgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIGZvciAodGVtcF9ub2RlID0gKmhlYWQ7IHRlbXBfbm9kZSAhPSBOVUxMIDsgdGVtcF9ub2RlID0gdGVtcF9ub2RlLT5uZXh0X2luZm8pIHsKKyAgICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKHRlbXBfbm9kZS0+aW42cCwgbm9kZV90b191c2UtPmluNnApKSB7CisgICAgICAgICAgICAgICAgLypuZWVkIHlvIHB1dCBzZW0gaGVyZSBhcyBpIHJlYWQgaGVyZSAqLworICAgICAgICAgICAgICAgIG5vZGVfdG9fdXNlLT5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnID0gdGVtcF9ub2RlLT5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnOworICAgICAgICAgICAgICAgIG5vZGVfdG9fdXNlLT5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZyA9IHRlbXBfbm9kZS0+aXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWc7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAocHJvY2RpcnMpCi0gICAgICAgIGNsb3NlZGlyKHByb2NkaXJzKTsKLSAgICByZXR1cm4gcGlkOwogfQogCi0jZW5kaWYgIC8qICNpZmRlZiBsaW51eCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFTEVURV9QUkVGSVhfSU5GTworaW50IG5ldF9zbm1wX2RlbGV0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkcmVzcykKK3sKKworICAgIHByZWZpeF9jYnggKnRlbXBfbm9kZSwqcHJldl9ub2RlOworICAgIGlmKCFhZGRyZXNzKQorICAgICAgIHJldHVybiAtMTsKKyAgICBpZighaGVhZCkKKyAgICAgICByZXR1cm4gLTE7CisKKyAgICBmb3IgKHRlbXBfbm9kZSA9ICpoZWFkLCBwcmV2X25vZGUgPSBOVUxMOyB0ZW1wX25vZGU7CisgICAgICAgICBwcmV2X25vZGUgPSB0ZW1wX25vZGUsIHRlbXBfbm9kZSA9IHRlbXBfbm9kZS0+bmV4dF9pbmZvKSB7CisKKyAgICAgICAgIGlmICh0ZW1wX25vZGUtPmluNnAgJiYgc3RyY21wKHRlbXBfbm9kZS0+aW42cCwgYWRkcmVzcykgPT0gMCkgeworICAgICAgICAgICAgaWYgKHByZXZfbm9kZSkKKyAgICAgICAgICAgICAgICBwcmV2X25vZGUtPm5leHRfaW5mbyA9IHRlbXBfbm9kZS0+bmV4dF9pbmZvOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpoZWFkID0gdGVtcF9ub2RlLT5uZXh0X2luZm87CisgICAgICAgICAgICBmcmVlKHRlbXBfbm9kZSk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1BSRUZJWF9JTkZPICovCisKKyNlbmRpZiAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCisgICAgICAgICAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAppbmRleCBmYmExYTk4Li43ZjU5NzgwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oCkBAIC00LDI4ICs0LDQ2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0gKICNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKIAotdm9pZCAgICAgICAgICAgIEV4aXQoaW50KTsKK3R5cGVkZWYgc3RydWN0IHByZWZpeF9pbmZvCit7CisgICBzdHJ1Y3QgcHJlZml4X2luZm8gKm5leHRfaW5mbzsKKyAgIHVuc2lnbmVkIGxvbmcgaXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZzsKKyAgIHVuc2lnbmVkIGxvbmcgaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWc7CisgICBjaGFyIGluNnBbNDBdOworfXByZWZpeF9jYng7CisjaWZuZGVmIFdJTjMyCit0eXBlZGVmIHN0cnVjdCAKK3sKKyBwcmVmaXhfY2J4ICoqbGlzdF9oZWFkOworfW5ldHNubXBfcHJlZml4X2xpc3Rlbl9pbmZvOworI2VuZGlmCiBpbnQgICAgICAgICAgICAgc2hlbGxfY29tbWFuZChzdHJ1Y3QgZXh0ZW5zaWJsZSAqKTsKIGludCAgICAgICAgICAgICBleGVjX2NvbW1hbmQoc3RydWN0IGV4dGVuc2libGUgKik7CiBzdHJ1Y3QgZXh0ZW5zaWJsZSAqZ2V0X2V4dGVuX2luc3RhbmNlKHN0cnVjdCBleHRlbnNpYmxlICosIHNpemVfdCk7CiBpbnQgICAgICAgICAgICAgZ2V0X2V4ZWNfb3V0cHV0KHN0cnVjdCBleHRlbnNpYmxlICopOwotaW50ICAgICAgICAgICAgIGdldF9leGVjX3BpcGVzKGNoYXIgKmNtZCwgaW50ICpmZEluLCBpbnQgKmZkT3V0LCBpbnQgKnBpZCk7CisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoY3lnd2luKQoraW50ICAgICAgICAgICAgIGdldF9leGVjX3BpcGVzKGNoYXIgKmNtZCwgaW50ICpmZEluLCBpbnQgKmZkT3V0LCBIQU5ETEUgKnBpZCk7CisjZWxzZQoraW50ICAgICAgICAgICAgIGdldF9leGVjX3BpcGVzKGNoYXIgKmNtZCwgaW50ICpmZEluLCBpbnQgKmZkT3V0LCBwaWRfdCAqcGlkKTsKKyNlbmRpZgogV3JpdGVNZXRob2QgICAgIGNsZWFyX2NhY2hlOwotUkVUU0lHVFlQRSAgICAgIHJlc3RhcnRfZG9pdChpbnQpOwotV3JpdGVNZXRob2QgICAgIHJlc3RhcnRfaG9vazsKIHZvaWQgICAgICAgICAgICBwcmludF9taWJfb2lkKG9pZCAqLCBzaXplX3QpOwogdm9pZCAgICAgICAgICAgIHNwcmludF9taWJfb2lkKGNoYXIgKiwgY29uc3Qgb2lkICosIHNpemVfdCk7Ci1pbnQgICAgICAgICAgICAgaGVhZGVyX3NpbXBsZV90YWJsZShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzaXplX3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCwgaW50KTsKLWludCAgICAgICAgICAgICBoZWFkZXJfZ2VuZXJpYyhzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKIGludCAgICAgICAgICAgICBjaGVja21pYihzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsIHNpemVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCwgaW50KTsKIGNoYXIgICAgICAgICAgICpmaW5kX2ZpZWxkKGNoYXIgKiwgaW50KTsKQEAgLTM0LDE1ICs1MiwzNSBAQAogdm9pZCAgICAgICAgICAgIHdhaXRfb25fZXhlYyhzdHJ1Y3QgZXh0ZW5zaWJsZSAqKTsKIGNvbnN0IGNoYXIgICAgICptYWtlX3RlbXBmaWxlKHZvaWQpOwogCi0jaWZkZWYgbGludXgKLXVuc2lnbmVkIGludCAgICBnZXRfcGlkX2Zyb21faW5vZGUodW5zaWduZWQgbG9uZyBsb25nKTsKK3ByZWZpeF9jYnggKm5ldF9zbm1wX2NyZWF0ZV9wcmVmaXhfaW5mbyh1bnNpZ25lZCBsb25nIE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBBdXRvbm9tb3VzRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbjZwdHIpOworI2lmbmRlZiBXSU4zMgoraW50IG5ldF9zbm1wX2ZpbmRfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b19maW5kKTsKK2ludCBuZXRfc25tcF91cGRhdGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fdXBkYXRlKTsKK2ludCBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b191c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnVuY3Rpb25hbGl0eSk7CitpbnQgbmV0X3NubXBfZGVsZXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyZXNzKTsKICNlbmRpZgorI2RlZmluZSBOSVA2KGFkZHIpIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNlswXSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNlsxXSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNlsyXSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNlszXSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNls0XSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNls1XSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNls2XSksIFwKKyAgICAgICAgbnRvaHMoKGFkZHIpLnM2X2FkZHIxNls3XSkKIAogI2RlZmluZSAgICAgc2F0b3Npbih4KSAgICAgICgoc3RydWN0IHNvY2thZGRyX2luICopICYoeCkpCiAjZGVmaW5lICAgICBTT0NLQUREUih4KSAgICAgKHNhdG9zaW4oeCktPnNpbl9hZGRyLnNfYWRkcikKLSNpZm5kZWYgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKLSNkZWZpbmUgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQgNQotI2VuZGlmCisKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgiCiAKIHR5cGVkZWYgdm9pZCAgICptaWJfdGFibGVfdDsKIHR5cGVkZWYgaW50ICAgICAoUkVMT0FEKSAobWliX3RhYmxlX3QpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQ4ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmMKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJFeGl0LmgiCisKK3ZvaWQKK0V4aXQoaW50IHZhcikKK3sKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU2VydmVyIEV4aXRpbmcgd2l0aCBjb2RlICVkXG4iLCB2YXIpOworICAgIGV4aXQodmFyKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmMGNkNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiAgRXhpdC5oOiAgdmVyYm9zZSB0ZXJtaW5haW9uIHJvdXRpbmUKKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19FWElUX0gKKyNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfRVhJVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordm9pZCAgICAgICAgICAgIEV4aXQoaW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfVVRJTF9GVU5DU19FWElUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhiYWNkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmg6ICB1dGlsaXRpeSBmdW5jdGlvbnMgZm9yIGV4dGVuc2libGUKKyAqIGdyb3Vwcy4KKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVF9ICisjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX01JQl9TVEFUU19DQUNIRV9USU1FT1VUX0gKKworI2lmbmRlZiBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAorI2RlZmluZSBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVCA1CisjZW5kaWYKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9VVElMX0ZVTkNTX01JQl9TVEFUU19DQUNIRV9USU1FT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTU3YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jCkBAIC0wLDAgKzEsMTg2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlICJnZXRfcGlkX2Zyb21faW5vZGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjIGRlZmluZSBQUk9DX1BBVEggICAgICAgICAgIi9wcm9jIgorIyBkZWZpbmUgU09DS0VUX1RZUEVfMSAgICAgICJzb2NrZXQ6WyIKKyMgZGVmaW5lIFNPQ0tFVF9UWVBFXzIgICAgICAiWzAwMDBdOiIKKworLyogRGVmaW5pdGlvbiBvZiBhIHNpbXBsZSBvcGVuIGFkZHJlc3NpbmcgaGFzaCB0YWJsZS4qLworLyogV2hlbiBpbm9kZSA9PSAwIHRoZW4gdGhlIGVudHJ5IGlzIGVtcHR5LiovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW5vNjRfdCBpbm9kZTsKKyAgICBwaWRfdCAgIHBpZDsKK30gaW5vZGVfcGlkX2VudF90OworCisjZGVmaW5lIElOT0RFX1BJRF9UQUJMRV9NQVhfQ09MTElTSU9OUyAxMDAwCisjZGVmaW5lIElOT0RFX1BJRF9UQUJMRV9MRU5HVEggMjAwMDAKKyNkZWZpbmUgSU5PREVfUElEX1RBQkxFX1NJWkUgKElOT0RFX1BJRF9UQUJMRV9MRU5HVEggKiBzaXplb2YgKGlub2RlX3BpZF9lbnRfdCkpCitzdGF0aWMgaW5vZGVfcGlkX2VudF90ICBpbm9kZV9waWRfdGFibGVbSU5PREVfUElEX1RBQkxFX0xFTkdUSF07CisKK3N0YXRpYyB1aW50MzJfdAorX2hhc2godWludDY0X3Qga2V5KQoreworICAgIGtleSA9ICh+a2V5KSArIChrZXkgPDwgMTgpOworICAgIGtleSA9IGtleSBeIChrZXkgPj4gMzEpOworICAgIGtleSA9IGtleSAqIDIxOworICAgIGtleSA9IGtleSBeIChrZXkgPj4gMTEpOworICAgIGtleSA9IGtleSArIChrZXkgPDwgNik7CisgICAga2V5ID0ga2V5IF4gKGtleSA+PiAyMik7CisgICAgcmV0dXJuIGtleTsKK30KKworc3RhdGljIHZvaWQKK19jbGVhcih2b2lkKQoreworICAgIC8qIENsZWFyIHRoZSBpbm9kZS9waWQgaGFzaCB0YWJsZS4qLworICAgIG1lbXNldChpbm9kZV9waWRfdGFibGUsIDAsIElOT0RFX1BJRF9UQUJMRV9TSVpFKTsKK30KKworc3RhdGljIHZvaWQKK19zZXQoaW5vNjRfdCBpbm9kZSwgcGlkX3QgcGlkKQoreworICAgIHVpbnQzMl90ICAgICAgICBoYXNoID0gX2hhc2goaW5vZGUpOworICAgIHVpbnQzMl90ICAgICAgICBpOworICAgIGlub2RlX3BpZF9lbnRfdCAqZW50cnk7CisKKyAgICAvKiBXZSB3aWxsIHRyeSBmb3IgYSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zLiovCisgICAgZm9yIChpID0gMDsgaSA8IElOT0RFX1BJRF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaSsrKSB7CisgICAgICAgIGVudHJ5ID0gJmlub2RlX3BpZF90YWJsZVsoaGFzaCArIGkpICUgSU5PREVfUElEX1RBQkxFX0xFTkdUSF07CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhpcyBlbnRyeSBpcyBlbXB0eSwgb3IgdGhlIGFjdHVhbCBpbm9kZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yLiovCisgICAgICAgIC8qIFRoZSBzZWNvbmQgcGFydCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaXQgaXMgaGVyZSBmb3IgY29tcGxldGVuZXNzLiovCisgICAgICAgIGlmIChlbnRyeS0+aW5vZGUgPT0gMCB8fCBlbnRyeS0+aW5vZGUgPT0gaW5vZGUpIHsKKyAgICAgICAgICAgIGVudHJ5LT5pbm9kZSA9IGlub2RlOworICAgICAgICAgICAgZW50cnktPnBpZCA9IHBpZDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdlIHdpbGwgc2lsZW50bHkgZmFpbCB0byBpbnNlcnQgdGhlIGlub2RlIGlmIHdlIGdldCB0b28gbWFueSBjb2xsaXNpb25zLiovCisgICAgLyogdGhlIF9nZXQgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSB6ZXJvIHBpZC4qLworfQorCitzdGF0aWMgcGlkX3QgX2dldChpbm82NF90IGlub2RlKQoreworICAgIHVpbnQzMl90ICAgICAgICBoYXNoID0gX2hhc2goaW5vZGUpOworICAgIHVpbnQzMl90ICAgICAgICBpOworICAgIGlub2RlX3BpZF9lbnRfdCAqZW50cnk7CisKKyAgICAvKiBXZSB3aWxsIHRyeSBmb3IgYSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zLiovCisgICAgZm9yIChpID0gMDsgaSA8IElOT0RFX1BJRF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaSsrKSB7CisgICAgICAgIGVudHJ5ID0gJmlub2RlX3BpZF90YWJsZVsoaGFzaCArIGkpICUgSU5PREVfUElEX1RBQkxFX0xFTkdUSF07CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhpcyBlbnRyeSBpcyBlbXB0eSwgb3IgdGhlIGFjdHVhbCBpbm9kZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yLiovCisgICAgICAgIC8qIElmIHRoZSBlbnRyeSBpcyBlbXB0eSBpdCBtZWFucyB0aGUgaW5vZGUgaXMgbm90IGluIHRoZSB0YWJsZSBhbmQgd2UqLworICAgICAgICAvKiBzaG91bGQgcmV0dXJuIDAsIHRoZSBlbnRyeSB3aWxsIGFsc28gaGF2ZSBhIHplcm8gcGlkLiovCisgICAgICAgIGlmIChlbnRyeS0+aW5vZGUgPT0gMCB8fCBlbnRyeS0+aW5vZGUgPT0gaW5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS0+cGlkOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV2UgY291bGQgbm90IGZpbmQgdGhlIHBpZC4qLworICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZV9pbml0KHZvaWQpCit7CisgICAgRElSICAgICAgICAgICAgKnByb2NkaXJzID0gTlVMTCwgKnBpZGRpcnMgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICBwYXRoX25hbWVbUEFUSF9NQVggKyAxXTsKKyAgICBjaGFyICAgICAgICAgICAgc29ja2V0X2xua1tOQU1FX01BWCArIDFdOworICAgIGludCAgICAgICAgICAgICBmaWxlbGVuID0gMCwgcmVhZGxlbiA9IDA7CisgICAgc3RydWN0IGRpcmVudCAgKnByb2NpbmZvLCAqcGlkaW5mbzsKKyAgICBwaWRfdCAgICAgICAgICAgcGlkID0gMDsKKyAgICBpbm82NF90ICAgICAgICAgdGVtcF9pbm9kZTsKKworICAgIF9jbGVhcigpOworCisgICAgLyogd2FsayBvdmVyIGFsbCBkaXJlY3RvcmllcyBpbiAvcHJvYyovCisgICAgaWYgKCEocHJvY2RpcnMgPSBvcGVuZGlyKFBST0NfUEFUSCkpKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvY1xuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKChwcm9jaW5mbyA9IHJlYWRkaXIocHJvY2RpcnMpKSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBwcm9jaW5mby0+ZF9uYW1lOworCisgICAgICAgIC8qIEEgcGlkIGRpcmVjdG9yeSBvbmx5IGNvbnRhaW5zIGRpZ2l0cywgY2hlY2sgZm9yIHRob3NlLiovCisgICAgICAgIGZvciAoOyAqbmFtZTsgbmFtZSsrKSB7CisgICAgICAgICAgICBpZiAoIWlzZGlnaXQoKm5hbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKCpuYW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSAvcHJvYy88cGlkPi9mZC8gcGF0aCBuYW1lLiovCisgICAgICAgIG1lbXNldChwYXRoX25hbWUsICdcMCcsIFBBVEhfTUFYICsgMSk7CisgICAgICAgIGZpbGVsZW4gPSBzbnByaW50ZihwYXRoX25hbWUsIFBBVEhfTUFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPQ19QQVRIICIvJXMvZmQvIiwgcHJvY2luZm8tPmRfbmFtZSk7CisgICAgICAgIGlmIChmaWxlbGVuIDw9IDAgfHwgUEFUSF9NQVggPCBmaWxlbGVuKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogd2FsayBvdmVyIGFsbCB0aGUgZmlsZXMgaW4gL3Byb2MvPHBpZD4vZmQvKi8KKyAgICAgICAgaWYgKCEocGlkZGlycyA9IG9wZW5kaXIocGF0aF9uYW1lKSkpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHdoaWxlICgocGlkaW5mbyA9IHJlYWRkaXIocGlkZGlycykpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChmaWxlbGVuICsgc3RybGVuKHBpZGluZm8tPmRfbmFtZSkgPiBQQVRIX01BWCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3RyY3B5KHBhdGhfbmFtZSArIGZpbGVsZW4sIHBpZGluZm8tPmRfbmFtZSk7CisKKyAgICAgICAgICAgIC8qIFRoZSBmaWxlIGRpc2NyaXB0b3IgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIGEgc29ja2V0IG9yIGEgZmlsZS4qLworICAgICAgICAgICAgLyogVGh1cyByZWFkIHRoZSBzeW1ib2xpYyBsaW5rLiovCisgICAgICAgICAgICBtZW1zZXQoc29ja2V0X2xuaywgJ1wwJywgTkFNRV9NQVggKyAxKTsKKyAgICAgICAgICAgIHJlYWRsZW4gPSByZWFkbGluayhwYXRoX25hbWUsIHNvY2tldF9sbmssIE5BTUVfTUFYKTsKKyAgICAgICAgICAgIGlmIChyZWFkbGVuIDwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc29ja2V0X2xua1tyZWFkbGVuXSA9ICdcMCc7CisKKyAgICAgICAgICAgIC8qIENoZWNrIGlmIHRvIHNlZSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGEgc29ja2V0IGJ5IGNvbXBhcmluZyovCisgICAgICAgICAgICAvKiB0aGUgc3RhcnQgdG8gYSBzdHJpbmcuIEFsc28gZXh0cmFjdCB0aGUgaW5vZGUgbnVtYmVyIGZyb20gdGhpcyovCisgICAgICAgICAgICAvKiBzeW1ib2xpYyBsaW5rLiovCisgICAgICAgICAgICBpZiAoIXN0cm5jbXAoc29ja2V0X2xuaywgU09DS0VUX1RZUEVfMSwgOCkpIHsKKyAgICAgICAgICAgICAgICB0ZW1wX2lub2RlID0gc3RydG91bGwoc29ja2V0X2xuayArIDgsIE5VTEwsIDApOworICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChzb2NrZXRfbG5rLCBTT0NLRVRfVFlQRV8yLCA3KSkgeworICAgICAgICAgICAgICAgIHRlbXBfaW5vZGUgPSBzdHJ0b3VsbChzb2NrZXRfbG5rICsgNywgTlVMTCwgMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlbXBfaW5vZGUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBBZGQgdGhlIGlub2RlL3BpZCBjb21iaW5hdGlvbiB0byBvdXIgaGFzaCB0YWJsZS4qLworICAgICAgICAgICAgaWYgKHRlbXBfaW5vZGUgIT0gMCkgeworICAgICAgICAgICAgICAgIHBpZCA9IHN0cnRvdWwocHJvY2luZm8tPmRfbmFtZSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgX3NldCh0ZW1wX2lub2RlLCBwaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlZGlyKHBpZGRpcnMpOworICAgIH0KKyAgICBpZiAocHJvY2RpcnMpCisgICAgICAgIGNsb3NlZGlyKHByb2NkaXJzKTsKK30KKworcGlkX3QKK25ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlubzY0X3QgaW5vZGUpCit7CisgICAgcmV0dXJuIF9nZXQoaW5vZGUpOworfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDg4N2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaDogIHV0aWxpdGl5IGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBwaWQKKyAqIHRoYXQgY29udHJvbHMgYSBnaXZlbiBpbm9kZSBvbiBsaW51eC4KKyAqLworI2lmbmRlZiBORVRTTk1QX01JQkdST1VQX1VUSUxfRlVOQ1NfR0VUX1BJRF9GUk9NX0lOT0RFX0gKKyNkZWZpbmUgTkVUU05NUF9NSUJHUk9VUF9VVElMX0ZVTkNTX0dFVF9QSURfRlJPTV9JTk9ERV9ICisKKyNpZm5kZWYgbGludXgKK2NvbmZpZ19lcnJvcihnZXRfcGlkX2Zyb21faW5vZGUgaXMgb25seSBzdXBwb3JlZCBvbiBsaW51eCkKKyNlbmRpZgorCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMQorCisjaWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2Vsc2UKKyMgZGVmaW5lIGRpcmVudCBkaXJlY3QKKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwordm9pZCBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZV9pbml0KHZvaWQpOworcGlkX3QgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vNjRfdCk7CisKKyNlbmRpZiAvKiBORVRTTk1QX01JQkdST1VQX1VUSUxfRlVOQ1NfR0VUX1BJRF9GUk9NX0lOT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU0YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5jCkBAIC0wLDAgKzEsNjQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJoZWFkZXJfZ2VuZXJpYy5oIgorCisvKgorICogaGVhZGVyX2dlbmVyaWMoLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIGdlbmVyaWNfaGVhZGVyCisgKgorICogUGFyYW1ldGVyczoKKyAqCSAgKnZwCSAgIChJKSAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlLgorICoJICAqbmFtZQkgICAoSS9PKSAgIElucHV0IG5hbWUgcmVxdWVzdGVkLCBvdXRwdXQgbmFtZSBmb3VuZC4KKyAqCSAgKmxlbmd0aCAgKEkvTykgICBMZW5ndGggb2YgaW5wdXQgYW5kIG91dHB1dCBvaWQncy4KKyAqCSAgIGV4YWN0ICAgKEkpICAgICBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQuCisgKgkgICp2YXJfbGVuIChPKSAgICAgTGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQuCisgKgkoKip3cml0ZV9tZXRob2QpICAgSG9vayB0byBuYW1lIGEgd3JpdGUgbWV0aG9kIChVTlVTRUQpLgorICoKKyAqIFJldHVybnM6CisgKglNQVRDSF9TVUNDRUVERUQJSWYgdnAtPm5hbWUgbWF0Y2hlcyBuYW1lIChhY2NvdW50aW5nIGZvciBleGFjdCBiaXQpLgorICoJTUFUQ0hfRkFJTEVECU90aGVyd2lzZSwKKyAqCisgKgorICogQ2hlY2sgd2hldGhlciB2YXJpYWJsZSAodnApIG1hdGNoZXMgbmFtZS4KKyAqLworaW50CitoZWFkZXJfZ2VuZXJpYyhzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworCisgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3MiLCAiaGVhZGVyX2dlbmVyaWM6ICIpKTsKKyAgICBERUJVR01TR09JRCgoInV0aWxfZnVuY3MiLCBuYW1lLCAqbGVuZ3RoKSk7CisgICAgREVCVUdNU0coKCJ1dGlsX2Z1bmNzIiwgIiBleGFjdD0lZFxuIiwgZXhhY3QpKTsKKworICAgIG1lbWNweSgoY2hhciAqKSBuZXduYW1lLCAoY2hhciAqKSB2cC0+bmFtZSwKKyAgICAgICAgICAgKGludCkgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7CisgICAgbmV3bmFtZVt2cC0+bmFtZWxlbl0gPSAwOworICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKKyAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jcyIsICIgIHJlc3VsdDogJWRcbiIsIHJlc3VsdCkpOworICAgIGlmICgoZXhhY3QgJiYgKHJlc3VsdCAhPSAwKSkgfHwgKCFleGFjdCAmJiAocmVzdWx0ID49IDApKSkKKyAgICAgICAgcmV0dXJuIChNQVRDSF9GQUlMRUQpOworICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAorICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKKyAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworCisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLworICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODYxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oOiAgdXRpbGl0aXkgZnVuY3Rpb25zIGZvciBleHRlbnNpYmxlIGdyb3Vwcy4KKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfR0VORVJJQ19ICisjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9HRU5FUklDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitpbnQgaGVhZGVyX2dlbmVyaWMoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LCBzaXplX3QgKiwKKyAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfR0VORVJJQ19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmUxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYwpAQCAtMCwwICsxLDExMCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgImhlYWRlcl9zaW1wbGVfdGFibGUuaCIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogaGVhZGVyX3NpbXBsZV90YWJsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKgkgICp2cAkJIFZhcmlhYmxlIGRhdGEuCisgKgkgICpuYW1lCQkgRnVsbHkgaW5zdGFudGlhdGVkIE9JRCBuYW1lLgorICoJICAqbGVuZ3RoCSBMZW5ndGggb2YgbmFtZS4KKyAqCSAgIGV4YWN0CSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIGlzIGRlc2lyZWQuCisgKgkgICp2YXJfbGVuCSBIb29rIGZvciBzaXplIG9mIHJldHVybmVkIGRhdGEgdHlwZS4KKyAqCSgqKndyaXRlX21ldGhvZCkgSG9vayBmb3Igd3JpdGUgbWV0aG9kIChVTlVTRUQpLgorICoJICAgbWF4CisgKgorICogUmV0dXJuczoKKyAqCTAJSWYgbmFtZSBtYXRjaGVzIHZwLT5uYW1lIChhY2NvdW50aW5nIGZvciAnZXhhY3QnKSBhbmQgaXMKKyAqCQkJbm90IGdyZWF0ZXIgaW4gbGVuZ3RoIHRoYW4gJ21heCcuCisgKgkxCU90aGVyd2lzZS4KKyAqCisgKgorICogQ29tcGFyZSAnbmFtZScgdG8gdnAtPm5hbWUgZm9yIHRoZSBiZXN0IG1hdGNoIG9yIGFuIGV4YWN0IG1hdGNoIChpZgorICoJcmVxdWVzdGVkKS4gIEFsc28gY2hlY2sgdGhhdCAnbmFtZScgaXMgbm90IGxvbmdlciB0aGFuICdtYXgnIGlmCisgKgltYXggaXMgZ3JlYXRlci10aGFuL2VxdWFsIDAuCisgKiBTdG9yZSBhIHN1Y2Nlc3NmdWwgbWF0Y2ggaW4gJ25hbWUnLCBhbmQgaW5jcmVtZW50IHRoZSBPSUQgaW5zdGFuY2UgaWYKKyAqCXRoZSBtYXRjaCB3YXMgbm90IGV4YWN0LgorICoKKyAqICduYW1lJyBhbmQgJ2xlbmd0aCcgYXJlIHVuZGVmaW5lZCB1cG9uIGZhaWx1cmUuCisgKgorICovCitpbnQKK2hlYWRlcl9zaW1wbGVfdGFibGUoc3RydWN0IHZhcmlhYmxlICp2cCwgb2lkICogbmFtZSwgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sCisgICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCwgaW50IG1heCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgaSwgcnRlc3Q7ICAgLyogU2V0IHRvOiAgICAgIC0xICAgICAgSWYgbmFtZSA8IHZwLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgMSAgICAgICBJZiBuYW1lID4gdnAtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAwICAgICAgIE90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOworCisgICAgZm9yIChpID0gMCwgcnRlc3QgPSAwOworICAgICAgICAgaSA8IChpbnQpIHZwLT5uYW1lbGVuICYmIGkgPCAoaW50KSAoKmxlbmd0aCkgJiYgIXJ0ZXN0OyBpKyspIHsKKyAgICAgICAgaWYgKG5hbWVbaV0gIT0gdnAtPm5hbWVbaV0pIHsKKyAgICAgICAgICAgIGlmIChuYW1lW2ldIDwgdnAtPm5hbWVbaV0pCisgICAgICAgICAgICAgICAgcnRlc3QgPSAtMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBydGVzdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJ0ZXN0ID4gMCB8fAorICAgICAgICAoZXhhY3QgPT0gMQorICAgICAgICAgJiYgKHJ0ZXN0IHx8IChpbnQpICpsZW5ndGggIT0gKGludCkgKHZwLT5uYW1lbGVuICsgMSkpKSkgeworICAgICAgICBpZiAodmFyX2xlbikKKyAgICAgICAgICAgICp2YXJfbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIE1BVENIX0ZBSUxFRDsKKyAgICB9CisKKyAgICBtZW1zZXQobmV3bmFtZSwgMCwgc2l6ZW9mKG5ld25hbWUpKTsKKworICAgIGlmICgoKGludCkgKmxlbmd0aCkgPD0gKGludCkgdnAtPm5hbWVsZW4gfHwgcnRlc3QgPT0gLTEpIHsKKyAgICAgICAgbWVtbW92ZShuZXduYW1lLCB2cC0+bmFtZSwgKGludCkgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIG5ld25hbWVbdnAtPm5hbWVsZW5dID0gMTsKKyAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICB9IGVsc2UgaWYgKCgoaW50KSAqbGVuZ3RoKSA+IChpbnQpIHZwLT5uYW1lbGVuICsgMSkgeyAgICAgICAvKiBleGFjdCBjYXNlIGNoZWNrZWQgZWFybGllciAqLworICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIG5hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgaWYgKG5hbWVbKmxlbmd0aCAtIDFdIDwgTUFYX1NVQklEKSB7CisgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDYXJlZnVsIG5vdCB0byBvdmVyZmxvdy4uLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAgICAgbWVtbW92ZShuZXduYW1lLCBuYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7CisgICAgICAgIGlmICghZXhhY3QpIHsKKyAgICAgICAgICAgIGlmIChuYW1lWypsZW5ndGggLSAxXSA8IE1BWF9TVUJJRCkgeworICAgICAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV0gKyAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIENhcmVmdWwgbm90IHRvIG92ZXJmbG93Li4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChtYXggPj0gMCAmJiAoKGludCluZXduYW1lWypsZW5ndGggLSAxXSA+IG1heCkpIHx8CisgICAgICAgICAgICAgICAoIDAgPT0gbmV3bmFtZVsqbGVuZ3RoIC0gMV0gKSkgeworICAgICAgICBpZiAodmFyX2xlbikKKyAgICAgICAgICAgICp2YXJfbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIE1BVENIX0ZBSUxFRDsKKyAgICB9CisKKyAgICBtZW1tb3ZlKG5hbWUsIG5ld25hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKKyAgICBpZiAod3JpdGVfbWV0aG9kKQorICAgICAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOworICAgIGlmICh2YXJfbGVuKQorICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTVkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmg6ICB1dGlsaXRpeSBmdW5jdGlvbnMgZm9yIGV4dGVuc2libGUKKyAqIGdyb3Vwcy4KKyAqLworI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfU0lNUExFX1RBQkxFX0gKKyNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX1NJTVBMRV9UQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworaW50IGhlYWRlcl9zaW1wbGVfdGFibGUoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LCBzaXplX3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqLCBpbnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX1NJTVBMRV9UQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYWQ3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogdXRpbF9mdW5jcy5jCisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IENvcHlyaWdodCAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZiBIQVZFX1JBSVNFCisjZGVmaW5lIGFsYXJtIHJhaXNlCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKworI2lmZGVmIFVTSU5HX1VDRF9TTk1QX0VSUk9STUlCX01PRFVMRQorI2luY2x1ZGUgInVjZC1zbm1wL2Vycm9ybWliLmgiCisjZWxzZQorI2RlZmluZSBzZXRQZXJyb3JzdGF0dXMoeCkgc25tcF9sb2dfcGVycm9yKHgpCisjZW5kaWYKKworY2hhciAqKmFyZ3ZyZXN0YXJ0cCwgKmFyZ3ZyZXN0YXJ0bmFtZSwgKmFyZ3ZyZXN0YXJ0OworCitSRVRTSUdUWVBFCityZXN0YXJ0X2RvaXQoaW50IGEpCit7CisgICAgY2hhciAqIG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworICAgIHNubXBfc2h1dGRvd24obmFtZSk7CisKKyAgICAvKiAgVGhpcyBzaWduYWwgaGFuZGxlciBtYXkgcnVuIHdpdGggU0lHQUxBUk0gYmxvY2tlZC4KKyAgICAgKiAgU2luY2UgdGhlIHNpZ25hbCBtYXNrIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGV4ZWN2KCksIHdlIG11c3QKKyAgICAgKiAgbWFrZSBzdXJlIHRoYXQgU0lHQUxBUk0gaXMgdW5ibG9ja2VkIHByaW9yIG9mIGV4ZWN2J2luZy4KKyAgICAgKiAgT3RoZXJ3aXNlIFNJR0FMQVJNIHdpbGwgYmUgaWdub3JlZCBpbiB0aGUgbmV4dCBpbmNhcm5hdGlvbgorICAgICAqICBvZiBzbm1wZCwgYmVjYXVzZSB0aGUgc2lnbmFsIGlzIGJsb2NrZWQuIEFuZCB0aHVzLCB0aGUKKyAgICAgKiAgcmVzdGFydCBkb2Vzbid0IHdvcmsgYW55bW9yZS4KKyAgICAgKgorICAgICAqICBBIHF1b3RlIGZyb20gdGhlIHNpZ3Byb2NtYXNrKCkgbWFuIHBhZ2U6CisgICAgICogIFRoZSB1c2Ugb2Ygc2lncHJvY21hc2soKSBpcyB1bnNwZWNpZmllZCBpbiBhIG11bHRpdGhyZWFkZWQgcHJvY2Vzczsgc2VlCisgICAgICogIHB0aHJlYWRfc2lnbWFzaygzKS4KKyAgICAgKi8KKyNpZiBIQVZFX1NJR1BST0NNQVNLCisgICAgeworICAgICAgICBzaWdzZXRfdCBlbXB0eV9zZXQ7CisKKyAgICAgICAgc2lnZW1wdHlzZXQoJmVtcHR5X3NldCk7CisgICAgICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmZW1wdHlfc2V0LCBOVUxMKTsKKyAgICB9CisjZWxpZiBIQVZFX1NJR0JMT0NLCisgICAgc2lnc2V0bWFzaygwKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBkbyB0aGUgZXhlYworICAgICAqLworI2lmIEhBVkVfRVhFQ1YKKyAgICBleGVjdihhcmd2cmVzdGFydG5hbWUsIGFyZ3ZyZXN0YXJ0cCk7CisgICAgc2V0UGVycm9yc3RhdHVzKGFyZ3ZyZXN0YXJ0bmFtZSk7CisjZW5kaWYKK30KKworaW50CityZXN0YXJ0X2hvb2soaW50IGFjdGlvbiwKKyAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAorICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCisgICAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuLAorICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisKKyAgICBsb25nICAgICAgICAgICAgdG1wID0gMDsKKworICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX0lOVEVHRVIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX05PVElDRSwgIldyb25nIHR5cGUgIT0gaW50XG4iKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKKyAgICB9CisgICAgdG1wID0gKigobG9uZyAqKSB2YXJfdmFsKTsKKyAgICBpZiAodG1wID09IDEgJiYgYWN0aW9uID09IENPTU1JVCkgeworI2lmZGVmIFNJR0FMUk0KKyAgICAgICAgc2lnbmFsKFNJR0FMUk0sIHJlc3RhcnRfZG9pdCk7CisjZW5kaWYKKyAgICAgICAgYWxhcm0oTkVUU05NUF9SRVNUQVJUU0xFRVApOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3NjBhMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfUkVTVEFSVF9ICisjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX1JFU1RBUlRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1JFVFNJR1RZUEUgICAgICByZXN0YXJ0X2RvaXQoaW50KTsKK1dyaXRlTWV0aG9kICAgICByZXN0YXJ0X2hvb2s7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfVVRJTF9GVU5DU19SRVNUQVJUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jCmluZGV4IDIxYmY2ODIuLjY4ZjM2NTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYwpAQCAtMzUsMTkgKzM1LDIyIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDx1Y2Qtc25tcC9lcnJvcm1pYi5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImV4ZWN1dGUuaCIKKyNpbmNsdWRlICJzdHJ1Y3QuaCIKIAogI2RlZmluZSBzZXRQZXJyb3JzdGF0dXMoeCkgc25tcF9sb2dfcGVycm9yKHgpCiAKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBwb3BlbiAgX3BvcGVuCisjZGVmaW5lIHBjbG9zZSBfcGNsb3NlCisjZW5kaWYKKworCiBpbnQKIHJ1bl9zaGVsbF9jb21tYW5kKCBjaGFyICpjb21tYW5kLCBjaGFyICppbnB1dCwKICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXQsICBpbnQgKm91dF9sZW4pCS8qIE9yIHJlYWxsb2Mgc3R5bGUgPyAqLwogewogI2lmIEhBVkVfU1lTVEVNCi0gICAgY29uc3QgY2hhciAqaWZuYW1lOyAgICAvKiBGaWxlbmFtZSBmb3IgaW5wdXQgIHJlZGlyZWN0aW9uICovCi0gICAgY29uc3QgY2hhciAqb2ZuYW1lOyAgICAvKiBGaWxlbmFtZSBmb3Igb3V0cHV0IHJlZGlyZWN0aW9uICovCi0gICAgY2hhciAgICAgICAgc2hlbGxsaW5lW1NUUk1BWF07ICAgLyogVGhlIGZ1bGwgY29tbWFuZCB0byBydW4gKi8KICAgICBpbnQgICAgICAgICByZXN1bHQ7ICAgIC8qIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjb21tYW5kICovCiAKICAgICBpZiAoIWNvbW1hbmQpCkBAIC01NiwyNSArNTksMzEgQEAKICAgICBERUJVR01TR1RMKCgicnVuX3NoZWxsX2NvbW1hbmQiLCAicnVubmluZyAlc1xuIiwgY29tbWFuZCkpOwogICAgIERFQlVHTVNHVEwoKCJydW46c2hlbGwiLCAicnVubmluZyAnJXMnXG4iLCBjb21tYW5kKSk7CiAKKyAgICByZXN1bHQgPSAtMTsKKwogICAgIC8qCi0gICAgICogU2V0IHVwIHRoZSBjb21tYW5kIHRvIHJ1bi4uLi4KKyAgICAgKiBTZXQgdXAgdGhlIGNvbW1hbmQgYW5kIHJ1biBpdC4KICAgICAgKi8KICAgICBpZiAoaW5wdXQpIHsKICAgICAgICAgRklMRSAgICAgICAqZmlsZTsKIAotICAgICAgICBpZm5hbWUgPSBuZXRzbm1wX21rdGVtcCgpOwotICAgICAgICBpZihOVUxMID09IGlmbmFtZSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZmlsZSA9IGZvcGVuKGlmbmFtZSwgInciKTsKLSAgICAgICAgaWYoTlVMTCA9PSBmaWxlKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZG4ndCBvcGVuIHRlbXBvcmFyeSBmaWxlICVzXG4iLCBpZm5hbWUpOwotICAgICAgICAgICAgdW5saW5rKGlmbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQlmcHJpbnRmKGZpbGUsICIlcyIsIGlucHV0KTsKLSAgICAgICAgZmNsb3NlKCBmaWxlICk7Ci0KICAgICAgICAgaWYgKG91dHB1dCkgeworICAgICAgICAgICAgY29uc3QgY2hhciAqaWZuYW1lOworICAgICAgICAgICAgY29uc3QgY2hhciAqb2ZuYW1lOyAgICAvKiBGaWxlbmFtZSBmb3Igb3V0cHV0IHJlZGlyZWN0aW9uICovCisgICAgICAgICAgICBjaGFyICAgICAgICBzaGVsbGxpbmVbU1RSTUFYXTsgICAvKiBUaGUgZnVsbCBjb21tYW5kIHRvIHJ1biAqLworCisgICAgICAgICAgICBpZm5hbWUgPSBuZXRzbm1wX21rdGVtcCgpOworICAgICAgICAgICAgaWYoTlVMTCA9PSBpZm5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZmlsZSA9IGZvcGVuKGlmbmFtZSwgInciKTsKKyAgICAgICAgICAgIGlmKE5VTEwgPT0gZmlsZSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkbid0IG9wZW4gdGVtcG9yYXJ5IGZpbGUgJXNcbiIsIGlmbmFtZSk7CisgICAgICAgICAgICAgICAgdW5saW5rKGlmbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnByaW50ZihmaWxlLCAiJXMiLCBpbnB1dCk7CisgICAgICAgICAgICBmY2xvc2UoIGZpbGUgKTsKKwogICAgICAgICAgICAgb2ZuYW1lID0gbmV0c25tcF9ta3RlbXAoKTsKICAgICAgICAgICAgIGlmKE5VTEwgPT0gb2ZuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYoaWZuYW1lKQpAQCAtODMsNDkgKzkyLDQ2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzbnByaW50Ziggc2hlbGxsaW5lLCBzaXplb2Yoc2hlbGxsaW5lKSwgIiglcykgPCBcIiVzXCIgPiBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGlmbmFtZSwgb2ZuYW1lICk7CisgICAgICAgICAgICByZXN1bHQgPSBzeXN0ZW0oc2hlbGxsaW5lKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiBvdXRwdXQgd2FzIHJlcXVlc3RlZCwgdGhlbiByZXRyaWV2ZSAmIHJldHVybiBpdC4KKyAgICAgICAgICAgICAqIFRpZHkgdXAsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKG91dF9sZW4gJiYgKm91dF9sZW4gIT0gMCkgeworICAgICAgICAgICAgICAgIGludCAgICAgICAgIGZkOyAgICAgICAgLyogRm9yIHByb2Nlc3NpbmcgYW55IG91dHB1dCAqLworICAgICAgICAgICAgICAgIGludCAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKG9mbmFtZSwgT19SRE9OTFkpOworICAgICAgICAgICAgICAgIGlmKGZkID49IDApCisgICAgICAgICAgICAgICAgICAgIGxlbiAgPSByZWFkKCBmZCwgb3V0cHV0LCAqb3V0X2xlbi0xICk7CisgICAgICAgICAgICAgICAgKm91dF9sZW4gPSBsZW47CisgICAgICAgICAgICAgICAgaWYgKGxlbiA+PSAwKSBvdXRwdXRbbGVuXSA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBvdXRwdXRbMF0gPSAwOworICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bmxpbmsob2ZuYW1lKTsKKyAgICAgICAgICAgIHVubGluayhpZm5hbWUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2ZuYW1lID0gTlVMTDsgICAvKiBKdXN0IHRvIHNodXQgdGhlIGNvbXBpbGVyIHVwISAqLwotICAgICAgICAgICAgc25wcmludGYoIHNoZWxsbGluZSwgc2l6ZW9mKHNoZWxsbGluZSksICIoJXMpIDwgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBpZm5hbWUgKTsKKyAgICAgICAgICAgIGZpbGUgPSBwb3Blbihjb21tYW5kLCAidyIpOworICAgICAgICAgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgICAgICAgICBmd3JpdGUoaW5wdXQsIDEsIHN0cmxlbihpbnB1dCksIGZpbGUpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBjbG9zZShmaWxlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmbmFtZSA9IE5VTEw7ICAgLyogSnVzdCB0byBzaHV0IHRoZSBjb21waWxlciB1cCEgKi8KICAgICAgICAgaWYgKG91dHB1dCkgewotICAgICAgICAgICAgb2ZuYW1lID0gbmV0c25tcF9ta3RlbXAoKTsKLSAgICAgICAgICAgIGlmKE5VTEwgPT0gb2ZuYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHNucHJpbnRmKCBzaGVsbGxpbmUsIHNpemVvZihzaGVsbGxpbmUpLCAiKCVzKSA+IFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgb2ZuYW1lICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvZm5hbWUgPSBOVUxMOyAgIC8qIEp1c3QgdG8gc2h1dCB0aGUgY29tcGlsZXIgdXAhICovCi0gICAgICAgICAgICBzbnByaW50Ziggc2hlbGxsaW5lLCBzaXplb2Yoc2hlbGxsaW5lKSwgIiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kICk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgICAgICBGSUxFKiBmaWxlOwogCi0gICAgLyoKLSAgICAgKiAuLi4gYW5kIHJ1biBpdAotICAgICAqLwotICAgIHJlc3VsdCA9IHN5c3RlbShzaGVsbGxpbmUpOwotCi0gICAgLyoKLSAgICAgKiBJZiBvdXRwdXQgd2FzIHJlcXVlc3RlZCwgdGhlbiByZXRyaWV2ZSAmIHJldHVybiBpdC4KLSAgICAgKiBUaWR5IHVwLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQuCi0gICAgICovCi0gICAgaWYgKCBvdXRwdXQgJiYgb3V0X2xlbiAmJiAoKm91dF9sZW4gIT0gMCkgKSB7Ci0gICAgICAgIGludCAgICAgICAgIGZkOyAgICAgICAgLyogRm9yIHByb2Nlc3NpbmcgYW55IG91dHB1dCAqLwotICAgICAgICBpbnQgICAgICAgICBsZW4gPSAwOwotICAgICAgICBmZCA9IG9wZW4ob2ZuYW1lLCBPX1JET05MWSk7Ci0gICAgICAgIGlmKGZkID49IDApCi0gICAgICAgICAgICBsZW4gID0gcmVhZCggZmQsIG91dHB1dCwgKm91dF9sZW4tMSApOwotCSpvdXRfbGVuID0gbGVuOwotCWlmIChsZW4gPj0gMCkgb3V0cHV0W2xlbl0gPSAwOwotCWVsc2Ugb3V0cHV0WzBdID0gMDsKLQlpZiAoZmQgPj0gMCkgY2xvc2UoZmQpOwotICAgICAgICB1bmxpbmsob2ZuYW1lKTsKLSAgICB9Ci0gICAgaWYgKCBpbnB1dCApIHsKLSAgICAgICAgdW5saW5rKGlmbmFtZSk7CisgICAgICAgICAgICBmaWxlID0gcG9wZW4oY29tbWFuZCwgInIiKTsKKyAgICAgICAgICAgIGlmIChmaWxlKSB7CisgICAgICAgICAgICAgICAgKm91dF9sZW4gPSBmcmVhZChvdXRwdXQsIDEsICpvdXRfbGVuIC0gMSwgZmlsZSk7CisgICAgICAgICAgICAgICAgaWYgKCpvdXRfbGVuID49IDApCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFsqb3V0X2xlbl0gPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0WzBdID0gMDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwY2xvc2UoZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNjAsNjcgKzE2NiwxMiBAQAogICAgIGlmIChjcCkgewogICAgICAgICBhcmd2W2krK10gPSBzdHJkdXAoIGNwICk7CiAgICAgfQotICAgIGFyZ3ZbaV0gPSAwOworICAgIGFyZ3ZbaV0gPSBOVUxMOwogICAgICphcmdjID0gaTsKIAogICAgIHJldHVybiBhcmd2OwogfQogCi1jaGFyICoqCi14eF90b2tlbml6ZV9leGVjX2NvbW1hbmQoIGNoYXIgKmNvbW1hbmQsIGludCAqYXJnYyApCi17Ci0gICAgY2hhciBjdG1wW1NUUk1BWF07Ci0gICAgY2hhciAqY3B0cjEsICpjcHRyMjsKLSAgICBjaGFyICoqYXJndjsKLSAgICBpbnQgIGNvdW50LCBpOwotCi0gICAgaWYgKCFjb21tYW5kKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIG1lbXNldCggY3RtcCwgMCwgU1RSTUFYICk7Ci0gICAgLyoKLSAgICAgKiBNYWtlIGEgY29weSBvZiB0aGUgY29tbWFuZCBpbnRvIHRoZSAnY3RtcCcgYnVmZmVyLAotICAgICAqICAgIHNwbGl0dGluZyBpdCBpbnRvIHNlcGFyYXRlIHRva2VucwotICAgICAqICAgIChidXQgc3RpbGwgYWxsIGluIHRoZSBvbmUgYnVmZmVyKS4KLSAgICAgKi8KLSAgICBjb3VudCA9IDE7Ci0gICAgZm9yIChjcHRyMSA9IGNvbW1hbmQsIGNwdHIyID0gY3RtcDsKLSAgICAgICAgICAgIGNwdHIxICYmICpjcHRyMTsKLSAgICAgICAgICAgIGNwdHIxKyssIGNwdHIyKyspIHsKLSAgICAgICAgKmNwdHIyID0gKmNwdHIxOwotCWlmIChpc3NwYWNlKCpjcHRyMSkpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgYSB0b2tlbiwgc28gaW5jcmVhc2UKLSAgICAgICAgICAgICAqIHRoZSBjb3VudCwgYW5kIG1hcmsgdGhpcyBpbiB0aGUgY29tbWFuZCBjb3B5LgotICAgICAgICAgICAgICogVGhlbiBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IHdvcmQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAqY3B0cjIgPSAwOyAgICAvKiBFbmQgb2YgdG9rZW4gKi8KLQkgICAgY3B0cjEgPSBza2lwX3doaXRlKGNwdHIxKTsKLQkgICAgaWYgKCFjcHRyMSkKLQkgICAgICAgIGJyZWFrOwotCSAgICBjcHRyMS0tOwkvKiBCYWNrIHVwIG9uZSwgcmVhZHkgZm9yIHRoZSBuZXh0IGxvb3AgKi8KLQl9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBOb3cgc2V0IHVwIHRoZSAnYXJndicgYXJyYXksCi0gICAgICogICBjb3B5aW5nIHRva2VucyBvdXQgb2YgdGhlICdjcHRyJyBidWZmZXIKLSAgICAgKi8KLSAgICBhcmd2ID0gKGNoYXIgKiopIGNhbGxvYygoY291bnQgKyAyKSwgc2l6ZW9mKGNoYXIgKikpOwotICAgIGlmIChhcmd2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNwdHIyID0gY3RtcDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBhcmd2W2ldID0gc3RyZHVwKCBjcHRyMiApOwotICAgICAgICBjcHRyMiAgKz0gc3RybGVuKCBjcHRyMiApKzE7Ci0gICAgfQotICAgIGFyZ3ZbY291bnRdID0gMDsKLSAgICAqYXJnYyAgICAgICA9IGNvdW50OwotICAgICAgICAKLSAgICByZXR1cm4gYXJndjsKLX0KLQogCiBpbnQKIHJ1bl9leGVjX2NvbW1hbmQoIGNoYXIgKmNvbW1hbmQsIGNoYXIgKmlucHV0LApAQCAtMzU1LDcgKzMwNiw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGNvdW50ID0gcmVhZChvcGlwZVswXSwgJmNhY2hlX3B0cltvZmZzZXRdLCBjYWNoZV9zaXplKTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnJ1bjpleGVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmVhZCAlZCBieXRlc1xuIiwgY291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmVhZCAlZCBieXRlc1xuIiwgKGludCljb3VudCkpOwogICAgICAgICAgICAgaWYgKDAgPT0gY291bnQpIHsKICAgICAgICAgICAgICAgICBpbnQgcmM7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTM5MCw3ICszNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6cnVuOmV4ZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVkIGxlZnQgaW4gYnVmZmVyXG4iLCBjYWNoZV9zaXplKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJWQgbGVmdCBpbiBidWZmZXJcbiIsIChpbnQpY2FjaGVfc2l6ZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKChjb3VudCA9PSAtMSkgJiYgKEVBR0FJTiAhPSBlcnJubykpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmggYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oCmluZGV4IDA1ZTgyNzAuLjNjOWU4NGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX01JQkdST1VQX0VYRUNVVEVfSAogI2RlZmluZSBfTUlCR1JPVVBfRVhFQ1VURV9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiBjb25maWdfYmVsb25nc19pbihhZ2VudF9tb2R1bGUpCiAKIGludCBydW5fc2hlbGxfY29tbWFuZChjaGFyICpjb21tYW5kLCBjaGFyICppbnB1dCwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYwppbmRleCA0ZjY2ZDdlLi44NjA1OTBmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jCkBAIC0xLDMwICsxLDM1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcXVlcnlfYWxsLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcXVlcnksIGlxdWVyeV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXF1ZXJ5X2NvbW11bml0eV9zZXNzaW9uLCBpcXVlcnlfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlxdWVyeV9wZHVfc2Vzc2lvbiwgaXF1ZXJ5X2FsbCkKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbikKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWQorCiB2b2lkCiBuZXRzbm1wX3BhcnNlX2lxdWVyeVNlY0xldmVsKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQogewotICAgIGNoYXIgYnVmWzEwMjRdOwogICAgIGludCBzZWNMZXZlbDsKIAogICAgIGlmICgoc2VjTGV2ZWwgPSBwYXJzZV9zZWNMZXZlbF9jb25mKCB0b2tlbiwgbGluZSApKSA+PSAwICkgewogICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfU0VDTEVWRUwsIHNlY0xldmVsKTsKICAgICB9IGVsc2UgewotICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVW5rbm93biBzZWN1cml0eSBsZXZlbDogJXMiLCBsaW5lKTsKLSAgICAgICAgYnVmWyBzaXplb2YoYnVmKS0xIF0gPSAwOwotICAgICAgICBjb25maWdfcGVycm9yKGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoIlVua25vd24gc2VjdXJpdHkgbGV2ZWw6ICVzIiwgbGluZSk7CiAgICAgfQogfQogCiB2b2lkCiBuZXRzbm1wX3BhcnNlX2lxdWVyeVZlcnNpb24oY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCiB7Ci0gICAgY2hhciBidWZbMTAyNF07Ci0KICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQogICAgIGlmICghc3RyY21wKCBsaW5lLCAiMSIgKSkKICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCkBAIC00MSw5ICs0Niw3IEBACiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9WRVJTSU9OLCBTTk1QX1ZFUlNJT05fMyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJVbmtub3duIHZlcnNpb246ICVzIiwgbGluZSk7Ci0gICAgICAgIGJ1Zlsgc2l6ZW9mKGJ1ZiktMSBdID0gMDsKLSAgICAgICAgY29uZmlnX3BlcnJvcihidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJVbmtub3duIHZlcnNpb246ICVzIiwgbGluZSk7CiAgICAgfQogfQogCkBAIC02MSw5ICs2NCw2IEBACiAgICAgaWYgKHNlY05hbWUpCiAgICAgICAgIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbigKICAgICAgICAgICAgICBuZXRzbm1wX2lxdWVyeV91c2VyX3Nlc3Npb24oc2VjTmFtZSkpOwotICAgIGVsc2UKLSAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJpcXVlcnlTZWNOYW1lIGhhcyBub3QgYmVlbiBjb25maWd1cmVkIC0gaW50ZXJuYWwgcXVlcmllcyB3aWxsIGZhaWxcbiIpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKQEAgLTgxLDkgKzgxLDkgQEAKIHsKICAgICB1X2NoYXIgZUlEW1NOTVBfTUFYQlVGX1NNQUxMXTsKICAgICBzaXplX3QgZWxlbjsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnMgPSBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnMgPSBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb25fdW5jaGVja2VkKCk7CiAKLSAgICBpZiAocyAmJiBzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDAgKSB7CisgICAgaWYgKCBzICYmIHMtPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCApIHsKICAgICAgICAgZWxlbiA9IHNubXB2M19nZXRfZW5naW5lSUQoZUlELCBzaXplb2YoZUlEKSk7CiAgICAgICAgIHMtPnNlY3VyaXR5RW5naW5lSUQgPSBuZXRzbm1wX21lbWR1cChlSUQsIGVsZW4pOwogICAgICAgICBzLT5zZWN1cml0eUVuZ2luZUlETGVuID0gZWxlbjsKQEAgLTEzMCw2ICsxMzAsNyBAQAogICAgICAqCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZX1BEVV9TRVNTSU9OCiBuZXRzbm1wX3Nlc3Npb24gKm5ldHNubXBfaXF1ZXJ5X3BkdV9zZXNzaW9uKG5ldHNubXBfcGR1KiBwZHUpIHsKICAgICBpZiAoIXBkdSkKICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE0MSwxMyArMTQyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4pOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfaXF1ZXJ5X3Nlc3Npb24oIHBkdS0+Y29tbXVuaXR5LCAKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfaXF1ZXJ5X3Nlc3Npb24oKGNoYXIgKikgcGR1LT5jb21tdW5pdHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52ZXJzaW9uKzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX1NFQ19MRVZFTF9OT0FVVEgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZX1BEVV9TRVNTSU9OICovCiAKIG5ldHNubXBfc2Vzc2lvbiAqbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uKGNoYXIqIHNlY05hbWUpewogICAgIHVfY2hhciBlSURbU05NUF9NQVhCVUZfU01BTExdOwpAQCAtMTU5LDYgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX1NFQ19MRVZFTF9BVVRITk9QUklWLCBlSUQsIGVsZW4pOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZX0NPTU1VTklUWV9TRVNTSU9OCiBuZXRzbm1wX3Nlc3Npb24gKm5ldHNubXBfaXF1ZXJ5X2NvbW11bml0eV9zZXNzaW9uKCBjaGFyKiBjb21tdW5pdHksIGludCB2ZXJzaW9uICkgeyAKICAgICB1X2NoYXIgZUlEW1NOTVBfTUFYQlVGX1NNQUxMXTsKICAgICBzaXplX3QgZWxlbiA9IHNubXB2M19nZXRfZW5naW5lSUQoZUlELCBzaXplb2YoZUlEKSk7CkBAIC0xNjYsNiArMTY5LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9pcXVlcnlfc2Vzc2lvbiggY29tbXVuaXR5LCB2ZXJzaW9uLCB2ZXJzaW9uKzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX1NFQ19MRVZFTF9OT0FVVEgsIGVJRCwgZWxlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUllfQ09NTVVOSVRZX1NFU1NJT04gKi8KIAogbmV0c25tcF9zZXNzaW9uICpuZXRzbm1wX2lxdWVyeV9zZXNzaW9uKGNoYXIqIHNlY05hbWUsICAgaW50ICAgdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICBzZWNNb2RlbCwgIGludCAgIHNlY0xldmVsLApAQCAtMjAyLDMgKzIwNiw3IEBACiAgICAgcmV0dXJuIHNzOwogfQogCisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChpcXVlcnkpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZICovCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMKaW5kZXggN2M3MGEwMi4uNDhhYzI4MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMKQEAgLTE1LDggKzE1LDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KIHR5cGVkZWYgc3RydWN0IG92ZXJyaWRlX2RhdGFfcyB7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAgICAgdm9pZCAgICAgICAgICAgKnZhbHVlOwpAQCAtMzQsNyArMzIsNyBAQAogICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAKLSAgICBvdmVycmlkZV9kYXRhICAqZGF0YSA9IGhhbmRsZXItPm15dm9pZDsKKyAgICBvdmVycmlkZV9kYXRhICAqZGF0YSA9IChvdmVycmlkZV9kYXRhKiloYW5kbGVyLT5teXZvaWQ7CiAgICAgdm9pZCAqdG1wcHRyOwogCiAgICAgaWYgKCFkYXRhKSB7CkBAIC01Miw2ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGRhdGEtPnZhbHVlLCBkYXRhLT52YWx1ZV9sZW4pOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBkYXRhLT50eXBlKQogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfV1JPTkdUWVBFKTsKQEAgLTg5LDYgKzg4LDcgQEAKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICAgICAgU05NUF9GUkVFKGRhdGEtPnNldF9zcGFjZSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bnN1cHBvcnRlZCBtb2RlIGluIG92ZXJyaWRlIGhhbmRsZXJcbiIpOwpAQCAtMTgzLDcgKzE4Myw2IEBACiAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIHRoZWRhdGEtPnR5cGUgPSB0eXBlOwogCiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yMDYsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAqIGhleCAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgdGhlZGF0YS0+dmFsdWVfbGVuID0KLSAgICAgICAgICAgICAgICBoZXhfdG9fYmluYXJ5MihidWYgKyAyLCBzdHJsZW4oYnVmKSAtIDIsCisgICAgICAgICAgICAgICAgaGV4X3RvX2JpbmFyeTIoKHVfY2hhciAqKShidWYgKyAyKSwgc3RybGVuKGJ1ZikgLSAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmdGhlZGF0YS0+dmFsdWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhlZGF0YS0+dmFsdWUgPSBzdHJkdXAoYnVmKTsKQEAgLTI0OSw3ICsyNDgsNyBAQAogICAgIHRoZV9yZWctPm1vZGVzID0gKHJlYWR3cml0ZSkgPyBIQU5ETEVSX0NBTl9SV1JJVEUgOiBIQU5ETEVSX0NBTl9ST05MWTsKICAgICB0aGVfcmVnLT5oYW5kbGVyID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigib3ZlcnJpZGUiLCBvdmVycmlkZV9oYW5kbGVyKTsKLSAgICB0aGVfcmVnLT5yb290b2lkID0gbmV0c25tcF9tZW1kdXAob2lkYnVmLCBvaWRidWZfbGVuICogc2l6ZW9mKG9pZCkpOworICAgIHRoZV9yZWctPnJvb3RvaWQgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZChvaWRidWYsIG9pZGJ1Zl9sZW4pOwogICAgIHRoZV9yZWctPnJvb3RvaWRfbGVuID0gb2lkYnVmX2xlbjsKICAgICBpZiAoIXRoZV9yZWctPnJvb3RvaWQgfHwgIXRoZV9yZWctPmhhbmRsZXIgfHwgIXRoZV9yZWctPmhhbmRsZXJOYW1lKSB7CiAgICAgICAgIGlmICh0aGVfcmVnLT5oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdmVyc2lvbnRhZyBiL2FnZW50L21pYmdyb3VwL3ZlcnNpb250YWcKaW5kZXggOWFhNzFhNi4uYzI0YzI1OSAxMDA3NTUKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdmVyc2lvbnRhZworKysgYi9hZ2VudC9taWJncm91cC92ZXJzaW9udGFnCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLURPSVQ9CitET0lUPWVjaG8KIAogaWYgWyAkMiA9ICJ0YWciIC1vICQyID0gInRhciIgXTsKIHRoZW4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jIGIvYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMKaW5kZXggYzAwODU3Ni4uZjQ0Zjg0ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMKQEAgLTgyLDYgKzgyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oPgogCiAjaWZkZWYgVVNJTkdfV0lORVhURExMX01PRFVMRQpAQCAtMTAxLDYgKzEwMiw4IEBACiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgIndpbkV4dERMTC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfaXNfc3VidHJlZSkKKwogCiAjZGVmaW5lIE1BWF9WQUxVRV9OQU1FICAgICAgICAgIDE2MzgzCiAjZGVmaW5lIE1TX0FTTl9VSU5URUdFUjMyIE1TX0FTTl9VTlNJR05FRDMyCkBAIC03NTMsNiArNzU2LDc5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBUcmFuc2xhdGUgTmV0LVNOTVAgcmVxdWVzdCBtb2RlIGludG8gYW4gU25tcEV4dGVuc2lvblF1ZXJ5KCkgUERVIHR5cGUKKyAqIG9yIGludG8gYW4gU25tcEV4dGVuc2lvblF1ZXJ5RXgoKSByZXF1ZXN0IHR5cGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9yZXF1ZXN0X3R5cGUoaW50IG1vZGUsIGludCByZXF1ZXN0X3R5cGUsIFVJTlQgKm5SZXF1ZXN0VHlwZSkKK3sKKyAgICBzd2l0Y2ggKHJlcXVlc3RfdHlwZSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgLyogU25tcEV4dGVuc2lvblF1ZXJ5KCkgUERVIHR5cGUgKi8KKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9QRFVfR0VUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfUERVX0dFVE5FWFQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX1BEVV9TRVQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR01TRygoIndpbkV4dERMTCIsICJpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBtb2RlICVkLlxuIiwgbW9kZSkpOworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoMCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIGNhc2UgMToKKyAgICAgICAgLyogU25tcEV4dGVuc2lvblF1ZXJ5RXgoKSByZXF1ZXN0IHR5cGUgKi8KKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fR0VUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX0dFVF9ORVhUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX1RFU1Q7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX1VORE87CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX0NPTU1JVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX0NMRUFOVVA7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHTVNHKCgid2luRXh0RExMIiwgImludGVybmFsIGVycm9yOiBpbnZhbGlkIG1vZGUgJWQuXG4iLCBtb2RlKSk7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCgwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0coKCJ3aW5FeHRETEwiLCAiaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgYXJndW1lbnQgJWQuXG4iLAorICAgICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlKSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KDApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIHN0YXRpYyBpbnQKIHZhcl93aW5FeHRETEwobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTc2Myw3ICs4MzksNiBAQAogICAgIHdpbmV4dGRsbCAgICAgICpleHRfZGxsX2luZm87CiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CiAgICAgVUlOVCAgICAgICAgICAgIG5SZXF1ZXN0VHlwZTsKLSAgICBjb25zdCBjaGFyICAgICAqbW9kZV9uYW1lOwogICAgIGludCAgICAgICAgICAgICByYzsKIAogICAgIG5ldHNubXBfYXNzZXJ0KGV4dF9kbGxfdmlld19pbmZvKTsKQEAgLTc4MCw0MyArODU1LDggQEAKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICBjYXNlIE1PREVfR0VUOgotICAgICAgICBtb2RlX25hbWUgPSAiR0VUIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fR0VUOwotICAgICAgICBuZXRzbm1wX2Fzc2VydCghY29udGV4dF9pbmZvX2hlYWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PREVfR0VUTkVYVDoKLSAgICAgICAgbW9kZV9uYW1lID0gIkdFVE5FWFQiOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9HRVRfTkVYVDsKLSAgICAgICAgbmV0c25tcF9hc3NlcnQoIWNvbnRleHRfaW5mb19oZWFkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9SRVNFUlZFMSI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9URVNUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX1JFU0VSVkUyIjsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfQUNUSU9OIjsKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgY2FzZSBNT0RFX1NFVF9VTkRPOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX1VORE8iOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfVU5ETzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfQ09NTUlUIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX0NPTU1JVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX0ZSRUUiOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfQ0xFQU5VUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0coKCJ3aW5FeHRETEwiLAotICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbnZhbGlkIG1vZGUgJWQuXG4iLCByZXFpbmZvLT5tb2RlKSk7Ci0gICAgICAgIG5ldHNubXBfYXNzZXJ0KDApOworICAgIGlmICghZ2V0X3JlcXVlc3RfdHlwZShyZXFpbmZvLT5tb2RlLCAhIWV4dF9kbGxfaW5mby0+cGZTbm1wRXh0ZW5zaW9uUXVlcnlFeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJm5SZXF1ZXN0VHlwZSkpIHsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hZ2VudC9vYmplY3RfbW9uaXRvci5jIGIvYWdlbnQvb2JqZWN0X21vbml0b3IuYwppbmRleCBjODQ5M2U0Li4yYWI4YzliIDEwMDY0NAotLS0gYS9hZ2VudC9vYmplY3RfbW9uaXRvci5jCisrKyBiL2FnZW50L29iamVjdF9tb25pdG9yLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lmICEgZGVmaW5lZCBUUlVFCiAjICBkZWZpbmUgVFJVRSAxCi0jZWxpZiBUUlVFICE9IDEKKyNlbHNpZiBUUlVFICE9IDEKIGVycm9yICJUUlVFICE9IDEiCiAjZW5kaWYKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYWdlbnQvc25tcF9hZ2VudC5jIGIvYWdlbnQvc25tcF9hZ2VudC5jCmluZGV4IDVhYTU1NTIuLmI5NmQ2NTAgMTAwNjQ0Ci0tLSBhL2FnZW50L3NubXBfYWdlbnQuYworKysgYi9hZ2VudC9zbm1wX2FnZW50LmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICAqIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWZkZWYgSEFWRV9MSU1JVFNfSApAQCAtNTksMTEgKzYwLDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzksOSArNzYsNiBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2RlZmluZSBTTk1QX05FRURfUkVRVUVTVF9MSVNUCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KQEAgLTk5LDggKzkzLDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAic25tcGQuaCIKLSNpbmNsdWRlICJtaWJncm91cC9zdHJ1Y3QuaCIKLSNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgogCkBAIC0xMTYsNiArMTA4LDg3IEBACiAjaW5jbHVkZSAic211eC9zbXV4LmgiCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfYWdlbnQsIGxpYm5ldHNubXBhZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9kZWJ1Z2dpbmdfdXRpbGl0aWVzLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhbGxvY2F0ZV9nbG9iYWxjYWNoZWlkLCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZyZWVfYWdlbnRfc25tcF9zZXNzaW9uX2J5X3Nlc3Npb24sIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yLCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3JlcXVlc3RzX2Vycm9yLCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlcXVlc3Rfc2V0X2Vycm9yX2lkeCwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzZXRfYWdlbnRfdXB0aW1lLCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzLCBzbm1wX2FnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZHVtcF9zZXNzX2xpc3QsIGFnZW50X2RlYnVnZ2luZ191dGlsaXRpZXMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9yZW1vdmVfbGlzdF9kYXRhLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzZXRfYWxsX3JlcXVlc3RzX2Vycm9yLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZGRyY2FjaGVfYWdlLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWxldGVfc3VidHJlZV9jYWNoZSwgbmV0c25tcF91bnVzZWQpCisKKworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9hZ2VudF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpCit7CisgICAgaWYgKGFyaSkgeworCWlmIChhcmktPmFnZW50X2RhdGEpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYWRkX2xpc3RfZGF0YSgmYXJpLT5hZ2VudF9kYXRhLCBub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFyaS0+YWdlbnRfZGF0YSA9IG5vZGU7CisJfQorICAgIH0KK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UX1JFTU9WRV9MSVNUX0RBVEEKK05FVFNOTVBfSU5MSU5FIGludAorbmV0c25tcF9hZ2VudF9yZW1vdmVfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIG5hbWUpCit7CisgICAgaWYgKChOVUxMID09IGFyaSkgfHwgKE5VTEwgPT0gYXJpLT5hZ2VudF9kYXRhKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZhcmktPmFnZW50X2RhdGEsIG5hbWUpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRfUkVNT1ZFX0xJU1RfREFUQSAqLworCitORVRTTk1QX0lOTElORSB2b2lkICAgICoKK25ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGFyaSkgeworICAgICAgICByZXR1cm4gbmV0c25tcF9nZXRfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSwgbmFtZSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitORVRTTk1QX0lOTElORSB2b2lkCituZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXQobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKK3sKKyAgICBpZiAoYXJpKSB7CisgICAgICAgIG5ldHNubXBfZnJlZV9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKKyAgICB9Cit9CisKK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldHMobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKK3sKKyAgICBpZiAoYXJpKSB7CisgICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7CisgICAgfQorfQorCitORVRTTk1QX0lOTElORSB2b2lkCituZXRzbm1wX2ZyZWVfYWdlbnRfcmVxdWVzdF9pbmZvKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCit7CisgICAgaWYgKGFyaSkgeworICAgICAgICBpZiAoYXJpLT5hZ2VudF9kYXRhKSB7CisgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOworCX0KKyAgICAgICAgU05NUF9GUkVFKGFyaSk7CisgICAgfQorfQorCiBvaWQgICAgICB2ZXJzaW9uX3N5c29pZFtdID0geyBORVRTTk1QX1NZU1RFTV9NSUIgfTsKIGludCAgICAgIHZlcnNpb25fc3lzb2lkX2xlbiA9IE9JRF9MRU5HVEgodmVyc2lvbl9zeXNvaWQpOwogCkBAIC0xMzAsNyArMjAzLDcgQEAKIHN0cnVjdCBhZGRyQ2FjaGUgewogICAgIGNoYXIgICAgICAgICAgICphZGRyOwogICAgIGludCAgICAgICAgICAgIHN0YXR1czsKLSAgICBzdHJ1Y3QgdGltZXZhbCBsYXN0SGl0OworICAgIHN0cnVjdCB0aW1ldmFsIGxhc3RIaXRNOwogfTsKIAogc3RhdGljIHN0cnVjdCBhZGRyQ2FjaGUgYWRkckNhY2hlW1NOTVBfQUREUkNBQ0hFX1NJWkVdOwpAQCAtMTc2LDExICsyNDksMTMgQEAKIAogaW50ICAgICAgbmV0c25tcF9ydW5uaW5nID0gMTsKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FMTE9DQVRFX0dMT0JBTENBQ0hFSUQKIGludAogbmV0c25tcF9hbGxvY2F0ZV9nbG9iYWxjYWNoZWlkKHZvaWQpCiB7CiAgICAgcmV0dXJuICsrY3VycmVudF9nbG9iYWxpZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FMTE9DQVRFX0dMT0JBTENBQ0hFSUQgKi8KIAogaW50CiBuZXRzbm1wX2dldF9sb2NhbF9jYWNoaWQobmV0c25tcF9jYWNoZW1hcCAqY2FjaGVfc3RvcmUsIGludCBnbG9iYWxpZCkKQEAgLTIwMCwxNSArMjc1LDE3IEBACiAgICAgbmV0c25tcF9jYWNoZW1hcCAqdG1wcDsKIAogICAgIHRtcHAgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2FjaGVtYXApOwotICAgIGlmICgqY2FjaGVfc3RvcmUpIHsKLSAgICAgICAgdG1wcC0+bmV4dCA9ICpjYWNoZV9zdG9yZTsKLSAgICAgICAgKmNhY2hlX3N0b3JlID0gdG1wcDsKLSAgICB9IGVsc2UgewotICAgICAgICAqY2FjaGVfc3RvcmUgPSB0bXBwOwotICAgIH0KKyAgICBpZiAodG1wcCAhPSBOVUxMKSB7CisgICAgICAgIGlmICgqY2FjaGVfc3RvcmUpIHsKKyAgICAgICAgICAgIHRtcHAtPm5leHQgPSAqY2FjaGVfc3RvcmU7CisgICAgICAgICAgICAqY2FjaGVfc3RvcmUgPSB0bXBwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmNhY2hlX3N0b3JlID0gdG1wcDsKKyAgICAgICAgfQogCi0gICAgdG1wcC0+Z2xvYmFsaWQgPSBnbG9iYWxpZDsKLSAgICB0bXBwLT5jYWNoZWlkID0gbG9jYWxpZDsKKyAgICAgICAgdG1wcC0+Z2xvYmFsaWQgPSBnbG9iYWxpZDsKKyAgICAgICAgdG1wcC0+Y2FjaGVpZCA9IGxvY2FsaWQ7CisgICAgfQogICAgIHJldHVybiB0bXBwOwogfQogCkBAIC0zMjIsNyArMzk5LDcgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHNob3VsZCBldmVyIGhhcHBlbi4gUGxlYXNlIGVtYWlsCiAgICAgICAgICAgICAgICAgICogdGhlIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgaWYgeW91IGhhdmUKLSAgICAgICAgICAgICAgICAgKiBhIHRlc3QgY2FzZSB0aGF0IGhpdHMgdGhpcyBhc3NlcnQuIC0tIHJzdG9yeQorICAgICAgICAgICAgICAgICAqIGEgdGVzdCBjYXNlIHRoYXQgaGl0cyB0aGlzIGNvbmRpdGlvbi4gLS0gcnN0b3J5CiAgICAgICAgICAgICAgICAgICovCiAJCWludCBpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgPT0gYXNwLT5yZXF1ZXN0cyk7IC8qIHNlZSBub3RlIGFib3ZlICovCkBAIC0zNDUsNyArNDIyLDcgQEAKIAkgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIHdoZW4gd291bGQgd2Ugbm90IGhhdmUgc2F2ZWQgdmFyaWFibGVzPyBzb21lb25lCi0gICAgICAgICAgICAgICAgICogbGV0IG1lIGtub3cgaWYgdGhleSBoaXQgdGhpcyBhc3NlcnQuIC0tIHJzdG9yeQorICAgICAgICAgICAgICAgICAqIGxldCBtZSBrbm93IGlmIHRoZXkgaGl0IHRoaXMgY29uZGl0aW9uLiAtLSByc3RvcnkKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHB0ci0+c2F2ZWRfdmFycyk7CiAgICAgICAgICAgICB9CkBAIC01NDEsMTUgKzYxOCw3IEBACiAgICAgfQogfQogCi0KLWludAotZ2V0TmV4dFNlc3NJRCgpCi17Ci0gICAgc3RhdGljIGludCAgICAgIFNlc3Npb25JRCA9IDA7Ci0KLSAgICByZXR1cm4gKytTZXNzaW9uSUQ7Ci19Ci0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVF9DSEVDS19BTkRfUFJPQ0VTUwogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgcGFja2V0cyBhcnJpdmluZyBvbiB0aGUgU05NUCBwb3J0IGFuZAogICogcHJvY2Vzc2VzIHRoZW0oc25tcF9yZWFkKSBpZiBzb21lIGFyZSBmb3VuZCwgdXNpbmcgdGhlIHNlbGVjdCgpLiBJZiBibG9jawpAQCAtNTk2LDcgKzY2NSw3IEBACiAgICAgICAgIHRpbWVyY2xlYXIodHZwKTsKICAgICB9CiAKLSAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgMCwgMCwgdHZwKTsKKyAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgTlVMTCwgTlVMTCwgdHZwKTsKIAogICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgLyoKQEAgLTYxOSw2ICs2ODgsMTEgQEAKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kaWYgLS0gY291bnQ+MCAqLwogCiAgICAgLyoKKyAgICAgKiBzZWUgaWYgcGVyc2lzdGVudCBzdG9yZSBuZWVkcyB0byBiZSBzYXZlZAorICAgICAqLworICAgIHNubXBfc3RvcmVfaWZfbmVlZGVkKCk7CisKKyAgICAvKgogICAgICAqIFJ1biByZXF1ZXN0ZWQgYWxhcm1zLiAgCiAgICAgICovCiAgICAgcnVuX2FsYXJtcygpOwpAQCAtNjI3LDcgKzcwMSw3IEBACiAKICAgICByZXR1cm4gY291bnQ7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UX0NIRUNLX0FORF9QUk9DRVNTICovCiAKIC8qCiAgKiBTZXQgdXAgdGhlIGFkZHJlc3MgY2FjaGUuICAKQEAgLTY4Myw3ICs3NTcsNyBAQAogICAgIC8qCiAgICAgICogRmlyc3QgZ2V0IHRoZSBjdXJyZW50IGFuZCBvbGRlc3QgYWxsb3dhYmxlIHRpbWVzdGFtcHMKICAgICAgKi8KLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSopIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICBhZ2VkLnR2X3NlYyA9IG5vdy50dl9zZWMgLSBTTk1QX0FERFJDQUNIRV9NQVhBR0U7CiAgICAgYWdlZC50dl91c2VjID0gbm93LnR2X3VzZWM7CiAKQEAgLTcwMyw4ICs3NzcsOCBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogZm91bmQgYSBtYXRjaAogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGFkZHJDYWNoZVtpXS5sYXN0SGl0ID0gbm93OwotICAgICAgICAgICAgICAgIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXQsICZhZ2VkLCA8KSkKKyAgICAgICAgICAgICAgICBhZGRyQ2FjaGVbaV0ubGFzdEhpdE0gPSBub3c7CisgICAgICAgICAgICAgICAgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdE0sICZhZ2VkLCA8KSkKIAkJICAgIHJjID0gMTsgLyogc2hvdWxkIGhhdmUgZXhwaXJlZCwgc28gaXMgbmV3ICovCiAJCWVsc2UKIAkJICAgIHJjID0gMDsgLyogbm90IGV4cGlyZWQsIHNvIGlzIGV4aXN0aW5nIGVudHJ5ICovCkBAIC03MTQsNyArNzg4LDcgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFVzZWQsIGJ1dCBub3QgdGhpcyBhZGRyZXNzLiBjaGVjayBpZiBpdCdzIHN0YWxlLgogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXQsICZhZ2VkLCA8KSkgeworICAgICAgICAgICAgICAgIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXRNLCAmYWdlZCwgPCkpIHsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogU3RhbGUsIHJldXNlCiAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzMyLDggKzgwNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBpZiAob2xkZXN0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGVzdCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJDYWNoZVtvbGRlc3RdLmxhc3RIaXQsIDwpKQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXRNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkckNhY2hlW29sZGVzdF0ubGFzdEhpdE0sIDwpKQogICAgICAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gaTsKICAgICAgICAgICAgICAgICB9IC8qIGZyZXNoICovCiAgICAgICAgICAgICB9IC8qIHVzZWQsIG5vIG1hdGNoICovCkBAIC03NTAsNyArODI0LDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgYWRkckNhY2hlW3VudXNlZF0uYWRkciA9IHN0cmR1cChhZGRyKTsKICAgICAgICAgICAgIGFkZHJDYWNoZVt1bnVzZWRdLnN0YXR1cyA9IFNOTVBfQUREUkNBQ0hFX1VTRUQ7Ci0gICAgICAgICAgICBhZGRyQ2FjaGVbdW51c2VkXS5sYXN0SGl0ID0gbm93OworICAgICAgICAgICAgYWRkckNhY2hlW3VudXNlZF0ubGFzdEhpdE0gPSBub3c7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIE90aGVyd2lzZSwgcmVwbGFjZSBvbGRlc3QgZW50cnkgKi8KICAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCkBAIC03NjAsNyArODM0LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgZnJlZShhZGRyQ2FjaGVbb2xkZXN0XS5hZGRyKTsKICAgICAgICAgICAgIGFkZHJDYWNoZVtvbGRlc3RdLmFkZHIgPSBzdHJkdXAoYWRkcik7Ci0gICAgICAgICAgICBhZGRyQ2FjaGVbb2xkZXN0XS5sYXN0SGl0ID0gbm93OworICAgICAgICAgICAgYWRkckNhY2hlW29sZGVzdF0ubGFzdEhpdE0gPSBub3c7CiAgICAgICAgIH0KICAgICAgICAgcmMgPSAxOwogICAgIH0KQEAgLTc3OCwxMSArODUyLDEzIEBACiAgKgogICogYmFja3dhcmRzIGNvbXBhdGFiaWxpdHk7IG5vdCB1c2VkIGFueXdoZXJlCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BRERSQ0FDSEVfQUdFCiB2b2lkCiBuZXRzbm1wX2FkZHJjYWNoZV9hZ2Uodm9pZCkKIHsKICAgICAodm9pZCluZXRzbm1wX2FkZHJjYWNoZV9hZGQoTlVMTCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BRERSQ0FDSEVfQUdFICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBuZXRzbm1wX2FnZW50X2NoZWNrX3BhY2tldApAQCAtOTEzLDkgKzk4OSwxMSBAQAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIFJFU1BPTlNFIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfU0VUOgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgU0VUIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19UUkFQOgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgVFJBUCBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkzMyw2ICsxMDExLDcgQEAKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIFJFUE9SVCBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgSU5URVJOQUwgUkVTRVJWRTEgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NTYsNiArMTAzNSw3IEBACiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9VTkRPOgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgSU5URVJOQUwgVU5ETyBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIFVOS05PV04gbWVzc2FnZSwgdHlwZT0lMDJYXG4iLApAQCAtMTA0Nyw2ICsxMTI3LDI3IEBACiAJCQkJICBORVRTTk1QX0RTX0FHRU5UX0ZMQUdTKTsKICAgICBzLT5pc0F1dGhvcml0YXRpdmUgPSBTTk1QX1NFU1NfQVVUSE9SSVRBVElWRTsKIAorICAgIC8qIE9wdGlvbmFsIHN1cHBsaW1lbnRhbCB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQKKyAgICAgICBmaW5hbCBjYWxsIHRvIGFjdHVhbGx5IG9wZW4gdGhlIHRyYW5zcG9ydCAqLworICAgIGlmIChuZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydChzLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwgdCkKKyAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIFNOTVBfRlJFRShzKTsKKyAgICAgICAgU05NUF9GUkVFKG4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisKKyAgICBpZiAodC0+Zl9vcGVuKQorICAgICAgICB0ID0gdC0+Zl9vcGVuKHQpOworCisgICAgaWYgKE5VTEwgPT0gdCkgeworICAgICAgICBTTk1QX0ZSRUUocyk7CisgICAgICAgIFNOTVBfRlJFRShuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVEOworCiAgICAgc3AgPSBzbm1wX2FkZChzLCB0LCBuZXRzbm1wX2FnZW50X2NoZWNrX3BhY2tldCwKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfY2hlY2tfcGFyc2UpOwogICAgIGlmIChzcCA9PSBOVUxMKSB7CkBAIC0xMTgzLDYgKzEyODQsNyBAQAogICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiAgTm8gZXJyb3IgaWYgISBNQVNURVJfQUdFTlQgICovCiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKICAgICAvKgogICAgICAqIEhhdmUgc3BlY2lmaWMgYWdlbnQgcG9ydHMgYmVlbiBzcGVjaWZpZWQ/ICAKICAgICAgKi8KQEAgLTEyNTEsNiArMTM1Myw4IEBACiAJCQkiTlNBUFxuIiwgY3B0cikpOwogICAgICAgICB9CiAgICAgfSB3aGlsZShzdCAmJiAqc3QgIT0gJ1wwJyk7CisgICAgU05NUF9GUkVFKGJ1Zik7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLwogCiAjaWZkZWYgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTEyOTEsNyArMTM5NSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwiYWdlbnRfc2VzaW9uICUwOHAgY3JlYXRlZFxuIiwgYXNwKSk7CisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCJhZ2VudF9zZXNpb24gJThwIGNyZWF0ZWRcbiIsIGFzcCkpOwogICAgIGFzcC0+c2Vzc2lvbiA9IHNlc3Npb247CiAgICAgYXNwLT5wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwogICAgIGFzcC0+b3JpZ19wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwpAQCAtMTMxNyw3ICsxNDIxLDcgQEAKICAgICBpZiAoIWFzcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCJhZ2VudF9zZXNzaW9uICUwOHAgcmVsZWFzZWRcbiIsIGFzcCkpOworICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwiYWdlbnRfc2Vzc2lvbiAlOHAgcmVsZWFzZWRcbiIsIGFzcCkpOwogCiAgICAgbmV0c25tcF9yZW1vdmVfZnJvbV9kZWxlZ2F0ZWQoYXNwKTsKICAgICAKQEAgLTEzMjksMTIgKzE0MzMsOCBAQAogICAgICAgICBzbm1wX2ZyZWVfcGR1KGFzcC0+cGR1KTsKICAgICBpZiAoYXNwLT5yZXFpbmZvKQogICAgICAgICBuZXRzbm1wX2ZyZWVfYWdlbnRfcmVxdWVzdF9pbmZvKGFzcC0+cmVxaW5mbyk7Ci0gICAgaWYgKGFzcC0+dHJlZWNhY2hlKSB7Ci0gICAgICAgIFNOTVBfRlJFRShhc3AtPnRyZWVjYWNoZSk7Ci0gICAgfQotICAgIGlmIChhc3AtPmJ1bGtjYWNoZSkgewotICAgICAgICBTTk1QX0ZSRUUoYXNwLT5idWxrY2FjaGUpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUoYXNwLT50cmVlY2FjaGUpOworICAgIFNOTVBfRlJFRShhc3AtPmJ1bGtjYWNoZSk7CiAgICAgaWYgKGFzcC0+cmVxdWVzdHMpIHsKICAgICAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc3AtPnZiY291bnQ7IGkrKykgewpAQCAtMTM4OSw3ICsxNDg5LDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgYXNwLT5uZXh0ID0gYWdlbnRfZGVsZWdhdGVkX2xpc3Q7CiAgICAgICAgICAgICBhZ2VudF9kZWxlZ2F0ZWRfbGlzdCA9IGFzcDsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgImRlbGVnYXRlIHNlc3Npb24gPT0gJTA4cFxuIiwgYXNwKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJkZWxlZ2F0ZSBzZXNzaW9uID09ICU4cFxuIiwgYXNwKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtMTQxNiw3ICsxNTE2LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWdlbnRfZGVsZWdhdGVkX2xpc3QgPSBhc3AtPm5leHQ7CiAKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAicmVtb3ZlIGRlbGVnYXRlZCBzZXNzaW9uID09ICUwOHBcbiIsIGFzcCkpOworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJyZW1vdmUgZGVsZWdhdGVkIHNlc3Npb24gPT0gJThwXG4iLCBhc3ApKTsKIAogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0xNDYzLDcgKzE1NjMsNyBAQAogICAgICAqLwogICAgIGlmKGNvdW50KSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInJlbW92ZWQgJWQgZGVsZWdhdGVkIHJlcXVlc3QocykgZm9yIHNlc3Npb24gIgotICAgICAgICAgICAgICAgICAgICAiJTA4cFxuIiwgY291bnQsIHNlc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgIiU4cFxuIiwgY291bnQsIHNlc3MpKTsKICAgICAgICAgbmV0c25tcF9jaGVja19vdXRzdGFuZGluZ19hZ2VudF9yZXF1ZXN0cygpOwogICAgIH0KICAgICAKQEAgLTE1MTksMTUgKzE2MTksMTIgQEAKIGludAogbmV0c25tcF93cmFwX3VwX3JlcXVlc3QobmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3AsIGludCBzdGF0dXMpCiB7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJfcHRyOwotICAgIGludCAgICAgICAgICAgICBpOwotCiAgICAgLyoKICAgICAgKiBpZiB0aGlzIHJlcXVlc3Qgd2FzIGEgc2V0LCBjbGVhciB0aGUgZ2xvYmFsIG5vdyB0aGF0IHdlIGFyZQogICAgICAqIGRvbmUuCiAgICAgICovCiAgICAgaWYgKGFzcCA9PSBuZXRzbm1wX3Byb2Nlc3Npbmdfc2V0KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlNFVCByZXF1ZXN0IGNvbXBsZXRlLCBhc3AgPSAlMDhwXG4iLAorICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJTRVQgcmVxdWVzdCBjb21wbGV0ZSwgYXNwID0gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICBhc3ApKTsKICAgICAgICAgbmV0c25tcF9wcm9jZXNzaW5nX3NldCA9IE5VTEw7CiAgICAgfQpAQCAtMTU0MSw2ICsxNjM4LDcgQEAKICAgICAgICAgICAgIGFzcC0+c3RhdHVzID0gc3RhdHVzOwogCiAgICAgICAgIHN3aXRjaCAoYXNwLT5wZHUtPmNvbW1hbmQpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTjoKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOgogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTI6CkBAIC0xNTUwLDYgKzE2NDgsNyBAQAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHNhdmVfc2V0X2NhY2hlKGFzcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKICAgICAgICAgICAgICAgICBfZml4X2VuZG9mbWlidmlldyhhc3ApOwpAQCAtMTU2OCw2ICsxNjY3LDcgQEAKICAgICAgICAgICogdjEgcXVlcnkuICBTZWUgUkZDMjU3NiAtIHNlY3Rpb24gNC4zCiAgICAgICAgICAqLwogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoKGFzcC0+cGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1NFVCkgJiYKICAgICAgICAgICAgIChhc3AtPnBkdS0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMSkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYXNwLT5zdGF0dXMpIHsKQEAgLTE2MDIsOCArMTcwMiwxMCBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKChhc3AtPnBkdS0+Y29tbWFuZCAhPSBTTk1QX01TR19TRVQpICYmCiAgICAgICAgICAgICAoYXNwLT5wZHUtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzEpKSB7Ci0gICAgICAgICAgICBmb3IgKHZhcl9wdHIgPSBhc3AtPnBkdS0+dmFyaWFibGVzLCBpID0gMTsKLSAgICAgICAgICAgICAgICAgdmFyX3B0ciAhPSBOVUxMOyB2YXJfcHRyID0gdmFyX3B0ci0+bmV4dF92YXJpYWJsZSwgaSsrKSB7CisgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcl9wdHIgPSBhc3AtPnBkdS0+dmFyaWFibGVzOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBpID0gMTsKKworICAgICAgICAgICAgd2hpbGUgKHZhcl9wdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyX3B0ci0+dHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFNOTVBfTk9TVUNIT0JKRUNUOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFNOTVBfTk9TVUNISU5TVEFOQ0U6CkBAIC0xNjE0LDggKzE3MTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+aW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhcl9wdHIgPSB2YXJfcHRyLT5uZXh0X3ZhcmlhYmxlOworICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2VuZGlmIC8qIHNubXB2MSBzdXBwb3J0ICovCiAgICAgfSAvKiogaWYgYXNwLT5wZHUgKi8KIApAQCAtMTY2MSwxMCArMTc2NiwxNiBAQAogICAgIH0KIAogICAgIGlmICgoc3RhdHVzID09IFNOTVBfRVJSX05PRVJST1IpICYmIChhc3AtPnBkdSkpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieSgoYXNwLT5wZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfU0VUID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUX1NOTVBJTlRPVEFMU0VUVkFSUyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9TTk1QSU5UT1RBTFJFUVZBUlMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfdmFyYmluZHMoYXNwLT5wZHUtPnZhcmlhYmxlcykpOworI2Vsc2UgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieShTVEFUX1NOTVBJTlRPVEFMUkVRVkFSUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X3ZhcmJpbmRzKGFzcC0+cGR1LT52YXJpYWJsZXMpKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFVzZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QKQEAgLTE3MDksNiArMTgyMCw3IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EVU1QX1NFU1NfTElTVAogdm9pZAogZHVtcF9zZXNzX2xpc3Qodm9pZCkKIHsKQEAgLTE3MTYsMTcgKzE4MjgsMTggQEAKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIkRVTVAgYWdlbnRfc2Vzc19saXN0IC0+ICIpKTsKICAgICBmb3IgKGEgPSBhZ2VudF9zZXNzaW9uX2xpc3Q7IGEgIT0gTlVMTDsgYSA9IGEtPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0coKCJzbm1wX2FnZW50IiwgIiUwOHBbc2Vzc2lvbiAlMDhwXSAtPiAiLCBhLCBhLT5zZXNzaW9uKSk7CisgICAgICAgIERFQlVHTVNHKCgic25tcF9hZ2VudCIsICIlOHBbc2Vzc2lvbiAlOHBdIC0+ICIsIGEsIGEtPnNlc3Npb24pKTsKICAgICB9CiAgICAgREVCVUdNU0coKCJzbm1wX2FnZW50IiwgIltOSUxdXG4iKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EVU1QX1NFU1NfTElTVCAqLwogCiB2b2lkCiBuZXRzbm1wX3JlbW92ZV9hbmRfZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb24obmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3ApCiB7CiAgICAgbmV0c25tcF9hZ2VudF9zZXNzaW9uICphLCAqKnByZXZOZXh0ID0gJmFnZW50X3Nlc3Npb25fbGlzdDsKIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlJFTU9WRSBzZXNzaW9uID09ICUwOHBcbiIsIGFzcCkpOworICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlJFTU9WRSBzZXNzaW9uID09ICU4cFxuIiwgYXNwKSk7CiAKICAgICBmb3IgKGEgPSBhZ2VudF9zZXNzaW9uX2xpc3Q7IGEgIT0gTlVMTDsgYSA9ICpwcmV2TmV4dCkgewogICAgICAgICBpZiAoYSA9PSBhc3ApIHsKQEAgLTE3NDgsNiArMTg2MSw3IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRlJFRV9BR0VOVF9TTk1QX1NFU1NJT05fQllfU0VTU0lPTgogdm9pZAogbmV0c25tcF9mcmVlX2FnZW50X3NubXBfc2Vzc2lvbl9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVfcmVxdWVzdCkKQEAgLTE3NTUsNyArMTg2OSw3IEBACiB7CiAgICAgbmV0c25tcF9hZ2VudF9zZXNzaW9uICphLCAqbmV4dCwgKipwcmV2TmV4dCA9ICZhZ2VudF9zZXNzaW9uX2xpc3Q7CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJSRU1PVkUgc2Vzc2lvbiA9PSAlMDhwXG4iLCBzZXNzKSk7CisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiUkVNT1ZFIHNlc3Npb24gPT0gJThwXG4iLCBzZXNzKSk7CiAKICAgICBmb3IgKGEgPSBhZ2VudF9zZXNzaW9uX2xpc3Q7IGEgIT0gTlVMTDsgYSA9IG5leHQpIHsKICAgICAgICAgaWYgKGEtPnNlc3Npb24gPT0gc2VzcykgewpAQCAtMTc2OCw2ICsxODgyLDcgQEAKICAgICAgICAgfQogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZSRUVfQUdFTlRfU05NUF9TRVNTSU9OX0JZX1NFU1NJT04gKi8KIAogLyoqIGhhbmRsZXMgYW4gaW5jb21pbmcgU05NUCBwYWNrZXQgaW50byB0aGUgYWdlbnQgKi8KIGludApAQCAtMTg3NCw3ICsxOTg5LDcgQEAKICAgICAvKgogICAgICAqIGRvbmUgCiAgICAgICovCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiZW5kIG9mIGhhbmRsZV9zbm1wX3BhY2tldCwgYXNwID0gJTA4cFxuIiwKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJlbmQgb2YgaGFuZGxlX3NubXBfcGFja2V0LCBhc3AgPSAlOHBcbiIsCiAgICAgICAgICAgICAgICAgYXNwKSk7CiAgICAgcmV0dXJuIHJjOwogfQpAQCAtMTg4NSw3ICsyMDAwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlICp0cCkKIHsKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIGNhY2hlaWQ7CiAKICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJhZGRfdmJfdG9fY2FjaGUoJThwLCAlZCwgIiwgYXNwLCB2YmNvdW50KSk7CiAgICAgREVCVUdNU0dPSUQoKCJzbm1wX2FnZW50IiwgdmFyYmluZF9wdHItPm5hbWUsCkBAIC0xOTQ5LDcgKzIwNjMsOSBAQAogICAgICAgICAgICAgdmFyYmluZF9wdHItPnR5cGUgPSBTTk1QX0VORE9GTUlCVklFVzsKICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgICAgICAgICB2YXJiaW5kX3B0ci0+dHlwZSA9IFNOTVBfTk9TVUNIT0JKRUNUOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTU4LDYgKzIwNzQsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KICAgICAgICAgfQogICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjYWNoZWlkOworCiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInRwLT5zdGFydCAiKSk7CiAgICAgICAgIERFQlVHTVNHT0lEKCgic25tcF9hZ2VudCIsIHRwLT5zdGFydF9hLCB0cC0+c3RhcnRfbGVuKSk7CiAgICAgICAgIERFQlVHTVNHKCgic25tcF9hZ2VudCIsICIsIHRwLT5lbmQgIikpOwpAQCAtMTk4Myw4ICsyMTAxLDEwIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGZvciBub24tU0VUIG1vZGVzLCBzZXQgdGhlIHR5cGUgdG8gTlVMTCAKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoIU1PREVfSVNfU0VUKGFzcC0+cGR1LT5jb21tYW5kKSkgewotICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTphc3AiLCAiYXNwICVwIHJlcWluZm8gJXAgYXNzaWduZWQgdG8gcmVxdWVzdFxuIiwKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmFzcCIsICJhc3AgJXAgcmVxaW5mbyAlcCBhc3NpZ25lZCB0byByZXF1ZXN0XG4iLAogICAgICAgICAgICAgICAgICAgICBhc3AsIGFzcC0+cmVxaW5mbykpOwogICAgICAgICAgICAgaWYgKHZhcmJpbmRfcHRyLT50eXBlID09IEFTTl9QUklWX0lOQ0xfUkFOR0UpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJ2YXJiaW5kICVkIGlzIGluY2x1c2l2ZVxuIiwKQEAgLTE5OTIsNyArMjExMiw5IEBACiAgICAgICAgICAgICAgICAgcmVxdWVzdC0+aW5jbHVzaXZlID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmJpbmRfcHRyLT50eXBlID0gQVNOX05VTEw7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgLyoKICAgICAgICAgICogcGxhY2UgdGhlbSBpbiBhIGNhY2hlIApAQCAtMjAzNSw3ICsyMTU3LDcgQEAKICAgICAgICAgICAgICAgICBhc3AtPnRyZWVjYWNoZV9sZW4gPQogICAgICAgICAgICAgICAgICAgICAoYXNwLT50cmVlY2FjaGVfbGVuICsgQ0FDSEVfR1JPV19TSVpFKTsKICAgICAgICAgICAgICAgICBhc3AtPnRyZWVjYWNoZSA9Ci0gICAgICAgICAgICAgICAgICAgIHJlYWxsb2MoYXNwLT50cmVlY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX3RyZWVfY2FjaGUgKilyZWFsbG9jKGFzcC0+dHJlZWNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3RyZWVfY2FjaGUpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnRyZWVjYWNoZV9sZW4pOwogICAgICAgICAgICAgICAgIGlmIChhc3AtPnRyZWVjYWNoZSA9PSBOVUxMKQpAQCAtMjE2Myw3ICsyMjg1LDcgQEAKICAgICBpZiAoYXNwLT50cmVlY2FjaGUgPT0gTlVMTCAmJiBhc3AtPnRyZWVjYWNoZV9sZW4gPT0gMCkgewogICAgICAgICBhc3AtPnRyZWVjYWNoZV9sZW4gPSBTTk1QX01BWCgxICsgYXNwLT52YmNvdW50IC8gNCwgMTYpOwogICAgICAgICBhc3AtPnRyZWVjYWNoZSA9Ci0gICAgICAgICAgICBjYWxsb2MoYXNwLT50cmVlY2FjaGVfbGVuLCBzaXplb2YobmV0c25tcF90cmVlX2NhY2hlKSk7CisgICAgICAgICAgICAobmV0c25tcF90cmVlX2NhY2hlICopY2FsbG9jKGFzcC0+dHJlZWNhY2hlX2xlbiwgc2l6ZW9mKG5ldHNubXBfdHJlZV9jYWNoZSkpOwogICAgICAgICBpZiAoYXNwLT50cmVlY2FjaGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQpAQCAtMjIwNCw4ICsyMzI2LDggQEAKICAgICAgICAgICAgICAqIHJlc3VsdCB2ZWN0b3IKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKG1heHJlc3BvbnNlcyA8IDAgfHwKLSAgICAgICAgICAgICAgICBtYXhyZXNwb25zZXMgPiBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCB2YXJiaW5kX2xpc3QgKikpCi0gICAgICAgICAgICAgICAgbWF4cmVzcG9uc2VzID0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgdmFyYmluZF9saXN0ICopOworICAgICAgICAgICAgICAgIG1heHJlc3BvbnNlcyA+IChpbnQpKElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHZhcmJpbmRfbGlzdCAqKSkpCisgICAgICAgICAgICAgICAgbWF4cmVzcG9uc2VzID0gKGludCkoSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgdmFyYmluZF9saXN0ICopKTsKIAogICAgICAgICAgICAgLyogZW5zdXJlIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcGV0aXRpb25zIHdpbGwgZml0IGluIHRoZQogICAgICAgICAgICAgICogcmVzdWx0IHZlY3RvcgpAQCAtMjMxOSw2ICsyNDQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBTTk1QX01TR19TRVQ6CiAgICAgICAgICAgICB2aWV3ID0gaW5fYV92aWV3KHZhcmJpbmRfcHRyLT5uYW1lLCAmdmFyYmluZF9wdHItPm5hbWVfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnBkdSwgdmFyYmluZF9wdHItPnR5cGUpOwpAQCAtMjMyNyw2ICsyNDUwLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9BQ0NFU1M7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CiAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKQEAgLTIzNzUsNiArMjQ5OSwxMCBAQAogICAgIGFzcC0+dHJlZWNhY2hlID0KICAgICAgICAgKG5ldHNubXBfdHJlZV9jYWNoZSAqKSBjYWxsb2MoYXNwLT50cmVlY2FjaGVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF90cmVlX2NhY2hlKSk7CisKKyAgICBpZiAoYXNwLT50cmVlY2FjaGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKwogICAgIGFzcC0+dHJlZWNhY2hlX251bSA9IC0xOwogICAgIGlmIChhc3AtPmNhY2hlX3N0b3JlKSB7CiAgICAgICAgIG5ldHNubXBfZnJlZV9jYWNoZW1hcChhc3AtPmNhY2hlX3N0b3JlKTsKQEAgLTIzOTMsMTAgKzI1MjEsNyBAQAogICAgICAgICAgICAgaWYgKCFuZXRzbm1wX2FkZF92YXJiaW5kX3RvX2NhY2hlKGFzcCwgYXNwLT5yZXF1ZXN0c1tpXS5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnJlcXVlc3RzW2ldLnJlcXVlc3R2YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnJlcXVlc3RzW2ldLnN1YnRyZWUtPm5leHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZF90cmVlY2FjaGUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZF90cmVlY2FjaGUgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoYXNwLT5yZXF1ZXN0c1tpXS5yZXF1ZXN0dmItPnR5cGUgPT0gQVNOX1BSSVZfUkVUUlkpIHsKICAgICAgICAgICAgIC8qCkBAIC0yNDA2LDE3ICsyNTMxLDEyIEBACiAgICAgICAgICAgICBpZiAoIW5ldHNubXBfYWRkX3ZhcmJpbmRfdG9fY2FjaGUoYXNwLCBhc3AtPnJlcXVlc3RzW2ldLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+cmVxdWVzdHNbaV0ucmVxdWVzdHZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+cmVxdWVzdHNbaV0uc3VidHJlZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkX3RyZWVjYWNoZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkX3RyZWVjYWNoZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvbGRfdHJlZWNhY2hlICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKQEAgLTI0MjksNiArMjU0OSw3IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1NVQlRSRUVfQ0FDSEUKIHZvaWQKIG5ldHNubXBfZGVsZXRlX3N1YnRyZWVfY2FjaGUobmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3ApCiB7CkBAIC0yNDQxLDcgKzI1NjIsOSBAQAogICAgICAgICBhc3AtPnRyZWVjYWNoZV9udW0tLTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfU1VCVFJFRV9DQUNIRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfQUxMX1JFUVVFU1RTX0VSUk9SCiAvKgogICogY2hlY2sgYWxsIHJlcXVlc3RzIGZvciBlcnJvcnMKICAqCkBAIC0yNDcyLDcgKzI1OTUsOSBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19BTExfUkVRVUVTVFNfRVJST1IgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1JFUVVFU1RTX0VSUk9SCiBpbnQKIG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfZXJyb3IobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewpAQCAtMjQ4NSw2ICsyNjEwLDcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19SRVFVRVNUU19FUlJPUiAqLwogCiBpbnQKIG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfc3RhdHVzKG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwLApAQCAtMjU2MCw2ICsyNjg2LDcgQEAKICAgICAgICAgICogZXJyb3JzKS4KICAgICAgICAgICovCiAgICAgICAgIHN3aXRjaCAoYXNwLT5tb2RlKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICAgICAgICAgIHJldHN0YXR1cyA9IG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfc3RhdHVzKGFzcCwKIAkJCQkJCSAgICAgIGFzcC0+dHJlZWNhY2hlW2ldLgpAQCAtMjU3Myw2ICsyNzAwLDcgQEAKIAkJCQkJCSAgICAgIHJlcXVlc3RzX2JlZ2luLAogCQkJCQkJICAgICAgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0c3RhdHVzID0gbmV0c25tcF9jaGVja19yZXF1ZXN0c19zdGF0dXMoYXNwLApAQCAtMjY4Myw2ICsyODExLDcgQEAKICAgICAgICAgICogaWYgdGhlIHRvcCByZXF1ZXN0IGlzIGEgc2V0LCBkb24ndCBwb3AgaXQKICAgICAgICAgICogb2ZmIGlmIHRoZXJlIGFyZSBkZWxlZ2F0ZWQgcmVxdWVzdHMKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoKG5ldHNubXBfYWdlbnRfcXVldWVkX2xpc3QtPnBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19TRVQpICYmCiAgICAgICAgICAgICAoYWdlbnRfZGVsZWdhdGVkX2xpc3QpKSB7CiAKQEAgLTI2OTAsOSArMjgxOSwxMCBAQAogCiAgICAgICAgICAgICBuZXRzbm1wX3Byb2Nlc3Npbmdfc2V0ID0gbmV0c25tcF9hZ2VudF9xdWV1ZWRfbGlzdDsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlNFVCByZXF1ZXN0IHJlbWFpbnMgcXVldWVkIHdoaWxlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZWxlZ2F0ZWQgcmVxdWVzdHMgZmluaXNoLCBhc3AgPSAlMDhwXG4iLCBhc3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZWxlZ2F0ZWQgcmVxdWVzdHMgZmluaXNoLCBhc3AgPSAlOHBcbiIsIGFzcCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAvKgogICAgICAgICAgKiBwb3AgdGhlIGZpcnN0IHJlcXVlc3QgYW5kIHByb2Nlc3MgaXQKQEAgLTI3MDAsNyArMjgzMCw3IEBACiAgICAgICAgIGFzcCA9IG5ldHNubXBfYWdlbnRfcXVldWVkX2xpc3Q7CiAgICAgICAgIG5ldHNubXBfYWdlbnRfcXVldWVkX2xpc3QgPSBhc3AtPm5leHQ7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwKLSAgICAgICAgICAgICAgICAgICAgInByb2Nlc3NpbmcgcXVldWVkIHJlcXVlc3QsIGFzcCA9ICUwOHBcbiIsIGFzcCkpOworICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2luZyBxdWV1ZWQgcmVxdWVzdCwgYXNwID0gJThwXG4iLCBhc3ApKTsKIAogICAgICAgICBuZXRzbm1wX2hhbmRsZV9yZXF1ZXN0KGFzcCwgYXNwLT5zdGF0dXMpOwogCkBAIC0yNzQzLDcgKzI4NzMsNyBAQAogewogICAgIGludCAgICAgICAgICAgICBzdGF0dXMgPSBTTk1QX0VSUl9OT0VSUk9SOwogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAicHJvY2Vzc2luZyBkZWxlZ2F0ZWQgcmVxdWVzdCwgYXNwID0gJTA4cFxuIiwKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJwcm9jZXNzaW5nIGRlbGVnYXRlZCByZXF1ZXN0LCBhc3AgPSAlOHBcbiIsCiAgICAgICAgICAgICAgICAgYXNwKSk7CiAKICAgICBzd2l0Y2ggKGFzcC0+bW9kZSkgewpAQCAtMjc2NCw2ICsyODk0LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICAgICAgbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfc3RhdHVzKGFzcCwgU05NUF9FUlJfQ09NTUlURkFJTEVEKTsKICAgICAgICAgZ290byBzZXR0b3A7CkBAIC0yNzk5LDYgKzI5MzAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTI5OTIsOSArMzEyNCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsgICAgICAvKiBzaG91bGQgbmV2ZXIgcmVhbGx5IGhhcHBlbiAqLwogICAgICAgICB9CiAgICAgfQorICAgIGlmICghbmV0c25tcF9ydW5uaW5nKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBoYW5kbGVfc2V0KG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwKQogewpAQCAtMzA5Miw2ICszMjI4LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIGFzcC0+c3RhdHVzOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBpbnQKIG5ldHNubXBfaGFuZGxlX3JlcXVlc3QobmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3AsIGludCBzdGF0dXMpCkBAIC0zMTEyLDEzICszMjQ5LDE0IEBACiAgICAgICAgICAgICBuZXRzbm1wX2FkZF9xdWV1ZWQoYXNwKTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0IHF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIHNldCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgImFzcCA9ICUwOHBcbiIsIGFzcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgImFzcCA9ICU4cFxuIiwgYXNwKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIGZvciBzZXQgcmVxdWVzdAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmIChhc3AtPnBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19TRVQpIHsKICAgICAgICAgICAgIG5ldHNubXBfcHJvY2Vzc2luZ19zZXQgPSBhc3A7CiAKQEAgLTMxMjgsMTIgKzMyNjYsMTMgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKGFnZW50X2RlbGVnYXRlZF9saXN0KSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiU0VUIHJlcXVlc3QgcXVldWVkIHdoaWxlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZWdhdGVkIHJlcXVlc3RzIGZpbmlzaCwgYXNwID0gJTA4cFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZWdhdGVkIHJlcXVlc3RzIGZpbmlzaCwgYXNwID0gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcCkpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfYWRkX3F1ZXVlZChhc3ApOwogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgLyoKQEAgLTMxODUsNiArMzMyNCw3IEBACiAgICAgICovCiAgICAgc3dpdGNoIChhc3AtPnBkdS0+Y29tbWFuZCkgewogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX0FDVElPTjoKICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9DT01NSVQ6CkBAIC0zMTk0LDYgKzMzMzQsNyBAQAogICAgICAgICBpZiAoc3RhdHVzICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKQEAgLTMyMTcsOCArMzM1OCwxMCBAQAogICAgICAgICAgKiBmYWxsIHRocm91Z2ggCiAgICAgICAgICAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOOgogICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzcC0+dmJjb3VudCA9IGNvdW50X3ZhcmJpbmRzKGFzcC0+cGR1LT52YXJpYWJsZXMpOwogICAgICAgICBpZiAoYXNwLT52YmNvdW50KSAvKiBlZmVuY2UgZG9lc24ndCBsaWtlIDAgc2l6ZSBhbGxvY3MgKi8KQEAgLTMzMDgsNiArMzQ1MSw3IEBACiAgICAgICAgIHN0YXR1cyA9IGhhbmRsZV9nZXRuZXh0X2xvb3AoYXNwKTsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19TRVQ6CiAjaWZkZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKQEAgLTMzMzYsNiArMzQ4MCw3IEBACiAgICAgICAgICAqIGFzcCByZWxhdGVkIGNhY2hlIGlzIHNhdmVkIGluIGNsZWFudXAgCiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6CiAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkdFVFJFU1BPTlNFUyk7CkBAIC0zMzg1LDcgKzM1MzAsNyBAQAogICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CiAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnR5cGUgPSBlcnJvcl92YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFRoZXNlIGFyZSB0ZWNobmljYWxseSBpbGxlZ2FsIHRvIHNldCBieSB0aGUKQEAgLTMzOTgsOSArMzU0MywxNSBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVkFMVUU7CiAgICAgICAgICAgICAgKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTE6CisgICAgICAgICAgICByZXF1ZXN0LT5zdGF0dXMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJlcXVlc3QtPnN0YXR1cyA9IFNOTVBfRVJSX05PU1VDSE5BTUU7ICAgICAgLyogV1dXOiBjb3JyZWN0PyAqLwotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIG5ldmVyIGdldCBoZXJlICovCiAKQEAgLTM0MjEsNyArMzU3Miw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJlcXVlc3QtPnN0YXR1cyA9IGVycm9yX3ZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQpAQCAtMzQ0MCw2ICszNTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3ZhbHVlKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFUVVFU1RfU0VUX0VSUk9SX0lEWAogLyoqIHNldCBlcnJvciBmb3IgYSByZXF1ZXN0IHdpdGhpbiBhIHJlcXVlc3QgbGlzdAogICogQHBhcmFtIHJlcXVlc3QgaGVhZCBvZiB0aGUgcmVxdWVzdCBsaXN0CiAgKiBAcGFyYW0gZXJyb3JfdmFsdWUgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3QKQEAgLTM0NjcsNiArMzYxOSw3IEBACiAgICAgcmV0dXJuIF9yZXF1ZXN0X3NldF9lcnJvcihyZXEsIHJlcXVlc3QtPmFnZW50X3JlcV9pbmZvLT5tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfdmFsdWUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVRVUVTVF9TRVRfRVJST1JfSURYICovCiAKIC8qKiBzZXQgZXJyb3IgZm9yIGFsbCByZXF1ZXN0cwogICogQHBhcmFtIHJlcXVlc3RzIHJlcXVlc3QgbGlzdApAQCAtMzUwMSwxMDMgKzM2NTQsMTMxIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiAnc3lzVXBUaW1lJyBhdCB0aGUgZ2l2ZW4gbWFya2VyIAotICAgICAgICAgICAgICAgICAqLworLyoqCisgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwbSBhbmQgdGhlIGFnZW50IHN0YXJ0IHRpbWUgaW4gaHVuZHJlZHRocyBvZgorICogYSBzZWNvbmQuCisgKiBcZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gbmV3IGNvZGUuCisgKgorICogQHBhcmFtW2luXSBwbSBBbiBhYnNvbHV0ZSB0aW1lIGFzIGUuZy4gcmVwb3J0ZWQgYnkgZ2V0dGltZW9mZGF5KCkuCisgKi8KIHVfbG9uZwogbmV0c25tcF9tYXJrZXJfdXB0aW1lKG1hcmtlcl90IHBtKQogewogICAgIHVfbG9uZyAgICAgICAgICByZXM7Ci0gICAgbWFya2VyX3QgICAgICAgIHN0YXJ0ID0gKG1hcmtlcl90KSAmIHN0YXJ0dGltZTsKKyAgICBjb25zdF9tYXJrZXJfdCAgc3RhcnQgPSBuZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKTsKIAogICAgIHJlcyA9IHVhdGltZV9oZGlmZihzdGFydCwgcG0pOwotICAgIHJldHVybiByZXM7ICAgICAgICAgICAgICAgICAvKiBhdGltZV9kaWZmIHdvcmtzIGluIG1zZWMsIG5vdCBjc2VjICovCisgICAgcmV0dXJuIHJlczsKIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0cnVjdCB0aW1ldmFsIGVxdWl2YWxlbnRzIG9mIHRoZXNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioKKyAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR2IGFuZCB0aGUgYWdlbnQgc3RhcnQgdGltZSBpbiBodW5kcmVkdGhzIG9mCisgKiBhIHNlY29uZC4KKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkgaW5zdGVhZC4KKyAqCisgKiBAcGFyYW1baW5dIHR2IEFuIGFic29sdXRlIHRpbWUgYXMgZS5nLiByZXBvcnRlZCBieSBnZXR0aW1lb2ZkYXkoKS4KKyAqLwogdV9sb25nCiBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKHN0cnVjdCB0aW1ldmFsICogdHYpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfbWFya2VyX3VwdGltZSgobWFya2VyX3QpIHR2KTsKIH0KIAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mICdzeXNVcFRpbWUnIAotICAgICAgICAgICAgICAgICAqLworCitzdHJ1Y3QgdGltZXZhbCAgc3RhcnR0aW1lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZU07CisKKy8qKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgaW4gd2hpY2ggdGhlIE5ldC1TTk1QIHN0YXJ0IHRpbWUgaGFzCisgKiBiZWVuIHN0b3JlZC4KKyAqCisgKiBAbm90ZSBVc2UgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSgpIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZAorICogICB0byBrbm93IGhvdyBtdWNoIHRpbWUgZWxhcHNlZCBzaW5jZSBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoKSBoYXMgYmVlbgorICogICBjYWxsZWQuCisgKi8KK2NvbnN0X21hcmtlcl90ICAgICAgICAKK25ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSh2b2lkKQoreworICAgIHJldHVybiAmc3RhcnR0aW1lOworfQorCisvKioKKyAqIFJlcG9ydCB0aGUgdGltZSB0aGF0IGVsYXBzZWQgc2luY2UgdGhlIGFnZW50IHN0YXJ0IHRpbWUgaW4gaHVuZHJlZHRocyBvZiBhCisgKiBzZWNvbmQuCisgKgorICogQHNlZSBTZWUgYWxzbyBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoKS4KKyAqLwordWludDY0X3QKK25ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUodm9pZCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCBub3csIGRlbHRhOworCisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOworICAgIE5FVFNOTVBfVElNRVJTVUIoJm5vdywgJnN0YXJ0dGltZU0sICZkZWx0YSk7CisgICAgcmV0dXJuIGRlbHRhLnR2X3NlYyAqICh1aW50NjRfdCkxMDAgKyBkZWx0YS50dl91c2VjIC8gMTAwMDA7Cit9CisKKy8qKgorICogU2V0IHRoZSB0aW1lIGF0IHdoaWNoIE5ldC1TTk1QIHN0YXJ0ZWQgZWl0aGVyIHRvIHRoZSBjdXJyZW50IHRpbWUKKyAqIChpZiBzID09IE5VTEwpIG9yIHRvICpzIChpZiBzIGlzIG5vdCBOVUxMKS4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZSgpLgorICovCit2b2lkICAgICAgICAgICAgCituZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUobWFya2VyX3QgcykKK3sKKyAgICBpZiAocykgeworICAgICAgICBzdHJ1Y3QgdGltZXZhbCBub3dBLCBub3dNOworCisgICAgICAgIHN0YXJ0dGltZSA9ICooc3RydWN0IHRpbWV2YWwqKXM7CisgICAgICAgIGdldHRpbWVvZmRheSgmbm93QSwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93TSk7CisgICAgICAgIE5FVFNOTVBfVElNRVJTVUIoJnN0YXJ0dGltZSwgJm5vd0EsICZzdGFydHRpbWVNKTsKKyAgICAgICAgTkVUU05NUF9USU1FUkFERCgmc3RhcnR0aW1lTSwgJm5vd00sICZzdGFydHRpbWVNKTsKKyAgICB9IGVsc2UgeworICAgICAgICBnZXR0aW1lb2ZkYXkoJnN0YXJ0dGltZSwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmc3RhcnR0aW1lTSk7CisgICAgfQorfQorCisKKy8qKgorICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mICdzeXNVcFRpbWUnIAorICovCiB1X2xvbmcKIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSh2b2lkKQogewotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0gICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworICAgIHN0cnVjdCB0aW1ldmFsIG5vdywgZGVsdGE7CiAKLSAgICByZXR1cm4gbmV0c25tcF90aW1ldmFsX3VwdGltZSgmbm93KTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CisgICAgTkVUU05NUF9USU1FUlNVQigmbm93LCAmc3RhcnR0aW1lTSwgJmRlbHRhKTsKKyAgICByZXR1cm4gZGVsdGEudHZfc2VjICogMTAwVUwgKyBkZWx0YS50dl91c2VjIC8gMTAwMDA7CiB9CiAKLQotCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2FnZW50X2FkZF9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRVRfQUdFTlRfVVBUSU1FCisvKioKKyAqIFNldCB0aGUgc3RhcnQgdGltZSBmcm9tIHdoaWNoICdzeXNVcFRpbWUnIGlzIGNvbXB1dGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaHNlYyBOZXcgc3lzVXBUaW1lIGluIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQuCisgKgorICogQHNlZSBTZWUgYWxzbyBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoKS4KKyAqLwordm9pZAorbmV0c25tcF9zZXRfYWdlbnRfdXB0aW1lKHVfbG9uZyBoc2VjKQogewotICAgIGlmIChhcmkpIHsKLQlpZiAoYXJpLT5hZ2VudF9kYXRhKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEoJmFyaS0+YWdlbnRfZGF0YSwgbm9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhcmktPmFnZW50X2RhdGEgPSBub2RlOwotCX0KLSAgICB9Ci19CisgICAgc3RydWN0IHRpbWV2YWwgIG5vd0EsIG5vd007CisgICAgc3RydWN0IHRpbWV2YWwgIG5ld191cHRpbWU7CiAKLU5FVFNOTVBfSU5MSU5FIGludAotbmV0c25tcF9hZ2VudF9yZW1vdmVfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIG5hbWUpCi17Ci0gICAgaWYgKChOVUxMID09IGFyaSkgfHwgKE5VTEwgPT0gYXJpLT5hZ2VudF9kYXRhKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICByZXR1cm4gbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZhcmktPmFnZW50X2RhdGEsIG5hbWUpOworICAgIGdldHRpbWVvZmRheSgmbm93QSwgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3dNKTsKKyAgICBuZXdfdXB0aW1lLnR2X3NlYyA9IGhzZWMgLyAxMDA7CisgICAgbmV3X3VwdGltZS50dl91c2VjID0gKHVpbnQzMl90KShoc2VjIC0gbmV3X3VwdGltZS50dl9zZWMgKiAxMDApICogMTAwMDBMOworICAgIE5FVFNOTVBfVElNRVJTVUIoJm5vd0EsICZuZXdfdXB0aW1lLCAmc3RhcnR0aW1lKTsKKyAgICBORVRTTk1QX1RJTUVSU1VCKCZub3dNLCAmbmV3X3VwdGltZSwgJnN0YXJ0dGltZU0pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VUX0FHRU5UX1VQVElNRSAqLwogCi1ORVRTTk1QX0lOTElORSB2b2lkICAgICoKLW5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKGFyaSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF9nZXRfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSwgbmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXQobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKLXsKLSAgICBpZiAoYXJpKSB7Ci0gICAgICAgIG5ldHNubXBfZnJlZV9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKLSAgICB9Ci19Ci0KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldHMobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKLXsKLSAgICBpZiAoYXJpKSB7Ci0gICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7Ci0gICAgfQotfQotCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2ZyZWVfYWdlbnRfcmVxdWVzdF9pbmZvKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCi17Ci0gICAgaWYgKGFyaSkgewotICAgICAgICBpZiAoYXJpLT5hZ2VudF9kYXRhKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOwotCX0KLSAgICAgICAgU05NUF9GUkVFKGFyaSk7Ci0gICAgfQotfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM2NDcsNiArMzgyOCw3IEBACiAgKiBAcGFyYW0gZXJyb3JfdmFsdWUgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3RzCiAgKiBAcmV0dXJuIGVycm9yX3ZhbHVlCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRVRfQUxMX1JFUVVFU1RTX0VSUk9SCiBpbnQKIG5ldHNubXBfc2V0X2FsbF9yZXF1ZXN0c19lcnJvcihuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMsCkBAIC0zNjU1LDQgKzM4MzcsNSBAQAogICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBlcnJvcl92YWx1ZSk7CiAgICAgcmV0dXJuIGVycm9yX3ZhbHVlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VUX0FMTF9SRVFVRVNUU19FUlJPUiAqLwogLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9zbm1wX3BlcmwuYyBiL2FnZW50L3NubXBfcGVybC5jCmluZGV4IDQ4MjFhZDMuLjQ4ZDk2OTUgMTAwNjQ0Ci0tLSBhL2FnZW50L3NubXBfcGVybC5jCisrKyBiL2FnZW50L3NubXBfcGVybC5jCkBAIC0yOSwxMCArMjksMTQgQEAKIHZvaWQKIG1heWJlX3NvdXJjZV9wZXJsX3N0YXJ0dXAodm9pZCkKIHsKLSAgICBjb25zdCBjaGFyICAgICAqZW1iZWRhcmdzW10gPSB7ICIiLCAiIiB9OworICAgIGludCAgICAgICAgICAgICBhcmdjOworICAgIGNoYXIgICAgICAgICAgKiphcmd2OworICAgIGNoYXIgICAgICAgICAgKiplbnY7CisgICAgY2hhciAgICAgICAgICAgKmVtYmVkYXJnc1tdID0geyBOVUxMLCBOVUxMIH07CiAgICAgY29uc3QgY2hhciAgICAgKnBlcmxfaW5pdF9maWxlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAJCQkJCQkJICAgTkVUU05NUF9EU19BR0VOVF9QRVJMX0lOSVRfRklMRSk7CiAgICAgY2hhciAgICAgICAgICAgIGluaXRfZmlsZVtTTk1QX01BWEJVRl07CisgICAgaW50ICAgICAgICAgICAgIHJlczsKIAogICAgIHN0YXRpYyBpbnQgICAgICBoYXZlX2RvbmVfaW5pdCA9IDA7CiAKQEAgLTQwLDMxICs0NCw1OCBAQAogICAgICAgICByZXR1cm47CiAgICAgaGF2ZV9kb25lX2luaXQgPSAxOwogCisgICAgZW1iZWRhcmdzWzBdID0gc3RyZHVwKCIiKTsKICAgICBpZiAoIXBlcmxfaW5pdF9maWxlKSB7CiAgICAgICAgIHNucHJpbnRmKGluaXRfZmlsZSwgc2l6ZW9mKGluaXRfZmlsZSkgLSAxLAogICAgICAgICAgICAgICAgICAiJXMvJXMiLCBTTk1QU0hBUkVQQVRILCAic25tcF9wZXJsLnBsIik7CiAgICAgICAgIHBlcmxfaW5pdF9maWxlID0gaW5pdF9maWxlOwogICAgIH0KLSAgICBlbWJlZGFyZ3NbMV0gPSBwZXJsX2luaXRfZmlsZTsKKyAgICBlbWJlZGFyZ3NbMV0gPSBzdHJkdXAocGVybF9pbml0X2ZpbGUpOwogCiAgICAgREVCVUdNU0dUTCgoInBlcmwiLCAiaW5pdGlhbGl6aW5nIHBlcmwgKCVzKVxuIiwgZW1iZWRhcmdzWzFdKSk7CisgICAgYXJnYyA9IDA7CisgICAgYXJndiA9IE5VTEw7CisgICAgZW52ID0gTlVMTDsKKyAgICBQRVJMX1NZU19JTklUMygmYXJnYywgJmFyZ3YsICZlbnYpOwogICAgIG15X3BlcmwgPSBwZXJsX2FsbG9jKCk7Ci0gICAgaWYgKCFteV9wZXJsKQorICAgIGlmICghbXlfcGVybCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZW1iZWRkZWQgcGVybCBzdXBwb3J0IGZhaWxlZCB0byBpbml0aWFsaXplIChwZXJsX2FsbG9jKCkpXG4iKTsKICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICB9CiAKICAgICBwZXJsX2NvbnN0cnVjdChteV9wZXJsKTsKLSAgICBpZiAocGVybF9wYXJzZShteV9wZXJsLCB4c19pbml0LCAyLCBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICoqLCBlbWJlZGFyZ3MpLCBOVUxMKSkKLSAgICAgICAgZ290byBiYWlsX291dDsKIAotICAgIGlmIChwZXJsX3J1bihteV9wZXJsKSkKKyNpZmRlZiBQRVJMX0VYSVRfREVTVFJVQ1RfRU5ECisgICAgUExfZXhpdF9mbGFncyB8PSBQRVJMX0VYSVRfREVTVFJVQ1RfRU5EOworI2VuZGlmCisKKyAgICByZXMgPSBwZXJsX3BhcnNlKG15X3BlcmwsIHhzX2luaXQsIDIsIGVtYmVkYXJncywgTlVMTCk7CisgICAgaWYgKHJlcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZW1iZWRkZWQgcGVybCBzdXBwb3J0IGZhaWxlZCB0byBpbml0aWFsaXplIChwZXJsX3BhcnNlKCVzKSIKKyAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCAlZClcbiIsIGVtYmVkYXJnc1sxXSwgcmVzKTsKICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICB9CisKKyAgICByZXMgPSBwZXJsX3J1bihteV9wZXJsKTsKKyAgICBpZiAocmVzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlbWJlZGRlZCBwZXJsIHN1cHBvcnQgZmFpbGVkIHRvIGluaXRpYWxpemUgKHBlcmxfcnVuKCkiCisgICAgICAgICAgICAgICAgICIgcmV0dXJuZWQgJWQpXG4iLCByZXMpOworICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgIH0KKworICAgIGZyZWUoZW1iZWRhcmdzWzBdKTsKKyAgICBmcmVlKGVtYmVkYXJnc1sxXSk7CiAKICAgICBERUJVR01TR1RMKCgicGVybCIsICJkb25lIGluaXRpYWxpemluZyBwZXJsXG4iKSk7CiAKICAgICByZXR1cm47CiAKICAgYmFpbF9vdXQ6Ci0gICAgc25tcF9sb2coTE9HX0VSUiwgImVtYmVkZGVkIHBlcmwgc3VwcG9ydCBmYWlsZWQgdG8gaW5pdGlhbGl6ZVxuIik7CisgICAgZnJlZShlbWJlZGFyZ3NbMF0pOworICAgIGZyZWUoZW1iZWRhcmdzWzFdKTsKICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgTkVUU05NUF9EU19BR0VOVF9ESVNBQkxFX1BFUkwsIDEpOwogICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FnZW50L3NubXBfdmFycy5jIGIvYWdlbnQvc25tcF92YXJzLmMKaW5kZXggYWFmOTE3Zi4uMmY5ZTZlZiAxMDA2NDQKLS0tIGEvYWdlbnQvc25tcF92YXJzLmMKKysrIGIvYWdlbnQvc25tcF92YXJzLmMKQEAgLTc3LDExICs3Nyw3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtOTAsOSArODYsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSMgaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xNDMsNiArMTM2LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CiAjaW5jbHVkZSAia2VybmVsLmgiCiAKICNpbmNsdWRlICJtaWJncm91cC9zdHJ1Y3QuaCIKQEAgLTE1Myw2ICsxNDcsMTIgQEAKICNpbmNsdWRlICJhZ2VudF9tb2R1bGVfaW5jbHVkZXMuaCIKICNpbmNsdWRlICJuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oIgogCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJzbm1wX3BlcmwuaCIKIAogI2lmbmRlZiAgTUlOCkBAIC0yMzYsOCArMjM2LDYgQEAKIHVfY2hhciAgICAgICAgICByZXR1cm5fYnVmWzI1Nl07ICAgICAgICAvKiBuZWUgNjQgKi8KICNlbmRpZgogCi1zdHJ1Y3QgdGltZXZhbCAgc3RhcnR0aW1lOwotCiBpbnQgICAgICAgICAgICAgY2FsbGJhY2tfbWFzdGVyX251bSA9IC0xOwogCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOCkBAIC0yODUsOSArMjgzLDcgQEAKICAgICAvKgogICAgICAqIGdldCBjdXJyZW50IHRpbWUgKGllLCB0aGUgdGltZSB0aGUgYWdlbnQgc3RhcnRlZCkgCiAgICAgICovCi0gICAgZ2V0dGltZW9mZGF5KCZzdGFydHRpbWUsIE5VTEwpOwotICAgIHN0YXJ0dGltZS50dl9zZWMtLTsKLSAgICBzdGFydHRpbWUudHZfdXNlYyArPSAxMDAwMDAwTDsKKyAgICBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoTlVMTCk7CiAKICAgICAvKgogICAgICAqIHdlIGhhbmRsZSBhbGFybSBzaWduYWxzIG91cnNlbHZlcyBpbiB0aGUgc2VsZWN0IGxvb3AgCkBAIC0zMTIsMTYgKzMwOCwxOSBAQAogICAgIG5ldHNubXBfaW5pdF9oZWxwZXJzKCk7CiAgICAgaW5pdF90cmFwcygpOwogICAgIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCgpOworICAgIGluaXRfYWdlbnRfc3lzT1JUYWJsZSgpOwogCiAjaWYgZGVmaW5lZChVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFKSB8fCBkZWZpbmVkKFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFKQogICAgIC8qCiAgICAgICogaW5pdGlhbGl6ZSBhZ2VudHggY29uZmlncwogICAgICAqLwogICAgIGFnZW50eF9jb25maWdfaW5pdCgpOworI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkKICAgICBpZihuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUpID09IFNVQl9BR0VOVCkKICAgICAgICAgc3ViYWdlbnRfaW5pdCgpOwogI2VuZGlmCisjZW5kaWYKIAogICAgIC8qCiAgICAgICogUmVnaXN0ZXIgY29uZmlndXJhdGlvbiB0b2tlbnMgZnJvbSB0cmFuc3BvcnQgbW9kdWxlcy4gIApAQCAtMzQwLDYgKzMzOSwxMSBAQAogICAgIGluaXRfcGVybCgpOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCisgICAgLyoqIGluaXQgc2VjbmFtZSBtYXBwaW5nICovCisgICAgbmV0c25tcF9jZXJ0c19hZ2VudF9pbml0KCk7CisjZW5kaWYKKwogI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKICAgICAvKgogICAgICAqIGRvbid0IGluaXQgYWdlbnQgbW9kdWxlcyBmb3IgYSBzdWItYWdlbnQKQEAgLTM2NiwxMiArMzcwLDE2IEBACiAgICAgbmV0c25tcF9jbGVhcl9jYWxsYmFja19saXN0KCk7CiAgICAgbmV0c25tcF9jbGVhcl90ZG9tYWluX2xpc3QoKTsKICAgICBuZXRzbm1wX2NsZWFyX2hhbmRsZXJfbGlzdCgpOworICAgIHNodXRkb3duX2FnZW50X3N5c09SVGFibGUoKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9mcmVlX2xpc3QoKTsKICAgICBjbGVhcl9zZWNfbW9kKCk7CiAgICAgY2xlYXJfc25tcF9lbnVtKCk7CiAgICAgY2xlYXJfY2FsbGJhY2soKTsKLSAgICBjbGVhcl91c2VyX2xpc3QoKTsKKyAgICBzaHV0ZG93bl9zZWNtb2QoKTsKICAgICBuZXRzbm1wX2FkZHJjYWNoZV9kZXN0cm95KCk7CisjaWZkZWYgTkVUU05NUF9DQU5fVVNFX05MSVNUCisgICAgZnJlZV9rbWVtKCk7CisjZW5kaWYKIAogICAgIGRvbmVfaW5pdF9hZ2VudCA9IDA7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9zbm1wZC5jIGIvYWdlbnQvc25tcGQuYwppbmRleCBmNDY3NTkyLi5jZmM3YmNlIDEwMDY0NAotLS0gYS9hZ2VudC9zbm1wZC5jCisrKyBiL2FnZW50L3NubXBkLmMKQEAgLTM2LDYgKzM2LDggQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKICNpZiBIQVZFX0lPX0gKICNpbmNsdWRlIDxpby5oPgpAQCAtNjEsMTEgKzYzLDcgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzksOCArNzcsNiBAQAogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZWxpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KICNlbmRpZgogI2lmIEhBVkVfTkVUX0lGX0gKICNpbmNsdWRlIDxuZXQvaWYuaD4KQEAgLTExNiw2ICsxMTIsOSBAQAogI2lmIEhBVkVfR1JQX0gKICNpbmNsdWRlIDxncnAuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfQ1JUREJHX0gKKyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNlbmRpZgogCiAjaWZuZGVmIFBBVEhfTUFYCiAjIGlmZGVmIF9QT1NJWF9QQVRIX01BWApAQCAtMTM4LDIxICsxMzcsMjAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaD4KIAogI2luY2x1ZGUgIm0ybS5oIgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oPgogCiAjaW5jbHVkZSAic25tcGQuaCIKLSNpbmNsdWRlICJtaWJncm91cC9zdHJ1Y3QuaCIKLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgogCi0jaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+Ci0jaW5jbHVkZSAibWliX21vZHVsZV9pbmNsdWRlcy5oIgogCiAvKgogICogSW5jbHVkZSB3aW5zZXJ2aWNlLmggdG8gc3VwcG9ydCBXaW5kb3dzIFNlcnZpY2UKQEAgLTE2Niw2ICsxNjQsMTAgQEAKIAogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV93YW50KGxvZ2dpbmdfZmlsZSkKK25ldHNubXBfZmVhdHVyZV93YW50KGxvZ2dpbmdfc3RkaW8pCituZXRzbm1wX2ZlYXR1cmVfd2FudChsb2dnaW5nX3N5c2xvZykKKwogLyoKICAqIEdsb2JhbHMuCiAgKi8KQEAgLTE3Niw3ICsxNzgsNyBAQAogI2RlZmluZSBUSU1FVElDSyAgICAgICAgIDUwMDAwMEwKIAogaW50ICAgICAgICAgICAgIHNubXBfZHVtcF9wYWNrZXQ7Ci1pbnQgICAgICAgICAgICAgcmVjb25maWcgPSAwOworc3RhdGljIGludCAgICAgIHJlY29uZmlnID0gMDsKIGludCAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19EQUVNT047CiAKICNpZmRlZiBXSU4zMlNFUlZJQ0UKQEAgLTE5Myw5ICsxOTUsMTEgQEAKIGNvbnN0IGNoYXIgICAgICphcHBfbmFtZSA9ICJzbm1wZCI7CiAKIGV4dGVybiBpbnQgICAgICBuZXRzbm1wX3J1bm5pbmc7CisjaWZkZWYgVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRQogZXh0ZXJuIGNoYXIgICAqKmFyZ3ZyZXN0YXJ0cDsKIGV4dGVybiBjaGFyICAgICphcmd2cmVzdGFydDsKIGV4dGVybiBjaGFyICAgICphcmd2cmVzdGFydG5hbWU7CisjZW5kaWYgLyogVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRSAqLwogCiAjaWZkZWYgVVNJTkdfU01VWF9NT0RVTEUKICNpbmNsdWRlIDxtaWJncm91cC9zbXV4L3NtdXguaD4KQEAgLTI2MCw4MSArMjY0LDkyIEBACiB1c2FnZShjaGFyICpwcm9nKQogewogI2lmZGVmIFdJTjMyU0VSVklDRQotICAgIHByaW50ZigiXG5Vc2FnZTogICVzIFstcmVnaXN0ZXJdIFstcXVpZXRdIFtPUFRJT05TXSBbTElTVEVOSU5HIEFERFJFU1NFU10iLAotICAgICAgICAgICBwcm9nKTsKLSAgICBwcmludGYoIlxuICAgICAgICAlcyBbLXVucmVnaXN0ZXJdIFstcXVpZXRdIiwgcHJvZyk7CisgICAgcHJpbnRmKCJcblVzYWdlOiAgJXMgWy1yZWdpc3Rlcl0gWy1xdWlldF0gW09QVElPTlNdIFtMSVNURU5JTkcgQUREUkVTU0VTXSIKKyAgICAgICAgICAgIlxuICAgICAgICAlcyBbLXVucmVnaXN0ZXJdIFstcXVpZXRdIiwgcHJvZywgcHJvZyk7CiAjZWxzZQogICAgIHByaW50ZigiXG5Vc2FnZTogICVzIFtPUFRJT05TXSBbTElTVEVOSU5HIEFERFJFU1NFU10iLCBwcm9nKTsKICNlbmRpZgotICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIlxuXHRWZXJzaW9uOiAgJXNcbiIsIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7Ci0gICAgcHJpbnRmKCJcdFdlYjogICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9cbiIpOwotICAgIHByaW50ZigiXHRFbWFpbDogICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldFxuIik7Ci0gICAgcHJpbnRmKCJcbiAgLWFcdFx0XHRsb2cgYWRkcmVzc2VzXG4iKTsKLSAgICBwcmludGYoIiAgLUFcdFx0XHRhcHBlbmQgdG8gdGhlIGxvZ2ZpbGUgcmF0aGVyIHRoYW4gdHJ1bmNhdGluZyBpdFxuIik7Ci0gICAgcHJpbnRmKCIgIC1jIEZJTEVbLC4uLl1cdFx0cmVhZCBGSUxFKHMpIGFzIGNvbmZpZ3VyYXRpb24gZmlsZShzKVxuIik7Ci0gICAgcHJpbnRmKCIgIC1DXHRcdFx0ZG8gbm90IHJlYWQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlc1xuIik7Ci0gICAgcHJpbnRmKCIgIC1kXHRcdFx0ZHVtcCBzZW50IGFuZCByZWNlaXZlZCBTTk1QIHBhY2tldHNcbiIpOwotICAgIHByaW50ZigiICAtRFtUT0tFTlssLi4uXV1cdHR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuIFRPS0VOKHMpXG4iCisgICAgcHJpbnRmKCJcbiIKKyAgICAgICAgICAgIlxuXHRWZXJzaW9uOiAgJXNcbiVzIgorICAgICAgICAgICAiXHRcdFx0ICAoY29uZmlnIHNlYXJjaCBwYXRoOiAlcylcbiVzJXMiLAorICAgICAgICAgICBuZXRzbm1wX2dldF92ZXJzaW9uKCksCisgICAgICAgICAgICJcdFdlYjogICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9cbiIKKyAgICAgICAgICAgIlx0RW1haWw6ICAgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIKKyAgICAgICAgICAgIlxuICAtYVx0XHRcdGxvZyBhZGRyZXNzZXNcbiIKKyAgICAgICAgICAgIiAgLUFcdFx0XHRhcHBlbmQgdG8gdGhlIGxvZ2ZpbGUgcmF0aGVyIHRoYW4gdHJ1bmNhdGluZyBpdFxuIgorICAgICAgICAgICAiICAtYyBGSUxFWywuLi5dXHRcdHJlYWQgRklMRShzKSBhcyBjb25maWd1cmF0aW9uIGZpbGUocylcbiIKKyAgICAgICAgICAgIiAgLUNcdFx0XHRkbyBub3QgcmVhZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzXG4iLAorICAgICAgICAgICBnZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkoKSwKKyAgICAgICAgICAgIiAgLWRcdFx0XHRkdW1wIHNlbnQgYW5kIHJlY2VpdmVkIFNOTVAgcGFja2V0c1xuIgorI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVCVUdHSU5HCisgICAgICAgICAgICIgIC1EW1RPS0VOWywuLi5dXVx0dHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4gVE9LRU4ocylcbiIKIAkgICAiXHRcdFx0ICAodHJ5IEFMTCBmb3IgZXh0cmVtZWx5IHZlcmJvc2Ugb3V0cHV0KVxuIgotCSAgICJcdFx0XHQgIERvbid0IHB1dCBzcGFjZShzKSBiZXR3ZWVuIC1EIGFuZCBUT0tFTihzKS5cbiIpOwotICAgIHByaW50ZigiICAtZlx0XHRcdGRvIG5vdCBmb3JrIGZyb20gdGhlIHNoZWxsXG4iKTsKLSNpZiBIQVZFX1VOSVNURF9ICi0gICAgcHJpbnRmKCIgIC1nIEdJRFx0XHRjaGFuZ2UgdG8gdGhpcyBudW1lcmljIGdpZCBhZnRlciBvcGVuaW5nXG4iCi0JICAgIlx0XHRcdCAgdHJhbnNwb3J0IGVuZHBvaW50c1xuIik7CisJICAgIlx0XHRcdCAgRG9uJ3QgcHV0IHNwYWNlKHMpIGJldHdlZW4gLUQgYW5kIFRPS0VOKHMpLlxuIgogI2VuZGlmCi0gICAgcHJpbnRmKCIgIC1oLCAtLWhlbHBcdFx0ZGlzcGxheSB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIpOwotICAgIHByaW50ZigiICAtSFx0XHRcdGRpc3BsYXkgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZFxuIik7Ci0gICAgcHJpbnRmKCIgIC1JIFstXUlOSVRMSVNUXHRsaXN0IG9mIG1pYiBtb2R1bGVzIHRvIGluaXRpYWxpemUgKG9yIG5vdClcbiIpOwotICAgIHByaW50ZigiXHRcdFx0ICAocnVuIHNubXBkIHdpdGggLURtaWJfaW5pdCBmb3IgYSBsaXN0KVxuIik7Ci0gICAgcHJpbnRmKCIgIC1MIDxMT0dPUFRTPlx0XHR0b2dnbGUgb3B0aW9ucyBjb250cm9sbGluZyB3aGVyZSB0byBsb2cgdG9cbiIpOworICAgICAgICAgICAiICAtZlx0XHRcdGRvIG5vdCBmb3JrIGZyb20gdGhlIHNoZWxsXG4iLAorI2lmIEhBVkVfVU5JU1REX0gKKyAgICAgICAgICAgIiAgLWcgR0lEXHRcdGNoYW5nZSB0byB0aGlzIG51bWVyaWMgZ2lkIGFmdGVyIG9wZW5pbmdcbiIKKwkgICAiXHRcdFx0ICB0cmFuc3BvcnQgZW5kcG9pbnRzXG4iCisjZW5kaWYKKyAgICAgICAgICAgIiAgLWgsIC0taGVscFx0XHRkaXNwbGF5IHRoaXMgdXNhZ2UgbWVzc2FnZVxuIgorICAgICAgICAgICAiICAtSFx0XHRcdGRpc3BsYXkgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZFxuIgorICAgICAgICAgICAiICAtSSBbLV1JTklUTElTVFx0bGlzdCBvZiBtaWIgbW9kdWxlcyB0byBpbml0aWFsaXplIChvciBub3QpXG4iCisgICAgICAgICAgICJcdFx0XHQgIChydW4gc25tcGQgd2l0aCAtRG1pYl9pbml0IGZvciBhIGxpc3QpXG4iCisgICAgICAgICAgICIgIC1MIDxMT0dPUFRTPlx0XHR0b2dnbGUgb3B0aW9ucyBjb250cm9sbGluZyB3aGVyZSB0byBsb2cgdG9cbiIpOwogICAgIHNubXBfbG9nX29wdGlvbnNfdXNhZ2UoIlx0Iiwgc3Rkb3V0KTsKLSAgICBwcmludGYoIiAgLW0gTUlCTElTVFx0XHR1c2UgTUlCTElTVCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IE1JQiBsaXN0XG4iKTsKLSAgICBwcmludGYoIiAgLU0gRElSTElTVFx0XHR1c2UgRElSTElTVCBhcyB0aGUgbGlzdCBvZiBsb2NhdGlvbnNcblx0XHRcdCAgdG8gbG9vayBmb3IgTUlCc1xuIik7Ci0gICAgcHJpbnRmKCIgIC1wIEZJTEVcdFx0c3RvcmUgcHJvY2VzcyBpZCBpbiBGSUxFXG4iKTsKLSAgICBwcmludGYoIiAgLXFcdFx0XHRwcmludCBpbmZvcm1hdGlvbiBpbiBhIG1vcmUgcGFyc2FibGUgZm9ybWF0XG4iKTsKLSAgICBwcmludGYoIiAgLXJcdFx0XHRkbyBub3QgZXhpdCBpZiBmaWxlcyBvbmx5IGFjY2Vzc2libGUgdG8gcm9vdFxuIgotCSAgICJcdFx0XHQgIGNhbm5vdCBiZSBvcGVuZWRcbiIpOworICAgIHByaW50ZigiICAtbSBNSUJMSVNUXHRcdHVzZSBNSUJMSVNUIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgTUlCIGxpc3RcbiIKKyAgICAgICAgICAgIiAgLU0gRElSTElTVFx0XHR1c2UgRElSTElTVCBhcyB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgdG8gbG9vayBmb3IgTUlCc1xuIgorICAgICAgICAgICAiXHRcdFx0ICAoZGVmYXVsdCAlcylcbiVzJXMiLAorI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKKyAgICAgICAgICAgbmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeSgpLAorI2Vsc2UKKyAgICAgICAgICAgIk1JQnMgbm90IGxvYWRlZCIsCisjZW5kaWYKKyAgICAgICAgICAgIiAgLXAgRklMRVx0XHRzdG9yZSBwcm9jZXNzIGlkIGluIEZJTEVcbiIKKyAgICAgICAgICAgIiAgLXFcdFx0XHRwcmludCBpbmZvcm1hdGlvbiBpbiBhIG1vcmUgcGFyc2FibGUgZm9ybWF0XG4iCisgICAgICAgICAgICIgIC1yXHRcdFx0ZG8gbm90IGV4aXQgaWYgZmlsZXMgb25seSBhY2Nlc3NpYmxlIHRvIHJvb3RcbiIKKwkgICAiXHRcdFx0ICBjYW5ub3QgYmUgb3BlbmVkXG4iCiAjaWZkZWYgV0lOMzJTRVJWSUNFCi0gICAgcHJpbnRmKCIgIC1yZWdpc3Rlclx0XHRyZWdpc3RlciBhcyBhIFdpbmRvd3Mgc2VydmljZVxuIik7Ci0gICAgcHJpbnRmKCIgIFx0XHRcdCAgKGZvbGxvd2VkIGJ5IC1xdWlldCB0byBwcmV2ZW50IG1lc3NhZ2UgcG9wdXBzKVxuIik7Ci0gICAgcHJpbnRmKCIgIFx0XHRcdCAgKGZvbGxvd2VkIGJ5IHRoZSBzdGFydHVwIHBhcmFtZXRlciBsaXN0KVxuIik7Ci0gICAgcHJpbnRmKCIgIFx0XHRcdCAgTm90ZSB0aGF0IHNvbWUgcGFyYW1ldGVycyBhcmUgbm90IHJlbGV2YW50IHdoZW4gcnVubmluZyBhcyBhIHNlcnZpY2VcbiIpOworICAgICAgICAgICAiICAtcmVnaXN0ZXJcdFx0cmVnaXN0ZXIgYXMgYSBXaW5kb3dzIHNlcnZpY2VcbiIKKyAgICAgICAgICAgIiAgXHRcdFx0ICAoZm9sbG93ZWQgYnkgLXF1aWV0IHRvIHByZXZlbnQgbWVzc2FnZSBwb3B1cHMpXG4iCisgICAgICAgICAgICIgIFx0XHRcdCAgKGZvbGxvd2VkIGJ5IHRoZSBzdGFydHVwIHBhcmFtZXRlciBsaXN0KVxuIgorICAgICAgICAgICAiICBcdFx0XHQgIE5vdGUgdGhhdCBzb21lIHBhcmFtZXRlcnMgYXJlIG5vdCByZWxldmFudCB3aGVuIHJ1bm5pbmcgYXMgYSBzZXJ2aWNlXG4iCiAjZW5kaWYKICNpZiBIQVZFX1VOSVNURF9ICi0gICAgcHJpbnRmKCIgIC11IFVJRFx0XHRjaGFuZ2UgdG8gdGhpcyB1aWQgKG51bWVyaWMgb3IgdGV4dHVhbCkgYWZ0ZXJcbiIKLQkgICAiXHRcdFx0ICBvcGVuaW5nIHRyYW5zcG9ydCBlbmRwb2ludHNcbiIpOworICAgICAgICAgICAiICAtdSBVSURcdFx0Y2hhbmdlIHRvIHRoaXMgdWlkIChudW1lcmljIG9yIHRleHR1YWwpIGFmdGVyXG4iCisJICAgIlx0XHRcdCAgb3BlbmluZyB0cmFuc3BvcnQgZW5kcG9pbnRzXG4iCiAjZW5kaWYKICNpZmRlZiBXSU4zMlNFUlZJQ0UKLSAgICBwcmludGYoIiAgLXVucmVnaXN0ZXJcdFx0dW5yZWdpc3RlciBhcyBhIFdpbmRvd3Mgc2VydmljZVxuIik7Ci0gICAgcHJpbnRmKCIgIFx0XHRcdCAgKGZvbGxvd2VkIC1xdWlldCB0byBwcmV2ZW50IG1lc3NhZ2UgcG9wdXBzKVxuIik7CisgICAgICAgICAgICIgIC11bnJlZ2lzdGVyXHRcdHVucmVnaXN0ZXIgYXMgYSBXaW5kb3dzIHNlcnZpY2VcbiIKKyAgICAgICAgICAgIiAgXHRcdFx0ICAoZm9sbG93ZWQgLXF1aWV0IHRvIHByZXZlbnQgbWVzc2FnZSBwb3B1cHMpXG4iCiAjZW5kaWYKLSAgICBwcmludGYoIiAgLXYsIC0tdmVyc2lvblx0XHRkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb25cbiIpOwotICAgIHByaW50ZigiICAtVlx0XHRcdHZlcmJvc2UgZGlzcGxheVxuIik7CisgICAgICAgICAgICIgIC12LCAtLXZlcnNpb25cdFx0ZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4iCisgICAgICAgICAgICIgIC1WXHRcdFx0dmVyYm9zZSBkaXNwbGF5XG4iCiAjaWYgZGVmaW5lZChVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFKXx8IGRlZmluZWQoVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUpCi0gICAgcHJpbnRmKCIgIC14IEFERFJFU1NcdFx0dXNlIEFERFJFU1MgYXMgQWdlbnRYIGFkZHJlc3NcbiIpOworICAgICAgICAgICAiICAteCBBRERSRVNTXHRcdHVzZSBBRERSRVNTIGFzIEFnZW50WCBhZGRyZXNzXG4iCiAjZW5kaWYKICNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0gICAgcHJpbnRmKCIgIC1YXHRcdFx0cnVuIGFzIGFuIEFnZW50WCBzdWJhZ2VudCByYXRoZXIgdGhhbiBhcyBhblxuIgotCSAgICJcdFx0XHQgIFNOTVAgbWFzdGVyIGFnZW50XG4iKTsKKyAgICAgICAgICAgIiAgLVhcdFx0XHRydW4gYXMgYW4gQWdlbnRYIHN1YmFnZW50IHJhdGhlciB0aGFuIGFzIGFuXG4iCisJICAgIlx0XHRcdCAgU05NUCBtYXN0ZXIgYWdlbnRcbiIKICNlbmRpZgotCi0gICAgcHJpbnRmKCJcbkRlcHJlY2F0ZWQgb3B0aW9uczpcbiIpOwotICAgIHByaW50ZigiICAtbCBGSUxFXHRcdHVzZSAtTGYgPEZJTEU+IGluc3RlYWRcbiIpOwotICAgIHByaW50ZigiICAtUFx0XHRcdHVzZSAtcCBpbnN0ZWFkXG4iKTsKLSAgICBwcmludGYoIiAgLXNcdFx0XHR1c2UgLUxzZCBpbnN0ZWFkXG4iKTsKLSAgICBwcmludGYoIiAgLVMgZHxpfDAtN1x0XHR1c2UgLUxzIDxmYWNpbGl0eT4gaW5zdGVhZFxuIik7Ci0KLSAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICwKKyAgICAgICAgICAgIlxuRGVwcmVjYXRlZCBvcHRpb25zOlxuIgorICAgICAgICAgICAiICAtbCBGSUxFXHRcdHVzZSAtTGYgPEZJTEU+IGluc3RlYWRcbiIKKyAgICAgICAgICAgIiAgLVBcdFx0XHR1c2UgLXAgaW5zdGVhZFxuIgorICAgICAgICAgICAiICAtc1x0XHRcdHVzZSAtTHNkIGluc3RlYWRcbiIKKyAgICAgICAgICAgIiAgLVMgZHxpfDAtN1x0XHR1c2UgLUxzIDxmYWNpbGl0eT4gaW5zdGVhZFxuIgorICAgICAgICAgICAiXG4iCisgICAgICAgICAgICk7CiAgICAgZXhpdCgxKTsKIH0KIAogc3RhdGljIHZvaWQKIHZlcnNpb24odm9pZCkKIHsKLSAgICBwcmludGYoIlxuTkVULVNOTVAgdmVyc2lvbjogICVzXG4iLCBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwotICAgIHByaW50ZigiV2ViOiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL1xuIik7Ci0gICAgcHJpbnRmKCJFbWFpbDogICAgICAgICAgICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldFxuXG4iKTsKKyAgICBwcmludGYoIlxuTkVULVNOTVAgdmVyc2lvbjogICVzXG4iCisgICAgICAgICAgICJXZWI6ICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvXG4iCisgICAgICAgICAgICJFbWFpbDogICAgICAgICAgICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldFxuXG4iLAorICAgICAgICAgICBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwogICAgIGV4aXQoMCk7CiB9CiAKQEAgLTM3OSw5ICszOTQsMTMgQEAKIHsKICAgICAvKiBEaXNhYmxlIGFsbCBsb2dzIGFuZCBsb2cgdGhlIGVycm9yIHZpYSBzeXNsb2cgKi8KICAgICBzbm1wX2Rpc2FibGVfbG9nKCk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICBzbm1wX2VuYWJsZV9zeXNsb2coKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgc25tcF9sb2coTE9HX0VSUiwgIkV4aXRpbmcgb24gc2lnbmFsICVkXG4iLCBhKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgIHNubXBfZGlzYWJsZV9zeXNsb2coKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgZXhpdCgxKTsKIH0KIApAQCAtNDIxLDkgKzQ0MCw3IEBACiAgICAgaW50ICAgICAgICAgICAgIGFyZywgaSwgcmV0OwogICAgIGludCAgICAgICAgICAgICBkb250X2ZvcmsgPSAwLCBkb19oZWxwID0gMDsKICAgICBpbnQgICAgICAgICAgICAgbG9nX3NldCA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIHVpZCA9IDAsIGdpZCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGFnZW50X21vZGUgPSAtMTsKLSAgICBjaGFyICAgICAgICAgICAqY3B0ciwgKiphcmd2cHRyOwogICAgIGNoYXIgICAgICAgICAgICpwaWRfZmlsZSA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgIG9wdGlvbl9jb21wYXRhYmlsaXR5W10gPSAiLUxlIjsKICNpZiBIQVZFX0dFVFBJRApAQCAtNTA5LDExICs1MjYsMTMgQEAKICAgICAgICAgICAgIGFyZ3ZbaV0gPSBvcHRpb25fY29tcGF0YWJpbGl0eTsgICAgICAgICAgICAKICAgICB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogI2lmZGVmIFdJTjMyCiAgICAgc25tcF9sb2dfc3lzbG9nbmFtZShhcHBfbmFtZV9sb25nKTsKICNlbHNlCiAgICAgc25tcF9sb2dfc3lzbG9nbmFtZShhcHBfbmFtZSk7CiAjZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSwgYXBwX25hbWUpOwogCkBAIC01NTcsMTQgKzU3NiwxOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBzbm1wX3NldF9kdW1wX3BhY2tldCgrK3NubXBfZHVtcF9wYWNrZXQpOwotICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1ZFUkJPU0UsIDEpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3NubXBfZHVtcF9wYWNrZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnRCc6CisjaWZkZWYgTkVUU05NUF9ESVNBQkxFX0RFQlVHR0lORworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEZWJ1Z2dpbmcgbm90IGNvbmZpZ3VyZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyNlbHNlCiAgICAgICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMob3B0YXJnKTsKICAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnZic6CkBAIC01NzgsMTkgKzYwMiwxOCBAQAogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBnaWQ7CiAKICAgICAgICAgICAgICAgICBnaWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVjcCwgMTApOworI2lmIEhBVkVfR0VUR1JOQU0gJiYgSEFWRV9QV0RfSAogICAgICAgICAgICAgICAgIGlmICgqZWNwKSB7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAgKmluZm87CisKICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGdldGdybmFtKG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSBpbmZvLT5ncl9naWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdpZCA9IGluZm8gPyBpbmZvLT5ncl9naWQgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kZ3JlbnQoKTsKKyAgICAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIGdyb3VwIGlkOiAlc1xuIiwgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICi0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChnaWQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIGdyb3VwIGlkOiAlc1xuIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRCwgZ2lkKTsKQEAgLTYxNiw2ICs2MzksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICAgICAgY2FzZSAnbCc6CiAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IC1sIG9wdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgLUxmIDxmaWxlPiBpbnN0ZWFkXG4iKTsKICAgICAgICAgICAgIGlmIChvcHRhcmcgIT0gTlVMTCkgewpAQCAtNjMzLDYgKzY1Nyw3IEBACiAgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCiAgICAgICAgIGNhc2UgJ0wnOgogCSAgICBpZiAgKHNubXBfbG9nX29wdGlvbnMoIG9wdGFyZywgYXJnYywgYXJndiApIDwgMCApIHsKQEAgLTY3OCw3ICs3MDMsOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAgICBzbm1wX3NldF9xdWlja19wcmludCgxKTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQsIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncic6CkBAIC02ODYsNiArNzEyLDcgQEAKIAkJCQkgICAgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTKTsKICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IC1zIG9wdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgLUxzZCBpbnN0ZWFkXG4iKTsKICAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZygpOwpAQCAtNzM5LDYgKzc2Niw3IEBACiAgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKICAgICAgICAgY2FzZSAnVSc6CiAgICAgICAgICAgICBuZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtNzUyLDE5ICs3ODAsMTggQEAKICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgdWlkOwogCiAgICAgICAgICAgICAgICAgdWlkID0gc3RydG91bChvcHRhcmcsICZlY3AsIDEwKTsKKyNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKICAgICAgICAgICAgICAgICBpZiAoKmVjcCkgewotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICAqaW5mbzsKKwogICAgICAgICAgICAgICAgICAgICBpbmZvID0gZ2V0cHduYW0ob3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IGluZm8tPnB3X3VpZDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdWlkID0gaW5mbyA/IGluZm8tPnB3X3VpZCA6IC0xOworICAgICAgICAgICAgICAgICAgICBlbmRwd2VudCgpOworICAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgdXNlciBpZDogJXNcbiIsIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAodWlkIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCB1c2VyIGlkOiAlc1xuIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCB1aWQpOwpAQCAtODI4LDYgKzg1NSw3IEBACiAgICAgfQogCiAgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBUaGVyZSBhcmUgb3B0aW9uYWwgdHJhbnNwb3J0IGFkZHJlc3NlcyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgCiAgICAgICAgICAqLwpAQCAtODM2LDcgKzg2NCw3IEBACiAgICAgICAgICAgICBjaGFyICpjLCAqYXN0cmluZzsKICAgICAgICAgICAgIGlmICgoYyA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkJICAgTkVUU05NUF9EU19BR0VOVF9QT1JUUykpKSB7Ci0gICAgICAgICAgICAgICAgYXN0cmluZyA9IG1hbGxvYyhzdHJsZW4oYykgKyAyICsgc3RybGVuKGFyZ3ZbaV0pKTsKKyAgICAgICAgICAgICAgICBhc3RyaW5nID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oYykgKyAyICsgc3RybGVuKGFyZ3ZbaV0pKTsKICAgICAgICAgICAgICAgICBpZiAoYXN0cmluZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyBhcmd2WyVkXVxuIiwgaSk7CiAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CkBAIC04NTMsNjggKzg4MSw2MiBAQAogICAgICAgICBERUJVR01TR1RMKCgic25tcGQvbWFpbiIsICJwb3J0IHNwZWM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJCSAgTkVUU05NUF9EU19BR0VOVF9QT1JUUykpKTsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3Ugc3BlY2lmaWVkIHBvcnRzIHRvIG9wZW47IHRoaXMgYWdlbnQgd2FzIGJ1aWx0IHRvIG9ubHkgc2VuZCBub3RpZmljYXRpb25zXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCiAgICAgfQogCiAjaWZkZWYgTkVUU05NUF9MT0dGSUxFCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgaWYgKDAgPT0gbG9nX3NldCkKICAgICAgICAgc25tcF9lbmFibGVfZmlsZWxvZyhORVRTTk1QX0xPR0ZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMpKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogI2VuZGlmCiAKLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgYSBhcmd2IHNldCB0byB0aGUgY3VycmVudCBmb3IgcmVzdGFydGluZyB0aGUgYWdlbnQuICAgCi0gICAgICovCi0gICAgYXJndnJlc3RhcnRwID0gKGNoYXIgKiopbWFsbG9jKChhcmdjICsgMikgKiBzaXplb2YoY2hhciAqKSk7Ci0gICAgYXJndnB0ciA9IGFyZ3ZyZXN0YXJ0cDsKLSAgICBmb3IgKGkgPSAwLCByZXQgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIHJldCArPSBzdHJsZW4oYXJndltpXSkgKyAxOworI2lmZGVmIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluaXRpYWxpemUgYSBhcmd2IHNldCB0byB0aGUgY3VycmVudCBmb3IgcmVzdGFydGluZyB0aGUgYWdlbnQuCisgICAgICAgICAqLworICAgICAgICBjaGFyICpjcHRyLCAqKmFyZ3ZwdHI7CisKKyAgICAgICAgYXJndnJlc3RhcnRwID0gKGNoYXIgKiopbWFsbG9jKChhcmdjICsgMikgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGFyZ3ZwdHIgPSBhcmd2cmVzdGFydHA7CisgICAgICAgIGZvciAoaSA9IDAsIHJldCA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAgICAgICAgIHJldCArPSBzdHJsZW4oYXJndltpXSkgKyAxOworICAgICAgICB9CisgICAgICAgIGFyZ3ZyZXN0YXJ0ID0gKGNoYXIgKikgbWFsbG9jKHJldCk7CisgICAgICAgIGFyZ3ZyZXN0YXJ0bmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oYXJndlswXSkgKyAxKTsKKyAgICAgICAgaWYgKCFhcmd2cmVzdGFydHAgfHwgIWFyZ3ZyZXN0YXJ0IHx8ICFhcmd2cmVzdGFydG5hbWUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyBhcmd2cmVzdGFydFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHN0cmNweShhcmd2cmVzdGFydG5hbWUsIGFyZ3ZbMF0pOworCisgICAgICAgIGZvciAoY3B0ciA9IGFyZ3ZyZXN0YXJ0LCBpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgICAgICAgc3RyY3B5KGNwdHIsIGFyZ3ZbaV0pOworICAgICAgICAgICAgKihhcmd2cHRyKyspID0gY3B0cjsKKyAgICAgICAgICAgIGNwdHIgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKKyAgICAgICAgfQogICAgIH0KLSAgICBhcmd2cmVzdGFydCA9IChjaGFyICopIG1hbGxvYyhyZXQpOwotICAgIGFyZ3ZyZXN0YXJ0bmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oYXJndlswXSkgKyAxKTsKLSAgICBpZiAoIWFyZ3ZyZXN0YXJ0cCB8fCAhYXJndnJlc3RhcnQgfHwgIWFyZ3ZyZXN0YXJ0bmFtZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgYXJndnJlc3RhcnRcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBzdHJjcHkoYXJndnJlc3RhcnRuYW1lLCBhcmd2WzBdKTsKKyNlbmRpZiAvKiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFICovCisKICAgICBpZiAoYWdlbnRfbW9kZSA9PSAtMSkgewotICAgICAgICBpZiAoc3Ryc3RyKGFyZ3ZyZXN0YXJ0bmFtZSwgImFnZW50eGQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICBpZiAoc3Ryc3RyKGFyZ3ZbMF0sICJhZ2VudHhkIikgIT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSwgU1VCX0FHRU5UKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9ST0xFLCBNQVNURVJfQUdFTlQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSwgYWdlbnRfbW9kZSk7CiAgICAgfQogCi0gICAgZm9yIChjcHRyID0gYXJndnJlc3RhcnQsIGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIHN0cmNweShjcHRyLCBhcmd2W2ldKTsKLSAgICAgICAgKihhcmd2cHRyKyspID0gY3B0cjsKLSAgICAgICAgY3B0ciArPSBzdHJsZW4oYXJndltpXSkgKyAxOwotICAgIH0KLSAgICAqY3B0ciA9IDA7Ci0gICAgKmFyZ3ZwdHIgPSBOVUxMOwotCi0jaWZkZWYgQlVGU0laCi0gICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKLSNlbmRpZgotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgd29ybGQuICBEZXRhY2ggZnJvbSB0aGUgc2hlbGwuICBDcmVhdGUgaW5pdGlhbCB1c2VyLiAgCi0gICAgICovCi0gICAgaWYoIWRvbnRfZm9yaykgewotICAgICAgICBpbnQgcXVpdCA9ICEgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1FVSVRfSU1NRURJQVRFTFkpOwotICAgICAgICByZXQgPSBuZXRzbm1wX2RhZW1vbml6ZShxdWl0LCBzbm1wX3N0ZGVycmxvZ19zdGF0dXMoKSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHh4eC1ya3M6IGRvIHdlIGNhcmUgaWYgZm9yayBmYWlscz8gSSB0aGluayB3ZSBzaG91bGQuLi4KLSAgICAgICAgICovCi0gICAgICAgIGlmKHJldCAhPSAwKQotICAgICAgICAgICAgRXhpdCgxKTsgICAgICAgICAgICAgICAgLyogIEV4aXQgbG9ncyBleGl0IHZhbCBmb3IgdXMgICovCi0gICAgfQotCiAgICAgU09DS19TVEFSVFVQOwogICAgIGlmIChpbml0X2FnZW50KGFwcF9uYW1lKSAhPSAwKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBZ2VudCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwpAQCAtOTMxLDcgKzk1MywzMCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTb21lIGVycm9yIG9wZW5pbmcgb25lIG9mIHRoZSBzcGVjaWZpZWQgYWdlbnQgdHJhbnNwb3J0cy4gIAogICAgICAgICAgKi8KLSAgICAgICAgRXhpdCgxKTsgICAgICAgICAgICAgICAgLyogIEV4aXQgbG9ncyBleGl0IHZhbCBmb3IgdXMgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTZXJ2ZXIgRXhpdGluZyB3aXRoIGNvZGUgMVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIHRoZSB3b3JsZC4gIERldGFjaCBmcm9tIHRoZSBzaGVsbC4gIENyZWF0ZSBpbml0aWFsIHVzZXIuICAKKyAgICAgKi8KKyAgICBpZighZG9udF9mb3JrKSB7CisgICAgICAgIGludCBxdWl0ID0gISBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUVVJVF9JTU1FRElBVEVMWSk7CisgICAgICAgIHJldCA9IG5ldHNubXBfZGFlbW9uaXplKHF1aXQsCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3N0ZGVycmxvZ19zdGF0dXMoKQorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KKyAgICAgICAgICAgICk7CisgICAgICAgIC8qCisgICAgICAgICAqIHh4eC1ya3M6IGRvIHdlIGNhcmUgaWYgZm9yayBmYWlscz8gSSB0aGluayB3ZSBzaG91bGQuLi4KKyAgICAgICAgICovCisgICAgICAgIGlmKHJldCAhPSAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU2VydmVyIEV4aXRpbmcgd2l0aCBjb2RlIDFcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmIEhBVkVfR0VUUElECkBAIC05NjYsMTEgKzEwMTEsMTQgQEAKICAgICB9CiAjZW5kaWYKIAotI2lmIEhBVkVfVU5JU1REX0gKKyNpZiBkZWZpbmVkKEhBVkVfVU5JU1REX0gpICYmIChkZWZpbmVkKEhBVkVfQ0hPV04pIHx8IGRlZmluZWQoSEFWRV9TRVRHSUQpIHx8IGRlZmluZWQoSEFWRV9TRVRVSUQpKQogICAgIHsKLSAgICBjb25zdCBjaGFyICpjb25zdCBwZXJzaXN0ZW50X2RpciA9IGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpOwotICAgIG1rZGlyaGllciggcGVyc2lzdGVudF9kaXIsIE5FVFNOTVBfQUdFTlRfRElSRUNUT1JZX01PREUsIDAgKTsKKyAgICBjb25zdCBjaGFyICAgICAqcGVyc2lzdGVudF9kaXI7CisgICAgaW50ICAgICAgICAgICAgIHVpZCwgZ2lkOwogCisgICAgcGVyc2lzdGVudF9kaXIgPSBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKTsKKyAgICBta2RpcmhpZXIoIHBlcnNpc3RlbnRfZGlyLCBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFLCAwICk7CisgICAKICAgICB1aWQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklEKTsKICAgICBnaWQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCkBAIC05ODAsNyArMTAyOCw2IEBACiAgICAgaWYgKCB1aWQgIT0gMCB8fCBnaWQgIT0gMCApCiAgICAgICAgIGNob3duKCBwZXJzaXN0ZW50X2RpciwgdWlkLCBnaWQgKTsKICNlbmRpZgotICAgIH0KIAogI2lmZGVmIEhBVkVfU0VUR0lECiAgICAgaWYgKChnaWQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCkBAIC0xMDAyLDYgKzEwNDksMjYgQEAKICNpZmRlZiBIQVZFX1NFVFVJRAogICAgIGlmICgodWlkID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJCSAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQpKSA+IDApIHsKKyNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0ggJiYgSEFWRV9JTklUR1JPVVBTCisgICAgICAgIHN0cnVjdCBwYXNzd2QgKmluZm87CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIGJlZm9yZSBjaGFuZ2luZyBVSUQKKyAgICAgICAgICogICAod2hpY2ggcHJvYmFibHkgaW52b2x2ZXMgZ2l2aW5nIHVwIHByaXZpbGVnZXMpCisgICAgICAgICAqLworICAgICAgICBpbmZvID0gZ2V0cHd1aWQodWlkKTsKKyAgICAgICAgaWYgKGluZm8pIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZC9tYWluIiwgIlN1cHBsZW1lbnRhcnkgZ3JvdXBzIGZvciAlcy5cbiIsIGluZm8tPnB3X25hbWUpKTsKKyAgICAgICAgICAgIGlmIChpbml0Z3JvdXBzKGluZm8tPnB3X25hbWUsIChnaWQgIT0gMCA/IChnaWRfdClnaWQgOiBpbmZvLT5wd19naWQpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigiaW5pdGdyb3VwcyBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVuZHB3ZW50KCk7CisjZW5kaWYKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkL21haW4iLCAiQ2hhbmdpbmcgdWlkIHRvICVkLlxuIiwgdWlkKSk7CiAgICAgICAgIGlmIChzZXR1aWQodWlkKSA9PSAtMSkgewogICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJzZXR1aWQgZmFpbGVkIik7CkBAIC0xMDEyLDYgKzEwNzksNyBAQAogICAgICAgICB9CiAgICAgfQogI2VuZGlmCisgICAgfQogI2VuZGlmCiAKICAgICAvKgpAQCAtMTA2MSw5ICsxMTI5LDEyIEBACiAgICAgYWdlbnRfc3RhdHVzID0gQUdFTlRfU1RPUFBFRDsKICNlbmRpZgogCisjaWZkZWYgVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRQogICAgIFNOTVBfRlJFRShhcmd2cmVzdGFydG5hbWUpOwogICAgIFNOTVBfRlJFRShhcmd2cmVzdGFydCk7CiAgICAgU05NUF9GUkVFKGFyZ3ZyZXN0YXJ0cCk7CisjZW5kaWYgLyogVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRSAqLworCiAgICAgU09DS19DTEVBTlVQOwogICAgIHJldHVybiAwOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgbWFpbigpIC0tIHNubXBkICovCkBAIC0xMTExLDcgKzExODIsNyBAQAogICoJMAlPbiBzdWNjZXNzLgogICoJLTEJU3lzdGVtIGVycm9yLgogICoKLSAqIEluZmluaXRlIHdoaWxlLWxvb3Agd2hpY2ggbW9uaXRvcnMgaW5jb21pbmcgbWVzc2dlcyBmb3IgdGhlIGFnZW50LgorICogSW5maW5pdGUgd2hpbGUtbG9vcCB3aGljaCBtb25pdG9ycyBpbmNvbWluZyBtZXNzYWdlcyBmb3IgdGhlIGFnZW50LgogICogSW52b2tlIHRoZSBlc3RhYmxpc2hlZCBtZXNzYWdlIGhhbmRsZXJzIGZvciBpbmNvbWluZyBtZXNzYWdlcyBvbiBhIHBlcgogICogcG9ydCBiYXNpcy4gIEhhbmRsZSB0aW1lb3V0cy4KICAqLwpAQCAtMTExOSwxMyArMTE5MCwxNyBAQAogcmVjZWl2ZSh2b2lkKQogewogICAgIGludCAgICAgICAgICAgICBudW1mZHM7Ci0gICAgZmRfc2V0ICAgICAgICAgIHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHM7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgcmVhZGZkcywgd3JpdGVmZHMsIGV4Y2VwdGZkczsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZW91dCwgKnR2cCA9ICZ0aW1lb3V0OwogICAgIGludCAgICAgICAgICAgICBjb3VudCwgYmxvY2ssIGk7CiAjaWZkZWYJVVNJTkdfU01VWF9NT0RVTEUKICAgICBpbnQgICAgICAgICAgICAgc2Q7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTSU5HX1NNVVhfTU9EVUxFICovCiAKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZyZWFkZmRzLCBGRF9TRVRTSVpFKTsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZ3cml0ZWZkcywgRkRfU0VUU0laRSk7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmZXhjZXB0ZmRzLCBGRF9TRVRTSVpFKTsKKwogICAgIC8qCiAgICAgICogaWdub3JlIGVhcmx5IHNpZ2h1cCBkdXJpbmcgc3RhcnR1cAogICAgICAqLwpAQCAtMTE2NywxOCArMTI0MiwxOCBAQAogICAgICAgICB0dnAtPnR2X3VzZWMgPSAwOwogCiAgICAgICAgIG51bWZkcyA9IDA7Ci0gICAgICAgIEZEX1pFUk8oJnJlYWRmZHMpOwotICAgICAgICBGRF9aRVJPKCZ3cml0ZWZkcyk7Ci0gICAgICAgIEZEX1pFUk8oJmV4Y2VwdGZkcyk7CisgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygmcmVhZGZkcyk7CisgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygmd3JpdGVmZHMpOworICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oJmV4Y2VwdGZkcyk7CiAgICAgICAgIGJsb2NrID0gMDsKLSAgICAgICAgc25tcF9zZWxlY3RfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgdHZwLCAmYmxvY2spOworICAgICAgICBzbm1wX3NlbGVjdF9pbmZvMigmbnVtZmRzLCAmcmVhZGZkcywgdHZwLCAmYmxvY2spOwogICAgICAgICBpZiAoYmxvY2sgPT0gMSkgewogICAgICAgICAgICAgdHZwID0gTlVMTDsgICAgICAgICAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KIAl9CiAKICNpZmRlZglVU0lOR19TTVVYX01PRFVMRQogICAgICAgICBpZiAoc211eF9saXN0ZW5fc2QgPj0gMCkgewotICAgICAgICAgICAgRkRfU0VUKHNtdXhfbGlzdGVuX3NkLCAmcmVhZGZkcyk7CisgICAgICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChzbXV4X2xpc3Rlbl9zZCwgJnJlYWRmZHMpOwogICAgICAgICAgICAgbnVtZmRzID0KICAgICAgICAgICAgICAgICBzbXV4X2xpc3Rlbl9zZCA+PSBudW1mZHMgPyBzbXV4X2xpc3Rlbl9zZCArIDEgOiBudW1mZHM7CiAKQEAgLTExODYsMjggKzEyNjEsMzQgQEAKICAgICAgICAgICAgICAgICBzZCA9IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9nZXRfU0RfZnJvbV9MaXN0KGkpOwogICAgICAgICAgICAgICAgIGlmIChzZCAhPSAwKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICBGRF9TRVQoc2QsICZyZWFkZmRzKTsKKyAgICAgICAgICAgICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChzZCwgJnJlYWRmZHMpOwogICAgICAgICAgICAgICAgICAgIG51bWZkcyA9IHNkID49IG51bWZkcyA/IHNkICsgMSA6IG51bWZkczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNJTkdfU01VWF9NT0RVTEUgKi8KIAotICAgICAgICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8oJm51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcyk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUgorICAgICAgICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8yKCZudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUiAqLwogCiAgICAgcmVzZWxlY3Q6CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfU0lHTkFMCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fRVhURVJOQUxfU0lHUzsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZXh0ZXJuYWxfc2lnbmFsX3NjaGVkdWxlZFtpXSkgewogICAgICAgICAgICAgICAgIGV4dGVybmFsX3NpZ25hbF9zY2hlZHVsZWRbaV0tLTsKICAgICAgICAgICAgICAgICBleHRlcm5hbF9zaWduYWxfaGFuZGxlcltpXShpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfU0lHTkFMICovCiAKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkL3NlbGVjdCIsICJzZWxlY3QoIG51bWZkcz0lZCwgLi4uLCB0dnA9JXApXG4iLAogICAgICAgICAgICAgICAgICAgICBudW1mZHMsIHR2cCkpOwotICAgICAgICBpZih0dnApCi0gICAgICAgICAgICBERUJVR01TR1RMKCgidGltZXIiLCAidHZwICVsZC4lbGRcbiIsIHR2cC0+dHZfc2VjLCB0dnAtPnR2X3VzZWMpKTsKLSAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzLCB0dnApOworICAgICAgICBpZiAodHZwKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoInRpbWVyIiwgInR2cCAlbGQuJWxkXG4iLCAobG9uZykgdHZwLT50dl9zZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgdHZwLT50dl91c2VjKSk7CisgICAgICAgIGNvdW50ID0gbmV0c25tcF9sYXJnZV9mZF9zZXRfc2VsZWN0KG51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcywKKwkJCQkgICAgIHR2cCk7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZC9zZWxlY3QiLCAicmV0dXJuZWQsIGNvdW50ID0gJWRcbiIsIGNvdW50KSk7CiAKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewpAQCAtMTIxOSw3ICsxMzAwLDcgQEAKICAgICAgICAgICAgIGlmIChzbXV4X2xpc3Rlbl9zZCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9nZXRfbGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBzZCA9IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9nZXRfU0RfZnJvbV9MaXN0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoRkRfSVNTRVQoc2QsICZyZWFkZmRzKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChzZCwgJnJlYWRmZHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc211eF9wcm9jZXNzKHNkKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZGVsKHNkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEyMjgsNyArMTMwOSw3IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBuZXcgY29ubmVjdGlvbiAKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoRkRfSVNTRVQoc211eF9saXN0ZW5fc2QsICZyZWFkZmRzKSkgeworICAgICAgICAgICAgICAgIGlmIChORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKHNtdXhfbGlzdGVuX3NkLCAmcmVhZGZkcykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChzZCA9IHNtdXhfYWNjZXB0KHNtdXhfbGlzdGVuX3NkKSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgc211eF9zbm1wX3NlbGVjdF9saXN0X2FkZChzZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEyMzYsMTEgKzEzMTcsMTUgQEAKICAgICAgICAgICAgIH0KIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0lOR19TTVVYX01PRFVMRSAqLwotICAgICAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMoJmNvdW50LCAmcmVhZGZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpdGVmZHMsICZleGNlcHRmZHMpOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUgorICAgICAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMyKCZjb3VudCwgJnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIgKi8KKwogICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIHN0aWxsIGV2ZW50cyBsZWZ0b3ZlciwgcHJvY2VzcyB0aGVtICovCiAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgIHNubXBfcmVhZCgmcmVhZGZkcyk7CisgICAgICAgICAgICAgIHNubXBfcmVhZDIoJnJlYWRmZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN3aXRjaCAoY291bnQpIHsKQEAgLTEyNjgsNiArMTM1MywxMSBAQAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBlbmRpZiAtLSBjb3VudD4wICovCiAKICAgICAgICAgLyoKKyAgICAgICAgICogc2VlIGlmIHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMgdG8gYmUgc2F2ZWQKKyAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfaWZfbmVlZGVkKCk7CisKKyAgICAgICAgLyoKICAgICAgICAgICogcnVuIHJlcXVlc3RlZCBhbGFybXMgCiAgICAgICAgICAqLwogICAgICAgICBydW5fYWxhcm1zKCk7CkBAIC0xMjc2LDYgKzEzNjYsMTAgQEAKIAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSAqLwogCisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmcmVhZGZkcyk7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmd3JpdGVmZHMpOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmV4Y2VwdGZkcyk7CisKICNpZiBkZWZpbmVkKFdJTjMyKQogICAgIGpvaW5fc3RkaW5fd2FpdGVyX3RocmVhZCgpOwogI2VuZGlmCkBAIC0xMzY2LDYgKzE0NjAsMTAgQEAKICAgICBpbnQgICAgICAgICAgICAgblJ1blR5cGUgPSBSVU5fQVNfQ09OU09MRTsKICAgICBpbnQgICAgICAgICAgICAgcXVpZXQgPSAwOwogICAgIAorI2lmIDAKKyAgICBfQ3J0U2V0RGJnRmxhZyhfQ1JUREJHX0FMTE9DX01FTV9ERiB8IF9DUlREQkdfTEVBS19DSEVDS19ERiAvKnwgX0NSVERCR19DSEVDS19BTFdBWVNfREYqLyk7CisjZW5kaWYKKwogICAgIG5SdW5UeXBlID0gUGFyc2VDbWRMaW5lRm9yU2VydmljZU9wdGlvbihhcmdjLCBhcmd2LCAmcXVpZXQpOwogCiAgICAgc3dpdGNoIChuUnVuVHlwZSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvc25tcGQuaCBiL2FnZW50L3NubXBkLmgKaW5kZXggOTM1YzBlNy4uODliY2QzMSAxMDA2NDQKLS0tIGEvYWdlbnQvc25tcGQuaAorKysgYi9hZ2VudC9zbm1wZC5oCkBAIC0yLDYgKzIsMTAgQEAKICAqIHNubXBkLmgKICAqLwogCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKICNkZWZpbmUgTUFTVEVSX0FHRU5UIDAKICNkZWZpbmUgU1VCX0FHRU5UICAgIDEKIGV4dGVybiBpbnQgICAgICBhZ2VudF9yb2xlOwpAQCAtMTcsMyArMjEsNyBAQAogICogY29uZmlnIGZpbGUgcGFyc2luZyByb3V0aW5lcyAKICAqLwogdm9pZCAgICAgICAgICAgIGFnZW50Qm9vdHNfY29uZihjaGFyICosIGNoYXIgKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL01ha2VmaWxlLmRlcGVuZCBiL2FwcHMvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGI5Mjc2ZTguLjE1Y2IxNzYgMTAwNjQ0Ci0tLSBhL2FwcHMvTWFrZWZpbGUuZGVwZW5kCisrKyBiL2FwcHMvTWFrZWZpbGUuZGVwZW5kCkBAIC0xLDYyICsxLDE0MCBAQAogIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgogCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2FnZW50eHRyYXAubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5oCisuL2FnZW50eHRyYXAubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NSwzMiArMTQzLDUyIEBACiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCkBAIC05OCwyOSArMTk2LDEzIEBACiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjksNjQgKzIxMSw2NiBAQAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE5NSw2MiArMjc5LDY1IEBACiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI1OSw2MSArMzQ2LDYyIEBACiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMyMiwzMyArNDEwLDUxIEBACiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTM1NiwyOSArNDYyLDEzIEBACiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zODcsNjMgKzQ3Nyw2NiBAQAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ1Miw2MSArNTQ1LDYzIEBACiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTE1LDMzICs2MTAsNTEgQEAKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCkBAIC01NDksMjkgKzY2MiwxMyBAQAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTgwLDYyICs2NzcsNjUgQEAKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NDQsNjIgKzc0NCw2NCBAQAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03MDgsMzMgKzgxMCwxNjAgQEAKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKKy4vc25tcHRscy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgKKy4vc25tcHRscy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCkBAIC03NDcsNjcgKzk3Niw2MyBAQAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODE2LDYyICsxMDQxLDEzOCBAQAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2F1dGguaCBzbm1wdHJhcGRfZHMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTg4MCw2ICsxMTgxLDcgQEAKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkxNiw5MSArMTIxOCw0NSBAQAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHNubXB0cmFwZF9oYW5kbGVycy5oCi0uL3NubXB0cmFwZC5sbzogc25tcHRyYXBkX2xvZy5oIHNubXB0cmFwZF9kcy5oIHNubXB0cmFwZF9hdXRoLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdHJhcGQubG86IHNubXB0cmFwZF9oYW5kbGVycy5oIHNubXB0cmFwZF9sb2cuaCBzbm1wdHJhcGRfZHMuaAorLi9zbm1wdHJhcGQubG86IHNubXB0cmFwZF9hdXRoLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaCAuLi9hZ2VudC9zbm1wX3BlcmwuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IHNubXB0cmFwZF9oYW5kbGVycy5oIHNubXB0cmFwZF9hdXRoLmggc25tcHRyYXBkX2RzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zbm1wdHJhcGQubG86IC4uL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCisuL3NubXB0cmFwZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKQEAgLTEwMDksMTYgKzEyNjUsNiBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKQEAgLTEwMzYsMTggKzEyODIsNyBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA1Niw2ICsxMjkxLDcgQEAKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwOTMsNjcgKzEzMjksNjkgQEAKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2F1dGguaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IHNubXB0cmFwZF9sb2cuaCBzbm1wdHJhcGRfZHMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE2Miw2MiArMTQwMCw2NiBAQAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIHNubXB0cmFwZF9sb2cuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiBzbm1wdHJhcGRfZHMuaAorLi9zbm1wdHJhcGRfc3FsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXB0cmFwZF9zcWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTIyNiw2MiArMTQ2OCw2NCBAQAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyOTAsNjIgKzE1MzQsNjUgQEAKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzU0LDY0ICsxNjAxLDY3IEBACiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zc2h0b3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MjAsMTMzICsxNjcwLDY4IEBACiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTU1NSw2NSArMTc0MCwyMDUgQEAKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTYyMiw2NiArMTk0Nyw2NyBAQAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjkwLDY2ICsyMDE2LDEzNiBAQAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmggLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmggLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE3NTgsNCArMjE1NCw1IEBACiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKZGlmZiAtLWdpdCBhL2FwcHMvTWFrZWZpbGUuaW4gYi9hcHBzL01ha2VmaWxlLmluCmluZGV4IDE4MWQzZmYuLjc3NDA0ZGQgMTAwNjQ0Ci0tLSBhL2FwcHMvTWFrZWZpbGUuaW4KKysrIGIvYXBwcy9NYWtlZmlsZS5pbgpAQCAtNCw2ICs0LDcgQEAKICMKIAogdG9wX2J1aWxkZGlyPS4uCitteXN1YmRpcj1hcHBzCiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwogIyBWUEFUSCB3aWxsIHBpY2sgdXAgb2JqZWN0cyB0b28sIHdoaWNoIGlzIGJhZCBpZiB5b3UgYXJlIHNoYXJpbmcgYQpAQCAtMTcsMTAgKzE4LDM3IEBACiAjIFRoaW5ncyB0byBpbnN0YWxsCiAjCiAKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUVAU1NISU5TVEFMTEJJTlBST0cgPSBzc2h0b3NubXAkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFQFNTSElOU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUVAU1NIRkVBVFVSRVBST0cgPSBzc2h0b3NubXAuZnQKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFQFNTSEZFQVRVUkVQUk9HID0KK0BORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUVAVExTSU5TVEFMTEJJTlBST0cgPSBzbm1wdGxzJChFWEVFWFQpCitATkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRUBUTFNJTlNUQUxMQklOUFJPRyA9CitATkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFQFRMU0ZFQVRVUkVQUk9HID0gc25tcHRscy5mdAorQE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0VAVExTRkVBVFVSRVBST0cgPQorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRUBVU01JTlNUQUxMQklOUFJPRyA9IHNubXB1c20kKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFQFVTTUlOU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUVAVVNNRkVBVFVSRVBST0cgPSBzbm1wdXNtLmZ0CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRUBVU01GRUFUVVJFUFJPRyA9CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFQEVLQ1NUQUxMQklOUFJPRyA9IGVuY29kZV9rZXljaGFuZ2UkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFQEVLQ1NUQUxMQklOUFJPRyA9CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFQEVLQ0ZFQVRVUkVQUk9HID0gZW5jb2RlX2tleWNoYW5nZS5mdAorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0VARUtDRkVBVFVSRVBST0cgPQorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRUBTTk1QU0VUSU5TVEFMTEJJTlBST0cgPSBzbm1wc2V0JChFWEVFWFQpCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRUBTTk1QU0VUSU5TVEFMTEJJTlBST0cgPSAKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUVAU05NUFNFVEZFQVRVUkVQUk9HID0gc25tcHNldC5mdAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0VAU05NUFNFVEZFQVRVUkVQUk9HID0gCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFQFNOTVBWQUNNSU5TVEFMTEJJTlBST0cgPSBzbm1wdmFjbSQoRVhFRVhUKQorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0VAU05NUFZBQ01JTlNUQUxMQklOUFJPRyA9IAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRUBTTk1QVkFDTUZFQVRVUkVQUk9HID0gc25tcHZhY20uZnQKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFQFNOTVBWQUNNRkVBVFVSRVBST0cgPSAKKworQE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFQEFHRU5UWFRSQVAgPSBhZ2VudHh0cmFwJChFWEVFWFQpCitATkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFQEFHRU5UWFRSQVAgPQorCiBJTlNUQUxMQklOUFJPR1MJPSBzbm1wZ2V0JChFWEVFWFQpIAkJCVwKIAkJc25tcGdldG5leHQkKEVYRUVYVCkgCQkJXAotCQlzbm1wc2V0JChFWEVFWFQpIAkJCVwKLQkJc25tcHVzbSQoRVhFRVhUKQkJCVwKKwkJJChTTk1QU0VUSU5TVEFMTEJJTlBST0cpCSAgICAgICAgXAogCQlzbm1wd2FsayQoRVhFRVhUKSAJCQlcCiAJCXNubXBidWxrd2FsayQoRVhFRVhUKSAJCQlcCiAJCXNubXB0YWJsZSQoRVhFRVhUKQkJCVwKQEAgLTMwLDkgKzU4LDExIEBACiAJCXNubXBzdGF0dXMkKEVYRUVYVCkgCQkJXAogCQlzbm1wZGVsdGEkKEVYRUVYVCkgCQkJXAogCQlzbm1wdGVzdCQoRVhFRVhUKQkJCVwKLQkJZW5jb2RlX2tleWNoYW5nZSQoRVhFRVhUKSAJCVwKIAkJc25tcGRmJChFWEVFWFQpIAkJCVwKLQkJc25tcHZhY20kKEVYRUVYVCkKKwkJJChBR0VOVFhUUkFQKQkJCQlcCisJCSQoU05NUFZBQ01JTlNUQUxMQklOUFJPRykJICAgICAgICBcCisgICAgICAgICAgICAgICAgJChTU0hJTlNUQUxMQklOUFJPRykgJChUTFNJTlNUQUxMQklOUFJPRykgXAorCQkkKFVTTUlOU1RBTExCSU5QUk9HKSAkKEVLQ1NUQUxMQklOUFJPRykKIAogSU5TVEFMTFNCSU5QUk9HUyA9IHNubXB0cmFwZCQoRVhFRVhUKQogCkBAIC00MCw0MSArNzAsNjkgQEAKIAogU1VCRElSUwkJPSBzbm1wbmV0c3RhdAogCitGRUFUVVJFRklMRT0uLi9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmVzLWFwcHMuaAorCiAjCiAjIGJ1aWxkIHZhcmlhYmxlcy4KICMKIAogIyBVU0VMSUJTL1VTRUFHRU5UTElCUyBhcmUgZm9yIGRlcGVuZGVuY2llcwogVVNFTElCUwkJPSAuLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pIAotSEVMUEVSTElCICAgICAgID0gLi4vYWdlbnQvaGVscGVycy9saWJuZXRzbm1waGVscGVycy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIEFHRU5UTElCICAgICAgICA9IC4uL2FnZW50L2xpYm5ldHNubXBhZ2VudC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIE1JQkxJQiAgICAgICAgICA9IC4uL2FnZW50L2xpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotVVNFQUdFTlRMSUJTCT0gJChNSUJMSUIpICQoQUdFTlRMSUIpICQoSEVMUEVSTElCKSAkKFVTRUxJQlMpCitVU0VBR0VOVExJQlMJPSAkKE1JQkxJQikgJChBR0VOVExJQikgJChVU0VMSUJTKQorTVlTUUxfTElCUwk9IEBNWVNRTF9MSUJTQAorTVlTUUxfSU5DTFVERVMJPSBATVlTUUxfSU5DTFVERVNACiAKLUxJQlMJCT0gJChVU0VMSUJTKSBATElCU0AKK1ZBTF9MSUJTCT0gQFZBTF9MSUJTQAorTElCUwkJPSAkKFVTRUxJQlMpICQoVkFMX0xJQlMpIEBMSUJTQAogUEVSTExET1BUU19GT1JfQVBQUyA9IEBQRVJMTERPUFRTX0ZPUl9BUFBTQAogUEVSTExET1BUU19GT1JfTElCUyA9IEBQRVJMTERPUFRTX0ZPUl9MSUJTQAogCiAjCiAjIGhhY2sgZm9yIGNvbXBpbGluZyB0cmFwZCB3aGVuIGFnZW50IGlzIGRpc2FibGVkCi1UUkFQRFdJVEhBR0VOVCAgPSAkKFVTRVRSQVBMSUJTKSBAQUdFTlRMSUJTQAotVFJBUERXSVRIT1VUQUdFTlQgPSAkKExJQlMpCitUUkFQRFdJVEhBR0VOVCAgPSAkKFVTRVRSQVBMSUJTKSAkKE1ZU1FMX0xJQlMpICQoVkFMX0xJQlMpIEBBR0VOVExJQlNACitUUkFQRFdJVEhPVVRBR0VOVCA9ICQoTElCUykgJChNWVNRTF9MSUJTKSAkKFZBTF9MSUJTKQogCiAjIHRoZXNlIHdpbGwgYmUgc2V0IGJ5IGNvbmZpZ3VyZSB0byBvbmUgb2YgdGhlIGFib3ZlIDIgbGluZXMKIFRSQVBMSUJTCT0gQFRSQVBMSUJTQCAkKFBFUkxMRE9QVFNfRk9SX0FQUFMpCiBVU0VUUkFQTElCUwk9IEBVU0VUUkFQTElCU0AKIAogQ1BQRkxBR1MJPSAkKFRPUF9JTkNMVURFUykgLUkuICQoQUdFTlRfSU5DTFVERVMpICQoSEVMUEVSX0lOQ0xVREVTKSBcCi0JCSAgJChNSUJHUk9VUF9JTkNMVURFUykgICQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQAorCQkgICQoTUlCR1JPVVBfSU5DTFVERVMpICBcCisJCSAgJChTTk1QTElCX0lOQ0xVREVTKSAkKE1ZU1FMX0lOQ0xVREVTKSBAQ1BQRkxBR1NACiAKIE9TVUZGSVgJCT0gbG8KIFRSQVBEX09CSkVDVFMgICA9IHNubXB0cmFwZC4kKE9TVUZGSVgpIEBvdGhlcl90cmFwZF9vYmplY3RzQAogTElCVFJBUERfT0JKUyAgID0gc25tcHRyYXBkX2hhbmRsZXJzLm8gIHNubXB0cmFwZF9sb2cubyBcCi0JCSAgc25tcHRyYXBkX2F1dGgubworCQkgIHNubXB0cmFwZF9hdXRoLm8gc25tcHRyYXBkX3NxbC5vCiBMTElCVFJBUERfT0JKUyAgPSBzbm1wdHJhcGRfaGFuZGxlcnMubG8gc25tcHRyYXBkX2xvZy5sbyBcCi0JCSAgc25tcHRyYXBkX2F1dGgubG8KKwkJICBzbm1wdHJhcGRfYXV0aC5sbyBzbm1wdHJhcGRfc3FsLmxvCitMSUJUUkFQRF9GVFMgICAgPSBzbm1wdHJhcGRfaGFuZGxlcnMuZnQgc25tcHRyYXBkX2xvZy5mdCBcCisJCSAgc25tcHRyYXBkX2F1dGguZnQgc25tcHRyYXBkX3NxbC5mdAogT0JKUyAgPSAqLm8KIExPQkpTID0gKi5sbworRlRPQkpTPSQoTElCVFJBUERfRlRTKSBcCisgICAgICAgc25tcHdhbGsuZnQgXAorICAgICAgIHNubXBidWxrd2Fsay5mdCBcCisgICAgICAgc25tcGJ1bGtnZXQuZnQgXAorICAgICAgIHNubXB0cmFuc2xhdGUuZnQgXAorICAgICAgIHNubXBzdGF0dXMuZnQgXAorICAgICAgIHNubXBnZXQuZnQgXAorICAgICAgIHNubXBkZWx0YS5mdCBcCisgICAgICAgc25tcHRhYmxlLmZ0IFwKKyAgICAgICBzbm1wdGVzdC5mdCBcCisgICAgICAgc25tcHRyYXBkLmZ0IFwKKyAgICAgICBzbm1wdHJhcC5mdCBcCisgICAgICAgJChTTk1QU0VURkVBVFVSRVBST0cpIFwKKyAgICAgICAkKFNOTVBWQUNNRkVBVFVSRVBST0cpIFwKKyAgICAgICAkKFVTTUZFQVRVUkVQUk9HKSBcCisgICAgICAgJChUTFNGRUFUVVJFUFJPRykgXAorICAgICAgIGFnZW50eHRyYXAuZnQgXAorICAgICAgIHNubXBnZXRuZXh0LmZ0IFwKKyAgICAgICAkKEVLQ0ZFQVRVUkVQUk9HKSBcCisgICAgICAgc25tcGRmLmZ0IFwKKyAgICAgICAkKFNTSEZFQVRVUkVQUk9HKQogCiBhbGw6IHN0YW5kYXJkYWxsCiAKQEAgLTEzMCw2ICsxODgsMTIgQEAKIHNubXB2YWNtJChFWEVFWFQpOiAgICBzbm1wdmFjbS4kKE9TVUZGSVgpICQoVVNFTElCUykKIAkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzbm1wdmFjbS4kKE9TVUZGSVgpICR7TERGTEFHU30gJHtMSUJTfQogCitzbm1wdGxzJChFWEVFWFQpOiAgICBzbm1wdGxzLiQoT1NVRkZJWCkgJChVU0VMSUJTKQorCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIHNubXB0bHMuJChPU1VGRklYKSAke0xERkxBR1N9ICR7TElCU30gCisKK2FnZW50eHRyYXAkKEVYRUVYVCk6ICAgIGFnZW50eHRyYXAuJChPU1VGRklYKSAkKFVTRUFHRU5UTElCUykKKwkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBhZ2VudHh0cmFwLiQoT1NVRkZJWCkgJHtMREZMQUdTfSAkKFVTRUFHRU5UTElCUykgJChQRVJMTERPUFRTX0ZPUl9BUFBTKSAke0xJQlN9CisKIHNubXBnZXRuZXh0JChFWEVFWFQpOiAgICBzbm1wZ2V0bmV4dC4kKE9TVUZGSVgpICQoVVNFTElCUykKIAkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzbm1wZ2V0bmV4dC4kKE9TVUZGSVgpICR7TERGTEFHU30gJHtMSUJTfQogCkBAIC0xNTgsNSArMjIyLDkgQEAKIAkgIEBybSAtZiAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikvc25tcF9wZXJsX3RyYXBkLnBsCiAJICBAZWNobyAicmVtb3ZlZCBzbm1wX3BlcmxfdHJhcGQucGwgZnJvbSAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikiCiAKK3NzaHRvc25tcCQoRVhFRVhUKTogc3NodG9zbm1wLiQoT1NVRkZJWCkKKwkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzc2h0b3NubXAuJChPU1VGRklYKQorCisKIGluc3RhbGxkaXJzOgogCUAkKFNIRUxMKSAkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikKZGlmZiAtLWdpdCBhL2FwcHMvYWdlbnR4dHJhcC5jIGIvYXBwcy9hZ2VudHh0cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmNDIzYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvYWdlbnR4dHJhcC5jCkBAIC0wLDAgKzEsNjEyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAvKiBvcHRpbmQsIG9wdGFyZyBhbmQgb3B0b3B0ICovCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaD4KKworI2luY2x1ZGUgIi4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5oIgorI2luY2x1ZGUgIi4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbm1wX3NwbGl0X3BkdSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXBfcmVzZXRfdmFyX3R5cGVzKQorCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIFVOVVNFRAorI2VuZGlmCisKK2V4dGVybiBjb25zdCBvaWQgc3lzdXB0aW1lX29pZFtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBzeXN1cHRpbWVfb2lkX2xlbjsKK2V4dGVybiBjb25zdCBvaWQgc25tcHRyYXBfb2lkW107CitleHRlcm4gY29uc3Qgc2l6ZV90IHNubXB0cmFwX29pZF9sZW47CisKK3N0YXRpYyB2b2lkCit1c2FnZShjb25zdCBjaGFyKiBwcm9nbmFtZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJVU0FHRTogJXMgW09QVElPTlNdIFRSQVAtUEFSQU1FVEVSU1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIiAgVmVyc2lvbjogICVzXG4iCisgICAgICAgICAgICAiICBXZWI6ICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvXG4iCisgICAgICAgICAgICAiICBFbWFpbDogICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldFxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIk9QVElPTlM6XG4iLCBwcm9nbmFtZSwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKKworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIiAgLWhcdFx0XHRkaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlXG4iCisgICAgICAgICAgICAiICAtVlx0XHRcdGRpc3BsYXkgcGFja2FnZSB2ZXJzaW9uIG51bWJlclxuIgorICAgICAgICAgICAgIiAgLW0gTUlCWyIgRU5WX1NFUEFSQVRPUiAiLi4uXVx0XHRsb2FkIGdpdmVuIGxpc3Qgb2YgTUlCcyAoQUxMIGxvYWRzICIKKyAgICAgICAgICAgICJldmVyeXRoaW5nKVxuIgorICAgICAgICAgICAgIiAgLU0gRElSWyIgRU5WX1NFUEFSQVRPUiAiLi4uXVx0XHRsb29rIGluIGdpdmVuIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIE1JQnNcbiIKKyAgICAgICAgICAgICIgIC1EW1RPS0VOWywuLi5dXVx0dHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgc3BlY2lmaWVkICIKKyAgICAgICAgICAgICJUT0tFTnNcbiIKKyAgICAgICAgICAgICJcdFx0XHQgICAoQUxMIGdpdmVzIGV4dHJlbWVseSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQpXG4iCisgICAgICAgICAgICAiICAtZFx0XHRcdGR1bXAgYWxsIHRyYWZmaWNcbiIpOworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICIgIC1QIE1JQk9QVFNcdFx0VG9nZ2xlIHZhcmlvdXMgZGVmYXVsdHMgY29udHJvbGxpbmcgbWliICIKKyAgICAgICAgICAgICJwYXJzaW5nOlxuIik7CisgICAgc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UoIlx0XHRcdCAgIiwgc3RkZXJyKTsKKyNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICIgIC1MIExPR09QVFNcdFx0VG9nZ2xlIHZhcmlvdXMgZGVmYXVsdHMgY29udHJvbGxpbmcgbG9nZ2luZzpcbiIpOworICAgIHNubXBfbG9nX29wdGlvbnNfdXNhZ2UoIlx0XHRcdCAgIiwgc3RkZXJyKTsKKworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIiAgLWMgY29udGV4dFxuIgorICAgICAgICAgICAgIiAgLVUgdXB0aW1lXG4iCisgICAgICAgICAgICAiICAteCBBRERSRVNTXHRcdHVzZSBBRERSRVNTIGFzIEFnZW50WCBhZGRyZXNzXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiVFJBUC1QQVJBTUVURVJTOlxuIgorICAgICAgICAgICAgIiAgdHJhcG9pZCBbT0lEIFRZUEUgVkFMVUVdIC4uLlxuIik7Cit9CisKK3N0cnVjdCB0U3RhdGVfczsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHRTdGF0ZV9zKiB0U3RhdGU7CitzdHJ1Y3QgdFN0YXRlX3MgeworICAgIHZvaWQgKCplbnRyeSkodFN0YXRlIHNlbGYpOyAvKio8PCBTdGF0ZSBlbnRyeSBhY3Rpb24gKi8KKyAgICB2b2lkICgqZXhpdCkodFN0YXRlIHNlbGYpOyAvKio8PCBTdGF0ZSBleGl0IGFjdGlvbiAqLworICAgIC8qKiBIYW5kbGVyIGZvciBBZ2VudFgtUmVzcG9uc2UtUERVJ3MgKi8KKyAgICB2b2lkICgqcmVzcG9uc2UpKHRTdGF0ZSBzZWxmLCBuZXRzbm1wX3BkdSAqcmVzKTsKKyAgICAvKiogU3RhdGUgdG8gY2hhbmdlIHRvIGlmIGFuIEFnZW50WCB0aW1lb3V0IG9jY3VycyBvciB0aGUgdGltZXIgcnVucyBvdXQgKi8KKyAgICB0U3RhdGUgdGltZW91dDsKKyAgICB2b2lkICgqZGlzY29ubmVjdCkodFN0YXRlIHNlbGYpOyAvKio8PCBIYW5kbGVyIGZvciBkaXNjb25uZWN0IGluZGljYXRpb25zICovCisgICAgLyoqIEhhbmRsZXIgZm9yIENsb3NlLVBEVSBpbmRpY2F0aW9ucyAqLworICAgIHZvaWQgKCpjbG9zZSkodFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICpyZXMpOworICAgIGNvbnN0IGNoYXIqIG5hbWU7IC8qKjw8IE5hbWUgb2YgdGhlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICBpbnQgaXNfb3BlbjsgLyoqPDwgSWYgdGhlIGNvbm5lY3Rpb24gaXMgb3BlbiBpbiB0aGlzIHN0YXRlICovCit9OworCitzdGF0aWMgdFN0YXRlIHN0YXRlOyAvKio8PCBDdXJyZW50IHN0YXRlIG9mIHRoZSBzdGF0ZSBtYWNoaW5lICovCitzdGF0aWMgdFN0YXRlIG5leHRfc3RhdGU7IC8qKjw8IE5leHQgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgICpjb250ZXh0ID0gTlVMTDsgLyoqPDwgQ29udGV4dCB0aGF0IGRlbGl2ZXJzIHRoZSB0cmFwICovCitzdGF0aWMgc2l6ZV90ICAgICAgIGNvbnRleHRMZW47IC8qKjw8IExlbmd0aCBvZiBldmVudHVhbCBjb250ZXh0ICovCitzdGF0aWMgaW50ICAgICAgICAgIHJlc3VsdCA9IDE7IC8qKjw8IFByb2dyYW0gcmV0dXJuIHZhbHVlICovCitzdGF0aWMgbmV0c25tcF9wZHUgKnBkdSA9IE5VTEw7IC8qKjw8IFRoZSB0cmFwIHBkdSB0aGF0IGlzIHRvIGJlIHNlbnQgKi8KKy8qKiBUaGUgcmVmZXJlbmNlIG51bWJlciBvZiB0aGUgbmV4dCBwYWNrZXQgKi8KK3N0YXRpYyBsb25nICAgICAgICAgcGFja2V0aWQgPSAwOworLyoqIFRoZSBzZXNzaW9uIGlkIG9mIHRoZSBzZXNzaW9uIHRvIHRoZSBtYXN0ZXIgKi8KK3N0YXRpYyBsb25nICAgICAgICAgc2Vzc2lvbjsKK3N0YXRpYyB2b2lkICAgICAgICAqc2Vzc3AgPSBOVUxMOyAvKio8PCBUaGUgY3VycmVudCBjb21tdW5pY2F0aW9uIHNlc3Npb24gKi8KKworI2RlZmluZSBTVEFURV9DQUxMKG1ldGhvZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKCFzdGF0ZS0+bWV0aG9kKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gIiAjbWV0aG9kICIgbWV0aG9kIGluICVzLCB0ZXJtaW5hdGluZ1xuIiwgXAorICAgICAgICAgICAgICAgICBzdGF0ZS0+bmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhYm9ydCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0ZS0+bWV0aG9kCisKK3N0YXRpYyB2b2lkCitjaGFuZ2Vfc3RhdGUodFN0YXRlIG5ld19zdGF0ZSkKK3sKKyAgICBpZiAobmV4dF9zdGF0ZSAmJiBuZXh0X3N0YXRlICE9IG5ld19zdGF0ZSkKKyAgICAgICAgREVCVUdNU0dUTCgoInByb2Nlc3MiLCAiSWdub3JlIHRyYW5zaXRpb24gdG8gJXNcbiIsIG5leHRfc3RhdGUtPm5hbWUpKTsKKyAgICBuZXh0X3N0YXRlID0gbmV3X3N0YXRlOworfQorCitzdGF0aWMgaW50CitoYW5kbGVfYWdlbnR4X3Jlc3BvbnNlKGludCBvcGVyYXRpb24sIG5ldHNubXBfc2Vzc2lvbiAqc3AsIFVOVVNFRCBpbnQgcmVxaWQsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICphY3QsIFVOVVNFRCB2b2lkICptYWdpYykKK3sKKyAgICBzd2l0Y2gob3BlcmF0aW9uKSB7CisgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0U6CisgICAgICAgIGlmKGFjdC0+Y29tbWFuZCA9PSBBR0VOVFhfTVNHX0NMRUFOVVBTRVQpIHsKKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgLSBubyByZXNwb25zZSBhbmQgbm8gYWN0aW9uIGFzIG5vdGhpbmcgZ2V0CisgICAgICAgICAgICAgKiBhbGxvY2F0ZWQgaW4gYW55IGhhbmRsZXIgaGVyZQorICAgICAgICAgICAgICovCisgICAgICAgIH0gZWxzZSBpZihhY3QtPmNvbW1hbmQgIT0gQUdFTlRYX01TR19SRVNQT05TRSkgeworICAgICAgICAgICAgLyogQ29weSB0aGUgaGVhZCB0byBhIHJlc3BvbnNlICovCisgICAgICAgICAgICBuZXRzbm1wX3BkdSogcmVzID0gc25tcF9zcGxpdF9wZHUoYWN0LCAwLCAwKTsKKyAgICAgICAgICAgIHJlcy0+Y29tbWFuZCA9IEFHRU5UWF9NU0dfUkVTUE9OU0U7CisgICAgICAgICAgICBpZiAoYWN0LT5zZXNzaWQgIT0gc2Vzc2lvbiB8fCAhc3RhdGUtPmlzX29wZW4pCisgICAgICAgICAgICAgICAgcmVzLT5lcnJzdGF0ID0gQUdFTlRYX0VSUl9OT1RfT1BFTjsKKyAgICAgICAgICAgIGlmKHJlcy0+ZXJyc3RhdCA9PSBBR0VOVFhfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgc3dpdGNoKGFjdC0+Y29tbWFuZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQUdFTlRYX01TR19HRVQ6CisgICAgICAgICAgICAgICAgICAgIHJlcy0+dmFyaWFibGVzID0gc25tcF9jbG9uZV92YXJiaW5kKGFjdC0+dmFyaWFibGVzKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9yZXNldF92YXJfdHlwZXMocmVzLT52YXJpYWJsZXMsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX0dFVE5FWFQ6CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX0dFVEJVTEs6CisgICAgICAgICAgICAgICAgICAgIHJlcy0+dmFyaWFibGVzID0gc25tcF9jbG9uZV92YXJiaW5kKGFjdC0+dmFyaWFibGVzKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9yZXNldF92YXJfdHlwZXMocmVzLT52YXJpYWJsZXMsIFNOTVBfRU5ET0ZNSUJWSUVXKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX1RFU1RTRVQ6CisgICAgICAgICAgICAgICAgICAgIHJlcy0+ZXJyc3RhdCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgICAgICAgICByZXMtPmVycmluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX0NPTU1JVFNFVDoKKyAgICAgICAgICAgICAgICAgICAgcmVzLT5lcnJzdGF0ID0gU05NUF9FUlJfQ09NTUlURkFJTEVEOworICAgICAgICAgICAgICAgICAgICByZXMtPmVycmluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX1VORE9TRVQ6CisgICAgICAgICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgLSBjb3VsZCB1bmRvIG5vdCBzZXR0aW5nIGFueSB2YWx1ZSA6LSkgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX0NMT1NFOgorICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgbGV0IHRoZSBtYXN0ZXIgc3VjY2VlZCEgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93biBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgIHJlcy0+ZXJyc3RhdCA9IEFHRU5UWF9FUlJfUEFSU0VfRkFJTEVEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihzbm1wX3NlbmQoc3AsIHJlcykgPT0gMCkKKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHJlcyk7CisgICAgICAgICAgICBzd2l0Y2goYWN0LT5jb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfQ0xPU0U6CisgICAgICAgICAgICAgICAgLyogVGFrZSBhY3Rpb24gb25jZSB0aGUgYW5zd2VyIGlzIHNlbnQhICovCisgICAgICAgICAgICAgICAgU1RBVEVfQ0FMTChjbG9zZSkoc3RhdGUsIGFjdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAvKiBSRVNQT05TRSBhY3QtPnRpbWUsIGFjdC0+ZXJyc3RhdCwgYWN0LT5lcnJpbmRleCwgdmFybGlzdCAqLworICAgICAgICAgICAgU1RBVEVfQ0FMTChyZXNwb25zZSkoc3RhdGUsIGFjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQ6CisgICAgICAgIGNoYW5nZV9zdGF0ZShzdGF0ZS0+dGltZW91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTkVUU05NUF9DQUxMQkFDS19PUF9ESVNDT05ORUNUOgorICAgICAgICBTVEFURV9DQUxMKGRpc2Nvbm5lY3QpKHN0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitleHRlcm4gY29uc3Qgc3RydWN0IHRTdGF0ZV9zIENvbm5lY3Rpbmc7CitleHRlcm4gY29uc3Qgc3RydWN0IHRTdGF0ZV9zIE9wZW5pbmc7CitleHRlcm4gY29uc3Qgc3RydWN0IHRTdGF0ZV9zIE5vdGlmeWluZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgQ2xvc2luZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgRGlzY29ubmVjdGluZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgRXhpdDsKKworc3RhdGljIHZvaWQKK1N0YXRlRGlzY29ubmVjdChVTlVTRUQgdFN0YXRlIHNlbGYpCit7CisgICAgc25tcF9sb2coTE9HX0VSUiwgIlVuZXhwZWN0ZWQgZGlzY29ubmVjdCBpbiBzdGF0ZSAlc1xuIiwgc2VsZi0+bmFtZSk7CisgICAgY2hhbmdlX3N0YXRlKCZEaXNjb25uZWN0aW5nKTsKK30KKworc3RhdGljIHZvaWQKK1N0YXRlQ2xvc2UoVU5VU0VEIHRTdGF0ZSBzZWxmLCBuZXRzbm1wX3BkdSAqYWN0KQoreworICAgIHNubXBfbG9nKExPR19FUlIsICJVbmV4cGVjdGVkIGNsb3NlIHdpdGggcmVhc29uIGNvZGUgJWxkIGluIHN0YXRlICVzXG4iLAorICAgICAgICAgICAgIGFjdC0+ZXJyc3RhdCwgc2VsZi0+bmFtZSk7CisgICAgY2hhbmdlX3N0YXRlKCZEaXNjb25uZWN0aW5nKTsKK30KKworc3RhdGljIHZvaWQKK0Nvbm5lY3RpbmdFbnRyeShVTlVTRUQgdFN0YXRlIHNlbGYpCit7CisgICAgbmV0c25tcF9zZXNzaW9uIGluaXQ7CisgICAgbmV0c25tcF90cmFuc3BvcnQqIHQ7CisgICAgdm9pZCogc2VzczsKKworICAgIGlmKHNlc3NwKSB7CisgICAgICAgIHNubXBfc2Vzc19jbG9zZShzZXNzcCk7CisgICAgICAgIHNlc3NwID0gTlVMTDsKKyAgICB9CisKKyAgICBzbm1wX3Nlc3NfaW5pdCgmaW5pdCk7CisgICAgaW5pdC52ZXJzaW9uID0gQUdFTlRYX1ZFUlNJT05fMTsKKyAgICBpbml0LnJldHJpZXMgPSAwOyAvKiBSZXRyaWVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lICovCisgICAgaW5pdC50aW1lb3V0ID0gU05NUF9ERUZBVUxUX1RJTUVPVVQ7CisgICAgaW5pdC5mbGFncyB8PSBTTk1QX0ZMQUdTX1NUUkVBTV9TT0NLRVQ7CisgICAgaW5pdC5jYWxsYmFjayA9IGhhbmRsZV9hZ2VudHhfcmVzcG9uc2U7CisgICAgaW5pdC5hdXRoZW50aWNhdG9yID0gTlVMTDsKKworICAgIGlmKCEodCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50KAorICAgICAgICAgICAgICJhZ2VudHgiLCBuZXRzbm1wX2RzX2dldF9zdHJpbmcoCisgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQpKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBjb25uZWN0IHRvIEFnZW50WCBzZXJ2ZXJcbiIpOworICAgICAgICBjaGFuZ2Vfc3RhdGUoJkV4aXQpOworICAgIH0gZWxzZSBpZighKHNlc3MgPSBzbm1wX3Nlc3NfYWRkX2V4KAorICAgICAgICAgICAgICAgICAgICAmaW5pdCwgdCwgTlVMTCwgYWdlbnR4X3BhcnNlLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVhbGxvY19idWlsZCwgYWdlbnR4X2NoZWNrX3BhY2tldCwgTlVMTCkpKSB7CisgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uXG4iKTsKKyAgICAgICAgY2hhbmdlX3N0YXRlKCZFeGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZXNzcCA9IHNlc3M7CisgICAgICAgIGNoYW5nZV9zdGF0ZSgmT3BlbmluZyk7CisgICAgfQorfQorCitjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgQ29ubmVjdGluZyA9IHsKKyAgICBDb25uZWN0aW5nRW50cnksCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgU3RhdGVEaXNjb25uZWN0LAorICAgIE5VTEwsCisgICAgIkNvbm5uZWN0aW5nIiwKKyAgICAwCit9OworCitzdGF0aWMgbmV0c25tcF9wZHUqCitwZHVfY3JlYXRlX29wdF9jb250ZXh0KGludCBjb21tYW5kLCBjb25zdCBjaGFyKiBjb250ZXh0LCBzaXplX3QgbGVuKQoreworICAgIG5ldHNubXBfcGR1KiByZXMgPSBzbm1wX3BkdV9jcmVhdGUoY29tbWFuZCk7CisgICAgaWYgKHJlcykKKyAgICAgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgICAgIGlmIChzbm1wX2Nsb25lX21lbSgodm9pZCoqKSZyZXMtPmNvbnRleHROYW1lLCBjb250ZXh0LCBsZW4pKSB7CisgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShyZXMpOworICAgICAgICAgICAgICAgIHJlcyA9IE5VTEw7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXMtPmNvbnRleHROYW1lTGVuID0gbGVuOworICAgICAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK09wZW5pbmdFbnRyeShVTlVTRUQgdFN0YXRlIHNlbGYpCit7CisgICAgbmV0c25tcF9wZHUqIGFjdCA9CisgICAgICAgIHBkdV9jcmVhdGVfb3B0X2NvbnRleHQoQUdFTlRYX01TR19PUEVOLCBjb250ZXh0LCBjb250ZXh0TGVuKTsKKyAgICBpZihhY3QpIHsKKyAgICAgICAgYWN0LT5zZXNzaWQgPSAwOworICAgICAgICBhY3QtPnRyYW5zaWQgPSAwOworICAgICAgICBhY3QtPnJlcWlkID0gKytwYWNrZXRpZDsKKyAgICAgICAgYWN0LT50aW1lID0gMDsKKyAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKGFjdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgTlVMTCwgMCk7CisgICAgICAgIGlmKHNubXBfc2Vzc19zZW5kKHNlc3NwLCBhY3QpID09IDApCisgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGFjdCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorT3BlbmluZ1JlcyhVTlVTRUQgdFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICphY3QpCit7CisgICAgaWYoYWN0LT5lcnJzdGF0ID09IEFHRU5UWF9FUlJfTk9FUlJPUikgeworICAgICAgICBzZXNzaW9uID0gYWN0LT5zZXNzaWQ7CisgICAgICAgIGNoYW5nZV9zdGF0ZSgmTm90aWZ5aW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gc2Vzc2lvbiIpOworICAgICAgICBjaGFuZ2Vfc3RhdGUoJkV4aXQpOworICAgIH0KK30KKworY29uc3Qgc3RydWN0IHRTdGF0ZV9zIE9wZW5pbmcgPSB7CisgICAgT3BlbmluZ0VudHJ5LAorICAgIE5VTEwsCisgICAgT3BlbmluZ1JlcywKKyAgICAmRGlzY29ubmVjdGluZywKKyAgICBTdGF0ZURpc2Nvbm5lY3QsCisgICAgU3RhdGVDbG9zZSwKKyAgICAiT3BlbmluZyIsCisgICAgMAorfTsKKworc3RhdGljIHZvaWQKK05vdGlmeWluZ0VudHJ5KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBuZXRzbm1wX3BkdSogYWN0ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKKyAgICBpZihhY3QpIHsKKyAgICAgICAgYWN0LT5zZXNzaWQgPSBzZXNzaW9uOworICAgICAgICBhY3QtPnRyYW5zaWQgPSAwOworICAgICAgICBhY3QtPnJlcWlkID0gKytwYWNrZXRpZDsKKyAgICAgICAgaWYoc25tcF9zZXNzX3NlbmQoc2Vzc3AsIGFjdCkgPT0gMCkKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoYWN0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitOb3RpZnlpbmdSZXMoVU5VU0VEIHRTdGF0ZSBzZWxmLCBuZXRzbm1wX3BkdSAqYWN0KQoreworICAgIGlmKGFjdC0+ZXJyc3RhdCA9PSBBR0VOVFhfRVJSX05PRVJST1IpCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgZWxzZQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIik7CisgICAgLyoqIFx0b2RvOiBSZXRyeSBoYW5kbGluZyAtLS0gQ2xvc2luZ1JlY29ubmVjdD8/PyAqLworICAgIGNoYW5nZV9zdGF0ZSgmQ2xvc2luZyk7Cit9CisKK2NvbnN0IHN0cnVjdCB0U3RhdGVfcyBOb3RpZnlpbmcgPSB7CisgICAgTm90aWZ5aW5nRW50cnksCisgICAgTlVMTCwKKyAgICBOb3RpZnlpbmdSZXMsCisgICAgTlVMTCwgICAgICAgICAgICAvKiogXHRvZG86IFJldHJ5IGhhbmRsaW5nPyAqLworICAgIFN0YXRlRGlzY29ubmVjdCwgLyoqIFx0b2RvOiBSZXRyeSBoYW5kbGluZz8gKi8KKyAgICBTdGF0ZUNsb3NlLAorICAgICJOb3RpZnlpbmciLAorICAgIDEKK307CisKK3N0YXRpYyB2b2lkCitDbG9zaW5nRW50cnkoVU5VU0VEIHRTdGF0ZSBzZWxmKQoreworICAgIC8qIENMT1NFIHBkdS0+ZXJyc3RhdCAqLworICAgIG5ldHNubXBfcGR1KiBhY3QgPQorICAgICAgICBwZHVfY3JlYXRlX29wdF9jb250ZXh0KEFHRU5UWF9NU0dfQ0xPU0UsIGNvbnRleHQsIGNvbnRleHRMZW4pOworICAgIGlmKGFjdCkgeworICAgICAgICBhY3QtPnNlc3NpZCA9IHNlc3Npb247CisgICAgICAgIGFjdC0+dHJhbnNpZCA9IDA7CisgICAgICAgIGFjdC0+cmVxaWQgPSArK3BhY2tldGlkOworICAgICAgICBhY3QtPmVycnN0YXQgPSBBR0VOVFhfQ0xPU0VfU0hVVERPV047CisgICAgICAgIGlmKHNubXBfc2Vzc19zZW5kKHNlc3NwLCBhY3QpID09IDApCisgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGFjdCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorQ2xvc2luZ1JlcyhVTlVTRUQgdFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICphY3QpCit7CisgICAgaWYoYWN0LT5lcnJzdGF0ICE9IEFHRU5UWF9FUlJfTk9FUlJPUikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQWdlbnRYIGVycm9yIHN0YXR1cyBvZiAlbGRcbiIsIGFjdC0+ZXJyc3RhdCk7CisgICAgfQorICAgIGNoYW5nZV9zdGF0ZSgmRGlzY29ubmVjdGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitDbG9zaW5nRGlzY29ubmVjdChVTlVTRUQgdFN0YXRlIHNlbGYpCit7CisgICAgY2hhbmdlX3N0YXRlKCZEaXNjb25uZWN0aW5nKTsKK30KKworc3RhdGljIHZvaWQKK0Nsb3NpbmdDbG9zZShVTlVTRUQgdFN0YXRlIHNlbGYsIFVOVVNFRCBuZXRzbm1wX3BkdSAqYWN0KQoreworICAgIGNoYW5nZV9zdGF0ZSgmRGlzY29ubmVjdGluZyk7Cit9CisKK2NvbnN0IHN0cnVjdCB0U3RhdGVfcyBDbG9zaW5nID0geworICAgIENsb3NpbmdFbnRyeSwKKyAgICBOVUxMLAorICAgIENsb3NpbmdSZXMsCisgICAgJkRpc2Nvbm5lY3RpbmcsCisgICAgQ2xvc2luZ0Rpc2Nvbm5lY3QsCisgICAgQ2xvc2luZ0Nsb3NlLAorICAgICJDbG9zaW5nIiwKKyAgICAxCit9OworCitzdGF0aWMgdm9pZAorRGlzY29ubmVjdGluZ0VudHJ5KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBzbm1wX3Nlc3NfY2xvc2Uoc2Vzc3ApOworICAgIHNlc3NwID0gTlVMTDsKKyAgICBjaGFuZ2Vfc3RhdGUoJkV4aXQpOworfQorCitjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgRGlzY29ubmVjdGluZyA9IHsKKyAgICBEaXNjb25uZWN0aW5nRW50cnksCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgICJEaXNjb25uZWN0aW5nIiwKKyAgICAwCit9OworCitjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgRXhpdCA9IHsKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICAiRXhpdCIsCisgICAgMAorfTsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50ICAgICAgICAgICAgIGFyZzsKKyAgICBjaGFyICAgICAgICAgICAqcHJvZ25hbTsKKyAgICBjaGFyICAgICAgICAgICAqY3AgPSBOVUxMOworCisgICAgY29uc3QgY2hhciogICAgIHN5c1VwVGltZSA9IE5VTEw7CisKKyAgICBwcm9nbmFtID0gc3RycmNocihhcmd2WzBdLCAnLycpOworICAgIGlmIChwcm9nbmFtKQorICAgICAgICArK3Byb2duYW07CisgICAgZWxzZQorICAgICAgICBwcm9nbmFtID0gYXJndlswXTsKKworICAgIHB1dGVudihzdHJkdXAoIlBPU0lYTFlfQ09SUkVDVD0xIikpOworCisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisJCQkgICBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfTE9BRCwgMSk7CisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisJCQkgICBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfU0FWRSwgMSk7CisKKyAgICB3aGlsZSAoKGFyZyA9IGdldG9wdChhcmdjLCBhcmd2LCAiOlZobTpNOkQ6ZFA6TDpVOmM6eDoiKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChhcmcpIHsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICB1c2FnZShwcm9nbmFtKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgc2V0ZW52KCJNSUJTIiwgb3B0YXJnLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgIHNldGVudigiTUlCRElSUyIsIG9wdGFyZywgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICBjb250ZXh0ID0gb3B0YXJnOworICAgICAgICAgICAgY29udGV4dExlbiA9IHN0cmxlbihjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhvcHRhcmcpOworICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdVJzoKKyAgICAgICAgICAgIHN5c1VwVGltZSA9IG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTkVULVNOTVAgdmVyc2lvbjogJXNcbiIsIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIERJU0FCTEVfTUlCX0xPQURJTkcKKyAgICAgICAgY2FzZSAnUCc6CisgICAgICAgICAgICBjcCA9IHNubXBfbWliX3RvZ2dsZV9vcHRpb25zKG9wdGFyZyk7CisgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBwYXJzZXIgb3B0aW9uIHRvIC1QOiAlYy5cbiIsICpjcCk7CisgICAgICAgICAgICAgICAgdXNhZ2UocHJvZ25hbSk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIERJU0FCTEVfTUlCX0xPQURJTkcgKi8KKyAgICAgICAgY2FzZSAnTCc6CisgICAgICAgICAgICBpZiAoc25tcF9sb2dfb3B0aW9ucyhvcHRhcmcsIGFyZ2MsIGFyZ3YpIDwgMCkgeworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBpZiAob3B0YXJnICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVCwgb3B0YXJnKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAtJWMgcmVxdWlyZXMgYW4gb3BlcmFuZFxuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgIHVzYWdlKHByb2duYW0pOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5yZWNvZ25pemVkIG9wdGlvbjogLSVjXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgdXNhZ2UocHJvZ25hbSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhcmcgPSBvcHRpbmQ7CisKKyAgICAvKiBpbml0aWFsaXplIHRjcGlwLCBpZiBuZWNlc3NhcnkgKi8KKyAgICBTT0NLX1NUQVJUVVA7CisKKyAgICBpbml0X3NubXAoInNubXBhcHAiKTsKKyAgICBhZ2VudHhfY29uZmlnX2luaXQoKTsKKworICAgIC8qIE5PVElGWSB2YXJsaXN0ICovCisgICAgcGR1ID0gcGR1X2NyZWF0ZV9vcHRfY29udGV4dChBR0VOVFhfTVNHX05PVElGWSwgY29udGV4dCwgY29udGV4dExlbik7CisKKyAgICBpZiAoc3lzVXBUaW1lKQorICAgICAgICBzbm1wX2FkZF92YXIocGR1LCBzeXN1cHRpbWVfb2lkLCBzeXN1cHRpbWVfb2lkX2xlbiwgJ3QnLCBzeXNVcFRpbWUpOworCisgICAgaWYgKGFyZyA9PSBhcmdjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWlzc2luZyB0cmFwLW9pZCBwYXJhbWV0ZXJcbiIpOworICAgICAgICB1c2FnZShwcm9nbmFtKTsKKyAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmIChzbm1wX2FkZF92YXIocGR1LCBzbm1wdHJhcF9vaWQsIHNubXB0cmFwX29pZF9sZW4sICdvJywgYXJndlthcmddKSkgeworICAgICAgICBzbm1wX3BlcnJvcihhcmd2W2FyZ10pOworICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgICsrYXJnOworCisgICAgd2hpbGUgKGFyZyA8IGFyZ2MpIHsKKyAgICAgICAgb2lkICAgIG5hbWVbTUFYX09JRF9MRU5dOworICAgICAgICBzaXplX3QgbmFtZV9sZW5ndGggPSBNQVhfT0lEX0xFTjsKKyAgICAgICAgYXJnICs9IDM7CisgICAgICAgIGlmIChhcmcgPiBhcmdjKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBNaXNzaW5nIHR5cGUvdmFsdWUgZm9yIHZhcmlhYmxlXG4iLAorICAgICAgICAgICAgICAgICAgICBhcmd2W2FyZyAtIDNdKTsKKyAgICAgICAgICAgIFNPQ0tfQ0xFQU5VUDsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzbm1wX3BhcnNlX29pZChhcmd2W2FyZyAtIDNdLCBuYW1lLCAmbmFtZV9sZW5ndGgpKSB7CisgICAgICAgICAgICBzbm1wX3BlcnJvcihhcmd2W2FyZyAtIDNdKTsKKyAgICAgICAgICAgIFNPQ0tfQ0xFQU5VUDsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNubXBfYWRkX3ZhcihwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBhcmd2W2FyZyAtIDJdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYXJnIC0gMV0pICE9IDApIHsKKyAgICAgICAgICAgIHNubXBfcGVycm9yKGFyZ3ZbYXJnIC0gM10pOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBhY2tldGlkID0gMDsKKworICAgIHN0YXRlID0gJkNvbm5lY3Rpbmc7CisgICAgbmV4dF9zdGF0ZSA9IE5VTEw7CisgICAgaWYoc3RhdGUtPmVudHJ5KSBzdGF0ZS0+ZW50cnkoc3RhdGUpOworCisgICAgLyogbWFpbiBsb29wIGhlcmUuLi4gKi8KKyAgICBmb3IoOzspIHsKKyAgICAgICAgaW50IGJsb2NrID0gMTsKKyAgICAgICAgaW50IG51bWZkcyA9IDA7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgZmRfc2V0IGZkc2V0OworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCisgICAgICAgIHdoaWxlKG5leHRfc3RhdGUpIHsKKyAgICAgICAgICAgIGlmKHN0YXRlLT5leGl0KSBzdGF0ZS0+ZXhpdChzdGF0ZSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicHJvY2VzcyIsICJTdGF0ZSB0cmFuc2l0aW9uOiAlcyAtPiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5uYW1lLCBuZXh0X3N0YXRlLT5uYW1lKSk7CisgICAgICAgICAgICBzdGF0ZSA9IG5leHRfc3RhdGU7CisgICAgICAgICAgICBuZXh0X3N0YXRlID0gTlVMTDsKKyAgICAgICAgICAgIGlmKHN0YXRlLT5lbnRyeSkgc3RhdGUtPmVudHJ5KHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHN0YXRlID09ICZFeGl0KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgRkRfWkVSTygmZmRzZXQpOworICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oc2Vzc3AsICZudW1mZHMsICZmZHNldCwgJnRpbWVvdXQsICZibG9jayk7CisgICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCBOVUxMLCBOVUxMLCAhYmxvY2sgPyAmdGltZW91dCA6IE5VTEwpOworICAgICAgICBpZiAoY291bnQgPiAwKQorICAgICAgICAgICAgc25tcF9zZXNzX3JlYWQoc2Vzc3AsICZmZHNldCk7CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICBzbm1wX3Nlc3NfdGltZW91dChzZXNzcCk7CisgICAgICAgIGVsc2UgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2VsZWN0IGVycm9yIFslc11cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBjaGFuZ2Vfc3RhdGUoJkV4aXQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogYXQgc2h1dGRvd24gdGltZSAqLworICAgIHNubXBfZnJlZV9wZHUocGR1KTsKKyAgICBwZHUgPSBOVUxMOworCisgICAgc25tcF9zaHV0ZG93bigic25tcGFwcCIpOworCisgICAgU09DS19DTEVBTlVQOworICAgIGV4aXQocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL2FwcHMvZW5jb2RlX2tleWNoYW5nZS5jIGIvYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMKaW5kZXggNWI2ODM4ZS4uNWJmOGU0YyAxMDA2NDQKLS0tIGEvYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMKKysrIGIvYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMKQEAgLTM4LDEwICszOCw2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjMzLDggKzIyOSw4IEBACiAgICAgICAgIGVuZ2luZWlkX2xlbiA9IGhleF90b19iaW5hcnkyKGVuZ2luZWlkICsgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKChjaGFyICopIGVuZ2luZWlkKSAtIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmZW5naW5laWQpOwotICAgICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJlbmdpbmVJRExlbjogJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGVuZ2luZWlkX2xlbikpOworICAgICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJlbmdpbmVJRExlbjogJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyllbmdpbmVpZF9sZW4pKTsKICAgICB9IGVsc2UgewogICAgICAgICBlbmdpbmVpZF9sZW4gPSBzZXR1cF9lbmdpbmVJRCgmZW5naW5laWQsIChjaGFyICopIGVuZ2luZWlkKTsKIApAQCAtMjk1LDEyICsyOTEsMTIgQEAKICAgICBRVUlURlVOKHJ2YWwsIG1haW5fcXVpdCk7CiAKIAotICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIkVJRCAoJWQpOiAiLCBlbmdpbmVpZF9sZW4pKTsKKyAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJFSUQgKCVsdSk6ICIsICh1bnNpZ25lZCBsb25nKWVuZ2luZWlkX2xlbikpOwogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBlbmdpbmVpZF9sZW47IGkrKykKICAgICAgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiJTAyeCIsIChpbnQpIChlbmdpbmVpZFtpXSkpKTsKICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJcbiIpKTsKIAotICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIm9sZCBLdSAoJWQpIChmcm9tICVzKTogIiwgb2xkS3VfbGVuLAorICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIm9sZCBLdSAoJWx1KSAoZnJvbSAlcyk6ICIsICh1bnNpZ25lZCBsb25nKW9sZEt1X2xlbiwKICAgICAgICAgICAgICAgICBvbGRwYXNzKSk7CiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG9sZEt1X2xlbjsgaSsrKQogICAgICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICIlMDJ4IiwgKGludCkgKG9sZEt1W2ldKSkpOwpAQCAtMzEyLDggKzMwOCw4IEBACiAgICAgUVVJVEZVTihydmFsLCBtYWluX3F1aXQpOwogCiAKLSAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJnZW5lcmF0aW5nIG9sZCBLdWwgKCVkKSAoZnJvbSBLdSk6ICIsCi0gICAgICAgICAgICAgICAgb2xka3VsX2xlbikpOworICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImdlbmVyYXRpbmcgb2xkIEt1bCAoJWx1KSAoZnJvbSBLdSk6ICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpb2xka3VsX2xlbikpOwogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBvbGRrdWxfbGVuOyBpKyspCiAgICAgICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIiUwMngiLCAoaW50KSAob2xka3VsW2ldKSkpOwogICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIlxuIikpOwpAQCAtMzIzLDggKzMxOSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdLdSwgbmV3S3VfbGVuLCBuZXdrdWwsICZuZXdrdWxfbGVuKTsKICAgICBRVUlURlVOKHJ2YWwsIG1haW5fcXVpdCk7CiAKLSAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJnZW5lcmF0aW5nIG5ldyBLdWwgKCVkKSAoZnJvbSBLdSk6ICIsCi0gICAgICAgICAgICAgICAgb2xka3VsX2xlbikpOworICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImdlbmVyYXRpbmcgbmV3IEt1bCAoJWx1KSAoZnJvbSBLdSk6ICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpb2xka3VsX2xlbikpOwogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBuZXdrdWxfbGVuOyBpKyspCiAgICAgICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIiUwMngiLCBuZXdrdWxbaV0pKTsKICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICJcbiIpKTsKQEAgLTM5NCwyMiArMzkwLDIyIEBACiAKICAgICB1c2FnZV9zeW5vcHNpcyhvZnApOwogCi0gICAgZnByaW50ZihvZnAsICJcblwKLSAgICBPbmx5IC10IGlzIG1hbmRhdG9yeS4gIFRoZSB0cmFuc2Zvcm0gaXMgdXNlZCB0byBjb252ZXJ0IFA9Pkt1LCBjb252ZXJ0XG5cCi0gICAgS3U9Pkt1bCwgYW5kIHRvIGhhc2ggdGhlIG9sZCBLdWwgd2l0aCB0aGUgcmFuZG9tIGJpdHMuXG5cCi1cblwKLSAgICBQYXNzcGhyYXNlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBzb3VyY2UgYXMgZm9sbG93czpcblwKKyAgICBmcHJpbnRmKG9mcCwgIlxuJXNcCiAJYSkgQ29tbWFuZGxpbmUgb3B0aW9ucyxcblwKIAliKSBUaGUgZmlsZSBcIiVzLyVzXCIsXG5cCi0JYykgc3RkaW4gIC1vci0gIFVzZXIgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwuXG5cCisJYykgc3RkaW4gIC1vci0gIFVzZXIgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwuXG5cbiVzXAorCQkiIE5MLAorICAgIk9ubHkgLXQgaXMgbWFuZGF0b3J5LiAgVGhlIHRyYW5zZm9ybSBpcyB1c2VkIHRvIGNvbnZlcnQgUD0+S3UsIGNvbnZlcnRcblwKKyAgICBLdT0+S3VsLCBhbmQgdG8gaGFzaCB0aGUgb2xkIEt1bCB3aXRoIHRoZSByYW5kb20gYml0cy5cblwKIFxuXAotICAgIC1mIHdpbGwgcmVxdWlyZSByZWFkaW5nIGZyb20gdGhlIHN0ZGluL3Rlcm1pbmFsLCBpZ25vcmluZyBhKSBhbmQgYikuXG5cCisgICAgUGFzc3BocmFzZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgc291cmNlIGFzIGZvbGxvd3M6XG4iLAorICAgIChzID0gZ2V0ZW52KCJIT01FIikpID8gcyA6ICIkSE9NRSIsIGxvY2FsX3Bhc3NwaHJhc2VfZmlsZW5hbWUsCisgICAiLWYgd2lsbCByZXF1aXJlIHJlYWRpbmcgZnJvbSB0aGUgc3RkaW4vdGVybWluYWwsIGlnbm9yaW5nIGEpIGFuZCBiKS5cblwKICAgICAtUCB3aWxsIHByZXZlbnQgcHJvbXB0cyBmb3IgcGFzc3BocmFzZXMgdG8gc3Rkb3V0IGZyb20gYmVpbmcgcHJpbnRlZC5cblwKIFxuXAogICAgIDxlbmdpbmVJRD4gaXMgaW50ZXJwcmV0ZWQgYXMgYSBoZXggc3RyaW5nIHdoZW4gcHJlY2VlZGVkIGJ5IFwiMHhcIixcblwKICAgICBvdGhlcndpc2UgaXQgaXMgY3JlYXRlZCB0byBjb250YWluIFwidGV4dFwiLiAgSWYgbm90aGluZyBpcyBnaXZlbixcblwKLSAgICA8ZW5naW5lSUQ+IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZpcnN0IElQIGFkZHJlc3MgZm9yIHRoZSBsb2NhbCBob3N0LlxuXAotCQkiIE5MLCAocyA9IGdldGVudigiSE9NRSIpKSA/IHMgOiAiJEhPTUUiLCBsb2NhbF9wYXNzcGhyYXNlX2ZpbGVuYW1lKTsKKyAgICA8ZW5naW5lSUQ+IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZpcnN0IElQIGFkZHJlc3MgZm9yIHRoZSBsb2NhbCBob3N0LlxuIik7CiAKIAogICAgIC8qCkBAIC03NDQsMTIgKzc0MCwxNiBAQAogICAgICAgICB0aSA9IHNubXBfdHR5ZWNobygwLCAwKTsKICAgICB9CiAKLSAgICBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbik7CisgICAgYnVmcCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKIAogICAgIGlmICghYnZpc2libGUpIHsKICAgICAgICAgdGkgPSBzbm1wX3R0eWVjaG8oMCwgdGkpOwogICAgICAgICBmcHV0cygiXG4iLCBvZnApOwogICAgIH0KKyAgICBpZiAoIWJ1ZnApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBYm9ydGVkLi4uXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CiAKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hcHBzL3NubXBidWxrZ2V0LmMgYi9hcHBzL3NubXBidWxrZ2V0LmMKaW5kZXggYmM5Njg3Yy4uMmU5ZWUzNCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wYnVsa2dldC5jCisrKyBiL2FwcHMvc25tcGJ1bGtnZXQuYwpAQCAtNDIsMTEgKzQyLDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTYwLDkgKzU2LDYgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTEyMCw3ICsxMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG9wdGFyZyA9IGVuZHB0cjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3BhY2UoKm9wdGFyZykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpvcHRhcmcpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTUxLDkgKzE0NCwxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wYnVsa3dhbGsuYyBiL2FwcHMvc25tcGJ1bGt3YWxrLmMKaW5kZXggYjQ2YWY1OC4uMzc5ZDJhZSAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wYnVsa3dhbGsuYworKysgYi9hcHBzL3NubXBidWxrd2Fsay5jCkBAIC00MiwxMSArNDIsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjAsOSArNTYsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTU3LDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3B0YXJnID0gZW5kcHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNzcGFjZSgqb3B0YXJnKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKm9wdGFyZykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yMDksOSArMjAyLDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcHBzL3NubXBkZWx0YS5jIGIvYXBwcy9zbm1wZGVsdGEuYwppbmRleCA0ZjI4ZjQ3Li4wOGUyZWJjIDEwMDY0NAotLS0gYS9hcHBzL3NubXBkZWx0YS5jCisrKyBiL2FwcHMvc25tcGRlbHRhLmMKQEAgLTQ2LDExICs0Niw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjIsOSArNTgsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0yMjEsNyArMjE0LDcgQEAKICAgICAvKgogICAgICAqIE5vdyBmaWd1cmUgb3V0IHRoZSBhbW91bnQgb2YgdGltZSB0byBzbGVlcCAKICAgICAgKi8KLSAgICB0YXJnZXQgPSAoU2Vjb25kc0F0TmV4dEhvdXIgLSB0di0+dHZfc2VjKSAlIHNlY29uZHM7CisgICAgdGFyZ2V0ID0gKGludCkoU2Vjb25kc0F0TmV4dEhvdXIgLSB0di0+dHZfc2VjKSAlIHNlY29uZHM7CiAKICAgICByZXR1cm4gdGFyZ2V0OwogfQpAQCAtMjU2LDcgKzI0OSw3IEBACiAKICAgICBmb3IgKGNwID0gYnVmOyAqY3A7IGNwKyspOwogICAgIHdoaWxlIChjcCA+PSBidWYpIHsKLSAgICAgICAgaWYgKGlzYWxwaGEoKmNwKSkKKyAgICAgICAgaWYgKGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNwLS07CiAgICAgfQpAQCAtMjk2LDcgKzI4OSw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYmxhbmsgPSBUUlVFOwogICAgICAgICBmb3IgKGNwID0gYnVmOyAqY3A7IGNwKyspCi0gICAgICAgICAgICBpZiAoIWlzc3BhY2UoKmNwKSkgeworICAgICAgICAgICAgaWYgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkgewogICAgICAgICAgICAgICAgIGJsYW5rID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNTcsNyArMzUwLDcgQEAKICAgICB9CiAgICAgY291bnQgPSAxOwogICAgIHdoaWxlIChjb3VudCAhPSAwKSB7Ci0gICAgICAgIGNvdW50ID0gc2VsZWN0KDAsIDAsIDAsIDAsIHR2KTsKKyAgICAgICAgY291bnQgPSBzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVMTCwgdHYpOwogICAgICAgICBzd2l0Y2ggKGNvdW50KSB7CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDA4LDkgKzQwMSwxMSBAQAogICAgIGludCAgICAgICAgICAgICBleGl0X2NvZGUgPSAwOwogCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsICZvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKQEAgLTQzOSw3ICs0MzQsNyBAQAogCSAgICAJTUFYX0FSR1MpOwogCSAgICBleGl0KDEpOwogCX0KLSAgICAgICAgdmFyaW5mb1tjdXJyZW50X25hbWUrK10ubmFtZSA9IDA7CisgICAgICAgIHZhcmluZm9bY3VycmVudF9uYW1lKytdLm5hbWUgPSBOVUxMOwogICAgIH0KIAogICAgIFNPQ0tfU1RBUlRVUDsKQEAgLTczMSwxMiArNzI2LDEyIEBACiAKICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVF9USU1FT1VUKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRpbWVvdXQ6IE5vIFJlc3BvbnNlIGZyb20gJXNcbiIsIGdhdGV3YXkpOwotICAgICAgICAgICAgcmVzcG9uc2UgPSAwOworICAgICAgICAgICAgcmVzcG9uc2UgPSBOVUxMOwogICAgICAgICAgICAgZXhpdF9jb2RlID0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBzdGF0dXMgPT0gU1RBVF9FUlJPUiAqLwogICAgICAgICAgICAgc25tcF9zZXNzX3BlcnJvcigic25tcGRlbHRhIiwgc3MpOwotICAgICAgICAgICAgcmVzcG9uc2UgPSAwOworICAgICAgICAgICAgcmVzcG9uc2UgPSBOVUxMOwogICAgICAgICAgICAgZXhpdF9jb2RlID0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzL3NubXBkZi5jIGIvYXBwcy9zbm1wZGYuYwppbmRleCBhMGU5YjllLi4xNDRhNTA1IDEwMDY0NAotLS0gYS9hcHBzL3NubXBkZi5jCisrKyBiL2FwcHMvc25tcGRmLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogc25tcGRmLmMgLSBzZW5kIHNubXAgR0VUIHJlcXVlc3RzIHRvIGEgbmV0d29yayBlbnRpdHkuCisgKiBzbm1wZGYuYyAtIGRpc3BsYXkgZGlzayBzcGFjZSB1c2FnZSBvbiBhIG5ldHdvcmsgZW50aXR5IHZpYSBTTk1QLgogICoKICAqLwogCkBAIC01NCwxMSArNTQsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTcwLDkgKzY2LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtOTQsOSArODcsMTQgQEAKICAgICAgICAgICAgICJcdC1DdVx0VXNlIFVDRC1TTk1QIGRza1RhYmxlIHRvIGRvIHRoZSBjYWxjdWxhdGlvbnMuXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICJcdFx0W05vcm1hbGx5IHRoZSBIT1NULVJFU09VUkNFUy1NSUIgaXMgY29uc3VsdGVkIGZpcnN0Ll1cbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIlx0LUNoXHRQcmludCB1c2luZyBodW1hbiByZWFkYWJsZSBmb3JtYXQgKE1pQiwgR2lCLCBUaUIpXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJcdC1DSFx0UHJpbnQgdXNpbmcgaHVtYW4gcmVhZGFibGUgU0kgZm9ybWF0IChNQiwgR0IsIFRCKVxuIik7CiB9CiAKIGludCAgICAgICAgICAgICB1Y2RfbWliID0gMDsKK2ludCAgICAgICAgICAgICBodW1hbl91bml0cyA9IDA7CiAKIHN0YXRpYyB2b2lkCiBvcHRQcm9jKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgaW50IG9wdCkKQEAgLTEwOCw2ICsxMDYsMTIgQEAKICAgICAgICAgICAgIGNhc2UgJ3UnOgogICAgICAgICAgICAgICAgIHVjZF9taWIgPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgaHVtYW5fdW5pdHMgPSAxMDI0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnSCc6CisgICAgICAgICAgICAgICAgaHVtYW5fdW5pdHMgPSAxMDAwOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGZsYWcgcGFzc2VkIHRvIC1DOiAlY1xuIiwgb3B0YXJnWy0xXSk7CkBAIC0xNzMsMTQgKzE3NywxNCBAQAogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzcG9uc2UtPmVycnN0YXQgIT0gU05NUF9FUlJfTk9FUlJPUikgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgInNubXBkZjogRXJyb3IgaW4gcGFja2V0OiAlc1xuIiwKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic25tcGRmOiBFcnJvciBpbiBwYWNrZXQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICBzbm1wX2VycnN0cmluZyhyZXNwb25zZS0+ZXJyc3RhdCkpOwogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShyZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lLAotCQkJICAgICBTTk1QX01JTihiYXNlX2xlbmd0aCwKLQkJCQkgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCksCi0JCQkgICAgIGJhc2UsIGJhc2VfbGVuZ3RoKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX01JTihiYXNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBiYXNlX2xlbmd0aCkgIT0gMCkKICAgICAgICAgICAgIHJ1bm5pbmcgPSAwOwogICAgICAgICBlbHNlIGlmIChyZXNwb25zZS0+dmFyaWFibGVzLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UgfHwKICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCB8fApAQCAtMjEwLDYgKzIxNCwyNyBAQAogICAgIHJldHVybiBzYXZlZDsKIH0KIAorCisKK2NoYXIgKmZvcm1hdF9odW1hbihjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgbWVtLCB1bnNpZ25lZCBsb25nIHNjYWxlKQoreworICAgIGlmIChtZW0gPj0gc2NhbGUqc2NhbGUqc2NhbGUqc2NhbGUpCisgICAgICAgIHNucHJpbnRmKGJ1ZiwgbGVuLCAiJTQuMmZQJXNCIiwgKGZsb2F0KW1lbS8oc2NhbGUqc2NhbGUqc2NhbGUqc2NhbGUpLAorCQlzY2FsZSA9PSAxMDI0ID8gImkiIDogIiIpOworICAgIGVsc2UgaWYgKG1lbSA+PSBzY2FsZSpzY2FsZSpzY2FsZSkKKyAgICAgICAgc25wcmludGYoYnVmLCBsZW4sICIlNC4yZlQlc0IiLCAoZmxvYXQpbWVtLyhzY2FsZSpzY2FsZSpzY2FsZSksCisJCXNjYWxlID09IDEwMjQgPyAiaSIgOiAiIik7CisgICAgZWxzZSBpZiAobWVtID49IHNjYWxlKnNjYWxlKQorICAgICAgICBzbnByaW50ZihidWYsIGxlbiwgIiU0LjJmRyVzQiIsIChmbG9hdCltZW0vKHNjYWxlKnNjYWxlKSwKKwkJc2NhbGUgPT0gMTAyNCA/ICJpIiA6ICIiKTsKKyAgICBlbHNlIGlmIChtZW0gPj0gc2NhbGUpCisgICAgICAgIHNucHJpbnRmKGJ1ZiwgbGVuLCAiJTQuMmZNJXNCIiwgKGZsb2F0KW1lbS9zY2FsZSwKKwkJc2NhbGUgPT0gMTAyNCA/ICJpIiA6ICIiKTsKKyAgICBlbHNlCisgICAgICAgIHNucHJpbnRmKGJ1ZiwgbGVuLCAiJTQuMmZrQiIsIChmbG9hdCltZW0pOworICAgIHJldHVybiBidWY7Cit9CisKIC8qIENvbXB1dGVzIHZhbHVlKnVuaXRzL2Rpdmlzb3IgaW4gYW4gb3ZlcmZsb3ctcHJvb2Ygd2F5LgogICovCiB1bnNpZ25lZCBsb25nCkBAIC0yMzYsOSArMjYxLDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CkBAIC0yNjUsOCArMjkyLDE0IEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCi0gICAgcHJpbnRmKCIlLTE4cyAlMTVzICUxNXMgJTE1cyAlNXNcbiIsICJEZXNjcmlwdGlvbiIsICJzaXplIChrQikiLAorICAgIGlmIChodW1hbl91bml0cykgeworICAgICAgICBwcmludGYoIiUtMThzICUxMHMgJTEwcyAlMTBzICU1c1xuIiwgIkRlc2NyaXB0aW9uIiwgIlNpemUiLAogICAgICAgICAgICAiVXNlZCIsICJBdmFpbGFibGUiLCAiVXNlZCUiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHByaW50ZigiJS0xOHMgJTE1cyAlMTVzICUxNXMgJTVzXG4iLCAiRGVzY3JpcHRpb24iLCAiU2l6ZSAoa0IpIiwKKyAgICAgICAgICAgIlVzZWQiLCAiQXZhaWxhYmxlIiwgIlVzZWQlIik7CisgICAgfQogICAgIGlmICh1Y2RfbWliID09IDApIHsKICAgICAgICAgLyoKICAgICAgICAgICogKiBCZWdpbiBieSBmaW5kaW5nIGFsbCB0aGUgc3RvcmFnZSBwaWVjZXMgdGhhdCBhcmUgb2YKQEAgLTMyMSwxMiArMzU0LDI2IEBACiAgICAgICAgICAgICBpZiAodmxwMi0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSBnb3RvIG5leHQ7CiAgICAgICAgICAgICBoc3VzZWQgPSB2bHAyLT52YWwuaW50ZWdlciA/ICoodmxwMi0+dmFsLmludGVnZXIpIDogMDsKIAotICAgICAgICAgICAgcHJpbnRmKCIlLTE4cyAlMTVsdSAlMTVsdSAlMTVsdSAlNGx1JSVcbiIsIGRlc2NyLAotICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3NpemUsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSwKLSAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCB1bml0cywgMTAyNCkgOiBoc3VzZWQsCi0gICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZS1oc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgaHN1c2VkLCBoc3NpemUgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgMTAwLCBoc3NpemUpIDoKLSAgICAgICAgICAgICAgICAgICBoc3VzZWQpOworICAgICAgICAgICAgaWYgKGh1bWFuX3VuaXRzKSB7CisgICAgICAgICAgICAgICAgY2hhciBzaXplWzEwXSwgdXNlZFsxMF0sIGF2YWlsWzEwXTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMThzICUxMHMgJTEwcyAlMTBzICU0bHUlJVxuIiwgZGVzY3IsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9odW1hbihzaXplLCBzaXplb2Ygc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3NpemUsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSwgaHVtYW5fdW5pdHMpLAorICAgICAgICAgICAgICAgICAgICBmb3JtYXRfaHVtYW4odXNlZCwgc2l6ZW9mIHVzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCB1bml0cywgMTAyNCkgOiBoc3VzZWQsIGh1bWFuX3VuaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2h1bWFuKGF2YWlsLCBzaXplb2YgYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHNzaXplLWhzdXNlZCwgdW5pdHMsIDEwMjQpIDogaHNzaXplIC0KKyAgICAgICAgICAgICAgICAgICAgaHN1c2VkLCBodW1hbl91bml0cyksCisgICAgICAgICAgICAgICAgICAgIGhzc2l6ZSA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCAxMDAsIGhzc2l6ZSkgOiBoc3VzZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlLTE4cyAlMTVsdSAlMTVsdSAlMTVsdSAlNGx1JSVcbiIsIGRlc2NyLAorICAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHNzaXplLCB1bml0cywgMTAyNCkgOiBoc3NpemUsCisgICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZS1oc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSAtCisgICAgICAgICAgICAgICAgICAgIGhzdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgaHNzaXplID8gY29udmVydF91bml0cyhoc3VzZWQsIDEwMCwgaHNzaXplKSA6IGhzdXNlZCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgbmV4dDoKICAgICAgICAgICAgIHZscCA9IHZscC0+bmV4dF92YXJpYWJsZTsKQEAgLTMzNiw3ICszODMsNiBAQAogICAgIH0KIAogICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgIHNpemVfdCAgICAgICAgICB1bml0cyA9IDA7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHRoZSBob3N0IHJlc291cmNlcyBtaWIgbXVzdCBub3QgYmUgc3VwcG9ydGVkLiAgTGV0cyB0cnkgdGhlCiAgICAgICAgICAqIFVDRC1TTk1QLU1JQiBhbmQgaXRzIGRza1RhYmxlIApAQCAtMzgzLDEyICs0MjksMTkgQEAKICAgICAgICAgICAgIGlmICh2bHAyLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpIGdvdG8gbmV4dDI7CiAgICAgICAgICAgICBoc3VzZWQgPSAqKHZscDItPnZhbC5pbnRlZ2VyKTsKIAotICAgICAgICAgICAgcHJpbnRmKCIlLTE4cyAlMTVsdSAlMTVsdSAlMTVsdSAlNGx1JSVcbiIsIGRlc2NyLAotICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3NpemUsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSwKLSAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCB1bml0cywgMTAyNCkgOiBoc3VzZWQsCi0gICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZS1oc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgaHN1c2VkLCBoc3NpemUgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgMTAwLCBoc3NpemUpIDoKLSAgICAgICAgICAgICAgICAgICBoc3VzZWQpOworICAgICAgICAgICAgaWYgKGh1bWFuX3VuaXRzKSB7CisgICAgICAgICAgICAgICAgY2hhciBzaXplWzEwXSwgdXNlZFsxMF0sIGF2YWlsWzEwXTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMThzICUxMHMgJTEwcyAlMTBzICU0bHUlJVxuIiwgZGVzY3IsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9odW1hbihzaXplLCBzaXplb2Ygc2l6ZSwgaHNzaXplLCBodW1hbl91bml0cyksCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9odW1hbih1c2VkLCBzaXplb2YgdXNlZCwgaHN1c2VkLCBodW1hbl91bml0cyksCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9odW1hbihhdmFpbCwgc2l6ZW9mIGF2YWlsLCBoc3NpemUgLSBoc3VzZWQsIGh1bWFuX3VuaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgaHNzaXplID8gY29udmVydF91bml0cyhoc3VzZWQsIDEwMCwgaHNzaXplKSA6IGhzdXNlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMThzICUxNWx1ICUxNWx1ICUxNWx1ICU0bHUlJVxuIiwgZGVzY3IsCisgICAgICAgICAgICAgICAgICAgICBoc3NpemUsIGhzdXNlZCwgaHNzaXplIC0gaHN1c2VkLAorICAgICAgICAgICAgICAgICAgICAgaHNzaXplID8gY29udmVydF91bml0cyhoc3VzZWQsIDEwMCwgaHNzaXplKSA6IGhzdXNlZCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgbmV4dDI6CiAgICAgICAgICAgICB2bHAgPSB2bHAtPm5leHRfdmFyaWFibGU7CmRpZmYgLS1naXQgYS9hcHBzL3NubXBnZXQuYyBiL2FwcHMvc25tcGdldC5jCmluZGV4IDEwYTY5NjguLjcwMWY1MzYgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcGdldC5jCisrKyBiL2FwcHMvc25tcGdldC5jCkBAIC00MywxMSArNDMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDkgKzU1LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTI2LDEzICsxMTksMTYgQEAKICAgICBpbnQgICAgICAgICAgICAgZmFpbHVyZXMgPSAwOwogICAgIGludCAgICAgICAgICAgICBleGl0dmFsID0gMDsKIAorCiAgICAgLyoKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcGdldG5leHQuYyBiL2FwcHMvc25tcGdldG5leHQuYwppbmRleCA1ZjkxZGVmLi43ZGUxM2YzIDEwMDY0NAotLS0gYS9hcHBzL3NubXBnZXRuZXh0LmMKKysrIGIvYXBwcy9zbm1wZ2V0bmV4dC5jCkBAIC00MywxMSArNDMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDkgKzU1LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTI3LDkgKzEyMCwxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsICZvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIGIvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQKaW5kZXggYjA1MzYxYS4uYTdhZDA5NSAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQKQEAgLTcsNTQgKzcsNjMgQEAKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYzLDEzMCArNzIsNzEgQEAKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2lmLmxvOiBtYWluLmgKIC4vaWYubG86IG5ldHN0YXQuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xOTUsNjMgKzE0NSwyMTEgQEAKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIG1haW4uaCBuZXRzdGF0LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIG1haW4uaCBuZXRzdGF0LmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MCw2NSArMzU4LDY5IEBACiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL21haW4ubG86IG1haW4uaAotLi9tYWluLmxvOiBuZXRzdGF0LmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIG1haW4uaCBuZXRzdGF0LmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzI3LDY2ICs0MjksMTQwIEBACiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9yb3V0ZS5sbzogbWFpbi5oCi0uL3JvdXRlLmxvOiBuZXRzdGF0LmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzk1LDQgKzU3MSw1IEBACiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4gYi9hcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluCmluZGV4IDRhMDdlYmIuLjA0YWViNDAgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4KKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbgpAQCAtMyw2ICszLDggQEAKICMKIAogdG9wX2J1aWxkZGlyPS4uLy4uCitteXN1YmRpcj1hcHBzL3NubXBuZXRzdGF0CisKIElOU1RBTExCSU5QUk9HUz1zbm1wbmV0c3RhdCQoRVhFRVhUKQogCiAjIHVzZSBHTlUgdnBhdGgsIGlmIGF2YWlsYWJsZSwgdG8gb25seSBzZXQgYSBwYXRoIGZvciBzb3VyY2UgYW5kIGhlYWRlcnMKQEAgLTE2LDE1ICsxOCwxOSBAQAogIwogIyBidWlsZCBpbmZvCiAjCi1TUkNTPQlpbmV0LmMgaW5ldDYuYyBpZi5jIG1haW4uYyByb3V0ZS5jIHdpbnN0dWIuYyBmZnMuYwotT0JKUz0JaW5ldC5vIGluZXQ2Lm8gaWYubyBtYWluLm8gcm91dGUubyB3aW5zdHViLm8gZmZzLm8KLUxPQkpTPQlpbmV0LmxvIGluZXQ2LmxvIGlmLmxvIG1haW4ubG8gcm91dGUubG8gd2luc3R1Yi5sbyBmZnMubG8KK1NSQ1M9CWluZXQuYyBpbmV0Ni5jIGluZXR4LmMgaWYuYyBtYWluLmMgcm91dGUuYyByb3V0ZXguYyB3aW5zdHViLmMgZmZzLmMKK09CSlM9CWluZXQubyBpbmV0Ni5vIGluZXR4Lm8gaWYubyBtYWluLm8gcm91dGUubyByb3V0ZXgubyB3aW5zdHViLm8gZmZzLm8KK0xPQkpTPQlpbmV0LmxvIGluZXQ2LmxvIGluZXR4LmxvIGlmLmxvIG1haW4ubG8gcm91dGUubG8gcm91dGV4LmxvIHdpbnN0dWIubG8gZmZzLmxvCitGVE9CSlM9CWluZXQuZnQgaW5ldDYuZnQgaW5ldHguZnQgaWYuZnQgbWFpbi5mdCByb3V0ZS5mdCByb3V0ZXguZnQgd2luc3R1Yi5mdCBmZnMuZnQKIFRBUkc9IHNubXBuZXRzdGF0JChFWEVFWFQpCiAKK0ZFQVRVUkVGSUxFPS4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZXMtc25tcG5ldHN0YXQuaAorCiBDUFBGTEFHUz0gJChUT1BfSU5DTFVERVMpICBAQ1BQRkxBR1NACiAKK1ZBTF9MSUJTCT0gQFZBTF9MSUJTQAogVVNFTElCUz0gLi4vLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotTElCUz0JIC4uLy4uL3NubXBsaWIvbGlibmV0c25tcC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikgQExJQlNACitMSUJTPQkgLi4vLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKSAkKFZBTF9MSUJTKSBATElCU0AKIAogYWxsOiBzdGFuZGFyZGFsbAogCmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L2lmLmMgYi9hcHBzL3NubXBuZXRzdGF0L2lmLmMKaW5kZXggNmE4YTUxNS4uMTI1ZTZhMyAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9pZi5jCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvaWYuYwpAQCAtNDksOCArNDksMTIgQEAKICNpZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjZW5kaWYKLSNkZWZpbmUgX19VU0VfWE9QRU4KLSNkZWZpbmUgX19VU0VfWE9QRU5fRVhURU5ERUQKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorI2RlZmluZSBfWE9QRU5fU09VUkNFIDEKKyNlbmRpZgorI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2VuZGlmCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKICNpbmNsdWRlICJtYWluLmgiCkBAIC02OSw3ICs3Myw3IEBACiAgICAgICAgIGNoYXIgICAgICAgICAgICBpcFsxMjhdLCByb3V0ZVsxMjhdOwogICAgICAgICBpbnQgICAgICAgICAgICAgbXR1OwogICAgICAgICBpbnQgICAgICAgICAgICAgZHJvcHM7Ci0gICAgICAgIGludCAgICAgICAgICAgICBpZmluZGV4OworICAgICAgICB1bnNpZ25lZCBpbnQgICAgaWZpbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTYXZlICJleHBhbmRhYmxlIiBmaWVsZHMgYXMgc3RyaW5nIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICAgICogIHJhdGhlciB0aGFuIGludGVnZXIgc3RhdGlzdGljcwpAQCAtMTI4LDE0ICsxMzIsMTUgQEAKICAgICAgKi8KICAgICBmb3IgKHZwPWFkZHJfaWZfdmFyLCB2cDI9YWRkcl9tYXNrX3ZhcjsgIHZwOwogICAgICAgICAgdnA9dnAtPm5leHRfdmFyaWFibGUsIHZwMj12cDItPm5leHRfdmFyaWFibGUpIHsKLSAgICAgICAgaWYgKCB2cC0+dmFsLmludGVnZXIgJiYgKnZwLT52YWwuaW50ZWdlciA9PSBjdXJfaWYtPmlmaW5kZXggKQorICAgICAgICBpZiAoIHZwLT52YWwuaW50ZWdlciAmJiAqdnAtPnZhbC5pbnRlZ2VyID09IChpbnQpY3VyX2lmLT5pZmluZGV4ICkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAodnAyKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIEFsd2F5cyB3YW50IGEgbnVtZXJpYyBpbnRlcmZhY2UgSVAgYWRkcmVzcwogICAgICAgICAgKi8KLSAgICAgICAgc25wcmludGYoIGN1cl9pZi0+aXAsIDEyOCwgIiVsdS4lbHUuJWx1LiVsdSIsCisgICAgICAgIHNucHJpbnRmKCBjdXJfaWYtPmlwLCAxMjgsICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1LiIKKyAgICAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1IiwKICAgICAgICAgICAgICAgICAgIHZwMi0+bmFtZVsxMF0sCiAgICAgICAgICAgICAgICAgICB2cDItPm5hbWVbMTFdLAogICAgICAgICAgICAgICAgICAgdnAyLT5uYW1lWzEyXSwKQEAgLTE0NiwxNiArMTUxLDE2IEBACiAgICAgICAgICAqICAgZGlzcGxheWluZyB0aGUgbG9jYWwgbmV0d29yayBpbmZvcm1hdGlvbgogICAgICAgICAgKi8KICAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7Ci0gICAgICAgIGNwWzBdID0gdnAyLT5uYW1lWyAxMCBdICYgMHhmZjsKLSAgICAgICAgY3BbMV0gPSB2cDItPm5hbWVbIDExIF0gJiAweGZmOwotICAgICAgICBjcFsyXSA9IHZwMi0+bmFtZVsgMTIgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzNdID0gdnAyLT5uYW1lWyAxMyBdICYgMHhmZjsKKyAgICAgICAgY3BbMF0gPSAodWludDhfdCkgdnAyLT5uYW1lWzEwXTsKKyAgICAgICAgY3BbMV0gPSAodWludDhfdCkgdnAyLT5uYW1lWzExXTsKKyAgICAgICAgY3BbMl0gPSAodWludDhfdCkgdnAyLT5uYW1lWzEyXTsKKyAgICAgICAgY3BbM10gPSAodWludDhfdCkgdnAyLT5uYW1lWzEzXTsKICAgICAgICAgaWZBZGRyID0gdG1wQWRkci5hZGRyOwogICAgICAgICBjcCA9IHRtcEFkZHIuZGF0YTsKLSAgICAgICAgY3BbMF0gPSB2cDItPnZhbC5zdHJpbmdbIDAgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzFdID0gdnAyLT52YWwuc3RyaW5nWyAxIF0gJiAweGZmOwotICAgICAgICBjcFsyXSA9IHZwMi0+dmFsLnN0cmluZ1sgMiBdICYgMHhmZjsKLSAgICAgICAgY3BbM10gPSB2cDItPnZhbC5zdHJpbmdbIDMgXSAmIDB4ZmY7CisgICAgICAgIGNwWzBdID0gKHVpbnQ4X3QpIHZwMi0+dmFsLnN0cmluZ1swXTsKKyAgICAgICAgY3BbMV0gPSAodWludDhfdCkgdnAyLT52YWwuc3RyaW5nWzFdOworICAgICAgICBjcFsyXSA9ICh1aW50OF90KSB2cDItPnZhbC5zdHJpbmdbMl07CisgICAgICAgIGNwWzNdID0gKHVpbnQ4X3QpIHZwMi0+dmFsLnN0cmluZ1szXTsKICAgICAgICAgbWFzayA9IHRtcEFkZHIuYWRkcjsKICAgICAgICAgc25wcmludGYoIGN1cl9pZi0+cm91dGUsIDEyOCwgIiVzIiwgbmV0bmFtZShpZkFkZHIsIG1hc2spKTsKICAgICB9CkBAIC0yODYsNyArMjkxLDYgQEAKICAgICAgICAgICAgICAgICAgKiBYWFggLSBUcnkgdG8gcmVjb3ZlciA/CiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgU05NUF9GUkVFKCBjdXJfaWYgKTsKLSAgICAgICAgICAgICAgICBjdXJfaWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAvKiBub3QgZm9yIG5vdywgbm8gKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN3aXRjaCAoIHZwLT5uYW1lWyB2YXItPm5hbWVfbGVuZ3RoLTIgXSApIHsKQEAgLTM5MSw3ICszOTUsNiBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKCBpbnRyZmFjZSAmJiBzdHJjbXAoIGN1cl9pZi0+bmFtZSwgaW50cmZhY2UpICE9IDAgJiYgc3RyY21wKCBjdXJfaWYtPmRlc2NyLCBpbnRyZmFjZSkgIT0gMCkgewogICAgICAgICAgICAgU05NUF9GUkVFKCBjdXJfaWYgKTsKLSAgICAgICAgICAgIGN1cl9pZiA9IE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICAvKgpAQCAtNTM3LDcgKzU0MCw3IEBACiAgICAgc3RydWN0IGlmdG90ICpzdW0gPSBOVUxMLCAqdG90YWwgID0gTlVMTDsgICAgLyogb3ZlcmFsbCBzdW1tYXJ5ICAgICovCiAgICAgaW50ICAgIGxpbmU7CiAgICAgaW50ICAgIGZpcnN0OwotICAgIGludCAgICBpOworICAgIHNpemVfdCBpOwogCiAgICAgdmFyID0gTlVMTDsKICAgICBpZiAoIGludHJmYWNlICkgewpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMgYi9hcHBzL3NubXBuZXRzdGF0L2luZXQuYwppbmRleCA3ZGMzZmYxLi4wNTM3MzQwIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L2luZXQuYworKysgYi9hcHBzL3NubXBuZXRzdGF0L2luZXQuYwpAQCAtNDYsOCArNDYsNiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+CiAjaW5jbHVkZSAid2luc3R1Yi5oIgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKQEAgLTY5LDcgKzY3LDcgQEAKICNpbmNsdWRlICJuZXRzdGF0LmgiCiAKIHN0cnVjdCBzdGF0X3RhYmxlIHsKLSAgICBpbnQgICAgICAgICAgICAgZW50cnk7ICAgICAgLyogZW50cnkgbnVtYmVyIGluIHRhYmxlICovCisgICAgdW5zaWduZWQgaW50ICBlbnRyeTsgICAgICAvKiBlbnRyeSBudW1iZXIgaW4gdGFibGUgKi8KICAgICAvKgogICAgICAqIGZvcm1hdCBzdHJpbmcgdG8gcHJpbnRmKGRlc2NyaXB0aW9uLCB2YWx1ZSkgCiAgICAgICogd2FybmluZzogdGhlICVkIG11c3QgYmUgYmVmb3JlIHRoZSAlcyAKQEAgLTEwNiwyMCArMTA0LDY1IEBACiB9OwogI2RlZmluZSBUQ1BfTlNUQVRFUyAxMQogCi12b2lkCi10Y3Bwcm90b3ByKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdm9pZAordGNwcHJvdG9wcmludF9saW5lKGNvbnN0IGNoYXIgKm5hbWUsIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdnAsIGludCAqZmlyc3QpCiB7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsICp2cDsKLSAgICBvaWQgICAgdGNwQ29ublN0YXRlX29pZFtdID0geyAxLDMsNiwxLDIsMSw2LDEzLDEsMSB9OwotICAgIHNpemVfdCB0Y3BDb25uU3RhdGVfbGVuICAgPSBPSURfTEVOR1RIKCB0Y3BDb25uU3RhdGVfb2lkICk7CiAgICAgaW50ICAgIHN0YXRlLCB3aWR0aDsKKyAgICBjaGFyICAqY3A7CiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwogICAgICAgICBjaGFyICAgICAgZGF0YVs0XTsKICAgICB9IHRtcEFkZHI7CiAgICAgb2lkICAgIGxvY2FsUG9ydCwgcmVtb3RlUG9ydDsKICAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbEFkZHIsIHJlbW90ZUFkZHI7Ci0gICAgY2hhciAgKmNwOworCisJc3RhdGUgPSAqdnAtPnZhbC5pbnRlZ2VyOworCWlmICghYWZsYWcgJiYgc3RhdGUgPT0gTUlCX1RDUENPTk5TVEFURV9MSVNURU4pIHsKKwkJcmV0dXJuOworCX0KKworCWlmICgqZmlyc3QpIHsKKwkJcHJpbnRmKCJBY3RpdmUgSW50ZXJuZXQgKCVzKSBDb25uZWN0aW9ucyIsIG5hbWUpOworCQlpZiAoYWZsYWcpCisJCQlwcmludGYoIiAoaW5jbHVkaW5nIHNlcnZlcnMpIik7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXdpZHRoID0gMjc7CisJCXByaW50ZigiJS01LjVzICUqLipzICUqLipzICVzXG4iLAorCQkJICAgIlByb3RvIiwgLXdpZHRoLCB3aWR0aCwgIkxvY2FsIEFkZHJlc3MiLAorCQkJCQkJLXdpZHRoLCB3aWR0aCwgIlJlbW90ZSBBZGRyZXNzIiwgIihzdGF0ZSkiKTsKKwkJKmZpcnN0ID0gMDsKKwl9CisJCisJLyogRXh0cmFjdCB0aGUgbG9jYWwvcmVtb3RlIGluZm9ybWF0aW9uIGZyb20gdGhlIGluZGV4IHZhbHVlcyAqLworCWNwID0gdG1wQWRkci5kYXRhOworCWNwWzBdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzEwXTsKKwljcFsxXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxMV07CisJY3BbMl0gPSAodWludDhfdCkgdnAtPm5hbWVbMTJdOworCWNwWzNdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzEzXTsKKwlsb2NhbEFkZHIuc19hZGRyID0gdG1wQWRkci5hZGRyLnNfYWRkcjsKKwlsb2NhbFBvcnQgICAgICAgID0gdnAtPm5hbWVbIDE0IF07CisJY3AgPSB0bXBBZGRyLmRhdGE7CisJY3BbMF0gPSAodWludDhfdCkgdnAtPm5hbWVbMTVdOworCWNwWzFdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzE2XTsKKwljcFsyXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxN107CisJY3BbM10gPSAodWludDhfdCkgdnAtPm5hbWVbMThdOworCXJlbW90ZUFkZHIuc19hZGRyID0gdG1wQWRkci5hZGRyLnNfYWRkcjsKKwlyZW1vdGVQb3J0ICAgICAgICA9IHZwLT5uYW1lWyAxOSBdOworCisJcHJpbnRmKCIlLTUuNXMiLCBuYW1lKTsKKwlpbmV0cHJpbnQoJmxvY2FsQWRkciwgIGxvY2FsUG9ydCwgIG5hbWUsIDEpOworCWluZXRwcmludCgmcmVtb3RlQWRkciwgcmVtb3RlUG9ydCwgbmFtZSwgMCk7CisJaWYgKHN0YXRlIDwgMSB8fCBzdGF0ZSA+IFRDUF9OU1RBVEVTKSB7CisJCXByaW50ZigiICVkXG4iLCBzdGF0ZSApOworCX0gZWxzZSB7CisJCXByaW50ZigiICVzXG4iLCB0Y3BzdGF0ZXNbc3RhdGVdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0Y3Bwcm90b3ByX2dldChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJvb3QsIHNpemVfdCByb290X2xlbikKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwOwogICAgIGludCAgICBmaXJzdCA9IDE7CiAKICAgICAvKgpAQCAtMTI3LDUzICsxNzAsMTcgQEAKICAgICAgKiAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCiAgICAgICovCiAgICAgdmFyID0gTlVMTDsKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCB0Y3BDb25uU3RhdGVfb2lkLCB0Y3BDb25uU3RhdGVfbGVuLAorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHJvb3QsIHJvb3RfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fTlVMTCwgTlVMTCwgIDApOwogICAgIGlmICghdmFyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG5ldHNubXBfcXVlcnlfd2FsayggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoKHZhci0+dHlwZSAmIDB4RjApID09IDB4ODApCS8qIEV4Y2VwdGlvbiAqLworCXJldHVybjsKIAogICAgIGZvciAodnAgPSB2YXI7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKLSAgICAgICAgc3RhdGUgPSAqdnAtPnZhbC5pbnRlZ2VyOwotICAgICAgICBpZiAoIWFmbGFnICYmIHN0YXRlID09IE1JQl9UQ1BDT05OU1RBVEVfTElTVEVOKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGZpcnN0KSB7Ci0gICAgICAgICAgICBwcmludGYoIkFjdGl2ZSBJbnRlcm5ldCAoJXMpIENvbm5lY3Rpb25zIiwgbmFtZSk7Ci0gICAgICAgICAgICBpZiAoYWZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKGluY2x1ZGluZyBzZXJ2ZXJzKSIpOwotICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKLSAgICAgICAgICAgIHdpZHRoID0gQWZsYWcgPyAxOCA6IDIyOwotICAgICAgICAgICAgcHJpbnRmKCIlLTUuNXMgJSouKnMgJSouKnMgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIlByb3RvIiwgLXdpZHRoLCB3aWR0aCwgIkxvY2FsIEFkZHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC13aWR0aCwgd2lkdGgsICJSZW1vdGUgQWRkcmVzcyIsICIoc3RhdGUpIik7Ci0gICAgICAgICAgICBmaXJzdD0wOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiBFeHRyYWN0IHRoZSBsb2NhbC9yZW1vdGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5kZXggdmFsdWVzICovCi0gICAgICAgIGNwID0gdG1wQWRkci5kYXRhOwotICAgICAgICBjcFswXSA9IHZwLT5uYW1lWyAxMCBdICYgMHhmZjsKLSAgICAgICAgY3BbMV0gPSB2cC0+bmFtZVsgMTEgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzJdID0gdnAtPm5hbWVbIDEyIF0gJiAweGZmOwotICAgICAgICBjcFszXSA9IHZwLT5uYW1lWyAxMyBdICYgMHhmZjsKLSAgICAgICAgbG9jYWxBZGRyLnNfYWRkciA9IHRtcEFkZHIuYWRkci5zX2FkZHI7Ci0gICAgICAgIGxvY2FsUG9ydCAgICAgICAgPSBudG9ocygodV9zaG9ydCkodnAtPm5hbWVbIDE0IF0pKTsKLSAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7Ci0gICAgICAgIGNwWzBdID0gdnAtPm5hbWVbIDE1IF0gJiAweGZmOwotICAgICAgICBjcFsxXSA9IHZwLT5uYW1lWyAxNiBdICYgMHhmZjsKLSAgICAgICAgY3BbMl0gPSB2cC0+bmFtZVsgMTcgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzNdID0gdnAtPm5hbWVbIDE4IF0gJiAweGZmOwotICAgICAgICByZW1vdGVBZGRyLnNfYWRkciA9IHRtcEFkZHIuYWRkci5zX2FkZHI7Ci0gICAgICAgIHJlbW90ZVBvcnQgICAgICAgID0gbnRvaHMoKHVfc2hvcnQpKHZwLT5uYW1lWyAxOSBdKSk7Ci0KLSAgICAgICAgcHJpbnRmKCIlLTUuNXMiLCBuYW1lKTsKLSAgICAgICAgaW5ldHByaW50KCZsb2NhbEFkZHIsICBsb2NhbFBvcnQsICBuYW1lLCAxKTsKLSAgICAgICAgaW5ldHByaW50KCZyZW1vdGVBZGRyLCByZW1vdGVQb3J0LCBuYW1lLCAwKTsKLSAgICAgICAgaWYgKCBzdGF0ZSA8IDEgfHwgc3RhdGUgPiBUQ1BfTlNUQVRFUyApCi0gICAgICAgICAgICBwcmludGYoIiVkXG4iLCBzdGF0ZSApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIiVzXG4iLCB0Y3BzdGF0ZXNbIHN0YXRlIF0pOworICAgICAgICB0Y3Bwcm90b3ByaW50X2xpbmUobmFtZSwgdnAsICZmaXJzdCk7CiAgICAgfQogICAgIHNubXBfZnJlZV92YXJiaW5kKCB2YXIgKTsKIH0KQEAgLTIwNyw5ICsyMTQsMTEgQEAKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChuZXRzbm1wX3F1ZXJ5X3dhbGsoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCh2YXItPnR5cGUgJiAweEYwKSA9PSAweDgwKQkvKiBFeGNlcHRpb24gKi8KKwlyZXR1cm47CiAKICAgICBwcmludGYoIkFjdGl2ZSBJbnRlcm5ldCAoJXMpIENvbm5lY3Rpb25zXG4iLCBuYW1lKTsKLSAgICBwcmludGYoIiUtNS41cyAlLTI4LjI4c1xuIiwgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiKTsKKyAgICBwcmludGYoIiUtNS41cyAlLTI3LjI3c1xuIiwgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiKTsKICAgICBmb3IgKHZwID0gdmFyOyB2cCA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlKSB7CiAgICAgICAgIHByaW50ZigiJS01LjVzIiwgbmFtZSk7CiAgICAgICAgIC8qCkBAIC0yMTgsMTggKzIyNywxMjMgQEAKICAgICAgICAgICogICB3ZSB3YWxrZWQgdWRwTG9jYWxBZGRyZXNzIHJhdGhlciB0aGFuIHVkcExvY2FsUG9ydCkKICAgICAgICAgICovCiAgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOwotICAgICAgICBjcFswXSA9IHZwLT5uYW1lWyAxMCBdICYgMHhmZjsKLSAgICAgICAgY3BbMV0gPSB2cC0+bmFtZVsgMTEgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzJdID0gdnAtPm5hbWVbIDEyIF0gJiAweGZmOwotICAgICAgICBjcFszXSA9IHZwLT5uYW1lWyAxMyBdICYgMHhmZjsKKyAgICAgICAgY3BbMF0gPSAodWludDhfdCkgdnAtPm5hbWVbMTBdOworICAgICAgICBjcFsxXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxMV07CisgICAgICAgIGNwWzJdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzEyXTsKKyAgICAgICAgY3BbM10gPSAodWludDhfdCkgdnAtPm5hbWVbMTNdOwogICAgICAgICBsb2NhbEFkZHIuc19hZGRyID0gdG1wQWRkci5hZGRyLnNfYWRkcjsKLSAgICAgICAgbG9jYWxQb3J0ICAgICAgICA9IG50b2hzKCAodV9zaG9ydCkodnAtPm5hbWVbIDE0IF0pKTsKKyAgICAgICAgbG9jYWxQb3J0ICAgICAgICA9IHZwLT5uYW1lWyAxNCBdOwogICAgICAgICBpbmV0cHJpbnQoJmxvY2FsQWRkciwgbG9jYWxQb3J0LCBuYW1lLCAxKTsKICAgICAgICAgcHV0Y2hhcignXG4nKTsKICAgICB9CiAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZhciApOwogfQogCit2b2lkCit0Y3Bwcm90b3ByX2J1bGtnZXQoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyb290LCBzaXplX3Qgcm9vdF9sZW4pCit7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2cDsKKwluZXRzbm1wX3BkdSAgICAqcGR1LCAqcmVzcG9uc2U7CisgICAgb2lkICAgICAgICAgICAgIHRjcENvbm5TdGF0ZV9vaWRbTUFYX09JRF9MRU5dOworCXNpemVfdCAgICAgICAgICB0Y3BDb25uU3RhdGVfbGVuOworICAgIGludCAgICBmaXJzdCA9IDE7CisgICAgaW50ICAgIHJ1bm5pbmcgPSAxOworICAgIGludCAgICBzdGF0dXM7CisKKwkvKgorICAgICAqIHNldHVwIGluaXRpYWwgb2JqZWN0IG5hbWUKKyAgICAgKi8KKwltZW1tb3ZlKHRjcENvbm5TdGF0ZV9vaWQsIHJvb3QsIHNpemVvZihvaWQpICogcm9vdF9sZW4pOworCXRjcENvbm5TdGF0ZV9sZW4gPSByb290X2xlbjsKKworICAgIC8qCisgICAgICogV2Fsa2luZyB0aGUgdGNwQ29ublN0YXRlIGNvbHVtbiB3aWxsIHByb3ZpZGUgYWxsCisgICAgICogICB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorICAgICAqLworCXdoaWxlIChydW5uaW5nKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNyZWF0ZSBQRFUgZm9yIEdFVEJVTEsgcmVxdWVzdCBhbmQgYWRkIG9iamVjdCBuYW1lIHRvIHJlcXVlc3QKKyAgICAgICAgICovCisgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVRCVUxLKTsKKyAgICAgICAgcGR1LT5ub25fcmVwZWF0ZXJzID0gMDsKKyAgICAgICAgcGR1LT5tYXhfcmVwZXRpdGlvbnMgPSBtYXhfZ2V0YnVsazsgICAgLyogZmlsbCB0aGUgcGFja2V0ICovCisgICAgICAgIHNubXBfYWRkX251bGxfdmFyKHBkdSwgdGNwQ29ublN0YXRlX29pZCwgdGNwQ29ublN0YXRlX2xlbik7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG8gdGhlIHJlcXVlc3QKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNubXBfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgJnJlc3BvbnNlKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS0+ZXJyc3RhdCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisJCQkJZm9yICh2cCA9IHJlc3BvbnNlLT52YXJpYWJsZXM7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh2cC0+bmFtZV9sZW5ndGggPCByb290X2xlbikgfHwKKwkJCQkJCQkobWVtY21wKHJvb3QsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHJvb3RfbGVuKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIG5vdCBwYXJ0IG9mIHRoaXMgc3VidHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh2cC0+dHlwZSAhPSBTTk1QX0VORE9GTUlCVklFVykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2cC0+dHlwZSAhPSBTTk1QX05PU1VDSE9CSkVDVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2cC0+dHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFKSkgeworCisJCQl0Y3Bwcm90b3ByaW50X2xpbmUobmFtZSwgdnAsICZmaXJzdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBDaGVjayBpZiBsYXN0IHZhcmlhYmxlLCBhbmQgaWYgc28sIHNhdmUgZm9yIG5leHQgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZwLT5uZXh0X3ZhcmlhYmxlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlKHRjcENvbm5TdGF0ZV9vaWQsIHZwLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPm5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcENvbm5TdGF0ZV9sZW4gPSB2cC0+bmFtZV9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICogYW4gZXhjZXB0aW9uIHZhbHVlLCBzbyBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisJCQkJfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGVycm9yIGluIHJlc3BvbnNlLCBwcmludCBpdAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUX1RJTUVPVVQpIHsKKyAgICAgICAgICAgIHJ1bm5pbmcgPSAwOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBzdGF0dXMgPT0gU1RBVF9FUlJPUiAqLworICAgICAgICAgICAgcnVubmluZyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocmVzcG9uc2UpOworCQl9CisJfQorfQorCit2b2lkCit0Y3Bwcm90b3ByKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgb2lkICAgIHRjcENvbm5TdGF0ZV9vaWRbXSA9IHsgMSwzLDYsMSwyLDEsNiwxMywxLDEgfTsKKyAgICBzaXplX3QgdGNwQ29ublN0YXRlX2xlbiAgID0gT0lEX0xFTkdUSCggdGNwQ29ublN0YXRlX29pZCApOworICAgIGludCAgICB1c2VfZ2V0YnVsayA9IDE7CisKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorICAgIGlmIChzcy0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMSkgeworICAgICAgICB1c2VfZ2V0YnVsayA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodXNlX2dldGJ1bGspIHsKKwkgICAgdGNwcHJvdG9wcl9idWxrZ2V0KG5hbWUsIHRjcENvbm5TdGF0ZV9vaWQsIHRjcENvbm5TdGF0ZV9sZW4pOworICAgIH0gZWxzZSB7CisJICAgIHRjcHByb3RvcHJfZ2V0KG5hbWUsIHRjcENvbm5TdGF0ZV9vaWQsIHRjcENvbm5TdGF0ZV9sZW4pOworICAgIH0KK30KKwogCiAJLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC0yODIsNyArMzk2LDYgQEAKICAgICAgICAgICogICB0aGVuIG9ubHkgZGlzcGxheSBub24temVybyBzdGF0cy4KICAgICAgICAgICovCiAgICAgICAgIGlmICggKnZwLT52YWwuaW50ZWdlciA+IDAgfHwgc2ZsYWcgPT0gMSApIHsKLSAgICAgICAgICAgIHB1dGNoYXIoJ1x0Jyk7CiAgICAgICAgICAgICBwcmludGYoc3AtPmRlc2NyaXB0aW9uLCAqdnAtPnZhbC5pbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVyYWwoKnZwLT52YWwuaW50ZWdlcikpOwogICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKQEAgLTMwMSwyNCArNDE0LDI0IEBACiAgICAgb2lkICAgICAgICAgICAgICAgaXBzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMCwgMCB9OwogICAgIHNpemVfdCAgICAgICAgICAgIGlwc3RhdHNfbGVuICAgPSBPSURfTEVOR1RIKCBpcHN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGlwc3RhdHNfdGJsW10gPSB7Ci0gICAgICAgIHszLCAiJWQgdG90YWwgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAotICAgICAgICB7NCwgIiVkIGRhdGFncmFtJXMgd2l0aCBoZWFkZXIgZXJyb3JzIn0sCi0gICAgICAgIHs1LCAiJWQgZGF0YWdyYW0lcyB3aXRoIGFuIGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyJ9LAotICAgICAgICB7NiwgIiVkIGRhdGFncmFtJXMgZm9yd2FyZGVkIn0sCi0gICAgICAgIHs3LCAiJWQgZGF0YWdyYW0lcyB3aXRoIHVua25vd24gcHJvdG9jb2wifSwKLSAgICAgICAgezgsICIlZCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7OSwgIiVkIGRhdGFncmFtJXMgZGVsaXZlcmVkIn0sCi0gICAgICAgIHsxMCwgIiVkIG91dHB1dCBkYXRhZ3JhbSByZXF1ZXN0JXMifSwKLSAgICAgICAgezExLCAiJWQgb3V0cHV0IGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHsxMiwgIiVkIGRhdGFncmFtJXMgd2l0aCBubyByb3V0ZSJ9LAotICAgICAgICB7MTQsICIlZCBmcmFnbWVudCVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsxNSwgIiVkIGRhdGFncmFtJXMgcmVhc3NlbWJsZWQifSwKLSAgICAgICAgezE2LCAiJWQgcmVhc3NlbWJseSBmYWlsdXJlJXMifSwKLSAgICAgICAgezE3LCAiJWQgZGF0YWdyYW0lcyBmcmFnbWVudGVkIn0sCi0gICAgICAgIHsxOCwgIiVkIGZyYWdtZW50YXRpb24gZmFpbHVyZSVzIn0sCi0gICAgICAgIHsxOSwgIiVkIGZyYWdtZW50JXMgY3JlYXRlZCJ9LAotICAgICAgICB7MjMsICIlZCByb3V0ZSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgMywgIiUxNGQgdG90YWwgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAorICAgICAgICB7IDQsICIlMTRkIGRhdGFncmFtJXMgd2l0aCBoZWFkZXIgZXJyb3JzIn0sCisgICAgICAgIHsgNSwgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIGFuIGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyJ9LAorICAgICAgICB7IDYsICIlMTRkIGRhdGFncmFtJXMgZm9yd2FyZGVkIn0sCisgICAgICAgIHsgNywgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIHVua25vd24gcHJvdG9jb2wifSwKKyAgICAgICAgeyA4LCAiJTE0ZCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAorICAgICAgICB7IDksICIlMTRkIGRhdGFncmFtJXMgZGVsaXZlcmVkIn0sCisgICAgICAgIHsxMCwgIiUxNGQgb3V0cHV0IGRhdGFncmFtIHJlcXVlc3QlcyJ9LAorICAgICAgICB7MTEsICIlMTRkIG91dHB1dCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAorICAgICAgICB7MTIsICIlMTRkIGRhdGFncmFtJXMgd2l0aCBubyByb3V0ZSJ9LAorICAgICAgICB7MTQsICIlMTRkIGZyYWdtZW50JXMgcmVjZWl2ZWQifSwKKyAgICAgICAgezE1LCAiJTE0ZCBkYXRhZ3JhbSVzIHJlYXNzZW1ibGVkIn0sCisgICAgICAgIHsxNiwgIiUxNGQgcmVhc3NlbWJseSBmYWlsdXJlJXMifSwKKyAgICAgICAgezE3LCAiJTE0ZCBkYXRhZ3JhbSVzIGZyYWdtZW50ZWQifSwKKyAgICAgICAgezE4LCAiJTE0ZCBmcmFnbWVudGF0aW9uIGZhaWx1cmUlcyJ9LAorICAgICAgICB7MTksICIlMTRkIGZyYWdtZW50JXMgY3JlYXRlZCJ9LAorICAgICAgICB7MjMsICIlMTRkIHJvdXRlJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsgMCwgIiJ9CiAgICAgfTsKIAogICAgIF9kdW1wX3N0YXRzKCBuYW1lLCBpcHN0YXRzX29pZCwgaXBzdGF0c19sZW4sIGlwc3RhdHNfdGJsICk7CkBAIC0zMzQsMzggKzQ0NywzOCBAQAogICAgIG9pZCAgICAgICAgICAgICAgIGljbXBzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNSwgMCwgMCB9OwogICAgIHNpemVfdCAgICAgICAgICAgIGljbXBzdGF0c19sZW4gICA9IE9JRF9MRU5HVEgoIGljbXBzdGF0c19vaWQgKTsKICAgICBzdHJ1Y3Qgc3RhdF90YWJsZSBpY21wc3RhdHNfdGJsW10gPSB7Ci0gICAgICAgIHsxLCAiJWQgdG90YWwgbWVzc2FnZSVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsyLCAiJWQgbWVzc2FnZSVzIGRyb3BwZWQgZHVlIHRvIGVycm9ycyJ9LAotICAgICAgICB7MTQsICIlZCBvdXB1dCBtZXNzYWdlIHJlcXVlc3QlcyJ9LAotICAgICAgICB7MTUsICIlZCBvdXRwdXQgbWVzc2FnZSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgMSwgIiUxNGQgdG90YWwgbWVzc2FnZSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsgMiwgIiUxNGQgbWVzc2FnZSVzIGRyb3BwZWQgZHVlIHRvIGVycm9ycyJ9LAorICAgICAgICB7MTQsICIlMTRkIG91cHV0IG1lc3NhZ2UgcmVxdWVzdCVzIn0sCisgICAgICAgIHsxNSwgIiUxNGQgb3V0cHV0IG1lc3NhZ2UlcyBkaXNjYXJkZWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXBfaW5oaXN0b2dyYW1bXSA9IHsKLSAgICAgICAgezMsICJEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKLSAgICAgICAgezQsICJUaW1lIEV4Y2VlZGVkOiAlZCJ9LAotICAgICAgICB7NSwgIlBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAotICAgICAgICB7NiwgIlNvdXJjZSBRdWVuY2g6ICVkIn0sCi0gICAgICAgIHs3LCAiUmVkaXJlY3Q6ICVkIn0sCi0gICAgICAgIHs4LCAiRWNobyBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7OSwgIkVjaG8gUmVwbHk6ICVkIn0sCi0gICAgICAgIHsxMCwgIlRpbWVzdGFtcCBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7MTEsICJUaW1lc3RhbXAgUmVwbHk6ICVkIn0sCi0gICAgICAgIHsxMiwgIkFkZHJlc3MgTWFzayBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7MTMsICJBZGRyZXNzIE1hc2sgUmVwbHk6ICVkIn0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyAzLCAiICAgICAgICBEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKKyAgICAgICAgeyA0LCAiICAgICAgICBUaW1lIEV4Y2VlZGVkOiAlZCJ9LAorICAgICAgICB7IDUsICIgICAgICAgIFBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAorICAgICAgICB7IDYsICIgICAgICAgIFNvdXJjZSBRdWVuY2g6ICVkIn0sCisgICAgICAgIHsgNywgIiAgICAgICAgUmVkaXJlY3Q6ICVkIn0sCisgICAgICAgIHsgOCwgIiAgICAgICAgRWNobyBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7IDksICIgICAgICAgIEVjaG8gUmVwbHk6ICVkIn0sCisgICAgICAgIHsxMCwgIiAgICAgICAgVGltZXN0YW1wIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsxMSwgIiAgICAgICAgVGltZXN0YW1wIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MTIsICIgICAgICAgIEFkZHJlc3MgTWFzayBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7MTMsICIgICAgICAgIEFkZHJlc3MgTWFzayBSZXBseTogJWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXBfb3V0aGlzdG9ncmFtW10gPSB7Ci0gICAgICAgIHsxNiwgIkRlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAlZCJ9LAotICAgICAgICB7MTcsICJUaW1lIEV4Y2VlZGVkOiAlZCJ9LAotICAgICAgICB7MTgsICJQYXJhbWV0ZXIgUHJvYmxlbTogJWQifSwKLSAgICAgICAgezE5LCAiU291cmNlIFF1ZW5jaDogJWQifSwKLSAgICAgICAgezIwLCAiUmVkaXJlY3Q6ICVkIn0sCi0gICAgICAgIHsyMSwgIkVjaG8gUmVxdWVzdDogJWQifSwKLSAgICAgICAgezIyLCAiRWNobyBSZXBseTogJWQifSwKLSAgICAgICAgezIzLCAiVGltZXN0YW1wIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsyNCwgIlRpbWVzdGFtcCBSZXBseTogJWQifSwKLSAgICAgICAgezI1LCAiQWRkcmVzcyBNYXNrIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsyNiwgIkFkZHJlc3MgTWFzayBSZXBseTogJWQifSwKKyAgICAgICAgezE2LCAiICAgICAgICBEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKKyAgICAgICAgezE3LCAiICAgICAgICBUaW1lIEV4Y2VlZGVkOiAlZCJ9LAorICAgICAgICB7MTgsICIgICAgICAgIFBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAorICAgICAgICB7MTksICIgICAgICAgIFNvdXJjZSBRdWVuY2g6ICVkIn0sCisgICAgICAgIHsyMCwgIiAgICAgICAgUmVkaXJlY3Q6ICVkIn0sCisgICAgICAgIHsyMSwgIiAgICAgICAgRWNobyBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7MjIsICIgICAgICAgIEVjaG8gUmVwbHk6ICVkIn0sCisgICAgICAgIHsyMywgIiAgICAgICAgVGltZXN0YW1wIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsyNCwgIiAgICAgICAgVGltZXN0YW1wIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MjUsICIgICAgICAgIEFkZHJlc3MgTWFzayBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7MjYsICIgICAgICAgIEFkZHJlc3MgTWFzayBSZXBseTogJWQifSwKICAgICAgICAgezAsICIifQogICAgIH07CiAKQEAgLTM4NiwxOSArNDk5LDE5IEBACiAgICAgb2lkICAgICAgICAgICAgICAgdGNwc3RhdHNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDYsIDAsIDAgfTsKICAgICBzaXplX3QgICAgICAgICAgICB0Y3BzdGF0c19sZW4gICA9IE9JRF9MRU5HVEgoIHRjcHN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIHRjcHN0YXRzX3RibFtdID0gewotICAgICAgICB7NSwgIiVkIGFjdGl2ZSBvcGVuJXMifSwKLSAgICAgICAgezYsICIlZCBwYXNzaXZlIG9wZW4lcyJ9LAotICAgICAgICB7NywgIiVkIGZhaWxlZCBhdHRlbXB0JXMifSwKLSAgICAgICAgezgsICIlZCByZXNldCVzIG9mIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zIn0sCi0gICAgICAgIHs5LCAiJWQgY3VycmVudCBlc3RhYmxpc2hlZCBjb25uZWN0aW9uJXMifSwKLSAgICAgICAgezEwLCAiJWQgc2VnbWVudCVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsxMSwgIiVkIHNlZ21lbnQlcyBzZW50In0sCi0gICAgICAgIHsxMiwgIiVkIHNlZ21lbnQlcyByZXRyYW5zbWl0dGVkIn0sCi0gICAgICAgIHsxNCwgIiVkIGludmFsaWQgc2VnbWVudCVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsxNSwgIiVkIHJlc2V0JXMgc2VudCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgNSwgIiUxNGQgYWN0aXZlIG9wZW4lcyJ9LAorICAgICAgICB7IDYsICIlMTRkIHBhc3NpdmUgb3BlbiVzIn0sCisgICAgICAgIHsgNywgIiUxNGQgZmFpbGVkIGF0dGVtcHQlcyJ9LAorICAgICAgICB7IDgsICIlMTRkIHJlc2V0JXMgb2YgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMifSwKKyAgICAgICAgeyA5LCAiJTE0ZCBjdXJyZW50bHkgZXN0YWJsaXNoZWQgY29ubmVjdGlvbiVzIn0sCisgICAgICAgIHsxMCwgIiUxNGQgc2VnbWVudCVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsxMSwgIiUxNGQgc2VnbWVudCVzIHNlbnQifSwKKyAgICAgICAgezEyLCAiJTE0ZCBzZWdtZW50JXMgcmV0cmFuc21pdHRlZCJ9LAorICAgICAgICB7MTQsICIlMTRkIGludmFsaWQgc2VnbWVudCVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsxNSwgIiUxNGQgcmVzZXQlcyBzZW50In0sCisgICAgICAgIHsgMCwgIiJ9CiAgICAgfTsKLSAgICBfZHVtcF9zdGF0cyggbmFtZSwgdGNwc3RhdHNfb2lkLCB0Y3BzdGF0c19sZW4sIHRjcHN0YXRzX3RibCApOworICAgIF9kdW1wX3N0YXRzKCAidGNwIiwgdGNwc3RhdHNfb2lkLCB0Y3BzdGF0c19sZW4sIHRjcHN0YXRzX3RibCApOwogfQogCiAKQEAgLTQxMSwxMyArNTI0LDEzIEBACiAgICAgb2lkICAgICAgICAgICAgICAgdWRwc3RhdHNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDcsIDAsIDAgfTsKICAgICBzaXplX3QgICAgICAgICAgICB1ZHBzdGF0c19sZW4gICA9IE9JRF9MRU5HVEgoIHVkcHN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIHVkcHN0YXRzX3RibFtdID0gewotICAgICAgICB7MSwgIiVkIHRvdGFsIGRhdGFncmFtJXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezIsICIlZCBkYXRhZ3JhbSVzIHRvIGludmFsaWQgcG9ydCJ9LAotICAgICAgICB7MywgIiVkIGRhdGFncmFtJXMgZHJvcHBlZCBkdWUgdG8gZXJyb3JzIn0sCi0gICAgICAgIHs0LCAiJWQgb3V0cHV0IGRhdGFncmFtIHJlcXVlc3QlcyJ9LAorICAgICAgICB7MSwgIiUxNGQgdG90YWwgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAorICAgICAgICB7MiwgIiUxNGQgZGF0YWdyYW0lcyB0byBpbnZhbGlkIHBvcnQifSwKKyAgICAgICAgezMsICIlMTRkIGRhdGFncmFtJXMgZHJvcHBlZCBkdWUgdG8gZXJyb3JzIn0sCisgICAgICAgIHs0LCAiJTE0ZCBvdXRwdXQgZGF0YWdyYW0gcmVxdWVzdCVzIn0sCiAgICAgICAgIHswLCAiIn0KICAgICB9OwotICAgIF9kdW1wX3N0YXRzKCBuYW1lLCB1ZHBzdGF0c19vaWQsIHVkcHN0YXRzX2xlbiwgdWRwc3RhdHNfdGJsICk7CisgICAgX2R1bXBfc3RhdHMoICJ1ZHAiLCB1ZHBzdGF0c19vaWQsIHVkcHN0YXRzX2xlbiwgdWRwc3RhdHNfdGJsICk7CiB9CiAKIApAQCAtNDQ5LDI0ICs1NjIsMjcgQEAKIHZvaWQKIGluZXRwcmludChzdHJ1Y3QgaW5fYWRkciAqaW4sIGludCBwb3J0LCBjb25zdCBjaGFyICpwcm90bywgaW50IGxvY2FsKQogewotCXN0cnVjdCBzZXJ2ZW50ICpzcCA9IDA7CisJc3RydWN0IHNlcnZlbnQgKnNwID0gTlVMTDsKIAljaGFyIGxpbmVbODBdLCAqY3A7Ci0JaW50IHdpZHRoOworCWludCB3aWR0aCA9IDI3OwogCi0Jc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIlLipzLiIsIChBZmxhZyAmJiAhbmZsYWcpID8gMTIgOiAxNiwKLQkgICAgaW5ldG5hbWUoaW4pKTsKKwlpZiAodmZsYWcpCisJICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZiBsaW5lLCAiJXMuIiwgaW5ldG5hbWUoaW4pKTsKKwllbHNlCisJICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZiBsaW5lLCAiJS4qcy4iLCB3aWR0aC05LCBpbmV0bmFtZShpbikpOwogCWNwID0gc3RyY2hyKGxpbmUsICdcMCcpOwogCWlmICghbmZsYWcgJiYgcG9ydCkKLQkJc3AgPSBnZXRzZXJ2Ynlwb3J0KChpbnQpcG9ydCwgcHJvdG8pOworCQlzcCA9IGdldHNlcnZieXBvcnQoaHRvbnMoKHVpbnQxNl90KSBwb3J0KSwgcHJvdG8pOwogCWlmIChzcCB8fCBwb3J0ID09IDApCi0JCXNucHJpbnRmKGNwLCBsaW5lICsgc2l6ZW9mIGxpbmUgLSBjcCwgIiUuOHMiLAorCQlzbnByaW50ZihjcCwgbGluZSArIHNpemVvZiBsaW5lIC0gY3AsIHZmbGFnID8gIiVzIiA6ICIlLjhzIiwKIAkJICAgIHNwID8gc3AtPnNfbmFtZSA6ICIqIik7CiAgICAgIC8qCiAgICAgICAqIFRyYW5zbGF0aW9uIG9mIFJQQyBzZXJ2aWNlIG5hbWVzIC0gT21pdHRlZAogICAgICAgKi8KIAllbHNlCi0JCXNucHJpbnRmKGNwLCBsaW5lICsgc2l6ZW9mIGxpbmUgLSBjcCwgIiVkIiwgbnRvaHMocG9ydCkpOwotCXdpZHRoID0gQWZsYWcgPyAxOCA6IDIyOworCQlzbnByaW50ZihjcCwgbGluZSArIHNpemVvZiBsaW5lIC0gY3AsICIlZCIsIHBvcnQpOworCWlmICh2ZmxhZyAmJiB3aWR0aCA8IHN0cmxlbihsaW5lKSkKKwkgICAgd2lkdGggPSBzdHJsZW4obGluZSk7CiAJcHJpbnRmKCIgJS0qLipzIiwgd2lkdGgsIHdpZHRoLCBsaW5lKTsKIH0KIApAQCAtNDg5LDkgKzYwNSwxMCBAQAogI2VuZGlmCiAKIAlpZiAoZmlyc3QgJiYgIW5mbGFnKSB7CisJCWNoYXIgdG1wW01BWEhPU1ROQU1FTEVOXTsKIAkJZmlyc3QgPSAwOwotCQlpZiAoZ2V0aG9zdG5hbWUoZG9tYWluLCBzaXplb2YoZG9tYWluKSkgPT0gMCAmJgotCQkgICAgKGNwID0gc3RyY2hyKGRvbWFpbiwgJy4nKSkpCisJCWlmIChnZXRob3N0bmFtZSh0bXAsIHNpemVvZih0bXApKSA9PSAwICYmCisJCSAgICAoY3AgPSBzdHJjaHIodG1wLCAnLicpKSkKIAkJCSh2b2lkKSBzdHJsY3B5KGRvbWFpbiwgY3AgKyAxLCBzaXplb2YgZG9tYWluKTsKIAkJZWxzZQogCQkJZG9tYWluWzBdID0gJ1wwJzsKQEAgLTUwNyw3ICs2MjQsOCBAQAogCQkJCWNwID0gbnAtPm5fbmFtZTsKIAkJfQogCQlpZiAoY3AgPT0gTlVMTCkgewotCQkJaHAgPSBnZXRob3N0YnlhZGRyKChjaGFyICopaW5wLCBzaXplb2YgKCppbnApLCBBRl9JTkVUKTsKKwkJCWhwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKChjaGFyICopaW5wLCBzaXplb2YgKCppbnApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfSU5FVCk7CiAJCQlpZiAoaHApIHsKIAkJCQlpZiAoKGNwID0gc3RyY2hyKGhwLT5oX25hbWUsICcuJykpICYmCiAJCQkJICAgICFzdHJjbXAoY3AgKyAxLCBkb21haW4pKQpAQCAtNTMwLDcgKzY0OCw3IEBACiAJCXNucHJpbnRmKGxpbmUsIHNpemVvZiBsaW5lLCAiJXMiLCBjcCk7CiAJZWxzZSB7CiAJCWlucC0+c19hZGRyID0gbnRvaGwoaW5wLT5zX2FkZHIpOwotI2RlZmluZSBDKHgpCSgoeCkgJiAweGZmKQorI2RlZmluZSBDKHgpCSh1bnNpZ25lZCkoKHgpICYgMHhmZikKIAkJc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIldS4ldS4ldS4ldSIsCiAJCSAgICBDKGlucC0+c19hZGRyID4+IDI0KSwgQyhpbnAtPnNfYWRkciA+PiAxNiksCiAJCSAgICBDKGlucC0+c19hZGRyID4+IDgpLCBDKGlucC0+c19hZGRyKSk7CmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMgYi9hcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMKaW5kZXggNzk5Yzk2MS4uNzEwOWI4NyAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvaW5ldDYuYwpAQCAtNDYsOCArNDYsNiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+CiAjaW5jbHVkZSAid2luc3R1Yi5oIgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKQEAgLTczLDcgKzcxLDcgQEAKICNpbmNsdWRlICJuZXRzdGF0LmgiCiAKIHN0cnVjdCBzdGF0X3RhYmxlIHsKLSAgICBpbnQgICAgICAgICAgICAgZW50cnk7ICAgICAgLyogZW50cnkgbnVtYmVyIGluIHRhYmxlICovCisgICAgdW5zaWduZWQgaW50IGVudHJ5OyAgICAgIC8qIGVudHJ5IG51bWJlciBpbiB0YWJsZSAqLwogICAgIC8qCiAgICAgICogZm9ybWF0IHN0cmluZyB0byBwcmludGYoZGVzY3JpcHRpb24sIHZhbHVlKSAKICAgICAgKiB3YXJuaW5nOiB0aGUgJWQgbXVzdCBiZSBiZWZvcmUgdGhlICVzIApAQCAtMTI2LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKICAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh2YXItPnR5cGUgPT0gQVNOX05VTEwpICAgIC8qIE5vIGVudHJpZXMgKi8KKyAgICBpZiAoKHZhci0+dHlwZSAmIDB4RjApID09IDB4ODApCQkvKiBleGNlcHRpb24gKi8KICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh2cCA9IHZhcjsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgewpAQCAtMTM5LDcgKzEzNyw3IEBACiAgICAgICAgICAgICBpZiAoYWZsYWcpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgKGluY2x1ZGluZyBzZXJ2ZXJzKSIpOwogICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKLSAgICAgICAgICAgIHByaW50ZigiJS01LjVzICUtMjguMjhzICUtMjguMjhzICU0cyAlc1xuIiwKKyAgICAgICAgICAgIHByaW50ZigiJS01LjVzICUtMjcuMjdzICUtMjcuMjdzICU0cyAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAiUHJvdG8iLCAiTG9jYWwgQWRkcmVzcyIsICJSZW1vdGUgQWRkcmVzcyIsICJJL0YiLCAiKHN0YXRlKSIpOwogICAgICAgICAgICAgZmlyc3QgPSAwOwogICAgICAgICB9CkBAIC0xODYsMTEgKzE4NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9OVUxMLCBOVUxMLCAgMCk7CiAgICAgaWYgKG5ldHNubXBfcXVlcnlfd2FsayggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodmFyLT50eXBlID09IEFTTl9OVUxMKSAgICAvKiBObyBlbnRyaWVzICovCisgICAgaWYgKCh2YXItPnR5cGUgJiAweEYwKSA9PSAweDgwKQkJLyogZXhjZXB0aW9uICovCiAgICAgICAgIHJldHVybjsKIAogICAgIHByaW50ZigiQWN0aXZlIEludGVybmV0IENvbm5lY3Rpb25zXG4iKTsKLSAgICBwcmludGYoIiUtNS41cyAlLTI4LjI4cyAlNHNcbiIsICJQcm90byIsICJMb2NhbCBBZGRyZXNzIiwgIkkvRiIpOworICAgIHByaW50ZigiJS01LjVzICUtMjcuMjdzICU0c1xuIiwgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiLCAiSS9GIik7CiAgICAgZm9yICh2cCA9IHZhcjsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgewogICAgICAgICBwcmludGYoIiUtNS41cyIsIG5hbWUpOwogICAgICAgICAvKgpAQCAtMjI1LDIwICsyMjMsMjEgQEAKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlICAgICAqc3A7Ci0gICAgb2lkICAgKnN0YXRzLCBzdGF0OwotICAgIGludCAgICBtYXhfc3RhdCA9IDA7CisgICAgbG9uZyAgICpzdGF0czsKKyAgICBvaWQgc3RhdDsKKyAgICB1bnNpZ25lZCBpbnQgbWF4X3N0YXQgPSAwOwogICAgIGludCAgICBhY3RpdmUgICA9IDA7CiAKICAgICB2YXIgPSBOVUxMOwogICAgIGZvciAoc3A9c3RhYmxlOyBzcC0+ZW50cnk7IHNwKyspIHsKICAgICAgICAgb2lkX2J1ZltidWZfbGVuLTFdID0gc3AtPmVudHJ5OwotICAgICAgICBpZiAoc3AtPmVudHJ5Pm1heF9zdGF0KQorICAgICAgICBpZiAoc3AtPmVudHJ5ID4gbWF4X3N0YXQpCiAgICAgICAgICAgICBtYXhfc3RhdCA9IHNwLT5lbnRyeTsKICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgb2lkX2J1ZiwgYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKICAgICB9CiAgICAgb2lkX2J1ZltidWZfbGVuLTFdID0gc3RhYmxlWzBdLmVudHJ5OwotICAgIHN0YXRzID0gKG9pZCAqKWNhbGxvYyhtYXhfc3RhdCsxLCBzaXplb2Yob2lkKSk7CisgICAgc3RhdHMgPSAobG9uZyAqKWNhbGxvYyhtYXhfc3RhdCsxLCBzaXplb2YobG9uZykpOwogICAgIAogICAgIC8qCiAgICAgICogV2FsayB0aGUgc3BlY2lmaWVkIGNvbHVtbihzKSwgYW5kIHRvdGFsIHRoZSBpbmRpdmlkdWFsIHN0YXRpc3RpY3MKQEAgLTI0Niw2ICsyNDUsOCBAQAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldG5leHQoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJCS8qIGV4Y2VwdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmICggc25tcF9vaWRfY29tcGFyZSggb2lkX2J1ZiwgICBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZSwgYnVmX2xlbikgIT0gMCApCiAgICAgICAgICAgICBicmVhazsgICAgLyogRW5kIG9mIFRhYmxlICovCkBAIC0yNzIsNyArMjczLDYgQEAKICAgICAgICAgICogICB0aGVuIG9ubHkgZGlzcGxheSBub24temVybyBzdGF0cy4KICAgICAgICAgICovCiAgICAgICAgIGlmICggc3RhdHNbc3AtPmVudHJ5XSA+IDAgfHwgc2ZsYWcgPT0gMSApIHsKLSAgICAgICAgICAgIHB1dGNoYXIoJ1x0Jyk7CiAgICAgICAgICAgICBwcmludGYoc3AtPmRlc2NyaXB0aW9uLCBzdGF0c1tzcC0+ZW50cnldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVyYWwoc3RhdHNbc3AtPmVudHJ5XSkpOwogICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKQEAgLTI5MiwyNyArMjkyLDI3IEBACiAgICAgb2lkICAgICAgICAgICAgICAgaXA2c3RhdHNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDU1LCAxLCA2LCAxLCAwIH07CiAgICAgc2l6ZV90ICAgICAgICAgICAgaXA2c3RhdHNfbGVuICAgPSBPSURfTEVOR1RIKCBpcDZzdGF0c19vaWQgKTsKICAgICBzdHJ1Y3Qgc3RhdF90YWJsZSBpcDZzdGF0c190YmxbXSA9IHsKLSAgICAgICAgezEsICIlZCB0b3RhbCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsyLCAiJWQgZGF0YWdyYW0lcyB3aXRoIGhlYWRlciBlcnJvcnMifSwKLSAgICAgICAgezMsICIlZCBvdmVyc2l6ZWQgZGF0YWdyYW0lcyJ9LAotICAgICAgICB7NCwgIiVkIGRhdGFncmFtJXMgd2l0aCBubyByb3V0ZSJ9LAotICAgICAgICB7NSwgIiVkIGRhdGFncmFtJXMgd2l0aCBhbiBpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MifSwKLSAgICAgICAgezYsICIlZCBkYXRhZ3JhbSVzIHdpdGggdW5rbm93biBwcm90b2NvbCJ9LAotICAgICAgICB7NywgIiVkIHNob3J0IGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHs4LCAiJWQgZGF0YWdyYW0lcyBkaXNjYXJkZWQifSwKLSAgICAgICAgezksICIlZCBkYXRhZ3JhbSVzIGRlbGl2ZXJlZCJ9LAotICAgICAgICB7MTAsICIlZCBkYXRhZ3JhbSVzIGZvcndhcmRlZCJ9LAotICAgICAgICB7MTEsICIlZCBvdXRwdXQgZGF0YWdyYW0gcmVxdWVzdCVzIn0sCi0gICAgICAgIHsxMiwgIiVkIG91dHB1dCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7MTMsICIlZCBkYXRhZ3JhbSVzIGZyYWdtZW50ZWQifSwKLSAgICAgICAgezE0LCAiJWQgZnJhZ21lbnRhdGlvbiBmYWlsdXJlJXMifSwKLSAgICAgICAgezE1LCAiJWQgZnJhZ21lbnQlcyBjcmVhdGVkIn0sCi0gICAgICAgIHsxNiwgIiVkIGZyYWdtZW50JXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezE3LCAiJWQgZGF0YWdyYW0lcyByZWFzc2VtYmxlZCJ9LAotICAgICAgICB7MTgsICIlZCByZWFzc2VtYmx5IGZhaWx1cmUlcyJ9LAotICAgICAgICB7MTksICIlZCBtdWx0aWNhc3QgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAotICAgICAgICB7MjAsICIlZCBtdWx0aWNhc3QgZGF0YWdyYW0lcyB0cmFuc21pdHRlZCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgMSwgIiUxNGQgdG90YWwgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAorICAgICAgICB7IDIsICIlMTRkIGRhdGFncmFtJXMgd2l0aCBoZWFkZXIgZXJyb3JzIn0sCisgICAgICAgIHsgMywgIiUxNGQgb3ZlcnNpemVkIGRhdGFncmFtJXMifSwKKyAgICAgICAgeyA0LCAiJTE0ZCBkYXRhZ3JhbSVzIHdpdGggbm8gcm91dGUifSwKKyAgICAgICAgeyA1LCAiJTE0ZCBkYXRhZ3JhbSVzIHdpdGggYW4gaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIn0sCisgICAgICAgIHsgNiwgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIHVua25vd24gcHJvdG9jb2wifSwKKyAgICAgICAgeyA3LCAiJTE0ZCBzaG9ydCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAorICAgICAgICB7IDgsICIlMTRkIGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsgOSwgIiUxNGQgZGF0YWdyYW0lcyBkZWxpdmVyZWQifSwKKyAgICAgICAgezEwLCAiJTE0ZCBkYXRhZ3JhbSVzIGZvcndhcmRlZCJ9LAorICAgICAgICB7MTEsICIlMTRkIG91dHB1dCBkYXRhZ3JhbSByZXF1ZXN0JXMifSwKKyAgICAgICAgezEyLCAiJTE0ZCBvdXRwdXQgZGF0YWdyYW0lcyBkaXNjYXJkZWQifSwKKyAgICAgICAgezEzLCAiJTE0ZCBkYXRhZ3JhbSVzIGZyYWdtZW50ZWQifSwKKyAgICAgICAgezE0LCAiJTE0ZCBmcmFnbWVudGF0aW9uIGZhaWx1cmUlcyJ9LAorICAgICAgICB7MTUsICIlMTRkIGZyYWdtZW50JXMgY3JlYXRlZCJ9LAorICAgICAgICB7MTYsICIlMTRkIGZyYWdtZW50JXMgcmVjZWl2ZWQifSwKKyAgICAgICAgezE3LCAiJTE0ZCBkYXRhZ3JhbSVzIHJlYXNzZW1ibGVkIn0sCisgICAgICAgIHsxOCwgIiUxNGQgcmVhc3NlbWJseSBmYWlsdXJlJXMifSwKKyAgICAgICAgezE5LCAiJTE0ZCBtdWx0aWNhc3QgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAorICAgICAgICB7MjAsICIlMTRkIG11bHRpY2FzdCBkYXRhZ3JhbSVzIHRyYW5zbWl0dGVkIn0sCisgICAgICAgIHsgMCwgIiJ9CiAgICAgfTsKIAogICAgIF9kdW1wX3Y2c3RhdHMoIG5hbWUsIGlwNnN0YXRzX29pZCwgaXA2c3RhdHNfbGVuLCBpcDZzdGF0c190YmwgKTsKQEAgLTMzMiw0NiArMzMyLDQ2IEBACiAgICAgb2lkICAgICAgICAgICAgICAgaWNtcDZzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNTYsIDEsIDEsIDEsIDAgfTsKICAgICBzaXplX3QgICAgICAgICAgICBpY21wNnN0YXRzX2xlbiAgID0gT0lEX0xFTkdUSCggaWNtcDZzdGF0c19vaWQgKTsKICAgICBzdHJ1Y3Qgc3RhdF90YWJsZSBpY21wNnN0YXRzX3RibFtdID0gewotICAgICAgICB7MSwgIiVkIHRvdGFsIG1lc3NhZ2UlcyByZWNlaXZlZCJ9LAotICAgICAgICB7MiwgIiVkIG1lc3NhZ2UlcyBkcm9wcGVkIGR1ZSB0byBlcnJvcnMifSwKLSAgICAgICAgezE4LCAiJWQgb3VwdXQgbWVzc2FnZSByZXF1ZXN0JXMifSwKLSAgICAgICAgezE5LCAiJWQgb3V0cHV0IG1lc3NhZ2UlcyBkaXNjYXJkZWQifSwKLSAgICAgICAgezAsICIifQorICAgICAgICB7IDEsICIlMTRkIHRvdGFsIG1lc3NhZ2UlcyByZWNlaXZlZCJ9LAorICAgICAgICB7IDIsICIlMTRkIG1lc3NhZ2UlcyBkcm9wcGVkIGR1ZSB0byBlcnJvcnMifSwKKyAgICAgICAgezE4LCAiJTE0ZCBvdXB1dCBtZXNzYWdlIHJlcXVlc3QlcyJ9LAorICAgICAgICB7MTksICIlMTRkIG91dHB1dCBtZXNzYWdlJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsgMCwgIiJ9CiAgICAgfTsKICAgICBzdHJ1Y3Qgc3RhdF90YWJsZSBpY21wNl9pbmhpc3RvZ3JhbVtdID0gewotICAgICAgICB7MywgIkRlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAlZCJ9LAotICAgICAgICB7NCwgIkFkbWluIFByb2hpYml0OiAlZCJ9LAotICAgICAgICB7NSwgIlRpbWUgRXhjZWVkZWQ6ICVkIn0sCi0gICAgICAgIHs2LCAiUGFyYW1ldGVyIFByb2JsZW06ICVkIn0sCi0gICAgICAgIHs3LCAiVG9vIEJpZzogJWQifSwKLSAgICAgICAgezgsICJFY2hvIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHs5LCAiRWNobyBSZXBseTogJWQifSwKLSAgICAgICAgezEwLCAiUm91dGVyIFNvbGljaXQ6ICVkIn0sCi0gICAgICAgIHsxMSwgIlJvdXRlciBBZHZlcnQ6ICVkIn0sCi0gICAgICAgIHsxMiwgIk5laWdoYm9yIFNvbGljaXQ6ICVkIn0sCi0gICAgICAgIHsxMywgIk5laWdoYm9yIEFkdmVydDogJWQifSwKLSAgICAgICAgezE0LCAiUmVkaXJlY3Q6ICVkIn0sCi0gICAgICAgIHsxNSwgIkdyb3VwIE1lbWJlciBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7MTYsICJHcm91cCBNZW1iZXIgUmVwbHk6JWQifSwKLSAgICAgICAgezE3LCAiR3JvdXAgTWVtYmVyIFJlZHVjZTolZCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgMywgIiAgICAgICAgRGVzdGluYXRpb24gdW5yZWFjaGFibGU6ICVkIn0sCisgICAgICAgIHsgNCwgIiAgICAgICAgQWRtaW4gUHJvaGliaXQ6ICVkIn0sCisgICAgICAgIHsgNSwgIiAgICAgICAgVGltZSBFeGNlZWRlZDogJWQifSwKKyAgICAgICAgeyA2LCAiICAgICAgICBQYXJhbWV0ZXIgUHJvYmxlbTogJWQifSwKKyAgICAgICAgeyA3LCAiICAgICAgICBUb28gQmlnOiAlZCJ9LAorICAgICAgICB7IDgsICIgICAgICAgIEVjaG8gUmVxdWVzdDogJWQifSwKKyAgICAgICAgeyA5LCAiICAgICAgICBFY2hvIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MTAsICIgICAgICAgIFJvdXRlciBTb2xpY2l0OiAlZCJ9LAorICAgICAgICB7MTEsICIgICAgICAgIFJvdXRlciBBZHZlcnQ6ICVkIn0sCisgICAgICAgIHsxMiwgIiAgICAgICAgTmVpZ2hib3IgU29saWNpdDogJWQifSwKKyAgICAgICAgezEzLCAiICAgICAgICBOZWlnaGJvciBBZHZlcnQ6ICVkIn0sCisgICAgICAgIHsxNCwgIiAgICAgICAgUmVkaXJlY3Q6ICVkIn0sCisgICAgICAgIHsxNSwgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsxNiwgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MTcsICIgICAgICAgIEdyb3VwIE1lbWJlciBSZWR1Y2U6ICVkIn0sCisgICAgICAgIHsgMCwgIiJ9CiAgICAgfTsKICAgICBzdHJ1Y3Qgc3RhdF90YWJsZSBpY21wNl9vdXRoaXN0b2dyYW1bXSA9IHsKLSAgICAgICAgezIwLCAiRGVzdGluYXRpb24gdW5yZWFjaGFibGU6ICVkIn0sCi0gICAgICAgIHsyMSwgIkFkbWluIFByb2hpYml0OiAlZCJ9LAotICAgICAgICB7MjIsICJUaW1lIEV4Y2VlZGVkOiAlZCJ9LAotICAgICAgICB7MjMsICJQYXJhbWV0ZXIgUHJvYmxlbTogJWQifSwKLSAgICAgICAgezI0LCAiVG9vIEJpZzogJWQifSwKLSAgICAgICAgezI1LCAiRWNobyBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7MjYsICJFY2hvIFJlcGx5OiAlZCJ9LAotICAgICAgICB7MjcsICJSb3V0ZXIgU29saWNpdDogJWQifSwKLSAgICAgICAgezI4LCAiUm91dGVyIEFkdmVydDogJWQifSwKLSAgICAgICAgezI5LCAiTmVpZ2hib3IgU29saWNpdDogJWQifSwKLSAgICAgICAgezMwLCAiTmVpZ2hib3IgQWR2ZXJ0OiAlZCJ9LAotICAgICAgICB7MzEsICJSZWRpcmVjdDogJWQifSwKLSAgICAgICAgezMyLCAiR3JvdXAgTWVtYmVyIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHszMywgIkdyb3VwIE1lbWJlciBSZXBseTolZCJ9LAotICAgICAgICB7MzQsICJHcm91cCBNZW1iZXIgUmVkdWNlOiVkIn0sCisgICAgICAgIHsyMCwgIiAgICAgICAgRGVzdGluYXRpb24gdW5yZWFjaGFibGU6ICVkIn0sCisgICAgICAgIHsyMSwgIiAgICAgICAgQWRtaW4gUHJvaGliaXQ6ICVkIn0sCisgICAgICAgIHsyMiwgIiAgICAgICAgVGltZSBFeGNlZWRlZDogJWQifSwKKyAgICAgICAgezIzLCAiICAgICAgICBQYXJhbWV0ZXIgUHJvYmxlbTogJWQifSwKKyAgICAgICAgezI0LCAiICAgICAgICBUb28gQmlnOiAlZCJ9LAorICAgICAgICB7MjUsICIgICAgICAgIEVjaG8gUmVxdWVzdDogJWQifSwKKyAgICAgICAgezI2LCAiICAgICAgICBFY2hvIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MjcsICIgICAgICAgIFJvdXRlciBTb2xpY2l0OiAlZCJ9LAorICAgICAgICB7MjgsICIgICAgICAgIFJvdXRlciBBZHZlcnQ6ICVkIn0sCisgICAgICAgIHsyOSwgIiAgICAgICAgTmVpZ2hib3IgU29saWNpdDogJWQifSwKKyAgICAgICAgezMwLCAiICAgICAgICBOZWlnaGJvciBBZHZlcnQ6ICVkIn0sCisgICAgICAgIHszMSwgIiAgICAgICAgUmVkaXJlY3Q6ICVkIn0sCisgICAgICAgIHszMiwgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHszMywgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MzQsICIgICAgICAgIEdyb3VwIE1lbWJlciBSZWR1Y2U6ICVkIn0sCiAgICAgICAgIHswLCAiIn0KICAgICB9OwogCkBAIC00MTMsMTIgKzQxMywxMSBAQAogCQkocmV0KSA9IGdldHNlcnZieXBvcnQoKGludCkocG9ydCksIChwcm90bykpOyBcCiAJfSB3aGlsZSAoMCkKIAotCXN0cnVjdCBzZXJ2ZW50ICpzcCA9IDA7CisJc3RydWN0IHNlcnZlbnQgKnNwID0gTlVMTDsKIAljaGFyIGxpbmVbODBdLCAqY3A7Ci0JaW50IHdpZHRoOworCWludCB3aWR0aCA9IDI3LTk7CiAJaW50IGxlbiA9IHNpemVvZiBsaW5lOwogCi0Jd2lkdGggPSBBZmxhZyA/IDEyIDogMTY7CiAJaWYgKHZmbGFnICYmIHdpZHRoIDwgc3RybGVuKGluZXQ2bmFtZShpbjYpKSkKIAkJd2lkdGggPSBzdHJsZW4oaW5ldDZuYW1lKGluNikpOwogCXNucHJpbnRmKGxpbmUsIGxlbiwgIiUuKnMuIiwgd2lkdGgsIGluZXQ2bmFtZShpbjYpKTsKQEAgLTQyOCwxMiArNDI3LDEyIEBACiAKIAljcCA9IHN0cmNocihsaW5lLCAnXDAnKTsKIAlpZiAoIW5mbGFnICYmIHBvcnQgJiYgbG9jYWwpCi0JCUdFVFNFUlZCWVBPUlQ2KHBvcnQsIHByb3RvLCBzcCk7CisJCUdFVFNFUlZCWVBPUlQ2KGh0b25zKHBvcnQpLCBwcm90bywgc3ApOwogCWlmIChzcCB8fCBwb3J0ID09IDApCi0JCXNucHJpbnRmKGNwLCBsZW4sICIlLjhzIiwgc3AgPyBzcC0+c19uYW1lIDogIioiKTsKKwkJc25wcmludGYoY3AsIGxlbiwgdmZsYWcgPyAiJXMiIDogIiUuOHMiLCBzcCA/IHNwLT5zX25hbWUgOiAiKiIpOwogCWVsc2UKLQkJc25wcmludGYoY3AsIGxlbiwgIiVkIiwgbnRvaHMoKHVfc2hvcnQpcG9ydCkpOwotCXdpZHRoID0gQWZsYWcgPyAxOCA6IDIyOworCQlzbnByaW50ZihjcCwgbGVuLCAiJWQiLCBwb3J0KTsKKwl3aWR0aCA9IDI3OwogCWlmICh2ZmxhZyAmJiB3aWR0aCA8IHN0cmxlbihsaW5lKSkKIAkJd2lkdGggPSBzdHJsZW4obGluZSk7CiBiYWlsOgpAQCAtNDYzLDE2ICs0NjIsMTcgQEAKIAogCWlmIChmaXJzdCAmJiAhbmZsYWcpIHsKIAkJZmlyc3QgPSAwOwotCQlpZiAoZ2V0aG9zdG5hbWUoZG9tYWluLCBzaXplb2YoZG9tYWluKSkgPT0gMCAmJgotCQkgICAgKGNwID0gc3RyY2hyKGRvbWFpbiwgJy4nKSkpCisJCWlmIChnZXRob3N0bmFtZShsaW5lLCBzaXplb2YobGluZSkpID09IDAgJiYKKwkJICAgIChjcCA9IHN0cmNocihsaW5lLCAnLicpKSkKIAkJCSh2b2lkKSBzdHJsY3B5KGRvbWFpbiwgY3AgKyAxLCBzaXplb2YgZG9tYWluKTsKIAkJZWxzZQogCQkJZG9tYWluWzBdID0gJ1wwJzsKIAl9CiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotCWNwID0gMDsKKwljcCA9IE5VTEw7CiAJaWYgKCFuZmxhZyAmJiAhSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoaW42cCkpIHsKLQkJaHAgPSBnZXRob3N0YnlhZGRyKChjb25zdCBjaGFyICopaW42cCwgc2l6ZW9mKCppbjZwKSwgQUZfSU5FVDYpOworCQlocCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigoY29uc3QgY2hhciAqKWluNnAsIHNpemVvZigqaW42cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfSU5FVDYpOwogCQlpZiAoaHApIHsKIAkJCWlmICgoY3AgPSBzdHJjaHIoaHAtPmhfbmFtZSwgJy4nKSkgJiYKIAkJCSAgICAhc3RyY21wKGNwICsgMSwgZG9tYWluKSkKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGluNnApIHx8CiAJCSAgICBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoaW42cCkpIHsKIAkJCXNpbjYuc2luNl9zY29wZV9pZCA9Ci0JCQkgICAgbnRvaHMoKihjb25zdCB1X2ludDE2X3QgKikmaW42cC0+czZfYWRkclsyXSk7CisJCQkgICAgbnRvaHMoKihjb25zdCB1aW50MTZfdCAqKSZpbjZwLT5zNl9hZGRyWzJdKTsKIAkJCXNpbjYuc2luNl9hZGRyLnM2X2FkZHJbMl0gPSAwOwogCQkJc2luNi5zaW42X2FkZHIuczZfYWRkclszXSA9IDA7CiAJCX0KZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvaW5ldHguYyBiL2FwcHMvc25tcG5ldHN0YXQvaW5ldHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjVlYmVlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9pbmV0eC5jCkBAIC0wLDAgKzEsNTg0IEBACisvKgkkT3BlbkJTRDogaW5ldDYuYyx2IDEuMzEgMjAwNC8xMS8xNyAwMTo0NzoyMCBpdG9qdW4gRXhwICQJKi8KKy8qCUJTREkgaW5ldC5jLHYgMi4zIDE5OTUvMTAvMjQgMDI6MTk6MjkgcHJiIEV4cAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiAgSU5IRVJJVEVEX0NPREUKKyNpZm5kZWYgbGludAorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylpbmV0LmMJOC40IChCZXJrZWxleSkgNC8yMC85NCI7CisjZWxzZQorLypfX1JDU0lEKCIkT3BlbkJTRDogaW5ldDYuYyx2IDEuMzEgMjAwNC8xMS8xNyAwMTo0NzoyMCBpdG9qdW4gRXhwICQiKTsqLworLypfX1JDU0lEKCJLQU1FIElkOiBpbmV0Ni5jLHYgMS4xMCAyMDAwLzAyLzA5IDEwOjQ5OjMxIGl0b2p1biBFeHAiKTsqLworI2VuZGlmCisjZW5kaWYgLyogbm90IGxpbnQgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgIndpbnN0dWIuaCIKKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAibmV0c3RhdC5oIgorCitzdHJ1Y3Qgc3RhdF90YWJsZSB7CisgICAgdW5zaWduZWQgaW50IGVudHJ5OyAgICAgIC8qIGVudHJ5IG51bWJlciBpbiB0YWJsZSAqLworICAgIC8qCisgICAgICogZm9ybWF0IHN0cmluZyB0byBwcmludGYoZGVzY3JpcHRpb24sIHZhbHVlKSAKKyAgICAgKiB3YXJuaW5nOiB0aGUgJWQgbXVzdCBiZSBiZWZvcmUgdGhlICVzIAorICAgICAqLworICAgIGNoYXIgICAgICAgICAgICBkZXNjcmlwdGlvbls4MF07Cit9OworCit2b2lkCWluZXR4cHJpbnQoaW50LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICwgaW50LCBjb25zdCBjaGFyICosIGludCk7CisKKy8qCisgKiBQcmludCBhIHN1bW1hcnkgb2YgVENQIGNvbm5lY3Rpb25zCisgKiBMaXN0ZW5pbmcgcHJvY2Vzc2VzIGFyZSBzdXBwcmVzc2VkIHVubGVzcyB0aGUKKyAqICAgLWEgKGFsbCkgZmxhZyBpcyBzcGVjaWZpZWQuCisgKi8KK2NvbnN0IGNoYXIgICAgICp0Y3B4c3RhdGVzW10gPSB7CisgICAgIiIsCisgICAgIkNMT1NFRCIsCisgICAgIkxJU1RFTiIsCisgICAgIlNZTlNFTlQiLAorICAgICJTWU5SRUNFSVZFRCIsCisgICAgIkVTVEFCTElTSEVEIiwKKyAgICAiRklOV0FJVDEiLAorICAgICJGSU5XQUlUMiIsCisgICAgIkNMT1NFV0FJVCIsCisgICAgIkxBU1RBQ0siLAorICAgICJDTE9TSU5HIiwKKyAgICAiVElNRVdBSVQiCit9OworI2RlZmluZSBUQ1BfTlNUQVRFUyAxMQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IHN0YXQ7CisgICAgaW50IGhjc3RhdDsKKyAgICBjb25zdCBjaGFyICpzdHI7Cit9IHN5c3RlbXN0YXRzX3Q7CisKK3N5c3RlbXN0YXRzX3Qgc3lzdGVtc3RhdHNbXSA9IHsKKyAgICB7ICAzLCAgNCwgImRhdGFncmFtcyBpbnB1dCIgfSwKKyAgICB7ICA1LCAgNiwgIm9jdGV0cyByZWNlaXZlZCIgfSwKKyAgICB7ICA3LCAgMCwgImhkciBlcnJvcnMgaW5wdXQiIH0sCisgICAgeyAgOCwgIDAsICJubyByb3V0ZXMgaW5wdXQiIH0sCisgICAgeyAgOSwgIDAsICJhZGRyZXNzIGVycm9ycyBpbnB1dCIgfSwKKyAgICB7IDEwLCAgMCwgInVua25vd24gcHJvdG9jb2wgaW5wdXQiIH0sCisgICAgeyAxMiwgMTMsICJpbnB1dCBkYXRhZ3JhbXMgZm9yd2FyZGVkIiB9LAorICAgIHsgMTEsICAwLCAidHJ1bmNhdGVkIGRhdGFncmFtcyBpbnB1dCIgfSwKKyAgICB7IDE0LCAgMCwgImlucHV0IHJlYXNzZW1ibHkgcmVxdWlyZWQiIH0sCisgICAgeyAxNSwgIDAsICJpbnB1dCByZWFzc2VtbGVkIE9LIiB9LAorICAgIHsgMTYsICAwLCAiaW5wdXQgcmVhc3NlbWJseSBmYWlsZWQiIH0sCisgICAgeyAxNywgIDAsICJpbnB1dCBkYXRhZ3JhbXMgZGlzY2FyZGVkIiB9LAorICAgIHsgMTgsIDE5LCAiaW5wdXQgZGF0YWdyYW1zIHJlY2VpdmVkIiB9LAorICAgIHsgMjAsIDIxLCAib3V0cHV0IGRhdGFncmFtIHJlcXVlc3RzIiB9LAorICAgIHsgMjIsICAwLCAib3V0cHV0IG5vIHJvdXRlIiB9LAorICAgIHsgMjMsIDI0LCAiZGF0YWdyYW1zIGZvcndhcmRlZCIgfSwKKyAgICB7IDI1LCAgMCwgIm91dHB1dCBkYXRhZ3JhbXMgZGlzY2FyZGVkIiB9LAorICAgIHsgMjYsICAwLCAib3V0cHV0IGRhdGFncmFtcyBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIiB9LAorICAgIHsgMjcsICAwLCAib3V0cHV0IGRhdGFncmFtcyBmcmFnbWVudGVkIiB9LAorICAgIHsgMjgsICAwLCAib3V0cHV0IGZyYWdtZW50YXRpb24gZmFpbGVkIiB9LAorICAgIHsgMjksICAwLCAiZnJhZ21lbnRzIGNyZWF0ZWQiIH0sCisgICAgeyAzMCwgMzEsICJkYXRhZ3JhbXMgdHJhbnNtaXR0ZWQiIH0sCisgICAgeyAzMiwgMzMsICJvY3RldHMgdHJhbnNtaXR0ZWQiIH0sCisgICAgeyAgMCB9Cit9OworCitzeXN0ZW1zdGF0c190IGljbXBzdGF0c1tdID0geworICAgIHsgIDIsICAwLCAiaW5wdXQgbWVzc2FnZXMiIH0sCisgICAgeyAgMywgIDAsICJpbnB1dCBlcnJvcnMiIH0sCisgICAgeyAgNCwgIDAsICJvdXRwdXQgbWVzc2FnZXMiIH0sCisgICAgeyAgNSwgIDAsICJvdXRwdXQgZXJyb3JzIiB9LAorICAgIHsgIDAgfQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBjb2RlOworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cit9IGNvZGVsaXN0X3Q7CisKK2NvZGVsaXN0X3QgaWNtcGNvZGVzW10gPSB7CisgICAgeyAgIDAsICJFY2hvIHJlcGx5IiB9LAorICAgIHsgICAzLCAiRGVzdGluYXRpb24gdW5yZWFjaGFibGUiIH0sCisgICAgeyAgIDQsICJTb3VyY2UgcXVlbmNoIiB9LAorICAgIHsgICA1LCAiUmVkaXJlY3QiIH0sCisgICAgeyAgIDYsICJBbHRlcm5hdGUgaG9zdCBhZGRyZXNzIiB9LAorICAgIHsgICA4LCAiRWNobyByZXF1ZXN0IiB9LAorICAgIHsgICA5LCAiUm91dGVyIGFkdmVydGlzZW1lbnQiIH0sCisgICAgeyAgMTAsICJSb3V0ZXIgc2VsZWN0aW9uIiB9LAorICAgIHsgIDExLCAiVGltZSBleGNlZWRlZCIgfSwKKyAgICB7ICAxMiwgIlBhcmFtZXRlciBwcm9ibGVtIiB9LAorICAgIHsgIDEzLCAiVGltZXN0YW1wIHJlcXVlc3QiIH0sCisgICAgeyAgMTQsICJUaW1lc3RhbXAgcmVwbHkiIH0sCisgICAgeyAgMTUsICJJbmZvcm1hdGlvbiByZXF1ZXN0IiB9LAorICAgIHsgIDE2LCAiSW5mb3JtYXRpb24gcmVwbHkiIH0sCisgICAgeyAgMTcsICJBZGRyZXNzIG1hc2sgcmVxdWVzdCIgfSwKKyAgICB7ICAxOCwgIkFkZHJlc3MgbWFzayByZXBseSIgfSwKKyAgICB7IDAgfQorfTsKKworY29kZWxpc3RfdCBpY21wNmNvZGVzW10gPSB7CisgICAgeyAgIDEsICAgIkRlc3RpbmF0aW9uIFVucmVhY2hhYmxlIiB9LAorICAgIHsgICAyLCAgICJQYWNrZXQgVG9vIEJpZyIgfSwKKyAgICB7ICAgMywgICAiVGltZSBFeGNlZWRlZCIgfSwKKyAgICB7ICAgNCwgICAiUGFyYW1ldGVyIFByb2JsZW0iIH0sCisgICAgeyAxMDAsICAgIlByaXZhdGUgZXhwZXJpbWVudGF0aW9uIDEwMCIgfSwKKyAgICB7IDEwMSwgICAiUHJpdmF0ZSBleHBlcmltZW50YXRpb24gMTAxIiB9LAorICAgIHsgMTI3LCAgICJSZXNlcnZlZCBmb3IgZXhwYW5zaW9uIG9mIElDTVB2NiBlcnJvciBtZXNzYWdlcyIgfSwKKyAgICB7IDEyOCwgICAiRWNobyBSZXF1ZXN0IiB9LAorICAgIHsgMTI5LCAgICJFY2hvIFJlcGx5IiB9LAorICAgIHsgMTMwLCAgICJNdWx0aWNhc3QgTGlzdGVuZXIgUXVlcnkiIH0sCisgICAgeyAxMzEsICAgIk11bHRpY2FzdCBMaXN0ZW5lciBSZXBvcnQiIH0sCisgICAgeyAxMzIsICAgIk11bHRpY2FzdCBMaXN0ZW5lciBEb25lIiB9LAorICAgIHsgMTMzLCAgICJSb3V0ZXIgU29saWNpdGF0aW9uIiB9LAorICAgIHsgMTM0LCAgICJSb3V0ZXIgQWR2ZXJ0aXNlbWVudCIgfSwKKyAgICB7IDEzNSwgICAiTmVpZ2hib3IgU29saWNpdGF0aW9uIiB9LAorICAgIHsgMTM2LCAgICJOZWlnaGJvciBBZHZlcnRpc2VtZW50IiB9LAorICAgIHsgMTM3LCAgICJSZWRpcmVjdCBNZXNzYWdlIiB9LAorICAgIHsgMTM4LCAgICJSb3V0ZXIgUmVudW1iZXJpbmciIH0sCisgICAgeyAxMzksICAgIklDTVAgTm9kZSBJbmZvcm1hdGlvbiBRdWVyeSIgfSwKKyAgICB7IDE0MCwgICAiSUNNUCBOb2RlIEluZm9ybWF0aW9uIFJlc3BvbnNlIiB9LAorICAgIHsgMTQxLCAgICJJbnZlcnNlIE5laWdoYm9yIERpc2NvdmVyeSBTb2xpY2l0YXRpb24gTWVzc2FnZSIgfSwKKyAgICB7IDE0MiwgICAiSW52ZXJzZSBOZWlnaGJvciBEaXNjb3ZlcnkgQWR2ZXJ0aXNlbWVudCBNZXNzYWdlIiB9LAorICAgIHsgMTQzLCAgICJWZXJzaW9uIDIgTXVsdGljYXN0IExpc3RlbmVyIFJlcG9ydCIgfSwKKyAgICB7IDE0NCwgICAiSG9tZSBBZ2VudCBBZGRyZXNzIERpc2NvdmVyeSBSZXF1ZXN0IE1lc3NhZ2UiIH0sCisgICAgeyAxNDUsICAgIkhvbWUgQWdlbnQgQWRkcmVzcyBEaXNjb3ZlcnkgUmVwbHkgTWVzc2FnZSIgfSwKKyAgICB7IDE0NiwgICAiTW9iaWxlIFByZWZpeCBTb2xpY2l0YXRpb24iIH0sCisgICAgeyAxNDcsICAgIk1vYmlsZSBQcmVmaXggQWR2ZXJ0aXNlbWVudCIgfSwKKyAgICB7IDE0OCwgICAiQ2VydGlmaWNhdGlvbiBQYXRoIFNvbGljaXRhdGlvbiBNZXNzYWdlIiB9LAorICAgIHsgMTQ5LCAgICJDZXJ0aWZpY2F0aW9uIFBhdGggQWR2ZXJ0aXNlbWVudCBNZXNzYWdlIiB9LAorICAgIHsgMTUxLCAgICJNdWx0aWNhc3QgUm91dGVyIEFkdmVydGlzZW1lbnQiIH0sCisgICAgeyAxNTIsICAgIk11bHRpY2FzdCBSb3V0ZXIgU29saWNpdGF0aW9uIiB9LAorICAgIHsgMTUzLCAgICJNdWx0aWNhc3QgUm91dGVyIFRlcm1pbmF0aW9uIiB9LAorICAgIHsgMTU0LCAgICJGTUlQdjYgTWVzc2FnZXMiIH0sCisgICAgeyAxNTUsICAgIlJQTCBDb250cm9sIE1lc3NhZ2UiIH0sCisgICAgeyAwIH0KK307CisKKwordm9pZAordGNweHByb3RvcHIoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwLCAqcHZhcjsKKyAgICBvaWQgICAgdGNwQ29ubmVjdGlvblN0YXRlX29pZFtdID0geyAxLDMsNiwxLDIsMSw2LDE5LDEsNyB9OworICAgIHNpemVfdCB0Y3BDb25uZWN0aW9uU3RhdGVfbGVuICAgPSBPSURfTEVOR1RIKCB0Y3BDb25uZWN0aW9uU3RhdGVfb2lkICk7CisgICAgaW50ICAgIHN0YXRlLCBpOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9jYWxBZGRyLCByZW1vdGVBZGRyOworICAgIGludCAgICBsb2NhbFBvcnQsICAgICByZW1vdGVQb3J0LCAgcGlkID0gMDsKKyAgICBpbnQgICAgbG9jYWxUeXBlLCAgICByZW1vdGVUeXBlLCBpbng7CisgICAgaW50ICAgIGZpcnN0ID0gMTsKKyAgICBzdGF0aWMgaW50IGRvbmUgPSAwOworCisgICAgaWYgKGRvbmUrKykgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBXYWxraW5nIHRoZSB2NiB0Y3BDb25uZWN0aW9uU3RhdGUgY29sdW1uIHdpbGwgcHJvdmlkZSBhbGwKKyAgICAgKiAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCisgICAgICovCisgICAgdmFyID0gTlVMTDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCB0Y3BDb25uZWN0aW9uU3RhdGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcENvbm5lY3Rpb25TdGF0ZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKKyAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJLyogRXhjZXB0aW9uICovCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodnAgPSB2YXI7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKKwljaGFyIGxuYW1lWzVdOworICAgICAgICBzdGF0ZSA9ICp2cC0+dmFsLmludGVnZXI7CisJaW54ID0gdGNwQ29ubmVjdGlvblN0YXRlX2xlbjsKKwlwdmFyID0gTlVMTDsKKworCXZwLT5uYW1lW2lueC0xXSA9IDg7CisJc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnB2YXIsIHZwLT5uYW1lLCB2cC0+bmFtZV9sZW5ndGgsCisJCQkJCSBBU05fTlVMTCwgTlVMTCwgIDApOworCWlmIChuZXRzbm1wX3F1ZXJ5X2dldCggcHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisJICAgIHNubXBfZnJlZV92YXIoIHB2YXIgKTsKKwkgICAgcmV0dXJuOworCX0KKwlpZiAoKHB2YXItPnR5cGUgJiAweEYwKSAhPSAweDgwKQkvKiBFeGNlcHRpb24gKi8KKwkgICAgcGlkID0gKnB2YXItPnZhbC5pbnRlZ2VyOworICAgICAgICAKKyAgICAgICAgLyogRXh0cmFjdCB0aGUgbG9jYWwvcmVtb3RlIGluZm9ybWF0aW9uIGZyb20gdGhlIGluZGV4IHZhbHVlcyAqLworCWxvY2FsVHlwZSA9IHZwLT5uYW1lW2lueCsrXTsKKwlmb3IgKGkgPSAwOyBpIDwgdnAtPm5hbWVbaW54XTsgaSsrKQorCSAgICBsb2NhbEFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gPSB2cC0+bmFtZVtpbngraSsxXTsKKwlpbnggKz0gdnAtPm5hbWVbaW54XSArIDE7CisgICAgICAgIGxvY2FsUG9ydCAgICA9IHZwLT5uYW1lW2lueCsrXTsKKwlyZW1vdGVUeXBlID0gdnAtPm5hbWVbaW54KytdOworCWZvciAoaSA9IDA7IGkgPCB2cC0+bmFtZVtpbnhdOyBpKyspCisJICAgIHJlbW90ZUFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gPSB2cC0+bmFtZVtpbngraSsxXTsKKwlpbnggKz0gdnAtPm5hbWVbaW54XSArIDE7CisgICAgICAgIHJlbW90ZVBvcnQgICAgPSB2cC0+bmFtZVtpbngrK107CisKKwlzbm1wX2ZyZWVfdmFyYmluZChwdmFyKTsKKworCWlmIChhZiA9PSBBRl9JTkVUICYmIGxvY2FsVHlwZSA9PSAyKSBjb250aW51ZTsKKwlpZiAoYWYgPT0gQUZfSU5FVDYgJiYgbG9jYWxUeXBlICE9IDIpIGNvbnRpbnVlOworCisgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgcHJpbnRmKCJBY3RpdmUgSW50ZXJuZXQgKCVzKSBDb25uZWN0aW9ucyIsICJ0Y3AiKTsKKyAgICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7CisgICAgICAgICAgICBwcmludGYoIiUtNS41cyAlLTI3LjI3cyAlLTI3LjI3cyAlMTEuMTFzICU1LjVzXG4iLAorICAgICAgICAgICAgICAgICAgICJQcm90byIsICJMb2NhbCBBZGRyZXNzIiwgIlJlbW90ZSBBZGRyZXNzIiwgIlN0YXRlIiwgIlBJRCIpOworICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICB9CisKKwlzdHJjcHkobG5hbWUsICJ0Y3AiKTsKKwlpZiAobG9jYWxUeXBlID09IDIpIGxuYW1lWzNdID0gJzYnOworCWVsc2UgbG5hbWVbM10gPSAnNCc7CisJbG5hbWVbNF0gPSAwOworICAgICAgICBwcmludGYoIiUtNS41cyIsIGxuYW1lKTsKKyAgICAgICAgaW5ldHhwcmludChsb2NhbFR5cGUsIGxvY2FsQWRkciwgIGxvY2FsUG9ydCwgInRjcCIsIDEpOworICAgICAgICBpbmV0eHByaW50KHJlbW90ZVR5cGUsIHJlbW90ZUFkZHIsIHJlbW90ZVBvcnQsICJ0Y3AiLCAwKTsKKyAgICAgICAgaWYgKCBzdGF0ZSA8IDEgfHwgc3RhdGUgPiBUQ1BfTlNUQVRFUyApCisgICAgICAgICAgICBwcmludGYoIiAlMTFkICU1ZFxuIiwgc3RhdGUsIHBpZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiICUxMXMgJTVkXG4iLCB0Y3B4c3RhdGVzWyBzdGF0ZSBdLCBwaWQpOworICAgIH0KKyAgICBzbm1wX2ZyZWVfdmFyYmluZCggdmFyICk7CisKKyAgICBpZiAoYWZsYWcpCisJbGlzdGVueHByb3RvcHIobmFtZSk7Cit9CisKKy8qCisgKiBQcmludCBhIHN1bW1hcnkgb2YgbGlzdGVuaW5nICJjb25uZWN0aW9ucyIKKyAqLwordm9pZAorbGlzdGVueHByb3RvcHIoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwOworICAgIG9pZCAgICB0Y3BMaXN0ZW5lclByb2Nlc3Nfb2lkW10gPSB7IDEsMyw2LDEsMiwxLDYsMjAsMSw0IH07CisgICAgc2l6ZV90IHRjcExpc3RlbmVyUHJvY2Vzc19sZW4gICA9IE9JRF9MRU5HVEgoIHRjcExpc3RlbmVyUHJvY2Vzc19vaWQgKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGxvY2FsQWRkcjsKKyAgICBpbnQgICAgbG9jYWxUeXBlLCBsb2NhbFBvcnQsIHBpZDsKKyAgICBpbnQgICAgaSwgaW54OworCisgICAgLyoKKyAgICAgKiBXYWxraW5nIGEgc2luZ2xlIGNvbHVtbiBvZiB0aGUgdWRwVGFibGUgd2lsbCBwcm92aWRlCisgICAgICogICBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbmRleCB2YWx1ZXMuCisgICAgICovCisgICAgdmFyID0gTlVMTDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCB0Y3BMaXN0ZW5lclByb2Nlc3Nfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcExpc3RlbmVyUHJvY2Vzc19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKKyAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJLyogRXhjZXB0aW9uICovCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50ZigiTGlzdGVuaW5nIEludGVybmV0ICglcykgQ29ubmVjdGlvbnNcbiIsICJ0Y3AiKTsKKyAgICBwcmludGYoIiUtNS41cyAlLTI3LjI3cyAlNXNcbiIsICJQcm90byIsICJMb2NhbCBBZGRyZXNzIiwgIlBJRCIpOworICAgIGZvciAodnAgPSB2YXI7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKKwljaGFyIGxuYW1lWzVdOworCWlueCA9IHRjcExpc3RlbmVyUHJvY2Vzc19sZW47CisgICAgICAgIC8qCisgICAgICAgICAqIEV4dHJhY3QgdGhlIGxvY2FsIHBvcnQgZnJvbSB0aGUgaW5kZXggdmFsdWVzLCBidXQgdGFrZQorICAgICAgICAgKiAgIHRoZSBJUCBhZGRyZXNzIGZyb20gdGhlIHZhcmJpbmQgdmFsdWUsICh3aGljaCBpcyB3aHkKKyAgICAgICAgICogICB3ZSB3YWxrZWQgdWRwTG9jYWxBZGRyZXNzIHJhdGhlciB0aGFuIHVkcExvY2FsUG9ydCkKKyAgICAgICAgICovCisJbG9jYWxUeXBlID0gdnAtPm5hbWVbaW54KytdOworCWlmIChhZiA9PSBBRl9JTkVUICYmIGxvY2FsVHlwZSA9PSAyKSBjb250aW51ZTsKKwlpZiAoYWYgPT0gQUZfSU5FVDYgJiYgbG9jYWxUeXBlICE9IDIpIGNvbnRpbnVlOworCisJZm9yIChpID0gMDsgaSA8IHZwLT5uYW1lW2lueF07IGkrKykKKwkgICAgbG9jYWxBZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldID0gdnAtPm5hbWVbaW54K2krMV07CisJaW54ICs9IHZwLT5uYW1lW2lueF0rMTsKKyAgICAgICAgbG9jYWxQb3J0ID0gdnAtPm5hbWVbIGlueCsrIF07CisgICAgICAgIHBpZCAgID0gKnZwLT52YWwuaW50ZWdlcjsKKwlzdHJjcHkobG5hbWUsICJ0Y3AiKTsKKwlpZiAobG9jYWxUeXBlID09IDIpIGxuYW1lWzNdID0gJzYnOworCWVsc2UgbG5hbWVbM10gPSAnNCc7CisJbG5hbWVbNF0gPSAwOworICAgICAgICBwcmludGYoIiUtNS41cyIsIGxuYW1lKTsKKyAgICAgICAgaW5ldHhwcmludChsb2NhbFR5cGUsIGxvY2FsQWRkciwgbG9jYWxQb3J0LCAidGNwIiwgMSk7CisgICAgICAgIHByaW50ZigiICU1ZFxuIiwgcGlkKTsKKyAgICB9CisgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZhciApOworfQorCisvKgorICogUHJpbnQgYSBzdW1tYXJ5IG9mIFVEUHY2ICJjb25uZWN0aW9ucyIKKyAqICAgIFhYWCAtIHdoYXQgYWJvdXQgImxpc3RlbmluZyIgc2VydmljZXMgPz8KKyAqLwordm9pZAordWRweHByb3RvcHIoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwOworICAgIG9pZCAgICB1ZHBFbmRwb2ludFByb2Nlc3Nfb2lkW10gPSB7IDEsMyw2LDEsMiwxLDcsNywxLDggfTsKKyAgICBzaXplX3QgdWRwRW5kcG9pbnRQcm9jZXNzX2xlbiAgID0gT0lEX0xFTkdUSCggdWRwRW5kcG9pbnRQcm9jZXNzX29pZCApOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9jYWxBZGRyLCByZW1vdGVBZGRyOworICAgIGludCAgICBsb2NhbFR5cGUsIHJlbW90ZVR5cGUsIGxvY2FsUG9ydCwgcmVtb3RlUG9ydCwgcGlkOworICAgIGludCAgICBpLCBpbng7CisgICAgc3RhdGljIGludCBkb25lID0gMDsKKworICAgIGlmIChkb25lKyspIHJldHVybjsKKworICAgIC8qCisgICAgICogV2Fsa2luZyBhIHNpbmdsZSBjb2x1bW4gb2YgdGhlIHVkcFRhYmxlIHdpbGwgcHJvdmlkZQorICAgICAqICAgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5kZXggdmFsdWVzLgorICAgICAqLworICAgIHZhciA9IE5VTEw7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgdWRwRW5kcG9pbnRQcm9jZXNzX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFByb2Nlc3NfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9OVUxMLCBOVUxMLCAgMCk7CisgICAgaWYgKG5ldHNubXBfcXVlcnlfd2FsayggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoKHZhci0+dHlwZSAmIDB4RjApID09IDB4ODApCS8qIEV4Y2VwdGlvbiAqLworICAgICAgICByZXR1cm47CisKKyAgICBwcmludGYoIkFjdGl2ZSBJbnRlcm5ldCAoJXMpIENvbm5lY3Rpb25zXG4iLCAidWRwIik7CisgICAgcHJpbnRmKCIlLTUuNXMgJS0yNy4yN3MgJS0yNy4yN3MgJTVzXG4iLCAiUHJvdG8iLCAiTG9jYWwgQWRkcmVzcyIsICJSZW1vdGUgQWRkcmVzcyIsICJQSUQiKTsKKyAgICBmb3IgKHZwID0gdmFyOyB2cCA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgIGNoYXIgbG5hbWVbNV07CisJaW54ID0gdWRwRW5kcG9pbnRQcm9jZXNzX2xlbjsKKyAgICAgICAgLyoKKyAgICAgICAgICogRXh0cmFjdCB0aGUgbG9jYWwgcG9ydCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMsIGJ1dCB0YWtlCisgICAgICAgICAqICAgdGhlIElQIGFkZHJlc3MgZnJvbSB0aGUgdmFyYmluZCB2YWx1ZSwgKHdoaWNoIGlzIHdoeQorICAgICAgICAgKiAgIHdlIHdhbGtlZCB1ZHBMb2NhbEFkZHJlc3MgcmF0aGVyIHRoYW4gdWRwTG9jYWxQb3J0KQorICAgICAgICAgKi8KKwlsb2NhbFR5cGUgPSB2cC0+bmFtZVtpbngrK107CisJaWYgKGFmID09IEFGX0lORVQgJiYgbG9jYWxUeXBlID09IDIpIGNvbnRpbnVlOworCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsb2NhbFR5cGUgIT0gMikgY29udGludWU7CisJZm9yIChpID0gMDsgaSA8IHZwLT5uYW1lW2lueF07IGkrKykKKwkgICAgbG9jYWxBZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldID0gdnAtPm5hbWVbaW54K2krMV07CisJaW54ICs9IHZwLT5uYW1lW2lueF0rMTsKKyAgICAgICAgbG9jYWxQb3J0ID0gdnAtPm5hbWVbIGlueCsrIF07CisJcmVtb3RlVHlwZSA9IHZwLT5uYW1lW2lueCsrXTsKKwlmb3IgKGkgPSAwOyBpIDwgdnAtPm5hbWVbaW54XTsgaSsrKQorCSAgICByZW1vdGVBZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldID0gdnAtPm5hbWVbaW54K2krMV07CisJaW54ICs9IHZwLT5uYW1lW2lueF0rMTsKKyAgICAgICAgcmVtb3RlUG9ydCA9IHZwLT5uYW1lWyBpbngrKyBdOworICAgICAgICBwaWQgICA9ICp2cC0+dmFsLmludGVnZXI7CisJc3RyY3B5KGxuYW1lLCAidWRwIik7CisJaWYgKGxvY2FsVHlwZSA9PSAyKSBsbmFtZVszXSA9ICc2JzsKKwllbHNlIGxuYW1lWzNdID0gJzQnOworCWxuYW1lWzRdID0gMDsKKyAgICAgICAgcHJpbnRmKCIlLTUuNXMiLCBsbmFtZSk7CisgICAgICAgIGluZXR4cHJpbnQobG9jYWxUeXBlLCBsb2NhbEFkZHIsIGxvY2FsUG9ydCwgInVkcCIsIDEpOworICAgICAgICBpbmV0eHByaW50KHJlbW90ZVR5cGUsIHJlbW90ZUFkZHIsIHJlbW90ZVBvcnQsICJ1ZHAiLCAxKTsKKyAgICAgICAgcHJpbnRmKCIgJTVkXG4iLCBwaWQpOworICAgIH0KKyAgICBzbm1wX2ZyZWVfdmFyYmluZCggdmFyICk7Cit9CisKK3N0YXRpYyB2b2lkCitzdGF0c3ByaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN5c3RlbXN0YXRzX3QgKnN0LCBpbnQgcHJvdG8sCisJY29uc3Qgb2lkICp0YmwsIHNpemVfdCB0YmxsZW4pCit7CisgICAgb2lkIHZhclszMl07CisgICAgc2l6ZV90IGxlbjsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZiOworCisgICAgbWVtY3B5KHZhciwgdGJsLCB0YmxsZW4qc2l6ZW9mKG9pZCkpOworICAgIHZhclt0YmxsZW4rMV0gPSBwcm90bzsKKyAgICBsZW4gPSB0YmxsZW4rMjsKKworICAgIHByaW50ZigiJXM6XG4iLCBuYW1lKTsKKyAgICB3aGlsZSAoc3QtPnN0YXQpIHsKKwl2YiA9IE5VTEw7CisJaWYgKHN0LT5oY3N0YXQpIHsKKwkgICAgdmFyW3RibGxlbl0gPSBzdC0+aGNzdGF0OworCSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmIsIHZhciwgbGVuLCBBU05fTlVMTCwgTlVMTCwgIDApOworCSAgICBpZiAobmV0c25tcF9xdWVyeV9nZXQoIHZiLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwkJc25tcF9mcmVlX3ZhciggdmIgKTsKKwkJdmIgPSBOVUxMOworCSAgICB9CisJfQorCWlmICghdmIpIHsKKwkgICAgdmFyW3RibGxlbl0gPSBzdC0+c3RhdDsKKwkgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZiLCB2YXIsIGxlbiwgQVNOX05VTEwsIE5VTEwsIDApOworCSAgICBpZiAobmV0c25tcF9xdWVyeV9nZXQoIHZiLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwkJc25tcF9mcmVlX3ZhciggdmIgKTsKKwkJdmIgPSBOVUxMOworCSAgICB9CisJfQorCWlmICh2YikgeworCSAgICBpZiAodmItPnR5cGUgPT0gQVNOX0NPVU5URVIpIHsKKwkJaWYgKCp2Yi0+dmFsLmludGVnZXIgPiAwIHx8IHNmbGFnID09IDEpCisJCSAgICBwcmludGYoIiUxNGx1ICVzXG4iLCAqdmItPnZhbC5pbnRlZ2VyLCBzdC0+c3RyKTsKKwkgICAgfQorCSAgICBlbHNlIGlmICh2Yi0+dHlwZSA9PSBBU05fQ09VTlRFUjY0KSB7CisJCWNoYXIgYTY0YnVmW0k2NENIQVJTWiArIDFdOworCQlwcmludFU2NChhNjRidWYsIHZiLT52YWwuY291bnRlcjY0KTsKKwkJaWYgKHN0cmNtcChhNjRidWYsICIwIikgIT0gMCB8fCBzZmxhZyA9PSAxKQorCQkgICAgcHJpbnRmKCIlMTRzICVzXG4iLCBhNjRidWYsIHN0LT5zdHIpOworCSAgICB9CisJICAgIGVsc2UKKwkJcHJpbnRmKCIlMTRzICVzXG4iLCAiLSIsIHN0LT5zdHIpOworCSAgICBzbm1wX2ZyZWVfdmFyYmluZCh2Yik7CisJfQorCWVsc2UgeworCSAgICBwcmludGYoIiUxNHMgJXNcbiIsICItIiwgc3QtPnN0cik7CisJfQorCXN0Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcHJoaXN0byhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBvaWQgKnZhciwgc2l6ZV90IGxlbiwgaW50IHZlciwgY29kZWxpc3RfdCAqY3MpCit7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YiA9IE5VTEwsICp2cDsKKyAgICBjb2RlbGlzdF90ICpjcDsKKyAgICBpbnQgY29kZTsKKyAgICBjaGFyIG5vY29kZVszMl07CisKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmIsIHZhciwgbGVuLCBBU05fTlVMTCwgTlVMTCwgIDApOworICAgIGlmIChuZXRzbm1wX3F1ZXJ5X3dhbGsoIHZiLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwlzbm1wX2ZyZWVfdmFyKCB2YiApOworCXJldHVybjsKKyAgICB9CisgICAgcHJpbnRmKCIgICAgICVzIGhpc3RvZ3JhbTpcbiIsIG5hbWUpOworICAgIHByaW50ZigiICAgICAlMTBzICUxMHMgJXNcbiIsICJpbnB1dCIsICJvdXRwdXQiLCAidHlwZSIpOworICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCAyNTY7IGNvZGUrKykgeworCXVuc2lnbmVkIGxvbmcgaW5wID0gMCwgb3V0ID0gMDsKKwlpbnQgZm91bmQgPSAwOworCXZwID0gdmI7CisJd2hpbGUgKHZwICYmIGZvdW5kICE9IDIpIHsKKwkgICAgaWYgKHZwLT5uYW1lWzExXSA9PSBjb2RlICYmIHZwLT5uYW1lWzEwXSA9PSB2ZXIpIHsKKwkJaWYgKHZwLT5uYW1lWzldID09IDMpIGlucCA9ICp2cC0+dmFsLmludGVnZXI7CisJCWVsc2Ugb3V0ID0gKnZwLT52YWwuaW50ZWdlcjsKKwkJZm91bmQrKzsKKwkgICAgfQorCSAgICB2cCA9IHZwLT5uZXh0X3ZhcmlhYmxlOworCX0KKwlpZiAoZm91bmQpIHsKKwkgICAgY3AgPSBjczsKKwkgICAgd2hpbGUgKGNwLT5uYW1lICYmIGNwLT5jb2RlICE9IGNvZGUpIGNwKys7CisJICAgIGlmIChpbnAgfHwgb3V0IHx8IHNmbGFnID09IDEpIHsKKwkJaWYgKCFjcC0+Y29kZSkKKwkJICAgIHNucHJpbnRmKG5vY29kZSwgc2l6ZW9mIG5vY29kZSwgInR5cGUgJWQiLCBjb2RlKTsKKwkJcHJpbnRmKCIgICAgICUxMGx1ICUxMGx1ICVzXG4iLCBpbnAsIG91dCwgY3AtPm5hbWUgPyBjcC0+bmFtZSA6IG5vY29kZSk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHNubXBfZnJlZV92YXJiaW5kKHZiKTsKK30KKwordm9pZAoraXB4X3N0YXRzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgb2lkIGlwc3lzc3RhdF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzEsIDEsIDEgfTsKKyAgICBzaXplX3QgaXBzeXNzdGF0X2xlbiA9IHNpemVvZihpcHN5c3N0YXRfb2lkKSAvIHNpemVvZihpcHN5c3N0YXRfb2lkWzBdKTsKKyAgICBzdGF0aWMgaW50IGZpcnN0ID0gMTsKKworICAgIGlmICghZmlyc3QpIHJldHVybjsKKyAgICBmaXJzdCA9IDA7CisKKyAgICBpZiAoIW5hbWUgfHwgc3RyY21wKG5hbWUsICJpcCIpID09IDApCisJc3RhdHNwcmludCgiaXAiLCBzeXN0ZW1zdGF0cywgMSwgaXBzeXNzdGF0X29pZCwgaXBzeXNzdGF0X2xlbik7CisgICAgaWYgKCFuYW1lIHx8IHN0cmNtcChuYW1lLCAiaXA2IikgPT0gMCkKKwlzdGF0c3ByaW50KCJpcDYiLCBzeXN0ZW1zdGF0cywgMiwgaXBzeXNzdGF0X29pZCwgaXBzeXNzdGF0X2xlbik7Cit9CisKK3ZvaWQKK2ljbXB4X3N0YXRzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgb2lkIGljbXBzdGF0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA1LCAyOSwgMSB9OworICAgIHNpemVfdCBpY21wc3RhdF9sZW4gPSBzaXplb2YoaWNtcHN0YXRfb2lkKSAvIHNpemVvZihpY21wc3RhdF9vaWRbMF0pOworICAgIG9pZCBpY21wbXNnX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA1LCAzMCwgMSB9OworICAgIHNpemVfdCBpY21wbXNnX2xlbiA9IHNpemVvZihpY21wbXNnX29pZCkgLyBzaXplb2YoaWNtcG1zZ19vaWRbMF0pOworICAgIHN0YXRpYyBpbnQgZmlyc3QgPSAxOworCisgICAgaWYgKCFmaXJzdCkKKwlyZXR1cm47CisgICAgZmlyc3QgPSAwOworCisgICAgaWYgKCFuYW1lIHx8IHN0cmNtcChuYW1lLCAiaWNtcCIpID09IDApIHsKKwlzdGF0c3ByaW50KCJpY21wIiwgaWNtcHN0YXRzLCAxLCBpY21wc3RhdF9vaWQsIGljbXBzdGF0X2xlbik7CisJcHJoaXN0bygiaWNtcCIsIGljbXBtc2dfb2lkLCBpY21wbXNnX2xlbiwgMSwgaWNtcGNvZGVzKTsKKyAgICB9CisgICAgaWYgKCFuYW1lIHx8IHN0cmNtcChuYW1lLCAiaWNtcDYiKSA9PSAwKSB7CisJc3RhdHNwcmludCgiaWNtcDYiLCBpY21wc3RhdHMsIDIsIGljbXBzdGF0X29pZCwgaWNtcHN0YXRfbGVuKTsKKwlwcmhpc3RvKCJpY21wNiIsIGljbXBtc2dfb2lkLCBpY21wbXNnX2xlbiwgMiwgaWNtcDZjb2Rlcyk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCit1bmtub3ducHJpbnQodm9pZCkKK3sKKyAgICBjaGFyIGxpbmVbODBdLCAqY3A7CisgICAgaW50IHdpZHRoID0gMjc7CisKKyAgICBpZiAodmZsYWcpCisJc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIlcy4iLCAiKiIpOworICAgIGVsc2UKKwlzbnByaW50ZihsaW5lLCBzaXplb2YgbGluZSwgIiUuKnMuIiwgd2lkdGgtOSwgIioiKTsKKyAgICBjcCA9IHN0cmNocihsaW5lLCAnXDAnKTsKKyAgICBzbnByaW50ZihjcCwgbGluZSArIHNpemVvZiBsaW5lIC0gY3AsIHZmbGFnID8gIiVzIiA6ICIlLjhzIiwgIioiKTsKKyAgICBpZiAodmZsYWcgJiYgd2lkdGggPCBzdHJsZW4obGluZSkpCisJd2lkdGggPSBzdHJsZW4obGluZSk7CisgICAgcHJpbnRmKCIgJS0qLipzIiwgd2lkdGgsIHdpZHRoLCBsaW5lKTsKK30KKworLyoKKyAqIFByZXR0eSBwcmludCBhbiBJbnRlcm5ldCBhZGRyZXNzIChuZXQgYWRkcmVzcyArIHBvcnQpLgorICogSWYgdGhlIG5mbGFnIHdhcyBzcGVjaWZpZWQsIHVzZSBudW1iZXJzIGluc3RlYWQgb2YgbmFtZXMuCisgKi8KKwordm9pZAoraW5ldHhwcmludChpbnQgcHJvdG8sIHN0cnVjdCBzb2NrYWRkcl9pbjYgaW42LCBpbnQgcG9ydCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxvY2FsKQoreworCisJaWYgKHByb3RvID09IDIpCisJICAgIGluZXQ2cHJpbnQoKHVfY2hhciAqKSZpbjYuc2luNl9hZGRyLnM2X2FkZHIsIHBvcnQsIG5hbWUsIGxvY2FsKTsKKwllbHNlIGlmIChwcm90byA9PSAxKQorCSAgICBpbmV0cHJpbnQoKHN0cnVjdCBpbl9hZGRyICopJmluNi5zaW42X2FkZHIuczZfYWRkciwgcG9ydCwgbmFtZSwgbG9jYWwpOworCWVsc2UgaWYgKHByb3RvID09IDApCisJICAgIHVua25vd25wcmludCgpOworCWVsc2UgYWJvcnQoKTsKK30KZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvbWFpbi5jIGIvYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMKaW5kZXggOTQ3YzAyYi4uMGU5NzdhZCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMKQEAgLTU3LDEzICs1NywxNyBAQAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJuZXRzdGF0LmgiCiAKLWludAlBZmxhZzsJCS8qIHNob3cgYWRkcmVzc2VzIG9mIHByb3RvY29sIGNvbnRyb2wgYmxvY2sgKi8KKyNpZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgIndpbnN0dWIuaCIKKyNlbmRpZgorCiBpbnQJYWZsYWc7CQkvKiBzaG93IGFsbCBzb2NrZXRzIChpbmNsdWRpbmcgc2VydmVycykgKi8KIGludAliZmxhZzsJCS8qIHNob3cgYnl0ZXMgaW5zdGVhZCBvZiBwYWNrZXRzICovCiBpbnQJZGZsYWc7CQkvKiBzaG93IGkvZiBkcm9wcGVkIHBhY2tldHMgKi8KIGludAlnZmxhZzsJCS8qIHNob3cgZ3JvdXAgKG11bHRpY2FzdCkgcm91dGluZyBvciBzdGF0cyAqLwogaW50CWlmbGFnOwkJLyogc2hvdyBpbnRlcmZhY2VzICovCiBpbnQJbGZsYWc7CQkvKiBzaG93IHJvdXRpbmcgdGFibGUgd2l0aCB1c2UgYW5kIHJlZiAqLworaW50CUxmbGFnOwkJLyogTGVnYWN5IG1pYnMgKi8KIGludAltZmxhZzsJCS8qIHNob3cgbWVtb3J5IHN0YXRzICovCiBpbnQJbmZsYWc7CQkvKiBzaG93IGFkZHJlc3NlcyBudW1lcmljYWxseSAqLwogaW50CW9mbGFnOwkJLyogT3Blbi9OZXQtQlNEIHN0eWxlIG9jdGV0IG91dHB1dCAqLwpAQCAtNzUsNDAgKzc5LDU2IEBACiBpbnQJdGZsYWc7CQkvKiBzaG93IGkvZiB3YXRjaGRvZyB0aW1lcnMgKi8KIGludAl2ZmxhZzsJCS8qIGJlIHZlcmJvc2UgKi8KIAorCiBpbnQJaW50ZXJ2YWw7CS8qIHJlcGVhdCBpbnRlcnZhbCBmb3IgaS9mIHN0YXRzICovCiBjaGFyCSppbnRyZmFjZTsJLyogZGVzaXJlZCBpL2YgZm9yIHN0YXRzLCBvciBOVUxMIGZvciBhbGwgaS9mcyAqLwogaW50CWFmOwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KK2ludCAgICAgbWF4X2dldGJ1bGsgPSAzMjsgIC8qIHNwZWNpZmllcyB0aGUgbWF4LXJlcGVhdGVycyB2YWx1ZSB0byB1c2Ugd2l0aCBHRVRCVUxLIHJlcXVlc3RzICovCiAKIGNoYXIgICAgKnByb2duYW1lID0gTlVMTDsKLQorY29uc3QgY2hhciAqcG5hbWU7CiAgICAgLyoKICAgICAgKiBzdHJ1Y3Qgbmxpc3QgbmxbXSAtIE9taXR0ZWQKICAgICAgKi8KIAordHlwZWRlZiB2b2lkIChzdHJpbmdmdW4pKGNvbnN0IGNoYXIqKTsKKwogc3RydWN0IHByb3RveCB7CiAgICAgICAgIC8qIHByX2luZGV4L3ByX3NpbmRleCAtIE9taXR0ZWQgKi8gCi0JaW50CXByX3dhbnRlZDsJCQkvKiAxIGlmIHdhbnRlZCwgMCBvdGhlcndpc2UgKi8KLQl2b2lkCSgqcHJfY2Jsb2NrcykoY29uc3QgY2hhciAqKTsJLyogY29udHJvbCBibG9ja3MgcHJpbnRpbmcgcm91dGluZSAqLwotCXZvaWQJKCpwcl9zdGF0cykoY29uc3QgY2hhciAqKTsJLyogc3RhdGlzdGljcyBwcmludGluZyByb3V0aW5lICovCi0gIGNvbnN0IGNoYXIJKnByX25hbWU7CQkJLyogd2VsbC1rbm93biBuYW1lICovCi19IHByb3RveFtdID0geworCWludAkJcHJfd2FudGVkOwkvKiAxIGlmIHdhbnRlZCwgMCBvdGhlcndpc2UgKi8KKwlzdHJpbmdmdW4JKnByX2NibG9ja3M7CS8qIGNvbnRyb2wgYmxvY2tzIHByaW50aW5nIHJvdXRpbmUgKi8KKwlzdHJpbmdmdW4JKnByX3N0YXRzOwkvKiBzdGF0aXN0aWNzIHByaW50aW5nIHJvdXRpbmUgKi8KKwljb25zdCBjaGFyCSpwcl9uYW1lOwkvKiB3ZWxsLWtub3duIG5hbWUgKi8KK307CisKK3N0cnVjdCBwcm90b3ggcHJvdG94W10gPSB7CiAJeyAxLAl0Y3Bwcm90b3ByLAl0Y3Bfc3RhdHMsCSJ0Y3AiIH0sCQogCXsgMSwJdWRwcHJvdG9wciwJdWRwX3N0YXRzLAkidWRwIiB9LAkKIAotCXsgMSwJMCwJaXBfc3RhdHMsCSJpcCIgfSwJCS8qIHByb3RvcHIgT21pdHRlZCAqLwotCXsgMSwJMCwJaWNtcF9zdGF0cywJImljbXAiIH0sCQorCXsgMSwJKHN0cmluZ2Z1biopMCwJaXBfc3RhdHMsCSJpcCIgfSwJLyogcHJvdG9wciBPbWl0dGVkICovCisJeyAxLAkoc3RyaW5nZnVuKikwLAlpY21wX3N0YXRzLAkiaWNtcCIgfSwKIAkvKiBpZ21wL2FoL2VzcC9pcGVuY2FwL2V0aGVyaXAvaXBjb21wL2NhcnAvcGZzeW5jL3BpbSAtIE9taXR0ZWQgKi8KLQl7IDAsCTAsCTAsCQkwIH0KKwl7IDAsCShzdHJpbmdmdW4qKTAsCShzdHJpbmdmdW4qKTAsCU5VTEwgfQogfTsKIAogc3RydWN0IHByb3RveCBpcDZwcm90b3hbXSA9IHsKLQl7IDEsCXRjcDZwcm90b3ByLAkwLAkidGNwNiIgfSwKLQl7IDEsCXVkcDZwcm90b3ByLAkwLAkidWRwNiIgfSwJCisJeyAxLAl0Y3A2cHJvdG9wciwJKHN0cmluZ2Z1biopMCwJInRjcDYiIH0sCisJeyAxLAl1ZHA2cHJvdG9wciwJKHN0cmluZ2Z1biopMCwJInVkcDYiIH0sCiAKLQl7IDEsCTAsCWlwNl9zdGF0cywJImlwNiIgfSwJLyogaXA2cHJvdG9wciBPbWl0dGVkICovCi0JeyAxLAkwLAlpY21wNl9zdGF0cywJImljbXA2IiB9LAkKKwl7IDEsCShzdHJpbmdmdW4qKTAsCWlwNl9zdGF0cywJImlwNiIgfSwvKiBpcDZwcm90b3ByIE9taXR0ZWQgKi8KKwl7IDEsCShzdHJpbmdmdW4qKTAsCWljbXA2X3N0YXRzLAkiaWNtcDYiIH0sCiAJLyogcGltNi9yaXA2IC0gT21pdHRlZCAqLwotCXsgMCwJMCwJMCwJCTAgfQorCXsgMCwJKHN0cmluZ2Z1biopMCwJKHN0cmluZ2Z1biopMCwJTlVMTCB9Cit9OworCitzdHJ1Y3QgcHJvdG94IGlweHByb3RveFtdID0geworCXsgMSwJdGNweHByb3RvcHIsCXRjcF9zdGF0cywJInRjcCIgfSwJCisJeyAxLAl1ZHB4cHJvdG9wciwJdWRwX3N0YXRzLAkidWRwIiB9LAkKKwl7IDEsCShzdHJpbmdmdW4qKTAsCWlweF9zdGF0cywJImlwIiB9LC8qIGlwNnByb3RvcHIgT21pdHRlZCAqLworCXsgMSwJKHN0cmluZ2Z1biopMCwJaXB4X3N0YXRzLAkiaXA2IiB9LC8qIGlwNnByb3RvcHIgT21pdHRlZCAqLworCXsgMSwJKHN0cmluZ2Z1biopMCwJaWNtcHhfc3RhdHMsCSJpY21wIiB9LAorCXsgMSwJKHN0cmluZ2Z1biopMCwJaWNtcHhfc3RhdHMsCSJpY21wNiIgfSwKKwl7IDAsCShzdHJpbmdmdW4qKTAsCShzdHJpbmdmdW4qKTAsCU5VTEwgfQogfTsKIAogCS8qIHtpcHgsbnMsYXRhbGt9cHJvdG94IE9taXR0ZWQgKi8KQEAgLTEzMiwxMSArMTUyLDYgQEAKICAgICBjYXNlICdDJzoKICAgICAgICAgd2hpbGUgKCpvcHRhcmcpIHsKICAgICAgICAgICAgIHN3aXRjaCAoKm9wdGFyZysrKSB7Ci0JICAgIC8qCWNhc2UgJ0EnOgkJKkJTRDogIGRpc3BsYXkgUENCIGFkZHJlc3NlcwotCQkJCQlMaW51eDogcHJvdG9jb2wgZmFtaWx5Ci0JCQlBZmxhZyA9IDE7Ci0JCQlicmVhazsKLQkgICAgICovCiAJCWNhc2UgJ2EnOgogCQkJYWZsYWcgPSAxOwogCQkJYnJlYWs7CkBAIC0xODYsNiArMjAxLDkgQEAKIAkJY2FzZSAnaSc6CiAJCQlpZmxhZyA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnTCc6CisJCQlMZmxhZyA9IDE7CisJCQlicmVhazsKIAkgICAgLyogIGNhc2UgJ0wnOgkJRnJlZUJTRDogRGlzcGxheSBsaXN0ZW4gcXVldWUgbGVuZ3RocwogCQkJCQlOZXRCU0Q6ICBTdXBwcmVzcyBsaW5rLWxldmVsIHJvdXRlcyAqLwogCSAgICAvKgljYXNlICdsJzoJCU9wZW5CU0Q6IFdpZGVyIElQdjYgZGlzcGxheQpAQCAtMjIyLDYgKzI0MCw3IEBACiAJCQkJZXhpdCgxKTsKIAkJCX0KIAkJCXBmbGFnID0gMTsKKwkJCXBuYW1lID0gdHAtPnByX25hbWU7CiAJCQlyZXR1cm47CiAJICAgIC8qCWNhc2UgJ3EnOgkJTmV0QlNEOiAgSVJRIGluZm9ybWF0aW9uCiAJCQkJCU9wZW5CU0Q6IFN1cHByZXNzIGluYWN0aXZlIEkvRnMKQEAgLTIzMSw2ICsyNTAsMjQgQEAKIAkJY2FzZSAncic6CiAJCQlyZmxhZyA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnUic6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW5kIDwgYXJnYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd2W29wdGluZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2dldGJ1bGsgPSBhdG9pKGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhfZ2V0YnVsayA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgLUNSIG9wdGlvbjogJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2W29wdGluZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ1Igb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGluZCsrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCWNhc2UgJ1MnOgkgICAgIC8qIEZyZWVCU0Q6CiAJCQkJCU5ldEJTRDogIFNlbWktbnVtZXJpYyBkaXNwbGF5CiAJCQkJCU9wZW5CU0Q6IFNob3cgcm91dGUgc291cmNlIHNlbGVjdG9yICovCkBAIC0yOTQsMTEgKzMzMSwxMyBAQAogICAgICAgICAgICAgcHJvZ25hbWUgPSBhcmd2WzBdOwogCiAJc3dpdGNoIChzbm1wX3BhcnNlX2FyZ3MoIGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzppUnMiLCBvcHRQcm9jKSkgewotCWNhc2UgLTI6CisJY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisJICAgIGV4aXQoMSk7CisJY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogCSAgICBleGl0KDApOwotCWNhc2UgLTE6CisJY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAJICAgIHVzYWdlKCk7Ci0JICAgIGV4aXQoMCk7CisJICAgIGV4aXQoMSk7CiAJZGVmYXVsdDoKIAkgICAgYnJlYWs7CiAJfQpAQCAtMzMwLDYgKzM2OSw3IEBACiAJICogICAgIEtlcm5lbCBuYW1lbGlzIGhhbmRsaW5nCiAJICovCiAKKyNpZiAwCiAJaWYgKG1mbGFnKSB7CiAgICAgICAgICAgICAvKgogCQltYnByKG5sW05fTUJTVEFUXS5uX3ZhbHVlLCBubFtOX01CUE9PTF0ubl92YWx1ZSwKQEAgLTM0MSw2ICszODEsNyBAQAogCQlwcmludHByb3RvKHRwLCB0cC0+cHJfbmFtZSk7CiAJCWV4aXQoMCk7CiAJfQorI2VuZGlmCiAJLyoKIAkgKiBLZWVwIGZpbGUgZGVzY3JpcHRvcnMgb3BlbiB0byBhdm9pZCBvdmVyaGVhZAogCSAqIG9mIG9wZW4vY2xvc2Ugb24gZWFjaCBjYWxsIHRvIGdldCogcm91dGluZXMuCkBAIC0zNTcsNyArMzk4LDEwIEBACiAJCQlydF9zdGF0cygpOwogCQllbHNlCiAgICAgICAgICAgICAgICovCi0JCQlyb3V0ZXByKCk7CisJCWlmIChMZmxhZyB8fCByb3V0ZXhwcihhZikgPT0gMCkgeworCQkgICAgaWYgKHJvdXRlNHByKGFmKSA9PSAwICYmIGFmID09IEFGX0lORVQpIHJvdXRlcHIoKTsKKwkJICAgIHJvdXRlNnByKGFmKTsKKwkJfQogCQlleGl0KDApOwogCX0KICAgICAgLyoKQEAgLTM4OCwyMyArNDMyLDMzIEBACiAJCWV4aXQoMCk7CiAJfQogICAgICAqLwotCWlmIChhZiA9PSBBRl9JTkVUIHx8IGFmID09IEFGX1VOU1BFQykgeworCXNldHNlcnZlbnQoMSk7CisgICAgICAgIGlmIChMZmxhZykgeworICAgICAgICAgICAgc3dpdGNoIChhZikgeworICAgICAgICAgICAgY2FzZSBBRl9VTlNQRUM6CiAJCXNldHByb3RvZW50KDEpOwotCQlzZXRzZXJ2ZW50KDEpOwogCQkvKiB1Z2gsIHRoaXMgaXMgTyhNTikgLi4uIHdoeSBkbyB3ZSBkbyB0aGlzPyAqLwogCQl3aGlsZSAoKHAgPSBnZXRwcm90b2VudCgpKSkgewogCQkJZm9yICh0cCA9IHByb3RveDsgdHAtPnByX25hbWU7IHRwKyspCiAJCQkJaWYgKHN0cmNtcCh0cC0+cHJfbmFtZSwgcC0+cF9uYW1lKSA9PSAwKQotCQkJCQlicmVhazsKLQkJCWlmICh0cC0+cHJfbmFtZSA9PSAwIHx8IHRwLT5wcl93YW50ZWQgPT0gMCkKLQkJCQljb250aW51ZTsKLQkJCXByaW50cHJvdG8odHAsIHAtPnBfbmFtZSk7CisJCQkJCWlmICh0cC0+cHJfbmFtZSAmJiB0cC0+cHJfd2FudGVkKQorCQkJCQkgICAgcHJpbnRwcm90byh0cCwgcC0+cF9uYW1lKTsKIAkJfQogCQllbmRwcm90b2VudCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgICAgICAgICBmb3IgKHRwID0gcHJvdG94OyB0cC0+cHJfbmFtZTsgdHArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludHByb3RvKHRwLCB0cC0+cHJfbmFtZSk7CisgICAgICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHRwID0gaXA2cHJvdG94OyB0cC0+cHJfbmFtZTsgdHArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludHByb3RvKHRwLCB0cC0+cHJfbmFtZSk7CisgICAgICAgICAgICB9CiAJfQotCWlmIChhZiA9PSBBRl9JTkVUNiB8fCBhZiA9PSBBRl9VTlNQRUMpCi0JCWZvciAodHAgPSBpcDZwcm90b3g7IHRwLT5wcl9uYW1lOyB0cCsrKQotCQkJcHJpbnRwcm90byh0cCwgdHAtPnByX25hbWUpOworICAgICAgICBlbHNlIHsKKwkgICAgZm9yICh0cCA9IGlweHByb3RveDsgdHAtPnByX25hbWU7IHRwKyspCisJCWlmICghcG5hbWUgfHwgc3RyY21wKHBuYW1lLHRwLT5wcl9uYW1lKSA9PSAwKQorCQkgICAgcHJpbnRwcm90byh0cCwgcG5hbWUpOworCX0KICAgICAvKgogCWlmIChhZiA9PSBBRl9JUFggfHwgYWYgPT0gQUZfVU5TUEVDKQogCQlmb3IgKHRwID0gaXB4cHJvdG94OyB0cC0+cHJfbmFtZTsgdHArKykKQEAgLTQ0OSwxMiArNTAzLDYgQEAKIAlyZXR1cm4gKG4gIT0gMSA/ICJzIiA6ICIiKTsKIH0KIAotY29uc3QgY2hhciAqCi1wbHVyYWxlcyhpbnQgbikKLXsKLQlyZXR1cm4gKG4gIT0gMSA/ICJlcyIgOiAiIik7Ci19Ci0KIC8qCiAgKiBGaW5kIHRoZSBwcm90b3ggZm9yIHRoZSBnaXZlbiAid2VsbC1rbm93biIgbmFtZS4KICAqLwpAQCAtNDg5LDcgKzUzNyw3IEBACiAKIAlzZXRwcm90b2VudCgxKTsJCQkvKiBtYWtlIHByb3RvY29sIGxvb2t1cCBjaGVhcGVyICovCiAJd2hpbGUgKChwID0gZ2V0cHJvdG9lbnQoKSkpIHsKLQkJLyogYXNzZXJ0OiBuYW1lIG5vdCBzYW1lIGFzIHAtPm5hbWUgKi8KKwkJLyogbmV0c25tcF9hc3NlcnQ6IG5hbWUgbm90IHNhbWUgYXMgcC0+bmFtZSAqLwogCQlmb3IgKGFsaWFzID0gcC0+cF9hbGlhc2VzOyAqYWxpYXM7IGFsaWFzKyspCiAJCQlpZiAoc3RyY21wKG5hbWUsICphbGlhcykgPT0gMCkgewogCQkJCWVuZHByb3RvZW50KCk7CkBAIC01MDQsMTQgKzU1MiwxMiBAQAogdXNhZ2Uodm9pZCkKIHsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKLSJ1c2FnZTogJXMgW3NubXBfb3B0c10gWy1DYW5dIFstQ2YgYWRkcmVzc19mYW1pbHldXG4iLCBwcm9nbmFtZSk7CisidXNhZ2U6ICVzIFtzbm1wX29wdHNdIFstQ2Fudl0gWy1DZiBhZGRyZXNzX2ZhbWlseV1cbiIsIHByb2duYW1lKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKLSIgICAgICAgJXMgW3NubXBfb3B0c10gWy1DYmRnaW1uclNzXSBbLUNmIGFkZHJlc3NfZmFtaWx5XVxuIiwgcHJvZ25hbWUpOworIiAgICAgICAlcyBbc25tcF9vcHRzXSBbLUNpYm9kbnZdIFstQ0kgaW50ZXJmYWNlXSBbLUN3IHdhaXRdXG4iLCBwcm9nbmFtZSk7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCi0iICAgICAgICVzIFtzbm1wX29wdHNdIFstQ2Jkbl0gWy1DSSBpbnRlcmZhY2VdIFstQ3cgd2FpdF1cbiIsIHByb2duYW1lKTsKKyIgICAgICAgJXMgW3NubXBfb3B0c10gWy1Dc1tzXV0gWy1DcCBwcm90b2NvbF1cbiIsIHByb2duYW1lKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKLSIgICAgICAgJXMgW3NubXBfb3B0c10gWy1Dc10gWy1DcCBwcm90b2NvbF1cbiIsIHByb2duYW1lKTsKLQkodm9pZClmcHJpbnRmKHN0ZGVyciwKLSIgICAgICAgJXMgW3NubXBfb3B0c10gWy1DYV0gWy1DZiBhZGRyZXNzX2ZhbWlseV0gWy1DaSB8IC1DSSBpbnRlcmZhY2VdXG4iLCBwcm9nbmFtZSk7CisiICAgICAgICVzIFtzbm1wX29wdHNdIFstQ3Judl0gWy1DZiBhZGRyZXNzX2ZhbWlseV1cbiIsIHByb2duYW1lKTsKIAlleGl0KDEpOwogfQpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9tYWluLmggYi9hcHBzL3NubXBuZXRzdGF0L21haW4uaAppbmRleCA3MWU3YTY1Li4xMjcyMzIxIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L21haW4uaAorKysgYi9hcHBzL3NubXBuZXRzdGF0L21haW4uaApAQCAtNCwxMCArNCwxMyBAQAogI2VuZGlmCiAKIGV4dGVybiAgbmV0c25tcF9zZXNzaW9uICpzczsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9nZXQoICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzZXNzaW9uKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9nZXRuZXh0KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzZXNzaW9uKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV93YWxrKCAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzZXNzaW9uKTsKIApkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9uZXRzdGF0LmggYi9hcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaAppbmRleCAyNzYyNTY4Li5iYTYxZWIzIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaAorKysgYi9hcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaApAQCAtMzksMTMgKzM5LDEzIEBACiAvKiBXaGF0IGlzIHRoZSBtYXggbGVuZ3RoIG9mIGEgcG9pbnRlciBwcmludGVkIHdpdGggJXAgKGluY2x1ZGluZyAweCk/ICovCiAjZGVmaW5lIFBMRU4JKExPTkdfQklUIC8gNCArIDIpCiAKLWV4dGVybiBpbnQJQWZsYWc7CQkvKiBzaG93IGFkZHJlc3NlcyBvZiBwcm90b2NvbCBjb250cm9sIGJsb2NrICovCiBleHRlcm4gaW50CWFmbGFnOwkJLyogc2hvdyBhbGwgc29ja2V0cyAoaW5jbHVkaW5nIHNlcnZlcnMpICovCiBleHRlcm4gaW50CWJmbGFnOwkJLyogc2hvdyBieXRlcyBpbnN0ZWFkIG9mIHBhY2tldHMgKi8KIGV4dGVybiBpbnQJZGZsYWc7CQkvKiBzaG93IGkvZiBkcm9wcGVkIHBhY2tldHMgKi8KIGV4dGVybiBpbnQJZ2ZsYWc7CQkvKiBzaG93IGdyb3VwIChtdWx0aWNhc3QpIHJvdXRpbmcgb3Igc3RhdHMgKi8KIGV4dGVybiBpbnQJaWZsYWc7CQkvKiBzaG93IGludGVyZmFjZXMgKi8KIGV4dGVybiBpbnQJbGZsYWc7CQkvKiBzaG93IHJvdXRpbmcgdGFibGUgd2l0aCB1c2UgYW5kIHJlZiAqLworZXh0ZXJuIGludAlMZmxhZzsJCS8qIExlZ2FjeSBtaWJzICovCiBleHRlcm4gaW50CW1mbGFnOwkJLyogc2hvdyBtZW1vcnkgc3RhdHMgKi8KIGV4dGVybiBpbnQJbmZsYWc7CQkvKiBzaG93IGFkZHJlc3NlcyBudW1lcmljYWxseSAqLwogZXh0ZXJuIGludAlvZmxhZzsJCS8qIE9wZW4vTmV0LUJTRCBzdHlsZSBvY3RldCBvdXRwdXQgKi8KQEAgLTYyLDExICs2MiwxMSBAQAogZXh0ZXJuIGNoYXIJKmludHJmYWNlOwkvKiBkZXNpcmVkIGkvZiBmb3Igc3RhdHMsIG9yIE5VTEwgZm9yIGFsbCBpL2ZzICovCiAKIGV4dGVybiBpbnQJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLworZXh0ZXJuIGludCAgbWF4X2dldGJ1bGs7ICAvKiBzcGVjaWZpZXMgdGhlIG1heC1yZXBlYXRlcnMgdmFsdWUgdG8gdXNlIHdpdGggR0VUQlVMSyByZXF1ZXN0cyAqLwogCiBleHRlcm4JY2hhciAqX19wcm9nbmFtZTsgLyogcHJvZ3JhbSBuYW1lLCBmcm9tIGNydDAubyAqLwogCiBjb25zdCBjaGFyCSpwbHVyYWwoaW50KTsKLWNvbnN0IGNoYXIJKnBsdXJhbGVzKGludCk7CiAKIHZvaWQJdGNwcHJvdG9wcihjb25zdCBjaGFyICopOwogdm9pZAl1ZHBwcm90b3ByKGNvbnN0IGNoYXIgKik7CkBAIC04MCwxNSArODAsMjYgQEAKIHZvaWQJaXA2X3N0YXRzKCAgY29uc3QgY2hhciAqKTsKIHZvaWQJaWNtcDZfc3RhdHMoY29uc3QgY2hhciAqKTsKIAordm9pZAl0Y3B4cHJvdG9wcihjb25zdCBjaGFyICopOwordm9pZAl1ZHB4cHJvdG9wcihjb25zdCBjaGFyICopOwordm9pZAlsaXN0ZW54cHJvdG9wcihjb25zdCBjaGFyICopOwordm9pZAlpcHhfc3RhdHMoY29uc3QgY2hhciAqKTsKK3ZvaWQJaWNtcHhfc3RhdHMoY29uc3QgY2hhciAqKTsKKwogdm9pZAlwcl9ydGhkcihpbnQpOwogdm9pZAlwcl9lbmNhcGhkcih2b2lkKTsKIHZvaWQJcHJfZmFtaWx5KGludCk7CiB2b2lkCXJ0X3N0YXRzKHZvaWQpOwogCit2b2lkICAgIGdldF9pZm5hbWUoY2hhciAqLCBpbnQpOwogY2hhcgkqcm91dGVuYW1lKGluX2FkZHJfdCk7CiBjaGFyCSpuZXRuYW1lKGluX2FkZHJfdCwgaW5fYWRkcl90KTsKIGNoYXIJKm5zX3ByaW50KHN0cnVjdCBzb2NrYWRkciAqKTsKIHZvaWQJcm91dGVwcih2b2lkKTsKK2ludCAgICAgcm91dGU0cHIoaW50KTsKK2ludCAgICAgcm91dGU2cHIoaW50KTsKK2ludCAgICAgcm91dGV4cHIoaW50KTsKIAogdm9pZAlpbnRwcihpbnQpOwotCit2b2lkCWluZXRwcmludChzdHJ1Y3QgaW5fYWRkciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQJaW5ldDZwcmludCh1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jIGIvYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jCmluZGV4IDk4YTljMGMuLjFkYmE3NGQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvcm91dGUuYworKysgYi9hcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMKQEAgLTgwLDEzICs4MCwxMyBAQAogI2RlZmluZSBTRVRfQUxMICAweDFmCiAKIHN0cnVjdCByb3V0ZV9lbnRyeSB7Ci0gICAgb2lkICAgICAgICAgICAgIGluc3RhbmNlWzRdOwogICAgIGluX2FkZHJfdCAgICAgICBkZXN0aW5hdGlvbjsKICAgICBpbl9hZGRyX3QgICAgICAgbWFzazsKICAgICBpbl9hZGRyX3QgICAgICAgZ2F0ZXdheTsKICAgICBpbnQgICAgICAgICAgICAgaWZOdW1iZXI7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAgICAgaW50ICAgICAgICAgICAgIHByb3RvOworICAgIGludCAgICAgICAgICAgICBhZjsKICAgICBpbnQgICAgICAgICAgICAgc2V0X2JpdHM7CiAgICAgY2hhciAgICAgICAgICAgIGlmbmFtZVs2NF07CiB9OwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXI9TlVMTCwgKnZwOwogICAgIGNoYXIgICpjcDsKICAgICAKLSAgICBwcmludGYoIlJvdXRpbmcgdGFibGVzXG4iKTsKKyAgICBwcmludGYoIlJvdXRpbmcgdGFibGVzIChpcFJvdXRlVGFibGUpXG4iKTsKICAgICBwcl9ydGhkcihBRl9JTkVUKTsKIAogI2RlZmluZSBBRERfUlRWQVIoIHggKSBydGNvbF9vaWRbIHJ0Y29sX2xlbi0xIF0gPSB4OyBcCkBAIC0xMzIsNiArMTMyLDEwIEBACiAgICAgICAgIGlmICggc25tcF9vaWRfY29tcGFyZSggcnRjb2xfb2lkLCBydGNvbF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lLCBydGNvbF9sZW4pICE9IDAgKQogICAgICAgICAgICAgYnJlYWs7ICAgIC8qIEVuZCBvZiBUYWJsZSAqLworCWlmICh2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QgfHwKKyAgICAgICAgICAgICAgICB2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykKKwkgICAgYnJlYWs7CiAgICAgICAgIG1lbXNldCggJnJvdXRlLCAwLCBzaXplb2YoIHN0cnVjdCByb3V0ZV9lbnRyeSApKTsKICAgICAgICAgLyogRXh0cmFjdCBpcFJvdXRlRGVzdCBpbmRleCB2YWx1ZSAqLwogICAgICAgICBjcCA9IHRtcEFkZHIuZGF0YTsKQEAgLTE3NCw2ICsxNzgsMTA0IEBACiB9CiAKIAoraW50Cityb3V0ZTRwcihpbnQgYWYpCit7CisgICAgc3RydWN0IHJvdXRlX2VudHJ5ICByb3V0ZSwgKnJwID0gJnJvdXRlOworICAgIG9pZCAgICBydGNvbF9vaWRbXSAgPSB7IDEsMyw2LDEsMiwxLDQsMjQsNCwxLDAgfTsgLyogaXBDaWRyUm91dGVFbnRyeSAqLworICAgIHNpemVfdCBydGNvbF9sZW4gICAgPSBPSURfTEVOR1RIKCBydGNvbF9vaWQgKTsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciA9IE5VTEwsICp2cDsKKyAgICB1bmlvbiB7CisgICAgICAgIGluX2FkZHJfdCBhZGRyOworICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbNF07CisgICAgfSB0bXBBZGRyOworICAgIGludCBwcmludGVkID0gMDsKKyAgICBpbnQgaGRyX2FmID0gQUZfVU5TUEVDOworCisgICAgaWYgKGFmICE9IEFGX1VOU1BFQyAmJiBhZiAhPSBBRl9JTkVUKQorICAgICAgICByZXR1cm4gMDsKKworI2RlZmluZSBBRERfUlRWQVIoIHggKSBydGNvbF9vaWRbIHJ0Y29sX2xlbi0xIF0gPSB4OyBcCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgcnRjb2xfb2lkLCBydGNvbF9sZW4sIEFTTl9OVUxMLCBOVUxMLCAgMCkKKyAgICBBRERfUlRWQVIoIDUgKTsgICAgICAgICAgICAgICAgIC8qIGlwQ2lkclJvdXRlSWZJbmRleCAqLworICAgIEFERF9SVFZBUiggNiApOyAgICAgICAgICAgICAgICAgLyogaXBDaWRyUm91dGVUeXBlICAgICovCisgICAgQUREX1JUVkFSKCA3ICk7ICAgICAgICAgICAgICAgICAvKiBpcENpZHJSb3V0ZVByb3RvICAgKi8KKyN1bmRlZiBBRERfUlRWQVIKKworICAgIC8qCisgICAgICogTm93IHdhbGsgdGhlIGlwQ2lkclJvdXRlVGFibGUsIHJlcG9ydGluZyB0aGUgdmFyaW91cyByb3V0ZSBlbnRyaWVzCisgICAgICovCisgICAgd2hpbGUgKCAxICkgeworICAgICAgICBvaWQgKm9wOworICAgICAgICB1bnNpZ25lZCBjaGFyICpjcDsKKworICAgICAgICBpZiAobmV0c25tcF9xdWVyeV9nZXRuZXh0KCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBydGNvbF9vaWRbIHJ0Y29sX2xlbi0xIF0gPSA1OyAgICAgICAgLyogaXBSb3V0ZUlmSW5kZXggKi8KKyAgICAgICAgaWYgKCBzbm1wX29pZF9jb21wYXJlKCBydGNvbF9vaWQsIHJ0Y29sX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWUsIHJ0Y29sX2xlbikgIT0gMCApCisgICAgICAgICAgICBicmVhazsgICAgLyogRW5kIG9mIFRhYmxlICovCisgICAgICAgIGlmICh2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QgfHwKKyAgICAgICAgICAgICAgICB2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtZW1zZXQoICZyb3V0ZSwgMCwgc2l6ZW9mKCBzdHJ1Y3Qgcm91dGVfZW50cnkgKSk7CisJcnAtPmFmID0gQUZfSU5FVDsKKwlvcCA9IHZhci0+bmFtZStydGNvbF9sZW47CisgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOworICAgICAgICBjcFswXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbMV0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzJdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFszXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgcnAtPmRlc3RpbmF0aW9uID0gdG1wQWRkci5hZGRyOworICAgICAgICBjcCA9IHRtcEFkZHIuZGF0YTsKKyAgICAgICAgY3BbMF0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzFdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFsyXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbM10gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIHJwLT5tYXNrID0gdG1wQWRkci5hZGRyOworCW9wKys7IC8qIGlwQ2lkclJvdXRlVG9zICovCisgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOworICAgICAgICBjcFswXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbMV0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzJdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFszXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgcnAtPmdhdGV3YXkgPSB0bXBBZGRyLmFkZHI7CisJcnAtPnNldF9iaXRzID0gU0VUX01BU0sgfCBTRVRfR1dBWTsKKworICAgICAgICBmb3IgKCB2cD12YXI7IHZwOyB2cD12cC0+bmV4dF92YXJpYWJsZSApIHsKKyAgICAgICAgICAgIHN3aXRjaCAoIHZwLT5uYW1lWyBydGNvbF9sZW4gLSAxIF0gKSB7CisgICAgICAgICAgICBjYXNlIDU6ICAgICAvKiBpcENpZHJSb3V0ZUlmSW5kZXggKi8KKyAgICAgICAgICAgICAgICBycC0+aWZOdW1iZXIgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0lGTk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDY6ICAgICAvKiBpcENpZHJSb3V0ZVR5cGUgICAgKi8KKyAgICAgICAgICAgICAgICBycC0+dHlwZSAgICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX1RZUEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDc6ICAgICAvKiBpcENpZHJSb3V0ZVByb3RvICAgKi8KKyAgICAgICAgICAgICAgICBycC0+cHJvdG8gICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX1BSVE87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJwLT5zZXRfYml0cyAhPSBTRVRfQUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBJbmNvbXBsZXRlIHF1ZXJ5ICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoaGRyX2FmICE9IHJwLT5hZikgeworICAgICAgICAgICAgaWYgKGhkcl9hZiAhPSBBRl9VTlNQRUMpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgaGRyX2FmID0gcnAtPmFmOworCSAgICBwcmludGYoIlJvdXRpbmcgdGFibGVzIChpcENpZHJSb3V0ZVRhYmxlKVxuIik7CisgICAgICAgICAgICBwcl9ydGhkcihoZHJfYWYpOworICAgICAgICB9CisgICAgICAgIHBfcnRub2RlKCBycCApOworICAgICAgICBwcmludGVkKys7CisgICAgfQorICAgIHJldHVybiBwcmludGVkOworfQorCiAKIHN0cnVjdCBpZmxpc3QgewogICAgIGludCAgICAgICAgICAgICBpbmRleDsKQEAgLTE4Niw2ICsyODgsOCBAQAogewogICAgIG9pZCAgICBpZmRlc2NyX29pZFtdICA9IHsgMSwzLDYsMSwyLDEsMiwyLDEsMiwwIH07CiAgICAgc2l6ZV90IGlmZGVzY3JfbGVuICAgID0gT0lEX0xFTkdUSCggaWZkZXNjcl9vaWQgKTsKKyAgICBvaWQgICAgaWZ4Y29sX29pZFtdID0geyAxLDMsNiwxLDIsMSwzMSwxLDEsMSwxLDAgfTsKKyAgICBzaXplX3QgaWZ4Y29sX2xlbiAgID0gT0lEX0xFTkdUSCggaWZ4Y29sX29pZCApOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyID0gTlVMTDsKICAgICBzdHJ1Y3QgaWZsaXN0ICAgICAgICAgKmlwOwogCkBAIC0yMDQsNiArMzA4LDE4IEBACiAgICAgSWZsaXN0ID0gaXA7CiAgICAgaXAtPmluZGV4ID0gaWZJbmRleDsKIAorICAgIGlmeGNvbF9vaWRbIGlmeGNvbF9sZW4tMSBdID0gaWZJbmRleDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCBpZnhjb2xfb2lkLCBpZnhjb2xfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9OVUxMLCBOVUxMLCAgMCk7CisgICAgaWYgKG5ldHNubXBfcXVlcnlfZ2V0KCB2YXIsIHNzICkgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICBpZiAodmFyLT52YWxfbGVuID49IHNpemVvZihpcC0+bmFtZSkpCisgICAgICAgICAgICB2YXItPnZhbF9sZW4gID0gc2l6ZW9mKGlwLT5uYW1lKSAtIDE7CisgICAgICAgIG1lbW1vdmUoaXAtPm5hbWUsIHZhci0+dmFsLnN0cmluZywgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgaXAtPm5hbWVbdmFyLT52YWxfbGVuXSA9ICdcMCc7CisJc3RyY3B5KG5hbWUsIGlwLT5uYW1lKTsKKwlyZXR1cm47CisgICAgfQorCiAgICAgaWZkZXNjcl9vaWRbIGlmZGVzY3JfbGVuLTEgXSA9IGlmSW5kZXg7CiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgaWZkZXNjcl9vaWQsIGlmZGVzY3JfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9OVUxMLCBOVUxMLCAgMCk7CkBAIC0yMTgsNTAgKzMzNCw2IEBACiAgICAgc3RyY3B5KG5hbWUsIGlwLT5uYW1lKTsKIH0KIAotLyoKLSAqIFByaW50IGFkZHJlc3MgZmFtaWx5IGhlYWRlciBiZWZvcmUgYSBzZWN0aW9uIG9mIHRoZSByb3V0aW5nIHRhYmxlLgotICovCi12b2lkCi1wcl9mYW1pbHkoaW50IGFmKQotewotCWNvbnN0IGNoYXIgKmFmbmFtZTsKLQotCXN3aXRjaCAoYWYpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWFmbmFtZSA9ICJJbnRlcm5ldCI7Ci0JCWJyZWFrOwotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKLQljYXNlIEFGX0lORVQ2OgotCQlhZm5hbWUgPSAiSW50ZXJuZXQ2IjsKLQkJYnJlYWs7Ci0jZW5kaWYKLSAgICAvKgotCWNhc2UgQUZfTlM6Ci0JCWFmbmFtZSA9ICJYTlMiOwotCQlicmVhazsKLQljYXNlIEFGX0lQWDoKLQkJYWZuYW1lID0gIklQWCI7Ci0JCWJyZWFrOwotCWNhc2UgQUZfQ0NJVFQ6Ci0JCWFmbmFtZSA9ICJYLjI1IjsKLQkJYnJlYWs7Ci0JY2FzZSBQRl9LRVk6Ci0JCWFmbmFtZSA9ICJFbmNhcCI7Ci0JCWJyZWFrOwotCWNhc2UgQUZfQVBQTEVUQUxLOgotCQlhZm5hbWUgPSAiQXBwbGVUYWxrIjsKLQkJYnJlYWs7Ci0gICAgICovCi0JZGVmYXVsdDoKLQkJYWZuYW1lID0gTlVMTDsKLQkJYnJlYWs7Ci0JfQotCWlmIChhZm5hbWUpCi0JCXByaW50ZigiXG4lczpcbiIsIGFmbmFtZSk7Ci0JZWxzZQotCQlwcmludGYoIlxuUHJvdG9jb2wgRmFtaWx5ICVkOlxuIiwgYWYpOwotfQotCiAvKiBjb2x1bW4gd2lkdGhzOyBlYWNoIGZvbGxvd2VkIGJ5IG9uZSBzcGFjZSAqLwogI2lmbmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CiAjZGVmaW5lCVdJRF9EU1QoYWYpCTI2CS8qIHdpZHRoIG9mIGRlc3RpbmF0aW9uIGNvbHVtbiAqLwpAQCAtMzIzLDE1ICszOTUsMTUgQEAKIAogCWlmIChmaXJzdCkgewogCQlmaXJzdCA9IDA7Ci0JCWlmIChnZXRob3N0bmFtZShkb21haW4sIHNpemVvZiBkb21haW4pID09IDAgJiYKLQkJICAgIChjcCA9IHN0cmNocihkb21haW4sICcuJykpKQorCQlpZiAoZ2V0aG9zdG5hbWUobGluZSwgc2l6ZW9mIGxpbmUpID09IDAgJiYKKwkJICAgIChjcCA9IHN0cmNocihsaW5lLCAnLicpKSkKIAkJCSh2b2lkKSBzdHJsY3B5KGRvbWFpbiwgY3AgKyAxLCBzaXplb2YgZG9tYWluKTsKIAkJZWxzZQogCQkJZG9tYWluWzBdID0gJ1wwJzsKIAl9CiAJY3AgPSBOVUxMOwogCWlmICghbmZsYWcpIHsKLQkJaHAgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJmluLCBzaXplb2YgKHN0cnVjdCBpbl9hZGRyKSwKKwkJaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKGNoYXIgKikmaW4sIHNpemVvZiAoc3RydWN0IGluX2FkZHIpLAogCQkgICAgQUZfSU5FVCk7CiAJCWlmIChocCkgewogCQkJaWYgKChjcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpKSAmJgpAQCAtNDk5LDcgKzU3MSw2IEBACiAgICAgc3RhdGljIGNoYXIgZmxhZ19idWZbMTBdOwogICAgIGNoYXIgICpjcCA9IGZsYWdfYnVmOwogCi0gICAgbWVtc2V0KCBmbGFnX2J1ZiwgMCwgc2l6ZW9mKGZsYWdfYnVmKSk7CiAgICAgKmNwKysgPSAnPCc7CiAgICAgKmNwKysgPSAnVSc7ICAgLyogcm91dGUgaXMgaW4gdXNlICovCiAgICAgaWYgKHJwLT5tYXNrICA9PSAweGZmZmZmZmZmKQpAQCAtNTA5LDYgKzU4MCw3IEBACiAgICAgaWYgKHJwLT50eXBlICA9PSA0KQogICAgICAgICAqY3ArKyA9ICdHJzsgICAvKiByZW1vdGUgZGVzdGluYXRpb24vbmV0ICovCiAgICAgKmNwKysgPSAnPic7CisgICAgKmNwID0gMDsKICAgICByZXR1cm4gZmxhZ19idWY7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvcm91dGV4LmMgYi9hcHBzL3NubXBuZXRzdGF0L3JvdXRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDZkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL3NubXBuZXRzdGF0L3JvdXRleC5jCkBAIC0wLDAgKzEsNTU4IEBACisvKiAgICAgICAgJE9wZW5CU0Q6IHJvdXRlLmMsdiAxLjY2IDIwMDQvMTEvMTcgMDE6NDc6MjAgaXRvanVuIEV4cCAkICAgICAgICAqLworLyogICAgICAgICROZXRCU0Q6IHJvdXRlLmMsdiAxLjE1IDE5OTYvMDUvMDcgMDI6NTU6MDYgdGhvcnBlaiBFeHAgJCAgICAgICAgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4OCwgMTk5MworICogICAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgIElOSEVSSVRFRF9DT0RFCisjaWZuZGVmIGxpbnQKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJmcm9tOiBAKCMpcm91dGUuYyAgICAgICAgOC4zIChCZXJrZWxleSkgMy85Lzk0IjsKKyNlbHNlCitzdGF0aWMgY2hhciAqcmNzaWQgPSAiJE9wZW5CU0Q6IHJvdXRlLmMsdiAxLjY2IDIwMDQvMTEvMTcgMDE6NDc6MjAgaXRvanVuIEV4cCAkIjsKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBsaW50ICovCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworI2lmbmRlZiBJTkVUCisjZGVmaW5lIElORVQKKyNlbmRpZgorCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIm5ldHN0YXQuaCIKKyNpZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgIndpbnN0dWIuaCIKKyNlbmRpZgorCisvKiBpbmV0Q2lkclJvdXRlVGFibGUgKi8KKyNkZWZpbmUgU0VUX0lGTk8gMHgwMQorI2RlZmluZSBTRVRfVFlQRSAweDAyCisjZGVmaW5lIFNFVF9QUlRPIDB4MDQKKyNkZWZpbmUgU0VUX0FHRSAgMHgwOAorI2RlZmluZSBTRVRfQVMgICAweDEwCisjZGVmaW5lIFNFVF9NRVQxIDB4MjAKKyNkZWZpbmUgU0VUX0FMTCAgMHgzZgorCisvKiBpcDZSb3V0ZVRhYmxlICovCisjZGVmaW5lIFNFVF9IT1AgICAgIDB4NDAKKyNkZWZpbmUgU0VUX0lOVkFMSUQgMHg4MAorI2RlZmluZSBTRVRfQUxMNiAgICAweDY3CisvKiBub3QgaW52YWxpZCwgYW5kIG9ubHkgdGhlIGNvbHVtbnMgdGhhdCB3ZSBmZXRjaCAqLworCitzdHJ1Y3Qgcm91dGVfZW50cnkgeworICAgIGludCAgICAgICAgICAgICBhZjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBkc3Q7CisgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaG9wOworICAgIGludCAgICAgICAgICAgICBtYXNrOworICAgIGludCAgICAgICAgICAgICBpZk51bWJlcjsKKyAgICBpbnQgICAgICAgICAgICAgdHlwZTsKKyAgICBpbnQgICAgICAgICAgICAgcHJvdG87CisgICAgaW50ICAgICAgICAgICAgIGFnZTsKKyAgICBpbnQgICAgICAgICAgICAgYXM7CisgICAgaW50ICAgICAgICAgICAgIG1ldHJpYzE7CisgICAgaW50ICAgICAgICAgICAgIHNldF9iaXRzOworICAgIGNoYXIgICAgICAgICAgICBpZm5hbWVbNjRdOworfTsKKworCitzdGF0aWMgdm9pZCBwcl9ydHhoZHIoaW50IGFmLCBjb25zdCBjaGFyICp0YWJsZSk7CitzdGF0aWMgdm9pZCBwX3J0bm9kZXgoIHN0cnVjdCByb3V0ZV9lbnRyeSAqcnAgKTsKKworLyoKKyAqIFByaW50IHJvdXRpbmcgdGFibGVzLgorICovCitpbnQKK3JvdXRleHByKGludCBhZikKK3sKKyAgICBzdHJ1Y3Qgcm91dGVfZW50cnkgIHJvdXRlLCAqcnAgPSAmcm91dGU7CisgICAgb2lkICAgIHJ0Y29sX29pZFtdICA9IHsgMSwzLDYsMSwyLDEsNCwyNCw3LDEsMCB9OyAvKiBpbmV0Q2lkclJvdXRlRW50cnkgKi8KKyAgICBzaXplX3QgcnRjb2xfbGVuICAgID0gT0lEX0xFTkdUSCggcnRjb2xfb2lkICk7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSBOVUxMLCAqdnA7CisgICAgaW50IGhkcl9hZiA9IEFGX1VOU1BFQzsKKyAgICBpbnQgcHJpbnRlZCA9IDA7CisKKyNkZWZpbmUgQUREX1JUVkFSKCB4ICkgcnRjb2xfb2lkWyBydGNvbF9sZW4tMSBdID0geDsgXAorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHJ0Y29sX29pZCwgcnRjb2xfbGVuLCBBU05fTlVMTCwgTlVMTCwgIDApCisgICAgQUREX1JUVkFSKCA3ICk7ICAgICAgICAgICAgICAgICAvKiBpbmV0Q2lkclJvdXRlSWZJbmRleCAqLworICAgIEFERF9SVFZBUiggOCApOyAgICAgICAgICAgICAgICAgLyogaW5ldENpZHJSb3V0ZVR5cGUgICAgKi8KKyAgICBBRERfUlRWQVIoIDkgKTsgICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVQcm90byAgICovCisgICAgQUREX1JUVkFSKCAxMCApOyAgICAgICAgICAgICAgICAvKiBpbmV0Q2lkclJvdXRlQWdlICAgKi8KKyAgICBBRERfUlRWQVIoIDExICk7ICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVOZXh0SG9wQVMgICAqLworICAgIEFERF9SVFZBUiggMTIgKTsgICAgICAgICAgICAgICAgLyogaW5ldENpZHJSb3V0ZU1ldHJpYzEgICAqLworI3VuZGVmIEFERF9SVFZBUgorCisgICAgLyoKKyAgICAgKiBOb3cgd2FsayB0aGUgaW5ldENpZHJSb3V0ZVRhYmxlLCByZXBvcnRpbmcgdGhlIHZhcmlvdXMgcm91dGUgZW50cmllcworICAgICAqLworICAgIHdoaWxlICggMSApIHsKKyAgICAgICAgb2lkICpvcDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqY3A7CisgICAgICAgIGludCBpOworCisgICAgICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldG5leHQoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJ0Y29sX29pZFsgcnRjb2xfbGVuLTEgXSA9IDc7ICAgICAgICAvKiBpZlJvdXRlSWZJbmRleCAqLworICAgICAgICBpZiAoIHNubXBfb2lkX2NvbXBhcmUoIHJ0Y29sX29pZCwgcnRjb2xfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZSwgcnRjb2xfbGVuKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAvKiBFbmQgb2YgVGFibGUgKi8KKyAgICAgICAgaWYgKHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFIHx8CisgICAgICAgICAgICAgICAgdmFyLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1lbXNldCggJnJvdXRlLCAwLCBzaXplb2YoIHN0cnVjdCByb3V0ZV9lbnRyeSApKTsKKyAgICAgICAgLyogRXh0cmFjdCBpbmV0Q2lkclJvdXRlRGVzdCwgaW5ldENpZHJSb3V0ZVBmeExlbiwKKyAgICAgICAgICogaW5ldENpZHJSb3V0ZU5leHRIb3AgZnJvbSBpbmRleCAqLworICAgICAgICBzd2l0Y2ggKHZhci0+bmFtZVtydGNvbF9sZW5dKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHsgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcm91dGUuZHN0OworICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgcm91dGUuYWYgPSBBRl9JTkVUOworICAgICAgICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICAgICAgb3AgPSB2YXItPm5hbWUrcnRjb2xfbGVuKzE7CisgICAgICAgICAgICAgICAgbGVuID0gKm9wKys7CisgICAgICAgICAgICAgICAgY3AgPSAodW5zaWduZWQgY2hhciAqKSZzaW4tPnNpbl9hZGRyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgKmNwKysgPSAqb3ArKzsKKyAgICAgICAgICAgICAgICByb3V0ZS5tYXNrID0gKm9wKys7CisgICAgICAgICAgICAgICAgb3AgKz0gKm9wKzE7CisgICAgICAgICAgICAgICAgb3ArKzsgLyogYWRkclR5cGUgKi8KKyAgICAgICAgICAgICAgICBvcCsrOyAvKiBhZGRyTGVuICovCisgICAgICAgICAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyb3V0ZS5ob3A7CisgICAgICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbi0+c2luX2FkZHI7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAqY3ArKyA9ICpvcCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB7ICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvdXRlLmRzdDsKKyAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgIHJvdXRlLmFmID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgICAgc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICBvcCA9IHZhci0+bmFtZStydGNvbF9sZW4rMTsKKyAgICAgICAgICAgICAgICBsZW4gPSAqb3ArKzsKKyAgICAgICAgICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbjYtPnNpbjZfYWRkcjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspICpjcCsrID0gKm9wKys7CisgICAgICAgICAgICAgICAgcm91dGUubWFzayA9ICpvcCsrOworICAgICAgICAgICAgICAgIG9wICs9ICpvcCsxOworICAgICAgICAgICAgICAgIG9wKys7IC8qIGFkZHJUeXBlICovCisgICAgICAgICAgICAgICAgb3ArKzsgLyogYWRkckxlbiAqLworICAgICAgICAgICAgICAgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyb3V0ZS5ob3A7CisgICAgICAgICAgICAgICAgc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbjYtPnNpbjZfYWRkcjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspICpjcCsrID0gKm9wKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBhZGRyZXNzIHR5cGU6ICVkXG4iLCAoaW50KXZhci0+bmFtZVtydGNvbF9sZW5dKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgLyogRXh0cmFjdCBpcFJvdXRlRGVzdCBpbmRleCB2YWx1ZSAqLworCisgICAgICAgIGZvciAoIHZwPXZhcjsgdnA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlICkgeworICAgICAgICAgICAgc3dpdGNoICggdnAtPm5hbWVbIHJ0Y29sX2xlbiAtIDEgXSApIHsKKyAgICAgICAgICAgIGNhc2UgNzogICAgIC8qIGluZXRDaWRyUm91dGVJZkluZGV4ICovCisgICAgICAgICAgICAgICAgcnAtPmlmTnVtYmVyICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9JRk5POworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiAgICAgLyogaW5ldENpZHJSb3V0ZVR5cGUgICAgKi8KKyAgICAgICAgICAgICAgICBycC0+dHlwZSAgICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX1RZUEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDk6ICAgICAvKiBpbmV0Q2lkclJvdXRlUHJvdG8gICAqLworICAgICAgICAgICAgICAgIHJwLT5wcm90byAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfUFJUTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA6ICAgICAvKiBpbmV0Q2lkclJvdXRlQWdlICAgKi8KKyAgICAgICAgICAgICAgICBycC0+YWdlICAgICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9BR0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDExOiAgICAgLyogaW5ldENpZHJSb3V0ZU5leHRIb3BBUyAgICovCisgICAgICAgICAgICAgICAgcnAtPmFzICAgICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9BUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTI6ICAgICAvKiBpbmV0Q2lkclJvdXRlTWV0cmljMSAgICovCisgICAgICAgICAgICAgICAgcnAtPm1ldHJpYzEgICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX01FVDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJwLT5zZXRfYml0cyAhPSBTRVRfQUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBJbmNvbXBsZXRlIHF1ZXJ5ICovCisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKGFmICE9IEFGX1VOU1BFQyAmJiBycC0+YWYgIT0gYWYpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoaGRyX2FmICE9IHJwLT5hZikgeworICAgICAgICAgICAgaWYgKGhkcl9hZiAhPSBBRl9VTlNQRUMpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgaGRyX2FmID0gcnAtPmFmOworICAgICAgICAgICAgcHJfcnR4aGRyKGhkcl9hZiwgImluZXRDaWRyUm91dGVUYWJsZSIpOworICAgICAgICB9CisgICAgICAgIHBfcnRub2RleCggcnAgKTsKKyAgICAgICAgcHJpbnRlZCsrOworICAgIH0KKyAgICByZXR1cm4gcHJpbnRlZDsKK30KKworLyoKKyAqIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgSVBWNi1NSUIKKyAqLworaW50Cityb3V0ZTZwcihpbnQgYWYpCit7CisgICAgc3RydWN0IHJvdXRlX2VudHJ5ICByb3V0ZSwgKnJwID0gJnJvdXRlOworICAgIG9pZCAgICBydGNvbF9vaWRbXSAgPSB7IDEsMyw2LDEsMiwxLDU1LDEsMTEsMSwwIH07IC8qIGlwdjZSb3V0ZUVudHJ5ICovCisgICAgc2l6ZV90IHJ0Y29sX2xlbiAgICA9IE9JRF9MRU5HVEgoIHJ0Y29sX29pZCApOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyID0gTlVMTCwgKnZwOworICAgIGludCBwcmludGVkID0gMDsKKyAgICBpbnQgaGRyX2FmID0gQUZfVU5TUEVDOworICAgIGludCBpOworCisgICAgaWYgKGFmICE9IEFGX1VOU1BFQyAmJiBhZiAhPSBBRl9JTkVUNikKKyAgICAgICAgcmV0dXJuIDA7CisKKyNkZWZpbmUgQUREX1JUVkFSKCB4ICkgcnRjb2xfb2lkWyBydGNvbF9sZW4tMSBdID0geDsgXAorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHJ0Y29sX29pZCwgcnRjb2xfbGVuLCBBU05fTlVMTCwgTlVMTCwgIDApCisgICAgQUREX1JUVkFSKCA0ICk7ICAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVJZkluZGV4ICovCisgICAgQUREX1JUVkFSKCA1ICk7ICAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVOZXh0SG9wICovCisgICAgQUREX1JUVkFSKCA2ICk7ICAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVUeXBlICAgICovCisgICAgQUREX1JUVkFSKCA3ICk7ICAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVQcm90byAgICovCisgICAgQUREX1JUVkFSKCAxMSApOyAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVNZXRyaWMgICovCisgICAgQUREX1JUVkFSKCAxNCApOyAgICAgICAgICAgICAgICAvKiBpcHY2Um91dGVWYWxpZCAgICovCisjdW5kZWYgQUREX1JUVkFSCisKKyAgICAvKgorICAgICAqIE5vdyB3YWxrIHRoZSBpcHY2Um91dGVUYWJsZSwgcmVwb3J0aW5nIHRoZSB2YXJpb3VzIHJvdXRlIGVudHJpZXMKKyAgICAgKi8KKyAgICB3aGlsZSAoIDEgKSB7CisgICAgICAgIG9pZCAqb3A7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmNwLCAqY3AxOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm91dGUuZHN0OworCisgICAgICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldG5leHQoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJ0Y29sX29pZFsgcnRjb2xfbGVuLTEgXSA9IDQ7ICAgICAgICAvKiBpcHY2Um91dGVJZkluZGV4ICovCisgICAgICAgIGlmICggc25tcF9vaWRfY29tcGFyZSggcnRjb2xfb2lkLCBydGNvbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lLCBydGNvbF9sZW4pICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7ICAgIC8qIEVuZCBvZiBUYWJsZSAqLworICAgICAgICBpZiAodmFyLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUIHx8CisgICAgICAgICAgICAgICAgdmFyLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UgfHwKKyAgICAgICAgICAgICAgICB2YXItPnR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbWVtc2V0KCAmcm91dGUsIDAsIHNpemVvZiggc3RydWN0IHJvdXRlX2VudHJ5ICkpOworICAgICAgICBycC0+YWYgPSBBRl9JTkVUNjsKKyAgICAgICAgc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgb3AgPSB2YXItPm5hbWUrcnRjb2xfbGVuOworICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbjYtPnNpbjZfYWRkcjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspICpjcCsrID0gKm9wKys7CisgICAgICAgIHJvdXRlLm1hc2sgPSAqb3ArKzsKKworICAgICAgICBmb3IgKCB2cD12YXI7IHZwOyB2cD12cC0+bmV4dF92YXJpYWJsZSApIHsKKyAgICAgICAgICAgIHN3aXRjaCAoIHZwLT5uYW1lWyBydGNvbF9sZW4gLSAxIF0gKSB7CisgICAgICAgICAgICBjYXNlIDQ6ICAgICAvKiBpcHY2Um91dGVJZkluZGV4ICAqLworICAgICAgICAgICAgICAgIHJwLT5pZk51bWJlciAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVGhpcyBpcywgdGVjaG5pY2FsbHksIGFuIElwdjZJZkluZGV4LCB3aGljaAorICAgICAgICAgICAgICAgICAqIGNvdWxkIG1heWJlIGJlIGRpZmZlcmVudCB0aGFuIHRoZSBJZkluZGV4CisgICAgICAgICAgICAgICAgICogZm9yIHRoZSBzYW1lIGludGVyZmFjZS4gIFdlIGlnbm9yZSB0aGlzCisgICAgICAgICAgICAgICAgICogcG9zc2liaWxpdHkgZm9yIG5vdywgaW4gdGhlIGhvcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgKiBub2JvZHkgYWN0dWFsbHkgYWxsb2NhdGVzIHRoZXNlIG51bWJlcnMKKyAgICAgICAgICAgICAgICAgKiBkaWZmZXJlbnRseS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0lGTk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDU6ICAgICAvKiBpcHY2Um91dGVOZXh0SG9wICAqLworICAgICAgICAgICAgICAgIGNwMSA9ICh1bnNpZ25lZCBjaGFyICopdnAtPnZhbC5zdHJpbmc7CisgICAgICAgICAgICAgICAgc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJwLT5ob3A7CisgICAgICAgICAgICAgICAgc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbjYtPnNpbjZfYWRkcjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgKmNwKysgPSAqY3AxKys7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9IT1A7CisgICAgICAgICAgICBjYXNlIDY6ICAgICAvKiBpcHY2Um91dGVUeXBlICAgICAqLworICAgICAgICAgICAgICAgIHJwLT50eXBlICAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIC8qIFRoaXMgZW51bSBtYXBzIHRvIHNpbWlsYXIgdmFsdWVzIGluIGluZXRDaWRyUm91dGVUeXBlICovCisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9UWVBFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA3OiAgICAgLyogaXB2NlJvdXRlUHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICBycC0+cHJvdG8gICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICAvKiBUT0RPOiB0aGlzIGRvZXMgbm90IG1hcCBkaXJlY3RseSB0byB0aGUKKyAgICAgICAgICAgICAgICAgKiBpbmV0Q2lkclJvdXRlUHJvdG9jb2wgdmFsdWVzLiAgSWYgd2UgdXNlCisgICAgICAgICAgICAgICAgICogcnAtPnByb3RvIG1vcmUsIHdlIHdpbGwgaGF2ZSB0byBtYW5hZ2UgdGhpcy4gKi8KKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX1BSVE87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDExOiAgICAvKiBpcHY2Um91dGVNZXRyaWMgICAqLworICAgICAgICAgICAgICAgIHJwLT5tZXRyaWMxICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfTUVUMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTQ6ICAgIC8qIGlwdjZSb3V0ZVZhbGlkICAgICovCisgICAgICAgICAgICAgICAgaWYgKCp2cC0+dmFsLmludGVnZXIgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9JTlZBTElEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChycC0+c2V0X2JpdHMgIT0gU0VUX0FMTDYpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIEluY29tcGxldGUgcXVlcnkgKi8KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoaGRyX2FmICE9IHJwLT5hZikgeworICAgICAgICAgICAgaWYgKGhkcl9hZiAhPSBBRl9VTlNQRUMpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgaGRyX2FmID0gcnAtPmFmOworICAgICAgICAgICAgcHJfcnR4aGRyKEFGX0lORVQ2LCAiaXA2Um91dGVUYWJsZSIpOworICAgICAgICB9CisgICAgICAgIHBfcnRub2RleCggcnAgKTsKKyAgICAgICAgcHJpbnRlZCsrOworICAgIH0KKyAgICByZXR1cm4gcHJpbnRlZDsKK30KKworCisvKiBjb2x1bW4gd2lkdGhzOyBlYWNoIGZvbGxvd2VkIGJ5IG9uZSBzcGFjZSAqLworI2lmbmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisjZGVmaW5lICAgICAgICBXSURfRFNUKGFmKSAgICAgICAgMjYgICAgICAgIC8qIHdpZHRoIG9mIGRlc3RpbmF0aW9uIGNvbHVtbiAqLworI2RlZmluZSAgICAgICAgV0lEX0dXKGFmKSAgICAgICAgMTggICAgICAgIC8qIHdpZHRoIG9mIGdhdGV3YXkgY29sdW1uICovCisjZWxzZQorLyogd2lkdGggb2YgZGVzdGluYXRpb24vZ2F0ZXdheSBjb2x1bW4gKi8KKy8qIHN0cmxlbigiZmU4MDo6YWFhYTpiYmJiOmNjY2M6ZGRkZEBnaWYwIikgPT0gMzAsIHN0cmxlbigiLzEyOCIpID09IDQgKi8KKyNkZWZpbmUgICAgICAgIFdJRF9EU1QoYWYpICAgICAgICAoKGFmKSA9PSBBRl9JTkVUNiA/IChuZmxhZyA/IDM0IDogMjYpIDogMjYpCisjZGVmaW5lICAgICAgICBXSURfR1coYWYpICAgICAgICAoKGFmKSA9PSBBRl9JTkVUNiA/IChuZmxhZyA/IDM5IDogMjYpIDogMjYpCisjZW5kaWYgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworCisvKgorICogUHJpbnQgaGVhZGVyIGZvciByb3V0aW5nIHRhYmxlIGNvbHVtbnMuCisgKi8KK3N0YXRpYyB2b2lkCitwcl9ydHhoZHIoaW50IGFmLCBjb25zdCBjaGFyICp0YWJsZSkKK3sKKyAgICBzd2l0Y2ggKGFmKSB7CisgICAgY2FzZSBBRl9JTkVUOgorCXByaW50ZigiSVB2NCBSb3V0aW5nIHRhYmxlcyAoaW5ldENpZHJSb3V0ZVRhYmxlKVxuIik7CisJYnJlYWs7CisgICAgY2FzZSBBRl9JTkVUNjoKKwlwcmludGYoIklQdjYgUm91dGluZyB0YWJsZXMgKCVzKVxuIiwgdGFibGUpOworCWJyZWFrOworICAgIH0KKyAgICBwcmludGYoIiUtKi4qcyAiLAorCVdJRF9EU1QoYWYpLCBXSURfRFNUKGFmKSwgIkRlc3RpbmF0aW9uIik7CisgICAgcHJpbnRmKCIlLSouKnMgJS02LjZzICAlc1xuIiwKKwlXSURfR1coYWYpLCBXSURfR1coYWYpLCAiR2F0ZXdheSIsCisJIkZsYWdzIiwgIkludGVyZmFjZSIpOworfQorCisjaWZuZGVmIEhBVkVfSU5FVF9OVE9QCisvKiBNU1ZDIGFuZCBNaW5HVyAqLworI2RlZmluZSBpbmV0X250b3AgbmV0c25tcF9pbmV0X250b3AKK3N0YXRpYyBjb25zdCBjaGFyICoKK25ldHNubXBfaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworICAgIERXT1JEIG91dF9sZW4gPSBzaXplOworCisgICAgc3dpdGNoIChhZikgeworICAgIGNhc2UgQUZfSU5FVDoKKwl7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBpbjsKKworCSAgICBtZW1zZXQoJmluLCAwLCBzaXplb2YoaW4pKTsKKwkgICAgaW4uc2luX2ZhbWlseSA9IGFmOworCSAgICBtZW1jcHkoJmluLnNpbl9hZGRyLCBzcmMsIDQpOworCSAgICBpZiAoV1NBQWRkcmVzc1RvU3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIgKikmaW4sIHNpemVvZihpbiksIE5VTEwsIGRzdCwKKwkJCQkgICAmb3V0X2xlbikgPT0gMCkKKwkJcmV0dXJuIGRzdDsKKwl9CisJYnJlYWs7CisgICAgY2FzZSBBRl9JTkVUNjoKKwl7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaW42OworCisJICAgIG1lbXNldCgmaW42LCAwLCBzaXplb2YoaW42KSk7CisJICAgIGluNi5zaW42X2ZhbWlseSA9IGFmOworCSAgICBtZW1jcHkoJmluNi5zaW42X2FkZHIsIHNyYywgMTYpOworCSAgICBpZiAoV1NBQWRkcmVzc1RvU3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIgKikmaW42LCBzaXplb2YoaW42KSwgTlVMTCwgZHN0LAorCQkJCSAgICZvdXRfbGVuKSA9PSAwKQorCQlyZXR1cm4gZHN0OworCX0KKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbmV0d29yayB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuLgorICogVGhlIGFkZHJlc3MgaXMgYXNzdW1lZCB0byBiZSB0aGF0IG9mIGEgbmV0IG9yIHN1Ym5ldCwgbm90IGEgaG9zdC4KKyAqLworc3RhdGljIGNoYXIgKgorbmV0eG5hbWUoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmluLCBpbnQgbWFzaykKK3sKKyAgICBzdGF0aWMgY2hhciBob3N0W01BWEhPU1ROQU1FTEVOXTsKKyAgICBzdGF0aWMgY2hhciBsaW5lW01BWEhPU1ROQU1FTEVOXTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpbjsKKworICAgIHN3aXRjaCAoaW4tPnNzX2ZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgaW5ldF9udG9wKGluLT5zc19mYW1pbHksICZzaW4tPnNpbl9hZGRyLCBob3N0LCBzaXplb2YoaG9zdCkpOworICAgICAgICBpZiAobWFzayA9PSAzMikgc3RyY3B5KGxpbmUsIGhvc3QpOworICAgICAgICBlbHNlIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgIiVzLyVkIiwgaG9zdCwgbWFzayk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgIGluZXRfbnRvcChpbi0+c3NfZmFtaWx5LCAmc2luNi0+c2luNl9hZGRyLCBob3N0LCBzaXplb2YoaG9zdCkpOworICAgICAgICBpZiAobWFzayA9PSAxMjgpIHN0cmNweShsaW5lLCBob3N0KTsKKyAgICAgICAgZWxzZSBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICIlcy8lZCIsIGhvc3QsIG1hc2spOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGxpbmU7Cit9CisKK3N0YXRpYyBjaGFyICoKK3JvdXRleG5hbWUoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmluKQoreworICAgIGNoYXIgKmNwOworICAgIHN0YXRpYyBjaGFyIGxpbmVbTUFYSE9TVE5BTUVMRU5dOworICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgZG9tYWluW01BWEhPU1ROQU1FTEVOXTsKKyAgICBzdGF0aWMgaW50IGZpcnN0ID0gMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpbjsKKworICAgIGlmIChmaXJzdCkgeworICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgIGlmIChnZXRob3N0bmFtZShsaW5lLCBzaXplb2YgbGluZSkgPT0gMCAmJgorICAgICAgICAgICAgKGNwID0gc3RyY2hyKGxpbmUsICcuJykpKQorICAgICAgICAgICAgKHZvaWQpIHN0cmxjcHkoZG9tYWluLCBjcCArIDEsIHNpemVvZiBkb21haW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb21haW5bMF0gPSAnXDAnOworICAgIH0KKyAgICBjcCA9IE5VTEw7CisgICAgaWYgKCFuZmxhZykgeworICAgICAgICBzd2l0Y2ggKGluLT5zc19mYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoJnNpbi0+c2luX2FkZHIsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoc3RydWN0IGluX2FkZHIpLCBBRl9JTkVUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoJnNpbjYtPnNpbjZfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW42X2FkZHIpLCBBRl9JTkVUNik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaHApIHsKKyAgICAgICAgICAgIGlmICgoY3AgPSBzdHJjaHIoaHAtPmhfbmFtZSwgJy4nKSkgJiYgIXN0cmNtcChjcCArIDEsIGRvbWFpbikpCisgICAgICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyAgICAgICAgICAgIGNwID0gaHAtPmhfbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3ApIHsKKyAgICAgICAgc3RybGNweShsaW5lLCBjcCwgc2l6ZW9mKGxpbmUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGluLT5zc19mYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgaW5ldF9udG9wKHNpbi0+c2luX2ZhbWlseSwgJnNpbi0+c2luX2FkZHIsIGxpbmUsIHNpemVvZihsaW5lKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIGluZXRfbnRvcChzaW42LT5zaW42X2ZhbWlseSwgJnNpbjYtPnNpbjZfYWRkciwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAobGluZSk7Cit9CisKKworc3RhdGljIGNoYXIgKgorc19ydGZsYWdzeCggc3RydWN0IHJvdXRlX2VudHJ5ICpycCApCit7CisgICAgc3RhdGljIGNoYXIgZmxhZ19idWZbMTBdOworICAgIGNoYXIgICpjcCA9IGZsYWdfYnVmOworCisgICAgKmNwKysgPSAnPCc7CisgICAgKmNwKysgPSAnVSc7ICAgLyogcm91dGUgaXMgaW4gdXNlICovCisgICAgaWYgKChycC0+YWYgPT0gQUZfSU5FVCAmJiBycC0+bWFzayA9PSAzMikgfHwKKyAgICAgICAgICAgIChycC0+YWYgPT0gQUZfSU5FVDYgJiYgcnAtPm1hc2sgPT0gMTI4KSkKKyAgICAgICAgKmNwKysgPSAnSCc7ICAgLyogaG9zdCAqLworICAgIGlmIChycC0+cHJvdG8gPT0gNCkKKyAgICAgICAgKmNwKysgPSAnRCc7ICAgLyogSUNNUCByZWRpcmVjdCAqLworICAgIGlmIChycC0+dHlwZSAgPT0gNCkKKyAgICAgICAgKmNwKysgPSAnRyc7ICAgLyogcmVtb3RlIGRlc3RpbmF0aW9uL25ldCAqLworICAgICpjcCsrID0gJz4nOworICAgICpjcCA9IDA7CisgICAgcmV0dXJuIGZsYWdfYnVmOworfQorCitzdGF0aWMgdm9pZAorcF9ydG5vZGV4KCBzdHJ1Y3Qgcm91dGVfZW50cnkgKnJwICkKK3sKKyAgICBnZXRfaWZuYW1lKHJwLT5pZm5hbWUsIHJwLT5pZk51bWJlcik7CisgICAgaWYgKHJwLT5hZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZycC0+ZHN0OworICAgICAgICBwcmludGYoIiUtKnMgIiwKKyAgICAgICAgICAgIFdJRF9EU1QoQUZfSU5FVCksCisgICAgICAgICAgICAgICAgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpID8gImRlZmF1bHQiIDoKKyAgICAgICAgICAgICAgICAocnAtPm1hc2sgPT0gMzIgPworICAgICAgICAgICAgICAgICAgICByb3V0ZXhuYW1lKCZycC0+ZHN0KSA6CisgICAgICAgICAgICAgICAgICAgIG5ldHhuYW1lKCZycC0+ZHN0LCBycC0+bWFzaykpKTsKKyAgICB9CisgICAgZWxzZSBpZiAocnAtPmFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZycC0+ZHN0OworICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaW42X2FkZHJfYW55ID0gSU42QUREUl9BTllfSU5JVDsKKyAgICAgICAgcHJpbnRmKCIlLSpzICIsCisgICAgICAgICAgICBXSURfRFNUKEFGX0lORVQ2KSwKKyAgICAgICAgICAgICAgICBtZW1jbXAoJnNpbjYtPnNpbjZfYWRkciwgJmluNl9hZGRyX2FueSwgc2l6ZW9mKGluNl9hZGRyX2FueSkpID09IDAgPyAiZGVmYXVsdCIgOgorICAgICAgICAgICAgICAgIChycC0+bWFzayA9PSAxMjggPworICAgICAgICAgICAgICAgICAgICByb3V0ZXhuYW1lKCZycC0+ZHN0KSA6CisgICAgICAgICAgICAgICAgICAgIG5ldHhuYW1lKCZycC0+ZHN0LCBycC0+bWFzaykpKTsKKyAgICB9CisgICAgcHJpbnRmKCIlLSpzICUtNi42cyAgJXMiLAorICAgICAgICBXSURfR1cocnAtPmFmKSwKKyAgICAgICAgMSA/IHJvdXRleG5hbWUoJnJwLT5ob3ApIDogIioiLAorICAgICAgICBzX3J0ZmxhZ3N4KHJwKSwgcnAtPmlmbmFtZSk7CisgICAgaWYgKChycC0+c2V0X2JpdHMgJiBTRVRfQVMpICYmIHJwLT5hcyAhPSAwKQorICAgICAgICBwcmludGYoIiAoQVMgJWQpIiwgcnAtPmFzKTsKKyAgICBwcmludGYoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuYyBiL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jCmluZGV4IGZmZDU5NjYuLjVlMmRkNjQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jCkBAIC0yNSw5ICsyNSw2IEBACiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmggYi9hcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaAppbmRleCBlYTQwNDUwLi44ZmM1MWRkIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaAorKysgYi9hcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaApAQCAtMiw2ICsyLDggQEAKICNpZm5kZWYgX1dJTlNUVUJfSF8KICNkZWZpbmUgX1dJTlNUVUJfSF8KIAorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKICNpZiAoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChjeWd3aW4pKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wc2V0LmMgYi9hcHBzL3NubXBzZXQuYwppbmRleCBmYWVkYTk1Li4xYjI5YTZjIDEwMDY0NAotLS0gYS9hcHBzL3NubXBzZXQuYworKysgYi9hcHBzL3NubXBzZXQuYwpAQCAtNDMsMTEgKzQzLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OSw5ICs1NSw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTE0Miw5ICsxMzUsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHN0YXR1cy5jIGIvYXBwcy9zbm1wc3RhdHVzLmMKaW5kZXggYWUwODM2OS4uMDQ0M2M0ZCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wc3RhdHVzLmMKKysrIGIvYXBwcy9zbm1wc3RhdHVzLmMKQEAgLTEsNSArMSw2IEBACiAvKgotICogc25tcHN0YXR1cy5jIC0gc2VuZCBzbm1wIEdFVCByZXF1ZXN0cyB0byBhIG5ldHdvcmsgZW50aXR5LgorICogc25tcHN0YXR1cy5jIC0gcmV0cmlldmVzIGEgZml4ZWQgc2V0IG9mIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZnJvbQorICogYSBuZXR3b3JrIGVudGl0eS4KICAqCiAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDMsMTEgKzQ0LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OSw5ICs1Niw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTE1OSw5ICsxNTMsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCAmb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0YWJsZS5jIGIvYXBwcy9zbm1wdGFibGUuYwppbmRleCAzOTcwZTk3Li5jOWM3ZDI2IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0YWJsZS5jCisrKyBiL2FwcHMvc25tcHRhYmxlLmMKQEAgLTQzLDExICs0Myw3IEBACiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjAsOSArNTYsNiBAQAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0yMDgsNiArMjAxLDcgQEAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgb3B0aW9uIGFmdGVyIC1DOiAlY1xuIiwgb3B0YXJnWy0xXSk7CiAgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjU2LDcgKzI1MCw4IEBACiAgICAgbmV0c25tcF9zZXNzaW9uIHNlc3Npb24sICpzczsKICAgICBpbnQgICAgICAgICAgICB0b3RhbF9lbnRyaWVzID0gMDsKIAotICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9MQkYsIDEwMjQpOworICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZG91dCk7CisKICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCwgMSk7CiAKQEAgLTI2NCw5ICsyNTksMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKQEAgLTY2OSw3ICs2NjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb2wrKzsKICAgICAgICAgICAgICAgICAgICAgbmFtZVtyb290bGVuXSA9IGNvbHVtbltjb2xdLnN1YmlkOwogICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcnMtPm5hbWVfbGVuZ3RoIDwgbmFtZV9sZW5ndGgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgdmFycy0+bmFtZVtyb290bGVuXSAhPSBjb2x1bW5bY29sXS5zdWJpZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YXJzLT5uYW1lW3Jvb3RsZW5dICE9IGNvbHVtbltjb2xdLnN1YmlkKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKG5hbWUsIHZhcnMtPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSkgIT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFycy0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykgewpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdGVzdC5jIGIvYXBwcy9zbm1wdGVzdC5jCmluZGV4IDQ5OWJhY2YuLjI0ZGU0N2IgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRlc3QuYworKysgYi9hcHBzL3NubXB0ZXN0LmMKQEAgLTQ1LDExICs0NSw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjEsOSArNTcsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0xMDIsOSArOTUsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCBOVUxMLCBOVUxMKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKQEAgLTEyNyw3ICsxMjIsNyBAQAogICAgIH0KIAogICAgIHZhcmNvdW50ID0gMDsKLSAgICB3aGlsZSAoMSkgeworICAgIGZvcig7OykgewogICAgICAgICB2YXJzID0gTlVMTDsKICAgICAgICAgZm9yIChyZXQgPSAxOyByZXQgIT0gMDspIHsKICAgICAgICAgICAgIHZwID0gKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKQpAQCAtMTY4LDcgKzE2MywxMSBAQAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJXaGF0IHJlcGVhdCBjb3VudD8gIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZnZXRzKGlucHV0LCBzaXplb2YoaW5wdXQpLCBzdGRpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZnZXRzKGlucHV0LCBzaXplb2YoaW5wdXQpLCBzdGRpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlF1aXR0aW5nLCAgR29vZGJ5ZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhSZXBldGl0aW9ucyA9IGF0b2koaW5wdXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5ub25fcmVwZWF0ZXJzID0gbm9uUmVwZWF0ZXJzOwogICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5tYXhfcmVwZXRpdGlvbnMgPSBtYXhSZXBldGl0aW9uczsKQEAgLTIxMSw5ICsyMTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgR2V0IFJlc3BvbnNlICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgU2V0IFJlcXVlc3QgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgY2FzZSBTTk1QX01TR19UUkFQOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWNlaXZlZCBUcmFwIFJlcXVlc3QgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI3Nyw4ICsyNzgsNyBAQAogICAgICAgICB2YXJjb3VudCA9IDA7CiAgICAgICAgIG5vblJlcGVhdGVycyA9IC0xOwogICAgIH0KLSAgICBTT0NLX0NMRUFOVVA7Ci0gICAgcmV0dXJuIDA7CisgICAgLyogTk9UUkVBQ0hFRCAqLwogfQogCiBpbnQKQEAgLTI4Niw4ICsyODYsNyBAQAogewogICAgIGNoYXIgICAgICAgICAgICBidWZbMjU2XTsKICAgICBzaXplX3QgICAgICAgICAgdmFsX2xlbjsKLSAgICB1X2NoYXIgICAgICAgICAgdmFsdWVbMjU2XSwgY2g7Ci0gICAgb2lkICAgICAgICAgICAgIG5hbWVbTUFYX09JRF9MRU5dOworICAgIHVfY2hhciAgICAgICAgICBjaDsKIAogICAgIHByaW50ZigiVmFyaWFibGU6ICIpOwogICAgIGZmbHVzaChzdGRvdXQpOwpAQCAtMzA1LDcgKzMwNCw3IEBACiAgICAgaWYgKGJ1Zlt2YWxfbGVuIC0gMV0gPT0gJ1xuJykKICAgICAgICAgYnVmWy0tdmFsX2xlbl0gPSAwOwogICAgIGlmICgqYnVmID09ICckJykgewotICAgICAgICBzd2l0Y2ggKHRvdXBwZXIoYnVmWzFdKSkgeworICAgICAgICBzd2l0Y2ggKHRvdXBwZXIoKHVuc2lnbmVkIGNoYXIpKGJ1ZlsxXSkpKSB7CiAgICAgICAgIGNhc2UgJ0cnOgogICAgICAgICAgICAgY29tbWFuZCA9IFNOTVBfTVNHX0dFVDsKICAgICAgICAgICAgIHByaW50ZigiUmVxdWVzdCB0eXBlIGlzIEdldCBSZXF1ZXN0XG4iKTsKQEAgLTMxNCwxMCArMzEzLDEyIEBACiAgICAgICAgICAgICBjb21tYW5kID0gU05NUF9NU0dfR0VUTkVYVDsKICAgICAgICAgICAgIHByaW50ZigiUmVxdWVzdCB0eXBlIGlzIEdldG5leHQgUmVxdWVzdFxuIik7CiAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgJ1MnOgogICAgICAgICAgICAgY29tbWFuZCA9IFNOTVBfTVNHX1NFVDsKICAgICAgICAgICAgIHByaW50ZigiUmVxdWVzdCB0eXBlIGlzIFNldCBSZXF1ZXN0XG4iKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBjYXNlICdCJzoKICAgICAgICAgICAgIGNvbW1hbmQgPSBTTk1QX01TR19HRVRCVUxLOwogICAgICAgICAgICAgcHJpbnRmKCJSZXF1ZXN0IHR5cGUgaXMgQnVsayBSZXF1ZXN0XG4iKTsKQEAgLTMzNiwxNiArMzM3LDE5IEBACiAgICAgICAgICAgICBwcmludGYoIihBcmUgeW91IHNlbmRpbmcgdG8gdGhlIHJpZ2h0IHBvcnQ/KVxuIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICBpZiAoc25tcF9nZXRfZHVtcF9wYWNrZXQoKSkgewotICAgICAgICAgICAgICAgIHNubXBfc2V0X2R1bXBfcGFja2V0KDApOworICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCAwKTsKICAgICAgICAgICAgICAgICBwcmludGYoIlR1cm5lZCBwYWNrZXQgZHVtcCBvZmZcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbm1wX3NldF9kdW1wX3BhY2tldCgxKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCwgMSk7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJUdXJuZWQgcGFja2V0IGR1bXAgb25cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ1EnOgotICAgICAgICAgICAgc3dpdGNoICgodG91cHBlcihidWZbMl0pKSkgeworICAgICAgICAgICAgc3dpdGNoICgodG91cHBlcigodW5zaWduZWQgY2hhcikoYnVmWzJdKSkpKSB7CiAgICAgICAgICAgICBjYXNlICdcbic6CiAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJRdWl0dGluZywgIEdvb2RieWVcbiIpOwpAQCAtMzUzLDExICszNTcsMTQgQEAKICAgICAgICAgICAgICAgICBleGl0KDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnUCc6Ci0gICAgICAgICAgICAgICAgaWYgKHNubXBfZ2V0X3F1aWNrX3ByaW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoMCk7CisgICAgICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAwKTsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUdXJuZWQgcXVpY2sgcHJpbnRpbmcgb2ZmXG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF9xdWlja19wcmludCgxKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAxKTsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUdXJuZWQgcXVpY2sgcHJpbnRpbmcgb25cbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwxOSArMzc1LDI5IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICB2cC0+bmFtZV9sZW5ndGggPSBNQVhfT0lEX0xFTjsKLSAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGJ1ZiwgbmFtZSwgJnZwLT5uYW1lX2xlbmd0aCkpIHsKLSAgICAgICAgc25tcF9wZXJyb3IoYnVmKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIHsKKwlvaWQgICAgIG5hbWVbTUFYX09JRF9MRU5dOworCXZwLT5uYW1lX2xlbmd0aCA9IE1BWF9PSURfTEVOOworCWlmICghc25tcF9wYXJzZV9vaWQoYnVmLCBuYW1lLCAmdnAtPm5hbWVfbGVuZ3RoKSkgeworCSAgICBzbm1wX3BlcnJvcihidWYpOworCSAgICByZXR1cm4gLTE7CisJfQorCXZwLT5uYW1lID0gc25tcF9kdXBsaWNhdGVfb2JqaWQobmFtZSwgdnAtPm5hbWVfbGVuZ3RoKTsKICAgICB9Ci0gICAgdnAtPm5hbWUgPSAob2lkICopIG1hbGxvYyh2cC0+bmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7Ci0gICAgbWVtbW92ZSh2cC0+bmFtZSwgbmFtZSwgdnAtPm5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogCi0gICAgaWYgKGNvbW1hbmQgPT0gU05NUF9NU0dfU0VUIHx8IGNvbW1hbmQgPT0gU05NUF9NU0dfSU5GT1JNCi0gICAgICAgIHx8IGNvbW1hbmQgPT0gU05NUF9NU0dfVFJBUDIpIHsKKyAgICBpZiAoY29tbWFuZCA9PSBTTk1QX01TR19JTkZPUk0KKyAgICAgICAgfHwgY29tbWFuZCA9PSBTTk1QX01TR19UUkFQMgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgfHwgY29tbWFuZCA9PSBTTk1QX01TR19TRVQKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgKSB7CiAgICAgICAgIHByaW50ZigiVHlwZSBbaXx1fHN8eHxkfG58b3x0fGFdOiAiKTsKICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKTsKKyAgICAgICAgaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikpIHsKKyAgICAgICAgICAgIHByaW50ZigiUXVpdHRpbmcsICBHb29kYnllXG4iKTsKKyAgICAgICAgICAgIFNPQ0tfQ0xFQU5VUDsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KICAgICAgICAgY2ggPSAqYnVmOwogICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgIGNhc2UgJ2knOgpAQCAtNDE5LDcgKzQzNiwxMSBAQAogICAgICAgZ2V0VmFsdWU6CiAgICAgICAgIHByaW50ZigiVmFsdWU6ICIpOwogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pOworICAgICAgICBpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworICAgICAgICAgICAgcHJpbnRmKCJRdWl0dGluZywgIEdvb2RieWVcbiIpOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKHZwLT50eXBlKSB7CiAgICAgICAgIGNhc2UgQVNOX0lOVEVHRVI6CiAgICAgICAgICAgICB2cC0+dmFsLmludGVnZXIgPSAobG9uZyAqKSBtYWxsb2Moc2l6ZW9mKGxvbmcpKTsKQEAgLTQ4MSwxNCArNTAyLDE2IEBACiAgICAgICAgIGNhc2UgQVNOX09CSkVDVF9JRDoKICAgICAgICAgICAgIGlmICgnXG4nID09IGJ1ZltzdHJsZW4oYnVmKSAtIDFdKQogICAgICAgICAgICAgICAgIGJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsKLSAgICAgICAgICAgIHZwLT52YWxfbGVuID0gTUFYX09JRF9MRU47OwotICAgICAgICAgICAgaWYgKDAgPT0gcmVhZF9vYmppZChidWYsIChvaWQgKikgdmFsdWUsICZ2cC0+dmFsX2xlbikpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlVucmVjb2duaXNlZCBPSUQgdmFsdWVcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8gZ2V0VmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2cC0+dmFsX2xlbiAqPSBzaXplb2Yob2lkKTsKLSAgICAgICAgICAgIHZwLT52YWwub2JqaWQgPSAob2lkICopIG1hbGxvYyh2cC0+dmFsX2xlbik7Ci0gICAgICAgICAgICBtZW1tb3ZlKHZwLT52YWwub2JqaWQsIHZhbHVlLCB2cC0+dmFsX2xlbik7CisJICAgIGVsc2UgeworCQlvaWQgdmFsdWVbTUFYX09JRF9MRU5dOworCQl2cC0+dmFsX2xlbiA9IE1BWF9PSURfTEVOOworCQlpZiAoMCA9PSByZWFkX29iamlkKGJ1ZiwgdmFsdWUsICZ2cC0+dmFsX2xlbikpIHsKKwkJICAgIHByaW50ZigiVW5yZWNvZ25pc2VkIE9JRCB2YWx1ZVxuIik7CisJCSAgICBnb3RvIGdldFZhbHVlOworCQl9CisJCXZwLT52YWwub2JqaWQgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZCh2YWx1ZSwgdnAtPnZhbF9sZW4pOworCQl2cC0+dmFsX2xlbiAqPSBzaXplb2Yob2lkKTsKKwkgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVNOX1RJTUVUSUNLUzoKICAgICAgICAgICAgIHZwLT52YWwuaW50ZWdlciA9IChsb25nICopIG1hbGxvYyhzaXplb2YobG9uZykpOwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdGxzLmMgYi9hcHBzL3NubXB0bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM1ZmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9zbm1wdGxzLmMKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyN1bmRlZiBORVRTTk1QX1VTRV9BU1NFUlQKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRsc19maW5nZXJwcmludF9idWlsZCkKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisKKyNpbmNsdWRlICJ0bHN0bS1taWIuaCIKKyNpbmNsdWRlICJ0bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oIgorI2luY2x1ZGUgInRsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oIgorI2luY2x1ZGUgInRsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oIgorCisKKworLyoKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9JRCAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICAgICAgICAgICAgICAyCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICAgICAgICAgICAgICA1CisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICAgICAgICAgICAgICAgIDYKKyovCitjb25zdCBvaWQgY2VydE51bVtdID0geyBTTk1QX1RMU19UTV9DRVJUX0NPVU5UIH07Citjb25zdCBvaWQgY2VydENoZ1tdID0geyBTTk1QX1RMU19UTV9DRVJUX0NIQU5HRUQgfTsKK2NvbnN0IG9pZCBjZXJ0VGJsW10gPSB7IFNOTVBfVExTX1RNX0NFUlRfVEFCTEUgfTsKKworLyoKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICAgIDEKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICAgIDIKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAgICAzCisqLworCitjb25zdCBvaWQgcGFyYW1zTnVtW10gPSB7IFNOTVBfVExTX1RNX1BBUkFNU19DT1VOVCB9OworY29uc3Qgb2lkIHBhcmFtc0NoZ1tdID0geyBTTk1QX1RMU19UTV9QQVJBTVNfQ0hBTkdFRCB9OworY29uc3Qgb2lkIHBhcmFtc1RibFtdID0geyBTTk1QX1RMU19UTV9QQVJBTVNfVEFCTEUgfTsKKworY29uc3Qgb2lkIGFkZHJOdW1bXSA9IHsgU05NUF9UTFNfVE1fQUREUl9DT1VOVCB9OworY29uc3Qgb2lkIGFkZHJDaGdbXSA9IHsgU05NUF9UTFNfVE1fQUREUl9DSEFOR0VEIH07Citjb25zdCBvaWQgYWRkclRibFtdID0geyBTTk1QX1RMU19UTV9BRERSX1RBQkxFIH07CisKKworY29uc3Qgb2lkIHRsc3RtQ2VydFNwZWNpZmllZFtdICAgICA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgMSB9OworY29uc3Qgb2lkIHRsc3RtQ2VydFNBTlJGQzgyMk5hbWVbXSA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgMiB9OworY29uc3Qgb2lkIHRsc3RtQ2VydFNBTkROU05hbWVbXSAgICA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgMyB9OworY29uc3Qgb2lkIHRsc3RtQ2VydFNBTklwQWRkcmVzc1tdICA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgNCB9OworY29uc3Qgb2lkIHRsc3RtQ2VydFNBTkFueVtdICAgICAgICA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgNSB9OworY29uc3Qgb2lkIHRsc3RtQ2VydENvbW1vbk5hbWVbXSAgICA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgNiB9OworCitjb25zdCBvaWQgKmNlcnRNYXBUeXBlc1tUU05NX3Rsc3RtQ2VydF9NQVggKyAxXSA9IHsKKyAgICAwLCB0bHN0bUNlcnRTcGVjaWZpZWQsIHRsc3RtQ2VydFNBTlJGQzgyMk5hbWUsIHRsc3RtQ2VydFNBTkROU05hbWUsCisgICAgdGxzdG1DZXJ0U0FOSXBBZGRyZXNzLCB0bHN0bUNlcnRTQU5BbnksIHRsc3RtQ2VydENvbW1vbk5hbWUgfTsKKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2VydCByb3dzCisgKgorICovCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorY2VydF9yb3dfY3JlYXRlKHVpbnQzMl90IHByaW9yaXR5LCBpbnQgaGFzaF90eXBlLCBjb25zdCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICBjb25zdCBvaWQgKm1hcF90eXBlLCBpbnQgbWFwX3R5cGVfbGVuLCBjb25zdCB1X2NoYXIgKmRhdGEsCisgICAgICAgICAgICAgICAgaW50IGRhdGFfbGVuLCB1aW50MzJfdCBzdCwgaW50ICpyb3dfc3RhdHVzX2luZGV4KQoreworICAgIG9pZCAgICAgICAgICAgICAgICAgICAgbmFtZVtdID0geyBTTk1QX1RMU19UTV9DRVJUX1RBQkxFLCAxLCAtMSwgLTEgfTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuID0gT0lEX0xFTkdUSChuYW1lKSwgY29sX3BvcyA9IG5hbWVfbGVuIC0gMjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJzX2luZGV4ID0gNDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgIGJpbl9mcFtTTk1QX01BWEJVRl9TTUFMTF0sICpiaW5fZnBfcHRyID0gYmluX2ZwOworICAgIHVfaW50ICAgICAgICAgICAgICAgICAgcnM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICBiaW5fZnBfbGVuOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmwgPSBOVUxMLCAqdmI7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggZnAsIE5VTEwgKTsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6Y3JlYXRlIiwgImNyZWF0aW5nIHZhcmJpbmRzIGZvciBwcmkgJWQsIGZwICVzXG4iLCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgIGZwKSk7CisKKyAgICBiaW5fZnBfbGVuID0gc2l6ZW9mKGJpbl9mcCk7CisgICAgbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoaGFzaF90eXBlLCBmcCwgJmJpbl9mcF9wdHIsICZiaW5fZnBfbGVuLCAwKTsKKworICAgIG5hbWVbbmFtZV9sZW4tMV0gPSBwcmlvcml0eTsKKyAgICBuYW1lW2NvbF9wb3NdID0gQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDsKKyAgICB2bCA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpbl9mcCwgYmluX2ZwX2xlbik7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmwsIE5VTEwpOworCisgICAgaWYgKG1hcF90eXBlX2xlbiAmJiBtYXBfdHlwZSkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOworICAgICAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcF90eXBlLCBtYXBfdHlwZV9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIGlmIChOVUxMID09IHZiKSB7CisgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2bCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIC0tcnNfaW5kZXg7CisKKyAgICBpZiAoZGF0YSkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOworICAgICAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGFfbGVuKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIGlmIChzdCkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRTsKKyAgICAgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0LCBzaXplb2Yoc3QpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIG5hbWVbY29sX3Bvc10gPSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzsKKyAgICBycyA9IFJTX0NSRUFURUFOREdPOworICAgIHZiID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJzLCBzaXplb2YocnMpKTsKKyAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2bCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChyb3dfc3RhdHVzX2luZGV4KQorICAgICAgICAqcm93X3N0YXR1c19pbmRleCA9IHJzX2luZGV4OworCisgICAgcmV0dXJuIHZsOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwYXJhbSByb3dzCisgKgorICovCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorcGFyYW1zX3Jvd19jcmVhdGUoY29uc3QgY2hhciAqcGFyYW1fbmFtZSwgaW50IGhhc2hfdHlwZSwgY29uc3QgY2hhciAqZnAsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdCwgaW50ICpyb3dfc3RhdHVzX2luZGV4KQoreworICAgIG9pZCAgICAgICAgICAgICAgICAgICAgbmFtZVtNQVhfT0lEX0xFTl07CisgICAgaW50ICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbiwgY29sX3BvcywgcnNfaW5kZXggPSAyOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgYmluX2ZwW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmJpbl9mcF9wdHIgPSBiaW5fZnA7CisgICAgdV9pbnQgICAgICAgICAgICAgICAgICByczsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgIGJpbl9mcF9sZW47CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2bCA9IE5VTEwsICp2YjsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBwYXJhbV9uYW1lLCBOVUxMICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGZwLCBOVUxMICk7CisKKyAgICBERUJVR01TR1QoKCJwYXJhbXM6Y3JlYXRlIiwgImNyZWF0aW5nIHZhcmJpbmRzIGZvciAlcyBwYXJhbXMsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgcGFyYW1fbmFtZSwgZnApKTsKKworICAgIC8qCisgICAgICogYnVpbGQgYmFzZSBuYW1lCisgICAgICovCisgICAgbmFtZV9sZW4gPSBPSURfTEVOR1RIKHBhcmFtc1RibCk7CisgICAgbWVtY3B5KG5hbWUsIHBhcmFtc1RibCwgc2l6ZW9mKHBhcmFtc1RibCkpOworICAgIG5hbWVbbmFtZV9sZW4rK10gPSAxOyAvKiBlbnRyeSAqLworICAgIGNvbF9wb3MgPSBuYW1lX2xlbisrOyAvKiBjb2x1bW4gKi8KKyAgICB3aGlsZSAoKnBhcmFtX25hbWUpCisgICAgICAgIG5hbWVbbmFtZV9sZW4rK10gPSAqcGFyYW1fbmFtZSsrOworCisgICAgYmluX2ZwX2xlbiA9IHNpemVvZihiaW5fZnApOworICAgIG5ldHNubXBfdGxzX2ZpbmdlcnByaW50X2J1aWxkKGhhc2hfdHlwZSwgZnAsICZiaW5fZnBfcHRyLCAmYmluX2ZwX2xlbiwgMCk7CisKKyAgICBuYW1lW2NvbF9wb3NdID0gQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOworICAgIHZsID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmluX2ZwLCBiaW5fZnBfbGVuKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2bCwgTlVMTCk7CisKKyAgICBpZiAoc3QpIHsKKyAgICAgICAgbmFtZVtjb2xfcG9zXSA9IENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRTsKKyAgICAgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0LCBzaXplb2Yoc3QpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIG5hbWVbY29sX3Bvc10gPSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOworICAgIHJzID0gUlNfQ1JFQVRFQU5ER087CisgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnMsIHNpemVvZihycykpOworICAgIGlmIChOVUxMID09IHZiKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHJvd19zdGF0dXNfaW5kZXgpCisgICAgICAgICpyb3dfc3RhdHVzX2luZGV4ID0gcnNfaW5kZXg7CisKKyAgICByZXR1cm4gdmw7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFkZHIgcm93cworICoKKyAqLworbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK2FkZHJfcm93X2NyZWF0ZShjb25zdCBjaGFyICp0YXJnZXRfbmFtZSwgaW50IGhhc2hfdHlwZSwgY29uc3QgY2hhciAqZnAsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWRlbnRpdHksIHVpbnQzMl90IHN0LCBpbnQgKnJvd19zdGF0dXNfaW5kZXgpCit7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICBuYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuLCBjb2xfcG9zLCByc19pbmRleCA9IDM7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICBiaW5fZnBbU05NUF9NQVhCVUZfU01BTExdLCAqYmluX2ZwX3B0ciA9IGJpbl9mcDsKKyAgICB1X2ludCAgICAgICAgICAgICAgICAgIHJzOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgYmluX2ZwX2xlbjsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZsID0gTlVMTCwgKnZiOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHRhcmdldF9uYW1lLCBOVUxMICk7CisKKyAgICBERUJVR01TR1QoKCJhZGRyOmNyZWF0ZSIsICJjcmVhdGluZyB2YXJiaW5kcyBmb3IgJXMgYWRkciwgZnAgJXMsIGlkICVzXG4iLAorICAgICAgICAgICAgICAgdGFyZ2V0X25hbWUsIGZwLCBpZGVudGl0eSkpOworCisgICAgLyoKKyAgICAgKiBidWlsZCBiYXNlIG5hbWUKKyAgICAgKi8KKyAgICBuYW1lX2xlbiA9IE9JRF9MRU5HVEgoYWRkclRibCk7CisgICAgbWVtY3B5KG5hbWUsIGFkZHJUYmwsIHNpemVvZihhZGRyVGJsKSk7CisgICAgbmFtZVtuYW1lX2xlbisrXSA9IDE7IC8qIGVudHJ5ICovCisgICAgY29sX3BvcyA9IG5hbWVfbGVuKys7IC8qIGNvbHVtbiAqLworICAgIHdoaWxlICgqdGFyZ2V0X25hbWUpCisgICAgICAgIG5hbWVbbmFtZV9sZW4rK10gPSAqdGFyZ2V0X25hbWUrKzsKKworICAgIGlmIChmcCkgeworICAgICAgICBiaW5fZnBfbGVuID0gc2l6ZW9mKGJpbl9mcCk7CisgICAgICAgIG5ldHNubXBfdGxzX2ZpbmdlcnByaW50X2J1aWxkKGhhc2hfdHlwZSwgZnAsICZiaW5fZnBfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaW5fZnBfbGVuLCAwKTsKKworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDsKKyAgICAgICAgdmwgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmluX2ZwLCBiaW5fZnBfbGVuKTsKKyAgICAgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmwsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIC0tcnNfaW5kZXg7CisKKyAgICBpZiAoaWRlbnRpdHkpIHsKKyAgICAgICAgbmFtZVtjb2xfcG9zXSA9IENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk7CisgICAgICAgIHZsID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHksIHN0cmxlbihpZGVudGl0eSkpOworICAgICAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2bCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIGlmIChzdCkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRTsKKyAgICAgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0LCBzaXplb2Yoc3QpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIG5hbWVbY29sX3Bvc10gPSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzsKKyAgICBycyA9IFJTX0NSRUFURUFOREdPOworICAgIHZiID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJzLCBzaXplb2YocnMpKTsKKyAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2bCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChyb3dfc3RhdHVzX2luZGV4KQorICAgICAgICAqcm93X3N0YXR1c19pbmRleCA9IHJzX2luZGV4OworCisgICAgcmV0dXJuIHZsOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhcHBsaWNhdGlvbiBjb2RlCisgKgorICovCitzdGF0aWMgY2hhciAgICAgICAgICpfZGF0YSA9IE5VTEwsICpfbWFwX3R5cGVfc3RyID0gTlVMTCwgKl9pZF9zdHIgPSBOVUxMOworc3RhdGljIGNoYXIgICAgICAgICAqX3N0b3JhZ2VfdHlwZV9zdHIgPSBOVUxMLCAqX2ZwX3N0ciA9IE5VTEw7CitzdGF0aWMgaW50ICAgICAgICAgICBfc3RvcmFnZV90eXBlID0gU1RfTk9ORSwgX2hhc2hfdHlwZSA9IE5TX0hBU0hfTk9ORTsKK3N0YXRpYyBzaXplX3QgICAgICAgIF9kYXRhX2xlbjsKKworc3RhdGljIHZvaWQKK29wdFByb2MoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBpbnQgb3B0KQoreworICAgIGlmICgnQycgIT0gb3B0KQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoKm9wdGFyZykgeworICAgICAgICBzd2l0Y2ggKCpvcHRhcmcrKykgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCisgICAgICAgICAgICAgICAgICAgIF9tYXBfdHlwZV9zdHIgPSBhcmd2W29wdGluZCsrXTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgLUNtIG9wdGlvbjogbm8gYXJndW1lbnQgZ2l2ZW5cbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgIF9kYXRhID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgICAgICAgICAgIF9kYXRhX2xlbiA9IHN0cmxlbihfZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ2Qgb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KDB4RkYgJiBhcmd2W29wdGluZF1bMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgX3N0b3JhZ2VfdHlwZSA9IGF0b2koYXJndltvcHRpbmQrK10pOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBfc3RvcmFnZV90eXBlX3N0ciA9IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgLUNzIG9wdGlvbjogbm8gYXJndW1lbnQgZ2l2ZW5cbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisgICAgICAgICAgICAgICAgCisJICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KDB4RkYgJiBhcmd2W29wdGluZF1bMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgX2hhc2hfdHlwZSA9IGF0b2koYXJndltvcHRpbmQrK10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgLUNoIG9wdGlvbjogbm8gYXJndW1lbnQgZ2l2ZW5cbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisgICAgICAgICAgICAgICAgCisJICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKQorICAgICAgICAgICAgICAgICAgICBfZnBfc3RyID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIC1DZiBvcHRpb246IG5vIGFyZ3VtZW50IGdpdmVuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworICAgICAgICAgICAgICAgIAorCSAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpZiAob3B0aW5kIDwgYXJnYykKKyAgICAgICAgICAgICAgICAgICAgX2lkX3N0ciA9IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ2kgb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGZsYWcgcGFzc2VkIHRvIC1DOiAlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZ1stMV0pOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK19wYXJzZV9zdG9yYWdlX3R5cGUoY29uc3QgY2hhciAqYXJnKQoreworICAgIG5ldHNubXBfcGR1IGR1bW15OworICAgIG9pZCBuYW1lW10gPSB7IFNOTVBfVExTX1RNX0NFUlRfVEFCTEUsIDEsCisgICAgICAgICAgICAgICAgICAgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSB9OworICAgIGludCBuYW1lX2xlbiA9IE9JRF9MRU5HVEgobmFtZSk7CisKKyAgICBpZiAoTlVMTCA9PSBhcmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1lbXNldCgmZHVtbXksIDB4MDAsIHNpemVvZihkdW1teSkpOworICAgIHNubXBfYWRkX3ZhcigmZHVtbXksIG5hbWUsIG5hbWVfbGVuLCAnaScsIGFyZyk7CisgICAgaWYgKGR1bW15LnZhcmlhYmxlcykgeworICAgICAgICBfc3RvcmFnZV90eXBlID0gKmR1bW15LnZhcmlhYmxlcy0+dmFsLmludGVnZXI7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKGR1bW15LnZhcmlhYmxlcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gc3RvcmFnZSB0eXBlICVzIGZvciAtQ3NcbiIsIGFyZyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCit2b2lkCit1c2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVVNBR0U6IHNubXB0bHMgWy1DbSBtYXBUeXBlT0lEXSBbLUNkIGRhdGFdIFstQ3Mgc3RvcmFnZVR5cGVdICIpOworICAgIHNubXBfcGFyc2VfYXJnc191c2FnZShzdGRlcnIpOworICAgIGZwcmludGYoc3RkZXJyLCAiPGNvbW1hbmQ+IFtjb21tYW5kIG9wdGlvbnNdXG5cbiIpOworICAgIHNubXBfcGFyc2VfYXJnc19kZXNjcmlwdGlvbnMoc3RkZXJyKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdICAgY2VydFRvU2VjTmFtZSBhZGQgPHByaW9yaXR5PiA8aGFzaFR5cGU+IDxmaW5nZXJwcmludD5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ21cdFx0TWFwdHlwZTsgW3NubXBUbHN0bUNlcnRDb21tb25OYW1lfHNubXBUbHN0bUNlcnRTQU5SRkM4MjJOYW1lfHNubXBUbHN0bUNlcnRTQU5JcEFkZHJlc3N8c25tcFRsc3RtQ2VydFNBTkROU05hbWV8c25tcFRsc3RtQ2VydFNwZWNpZmllZF1cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdFx0KGRlZmF1bHQgaXMgc25tcFRsc3RtQ2VydFNwZWNpZmllZClcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ2RcdFx0RGF0YTsgZGF0YSBmb3Igc25tcFRsc3RtQ2VydFNwZWNpZmllZC5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ3NcdFx0c3RvcmFnZVR5cGU7IGRlZmF1bHQgaXMgbm9uVm9sYXRpbGUuXG4iKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICB0YXJnZXRQYXJhbXNGaW5nZXJwcmludCBhZGQgPHBhcmFtcy1uYW1lPiA8aGFzaFR5cGU+IDxmaW5nZXJwcmludD5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ3NcdFx0c3RvcmFnZVR5cGU7IGRlZmF1bHQgaXMgbm9uVm9sYXRpbGUuXG4iKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICB0YXJnZXRBZGRyIGFkZCA8dGFyZ2V0LW5hbWU+IDxoYXNoVHlwZT4gWzxoYXNoX3R5cGU+IDxyZW1vdGUtZmluZ2VycHJpbnQ+XSBbc2VydmVyLWlkZW50aXR5XVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1Dc1x0XHRzdG9yYWdlVHlwZTsgZGVmYXVsdCBpcyBub25Wb2xhdGlsZS5cbiIpOworCisgICAgZXhpdCgxKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgIHNlc3Npb24sICpzczsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcl9saXN0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIGFyZywgcnNfaWR4ID0gMDsKKyAgICB1X2ludCAgICAgICAgICAgICAgICAgIGhhc2hfdHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgKmZpbmdlcnByaW50LCAqdG1wOworCisgICAgLyoKKyAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAorICAgICAqLworICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgeworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKKyAgICAgICAgZXhpdCgwKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKKyAgICAgICAgdXNhZ2UoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9wZW4gYW4gU05NUCBzZXNzaW9uLgorICAgICAqLworICAgIFNPQ0tfU1RBUlRVUDsKKyAgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisgICAgaWYgKHNzID09IE5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZGlhZ25vc2Ugc25tcF9vcGVuIGVycm9ycyB3aXRoIHRoZSBpbnB1dCBuZXRzbm1wX3Nlc3Npb24gcG9pbnRlciAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfc2Vzc19wZXJyb3IoInNubXB0bHMiLCAmc2Vzc2lvbik7CisgICAgICAgIFNPQ0tfQ0xFQU5VUDsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbYXJnXSwgImNlcnRUb1NlY05hbWUiKSA9PSAwKSB7CisKKyAgICAgICAgb2lkICAgICAgICAgICBtYXBfdHlwZVtNQVhfT0lEX0xFTl07CisgICAgICAgIHVfaW50ICAgICAgICAgcHJpOworICAgICAgICBzaXplX3QgICAgICAgIG1hcF90eXBlX2xlbiA9IDA7CisKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WysrYXJnXSwgImFkZCIpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib25seSBhZGQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZVxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgcHJpID0gYXRvaShhcmd2WysrYXJnXSk7CisgICAgICAgIHRtcCA9IGFyZ3ZbKythcmddOworICAgICAgICBoYXNoX3R5cGUgPSBhdG9pKHRtcCk7CisgICAgICAgIGZpbmdlcnByaW50ID0gYXJndlsrK2FyZ107CisKKyAgICAgICAgREVCVUdNU0dUKCgic25tcHRscyIsCisgICAgICAgICAgICAgICAgICAgImNyZWF0ZSBwcmkgJWQsIGhhc2ggdHlwZSAlZCwgZnAgJXMiLAorICAgICAgICAgICAgICAgICAgIHByaSwgaGFzaF90eXBlLCBmaW5nZXJwcmludCkpOworICAgICAgICBpZiAoX21hcF90eXBlX3N0cikgeworICAgICAgICAgICAgbWFwX3R5cGVfbGVuID0gTUFYX09JRF9MRU47CisgICAgICAgICAgICBpZiAoc25tcF9wYXJzZV9vaWQoX21hcF90eXBlX3N0ciwgbWFwX3R5cGUsICZtYXBfdHlwZV9sZW4pIAorICAgICAgICAgICAgICAgID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3BlcnJvcihfbWFwX3R5cGVfc3RyKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wdGxzIiwgIiwgbWFwIHR5cGUgIikpOworICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJzbm1wdGxzIiwgbWFwX3R5cGUsIG1hcF90eXBlX2xlbikpOworICAgICAgICB9CisgICAgICAgIGlmIChfZGF0YSkKKyAgICAgICAgICAgIERFQlVHTVNHKCgic25tcHRscyIsICIsIGRhdGEgJXMiLCBfZGF0YSkpOworCisgICAgICAgIF9wYXJzZV9zdG9yYWdlX3R5cGUoX3N0b3JhZ2VfdHlwZV9zdHIpOworCisgICAgICAgIERFQlVHTVNHKCgic25tcHRscyIsICJcbiIpKTsKKyAgICAgICAgdmFyX2xpc3QgPSBjZXJ0X3Jvd19jcmVhdGUocHJpLCBoYXNoX3R5cGUsIGZpbmdlcnByaW50LCBtYXBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwX3R5cGVfbGVuLCAodV9jaGFyKilfZGF0YSwgX2RhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3RvcmFnZV90eXBlLCAmcnNfaWR4KTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnXSwgInRhcmdldFBhcmFtc0ZpbmdlcnByaW50IikgPT0gMCkgeworCisgICAgICAgIGNoYXIgKiBwYXJhbXNfbmFtZTsKKworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbKythcmddLCAiYWRkIikgIT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvbmx5IGFkZCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbXNfbmFtZSA9IGFyZ3ZbKythcmddOworICAgICAgICBoYXNoX3R5cGUgPSBhdG9pKGFyZ3ZbKythcmddKTsKKyAgICAgICAgZmluZ2VycHJpbnQgPSBhcmd2WysrYXJnXTsKKyAgICAgICAgCisgICAgICAgIF9wYXJzZV9zdG9yYWdlX3R5cGUoX3N0b3JhZ2VfdHlwZV9zdHIpOworCisgICAgICAgIERFQlVHTVNHVCgoInNubXB0bHMiLAorICAgICAgICAgICAgICAgICAgICJjcmVhdGUgJXMgcGFyYW0gZnAsIGhhc2ggdHlwZSAlZCwgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcGFyYW1zX25hbWUsIGhhc2hfdHlwZSwgZmluZ2VycHJpbnQpKTsKKworICAgICAgICB2YXJfbGlzdCA9IHBhcmFtc19yb3dfY3JlYXRlKHBhcmFtc19uYW1lLCBoYXNoX3R5cGUsIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdG9yYWdlX3R5cGUsICZyc19pZHgpOworICAgIH0KKworICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ10sICJ0YXJnZXRBZGRyIikgPT0gMCkgeworCisgICAgICAgIGNoYXIgKiBhZGRyX25hbWU7CisKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WysrYXJnXSwgImFkZCIpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib25seSBhZGQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZVxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgYWRkcl9uYW1lID0gYXJndlsrK2FyZ107CisgICAgICAgIAorICAgICAgICBfcGFyc2Vfc3RvcmFnZV90eXBlKF9zdG9yYWdlX3R5cGVfc3RyKTsKKworICAgICAgICBERUJVR01TR1QoKCJzbm1wdGxzIiwKKyAgICAgICAgICAgICAgICAgICAiY3JlYXRlICVzIGFkZHIgZnAsIGhhc2ggdHlwZSAlZCwgZnAgJXMsIGlkICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGFkZHJfbmFtZSwgX2hhc2hfdHlwZSwgX2ZwX3N0ciwgX2lkX3N0cikpOworCisgICAgICAgIHZhcl9saXN0ID0gYWRkcl9yb3dfY3JlYXRlKGFkZHJfbmFtZSwgX2hhc2hfdHlwZSwgX2ZwX3N0ciwgX2lkX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3RvcmFnZV90eXBlLCAmcnNfaWR4KTsKKyAgICB9CisKKyAgICBpZiAoISB2YXJfbGlzdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIGNvbW1hbmQgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICB9CisKKyAgICBuZXRzbm1wX3Jvd19jcmVhdGUoc3MsIHZhcl9saXN0LCByc19pZHgpOworCisgICAgU09DS19DTEVBTlVQOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdHJhbnNsYXRlLmMgYi9hcHBzL3NubXB0cmFuc2xhdGUuYwppbmRleCAxZWY5MTkzLi4yYjE5Nzc3IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFuc2xhdGUuYworKysgYi9hcHBzL3NubXB0cmFuc2xhdGUuYwpAQCAtNTEsMTEgKzUxLDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+Ci0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9taWJfYXBpLmg+CkBAIC0yMDcsNyArMjAyLDggQEAKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KICAgICAgICAgICAgICAgICBjYXNlICdkJzoKICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAxOwotICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucygxKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NBVkVfTUlCX0RFU0NSUywgMSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgJ0InOgogICAgICAgICAgICAgICAgICAgICBmaW5kX2FsbCA9IDE7CkBAIC0yNjYsNyArMjYyLDggQEAKIAogICAgIGRvIHsKICAgICAgICAgbmFtZV9sZW5ndGggPSBNQVhfT0lEX0xFTjsKLSAgICAgICAgaWYgKHNubXBfZ2V0X3JhbmRvbV9hY2Nlc3MoKSkgeworICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorCQkJCSAgTkVUU05NUF9EU19MSUJfUkFORE9NX0FDQ0VTUykpIHsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAgICAgICAgICAgICBpZiAoIWdldF9ub2RlKGN1cnJlbnRfbmFtZSwgbmFtZSwgJm5hbWVfbGVuZ3RoKSkgewogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdHJhcC5jIGIvYXBwcy9zbm1wdHJhcC5jCmluZGV4IGQxNmQyZmEuLjdjMDg2ZGIgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXAuYworKysgYi9hcHBzL3NubXB0cmFwLmMKQEAgLTQxLDExICs0MSw3IEBACiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTgsOSArNTQsNiBAQAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTA0LDI2ICs5Nyw2IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLWluX2FkZHJfdAotcGFyc2VfYWRkcmVzcyhjaGFyICphZGRyZXNzKQotewotICAgIGluX2FkZHJfdCAgICAgICBhZGRyOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0KLSAgICBpZiAoKGFkZHIgPSBpbmV0X2FkZHIoYWRkcmVzcykpICE9IC0xKQotICAgICAgICByZXR1cm4gYWRkcjsKLSAgICBocCA9IGdldGhvc3RieW5hbWUoYWRkcmVzcyk7Ci0gICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGhvc3Q6ICVzXG4iLCBhZGRyZXNzKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtZW1jcHkoJnNhZGRyLnNpbl9hZGRyLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotICAgICAgICByZXR1cm4gc2FkZHIuc2luX2FkZHIuc19hZGRyOwotICAgIH0KLQotfQotCiBzdGF0aWMgdm9pZAogb3B0UHJvYyhpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGludCBvcHQpCiB7CkBAIC0xNzIsOSArMTQ1LDExIEBACiAgICAgaWYgKHN0cmNtcChwcm9nbmFtLCAic25tcGluZm9ybSIpID09IDApCiAgICAgICAgIGluZm9ybSA9IDE7CiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtMjk4LDcgKzI3MywxMSBAQAogICAgICAgICB9CiAgICAgICAgIGFnZW50ID0gYXJndlthcmddOwogICAgICAgICBpZiAoYWdlbnQgIT0gTlVMTCAmJiBzdHJsZW4oYWdlbnQpICE9IDApIHsKLSAgICAgICAgICAgICpwZHVfaW5fYWRkcl90ID0gcGFyc2VfYWRkcmVzcyhhZ2VudCk7CisgICAgICAgICAgICBpbnQgcmV0ID0gbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KGFnZW50LCBwZHVfaW5fYWRkcl90KTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGhvc3Q6ICVzXG4iLCBhZ2VudCk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICpwZHVfaW5fYWRkcl90ID0gZ2V0X215YWRkcigpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZC5jIGIvYXBwcy9zbm1wdHJhcGQuYwppbmRleCBiN2M0Y2U0Li5iY2UwZDQ3IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFwZC5jCisrKyBiL2FwcHMvc25tcHRyYXBkLmMKQEAgLTQwLDkgKzQwLDcgQEAKICNpZiBIQVZFX1NZU19XQUlUX0gKICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZWxzZQorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0lPX0gKQEAgLTEwMyw2ICsxMDEsNyBAQAogI2luY2x1ZGUgInNubXB0cmFwZF9sb2cuaCIKICNpbmNsdWRlICJzbm1wdHJhcGRfYXV0aC5oIgogI2luY2x1ZGUgIm5vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaCIKKyNpbmNsdWRlICJ0bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCIKICNpbmNsdWRlICJtaWJJSS92YWNtX2NvbmYuaCIKICNpZmRlZiBORVRTTk1QX0VNQkVEREVEX1BFUkwKICNpbmNsdWRlICJzbm1wX3BlcmwuaCIKQEAgLTEyNCw2ICsxMjMsOCBAQAogI2luY2x1ZGUgPHRjcGQuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKwogI2lmbmRlZiBCU0Q0XzMKICNkZWZpbmUgQlNENF8yCiAjZW5kaWYKQEAgLTEzOSwyMiArMTQwLDI3IEBACiAjZGVmaW5lIEZEX1pFUk8ocCkgICAgICBtZW1zZXQoKHApLCAwLCBzaXplb2YoKihwKSkpCiAjZW5kaWYKIAotY2hhciAgICAgICAgICAgKmxvZ2ZpbGUgPSAwOwotaW50ICAgICAgICAgICAgIFN5c2xvZ1RyYXAgPSAwOwotaW50ICAgICAgICAgICAgIEV2ZW50ID0gMDsKLWludCAgICAgICAgICAgICBkcm9wYXV0aCA9IDA7Ci1pbnQgICAgICAgICAgICAgcmVjb25maWcgPSAwOworY2hhciAgICAgICAgICAgKmxvZ2ZpbGUgPSBOVUxMOworZXh0ZXJuIGludCAgICAgIFN5c2xvZ1RyYXA7CitleHRlcm4gaW50ICAgICAgZHJvcGF1dGg7CitzdGF0aWMgaW50ICAgICAgcmVjb25maWcgPSAwOwogY2hhciAgICAgICAgICAgIGRkZWZhdWx0X3BvcnRbXSA9ICJ1ZHA6MTYyIjsJLyogRGVmYXVsdCBkZWZhdWx0IHBvcnQgKi8KIGNoYXIgICAgICAgICAgICpkZWZhdWx0X3BvcnQgPSBkZGVmYXVsdF9wb3J0OwogI2lmIEhBVkVfR0VUUElECiAgICAgRklMRSAgICAgICAgICAgKlBJRDsKICAgICBjaGFyICAgICAgICAgICAqcGlkX2ZpbGUgPSBOVUxMOwogI2VuZGlmCitleHRlcm4gdm9pZCBwYXJzZV9mb3JtYXQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOwogY2hhciAgICAgICAgICAgKnRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgPSBOVUxMOwogaW50ICAgICAgICAgICAgIGRvZm9yayA9IDE7CiAKIGV4dGVybiBpbnQgICAgICBuZXRzbm1wX3J1bm5pbmc7CiAKKyNpZmRlZiBORVRTTk1QX1VTRV9NWVNRTAorZXh0ZXJuIGludCAgICAgIG5ldHNubXBfbXlzcWxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBzbm1wdHJhcGRfcmVnaXN0ZXJfc3FsX2NvbmZpZ3MoIHZvaWQgKTsKKyNlbmRpZgorCiAvKgogICogVGhlc2UgZGVmaW5pdGlvbnMgaGFuZGxlIDQuMiBzeXN0ZW1zIHdpdGhvdXQgYWRkaXRpb25hbCBzeXNsb2cgZmFjaWxpdGllcy4KICAqLwpAQCAtMjA1LDIwICsyMTEsMTQgQEAKICNkZWZpbmUgU05NUFRSQVBEX1JVTk5JTkcgMQogI2RlZmluZSBTTk1QVFJBUERfU1RPUFBFRCAwCiBpbnQgICAgICAgICAgICAgdHJhcGRfc3RhdHVzID0gU05NUFRSQVBEX1NUT1BQRUQ7Ci0vKiBhcHBfbmFtZV9sb25nIHVzZWQgZm9yIEV2ZW50IExvZyAoc3lzbG9nKSwgU0NNLCByZWdpc3RyeSBldGMgKi8KKy8qIGFwcF9uYW1lX2xvbmcgdXNlZCBmb3IgU0NNLCByZWdpc3RyeSBldGMgKi8KIExQQ1RTVFIgICAgICAgICBhcHBfbmFtZV9sb25nID0gX1QoIk5ldC1TTk1QIFRyYXAgSGFuZGxlciIpOyAgICAgLyogQXBwbGljYXRpb24gTmFtZSAqLwogI2VuZGlmCiAKIGNvbnN0IGNoYXIgICAgICphcHBfbmFtZSA9ICJzbm1wdHJhcGQiOwogCi1zdHJ1Y3QgdGltZXZhbCAgTm93OwotCiB2b2lkICAgICAgICAgICAgdHJhcGRfdXBkYXRlX2NvbmZpZyh2b2lkKTsKIAotc3RhdGljIG9pZCAgICAgIHJpc2luZ0FsYXJtW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDIsIDEsIDEsIDMsIDEgfTsKLXN0YXRpYyBvaWQgICAgICBmYWxsaW5nQWxhcm1bXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMiwgMSwgMSwgMywgMiB9Owotc3RhdGljIG9pZCAgICAgIHVuYXZhaWxhYmxlQWxhcm1bXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMiwgMSwgMSwgMywgMyB9OwotCiAjaWZkZWYgV0lOMzJTRVJWSUNFCiB2b2lkICAgICAgICAgICAgU3RvcFNubXBUcmFwZCh2b2lkKTsKIGludCAgICAgICAgICAgICBTbm1wVHJhcGRNYWluKGludCBhcmdjLCBUQ0hBUiAqIGFyZ3ZbXSk7CkBAIC0yMzEsNzAgKzIzMSw2IEBACiBleHRlcm4gdm9pZCAgICAgICAgICAgIHN1YmFnZW50X2luaXQodm9pZCk7CiAjZW5kaWYKIAotdm9pZAotZXZlbnRfaW5wdXQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdnApCi17Ci0gICAgaW50ICAgICAgICAgICAgIGV2ZW50aWQgPSAwOwotICAgIG9pZCAgICAgICAgICAgICB2YXJpYWJsZVtNQVhfT0lEX0xFTl07Ci0gICAgdV9sb25nICAgICAgICAgIGRlc3RpcCA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIHNhbXBsZXR5cGUgPSAwOwotICAgIGludCAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIHRocmVzaG9sZCA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0gICAgaW50ICAgICAgICAgICAgIG52YXJzID0gMDsKLQotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdAkqdnAyID0gdnA7Ci0gICAgCi0gICAgb2lkICAgICAgICAgICAgKm9wID0gTlVMTDsKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgNSB2YXJpYWJsZXMuICBPdGhlcndpc2UsIGRvbid0IGJvdGhlciAqLwotICAgIGZvciAoaT0xOyBpIDw9IDU7IGkrKykgewotICAgICAgdnAyID0gdnAyLT5uZXh0X3ZhcmlhYmxlOwotICAgICAgaWYgKCF2cDIpIHsKLQludmFycyA9IC0xOwotCWJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAobnZhcnMgIT0gLTEpCi0gICAgewotICAgICAgdnAgPSB2cC0+bmV4dF92YXJpYWJsZTsgICAgIC8qIHNraXAgc3lzVXB0aW1lICovCi0gICAgICBpZiAodnAtPnZhbF9sZW4gIT0gc2l6ZW9mKHJpc2luZ0FsYXJtKSB8fAotCSAgIW1lbWNtcCh2cC0+dmFsLm9iamlkLCByaXNpbmdBbGFybSwgc2l6ZW9mKHJpc2luZ0FsYXJtKSkpCi0JZXZlbnRpZCA9IDE7Ci0gICAgICBlbHNlIGlmICh2cC0+dmFsX2xlbiAhPSBzaXplb2YocmlzaW5nQWxhcm0pIHx8Ci0JICAhbWVtY21wKHZwLT52YWwub2JqaWQsIGZhbGxpbmdBbGFybSwgc2l6ZW9mKGZhbGxpbmdBbGFybSkpKQotCWV2ZW50aWQgPSAyOwotICAgICAgZWxzZSBpZiAodnAtPnZhbF9sZW4gIT0gc2l6ZW9mKHJpc2luZ0FsYXJtKSB8fAotCSAgIW1lbWNtcCh2cC0+dmFsLm9iamlkLCB1bmF2YWlsYWJsZUFsYXJtLCBzaXplb2YodW5hdmFpbGFibGVBbGFybSkpKQotCWV2ZW50aWQgPSAzOwotICAgICAgZWxzZSB7Ci0JZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGV2ZW50XG4iKTsKLQlldmVudGlkID0gMDsKLSAgICAgIH0KLSAgICAgIAotICAgICAgdnAgPSB2cC0+bmV4dF92YXJpYWJsZTsKLSAgICAgIG1lbW1vdmUodmFyaWFibGUsIHZwLT52YWwub2JqaWQsIHZwLT52YWxfbGVuICogc2l6ZW9mKG9pZCkpOwotICAgICAgb3AgPSB2cC0+bmFtZSArIDIyOwotICAgICAgZGVzdGlwID0gMDsKLSAgICAgIGRlc3RpcCB8PSAoKm9wKyspIDw8IDI0OwotICAgICAgZGVzdGlwIHw9ICgqb3ArKykgPDwgMTY7Ci0gICAgICBkZXN0aXAgfD0gKCpvcCsrKSA8PCA4OwotICAgICAgZGVzdGlwIHw9ICpvcCsrOwotICAgICAgCi0gICAgICB2cCA9IHZwLT5uZXh0X3ZhcmlhYmxlOwotICAgICAgc2FtcGxldHlwZSA9ICp2cC0+dmFsLmludGVnZXI7Ci0gICAgICAKLSAgICAgIHZwID0gdnAtPm5leHRfdmFyaWFibGU7Ci0gICAgICB2YWx1ZSA9ICp2cC0+dmFsLmludGVnZXI7Ci0gICAgICAKLSAgICAgIHZwID0gdnAtPm5leHRfdmFyaWFibGU7Ci0gICAgICB0aHJlc2hvbGQgPSAqdnAtPnZhbC5pbnRlZ2VyOwotICAgIH0KLSAgICBwcmludGYoIiVkOiAweCUwMmxYICVkICVkICVkXG4iLCBldmVudGlkLCBkZXN0aXAsIHNhbXBsZXR5cGUsIHZhbHVlLAotCXRocmVzaG9sZCk7Ci19Ci0KIAogdm9pZAogdXNhZ2Uodm9pZCkKQEAgLTMxNSw5ICsyNTEsNyBAQAogICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIiAgLUNcdFx0XHRkbyBub3QgcmVhZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRcdFx0XHRkdW1wIHNlbnQgYW5kIHJlY2VpdmVkIFNOTVAgcGFja2V0c1xuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1EW1RPS0VOWywuLi5dXVx0XHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXRcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgIiAgLWVcdFx0XHRwcmludCBldmVudCAjIChyaXNpbmcvZmFsbGluZyBhbGFybSwgZXRjLilcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtRFtUT0tFTlssLi4uXV1cdFx0dHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgc3BlY2lmaWVkIFRPS0VOc1xuXHRcdFx0ICAgKEFMTCBnaXZlcyBleHRyZW1lbHkgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0KVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC1mXHRcdFx0ZG8gbm90IGZvcmsgZnJvbSB0aGUgc2hlbGxcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIiAgLUYgRk9STUFUXHRcdHVzZSBzcGVjaWZpZWQgZm9ybWF0IGZvciBsb2dnaW5nIHRvIHN0YW5kYXJkIGVycm9yXG4iKTsKQEAgLTM1NSw2ICsyODksNyBAQAogICAgIGZwcmludGYoc3RkZXJyLCAiICAtdiwgLS12ZXJzaW9uXHRcdGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuIik7CiAjaWYgZGVmaW5lZChVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFKSAmJiAhZGVmaW5lZChORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCkKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXggQUREUkVTU1x0XHR1c2UgQUREUkVTUyBhcyBBZ2VudFggYWRkcmVzc1xuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC1YXHRcdFx0ZG9uJ3QgYmVjb21lIGEgc3ViYWdlbnRcbiIpOwogI2VuZGlmCiAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAiICAtTyA8T1VUT1BUUz5cdFx0dG9nZ2xlIG9wdGlvbnMgY29udHJvbGxpbmcgb3V0cHV0IGRpc3BsYXlcbiIpOwpAQCAtMzYyLDExICsyOTcsNiBAQAogICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIiAgLUwgPExPR09QVFM+XHRcdHRvZ2dsZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdoZXJlIHRvIGxvZyB0b1xuIik7CiAgICAgc25tcF9sb2dfb3B0aW9uc191c2FnZSgiXHRcdFx0Iiwgc3RkZXJyKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuICBEZXByZWNhdGVkIG9wdGlvbnM6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLW8gRklMRVx0XHR1c2UgLUxmIDxGSUxFPiBpbnN0ZWFkXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLVBcdFx0XHR1c2UgLWYgLUxlICBpbnN0ZWFkXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXNcdFx0XHR1c2UgLUxzZCBpbnN0ZWFkXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLVMgZHxpfDAtN1x0XHR1c2UgLUxzIDxmYWNpbGl0eT4gaW5zdGVhZFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zODUsNiArMzE1LDcgQEAKICAgICBleHRlcm4gbmV0c25tcF9zZXNzaW9uICptYWluX3Nlc3Npb247CiAjZW5kaWYKICAgICBuZXRzbm1wX3J1bm5pbmcgPSAwOworCiAjaWZkZWYgV0lOMzJTRVJWSUNFCiAgICAgLyoKICAgICAgKiBJbiBjYXNlIG9mIHdpbmRvd3MsIHNlbGVjdCgpIGluIHJlY2VpdmUoKSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gCkBAIC01MTMsNiArNDQ0LDcgQEAKIHsKICAgICBpZiAoZGVmYXVsdF9wb3J0ICE9IGRkZWZhdWx0X3BvcnQpIHsKICAgICAgICAgZnJlZShkZWZhdWx0X3BvcnQpOworICAgICAgICBkZWZhdWx0X3BvcnQgPSBkZGVmYXVsdF9wb3J0OwogICAgIH0KIH0KIApAQCAtNTQyLDEzICs0NzQsMTAgQEAKIHZvaWQKIHBhcnNlX2NvbmZpZ19hZ2VudHVzZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgc3RydWN0IHBhc3N3ZCAgKmluZm87Ci0jZW5kaWYKLQogICAgIGlmIChjcHRyWzBdID09ICcjJykgewogICAgICAgICBjaGFyICAgICAgICAgICAqZWNwOwogICAgICAgICBpbnQgICAgICAgICAgICAgdWlkOworCiAgICAgICAgIHVpZCA9IHN0cnRvdWwoY3B0ciArIDEsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwpAQCAtNTU2LDU3ICs0ODUsNTEgQEAKIAkgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCB1aWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRwd25hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgaW5mby0+cHdfdWlkKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25maWdfcGVycm9yKCJVc2VyIG5vdCBmb3VuZCBpbiBwYXNzd2QgZGF0YWJhc2UiKTsKLSAgICB9Ci0gICAgZW5kcHdlbnQoKTsKKyAgICAgICAgc3RydWN0IHBhc3N3ZCAqaW5mbzsKKworICAgICAgICBpbmZvID0gZ2V0cHduYW0oY3B0cik7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCBpbmZvLT5wd191aWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJVc2VyIG5vdCBmb3VuZCBpbiBwYXNzd2QgZGF0YWJhc2UiKTsKKyAgICAgICAgZW5kcHdlbnQoKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZAogcGFyc2VfY29uZmlnX2FnZW50Z3JvdXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVEdSTkFNKSAmJiBkZWZpbmVkKEhBVkVfR1JQX0gpCi0gICAgc3RydWN0IGdyb3VwICAgKmluZm87Ci0jZW5kaWYKLQogICAgIGlmIChjcHRyWzBdID09ICcjJykgewogICAgICAgICBjaGFyICAgICAgICAgICAqZWNwOwogICAgICAgICBpbnQgICAgICAgICAgICAgZ2lkID0gc3RydG91bChjcHRyICsgMSwgJmVjcCwgMTApOworCiAgICAgICAgIGlmICgqZWNwICE9IDApIHsKICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkJhZCBudW1iZXIiKTsKIAl9IGVsc2UgewogICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRCwgZ2lkKTsKIAl9Ci0gICAgfQogI2lmIGRlZmluZWQoSEFWRV9HRVRHUk5BTSkgJiYgZGVmaW5lZChIQVZFX0dSUF9IKQotICAgIGVsc2UgaWYgKChpbmZvID0gZ2V0Z3JuYW0oY3B0cikpICE9IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAotCQkJICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBpbmZvLT5ncl9naWQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIkdyb3VwIG5vdCBmb3VuZCBpbiBncm91cCBkYXRhYmFzZSIpOworICAgICAgICBzdHJ1Y3QgZ3JvdXAgICAqaW5mbzsKKworICAgICAgICBpbmZvID0gZ2V0Z3JuYW0oY3B0cik7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRCwgaW5mby0+Z3JfZ2lkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiR3JvdXAgbm90IGZvdW5kIGluIGdyb3VwIGRhdGFiYXNlIik7CisgICAgICAgIGVuZGdyZW50KCk7CisjZW5kaWYKICAgICB9Ci0gICAgZW5kcHdlbnQoKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKIHZvaWQKLXBhcnNlX2NvbmZpZ19sb2dPcHRpb24oY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCi17Ci0gIGludCBteV9hcmdjID0gMCA7Ci0gIGNoYXIgKipteV9hcmd2ID0gTlVMTDsKLQotICBzbm1wX2xvZ19vcHRpb25zKCBjcHRyLCBteV9hcmdjLCBteV9hcmd2ICk7Ci19Ci0KLXZvaWQKIHBhcnNlX2NvbmZpZ19kb05vdEZvcmsoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAgIGlmIChuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4oY3B0cikgPT0gMSkKQEAgLTYxNCwxMyArNTM3LDYgQEAKIH0KIAogdm9pZAotcGFyc2VfY29uZmlnX3ByaW50RXZlbnROdW1iZXJzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQotewotICBpZiAobmV0c25tcF9kc19wYXJzZV9ib29sZWFuKGNwdHIpID09IDEpCi0gICAgRXZlbnQrKzsKLX0KLQotdm9pZAogcGFyc2VfY29uZmlnX2lnbm9yZUF1dGhGYWlsdXJlKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewogICBpZiAobmV0c25tcF9kc19wYXJzZV9ib29sZWFuKGNwdHIpID09IDEpCkBAIC02MzksNiArNTU1LDc0IEBACiAgIH0KIH0KIAorc3RhdGljIHZvaWQKK3NubXB0cmFwZF9tYWluX2xvb3Aodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgY291bnQsIG51bWZkcywgYmxvY2s7CisgICAgZmRfc2V0ICAgICAgICAgIHJlYWRmZHMsd3JpdGVmZHMsZXhjZXB0ZmRzOworICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lb3V0LCAqdHZwOworCisgICAgd2hpbGUgKG5ldHNubXBfcnVubmluZykgeworICAgICAgICBpZiAocmVjb25maWcpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIElmIHdlIGFyZSBsb2dnaW5nIHRvIGEgZmlsZSwgcmVjZWlwdCBvZiBTSUdIVVAgYWxzbworICAgICAgICAgICAgICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBsb2cgZmlsZSBzaG91bGQgYmUgY2xvc2VkIGFuZAorICAgICAgICAgICAgICAgICAqIHJlLW9wZW5lZC4gIFRoaXMgaXMgdXNlZnVsIGZvciB1c2VycyB0aGF0IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgKiByb3RhdGUgbG9ncyBpbiBhIG1vcmUgcHJlZGljdGFibGUgbWFubmVyLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0KCk7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJORVQtU05NUCB2ZXJzaW9uICVzIHJlc3RhcnRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOworICAgICAgICAgICAgdHJhcGRfdXBkYXRlX2NvbmZpZygpOworICAgICAgICAgICAgaWYgKHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIpIHsKKyAgICAgICAgICAgICAgICBwYXJzZV9mb3JtYXQoIE5VTEwsIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlY29uZmlnID0gMDsKKyAgICAgICAgfQorICAgICAgICBudW1mZHMgPSAwOworICAgICAgICBGRF9aRVJPKCZyZWFkZmRzKTsKKyAgICAgICAgRkRfWkVSTygmd3JpdGVmZHMpOworICAgICAgICBGRF9aRVJPKCZleGNlcHRmZHMpOworICAgICAgICBibG9jayA9IDA7CisgICAgICAgIHR2cCA9ICZ0aW1lb3V0OworICAgICAgICB0aW1lcmNsZWFyKHR2cCk7CisgICAgICAgIHR2cC0+dHZfc2VjID0gNTsKKyAgICAgICAgc25tcF9zZWxlY3RfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgdHZwLCAmYmxvY2spOworICAgICAgICBpZiAoYmxvY2sgPT0gMSkKKyAgICAgICAgICAgIHR2cCA9IE5VTEw7ICAgICAgICAgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUgorICAgICAgICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8oJm51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCisgICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcywgdHZwKTsKKyAgICAgICAgaWYgKGNvdW50ID4gMCkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIKKyAgICAgICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzKCZjb3VudCwgJnJlYWRmZHMsICZ3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNlcHRmZHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUiAqLworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIGV2ZW50cyBhZnRlciBleHRlcm5hbCBldmVudHMsIHRoZW4KKyAgICAgICAgICAgICAqIHRyeSBTTk1QIGV2ZW50cy4gKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBzbm1wX3JlYWQoJnJlYWRmZHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChjb3VudCkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIHNubXBfdGltZW91dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigic2VsZWN0Iik7CisgICAgICAgICAgICAgICAgbmV0c25tcF9ydW5uaW5nID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZWxlY3QgcmV0dXJuZWQgJWRcbiIsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3J1bm5pbmcgPSAwOworICAgICAgICAgICAgfQorCX0KKwlydW5fYWxhcm1zKCk7CisgICAgfQorfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogbWFpbiAtIE5vbiBXaW5kb3dzCkBAIC02NjMsMjAgKzY0NywxOCBAQAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogI2VuZGlmCiB7Ci0gICAgY2hhciAgICAgICAgICAgIG9wdGlvbnNbMTI4XSA9ICJhQWM6Q2REOjplZkY6ZzpoSEk6TDptOk06bm86TzpQcXNTOnR1OnZ4Oi06IjsKKyAgICBjaGFyICAgICAgICAgICAgb3B0aW9uc1sxMjhdID0gImFBYzpDZEQ6OmVmRjpnOmhISTpMOm06TTpubzpPOlB0dTp2eDpYLToiOwogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc19saXN0ID0gTlVMTCwgKnNzID0gTlVMTDsKICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgYXJnLCBpID0gMCwgZGVwbXNnID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgYXJnLCBpID0gMDsKICAgICBpbnQgICAgICAgICAgICAgdWlkID0gMCwgZ2lkID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgY291bnQsIG51bWZkcywgYmxvY2s7Ci0gICAgZmRfc2V0ICAgICAgICAgIHJlYWRmZHMsd3JpdGVmZHMsZXhjZXB0ZmRzOwotICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lb3V0LCAqdHZwOwogICAgIGNoYXIgICAgICAgICAgICpjcCwgKmxpc3Rlbl9wb3J0cyA9IE5VTEw7CiAjaWYgZGVmaW5lZChVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFKSAmJiAhZGVmaW5lZChORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCkKICAgICBpbnQgICAgICAgICAgICAgYWdlbnR4X3N1YmFnZW50ID0gMTsKICNlbmRpZgogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAKKwogI2lmbmRlZiBXSU4zMgogICAgIC8qCiAgICAgICogY2xvc2UgYWxsIG5vbi1zdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIHdlIG1heSBoYXZlCkBAIC02OTMsNiArNjc1LDcgQEAKICNpZmRlZiBTSUdIVVAKICAgICBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKTsgICAvKiBkbyBub3QgdGVybWluYXRlIG9uIGVhcmx5IFNJR0hVUCAqLwogI2VuZGlmCisKICNpZmRlZiBTSUdJTlQKICAgICBzaWduYWwoU0lHSU5ULCB0ZXJtX2hhbmRsZXIpOwogI2VuZGlmCkBAIC03MDAsMTUgKzY4MywxNiBAQAogICAgIHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsgICAvKiAnSW5saW5lJyBmYWlsdXJlIG9mIHdheXdhcmQgcmVhZGVycyAqLwogI2VuZGlmCiAKLSNpZmRlZiBTSUdIVVAKLSAgICBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKTsgICAvKiBkbyBub3QgdGVybWluYXRlIG9uIGVhcmx5IFNJR0hVUCAqLwotI2VuZGlmCi0KICAgICAvKgogICAgICAqIHJlZ2lzdGVyIG91ciBjb25maWd1cmF0aW9uIGhhbmRsZXJzIG5vdyBzbyAtSCBwcm9wZXJseSBkaXNwbGF5cyB0aGVtIAogICAgICAqLwogICAgIHNubXB0cmFwZF9yZWdpc3Rlcl9jb25maWdzKCApOworI2lmZGVmIE5FVFNOTVBfVVNFX01ZU1FMCisgICAgc25tcHRyYXBkX3JlZ2lzdGVyX3NxbF9jb25maWdzKCApOworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAgICAgaW5pdF91c21fY29uZiggInNubXB0cmFwZCIgKTsKKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgInNubXBUcmFwZEFkZHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3RyYXBkX2FkZHJlc3MsIGZyZWVfdHJhcGRfYWRkcmVzcywgInN0cmluZyIpOwogCkBAIC03MjUsMjcgKzcwOSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19hZ2VudGdyb3VwLCBOVUxMLCAiZ3JvdXBpZCIpOwogI2VuZGlmCiAgICAgCi0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXB0cmFwZCIsICJsb2dPcHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19sb2dPcHRpb24sIE5VTEwsICJzdHJpbmciKTsKLQogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAiZG9Ob3RGb3JrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9jb25maWdfZG9Ob3RGb3JrLCBOVUxMLCAiKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiKTsKIAotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAicHJpbnRFdmVudE51bWJlcnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19wcmludEV2ZW50TnVtYmVycywgTlVMTCwgIigxfHllc3x0cnVlfDB8bm98ZmFsc2UpIik7Ci0KICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgImlnbm9yZUF1dGhGYWlsdXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9jb25maWdfaWdub3JlQXV0aEZhaWx1cmUsIE5VTEwsICIoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIpOwogCiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXB0cmFwZCIsICJvdXRwdXRPcHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19vdXRwdXRPcHRpb24sIE5VTEwsICJzdHJpbmciKTsKIAotI2lmZGVmIFdJTjMyCi0gICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKLSNlbHNlCi0gICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKLSNlbmRpZgotCiAgICAgLyoKICAgICAgKiBBZGQgc29tZSBvcHRpb25zIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4gIAogICAgICAqLwpAQCAtNzUzLDExICs3MjUsMTMgQEAKICAgICBzdHJjYXQob3B0aW9ucywgInA6Iik7CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAjaWZkZWYgV0lOMzIKICAgICBzbm1wX2xvZ19zeXNsb2duYW1lKGFwcF9uYW1lX2xvbmcpOwogI2Vsc2UKICAgICBzbm1wX2xvZ19zeXNsb2duYW1lKGFwcF9uYW1lKTsKICNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogICAgIC8qCiAgICAgICogTm93IHByb2Nlc3Mgb3B0aW9ucyBub3JtYWxseS4gIApAQCAtODAzLDcgKzc3Nyw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIHNubXBfc2V0X2R1bXBfcGFja2V0KDEpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCwgMSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdEJzoKQEAgLTgxMSwxNyArNzg2LDI1IEBACiAgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlICdlJzoKLSAgICAgICAgICAgIEV2ZW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgIGRvZm9yayA9IDA7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgIGlmIChvcHRhcmcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgaWYgKCggc3RybmNtcCggb3B0YXJnLCAicHJpbnQiLCAgIDUgKSA9PSAwICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJuY21wKCBvcHRhcmcsICJzeXNsb2ciLCAgNiApID09IDAgKSB8fAorICAgICAgICAgICAgICAgICAgICAoIHN0cm5jbXAoIG9wdGFyZywgImV4ZWN1dGUiLCA3ICkgPT0gMCApKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIE5ldyBzdHlsZTogInR5cGU9Zm9ybWF0IiAqLworICAgICAgICAgICAgICAgICAgICB0cmFwMV9mbXRfc3RyX3JlbWVtYmVyID0gc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGNwID0gc3RyY2hyKCB0cmFwMV9mbXRfc3RyX3JlbWVtYmVyLCAnPScgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNwKQorICAgICAgICAgICAgICAgICAgICAgICAgKmNwID0gJyAnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIE9sZCBzdHlsZTogaW1wbGljaXRseSAicHJpbnQ9Zm9ybWF0IiAqLworICAgICAgICAgICAgICAgICAgICB0cmFwMV9mbXRfc3RyX3JlbWVtYmVyID0gbWFsbG9jKHN0cmxlbihvcHRhcmcpICsgNyk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIsICJwcmludCAlcyIsIG9wdGFyZyApOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwpAQCAtODY3LDUyICs4NTAsOCBAQAogCiAJY2FzZSAnUyc6CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1TIG9wdGlvbiBpcyBkZXByZWNhdGVkOyB1c2UgLUxzIDxmYWNpbGl0eT4gaW5zdGVhZFxuIik7Ci0gICAgICAgICAgICBkZXBtc2cgPSAxOwotICAgICAgICAgICAgaWYgKG9wdGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICgqb3B0YXJnKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0RBRU1PTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnSSc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0lORk87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzEnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzInOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzMnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDM7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzQnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzUnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzYnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDY7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJzcnOgotICAgICAgICAgICAgICAgICAgICBGYWNpbGl0eSA9IExPR19MT0NBTDc7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBzeXNsb2cgZmFjaWxpdHk6IC1TJWNcbiIsKm9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIHN5c2xvZyBmYWNpbGl0eSBzcGVjaWZpZWRcbiIpOwotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1TIG9wdGlvbiBoYXMgYmVlbiB3aXRoZHJhd247IHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdtJzoKQEAgLTk0MCwxNiArODc5LDggQEAKIAogICAgICAgICBjYXNlICdvJzoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogLW8gb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSAtTGYgPGZpbGU+IGluc3RlYWRcbiIpOwotICAgICAgICAgICAgaWYgKG9wdGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbG9nZmlsZSA9IG9wdGFyZzsKLSAgICAgICAgICAgICAgICBzbm1wX2VuYWJsZV9maWxlbG9nKG9wdGFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQRU5EX0xPR0ZJTEVTKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1vIG9wdGlvbiBoYXMgYmVlbiB3aXRoZHJhd247IHVzZSAtTGYgPGZpbGU+IGluc3RlYWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ08nOgpAQCAtOTgyLDIwICs5MTMsMTQgQEAKIAogICAgICAgICBjYXNlICdQJzoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogLVAgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSAtZiAtTGUgaW5zdGVhZFxuIik7Ci0gICAgICAgICAgICBkb2ZvcmsgPSAwOwotICAgICAgICAgICAgc25tcF9lbmFibGVfc3RkZXJybG9nKCk7CisgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAtUCBvcHRpb24gaGFzIGJlZW4gd2l0aGRyYXduOyB1c2UgLWYgLUxlIGluc3RlYWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAtcyBvcHRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIC1Mc2QgaW5zdGVhZFxuIik7Ci0gICAgICAgICAgICBkZXBtc2cgPSAxOwotI2lmZGVmIFdJTjMyCi0gICAgICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoYXBwX25hbWVfbG9uZywgRmFjaWxpdHkpOwotI2Vsc2UKLSAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChhcHBfbmFtZSwgRmFjaWxpdHkpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAtcyBvcHRpb24gaGFzIGJlZW4gd2l0aGRyYXduOyB1c2UgLUxzZCBpbnN0ZWFkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICd0JzoKQEAgLTEwMDgsMTkgKzkzMywxOCBAQAogICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICplY3A7CiAKICAgICAgICAgICAgICAgICB1aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVjcCwgMTApOworI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAogICAgICAgICAgICAgICAgIGlmICgqZWNwKSB7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgICppbmZvOworCiAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBnZXRwd25hbShvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbykgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gaW5mby0+cHdfdWlkOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aWQgPSBpbmZvID8gaW5mby0+cHdfdWlkIDogLTE7CisgICAgICAgICAgICAgICAgICAgIGVuZHB3ZW50KCk7CisgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCB1c2VyIGlkOiAlc1xuIiwgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICi0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgICAgIGlmICh1aWQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIHVzZXIgaWQ6ICVzXG4iLCBvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIHVpZCk7CkBAIC0xMDM2LDYgKzk2MCw3IEBACiAgICAgICAgICAgICBleGl0KDApOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQogICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgIGlmIChvcHRhcmcgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELApAQCAtMTA0Niw2ICs5NzEsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgIGFnZW50eF9zdWJhZ2VudCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3B0aW9uOiAtJWNcbiIsIGFyZyk7CiAgICAgICAgICAgICB1c2FnZSgpOwpAQCAtMTA4NywzNCArMTAxNywyNSBAQAogICAgICAqIERvbid0IHRyeSB0aGlzIGF0IGhvbWUsIGNoaWxkcmVuIQogICAgICAqLwogICAgIGlmICgwID09IHNubXBfZ2V0X2RvX2xvZ2dpbmcoKSkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9QUkVfSEFORExFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nX2hhbmRsZXIpOwogICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nKCk7CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTworICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX2dsb2JhbF90cmFwaGFuZGxlcihORVRTTk1QVFJBUERfUFJFX0hBTkRMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2hhbmRsZXIpOworICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKKyAgICAgICAgc25tcF9lbmFibGVfc3RkZXJyKCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9QUkVfSEFORExFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGFuZGxlcik7CiAgICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfTE9HOwogICAgIH0KIAotICAgIGlmIChFdmVudCkgewotICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX3RyYXBoYW5kbGVyKGV2ZW50X2hhbmRsZXIsIHJpc2luZ0FsYXJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgocmlzaW5nQWxhcm0pKTsKLSAgICAgICAgdHJhcGgtPmF1dGh0eXBlcyA9IFRSQVBfQVVUSF9MT0c7Ci0KLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF90cmFwaGFuZGxlcihldmVudF9oYW5kbGVyLCBmYWxsaW5nQWxhcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChmYWxsaW5nQWxhcm0pKTsKLSAgICAgICAgdHJhcGgtPmF1dGh0eXBlcyA9IFRSQVBfQVVUSF9MT0c7Ci0KLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF90cmFwaGFuZGxlcihldmVudF9oYW5kbGVyLCB1bmF2YWlsYWJsZUFsYXJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodW5hdmFpbGFibGVBbGFybSkpOwotICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKLQkvKiBYWFggLSBtaWdodCBiZSB3b3J0aCBzZXR0aW5nIHNvbWUgIm1hZ2ljIGRhdGEiCi0JICogaW4gdGhlIHRyYXBoYW5kbGVyIHN0cnVjdHVyZSB0aGF0ICdldmVudF9oYW5kbGVyJwotCSAqIGNhbiB1c2UgdG8gYXZvaWQgY2hlY2tpbmcgdGhlIHRyYXAgT0lEIHZhbHVlcy4KLQkgKi8KLSAgICB9Ci0KICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQogICAgIC8qCiAgICAgICogd2UncmUgYW4gYWdlbnR4IHN1YmFnZW50PyAKQEAgLTExNDUsNiArMTA2Niw5IEBACiAgICAgaW5pdF9hZ2VudCgic25tcHRyYXBkIik7CiAKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORworICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX3NubXBFbmdpbmVfc2NhbGFyc19jb250ZXh0KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAqLwogICAgIC8qCiAgICAgICogaW5pdGlhbGl6ZSBsb2NhbCBtb2R1bGVzIAogICAgICAqLwpAQCAtMTE4NSw2ICsxMTA5LDkgQEAKICAgICAgICAgZXh0ZXJuIHZvaWQgaW5pdF9yZWdpc3Rlcl9uc1ZhY21fY29udGV4dChjb25zdCBjaGFyICopOwogI2VuZGlmCiAjaWZkZWYgVVNJTkdfU05NUFYzX1VTTVVTRVJfTU9EVUxFCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisgICAgICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGluaXRfcmVnaXN0ZXJfdXNtVXNlcl9jb250ZXh0KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAqLwogICAgICAgICBleHRlcm4gdm9pZCBpbml0X3JlZ2lzdGVyX3VzbVVzZXJfY29udGV4dChjb25zdCBjaGFyICopOwogICAgICAgICAvKiByZWdpc3RlciBvdXJzZWx2ZXMgYXMgaGF2aW5nIGEgVVNNIHVzZXIgZGF0YWJhc2UgKi8KICAgICAgICAgaW5pdF9yZWdpc3Rlcl91c21Vc2VyX2NvbnRleHQoInNubXB0cmFwZCIpOwpAQCAtMTE5Myw2ICsxMTIwLDkgQEAKICAgICAgICAgLyogcmVnaXN0ZXIgbmV0LXNubXAgdmFjbSBleHRlbnNpb25zICovCiAgICAgICAgIGluaXRfcmVnaXN0ZXJfbnNWYWNtX2NvbnRleHQoInNubXB0cmFwZCIpOwogI2VuZGlmCisjaWZkZWYgVVNJTkdfVExTVE1fTUlCX1NOTVBUTFNUTUNFUlRUT1RTTlRBQkxFX01PRFVMRQorICAgICAgICBpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlX2NvbnRleHQoInNubXB0cmFwZCIpOworI2VuZGlmCiAgICAgfQogI2VuZGlmCiAKQEAgLTEyMTksMTAgKzExNDksNyBAQAogI2VuZGlmCiAKICAgICBpZiAodHJhcDFfZm10X3N0cl9yZW1lbWJlcikgewotICAgICAgICBmcmVlX3RyYXAxX2ZtdCgpOwotICAgICAgICBmcmVlX3RyYXAyX2ZtdCgpOwotICAgICAgICBwcmludF9mb3JtYXQxID0gc3RyZHVwKHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIpOwotICAgICAgICBwcmludF9mb3JtYXQyID0gc3RyZHVwKHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIpOworICAgICAgICBwYXJzZV9mb3JtYXQoIE5VTEwsIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgKTsKICAgICB9CiAKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTEyMzgsMTMgKzExNjUsNzEgQEAKICAgICAgKiBpZiBubyBsb2dnaW5nIG9wdGlvbnMgb24gY29tbWFuZCBsaW5lIG9yIGluIGNvbmYgZmlsZXMsIHVzZSBzeXNsb2cKICAgICAgKi8KICAgICBpZiAoMCA9PSBzbm1wX2dldF9kb19sb2dnaW5nKCkpIHsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogI2lmZGVmIFdJTjMyCiAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChhcHBfbmFtZV9sb25nLCBGYWNpbGl0eSk7CiAjZWxzZQogICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoYXBwX25hbWUsIEZhY2lsaXR5KTsKICNlbmRpZiAgICAgICAgCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIH0KIAorICAgIGlmIChsaXN0ZW5fcG9ydHMpCisgICAgICAgIGNwID0gbGlzdGVuX3BvcnRzOworICAgIGVsc2UKKyAgICAgICAgY3AgPSBkZWZhdWx0X3BvcnQ7CisKKyAgICB3aGlsZSAoY3AgIT0gTlVMTCkgeworICAgICAgICBjaGFyICpzZXAgPSBzdHJjaHIoY3AsICcsJyk7CisKKyAgICAgICAgaWYgKHNlcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAqc2VwID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zcG9ydCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyKCJzbm1wdHJhcCIsIGNwKTsKKyAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3Qgb3BlbiAlcyAtLSBlcnJubyAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNwLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHNubXB0cmFwZF9jbG9zZV9zZXNzaW9ucyhzZXNzX2xpc3QpOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNzID0gc25tcHRyYXBkX2FkZF9zZXNzaW9uKHRyYW5zcG9ydCk7CisgICAgICAgICAgICBpZiAoc3MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogU2hvdWxkbid0IGhhcHBlbj8gIFdlIGhhdmUgYWxyZWFkeSBvcGVuZWQgdGhlIHRyYW5zcG9ydAorICAgICAgICAgICAgICAgICAqIHN1Y2Nlc3NmdWxseSBzbyB3aGF0IGNvdWxkIGhhdmUgZ29uZSB3cm9uZz8gIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNubXB0cmFwZF9jbG9zZV9zZXNzaW9ucyhzZXNzX2xpc3QpOworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBvcGVuIHNubXAgLSAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNzLT5uZXh0ID0gc2Vzc19saXN0OworICAgICAgICAgICAgICAgIHNlc3NfbGlzdCA9IHNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUHJvY2VzcyBuZXh0IGxpc3RlbiBhZGRyZXNzLCBpZiB0aGVyZSBpcyBvbmUuICAKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKHNlcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAqc2VwID0gJywnOworICAgICAgICAgICAgY3AgPSBzZXAgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3AgPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIFNOTVBfRlJFRShsaXN0ZW5fcG9ydHMpOyAvKiBkb25lIHdpdGggdGhlbSAqLworCisjaWZkZWYgTkVUU05NUF9VU0VfTVlTUUwKKyAgICBpZiggbmV0c25tcF9teXNxbF9pbml0KCkgKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTXlTUUwgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisjZW5kaWYKKwogI2lmbmRlZiBXSU4zMgogICAgIC8qCiAgICAgICogZm9yayB0aGUgcHJvY2VzcyB0byB0aGUgYmFja2dyb3VuZCBpZiB3ZSBhcmUgbm90IHByaW50aW5nIHRvIHN0ZGVyciAKQEAgLTEyOTQsNTggKzEyNzksNiBAQAogI2VuZGlmCiAKICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIk5FVC1TTk1QIHZlcnNpb24gJXNcbiIsIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7Ci0gICAgaWYgKGRlcG1zZykgewotICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIi1zIGFuZCAtUyBvcHRpb25zIGFyZSBkZXByZWNhdGVkOyB1c2UgLUxzIDxmYWNpbGl0eT4gaW5zdGVhZFxuIik7Ci0gICAgfQotICAgIAotICAgIGlmIChsaXN0ZW5fcG9ydHMpCi0gICAgICAgIGNwID0gbGlzdGVuX3BvcnRzOwotICAgIGVsc2UKLSAgICAgICAgY3AgPSBkZWZhdWx0X3BvcnQ7Ci0KLSAgICB3aGlsZSAoY3AgIT0gTlVMTCkgewotICAgICAgICBjaGFyICpzZXAgPSBzdHJjaHIoY3AsICcsJyk7Ci0KLSAgICAgICAgaWYgKHNlcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqc2VwID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHRyYW5zcG9ydCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyKCJzbm1wdHJhcCIsIGNwKTsKLSAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3Qgb3BlbiAlcyAtLSBlcnJubyAlZCAoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGNwLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHNubXB0cmFwZF9jbG9zZV9zZXNzaW9ucyhzZXNzX2xpc3QpOwotICAgICAgICAgICAgU09DS19DTEVBTlVQOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNzID0gc25tcHRyYXBkX2FkZF9zZXNzaW9uKHRyYW5zcG9ydCk7Ci0gICAgICAgICAgICBpZiAoc3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogU2hvdWxkbid0IGhhcHBlbj8gIFdlIGhhdmUgYWxyZWFkeSBvcGVuZWQgdGhlIHRyYW5zcG9ydAotICAgICAgICAgICAgICAgICAqIHN1Y2Nlc3NmdWxseSBzbyB3aGF0IGNvdWxkIGhhdmUgZ29uZSB3cm9uZz8gIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHNubXB0cmFwZF9jbG9zZV9zZXNzaW9ucyhzZXNzX2xpc3QpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodHJhbnNwb3J0KTsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3Qgb3BlbiBzbm1wIC0gJXMiLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIFNPQ0tfQ0xFQU5VUDsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcy0+bmV4dCA9IHNlc3NfbGlzdDsKLSAgICAgICAgICAgICAgICBzZXNzX2xpc3QgPSBzczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFByb2Nlc3MgbmV4dCBsaXN0ZW4gYWRkcmVzcywgaWYgdGhlcmUgaXMgb25lLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChzZXAgIT0gTlVMTCkgewotICAgICAgICAgICAgKnNlcCA9ICcsJzsKLSAgICAgICAgICAgIGNwID0gc2VwICsgMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNwID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KIAogICAgIC8qCiAgICAgICogaWdub3JlIGVhcmx5IHNpZ2h1cCBkdXJpbmcgc3RhcnR1cApAQCAtMTM4OCw2NSArMTMyMSw4IEBACiAjaWZkZWYgV0lOMzJTRVJWSUNFCiAgICAgdHJhcGRfc3RhdHVzID0gU05NUFRSQVBEX1JVTk5JTkc7CiAjZW5kaWYKLSAgICB3aGlsZSAobmV0c25tcF9ydW5uaW5nKSB7Ci0gICAgICAgIGlmIChyZWNvbmZpZykgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogSWYgd2UgYXJlIGxvZ2dpbmcgdG8gYSBmaWxlLCByZWNlaXB0IG9mIFNJR0hVUCBhbHNvCi0gICAgICAgICAgICAgICAgICogaW5kaWNhdGVzIHRoZSB0aGUgbG9nIGZpbGUgc2hvdWxkIGJlIGNsb3NlZCBhbmQKLSAgICAgICAgICAgICAgICAgKiByZS1vcGVuZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgdXNlcnMgdGhhdCB3YW50IHRvCi0gICAgICAgICAgICAgICAgICogcm90YXRlIGxvZ3MgaW4gYSBtb3JlIHByZWRpY3RhYmxlIG1hbm5lci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydCgpOwotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLCAiTkVULVNOTVAgdmVyc2lvbiAlcyByZXN0YXJ0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICAgICAgICAgIHRyYXBkX3VwZGF0ZV9jb25maWcoKTsKLSAgICAgICAgICAgIGlmICh0cmFwMV9mbXRfc3RyX3JlbWVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgZnJlZV90cmFwMV9mbXQoKTsKLSAgICAgICAgICAgICAgICBmcmVlX3RyYXAyX2ZtdCgpOwotICAgICAgICAgICAgICAgIHByaW50X2Zvcm1hdDEgPSBzdHJkdXAodHJhcDFfZm10X3N0cl9yZW1lbWJlcik7Ci0gICAgICAgICAgICAgICAgcHJpbnRfZm9ybWF0MiA9IHN0cmR1cCh0cmFwMV9mbXRfc3RyX3JlbWVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlY29uZmlnID0gMDsKLSAgICAgICAgfQotICAgICAgICBudW1mZHMgPSAwOwotICAgICAgICBGRF9aRVJPKCZyZWFkZmRzKTsKLSAgICAgICAgRkRfWkVSTygmd3JpdGVmZHMpOwotICAgICAgICBGRF9aRVJPKCZleGNlcHRmZHMpOwotICAgICAgICBibG9jayA9IDA7Ci0gICAgICAgIHR2cCA9ICZ0aW1lb3V0OwotICAgICAgICB0aW1lcmNsZWFyKHR2cCk7Ci0gICAgICAgIHR2cC0+dHZfc2VjID0gNTsKLSAgICAgICAgc25tcF9zZWxlY3RfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgdHZwLCAmYmxvY2spOwotICAgICAgICBpZiAoYmxvY2sgPT0gMSkKLSAgICAgICAgICAgIHR2cCA9IE5VTEw7ICAgICAgICAgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCi0gICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKLSAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzLCB0dnApOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJk5vdywgMCk7Ci0gICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzKCZjb3VudCwgJnJlYWRmZHMsICZ3cml0ZWZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNlcHRmZHMpOwotICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIGV2ZW50cyBhZnRlciBleHRlcm5hbCBldmVudHMsIHRoZW4KLSAgICAgICAgICAgICAqIHRyeSBTTk1QIGV2ZW50cy4gKi8KLSAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICBzbm1wX3JlYWQoJnJlYWRmZHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN3aXRjaCAoY291bnQpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBzbm1wX3RpbWVvdXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgLTE6Ci0gICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNlbGVjdCIpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfcnVubmluZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2VsZWN0IHJldHVybmVkICVkXG4iLCBjb3VudCk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9ydW5uaW5nID0gMDsKLSAgICAgICAgICAgIH0KLQlydW5fYWxhcm1zKCk7Ci0gICAgfQorCisgICAgc25tcHRyYXBkX21haW5fbG9vcCgpOwogCiAgICAgaWYgKHNubXBfZ2V0X2RvX2xvZ2dpbmcoKSkgewogICAgICAgICBzdHJ1Y3QgdG0gICAgICAqdG07CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZF9hdXRoLmMgYi9hcHBzL3NubXB0cmFwZF9hdXRoLmMKaW5kZXggMTE5ZGU1OC4uYmUyMWU1ZSAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wdHJhcGRfYXV0aC5jCisrKyBiL2FwcHMvc25tcHRyYXBkX2F1dGguYwpAQCAtNCwxMSArNCwxMyBAQAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlCisjaWYgSEFWRV9TWVNfVFlQRVNfSAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCiAKQEAgLTEyNiw4ICsxMjgsMTAgQEAKICAgICAgICAgLyogcGFzcyB0aGUgUERVIHRvIHRoZSBWQUNNIHJvdXRpbmUgZm9yIGhhbmRsaW5nIGF1dGhvcml6YXRpb24gKi8KICAgICAgICAgREVCVUdNU0dUTCgoInNubXB0cmFwZDphdXRoIiwgIkNhbGxpbmcgVkFDTSBmb3IgY2hlY2tpbmcgcGhhc2UgJWQ6JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGksIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoVkFDTV9WSUVXX0VOVU1fTkFNRSwgaSkpKTsKLSAgICAgICAgaWYgKHZhY21fY2hlY2tfdmlldyhuZXdwZHUsIHZhci0+dmFsLm9iamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbi9zaXplb2Yob2lkKSwgMCwgaSkgPT0gVkFDTV9TVUNDRVNTKSB7CisgICAgICAgIGlmICh2YWNtX2NoZWNrX3ZpZXdfY29udGVudHMobmV3cGR1LCB2YXItPnZhbC5vYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4vc2l6ZW9mKG9pZCksIDAsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFDTV9DSEVDS19WSUVXX0NPTlRFTlRTX0RORV9DT05URVhUX09LKQorICAgICAgICAgICAgPT0gVkFDTV9TVUNDRVNTKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHRyYXBkOmF1dGgiLCAiICByZXN1bHQ6IGF1dGhvcml6ZWRcbiIpKTsKICAgICAgICAgICAgIHJldCB8PSAxIDw8IGk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZF9kcy5oIGIvYXBwcy9zbm1wdHJhcGRfZHMuaAppbmRleCA1NWMxMjI2Li4wM2ViYTE0IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFwZF9kcy5oCisrKyBiL2FwcHMvc25tcHRyYXBkX2RzLmgKQEAgLTEsNyArMSwxMiBAQAogI2lmbmRlZiBTTk1QVFJBUERfRFNfSAogI2RlZmluZSBTTk1QVFJBUERfRFNfSAogCi0vKiB0aGVzZSBtdXN0IG5vdCBjb25mbGljdCB3aXRoIGFnZW50J3MgRFMgYm9vbGVhbnMgKi8KKy8qIGJvb2xlYW5zCisgKgorICogV0FSTklORzogVGhlc2UgbXVzdCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgYWdlbnQncyBEUyBib29sZWFucworICogSWYgeW91IGRlZmluZSBhZGRpdGlvbmFsIGVudHJpZXMgaGVyZSwgY2hlY2sgaW4gPGFnZW50L2RzX2FnZW50Lmg+IGZpcnN0CisgKiAgKGFuZCBjb25zaWRlciByZXBlYXRpbmcgdGhlIGRlZmluaXRpb25zIHRoZXJlKSAqLworCiAjZGVmaW5lIE5FVFNOTVBfRFNfQVBQX05VTUVSSUNfSVAgICAgICAgMTYKICNkZWZpbmUgTkVUU05NUF9EU19BUFBfTk9fQVVUSE9SSVpBVElPTiAxNwogCmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jIGIvYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYwppbmRleCAzN2NhNWFiLi41YThlM2M4IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jCisrKyBiL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTE0LDEwICsxNSwxMCBAQAogI2VuZGlmCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfV0FJVF9ICkBAIC0zNywxMCArMzgsMTcgQEAKICNpbmNsdWRlICJzbm1wdHJhcGRfbG9nLmgiCiAjaW5jbHVkZSAibm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIsIHNubXB0cmFwZCkKKwogY2hhciAqc3lzbG9nX2Zvcm1hdDEgPSBOVUxMOwogY2hhciAqc3lzbG9nX2Zvcm1hdDIgPSBOVUxMOwogY2hhciAqcHJpbnRfZm9ybWF0MSAgPSBOVUxMOwogY2hhciAqcHJpbnRfZm9ybWF0MiAgPSBOVUxMOworY2hhciAqZXhlY19mb3JtYXQxICAgPSBOVUxMOworY2hhciAqZXhlY19mb3JtYXQyICAgPSBOVUxMOworCitpbnQgICBTeXNsb2dUcmFwID0gMDsKK2ludCAgIGRyb3BhdXRoID0gMDsKIAogY29uc3QgY2hhciAgICAgKnRyYXAxX3N0ZF9zdHIgPSAiJS40eS0lLjJtLSUuMmwgJS4yaDolLjJqOiUuMmsgJUIgWyViXSAodmlhICVBIFslYV0pOiAlTlxuXHQlVyBUcmFwICglcSkgVXB0aW1lOiAlI1RcbiV2XG4iOwogY29uc3QgY2hhciAgICAgKnRyYXAyX3N0ZF9zdHIgPSAiJS40eS0lLjJtLSUuMmwgJS4yaDolLjJqOiUuMmsgJUIgWyViXTpcbiV2XG4iOwpAQCAtODEsMTkgKzg5LDI3IEBACiAgICAgY2hhciAgICAgICAgICAgKmNwdHIsICpjcDsKICAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKnRyYXBoOwogICAgIGludCAgICAgICAgICAgICBmbGFncyA9IDA7CisgICAgY2hhciAgICAgICAgICAgKmZvcm1hdCA9IE5VTEw7CiAKICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogICAgIG1lbXNldChvYnVmLCAwLCBzaXplb2Yob2J1ZikpOwogICAgIGNwdHIgPSBjb3B5X253b3JkKGxpbmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgaWYgKCBidWZbMF0gPT0gJy0nICYmIGJ1ZlsxXSA9PSAnRicgKSB7CisgICAgICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBmb3JtYXQgPSBzdHJkdXAoIGJ1ZiApOworICAgICAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICB9CiAgICAgaWYgKCAhY3B0ciApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiTWlzc2luZyB0cmFwaGFuZGxlIGNvbW1hbmQiKTsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk1pc3NpbmcgdHJhcGhhbmRsZSBjb21tYW5kICglcykiLCBidWYpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOnRyYXBoYW5kbGUiLCAicmVnaXN0ZXJpbmcgaGFuZGxlciBmb3I6ICIpKTsKICAgICBpZiAoIXN0cmNtcChidWYsICJkZWZhdWx0IikpIHsKICAgICAgICAgREVCVUdNU0coKCJyZWFkX2NvbmZpZzp0cmFwaGFuZGxlIiwgImRlZmF1bHQiKSk7Ci0gICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZGVmYXVsdF90cmFwaGFuZGxlciggY29tbWFuZF9oYW5kbGVyICk7CisgICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9ERUZBVUxUX0hBTkRMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfaGFuZGxlciApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNwID0gYnVmK3N0cmxlbihidWYpLTE7CiAgICAgICAgIGlmICggKmNwID09ICcqJyApIHsKQEAgLTEwOCwxMSArMTI0LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIXJlYWRfb2JqaWQoYnVmLCBvYnVmLCAmb2xlbikpIHsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICBidWYxW1NUUklOR01BWF07Ci0gICAgICAgICAgICBzbnByaW50ZihidWYxLCAgc2l6ZW9mKGJ1ZjEpLAotICAgICAgICAgICAgICAgICAgICAiQmFkIHRyYXAgT0lEIGluIHRyYXBoYW5kbGUgZGlyZWN0aXZlOiAlcyIsIGJ1Zik7Ci0gICAgICAgICAgICBidWYxWyBzaXplb2YoYnVmMSktMSBdID0gMDsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmMSk7CisJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJCYWQgdHJhcCBPSUQgaW4gdHJhcGhhbmRsZSBkaXJlY3RpdmU6ICVzIiwKKwkJCQkgYnVmKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBERUJVR01TR09JRCgoInJlYWRfY29uZmlnOnRyYXBoYW5kbGUiLCBvYnVmLCBvbGVuKSk7CkBAIC0xMjUsNiArMTM4LDggQEAKICAgICAgICAgdHJhcGgtPmZsYWdzID0gZmxhZ3M7CiAgICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfRVhFOwogICAgICAgICB0cmFwaC0+dG9rZW4gPSBzdHJkdXAoY3B0cik7CisgICAgICAgIGlmIChmb3JtYXQpCisgICAgICAgICAgICB0cmFwaC0+Zm9ybWF0ID0gZm9ybWF0OwogICAgIH0KIH0KIApAQCAtMTM4LDE3ICsxNTMsMjYgQEAKICAgICBjaGFyICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAgICAgaW50ICAgICAgICAgICAgIGZsYWdzID0gMDsKKyAgICBjaGFyICAgICAgICAgICAqZm9ybWF0ID0gTlVMTDsKIAogICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAgICAgbWVtc2V0KG9idWYsIDAsIHNpemVvZihvYnVmKSk7CiAgICAgY3B0ciA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7CisKKyAgICBpZiAoIGJ1ZlswXSA9PSAnLScgJiYgYnVmWzFdID09ICdGJyApIHsKKyAgICAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGZvcm1hdCA9IHN0cmR1cCggYnVmICk7CisgICAgICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIH0KICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6Zm9yd2FyZCIsICJyZWdpc3RlcmluZyBmb3J3YXJkIGZvcjogIikpOwogICAgIGlmICghc3RyY21wKGJ1ZiwgImRlZmF1bHQiKSkgewogICAgICAgICBERUJVR01TRygoInJlYWRfY29uZmlnOmZvcndhcmQiLCAiZGVmYXVsdCIpKTsKICAgICAgICAgaWYgKCAhc3RyY21wKCBjcHRyLCAiYWdlbnR4IiApKQotICAgICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyKCBheGZvcndhcmRfaGFuZGxlciApOworICAgICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhmb3J3YXJkX2hhbmRsZXIgKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyKCBmb3J3YXJkX2hhbmRsZXIgKTsKKyAgICAgICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9ERUZBVUxUX0hBTkRMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaGFuZGxlciApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNwID0gYnVmK3N0cmxlbihidWYpLTE7CiAgICAgICAgIGlmICggKmNwID09ICcqJyApIHsKQEAgLTE2NCwxMSArMTg4LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICghcmVhZF9vYmppZChidWYsIG9idWYsICZvbGVuKSkgewotICAgICAgICAgICAgY2hhciAgICAgICAgICAgIGJ1ZjFbU1RSSU5HTUFYXTsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZjEsICBzaXplb2YoYnVmMSksCi0gICAgICAgICAgICAgICAgICAgICJCYWQgdHJhcCBPSUQgaW4gZm9yd2FyZCBkaXJlY3RpdmU6ICVzIiwgYnVmKTsKLSAgICAgICAgICAgIGJ1ZjFbIHNpemVvZihidWYxKS0xIF0gPSAwOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcihidWYxKTsKKwkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkJhZCB0cmFwIE9JRCBpbiBmb3J3YXJkIGRpcmVjdGl2ZTogJXMiLCBidWYpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIERFQlVHTVNHT0lEKCgicmVhZF9jb25maWc6Zm9yd2FyZCIsIG9idWYsIG9sZW4pKTsKQEAgLTE4NCwyMSArMjA0LDIzIEBACiAgICAgICAgIHRyYXBoLT5mbGFncyA9IGZsYWdzOwogICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX05FVDsKICAgICAgICAgdHJhcGgtPnRva2VuID0gc3RyZHVwKGNwdHIpOworICAgICAgICBpZiAoZm9ybWF0KQorICAgICAgICAgICAgdHJhcGgtPmZvcm1hdCA9IGZvcm1hdDsKICAgICB9CiB9CiAKIAotc3RhdGljIHZvaWQKK3ZvaWQKIHBhcnNlX2Zvcm1hdChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKLSAgICBjaGFyICpjcDsKKyAgICBjaGFyICpjcCwgKnNlcDsKIAogICAgIC8qCiAgICAgICogRXh0cmFjdCB0aGUgZmlyc3QgdG9rZW4gZnJvbSB0aGUgdmFsdWUKICAgICAgKiB3aGljaCB0ZWxscyB1cyB3aGljaCBzdHlsZSBvZiBmb3JtYXQgdGhpcyBpcwogICAgICAqLwogICAgIGNwID0gbGluZTsKLSAgICB3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisgICAgd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmNwKSkpCiAgICAgICAgIGNwKys7CiAgICAgaWYgKCEoKmNwKSkgewogICAgICAgICAvKgpAQCAtMjA5LDggKzIzMSw5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBzZXAgPSBjcDsKICAgICAqKGNwKyspID0gJ1wwJzsKLSAgICB3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisgICAgd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkKICAgICAgICAgY3ArKzsKIAogICAgIC8qCkBAIC0yNDAsNyArMjYzLDIwIEBACiAgICAgICAgIFNOTVBfRlJFRSggc3lzbG9nX2Zvcm1hdDIgKTsKICAgICAgICAgc3lzbG9nX2Zvcm1hdDEgPSBzdHJkdXAoY3ApOwogICAgICAgICBzeXNsb2dfZm9ybWF0MiA9IHN0cmR1cChjcCk7CisgICAgfSBlbHNlIGlmICghc3RyY21wKCBsaW5lLCAiZXhlY3V0ZTEiKSkgeworICAgICAgICBTTk1QX0ZSRUUoIGV4ZWNfZm9ybWF0MSApOworICAgICAgICBleGVjX2Zvcm1hdDEgPSBzdHJkdXAoY3ApOworICAgIH0gZWxzZSBpZiAoIXN0cmNtcCggbGluZSwgImV4ZWN1dGUyIikpIHsKKyAgICAgICAgU05NUF9GUkVFKCBleGVjX2Zvcm1hdDIgKTsKKyAgICAgICAgZXhlY19mb3JtYXQyID0gc3RyZHVwKGNwKTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIGxpbmUsICJleGVjdXRlIikpIHsKKyAgICAgICAgU05NUF9GUkVFKCBleGVjX2Zvcm1hdDEgKTsKKyAgICAgICAgU05NUF9GUkVFKCBleGVjX2Zvcm1hdDIgKTsKKyAgICAgICAgZXhlY19mb3JtYXQxID0gc3RyZHVwKGNwKTsKKyAgICAgICAgZXhlY19mb3JtYXQyID0gc3RyZHVwKGNwKTsKICAgICB9CisKKyAgICAqc2VwID0gJyAnOwogfQogCiAKQEAgLTI4OSw3ICszMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3RyYXAyX2ZtdCwgZnJlZV90cmFwMl9mbXQsICJmb3JtYXQiKTsKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgImZvcm1hdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZm9ybWF0LCBOVUxMLAotCQkJICAgICJbcHJpbnR7LDEsMn18c3lzbG9neywxLDJ9XSBmb3JtYXQiKTsKKwkJCSAgICAiW3ByaW50eywxLDJ9fHN5c2xvZ3ssMSwyfXxleGVjdXRleywxLDJ9XSBmb3JtYXQiKTsKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgImZvcndhcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2ZvcndhcmQsIE5VTEwsICJPSUR8XCJkZWZhdWx0XCIgZGVzdGluYXRpb24iKTsKIH0KQEAgLTMwOCwxMiArMzQ0LDI2IEBACiBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKm5ldHNubXBfZGVmYXVsdF90cmFwaGFuZGxlcnMgID0gTlVMTDsKIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqbmV0c25tcF9zcGVjaWZpY190cmFwaGFuZGxlcnMgPSBOVUxMOwogCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2hhbmRsZXJfbWFwX3QgeworICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICoqaGFuZGxlcjsKKyAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgKmRlc2NyOworfSBuZXRzbm1wX2hhbmRsZXJfbWFwOworCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX21hcCBoYW5kbGVyc1tdID0geworICAgIHsgJm5ldHNubXBfYXV0aF9nbG9iYWxfdHJhcGhhbmRsZXJzLCAiYXV0aCB0cmFwIiB9LAorICAgIHsgJm5ldHNubXBfcHJlX2dsb2JhbF90cmFwaGFuZGxlcnMsICJwcmUtZ2xvYmFsIHRyYXAiIH0sCisgICAgeyBOVUxMLCAidHJhcCBzcGVjaWZpYyIgfSwKKyAgICB7ICZuZXRzbm1wX3Bvc3RfZ2xvYmFsX3RyYXBoYW5kbGVycywgImdsb2JhbCIgfSwKKyAgICB7IE5VTEwsIE5VTEwgfQorfTsKKwogLyoKICAqIFJlZ2lzdGVyIGEgbmV3ICJnbG9iYWwiIHRyYXBoYW5kbGVyLAogICogdG8gYmUgYXBwbGllZCB0byAqYWxsKiBpbmNvbWluZyB0cmFwcwogICovCiBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKgotbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKGludCBsaXN0LCBOZXRzbm1wX1RyYXBfSGFuZGxlciogaGFuZGxlcikgeworbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKGludCBsaXN0LCBOZXRzbm1wX1RyYXBfSGFuZGxlciAqaGFuZGxlcikKK3sKICAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKnRyYXBoOwogCiAgICAgaWYgKCAhaGFuZGxlciApCkBAIC0zMjQsNyArMzc0LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgotICAgICAqIEFkZCB0aGlzIG5ldyBoYW5kbGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgYXBwcm9wcmlhdGUgZ2xvYmFsIGxpc3QKKyAgICAgKiBBZGQgdGhpcyBuZXcgaGFuZGxlciB0byB0aGUgZnJvbnQgb2YgdGhlIGFwcHJvcHJpYXRlIGxpc3QKICAgICAgKiAgIChvciBzaG91bGQgaXQgZ28gb24gdGhlIGVuZD8pCiAgICAgICovCiAgICAgdHJhcGgtPmhhbmRsZXIgPSBoYW5kbGVyOwpAQCAtMzQyLDYgKzM5MiwxMCBAQAogICAgICAgICB0cmFwaC0+bmV4dGggICA9IG5ldHNubXBfcG9zdF9nbG9iYWxfdHJhcGhhbmRsZXJzOwogICAgICAgICBuZXRzbm1wX3Bvc3RfZ2xvYmFsX3RyYXBoYW5kbGVycyA9IHRyYXBoOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5FVFNOTVBUUkFQRF9ERUZBVUxUX0hBTkRMRVI6CisgICAgICAgIHRyYXBoLT5uZXh0aCAgID0gbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVyczsKKyAgICAgICAgbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVycyA9IHRyYXBoOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBmcmVlKCB0cmFwaCApOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM0OSwzMiArNDAzLDE3IEBACiAgICAgcmV0dXJuIHRyYXBoOwogfQogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BRERfREVGQVVMVF9UUkFQSEFORExFUgogLyoKICAqIFJlZ2lzdGVyIGEgbmV3ICJkZWZhdWx0IiB0cmFwaGFuZGxlciwgdG8gYmUgYXBwbGllZCB0byBhbGwKICAqIHRyYXBzIHdpdGggbm8gc3BlY2lmaWMgdHJhcCBoYW5kbGVycyBvZiB0aGVpciBvd24uCiAgKi8KIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqCi1uZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyKCBOZXRzbm1wX1RyYXBfSGFuZGxlciogaGFuZGxlcikgewotICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7Ci0KLSAgICBpZiAoICFoYW5kbGVyICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB0cmFwaCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFwZF9oYW5kbGVyKTsKLSAgICBpZiAoICF0cmFwaCApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBBZGQgdGhpcyBuZXcgaGFuZGxlciB0byB0aGUgZnJvbnQgb2YgdGhlIGRlZmF1bHQgbGlzdAotICAgICAqICAgKG9yIHNob3VsZCBpdCBnbyBvbiB0aGUgZW5kPykKLSAgICAgKi8KLSAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0FMTDsgLyogY2FsbGVycyB3aWxsIGxpa2VseSBjaGFuZ2UgdGhpcyAqLwotICAgIHRyYXBoLT5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICB0cmFwaC0+bmV4dGggICA9IG5ldHNubXBfZGVmYXVsdF90cmFwaGFuZGxlcnM7Ci0gICAgbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVycyA9IHRyYXBoOwotICAgIHJldHVybiB0cmFwaDsKK25ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIoTmV0c25tcF9UcmFwX0hhbmRsZXIgKmhhbmRsZXIpIHsKKyAgICByZXR1cm4gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9ERUZBVUxUX0hBTkRMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FERF9ERUZBVUxUX1RSQVBIQU5ETEVSICovCiAKIAogLyoKQEAgLTM5OSw3ICs0MzgsNyBAQAogICAgIHRyYXBoLT5hdXRodHlwZXMgICA9IFRSQVBfQVVUSF9BTEw7IC8qIGNhbGxlcnMgd2lsbCBsaWtlbHkgY2hhbmdlIHRoaXMgKi8KICAgICB0cmFwaC0+aGFuZGxlciAgICAgPSBoYW5kbGVyOwogICAgIHRyYXBoLT50cmFwb2lkX2xlbiA9IHRyYXBPaWRMZW47Ci0gICAgdHJhcGgtPnRyYXBvaWQgPSBuZXRzbm1wX21lbWR1cCh0cmFwT2lkLCBzaXplb2Yob2lkKSAqIHRyYXBPaWRMZW4pOworICAgIHRyYXBoLT50cmFwb2lkICAgICA9IHNubXBfZHVwbGljYXRlX29iamlkKHRyYXBPaWQsIHRyYXBPaWRMZW4pOwogCiAgICAgLyoKICAgICAgKiBOb3cgdHJ5IHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSB0cmFwLXNwZWNpZmljCkBAIC01MTQsOCArNTUzLDEzIEBACiBuZXRzbm1wX2dldF90cmFwaGFuZGxlciggb2lkICp0cmFwT2lkLCBpbnQgdHJhcE9pZExlbiApIHsKICAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKnRyYXBoOwogICAgIAotICAgIGlmICghdHJhcE9pZCB8fCAhdHJhcE9pZExlbikKKyAgICBpZiAoIXRyYXBPaWQgfHwgIXRyYXBPaWRMZW4pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQ6bG9va3VwIiwgImdldF90cmFwaGFuZGxlciBubyBPSUQhXG4iKSk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBERUJVR01TR1RMKCggInNubXB0cmFwZDpsb29rdXAiLCAiTG9va2luZyB1cCBUcmFwIE9JRDogIikpOworICAgIERFQlVHTVNHT0lEKCgic25tcHRyYXBkOmxvb2t1cCIsIHRyYXBPaWQsIHRyYXBPaWRMZW4pKTsKKyAgICBERUJVR01TRygoICJzbm1wdHJhcGQ6bG9va3VwIiwgIlxuIikpOwogCiAgICAgLyoKICAgICAgKiBMb29rIGZvciBhIG1hdGNoaW5nIE9JRCwgYW5kIHJldHVybiB0aGF0IGxpc3QuLi4KQEAgLTUzMCw3ICs1NzQsOCBAQAogICAgICAgICBpZiAoISh0cmFwaC0+ZmxhZ3MgJiBORVRTTk1QX1RSQVBIQU5ETEVSX0ZMQUdfTUFUQ0hfVFJFRSkpIHsKICAgICAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKHRyYXBoLT50cmFwb2lkLCB0cmFwaC0+dHJhcG9pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwT2lkLCB0cmFwT2lkTGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZ2V0X3RyYXBoYW5kbGVyIGV4YWN0IG1hdGNoICgleClcbiIsIHRyYXBoKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQ6bG9va3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldF90cmFwaGFuZGxlciBleGFjdCBtYXRjaCAoJXApXG4iLCB0cmFwaCkpOwogCSAgICAgICAgcmV0dXJuIHRyYXBoOwogICAgICAgICAgICAgfQogCX0gZWxzZSB7CkBAIC01NDgsMTEgKzU5MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUodHJhcGgtPnRyYXBvaWQsIHRyYXBoLT50cmFwb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhcE9pZCwgdHJhcE9pZExlbikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZ2V0X3RyYXBoYW5kbGVyIHN0cmljdCBzdWJ0cmVlIG1hdGNoICgleClcbiIsIHRyYXBoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZDpsb29rdXAiLCAiZ2V0X3RyYXBoYW5kbGVyIHN0cmljdCBzdWJ0cmVlIG1hdGNoICglcClcbiIsIHRyYXBoKSk7CiAJICAgICAgICAgICAgICAgIHJldHVybiB0cmFwaDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgImdldF90cmFwaGFuZGxlciBzdWJ0cmVlIG1hdGNoICgleClcbiIsIHRyYXBoKSk7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkOmxvb2t1cCIsICJnZXRfdHJhcGhhbmRsZXIgc3VidHJlZSBtYXRjaCAoJXApXG4iLCB0cmFwaCkpOwogCSAgICAgICAgICAgIHJldHVybiB0cmFwaDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NjIsNyArNjA3LDcgQEAKICAgICAvKgogICAgICAqIC4uLi4gb3IgZmFpbGluZyB0aGF0LCByZXR1cm4gdGhlICJkZWZhdWx0IiBsaXN0ICh3aGljaCBtYXkgYmUgTlVMTCkKICAgICAgKi8KLSAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJnZXRfdHJhcGhhbmRsZXIgZGVmYXVsdCAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkOmxvb2t1cCIsICJnZXRfdHJhcGhhbmRsZXIgZGVmYXVsdCAoJXApXG4iLAogCQkJICAgIG5ldHNubXBfZGVmYXVsdF90cmFwaGFuZGxlcnMpKTsKICAgICByZXR1cm4gbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVyczsKIH0KQEAgLTU4Nyw3ICs2MzIsNiBAQAogICAgIHVfY2hhciAgICAgICAgICpyYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgcl9sZW4gPSA2NCwgb19sZW4gPSAwOwogICAgIGludCAgICAgICAgICAgICB0cnVuYyA9IDA7Ci0gICAgZXh0ZXJuIGludCAgICAgIFN5c2xvZ1RyYXA7CiAKICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJzeXNsb2dfaGFuZGxlclxuIikpOwogCkBAIC02NzAsNyArNzE0LDYgQEAKICAgICB1X2NoYXIgICAgICAgICAqcmJ1ZiA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIHJfbGVuID0gNjQsIG9fbGVuID0gMDsKICAgICBpbnQgICAgICAgICAgICAgdHJ1bmMgPSAwOwotICAgIGV4dGVybiBpbnQgICAgICBkcm9wYXV0aDsKIAogICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgInByaW50X2hhbmRsZXJcbiIpKTsKIApAQCAtNzM4LDE2MyArNzgxLDIwIEBACiB9CiAKIAorI2RlZmluZSBFWEVDVVRFX0ZPUk1BVAkiJUJcbiViXG4lVlxuJXZcbiIKKwogLyoKICAqICBUcmFwIGhhbmRsZXIgZm9yIGludm9raW5nIGEgc3VpdGFibGUgc2NyaXB0CiAgKi8KLXZvaWQKLXNlbmRfaGFuZGxlcl9kYXRhKEZJTEUgKiBmaWxlLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwKLSAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCi17Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHRtcHZhciwgKnZhcnM7Ci0gICAgc3RhdGljIG9pZCAgICAgIHRyYXBvaWRzW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDUsIDAgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgc25tcHN5c3VwdGltZVtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCAzLCAwIH07Ci0gICAgc3RhdGljIG9pZCAgICAgIHNubXB0cmFwb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDQsIDEsIDAgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgc25tcHRyYXBlbnRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNCwgMywgMCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBzbm1wdHJhcGFkZHJbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTgsIDEsIDMsIDAgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgc25tcHRyYXBjb21bXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTgsIDEsIDQsIDAgfTsKLSAgICBvaWQgICAgICAgICAgICAgZW50dHJhcG9pZFtNQVhfT0lEX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIGVudHRyYXBsZW4gPSBwZHUtPmVudGVycHJpc2VfbGVuZ3RoOwotCi0gICAgaWYgKHRyYW5zcG9ydCAhPSBOVUxMICYmIHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqdHN0ciA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHRzdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihmaWxlLCAiJXNcbiVzXG4iLCBob3N0ID8gaG9zdC0+aF9uYW1lIDogdHN0ciwgdHN0cik7Ci0gICAgICAgICAgICBmcmVlKHRzdHIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50ZihmaWxlLCAiJXNcbjxVTktOT1dOPlxuIiwgaG9zdCA/IGhvc3QtPmhfbmFtZSA6ICI8VU5LTk9XTj4iKTsKLSAgICB9Ci0gICAgaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19UUkFQKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGNvbnZlcnQgYSB2MSB0cmFwIHRvIGEgdjIgdmFyaWFibGUgYmluZGluZyBsaXN0OgotICAgICAgICAgKiBUaGUgdXB0aW1lIGFuZCB0cmFwT0lEIGdvIGZpcnN0IGluIHRoZSBsaXN0LiAKLSAgICAgICAgICovCi0gICAgICAgIHRtcHZhci52YWwuaW50ZWdlciA9IChsb25nICopICZwZHUtPnRpbWU7Ci0gICAgICAgIHRtcHZhci52YWxfbGVuID0gc2l6ZW9mKHBkdS0+dGltZSk7Ci0gICAgICAgIHRtcHZhci50eXBlID0gQVNOX1RJTUVUSUNLUzsKLSAgICAgICAgZnByaW50X3ZhcmlhYmxlKGZpbGUsIHNubXBzeXN1cHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc25tcHN5c3VwdGltZSkgLyBzaXplb2Yob2lkKSwgJnRtcHZhcik7Ci0gICAgICAgIHRtcHZhci50eXBlID0gQVNOX09CSkVDVF9JRDsKLSAgICAgICAgaWYgKHBkdS0+dHJhcF90eXBlID09IFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMpIHsKLSAgICAgICAgICAgIG1lbWNweShlbnR0cmFwb2lkLCBwZHUtPmVudGVycHJpc2UsIHNpemVvZihvaWQpICogZW50dHJhcGxlbik7Ci0gICAgICAgICAgICBpZiAoZW50dHJhcG9pZFtlbnR0cmFwbGVuIC0gMV0gIT0gMCkKLSAgICAgICAgICAgICAgICBlbnR0cmFwb2lkW2VudHRyYXBsZW4rK10gPSAwOwotICAgICAgICAgICAgZW50dHJhcG9pZFtlbnR0cmFwbGVuKytdID0gcGR1LT5zcGVjaWZpY190eXBlOwotICAgICAgICAgICAgdG1wdmFyLnZhbC5vYmppZCA9IGVudHRyYXBvaWQ7Ci0gICAgICAgICAgICB0bXB2YXIudmFsX2xlbiA9IGVudHRyYXBsZW4gKiBzaXplb2Yob2lkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRyYXBvaWRzWzldID0gcGR1LT50cmFwX3R5cGUgKyAxOwotICAgICAgICAgICAgdG1wdmFyLnZhbC5vYmppZCA9IHRyYXBvaWRzOwotICAgICAgICAgICAgdG1wdmFyLnZhbF9sZW4gPSAxMCAqIHNpemVvZihvaWQpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludF92YXJpYWJsZShmaWxlLCBzbm1wdHJhcG9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzbm1wdHJhcG9pZCkgLyBzaXplb2Yob2lkKSwgJnRtcHZhcik7Ci0gICAgfQotICAgIC8qCi0gICAgICogZG8gdGhlIHZhcmlhYmxlcyBpbiB0aGUgcGR1IAotICAgICAqLwotICAgIGZvciAodmFycyA9IHBkdS0+dmFyaWFibGVzOyB2YXJzOyB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSkgewotICAgICAgICBmcHJpbnRfdmFyaWFibGUoZmlsZSwgdmFycy0+bmFtZSwgdmFycy0+bmFtZV9sZW5ndGgsIHZhcnMpOwotICAgIH0KLSAgICBpZiAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogY29udmVydCBhIHYxIHRyYXAgdG8gYSB2MiB2YXJpYWJsZSBiaW5kaW5nIGxpc3Q6Ci0gICAgICAgICAqIFRoZSBlbnRlcnByaXNlIGdvZXMgbGFzdC4gCi0gICAgICAgICAqLwotICAgICAgICB0bXB2YXIudmFsLnN0cmluZyA9IHBkdS0+YWdlbnRfYWRkcjsKLSAgICAgICAgdG1wdmFyLnZhbF9sZW4gPSA0OwotICAgICAgICB0bXB2YXIudHlwZSA9IEFTTl9JUEFERFJFU1M7Ci0gICAgICAgIGZwcmludF92YXJpYWJsZShmaWxlLCBzbm1wdHJhcGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc25tcHRyYXBhZGRyKSAvIHNpemVvZihvaWQpLCAmdG1wdmFyKTsKLSAgICAgICAgdG1wdmFyLnZhbC5zdHJpbmcgPSBwZHUtPmNvbW11bml0eTsKLSAgICAgICAgdG1wdmFyLnZhbF9sZW4gPSBwZHUtPmNvbW11bml0eV9sZW47Ci0gICAgICAgIHRtcHZhci50eXBlID0gQVNOX09DVEVUX1NUUjsKLSAgICAgICAgZnByaW50X3ZhcmlhYmxlKGZpbGUsIHNubXB0cmFwY29tLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNubXB0cmFwY29tKSAvIHNpemVvZihvaWQpLCAmdG1wdmFyKTsKLSAgICAgICAgdG1wdmFyLnZhbC5vYmppZCA9IHBkdS0+ZW50ZXJwcmlzZTsKLSAgICAgICAgdG1wdmFyLnZhbF9sZW4gPSBwZHUtPmVudGVycHJpc2VfbGVuZ3RoICogc2l6ZW9mKG9pZCk7Ci0gICAgICAgIHRtcHZhci50eXBlID0gQVNOX09CSkVDVF9JRDsKLSAgICAgICAgZnByaW50X3ZhcmlhYmxlKGZpbGUsIHNubXB0cmFwZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNubXB0cmFwZW50KSAvIHNpemVvZihvaWQpLCAmdG1wdmFyKTsKLSAgICB9Ci19Ci0KLXZvaWQKLWRvX2V4dGVybmFsKGNoYXIgKmNtZCwgc3RydWN0IGhvc3RlbnQgKmhvc3QsCi0gICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQotewotICAgIEZJTEUgICAgICAgICAgICpmaWxlOwotICAgIGludCAgICAgICAgICAgICBvbGRxdWljaywgcmVzdWx0OwotCi0gICAgREVCVUdNU0dUTCgoInNubXB0cmFwZCIsICJSdW5uaW5nOiAlc1xuIiwgY21kKSk7Ci0gICAgb2xkcXVpY2sgPSBzbm1wX2dldF9xdWlja19wcmludCgpOwotICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KDEpOwotICAgIGlmIChjbWQpIHsKLSNpZm5kZWYgV0lOMzIKLSAgICAgICAgaW50ICAgICAgICAgICAgIGZkWzJdOwotICAgICAgICBpbnQgICAgICAgICAgICAgcGlkOwotCi0gICAgICAgIGlmIChwaXBlKGZkKSkgewotICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJwaXBlIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBjaGlsZCAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2xvc2UoMCk7Ci0gICAgICAgICAgICBpZiAoZHVwKGZkWzBdKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJkdXAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsb3NlKGZkWzFdKTsKLSAgICAgICAgICAgIGNsb3NlKGZkWzBdKTsKLSAgICAgICAgICAgIHN5c3RlbShjbWQpOwotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfSBlbHNlIGlmIChwaWQgPiAwKSB7Ci0gICAgICAgICAgICBmaWxlID0gZmRvcGVuKGZkWzFdLCAidyIpOwotICAgICAgICAgICAgc2VuZF9oYW5kbGVyX2RhdGEoZmlsZSwgaG9zdCwgcGR1LCB0cmFuc3BvcnQpOwotICAgICAgICAgICAgZmNsb3NlKGZpbGUpOwotICAgICAgICAgICAgY2xvc2UoZmRbMF0pOwotICAgICAgICAgICAgY2xvc2UoZmRbMV0pOwotICAgICAgICAgICAgaWYgKHdhaXRwaWQocGlkLCAmcmVzdWx0LCAwKSA8IDApIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIndhaXRwaWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigiZm9yayIpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBjaGFyICAgICAgICAgICAgY29tbWFuZF9idWZbMTI4XTsKLSAgICAgICAgY2hhciAgICAgICAgICAgIGZpbGVfYnVmW0xfdG1wbmFtXTsKLQotICAgICAgICB0bXBuYW0oZmlsZV9idWYpOwotICAgICAgICBmaWxlID0gZm9wZW4oZmlsZV9idWYsICJ3Iik7Ci0gICAgICAgIGlmICghZmlsZSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmb3BlbjogJXM6ICVzXG4iLCBmaWxlX2J1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlbmRfaGFuZGxlcl9kYXRhKGZpbGUsIGhvc3QsIHBkdSwgdHJhbnNwb3J0KTsKLSAgICAgICAgICAgIGZjbG9zZShmaWxlKTsKLSAgICAgICAgICAgIHNucHJpbnRmKGNvbW1hbmRfYnVmLCBzaXplb2YoY29tbWFuZF9idWYpLAotICAgICAgICAgICAgICAgICAgICAgIiVzIDwgJXMiLCBjbWQsIGZpbGVfYnVmKTsKLSAgICAgICAgICAgIGNvbW1hbmRfYnVmWyBzaXplb2YoY29tbWFuZF9idWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZF9idWYpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbTogJXM6ICVzXG4iLCBjb21tYW5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW06ICVzOiAlZFxuIiwgY29tbWFuZF9idWYsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZW1vdmUoZmlsZV9idWYpOwotICAgICAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyICovCi0gICAgfQotICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KG9sZHF1aWNrKTsKLX0KLQotI2RlZmluZSBFWEVDVVRFX0ZPUk1BVAkiJUJcbiViXG4lVlxuJXZcbiIKLQogaW50ICAgY29tbWFuZF9oYW5kbGVyKCBuZXRzbm1wX3BkdSAgICAgICAgICAgKnBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgICAgICp0cmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqaGFuZGxlcikKIHsKKyNpZm5kZWYgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGZvciBydW5fc2hlbGxfY29tbWFuZCBub3QgYXZhaWxhYmxlXG4iKSk7CisgICAgcmV0dXJuIE5FVFNOTVBUUkFQRF9IQU5ETEVSX0ZBSUw7CisjZWxzZQogICAgIHVfY2hhciAgICAgICAgICpyYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgcl9sZW4gPSA2NCwgb19sZW4gPSAwOwogICAgIGludCAgICAgICAgICAgICBvbGRxdWljazsKQEAgLTkwNyw4ICs4MDcsMTAgQEAKIAkgICAgdjJfcGR1ID0gY29udmVydF92MXBkdV90b192MihwZHUpOwogCWVsc2UKIAkgICAgdjJfcGR1ID0gcGR1OwotICAgICAgICBvbGRxdWljayA9IHNubXBfZ2V0X3F1aWNrX3ByaW50KCk7Ci0gICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KDEpOworICAgICAgICBvbGRxdWljayA9IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UKTsKKyAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAxKTsKIAogICAgICAgICAvKgogCSAqIEZvcm1hdCB0aGUgdHJhcCBhbmQgcGFzcyB0aGlzIHN0cmluZyB0byB0aGUgZXh0ZXJuYWwgY29tbWFuZApAQCAtOTI4LDQ1ICs4MzAsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXItPmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyX3BkdSwgdHJhbnNwb3J0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgImV4ZWN1dGUgZm9ybWF0XG4iKSk7Ci0gICAgICAgICAgICByZWFsbG9jX2Zvcm1hdF90cmFwKCZyYnVmLCAmcl9sZW4sICZvX2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYRUNVVEVfRk9STUFULAorCSAgICBpZiAoIHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19UUkFQICYmIGV4ZWNfZm9ybWF0MSApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJleGVjIHYxID0gJyVzJ1xuIiwgZXhlY19mb3JtYXQxKSk7CisgICAgICAgICAgICAgICAgcmVhbGxvY19mb3JtYXRfdHJhcCgmcmJ1ZiwgJnJfbGVuLCAmb19sZW4sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2Zvcm1hdDEsIHBkdSwgdHJhbnNwb3J0KTsKKwkgICAgfSBlbHNlIGlmICggcGR1LT5jb21tYW5kICE9IFNOTVBfTVNHX1RSQVAgJiYgZXhlY19mb3JtYXQyICkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgImV4ZWMgdjIvMyA9ICclcydcbiIsIGV4ZWNfZm9ybWF0MikpOworICAgICAgICAgICAgICAgIHJlYWxsb2NfZm9ybWF0X3RyYXAoJnJidWYsICZyX2xlbiwgJm9fbGVuLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19mb3JtYXQyLCBwZHUsIHRyYW5zcG9ydCk7CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZXhlY3V0ZSBmb3JtYXRcbiIpKTsKKyAgICAgICAgICAgICAgICByZWFsbG9jX2Zvcm1hdF90cmFwKCZyYnVmLCAmcl9sZW4sICZvX2xlbiwgMSwgRVhFQ1VURV9GT1JNQVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Ml9wZHUsIHRyYW5zcG9ydCk7CisgICAgICAgICAgICB9CiAJfQogCiAgICAgICAgIC8qCiAgICAgICAgICAqICBhbmQgcGFzcyB0aGlzIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkCiAgICAgICAgICAqLwotICAgICAgICBydW5fc2hlbGxfY29tbWFuZChoYW5kbGVyLT50b2tlbiwgKGNoYXIqKXJidWYsIE5VTEwsIDApOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIG91dHB1dCAqLwotICAgICAgICBzbm1wX3NldF9xdWlja19wcmludChvbGRxdWljayk7CisgICAgICAgIHJ1bl9zaGVsbF9jb21tYW5kKGhhbmRsZXItPnRva2VuLCAoY2hhciopcmJ1ZiwgTlVMTCwgTlVMTCk7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gb3V0cHV0ICovCisgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCwgb2xkcXVpY2spOwogICAgICAgICBpZiAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVApCiAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHYyX3BkdSk7CiAgICAgICAgIGZyZWUocmJ1Zik7CiAgICAgfQogICAgIHJldHVybiBORVRTTk1QVFJBUERfSEFORExFUl9PSzsKKyNlbmRpZiAvKiAhZGVmIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRSAqLwogfQogCiAKIAogCiAvKgotICogIFRyYXAgaGFuZGxlciBmb3IgZG9pbmcgc29tZXRoaW5nIHdpdGggImV2ZW50IiB0cmFwcwotICogICAgICAobm90IGVudGlyZWx5IGNsZWFyIHdoYXQgdGhpcyBpcyBhYm91dCA/Pz8pCi0gKi8KLQkvKiBYWFggLSBpbiBzbm1wdHJhcGQuYyAqLwotdm9pZCBldmVudF9pbnB1dChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2cCk7Ci0KLWludCAgIGV2ZW50X2hhbmRsZXIoIG5ldHNubXBfcGR1ICAgICAgICAgICAqcGR1LAotICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgICAgICp0cmFuc3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKmhhbmRsZXIpCi17Ci0gICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZXZlbnRfaGFuZGxlclxuIikpOwotICAgIGV2ZW50X2lucHV0KHBkdS0+dmFyaWFibGVzKTsKLSAgICByZXR1cm4gTkVUU05NUFRSQVBEX0hBTkRMRVJfT0s7Ci19Ci0KLQotLyoKICAqICBUcmFwIGhhbmRsZXIgZm9yIGZvcndhcmRpbmcgdG8gdGhlIEFnZW50WCBtYXN0ZXIgYWdlbnQKICAqLwogaW50IGF4Zm9yd2FyZF9oYW5kbGVyKCBuZXRzbm1wX3BkdSAgICAgICAgICAgKnBkdSwKQEAgLTEwNTUsMTEgKzk1MSw3IEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzOwogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWdpYzsKLSAgICBpbnQgcmV0OwotICAgIGV4dGVybiBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKm5ldHNubXBfYXV0aF9nbG9iYWxfdHJhcGhhbmRsZXJzOwotICAgIGV4dGVybiBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKm5ldHNubXBfcHJlX2dsb2JhbF90cmFwaGFuZGxlcnM7Ci0gICAgZXh0ZXJuIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqbmV0c25tcF9wb3N0X2dsb2JhbF90cmFwaGFuZGxlcnM7Ci0KKyAgICBpbnQgcmV0LCBpZHg7CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0U6CkBAIC0xMTU2LDc3ICsxMDQ4LDI2IEBACiAgICAgICAgICAqICBPSyAtIEVub3VnaCB3YWZmbGluZywgbGV0J3MgZ2V0IHRvIHdvcmsuLi4uLgogCSAqLwogCi0gICAgICAgIC8qCi0JICogIGEpIGF1dGhlbnRpY2F0aW9uIGhhbmRsZXJzCi0JICovCi0gICAgICAgIHRyYXBoID0gbmV0c25tcF9hdXRoX2dsb2JhbF90cmFwaGFuZGxlcnM7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdHJhcGQiLCAiUnVubmluZyBhdXRoIHRyYXAgaGFuZGxlcnNcbiIpKTsKLQl3aGlsZSAodHJhcGgpIHsKLSAgICAgICAgICAgIGlmICghbmV0c25tcF90cmFwZF9jaGVja19hdXRoKHRyYXBoLT5hdXRodHlwZXMpKSB7Ci0gICAgICAgICAgICAgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIHdlIGNvbnRpbnVlIG9uIGFuZCBza2lwIHRoaXMgb25lICovCi0gICAgICAgICAgICB9Ci0JICAgIHJldCA9ICgqKHRyYXBoLT5oYW5kbGVyKSkocGR1LCB0cmFuc3BvcnQsIHRyYXBoKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfRklOSVNIKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9CUkVBSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0JfQorICAgICAgICBmb3IoIGlkeCA9IDA7IGhhbmRsZXJzW2lkeF0uZGVzY3I7ICsraWR4ICkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXB0cmFwZCIsICJSdW5uaW5nICVzIGhhbmRsZXJzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNbaWR4XS5kZXNjcikpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gaGFuZGxlcnNbaWR4XS5oYW5kbGVyKSAvKiBzcGVjaWZpYyAqLworICAgICAgICAgICAgICAgIHRyYXBoID0gbmV0c25tcF9nZXRfdHJhcGhhbmRsZXIodHJhcE9pZCwgdHJhcE9pZExlbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHJhcGggPSAqaGFuZGxlcnNbaWR4XS5oYW5kbGVyOwogCi0gICAgICAgIC8qCi0JICogIGIpIHByZS1zcGVjaWZpYyBnbG9iYWwgaGFuZGxlcnMKLQkgKi8KLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX3ByZV9nbG9iYWxfdHJhcGhhbmRsZXJzOwotICAgICAgICBERUJVR01TR1RMKCgic25tcHRyYXBkIiwgIlJ1bm5pbmcgcHJlLWdsb2JhbCB0cmFwIGhhbmRsZXJzXG4iKSk7Ci0Jd2hpbGUgKHRyYXBoKSB7Ci0gICAgICAgICAgICBpZiAoIW5ldHNubXBfdHJhcGRfY2hlY2tfYXV0aCh0cmFwaC0+YXV0aHR5cGVzKSkgewotICAgICAgICAgICAgICAgIHRyYXBoID0gdHJhcGgtPm5leHRoOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiB3ZSBjb250aW51ZSBvbiBhbmQgc2tpcCB0aGlzIG9uZSAqLwotICAgICAgICAgICAgfQotCSAgICByZXQgPSAoKih0cmFwaC0+aGFuZGxlcikpKHBkdSwgdHJhbnNwb3J0LCB0cmFwaCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IE5FVFNOTVBUUkFQRF9IQU5ETEVSX0ZJTklTSCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfQlJFQUspCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgIHRyYXBoID0gdHJhcGgtPm5leHRoOwotCX0KKyAgICAgICAgICAgIGZvciggOyB0cmFwaDsgdHJhcGggPSB0cmFwaC0+bmV4dGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ldHNubXBfdHJhcGRfY2hlY2tfYXV0aCh0cmFwaC0+YXV0aHR5cGVzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIHdlIGNvbnRpbnVlIG9uIGFuZCBza2lwIHRoaXMgb25lICovCiAKLSAgICAgICAgLyoKLQkgKiAgYykgdHJhcC1zcGVjaWZpYyBoYW5kbGVycwotCSAqLwotICAgICAgICBERUJVR01TR1RMKCgic25tcHRyYXBkIiwgIlJ1bm5pbmcgdHJhcCBzcGVjaWZpYyBoYW5kbGVyc1xuIikpOwotICAgICAgICB0cmFwaCA9IG5ldHNubXBfZ2V0X3RyYXBoYW5kbGVyKHRyYXBPaWQsIHRyYXBPaWRMZW4pOwotCXdoaWxlICh0cmFwaCkgewotICAgICAgICAgICAgaWYgKCFuZXRzbm1wX3RyYXBkX2NoZWNrX2F1dGgodHJhcGgtPmF1dGh0eXBlcykpIHsKLSAgICAgICAgICAgICAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogd2UgY29udGludWUgb24gYW5kIHNraXAgdGhpcyBvbmUgKi8KLSAgICAgICAgICAgIH0KLQkgICAgcmV0ID0gKCoodHJhcGgtPmhhbmRsZXIpKShwZHUsIHRyYW5zcG9ydCwgdHJhcGgpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9GSU5JU0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAocmV0ID09IE5FVFNOTVBUUkFQRF9IQU5ETEVSX0JSRUFLKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLQl9CisgICAgICAgICAgICAgICAgcmV0ID0gKCoodHJhcGgtPmhhbmRsZXIpKShwZHUsIHRyYW5zcG9ydCwgdHJhcGgpOworICAgICAgICAgICAgICAgIGlmKE5FVFNOTVBUUkFQRF9IQU5ETEVSX0ZJTklTSCA9PSByZXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfQlJFQUspCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBtb3ZlIG9uIHRvIG5leHQgdHlwZSAqLworICAgICAgICAgICAgfSAvKiB0cmFwaCAqLworICAgICAgICB9IC8qIGhhbmRsZXJzICovCiAKLSAgICAgICAgLyoKLQkgKiAgZCkgb3RoZXIgZ2xvYmFsIGhhbmRsZXJzCi0JICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdHJhcGQiLCAiUnVubmluZyBnbG9iYWwgaGFuZGxlcnNcbiIpKTsKLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX3Bvc3RfZ2xvYmFsX3RyYXBoYW5kbGVyczsKLQl3aGlsZSAodHJhcGgpIHsKLSAgICAgICAgICAgIGlmICghbmV0c25tcF90cmFwZF9jaGVja19hdXRoKHRyYXBoLT5hdXRodHlwZXMpKSB7Ci0gICAgICAgICAgICAgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIHdlIGNvbnRpbnVlIG9uIGFuZCBza2lwIHRoaXMgb25lICovCi0gICAgICAgICAgICB9Ci0JICAgIHJldCA9ICgqKHRyYXBoLT5oYW5kbGVyKSkocGR1LCB0cmFuc3BvcnQsIHRyYXBoKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfRklOSVNIKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9CUkVBSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0JfQogCiAJaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19JTkZPUk0pIHsKIAkgICAgbmV0c25tcF9wZHUgKnJlcGx5ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmggYi9hcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oCmluZGV4IDkyMTJkMTIuLjA5N2MwMmQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmgKKysrIGIvYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaApAQCAtMzUsNiArMzUsNyBAQAogTmV0c25tcF9UcmFwX0hhbmRsZXIgICBmb3J3YXJkX2hhbmRsZXI7CiBOZXRzbm1wX1RyYXBfSGFuZGxlciAgIGF4Zm9yd2FyZF9oYW5kbGVyOwogTmV0c25tcF9UcmFwX0hhbmRsZXIgICBub3RpZmljYXRpb25faGFuZGxlcjsKK05ldHNubXBfVHJhcF9IYW5kbGVyICAgbXlzcWxfaGFuZGxlcjsKIAogdm9pZCBmcmVlX3RyYXAxX2ZtdCh2b2lkKTsKIHZvaWQgZnJlZV90cmFwMl9mbXQodm9pZCk7CkBAIC00NCw2ICs0NSw3IEBACiAjZGVmaW5lIE5FVFNOTVBUUkFQRF9BVVRIX0hBTkRMRVIgICAgMQogI2RlZmluZSBORVRTTk1QVFJBUERfUFJFX0hBTkRMRVIgICAgIDIKICNkZWZpbmUgTkVUU05NUFRSQVBEX1BPU1RfSEFORExFUiAgICAzCisjZGVmaW5lIE5FVFNOTVBUUkFQRF9ERUZBVUxUX0hBTkRMRVIgNAogCiAjZGVmaW5lIE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LICAgICAgMQkvKiBTdWNjZWVkLCAmIGtlZXAgZ29pbmcgKi8KICNkZWZpbmUgTkVUU05NUFRSQVBEX0hBTkRMRVJfRkFJTCAgICAyCS8qIEZhaWxlZCBidXQga2VlcCBnb2luZyAqLwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdHJhcGRfbG9nLmMgYi9hcHBzL3NubXB0cmFwZF9sb2cuYwppbmRleCBiYzBiMWUzLi43NzRmNzk3IDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFwZF9sb2cuYworKysgYi9hcHBzL3NubXB0cmFwZF9sb2cuYwpAQCAtNDAsOSArNDAsNyBAQAogI2lmIEhBVkVfU1lTX1dBSVRfSAogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLSU9fSApAQCAtMTA2LDcgKzEwNCw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAgICAgIGNtZDsgICAgICAgIC8qIHRoZSBmb3JtYXQgY29tbWFuZCBpdHNlbGYgKi8KICAgICBzaXplX3QgICAgICAgICAgd2lkdGg7ICAgICAgLyogdGhlIGZpZWxkJ3MgbWluaW11bSB3aWR0aCAqLwotICAgIHNpemVfdCAgICAgICAgICBwcmVjaXNpb247ICAvKiB0aGUgZmllbGQncyBwcmVjaXNpb24gKi8KKyAgICBpbnQgICAgICAgICAgICAgcHJlY2lzaW9uOyAgLyogdGhlIGZpZWxkJ3MgcHJlY2lzaW9uICovCiAgICAgaW50ICAgICAgICAgICAgIGxlZnRfanVzdGlmeTsgICAgICAgLyogaWYgdHJ1ZSwgbGVmdCBqdXN0aWZ5IHRoaXMgZmllbGQgKi8KICAgICBpbnQgICAgICAgICAgICAgYWx0X2Zvcm1hdDsgLyogaWYgdHJ1ZSwgZGlzcGxheSBpbiBhbHRlcm5hdGUgZm9ybWF0ICovCiAgICAgaW50ICAgICAgICAgICAgIGxlYWRpbmdfemVyb2VzOyAgICAgLyogaWYgdHJ1ZSwgZGlzcGxheSB3aXRoIGxlYWRpbmcgemVyb2VzICovCkBAIC0zNzAsNyArMzY4LDcgQEAKICAgICB0ZW1wX3RvX3dyaXRlID0gdGVtcF9sZW47CiAKICAgICBpZiAob3B0aW9ucy0+cHJlY2lzaW9uICE9IFVOREVGX1BSRUNJU0lPTiAmJgotICAgICAgICB0ZW1wX3RvX3dyaXRlID4gb3B0aW9ucy0+cHJlY2lzaW9uKSB7CisgICAgICAgIHRlbXBfdG9fd3JpdGUgPiAoc2l6ZV90KW9wdGlvbnMtPnByZWNpc2lvbikgewogICAgICAgICB0ZW1wX3RvX3dyaXRlID0gb3B0aW9ucy0+cHJlY2lzaW9uOwogICAgIH0KIApAQCAtNjE5LDggKzYxNywxMCBAQAogICAgIGNoYXIgICAgICAgICAgICBmbXRfY21kID0gb3B0aW9ucy0+Y21kOyAgICAgLyogd2hhdCB3ZSdyZSBmb3JtYXR0aW5nICovCiAgICAgdV9jaGFyICAgICAgICAgKnRlbXBfYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgdGVtcF9idWZfbGVuID0gNjQsIHRlbXBfb3V0X2xlbiA9IDA7CisgICAgY2hhciAgICAgICAgICAgKnRzdHI7CisgICAgdW5zaWduZWQgaW50ICAgIG9mbGFnczsKIAotICAgIGlmICgodGVtcF9idWYgPSBjYWxsb2ModGVtcF9idWZfbGVuLCAxKSkgPT0gTlVMTCkgeworICAgIGlmICgodGVtcF9idWYgPSAodV9jaGFyKiljYWxsb2ModGVtcF9idWZfbGVuLCAxKSkgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTY0OCwxMSArNjQ4LDExIEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUF9OVU1FUklDX0lQKSkgewotICAgICAgICAgICAgaG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikgcGR1LT5hZ2VudF9hZGRyLCA0LCBBRl9JTkVUKTsKKyAgICAgICAgICAgIGhvc3QgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKGNoYXIgKikgcGR1LT5hZ2VudF9hZGRyLCA0LCBBRl9JTkVUKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaG9zdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0KCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKWhvc3QtPmhfbmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKWhvc3QtPmhfbmFtZSkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVtcF9idWYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKICAgICAgICAgICAgICAgICB9CkBAIC02NzQsMTMwICs2NzQsNTkgQEAKICAgICAgICAgICogV3JpdGUgdGhlIG51bWVyaWNhbCB0cmFuc3BvcnQgaW5mb3JtYXRpb24uICAKICAgICAgICAgICovCiAgICAgICAgIGlmICh0cmFuc3BvcnQgIT0gTlVMTCAmJiB0cmFuc3BvcnQtPmZfZm10YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAqdHN0ciA9Ci0gICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQKLSAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLCAodV9jaGFyICopdHN0cikpIHsKLSAgICAgICAgICAgICAgICBpZiAodHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodHN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mbGFncyA9IHRyYW5zcG9ydC0+ZmxhZ3M7CisgICAgICAgICAgICB0cmFuc3BvcnQtPmZsYWdzICY9IH5ORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0hPU1ROQU1FOworICAgICAgICAgICAgdHN0ciA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7CisgICAgICAgICAgICB0cmFuc3BvcnQtPmZsYWdzID0gb2ZsYWdzOworICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0c3RyKSBnb3RvIG5vaXA7CisgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0KCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgKHVfY2hhciAqKXRzdHIpKSB7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRlbXBfYnVmKTsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodHN0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnJlZSh0c3RyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNOTVBfRlJFRSh0c3RyKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQKLSAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAotICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyKikiPFVOS05PV04+IikpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcF9idWYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKLSAgICAgICAgICAgICAgICB9Citub2lwOgorICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdCgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSI8VU5LTk9XTj4iKSkgeworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0ZW1wX2J1Zik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogV3JpdGUgYSBob3N0IG5hbWUuICAKLSAgICAgICAgICovCiAgICAgY2FzZSBDSFJfUERVX05BTUU6CiAgICAgICAgIC8qCi0gICAgICAgICAqIFJpZ2h0LCBhcHBhcmVudGx5IGEgbmFtZSBsb29rdXAgaXMgd2FudGVkLiAgVGhpcyBpcyBvbmx5IHJlYXNvbmFibGUKLSAgICAgICAgICogZm9yIHRoZSBVRFAgYW5kIFRDUCB0cmFuc3BvcnQgZG9tYWlucyAod2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8gYmUKLSAgICAgICAgICogdG9vIGNsZXZlciBoZXJlKS4gIAorICAgICAgICAgKiBUcnkgdG8gY29udmVydCB0aGUgbnVtZXJpY2FsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbgorICAgICAgICAgKiAgaW50byBhIGhvc3RuYW1lLiAgT3IgcmF0aGVyLCBoYXZlIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMKKyAgICAgICAgICogIGFkZHJlc3MgZm9ybWF0dGluZyByb3V0aW5lIGRvIHRoaXMuCisgICAgICAgICAqIE90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHRoZSBudW1lcmljIGFkZHJlc3MgZm9ybWF0LgogICAgICAgICAgKi8KLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCi0gICAgICAgIGlmICh0cmFuc3BvcnQgIT0gTlVMTCAmJiAodHJhbnNwb3J0LT5kb21haW4gPT0gbmV0c25tcFVEUERvbWFpbiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC0+ZG9tYWluID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zbm1wVENQRG9tYWluKSkgewotI2Vsc2UKLSAgICAgICAgaWYgKHRyYW5zcG9ydCAhPSBOVUxMICYmIHRyYW5zcG9ydC0+ZG9tYWluID09IG5ldHNubXBVRFBEb21haW4pIHsKLSNlbmRpZgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMga2luZCBvZiBibGV0Y2hlcm91cyAtLSBpdCBicmVha3MgdGhlIG9wYWNpdHkgb2YKLSAgICAgICAgICAgICAqIHRyYW5zcG9ydF9kYXRhIGJ1dCBuZXZlciBtaW5kIC0tIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIGxvdCBvZgotICAgICAgICAgICAgICogbXVuZ2luZyBzdHJpbmdzIGZyb20gZl9mbXRhZGRyLiAgCi0gICAgICAgICAgICAgKi8KLXR5cGVkZWYgc3RydWN0IG5ldHNubXBfdWRwX2FkZHJfcGFpcl9zIHsgICAvKiBGcm9tIHNubXBVRFBEb21haW4uYyAqLwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKLSAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyOwotfSBuZXRzbm1wX3VkcF9hZGRyX3BhaXI7Ci0KLSAgICAgICAgICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkciA9Ci0gICAgICAgICAgICAgICAgKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBwZHUtPnRyYW5zcG9ydF9kYXRhOwotICAgICAgICAgICAgaWYgKGFkZHIgIT0gTlVMTAotICAgICAgICAgICAgICAgICYmIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoID09Ci0gICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQX05VTUVSSUNfSVApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhvc3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSAmKGFkZHItPnJlbW90ZV9hZGRyLnNpbl9hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgQUZfSU5FVCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChob3N0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICAgICAgICAgKCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopaG9zdC0+aF9uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICAgICAgICAgKCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopaW5ldF9udG9hKGFkZHItPnJlbW90ZV9hZGRyLnNpbl9hZGRyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0ZW1wX2J1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciopIjxVTktOT1dOPiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodHJhbnNwb3J0ICE9IE5VTEwgJiYgdHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNvbWUgb3RoZXIgZG9tYWluIGZvciB3aGljaCB3ZSBkbyBub3Qga25vdyBob3cgdG8gZG8gYSBuYW1lCi0gICAgICAgICAgICAgKiBsb29rdXAuICBGYWxsIGJhY2sgdG8gdGhlIGZvcm1hdHRlZCB0cmFuc3BvcnQgYWRkcmVzcy4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjaGFyICAgICAgICAgICAqdHN0ciA9Ci0gICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQKLSAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLCAodV9jaGFyICopdHN0cikpIHsKLSAgICAgICAgICAgICAgICBpZiAodHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodHN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHRyYW5zcG9ydCAhPSBOVUxMICYmIHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG9mbGFncyA9IHRyYW5zcG9ydC0+ZmxhZ3M7CisgICAgICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBfTlVNRVJJQ19JUCkpCisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0hPU1ROQU1FOworICAgICAgICAgICAgdHN0ciA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7CisgICAgICAgICAgICB0cmFuc3BvcnQtPmZsYWdzID0gb2ZsYWdzOworICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0c3RyKSBnb3RvIG5vaG9zdDsKKyAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAodV9jaGFyICopdHN0cikpIHsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodGVtcF9idWYpOworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0c3RyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0c3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHRzdHIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgU05NUF9GUkVFKHRzdHIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFdlIGFyZSBraW5kIG9mIHN0dWNrISAgCi0gICAgICAgICAgICAgKi8KK25vaG9zdDoKICAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyKikiPFVOS05PV04+IikpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcF9idWYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRlbXBfYnVmKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODY0LDcgKzc5Myw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlIHRoZSBjb250ZXh0IG9pZC4gIAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKCFzcHJpbnRfcmVhbGxvY19vYmppZAorICAgICAgICBpZiAoIXNwcmludF9yZWFsbG9jX2hleHN0cmluZwogICAgICAgICAgICAgKCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwgMSwgcGR1LT5jb250ZXh0RW5naW5lSUQsCiAgICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURMZW4pKSB7CiAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKQEAgLTEwNjQsOSArOTkzLDkgQEAKICAgICBjaGFyICAgICAgICAgICAgZm10X2NtZCA9IG9wdGlvbnMtPmNtZDsgICAgIC8qIHdoYXQgd2UncmUgb3V0cHV0dGluZyAqLwogICAgIHVfY2hhciAgICAgICAgICp0ZW1wX2J1ZiA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIHRidWZfbGVuID0gNjQ7Ci0gICAgaW50ICAgICAgICAgICAgIGk7CisgICAgdW5zaWduZWQgaW50ICAgIGk7CiAKLSAgICBpZiAoKHRlbXBfYnVmID0gY2FsbG9jKHRidWZfbGVuLCAxKSkgPT0gTlVMTCkgeworICAgIGlmICgodGVtcF9idWYgPSAodV9jaGFyKiljYWxsb2ModGJ1Zl9sZW4sIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTIzMCw3ICsxMTU5LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwZHUtPnNlY3VyaXR5TmFtZUxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNwcmludChwZHUtPnNlY3VyaXR5TmFtZVtpXSkpIHsKKyAgICAgICAgICAgIGlmIChpc3ByaW50KCh1bnNpZ25lZCBjaGFyKShwZHUtPnNlY3VyaXR5TmFtZVtpXSkpKSB7CiAgICAgICAgICAgICAgICAgKigqYnVmICsgKm91dF9sZW4pID0gcGR1LT5zZWN1cml0eU5hbWVbaV07CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICooKmJ1ZiArICpvdXRfbGVuKSA9ICcuJzsKQEAgLTEyNTIsNyArMTE4MSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGR1LT5jb250ZXh0TmFtZUxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNwcmludChwZHUtPmNvbnRleHROYW1lW2ldKSkgeworICAgICAgICAgICAgaWYgKGlzcHJpbnQoKHVuc2lnbmVkIGNoYXIpKHBkdS0+Y29udGV4dE5hbWVbaV0pKSkgewogICAgICAgICAgICAgICAgICooKmJ1ZiArICpvdXRfbGVuKSA9IHBkdS0+Y29udGV4dE5hbWVbaV07CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICooKmJ1ZiArICpvdXRfbGVuKSA9ICcuJzsKQEAgLTE0MzksNyArMTM2OCw3IEBACiAgICAgICovCiAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUF9OVU1FUklDX0lQKSkgewotICAgICAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSBwZHUtPmFnZW50X2FkZHIsIDQsIEFGX0lORVQpOworICAgICAgICBob3N0ID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKChjaGFyICopIHBkdS0+YWdlbnRfYWRkciwgNCwgQUZfSU5FVCk7CiAgICAgfQogICAgIGlmIChob3N0ICE9IChzdHJ1Y3QgaG9zdGVudCAqKSBOVUxMKSB7CiAgICAgICAgIGlmICghc25tcF9zdHJjYXQKQEAgLTE3ODgsNyArMTcxNyw3IEBACiAgICAgICAgICAgICAgKiBQYXJzaW5nIGEgd2lkdGggZmllbGQuICAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmVzZXRfb3B0aW9ucyA9IFRSVUU7Ci0gICAgICAgICAgICBpZiAoaXNkaWdpdChuZXh0X2NocikpIHsKKyAgICAgICAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShuZXh0X2NocikpKSB7CiAgICAgICAgICAgICAgICAgb3B0aW9ucy53aWR0aCAqPSAxMDsKICAgICAgICAgICAgICAgICBvcHRpb25zLndpZHRoICs9CiAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBuZXh0X2NociAtICh1bnNpZ25lZCBsb25nKSAnMCc7CkBAIC0xODE5LDcgKzE3NDgsNyBAQAogICAgICAgICAgICAgICogUGFyc2luZyBhIHByZWNpc2lvbiBmaWVsZC4gIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXNldF9vcHRpb25zID0gVFJVRTsKLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KG5leHRfY2hyKSkgeworICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKG5leHRfY2hyKSkpIHsKICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wcmVjaXNpb24gPT0gVU5ERUZfUFJFQ0lTSU9OKSB7CiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJlY2lzaW9uID0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBuZXh0X2NociAtICh1bnNpZ25lZCBsb25nKSAnMCc7CkBAIC0xODMwLDggKzE3NTksOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfZm10X2NtZChuZXh0X2NocikpIHsKICAgICAgICAgICAgICAgICBvcHRpb25zLmNtZCA9IG5leHRfY2hyOwotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndpZHRoIDwgb3B0aW9ucy5wcmVjaXNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53aWR0aCA9IG9wdGlvbnMucHJlY2lzaW9uOworICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucy5wcmVjaXNpb24gIT0gVU5ERUZfUFJFQ0lTSU9OKSAmJgorICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy53aWR0aCA8IChzaXplX3Qpb3B0aW9ucy5wcmVjaXNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud2lkdGggPSAoc2l6ZV90KW9wdGlvbnMucHJlY2lzaW9uOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NfZGlzcGF0Y2hfZm9ybWF0X2NtZAogICAgICAgICAgICAgICAgICAgICAoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLCAmb3B0aW9ucywgcGR1LApkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdHJhcGRfc3FsLmMgYi9hcHBzL3NubXB0cmFwZF9zcWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFlNTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9zbm1wdHJhcGRfc3FsLmMKQEAgLTAsMCArMSwxMTIwIEBACisvKgorICogRmlsZSAgICAgICA6IHNubXB0cmFwZF9zcWwKKyAqIEF1dGhvciAgICAgOiBSb2JlcnQgU3RvcnkKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOSBTY2llbmNlIExvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgaGFuZGxlciBmb3Igc25tcHRyYXBkIHdoaWNoIHdpbGwgY2FjaGUgaW5jb21pbmcKKyAqIHRyYXBzIGFuZCB0aGVuIHdyaXRlIHRoZW0gdG8gYSBNeVNRTCBkYXRhYmFzZS4KKyAqCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaWZkZWYgTkVUU05NUF9VU0VfTVlTUUwKKworI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgInNubXB0cmFwZF9oYW5kbGVycy5oIgorI2luY2x1ZGUgInNubXB0cmFwZF9hdXRoLmgiCisjaW5jbHVkZSAic25tcHRyYXBkX2xvZy5oIgorCisvKgorICogU1FMIGluY2x1ZGVzCisgKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorI3VuZGVmIFBBQ0tBR0VfTkFNRQorI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisjaW5jbHVkZSA8bXlfZ2xvYmFsLmg+CisjaW5jbHVkZSA8bXlfc3lzLmg+CisjaW5jbHVkZSA8bXlzcWwuaD4KKyNpbmNsdWRlIDxlcnJtc2cuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZpZm8pCisKKy8qCisgKiBkZWZpbmUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgdGhlIGZpbGUgZ2xvYmFscworICovCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3NxbF9nbG9iYWxzX3QgeworICAgIGNoYXIgICAgICAgICpob3N0X25hbWU7ICAgICAgIC8qIHNlcnZlciBob3N0IChkZWY9bG9jYWxob3N0KSAqLworICAgIGNoYXIgICAgICAgICp1c2VyX25hbWU7ICAgICAgIC8qIHVzZXJuYW1lIChkZWY9bG9naW4gbmFtZSkgKi8KKyAgICBjaGFyICAgICAgICAqcGFzc3dvcmQ7ICAgICAgICAvKiBwYXNzd29yZCAoZGVmPW5vbmUpICovCisgICAgdV9pbnQgICAgICAgIHBvcnRfbnVtOyAgICAgICAgLyogcG9ydCBudW1iZXIgKGJ1aWx0LWluIHZhbHVlKSAqLworICAgIGNoYXIgICAgICAgICpzb2NrZXRfbmFtZTsgICAgIC8qIHNvY2tldCBuYW1lIChidWlsdC1pbiB2YWx1ZSkgKi8KKyAgICBjb25zdCBjaGFyICAqZGJfbmFtZTsgICAgICAgICAvKiBkYXRhYmFzZSBuYW1lIChkZWY9bm9uZSkgKi8KKyAgICB1X2ludCAgICAgICAgZmxhZ3M7ICAgICAgICAgICAvKiBjb25uZWN0aW9uIGZsYWdzIChub25lKSAqLworICAgIE1ZU1FMICAgICAgICpjb25uOyAgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gKi8KKyAgICB1X2NoYXIgICAgICAgY29ubmVjdGVkOyAgICAgICAvKiBjb25uZWN0ZWQgZmxhZyAqLworICAgIGNvbnN0IGNoYXIgICpncm91cHNbM107CisgICAgTVlTUUxfU1RNVCAgKnRyYXBfc3RtdCwgKnZiX3N0bXQ7IC8qIHByZXBhcmVkIHN0YXRlbWVudHMgKi8KKyAgICB1X2ludCAgICAgICAgYWxhcm1faWQ7ICAgICAgICAvKiBpZCBvZiBwZXJpb2RpYyBzYXZlIGFsYXJtICovCisgICAgbmV0c25tcF9jb250YWluZXIgKnF1ZXVlOyAgICAgLyogY29udGFpbmVyOyB0cmFwcyBwZW5kaW5nIGRhdGFiYXNlIHdyaXRlICovCisgICAgdV9pbnQgICAgICAgIHF1ZXVlX21heDsgICAgICAgLyogYXV0byBzYXZlIHF1ZXVlIHdoZW4gaXQgZ2V0cyB0aGlzIGJpZyAqLworICAgIGludCAgICAgICAgICBxdWV1ZV9pbnRlcnZhbDsgIC8qIGF1dG8gc2F2ZSBldmVyeSBOIHNlY29uZHMgKi8KK30gbmV0c25tcF9zcWxfZ2xvYmFsczsKKworc3RhdGljIG5ldHNubXBfc3FsX2dsb2JhbHMgX3NxbCA9IHsKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIGhvc3QgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIHVzZXJuYW1lICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBwYXNzd29yZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogcG9ydCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogc29ja2V0ICovCisgICAgIm5ldF9zbm1wIiwgICAgICAgICAgICAvKiBkYXRhYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogY29ubiBmbGFncyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGVkICovCisgICAgeyAiY2xpZW50IiwgInNubXB0cmFwZCIsIE5VTEwgfSwgIC8qIGdyb3VwcyB0byByZWFkIGZyb20gLm15LmNuZiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogdHJhcF9zdG10ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiB2Yl9zdG10ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhbGFybV9pZCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogcXVldWUgKi8KKyAgICAxLCAgICAgICAgICAgICAgICAgICAgIC8qIHF1ZXVlX21heCAqLworICAgIC0xICAgICAgICAgICAgICAgICAgICAgLyogcXVldWVfaW50ZXJ2YWwgKi8KK307CisKKy8qCisgKiBsb2cgdHJhcHMgYXMgdGV4dCwgb3IgYmluYXJ5IGJsb2JzPworICovCisjZGVmaW5lIE5FVFNOTVBfTVlTUUxfVFJBUF9WQUxVRV9URVhUIDEKKworLyoKKyAqIFdlIHdpbGwgYmUgdXNpbmcgcHJlcGFyZWQgc3RhdGVtZW50cyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcworICogcmVxdWlyZXMgYSBzcWwgYmluZCBzdHJ1Y3R1cmUgZm9yIGVhY2ggY2VsbCB0byBiZSBpbnNlcnRlZCBpbiB0aGUKKyAqIGRhdGFiYXNlLiBXZSB3aWxsIGJlIHVzaW5nIDIgZ2xvYmFsIHN0YXRpYyBzdHJ1Y3R1cmVzIHRvIGJpbmQgdG8sCisgKiBhbmQgYSBuZXRzbm1wIGNvbnRhaW5lciB0byBzdG9yZSB0aGUgbmVjZXNzYXJ5IGRhdGEgdW50aWwgaXQgaXMKKyAqIHdyaXR0ZW4gdG8gdGhlIGRhdGFiYXNlLiBGaXhlZCBzaXplIGJ1ZmZlcnMgYXJlIGFsc28gdXNlZCB0bworICogc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQuCisgKi8KKy8qKiBlbnVtcyBmb3IgdGhlIHRyYXAgZmllbGRzIHRvIGJlIGJvdW5kICovCitlbnVteworICAgIFRCSU5EX0RBVEUgPSAwLCAgICAgICAgICAgLyogdGltZSByZWNlaXZlZCAqLworICAgIFRCSU5EX0hPU1QsICAgICAgICAgICAgICAgLyogc3JjIGlwICovCisgICAgVEJJTkRfVVNFUiwgICAgICAgICAgICAgICAvKiBhdXRoL3VzZXIgaW5mb3JtYXRpb24gKi8KKyAgICBUQklORF9UWVBFLCAgICAgICAgICAgICAgIC8qIHBkdSB0eXBlICovCisgICAgVEJJTkRfVkVSLCAgICAgICAgICAgICAgICAvKiBzbm1wIHZlcnNpb24gKi8KKyAgICBUQklORF9SRVFJRCwgICAgICAgICAgICAgIC8qIHJlcXVlc3QgaWQgKi8KKyAgICBUQklORF9PSUQsICAgICAgICAgICAgICAgIC8qIHRyYXAgT0lEICovCisgICAgVEJJTkRfVFJBTlNQT1JULCAgICAgICAgICAvKiB0cmFuc3BvcnQgKi8KKyAgICBUQklORF9TRUNVUklUWV9NT0RFTCwgICAgIC8qIHNlY3VyaXR5IG1vZGVsICovCisgICAgVEJJTkRfdjNfTVNHSUQsICAgICAgICAgICAvKiB2MyBtc2cgaWQgKi8KKyAgICBUQklORF92M19TRUNVUklUWV9MRVZFTCwgIC8qIHNlY3VyaXR5IGxldmVsICovCisgICAgVEJJTkRfdjNfQ09OVEVYVF9OQU1FLCAgICAvKiBjb250ZXh0ICovCisgICAgVEJJTkRfdjNfQ09OVEVYVF9FTkdJTkUsICAvKiBjb250ZXh0IGVuZ2luZSBpZCAqLworICAgIFRCSU5EX3YzX1NFQ1VSSVRZX05BTUUsICAgLyogc2VjdXJpdHkgbmFtZSAqLworICAgIFRCSU5EX3YzX1NFQ1VSSVRZX0VOR0lORSwgLyogc2VjdXJpdHkgZW5naW5lIGlkICovCisgICAgVEJJTkRfTUFYCit9OworCisvKiogZW51bXMgZm9yIHRoZSB2YXJiaW5kIGZpZWxkcyB0byBiZSBib3VuZCAqLworZW51bSB7CisgICAgVkJJTkRfSUQgPSAwLCAgICAgICAgICAgICAvKiB0cmFwX2lkICovCisgICAgVkJJTkRfT0lELCAgICAgICAgICAgICAgICAvKiB2YXJiaW5kIG9pZCAqLworICAgIFZCSU5EX1RZUEUsICAgICAgICAgICAgICAgLyogdmFyYmluZCB0eXBlICovCisgICAgVkJJTkRfVkFMLCAgICAgICAgICAgICAgICAvKiB2YXJiaW5kIHZhbHVlICovCisgICAgVkJJTkRfTUFYCit9OworCisvKiogYnVmZmVyIHN0cnVjdCBmb3IgdmFyYmluZCBkYXRhICovCit0eXBlZGVmIHN0cnVjdCBzcWxfdmJfYnVmX3QgeworCisgICAgY2hhciAgICAgICpvaWQ7CisgICAgdV9sb25nICAgICBvaWRfbGVuOworCisgICAgdV9jaGFyICAgICp2YWw7CisgICAgdV9sb25nICAgICB2YWxfbGVuOworCisgICAgdWludDE2X3QgICB0eXBlOworCit9IHNxbF92Yl9idWY7CisKKy8qKiBidWZmZXIgc3RydWN0IGZvciB0cmFwIGRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IHNxbF9idWZfdCB7CisgICAgY2hhciAgICAgICpob3N0OworICAgIHVfbG9uZyAgICAgaG9zdF9sZW47CisKKyAgICBjaGFyICAgICAgKm9pZDsKKyAgICB1X2xvbmcgICAgIG9pZF9sZW47CisKKyAgICBjaGFyICAgICAgKnVzZXI7CisgICAgdV9sb25nICAgICB1c2VyX2xlbjsKKworICAgIE1ZU1FMX1RJTUUgdGltZTsKKyAgICB1aW50MTZfdCAgIHZlcnNpb24sIHR5cGU7CisgICAgdWludDMyX3QgICByZXFpZDsKKworICAgIGNoYXIgICAgICAqdHJhbnNwb3J0OworICAgIHVfbG9uZyAgICAgdHJhbnNwb3J0X2xlbjsKKworICAgIHVpbnQxNl90ICAgc2VjdXJpdHlfbGV2ZWwsIHNlY3VyaXR5X21vZGVsOworICAgIHVpbnQzMl90ICAgbXNnaWQ7CisKKyAgICBjaGFyICAgICAgKmNvbnRleHQ7CisgICAgdV9sb25nICAgICBjb250ZXh0X2xlbjsKKworICAgIGNoYXIgICAgICAqY29udGV4dF9lbmdpbmU7CisgICAgdV9sb25nICAgICBjb250ZXh0X2VuZ2luZV9sZW47CisKKyAgICBjaGFyICAgICAgKnNlY3VyaXR5X25hbWU7CisgICAgdV9sb25nICAgICBzZWN1cml0eV9uYW1lX2xlbjsKKworICAgIGNoYXIgICAgICAqc2VjdXJpdHlfZW5naW5lOworICAgIHVfbG9uZyAgICAgc2VjdXJpdHlfZW5naW5lX2xlbjsKKworICAgIG5ldHNubXBfY29udGFpbmVyICp2YXJiaW5kczsKKworICAgIGNoYXIgICAgICAgbG9nZ2VkOworfSBzcWxfYnVmOworCisvKgorICogc3RhdGljIGJpbmQgc3RydWN0dXJlcywgcGx1cyAyIHN0YXRpYyBidWZmZXJzIHRvIGJpbmQgdG8uCisgKi8KK3N0YXRpYyBNWVNRTF9CSU5EIF90YmluZFtUQklORF9NQVhdLCBfdmJpbmRbVkJJTkRfTUFYXTsKK3N0YXRpYyBteV9ib29sICAgIF9ub192MzsKKworc3RhdGljIHZvaWQgX3NxbF9wcm9jZXNzX3F1ZXVlKHVfaW50IGRvbnRjYXJlLCB2b2lkICptZWVpdGhlcik7CisKKy8qCisgKiBwYXJzZSB0aGUgc3FsTWF4UXVldWUgY29uZmlndXJhdGlvbiB0b2tlbgorICovCitzdGF0aWMgdm9pZAorX3BhcnNlX3F1ZXVlX2ZtdChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgICBfc3FsLnF1ZXVlX21heCA9IGF0b2koY3B0cik7CisgICAgREVCVUdNU0dUTCgoInNxbDpxdWV1ZSIsInF1ZXVlIG1heCBub3cgJWRcbiIsIF9zcWwucXVldWVfbWF4KSk7Cit9CisKKy8qCisgKiBwYXJzZSB0aGUgc3FsU2F2ZUludGVydmFsIGNvbmZpZ3VyYXRpb24gdG9rZW4KKyAqLworc3RhdGljIHZvaWQKK19wYXJzZV9pbnRlcnZhbF9mbXQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgICAgX3NxbC5xdWV1ZV9pbnRlcnZhbCA9IGF0b2koY3B0cik7CisgICAgREVCVUdNU0dUTCgoInNxbDpxdWV1ZSIsInF1ZXVlIGludGVydmFsIG5vdyAlZCBzZWNvbmRzXG4iLAorICAgICAgICAgICAgICAgIF9zcWwucXVldWVfaW50ZXJ2YWwpKTsKK30KKworLyoKKyAqIHJlZ2lzdGVyIHNxbCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gdG9rZW5zCisgKi8KK3ZvaWQKK3NubXB0cmFwZF9yZWdpc3Rlcl9zcWxfY29uZmlncyggdm9pZCApCit7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXB0cmFwZCIsICJzcWxNYXhRdWV1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhcnNlX3F1ZXVlX2ZtdCwgTlVMTCwgImludGVnZXIiKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgInNxbFNhdmVJbnRlcnZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhcnNlX2ludGVydmFsX2ZtdCwgTlVMTCwgInNlY29uZHMiKTsKK30KKworc3RhdGljIHZvaWQKK25ldHNubXBfc3FsX2Rpc2Nvbm5lY3RlZCh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJzcWw6Y29ubmVjdGlvbiIsImRpc2Nvbm5lY3RlZFxuIikpOworCisgICAgX3NxbC5jb25uZWN0ZWQgPSAwOworCisgICAgLyoqIHJlbGVhc2UgcHJlcGFyZWQgc3RhdGVtZW50cyAqLworICAgIGlmIChfc3FsLnRyYXBfc3RtdCkgeworICAgICAgICBteXNxbF9zdG10X2Nsb3NlKF9zcWwudHJhcF9zdG10KTsKKyAgICAgICAgX3NxbC50cmFwX3N0bXQgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX3NxbC52Yl9zdG10KSB7CisgICAgICAgIG15c3FsX3N0bXRfY2xvc2UoX3NxbC52Yl9zdG10KTsKKyAgICAgICAgX3NxbC52Yl9zdG10ID0gTlVMTDsKKyAgICB9Cit9CisKKy8qCisgKiBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBsb2cgbXlzcWwgZXJyb3JzCisgKi8KK3N0YXRpYyB2b2lkCituZXRzbm1wX3NxbF9lcnJvcihjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIHVfaW50IGVyciA9IG15c3FsX2Vycm5vKF9zcWwuY29ubik7CisgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzXG4iLCBtZXNzYWdlKTsKKyAgICBpZiAoX3NxbC5jb25uICE9IE5VTEwpIHsKKyNpZiBNWVNRTF9WRVJTSU9OX0lEID49IDQwMTAxCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciAldSAoJXMpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZXJyLCBteXNxbF9zcWxzdGF0ZShfc3FsLmNvbm4pLCBteXNxbF9lcnJvcihfc3FsLmNvbm4pKTsKKyNlbHNlCisgICAgICAgIHNubXAoTE9HX0VSUiwgIkVycm9yICV1OiAlc1xuIiwKKyAgICAgICAgICAgICBteXNxbF9lcnJubyhfc3FsLmNvbm4pLCBteXNxbF9lcnJvcihfc3FsLmNvbm4pKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoQ1JfU0VSVkVSX0dPTkVfRVJST1IgPT0gZXJyKQorICAgICAgICBuZXRzbm1wX3NxbF9kaXNjb25uZWN0ZWQoKTsKK30KKworLyoKKyAqIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvZyBteXNxbCBzdGF0ZW1lbnQgZXJyb3JzCisgKi8KK3N0YXRpYyB2b2lkCituZXRzbm1wX3NxbF9zdG10X2Vycm9yIChNWVNRTF9TVE1UICpzdG10LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIHVfaW50IGVyciA9IG15c3FsX2Vycm5vKF9zcWwuY29ubik7CisKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXNcbiIsIG1lc3NhZ2UpOworICAgIGlmIChzdG10KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTUUwgRXJyb3IgJXUgKCVzKTogJXNcbiIsCisgICAgICAgICAgICAgICAgIG15c3FsX3N0bXRfZXJybm8oc3RtdCksIG15c3FsX3N0bXRfc3Fsc3RhdGUoc3RtdCksCisgICAgICAgICAgICAgICAgIG15c3FsX3N0bXRfZXJyb3Ioc3RtdCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoQ1JfU0VSVkVSX0dPTkVfRVJST1IgPT0gZXJyKQorICAgICAgICBuZXRzbm1wX3NxbF9kaXNjb25uZWN0ZWQoKTsKK30KKworLyoKKyAqIHNxbCBjbGVhbnVwIGZ1bmN0aW9uLCBjYWxsZWQgYXQgZXhpdAorICovCitzdGF0aWMgdm9pZAorbmV0c25tcF9teXNxbF9jbGVhbnVwKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInNxbDpjbGVhbnVwIiwiIGNhbGxlZFxuIikpOworCisgICAgLyoqIHVucmVnaXN0ZXIgYWxhcm0gKi8KKyAgICBpZiAoX3NxbC5hbGFybV9pZCkKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKF9zcWwuYWxhcm1faWQpOworCisgICAgLyoqIHNhdmUgYW55IHF1ZXVlZCB0cmFwcyAqLworICAgIGlmIChDT05UQUlORVJfU0laRShfc3FsLnF1ZXVlKSkKKyAgICAgICAgX3NxbF9wcm9jZXNzX3F1ZXVlKDAsTlVMTCk7CisKKyAgICBDT05UQUlORVJfRlJFRShfc3FsLnF1ZXVlKTsKKyAgICBfc3FsLnF1ZXVlID0gTlVMTDsKKworICAgIGlmIChfc3FsLnRyYXBfc3RtdCkgeworICAgICAgICBteXNxbF9zdG10X2Nsb3NlKF9zcWwudHJhcF9zdG10KTsKKyAgICAgICAgX3NxbC50cmFwX3N0bXQgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX3NxbC52Yl9zdG10KSB7CisgICAgICAgIG15c3FsX3N0bXRfY2xvc2UoX3NxbC52Yl9zdG10KTsKKyAgICAgICAgX3NxbC52Yl9zdG10ID0gTlVMTDsKKyAgICB9CisgICAgCisgICAgLyoqIGRpc2Nvbm5lY3QgZnJvbSBzZXJ2ZXIgKi8KKyAgICBuZXRzbm1wX3NxbF9kaXNjb25uZWN0ZWQoKTsKKworICAgIGlmIChfc3FsLmNvbm4pIHsKKyAgICAgICAgbXlzcWxfY2xvc2UoX3NxbC5jb25uKTsKKyAgICAgICAgX3NxbC5jb25uID0gTlVMTDsKKyAgICB9CisKKyAgICBteXNxbF9saWJyYXJ5X2VuZCgpOworfQorCisvKgorICogc2V0dXAgKGluaXRpYWxpemUsIHByZXBhcmUgYW5kIGJpbmQpIGEgcHJlcGFyZWQgc3RhdGVtZW50CisgKi8KK3N0YXRpYyBpbnQKK25ldHNubXBfbXlzcWxfYmluZChjb25zdCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zaXplLCBNWVNRTF9TVE1UICoqc3RtdCwKKyAgICAgICAgICAgICAgICAgICBNWVNRTF9CSU5EICpiaW5kKQoreworICAgIGlmICgoTlVMTCA9PSB0ZXh0KSB8fCAoTlVMTCA9PSBzdG10KSB8fCAoTlVMTCA9PSBiaW5kKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJpbnZhbGlkIHBhcmFtYXRlcnMgdG8gbmV0c25tcF9teXNxbF9iaW5kKClcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgKnN0bXQgPSBteXNxbF9zdG10X2luaXQoX3NxbC5jb25uKTsKKyAgICBpZiAoTlVMTCA9PSAqc3RtdCkgeworICAgICAgICBuZXRzbm1wX3NxbF9lcnJvcigiY291bGQgbm90IGluaXRpYWxpemUgdHJhcCBzdGF0ZW1lbnQgaGFuZGxlciIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG15c3FsX3N0bXRfcHJlcGFyZSgqc3RtdCwgdGV4dCwgdGV4dF9zaXplKSAhPSAwKSB7CisgICAgICAgIG5ldHNubXBfc3FsX3N0bXRfZXJyb3IoKnN0bXQsICJDb3VsZCBub3QgcHJlcGFyZSBJTlNFUlQiKTsKKyAgICAgICAgbXlzcWxfc3RtdF9jbG9zZSgqc3RtdCk7CisgICAgICAgICpzdG10ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogY29ubmVjdCB0byB0aGUgZGF0YWJhc2UgYW5kIGRvIGluaXRpYWwgc2V0dXAKKyAqLworc3RhdGljIGludAorbmV0c25tcF9teXNxbF9jb25uZWN0KHZvaWQpCit7CisgICAgY2hhciB0cmFwX3N0bXRbXSA9ICJJTlNFUlQgSU5UTyBub3RpZmljYXRpb25zICIKKyAgICAgICAgIihkYXRlX3RpbWUsIGhvc3QsIGF1dGgsIHR5cGUsIHZlcnNpb24sIHJlcXVlc3RfaWQsIHNubXBUcmFwT0lELCB0cmFuc3BvcnQsIHNlY3VyaXR5X21vZGVsLCB2M21zZ2lkLCB2M3NlY3VyaXR5X2xldmVsLCB2M2NvbnRleHRfbmFtZSwgdjNjb250ZXh0X2VuZ2luZSwgdjNzZWN1cml0eV9uYW1lLCB2M3NlY3VyaXR5X2VuZ2luZSkgIgorICAgICAgICAiVkFMVUVTKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/KSI7CisgICAgY2hhciB2Yl9zdG10W10gPSAiSU5TRVJUIElOVE8gdmFyYmluZHMgIgorICAgICAgICAiKHRyYXBfaWQsIG9pZCwgdHlwZSwgdmFsdWUpIFZBTFVFUyAoPyw/LD8sPykiOworCisgICAgLyoqIGluaXRpYWxpemUgY29ubmVjdGlvbiBoYW5kbGVyICovCisgICAgaWYgKF9zcWwuY29ubmVjdGVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERFQlVHTVNHVEwoKCJzcWw6Y29ubmVjdGlvbiIsImNvbm5lY3RpbmdcbiIpKTsKKworICAgIC8qKiBjb25uZWN0IHRvIHNlcnZlciAqLworICAgIGlmIChteXNxbF9yZWFsX2Nvbm5lY3QgKF9zcWwuY29ubiwgX3NxbC5ob3N0X25hbWUsIF9zcWwudXNlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcWwucGFzc3dvcmQsIF9zcWwuZGJfbmFtZSwgX3NxbC5wb3J0X251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3FsLnNvY2tldF9uYW1lLCBfc3FsLmZsYWdzKSA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfc3FsX2Vycm9yKCJteXNxbF9yZWFsX2Nvbm5lY3QoKSBmYWlsZWQiKTsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorICAgIF9zcWwuY29ubmVjdGVkID0gMTsKKworICAgIC8qKiBkaXNhYmxlIGF1dG9jb21taXQgKi8KKyAgICBpZigwICE9IG15c3FsX2F1dG9jb21taXQoX3NxbC5jb25uLCAwKSkgeworICAgICAgICBuZXRzbm1wX3NxbF9lcnJvcigibXlzcWxfYXV0b2NvbW1pdCgwKSBmYWlsZWQiKTsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorCisgICAgbmV0c25tcF9hc3NlcnQoKF9zcWwudHJhcF9zdG10ID09IE5VTEwpICYmIChfc3FsLnZiX3N0bXQgPT0gTlVMTCkpOworCisgICAgLyoqIHByZXBhcmVkIHN0YXRlbWVudCBmb3IgaW5zZXJ0cyAqLworICAgIGlmICgwICE9IG5ldHNubXBfbXlzcWxfYmluZCh0cmFwX3N0bXQsc2l6ZW9mKHRyYXBfc3RtdCksICZfc3FsLnRyYXBfc3RtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RiaW5kKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX215c3FsX2JpbmQodmJfc3RtdCxzaXplb2YodmJfc3RtdCksJl9zcWwudmJfc3RtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZiaW5kKSkgeworICAgICAgICBteXNxbF9zdG10X2Nsb3NlKF9zcWwudHJhcF9zdG10KTsKKyAgICAgICAgX3NxbC50cmFwX3N0bXQgPSBOVUxMOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworICBlcnI6CisgICAgaWYgKF9zcWwuY29ubmVjdGVkKQorICAgICAgICBfc3FsLmNvbm5lY3RlZCA9IDA7CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qKiBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBmb3IgbXlzcWwgKi8KK2ludAorbmV0c25tcF9teXNxbF9pbml0KHZvaWQpCit7CisgICAgaW50IG5vdF9hcmdjID0gMCwgaTsKKyAgICBjaGFyICpub3RfYXJnc1tdID0geyBOVUxMIH07CisgICAgY2hhciAqKm5vdF9hcmd2ID0gbm90X2FyZ3M7CisgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICp0cmFwaDsKKworICAgIERFQlVHTVNHVEwoKCJzcWw6aW5pdCIsImNhbGxlZFxuIikpOworCisgICAgLyoqIG5lZ2F0aXZlIG9yIDAgaW50ZXJ2YWwgZGlzYWJsZXMgc3FsIGxvZ2dpbmcgKi8KKyAgICBpZiAoX3NxbC5xdWV1ZV9pbnRlcnZhbCA8PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzcWw6aW5pdCIsCisgICAgICAgICAgICAgICAgICAgICJteXNxbCBub3QgZW5hYmxlZCAoc3FsU2F2ZUludGVydmFsIGlzIDw9IDApXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKiBjcmVhdGUgcXVldWUgZm9yIHN0b3JpbmcgdHJhcHMgdGlsIHRoZXkgYXJlIHdyaXR0ZW4gdG8gdGhlIGRiICovCisgICAgX3NxbC5xdWV1ZSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImZpZm8iKTsKKyAgICBpZiAoTlVMTCA9PSBfc3FsLnF1ZXVlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgYWxsb2NhdGUgc3FsIGJ1ZiBjb250YWluZXJcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgSEFWRV9CUk9LRU5fTElCTVlTUUxDTElFTlQKKyAgICBteV9pbml0KCk7CisjZWxzZQorICAgIE1ZX0lOSVQoInNubXB0cmFwZCIpOworI2VuZGlmCisKKyAgICAvKiogbG9hZCAubXkuY25mIHZhbHVlcyAqLworICAgIGxvYWRfZGVmYXVsdHMgKCJteSIsIF9zcWwuZ3JvdXBzLCAmbm90X2FyZ2MsICZub3RfYXJndik7CisgICAgZm9yKGk9MDsgaSA8IG5vdF9hcmdjOyArK2kpIHsKKyAgICAgICAgaWYgKE5VTEwgPT0gbm90X2FyZ3ZbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHN0cm5jbXAobm90X2FyZ3ZbaV0sIi0tcGFzc3dvcmQ9IiwxMSkgPT0gMCkKKyAgICAgICAgICAgIF9zcWwucGFzc3dvcmQgPSAmbm90X2FyZ3ZbaV1bMTFdOworICAgICAgICBlbHNlIGlmIChzdHJuY21wKG5vdF9hcmd2W2ldLCItLWhvc3Q9Iiw3KSA9PSAwKQorICAgICAgICAgICAgX3NxbC5ob3N0X25hbWUgPSAmbm90X2FyZ3ZbaV1bN107CisgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAobm90X2FyZ3ZbaV0sIi0tdXNlcj0iLDcpID09IDApCisgICAgICAgICAgICBfc3FsLnVzZXJfbmFtZSA9ICZub3RfYXJndltpXVs3XTsKKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcChub3RfYXJndltpXSwiLS1wb3J0PSIsNykgPT0gMCkKKyAgICAgICAgICAgIF9zcWwucG9ydF9udW0gPSBhdG9pKCZub3RfYXJndltpXVs3XSk7CisgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAobm90X2FyZ3ZbaV0sIi0tc29ja2V0PSIsOSkgPT0gMCkKKyAgICAgICAgICAgIF9zcWwuc29ja2V0X25hbWUgPSAmbm90X2FyZ3ZbaV1bOV07CisgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAobm90X2FyZ3ZbaV0sIi0tZGF0YWJhc2U9IiwxMSkgPT0gMCkKKyAgICAgICAgICAgIF9zcWwuZGJfbmFtZSA9ICZub3RfYXJndltpXVsxMV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAidW5rbm93biBhcmd1bWVudFslZF0gJXNcbiIsIGksIG5vdF9hcmd2W2ldKTsKKyAgICB9CisKKyAgICAvKiogaW5pdCBiaW5kIHN0cnVjdHVyZXMgKi8KKyAgICBtZW1zZXQoX3RiaW5kLCAweDAsIHNpemVvZihfdGJpbmQpKTsKKyAgICBtZW1zZXQoX3ZiaW5kLCAweDAsIHNpemVvZihfdmJpbmQpKTsKKworICAgIC8qKiB0cmFwIHN0YXRpYyBiaW5kaW5ncyAqLworICAgIF90YmluZFtUQklORF9IT1NUXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworICAgIF90YmluZFtUQklORF9IT1NUXS5sZW5ndGggPSAmX3RiaW5kW1RCSU5EX0hPU1RdLmJ1ZmZlcl9sZW5ndGg7CisKKyAgICBfdGJpbmRbVEJJTkRfT0lEXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworICAgIF90YmluZFtUQklORF9PSURdLmxlbmd0aCA9ICZfdGJpbmRbVEJJTkRfT0lEXS5idWZmZXJfbGVuZ3RoOworCisgICAgX3RiaW5kW1RCSU5EX1JFUUlEXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfTE9ORzsKKyAgICBfdGJpbmRbVEJJTkRfUkVRSURdLmlzX3Vuc2lnbmVkID0gMTsKKworICAgIF90YmluZFtUQklORF9WRVJdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TSE9SVDsKKyAgICBfdGJpbmRbVEJJTkRfVkVSXS5pc191bnNpZ25lZCA9IDE7CisKKyAgICBfdGJpbmRbVEJJTkRfVFlQRV0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NIT1JUOworICAgIF90YmluZFtUQklORF9UWVBFXS5pc191bnNpZ25lZCA9IDE7CisKKyAgICBfdGJpbmRbVEJJTkRfREFURV0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX0RBVEVUSU1FOworCisgICAgX3RiaW5kW1RCSU5EX1VTRVJdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX1VTRVJdLmxlbmd0aCA9ICZfdGJpbmRbVEJJTkRfVVNFUl0uYnVmZmVyX2xlbmd0aDsKKworICAgIF90YmluZFtUQklORF9UUkFOU1BPUlRdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX1RSQU5TUE9SVF0ubGVuZ3RoID0gJl90YmluZFtUQklORF9UUkFOU1BPUlRdLmJ1ZmZlcl9sZW5ndGg7CisKKyAgICBfdGJpbmRbVEJJTkRfU0VDVVJJVFlfTU9ERUxdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TSE9SVDsKKyAgICBfdGJpbmRbVEJJTkRfU0VDVVJJVFlfTU9ERUxdLmlzX3Vuc2lnbmVkID0gMTsKKworICAgIF90YmluZFtUQklORF92M19NU0dJRF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX0xPTkc7CisgICAgX3RiaW5kW1RCSU5EX3YzX01TR0lEXS5pc191bnNpZ25lZCA9IDE7CisgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0xFVkVMXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU0hPUlQ7CisgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0xFVkVMXS5pc191bnNpZ25lZCA9IDE7CisgICAgX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfTkFNRV0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9FTkdJTkVdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX05BTUVdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX05BTUVdLmxlbmd0aCA9CisgICAgICAgICZfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTkFNRV0uYnVmZmVyX2xlbmd0aDsKKyAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9OQU1FXS5sZW5ndGggPQorICAgICAgICAmX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfTkFNRV0uYnVmZmVyX2xlbmd0aDsKKyAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfRU5HSU5FXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9FTkdJTkVdLmxlbmd0aCA9CisgICAgICAgICZfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfRU5HSU5FXS5idWZmZXJfbGVuZ3RoOworICAgIF90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0ubGVuZ3RoID0KKyAgICAgICAgJl90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0uYnVmZmVyX2xlbmd0aDsKKworICAgIF90YmluZFtUQklORF92M19NU0dJRF0uaXNfbnVsbCA9CisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9MRVZFTF0uaXNfbnVsbCA9CisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX05BTUVdLmlzX251bGwgPQorICAgICAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9FTkdJTkVdLmlzX251bGwgPQorICAgICAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTkFNRV0uaXNfbnVsbCA9CisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9FTkdJTkVdLmlzX251bGwgPSAmX25vX3YzOworICAgIAorICAgIC8qKiB2YXJpYWJsZSBzdGF0aWMgYmluZGluZ3MgKi8KKyAgICBfdmJpbmRbVkJJTkRfSURdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9MT05HOworICAgIF92YmluZFtWQklORF9JRF0uaXNfdW5zaWduZWQgPSAxOworCisgICAgX3ZiaW5kW1ZCSU5EX09JRF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdmJpbmRbVkJJTkRfT0lEXS5sZW5ndGggPSAmX3ZiaW5kW1ZCSU5EX09JRF0uYnVmZmVyX2xlbmd0aDsKKworICAgIF92YmluZFtWQklORF9UWVBFXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU0hPUlQ7CisgICAgX3ZiaW5kW1ZCSU5EX1RZUEVdLmlzX3Vuc2lnbmVkID0gMTsKKworI2lmZGVmIE5FVFNOTVBfTVlTUUxfVFJBUF9WQUxVRV9URVhUCisgICAgX3ZiaW5kW1ZCSU5EX1ZBTF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyNlbHNlCisgICAgX3ZiaW5kW1ZCSU5EX1ZBTF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX0JMT0I7CisjZW5kaWYKKyAgICBfdmJpbmRbVkJJTkRfVkFMXS5sZW5ndGggPSAmX3ZiaW5kW1ZCSU5EX1ZBTF0uYnVmZmVyX2xlbmd0aDsKKworICAgIF9zcWwuY29ubiA9IG15c3FsX2luaXQgKE5VTEwpOworICAgIGlmIChfc3FsLmNvbm4gPT0gTlVMTCkgeworICAgICAgICBuZXRzbm1wX3NxbF9lcnJvcigibXlzcWxfaW5pdCgpIGZhaWxlZCAob3V0IG9mIG1lbW9yeT8pIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogdHJ5IHRvIGNvbm5lY3Q7IHdlJ2xsIHRyeSBhZ2FpbiBsYXRlciBpZiB3ZSBmYWlsICovCisgICAgKHZvaWQpIG5ldHNubXBfbXlzcWxfY29ubmVjdCgpOworCisgICAgLyoqIHJlZ2lzdGVyIHBlcmlvZGljIHF1ZXVlIHNhdmUgKi8KKyAgICBfc3FsLmFsYXJtX2lkID0gc25tcF9hbGFybV9yZWdpc3Rlcihfc3FsLnF1ZXVlX2ludGVydmFsLCAvKiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgLyogcmVwZWF0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NxbF9wcm9jZXNzX3F1ZXVlLCAgLyogZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgICAgICAgICAgICAgICAvKiBjbGllbnQgYXJncyAqLworCisgICAgLyoqIGFkZCBoYW5kbGVyICovCisgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX1BSRV9IQU5ETEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15c3FsX2hhbmRsZXIpOworICAgIGlmIChOVUxMID09IHRyYXBoKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgYWxsb2NhdGUgc3FsIHRyYXAgaGFuZGxlclxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdHJhcGgtPmF1dGh0eXBlcyA9IFRSQVBfQVVUSF9MT0c7CisKKyAgICBhdGV4aXQobmV0c25tcF9teXNxbF9jbGVhbnVwKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGxvZyBDU1YgdmVyc2lvbiBvZiB0cmFwLgorICogZG9udGNhcmUgcGFyYW0gaXMgdGhlcmUgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5CisgKiB0byBDT05UQUlORVJfRk9SX0VBQ0guCisgKi8KK3N0YXRpYyB2b2lkCitfc3FsX2xvZyhzcWxfYnVmICpzcWxiLCB2b2lkKiBkb250Y2FyZSkKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgICAqaXQ7CisgICAgc3FsX3ZiX2J1ZiAgICAgICAgICAgKnNxbHZiOworCisgICAgaWYgKChOVUxMID09IHNxbGIpIHx8IHNxbGItPmxvZ2dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBsb2cgdHJhcCBpbmZvCisgICAgICogbm90aGluZyBkb25lIHRvIHByb3RlY3QgYWdhaW5zdCBkYXRhIGluc2VydGlvbiBhdHRhY2tzIHdpdGgKKyAgICAgKiByZXNwZWN0IHRvIGJhZCBkYXRhIChjb21tYXMsIG5ld2xpbmVzLCBldGMpCisgICAgICovCisgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAidHJhcDolZC0lZC0lZCAlZDolZDolZCwlcywlZCwlZCwlZCwlcywlcywlZCwlZCwlZCwlcywlcywlcywlc1xuIiwKKyAgICAgICAgICAgICBzcWxiLT50aW1lLnllYXIsc3FsYi0+dGltZS5tb250aCxzcWxiLT50aW1lLmRheSwKKyAgICAgICAgICAgICBzcWxiLT50aW1lLmhvdXIsc3FsYi0+dGltZS5taW51dGUsc3FsYi0+dGltZS5zZWNvbmQsCisgICAgICAgICAgICAgc3FsYi0+dXNlciwKKyAgICAgICAgICAgICBzcWxiLT50eXBlLCBzcWxiLT52ZXJzaW9uLCBzcWxiLT5yZXFpZCwgc3FsYi0+b2lkLAorICAgICAgICAgICAgIHNxbGItPnRyYW5zcG9ydCwgc3FsYi0+c2VjdXJpdHlfbW9kZWwsIHNxbGItPm1zZ2lkLAorICAgICAgICAgICAgIHNxbGItPnNlY3VyaXR5X2xldmVsLCBzcWxiLT5jb250ZXh0LAorICAgICAgICAgICAgIHNxbGItPmNvbnRleHRfZW5naW5lLCBzcWxiLT5zZWN1cml0eV9uYW1lLAorICAgICAgICAgICAgIHNxbGItPnNlY3VyaXR5X2VuZ2luZSk7CisKKyAgICBzcWxiLT5sb2dnZWQgPSAxOyAvKiBwcmV2ZW50IG11bHRpcGxlIGxvZ2dpbmcgKi8KKworICAgIGl0ID0gQ09OVEFJTkVSX0lURVJBVE9SKHNxbGItPnZhcmJpbmRzKTsKKyAgICBpZiAoTlVMTCA9PSBpdCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgaXRlcmF0b3I7IGluY29tcGxldGUgdHJhcCBsb2dnZWRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoqIGxvZyB2YXJiaW5kIGluZm8gKi8KKyAgICBmb3IoIHNxbHZiID0gSVRFUkFUT1JfRklSU1QoaXQpOyBzcWx2Yjsgc3FsdmIgPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworI2lmZGVmIE5FVFNOTVBfTVlTUUxfVFJBUF9WQUxVRV9URVhUCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsInZhcmJpbmQ6JXMsJXNcbiIsIHNxbHZiLT5vaWQsIHNxbHZiLT52YWwpOworI2Vsc2UKKyAgICAgICAgY2hhciAqaGV4OworICAgICAgICBpbnQgbGVuID0gYmluYXJ5X3RvX2hleChzcWx2Yi0+dmFsLCBzcWx2Yi0+dmFsX2xlbiwgJmhleCk7CisgICAgICAgIGlmIChoZXgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsInZhcmJpbmQ6JWQsJXMsJXNcbiIsIHNxbHZiLT5vaWQsIGhleCk7CisgICAgICAgICAgICBmcmVlKGhleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJtYWxsb2MgZmFpbGVkIGZvciB2YXJiaW5kIGhleCB2YWx1ZVxuIik7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJ2YXJiaW5kOiVzLFxuIiwgc3FsdmItPm9pZCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKyAgIAorfQorCisvKgorICogZnJlZSBhIGJ1ZmZlcgorICogZG9udGNhcmUgcGFyYW0gaXMgdGhlcmUgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5CisgKiB0byBDT05UQUlORVJfRk9SX0VBQ0guCisgKi8KK3N0YXRpYyB2b2lkCitfc3FsX3ZiX2J1Zl9mcmVlKHNxbF92Yl9idWYgKnNxbHZiLCB2b2lkKiBkb250Y2FyZSkKK3sKKyAgICBpZiAoTlVMTCA9PSBzcWx2YikKKyAgICAgICAgcmV0dXJuOworCisgICAgU05NUF9GUkVFKHNxbHZiLT5vaWQpOworICAgIFNOTVBfRlJFRShzcWx2Yi0+dmFsKTsKKworICAgIGZyZWUoc3FsdmIpOworfQorCisvKgorICogZnJlZSBhIGJ1ZmZlcgorICogZG9udGNhcmUgcGFyYW0gaXMgdGhlcmUgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5CisgKiB0byBDT05UQUlORVJfRk9SX0VBQ0guCisgKi8KK3N0YXRpYyB2b2lkCitfc3FsX2J1Zl9mcmVlKHNxbF9idWYgKnNxbGIsIHZvaWQqIGRvbnRjYXJlKQoreworICAgIGlmIChOVUxMID09IHNxbGIpCisgICAgICAgIHJldHVybjsKKworICAgIC8qKiBkbyB2YXJiaW5kcyBmaXJzdCAqLworICAgIGlmIChzcWxiLT52YXJiaW5kcykgeworICAgICAgICBDT05UQUlORVJfQ0xFQVIoc3FsYi0+dmFyYmluZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zcWxfdmJfYnVmX2ZyZWUsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShzcWxiLT52YXJiaW5kcyk7CisgICAgfQorCisgICAgU05NUF9GUkVFKHNxbGItPmhvc3QpOworICAgIFNOTVBfRlJFRShzcWxiLT5vaWQpOworICAgIFNOTVBfRlJFRShzcWxiLT51c2VyKTsKKworICAgIFNOTVBfRlJFRShzcWxiLT5jb250ZXh0KTsKKyAgICBTTk1QX0ZSRUUoc3FsYi0+c2VjdXJpdHlfbmFtZSk7CisgICAgU05NUF9GUkVFKHNxbGItPmNvbnRleHRfZW5naW5lKTsKKyAgICBTTk1QX0ZSRUUoc3FsYi0+c2VjdXJpdHlfZW5naW5lKTsKKyAgICBTTk1QX0ZSRUUoc3FsYi0+dHJhbnNwb3J0KTsKKworICAgIGZyZWUoc3FsYik7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBidWZmZXIgdG8gc3RvcmUgdHJhcCBhbmQgdmFyYmluZHMKKyAqLworc3RhdGljIHNxbF9idWYgKgorX3NxbF9idWZfZ2V0KHZvaWQpCit7CisgICAgc3FsX2J1ZiAqc3FsYjsKKworICAgIC8qKiBidWZmZXIgZm9yIHRyYXAgaW5mbyAqLworICAgIHNxbGIgPSBTTk1QX01BTExPQ19UWVBFREVGKHNxbF9idWYpOworICAgIGlmIChOVUxMID09IHNxbGIpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIC8qKiBmaWZvIGZvciB2YXJiaW5kcyAqLworICAgIHNxbGItPnZhcmJpbmRzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZmlmbyIpOworICAgIGlmIChOVUxMID09IHNxbGItPnZhcmJpbmRzKSB7CisgICAgICAgIGZyZWUoc3FsYik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBzcWxiOworfQorCisvKgorICogc2F2ZSBpbmZvIGZyb20gaW5jb21pbmcgdHJhcAorICoKKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFueXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IKKyAqLworc3RhdGljIGludAorX3NxbF9zYXZlX3RyYXBfaW5mbyhzcWxfYnVmICpzcWxiLCBuZXRzbm1wX3BkdSAgKnBkdSwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgICAgICp0cmFuc3BvcnQpCit7CisgICAgc3RhdGljIG9pZCAgIHRyYXBvaWRzW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDUsIDAgfTsKKyAgICBvaWQgICAgICAgICAqdHJhcF9vaWQsIHRtcF9vaWRbTUFYX09JRF9MRU5dOworICAgIHRpbWVfdCAgICAgICBub3c7CisgICAgc3RydWN0IHRtICAgKmN1cl90aW1lOworICAgIHNpemVfdCAgICAgICB0bXBfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgYnVmX2hvc3RfbGVuX3QsIGJ1Zl9vaWRfbGVuX3QsIGJ1Zl91c2VyX2xlbl90OworICAgIGludCAgICAgICAgICBvaWRfb3ZlcmZsb3csIHRyYXBfb2lkX2xlbjsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnM7CisKKyAgICBpZiAoKE5VTEwgPT0gc3FsYikgfHwgKE5VTEwgPT0gcGR1KSB8fCAoTlVMTCA9PSB0cmFuc3BvcnQpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgic3FsOnF1ZXVlIiwgInF1ZXVlaW5nIGluY29taW5nIHRyYXBcbiIpKTsKKworICAgIC8qKiB0aW1lICovCisgICAgKHZvaWQpIHRpbWUoJm5vdyk7CisgICAgY3VyX3RpbWUgPSBsb2NhbHRpbWUoJm5vdyk7CisgICAgc3FsYi0+dGltZS55ZWFyID0gY3VyX3RpbWUtPnRtX3llYXIgKyAxOTAwOworICAgIHNxbGItPnRpbWUubW9udGggPSBjdXJfdGltZS0+dG1fbW9uICsgMTsKKyAgICBzcWxiLT50aW1lLmRheSA9IGN1cl90aW1lLT50bV9tZGF5OworICAgIHNxbGItPnRpbWUuaG91ciA9IGN1cl90aW1lLT50bV9ob3VyOworICAgIHNxbGItPnRpbWUubWludXRlID0gY3VyX3RpbWUtPnRtX21pbjsKKyAgICBzcWxiLT50aW1lLnNlY29uZCA9IGN1cl90aW1lLT50bV9zZWM7CisgICAgc3FsYi0+dGltZS5zZWNvbmRfcGFydCA9IDA7CisgICAgc3FsYi0+dGltZS5uZWcgPSAwOworCisgICAgLyoqIGhvc3QgbmFtZSAqLworICAgIGJ1Zl9ob3N0X2xlbl90ID0gMDsKKyAgICB0bXBfc2l6ZSA9IDA7CisgICAgcmVhbGxvY19mb3JtYXRfdHJhcCgodV9jaGFyKiopJnNxbGItPmhvc3QsICZ0bXBfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZidWZfaG9zdF9sZW5fdCwgMSwgIiVCIiwgcGR1LCB0cmFuc3BvcnQpOworICAgIHNxbGItPmhvc3RfbGVuID0gYnVmX2hvc3RfbGVuX3Q7CisKKyAgICAvKiBzbm1wVHJhcE9JRCAqLworICAgIGlmIChwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfVFJBUCkgeworICAgICAgICAvKgorICAgICAgICAgKiBjb252ZXJ0IGEgdjEgdHJhcCB0byBhIHYyIHZhcmJpbmQKKyAgICAgICAgICovCisgICAgICAgIGlmIChwZHUtPnRyYXBfdHlwZSA9PSBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDKSB7CisgICAgICAgICAgICB0cmFwX29pZF9sZW4gPSBwZHUtPmVudGVycHJpc2VfbGVuZ3RoOworICAgICAgICAgICAgbWVtY3B5KHRtcF9vaWQsIHBkdS0+ZW50ZXJwcmlzZSwgc2l6ZW9mKG9pZCkgKiB0cmFwX29pZF9sZW4pOworICAgICAgICAgICAgaWYgKHRtcF9vaWRbdHJhcF9vaWRfbGVuIC0gMV0gIT0gMCkKKyAgICAgICAgICAgICAgICB0bXBfb2lkW3RyYXBfb2lkX2xlbisrXSA9IDA7CisgICAgICAgICAgICB0bXBfb2lkW3RyYXBfb2lkX2xlbisrXSA9IHBkdS0+c3BlY2lmaWNfdHlwZTsKKyAgICAgICAgICAgIHRyYXBfb2lkID0gdG1wX29pZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYXBvaWRzWzldID0gcGR1LT50cmFwX3R5cGUgKyAxOworICAgICAgICAgICAgdHJhcF9vaWQgPSB0cmFwb2lkczsKKyAgICAgICAgICAgIHRyYXBfb2lkX2xlbiA9IE9JRF9MRU5HVEgodHJhcG9pZHMpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2YXJzID0gcGR1LT52YXJpYWJsZXM7CisgICAgICAgIGlmICh2YXJzICYmIHZhcnMtPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHRyYXBfb2lkX2xlbiA9IHZhcnMtPm5leHRfdmFyaWFibGUtPnZhbF9sZW4gLyBzaXplb2Yob2lkKTsKKyAgICAgICAgICAgIHRyYXBfb2lkID0gdmFycy0+bmV4dF92YXJpYWJsZS0+dmFsLm9iamlkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RhdGljIG9pZCBudWxsX29pZFtdID0geyAwLCAwIH07CisgICAgICAgICAgICB0cmFwX29pZF9sZW4gPSBPSURfTEVOR1RIKG51bGxfb2lkKTsKKyAgICAgICAgICAgIHRyYXBfb2lkID0gbnVsbF9vaWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgdG1wX3NpemUgPSAwOworICAgIGJ1Zl9vaWRfbGVuX3QgPSBvaWRfb3ZlcmZsb3cgPSAwOworICAgIG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgodV9jaGFyKiopJnNxbGItPm9pZCwmdG1wX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZfb2lkX2xlbl90LCAxLCAmb2lkX292ZXJmbG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwX29pZCwgdHJhcF9vaWRfbGVuKTsKKyAgICBzcWxiLT5vaWRfbGVuID0gYnVmX29pZF9sZW5fdDsKKyAgICBpZiAob2lkX292ZXJmbG93KQorICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywiT0lEIHRydW5jYXRlZCBpbiBzcWwgYnVmZmVyXG4iKTsKKworICAgIC8qKiByZXF1ZXN0IGlkICovCisgICAgc3FsYi0+cmVxaWQgPSBwZHUtPnJlcWlkOworCisgICAgLyoqIHZlcnNpb24gKGNvbnZlcnQgdG8gMSBiYXNlZCwgZm9yIHNxbCBlbnVtKSAqLworICAgIHNxbGItPnZlcnNpb24gPSBwZHUtPnZlcnNpb24gKyAxOworCisgICAgLyoqIGNvbW1hbmQgdHlwZSAoY29udmVydCB0byAxIGJhc2VkLCBmb3Igc3FsIGVudW0pICovCisgICAgc3FsYi0+dHlwZSA9IHBkdS0+Y29tbWFuZCAtIDE1OTsKKworICAgIC8qKiBjb21tdW5pdHkgc3RyaW5nL3VzZXIgbmFtZSAqLworICAgIHRtcF9zaXplID0gMDsKKyAgICBidWZfdXNlcl9sZW5fdCA9IDA7CisgICAgcmVhbGxvY19mb3JtYXRfdHJhcCgodV9jaGFyKiopJnNxbGItPnVzZXIsICZ0bXBfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZidWZfdXNlcl9sZW5fdCwgMSwgIiV1IiwgcGR1LCB0cmFuc3BvcnQpOworICAgIHNxbGItPnVzZXJfbGVuID0gYnVmX3VzZXJfbGVuX3Q7CisKKyAgICAvKiogdHJhbnNwb3J0ICovCisgICAgc3FsYi0+dHJhbnNwb3J0ID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKKworICAgIC8qKiBzZWN1cml0eSBtb2RlbCAqLworICAgIHNxbGItPnNlY3VyaXR5X21vZGVsID0gcGR1LT5zZWN1cml0eU1vZGVsOworCisgICAgaWYgKChTTk1QX01QX01PREVMX1NOTVB2MysxKSA9PSBzcWxiLT52ZXJzaW9uKSB7CisKKyAgICAgICAgc3FsYi0+bXNnaWQgPSBwZHUtPm1zZ2lkOworICAgICAgICBzcWxiLT5zZWN1cml0eV9sZXZlbCA9IHBkdS0+c2VjdXJpdHlMZXZlbDsKKworICAgICAgICBpZiAocGR1LT5jb250ZXh0TmFtZSkgeworICAgICAgICAgICAgc3FsYi0+Y29udGV4dCA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKCh1X2NoYXIqKXBkdS0+Y29udGV4dE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5jb250ZXh0TmFtZUxlbik7CisgICAgICAgICAgICBzcWxiLT5jb250ZXh0X2xlbiA9IHBkdS0+Y29udGV4dE5hbWVMZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBkdS0+Y29udGV4dEVuZ2luZUlEKSB7CisgICAgICAgICAgICBzcWxiLT5jb250ZXh0X2VuZ2luZV9sZW4gPSAKKyAgICAgICAgICAgICAgICBiaW5hcnlfdG9faGV4KHBkdS0+Y29udGV4dEVuZ2luZUlELCBwZHUtPmNvbnRleHRFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcWxiLT5jb250ZXh0X2VuZ2luZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgICAgIHNxbGItPnNlY3VyaXR5X25hbWUgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKCh1X2NoYXIqKXBkdS0+c2VjdXJpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuKTsKKyAgICAgICAgICAgIHNxbGItPnNlY3VyaXR5X25hbWVfbGVuID0gcGR1LT5zZWN1cml0eU5hbWVMZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlFbmdpbmVJRCkgeworICAgICAgICAgICAgc3FsYi0+c2VjdXJpdHlfZW5naW5lX2xlbiA9IAorICAgICAgICAgICAgICAgIGJpbmFyeV90b19oZXgocGR1LT5zZWN1cml0eUVuZ2luZUlELCBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3FsYi0+c2VjdXJpdHlfZW5naW5lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogc2F2ZSB2YXJiaW5kIGluZm8gZnJvbSBpbmNvbWluZyB0cmFwCisgKgorICogcmV0dXJuIDAgb24gc3VjY2VzcywgYW55dGhpbmcgZWxzZSBpcyBhbiBlcnJvcgorICovCitzdGF0aWMgaW50Citfc3FsX3NhdmVfdmFyYmluZF9pbmZvKHNxbF9idWYgKnNxbGIsIG5ldHNubXBfcGR1ICAqcGR1KQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOworICAgIHNxbF92Yl9idWYgICAgICAgKnNxbHZiOworICAgIHNpemVfdCAgICAgICAgICAgIHRtcF9zaXplLCBidWZfb2lkX2xlbl90OworICAgIGludCAgICAgICAgICAgICAgIG9pZF9vdmVyZmxvdywgcmM7CisjaWZkZWYgTkVUU05NUF9NWVNRTF9UUkFQX1ZBTFVFX1RFWFQKKyAgICBzaXplX3QgICAgICAgICAgICBidWZfdmFsX2xlbl90OworI2VuZGlmCisKKyAgICBpZiAoKE5VTEwgPT0gc3FsYikgfHwgKE5VTEwgPT0gcGR1KSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdmFyID0gcGR1LT52YXJpYWJsZXM7CisgICAgd2hpbGUodmFyKSB7CisgICAgICAgIHNxbHZiID0gU05NUF9NQUxMT0NfVFlQRURFRihzcWxfdmJfYnVmKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gc3FsdmIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiogT0lEICovCisgICAgICAgIHRtcF9zaXplID0gMDsKKyAgICAgICAgYnVmX29pZF9sZW5fdCA9IG9pZF9vdmVyZmxvdyA9IDA7CisgICAgICAgIG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgodV9jaGFyKiopJnNxbHZiLT5vaWQsICZ0bXBfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZfb2lkX2xlbl90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJm9pZF9vdmVyZmxvdywgdmFyLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lX2xlbmd0aCk7CisgICAgICAgIHNxbHZiLT5vaWRfbGVuID0gYnVmX29pZF9sZW5fdDsKKyAgICAgICAgaWYgKG9pZF9vdmVyZmxvdykKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCJPSUQgdHJ1bmNhdGVkIGluIHNxbCBpbnNlcnRcbiIpOworICAgICAgICAKKyAgICAgICAgLyoqIHR5cGUgKi8KKyAgICAgICAgaWYgKHZhci0+dHlwZSA+IEFTTl9PQkpFQ1RfSUQpCisgICAgICAgICAgICAvKiogY29udmVydCBhcHBsaWNhdGlvbiB0eXBlcyB0byBzcWwgZW51bSAqLworICAgICAgICAgICAgc3FsdmItPnR5cGUgPSBBU05fT0JKRUNUX0lEICsgMSArICh2YXItPnR5cGUgJiB+QVNOX0FQUExJQ0FUSU9OKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3FsdmItPnR5cGUgPSB2YXItPnR5cGU7CisKKyAgICAgICAgLyoqIHZhbHVlICovCisjaWZkZWYgTkVUU05NUF9NWVNRTF9UUkFQX1ZBTFVFX1RFWFQKKyAgICAgICAgdG1wX3NpemUgPSAwOworICAgICAgICBidWZfdmFsX2xlbl90ID0gMDsKKyAgICAgICAgc3ByaW50X3JlYWxsb2NfYnlfdHlwZSgodV9jaGFyKiopJnNxbHZiLT52YWwsICZ0bXBfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmX3ZhbF9sZW5fdCwgMSwgdmFyLCAwLCAwLCAwKTsKKyAgICAgICAgc3FsdmItPnZhbF9sZW4gPSBidWZfdmFsX2xlbl90OworI2Vsc2UKKyAgICAgICAgc3FsdmItPnZhbCA9IG5ldHNubXBfbWVtZHVwKHZhci0+dmFsLnN0cmluZywgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgc3FsdmItPnZhbF9sZW4gPSB2YXItPnZhbF9sZW47CisjZW5kaWYKKworICAgICAgICB2YXIgPSB2YXItPm5leHRfdmFyaWFibGU7CisKKyAgICAgICAgLyoqIGluc2VydCBpbnRvIGNvbnRhaW5lciAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoc3FsYi0+dmFyYmluZHMsc3FsdmIpOworICAgICAgICBpZihyYykKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBpbnNlcnQgdmFyYmluZCBpbnRvIHRyYXAgY29udGFpbmVyXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIHNxbCB0cmFwIGhhbmRsZXIKKyAqLworaW50CitteXNxbF9oYW5kbGVyKG5ldHNubXBfcGR1ICAgICAgICAgICAqcGR1LAorICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAgICAgKnRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICpoYW5kbGVyKQoreworICAgIHNxbF9idWYgICAgICpzcWxiOworICAgIGludCAgICAgICAgICBvbGRfZm9ybWF0LCByYzsKKworICAgIERFQlVHTVNHVEwoKCJzcWw6aGFuZGxlciIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBzYXZlIGRhdGEgKi8KKyAgICBzcWxiID0gX3NxbF9idWZfZ2V0KCk7CisgICAgaWYgKE5VTEwgPT0gc3FsYikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IGFsbG9jYXRlIHRyYXAgc3FsIGJ1ZmZlclxuIik7CisgICAgICAgIHJldHVybiBzeXNsb2dfaGFuZGxlciggcGR1LCB0cmFuc3BvcnQsIGhhbmRsZXIgKTsKKyAgICB9CisKKyAgICAvKiogc2F2ZSBPSUQgb3V0cHV0IGZvcm1hdCBhbmQgY2hhbmdlIHRvIG51bWVyaWMgKi8KKyAgICBvbGRfZm9ybWF0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUKTsKKyAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9PSURfT1VUUFVUX05VTUVSSUMpOworCisKKyAgICByYyA9IF9zcWxfc2F2ZV90cmFwX2luZm8oc3FsYiwgcGR1LCB0cmFuc3BvcnQpOworICAgIHJjID0gX3NxbF9zYXZlX3ZhcmJpbmRfaW5mbyhzcWxiLCBwZHUpOworCisgICAgLyoqIHJlc3RvcmUgcHJldmlvdXMgT0lEIG91dHB1dCBmb3JtYXQgKi8KKyAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgb2xkX2Zvcm1hdCk7CisKKyAgICAvKiogaW5zZXJ0IGludG8gcXVldWUgKi8KKyAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoX3NxbC5xdWV1ZSwgc3FsYik7CisgICAgaWYocmMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBsb2cgcXVldWUgc3FsIHRyYXAgYnVmZmVyXG4iKTsKKyAgICAgICAgX3NxbF9sb2coc3FsYiwgTlVMTCk7CisgICAgICAgIF9zcWxfYnVmX2ZyZWUoc3FsYiwgMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2F2ZSBxdWV1ZSBpZiBzaXplIGlzID4gbWF4ICovCisgICAgaWYgKENPTlRBSU5FUl9TSVpFKF9zcWwucXVldWUpID49IF9zcWwucXVldWVfbWF4KQorICAgICAgICBfc3FsX3Byb2Nlc3NfcXVldWUoMCxOVUxMKTsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogc2F2ZSBhIGJ1ZmZlcmVkIHRyYXAgdG8gc3FsIGRhdGFiYXNlCisgKi8KK3N0YXRpYyB2b2lkCitfc3FsX3NhdmUoc3FsX2J1ZiAqc3FsYiwgdm9pZCAqZG9udGNhcmUpCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICAgKml0OworICAgIHNxbF92Yl9idWYgICAgICAgICAgICpzcWx2YjsKKyAgICB1X2xvbmcgICAgICAgICAgICAgICAgdHJhcF9pZDsKKworICAgIC8qCisgICAgICogZG9uJ3QgZXZlbiB0cnkgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBpZiAoMCA9PSBfc3FsLmNvbm5lY3RlZCkgeworICAgICAgICBfc3FsX2xvZyhzcWxiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogdGhlIHByZXBhcmVkIHN0YXRlbWVudHMgYXJlIGJvdW5kIHRvIHRoZSBzdGF0aWMgYnVmZmVyIG9iamVjdHMsCisgICAgICogc28gY29weSB0aGUgcXVldWVkIGRhdGEgdG8gdGhlIHN0YXRpYyB2ZXJzaW9uLgorICAgICAqLworICAgIF90YmluZFtUQklORF9IT1NUXS5idWZmZXIgPSBzcWxiLT5ob3N0OworICAgIF90YmluZFtUQklORF9IT1NUXS5idWZmZXJfbGVuZ3RoID0gc3FsYi0+aG9zdF9sZW47CisKKyAgICBfdGJpbmRbVEJJTkRfT0lEXS5idWZmZXIgPSBzcWxiLT5vaWQ7CisgICAgX3RiaW5kW1RCSU5EX09JRF0uYnVmZmVyX2xlbmd0aCA9IHNxbGItPm9pZF9sZW47CisKKyAgICBfdGJpbmRbVEJJTkRfUkVRSURdLmJ1ZmZlciA9ICh2b2lkICopJnNxbGItPnJlcWlkOworICAgIF90YmluZFtUQklORF9WRVJdLmJ1ZmZlciA9ICh2b2lkICopJnNxbGItPnZlcnNpb247CisgICAgX3RiaW5kW1RCSU5EX1RZUEVdLmJ1ZmZlciA9ICh2b2lkICopJnNxbGItPnR5cGU7CisgICAgX3RiaW5kW1RCSU5EX1NFQ1VSSVRZX01PREVMXS5idWZmZXIgPSAodm9pZCAqKSZzcWxiLT5zZWN1cml0eV9tb2RlbDsKKworICAgIF90YmluZFtUQklORF9EQVRFXS5idWZmZXIgPSAodm9pZCAqKSZzcWxiLT50aW1lOworCisgICAgX3RiaW5kW1RCSU5EX1VTRVJdLmJ1ZmZlciA9IHNxbGItPnVzZXI7CisgICAgX3RiaW5kW1RCSU5EX1VTRVJdLmJ1ZmZlcl9sZW5ndGggPSBzcWxiLT51c2VyX2xlbjsKKworICAgIF90YmluZFtUQklORF9UUkFOU1BPUlRdLmJ1ZmZlciA9IHNxbGItPnRyYW5zcG9ydDsKKyAgICBpZiAoc3FsYi0+dHJhbnNwb3J0KQorICAgICAgICBfdGJpbmRbVEJJTkRfVFJBTlNQT1JUXS5idWZmZXJfbGVuZ3RoID0gc3RybGVuKHNxbGItPnRyYW5zcG9ydCk7CisgICAgZWxzZQorICAgICAgICBfdGJpbmRbVEJJTkRfVFJBTlNQT1JUXS5idWZmZXJfbGVuZ3RoID0gMDsKKworCisgICAgaWYgKChTTk1QX01QX01PREVMX1NOTVB2MysxKSA9PSBzcWxiLT52ZXJzaW9uKSB7CisgICAgICAgIF9ub192MyA9IDA7CisKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX01TR0lEXS5idWZmZXIgPSAmc3FsYi0+bXNnaWQ7CisgICAgICAgIAorICAgICAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTEVWRUxdLmJ1ZmZlciA9ICZzcWxiLT5zZWN1cml0eV9sZXZlbDsKKyAgICAgICAgCisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX05BTUVdLmJ1ZmZlciA9IHNxbGItPmNvbnRleHQ7CisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX05BTUVdLmJ1ZmZlcl9sZW5ndGggPSBzcWxiLT5jb250ZXh0X2xlbjsKKworICAgICAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9FTkdJTkVdLmJ1ZmZlciA9IHNxbGItPmNvbnRleHRfZW5naW5lOworICAgICAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9FTkdJTkVdLmJ1ZmZlcl9sZW5ndGggPQorICAgICAgICAgICAgc3FsYi0+Y29udGV4dF9lbmdpbmVfbGVuOworCisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9OQU1FXS5idWZmZXIgPSBzcWxiLT5zZWN1cml0eV9uYW1lOworICAgICAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTkFNRV0uYnVmZmVyX2xlbmd0aCA9IHNxbGItPnNlY3VyaXR5X25hbWVfbGVuOworCisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9FTkdJTkVdLmJ1ZmZlciA9IHNxbGItPnNlY3VyaXR5X2VuZ2luZTsKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0VOR0lORV0uYnVmZmVyX2xlbmd0aCA9CisgICAgICAgICAgICBzcWxiLT5zZWN1cml0eV9lbmdpbmVfbGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgX25vX3YzID0gMTsKKyAgICB9CisKKyAgICBpZiAobXlzcWxfc3RtdF9iaW5kX3BhcmFtKF9zcWwudHJhcF9zdG10LCBfdGJpbmQpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF9zcWxfc3RtdF9lcnJvcihfc3FsLnRyYXBfc3RtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGJpbmQgcGFyYW1ldGVycyBmb3IgSU5TRVJUIik7CisgICAgICAgIF9zcWxfbG9nKHNxbGIsIE5VTEwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoqIGV4ZWN1dGUgdGhlIHByZXBhcmVkIHN0YXRlbWVudCAqLworICAgIGlmIChteXNxbF9zdG10X2V4ZWN1dGUoX3NxbC50cmFwX3N0bXQpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF9zcWxfc3RtdF9lcnJvcihfc3FsLnRyYXBfc3RtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGV4ZWN1dGUgaW5zZXJ0IHN0YXRlbWVudCBmb3IgdHJhcCIpOworICAgICAgICBfc3FsX2xvZyhzcWxiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0cmFwX2lkID0gbXlzcWxfaW5zZXJ0X2lkKF9zcWwuY29ubik7CisKKyAgICAvKgorICAgICAqIGl0ZXJhdGUgb3ZlciB0aGUgdmFyYmluZHMsIGNvcHkgZGF0YSBhbmQgaW5zZXJ0CisgICAgICovCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1Ioc3FsYi0+dmFyYmluZHMpOworICAgIGlmIChOVUxMID09IGl0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIkNvdWxkIG5vdCBhbGxvY2F0ZSBpdGVyYXRvclxuIik7CisgICAgICAgIF9zcWxfbG9nKHNxbGIsIE5VTEwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yKCBzcWx2YiA9IElURVJBVE9SX0ZJUlNUKGl0KTsgc3FsdmI7IHNxbHZiID0gSVRFUkFUT1JfTkVYVChpdCkpIHsKKworICAgICAgICBfdmJpbmRbVkJJTkRfSURdLmJ1ZmZlciA9ICh2b2lkICopJnRyYXBfaWQ7CisgICAgICAgIF92YmluZFtWQklORF9UWVBFXS5idWZmZXIgPSAodm9pZCAqKSZzcWx2Yi0+dHlwZTsKKworICAgICAgICBfdmJpbmRbVkJJTkRfT0lEXS5idWZmZXIgPSBzcWx2Yi0+b2lkOworICAgICAgICBfdmJpbmRbVkJJTkRfT0lEXS5idWZmZXJfbGVuZ3RoID0gc3FsdmItPm9pZF9sZW47CisKKyAgICAgICAgX3ZiaW5kW1ZCSU5EX1ZBTF0uYnVmZmVyID0gc3FsdmItPnZhbDsKKyAgICAgICAgX3ZiaW5kW1ZCSU5EX1ZBTF0uYnVmZmVyX2xlbmd0aCA9IHNxbHZiLT52YWxfbGVuOworCisgICAgICAgIGlmIChteXNxbF9zdG10X2JpbmRfcGFyYW0oX3NxbC52Yl9zdG10LCBfdmJpbmQpICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3FsX3N0bXRfZXJyb3IoX3NxbC52Yl9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGJpbmQgcGFyYW1ldGVycyBmb3IgSU5TRVJUIik7CisgICAgICAgICAgICBfc3FsX2xvZyhzcWxiLCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG15c3FsX3N0bXRfZXhlY3V0ZShfc3FsLnZiX3N0bXQpICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3FsX3N0bXRfZXJyb3IoX3NxbC52Yl9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGV4ZWN1dGUgaW5zZXJ0IHN0YXRlbWVudCBmb3IgdmFyYmluZCIpOworICAgICAgICAgICAgX3NxbF9sb2coc3FsYiwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKK30KKworLyoKKyAqIHByb2Nlc3MgKHNhdmUpIHF1ZXVlZCBpdGVtcyB0byBzcWwgZGF0YWJhc2UuCisgKgorICogZG9udGNhcmUgJiBtZWVpdGhlciBhcmUgZHVtbXkgcGFyYW1zIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQKKyAqIGFzIGEgbmV0c25tcF9hbGFybSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK19zcWxfcHJvY2Vzc19xdWV1ZSh1X2ludCBkb250Y2FyZSwgdm9pZCAqbWVlaXRoZXIpCit7CisgICAgaW50ICAgICAgICByYzsKKworICAgIC8qKiBiYWlsIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSAqLworICAgIGlmKCAwID09IENPTlRBSU5FUl9TSVpFKF9zcWwucXVldWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCJzcWw6cHJvY2VzcyIsICJwcm9jZXNzaW5nICVkIHF1ZXVlZCB0cmFwc1xuIiwKKyAgICAgICAgICAgICAgIChpbnQpQ09OVEFJTkVSX1NJWkUoX3NxbC5xdWV1ZSkpKTsKKworICAgIC8qCisgICAgICogaWYgd2UgZG9uJ3QgaGF2ZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24sIHRyeSB0byByZWNvbm5lY3QuIFdlCisgICAgICogZG9uJ3QgY2FyZSBpZiB3ZSBmYWlsIC0gdHJhcHMgd2lsbCBiZSBsb2dnZWQgaW4gdGhhdCBjYXNlLgorICAgICAqLworICAgIGlmICgwID09IF9zcWwuY29ubmVjdGVkKSB7CisgICAgICAgIERFQlVHTVNHVCgoInNxbDpwcm9jZXNzIiwgIm5vIHNxbCBjb25uZWN0aW9uOyByZWNvbm5lY3RpbmdcbiIpKTsKKyAgICAgICAgKHZvaWQpIG5ldHNubXBfbXlzcWxfY29ubmVjdCgpOworICAgIH0KKworICAgIENPTlRBSU5FUl9GT1JfRUFDSChfc3FsLnF1ZXVlLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zcWxfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoX3NxbC5jb25uZWN0ZWQpIHsKKyAgICAgICAgcmMgPSBteXNxbF9jb21taXQoX3NxbC5jb25uKTsKKyAgICAgICAgaWYgKHJjKSB7IC8qIG51dHMuLi4gbm93IHdoYXQ/ICovCisgICAgICAgICAgICBuZXRzbm1wX3NxbF9lcnJvcigiY29tbWl0IGZhaWxlZCIpOworICAgICAgICAgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKF9zcWwucXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfc3FsX2xvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENPTlRBSU5FUl9DTEVBUihfc3FsLnF1ZXVlLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zcWxfYnVmX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCisjZWxzZQoraW50IHVudXNlZDsJLyogU3VwcHJlc3MgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmcgKi8KKyNlbmRpZiAvKiBORVRTTk1QX1VTRV9NWVNRTCAqLwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdXNtLmMgYi9hcHBzL3NubXB1c20uYwppbmRleCBkMWNiYTg3Li40MjkxOWJkIDEwMDY0NAotLS0gYS9hcHBzL3NubXB1c20uYworKysgYi9hcHBzL3NubXB1c20uYwpAQCAtMzYsMTEgKzM2LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01Miw5ICs0OCw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTEyOSw2ICsxMjIsNyBAQAogc2l6ZV90ICAgICAgICAgIHVzbVVzZXJFbmdpbmVJRExlbiA9IDA7CiB1X2NoYXIgICAgICAgICAqdXNtVXNlckVuZ2luZUlEID0gTlVMTDsKIGNoYXIgICAgICAgICAgICp1c21Vc2VyUHVibGljX3ZhbCA9IE5VTEw7CitpbnQgICAgICAgICAgICAgZG9jcmVhdGVhbmR3YWl0ID0gMDsKIAogCiB2b2lkCkBAIC0xMzksMTkgKzEzMywyMSBAQAogICAgIGZwcmludGYoc3RkZXJyLCAiIENPTU1BTkRcblxuIik7CiAgICAgc25tcF9wYXJzZV9hcmdzX2Rlc2NyaXB0aW9ucyhzdGRlcnIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiXG5zbm1wdXNtIGNvbW1hbmRzOlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSBjcmVhdGUgICAgIFVTRVIgW0NMT05FRlJPTS1VU0VSXVxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSBkZWxldGUgICAgIFVTRVJcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gY2xvbmVGcm9tICBVU0VSIENMT05FRlJPTS1VU0VSXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIGFjdGl2YXRlICAgVVNFUlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSBkZWFjdGl2YXRlIFVTRVJcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gWy1DYV0gWy1DeF0gY2hhbmdla2V5IFtVU0VSXVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSAgICAgICAgICAgICAgIGNyZWF0ZSAgICAgVVNFUiBbQ0xPTkVGUk9NLVVTRVJdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdICAgICAgICAgICAgICAgZGVsZXRlICAgICBVU0VSXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdICAgICAgICAgICAgICAgYWN0aXZhdGUgICBVU0VSXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdICAgICAgICAgICAgICAgZGVhY3RpdmF0ZSBVU0VSXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIFstQ3ddICAgICAgICAgY2xvbmVGcm9tICBVU0VSIENMT05FRlJPTS1VU0VSXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIFstQ2FdIFstQ3hdICAgY2hhbmdla2V5ICBbVVNFUl1cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgIiAgW29wdGlvbnNdIFstQ2FdIFstQ3hdIHBhc3N3ZCBPTEQtUEFTU1BIUkFTRSBORVctUEFTU1BIUkFTRSBbVVNFUl1cbiIpOworICAgICAgICAgICAgIiAgW29wdGlvbnNdIFstQ2FdIFstQ3hdICAgcGFzc3dkICAgICBPTEQtUEFTU1BIUkFTRSBORVctUEFTU1BIUkFTRSBbVVNFUl1cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgIiAgW29wdGlvbnNdICgtQ2F8LUN4KSAtQ2sgcGFzc3dkIE9MRC1LRVktT1ItUEFTU1BIUkFTRSBORVctS0VZLU9SLVBBU1NQSFJBU0UgW1VTRVJdXG4iKTsKKyAgICAgICAgICAgICIgIFtvcHRpb25zXSAoLUNhfC1DeCkgLUNrIHBhc3N3ZCAgICAgT0xELUtFWS1PUi1QQVNTIE5FVy1LRVktT1ItUEFTUyBbVVNFUl1cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiXG5zbm1wdXNtIG9wdGlvbnM6XG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0LUNFIEVOR0lORS1JRFx0U2V0IHVzbVVzZXJFbmdpbmVJRCAoZS5nLiA4MDAwMDAwMjAxMDk4NDAzMDEpLlxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcdC1DcCBTVFJJTkdcdFNldCB1c21Vc2VyUHVibGljIHZhbHVlIHRvIFNUUklORy5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ3dcdFx0Q3JlYXRlIHRoZSB1c2VyIHdpdGggY3JlYXRlQW5kV2FpdC5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdFx0KGl0IHdvbid0IGJlIGFjdGl2ZSB1bnRpbCB5b3UgYWN0aXZlIGl0KVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcdC1DeFx0XHRDaGFuZ2UgdGhlIHByaXZhY3kga2V5LlxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcdC1DYVx0XHRDaGFuZ2UgdGhlIGF1dGhlbnRpY2F0aW9uIGtleS5cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ2tcdFx0QWxsb3dzIHRvIHVzZSBsb2NhbGl6ZWQga2V5IChtdXN0IHN0YXJ0IHdpdGggMHgpXG4iKTsKQEAgLTE5Nyw3ICsxOTMsNiBAQAogICAgIEJJR05VTSAqb3RoZXJfcHViOwogICAgIHVfY2hhciAqa2V5OwogICAgIHNpemVfdCBrZXlfbGVuOwotICAgIHVuc2lnbmVkIGNoYXIgKmNwOwogICAgICAgICAgICAgCiAgICAgZGhrZXljaGFuZ2UgPSAodV9jaGFyICopIG1hbGxvYygyICogdmFycy0+dmFsX2xlbiAqIHNpemVvZihjaGFyKSk7CiAgICAgaWYgKCFkaGtleWNoYW5nZSkKQEAgLTIwNSw5ICsyMDAsMTAgQEAKICAgICAKICAgICBtZW1jcHkoZGhrZXljaGFuZ2UsIHZhcnMtPnZhbC5zdHJpbmcsIHZhcnMtPnZhbF9sZW4pOwogCi0gICAgY3AgPSBkaHZhci0+dmFsLnN0cmluZzsKLSAgICBkaCA9IGQyaV9ESHBhcmFtcyhOVUxMLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKikgJmNwLAotICAgICAgICAgICAgICAgICAgICAgIGRodmFyLT52YWxfbGVuKTsKKyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gZGh2YXItPnZhbC5zdHJpbmc7CisgICAgICAgIGRoID0gZDJpX0RIcGFyYW1zKE5VTEwsICZjcCwgZGh2YXItPnZhbF9sZW4pOworICAgIH0KIAogICAgIGlmICghZGggfHwgIWRoLT5nIHx8ICFkaC0+cCkgewogICAgICAgICBTTk1QX0ZSRUUoZGhrZXljaGFuZ2UpOwpAQCAtMjIwLDcgKzIxNiw3IEBACiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAgICAgICAgICAgICAKLSAgICBpZiAodmFycy0+dmFsX2xlbiAhPSBCTl9udW1fYnl0ZXMoZGgtPnB1Yl9rZXkpKSB7CisgICAgaWYgKHZhcnMtPnZhbF9sZW4gIT0gKHVuc2lnbmVkIGludClCTl9udW1fYnl0ZXMoZGgtPnB1Yl9rZXkpKSB7CiAgICAgICAgIFNOTVBfRlJFRShkaGtleWNoYW5nZSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCJpbmNvcnJlY3QgZGlmZmllLWhlbG1hbiBsZW5ndGhzICglbHUgIT0gJWQpXG4iLAogICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXZhcnMtPnZhbF9sZW4sIEJOX251bV9ieXRlcyhkaC0+cHViX2tleSkpOwpAQCAtMjUzLDcgKzI0OSw3IEBACiAKICAgICAgICAgcHJpbnRmKCJuZXcgJXMga2V5OiAweCIsIGtleW5hbWUpOwogICAgICAgICBmb3Ioa3AgPSBrZXkgKyBrZXlfbGVuIC0gb3V0a2V5X2xlbjsKLSAgICAgICAgICAgIGtwIC0ga2V5IDwga2V5X2xlbjsgIGtwKyspIHsKKyAgICAgICAgICAgIGtwIC0ga2V5IDwgKGludClrZXlfbGVuOyAga3ArKykgewogICAgICAgICAgICAgcHJpbnRmKCIlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpICprcCk7CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRmKCJcbiIpOwpAQCAtMzAwLDggKzI5NiwxMiBAQAogICAgICAgICAgICAgICAgIG9wdGluZCsrOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICBjYXNlICd3JzoKKyAgICAgICAgICAgICAgICBkb2NyZWF0ZWFuZHdhaXQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAJICAgIGNhc2UgJ0UnOiB7Ci0JICAgICAgICBzaXplX3QgZWJ1Zl9sZW4gPSAzMjsgLyogWFhYOiBNQVhfRU5HSU5FSURfTEVOR1RIICovCisJICAgICAgICBzaXplX3QgZWJ1Zl9sZW4gPSBNQVhfRU5HSU5FSURfTEVOR1RIOwogICAgICAgICAgICAgICAgIHVfY2hhciAqZWJ1ZjsKICAgICAgICAgICAgICAgICBpZiAob3B0aW5kIDwgYXJnYykgewogICAgICAgICAgICAgICAgICAgICBpZiAoYXJndltvcHRpbmRdKSB7CkBAIC0zODIsOSArMzgyLDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CkBAIC03MTAsNyArNzEyLDExIEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHNldHVwX29pZCh1c21Vc2VyU3RhdHVzLCAmbmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgdXNtVXNlckVuZ2luZUlELCB1c21Vc2VyRW5naW5lSURMZW4sIGFyZ3ZbYXJnLTFdKTsKLSAgICAgICAgICAgIGxvbmd2YXIgPSBSU19DUkVBVEVBTkRHTzsKKyAgICAgICAgICAgIGlmIChkb2NyZWF0ZWFuZHdhaXQpIHsKKyAgICAgICAgICAgICAgICBsb25ndmFyID0gUlNfQ1JFQVRFQU5EV0FJVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZ3ZhciA9IFJTX0NSRUFURUFOREdPOworICAgICAgICAgICAgfQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgdXNtVXNlclN0YXR1cywgbmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsICh1X2NoYXIgKikgJiBsb25ndmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsb25ndmFyKSk7CmRpZmYgLS1naXQgYS9hcHBzL3NubXB2YWNtLmMgYi9hcHBzL3NubXB2YWNtLmMKaW5kZXggY2YwNzFmMi4uZjg4ZWRlNiAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wdmFjbS5jCisrKyBiL2FwcHMvc25tcHZhY20uYwpAQCAtMjMsMTEgKzIzLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0zOSw5ICszNSw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTkwLDE5ICs4MywxNSBAQAogCiBzdGF0aWMgb2lkICAgICAgdmFjbUdyb3VwTmFtZVtNQVhfT0lEX0xFTl0gPQogICAgIHsgMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDIsIDEsIDMgfSwKLSAgICB2YWNtU2VjMkdyb3VwU3RvcmFnZVR5cGVbTUFYX09JRF9MRU5dID0gewotMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDIsIDEsIDR9LCB2YWNtU2VjMkdyb3VwU3RhdHVzW01BWF9PSURfTEVOXSA9IHsKKyAgICB2YWNtU2VjMkdyb3VwU3RhdHVzW01BWF9PSURfTEVOXSA9IHsKIDEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCAyLCAxLCA1fSwgdmFjbUFjY2Vzc0NvbnRleHRNYXRjaFtNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgNH0sIHZhY21BY2Nlc3NSZWFkVmlld05hbWVbTUFYX09JRF9MRU5dID0gewogMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDQsIDEsIDV9LCB2YWNtQWNjZXNzV3JpdGVWaWV3TmFtZVtNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgNn0sIHZhY21BY2Nlc3NOb3RpZnlWaWV3TmFtZVtNQVhfT0lEX0xFTl0gPSB7Ci0xLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgN30sIHZhY21BY2Nlc3NTdG9yYWdlVHlwZVtNQVhfT0lEX0xFTl0gPSB7Ci0xLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgOH0sIHZhY21BY2Nlc3NTdGF0dXNbTUFYX09JRF9MRU5dID0geworMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDQsIDEsIDd9LCB2YWNtQWNjZXNzU3RhdHVzW01BWF9PSURfTEVOXSA9IHsKIDEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA0LCAxLCA5fSwgdmFjbVZpZXdUcmVlRmFtaWx5TWFza1tNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNSwgMiwgMSwgM30sIHZhY21WaWV3VHJlZUZhbWlseVR5cGVbTUFYX09JRF9MRU5dID0gewogMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDUsIDIsIDEsIDR9LAotICAgIHZhY21WaWV3VHJlZUZhbWlseVN0b3JhZ2VUeXBlW01BWF9PSURfTEVOXSA9IHsKLTEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA1LCAyLCAxLCA1fSwKICAgICB2YWNtVmlld1RyZWVGYW1pbHlTdGF0dXNbTUFYX09JRF9MRU5dID0gewogMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDUsIDIsIDEsIDZ9CiAKQEAgLTExMSw3ICsxMDAsNiBAQAogI2RlZmluZSBOU1ZBQ01BQ0NFU1NUQUJMRSAgICAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA5LCAxCiBzdGF0aWMgb2lkIG5zVmFjbUNvbnRleHRQZnhbTUFYX09JRF9MRU5dICA9IHsgTlNWQUNNQUNDRVNTVEFCTEUsIDEsIDIgfTsKIHN0YXRpYyBvaWQgbnNWYWNtVmlld05hbWVbTUFYX09JRF9MRU5dICAgID0geyBOU1ZBQ01BQ0NFU1NUQUJMRSwgMSwgMyB9Owotc3RhdGljIG9pZCBuc1ZhY21TdG9yYWdlVHlwZVtNQVhfT0lEX0xFTl0gPSB7IE5TVkFDTUFDQ0VTU1RBQkxFLCAxLCA0IH07CiBzdGF0aWMgb2lkIG5zVmFjbVJvd1N0YXR1c1tNQVhfT0lEX0xFTl0gICA9IHsgTlNWQUNNQUNDRVNTVEFCTEUsIDEsIDUgfTsKIAogaW50ICAgICAgICAgICAgIHZpZXdUcmVlRmFtaWx5VHlwZSA9IDE7CkBAIC0yODQsNyArMjcyLDggQEAKICAgICBpbnQgICAgICAgICAgICAgZXhpdHZhbCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGNvbW1hbmQgPSAwOwogICAgIGxvbmcgICAgICAgICAgICBsb25ndmFyOwotICAgIGludCAgICAgICAgICAgICBzZWNNb2RlbCwgc2VjTGV2ZWwsIGNvbnRleHRNYXRjaCwgdmFsLCBpID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgc2VjTW9kZWwsIHNlY0xldmVsLCBjb250ZXh0TWF0Y2g7CisgICAgdW5zaWduZWQgaW50ICAgIHZhbCwgaSA9IDA7CiAgICAgY2hhciAgICAgICAgICAgKm1hc2ssICpncm91cE5hbWUsICpwcmVmaXgsICphdXRodHlwZTsKICAgICB1X2NoYXIgICAgICAgICAgdmlld01hc2tbVkFDTVNUUklOR0xFTl07CiAgICAgY2hhciAgICAgICAgICAgKnN0OwpAQCAtMjk0LDkgKzI4MywxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtMzkzLDcgKzM4NCw3IEBACiAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgfQogCX0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGk9MCA7IGkgPCAoKGludCluYW1lX2xlbmd0aCs3KS84OyBpKyspCisgICAgICAgICAgICBmb3IgKGk9MCA7IGkgPCAobmFtZV9sZW5ndGgrNykvODsgaSsrKQogICAgICAgICAgICAgICAgIHZpZXdNYXNrW2ldID0gKHVfY2hhcikweGZmOwogICAgICAgICB9CiAgICAgICAgIHZpZXdfb2lkKHZhY21WaWV3VHJlZUZhbWlseU1hc2ssICZuYW1lX2xlbmd0aCwgYXJndlthcmddLApkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wd2Fsay5jIGIvYXBwcy9zbm1wd2Fsay5jCmluZGV4IDM2MTM0MWEuLjY1OWQ3ZGUgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHdhbGsuYworKysgYi9hcHBzL3NubXB3YWxrLmMKQEAgLTQyLDExICs0Miw3IEBACiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTksOSArNTUsNiBAQAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC03NiwxMCArNjksMTMgQEAKICNkZWZpbmUgTkVUU05NUF9EU19XQUxLX0RPTlRfQ0hFQ0tfTEVYSUNPR1JBUEhJQwkzCiAjZGVmaW5lIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMgICAgIAkgICAgICAgIDQKICNkZWZpbmUgTkVUU05NUF9EU19XQUxLX0RPTlRfR0VUX1JFUVVFU1RFRAkgICAgICAgIDUKKyNkZWZpbmUgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUU19TSU5HTEUJICAgICAgICA2CiAKIG9pZCAgICAgICAgICAgICBvYmppZF9taWJbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSB9OwogaW50ICAgICAgICAgICAgIG51bXByaW50ZWQgPSAwOwogCitjaGFyICAgICAgICAgICAqZW5kX25hbWUgPSBOVUxMOworCiB2b2lkCiB1c2FnZSh2b2lkKQogewpAQCAtOTUsNyArOTEsMTAgQEAKICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICJcdFx0XHQgIGM6ICBkbyBub3QgY2hlY2sgcmV0dXJuZWQgT0lEcyBhcmUgaW5jcmVhc2luZ1xuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiXHRcdFx0ICB0OiAgRGlzcGxheSB3YWxsLWNsb2NrIHRpbWUgdG8gY29tcGxldGUgdGhlIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgIlx0XHRcdCAgdDogIERpc3BsYXkgd2FsbC1jbG9jayB0aW1lIHRvIGNvbXBsZXRlIHRoZSB3YWxrXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJcdFx0XHQgIFQ6ICBEaXNwbGF5IHdhbGwtY2xvY2sgdGltZSB0byBjb21wbGV0ZSBlYWNoIHJlcXVlc3RcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdFx0ICBFIHtPSUR9OiAgRW5kIHRoZSB3YWxrIGF0IHRoZSBzcGVjaWZpZWQgT0lEXG4iKTsKIH0KIAogdm9pZApAQCAtMTUxLDYgKzE1MCwxNSBAQAogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdFJzoKKyAgICAgICAgICAgICAgICBlbmRfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX1dBTEtfVElNRV9SRVNVTFRTX1NJTkdMRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBmbGFnIHBhc3NlZCB0byAtQzogJWNcbiIsCkBAIC0xNzMsMTIgKzE4MSwxNCBAQAogICAgIHNpemVfdCAgICAgICAgICBuYW1lX2xlbmd0aDsKICAgICBvaWQgICAgICAgICAgICAgcm9vdFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIHJvb3RsZW47CisgICAgb2lkICAgICAgICAgICAgIGVuZF9vaWRbTUFYX09JRF9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBlbmRfbGVuID0gMDsKICAgICBpbnQgICAgICAgICAgICAgY291bnQ7CiAgICAgaW50ICAgICAgICAgICAgIHJ1bm5pbmc7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRfRVJST1I7CiAgICAgaW50ICAgICAgICAgICAgIGNoZWNrOwogICAgIGludCAgICAgICAgICAgICBleGl0dmFsID0gMDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdHYxLCB0djI7CisgICAgc3RydWN0IHRpbWV2YWwgIHR2MSwgdHYyLCB0dl9hLCB0dl9iOwogCiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wd2FsayIsICJpbmNsdWRlUmVxdWVzdGVkIiwKIAkJCSAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTE5OCwxNSArMjA4LDIxIEBACiAKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXB3YWxrIiwgInRpbWVSZXN1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAotCQkJICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMpOworCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wd2FsayIsICJ0aW1lUmVzdWx0c1NpbmdsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX1dBTEtfVElNRV9SRVNVTFRTX1NJTkdMRSk7CiAKICAgICAvKgogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtMjMzLDYgKzI0OSwyMyBAQAogICAgICAgICByb290bGVuID0gc2l6ZW9mKG9iamlkX21pYikgLyBzaXplb2Yob2lkKTsKICAgICB9CiAKKyAgICAvKgorICAgICAqIElmIHdlJ3ZlIGJlZW4gZ2l2ZW4gYW4gZXhwbGljaXQgZW5kIHBvaW50LAorICAgICAqICB0aGVuIGNvbnZlcnQgdGhpcyB0byBhbiBPSUQsIG90aGVyd2lzZQorICAgICAqICBtb3ZlIHRvIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlIHN0YXJ0LgorICAgICAqLworICAgIGlmICggZW5kX25hbWUgKSB7CisgICAgICAgIGVuZF9sZW4gPSBNQVhfT0lEX0xFTjsKKyAgICAgICAgaWYgKHNubXBfcGFyc2Vfb2lkKGVuZF9uYW1lLCBlbmRfb2lkLCAmZW5kX2xlbikgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9wZXJyb3IoZW5kX25hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1lbW1vdmUoZW5kX29pZCwgcm9vdCwgcm9vdGxlbipzaXplb2Yob2lkKSk7CisgICAgICAgIGVuZF9sZW4gPSByb290bGVuOworICAgICAgICBlbmRfb2lkW2VuZF9sZW4tMV0rKzsKKyAgICB9CisKICAgICBTT0NLX1NUQVJUVVA7CiAKICAgICAvKgpAQCAtMjY1LDcgKzI5OCw3IEBACiAKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMpKQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2MSwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHYxKTsKICAgICB3aGlsZSAocnVubmluZykgewogICAgICAgICAvKgogICAgICAgICAgKiBjcmVhdGUgUERVIGZvciBHRVRORVhUIHJlcXVlc3QgYW5kIGFkZCBvYmplY3QgbmFtZSB0byByZXF1ZXN0IApAQCAtMjc2LDE3ICszMDksMjAgQEAKICAgICAgICAgLyoKICAgICAgICAgICogZG8gdGhlIHJlcXVlc3QgCiAgICAgICAgICAqLworICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX1dBTEtfVElNRV9SRVNVTFRTX1NJTkdMRSkpCisgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2X2EpOwogICAgICAgICBzdGF0dXMgPSBzbm1wX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsICZyZXNwb25zZSk7CiAgICAgICAgIGlmIChzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX1dBTEtfVElNRV9SRVNVTFRTX1NJTkdMRSkpCisgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0dl9iKTsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS0+ZXJyc3RhdCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBjaGVjayByZXN1bHRpbmcgdmFyaWFibGVzIAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGZvciAodmFycyA9IHJlc3BvbnNlLT52YXJpYWJsZXM7IHZhcnM7CiAgICAgICAgICAgICAgICAgICAgICB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcnMtPm5hbWVfbGVuZ3RoIDwgcm9vdGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtZW1jbXAocm9vdCwgdmFycy0+bmFtZSwgcm9vdGxlbiAqIHNpemVvZihvaWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IDApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKGVuZF9vaWQsIGVuZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMtPm5hbWUsIHZhcnMtPm5hbWVfbGVuZ3RoKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogbm90IHBhcnQgb2YgdGhpcyBzdWJ0cmVlIAogICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yOTQsNiArMzMwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFNfU0lOR0xFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJWYgczogIiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSAodHZfYi50dl91c2VjIC0gdHZfYS50dl91c2VjKS8xMDAwMDAwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkgKHR2X2IudHZfc2VjIC0gdHZfYS50dl9zZWMpKTsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdmFyaWFibGUodmFycy0+bmFtZSwgdmFycy0+bmFtZV9sZW5ndGgsIHZhcnMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcnMtPnR5cGUgIT0gU05NUF9FTkRPRk1JQlZJRVcpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodmFycy0+dHlwZSAhPSBTTk1QX05PU1VDSE9CSkVDVCkgJiYKQEAgLTM2Miw3ICs0MDIsNyBAQAogICAgIH0KICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFMpKQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2MiwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHYyKTsKIAogICAgIGlmIChudW1wcmludGVkID09IDAgJiYgc3RhdHVzID09IFNUQVRfU1VDQ0VTUykgewogICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvYXBwcy9zc2h0b3NubXAuYyBiL2FwcHMvc3NodG9zbm1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2MDY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvc3NodG9zbm1wLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8qIENvcHlyaWdodCAyMDA5IFNQQVJUQSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKy8qCisgKiBUaGlzIGlzIG1lcmVseSBhIHdyYXBwZXIgYXJvdW5kIHN0ZGluL291dCBmb3Igc3NoZCB0byBjYWxsLiAgSXQKKyAqIHNpbXBseSBwYXNzZXMgdHJhZmZpYyB0byB0aGUgcnVubmluZyBzbm1wZCB0aHJvdWdoIGEgdW5peCBkb21haW4KKyAqIHNvY2tldCBhZnRlciBmaXJzdCBwYXNzaW5nIGFueSBuZWVkZWQgU1NIIERvbWFpbiBpbmZvcm1hdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1VOX0gKKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZiBNQVhQQVRITEVOCisjd2FybiBubyBzeXN0ZW0gbWF4IHBhdGggbGVuZ3RoIGRldGVjdGVkCisjZGVmaW5lIE1BWFBBVEhMRU4gMjA0OAorI2VuZGlmCisKKyNkZWZpbmUgREVGQVVMVF9TT0NLX1BBVEggIi92YXIvbmV0LXNubXAvc3NoZG9tYWluc29ja2V0IgorCisjZGVmaW5lIE5FVFNOTVBfU1NIVE9TTk1QX1ZFUlNJT05fTlVNQkVSIDEKKworCisKKy8qCisgKiBFeHRyYSBkZWJ1Z2dpbmcgb3V0cHV0IGZvciwgdW0sIGRlYnVnZ2luZy4KKyAqLworCisjdW5kZWYgREVCVUdHSU5HCisKKyNpZmRlZiBERUJVR0dJTkcKKyNkZWZpbmUgREVCVUcoeCkgZGViKHgpCitGSUxFICpkZWJmID0gTlVMTDsKK3ZvaWQKK2RlYihjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgICBpZiAoTlVMTCA9PSBkZWJmKSB7CisgICAgICAgIGRlYmYgPSBmb3BlbigiL3RtcC9zc2h0b3NubXAubG9nIiwgImEiKTsKKyAgICB9CisgICAgaWYgKE5VTEwgIT0gZGViZikgeworICAgICAgICBmcHJpbnRmKGRlYmYsICIlc1xuIiwgc3RyaW5nKTsKKyAgICAgICAgZmZsdXNoKGRlYmYpOworICAgIH0KK30KKyNlbHNlICAvKiAhREVCVUdHSU5HICovCisjZGVmaW5lIERFQlVHKHgpCisjZW5kaWYgLyogREVCVUdHSU5HIGNvZGUgKi8KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworCisgICAgaW50IHNvY2s7CisgICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisgICAgdV9jaGFyIGJ1Zls0MDk2XTsKKyAgICBzaXplX3QgYnVmX2xlbiA9IHNpemVvZihidWYpOworICAgIGludCByYyA9IDAsIHBrdHNpemUgPSAwOworCisgICAgZmRfc2V0IHJlYWRfc2V0OworCisgICAgREVCVUcoIi0tLS0tLS0tLS1cbnN0YXJ0aW5nIHVwIik7CisKKyAgICAvKiBPcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgVU5JWCBkb21haW4gc29ja2V0IG9yIGZhaWwgKi8KKworICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgaWYgKGFyZ2MgPiAxKSB7CisgICAgICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBhcmd2WzFdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgREVGQVVMVF9TT0NLX1BBVEgpOworICAgIH0KKworICAgIHNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19TVFJFQU0sIDApOworICAgIERFQlVHKCJjcmVhdGVkIHNvY2tldCIpOworICAgIGlmIChzb2NrIDw9IDApIHsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKiBzZXQgdGhlIFNPX1BBU1NDUkVEIG9wdGlvbiBzbyB3ZSBjYW4gcGFzcyB1aWQgKi8KKyAgICAvKiBYWFg6IGFjY29yZGluZyB0byB0aGUgdW5peCgxKSBtYW51YWwgdGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkCisgICAgICAgb24gdGhlIHNlbmRpbmcgc2lkZT8gKi8KKyAgICB7CisgICAgICAgIGludCBvbmUgPSAxOworICAgICAgICBzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAodm9pZCAqKSAmb25lLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKKyAgICB9CisKKyAgICBpZiAoY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLAorICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKSAhPSAwKSB7CisgICAgICAgIERFQlVHKCJGQUlMIENPTk5FQ1QiKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBERUJVRygib3BlbmVkIHNvY2tldCIpOworCisgICAgLyoKKyAgICAgKiB3ZSBhcmUgcnVubmluZyBhcyB0aGUgdXNlciB0aGF0IHNzaCBhdXRoZW50aWNhdGVkIHVzIGFzLCBhbmQgdGhpcworICAgICAqIGlzIHRoZSBuYW1lL3VpZCB0aGF0IHRoZSBhZ2VudCBuZWVkcyBmb3IgcHJvY2Vzc2luZyBhcyBhIFNOTVB2MworICAgICAqIHNlY3VyaXR5IG5hbWUuICBTbyB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIG5lZWRlZCB0byBwYXNzIHRvIHRoZQorICAgICAqIGFnZW50LgorICAgICAqLworCisgICAgLyogdmVyc2lvbiAxIG9mIG91ciBpbnRlcm5hbCBzc2ggdG8gc25tcCB3cmFwcGVyIGlzIGp1c3QgYSBzaW5nbGUKKyAgICAgICBieXRlIHZlcnNpb24gbnVtYmVyIGFuZCBpbmRpY2F0ZXMgd2UncmUgYWxzbyBwYXNzaW5nIHVuaXgKKyAgICAgICBzb2NrZXQgY3JlZGVudGlhbHMgY29udGFpbmluZyBvdXIgdXNlciBpZCAqLworCisgICAgLyogSW4gY2FzZSBvZiBmdXR1cmUgY2hhbmdlcywgd2UnbGwgcGFzcyBhIHZlcnNpb24gbnVtYmVyIGZpcnN0ICovCisKKyAgICBidWZbMF0gPSBORVRTTk1QX1NTSFRPU05NUF9WRVJTSU9OX05VTUJFUjsKKyAgICBidWZfbGVuID0gMTsKKyAgICAKKyAgICAvKiBzZW5kIHRoZSBwcmVsaW0gbWVzc2FnZSBhbmQgdGhlIGNyZWRlbnRpYWxzIHRvZ2V0aGVyIHVzaW5nIHNlbmRtc2coKSAqLworICAgIHsKKyAgICAgICAgc3RydWN0IG1zZ2hkciBtOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICBzdHJ1Y3QgY21zZ2hkciBjbTsKKyAgICAgICAgICAgc3RydWN0IHVjcmVkIG91cnVzZXI7CisgICAgICAgIH0gY21zZzsKKyAgICAgICAgc3RydWN0IGlvdmVjIGlvdiA9IHsgYnVmLCBidWZfbGVuIH07CisKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgZXZlbiBwYWRkaW5nIGZpZWxkcyBnZXQgaW5pdGlhbGl6ZWQuKi8KKyAgICAgICAgbWVtc2V0KCZjbXNnLCAwLCBzaXplb2YoY21zZykpOworICAgICAgICBtZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7CisKKyAgICAgICAgLyogc2V0IHVwIHRoZSBiYXNpYyBtZXNzYWdlICovCisgICAgICAgIGNtc2cuY20uY21zZ19sZW4gPSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgc2l6ZW9mKHN0cnVjdCB1Y3JlZCk7CisgICAgICAgIGNtc2cuY20uY21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CisgICAgICAgIGNtc2cuY20uY21zZ190eXBlID0gU0NNX0NSRURFTlRJQUxTOworCisgICAgICAgIGNtc2cub3VydXNlci51aWQgPSBnZXR1aWQoKTsKKyAgICAgICAgY21zZy5vdXJ1c2VyLmdpZCA9IGdldGdpZCgpOworICAgICAgICBjbXNnLm91cnVzZXIucGlkID0gZ2V0cGlkKCk7CisKKyAgICAgICAgbS5tc2dfaW92ICAgICAgICAgICAgICAgPSAmaW92OworICAgICAgICBtLm1zZ19pb3ZsZW4gICAgICAgICAgICA9IDE7CisgICAgICAgIG0ubXNnX2NvbnRyb2wgICAgICAgICAgID0gJmNtc2c7CisgICAgICAgIG0ubXNnX2NvbnRyb2xsZW4gICAgICAgID0gc2l6ZW9mKGNtc2cpOworICAgICAgICBtLm1zZ19mbGFncyAgICAgICAgICAgICA9IDA7CisgICAgICAgIAorICAgICAgICBERUJVRygic2VuZGluZyB0byBzb2NrIik7CisgICAgICAgIHJjID0gc2VuZG1zZyhzb2NrLCAmbSwgTVNHX05PU0lHTkFMfE1TR19ET05UV0FJVCk7CisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHNlbmQgc3RhcnR1cCBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIERFQlVHKCJmYWlsZWQgdG8gc2VuZCBzdGFydHVwIG1lc3NhZ2VcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHKCJzZW50IG5hbWUiKTsKKyAgICAKKyAgICAvKiBub3cgd2UganVzdCBzZW5kIGFuZCByZWNlaXZlIGZyb20gYm90aCB0aGUgc29ja2V0IGFuZCBzdGRpbi9zdGRvdXQgKi8KKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgLyogcmVhZCBmcm9tIHN0ZGluIGFuZCB0aGUgc29ja2V0ICovCisgICAgICAgIEZEX1NFVChzb2NrLCAmcmVhZF9zZXQpOworICAgICAgICBGRF9TRVQoU1RESU5fRklMRU5PLCAmcmVhZF9zZXQpOworCisgICAgICAgIC8qIGJsb2NraW5nIHdpdGhvdXQgYSB0aW1lb3V0IGJlIGZpbmUgZmluZSAqLworICAgICAgICBzZWxlY3Qoc29jaysxLCAmcmVhZF9zZXQsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgICAgIGlmIChGRF9JU1NFVChTVERJTl9GSUxFTk8sICZyZWFkX3NldCkpIHsKKyAgICAgICAgICAgIC8qIHJlYWQgZnJvbSBzdGRpbiB0byBnZXQgc3R1ZmYgZnJvbSBzc2hkIHRvIHNlbmQgdG8gdGhlIGFnZW50ICovCisgICAgICAgICAgICBERUJVRygiZGF0YSBmcm9tIHN0ZGluIik7CisgICAgICAgICAgICByYyA9IHJlYWQoU1RESU5fRklMRU5PLCBidWYsIHNpemVvZihidWYpKTsKKworICAgICAgICAgICAgaWYgKHJjIDw9IDApIHsKKyAgICAgICAgICAgICAgICAvKiBlbmQtb2YtZmlsZSAqLworI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCisgICAgICAgICAgICAgICAgcmMgPSBjbG9zZShzb2NrKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmMgPSBjbG9zZXNvY2tldChzb2NrKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVRygicmVhZCBmcm9tIHN0ZGluIik7CisKKyAgICAgICAgICAgIC8qIHNlbmQgaXQgdXAgdGhlIHBpcGUgKi8KKyAgICAgICAgICAgIHBrdHNpemUgPSByYzsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICB3aGlsZSAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUcoInNlbmRpbmcgdG8gc29ja2V0Iik7CisgICAgICAgICAgICAgICAgcmMgPSBzZW5kdG8oc29jaywgYnVmLCBwa3RzaXplLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBERUJVRygiYmFjayBmcm9tIHNlbmR0byIpOworICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgICAgICAgIERFQlVHKCJzZW50dG8gZmFpbGVkIik7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgICAgIERFQlVHKCJzZW50IHRvIHNvY2tldCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIERFQlVHKCJmYWlsZWQgdG8gc2VuZCB0byBzb2NrZXQhISIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZEX0lTU0VUKHNvY2ssICZyZWFkX3NldCkpIHsKKyAgICAgICAgICAgIC8qIHJlYWQgZnJvbSB0aGUgc29ja2V0IGFuZCBzZW5kIHRvIHRvIHN0ZG91dCB3aGljaCBnb2VzIHRvIHNzaGQgKi8KKyAgICAgICAgICAgIERFQlVHKCJkYXRhIG9uIHVuaXggc29ja2V0Iik7CisKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICB3aGlsZSAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgcmMgPSByZWN2ZnJvbShzb2NrLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKHNvY2spOworICAgICAgICAgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHKCJyZWFkIGZyb20gc29ja2V0Iik7CisKKyAgICAgICAgICAgIHBrdHNpemUgPSByYzsKKyAgICAgICAgICAgIHJjID0gd3JpdGUoU1RET1VUX0ZJTEVOTywgYnVmLCBwa3RzaXplKTsKKyAgICAgICAgICAgIC8qIFhYWDogY2hlY2sgdGhhdCBjb3VudHMgbWF0Y2ggKi8KKyAgICAgICAgICAgIGlmIChyYyA+IDApIHsKKyAgICAgICAgICAgICAgICBERUJVRygid3JvdGUgdG8gc3Rkb3V0Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHKCJmYWlsZWQgdG8gd3JpdGUgdG8gc3Rkb3V0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKaW5kZXggZjMyMDc5YS4uMjg1MjM3OCAxMDA3NTUKLS0tIGEvY29uZmlnLmd1ZXNzCisrKyBiL2NvbmZpZy5ndWVzcwpAQCAtMSwxMCArMSwxMCBAQAogIyEgL2Jpbi9zaAogIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAogIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMDgtMDEtMjMnCit0aW1lc3RhbXA9JzIwMTAtMDgtMjEnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI3LDE2ICsyNywxNiBAQAogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKIAotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPHBlckBib3RobmVyLmNvbT4uCi0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAotIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4gIFBsZWFzZSBzZW5kIHBhdGNoZXMgKGNvbnRleHQKKyMgZGlmZiBmb3JtYXQpIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBhbmQgaW5jbHVkZSBhIENoYW5nZUxvZworIyBlbnRyeS4KICMKICMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bwogIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKICMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCiAjCi0jIFRoZSBwbGFuIGlzIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGlmIHlvdQotIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IGJ1aWxkIHN5c3RlbSB0eXBlLgorIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECiAKIG1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAogCkBAIC01Niw4ICs1Niw5IEBACiBHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQogCiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0yMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC05MSw3ICs5Miw3IEBACiAgIGV4aXQgMQogZmkKIAotdHJhcCAnZXhpdCAxJyAxIDIgMTUKK3RyYXAgJ2V4aXQgMScgSFVQIElOVCBURVJNCiAKICMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKICMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKQEAgLTEwNSw3ICsxMDYsNyBAQAogCiBzZXRfY2NfZm9yX2J1aWxkPScKIHRyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwotdHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIEhVUCBJTlQgUElQRSBURVJNIDsKIDogJHtUTVBESVI9L3RtcH0gOwogIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKICB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fApAQCAtMTcwLDcgKzE3MSw3IEBACiAJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQogCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0JCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisJCQl8IGdyZXAgLXEgX19FTEZfXwogCQl0aGVuCiAJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCiAJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KQEAgLTMyNCwxNCArMzI1LDMzIEBACiAJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCiAJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKIAllc2FjIDs7CisgICAgczM5MHg6U3VuT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CiAgICAgc3VuNEg6U3VuT1M6NS4qOiopCiAJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKIAlleGl0IDs7CiAgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKwllY2hvIGkzODYtcGMtYXVyb3JhdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQotCWVjaG8gaTM4Ni1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD0iaTM4NiIKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPSJ4ODZfNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOjYqOiopCiAJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKQEAgLTUzMiw3ICs1NTIsNyBAQAogCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCiAJZmkKIAlleGl0IDs7Ci0gICAgKjpBSVg6KjpbNDU2XSkKKyAgICAqOkFJWDoqOls0NTY3XSkKIAlJQk1fQ1BVX0lEPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKIAlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke0lCTV9DUFVfSUR9IHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAkJSUJNX0FSQ0g9cnM2MDAwCkBAIC02NDAsNyArNjYwLDcgQEAKIAkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCiAKIAkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAotCQlncmVwIF9fTFA2NF9fID4vZGV2L251bGwKKwkJZ3JlcCAtcSBfX0xQNjRfXwogCSAgICB0aGVuCiAJCUhQX0FSQ0g9ImhwcGEyLjB3IgogCSAgICBlbHNlCkBAIC03OTEsMTIgKzgxMSwxMiBAQAogICAgIGkqOlBXKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCiAJZXhpdCA7OwotICAgICo6SW50ZXJpeCo6WzM0NTZdKikKKyAgICAqOkludGVyaXgqOiopCiAgICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgogCSAgICB4ODYpCiAJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQogCQlleGl0IDs7Ci0JICAgIEVNNjRUIHwgYXV0aGVudGljYW1kKQorCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKIAkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQogCQlleGl0IDs7CiAJICAgIElBNjQpCkBAIC04MDYsNiArODI2LDkgQEAKICAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCiAJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKIAlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OwogICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQogCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KIAkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQpAQCAtODM1LDYgKzg1OCwyMCBAQAogICAgIGkqODY6TWluaXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAogCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworICAgICAgICBlc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OwogICAgIGFybSo6TGludXg6KjoqKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCkBAIC04NTcsNiArODk0LDE3IEBACiAgICAgZnJ2OkxpbnV4Oio6KikKICAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OwogICAgIGlhNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKQEAgLTg2Niw3NCArOTE0LDMzIEBACiAgICAgbTY4KjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqKQorICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKIAkjdW5kZWYgQ1BVCi0JI3VuZGVmIG1pcHMKLQkjdW5kZWYgbWlwc2VsCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCiAJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwc2VsCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAogCSNlbHNlCiAJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKLQlDUFU9bWlwcworCUNQVT0ke1VOQU1FX01BQ0hJTkV9CiAJI2Vsc2UKIAlDUFU9CiAJI2VuZGlmCiAJI2VuZGlmCiBFT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eQ1BVL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgotCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9Ci0JOzsKLSAgICBtaXBzNjQ6TGludXg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSN1bmRlZiBDUFUKLQkjdW5kZWYgbWlwczY0Ci0JI3VuZGVmIG1pcHM2NGVsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwczY0ZWwKLQkjZWxzZQotCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCi0JQ1BVPW1pcHM2NAotCSNlbHNlCi0JQ1BVPQotCSNlbmRpZgotCSNlbmRpZgotRU9GCi0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJwotCSAgICAvXkNQVS97Ci0JCXM6IDo6ZwotCQlwCi0JICAgIH0nYCIKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCiAJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KIAk7OwogICAgIG9yMzI6TGludXg6KjoqKQogCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHBwYzY0OkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBhbHBoYTpMaW51eDoqOiopCi0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KLQkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7Ci0JICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKLQkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7Ci0JICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKLQkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotICAgICAgICBlc2FjCi0Jb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKIAkjIExvb2sgZm9yIENQVSBsZXZlbApAQCAtOTQzLDggKzk1MCwxMSBAQAogCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CiAJZXNhYwogCWV4aXQgOzsKLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKQEAgLTk1OCw2ICs5NjgsOSBAQAogICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXRpbGVyYS1saW51eC1nbnUKKwlleGl0IDs7CiAgICAgdmF4OkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQogCWV4aXQgOzsKQEAgLTk2Nyw2OSArOTgwLDYgQEAKICAgICB4dGVuc2EqOkxpbnV4Oio6KikKICAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIGkqODY6TGludXg6KjoqKQotCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCi0JIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudAotCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KLQkjIFNldCBMQ19BTEw9QyB0byBlbnN1cmUgbGQgb3V0cHV0cyBtZXNzYWdlcyBpbiBFbmdsaXNoLgotCWxkX3N1cHBvcnRlZF90YXJnZXRzPWBjZCAvOyBMQ19BTEw9QyBsZCAtLWhlbHAgMj4mMSBcCi0JCQkgfCBzZWQgLW5lICcvc3VwcG9ydGVkIHRhcmdldHM6LyFkCi0JCQkJICAgIHMvWyAJXVsgCV0qLyAvZwotCQkJCSAgICBzLy4qc3VwcG9ydGVkIHRhcmdldHM6ICovLwotCQkJCSAgICBzLyAuKi8vCi0JCQkJICAgIHAnYAotICAgICAgICBjYXNlICIkbGRfc3VwcG9ydGVkX3RhcmdldHMiIGluCi0JICBlbGYzMi1pMzg2KQotCQlURU5UQVRJVkU9IiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251IgotCQk7OwotCSAgYS5vdXQtaTM4Ni1saW51eCkKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVhb3V0IgotCQlleGl0IDs7Ci0JICBjb2ZmLWkzODYpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251Y29mZiIKLQkJZXhpdCA7OwotCSAgIiIpCi0JCSMgRWl0aGVyIGEgcHJlLUJGRCBhLm91dCBsaW5rZXIgKGxpbnV4LWdudW9sZGxkKSBvcgotCQkjIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKLQkJZXhpdCA7OwotCWVzYWMKLQkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotCSNpZmRlZiBfX0VMRl9fCi0JIyBpZmRlZiBfX0dMSUJDX18KLQkjICBpZiBfX0dMSUJDX18gPj0gMgotCUxJQkM9Z251Ci0JIyAgZWxzZQotCUxJQkM9Z251bGliYzEKLQkjICBlbmRpZgotCSMgZWxzZQotCUxJQkM9Z251bGliYzEKLQkjIGVuZGlmCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCi0JTElCQz1nbnUKLQkjZWxzZQotCUxJQkM9Z251YW91dAotCSNlbmRpZgotCSNlbmRpZgotCSNpZmRlZiBfX2RpZXRsaWJjX18KLQlMSUJDPWRpZXRsaWJjCi0JI2VuZGlmCi1FT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eTElCQy97Ci0JCXM6IDo6ZwotCQlwCi0JICAgIH0nYCIKLQl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7Ci0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKLQkJZXhpdAotCX0KLQl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQotCTs7CiAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgogCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKQEAgLTEwNTgsNyArMTAwOCw3IEBACiAgICAgaSo4NjpzeWxsYWJsZToqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCiAJZXhpdCA7OwotICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQogCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgaSo4NjoqRE9TOio6KikKQEAgLTExMDIsOCArMTA1MiwxMSBAQAogICAgIHBjOio6KjoqKQogCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgogICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAotICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpMzg2LgotCWVjaG8gaTM4Ni1wYy1tc2Rvc2RqZ3BwCisgICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCiAgICAgICAgIGV4aXQgOzsKICAgICBJbnRlbDpNYWNoOjMqOiopCiAJZWNobyBpMzg2LXBjLW1hY2gzCkBAIC0xMTQxLDYgKzEwOTQsMTYgQEAKICAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKICAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCiAgICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKICAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKIAllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwpAQCAtMTE1Myw3ICsxMTE2LDcgQEAKICAgICByczYwMDA6THlueE9TOjIuKjoqKQogCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKLSAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuMCo6KikKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKIAllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCkBAIC0xMjE2LDYgKzExNzksOSBAQAogICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCiAJZWNobyBpNTg2LXBjLWJlb3MKIAlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKICAgICBTWC00OlNVUEVSLVVYOio6KikKIAllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMjQzLDYgKzEyMDksMTYgQEAKICAgICAqOkRhcndpbjoqOiopCiAJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KIAljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgaTM4NikKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJICB0aGVuCisJCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgorCQkgIGZpCisJCWZpIDs7CiAJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CiAJZXNhYwogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KQEAgLTEzMjQsNiArMTMwMCw5IEBACiAgICAgaSo4NjpyZG9zOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcwogCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OwogZXNhYwogCiAjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCmluZGV4IDY3NTk4MjUuLjMyMGUzMDMgMTAwNzU1Ci0tLSBhL2NvbmZpZy5zdWIKKysrIGIvY29uZmlnLnN1YgpAQCAtMSwxMCArMSwxMCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCiAjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCiAjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAwOC0wMS0xNicKK3RpbWVzdGFtcD0nMjAxMC0wOS0xMScKIAogIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCiAjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKQEAgLTMyLDEzICszMiwxNiBAQAogCiAKICMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0Ci0jIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KICMKICMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCiAjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCiAjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCiAKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKwogIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKICMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCiAjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCkBAIC03Miw4ICs3NSw5IEBACiB2ZXJzaW9uPSJcCiBHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTIwLDggKzEyNCwxMCBAQAogIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAogY2FzZSAkbWF5YmVfb3MgaW4KLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKLSAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCiAgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKICAgICBvcz0tJG1heWJlX29zCiAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKQEAgLTE0OCwxMCArMTU0LDEzIEBACiAJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKIAktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAogCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAotCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkpCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OworICAgICAgICAtYmx1ZWdlbmUqKQorCSAgICAgICAgb3M9LWNuaworCQk7OwogCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQpAQCAtMjQ5LDEzICsyNTgsMTYgQEAKIAl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCiAJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKIAl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCiAJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKLQl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCiAJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKIAl8IG1pcHMxNiBcCiAJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCi0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAogCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAogCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAogCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAogCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXApAQCAtMjY4LDI4ICsyODAsNDEgQEAKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAogCXwgbXQgXAogCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAogCXwgbmlvcyB8IG5pb3MyIFwKIAl8IG5zMTZrIHwgbnMzMmsgXAogCXwgb3IzMiBcCiAJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAogCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAogCXwgcHlyYW1pZCBcCisJfCByeCBcCiAJfCBzY29yZSBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKIAl8IHNoNjQgfCBzaDY0bGUgXAogCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAogCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKIAl8IHNwdSB8IHN0cm9uZ2FybSBcCi0JfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAogCXwgdjg1MCB8IHY4NTBlIFwKIAl8IHdlMzJrIFwKIAl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAotCXwgejhrKQorCXwgejhrIHwgejgwKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKLQltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQogCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCW9zPS1ub25lCkBAIC0zMjAsNyArMzQ1LDcgQEAKIAl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAogCXwgYXZyLSogfCBhdnIzMi0qIFwKIAl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKLQl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAogCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKIAl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKIAl8IGVseHNpLSogXApAQCAtMzI5LDE0ICszNTQsMTcgQEAKIAl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCiAJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAogCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbG0zMi0qIFwKIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKIAl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCi0JfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiB8IG1pY3JvYmxhemUtKiBcCiAJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCiAJfCBtaXBzMTYtKiBcCiAJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAotCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAogCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAogCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKIAl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCiAJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXApAQCAtMzUxLDI3ICszNzksMzAgQEAKIAl8IG1taXgtKiBcCiAJfCBtdC0qIFwKIAl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAogCXwgbmlvcy0qIHwgbmlvczItKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9yaW9uLSogXAogCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCiAJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAogCXwgcHlyYW1pZC0qIFwKLQl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKLQl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAogCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCiAJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCiAJfCBzcGFyY2xpdGUtKiBcCiAJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCiAJfCB0YWhvZS0qIHwgdGh1bWItKiBcCiAJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlLSogfCB0aWxlZ3gtKiBcCiAJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCiAJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAogCXwgd2UzMmstKiBcCiAJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKIAl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKIAl8IHltcC0qIFwKLQl8IHo4ay0qKQorCXwgejhrLSogfCB6ODAtKikKIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCiAJeHRlbnNhKikKQEAgLTQzOSw2ICs0NzAsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwogCQlvcz0tYnNkCiAJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtNDU1LDEwICs0OTAsMjcgQEAKIAkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCW9zPS1saW51eAogCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OwogCWM5MCkKIAkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7CisgICAgICAgIGNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OwogCWNvbnZleC1jMSkKIAkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKIAkJb3M9LWJzZApAQCAtNTI2LDYgKzU3OCwxMCBAQAogCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKIAkJb3M9LXN5c3YzCiAJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKIAlkamdwcCkKIAkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCiAJCW9zPS1tc2Rvc2RqZ3BwCkBAIC02OTksNiArNzU1LDkgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisgICAgICAgIG1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKIAltaW5ndzMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtcGMKIAkJb3M9LW1pbmd3MzIKQEAgLTgwMyw2ICs4NjIsMTIgQEAKIAlucDEpCiAJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCiAJCTs7CisgICAgICAgIG5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworICAgICAgICBuc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKIAluc3ItdGFuZGVtKQogCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KIAkJOzsKQEAgLTEwMzcsMTcgKzExMDIsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT10OTAtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7Ci0JdGljNTR4IHwgYzU0eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM1NXggfCBjNTV4KikKLQkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgotCQlvcz0tY29mZgotCQk7OwotCXRpYzZ4IHwgYzZ4KikKLQkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCi0JCW9zPS1jb2ZmCisgICAgICAgICMgVGhpcyBtdXN0IGJlIG1hdGNoZWQgYmVmb3JlIHRpbGUqLgorICAgICAgICB0aWxlZ3gqKQorCQliYXNpY19tYWNoaW5lPXRpbGVneC11bmtub3duCisJCW9zPS1saW51eC1nbnUKIAkJOzsKIAl0aWxlKikKIAkJYmFzaWNfbWFjaGluZT10aWxlLXVua25vd24KQEAgLTExMjgsNiArMTE4NiwxMCBAQAogCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCiAJCW9zPS1zaW0KIAkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKIAlub25lKQogCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQogCQlvcz0tbm9uZQpAQCAtMTE2Niw3ICsxMjI4LDcgQEAKIAl3ZTMyaykKIAkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKIAkJOzsKLQlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQogCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KIAkJOzsKIAlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKQEAgLTEyMTYsNiArMTI3OCw5IEBACiAgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCiAgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCiAJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisgICAgICAgIC1hdXJvcmF1eCkKKwkgICAgICAgIG9zPS1hdXJvcmF1eAorCQk7OwogCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQogCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCiAJCTs7CkBAIC0xMjM2LDEwICsxMzAxLDExIEBACiAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCi0JICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1zb2xhcmlzKiB8IC1zeW0qIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKIAkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCkBAIC0xMjQ4LDkgKzEzMTQsMTAgQEAKIAkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCiAJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAogCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAotCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAogCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKLQkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCiAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKQEAgLTEyNTgsNyArMTMyNSw3IEBACiAJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAogCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAogCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCi0JICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQogCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkJOzsKIAktcW54KikKQEAgLTEzODgsNiArMTQ1NSwxMSBAQAogCS16dm1vZSkKIAkJb3M9LXp2bW9lCiAJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisgICAgICAgIC1uYWNsKikKKwkgICAgICAgIDs7CiAJLW5vbmUpCiAJCTs7CiAJKikKQEAgLTE0MjgsNiArMTUwMCwxNSBAQAogICAgICAgICBjNHgtKiB8IHRpYzR4LSopCiAgICAgICAgIAlvcz0tY29mZgogCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CiAJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgogCXBkcDEwLSopCiAJCW9zPS10b3BzMjAKQEAgLTE1ODUsNyArMTY2Niw3IEBACiAJCQktc3Vub3MqKQogCQkJCXZlbmRvcj1zdW4KIAkJCQk7OwotCQkJLWFpeCopCisJCQktY25rKnwtYWl4KikKIAkJCQl2ZW5kb3I9aWJtCiAJCQkJOzsKIAkJCS1iZW9zKikKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBmMGFkZWFmLi41ZjZhNmIyIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDg0ICsxLDQzNSBAQAogIyEgL2Jpbi9zaAotIyBGcm9tIGNvbmZpZ3VyZS5pbiBSZXZpc2lvbi4KKyMgRnJvbSBjb25maWd1cmUuYWMgUmV2aXNpb24uCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgTmV0LVNOTVAgNS40LjQuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCBmb3IgTmV0LVNOTVAgNS43LjMucmMzLgogIwogIyBSZXBvcnQgYnVncyB0byA8bmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4uCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIworIwogIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLWVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIHNldCAtbyBwb3NpeAotZmkKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYwogZmkKIAogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQogUFMxPSckICcKIFBTMj0nPiAnCiBQUzQ9JysgJwogCiAjIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQogCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxCisKKyAgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cJHtCQVNIX1ZFUlNJT04rc2V0fVwiIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgXCJYXGBwcmludGYgJXMgXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiIFxcCisgICAgICB8fCB0ZXN0IFwiWFxgcHJpbnQgLXIgLS0gXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiICkgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKwkjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworCSMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisJIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgorCUJBU0hfRU5WPS9kZXYvbnVsbAorCUVOVj0vZGV2L251bGwKKwkodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJY2FzZSAkLSBpbiAjICgoKCgKKwkgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworCSAgKnYqICkgYXNfb3B0cz0tdiA7OworCSAgKngqICkgYXNfb3B0cz0teCA7OworCSAgKiApIGFzX29wdHM9IDs7CisJZXNhYworCWV4ZWMgIiRDT05GSUdfU0hFTEwiICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyQwOiBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IGFib3V0IHlvdXIKKyQwOiBzeXN0ZW0sIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCiBlbHNlCiAgIGFzX2V4cHI9ZmFsc2UKIGZpCiAKLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKIGVsc2UKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgotYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8Cithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogCi0KLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KIGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwogYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCkBAIC04NiwxNDYgKzQzNywxMDcgQEAKIGFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKIGFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwogCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQogCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgewotICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAotICAjIHJlbGF0aXZlIG9yIG5vdC4KLSAgY2FzZSAkMCBpbgotICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCi0KLSAgICAgICA7OwotICBlc2FjCi0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi0gIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KLSAgICBhc19teXNlbGY9JDAKLSAgZmkKLSAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgotICAnJykKLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KLQkgY2FzZSAkYXNfZGlyIGluCi0JIC8qKQotCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJwotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCi0JICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQotCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9Ci0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQotCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KLQkgICBmaTs7Ci0JIGVzYWMKLSAgICAgICBkb25lCi1kb25lCi07OwotICBlc2FjCi0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKLSAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCi0gICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCi0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQotICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCi0gIHNlZCAnPScgPCRhc19teXNlbGYgfAorICBhc19saW5lbm9fMT0kTElORU5PIGFzX2xpbmVub18xYT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8gYXNfbGluZW5vXzJhPSRMSU5FTk8KKyAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEnJGFzX3J1bicgKyAxYCIgPSAieCRhc19saW5lbm9fMickYXNfcnVuJyInIHx8IHsKKyAgIyBCbGFtZSBMZWUgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKICAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCiAgICAgICBOCi0gICAgICBzLCQsLSwKLSAgICAgIDogbG9vcAotICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCiAgICAgICB0IGxvb3AKLSAgICAgIHMsLSQsLAotICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAorICAgICAgcy8tXG4uKi8vCiAgICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8Ci0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjsgYXNfZm5fZXhpdCAxOyB9CiAKICAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKICAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KLSAgLiAuLyRhc19tZS5saW5lbm8KKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgogICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KICAgZXhpdAogfQogCi0KLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCi0gICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKLScgRUNIT19UPScJJyA7OwotICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7Ci0gICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7CiBlc2FjCiAKLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotZWNobyA+Y29uZiQkLmZpbGUKLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYwotICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCi0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcwotICAgIGFzX2xuX3M9J2NwIC1wJwotICBlbHNlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgogICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wJwogICBmaQotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgogZWxzZQogICBhc19sbl9zPSdjcCAtcCcKIGZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogCiBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCiBlbHNlCiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCiAgIGFzX21rZGlyX3A9ZmFsc2UKIGZpCiAKLWFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAogCiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCiBhc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgpAQCAtMjMzLDI0NSArNTQ1LDUxNyBAQAogIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgogCi0KLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgotYXNfbmw9JwotJwotSUZTPSIgCSRhc19ubCIKLQotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICi0KLQotCi0jIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCiBTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQogCi1jYXNlIFgkRUNITyBpbgotWCotLWZhbGxiYWNrLWVjaG8pCi0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCi0gIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXCRcXCQwLCckMCcsJ2AKLSAgOzsKLWVzYWMKIAotZWNobz0ke0VDSE8tZWNob30KLWlmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KLSAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCi0gIHNoaWZ0Ci1lbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKLSAgOgotZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCi0gICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKLSAgOgotZWxzZQotICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi0gIGV4ZWMgJFNIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9Ci1maQotCi1pZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobwotICBzaGlmdAotICBjYXQgPDxFT0YKLSQqCi1FT0YKLSAgZXhpdCAwCi1maQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAycSAiJDAiJyAnZWNobyB0ZXN0JzsgZG8KLSAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMmtCLCAxa0IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgotICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgotICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKLSAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotZmkKLQotaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgOgotZWxzZQotICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKLSAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZwotICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJwotICAjCi0gICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgotICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgZWNobz0iJGRpci9lY2hvIgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgotICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgotICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCi0gICAgICBlY2hvPSdwcmludCAtcicKLSAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgotCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCi0gICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KLSAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAotICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCi0gICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQlDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAotCWV4cG9ydCBDT05GSUdfU0hFTEwKLQlTSEVMTD0iJENPTkZJR19TSEVMTCIKLQlleHBvcnQgU0hFTEwKLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCi0JICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JZWNobz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbHNlCi0JIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KLQlwcmV2PToKLQotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KLQkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCi0JICB0aGVuCi0JICAgIGJyZWFrCi0JICBmaQotCSAgcHJldj0iJGNtZCIKLQlkb25lCi0KLQlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIiQwIic7IHRoZW4KLQkgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCi0JICBleHBvcnQgZWNob190ZXN0X3N0cmluZwotCSAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIiQwIiAkezErIiRAIn0KLQllbHNlCi0JICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgotCSAgZWNobz1lY2hvCi0JZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgZmkKLWZpCi1maQotCi0jIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCi0jIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KLUVDSE89JGVjaG8KLWlmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgotICAgRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKLWZpCi0KLQotCi0KLXRhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUNYWAotCi10YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzcKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQogCiAjIE5hbWUgb2YgdGhlIGhvc3QuCi0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAogIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCiBhY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKIAotZXhlYyA2PiYxCi0KICMKICMgSW5pdGlhbGl6YXRpb25zLgogIwogYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CiBhY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQogY3Jvc3NfY29tcGlsaW5nPW5vCiBzdWJkaXJzPQogTUZMQUdTPQogTUFLRUZMQUdTPQotU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLQotIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgotIyBUaGlzIHZhcmlhYmxlIHNlZW1zIG9ic29sZXRlLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIGFuZAotIyBvbmx5IGFjX21heF9zZWRfbGluZXMgc2hvdWxkIGJlIHVzZWQuCi06ICR7YWNfbWF4X2hlcmVfbGluZXM9Mzh9CiAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdOZXQtU05NUCcKIFBBQ0tBR0VfVEFSTkFNRT0nbmV0LXNubXAnCi1QQUNLQUdFX1ZFUlNJT049JzUuNC40JwotUEFDS0FHRV9TVFJJTkc9J05ldC1TTk1QIDUuNC40JworUEFDS0FHRV9WRVJTSU9OPSc1LjcuMy5yYzMnCitQQUNLQUdFX1NUUklORz0nTmV0LVNOTVAgNS43LjMucmMzJwogUEFDS0FHRV9CVUdSRVBPUlQ9J25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQnCitQQUNLQUdFX1VSTD0nJwogCi1hY191bmlxdWVfZmlsZT0iYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jIgorYWNfdW5pcXVlX2ZpbGU9ImFnZW50L3NubXBkLmMiCiAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCiBhY19pbmNsdWRlc19kZWZhdWx0PSJcCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1NZU19UWVBFU19ICisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRfSAorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCi0jaWYgU1REQ19IRUFERVJTCisjaWZkZWYgU1REQ19IRUFERVJTCiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBpbmNsdWRlIDxzdGRkZWYuaD4KICNlbHNlCi0jIGlmIEhBVkVfU1RETElCX0gKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAogIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdTX0gKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAogIyBpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX0lOVFRZUEVTX0gKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKICMgaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1RESU5UX0gKLSMgIGluY2x1ZGUgPHN0ZGludC5oPgotIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmIgogCi1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIENPTkZJR1VSRV9PUFRJT05TIExJQlRPT0xGTEFHUyBJTlNUQUxMX1BSRUZJWCBTTk1QRCBUUkFQTElCUyBVU0VUUkFQTElCUyBNQUlOU1VCUyBIQVZFX0RNQUxMT0NfSCBpbnN0YWxsdWNkaGVhZGVycyBpbnN0YWxsdWNkbGlicyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIENQUCBMSU5LQ0MgRUdSRVAgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgdGFyZ2V0IHRhcmdldF9jcHUgdGFyZ2V0X3ZlbmRvciB0YXJnZXRfb3MgU0VEIExOX1MgRUNITyBBUiBhY19jdF9BUiBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIERTWU1VVElMIGFjX2N0X0RTWU1VVElMIE5NRURJVCBhY19jdF9OTUVESVQgRExMVE9PTCBhY19jdF9ETExUT09MIEFTIGFjX2N0X0FTIE9CSkRVTVAgYWNfY3RfT0JKRFVNUCBDWFggQ1hYRkxBR1MgYWNfY3RfQ1hYIENYWENQUCBGNzcgRkZMQUdTIGFjX2N0X0Y3NyBMSUJUT09MIExJQlRPT0xfREVQUyBJTlNUQUxMX1BST0dSQU0gSU5TVEFMTF9TQ1JJUFQgSU5TVEFMTF9EQVRBIFNFVF9NQUtFIFBTUFJPRyBQRVJMUFJPRyBQWVRIT05QUk9HIFdIT0FNSSBGSU5EIEFVVE9DT05GIEFVVE9IRUFERVIgVU5BTUVQUk9HIFZFUlNJT04gUkVMRUFTRVZFUlNJT04gREVWRkxBR1MgVE9QX0lOQ0xVREVTIFNOTVBMSUJfSU5DTFVERVMgQUdFTlRfSU5DTFVERVMgSEVMUEVSX0lOQ0xVREVTIE1JQkdST1VQX0lOQ0xVREVTIEdOVV92cGF0aCBOT05fR05VX1ZQQVRIIENDUEFUSCBFWFRSQUNQUEZMQUdTIFNOTVBMSUJQQVRIIFNOTVBTSEFSRVBBVEggTkVUU05NUF9ERUZBVUxUX01JQkRJUlMgU05NUENPTkZQQVRIIG90aGVyX3NyY19saXN0IG90aGVyX29ianNfbGlzdCBvdGhlcl9sb2Jqc19saXN0IG90aGVyX2FnZW50b2JqcyBvdGhlcl9sYWdlbnRvYmpzIG90aGVyX3RyYXBkX29iamVjdHMgdHJhbnNwb3J0X2hkcl9saXN0IHRyYW5zcG9ydF9zcmNfbGlzdCB0cmFuc3BvcnRfb2JqX2xpc3QgdHJhbnNwb3J0X2xvYmpfbGlzdCBzZWN1cml0eV9zcmNfbGlzdCBzZWN1cml0eV9oZHJfbGlzdCBzZWN1cml0eV9vYmpfbGlzdCBzZWN1cml0eV9sb2JqX2xpc3Qga3JiNV9jb25maWcgZGVmYXVsdF9taWJzX2luc3RhbGwgZGxsY2xlYW5zIEVOVl9TRVBBUkFUT1IgTkVUU05NUF9ERUZBVUxUX01JQlMgRU1CRURQRVJMSU5TVEFMTCBFTUJFRFBFUkxVTklOU1RBTEwgUEVSTExET1BUU19GT1JfTElCUyBQRVJMTERPUFRTX0ZPUl9BUFBTIFBFUkxUQVJHUyBQRVJMSU5TVEFMTFRBUkdTIFBFUkxVTklOU1RBTExUQVJHUyBQRVJMQVJHUyBQWVRIT05UQVJHUyBQWVRIT05JTlNUQUxMVEFSR1MgUFlUSE9OVU5JTlNUQUxMVEFSR1MgUFlUSE9OQ0xFQU5UQVJHUyBQWVRIT05BUkdTIExQU1RBVF9QQVRIIExORVRTTk1QTElCUyBMQUdFTlRMSUJTIFBTQ01EIEFMTE9DQSBMSUJPQkpTIExNSUJMSUJTIEFHRU5UTElCUyBPVEhFUkFHRU5UTElCT0JKUyBPVEhFUkFHRU5UTElCTE9CSlMgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlkgQ09QWV9QRVJTSVNURU5UX0ZJTEVTIERMTElCUyBMVExJQk9CSlMnCi1hY19zdWJzdF9maWxlcz0nTU9EVUxFX0xJU1QgbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0IG1vZHVsZV9ydWxlcyBtb2R1bGVfbGlzdF9kZXBzIG1pYl9tb2R1bGVfbGlzdF9kZXBzIGFnZW50X21vZHVsZV9saXN0X2RlcHMnCithY19jb25maWdfbGlib2JqX2Rpcj1zbm1wbGliCithY19zdWJzdF92YXJzPSdMVExJQk9CSlMKK2FjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQorUEFSVElBTFRBUkdFVEZMQUdTCitETExJQlMKK09USEVSQUdFTlRMSUJMRlRTCitPVEhFUkFHRU5UTElCTE9CSlMKK09USEVSQUdFTlRMSUJPQkpTCitBR0VOVExJQlMKK0xNSUJMSUJTCitQU0NNRAorTFBTVEFUX1BBVEgKK0xJQk9CSlMKK0FMTE9DQQorVkFMX0xJQlMKK0xBR0VOVExJQlMKK0xORVRTTk1QTElCUworUFlUSE9ORkVBVFVSRVMKK1BZVEhPTkFSR1MKK1BZVEhPTkNMRUFOVEFSR1MKK1BZVEhPTlVOSU5TVEFMTFRBUkdTCitQWVRIT05JTlNUQUxMVEFSR1MKK1BZVEhPTlRBUkdTCitQRVJMRkVBVFVSRVMKK1BFUkxBUkdTCitQRVJMVU5JTlNUQUxMVEFSR1MKK1BFUkxJTlNUQUxMVEFSR1MKK1BFUkxUQVJHUworUEVSTExET1BUU19GT1JfQVBQUworUEVSTExET1BUU19GT1JfTElCUworRU1CRURQRVJMVU5JTlNUQUxMCitFTUJFRFBFUkxJTlNUQUxMCitNWVNRTF9JTkNMVURFUworTVlTUUxfTElCUworTVlTUUxDT05GSUcKK2NyeXB0b19maWxlc19sbworY3J5cHRvX2ZpbGVzX28KK2NyeXB0b19maWxlc19jCitORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFCitORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUUKK05FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0UKK05FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRQorTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRQorTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFCitORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFCitORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUUKK05FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRQorTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUUKK05FVFNOTVBfREVGQVVMVF9NSUJTCitFTlZfU0VQQVJBVE9SCitkbGxjbGVhbnMKK2RlZmF1bHRfbWlic19pbnN0YWxsCitrcmI1X2NvbmZpZworc2VjdXJpdHlfZnRvYmpfbGlzdAorc2VjdXJpdHlfbG9ial9saXN0CitzZWN1cml0eV9vYmpfbGlzdAorc2VjdXJpdHlfaGRyX2xpc3QKK3NlY3VyaXR5X3NyY19saXN0Cit0cmFuc3BvcnRfZnRvYmpfbGlzdAordHJhbnNwb3J0X2xvYmpfbGlzdAordHJhbnNwb3J0X29ial9saXN0Cit0cmFuc3BvcnRfc3JjX2xpc3QKK3RyYW5zcG9ydF9oZHJfbGlzdAorb3RoZXJfdHJhcGRfb2JqZWN0cworb3RoZXJfZnRhZ2VudG9ianMKK290aGVyX2xhZ2VudG9ianMKK290aGVyX2FnZW50b2Jqcworb3RoZXJfZnRvYmpzX2xpc3QKK290aGVyX2xvYmpzX2xpc3QKK290aGVyX29ianNfbGlzdAorb3RoZXJfc3JjX2xpc3QKK1NOTVBDT05GUEFUSAorTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKK1NOTVBTSEFSRVBBVEgKK1NOTVBMSUJQQVRICitWRVJTSU9OCitEUEtHX1FVRVJZX1BBVEgKK0NDUEFUSAorRVhUUkFDUFBGTEFHUworTERfTk9fVU5ERUZJTkVECit0YXJnZXRfb3MKK3RhcmdldF92ZW5kb3IKK3RhcmdldF9jcHUKK3RhcmdldAorTk9OX0dOVV9WUEFUSAorR05VX3ZwYXRoCitFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUworTUlCR1JPVVBfSU5DTFVERVMKK0hFTFBFUl9JTkNMVURFUworQUdFTlRfSU5DTFVERVMKK1NOTVBMSUJfSU5DTFVERVMKK1RPUF9JTkNMVURFUworREVWRkxBR1MKK0xJQlRPT0xfREVQUworT1RPT0w2NAorT1RPT0wKK0xJUE8KK05NRURJVAorRFNZTVVUSUwKK01BTklGRVNUX1RPT0wKK0FXSworUkFOTElCCitTVFJJUAorYWNfY3RfQVIKK0FSCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK0xJQlRPT0wKK09CSkRVTVAKK0RMTFRPT0wKK0FTCitMSU5LQ0MKK0NQUAorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQworUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTAorVU5BTUVQUk9HCitQWVRIT05QUk9HCitQU1BST0cKK1BFUkxQUk9HCitBVVRPSEVBREVSCitBVVRPQ09ORgorV0hPQU1JCitGSU5ECitGSUxFCitTRUQKK1NFVF9NQUtFCitMTl9TCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK0VHUkVQCitHUkVQCitDT1BZX1BFUlNJU1RFTlRfRklMRVMKK1VDRFBFUlNJU1RFTlRfRElSRUNUT1JZCitQRVJTSVNURU5UX0RJUkVDVE9SWQorRkVBVFVSRUhFQURFUlMKK0ZFQVRVUkVUQVJHUworRkVBVFVSRV9SRU1PVkVfRkxBR1MKK0ZFQVRVUkVfQUREX0ZMQUdTCitpbnN0YWxsdWNkbGlicworaW5zdGFsbHVjZGhlYWRlcnMKK0ZUTUFJTlNVQlMKK01BSU5TVUJTCitVU0VUUkFQTElCUworVFJBUExJQlMKK1NOTVBECitJTlNUQUxMX1BSRUZJWAorTElCVE9PTEZMQUdTCitDT05GSUdVUkVfT1BUSU9OUwordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCithY19zdWJzdF9maWxlcz0nTU9EVUxFX0xJU1QKK21vZHVsZV9saXN0X2MKK21vZHVsZV9saXN0X28KK21vZHVsZV9saXN0X2xvCittb2R1bGVfbGlzdF9mdAorbWliX21vZHVsZV9saXN0X2MKK21pYl9tb2R1bGVfbGlzdF9vCittaWJfbW9kdWxlX2xpc3RfbG8KK21pYl9tb2R1bGVfbGlzdF9mdAorYWdlbnRfbW9kdWxlX2xpc3RfYworYWdlbnRfbW9kdWxlX2xpc3RfbworYWdlbnRfbW9kdWxlX2xpc3RfbG8KK2FnZW50X21vZHVsZV9saXN0X2Z0CittaWJncm91cF9saXN0X28KK21pYmdyb3VwX2xpc3RfbG8KK21pYmdyb3VwX2xpc3RfZnQKK2FnZW50Z3JvdXBfbGlzdF9vCithZ2VudGdyb3VwX2xpc3RfbG8KK2FnZW50Z3JvdXBfbGlzdF9mdAorbW9kdWxlX3J1bGVzCittb2R1bGVfbGlzdF9kZXBzCittaWJfbW9kdWxlX2xpc3RfZGVwcworYWdlbnRfbW9kdWxlX2xpc3RfZGVwcycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCit3aXRoX2NjCit3aXRoX2xpbmtjYword2l0aF9hcgord2l0aF9lbmRpYW5uZXNzCit3aXRoX2NmbGFncword2l0aF9sZGZsYWdzCitlbmFibGVfYXNfbmVlZGVkCit3aXRoX2xpYnMKK2VuYWJsZV9zaWxlbnRfbGlidG9vbAord2l0aF9kbWFsbG9jCitlbmFibGVfZG1hbGxvYword2l0aF9lZmVuY2UKK2VuYWJsZV9lZmVuY2UKK3dpdGhfcnNhcmVmCitlbmFibGVfcnNhcmVmCit3aXRoX29wZW5zc2wKK2VuYWJsZV9vcGVuc3NsCit3aXRoX3NzbAorZW5hYmxlX3NzbAord2l0aF9wa2NzCitlbmFibGVfcGtjcword2l0aF9rcmI1CitlbmFibGVfa3JiNQord2l0aF9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbgorZW5hYmxlX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uCit3aXRoX2Ruc3NlYworZW5hYmxlX2Ruc3NlYword2l0aF9ycG0KK2VuYWJsZV9ycG0KK3dpdGhfaW5zdGFsbF9wcmVmaXgKK2VuYWJsZV9hZ2VudAord2l0aF9hZ2VudAorZW5hYmxlX2FwcGxpY2F0aW9ucword2l0aF9hcHBsaWNhdGlvbnMKK2VuYWJsZV9tYW51YWxzCit3aXRoX21hbnVhbHMKK2VuYWJsZV9zY3JpcHRzCit3aXRoX3NjcmlwdHMKK2VuYWJsZV9taWJzCitlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZword2l0aF9taWJfY29uZmlnX2NoZWNraW5nCitlbmFibGVfbWliX2NvbmZpZ19kZWJ1Zword2l0aF9taWJfY29uZmlnX2RlYnVnCitlbmFibGVfbmV3X2ZlYXR1cmVzCitlbmFibGVfb2xkX2ZlYXR1cmVzCit3aXRoX2ZlYXR1cmVzX29mCit3aXRoX2RlZmF1bHRzCitlbmFibGVfZGVmYXVsdHMKK2VuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5Cit3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkKK2VuYWJsZV9taWJfbG9hZGluZword2l0aF9taWJfbG9hZGluZword2l0aF9taWJkaXJzCitlbmFibGVfbWliZGlycword2l0aF9taWJzCit3aXRoX21pYmZpbGVzCitlbmFibGVfbWliZmlsZXMKK2VuYWJsZV9kZXMKK3dpdGhfZGVzCitlbmFibGVfcHJpdmFjeQord2l0aF9wcml2YWN5CitlbmFibGVfbWQ1Cit3aXRoX21kNQorZW5hYmxlX2ludGVybmFsX21kNQord2l0aF9pbnRlcm5hbF9tZDUKK3dpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMKK2VuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlcworZW5hYmxlX2lwdjYKK3dpdGhfaXB2Ngord2l0aF9sb2dmaWxlCitlbmFibGVfbG9nZmlsZQord2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeQorZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5Cit3aXRoX3BlcnNpc3RlbnRfbWFzaworZW5hYmxlX3BlcnNpc3RlbnRfbWFzaword2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMKK2VuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXMKK3dpdGhfdGVtcF9maWxlX3BhdHRlcm4KK2VuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybgorZW5hYmxlX3NubXB2MQord2l0aF9zbm1wdjEKK2VuYWJsZV9zbm1wdjJjCit3aXRoX3NubXB2MmMKK3dpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24KK2VuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbgord2l0aF90cmFuc3BvcnRzCit3aXRoX291dF90cmFuc3BvcnRzCit3aXRoX3RyYW5zcG9ydAord2l0aF9vdXRfdHJhbnNwb3J0Cit3aXRoX3NlY3VyaXR5X21vZHVsZXMKK2VuYWJsZV9zZWN1cml0eV9tb2R1bGVzCit3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzCitlbmFibGVfb3V0X3NlY3VyaXR5X21vZHVsZXMKK2VuYWJsZV9kZWJ1Z2dpbmcKK3dpdGhfZGVidWdnaW5nCitlbmFibGVfZGV2ZWxvcGVyCit3aXRoX2RldmVsb3BlcgorZW5hYmxlX3Rlc3RpbmdfY29kZQord2l0aF90ZXN0aW5nX2NvZGUKK2VuYWJsZV9yZWVudHJhbnQKK3dpdGhfcmVlbnRyYW50CitlbmFibGVfZGVwcmVjYXRlZAord2l0aF9kZXByZWNhdGVkCit3aXRoX3Jvb3RfYWNjZXNzCitlbmFibGVfcm9vdF9hY2Nlc3MKK3dpdGhfa21lbV91c2FnZQorZW5hYmxlX2ttZW1fdXNhZ2UKK3dpdGhfZHVtbXlfdmFsdWVzCitlbmFibGVfZHVtbXlfdmFsdWVzCitlbmFibGVfc2V0X3N1cHBvcnQKK3dpdGhfc2V0X3N1cHBvcnQKK3dpdGhfc3lzX2NvbnRhY3QKK2VuYWJsZV9zeXNfY29udGFjdAord2l0aF9zeXNfbG9jYXRpb24KK2VuYWJsZV9zeXNfbG9jYXRpb24KK2VuYWJsZV9sb2NhbF9zbXV4Cit3aXRoX2xvY2FsX3NtdXgKK2VuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seQord2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seQorZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudAord2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQKK3dpdGhfYWdlbnR4X3NvY2tldAorZW5hYmxlX2FnZW50eF9zb2NrZXQKK3dpdGhfZmVhdHVyZXMKK2VuYWJsZV9mZWF0dXJlcword2l0aF9vdXRfZmVhdHVyZXMKK2VuYWJsZV9vdXRfZmVhdHVyZXMKK3dpdGhfZmVhdHVyZQord2l0aF9vdXRfZmVhdHVyZQorZW5hYmxlX21pbmltYWxpc3QKK3dpdGhfbWluaW1hbGlzdAorZW5hYmxlX25vdGlmeV9vbmx5Cit3aXRoX25vdGlmeV9vbmx5CitlbmFibGVfbm90aWZ5b25seQorZW5hYmxlX25vX2xpc3Rlbgord2l0aF9ub19saXN0ZW4KK2VuYWJsZV9ub2xpc3RlbgorZW5hYmxlX3JlYWRfb25seQord2l0aF9yZWFkX29ubHkKK2VuYWJsZV9yZWFkb25seQorZW5hYmxlX21pbmlfYWdlbnQKK3dpdGhfbWluaV9hZ2VudAord2l0aF9taW5pYWdlbnQKK2VuYWJsZV9taW5pYWdlbnQKK2VuYWJsZV9tZmRfcmV3cml0ZXMKK3dpdGhfbWZkX3Jld3JpdGVzCit3aXRoX21pYl9tb2R1bGVzCitlbmFibGVfbWliX21vZHVsZXMKK3dpdGhfb3V0X21pYl9tb2R1bGVzCitlbmFibGVfb3V0X21pYl9tb2R1bGVzCit3aXRoX21pYl9tb2R1bGUKK3dpdGhfbW9kdWxlCit3aXRoX21vZHVsZXMKK3dpdGhfb3V0X21pYl9tb2R1bGUKK3dpdGhfb3V0X21vZHVsZQord2l0aF9vdXRfbW9kdWxlcword2l0aF9lbnRlcnByaXNlX29pZAorZW5hYmxlX2VudGVycHJpc2Vfb2lkCit3aXRoX2VudGVycHJpc2Vfc3lzb2lkCitlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQKK3dpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkCitlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkCit3aXRoX3BlcmxfbW9kdWxlcworZW5hYmxlX3BlcmxfbW9kdWxlcworZW5hYmxlX2VtYmVkZGVkX3BlcmwKK3dpdGhfZW1iZWRkZWRfcGVybAorZW5hYmxlX3BlcmxfY2NfY2hlY2tzCit3aXRoX3BlcmxfY2NfY2hlY2tzCit3aXRoX3B5dGhvbl9tb2R1bGVzCit3aXRoX3NlcnZlcl9zZW5kX2J1ZgorZW5hYmxlX3NlcnZlcl9zZW5kX2J1Zgord2l0aF9zZXJ2ZXJfcmVjdl9idWYKK2VuYWJsZV9zZXJ2ZXJfcmVjdl9idWYKK3dpdGhfY2xpZW50X3NlbmRfYnVmCitlbmFibGVfY2xpZW50X3NlbmRfYnVmCit3aXRoX2NsaWVudF9yZWN2X2J1ZgorZW5hYmxlX2NsaWVudF9yZWN2X2J1Zgord2l0aF9lbGYKK2VuYWJsZV9lbGYKK3dpdGhfbmwKK2VuYWJsZV9ubAord2l0aF9saWJ3cmFwCitlbmFibGVfbGlid3JhcAord2l0aF96bGliCitlbmFibGVfemxpYgord2l0aF9iemlwMgord2l0aF9tbnR0YWIKK2VuYWJsZV9tbnR0YWIKK3dpdGhfbXlzcWwKK2VuYWJsZV9teXNxbAorZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK3dpdGhfZ251X2xkCit3aXRoX3N5c3Jvb3QKK2VuYWJsZV9saWJ0b29sX2xvY2sKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDUFAnCisKIAogIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgogYWNfaW5pdF9oZWxwPQogYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CiAjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAogIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgogY2FjaGVfZmlsZT0vZGV2L251bGwKQEAgLTQ5NCwzNCArMTA3OCw0OSBAQAogIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKICMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KICMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCiBiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKIHNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCiBsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJwotZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jwogc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKIHNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwogbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKLWxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJwogaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCiBvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCi1pbmZvZGlyPScke3ByZWZpeH0vaW5mbycKLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKIAogYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQogZm9yIGFjX29wdGlvbgogZG8KICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCiAgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgotICAgIGV2YWwgIiRhY19wcmV2PVwkYWNfb3B0aW9uIgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KICAgICBhY19wcmV2PQogICAgIGNvbnRpbnVlCiAgIGZpCiAKLSAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqPSkgICBhY19vcHRhcmc9IDs7CisgICopICAgIGFjX29wdGFyZz15ZXMgOzsKKyAgZXNhYwogCiAgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCiAKLSAgY2FzZSAkYWNfb3B0aW9uIGluCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKIAogICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQogICAgIGFjX3ByZXY9YmluZGlyIDs7CkBAIC01NDMsMzMgKzExNDIsNTkgQEAKICAgLS1jb25maWctY2FjaGUgfCAtQykKICAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OwogCi0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKICAgICBhY19wcmV2PWRhdGFkaXIgOzsKLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCi0gIHwgLS1kYT0qKQorICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQogICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OwogCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCiAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPW5vIiA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CiAKICAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKICAgICBlc2FjCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwogCiAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXApAQCAtNTk2LDYgKzEyMjEsMTIgQEAKICAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKICAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKIAorICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCiAgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKICAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKICAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKQEAgLTYyMCwxMyArMTI1MSwxNiBAQAogICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKICAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKIAorICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCiAgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKLSAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgXAotICB8IC0tbG9jYWxzIHwgLS1sb2NhbCB8IC0tbG9jYSB8IC0tbG9jIHwgLS1sbykKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKICAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKICAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCi0gIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogXAotICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQogICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OwogCiAgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCkBAIC02OTEsNiArMTMyNSwxNiBAQAogICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCiAgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CiAKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKICAgICBzaWxlbnQ9eWVzIDs7CkBAIC03NDEsMjYgKzEzODUsMzYgQEAKICAgICBhY19pbml0X3ZlcnNpb249OiA7OwogCiAgIC13aXRoLSogfCAtLXdpdGgtKikKLSAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKLSAgICBjYXNlICRhY19vcHRpb24gaW4KLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7Ci0gICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKICAgICBlc2FjCi0gICAgZXZhbCAid2l0aF8kYWNfcGFja2FnZT0nJGFjX29wdGFyZyciIDs7CisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQotICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OwogCiAgIC0teCkKICAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCkBAIC03ODAsMjcgKzE0MzQsMjYgQEAKICAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCiAgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OwogCi0gIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgICAgOzsKIAogICAqPSopCiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCi0gICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKICAgICBleHBvcnQgJGFjX2VudnZhciA7OwogCiAgICopCiAgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCiAgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKLSAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCiAgICAgOzsKIAogICBlc2FjCkBAIC04MDgsMzEgKzE0NjEsMzYgQEAKIAogaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCiAgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCiBmaQogCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KLWZvciBhY192YXIgaW4gZXhlY19wcmVmaXggcHJlZml4Ci1kbwotICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLSAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qIHwgTk9ORSB8ICcnICkgOzsKLSAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OwogICBlc2FjCi1kb25lCitmaQogCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KLWZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAotCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKIGRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KICAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKLSAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OwogICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCiBkb25lCiAKICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKQEAgLTg0Niw4ICsxNTA0LDggQEAKIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgogICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCi0gICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkIiA+JjIKICAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKICAgZmkKQEAgLTg1OSw5NCArMTUxNyw3MiBAQAogdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAogCiAKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KIGlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCiAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCi0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgotICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiQwIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogICBzcmNkaXI9JGFjX2NvbmZkaXIKLSAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCiAgICAgc3JjZGlyPS4uCiAgIGZpCiBlbHNlCiAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KIGZpCi1pZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRhY19jb25mZGlyIG9yIC4uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBlbHNlCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKIGZpCi0oY2QgJHNyY2RpciAmJiB0ZXN0IC1yIC4vJGFjX3VuaXF1ZV9maWxlKSAyPi9kZXYvbnVsbCB8fAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1zcmNkaXI9YGVjaG8gIiRzcmNkaXIiIHwgc2VkICdzJVwoW15cXC9dXClbXFwvXSokJVwxJSdgCi1hY19lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQotYWNfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcwotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KLWFjX2N2X2Vudl9idWlsZF9hbGlhc192YWx1ZT0kYnVpbGRfYWxpYXMKLWFjX2Vudl9ob3N0X2FsaWFzX3NldD0ke2hvc3RfYWxpYXMrc2V0fQotYWNfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKLWFjX2N2X2Vudl9ob3N0X2FsaWFzX3NldD0ke2hvc3RfYWxpYXMrc2V0fQotYWNfY3ZfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKLWFjX2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KLWFjX2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9JHRhcmdldF9hbGlhcwotYWNfY3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQotYWNfY3ZfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCi1hY19lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQotYWNfZW52X0NDX3ZhbHVlPSRDQwotYWNfY3ZfZW52X0NDX3NldD0ke0NDK3NldH0KLWFjX2N2X2Vudl9DQ192YWx1ZT0kQ0MKLWFjX2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KLWFjX2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUwotYWNfY3ZfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCi1hY19lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KLWFjX2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCi1hY19jdl9lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KLWFjX2N2X2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCi1hY19lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQotYWNfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUwotYWNfY3ZfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KLWFjX2N2X2Vudl9DUFBGTEFHU192YWx1ZT0kQ1BQRkxBR1MKLWFjX2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KLWFjX2Vudl9DUFBfdmFsdWU9JENQUAotYWNfY3ZfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQotYWNfY3ZfZW52X0NQUF92YWx1ZT0kQ1BQCi1hY19lbnZfQ1hYX3NldD0ke0NYWCtzZXR9Ci1hY19lbnZfQ1hYX3ZhbHVlPSRDWFgKLWFjX2N2X2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KLWFjX2N2X2Vudl9DWFhfdmFsdWU9JENYWAotYWNfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KLWFjX2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKLWFjX2N2X2Vudl9DWFhGTEFHU19zZXQ9JHtDWFhGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ1hYRkxBR1NfdmFsdWU9JENYWEZMQUdTCi1hY19lbnZfQ1hYQ1BQX3NldD0ke0NYWENQUCtzZXR9Ci1hY19lbnZfQ1hYQ1BQX3ZhbHVlPSRDWFhDUFAKLWFjX2N2X2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KLWFjX2N2X2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAotYWNfZW52X0Y3N19zZXQ9JHtGNzcrc2V0fQotYWNfZW52X0Y3N192YWx1ZT0kRjc3Ci1hY19jdl9lbnZfRjc3X3NldD0ke0Y3NytzZXR9Ci1hY19jdl9lbnZfRjc3X3ZhbHVlPSRGNzcKLWFjX2Vudl9GRkxBR1Nfc2V0PSR7RkZMQUdTK3NldH0KLWFjX2Vudl9GRkxBR1NfdmFsdWU9JEZGTEFHUwotYWNfY3ZfZW52X0ZGTEFHU19zZXQ9JHtGRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0ZGTEFHU192YWx1ZT0kRkZMQUdTCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKIAogIwogIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgpAQCAtOTU1LDcgKzE1OTEsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIE5ldC1TTk1QIDUuNC40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIE5ldC1TTk1QIDUuNy4zLnJjMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC05NjksMjAgKzE2MDUsMTcgQEAKICAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQogICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKICAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nLi4uJyBtZXNzYWdlcworICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCiAgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KICAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKICAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKICAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCiAKLV9BQ0VPRgotCi0gIGNhdCA8PF9BQ0VPRgogSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgogICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKLQkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKLQkJCSAgW1BSRUZJWF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KIAogQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCiBcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQpAQCAtOTkyLDE4ICsxNjI1LDI1IEBACiBGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KIAogRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKLSAgLS1iaW5kaXI9RElSICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KLSAgLS1zYmluZGlyPURJUiAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KLSAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCi0gIC0tZGF0YWRpcj1ESVIgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvc2hhcmVdCi0gIC0tc3lzY29uZmRpcj1ESVIgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCi0gIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCi0gIC0tbGliZGlyPURJUiAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KLSAgLS1pbmNsdWRlZGlyPURJUiAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCi0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW1BSRUZJWC9pbmZvXQotICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtQUkVGSVgvbWFuXQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL25ldC1zbm1wXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQogX0FDRU9GCiAKICAgY2F0IDw8XF9BQ0VPRgpAQCAtMTAxNywzNSArMTY1Nyw0NyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIE5ldC1TTk1QIDUuNC40OiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgTmV0LVNOTVAgNS43LjMucmMzOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKIE9wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCiAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKICAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQotICAtLWVuYWJsZS1hcy1uZWVkZWQgICAgICAgICAgICAgIExpbmsgbGlicGVybCBhZ2FpbnN0IE5ldC1TTk1QIGxpYnJhcmllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9ucy4gV2UgcmVjb21tZW5kIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoaXMgb3B0aW9uIGlmIGl0IHdvcmtzLgorICAtLWRpc2FibGUtYXMtbmVlZGVkICAgICAgICAgICAgIExpbmsgbGlicGVybCBhZ2FpbnN0IGFwcGxpY2F0aW9ucyByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIE5ldC1TTk1QIGxpYnJhcmllcy4gVXNlIG9ubHkgaWYgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F5IGRvZXNuJ3Qgd29yay4KICAgLS1lbmFibGUtc2lsZW50LWxpYnRvb2wgICAgICAgICBQYXNzIC0tc2lsZW50IHRvIGxpYnRvb2wuCiAKLSAgLS1lbmFibGUtbWluaS1hZ2VudCAgICAgICAgICAgICBCdWlsZCBhIG1pbmltYWwgYWdlbnQuCiAgIC0tZGlzYWJsZS1hZ2VudCAgICAgICAgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhZ2VudCAoc25tcGQpLgogICAtLWRpc2FibGUtYXBwbGljYXRpb25zICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYXBwcyAoc25tcGdldCwgLi4uKS4KICAgLS1kaXNhYmxlLW1hbnVhbHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWFudWFscy4KICAgLS1kaXNhYmxlLXNjcmlwdHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgc2NyaXB0cyAobWliMmMsIC4uLikuCiAgIC0tZGlzYWJsZS1taWJzICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1pYiBmaWxlcy4KKyAgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyAgICBUdXJucyBvbiBleHRyYSBjaGVja3MgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtaWIgbW9kdWxlcy4gQW55IGNvbmZsaWN0cyB3aWxsIGNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHRvIGFib3J0IChkZWZhdWx0IGlzIHRvIGlzc3VlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIGFuZCBjb250aW51ZS4pCisgIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgICAgICAgVHVybnMgb24gdmVyYm9zZSBvdXRwdXQgZHVyaW5nIG1pYiBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgcHJvY2Vzc2luZy4KKyAgLS1lbmFibGUtbmV3LWZlYXR1cmVzICAgQ29tcGlsZSBpbiBuZXcgTUlCIG1vZHVsZXMgYW5kIG90aGVyIGV4cGVyaW1lbnRhbAorICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyB3aGljaCBhcmUgZHVlIHRvIGJlIGluY2x1ZGVkIGluIGZ1dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlcy4KKyAgLS1lbmFibGUtb2xkLWZlYXR1cmVzICAgQ29tcGlsZSBpbiBvbGQgTUlCIG1vZHVsZXMgYW5kIG90aGVyIGRlcHJlY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgd2hpY2ggd2VyZSByZXBsYWNlZCBpbiB0aGUgZGVmYXVsdCBidWlsZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJlbGVhc2UuCisgIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgSW5zdGFsbCB1Y2Qtc25tcCBsb29rLWFsaWtlIGhlYWRlcnMgYW5kIGxpYnMuCisKICAgLS1kaXNhYmxlLW1pYi1sb2FkaW5nICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgcGFyc2VzIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlwdWxhdGVzIHRoZSBtaWIgZmlsZXMuCi0gIC0tZGlzYWJsZS1zbm1wdjEgICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYxLgotICAtLWRpc2FibGUtc25tcHYyYyAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MmMuCi0gIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCAgICAgICAgICAgRG8gbm90IGFsbG93IFNOTVAgc2V0IHJlcXVlc3RzIHRvIHRoZSBhZ2VudC4KICAgLS1kaXNhYmxlLWRlcyAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBERVMgZW5jcnlwdGlvbi4KICAgLS1kaXNhYmxlLXByaXZhY3kgICAgICAgICAgICAgICBEb24ndCBjb21waWxlIGluIHN1cHBvcnQgZm9yIHByaXZhY3kgKGVuY3J5cHRpb24pLgogICAtLWRpc2FibGUtbWQ1ICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IE1ENSBhdXRoZW50aWNhdGlvbi4KICAgLS1lbmFibGUtaW50ZXJuYWwtbWQ1ICAgICAgICAgICBVc2UgdGhlIGludGVybmFsIE1ENSBzdXBwb3J0LgogICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIElQdjYgcmVhZHkgdmVyc2lvbi4KLSAgLS1lbmFibGUtbG9jYWwtc211eCAgICAgICAgICAgICBSZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCAoYnkgZGVmYXVsdCkuCisgIC0tZGlzYWJsZS1zbm1wdjEgICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYxLgorICAtLWRpc2FibGUtc25tcHYyYyAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MmMuCiAgIC0tZW5hYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICAgT3V0cHV0cyBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXQgYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMuICBOb3JtYWxseSwgeW91IHNob3VsZCBub3QgZW5hYmxlIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGluc3RlYWQgdXNlIHRoZSAtRCBmbGFnIG9mIHRoZSBjb21tYW5kcywKQEAgLTEwNTQsMTcgKzE3MDYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWlnaHQgcHJvdmlkZSBzb21lIHNwZWVkIGJlbmVmaXRzLgogICAtLWVuYWJsZS1kZXZlbG9wZXIgICAgICAgICAgICAgIFR1cm5zIG9uIHN1cGVyLWR1cGVyLWV4dHJhLWNvbXBpbGUtd2FybmluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHVzaW5nIGdjYy4KLSAgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgICBEaXNhYmxlIFVEUC9UQ1AgdHJhbnNwb3J0cyBmb3IgYWdlbnR4LgotICAtLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50ICAgIERpc2FibGUgYWdlbnR4IHN1YmFnZW50IGNvZGUgaW4gc25tcHRyYXBkLgotICAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nICAgIFR1cm5zIG9uIGV4dHJhIGNoZWNrcyBkdXJpbmcgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1pYiBtb2R1bGVzLiBBbnkgY29uZmxpY3RzIHdpbGwgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgdG8gYWJvcnQgKGRlZmF1bHQgaXMgdG8gaXNzdWUgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLikKLSAgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyAgICAgICBUdXJucyBvbiB2ZXJib3NlIG91dHB1dCBkdXJpbmcgbWliIG1vZHVsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBwcm9jZXNzaW5nLikKLSAgLS1lbmFibGUtbWZkLXJld3JpdGVzICAgICAgICAgICBVc2UgbmV3IE1GRCByZXdyaXRlcyBvZiBtaWIgbW9kdWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhdmFpbGFibGUuIChkZWZhdWx0IGlzIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG1pYiBtb2R1bGUgY29kZSkuCiAgIC0tZW5hYmxlLXRlc3RpbmctY29kZSAgICAgICAgICAgRW5hYmxlcyBzb21lIGNvZGUgc2VjdGlvbnMgdGhhdCBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlIHVzZWQgZm9yIHRlc3Rpbmcgb2YgY2VydGFpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgZnVuY3Rpb25hbGl0aWVzLiAgVGhpcyBzaG91bGQgKm5vdCoKQEAgLTEwNzQsMTcgKzE3MTUsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuICBUaGlzIGRvZXMgbm90IGd1YXJhbnRlZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC1zYWZlIG9wZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgYW4gZXhwZXJpbWVudGFsIHNldHRpbmcuCisgIC0tZGlzYWJsZS1kZXByZWNhdGVkICAgICAgICAgICAgRG9uJ3QgY29tcGlsZSBpbiBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KKyAgLS1kaXNhYmxlLXNldC1zdXBwb3J0ICAgICAgICAgICBEbyBub3QgYWxsb3cgU05NUCBzZXQgcmVxdWVzdHMuCisgIC0tZW5hYmxlLWxvY2FsLXNtdXggICAgICAgICAgICAgUmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgKGJ5IGRlZmF1bHQpLgorICAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSAgIERpc2FibGUgVURQL1RDUCB0cmFuc3BvcnRzIGZvciBhZ2VudHguCisgIC0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgICAgRGlzYWJsZSBhZ2VudHggc3ViYWdlbnQgY29kZSBpbiBzbm1wdHJhcGQuCisgIC0tZW5hYmxlLW1pbmltYWxpc3QgICAgICAgICAgICAgUmVtb3ZlIGFsbCBub24tZXNzZW50aWFsIGNvZGUgZmVhdHVyZXMuCisgIC0tZW5hYmxlLW5vdGlmeS1vbmx5ICAgICAgICAgICAgQnVpbGQgdG9vbHMgdGhhdCBjYW4gb25seSBzZW5kIG5vdGlmaWNhdGlvbnMuCisgIC0tZW5hYmxlLW5vLWxpc3RlbiAgICAgICAgICAgICAgQnVpbGQgdG9vbHMgdGhhdCBjYW4ndCBsaXN0ZW4gdG8gcG9ydHMuCisgIC0tZW5hYmxlLXJlYWQtb25seSAgICAgICAgICAgICAgUmVtb3ZlIGFsbCBTRVQgc3VwcG9ydCBmcm9tIHRoZSBjb2RlLgorICAtLWVuYWJsZS1taW5pLWFnZW50ICAgICAgICAgICAgIEJ1aWxkIGEgbWluaW1hbCBhZ2VudC4KKyAgLS1lbmFibGUtbWZkLXJld3JpdGVzICAgICAgICAgICBVc2UgbmV3IE1GRCByZXdyaXRlcyBvZiBtaWIgbW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhdmFpbGFibGUuIChkZWZhdWx0IGlzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG1pYiBtb2R1bGUgY29kZSkuCiAgIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsICAgICAgICAgRGlzYWJsZSBlbWJlZGRlZCBQZXJsIGluIHRoZSBTTk1QIGFnZW50IGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZC4gZW5hYmxlZCBieSBkZWZhdWx0CiAgIC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyAgICAgICAgRGlzYWJsZSBjb25maWd1cmUgY2hlY2tzIGZvciB3aGV0aGVyIFBlcmwncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgQ29tcGlsZXIgaXMgY29tcGF0aWJsZSB3aXRoIG91cnMgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIFBlcmwgaXMgZW5hYmxlZC4KLSAgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBJbnN0YWxsIHVjZC1zbm1wIGxvb2stYWxpa2UgaGVhZGVycyBhbmQgbGlicy4KLQotICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQotICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCiAgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10KICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KICAgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayAgYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKQpAQCAtMTEwMywxOSArMTc1MywzOSBAQAogICAtLXdpdGgtY2ZsYWdzPUNGTEFHUyAgICAgICAgICAgIHVzZSBDRkxBR1MgYXMgY29tcGlsZSB0aW1lIGFyZ3VtZW50cy4KICAgLS13aXRoLWxkZmxhZ3M9TERGTEFHUyAgICAgICAgICB1c2UgTERGTEFHUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLgogICAtLXdpdGgtbGlicz1MSUJTICAgICAgICAgICAgICAgIHVzZSBMSUJTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuCisgIC0td2l0aC1kbWFsbG9jPVBBVEggICAgIFVzZSBkbWFsbG9jIGxpYnJhcnkgKHd3dy5kbWFsbG9jLmNvbSkKKyAgLS13aXRoLWVmZW5jZSAgICAgICAgICAgICAgICAgICBMb29rIGZvciBhbmQgdXNlIGxpYmVmZW5jZSAobWFsbG9jKS4KKyAgLS13aXRoLXJzYXJlZj1QQVRIICAgICAgICAgICAgICBMb29rIGZvciBsaWJyc2FyZWYgaW4gUEFUSC9saWIuCisgIC0td2l0aC1vcGVuc3NsPVBBVEggICAgICAgICAgICAgTG9vayBmb3Igb3BlbnNzbCBpbiBQQVRIL2xpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBQQVRIIG1heSBiZSAiaW50ZXJuYWwiIHRvIGJ1aWxkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWFsIGNvcGllZCBPcGVuU1NMIGNvZGUgZm9yIFVTTSBvbmx5LgorCisgIC0td2l0aC1wa2NzPVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3IgcGtjczExIGluIFBBVEgvbGliLgorICAtLXdpdGgta3JiNT1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIGtyYjUgaW4gUEFUSC9saWIuCisgIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiBFbmFibGUgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gdXNpbmcgbGlidmFsIChubykKKyAgLS13aXRob3V0LXJwbSAgICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBSUE0gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3lzdGVtIHdoZW4gYnVpbGRpbmcgdGhlIGhvc3QgTUlCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLgogICAtLXdpdGgtaW5zdGFsbC1wcmVmaXg9UEFUSCAgICAgIEp1c3QgZm9yIGluc3RhbGxpbmcsIHByZWZpeCBhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoIFBBVEguICBUaGlzIGlzIGtub3duIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgb24gc29tZSBzeXN0ZW1zIHdpdGggc2hhcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIChlZywgSFBVWCkKKyAgLS13aXRoLWZlYXR1cmVzLW9mPXZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGlsZSBpbiBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZmVhdHVyZXMgYXMgaWYgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgcmVsZWFzZSAidmVyc2lvbiIgKGRlZmF1bHQgaXMgNS43LjMucmMzKS4KIAotICAtLXdpdGgtZG1hbGxvYz1QQVRIICAgICAgICAgICAgIFVzZSBkbWFsbG9jIGxpYnJhcnkgKHd3dy5kbWFsbG9jLmNvbSkKLSAgLS13aXRoLWVmZW5jZSAgICAgICAgICAgICAgICAgICBMb29rIGZvciBhbmQgdXNlIGxpYmVmZW5jZSAobWFsbG9jKS4KLSAgLS13aXRoLXJzYXJlZj1QQVRIICAgICAgICAgICAgICBMb29rIGZvciBsaWJyc2FyZWYgaW4gUEFUSC9saWIuCi0gIC0td2l0aC1vcGVuc3NsPVBBVEggICAgICAgICAgICAgTG9vayBmb3Igb3BlbnNzbCBpbiBQQVRIL2xpYi4KLSAgLS13aXRoLWtyYjU9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBrcmI1IGluIFBBVEgvbGliLgotICAtLXdpdGhvdXQtcnBtICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFJQTSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBidWlsZGluZyB0aGUgaG9zdCBNSUIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuCitNaXNjZWxsYW5lb3VzOgorICAtLXdpdGgtZGVmYXVsdHMgICAgICAgICBVc2UgZGVmYXVsdHMgZm9yIHByb21wdGVkIHZhbHVlcy4KKyAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicykKKyAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYW55IG1pYnMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtaWIgbW9kdWxlcyB0aGUgYWdlbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHdpdGgpCisgIC0td2l0aC1taWJmaWxlcz0iZmlsZTE6ZmlsZTIiIERlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6ICBub25lLiAgdXNlcyBJRHMgYWJvdmUgaW5zdGVhZC4pCiAgIC0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyAgRG9uJ3QgdXNlIHNwZWNpYWwgb3BhcXVlIGVuY29kaW5ncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIG5vcm1hbGx5IGNhbm5vdCBoYW5kbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyBudW1iZXJzLCBub3IgbGFyZ2UgNjQgYml0CkBAIC0xMTIzLDE3ICsxNzkzLDY4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LXNubXAgcGFja2FnZSBjb21waWxlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZXNlIGV4dHJhIGRhdGF0eXBlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBhIGxlZ2FsIHdheSkKLSAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicykKLSAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbnkgbWlicyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1pYiBtb2R1bGVzIHRoZSBhZ2VudCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgd2l0aCkKLSAgLS13aXRoLW1pYmZpbGVzPSJmaWxlMTpmaWxlMiIgRGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogIG5vbmUuICB1c2VzIElEcyBhYm92ZSBpbnN0ZWFkLikKLSAgLS13aXRoLXBrY3M9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBwa2NzMTEgaW4gUEFUSC9saWIuCisgIC0td2l0aC1sb2dmaWxlPSJsb2NhdGlvbiIgICAgICAgRGVmYXVsdCBsb2cgZmlsZSBsb2NhdGlvbiBmb3Igc25tcGQuCisgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0iZGlyZWN0b3J5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgZGlyZWN0b3J5IGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KKyAgLS13aXRoLXBlcnNpc3RlbnQtbWFzaz0ibWFzayIgIERlZmF1bHQgbWFzayBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDA3NykKKyAgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz0ibm8iIERvbid0IGNvcHkgcGVyc2lzdGVudCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB1c2UgInllcyIgdG8gY29weSB0aGVtKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogeWVzKQorICAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm49UEFUVEVSTiAgUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKERlZmF1bHQ6IC90bXAvc25tcGRYWFhYWFgpCisgIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj0iMyIgRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWdhbCB2YWx1ZXM6IDEsIDIgKGZvciBTTk1QdjJjKSBvciAzLgorICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuCisgIC0td2l0aC1vdXQtdHJhbnNwb3J0cz0idDEgLi4uIiAgRXhjbHVkZSBsaXN0ZWQgU05NUCB0cmFuc3BvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIGxpc3QpLgorCisgIEF2YWlsYWJsZSBTTk1QIHRyYW5zcG9ydCBtb2R1bGVzIGFyZToKKworICAgIFVEUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVAuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYWx3YXlzIGNvbXBpbGVkIGluLgorICAgIFVEUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAorICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBpZiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKyAgICBUQ1BJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKKyAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisgICAgVENQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFRDUC9JUC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0LCBidXQgbWF5IGJlIG9taXR0ZWQuCisgICAgVW5peCAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVuaXggZG9tYWluIHByb3RvY29scy4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGV4Y2VwdCBvbiBXaW4zMgorICAgICAgICAgICAgICAgIHBsYXRmb3JtcywgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIENhbGxiYWNrICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBhbiBpbnRlcm5hbCBsb2NhbGx5IGNvbm5lY3RlZCBwYWlyCisgICAgICAgICAgICAgICAgb2Ygc25tcF9zZXNzaW9ucy4KKyAgICBBbGlhcyAgICAgICBUaGUgYWxpYXMgdHJhbnNwb3J0IHNpbXBseSBsZXRzIHlvdSBkZWZpbmUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0IHN0cmluZ3MgYW5kIGFsaWFzIHRoZW0gdG8gc2ltcGxlIG5hbWVzIGluCisgICAgICAgICAgICAgICAgdGhlIHNubXAuY29uZiBmaWxlLgorICAgIEFBTDVQVkMgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBBQUw1IFBWQ3MuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKKyAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KKyAgICBJUFggICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgSVBYIHBlciBSRkMgMTQyMC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAorICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIERUTFNVRFAgICAgIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgRFRMUy9VRFAKKyAgICBUTFNUQ1AgICAgICBzdXBwb3J0IGZvciB0dW5uZWxpbmcgU05NUCBvdmVyIFRMUy9UQ1AKKyAgICBTU0ggICAgICAgICAoYWxwaGEpIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgU1NICisKKyAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KKworICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKKworICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIGtzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBrZXJiZXJvcyBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIHRzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgVHJhbnNwb3J0LWJhc2VkIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yIHVzZSB3aXRoIHRoZSBTU0gsIERUTFNVRFAgYW5kIFRMU1RDUCB0cmFuc3BvcnRzKQorCisgIC0td2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIFJlbW92ZXMgdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyBmcm9tIHRoZSBkZWZhdWx0IGxpc3QuCisKIAogQ29uZmlndXJpbmcgdGhlIGFnZW50OgogICAtLXdpdGhvdXQtcm9vdC1hY2Nlc3MgICAgICAgICAgIFRoZSBzbm1wZCBhZ2VudCB3b24ndCByZXF1aXJlIHJvb3QgYWNjZXNzIHRvCkBAIC0xMTQ2LDYzICsxODY3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0ZWNobmljYWxseSBub3QgY29tcGxpYW50IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBzcGVjaWZpY2F0aW9ucywgYnV0IHdhcyBob3cgdGhlIGFnZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0ZWQgZm9yIHZlcnNpb25zIDwgNC4wLgotICAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9ImRpcmVjdG9yeSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGRpcmVjdG9yeSBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCi0gIC0td2l0aC1wZXJzaXN0ZW50LW1hc2s9Im1hc2siICBEZWZhdWx0IG1hc2sgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAwNzcpCi0gIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9Im5vIiBEb24ndCBjb3B5IHBlcnNpc3RlbnQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdXNlICJ5ZXMiIHRvIGNvcHkgdGhlbSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IHllcykKLSAgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuPVBBVFRFUk4gIFBhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzIChEZWZhdWx0OiAvdG1wL3NubXBkWFhYWFhYKQotICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKQotICAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249IjMiIERlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVnYWwgdmFsdWVzOiAxLCAyIChmb3IgU05NUHYyYykgb3IgMy4KICAgLS13aXRoLXN5cy1jb250YWN0PSJ3aG9Ad2hlcmUiICBEZWZhdWx0IHN5c3RlbSBjb250YWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IExPR0lOQERPTUFJTk5BTUUpCiAgIC0td2l0aC1zeXMtbG9jYXRpb249ImxvY2F0aW9uIiAgRGVmYXVsdCBzeXN0ZW0gbG9jYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogVW5rbm93bikKLSAgLS13aXRoLWxvZ2ZpbGU9ImxvY2F0aW9uIiAgICAgICBEZWZhdWx0IGxvZyBmaWxlIGxvY2F0aW9uIGZvciBzbm1wZC4KLSAgLS13aXRoLXRyYW5zcG9ydHM9InQxIHQyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHRyYW5zcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotICAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9InQxIC4uLiIgIEV4Y2x1ZGUgbGlzdGVkIFNOTVAgdHJhbnNwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCB0cmFuc3BvcnQgbW9kdWxlcyBhcmU6Ci0KLSAgICBVRFAgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGFsd2F5cyBjb21waWxlZCBpbi4KLSAgICBVRFBJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKLSAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgotICAgICAgICAgICAgICAgIEl0IGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQuCi0gICAgVENQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCi0gICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KLSAgICAgICAgICAgICAgICBJdCBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0LgotICAgIFRDUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBUQ1AvSVAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCwgYnV0IG1heSBiZSBvbWl0dGVkLgotICAgIFVuaXggICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVbml4IGRvbWFpbiBwcm90b2NvbHMuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBleGNlcHQgb24gV2luMzIKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybXMsIGFuZCBtYXkgYmUgb21pdHRlZC4KLSAgICBDYWxsYmFjayAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgYW4gaW50ZXJuYWwgbG9jYWxseSBjb25uZWN0ZWQgcGFpcgotICAgICAgICAgICAgICAgIG9mIHNubXBfc2Vzc2lvbnMuCi0gICAgQUFMNVBWQyAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIEFBTDUgUFZDcy4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAotICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgotICAgIElQWCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBJUFggcGVyIFJGQyAxNDIwLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCi0gICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCi0KLSAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKLQotICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWlyZWQgYW5kIGFsd2F5cyBjb21waWxlZCBpbikKLSAgICAgICAga3NtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGtlcmJlcm9zIGJhc2VkIFNOTVAgc2VjdXJpdHkKLQorICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKQorICAtLXdpdGgtZmVhdHVyZXM9ImZlYXQxIGZlYXQyIiAgIFJlcXVlc3QgZXh0cmEgZmVhdHVyZXMgdG8gYmUgdHVybmVkIG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSB1c2VmdWwgd2l0aCAtLWVuYWJsZS1taW5pbWFsaXN0KQorICAtLXdpdGgtb3V0LWZlYXR1cmVzPSJmZWF0MS4uLiIgIFJlbW92ZSBzcGVjaWZpYyBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltcGxpZXMgLS1lbmFibGUtbWluaW1hbGlzdCkKICAgLS13aXRoLW1pYi1tb2R1bGVzPSJpdGVtMSAuLi4iICBDb21waWxlIHdpdGggYWRkaXRpb25hbCBtaWIgbW9kdWxlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KICAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibGlzdCIgICBDb21waWxlIHdpdGhvdXQgdGhlc2UgbWliIG1vZHVsZXMuCkBAIC0xMjQzLDYgKzE5MTYsNyBAQAogICAgICAgaXBmd2NoYWlucy9pcGZ3Y2hhaW5zICBmaXJld2FsbCBjaGFpbnMgdW5kZXIgaXBmdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvUkVBRE1FKQogICAgICAgc2N0cC1taWIgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIFNDVFAtTUlCCisgICAgICBldGhlcmxpa2UtbWliICAgICAgICBzdXBwb3J0IGZvciB0aGUgRXRoZXJMaWtlLU1JQgogCiAgICAgU29sYXJpcwogICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCkBAIC0xMzA4LDE1MCArMTk4Miw5MzUgQEAKICAgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zj1BUkcgICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVyIG9mIGNsaWVudCBzb2NrZXRzCiAgIC0td2l0aC1jbGllbnQtcmVjdi1idWY9QVJHICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUgc2VuZCBidWZmZXIKLQotTWlzY2VsbGFuZW91czoKLSAgLS13aXRoLWRlZmF1bHRzICAgICAgICAgVXNlIGRlZmF1bHRzIGZvciBwcm9tcHRlZCB2YWx1ZXMuCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRob3V0LWVsZiAgICAgICAgICAgdXNlIGVsZiBsaWJyYXJpZXMKKyAgLS13aXRoLW5sICAgICAgICAgICAgICAgdXNlIGxpYm5sIHRvIGdldCBuZXRsaW5rIGRhdGEgKGxpbnV4IG9ubHkpLgorICAtLXdpdGgtbGlid3JhcD1MSUJQQVRIICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC4KKyAgLS13aXRoLXpsaWI9RElSICAgICAgICAgdXNlIGxpYnogaW4gRElSCisgIC0td2l0aC1iemlwMj1ESVIgICAgICAgIHVzZSBsaWJiejIgaW4gRElSCisgIC0td2l0aC1tbnR0YWI9Ii9ldGMvbW50dGFiIgorICAgICAgICAgICAgICAgICAgICAgICAgICBNb3VudCB0YWJsZSBsb2NhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdG8gYXV0b2RldGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLgorICAtLXdpdGgtbXlzcWwgICAgICAgICAgICBJbmNsdWRlIHN1cHBvcnQgZm9yIE15U1FMLgogICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KLSAgLS13aXRoLXRhZ3NbPVRBR1NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBbYXV0b21hdGljXQotICAtLXdpdGhvdXQtZWxmICAgICAgICAgICB1c2UgZWxmIGxpYnJhcmllcwotICAtLXdpdGgtbGlid3JhcD1MSUJQQVRIICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC4KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCiAgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCiAgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KLSAgQ1BQRkxBR1MgICAgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZiB5b3UgaGF2ZQotICAgICAgICAgICAgICBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgotICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAotICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKLSAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgotICBGNzcgICAgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGNvbW1hbmQKLSAgRkZMQUdTICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBmbGFncwogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgogCiBSZXBvcnQgYnVncyB0byA8bmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4uCiBfQUNFT0YKK2FjX3N0YXR1cz0kPwogZmkKIAogaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgogICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgotICBhY19wb3BkaXI9YHB3ZGAKICAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKLSAgICB0ZXN0IC1kICRhY19kaXIgfHwgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQogICAgIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQotZmkKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CiAKIGNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KICAgICBhY19zcmNkaXI9LgotICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCi0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCi0gICAgZWxzZQotICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKLSAgICBmaSA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgogICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OwogZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAogCi0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCi1jYXNlIGBwd2RgIGluCi0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSopCi0gIGNhc2UgIiRhY19kaXIiIGluCi0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSopCi0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgotICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY19zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY190b3Bfc3JjZGlyIGluCi0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotCi0gICAgY2QgJGFjX2RpcgotICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCi0gICAgaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAotCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRhY19jb25maWd1cmUgLS1oZWxwCisgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKICAgICBlbHNlCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCi0gICAgZmkKLSAgICBjZCAkYWNfcG9wZGlyCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KICAgZG9uZQogZmkKIAotdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotTmV0LVNOTVAgY29uZmlndXJlIDUuNC40Ci1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKK05ldC1TTk1QIGNvbmZpZ3VyZSA1LjcuMy5yYzMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OAogCi1Db3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgogX0FDRU9GCi0gIGV4aXQgMAorICBleGl0CiBmaQotZXhlYyA1PmNvbmZpZy5sb2cKLWNhdCA+JjUgPDxfQUNFT0YKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiB1c2FiaWxpdHkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgdXNhYmlsaXR5Li4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiBwcmVzZW5jZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiBwcmVzZW5jZS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPVwkYWNfaGVhZGVyX2NvbXBpbGVyIgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jaGVja19tZW1iZXIgTElORU5PIEFHR1IgTUVNQkVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyaWVzIHRvIGZpbmQgaWYgdGhlIGZpZWxkIE1FTUJFUiBleGlzdHMgaW4gdHlwZSBBR0dSLCBhZnRlciBpbmNsdWRpbmcKKyMgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19tZW1iZXIgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMi4kMyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuJDMuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNQoraW50CittYWluICgpCit7CitzdGF0aWMgJDIgYWNfYWdncjsKK2lmIChhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNQoraW50CittYWluICgpCit7CitzdGF0aWMgJDIgYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci4kMykKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQ0PXllcyIKK2Vsc2UKKyAgZXZhbCAiJDQ9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkNAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19tZW1iZXIKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknIC0gMSAmJiBhY19oaT0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGFjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sbyAmJiBhY19taWQ9JGFzX3ZhbAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluICMoKAorPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OworJycpIGFjX3JldHZhbD0xIDs7Citlc2FjCisgIGVsc2UKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX2NvbXB1dGVfaW50CisKKyMgYWNfZm5fY19maW5kX2ludFhfdCBMSU5FTk8gQklUUyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZHMgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2ZpbmRfaW50WF90ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50JDJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50JDJfdC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNrIGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKyAgICAgZm9yIGFjX3R5cGUgaW4gaW50JDJfdCAnaW50JyAnbG9uZyBpbnQnIFwKKwkgJ2xvbmcgbG9uZyBpbnQnICdzaG9ydCBpbnQnICdzaWduZWQgY2hhcic7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwkgICAgIGVudW0geyBOID0gJDIgLyAyIC0gMSB9OworaW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgwIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSkpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwkgICAgICAgIGVudW0geyBOID0gJDIgLyAyIC0gMSB9OworaW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKQorCQkgPCAoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAyKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGNhc2UgJGFjX3R5cGUgaW4gIygKKyAgaW50JDJfdCkgOgorICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKyAgKikgOgorICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKK2VzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJDMiXCIgPSB4Im5vIjsgdGhlbiA6CisKK2Vsc2UKKyAgYnJlYWsKK2ZpCisgICAgIGRvbmUKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2ZpbmRfaW50WF90CisKKyMgYWNfZm5fY19jaGVja190eXBlIExJTkVOTyBUWVBFIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgVFlQRSBleGlzdHMgYWZ0ZXIgaGF2aW5nIGluY2x1ZGVkIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlCisjIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgkMikpCisJIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCgkMikpKQorCSAgICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGV2YWwgIiQzPXllcyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKworIyBhY19mbl9jX2ZpbmRfdWludFhfdCBMSU5FTk8gQklUUyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmRzIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRoIEJJVFMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19maW5kX3VpbnRYX3QgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aW50JDJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludCQyX3QuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisgICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCisgICAgIGZvciBhY190eXBlIGluIHVpbnQkMl90ICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgoJGFjX3R5cGUpIC0xID4+ICgkMiAvIDIgLSAxKSkgPj4gKCQyIC8gMiAtIDEpID09IDMpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2FzZSAkYWNfdHlwZSBpbiAjKAorICB1aW50JDJfdCkgOgorICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKyAgKikgOgorICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKK2VzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJDMiXCIgPSB4Im5vIjsgdGhlbiA6CisKK2Vsc2UKKyAgYnJlYWsKK2ZpCisgICAgIGRvbmUKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2ZpbmRfdWludFhfdAorCisjIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19kZWNsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKyAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiAkYXNfZGVjbF9uYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKyNlbHNlCisgICh2b2lkKSAkYXNfZGVjbF9uYW1lOworI2VuZGlmCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19kZWNsCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBOZXQtU05NUCAkYXNfbWUgNS40LjQsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitJdCB3YXMgY3JlYXRlZCBieSBOZXQtU05NUCAkYXNfbWUgNS43LjMucmMzLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKIAogX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKIHsKIGNhdCA8PF9BU1VOQU1FCiAjIyAtLS0tLS0tLS0gIyMKQEAgLTE0NzAsNyArMjkyOSw3IEBACiAvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi1ob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGwgICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCiAvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCiAvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCkBAIC0xNDgyLDggKzI5NDEsOSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBlY2hvICJQQVRIOiAkYXNfZGlyIgotZG9uZQorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIH0gPiY1CiAKQEAgLTE1MDUsNyArMjk2NSw2IEBACiBhY19jb25maWd1cmVfYXJncz0KIGFjX2NvbmZpZ3VyZV9hcmdzMD0KIGFjX2NvbmZpZ3VyZV9hcmdzMT0KLWFjX3NlcD0KIGFjX211c3Rfa2VlcF9uZXh0PWZhbHNlCiBmb3IgYWNfcGFzcyBpbiAxIDIKIGRvCkBAIC0xNTE2LDEzICsyOTc1LDEzIEBACiAgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKICAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKICAgICAgIGNvbnRpbnVlIDs7Ci0gICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9cIlwnXSopCi0gICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CiAgICAgZXNhYwogICAgIGNhc2UgJGFjX3Bhc3MgaW4KLSAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CiAgICAgMikKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgogICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCiAJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgogICAgICAgZWxzZQpAQCAtMTUzOCwxMDQgKzI5OTcsMTE1IEBACiAJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKIAllc2FjCiAgICAgICBmaQotICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCi0gICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCi0gICAgICBhY19zZXA9IiAiCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCiAgICAgICA7OwogICAgIGVzYWMKICAgZG9uZQogZG9uZQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9Ci0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KIAogIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQogIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKICMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgotIyBXQVJOSU5HOiBCZSBzdXJlIG5vdCB0byB1c2Ugc2luZ2xlIHF1b3RlcyBpbiB0aGVyZSwgYXMgc29tZSBzaGVsbHMsCi0jIHN1Y2ggYXMgb3VyIERVIDUuMCBmcmllbmQsIHdpbGwgdGhlbiBgY2xvc2UnIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCiB0cmFwICdleGl0X3N0YXR1cz0kPwogICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KICAgewogICAgIGVjaG8KIAotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgQ2FjaGUgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgogICAgIGVjaG8KICAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAoteworKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKICAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgotICAgICphY19zcGFjZT1cICopCisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKICAgICAgIHNlZCAtbiBcCi0JInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOwotCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCi0gICAgICA7OworCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorICAgICAgOzsgIygKICAgICAqKQotICAgICAgc2VkIC1uIFwKLQkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCiAgICAgICA7OwotICAgIGVzYWM7Ci19CisgICAgZXNhYyB8CisgICAgc29ydAorKQogICAgIGVjaG8KIAotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBPdXRwdXQgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwogICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKICAgICBkbwotICAgICAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCi0gICAgICBlY2hvICIkYWNfdmFyPSciJyInJGFjX3ZhbCciJyInIgorICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICBkb25lIHwgc29ydAogICAgIGVjaG8KIAogICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0gIyMKLSMjIE91dHB1dCBmaWxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgICBlY2hvCiAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcwogICAgICAgZG8KLQlldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLQllY2hvICIkYWNfdmFyPSciJyInJGFjX3ZhbCciJyInIgorCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorCWNhc2UgJGFjX3ZhbCBpbgorCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwllc2FjCisJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgogICAgICAgZG9uZSB8IHNvcnQKICAgICAgIGVjaG8KICAgICBmaQogCiAgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLSAjIworICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCiAjIyBjb25mZGVmcy5oLiAjIwotIyMgLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0gIyMiCiAgICAgICBlY2hvCi0gICAgICBzZWQgIi9eJC9kIiBjb25mZGVmcy5oIHwgc29ydAorICAgICAgY2F0IGNvbmZkZWZzLmgKICAgICAgIGVjaG8KICAgICBmaQogICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgotICAgIGVjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCiAgIH0gPiY1Ci0gIHJtIC1mIGNvcmUgKi5jb3JlICYmCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKICAgICBleGl0ICRleGl0X3N0YXR1cwotICAgICAnIDAKKycgMAogZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCi0gIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKIGRvbmUKIGFjX3NpZ25hbD0wCiAKICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCi1ybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKLSMgQUlYIGNwcCBsb3NlcyBvbiBhbiBlbXB0eSBmaWxlLCBzbyBtYWtlIHN1cmUgaXQgY29udGFpbnMgYXQgbGVhc3QgYSBuZXdsaW5lLgotZWNobyA+Y29uZmRlZnMuaAorcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKworJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAogCiAjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KIApAQCAtMTY0MywxMTIgKzMxMTMsMTM3IEBACiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCiBfQUNFT0YKIAorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKIAogIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCi0jIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgotaWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgotICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KLSAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKLSAgZWxzZQotICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKLSAgZmkKKyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCithY19zaXRlX2ZpbGUxPU5PTkUKK2FjX3NpdGVfZmlsZTI9Tk9ORQoraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgorICBjYXNlICRDT05GSUdfU0lURSBpbiAjKCgKKyAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgIGVzYWMKK2VsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitlbHNlCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQogZmkKLWZvciBhY19zaXRlX2ZpbGUgaW4gJENPTkZJR19TSVRFOyBkbwotICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCitkbworICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CiAgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1Ci0gICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICBmaQogZG9uZQogCiBpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwKLSAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCi0gIGlmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KLSAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAkY2FjaGVfZmlsZTs7Ci0gICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuIC4vJGNhY2hlX2ZpbGU7OworICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OwogICAgIGVzYWMKICAgZmkKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgPiRjYWNoZV9maWxlCiBmaQogCiAjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCiAjIHZhbHVlLgogYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCi1mb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwKLQkgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCiAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CiAgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0Ci0gIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgotICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KICAgICBzZXQsKQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsc2V0KQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLCk7OwogICAgICopCiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KLQlhY19jYWNoZV9jb3JydXB0ZWQ9OgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQogICAgICAgZmk7OwogICBlc2FjCiAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KICAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCiAgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgotICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQotICAgICAgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CiAgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKICAgICBlc2FjCiAgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCiAgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KLSAgICAgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIiA7OworICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OwogICAgIGVzYWMKICAgZmkKIGRvbmUKIGlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKIGZpCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwpAQCAtMTc2MiwzMSArMzI1Nyw3IEBACiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAgICAgYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIgorYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIgogCiAKIApAQCAtMTc5Niw1NzAgKzMyNjcsMTM3IEBACiAjCiAjIHNhdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMKICMKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TICIkYWNfY29uZmlndXJlX2FyZ3MiCiBfQUNFT0YKIAotQ09ORklHVVJFX09QVElPTlM9IlwiJGFjX2NvbmZpZ3VyZV9hcmdzIlwiCitDT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3NcIiIKIAogCi0jCi0jIENvbXBpbGF0aW9uIHNldHVwCi0jCisjIworIyMgUmVjb21tZW5kZWQgc3RydWN0dXJlOgorIyMKKyMgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBwYWNrYWdlCisjICAgICBjaGVja3MgZm9yIHByb2dyYW1zCisjICAgICBjaGVja3MgZm9yIGxpYnJhcmllcworIyAgICAgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKKyMgICAgIGNoZWNrcyBmb3IgdHlwZXMKKyMgICAgIGNoZWNrcyBmb3Igc3RydWN0dXJlcworIyAgICAgY2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MKKyMgICAgIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKKyMgICAgIGNoZWNrcyBmb3Igc3lzdGVtIHNlcnZpY2VzCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2Mgb3IgLS13aXRob3V0LWNjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9jYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9jYyIKLSAgQ0M9JHdpdGhfY2M7ZXhwb3J0IENDCi1maTsKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjICAgQ29tbWFuZC1saW5lIHByb2Nlc3NpbmcgLSAtLXdpdGgvLS1lbmFibGUKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN5c3RlbTogQ29tcGlsZXIgc2V0dGluZ3MKKyMjCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saW5rY2Mgb3IgLS13aXRob3V0LWxpbmtjYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGlua2NjK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xpbmtjYyIKLSAgTElOS0NDPSR3aXRoX2xpbmtjYztleHBvcnQgTElOS0NDCi1maTsKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jYzsgQ0M9JHdpdGhfY2M7ZXhwb3J0IENDCitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXIgb3IgLS13aXRob3V0LWFyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hcitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9hciIKLSAgQVI9JHdpdGhfYXI7IGV4cG9ydCBBUgotZmk7CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlua2NjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saW5rY2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpbmtjYzsgTElOS0NDPSR3aXRoX2xpbmtjYztleHBvcnQgTElOS0NDCitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW5kaWFubmVzcyBvciAtLXdpdGhvdXQtZW5kaWFubmVzcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZW5kaWFubmVzcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbmRpYW5uZXNzIgotICBpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3MgIT0gImJpZyIgLWEgJHdpdGhfZW5kaWFubmVzcyAhPSAibGl0dGxlIiA7IHRoZW4KLSAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBFbmRpYW5uZXNzIG11c3QgYmUgYmlnIG9yIGxpdHRsZSwgbm90IFwiJHdpdGhfZW5kaWFubmVzc1wiLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBFbmRpYW5uZXNzIG11c3QgYmUgYmlnIG9yIGxpdHRsZSwgbm90IFwiJHdpdGhfZW5kaWFubmVzc1wiLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FyOyBBUj0kd2l0aF9hcjsgZXhwb3J0IEFSCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbmRpYW5uZXNzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbmRpYW5uZXNzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbmRpYW5uZXNzOyBpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3MgIT0gImJpZyIgLWEgJHdpdGhfZW5kaWFubmVzcyAhPSAibGl0dGxlIiA7IHRoZW4KKyAgICAgICBhc19mbl9lcnJvciAkPyAiRW5kaWFubmVzcyBtdXN0IGJlIGJpZyBvciBsaXR0bGUsIG5vdCBcIiR3aXRoX2VuZGlhbm5lc3NcIi4iICIkTElORU5PIiA1OwogICAgICBmaQogCi1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWNmbGFncyBvciAtLXdpdGhvdXQtY2ZsYWdzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9jZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfY2ZsYWdzIgotICBDRkxBR1M9JHdpdGhfY2ZsYWdzOyBleHBvcnQgQ0ZMQUdTCi1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxkZmxhZ3Mgb3IgLS13aXRob3V0LWxkZmxhZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xkZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbGRmbGFncyIKLSAgTERGTEFHUz0kd2l0aF9sZGZsYWdzOyBleHBvcnQgTERGTEFHUwotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hcy1uZWVkZWQgb3IgLS1kaXNhYmxlLWFzLW5lZWRlZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hc19uZWVkZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2FzX25lZWRlZCIKLQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJzIG9yIC0td2l0aG91dC1saWJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9saWJzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xpYnMiCi0gIExJQlM9JHdpdGhfbGliczsgZXhwb3J0IExJQlMKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LWxpYnRvb2wgb3IgLS1kaXNhYmxlLXNpbGVudC1saWJ0b29sIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9saWJ0b29sK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zaWxlbnRfbGlidG9vbCIKLSAgTElCVE9PTEZMQUdTPS0tc2lsZW50Ci1maTsKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW5zdGFsbC1wcmVmaXggb3IgLS13aXRob3V0LWluc3RhbGwtcHJlZml4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9pbnN0YWxsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9pbnN0YWxsX3ByZWZpeCIKLSAgSU5TVEFMTF9QUkVGSVg9IiR3aXRodmFsIgotZmk7Ci0KLWlmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInh5ZXMiIDsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLXdpdGgtaW5zdGFsbC1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogLS13aXRoLWluc3RhbGwtcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieG5vIiA7IHRoZW4KLSAgSU5TVEFMTF9QUkVGSVg9IiIKIGZpCiAKIAotIyBjaGVjayBmb3IgZXJyb3JzIGluIGFyZ3MgdGhhdCBydW4gYWZ0ZXIgbW9kdWxlIHByb2Nlc3NpbmcgaGVyZSwgc28KLSMgdGhleSBmYWlsIGJlZm9yZSBtb2R1bGUgcHJvY2Vzc2luZy4uLgotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYndyYXAgb3IgLS1kaXNhYmxlLWxpYndyYXAgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlid3JhcCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbGlid3JhcCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxpYndyYXAvLS13aXRob3V0LWxpYndyYXAgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxpYndyYXAvLS13aXRob3V0LWxpYndyYXAgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtemxpYiBvciAtLWRpc2FibGUtemxpYiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV96bGliK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV96bGliIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtemxpYi8tLXdpdGhvdXQtemxpYiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtemxpYi8tLXdpdGhvdXQtemxpYiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taW5pX2FnZW50IG9yIC0tZGlzYWJsZS1taW5pX2FnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pbmlfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pbmlfYWdlbnQiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KLSAgICBtaW5pX2FnZW50PSJ5ZXMiCi1lbHNlCi0gICAgbWluaV9hZ2VudD0ibm8iCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jZmxhZ3M7IENGTEFHUz0kd2l0aF9jZmxhZ3M7IGV4cG9ydCBDRkxBR1MKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaV9hZ2VudCBvciAtLXdpdGhvdXQtbWluaV9hZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWluaV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taW5pX2FnZW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmlhZ2VudCBvciAtLXdpdGhvdXQtbWluaWFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taW5pYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWluaWFnZW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbmlhZ2VudCBvciAtLWRpc2FibGUtbWluaWFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pbmlhZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWluaWFnZW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnQgb3IgLS1kaXNhYmxlLWFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9hZ2VudCIKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGRmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGRmbGFncytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGRmbGFnczsgTERGTEFHUz0kd2l0aF9sZGZsYWdzOyBleHBvcnQgTERGTEFHUworZmkKIAotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgIT0gInhubyI7IHRoZW4KLSAgIFNOTVBEPSdzbm1wZCQoRVhFRVhUKScKLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCi0gICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCi0gICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJwotZWxzZQotICAgU05NUEQ9IiIKLSAgICMgd2Ugc3RpbGwgbmVlZC93YW50IHRoZSBhZ2VudGxpYnMgKGZvciBzdWJhZ2VudHMsIGUuZy4gc25tcHRyYXBkKQotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKLSAgICMgYnVpbGRpbmcgc25tcHRyYXBkIHcvbyBhZ2VudGxpYnMgZG9lc24ndCB3b3JrIGF0bQotICAgI1RSQVBMSUJTPSckKFRSQVBEV0lUSE9VVEFHRU5UKScKLSAgICNVU0VUUkFQTElCUz0nJChVU0VMSUJTKScKLSAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKLSAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hcy1uZWVkZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYXNfbmVlZGVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYXNfbmVlZGVkOworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGliczsgTElCUz0kd2l0aF9saWJzOyBleHBvcnQgTElCUworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LWxpYnRvb2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X2xpYnRvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfbGlidG9vbDsgTElCVE9PTEZMQUdTPS0tc2lsZW50CiBmaQogCiAKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50IG9yIC0td2l0aG91dC1hZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfYWdlbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50Ly0tZGlzYWJsZS1hZ2VudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudC8tLWRpc2FibGUtYWdlbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyMKKyMgICBTeXN0ZW06IExpYnJhcnkgc2V0dGluZ3MKKyMjCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hcHBsaWNhdGlvbnMgb3IgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hcHBsaWNhdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2FwcGxpY2F0aW9ucyIKIAotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9hcHBsaWNhdGlvbnMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFwcHMiCi1maQotIyBDb21tb24gbWlzdGFrZXMKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hcHBsaWNhdGlvbnMgb3IgLS13aXRob3V0LWFwcGxpY2F0aW9ucyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYXBwbGljYXRpb25zK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2FwcGxpY2F0aW9ucyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFudWFscyBvciAtLWRpc2FibGUtbWFudWFscyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tYW51YWxzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tYW51YWxzIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21hbnVhbHMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1hbiIKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZG1hbGxvYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZG1hbGxvYzsKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFudWFscyBvciAtLXdpdGhvdXQtbWFudWFscyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWFudWFscytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9tYW51YWxzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tYW51YWxzLy0tZGlzYWJsZS1tYW51YWxzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1hbnVhbHMvLS1kaXNhYmxlLW1hbnVhbHMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2NyaXB0cyBvciAtLWRpc2FibGUtc2NyaXB0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zY3JpcHRzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zY3JpcHRzIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3NjcmlwdHMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGxvY2FsIgotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zY3JpcHRzIG9yIC0td2l0aG91dC1zY3JpcHRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zY3JpcHRzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NjcmlwdHMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNjcmlwdHMvLS1kaXNhYmxlLXNjcmlwdHMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2NyaXB0cy8tLWRpc2FibGUtc2NyaXB0cyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJzIG9yIC0tZGlzYWJsZS1taWJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYnMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWlicyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWlicyIKLWZpCi0jIHdpdGgtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUlOU1VCUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTUFJTlNVQlMiID4mNgotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWxvYWRpbmcgb3IgLS1kaXNhYmxlLW1pYi1sb2FkaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYl9sb2FkaW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJfbG9hZGluZyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9taWJfbG9hZGluZyIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgMQotX0FDRU9GCi0KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWxvYWRpbmcgb3IgLS13aXRob3V0LW1pYi1sb2FkaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJfbG9hZGluZytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJfbG9hZGluZyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWxvYWRpbmcvLS1kaXNhYmxlLW1pYi1sb2FkaW5nIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1sb2FkaW5nLy0tZGlzYWJsZS1taWItbG9hZGluZyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMKLVNOTVBfVkVSU0lPTlM9IiIKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdjEgb3IgLS1kaXNhYmxlLXNubXB2MSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zbm1wdjErc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NubXB2MSIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjEiID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NOTVBWMSAxCi1fQUNFT0YKLQotZWxzZQotICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAxIgotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdjEgb3IgLS13aXRob3V0LXNubXB2MSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc25tcHYxK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NubXB2MSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYxLy0tZGlzYWJsZS1zbm1wdjEgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYxLy0tZGlzYWJsZS1zbm1wdjEgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHYyYyBvciAtLWRpc2FibGUtc25tcHYyYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zbm1wdjJjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zbm1wdjJjIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB2MmMiID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMgMQotX0FDRU9GCi0KLWVsc2UKLSAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMmMiCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB2MmMgb3IgLS13aXRob3V0LXNubXB2MmMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NubXB2MmMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc25tcHYyYyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYyYy8tLWRpc2FibGUtc25tcHYyYyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjJjLy0tZGlzYWJsZS1zbm1wdjJjIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMyIKLQotICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCi0gIFNOTVAgVmVyc2lvbnMgU3VwcG9ydGVkOiAgICRTTk1QX1ZFUlNJT05TCi1FT0YKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2V0LXN1cHBvcnQgb3IgLS1kaXNhYmxlLXNldC1zdXBwb3J0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NldF9zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zZXRfc3VwcG9ydCIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zZXRfc3VwcG9ydCIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgMQotX0FDRU9GCi0KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2V0LXN1cHBvcnQgb3IgLS13aXRob3V0LXNldC1zdXBwb3J0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zZXRfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zZXRfc3VwcG9ydCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2V0LXN1cHBvcnQvLS1kaXNhYmxlLXNldC1zdXBwb3J0IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNldC1zdXBwb3J0Ly0tZGlzYWJsZS1zZXQtc3VwcG9ydCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXMgb3IgLS1kaXNhYmxlLWRlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlcyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9kZXMiID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX0RFUyAxCi1fQUNFT0YKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXMgb3IgLS13aXRob3V0LWRlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVzLy0tZGlzYWJsZS1kZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVzLy0tZGlzYWJsZS1kZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHJpdmFjeSBvciAtLWRpc2FibGUtcHJpdmFjeSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wcml2YWN5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wcml2YWN5IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWIDEKLV9BQ0VPRgotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXByaXZhY3kgb3IgLS13aXRob3V0LXByaXZhY3kgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3ByaXZhY3krc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcHJpdmFjeSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcHJpdmFjeS8tLWRpc2FibGUtcHJpdmFjeSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wcml2YWN5Ly0tZGlzYWJsZS1wcml2YWN5IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1kNSBvciAtLWRpc2FibGUtbWQ1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21kNStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWQ1IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfTUQ1IDEKLV9BQ0VPRgotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1kNSBvciAtLXdpdGhvdXQtbWQ1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWQ1IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZDUvLS1kaXNhYmxlLW1kNSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZDUvLS1kaXNhYmxlLW1kNSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgb3IgLS1kaXNhYmxlLWludGVybmFsLW1kNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9pbnRlcm5hbF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2ludGVybmFsX21kNSIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9pbnRlcm5hbF9tZDUiID0gInh5ZXMiOyB0aGVuCi0gIGlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFlvdSBjYW4gbm90IHNwZWNpZnkgYm90aCAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgYW5kIC0tZGlzYWJsZS1tZDUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogWW91IGNhbiBub3Qgc3BlY2lmeSBib3RoIC0tZW5hYmxlLWludGVybmFsLW1kNSBhbmQgLS1kaXNhYmxlLW1kNSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1IDEKLV9BQ0VPRgotCi0gIGZpCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWludGVybmFsLW1kNSBvciAtLXdpdGhvdXQtaW50ZXJuYWwtbWQ1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9pbnRlcm5hbF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfaW50ZXJuYWxfbWQ1IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pbnRlcm5hbC1tZDUvLS1kaXNhYmxlLWludGVybmFsLW1kNSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pbnRlcm5hbC1tZDUvLS1kaXNhYmxlLWludGVybmFsLW1kNSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pcHY2IG9yIC0tZGlzYWJsZS1pcHY2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2lwdjYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2lwdjYiCi0gIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEKLV9BQ0VPRgotCi0gICAgZmkKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWlwdjYgb3IgLS13aXRob3V0LWlwdjYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2lwdjYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfaXB2NiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaXB2Ni8tLWRpc2FibGUtaXB2NiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pcHY2Ly0tZGlzYWJsZS1pcHY2IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxvY2FsLXNtdXggb3IgLS1kaXNhYmxlLWxvY2FsLXNtdXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbG9jYWxfc211eCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbG9jYWxfc211eCIKLSAgaWYgdGVzdCAieCRlbmFibGVfbG9jYWxfc211eCIgPSAieHllcyI7IHRoZW4KLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVggMQotX0FDRU9GCi0KLSAgICBmaQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbG9jYWwtc211eCBvciAtLXdpdGhvdXQtbG9jYWwtc211eCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbG9jYWxfc211eCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9sb2NhbF9zbXV4IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1sb2NhbC1zbXV4Ly0tZGlzYWJsZS1sb2NhbC1zbXV4IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWxvY2FsLXNtdXgvLS1kaXNhYmxlLWxvY2FsLXNtdXggaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWdnaW5nIG9yIC0tZGlzYWJsZS1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZWJ1Z2dpbmciCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfQUxXQVlTX0RFQlVHIDEKLV9BQ0VPRgotCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWJ1Z2dpbmcgb3IgLS13aXRob3V0LWRlYnVnZ2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RlYnVnZ2luZyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVidWdnaW5nLy0tZGlzYWJsZS1kZWJ1Z2dpbmcgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVidWdnaW5nLy0tZGlzYWJsZS1kZWJ1Z2dpbmcgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGV2ZWxvcGVyIG9yIC0tZGlzYWJsZS1kZXZlbG9wZXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGV2ZWxvcGVyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZXZlbG9wZXIiCi0gIGRldmVsb3Blcj15ZXMKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRldmVsb3BlciBvciAtLXdpdGhvdXQtZGV2ZWxvcGVyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZXZlbG9wZXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZGV2ZWxvcGVyIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXZlbG9wZXIvLS1kaXNhYmxlLWRldmVsb3BlciBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXZlbG9wZXIvLS1kaXNhYmxlLWRldmVsb3BlciBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLWlmIHRlc3QgIngkZW5hYmxlX2RlYnVnZ2luZyIgPSAieG5vIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTk9fREVCVUdHSU5HIDEKLV9BQ0VPRgotCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG1hbGxvYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG1hbGxvYzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRtYWxsb2MvLS13aXRob3V0LWRtYWxsb2MgaW5zdGVhZCIgIiRMSU5FTk8iIDUKIGZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbWFsbG9jIG9yIC0td2l0aG91dC1kbWFsbG9jIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RtYWxsb2MiCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIExJQlM9IiRMSUJTIC1sZG1hbGxvYyIKLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRE1BTExPQ19IIDEKLV9BQ0VPRgogCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWZlbmNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lZmVuY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VmZW5jZTsgdXNlX2VmZW5jZT0iJHdpdGh2YWwiCitmaQogCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0geCAtYSAtZCAkd2l0aHZhbDsgdGhlbgotICAgICBpZiB0ZXN0IC1kICR3aXRodmFsL2xpYjsgdGhlbgotICAgICAgIExERkxBR1M9Ii1MJHdpdGh2YWwvbGliICRMREZMQUdTIgotICAgICBmaQotICAgICBpZiB0ZXN0IC1kICR3aXRodmFsL2luY2x1ZGU7IHRoZW4KLQlDUFBGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlICRDUFBGTEFHUyIKLSAgICAgZmkKLSAgZmkKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lZmVuY2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWZlbmNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZWZlbmNlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWZlbmNlLy0td2l0aG91dC1lZmVuY2UgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLSAgICAgIExJQlM9IiRMSUJTIC1sZG1hbGxvYyIKLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRE1BTExPQ19IIDEKLV9BQ0VPRgotCi0gICAgZmkKLQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kbWFsbG9jIG9yIC0tZGlzYWJsZS1kbWFsbG9jIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RtYWxsb2MiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbWFsbG9jLy0td2l0aG91dC1kbWFsbG9jIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbWFsbG9jLy0td2l0aG91dC1kbWFsbG9jIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVmZW5jZSBvciAtLXdpdGhvdXQtZWZlbmNlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lZmVuY2Urc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZWZlbmNlIgotICB1c2VfZWZlbmNlPSIkd2l0aHZhbCIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVmZW5jZSBvciAtLWRpc2FibGUtZWZlbmNlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VmZW5jZStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZWZlbmNlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWZlbmNlLy0td2l0aG91dC1lZmVuY2UgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVmZW5jZS8tLXdpdGhvdXQtZWZlbmNlIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAogdHJ5cnNhcmVmPW5vCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcnNhcmVmIG9yIC0td2l0aG91dC1yc2FyZWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3JzYXJlZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9yc2FyZWYiCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcnNhcmVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yc2FyZWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3JzYXJlZjsgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgogICAgICAgdHJ5cnNhcmVmPXllcwogICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCiAgICAgICB0cnlyc2FyZWY9bm8KQEAgLTIzNzYsMjcgKzM0MTQsMzIgQEAKIAogICAgICAgdHJ5cnNhcmVmPXllcwogICAgIGZpCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yc2FyZWYgb3IgLS1kaXNhYmxlLXJzYXJlZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9yc2FyZWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JzYXJlZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJzYXJlZi8tLXdpdGhvdXQtcnNhcmVmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yc2FyZWYvLS13aXRob3V0LXJzYXJlZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnNhcmVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JzYXJlZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JzYXJlZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJzYXJlZi8tLXdpdGhvdXQtcnNhcmVmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCiAKIHRyeW9wZW5zc2w9ZGVmYXVsdHllcwogYXNrZWRvcGVuc3NsPW5vCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3BlbnNzbCBvciAtLXdpdGhvdXQtb3BlbnNzbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3BlbnNzbCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vcGVuc3NsIgotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW9wZW5zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX29wZW5zc2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX29wZW5zc2w7IGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KICAgICAgIHRyeW9wZW5zc2w9eWVzCiAgICAgICBhc2tlZG9wZW5zc2w9eWVzCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhpbnRlcm5hbCI7IHRoZW4KKyAgICAgIHRyeW9wZW5zc2w9aW50ZXJuYWwKKyAgICAgIGFza2Vkb3BlbnNzbD1pbnRlcm5hbAogICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCiAgICAgICB0cnlvcGVuc3NsPW5vCiAgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLWQgIiR3aXRodmFsL2xpYi9NaW5HVyI7IHRoZW4KKyAgICAgICAgTERGTEFHUz0iLUwkd2l0aHZhbC9saWIvTWluR1cgJExERkxBR1MiCisgICAgICAgIENQUEZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUgJENQUEZMQUdTIgorICAgICAgZWxzZQogCiAgIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0geCAtYSAtZCAkd2l0aHZhbDsgdGhlbgogICAgICBpZiB0ZXN0IC1kICR3aXRodmFsL2xpYjsgdGhlbgpAQCAtMjQwNywxMCArMzQ1MCwxNyBAQAogICAgICBmaQogICBmaQogCisgICAgICBmaQogICAgICAgdHJ5b3BlbnNzbD15ZXMKICAgICAgIGFza2Vkb3BlbnNzbD15ZXMKICAgICBmaQotZmk7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3BlbnNzbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vcGVuc3NsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3BlbnNzbDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKIGlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCiAKICAgaWYgdGVzdCAieC91c3IvbG9jYWwvc3NsIiAhPSB4IC1hIC1kIC91c3IvbG9jYWwvc3NsOyB0aGVuCkBAIC0yNDI0LDIyNiArMzQ3NCwyMyBAQAogCiAgICAgICB0cnlvcGVuc3NsPXllcwogZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vcGVuc3NsIG9yIC0tZGlzYWJsZS1vcGVuc3NsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29wZW5zc2wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX29wZW5zc2wiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zc2wgb3IgLS13aXRob3V0LXNzbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc3NsK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NzbCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNzbCBvciAtLWRpc2FibGUtc3NsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NzbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc3NsIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLXRyeWtyYjU9ZGVmYXVsdHllcwotYXNrZWRrcmI1PW5vCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgta3JiNSBvciAtLXdpdGhvdXQta3JiNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfa3JiNStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9rcmI1IgotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAgYXNrZWRrcmI1PXllcwotICAgICAga3JiNXBhdGg9dW5kZWYKLSAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgotICAgICAgdHJ5a3JiNT1ubwotICAgICAga3JiNXBhdGg9dW5kZWYKLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGFza2Vka3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPSR3aXRodmFsCi0gICAgZmkKLWZpOwotaWYgdGVzdCAieCR0cnlrcmI1IiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD0vdXNyL2tlcmJlcm9zCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWtyYjUgb3IgLS1kaXNhYmxlLWtyYjUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfa3JiNStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfa3JiNSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWtyYjUvLS13aXRob3V0LWtyYjUgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWtyYjUvLS13aXRob3V0LWtyYjUgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcnBtIG9yIC0td2l0aG91dC1ycG0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3JwbStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9ycG0iCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwbSBvciAtLWRpc2FibGUtcnBtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3JwbStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcnBtIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnBtLy0td2l0aG91dC1ycG0gaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJwbS8tLXdpdGhvdXQtcnBtIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5IG9yIC0tZGlzYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYWdlbnR4X2RvbV9zb2NrX29ubHkiCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkgMQotX0FDRU9GCi0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50eC1kb20tc29jay1vbmx5IG9yIC0td2l0aG91dC1hZ2VudHgtZG9tLXNvY2stb25seSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYWdlbnR4X2RvbV9zb2NrX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfYWdlbnR4X2RvbV9zb2NrX29ubHkiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5Ly0tZGlzYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seS8tLWRpc2FibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50IG9yIC0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50IiA9ICJ4bm8iOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYIDEKLV9BQ0VPRgotCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNzbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3NsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zc2w7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQiICIkTElORU5PIiA1CiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB0cmFwZC1zdWJhZ2VudCBvciAtLXdpdGhvdXQtc25tcHRyYXBkLXN1YmFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc25tcHRyYXBkX3N1YmFnZW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQvLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQvLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcyBvciAtLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzIgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vcGFxdWUtc3BlY2lhbC10eXBlcyBvciAtLWRpc2FibGUtb3BhcXVlLXNwZWNpYWwtdHlwZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb3BhcXVlX3NwZWNpYWxfdHlwZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX29wYXF1ZV9zcGVjaWFsX3R5cGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMvLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcy8tLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliZGlycyBvciAtLXdpdGhvdXQtbWliZGlycyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliZGlycytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJkaXJzIgotICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iJHdpdGhfbWliZGlycyIKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTICIkd2l0aF9taWJkaXJzIgotX0FDRU9GCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYmRpcnMgb3IgLS1kaXNhYmxlLW1pYmRpcnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliZGlycytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliZGlycyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmRpcnMvLS13aXRob3V0LW1pYmRpcnMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmRpcnMvLS13aXRob3V0LW1pYmRpcnMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWlicyBvciAtLXdpdGhvdXQtbWlicyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWlicytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJzIgotICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJHdpdGhfbWlicyIKLWZpOwotIyBlbmFibGUtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliZmlsZXMgb3IgLS13aXRob3V0LW1pYmZpbGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJmaWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJmaWxlcyIKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMgIiR3aXRoX21pYmZpbGVzIgotX0FDRU9GCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYmZpbGVzIG9yIC0tZGlzYWJsZS1taWJmaWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJmaWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliZmlsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJmaWxlcy8tLXdpdGhvdXQtbWliZmlsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmZpbGVzLy0td2l0aG91dC1taWJmaWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nIG9yIC0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYl9jb25maWdfY2hlY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYl9jb25maWdfY2hlY2tpbmciCi0gIHdpdGhfbWliX2NmZ19jaGVja3M9InllcyIKLWVsc2UKLSAgd2l0aF9taWJfY2ZnX2NoZWNrcz0ibm8iCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItY29uZmlnLWNoZWNraW5nIG9yIC0td2l0aG91dC1taWItY29uZmlnLWNoZWNraW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJfY29uZmlnX2NoZWNraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYl9jb25maWdfY2hlY2tpbmciCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnIG9yIC0tZGlzYWJsZS1taWItY29uZmlnLWRlYnVnIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYl9jb25maWdfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYl9jb25maWdfZGVidWciCi0gIHdpdGhfbWliX2NmZ19kZWJ1Zz0ieWVzIgotZWxzZQotICB3aXRoX21pYl9jZmdfZGVidWc9Im5vIgotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWNvbmZpZy1jaGVja2luZyBvciAtLXdpdGhvdXQtbWliLWNvbmZpZy1jaGVja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliX2NvbmZpZ19jaGVja2luZytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJfY29uZmlnX2NoZWNraW5nIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWZkLXJld3JpdGVzIG9yIC0tZGlzYWJsZS1tZmQtcmV3cml0ZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWZkX3Jld3JpdGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tZmRfcmV3cml0ZXMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgotICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTIDEKLV9BQ0VPRgotCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3NsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NzbDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCIgIiRMSU5FTk8iIDUKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWZkLXJld3JpdGVzIG9yIC0td2l0aG91dC1tZmQtcmV3cml0ZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21mZF9yZXdyaXRlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9tZmRfcmV3cml0ZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1mZC1yZXdyaXRlcy8tLWRpc2FibGUtbWZkLXJld3JpdGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1mZC1yZXdyaXRlcy8tLWRpc2FibGUtbWZkLXJld3JpdGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAogYXNrZWRwa2NzPW5vCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGtjcyBvciAtLXdpdGhvdXQtcGtjcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGtjcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wa2NzIgotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBrY3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BrY3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BrY3M7IGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KICAgICAgIGFza2VkcGtjcz15ZXMKICAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgogICAgICAgYXNrZWRwa2NzPW5vCkBAIC0yNjYwLDM5NiArMzUwNywxMzM4IEBACiAKICAgICAgIGFza2VkcGtjcz15ZXMKICAgICBmaQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGtjcyBvciAtLWRpc2FibGUtcGtjcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wa2NzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wa2NzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGtjcy8tLXdpdGhvdXQtcGtjcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGtjcy8tLXdpdGhvdXQtcGtjcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdGluZy1jb2RlIG9yIC0tZGlzYWJsZS10ZXN0aW5nLWNvZGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdGVzdGluZ19jb2RlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV90ZXN0aW5nX2NvZGUiCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAxCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGtjcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wa2NzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGtjczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBrY3MvLS13aXRob3V0LXBrY3MgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKwordHJ5a3JiNT1kZWZhdWx0eWVzCithc2tlZGtyYjU9bm8KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rcmI1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9rcmI1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9rcmI1OyBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAgYXNrZWRrcmI1PXllcworICAgICAga3JiNXBhdGg9dW5kZWYKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgorICAgICAgdHJ5a3JiNT1ubworICAgICAga3JiNXBhdGg9dW5kZWYKKyAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGFza2Vka3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPSR3aXRodmFsCisgICAgZmkKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1rcmI1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2tyYjUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9rcmI1OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta3JiNS8tLXdpdGhvdXQta3JiNSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCR0cnlrcmI1IiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBrcmI1cGF0aD0vdXNyL2tlcmJlcm9zCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbjsgd2FudF9kbnNzZWM9JHdpdGh2YWwKK2Vsc2UKKyAgd2FudF9kbnNzZWM9bm8KK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24vLS13aXRob3V0LWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZG5zc2VjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kbnNzZWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2Ruc3NlYzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uLy0td2l0aG91dC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRuc3NlYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kbnNzZWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kbnNzZWM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbi8tLXdpdGhvdXQtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJwbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcnBtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ycG07CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JwbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JwbTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJwbS8tLXdpdGhvdXQtcnBtIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBCdWlsZCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCisjICAgICAgIEluc3RhbGwgcHJlZml4CisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW5zdGFsbC1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2luc3RhbGxfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9pbnN0YWxsX3ByZWZpeDsgSU5TVEFMTF9QUkVGSVg9IiR3aXRodmFsIgorZmkKKworCitpZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4eWVzIiA7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1pbnN0YWxsLXByZWZpeCByZXF1aXJlcyBhbiBhcmd1bWVudCIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4bm8iIDsgdGhlbgorICBJTlNUQUxMX1BSRUZJWD0iIgorZmkKKworCisKKyMKKyMgICBTdWJzeXN0ZW1zIHRvIGJ1aWxkOgorIyAgICAgICBMaWJyYXJ5CisjCitGRUFUVVJFSEVBREVSUz0ibGlicmFyeS9mZWF0dXJlcy5oIgorRlRNQUlOU1VCUz0iIgorCisjCisjICAgICAgIEFnZW50CisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hZ2VudDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FnZW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudC8tLWRpc2FibGUtYWdlbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2FnZW50IiAhPSAieG5vIjsgdGhlbgorICAgU05NUEQ9J3NubXBkJChFWEVFWFQpJworICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKKyAgIEZFQVRVUkVIRUFERVJTPSIkRkVBVFVSRUhFQURFUlMgYWdlbnQvZmVhdHVyZXMtbWliZ3JvdXBzLmggYWdlbnQvZmVhdHVyZXMuaCIKKyAgIEZUTUFJTlNVQlM9ImFnZW50ICRGVE1BSU5TVUJTIgorICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJworICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKK2Vsc2UKKyAgIFNOTVBEPSIiCisgICAjIHdlIHN0aWxsIG5lZWQvd2FudCB0aGUgYWdlbnRsaWJzIChmb3Igc3ViYWdlbnRzLCBlLmcuIHNubXB0cmFwZCkKKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCisgICAjIGJ1aWxkaW5nIHNubXB0cmFwZCB3L28gYWdlbnRsaWJzIGRvZXNuJ3Qgd29yayBhdG0KKyAgICNUUkFQTElCUz0nJChUUkFQRFdJVEhPVVRBR0VOVCknCisgICAjVVNFVFJBUExJQlM9JyQoVVNFTElCUyknCisgICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCisgICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJworCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfQUdFTlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisKKworIyAgICAgICBBcHBsaWNhdGlvbnMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hcHBsaWNhdGlvbnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYXBwbGljYXRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYXBwbGljYXRpb25zOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFwcGxpY2F0aW9ucyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXBwbGljYXRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hcHBsaWNhdGlvbnM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFwcGxpY2F0aW9ucy8tLWRpc2FibGUtYXBwbGljYXRpb25zIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9hcHBsaWNhdGlvbnMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFwcHMiCisgICBGRUFUVVJFSEVBREVSUz0iJEZFQVRVUkVIRUFERVJTIGZlYXR1cmVzLXNubXBuZXRzdGF0LmggZmVhdHVyZXMtYXBwcy5oIgorICAgRlRNQUlOU1VCUz0iYXBwcyAkRlRNQUlOU1VCUyIKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX0FQUFMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgICAgICAgTWFudWFsIHBhZ2VzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFudWFscyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tYW51YWxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWFudWFsczsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYW51YWxzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tYW51YWxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tYW51YWxzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tYW51YWxzLy0tZGlzYWJsZS1tYW51YWxzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9tYW51YWxzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtYW4iCitmaQorCisjICAgICAgIFN1cHBvcnRpbmcgc2NyaXB0cworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNjcmlwdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2NyaXB0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NjcmlwdHM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2NyaXB0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2NyaXB0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc2NyaXB0czsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2NyaXB0cy8tLWRpc2FibGUtc2NyaXB0cyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfc2NyaXB0cyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbG9jYWwiCitmaQorCisjICAgICAgIE1JQiBmaWxlcworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYnM7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9taWJzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtaWJzIgorZmkKKyMgd2l0aC1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoYXQgdG8gYnVpbGQgYW5kIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbC4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUlOU1VCUyIgPiY1CiskYXNfZWNobyAiJE1BSU5TVUJTIiA+JjY7IH0KKworCisjICAgICAgIE1JQiBtb2R1bGUgdmFsaWRhdGlvbiAoZHVyaW5nICJjb25maWd1cmUiKQorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYl9jb25maWdfY2hlY2tpbmc7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX21pYl9jZmdfY2hlY2tzPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIHdpdGhfbWliX2NmZ19jaGVja3M9Im5vIgorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1jb25maWctY2hlY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYl9jb25maWdfY2hlY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYl9jb25maWdfY2hlY2tpbmc7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliX2NvbmZpZ19kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYl9jb25maWdfZGVidWc7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX21pYl9jZmdfZGVidWc9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1taWItY29uZmlnLWRlYnVnIiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgd2l0aF9taWJfY2ZnX2RlYnVnPSJubyIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItY29uZmlnLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJfY29uZmlnX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJfY29uZmlnX2RlYnVnOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnLy0tZGlzYWJsZS1taWItY29uZmlnLWRlYnVnIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyAgICAgICBWZXJzaW9uLXNwZWNpZmljIGZlYXR1cmVzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3LWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25ld19mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25ld19mZWF0dXJlczsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9sZC1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vbGRfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vbGRfZmVhdHVyZXM7CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mZWF0dXJlcy1vZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZmVhdHVyZXNfb2Yrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ZlYXR1cmVzX29mOworZWxzZQorICB3aXRoX2ZlYXR1cmVzX29mPSRQQUNLQUdFX1ZFUlNJT04KK2ZpCisKKworCisjICAgICAgIE1hbnVhbCBwcm9tcHRpbmcgZHVyaW5nICJjb25maWd1cmUiCisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZWZhdWx0czsgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzIC1vICIkd2l0aHZhbCIgPSBubyA7IHRoZW4KKyAgICAgZGVmYXVsdHM9IiR3aXRodmFsIgorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLXdpdGgvLS13aXRob3V0LWRlZmF1bHRzIiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgZGVmYXVsdHM9Im5vIgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlZmF1bHRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlZmF1bHRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVmYXVsdHM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0cy8tLXdpdGhvdXQtZGVmYXVsdHMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjICAgICAgIFVDRCBjb21wYXRhYmlsaXR5CisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF91Y2Rfc25tcF9jb21wYXRpYmlsaXR5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF91Y2Rfc25tcF9jb21wYXRpYmlsaXR5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5Ly0tZGlzYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiID0gInh5ZXMiIDsgdGhlbgorICBpbnN0YWxsdWNkaGVhZGVycz1pbnN0YWxsdWNkaGVhZGVycworICBpbnN0YWxsdWNkbGlicz1pbnN0YWxsdWNkbGlicworCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgVUNELVNOTVAgY29tcGF0YWJpbGl0eTogICAgIGVuYWJsZWQKK0VPRgorCitmaQorCisKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IE1JQiBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWxvYWRpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliX2xvYWRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJfbG9hZGluZzsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItbG9hZGluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliX2xvYWRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYl9sb2FkaW5nOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItbG9hZGluZy8tLWRpc2FibGUtbWliLWxvYWRpbmcgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21pYl9sb2FkaW5nIiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYmRpcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYmRpcnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYmRpcnM7IE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSIkd2l0aF9taWJkaXJzIgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTICIkd2l0aF9taWJkaXJzIgogX0FDRU9GCiAKLWZpOworZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZXN0aW5nLWNvZGUgb3IgLS13aXRob3V0LXRlc3RpbmctY29kZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdGVzdGluZ19jb2RlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3Rlc3RpbmdfY29kZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdGVzdGluZy1jb2RlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGUgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdGVzdGluZy1jb2RlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGUgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVlbnRyYW50IG9yIC0tZGlzYWJsZS1yZWVudHJhbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcmVlbnRyYW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9yZWVudHJhbnQiCi0gIHdpdGhfcmVzX2xvY2tzPSJ5ZXMiCi1lbHNlCi0gIHdpdGhfcmVzX2xvY2tzPSJubyIKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXJlZW50cmFudCBvciAtLXdpdGhvdXQtcmVlbnRyYW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9yZWVudHJhbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcmVlbnRyYW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWVudHJhbnQvLS1kaXNhYmxlLXJlZW50cmFudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWVudHJhbnQvLS1kaXNhYmxlLXJlZW50cmFudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliZGlycyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJkaXJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliZGlyczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmRpcnMvLS13aXRob3V0LW1pYmRpcnMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yb290LWFjY2VzcyBvciAtLXdpdGhvdXQtcm9vdC1hY2Nlc3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3Jvb3RfYWNjZXNzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3Jvb3RfYWNjZXNzIgogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yb290LWFjY2VzcyBvciAtLWRpc2FibGUtcm9vdC1hY2Nlc3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcm9vdF9hY2Nlc3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3Jvb3RfYWNjZXNzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcm9vdC1hY2Nlc3MvLS13aXRob3V0LXJvb3QtYWNjZXNzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yb290LWFjY2Vzcy8tLXdpdGhvdXQtcm9vdC1hY2Nlc3MgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJzOyBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJHdpdGhfbWlicyIKK2ZpCisKKyMgZW5hYmxlLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWttZW0tdXNhZ2Ugb3IgLS13aXRob3V0LWttZW0tdXNhZ2Ugd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2ttZW1fdXNhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfa21lbV91c2FnZSIKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliZmlsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYmZpbGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJmaWxlczsKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTICIkd2l0aF9taWJmaWxlcyIKK19BQ0VPRgogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1rbWVtLXVzYWdlIG9yIC0tZGlzYWJsZS1rbWVtLXVzYWdlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ttZW1fdXNhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2ttZW1fdXNhZ2UiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rbWVtLXVzYWdlLy0td2l0aG91dC1rbWVtLXVzYWdlIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rbWVtLXVzYWdlLy0td2l0aG91dC1rbWVtLXVzYWdlIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJmaWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJmaWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYmZpbGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZmlsZXMvLS13aXRob3V0LW1pYmZpbGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZHVtbXktdmFsdWVzIG9yIC0td2l0aG91dC1kdW1teS12YWx1ZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2R1bW15X3ZhbHVlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kdW1teV92YWx1ZXMiCiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWR1bW15LXZhbHVlcyBvciAtLWRpc2FibGUtZHVtbXktdmFsdWVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2R1bW15X3ZhbHVlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZHVtbXlfdmFsdWVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZHVtbXktdmFsdWVzLy0td2l0aG91dC1kdW1teS12YWx1ZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWR1bW15LXZhbHVlcy8tLXdpdGhvdXQtZHVtbXktdmFsdWVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogU2VjdXJpdHkgY29uZmlndXJhdGlvbgorIyMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXM7CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnkgb3IgLS13aXRob3V0LXBlcnNpc3RlbnQtZGlyZWN0b3J5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeSIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT0iJHdpdGhfcGVyc2lzdGVudF9kaXJlY3RvcnkiCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJzaXN0ZW50LWRpcmVjdG9yeSBvciAtLWRpc2FibGUtcGVyc2lzdGVudC1kaXJlY3Rvcnkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcGVyc2lzdGVudF9kaXJlY3Rvcnkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3RvcnkvLS13aXRob3V0LXBlcnNpc3RlbnQtZGlyZWN0b3J5IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeS8tLXdpdGhvdXQtcGVyc2lzdGVudC1kaXJlY3RvcnkgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXMvLS1kaXNhYmxlLWRlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotZGVmYXVsdF9wZXJzaXN0ZW50X21hc2s9MDc3CitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXMiID0gInhubyI7IHRoZW4KIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgb3IgLS13aXRob3V0LXBlcnNpc3RlbnQtbWFzayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGVyc2lzdGVudF9tYXNrK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BlcnNpc3RlbnRfbWFzayIKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9ERVMgMSIgPj5jb25mZGVmcy5oCiAKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgbWFzayB2YWx1ZSAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgbWFzayB2YWx1ZSAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHJpdmFjeSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wcml2YWN5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHJpdmFjeTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wcml2YWN5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wcml2YWN5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wcml2YWN5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wcml2YWN5Ly0tZGlzYWJsZS1wcml2YWN5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJViAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1kNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tZDU7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWQ1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21kNTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWQ1Ly0tZGlzYWJsZS1tZDUgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfTUQ1IDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW50ZXJuYWwtbWQ1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ludGVybmFsX21kNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ludGVybmFsX21kNTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbnRlcm5hbC1tZDUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ludGVybmFsX21kNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaW50ZXJuYWxfbWQ1OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pbnRlcm5hbC1tZDUvLS1kaXNhYmxlLWludGVybmFsLW1kNSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfaW50ZXJuYWxfbWQ1IiA9ICJ4eWVzIjsgdGhlbgorICBpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiWW91IGNhbiBub3Qgc3BlY2lmeSBib3RoIC0tZW5hYmxlLWludGVybmFsLW1kNSBhbmQgLS1kaXNhYmxlLW1kNSIgIiRMSU5FTk8iIDUKKyAgZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgMSIgPj5jb25mZGVmcy5oCisKICAgZmkKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCitmaQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogTWlzYyBjb25maWd1cmF0aW9uCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vcGFxdWUtc3BlY2lhbC10eXBlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX29wYXF1ZV9zcGVjaWFsX3R5cGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMvLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzIiAhPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pcHY2IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2lwdjYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9pcHY2OyBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pcHY2IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9pcHY2K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9pcHY2OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pcHY2Ly0tZGlzYWJsZS1pcHY2IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sb2dmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sb2dmaWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sb2dmaWxlOyBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9IiR3aXRoX2xvZ2ZpbGUiCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9nZmlsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sb2dmaWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbG9nZmlsZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxvZ2ZpbGUvLS13aXRob3V0LWxvZ2ZpbGUgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIm5vIjsgdGhlbgorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0ibm9uZSIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGVyc2lzdGVudF9kaXJlY3Rvcnkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5OyBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPSIkd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeSIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJzaXN0ZW50LWRpcmVjdG9yeSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wZXJzaXN0ZW50X2RpcmVjdG9yeStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3RvcnkvLS13aXRob3V0LXBlcnNpc3RlbnQtZGlyZWN0b3J5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BlcnNpc3RlbnRfbWFzaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGVyc2lzdGVudF9tYXNrOyBpZiB0ZXN0IGBleHByICJYJHdpdGh2YWwiIDogJ1hbMC03XSokJ2AgLWVxIDQgOyB0aGVuCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY2OyB9CisgICAgIHdpdGh2YWw9IjAkd2l0aHZhbCIKKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSBwcm92aWRlIGEgdGhyZWUgZGlnaXQgb2N0YWwgcGVyc2lzdGVudCBtYXNrIHZhbHVlIiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgd2l0aHZhbD0wNzcKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNjsgfQorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcnNpc3RlbnQtbWFzayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wZXJzaXN0ZW50X21hc2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wZXJzaXN0ZW50X21hc2s7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LW1hc2svLS13aXRob3V0LXBlcnNpc3RlbnQtbWFzayBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLICR3aXRodmFsCiBfQUNFT0YKIAogCi1lbHNlCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJGRlZmF1bHRfcGVyc2lzdGVudF9tYXNrIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICRkZWZhdWx0X3BlcnNpc3RlbnRfbWFzayIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX01BU0sgJGRlZmF1bHRfcGVyc2lzdGVudF9tYXNrCi1fQUNFT0YKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlczsgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiCitmaQogCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29weV9wZXJzaXN0ZW50X2ZpbGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvcHlfcGVyc2lzdGVudF9maWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NvcHlfcGVyc2lzdGVudF9maWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcy8tLXdpdGhvdXQtY29weV9wZXJzaXN0ZW50X2ZpbGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJzaXN0ZW50LW1hc2sgb3IgLS1kaXNhYmxlLXBlcnNpc3RlbnQtbWFzayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wZXJzaXN0ZW50X21hc2src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3BlcnNpc3RlbnRfbWFzayIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtbWFzayBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcyBvciAtLXdpdGhvdXQtY29weV9wZXJzaXN0ZW50X2ZpbGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzIgotICBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcyIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvcHlfcGVyc2lzdGVudF9maWxlcyBvciAtLWRpc2FibGUtY29weV9wZXJzaXN0ZW50X2ZpbGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2NvcHlfcGVyc2lzdGVudF9maWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfY29weV9wZXJzaXN0ZW50X2ZpbGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzLy0td2l0aG91dC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcy8tLXdpdGhvdXQtY29weV9wZXJzaXN0ZW50X2ZpbGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAogZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybj0iL3RtcC9zbm1wZFhYWFhYWCIKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBvciAtLXdpdGhvdXQtdGVtcC1maWxlLXBhdHRlcm4gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RlbXBfZmlsZV9wYXR0ZXJuK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3RlbXBfZmlsZV9wYXR0ZXJuIgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGVtcF9maWxlX3BhdHRlcm4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3RlbXBfZmlsZV9wYXR0ZXJuOyBpZiB0ZXN0IGBleHByICJYJHdpdGh2YWwiIDogIi4qWFhYWFhYJCJgIC1uZSAwIDsgdGhlbgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY2OyB9CisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJ0ZW1wb3JhcnkgZmlsZSBwYXR0ZW5zIG11c3QgZW5kIHdpdGggNiBYJ3MiICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICB3aXRodmFsPSIkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY2OyB9CitmaQogCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBhdHRlcm4gIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBhdHRlcm4gIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OwotICBmaQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNgorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlbXAtZmlsZS1wYXR0ZXJuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RlbXBfZmlsZV9wYXR0ZXJuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVtcF9maWxlX3BhdHRlcm47IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybi8tLXdpdGhvdXQtdGVtcC1maWxlLXBhdHRlcm4gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOICIkd2l0aHZhbCIKIF9BQ0VPRgogCiAKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBWZXJzaW9uIGNvbmZpZ3VyYXRpb24KKyMjCisKK1NOTVBfVkVSU0lPTlM9IiIKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdjEgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc25tcHYxK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc25tcHYxOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB2MSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc25tcHYxK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zbm1wdjE7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MS8tLWRpc2FibGUtc25tcHYxIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjEiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NOTVBWMSAxIiA+PmNvbmZkZWZzLmgKKwogZWxzZQorICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAxIgorZmkKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIiA+JjYKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOICIkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIKLV9BQ0VPRgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB2MmMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc25tcHYyYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NubXB2MmM7CitmaQogCiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlbXAtZmlsZS1wYXR0ZXJuIG9yIC0tZGlzYWJsZS10ZW1wLWZpbGUtcGF0dGVybiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfdGVtcF9maWxlX3BhdHRlcm4iCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdjJjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zbm1wdjJjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zbm1wdjJjOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjJjLy0tZGlzYWJsZS1zbm1wdjJjIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjJjIiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDJjIgorZmkKKworU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMyIKKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIFNOTVAgVmVyc2lvbnMgU3VwcG9ydGVkOiAgICRTTk1QX1ZFUlNJT05TCitFT0YKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbjsgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iJHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24iCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVmYXVsdC1zbm1wLXZlcnNpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVmYXVsdF9zbm1wX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uLy0td2l0aG91dC1kZWZhdWx0LXNubXAtdmVyc2lvbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIHdlIHRlc3QgdGhpcyBub3cgYW5kIGxhdGVyIGFzIHdlbGwuICB3ZSB0ZXN0IGl0IG5vdyBzbyBjb25maWd1cmUgY2FuIGRpZQorIyBlYXJseSBvbiB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHdhaXRpbmcgdGlsbCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCitjYXNlICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04tM30iIGluCisgIFsxMjNdKSA7OworICAyYykgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0yIDs7CisgICopCisgICAgYXNfZm5fZXJyb3IgJD8gIklsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLiIgIiRMSU5FTk8iIDUKKyAgICA7OworZXNhYworCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogVHJhbnNwb3J0IG1vZHVsZXMKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10cmFuc3BvcnRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90cmFuc3BvcnRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF90cmFuc3BvcnRzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dF90cmFuc3BvcnRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfdHJhbnNwb3J0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X3RyYW5zcG9ydHM7CitmaQorCisKKyMKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIHRyYW5zcG9ydCBvcHRpb25zCisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhbnNwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90cmFuc3BvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3RyYW5zcG9ydDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRyYW5zcG9ydHMvLS13aXRob3V0LXRyYW5zcG9ydHMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtdHJhbnNwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfdHJhbnNwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfdHJhbnNwb3J0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LXRyYW5zcG9ydHMvLS13aXRob3V0LW91dC10cmFuc3BvcnRzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBTZWN1cml0eSBtb2R1bGVzCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc2VjdXJpdHlfbW9kdWxlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zZWN1cml0eV9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcy8tLXdpdGhvdXQtc2VjdXJpdHktbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vdXQtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vdXRfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX291dF9zZWN1cml0eV9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LXNlY3VyaXR5LW1vZHVsZXMvLS13aXRob3V0LW91dC1zZWN1cml0eS1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBEZXZlbG9wZXItcmVsYXRlZCBzZXR0aW5ncworIyMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnZ2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1Z2dpbmc7ICRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfQUxXQVlTX0RFQlVHIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVidWdnaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RlYnVnZ2luZzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVidWdnaW5nLy0tZGlzYWJsZS1kZWJ1Z2dpbmcgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlYnVnZ2luZyIgPSAieG5vIjsgdGhlbgorICAgICRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fREVCVUdHSU5HIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGV2ZWxvcGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RldmVsb3BlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RldmVsb3BlcjsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgOyB0aGVuCisgICAgIGRldmVsb3Blcj0ieWVzIgorICAgZWxpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSBubyA7IHRoZW4KKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLWRldmVsb3BlciIgIiRMSU5FTk8iIDUKKyAgIGVsc2UKKyAgICAgZGV2ZWxvcGVyPSJubyIKKyAgIGZpCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGV2ZWxvcGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZXZlbG9wZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RldmVsb3BlcjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGV2ZWxvcGVyLy0tZGlzYWJsZS1kZXZlbG9wZXIgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlc3RpbmctY29kZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90ZXN0aW5nX2NvZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0aW5nX2NvZGU7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgMSIgPj5jb25mZGVmcy5oCisKKyAgIGVsaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gOyB0aGVuCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGUiICIkTElORU5PIiA1CisgICBmaQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlc3RpbmctY29kZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGVzdGluZ19jb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF90ZXN0aW5nX2NvZGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXRlc3RpbmctY29kZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWVudHJhbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVlbnRyYW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVlbnRyYW50OyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9yZXNfbG9ja3M9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1yZWVudHJhbnQiICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICB3aXRoX3Jlc19sb2Nrcz0ibm8iCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmVlbnRyYW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yZWVudHJhbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3JlZW50cmFudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVlbnRyYW50Ly0tZGlzYWJsZS1yZWVudHJhbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcHJlY2F0ZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwcmVjYXRlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcHJlY2F0ZWQ7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVwcmVjYXRlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVwcmVjYXRlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGVwcmVjYXRlZDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVwcmVjYXRlZC8tLWRpc2FibGUtZGVwcmVjYXRlZCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV9kZXByZWNhdGVkIiA9IG5vIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX0RFUFJFQ0FURURfRlVOQ1RJT05TIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcm9vdC1hY2Nlc3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Jvb3RfYWNjZXNzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yb290X2FjY2VzczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yb290LWFjY2VzcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yb290X2FjY2VzcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3Jvb3RfYWNjZXNzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcm9vdC1hY2Nlc3MvLS13aXRob3V0LXJvb3QtYWNjZXNzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX3Jvb3RfYWNjZXNzIiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rbWVtLXVzYWdlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9rbWVtX3VzYWdlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9rbWVtX3VzYWdlOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWttZW0tdXNhZ2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfa21lbV91c2FnZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ttZW1fdXNhZ2U7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rbWVtLXVzYWdlLy0td2l0aG91dC1rbWVtLXVzYWdlIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX2ttZW1fdXNhZ2UiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19LTUVNX1VTQUdFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZHVtbXktdmFsdWVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kdW1teV92YWx1ZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2R1bW15X3ZhbHVlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kdW1teS12YWx1ZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZHVtbXlfdmFsdWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZHVtbXlfdmFsdWVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZHVtbXktdmFsdWVzLy0td2l0aG91dC1kdW1teS12YWx1ZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgRGVmaW5lIHVubGVzcyBzcGVjaWZpY2FsbHkgc3VwcHJlc3NlZCAoaS5lLiwgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlKS4KK2lmIHRlc3QgIngkd2l0aF9kdW1teV92YWx1ZXMiICE9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNldC1zdXBwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NldF9zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2V0X3N1cHBvcnQ7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2V0LXN1cHBvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NldF9zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zZXRfc3VwcG9ydDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2V0LXN1cHBvcnQvLS1kaXNhYmxlLXNldC1zdXBwb3J0IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9zZXRfc3VwcG9ydCIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c19jb250YWN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNfY29udGFjdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzX2NvbnRhY3Q7IGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9IiR3aXRoX3N5c19jb250YWN0IgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5c19jb250YWN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N5c19jb250YWN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3lzX2NvbnRhY3Q7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXNfY29udGFjdC8tLXdpdGhvdXQtc3lzX2NvbnRhY3QgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c19sb2NhdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzX2xvY2F0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zeXNfbG9jYXRpb247IGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz0iJHdpdGhfc3lzX2xvY2F0aW9uIgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5c19sb2NhdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeXNfbG9jYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zeXNfbG9jYXRpb247IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXNfbG9jYXRpb24vLS13aXRob3V0LXN5c19sb2NhdGlvbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudDogRXh0ZW5zaWJpbGl0eSBjb25maWd1cmF0aW9uCisjIworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9jYWwtc211eCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sb2NhbF9zbXV4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbG9jYWxfc211eDsgaWYgdGVzdCAieCRlbmFibGVfbG9jYWxfc211eCIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbG9jYWwtc211eCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbG9jYWxfc211eCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbG9jYWxfc211eDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbG9jYWwtc211eC8tLWRpc2FibGUtbG9jYWwtc211eCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYWdlbnR4X2RvbV9zb2NrX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seTsKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudHgtZG9tLXNvY2stb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWdlbnR4X2RvbV9zb2NrX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FnZW50eF9kb21fc29ja19vbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seS8tLWRpc2FibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQ7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHRyYXBkLXN1YmFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NubXB0cmFwZF9zdWJhZ2VudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50Ly0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCAxIiA+PmNvbmZkZWZzLmgKKworZmkKIAogZGVmYXVsdF9hZ2VudHhfc29ja2V0PSIvdmFyL2FnZW50eC9tYXN0ZXIiCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnR4LXNvY2tldCBvciAtLXdpdGhvdXQtYWdlbnR4LXNvY2tldCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYWdlbnR4X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9hZ2VudHhfc29ja2V0IgotCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50eC1zb2NrZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FnZW50eF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FnZW50eF9zb2NrZXQ7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGZ1bGwgcGF0aCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgZnVsbCBwYXRoICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgZnVsbCBwYXRoICIgIiRMSU5FTk8iIDU7CiAgIGZpCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsIiA+JjY7IH0KKworZWxzZQorCisgIHdpdGh2YWw9JGRlZmF1bHRfYWdlbnR4X3NvY2tldAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0IiA+JjY7IH0KKworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50eC1zb2NrZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYWdlbnR4X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FnZW50eF9zb2NrZXQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1hZ2VudHgtc29ja2V0Ly0td2l0aG91dC1hZ2VudHgtc29ja2V0IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9BR0VOVFhfU09DS0VUICIkd2l0aHZhbCIKIF9BQ0VPRgogCiAKLWVsc2UKLQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIgPiY2Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9BR0VOVFhfU09DS0VUICIkZGVmYXVsdF9hZ2VudHhfc29ja2V0IgotX0FDRU9GCi0KLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnR4LXNvY2tldCBvciAtLWRpc2FibGUtYWdlbnR4LXNvY2tldCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hZ2VudHhfc29ja2V0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9hZ2VudHhfc29ja2V0IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtYWdlbnR4LXNvY2tldCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtYWdlbnR4LXNvY2tldCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbiBvciAtLXdpdGhvdXQtZGVmYXVsdC1zbm1wLXZlcnNpb24gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uIgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIkd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbiIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlZmF1bHQtc25tcC12ZXJzaW9uIG9yIC0tZGlzYWJsZS1kZWZhdWx0LXNubXAtdmVyc2lvbiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZGVmYXVsdF9zbm1wX3ZlcnNpb24iCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbi8tLXdpdGhvdXQtZGVmYXVsdC1zbm1wLXZlcnNpb24gaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uLy0td2l0aG91dC1kZWZhdWx0LXNubXAtdmVyc2lvbiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgd2UgdGVzdCB0aGlzIG5vdyBhbmQgbGF0ZXIgYXMgd2VsbC4gIHdlIHRlc3QgaXQgbm93IHNvIGNvbmZpZ3VyZSBjYW4gZGllCi0jIGVhcmx5IG9uIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gd2FpdGluZyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KLWlmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIngiOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICIyYyI7IHRoZW4KLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIyIgotICBmaQotICBpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjEiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjIiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjMiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSWxsZWdhbCB2ZXJzaW9uIG51bWJlciBwYXNzZWQgdG8gLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IElsbGVnYWwgdmVyc2lvbiBudW1iZXIgcGFzc2VkIHRvIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c19jb250YWN0IG9yIC0td2l0aG91dC1zeXNfY29udGFjdCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc3lzX2NvbnRhY3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc3lzX2NvbnRhY3QiCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9IiR3aXRoX3N5c19jb250YWN0IgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzX2NvbnRhY3Qgb3IgLS1kaXNhYmxlLXN5c19jb250YWN0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N5c19jb250YWN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zeXNfY29udGFjdCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1jb250YWN0Ly0td2l0aG91dC1zeXMtY29udGFjdCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWNvbnRhY3QvLS13aXRob3V0LXN5cy1jb250YWN0IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c19sb2NhdGlvbiBvciAtLXdpdGhvdXQtc3lzX2xvY2F0aW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zeXNfbG9jYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc3lzX2xvY2F0aW9uIgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9IiR3aXRoX3N5c19sb2NhdGlvbiIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5c19sb2NhdGlvbiBvciAtLWRpc2FibGUtc3lzX2xvY2F0aW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N5c19sb2NhdGlvbitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc3lzX2xvY2F0aW9uIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWxvY2F0aW9uLy0td2l0aG91dC1zeXMtbG9jYXRpb24gaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1sb2NhdGlvbi8tLXdpdGhvdXQtc3lzLWxvY2F0aW9uIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvZ2ZpbGUgb3IgLS13aXRob3V0LWxvZ2ZpbGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xvZ2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbG9nZmlsZSIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSIkd2l0aF9sb2dmaWxlIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9nZmlsZSBvciAtLWRpc2FibGUtbG9nZmlsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9sb2dmaWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9sb2dmaWxlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbG9nZmlsZS8tLXdpdGhvdXQtbG9nZmlsZSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbG9nZmlsZS8tLXdpdGhvdXQtbG9nZmlsZSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJubyI7IHRoZW4KLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9Im5vbmUiCi1maQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhbnNwb3J0cyBvciAtLXdpdGhvdXQtdHJhbnNwb3J0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdHJhbnNwb3J0cytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF90cmFuc3BvcnRzIgotCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXRfdHJhbnNwb3J0cyBvciAtLXdpdGhvdXQtb3V0X3RyYW5zcG9ydHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF90cmFuc3BvcnRzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF90cmFuc3BvcnRzIgotCi1maTsKLQogIwotIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gdHJhbnNwb3J0IG9wdGlvbnMKKyMgZmVhdHVyZSBhZGRpdGlvbi9yZW1vdmFsIGFuZCBtaW5pbWlhbGlzdCBzdXBwb3J0CiAjCitGRUFUVVJFX0FERF9GTEFHUz0iIgogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRyYW5zcG9ydCBvciAtLXdpdGhvdXQtdHJhbnNwb3J0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF90cmFuc3BvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdHJhbnNwb3J0IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdHJhbnNwb3J0cy8tLXdpdGhvdXQtdHJhbnNwb3J0cyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdHJhbnNwb3J0cy8tLXdpdGhvdXQtdHJhbnNwb3J0cyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LXRyYW5zcG9ydCBvciAtLXdpdGhvdXQtb3V0LXRyYW5zcG9ydCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X3RyYW5zcG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfdHJhbnNwb3J0IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LXRyYW5zcG9ydHMvLS13aXRob3V0LW91dC10cmFuc3BvcnRzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtdHJhbnNwb3J0cy8tLXdpdGhvdXQtb3V0LXRyYW5zcG9ydHMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jCi0jIHNlY3VyaXR5IG1vZHVsZXMKLSMKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMgb3IgLS13aXRob3V0LXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc2VjdXJpdHlfbW9kdWxlcyIKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VjdXJpdHktbW9kdWxlcyBvciAtLWRpc2FibGUtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zZWN1cml0eV9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcy8tLXdpdGhvdXQtc2VjdXJpdHktbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcy8tLXdpdGhvdXQtc2VjdXJpdHktbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMKLSMgbWliIG1vZHVsZXMKLSMKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYl9tb2R1bGVzIG9yIC0td2l0aG91dC1taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliX21vZHVsZXMiCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYl9tb2R1bGVzIG9yIC0tZGlzYWJsZS1taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliX21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXRfbWliX21vZHVsZXMgb3IgLS13aXRob3V0LW91dF9taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF9taWJfbW9kdWxlcyIKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3V0X21pYl9tb2R1bGVzIG9yIC0tZGlzYWJsZS1vdXRfbWliX21vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb3V0X21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9vdXRfbWliX21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLW9pZCBvciAtLXdpdGhvdXQtZW50ZXJwcmlzZS1vaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VudGVycHJpc2Vfb2lkIgotCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZmVhdHVyZXM7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgZW50ZXJwcmlzZSBudW1iZXIgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgZW50ZXJwcmlzZSBudW1iZXIgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGZlYXR1cmVzICIgIiRMSU5FTk8iIDU7CisgIGZpCisgIEZFQVRVUkVfQUREX0ZMQUdTPSItLWFkZCAkd2l0aHZhbCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGFkZGluZyBpbiBmZWF0dXJlczogJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gImFkZGluZyBpbiBmZWF0dXJlczogJHdpdGh2YWwiID4mNjsgfQorCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mZWF0dXJlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWZlYXR1cmVzLy0td2l0aG91dC1mZWF0dXJlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworRkVBVFVSRV9SRU1PVkVfRkxBR1M9IiIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X2ZlYXR1cmVzOworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBmZWF0dXJlcyAiICIkTElORU5PIiA1OworICBmaQorICBGRUFUVVJFX1JFTU9WRV9GTEFHUz0iLS1yZW1vdmUgJHdpdGh2YWwiCisgIEZFQVRVUkVUQVJHUz0iZmVhdHVyZXMiCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTUlOSU1BTF9DT0RFIDEiID4+Y29uZmRlZnMuaAorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiByZW1vdmluZyBmZWF0dXJlczogJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInJlbW92aW5nIGZlYXR1cmVzOiAkd2l0aHZhbCIgPiY2OyB9CisKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vdXQtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3V0X2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3V0X2ZlYXR1cmVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LWZlYXR1cmVzLy0td2l0aG91dC1vdXQtZmVhdHVyZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZmVhdHVyZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZmVhdHVyZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZmVhdHVyZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWZlYXR1cmVzLy0td2l0aG91dC1mZWF0dXJlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1mZWF0dXJlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfZmVhdHVyZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X2ZlYXR1cmU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtZmVhdHVyZXMvLS13aXRob3V0LW91dC1mZWF0dXJlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCitGRUFUVVJFVEFSR1M9IiIKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taW5pbWFsaXN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pbmltYWxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taW5pbWFsaXN0OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmltYWxpc3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pbmltYWxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pbmltYWxpc3Q7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmltYWxpc3QvLS1kaXNhYmxlLW1pbmltYWxpc3QgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21pbmltYWxpc3QiID0gInh5ZXMiOyB0aGVuCisgICAjIHdlJ2xsIGFzc3VtZSB0aGUgbWluaSBhZ2VudCBpcyBkZXNpcmVkIGhlcmUgYXMgd2VsbAorICAgbWluaV9hZ2VudD0ieWVzIgorICAgRkVBVFVSRVRBUkdTPSJmZWF0dXJlcyIKKworICAgIyBuZWVkZWQgdG8gYm9vdHN0cmFwIGxhdGVyIGNoZWNrcworICAgZWNobyAiIiA+IGluY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9NSU5JTUFMX0NPREUgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgIEZFQVRVUkVIRUFERVJTPSIiCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmltYWxpc3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pbmltYWxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pbmltYWxpc3Q7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmltYWxpc3QvLS1kaXNhYmxlLW1pbmltYWxpc3QgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ub3RpZnktb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub3RpZnlfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vdGlmeV9vbmx5OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5vdGlmeS1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ub3RpZnlfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbm90aWZ5X29ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vdGlmeS1vbmx5Ly0tZGlzYWJsZS1ub3RpZnktb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9USUZZX09OTFkgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbm90aWZ5LW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25vdGlmeV9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ub3RpZnlfb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm90aWZ5LW9ubHkvLS1kaXNhYmxlLW5vdGlmeS1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbm90aWZ5b25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub3RpZnlvbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbm90aWZ5b25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm90aWZ5LW9ubHkvLS1kaXNhYmxlLW5vdGlmeS1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uby1saXN0ZW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbm9fbGlzdGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbm9fbGlzdGVuOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5vLWxpc3RlbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbm9fbGlzdGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ub19saXN0ZW47IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vLWxpc3Rlbi8tLWRpc2FibGUtbm8tbGlzdGVuIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9ub19saXN0ZW4iID0gInh5ZXMiIC1vICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyI7IHRoZW4KKyAgIGVuYWJsZV9ub19saXN0ZW49InllcyIKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1uby1saXN0ZW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25vX2xpc3RlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbm9fbGlzdGVuOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1uby1saXN0ZW4vLS1kaXNhYmxlLW5vLWxpc3RlbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5vbGlzdGVuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vbGlzdGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbm9saXN0ZW47IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vLWxpc3Rlbi8tLWRpc2FibGUtbm8tbGlzdGVuIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWFkLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVhZF9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVhZF9vbmx5OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJlYWQtb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmVhZF9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yZWFkX29ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlYWQtb25seS8tLWRpc2FibGUtcmVhZC1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiID0gInh5ZXMiIC1vICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyIgOyB0aGVuCisgICBlbmFibGVfcmVhZF9vbmx5PSJ5ZXMiCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yZWFkLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JlYWRfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcmVhZF9vbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWFkLW9ubHkvLS1kaXNhYmxlLXJlYWQtb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlYWRvbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JlYWRvbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVhZG9ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlYWQtb25seS8tLWRpc2FibGUtcmVhZC1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudDogTUlCIG1vZHVsZSBjb25maWd1cmF0aW9uCisjIworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaV9hZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taW5pX2FnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWluaV9hZ2VudDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pX2FnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taW5pX2FnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taW5pX2FnZW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pX2FnZW50Ly0tZGlzYWJsZS1taW5pX2FnZW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9taW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgorICAgIG1pbmlfYWdlbnQ9InllcyIKK2Vsc2UKKyAgICBtaW5pX2FnZW50PSJubyIKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaWFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taW5pYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pbmlhZ2VudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbmlhZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taW5pYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taW5pYWdlbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tZmRfcmV3cml0ZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tZmRfcmV3cml0ZXM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWZkLXJld3JpdGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tZmRfcmV3cml0ZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21mZF9yZXdyaXRlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWZkLXJld3JpdGVzLy0tZGlzYWJsZS1tZmQtcmV3cml0ZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYl9tb2R1bGVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYl9tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliX21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJfbW9kdWxlcy8tLXdpdGhvdXQtbWliX21vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dF9taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfbWliX21vZHVsZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3V0X21pYl9tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX291dF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX291dF9taWJfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dF9taWJfbW9kdWxlcy8tLXdpdGhvdXQtb3V0X21pYl9tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gY29uZmlndXJlIG9wdGlvbnMKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItbW9kdWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJfbW9kdWxlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kdWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21vZHVsZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1taWItbW9kdWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfbWliX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X21pYl9tb2R1bGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1tb2R1bGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9tb2R1bGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogRW50ZXJwcmlzZSBzZXR0aW5ncwkoPyBBZ2VudC9MaWJyYXJ5L0JvdGg/KQorIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW50ZXJwcmlzZV9vaWQ7CisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGVudGVycHJpc2UgbnVtYmVyICIgIiRMSU5FTk8iIDU7CiAgIGZpCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9FTlRFUlBSSVNFX09JRCAkd2l0aHZhbApAQCAtMzA2NSwzMiArNDg1NCwyOCBAQAogI2RlZmluZSBORVRTTk1QX0VOVEVSUFJJU0VfRE9UX01JQiAkZW50X2RvdF9vaWQKIF9BQ0VPRgogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCIgPiY2OyB9CiAKIGVsc2UKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IFwiZW50ZXJwcmlzZS5uZXQtc25tcFwiIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgXCJlbnRlcnByaXNlLm5ldC1zbm1wXCIiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBcImVudGVycHJpc2UubmV0LXNubXBcIiIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCBcImVudGVycHJpc2UubmV0LXNubXBcIiIgPiY2OyB9CiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utb2lkIG9yIC0tZGlzYWJsZS1lbnRlcnByaXNlLW9pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX29pZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZW50ZXJwcmlzZV9vaWQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1vaWQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW9pZCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1vaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbnRlcnByaXNlX29pZDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW9pZCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkIG9yIC0td2l0aG91dC1lbnRlcnByaXNlLXN5c29pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9zeXNvaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZW50ZXJwcmlzZV9zeXNvaWQiCiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfc3lzb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnRlcnByaXNlX3N5c29pZDsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiAiJExJTkVOTyIgNTsKICAgZmkKICAgc3lzX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMzEwNywzMiArNDg5MiwyOCBAQAogI2RlZmluZSBORVRTTk1QX1NZU1RFTV9ET1RfTUlCX0xFTkdUSCAkc3lzb2lkX2xlbgogX0FDRU9GCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLiIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4iID4mNQorJGFzX2VjaG8gInVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4iID4mNjsgfQogCiBlbHNlCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLlwiIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgXCJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi5cIiIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uXCIiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgXCJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi5cIiIgPiY2OyB9CiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utc3lzb2lkIG9yIC0tZGlzYWJsZS1lbnRlcnByaXNlLXN5c29pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX3N5c29pZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1zeXNvaWQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLXN5c29pZCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1zeXNvaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbnRlcnByaXNlX3N5c29pZDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLXN5c29pZCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBvciAtLXdpdGhvdXQtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkIgogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQ7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgIiRMSU5FTk8iIDU7CiAgIGZpCiAgIG5vdGlmaWNhdGlvbl9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTMxNDksODMgKzQ5MzAsMzEgQEAKICNkZWZpbmUgTkVUU05NUF9OT1RJRklDQVRJT05fRE9UX01JQl9MRU5HVEggJG5vdGlmaWNhdGlvbm9pZF9sZW4KIF9BQ0VPRgogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwiID4mNjsgfQogCiBlbHNlCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9uc1wiIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnNcIiIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgXCJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zXCIiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnNcIiIgPiY2OyB9CiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBvciAtLWRpc2FibGUtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLSMKLSMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIGNvbmZpZ3VyZSBvcHRpb25zCi0jCitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1tb2R1bGUgb3IgLS13aXRob3V0LW1pYi1tb2R1bGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYl9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliX21vZHVsZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uMS4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24xLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tb2R1bGUgb3IgLS13aXRob3V0LW1vZHVsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21vZHVsZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uMy4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24zLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tb2R1bGVzIG9yIC0td2l0aG91dC1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjQuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uNC4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1pYi1tb2R1bGUgb3IgLS13aXRob3V0LW91dC1taWItbW9kdWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfbWliX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfbWliX21vZHVsZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uNS4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uNS4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1tb2R1bGVzIG9yIC0td2l0aG91dC1vdXQtbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjcuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjcuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMjCisjICAgUHJvamVjdDogUGVybCBzZXR0aW5ncworIyMKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbW9kdWxlIG9yIC0td2l0aG91dC1vdXQtbW9kdWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF9tb2R1bGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjguIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjguIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIwotIyBQZXJsIHNwZWNpZmljCi0jCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVybC1tb2R1bGVzIG9yIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BlcmxfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wZXJsX21vZHVsZXMiCi0KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVybC1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wZXJsX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BlcmxfbW9kdWxlczsKICAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCiAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgogICAgIGVsc2UKQEAgLTMyMzcsNTYgKzQ5NjYsNDkgQEAKIAogZWxzZQogICBpbnN0YWxsX3Blcmw9InRyeSIKLWZpOworZmkKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgb3IgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZW1iZWRkZWRfcGVybCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZW1iZWRkZWRfcGVybCIKLSAgZW1iZWRfcGVybD0iJGVuYWJsZXZhbCIKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJsLW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGVybF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGVybF9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVybC1tb2R1bGVzLy0td2l0aG91dC1wZXJsLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZW1iZWRkZWRfcGVybCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VtYmVkZGVkX3Blcmw7IGVtYmVkX3Blcmw9IiRlbmFibGV2YWwiCiBlbHNlCiAgIGVtYmVkX3Blcmw9InRyeSIKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVybC1jYy1jaGVja3Mgb3IgLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BlcmxfY2NfY2hlY2tzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wZXJsX2NjX2NoZWNrcyIKLQotZmk7Ci0KLSMgQ29tbW9uIHBlcmwgbWlzdGFrZXMKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJsLW1vZHVsZXMgb3IgLS1kaXNhYmxlLXBlcmwtbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wZXJsX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3BlcmxfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcmwtbW9kdWxlcy8tLXdpdGhvdXQtcGVybC1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJsLW1vZHVsZXMvLS13aXRob3V0LXBlcmwtbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW1iZWRkZWQtcGVybCBvciAtLXdpdGhvdXQtZW1iZWRkZWQtcGVybCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZW1iZWRkZWRfcGVybCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbWJlZGRlZF9wZXJsIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsLy0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwvLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcmwtY2MtY2hlY2tzIG9yIC0td2l0aG91dC1wZXJsLWNjLWNoZWNrcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGVybF9jY19jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGVybF9jY19jaGVja3MiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzLy0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcy8tLWRpc2FibGUtcGVybC1jYy1jaGVja3MgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKIAogCi0jCi0jIFB5dGhvbiBzcGVjaWZpYwotIworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbWJlZGRlZC1wZXJsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbWJlZGRlZF9wZXJsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbWJlZGRlZF9wZXJsOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsLy0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXB5dGhvbi1tb2R1bGVzIG9yIC0td2l0aG91dC1weXRob24tbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcHl0aG9uX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcHl0aG9uX21vZHVsZXMiCiAKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wZXJsX2NjX2NoZWNrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BlcmxfY2NfY2hlY2tzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcmwtY2MtY2hlY2tzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wZXJsX2NjX2NoZWNrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGVybF9jY19jaGVja3M7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzLy0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogUHl0aG9uIHNldHRpbmdzCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHl0aG9uLW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3B5dGhvbl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9weXRob25fbW9kdWxlczsKICAgICBpbnN0YWxsX3B5dGhvbj0ieWVzIgogICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCiAgICAgICBQWVRIT05BUkdTPSIiCkBAIC0zMjk5LDIwNyArNTAyMSw2MzUgQEAKIAogZWxzZQogICBpbnN0YWxsX3B5dGhvbj0ibm8iCi1maTsKLQotIyBvdGhlciBmbGFncworZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlcnZlci1zZW5kLWJ1ZiBvciAtLXdpdGhvdXQtc2VydmVyLXNlbmQtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zZXJ2ZXJfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc2VydmVyX3NlbmRfYnVmIgogCisjIworIyAgIFByb2plY3Q6IExpYnJhcnkgc2V0dGluZ3MKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NlcnZlcl9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc2VydmVyX3NlbmRfYnVmOwogICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHNlbmQgYnVmZmVyICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgc2VuZCBidWZmZXIgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciBzZW5kIGJ1ZmZlciAiICIkTElORU5PIiA1CiAgICBmaQogICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGICR3aXRodmFsCiBfQUNFT0YKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VydmVyLXNlbmQtYnVmIG9yIC0tZGlzYWJsZS1zZXJ2ZXItc2VuZC1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2VydmVyX3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zZXJ2ZXJfc2VuZF9idWYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYvLS13aXRob3V0LXNlcnZlci1zZW5kLWJ1ZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXNlbmQtYnVmLy0td2l0aG91dC1zZXJ2ZXItc2VuZC1idWYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY1CiskYXNfZWNobyAidXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY2OyB9CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VydmVyLXNlbmQtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NlcnZlcl9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NlcnZlcl9zZW5kX2J1ZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXNlbmQtYnVmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VydmVyLXJlY3YtYnVmIG9yIC0td2l0aG91dC1zZXJ2ZXItcmVjdi1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NlcnZlcl9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zZXJ2ZXJfcmVjdl9idWYiCiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VydmVyLXJlY3YtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zZXJ2ZXJfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NlcnZlcl9yZWN2X2J1ZjsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHJlY3YgYnVmZmVyICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgcmVjdiBidWZmZXIgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciByZWN2IGJ1ZmZlciAiICIkTElORU5PIiA1CiAgIGZpCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRiAkd2l0aHZhbAogX0FDRU9GCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjYKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlcnZlci1yZWN2LWJ1ZiBvciAtLWRpc2FibGUtc2VydmVyLXJlY3YtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NlcnZlcl9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2VydmVyX3JlY3ZfYnVmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXJlY3YtYnVmLy0td2l0aG91dC1zZXJ2ZXItcmVjdi1idWYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXJlY3YtYnVmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNQorJGFzX2VjaG8gInVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNjsgfQorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlcnZlci1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zZXJ2ZXJfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zZXJ2ZXJfcmVjdl9idWY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYvLS13aXRob3V0LXNlcnZlci1yZWN2LWJ1ZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWNsaWVudC1zZW5kLWJ1ZiBvciAtLXdpdGhvdXQtY2xpZW50LXNlbmQtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9jbGllbnRfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfY2xpZW50X3NlbmRfYnVmIgogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNsaWVudC1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2xpZW50X3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jbGllbnRfc2VuZF9idWY7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCBzZW5kIGJ1ZmZlciAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHNlbmQgYnVmZmVyICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgc2VuZCBidWZmZXIgIiAiJExJTkVOTyIgNQogICBmaQogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUYgJHdpdGh2YWwKIF9BQ0VPRgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY2Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jbGllbnQtc2VuZC1idWYgb3IgLS1kaXNhYmxlLWNsaWVudC1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9jbGllbnRfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2NsaWVudF9zZW5kX2J1ZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXNlbmQtYnVmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtc2VuZC1idWYvLS13aXRob3V0LWNsaWVudC1zZW5kLWJ1ZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjUKKyRhc19lY2hvICJ1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjY7IH0KK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jbGllbnQtc2VuZC1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY2xpZW50X3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY2xpZW50X3NlbmRfYnVmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXNlbmQtYnVmLy0td2l0aG91dC1jbGllbnQtc2VuZC1idWYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jbGllbnQtcmVjdi1idWYgb3IgLS13aXRob3V0LWNsaWVudC1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfY2xpZW50X3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2NsaWVudF9yZWN2X2J1ZiIKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jbGllbnQtcmVjdi1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NsaWVudF9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2xpZW50X3JlY3ZfYnVmOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgcmVjdiBidWZmZXIgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCByZWN2IGJ1ZmZlciAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHJlY3YgYnVmZmVyICIgIiRMSU5FTk8iIDUKICAgZmkKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGICR3aXRodmFsCiBfQUNFT0YKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY2xpZW50LXJlY3YtYnVmIG9yIC0tZGlzYWJsZS1jbGllbnQtcmVjdi1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfY2xpZW50X3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9jbGllbnRfcmVjdl9idWYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtcmVjdi1idWYvLS13aXRob3V0LWNsaWVudC1yZWN2LWJ1ZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXJlY3YtYnVmLy0td2l0aG91dC1jbGllbnQtcmVjdi1idWYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY1CiskYXNfZWNobyAidXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY2OyB9CitmaQogCi0jCi0jIG90aGVyd2lzZSBwcm9tcHRlZCBpbmZvcm1hdGlvbgotIworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNsaWVudC1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jbGllbnRfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jbGllbnRfcmVjdl9idWY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtcmVjdi1idWYvLS13aXRob3V0LWNsaWVudC1yZWN2LWJ1ZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0cyBvciAtLXdpdGhvdXQtZGVmYXVsdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RlZmF1bHRzIgotICBkZWZhdWx0cz0ieWVzIgorCisjIworIyAgIFN5c3RlbTogbGlicmFyeSBzZXR0aW5ncyAgKG1vcmUpCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWxmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VsZjsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZWxmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWxmLy0td2l0aG91dC1lbGYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ubCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbmw7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ubDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW5sLy0td2l0aG91dC1ubCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlid3JhcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGlid3JhcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGlid3JhcDsKIGVsc2UKLSAgZGVmYXVsdHM9Im5vIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVmYXVsdHMgb3IgLS1kaXNhYmxlLWRlZmF1bHRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlZmF1bHRzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZWZhdWx0cyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHRzLy0td2l0aG91dC1kZWZhdWx0cyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdHMvLS13aXRob3V0LWRlZmF1bHRzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgd2l0aF9saWJ3cmFwPSJubyIKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IG9yIC0tZGlzYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlid3JhcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ3cmFwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGlid3JhcDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxpYndyYXAvLS13aXRob3V0LWxpYndyYXAgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgb3IgLS13aXRob3V0LXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eS8tLWRpc2FibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5Ly0tZGlzYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC16bGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF96bGliK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF96bGliOworZWxzZQorICB3aXRoX3psaWI9Im5vIgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXpsaWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfemxpYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3psaWI7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC16bGliLy0td2l0aG91dC16bGliIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1iemlwMiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnppcDIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2J6aXAyOworZWxzZQorICB3aXRoX2J6aXAyPSJubyIKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1udHRhYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbW50dGFiK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tbnR0YWI7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbW50dGFiIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21udHRhYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21udHRhYjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1udHRhYi8tLXdpdGhvdXQtbW50dGFiIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMjCisjICAgUHJvamVjdDogbXlzcWwKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1teXNxbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbXlzcWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX215c3FsOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW15c3FsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX215c3FsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbXlzcWw7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1teXNxbC8tLXdpdGhvdXQtbXlzcWwgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkd2l0aF9teXNxbCIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfTVlTUUwgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgLSotIGF1dG9jb25mIC0qLQogIwotIyBzZXR1cCBpbnN0YWxsIHRhcmdldHMKKyMgUHJvbXB0IGZvciB2YXJpb3VzIGJpdHMgb2YgdXNlciBpbmZvcm1hdGlvbgogIwotaWYgdGVzdCAieCRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIgPSAieHllcyIgOyB0aGVuCi0gIGluc3RhbGx1Y2RoZWFkZXJzPWluc3RhbGx1Y2RoZWFkZXJzCi0gIGluc3RhbGx1Y2RsaWJzPWluc3RhbGx1Y2RsaWJzCiAKLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICBVQ0QtU05NUCBjb21wYXRhYmlsaXR5OiAgICAgZW5hYmxlZAotRU9GCitpZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICJ4IjsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGF2ZV93YXJuZWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQogCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306CisKKwkgKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBTZWN0aW9uICoqKioqKioqKioqKioqCisKKwlZb3UgYXJlIGFib3V0IHRvIGJlIHByb21wdGVkIHdpdGggYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiAgQW5zd2VyCit0aGVtIGNhcmVmdWxseSwgYXMgdGhleSBkZXRlcm1pbmUgaG93IHRoZSBTTk1QIGFnZW50IGFuZCByZWxhdGVkCithcHBsaWNhdGlvbnMgYXJlIHRvIGZ1bmN0aW9uLgorCisJQWZ0ZXIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmluaXNoZXMsIHlvdSBjYW4gYnJvd3NlIHRoZSBuZXdseQorY3JlYXRlZCBuZXQtc25tcC1jb25maWcuaCBmaWxlIGZvciBmdXJ0aGVyIC0gbGVzcyBpbXBvcnRhbnQgLSBwYXJhbWV0ZXJzIHRvCittb2RpZnkuICBCZSBjYXJlZnVsIGlmIHlvdSByZS1ydW4gY29uZmlndXJlIHRob3VnaCwgc2luY2UgbmV0LXNubXAtY29uZmlnLmgKK3dpbGwgYmUgb3ZlcndyaXR0ZW4uCisKKy1QcmVzcyByZXR1cm4gdG8gY29udGludWUtCisiID4mNQorJGFzX2VjaG8gIiRhc19tZToKKworCSAqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIFNlY3Rpb24gKioqKioqKioqKioqKioKKworCVlvdSBhcmUgYWJvdXQgdG8gYmUgcHJvbXB0ZWQgd2l0aCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuICBBbnN3ZXIKK3RoZW0gY2FyZWZ1bGx5LCBhcyB0aGV5IGRldGVybWluZSBob3cgdGhlIFNOTVAgYWdlbnQgYW5kIHJlbGF0ZWQKK2FwcGxpY2F0aW9ucyBhcmUgdG8gZnVuY3Rpb24uCisKKwlBZnRlciB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5pc2hlcywgeW91IGNhbiBicm93c2UgdGhlIG5ld2x5CitjcmVhdGVkIG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgZm9yIGZ1cnRoZXIgLSBsZXNzIGltcG9ydGFudCAtIHBhcmFtZXRlcnMgdG8KK21vZGlmeS4gIEJlIGNhcmVmdWwgaWYgeW91IHJlLXJ1biBjb25maWd1cmUgdGhvdWdoLCBzaW5jZSBuZXQtc25tcC1jb25maWcuaAord2lsbCBiZSBvdmVyd3JpdHRlbi4KKworLVByZXNzIHJldHVybiB0byBjb250aW51ZS0KKyIgPiY2O30KKworcmVhZCB0bXBpbnB1dCA8JjcKK2FjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCitlbHNlCisgIGFjX2N2X2hhdmVfd2FybmVkPSJubyIKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfd2FybmVkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV93YXJuZWQiID4mNjsgfQorZWxzZQorICBhY19jdl9oYXZlX3dhcm5lZD0ieWVzIgorZmkKKworTUU9YCRXSE9BTUlgCitpZiB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmY7IHRoZW4KKyAgTE9DPWBhd2sgJy9eZG9tYWluL3tsb2M9JE5GfUVORHtwcmludCBsb2N9JyAvZXRjL3Jlc29sdi5jb25mYAorZmkKK2lmIHRlc3QgIngkTE9DIiA9IHg7IHRoZW4KKyAgTE9DPSJAbm8ud2hlcmUiCiBmaQogCiAKK01TR19DSEVDSz0iRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGVjaG8gIiIgPiY2CiAKLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCi1pZiB0ZXN0ICJ4JHdpdGhfcm9vdF9hY2Nlc3MiID0gInhubyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9OT19ST09UX0FDQ0VTUyAxCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogRGVmYXVsdCBTTk1QIFZlcnNpb246CisKKwlTdGFydGluZyB3aXRoIE5ldC1TTk1QIDUuMCwgeW91IGNhbiBjaG9vc2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgordGhlIFNOTVAgcHJvdG9jb2wgdG8gdXNlIHdoZW4gbm8gdmVyc2lvbiBpcyBnaXZlbiBleHBsaWNpdGx5IG9uIHRoZQorY29tbWFuZCBsaW5lLCBvciB2aWEgYW4gJ3NubXAuY29uZicgZmlsZS4gIEluIHRoZSBwYXN0IHRoaXMgd2FzIHNldCB0bworU05NUHYxLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byBzd2l0Y2ggdG8gU05NUHYzIGlmIGRlc2lyZWQuICBTTk1QdjMKK3dpbGwgcHJvdmlkZSBhIG1vcmUgc2VjdXJlIG1hbmFnZW1lbnQgZW52aXJvbm1lbnQgKGFuZCB0aHVzIHlvdSdyZQorZW5jb3VyYWdlZCB0byBzd2l0Y2ggdG8gU05NUHYzKSwgYnV0IG1heSBicmVhayBleGlzdGluZyBzY3JpcHRzIHRoYXQKK3JlbHkgb24gdGhlIG9sZCBiZWhhdmlvdXIuICAoVGhvdWdoIHN1Y2ggc2NyaXB0cyB3aWxsIHByb2JhYmx5IG5lZWQgdG8KK2JlIGNoYW5nZWQgdG8gdXNlIHRoZSAnLWMnIGNvbW11bml0eSBmbGFnIGFueXdheSwgYXMgdGhlIFNOTVB2MQorY29tbWFuZCBsaW5lIHVzYWdlIGhhcyBjaGFuZ2VkIGFzIHdlbGwuKS4KKyAgIEF0IHRoaXMgcHJvbXB0IHlvdSBjYW4gc2VsZWN0IFwiMVwiLCBcIjJcIiAoZm9yIFNOTVB2MmMpLCBvciBcIjNcIiBhcwordGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGNvbW1hbmQgdG9vbHMgKHNubXBnZXQsIC4uLikgdG8gdXNlLiAgVGhpcworY2FuIGFsd2F5cyBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdXNpbmcgdGhlIC12IGZsYWcgdG8gdGhlIHRvb2xzLCBvcgorYnkgdXNpbmcgdGhlIFwiZGVmVmVyc2lvblwiIHRva2VuIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCisgICBQcm92aWRpbmcgdGhlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj1cInhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0RlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZSAoMyk6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIzIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iMyIKK2ZpCitldmFsIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IjMiCitldmFsIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCIkdG1waW5wdXRcIgorZmkKKworZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwkTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTgorZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgInh1bnF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInh1bnF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIgogX0FDRU9GCiAKLWZpCi0KLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCi1pZiB0ZXN0ICJ4JHdpdGhfa21lbV91c2FnZSIgPSAieG5vIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX05PX0tNRU1fVVNBR0UgMQorICBlbHNlCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OCiBfQUNFT0YKIAorICBmaQogZmkKIAotIyBEZWZpbmUgdW5sZXNzIHNwZWNpZmljYWxseSBzdXBwcmVzc2VkIChpLmUuLCBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UpLgotaWYgdGVzdCAieCR3aXRoX2R1bW15X3ZhbHVlcyIgIT0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTIDEKKworIyB3ZSB0ZXN0ZWQgdGhpcyBhYm92ZSBiZWZvcmUgdGhlIHByb21wdCwgYnV0IHRoZSBwcm9tcHQgbWF5IGdpdmUgYSBuZXcgdmFsdWUuCitjYXNlICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT059IiBpbgorICBbMTIzXSkgOzsKKyAgMmMpIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049MiA7OworICAqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC4iICIkTElORU5PIiA1CisgICAgOzsKK2VzYWMKKworCitNU0dfQ0hFQ0s9IlN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGVjaG8gIiIgPiY2CisKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbjoKKworCURlc2NyaWJlcyB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCBhYm91dCB0aGUgaG9zdCB0aGUgYWdlbnQgaXMKK3J1bm5pbmcgb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICBUaGlzCitjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUgXCJzeXNjb250YWN0XCIgc3ludGF4IGluIHRoZSBhZ2VudCdzCitjb25maWd1cmF0aW9uIGZpbGVzLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtY29udGFjdD1cImNvbnRhY3RcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK1N5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uICgkTUVAJExPQyk6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkTUVAJExPQyIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IiRNRUAkTE9DIgorZmkKK2V2YWwgTkVUU05NUF9TWVNfQ09OVEFDVD1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iJE1FQCRMT0MiCitldmFsIE5FVFNOTVBfU1lTX0NPTlRBQ1Q9XCIkdG1waW5wdXRcIgorZmkKKworZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPVwkTkVUU05NUF9TWVNfQ09OVEFDVAorZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9TWVNfQ09OVEFDVCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiCiBfQUNFT0YKIAotZmkKLQotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KLWlmIHRlc3QgIngkd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcyIgIT0gInhubyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTIDEKKyAgZWxzZQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9TWVNfQ09OVEFDVCAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVAogX0FDRU9GCiAKKyAgZmkKIGZpCiAKIAotIyBvdmVyZmxvdyBwcm9ibGVtcyB3aXRoIGhwdXgncyBzaAotIyB0YWtlbiBmcm9tIFBlcmwncyBDb25maWd1cmUgc2NyaXB0CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaC4uLiAkRUNIT19DIiA+JjYKK01TR19DSEVDSz0iU3lzdGVtIExvY2F0aW9uIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyAiIiA+JjYKKworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIFN5c3RlbSBMb2NhdGlvbjoKKworCURlc2NyaWJlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKK2F2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICB0aGlzIGNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZQorXCJzeXNsb2NhdGlvblwiIHN5bnRheCBpbiB0aGUgYWdlbnQncyBjb25maWd1cmF0aW9uIGZpbGVzLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtbG9jYXRpb249XCJsb2NhdGlvblwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworU3lzdGVtIExvY2F0aW9uIChVbmtub3duKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIlVua25vd24iICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSJVbmtub3duIgorZmkKK2V2YWwgTkVUU05NUF9TWVNfTE9DPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSJVbmtub3duIgorZXZhbCBORVRTTk1QX1NZU19MT0M9XCIkdG1waW5wdXRcIgorZmkKKworZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9XCRORVRTTk1QX1NZU19MT0MKK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfU1lTX0xPQyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIKK19BQ0VPRgorCisgIGVsc2UKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfU1lTX0xPQyAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DCitfQUNFT0YKKworICBmaQorZmkKKworCitpZiB0ZXN0IC1kIC92YXIvbG9nOyB0aGVuCisgIGRlZmF1bHRsb2c9Ii92YXIvbG9nL3NubXBkLmxvZyIKK2Vsc2UKKyAgZGVmYXVsdGxvZz0iL3Vzci9hZG0vc25tcGQubG9nIgorZmkKKworCitNU0dfQ0hFQ0s9IkxvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGUiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvICIiID4mNgorCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogTG9nZmlsZSBsb2NhdGlvbjoKKworCUVudGVyIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgc25tcGQgYWdlbnQgdG8gZHVtcAoraW5mb3JtYXRpb24gJiBlcnJvcnMgdG8uICBJZiBub3QgZGVmaW5lZCAoZW50ZXIgdGhlIGtleXdvcmQgXCJub25lXCIKK2F0IHRoZSBwcm9tcHQgYmVsb3cpIHRoZSBhZ2VudCB3aWxsIHVzZSBzdGRvdXQgYW5kIHN0ZGVyciBpbnN0ZWFkLgorKE5vdGU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXItcmlkZGVuIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLikKKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtbG9nZmlsZT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0xvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGUgKCRkZWZhdWx0bG9nKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRkZWZhdWx0bG9nIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iJGRlZmF1bHRsb2ciCitmaQorZXZhbCBORVRTTk1QX0xPR0ZJTEU9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IiRkZWZhdWx0bG9nIgorZXZhbCBORVRTTk1QX0xPR0ZJTEU9XCIkdG1waW5wdXRcIgorZmkKKworZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9XCRORVRTTk1QX0xPR0ZJTEUKK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfTE9HRklMRSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIKK19BQ0VPRgorCisgIGVsc2UKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfTE9HRklMRSAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFCitfQUNFT0YKKworICBmaQorZmkKKworCitpZiB0ZXN0IC1kIC92YXI7IHRoZW4KKyAgZGVmYXVsdHN0b3JlPSIvdmFyL25ldC1zbm1wIgorICB1Y2RkZWZhdWx0c3RvcmU9Ii92YXIvdWNkLXNubXAiCitlbHNlCisgIGRlZmF1bHRzdG9yZT0iL2V0Yy9uZXQtc25tcCIKKyAgdWNkZGVmYXVsdHN0b3JlPSIvZXRjL3VjZC1zbm1wIgorZmkKKworCitNU0dfQ0hFQ0s9IkxvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24iCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyAiIiA+JjYKKworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIHNubXBkIHBlcnNpc3RlbnQgc3RvcmFnZSBsb2NhdGlvbjoKKworCUVudGVyIGEgZGlyZWN0b3J5IGZvciB0aGUgU05NUCBsaWJyYXJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQKK2RhdGEgaW4gdGhlIGZvcm0gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGRlZmF1bHQgbG9jYXRpb24gaXMKK2RpZmZlcmVudCB0aGFuIHRoZSBvbGQgZGVmYXVsdCBsb2NhdGlvbiAod2hpY2ggd2FzIGZvciB1Y2Qtc25tcCkuICBJZgoreW91IHN0YXkgd2l0aCB0aGUgbmV3IHBhdGgsIEknbGwgYXNrIHlvdSBpbiBhIHNlY29uZCBpZiB5b3Ugd2lzaCB0bworY29weSB5b3VyIGZpbGVzIG92ZXIgdG8gdGhlIG5ldyBsb2NhdGlvbiAob25jZSBvbmx5KS4gIElmIHlvdSBwaWNrCitzb21lIG90aGVyIHBhdGggdGhhbiB0aGUgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gY29weSB0aGVtIHlvdXJzZWxmLgorVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHBpY2tpbmcgdGhlIG9sZCBwYXRoICgkdWNkZGVmYXVsdHN0b3JlKSBpZgoreW91J2QgcmF0aGVyLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8KKy4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0xvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24gKCRkZWZhdWx0c3RvcmUpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJGRlZmF1bHRzdG9yZSIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IiRkZWZhdWx0c3RvcmUiCitmaQorZXZhbCBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIkZGVmYXVsdHN0b3JlIgorZXZhbCBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwiJHRtcGlucHV0XCIKK2ZpCisKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cJE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIgorX0FDRU9GCisKKyAgZWxzZQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQorX0FDRU9GCisKKyAgZmkKK2ZpCisKKworUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKKworVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JHVjZGRlZmF1bHRzdG9yZQorCisKK2lmIHRlc3QgJFBFUlNJU1RFTlRfRElSRUNUT1JZID0gIiRkZWZhdWx0c3RvcmUiIC1hIC1kICIkdWNkZGVmYXVsdHN0b3JlIiAtYSAhIC1kICIkZGVmYXVsdHN0b3JlIiA7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIENvcHlpbmcgb2xkIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMgdG8gbmV0LXNubXAgcGVyc2lzdGVudCBkaXJlY3Rvcnk6CisKKwlXb3VsZCB5b3UgbGlrZSB0byBjb3B5IHRoZSBvbGRlciB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzCitpbnRvIHlvdXIgbmV3IG5ldC1zbm1wIHBlcnNpc3RlbnQgZmlsZSBwYXRoPyAgVGhpcyB3aWxsIGZ1bmN0aW9uYWxseQorc2F2ZSBhbGwgeW91ciB1Y2Qtc25tcCBkYXRhIGFuZCBsZXQgaXQgYmUgdXNlZCB3aXRoaW4gdGhlIG5ldC1zbm1wCit0b29scy4gIFRoaXMgd2lsbCBvbmx5IGJlIGRvbmUgb25jZSB3aGVuIHlvdSBydW4gbWFrZSBpbnN0YWxsLiAgSWYgeW91Cit3aXNoIHRvIGRvIHRoaXMsIGVudGVyICJ5ZXMiIGF0IHRoZSBwcm9tcHQuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz1cIm5vXCIgKG9yIFwieWVzXCIpCitwYXJhbWV0ZXJzIHRvIC4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0NvcHkgdWNkLXNubXAgZGF0YSBpbnRvIHRoZSBuZXQtc25tcCBkYXRhIGRpcmVjdG9yeSAoInllcyIpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiInllcyIiICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIieWVzIiIKK2ZpCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iInllcyIiCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz1cIiR0bXBpbnB1dFwiCitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIgPiY2OyB9CitlbHNlCithY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9Im5vIgorZmkKK0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIKKworCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHByb2dyYW1zCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTaGVsbCBjaGVja3M6CisjIworCisjICAgICAgIENoZWNrIGZvciAnc2gnIG92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgICAgIChIUC1VWCkKKyMgICAgICAgICAodGFrZW4gZnJvbSBQZXJsJ3MgY29uZmlndXJlIHNjcmlwdCkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoLi4uICIgPiY2OyB9CiBpZiB0ZXN0IC1mIC9ocC11eCAtYSAtZiAvYmluL2tzaDsgdGhlbgogICBpZiAoUEFUSD0uOyBhbGlhcyAteCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogICBlbHNlCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KICAgICBpZiB0ZXN0ICJ4JDEiID0gIngiOyB0aGVuCiAgICAgICBleGVjIC9iaW4va3NoICQwCiAgICAgZWxzZQpAQCAtMzUwNywxNSArNTY1Nyw4NjQgQEAKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotaWYgdGVzdCAieCRkZXZlbG9wZXIiICE9ICJ4bm8iIC1hIC1mICRzcmNkaXIvcmVtb3ZlLWZpbGVzOyB0aGVuCi0gICMgdHVybiBvbiB0aGUgZGV2ZWxvcGVyIGZsYWcgd2hlbiB0YWtlbiBmcm9tIGEgU1ZOIGNoZWNrb3V0IChub3QgYSByZWxlYXNlKQotICBkZXZlbG9wZXI9InllcyIKKworIyMKKyMgICBTdGFuZGFyZCBhbmQgcGF0aCBwcm9ncmFtIGNoZWNrczoKKyMjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCiBmaQogCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKyMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKyAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KKworIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KK0xOX1M9JGFzX2xuX3MKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CiskYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgZXZhbCBcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbDoKKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworX0FDRU9GCisjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKworCitmb3IgYWNfcHJvZyBpbiBmaWxlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRklMRSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRGSUxFIjsgdGhlbgorICBhY19jdl9wcm9nX0ZJTEU9IiRGSUxFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRklMRT0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRklMRT0kYWNfY3ZfcHJvZ19GSUxFCitpZiB0ZXN0IC1uICIkRklMRSI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRGSUxFIiA+JjUKKyRhc19lY2hvICIkRklMRSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRGSUxFIiAmJiBicmVhaworZG9uZQorCitpZiB0ZXN0IHgkYWNfY3ZfcHJvZ19GSUxFID0geDsgdGhlbgorICAjIFRoZSBmaWxlIHByb2dyYW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IEN5Z3dpbiBzZXR1cCwgYWx0aG91Z2gKKyAgIyB0aGlzIHByb2dyYW0gaXMgZXNzZW50aWFsIGZvciBsaWJ0b29sIHRvIHdvcmsgcHJvcGVybHkuIEl0IGlzIG5vbnRyaXZpYWwKKyAgIyB0byBkZWR1Y2UgZnJvbSB0aGUgbWVzc2FnZSBwcmludGVkIGJ5IGxpYnRvb2wgdGhhdCB0aGUgJ2ZpbGUnIHRvb2wgaXMKKyAgIyBtaXNzaW5nIGFuZCBsaWJ0b29sIGRvZXMgbm90IGFib3J0IHdoZW4gdGhlIGZpbGUgcHJvZ3JhbSBpcyBub3QgZm91bmQuIFNvCisgICMgc3RvcCBub3cgaWYgdGhlIGZpbGUgcHJvZ3JhbSBoYXMgbm90IGJlZW4gZm91bmQuCisgIGFzX2ZuX2Vycm9yIDEgImZpbGUgcHJvZ3JhbSBub3QgZm91bmQgYWx0aG91Z2ggaXQgaXMgbmVlZGVkIGJ5IGxpYnRvb2wuIiAiJExJTkVOTyIgNQorZmkKKworZm9yIGFjX3Byb2cgaW4gZmluZAorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0ZJTkQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRklORCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19GSU5EPSIkRklORCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0ZJTkQ9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0ZJTkQ9JGFjX2N2X3Byb2dfRklORAoraWYgdGVzdCAtbiAiJEZJTkQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRklORCIgPiY1CiskYXNfZWNobyAiJEZJTkQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkRklORCIgJiYgYnJlYWsKK2RvbmUKKworZm9yIGFjX3Byb2cgaW4gd2hvYW1pIGxvZ25hbWUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19XSE9BTUkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkV0hPQU1JIjsgdGhlbgorICBhY19jdl9wcm9nX1dIT0FNST0iJFdIT0FNSSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1dIT0FNST0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorV0hPQU1JPSRhY19jdl9wcm9nX1dIT0FNSQoraWYgdGVzdCAtbiAiJFdIT0FNSSI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRXSE9BTUkiID4mNQorJGFzX2VjaG8gIiRXSE9BTUkiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkV0hPQU1JIiAmJiBicmVhaworZG9uZQordGVzdCAtbiAiJFdIT0FNSSIgfHwgV0hPQU1JPSJ3aG9hbWkiCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhdXRvY29uZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXV0b2NvbmY7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0FVVE9DT05GKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQVVUT0NPTkYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQVVUT0NPTkY9IiRBVVRPQ09ORiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfQVVUT0NPTkY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitBVVRPQ09ORj0kYWNfY3ZfcGF0aF9BVVRPQ09ORgoraWYgdGVzdCAtbiAiJEFVVE9DT05GIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFVVE9DT05GIiA+JjUKKyRhc19lY2hvICIkQVVUT0NPTkYiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhdXRvaGVhZGVyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhdXRvaGVhZGVyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9BVVRPSEVBREVSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQVVUT0hFQURFUiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9BVVRPSEVBREVSPSIkQVVUT0hFQURFUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfQVVUT0hFQURFUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0FVVE9IRUFERVI9JGFjX2N2X3BhdGhfQVVUT0hFQURFUgoraWYgdGVzdCAtbiAiJEFVVE9IRUFERVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVVUT0hFQURFUiIgPiY1CiskYXNfZWNobyAiJEFVVE9IRUFERVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QRVJMUFJPRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBFUkxQUk9HIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BFUkxQUk9HPSIkUEVSTFBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BFUkxQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEVSTFBST0c9JGFjX2N2X3BhdGhfUEVSTFBST0cKK2lmIHRlc3QgLW4gIiRQRVJMUFJPRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMUFJPRyIgPiY1CiskYXNfZWNobyAiJFBFUkxQUk9HIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QU1BST0crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQU1BST0cgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUFNQUk9HPSIkUFNQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QU1BST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQU1BST0c9JGFjX2N2X3BhdGhfUFNQUk9HCitpZiB0ZXN0IC1uICIkUFNQUk9HIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBTUFJPRyIgPiY1CiskYXNfZWNobyAiJFBTUFJPRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB5dGhvbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHl0aG9uOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QWVRIT05QUk9HKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFlUSE9OUFJPRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QWVRIT05QUk9HPSIkUFlUSE9OUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFlUSE9OUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BZVEhPTlBST0c9JGFjX2N2X3BhdGhfUFlUSE9OUFJPRworaWYgdGVzdCAtbiAiJFBZVEhPTlBST0ciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFlUSE9OUFJPRyIgPiY1CiskYXNfZWNobyAiJFBZVEhPTlBST0ciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInVuYW1lIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB1bmFtZTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfVU5BTUVQUk9HKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkVU5BTUVQUk9HIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1VOQU1FUFJPRz0iJFVOQU1FUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfVU5BTUVQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorVU5BTUVQUk9HPSRhY19jdl9wYXRoX1VOQU1FUFJPRworaWYgdGVzdCAtbiAiJFVOQU1FUFJPRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVTkFNRVBST0ciID4mNQorJGFzX2VjaG8gIiRVTkFNRVBST0ciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFVOQU1FUFJPRyAiJFVOQU1FUFJPRyIKK19BQ0VPRgorCisKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPQ09ORiIgPSAieCI7IHRoZW4KKwlBVVRPQ09ORj0iOiIKKworZmkKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPSEVBREVSIiA9ICJ4IjsgdGhlbgorCUFVVE9IRUFERVI9IjoiCisKK2ZpCisKK01BS0U9JHtNQUtFLSJtYWtlIn0KKyRNQUtFIC12IC1mIC9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8ICRHUkVQIEdOVSA+L2Rldi9udWxsCitoYXZlX2dudV9tYWtlPSQ/CisKKworIyMKKyMgICBUaGUgUGVybCBmdW5jdGlvbiBzeXN0ZW0oKSBpcyB1c2VkIGZvciBydW5uaW5nIHRoZSBOZXQtU05NUCByZWdyZXNzaW9uCisjICAgdGVzdHMuIEZpbmQgb3V0IHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpbnZva2VzIGEgUE9TSVggc2hlbGwsIHdoaWNoIGlzCisjICAgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cy4gV2hlbiB1c2luZyBXaW5kb3dzICsgTVNZUworIyAgICsgQWN0aXZlU3RhdGUgUGVybCwgUGVybCdzIHN5c3RlbSgpIGZ1bmN0aW9uIGRvZXMgaW52b2tlIFdpbmRvd3MnIGNtZC5leGUKKyMgICB3aGljaCBpcyBub3QgYSBQT1NJWCBzaGVsbC4KKyMjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgUGVybCBmdW5jdGlvbiBzeXN0ZW0oKSBpbnZva2VzIGEgUE9TSVggc2hlbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgUGVybCBmdW5jdGlvbiBzeXN0ZW0oKSBpbnZva2VzIGEgUE9TSVggc2hlbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIngkUEVSTFBST0ciICE9ICd4JyAmJiB0ZXN0IC14ICIkUEVSTFBST0ciICYmIHRlc3QgInhgJFBFUkxQUk9HIC1lICdzeXN0ZW0oJ1wnJ2VjaG8gJE9TVFlQRSdcJycpOydgIiAhPSAneCRPU1RZUEUnOyB0aGVuCisgICAgUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTD15ZXMKK2Vsc2UKKyAgICBQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMPW5vCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMIiA+JjUKKyRhc19lY2hvICIkUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTCIgPiY2OyB9CisKKworCisjIworIyAgIENvbXBpbGF0aW9uLXJlbGF0ZWQgcHJvZ3JhbSBjaGVja3M6CisjIworCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTM1MzAsMTAgKzY1MjksMTAgQEAKIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzU0MywzNSArNjU0MiwzNyBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogZmkKIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgogICBhY19jdF9DQz0kQ0MKICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zNTgxLDM5ICs2NTgyLDUwIEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgQ0M9JGFjX2N0X0NDCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCiBlbHNlCiAgIENDPSIkYWNfY3ZfcHJvZ19DQyIKIGZpCiAKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzYyMyw3NyArNjYzNSwzNyBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgorCiAgIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQ0M9JGFjX2N0X0NDCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KIGZpCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM3MDQsMTggKzY2NzYsMTkgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwogICAgICAgIGNvbnRpbnVlCiAgICAgIGZpCiAgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCiAgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KQEAgLTM3MzMsMjQgKzY3MDYsMjUgQEAKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogZmkKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBjbAorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKICAgZG8KICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zNzYwLDM5ICs2NzM0LDQxIEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhawogICBkb25lCiBmaQogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICBhY19jdF9DQz0kQ0MKLSAgZm9yIGFjX3Byb2cgaW4gY2wKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCiBkbwogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zODAyLDY2ICs2Nzc4LDc4IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKIGRvbmUKIAotICBDQz0kYWNfY3RfQ0MKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKIGZpCiAKIGZpCiAKIAotdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogCiAjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzoiIFwKLSAgICAgImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zODczLDExMiArNjg2MSwxMDggQEAKIH0KIF9BQ0VPRgogYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5leGUgYi5vdXQiCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCiAjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCiAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCiAjIG9mIGV4ZWV4dC4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2Ci1hY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQotICAoZXZhbCAkYWNfbGlua19kZWZhdWx0KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICMgRmluZCB0aGUgb3V0cHV0LCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4gIFRoaXMgc2NoZW1lIGlzCi0jIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKSBvbmx5IGFzIGEgbGFzdAotIyByZXNvcnQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKIAotIyBCZSBjYXJlZnVsIHRvIGluaXRpYWxpemUgdGhpcyB2YXJpYWJsZSwgc2luY2UgaXQgdXNlZCB0byBiZSBjYWNoZWQuCi0jIE90aGVyd2lzZSBhbiBvbGQgY2FjaGUgdmFsdWUgb2YgYG5vJyBsZWQgdG8gYEVYRUVYVCA9IG5vJyBpbiBhIE1ha2VmaWxlLgotYWNfY3ZfZXhlZXh0PQotIyBiLm91dCBpcyBjcmVhdGVkIGJ5IGk5NjAgY29tcGlsZXJzLgotZm9yIGFjX2ZpbGUgaW4gYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dAorIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKworYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCiBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKQotCTs7Ci0gICAgY29uZnRlc3QuJGFjX2V4dCApCi0JIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCiAJOzsKICAgICBbYWJdLm91dCApCiAJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKIAkjIGNlcnRhaW5seSByaWdodC4KIAlicmVhazs7CiAgICAgKi4qICkKLQlhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKLQkjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQotCSMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgotCWV4cG9ydCBhY19jdl9leGVleHQKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KIAlicmVhazs7CiAgICAgKiApCiAJYnJlYWs7OwogICBlc2FjCiBkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGZpCi0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CiBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2ZpbGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2ZpbGUiID4mNgogCi0jIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLSMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKLSMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KLSAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVzCi0gICAgZWxzZQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0gIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0KLXJtIC1mIGEub3V0IGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKIGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCi0jIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjcm9zc19jb21waWxpbmciID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKICAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCiAjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKICMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCkBAIC0zOTg2LDM4ICs2OTcwLDkwIEBACiBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CiAgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JICBleHBvcnQgYWNfY3ZfZXhlZXh0CiAJICBicmVhazs7CiAgICAgKiApIGJyZWFrOzsKICAgZXNhYwogZG9uZQogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKLQotcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNgorcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9CiAKIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKIEVYRUVYVD0kYWNfY3ZfZXhlZXh0CiBhY19leGVleHQ9JEVYRUVYVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtNDAyOSw0NSArNzA2NSw0NiBAQAogfQogX0FDRU9GCiBybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1CitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gIGZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QubyBjb25mdGVzdC5vYmo7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKICAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKICAgICAgICBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKLQogcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KIE9CSkVYVD0kYWNfY3Zfb2JqZXh0CiBhY19vYmpleHQ9JE9CSkVYVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtNDA4MSw1NSArNzExOCwzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jb21waWxlcl9nbnU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2NvbXBpbGVyX2dudT1ubworICBhY19jb21waWxlcl9nbnU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNgotR0NDPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKIGFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KIGFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC00MTQwLDM5ICs3MTU2LDQ5IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWFjX2N2X3Byb2dfY2NfZz1ubworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwogZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KQEAgLTQxODgsMTggKzcyMTQsMTQgQEAKICAgICBDRkxBR1M9CiAgIGZpCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KIGFjX3NhdmVfQ0M9JENDCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDIyNywxMiArNzI0OSwxNyBAQAogLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKICAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KICAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAotICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKICAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KICAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KIGludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CiAKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKwogaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CiBzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKIHN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwpAQCAtNDI0NywyMDUgKzcyNzQsMzcgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLSMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCi0jIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KLSMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKLSMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQotIyBIUC1VWCAxMC4yMCBhbmQgbGF0ZXIJLUFlCi0jIEhQLVVYIG9sZGVyIHZlcnNpb25zCS1BYSAtRF9IUFVYX1NPVVJDRQotIyBTVlI0CQkJLVhjIC1EX19FWFRFTlNJT05TX18KLWZvciBhY19hcmcgaW4gIiIgLXFsYW5nbHZsPWFuc2kgLXN0ZDEgLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgogZG8KICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKIGRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAogQ0M9JGFjX3NhdmVfQ0MKIAogZmkKLQotY2FzZSAieCRhY19jdl9wcm9nX2NjX3N0ZGMiIGluCi0gIHh8eG5vKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjYgOzsKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CiAgICopCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjYKLSAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX3N0ZGMiIDs7CisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKIGVzYWMKLQotIyBTb21lIHBlb3BsZSB1c2UgYSBDKysgY29tcGlsZXIgdG8gY29tcGlsZSBDLiAgU2luY2Ugd2UgdXNlIGBleGl0JywKLSMgaW4gQysrIHdlIG5lZWQgdG8gZGVjbGFyZSBpdC4gIEluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyCi0jIGZvciBib3RoIGNvbXBpbGluZyBDIGFuZCBDKysgd2UgbmVlZCB0byBoYXZlIHRoZSBDKysgY29tcGlsZXIgZGVjaWRlCi0jIHRoZSBkZWNsYXJhdGlvbiBvZiBleGl0LCBzaW5jZSBpdCdzIHRoZSBtb3N0IGRlbWFuZGluZyBlbnZpcm9ubWVudC4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2lmbmRlZiBfX2NwbHVzcGx1cwotICBjaG9rZSBtZQotI2VuZGlmCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotcm0gLWYgY29uZnRlc3QqCi1pZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCi0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCi0gIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCi0gIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCi1maQogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTQ0NTcsMTUgKzczMTYsMTUgQEAKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgogICBDUFA9CiBmaQogaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAogICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCkBAIC00NDc5LDExICs3MzM4LDcgQEAKICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fU1REQ19fCiAjIGluY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNDQ5Miw3OCArNzM0NywzNCBAQAogI2VuZGlmCiAJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKICAgYnJlYWsKIGZpCiAKQEAgLTQ1NzUsOCArNzM4Niw4IEBACiBlbHNlCiAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDUFAiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQogYWNfcHJlcHJvY19vaz1mYWxzZQogZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCiBkbwpAQCAtNDU4NiwxMSArNzM5Nyw3IEBACiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgogICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX1NURENfXwogIyBpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTQ1OTksODUgKzc0MDYsNDAgQEAKICNlbmRpZgogCQkgICAgIFN5bnRheCBlcnJvcgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKIAorZWxzZQogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgogY29udGludWUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQogICAjIFBhc3NlcyBib3RoIHRlc3RzLgogYWNfcHJlcHJvY19vaz06CiBicmVhawogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIDoKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKwogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKIAogYWNfZXh0PWMKQEAgLTQ2OTAsMzU4ICs3NDUyLDY3MCBAQAogCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19lZ3JlcCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19lZ3JlcCIgPiY2Ci0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQUlYIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFJWC4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX0FJWAotICB5ZXMKLSNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIF9BTExfU09VUkNFIDEKLV9BQ0VPRgorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQogcm0gLWYgY29uZnRlc3QqCiAKK2ZpCiAKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jIHN5c3RlbSBjaGVjawotYWNfYXV4X2Rpcj0KLWZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCi0gIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKLSAgICBicmVhawotICBmaQorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCiBkb25lCi1pZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWFjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIKLWFjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIgotYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCiAKLSMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KLSRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29uZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBNSU5JWD15ZXMKIGVsc2UKLSAgYWNfY3ZfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi10ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCi0gIGFjX2N2X2J1aWxkX2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYAotdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1hY19jdl9idWlsZD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzYCB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQorICBNSU5JWD0KIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKLWJ1aWxkPSRhY19jdl9idWlsZAotYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCi1idWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKLWJ1aWxkX29zPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIGlmIHRlc3QgIiRNSU5JWCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfMV9TT1VSQ0UgMiIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgX01JTklYIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2N2X2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLXRlc3QgLXogIiRhY19jdl9ob3N0X2FsaWFzIiAmJgotICBhY19jdl9ob3N0X2FsaWFzPSRhY19jdl9idWlsZF9hbGlhcwotYWNfY3ZfaG9zdD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXNgIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNgotaG9zdD0kYWNfY3ZfaG9zdAotaG9zdF9jcHU9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotaG9zdF92ZW5kb3I9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisjCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKwkgICRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90YXJnZXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXMKIGVsc2UKLSAgYWNfY3ZfdGFyZ2V0X2FsaWFzPSR0YXJnZXRfYWxpYXMKLXRlc3QgIngkYWNfY3ZfdGFyZ2V0X2FsaWFzIiA9ICJ4IiAmJgotICBhY19jdl90YXJnZXRfYWxpYXM9JGFjX2N2X2hvc3RfYWxpYXMKLWFjX2N2X3RhcmdldD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNjsgfQorICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorICAgICRhc19lY2hvICIjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9HTlVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKy8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKyAgY29uc3QgY2hhcnNldCBjczsKKyAgLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIHBjcGNjID0gJmcgKyAoZyA/IGctZyA6IDApOworICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLworICArK3BjcGNjOworICBwcGMgPSAoY2hhcioqKSBwY3BjYzsKKyAgcGNwY2MgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcHBjOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLworICAgIGNoYXIgKnQ7CisgICAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAgICp0KysgPSAwOworICAgIGlmIChzKSByZXR1cm4gMDsKKyAgfQorICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICAgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworICAgICsrZm9vOworICB9CisgIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICAgIGlwdHIgcCA9IDA7CisgICAgKytwOworICB9CisgIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKKyAgfQorICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICAgIGNvbnN0IGludCBmb28gPSAxMDsKKyAgICBpZiAoIWZvbykgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuICFjc1swXSAmJiAhemVyby54OworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBhY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb25zdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgY29uc3QgLyoqLyIgPj5jb25mZGVmcy5oCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90YXJnZXQiID4mNgotdGFyZ2V0PSRhY19jdl90YXJnZXQKLXRhcmdldF9jcHU9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCi10YXJnZXRfdmVuZG9yPWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotdGFyZ2V0X29zPWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYgaW50IGZvb190Oworc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKyNlbmRpZgogCi0jIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCi0jIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCi10ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgotICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCi0gICAgTk9ORU5PTkVzLHgseCwgJiYKLSAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQotCi1QQVJUSUFMVEFSR0VUT1M9YGVjaG8gJHRhcmdldF9vcyB8IHNlZCAncy9bLS5fXS4qLy8nYAotCi0KLSMgcGxhdGZvcm0tc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0JQ0ZMQUdTPSIkQ0ZMQUdTIC1EbWluZ3czMiIKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2lubGluZT0kYWNfa3cKIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhaworZG9uZQogCi0jIHBsYXRmb3JtLXNwZWNpZmljIGxpbmtlciBmbGFncwotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgYWl4NC4yKnxhaXg0LjMqfGFpeDUqfGFpeDYqKQotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYLi4uICRFQ0hPX0MiID4mNgotICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gICAgICAgICAgICAgICAgbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2s9eWVzCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGZpCi0gICAgICAgIGRvbmUKLSAgICAgICAgaWYgdGVzdCAiWCRuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vayIgIT0gIlh5ZXMiOyB0aGVuCi0JICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotCSAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLVdsLC1icnRsIgotCSAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLWJydGwiCi0JICAgIGZpCi0gICAgICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9haXhfbGRmbGFncyAkTERGTEFHUyIKLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ldHNubXBfYWl4X2xkZmxhZ3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ldHNubXBfYWl4X2xkZmxhZ3MiID4mNgotCWVsc2UKLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIiA+JjYKLQlmaQotCTs7Ci0gICAgZGFyd2luOCp8ZGFyd2luOSopCi0gICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlLi4uICRFQ0hPX0MiID4mNgotCWlmIHRlc3QgLXogIiRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiOyB0aGVuCi0JCUxERkxBR1M9Ii1mbGF0X25hbWVzcGFjZSAkTERGTEFHUyIKLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0JZWxzZQotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0JZmkKLQk7OwotICAgICopCi0gICAgICAgIDs7CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfaW5saW5lIiA+JjY7IH0KKworY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgaW5saW5lIHwgeWVzKSA7OworICAqKQorICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgICAgICBubykgYWNfdmFsPTs7CisgICAgICAqKSBhY192YWw9JGFjX2N2X2NfaW5saW5lOzsKKyAgICBlc2FjCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBpbmxpbmUgJGFjX3ZhbAorI2VuZGlmCitfQUNFT0YKKyAgICA7OwogZXNhYwogCi0jIGxpYnRvb2wgc3R1ZmYgZm9yIHNoYXJlZC9zdGF0aWMgbGlicmFyaWVzLgorCisjICAgICAgIGxpYnRvb2wgc3R1ZmYgZm9yIHNoYXJlZC9zdGF0aWMgbGlicmFyaWVzLgorIworCitjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mMjt9IDs7Citlc2FjCisKKworCittYWNyb192ZXJzaW9uPScyLjQnCittYWNyb19yZXZpc2lvbj0nMS4zMjkzJwogCiAKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCi0gIHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYworCisKKworCisKKworCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfYnVpbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlbmFibGVfc2hhcmVkPXllcwotZmk7CisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgb3IgLS1kaXNhYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N0YXRpYyIKLSAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKLSAgICAqKQotICAgICBlbmFibGVfc3RhdGljPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX3N0YXRpYz15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX3N0YXRpYz15ZXMKLWZpOworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CitjYXNlICRhY19jdl9idWlsZCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBvciAtLWRpc2FibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZmFzdF9pbnN0YWxsIgotICBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLWZpOwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorZWxzZQorICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CitjYXNlICRhY19jdl9ob3N0IGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7Citlc2FjCitob3N0PSRhY19jdl9ob3N0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfaG9zdAorc2hpZnQKK2hvc3RfY3B1PSQxCitob3N0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2hvc3Rfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIiCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKKyRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OworICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1CiskYXNfZWNobyAicHJpbnQgLXIiID4mNjsgfSA7OworICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKKyRhc19lY2hvICJjYXQiID4mNjsgfSA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQorICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKICAgICBkb25lCiAgIGRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLWx0X2FjX21heD0wCi1sdF9hY19jb3VudD0wCi0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwotIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQotICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KLSAgbHRfYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGJyZWFrCi0gIGZpCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAotICAgIGVjaG8gPj5jb25mdGVzdC5ubAotICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCi0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawotICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBmaQogICBkb25lCi1kb25lCi0KK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKIGZpCiAKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNFRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kU0VEIiA+JjYKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgotICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0ZHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0ZHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9GR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorCisKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKIGVsc2UKICAgd2l0aF9nbnVfbGQ9bm8KLWZpOworZmkKKwogYWNfcHJvZz1sZAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQogICBjYXNlICRob3N0IGluCiAgICotKi1taW5ndyopCiAgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndwpAQCAtNTA1NCw5ICs4MTI4LDkgQEAKICAgICBbXFwvXSogfCA/OltcXC9dKikKICAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKICAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCiAgICAgICBkb25lCiAgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKICAgICAgIDs7CkBAIC01MDcwLDE0ICs4MTQ0LDE0IEBACiAgICAgOzsKICAgZXNhYwogZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KIGZpCi1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC01MTA3LDE5ICs4MTgxLDE3IEBACiAKIExEPSIkbHRfY3ZfcGF0aF9MRCIKIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorJGFzX2VjaG8gIiRMRCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQotdGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCiBjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgpAQCAtNTEzMSw0MCArODIwMywyMiBAQAogICA7OwogZXNhYwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19nbnVfbGQiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNgotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBlbHNlCi0gICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZmkKLSAgICA7OwotZXNhYwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEJTRC1jb21wYXRpYmxlIG5tIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEJTRC1jb21wYXRpYmxlIG5tLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX05NK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9OTSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC01MjA3LDE5MTkgKzgyNjEsMTY3IEBACiAgICAgZG9uZQogICAgIElGUz0iJGx0X3NhdmVfaWZzIgogICBkb25lCi0gIHRlc3QgLXogIiRsdF9jdl9wYXRoX05NIiAmJiBsdF9jdl9wYXRoX05NPW5tCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQogZmkKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcGF0aF9OTSIgPiY2Ci1OTT0iJGx0X2N2X3BhdGhfTk0iCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLUxOX1M9JGFzX2xuX3MKLWlmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2Ci1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCi0jIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KLSMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCi0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCi0jICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCi0jICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgotIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCi0jIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgotCi1jYXNlICRob3N0X29zIGluCi1haXhbNC05XSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJlb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ic2RpWzQ1XSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCi0gIDs7Ci0KLWN5Z3dpbiopCi0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICA7OwotCi1taW5ndyogfCBwdzMyKikKLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKLSAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KICAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgZmkKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaSo4NiApCi0gICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgotICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KLSAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KLSAgICA7OwotICBocHBhKjY0KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XS5bMC05XSkgc2hhcmVkIGxpYnJhcnknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkTEQgaW4KLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OwotICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKLSAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OwotICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gIGVzYWMKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotbmV0YnNkKikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1uZXdvczYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCi0gIDs7Ci0KLW50by1xbngqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi0gIDs7Ci0KLW9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXJkb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zb2xhcmlzKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgbW90b3JvbGEpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAotICAgIDs7Ci0gIG5jcikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHNlcXVlbnQpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJwotICAgIDs7Ci0gIHNuaSkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbwotICAgIDs7Ci0gIHNpZW1lbnMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBwYykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1lc2FjCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjYKLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLQotCi0KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIG9yIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLWZpOwotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKkVMRi0zMiopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCi0gICAgICA7OwotICAgICpFTEYtNjQqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLSotKi1pcml4NiopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnI2xpbmUgNTQ2MyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZWxzZQotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtMzIiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZmkKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKLXMzOTAqLSpsaW51eCp8c3BhcmMqLSpsaW51eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICozMi1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MHgtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTAqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi0qLSotc2NvMy4ydjUqKQotICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCi0gIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfY2NfbmVlZHNfYmVsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLSAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjYKLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KLSAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKLSAgZmkKLSAgOzsKLXNwYXJjKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KLSAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKLSAgICAgICopCi0gICAgICAgIGlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgTEQ9IiR7TEQtbGR9IC02NCIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi0qLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiopCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1ETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRExMVE9PTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRExMVE9PTCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotICBhY19jdF9ETExUT09MPSRETExUT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJmYWxzZSIKLWZpCi1maQotYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RMTFRPT0wiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKLWVsc2UKLSAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgotICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotQVM9JGFjX2N2X3Byb2dfQVMKLWlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBUyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KLSAgYWNfY3RfQVM9JEFTCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FTK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUyIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUz0iZmFsc2UiCi1maQotZmkKLWFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIEFTPSRhY19jdF9BUwotZWxzZQotICBBUz0iJGFjX2N2X3Byb2dfQVMiCi1maQotCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgotICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1PQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKLWlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT0JKRFVNUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kT0JKRFVNUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgotICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJmYWxzZSIKLWZpCi1maQotYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCi1pZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09CSkRVTVAiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKLWVsc2UKLSAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKLWZpCi0KLSAgOzsKLQotZXNhYwotCi1uZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCi0jIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCi0jZWxzZQotIyBkZWZpbmUgSVNMT1dFUihjKSBcCi0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCi0JCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAotCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKLSNlbmRpZgotCi0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQotaW50Ci1tYWluICgpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQotCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQotICAgICAgZXhpdCgyKTsKLSAgZXhpdCAoMCk7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi1fQUNFT0YKLQotZmkKLQotIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAotCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiAkQ0NDIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbCBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiBlbHNlCiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKLUNYWD0kYWNfY3ZfcHJvZ19DWFgKLWlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2CitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCiAgIGRvbmUKIGZpCi1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgotICBhY19jdF9DWFg9JENYWAotICBmb3IgYWNfcHJvZyBpbiAkQ0NDIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbCBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCiBkbwogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKLWlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NYWCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKLWRvbmUKLXRlc3QgLW4gIiRhY19jdF9DWFgiIHx8IGFjX2N0X0NYWD0iZysrIgotCi0gIENYWD0kYWNfY3RfQ1hYCi1maQotCi0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiIgXAotICAgICAiY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jb21waWxlcl9nbnU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2NvbXBpbGVyX2dudT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNgotR1hYPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCi1hY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQotYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLUNYWEZMQUdTPSItZyIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfcHJvZ19jeHhfZz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jeHhfZyIgPiY2Ci1pZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIENYWEZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDWFhGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPQotICBmaQotZmkKLWZvciBhY19kZWNsYXJhdGlvbiBpbiBcCi0gICAnJyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKLSAgICd2b2lkIGV4aXQgKGludCk7JwotZG8KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0KgotaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgotICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAotICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAotICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAotZmkKLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWENQUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCi0gICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgotICAgIGRvCi0gICAgICBhY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgYnJlYWsKLWZpCi0KLSAgICBkb25lCi0gICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotCi1maQotICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCi1lbHNlCi0gIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNgotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIDoKLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1maQotCi0KLWFjX2V4dD1mCi1hY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGc3NyBmNzcgeGxmIGZydCBwZ2Y3NyBmb3J0NzcgZmwzMiBhZjc3IGY5MCB4bGY5MCBwZ2Y5MCBlcGNmOTAgZjk1IGZvcnQgeGxmOTUgaWZjIGVmYyBwZ2Y5NSBsZjk1IGdmb3J0cmFuCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCi0gIGFjX2N2X3Byb2dfRjc3PSIkRjc3IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19GNzc9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotRjc3PSRhY19jdl9wcm9nX0Y3NwotaWYgdGVzdCAtbiAiJEY3NyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEY3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRjc3IiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICAgIHRlc3QgLW4gIiRGNzciICYmIGJyZWFrCiAgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKwogZmkKLWlmIHRlc3QgLXogIiRGNzciOyB0aGVuCi0gIGFjX2N0X0Y3Nz0kRjc3Ci0gIGZvciBhY19wcm9nIGluIGc3NyBmNzcgeGxmIGZydCBwZ2Y3NyBmb3J0NzcgZmwzMiBhZjc3IGY5MCB4bGY5MCBwZ2Y5MCBlcGNmOTAgZjk1IGZvcnQgeGxmOTUgaWZjIGVmYyBwZ2Y5NSBsZjk1IGdmb3J0cmFuCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCithY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KK2lmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorJGFzX2VjaG8gIiRhY19jdF9EVU1QQklOIiA+JjY7IH0KIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19jdF9GNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0Y3Nz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iICYmIGJyZWFrCiBkb25lCiAKLWZpCi1maQotYWNfY3RfRjc3PSRhY19jdl9wcm9nX2FjX2N0X0Y3NwotaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfRjc3IiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkYWNfY3RfRjc3IiAmJiBicmVhawotZG9uZQotCi0gIEY3Nz0kYWNfY3RfRjc3Ci1maQotCi0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTo2OTcxOiIgXAotICAgICAiY2hlY2tpbmcgZm9yIEZvcnRyYW4gNzcgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXJtIC1mIGEub3V0Ci0KLSMgSWYgd2UgZG9uJ3QgdXNlIGAuRicgYXMgZXh0ZW5zaW9uLCB0aGUgcHJlcHJvY2Vzc29yIGlzIG5vdCBydW4gb24gdGhlCi0jIGlucHV0IGZpbGUuICAoTm90ZSB0aGF0IHRoaXMgb25seSBuZWVkcyB0byB3b3JrIGZvciBHTlUgY29tcGlsZXJzLikKLWFjX3NhdmVfZXh0PSRhY19leHQKLWFjX2V4dD1GCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBGb3J0cmFuIDc3IGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBGb3J0cmFuIDc3IGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mNzdfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfZjc3X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY2Ci1hY19leHQ9JGFjX3NhdmVfZXh0Ci1hY190ZXN0X0ZGTEFHUz0ke0ZGTEFHUytzZXR9Ci1hY19zYXZlX0ZGTEFHUz0kRkZMQUdTCi1GRkxBR1M9Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkRjc3IGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19mNzdfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBGRkxBR1M9LWcKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19mNzdfZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfcHJvZ19mNzdfZz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2Y3N19nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2Y3N19nIiA+JjYKLWlmIHRlc3QgIiRhY190ZXN0X0ZGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgRkZMQUdTPSRhY19zYXZlX0ZGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2Y3N19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCi0gICAgRkZMQUdTPSItZyAtTzIiCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKICAgZWxzZQotICAgIEZGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCi0gICAgRkZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBGRkxBR1M9CisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KICAgZmkKIGZpCiAKLUc3Nz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQogCiAKIAotIyBBdXRvY29uZiAyLjEzJ3MgQUNfT0JKRVhUIGFuZCBBQ19FWEVFWFQgbWFjcm9zIG9ubHkgd29ya3MgZm9yIEMgY29tcGlsZXJzIQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfbm1faW50ZXJmYWNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JjUKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKwogIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19tYXhfY21kX2xlbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgaT0wCiAgIHRlc3RzdHJpbmc9IkFCQ0QiCkBAIC03MTQwLDcgKzg0NDIsNyBAQAogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKICAgICA7OwogCi0gIGN5Z3dpbiogfCBtaW5ndyopCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCiAgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKICAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgogICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCkBAIC03MTUxLDYgKzg0NTMsMTEgQEAKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKICAgICA7OwogCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCiAgIGFtaWdhb3MqKQogICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KICAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgpAQCAtNzE5NSw3ICs4NTAyLDcgQEAKICAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQogICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKICAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsgCV0vLydgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAogICAgIGVsc2UKICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAogICAgIGZpCkBAIC03MjA2LDIwICs4NTEzLDI4IEBACiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKICAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKICAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICB3aGlsZSAodGVzdCAiWCJgJFNIRUxMICQwIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImBmdW5jX2ZhbGxiYWNrX2VjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgogCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAogICAgICAgZG8KICAgICAgICAgaT1gZXhwciAkaSArIDFgCiAgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwogICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCiAgICAgICB0ZXN0c3RyaW5nPQotICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbiBtYXNzaXZlCi0gICAgICAjIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgbGlua2VyLgotICAgICAgIyBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAogICAgIGZpCiAgICAgOzsKQEAgLTcyMjgsMjIgKzg1NDMsMTE1OSBAQAogZmkKIAogaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLGIvYywgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKIGZpCiAKIAogCiAKIAorIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworCitmaQorCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9yZWxvYWRfZmxhZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV1cLlswLTldKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4WzMtOV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9CitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBhcgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgZm9yIGFjX3Byb2cgaW4gYXIKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitmaQorCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJfYXRfZmlsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FXSys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCiAjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCkBAIC03MjU1LDMzICs5NzA3LDE4IEBACiAjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KIHN5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCiAKLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUgXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0KICMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCiBjYXNlICRob3N0X29zIGluCiBhaXgqKQogICBzeW1jb2RlPSdbQkNEVF0nCiAgIDs7Ci1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgIHN5bWNvZGU9J1tBQkNER0lTVFddJwogICA7OwotaHB1eCopICMgSXRzIGxpbmtlciBkaXN0aW5ndWlzaGVzIGRhdGEgZnJvbSBjb2RlIHN5bWJvbHMKK2hwdXgqKQogICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgogICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJwogICBmaQotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICA7OwotbGludXgqIHwgaypic2QqLWdudSkKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbQUJDREdJUlNUV10nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQogICA7OwogaXJpeCogfCBub25zdG9wdXgqKQogICBzeW1jb2RlPSdbQkNERUdSU1RdJwpAQCAtNzMwNiw1NyArOTc0Myw4NiBAQAogICA7OwogZXNhYwogCi0jIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KLW9wdF9jcj0KLWNhc2UgJGJ1aWxkX29zIGluCi1taW5ndyopCi0gIG9wdF9jcj1gZWNobyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCiAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KIGNhc2UgYCROTSAtViAyPiYxYCBpbgogKkdOVSogfCAqJ3dpdGggQkZEJyopCiAgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKIGVzYWMKIAotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCiBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCiAKICAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KICAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKIAogICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbIAldXCgkc3ltY29kZSRzeW1jb2RlKlwpWyAJXVsgCV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKIAogICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KICAgcGlwZV93b3Jrcz1ubwogCiAgIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiBjaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmMoKXt9Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiBpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQotRU9GCitfTFRfRU9GCiAKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgogICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgogICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCi0gICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3RcIiIpID4mNQotICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpIDI+JjUKKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCiAgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgogICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KIAltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKQEAgLTczNjUsNTcgKzk4MzEsNzEgQEAKICAgICAgIGZpCiAKICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICAgIGlmIGdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiBncmVwICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8RU9GID4gY29uZnRlc3QuJGFjX2V4dAorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLUVPRgorX0xUX0VPRgogCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgotCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKIAotCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIGx0X3B0cl90IHZvaWQgKgotI2Vsc2UKLSMgZGVmaW5lIGx0X3B0cl90IGNoYXIgKgotIyBkZWZpbmUgY29uc3QKLSNlbmRpZgorCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAKLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLwotY29uc3Qgc3RydWN0IHsKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CiAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGx0X3B0cl90IGFkZHJlc3M7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7CiB9Ci1sdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9CiB7Ci1FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKGx0X3B0cl90KSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKLQkgIGNhdCA8PFxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotICB7MCwgKGx0X3B0cl90KSAwfQorICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9CiB9OwogCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCi1FT0YKK19MVF9FT0YKIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCiAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCi0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCiAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCi0JICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KIAkgICAgcGlwZV93b3Jrcz15ZXMKIAkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCiAJZWxzZQogCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CiAJZmkKQEAgLTc0NDUsMTcgKzk5MjUsMTUwMSBAQAogICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KIGZpCiBpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfWZhaWxlZCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKLWVjaG8gIiR7RUNIT19UfW9rIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X29iamRpcitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3Jvb3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3Jvb3Q7CitlbHNlCisgIHdpdGhfc3lzcm9vdD1ubworZmkKKworCitsdF9zeXNyb290PQorY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKKyB5ZXMpCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgZmkKKyAgIDs7ICMoCisgLyopCisgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICA7OyAjKAorIG5vfCcnKQorICAgOzsgIygKKyAqKQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9zeXNyb290fSIgPiY1CiskYXNfZWNobyAiJHt3aXRoX3N5c3Jvb3R9IiA+JjY7IH0KKyAgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorICAgOzsKK2VzYWMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CiskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworZmkKKwordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfY2NfbmVlZHNfYmVsZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKK2Vsc2UKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisgICAgTUFOSUZFU1RfVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisgIGZpCitlbHNlCisgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCitmaQorCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQoraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorCisKKworCisKKworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCitpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiREU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9EU1lNVVRJTCIgPSB4OyB0aGVuCisgICAgRFNZTVVUSUw9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisgIGZpCitlbHNlCisgIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAoraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROTUVESVQiID4mNQorJGFzX2VjaG8gIiROTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCitpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisgICAgTk1FRElUPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisgIGZpCitlbHNlCisgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0xJUE89JGFjX2N2X3Byb2dfTElQTworaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElQTyIgPiY1CiskYXNfZWNobyAiJExJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgIGFjX2N0X0xJUE89JExJUE8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsaXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iJGFjX2N0X0xJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9MSVBPIiA9IHg7IHRoZW4KKyAgICBMSVBPPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIExJUE89JGFjX2N0X0xJUE8KKyAgZmkKK2Vsc2UKKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MPSRhY19jdl9wcm9nX09UT09MCitpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0wiID4mNQorJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgIGFjX2N0X09UT09MPSRPVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IiRhY19jdF9PVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisgICAgT1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w9JGFjX2N0X09UT09MCisgIGZpCitlbHNlCisgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKK2lmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorJGFzX2VjaG8gIiRPVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9IiRhY19jdF9PVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisgICAgT1RPT0w2ND0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisgIGZpCitlbHNlCisgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcworZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2ZvcmNlX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCAyPiYxID4vZGV2L251bGw7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bMDEyXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisjIFNldCBvcHRpb25zCitlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVM9IiRBUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FTPSRhY19jdl9wcm9nX0FTCitpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVMiID4mNQorJGFzX2VjaG8gIiRBUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVMiOyB0aGVuCisgIGFjX2N0X0FTPSRBUworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVM9IiRhY19jdF9BUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUworaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUyIgPSB4OyB0aGVuCisgICAgQVM9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFTPSRhY19jdF9BUworICBmaQorZWxzZQorICBBUz0iJGFjX2N2X3Byb2dfQVMiCitmaQorCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKKworCisKKworCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCisgICAgICAgIGVuYWJsZV9kbG9wZW49bm8KKworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9vYmpkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBybSAtZiAubGlicyAyPi9kZXYvbnVsbAogbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKQEAgLTc0NjcsMTQgKzExNDMxLDIxIEBACiBmaQogcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9vYmpkaXIiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQogb2JqZGlyPSRsdF9jdl9vYmpkaXIKIAogCiAKIAogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX09CSkRJUiAiJGx0X2N2X29iamRpci8iCitfQUNFT0YKKworCisKKwogY2FzZSAkaG9zdF9vcyBpbgogYWl4MyopCiAgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQpAQCAtNzQ4NywzMTQgKzExNDU4LDI2IEBACiAgIDs7CiBlc2FjCiAKLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSdzZWQgLWUgMXMvXlgvLycKLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KICMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAorb2ZpbGU9bGlidG9vbAogY2FuX2J1aWxkX3NoYXJlZD15ZXMKIAogIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCiAjIHdoaWNoIG5lZWRzICcubGliJykuCiBsaWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCisKIHdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCiAKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUFSPSRhY19jdl9wcm9nX0FSCi1pZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVIiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0gIGFjX2N0X0FSPSRBUgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVIiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImZhbHNlIgotZmkKLWZpCi1hY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgotaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBBUj0kYWNfY3RfQVIKLWVsc2UKLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotZmkKLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1SQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgotICBhY19jdF9SQU5MSUI9JFJBTkxJQgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSI6IgotZmkKLWZpCi1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCi1pZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIFJBTkxJQj0kYWNfY3RfUkFOTElCCi1lbHNlCi0gIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgotZmkKLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9TVFJJUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iOiIKLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgU1RSSVA9JGFjX2N0X1NUUklQCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLQogb2xkX0NDPSIkQ0MiCiBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgogCiAjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwotdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLXRlc3QgLXogIiRBUyIgJiYgQVM9YXMKIHRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKIHRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwogdGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCi10ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCiB0ZXN0IC16ICIkTEQiICYmIExEPWxkCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi10ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotdGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLXRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgogdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KIAotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLWZpCi0KIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwogICBjYXNlICRjY190ZW1wIGluCiAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwpAQCAtNzgwMywxNyArMTE0ODYsMTggQEAKICAgICAqKSBicmVhazs7CiAgIGVzYWMKIGRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCiAKIAogIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQogY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KIGZpbGVfbWFnaWMqKQogICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkTUFHSUNfQ01EIGluCiBbXFwvKl0gfCAgPzpbXFwvXSopCkBAIC03ODM3LDcgKzExNTIxLDcgQEAKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgogCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKICoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KQEAgLTc4NDgsNyArMTE1MzIsNyBAQAogKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwogKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKIAotRU9GCitfTFRfRU9GCiAJICBmaSA7OwogCWVzYWMKICAgICAgIGZpCkBAIC03ODYzLDE5ICsxMTU0NywyMyBAQAogCiBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKworCisKKwogaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgogICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQpAQCAtNzg5OSw3ICsxMTU4Nyw3IEBACiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgY2F0IDw8RU9GIDE+JjIKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCiAqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCkBAIC03OTEwLDcgKzExNTk4LDcgQEAKICoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KICoqKiBidWctbGlidG9vbEBnbnUub3JnCiAKLUVPRgorX0xUX0VPRgogCSAgZmkgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtNzkyNSwxMyArMTE2MTMsMTQgQEAKIAogTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKICAgZWxzZQogICAgIE1BR0lDX0NNRD06CiAgIGZpCkBAIC03OTQxLDMxMSArMTE2MzAsOCBAQAogICA7OwogZXNhYwogCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKLWlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERTWU1VVElMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSREU1lNVVRJTCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iOiIKLWZpCi1maQotYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKLWlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9EU1lNVVRJTCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCi1lbHNlCi0gIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKLWZpCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX05NRURJVCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgotICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLU5NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKLWlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICROTUVESVQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE5NRURJVCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCi0gIGFjX2N0X05NRURJVD0kTk1FRElUCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X05NRURJVCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IjoiCi1maQotZmkKLWFjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKLWlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X05NRURJVCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgTk1FRElUPSRhY19jdF9OTUVESVQKLWVsc2UKLSAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCi1maQotCi0KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KLSAgICMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotICAgIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCi0gICAjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCi0gICAjIGxpbmsgZmxhZ3MuCi0gICBlY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYwotICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLSAgICAgLWR5bmFtaWNsaWIgJHt3bH0tc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jCi0gICBpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliOyB0aGVuCi0gICAgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgIHJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLSAgIGZpCi0gICBybSBjb25mdGVzdC5jCi0gICAgICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjYKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTIzXSkKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4xLiopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4qKQotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotICAgMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwotICAgMTAuWzAxMl0qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAxMC4qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9In4kTk1FRElUIC1zIFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSBcJHtsaWJ9IgotICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0ifiREU1lNVVRJTCBcJGxpYiB8fCA6IgotICAgIGVsc2UKLSAgICAgIF9sdF9kc3ltdXRpbD0KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLQotCi1lbmFibGVfZGxvcGVuPXllcwotZW5hYmxlX3dpbjMyX2RsbD15ZXMKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayBvciAtLWRpc2FibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotCi1maTsKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgb3IgLS13aXRob3V0LXBpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BpYyIKLSAgcGljX21vZGU9IiR3aXRodmFsIgotZWxzZQotICBwaWNfbW9kZT1kZWZhdWx0Ci1maTsKLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAotCiAjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotdGFnbmFtZT0KKwogbHRfc2F2ZV9DQz0iJENDIgogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC04MjY4LDYgKzExNjU0LDExIEBACiBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCiAKIAorCisKKworCisKICMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCiBMVENDPSR7TFRDQy0iJENDIn0KIApAQCAtODI3NywzNSArMTE2NjgsNDcgQEAKICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCiBjb21waWxlcj0kQ0MKIAorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCiAKICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKKyRSTSBjb25mdGVzdCoKIAogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgorJFJNIC1yIGNvbmZ0ZXN0KgogCiAKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgogCiBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0KIAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgpAQCAtODMxNywyNSArMTE3MjAsMjUgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODMyMDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6ODMyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KIAogaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCiAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgpAQCAtODM0NSwxMiArMTE3NDgsMTUgQEAKIAogZmkKIAotbHRfcHJvZ19jb21waWxlcl93bD0KKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CiBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKIAogICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCkBAIC04MzY2LDE3ICsxMTc3MiwyNSBAQAogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQogICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCiAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KICAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKQEAgLTgzOTAsNiArMTE4MDQsMjYgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKICAgICAgIDs7CiAKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKICAgICBpbnRlcml4WzMtOV0qKQogICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KICAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgpAQCAtODQwMiwyOSArMTE4MzYsMjkgQEAKICAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKwogICAgIHN5c3Y0Kk1QKikKICAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQogICAgICopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCiAgICAgICA7OwogICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVhjb21waWxlciAtZlBJQycKKyAgICAgIDs7CisgICAgZXNhYwogICBlbHNlCiAgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KQEAgLTg0MzcsMTggKzExODcxLDggQEAKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwogICAgICAgZmkKICAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcW5vY29tbW9uJwotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKQEAgLTg0NzYsMTkgKzExOTAwLDM0IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICA7OwogCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBpY2MqIHwgZWNjKikKKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKICAgICAgICAgOzsKLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCiAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwpAQCAtODUwMCwyNSArMTE5MzksNDIgQEAKICAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCiAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKICAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKKwkgIDs7CiAJKlN1blwgQyopCiAJICAjIFN1biBDIDUuOQogCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKIAkgIDs7Ci0JKlN1blwgRiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCi0JICA7OwogCWVzYWMKIAk7OwogICAgICAgZXNhYwogICAgICAgOzsKIAorICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCkBAIC04NTMzLDcgKzExOTg5LDcgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CiAgICAgICAqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKQEAgLTg1ODEsMjEgKzEyMDM3LDM4IEBACiAgICAgZXNhYwogICBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjYKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgIDs7Citlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCiAKICMKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICMKIGlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC04NjA3LDI1ICsxMjA4MCwyNSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4NjEwOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo4NjE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQogCiBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KICAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgpAQCAtODYzOCwyNCArMTIxMTEsMjUgQEAKIGZpCiAKIGZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICA7OwotZXNhYworCisKKworCisKKworCisKKworCiAKICMKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICMKIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCiAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgpAQCAtODY2Nyw3ICsxMjE0MSw3IEBACiAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCiAgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCiAgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCiAgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcwpAQCAtODY3NiwxMiArMTIxNTAsMTIgQEAKICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKICAgICAgZmkKICAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCisgICAkUk0gLXIgY29uZnRlc3QqCiAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQogCiBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KICAgICA6CkBAIC04NjkwLDEzICsxMjE2NCwxOCBAQAogZmkKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKQEAgLTg3MTEsODMgKzEyMTkwLDE0OCBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4NzE0OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjg3MTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKICAgIHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCiAgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKICAgICAgZmkKICAgIGZpCiAgICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gY29uZnRlc3QqCiAgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCiAgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKICAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCiAKIAogaGFyZF9saW5rcz0ibm90dGVzdGVkIgogaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgogICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CiAgIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKKyAgJFJNIGNvbmZ0ZXN0KgogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwogICB0b3VjaCBjb25mdGVzdC5hCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KICAgICBuZWVkX2xvY2tzPXdhcm4KICAgZmkKIGVsc2UKICAgbmVlZF9sb2Nrcz1ubwogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQogCiAgIHJ1bnBhdGhfdmFyPQogICBhbGxvd191bmRlZmluZWRfZmxhZz0KLSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubworICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KICAgYXJjaGl2ZV9jbWRzPQogICBhcmNoaXZlX2V4cHN5bV9jbWRzPQotICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPQotICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQotICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KLSAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCiAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CiAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9CiAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9Ci0gIGhhcmRjb2RlX2RpcmVjdD1ubwogICBoYXJkY29kZV9taW51c19MPW5vCiAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgaW5oZXJpdF9ycGF0aD1ubwogICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljPW5vCiAgIG1vZHVsZV9jbWRzPQogICBtb2R1bGVfZXhwc3ltX2NtZHM9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCiAgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CiAgIGluY2x1ZGVfZXhwc3ltcz0KQEAgLTg4MDMsMTkgKzEyMzQ3LDkgQEAKICAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KICAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgogICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAogCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQogICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KQEAgLTg4MzMsNyArMTIzNjcsMzMgQEAKICAgZXNhYwogCiAgIGxkX3NobGlicz15ZXMKKworICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKKyAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCisgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCiAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQorCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCisJY2FzZSBgJExEIC12IDI+JjFgIGluCisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLlsyLTldKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbMy05XSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgogICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CiAgICAgd2xhcmM9JyR7d2x9JwogCkBAIC04ODQxLDE2ICsxMjQwMSwxNyBAQAogICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQogICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwogICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KICAgICBmaQogICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CiAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCiAgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgogICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgpAQCAtODg2NCwzNCArMTI0MjUsMzYgQEAKICAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgogCWxkX3NobGlicz1ubwotCWNhdCA8PEVPRiAxPiYyCisJY2F0IDw8X0xUX0VPRiAxPiYyCiAKLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAogKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCiAqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KIAotRU9GCitfTFRfRU9GCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlicz1ubworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KIAlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKIAkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCkBAIC04OTAxLDE2ICsxMjQ2NCwxOCBAQAogICAgICAgZmkKICAgICAgIDs7CiAKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKIAotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCiAJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQogCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCkBAIC04OTI2LDYgKzEyNDkxLDExIEBACiAgICAgICBmaQogICAgICAgOzsKIAorICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKwogICAgIGludGVyaXhbMy05XSopCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KQEAgLTg5NDEsNjAgKzEyNTExLDk1IEBACiAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwogICAgICAgOzsKIAotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9CisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCiAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKwkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKIAllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIDs7CiAJZXNhYwogCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSopCi0JICB0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcgOzsKIAllc2FjCiAJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYwogICAgICAgZWxzZQotCWxkX3NobGlicz1ubworICAgICAgICBsZF9zaGxpYnM9bm8KICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogCXdsYXJjPQogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KIAlsZF9zaGxpYnM9bm8KLQljYXQgPDxFT0YgMT4mMgorCWNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQogKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbApAQCAtOTAwMywxMCArMTI2MDgsMTAgQEAKICoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCiAqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KIAotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQpAQCAtOTAyOCwxMCArMTI2MzMsMTQgQEAKIF9MVF9FT0YKIAk7OwogCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgIGVsc2UKIAkgICAgbGRfc2hsaWJzPW5vCiAJICBmaQpAQCAtOTA0Nyw5ICsxMjY1Niw5IEBACiAgICAgICA7OwogCiAgICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTkwODksMTAgKzEyNjk4LDEyIEBACiAgICAgICBlbHNlCiAJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCiAJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAlmaQogCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIApAQCAtOTEwMSwxMCArMTI3MTIsMTAgQEAKIAkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKIAkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gIAkgICAgYnJlYWsKLSAgCSAgZmkKKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQogCSAgZG9uZQogCSAgOzsKIAllc2FjCkBAIC05MTIxLDI4ICsxMjczMiwzMCBAQAogCiAgICAgICBhcmNoaXZlX2NtZHM9JycKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZmlsZV9saXN0X3NwZWM9JyR7d2x9LWYsJwogCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCiAJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCiAJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCiAJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6CisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKIAkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KIAkgIGZpCiAJICA7OwogCWVzYWMKQEAgLTkxNTMsOCArMTI3NjYsOCBAQAogICAgICAgZWxzZQogCSMgbm90IHVzaW5nIGdjYwogCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAJZWxzZQogCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCkBAIC05MTY1LDYgKzEyNzc4LDcgQEAKIAlmaQogICAgICAgZmkKIAorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJwogICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCiAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgogICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwpAQCAtOTE3MiwxMiArMTI3ODYsMTUgQEAKIAkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKIAkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtOTE4OCw2NCArMTI4MDUsNDkgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKIGZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgZmkKIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKIAotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKIAlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgogCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKIAllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtOTI1Niw1NyArMTI4NTgsNDQgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKIGZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgZmkKIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQogCiAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAogCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgogCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJub3RvaycKIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBmaQogCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCiAJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwpAQCAtOTMxNSw4NSArMTI5MDQsMTE3IEBACiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBic2RpWzQ1XSopCiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCiAgICAgICA7OwogCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwogICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwk7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bMDEyXSkKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kcz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlicz1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCiAgICAgICA7OwogCiAgICAgZGd1eCopCkBAIC05NDI3LDcgKzEzMDQ4LDcgQEAKIAogICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCkBAIC05NDM1LDkgKzEzMDU2LDkgQEAKIAogICAgIGhwdXg5KikKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZmkKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CkBAIC05NDUwLDE4ICsxMzA3MSwxOCBAQAogICAgICAgOzsKIAogICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nK2IgJGxpYmRpcicKIAloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLQogCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJwotCiAJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KIAloYXJkY29kZV9taW51c19MPXllcwpAQCAtOTQ2OSwxNiArMTMwOTAsMTYgQEAKICAgICAgIDs7CiAKICAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KikKIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJZXNhYwogICAgICAgZWxzZQpAQCAtOTQ5MCw3ICsxMzExMSw0NiBAQAogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfX2IrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgLWIiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID0geHllczsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCitlbHNlCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworZmkKKwogCSAgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtOTUwMCwxMiArMTMxNjAsMTIgQEAKIAogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCp8aWE2NCopCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJwogCSAgaGFyZGNvZGVfZGlyZWN0PW5vCiAJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCiAJICA7OwogCSopCiAJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCiAKIAkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCkBAIC05NTE4LDE4ICsxMzE3OCw0OSBAQAogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworZWxzZQorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCiAgICAgICA7OwogCiAgICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAogICAgICAgZWxzZQogCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCkBAIC05NTQ3LDExICsxMzIzOCwxNSBAQAogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogICAgICAgOzsKIAorICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCiAgICAgb3BlbmJzZCopCiAgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgogCWhhcmRjb2RlX2RpcmVjdD15ZXMKIAloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwogCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKQEAgLTk1NjcsNyArMTMyNjIsNyBAQAogCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKIAkgICAgIDs7CiAJICBlc2FjCi0gICAgICAgIGZpCisJZmkKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC05NTc3LDE4ICsxMzI3MiwxOSBAQAogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHM9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwogICAgICAgOzsKIAogICAgIG9zZjMqKQogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKQEAgLTk1OTYsMzIgKzEzMjkyLDQzIEBACiAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCiAKIAkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICA7OwogCiAgICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IHRleHQnCisgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKICAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCiAgICAgICBmaQogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwpAQCAtOTYzMSw3ICsxMzMzOCw3IEBACiAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKIAkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCiAJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKIAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKIAllbHNlCkBAIC05NzIwLDE4ICsxMzQyNywxOCBAQAogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtOTc0NSwxMiArMTM0NTIsMzYgQEAKICAgICAgIGxkX3NobGlicz1ubwogICAgICAgOzsKICAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQogICBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQogdGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKK3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorCisKKworCisKKworCisKKworCisKKworCisKKwogIwogIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwogIwpAQCAtOTc2OCw4MyArMTM0OTksMjM5IEBACiAgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCiAgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKICAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjYKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMKICAgICAgIDs7CiAgICAgZXNhYwogICBmaQogICA7OwogZXNhYwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNgotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQogCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICBjYXNlICRob3N0X29zIGluCiAgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwogICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CiAgIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtBLVphLXpdOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCiAgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgogICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwogICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAogICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICBlbHNlCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gIGZpCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYwogICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAogICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CkBAIC05ODU3LDcgKzEzNzQ0LDcgQEAKIAlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKICAgICBmaQogICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJwogQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewogICBsdF9mb289IiI7CiAgIGx0X2NvdW50PTA7CkBAIC05ODc3LDEwICsxMzc2NCwyOSBAQAogICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CiAgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KIH0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbQS1aYS16XTpcKSxcMSxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCiBlbHNlCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKIGZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKIG5lZWRfbGliX3ByZWZpeD11bmtub3duCiBoYXJkY29kZV9pbnRvX2xpYnM9bm8KIApAQCAtOTkxNyw3ICsxMzgyMyw3IEBACiAgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCiAgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwogCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgogCToKICAgICAgIGVsc2UKIAljYW5fYnVpbGRfc2hhcmVkPW5vCkBAIC05OTQzLDkgKzEzODQ5LDE4IEBACiAgIDs7CiAKIGFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKICAgOzsKIAogYmVvcyopCkBAIC05OTY4LDYxICsxMzg4MywxMTIgQEAKICAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCiAgIDs7CiAKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKICAgc2hyZXh0X2NtZHM9Ii5kbGwiCiAgIG5lZWRfdmVyc2lvbj1ubwogICBuZWVkX2xpYl9wcmVmaXg9bm8KIAotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCiAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJworICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCiAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJworICAgICAgICRSTSBcJGRscGF0aCcKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgY3lnd2luKikKICAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwogICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgogICAgICAgOzsKLSAgICBtaW5ndyopCisgICAgbWluZ3cqIHwgY2VnY2MqKQogICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKICAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCiAgICAgICA7OwogICAgIHB3MzIqKQogICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCiAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCiAgICAgICA7OwogICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCiAgICAgOzsKIAogICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCiAgICAgOzsKICAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwogICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KICAgc2hsaWJwYXRoX3Zhcj1QQVRICiAgIDs7CkBAIC0xMDAzMiw3ICsxMzk5OCw3IEBACiAgIHZlcnNpb25fdHlwZT1kYXJ3aW4KICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKQEAgLTEwMTA5LDYgKzE0MDc1LDE5IEBACiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgOzsKIAoraGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCiBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKICAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwogICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KQEAgLTEwMTMxLDE4ICsxNDExMCwxOCBAQAogICAgIGZpCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQorICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKICAgICBzaHJleHRfY21kcz0nLnNsJwogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICkBAIC0xMDE1MSw4ICsxNDEzMCwxMCBAQAogICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgICAgOzsKICAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgogICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQogICA7OwogCiBpbnRlcml4WzMtOV0qKQpAQCAtMTAyMTAsNyArMTQxOTEsNyBAQAogICA7OwogCiAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtMTAyMTksNiArMTQyMDAsNDEgQEAKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworZmkKKworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCiAgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgogICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKICAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KQEAgLTEwMjI2LDcgKzE0MjQyLDcgQEAKIAogICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAogICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtMTAyNDMsNyArMTQyNTksNyBAQAogICB2ZXJzaW9uX3R5cGU9c3Vub3MKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKICAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKQEAgLTEwMjY0LDE0ICsxNDI4MCwxNiBAQAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CiAKLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCiAgIDs7CiAKIG9wZW5ic2QqKQpAQCAtMTAyODAsMTMgKzE0Mjk4LDEzIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OworICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CiAgIGVzYWMKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQogCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtMTAzNTgsNyArMTQzNzYsNiBAQAogICAgIHNuaSkKICAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKICAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICiAgICAgICA7OwogICAgIHNpZW1lbnMpCkBAIC0xMDM4OSwxMyArMTQ0MDYsMTIgQEAKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGVsc2UKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgc2NvMy4ydjUqKQogICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKQEAgLTEwNDA1LDYgKzE0NDIxLDE3IEBACiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKICAgOzsKIAordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwogdXRzNCopCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKQEAgLTEwNDE2LDQzICsxNDQ0MywxMjYgQEAKICAgZHluYW1pY19saW5rZXI9bm8KICAgOzsKIGVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KIHRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi0KIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQogaGFyZGNvZGVfYWN0aW9uPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwgXAoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CiAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCiAKLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgorICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCiAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmCiAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKICAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQogICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCiAgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgogICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCiAgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluawpAQCAtMTA0NjUsMTAgKzE0NTc1LDExIEBACiAgICMgZGlyZWN0b3JpZXMuCiAgIGhhcmRjb2RlX2FjdGlvbj11bnN1cHBvcnRlZAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CiAKLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCiBlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CkBAIC0xMDQ3NywzNyArMTQ1ODgsMTIgQEAKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwogZmkKIAotc3RyaXBsaWI9Ci1vbGRfc3RyaXBsaWI9Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgZGFyd2luKikKLSAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gICAgICAgZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotICAgICAgIDs7Ci0gICAqKQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0gICAgOzsKLSAgZXNhYwotZmkKIAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisKKworCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCiAgIGVuYWJsZV9kbG9wZW49dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KQEAgLTEwNTIyLDgzICsxNDYwOCw1NSBAQAogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIDs7CiAKLSAgbWluZ3cqIHwgcHczMiopCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OworICAgIDs7CiAKICAgY3lnd2luKikKICAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7CisgICAgOzsKIAogICBkYXJ3aW4qKQogICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBkbG9wZW4gKCk7CiBpbnQKIG1haW4gKCkKIHsKLWRsb3BlbiAoKTsKK3JldHVybiBkbG9wZW4gKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RsX2Rsb3BlbiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKIGVsc2UKIApAQCAtMTA2MDgsNDYxICsxNDY2NiwxNzEgQEAKIAogZmkKIAotICAgOzsKKyAgICA7OwogCiAgICopCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBzaGxfbG9hZCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHNobF9sb2FkLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIHNobF9sb2FkIGlubm9jdW91c19zaGxfbG9hZAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBzaGxfbG9hZCAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBzaGxfbG9hZAotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHNobF9sb2FkICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX3NobF9sb2FkKSB8fCBkZWZpbmVkIChfX3N0dWJfX19zaGxfbG9hZCkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gc2hsX2xvYWQ7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gc2hsX2xvYWQ7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19zaGxfbG9hZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19zaGxfbG9hZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19zaGxfbG9hZCA9IHllczsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGxkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgc2hsX2xvYWQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLXNobF9sb2FkICgpOworcmV0dXJuIHNobF9sb2FkICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZGxvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZGxvcGVuLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGRsb3BlbiBpbm5vY3VvdXNfZGxvcGVuCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBkbG9wZW4KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkbG9wZW4gKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZGxvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19kbG9wZW4pCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGRsb3BlbjsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBkbG9wZW47Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19kbG9wZW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfZGxvcGVuPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZGxvcGVuID0geWVzOyB0aGVuCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgZGxvcGVuICgpOwogaW50CiBtYWluICgpCiB7Ci1kbG9wZW4gKCk7CityZXR1cm4gZGxvcGVuICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbHN2bGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBkbG9wZW4gKCk7CiBpbnQKIG1haW4gKCkKIHsKLWRsb3BlbiAoKTsKK3JldHVybiBkbG9wZW4gKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX2RsZF9saW5rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBkbGRfbGluayAoKTsKIGludAogbWFpbiAoKQogewotZGxkX2xpbmsgKCk7CityZXR1cm4gZGxkX2xpbmsgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGZpCiAKQEAgLTExMTAxLDE4ICsxNDg2OSwxOCBAQAogICAgIHNhdmVfTElCUz0iJExJQlMiCiAgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kbG9wZW5fc2VsZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgogICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTExNSAiY29uZmlndXJlIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZiBIQVZFX0RMRkNOX0gKQEAgLTExMTUzLDExICsxNDkyMSwxMyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CiAjZW5kaWYKIAotdm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CiBpbnQgbWFpbiAoKQogewogICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKQEAgLTExMTY2LDIwICsxNDkzNiwyNCBAQAogICBpZiAoc2VsZikKICAgICB7CiAgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KICAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwogICAgIH0KICAgZWxzZQogICAgIHB1dHMgKGRsZXJyb3IgKCkpOwogCi0gICAgZXhpdCAoc3RhdHVzKTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KLUVPRgotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTExMTk2LDIzICsxNDk3MCwyMyBAQAogCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CiAKICAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcwogZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExMjE1ICJjb25maWd1cmUiCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTEyNTMsMTEgKzE1MDI3LDEzIEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKICNlbmRpZgogCi12b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KIGludCBtYWluICgpCiB7CiAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwpAQCAtMTEyNjYsMjAgKzE1MDQyLDI0IEBACiAgIGlmIChzZWxmKQogICAgIHsKICAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQogICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCiAgICAgfQogICBlbHNlCiAgICAgcHV0cyAoZGxlcnJvciAoKSk7CiAKLSAgICBleGl0IChzdGF0dXMpOworICByZXR1cm4gc3RhdHVzOwogfQotRU9GCi0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCiAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCiAgICAgbHRfc3RhdHVzPSQ/CiAgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgpAQCAtMTEyOTYsOCArMTUwNzYsOCBAQAogCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQogICAgIGZpCiAKICAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCkBAIC0xMTMxOCw2MjA1ICsxNTA5OCwxMDMgQEAKIGZpCiAKIAotIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNgogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKIAotYWl4WzQtOV0qKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKKworCisKKworCisKKworCisKKworCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKICAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjYKLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyIFwKLSAgICBDQyBcCi0gICAgTEQgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2wgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyBcCi0gICAgb2xkX2FyY2hpdmVfY21kcyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCi0gICAgcHJlZGVwX29iamVjdHMgXAotICAgIHBvc3RkZXBfb2JqZWN0cyBcCi0gICAgcHJlZGVwcyBcCi0gICAgcG9zdGRlcHMgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIFwKLSAgICBhcmNoaXZlX2NtZHMgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgXAotICAgIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnIFwKLSAgICBub191bmRlZmluZWRfZmxhZyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljIFwKLSAgICBtb2R1bGVfY21kcyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aCBcCi0gICAgZXhjbHVkZV9leHBzeW1zIFwKLSAgICBpbmNsdWRlX2V4cHN5bXM7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgfCBcCi0gICAgYXJjaGl2ZV9jbWRzIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgfCBcCi0gICAgbW9kdWxlX2NtZHMgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgICAgOzsKICAgZXNhYworZmkKIAotY2ZnZmlsZT0iJHtvZmlsZX1UIgotICB0cmFwICIkcm0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQotICAkcm0gLWYgIiRjZmdmaWxlIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkb2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkb2ZpbGUiID4mNjt9CiAKLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jISAkU0hFTEwKIAotIyBgJGVjaG8gIiRjZmdmaWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCkKLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sOgotIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCi0jIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCi1TRUQ9JGx0X1NFRAogCi0jIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgotWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCi0jIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWF2YWlsYWJsZV90YWdzPQogCi0jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRwogCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CiAKLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKIAotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KIAotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0MKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTEQKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwcwotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQKLSMgbGlicmFyeQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnMKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZwotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCi0KLSMgIyMjIEVORCBMSUJUT09MIENPTkZJRwotCi1fX0VPRl9fCi0KLQorICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgogICBjYXNlICRob3N0X29zIGluCiAgIGFpeDMqKQotICAgIGNhdCA8PFxFT0YgPj4gIiRjZmdmaWxlIgotCi0jIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCi0gIENPTExFQ1RfTkFNRVM9Ci0gIGV4cG9ydCBDT0xMRUNUX05BTUVTCi1maQotRU9GCi0gICAgOzsKLSAgZXNhYwotCi0gICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgotICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0gIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0KLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fCBcCi0gICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKLSAgY2htb2QgK3ggIiRvZmlsZSIKLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0iJGx0X3NhdmVfQ0MiCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC10YWdzIG9yIC0td2l0aG91dC10YWdzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF90YWdzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3RhZ3MiCi0gIHRhZ25hbWVzPSIkd2l0aHZhbCIKLWZpOwotCi1pZiB0ZXN0IC1mICIkbHRtYWluIiAmJiB0ZXN0IC1uICIkdGFnbmFtZXMiOyB0aGVuCi0gIGlmIHRlc3QgISAtZiAiJHtvZmlsZX0iOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGV4aXN0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGV4aXN0IiA+JjI7fQotICBmaQotCi0gIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKLSAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdCIgPiYyO30KLSAgICBlbHNlCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2luZyBcYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBcYCRvZmlsZSciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBcYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBcYCRvZmlsZSciID4mMjt9Ci0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCi0gIGZpCi0KLSAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCi0gICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCi0gIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbLV9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MTIzNDU2Nzg5MCwvXTo6ZydgIGluCi0gICAgIiIpIDs7Ci0gICAgKikgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JOzsKLSAgICBlc2FjCi0KLSAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHRhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB0YWcgbmFtZSBcIiR0YWduYW1lXCIgYWxyZWFkeSBleGlzdHMiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBmaQotCi0gICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCi0KLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgIENYWCkKLQlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLQkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0JICBhY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotaGFyZGNvZGVfbWludXNfTF9DWFg9bm8KLWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCi1oYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCi1tb2R1bGVfY21kc19DWFg9Ci1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQotbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgotb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1wcmVkZXBfb2JqZWN0c19DWFg9Ci1wb3N0ZGVwX29iamVjdHNfQ1hYPQotcHJlZGVwc19DWFg9Ci1wb3N0ZGVwc19DWFg9Ci1jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9Y3BwCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9DWFg9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCi0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9JENDCi1sdF9zYXZlX0xEPSRMRAotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPSRHWFgKLWx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCi1sdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKLWlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4Ci1lbHNlCi0gICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAotZmkKLWlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgotICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCi1lbHNlCi0gICRhc191bnNldCBsdF9jdl9wYXRoX0xECi1maQotdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKLUNDPSR7Q1hYLSJjKysifQotY29tcGlsZXI9JENDCi1jb21waWxlcl9DWFg9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi0KLSMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3ZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCi0jIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5Ci1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCi1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0KLWZpCi0KLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgb3IgLS13aXRob3V0LWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2dudV9sZCIKLSAgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCi1lbHNlCi0gIHdpdGhfZ251X2xkPW5vCi1maTsKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICRFQ0hPX0MiID4mNgotICBjYXNlICRob3N0IGluCi0gICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtcXC9dKiB8ID86W1xcL10qKQotICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2Ci1maQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTEQiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotdGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19nbnVfbGQiID4mNgotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi0KLQotCi0gICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQotICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCi0gICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfCBcCi0JZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICBlbHNlCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Ci0gICAgZmkKLSAgZWxzZQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgd2xhcmM9Ci0KLSAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgotICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCi0gICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKLSAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KLSAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgotICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgZmkKLQotICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotZWxzZQotICBHWFg9bm8KLSAgd2l0aF9nbnVfbGQ9bm8KLSAgd2xhcmM9Ci1maQotCi0jIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotbGRfc2hsaWJzX0NYWD15ZXMKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIGFpeFs0LTldKikKLSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0gICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotICAgICAgbm9fZW50cnlfZmxhZz0iIgotICAgIGVsc2UKLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLSAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0JZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBjYXNlICRsZF9mbGFnIGluCi0JICAqLWJydGwqKQotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgIGZpCi0KLSAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJwotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCi0gICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0KLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLSAgICAgIGVsc2UKLQkjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm9rJwotCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICBmaQotICAgIGZpCi0gICAgOzsKLQotICBiZW9zKikKLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGVsc2UKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICBmaQotICAgIDs7Ci0KLSAgY2hvcnVzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzIDsgdGhlbgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgbW9kdWxlX2NtZHNfQ1hYPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgICBtb2R1bGVfY21kc19DWFg9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgICAgOzsKLQotICBkZ3V4KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZWMrKyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBnaGN4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZnJlZWJzZFsxMl0qKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUgc3dpdGNoIHRvIEVMRgotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBmcmVlYnNkLWVsZiopCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgOzsKLSAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCi0gICAgIyBjb252ZW50aW9ucwotICAgIGxkX3NobGlic19DWFg9eWVzCi0gICAgOzsKLSAgZ251KikKLSAgICA7OwotICBocHV4OSopCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCSMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIENDKikKLSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgOzsKLSAgICBhQ0MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgIwotICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLSAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLSAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlstXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0gICAgICA7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBocHV4MTAqfGhwdXgxMSopCi0gICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopIDs7Ci0gICAgICAqKQotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgYUNDKikKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KikKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgaWE2NCopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGludGVyaXhbMy05XSopCi0gICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgOzsKLSAgaXJpeDUqIHwgaXJpeDYqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTR0kgQysrCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICBlbHNlCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgIC1vICRsaWInCi0JICBmaQotCWZpCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0JOzsKLSAgICBlc2FjCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgaWNwYyopCi0JIyBJbnRlbCBDKysKLQl3aXRoX2dudV9sZD15ZXMKLQkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scwotCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCi0JIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLQkqIlZlcnNpb24gNy4iKikKLSAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKLQkgIHRtcF9pZHluPQotCSAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCSAgZXNhYwotICAJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQllc2FjCi0JYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JOzsKLSAgICAgIHBnQ0MqIHwgcGdjcHAqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotICAJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIDs7Ci0gICAgICBjeHgqKQotCSMgQ29tcGFxIEMrKwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQysrIDUuOQotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0KLQkgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKLQkgICMgd291bGQgYmUgYmV0dGVyLgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICMgaW4gdGhlIGFyY2hpdmUuCi0JICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGx5bnhvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIG04OGsqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBtdnMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBjeHgqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbmV0YnNkKikKLSAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGZpCi0gICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJwotICAgIDs7Ci0gIG9wZW5ic2QyKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCi0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGZpCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICBlbHNlCi0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgZmkKLSAgICA7OwotICBvc2YzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0KLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgY3h4KikKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgb3NmNCogfCBvc2Y1KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBjeHgqKQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAkcm0gJGxpYi5leHAnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHBzb3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBzdW5vczQqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQueAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgbGNjKikKLQkjIEx1Y2lkCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLSAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgKikKLQkgICAgIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkgICAgIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KLQkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCWVzYWMKLQlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgZ2N4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCi0JICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBlbHNlCi0JICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKLQkgICAgIyBwbGF0Zm9ybS4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGZpCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICR3bCRsaWJkaXInCi0JICBjYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0JICAqKQotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgIyBhcyAteiBkZWZzLgotICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLSAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCi0gICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLSAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCi0gICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCi0gICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgotICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKLSAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JwotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCi0gICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCi0gICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tQmV4cG9ydCcKLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHRhbmRlbSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIE5DQyopCi0JIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB2eHdvcmtzKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjYKLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotR0NDX0NYWD0iJEdYWCIKLUxEX0NYWD0iJExEIgotCi1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1jbGFzcyBGb28KLXsKLXB1YmxpYzoKLSAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1wcml2YXRlOgotICBpbnQgYTsKLX07Ci1FT0YKLQotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0gICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotCi0gICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKLSAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCi0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLQotICAjIFRoZSBgKicgaW4gdGhlIGNhc2UgbWF0Y2hlcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZSBgY2FzZScgaW4KLSAgIyAkb3V0cHV0X3ZlcmJvc2VfY21kIGNhbiB0cmlnZ2VyIGdsb2IgZXhwYW5zaW9uIGR1cmluZyB0aGUgbG9vcAotICAjIGV2YWwgd2l0aG91dCB0aGlzIHN1YnN0aXR1dGlvbi4KLSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9YCRlY2hvICJYJG91dHB1dF92ZXJib3NlX2xpbmtfY21kIiB8ICRYc2VkIC1lICIkbm9fZ2xvYl9zdWJzdCJgCi0KLSAgZm9yIHAgaW4gYGV2YWwgJG91dHB1dF92ZXJib3NlX2xpbmtfY21kYDsgZG8KLSAgICBjYXNlICRwIGluCi0KLSAgICAtTCogfCAtUiogfCAtbCopCi0gICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KLSAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCi0gICAgICAgaWYgdGVzdCAkcCA9ICItTCIgXAotCSAgfHwgdGVzdCAkcCA9ICItUiI7IHRoZW4KLQkgcHJldj0kcAotCSBjb250aW51ZQotICAgICAgIGVsc2UKLQkgcHJldj0KLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgY2FzZSAkcCBpbgotCSAtTCogfCAtUiopCi0JICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCi0JICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCi0JICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCi0JICAgaWYgdGVzdCAteiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCi0JICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke3ByZXZ9JHtwfSIKLQkgICBlbHNlCi0JICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9ICR7cHJldn0ke3B9IgotCSAgIGZpCi0JICAgOzsKLQkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKLQkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCi0JIGVzYWMKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRwb3N0ZGVwc19DWFgiOyB0aGVuCi0JICAgcG9zdGRlcHNfQ1hYPSIke3ByZXZ9JHtwfSIKLQkgZWxzZQotCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICouJG9iamV4dCkKLSAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KLSAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KLQkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgaWYgdGVzdCAteiAiJHByZWRlcF9vYmplY3RzX0NYWCI7IHRoZW4KLQkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwIgotCSBlbHNlCi0JICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcHJlZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBfb2JqZWN0c19DWFgiOyB0aGVuCi0JICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHAiCi0JIGVsc2UKLQkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcG9zdGRlcF9vYmplY3RzX0NYWCAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyBDWFggdGVzdCBwcm9ncmFtIgotZmkKLQotJHJtIC1mIGNvbmZlc3QuJG9iamV4dAotCi1jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPQotaWYgdGVzdCAtbiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCi0gIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKLWZpCi0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1jYXNlICRob3N0X29zIGluCi1pbnRlcml4WzMtOV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIHByZWRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcHNfQ1hYPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zb2xhcmlzKikKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgQ0MqKQotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgotICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKLSAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLWVzYWMKLQotY2FzZSAiICRwb3N0ZGVwc19DWFggIiBpbgotKiIgLWxjICIqKSBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8gOzsKLWVzYWMKLQotbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgotCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICAgOzsKLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4WzQtOV0qKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JZWxzZQotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgIGRhcndpbiopCi0gICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgICB4bGMqKQotICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xbm9jb21tb24nCi0gICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotICAgICAgICAgICA7OwotICAgICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgICBkZ3V4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZWMrKyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIDs7Ci0JICBnaGN4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLQkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCi0JOzsKLSAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJwotCSAgICBmaQotCSAgICA7OwotCSAgYUNDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqfGlhNjQqKQotCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGludGVyaXgqKQotCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQotCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKLQkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251KQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJwotCSAgICA7OwotCSAgaWNwYyogfCBlY3BjKikKLQkgICAgIyBJbnRlbCBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKLQkgICAgOzsKLQkgIHBnQ0MqIHwgcGdjcHAqKQotCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlci4KLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIENvbXBhcSBDKysKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbHlueG9zKikKLQk7OwotICAgICAgbTg4ayopCi0JOzsKLSAgICAgIG12cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGN4eCopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbmV0YnNkKikKLQk7OwotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIDs7Ci0JICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBwc29zKikKLQk7OwotICAgICAgc29sYXJpcyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJwotCSAgICA7OwotCSAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN1bm9zNCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBsY2MqKQotCSAgICAjIEx1Y2lkCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB0YW5kZW0qKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdnh3b3JrcyopCi0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICBmaQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNgotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTM2MjA6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTM2MjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID0geHllczsgdGhlbgotICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIDs7Ci0gICAgIGVzYWMKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0gICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KLWZpCi0KLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMzcyNDogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjEzNzI4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjYKLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgotICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4WzQtOV0qKQotICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLSAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgotICA7OwotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICA7OwotICAqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gIGVzYWMKLSAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0NYWCIgPiY2Ci10ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCi0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLQotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICA7OwotCi1haXhbNC05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKLWhhcmRjb2RlX2FjdGlvbl9DWFg9Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8IFwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjYKLQotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9DWFggXAotICAgIENDX0NYWCBcCi0gICAgTERfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0NYWCBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWCBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKLSAgICBwcmVkZXBfb2JqZWN0c19DWFggXAotICAgIHBvc3RkZXBfb2JqZWN0c19DWFggXAotICAgIHByZWRlcHNfQ1hYIFwKLSAgICBwb3N0ZGVwc19DWFggXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFggXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFggXAotICAgIGFyY2hpdmVfY21kc19DWFggXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX0NYWCBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX0NYWCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFggXAotICAgIG1vZHVsZV9jbWRzX0NYWCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX0NYWCBcCi0gICAgZXhjbHVkZV9leHBzeW1zX0NYWCBcCi0gICAgaW5jbHVkZV9leHBzeW1zX0NYWDsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIHwgXAotICAgIGFyY2hpdmVfY21kc19DWFggfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggfCBcCi0gICAgbW9kdWxlX2NtZHNfQ1hYIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX0NYWAotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX0NYWAotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9DWFgKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFgKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0NYWAotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWAotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9DWFgKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWAotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9DWFgKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0NYWAotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0NYWAotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfQ1hYCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSRsdF9zYXZlX0NDCi1MRENYWD0kTEQKLUxEPSRsdF9zYXZlX0xECi1HQ0M9JGx0X3NhdmVfR0NDCi13aXRoX2dudV9sZGN4eD0kd2l0aF9nbnVfbGQKLXdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1sdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECi1sdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLWx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAotbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLQotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEY3NykKLQlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KLQotYWNfZXh0PWYKLWFjX2NvbXBpbGU9JyRGNzcgLWMgJEZGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRGNzcgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2Y3N19jb21waWxlcl9nbnUKLQotCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0KLWFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PQotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLWhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Ci1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KLWhhcmRjb2RlX21pbnVzX0xfRjc3PW5vCi1oYXJkY29kZV9hdXRvbWF0aWNfRjc3PW5vCi1tb2R1bGVfY21kc19GNzc9Ci1tb2R1bGVfZXhwc3ltX2NtZHNfRjc3PQotbGlua19hbGxfZGVwbGlic19GNzc9dW5rbm93bgotb2xkX2FyY2hpdmVfY21kc19GNzc9JG9sZF9hcmNoaXZlX2NtZHMKLW5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PW5vCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWYKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0Y3Nz0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAotICAgICAgcHJvZ3JhbSB0Ci0gICAgICBlbmQKLSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCi0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7Rjc3LSJmNzcifQotY29tcGlsZXI9JENDCi1jb21waWxlcl9GNzc9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci10ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0jIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICBmaQotICA7OwotYWl4WzQtOV0qKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCiAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKLSAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2Ci0KLUdDQ19GNzc9IiRHNzciCi1MRF9GNzc9IiRMRCIKLQotbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgotCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLQotICAgIGludGVyaXhbMy05XSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLSAgICAgIGRhcndpbiopCi0gICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICB4bGMqKQotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctcW5vY29tbW9uJwotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMgNS45Ci0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9JycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLVBJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS2NvbmZvcm1fcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLXBpYycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciID4mNgotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3Nz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTUzMDc6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTUzMTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID0geHllczsgdGhlbgotICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciIDs7Ci0gICAgIGVzYWMKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci0gICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KLWZpCi0KLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3XCIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3Nz1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNTQxMTogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE1NDE1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3Nz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA+JjYKLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgotICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotCi0gIHJ1bnBhdGhfdmFyPQotICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PW5vCi0gIGFyY2hpdmVfY21kc19GNzc9Ci0gIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PQotICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3PQotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9Ci0gIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9dW5zdXBwb3J0ZWQKLSAgbGlua19hbGxfZGVwbGlic19GNzc9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3PW5vCi0gIG1vZHVsZV9jbWRzX0Y3Nz0KLSAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltc19GNzc9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgZXhjbHVkZV9leHBzeW1zX0Y3Nz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgotICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCiAgICAgZmkKICAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwogCi0gIGxkX3NobGlic19GNzc9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCi0gICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4WzMtOV0qKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JbGRfc2hsaWJzX0Y3Nz1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKLSoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgotKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICi0qKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgRjc3KSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PW5vCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbMy05XSopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQl0bXBfYWRkZmxhZz0KLQljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLQlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwotCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwotCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCi0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSopCi0JICB0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcgOzsKLQllc2FjCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JZmkKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlsZF9zaGxpYnNfRjc3PW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKLSoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCi0JbGRfc2hsaWJzX0Y3Nz1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAotKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0JOzsKLQkqKQotCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0JICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICBlbHNlCi0JICAgIGxkX3NobGlic19GNzc9bm8KLQkgIGZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzX0Y3NyIgPSBubzsgdGhlbgotICAgICAgcnVucGF0aF92YXI9Ci0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Ci0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyopCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCi0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0JIyBicm9rZW4gY29sbGVjdDIuCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz11bnN1cHBvcnRlZAotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhaXhbNC05XSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKLQkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gIAkgICAgYnJlYWsKLSAgCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6Ci0JICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz11bnN1cHBvcnRlZAotICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0gIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0gIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotICAJICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0Jc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLQlmaQotICAgICAgZWxzZQotCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQkgIHNoYXJlZF9mbGFnPSctRycKLQllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICBmaQotCWZpCi0gICAgICBmaQotCi0gICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJGNvbnZlbmllbmNlJwotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGJzZGlbNDVdKikKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kc19GNzc9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3PSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kc19GNzc9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9JytiICRsaWJkaXInCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzX0Y3Nz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnNfRjc3PXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0Y3NyIgPiY2Ci10ZXN0ICIkbGRfc2hsaWJzX0Y3NyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfRjc3IGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3Ci0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NwotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19GNzcKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0Y3NyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciID4mNgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLQotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICA7OwotCi1haXhbNC05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKICAgICA7OwogICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CiAKLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CiAKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7CiAKLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7CiAKLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKIAotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKIGZpCi0KLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgotaGFyZGNvZGVfYWN0aW9uX0Y3Nz0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0Y3NyIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfRjc3IiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfRjc3IiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBGNzcpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9GNzciICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fRjc3PXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fRjc3PWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fRjc3PXVuc3VwcG9ydGVkCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNgotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX0Y3NyBcCi0gICAgQ0NfRjc3IFwKLSAgICBMRF9GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3IFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3IFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgXAotICAgIHByZWRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcG9zdGRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcHJlZGVwc19GNzcgXAotICAgIHBvc3RkZXBzX0Y3NyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0Y3NyBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NyBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3NyBcCi0gICAgbW9kdWxlX2NtZHNfRjc3IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3IFwKLSAgICBleGNsdWRlX2V4cHN5bXNfRjc3IFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfRjc3OyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19GNzcgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgfCBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBtb2R1bGVfY21kc19GNzcgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzcgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfRjc3Ci0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfRjc3Ci0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfRjc3Ci0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0Y3NwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfRjc3Ci1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfRjc3Ci1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfRjc3Ci1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19GNzcKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0Y3NwotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQKLSMgbGlicmFyeQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfRjc3Ci0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NwotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3Ci0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19GNzcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0Y3NwotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3Ci0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3Ci0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfRjc3Ci0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0Y3NwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3Ci0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfRjc3Ci0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19GNzcKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19GNzcKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtMTc1MjUsMzkyNyArMTUyMDMsODEgQEAKIAogQ0M9IiRsdF9zYXZlX0NDIgogCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgR0NKKQotCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgogCiAKIAotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9HQ0o9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHt9OyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKIAogCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSAtciBjb25mdGVzdCoKIAogCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0dDSj0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCiAKIAotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0KLW9sZF9hcmNoaXZlX2NtZHNfR0NKPSRvbGRfYXJjaGl2ZV9jbWRzCiAKIAotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9JyAtZm5vLWJ1aWx0aW4nCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTc2MjM6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTc2Mjc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjYKIAotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi1lbHNlCi0gICAgOgotZmkKKyMgT25seSBleHBhbmQgb25jZToKIAotZmkKIAotbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgogCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctc3RhdGljJwogCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7CisjIworIyAgIEJ1aWxkIGVudmlyb25tZW50OgorIyMKIAotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLQotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgPiY2Ci0KKyMgICBkZXZlbG9wZXIgYnVpbGQKKyMgICAgICAgKGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGJ1aWxkaW5nIGZyb20gU1ZOIGNoZWNrb3V0KQogIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE3OTEzOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE3OTE3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLQoraWYgdGVzdCAieCRkZXZlbG9wZXIiICE9ICJ4bm8iIC1hIC1mICRzcmNkaXIvcmVtb3ZlLWZpbGVzOyB0aGVuCisgICAgZGV2ZWxvcGVyPSJ5ZXMiCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgotICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiIDs7Ci0gICAgIGVzYWMKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci0gICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KLWZpCi0KLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKXCIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjYKLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Ci1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSj1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxODAxNzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE4MDIxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA+JjYKLQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgotICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotCi0gIHJ1bnBhdGhfdmFyPQotICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPW5vCi0gIGFyY2hpdmVfY21kc19HQ0o9Ci0gIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPQotICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKPQotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQotICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9Ci0gIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9bm8KLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9dW5zdXBwb3J0ZWQKLSAgbGlua19hbGxfZGVwbGlic19HQ0o9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKPW5vCi0gIG1vZHVsZV9jbWRzX0dDSj0KLSAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubwotICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltc19HQ0o9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgZXhjbHVkZV9leHBzeW1zX0dDSj0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgotICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLSAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgotICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgIGZpCi0gICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGVzYWMKLQotICBsZF9zaGxpYnNfR0NKPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCi0gICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4WzMtOV0qKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JbGRfc2hsaWJzX0dDSj1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKLSoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgotKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICi0qKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLQotICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgR0NKKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPW5vCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbMy05XSopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQl0bXBfYWRkZmxhZz0KLQljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLQlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwotCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwotCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCi0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSopCi0JICB0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcgOzsKLQllc2FjCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JZmkKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKLSoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCi0JbGRfc2hsaWJzX0dDSj1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAotKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0JOzsKLQkqKQotCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0JICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICBlbHNlCi0JICAgIGxkX3NobGlic19HQ0o9bm8KLQkgIGZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzX0dDSiIgPSBubzsgdGhlbgotICAgICAgcnVucGF0aF92YXI9Ci0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9Ci0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyopCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCi0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0JIyBicm9rZW4gY29sbGVjdDIuCi0JaGFyZGNvZGVfZGlyZWN0X0dDSj11bnN1cHBvcnRlZAotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhaXhbNC05XSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKLQkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gIAkgICAgYnJlYWsKLSAgCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0gIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICA6Ci0JICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj11bnN1cHBvcnRlZAotICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0gIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0gIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotICAJICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0Jc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLQlmaQotICAgICAgZWxzZQotCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQkgIHNoYXJlZF9mbGFnPSctRycKLQllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICBmaQotCWZpCi0gICAgICBmaQotCi0gICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVybm90b2snCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPSckY29udmVuaWVuY2UnCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgYnNkaVs0NV0qKQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0tcmR5bmFtaWMKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nICcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSj0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgZml4X3NyY2ZpbGVfcGF0aF9HQ0o9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfY21kc19HQ0o9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzX0dDSj0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIGZyZWVic2QxKikKLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKLSAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKLSAgICAjIGV4dHJhIHNwYWNlKS4KLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0KLQloYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0KLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCWhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0nK2IgJGxpYmRpcicKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JICA7OwotCSopCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCWhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCi0JICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfR0NKPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCi0KLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nIC16IHRleHQnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgcmVsb2FkX2NtZHNfR0NKPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCWxkX3NobGlic19HQ0o9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teixub2RlZnMnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfR0NKIiA+JjYKLXRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19HQ0ogaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNgotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSgotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfR0NKIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgPiY2Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeFs0LTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgotaGFyZGNvZGVfYWN0aW9uX0dDSj0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0dDSiIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfR0NKIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfR0NKIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBHQ0opIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9HQ0oiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fR0NKPXVuc3VwcG9ydGVkCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9HQ0oiID4mNgotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0dDSiIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX0dDSiBcCi0gICAgQ0NfR0NKIFwKLSAgICBMRF9HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKIFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0ogXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSiBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19HQ0ogXAotICAgIHByZWRlcF9vYmplY3RzX0dDSiBcCi0gICAgcG9zdGRlcF9vYmplY3RzX0dDSiBcCi0gICAgcHJlZGVwc19HQ0ogXAotICAgIHBvc3RkZXBzX0dDSiBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0dDSiBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0dDSiBcCi0gICAgYXJjaGl2ZV9jbWRzX0dDSiBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0ogXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfR0NKIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfR0NKIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0ogXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSiBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKIFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSiBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX0dDSiBcCi0gICAgbW9kdWxlX2NtZHNfR0NKIFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0ogXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKIFwKLSAgICBleGNsdWRlX2V4cHN5bXNfR0NKIFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfR0NKOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19HQ0ogfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19HQ0ogfCBcCi0gICAgYXJjaGl2ZV9jbWRzX0dDSiB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiB8IFwKLSAgICBtb2R1bGVfY21kc19HQ0ogfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSiB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0ogfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0ogfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSgotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0oKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfR0NKCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfR0NKCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0dDSgotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfR0NKCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSgotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSgotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfR0NKCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19HQ0oKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfR0NKCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0dDSgotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfR0NKCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19HQ0oKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0dDSgotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQKLSMgbGlicmFyeQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfR0NKCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0dDSgotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0dDSgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfR0NKCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0dDSgotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19HQ0oKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19HQ0oKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0KLQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X1JDPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCi0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7UkMtIndpbmRyZXMifQotY29tcGlsZXI9JENDCi1jb21waWxlcl9SQz0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDPXllcwotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfUkMgXAotICAgIENDX1JDIFwKLSAgICBMRF9SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfUkMgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX1JDIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIFwKLSAgICBwcmVkZXBfb2JqZWN0c19SQyBcCi0gICAgcG9zdGRlcF9vYmplY3RzX1JDIFwKLSAgICBwcmVkZXBzX1JDIFwKLSAgICBwb3N0ZGVwc19SQyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX1JDIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfUkMgXAotICAgIGFyY2hpdmVfY21kc19SQyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyBcCi0gICAgcG9zdGluc3RhbGxfY21kc19SQyBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX1JDIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMgXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX1JDIFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDIFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfUkMgXAotICAgIG1vZHVsZV9jbWRzX1JDIFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX1JDIFwKLSAgICBleGNsdWRlX2V4cHN5bXNfUkMgXAotICAgIGluY2x1ZGVfZXhwc3ltc19SQzsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyB8IFwKLSAgICBhcmNoaXZlX2NtZHNfUkMgfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyB8IFwKLSAgICBtb2R1bGVfY21kc19SQyB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19SQyB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfUkMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfUkMKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19SQwotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9SQwotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfUkMKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX1JDCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfUkMKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX1JDCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX1JDCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX1JDCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19SQwotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfUkMKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfUkMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfUkMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfUkMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX1JDCi0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19SQwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9SQwotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX1JDCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9SQwotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfUkMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9SQwotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X1JDCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX1JDCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX1JDCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfUkMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfUkMKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX1JDCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfUkMKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX1JDCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfUkMKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0JOzsKLQotICAgICAgKikKLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCi0gICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KLSAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgotICAgIGNobW9kICt4ICIkb2ZpbGUiCi0gIGVsc2UKLSAgICBybSAtZiAiJHtvZmlsZX1UIgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLWZpCi0KLQotCi0jIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCi1MSUJUT09MX0RFUFM9IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLQotIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotCi0jIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAotIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCi0jIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKLSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCi0jIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKLSMgSVJJWCAvc2Jpbi9pbnN0YWxsCi0jIEFJWCAvYmluL2luc3RhbGwKLSMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcwotIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncwotIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgotIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCi0jIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KLWNhc2UgJGFzX2Rpci8gaW4KLSAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKLSAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCi0gID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAotICAvdXNyL3VjYi8qICkgOzsKLSAgKikKLSAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgotICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAotICAgICMgYnkgZGVmYXVsdC4KLSAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCi0gICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLQlpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgotCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKLQkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0JICAgIDoKLQkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKLQkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KLQkgICAgOgotCSAgZWxzZQotCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgIGJyZWFrIDMKLQkgIGZpCi0JZmkKLSAgICAgIGRvbmUKLSAgICBkb25lCi0gICAgOzsKLWVzYWMKLWRvbmUKLQotCi1maQotICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAotICBlbHNlCi0gICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgV2UgZG9uJ3QgY2FjaGUgYQotICAgICMgcGF0aCBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KLSAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCi0gIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElOU1RBTEwiID4mNQotZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNgotCi0jIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCi0jIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgotdGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JwotCi10ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JwotCi10ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1MTl9TPSRhc19sbl9zCi1pZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQotZWNobyAiJHtFQ0hPX1R9bm8sIHVzaW5nICRMTl9TIiA+JjYKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjYKLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKLWFsbDoKLQlAZWNobyAnYWNfbWFrZXRlbXA9IiQoTUFLRSkiJwotX0FDRU9GCi0jIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KLWV2YWwgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKLWlmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KLSAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCi1lbHNlCi0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCi1maQotcm0gLWYgY29uZnRlc3QubWFrZQotZmkKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBTRVRfTUFLRT0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQotICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKLSAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJwotICAgIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0KLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcHM7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfUFNQUk9HK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJFBTUFJPRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QU1BST0c9IiRQU1BST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfUFNQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1QU1BST0c9JGFjX2N2X3BhdGhfUFNQUk9HCi0KLWlmIHRlc3QgLW4gIiRQU1BST0ciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRQU1BST0ciID4mNQotZWNobyAiJHtFQ0hPX1R9JFBTUFJPRyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QRVJMUFJPRytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRQRVJMUFJPRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QRVJMUFJPRz0iJFBFUkxQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1BFUkxQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1QRVJMUFJPRz0kYWNfY3ZfcGF0aF9QRVJMUFJPRwotCi1pZiB0ZXN0IC1uICIkUEVSTFBST0ciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRQRVJMUFJPRyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUEVSTFBST0ciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB5dGhvbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcHl0aG9uOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX1BZVEhPTlBST0crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkUFlUSE9OUFJPRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QWVRIT05QUk9HPSIkUFlUSE9OUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QWVRIT05QUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1QWVRIT05QUk9HPSRhY19jdl9wYXRoX1BZVEhPTlBST0cKLQotaWYgdGVzdCAtbiAiJFBZVEhPTlBST0ciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRQWVRIT05QUk9HIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRQWVRIT05QUk9HIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZm9yIGFjX3Byb2cgaW4gd2hvYW1pIGxvZ25hbWUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1dIT0FNSStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkV0hPQU1JIjsgdGhlbgotICBhY19jdl9wcm9nX1dIT0FNST0iJFdIT0FNSSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfV0hPQU1JPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVdIT0FNST0kYWNfY3ZfcHJvZ19XSE9BTUkKLWlmIHRlc3QgLW4gIiRXSE9BTUkiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRXSE9BTUkiID4mNQotZWNobyAiJHtFQ0hPX1R9JFdIT0FNSSIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJFdIT0FNSSIgJiYgYnJlYWsKLWRvbmUKLXRlc3QgLW4gIiRXSE9BTUkiIHx8IFdIT0FNST0id2hvYW1pIgotCi1mb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZAotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU0VEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTRUQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU0VEPSIkU0VEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TRUQ9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotU0VEPSRhY19jdl9wcm9nX1NFRAotaWYgdGVzdCAtbiAiJFNFRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNFRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kU0VEIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkU0VEIiAmJiBicmVhawotZG9uZQotCi1mb3IgYWNfcHJvZyBpbiBmaW5kCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19GSU5EK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRGSU5EIjsgdGhlbgotICBhY19jdl9wcm9nX0ZJTkQ9IiRGSU5EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19GSU5EPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUZJTkQ9JGFjX2N2X3Byb2dfRklORAotaWYgdGVzdCAtbiAiJEZJTkQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGSU5EIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRGSU5EIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkRklORCIgJiYgYnJlYWsKLWRvbmUKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhdXRvY29uZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXV0b2NvbmY7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfQVVUT0NPTkYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkQVVUT0NPTkYgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQVVUT0NPTkY9IiRBVVRPQ09ORiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9BVVRPQ09ORj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotQVVUT0NPTkY9JGFjX2N2X3BhdGhfQVVUT0NPTkYKLQotaWYgdGVzdCAtbiAiJEFVVE9DT05GIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVVUT0NPTkYiID4mNQotZWNobyAiJHtFQ0hPX1R9JEFVVE9DT05GIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhdXRvaGVhZGVyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhdXRvaGVhZGVyOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX0FVVE9IRUFERVIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkQVVUT0hFQURFUiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9BVVRPSEVBREVSPSIkQVVUT0hFQURFUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9BVVRPSEVBREVSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1BVVRPSEVBREVSPSRhY19jdl9wYXRoX0FVVE9IRUFERVIKLQotaWYgdGVzdCAtbiAiJEFVVE9IRUFERVIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBVVRPSEVBREVSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBVVRPSEVBREVSIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9DT05GIiA9ICJ4IjsgdGhlbgotCUFVVE9DT05GPSI6IgotCi1maQotaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9IRUFERVIiID0gIngiOyB0aGVuCi0JQVVUT0hFQURFUj0iOiIKLQotZmkKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ1bmFtZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgdW5hbWU7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfVU5BTUVQUk9HK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJFVOQU1FUFJPRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9VTkFNRVBST0c9IiRVTkFNRVBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfVU5BTUVQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1VTkFNRVBST0c9JGFjX2N2X3BhdGhfVU5BTUVQUk9HCi0KLWlmIHRlc3QgLW4gIiRVTkFNRVBST0ciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVTkFNRVBST0ciID4mNQotZWNobyAiJHtFQ0hPX1R9JFVOQU1FUFJPRyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgVU5BTUVQUk9HICIkVU5BTUVQUk9HIgotX0FDRU9GCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19jb25zdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0vKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCi0gIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07Ci0gIGNvbnN0IGNoYXJzZXQgeDsKLSAgLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgY2hhciBjb25zdCAqY29uc3QgKmNjcDsKLSAgY2hhciAqKnA7Ci0gIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCi0gIHN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKLSAgc3RhdGljIHN0cnVjdCBwb2ludCBjb25zdCB6ZXJvID0gezAsMH07Ci0gIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KLSAgICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4KLSAgICAgYW4gYXJtIG9mIGFuIGlmLWV4cHJlc3Npb24gd2hvc2UgaWYtcGFydCBpcyBub3QgYSBjb25zdGFudAotICAgICBleHByZXNzaW9uICovCi0gIGNvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKLSAgY2NwID0gJmcgKyAoZyA/IGctZyA6IDApOwotICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLwotICArK2NjcDsKLSAgcCA9IChjaGFyKiopIGNjcDsKLSAgY2NwID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHA7Ci0gIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCi0gICAgY2hhciAqdDsKLSAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOwotCi0gICAgKnQrKyA9IDA7Ci0gIH0KLSAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KLSAgICBpbnQgeFtdID0gezI1LCAxN307Ci0gICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKLSAgICArK2ZvbzsKLSAgfQotICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KLSAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKLSAgICBpcHRyIHAgPSAwOwotICAgICsrcDsKLSAgfQotICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKLSAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCi0gICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKLSAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7Ci0gIH0KLSAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KLSAgICBjb25zdCBpbnQgZm9vID0gMTA7Ci0gIH0KLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfY19jb25zdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfY19jb25zdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb25zdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgY29uc3QKLV9BQ0VPRgotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2NfaW5saW5lPW5vCi1mb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZiBpbnQgZm9vX3Q7Ci1zdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9Ci0kYWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQotI2VuZGlmCi0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9jX2lubGluZT0kYWNfa3c7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW5saW5lIiA+JjYKLQotCi1jYXNlICRhY19jdl9jX2lubGluZSBpbgotICBpbmxpbmUgfCB5ZXMpIDs7Ci0gICopCi0gICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KLSAgICAgIG5vKSBhY192YWw9OzsKLSAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OwotICAgIGVzYWMKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIGlubGluZSAkYWNfdmFsCi0jZW5kaWYKLV9BQ0VPRgotICAgIDs7Ci1lc2FjCi0KLQotCi0jIGdldCB2ZXJzaW9uIG51bWJlci4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmV0LXNubXAgdmVyc2lvbiBudW1iZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmV0LXNubXAgdmVyc2lvbiBudW1iZXIuLi4gJEVDSE9fQyIgPiY2Ci1WRVJTSU9OPSRQQUNLQUdFX1ZFUlNJT04KLQotIyBjcmVhdGUgdGhlIHJlbGVhc2UgdmVyc2lvbiBudW1iZXIuLi4uICBJJ20gbm90IHN1cmUgdGhpcyBpcyB1c2VkCi0jIGFueXdoZXJlIGFueSBsb25nZXIuCi1fcmVsZWFzZV92ZXJzaW9uPWBlY2hvICRWRVJTSU9OIHwgc2VkICdzLyI7LiovLztzLy4qIi8vO3MvcHJlLzAuLzsnYAotCi1SRUxFQVNFVkVSU0lPTj1gZWNobyAkX3JlbGVhc2VfdmVyc2lvbiB8IHNlZCAncy9eXChbMC05XVwpXC5cKFswLTldXCkvXDE6XDI6MC8nYAotCi0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVkVSU0lPTiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kVkVSU0lPTiIgPiY2Ci0KLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICBOZXQtU05NUCBWZXJzaW9uOiAgICAgICAgICAgJFZFUlNJT04KLUVPRgotCi0KLSMgc3VwZXIgdHlwZSBjaGVja2luZwotIyBXV1dYWFgKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGV2ZWxvcGVyIGdjYyBmbGFncyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGV2ZWxvcGVyIGdjYyBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGV2ZWxvcGVyIGdjYyBmbGFncy4uLiAiID4mNjsgfQogaWYgdGVzdCAieCRkZXZlbG9wZXIiID0gInh5ZXMiIC1hICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KLSAgREVWRkxBR1M9Ii1XYWxsIC1XaW5saW5lIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVd3cml0ZS1zdHJpbmdzIC1XY2FzdC1xdWFsIC1Xbm8tY2hhci1zdWJzY3JpcHRzIgorCisgICAgIyAgICAgICBXV1dYWFggLSBzdHJpY3QgdHlwZSBjaGVja2luZworICAgICMKKyAgICBERVZGTEFHUz0iLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwiCiBlbHNlCi0gIERFVkZMQUdTPSIiCisgICAgREVWRkxBR1M9IiIKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkREVWRkxBR1MiID4mNQotZWNobyAiJHtFQ0hPX1R9JERFVkZMQUdTIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkREVWRkxBR1MiID4mNQorJGFzX2VjaG8gIiRERVZGTEFHUyIgPiY2OyB9CiAKIAorCisjICAgYnVpbGRpbmcgb3V0c2lkZSBzb3VyY2UgZGlyZWN0b3J5CiAjCi0jIGhhY2tzIGZvciBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5Ci0jCi0jIDEpIG1ha2Ugc3VyZSBidWlsZCBpbmNsdWRlIHBhdGhzIGFyZSBiZWZvcmUgc291cmNlCi0jIDIpIGNoZWNrIGZvciBHTlUgbWFrZSB0byB1c2UgdnBhdGggaW5zdGVhZCBvZiBWUEFUSAorIyAgICAgICBhKSBlbnN1cmUgYnVpbGQgaW5jbHVkZSBwYXRocyBhcmUgYmVmb3JlIHNvdXJjZQorIyAgICAgICBiKSBlbnN1cmUgR05VIG1ha2UgdXNlcyAndnBhdGgnIGluc3RlYWQgb2YgJ1ZQQVRIJwogIwogTk9OX0dOVV9WUEFUSD0iVlBBVEggPSIKIEdOVV92cGF0aD0iI3ZwYXRoIgorCisjICAgICAgIGRlZmluZSBpbmNsdWRlIHBhdGhzIHJlbGF0aXZlIHRvIHRvcF9zcmNkaXIKKyMgICAgICAgdHdlYWsgaW5jbHVkZXMgaWYgd2UncmUgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcgogIwotIyBkZWZpbmUgaW5jbHVkZSBwYXRocyByZWxhdGl2ZSB0byB0b3Bfc3JjZGlyCi0jIHR3ZWFrIGluY2x1ZGVzIGlmIHdlJ3JlIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXIKIGlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiI7IHRoZW4KLVRPUF9JTkNMVURFUz1TUkNfVE9QX0lOQ0xVREVTCi1TTk1QTElCX0lOQ0xVREVTPVNSQ19TTk1QTElCX0lOQ0xVREVTCi1BR0VOVF9JTkNMVURFUz1TUkNfQUdFTlRfSU5DTFVERVMKLUhFTFBFUl9JTkNMVURFUz1TUkNfSEVMUEVSX0lOQ0xVREVTCi1NSUJHUk9VUF9JTkNMVURFUz1TUkNfTUlCR1JPVVBfSU5DTFVERVMKKyAgICBUT1BfSU5DTFVERVM9U1JDX1RPUF9JTkNMVURFUworICAgIFNOTVBMSUJfSU5DTFVERVM9U1JDX1NOTVBMSUJfSU5DTFVERVMKKyAgICBBR0VOVF9JTkNMVURFUz1TUkNfQUdFTlRfSU5DTFVERVMKKyAgICBIRUxQRVJfSU5DTFVERVM9U1JDX0hFTFBFUl9JTkNMVURFUworICAgIE1JQkdST1VQX0lOQ0xVREVTPVNSQ19NSUJHUk9VUF9JTkNMVURFUwogZWxzZQotVE9QX0lOQ0xVREVTPUJMRF9UT1BfSU5DTFVERVMKLVNOTVBMSUJfSU5DTFVERVM9QkxEX1NOTVBMSUJfSU5DTFVERVMKLUFHRU5UX0lOQ0xVREVTPUJMRF9BR0VOVF9JTkNMVURFUwotSEVMUEVSX0lOQ0xVREVTPUJMRF9IRUxQRVJfSU5DTFVERVMKLU1JQkdST1VQX0lOQ0xVREVTPUJMRF9NSUJHUk9VUF9JTkNMVURFUwotbWFrZSAtdiAtZiAvZGV2L251bGwgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsCi1oYXZlX2dudV9tYWtlPSQ/Ci1pZiB0ZXN0ICRoYXZlX2dudV9tYWtlIC1lcSAwIDsgdGhlbgotICAgIE5PTl9HTlVfVlBBVEg9IiNWUEFUSCA9IgotICAgIEdOVV92cGF0aD0idnBhdGgiCi1maQorICAgIFRPUF9JTkNMVURFUz1CTERfVE9QX0lOQ0xVREVTCisgICAgU05NUExJQl9JTkNMVURFUz1CTERfU05NUExJQl9JTkNMVURFUworICAgIEFHRU5UX0lOQ0xVREVTPUJMRF9BR0VOVF9JTkNMVURFUworICAgIEhFTFBFUl9JTkNMVURFUz1CTERfSEVMUEVSX0lOQ0xVREVTCisgICAgTUlCR1JPVVBfSU5DTFVERVM9QkxEX01JQkdST1VQX0lOQ0xVREVTCisgICAgaWYgdGVzdCAkaGF2ZV9nbnVfbWFrZSAtZXEgMCA7IHRoZW4KKyAgICAgICAgTk9OX0dOVV9WUEFUSD0iI1ZQQVRIID0iCisgICAgICAgIEdOVV92cGF0aD0idnBhdGgiCisgICAgZmkKIGZpCiAKIApAQCAtMjE0NTYsNDAgKzE1Mjg4LDU1IEBACiAKIAogCi0jCi0jIENoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSAtVXggLUR4PXggd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyCi0jCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpLi4uICRFQ0hPX0MiID4mNgotT0xEX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi1DUFBGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLVsKLSNpZmRlZiAkUEFSVElBTFRBUkdFVE9TCi15ZXMKLSNlbmRpZgotXQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgUEFSVElBTFRBUkdFVEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCi0gZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisjIworIyAgIFN5c3RlbS1yZWxhdGVkIGNvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICAgICAgV2hhdCBzeXN0ZW0gYXJlIHdlIGJ1aWxkaW5nIGZvcgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3RhcmdldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIFBBUlRJQUxUQVJHRVRGTEFHUz0iLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCi0gZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBpZiB0ZXN0ICJ4JHRhcmdldF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X3RhcmdldD0kYWNfY3ZfaG9zdAorZWxzZQorICBhY19jdl90YXJnZXQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJHRhcmdldF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CiBmaQotcm0gLWYgY29uZnRlc3QqCiAKLUNGTEFHUz0iJENGTEFHUyAkUEFSVElBTFRBUkdFVEZMQUdTIgotQ1BQRkxBR1M9IiRPTERfQ1BQRkxBR1MiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl90YXJnZXQiID4mNjsgfQorY2FzZSAkYWNfY3ZfdGFyZ2V0IGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiICIkTElORU5PIiA1OzsKK2VzYWMKK3RhcmdldD0kYWNfY3ZfdGFyZ2V0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfdGFyZ2V0CitzaGlmdAordGFyZ2V0X2NwdT0kMQordGFyZ2V0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK3RhcmdldF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkdGFyZ2V0X29zIGluICpcICopIHRhcmdldF9vcz1gZWNobyAiJHRhcmdldF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCit0ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgorICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisgICAgTk9ORU5PTkVzLHgseCwgJiYKKyAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQorCitQQVJUSUFMVEFSR0VUT1M9YGVjaG8gJHRhcmdldF9vcyB8IHNlZCAncy9bLS5fXS4qLy8nYAorCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBCdWlsZGluZyBmb3I6ICAgICAgICAgICAgICAgJFBBUlRJQUxUQVJHRVRPUwpAQCAtMjE0OTgsMjQgKzE1MzQ1LDEwOCBAQAogCiAKICMKLSMgY2hlY2sgZm9yIHNwZWNpYWwgaW5jbHVkZXMgYW5kIHBpY2sgb25lCisjICAgIFdoZXRoZXIgb3Igbm90IEN5Z3dpbidzIGxkIHJlY29nbml6ZXMgdGhlIGZsYWcgLW5vLXVuZGVmaW5lZC4KICMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGUuLi4gJEVDSE9fQyIgPiY2CitjYXNlIHgkdGFyZ2V0X29zIGluCit4Y3lnd2luKikKKyAgc2F2ZWRfTERGTEFHUz0kTERGTEFHUworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgbGlua2VyIHN1cHBvcnRzIC1uby11bmRlZmluZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgbGlua2VyIHN1cHBvcnRzIC1uby11bmRlZmluZWQuLi4gIiA+JjY7IH0KKyAgTERGTEFHUz0iJHNhdmVkX0xERkxBR1MgLVdsLC1uby11bmRlZmluZWQiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgICAgICAgICAgICAgICAgICAgTERfTk9fVU5ERUZJTkVEPS1uby11bmRlZmluZWQKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICBMREZMQUdTPSIkc2F2ZWRfTERGTEFHUyIKKyAgOzsKK2VzYWMKKworCisKKworIworIyAgIFNvY2tldCBsaWJyYXJ5OiBlaXRoZXIgJ2RlZmF1bHQnIChub24tTWluR1cpIG9yICd3aW5zb2NrMicgKE1pbkdXKS4KKyMKK2Nhc2UgeCR0YXJnZXRfb3MgaW4KKyAgeG1pbmd3KikKKyAgICB3aXRoX3NvY2tsaWI9d2luc29jazIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQ0ZMQUdTPSItRF9XSU4zMl9XSU5OVD0weDA1MDEgJENGTEFHUyIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgd2l0aF9zb2NrbGliPWRlZmF1bHQ7OworZXNhYworCisKKyMgICBDaGVjayBzeXN0ZW0gZGVmaW5lIGJlaGF2aW91cgorIyAgICAgICBEb2VzICItVXggLUR4PXgiIHdvcmsgYXMgZXhwZWN0ZWQ/CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZykuLi4gIiA+JjY7IH0KK09MRF9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworWworI2lmZGVmICRQQVJUSUFMVEFSR0VUT1MKK3llcworI2VuZGlmCisgICAgXQorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgIFBBUlRJQUxUQVJHRVRGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgICAgUEFSVElBTFRBUkdFVEZMQUdTPSItRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb25mdGVzdCoKKworQ0ZMQUdTPSIkQ0ZMQUdTICRQQVJUSUFMVEFSR0VURkxBR1MiCitDUFBGTEFHUz0iJE9MRF9DUFBGTEFHUyIKKworCisjICAgICAgIERldGVybWluZSBhcHByb3ByaWF0ZSA8bmV0LXNubXAvc3lzdGVtL3tvc30uaD4gaW5jbHVkZQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZS4uLiAiID4mNjsgfQogCiBmaWxlYmFzZT0kdGFyZ2V0X29zCiAjIGlnbm9yZSBiaW5hcnkgZm9ybWF0IGluZGljYXRpb24KLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9lbGYvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvYW91dC8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9lY29mZi8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9jb2ZmLy8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9lbGYvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2FvdXQvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2Vjb2ZmLy8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9jb2ZmLy8nYAogd2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oCiBkbwogICAgIGxhc3Q9JGZpbGViYXNlCi0gICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1stLl9dW14tLl9dKiQvLydgCisgICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bLS5fXVteLS5fXSokLy8nYAogICAgIGlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KLQlmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWzAtOV0qJC8vJ2AKKwlmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1swLTldKiQvLydgCiAgICAgZmkKIGRvbmUKIApAQCAtMjE1MjQsMjQgKzE1NDU1LDI0IEBACiBmaQogYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFPSJuZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgiCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIiA+JjY7IH0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFICIkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIgogX0FDRU9GCiAKIAotIyBzZWNvbmQgcGFydCwgdGhlIENQVSB0eXBlLgogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZS4uLiAkRUNIT19DIiA+JjYKKyMgICAgICAgRGV0ZXJtaW5lIGFwcHJvcHJpYXRlIDxuZXQtc25tcC9tYWNoaW5lL3tjcHV9Lmg+IGluY2x1ZGUKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGUuLi4gIiA+JjY7IH0KIAogZmlsZWJhc2U9JHRhcmdldF9jcHUKIHdoaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgKIGRvCiAgICAgbGFzdD0kZmlsZWJhc2UKLSAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKKyAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1stLl9dW14tLl9dKiQvLydgCiBkb25lCiAKIGlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KQEAgLTIxNTQ5LDIwICsxNTQ4MCw1OSBAQAogZmkKIGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgiCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIiA+JjYKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIgPiY2OyB9CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUgIiRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIgogX0FDRU9GCiAKIAorCisjIworIyAgIFBsYXRmb3JtLXNwZWNpZmljIGNvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICBQcmVwcm9jZXNzb3IgY2hlY2tzOgorIworCisjICAgICAgIE1vcmUgc2Vuc2libGUgc3lzdGVtIGlkZW50aWZpZXIgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1EbWluZ3czMiIKK2ZpCisKKyMgICAgICAgSGFuZGxlIC5pbiBmaWxlIGV4dGVuc2lvbiAgICAgICAgICAgICAgICAgICAgICAgKEdDQykKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhZGRpdGlvbmFsIGNwcCBmbGFncy4uLiAiID4mNjsgfQoraWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JENQUCIgPSAieCRDQyAtRSI7IHRoZW4KKyAgICBFWFRSQUNQUEZMQUdTPSIteCBjIgorZWxzZQorICAgIEVYVFJBQ1BQRkxBR1M9IiIKK2ZpCisKKyMgICAgICAgU29sYXJpcyBleHRyYSBDUFAgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCitpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCisgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgICAgIHNvbGFyaXMqKSBFWFRSQUNQUEZMQUdTPSIkRVhUUkFDUFBGTEFHUyAtWHMiIDs7CisgICAgZXNhYworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVYVFJBQ1BQRkxBR1MiID4mNQorJGFzX2VjaG8gIiRFWFRSQUNQUEZMQUdTIiA+JjY7IH0KKworCisjICAgQ29tcGlsZXIgY2hlY2tzOgorIworCiAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRDQyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJENDOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX0NDUEFUSCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQ0NQQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkQ0NQQVRIIGluCiAgIFtcXC9dKiB8ID86W1xcL10qKQpAQCAtMjE1NzQsOTkgKzE1NTQ0LDY2IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcGF0aF9DQ1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiAgIDs7CiBlc2FjCiBmaQogQ0NQQVRIPSRhY19jdl9wYXRoX0NDUEFUSAotCiBpZiB0ZXN0IC1uICIkQ0NQQVRIIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0NQQVRIIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQ1BBVEgiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDUEFUSCIgPiY1CiskYXNfZWNobyAiJENDUEFUSCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0jIHdhdGNoIG91dCBmb3IgL3Vzci91Y2IvY2Mgb24gc29sYXJpcywgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgorCiBjYXNlICR0YXJnZXRfb3MgaW4KICAgICBic2RpKikKKyAgICAgICAgIyAgIENoZWNrIGZvciBidW5kbGVkIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgKEJTRGkpCisgICAgICAgICMKIAlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIiAtbyAieCRDQ1BBVEgiID0gIngvdXNyL2Jpbi9jYyI7IHRoZW4KLQkgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjoKKwkgICAgYXNfZm5fZXJyb3IgJD8gIgogCiAqKiogVGhlIEJTREkgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KICoqKiBQbGVhc2UgcnVuIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1nY2MKLSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOgotCi0qKiogVGhlIEJTREkgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KLSoqKiBQbGVhc2UgcnVuIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1nY2MKLSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIiAiJExJTkVOTyIgNQogCWZpCiAgICAgOzsKICAgICBzb2xhcmlzKikKKyAgICAgICAgIyAgIENoZWNrIGZvciBidW5kbGVkIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisgICAgICAgICMKIAlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIjsgdGhlbgotCSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOgorCSAgICBhc19mbl9lcnJvciAkPyAiCiAKICoqKiBUaGUgc29sYXJpcyAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgogKioqIFBsZWFzZSBwdXQgYSBkaWZmZXJlbnQgY29tcGlsZXIgaW4geW91ciBwYXRoIGZpcnN0IG9yIHJ1bgogKioqIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1YWCwgd2hlcmUgWFggaXMgdGhlIGNvbXBpbGVyIHlvdSB3YW50IHRvIHVzZS4KLSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOgotCi0qKiogVGhlIHNvbGFyaXMgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KLSoqKiBQbGVhc2UgcHV0IGEgZGlmZmVyZW50IGNvbXBpbGVyIGluIHlvdXIgcGF0aCBmaXJzdCBvciBydW4KLSoqKiBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9WFgsIHdoZXJlIFhYIGlzIHRoZSBjb21waWxlciB5b3Ugd2FudCB0byB1c2UuCi0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyIgIiRMSU5FTk8iIDUKIAlmaQogICAgIDs7CiBlc2FjCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3MuLi4gJEVDSE9fQyIgPiY2Ci0jIGdjYyBleHRyYSBDUFBGTEFHUwotaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JENQUCIgPSAieCRDQyAtRSI7IHRoZW4KLSAgIyBleHRyYSBjcHAgZmxhZ3MgZm9yIGdudSBjIGNvbXBpbGVyIHRvIGFsbG93IC5pbiBmaWxlIGV4dGVuc2lvbnMuCi0gIEVYVFJBQ1BQRkxBR1M9Ii14IGMiCi1lbHNlCi0gIEVYVFJBQ1BQRkxBR1M9IiIKLWZpCi0KLSMgU29sYXJpcyBleHRyYSBjcHAgZmxhZ3MuCi1pZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCi0gIGNhc2UgJHRhcmdldF9vcyBpbgotICAgIHNvbGFyaXMqKSBFWFRSQUNQUEZMQUdTPSIkRVhUUkFDUFBGTEFHUyAtWHMiIDs7Ci0gIGVzYWMKLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEVYVFJBQ1BQRkxBR1MiID4mNQotZWNobyAiJHtFQ0hPX1R9JEVYVFJBQ1BQRkxBR1MiID4mNgogCiAjICAgQ29tcGlsZXIgZmxhZ3M6CiAjCiAKICMgVGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGlzIG5vdCBzdHJpY3QtYWxpYXNpbmcgc2FmZSwgc28gYWRkCiAjIC1mbm8tc3RyaWN0LWFsaWFzaW5nIHRvICRDRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmcuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nLi4uICIgPiY2OyB9CiBuZXRzbm1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgogQ0ZMQUdTPSItZm5vLXN0cmljdC1hbGlhc2luZyAkQ0ZMQUdTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMjE2NzcsNzggKzE1NjE0LDE5NyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgIENGTEFHUz0iJG5ldHNubXBfc2F2ZV9DRkxBR1MiCiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAotIyBQcmVmaXhlcyBtdXN0IGJlZ2luIHdpdGggIi8iIG9yIFtBLVpdIGZvbGxvd2VkIGJ5IGNvbG9uLgogCisjICAgTGlua2VyIGNoZWNrczoKKyMKKworY2FzZSAkdGFyZ2V0X29zIGluCisgICAgYWl4NC4yKnxhaXg0LjMqfGFpeDUqfGFpeDYqfGFpeDcqKQorICAgICAgICAjICAgUnVudGltZSBsaW5raW5nIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAoQUlYKQorICAgICAgICAjCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWC4uLiAiID4mNjsgfQorICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgICAgbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2s9eWVzCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgdGVzdCAiWCRuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vayIgIT0gIlh5ZXMiOyB0aGVuCisJICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgorCSAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLVdsLC1icnRsIgorCSAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLWJydGwiCisJICAgIGZpCisgICAgICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9haXhfbGRmbGFncyAkTERGTEFHUyIKKwkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2FpeF9sZGZsYWdzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9haXhfbGRmbGFncyIgPiY2OyB9CisJZWxzZQorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CisJZmkKKwk7OworCisgICAgZGFyd2luOCp8ZGFyd2luOSp8ZGFyd2luMTAqfGRhcndpbjExKnxkYXJ3aW4xMip8ZGFyd2luMTMqKQorICAgICAgICAjICAgRmxhdCBOYW1lc3BhY2UgbGlua2luZyAgICAgICAgICAgICAgICAgICAgICAoTWFjIE9TL1gpCisgICAgICAgICMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZS4uLiAiID4mNjsgfQorCWlmIHRlc3QgLXogIiRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiOyB0aGVuCisJCUxERkxBR1M9Ii1mbGF0X25hbWVzcGFjZSAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZVNlcnZpY2VzIC1mcmFtZXdvcmsgRGlza0FyYml0cmF0aW9uIC1mcmFtZXdvcmsgSU9LaXQgJExERkxBR1MiCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwlmaQorCTs7CisKKyAgICAqKQorICAgICAgICA7OworZXNhYworCisKKyMgICAgICAgZHBrZyBwYWNrYWdlIChzd2ludHN0X2FwdCkKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkcGtnLXF1ZXJ5Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkcGtnLXF1ZXJ5OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EUEtHX1FVRVJZX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREUEtHX1FVRVJZX1BBVEggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFBLR19RVUVSWV9QQVRIPSIkRFBLR19RVUVSWV9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EUEtHX1FVRVJZX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEUEtHX1FVRVJZX1BBVEg9JGFjX2N2X3BhdGhfRFBLR19RVUVSWV9QQVRICitpZiB0ZXN0IC1uICIkRFBLR19RVUVSWV9QQVRIIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERQS0dfUVVFUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJERQS0dfUVVFUllfUEFUSCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IHgkRFBLR19RVUVSWV9QQVRIICE9IHg7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9EUEtHX1FVRVJZIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMjCisjICAgTm9uLXByb2dyYW0vY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgICAgICBTdWJzdGl0dXRlIHZlcnNpb24gbnVtYmVyLgorIworVkVSU0lPTj0kUEFDS0FHRV9WRVJTSU9OCisKKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIE5ldC1TTk1QIFZlcnNpb246ICAgICAgICAgICAkUEFDS0FHRV9WRVJTSU9OCitFT0YKKworCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENvbmZpZ3VyZSBwYXRocworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgUHJlZml4IHBhdGhzOgorIyMKKworIyAgIE1haW4gcHJlZml4CisjCiBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCiAgIHByZWZpeD0vdXNyL2xvY2FsCiBmaQogCi1mY2g9YGVjaG8gJHByZWZpeCB8IHNlZCAncy9cKC5cKS4qL1wxLydgCi1pZiB0ZXN0ICJ4JGZjaCIgIT0gIngvIiA7IHRoZW4KLSAgIHNjaD1gZWNobyAkcHJlZml4IHwgc2VkICdzLy5cKC5cKS4qL1wxLydgCi0gICBpZiB0ZXN0ICJ4JHNjaCIgIT0gIng6IiA7IHRoZW4KKyMgICAgICAgUHJlZml4IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aAorIyAgICAgICAgICAgaS5lLiBiZWdpbiB3aXRoICIvIiAgICAgICAgICAgICAgICAgICAgICAgICAoVW5peCkKKyMgICAgICAgICAgICAgICAgb3IgIltBLVpdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdpbmRvd3MpCisjCitmaXJzdGNoYXI9YGVjaG8gJHByZWZpeCB8ICRTRUQgJ3MvXCguXCkuKi9cMS8nYAoraWYgdGVzdCAieCRmaXJzdGNoYXIiICE9ICJ4LyIgOyB0aGVuCisgICBzZWNvbmRjaGFyPWBlY2hvICRwcmVmaXggfCAkU0VEICdzLy5cKC5cKS4qL1wxLydgCisgICBpZiB0ZXN0ICJ4JHNlY29uZGNoYXIiICE9ICJ4OiIgOyB0aGVuCiAgICAgICBwcmVmaXg9YHB3ZGAvJHByZWZpeAogICAgICAgZWNobyAiYWRqdXN0aW5nIHByZWZpeCB0byAkcHJlZml4IgogICAgZmkKIGZpCiAKLWlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICBleGVjX3ByZWZpeD0kcHJlZml4Ci1maQogCi1mY2g9YGVjaG8gJGV4ZWNfcHJlZml4IHwgc2VkICdzL1woLlwpLiovXDEvJ2AKLWlmIHRlc3QgIngkZmNoIiAhPSAieC8iIDsgdGhlbgotICAgc2NoPWBlY2hvICRleGVjX3ByZWZpeCB8IHNlZCAncy8uXCguXCkuKi9cMS8nYAotICAgaWYgdGVzdCAieCRzY2giICE9ICJ4OiIgOyB0aGVuCi0gICAgICBleGVjX3ByZWZpeD1gcHdkYC8kZXhlY19wcmVmaXgKLSAgICAgIGVjaG8gImFkanVzdGluZyBleGVjX3ByZWZpeCB0byAkZXhlY19wcmVmaXgiCisjICAgRXhlYyBwcmVmaXgKKyMKKyMgICAgICAgUHJlZml4IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aAorIyAgICAgICAgICAgaS5lLiBiZWdpbiB3aXRoICIvIiAgICAgICAgICAgICAgICAgICAgICAgICAoVW5peCkKKyMgICAgICAgICAgICAgICAgb3IgIltBLVpdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdpbmRvd3MpCisjCitpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCitlbHNlCisgICBmaXJzdGNoYXI9YGVjaG8gJGV4ZWNfcHJlZml4IHwgJFNFRCAncy9cKC5cKS4qL1wxLydgCisgICBpZiB0ZXN0ICJ4JGZpcnN0Y2hhciIgIT0gIngvIiA7IHRoZW4KKyAgICAgIHNlY29uZGNoYXI9YGVjaG8gJGV4ZWNfcHJlZml4IHwgJFNFRCAncy8uXCguXCkuKi9cMS8nYAorICAgICAgaWYgdGVzdCAieCRzZWNvbmRjaGFyIiAhPSAieDoiIDsgdGhlbgorICAgICAgICAgZXhlY19wcmVmaXg9YHB3ZGAvJGV4ZWNfcHJlZml4CisgICAgICAgICBlY2hvICJhZGp1c3RpbmcgZXhlY19wcmVmaXggdG8gJGV4ZWNfcHJlZml4IgorICAgICAgZmkKICAgIGZpCiBmaQogCi0jIFNldCBTTk1QTElCUEFUSCAmIFNOTVBTSEFSRVBBVEgKIAorIyMKKyMgICBFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoKKyMjCisKKyMgICAgICAgU05NUExJQlBBVEgKKyMKIFNOTVBMSUJQQVRIPSIiCiB0bXBzZXQ9IiRsaWJkaXIvc25tcCIKIHdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QTElCUEFUSCI7IGRvCi0gIFNOTVBMSUJQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKKyAgICBTTk1QTElCUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKIGRvbmUKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU05NUExJQlBBVEggIiRTTk1QTElCUEFUSCIKQEAgLTIxNzYwLDExICsxNTgxNiwxMyBAQAogX0FDRU9GCiAKIAorIyAgICAgICBTTk1QU0hBUkVQQVRICisjCiBTTk1QU0hBUkVQQVRIPSIiCiB0bXBzZXQ9IiRkYXRhZGlyL3NubXAiCiB3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUFNIQVJFUEFUSCI7IGRvCi0gIFNOTVBTSEFSRVBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorICAgIFNOTVBTSEFSRVBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCiBkb25lCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNOTVBTSEFSRVBBVEggIiRTTk1QU0hBUkVQQVRIIgpAQCAtMjE3NzIsMjMgKzE1ODMwLDI5IEBACiAKIAogCisjICAgICAgIE1JQkRJUlMgICAoZGVmYXVsdCkKKyMKIGlmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiID0gIngiOyB0aGVuCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSJcJEhPTUUvLnNubXAvbWliczokU05NUFNIQVJFUEFUSC9taWJzIgotICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgfCAkU0VEICdzLzovOy9nJ2AKLSAgZmkKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSJcJEhPTUUvLnNubXAvbWliczokU05NUFNIQVJFUEFUSC9taWJzIgorICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgICAgICAgIworICAgICAgICAjICAgIFVTZSBXaW5kb3dzLXN0eWxlIHBhdGggc2VwYXJhdG9yCisgICAgICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiIHwgJFNFRCAncy86LzsvZydgCisgICAgZmkKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTICIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiCiBfQUNFT0YKIAogZmkKIAogCisjICAgICAgIFNOTVBDT05GUEFUSAorIwogU05NUENPTkZQQVRIPSIiCiB0bXBzZXQ9IiRzeXNjb25mZGlyL3NubXAiCiB3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUENPTkZQQVRIIjsgZG8KLSAgU05NUENPTkZQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKKyAgICBTTk1QQ09ORlBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCiBkb25lCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNOTVBDT05GUEFUSCAiJFNOTVBDT05GUEFUSCIKQEAgLTIxNzk2LDMwMzQgKzE1ODYwLDI0NDIgQEAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hvcnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2hvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisjICBDb3JlOgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKIGludAogbWFpbiAoKQogewotaWYgKChzaG9ydCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHNob3J0KSkKLSAgcmV0dXJuIDA7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3Nob3J0PXllcworaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9zaG9ydD1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaG9ydCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaG9ydCIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygc2hvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zaXplb2Zfc2hvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKyAgICAgICAgICAjICA8c3RkbGliLmg+LCA8c3RkYXJnLmg+LCAgIDxzdHJpbmcuaD4gICYgPGZsb2F0Lmg+CithY19oZWFkZXJfZGlyZW50PW5vCitmb3IgYWNfaGRyIGluIGRpcmVudC5oIHN5cy9uZGlyLmggc3lzL2Rpci5oIG5kaXIuaDsgZG8KKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyX2RpcmVudF8kYWNfaGRyIiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19hY19IZWFkZXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8JGFjX2hkcj4KKworaW50CittYWluICgpCit7CitpZiAoKERJUiAqKSAwKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkYXNfYWNfSGVhZGVyCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hkciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworYWNfaGVhZGVyX2RpcmVudD0kYWNfaGRyOyBicmVhaworZmkKKworZG9uZQorIyBUd28gdmVyc2lvbnMgb2Ygb3BlbmRpciBldCBhbC4gYXJlIGluIC1sZGlyIGFuZCAtbHggb24gU0NPIFhlbml4LgoraWYgdGVzdCAkYWNfaGVhZGVyX2RpcmVudCA9IGRpcmVudC5oOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG9wZW5kaXIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBvcGVuZGlyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGRpcjsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfb3BlbmRpcgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG9wZW5kaXIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBvcGVuZGlyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIHg7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfb3BlbmRpcj0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX29wZW5kaXIKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZmkKKyAgICAgICAgIyAgPGRpcmVudC5oPiwgPHN5cy9uZGlyLmg+LCA8c3lzL2Rpci5oPiAmIDxuZGlyLmg+CisjICBBcHBzOgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3lzX3dhaXRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2lmbmRlZiBXRVhJVFNUQVRVUworIyBkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdF92YWwpICgodW5zaWduZWQgaW50KSAoc3RhdF92YWwpID4+IDgpCisjZW5kaWYKKyNpZm5kZWYgV0lGRVhJVEVECisjIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKyAgaW50IHM7CisgIHdhaXQgKCZzKTsKKyAgcyA9IFdJRkVYSVRFRCAocykgPyBXRVhJVFNUQVRVUyAocykgOiAxOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisgICAgICAjICA8c3lzL3dhaXQuaD4KKworIyBhbGxvdyBmb3IgcXVpY2sgbW9kdWxlL2xpYnJhcnkvZXRjIHByb2Nlc3NpbmcgY2hlY2tzCitpZiB0ZXN0ICJ4JE5FVFNOTVBfUVVJQ0tfQ0hFQ0siID0gIngiIDsgdGhlbgorCisjIworIyAgIFN0YW5kLWFsb25lIGhlYWRlcnM6CisjIworIyAgQ29yZToKK2ZvciBhY19oZWFkZXIgaW4gZ2V0b3B0LmggICBwdGhyZWFkLmggIHJlZ2V4LmggICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaCAgIHN5c2xvZy5oICAgdW5pc3RkLmggICAgICAgICAgICAgICAgICAgICAgIHN0ZGludC5oICAgaW50dHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3BhcmFtLmggICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9zZWxlY3QuaCAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvc29ja2V0LmggICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3RpbWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy90aW1lYi5oICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdW4uaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgIExpYnJhcnkgYW5kIEFnZW50OgorZm9yIGFjX2hlYWRlciBpbiBubGlzdC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJubGlzdC5oIiAiYWNfY3ZfaGVhZGVyX25saXN0X2giICIKKyRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZm5kZWYgTElCQlNEX0RJU0FCTEVfREVQUkVDQVRFRAorI2RlZmluZSBMSUJCU0RfRElTQUJMRV9ERVBSRUNBVEVEIDEKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9ubGlzdF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkxJU1RfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgIExpYnJhcnk6Citmb3IgYWNfaGVhZGVyIGluIGZjbnRsLmggICAgaW8uaCAgICAgICBrc3RhdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMuaCAgIGxvY2FsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL2ZpbGUuaCAgICAgICBzeXMvaW9jdGwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9zb2NraW8uaCAgICAgc3lzL3N0YXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvc3lzdGVtY2ZnLmggIHN5cy9zeXN0ZW1pbmZvLmggICAgICAgICAgICAgICAgICAgICAgc3lzL3RpbWVzLmggICAgICBzeXMvdWlvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy91dHNuYW1lLmggICAgICAgICAgICAgICAgICAgICAgICBuZXRpcHgvaXB4LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICBBZ2VudDoKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaCAgICBlcnIuaCAgICAgIGZjbnRsLmggICAgZnN0YWIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwLmggICAgICBpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb2N0bHMuaCAgIGtzdGF0LmggICAga3ZtLmggICAgICBsaW1pdHMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbnRlbnQuaCAgIG10YWIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbG9jcy5oICAgICAgICAgICAgIHB3ZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbV9lcnIuaCAgICAgICAgICAgICBldC9jb21fZXJyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dG1weC5oICAgIHV0c25hbWUuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL2Rpc2tpby5oICBzeXMvZGtpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL2ZpbGUuaCAgICBzeXMvZmlsaW8uaCAgIHN5cy9maXhwb2ludC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL2ZzLmggICAgICBzeXMvaW9jdGwuaCAgIHN5cy9sb2FkYXZnLmggIHN5cy9tbnRlbnQuaCAgICAgICAgICAgICAgICAgICAgc3lzL21udHRhYi5oICBzeXMvcG9vbC5oICAgIHN5cy9wcm90b3N3LmggIHN5cy9wc3RhdC5oICAgICAgICAgICAgICAgICAgICAgc3lzL3NvY2tpby5oICBzeXMvc3RhdC5oICAgIHN5cy9zdGF0ZnMuaCAgIHN5cy9zdGF0dmZzLmggICAgICAgICAgICAgICAgICAgc3lzL3N0cmVhbS5oICBzeXMvc3lzZ2V0LmggIHN5cy9zeXNtcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3RjcGlwc3RhdHMuaCAgICAgICAgICAgIHN5cy91dHNuYW1lLmggIHN5cy92ZnMuaCAgICAgICAgICAgICAgICAgICAgICAgc3lzL3ZtLmggICAgICBzeXMvdm1tYWMuaCAgIHN5cy92bW1ldGVyLmggIHN5cy92bXBhcmFtLmggICAgICAgICAgICAgICAgICAgc3lzL3Ztc3lzdG0uaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gYXNtL3BhZ2UuaCBhc20vdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXQvbWliMi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eC9oZHJlZy5oIGxpbnV4L3Rhc2tzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS9wYXJhbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvdGNwX2ZzbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZnMvZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZtL3V2bV9leHRlcm4uaCB1dm0vdXZtX3BhcmFtLmggICAgICAgICAgICAgICAgICAgICAgIHZtL3ZtLmggdm0vdm1fZXh0ZXJuLmggdm0vdm1fcGFyYW0uaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgIEFwcHM6Citmb3IgYWNfaGVhZGVyIGluIGZjbnRsLmggICAgZ3JwLmggICAgICBwd2QuaCAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9jZGVmcy5oICAgc3lzL2lvY3RsLmggICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9zb2NrZXQuaCAgc3lzL3NvY2tpby5oICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy90aW1lLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICBOb3QtVXNlZDoKK2ZvciBhY19oZWFkZXIgaW4gc2VhcmNoLmggICBzZ3R0eS5oICAgIHh0aS5oICAgICAgICAgICAgICAgICAgICAgICAgc3lzL2RtYXAuaCBzeXMvcG9sbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3RpbWVvdXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS9wdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpL3BjaS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisjIFZhbGdyaW5kCitmb3IgYWNfaGVhZGVyIGluIHZhbGdyaW5kL3ZhbGdyaW5kLmggdmFsZ3JpbmQvbWVtY2hlY2suaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisjIE9wZW5TU0wKK2ZvciBhY19oZWFkZXIgaW4gb3BlbnNzbC9hZXMuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorICAgICAjICAoQ29yZSkKK2ZvciBhY19oZWFkZXIgaW4gb3BlbnNzbC9kaC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisgICAgICMgIChBcHBzKQorIyAgTm90LVVzZWQ6Citmb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvZGVzLmggIG9wZW5zc2wvaG1hYy5oICAgICAgICAgICAgICAgICAgIG9wZW5zc2wvZXZwLmggIHNlY3VyaXR5L2NyeXB0b2tpLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIFJQTSBzdWJkaXJlY3RvcnkgcGF0aCAgICAgICAgICAgICAgICAgICAoQWdlbnQpCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICBmb3IgYWNfaGVhZGVyIGluIHJwbS9ycG10cy5oICAgcnBtL3JwbWZpbGV1dGlsLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmaQorCisKKyMjCisjICAgUHJlLXJlcXVpc2l0ZSBvbiBvdGhlciBoZWFkZXJzOgorIyMKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9wYXJhbS5oPiAgKE1BWFBBVEhMRU4pICAgICAgICAgICAoT3BlbkJTRCAzLjQpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3N3YXAuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL3N3YXAuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3dhcF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc3dhcF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1NXQVBfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvcGFyYW0uaD4gICAgICAgICAgICAgICAgICAgICAgICAgKEZyZWVCU0QpCisjCisjICBDb3JlOiAgICAgICg/IFRlc3RlZCBhYm92ZT8gKQorZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyMKKyMgIExpYnJhcnk6Citmb3IgYWNfaGVhZGVyIGluIG1hbGxvYy5oICAgICAgICBuZXQvaWZfZGwuaCAgIHN5cy9zeXNjdGwuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyMKKyMgIEFnZW50OgorZm9yIGFjX2hlYWRlciBpbiBtYWxsb2MuaCAgICAgICAgb3NyZWxkYXRlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS90eXBlcy5oIG5ldC9pZl9kbC5oICAgbmV0L2lmX3R5cGVzLmggICAgICAgICAgICAgICAgICAgIHN5cy9ka3N0YXQuaCAgICBzeXMvY29uZi5oICAgIHN5cy9tYnVmLmggICAgICAgICAgICAgICAgICAgICAgICBzeXMvbW91bnQuaCAgICAgc3lzL3Byb2MuaCAgICBzeXMvcXVldWUuaCAgICAgICAgICAgICAgICAgICAgICAgc3lzL3N5c2N0bC5oICAgIHN5cy91c2VyLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvc2VtYS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgKElSSVggNi41KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHN5cy9zZW1hLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zZW1hLmgiICJhY19jdl9oZWFkZXJfc3lzX3NlbWFfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3NlbWFfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19TRU1BX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvaGFzaGluZy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvaGFzaGluZy5oIiAiYWNfY3ZfaGVhZGVyX3N5c19oYXNoaW5nX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU0VNQV9ICisjaW5jbHVkZSA8c3lzL3NlbWEuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfaGFzaGluZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX0hBU0hJTkdfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvc29ja2V0Lmg+ICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgOSkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBzeXMvc29ja2V0dmFyLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9zb2NrZXR2YXIuaCIgImFjX2N2X2hlYWRlcl9zeXNfc29ja2V0dmFyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3NvY2tldHZhcl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVFZBUl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgX0tNRU1VU0VSIGFuZCA8c3lzL3R5cGVzLmg+ICAgICAgICAgICAoQlNEaTMvSVJJWCkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBzeXMvdm5vZGUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL3Zub2RlLmgiICJhY19jdl9oZWFkZXJfc3lzX3Zub2RlX2giICIKKyNkZWZpbmUgX0tNRU1VU0VSIDEKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3Zub2RlX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfVk5PREVfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDxtYWNoaW5lL3R5cGVzLmg+ICAgICAgICAgICAgICAgICAgICAgKE5ldEJTRCkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBzeXMvZGlza2xhYmVsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9kaXNrbGFiZWwuaCIgImFjX2N2X2hlYWRlcl9zeXNfZGlza2xhYmVsX2giICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX01BQ0hJTkVfVFlQRVNfSAorI2luY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfZGlza2xhYmVsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfRElTS0xBQkVMX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjCVFOWAorZm9yIGFjX2hlYWRlciBpbiBuYnV0aWwuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmJ1dGlsLmgiICJhY19jdl9oZWFkZXJfbmJ1dGlsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25idXRpbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkJVVElMX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIFVGUyBoZWFkZXJzCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gdWZzL3Vmcy9kaW5vZGUuaCB1ZnMvdWZzL3F1b3RhLmggdWZzL3Vmcy9pbm9kZS5oIHVmcy9mZnMvZnMuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VGU19VRlNfRElOT0RFX0gKKyNpbmNsdWRlIDx1ZnMvdWZzL2Rpbm9kZS5oPgorI2VuZGlmCisjaWYgSEFWRV9VRlNfVUZTX1FVT1RBX0gKKyNpbmNsdWRlIDx1ZnMvdWZzL3F1b3RhLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPHZtL3ZtLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlNEaTIpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gdm0vc3dhcF9wYWdlci5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJ2bS9zd2FwX3BhZ2VyLmgiICJhY19jdl9oZWFkZXJfdm1fc3dhcF9wYWdlcl9oIiAiCisjaWYgSEFWRV9WTV9WTV9ICisjaW5jbHVkZSA8dm0vdm0uaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl92bV9zd2FwX3BhZ2VyX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9WTV9TV0FQX1BBR0VSX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIG5ldGxpbmsvcnRuZXRsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMaW51eCkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBsaW51eC9uZXRsaW5rLmggIGxpbnV4L3J0bmV0bGluay5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfQVNNX1RZUEVTX0gKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9MSU5VWF9ORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisjICAgICAgIE5ldHdvcmsgaGVhZGVycworIyAgQ29yZSBvciBMaWJyYXJ5L0FnZW50L0FwcHM6CisjCitmb3IgYWNfaGVhZGVyIGluIGFycGEvaW5ldC5oICAgICAgICBuZXQvaWYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L2luLmggICAgICAgbmV0ZGIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyMKKyMgIEFnZW50OgorZm9yIGFjX2hlYWRlciBpbiBuZXQvaWZfYXJwLmggICAgICAgbmV0L2lmX21pYi5oICAgICAgICAgbmV0L2lmX3Zhci5oICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L2lmX2V0aGVyLmggbmV0aW5ldC9pbl9zeXN0bS5oICAgbmV0aW5ldC9pbl92YXIuaCAgICAgICAgICAgICAgICAgICBuZXRpbmV0L2lwLmggICAgICAgbmV0aW5ldC9pcF9pY21wLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L2ljbXBfdmFyLmggbmV0aW5ldC9pcF92YXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3RjcC5oICAgICAgbmV0aW5ldC90Y3BfdGltZXIuaCAgbmV0aW5ldC90Y3BfdmFyLmggICAgICAgICAgICAgICAgICBuZXRpbmV0L3RjcGlwLmggICAgbmV0aW5ldC91ZHAuaCAgICAgICAgbmV0aW5ldC91ZHBfdmFyLmggICAgICAgICAgICAgICAgICBuZXQvcm91dGUuaCAgICAgICAgbmV0aW5ldC9pY21wNi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lDTVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICBLQU1FIChJUHY2KSBoZWFkZXJzCisjICBBZ2VudDoKKyMKKyMgS0FNRQorZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L2lwNi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L2luNl92YXIuaCAgICBuZXRpbmV0Ni9pbjZfcGNiLmggICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvaXA2X3Zhci5oICAgIG5ldGluZXQ2L25kNi5oICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni90Y3A2LmggICAgICAgbmV0aW5ldDYvdGNwNl9mc20uaCAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L3RjcDZfdGltZXIuaCBuZXRpbmV0Ni90Y3A2X3Zhci5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPG5ldGluZXQvaW4uaD4gICAgICAgICAgICAgICAgICAgICAgICAoT3BlbkJTRCAyLjYpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gbmV0aW5ldC9pbl9wY2IuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibmV0aW5ldC9pbl9wY2IuaCIgImFjX2N2X2hlYWRlcl9uZXRpbmV0X2luX3BjYl9oIiAiCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0aW5ldF9pbl9wY2JfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05FVElORVRfSU5fUENCX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIworIyAgIFByZS1yZXF1aXNpdGUgb24gc3BlY2lmaWMgdHlwZXMKKyMjCisKKyMgICAgICAgU3BlY2lhbCBoYWNrIHRvIGdldCBhcm91bmQgdmFyaW91cyBwcm9ibGVtcyBvbiBvbGRlciBMaW51eCBrZXJuZWxzCisjICAgICAgIChtYWpvciB1Z2ghKQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIGxpbnV4L2V0aHRvb2wuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibGludXgvZXRodG9vbC5oIiAiYWNfY3ZfaGVhZGVyX2xpbnV4X2V0aHRvb2xfaCIgIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cit0eXBlZGVmIF9fdTY0IHU2NDsgICAgICAgICAvKiBoYWNrLCBzbyB3ZSBtYXkgaW5jbHVkZSBrZXJuZWwncyBldGh0b29sLmggKi8KK3R5cGVkZWYgX191MzIgdTMyOyAgICAgICAgIC8qIGRpdHRvICovCit0eXBlZGVmIF9fdTE2IHUxNjsgICAgICAgICAvKiBkaXR0byAqLwordHlwZWRlZiBfX3U4IHU4OyAgICAgICAgICAgLyogZGl0dG8gKi8KKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfZXRodG9vbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElOVVhfRVRIVE9PTF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyMKKyMgICBIZWFkZXJzIHJlcXVpcmluZyBwYXJ0aWN1bGFyIGxpYnJhcmllcworIyMKKworIyAgICAgICBmb3IgSG9zdFJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyAyLngpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gcGtnaW5mby5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwa2dpbmZvLmgiICJhY19jdl9oZWFkZXJfcGtnaW5mb19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wa2dpbmZvX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QS0dJTkZPX0ggMQorX0FDRU9GCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnaW5mbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ2luZm8uLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnaW5mbyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ2luZm8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gYWRtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dpbmZvICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnaW5mbyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BLR0lORk8gMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIHBrZy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwa2cuaCIgImFjX2N2X2hlYWRlcl9wa2dfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcGtnX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QS0dfSCAxCitfQUNFT0YKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dfaW5pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ19pbml0Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ19pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHBrZyA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUEtHIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCitmaQorCitkb25lCisKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3BrZ19oID0gbm8KK3RoZW4KKyAgICB1bnNldCBhY19jdl9oZWFkZXJfcGtnX2gKKyAgICBuZXRzbm1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBuZXRzbm1wX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvbG9jYWwvaW5jbHVkZSIKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtTC91c3IvbG9jYWwvbGliIgorICAgIGZvciBhY19oZWFkZXIgaW4gcGtnLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBrZy5oIiAiYWNfY3ZfaGVhZGVyX3BrZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wa2dfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BLR19IIDEKK19BQ0VPRgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ19pbml0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnX2luaXQuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ19pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcGtnIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ19pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJQS0cgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKK2ZpCisKK2RvbmUKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9wa2dfaCA9IG5vCisgICAgdGhlbgorICAgICAgICBDUFBGTEFHUz0iJG5ldHNubXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfc2F2ZV9MREZMQUdTIgorICAgIGZpCitmaQorCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBhaXgqKQorICAgICAgICAjICAgICAgIGZvciBDUFUvbWVtb3J5IHN0YXRpc3RpY3MgICAgICAgICAgICAgICAoQUlYKQorICAgICAgICAjICBBZ2VudDoKKyAgICAgICAgIworICAgICAgICBmb3IgYWNfaGVhZGVyIGluIGxpYnBlcmZzdGF0LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImxpYnBlcmZzdGF0LmgiICJhY19jdl9oZWFkZXJfbGlicGVyZnN0YXRfaCIgIgorI2lmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGlicGVyZnN0YXRfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlBFUkZTVEFUX0ggMQorX0FDRU9GCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGVyZnN0YXRfY3B1X3RvdGFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGVyZnN0YXRfY3B1X3RvdGFsLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGVyZnN0YXRfY3B1X3RvdGFsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGVyZnN0YXRfY3B1X3RvdGFsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHBlcmZzdGF0IDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwZXJmc3RhdF9jcHVfdG90YWwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwZXJmc3RhdF9jcHVfdG90YWwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEVSRlNUQVQgMSIgPj5jb25mZGVmcy5oCisKKyBlbHNlCisgICAgYXNfZm5fZXJyb3IgJD8gIgorCisqKiogVG8gbW9uaXRvciBDUFUvbWVtb3J5IHZhbHVlcyBpbiBBSVggeW91IG5lZWQgdG8gaW5zdGFsbAorKioqIGxpYnBlcmZzdGF0IHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBib3MucGVyZgorIiAiJExJTkVOTyIgNQorIGZpCisKK2ZpCisKK2RvbmUKKworICAgICAgICA7OworICAgIGhwdXgqKQorICAgICAgICAjICAgICAgIEhQLVVYIGFnZW50IG5lZWRzIG9wZW5fbWliICAgICAgIChYWFggLSBub3QgYSBoZWFkZXIgY2hlY2shKQorICAgICAgICAjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3Blbl9taWIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuX21pYi4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgb3Blbl9taWIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBvcGVuX21pYiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBubSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgb3Blbl9taWIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBvcGVuX21pYiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCTk0gMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICA7OworZXNhYworCisjICAgICAgIGZvciBNSUItMiBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDeWd3aW4gYW5kIE1pbkdXKQorIyAgQ29yZToKKyMKK2ZvciBhY19oZWFkZXIgaW4gd2luZG93cy5oIGlwaGxwYXBpLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICBmb3IgTUlCLTIgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjICBDb3JlOgorIworaWYgdGVzdCB4JHdpdGhfc29ja2xpYiA9IHh3aW5zb2NrMjsgdGhlbgorICBmb3IgYWNfaGVhZGVyIGluIHdpbnNvY2suaCB3aW5zb2NrMi5oIHdzMnRjcGlwLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworZmkKKworIworIyBmb3IgdWNkLXNubXAvbG1zZW5zb3JzTWliCisjCitmb3IgYWNfaGVhZGVyIGluIHNlbnNvcnMvc2Vuc29ycy5oIHBpY2wuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMjICBUaGlzIGlzIGhlcmUgdG8gYXZvaWQgbG9hZHMgb2YgcmVkZWZpbml0aW9uIHdhcm5pbmdzIGR1cmluZworIyMgIG1vZHVsZSBjb25maWd1cmF0aW9uCisKKyMjCisjICAgcnRlbnRyeSBzdHJ1Y3R1cmUgY2hlY2tzOgorIyMKKworIyBDaGVjayBzdHJ1Y3QgcnRlbnRyeSBmb3IgY29tbW9uIGZpZWxkcworIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X2RzdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9kc3QiICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X2RzdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X2hhc2giICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfaGFzaCIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfaGFzaCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0ggMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF9uZXh0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X25leHQiICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X25leHQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9ORVhUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfcmVmY250IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3JlZmNudCIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfcmVmY250IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfUkVGQ05UIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfdW5pdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF91bml0IiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF91bml0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X3VzZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF91c2UiICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3VzZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VTRSAxCitfQUNFT0YKKworCitmaQorCisKK2ZpICMgTkVUU05NUF9RVUlDS19DSEVDSworCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgdHlwZXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygc2hvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2Zfc2hvcnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChzaG9ydCkpIiAiYWNfY3Zfc2l6ZW9mX3Nob3J0IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKIGVsc2UKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc2hvcnQiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCSAgICAgIGFjX2xvPSBhY19oaT0KLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfc2hvcnQ9MAorICAgZmkKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSBhY19sbz0gYWNfaGk9Ci0JCQkgYnJlYWsKLQkJICAgICAgIGZpCi0JCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjY7IH0KIAotYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2Zfc2hvcnQ9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWxvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoc2hvcnQpKTsgfQotdW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoc2hvcnQpKTsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIGV4aXQgKDEpOwotICBpZiAoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX3Nob3J0PWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9zaG9ydD0wCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9zaG9ydCIgPiY2CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAkYWNfY3Zfc2l6ZW9mX3Nob3J0CiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGludC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfaW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnQpKSIgImFjX2N2X3NpemVvZl9pbnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKIAotYWNfY3ZfdHlwZV9pbnQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludCIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGludCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfaW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCi0JCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkgICAgICBhY19sbz0gYWNfaGk9Ci0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9pbnQ9MAorICAgZmkKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJIGFjX2xvPSBhY19oaT0KLQkJCSBicmVhawotCQkgICAgICAgZmkKLQkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludCIgPiY2OyB9CiAKLWFjX2xvPSBhY19oaT0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9pbnQ9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYwotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChpbnQpKTsgfQotdW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50KSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICBleGl0ICgxKTsKLSAgaWYgKCgobG9uZykgKHNpemVvZiAoaW50KSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChpbnQpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NpemVvZl9pbnQ9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2ZfaW50PTAKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9pbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9pbnQiID4mNgogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50CiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9sb25nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9sb25nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGxvbmcgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChsb25nKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9sb25nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi1hY19jdl90eXBlX2xvbmc9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZyIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPj0gMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCSAgICAgIGFjX2xvPSBhY19oaT0KLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nPTAKKyAgIGZpCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJIGFjX2xvPSBhY19oaT0KLQkJCSBicmVhawotCQkgICAgICAgZmkKLQkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nIiA+JjY7IH0KIAotYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9sb25nPSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYwotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nKSk7IH0KLXVuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcpKTsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIGV4aXQgKDEpOwotICBpZiAoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nKSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2xvbmc9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9sb25nPTAKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZyIgPiY2CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZwogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb25nIGxvbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZyBsb25nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2xvbmdfbG9uZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChsb25nIGxvbmcgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChsb25nIGxvbmcpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2xvbmdfbG9uZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZyBsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZ19sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLWFjX2N2X3R5cGVfbG9uZ19sb25nPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmdfbG9uZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nX2xvbmciID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2xvbmciID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPj0gMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJICAgICAgYWNfbG89IGFjX2hpPQotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKyAgIGZpCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSBhY19sbz0gYWNfaGk9Ci0JCQkgYnJlYWsKLQkJICAgICAgIGZpCi0JCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nX2xvbmciID4mNjsgfQogCi1hY19sbz0gYWNfaGk9Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfbG9uZ19sb25nPSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWxvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSk7IH0KLXVuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgZXhpdCAoMSk7Ci0gIGlmICgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOwotICAgIH0KLSAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0wCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjYKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZwogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnRtYXhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnRtYXhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnRtYXhfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGludG1heF90Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9pbnRtYXhfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnRtYXhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludG1heF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnRtYXhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoaW50bWF4X3QpKSIgImFjX2N2X3NpemVvZl9pbnRtYXhfdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi1hY19jdl90eXBlX2ludG1heF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludG1heF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludG1heF90IiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgaW50bWF4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGludG1heF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfaW50bWF4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50bWF4X3QiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCSAgICAgIGFjX2xvPSBhY19oaT0KLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50bWF4X3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfaW50bWF4X3Q9MAorICAgZmkKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSBhY19sbz0gYWNfaGk9Ci0JCQkgYnJlYWsKLQkJICAgICAgIGZpCi0JCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludG1heF90IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludG1heF90IiA+JjY7IH0KIAotYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfaW50bWF4X3Q9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50bWF4X3QpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWxvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKTsgfQotdW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKTsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIGV4aXQgKDEpOwotICBpZiAoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2ludG1heF90PWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9pbnRtYXhfdD0wCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50bWF4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9pbnRtYXhfdCIgPiY2CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCAkYWNfY3Zfc2l6ZW9mX2ludG1heF90CiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQ4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50OF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnQ4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnQ4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludDhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfY3ZfdHlwZV9pbnQ4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50OF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludDhfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDhfdCA9IHllczsgdGhlbgorYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjgiICJhY19jdl9jX2ludDhfdCIKK2Nhc2UgJGFjX2N2X2NfaW50OF90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVDhfVCAxCisjZGVmaW5lIGludDhfdCAkYWNfY3ZfY19pbnQ4X3QKIF9BQ0VPRgorOzsKK2VzYWMKIAotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50OF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnQ4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodWludDhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnQ4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfdWludDhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50OF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnQ4X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50OF90ID0geWVzOyB0aGVuCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiMTYiICJhY19jdl9jX2ludDE2X3QiCitjYXNlICRhY19jdl9jX2ludDE2X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVDhfVCAxCisjZGVmaW5lIGludDE2X3QgJGFjX2N2X2NfaW50MTZfdAogX0FDRU9GCis7OworZXNhYwogCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVfaW50OF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVfaW50OF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VfaW50OF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1X2ludDhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVfaW50OF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91X2ludDhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91X2ludDhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91X2ludDhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91X2ludDhfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VfaW50OF90ID0geWVzOyB0aGVuCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX2ludDMyX3QiCitjYXNlICRhY19jdl9jX2ludDMyX3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVV9JTlQ4X1QgMQorI2RlZmluZSBpbnQzMl90ICRhY19jdl9jX2ludDMyX3QKIF9BQ0VPRgorOzsKK2VzYWMKIAotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDE2X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50MTZfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnQxNl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50MTZfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50MTZfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9pbnQxNl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDE2X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50MTZfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDE2X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfaW50NjRfdCIKK2Nhc2UgJGFjX2N2X2NfaW50NjRfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlQxNl9UIDEKKyNkZWZpbmUgaW50NjRfdCAkYWNfY3ZfY19pbnQ2NF90CiBfQUNFT0YKKzs7Citlc2FjCiAKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDE2X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDE2X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbG9uZyBsb25nIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9uZyBsb25nIGludC4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworICAvKiBGb3Igbm93LCBkbyBub3QgdGVzdCB0aGUgcHJlcHJvY2Vzc29yOyBhcyBvZiAyMDA3IHRoZXJlIGFyZSB0b28gbWFueQorCSBpbXBsZW1lbnRhdGlvbnMgd2l0aCBicm9rZW4gcHJlcHJvY2Vzc29ycy4gIFBlcmhhcHMgdGhpcyBjYW4KKwkgYmUgcmV2aXNpdGVkIGluIDIwMTIuICBJbiB0aGUgbWVhbnRpbWUsIGNvZGUgc2hvdWxkIG5vdCBleHBlY3QKKwkgI2lmIHRvIHdvcmsgd2l0aCBsaXRlcmFscyB3aWRlciB0aGFuIDMyIGJpdHMuICAqLworICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKKyAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KKyAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQorCQkgICAgID8gMSA6IC0xKV07CisgICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgaW50IGkgPSA2MzsKIGludAogbWFpbiAoKQogewotaWYgKCh1aW50MTZfdCAqKSAwKQorLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Igc2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOworICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKKwkgICAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKQorCSAgICAgIHwgKHVsbCA8PCA2MykgfCAodWxsID4+IDYzKSB8ICh1bGwgPDwgaSkgfCAodWxsID4+IGkpCisJICAgICAgfCAodWxsbWF4IC8gdWxsKSB8ICh1bGxtYXggJSB1bGwpKTsKKyAgOwogICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnQxNl90KSkKLSAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAJCQlpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCSAgICAgICAjaWZuZGVmIExMT05HX01BWAorCSAgICAgICAjIGRlZmluZSBIQUxGIFwKKwkJCSgxTEwgPDwgKHNpemVvZiAobG9uZyBsb25nIGludCkgKiBDSEFSX0JJVCAtIDIpKQorCSAgICAgICAjIGRlZmluZSBMTE9OR19NQVggKEhBTEYgLSAxICsgSEFMRikKKwkgICAgICAgI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyBpbnQgbiA9IDE7CisJICAgICAgIGludCBpOworCSAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKwkJIHsKKwkJICAgbG9uZyBsb25nIGludCBtID0gbiA8PCBpOworCQkgICBpZiAobSA+PiBpICE9IG4pCisJCSAgICAgcmV0dXJuIDE7CisJCSAgIGlmIChMTE9OR19NQVggLyAyIDwgbSkKKwkJICAgICBicmVhazsKKwkJIH0KKwkgICAgICAgcmV0dXJuIDA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50MTZfdD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCiAKLWFjX2N2X3R5cGVfdWludDE2X3Q9bm8KK2Vsc2UKKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQxNl90ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50bWF4X3QiICJhY19jdl90eXBlX2ludG1heF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50bWF4X3QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5UTUFYX1QgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwKKyAgICAgICAmJiBhY190eXBlPSdsb25nIGxvbmcgaW50JyBcCisgICAgICAgfHwgYWNfdHlwZT0nbG9uZyBpbnQnCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UMTZfVCAxCisjZGVmaW5lIGludG1heF90ICRhY190eXBlCiBfQUNFT0YKIAorZmkKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdV9pbnQxNl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVfaW50MTZfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91X2ludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVfaW50MTZfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVfaW50MTZfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdV9pbnQxNl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19jdl90eXBlX3VfaW50MTZfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91X2ludDE2X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdV9pbnQxNl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdV9pbnQxNl90ID0geWVzOyB0aGVuCithY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjgiICJhY19jdl9jX3VpbnQ4X3QiCitjYXNlICRhY19jdl9jX3VpbnQ4X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBfVUlOVDhfVCAxIiA+PmNvbmZkZWZzLmgKKwogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVV9JTlQxNl9UIDEKKyNkZWZpbmUgdWludDhfdCAkYWNfY3ZfY191aW50OF90CiBfQUNFT0YKKzs7CisgIGVzYWMKIAorYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICIxNiIgImFjX2N2X2NfdWludDE2X3QiCitjYXNlICRhY19jdl9jX3VpbnQxNl90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQzMl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDMyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50MzJfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50MzJfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludDMyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludDMyX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfaW50MzJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludDMyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQzMl90ID0geWVzOyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKyNkZWZpbmUgdWludDE2X3QgJGFjX2N2X2NfdWludDE2X3QKIF9BQ0VPRgorOzsKKyAgZXNhYwogCithY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjMyIiAiYWNfY3ZfY191aW50MzJfdCIKK2Nhc2UgJGFjX2N2X2NfdWludDMyX3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50MzJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MzJfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodWludDMyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50MzJfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludDMyX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiskYXNfZWNobyAiI2RlZmluZSBfVUlOVDMyX1QgMSIgPj5jb25mZGVmcy5oCiAKLWFjX2N2X3R5cGVfdWludDMyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDMyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludDMyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MzJfdCA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVDMyX1QgMQorI2RlZmluZSB1aW50MzJfdCAkYWNfY3ZfY191aW50MzJfdAogX0FDRU9GCis7OworICBlc2FjCiAKK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiNjQiICJhY19jdl9jX3VpbnQ2NF90IgorY2FzZSAkYWNfY3ZfY191aW50NjRfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVfaW50MzJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1X2ludDMyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1X2ludDMyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1X2ludDMyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VfaW50MzJfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyRhc19lY2hvICIjZGVmaW5lIF9VSU5UNjRfVCAxIiA+PmNvbmZkZWZzLmgKIAotYWNfY3ZfdHlwZV91X2ludDMyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdV9pbnQzMl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VfaW50MzJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VfaW50MzJfdCA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVV9JTlQzMl9UIDEKKyNkZWZpbmUgdWludDY0X3QgJGFjX2N2X2NfdWludDY0X3QKIF9BQ0VPRgorOzsKKyAgZXNhYwogCiAKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50NjRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQ2NF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludC4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworICAvKiBGb3Igbm93LCBkbyBub3QgdGVzdCB0aGUgcHJlcHJvY2Vzc29yOyBhcyBvZiAyMDA3IHRoZXJlIGFyZSB0b28gbWFueQorCSBpbXBsZW1lbnRhdGlvbnMgd2l0aCBicm9rZW4gcHJlcHJvY2Vzc29ycy4gIFBlcmhhcHMgdGhpcyBjYW4KKwkgYmUgcmV2aXNpdGVkIGluIDIwMTIuICBJbiB0aGUgbWVhbnRpbWUsIGNvZGUgc2hvdWxkIG5vdCBleHBlY3QKKwkgI2lmIHRvIHdvcmsgd2l0aCBsaXRlcmFscyB3aWRlciB0aGFuIDMyIGJpdHMuICAqLworICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKKyAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KKyAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQorCQkgICAgID8gMSA6IC0xKV07CisgICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgaW50IGkgPSA2MzsKIGludAogbWFpbiAoKQogewotaWYgKChpbnQ2NF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50NjRfdCkpCi0gIHJldHVybiAwOworLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Igc2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOworICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKKwkgICAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKQorCSAgICAgIHwgKHVsbCA8PCA2MykgfCAodWxsID4+IDYzKSB8ICh1bGwgPDwgaSkgfCAodWxsID4+IGkpCisJICAgICAgfCAodWxsbWF4IC8gdWxsKSB8ICh1bGxtYXggJSB1bGwpKTsKICAgOwogICByZXR1cm4gMDsKIH0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludDY0X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2N2X3R5cGVfaW50NjRfdD1ubworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD15ZXMKK2Vsc2UKKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQ2NF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludDY0X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ2NF90ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidWludG1heF90IiAiYWNfY3ZfdHlwZV91aW50bWF4X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50bWF4X3QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllcyBcCisgICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nIGludCcgXAorICAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgaW50JwogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UNjRfVCAxCisjZGVmaW5lIHVpbnRtYXhfdCAkYWNfdHlwZQogX0FDRU9GCiAKLQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDY0X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDY0X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50cHRyX3QiICJhY19jdl90eXBlX2ludHB0cl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50cHRyX3QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5UUFRSX1QgMSIgPj5jb25mZGVmcy5oCisKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGZvciBhY190eXBlIGluICdpbnQnICdsb25nIGludCcgJ2xvbmcgbG9uZyBpbnQnOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIG1haW4gKCkKIHsKLWlmICgodWludDY0X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50NjRfdCkpCi0gIHJldHVybiAwOworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoc2l6ZW9mICh2b2lkICopIDw9IHNpemVvZiAoJGFjX3R5cGUpKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludDY0X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfdWludDY0X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDY0X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludDY0X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50NjRfdCA9IHllczsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorI2RlZmluZSBpbnRwdHJfdCAkYWNfdHlwZQogX0FDRU9GCiAKLQorCSAgYWNfdHlwZT0KIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVfaW50NjRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1X2ludDY0X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdV9pbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICB0ZXN0IC16ICIkYWNfdHlwZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorZmkKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidWludHB0cl90IiAiYWNfY3ZfdHlwZV91aW50cHRyX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50cHRyX3QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEiID4+Y29uZmRlZnMuaAorCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBmb3IgYWNfdHlwZSBpbiAndW5zaWduZWQgaW50JyAndW5zaWduZWQgbG9uZyBpbnQnIFwKKwkndW5zaWduZWQgbG9uZyBsb25nIGludCc7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludAogbWFpbiAoKQogewotaWYgKCh1X2ludDY0X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1X2ludDY0X3QpKQotICByZXR1cm4gMDsKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKHNpemVvZiAodm9pZCAqKSA8PSBzaXplb2YgKCRhY190eXBlKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VfaW50NjRfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91X2ludDY0X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdV9pbnQ2NF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VfaW50NjRfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VfaW50NjRfdCA9IHllczsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVV9JTlQ2NF9UIDEKKyNkZWZpbmUgdWludHB0cl90ICRhY190eXBlCiBfQUNFT0YKIAotCisJICBhY190eXBlPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIHRlc3QgLXogIiRhY190eXBlIiAmJiBicmVhaworICAgICBkb25lCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludG1heF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludG1heF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludG1heF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnRtYXhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludG1heF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnRtYXhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9pbnRtYXhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludG1heF90ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlRNQVhfVCAxCi1fQUNFT0YKIAogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50bWF4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludG1heF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnRtYXhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodWludG1heF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludG1heF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50bWF4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisjIworIyAgIE90aGVyIHR5cGUgY2hlY2tzOgorIyMKIAotYWNfY3ZfdHlwZV91aW50bWF4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludG1heF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnRtYXhfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnRtYXhfdCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEKLV9BQ0VPRgotCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2ZmNjRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvZmY2NF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX29mZjY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKG9mZjY0X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChvZmY2NF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9vZmY2NF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX29mZjY0X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfb2ZmNjRfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmY2NF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfb2ZmNjRfdCA9IHllczsgdGhlbgorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAib2ZmNjRfdCIgImFjX2N2X3R5cGVfb2ZmNjRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX29mZjY0X3QiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9PRkY2NF9UIDEKQEAgLTI0ODMyLDE5NSArMTgzMDQsMjQgQEAKIAogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50cHRyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludHB0cl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodWludHB0cl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludHB0cl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50cHRyX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfdWludHB0cl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnRwdHJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50cHRyX3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm5mZHNfdCIgImFjX2N2X3R5cGVfbmZkc190IiAiI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfbmZkc190IiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLV9BQ0VPRgotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludHB0cl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludHB0cl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludHB0cl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnRwdHJfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludHB0cl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnRwdHJfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9pbnRwdHJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnRwdHJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnRwdHJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludHB0cl90ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlRQVFJfVCAxCisjZGVmaW5lIEhBVkVfTkZEU19UIDEKIF9BQ0VPRgogCiAKIGZpCiAKIAotIyBzb2xhcmlzIHNwZWNpZmljIHR5cGUKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQ291bnRlcjY0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIENvdW50ZXI2NC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9Db3VudGVyNjQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8aW5ldC9taWIyLmg+Ci0KLWludAotbWFpbiAoKQotewotaWYgKChDb3VudGVyNjQgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChDb3VudGVyNjQpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX0NvdW50ZXI2ND15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9Db3VudGVyNjQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfQ291bnRlcjY0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX0NvdW50ZXI2NCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX0NvdW50ZXI2NCA9IHllczsgdGhlbgorIyAgIFNvbGFyaXMgc3BlY2lmaWMgY2hlY2tzCisjICAgICAgICh0YWtlbiBmcm9tIFBlcmwncyBjb25maWd1cmUgc2NyaXB0KQorIworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiQ291bnRlcjY0IiAiYWNfY3ZfdHlwZV9Db3VudGVyNjQiICIjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfQ291bnRlcjY0IiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfQ09VTlRFUjY0IDEKQEAgLTI1MDI5LDIzICsxODMzMCw0MiBAQAogCiBmaQogCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJtaWIyX2lwSWZTdGF0c0VudHJ5X3QiICJhY19jdl90eXBlX21pYjJfaXBJZlN0YXRzRW50cnlfdCIgIiNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9taWIyX2lwSWZTdGF0c0VudHJ5X3QiID0geHllczsgdGhlbiA6CiAKLSMgZ3Vlc3MgSVB2NiBzdGFjayB0eXBlLgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX01JQjJfSVBJRlNUQVRTRU5UUllfVCAxCitfQUNFT0YKKworCitmaQorCisKKyMgICBOLkI6ICBUaGUgYWJvdmUgY2hlY2tzIGNvdWxkIHNhZmVseSBiZSBtb3ZlZCB0bworIyAgICAgICAgIHRoZSBsYXRlciAnY29uZmlnX3R5cGVzJyBzdWItc2NyaXB0CisjCisKKworIyMKKyMgICBEZXRlcm1pbmUgdGhlIElQdjYgc3RhY2sgdHlwZQorIyMKKworIyAgICAgICBUaGVzZSBjaGVja3MgYWxzbyBzZXQgdGhlIExJQlMvQ0ZMQUdTIHZhcmlhYmxlcywKKyMgICAgICAgd2hpY2ggbWF5IGJlIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBmdW5jdGlvbiB0ZXN0cworIworCiBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgogCXY2dHlwZT11bmtub3duCiAJdjZsaWI9bm9uZQogCXY2dHJ5bGliYz1ubwogCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZS4uLiAkRUNIT19DIiA+JjYKLQlmb3IgaSBpbiB2NmQgdG9zaGliYSBrYW1lIGlucmlhIHpldGEgbGludXgtZ2xpYmMgbGludXgtaW5ldDYgZ2VuZXJpYzsgZG8KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUuLi4gIiA+JjY7IH0KKwlmb3IgaSBpbiB2NmQgdG9zaGliYSBrYW1lIGlucmlhIHpldGEgbGludXgtZ2xpYmMgbGludXgtaW5ldDYgY3lnd2luIHdpbnNvY2syIGdlbmVyaWM7IGRvCiAJCWNhc2UgJGkgaW4KIAkJdjZkKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDwvdXNyL2xvY2FsL3Y2L2luY2x1ZGUvc3lzL3R5cGVzLmg+CkBAIC0yNTA1NCw3ICsxODM3NCw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7IHY2bGliPXY2OwogCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwogCQkJCUNGTEFHUz0iLUkvdXNyL2xvY2FsL3Y2L2luY2x1ZGUgJENGTEFHUyIKQEAgLTI1MDYzLDExICsxODM4Myw3IEBACiAKIAkJCTs7CiAJCXRvc2hpYmEpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjUwNzYsNyArMTgzOTIsNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKIAkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKIAkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgpAQCAtMjUwODUsMTEgKzE4NDAxLDcgQEAKIAogCQkJOzsKIAkJa2FtZSkKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgpAQCAtMjUwOTgsNyArMTg0MTAsNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKIAkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKIAkJCQl2NnRyeWxpYmM9eWVzOwpAQCAtMjUxMDgsMTEgKzE4NDIwLDcgQEAKIAogCQkJOzsKIAkJaW5yaWEpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KQEAgLTI1MTIxLDcgKzE4NDI5LDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsKIAkJCQl2NmxpYj1kdW1teTsKIAkJCQl2NmxpYmRpcj1ub25lOwpAQCAtMjUxMzIsMTEgKzE4NDQwLDcgQEAKIAogCQkJOzsKIAkJemV0YSkKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CkBAIC0yNTE0Niw3ICsxODQ1MCw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwogCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwogCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCkBAIC0yNTE1NSwxMSArMTg0NTksNyBAQAogCiAJCQk7OwogCQlsaW51eC1nbGliYykKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KQEAgLTI1MTY4LDcgKzE4NDY4LDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsKIAkJCQl2NmxpYj1kdW1teTsKIAkJCQl2NmxpYmRpcj1ub25lOwpAQCAtMjUxODYsMTA0ICsxODQ4Niw2OSBAQAogCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCiAJCQlmaQogCQkJOzsKLQkJZ2VuZXJpYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHBvc3Rwb25lZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1wb3N0cG9uZWQiID4mNgotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzb2NrYWRkcl9pbjYiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInNpbjZfYWRkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2thZGRyX2luNi5zaW42X2FkZHIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2FkZHJfaW42LnNpbjZfYWRkci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCWN5Z3dpbikKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNvY2thZGRyX2luNiB0ZXN0aXQ7Ci10ZXN0aXQuc2luNl9hZGRyICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQorI2lmZGVmIF9DWUdXSU5fSU42X0gKK3llcworI2VuZGlmCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIHY2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lCisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0KgogCi1maQorICAgICAgICAgICAgICAgICAgICAgICA7OworCQl3aW5zb2NrMikKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2lmIGRlZmluZWQoX1dTMlRDUElQX0gpCit5ZXMKKyNlbmRpZgogX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICB2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZQorCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCQk7OworCQlnZW5lcmljKQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHBvc3Rwb25lZCIgPiY1CiskYXNfZWNobyAicG9zdHBvbmVkIiA+JjY7IH0KKwkJCWFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyX2luNiIgInNpbjZfYWRkciIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfYWRkciIgIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9hZGRyIiA9IHh5ZXM7IHRoZW4gOgorCiBmaQogCi0KLQkgICAgICAgICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZS4uLiAkRUNIT19DIiA+JjYKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNl9oYXNfc2luNl9hZGRyIiA9ICJ4eWVzIjsgdGhlbgorCSAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9hZGRyIiA9ICJ4eWVzIjsgdGhlbgogCQkJCXY2dHlwZT0kaQogCQkJCXY2bGliPWR1bW15CiAJCQkJdjZsaWJkaXI9bm9uZQpAQCAtMjUzMDEsMzMgKzE4NTY2LDMxIEBACiAJCWlmIHRlc3QgLWQgJHY2bGliZGlyIC1hIC1mICR2NmxpYmRpci9saWIkdjZsaWIuYTsgdGhlbgogCQkJTElCUz0iLUwkdjZsaWJkaXIgLWwkdjZsaWIgJExJQlMiCiAJCQllbmFibGVfaXB2Nj0ieWVzIgotCQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYlwiIiA+JjUKLWVjaG8gIiR7RUNIT19UfVwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWJcIiIgPiY2CisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYlwiIiA+JjUKKyRhc19lY2hvICJcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliXCIiID4mNjsgfQogCQllbGlmIHRlc3QgIiR2NnRyeWxpYmMiID0gInllcyI7IHRoZW4KIAkJCWVuYWJsZV9pcHY2PSJ5ZXMiCi0JCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliY1wiIiA+JjUKLWVjaG8gIiR7RUNIT19UfVwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjXCIiID4mNgorCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjXCIiID4mNQorJGFzX2VjaG8gIlwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjXCIiID4mNjsgfQogCQllbHNlCi0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBJUHY2IGxpYnJhcnkgbGliJHY2bGliLmEgZm91bmQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIElQdjYgbGlicmFyeSBsaWIkdjZsaWIuYSBmb3VuZC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJCWFzX2ZuX2Vycm9yICQ/ICJubyBJUHY2IGxpYnJhcnkgbGliJHY2bGliLmEgZm91bmQuIiAiJExJTkVOTyIgNQogCQkJZXhpdCAxCiAJCWZpCiAJZWxzZQogCQllbmFibGVfaXB2Nj0ibm8iCi0JCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2XCIiID4mNQotZWNobyAiJHtFQ0hPX1R9XCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjZcIiIgPiY2CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NlwiIiA+JjUKKyRhc19lY2hvICJcIiR2NnR5cGUsICRlbmFibGVfaXB2NlwiIiA+JjY7IH0KIAlmaQogZmkKIAorIyAtKi0gYXV0b2NvbmYgLSotCiAjCiAjIE1heWJlIGFkZCBsaWJyYXJ5IGV4dGVuc2lvbnMgZm9yIHRocmVhZCBtdXRleCBsb2NraW5nLgogIwogCiBpZiB0ZXN0ICJ4JHdpdGhfcmVzX2xvY2tzIiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1JFRU5UUkFOVCAxCi1fQUNFT0YKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9SRUVOVFJBTlQgMSIgPj5jb25mZGVmcy5oCiAKIAogICAgIGNhc2UgJHRhcmdldF9vcyBpbgpAQCAtMjUzNDUsMTMgKzE4NjA4LDE1IEBACiAjCiAjIEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UgZmlsZXMuCiAjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZS4uLiAiID4mNjsgfQogb3RoZXJfc3JjX2xpc3Q9IiIKLW90aGVyX29ianNfbGlzdD0iIgorb3RoZXJfZnRvYmpzX2xpc3Q9IiIKIG90aGVyX2xvYmpzX2xpc3Q9IiIKK290aGVyX29ianNfbGlzdD0iIgogb3RoZXJfYWdlbnRvYmpzPSIiCiBvdGhlcl9sYWdlbnRvYmpzPSIiCitvdGhlcl9mdGFnZW50b2Jqcz0iIgogb3RoZXJfdHJhcGRfb2JqZWN0cz0iIgogCiAjIFdpbjMyIHNlcnZpY2UgY29kZQpAQCAtMjUzNTksMTYgKzE4NjI0LDE5IEBACiAgIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2luc2VydmljZS5jIHdpbnNlcnZpY2VyYy5yYyIKICAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnNlcnZpY2UubyB3aW5zZXJ2aWNlcmMubyIKICAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2luc2VydmljZS5sbyB3aW5zZXJ2aWNlcmMubG8iCisgIG90aGVyX2Z0b2Jqc19saXN0PSIkb3RoZXJfZnRvYmpzX2xpc3Qgd2luc2VydmljZS5mdCB3aW5zZXJ2aWNlcmMuZnQiCiAgIG90aGVyX2FnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIKICAgb3RoZXJfbGFnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubG8iCisgIG90aGVyX2Z0YWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5sbyIKICAgb3RoZXJfdHJhcGRfb2JqZWN0cz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIKIGZpCiAKICMgV2luMzIgcGlwZXMKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCiAgIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2lucGlwZS5jIgogICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2lucGlwZS5vIgogICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5waXBlLmxvIgorICBvdGhlcl9mdG9ianNfbGlzdD0iJG90aGVyX2Z0b2Jqc19saXN0IHdpbnBpcGUuZnQiCiBmaQogCiAKQEAgLTI1Mzc4LDE2MCArMTg2NDYsMTYgQEAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0IiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHMiID4mNQotZWNobyAiJHtFQ0hPX1R9JG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0cyIgPiY2CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0IiA+JjUKKyRhc19lY2hvICIkb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0cyIgPiY1CiskYXNfZWNobyAiJG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0cyIgPiY2OyB9CiAKICMKLSMgRG8gdHJhbnNwb3J0IG1vZHVsZSBwcm9jZXNzaW5nLgorIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYnVpbGQKICMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlLi4uICRFQ0hPX0MiID4mNgotdHJhbnNwb3J0X3NyY19saXN0PSIiCi10cmFuc3BvcnRfaGRyX2xpc3Q9IiIKLXRyYW5zcG9ydF9kZWZfbGlzdD0iIgotdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIiCi10cmFuc3BvcnRfYWRkX2xpc3Q9IiIKLXRyYW5zcG9ydF9jYWxsYmFja19kaXNhYmxlZD0iIgotbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfdHJhbnNwb3J0cyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX291dF90cmFuc3BvcnRzIHwgc2VkICdzLywvIC9nOydgCi0KLSMKLSMgQWRkIHRoZSBkZWZhdWx0IHRyYW5zcG9ydHMgdG8gdGhlIGxpc3QKLSMKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIENhbGxiYWNrIgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIENhbGxiYWNrIgotZWxzZQotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIFVuaXggQ2FsbGJhY2siCi1maQotaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQSVB2NiBUQ1BJUHY2ICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0IgotZmkKLWZvciBpIGluICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0ICIgfCBncmVwICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCi0gICAgOgotICBlbHNlCi0gICAgdHJhbnNwb3J0X2FkZF9saXN0PSIkaSAkdHJhbnNwb3J0X2FkZF9saXN0IgotICBmaQotZG9uZQotbmV3X3RyYW5zcG9ydF9saXN0PSIkdHJhbnNwb3J0X2FkZF9saXN0ICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCIKLQotZm9yIGkgaW4gJG5ld190cmFuc3BvcnRfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3QgIiB8IGdyZXAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFAiOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJdCBpcyBub3QgcG9zc2libGUgdG8gY29tcGlsZSB3aXRob3V0IFVEUC9JUCBzdXBwb3J0LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJdCBpcyBub3QgcG9zc2libGUgdG8gY29tcGlsZSB3aXRob3V0IFVEUC9JUCBzdXBwb3J0LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGVsaWYgdGVzdCAieCRpIiA9ICJ4Q2FsbGJhY2siOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICB0cmFuc3BvcnRfY2FsbGJhY2tfZGlzYWJsZWQ9InllcyIKLSAgICBmaQotICBlbHNlCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4QUFMNVBWQyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiAhPSAieGxpbnV4IjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFBTDUgUFZDIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFBTDUgUFZDIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4SVBYIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiICE9ICJ4bGludXgiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSVBYIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IElQWCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkaSIgPSAieFVuaXgiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUElQdjYiIC1vICJ4JGkiID0gInhUQ1BJUHY2IjsgdGhlbgotICAgICAgICAgICAgZWNobwotICAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgICBmaQotICAgIGZpCi0gICAgdHJhbnNwb3J0X3NyYz0ic25tcCIkaSJEb21haW4uYyIKLSAgICB0cmFuc3BvcnRfaGRyPSJzbm1wIiRpIkRvbWFpbi5oIgotICAgIHJlbF90cmFuc3BvcnRfc3JjPSJzbm1wbGliLyIkdHJhbnNwb3J0X3NyYwotICAgIHJlbF90cmFuc3BvcnRfaGRyPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiR0cmFuc3BvcnRfaGRyCi0gICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMiOyB0aGVuCi0gICAgICB0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgJGkiCi0gICAgICB0cmFuc3BvcnRfc3JjX2xpc3Q9IiR0cmFuc3BvcnRfc3JjICR0cmFuc3BvcnRfc3JjX2xpc3QiCi0gICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X2hkciI7IHRoZW4KLSAgICAgICAgdHJhbnNwb3J0X2hkcl9saXN0PSIkdHJhbnNwb3J0X2hkciAkdHJhbnNwb3J0X2hkcl9saXN0IgotICAgICAgZmkKLSAgICAgIHRyYW5zcG9ydF9kZWY9YGVjaG8gJGkgfCBzZWQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKLSAgICAgIHRyYW5zcG9ydF9kZWZfbGlzdD0iTkVUU05NUF9UUkFOU1BPUlRfIiR0cmFuc3BvcnRfZGVmIl9ET01BSU4gJHRyYW5zcG9ydF9kZWZfbGlzdCIKLSAgICBlbHNlCi0gICAgICBlY2hvCi0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDYW5ub3QgZmluZCBmaWxlICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIHRvIHN1cHBvcnQgU05NUCB0cmFuc3BvcnQgZG9tYWluICRpLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCBmaWxlICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIHRvIHN1cHBvcnQgU05NUCB0cmFuc3BvcnQgZG9tYWluICRpLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0gIGZpCi1kb25lCi10cmFuc3BvcnRfb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCBzZWQgJ3MvXC5jL1wuby9nJ2AKLXRyYW5zcG9ydF9sb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCBzZWQgJ3MvXC5jL1wubG8vZydgCi0KLSMjIHdpbjMyIHBsYXRmb3JtcyByZXF1aXJlIGluZXRfbnRvcCBldGMuCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICBpZiBlY2hvICIkdHJhbnNwb3J0X2RlZl9saXN0IiB8IGdyZXAgIklQVjYiID4vZGV2L251bGw7IHRoZW4KLSAgICB0cmFuc3BvcnRfb2JqX2xpc3Q9IiR0cmFuc3BvcnRfb2JqX2xpc3QgaW5ldF9udG9wLm8gaW5ldF9wdG9uLm8iCi0gICAgdHJhbnNwb3J0X2xvYmpfbGlzdD0iJHRyYW5zcG9ydF9sb2JqX2xpc3QgaW5ldF9udG9wLmxvIGluZXRfcHRvbi5sbyIKLSAgZmkKLWZpCi0KLQotCi0KLQotZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZfbGlzdDsgZG8KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkaSAxCi1fQUNFT0YKLQotZG9uZQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4iID4mNQotZWNobyAiJHtFQ0hPX1R9JHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4iID4mNgotCi0gIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKLSAgTmV0d29yayB0cmFuc3BvcnQgc3VwcG9ydDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdAotRU9GCi0KLQotIwotIyBTZWN1cml0eSBtb2R1bGVzIHRvIHVzZQotIwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlLi4uICRFQ0hPX0MiID4mNgotc2VjdXJpdHlfZGVmX2xpc3Q9InVzbSIKLXNlY3VyaXR5X3NyY19saXN0PSIiCi1zZWN1cml0eV9vYmpfbGlzdD0iIgotc2VjdXJpdHlfbG9ial9saXN0PSIiCi1zZWN1cml0eV9pbml0X2ZpbGU9InNubXBsaWIvc25tcHNtX2luaXQuaCIKLXNlY3VyaXR5X2luY2xfZmlsZT0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIgotbmV3X3dpdGhfc2VjdXJpdHk9YGVjaG8gJHdpdGhfc2VjdXJpdHlfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X3NlY3VyaXR5PWBlY2hvICR3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi0KIGlmIHRlc3QgISAtZCBpbmNsdWRlOyB0aGVuCiAgIG1rZGlyIGluY2x1ZGUKIGZpCkBAIC0yNTU1MSwyMiArMTg2NzUsMjMwIEBACiBpZiB0ZXN0ICEgLWQgc25tcGxpYjsgdGhlbgogICBta2RpciBzbm1wbGliCiBmaQotZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luaXRfZmlsZQotZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luY2xfZmlsZQoraWYgdGVzdCAhIC1kIHNubXBsaWIvdHJhbnNwb3J0cyA7IHRoZW4KKyAgbWtkaXIgc25tcGxpYi90cmFuc3BvcnRzCitmaQogCi1mb3IgaSBpbiAkc2VjdXJpdHlfZGVmX2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGlmIHRlc3QgIngkaSIgPSAieHVzbSI7IHRoZW4KLQllY2hvCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIG1hbmRhdG9yeSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBUaGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBtYW5kYXRvcnkiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyMKKyMgRG8gdHJhbnNwb3J0IG1vZHVsZSBwcm9jZXNzaW5nLgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZS4uLiAiID4mNjsgfQorCisjIGluY2x1ZGUgdGhlIGFjdHVhbCBjb2RlIGNoZWNraW5nCisjIC0qLSBzaCAtKi0KK3RyYW5zcG9ydF9zcmNfbGlzdD0iIgordHJhbnNwb3J0X2hkcl9saXN0PSIiCit0cmFuc3BvcnRfZGVmX2xpc3Q9IiIKK3RyYW5zcG9ydF9yZXN1bHRfbGlzdD0iIgordHJhbnNwb3J0X2FkZF9saXN0PSIiCituZXdfd2l0aF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF90cmFuc3BvcnRzIHwgJFNFRCAncy8sLyAvZzsnYAorbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX291dF90cmFuc3BvcnRzIHwgJFNFRCAncy8sLyAvZzsnYAorCisjIHNldCB1cCB0aGUgQ1BQIGNvbW1hbmQKK01PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTIC1JJHtzcmNkaXJ9IC1JJHtzcmNkaXJ9L2luY2x1ZGUiCisKKyMKKyMgQWRkIHRoZSBkZWZhdWx0IHRyYW5zcG9ydHMgdG8gdGhlIGxpc3QKKyMKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQWxpYXMgQ2FsbGJhY2siCitlbHNlCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQWxpYXMgVW5peCBDYWxsYmFjayIKK2ZpCitpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFBJUHY2IFRDUElQdjYgJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3QiCitmaQorZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgdHJhbnNwb3J0X2FkZF9saXN0PSIkaSAkdHJhbnNwb3J0X2FkZF9saXN0IgorICBmaQorZG9uZQorbmV3X3RyYW5zcG9ydF9saXN0PSIkdHJhbnNwb3J0X2FkZF9saXN0ICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCIKKworaWYgdGVzdCAieCRjdG9yX2hlYWRlciIgPSAieCIgOyB0aGVuCisgICBjdG9yX2hlYWRlcj0ic25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgiCitmaQorCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkY3Rvcl9oZWFkZXIKK3doaWxlIHRlc3QgIngkbmV3X3RyYW5zcG9ydF9saXN0IiAhPSAieCI7IGRvCisgIGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3Q9IiIKKyAgZm9yIGkgaW4gJG5ld190cmFuc3BvcnRfbGlzdDsgZG8KKyAgICBpZiBlY2hvICIgJG5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KKyAgICAgIHRydWUKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFBJUHY2IiAtbyAieCRpIiA9ICJ4VENQSVB2NiI7IHRoZW4KKyAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIklQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIgIiRMSU5FTk8iIDUKKyAgICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHRyYW5zcG9ydF9zcmM9InRyYW5zcG9ydHMvc25tcCIkaSJEb21haW4uYyIKKyAgICAgIHRyYW5zcG9ydF9oZHI9InNubXAiJGkiRG9tYWluLmgiCisgICAgICByZWxfdHJhbnNwb3J0X3NyYz0ic25tcGxpYi8iJHRyYW5zcG9ydF9zcmMKKyAgICAgIHJlbF90cmFuc3BvcnRfaGRyPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiR0cmFuc3BvcnRfaGRyCisgICAgICBsY19pPWBlY2hvICRpIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorICAgICAgY3Rvcl9mbj0ibmV0c25tcF8iJGxjX2kiX2N0b3IiCisgICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyI7IHRoZW4KKyAgICAgICAgdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICRpIgorICAgICAgICB0cmFuc3BvcnRfc3JjX2xpc3Q9IiR0cmFuc3BvcnRfc3JjICR0cmFuc3BvcnRfc3JjX2xpc3QiCisgICAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfaGRyIjsgdGhlbgorICAgICAgICAgIHRyYW5zcG9ydF9oZHJfbGlzdD0iJHRyYW5zcG9ydF9oZHIgJHRyYW5zcG9ydF9oZHJfbGlzdCIKKyAgICAgICAgZmkKKyAgICAgICAgdHJhbnNwb3J0X2RlZj1gZWNobyAkaSB8ICRTRUQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKyAgICAgICAgdHJhbnNwb3J0X2RlZl9saXN0PSJORVRTTk1QX1RSQU5TUE9SVF8iJHRyYW5zcG9ydF9kZWYiX0RPTUFJTiAkdHJhbnNwb3J0X2RlZl9saXN0IgorICAgICAgZWxzZQorICAgICAgICBlY2hvCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDYW5ub3QgZmluZCBmaWxlICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIHRvIHN1cHBvcnQgU05NUCB0cmFuc3BvcnQgZG9tYWluICRpLiIgIiRMSU5FTk8iIDUKKyAgICAgIGZpCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgYnVpbGQgYSBwc2V1ZG8gaW5jbHVkZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBjdXJyZW50IGNvbmZpZyBhbmQKKyAgICAgICMgc3lzdGVtIHN5bWJvbHM6CisgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCisjdW5kZWYgTkVUU05NUF9NSU5JTUFMX0NPREUKKyNkZWZpbmUgTkVUX1NOTVBfQ09ORklHX0gKKyN1bmRlZiBjb25maWdfcmVxdWlyZQorI2RlZmluZSBjb25maWdfcmVxdWlyZShmb28pIGNvbmZpZ19jaGVja2l0X3JlcXVpcmUoZm9vKQorI3VuZGVmIGNvbmZpZ19lcnJvcgorI2RlZmluZSBjb25maWdfZXJyb3IoZm9vKSBjb25maWdfY2hlY2tpdF9lcnJvcihmb28pCisjaW5jbHVkZSAiJHJlbF90cmFuc3BvcnRfaGRyIgorX0FDRU9GCisgICAgICBtdiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKworICAgICAgIworICAgICAgIyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIHVzaW5nIGNvbmZpZ19yZXF1aXJlKCkgbWFjcm8KKyAgICAgICMKKyAgICAgIHN1Yl9saXN0PWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCBjb25maWdfY2hlY2tpdF9yZXF1aXJlIHwgJFNFRCAncy8uKmNvbmZpZ19jaGVja2l0X3JlcXVpcmUgKiggKlwoLipcKSAqKS4qL1wxLydgCisgICAgICBpZiB0ZXN0ICJ4JHN1Yl9saXN0IiAhPSAieCIgOyB0aGVuCisgICAgICAgIGZvciBqIGluICRzdWJfbGlzdCA7IGRvCisJICBpZiBlY2hvICIgJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QgJG5ld190cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsIDsgdGhlbgorCSAgICA6CisJICBlbHNlCisgICAgICAgICAgICBmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0PSIkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCAkaiIKKwkgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisKKyAgICAgICMKKyAgICAgICMgY2hlY2sgZm9yIGVycm9ycyB1c2luZyBjb25maWdfZXJyb3IoKSBtYWNybworICAgICAgIworICAgICAgZXJyb3JfbGlzdD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgY29uZmlnX2NoZWNraXRfZXJyb3IgfCAkU0VEICdzLy4qY29uZmlnX2NoZWNraXRfZXJyb3IoXCguKlwpKS4qL1wxL2cnYAorICAgICAgaWYgdGVzdCAieCRlcnJvcl9saXN0IiAhPSAieCIgOyB0aGVuCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRlcnJvcl9saXN0IiAiJExJTkVOTyIgNQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBDaGVjayBmb3IgbmVlZGVkIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHRvIGNhbGwKKyAgICAgICMKKyAgICAgIGZvdW5kPWBncmVwICRjdG9yX2ZuICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjYAorICAgICAgaWYgZ3JlcCAkY3Rvcl9mbiAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyA+IC9kZXYvbnVsbCA7IHRoZW4KKwkjIHdlIGFkZCB0aGVtIGRvd24gYmVsb3cgaW5zdGVhZCBvZiBoZXJlIHRvIG1ha2Ugc3VyZQorCSMgY29uZmlnX3JlcXVpcmUgZGVwZW5kZW5jeSBjb25zdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBmaXJzdC4KKwl0cl9pbml0X2xpc3Q9IiRjdG9yX2ZuICR0cl9pbml0X2xpc3QiCisgICAgICBmaQogICAgIGZpCisgIGRvbmUgIyBmb3IgZWFjaCBuZXcgdHJhbnNwb3J0CisgIG5ld190cmFuc3BvcnRfbGlzdD0iJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QiCitkb25lICMgd2hpbGUgbmV3IHRyYW5zcG9ydHMgZXhpc3QKK3RyYW5zcG9ydF9vYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wuby9nJ2AKK3RyYW5zcG9ydF9sb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLmxvL2cnYAordHJhbnNwb3J0X2Z0b2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLmZ0L2cnYAorZm9yIGkgaW4gJHRyX2luaXRfbGlzdCA7IGRvCisgICBlY2hvICIkaSgpOyIgPj4gJGN0b3JfaGVhZGVyCitkb25lCisKKyMjIHdpbjMyIHBsYXRmb3JtcyByZXF1aXJlIGluZXRfbnRvcCBldGMuCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgIGlmIGVjaG8gIiR0cmFuc3BvcnRfZGVmX2xpc3QiIHwgJEdSRVAgIklQVjYiID4vZGV2L251bGw7IHRoZW4KKyAgICB0cmFuc3BvcnRfb2JqX2xpc3Q9IiR0cmFuc3BvcnRfb2JqX2xpc3QgaW5ldF9udG9wLm8gaW5ldF9wdG9uLm8iCisgICAgdHJhbnNwb3J0X2xvYmpfbGlzdD0iJHRyYW5zcG9ydF9sb2JqX2xpc3QgaW5ldF9udG9wLmxvIGluZXRfcHRvbi5sbyIKKyAgICB0cmFuc3BvcnRfZnRvYmpfbGlzdD0iJHRyYW5zcG9ydF9mdG9ial9saXN0IGluZXRfbnRvcC5mdCBpbmV0X3B0b24uZnQiCisgIGZpCitmaQorCitpZiB0ZXN0ICJ4JHRyYW5zcG9ydF9yZXN1bHRfbGlzdCIgPSB4IDsgdGhlbgorICAgYXNfZm5fZXJyb3IgJD8gIk5vIHRyYW5zcG9ydHMgY29uZmlndXJlZCwgYXQgbGVhc3Qgb25lIG11c3QgYmUgcHJvdmlkZWQiICIkTElORU5PIiA1CitmaQorCisKKworCisKKworCitmb3IgaSBpbiAkdHJhbnNwb3J0X2RlZl9saXN0OyBkbworICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lICRpIDEKK19BQ0VPRgorCitkb25lCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4iID4mNQorJGFzX2VjaG8gIiR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuIiA+JjY7IH0KKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIE5ldHdvcmsgdHJhbnNwb3J0IHN1cHBvcnQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QKK0VPRgorCisKKyMgY2xlYW51cAorcm0gLWYgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisjCisjIFNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlCisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZS4uLiAiID4mNjsgfQorIyAtKi0gc2ggLSotCitzZWN1cml0eV9kZWZfbGlzdD0idXNtIgorc2VjdXJpdHlfc3JjX2xpc3Q9IiIKK3NlY3VyaXR5X29ial9saXN0PSIiCitzZWN1cml0eV9sb2JqX2xpc3Q9IiIKK3NlY3VyaXR5X2Z0b2JqX2xpc3Q9IiIKK3NlY3VyaXR5X21vZF9saXN0PSIgIgorCituZXdfd2l0aF9zZWN1cml0eT0KK25ld193aXRoX291dF9zZWN1cml0eT1gZWNobyAkd2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlcyB8IHRyICwgJyAnYAorCisjIEFzc2lnbiBhZGRpdGlvbmFsIHNlY3VyaXR5IG1vZHVsZXMKK2ZvciBpIGluIGBlY2hvICR3aXRoX3NlY3VyaXR5X21vZHVsZXMgfCB0ciAsICcgJ2A7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBlY2hvCisgICAgYXNfZm5fZXJyb3IgJD8gInNlY3VyaXR5IG1vZHVsZSBjb25mbGljdCAtICRpIGJvdGggaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkIiAiJExJTkVOTyIgNQorICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICA6ICMgRG91YmxlIGRlZmluZSwgaWdub3JlCiAgIGVsc2UKICAgICBuZXdfd2l0aF9zZWN1cml0eT0iJG5ld193aXRoX3NlY3VyaXR5ICRpIgogICBmaQogZG9uZQogCisjIEFkZCBkZWZhdWx0IHNlY3VyaXR5IG1vZHVsZXMKK2ZvciBpIGluICRzZWN1cml0eV9kZWZfbGlzdDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIDogIyBFeGNsdWRlZCwgaWdub3JlCisgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgIDogIyBEb3VibGUgZGVmaW5lLCBpZ25vcmUKKyAgZWxzZQorICAgIG5ld193aXRoX3NlY3VyaXR5PSIkbmV3X3dpdGhfc2VjdXJpdHkgJGkiCisgIGZpCitkb25lCisKKyMgR2VuZXJhdGUgb3V0cHV0IGZpbGVzCis6ICR7c2VjdXJpdHlfaW5pdF9maWxlOj0nc25tcGxpYi9zbm1wc21faW5pdC5oJ30KKzogJHtzZWN1cml0eV9zaHV0ZG93bl9maWxlOj0nc25tcGxpYi9zbm1wc21fc2h1dGRvd24uaCd9Cis6ICR7c2VjdXJpdHlfaW5jbF9maWxlOj0naW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oJ30KKworZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luaXRfZmlsZQorZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X3NodXRkb3duX2ZpbGUKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbmNsX2ZpbGUKKwogZm9yIGkgaW4gJG5ld193aXRoX3NlY3VyaXR5OyBkbwogICBjZmlsZT0ic25tcCIkaSIuYyIKICAgaGZpbGU9InNubXAiJGkiLmgiCkBAIC0yNTU3NiwxOSArMTg5MDgsMjEgQEAKICAgICA6CiAgIGVsc2UKICAgICBlY2hvCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogTm8gc3VjaCBzZWN1cml0eSBtb2R1bGU6ICRpIC8gJGNmaWxlIC8gJGhmaWxlIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IE5vIHN1Y2ggc2VjdXJpdHkgbW9kdWxlOiAkaSAvICRjZmlsZSAvICRoZmlsZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICJObyBzdWNoIHNlY3VyaXR5IG1vZHVsZTogJGkgLyAkY2ZpbGUgLyAkaGZpbGUiICIkTElORU5PIiA1CiAgIGZpCiAKICAgIyBkZWZpbmUgYSBidW5jaCBvZiBzdHVmZiB0byBlbmFibGUgaXQKKyAgc2VjdXJpdHlfbW9kX2xpc3Q9IiR7c2VjdXJpdHlfbW9kX2xpc3R9ICRpIgorICBzZWN1cml0eV9zcmNfbGlzdD0iJHNlY3VyaXR5X3NyY19saXN0ICRjZmlsZSIKICAgc2VjdXJpdHlfc3JjX2xpc3Q9IiRzZWN1cml0eV9zcmNfbGlzdCAkY2ZpbGUiCiAgIHNlY3VyaXR5X2hkcl9saXN0PSIkc2VjdXJpdHlfaGRyX2xpc3QgJGhmaWxlIgogICBzZWN1cml0eV9vYmpfbGlzdD0iJHNlY3VyaXR5X29ial9saXN0IHNubXAiJGkiLm8iCiAgIHNlY3VyaXR5X2xvYmpfbGlzdD0iJHNlY3VyaXR5X2xvYmpfbGlzdCBzbm1wIiRpIi5sbyIKLSAgZGVmX25hbWU9Ik5FVFNOTVBfU0VDTU9EXyJgZWNobyAkaSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AKKyAgc2VjdXJpdHlfZnRvYmpfbGlzdD0iJHNlY3VyaXR5X2Z0b2JqX2xpc3Qgc25tcCIkaSIuZnQiCiAgIGVjaG8gImluaXRfIiRpIigpOyIgPj4gJHNlY3VyaXR5X2luaXRfZmlsZQorICBlY2hvICJzaHV0ZG93bl8iJGkiKCk7IiA+PiAkc2VjdXJpdHlfc2h1dGRvd25fZmlsZQogICBlY2hvICIjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS8kaGZpbGU+IiA+PiAkc2VjdXJpdHlfaW5jbF9maWxlCisgIGRlZl9uYW1lPSJgJGFzX2VjaG8gIk5FVFNOTVBfU0VDTU9EXyRpIiB8ICRhc190cl9jcHBgIgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lICRkZWZfbmFtZSAxCiBfQUNFT0YKQEAgLTI1NTk5LDggKzE4OTMzLDEwIEBACiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV3X3dpdGhfc2VjdXJpdHkiID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ld193aXRoX3NlY3VyaXR5IiA+JjYKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ld193aXRoX3NlY3VyaXR5IiA+JjUKKyRhc19lY2hvICIkbmV3X3dpdGhfc2VjdXJpdHkiID4mNjsgfQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUHYzIFNlY3VyaXR5IE1vZHVsZXM6ICAgICRuZXdfd2l0aF9zZWN1cml0eQpAQCAtMjU2MTEsMzIgKzE4OTQ3LDM0IEBACiAjIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIEtTTSB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBzdXBwb3J0CiAjCiAKLWFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD1ubwogcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0KIGFscmVhZHlfY2hlY2tlZF9rcmI1PW5vCiAKIGZvciBzZWMgaW4gJG5ld193aXRoX3NlY3VyaXR5CiBkbwotICBpZiB0ZXN0ICJ4JHNlYyIgPSAieGtzbSIgLWEgInh5ZXMiID0gIngkYWxyZWFkeV9jaGVja2VkX2tyYjUiOyB0aGVuCi0gICAgY29udGludWUKKyAgaWYgdGVzdCAieCRzZWMiID0gInhrc20iOyB0aGVuCisgICAgaWYgdGVzdCAieHllcyIgPSAieCRhbHJlYWR5X2NoZWNrZWRfa3JiNSI7IHRoZW4KKyAgICAgIGNvbnRpbnVlCisgICAgZWxzZQorICAgICAgYWxyZWFkeV9jaGVja2VkX2tyYjU9eWVzCisgICAgZmkKICAgZmkKLSAgYWxyZWFkeV9jaGVja2VkX2tyYjU9eWVzCiAKICAgaWYgdGVzdCB4JHNlYyAhPSB4a3NtOyB0aGVuCiAgICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkgJHNlYyIKICAgZWxzZQogICAgIGlmIHRlc3Qgbm8gPSAkdHJ5a3JiNTsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc20iID4mNQotZWNobyAiJGFzX21lOiBjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbSIgPiY2O30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc20iID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc20iID4mNjt9CiAgICAgICBjb250aW51ZQogICAgIGZpCiAKICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImtyYjUtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBrcmI1LWNvbmZpZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9rcmI1X2NvbmZpZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfa3JiNV9jb25maWcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRrcmI1X2NvbmZpZyBpbgogICBbXFwvXSogfCA/OltcXC9dKikKQEAgLTI1NjQ5LDMwICsxODk4NywzMSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3BhdGhfa3JiNV9jb25maWc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiAgIHRlc3QgLXogIiRhY19jdl9wYXRoX2tyYjVfY29uZmlnIiAmJiBhY19jdl9wYXRoX2tyYjVfY29uZmlnPSJubyIKICAgOzsKIGVzYWMKIGZpCiBrcmI1X2NvbmZpZz0kYWNfY3ZfcGF0aF9rcmI1X2NvbmZpZwotCiBpZiB0ZXN0IC1uICIka3JiNV9jb25maWciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRrcmI1X2NvbmZpZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0ka3JiNV9jb25maWciID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGtyYjVfY29uZmlnIiA+JjUKKyRhc19lY2hvICIka3JiNV9jb25maWciID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCisKICAgICBpZiB0ZXN0IG5vICE9ICRrcmI1X2NvbmZpZzsgdGhlbgogICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJGtyYjVfY29uZmlnIC0tY2ZsYWdzYCIKICAgICAgIExJQlM9IiRMSUJTIGAka3JiNV9jb25maWcgLS1saWJzYCIKQEAgLTI1NzAwLDc2ICsxOTAzOSw0OCBAQAogCiAgICAgZmkKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3JiNSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrcmI1Li4uICRFQ0hPX0MiID4mNgotICAgIGlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9rcmI1K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Iga3JiNSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Iga3JiNS4uLiAiID4mNjsgfQorICAgIGlmICR7YWNfY3ZfaGF2ZV9rcmI1Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGtyYjUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrcmI1Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGtyYjUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sa3JiNS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sa3JiNSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGtyYjVfaW5pdF9jb250ZXh0ICgpOwogaW50CiBtYWluICgpCiB7Ci1rcmI1X2luaXRfY29udGV4dCAoKTsKK3JldHVybiBrcmI1X2luaXRfY29udGV4dCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQ9bm8KKyAgYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCIgPSB4eWVzOyB0aGVuIDoKICAgYWNfY3ZfaGF2ZV9rcmI1PXllcwogZWxzZQogICBhY19jdl9oYXZlX2tyYjU9bm8KQEAgLTI1NzgyLDI5ICsxOTA5MywyMyBAQAogCiAgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9rcmI1ID0gbm87IHRoZW4KICAgICAgIGlmIHRlc3QgIngkYXNrZWRrcmI1IiA9ICJ4eWVzIjsgdGhlbgotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFza2VkIHRvIHVzZSBrcmI1IGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFza2VkIHRvIHVzZSBrcmI1IGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJYXNfZm5fZXJyb3IgJD8gIkFza2VkIHRvIHVzZSBrcmI1IGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiAiJExJTkVOTyIgNQogICAgICAgZmkKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLiBkaXNhYmxpbmcga3NtIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vLiBkaXNhYmxpbmcga3NtIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBuby4gZGlzYWJsaW5nIGtzbSIgPiY1CiskYXNfZWNobyAibm8uIGRpc2FibGluZyBrc20iID4mNjsgfQogICAgICAgY29udGludWUKICAgICBmaQogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KICAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSBrc20iCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGhlaW1kYWwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaGVpbWRhbC4uLiAkRUNIT19DIiA+JjYKLSAgICBpZiB0ZXN0ICIke2FjX2N2X2hlaW1kYWwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBoZWltZGFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBoZWltZGFsLi4uICIgPiY2OyB9CisgICAgaWYgJHthY19jdl9oZWltZGFsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxrcmI1Lmg+CiBpbnQKQEAgLTI1ODE1LDQ1ICsxOTEyMCwyMCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9oZWltZGFsPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWltZGFsPW5vCisgIGFjX2N2X2hlaW1kYWw9bm8KIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWltZGFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWltZGFsIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlaW1kYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWltZGFsIiA+JjY7IH0KICAgICBpZiB0ZXN0ICRhY19jdl9oZWltZGFsID0geWVzOyB0aGVuCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMIDEKLV9BQ0VPRgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMIDEiID4+Y29uZmRlZnMuaAogCiAgICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCiAJTElCUz0iJExJQlMgLWxrcmI1IC1sYXNuMSAtbGNvbV9lcnIgLWxyb2tlbiIKQEAgLTI1ODYyLDE3MSArMTkxNDIsNTEgQEAKIAlMSUJTPSIkTElCUyAtbGtyYjUgLWxjb21fZXJyIgogICAgIGZpCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZS4uLiAkRUNIT19DIiA+JjYKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtyYjVfY19lbmNyeXB0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtyYjVfY19lbmNyeXB0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZS4uLiAiID4mNjsgfQorICAgIGlmICR7YWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUga3JiNV9jX2VuY3J5cHQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBrcmI1X2NfZW5jcnlwdC4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBrcmI1X2NfZW5jcnlwdCBpbm5vY3VvdXNfa3JiNV9jX2VuY3J5cHQKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIga3JiNV9jX2VuY3J5cHQgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYga3JiNV9jX2VuY3J5cHQKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrcmI1X2NfZW5jcnlwdCAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9rcmI1X2NfZW5jcnlwdCkgfHwgZGVmaW5lZCAoX19zdHViX19fa3JiNV9jX2VuY3J5cHQpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGtyYjVfY19lbmNyeXB0OwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGtyYjVfY19lbmNyeXB0OwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQgPSB5ZXM7IHRoZW4KLQotICAgIGlmIHRlc3QgIiR7YWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrNWNyeXB0byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGs1Y3J5cHRvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrNWNyeXB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrNWNyeXB0by4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGs1Y3J5cHRvICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIga3JiNV9pbml0X2NvbnRleHQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWtyYjVfaW5pdF9jb250ZXh0ICgpOworcmV0dXJuIGtyYjVfaW5pdF9jb250ZXh0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0PW5vCisgIGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0IiA9IHh5ZXM7IHRoZW4gOgogICBhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9eWVzCiBlbHNlCi0gIGFjX2N2X01JVF9ORVdfQ1JZUFRvPW5vCisgIGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD1ubwogCiBmaQogCkBAIC0yNjAzNSwyNyArMTkxOTUsMTIxOCBAQAogCiAKICAgICBpZiB0ZXN0IHllcyA9ICRhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5ldyBNSVQgY3J5cHRvIEFQSSIgPiY1Ci1lY2hvICIke0VDSE9fVH1uZXcgTUlUIGNyeXB0byBBUEkiID4mNgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUIDEKLV9BQ0VPRgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5ldyBNSVQgY3J5cHRvIEFQSSIgPiY1CiskYXNfZWNobyAibmV3IE1JVCBjcnlwdG8gQVBJIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUIDEiID4+Y29uZmRlZnMuaAogCiAgICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCiAJTElCUz0iJExJQlMgLWxrNWNyeXB0byIKICAgICAgIGZpCiAgICAgZWxzZQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogb2xkIE1JVCBjcnlwdG8gQVBJIiA+JjUKLWVjaG8gIiR7RUNIT19UfW9sZCBNSVQgY3J5cHRvIEFQSSIgPiY2Ci1maQotCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2xkIE1JVCBjcnlwdG8gQVBJIiA+JjUKKyRhc19lY2hvICJvbGQgTUlUIGNyeXB0byBBUEkiID4mNjsgfQogICAgIGZpCisgICAgZm9yIGFjX2Z1bmMgaW4ga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleSIgImFjX2N2X2Z1bmNfa3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2tyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleSIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0tSQjVfQVVUSF9DT05fR0VUU0VORFNVQktFWSAxCitfQUNFT0YKKworZmkKK2RvbmUKKwogICBmaQogZG9uZQogCiBuZXdfd2l0aF9zZWN1cml0eT0kcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eQogCiAjCisjIERldGVjdCBsbV9zZW5zb3JzIHZlcnNpb24KKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA9ICJ4eWVzIjsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInNlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlcyIgImFjX2N2X2hhdmVfZGVjbF9zZW5zb3JzX2dldF9hbGxfc3ViZmVhdHVyZXMiICIjaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zZW5zb3JzX2dldF9hbGxfc3ViZmVhdHVyZXMiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9TRU5TT1JTX0dFVF9BTExfU1VCRkVBVFVSRVMgJGFjX2hhdmVfZGVjbAorX0FDRU9GCitpZiB0ZXN0ICRhY19oYXZlX2RlY2wgPSAxOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfU0VOU09SU19WMyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZmkKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyB0aGF0IGFyZSBydW4KKyMgYmVmb3JlIHRoZSBhZ2VudCBtb2R1bGUgdGVzdHMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIworIyAgIFJQTSBjaGVja3MKKyMKKyMjCitmb3IgYWNfaGVhZGVyIGluIHJwbS9ycG1saWIuaCBycG0vaGVhZGVyLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicnBtL3JwbWxpYi5oIiAiYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiA9IHh5ZXM7IHRoZW4gOgorICBycG1saWJfaD15ZXMKK2Vsc2UKKyAgcnBtbGliX2g9bm8KK2ZpCisKKworYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInJwbS9oZWFkZXIuaCIgImFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgcnBtaGVhZGVyX2g9eWVzCitlbHNlCisgIHJwbWhlYWRlcl9oPW5vCitmaQorCisKKworaWYgdGVzdCAieCRycG1oZWFkZXJfaCIgPSAieG5vIiAtbyAieCRycG1saWJfaCIgPSAieG5vIiA7IHRoZW4KKyAgaWYgdGVzdCAieCR3aXRoX3JwbSIgPSAieHllcyIgOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIGVpdGhlciB0aGUgUlBNIGhlYWRlciBmaWxlcyBuZWVkZWQgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIFJQTSBzdXBwb3J0IiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgd2l0aF9ycG09bm8KKyAgZmkKK2ZpCisKKyMKKyMgcnBtIGxpYnJhcmllcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBzb2Z0d2FyZQorIyBpbnN0YWxsZWQgdGFibGVzIChvbiBsaW51eCBpbiBwYXJ0aWN1bGFyKQorIworaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgIyBBUkcuICBSUE0gaXMgYSByZWFsIHBhaW4uCisgICMgRldJVyBsaWJycG0ubGEsIGxpYnJwbWlvLmxhLCBhbmQgbGlicG9wdC5sYSBoYXZlIGNvcnJlY3QgZGVwZW5kZW5jaWVzLgorICBfcnBtbGlicz0iIgorCisgICMgcnBtLTQuMC54IG5lZWRzIHJwbWlvLgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbUdldFBhdGgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1HZXRQYXRoLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRfcnBtbGlicyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICRMTUlCTElCUyAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbUdldFBhdGggKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1HZXRQYXRoICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHJwbWlvIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1HZXRQYXRoICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtR2V0UGF0aCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisKKyAgIyBycG0tNC4wLjMgbGlicnBtZGIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkLgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbWRiT3BlbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbWRiT3Blbi4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRfcnBtbGlicyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICRMTUlCTElCUyAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbWRiT3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbWRiT3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBycG1kYiA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtZGJPcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtZGJPcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlicyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisgICMgbm93IGNoZWNrIGZvciBycG0gdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcmllcy4KKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1SZWFkQ29uZmlnRmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1SZWFkQ29uZmlnRmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlicys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkX3JwbWxpYnMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAkTE1JQkxJQlMgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1SZWFkQ29uZmlnRmlsZXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1SZWFkQ29uZmlnRmlsZXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcnBtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1SZWFkQ29uZmlnRmlsZXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1SZWFkQ29uZmlnRmlsZXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlic30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBfcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJSUE0gMSIgPj5jb25mZGVmcy5oCisKKyAgICBMTUlCTElCUz0iJF9ycG1saWJzICRMTUlCTElCUyIKKworCisgZmkKKworCisgICMgcnBtIDQuNiBoYXMgaW5jb21wYXRpYmxlIEFQSSwgdHVybiBvbiB0aGUgbGVnYWN5IG9uZQorICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJoZWFkZXJHZXRFbnRyeSIgImFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeSIgIiNpbmNsdWRlIDxycG0vcnBtbGliLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5IiA9IHh5ZXM7IHRoZW4gOgorICA6CitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIF9SUE1fNF80X0NPTVBBVCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworZmkKKworIworIyBnZXRmc3N0YXQvZ2V0dmZzc3RhdAorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGZzc3RhdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGZzc3RhdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZ2V0ZnNzdGF0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0ZnNzdGF0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0ZnNzdGF0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIG5idXRpbDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9nZXRmc3N0YXQ9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9nZXRmc3N0YXQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2dldGZzc3RhdCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2dldGZzc3RhdD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2dldGZzc3RhdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRmc3N0YXQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZ2V0ZnNzdGF0CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2ZvciBhY19mdW5jIGluIGdldGZzc3RhdAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRmc3N0YXQiICJhY19jdl9mdW5jX2dldGZzc3RhdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRmc3N0YXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRGU1NUQVQgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK2ZvciBhY19mdW5jIGluIGdldHZmc3N0YXQKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0dmZzc3RhdCIgImFjX2N2X2Z1bmNfZ2V0dmZzc3RhdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXR2ZnNzdGF0IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUVkZTU1RBVCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworIyBnZXRtbnRlbnQgaXMgaW4gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBvbiBVTklDT1MsIGluIC1sc3VuIG9uIElyaXggNCwKKyMgLWxzZXEgb24gRHluaXgvUFRYLCAtbGdlbiBvbiBVbml4d2FyZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRtbnRlbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRtbnRlbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2dldG1udGVudCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldG1udGVudCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdldG1udGVudCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBzdW4gc2VxIGdlbjsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQ9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9nZXRtbnRlbnQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2dldG1udGVudCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2dldG1udGVudD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2dldG1udGVudCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZ2V0bW50ZW50CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisgIGFjX2N2X2Z1bmNfZ2V0bW50ZW50PXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVE1OVEVOVCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBhY19jdl9mdW5jX2dldG1udGVudD1ubworZmkKKworCisKKyMKKyMga2luZm9fZ2V0X2NwdXMKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBraW5mb19nZXRfY3B1cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGtpbmZvX2dldF9jcHVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGtpbmZvX2dldF9jcHVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga2luZm9fZ2V0X2NwdXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycga2luZm87IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXM9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cys6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cz1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2ZvciBhY19mdW5jIGluIGtpbmZvX2dldF9jcHVzCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImtpbmZvX2dldF9jcHVzIiAiYWNfY3ZfZnVuY19raW5mb19nZXRfY3B1cyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19raW5mb19nZXRfY3B1cyIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0tJTkZPX0dFVF9DUFVTIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMKKyMgZGlza0lPTEF4IHJlcXVpcmVzIGV4cCB3aGljaCBtYXkgcmVxdWlyZSAtbG0KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBleHAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBleHAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2V4cCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGV4cCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGV4cCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBtOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2V4cD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2V4cCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZXhwKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfZXhwPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZXhwIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2V4cCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9leHAKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworCisjCisjICAgbGlia3ZtCisjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX3JlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fcmVhZC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTEFHRU5UTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9yZWFkICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX3JlYWQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3ZtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fcmVhZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9yZWFkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMQUdFTlRMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9vcGVuZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fb3BlbmZpbGVzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExBR0VOVExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fb3BlbmZpbGVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX29wZW5maWxlcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrdm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9vcGVuZmlsZXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fb3BlbmZpbGVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTEFHRU5UTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0cHJvY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0cHJvY3MuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0cHJvY3MgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0cHJvY3MgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3ZtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0cHJvY3MgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0cHJvY3MgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0cHJvYzIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0cHJvYzIuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0cHJvYzIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0cHJvYzIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3ZtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0cHJvYzIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0cHJvYzIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0c3dhcGluZm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fZ2V0c3dhcGluZm8uLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0c3dhcGluZm8gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0c3dhcGluZm8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3ZtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fZ2V0c3dhcGluZm8gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fZ2V0c3dhcGluZm8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMQUdFTlRMSUJTICRMTUlCTElCUyAkTElCUyIKK2ZvciBhY19mdW5jIGluIGt2bV9vcGVuZmlsZXMga3ZtX2dldHByb2NzIGt2bV9nZXRwcm9jMiBrdm1fZ2V0c3dhcGluZm8KK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKKyMKKyMgICBkeW5hbWljIG1vZHVsZSBzdXBwb3J0CisjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGxvcGVuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGxvcGVuLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gJExBR0VOVExJQlMgJExTTk1QTElCUyAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBkbCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTE1JQkxJQlMgJExBR0VOVExJQlMgJExTTk1QTElCUyAkTElCUyIKK2ZvciBhY19mdW5jIGluIGRsb3BlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ETE9QRU4gMQorX0FDRU9GCisKK2ZpCitkb25lCisKK0xJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworIyAtKi0gYXV0b2NvbmYgLSotCisjCiAjIGdlbmVyYXRlIGVtcHR5IGZpbGVzCiAjCiAjIENyZWF0ZSBpbmNsdWRlIGZpbGUgbGlzdCBmb3Igc25tcF92YXJzLmggdG8gdXNlLgpAQCAtMjYwODEsMTEgKzIwNDMyLDExIEBACiAjCiAjIERvIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nLgogIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2UuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlLi4uICIgPiY2OyB9CiAKICMgc2V0IHVwIHRoZSBDUFAgY29tbWFuZAotTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgLUkke3NyY2Rpcn0vaW5jbHVkZSAtSSR7c3JjZGlyfS9hZ2VudC9taWJncm91cCIKK01PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTICRDUFBGTEFHUyAtRE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAtSSR7c3JjZGlyfS9pbmNsdWRlIC1JJHtzcmNkaXJ9L2FnZW50L21pYmdyb3VwIgogaWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgogICBNT0RVTEVDUFA9IiRNT0RVTEVDUFAgLURORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMiCiBmaQpAQCAtMjYwOTMsOCArMjA0NDQsOCBAQAogbW9kdWxlX2xpc3Q9IiIKIG1pYl9tb2R1bGVfbGlzdD0iIgogYWdlbnRfbW9kdWxlX2xpc3Q9IiIKLW5ld193aXRoX21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX21pYl9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfb3V0X21pYl9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCituZXdfd2l0aF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9taWJfbW9kdWxlcyB8ICRTRUQgJ3MvLC8gL2c7J2AKK25ld193aXRoX291dF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9vdXRfbWliX21vZHVsZXMgfCAkU0VEICdzLywvIC9nOydgCiAKICMgc2V0IHVwIGluaXRpYWwgbW9kdWxlIGxpc3QKIG5ld19tb2R1bGVfbGlzdD0iJG5ld193aXRoX21pYl9tb2R1bGVzIGRlZmF1bHRfbW9kdWxlcyIKQEAgLTI2MTE2LDI1ICsyMDQ2NywyMyBAQAogIyByZW1vdmUgbW9kdWxlcyB0aGF0IHdlcmUgZXhwbGljaXRseSBleGNsdWRlZAogZm9yIGkgaW4gJHRlc3RfbW9kdWxlcwogIGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCiAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBpcyBib3RoIGluY2x1ZGVkIGFuZCBleGNsdWRlZC4iCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBjb25mbGljdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgY29uZmxpY3QiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGNvbmZsaWN0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgY29uZmxpY3QiID4mMjt9CiAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXMiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlcyIgPiYyO30KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3QiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0IiA+JjI7fQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjI7fQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiID4mMjt9Ci0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkbWliX2NmZ19tc2ciID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3QiID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXMiID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIgPiYyO30KKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkbWliX2NmZ19tc2ciICIkTElORU5PIiA1CiAgICAgZWxzZQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZCIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWQiID4mMjt9CiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICAqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2cgSXQgaGFzIGJlZW4gZXhjbHVkZWQuCkBAIC0yNjE0Niw4ICsyMDQ5NSwxMCBAQAogICBmaQogZG9uZQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV3X21vZHVsZV9saXN0LiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV3X21vZHVsZV9saXN0LiIgPiY2CituZXdfbW9kdWxlX2xpc3Q9YChlY2hvICRuZXdfbW9kdWxlX2xpc3QgfCB0ciAnICcgJ1xuJyB8IHNvcnQgfCB0ciAnXG4nICcgJzsgZWNobyAnJykgfCAkU0VEICdzLyAkLy8nYAorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ld19tb2R1bGVfbGlzdC4iID4mNQorJGFzX2VjaG8gIiRuZXdfbW9kdWxlX2xpc3QuIiA+JjY7IH0KIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBsb29wIG92ZXIgbW9kdWxlIGxpc3QKQEAgLTI2MjE2LDE0ICsyMDU2NywxNCBAQAogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgZmlndXJlIG91dCB3aGljaCBzdWItYmxvY2tzIHRvIGJ1aWxkIGluIHBhcnRzCi0gICAgaWYgZWNobyAiJGoiIHwgZ3JlcCAiPSIgOyB0aGVuCisgICAgaWYgZWNobyAiJGoiIHwgJEdSRVAgIj0iIDsgdGhlbgogICAgICAgICMgYnVpbGQgYSBzaGFyZWQgb2JqZWN0IGZpbGUKICAgICAgICAjIGZvcm1hdDogc29maWxlbmFtZT1tb2R1bGUxOm1vZHVsZTIKICAgICAgICAjIFhYWDogY3VycmVudGx5IGRvZXNuJ3QgZG8gdGhpcwotICAgICAgIGRsX25hbWU9YGVjaG8gJGogfCBzZWQgJ3MvPS4qLy8nYAorICAgICAgIGRsX25hbWU9YGVjaG8gJGogfCAkU0VEICdzLz0uKi8vJ2AKICAgICAgICBkbF9uYW1lcz0iJGRsX25hbWVzICRkbF9uYW1lIgotICAgICAgIGRsX29iamVjdHM9YGVjaG8gJGogfCBzZWQgJ3MvLio9Ly8nYAotICAgICAgIG1vZHVsZV9zdWJsaXN0PWBlY2hvICRkbF9vYmplY3RzIHwgc2VkICdzLzovIC9nJ2AKKyAgICAgICBkbF9vYmplY3RzPWBlY2hvICRqIHwgJFNFRCAncy8uKj0vLydgCisgICAgICAgbW9kdWxlX3N1Ymxpc3Q9YGVjaG8gJGRsX29iamVjdHMgfCAkU0VEICdzLzovIC9nJ2AKICAgICAgICBzYXZlZF9zdWJsaXN0PSIiCiAgICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIiCiAgICAgICAgb3V0cHV0X3RvPXNlcGFyYXRlCkBAIC0yNjI2MywxMSArMjA2MTQsOCBAQAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAjIGJ1aWxkIGEgcHNldWRvIGluY2x1ZGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgY3VycmVudCBjb25maWcgYW5kCiAgICAgIyBzeXN0ZW0gc3ltYm9sczoKLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQpAQCAtMjYyODEsMTAgKzIwNjI5LDEyIEBACiAgICAgIyAgICAgLSBtaWJfbW9kdWxlICAgPT4gbGlibmV0c25tcG1pYnMgICAoZGVmYXVsdCkKICAgICAjICAgICAtIGFnZW50X21vZHVsZSA9PiBsaWJuZXRzbm1wYWdlbnQKICAgICAjCisKICAgICBtb2R1bGVfdHlwZT1taWJfbW9kdWxlCiAgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuaDsgdGhlbgogCi0gICAgICBtb2R1bGVfdHlwZT1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYmVsb25nc19pbiB8IHNlZCAnc0AuKmNvbmZpZ19iZWxvbmdzX2luKFwoW14pXSpcKSkuKkBcMUAnYAorICAgICAgbW9kdWxlX3R5cGU9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzQC4qY29uZmlnX2JlbG9uZ3NfaW4oXChbXildKlwpKS4qQFwxQHAnYAogCiAgICAgZmkKICAgICBpZiB0ZXN0ICJ4JG1vZHVsZV90eXBlIiA9ICJ4IiA7IHRoZW4KQEAgLTI2MzAxLDcgKzIwNjUxLDcgQEAKICAgICBkYmxmaXg9IiIKICAgICBmb3IgZGx0ZXN0IGluICRkbF9uYW1lcyA7IGRvCiAgICAgICBldmFsIG1vZF9maWxlcz0iXCJcJGRsXyR7ZGx0ZXN0fV9maWxlc1wiIgotICAgICAgaWYgZWNobyAiICRtb2RfZmlsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiBlY2hvICIgJG1vZF9maWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICMgc29tZSBkbGwgbW9kdWxlIGhhcyBhbHJlYWR5IHNlZW4gdGhpcywgdW5sb2FkIGl0IGZyb20gdGhhdCBsaXN0CiAgICAgICAgICMgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIGNvcmUgKGFnYWluKQogCkBAIC0yNjMxMCw3ICsyMDY2MCw3IEBACiAgIGZpCiAKIAotICAgICAgICBtb2RfZmlsZXM9YGVjaG8gIiAkbW9kX2ZpbGVzICIgfCBzZWQgInNAICRpIEBAImAKKyAgICAgICAgbW9kX2ZpbGVzPWBlY2hvICIgJG1vZF9maWxlcyAiIHwgJFNFRCAic0AgJGkgQEAiYAogICAgICAgICBkYmxmaXg9Il9fWFhYX18iCiAgICAgICAgIGV2YWwgImRsXyR7ZGx0ZXN0fV9maWxlcz1cIiRtb2RfZmlsZXNcIiIKIApAQCAtMjYzMzIsNyArMjA2ODIsNyBAQAogCSMgQWRkaW5nIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9yZGVyZWQgc3BvdCB3b3VsZCBiZSBhCiAJIyBuaWdodG1hcmUuICBPaywgd2UncmUgYWxyZWFkeSBpbiBuaWdodG1hcmUgY29kZSBzbyB0aGF0CiAJIyB3b2x1ZCBoYXZlIHRvIGJlIGEgbmlnaHQtdGVycm9yLgotICAgICAgICBtbm09YGVjaG8gJGkgfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisgICAgICAgIG1ubT1gZWNobyAkaSB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCiAJb3V0cHV0X2luaXRzX3RtcD0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbml0cy5oIgogCWVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzX3RtcAogICAgICAgICAjIFhYWDogZXZlbiB3b3JzZSwgd2UgbG9vc2Ugd2hldGhlciB0aGUgaGVhZGVyIGlzIG5lZWRlZCBvciBub3QuCkBAIC0yNjM1MSwxNCArMjA3MDEsMTQgQEAKICAgZmkKIAogCi0gICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCiAgICAgZWNobyAiJGkgd2FzIGV4Y2x1ZGVkIgogICBmaQogCiAKLSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCiAgICAgZWNobyAiJGkgYWxyZWFkeSB0ZXN0ZWQiCkBAIC0yNjM4NCw3ICsyMDczNCw5IEBACiAgICAgICAJIwogICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgY29uZmxpY3RzCiAgICAgICAgICMKLQluZXdfbGlzdF9leGNsPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19leGNsdWRlIHwgc2VkICdzLy4qY29uZmlnX2V4Y2x1ZGUoXCguKlwpKS4qL1wxLydgCisKKyAgICAgICAgbmV3X2xpc3RfZXhjbD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2V4Y2x1ZGUoXCguKlwpKS4qL1wxL3AnYAogCWlmIHRlc3QgIngkbmV3X2xpc3RfZXhjbCIgIT0gIngiOyB0aGVuCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgpAQCAtMjYzOTQsMTcgKzIwNzQ2LDE1IEBACiAKIAkgIGZvciBqIGluICRuZXdfbGlzdF9leGNsCiAJICAgIGRvCi0JICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19taWJfbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X21pYl9tb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBleGNsdWRlcyBtb2R1bGUgJyRqJyBidXQgYW5vdGhlciBtb2R1bGUgcmVxdWlyZXMgaXQiCi0gICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KICAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotCSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRtaWJfY2ZnX21zZyIgIiRMSU5FTk8iIDUKICAgICAgICAgICAgICAgZWxzZQotCSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjI7fQorCSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjI7fQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnCkBAIC0yNjQzMCwxOCArMjA3ODAsMjAgQEAKICAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZXF1aXJlbWVudHMKICAgICAgICAgIwogCi0gICAgICAgIG5ld19saXN0X2FyY2g9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2FyY2hfcmVxdWlyZSB8IHNlZCAncy8uKmNvbmZpZ19hcmNoX3JlcXVpcmUoICpcKFteIF0qXCkgKiwgKlwoW14gXSpcKSAqKS4qL1wxLXhhcmNoeC1cMi8nYAorCisgICAgICAgIG5ld19saXN0X2FyY2g9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19hcmNoX3JlcXVpcmUoICpcKFteIF0qXCkgKiwgKlwoW14gXSpcKSAqKS4qL1wxLXhhcmNoeC1cMi9wJ2AKIAogCWlmIHRlc3QgIngkbmV3X2xpc3RfYXJjaCIgIT0gIngiOyB0aGVuCiAgICAgICAgICAgZm9yIGogaW4gJG5ld19saXN0X2FyY2gKIAkgICAgZG8KLQkgICAgYXJjaHRlc3Q9YGVjaG8gJGogfCBzZWQgJ3MvLXhhcmNoeC0uKi8vJ2AKKwkgICAgYXJjaHRlc3Q9YGVjaG8gJGogfCAkU0VEICdzLy14YXJjaHgtLiovLydgCiAJICAgICMgdGFyZ2V0X29zIG1heSBoYXZlIGJlZW4gY2hhbmdlZCB0byBhICNkZWZpbmUgb2YgMS4uLgogCSAgICBpZiB0ZXN0ICJ4JGFyY2h0ZXN0IiA9ICJ4MSIgLW8gIngkdGFyZ2V0X29zIiA9ICJ4JGFyY2h0ZXN0IiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gIngkYXJjaHRlc3QiOyB0aGVuCi0JICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgZWNobyAkaiB8IHNlZCAncy8uKi14YXJjaHgtLy8nYCIKKwkgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGBlY2hvICRqIHwgJFNFRCAncy8uKi14YXJjaHgtLy8nYCIKIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCi0gICAgZWNobyAiICRpIHJlcXVpcmVkIGFkZGluZyBhcmNoIGZpbGVzOiBgZWNobyAkaiB8IHNlZCAncy8uKi14YXJjaHgtLy8nYCIKKyAgICBlY2hvICIgJGkgcmVxdWlyZWQgYWRkaW5nIGFyY2ggZmlsZXM6IGBlY2hvICRqIHwgJFNFRCAncy8uKi14YXJjaHgtLy8nYCIKICAgZmkKIAogCkBAIC0yNjQ1NiwxMiArMjA4MDgsNTkgQEAKIAogCiAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfdmVyc2lvbl9yZXF1aXJlKChiYXNlLCB2ZXJzaW9uLCB2ZXJzaW9uLW1vZHVsZXMsIC4uLikpCisgICAgICAJIyAgLSBsaXN0cyBhbHRlcm5hdGl2ZSBtb2R1bGVzIHVzZWQgZnJvbSBkaWZmZXJlbnQgdmVyc2lvbnMuCisgICAgICAgICMKKworICAgICAgICBuZXdfbGlzdF9hbHQzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAkQVdLICcKKyAgICAgICAgICAgICAgICBCRUdJTiB7CisgICAgICAgICAgICAgICAgICAgIGlmKCInIiRlbmFibGVfbmV3X2ZlYXR1cmVzIiciID09ICJ5ZXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgiOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCInIiRlbmFibGVfb2xkX2ZlYXR1cmVzIiciID09ICJ5ZXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgtbGVzcyI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4LWxlc3MtZXF1YWwiOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIuIjsKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQoIiciJHdpdGhfZmVhdHVyZXNfb2YiJyIsIGEpOworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPXNwcmludGYoIiUwM2QlMDNkJTAzZCUwM2QiLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgL2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUvIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiXi4qY29uZmlnX3ZlcnNpb25fcmVxdWlyZSAqXFxcXChcXFxcKCIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiXFxcXClcXFxcKS4qJCIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiLCAqIiwgIiwiKTsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLCI7CisgICAgICAgICAgICAgICAgICAgIG4gPSBzcGxpdCgkMCwgYSk7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIi4iOworICAgICAgICAgICAgICAgICAgICBhY3R2ZXIgPSAiMDAwMDAwMDAwMDAwIjsKKyAgICAgICAgICAgICAgICAgICAgYWN0c3RyID0gYVsxXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDwgbjsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdChhW2ldLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlcj1zcHJpbnRmKCIlMDNkJTAzZCUwM2QlMDNkIiwgYlsxXSwgYlsyXSwgYlszXSwgYls0XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VydmVyID4gYWN0dmVyICYmIChtZXRob2QgIT0gIm1heC1sZXNzIiB8fCBjdXJ2ZXIgPCB2ZXJzaW9uKSAmJiAobWV0aG9kICE9ICJtYXgtbGVzcy1lcXVhbCIgfHwgY3VydmVyIDw9IHZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dmVyID0gY3VydmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHN0ciA9IGFbaSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIiwgYWN0c3RyKTsKKyAgICAgICAgICAgICAgICB9J2AKKworICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCisgICAgZWNobyAiICRpIHJlcXVpcmVkIHZlcnNpb25lZCBmZWF0dXJlczogJG5ld19saXN0X2FsdDMiCisgIGZpCisKKworICAgICAgICBuZXdfbGlzdD0iJHtuZXdfbGlzdH0ke25ld19saXN0X2FsdDN9IgorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIAkjIG1hY3JvOiBjb25maWdfcmVxdWlyZShtb2R1bGVzKQogICAgICAgCSMgIC0gbGlzdHMgbW9kdWxlcyByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUKICAgICAgICAgIwogICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgb3RoZXIgcmVxdWlyZWQgbW9kdWxlcwogICAgICAgICAjCi0JbmV3X2xpc3Q9IiRuZXdfbGlzdCBgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfcmVxdWlyZSB8IHNlZCAncy8uKmNvbmZpZ19yZXF1aXJlKFwoLipcKSkuKi9cMS8nYCIKKworICAgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX3JlcXVpcmUoXCguKlwpKS4qL1wxL3AnYCIKIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCiAgICAgZWNobyAiICRpIHdpbGwgdGVzdDogJG5ld19saXN0IgpAQCAtMjY0NzgsMzAgKzIwODc3LDI2IEBACiAKIAogCSAgICBpZiB0ZXN0ICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmggLWEgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouYzsgdGhlbgotICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KLQkgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBtaWIgbW9kdWxlIFwiJGlcIiByZXF1aXJlcyBtb2R1bGUgXCIkalwiIGJ1dCAkai5oIG9yICRqLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBtaWIgbW9kdWxlIFwiJGlcIiByZXF1aXJlcyBtb2R1bGUgXCIkalwiIGJ1dCAkai5oIG9yICRqLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKwkgICAgICBhc19mbl9lcnJvciAkPyAibWliIG1vZHVsZSBcIiRpXCIgcmVxdWlyZXMgbW9kdWxlIFwiJGpcIiBidXQgJGouaCBvciAkai5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiICIkTElORU5PIiA1CisJICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICAgIGlmIHRlc3QgIngkaSIgIT0gInhkZWZhdWx0X21vZHVsZXMiIDsgdGhlbgogICAgICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgcmVxdWlyZXMgbW9kdWxlICckaicgYnV0IHNvbWVvbmUgdG9sZCBtZSB0byBjb21waWxlIHdpdGhvdXQgaXQiCi0gICAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CiAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRtaWJfY2ZnX21zZyIgIiRMSU5FTk8iIDUKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mMjt9CisgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mMjt9CiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICAqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2cKIEVPRgogCiAgICAgICAgICAgICAgICAgZmkKLSMJICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisjCSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KICMgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRqIGluY2x1ZGVkIHByZXZpb3VzbHkiKQogICAgICAgICAgICAgICBmaQogCSAgICBlbHNlCkBAIC0yNjUyMiwxNSArMjA5MTcsMTcgQEAKICAgICAgICAgIwogICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgbWlicyB0byBhZGQKICAgICAgICAgIwotCW5ld19taWJzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19hZGRfbWliIHwgc2VkICdzLy4qY29uZmlnX2FkZF9taWIoXCguKlwpKS4qL1wxLydgCisKKyAgICAgICAgbmV3X21pYnM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfYWRkX21pYihcKC4qXCkpLiovXDEvcCdgCiAJaWYgdGVzdCAieCRuZXdfbWlicyIgIT0gIngiOyB0aGVuCiAJICAgIGZvciBqIGluICRuZXdfbWlicwogCQlkbwotCQlpZiB0ZXN0ICJ4YGVjaG8gOiRkZWZhdWx0X21pYnM6IHwgZ3JlcCA6JGo6YCIgPSAieCI7IHRoZW4KKwkJaWYgdGVzdCAieGBlY2hvIDokZGVmYXVsdF9taWJzOiB8ICRHUkVQIDokajpgIiA9ICJ4IjsgdGhlbgogCQkgICAgZGVmYXVsdF9taWJzPSIkZGVmYXVsdF9taWJzOiRqIgogCQlmaQogCQlpZiB0ZXN0IC1mICRzcmNkaXIvbWlicy8kai50eHQ7IHRoZW4KLQkJICAgIGlmIGVjaG8gJGRlZmF1bHRfbWlic19pbnN0YWxsIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIGlmIGVjaG8gJGRlZmF1bHRfbWlic19pbnN0YWxsIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCiAJCQkgICAgOgogCQkgICAgZWxzZQogCQkJICAgIGRlZmF1bHRfbWlic19pbnN0YWxsPSIkZGVmYXVsdF9taWJzX2luc3RhbGwgJGoudHh0IgpAQCAtMjY1NjMsMTEgKzIwOTYwLDExIEBACiAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICMgY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGNvbmZpZ19sb2FkX21pYgogICAgICAgICAjCi0gICAgICAgIGlmICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2xvYWRfbWliID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KLSAgICAgIAkgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgXCIkaVwiIHVzZXMgdGhlIFwiY29uZmlnX2xvYWRfbWliXCIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIFwiJGlcIiB1c2VzIHRoZSBcImNvbmZpZ19sb2FkX21pYlwiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuIiA+JjI7fQorICAgICAgICBpZiAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCAtcSBjb25maWdfbG9hZF9taWI7IHRoZW4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKyAgICAgIAkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBcIiRpXCIgdXNlcyB0aGUgXCJjb25maWdfbG9hZF9taWJcIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIFwiJGlcIiB1c2VzIHRoZSBcImNvbmZpZ19sb2FkX21pYlwiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuIiA+JjI7fQogICAgICAgICBmaSAjIGdyZXAgY29uZmlnX2xvYWRfbWliCiAKICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2NTc1LDcgKzIwOTcyLDkgQEAKICAgICAgICAgIyAgKGdlbmVyYWxseSBub3QgdXNlZCBhbnkgbG9uZ2VyOyBvbGQgYXV0by1sb2FkIGEgLmNvbmYgdG9rZW4pCiAgICAgICAgICMKIAotICAgICAgICAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19wYXJzZV9kb3RfY29uZiB8IHNlZCAnc0AuKmNvbmZpZ19wYXJzZV9kb3RfY29uZihcKFteKV0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCkpLipAcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXBkIixcMSwgXDIsIFwzLCBcNCk7QCcgPj4gJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmgKKworICAgICAgICAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICRTRUQgLW4gJ3NALipjb25maWdfcGFyc2VfZG90X2NvbmYoXChbXildKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpKS4qQHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wZCIsXDEsIFwyLCBcMywgXDQpO0BwJyA+PiAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaAogCiAKICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY1ODQsMjAgKzIwOTgzLDIyIEBACiAgICAgICAgICMKICAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGVycm9ycywgb3Igd2FybmluZ3MKICAgICAgICAgIwotCWVycm9yPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19lcnJvciB8IHNlZCAncy8uKmNvbmZpZ19lcnJvcihcKC4qXCkpLiovXDEvJ2AKKworICAgICAgICBlcnJvcj1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19lcnJvcihcKC4qXCkpLiovXDEvcCdgCiAJaWYgdGVzdCAieCRlcnJvciIgIT0gIngiOyB0aGVuCiAgICAgICAgICAgZWNobwogICAgICAgICAgIGVjaG8KLSAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkaTogKioqICRlcnJvciAqKioiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJGk6ICoqKiAkZXJyb3IgKioqIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRpOiAqKiogJGVycm9yICoqKiIgIiRMSU5FTk8iIDUKICAgICAgICAgZmkKIAogICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAJIyBtYWNybzogY29uZmlnX3dhcm5pbmcod2FybmluZyB0ZXh0KQogICAgICAgCSMgIC0gdXNlZCB0byBzaWduYWwgYSBjb25maWd1cmF0aW9uICJ3YXJuaW5nIiB0byBiZSBwcmludGVkIHRvIHRoZSB1c2VyCiAgICAgICAgICMKLQl3YXJuaW5nPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ193YXJuaW5nIHwgc2VkICdzLy4qY29uZmlnX3dhcm5pbmcoXCguKlwpKS4qL1wxLydgCisKKyAgICAgICAgd2FybmluZz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX3dhcm5pbmcoXCguKlwpKS4qL1wxL3AnYAogCWlmIHRlc3QgIngkd2FybmluZyIgIT0gIngiOyB0aGVuCiAgICAgICAgICAgYWxsX3dhcm5pbmdzPSIkYWxsX3dhcm5pbmdzICR3YXJuaW5nCiAiCkBAIC0yNjYwNyw3ICsyMTAwOCw3IEBACiAgICAgICAjIENoZWNrIGZvciBhIC5jIGZpbGUgaWYgdGhlIC5oIGRpZG4ndCBleGlzdAogICAgICAgIwogICAgICAgZWxpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jOyB0aGVuCi0gICAgICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCBncmVwICIgJGkgICAgICAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRpICAgICAgIiA+IC9kZXYvbnVsbDsgdGhlbgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KICAgICBlY2hvICIgICRpIGFscmVhZHkgaW5jbHVkZWQiCkBAIC0yNjYyOSwxMSArMjEwMzAsOSBAQAogICAgICAgIyBObyAuaCBvciAuYyA9IGVycm9yISAgKHR5cG8/KQogICAgICAgIwogICAgICAgZWxzZSAjIG5vICRpLmggb3IgJGkuYwotICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBtb2R1bGUgZmlsZXMgJGkuaCBvciAkaS5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbW9kdWxlIGZpbGVzICRpLmggb3IgJGkuYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorCWFzX2ZuX2Vycm9yICQ/ICJtb2R1bGUgZmlsZXMgJGkuaCBvciAkaS5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiICIkTElORU5PIiA1CiAgICAgICBmaSAjIG5vICRpLmgKIAogICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2NjUwLDcgKzIxMDQ5LDcgQEAKICAgICAgICAgICBldmFsICJkbF8ke2RsX25hbWV9X2ZpbGVzPVwiXCRkbF8ke2RsX25hbWV9X2ZpbGVzICRpXCIiCiAgICAgICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIkc2F2ZWRfc3VibGlzdF9jb2RlICRpIgogICAgICAgICBmaQotICAgICAgICBtbm09YGVjaG8gJGkgfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisgICAgICAgIG1ubT1gZWNobyAkaSB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgogICAgIGVjaG8gLWUgIlxuY2hlY2tpbmcgJyRzcmNkaXIvJG1pYmRpci8kaS5jJyAoJG1ubS9gYmFzZW5hbWUgJGlgKSBDIGZpbGUgZm9yIGluaXQvc2h1dGRvd24iCkBAIC0yNjY1OCwxMyArMjEwNTcsMTEgQEAKIAogCiAgICAgICAgIGlmIHRlc3QgIngkbW5tIiAhPSAieGBiYXNlbmFtZSAkaWAiOyB0aGVuCi0gICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQotCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmZsaWN0aW5nIG5hbWVzOiAkbW5tICE9IFxgYmFzZW5hbWUgJGlcYCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25mbGljdGluZyBuYW1lczogJG1ubSAhPSBcYGJhc2VuYW1lICRpXGAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisJICAgYXNfZm5fZXJyb3IgJD8gImNvbmZsaWN0aW5nIG5hbWVzOiAkbW5tICE9IFxgYmFzZW5hbWUgJGlcYCIgIiRMSU5FTk8iIDUKICAgICAgICAgZmkKLSAgICAgICAgdGVtcF9pbml0PWBncmVwIGluaXRfJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyB8IGdyZXAgLXYgX2luaXRfJG1ubWAKKyAgICAgICAgdGVtcF9pbml0PWAkR1JFUCBpbml0XyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgfCAkR1JFUCAtdiBfaW5pdF8kbW5tYAogCWlmIHRlc3QgIngkdGVtcF9pbml0IiAhPSAieCI7IHRoZW4KIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCkBAIC0yNjY3NSw3ICsyMTA3Miw3IEBACiAgICAgICAgICAgICBuZWVkX2hlYWRlcj0xCiAJICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCiAJZmkKLQlncmVwIHNodXRkb3duXyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgPiAvZGV2L251bGwKKwkkR1JFUCBzaHV0ZG93bl8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jID4gL2Rldi9udWxsCiAgICAgICAgIGlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCiAgICAgICAgICAgICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KICAgICAgICAgICAgICAgZWNobyAtZSAiXG5hZGRpbmcgc2h1dGRvd25fJG1ubSgpIHRvIGxpc3QiCkBAIC0yNjY5OCw4ICsyMTA5NSw4IEBACiAgICAgICAjIGNoZWNrIGZvciBvdXRwdXQgZGlyZWN0b3J5IChmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiBzb3VyY2UgdHJlZQogICAgICAgIwogCi0gICAgICBpZiB0ZXN0ICJ4YGVjaG8gJGkgfCBzZWQgJ3MvXC8vL2c7J2AiICE9ICJ4JGkiOyB0aGVuCi0JbW5kPWBlY2hvICRpIHwgc2VkICdzL1wvW14vXSokLy87J2AKKyAgICAgIGlmIHRlc3QgInhgZWNobyAkaSB8ICRTRUQgJ3MvXC8vL2c7J2AiICE9ICJ4JGkiOyB0aGVuCisJbW5kPWBlY2hvICRpIHwgJFNFRCAncy9cL1teL10qJC8vOydgCiAJaWYgdGVzdCAhIC1kIC4vJG1pYmRpci8kbW5kOyB0aGVuCiAJICAgIG1vZHVsZV9kaXJlY3Rvcmllcz0iJG1vZHVsZV9kaXJlY3RvcmllcyAuLyRtaWJkaXIvJG1uZCIKIAlmaQpAQCAtMjY3MTAsNyArMjExMDcsNyBAQAogICAgICAgIyBkZWZpbmUgVVNJTkdfKl9NT0RVTEUKICAgICAgICMKIAotICAgICAgc3ltPSJgZWNobyAke2l9IHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nJyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AiCisgICAgICBzeW09ImBlY2hvICR7aX0gfCAkU0VEICdzL1teYS16QS1aMC05X10vXy9nJyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AiCiAKICAgICAgIGVjaG8gIi8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgJHtpfSBtb2R1bGUgZmlsZXMuICAqLyIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAogICAgICAgZWNobyAiI2RlZmluZSBVU0lOR18ke3N5bX1fTU9EVUxFIDEiID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKQEAgLTI2NzgyLDEyICsyMTE3OSwxMCBAQAogCiAgIGZvciBvZmlsZSBpbiAkb3V0cHV0X2luaXRzICRvdXRwdXRfaGRycyA7IGRvCiAgICAgaWYgdGVzdCAtZiAkb2ZpbGUgOyB0aGVuCi0gICAgICBpZiBncmVwICJ0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSIgJG9maWxlID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICBpZiAkR1JFUCAidGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUiICRvZmlsZSA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgogICAJOgogICAgICAgZWxzZQotICAJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJG9maWxlIGFscmVhZHkgZXhpc3RlZCA7IGNhbid0IGJ1aWxkIGRsbCBvYmplY3QgJGkiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJG9maWxlIGFscmVhZHkgZXhpc3RlZCA7IGNhbid0IGJ1aWxkIGRsbCBvYmplY3QgJGkiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgCWFzX2ZuX2Vycm9yICQ/ICIkb2ZpbGUgYWxyZWFkeSBleGlzdGVkIDsgY2FuJ3QgYnVpbGQgZGxsIG9iamVjdCAkaSIgIiRMSU5FTk8iIDUKICAgICAgIGZpCiAgICAgZmkKICAgICBjYXQgPiAkb2ZpbGUgPDwgRU9GSUYKQEAgLTI2ODA1LDcgKzIxMjAwLDcgQEAKIEVPRk9DCiAKICAgIyBjcmVhdGUgdGhlIC5zbyBydWxlCi0gIHNhdmVkX3N1Ymxpc3Rfbz1gZWNobyAiJG1vZF9maWxlcyAiIHwgc2VkICdzL14gKi8vZztzLyAgKi8ubyAvZzsnYAorICBzYXZlZF9zdWJsaXN0X289YGVjaG8gIiRtb2RfZmlsZXMgIiB8ICRTRUQgJ3MvXiAqLy9nO3MvICAqLy5vIC9nOydgCiAKICAgIyBjcmVhdGUgdGhlIHJ1bGVzIGZvciBlYWNoIG9iamVjdAogICBmb3IgaiBpbiAkbW9kX2ZpbGVzIDsgZG8KQEAgLTI2ODE0LDcgKzIxMjA5LDcgQEAKIAlcJChDQykgLWMgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAIFwkPAogCiBFT0ZSCi0gICAgbW5tPWBlY2hvICRqIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAorICAgIG1ubT1gZWNobyAkaiB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCiAgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKICAgZG9uZQogCkBAIC0yNjgzNCw0MSArMjEyMjksNDYgQEAKIGRvbmUKIAogIyBjbGVhbnVwCi1ybSAtZiBtb2R1bGVfdG1wX2hlYWRlci5oCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0KICMgYnVpbGQgbW9kdWxlIGxpc3RzIGZvciBNYWtlZmlsZXMKICMKIAogCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gOyBkbworZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1vZHVsZV9saXN0X2Z0IG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfZnQgbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9mdCBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfZnQgYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9mdCA7IGRvCiAgIGV2YWwgIiRpPW1rLyR7aX0ubWsiCiBkb25lCiAKLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3Rfbwotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfYworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2xvCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfZnQKIAotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3Rfbwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfYwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfZnQKIAotc2VkICdzL15taWJfbW9kdWxlX2xpc3Rfby9taWJncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9vID4gJG1pYmdyb3VwX2xpc3Rfbwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfbG8vbWliZ3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbG8gPiAkbWliZ3JvdXBfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X28vbWliZ3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbyA+ICRtaWJncm91cF9saXN0X28KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9sby9taWJncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9sbyA+ICRtaWJncm91cF9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfZnQvbWliZ3JvdXBfbGlzdF9mdC87c0BcKFteIAldKlwpXC5mdEBtaWJncm91cC9cMS5mdEBnJyA8ICRtaWJfbW9kdWxlX2xpc3RfZnQgPiAkbWliZ3JvdXBfbGlzdF9mdAogCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X28KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfYwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X28KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2Z0CiAKLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3Rfby9hZ2VudGdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbyA+ICRhZ2VudGdyb3VwX2xpc3Rfbwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9sby9hZ2VudGdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbG8gPiAkYWdlbnRncm91cF9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9vL2FnZW50Z3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9vID4gJGFnZW50Z3JvdXBfbGlzdF9vCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9sby9hZ2VudGdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbG8gPiAkYWdlbnRncm91cF9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9mdC9hZ2VudGdyb3VwX2xpc3RfZnQvO3NAXChbXiAJXSpcKVwuZnRAbWliZ3JvdXAvXDEuZnRAZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfZnQgPiAkYWdlbnRncm91cF9saXN0X2Z0CiAKLWZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyA7IGRvCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbW9kdWxlX2xpc3RfZnQgbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9mdCBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBtaWJncm91cF9saXN0X2Z0IGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9mdCBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X2Z0IDsgZG8KIAkjIGhwdXggbWFrZSAoYXQgbGVhc3QpIGRvZXNuJ3QgbGlrZSBhIHRyYWlsaW5nIFwgb24gdGhlIGxhc3QKIAkjIGxpbmUgZXZlbiB3aGVuIHRoZSBuZXh0IGxpbmUgY29udGFpbnMgbm90aGluZyBidXQKIAkjIHdoaXRlc3BhY2UuCi0JbGFzdHRva2VuPWB0YWlsIC0xIG1rLyRpLm1rIHwgYXdrICd7cHJpbnQgJDF9J2AKLQlzZWQgInMjJGxhc3R0b2tlbiBcXFxcIyRsYXN0dG9rZW4jIiA8IG1rLyRpLm1rID4gbWsvJGkubWsudG1wCisJbGFzdHRva2VuPWBhd2sgJ3tsYXN0dG9rZW49JDF9RU5Ee3ByaW50IGxhc3R0b2tlbn0nIG1rLyRpLm1rYAorCSRTRUQgInMjJGxhc3R0b2tlbiBcXFxcIyRsYXN0dG9rZW4jIiA8IG1rLyRpLm1rID4gbWsvJGkubWsudG1wCiAJbXYgbWsvJGkubWsudG1wIG1rLyRpLm1rCiAKIAkjIGFkZCBhIGNsb3NpbmcgY29tbWVudApAQCAtMjY5MDUsOCArMjEzMDUsNiBAQAogCiAKIAotI0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0KQotI0FDX1NVQlNUKG1vZHVsZV9saXN0KQogCiAKIApAQCAtMjY5MTQsOCArMjEzMTIsMTIgQEAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IC4iID4mNQotZWNobyAiJHtFQ0hPX1R9LiIgPiY2CisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAuIiA+JjUKKyRhc19lY2hvICIuIiA+JjY7IH0KIAogaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCiAKQEAgLTI2OTMyLDQ3OCArMjEzMzQsMzEwIEBACiAKICMgZW5kIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWQuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWQuLi4gIiA+JjY7IH0KIGZvciBpIGluICRtb2R1bGVfZGlyZWN0b3JpZXM7IGRvCiAgICRzcmNkaXIvbWtpbnN0YWxsZGlycyAkaQogZG9uZQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogLiIgPiY1Ci1lY2hvICIke0VDSE9fVH0uIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAuIiA+JjUKKyRhc19lY2hvICIuIiA+JjY7IH0KIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVmaW5lIGRlZmF1bHQgbWlicwogIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWQuLi4gIiA+JjY7IH0KIGlmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQlMiID0gIngiOyB0aGVuCiAgIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkZGVmYXVsdF9taWJzIgogZmkKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgIyBtaW5ndzMyIGFuZCBjeWd3aW4gdXNlICc7JyBhcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2VwYXJhdG9yIGNoYXIKK2lmIHRlc3QgIngkRU5WX1NFUEFSQVRPUiIgIT0gIngiOyB0aGVuCisgIDoKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAjIG1pbmd3MzIgYW5kIGN5Z3dpbiB1c2UgJzsnIGFzIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlIHNlcGFyYXRvcgogICBFTlZfU0VQQVJBVE9SPSI7IgotICBORVRTTk1QX0RFRkFVTFRfTUlCUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIiB8IHNlZCAncy86LzsvZydgCi0gIGRlZmF1bHRfbWlicz1gZWNobyAiJGRlZmF1bHRfbWlicyIgfCBzZWQgJ3MvOi87L2cnYAorICBORVRTTk1QX0RFRkFVTFRfTUlCUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIiB8ICRTRUQgJ3MvOi87L2cnYAorICBkZWZhdWx0X21pYnM9YGVjaG8gIiRkZWZhdWx0X21pYnMiIHwgJFNFRCAncy86LzsvZydgCiBlbHNlCiAgIEVOVl9TRVBBUkFUT1I9IjoiCiBmaQogCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRU5WX1NFUEFSQVRPUiAiJEVOVl9TRVBBUkFUT1IiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnJEVOVl9TRVBBUkFUT1InCitfQUNFT0YKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCUyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIgogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE5FVFNOTVBfREVGQVVMVF9NSUJTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5FVFNOTVBfREVGQVVMVF9NSUJTIiA+JjUKKyRhc19lY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQlMiID4mNjsgfQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlLi4uICRFQ0hPX0MiID4mNgotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2RsbW9kICIgPi9kZXYvbnVsbAorIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIHN5bWJvbHMgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluIG1ha2VmaWxlcworIworCitpZiBlY2hvICIgJGFnZW50X21vZHVsZV9saXN0ICIgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9hZ2VudHhfY29uZmlnICcgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9jbGllbnQgJyB8IFwKKyAgIGZncmVwICcgYWdlbnR4L3Byb3RvY29sICcgPiAvZGV2L251bGwgOyB0aGVuCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRT0nJworICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFPScjJworZWxzZQorICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUU9JyMnCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0U9JycKK2ZpCisKKworCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgQ29tcGlsYXRpb24tcmVsYXRlZAorIyMKKworIyAgICAgICBEeW5hbWljIG1vZHVsZXMgcmVxdWlyZSBQb3NpdGlvbi1JbmRlcGVuZGVudCBDb2RlCisjCSAgICBMSUJfQ0ZMQUdTL0RMTElCUzogdXNlZCBpbiBhZ2VudCBNYWtlZmlsZSBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGUuLi4gIiA+JjY7IH0KK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgdWNkLXNubXAvZGxtb2QgIiA+L2Rldi9udWxsCiBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotICAgICAgICBMSUJfQ0ZMQUdTPSIkTElCX0NGTEFHUyAkU0hMSUJfQ0ZMQUdTIgotCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorICAgIExJQl9DRkxBR1M9IiRMSUJfQ0ZMQUdTICRTSExJQl9DRkxBR1MiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKLQlETExJQlM9IiIKLQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgICAgRExMSUJTPSIiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyaWVzIHRoYXQgYXJlIHJ1bgorIyBhZnRlciB0aGUgYWdlbnQgbW9kdWxlIHRlc3RzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgICBIQVZFX0xJQiBEZWZpbml0aW9ucyB1c2VkIGluIHRoZSBOZXQtU05NUCBjb2RlIGJhc2U6CiAjCi0jIENoZWNrIGZvciBrZXJuZWwgbG9jYXRpb24KKyMgICAgICAgSEFWRV9MSUJDUllQVE86CWFwcHMKKyMgICAgICAgSEFWRV9MSUJSUE06CWFnZW50CiAjCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9LRVJORUxfTE9DK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X0tFUk5FTF9MT0M9InVua25vd24iCi0jIEZpcnN0IGRldGVybWluZSBpZiB0ZXN0IGV4cGVjdHMgYSAtZiBvciBhIC1jIChjaGFyYWN0ZXIgZGV2aWNlIChTWVNWKSkKKyMjCisjICAgU2ltcGxlIGNoZWNrczoKKyMjCiAKLWlmIHRlc3QgLWMgL2Rldi9udWxsOyB0aGVuCi0gIENGTEFHPSItYyIKLWVsaWYgdGVzdCAtZiAvZGV2L251bGw7IHRoZW4KLSAgQ0ZMQUc9Ii1mIgotZWxzZQotICAjIGZhbGwgYmFjawotICBDRkxBRz0iLWYiCi1maQotZm9yIGkgaW4gL3ZtdW5peCAvaHAtdXggL3N0YW5kL3ZtdW5peCAvZGV2L2tzeW1zIC9rZXJuZWwvdW5peCAva2VybmVsL2dlbnVuaXggL25ldGJzZCAvdW5peCAva2VybmVsIC9ic2QgL21hY2hfa2VybmVsIC9ib290L2tlcm5lbC9rZXJuZWwKLSAgZG8KLSAgaWYgdGVzdCAtZiAkaSAtbyAkQ0ZMQUcgJGk7IHRoZW4KLSAgICBhY19jdl9LRVJORUxfTE9DPSIkaSIKLSAgICBicmVhazsKKyMgQUNfQ0hFQ0tfTElCKGRlcywgbWFpbikKKyMgQUNfQ0hFQ0tfTElCKG0sICAgYXNpbikKKworIyAgIGRtYWxsb2MKKyMKK2lmIHRlc3QgIiR7d2l0aF9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCisgICBpZiB0ZXN0ICIkd2l0aF9kbWFsbG9jIiA9IHllcyAtYSAtZCAkd2l0aF9kbWFsbG9jIDsgdGhlbgorCisgIGlmIHRlc3QgIngkd2l0aF9kbWFsbG9jIiAhPSB4IC1hIC1kICR3aXRoX2RtYWxsb2M7IHRoZW4KKyAgICAgaWYgdGVzdCAtZCAkd2l0aF9kbWFsbG9jL2xpYjsgdGhlbgorICAgICAgIExERkxBR1M9Ii1MJHdpdGhfZG1hbGxvYy9saWIgJExERkxBR1MiCisgICAgIGZpCisgICAgIGlmIHRlc3QgLWQgJHdpdGhfZG1hbGxvYy9pbmNsdWRlOyB0aGVuCisJQ1BQRkxBR1M9Ii1JJHdpdGhfZG1hbGxvYy9pbmNsdWRlICRDUFBGTEFHUyIKKyAgICAgZmkKICAgZmkKLWRvbmUKLWlmIHRlc3QgJGkgPSAidW5rbm93biI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uICBTZXR0aW5nIHRvIC92bXVuaXgiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gIFNldHRpbmcgdG8gL3ZtdW5peCIgPiYyO30KLSAgYWNfY3ZfS0VSTkVMX0xPQz0iL3ZtdW5peCIKLWZpCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfS0VSTkVMX0xPQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfS0VSTkVMX0xPQyIgPiY2Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgS0VSTkVMX0xPQyAiJGFjX2N2X0tFUk5FTF9MT0MiCi1fQUNFT0YKLQotCi0jCi0jIENoZWNrIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbgotIwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9FVENfTU5UVEFCK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X0VUQ19NTlRUQUI9InVua25vd24iCi1mb3IgaSBpbiAvZXRjL21udHRhYiAvZXRjL210YWIgL2V0Yy9maWxlc3lzdGVtcyAvZGV2L21udHRhYgotICBkbwotICBpZiB0ZXN0IC1mICRpIC1vIC1jICRpOyB0aGVuCi0gICAgYWNfY3ZfRVRDX01OVFRBQj0iJGkiCi0gICAgYnJlYWs7Ci0gIGZpCi1kb25lCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfRVRDX01OVFRBQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfRVRDX01OVFRBQiIgPiY2Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgRVRDX01OVFRBQiAiJGFjX2N2X0VUQ19NTlRUQUIiCi1fQUNFT0YKLQotCi0jIENoZWNrIGZvciAvZGV2L2RtZW0gb3IgL2Rldi9kcnVtIGxvY2F0aW9uCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9ETUVNX0xPQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0jIEZpcnN0IGRldGVybWluZSBpZiB0ZXN0IGV4cGVjdHMgYSAtZiBvciBhIC1jIChjaGFyYWN0ZXIgZGV2aWNlIChTWVNWKSkKLQotaWYgdGVzdCAtZiAvZGV2L2ttZW07IHRoZW4KLSAgQ1RFU1Q9InRlc3QgLWYiCi1lbGlmIHRlc3QgLWMgL2Rldi9rbWVtOyB0aGVuCi0gIENURVNUPSJ0ZXN0IC1jIgotZWxzZQotICAjIGZhbGwgYmFjawotICBDVEVTVD0idGVzdCAtZiIKLWZpCi0KLWlmICRDVEVTVCAvZGV2L2RtZW07IHRoZW4KLSAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZG1lbSIKLWVsaWYgJENURVNUIC9kZXYvZHJ1bTsgdGhlbgotICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kcnVtIgotZWxzZQotICBhY19jdl9ETUVNX0xPQz0ibm9uZSIKLWZpCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfRE1FTV9MT0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X0RNRU1fTE9DIiA+JjYKLQotaWYgdGVzdCAieCRhY19jdl9ETUVNX0xPQyIgIT0gInhub25lIjsgdGhlbgorICAgZmkKKyAgIGZvciBhY19oZWFkZXIgaW4gZG1hbGxvYy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJkbWFsbG9jLmgiICJhY19jdl9oZWFkZXJfZG1hbGxvY19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbWFsbG9jX2giID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgRE1FTV9MT0MgIiRhY19jdl9ETUVNX0xPQyIKKyNkZWZpbmUgSEFWRV9ETUFMTE9DX0ggMQogX0FDRU9GCiAKIGZpCiAKLSMgZm9yY2VkIGVmZW5jZSB0dXJuZWQgb2ZmLgotIyBpZiB0ZXN0ICJ4JGRldmVsb3BlciIgPSAieHllcyIgLWEgIngkdXNlX2VmZW5jZSIgIT0gInhubyI7IHRoZW4KLSMgICAgdXNlX2VmZW5jZT0ieWVzIgotIyBmaQorZG9uZQogCi1pZiB0ZXN0ICJ4JHVzZV9lZmVuY2UiID0gInh5ZXMiOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgRUZfRXhpdCBpbiAtbGVmZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBFRl9FeGl0IGluIC1sZWZlbmNlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZWZlbmNlX0VGX0V4aXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbWFsbG9jX21lc3NhZ2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbWFsbG9jX21lc3NhZ2UuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZWZlbmNlICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKK2NoYXIgZG1hbGxvY19tZXNzYWdlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZG1hbGxvY19tZXNzYWdlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGRtYWxsb2M7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2U9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZQoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitmaQorCisjICAgRUZlbmNlCisjICAgICAgIChUaGlzIHVzZWQgdG8gYmUgb24gYnkgZGVmYXVsdCBmb3IgZGV2ZWxvcGVyIGNoZWNrb3V0KQorIworaWYgdGVzdCAieCR1c2VfZWZlbmNlIiA9ICJ4eWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBFRl9FeGl0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgRUZfRXhpdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfRUZfRXhpdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCiBjaGFyIEVGX0V4aXQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUVGX0V4aXQgKCk7CityZXR1cm4gRUZfRXhpdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZWZlbmNlX0VGX0V4aXQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdD1ubworZm9yIGFjX2xpYiBpbiAnJyBlZmVuY2U7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfRUZfRXhpdD0kYWNfcmVzCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9FRl9FeGl0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZWZlbmNlX0VGX0V4aXQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJFRkVOQ0UgMQotX0FDRU9GCi0KLSAgTElCUz0iLWxlZmVuY2UgJExJQlMiCi0KLWZpCi0KLWZpCi0KLSMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCi0jIEFDX0NIRUNLX0xJQihkZXMsIG1haW4pCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igcm91bmQgaW4gLWxtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJvdW5kIGluIC1sbS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX21fcm91bmQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHJvdW5kICgpOwotaW50Ci1tYWluICgpCi17Ci1yb3VuZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfbV9yb3VuZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX21fcm91bmQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbV9yb3VuZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX21fcm91bmQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX21fcm91bmQgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQk0gMQotX0FDRU9GCi0KLSAgTElCUz0iLWxtICRMSUJTIgotCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZXhwIGluIC1sbSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBleHAgaW4gLWxtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbV9leHArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGV4cCAoKTsKLWludAotbWFpbiAoKQotewotZXhwICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9tX2V4cD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX21fZXhwPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21fZXhwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbV9leHAiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX21fZXhwID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJNIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1sbSAkTElCUyIKLQotZmkKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWxmIG9yIC0td2l0aG91dC1lbGYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VsZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbGYiCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9FRl9FeGl0Kzp9IGZhbHNlOyB0aGVuIDoKIAogZWxzZQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWxmIG9yIC0tZGlzYWJsZS1lbGYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lbGYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbGYvLS13aXRob3V0LWVsZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWxmLy0td2l0aG91dC1lbGYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotZmk7CisgIGFjX2N2X3NlYXJjaF9FRl9FeGl0PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfRUZfRXhpdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9FRl9FeGl0IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX0VGX0V4aXQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKIAorZmkKKworZmkKKworCisjICAgRUxGIGxpYnJhcmllcworIyAgICAgICBUeXBpY2FsbHkgdXNlZCBmb3IgJ25saXN0JyAgKG5lZWRlZCBmb3IgdXB0aW1lKQorIwogaWYgdGVzdCAieCR3aXRoX2VsZiIgIT0gInhubyI7IHRoZW4KLSMgbmxpc3QgaXMgbmVlZGVkIGZvciB1cHRpbWUgb24gc29tZSBzeXRlbXMgaW4gdGhlIGdlbmVyaWMgbGlicmFyeQotIyBhZGQgaG9zdHMgd2hpY2ggZG9uJ3QgdXNlIG5saXN0IHRvIHRoZSBibGFuayBmaXJzdCBsaW5lCiBjYXNlICR0YXJnZXRfb3MgaW4KLQlsaW51eCopIDs7CisJbGludXgqKSAjIGFkZCBob3N0cyB3aGljaCBkb24ndCB1c2Ugbmxpc3QgaGVyZQorICAgICAgICAgICAgICAgIDs7CiAJaXJpeCopICMgQ2hlY2sgZm9yIG5saXN0IGluIG1sZCAoaXJpeCkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2VsZl9ubGlzdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2VsZl9ubGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZWxmICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgbmxpc3QgKCk7CiBpbnQKIG1haW4gKCkKIHsKLW5saXN0ICgpOworcmV0dXJuIG5saXN0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9lbGZfbmxpc3Q9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9lbGZfbmxpc3Q9bm8KKyAgYWNfY3ZfbGliX2VsZl9ubGlzdD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZWxmX25saXN0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9lbGZfbmxpc3QgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZWxmX25saXN0IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCRUxGIDEKIF9BQ0VPRgpAQCAtMjc0MTIsNzIgKzIxNjQ2LDQzIEBACiAKIGZpCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdDY0IGluIC1sZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0NjQgaW4gLWxlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9lbGZfbmxpc3Q2NCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubGlzdDY0IGluIC1sZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubGlzdDY0IGluIC1sZWxmLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9lbGZfbmxpc3Q2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZWxmICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgbmxpc3Q2NCAoKTsKIGludAogbWFpbiAoKQogewotbmxpc3Q2NCAoKTsKK3JldHVybiBubGlzdDY0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9lbGZfbmxpc3Q2ND15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2VsZl9ubGlzdDY0PW5vCisgIGFjX2N2X2xpYl9lbGZfbmxpc3Q2ND1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0NjQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZWxmX25saXN0NjQgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2VsZl9ubGlzdDY0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2VsZl9ubGlzdDY0IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCRUxGIDEKIF9BQ0VPRgpAQCAtMjc0ODYsNzIgKzIxNjkxLDQzIEBACiAKIGZpCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbG1sZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbG1sZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX21sZF9ubGlzdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbG1sZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxtbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX21sZF9ubGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sbWxkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgbmxpc3QgKCk7CiBpbnQKIG1haW4gKCkKIHsKLW5saXN0ICgpOworcmV0dXJuIG5saXN0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9tbGRfbmxpc3Q9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9tbGRfbmxpc3Q9bm8KKyAgYWNfY3ZfbGliX21sZF9ubGlzdD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbWxkX25saXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbWxkX25saXN0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9tbGRfbmxpc3QgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX21sZF9ubGlzdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9tbGRfbmxpc3QiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbWxkX25saXN0IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCTUxEIDEKIF9BQ0VPRgpAQCAtMjc1NjIsNzIgKzIxNzM4LDQzIEBACiAKIAkJOzsKIAkqKSAjIGRlZmF1bHQKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2VsZl9ubGlzdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2VsZl9ubGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZWxmICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgbmxpc3QgKCk7CiBpbnQKIG1haW4gKCkKIHsKLW5saXN0ICgpOworcmV0dXJuIG5saXN0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9lbGZfbmxpc3Q9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9lbGZfbmxpc3Q9bm8KKyAgYWNfY3ZfbGliX2VsZl9ubGlzdD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZWxmX25saXN0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9lbGZfbmxpc3QgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZWxmX25saXN0IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCRUxGIDEKIF9BQ0VPRgpAQCAtMjc2NDEsNTczICsyMTc4OCwxMTg4IEBACiBmaQogCiAKLSMgT24gc29tZSBwbGF0Zm9ybXMgKElyaXgpIGxpYm5zbCBhbmQgbGlic29ja2V0IHNob3VsZCBub3QgYmUgdXNlZC4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjICAgbGlic29ja2V0CisjICAgICAgIE5lZWRlZCBmb3IgJ3NvY2tldCgyKScgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIyAgICAgICBQb3NzaWJseSBhbHNvIGZvciAnZ2V0aG9zdG5hbWUoMyknICAgICAgICAgICAgICAobm9uLVNvbGFyaXMpCisjICAgICAgICAgICAoYWx0ZXJuYXRpdmVseSBpbiBsaWJuc2wgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIyAgICAgICAgICAgIG9yIGluIGxpYndzMl8zMikgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCitjYXNlIHgkd2l0aF9zb2NrbGliIGluCit4d2luc29jazIpCisgICMgICBsaWJ3czJfdzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyAgIworICBuZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCisgIExJQlM9IiRMSUJTIC1sd3MyXzMyIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZ2V0aG9zdGJ5bmFtZSB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldGhvc3RieW5hbWUuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZ2V0aG9zdGJ5bmFtZSBpbm5vY3VvdXNfZ2V0aG9zdGJ5bmFtZQogCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXRob3N0YnluYW1lICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGdldGhvc3RieW5hbWUKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRob3N0YnluYW1lICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2dldGhvc3RieW5hbWUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2dldGhvc3RieW5hbWUpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGdldGhvc3RieW5hbWU7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCisgICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAKIGludAogbWFpbiAoKQogewotcmV0dXJuIGYgIT0gZ2V0aG9zdGJ5bmFtZTsKKworICAgIHNvY2tldCgwLCAwLCAwKTsKKyAgICBnZXRob3N0YnluYW1lKDApOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCi1hY19jdl9mdW5jX2dldGhvc3RieW5hbWU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKLV9BQ0VPRgorICAgICMgS2VlcCBMSUJTLgorICAgIHRydWUKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyAgICAjIFJlc3RvcmUgTElCUyBhbmQgY29tcGxhaW4uCisgICAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorICAgIGFzX2ZuX2Vycm9yICQ/ICJsaWJ3czJfMzIgbm90IGZvdW5kLiIgIiRMSU5FTk8iIDUKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIDs7CisqKQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc29ja2V0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc29ja2V0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9zb2NrZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG5zbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCitjaGFyIHNvY2tldCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNvY2tldCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQ7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfc29ja2V0PSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9zb2NrZXQrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9zb2NrZXQ9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9zb2NrZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfc29ja2V0IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX3NvY2tldAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJzb2NrZXQoMikgbm90IGZvdW5kLiIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieW5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRob3N0YnluYW1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKIGNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKIGludAogbWFpbiAoKQogewotZ2V0aG9zdGJ5bmFtZSAoKTsKK3JldHVybiBnZXRob3N0YnluYW1lICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZvciBhY19saWIgaW4gJycgbnNsIHNvY2tldDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSs6fSBmYWxzZTsgdGhlbiA6CiAKLWFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT1ubworZWxzZQorICBhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZQoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisgIGZvciBhY19mdW5jIGluIGdldGhvc3RieW5hbWUKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0aG9zdGJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCiBfQUNFT0YKIAotCUxJQlM9IiR7TElCU30gLWxuc2wiCiBmaQorZG9uZQogCi1maQotCi0KLSMgU0NPIFVuaXh3YXJlIDcuMS40IGZpbmRzIGdldGhvc3RieW5hbWUoKSBpbiAtbHNvY2tldAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0aG9zdGJ5YWRkciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieWFkZHIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZ2V0aG9zdGJ5bmFtZSB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldGhvc3RieW5hbWUuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZ2V0aG9zdGJ5bmFtZSBpbm5vY3VvdXNfZ2V0aG9zdGJ5bmFtZQogCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXRob3N0YnluYW1lICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGdldGhvc3RieW5hbWUKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5YWRkciAoKTsKK2ludAorbWFpbiAoKQogewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRob3N0YnluYW1lICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2dldGhvc3RieW5hbWUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2dldGhvc3RieW5hbWUpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGdldGhvc3RieW5hbWU7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cworcmV0dXJuIGdldGhvc3RieWFkZHIgKCk7CisgIDsKKyAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYKK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBuc2wgc29ja2V0OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHI9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKKyAgZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdGJ5YWRkcgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0YnlhZGRyIiAiYWNfY3ZfZnVuY19nZXRob3N0YnlhZGRyIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieWFkZHIiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgIDs7Citlc2FjCisKKworIyAgIGxpYmlwaGxwYXBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ3lnd2luIGFuZCBNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1saXBobHBhcGkiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgICNpbmNsdWRlIDxpcGhscGFwaS5oPgogCiBpbnQKIG1haW4gKCkKIHsKLXJldHVybiBmICE9IGdldGhvc3RieW5hbWU7CisKKyAgSXBSZW5ld0FkZHJlc3MoMCk7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKLWFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQotX0FDRU9GCisgICMgS2VlcCBMSUJTLgorICB0cnVlCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sc29ja2V0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxzb2NrZXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHNvY2tldCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworICAjIFJlc3RvcmUgTElCUyBhbmQgY29tcGxhaW4uCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKyAgY2FzZSB4JHdpdGhfc29ja2xpYiBpbgorICB4d2luc29jazIpCisgICAgYXNfZm5fZXJyb3IgJD8gImxpYmlwaGxwYXBpIG5vdCBmb3VuZC4iICIkTElORU5PIiA1CisgICAgOzsKKyAgZXNhYworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisjICAgbGlicmVnZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1scmVnZXgiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjaW5jbHVkZSA8cmVnZXguaD4KKwogaW50CiBtYWluICgpCiB7Ci1nZXRob3N0YnluYW1lICgpOworCisgIHJlZ2NvbXAoMCwgMCwgMCk7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWU9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKKwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKLV9BQ0VPRgotCi0JTElCUz0iJHtMSUJTfSAtbHNvY2tldCIKLWZpCisgICMgUmVzdG9yZSBMSUJTLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCiAKIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCiAKLSMgU29sYXJpcyBrc3RhdAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrc3RhdF9sb29rdXAgaW4gLWxrc3RhdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrc3RhdF9sb29rdXAgaW4gLWxrc3RhdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGtzdGF0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIyAgIGxpYnNubXBhcGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHNubXBhcGkiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgICNpbmNsdWRlIDxzbm1wLmg+CisKK2ludAorbWFpbiAoKQoreworCisgIFNubXBVdGlsTWVtQWxsb2MoMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICMgS2VlcCBMSUJTLgorICB0cnVlCisKK2Vsc2UKKworICAjIFJlc3RvcmUgTElCUy4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisjICAga3N0YXQgbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGtzdGF0X2xvb2t1cCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGtzdGF0X2xvb2t1cC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE5FVFNOTVBMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGtzdGF0X2xvb2t1cCAoKTsKIGludAogbWFpbiAoKQogewota3N0YXRfbG9va3VwICgpOworcmV0dXJuIGtzdGF0X2xvb2t1cCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXAiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQktTVEFUIDEKLV9BQ0VPRgotCi0gICAgICAgIExORVRTTk1QTElCUz0iJHtMTkVUU05NUExJQlN9IC1sa3N0YXQiCi1maQotCi0KLSMgQ2hlY2sgZm9yIGxpYnJhcmllcyB0aGF0IHRoZSBhZ2VudCBuZWVkcwotIyBzYXZpbmcgb2xkIGxpYnJhcmllcwotTk9OQUdFTlRMSUJTPSRMSUJTCi0KLSMgQ2hlY2sgZm9yIHNlY3VyaXR5IHJlbGF0ZWQgZnVuY3Rpb25zCi1pZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iOyB0aGVuCi0gICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiICE9ICJ4eWVzIiAtYSAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scGtjczExICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGtzdGF0IDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKK2NoYXIga3N0YXRfbG9va3VwICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3N0YXRfbG9va3VwICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTkVUU05NUExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQktTVEFUIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCisKKworIworIyAgIGxpYnJ0CisjCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjbG9ja19nZXR0aW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgY2xvY2tfZ2V0dGltZS4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExORVRTTk1QTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGNsb2NrX2dldHRpbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBjbG9ja19nZXR0aW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHJ0IDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjbG9ja19nZXR0aW1lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gY2xvY2tfZ2V0dGltZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTkVUU05NUExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUUgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKKworCisjIworIyAgIE1JQi1tb2R1bGUtc3BlY2lmaWMgY2hlY2tzCisjIworCisjICAgbGliZGV2c3RhdAorIyAgICAgICAgKGZvciBkaXNrSU8gTUlCKQorIworIyAgIE5vdC1Vc2VkOiBIQVZFX0dFVERFVlMvSEFWRV9ERVZTVEFUX0dFVERFVlMKKyMKK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgdWNkLXNubXAvZGlza2lvICIgPi9kZXYvbnVsbAoraWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRkZXZzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0ZGV2cy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRkZXZzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0ZGV2cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBkZXZzdGF0IDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRkZXZzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0ZGV2cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVERFVlMgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkZXZzdGF0X2dldGRldnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkZXZzdGF0X2dldGRldnMuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkZXZzdGF0X2dldGRldnMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkZXZzdGF0X2dldGRldnMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gZGV2c3RhdCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGV2c3RhdF9nZXRkZXZzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGV2c3RhdF9nZXRkZXZzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RFVlNUQVRfR0VUREVWUyAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworZmkKKworIyAgIGxpYnBjaQorIyAgICAgICAgKGZvciBpZi1taWIgZGVzY3JpcHRpb24pCisjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGNpX2xvb2t1cF9uYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGNpX2xvb2t1cF9uYW1lLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGNpX2xvb2t1cF9uYW1lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGNpX2xvb2t1cF9uYW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHBjaSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGNpX2xvb2t1cF9uYW1lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGNpX2xvb2t1cF9uYW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BDSV9MT09LVVBfTkFNRSAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworCisjICAgTE0tU0VOU09SUy1NSUIgc3VwcG9ydAorIworZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgLWkgInVjZC1zbm1wL2xtc2Vuc29yIiA+IC9kZXYvbnVsbAoraWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2Vuc29ycyBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzZW5zb3JzIHN1cHBvcnQuLi4gIiA+JjY7IH0KKyAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgICAgIyAgQWdlbnQ6ICBIQVZFX1BJQ0xfSAorICAgICAgICAgICAgIworICAgICAgICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBpY2wuaCIgImFjX2N2X2hlYWRlcl9waWNsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPSB4eWVzOyB0aGVuIDoKKyAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGljbCIKK2ZpCisKKworICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBwaWNsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBpY2wuaCIgImFjX2N2X2hlYWRlcl9waWNsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BJQ0xfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyAgTm90LVVzZWQ6ICBIQVZFX1NFTlNPUlNfU0VOU09SU19ICisgICAgICAgICAgICAjCisgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic2Vuc29ycy9zZW5zb3JzLmgiICJhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIHNlbnNvcnMvc2Vuc29ycy5oIiAiJExJTkVOTyIgNQorZmkKKworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBzZW5zb3JzIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworIGVsc2UKKyAgICBhc19mbl9lcnJvciAkPyAiYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCAtbHNlbnNvcnMiICIkTElORU5PIiA1CisgZmkKKworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZmkKKworIworIyBsaWJubCAobmV0bGluaykKKyMKKworaWYgdGVzdCAieCR3aXRoX25sIiAhPSAieG5vIjsgdGhlbgorICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgIGxpbnV4KikgIyBDaGVjayBmb3IgbGlibmwgKGxpbnV4KQorICAgICAgICBuZXRzbm1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgQ1BQRkxBR1M9Ii1JL3Vzci9pbmNsdWRlL2xpYm5sMyAkQ1BQRkxBR1MiCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgbmxfY29ubmVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG5sX2Nvbm5lY3QuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbmxfY29ubmVjdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5sX2Nvbm5lY3QgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gbmwtMyA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbmxfY29ubmVjdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5sX2Nvbm5lY3QgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKyAgICBmb3IgYWNfaGVhZGVyIGluIG5ldGxpbmsvbmV0bGluay5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJuZXRsaW5rL25ldGxpbmsuaCIgImFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ORVRMSU5LX05FVExJTktfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgICAgICAgICBFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUz0iJEVYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTIC1JL3Vzci9pbmNsdWRlL2xpYm5sMyIKKyBlbHNlCisgICAgQ1BQRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ1BQRkxBR1MiCisgZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgIT0geHllczsgdGhlbgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG5sX2Nvbm5lY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBubF9jb25uZWN0Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5sX2Nvbm5lY3QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBubF9jb25uZWN0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIG5sIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBubF9jb25uZWN0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmxfY29ubmVjdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisgICAgICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBuZXRsaW5rL25ldGxpbmsuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmV0bGluay9uZXRsaW5rLmgiICJhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkVUTElOS19ORVRMSU5LX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisgZmkKKworICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bmV0bGluay9zb2NrZXQuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibmxfc29ja2V0X2ZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCTkwzIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgICAgICAgZmkKKyAgICA7OworICAgIGVzYWMKK2ZpCisKKworCisjIworIyAgIE1vcmUgY29tcGxleCBjaGVja3M6CisjIworCisjICAgU2VjdXJpdHkgcmVsYXRlZCBmdW5jdGlvbnMKKyMKK05PTkFHRU5UTElCUz0kTElCUwkgIyBzYXZlIG9sZCBsaWJyYXJpZXMKK1NTSFBST0c9bm8KK1RMU1BST0c9bm8KK2lmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyIgLWEgIngkdHJ5b3BlbnNzbCIgIT0gInhpbnRlcm5hbCI7IHRoZW4KKyAgICAjIGNoZWNrIGZvciBsaWJwa2NzMTEgaWYgYXNrZWQKKyAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgIT0gInh5ZXMiIC1hICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBrY3MxMSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKIGNoYXIgQ19Jbml0aWFsaXplICgpOwogaW50CiBtYWluICgpCiB7Ci1DX0luaXRpYWxpemUgKCk7CityZXR1cm4gQ19Jbml0aWFsaXplICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT1ubworICBhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA9IHh5ZXM7IHRoZW4gOgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQlBLQ1MxMSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUEtDUzExIDEiID4+Y29uZmRlZnMuaAogCi0gICAgICAgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiCisJCUxJQlBLQ1MxMT0iLWxwa2NzMTEiCiBmaQogCiAgICAgZWxzZQotICAgICAgaWYgdGVzdCAieCR0cnlyc2FyZWYiICE9ICJ4bm8iOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUlNBUHJpdmF0ZURlY3J5cHQgaW4gLWxyc2FyZWYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUlNBUHJpdmF0ZURlY3J5cHQgaW4gLWxyc2FyZWYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgICAgaWYgdGVzdCAieCR0cnlyc2FyZWYiICE9ICJ4bm8iOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBSU0FQcml2YXRlRGVjcnlwdCBpbiAtbHJzYXJlZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUlNBUHJpdmF0ZURlY3J5cHQgaW4gLWxyc2FyZWYuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1scnNhcmVmICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgUlNBUHJpdmF0ZURlY3J5cHQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLVJTQVByaXZhdGVEZWNyeXB0ICgpOworcmV0dXJuIFJTQVByaXZhdGVEZWNyeXB0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQ9bm8KKyAgYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCUlNBUkVGIDEKIF9BQ0VPRgpAQCAtMjgyMTYsNzIgKzIyOTc4LDQzIEBACiAKIGZpCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBSU0FfUEtDUzFfUlNBcmVmIGluIC1sUlNBZ2x1ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBSU0FfUEtDUzFfUlNBcmVmIGluIC1sUlNBZ2x1ZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUlNBX1BLQ1MxX1JTQXJlZiBpbiAtbFJTQWdsdWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJTQV9QS0NTMV9SU0FyZWYgaW4gLWxSU0FnbHVlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbFJTQWdsdWUgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBSU0FfUEtDUzFfUlNBcmVmICgpOwogaW50CiBtYWluICgpCiB7Ci1SU0FfUEtDUzFfUlNBcmVmICgpOworcmV0dXJuIFJTQV9QS0NTMV9SU0FyZWYgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZj1ubworICBhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJSU0FHTFVFIDEKIF9BQ0VPRgpAQCAtMjgyOTAsNDg2ICsyMzAyMyw0OTQgQEAKIAogZmkKIAotICAgICAgZmkKKyAgICAgICAgZmkKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBFVlBfbWQ1IGluIC1sY3J5cHRvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEVWUF9tZDUgaW4gLWxjcnlwdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9jcnlwdG9fRVZQX21kNStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtbGVheTMyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtbGVheTMyLi4uICIgPiY2OyB9CisgICAgICAgIG5ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iLWxlYXkzMiIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBFVlBfbWQ1KCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1PXllczsgQ1JZUFRPPSJlYXkzMiIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKKyAgICAgICAgaWYgdGVzdCB4JENSWVBUTyA9IHg7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEVWUF9tZDUgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEVWUF9tZDUgaW4gLWxjcnlwdG8uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxjcnlwdG8gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBFVlBfbWQ1ICgpOwogaW50CiBtYWluICgpCiB7Ci1FVlBfbWQ1ICgpOworcmV0dXJuIEVWUF9tZDUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfY3J5cHRvX0VWUF9tZDU9bm8KKyAgYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQkNSWVBUTyAxCi1fQUNFT0YKLQotICAgICAgICAgICAgICBMSUJDUllQVE89Ii1sY3J5cHRvIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiID0geHllczsgdGhlbiA6CisgIENSWVBUTz0iY3J5cHRvIgogZmkKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBRVNfY2ZiMTI4X2VuY3J5cHQgaW4gLWxjcnlwdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUVTX2NmYjEyOF9lbmNyeXB0IGluIC1sY3J5cHRvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgeCRDUllQVE8gIT0geDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQkNSWVBUTyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgTElCQ1JZUFRPPSItbCR7Q1JZUFRPfSIKKyAgICAgICAgICAgIGFzX2FjX0xpYj1gJGFzX2VjaG8gImFjX2N2X2xpYl8ke0NSWVBUT30nJ19BRVNfY2ZiMTI4X2VuY3J5cHQiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQUVTX2NmYjEyOF9lbmNyeXB0IGluIC1sJHtDUllQVE99IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBRVNfY2ZiMTI4X2VuY3J5cHQgaW4gLWwke0NSWVBUT30uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2FjX0xpYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sY3J5cHRvICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorTElCUz0iLWwke0NSWVBUT30gICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgQUVTX2NmYjEyOF9lbmNyeXB0ICgpOwogaW50CiBtYWluICgpCiB7Ci1BRVNfY2ZiMTI4X2VuY3J5cHQgKCk7CityZXR1cm4gQUVTX2NmYjEyOF9lbmNyeXB0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0PXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfYWNfTGliPXllcyIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQ9bm8KKyAgZXZhbCAiJGFzX2FjX0xpYj1ubyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0ID0geWVzOyB0aGVuCitldmFsIGFjX3Jlcz1cJCRhc19hY19MaWIKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19MaWIiXCIgPSB4InllcyI7IHRoZW4gOgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEVWUF9NRF9DVFhfY3JlYXRlIGluIC1sY3J5cHRvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEVWUF9NRF9DVFhfY3JlYXRlIGluIC1sY3J5cHRvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyAgICAgICAgICAgIGFzX2FjX0xpYj1gJGFzX2VjaG8gImFjX2N2X2xpYl8ke0NSWVBUT30nJ19FVlBfTURfQ1RYX2NyZWF0ZSIgfCAkYXNfdHJfc2hgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBFVlBfTURfQ1RYX2NyZWF0ZSBpbiAtbCR7Q1JZUFRPfSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgRVZQX01EX0NUWF9jcmVhdGUgaW4gLWwke0NSWVBUT30uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2FjX0xpYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sY3J5cHRvICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorTElCUz0iLWwke0NSWVBUT30gICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgRVZQX01EX0NUWF9jcmVhdGUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUVWUF9NRF9DVFhfY3JlYXRlICgpOworcmV0dXJuIEVWUF9NRF9DVFhfY3JlYXRlICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGU9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19hY19MaWI9eWVzIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlPW5vCisgIGV2YWwgIiRhc19hY19MaWI9bm8iCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZSA9IHllczsgdGhlbgorZXZhbCBhY19yZXM9XCQkYXNfYWNfTGliCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfTGliIlwiID0geCJ5ZXMiOyB0aGVuIDoKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9FVlBfTURfQ1RYX0NSRUFURQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0VWUF9NRF9DVFhfQ1JFQVRFIC8qKi8iID4+Y29uZmRlZnMuaAogCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRVZQX01EX0NUWF9ERVNUUk9ZCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVZQX01EX0NUWF9ERVNUUk9ZIC8qKi8iID4+Y29uZmRlZnMuaAogCiBmaQogCi0gICAgZmkKLWVsaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIkRUTFMiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIERUTFN2MV9tZXRob2QgaW4gLWxzc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIERUTFN2MV9tZXRob2QgaW4gLWxzc2wuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxwa2NzMTEgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitMSUJTPSItbHNzbCAtbGNyeXB0byAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKK2NoYXIgRFRMU3YxX21ldGhvZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIERUTFN2MV9tZXRob2QgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kPXllcworZWxzZQorICBhY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlNTTF9EVExTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2wgJExJQkNSWVBUTyIKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIlRoZSBEVExTIGJhc2VkIHRyYW5zcG9ydHMgcmVxdWlyZSB0aGUgbGlic3NsIGxpYnJhcnkgZnJvbSBPcGVuU1NMIHRvIGJlIGF2YWlsYWJsZSBhbmQgc3VwcG9ydCBEVExTIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICAgICAgVExTUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJUTFMiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFNTTF9saWJyYXJ5X2luaXQgaW4gLWxzc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNTTF9saWJyYXJ5X2luaXQgaW4gLWxzc2wuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzc2wgLWxjcnlwdG8gJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgU1NMX2xpYnJhcnlfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIFNTTF9saWJyYXJ5X2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0PXllcworZWxzZQorICBhY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlNTTCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NsICRMSUJDUllQVE8iCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgRFRMUyBiYXNlZCB0cmFuc3BvcnRzIHJlcXVpcmUgdGhlIGxpYnNzbCBsaWJyYXJ5IGZyb20gT3BlblNTTCB0byBiZSBhdmFpbGFibGUiICIkTElORU5PIiA1CitmaQorCisgICAgICAgICAgICBUTFNQUk9HPXllcworICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIiBTU0ggIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCBpbiAtbHNzaDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwIGluIC1sc3NoMi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3NoMiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXA9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlNTSDIgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzaDIgJExJQkNSWVBUTyIKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIlRoZSBTU0ggdHJhbnNwb3J0IHJlcXVpcmVzIHRoZSBsaWJzc2gyIGxpYnJhcnkgdG8gYmUgYXZhaWxhYmxlIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICAgICAgU1NIUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICBmaQorZWxpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scGtjczExICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgogY2hhciBDX0luaXRpYWxpemUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUNfSW5pdGlhbGl6ZSAoKTsKK3JldHVybiBDX0luaXRpYWxpemUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPW5vCisgIGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQlBLQ1MxMSAxCi1fQUNFT0YKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlBLQ1MxMSAxIiA+PmNvbmZkZWZzLmgKIAotICAgICAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIKKyAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIKK2ZpCisKK2ZpCitpZiB0ZXN0ICJ4JFRMU1BST0ciID0gInh5ZXMiOyB0aGVuCisgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJFVlBfc2hhMjI0IiAiYWNfY3ZfaGF2ZV9kZWNsX0VWUF9zaGEyMjQiICIjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX0VWUF9zaGEyMjQiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVZQX1NIQTIyNCAvKiovIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICA6CitmaQorCisgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJFVlBfc2hhMzg0IiAiYWNfY3ZfaGF2ZV9kZWNsX0VWUF9zaGEzODQiICIjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX0VWUF9zaGEzODQiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVZQX1NIQTM4NCAvKiovIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICA6CiBmaQogCiBmaQogCi1MSUJTPSROT05BR0VOVExJQlMKK0xJQlM9JE5PTkFHRU5UTElCUwkgIyByZXN0b3JlIG9sZCBsaWJyYXJpZXMKK2lmIHRlc3QgIngkU1NIUFJPRyIgPSAieHllcyI7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUU9JycKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFPScjJworZWxzZQorICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFPScnCitmaQoraWYgdGVzdCAieCRUTFNQUk9HIiA9ICJ4eWVzIiAtYSAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFPScnCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRT0nIycKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRT0nJworZmkKK2lmIGVjaG8gIiAke3NlY3VyaXR5X21vZF9saXN0fSAiIHwgZ3JlcCAnIHVzbSAnIDsgdGhlbgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JycKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nIycKKyAgICBlbHNlCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nIycKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nJworICAgIGZpCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JycKK2ZpCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUU9IiIKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFPSIjIgorZWxzZQorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRT0iIyIKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFPSIiCitmaQogCi0jIGNoZWNrIGZvciB0Y3Agd3JhcHBlciBzdXBwb3J0CisKKworCisKKworCisKKworIworIyBJZiB3ZSdyZSB1c2luZyBpbnRlcm5hbCBjcnlwdG8gc3VwcG9ydCB3ZSBuZWVkIHRvIGNvbXBpbGUgaW4gZXh0cmEgZmlsZXMKKyMKK2NyeXB0b19maWxlc19jPSIiCitjcnlwdG9fZmlsZXNfbz0iIgorY3J5cHRvX2ZpbGVzX2xvPSIiCitpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iIC1hICJ4JENSWVBUTyIgPSAieCI7IHRoZW4KKyAgICMgSWYgd2U6CisgICAjICAgMSkgY291bGRuJ3QgZmluZCBuZWVkZWQgb3BlbnNzbCBzdXBwb3J0CisgICAjICAgMikgT1Igd2VyZSBhc2tlZCB0byB1c2UgaW50ZXJuYWwgc3VwcG9ydAorICAgIyAgIDMpIEFORCB3ZSBoYXZlIHRoZSBuZWVkZWQgZmlsZXMKKyAgICMgdGhlbiB1c2UgaXQKKyAgIENSWVBUTz0iaW50ZXJuYWwiCisgICBjcnlwdG9fZmlsZXNfYz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEuYyBvcGVuc3NsL29wZW5zc2xfbWQ1LmMgb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMgb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMiCisgICBjcnlwdG9fZmlsZXNfbz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEubyBvcGVuc3NsL29wZW5zc2xfbWQ1Lm8gb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5vIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLm8gb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUub28gb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5vIgorICAgY3J5cHRvX2ZpbGVzX2xvPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5sbyBvcGVuc3NsL29wZW5zc2xfbWQ1LmxvIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmxvIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmxvIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmxvIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5sbyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmxvIgorICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisKKyMKKyMgaWYgd2UgY2FuIGRvIGFueSBzb3J0IG9mIGNyeXB0byB0aGVuIG5vdGUgaXQKKyMKK2lmIHRlc3QgIngkQ1JZUFRPIiAhPSAieCIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAgIFRDUCB3cmFwcGVyIHN1cHBvcnQKKyMKIF9jcHBmbGFncz0iJHtDUFBGTEFHU30iCiBfbGRmbGFncz0iJHtMREZMQUdTfSIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYndyYXAgb3IgLS13aXRob3V0LWxpYndyYXAgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xpYndyYXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbGlid3JhcCIKLQotICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAibm8iOyB0aGVuCi0gICAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gInllcyI7IHRoZW4KLSAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRoX2xpYndyYXAvaW5jbHVkZSIKLSAgICAgIExERkxBR1M9IiR7TERGTEFHU30gLUwkd2l0aF9saWJ3cmFwL2xpYiIKLSAgICBmaQotCi0gICAgX2xpYnM9JHtMSUJTfQotICAgIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RjcGRfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRjcGQuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0Y3BkLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90Y3BkX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RjcGRfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3RjcGRfaCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRjcGQuaCB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0Y3BkLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHRjcGQuaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRjcGQuaCBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRjcGQuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHRjcGQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KK2lmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJubyI7IHRoZW4KKyAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gInllcyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkd2l0aF9saWJ3cmFwL2luY2x1ZGUiCisgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtTCR3aXRoX2xpYndyYXAvbGliIgogICBmaQorCisgIF9saWJzPSR7TElCU30KKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInRjcGQuaCIgImFjX2N2X2hlYWRlcl90Y3BkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3RjcGRfaCIgPSB4eWVzOyB0aGVuIDoKKwogZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0Y3BkLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGNwZC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGNwZF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl90Y3BkX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90Y3BkX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90Y3BkX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RjcGRfaCA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgdGNwZC5oLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIHRjcGQuaC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgJD8gIkFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgdGNwZC5oLiIgIiRMSU5FTk8iIDUKIGZpCiAKIAogCi0gICAgTElCUz0iJExJQlMgLWx3cmFwIgotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcC4uLiAkRUNIT19DIiA+JjYKLQkjIFhYWDogc2hvdWxkIGNoZWNrIGZvciBob3N0c19jdGwKLQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgTElCUz0iJExJQlMgLWx3cmFwIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcC4uLiAiID4mNjsgfQorICAjIFhYWDogc2hvdWxkIGNoZWNrIGZvciBob3N0c19jdGwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCQkgICAgICNpbmNsdWRlIDx0Y3BkLmg+Ci0JCSAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKLQkJICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwOwotCisgICAgICNpbmNsdWRlIDx0Y3BkLmg+CisgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7CisgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7CiBpbnQKIG1haW4gKCkKIHsKQEAgLTI4Nzc4LDIwNSArMjM1MTksNTggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfTElCV1JBUCAxIiA+PmNvbmZkZWZzLmgKIAotCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9MSUJXUkFQIDEKLV9BQ0VPRgotCi0JICAgIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgotCSAgICBfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIgorICAgICB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKKyAgICAgX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICMgTGludXggUmVkSGF0IDYuMSB3b24ndCBsaW5rIGxpYndyYXAgd2l0aG91dCBsaWJuc2wKKyAgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAieXBfZ2V0X2RlZmF1bHRfZG9tYWluIiAiYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA9IHh5ZXM7IHRoZW4gOgogCi0KLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotCSAgICAjIExpbnV4IFJlZEhhdCA2LjEgd29uJ3QgbGluayBsaWJ3cmFwIHdpdGhvdXQgbGlibnNsCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgeXBfZ2V0X2RlZmF1bHRfZG9tYWluLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIHlwX2dldF9kZWZhdWx0X2RvbWFpbiBpbm5vY3VvdXNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHlwX2dldF9kZWZhdWx0X2RvbWFpbiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiB5cF9nZXRfZGVmYXVsdF9kb21haW4KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciB5cF9nZXRfZGVmYXVsdF9kb21haW4gKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfeXBfZ2V0X2RlZmF1bHRfZG9tYWluKSB8fCBkZWZpbmVkIChfX3N0dWJfX195cF9nZXRfZGVmYXVsdF9kb21haW4pCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IHlwX2dldF9kZWZhdWx0X2RvbWFpbjsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSB5cF9nZXRfZGVmYXVsdF9kb21haW47Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4gaW4gLWxuc2wiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIGluIC1sbnNsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4gaW4gLWxuc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbiBpbiAtbG5zbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sbnNsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgeXBfZ2V0X2RlZmF1bHRfZG9tYWluICgpOwogaW50CiBtYWluICgpCiB7Ci15cF9nZXRfZGVmYXVsdF9kb21haW4gKCk7CityZXR1cm4geXBfZ2V0X2RlZmF1bHRfZG9tYWluICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbj1ubworICBhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCTlNMIDEKIF9BQ0VPRgpAQCAtMjg5ODcsMTkgKzIzNTgxLDE0IEBACiAKIGZpCiAKLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2wiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsLi4uICRFQ0hPX0MiID4mNgotCSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2wuLi4gIiA+JjY7IH0KKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCQkgICAgICAgICAjaW5jbHVkZSA8dGNwZC5oPgotCQkgICAgICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOwotCSAgICAgICAgICAgICAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKLQorCSNpbmNsdWRlIDx0Y3BkLmg+CisJaW50IGFsbG93X3NldmVyaXR5ID0gMDsKKwlpbnQgZGVueV9zZXZlcml0eSAgPSAwOwogaW50CiBtYWluICgpCiB7CkBAIC0yOTAwOCwyNjczICsyMzU5NywzNjIgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0JCQljYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9MSUJXUkFQIDEKLV9BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCSRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0xJQldSQVAgMSIgPj5jb25mZGVmcy5oCiAKLQkJCXRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgotCQkJX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCAtbG5zbCIKKwl0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKKwlfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIC1sbnNsIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwlhc19mbl9lcnJvciAkPyAiQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iICIkTElORU5PIiA1CiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBMQUdFTlRMSUJTPSIkX3dyYXBsaWJzIgotICAgIENQUEZMQUdTPSR7X2NwcGZsYWdzfQotICAgIExERkxBR1M9JHtfbGRmbGFnc30KLSAgICBMSUJTPSR7X2xpYnN9Ci0gIGZpCi0KLWZpOworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgTEFHRU5UTElCUz0iJF93cmFwbGlicyIKKyAgQ1BQRkxBR1M9JHtfY3BwZmxhZ3N9CisgIExERkxBR1M9JHtfbGRmbGFnc30KKyAgTElCUz0ke19saWJzfQorZmkKIAogCi0KLWZvciBhY19oZWFkZXIgaW4gcnBtL3JwbWxpYi5oIHJwbS9oZWFkZXIuaAorIyMKKyMgICBteXNxbAorIyMKK2lmIHRlc3QgIngkd2l0aF9teXNxbCIgPSAieHllcyIgOyB0aGVuCisgIGZvciBhY19wcm9nIGluIG15c3FsX2NvbmZpZwogZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NWVNRTENPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KKyAgY2FzZSAkTVlTUUxDT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTVlTUUxDT05GSUc9IiRNWVNRTENPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTVlTUUxDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgogICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OworICA7OwogZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorTVlTUUxDT05GSUc9JGFjX2N2X3BhdGhfTVlTUUxDT05GSUcKK2lmIHRlc3QgLW4gIiRNWVNRTENPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNWVNRTENPTkZJRyIgPiY1CiskYXNfZWNobyAiJE1ZU1FMQ09ORklHIiA+JjY7IH0KIGVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCisgIHRlc3QgLW4gIiRNWVNRTENPTkZJRyIgJiYgYnJlYWsKIGRvbmUKIAorICB0ZXN0IC14ICIkTVlTUUxDT05GSUciIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgbXlzcWxfY29uZmlnIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBNeVNRTCBzdXBwb3J0IiAiJExJTkVOTyIgNQorICBNWVNRTF9MSUJTPWAkTVlTUUxDT05GSUcgLS1saWJzYAorICBNWVNRTF9JTkNMVURFUz1gJE1ZU1FMQ09ORklHIC0taW5jbHVkZWAKKyAgX2xpYnM9IiR7TElCU30iCisgIF9jcHBmbGFncz0iJHtDUFBGTEFHU30iCisgIExJQlM9IiR7TElCU30gJHtNWVNRTF9MSUJTfSIKKyAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7TVlTUUxfSU5DTFVERVN9IgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibXlzcWwuaCIgImFjX2N2X2hlYWRlcl9teXNxbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9teXNxbF9oIiA9IHh5ZXM7IHRoZW4gOgogCi1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG0vcnBtbGliLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtL3JwbWxpYi5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giID4mNgogZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBycG0vcnBtbGliLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcnBtL3JwbWxpYi5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDxycG0vcnBtbGliLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBycG0vcnBtbGliLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBycG0vcnBtbGliLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxycG0vcnBtbGliLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbS9ycG1saWIuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG0vcnBtbGliLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgPiY2Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oID0geWVzOyB0aGVuCi0gIHJwbWxpYl9oPXllcwotZWxzZQotICBycG1saWJfaD1ubworICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgbXlzcWwuaCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgTXlTUUwgc3VwcG9ydCIgIiRMSU5FTk8iIDUKIGZpCiAKIAotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtL2hlYWRlci5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbS9oZWFkZXIuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcnBtL2hlYWRlci5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHJwbS9oZWFkZXIuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8cnBtL2hlYWRlci5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcnBtL2hlYWRlci5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcnBtL2hlYWRlci5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cnBtL2hlYWRlci5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG0vaGVhZGVyLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtL2hlYWRlci5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCA9IHllczsgdGhlbgotICBycG1oZWFkZXJfaD15ZXMKLWVsc2UKLSAgcnBtaGVhZGVyX2g9bm8KLWZpCi0KLQotCi1pZiB0ZXN0ICJ4JHJwbWhlYWRlcl9oIiA9ICJ4bm8iIC1vICJ4JHJwbWxpYl9oIiA9ICJ4bm8iIDsgdGhlbgotICBpZiB0ZXN0ICJ4JHdpdGhfcnBtIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDb3VsZCBub3QgZmluZCBlaXRoZXIgdGhlIFJQTSBoZWFkZXIgZmlsZXMgbmVlZGVkIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBSUE0gc3VwcG9ydCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDb3VsZCBub3QgZmluZCBlaXRoZXIgdGhlIFJQTSBoZWFkZXIgZmlsZXMgbmVlZGVkIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBSUE0gc3VwcG9ydCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBlbHNlCi0gICAgd2l0aF9ycG09bm8KLSAgZmkKLWZpCi0KLSMKLSMgcnBtIGxpYnJhcmllcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBzb2Z0d2FyZQotIyBpbnN0YWxsZWQgdGFibGVzIChvbiBsaW51eCBpbiBwYXJ0aWN1bGFyKQotIwotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAjIEFSRy4gIFJQTSBpcyBhIHJlYWwgcGFpbi4KLSAgIyBGV0lXIGxpYnJwbS5sYSwgbGlicnBtaW8ubGEsIGFuZCBsaWJwb3B0LmxhIGhhdmUgY29ycmVjdCBkZXBlbmRlbmNpZXMuCi0gIF9ycG1saWJzPSIiCi0KLSAgIyBycG0tNC4wLnggbmVlZHMgcnBtaW8uCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtR2V0UGF0aCBpbiAtbHJwbWlvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbUdldFBhdGggaW4gLWxycG1pby4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxycG1pbyAkX3JwbWxpYnMgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIE1ZX0lOSVQoKSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE1ZX0lOSVQoKSB3b3Jrcy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcnBtR2V0UGF0aCAoKTsKKyAgICAjaW5jbHVkZSA8bXlfZ2xvYmFsLmg+CisgICAgICAgICNpbmNsdWRlIDxteV9zeXMuaD4KIGludAogbWFpbiAoKQogewotcnBtR2V0UGF0aCAoKTsKK01ZX0lOSVQoIm15X2luaXRfdGVzdCIpCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGg9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogCi1hY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aD1ubworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CUk9LRU5fTElCTVlTUUxDTElFTlQgMSIgPj5jb25mZGVmcy5oCisKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGgiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGggPSB5ZXM7IHRoZW4KLSAgX3JwbWxpYnM9Ii1scnBtaW8gJF9ycG1saWJzIgotZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENQUEZMQUdTPSIke19jcHBmbGFnc30iCisgIExJQlM9IiR7X2xpYnN9IgogCi0KLSAgIyBub3cgY2hlY2sgZm9yIHJwbSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbGlicmFyaWVzLgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbUdldEZpbGVzeXN0ZW1MaXN0IGluIC1scnBtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbUdldEZpbGVzeXN0ZW1MaXN0IGluIC1scnBtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scnBtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHJwbUdldEZpbGVzeXN0ZW1MaXN0ICgpOwotaW50Ci1tYWluICgpCi17Ci1ycG1HZXRGaWxlc3lzdGVtTGlzdCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0ID0geWVzOyB0aGVuCi0KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQlJQTSAxCi1fQUNFT0YKLQotICAgIExNSUJMSUJTPSItbHJwbSAkX3JwbWxpYnMgJExNSUJMSUJTIgotICAgIENGTEFHUz0iJENGTEFHUyAtSS91c3IvaW5jbHVkZS9ycG0iCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgTVlTUUwgVHJhcCBMb2dnaW5nOiAgICAgICAgIGVuYWJsZWQKK0VPRgogCiBlbHNlCiAKLSAgICAjIHJwbS00LjAuMyBsaWJycG1kYiBhY3R1YWxseSBjb250YWlucyB3aGF0IHdlIG5lZWQuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG1kYk9wZW4gaW4gLWxycG1kYiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG1kYk9wZW4gaW4gLWxycG1kYi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3JwbWRiX3JwbWRiT3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHJwbWRiIC1scnBtICRfcnBtbGlicyAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHJwbWRiT3BlbiAoKTsKLWludAotbWFpbiAoKQotewotcnBtZGJPcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW4gPSB5ZXM7IHRoZW4KLQotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJSUE0gMQotX0FDRU9GCi0KLSAgICAgIExNSUJMSUJTPSItbHJwbWRiIC1scnBtICRfcnBtbGlicyAkTE1JQkxJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgLUkvdXNyL2luY2x1ZGUvcnBtIgorICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIE1ZU1FMIFRyYXAgTG9nZ2luZzogICAgICAgICB1bmF2YWlsYWJsZQorRU9GCiAKIGZpCiAKIAotZmkKIAogCi0gICMgcnBtIDQuNiBoYXMgaW5jb21wYXRpYmxlIEFQSSwgdHVybiBvbiB0aGUgbGVnYWN5IG9uZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBoZWFkZXJHZXRFbnRyeSBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgaGVhZGVyR2V0RW50cnkgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxycG0vcnBtbGliLmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGhlYWRlckdldEVudHJ5Ci0gIGNoYXIgKnAgPSAoY2hhciAqKSBoZWFkZXJHZXRFbnRyeTsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnk9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeSA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIF9SUE1fNF80X0NPTVBBVAotX0FDRU9GCi0KLWZpCi0KLWZpCi0KLSMgbGlia3ZtCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9yZWFkIGluIC1sa3ZtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9yZWFkIGluIC1sa3ZtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3ZtX2t2bV9yZWFkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sa3ZtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9yZWFkICgpOwotaW50Ci1tYWluICgpCi17Ci1rdm1fcmVhZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfa3ZtX2t2bV9yZWFkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3ZtX2t2bV9yZWFkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2t2bV9rdm1fcmVhZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2t2bV9rdm1fcmVhZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3ZtX2t2bV9yZWFkID0geWVzOyB0aGVuCi0gIF9saWJrdm09Ii1sa3ZtIgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fb3BlbmZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9vcGVuZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBrdm1fb3BlbmZpbGVzIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMga3ZtX29wZW5maWxlcy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBrdm1fb3BlbmZpbGVzIGlubm9jdW91c19rdm1fb3BlbmZpbGVzCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGt2bV9vcGVuZmlsZXMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYga3ZtX29wZW5maWxlcwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9vcGVuZmlsZXMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfa3ZtX29wZW5maWxlcykgfHwgZGVmaW5lZCAoX19zdHViX19fa3ZtX29wZW5maWxlcykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0ga3ZtX29wZW5maWxlczsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBrdm1fb3BlbmZpbGVzOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2t2bV9vcGVuZmlsZXMiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX09QRU5GSUxFUyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9vcGVuZmlsZXMgaW4gLWxrdm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX29wZW5maWxlcyBpbiAtbGt2bS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sa3ZtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9vcGVuZmlsZXMgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWt2bV9vcGVuZmlsZXMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXMgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fT1BFTkZJTEVTIDEKLV9BQ0VPRgotCi0JX2xpYmt2bT0iLWxrdm0iCi1maQotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9nZXRwcm9jcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fZ2V0cHJvY3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfa3ZtX2dldHByb2NzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGt2bV9nZXRwcm9jcyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGt2bV9nZXRwcm9jcy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBrdm1fZ2V0cHJvY3MgaW5ub2N1b3VzX2t2bV9nZXRwcm9jcwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBrdm1fZ2V0cHJvY3MgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYga3ZtX2dldHByb2NzCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX2dldHByb2NzICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2t2bV9nZXRwcm9jcykgfHwgZGVmaW5lZCAoX19zdHViX19fa3ZtX2dldHByb2NzKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBrdm1fZ2V0cHJvY3M7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0ga3ZtX2dldHByb2NzOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfa3ZtX2dldHByb2NzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2t2bV9nZXRwcm9jcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfa3ZtX2dldHByb2NzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2t2bV9nZXRwcm9jcyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2t2bV9nZXRwcm9jcyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9HRVRQUk9DUyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9nZXRwcm9jcyBpbiAtbGt2bSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fZ2V0cHJvY3MgaW4gLWxrdm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sa3ZtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9nZXRwcm9jcyAoKTsKLWludAotbWFpbiAoKQotewota3ZtX2dldHByb2NzICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9HRVRQUk9DUyAxCi1fQUNFT0YKLQotCV9saWJrdm09Ii1sa3ZtIgotZmkKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fZ2V0c3dhcGluZm8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX2dldHN3YXBpbmZvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBrdm1fZ2V0c3dhcGluZm8gdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBrdm1fZ2V0c3dhcGluZm8uCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUga3ZtX2dldHN3YXBpbmZvIGlubm9jdW91c19rdm1fZ2V0c3dhcGluZm8KLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIga3ZtX2dldHN3YXBpbmZvICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGt2bV9nZXRzd2FwaW5mbwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9nZXRzd2FwaW5mbyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9rdm1fZ2V0c3dhcGluZm8pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2t2bV9nZXRzd2FwaW5mbykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0ga3ZtX2dldHN3YXBpbmZvOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGt2bV9nZXRzd2FwaW5mbzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm89bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm8iID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm8gPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fR0VUU1dBUElORk8gMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fZ2V0c3dhcGluZm8gaW4gLWxrdm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX2dldHN3YXBpbmZvIGluIC1sa3ZtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGt2bSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fZ2V0c3dhcGluZm8gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWt2bV9nZXRzd2FwaW5mbyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm89bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm8iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm8gPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fR0VUU1dBUElORk8gMQotX0FDRU9GCi0KLQlfbGlia3ZtPSItbGt2bSIKLWZpCi0KLWZpCi0KLWlmIHRlc3QgIngke19saWJrdm19IiAhPSAieCI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJLVk0gMQotX0FDRU9GCi0KLQlMQUdFTlRMSUJTPSIkTEFHRU5UTElCUyAke19saWJrdm19IgotZmkKLQotIyBEWU5BTUlDIE1PRFVMRSBTVVBQT1JUCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGRsb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGRsb3Blbi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBkbG9wZW4gaW5ub2N1b3VzX2Rsb3BlbgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBkbG9wZW4gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZGxvcGVuCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZGxvcGVuICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2Rsb3BlbikgfHwgZGVmaW5lZCAoX19zdHViX19fZGxvcGVuKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBkbG9wZW47Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gZGxvcGVuOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2Rsb3Blbj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RMT1BFTiAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZGxvcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1kbG9wZW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RsX2Rsb3BlbiA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RMT1BFTiAxCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQkRMIDEKLV9BQ0VPRgotCi0JTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGwiCi1maQotCi1maQotCisjIworIyAgIE5vbi1saWJyYXJ5IGNoZWNrcworIyMKIAogIyBubGlzdAotCi0KLQogZm9yIGFjX2Z1bmMgaW4gbmxpc3Qgbmxpc3Q2NCBrbmxpc3QKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKIGRvbmUKIAogCi0jIHdoZXRoZXIgd2UgbmVlZCAtbGRldnN0YXQgZm9yIGRpc2tpbyBNSUIKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9kaXNraW8gIiA+L2Rldi9udWxsCi1pZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0ZGV2cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRkZXZzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2dldGRldnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZ2V0ZGV2cyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldGRldnMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZ2V0ZGV2cyBpbm5vY3VvdXNfZ2V0ZGV2cwogCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXRkZXZzICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGdldGRldnMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRkZXZzICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2dldGRldnMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2dldGRldnMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGdldGRldnM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gZ2V0ZGV2czsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2dldGRldnM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfZ2V0ZGV2cz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZ2V0ZGV2cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19nZXRkZXZzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZGV2cyA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVERFVlMgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRkZXZzIGluIC1sZGV2c3RhdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRkZXZzIGluIC1sZGV2c3RhdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRldnN0YXQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0ZGV2cyAoKTsKLWludAotbWFpbiAoKQotewotZ2V0ZGV2cyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUREVWUyAxCi1fQUNFT0YKLQotCQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkZXZzdGF0IgotZmkKLQotZmkKLQotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0ZGV2cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRkZXZzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2dldGRldnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZ2V0ZGV2cyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldGRldnMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZ2V0ZGV2cyBpbm5vY3VvdXNfZ2V0ZGV2cwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXRkZXZzICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGdldGRldnMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRkZXZzICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2dldGRldnMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2dldGRldnMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGdldGRldnM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gZ2V0ZGV2czsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2dldGRldnM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfZ2V0ZGV2cz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZ2V0ZGV2cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19nZXRkZXZzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZGV2cyA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFVlNUQVRfR0VUREVWUyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRldnN0YXRfZ2V0ZGV2cyBpbiAtbGRldnN0YXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGV2c3RhdF9nZXRkZXZzIGluIC1sZGV2c3RhdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGV2c3RhdCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkZXZzdGF0X2dldGRldnMgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWRldnN0YXRfZ2V0ZGV2cyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cyA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFVlNUQVRfR0VUREVWUyAxCi1fQUNFT0YKLQotCQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkZXZzdGF0IgotZmkKLQotZmkKLQotZmkKLQotIyBMTS1TRU5TT1JTLU1JQiBzdXBwb3J0Ci1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvbG1TZW5zb3JzICIgPiAvZGV2L251bGwKLWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0gICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2Vuc29ycyBzdXBwb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNlbnNvcnMgc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKLSAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgICAgICAgc29sYXJpcyopCi0gICAgICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9waWNsX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwaWNsLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGljbC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcGljbF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9waWNsX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9waWNsX2giID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBwaWNsLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcGljbC5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDxwaWNsLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBwaWNsLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBwaWNsLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxwaWNsLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBpY2wuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwaWNsLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9waWNsX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3BpY2xfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPiY2Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfcGljbF9oID0geWVzOyB0aGVuCi0gIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBpY2wiCi1maQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBwaWNsLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0gICAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzZW5zb3JzL3NlbnNvcnMuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzZW5zb3JzL3NlbnNvcnMuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2Vuc29ycy9zZW5zb3JzLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2Vuc29ycy9zZW5zb3JzLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2Vuc29ycy9zZW5zb3JzLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzZW5zb3JzL3NlbnNvcnMuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNlbnNvcnMvc2Vuc29ycy5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNlbnNvcnMvc2Vuc29ycy5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPiY2Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2ggPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIHNlbnNvcnMvc2Vuc29ycy5oIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgc2Vuc29ycy9zZW5zb3JzLmgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLQotICAgICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyBpbiAtbHNlbnNvcnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgaW4gLWxzZW5zb3JzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHNlbnNvcnMgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyA9IHllczsgdGhlbgotCi0JCSAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHNlbnNvcnMiIDsKLQotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIC1sc2Vuc29ycyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIC1sc2Vuc29ycyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotZmkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQRVJMIFNVUFBPUlQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQorY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgogIwotIyB0ZXN0IHRvIHNlZSBpZiB3ZSBjYW4gYXR0ZW1wdCB0byBidWlsZCBlbWJlZGRlZCBQZXJsIHNvIGZhcgorIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyAgIFBlcmwgJiBQeXRob24gc3VwcG9ydAorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgQ2hlY2sgd2hldGhlciBOZXQtU05NUCBjb25maWd1cmF0aW9uIHdpbGwgc3VwcG9ydCBQZXJsCisjIworCisjICAgSW5wdXRzOgorIyAgICAgICBpbnN0YWxsX3Blcmw6ICAgd2hldGhlciBvciBub3QgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzL25vL3RyeSAgIChpLmUuICdtYXliZScgLSB0aGUgZGVmYXVsdCkKKyMgICAgICAgZW1iZWRfcGVybDogICAgIHdoZXRoZXIgb3Igbm90IHRvIGVtYmVkIFBlcmwgc3VwcG9ydCB3aXRoaW4gdGhlIGFnZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzL25vL3RyeSAgIChpLmUuICdtYXliZScgLSB0aGUgZGVmYXVsdCkKKyMKKyMgICAgICAgYWNfY3ZfcGF0aF9QRVJMUFJPRzogICAgUGF0aCB0byBwZXJsIGJpbmFyeQorCisKKyMgICAgICAgRW1iZWRkZWQgUGVybCByZXF1aXJlcyBQZXJsIG1vZHVsZXMsIGFuZCB0aGUgcGVybCBiaW5hcnkKICMKIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0idHJ5IgotICBmaQotICBpZiB0ZXN0ICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gIngiIC1vICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICBlbWJlZF9wZXJsPSJubyIKLSAgZmkKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJ0cnkiCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gIngiIC1vICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gInhubyIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgIGZpCiBmaQogCi0KKyMgICAgICAgUGVybCBtb2R1bGVzIHJlcXVpcmUgdGhlIHBlcmwgYmluYXJ5CiAjCi0jIEVtYmVkZGVkIFBlcmwgc3BlY2lmaWMgc3R1ZmYKLSMKLQotIyB0ZXN0IHBlcmwgcHJvZwogaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgogICAgIG15cGVybD0kYWNfY3ZfcGF0aF9QRVJMUFJPRwogICAgIGlmIHRlc3QgJG15cGVybCA9ICJubyIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgcmVxdWVzdGVkIGJ1dCBubyBwZXJsIGV4ZWN1dGFibGUgZm91bmQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtZW1iZWRkZWQtcGVybCByZXF1ZXN0ZWQgYnV0IG5vIHBlcmwgZXhlY3V0YWJsZSBmb3VuZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIi0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgcmVxdWVzdGVkIGJ1dCBubyBwZXJsIGV4ZWN1dGFibGUgZm91bmQiICIkTElORU5PIiA1CisgICAgICAgIGZpCiAgICAgZmkKIGZpCiAKLSMgdGVzdCBmb3Igc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0CisjICAgICAgIFBlcmwgbW9kdWxlcyByZXF1aXJlIHNoYXJlZCBsaWJyYXJpZXMKKyMKIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAjIGVtYmVkZGVkIFBlcmwgcmVxdWlyZXMgc2hhcmVkIGxpYnJhcmllcwogICAgIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFBlcmwgc3VwcG9ydCByZXF1aXJlcyAtLWVuYWJsZS1zaGFyZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogUGVybCBzdXBwb3J0IHJlcXVpcmVzIC0tZW5hYmxlLXNoYXJlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIlBlcmwgc3VwcG9ydCByZXF1aXJlcyAtLWVuYWJsZS1zaGFyZWQiICIkTElORU5PIiA1CisgICAgICAgIGZpCiAgICAgZmkKIGZpCiAKKyMgICAgICAgUGVybCBtb2R1bGVzIGNhbiBvbmx5IGJlIGluc3RhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc291cmNlIHRyZWUKKyMKIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXMuLi4gJEVDSE9fQyIgPiY2Ci0gIGlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiIgLW8gLWQgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlIDsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ZZXMiID4mNgotICBlbHNlCi0gICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IE5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfU5vIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRzcmNkaXIiID0gInguIiAtbyAtZCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUgOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBZZXMiID4mNQorJGFzX2VjaG8gIlllcyIgPiY2OyB9CiAgICAgZWxzZQotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogUGVybCBtb2R1bGVzIGNhbiBub3QgYmUgYnVpbHQgb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBQZXJsIG1vZHVsZXMgY2FuIG5vdCBiZSBidWlsdCBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTm8iID4mNQorJGFzX2VjaG8gIk5vIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIlBlcmwgbW9kdWxlcyBjYW4gbm90IGJlIGJ1aWx0IG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkiICIkTElORU5PIiA1CisgICAgICAgIGZpCiAgICAgZmkKLSAgZmkKIGZpCiAKLSMgY2hlY2sgdGhlIFBlcmwgY29tcGlsZXIgbmFtZQorCisjICAgVGhlIHJlc3Qgb2YgdGhlIFBlcmwtcmVsYXRlZCBjaGVja3MgYXJlbid0IHJlbGV2YW50CisjICAgICAgIGlmIHdlJ3JlIG5vdCB1c2luZyB0aGUgUGVybCBtb2R1bGVzCisjCiBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgIwotICAgICMgUGVybCBjYyBjaGVja3MKKworCisjIworIyAgIENoZWNrIGNvbXBpbGVyIGNvbXBhdGFiaWxpdHkKKyMjCisKKyAgICAjICAgICAgIFdoYXQgY29tcGlsZXIgd2FzIHVzZWQgdG8gYnVpbGQgdGhlIHBlcmwgYmluYXJ5PwogICAgICMKICAgICBpZiB0ZXN0ICJ4ZW5hYmxlX3BlcmxfY2NfY2hlY2tzIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUGVybCBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBQZXJsIGNjLi4uICRFQ0hPX0MiID4mNgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQZXJsIGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQZXJsIGNjLi4uICIgPiY2OyB9CiAKLSAgICAgIFBFUkxDQz1gJG15cGVybCAtVjpjYyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50IGlmIChzL15ccypjYz0uKFstPVx3XHNcL10rKS47XHMqLyQxLyk7J2AKKyAgICAgICAgUEVSTENDPWAkbXlwZXJsIC1WOmNjIHwgJG15cGVybCAtbiAtZSAncHJpbnQgaWYgKHMvXlxzKmNjPS4oWy09XHdcc1wvXSspLjtccyovJDEvKTsnYAogCi0gICAgICBpZiB0ZXN0ICJ4JFBFUkxDQyIgIT0gIngiIDsgdGhlbgotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUEVSTENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRQRVJMQ0MiID4mNgotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgaWYgdGVzdCAieCRQRVJMQ0MiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTENDIiA+JjUKKyRhc19lY2hvICIkUEVSTENDIiA+JjY7IH0KICAgICAgICAgZWxzZQotICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgdG8gYnVpbGQgd2l0aG91dCBQZXJsLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHRvIGJ1aWxkIHdpdGhvdXQgUGVybC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHRvIGJ1aWxkIHdpdGhvdXQgUGVybC4iICIkTElORU5PIiA1CisgICAgICAgICAgICBmaQogICAgICAgICBmaQotICAgICAgZmkKLWZpCisgICAgZmkKIAotIyBjaGVjayB0aGUgUGVybCBjb21waWxlciBjb21wYXRpYmlsaXR5Ci1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLSAgICAgIE9MRENDPSRDQwotICAgICAgQ0M9IiRQRVJMQ0MiCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAjICAgICAgIFdhcyBHQ0MgdXNlZCB0byBidWlsZCB0aGUgcGVybCBiaW5hcnk/CisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQorICAgICAgICBPTERDQz0kQ0MKKyAgICAgICAgQ0M9IiRQRVJMQ0MiCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAorCiBpbnQKIG1haW4gKCkKIHsKQEAgLTMxNjg3LDQ4OSArMjM5NjUsMjA5IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIHBlcmxjY19pc19nbnU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXBlcmxjY19pc19nbnU9bm8KKyAgcGVybGNjX2lzX2dudT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRwZXJsY2NfaXNfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRwZXJsY2NfaXNfZ251IiA+JjYKLSAgICAgIENDPSRPTERDQwotICAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInhubyIgOyB0aGVuCi0gICAgICAJaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgCSAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIAllbHNlCi0gICAgICAJICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgbm9uLUdOVSAob3Igbm9uLXdvcmtpbmcpIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgbm9uLUdOVSAob3Igbm9uLXdvcmtpbmcpIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgCWZpCi0gICAgICBmaQotZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHBlcmxjY19pc19nbnUiID4mNQorJGFzX2VjaG8gIiRwZXJsY2NfaXNfZ251IiA+JjY7IH0KKyAgICAgICAgQ0M9JE9MRENDCiAKLSMgY2hlY2sgaWYgdGhleSdyZSBib3RoIGdudQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIAlpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAJICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgCWVsc2UKLSAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgbm9uLUdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVGhpcyBidWlsZCBpcyB1c2luZyBhIG5vbi1HTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICAJZmkKLSAgICAgIGZpCi1maQorICAgICAgICAjICAgICAgIENoZWNrIGNvbXBhdGFiaWxpdHk6ICBHbnUgTmV0LVNOTVAgdnMgTm9uLUdudSBwZXJsCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInhubyIgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAJICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgCSAgICBlbHNlCisgICAgICAJICAgICAgICBhc19mbl9lcnJvciAkPyAiVGhpcyBidWlsZCBpcyB1c2luZyBhIEdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIG5vbi1HTlUgKG9yIG5vbi13b3JraW5nKSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iICIkTElORU5PIiA1CisgICAgICAJICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKIAotIyB3ZSBoYXZlIGVub3VnaCBzdXBwb3J0IGZvciBpbnN0YWxsaW5nIHRoZSBtb2R1bGVzIGF0IGxlYXN0LgotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICBpbnN0YWxsX3Blcmw9InllcyIKLWVsc2UKLSAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICBlbWJlZF9wZXJsPSJubyIKLSAgZmkKLWZpCisgICAgIyAgICAgICBDaGVjayBjb21wYXRhYmlsaXR5OiAgTm9uLUdudSBOZXQtU05NUCB2cyBHbnUgcGVybAorICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieHllcyIgOyB0aGVuCisgICAgICAJICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgIAkgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAJICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiVGhpcyBidWlsZCBpcyB1c2luZyBhIG5vbi1HTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiAiJExJTkVOTyIgNQorICAgICAgCSAgICBmaQorICAgICAgICBmaQorICAgIGZpCiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIG9uIHRvIGVtYmVkZGluZy4uLgorICAgICMgICAgICAgQXJlIHdlIGNsZWFyIHRvIHByb2NlZWQ/CisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgICAgZmkKKyAgICBmaQogCi0jIGNoZWNrIHRoZSBjb21waWxlciBmbGFncyBmb3IgaWxsZWdhbCB0b2tlbnMKKworIyMKKyMgICBEZXRlcm1pbmUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsCisjIworCisjICAgICAgIFN5c3RlbS1zcGVjaWZpYyByZXF1aXJlbWVudHMKKyMKIGNhc2UgJHRhcmdldF9vcyBpbgogICAgIHNvbGFyaXMqKQogICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAjICAgQ2hlY2sgZm9yIExBUkdFRklMRSBzdXBwb3J0ICAgICAgICAgICAgICAgKFNvbGFyaXMpCiAgICAgICAgICAgIwotICAgICAgICAgICMgUGVybCBjYyBjaGVja3MKLSAgICAgICAgICAjCi0gICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zLi4uICRFQ0hPX0MiID4mNgotICAgICAgICAgIGlmICRteXBlcmwgLVY6Y2NmbGFncyB8IGdyZXAgTEFSR0VGSUxFID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3VucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zLi4uICIgPiY2OyB9CisgICAgICAgICAgaWYgJG15cGVybCAtVjpjY2ZsYWdzIHwgJEdSRVAgTEFSR0VGSUxFID4gL2Rldi9udWxsIDsgdGhlbgogICAgICAgICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KICAgICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFBlcmwgd2FzIGNvbXBpbGVkIHdpdGggTEFSR0VGSUxFIHN1cHBvcnQgd2hpY2ggd2lsbCBicmVhayBOZXQtU05NUC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBQZXJsIHdhcyBjb21waWxlZCB3aXRoIExBUkdFRklMRSBzdXBwb3J0IHdoaWNoIHdpbGwgYnJlYWsgTmV0LVNOTVAuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIlBlcmwgd2FzIGNvbXBpbGVkIHdpdGggTEFSR0VGSUxFIHN1cHBvcnQgd2hpY2ggd2lsbCBicmVhayBOZXQtU05NUC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgIiRMSU5FTk8iIDUKICAgICAgICAgICAgIGZpCiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBrbm93biIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIGtub3duIiA+JjYKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIGtub3duIiA+JjUKKyRhc19lY2hvICJub25lIGtub3duIiA+JjY7IH0KICAgICAgICAgICBmaQogICAgICAgZmkKICAgICA7OwogCisgICAgIyBFbWJlZGRlZCBwZXJsIHR5cGljYWxseSBmYWlscyBvbiBIUC1VWCBhbmQgTWFjIE9TIFgKKyAgICAjIFdlIHJlYWxseSBuZWVkIHRvIGludmVzdGlnYXRlIHdoeSwgYW5kIGNoZWNrIGZvciB0aGlzIGV4cGxpY2l0bHkKKyAgICAjIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHR1cm4gdGhpcyBvZmYgYnkgZGVmYXVsdAorICAgIGhwdXgqfGRhcndpbjgqfGRhcndpbjkqfGRhcndpbjEwKikKKyAgICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogRW1iZWRkZWQgcGVybCBkZWZhdWx0aW5nIHRvIG9mZiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBFbWJlZGRlZCBwZXJsIGRlZmF1bHRpbmcgdG8gb2ZmIiA+JjI7fQorICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICAgIGZpCisgICAgOzsKKwogICAgICopCiAgICAgOzsKIGVzYWMKIAotCi0jIGNoZWNrIHRoZSBjZmxhZ3MKKyMgICAgICAgQ29tcGlsZXIgZmxhZ3MKKyMKIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBQZXJsIENGTEFHUyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBQZXJsIENGTEFHUy4uLiAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQZXJsIENGTEFHUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUGVybCBDRkxBR1MuLi4gIiA+JjY7IH0KICAgICBwZXJsY2ZsYWdzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGNjb3B0c2AKICAgICBpZiB0ZXN0ICJ4JHBlcmxjZmxhZ3MiICE9ICJ4IiA7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRwZXJsY2ZsYWdzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRwZXJsY2ZsYWdzIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGVybGNmbGFncyIgPiY1CiskYXNfZWNobyAiJHBlcmxjZmxhZ3MiID4mNjsgfQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRwZXJsY2ZsYWdzIgogICAgIGVsc2UKICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCiAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgogICAgICAgZWxzZQotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBDIGNvbXBpbGVyIGZsYWdzIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgQyBjb21waWxlciBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBDIGNvbXBpbGVyIGZsYWdzIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iICIkTElORU5PIiA1CiAgICAgICBmaQogICAgIGZpCiBmaQogCi0jIGNoZWNrIHRoZSBsZGZsYWdzCisjICAgICAgIExpbmtlciBmbGFncworIwogaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFBlcmwgTERGTEFHUyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBQZXJsIExERkxBR1MuLi4gJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUGVybCBMREZMQUdTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQZXJsIExERkxBR1MuLi4gIiA+JjY7IH0KICAgICBuZXRzbm1wX3BlcmxsZG9wdHM9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgbGRvcHRzYAogICAgIGlmIHRlc3QgIngkbmV0c25tcF9wZXJsbGRvcHRzIiAhPSAieCIgOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV0c25tcF9wZXJsbGRvcHRzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXRzbm1wX3BlcmxsZG9wdHMiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX3BlcmxsZG9wdHMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX3BlcmxsZG9wdHMiID4mNjsgfQogICAgIGVsc2UKICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCiAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgogICAgICAgZWxzZQotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBsaW5rZXIgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxpbmtlciBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxpbmtlciBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iICIkTElORU5PIiA1CiAgICAgICBmaQogICAgIGZpCi0gICAgaWYgdGVzdCAieCRlbmFibGVfYXNfbmVlZGVkIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICMgbGluayAqbGlicmFyaWVzKiB3aXRoIGxpYnBlcmwKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9hc19uZWVkZWQiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgIyAgIEp1c3QtaW4tdGltZSBsaW5raW5nIHdpbGwgZW1iZWQgdGhlIFBlcmwgbGlicmFyeSB3aXRoaW4KKyAgICAgICMgICAgICAgdGhlIE5ldC1TTk1QIGxpYnJhcnkgKHJhdGhlciB0aGFuIHRoZSBhZ2VudCBhcHBsaWNhdGlvbikKKyAgICAgICMKICAgICAgIFBFUkxMRE9QVFNfRk9SX0xJQlM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCi0gICAgICAjIFBlcmwgY2NkbGZsYWdzIChSUEFUSCB0byBsaWJwZXJsLCBob3BlZnVsbHkpCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFBlcmwgQ0NETEZMQUdTIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBlcmwgQ0NETEZMQUdTLi4uICRFQ0hPX0MiID4mNgorICAgICAgIyAgIFBlcmwgY2NkbGZsYWdzIChSUEFUSCB0byBsaWJwZXJsLCBob3BlZnVsbHkpCisgICAgICAjCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQZXJsIENDRExGTEFHUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUGVybCBDQ0RMRkxBR1MuLi4gIiA+JjY7IH0KIAogICAgICAgbmV0c25tcF9wZXJsY2NkbGZsYWdzPWAkbXlwZXJsIC1WOmNjZGxmbGFncyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50ICQxICciaWYgKC9eXHMqY2NkbGZsYWdzPScoW14nXSspJzsvKTsiYAogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV0c25tcF9wZXJsY2NkbGZsYWdzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiID4mNjsgfQogICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGNjZGxmbGFncyIKICAgICBlbHNlCisgICAgICAjICAgT3RoZXJ3aXNlIGVtYmVkIHRoZSBQZXJsIGxpYnJhcnkgd2l0aGluIHRoZSBhcHBsaWNhdGlvbgorICAgICAgIworICAgICAgUEVSTExET1BUU19GT1JfTElCUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKICAgICAgICMgbGluayAqYXBwbGljYXRpb25zKiBhZ2FpbnN0IGxpYnBlcmwKICAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCiAgICAgZmkKIGZpCiAKLSMgY2hlY2sgbmVlZGVkIGZ1bmN0aW9ucworIyAgICAgICAnUGVybF9ldmFsX3B2JyBmdW5jdGlvbiAoYW5kIGVxdWl2YWxlbnRzKQorIwogaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAjICAgVGhyZWUgcG9zc2libGUgdmVyc2lvbnMgb2YgdGhpcyByb3V0aW5lOgorICAgICMgICAgICAgZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG8gNS4wMDNfOTdkKQorICAgICMgICAgICAgcGVybF9ldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNS4wMDQvNS4wMDUpCisgICAgIyAgICAgICBQZXJsX2V2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcm9tIDUuNmZmKQorICAgICMKICAgICBPTERMSUJTPSIkTElCUyIKICAgICBMSUJTPSIkTElCUyAkbmV0c25tcF9wZXJsbGRvcHRzIgotCi0gICAgIyBuZXdlciBwZXJsIHZzIG9sZGVyIHBlcmwgY2FsbCBmdW5jdGlvbnMKLQotZm9yIGFjX2Z1bmMgaW4gZXZhbF9wdgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgICAgZm9yIGFjX2Z1bmMgaW4gZXZhbF9wdgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJldmFsX3B2IiAiYWNfY3ZfZnVuY19ldmFsX3B2IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2V2YWxfcHYiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX0VWQUxfUFYgMQogX0FDRU9GCiAKIGZpCiBkb25lCiAKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwZXJsX2V2YWxfcHYiICJhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiID0geHllczsgdGhlbiA6CiAKLSAgICAjIHNpZ2g6IHRoaXMgaGFzIGEgQ0FQSVRBTCBQIGluIFBlcmwsIHdoaWNoIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUKLSAgICAjIGF1dG9jb25mIGRlZmluZSBhcyB0aGUgbG93ZXIgY2FzZSBzbyB3ZSBoYXZlIHRvIHRyZWF0IHRoZW0gKkJPVEgqCi0gICAgIyBzcGVjaWFsbHkuICBXb25kZXJmdWwuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwZXJsX2V2YWxfcHYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGVybF9ldmFsX3B2Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3BlcmxfZXZhbF9wditzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBwZXJsX2V2YWxfcHYgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBwZXJsX2V2YWxfcHYuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgcGVybF9ldmFsX3B2IGlubm9jdW91c19wZXJsX2V2YWxfcHYKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcGVybF9ldmFsX3B2ICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIHBlcmxfZXZhbF9wdgotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHBlcmxfZXZhbF9wdiAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9wZXJsX2V2YWxfcHYpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3BlcmxfZXZhbF9wdikKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gcGVybF9ldmFsX3B2OwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IHBlcmxfZXZhbF9wdjsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX3BlcmxfZXZhbF9wdj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHY9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QRVJMX0VWQUxfUFZfTEMgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BFUkxfRVZBTF9QVl9MQyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUGVybF9ldmFsX3B2IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBlcmxfZXZhbF9wdi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgUGVybF9ldmFsX3B2IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgUGVybF9ldmFsX3B2LgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIFBlcmxfZXZhbF9wdiBpbm5vY3VvdXNfUGVybF9ldmFsX3B2CisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiUGVybF9ldmFsX3B2IiAiYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiA9IHh5ZXM7IHRoZW4gOgogCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBQZXJsX2V2YWxfcHYgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgUGVybF9ldmFsX3B2Ci0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgUGVybF9ldmFsX3B2ICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX1BlcmxfZXZhbF9wdikgfHwgZGVmaW5lZCAoX19zdHViX19fUGVybF9ldmFsX3B2KQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBQZXJsX2V2YWxfcHY7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gUGVybF9ldmFsX3B2OwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX1BlcmxfZXZhbF9wdj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1BFUkxfRVZBTF9QVl9VQyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEVSTF9FVkFMX1BWX1VDIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi0KICAgICBMSUJTPSIkT0xETElCUyIKLQorICAgICMKKyAgICAjICAgTm90ZSB0aGF0IGF1dG9jb25mIGZsYXR0ZW5zIGNhc2Ugd2hlbiBkZWZpbmluZyB0b2tlbnMsCisgICAgIyAgIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBsYXR0ZXIgdHdvLgogCiAgICAgaWYgdGVzdCAieCRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19ldmFsX3B2IiAhPSAieHllcyIgOyB0aGVuCiAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgogICAgICAgICBlbWJlZF9wZXJsPSJubyIKICAgICAgIGVsc2UKLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ291bGQgbm90IGZpbmQgdGhlIGV2YWxfcHYsIHBlcmxfZXZhbF9wdiBvciBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENvdWxkIG5vdCBmaW5kIHRoZSBldmFsX3B2LCBwZXJsX2V2YWxfcHYgb3IgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgdGhlIGV2YWxfcHYsIHBlcmxfZXZhbF9wdiBvciBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiAiJExJTkVOTyIgNQogICAgICAgZmkKICAgICBlbHNlCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VNQkVEREVEX1BFUkwgMQotX0FDRU9GCisgICAgICAjICAgQWN0aXZhdGUgRW1iZWRkZWQgUGVybAorICAgICAgIworCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VNQkVEREVEX1BFUkwgMSIgPj5jb25mZGVmcy5oCiAKICAgICAgIE9USEVSQUdFTlRMSUJPQkpTPSJzbm1wX3BlcmwubyIKICAgICAgIE9USEVSQUdFTlRMSUJMT0JKUz0ic25tcF9wZXJsLmxvIgorICAgICAgT1RIRVJBR0VOVExJQkxGVFM9InNubXBfcGVybC5mdCIKIAogICAgICAgRU1CRURQRVJMSU5TVEFMTD0iZW1iZWRwZXJsaW5zdGFsbCIKICAgICAgIEVNQkVEUEVSTFVOSU5TVEFMTD0iZW1iZWRwZXJsdW5pbnN0YWxsIgotICAgICAgIyB5YXksIHdlIGdvdCBoZXJlIQogICAgICAgZW1iZWRfcGVybD0ieWVzIgogICAgIGZpCiBlbHNlCkBAIC0zMjE4MCw2MCArMjQxNzgsNzAgQEAKIGZpCiAKIAorIyMKKyMgICBSZXBvcnQgYW5kIGNvbmZpZ3VyZSByZXN1bHRzCisjIwogCiAKIAotIyBlbWJlZGRlZCBQZXJsIHJlc3VsdHMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNgorCisKKworIyAgICAgICBSZXN1bHRzIG9mIEVtYmVkZGVkIFBlcmwgY2hlY2tzCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0Li4uICIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4eWVzIiA7IHRoZW4KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBkaXNhYmxlZAogRU9GCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZGlzYWJsZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9ZGlzYWJsZWQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZGlzYWJsZWQiID4mNQorJGFzX2VjaG8gImRpc2FibGVkIiA+JjY7IH0KIGVsc2UKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBlbmFibGVkCiBFT0YKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBlbmFibGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfWVuYWJsZWQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZW5hYmxlZCIgPiY1CiskYXNfZWNobyAiZW5hYmxlZCIgPiY2OyB9CiBmaQogCi0jIGluc3RhbGwgUGVybCBtb2R1bGUgcmVzdWx0cworIyAgICAgICBSZXN1bHRzIG9mIFBlcmwgTW9kdWxlIGNoZWNrcworIwogUEVSTFRBUkdTPSIiCiBQRVJMSU5TVEFMTFRBUkdTPSIiCiBQRVJMVU5JTlNUQUxMVEFSR1M9IiIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcy4uLiAkRUNIT19DIiA+JjYKK1BFUkxGRUFUVVJFUz0iIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMuLi4gIiA+JjY7IH0KIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KICAgICBQRVJMVEFSR1M9InBlcmxtb2R1bGVzIgogICAgIFBFUkxJTlNUQUxMVEFSR1M9InBlcmxpbnN0YWxsIgogICAgIFBFUkxVTklOU1RBTExUQVJHUz0icGVybHVuaW5zdGFsbCIKKyAgICBQRVJMRkVBVFVSRVM9InBlcmxmZWF0dXJlcyIKICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh5ZXMiIDsgdGhlbgogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIGVtYmVkZGFibGUKIEVPRgogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMgLS0gYW5kIGVtYmVkZGFibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIC0tIGFuZCBlbWJlZGRhYmxlIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMgLS0gYW5kIGVtYmVkZGFibGUiID4mNQorJGFzX2VjaG8gInllcyAtLSBhbmQgZW1iZWRkYWJsZSIgPiY2OyB9CiAgICAgZWxzZQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIG5vdCBlbWJlZGRhYmxlCiBFT0YKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIC0tIG5vdCBlbWJlZGRhYmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyAtLSBub3QgZW1iZWRkYWJsZSIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIC0tIG5vdCBlbWJlZGRhYmxlIiA+JjUKKyRhc19lY2hvICJ5ZXMgLS0gbm90IGVtYmVkZGFibGUiID4mNjsgfQogICAgIGZpCiBlbHNlCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGRpc2FibGVkCkBAIC0zMjI0NywzOSArMjQyNTUsNDUgQEAKIAogCiAKLSMgcmVzZXQgbGlicworIyAgICAgICBSZXNldCBMSUJTIHRvIHByZS1saWJ3cmFwIHZhbHVlICAgKD8/PykKKyMKIEFHRU5UTElCUz0kTElCUwogTElCUz0kTk9OQUdFTlRMSUJTCiAKIAogCi0jIHB5dGhvbiBzdXBwb3J0CisjIworIyAgIFB5dGhvbiBjaGVja3MKKyMjCisKIFBZVEhPTlRBUkdTPSIiCiBQWVRIT05JTlNUQUxMVEFSR1M9IiIKIFBZVEhPTlVOSU5TVEFMTFRBUkdTPSIiCiBQWVRIT05DTEVBTlRBUkdTPSIiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MuLi4gJEVDSE9fQyIgPiY2CitQWVRIT05GRUFUVVJFUz0iIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MuLi4gIiA+JjY7IH0KIGlmIHRlc3QgIngkaW5zdGFsbF9weXRob24iID0gInh5ZXMiIDsgdGhlbgogICAgIFBZVEhPTlRBUkdTPSJweXRob25tb2R1bGVzIgogICAgIFBZVEhPTklOU1RBTExUQVJHUz0icHl0aG9uaW5zdGFsbCIKICAgICBQWVRIT05VTklOU1RBTExUQVJHUz0icHl0aG9udW5pbnN0YWxsIgogICAgIFBZVEhPTkNMRUFOVEFSR1M9InB5dGhvbmNsZWFuIgorICAgIFBZVEhPTkZFQVRVUkVTPSJweXRob25mZWF0dXJlcyIKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBidWlsZGluZyBmb3IgJFBZVEhPTlBST0cKIEVPRgogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBkaXNhYmxlZAogRU9GCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKQEAgLTMyMjg5LDUxNzkgKzI0MzAzLDI4IEBACiAKIAogCi0jIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+CiAKLWludAotbWFpbiAoKQoteworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisjIworIyAgIFBhY2thZ2UgY2hhcmFjdGVyaXN0aWNzCisjICAgICAgIEF1dGhlbnRpY2F0aW9uL0VuY3J5cHRpb24gc3VwcG9ydAorIyMKIAotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCi0jIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCi0jZWxzZQotIyBkZWZpbmUgSVNMT1dFUihjKSBcCi0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCi0JCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAotCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKLSNlbmRpZgotCi0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQotaW50Ci1tYWluICgpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQotCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQotICAgICAgZXhpdCgyKTsKLSAgZXhpdCAoMCk7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi1fQUNFT0YKLQotZmkKLQotCi0KLQotCi0KLWFjX2hlYWRlcl9kaXJlbnQ9bm8KLWZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbwotICBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPCRhY19oZHI+Ci0KLWludAotbWFpbiAoKQotewotaWYgKChESVIgKikgMCkKLXJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hkciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotYWNfaGVhZGVyX2RpcmVudD0kYWNfaGRyOyBicmVhawotZmkKLQotZG9uZQotIyBUd28gdmVyc2lvbnMgb2Ygb3BlbmRpciBldCBhbC4gYXJlIGluIC1sZGlyIGFuZCAtbHggb24gU0NPIFhlbml4LgotaWYgdGVzdCAkYWNfaGVhZGVyX2RpcmVudCA9IGRpcmVudC5oOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUwotYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIG9wZW5kaXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLW9wZW5kaXIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9Im5vbmUgcmVxdWlyZWQiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9IG5vOyB0aGVuCi0gIGZvciBhY19saWIgaW4gZGlyOyBkbwotICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBvcGVuZGlyICgpOwotaW50Ci1tYWluICgpCi17Ci1vcGVuZGlyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSItbCRhY19saWIiCi1icmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZmkKLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNgotaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiAhPSBubzsgdGhlbgotICB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19jdl9zZWFyY2hfb3BlbmRpciAkTElCUyIKLQotZmkKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKLWFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBvcGVuZGlyICgpOwotaW50Ci1tYWluICgpCi17Ci1vcGVuZGlyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSJub25lIHJlcXVpcmVkIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgotICBmb3IgYWNfbGliIGluIHg7IGRvCi0gICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIG9wZW5kaXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLW9wZW5kaXIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9Ii1sJGFjX2xpYiIKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1maQotTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiICE9IG5vOyB0aGVuCi0gIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9vcGVuZGlyICRMSUJTIgotCi1maQotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c193YWl0X2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNpZm5kZWYgV0VYSVRTVEFUVVMKLSMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkKShzdGF0X3ZhbCkgPj4gOCkKLSNlbmRpZgotI2lmbmRlZiBXSUZFWElURUQKLSMgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKCgoc3RhdF92YWwpICYgMjU1KSA9PSAwKQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotICBpbnQgczsKLSAgd2FpdCAoJnMpOwotICBzID0gV0lGRVhJVEVEIChzKSA/IFdFWElUU1RBVFVTIChzKSA6IDE7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNgotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2ggPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKLV9BQ0VPRgotCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHN0ZGFyZy5oIHN0cmluZy5oIGZjbnRsLmggbGltaXRzLmggc3lzL2ZpbGUuaCBzeXMvaW9jdGwuaCBzeXNsb2cuaCB1bmlzdGQuaCBzeXMvZG1hcC5oIG1hY2hpbmUvcHRlLmggeHRpLmggc3lzL3NvY2tpby5oIHN5cy9zb2NrZXQuaCBzeXMvcGFyYW0uaCBzeXMvdWlvLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGF0IGxlYXN0IFNvbGFyaXMgOSBuZWVkcyBzeXMvc29ja2V0LmggdG8gY29tcGlsZSBzeXMvc29ja2V0dmFyLmgKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc29ja2V0dmFyLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGF0IGxlYXN0IE9wZW5CU0QgMy40IG5lZWRzIHN5cy9wYXJhbS5oIChNQVhQQVRITEVOKSB0byBjb21waWxlIHN5cy9zd2FwLmgKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc3dhcC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy90aW1lb3V0Lmggc3lzL3VuLmggZnN0YWIuaCBzeXMvZnMuaCBtdGFiLmggdWZzL2ZzLmggc3lzL2ZpeHBvaW50LmggbWFjaGluZS9wYXJhbS5oIHN5cy92bS5oIHZtL3ZtLmggc3lzL3ZtbWV0ZXIuaCBzeXMvdm1wYXJhbS5oIHN5cy92bW1hYy5oIHN5cy92bXN5c3RtLmggc3lzL3RpbWUuaCBzeXMvdGltZXMuaCBzeXMvc3RhdHZmcy5oIHN5cy92ZnMuaCBzeXMvbW50dGFiLmggc3lzL3NlbGVjdC5oIG1udGVudC5oIHN5cy9tbnRlbnQuaCBrc3RhdC5oIHV0c25hbWUuaCBzeXMvdXRzbmFtZS5oIHN5cy9jZGVmcy5oIGdldG9wdC5oIGxvY2FsZS5oIHB0aHJlYWQuaCBzeXMvbG9hZGF2Zy5oIHJlZ2V4LmggbGludXgvdGFza3MuaCBwd2QuaCBncnAuaCB1dG1weC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBOZXR3b3JrIGhlYWRlcnMKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gYXJwYS9pbmV0LmggbmV0aW5ldC9pbl9zeXN0bS5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L2lwX3Zhci5oIG5ldGluZXQvdGNwLmggbmV0aW5ldC90Y3BpcC5oIG5ldGluZXQvdWRwLmggbmV0L2lmLmggbmV0aW5ldC9pbl92YXIuaCBuZXRpbmV0L2lwLmggbmV0aW5ldC9pcF9pY21wLmggbmV0L2lmX2FycC5oIG5ldC9pZl9taWIuaCBuZXQvaWZfdmFyLmggbmV0aW5ldC9pZl9ldGhlci5oIG5ldGluZXQvdGNwX3RpbWVyLmggbmV0aW5ldC90Y3BfdmFyLmggbmV0aW5ldC91ZHBfdmFyLmggbmV0aW5ldC9pY21wX3Zhci5oIG5ldGRiLmggbmV0L3JvdXRlLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAotI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfSUZfSAotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIFVGUyBoZWFkZXJzCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gdWZzL3Vmcy9kaW5vZGUuaCB1ZnMvdWZzL3F1b3RhLmggdWZzL3Vmcy9pbm9kZS5oIHVmcy9mZnMvZnMuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9VRlNfVUZTX0RJTk9ERV9ICi0jaW5jbHVkZSA8dWZzL3Vmcy9kaW5vZGUuaD4KLSNlbmRpZgotI2lmIEhBVkVfVUZTX1VGU19RVU9UQV9ICi0jaW5jbHVkZSA8dWZzL3Vmcy9xdW90YS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgRnJlZUJTRCByZXF1aXJlZCBoZWFkZXJzCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBtYWxsb2MuaCBuZXQvaWZfZGwuaCBzeXMvc3lzY3RsLmggc3RkbGliLmggbmV0L2lmX3R5cGVzLmggc3lzL3F1ZXVlLmggb3NyZWxkYXRlLmggbWFjaGluZS90eXBlcy5oIHN5cy91c2VyLmggc3lzL3Byb2MuaCBzeXMvbWJ1Zi5oIHN5cy9tb3VudC5oIHN5cy9ka3N0YXQuaCBzeXMvY29uZi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBMaW51eAotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gbmV0aW5ldC90Y3BfZnNtLmggc3lzL3Byb3Rvc3cuaCBubGlzdC5oIGlvY3Rscy5oIGFzbS9wYWdlLmggYXNtL3R5cGVzLmggbmV0aXB4L2lweC5oIHBjaS9wY2kuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgU29sYXJpcwotCi1mb3IgYWNfaGVhZGVyIGluIGluZXQvbWliMi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBOZXRCU0QgcmVxdWlyZWQgaGVhZGVycwotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBrdm0uaCBzeXMvcG9vbC5oIHV2bS91dm1fcGFyYW0uaCB1dm0vdXZtX2V4dGVybi5oIHZtL3ZtX3BhcmFtLmggdm0vdm1fZXh0ZXJuLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEJTRGkyIGhlYWRlcnMKLQotZm9yIGFjX2hlYWRlciBpbiB2bS9zd2FwX3BhZ2VyLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfVk1fVk1fSAotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBsaW51eCBldGh0b29sCi0jIHJlcXVpcmVzIHNwZWNpYWwgaGFja3MgdG8gZ2V0IGFyb3VuZCB2YXJpb3VzIHByb2JsZW1zIG9uIG9sZGVyIGxpbnV4IGtlcm5lbHMuCi0jIG1ham9yIHVnaC4uLi4KLQotZm9yIGFjX2hlYWRlciBpbiBsaW51eC9ldGh0b29sLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci10eXBlZGVmIF9fdTY0IHU2NDsgICAgICAgICAvKiBoYWNrLCBzbyB3ZSBtYXkgaW5jbHVkZSBrZXJuZWwncyBldGh0b29sLmggKi8KLXR5cGVkZWYgX191MzIgdTMyOyAgICAgICAgIC8qIGRpdHRvICovCi10eXBlZGVmIF9fdTE2IHUxNjsgICAgICAgICAvKiBkaXR0byAqLwotdHlwZWRlZiBfX3U4IHU4OyAgICAgICAgICAgLyogZGl0dG8gKi8KLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBCU0RpMyBoZWFkZXJzCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3N0YXQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgQlNEaTMvSVJJWCBoZWFkZXJzCi0jIGF0IGxlYXN0IElSSVggNi41IG5lZWRzIF9LTUVNVVNFUiBhbmQgc3lzL3R5cGVzLmggKG1wcm90X3QpIHRvIGNvbXBpbGUKLSMgICBzeXMvdm5vZGUuaAotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy92bm9kZS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNkZWZpbmUgX0tNRU1VU0VSIDEKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBhdCBsZWFzdCBJUklYIDYuNSBuZWVkcyBzeXMvc2VtYS5oIChtcmxvY2tfdCkgdG8gY29tcGlsZSBzeXMvaGFzaGluZy5oCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3NlbWEuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvaGFzaGluZy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaWYgSEFWRV9TWVNfU0VNQV9ICi0jaW5jbHVkZSA8c3lzL3NlbWEuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIG1vcmUgSVJJWCBoZWFkZXJzCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3RjcGlwc3RhdHMuaCBzeXMvc3lzbXAuaCBzeXMvc3lzdGVtaW5mby5oIHN5cy9zeXNnZXQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgQUlYIHN5c3RlbSBjb25maWd1cmF0aW9uCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3N5c3RlbWNmZy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBmcm9tIHNtdXggc3R1ZmYKLQotCi0KLWZvciBhY19oZWFkZXIgaW4gZXJyLmggc3lzL2ZpbGlvLmggc2d0dHkuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgQUlYIG5lZWRzIHRoaXMgZm9yIHN0YXRmcyBmdW5jCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3N0YXRmcy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBmb3IgSG9zdFJlcyAoSFAtVVggYXQgbGVhc3QpCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvZGtpby5oIHN5cy9kaXNraW8uaCBzeXMvcHN0YXQuaCBsaW51eC9oZHJlZy5oIHBrZ2xvY3MuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgZm9yIEhvc3RSZXMgKFNvbGFyaXMgMi54IGF0IGxlYXN0KQotCi1mb3IgYWNfaGVhZGVyIGluIHBrZ2luZm8uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGtnaW5mbyBpbiAtbGFkbSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwa2dpbmZvIGluIC1sYWRtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfYWRtX3BrZ2luZm8rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxhZG0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcGtnaW5mbyAoKTsKLWludAotbWFpbiAoKQotewotcGtnaW5mbyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfYWRtX3BrZ2luZm89eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9hZG1fcGtnaW5mbz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9hZG1fcGtnaW5mbyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2FkbV9wa2dpbmZvIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9hZG1fcGtnaW5mbyA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1BLR0lORk8gMQotX0FDRU9GCi0KLSAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxhZG0iCi1maQotCi1maQotCi1kb25lCi0KLQotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgYWl4KikgIyBBSVggcGVyZnN0YXQgbGlicmFyeSwgbmVlZGVkIGZvciBDUFUvbWVtb3J5IHN0YXRpc3RpY3MKLQotZm9yIGFjX2hlYWRlciBpbiBsaWJwZXJmc3RhdC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0gZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwZXJmc3RhdF9jcHVfdG90YWwgaW4gLWxwZXJmc3RhdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwZXJmc3RhdF9jcHVfdG90YWwgaW4gLWxwZXJmc3RhdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHBlcmZzdGF0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsKLWludAotbWFpbiAoKQotewotcGVyZnN0YXRfY3B1X3RvdGFsICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWw9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWw9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWwgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QRVJGU1RBVCAxCi1fQUNFT0YKLQotICAgICAgICAgICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGVyZnN0YXQiCi1maQotCi1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6Ci0KLSoqKiBUbyBtb25pdG9yIENQVS9tZW1vcnkgdmFsdWVzIGluIEFJWCB5b3UgbmVlZCB0byBpbnN0YWxsCi0qKiogbGlicGVyZnN0YXQgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGJvcy5wZXJmCi0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjoKLQotKioqIFRvIG1vbml0b3IgQ1BVL21lbW9yeSB2YWx1ZXMgaW4gQUlYIHlvdSBuZWVkIHRvIGluc3RhbGwKLSoqKiBsaWJwZXJmc3RhdCB3aGljaCBjYW4gYmUgZm91bmQgaW4gYm9zLnBlcmYKLSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotZG9uZQotCi0gICAgICAgIDs7Ci0gICAgaHB1eCopICMgSFAtVVggYWdlbnQgbmVlZHMgb3Blbl9taWIKLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvcGVuX21pYiBpbiAtbG5tIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9wZW5fbWliIGluIC1sbm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9ubV9vcGVuX21pYitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG5tICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIG9wZW5fbWliICgpOwotaW50Ci1tYWluICgpCi17Ci1vcGVuX21pYiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfbm1fb3Blbl9taWI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9ubV9vcGVuX21pYj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ubV9vcGVuX21pYiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX25tX29wZW5fbWliIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9ubV9vcGVuX21pYiA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQk5NIDEKLV9BQ0VPRgotCi0gICAgICAgICAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxubSIKLWZpCi0KLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICA7OwotZXNhYwotIyBXSU4zMgotIyAobWluZ3czMiBtdXN0IGxpbmsgd2luc29jayBleHBsaWNpdGx5KQotCi1mb3IgYWNfaGVhZGVyIGluIHdpbnNvY2suaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi0gICAgICAgIEFHRU5UTElCUz0iJHtBR0VOVExJQlN9IC1saXBobHBhcGkiCi0gICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgotICAgICAgICAgICAgICAgIG1pbmd3KikKLSAgICAgICAgICAgICAgICAgICAgICAgIExJQlM9IiR7TElCU30gLWxyZWdleCAtbHdzMl8zMiIKLSAgICAgICAgICAgICAgICAgICAgICAgIEFHRU5UTElCUz0iJHtBR0VOVExJQlN9IC1scmVnZXggLWx3czJfMzIiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIGlvLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIFNDTwotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zdHJlYW0uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgS0FNRQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L2lwNi5oIG5ldGluZXQ2L2luNl92YXIuaCBuZXRpbmV0Ni9pbjZfcGNiLmggbmV0aW5ldDYvaXA2X3Zhci5oIG5ldGluZXQ2L3RjcDYuaCBuZXRpbmV0Ni90Y3A2X2ZzbS5oIG5ldGluZXQ2L25kNi5oIG5ldGluZXQ2L3RjcDZfdGltZXIuaCBuZXRpbmV0Ni90Y3A2X3Zhci5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUDZfSAotI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9JRl9ICi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9ST1VURV9ICi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBEWU5BTUlDIE1PRFVMRSBTVVBQT1JUCi0KLWZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgdGFibGVfYXJyYXkgaGVscGVyIHN1cHBvcnQKLQotZm9yIGFjX2hlYWRlciBpbiBzZWFyY2guaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotIyBSUE0gc3ViZGlyZWN0b3J5IHBhdGggKHNpZ2gpCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0KLWZvciBhY19oZWFkZXIgaW4gcnBtL3JwbXRzLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxycG0vcnBtbGliLmg+Ci0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi1maQotCi0jIE9wZW5CU0QgMi42IG5lZWRzIG5ldGluZXQvaW4uaCBiZWZvcmUgbmV0aW5ldC9pbl9wY2IuaAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBuZXRpbmV0L2luX3BjYi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5ldGluZXQvaW5fcGNiLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2N2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbl9wY2IuaD4KLQotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBjdl9oYXZlX25ldGluZXRfaW5fcGNiX2g9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjdl9oYXZlX25ldGluZXRfaW5fcGNiX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCIgPiY2Ci1pZiB0ZXN0ICRjdl9oYXZlX25ldGluZXRfaW5fcGNiX2ggPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX1BDQl9IIDEKLV9BQ0VPRgotCi1maQotCi0jIE5ldEJTRCBuZWVkcyBtYWNoaW5lL3R5cGVzLmggYmVmb3JlIHN5cy9kaXNrbGFiZWwuaAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvZGlza2xhYmVsLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL2Rpc2tsYWJlbC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2Rpc2tsYWJlbC5oPgotCi1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2giID4mNgotaWYgdGVzdCAkY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2ggPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfRElTS0xBQkVMX0ggMQotX0FDRU9GCi0KLWZpCi0KLSMgT3BlblNTTAotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gb3BlbnNzbC9obWFjLmggb3BlbnNzbC9ldnAuaCBvcGVuc3NsL2Flcy5oIG9wZW5zc2wvZGVzLmggb3BlbnNzbC9kaC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHNlY3VyaXR5L2NyeXB0b2tpLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLSMgUHJpbnRpbmcKLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibHBzdGF0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBscHN0YXQ7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfTFBTVEFUX1BBVEgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkTFBTVEFUX1BBVEggaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfTFBTVEFUX1BBVEg9IiRMUFNUQVRfUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotTFBTVEFUX1BBVEg9JGFjX2N2X3BhdGhfTFBTVEFUX1BBVEgKLQotaWYgdGVzdCAtbiAiJExQU1RBVF9QQVRIIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTFBTVEFUX1BBVEgiID4mNQotZWNobyAiJHtFQ0hPX1R9JExQU1RBVF9QQVRIIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotaWYgdGVzdCB4JExQU1RBVF9QQVRIICE9IHg7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIExQU1RBVF9QQVRIICIkTFBTVEFUX1BBVEgiCi1fQUNFT0YKLQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTFBTVEFUIDEKLV9BQ0VPRgotCi1maQotCi1mb3IgYWNfZnVuYyBpbiBjZ2V0bmV4dAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWlmIHRlc3QgLXIgL2V0Yy9wcmludGNhcDsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUFJJTlRDQVAgMQotX0FDRU9GCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNgorIyAgICAgICBDaGVjayBmb3IgUEtDUzExCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0Li4uICIgPiY2OyB9CiB1c2VvcGVuc3NsPW5vCiB1c2Vwa2NzPW5vCiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X2NyeXB0b2tpX2giICE9ICJ4eWVzIjsgdGhlbgogICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFza2VkIHRvIHVzZSBQS0NTMTEgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQXNrZWQgdG8gdXNlIFBLQ1MxMSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQXNrZWQgdG8gdXNlIFBLQ1MxMSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgIiRMSU5FTk8iIDUKICAgICBmaQogZWxzZQogICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgpAQCAtMzc0NjksMTEgKzI0MzMyLDExIEBACiAgICAgZmkKIGZpCiAKLWlmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KKyMgICAgICAgQ2hlY2sgZm9yIE9wZW5TU0wKKyMKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfbGliX2VheTMyX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgogICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBc2tlZCB0byB1c2UgT3BlblNTTCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBc2tlZCB0byB1c2UgT3BlblNTTCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQXNrZWQgdG8gdXNlIE9wZW5TU0wgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iICIkTElORU5PIiA1CiAgICAgZmkKIGVsc2UKICAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KQEAgLTM3NDg1LDcgKzI0MzQ4LDIxIEBACiAgICAgZmkKIGZpCiAKLWlmIHRlc3QgIngkdXNlb3BlbnNzbCIgIT0gInhubyIgOyB0aGVuCisjICAgICAgIEF2YWlsYWJsZSBhdXRoZW50aWNhdGlvbi9lbmNyeXB0aW9uIG1vZGVzCisjCitpZiB0ZXN0ICJ4JENSWVBUTyIgPSAieGludGVybmFsIiA7IHRoZW4KKyAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBlbmNybW9kZXM9IkRFUyBBRVMiCisgICAgZWxzZQorICAgICAgICBlbmNybW9kZXM9ImRpc2FibGVkIgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTyAxIiA+PmNvbmZkZWZzLmgKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBJbnRlcm5hbCBDcnlwdG8gU3VwcG9ydCIgPiY1CiskYXNfZWNobyAiSW50ZXJuYWwgQ3J5cHRvIFN1cHBvcnQiID4mNjsgfQorZWxpZiB0ZXN0ICJ4JHVzZW9wZW5zc2wiICE9ICJ4bm8iIDsgdGhlbgogICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCiAgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCiAgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfYWVzX2giID0gInh5ZXMiIDsgdGhlbgpAQCAtMzc0OTYsMTMgKzI0MzczLDExIEBACiAgICAgZWxzZQogICAgICAgICBlbmNybW9kZXM9ImRpc2FibGVkIgogICAgIGZpCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxCi1fQUNFT0YKKyAgICAkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEiID4+Y29uZmRlZnMuaAogCiAgICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJDUllQVE8iCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogT3BlblNTTCBTdXBwb3J0IiA+JjUKLWVjaG8gIiR7RUNIT19UfU9wZW5TU0wgU3VwcG9ydCIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9wZW5TU0wgU3VwcG9ydCIgPiY1CiskYXNfZWNobyAiT3BlblNTTCBTdXBwb3J0IiA+JjY7IH0KIGVsaWYgdGVzdCAieCR1c2Vwa2NzIiAhPSAieG5vIiA7IHRoZW4KICAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgogICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgpAQCAtMzc1MTAsMzEgKzI0Mzg1LDMzIEBACiAgICAgZWxzZQogICAgICAgICBlbmNybW9kZXM9ImRpc2FibGVkIgogICAgIGZpCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfUEtDUzExIDEKLV9BQ0VPRgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9QS0NTMTEgMSIgPj5jb25mZGVmcy5oCiAKICAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQlBLQ1MxMSIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBQS0NTMTEgU3VwcG9ydCIgPiY1Ci1lY2hvICIke0VDSE9fVH1QS0NTMTEgU3VwcG9ydCIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFBLQ1MxMSBTdXBwb3J0IiA+JjUKKyRhc19lY2hvICJQS0NTMTEgU3VwcG9ydCIgPiY2OyB9CiBlbGlmIHRlc3QgIngkZW5hYmxlX21kNSIgIT0gInhubyI7IHRoZW4KICAgICBhdXRobW9kZXM9Ik1ENSIKICAgICBlbmNybW9kZXM9IiIKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgMQotX0FDRU9GCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1IDEiID4+Y29uZmRlZnMuaAogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogSW50ZXJuYWwgTUQ1IFN1cHBvcnQiID4mNQotZWNobyAiJHtFQ0hPX1R9SW50ZXJuYWwgTUQ1IFN1cHBvcnQiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBJbnRlcm5hbCBNRDUgU3VwcG9ydCIgPiY1CiskYXNfZWNobyAiSW50ZXJuYWwgTUQ1IFN1cHBvcnQiID4mNjsgfQogZmkKIGlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotICAgIGF1dGhtb2Rlcz1gZWNobyAkYXV0aG1vZGVzIHwgc2VkICdzL01ENSAqLy87J2AKKyAgICBhdXRobW9kZXM9YGVjaG8gJGF1dGhtb2RlcyB8ICRTRUQgJ3MvTUQ1ICovLzsnYAogZmkKIAogCiAKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIENyeXB0byBzdXBwb3J0IGZyb206ICAgICAgICAkQ1JZUFRPCitFT0YKKworCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgQXV0aGVudGljYXRpb24gc3VwcG9ydDogICAgICRhdXRobW9kZXMKIEVPRgogCkBAIC0zNzU1MiwxMzEgKzI0NDI5LDI2MCBAQAogCiBmaQogCi0jIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9mZl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9mZl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX29mZl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCisjCisjIENoZWNrIHdoZXRoZXIgdXNlciB3YW50cyBETlNTRUMgbG9jYWwgdmFsaWRhdGlvbiBzdXBwb3J0CisjCitfbGlicz0ke0xJQlN9CitpZiAhIHRlc3QgIngtJHdhbnRfZG5zc2VjIiA9ICJ4LW5vIiA7IHRoZW4KKyAgICBmb3IgYWNfaGVhZGVyIGluIHZhbGlkYXRvci92YWxpZGF0b3ItY29uZmlnLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInZhbGlkYXRvci92YWxpZGF0b3ItY29uZmlnLmgiICJhY19jdl9oZWFkZXJfdmFsaWRhdG9yX3ZhbGlkYXRvcl9jb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdmFsaWRhdG9yX3ZhbGlkYXRvcl9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1ZBTElEQVRPUl9WQUxJREFUT1JfQ09ORklHX0ggMQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl92YWxpZGF0b3JfdmFsaWRhdG9yX2NvbmZpZ19oIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNhbid0IGZpbmQgdmFsaWRhdG9yLmgiICIkTElORU5PIiA1CisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1hIFwKKyAgICAgICAgICAgICJ4JGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1IiAhPSAieHllcyIgLW8gXAorICAgICAgICAgICAgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkbid0IGZpbmQgT3BlblNTTCBmb3IgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gc3VwcG9ydC4iICIkTElORU5PIiA1CisgICAgZmkKKyAgICBMSUJTPSIkTElCUyAkTElCQ1JZUFRPIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHF1ZXJ5X3NlbmQgaW4gLWxzcmVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBxdWVyeV9zZW5kIGluIC1sc3Jlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzcmVzICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcXVlcnlfc2VuZCAoKTsKIGludAogbWFpbiAoKQogewotaWYgKChvZmZfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKG9mZl90KSkKLSAgcmV0dXJuIDA7CityZXR1cm4gcXVlcnlfc2VuZCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX29mZl90PXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlNSRVMgMQorX0FDRU9GCiAKLWFjX2N2X3R5cGVfb2ZmX3Q9bm8KKyAgTElCUz0iLWxzcmVzICRMSUJTIgorCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJDYW4ndCBmaW5kIGxpYnNyZXMiICIkTElORU5PIiA1CiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgVkFMX0xJQlM9Ii1sc3JlcyAkTElCQ1JZUFRPIgorICAgIExJQlM9IiRMSUJTIC1sc3JlcyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwX3ZhbF9zdGF0dXMgaW4gLWx2YWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBfdmFsX3N0YXR1cyBpbiAtbHZhbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sdmFsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwX3ZhbF9zdGF0dXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwX3ZhbF9zdGF0dXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXM9eWVzCitlbHNlCisgIGFjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzPW5vCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfb2ZmX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfb2ZmX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9vZmZfdCA9IHllczsgdGhlbgotICA6CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzIiA9IHh5ZXM7IHRoZW4gOgorICBMSUJTPSIkTElCUyAtbHZhbCIKKyAgICAgICAgICAgICAgICAgVkFMX0xJQlM9IiRWQUxfTElCUyAtbHZhbCIKKyAgICAgICAgICAgICAgICAgaGF2ZV92YWxfcmVzX3F1ZXJ5PXllcworZWxzZQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9yd2xvY2tfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfcndsb2NrX2luaXQgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHB0aHJlYWQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHB0aHJlYWRfcndsb2NrX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX3J3bG9ja19pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUFRIUkVBRCAxCitfQUNFT0YKKworICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisKK2ZpCisKKwkJICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcF92YWxfc3RhdHVzIGluIC1sdmFsLXRocmVhZHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBfdmFsX3N0YXR1cyBpbiAtbHZhbC10aHJlYWRzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHZhbC10aHJlYWRzICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwX3ZhbF9zdGF0dXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwX3ZhbF9zdGF0dXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXMiID0geHllczsgdGhlbiA6CisgIGhhdmVfdmFsX3Jlc19xdWVyeT15ZXMKKyAgICAgICAgICAgICAgICAgICBMSUJTPSItbHZhbC10aHJlYWRzICRMSUJTIgorICAgICAgICAgICAgICAgICAgIFZBTF9MSUJTPSItbHZhbC10aHJlYWRzIC1scHRocmVhZCAkVkFMX0xJQlMiCisgICAgICAgICAgICAgICAgICAgTElCVkFMX1NVRkZJWD0iLXRocmVhZHMiCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJDYW4ndCBmaW5kIGxpYnZhbCBvciBsaWJ2YWwtdGhyZWFkcyIgIiRMSU5FTk8iIDUKK2ZpCisKKworZmkKKworCiskYXNfZWNobyAiI2RlZmluZSBETlNTRUNfTE9DQUxfVkFMSURBVElPTiAxIiA+PmNvbmZkZWZzLmgKKworICAgIEROU1NFQz0iZW5hYmxlZCIKK2Vsc2UKKyAgICBETlNTRUM9ImRpc2FibGVkIgorZmkKKworTElCUz0ke19saWJzfQorCisKKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIExvY2FsIEROU1NFQyB2YWxpZGF0aW9uOiAgICAkRE5TU0VDCitFT0YKKworCisKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciB0eXBlcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAib2ZmX3QiICJhY19jdl90eXBlX29mZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfb2ZmX3QiID0geHllczsgdGhlbiA6CisKIGVsc2UKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBvZmZfdCBsb25nCisjZGVmaW5lIG9mZl90IGxvbmcgaW50CiBfQUNFT0YKIAogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwaWRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwaWRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9waWRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgocGlkX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChwaWRfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfcGlkX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwaWRfdCIgImFjX2N2X3R5cGVfcGlkX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9waWRfdCIgPSB4eWVzOyB0aGVuIDoKIAotYWNfY3ZfdHlwZV9waWRfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9waWRfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3BpZF90ID0geWVzOyB0aGVuCi0gIDoKIGVsc2UKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMzc2ODUsMTYgKzI0NjkxLDEyIEBACiAKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGltZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfdGltZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTM3NzA5LDYxICsyNDcxMSwzMCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9oZWFkZXJfdGltZT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGVhZGVyX3RpbWU9bm8KKyAgYWNfY3ZfaGVhZGVyX3RpbWU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfdGltZSIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKIAotIyB0aGlzIHNob3VsZCB1c2UgQUNfQ0hFQ0tfVFlQRSwgYnV0IGl0J3MgYnJva2VuIGF0IGxlYXN0IGluIDIuMTMtMTQKLSMgc28gd2UgZG8gaXQgYnkgaGFuZC4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2xlbl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2tsZW5fdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHthY19jdl90eXBlXyQxK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyMjCisjICAgTW9yZSBjb21wbGV4IGNoZWNrczoKKyMjCisKKyMgICBDaGVjayBmb3IgJ3NvY2tsZW5fdCcgICAgICAgICAgICAgICAgICAgICAgICAgICAoSFAtVVgpCisjCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzb2NrbGVuX3QiICJhY19jdl90eXBlX3NvY2tsZW5fdCIgIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFNURENfSEVBREVSUwogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMzc3NzIsMzkgKzI0NzQzLDIyIEBACiAjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInNvY2tsZW5fdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19jdl90eXBlX3NvY2tsZW5fdD15ZXMKLWVsc2UKLSAgYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zb2NrbGVuX3QiID0geHllczsgdGhlbiA6CiAKLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc29ja2xlbl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NvY2tsZW5fdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3NvY2tsZW5fdCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NPQ0tMRU5fVCAxCiBfQUNFT0YKIAorCiBmaQogCi0jIEFJWCBrZWVwcyBpbl9hZGRyX3QgaW4gL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbl9hZGRyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5fYWRkcl90Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3R5cGVfJDErc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgQ2hlY2sgZm9yICdpbl9hZGRyX3QnCisjICAgICAgIE1heSBiZSBpbiA8bmV0aW5ldC9pbi5oPiAgICAgICAgICAgICAgICAgICAgICAgIChBSVgpCisjCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbl9hZGRyX3QiICJhY19jdl90eXBlX2luX2FkZHJfdCIgIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFNURENfSEVBREVSUwogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMzc4MTMsNDMwICsyNDc2Nyw0MjcgQEAKICNpZmRlZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiaW5fYWRkcl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2N2X3R5cGVfaW5fYWRkcl90PXllcwotZWxzZQotICBhY19jdl90eXBlX2luX2FkZHJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX2luX2FkZHJfdCIgPSB4eWVzOyB0aGVuIDoKIAotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbl9hZGRyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW5fYWRkcl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW5fYWRkcl90ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfSU5fQUREUl9UIDEKIF9BQ0VPRgogCisKIGZpCiAKLSMgT2xkZXIgdmVyc2lvbnMgb2YgTWluR1cgZG8gbm90IGRlZmluZSBzc2l6ZV90IGluIHN5cy90eXBlcwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzc2l6ZV90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNzaXplX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfdHlwZV8kMStzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyMgICBDaGVjayBmb3IgJ3NzaXplX3QnCisjICAgICAgIE5vdCBuZWNlc3NhcmlseSBpbiA8c3lzL3R5cGVzLmg+ICAgICAgICAgICAgICAgIChvbGRlciBNaW5HVykKKyMKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNzaXplX3QiICJhY19jdl90eXBlX3NzaXplX3QiICIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBTVERDX0hFQURFUlMKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNlbmRpZgotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAic3NpemVfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19jdl90eXBlX3NzaXplX3Q9eWVzCi1lbHNlCi0gIGFjX2N2X3R5cGVfc3NpemVfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geHllczsgdGhlbiA6CiAKLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc3NpemVfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zc2l6ZV90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfc3NpemVfdCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NTSVpFX1QgMQogX0FDRU9GCiAKLWZpCi0KLSMgQ2hlY2sgcHMgYXJncwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBjb3JyZWN0IGZsYWdzIHRvIHBzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BzX2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgImAoJFBTUFJPRyAtZSAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1lbCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZWwiCi1lbGlmIHRlc3QgImAoJFBTUFJPRyBhY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iYWN4IgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0gMj4mMSkgfCAkRUdSRVAgJyBwcyAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgYXggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iYXgiCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi4iID4mMjt9Ci0gIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgotZmkKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wc19mbGFncyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHNfZmxhZ3MiID4mNgotCi1QU0NNRD0iJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUFNDTUQgIiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgotX0FDRU9GCiAKIAotIyBDaGVja3MgZm9yIGJ5dGUgb3JkZXIKLWlmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllczsgdGhlbgotICBpZiB0ZXN0IHgkd2l0aF9lbmRpYW5uZXNzID0geGJpZzsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCi1fQUNFT0YKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotICBlbGlmIHRlc3QgLXogJHdpdGhfZW5kaWFubmVzczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFlvdSBhcmUgY3Jvc3MtY29tcGlsaW5nLCBidXQgeW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBZb3UgYXJlIGNyb3NzLWNvbXBpbGluZywgYnV0IHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRhcmdldCdzIGVuZGlhbm5lc3MiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKKyMjCisjICAgQ29tcGlsYXRpb24gY2hhcmFjdGVyaXN0aWNzCisjIworCisjICAgICAgIEJ5dGUgb3JkZXIKKyMKK2lmIHRlc3QgIiR3aXRoX2VuZGlhbm5lc3MiID0gImJpZyI7IHRoZW4KKyAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2VsaWYgdGVzdCAiJHdpdGhfZW5kaWFubmVzcyIgPSAibGl0dGxlIiA7IHRoZW4KKyAgICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgJHdpdGhfZW5kaWFubmVzczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEVuZGlhbm5lc3MgaGFzIGJlZW4gc3BlY2lmaWVkLCBidXQgeW91IGFyZSBub3QgY3Jvc3MtY29tcGlsaW5nLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBFbmRpYW5uZXNzIGhhcyBiZWVuIHNwZWNpZmllZCwgYnV0IHlvdSBhcmUgbm90IGNyb3NzLWNvbXBpbGluZy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2JpZ2VuZGlhbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKyAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fQVBQTEVfQ0NfXworCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorCSAgICAgI2VuZGlmCisJICAgICB0eXBlZGVmIGludCBkdW1teTsKKwogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJjaCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzCisJIyB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKwlhY19hcmNoPQorCWFjX3ByZXY9CisJZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBkbworCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKwkgICBjYXNlICRhY193b3JkIGluCisJICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpCisJICAgICAgIGlmIHRlc3QgLXogIiRhY19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuCisJCSBhY19hcmNoPSRhY193b3JkCisJICAgICAgIGVsc2UKKwkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbAorCQkgYnJlYWsKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwkgICBlc2FjCisJICAgYWNfcHJldj0KKwkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4KKwkgICBhY19wcmV2PWFyY2gKKwkgZmkKKyAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKLSNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgotIGJvZ3VzIGVuZGlhbiBtYWNyb3MKLSNlbmRpZgorI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKICNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KLSBub3QgYmlnIGVuZGlhbgotI2VuZGlmCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9jX2JpZ2VuZGlhbj1ubworICBhY19jdl9jX2JpZ2VuZGlhbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXNob3J0IGFzY2lpX21tW10gPSB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKLXNob3J0IGFzY2lpX2lpW10gPSB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKLXZvaWQgX2FzY2lpICgpIHsgY2hhciAqcyA9IChjaGFyICopIGFzY2lpX21tOyBzID0gKGNoYXIgKikgYXNjaWlfaWk7IH0KLXNob3J0IGViY2RpY19paVtdID0geyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07Ci1zaG9ydCBlYmNkaWNfbW1bXSA9IHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9Owotdm9pZCBfZWJjZGljICgpIHsgY2hhciAqcyA9IChjaGFyICopIGViY2RpY19tbTsgcyA9IChjaGFyICopIGViY2RpY19paTsgfQorI2luY2x1ZGUgPGxpbWl0cy5oPgorCiBpbnQKIG1haW4gKCkKIHsKLSBfYXNjaWkgKCk7IF9lYmNkaWMgKCk7CisjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgotICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWZpCi1pZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCi0gICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLSAgZWxzZQotICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPwotICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgZmkKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCiBpbnQKIG1haW4gKCkKIHsKLSAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLwotICB1bmlvbgotICB7Ci0gICAgbG9uZyBsOwotICAgIGNoYXIgY1tzaXplb2YgKGxvbmcpXTsKLSAgfSB1OwotICB1LmwgPSAxOwotICBleGl0ICh1LmNbc2l6ZW9mIChsb25nKSAtIDFdID09IDEpOworI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKwkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKwkgICAgZmkKKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisJCWFjX2N2X2NfYmlnZW5kaWFuPW5vCisJICAgICAgZWxzZQorCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKwkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorCSAgICAgIGZpCisJICAgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCiAKLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2NfYmlnZW5kaWFuPXllcworICAgIGZpCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19iaWdlbmRpYW4iID4mNgotY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4KLSAgeWVzKQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorICAgeWVzKQorICAgICAkYXNfZWNobyAiI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMSIgPj5jb25mZGVmcy5oCis7OyAjKAorICAgbm8pCisgICAgICA7OyAjKAorICAgdW5pdmVyc2FsKQogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAorCisgICAgIDs7ICMoCisgICAqKQorICAgICBhc19mbl9lcnJvciAkPyAiRmFpbGVkIHRvIGZpZ3VyZSBvdXQgaG9zdCBlbmRpYW5uZXNzLCBwbGVhc2UgdXNlIC0td2l0aC1lbmRpYW5uZXNzIHRvIHNwZWNpZnkgaXQuIiAiJExJTkVOTyIgNSA7OworIGVzYWMKKworCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKwogX0FDRU9GCi0gOzsKLSAgbm8pCi0gICAgIDs7Ci0gICopCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKLXByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CitfQUNFT0YKIAogZmkKIAotIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgogIyBUaGUgVWx0cml4IDQuMiBtaXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKICMgZm9yIGNvbnN0YW50IGFyZ3VtZW50cy4gIFVzZWxlc3MhCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl93b3JraW5nX2FsbG9jYV9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhbGxvY2EuaD4KIGludAogbWFpbiAoKQogewogY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAqIHNpemVvZiAoaW50KSk7CisJCQkgIGlmIChwKSByZXR1cm4gMDsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl93b3JraW5nX2FsbG9jYV9oPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCisgIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBX0ggMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX0dOVUNfXwogIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKQEAgLTM4MjQ1LDE0ICsyNTE5NiwxNCBAQAogIyAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKICMgZWxzZQotIyAgaWYgSEFWRV9BTExPQ0FfSAorIyAgaWZkZWYgSEFWRV9BTExPQ0FfSAogIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgogIyAgZWxzZQogIyAgIGlmZGVmIF9BSVgKICAjcHJhZ21hIGFsbG9jYQogIyAgIGVsc2UKICMgICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KLWNoYXIgKmFsbG9jYSAoKTsKK3ZvaWQgKmFsbG9jYSAoc2l6ZV90KTsKICMgICAgZW5kaWYKICMgICBlbmRpZgogIyAgZW5kaWYKQEAgLTM4MjYzLDUwICsyNTIxNCwyNSBAQAogbWFpbiAoKQogewogY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMSk7CisJCQkJICAgIGlmIChwKSByZXR1cm4gMDsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KKyAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY2OyB9CiAKIGlmIHRlc3QgJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQUxMT0NBIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0EgMSIgPj5jb25mZGVmcy5oCiAKIGVsc2UKICAgIyBUaGUgU1ZSMyBsaWJQVyBhbmQgU1ZSNCBsaWJ1Y2IgYm90aCBjb250YWluIGluY29tcGF0aWJsZSBmdW5jdGlvbnMKQEAgLTM4MzE0LDI1ICsyNTI0MCwxOSBAQAogIyBjb250YWluIGEgYnVnZ3kgdmVyc2lvbi4gIElmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSB0aGVpciBhbGxvY2EsCiAjIHVzZSBhciB0byBleHRyYWN0IGFsbG9jYS5vIGZyb20gdGhlbSBpbnN0ZWFkIG9mIGNvbXBpbGluZyBhbGxvY2EuYy4KIAotQUxMT0NBPWFsbG9jYS4kYWNfb2JqZXh0CitBTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIENfQUxMT0NBIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgQ19BTExPQ0EgMSIgPj5jb25mZGVmcy5oCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfb3NfY3JheStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29zX2NyYXkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmIGRlZmluZWQoQ1JBWSkgJiYgISBkZWZpbmVkKENSQVkyKQorI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmluZWQgQ1JBWTIKIHdlYmVjcmF5CiAjZWxzZQogd2Vub3RiZWNyYXkKQEAgLTM4MzQwLDcgKzI1MjYwLDcgQEAKIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgIndlYmVjcmF5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBhY19jdl9vc19jcmF5PXllcwogZWxzZQogICBhY19jdl9vc19jcmF5PW5vCkBAIC0zODM0OCwxMDIgKzI1MjY4LDEzIEBACiBybSAtZiBjb25mdGVzdCoKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9vc19jcmF5IiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQogaWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgogICBmb3IgYWNfZnVuYyBpbiBfZ2V0YjY3IEdFVEI2NyBnZXRiNjc7IGRvCi0gICAgYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBDUkFZX1NUQUNLU0VHX0VORCAkYWNfZnVuYwpAQCAtMzg0NTUsMjAgKzI1Mjg2LDE3IEBACiAgIGRvbmUKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0wCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKQogewpAQCAtMzg0ODYsNjAgKzI1MzE0LDQyIEBACiBpbnQKIG1haW4gKCkKIHsKLSAgZXhpdCAoZmluZF9zdGFja19kaXJlY3Rpb24gKCkgPCAwKTsKKyAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpIDwgMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQogCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNgotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNjsgfQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTVEFDS19ESVJFQ1RJT04gJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uCiBfQUNFT0YKIAogCiBmaQotCisgICAgICAgICAgIyAgYWxsb2NhKCkKIGlmIHRlc3QgJGFjX2N2X2NfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgIGFjX3BhdHRlcm49IkF1dG9jb25mLioneCciCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c2d0dHkuaD4KIEF1dG9jb25mIFRJT0NHRVRQCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcwogZWxzZQogICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD1ubwpAQCAtMzg1NDgsNDMgKzI1MzU4LDQzIEBACiAKIAogICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IG5vOyB0aGVuCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHRlcm1pby5oPgogQXV0b2NvbmYgVENHRVRBCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcwogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogCiAgIGZpCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNjsgfQogICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IHllczsgdGhlbgogICAgIENDPSIkQ0MgLXRyYWRpdGlvbmFsIgogICBmaQogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIG1lbWNtcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIG1lbWNtcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAtYSAiJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nK3NldH0iICE9IHNldAordGhlbgorICAjIENyb3NzLWNvbXBpbGluZyBhbmQgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyBoYXMgbm90IGJlZW4gc2V0IC0gYXNzdW1lCisgICMgdGhhdCBtZW1jbXAoKSBpcyBhdmFpbGFibGUuCisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzCiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgTmF0aXZlIGNvbXBpbGF0aW9uIC0gdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBtZW1jbXAoKS4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKQEAgLTM4NTkyLDkgKzI1NDAyLDkgQEAKIHsKIAogICAvKiBTb21lIHZlcnNpb25zIG9mIG1lbWNtcCBhcmUgbm90IDgtYml0IGNsZWFuLiAgKi8KLSAgY2hhciBjMCA9IDB4NDAsIGMxID0gMHg4MCwgYzIgPSAweDgxOworICBjaGFyIGMwID0gJ1wxMDAnLCBjMSA9ICdcMjAwJywgYzIgPSAnXDIwMSc7CiAgIGlmIChtZW1jbXAoJmMwLCAmYzIsIDEpID49IDAgfHwgbWVtY21wKCZjMSwgJmMyLCAxKSA+PSAwKQotICAgIGV4aXQgKDEpOworICAgIHJldHVybiAxOwogCiAgIC8qIFRoZSBOZXh0IHg4NiBPcGVuU3RlcCBidWcgc2hvd3MgdXAgb25seSB3aGVuIGNvbXBhcmluZyAxNiBieXRlcwogICAgICBvciBtb3JlIGFuZCB3aXRoIGF0IGxlYXN0IG9uZSBidWZmZXIgbm90IHN0YXJ0aW5nIG9uIGEgNC1ieXRlIGJvdW5kYXJ5LgpAQCAtMzg2MTAsNDIyICsyNTQyMCwzNzQgQEAKIAlzdHJjcHkgKGEsICItLS0tLS0tLTAxMTExMTExIik7CiAJc3RyY3B5IChiLCAiLS0tLS0tLS0xMDAwMDAwMCIpOwogCWlmIChtZW1jbXAgKGEsIGIsIDE2KSA+PSAwKQotCSAgZXhpdCAoMSk7CisJICByZXR1cm4gMTsKICAgICAgIH0KLSAgICBleGl0ICgwKTsKKyAgICByZXR1cm4gMDsKICAgfQogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjYKLXRlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubyAmJiBjYXNlICRMSUJPQkpTIGluCi0gICAgIm1lbWNtcC4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBtZW1jbXAuJGFjX29iamV4dCIgICB8IFwKLSAgICAibWVtY21wLiRhY19vYmpleHQgIiogfCBcCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjY7IH0KK3Rlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubyAmJiBjYXNlICIgJExJQk9CSlMgIiBpbgogICAqIiBtZW1jbXAuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIG1lbWNtcC4kYWNfb2JqZXh0IiA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtZW1jbXAuJGFjX29iamV4dCIKKyA7OwogZXNhYwogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2lnbmFsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV9zaWduYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgotI2lmZGVmIHNpZ25hbAotIyB1bmRlZiBzaWduYWwKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgKCpzaWduYWwgKGludCwgdm9pZCAoKikoaW50KSkpKGludCk7Ci0jZWxzZQotdm9pZCAoKnNpZ25hbCAoKSkgKCk7Ci0jZW5kaWYKIAogaW50CiBtYWluICgpCiB7Ci1pbnQgaTsKK3JldHVybiAqKHNpZ25hbCAoMCwgMCkpICgwKSA9PSAxOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV9zaWduYWw9aW50CiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfc2lnbmFsPWludAorICBhY19jdl90eXBlX3NpZ25hbD12b2lkCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NpZ25hbCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9zaWduYWwiID4mNjsgfQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFJFVFNJR1RZUEUgJGFjX2N2X3R5cGVfc2lnbmFsCiBfQUNFT0YKIAogCi0jIGdldG1udGVudCBpcyBpbiAtbHN1biBvbiBJcml4IDQsIC1sc2VxIG9uIER5bml4L1BUWCwgLWxnZW4gb24gVW5peHdhcmUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbHN1biIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxzdW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zdW5fZ2V0bW50ZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc3VuICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldG1udGVudCAoKTsKLWludAotbWFpbiAoKQotewotZ2V0bW50ZW50ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9zdW5fZ2V0bW50ZW50PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc3VuX2dldG1udGVudD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zdW5fZ2V0bW50ZW50IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3VuX2dldG1udGVudCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc3VuX2dldG1udGVudCA9IHllczsgdGhlbgotICBMSUJTPSItbHN1biAkTElCUyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxzZXEiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sc2VxLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc2VxX2dldG1udGVudCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHNlcSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRtbnRlbnQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWdldG1udGVudCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfc2VxX2dldG1udGVudD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc2VxX2dldG1udGVudCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQgPSB5ZXM7IHRoZW4KLSAgTElCUz0iLWxzZXEgJExJQlMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sZ2VuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbGdlbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxnZW4gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0bW50ZW50ICgpOwotaW50Ci1tYWluICgpCi17Ci1nZXRtbnRlbnQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9nZW5fZ2V0bW50ZW50PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9nZW5fZ2V0bW50ZW50IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9nZW5fZ2V0bW50ZW50ID0geWVzOyB0aGVuCi0gIExJQlM9Ii1sZ2VuICRMSUJTIgotZmkKLQotZmkKLQotZmkKLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRtbnRlbnQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorIyMKKyMgICBTdGFuZC1hbG9uZSBmdW5jdGlvbiBjaGVja3M6CisjIworIyAgQ29yZToKK2ZvciBhY19mdW5jIGluIGxyYW5kNDggICAgICAgICByYW5kICAgICAgICAgIHJhbmRvbSAgICAgICAgICAgICAgICAgICAgc2lnbmFsICAgICAgICAgIHNpZ3NldAorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjICBMaWJyYXJ5OgorZm9yIGFjX2Z1bmMgaW4gY2xvc2VkaXIgICAgICAgIGZnZXRjX3VubG9ja2VkICBmbG9ja2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICBmb3JrICAgICAgICAgICAgZnVubG9ja2ZpbGUgICAgIGdldGlwbm9kZWJ5bmFtZSAgICAgICAgICAgICAgICAgIGdldHRpbWVvZmRheSAgICBpZl9uYW1ldG9pbmRleCAgbWtzdGVtcCAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmRpciAgICAgICAgIHJlYWRkaXIgICAgICAgICByZWdjb21wICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRlbnYgICAgICAgICAgc2V0aXRpbWVyICAgICAgIHNldGxvY2FsZSAgICAgICAgICAgICAgICAgICAgICAgIHNldHNpZCAgICAgICAgICBzbnByaW50ZiAgICAgICAgc3RyY2FzZXN0ciAgICAgICAgICAgICAgICAgICAgICAgc3RyZHVwICAgICAgICAgIHN0cmVycm9yICAgICAgICBzdHJuY2FzZWNtcCAgICAgICAgICAgICAgICAgICAgICBzeXNjb25mICAgICAgICAgdGltZXMgICAgICAgICAgIHZzbnByaW50ZgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyBJUHY0L0lQdjYgZnVuY3Rpb24gY2hlY2tzLiBBQ19DSEVDS19GVU5DKCkgY2FuJ3QgZmluZCB0aGVzZSBvbiBNaW5HVworIyBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgX19jZGVjbCBjYWxsaW5nIGNvbnZlbnRpb24gb24gTWluR1cuCitjYXNlIHgkdGFyZ2V0X29zIGluCisgIHhtaW5ndyopCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdzMnRjcGlwLmg+CitpbnQKK21haW4gKCkKK3sKKyBnYWlfc3RyZXJyb3IoMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2Z1bmNfZ2FpX3N0cmVycm9yPXllcworICAgICAgJGFzX2VjaG8gICIjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9SIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgoraW50CittYWluICgpCit7CisgZ2V0YWRkcmluZm8oTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzCisgICAgICAkYXNfZWNobyAgIiNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KK2ludAorbWFpbiAoKQoreworIGdldGhvc3RieW5hbWUoTlVMTCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT15ZXMKKyAgICAgICRhc19lY2hvICAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdpbnNvY2syLmg+CitpbnQKK21haW4gKCkKK3sKKyBnZXRob3N0YnlhZGRyKE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9mdW5jX2dldGhvc3RhZGRyPXllcworICAgICAgJGFzX2VjaG8gICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KK2ludAorbWFpbiAoKQoreworIGdldGhvc3RuYW1lKE5VTEwsIDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9mdW5jX2dldGhvc3RuYW1lPXllcworICAgICAgJGFzX2VjaG8gICIjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIDs7CisKKyAgKikKKyAgICBmb3IgYWNfZnVuYyBpbiBnYWlfc3RyZXJyb3IgZ2V0YWRkcmluZm8gZ2V0aG9zdGJ5bmFtZSBnZXRob3N0YnluYW1lMiBnZXRob3N0bmFtZSBnZXRob3N0YnlhZGRyCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgIDs7Citlc2FjCisKKworCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRvcHQiICJhY19jdl9mdW5jX2dldG9wdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRvcHQiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUT1BUIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGdldG9wdC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0b3B0LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiaW5ldF9udG9wIiAiYWNfY3ZfZnVuY19pbmV0X250b3AiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfaW5ldF9udG9wIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0lORVRfTlRPUCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBpbmV0X250b3AuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIGluZXRfbnRvcC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImluZXRfcHRvbiIgImFjX2N2X2Z1bmNfaW5ldF9wdG9uIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2luZXRfcHRvbiIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX1BUT04gMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgaW5ldF9wdG9uLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBpbmV0X3B0b24uJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJsY2F0IiAiYWNfY3ZfZnVuY19zdHJsY2F0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmxjYXQiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSTENBVCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJsY2F0LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJsY2F0LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RybGNweSIgImFjX2N2X2Z1bmNfc3RybGNweSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJsY3B5IiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkxDUFkgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RybGNweS4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RybGNweS4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cnRva19yIiAiYWNfY3ZfZnVuY19zdHJ0b2tfciIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b2tfciIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJUT0tfUiAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJ0b2tfci4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RydG9rX3IuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b2wiICJhY19jdl9mdW5jX3N0cnRvbCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b2wiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVE9MIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cnRvbC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RydG9sLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG91bCIgImFjX2N2X2Z1bmNfc3RydG91bCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b3VsIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlRPVUwgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RydG91bC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RydG91bC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cnRvdWxsIiAiYWNfY3ZfZnVuY19zdHJ0b3VsbCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b3VsbCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJUT1VMTCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJ0b3VsbC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RydG91bGwuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCisKKworIyAgQWdlbnQ6Citmb3IgYWNfZnVuYyBpbiBjZ2V0bmV4dCAgICAgICAgY2hvd24gICAgICAgICAgZXhlY3YgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWlfc3RyZXJyb3IgICAgICAgICAgICAgICAgICAgZ2V0Z3JuYW0gICAgICAgICAgICAgICAgICAgICAgICBnZXRob3N0bmFtZSAgICAgZ2V0bG9hZGF2ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRwaWQgICAgICAgICAgZ2V0cHduYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNtbnRvcHQgICAgICAgaW5pdGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9uYW1laW5kZXggICAgaWZfaW5kZXh0b25hbWUgaWZfbmFtZXRvaW5kZXggICAgICAgICAgICAgICAgICBsb2NhbHRpbWVfciAgICAgbWtzdGVtcCAgICAgICAgbWt0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsICAgICAgICAgICAgcmVnY29tcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRnaWQgICAgICAgICAgc2V0Z3JvdXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRtbnRlbnQgICAgICAgc2V0dWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdhY3Rpb24gICAgICAgc2lnYmxvY2sgICAgICBzaWdob2xkICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZnMgICAgICAgICAgc3RhdHZmcyAgICAgICBzdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY2FzZWNtcCAgICAgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmFtZSAgICAgICAgICAgdXNsZWVwCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjICBBcHBzOgorZm9yIGFjX2Z1bmMgaW4gZ2V0ZHRhYmxlc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Z3JuYW0gICAgICAgIGdldHBpZCAgICAgICAgZ2V0cHduYW0gICAgICAgICAgICAgICAgICAgICAgICAgc2V0Z2lkICAgICAgICAgIHNldGdyb3VwcyAgICAgc2V0dWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNnZXRhdHRyCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjICBOb3QtVXNlZDoKK2ZvciBhY19mdW5jIGluIGlmX2ZyZWVuYW1laW5kZXggICAgICAgICAgICAgIGdldHBhZ2VzaXplICAgICAgICAgICAgICAgICAgICAgIGxzZWVrNjQgICAgICAgICBwcmVhZDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAgICAgICAgICBzaWdhbHJtICAgICAgIHNvY2tldAorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCiAKIGZpCkBAIC0zOTAzMywyNzcwICsyNTc5NSw0MSBAQAogCiAKIAorIyMKKyMgICBNb3JlIGNvbXBsZXggZnVuY3Rpb24gY2hlY2tzOgorIyAgICAgICAgICAgKEFnZW50KQorIyMKIAotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHNldG1udGVudCBoYXNtbnRvcHQgZ2V0aG9zdG5hbWUgdW5hbWUgZ2V0dGltZW9mZGF5IHNlbGVjdCBzb2NrZXQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorIyAgICAgICBycG1HZXRQYXRoIGNoZWNrIG5lZWRzIGNsZWFuIExJQlMgZW52aXJvbm1lbnQgICAoTGludXgpCisjCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICAgIE9MRExJQlM9JExJQlMKKyAgICBMSUJTPSRMTUlCTElCUworICAgIGZvciBhY19mdW5jIGluIHJwbUdldFBhdGgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicnBtR2V0UGF0aCIgImFjX2N2X2Z1bmNfcnBtR2V0UGF0aCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ycG1HZXRQYXRoIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9SUE1HRVRQQVRIIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCisgICAgTElCUz0kT0xETElCUworZmkKIAotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RybGNhdCBzdHJsY3B5IHN0cnRvbCBzdHJ0b3VsCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjICAgICAgIHN0YXRmcyggY2hhciAqLCBzdHJ1Y3QgZnNfZGF0YSogKSAgICAgICAgICAgICAgIChVbHRyaXgpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KS4uLiAiID4mNjsgfQoraWYgJHtmdV9jdl9zeXNfc3RhdF9mc19kYXRhKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBzdHJjaHIgc3RydG9rX3Igc3RyZHVwIG1lbWNweSBtZW1tb3ZlIGluZGV4IGJjb3B5IHN0cmNhc2VzdHIgcmVnY29tcAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHNpZ25hbCBzZXRzaWQgc2lnc2V0IHNpZ2Jsb2NrIHNpZ2hvbGQgc3RyZXJyb3Igc2V0ZW52IHZzbnByaW50ZiBzbnByaW50ZgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gc2lnYWN0aW9uCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gcmFuZG9tIGxyYW5kNDggcmFuZAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIGV4ZWN2IHN5c3RlbSBmb3JrIGdldHBpZCBzdHJuY2FzZWNtcCBzaWdhbHJtCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLWZvciBhY19mdW5jIGluIGxzZWVrNjQgcHJlYWQ2NAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgT0xETElCUz0kTElCUwotICBMSUJTPSRMTUlCTElCUwotCi1mb3IgYWNfZnVuYyBpbiBycG1HZXRQYXRoCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotICBMSUJTPSRPTERMSUJTCi1maQotCi0KLWZvciBhY19mdW5jIGluIGdldGxvYWRhdmcKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRhZGRyaW5mbyBnZXRpcG5vZGVieW5hbWUgZ2FpX3N0cmVycm9yCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBCU0RpMiBmdW5jdGlvbnMgZGlmZmVyCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RhdHZmcyBzdGF0ZnMKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIGdldGR0YWJsZXNpemUKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIGZyZWVic2QyIGNoZWNrcwotCi1mb3IgYWNfZnVuYyBpbiBnZXRmc3N0YXQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIHVzbGVlcAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gc2V0bG9jYWxlCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiB0Y2dldGF0dHIKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gaWZfbmFtZWluZGV4IGlmX2ZyZWVuYW1laW5kZXgKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIGtpbmZvX2dldF9jcHVzCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBzb2xhcmlzIGNoZWNrcwotCi1mb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gbWtzdGVtcAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRwd25hbSBnZXRncm5hbSBzZXRnaWQgc2V0dWlkIHNldGdyb3VwcwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgSGlnaCByZXNvbHV0aW9uIGFsYXJtIHN1cHBvcnQKLQotZm9yIGFjX2Z1bmMgaW4gc2V0aXRpbWVyCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgY2xvY2suCi0KLQotCi0KLWZvciBhY19mdW5jIGluIG1rdGltZSBzdGltZSB0aW1lcyBzeXNjb25mCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBtaXNzaW5nIGZyb20gaHAtdXgKLQotZm9yIGFjX2Z1bmMgaW4gaWZfbmFtZXRvaW5kZXgKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIG1pc3NpbmcgZnJvbSBNaW5HVwotCi0KLWZvciBhY19mdW5jIGluIGNob3duIGxvY2FsdGltZV9yCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWZkZWYgSEFWRV9TWVNfSU9DVExfSAotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2VuZGlmCi0jaWZkZWYgU0lPQ0dJRkFERFIKLXh4eHllc3h4eAotI2VuZGlmCi0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInh4eHllc3h4eCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj15ZXMKLWVsc2UKLSAgY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiIgPiY2Ci1pZiB0ZXN0ICRjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSIDEKLV9BQ0VPRgotCi1maQotCi0jIHVsdHJpeAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtmdV9jdl9zeXNfc3RhdF9mc19kYXRhK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ubwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSApAQCAtNDE4MTcsMTE0ICsyNTg1MCw5MyBAQAogZXhpdCAoc3RhdGZzICgiLiIsICZmc2QpICE9IDEpOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBmdV9jdl9zeXNfc3RhdF9mc19kYXRhPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ubworICBmdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSIgPiY2CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEiID4mNQorJGFzX2VjaG8gIiRmdV9jdl9zeXNfc3RhdF9mc19kYXRhIiA+JjY7IH0KIGlmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1RBVF9TVEFURlNfRlNfREFUQSAxCi1fQUNFT0YKKworJGFzX2VjaG8gIiNkZWZpbmUgU1RBVF9TVEFURlNfRlNfREFUQSAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotIyBjaGVjayBpZiBjb21waWxlciBwcmUtcHJvY2Vzc29yIGRlZmluZXMgX19GVU5DVElPTl9fCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgX19GVU5DVElPTl9fIGlzIGRlZmluZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBfX0ZVTkNUSU9OX18gaXMgZGVmaW5lZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisjIworIyAgIE90aGVyIGZ1bmN0aW9uLXJlbGF0ZWQgY2hlY2tzOgorIyAgICAgICAgICAgKGdlbmVyYWwgYnVpbGQpCisjIworCisjICAgICAgIEhvdyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfX2Z1bmNfX25hbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICBuZXRzbm1wX2N2X19mdW5jX19uYW1lPW5vCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKIG1haW4gKCkKIHsKLQotICAgIGNoYXIgKmNwID0gX19GVU5DVElPTl9fOwotCitjb25zdCBjaGFyKiBjcCA9IF9fZnVuY19fOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQ9bm8KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9fZnVuY19fbmFtZT1fX2Z1bmNfXwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgPSBubyA7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotaWYgdGVzdCAieCRhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEIiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEIDEKK2ludAorbWFpbiAoKQoreworY29uc3QgY2hhciogY3AgPSBfX0ZVTkNUSU9OX187CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9fZnVuY19fbmFtZT1fX0ZVTkNUSU9OX18KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiID4mNjsgfQoraWYgdGVzdCAiJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9GVU5DVElPTiAkbmV0c25tcF9jdl9fZnVuY19fbmFtZQogX0FDRU9GCiAKIGZpCiAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBvbiBTQ08gVW5peHdhcmUgNy4xLjQgKFNDTyBjb21waWxlciksICJzdGF0aWMgaW5saW5lIiBmdW5jdGlvbnMKLSMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoaXMgZGlzYWJsZXMgdGhlIHdob2xlIGlubGluZSB0aGluZyBpZiBpdAotIyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIFNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBvdGhlciBwbGF0Zm9ybXMuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworIyAgICAgICBXaGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gICAgICAoU0NPIFVuaXh3YXJlKQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKS4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IG5lc3RlZF9pbmxpbmVfZnVuY3Rpb24odm9pZCkgewogICByZXR1cm4gMDsKQEAgLTQxOTM0LDQyICsyNTk0NiwxOSBAQAogfQogCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPW5vCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLW5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMKKyAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZSIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfY19icm9rZW5faW5saW5lIiA+JjY7IH0KIAotIyBCdXQsIHNhZGx5LCB0aGUgdXNhZ2Ugb2YgaW5saW5lIGluIE5FVF9TTk1QIGRpc2FncmVlcyBzZXJpb3VzbHkgd2l0aCBhdCBsZWFzdAotIyBzb2xhcmlzMiwgc28gZGlzYWJsZSBpdCBmb3Igbm93LgorCisjICAgICAgIFllcyAtICBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuICAgICAgIChTb2xhcmlzIDIueCkKKyMKIGNhc2UgIiR0YXJnZXRfb3MiIGluCiAgICAgc29sYXJpcyopCiAgICAgICAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMKQEAgLTQxOTgwLDQ2MzggKzI1OTY5LDM2NiBAQAogCiBpZiB0ZXN0ICIkbmV0c25tcF9jdl9icm9rZW5faW5saW5lIiA9IHllcyA7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9CUk9LRU5fSU5MSU5FIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9CUk9LRU5fSU5MSU5FIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi0jIG9wZW5ic2Qgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkIG1fY2x1c3RlcnMgYW5kIG1fY2xmcmVlIGZyb20gbWJzdGF0CiAKKyMjCisjICAgTWlzLXBsYWNlZCAobm9uLWZ1bmN0aW9uKSBjaGVja3M6CisjIwogCi1hY19zYWZlX3N0cnVjdD1gZWNobyAibWJzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJtX2NsdXN0ZXJzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWJzdGF0Lm1fY2x1c3RlcnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWJzdGF0Lm1fY2x1c3RlcnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0KLSNpZiBIQVZFX1NZU19NQlVGX0gKLSNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgbWJzdGF0IHRlc3RpdDsKLXRlc3RpdC5tX2NsdXN0ZXJzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLSMgb3BlbmJzZCBzZWVtcyB0byBoYXZlIGRyb3BwZWQgbV9tYnVmcyBmcm9tIG1ic3RhdCB0b28KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAibWJzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJtX21idWZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWJzdGF0Lm1fbWJ1ZnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWJzdGF0Lm1fbWJ1ZnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX1NZU19NQlVGX0gKLSNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBtYnN0YXQgdGVzdGl0OwotdGVzdGl0Lm1fbWJ1ZnMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNpZ2FjdGlvbiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic2Ffc2lnYWN0aW9uIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2lnYWN0aW9uLnNhX3NpZ2FjdGlvbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaWdhY3Rpb24uc2Ffc2lnYWN0aW9uLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHRlc3RpdDsKLXRlc3RpdC5zYV9zaWdhY3Rpb24gJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ0bSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidG1fZ210b2ZmIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdG0udG1fZ210b2ZmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRtLnRtX2dtdG9mZi4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgdG0gdGVzdGl0OwotdGVzdGl0LnRtX2dtdG9mZiAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9tdHUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9tdHUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfbXR1Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbXR1ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X2lmbmV0X2hhc19pZl9tdHUiID0gInhubyI7IHRoZW4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9JRk5FVF9ORUVEU19LRVJORUwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfaWZuZXRfaGFzX2lmX210dSIgPSAieHllcyI7IHRoZW4KLSAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vCi1lbHNlCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2RlZmluZSBfS0VSTkVMIDEKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2lmbmRlZiBTSU9DR0lGQUREUgorTm8gU0lPQ0dJRkFERFIgZm91bmQgaGVyZS4KICNlbmRpZgogCiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9tdHUgPSAwOwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXllcworaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vCisgIG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSIiA+JjY7IH0KK2lmIHRlc3QgJG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUiAxIiA+PmNvbmZkZWZzLmgKKwogZmkKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPiY2CisjIworIyAgIENoZWNrIGhvdyB0byBwcmludCBhIHNpemVfdCB2YXJpYWJsZQorIyMKIAotaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIElGTkVUX05FRURTX0tFUk5FTCAxCi1fQUNFT0YKLQotZmkKLWZpCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic29ja2FkZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInNhX2xlbiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2thZGRyLnNhX2xlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrYWRkci5zYV9sZW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhIHNpemVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgdW5kZXJseWluZyB0eXBlIG9mIGEgc2l6ZV90Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3Zfc2l6ZV90X3R5cGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGlmIFsgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNvY2thZGRyIHRlc3RpdDsKLXRlc3RpdC5zYV9sZW4gJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzb2NrYWRkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2FkZHIuc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyLnNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5Mi4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc29ja2FkZHIgdGVzdGl0OwotdGVzdGl0LnNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MiAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNvY2thZGRyX3N0b3JhZ2UiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInNzX2ZhbWlseSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgdGVzdGl0OwotdGVzdGl0LnNzX2ZhbWlseSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNvY2thZGRyX3N0b3JhZ2UiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIl9fc3NfZmFtaWx5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2FkZHJfc3RvcmFnZS5fX3NzX2ZhbWlseSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlLl9fc3NfZmFtaWx5Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgdGVzdGl0OwotdGVzdGl0Ll9fc3NfZmFtaWx5ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAicnRlbnRyeSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAicnRfZHN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9kc3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9kc3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBydGVudHJ5IHRlc3RpdDsKLXRlc3RpdC5ydF9kc3QgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotIyBjaGVja2luZyBmb3IgNC4zIHZzIDQuNCBydGVudHJ5LgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHR5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9SVEVOVFJZX1RZUEUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotCi0jIDQuNCBjb21wYXQKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKLSNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKLSNlbmRpZgotCi0gIHN0cnVjdCBydGVudHJ5IHJ0OwotICBydC5ydF9ub2Rlc1swXS5ybl9mbGFncyA9IDE7Ci0gIHJ0LnJ0X2RzdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuNCIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotIyA0LjMgY29tcGF0Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHJ0ZW50cnkgcnQ7Ci1ydC5ydF9oYXNoOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC4zIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotIyBlbHNlIGFjay4KLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBVbmtub3duIiA+JjUKLWVjaG8gIiR7RUNIT19UfVVua25vd24iID4mNgotICBhY19jdl9SVEVOVFJZX1RZUEU9InVua25vd24iCi1maQotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfUlRFTlRSWV9UWVBFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9SVEVOVFJZX1RZUEUiID4mNgotCi1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjQiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFJURU5UUllfNF80IDEKLV9BQ0VPRgotCi1maQotCi0jIGNoZWNraW5nIGZvciBhbHBoYSdzIG9ydGVudHJ5IHZzIHJ0ZW50cnkKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4dW5rbm93biI7IHRoZW4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF9ydGVudHJ5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2RlZmluZSBLRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAib3J0ZW50cnkiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1vcnRlbnRyeQotZWxzZQotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5Ci1maQotcm0gLWYgY29uZnRlc3QqCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gInhydGVudHJ5IiA7IHRoZW4KLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCi1lbHNlCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJvcnRlbnRyeSIKLWZpCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA+JjYKLWVsc2UKLSAgUlRFTlRSWV9UWVBFPSJydGVudHJ5IgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKLWZpCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiICE9ICJ4IjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFJURU5UUlkgc3RydWN0ICR7YWNfY3Zfc3RydWN0X3J0ZW50cnl9Ci1fQUNFT0YKLQotZWxzZQotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBSVEVOVFJZIHN0cnVjdCBydGVudHJ5Ci1fQUNFT0YKLQotZmkKLQotIyBjaGVjayBmb3IgNC4zJ3MgcnRlbnRyeS0+cnRfbmV4dAotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC4zIjsgdGhlbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeSBoYXMgYSBydF9uZXh0IG5vZGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkgaGFzIGEgcnRfbmV4dCBub2RlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHJ0ZW50cnkgcnQ7Ci1ydC5ydF9uZXh0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiA+JjYKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBSVEVOVFJZX1JUX05FWFQgMQotX0FDRU9GCi0KLWZpCi0KLWZpCi0KLSMgQ2hlY2sgc2luNl9zY29wZV9pZCBtZW1iZXIgc3BlY2lmaWVkIGluIFJGQzI1NTMgYWRkaXRpb25hbGx5Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0KK2V4dGVybiB1bnNpZ25lZCBpbnQgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7Ci1zdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBhY19hZ2dyOwotaWYgKGFjX2FnZ3Iuc2luNl9zY29wZV9pZCkKLXJldHVybiAwOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGU9ImludCIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7Ci1zdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBhY19hZ2dyOwotaWYgKHNpemVvZiBhY19hZ2dyLnNpbjZfc2NvcGVfaWQpCi1yZXR1cm4gMDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGU9ImxvbmciCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7CitpbnQKK21haW4gKCkKK3sKIAotYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZD1ubworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGU9ImxvbmcgbG9uZyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgc2hvcnQgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJzaG9ydCIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgY2hhciB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGU9ImNoYXIiCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCA9IHllczsgdGhlbgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X3NpemVfdF90eXBlIiA+JjY7IH0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnRmIGEgc2l6ZV90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludGYgYSBzaXplX3QuLi4gIiA+JjY7IH0KK2Nhc2UgIiRuZXRzbm1wX2N2X3NpemVfdF90eXBlIiBpbgorICAgIGNoYXJ8c2hvcnR8aW50KSBuZXRzbm1wX1BSSXo9IiIgOzsKKyAgICBsb25nKSBuZXRzbm1wX1BSSXo9ImwiIDs7CisgICAgImxvbmcgbG9uZyIpIG5ldHNubXBfUFJJej0ibGwiIDs7CisgICAgKikgYXNfZm5fZXJyb3IgJD8gInVuZGVybHlpbmcgdHlwZSBvZiBzaXplX3Qgbm90IGtub3duIiAiJExJTkVOTyIgNSA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX1BSSXoiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX1BSSXoiID4mNjsgfQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKKyNkZWZpbmUgTkVUU05NUF9QUkl6ICIkbmV0c25tcF9QUkl6IgogX0FDRU9GCiAKIAotZmkKKyMjCisjICAgQ2hlY2sgaG93IHRvIHByaW50IGEgdWludDMyX3QgdmFyaWFibGUKKyMjCiAKLQotIyBDaGVjayBzdHJ1Y3QgcnRlbnRyeSBmb3IgdmFyaW91cyB0aGluZ3MuCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInJ0ZW50cnkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInJ0X3VuaXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3VuaXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnRlbnRyeS5ydF91bml0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYW4gdWludDMyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhbiB1aW50MzJfdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGlmIFsgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IHJ0ZW50cnkgdGVzdGl0OwotdGVzdGl0LnJ0X3VuaXQgJGRlZmluZWl0OwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJjaGFyIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInJ0ZW50cnkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInJ0X3JlZmNudCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfcmVmY250IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfcmVmY250Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBydGVudHJ5IHRlc3RpdDsKLXRlc3RpdC5ydF9yZWZjbnQgJGRlZmluZWl0OwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJzaG9ydCIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJydGVudHJ5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJydF9oYXNoIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9oYXNoIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfaGFzaC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLQorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IHJ0ZW50cnkgdGVzdGl0OwotdGVzdGl0LnJ0X2hhc2ggJGRlZmluZWl0OwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJpbnQiCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAicnRlbnRyeSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAicnRfdXNlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnRlbnRyeS5ydF91c2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnRlbnRyeS5ydF91c2UuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi0KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgcnRlbnRyeSB0ZXN0aXQ7Ci10ZXN0aXQucnRfdXNlICRkZWZpbmVpdDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0ibG9uZyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotIyBDaGVjayB0Y3BzdGF0IGZvciB0Y3BzdGF0LnRjcF9yY3ZtZW1kcm9wCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInRjcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInRjcF9yY3ZtZW1kcm9wIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdGNwc3RhdC50Y3BfcmN2bWVtZHJvcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0Y3BzdGF0LnRjcF9yY3ZtZW1kcm9wLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVPVVRfSAotI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgotI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KLSNlbmRpZgotCi0KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCB0Y3BzdGF0IHRlc3RpdDsKLXRlc3RpdC50Y3BfcmN2bWVtZHJvcCAkZGVmaW5laXQ7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9ImxvbmcgbG9uZyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKIAogZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl91aW50MzJfdF90eXBlIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl91aW50MzJfdF90eXBlIiA+JjY7IH0KIAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnRmIGEgdWludDMyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50ZiBhIHVpbnQzMl90Li4uICIgPiY2OyB9CitjYXNlICIkbmV0c25tcF9jdl91aW50MzJfdF90eXBlIiBpbgorICAgIGNoYXJ8c2hvcnR8aW50KSBuZXRzbm1wX1BSSTMyPSIiIDs7CisgICAgbG9uZykgbmV0c25tcF9QUkkzMj0ibCIgOzsKKyAgICAibG9uZyBsb25nIikgbmV0c25tcF9QUkkzMj0ibGwiIDs7CisgICAgKikgYXNfZm5fZXJyb3IgJD8gInVuZGVybHlpbmcgdHlwZSBvZiB1aW50MzJfdCBub3Qga25vd24iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfUFJJMzIiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX1BSSTMyIiA+JjY7IH0KIAotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfUFJJMzIgIiRuZXRzbm1wX1BSSTMyIgogX0FDRU9GCiAKKworIyBjaGVjayB0byBzZWUgaWYgdGhlIG9wZW5zc2wgaXMgZ29vZCBlbm91Z2ggZm9yIERUTFMKKyMgKEJJT19kZ3JhbV9nZXRfcGVlciBpcyBhIG1hY3JvLCBub3QgYSB0cnVlIGZ1bmN0aW9uKQoraWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJEVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGlmICR7bmV0c25tcF9jdl9iaW9fZGdyYW1fZ2V0X3BlZXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCSU9fZGdyYW1fZ2V0X3BlZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJJT19kZ3JhbV9nZXRfcGVlci4uLiAiID4mNjsgfQogCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmYWRkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZhX25leHQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZmFkZHIuaWZhX25leHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZhZGRyLmlmYV9uZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgb2xkTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sY3J5cHRvIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotCi0KKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgogaW50CiBtYWluICgpCiB7Ci0KLXN0cnVjdCBpZmFkZHIgdGVzdGl0OwotdGVzdGl0LmlmYV9uZXh0ICRkZWZpbmVpdDsKLQorQklPX2RncmFtX2dldF9wZWVyKE5VTEwsIE5VTEwpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBhc19mbl9lcnJvciAkPyAiRFRMUyBzdXBwb3J0IHJlcXVpcmVzIGEgbmV3ZXIgdmVyc2lvbiBvZiBPcGVuU1NMIiAiJExJTkVOTyIgNQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgICAgTElCUz0iJG9sZExJQlMiCisKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCiBmaQogCiAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgZGF0YSBzdHJ1Y3R1cmVzICYgbWVtYmVycworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSMgQ2hlY2sgaWZuZXQgZW50cmllcyB1c2luZyBtYWNybyBkZWZpbmVkIGluIGFjbG9jYWwubTQuCisjIworIyAgIFNpbXBsZSBjaGVja3M6CisjIworCisjICAgICAgIHN0cnVjdCBhcnBoZAorIyAgIEFnZW50OgogIwotIyBYWFggIEJyb2tlbiBvbiBGcmVlQlNEIHdoZXJlIHRoZXNlIGFyZSAjZGVmaW5lJ2QgaW4gPG5ldC9pZi5oPgotIwotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9iYXVkcmF0ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2JhdWRyYXRlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2JhdWRyYXRlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2JhdWRyYXRlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2JhdWRyYXRlLmlmc192YWx1ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9iYXVkcmF0ZS5pZnNfdmFsdWUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9zcGVlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3NwZWVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3NwZWVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX3NwZWVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfdHlwZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3R5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl90eXBlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfaW1jYXN0cyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2ltY2FzdHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfaW1jYXN0cy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9pbWNhc3RzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfaXFkcm9wcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2lxZHJvcHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfaXFkcm9wcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9pcWRyb3BzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfbm9wcm90byIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX25vcHJvdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfbm9wcm90by4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9ub3Byb3RvICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfb21jYXN0cyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX29tY2FzdHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfb21jYXN0cy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9vbWNhc3RzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfeG5hbWUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl94bmFtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl94bmFtZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl94bmFtZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2xhc3RjaGFuZ2UudHZfc2VjIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9zZWMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9zZWMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbGFzdGNoYW5nZS50dl9zZWMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9sYXN0Y2hhbmdlLnR2X25zZWMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X25zZWMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9uc2VjLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2xhc3RjaGFuZ2UudHZfbnNlYyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX29ieXRlcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX29ieXRlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9vYnl0ZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfb2J5dGVzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfaWJ5dGVzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfaWJ5dGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2lieXRlcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9pYnl0ZXMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9hZGRybGlzdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2FkZHJsaXN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2FkZHJsaXN0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2FkZHJsaXN0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfYWRkcmhlYWQudHFoX2ZpcnN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfYWRkcmhlYWQudHFoX2ZpcnN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2FkZHJoZWFkLnRxaF9maXJzdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9hZGRyaGVhZC50cWhfZmlyc3QgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInVkcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInVkcHNfZGlzY2FyZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19kaXNjYXJkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19kaXNjYXJkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgdWRwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQudWRwc19kaXNjYXJkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidWRwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidWRwc19ub3BvcnQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfbm9wb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19ub3BvcnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCB1ZHBzdGF0IHRlc3RpdDsKLXRlc3RpdC51ZHBzX25vcG9ydCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInVkcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInVkcHNfbm9wb3J0YmNhc3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfbm9wb3J0YmNhc3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX25vcG9ydGJjYXN0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgdWRwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQudWRwc19ub3BvcnRiY2FzdCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInVkcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInVkcHNfZnVsbHNvY2siIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfZnVsbHNvY2siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX2Z1bGxzb2NrLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgdWRwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQudWRwc19mdWxsc29jayAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImFycGhkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJhdF9uZXh0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYXJwaGQuYXRfbmV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhcnBoZC5hdF9uZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgYXJwaGQiICJhdF9uZXh0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9hcnBoZF9hdF9uZXh0IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAogI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCiAjaWZkZWYgSEFWRV9TWVNfVElNRV9ICiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgpAQCAtNDY2MjMsMTE2NyArMjYzNDAsNzMgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2FycGhkX2F0X25leHQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgYXJwaGQgdGVzdGl0OwotdGVzdGl0LmF0X25leHQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQogCiAKLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzd2RldnQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInN3X25ibGtzZW5hYmxlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3dkZXZ0LnN3X25ibGtzZW5hYmxlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX0NPTkZfSAotI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjICAgICAgIHN0cnVjdCBkZXNfa3Nfc3RydWN0CisjICAgICAgICAgKCd3ZWFrX2tleScgaW5kaWNhdGVzIG9sZGVyIHZlcnNpb24gb2YgT3BlblNTTCkKKyMgICBMaWJyYXJ5OgorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9kZXNfaCIgPSAieHllcyIgOyB0aGVuCisgICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgZGVzX2tzX3N0cnVjdCIgIndlYWtfa2V5IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9kZXNfa3Nfc3RydWN0X3dlYWtfa2V5IiAiCisjaWZkZWYgSEFWRV9PUEVOU1NMX0RFU19ICisjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfZGVzX2tzX3N0cnVjdF93ZWFrX2tleSIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzd2RldnQgdGVzdGl0OwotdGVzdGl0LnN3X25ibGtzZW5hYmxlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfREVTX0tTX1NUUlVDVF9XRUFLX0tFWSAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXR2ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIm1udF9kaXIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0dmZzLm1udF9kaXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdHZmcy5tbnRfZGlyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKIGZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAorIyAgICAgICBzdHJ1Y3QgZGlyZW50CisjICAgICAgICAgKHNlZSBhbHNvIEFDX1NUUlVDVF9ESVJFTlRfRF9UWVBFKQorIyAgIExpYnJhcnk6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBkaXJlbnQiICJkX3R5cGUiICJhY19jdl9tZW1iZXJfc3RydWN0X2RpcmVudF9kX3R5cGUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2RpcmVudF9kX3R5cGUiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdHZmcyB0ZXN0aXQ7Ci10ZXN0aXQubW50X2RpciAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQRSAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0dmZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2Zyc2l6ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXR2ZnMuZl9mcnNpemUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdHZmcy5mX2Zyc2l6ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXR2ZnMgdGVzdGl0OwotdGVzdGl0LmZfZnJzaXplICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBmaQogCiAKLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdGZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2Zyc2l6ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2Zyc2l6ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnMuZl9mcnNpemUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0ZnMgdGVzdGl0OwotdGVzdGl0LmZfZnJzaXplICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdHZmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9maWxlcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXR2ZnMuZl9maWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0dmZzLmZfZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0dmZzIHRlc3RpdDsKLXRlc3RpdC5mX2ZpbGVzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdGZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2ZpbGVzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzLmZfZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzLmZfZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXRmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9maWxlcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXRmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9mZnJlZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZmcmVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZmcmVlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0ZnMgdGVzdGl0OwotdGVzdGl0LmZfZmZyZWUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZmF2YWlsIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzLmZfZmF2YWlsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZhdmFpbC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdGZzIHRlc3RpdDsKLXRlc3RpdC5mX2ZhdmFpbCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gIm5saXN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJuX3ZhbHVlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3Qubl92YWx1ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdC5uX3ZhbHVlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9OTElTVF9ICi0jaW5jbHVkZSA8bmxpc3QuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgbmxpc3QgdGVzdGl0OwotdGVzdGl0Lm5fdmFsdWUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotIyBzdHJ1Y3Qgbmxpc3Q2NCAoSVJJWCkKLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAibmxpc3Q2NCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAibl92YWx1ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0NjQubl92YWx1ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdDY0Lm5fdmFsdWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05MSVNUX0gKLSNpbmNsdWRlIDxubGlzdC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBubGlzdDY0IHRlc3RpdDsKLXRlc3RpdC5uX3ZhbHVlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLSMgc3RydWN0IGV0aHRvb2xfY21kCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBldGh0b29sX2NtZC5zcGVlZF9oaSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgZXRodG9vbF9jbWQuc3BlZWRfaGkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KKyMgICAgICAgc3RydWN0IGV0aHRvb2xfY21kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saW51eF9ldGh0b29sX2giID0gInh5ZXMiIDsgdGhlbgorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgZXRodG9vbF9jbWQiICJzcGVlZF9oaSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkiICIKICAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCiAjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjZW5kaWYKIAotCi1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9jbWQgYWNfYWdncjsKLWlmIChhY19hZ2dyLnNwZWVkX2hpKQotcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9jbWQgYWNfYWdncjsKLWlmIChzaXplb2YgYWNfYWdnci5zcGVlZF9oaSkKLXJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGk9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGk9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpIiA+JjYKLWlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkgPSB5ZXM7IHRoZW4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaSIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9FVEhUT09MX0NNRF9TUEVFRF9ISSAxCkBAIC00Nzc5MiwzNyArMjY0MTUsMTQgQEAKIAogZmkKIAotCi0jIGNoZWNrIHN0cnVjdCBpcHN0YXQgZm9yIHZhcmlvdXMgdGhpbmdzCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2NhbnRmb3J3YXJkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19jYW50Zm9yd2FyZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2NhbnRmb3J3YXJkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKIGZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAorIyAgICAgICBzdHJ1Y3QgaXBzdGF0CisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfY2FudGZyYWciICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfY2FudGZyYWciICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ3ODMwLDk1ICsyNjQzMCwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfY2FudGZyYWciID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfY2FudGZvcndhcmQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZSQUcgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2RlbGl2ZXJlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19kZWxpdmVyZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19jYW50ZnJhZyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfY2FudGZyYWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19jYW50ZnJhZy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00NzkyNiw5NSArMjY0NDksMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2RlbGl2ZXJlZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19jYW50ZnJhZyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19ERUxJVkVSRUQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2ZyYWdkcm9wcGVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWdkcm9wcGVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfZGVsaXZlcmVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19kZWxpdmVyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19kZWxpdmVyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDgwMjIsOTUgKzI2NDY4LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFnZHJvcHBlZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19kZWxpdmVyZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR0RST1BQRUQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2ZyYWdtZW50ZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ21lbnRlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2ZyYWdkcm9wcGVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFnZHJvcHBlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWdkcm9wcGVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4MTE4LDk1ICsyNjQ4NywxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ21lbnRlZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19mcmFnZHJvcHBlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHTUVOVEVEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19sb2NhbG91dCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19sb2NhbG91dCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2ZyYWd0aW1lb3V0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFndGltZW91dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4MjE0LDk1ICsyNjUwNiwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbG9jYWxvdXQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfZnJhZ3RpbWVvdXQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTE9DQUxPVVQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX25vcHJvdG8iICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbm9wcm90byIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2ZyYWdtZW50ZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWdtZW50ZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFnbWVudGVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4MzEwLDk1ICsyNjUyNSwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbm9wcm90byIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19mcmFnbWVudGVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUFJPVE8gMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX25vcm91dGUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbm9yb3V0ZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2xvY2Fsb3V0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19sb2NhbG91dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2xvY2Fsb3V0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4NDA2LDk1ICsyNjU0NCwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbm9yb3V0ZSIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19sb2NhbG91dCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1JPVVRFIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19vZHJvcHBlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19vZHJvcHBlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX25vcHJvdG8iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX25vcHJvdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19ub3Byb3RvLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4NTAyLDk1ICsyNjU2MywxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfb2Ryb3BwZWQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfbm9wcm90byAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRFJPUFBFRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfb2ZyYWdtZW50cyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19vZnJhZ21lbnRzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfbm9yb3V0ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbm9yb3V0ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX25vcm91dGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg1OTgsOTUgKzI2NTgyLDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19vZnJhZ21lbnRzIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX25vcm91dGUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0ZSQUdNRU5UUyAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfcmVhc3NlbWJsZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfcmVhc3NlbWJsZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19vZHJvcHBlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfb2Ryb3BwZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19vZHJvcHBlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODY5NCw5NSArMjY2MDEsNDUgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX3JlYXNzZW1ibGVkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX29kcm9wcGVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX1JFQVNTRU1CTEVEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKIAorIyAgICAgICBzdHJ1Y3QgaXA2c3RhdAorIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXA2c3RhdCIgImlwNnNfZXh0aGRydG9vbG9uZyAiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwNnN0YXRfaXA2c19leHRoZHJ0b29sb25nXyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVDZfSVA2X1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldDYvaXA2X3Zhci5oPgorI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcDZzdGF0X2lwNnNfZXh0aGRydG9vbG9uZ18iID0geHllczsgdGhlbiA6CiAKLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX29mcmFnbWVudHMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX29mcmFnbWVudHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19vZnJhZ21lbnRzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUDZTVEFUX0lQNlNfRVhUSERSVE9PTE9OR18gMQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitmaQorCisKKyMKKyMgICBOb3QtVXNlZDoKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19jYW50Zm9yd2FyZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19jYW50Zm9yd2FyZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg3OTAsOTUgKzI2NjQ3LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19jYW50Zm9yd2FyZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19vZnJhZ21lbnRzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGT1JXQVJEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19mcmFndGltZW91dCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFndGltZW91dCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX3JlYXNzZW1ibGVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19yZWFzc2VtYmxlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX3JlYXNzZW1ibGVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4ODg2LDE3OSArMjY2NjYsMjY0NiBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ3RpbWVvdXQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfcmVhc3NlbWJsZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR1RJTUVPVVQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQogCiAKKyMgICAgICAgc3RydWN0IG1ic3RhdAorIyAgIE5vdC1Vc2VkOgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgbWJzdGF0IiAibV9jbHVzdGVycyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fY2x1c3RlcnMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0jIGNoZWNrIGZvciB0aGUgZGVzX2tzX3N0cnVjdC53ZWFrX2tleSBhdHRyaWJ1dGUsIHdoaWNoIGluZGljYXRlcyB0aGUKLSMgb2xkZXIgb3BlbnNzbCB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQuCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Rlc19oIiA9ICJ4eWVzIiA7IHRoZW4KKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NQlVGX0gKKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9jbHVzdGVycyIgPSB4eWVzOyB0aGVuIDoKIAotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImRlc19rc19zdHJ1Y3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIndlYWtfa2V5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGVzX2tzX3N0cnVjdC53ZWFrX2tleSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZXNfa3Nfc3RydWN0LndlYWtfa2V5Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9NQlNUQVRfTV9DTFVTVEVSUyAxCiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBtYnN0YXQiICJtX2NsZnJlZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fY2xmcmVlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01CVUZfSAorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX2NsZnJlZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9NQlNUQVRfTV9DTEZSRUUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IG1ic3RhdCIgIm1fbWJ1ZnMiICJhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX21idWZzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01CVUZfSAorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX21idWZzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX01CU1RBVF9NX01CVUZTIDEKK19BQ0VPRgorCisKK2ZpCisKKworIwlzdHJ1Y3QgdXZtZXhwCisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1dm1leHAiICJwZ3N3YXBpbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdXZtZXhwX3Bnc3dhcGluIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2luY2x1ZGUgPHV2bS91dm1fZXh0ZXJuLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dm1leHBfcGdzd2FwaW4iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVZNRVhQX1BHU1dBUElOIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgbmxpc3QKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IG5saXN0IiAibl92YWx1ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfbmxpc3Rfbl92YWx1ZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05MSVNUX0gKKyNpbmNsdWRlIDxubGlzdC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ubGlzdF9uX3ZhbHVlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IG5saXN0NjQiICJuX3ZhbHVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ubGlzdDY0X25fdmFsdWUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9OTElTVF9ICisjaW5jbHVkZSA8bmxpc3QuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfbmxpc3Q2NF9uX3ZhbHVlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX05MSVNUNjRfTl9WQUxVRSAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHNpZ2FjdGlvbgorIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc2lnYWN0aW9uIiAic2Ffc2lnYWN0aW9uIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zaWdhY3Rpb25fc2Ffc2lnYWN0aW9uIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NJR05BTF9ICisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zaWdhY3Rpb25fc2Ffc2lnYWN0aW9uIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcgorIyAgIExpYnJhcnk6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkciIgInNhX2xlbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4gMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyIiAic2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV91bmlvbl9zYV9nZW5lcmljX3NhX2ZhbWlseTIiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfV0lOU09DSzJfSCkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfdW5pb25fc2FfZ2VuZXJpY19zYV9mYW1pbHkyIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgInNzX2ZhbWlseSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9zc19mYW1pbHkiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfV0lOU09DSzJfSCkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9zc19mYW1pbHkiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyX3N0b3JhZ2UiICJfX3NzX2ZhbWlseSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9fX3NzX2ZhbWlseSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlX19fc3NfZmFtaWx5IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfX19TU19GQU1JTFkgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgICAgIChzZWUgUkZDIDI1NTMpCisjICAgTGlicmFyeToKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyX2luNiIgInNpbjZfc2NvcGVfaWQiICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcl91bgorIyAgIExpYnJhcnk6CisjCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNvY2thZGRyX3VuLnN1bl9wYXRoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc29ja2FkZHJfdW4uc3VuX3BhdGguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc29ja2FkZHJfdW4uc3VuX3BhdGgpKSIgImFjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aCIgICAgICAgICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCitzdHJ1Y3Qgc29ja2FkZHJfdW4gc29ja2FkZHJfdW47CisKKyI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3NvY2thZGRyX3VuX3N1bl9wYXRoIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNvY2thZGRyX3VuLnN1bl9wYXRoKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoPTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGgiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGgiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfU09DS0FERFJfVU5fU1VOX1BBVEggJGFjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aAorX0FDRU9GCisKKworCisjICAgICAgIHN0cnVjdCBzdGF0ZnMKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZmF2YWlsIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mYXZhaWwiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZhdmFpbCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GQVZBSUwgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZmZyZWUiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZmcmVlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mZnJlZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GRlJFRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZzIiAiZl9maWxlcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmlsZXMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZpbGVzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZJTEVTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0ZnMiICJmX2ZsYWdzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mbGFncyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmxhZ3MiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkxBR1MgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZnJzaXplIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mcnNpemUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2Zyc2l6ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GUlNJWkUgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzdGF0dmZzCisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0dmZzIiAiZl9maWxlcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX2ZpbGVzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX2ZpbGVzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdHZmcyIgImZfZnJzaXplIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZnJzaXplIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX2Zyc2l6ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0dmZzIiAibW50X2RpciIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19tbnRfZGlyIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19tbnRfZGlyIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRWRlNfTU5UX0RJUiAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHN3ZGV2dAorIyAgIE5vdC1Vc2VkOgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3dkZXZ0IiAic3dfbmJsa3NlbmFibGVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zd2RldnRfc3dfbmJsa3NlbmFibGVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX0NPTkZfSAorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N3ZGV2dF9zd19uYmxrc2VuYWJsZWQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1dERVZUX1NXX05CTEtTRU5BQkxFRCAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHRjcHN0YXQKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHRjcHN0YXQiICJ0Y3BfcmN2bWVtZHJvcCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdGNwc3RhdF90Y3BfcmN2bWVtZHJvcCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RjcHN0YXRfdGNwX3Jjdm1lbWRyb3AiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVENQU1RBVF9UQ1BfUkNWTUVNRFJPUCAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHRtCisjICAgTGlicmFyeToKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHRtIiAidG1fZ210b2ZmIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV9nbXRvZmYiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV9nbXRvZmYiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBleHRlcm4gdGltZXpvbmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZXh0ZXJuIHRpbWV6b25lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGV4dGVybiB0aW1lem9uZS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0KLSNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCiAKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgZGVzX2tzX3N0cnVjdCB0ZXN0aXQ7Ci10ZXN0aXQud2Vha19rZXkgJGRlZmluZWl0OworICByZXR1cm4gdGltZXpvbmU7CiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVElNRVpPTkVfVkFSSUFCTEUgMSIgPj5jb25mZGVmcy5oCisKKwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKKyMgICAgICAgc3RydWN0IHRpbWV6b25lCisjICAgTGlicmFyeToKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHRpbWV6b25lIiAidHpfZHN0dGltZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdGltZXpvbmVfdHpfZHN0dGltZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorI2lmZGVmIEhBVkVfU1lTX1RJTUVCX0gKKyMgaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZW5kaWYKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RpbWV6b25lX3R6X2RzdHRpbWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVpPTkVfVFpfRFNUVElNRSAxCiBfQUNFT0YKIAorCitmaQorCisKKyMgICAgICAgc3RydWN0IHVkcHN0YXQKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX2Rpc2NhcmQiICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19kaXNjYXJkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19kaXNjYXJkIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19ESVNDQVJEIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19mdWxsc29jayIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2Z1bGxzb2NrIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19mdWxsc29jayIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRlVMTFNPQ0sgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX25vcG9ydCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX25vcG9ydCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfbm9wb3J0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX25vcG9ydGJjYXN0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfbm9wb3J0YmNhc3QiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX25vcG9ydGJjYXN0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlRCQ0FTVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfaXBhY2tldHMiICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19pcGFja2V0cyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfaXBhY2tldHMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0lQQUNLRVRTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19vcGFja2V0cyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX29wYWNrZXRzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19vcGFja2V0cyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfT1BBQ0tFVFMgMQorX0FDRU9GCisKKworZmkKKworCisKKworIyMKKyMgICBpZm5ldC1yZWxhdGVkIGNoZWNrczoKKyMjCisKKyMgICAgICAgRG9lcyAic3RydWN0IGlmbmV0IiBuZWVkIF9LRVJORUwgZGVmaW5lZD8gICAgICAgKElyaXgpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXVua25vd24KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ubwogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9LRVJORUwgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgICAgICAgRG9lcyAic3RydWN0IGlmbmV0IiBuZWVkIF9LRVJORUxfU1RSVUNUVVJFUyBkZWZpbmVkPyAgICAgICAoRHJhZ29uRmx5IDMpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIF9LRVJORUxfU1RSVUNUVVJFUyBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX0tFUk5FTF9TVFJVQ1RVUkVTIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPXVua25vd24KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgICAgICAgc3RydWN0IGlmYWRkcgorIyAgIE5vdC1Vc2VkOgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZhZGRyIiAiaWZhX25leHQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmYWRkcl9pZmFfbmV4dCIgIgorCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZmFkZHJfaWZhX25leHQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZBRERSX0lGQV9ORVhUIDEKK19BQ0VPRgogCiAKIGZpCiAKLSMgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IGlmIHN5c2N0bCBpcyB1c2FibGUKIAorIyAgICAgICBzdHJ1Y3QgaWZuZXQKKyMgICAgICAgICAoQnJva2VuIG9uIEZyZWVCU0QgLSAjZGVmaW5lJ2QgaW4gPG5ldC9pZi5oPikKKyMgICBBZ2VudDogICAoP29yIE5vdC1Vc2VkPykKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfYWRkcmxpc3QiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2FkZHJsaXN0IiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYWRkcmxpc3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfYWRkcmhlYWQudHFoX2ZpcnN0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9hZGRyaGVhZF90cWhfZmlyc3QiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9hZGRyaGVhZF90cWhfZmlyc3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkhFQURfVFFIX0ZJUlNUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2JhdWRyYXRlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9iYXVkcmF0ZSIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2JhdWRyYXRlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2JhdWRyYXRlLmlmc192YWx1ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYmF1ZHJhdGVfaWZzX3ZhbHVlIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYmF1ZHJhdGVfaWZzX3ZhbHVlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFX0lGU19WQUxVRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9pYnl0ZXMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2lieXRlcyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2lieXRlcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JQllURVMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfaW1jYXN0cyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaW1jYXN0cyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2ltY2FzdHMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9pcWRyb3BzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pcWRyb3BzIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaXFkcm9wcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JUURST1BTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2xhc3RjaGFuZ2UudHZfc2VjIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9sYXN0Y2hhbmdlX3R2X3NlYyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2xhc3RjaGFuZ2VfdHZfc2VjIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2xhc3RjaGFuZ2UudHZfbnNlYyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbGFzdGNoYW5nZV90dl9uc2VjIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbGFzdGNoYW5nZV90dl9uc2VjIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfTlNFQyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9tdHUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX210dSIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX210dSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9NVFUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfbm9wcm90byIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbm9wcm90byIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX25vcHJvdG8iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTk9QUk9UTyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9vYnl0ZXMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX29ieXRlcyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX29ieXRlcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PQllURVMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfb21jYXN0cyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfb21jYXN0cyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX29tY2FzdHMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9zcGVlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfc3BlZWQiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9zcGVlZCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9TUEVFRCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl90eXBlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl90eXBlIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfdHlwZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX3huYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl94bmFtZSIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3huYW1lIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FIDEKK19BQ0VPRgorCisKK2ZpCisKKworCisjIENoZWNrIGZvciBCU0QgNC4zIHZzIDQuNCBzdHJ1Y3QgcnRlbnRyeQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfUlRFTlRSWV9UWVBFKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAjIEJTRCA0LjQgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIyAgICAoJ3J0X25vZGVzJyBhcnJheSkKKyAgICAgICAgIworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKworaW50CittYWluICgpCit7CisKKworI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAorI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQorI2VuZGlmCisKKyAgc3RydWN0IHJ0ZW50cnkgcnQ7CisgIHJ0LnJ0X25vZGVzWzBdLnJuX2ZsYWdzID0gMTsKKyAgcnQucnRfZHN0OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC40IgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgorICAgICAgICAjIEJTRCA0LjMgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIyAgICAoJ3J0X2hhc2gnKQorICAgICAgICAjCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCitpbnQKK21haW4gKCkKK3sKKworCitzdHJ1Y3QgcnRlbnRyeSBydDsKK3J0LnJ0X2hhc2g7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjMiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBCU0QgNC4zIG5vciA0LjQgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIworICAgICAgICAgICAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJ1bmtub3duIgorICAgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9SVEVOVFJZX1RZUEUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9SVEVOVFJZX1RZUEUiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjQiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFJURU5UUllfNF80IDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjICAgIENoZWNrIGZvciBvcnRlbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBbHBoYSkKKyMKK2lmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4dW5rbm93biI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc3RydWN0X3J0ZW50cnkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm9ydGVudHJ5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1vcnRlbnRyeQorZWxzZQorICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5CitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieHJ0ZW50cnkiIDsgdGhlbgorICAgICAgICAgICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9Im9ydGVudHJ5IgorICAgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA+JjY7IH0KK2Vsc2UKKyAgICBSVEVOVFJZX1RZUEU9InJ0ZW50cnkiCisgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCitmaQorCitpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4IjsgdGhlbgorICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUlRFTlRSWSBzdHJ1Y3QgJHthY19jdl9zdHJ1Y3RfcnRlbnRyeX0KK19BQ0VPRgorCisKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBPcGVyYXRpbmctU3lzdGVtIGNoYXJhY3RlcmlzdGljcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIwlEZXRlcm1pbmUgaG93IHRvIHRlc3QgZm9yIGNoYXJhY3RlciBkZXZpY2VzCisjCVtXZSBhc3N1bWUgdGhhdCAvZGV2L251bGwgZG9lcyBhY3R1YWxseSBleGlzdCFdCisjCitpZiB0ZXN0IC1jIC9kZXYvbnVsbDsgdGhlbgorICAgIENERVZfVEVTVF9GTEFHPSItYyIKK2VsaWYgdGVzdCAtZiAvZGV2L251bGw7IHRoZW4KKyAgICBDREVWX1RFU1RfRkxBRz0iLWYiCitlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW4ndCByZWxpYWJseSBkZXRlY3QgY2hhcmFjdGVyIGRldmljZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FuJ3QgcmVsaWFibHkgZGV0ZWN0IGNoYXJhY3RlciBkZXZpY2VzIiA+JjI7fQorICAgICMgSXMgaXQgYWN0dWFsbHkgc2Vuc2libGUgdG8gZmFsbCBiYWNrIG9uICJ0ZXN0IC1mIiA/CisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1mIgorZmkKKworIyAgICAgICBLZXJuZWwgTG9jYXRpb24KKyMJICAgIHVzZWQgaW4gbGlicmFyeS9hZ2VudAorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9LRVJORUxfTE9DKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfS0VSTkVMX0xPQz0idW5rbm93biIKKyAgICBmb3IgaSBpbiAvdm11bml4IC9ocC11eCAvc3RhbmQvdm11bml4IC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvbmV0YnNkIC91bml4IC9rZXJuZWwgL2JzZCAvbWFjaF9rZXJuZWwgL2Jvb3Qva2VybmVsL2tlcm5lbAorICAgIGRvCisgICAgICAgIGlmIHRlc3QgJENERVZfVEVTVF9GTEFHICRpOyB0aGVuCisgICAgICAgICAgICBhY19jdl9LRVJORUxfTE9DPSIkaSIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorICAgIGRvbmUKKyAgICAjCisgICAgIyBJbiBwcmluY2lwbGUsIHRoaXMgdGVzdCBpcyBtZWFudCB0byBwcm92aWRlIGEgZGVmYXVsdCBwYXRoIHRvIHRoZSBrZXJuZWwKKyAgICAjIEluIHByYWN0aWNlLCB0aGUgdGVzdCBpcyBicm9rZW4gYW5kIHRoZSBrZXJuZWwgcGF0aCBpcyBzZXQgdG8gInVua25vd24iCisgICAgIworICAgICMgTm90ZSB0aGF0IG9uIGNlcnRhaW4gc3lzdGVtcyAoZS5nLiBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMpLAorICAgICMgICAgaXQgaXMgaW1wb3NzaWJsZSB0byBwcmVkaWN0IHRoZSBuYW1lIG9mIHRoZSBrZXJuZWwsCisgICAgIyAgICBwYXJ0aWN1bGFybHkgaWYgaXQgaW5jbHVkZXMgdGhlIGtlcm5lbCB2ZXJzaW9uLCBhcmNoaXRlY3R1cmUsIGV0YworICAgICMKKyAgICAjIFNpbmNlIHRoaXMgZGVmYXVsdCB3aWxsIG5ldmVyIGFjdHVhbGx5IGJlIHVzZWQsIHRoZW4gZG9uJ3QgdHJ5IHRvIHNldCBpdAorICAgICMKKyAgICBpZiB0ZXN0ICRpID0gInVua25vd24iOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uIGhvcGVmdWxseSB0aGlzIHdvbid0IGJlIG5lZWRlZCEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uIGhvcGVmdWxseSB0aGlzIHdvbid0IGJlIG5lZWRlZCEiID4mMjt9CisgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfS0VSTkVMX0xPQyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0tFUk5FTF9MT0MiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEtFUk5FTF9MT0MgIiRhY19jdl9LRVJORUxfTE9DIgorX0FDRU9GCisKKworCisjICAgICAgIC9kZXYva21lbSBleGlzdGVuY2UKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2Rldi9rbWVtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAvZGV2L2ttZW0uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfSEFWRV9LTUVNKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9rbWVtOyB0aGVuCisgICAgICAgIGFjX2N2X0hBVkVfS01FTT0iL2Rldi9rbWVtIgorICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0hBVkVfS01FTSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0hBVkVfS01FTSIgPiY2OyB9CisjCisjICBOb3RlIHRoYXQgaXQncyBPSyBpZiB0aGlzIGRldmljZSBpcyBub3QgZm91bmQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfSEFWRV9LTUVNIiA9ICJ4L2Rldi9rbWVtIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfS01FTSAiJGFjX2N2X0hBVkVfS01FTSIKK19BQ0VPRgorCitmaQorCisKKyMgICAgICAgU3dhcCBkZXZpY2UgTG9jYXRpb24KKyMgICAgICAgICAgICgvZGV2L2RtZW0gb3IgL2Rldi9kcnVtKQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfRE1FTV9MT0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2RtZW07IHRoZW4KKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZG1lbSIKKyAgICBlbGlmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYvZHJ1bTsgdGhlbgorICAgICAgICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kcnVtIgorICAgIGVsc2UKKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Im5vbmUiCisgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfRE1FTV9MT0MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ETUVNX0xPQyIgPiY2OyB9CisjCisjICBOb3RlIHRoYXQgaXQncyBPSyBpZiB0aGlzIGRldmljZSBpcyBub3QgZm91bmQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfRE1FTV9MT0MiICE9ICJ4bm9uZSI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBETUVNX0xPQyAiJGFjX2N2X0RNRU1fTE9DIgorX0FDRU9GCisKK2ZpCisKKworIyAgICAgICBNb3VudCB0YWJsZSBMb2NhdGlvbgorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfRVRDX01OVFRBQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X0VUQ19NTlRUQUI9IiR7d2l0aF9tbnR0YWI6LXVua25vd259IgorICAgIGlmIHRlc3QgIiRhY19jdl9FVENfTU5UVEFCIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBmb3IgaSBpbiAvZXRjL21udHRhYiAvZXRjL210YWIgL2V0Yy9maWxlc3lzdGVtcyAvZGV2L21udHRhYgorICAgICAgICBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAkaSAtbyAtYyAkaTsgdGhlbgorICAgICAgICAgICAgICAgIGFjX2N2X0VUQ19NTlRUQUI9IiRpIgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0VUQ19NTlRUQUIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9FVENfTU5UVEFCIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFVENfTU5UVEFCICIkYWNfY3ZfRVRDX01OVFRBQiIKK19BQ0VPRgorCisKKworIyAgICAgICBQcmludGluZworIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxwc3RhdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbHBzdGF0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9MUFNUQVRfUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJExQU1RBVF9QQVRIIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0xQU1RBVF9QQVRIPSIkTFBTVEFUX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0xQU1RBVF9QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTFBTVEFUX1BBVEg9JGFjX2N2X3BhdGhfTFBTVEFUX1BBVEgKK2lmIHRlc3QgLW4gIiRMUFNUQVRfUEFUSCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMUFNUQVRfUEFUSCIgPiY1CiskYXNfZWNobyAiJExQU1RBVF9QQVRIIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgeCRMUFNUQVRfUEFUSCAhPSB4OyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFBTVEFUX1BBVEggIiRMUFNUQVRfUEFUSCIKK19BQ0VPRgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTFBTVEFUIDEiID4+Y29uZmRlZnMuaAorCitmaQoraWYgdGVzdCAtciAvZXRjL3ByaW50Y2FwOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJJTlRDQVAgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyAgICAgICBDaGVjayBwcyBhcmdzCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHNfZmxhZ3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitpZiB0ZXN0ICJgKCRQU1BST0cgLWUgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1lbCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lbCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIGFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9ImFjeCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1hY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0gMj4mMSkgfCAkRUdSRVAgJyBwcyAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0iCitlbGlmIHRlc3QgImAoJFBTUFJPRyBheCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9ImF4IgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uIiA+JjI7fQorICAgIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHNfZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wc19mbGFncyIgPiY2OyB9CisKK1BTQ01EPSIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBTQ01EICIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKK19BQ0VPRgorCisKKworIyMKKyMgICBTeXN0ZW0vQ29tcGlsYXRpb24tcmVsYXRlZAorIyMKKworIyAgICAgICBUZXN0IGZvciBTSUdIVVAKKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU0lHSFVQIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBTSUdIVVAuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuIFNJR0hVUAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfaGF2ZV9zaWdodXA9eWVzCitlbHNlCisgIG5ldHNubXBfaGF2ZV9zaWdodXA9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2hhdmVfc2lnaHVwIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9oYXZlX3NpZ2h1cCIgPiY2OyB9CitpZiB0ZXN0ICJ4JG5ldHNubXBfaGF2ZV9zaWdodXAiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NJR0hVUCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjICAgICAgIENoZWNrIHdoZXRoZXIgc3lzY3RsKCkgaXMgdXNhYmxlCisjCSAgICB1c2VkIGluIGxpYnJhcnkvYWdlbnQKKyMKIGlmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllczsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZSIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZSIgPiYyO30KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb24iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCkBAIC00OTA5Niw2MyArMjkzNDMsNTAgQEAKIH0KIAogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCiAKLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA+JjY7IH0KIGZpCiAKIGlmIHRlc3QgIngkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAxCi1fQUNFT0YKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAorCisjICAgQ2hlY2sgd2hldGhlciBUQ1AgdGltZXIgY29uc3RhbnRzIGFyZSBpbmRlZWQgY29uc3RhbnQKKyMgICAgICAgb3IgZGVwZW5kIG9uIHRoZSBrZXJuZWwgY2xvY2sgdGljayAnaHonLiAgICAgICAgKEZyZWVCU0QgNC54KQogIwotIyBJbiBGcmVlQlNEIDQueCwgdGhlIFRDUCB0aW1lciBjb25zdGFudHMgYXJlbid0LiAgVGhleSBhcmUgZGVmaW5lZAotIyBpbiB0ZXJtcyBvZiAnaHonLCB0aGUga2VybmVsIGNsb2NrIHRpY2suICBJbiB0aGlzIGNhc2UsCi0jIHdlIG5lZWQgdG8gaGF2ZSBhIGxvY2FsIHZhcmlhYmxlICdoeicgaW4gc2NvcGUgYW5kIHNldCB0byBhIHVzZWZ1bAotIyB2YWx1ZSB3aGVuZXZlciB3ZSB1c2Ugb25lIG9mIHRoZXNlIGNvbnN0YW50cy4KKyMgICAgICAgSWYgdGhlIGxhdHRlciwgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gaGF2ZSBhIGxvY2FsCisjICAgICAgIHZhcmlhYmxlICdoeicgZGVmaW5lZCBhbmQgd2l0aCBhIHN1aXRhYmxlIHZhbHVlLAorIyAgICAgICB3aGVuZXZlciB3ZSB3YW50IHRvICB1c2Ugb25lIG9uZSBvZiB0aGVzZSAnY29uc3RhbnRzJy4KICMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeiciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeicuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X1RDUFRWX05FRURTX0haK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIAkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6JyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeicuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfVENQVFZfTkVFRFNfSForOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLworCiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KIFRDUFRWX1NSVFRERkxUCiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImh6IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJoeiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgYWNfY3ZfVENQVFZfTkVFRFNfSFo9eWVzCiBlbHNlCiAgIGFjX2N2X1RDUFRWX05FRURTX0haPW5vCkBAIC00OTE2MCwxNiArMjkzOTQsMzc2IEBACiBybSAtZiBjb25mdGVzdCoKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfVENQVFZfTkVFRFNfSFoiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X1RDUFRWX05FRURTX0haIiA+JjY7IH0KIAogaWYgdGVzdCAieCRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVENQVFZfTkVFRFNfSFogMQorCiskYXNfZWNobyAiI2RlZmluZSBUQ1BUVl9ORUVEU19IWiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjICAgQ2hlY2sgd2hldGhlciBJUCBSb3V0ZSB0YWJsZSBpcyBjYWNoZWQgICAgICAgICAgICAgIChTb2xhcmlzKQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgc29sYXJpcyopCisgICAgIyAgICBIZWFkZXIgY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDIuNi83KQorICAgICMKKyAgICBmb3IgYWNfaGVhZGVyIGluIGluZXQvY29tbW9uLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImluZXQvY29tbW9uLmgiICJhY19jdl9oZWFkZXJfaW5ldF9jb21tb25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaW5ldF9jb21tb25faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfQ09NTU9OX0ggMQogX0FDRU9GCiAKIGZpCiAKK2RvbmUKKworICAgIGZvciBhY19oZWFkZXIgaW4gaW5ldC9pcC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJpbmV0L2lwLmgiICJhY19jdl9oZWFkZXJfaW5ldF9pcF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUUkVBTV9ICisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9JTkVUX0NPTU1PTl9ICisjaW5jbHVkZSA8aW5ldC9jb21tb24uaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9pbmV0X2lwX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTkVUX0lQX0ggMQorX0FDRU9GCisgYWNfaW5ldF9pcF9oPXllcworZWxzZQorICBhY19pbmV0X2lwX2g9bm8KK2ZpCisKK2RvbmUKKworICAgIGlmIHRlc3QgJGFjX2luZXRfaXBfaCA9IHllcyA7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbWliMl9pcFJvdXRlRW50cnlfdCBpbiBpbmV0L21pYjIuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbWliMl9pcFJvdXRlRW50cnlfdCBpbiBpbmV0L21pYjIuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9taWIyX2lwUm91dGVFbnRyeV90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWYgSEFWRV9JTkVUX01JQjJfSAorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgIG1pYjJfaXBSb3V0ZUVudHJ5X3QgdGVzdGl0OworICBpZihzaXplb2YodGVzdGl0KSkKKyAgICByZXR1cm4oMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9taWIyX2lwUm91dGVFbnRyeV90PXllcworZWxzZQorICBhY19jdl9taWIyX2lwUm91dGVFbnRyeV90PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9taWIyX2lwUm91dGVFbnRyeV90IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCIgPiY2OyB9CisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9taWIyX2lwUm91dGVFbnRyeV90IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBJUkVfQ0FDSEUgaXMgZGVmaW5lZCBpbiBpbmV0L2lwLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBJUkVfQ0FDSEUgaXMgZGVmaW5lZCBpbiBpbmV0L2lwLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaXJlX2NhY2hlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWYgSEFWRV9JTkVUX0lQX0gKKyNpbmNsdWRlIDxpbmV0L2lwLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgaW50IHRlc3RpdD1JUkVfQ0FDSEU7CisgIGlmKHRlc3RpdCkKKyAgICByZXR1cm4oMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9pcmVfY2FjaGU9eWVzCitlbHNlCisgIGFjX2N2X2lyZV9jYWNoZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaXJlX2NhY2hlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaXJlX2NhY2hlIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNfY3ZfaXJlX2NhY2hlPW5vCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9pcmVfY2FjaGUiID0gInh5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RFRklORURfSVJFX0NBQ0hFIC8qKi8iID4+Y29uZmRlZnMuaAorCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSXQgc2VlbXMgdGhhdCB5b3UgaGF2ZSBpbmV0L2lwLmgsIGJ1dCBJUkVfQ0FDSEUgaXMgbm90IGRlZmluZWQuIFwKK1RoYXQgbWVhbnMgdGhhdCB5b3VyIHF1ZXJ5IHRvIGlwUm91dGUgTUlCIGNvdWxkIGdlbmVyYXRlIG92ZXIgMjBrIHJlc3VsdHMhIFwKK0FuZCB0aGlzIGNhbiBiZSB2ZXJ5IHNsb3cuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEl0IHNlZW1zIHRoYXQgeW91IGhhdmUgaW5ldC9pcC5oLCBidXQgSVJFX0NBQ0hFIGlzIG5vdCBkZWZpbmVkLiBcCitUaGF0IG1lYW5zIHRoYXQgeW91ciBxdWVyeSB0byBpcFJvdXRlIE1JQiBjb3VsZCBnZW5lcmF0ZSBvdmVyIDIwayByZXN1bHRzISBcCitBbmQgdGhpcyBjYW4gYmUgdmVyeSBzbG93LiIgPiYyO30KKyAgICAgICAgZmkKKyAgICBmaSAgICAgICAgICMgInRlc3QgJGFjX2luZXRfaXBfaCA9IHllcyIKKyAgICA7OworZXNhYworCisjICAgQ2hlY2sgd2hldGhlciBJUF9QS1RJTkZPIGlzIHVzYWJsZS4KKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgSVBfUEtUSU5GTyAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElQX1BLVElORk8gLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfaXBfcGt0aW5mbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBwcmludGYoKSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBtYWxsb2MoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK2ludAorbWFpbiAoKQoreworCisgICAgdm9pZCAqYnVmOworICAgIGludCBsZW47CisgICAgdm9pZCAqZnJvbTsKKyAgICBzb2NrbGVuX3QgKmZyb21sZW47CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIGNoYXIgKmNtc2cgPSBtYWxsb2MoQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKSk7CisgICAgc3RydWN0IGNtc2doZHIgKmNtOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIGlvdi5pb3ZfbGVuID0gbGVuOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5tc2dfbmFtZSA9IGZyb207CisgICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICBmb3IgKGNtID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY207IGNtID0gQ01TR19OWFRIRFIoJm1zZywgY20pKSB7CisgICAgICAgIGlmIChjbS0+Y21zZ19sZXZlbCA9PSBTT0xfSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyogc3JjID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkcmVzczogJXM7IGluZGV4OiAlZFxuIiwgaW5ldF9udG9hKHNyYy0+aXBpX2FkZHIpLAorCSAgICAgICAgICAgc3JjLT5pcGlfaWZpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2lwX3BrdGluZm89eWVzCitlbHNlCisgIGFjX2N2X2hhdmVfaXBfcGt0aW5mbz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfaXBfcGt0aW5mbyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfaXBfcGt0aW5mbyIgPiY2OyB9CitpZiB0ZXN0IHgkYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lQX1BLVElORk8gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgICBDaGVjayB3aGV0aGVyIElQX1JFQ1ZEU1RBRERSIGlzIHVzYWJsZS4KKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgSVBfUkVDVkRTVEFERFIgIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBJUF9SRUNWRFNUQUREUiAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBwcmludGYoKSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBtYWxsb2MoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK2ludAorbWFpbiAoKQoreworCisgICAgdm9pZCAqYnVmOworICAgIGludCBsZW47CisgICAgdm9pZCAqZnJvbTsKKyAgICBzb2NrbGVuX3QgKmZyb21sZW47CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIGNoYXIgKmNtc2cgPSBtYWxsb2MoQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX2FkZHIpKSk7CisgICAgc3RydWN0IGNtc2doZHIgKmNtOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIGlvdi5pb3ZfbGVuID0gbGVuOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5tc2dfbmFtZSA9IGZyb207CisgICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICBmb3IgKGNtID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY207IGNtID0gQ01TR19OWFRIRFIoJm1zZywgY20pKSB7CisgICAgICAgIGlmIChjbS0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtLT5jbXNnX3R5cGUgPT0gSVBfUkVDVkRTVEFERFIpIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyKiBzcmMgPSAoc3RydWN0IGluX2FkZHIgKilDTVNHX0RBVEEoY20pOworICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzOiAlc1xuIiwgaW5ldF9udG9hKHNyYykpOworICAgICAgICB9CisgICAgfQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcj15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcj1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyIiA+JjY7IH0KK2lmIHRlc3QgeCRhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lQX1JFQ1ZEU1RBRERSIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwogIwogIyBkZWZpbmUgdGhlIGFnZW50IGxpYnJhcmllcyB2YXJpYWJsZXMKICMKQEAgLTQ5MTc4LDUwMyArMjk3NzIsNDQgQEAKIAogCiAKLSMKLSMgUHJvbXB0IGZvciB2YXJpb3VzIGJpdHMgb2YgdXNlciBpbmZvcm1hdGlvbgotIwogCi1pZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICJ4IjsgdGhlbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX3dhcm5lZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQogCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1jYXQgPDwgRU9GCiAKLQkgKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBTZWN0aW9uICoqKioqKioqKioqKioqCiAKLQlZb3UgYXJlIGFib3V0IHRvIGJlIHByb21wdGVkIHdpdGggYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiAgQW5zd2VyCi10aGVtIGNhcmVmdWxseSwgYXMgdGhleSBkZXRlcm1pbmUgaG93IHRoZSBTTk1QIGFnZW50IGFuZCByZWxhdGVkCi1hcHBsaWNhdGlvbnMgYXJlIHRvIGZ1bmN0aW9uLgogCi0JQWZ0ZXIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmluaXNoZXMsIHlvdSBjYW4gYnJvd3NlIHRoZSBuZXdseQotY3JlYXRlZCBuZXQtc25tcC1jb25maWcuaCBmaWxlIGZvciBmdXJ0aGVyIC0gbGVzcyBpbXBvcnRhbnQgLSBwYXJhbWV0ZXJzIHRvCi1tb2RpZnkuICBCZSBjYXJlZnVsIGlmIHlvdSByZS1ydW4gY29uZmlndXJlIHRob3VnaCwgc2luY2UgbmV0LXNubXAtY29uZmlnLmgKLXdpbGwgYmUgb3ZlcndyaXR0ZW4uCiAKLS1QcmVzcyByZXR1cm4gdG8gY29udGludWUtCi1FT0YKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCiAKLXJlYWQgdG1waW5wdXQKLWFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCi1lbHNlCi0gIGFjX2N2X2hhdmVfd2FybmVkPSJubyIKLWZpCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX3dhcm5lZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV93YXJuZWQiID4mNgotZWxzZQotICBhY19jdl9oYXZlX3dhcm5lZD0ieWVzIgotZmkKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kIgogCi1NRT1gJFdIT0FNSWAKLWlmIHRlc3QgLWYgL2V0Yy9yZXNvbHYuY29uZjsgdGhlbgotICBMT0M9YGNhdCAvZXRjL3Jlc29sdi5jb25mIHwgZ3JlcCAnXmRvbWFpbicgfCB0YWlsIC0xIHwgYXdrICd7cHJpbnQgJE5GfSdgCi1lbHNlCi0gIExPQz0iQG5vLndoZXJlIgotZmkKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIgogCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZCIKIAotTVNHX0NIRUNLPWBlY2hvICIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIgogCi0qKiogRGVmYXVsdCBTTk1QIFZlcnNpb246CithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCIKIAotCVN0YXJ0aW5nIHdpdGggTmV0LVNOTVAgNS4wLCB5b3UgY2FuIGNob29zZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mCi10aGUgU05NUCBwcm90b2NvbCB0byB1c2Ugd2hlbiBubyB2ZXJzaW9uIGlzIGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCi1jb21tYW5kIGxpbmUsIG9yIHZpYSBhbiAnc25tcC5jb25mJyBmaWxlLiAgSW4gdGhlIHBhc3QgdGhpcyB3YXMgc2V0IHRvCi1TTk1QdjEsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvIHN3aXRjaCB0byBTTk1QdjMgaWYgZGVzaXJlZC4gIFNOTVB2Mwotd2lsbCBwcm92aWRlIGEgbW9yZSBzZWN1cmUgbWFuYWdlbWVudCBlbnZpcm9ubWVudCAoYW5kIHRodXMgeW91J3JlCi1lbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBTTk1QdjMpLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgdGhhdAotcmVseSBvbiB0aGUgb2xkIGJlaGF2aW91ci4gIChUaG91Z2ggc3VjaCBzY3JpcHRzIHdpbGwgcHJvYmFibHkgbmVlZCB0bwotYmUgY2hhbmdlZCB0byB1c2UgdGhlICctYycgY29tbXVuaXR5IGZsYWcgYW55d2F5LCBhcyB0aGUgU05NUHYxCi1jb21tYW5kIGxpbmUgdXNhZ2UgaGFzIGNoYW5nZWQgYXMgd2VsbC4pLgotICAgQXQgdGhpcyBwcm9tcHQgeW91IGNhbiBzZWxlY3QgXCIxXCIsIFwiMlwiIChmb3IgU05NUHYyYyksIG9yIFwiM1wiIGFzCi10aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgY29tbWFuZCB0b29scyAoc25tcGdldCwgLi4uKSB0byB1c2UuICBUaGlzCi1jYW4gYWx3YXlzIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgLXYgZmxhZyB0byB0aGUgdG9vbHMsIG9yCi1ieSB1c2luZyB0aGUgXCJkZWZWZXJzaW9uXCIgdG9rZW4gaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KLSAgIFByb3ZpZGluZyB0aGUgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPVwieFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCiAKLURlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZSIgfCB0YWlsIC0xYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiIgPiY2CithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbiIKIAotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBtYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKIAotKioqIERlZmF1bHQgU05NUCBWZXJzaW9uOgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG1pYnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1pYnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCiAKLQlTdGFydGluZyB3aXRoIE5ldC1TTk1QIDUuMCwgeW91IGNhbiBjaG9vc2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgotdGhlIFNOTVAgcHJvdG9jb2wgdG8gdXNlIHdoZW4gbm8gdmVyc2lvbiBpcyBnaXZlbiBleHBsaWNpdGx5IG9uIHRoZQotY29tbWFuZCBsaW5lLCBvciB2aWEgYW4gJ3NubXAuY29uZicgZmlsZS4gIEluIHRoZSBwYXN0IHRoaXMgd2FzIHNldCB0bwotU05NUHYxLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byBzd2l0Y2ggdG8gU05NUHYzIGlmIGRlc2lyZWQuICBTTk1QdjMKLXdpbGwgcHJvdmlkZSBhIG1vcmUgc2VjdXJlIG1hbmFnZW1lbnQgZW52aXJvbm1lbnQgKGFuZCB0aHVzIHlvdSdyZQotZW5jb3VyYWdlZCB0byBzd2l0Y2ggdG8gU05NUHYzKSwgYnV0IG1heSBicmVhayBleGlzdGluZyBzY3JpcHRzIHRoYXQKLXJlbHkgb24gdGhlIG9sZCBiZWhhdmlvdXIuICAoVGhvdWdoIHN1Y2ggc2NyaXB0cyB3aWxsIHByb2JhYmx5IG5lZWQgdG8KLWJlIGNoYW5nZWQgdG8gdXNlIHRoZSAnLWMnIGNvbW11bml0eSBmbGFnIGFueXdheSwgYXMgdGhlIFNOTVB2MQotY29tbWFuZCBsaW5lIHVzYWdlIGhhcyBjaGFuZ2VkIGFzIHdlbGwuKS4KLSAgIEF0IHRoaXMgcHJvbXB0IHlvdSBjYW4gc2VsZWN0IFwiMVwiLCBcIjJcIiAoZm9yIFNOTVB2MmMpLCBvciBcIjNcIiBhcwotdGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGNvbW1hbmQgdG9vbHMgKHNubXBnZXQsIC4uLikgdG8gdXNlLiAgVGhpcwotY2FuIGFsd2F5cyBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdXNpbmcgdGhlIC12IGZsYWcgdG8gdGhlIHRvb2xzLCBvcgotYnkgdXNpbmcgdGhlIFwiZGVmVmVyc2lvblwiIHRva2VuIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCi0gICBQcm92aWRpbmcgdGhlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj1cInhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbiIKIAotRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlICgzKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiMyIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IjMiCi1maQotZXZhbCBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIzIgotZXZhbCBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwiJHRtcGlucHV0XCIKLWZpCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4iCiAKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzOmRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW4iCiAKLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cJE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04KLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBsb2NhbC9zbm1wY29uZiIKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA+JjYKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieHVucXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHVucXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iCi1fQUNFT0YKIAotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OCi1fQUNFT0YKLQotICBmaQotZmkKLQotCi0jIHdlIHRlc3RlZCB0aGlzIGFib3ZlIGJlZm9yZSB0aGUgcHJvbXB0LCBidXQgdGhlIHByb21wdCBtYXkgZ2l2ZSBhIG5ldyB2YWx1ZS4KLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICIyYyI7IHRoZW4KLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iMiIKLWZpCi1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjEiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjIiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjMiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IElsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLQotTVNHX0NIRUNLPWBlY2hvICIKLQotKioqIFN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uOgotCi0JRGVzY3JpYmVzIHdobyBzaG91bGQgYmUgY29udGFjdGVkIGFib3V0IHRoZSBob3N0IHRoZSBhZ2VudCBpcwotcnVubmluZyBvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIFRoaXMKLWNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZSBcInN5c2NvbnRhY3RcIiBzeW50YXggaW4gdGhlIGFnZW50J3MKLWNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1jb250YWN0PVwiY29udGFjdFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb24iIHwgdGFpbCAtMWAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIiID4mNgotCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgotCi0qKiogU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb246Ci0KLQlEZXNjcmliZXMgd2hvIHNob3VsZCBiZSBjb250YWN0ZWQgYWJvdXQgdGhlIGhvc3QgdGhlIGFnZW50IGlzCi1ydW5uaW5nIG9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgVGhpcwotY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlIFwic3lzY29udGFjdFwiIHN5bnRheCBpbiB0aGUgYWdlbnQncwotY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWNvbnRhY3Q9XCJjb250YWN0XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbiAoJE1FQCRMT0MpOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkTUVAJExPQyIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IiRNRUAkTE9DIgotZmkKLWV2YWwgTkVUU05NUF9TWVNfQ09OVEFDVD1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iJE1FQCRMT0MiCi1ldmFsIE5FVFNOTVBfU1lTX0NPTlRBQ1Q9XCIkdG1waW5wdXRcIgotZmkKLQotCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9XCRORVRTTk1QX1NZU19DT05UQUNUCi1lY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9TWVNfQ09OVEFDVCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiCi1fQUNFT0YKLQotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1NZU19DT05UQUNUICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUCi1fQUNFT0YKLQotICBmaQotZmkKLQotCi0KLU1TR19DSEVDSz1gZWNobyAiCi0KLSoqKiBTeXN0ZW0gTG9jYXRpb246Ci0KLQlEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGluZm9ybWF0aW9uIGlzCi1hdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgdGhpcyBjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUKLVwic3lzbG9jYXRpb25cIiBzeW50YXggaW4gdGhlIGFnZW50J3MgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVwibG9jYXRpb25cIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBMb2NhdGlvbiIgfCB0YWlsIC0xYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiIiA+JjYKLQotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKLQotKioqIFN5c3RlbSBMb2NhdGlvbjoKLQotCURlc2NyaWJlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKLWF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICB0aGlzIGNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZQotXCJzeXNsb2NhdGlvblwiIHN5bnRheCBpbiB0aGUgYWdlbnQncyBjb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtbG9jYXRpb249XCJsb2NhdGlvblwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIExvY2F0aW9uIChVbmtub3duKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiVW5rbm93biIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IlVua25vd24iCi1maQotZXZhbCBORVRTTk1QX1NZU19MT0M9XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IlVua25vd24iCi1ldmFsIE5FVFNOTVBfU1lTX0xPQz1cIiR0bXBpbnB1dFwiCi1maQotCi0KLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPVwkTkVUU05NUF9TWVNfTE9DCi1lY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID4mNgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9TWVNfTE9DICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIgotX0FDRU9GCi0KLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9TWVNfTE9DICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MKLV9BQ0VPRgotCi0gIGZpCi1maQotCi0KLWlmIHRlc3QgLWQgL3Zhci9sb2c7IHRoZW4KLSAgZGVmYXVsdGxvZz0iL3Zhci9sb2cvc25tcGQubG9nIgotZWxzZQotICBkZWZhdWx0bG9nPSIvdXNyL2FkbS9zbm1wZC5sb2ciCi1maQotCi0KLU1TR19DSEVDSz1gZWNobyAiCi0KLSoqKiBMb2dmaWxlIGxvY2F0aW9uOgotCi0JRW50ZXIgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBzbm1wZCBhZ2VudCB0byBkdW1wCi1pbmZvcm1hdGlvbiAmIGVycm9ycyB0by4gIElmIG5vdCBkZWZpbmVkIChlbnRlciB0aGUga2V5d29yZCBcIm5vbmVcIgotYXQgdGhlIHByb21wdCBiZWxvdykgdGhlIGFnZW50IHdpbGwgdXNlIHN0ZG91dCBhbmQgc3RkZXJyIGluc3RlYWQuCi0oTm90ZTogVGhpcyB2YWx1ZSBjYW4gYmUgb3Zlci1yaWRkZW4gdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuKQotICBQcm92aWRpbmcgdGhlIC0td2l0aC1sb2dmaWxlPVwicGF0aFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZSIgfCB0YWlsIC0xYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiIiA+JjYKLQotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKLQotKioqIExvZ2ZpbGUgbG9jYXRpb246Ci0KLQlFbnRlciB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIHNubXBkIGFnZW50IHRvIGR1bXAKLWluZm9ybWF0aW9uICYgZXJyb3JzIHRvLiAgSWYgbm90IGRlZmluZWQgKGVudGVyIHRoZSBrZXl3b3JkIFwibm9uZVwiCi1hdCB0aGUgcHJvbXB0IGJlbG93KSB0aGUgYWdlbnQgd2lsbCB1c2Ugc3Rkb3V0IGFuZCBzdGRlcnIgaW5zdGVhZC4KLShOb3RlOiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVyLXJpZGRlbiB1c2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4pCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLWxvZ2ZpbGU9XCJwYXRoXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlICgkZGVmYXVsdGxvZyk6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRkZWZhdWx0bG9nIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iJGRlZmF1bHRsb2ciCi1maQotZXZhbCBORVRTTk1QX0xPR0ZJTEU9XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IiRkZWZhdWx0bG9nIgotZXZhbCBORVRTTk1QX0xPR0ZJTEU9XCIkdG1waW5wdXRcIgotZmkKLQotCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT1cJE5FVFNOTVBfTE9HRklMRQotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA+JjYKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiICE9ICJub25lIjsgdGhlbgotICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTE9HRklMRSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIKLV9BQ0VPRgotCi0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTE9HRklMRSAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFCi1fQUNFT0YKLQotICBmaQotZmkKLQotCi1pZiB0ZXN0IC1kIC92YXI7IHRoZW4KLSAgZGVmYXVsdHN0b3JlPSIvdmFyL25ldC1zbm1wIgotICB1Y2RkZWZhdWx0c3RvcmU9Ii92YXIvdWNkLXNubXAiCi1lbHNlCi0gIGRlZmF1bHRzdG9yZT0iL2V0Yy9uZXQtc25tcCIKLSAgdWNkZGVmYXVsdHN0b3JlPSIvZXRjL3VjZC1zbm1wIgotZmkKLQotCi1NU0dfQ0hFQ0s9YGVjaG8gIgotCi0qKiogc25tcGQgcGVyc2lzdGVudCBzdG9yYWdlIGxvY2F0aW9uOgotCi0JRW50ZXIgYSBkaXJlY3RvcnkgZm9yIHRoZSBTTk1QIGxpYnJhcnkgdG8gc3RvcmUgcGVyc2lzdGVudAotZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgZGVmYXVsdCBsb2NhdGlvbiBpcwotZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBkZWZhdWx0IGxvY2F0aW9uICh3aGljaCB3YXMgZm9yIHVjZC1zbm1wKS4gIElmCi15b3Ugc3RheSB3aXRoIHRoZSBuZXcgcGF0aCwgSSdsbCBhc2sgeW91IGluIGEgc2Vjb25kIGlmIHlvdSB3aXNoIHRvCi1jb3B5IHlvdXIgZmlsZXMgb3ZlciB0byB0aGUgbmV3IGxvY2F0aW9uIChvbmNlIG9ubHkpLiAgSWYgeW91IHBpY2sKLXNvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZSBkZWZhdWx0LCB5b3UnbGwgaGF2ZSB0byBjb3B5IHRoZW0geW91cnNlbGYuCi1UaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggcGlja2luZyB0aGUgb2xkIHBhdGggKCR1Y2RkZWZhdWx0c3RvcmUpIGlmCi15b3UnZCByYXRoZXIuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PVwicGF0aFwiIHBhcmFtZXRlciB0bwotLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbiIgfCB0YWlsIC0xYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiIgPiY2Ci0KLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCi0KLSoqKiBzbm1wZCBwZXJzaXN0ZW50IHN0b3JhZ2UgbG9jYXRpb246Ci0KLQlFbnRlciBhIGRpcmVjdG9yeSBmb3IgdGhlIFNOTVAgbGlicmFyeSB0byBzdG9yZSBwZXJzaXN0ZW50Ci1kYXRhIGluIHRoZSBmb3JtIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBkZWZhdWx0IGxvY2F0aW9uIGlzCi1kaWZmZXJlbnQgdGhhbiB0aGUgb2xkIGRlZmF1bHQgbG9jYXRpb24gKHdoaWNoIHdhcyBmb3IgdWNkLXNubXApLiAgSWYKLXlvdSBzdGF5IHdpdGggdGhlIG5ldyBwYXRoLCBJJ2xsIGFzayB5b3UgaW4gYSBzZWNvbmQgaWYgeW91IHdpc2ggdG8KLWNvcHkgeW91ciBmaWxlcyBvdmVyIHRvIHRoZSBuZXcgbG9jYXRpb24gKG9uY2Ugb25seSkuICBJZiB5b3UgcGljawotc29tZSBvdGhlciBwYXRoIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlbSB5b3Vyc2VsZi4KLVRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBwaWNraW5nIHRoZSBvbGQgcGF0aCAoJHVjZGRlZmF1bHRzdG9yZSkgaWYKLXlvdSdkIHJhdGhlci4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9XCJwYXRoXCIgcGFyYW1ldGVyIHRvCi0uL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uICgkZGVmYXVsdHN0b3JlKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJGRlZmF1bHRzdG9yZSIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IiRkZWZhdWx0c3RvcmUiCi1maQotZXZhbCBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIkZGVmYXVsdHN0b3JlIgotZXZhbCBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwiJHRtcGlucHV0XCIKLWZpCi0KLQotZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwkTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiID4mNgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiICE9ICJub25lIjsgdGhlbgotICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIgotX0FDRU9GCi0KLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLQotUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKLQotVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JHVjZGRlZmF1bHRzdG9yZQotCi0KLWlmIHRlc3QgJFBFUlNJU1RFTlRfRElSRUNUT1JZID0gIiRkZWZhdWx0c3RvcmUiIC1hIC1kICIkdWNkZGVmYXVsdHN0b3JlIiAtYSAhIC1kICIkZGVmYXVsdHN0b3JlIiA7IHRoZW4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLQotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKLQotKioqIENvcHlpbmcgb2xkIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMgdG8gbmV0LXNubXAgcGVyc2lzdGVudCBkaXJlY3Rvcnk6Ci0KLQlXb3VsZCB5b3UgbGlrZSB0byBjb3B5IHRoZSBvbGRlciB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzCi1pbnRvIHlvdXIgbmV3IG5ldC1zbm1wIHBlcnNpc3RlbnQgZmlsZSBwYXRoPyAgVGhpcyB3aWxsIGZ1bmN0aW9uYWxseQotc2F2ZSBhbGwgeW91ciB1Y2Qtc25tcCBkYXRhIGFuZCBsZXQgaXQgYmUgdXNlZCB3aXRoaW4gdGhlIG5ldC1zbm1wCi10b29scy4gIFRoaXMgd2lsbCBvbmx5IGJlIGRvbmUgb25jZSB3aGVuIHlvdSBydW4gbWFrZSBpbnN0YWxsLiAgSWYgeW91Ci13aXNoIHRvIGRvIHRoaXMsIGVudGVyICJ5ZXMiIGF0IHRoZSBwcm9tcHQuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz1cIm5vXCIgKG9yIFwieWVzXCIpCi1wYXJhbWV0ZXJzIHRvIC4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUNvcHkgdWNkLXNubXAgZGF0YSBpbnRvIHRoZSBuZXQtc25tcCBkYXRhIGRpcmVjdG9yeSAoInllcyIpOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIieWVzIiIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IiJ5ZXMiIgotZmkKLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIieWVzIiIKLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPVwiJHRtcGlucHV0XCIKLWZpCi0KLQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIiA+JjYKLWVsc2UKLWFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0ibm8iCi1maQotQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIgotCi0KLQotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbiIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBtYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG5ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW4iCi0KLQotICAgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZWZhdWx0IgorYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlZmF1bHQiCiAKIAogIwpAQCAtNDk2ODYsMTEgKzI5ODIxLDYgQEAKIAogCiAKLQotCi0KLQotCiBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQogIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCkBAIC00OTcwOSwzOSArMjk4MzksNzAgQEAKIAogIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKICMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCi0jIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgogIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCiAjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgoteworKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKwogICAoc2V0KSAyPiYxIHwKLSAgICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgotICAgICphY19zcGFjZT1cICopCi0gICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCi0gICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KICAgICAgIHNlZCAtbiBcCiAJInMvJy8nXFxcXCcnL2c7CiAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCi0gICAgICA7OworICAgICAgOzsgIygKICAgICAqKQogICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KLSAgICAgIHNlZCAtbiBcCi0JInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgogICAgICAgOzsKLSAgICBlc2FjOwotfSB8CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CiAgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAogICAgICB0IGNsZWFyCi0gICAgIDogY2xlYXIKKyAgICAgOmNsZWFyCiAgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KICAgICAgdCBlbmQKLSAgICAgL15hY19jdl9lbnYvIXMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LwotICAgICA6IGVuZCcgPj5jb25mY2FjaGUKLWlmIGRpZmYgJGNhY2hlX2ZpbGUgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gIGlmIHRlc3QgLXcgJGNhY2hlX2ZpbGU7IHRoZW4KLSAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKLSAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQogICBlbHNlCi0gICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgZmkKIGZpCiBybSAtZiBjb25mY2FjaGUKQEAgLTQ5NzUwLDMyICsyOTkxMSwxOSBAQAogIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCiAKLSMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAotIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKLSMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5Ci0jIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCi1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgotICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKLXMvOipcJChzcmNkaXIpOiovOi87Ci1zLzoqXCR7c3JjZGlyfToqLzovOwotcy86KkBzcmNkaXJAOiovOi87Ci1zL15cKFtePV0qPVsJIF0qXCk6Ki9cMS87Ci1zLzoqJC8vOwotcy9eW149XSo9WwkgXSokLy87Ci19JwotZmkKLQogREVGUz0tREhBVkVfQ09ORklHX0gKIAogYWNfbGlib2Jqcz0KIGFjX2x0bGlib2Jqcz0KK1U9CiBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKICAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgotICBhY19pPWBlY2hvICIkYWNfaSIgfAotCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCi0gICMgMi4gQWRkIHRoZW0uCi0gIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCi0gIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCisgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KKyAgYXNfZm5fYXBwZW5kIGFjX2xpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKKyAgYXNfZm5fYXBwZW5kIGFjX2x0bGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCiBkb25lCiBMSUJPQkpTPSRhY19saWJvYmpzCiAKQEAgLTQ5NzgzLDEyICsyOTkzMSwxNSBAQAogCiAKIAotOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorCis6ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKK2FjX3dyaXRlX2ZhaWw9MAogYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKIGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQotY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKICMhICRTSEVMTAogIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgogIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCkBAIC00OTc5OCw4MSArMjk5NDksMjUzIEBACiBkZWJ1Zz1mYWxzZQogYWNfY3NfcmVjaGVjaz1mYWxzZQogYWNfY3Nfc2lsZW50PWZhbHNlCisKIFNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9Ci1fQUNFT0YKK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBzZXQgLW8gcG9zaXgKLWZpCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi0KLSMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX3Vuc2V0PXVuc2V0CisgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGFzX3Vuc2V0PWZhbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKIGZpCiAKIAotIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCi0kYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKIGVsc2UKICAgYXNfZXhwcj1mYWxzZQogZmkKIAotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgoraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgogICBhc19iYXNlbmFtZT1iYXNlbmFtZQogZWxzZQogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAKLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgogIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgogYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKQEAgLTQ5ODgwLDE0OCArMzAyMDMsMTIzIEBACiBhc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCiBhc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKIAotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgIHx8IHsKLSAgIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gcGF0aCBhdCBhbGwKLSAgIyByZWxhdGl2ZSBvciBub3QuCi0gIGNhc2UgJDAgaW4KLSAgICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7Ci0gICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotZG9uZQotCi0gICAgICAgOzsKLSAgZXNhYwotICAjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCi0gICMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgotICBpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCi0gICAgYXNfbXlzZWxmPSQwCi0gIGZpCi0gIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotICBjYXNlICRDT05GSUdfU0hFTEwgaW4KLSAgJycpCi0gICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCi0JIGNhc2UgJGFzX2RpciBpbgotCSAvKikKLQkgICBpZiAoIiRhc19kaXIvJGFzX2Jhc2UiIC1jICcKLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAnKSAyPi9kZXYvbnVsbDsgdGhlbgotCSAgICAgJGFzX3Vuc2V0IEJBU0hfRU5WIHx8IHRlc3QgIiR7QkFTSF9FTlYrc2V0fSIgIT0gc2V0IHx8IHsgQkFTSF9FTlY9OyBleHBvcnQgQkFTSF9FTlY7IH0KLQkgICAgICRhc191bnNldCBFTlYgfHwgdGVzdCAiJHtFTlYrc2V0fSIgIT0gc2V0IHx8IHsgRU5WPTsgZXhwb3J0IEVOVjsgfQotCSAgICAgQ09ORklHX1NIRUxMPSRhc19kaXIvJGFzX2Jhc2UKLQkgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLQkgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkMCIgJHsxKyIkQCJ9Ci0JICAgZmk7OwotCSBlc2FjCi0gICAgICAgZG9uZQotZG9uZQotOzsKLSAgZXNhYwotCi0gICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KLSAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQotICAjIGxpbmUtbnVtYmVyIGxpbmUgYmVmb3JlIGVhY2ggbGluZTsgdGhlIHNlY29uZCAnc2VkJyBkb2VzIHRoZSByZWFsCi0gICMgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaCBsaW5lLW51bWJlciBsaW5lCi0gICMgd2l0aCB0aGUgbnVtYmVyZWQgbGluZSwgYW5kIGFwcGVuZHMgdHJhaWxpbmcgJy0nIGR1cmluZwotICAjIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbCBjYXNlIGF0IGxpbmUgZW5kLgotICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKLSAgIyBzZWNvbmQgJ3NlZCcgc2NyaXB0LiAgQmxhbWUgTGVlIEUuIE1jTWFob24gZm9yIHNlZCdzIHN5bnRheC4gIDotKQotICBzZWQgJz0nIDwkYXNfbXlzZWxmIHwKLSAgICBzZWQgJwotICAgICAgTgotICAgICAgcywkLC0sCi0gICAgICA6IGxvb3AKLSAgICAgIHMsXlwoWyckYXNfY3JfZGlnaXRzJ10qXClcKC4qXClbJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXVwpLFwxXDJcMVwzLAotICAgICAgdCBsb29wCi0gICAgICBzLC0kLCwKLSAgICAgIHMsXlsnJGFzX2NyX2RpZ2l0cyddKlxuLCwKLSAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi0gICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCi0gICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQotICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2libGUgdG8gdGhpcykuCi0gIC4gLi8kYXNfbWUubGluZW5vCi0gICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgotICBleGl0Ci19Ci0KLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCiAgIGFzX2xuX3M9J2NwIC1wJwogZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCiBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCiBlbHNlCiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCiAgIGFzX21rZGlyX3A9ZmFsc2UKIGZpCiAKLWFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAogCiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCiBhc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgpAQCAtNTAwMzAsMzEgKzMwMzI4LDIwIEBACiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgogCiAKLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgotYXNfbmw9JwotJwotSUZTPSIgCSRhc19ubCIKLQotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICi0KIGV4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKIAotIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCi0jIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLiAgTG9nZ2luZyAtLXZlcnNpb24gZXRjLiBpcyBPSy4KLWV4ZWMgNT4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCi0jIyBSdW5uaW5nICRhc19tZS4gIyMKLV9BU0JPWAotfSA+JjUKLWNhdCA+JjUgPDxfQ1NFT0YKLQotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBOZXQtU05NUCAkYXNfbWUgNS40LjQsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgTmV0LVNOTVAgJGFzX21lIDUuNy4zLnJjMywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCiAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUwpAQCAtNTAwNjIsNDUgKzMwMzQ5LDQ3IEBACiAgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKICAgJCAkMCAkQAogCi1fQ1NFT0YKLWVjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1Ci1lY2hvID4mNQorb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKIF9BQ0VPRgogCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgotICBlY2hvICJjb25maWdfZmlsZXM9XCIkYWNfY29uZmlnX2ZpbGVzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgogCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitfQUNFT0YKIAotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgotICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc191c2FnZT0iXAotXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCi1jdXJyZW50IGNvbmZpZ3VyYXRpb24uCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgogCi1Vc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtUQUddLi4uCiAKICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwogICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCiAKIENvbmZpZ3VyYXRpb24gZmlsZXM6CiAkY29uZmlnX2ZpbGVzCkBAIC01MDExMSw4NCArMzA0MDAsOTEgQEAKIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiAkY29uZmlnX2NvbW1hbmRzCiAKLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorUmVwb3J0IGJ1Z3MgdG8gPG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+LiIKKwogX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotTmV0LVNOTVAgY29uZmlnLnN0YXR1cyA1LjQuNAotY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LAotICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKK05ldC1TTk1QIGNvbmZpZy5zdGF0dXMgNS43LjMucmMzCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgsCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCi1Db3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi1zcmNkaXI9JHNyY2RpcgotSU5TVEFMTD0iJElOU1RBTEwiCisKK2FjX3B3ZD0nJGFjX3B3ZCcKK3NyY2Rpcj0nJHNyY2RpcicKK0lOU1RBTEw9JyRJTlNUQUxMJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0Ci0jIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgogYWNfbmVlZF9kZWZhdWx0cz06CiB3aGlsZSB0ZXN0ICQjICE9IDAKIGRvCiAgIGNhc2UgJDEgaW4KLSAgLS0qPSopCi0gICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKLSAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisgIC0tKj0/KikKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKICAgICBhY19zaGlmdD06CiAgICAgOzsKLSAgLSopCisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCiAgICAgYWNfb3B0aW9uPSQxCiAgICAgYWNfb3B0YXJnPSQyCiAgICAgYWNfc2hpZnQ9c2hpZnQKICAgICA7OwotICAqKSAjIFRoaXMgaXMgbm90IGFuIG9wdGlvbiwgc28gdGhlIHVzZXIgaGFzIHByb2JhYmx5IGdpdmVuIGV4cGxpY2l0Ci0gICAgICMgYXJndW1lbnRzLgotICAgICBhY19vcHRpb249JDEKLSAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIGVzYWMKIAogICBjYXNlICRhY19vcHRpb24gaW4KICAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCiAgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQogICAgIGFjX2NzX3JlY2hlY2s9OiA7OwotICAtLXZlcnNpb24gfCAtLXZlcnMqIHwgLVYgKQotICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCAwIDs7Ci0gIC0taGUgfCAtLWgpCi0gICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKLSAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCi0gICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7Ci0gIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQogICAgIGRlYnVnPTogOzsKICAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJGFjX29wdGFyZyIKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCiAgICAgJGFjX3NoaWZ0Ci0gICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQogICAgIGFjX2NzX3NpbGVudD06IDs7CiAKICAgIyBUaGlzIGlzIGFuIGVycm9yLgotICAtKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKIAotICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIiA7OworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OwogCiAgIGVzYWMKICAgc2hpZnQKQEAgLTUwMjAyLDQzICszMDQ5OCwzNDQgQEAKIGZpCiAKIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCi0gIGVjaG8gInJ1bm5pbmcgJFNIRUxMICQwICIgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2Ci0gIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAiXCRAIgogZmkKIAogX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKKyAgJGFzX2VjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIworIyBJTklULUNPTU1BTkRTCisjCisKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK21hY3JvX3ZlcnNpb249J2AkRUNITyAiJG1hY3JvX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiJG1hY3JvX3JldmlzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FTPSdgJEVDSE8gIiRBUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3BpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIiRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiJGhvc3RfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdD0nYCRFQ0hPICIkaG9zdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIiRob3N0X29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIiRidWlsZF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZD0nYCRFQ0hPICIkYnVpbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiJGJ1aWxkX29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICIkU0VEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1hzZWQ9J2AkRUNITyAiJFhzZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICIkR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICIkRUdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRkdSRVA9J2AkRUNITyAiJEZHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIiRMRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICIkTk0iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTE5fUz0nYCRFQ0hPICIkTE5fUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICIkbWF4X2NtZF9sZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIiRhY19vYmpleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249J2AkRUNITyAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICIkQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiJGNvbXBpbGVyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICIkT1RPT0w2NCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiJGxpYmV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICIkd2l0aF9nbnVfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfdmVyc2lvbj0nYCRFQ0hPICIkbmVlZF92ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICIkdmVyc2lvbl90eXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3J1bnBhdGhfdmFyPSdgJEVDSE8gIiRydW5wYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRzaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYm5hbWVfc3BlYz0nYCRFQ0hPICIkbGlibmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICIkbGlicmFyeV9uYW1lc19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NvbmFtZV9zcGVjPSdgJEVDSE8gIiRzb25hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbnN0YWxsX292ZXJyaWRlX21vZGU9J2AkRUNITyAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9jbWRzPSdgJEVDSE8gIiRmaW5pc2hfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfZXZhbD0nYCRFQ0hPICIkZmluaXNoX2V2YWwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW49J2AkRUNITyAiJGVuYWJsZV9kbG9wZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfc3RyaXBsaWI9J2AkRUNITyAiJG9sZF9zdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzdHJpcGxpYj0nYCRFQ0hPICIkc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gQVMgXAorRExMVE9PTCBcCitPQkpEVU1QIFwKK1NIRUxMIFwKK0VDSE8gXAorU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitmaWxlX21hZ2ljX2dsb2IgXAord2FudF9ub2Nhc2VnbG9iIFwKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitubV9maWxlX2xpc3Rfc3BlYyBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKK25lZWRfbG9ja3MgXAorTUFOSUZFU1RfVE9PTCBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZXhjbHVkZV9leHBzeW1zIFwKK2luY2x1ZGVfZXhwc3ltcyBcCitmaWxlX2xpc3Rfc3BlYyBcCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCitsaWJuYW1lX3NwZWMgXAorbGlicmFyeV9uYW1lc19zcGVjIFwKK3NvbmFtZV9zcGVjIFwKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWI7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0bGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJworeHNpX3NoZWxsPSckeHNpX3NoZWxsJworbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJworCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZScKIAogCiAKIAorX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KIGZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cwogZG8KLSAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCi0gICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgotICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKLSAgInNubXBsaWIvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJhcHBzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCIgOzsKLSAgImFnZW50L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYWdlbnQvaGVscGVycy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCIgOzsKLSAgImFnZW50L21pYmdyb3VwL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAibG9jYWwvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKLSAgInRlc3RpbmcvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW4iIDs7Ci0gICJtYW4vTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAibWlicy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKLSAgIm5ldC1zbm1wLWNvbmZpZyIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbiIgOzsKLSAgImRlZmF1bHQiICkgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlZmF1bHQiIDs7Ci0gICJpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIiApIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIgOzsKLSAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgImluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiIDs7CisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OworICAgICJzbm1wbGliL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFwcHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAiYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIiA7OworICAgICJhZ2VudC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kIiA7OworICAgICJhZ2VudC9oZWxwZXJzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFnZW50L21pYmdyb3VwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImxvY2FsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKKyAgICAidGVzdGluZy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluIiA7OworICAgICJtYW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiIDs7CisgICAgIm1pYnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKKyAgICAibmV0LXNubXAtY29uZmlnIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG5ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW4iIDs7CisgICAgIm5ldC1zbm1wLWNyZWF0ZS12My11c2VyIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyOm5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluIiA7OworICAgICJkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXM6ZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbiIgOzsKKyAgICAibG9jYWwvc25tcGNvbmYiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbG9jYWwvc25tcGNvbmYiIDs7CisgICAgImRlZmF1bHQiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdCIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKICAgZXNhYwogZG9uZQogCisKICMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKICMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgogIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQpAQCAtNTAyNTAsODM4ICszMDg0NywxMjMyIEBACiBmaQogCiAjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKLSMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCiAjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiAkZGVidWcgfHwKIHsKLSAgdHJhcCAnZXhpdF9zdGF0dXM9JD87IHJtIC1yZiAkdG1wICYmIGV4aXQgJGV4aXRfc3RhdHVzJyAwCi0gIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKIH0KLQogIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCiAKIHsKLSAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiLi9jb25mc3RhdFhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgotICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtZCAiJHRtcCIKIH0gIHx8CiB7Ci0gIHRtcD0uL2NvbmZzdGF0JCQtJFJBTkRPTQotICAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApCi19IHx8CisgIHRtcD0uL2NvbmYkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKK2FjX3RtcD0kdG1wCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisKK2lmICRBV0sgJ0JFR0lOIHsgZ2V0bGluZSA8Ii9kZXYvbnVsbCIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICBhY19jc19hd2tfZ2V0bGluZT06CisgIGFjX2NzX2F3a19waXBlX2luaXQ9CisgIGFjX2NzX2F3a19yZWFkX2ZpbGU9JworICAgICAgd2hpbGUgKChnZXRsaW5lIGFsaW5lIDwgKEZba2V5XSkpID4gMCkKKwlwcmludChhbGluZSkKKyAgICAgIGNsb3NlKEZba2V5XSknCisgIGFjX2NzX2F3a19waXBlX2Zpbmk9CitlbHNlCisgIGFjX2NzX2F3a19nZXRsaW5lPWZhbHNlCisgIGFjX2NzX2F3a19waXBlX2luaXQ9InByaW50IFwiY2F0IDw8J3wjXyEhXyN8JyAmJlwiIgorICBhY19jc19hd2tfcmVhZF9maWxlPScKKyAgICAgIHByaW50ICJ8I18hIV8jfCIKKyAgICAgIHByaW50ICJjYXQgIiBGW2tleV0gIiAmJiIKKyAgICAgICckYWNfY3NfYXdrX3BpcGVfaW5pdAorICAjIFRoZSBmaW5hbCBgOicgZmluaXNoZXMgdGhlIEFORCBsaXN0LgorICBhY19jc19hd2tfcGlwZV9maW5pPSdFTkQgeyBwcmludCAifCNfISFfI3wiOyBwcmludCAiOiIgfScKK2ZpCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisjIENyZWF0ZSBjb21tYW5kcyB0byBzdWJzdGl0dXRlIGZpbGUgb3V0cHV0IHZhcmlhYmxlcy4KIHsKLSAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH0KLX0KKyAgZWNobyAiY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xIiAmJgorICBlY2hvICdjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmJyAmJgorICBlY2hvICIkYWNfc3Vic3RfZmlsZXMiIHwgc2VkICdzLy4qL0ZbIiYiXT0iJCYiLycgJiYKKyAgZWNobyAiX0FDQVdLIiAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRmaWxlcy5zaCAmJgorLiAuL2NvbmYkJGZpbGVzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK3JtIC1mIGNvbmYkJGZpbGVzLnNoCiAKLV9BQ0VPRgoreworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi0KLSMKLSMgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCi0jCi0KLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgotIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCi1pZiB0ZXN0IC1uICJcJENPTkZJR19GSUxFUyI7IHRoZW4KLSAgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KLSAgc2VkICdzLyxAL0BALzsgcy9ALC9AQC87IHMvLDt0IHRcJC9AO3QgdC87IC9AO3QgdFwkL3MvW1xcXFwmLF0vXFxcXCYvZzsKLSAgIHMvQEAvLEAvOyBzL0BAL0AsLzsgcy9AO3QgdFwkLyw7dCB0LycgPlwkdG1wL3N1YnMuc2VkIDw8XFxDRU9GCi1zLEBTSEVMTEAsJFNIRUxMLDt0IHQKLXMsQFBBVEhfU0VQQVJBVE9SQCwkUEFUSF9TRVBBUkFUT1IsO3QgdAotcyxAUEFDS0FHRV9OQU1FQCwkUEFDS0FHRV9OQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVEFSTkFNRUAsJFBBQ0tBR0VfVEFSTkFNRSw7dCB0Ci1zLEBQQUNLQUdFX1ZFUlNJT05ALCRQQUNLQUdFX1ZFUlNJT04sO3QgdAotcyxAUEFDS0FHRV9TVFJJTkdALCRQQUNLQUdFX1NUUklORyw7dCB0Ci1zLEBQQUNLQUdFX0JVR1JFUE9SVEAsJFBBQ0tBR0VfQlVHUkVQT1JULDt0IHQKLXMsQGV4ZWNfcHJlZml4QCwkZXhlY19wcmVmaXgsO3QgdAotcyxAcHJlZml4QCwkcHJlZml4LDt0IHQKLXMsQHByb2dyYW1fdHJhbnNmb3JtX25hbWVALCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLDt0IHQKLXMsQGJpbmRpckAsJGJpbmRpciw7dCB0Ci1zLEBzYmluZGlyQCwkc2JpbmRpciw7dCB0Ci1zLEBsaWJleGVjZGlyQCwkbGliZXhlY2Rpciw7dCB0Ci1zLEBkYXRhZGlyQCwkZGF0YWRpciw7dCB0Ci1zLEBzeXNjb25mZGlyQCwkc3lzY29uZmRpciw7dCB0Ci1zLEBzaGFyZWRzdGF0ZWRpckAsJHNoYXJlZHN0YXRlZGlyLDt0IHQKLXMsQGxvY2Fsc3RhdGVkaXJALCRsb2NhbHN0YXRlZGlyLDt0IHQKLXMsQGxpYmRpckAsJGxpYmRpciw7dCB0Ci1zLEBpbmNsdWRlZGlyQCwkaW5jbHVkZWRpciw7dCB0Ci1zLEBvbGRpbmNsdWRlZGlyQCwkb2xkaW5jbHVkZWRpciw7dCB0Ci1zLEBpbmZvZGlyQCwkaW5mb2Rpciw7dCB0Ci1zLEBtYW5kaXJALCRtYW5kaXIsO3QgdAotcyxAYnVpbGRfYWxpYXNALCRidWlsZF9hbGlhcyw7dCB0Ci1zLEBob3N0X2FsaWFzQCwkaG9zdF9hbGlhcyw7dCB0Ci1zLEB0YXJnZXRfYWxpYXNALCR0YXJnZXRfYWxpYXMsO3QgdAotcyxAREVGU0AsJERFRlMsO3QgdAotcyxARUNIT19DQCwkRUNIT19DLDt0IHQKLXMsQEVDSE9fTkAsJEVDSE9fTiw7dCB0Ci1zLEBFQ0hPX1RALCRFQ0hPX1QsO3QgdAotcyxATElCU0AsJExJQlMsO3QgdAotcyxAQ09ORklHVVJFX09QVElPTlNALCRDT05GSUdVUkVfT1BUSU9OUyw7dCB0Ci1zLEBMSUJUT09MRkxBR1NALCRMSUJUT09MRkxBR1MsO3QgdAotcyxASU5TVEFMTF9QUkVGSVhALCRJTlNUQUxMX1BSRUZJWCw7dCB0Ci1zLEBTTk1QREAsJFNOTVBELDt0IHQKLXMsQFRSQVBMSUJTQCwkVFJBUExJQlMsO3QgdAotcyxAVVNFVFJBUExJQlNALCRVU0VUUkFQTElCUyw7dCB0Ci1zLEBNQUlOU1VCU0AsJE1BSU5TVUJTLDt0IHQKLXMsQEhBVkVfRE1BTExPQ19IQCwkSEFWRV9ETUFMTE9DX0gsO3QgdAotcyxAaW5zdGFsbHVjZGhlYWRlcnNALCRpbnN0YWxsdWNkaGVhZGVycyw7dCB0Ci1zLEBpbnN0YWxsdWNkbGlic0AsJGluc3RhbGx1Y2RsaWJzLDt0IHQKLXMsQENDQCwkQ0MsO3QgdAotcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKLXMsQExERkxBR1NALCRMREZMQUdTLDt0IHQKLXMsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAotcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0Ci1zLEBFWEVFWFRALCRFWEVFWFQsO3QgdAotcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKLXMsQENQUEAsJENQUCw7dCB0Ci1zLEBMSU5LQ0NALCRMSU5LQ0MsO3QgdAotcyxARUdSRVBALCRFR1JFUCw7dCB0Ci1zLEBidWlsZEAsJGJ1aWxkLDt0IHQKLXMsQGJ1aWxkX2NwdUAsJGJ1aWxkX2NwdSw7dCB0Ci1zLEBidWlsZF92ZW5kb3JALCRidWlsZF92ZW5kb3IsO3QgdAotcyxAYnVpbGRfb3NALCRidWlsZF9vcyw7dCB0Ci1zLEBob3N0QCwkaG9zdCw7dCB0Ci1zLEBob3N0X2NwdUAsJGhvc3RfY3B1LDt0IHQKLXMsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAotcyxAaG9zdF9vc0AsJGhvc3Rfb3MsO3QgdAotcyxAdGFyZ2V0QCwkdGFyZ2V0LDt0IHQKLXMsQHRhcmdldF9jcHVALCR0YXJnZXRfY3B1LDt0IHQKLXMsQHRhcmdldF92ZW5kb3JALCR0YXJnZXRfdmVuZG9yLDt0IHQKLXMsQHRhcmdldF9vc0AsJHRhcmdldF9vcyw7dCB0Ci1zLEBTRURALCRTRUQsO3QgdAotcyxATE5fU0AsJExOX1MsO3QgdAotcyxARUNIT0AsJEVDSE8sO3QgdAotcyxAQVJALCRBUiw7dCB0Ci1zLEBhY19jdF9BUkAsJGFjX2N0X0FSLDt0IHQKLXMsQFJBTkxJQkAsJFJBTkxJQiw7dCB0Ci1zLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAotcyxAU1RSSVBALCRTVFJJUCw7dCB0Ci1zLEBhY19jdF9TVFJJUEAsJGFjX2N0X1NUUklQLDt0IHQKLXMsQERTWU1VVElMQCwkRFNZTVVUSUwsO3QgdAotcyxAYWNfY3RfRFNZTVVUSUxALCRhY19jdF9EU1lNVVRJTCw7dCB0Ci1zLEBOTUVESVRALCROTUVESVQsO3QgdAotcyxAYWNfY3RfTk1FRElUQCwkYWNfY3RfTk1FRElULDt0IHQKLXMsQERMTFRPT0xALCRETExUT09MLDt0IHQKLXMsQGFjX2N0X0RMTFRPT0xALCRhY19jdF9ETExUT09MLDt0IHQKLXMsQEFTQCwkQVMsO3QgdAotcyxAYWNfY3RfQVNALCRhY19jdF9BUyw7dCB0Ci1zLEBPQkpEVU1QQCwkT0JKRFVNUCw7dCB0Ci1zLEBhY19jdF9PQkpEVU1QQCwkYWNfY3RfT0JKRFVNUCw7dCB0Ci1zLEBDWFhALCRDWFgsO3QgdAotcyxAQ1hYRkxBR1NALCRDWFhGTEFHUyw7dCB0Ci1zLEBhY19jdF9DWFhALCRhY19jdF9DWFgsO3QgdAotcyxAQ1hYQ1BQQCwkQ1hYQ1BQLDt0IHQKLXMsQEY3N0AsJEY3Nyw7dCB0Ci1zLEBGRkxBR1NALCRGRkxBR1MsO3QgdAotcyxAYWNfY3RfRjc3QCwkYWNfY3RfRjc3LDt0IHQKLXMsQExJQlRPT0xALCRMSUJUT09MLDt0IHQKLXMsQExJQlRPT0xfREVQU0AsJExJQlRPT0xfREVQUyw7dCB0Ci1zLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAotcyxASU5TVEFMTF9TQ1JJUFRALCRJTlNUQUxMX1NDUklQVCw7dCB0Ci1zLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAotcyxAU0VUX01BS0VALCRTRVRfTUFLRSw7dCB0Ci1zLEBQU1BST0dALCRQU1BST0csO3QgdAotcyxAUEVSTFBST0dALCRQRVJMUFJPRyw7dCB0Ci1zLEBQWVRIT05QUk9HQCwkUFlUSE9OUFJPRyw7dCB0Ci1zLEBXSE9BTUlALCRXSE9BTUksO3QgdAotcyxARklOREAsJEZJTkQsO3QgdAotcyxAQVVUT0NPTkZALCRBVVRPQ09ORiw7dCB0Ci1zLEBBVVRPSEVBREVSQCwkQVVUT0hFQURFUiw7dCB0Ci1zLEBVTkFNRVBST0dALCRVTkFNRVBST0csO3QgdAotcyxAVkVSU0lPTkAsJFZFUlNJT04sO3QgdAotcyxAUkVMRUFTRVZFUlNJT05ALCRSRUxFQVNFVkVSU0lPTiw7dCB0Ci1zLEBERVZGTEFHU0AsJERFVkZMQUdTLDt0IHQKLXMsQFRPUF9JTkNMVURFU0AsJFRPUF9JTkNMVURFUyw7dCB0Ci1zLEBTTk1QTElCX0lOQ0xVREVTQCwkU05NUExJQl9JTkNMVURFUyw7dCB0Ci1zLEBBR0VOVF9JTkNMVURFU0AsJEFHRU5UX0lOQ0xVREVTLDt0IHQKLXMsQEhFTFBFUl9JTkNMVURFU0AsJEhFTFBFUl9JTkNMVURFUyw7dCB0Ci1zLEBNSUJHUk9VUF9JTkNMVURFU0AsJE1JQkdST1VQX0lOQ0xVREVTLDt0IHQKLXMsQEdOVV92cGF0aEAsJEdOVV92cGF0aCw7dCB0Ci1zLEBOT05fR05VX1ZQQVRIQCwkTk9OX0dOVV9WUEFUSCw7dCB0Ci1zLEBDQ1BBVEhALCRDQ1BBVEgsO3QgdAotcyxARVhUUkFDUFBGTEFHU0AsJEVYVFJBQ1BQRkxBR1MsO3QgdAotcyxAU05NUExJQlBBVEhALCRTTk1QTElCUEFUSCw7dCB0Ci1zLEBTTk1QU0hBUkVQQVRIQCwkU05NUFNIQVJFUEFUSCw7dCB0Ci1zLEBORVRTTk1QX0RFRkFVTFRfTUlCRElSU0AsJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTLDt0IHQKLXMsQFNOTVBDT05GUEFUSEAsJFNOTVBDT05GUEFUSCw7dCB0Ci1zLEBvdGhlcl9zcmNfbGlzdEAsJG90aGVyX3NyY19saXN0LDt0IHQKLXMsQG90aGVyX29ianNfbGlzdEAsJG90aGVyX29ianNfbGlzdCw7dCB0Ci1zLEBvdGhlcl9sb2Jqc19saXN0QCwkb3RoZXJfbG9ianNfbGlzdCw7dCB0Ci1zLEBvdGhlcl9hZ2VudG9ianNALCRvdGhlcl9hZ2VudG9ianMsO3QgdAotcyxAb3RoZXJfbGFnZW50b2Jqc0AsJG90aGVyX2xhZ2VudG9ianMsO3QgdAotcyxAb3RoZXJfdHJhcGRfb2JqZWN0c0AsJG90aGVyX3RyYXBkX29iamVjdHMsO3QgdAotcyxAdHJhbnNwb3J0X2hkcl9saXN0QCwkdHJhbnNwb3J0X2hkcl9saXN0LDt0IHQKLXMsQHRyYW5zcG9ydF9zcmNfbGlzdEAsJHRyYW5zcG9ydF9zcmNfbGlzdCw7dCB0Ci1zLEB0cmFuc3BvcnRfb2JqX2xpc3RALCR0cmFuc3BvcnRfb2JqX2xpc3QsO3QgdAotcyxAdHJhbnNwb3J0X2xvYmpfbGlzdEAsJHRyYW5zcG9ydF9sb2JqX2xpc3QsO3QgdAotcyxAc2VjdXJpdHlfc3JjX2xpc3RALCRzZWN1cml0eV9zcmNfbGlzdCw7dCB0Ci1zLEBzZWN1cml0eV9oZHJfbGlzdEAsJHNlY3VyaXR5X2hkcl9saXN0LDt0IHQKLXMsQHNlY3VyaXR5X29ial9saXN0QCwkc2VjdXJpdHlfb2JqX2xpc3QsO3QgdAotcyxAc2VjdXJpdHlfbG9ial9saXN0QCwkc2VjdXJpdHlfbG9ial9saXN0LDt0IHQKLXMsQGtyYjVfY29uZmlnQCwka3JiNV9jb25maWcsO3QgdAotcyxAZGVmYXVsdF9taWJzX2luc3RhbGxALCRkZWZhdWx0X21pYnNfaW5zdGFsbCw7dCB0Ci1zLEBkbGxjbGVhbnNALCRkbGxjbGVhbnMsO3QgdAotcyxARU5WX1NFUEFSQVRPUkAsJEVOVl9TRVBBUkFUT1IsO3QgdAotcyxATkVUU05NUF9ERUZBVUxUX01JQlNALCRORVRTTk1QX0RFRkFVTFRfTUlCUyw7dCB0Ci1zLEBFTUJFRFBFUkxJTlNUQUxMQCwkRU1CRURQRVJMSU5TVEFMTCw7dCB0Ci1zLEBFTUJFRFBFUkxVTklOU1RBTExALCRFTUJFRFBFUkxVTklOU1RBTEwsO3QgdAotcyxAUEVSTExET1BUU19GT1JfTElCU0AsJFBFUkxMRE9QVFNfRk9SX0xJQlMsO3QgdAotcyxAUEVSTExET1BUU19GT1JfQVBQU0AsJFBFUkxMRE9QVFNfRk9SX0FQUFMsO3QgdAotcyxAUEVSTFRBUkdTQCwkUEVSTFRBUkdTLDt0IHQKLXMsQFBFUkxJTlNUQUxMVEFSR1NALCRQRVJMSU5TVEFMTFRBUkdTLDt0IHQKLXMsQFBFUkxVTklOU1RBTExUQVJHU0AsJFBFUkxVTklOU1RBTExUQVJHUyw7dCB0Ci1zLEBQRVJMQVJHU0AsJFBFUkxBUkdTLDt0IHQKLXMsQFBZVEhPTlRBUkdTQCwkUFlUSE9OVEFSR1MsO3QgdAotcyxAUFlUSE9OSU5TVEFMTFRBUkdTQCwkUFlUSE9OSU5TVEFMTFRBUkdTLDt0IHQKLXMsQFBZVEhPTlVOSU5TVEFMTFRBUkdTQCwkUFlUSE9OVU5JTlNUQUxMVEFSR1MsO3QgdAotcyxAUFlUSE9OQ0xFQU5UQVJHU0AsJFBZVEhPTkNMRUFOVEFSR1MsO3QgdAotcyxAUFlUSE9OQVJHU0AsJFBZVEhPTkFSR1MsO3QgdAotcyxATFBTVEFUX1BBVEhALCRMUFNUQVRfUEFUSCw7dCB0Ci1zLEBMTkVUU05NUExJQlNALCRMTkVUU05NUExJQlMsO3QgdAotcyxATEFHRU5UTElCU0AsJExBR0VOVExJQlMsO3QgdAotcyxAUFNDTURALCRQU0NNRCw7dCB0Ci1zLEBBTExPQ0FALCRBTExPQ0EsO3QgdAotcyxATElCT0JKU0AsJExJQk9CSlMsO3QgdAotcyxATE1JQkxJQlNALCRMTUlCTElCUyw7dCB0Ci1zLEBBR0VOVExJQlNALCRBR0VOVExJQlMsO3QgdAotcyxAT1RIRVJBR0VOVExJQk9CSlNALCRPVEhFUkFHRU5UTElCT0JKUyw7dCB0Ci1zLEBPVEhFUkFHRU5UTElCTE9CSlNALCRPVEhFUkFHRU5UTElCTE9CSlMsO3QgdAotcyxAUEVSU0lTVEVOVF9ESVJFQ1RPUllALCRQRVJTSVNURU5UX0RJUkVDVE9SWSw7dCB0Ci1zLEBVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWUAsJFVDRFBFUlNJU1RFTlRfRElSRUNUT1JZLDt0IHQKLXMsQENPUFlfUEVSU0lTVEVOVF9GSUxFU0AsJENPUFlfUEVSU0lTVEVOVF9GSUxFUyw7dCB0Ci1zLEBETExJQlNALCRETExJQlMsO3QgdAotcyxATFRMSUJPQkpTQCwkTFRMSUJPQkpTLDt0IHQKLS9ATU9EVUxFX0xJU1RAL3IgJE1PRFVMRV9MSVNUCi1zLEBNT0RVTEVfTElTVEAsLDt0IHQKLS9AbW9kdWxlX2xpc3RfY0AvciAkbW9kdWxlX2xpc3RfYwotcyxAbW9kdWxlX2xpc3RfY0AsLDt0IHQKLS9AbW9kdWxlX2xpc3Rfb0AvciAkbW9kdWxlX2xpc3RfbwotcyxAbW9kdWxlX2xpc3Rfb0AsLDt0IHQKLS9AbW9kdWxlX2xpc3RfbG9AL3IgJG1vZHVsZV9saXN0X2xvCi1zLEBtb2R1bGVfbGlzdF9sb0AsLDt0IHQKLS9AbWliX21vZHVsZV9saXN0X2NAL3IgJG1pYl9tb2R1bGVfbGlzdF9jCi1zLEBtaWJfbW9kdWxlX2xpc3RfY0AsLDt0IHQKLS9AbWliX21vZHVsZV9saXN0X29AL3IgJG1pYl9tb2R1bGVfbGlzdF9vCi1zLEBtaWJfbW9kdWxlX2xpc3Rfb0AsLDt0IHQKLS9AbWliX21vZHVsZV9saXN0X2xvQC9yICRtaWJfbW9kdWxlX2xpc3RfbG8KLXMsQG1pYl9tb2R1bGVfbGlzdF9sb0AsLDt0IHQKLS9AYWdlbnRfbW9kdWxlX2xpc3RfY0AvciAkYWdlbnRfbW9kdWxlX2xpc3RfYwotcyxAYWdlbnRfbW9kdWxlX2xpc3RfY0AsLDt0IHQKLS9AYWdlbnRfbW9kdWxlX2xpc3Rfb0AvciAkYWdlbnRfbW9kdWxlX2xpc3RfbwotcyxAYWdlbnRfbW9kdWxlX2xpc3Rfb0AsLDt0IHQKLS9AYWdlbnRfbW9kdWxlX2xpc3RfbG9AL3IgJGFnZW50X21vZHVsZV9saXN0X2xvCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9sb0AsLDt0IHQKLS9AbWliZ3JvdXBfbGlzdF9vQC9yICRtaWJncm91cF9saXN0X28KLXMsQG1pYmdyb3VwX2xpc3Rfb0AsLDt0IHQKLS9AbWliZ3JvdXBfbGlzdF9sb0AvciAkbWliZ3JvdXBfbGlzdF9sbwotcyxAbWliZ3JvdXBfbGlzdF9sb0AsLDt0IHQKLS9AYWdlbnRncm91cF9saXN0X29AL3IgJGFnZW50Z3JvdXBfbGlzdF9vCi1zLEBhZ2VudGdyb3VwX2xpc3Rfb0AsLDt0IHQKLS9AYWdlbnRncm91cF9saXN0X2xvQC9yICRhZ2VudGdyb3VwX2xpc3RfbG8KLXMsQGFnZW50Z3JvdXBfbGlzdF9sb0AsLDt0IHQKLS9AYWdlbnRfbW9kdWxlX2xpc3RAL3IgJGFnZW50X21vZHVsZV9saXN0Ci1zLEBhZ2VudF9tb2R1bGVfbGlzdEAsLDt0IHQKLS9AbW9kdWxlX3J1bGVzQC9yICRtb2R1bGVfcnVsZXMKLXMsQG1vZHVsZV9ydWxlc0AsLDt0IHQKLS9AbW9kdWxlX2xpc3RfZGVwc0AvciAkbW9kdWxlX2xpc3RfZGVwcwotcyxAbW9kdWxlX2xpc3RfZGVwc0AsLDt0IHQKLS9AbWliX21vZHVsZV9saXN0X2RlcHNAL3IgJG1pYl9tb2R1bGVfbGlzdF9kZXBzCi1zLEBtaWJfbW9kdWxlX2xpc3RfZGVwc0AsLDt0IHQKLS9AYWdlbnRfbW9kdWxlX2xpc3RfZGVwc0AvciAkYWdlbnRfbW9kdWxlX2xpc3RfZGVwcwotcyxAYWdlbnRfbW9kdWxlX2xpc3RfZGVwc0AsLDt0IHQKLUNFT0YKLQotX0FDRU9GCi0KLSAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0gICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCi0gICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgotICBhY19tYXhfc2VkX2xpbmVzPTQ4Ci0gIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgotICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfZW5kPSRhY19tYXhfc2VkX2xpbmVzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfbW9yZV9saW5lcz06Ci0gIGFjX3NlZF9jbWRzPQotICB3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KLSAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KLSAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGVsc2UKLSAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKLSAgICBmaQotICAgIGlmIHRlc3QgISAtcyAkdG1wL3N1YnMuZnJhZzsgdGhlbgotICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQotICAgIGVsc2UKLSAgICAgICMgVGhlIHB1cnBvc2Ugb2YgdGhlIGxhYmVsIGFuZCBvZiB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbiBpcyB0bwotICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQotICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgotICAgICAgIyBUaGVzZSBhcmUgdGhlIHR3byBleHRyYSBzZWQgY29tbWFuZHMgbWVudGlvbmVkIGFib3ZlLgotICAgICAgKGVjaG8gJzp0Ci0gIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCi0gICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCi0JYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKLSAgICAgIGVsc2UKLQlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZmkKLSAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCi0gICAgICBhY19iZWc9JGFjX2VuZAotICAgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9saW5lc2AKLSAgICBmaQotICBkb25lCi0gIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLSAgICBhY19zZWRfY21kcz1jYXQKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCiAgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKyAgXCRhY19jc19hd2tfcGlwZV9pbml0Cit9Cit7CisgIGxpbmUgPSAkIDAKKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisgIHN1YnN0ZWQgPSAwCisgIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworICAgIGtleSA9IGZpZWxkW2ldCisgICAga2V5bGVuID0gbGVuZ3RoKGtleSkKKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworICAgICAgdmFsdWUgPSBTW2tleV0KKyAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisgICAgICBzdWJzdGVkID0gMQorICAgIH0gZWxzZQorICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKyAgfQorICBpZiAobmZpZWxkcyA9PSAzICYmICFzdWJzdGVkKSB7CisgICAga2V5ID0gZmllbGRbMl0KKyAgICBpZiAoRltrZXldICE9ICIiICYmIGxpbmUgfiAvXlsJIF0qQC4qQFsJIF0qJC8pIHsKKyAgICAgIFwkYWNfY3NfYXdrX3JlYWRfZmlsZQorICAgICAgbmV4dAorICAgIH0KKyAgfQorICBwcmludCBsaW5lCit9CitcJGFjX2NzX2F3a19waXBlX2ZpbmkKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKIAorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4gewogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLWZvciBhY19maWxlIGluIDogJENPTkZJR19GSUxFUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KLQljYXQgPiR0bXAvc3RkaW4KLQlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKICAgZXNhYwogCi0gICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCiAgIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQotZmkKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CiAKIGNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KICAgICBhY19zcmNkaXI9LgotICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCi0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCi0gICAgZWxzZQotICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKLSAgICBmaSA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgogICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OwogZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAogCi0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCi1jYXNlIGBwd2RgIGluCi0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSopCi0gIGNhc2UgIiRhY19kaXIiIGluCi0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSopCi0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgotICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY19zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY190b3Bfc3JjZGlyIGluCi0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwogCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkYpCisgICMKKyAgIyBDT05GSUdfRklMRQorICAjCiAKICAgY2FzZSAkSU5TVEFMTCBpbgogICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7Ci0gICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OwogICBlc2FjCi0KLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgcm0gLWYgIiRhY19maWxlIgotICBmaQotICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAotICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgotICAgIGNvbmZpZ3VyZV9pbnB1dD0KLSAgZWxzZQotICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAiCi0gIGZpCi0gIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKLQkJCQkgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCi0KLSAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKLSAgIyBzcmMgdHJlZS4KLSAgYWNfZmlsZV9pbnB1dHM9YElGUz06Ci0gICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCi0gICAgICBjYXNlICRmIGluCi0gICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKLSAgICAgIFtcXC8kXSopCi0JICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCi0JIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBlY2hvICIkZiI7OwotICAgICAgKikgIyBSZWxhdGl2ZQotCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KLQkgICAjIEJ1aWxkIHRyZWUKLQkgICBlY2hvICIkZiIKLQkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgotCSAgICMgU291cmNlIHRyZWUKLQkgICBlY2hvICIkc3JjZGlyLyRmIgotCSBlbHNlCi0JICAgIyAvZGV2L251bGwgdHJlZQotCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JIGZpOzsKLSAgICAgIGVzYWMKLSAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLSAgc2VkICIkYWNfdnBzdWIKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgorIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCithY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KK2FjX3NlZF9kYXRhcm9vdD0nCisvZGF0YXJvb3RkaXIvIHsKKyAgcAorICBxCit9CisvQGRhdGFkaXJAL3AKKy9AZG9jZGlyQC9wCisvQGluZm9kaXJAL3AKKy9AbG9jYWxlZGlyQC9wCisvQG1hbmRpckAvcCcKK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKypkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKKypAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKyAgcyZAZGF0YWRpckAmJGRhdGFkaXImZworICBzJkBkb2NkaXJAJiRkb2NkaXImZworICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCisgIHMmQG1hbmRpckAmJG1hbmRpciZnCisgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7Citlc2FjCitfQUNFT0YKKworIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCisjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/CitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCiAkZXh0cmFzdWIKIF9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiA6dAogL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgotcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKLXMsQHNyY2RpckAsJGFjX3NyY2Rpciw7dCB0Ci1zLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0Ci1zLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0Ci1zLEBhYnNfdG9wX3NyY2RpckAsJGFjX2Fic190b3Bfc3JjZGlyLDt0IHQKLXMsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAotcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKLXMsQHRvcF9idWlsZGRpckAsJGFjX3RvcF9idWlsZGRpciw7dCB0Ci1zLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0Ci1zLEBJTlNUQUxMQCwkYWNfSU5TVEFMTCw7dCB0Ci0iICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9zdGRpbgotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgbXYgJHRtcC9vdXQgJGFjX2ZpbGUKLSAgZWxzZQotICAgIGNhdCAkdG1wL291dAotICAgIHJtIC1mICR0bXAvb3V0Ci0gIGZpCitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CitzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CitzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CitzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CitzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKKyRhY19kYXRhcm9vdGRpcl9oYWNrCisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfAoraWYgJGFjX2NzX2F3a19nZXRsaW5lOyB0aGVuCisgICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siCitlbHNlCisgICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siIHwgJFNIRUxMCitmaSBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKIAotICAjIFJ1biB0aGUgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLgordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAorICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9CisKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICBuZXQtc25tcC1jb25maWcgKSBjaG1vZCAreCBuZXQtc25tcC1jb25maWcgOzsKLSAgZXNhYwotZG9uZQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLQotIwotIyBDT05GSUdfSEVBREVSIHNlY3Rpb24uCi0jCi0KLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jCi0jIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCi1hY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKLWFjX2RCPSdbCSBdLiokLFwxI1wyJwotYWNfZEM9JyAnCi1hY19kRD0nLDt0JwotIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KLWFjX3VBPSdzLF5cKFsJIF0qXCkjXChbCSBdKlwpdW5kZWZcKFsJIF1bCSBdKlwpJwotYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKLWFjX3VDPScgJwotYWNfdUQ9Jyw7dCcKLQotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0hFQURFUlM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCi0JY2F0ID4kdG1wL3N0ZGluCi0JYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKLSAgZXNhYwotCi0gIHRlc3QgeCIkYWNfZmlsZSIgIT0geC0gJiYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JICMgRG8gcXVvdGUgJGYsIHRvIHByZXZlbnQgRE9TIHBhdGhzIGZyb20gYmVpbmcgSUZTJ2QuCi0JIGVjaG8gIiRmIjs7Ci0gICAgICAqKSAjIFJlbGF0aXZlCi0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotCSAgICMgQnVpbGQgdHJlZQotCSAgIGVjaG8gIiRmIgotCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0JICAgIyBTb3VyY2UgdHJlZQotCSAgIGVjaG8gIiRzcmNkaXIvJGYiCi0JIGVsc2UKLQkgICAjIC9kZXYvbnVsbCB0cmVlCi0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZmk7OwotICAgICAgZXNhYwotICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgotICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgotCi1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIHR3byBzZWQgc2NyaXB0cywgYGNvbmZ0ZXN0LmRlZmluZXMnIGFuZAotIyBgY29uZnRlc3QudW5kZWZzJywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCi0jIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguICBUaGUgZmlyc3QgaGFuZGxlcyBgI2RlZmluZScKLSMgdGVtcGxhdGVzLCBhbmQgdGhlIHNlY29uZCBgI3VuZGVmJyB0ZW1wbGF0ZXMuCi0jIEFuZCBmaXJzdDogUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluCi0jIGNvbmZpZy5zdGF0dXMuICBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudAotIyBpbiBjb25maWcuc3RhdHVzLgotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC51bmRlZnMKLSMgVXNpbmcgYSBoZXJlIGRvY3VtZW50IGluc3RlYWQgb2YgYSBzdHJpbmcgcmVkdWNlcyB0aGUgcXVvdGluZyBuaWdodG1hcmUuCi0jIFB1dHRpbmcgY29tbWVudHMgaW4gc2VkIHNjcmlwdHMgaXMgbm90IHBvcnRhYmxlLgotIwotIyBgZW5kJyBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgdGhlIHNlY29uZCBtYWluIHNlZCBjb21tYW5kIChtZWFudCBmb3IKLSMgMC1hcnkgQ1BQIG1hY3JvcykgYXBwbGllcyB0byBuLWFyeSBtYWNybyBkZWZpbml0aW9ucy4KLSMgU2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIGZvciBgY2xlYXInLgotY2F0ID5jb25mZGVmMnNlZC5zZWQgPDxcX0FDRU9GCi1zL1tcXCYsXS9cXCYvZwotcyxbXFwkYF0sXFwmLGcKLXQgY2xlYXIKLTogY2xlYXIKLXMsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qXClcKChbXildKilcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCi10IGVuZAotcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKLTogZW5kCi1fQUNFT0YKLSMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCi0jIHRoZSBzYW1lICNkZWZpbmVzLCB3aGljaCBpcyB1c2VsZXNzLiAgTmV2ZXJ0aGVsZXNzLCB3ZSBtYXkgbm90IHdhbnQgdG8KLSMgc29ydCB0aGVtLCBzaW5jZSB3ZSB3YW50IHRoZSAqbGFzdCogQUMtREVGSU5FIHRvIGJlIGhvbm9yZWQuCi11bmlxIGNvbmZkZWZzLmggfCBzZWQgLW4gLWYgY29uZmRlZjJzZWQuc2VkID5jb25mdGVzdC5kZWZpbmVzCi1zZWQgJ3MvYWNfZC9hY191L2cnIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnVuZGVmcwotcm0gLWYgY29uZmRlZjJzZWQuc2VkCi0KLSMgVGhpcyBzZWQgY29tbWFuZCByZXBsYWNlcyAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgotcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKLV9BQ0VPRgotCi0jIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LmRlZmluZXMgPi9kZXYvbnVsbAotZG8KLSAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjZGVmaW5lJyBsaW5lcy4KLSAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LmRlZmluZXMgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICdDRU9GCi0gIHNlZCAtZiAkdG1wL2RlZmluZXMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLSAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCi1kb25lCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzCi1lY2hvICcgIGZpICMgZ3JlcCcgPj4kQ09ORklHX1NUQVRVUwotZWNobyA+PiRDT05GSUdfU1RBVFVTCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QudW5kZWZzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCi0jIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCi1lY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI3VuZGVmIHRlbXBsYXRlcycgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LnVuZGVmcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC91bmRlZnMuc2VkLgotICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCi0gIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnVuZGVmcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvdW5kZWZzLnNlZCAkdG1wL2luID4kdG1wL291dAotICBybSAtZiAkdG1wL2luCi0gIG12ICR0bXAvb3V0ICR0bXAvaW4KLScgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QudW5kZWZzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LnVuZGVmcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnVuZGVmcwotZG9uZQotcm0gLWYgY29uZnRlc3QudW5kZWZzCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAotICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgotICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKLSAgZWxzZQotICAgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBmaQotICBjYXQgJHRtcC9pbiA+PiR0bXAvY29uZmlnLmgKLSAgcm0gLWYgJHRtcC9pbgorICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgOzsKKyAgOkgpCisgICMKKyAgIyBDT05GSUdfSEVBREVSCisgICMKICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIGlmIGRpZmYgJGFjX2ZpbGUgJHRtcC9jb25maWcuaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Ci1lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQogICAgIGVsc2UKLSAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgIiRhY19kaXIiCi0gIGVsc2UKLSAgICBhc19kaXI9IiRhY19kaXIiCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgZG9uZQotICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCi0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Ci0KLSAgICAgIHJtIC1mICRhY19maWxlCi0gICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICAgZmkKICAgZWxzZQotICAgIGNhdCAkdG1wL2NvbmZpZy5oCi0gICAgcm0gLWYgJHRtcC9jb25maWcuaAorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CiAgIGZpCi1kb25lCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIDs7CiAKKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisgOzsKKyAgZXNhYworCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgImxpYnRvb2wiOkMpCisKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogIwotIyBDT05GSUdfQ09NTUFORFMgc2VjdGlvbi4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICAgICAgICAgICAgICAgIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CiAjCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfQ09NTUFORFM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICBhY19kZXN0PWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYAotICBhY19zb3VyY2U9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19kZXN0IikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2Rlc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZGVzdCIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KIAotICBhY19idWlsZGRpcj0uCiAKLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAotICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCi1lbHNlCi0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KKyMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorYXZhaWxhYmxlX3RhZ3M9IiIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBBc3NlbWJsZXIgcHJvZ3JhbS4KK0FTPSRsdF9BUworCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXMuCitFQ0hPPSRsdF9FQ0hPCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0kbHRfR1JFUAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorRkdSRVA9JGx0X0ZHUkVQCisKKyMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCitOTT0kbHRfTk0KKworIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRtYXhfY21kX2xlbgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0kYWNfb2JqZXh0CisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSRleGVleHQKKworIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgorbHRfdW5zZXQ9JGx0X3Vuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSRsdF9sdF9TUDJOTAorCisjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCitOTDJTUD0kbHRfbHRfTkwyU1AKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKworIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCit3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorCisjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKKworIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgorbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5CisjIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCitwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorZnVuY19kaXJuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCitmdW5jX2Jhc2VuYW1lICgpXAore1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCitcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCitmdW5jX3N0cmlwbmFtZSAoKVwKK3tcCitcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCitcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCit7XAorXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorZnVuY19sbzJvICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKK2Z1bmNfeGZvcm0gKClcCit7XAorICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorZnVuY19hcml0aCAoKVwKK3tcCisgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorZnVuY19sZW4gKClcCit7XAorICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCiBmaQogCi1jYXNlICRzcmNkaXIgaW4KLSAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgotICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OwotICAqKSAjIFJlbGF0aXZlIHBhdGguCi0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7Ci1lc2FjCi0KLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorZnVuY19hcHBlbmQgKClcCit7XAorICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKIAogCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZGVzdCBjb21tYW5kcyIgPiY1Ci1lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZGVzdCBjb21tYW5kcyIgPiY2O30KLSAgY2FzZSAkYWNfZGVzdCBpbgotICAgIGRlZmF1bHQgKSBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWggOzsKKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKK3tcCitcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZWxzZQorICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2ZpCisKK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorZmkKKworCisgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKKworIDs7CisgICAgIm5ldC1zbm1wLWNvbmZpZyI6RikgY2htb2QgK3ggbmV0LXNubXAtY29uZmlnIDs7CisgICAgIm5ldC1zbm1wLWNyZWF0ZS12My11c2VyIjpGKSBjaG1vZCAreCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciA7OworICAgICJkZWZhdWx0IjpDKSBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWggOzsKKwogICBlc2FjCi1kb25lCi1fQUNFT0YKK2RvbmUgIyBmb3IgYWNfdGFnCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgogCi17IChleGl0IDApOyBleGl0IDA7IH0KK2FzX2ZuX2V4aXQgMAogX0FDRU9GCi1jaG1vZCAreCAkQ09ORklHX1NUQVRVUwogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKIAordGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKIAogIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgogIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCkBAIC01MTEwMSw3ICszMjA5MiwxMSBAQAogICBleGVjIDU+PmNvbmZpZy5sb2cKICAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKICAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCi0gICRhY19jc19zdWNjZXNzIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KIGZpCiAKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5N2ZlODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxMzIgQEAKKyMgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisjIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisjIHRoYXQgbWF5IGFwcGx5OgorIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgqSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorIworCisjCisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisjCitBQ19JTklUKFtOZXQtU05NUF0sIFs1LjcuMy5yYzNdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCitBQ19QUkVSRVEoWzIuNjNdKQorQUNfQ09ORklHX1NSQ0RJUihbYWdlbnQvc25tcGQuY10pCitBQ19SRVZJU0lPTihbJFJldmlzaW9uJF0pCisKK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKK0FDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCkKKworQUNfTVNHX0NBQ0hFX0lOSVQoKQorCisjCisjIHNhdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMKKyMKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TLCIkYWNfY29uZmlndXJlX2FyZ3MiLAorICBbY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWVkXSkKK0NPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgorQUNfU1VCU1QoQ09ORklHVVJFX09QVElPTlMpCisKKyMjCisjIyBSZWNvbW1lbmRlZCBzdHJ1Y3R1cmU6CisjIworIyAgICAgaW5mb3JtYXRpb24gb24gdGhlIHBhY2thZ2UKKyMgICAgIGNoZWNrcyBmb3IgcHJvZ3JhbXMKKyMgICAgIGNoZWNrcyBmb3IgbGlicmFyaWVzCisjICAgICBjaGVja3MgZm9yIGhlYWRlciBmaWxlcworIyAgICAgY2hlY2tzIGZvciB0eXBlcworIyAgICAgY2hlY2tzIGZvciBzdHJ1Y3R1cmVzCisjICAgICBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworIyAgICAgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworIyAgICAgY2hlY2tzIGZvciBzeXN0ZW0gc2VydmljZXMKKworbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGVdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRoc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyc10pCitBQ19DQUNIRV9TQVZFCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYl0pCitBQ19DQUNIRV9TQVZFCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbGliczFdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnRdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMl0pCitBQ19DQUNIRV9TQVZFCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbl0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzJdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXNdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzXSkKK0FDX0NBQ0hFX1NBVkUKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnNdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNF0pCitBQ19DQUNIRV9TQVZFCisKKyMKKyMgZGVmaW5lIHRoZSBhZ2VudCBsaWJyYXJpZXMgdmFyaWFibGVzCisjCitBQ19TVUJTVChMTUlCTElCUykKK0FDX1NVQlNUKEFHRU5UTElCUykKK0FDX1NVQlNUKE9USEVSQUdFTlRMSUJPQkpTKQorQUNfU1VCU1QoT1RIRVJBR0VOVExJQkxPQkpTKQorQUNfU1VCU1QoT1RIRVJBR0VOVExJQkxGVFMpCisKK0FDX1NVQlNUKERMTElCUykKKworQUNfU1VCU1QoUEFSVElBTFRBUkdFVEZMQUdTKQorQUNfU1VCU1QoYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFKQorCitBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCitBQ19DT05GSUdfRklMRVMoW3NubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFthcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2FnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2xvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCitBQ19DT05GSUdfRklMRVMoW3Rlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW5dKQorQUNfQ09ORklHX0ZJTEVTKFttYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCitBQ19DT05GSUdfRklMRVMoW21pYnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1pYnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQorQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluXSwKKwkJW2NobW9kICt4IG5ldC1zbm1wLWNvbmZpZ10pCitBQ19DT05GSUdfRklMRVMoW25ldC1zbm1wLWNyZWF0ZS12My11c2VyOm5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluXSwKKwkJW2NobW9kICt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyXSkKK0FDX0NPTkZJR19GSUxFUyhbZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlczpkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluXSkKK0FDX0NPTkZJR19GSUxFUyhbbG9jYWwvc25tcGNvbmZdKQorCitBQ19DT05GSUdfQ09NTUFORFMoW2RlZmF1bHRdLCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWgpCisKKyMKKyMgcHJvdGVjdCBQQUNLQUdFXyogdmFyaWFibGVzCisjCitBSF9WRVJCQVRJTShbUEFDS0FHRV9CVUdSRVBPUlRdLFsvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNpZm5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorI2VuZGlmXSkKK0FIX1ZFUkJBVElNKFtQQUNLQUdFX05BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfTkFNRQorI3VuZGVmIFBBQ0tBR0VfTkFNRQorI2VuZGlmXSkKK0FIX1ZFUkJBVElNKFtQQUNLQUdFX1NUUklOR10sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9TVFJJTkcKKyN1bmRlZiBQQUNLQUdFX1NUUklORworI2VuZGlmXSkKK0FIX1ZFUkJBVElNKFtQQUNLQUdFX1RBUk5BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQorI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorI2VuZGlmXSkKK0FIX1ZFUkJBVElNKFtQQUNLQUdFX1ZFUlNJT05dLFsvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKyNlbmRpZl0pCisKK0FDX09VVFBVVAorCitBQ19NU0dfQ0FDSEVfRElTUExBWSgpCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogQXV0b2NvbmYKKyMgY29tbWVudC1zdGFydDogIiMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50IGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YWMzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50CkBAIC0wLDAgKzEsODIyIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMKKyMgZ2VuZXJhdGUgZW1wdHkgZmlsZXMKKyMKKyMgQ3JlYXRlIGluY2x1ZGUgZmlsZSBsaXN0IGZvciBzbm1wX3ZhcnMuaCB0byB1c2UuCittaWJkaXI9ImFnZW50L21pYmdyb3VwIgoraWYgdGVzdCAhIC1kIGFnZW50OyB0aGVuCisgIG1rZGlyIGFnZW50CitmaQoraWYgdGVzdCAhIC1kIGFnZW50L21pYmdyb3VwOyB0aGVuCisgIG1rZGlyIGFnZW50L21pYmdyb3VwCitmaQoraj0iJG1pYmRpci9taWJfbW9kdWxlX2luY2x1ZGVzLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmggXAorICAgJG1pYmRpci9taWJfbW9kdWxlX2luaXRzLmggICAgICRtaWJkaXIvYWdlbnRfbW9kdWxlX2luaXRzLmggICAgXAorICAgJG1pYmRpci9taWJfbW9kdWxlX3NodXRkb3duLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX3NodXRkb3duLmggXAorICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oICAgXAorICAgJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgiCisKK2ZvciBpIGluICRqOyBkbworICBybSAtZiAkaQorICBlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkaQorZG9uZQorCisjCisjIERvIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nLgorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZV0pCisKKyMgc2V0IHVwIHRoZSBDUFAgY29tbWFuZAorTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgJENQUEZMQUdTIC1ETkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIC1JJHtzcmNkaXJ9L2luY2x1ZGUgLUkke3NyY2Rpcn0vYWdlbnQvbWliZ3JvdXAiCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCisgIE1PRFVMRUNQUD0iJE1PRFVMRUNQUCAtRE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUyIKK2ZpCisKK21vZHVsZV9saXN0PSIiCittaWJfbW9kdWxlX2xpc3Q9IiIKK2FnZW50X21vZHVsZV9saXN0PSIiCituZXdfd2l0aF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9taWJfbW9kdWxlcyB8ICRTRUQgJ3MvLC8gL2c7J2AKK25ld193aXRoX291dF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9vdXRfbWliX21vZHVsZXMgfCAkU0VEICdzLywvIC9nOydgCisKKyMgc2V0IHVwIGluaXRpYWwgbW9kdWxlIGxpc3QKK25ld19tb2R1bGVfbGlzdD0iJG5ld193aXRoX21pYl9tb2R1bGVzIGRlZmF1bHRfbW9kdWxlcyIKKworIyBtaW5vciBtb2RpZmljYXRpb25zCitpZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgPSAieG5vIjsgdGhlbgorICAgIyBtaW5pbXVtIG1pYiBtb2R1bGUgbGlzdCBmb3Igc25tcHRyYXBkCisgICBuZXdfbW9kdWxlX2xpc3Q9Im1pYklJL3ZhY21fdmFycyBtaWJJSS92YWNtX2NvbmYgdXRpbGl0aWVzL2V4ZWN1dGUgJG5ld193aXRoX21pYl9tb2R1bGVzIgorICAgZGVmYXVsdF9taWJzPVNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIKKyAgIGRlZmF1bHRfbWlic19pbnN0YWxsPSIgIgorZWxpZiB0ZXN0ICJ4JG1pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCisgICAjIGRlZmluZSB0aGUgbWluaSBhZ2VudCBmbGFnIHRvIHJlZHVjZSBvdXIgbG9hZCBsaXN0IGZyb20gZGVmYXVsdF9taWJzLmgKKyAgIE1PRFVMRUNQUD0iJE1PRFVMRUNQUCAtRE5FVFNOTVBfTUlOSV9BR0VOVCIKK2ZpCisKK3Rlc3RfbW9kdWxlcz0iJG5ld19tb2R1bGVfbGlzdCIKK25ld19tb2R1bGVfbGlzdD0iIgorCisjIHJlbW92ZSBtb2R1bGVzIHRoYXQgd2VyZSBleHBsaWNpdGx5IGV4Y2x1ZGVkCitmb3IgaSBpbiAkdGVzdF9tb2R1bGVzCisgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgaXMgYm90aCBpbmNsdWRlZCBhbmQgZXhjbHVkZWQuIgorICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGNvbmZsaWN0XSkKKyAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXNdKQorICAgICAgQUNfTVNHX1dBUk4oW2ZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3RdKQorICAgICAgQUNfTVNHX1dBUk4oW3VzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlc10pCisgICAgICBBQ19NU0dfV0FSTihbZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlc10pCisgICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkXSkKKyAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZyBJdCBoYXMgYmVlbiBleGNsdWRlZC5dKQorICAgIGZpCisgIGVsc2UKKyAgICBuZXdfbW9kdWxlX2xpc3Q9IiRuZXdfbW9kdWxlX2xpc3QgJGkiCisgIGZpCitkb25lCisKK25ld19tb2R1bGVfbGlzdD1gKGVjaG8gJG5ld19tb2R1bGVfbGlzdCB8IHRyICcgJyAnXG4nIHwgc29ydCB8IHRyICdcbicgJyAnOyBlY2hvICcnKSB8ICRTRUQgJ3MvICQvLydgCisKK0FDX01TR19SRVNVTFQoWyRuZXdfbW9kdWxlX2xpc3QuXSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsb29wIG92ZXIgbW9kdWxlIGxpc3QKKyMKK2FsbF93YXJuaW5ncz0iIgoraWYgdGVzdCAieCR3aXRoX21pYl9jZmdfZGVidWciID0gInh5ZXMiOyB0aGVuCisgICBtb2R1bGVfZGVidWc9MQorZWxzZQorICAgbW9kdWxlX2RlYnVnPTAKK2ZpCitmaXJzdF9wYXNzPTEKK291dHB1dF90bz1ub3JtYWwKKworaWYgdGVzdCAhIC1kIG1rIDsgdGhlbgorICBta2RpciBtaworZmkKKworCittb2R1bGVfcnVsZXM9bWsvbW9kdWxlX3J1bGVzLm1rCitlY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+ICRtb2R1bGVfcnVsZXMKKworIworIyBtYWtlIGZpbGUgc3ViLXBpZWNlcworIworZm9yIGkgaW4gbW9kdWxlX2xpc3RfZGVwcyBtaWJfbW9kdWxlX2xpc3RfZGVwcyBhZ2VudF9tb2R1bGVfbGlzdF9kZXBzIDsgZG8KKyAgZXZhbCAiJGk9bWsvJHtpfS5tayIKKyAgZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiBtay8ke2l9Lm1rCitkb25lCisKKyMKKyMgdmFyaWFibGUgc2V0dGluZ3Mgc3ViLXBpZWNlcworIworZm9yIGkgaW4gbW9kdWxlX2xpc3RfY29kZSBtaWJfbW9kdWxlX2xpc3RfY29kZSBhZ2VudF9tb2R1bGVfbGlzdF9jb2RlIG1vZHVsZV9saXN0IG1pYl9tb2R1bGVfbGlzdCBhZ2VudF9tb2R1bGVfbGlzdCA7IGRvCisgIGV2YWwgIiRpPW1rLyR7aX0ubWsiCisgIGVjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gbWsvJHtpfS5taworICBlY2hvICIkaT0gXFwiID4+IG1rLyR7aX0ubWsKK2RvbmUKKworZWNobyAkRUNIT19OICJlY2hvICIgJEVDSE9fQyA+IG1rL01PRFVMRV9MSVNULm1rCitNT0RVTEVfTElTVD1tay9NT0RVTEVfTElTVC5taworCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdW50aWwgd2UgaGF2ZSBhbiBlbXB0eSBtb2R1bGUgbGlzdC4uLgorIyAgIChtb2R1bGVzIG1heSBhZGQgbmV3IG1vZHVsZXMsIGFuZCB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBkb25lLi4uKQorIword2hpbGUgdGVzdCAieCRuZXdfbW9kdWxlX2xpc3QiICE9ICJ4IjsgZG8KKyAgQUNfTVNHX01PRFVMRV9EQkcoLWUsIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpCisgIEFDX01TR19NT0RVTEVfREJHKCJubWw6ICRuZXdfbW9kdWxlX2xpc3QiKQorCisgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBsb29wIG92ZXIgYWxsIHRoZSBtb2R1bGVzIGluIHRoZSBjdXJyZW50IGxpc3QKKyAgIworICBmb3IgaiBpbiAkbmV3X21vZHVsZV9saXN0CisgICAgZG8KKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpZ3VyZSBvdXQgd2hpY2ggc3ViLWJsb2NrcyB0byBidWlsZCBpbiBwYXJ0cworICAgIGlmIGVjaG8gIiRqIiB8ICRHUkVQICI9IiA7IHRoZW4KKyAgICAgICAjIGJ1aWxkIGEgc2hhcmVkIG9iamVjdCBmaWxlCisgICAgICAgIyBmb3JtYXQ6IHNvZmlsZW5hbWU9bW9kdWxlMTptb2R1bGUyCisgICAgICAgIyBYWFg6IGN1cnJlbnRseSBkb2Vzbid0IGRvIHRoaXMKKyAgICAgICBkbF9uYW1lPWBlY2hvICRqIHwgJFNFRCAncy89LiovLydgCisgICAgICAgZGxfbmFtZXM9IiRkbF9uYW1lcyAkZGxfbmFtZSIKKyAgICAgICBkbF9vYmplY3RzPWBlY2hvICRqIHwgJFNFRCAncy8uKj0vLydgCisgICAgICAgbW9kdWxlX3N1Ymxpc3Q9YGVjaG8gJGRsX29iamVjdHMgfCAkU0VEICdzLzovIC9nJ2AKKyAgICAgICBzYXZlZF9zdWJsaXN0PSIiCisgICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIiCisgICAgICAgb3V0cHV0X3RvPXNlcGFyYXRlCisKKyAgICAgICAjIGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgICAjIHRoZXNlIGFjdHVhbGx5IGdldCBudWtlZCBsYXRlcgorICAgICAgIG91dHB1dF9pbml0cz0iYWdlbnQvbWliZ3JvdXAvJHtkbF9uYW1lfS1kbGwuYyIKKyAgICAgICBvdXRwdXRfaGRycz0iYWdlbnQvbWliZ3JvdXAvJHtkbF9uYW1lfS1oZHJzLmgiCisgICAgZWxzZQorICAgICAgICMgbm90IGEgc3BlY2lhbCB0b2tlbiBpbnZvY2F0aW9uCisgICAgICAgbW9kdWxlX3N1Ymxpc3Q9JGoKKyAgICAgICBvdXRwdXRfdG89bm9ybWFsCisgICAgICAgb3V0cHV0X3Q9CisgICAgZmkKKworICAgIHdoaWxlIHRlc3QgIngkbW9kdWxlX3N1Ymxpc3QiICE9ICJ4IiA7IGRvCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBsb29wIG92ZXIgYWxsIHRoZSBtb2R1bGVzIGluIHRoZSBzdWIgbGlzdAorICAgIGZvciBpIGluICRtb2R1bGVfc3VibGlzdAorICAgIGRvCisKKyAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IikKKyAgICBBQ19NU0dfTU9EVUxFX0RCRygidGVzdGluZyAkaSIpCisgICAgbmVlZF9oZWFkZXI9MAorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYnVpbGQgYSBwc2V1ZG8gaW5jbHVkZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBjdXJyZW50IGNvbmZpZyBhbmQKKyAgICAjIHN5c3RlbSBzeW1ib2xzOgorICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUKKyNpbmNsdWRlICIkc3JjZGlyLyRtaWJkaXIvJGkuaCJdXSldKQorICAgIG12IGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgbWFjcm86IGNvbmZpZ19iZWxvbmdzX2luKEFSRykKKyAgICAjICAgQVJHOiBlaXRoZXIKKyAgICAjICAgICAtIG1pYl9tb2R1bGUgICA9PiBsaWJuZXRzbm1wbWlicyAgIChkZWZhdWx0KQorICAgICMgICAgIC0gYWdlbnRfbW9kdWxlID0+IGxpYm5ldHNubXBhZ2VudAorICAgICMKKyAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCldKQorICAgIG1vZHVsZV90eXBlPW1pYl9tb2R1bGUKKyAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5oOyB0aGVuCisgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgIG1vZHVsZV90eXBlPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAnc0AuKmNvbmZpZ19iZWxvbmdzX2luKFwoW14pXSpcKSkuKkBcMUBwJ2AKKyAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JG1vZHVsZV90eXBlIiA9ICJ4IiA7IHRoZW4KKyAgICAgIG1vZHVsZV90eXBlPW1pYl9tb2R1bGUKKyAgICBmaQorICAgIGlmIHRlc3QgIngkb3V0cHV0X3RvIiA9ICJ4bm9ybWFsIiA7IHRoZW4KKyAgICAgCW91dHB1dF9pbml0cz0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbml0cy5oIgorICAgICAJb3V0cHV0X2hkcnM9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5jbHVkZXMuaCIKKyAgICBmaQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlcyB3aXRoaW4gdGhlIGRsbCBzeXN0ZW0uIAorICAgICMgICAtIGlmIGZvdW5kIGluIGEgZGxsLCB0aGVuIHJlbW92ZSBmcm9tIHRoZSBkbGwgYW5kIGFkZCB0byBtYWluCisgICAgZGJsZml4PSIiCisgICAgZm9yIGRsdGVzdCBpbiAkZGxfbmFtZXMgOyBkbworICAgICAgZXZhbCBtb2RfZmlsZXM9IlwiXCRkbF8ke2RsdGVzdH1fZmlsZXNcIiIKKyAgICAgIGlmIGVjaG8gIiAkbW9kX2ZpbGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBzb21lIGRsbCBtb2R1bGUgaGFzIGFscmVhZHkgc2VlbiB0aGlzLCB1bmxvYWQgaXQgZnJvbSB0aGF0IGxpc3QKKyAgICAgICAgIyBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgY29yZSAoYWdhaW4pCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCJyZW1vdmluZyAkaSBmcm9tICRkbHRlc3QiKQorICAgICAgICBtb2RfZmlsZXM9YGVjaG8gIiAkbW9kX2ZpbGVzICIgfCAkU0VEICJzQCAkaSBAQCJgCisgICAgICAgIGRibGZpeD0iX19YWFhfXyIKKyAgICAgICAgZXZhbCAiZGxfJHtkbHRlc3R9X2ZpbGVzPVwiJG1vZF9maWxlc1wiIgorCisgICAgICAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCisJZWNobyAicmVhZF9jb25maWcubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtb2R1bGVfbGlzdF9kZXBzCisJaWYgdGVzdCAkbW9kdWxlX3R5cGUgPSAiYWdlbnRfbW9kdWxlIiA7IHRoZW4KKyAJICAgIGVjaG8gInNubXBfdmFycy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJGFnZW50X21vZHVsZV9saXN0X2RlcHMKKyAgICAgICAgZWxzZQorIAkgICAgZWNobyAibWliX21vZHVsZXMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtaWJfbW9kdWxlX2xpc3RfZGVwcworICAgICAgICBmaQorICAgICAgICBldmFsICR7bW9kdWxlX3R5cGV9X2xpc3Q9IlwiXCQke21vZHVsZV90eXBlfV9saXN0ICRpXCIiCisJZWNobyAiCSRpIFxcIiA+PiAkbW9kdWxlX2xpc3RfY29kZQorCWVjaG8gJEVDSE9fTiAiICRpIiAkRUNIT19DID4+ICRNT0RVTEVfTElTVAorICAgICAgICBldmFsIHRtcGZpbGV2YXI9XCRgZWNobyAke21vZHVsZV90eXBlfV9saXN0X2NvZGVgCisgICAgICAgIGVjaG8gIgkkaSBcXCIgPj4gJHRtcGZpbGV2YXIKKworCSMgWFhYOiBhZGQgdGhpcyB0byB0aGUgbWFpbiBpbml0IGxpc3Q7IHRoaXMgaXMgcG9zc2libGUgbm90CisJIyBxdWl0ZSBpbiB0aGUgcmlnaHQgc3BvdCBhbnkgbG9uZ2VyIGJ1dCB3ZSdyZSBzdHVjayB3aXRoIGl0LgorCSMgQWRkaW5nIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9yZGVyZWQgc3BvdCB3b3VsZCBiZSBhCisJIyBuaWdodG1hcmUuICBPaywgd2UncmUgYWxyZWFkeSBpbiBuaWdodG1hcmUgY29kZSBzbyB0aGF0CisJIyB3b2x1ZCBoYXZlIHRvIGJlIGEgbmlnaHQtdGVycm9yLgorICAgICAgICBtbm09YGVjaG8gJGkgfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAorCW91dHB1dF9pbml0c190bXA9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5pdHMuaCIKKwllY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0c190bXAKKyAgICAgICAgIyBYWFg6IGV2ZW4gd29yc2UsIHdlIGxvb3NlIHdoZXRoZXIgdGhlIGhlYWRlciBpcyBuZWVkZWQgb3Igbm90LgorICAgICAJb3V0cHV0X2hkcnNfdG1wPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luY2x1ZGVzLmgiCisgICAgICAgIGVjaG8gJyNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyInID4+ICRvdXRwdXRfaGRyc190bXAKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgbWFrZSBzdXJlIG1vZHVsZSB3YXNuJ3QgZXhwbGljaXRseSBleGNsdWRlZCwgb3IgYWxyZWFkeSBhZGRlZAorICAgICMKKyAgICBpZiB0ZXN0ICJ4JGRibGZpeCIgIT0gIngiIDsgdGhlbgorICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIHdhcyBkdXBsaWNhdGVkIC0tIHB1dHRpbmcgaW50byBtYWluIikKKyAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSB3YXMgZXhjbHVkZWQiKQorICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgYWxyZWFkeSB0ZXN0ZWQiKQorICAgIGVsc2UKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBwcm9jZXNzIG1vZHVsZXMgaGVhZGVyLCBjaGVja2luZyBmb3IgY29uZmlnXyBwc2V1ZG8tbWFjcm9zCisgICAgICAjCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgZG9lcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBtb2R1bGUgZXhpc3Q/CisgICAgICAjICAgbWFjcm9zIGFyZSBvbmx5IHByb2Nlc3NlZCBpZiBpdCBkb2VzCisgICAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5oOyB0aGVuCisgICAgICAgIG5ld19saXN0PSIiCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ19leGNsdWRlKG1vZHVsZXMpCisgICAgICAJIyAgLSBsaXN0cyBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzCisgICAgICAJIyAgICAtIEVHOiBuZXcgTUlCIGltcGxlbWVudGF0aW9ucyBleGNsdWRlIG9sZCBhbmQgdmljZS12ZXJzYQorICAgICAgCSMKKyAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGNvbmZsaWN0cworICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KV0pCisgICAgICAgIG5ld19saXN0X2V4Y2w9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19leGNsdWRlKFwoLipcKSkuKi9cMS9wJ2AKKwlpZiB0ZXN0ICJ4JG5ld19saXN0X2V4Y2wiICE9ICJ4IjsgdGhlbgorICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSBleGNsdWRlcyAkbmV3X2xpc3RfZXhjbCIpCisJICBmb3IgaiBpbiAkbmV3X2xpc3RfZXhjbAorCSAgICBkbworCSAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbWliX21vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGV4Y2x1ZGVzIG1vZHVsZSAnJGonIGJ1dCBhbm90aGVyIG1vZHVsZSByZXF1aXJlcyBpdCIKKyAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCisJICAgICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgIGVsc2UKKwkgICAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICBuZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9IiRqICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiCisgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaiBhZGRlZCB0byBleGNsdWRlZCBsaXN0IikKKwkgICAgZmkKKwkgIGRvbmUKKwlmaQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfYXJjaF9yZXF1aXJlKEFSQ0gsbW9kdWxlcykKKyAgICAgIAkjICAtIGxpc3RzIG1vZHVsZXMgcmVxdWlyZWQgZm9yIGEgZ2l2ZW4gQVJDSAorICAgICAgICAjCisgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KV0pCisgICAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgICBuZXdfbGlzdF9hcmNoPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfYXJjaF9yZXF1aXJlKCAqXChbXiBdKlwpICosICpcKFteIF0qXCkgKikuKi9cMS14YXJjaHgtXDIvcCdgCisgICAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisJaWYgdGVzdCAieCRuZXdfbGlzdF9hcmNoIiAhPSAieCI7IHRoZW4KKyAgICAgICAgICBmb3IgaiBpbiAkbmV3X2xpc3RfYXJjaAorCSAgICBkbworCSAgICBhcmNodGVzdD1gZWNobyAkaiB8ICRTRUQgJ3MvLXhhcmNoeC0uKi8vJ2AKKwkgICAgIyB0YXJnZXRfb3MgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGEgI2RlZmluZSBvZiAxLi4uCisJICAgIGlmIHRlc3QgIngkYXJjaHRlc3QiID0gIngxIiAtbyAieCR0YXJnZXRfb3MiID0gIngkYXJjaHRlc3QiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieCRhcmNodGVzdCI7IHRoZW4KKwkgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGBlY2hvICRqIHwgJFNFRCAncy8uKi14YXJjaHgtLy8nYCIKKyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSByZXF1aXJlZCBhZGRpbmcgYXJjaCBmaWxlczogYGVjaG8gJGogfCAkU0VEICdzLy4qLXhhcmNoeC0vLydgIikKKwkgICAgZmkKKwkgIGRvbmUKKwlmaQorICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHJlcXVpcmVkIGFyY2ggZmlsZXM6ICRuZXdfbGlzdCIpCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGJhc2UsIHZlcnNpb24sIHZlcnNpb24tbW9kdWxlcywgLi4uKSkKKyAgICAgIAkjICAtIGxpc3RzIGFsdGVybmF0aXZlIG1vZHVsZXMgdXNlZCBmcm9tIGRpZmZlcmVudCB2ZXJzaW9ucy4KKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX3ZlcnNpb25fcmVxdWlyZSh4KV0pCisgICAgICAgIFtuZXdfbGlzdF9hbHQzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAkQVdLICcKKyAgICAgICAgICAgICAgICBCRUdJTiB7CisgICAgICAgICAgICAgICAgICAgIGlmKCInIiRlbmFibGVfbmV3X2ZlYXR1cmVzIiciID09ICJ5ZXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgiOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCInIiRlbmFibGVfb2xkX2ZlYXR1cmVzIiciID09ICJ5ZXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgtbGVzcyI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4LWxlc3MtZXF1YWwiOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIuIjsKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQoIiciJHdpdGhfZmVhdHVyZXNfb2YiJyIsIGEpOworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPXNwcmludGYoIiUwM2QlMDNkJTAzZCUwM2QiLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgL2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUvIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiXi4qY29uZmlnX3ZlcnNpb25fcmVxdWlyZSAqXFxcXChcXFxcKCIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiXFxcXClcXFxcKS4qJCIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N1YigiLCAqIiwgIiwiKTsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLCI7CisgICAgICAgICAgICAgICAgICAgIG4gPSBzcGxpdCgkMCwgYSk7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIi4iOworICAgICAgICAgICAgICAgICAgICBhY3R2ZXIgPSAiMDAwMDAwMDAwMDAwIjsKKyAgICAgICAgICAgICAgICAgICAgYWN0c3RyID0gYVsxXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDwgbjsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdChhW2ldLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlcj1zcHJpbnRmKCIlMDNkJTAzZCUwM2QlMDNkIiwgYlsxXSwgYlsyXSwgYlszXSwgYls0XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VydmVyID4gYWN0dmVyICYmIChtZXRob2QgIT0gIm1heC1sZXNzIiB8fCBjdXJ2ZXIgPCB2ZXJzaW9uKSAmJiAobWV0aG9kICE9ICJtYXgtbGVzcy1lcXVhbCIgfHwgY3VydmVyIDw9IHZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dmVyID0gY3VydmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHN0ciA9IGFbaSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIiwgYWN0c3RyKTsKKyAgICAgICAgICAgICAgICB9J2BdCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgcmVxdWlyZWQgdmVyc2lvbmVkIGZlYXR1cmVzOiAkbmV3X2xpc3RfYWx0MyIpCisgICAgICAgIG5ld19saXN0PSIke25ld19saXN0fSR7bmV3X2xpc3RfYWx0M30iCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ19yZXF1aXJlKG1vZHVsZXMpCisgICAgICAJIyAgLSBsaXN0cyBtb2R1bGVzIHJlcXVpcmVkIGZvciB0aGlzIG1vZHVsZQorICAgICAgICAjCisgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBvdGhlciByZXF1aXJlZCBtb2R1bGVzCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpXSkKKyAgICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19yZXF1aXJlKFwoLipcKSkuKi9cMS9wJ2AiCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgd2lsbCB0ZXN0OiAkbmV3X2xpc3QiKQorCWlmIHRlc3QgIngkbmV3X2xpc3QiICE9ICJ4IjsgdGhlbgorCSAgZm9yIGogaW4gJG5ld19saXN0CisJICAgIGRvCisgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtbiAiICRpIHdhbnRzIHRvIGFkZCAkajogIikKKwkgICAgaWYgdGVzdCAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5oIC1hICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmM7IHRoZW4KKyAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorCSAgICAgIEFDX01TR19FUlJPUihbbWliIG1vZHVsZSAiJGkiIHJlcXVpcmVzIG1vZHVsZSAiJGoiIGJ1dCAkai5oIG9yICRqLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpcl0pCisJICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIngkaSIgIT0gInhkZWZhdWx0X21vZHVsZXMiIDsgdGhlbgorICAgICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgcmVxdWlyZXMgbW9kdWxlICckaicgYnV0IHNvbWVvbmUgdG9sZCBtZSB0byBjb21waWxlIHdpdGhvdXQgaXQiCisgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgICAgZmkKKyMJICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorIyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGogaW5jbHVkZWQgcHJldmlvdXNseSIpCisgICAgICAgICAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICBuZXdfbGlzdF90d289IiRuZXdfbGlzdF90d28gJGoiCisgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRqIGluY2x1ZGVkIikKKwkgICAgZmkKKwkgIGRvbmUKKwlmaQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfYWRkX21pYihTT01FLU1JQikKKyAgICAgIAkjICAtIGxpc3RzIE1JQnMgdG8gYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgdG8tbG9hZCBsaXN0LgorICAgICAgICAjCisgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBtaWJzIHRvIGFkZAorICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfYWRkX21pYih4KV0pCisgICAgICAgIG5ld19taWJzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2FkZF9taWIoXCguKlwpKS4qL1wxL3AnYAorCWlmIHRlc3QgIngkbmV3X21pYnMiICE9ICJ4IjsgdGhlbgorCSAgICBmb3IgaiBpbiAkbmV3X21pYnMKKwkJZG8KKwkJaWYgdGVzdCAieGBlY2hvIDokZGVmYXVsdF9taWJzOiB8ICRHUkVQIDokajpgIiA9ICJ4IjsgdGhlbgorCQkgICAgZGVmYXVsdF9taWJzPSIkZGVmYXVsdF9taWJzOiRqIgorCQlmaQorCQlpZiB0ZXN0IC1mICRzcmNkaXIvbWlicy8kai50eHQ7IHRoZW4KKwkJICAgIGlmIGVjaG8gJGRlZmF1bHRfbWlic19pbnN0YWxsIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisJCQkgICAgOgorCQkgICAgZWxzZQorCQkJICAgIGRlZmF1bHRfbWlic19pbnN0YWxsPSIkZGVmYXVsdF9taWJzX2luc3RhbGwgJGoudHh0IgorCQkgICAgZmkKKwkJZmkKKwkgICAgZG9uZQorCWZpICMgbmV3IG1pYnMKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGFkZCB0aGUgY3VycmVudCBtb2R1bGUgdG8gdGhlIGxpc3Qgb2Ygc3R1ZmYgdG8gY29tcGlsZSwgZXRjLgorICAgICAgICAjCisgICAgICAgICMgYWRkICRpIHRvIG1vZHVsZSBsaXN0CisgICAgICAgICMKKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWRkZWQgKGJhc2VkIG9uICRpLmgpIikKKyAgICAgICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKKyAgICAgICAgZXZhbCAke21vZHVsZV90eXBlfV9saXN0PSJcIlwkJHttb2R1bGVfdHlwZX1fbGlzdCAkaVwiIgorCisJZWNobyAicmVhZF9jb25maWcubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtb2R1bGVfbGlzdF9kZXBzCisJaWYgdGVzdCAkbW9kdWxlX3R5cGUgPSAiYWdlbnRfbW9kdWxlIiA7IHRoZW4KKyAJICAgIGVjaG8gInNubXBfdmFycy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJGFnZW50X21vZHVsZV9saXN0X2RlcHMKKyAgICAgICAgZWxzZQorIAkgICAgZWNobyAibWliX21vZHVsZXMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtaWJfbW9kdWxlX2xpc3RfZGVwcworICAgICAgICBmaQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGNvbmZpZ19sb2FkX21pYgorICAgICAgICAjCisgICAgICAgIGlmICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIC1xIGNvbmZpZ19sb2FkX21pYjsgdGhlbgorICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKyAgICAgIAkgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlICIkaSIgdXNlcyB0aGUgImNvbmZpZ19sb2FkX21pYiIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay5dKQorICAgICAgICBmaSAjIGdyZXAgY29uZmlnX2xvYWRfbWliCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBjaGVjayBmb3IgY29uZmlnX3BhcnNlX2RvdF9jb25mCisgICAgICAgICMgIChnZW5lcmFsbHkgbm90IHVzZWQgYW55IGxvbmdlcjsgb2xkIGF1dG8tbG9hZCBhIC5jb25mIHRva2VuKQorICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseildKQorICAgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgICAgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAkU0VEIC1uICdzQC4qY29uZmlnX3BhcnNlX2RvdF9jb25mKFwoW14pXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSkuKkByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcGQiLFwxLCBcMiwgXDMsIFw0KTtAcCcgPj4gJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmgKKwljaGFuZ2VxdW90ZShbLCBdKQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfZXJyb3IoZXJyb3IgdGV4dCkKKyAgICAgIAkjICAtIHVzZWQgdG8gc2lnbmFsIGEgY29uZmlndXJhdGlvbiBlcnJvciBmcm9tIGEgbW9kdWxlCisgICAgICAgICMKKyAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGVycm9ycywgb3Igd2FybmluZ3MKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX2Vycm9yKHgpXSkKKyAgICAgICAgZXJyb3I9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfZXJyb3IoXCguKlwpKS4qL1wxL3AnYAorCWlmIHRlc3QgIngkZXJyb3IiICE9ICJ4IjsgdGhlbgorICAgICAgICAgIGVjaG8KKyAgICAgICAgICBlY2hvCisgICAgICAgICAgQUNfTVNHX0VSUk9SKFskaTogKioqICRlcnJvciAqKipdKQorICAgICAgICBmaQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfd2FybmluZyh3YXJuaW5nIHRleHQpCisgICAgICAJIyAgLSB1c2VkIHRvIHNpZ25hbCBhIGNvbmZpZ3VyYXRpb24gIndhcm5pbmciIHRvIGJlIHByaW50ZWQgdG8gdGhlIHVzZXIKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX3dhcm5pbmcoeCldKQorICAgICAgICB3YXJuaW5nPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfd2FybmluZyhcKC4qXCkpLiovXDEvcCdgCisJaWYgdGVzdCAieCR3YXJuaW5nIiAhPSAieCI7IHRoZW4KKyAgICAgICAgICBhbGxfd2FybmluZ3M9IiRhbGxfd2FybmluZ3MgJHdhcm5pbmcKKyIKKyAgICAgICAgZmkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBDaGVjayBmb3IgYSAuYyBmaWxlIGlmIHRoZSAuaCBkaWRuJ3QgZXhpc3QKKyAgICAgICMKKyAgICAgIGVsaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYzsgdGhlbgorICAgICAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaSAgICAgICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWxyZWFkeSBpbmNsdWRlZCIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWRkZWQgKGJhc2VkIG9uICRpLmMpIikKKwkgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgorCSAgIG1pYl9tb2R1bGVfbGlzdD0iJG1pYl9tb2R1bGVfbGlzdCAkaSIKKyAgICAgICAgZmkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBObyAuaCBvciAuYyA9IGVycm9yISAgKHR5cG8/KQorICAgICAgIworICAgICAgZWxzZSAjIG5vICRpLmggb3IgJGkuYworICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisJQUNfTVNHX0VSUk9SKFttb2R1bGUgZmlsZXMgJGkuaCBvciAkaS5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXJdKQorICAgICAgZmkgIyBubyAkaS5oCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGNoZWNrIGZvciBpbml0L3NodXRkb3duIHJvdXRpbmVzIHRvbworICAgICAgIworICAgICAgaGFzX2NfY29kZT1ubworICAgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYzsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JG91dHB1dF90byIgPSAieG5vcm1hbCIgOyB0aGVuCisJICBlY2hvICIJJGkgXFwiID4+ICRtb2R1bGVfbGlzdF9jb2RlCisgIAkgIGVjaG8gJEVDSE9fTiAiICRpIiAkRUNIT19DID4+ICRNT0RVTEVfTElTVAorICAgICAgICAgIGV2YWwgdG1wZmlsZXZhcj1cJGBlY2hvICR7bW9kdWxlX3R5cGV9X2xpc3RfY29kZWAKKyAgICAgICAgICBlY2hvICIJJGkgXFwiID4+ICR0bXBmaWxldmFyCisgICAgICAgIGVsc2UKKyAgICAgICAgICBldmFsICJkbF8ke2RsX25hbWV9X2ZpbGVzPVwiXCRkbF8ke2RsX25hbWV9X2ZpbGVzICRpXCIiCisgICAgICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIkc2F2ZWRfc3VibGlzdF9jb2RlICRpIgorICAgICAgICBmaQorICAgICAgICBtbm09YGVjaG8gJGkgfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAorICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiXG5jaGVja2luZyAnJHNyY2Rpci8kbWliZGlyLyRpLmMnICgkbW5tL2BiYXNlbmFtZSAkaWApIEMgZmlsZSBmb3IgaW5pdC9zaHV0ZG93biIpCisgICAgICAgIGlmIHRlc3QgIngkbW5tIiAhPSAieGBiYXNlbmFtZSAkaWAiOyB0aGVuCisgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKwkgICBBQ19NU0dfRVJST1IoW2NvbmZsaWN0aW5nIG5hbWVzOiAkbW5tICE9IGBiYXNlbmFtZSAkaWBdKQorICAgICAgICBmaQorICAgICAgICB0ZW1wX2luaXQ9YCRHUkVQIGluaXRfJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyB8ICRHUkVQIC12IF9pbml0XyRtbm1gCisJaWYgdGVzdCAieCR0ZW1wX2luaXQiICE9ICJ4IjsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgImFkZGluZyBpbml0XyRtbm0oKSB0byBsaXN0IikKKyAgICAgICAgICAgIG5lZWRfaGVhZGVyPTEKKwkgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKKwlmaQorCSRHUkVQIHNodXRkb3duXyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgPiAvZGV2L251bGwKKyAgICAgICAgaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICBlY2hvIC1lICJcbmFkZGluZyBzaHV0ZG93bl8kbW5tKCkgdG8gbGlzdCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBuZWVkX2hlYWRlcj0xCisJICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgc2h1dGRvd25fJG1ubSgpOyIgPj4gJG1pYmRpci8ke21vZHVsZV90eXBlfV9zaHV0ZG93bi5oCisJZmkKKyAgICAgIGZpICMgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYworCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBpZiB0aGVyZSBpcyBhIHNodXRkb3duL2luaXQgbGlzdCwKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgJG5lZWRfaGVhZGVyIC1lcSAxIDsgdGhlbgorICAgICAgICAgZWNobyAnI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIicgPj4gJG91dHB1dF9oZHJzCisgICAgICBlbHNlCisgICAgICAgICBlY2hvICcvKiNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyIqLycgPj4gJG91dHB1dF9oZHJzCisgICAgICBmaQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBjaGVjayBmb3Igb3V0cHV0IGRpcmVjdG9yeSAoZm9yIGJ1aWxkaW5nIG91dHNpZGUgb2Ygc291cmNlIHRyZWUKKyAgICAgICMKKyAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgaWYgdGVzdCAieGBlY2hvICRpIHwgJFNFRCAncy9cLy8vZzsnYCIgIT0gIngkaSI7IHRoZW4KKwltbmQ9YGVjaG8gJGkgfCAkU0VEICdzL1wvW14vXSokLy87J2AKKwlpZiB0ZXN0ICEgLWQgLi8kbWliZGlyLyRtbmQ7IHRoZW4KKwkgICAgbW9kdWxlX2RpcmVjdG9yaWVzPSIkbW9kdWxlX2RpcmVjdG9yaWVzIC4vJG1pYmRpci8kbW5kIgorCWZpCisgICAgICBmaSAjIG1vZHVsZSBkaXJlY3RvcnkgdGVzdAorICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgZGVmaW5lIFVTSU5HXypfTU9EVUxFCisgICAgICAjCisgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgIHN5bT0iYGVjaG8gJHtpfSB8ICRTRUQgJ3MvW15hLXpBLVowLTlfXS9fL2cnIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYCIKKyAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisgICAgICBlY2hvICIvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlICR7aX0gbW9kdWxlIGZpbGVzLiAgKi8iID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKKyAgICAgIGVjaG8gIiNkZWZpbmUgVVNJTkdfJHtzeW19X01PRFVMRSAxIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCisgICAgICBlY2hvICIgIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBlY2hvICRFQ0hPX04gIiAkaSRFQ0hPX0MiCisgICAgZmkgIworICAgIGRvbmUgIyBmb3IgaSBpbiAkbW9kdWxlX3N1Ymxpc3QKKworICAgIGlmIHRlc3QgIiRvdXRwdXRfdG8iID0gInNlcGFyYXRlIiA7IHRoZW4KKyAgICAgIGlmIHRlc3QgIngkbmV3X2xpc3RfdHdvIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgIyBubyBuZXcgc3ViLW1vZHVsZXMgdG8gYWRkIHRvIHRoZSBjdXJyZW50IHRhcmdldAorICAgICAgICBvdXRwdXRfdG89Im5vcm1hbCIKKworICAgICAgICBkbGxjbGVhbnM9IiRzYXZlZF9zdWJsaXN0X28gJGRsbGNsZWFucyIKKyAgICAgICAgb3V0cHV0X2luaXRzPSIiCisgICAgICAgIG1vZHVsZV9zdWJsaXN0PSIiCisgICAgICBlbHNlCisgICAgICAgICMgYSBtb2R1bGUgaGFkIHN1Yi1tb2R1bGVzIHJlcXVpcmVkOyBrZWVwIGdvaW4nCisgICAgICAgIHNhdmVkX3N1Ymxpc3Q9IiRzYXZlZF9zdWJsaXN0ICRtb2R1bGVfc3VibGlzdCIKKyAgICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiRuZXdfbGlzdF90d28iCisgICAgICAgIG5ld19saXN0X3R3bz0iIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBtb2R1bGVfc3VibGlzdD0iIgorICAgIGZpCisKKyAgICBkb25lICMgd2hpbGUgbW9kdWxlX3N1Ymxpc3QKKyAgZG9uZSAjIGZvciBqIGluICRuZXdfbW9kdWxlX2xpc3QKKworICAjIHJlbWVtYmVyIHRoZSB0b3AgbGV2ZWwgbW9kdWxlcyBmb3IgbGF0ZXIgcmVwb3J0aW5nCisgIGlmIHRlc3QgJGZpcnN0X3Bhc3MgPSAxIDsgdGhlbgorICAgICMgcmVtZW1iZXIgdGhpcyBsaXN0IGZvciBsYXRlciByZXBvcnRpbmcKKyAgICB0b3BfbGV2ZWxfbW9kdWxlcz0iJG5ld19tb2R1bGVfbGlzdCA9PiAkbmV3X2xpc3RfdHdvIgorICAgIGZpcnN0X3Bhc3M9MAorICBmaQorICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIGlmICRpIGFkZGVkIG5ldyBtb2R1bGVzIHZpcyBjb25maWdfKiwKKyAgIyBjaGVjayB0aG9zZSBtb2R1bGVzIGZvciByZXF1aXJlbWVudHMgdG9vCisgICMKKyAgIyB0cmFuc2ZlciB0aGUgbmV3IG1vZHVsZSB0byBjaGVjayBsaXN0IHRvIHRoZSBub3JtYWwgdmFyaWFibGUKKyAgIworICBpZiB0ZXN0ICJ4JG5ld19saXN0X3R3byIgOyB0aGVuCisgICAgb3V0cHV0X3RvPW5vcm1hbAorICBmaQorICBuZXdfbW9kdWxlX2xpc3Q9IiRuZXdfbGlzdF90d28iCisgIG5ld19saXN0X3R3bz0iIgorZG9uZSAjIHdoaWxlIHRlc3QgIngkbmV3X21vZHVsZV9saXN0IiAhPSAieCI7IGRvCitlY2hvICIiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25zdHJ1Y3QgdGhlIGRsbCBjb2RlIGZpbGVzIGFuZCBtYWtlIHJ1bGVzLiAgVGhpcyBjYW4ndCBiZSBkb25lCisjIHVudGlsIG5vdyBiZWNhdXNlIGR1cGxpY2F0ZSB1c2Ugb2YgYSBtb2R1bGUgbWVhbnMgaXQgZ2V0cyByZW1vdmVkCisjIGZyb20gdGhlIGRsbCBhbmQgcHV0IGludG8gdGhlIG1haW4gYWdlbnQuCisjCitmb3IgaSBpbiAkZGxfbmFtZXMgOyBkbworICBldmFsIG1vZF9maWxlcz0iXCJcJGRsXyR7aX1fZmlsZXNcIiIKKyAgZWNobyAiY29tcG9uZW50cyBpbiB0aGUgJGkgZGxsOiAkbW9kX2ZpbGVzIgorCisgIG91dHB1dF9pbml0cz0iYWdlbnQvbWliZ3JvdXAvJHtpfS1kbGwuYyIKKyAgb3V0cHV0X2hkcnM9ImFnZW50L21pYmdyb3VwLyR7aX0taGRycy5oIgorCisgIEFDX01TR19NT0RVTEVfREJHKCJjcmVhdGluZyBkbGwgZmlsZTogJG91dHB1dF9pbml0cyIpCisgIGZvciBvZmlsZSBpbiAkb3V0cHV0X2luaXRzICRvdXRwdXRfaGRycyA7IGRvCisgICAgaWYgdGVzdCAtZiAkb2ZpbGUgOyB0aGVuCisgICAgICBpZiAkR1JFUCAidGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUiICRvZmlsZSA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAJOgorICAgICAgZWxzZQorICAJQUNfTVNHX0VSUk9SKFskb2ZpbGUgYWxyZWFkeSBleGlzdGVkIDsgY2FuJ3QgYnVpbGQgZGxsIG9iamVjdCAkaV0pCisgICAgICBmaQorICAgIGZpCisgICAgY2F0ID4gJG9maWxlIDw8IEVPRklGCisvKiB4RG8gbm90IGVkaXQ7IHRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlICovCitFT0ZJRgorICBkb25lCisKKyAgY2F0ID4+ICRvdXRwdXRfaW5pdHMgPDwgRU9GT0MKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSAiJHtpfS1oZHJzLmgiCit2b2lkCitpbml0XyRpKHZvaWQpIHsKK0VPRk9DCisKKyAgIyBjcmVhdGUgdGhlIC5zbyBydWxlCisgIHNhdmVkX3N1Ymxpc3Rfbz1gZWNobyAiJG1vZF9maWxlcyAiIHwgJFNFRCAncy9eICovL2c7cy8gICovLm8gL2c7J2AKKworICAjIGNyZWF0ZSB0aGUgcnVsZXMgZm9yIGVhY2ggb2JqZWN0CisgIGZvciBqIGluICRtb2RfZmlsZXMgOyBkbworICAgIGNhdCA+PiAkbW9kdWxlX3J1bGVzIDw8IEVPRlIKKyRqLm86ICRqLmMKKwlcJChDQykgLWMgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAIFwkPAorCitFT0ZSCisgICAgbW5tPWBlY2hvICRqIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKKyAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cworICBkb25lCisKKyAgIyBjcmVhdGUgdGhlIHJ1bGUgZm9yIHRoZSAuc28gYW5kIHdyYXBwZXIgY29kZQorICBjYXQgPj4gJG1vZHVsZV9ydWxlcyA8PCBFT0ZNCiske2l9LWRsbC5vOiAke2l9LWRsbC5jCisJXCQoQ0MpIC1jIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCBcJDwKKworJHtpfS5zbzogJHNhdmVkX3N1Ymxpc3RfbyAke2l9LWRsbC5vCisJXCQoQ0MpIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCAkc2F2ZWRfc3VibGlzdF9vICR7aX0tZGxsLm8KKworRU9GTQorICAgICAgICBjYXQgPj4gJG91dHB1dF9pbml0cyA8PCBFT0ZPQ0ZJTgorfQorRU9GT0NGSU4KKworZG9uZQorCisjIGNsZWFudXAKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBidWlsZCBtb2R1bGUgbGlzdHMgZm9yIE1ha2VmaWxlcworIworY2hhbmdlcXVvdGUoLCApCisKK2ZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtb2R1bGVfbGlzdF9mdCBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X2Z0IG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIG1pYmdyb3VwX2xpc3RfZnQgYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X2Z0IGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfZnQgOyBkbworICBldmFsICIkaT1tay8ke2l9Lm1rIgorZG9uZQorCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9vCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9jCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9mdAorCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfZnQKKworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X28vbWliZ3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbyA+ICRtaWJncm91cF9saXN0X28KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9sby9taWJncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9sbyA+ICRtaWJncm91cF9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfZnQvbWliZ3JvdXBfbGlzdF9mdC87c0BcKFteIAldKlwpXC5mdEBtaWJncm91cC9cMS5mdEBnJyA8ICRtaWJfbW9kdWxlX2xpc3RfZnQgPiAkbWliZ3JvdXBfbGlzdF9mdAorCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9vCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9jCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9mdAorCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9vL2FnZW50Z3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9vID4gJGFnZW50Z3JvdXBfbGlzdF9vCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9sby9hZ2VudGdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbG8gPiAkYWdlbnRncm91cF9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9mdC9hZ2VudGdyb3VwX2xpc3RfZnQvO3NAXChbXiAJXSpcKVwuZnRAbWliZ3JvdXAvXDEuZnRAZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfZnQgPiAkYWdlbnRncm91cF9saXN0X2Z0CisKK2ZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtb2R1bGVfbGlzdF9mdCBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X2Z0IG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIG1pYmdyb3VwX2xpc3RfZnQgYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X2Z0IGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfZnQgOyBkbworCSMgaHB1eCBtYWtlIChhdCBsZWFzdCkgZG9lc24ndCBsaWtlIGEgdHJhaWxpbmcgXCBvbiB0aGUgbGFzdAorCSMgbGluZSBldmVuIHdoZW4gdGhlIG5leHQgbGluZSBjb250YWlucyBub3RoaW5nIGJ1dAorCSMgd2hpdGVzcGFjZS4KKwlsYXN0dG9rZW49YGF3ayAne2xhc3R0b2tlbj0kMX1FTkR7cHJpbnQgbGFzdHRva2VufScgbWsvJGkubWtgCisJJFNFRCAicyMkbGFzdHRva2VuIFxcXFwjJGxhc3R0b2tlbiMiIDwgbWsvJGkubWsgPiBtay8kaS5tay50bXAKKwltdiBtay8kaS5tay50bXAgbWsvJGkubWsKKworCSMgYWRkIGEgY2xvc2luZyBjb21tZW50CisJZWNobyAiIiA+PiBtay8kaS5taworCWVjaG8gIiMgZW5kIGNvbmZpZ3VyZSBnZW5lcmF0ZWQgY29kZSIgPj4gbWsvJGkubWsKK2RvbmUKKworY2hhbmdlcXVvdGUoWywgXSkKKworaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCisgICBlY2hvIC1lICJcbkZpbmFsIG1vZHVsZSBsaXN0OiAkbW9kdWxlX2xpc3RfY29kZSIKKyAgIGV4aXQKK2ZpCitpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCisgIEFDX01TR19DQUNIRV9BREQoW0FnZW50IE1vZHVsZSBsaXN0OiAkbW9kdWxlX2xpc3RfY29kZV0pCitmaQorQUNfU1VCU1RfRklMRShNT0RVTEVfTElTVCkKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfYykKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfbykKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfbG8pCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2Z0KQorQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfYykKK0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X28pCitBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9sbykKK0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2Z0KQorQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9jKQorQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9vKQorQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9sbykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfZnQpCitBQ19TVUJTVF9GSUxFKG1pYmdyb3VwX2xpc3RfbykKK0FDX1NVQlNUX0ZJTEUobWliZ3JvdXBfbGlzdF9sbykKK0FDX1NVQlNUX0ZJTEUobWliZ3JvdXBfbGlzdF9mdCkKK0FDX1NVQlNUX0ZJTEUoYWdlbnRncm91cF9saXN0X28pCitBQ19TVUJTVF9GSUxFKGFnZW50Z3JvdXBfbGlzdF9sbykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRncm91cF9saXN0X2Z0KQorCitBQ19TVUJTVChkZWZhdWx0X21pYnNfaW5zdGFsbCkKK0FDX1NVQlNUKGRsbGNsZWFucykKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX3J1bGVzKQorQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9kZXBzKQorQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfZGVwcykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfZGVwcykKKworQUNfTVNHX1JFU1VMVCguKQorCitpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KK0FDX01TR19DQUNIRV9BREQoQWdlbnQgTUlCIGNvZGU6ICAgICAgICAgICAgJG1vZHVsZV9saXN0KQorZmkKK0FDX01TR19DQUNIRV9BREQoQWdlbnQgTUlCIGNvZGU6ICAgICAgICAgICAgJHRvcF9sZXZlbF9tb2R1bGVzKQorCisjIGVuZCBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZworCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZF0pCitmb3IgaSBpbiAkbW9kdWxlX2RpcmVjdG9yaWVzOyBkbworICAkc3JjZGlyL21raW5zdGFsbGRpcnMgJGkKK2RvbmUKK0FDX01TR19SRVNVTFQoLikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGRlZmF1bHQgbWlicworIworQUNfTVNHX0NIRUNLSU5HKFtkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkXSkKK2lmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQlMiID0gIngiOyB0aGVuCisgIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkZGVmYXVsdF9taWJzIgorZmkKK2lmIHRlc3QgIngkRU5WX1NFUEFSQVRPUiIgIT0gIngiOyB0aGVuCisgIDoKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAjIG1pbmd3MzIgYW5kIGN5Z3dpbiB1c2UgJzsnIGFzIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlIHNlcGFyYXRvcgorICBFTlZfU0VQQVJBVE9SPSI7IgorICBORVRTTk1QX0RFRkFVTFRfTUlCUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIiB8ICRTRUQgJ3MvOi87L2cnYAorICBkZWZhdWx0X21pYnM9YGVjaG8gIiRkZWZhdWx0X21pYnMiIHwgJFNFRCAncy86LzsvZydgCitlbHNlCisgIEVOVl9TRVBBUkFUT1I9IjoiCitmaQorQUNfU1VCU1QoRU5WX1NFUEFSQVRPUikKK0FDX0RFRklORV9VTlFVT1RFRChbRU5WX1NFUEFSQVRPUl0sIFsiJEVOVl9TRVBBUkFUT1IiXSwKKyAgICAgICAgIFtFbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3Rlcy5dKQorQUNfREVGSU5FX1VOUVVPVEVEKFtFTlZfU0VQQVJBVE9SX0NIQVJdLCBbJyRFTlZfU0VQQVJBVE9SJ10sCisgICAgICAgICAgW0Vudmlyb25tZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIgc3Vycm91bmRlZCBieSBzaW5nbGUgcXVvdGVzLl0pCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQlMsIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIpCitBQ19TVUJTVChORVRTTk1QX0RFRkFVTFRfTUlCUykKK0FDX01TR19SRVNVTFQoJE5FVFNOTVBfREVGQVVMVF9NSUJTKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgc3ltYm9scyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gbWFrZWZpbGVzCisjCisKK2lmIGVjaG8gIiAkYWdlbnRfbW9kdWxlX2xpc3QgIiB8IFwKKyAgIGZncmVwICcgYWdlbnR4L2FnZW50eF9jb25maWcgJyB8IFwKKyAgIGZncmVwICcgYWdlbnR4L2NsaWVudCAnIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvcHJvdG9jb2wgJyA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFPScnCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0U9JyMnCitlbHNlCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRT0nIycKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRT0nJworZmkKK0FDX1NVQlNUKFtORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRV0pCitBQ19TVUJTVChbTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFXSkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjJiYTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliCkBAIC0wLDAgKzEsMjM0IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMKKyMgTWF5YmUgYWRkIGxpYnJhcnkgZXh0ZW5zaW9ucyBmb3IgdGhyZWFkIG11dGV4IGxvY2tpbmcuCisjCisKK2lmIHRlc3QgIngkd2l0aF9yZXNfbG9ja3MiID0gInh5ZXMiOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX1JFRU5UUkFOVCwgMSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCByZWVudHJhbnQvdGhyZWFkZWQKKyAgICAgY29kZSAoaW5jb21wbGV0ZSkuXSkKKworICAgIGNhc2UgJHRhcmdldF9vcyBpbgorCisgICAgYWl4KikKKwlDQ19SVU5USU1FX0FSRz0iJENDX1JVTlRJTUVfQVJHIC1scHRocmVhZHMiCisJOzsKKworICAgICopCisJOzsKKworICAgIGVzYWMKK2ZpCisKKyMKKyMgQWRkIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZSBmaWxlcy4KKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZV0pCitvdGhlcl9zcmNfbGlzdD0iIgorb3RoZXJfZnRvYmpzX2xpc3Q9IiIKK290aGVyX2xvYmpzX2xpc3Q9IiIKK290aGVyX29ianNfbGlzdD0iIgorb3RoZXJfYWdlbnRvYmpzPSIiCitvdGhlcl9sYWdlbnRvYmpzPSIiCitvdGhlcl9mdGFnZW50b2Jqcz0iIgorb3RoZXJfdHJhcGRfb2JqZWN0cz0iIgorCisjIFdpbjMyIHNlcnZpY2UgY29kZQoraWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKyAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5zZXJ2aWNlLmMgd2luc2VydmljZXJjLnJjIgorICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2luc2VydmljZS5vIHdpbnNlcnZpY2VyYy5vIgorICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5zZXJ2aWNlLmxvIHdpbnNlcnZpY2VyYy5sbyIKKyAgb3RoZXJfZnRvYmpzX2xpc3Q9IiRvdGhlcl9mdG9ianNfbGlzdCB3aW5zZXJ2aWNlLmZ0IHdpbnNlcnZpY2VyYy5mdCIKKyAgb3RoZXJfYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIgorICBvdGhlcl9sYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5sbyIKKyAgb3RoZXJfZnRhZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLmxvIgorICBvdGhlcl90cmFwZF9vYmplY3RzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIiAKK2ZpCisgIAorIyBXaW4zMiBwaXBlcworaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKyAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5waXBlLmMiCisgIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5waXBlLm8iCisgIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnBpcGUubG8iCisgIG90aGVyX2Z0b2Jqc19saXN0PSIkb3RoZXJfZnRvYmpzX2xpc3Qgd2lucGlwZS5mdCIKK2ZpCisKK0FDX1NVQlNUKG90aGVyX3NyY19saXN0KQorQUNfU1VCU1Qob3RoZXJfb2Jqc19saXN0KQorQUNfU1VCU1Qob3RoZXJfbG9ianNfbGlzdCkKK0FDX1NVQlNUKG90aGVyX2Z0b2Jqc19saXN0KQorQUNfU1VCU1Qob3RoZXJfYWdlbnRvYmpzKQorQUNfU1VCU1Qob3RoZXJfbGFnZW50b2JqcykKK0FDX1NVQlNUKG90aGVyX2Z0YWdlbnRvYmpzKQorQUNfU1VCU1Qob3RoZXJfdHJhcGRfb2JqZWN0cykKKworQUNfTVNHX1JFU1VMVChbJG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3RdKQorQUNfTVNHX1JFU1VMVChbJG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0c10pCisgIAorIworIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYnVpbGQKKyMKK2lmIHRlc3QgISAtZCBpbmNsdWRlOyB0aGVuCisgIG1rZGlyIGluY2x1ZGUKK2ZpCitpZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcDsgdGhlbgorICBta2RpciBpbmNsdWRlL25ldC1zbm1wCitmaQoraWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQ7IHRoZW4KKyAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcC9hZ2VudAorZmkKK2lmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnk7IHRoZW4KKyAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5CitmaQoraWYgdGVzdCAhIC1kIGluY2x1ZGUvdWNkLXNubXA7IHRoZW4KKyAgbWtkaXIgaW5jbHVkZS91Y2Qtc25tcAorZmkKKworaWYgdGVzdCAhIC1kIHNubXBsaWI7IHRoZW4KKyAgbWtkaXIgc25tcGxpYgorZmkKK2lmIHRlc3QgISAtZCBzbm1wbGliL3RyYW5zcG9ydHMgOyB0aGVuCisgIG1rZGlyIHNubXBsaWIvdHJhbnNwb3J0cworZmkKKworIworIyBEbyB0cmFuc3BvcnQgbW9kdWxlIHByb2Nlc3NpbmcuCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlXSkKKworIyBpbmNsdWRlIHRoZSBhY3R1YWwgY29kZSBjaGVja2luZworbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzKQorCitBQ19TVUJTVCh0cmFuc3BvcnRfaGRyX2xpc3QpCitBQ19TVUJTVCh0cmFuc3BvcnRfc3JjX2xpc3QpCitBQ19TVUJTVCh0cmFuc3BvcnRfb2JqX2xpc3QpCitBQ19TVUJTVCh0cmFuc3BvcnRfbG9ial9saXN0KQorQUNfU1VCU1QodHJhbnNwb3J0X2Z0b2JqX2xpc3QpCitmb3IgaSBpbiAkdHJhbnNwb3J0X2RlZl9saXN0OyBkbworICBBQ19ERUZJTkVfVU5RVU9URUQoJGkpCitkb25lCitBQ19NU0dfUkVTVUxUKCR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuKQorQUNfTVNHX0NBQ0hFX0FERChOZXR3b3JrIHRyYW5zcG9ydCBzdXBwb3J0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0KQorCisjIGNsZWFudXAKK3JtIC1mIG1vZHVsZV90bXBfaGVhZGVyLmgKKworIworIyBTZWN1cml0eSBtb2R1bGVzIHRvIHVzZQorIyAKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2VdKQorbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzKQorQUNfU1VCU1Qoc2VjdXJpdHlfc3JjX2xpc3QpCitBQ19TVUJTVChzZWN1cml0eV9oZHJfbGlzdCkKK0FDX1NVQlNUKHNlY3VyaXR5X29ial9saXN0KSAJIAorQUNfU1VCU1Qoc2VjdXJpdHlfbG9ial9saXN0KQorQUNfU1VCU1Qoc2VjdXJpdHlfZnRvYmpfbGlzdCkKK0FDX01TR19SRVNVTFQoJG5ld193aXRoX3NlY3VyaXR5KQorQUNfTVNHX0NBQ0hFX0FERChTTk1QdjMgU2VjdXJpdHkgTW9kdWxlczogICAgJG5ld193aXRoX3NlY3VyaXR5KQorCisjCisjIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIEtTTSB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBzdXBwb3J0CisjCisKK3JlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9CithbHJlYWR5X2NoZWNrZWRfa3JiNT1ubworCitmb3Igc2VjIGluICRuZXdfd2l0aF9zZWN1cml0eQorZG8KKyAgaWYgdGVzdCAieCRzZWMiID0gInhrc20iOyB0aGVuCisgICAgaWYgdGVzdCAieHllcyIgPSAieCRhbHJlYWR5X2NoZWNrZWRfa3JiNSI7IHRoZW4KKyAgICAgIGNvbnRpbnVlCisgICAgZWxzZQorICAgICAgYWxyZWFkeV9jaGVja2VkX2tyYjU9eWVzCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IHgkc2VjICE9IHhrc207IHRoZW4KKyAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSAkc2VjIgorICBlbHNlCisgICAgaWYgdGVzdCBubyA9ICR0cnlrcmI1OyB0aGVuCisgICAgICBBQ19NU0dfTk9USUNFKFtjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbV0pCisgICAgICBjb250aW51ZQorICAgIGZpCisKKyAgICBBQ19QQVRIX1BST0coW2tyYjVfY29uZmlnXSxrcmI1LWNvbmZpZyxbbm9dLCRrcmI1cGF0aC9iaW46JFBBVEgpCisKKyAgICBpZiB0ZXN0IG5vICE9ICRrcmI1X2NvbmZpZzsgdGhlbgorICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJGtyYjVfY29uZmlnIC0tY2ZsYWdzYCIKKyAgICAgIExJQlM9IiRMSUJTIGAka3JiNV9jb25maWcgLS1saWJzYCIKKyAgICBlbGlmIHRlc3QgJGtyYjVwYXRoICE9IG5vOyB0aGVuCisgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJGtyYjVwYXRoKQorICAgIGVsc2UKKyAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgvdXNyL2tlcmJlcm9zKQorICAgIGZpCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBrcmI1XSkKKyAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV9rcmI1LAorICAgICAgQUNfQ0hFQ0tfTElCKGtyYjUsIGtyYjVfaW5pdF9jb250ZXh0LAorCWFjX2N2X2hhdmVfa3JiNT15ZXMsIGFjX2N2X2hhdmVfa3JiNT1ubworICAgICAgKQorICAgICkKKworICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfa3JiNSA9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0ICJ4JGFza2Vka3JiNSIgPSAieHllcyI7IHRoZW4KKwlBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIGtyYjUgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCisgICAgICBmaQorICAgICAgQUNfTVNHX1JFU1VMVChuby4gZGlzYWJsaW5nIGtzbSkKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAgIAorICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5IGtzbSIKKworICAgIEFDX01TR19DSEVDS0lORyhbW2ZvciBoZWltZGFsXV0pCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2hlaW1kYWwsCisgICAgW0FDX1RSWV9DT01QSUxFKAorICAgICAgWyNpbmNsdWRlIDxrcmI1Lmg+XSwKKyAgICAgIFtjb25zdCBjaGFyICp2ID0gaGVpbWRhbF92ZXJzaW9uO10sCisgICAgICBhY19jdl9oZWltZGFsPXllcywKKyAgICAgIGFjX2N2X2hlaW1kYWw9bm8KKyAgICApXSkKKyAgICBBQ19NU0dfUkVTVUxUKCRhY19jdl9oZWltZGFsKQorICAgIGlmIHRlc3QgJGFjX2N2X2hlaW1kYWwgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMLCAxLAorICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91J3JlIHVzaW5nIEhlaW1kYWwgS2VyYmVyb3NdKQorICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgorCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGFzbjEgLWxjb21fZXJyIC1scm9rZW4iCisgICAgICBmaQorICAgIGVsaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgorCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGNvbV9lcnIiCisgICAgZmkKKworICAgIEFDX01TR19DSEVDS0lORyhbdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2VdKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQsCisgICAgICBBQ19DSEVDS19MSUIoazVjcnlwdG8sIGtyYjVfaW5pdF9jb250ZXh0LAorCWFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD15ZXMsIGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD1ubworICAgICAgKQorICAgICkKKworICAgIGlmIHRlc3QgeWVzID0gJGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVDsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChuZXcgTUlUIGNyeXB0byBBUEkpCisgICAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfS0VSQkVST1NfTUlULCAxLAorICAgICAgICBbRGVmaW5lIHRoaXMgaWYgd2UncmUgdXNpbmcgdGhlIG5ldyBNSVQgY3J5cHRvIEFQSV0pCisgICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCisJTElCUz0iJExJQlMgLWxrNWNyeXB0byIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChvbGQgTUlUIGNyeXB0byBBUEkpCisgICAgZmkKKyAgICBBQ19DSEVDS19GVU5DUyhba3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5XSkKKyAgZmkKK2RvbmUKKworbmV3X3dpdGhfc2VjdXJpdHk9JHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkKKworIworIyBEZXRlY3QgbG1fc2Vuc29ycyB2ZXJzaW9uCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19DSEVDS19ERUNMUyhbc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzXSwKKyAgICAgICAgW0FDX0RFRklORShORVRTTk1QX1VTRV9TRU5TT1JTX1YzLCAxLAorICAgICAgICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxtX3NlbnNvcnMgdjMgb3IgbGF0ZXJdKV0sLAorICAgICAgICBbWyNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD5dXSkKK2ZpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNjYTdkCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcwpAQCAtMCwwICsxLDcwIEBACisjIC0qLSBzaCAtKi0KK3NlY3VyaXR5X2RlZl9saXN0PSJ1c20iCitzZWN1cml0eV9zcmNfbGlzdD0iIgorc2VjdXJpdHlfb2JqX2xpc3Q9IiIKK3NlY3VyaXR5X2xvYmpfbGlzdD0iIgorc2VjdXJpdHlfZnRvYmpfbGlzdD0iIgorc2VjdXJpdHlfbW9kX2xpc3Q9IiAiCisKK25ld193aXRoX3NlY3VyaXR5PQorbmV3X3dpdGhfb3V0X3NlY3VyaXR5PWBlY2hvICR3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzIHwgdHIgLCAnICdgCisKKyMgQXNzaWduIGFkZGl0aW9uYWwgc2VjdXJpdHkgbW9kdWxlcworZm9yIGkgaW4gYGVjaG8gJHdpdGhfc2VjdXJpdHlfbW9kdWxlcyB8IHRyICwgJyAnYDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGVjaG8KKyAgICBBQ19NU0dfRVJST1IoW3NlY3VyaXR5IG1vZHVsZSBjb25mbGljdCAtICRpIGJvdGggaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkXSkKKyAgZWxpZiBlY2hvICIgJG5ld193aXRoX3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgOiAjIERvdWJsZSBkZWZpbmUsIGlnbm9yZQorICBlbHNlCisgICAgbmV3X3dpdGhfc2VjdXJpdHk9IiRuZXdfd2l0aF9zZWN1cml0eSAkaSIKKyAgZmkKK2RvbmUKKworIyBBZGQgZGVmYXVsdCBzZWN1cml0eSBtb2R1bGVzCitmb3IgaSBpbiAkc2VjdXJpdHlfZGVmX2xpc3Q7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICA6ICMgRXhjbHVkZWQsIGlnbm9yZQorICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICA6ICMgRG91YmxlIGRlZmluZSwgaWdub3JlCisgIGVsc2UKKyAgICBuZXdfd2l0aF9zZWN1cml0eT0iJG5ld193aXRoX3NlY3VyaXR5ICRpIgorICBmaQorZG9uZQorCisjIEdlbmVyYXRlIG91dHB1dCBmaWxlcworOiAke3NlY3VyaXR5X2luaXRfZmlsZTo9J3NubXBsaWIvc25tcHNtX2luaXQuaCd9Cis6ICR7c2VjdXJpdHlfc2h1dGRvd25fZmlsZTo9J3NubXBsaWIvc25tcHNtX3NodXRkb3duLmgnfQorOiAke3NlY3VyaXR5X2luY2xfZmlsZTo9J2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCd9CisKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbml0X2ZpbGUKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9zaHV0ZG93bl9maWxlCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5jbF9maWxlCisKK2ZvciBpIGluICRuZXdfd2l0aF9zZWN1cml0eTsgZG8KKyAgY2ZpbGU9InNubXAiJGkiLmMiCisgIGhmaWxlPSJzbm1wIiRpIi5oIgorCisgICMgbWFrZSBzdXJlIHN1cHBvcnQgZXhpc3RzIGZvciBpdAorICBpZiB0ZXN0IC1mICRzcmNkaXIiL3NubXBsaWIvIiRjZmlsZSAtYSAtZiAkc3JjZGlyIi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiRoZmlsZTsgdGhlbgorICAgIDoKKyAgZWxzZQorICAgIGVjaG8KKyAgICBBQ19NU0dfRVJST1IoTm8gc3VjaCBzZWN1cml0eSBtb2R1bGU6ICRpIC8gJGNmaWxlIC8gJGhmaWxlKQorICBmaQorCisgICMgZGVmaW5lIGEgYnVuY2ggb2Ygc3R1ZmYgdG8gZW5hYmxlIGl0CisgIHNlY3VyaXR5X21vZF9saXN0PSIke3NlY3VyaXR5X21vZF9saXN0fSAkaSIKKyAgc2VjdXJpdHlfc3JjX2xpc3Q9IiRzZWN1cml0eV9zcmNfbGlzdCAkY2ZpbGUiCisgIHNlY3VyaXR5X3NyY19saXN0PSIkc2VjdXJpdHlfc3JjX2xpc3QgJGNmaWxlIgorICBzZWN1cml0eV9oZHJfbGlzdD0iJHNlY3VyaXR5X2hkcl9saXN0ICRoZmlsZSIKKyAgc2VjdXJpdHlfb2JqX2xpc3Q9IiRzZWN1cml0eV9vYmpfbGlzdCBzbm1wIiRpIi5vIgorICBzZWN1cml0eV9sb2JqX2xpc3Q9IiRzZWN1cml0eV9sb2JqX2xpc3Qgc25tcCIkaSIubG8iCisgIHNlY3VyaXR5X2Z0b2JqX2xpc3Q9IiRzZWN1cml0eV9mdG9ial9saXN0IHNubXAiJGkiLmZ0IgorICBlY2hvICJpbml0XyIkaSIoKTsiID4+ICRzZWN1cml0eV9pbml0X2ZpbGUKKyAgZWNobyAic2h1dGRvd25fIiRpIigpOyIgPj4gJHNlY3VyaXR5X3NodXRkb3duX2ZpbGUKKyAgZWNobyAiI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvJGhmaWxlPiIgPj4gJHNlY3VyaXR5X2luY2xfZmlsZQorICBkZWZfbmFtZT0iQVNfVFJfQ1BQKFtORVRTTk1QX1NFQ01PRF8kaV0pIgorICBBQ19ERUZJTkVfVU5RVU9URUQoJGRlZl9uYW1lKQorZG9uZQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTBiOTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cwpAQCAtMCwwICsxLDEzNyBAQAorIyAtKi0gc2ggLSotCit0cmFuc3BvcnRfc3JjX2xpc3Q9IiIKK3RyYW5zcG9ydF9oZHJfbGlzdD0iIgordHJhbnNwb3J0X2RlZl9saXN0PSIiCit0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiIKK3RyYW5zcG9ydF9hZGRfbGlzdD0iIgorbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfdHJhbnNwb3J0cyB8ICRTRUQgJ3MvLC8gL2c7J2AKK25ld193aXRoX291dF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF9vdXRfdHJhbnNwb3J0cyB8ICRTRUQgJ3MvLC8gL2c7J2AKKworIyBzZXQgdXAgdGhlIENQUCBjb21tYW5kCitNT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAtSSR7c3JjZGlyfSAtSSR7c3JjZGlyfS9pbmNsdWRlIgorCisjCisjIEFkZCB0aGUgZGVmYXVsdCB0cmFuc3BvcnRzIHRvIHRoZSBsaXN0CisjCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbiAKKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBBbGlhcyBDYWxsYmFjayIKK2Vsc2UKKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBBbGlhcyBVbml4IENhbGxiYWNrIgorZmkKK2lmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUElQdjYgVENQSVB2NiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdCIKK2ZpCitmb3IgaSBpbiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICB0cmFuc3BvcnRfYWRkX2xpc3Q9IiRpICR0cmFuc3BvcnRfYWRkX2xpc3QiCisgIGZpCitkb25lCituZXdfdHJhbnNwb3J0X2xpc3Q9IiR0cmFuc3BvcnRfYWRkX2xpc3QgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0IgorCitpZiB0ZXN0ICJ4JGN0b3JfaGVhZGVyIiA9ICJ4IiA7IHRoZW4KKyAgIGN0b3JfaGVhZGVyPSJzbm1wbGliL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaCIKK2ZpCisKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRjdG9yX2hlYWRlcgord2hpbGUgdGVzdCAieCRuZXdfdHJhbnNwb3J0X2xpc3QiICE9ICJ4IjsgZG8KKyAgZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdD0iIgorICBmb3IgaSBpbiAkbmV3X3RyYW5zcG9ydF9saXN0OyBkbworICAgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgdHJ1ZQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUElQdjYiIC1vICJ4JGkiID0gInhUQ1BJUHY2IjsgdGhlbgorICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkKQorICAgICAgICAgIGZpCisgICAgICBmaQorICAgICAgdHJhbnNwb3J0X3NyYz0idHJhbnNwb3J0cy9zbm1wIiRpIkRvbWFpbi5jIgorICAgICAgdHJhbnNwb3J0X2hkcj0ic25tcCIkaSJEb21haW4uaCIKKyAgICAgIHJlbF90cmFuc3BvcnRfc3JjPSJzbm1wbGliLyIkdHJhbnNwb3J0X3NyYworICAgICAgcmVsX3RyYW5zcG9ydF9oZHI9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJHRyYW5zcG9ydF9oZHIKKyAgICAgIGxjX2k9YGVjaG8gJGkgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisgICAgICBjdG9yX2ZuPSJuZXRzbm1wXyIkbGNfaSJfY3RvciIKKyAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIjsgdGhlbgorICAgICAgICB0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgJGkiCisgICAgICAgIHRyYW5zcG9ydF9zcmNfbGlzdD0iJHRyYW5zcG9ydF9zcmMgJHRyYW5zcG9ydF9zcmNfbGlzdCIKKyAgICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9oZHIiOyB0aGVuCisgICAgICAgICAgdHJhbnNwb3J0X2hkcl9saXN0PSIkdHJhbnNwb3J0X2hkciAkdHJhbnNwb3J0X2hkcl9saXN0IgorICAgICAgICBmaQorICAgICAgICB0cmFuc3BvcnRfZGVmPWBlY2hvICRpIHwgJFNFRCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICAgICAgICB0cmFuc3BvcnRfZGVmX2xpc3Q9Ik5FVFNOTVBfVFJBTlNQT1JUXyIkdHJhbnNwb3J0X2RlZiJfRE9NQUlOICR0cmFuc3BvcnRfZGVmX2xpc3QiCisgICAgICBlbHNlCisgICAgICAgIGVjaG8KKyAgICAgICAgQUNfTVNHX0VSUk9SKENhbm5vdCBmaW5kIGZpbGUgJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgdG8gc3VwcG9ydCBTTk1QIHRyYW5zcG9ydCBkb21haW4gJGkuKQorICAgICAgZmkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBidWlsZCBhIHBzZXVkbyBpbmNsdWRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGN1cnJlbnQgY29uZmlnIGFuZAorICAgICAgIyBzeXN0ZW0gc3ltYm9sczoKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorICAgICAgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQorI3VuZGVmIE5FVFNOTVBfTUlOSU1BTF9DT0RFCisjZGVmaW5lIE5FVF9TTk1QX0NPTkZJR19ICisjdW5kZWYgY29uZmlnX3JlcXVpcmUKKyNkZWZpbmUgY29uZmlnX3JlcXVpcmUoZm9vKSBjb25maWdfY2hlY2tpdF9yZXF1aXJlKGZvbykKKyN1bmRlZiBjb25maWdfZXJyb3IKKyNkZWZpbmUgY29uZmlnX2Vycm9yKGZvbykgY29uZmlnX2NoZWNraXRfZXJyb3IoZm9vKQorI2luY2x1ZGUgIiRyZWxfdHJhbnNwb3J0X2hkciJdXSldKQorICAgICAgbXYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyAgICAgICMKKyAgICAgICMgY2hlY2sgZm9yIGRlcGVuZGVuY2llcyB1c2luZyBjb25maWdfcmVxdWlyZSgpIG1hY3JvCisgICAgICAjCisgICAgICBzdWJfbGlzdD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgY29uZmlnX2NoZWNraXRfcmVxdWlyZSB8ICRTRUQgJ3MvLipjb25maWdfY2hlY2tpdF9yZXF1aXJlICooICpcKC4qXCkgKikuKi9cMS8nYAorICAgICAgaWYgdGVzdCAieCRzdWJfbGlzdCIgIT0gIngiIDsgdGhlbgorICAgICAgICBmb3IgaiBpbiAkc3ViX2xpc3QgOyBkbworCSAgaWYgZWNobyAiICRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0ICRuZXdfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbCA7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorICAgICAgICAgICAgZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdD0iJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QgJGoiCisJICBmaQorICAgICAgICBkb25lCisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIGNoZWNrIGZvciBlcnJvcnMgdXNpbmcgY29uZmlnX2Vycm9yKCkgbWFjcm8KKyAgICAgICMKKyAgICAgIGVycm9yX2xpc3Q9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIGNvbmZpZ19jaGVja2l0X2Vycm9yIHwgJFNFRCAncy8uKmNvbmZpZ19jaGVja2l0X2Vycm9yKFwoLipcKSkuKi9cMS9nJ2AKKyAgICAgIGlmIHRlc3QgIngkZXJyb3JfbGlzdCIgIT0gIngiIDsgdGhlbgorICAgICAgICBlY2hvICIiCisgICAgICAgIEFDX01TR19FUlJPUigkZXJyb3JfbGlzdCkKKyAgICAgIGZpCisKKyAgICAgICMKKyAgICAgICMgQ2hlY2sgZm9yIG5lZWRlZCBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyB0byBjYWxsCisgICAgICAjCisgICAgICBmb3VuZD1gZ3JlcCAkY3Rvcl9mbiAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyY2AKKyAgICAgIGlmIGdyZXAgJGN0b3JfZm4gJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgPiAvZGV2L251bGwgOyB0aGVuCisJIyB3ZSBhZGQgdGhlbSBkb3duIGJlbG93IGluc3RlYWQgb2YgaGVyZSB0byBtYWtlIHN1cmUKKwkjIGNvbmZpZ19yZXF1aXJlIGRlcGVuZGVuY3kgY29uc3RydWN0b3JzIGdldCBjYWxsZWQgZmlyc3QuCisJdHJfaW5pdF9saXN0PSIkY3Rvcl9mbiAkdHJfaW5pdF9saXN0IgorICAgICAgZmkKKyAgICBmaQorICBkb25lICMgZm9yIGVhY2ggbmV3IHRyYW5zcG9ydAorICBuZXdfdHJhbnNwb3J0X2xpc3Q9IiRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0IgorZG9uZSAjIHdoaWxlIG5ldyB0cmFuc3BvcnRzIGV4aXN0Cit0cmFuc3BvcnRfb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLm8vZydgCit0cmFuc3BvcnRfbG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5sby9nJ2AKK3RyYW5zcG9ydF9mdG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5mdC9nJ2AKK2ZvciBpIGluICR0cl9pbml0X2xpc3QgOyBkbworICAgZWNobyAiJGkoKTsiID4+ICRjdG9yX2hlYWRlcgorZG9uZQorCisjIyB3aW4zMiBwbGF0Zm9ybXMgcmVxdWlyZSBpbmV0X250b3AgZXRjLgoraWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICBpZiBlY2hvICIkdHJhbnNwb3J0X2RlZl9saXN0IiB8ICRHUkVQICJJUFY2IiA+L2Rldi9udWxsOyB0aGVuCisgICAgdHJhbnNwb3J0X29ial9saXN0PSIkdHJhbnNwb3J0X29ial9saXN0IGluZXRfbnRvcC5vIGluZXRfcHRvbi5vIgorICAgIHRyYW5zcG9ydF9sb2JqX2xpc3Q9IiR0cmFuc3BvcnRfbG9ial9saXN0IGluZXRfbnRvcC5sbyBpbmV0X3B0b24ubG8iCisgICAgdHJhbnNwb3J0X2Z0b2JqX2xpc3Q9IiR0cmFuc3BvcnRfZnRvYmpfbGlzdCBpbmV0X250b3AuZnQgaW5ldF9wdG9uLmZ0IgorICBmaQorZmkKKworaWYgdGVzdCAieCR0cmFuc3BvcnRfcmVzdWx0X2xpc3QiID0geCA7IHRoZW4KKyAgIEFDX01TR19FUlJPUihbTm8gdHJhbnNwb3J0cyBjb25maWd1cmVkLCBhdCBsZWFzdCBvbmUgbXVzdCBiZSBwcm92aWRlZF0pCitmaQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1Mzg1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMKQEAgLTAsMCArMSwzMjQgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworQUNfRlVOQ19BTExPQ0EgICAgICAgICAgIyAgYWxsb2NhKCkKK0FDX1BST0dfR0NDX1RSQURJVElPTkFMCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIC1hICIke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrc2V0fSIgIT0gc2V0Cit0aGVuCisgICMgQ3Jvc3MtY29tcGlsaW5nIGFuZCBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIGhhcyBub3QgYmVlbiBzZXQgLSBhc3N1bWUKKyAgIyB0aGF0IG1lbWNtcCgpIGlzIGF2YWlsYWJsZS4KKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXMKK2Vsc2UKKyAgIyBOYXRpdmUgY29tcGlsYXRpb24gLSB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIG1lbWNtcCgpLgorICBBQ19GVU5DX01FTUNNUAorZmkKKworQUNfVFlQRV9TSUdOQUwKKworIyMKKyMgICBTdGFuZC1hbG9uZSBmdW5jdGlvbiBjaGVja3M6CisjIworIyAgQ29yZToKK0FDX0NIRUNLX0ZVTkNTKFtscmFuZDQ4ICAgICAgICAgcmFuZCAgICAgICAgICByYW5kb20gICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzaWduYWwgICAgICAgICAgc2lnc2V0ICAgICAgICAgICAgICAgICAgXSApCisKKyMgIExpYnJhcnk6CitBQ19DSEVDS19GVU5DUyhbY2xvc2VkaXIgICAgICAgIGZnZXRjX3VubG9ja2VkICBmbG9ja2ZpbGUgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbZm9yayAgICAgICAgICAgIGZ1bmxvY2tmaWxlICAgICBnZXRpcG5vZGVieW5hbWUgIF0gZG5sCisgICAgICAgICAgICAgICBbZ2V0dGltZW9mZGF5ICAgIGlmX25hbWV0b2luZGV4ICBta3N0ZW1wICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbb3BlbmRpciAgICAgICAgIHJlYWRkaXIgICAgICAgICByZWdjb21wICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2V0ZW52ICAgICAgICAgIHNldGl0aW1lciAgICAgICBzZXRsb2NhbGUgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2V0c2lkICAgICAgICAgIHNucHJpbnRmICAgICAgICBzdHJjYXNlc3RyICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc3RyZHVwICAgICAgICAgIHN0cmVycm9yICAgICAgICBzdHJuY2FzZWNtcCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc3lzY29uZiAgICAgICAgIHRpbWVzICAgICAgICAgICB2c25wcmludGYgICAgICAgIF0gKQorCisjIElQdjQvSVB2NiBmdW5jdGlvbiBjaGVja3MuIEFDX0NIRUNLX0ZVTkMoKSBjYW4ndCBmaW5kIHRoZXNlIG9uIE1pbkdXCisjIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRoZSBfX2NkZWNsIGNhbGxpbmcgY29udmVudGlvbiBvbiBNaW5HVy4KK2Nhc2UgeCR0YXJnZXRfb3MgaW4KKyAgeG1pbmd3KikKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8d3MydGNwaXAuaD5dLAorICAgIFsgZ2FpX3N0cmVycm9yKDApOyBdKV0sCisgICAgWyBhY19jdl9mdW5jX2dhaV9zdHJlcnJvcj15ZXMKKyAgICAgIEFTX0VDSE8gIiNkZWZpbmUgSEFWRV9HQUlfU1RSRVJST1IgMSIgPj5jb25mZGVmcy5oCisgICAgXSwgWyBdKQorCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHdzMnRjcGlwLmg+XSwKKyAgICBbIGdldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOyBdKV0sCisgICAgWyBhY19jdl9mdW5jX2dldGFkZHJpbmZvPXllcworICAgICAgQVNfRUNITyAiI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEiID4+Y29uZmRlZnMuaAorICAgIF0sIFsgXSkKKworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx3aW5zb2NrMi5oPl0sCisgICAgWyBnZXRob3N0YnluYW1lKE5VTEwpOyBdKV0sCisgICAgWyBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzCisgICAgICBBU19FQ0hPICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxIiA+PmNvbmZkZWZzLmgKKyAgICBdLCBbIF0pCisKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8d2luc29jazIuaD5dLAorICAgIFsgZ2V0aG9zdGJ5YWRkcihOVUxMKTsgXSldLAorICAgIFsgYWNfY3ZfZnVuY19nZXRob3N0YWRkcj15ZXMKKyAgICAgIEFTX0VDSE8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEiID4+Y29uZmRlZnMuaAorICAgIF0sIFsgXSkKKworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx3aW5zb2NrMi5oPl0sCisgICAgWyBnZXRob3N0bmFtZShOVUxMLCAwKTsgXSldLAorICAgIFsgYWNfY3ZfZnVuY19nZXRob3N0bmFtZT15ZXMKKyAgICAgIEFTX0VDSE8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxIiA+PmNvbmZkZWZzLmgKKyAgICBdLCBbIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkNTKFtnYWlfc3RyZXJyb3IgZ2V0YWRkcmluZm8gZ2V0aG9zdGJ5bmFtZSBnZXRob3N0YnluYW1lMiBnZXRob3N0bmFtZSBnZXRob3N0YnlhZGRyXSkKKyAgICA7OworZXNhYworCitBQ19DT05GSUdfTElCT0JKX0RJUihbc25tcGxpYl0pCisKK0FDX1JFUExBQ0VfRlVOQ1MoW2dldG9wdCAgICAgICAgaW5ldF9udG9wICAgICBpbmV0X3B0b24gICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzdHJsY2F0ICAgICAgIHN0cmxjcHkgICAgICAgc3RydG9rX3IgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3RydG9sICAgICAgICBzdHJ0b3VsICAgICAgIHN0cnRvdWxsICAgICAgICAgXSApCisKKyMgIEFnZW50OgorQUNfQ0hFQ0tfRlVOQ1MoW2NnZXRuZXh0ICAgICAgICBjaG93biAgICAgICAgICBleGVjdiAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtnYWlfc3RyZXJyb3IgICAgICAgICAgICAgICAgICAgZ2V0Z3JuYW0gICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbZ2V0aG9zdG5hbWUgICAgIGdldGxvYWRhdmcgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2dldHBpZCAgICAgICAgICBnZXRwd25hbSAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtoYXNtbnRvcHQgICAgICAgaW5pdGdyb3VwcyAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbaWZfbmFtZWluZGV4ICAgIGlmX2luZGV4dG9uYW1lIGlmX25hbWV0b2luZGV4ICBdIGRubAorICAgICAgICAgICAgICAgW2xvY2FsdGltZV9yICAgICBta3N0ZW1wICAgICAgICBta3RpbWUgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtwb2xsICAgICAgICAgICAgcmVnY29tcCAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2V0Z2lkICAgICAgICAgIHNldGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NldG1udGVudCAgICAgICBzZXR1aWQgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzaWdhY3Rpb24gICAgICAgc2lnYmxvY2sgICAgICBzaWdob2xkICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2lncHJvY21hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3N0YXRmcyAgICAgICAgICBzdGF0dmZzICAgICAgIHN0aW1lICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzdHJuY2FzZWNtcCAgICAgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbdW5hbWUgICAgICAgICAgIHVzbGVlcCAgICAgICAgICAgICAgICAgICAgICAgICBdICkKKworIyAgQXBwczoKK0FDX0NIRUNLX0ZVTkNTKFtnZXRkdGFibGVzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbZ2V0Z3JuYW0gICAgICAgIGdldHBpZCAgICAgICAgZ2V0cHduYW0gICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NldGdpZCAgICAgICAgICBzZXRncm91cHMgICAgIHNldHVpZCAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFt0Y2dldGF0dHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gKQorCisjICBOb3QtVXNlZDoKK0FDX0NIRUNLX0ZVTkNTKFtpZl9mcmVlbmFtZWluZGV4ICAgICAgICAgICAgICBnZXRwYWdlc2l6ZSAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbbHNlZWs2NCAgICAgICAgIHByZWFkNjQgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NlbGVjdCAgICAgICAgICBzaWdhbHJtICAgICAgIHNvY2tldCAgICAgICAgICAgXSApCisKKworIyMKKyMgICBNb3JlIGNvbXBsZXggZnVuY3Rpb24gY2hlY2tzOgorIyAgICAgICAgICAgKEFnZW50KQorIyMKKworIyAgICAgICBycG1HZXRQYXRoIGNoZWNrIG5lZWRzIGNsZWFuIExJQlMgZW52aXJvbm1lbnQgICAoTGludXgpCisjCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICAgIE9MRExJQlM9JExJQlMKKyAgICBMSUJTPSRMTUlCTElCUworICAgIEFDX0NIRUNLX0ZVTkNTKHJwbUdldFBhdGgpCisgICAgTElCUz0kT0xETElCUworZmkKKworIyAgICAgICBzdGF0ZnMoIGNoYXIgKiwgc3RydWN0IGZzX2RhdGEqICkgICAgICAgICAgICAgICAoVWx0cml4KQorIworQUNfTVNHX0NIRUNLSU5HKFtbZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KV1dKQorQUNfQ0FDSEVfVkFMKAorICAgIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEsCisgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfRlNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy9mc190eXBlcy5oPgorI2VuZGlmCittYWluICgpCit7CitzdHJ1Y3QgZnNfZGF0YSBmc2Q7CisvKiBVbHRyaXgncyBzdGF0ZnMgcmV0dXJucyAxIGZvciBzdWNjZXNzLAorICAgMCBmb3Igbm90IG1vdW50ZWQsIC0xIGZvciBmYWlsdXJlLiAgKi8KK2V4aXQgKHN0YXRmcyAoIi4iLCAmZnNkKSAhPSAxKTsKK31dXSldLAorICAgIFtmdV9jdl9zeXNfc3RhdF9mc19kYXRhPXllc10sCisgICAgW2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm9dLAorICAgIFtmdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vXSldKQorQUNfTVNHX1JFU1VMVCgkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSkKK2lmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoU1RBVF9TVEFURlNfRlNfREFUQSwgMSwKKyAgICAgICAgW0RlZmluZSBpZiBzdGF0ZnMgdGFrZXMgMiBhcmdzIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGhhcworICAgICAgICAgdHlwZSBzdHJ1Y3QgZnNfZGF0YS4gQDw6QFVsdHJpeEA6PkBdKQorZmkKKworCisjIworIyAgIE90aGVyIGZ1bmN0aW9uLXJlbGF0ZWQgY2hlY2tzOgorIyAgICAgICAgICAgKGdlbmVyYWwgYnVpbGQpCisjIworCisjICAgICAgIEhvdyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24KKyMKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uXSwKKyAgICAgICAgICAgICAgIFtuZXRzbm1wX2N2X19mdW5jX19uYW1lXSxbCisgICAgbmV0c25tcF9jdl9fZnVuY19fbmFtZT1ubworICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKCxbW2NvbnN0IGNoYXIqIGNwID0gX19mdW5jX187XV0pXSwKKyAgICAgICAgW25ldHNubXBfY3ZfX2Z1bmNfX25hbWU9X19mdW5jX19dKQorICAgIGlmIHRlc3QgIiRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiA9IG5vIDsgdGhlbgorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oLFtbY29uc3QgY2hhciogY3AgPSBfX0ZVTkNUSU9OX187XV0pXSwKKyAgICAgICAgW25ldHNubXBfY3ZfX2Z1bmNfX25hbWU9X19GVU5DVElPTl9fXSkKKyAgICBmaV0pCitpZiB0ZXN0ICIkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgIT0gbm87IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW05FVFNOTVBfRlVOQ1RJT05dLFskbmV0c25tcF9jdl9fZnVuY19fbmFtZV0sCisgICAgICAgIFtTaG91bGQgZXZhbHVhdGUgdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaWYgZGVmaW5lZF0pCitmaQorCisKKyMgICAgICAgV2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuICAgICAgKFNDTyBVbml4d2FyZSkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtbd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSldXSwKKyAgICAgICAgICAgICAgICBbbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmVdLAorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCitzdGF0aWMgaW5saW5lIGludCBuZXN0ZWRfaW5saW5lX2Z1bmN0aW9uKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CitpbmxpbmUgaW50IG1haW5faW5saW5lX2Z1bmN0aW9uKCB2b2lkICkgeworICByZXR1cm4gbmVzdGVkX2lubGluZV9mdW5jdGlvbigpOworfQorICAgIF0pXSwKKyAgICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9bm8sCisgICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcykpCisKKworIyAgICAgICBZZXMgLSAgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAgICAgICAoU29sYXJpcyAyLngpCisjCitjYXNlICIkdGFyZ2V0X29zIiBpbgorICAgIHNvbGFyaXMqKQorICAgICAgICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgOzsKK2VzYWMKKworaWYgdGVzdCAiJG5ldHNubXBfY3ZfYnJva2VuX2lubGluZSIgPSB5ZXMgOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX0JST0tFTl9JTkxJTkUsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIHVuc3VwcG9ydGVkXSkKK2ZpCisKKworIyMKKyMgICBNaXMtcGxhY2VkIChub24tZnVuY3Rpb24pIGNoZWNrczoKKyMjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmhdLAorICAgICAgICAgICAgICAgbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIsCisgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZm5kZWYgU0lPQ0dJRkFERFIKK05vIFNJT0NHSUZBRERSIGZvdW5kIGhlcmUuCisjZW5kaWYKKyAgICAgICAgXV0pXSwKKyAgICBbbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9eWVzXSwKKyAgICBbbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9bm9dKSkKK2lmIHRlc3QgJG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSID0geWVzOyB0aGVuCisgIEFDX0RFRklORShTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIsIDEsCisgICBbZGVmaW5lIGlmIFNJT0NHSUZBRERSIGV4aXN0cyBpbiBzeXMvaW9jdGwuaF0pCitmaQorCisjIworIyAgIENoZWNrIGhvdyB0byBwcmludCBhIHNpemVfdCB2YXJpYWJsZQorIyMKKworQUNfQ0FDSEVfQ0hFQ0soCisgICAgW3RoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYSBzaXplX3RdLAorICAgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUsCisgICAgW200X2ZvcmVhY2goW1RZUEVdLCBbW2ludF0sW2xvbmddLFtsb25nIGxvbmddLFtzaG9ydF0sW2NoYXJdXSwKKyAgICAgW2lmIFtbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXV0gOyB0aGVuCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1BST0dSQU0oCitbQUNfSU5DTFVERVNfREVGQVVMVCgpCitleHRlcm4gdW5zaWduZWQgVFlQRSB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7XSwKKyAgICAgICAgICAgICAgICAgW10pXSwKKyAgICAgICAgICAgICBbbmV0c25tcF9jdl9zaXplX3RfdHlwZT0iVFlQRSJdKQorICAgICBmaQorICAgIF0pXSkKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnRmIGEgc2l6ZV90XSkKK2Nhc2UgIiRuZXRzbm1wX2N2X3NpemVfdF90eXBlIiBpbgorICAgIGNoYXJ8c2hvcnR8aW50KSBuZXRzbm1wX1BSSXo9IiIgOzsKKyAgICBsb25nKSBuZXRzbm1wX1BSSXo9ImwiIDs7CisgICAgImxvbmcgbG9uZyIpIG5ldHNubXBfUFJJej0ibGwiIDs7CisgICAgKikgQUNfTVNHX0VSUk9SKFt1bmRlcmx5aW5nIHR5cGUgb2Ygc2l6ZV90IG5vdCBrbm93bl0pIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRuZXRzbm1wX1BSSXopCitBQ19ERUZJTkVfVU5RVU9URUQoW05FVFNOTVBfUFJJel0sIFsiJG5ldHNubXBfUFJJeiJdLAorICAgICAgICAgICAgICAgICAgIFtTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgc2l6ZV90IG9yIHNzaXplX3RdKQorCisjIworIyAgIENoZWNrIGhvdyB0byBwcmludCBhIHVpbnQzMl90IHZhcmlhYmxlCisjIworCitBQ19DQUNIRV9DSEVDSygKKyAgICBbdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhbiB1aW50MzJfdF0sCisgICAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlLAorICAgIFttNF9mb3JlYWNoKFtUWVBFXSwgW1tjaGFyXSxbc2hvcnRdLFtpbnRdLFtsb25nXSxbbG9uZyBsb25nXV0sCisgICAgIFtpZiBbWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXV0gOyB0aGVuCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1BST0dSQU0oCitbQUNfSU5DTFVERVNfREVGQVVMVCgpCitleHRlcm4gdW5zaWduZWQgVFlQRSB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTtdLAorICAgICAgICAgICAgICAgICBbXSldLAorICAgICAgICAgICAgIFtuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9IlRZUEUiXSkKKyAgICAgZmkKKyAgICBdKV0pCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50ZiBhIHVpbnQzMl90XSkKK2Nhc2UgIiRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUiIGluCisgICAgY2hhcnxzaG9ydHxpbnQpIG5ldHNubXBfUFJJMzI9IiIgOzsKKyAgICBsb25nKSBuZXRzbm1wX1BSSTMyPSJsIiA7OworICAgICJsb25nIGxvbmciKSBuZXRzbm1wX1BSSTMyPSJsbCIgOzsKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VuZGVybHlpbmcgdHlwZSBvZiB1aW50MzJfdCBub3Qga25vd25dKSA7OworZXNhYworQUNfTVNHX1JFU1VMVCgkbmV0c25tcF9QUkkzMikKK0FDX0RFRklORV9VTlFVT1RFRChbTkVUU05NUF9QUkkzMl0sIFsiJG5ldHNubXBfUFJJMzIiXSwKKyAgICAgICAgICAgICAgICAgICBbU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHVpbnQzMl90XSkKKworIyBjaGVjayB0byBzZWUgaWYgdGhlIG9wZW5zc2wgaXMgZ29vZCBlbm91Z2ggZm9yIERUTFMKKyMgKEJJT19kZ3JhbV9nZXRfcGVlciBpcyBhIG1hY3JvLCBub3QgYSB0cnVlIGZ1bmN0aW9uKQoraWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJEVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIEFDX0NBQ0hFX1ZBTCgKKyAgICAgICBuZXRzbm1wX2N2X2Jpb19kZ3JhbV9nZXRfcGVlciwKKyAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgQklPX2RncmFtX2dldF9wZWVyXV0pCisgICAgICAgWworICAgICAgICBvbGRMSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJExJQlMgLWxjcnlwdG8iCisgICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICBbWyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPl1dLAorICAgICAgICAgICAgW1tCSU9fZGdyYW1fZ2V0X3BlZXIoTlVMTCwgTlVMTCk7XV0pXSwgW10sCisgICAgICAgICAgW0FDX01TR19FUlJPUihEVExTIHN1cHBvcnQgcmVxdWlyZXMgYSBuZXdlciB2ZXJzaW9uIG9mIE9wZW5TU0wpXSkKKworICAgICAgICBMSUJTPSIkb2xkTElCUyIKKyAgICAgICBdCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgKQorZmkKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMgYi9jb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhhYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMKQEAgLTAsMCArMSw1ODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisjICBDb3JlOgorQUNfSEVBREVSX1NUREMgICAgICAgICAgIyAgPHN0ZGxpYi5oPiwgPHN0ZGFyZy5oPiwgICA8c3RyaW5nLmg+ICAmIDxmbG9hdC5oPgorQUNfSEVBREVSX0RJUkVOVCAgICAgICAgIyAgPGRpcmVudC5oPiwgPHN5cy9uZGlyLmg+LCA8c3lzL2Rpci5oPiAmIDxuZGlyLmg+CisjICBBcHBzOgorQUNfSEVBREVSX1NZU19XQUlUICAgICAgIyAgPHN5cy93YWl0Lmg+CisKKyMgYWxsb3cgZm9yIHF1aWNrIG1vZHVsZS9saWJyYXJ5L2V0YyBwcm9jZXNzaW5nIGNoZWNrcworaWYgdGVzdCAieCRORVRTTk1QX1FVSUNLX0NIRUNLIiA9ICJ4IiA7IHRoZW4KKworIyMKKyMgICBTdGFuZC1hbG9uZSBoZWFkZXJzOgorIyMKKyMgIENvcmU6CitBQ19DSEVDS19IRUFERVJTKFtnZXRvcHQuaCAgIHB0aHJlYWQuaCAgcmVnZXguaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzdHJpbmcuaCAgIHN5c2xvZy5oICAgdW5pc3RkLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzdGRpbnQuaCAgIGludHR5cGVzLmggICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvcGFyYW0uaCAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zZWxlY3QuaCAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3NvY2tldC5oICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGltZS5oICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90aW1lYi5oICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3VuLmggICAgICAgICAgIF0pCisKKyMgIExpYnJhcnkgYW5kIEFnZW50OgorQUNfQ0hFQ0tfSEVBREVSUyhbbmxpc3QuaF0sLCxbCitBQ19JTkNMVURFU19ERUZBVUxUCitbCisjaWZuZGVmIExJQkJTRF9ESVNBQkxFX0RFUFJFQ0FURUQKKyNkZWZpbmUgTElCQlNEX0RJU0FCTEVfREVQUkVDQVRFRCAxCisjZW5kaWYKK11dKQorCisjICBMaWJyYXJ5OgorQUNfQ0hFQ0tfSEVBREVSUyhbZmNudGwuaCAgICBpby5oICAgICAgIGtzdGF0LmggICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtsaW1pdHMuaCAgIGxvY2FsZS5oICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9maWxlLmggICAgICAgc3lzL2lvY3RsLmggICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3NvY2tpby5oICAgICBzeXMvc3RhdC5oICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc3lzdGVtY2ZnLmggIHN5cy9zeXN0ZW1pbmZvLmggICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90aW1lcy5oICAgICAgc3lzL3Vpby5oICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3V0c25hbWUuaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpcHgvaXB4LmggICAgICAgXSkKKworIyAgQWdlbnQ6CitBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oICAgIGVyci5oICAgICAgZmNudGwuaCAgICBmc3RhYi5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgWyAgICAgICAgICAgZ3JwLmggICAgICBpby5oICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbaW9jdGxzLmggICBrc3RhdC5oICAgIGt2bS5oICAgICAgbGltaXRzLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFsgICAgICAgICAgIG1udGVudC5oICAgbXRhYi5oICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgWyAgICAgICAgICAgcGtnbG9jcy5oICAgICAgICAgICAgIHB3ZC5oICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbICAgICAgICAgICBjb21fZXJyLmggICAgICAgICAgICAgZXQvY29tX2Vyci5oIF0gZG5sCisgICAgICAgICAgICAgICAgIFsgICAgICAgICAgIHV0bXB4LmggICAgdXRzbmFtZS5oICAgICAgICAgICAgICAgXSkKKworQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL2Rpc2tpby5oICBzeXMvZGtpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9maWxlLmggICAgc3lzL2ZpbGlvLmggICBzeXMvZml4cG9pbnQuaCAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvZnMuaCAgICAgIHN5cy9pb2N0bC5oICAgc3lzL2xvYWRhdmcuaCAgc3lzL21udGVudC5oICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL21udHRhYi5oICBzeXMvcG9vbC5oICAgIHN5cy9wcm90b3N3LmggIHN5cy9wc3RhdC5oICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zb2NraW8uaCAgc3lzL3N0YXQuaCAgICBzeXMvc3RhdGZzLmggICBzeXMvc3RhdHZmcy5oIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc3RyZWFtLmggIHN5cy9zeXNnZXQuaCAgc3lzL3N5c21wLmggICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RjcGlwc3RhdHMuaCAgICAgICAgICAgIHN5cy91dHNuYW1lLmggIHN5cy92ZnMuaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy92bS5oICAgICAgc3lzL3ZtbWFjLmggICBzeXMvdm1tZXRlci5oICBzeXMvdm1wYXJhbS5oIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdm1zeXN0bS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCitBQ19DSEVDS19IRUFERVJTKFthc20vcGFnZS5oIGFzbS90eXBlcy5oICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW2luZXQvbWliMi5oICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbGludXgvaGRyZWcuaCBsaW51eC90YXNrcy5oICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFttYWNoaW5lL3BhcmFtLmggICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvdGNwX2ZzbS5oICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbdWZzL2ZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFt1dm0vdXZtX2V4dGVybi5oIHV2bS91dm1fcGFyYW0uaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3ZtL3ZtLmggdm0vdm1fZXh0ZXJuLmggdm0vdm1fcGFyYW0uaCBdKQorCisjICBBcHBzOgorQUNfQ0hFQ0tfSEVBREVSUyhbZmNudGwuaCAgICBncnAuaCAgICAgIHB3ZC5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9jZGVmcy5oICAgc3lzL2lvY3RsLmggICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc29ja2V0LmggIHN5cy9zb2NraW8uaCAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RpbWUuaCAgICAgICAgICAgICAgICAgICAgICAgXSkKKworIyAgTm90LVVzZWQ6CitBQ19DSEVDS19IRUFERVJTKFtzZWFyY2guaCAgIHNndHR5LmggICAgeHRpLmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2RtYXAuaCBzeXMvcG9sbC5oICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90aW1lb3V0LmggICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFttYWNoaW5lL3B0ZS5oICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbcGNpL3BjaS5oICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworCisjIFZhbGdyaW5kCitBQ19DSEVDS19IRUFERVJTKFt2YWxncmluZC92YWxncmluZC5oIHZhbGdyaW5kL21lbWNoZWNrLmhdKQorIyBPcGVuU1NMCitBQ19DSEVDS19IRUFERVJTKFtvcGVuc3NsL2Flcy5oIF0pICAgICAjICAoQ29yZSkKK0FDX0NIRUNLX0hFQURFUlMoW29wZW5zc2wvZGguaCAgXSkgICAgICMgIChBcHBzKQorIyAgTm90LVVzZWQ6CitBQ19DSEVDS19IRUFERVJTKFtvcGVuc3NsL2Rlcy5oICBvcGVuc3NsL2htYWMuaCBdIGRubAorICAgICAgICAgICAgICAgICBbb3BlbnNzbC9ldnAuaCAgc2VjdXJpdHkvY3J5cHRva2kuaF0pCisKKyMgUlBNIHN1YmRpcmVjdG9yeSBwYXRoICAgICAgICAgICAgICAgICAgIChBZ2VudCkKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgIEFDX0NIRUNLX0hFQURFUlMoW3JwbS9ycG10cy5oICAgcnBtL3JwbWZpbGV1dGlsLmhdLCBbXSwgW10sCisJCSAgIFtbI2luY2x1ZGUgPHJwbS9ycG1saWIuaD5dXSkKK2ZpCisKKworIyMKKyMgICBQcmUtcmVxdWlzaXRlIG9uIG90aGVyIGhlYWRlcnM6CisjIworCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3BhcmFtLmg+ICAoTUFYUEFUSExFTikgICAgICAgICAgIChPcGVuQlNEIDMuNCkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3dhcC5oLCwsCisgICAgQUNfSU5DTFVERVNfREVGQVVMVChbXSkKKyAgICBbCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisgICAgXSkKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9wYXJhbS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAoRnJlZUJTRCkKKyMKKyMgIENvcmU6ICAgICAgKD8gVGVzdGVkIGFib3ZlPyApCitBQ19DSEVDS19IRUFERVJTKFtzdGRsaWIuaCAgXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisgICAgXV0pCisjCisjICBMaWJyYXJ5OgorQUNfQ0hFQ0tfSEVBREVSUyhbbWFsbG9jLmggICAgICAgIG5ldC9pZl9kbC5oICAgc3lzL3N5c2N0bC5oICAgIF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorICAgIF1dKQorIworIyAgQWdlbnQ6CitBQ19DSEVDS19IRUFERVJTKFttYWxsb2MuaCAgICAgICAgb3NyZWxkYXRlLmggICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW21hY2hpbmUvdHlwZXMuaCBuZXQvaWZfZGwuaCAgIG5ldC9pZl90eXBlcy5oICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2Rrc3RhdC5oICAgIHN5cy9jb25mLmggICAgc3lzL21idWYuaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvbW91bnQuaCAgICAgc3lzL3Byb2MuaCAgICBzeXMvcXVldWUuaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zeXNjdGwuaCAgICBzeXMvdXNlci5oICAgICAgICAgICAgICAgICAgICBdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9zZW1hLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAoSVJJWCA2LjUpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoW3N5cy9zZW1hLmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaGFzaGluZy5oLCwsCisgICAgQUNfSU5DTFVERVNfREVGQVVMVChbXSkKKyAgICBbCisjaWYgSEFWRV9TWVNfU0VNQV9ICisjaW5jbHVkZSA8c3lzL3NlbWEuaD4KKyNlbmRpZgorICAgIF0pCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvc29ja2V0Lmg+ICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgOSkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc29ja2V0dmFyLmgsLCwKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKFtdKQorICAgIFsKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorICAgIF0pCisKKyMgICAgICAgcmVxdWlyaW5nIF9LTUVNVVNFUiBhbmQgPHN5cy90eXBlcy5oPiAgICAgICAgICAgKEJTRGkzL0lSSVgpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoc3lzL3Zub2RlLmgsLCwKKyAgICBbCisjZGVmaW5lIF9LTUVNVVNFUiAxCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisgICAgXSkKKworIyAgICAgICByZXF1aXJpbmcgPG1hY2hpbmUvdHlwZXMuaD4gICAgICAgICAgICAgICAgICAgICAoTmV0QlNEKQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHN5cy9kaXNrbGFiZWwuaCwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9NQUNISU5FX1RZUEVTX0gKKyNpbmNsdWRlIDxtYWNoaW5lL3R5cGVzLmg+CisjZW5kaWYKKyAgICBdXSkKKworIwlRTlgKK0FDX0NIRUNLX0hFQURFUlMoW25idXRpbC5oXSkKKworIyAgICAgICBVRlMgaGVhZGVycworIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKFt1ZnMvdWZzL2Rpbm9kZS5oIHVmcy91ZnMvcXVvdGEuaCB1ZnMvdWZzL2lub2RlLmggdWZzL2Zmcy9mcy5oXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9VRlNfVUZTX0RJTk9ERV9ICisjaW5jbHVkZSA8dWZzL3Vmcy9kaW5vZGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfVUZTX1VGU19RVU9UQV9ICisjaW5jbHVkZSA8dWZzL3Vmcy9xdW90YS5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgcmVxdWlyaW5nIDx2bS92bS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJTRGkyKQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHZtL3N3YXBfcGFnZXIuaCwsLAorICAgIFtbCisjaWYgSEFWRV9WTV9WTV9ICisjaW5jbHVkZSA8dm0vdm0uaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIG5ldGxpbmsvcnRuZXRsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMaW51eCkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvbmV0bGluay5oICBsaW51eC9ydG5ldGxpbmsuaF0sLCwKKyAgICBbWworI2lmIEhBVkVfQVNNX1RZUEVTX0gKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9MSU5VWF9ORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjZW5kaWYKKyAgICBdXSkKKworCisjICAgICAgIE5ldHdvcmsgaGVhZGVycworIyAgQ29yZSBvciBMaWJyYXJ5L0FnZW50L0FwcHM6CisjCitBQ19DSEVDS19IRUFERVJTKFthcnBhL2luZXQuaCAgICAgICAgbmV0L2lmLmggICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvaW4uaCAgICAgICBuZXRkYi5oICAgICAgICAgICAgICBdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyAgICBdXSkKKyMKKyMgIEFnZW50OgorQUNfQ0hFQ0tfSEVBREVSUyhbbmV0L2lmX2FycC5oICAgICAgIG5ldC9pZl9taWIuaCAgICAgICAgIG5ldC9pZl92YXIuaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvaWZfZXRoZXIuaCBuZXRpbmV0L2luX3N5c3RtLmggICBuZXRpbmV0L2luX3Zhci5oIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L2lwLmggICAgICAgbmV0aW5ldC9pcF9pY21wLmggICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC9pY21wX3Zhci5oIG5ldGluZXQvaXBfdmFyLmggICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvdGNwLmggICAgICBuZXRpbmV0L3RjcF90aW1lci5oICBuZXRpbmV0L3RjcF92YXIuaF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L3RjcGlwLmggICAgbmV0aW5ldC91ZHAuaCAgICAgICAgbmV0aW5ldC91ZHBfdmFyLmhdIGRubAorICAgICAgICAgICAgICAgICBbbmV0L3JvdXRlLmggICAgICAgIG5ldGluZXQvaWNtcDYuaCAgICAgICAgICAgICAgICAgICAgICAgXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSUNNUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIEtBTUUgKElQdjYpIGhlYWRlcnMKKyMgIEFnZW50OgorIworIyBLQU1FCitBQ19DSEVDS19IRUFERVJTKFtuZXRpbmV0L2lwNi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0Ni9pbjZfdmFyLmggICAgbmV0aW5ldDYvaW42X3BjYi5oICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0Ni9pcDZfdmFyLmggICAgbmV0aW5ldDYvbmQ2LmggICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0Ni90Y3A2LmggICAgICAgbmV0aW5ldDYvdGNwNl9mc20uaCAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0Ni90Y3A2X3RpbWVyLmggbmV0aW5ldDYvdGNwNl92YXIuaF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICByZXF1aXJpbmcgPG5ldGluZXQvaW4uaD4gICAgICAgICAgICAgICAgICAgICAgICAoT3BlbkJTRCAyLjYpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMobmV0aW5ldC9pbl9wY2IuaCwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyAgICBdXSkKKworIyMKKyMgICBQcmUtcmVxdWlzaXRlIG9uIHNwZWNpZmljIHR5cGVzCisjIworCisjICAgICAgIFNwZWNpYWwgaGFjayB0byBnZXQgYXJvdW5kIHZhcmlvdXMgcHJvYmxlbXMgb24gb2xkZXIgTGludXgga2VybmVscworIyAgICAgICAobWFqb3IgdWdoISkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvZXRodG9vbC5oXSwsLAorW1sKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgordHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCit0eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwordHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KK3R5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCitdXSkKKworIyMKKyMgICBIZWFkZXJzIHJlcXVpcmluZyBwYXJ0aWN1bGFyIGxpYnJhcmllcworIyMKKworIyAgICAgICBmb3IgSG9zdFJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyAyLngpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMocGtnaW5mby5oLAorICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMocGtnaW5mbywgYWRtLAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9QS0dJTkZPLCAxLCBbZGVmaW5lIGlmIHlvdSBoYXZlIHBrZ2luZm9dKSwsLExNSUJMSUJTKSkKKworQUNfQ0hFQ0tfSEVBREVSUyhwa2cuaCwKKyAgICBORVRTTk1QX1NFQVJDSF9MSUJTKHBrZ19pbml0LCBwa2csCisgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlBLRywgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSBCU0QgcGtnLW5nXSkpKQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcGtnX2ggPSBubwordGhlbgorICAgIHVuc2V0IGFjX2N2X2hlYWRlcl9wa2dfaAorICAgIG5ldHNubXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIG5ldHNubXBfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9sb2NhbC9pbmNsdWRlIgorICAgIExERkxBR1M9IiRMREZMQUdTIC1ML3Vzci9sb2NhbC9saWIiCisgICAgQUNfQ0hFQ0tfSEVBREVSUyhwa2cuaCwKKyAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhwa2dfaW5pdCwgcGtnLAorCSAgICBBQ19ERUZJTkUoSEFWRV9MSUJQS0csIDEsIFtkZWZpbmUgaWYgeW91IGhhdmUgQlNEIHBrZy1uZ10pKSkKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcGtnX2ggPSBubworICAgIHRoZW4KKyAgICAgICAgQ1BQRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX3NhdmVfTERGTEFHUyIKKyAgICBmaQorZmkKKworY2FzZSAkdGFyZ2V0X29zIGluCisgICAgYWl4KikKKyAgICAgICAgIyAgICAgICBmb3IgQ1BVL21lbW9yeSBzdGF0aXN0aWNzICAgICAgICAgICAgICAgKEFJWCkKKyAgICAgICAgIyAgQWdlbnQ6CisgICAgICAgICMKKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsaWJwZXJmc3RhdC5oLAorICAgICAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhwZXJmc3RhdF9jcHVfdG90YWwsIHBlcmZzdGF0LAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1BFUkZTVEFULCAxLCBbb24gYWl4LCBpZiB5b3UgaGF2ZSBwZXJmc3RhdF0pLAorICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbCisKKyoqKiBUbyBtb25pdG9yIENQVS9tZW1vcnkgdmFsdWVzIGluIEFJWCB5b3UgbmVlZCB0byBpbnN0YWxsCisqKiogbGlicGVyZnN0YXQgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGJvcy5wZXJmCitdKSwsCisgICAgICAgICAgICAgICAgTE1JQkxJQlMpLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKKyAgICBdXSkKKyAgICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICAgIyAgICAgICBIUC1VWCBhZ2VudCBuZWVkcyBvcGVuX21pYiAgICAgICAoWFhYIC0gbm90IGEgaGVhZGVyIGNoZWNrISkKKyAgICAgICAgIworICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKG9wZW5fbWliLCBubSwKKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQk5NLCAxLCBbZGVmaW5lIGlmIHlvdSBoYXZlIGxpYm5tXSksLCxMTUlCTElCUykKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICA7OworZXNhYworCisjICAgICAgIGZvciBNSUItMiBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDeWd3aW4gYW5kIE1pbkdXKQorIyAgQ29yZToKKyMKK0FDX0NIRUNLX0hFQURFUlMoW3dpbmRvd3MuaCBpcGhscGFwaS5oXSwgW10sIFtdLCBbCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKK10pCisKKyMgICAgICAgZm9yIE1JQi0yIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIyAgQ29yZToKKyMKK2lmIHRlc3QgeCR3aXRoX3NvY2tsaWIgPSB4d2luc29jazI7IHRoZW4KKyAgQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jay5oIHdpbnNvY2syLmggd3MydGNwaXAuaF0pCitmaQorCisjCisjIGZvciB1Y2Qtc25tcC9sbXNlbnNvcnNNaWIKKyMKK0FDX0NIRUNLX0hFQURFUlMoW3NlbnNvcnMvc2Vuc29ycy5oIHBpY2wuaF0pCisKKyMjICBUaGlzIGlzIGhlcmUgdG8gYXZvaWQgbG9hZHMgb2YgcmVkZWZpbml0aW9uIHdhcm5pbmdzIGR1cmluZworIyMgIG1vZHVsZSBjb25maWd1cmF0aW9uCisKKyMjCisjICAgcnRlbnRyeSBzdHJ1Y3R1cmUgY2hlY2tzOgorIyMKKworIyBDaGVjayBzdHJ1Y3QgcnRlbnRyeSBmb3IgY29tbW9uIGZpZWxkcworIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHJ0ZW50cnkucnRfZHN0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZW50cnkucnRfaGFzaCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVudHJ5LnJ0X25leHQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlbnRyeS5ydF9yZWZjbnQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlbnRyeS5ydF91bml0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZW50cnkucnRfdXNlXSwsLAorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisgICAgXSkKKworZmkgIyBORVRTTk1QX1FVSUNLX0NIRUNLCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczEgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmMDUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMQpAQCAtMCwwICsxLDk1IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyB0aGF0IGFyZSBydW4KKyMgYmVmb3JlIHRoZSBhZ2VudCBtb2R1bGUgdGVzdHMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIworIyAgIFJQTSBjaGVja3MKKyMKKyMjCitBQ19DSEVDS19IRUFERVJTKHJwbS9ycG1saWIuaCBycG0vaGVhZGVyLmgpCisKK0FDX0NIRUNLX0hFQURFUihycG0vcnBtbGliLmgscnBtbGliX2g9eWVzLHJwbWxpYl9oPW5vKQorQUNfQ0hFQ0tfSEVBREVSKHJwbS9oZWFkZXIuaCxycG1oZWFkZXJfaD15ZXMscnBtaGVhZGVyX2g9bm8pCisKK2lmIHRlc3QgIngkcnBtaGVhZGVyX2giID0gInhubyIgLW8gIngkcnBtbGliX2giID0gInhubyIgOyB0aGVuCisgIGlmIHRlc3QgIngkd2l0aF9ycG0iID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgZWl0aGVyIHRoZSBSUE0gaGVhZGVyIGZpbGVzIG5lZWRlZCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgUlBNIHN1cHBvcnRdKQorICBlbHNlCisgICAgd2l0aF9ycG09bm8KKyAgZmkKK2ZpCisKKyMKKyMgcnBtIGxpYnJhcmllcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBzb2Z0d2FyZQorIyBpbnN0YWxsZWQgdGFibGVzIChvbiBsaW51eCBpbiBwYXJ0aWN1bGFyKQorIworaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgIyBBUkcuICBSUE0gaXMgYSByZWFsIHBhaW4uCisgICMgRldJVyBsaWJycG0ubGEsIGxpYnJwbWlvLmxhLCBhbmQgbGlicG9wdC5sYSBoYXZlIGNvcnJlY3QgZGVwZW5kZW5jaWVzLgorICBfcnBtbGlicz0iIgorCisgICMgcnBtLTQuMC54IG5lZWRzIHJwbWlvLgorICBORVRTTk1QX1NFQVJDSF9MSUJTKHJwbUdldFBhdGgsIHJwbWlvLCwsICRMTUlCTElCUywgX3JwbWxpYnMpCisgIAorICAjIHJwbS00LjAuMyBsaWJycG1kYiBhY3R1YWxseSBjb250YWlucyB3aGF0IHdlIG5lZWQuCisgIE5FVFNOTVBfU0VBUkNIX0xJQlMocnBtZGJPcGVuLCBycG1kYiwsLCAkTE1JQkxJQlMsIF9ycG1saWJzKQorICAjIG5vdyBjaGVjayBmb3IgcnBtIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMuCisgIE5FVFNOTVBfU0VBUkNIX0xJQlMocnBtUmVhZENvbmZpZ0ZpbGVzLCBycG0sIFsKKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJSUE0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBycG0nIGxpYnJhcnkgKC1scnBtKS5dKQorICAgIExNSUJMSUJTPSIkX3JwbWxpYnMgJExNSUJMSUJTIgorICBdLCwgJExNSUJMSUJTLCBfcnBtbGlicykKKworICAjIHJwbSA0LjYgaGFzIGluY29tcGF0aWJsZSBBUEksIHR1cm4gb24gdGhlIGxlZ2FjeSBvbmUKKyAgQUNfQ0hFQ0tfREVDTChbaGVhZGVyR2V0RW50cnldLAorICAgIDogLAorICAgIEFDX0RFRklORShbX1JQTV80XzRfQ09NUEFUXSwgW10sIFtEZWZpbmUgaWYgeW91IGhhdmUgUlBNIDQuNiBvciBuZXdlciB0byB0dXJuIG9uIGxlZ2FjeSBBUEldKSwKKyAgICBbWyNpbmNsdWRlIDxycG0vcnBtbGliLmg+XV0KKyAgKQorZmkKKworIworIyBnZXRmc3N0YXQvZ2V0dmZzc3RhdAorIworQUNfU0VBUkNIX0xJQlMoZ2V0ZnNzdGF0LCBbbmJ1dGlsXSkKK0FDX0NIRUNLX0ZVTkNTKGdldGZzc3RhdCkKK0FDX0NIRUNLX0ZVTkNTKGdldHZmc3N0YXQpCitBQ19GVU5DX0dFVE1OVEVOVAorCisjCisjIGtpbmZvX2dldF9jcHVzCisjCitBQ19TRUFSQ0hfTElCUyhraW5mb19nZXRfY3B1cywgW2tpbmZvXSkKK0FDX0NIRUNLX0ZVTkNTKGtpbmZvX2dldF9jcHVzKQorCisjCisjIGRpc2tJT0xBeCByZXF1aXJlcyBleHAgd2hpY2ggbWF5IHJlcXVpcmUgLWxtCisjCitBQ19TRUFSQ0hfTElCUyhleHAsIFttXSkKKworIworIyAgIGxpYmt2bQorIworTkVUU05NUF9TRUFSQ0hfTElCUyhrdm1fcmVhZCwga3ZtLCwsLCBMQUdFTlRMSUJTKQorTkVUU05NUF9TRUFSQ0hfTElCUyhrdm1fb3BlbmZpbGVzLCBrdm0sLCwsIExBR0VOVExJQlMpCitORVRTTk1QX1NFQVJDSF9MSUJTKGt2bV9nZXRwcm9jcywga3ZtLCwsLCBMTUlCTElCUykKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3ZtX2dldHByb2MyLCBrdm0sLCwsIExNSUJMSUJTKQorTkVUU05NUF9TRUFSQ0hfTElCUyhrdm1fZ2V0c3dhcGluZm8sIGt2bSwsLCwgTE1JQkxJQlMpCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTEFHRU5UTElCUyAkTE1JQkxJQlMgJExJQlMiCitBQ19DSEVDS19GVU5DUyhba3ZtX29wZW5maWxlcyBrdm1fZ2V0cHJvY3Mga3ZtX2dldHByb2MyIGt2bV9nZXRzd2FwaW5mb10pCitMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKKyMKKyMgICBkeW5hbWljIG1vZHVsZSBzdXBwb3J0CisjCitORVRTTk1QX1NFQVJDSF9MSUJTKFtkbG9wZW5dLCBbZGxdLCwsIFskTEFHRU5UTElCUyAkTFNOTVBMSUJTXSwgW0xNSUJMSUJTXSkKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMTUlCTElCUyAkTEFHRU5UTElCUyAkTFNOTVBMSUJTICRMSUJTIgorQUNfQ0hFQ0tfRlVOQ1MoW2Rsb3Blbl0pCitMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczIgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0OTFlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMgpAQCAtMCwwICsxLDUwNCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMgdGhhdCBhcmUgcnVuCisjIGFmdGVyIHRoZSBhZ2VudCBtb2R1bGUgdGVzdHMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAgIEhBVkVfTElCIERlZmluaXRpb25zIHVzZWQgaW4gdGhlIE5ldC1TTk1QIGNvZGUgYmFzZToKKyMKKyMgICAgICAgSEFWRV9MSUJDUllQVE86CWFwcHMKKyMgICAgICAgSEFWRV9MSUJSUE06CWFnZW50CisjCisKKyMjCisjICAgU2ltcGxlIGNoZWNrczoKKyMjCisKKyMgQUNfQ0hFQ0tfTElCKGRlcywgbWFpbikKKyMgQUNfQ0hFQ0tfTElCKG0sICAgYXNpbikKKworIyAgIGRtYWxsb2MKKyMKK2lmIHRlc3QgIiR7d2l0aF9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCisgICBpZiB0ZXN0ICIkd2l0aF9kbWFsbG9jIiA9IHllcyAtYSAtZCAkd2l0aF9kbWFsbG9jIDsgdGhlbgorICAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aF9kbWFsbG9jKQorICAgZmkKKyAgIEFDX0NIRUNLX0hFQURFUlMoW2RtYWxsb2MuaF0pCisgICBBQ19TRUFSQ0hfTElCUyhbZG1hbGxvY19tZXNzYWdlXSwgW2RtYWxsb2NdKQorZmkKKworIyAgIEVGZW5jZQorIyAgICAgICAoVGhpcyB1c2VkIHRvIGJlIG9uIGJ5IGRlZmF1bHQgZm9yIGRldmVsb3BlciBjaGVja291dCkKKyMKK2lmIHRlc3QgIngkdXNlX2VmZW5jZSIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19TRUFSQ0hfTElCUyhbRUZfRXhpdF0sIFtlZmVuY2VdKQorZmkKKworCisjICAgRUxGIGxpYnJhcmllcworIyAgICAgICBUeXBpY2FsbHkgdXNlZCBmb3IgJ25saXN0JyAgKG5lZWRlZCBmb3IgdXB0aW1lKQorIworaWYgdGVzdCAieCR3aXRoX2VsZiIgIT0gInhubyI7IHRoZW4KK2Nhc2UgJHRhcmdldF9vcyBpbgorCWxpbnV4KikgIyBhZGQgaG9zdHMgd2hpY2ggZG9uJ3QgdXNlIG5saXN0IGhlcmUKKyAgICAgICAgICAgICAgICA7OworCWlyaXgqKSAjIENoZWNrIGZvciBubGlzdCBpbiBtbGQgKGlyaXgpCisJCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0KQorCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdDY0KQorCQlBQ19DSEVDS19MSUIobWxkLCBubGlzdCkKKwkJOzsKKwkqKSAjIGRlZmF1bHQKKwkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3QpCisJCTs7Citlc2FjCitmaQorIAorCisjICAgbGlic29ja2V0CisjICAgICAgIE5lZWRlZCBmb3IgJ3NvY2tldCgyKScgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIyAgICAgICBQb3NzaWJseSBhbHNvIGZvciAnZ2V0aG9zdG5hbWUoMyknICAgICAgICAgICAgICAobm9uLVNvbGFyaXMpCisjICAgICAgICAgICAoYWx0ZXJuYXRpdmVseSBpbiBsaWJuc2wgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIyAgICAgICAgICAgIG9yIGluIGxpYndzMl8zMikgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCitjYXNlIHgkd2l0aF9zb2NrbGliIGluCit4d2luc29jazIpCisgICMgICBsaWJ3czJfdzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyAgIworICBuZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCisgIExJQlM9IiRMSUJTIC1sd3MyXzMyIgorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgICAjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgXSwgWworICAgIHNvY2tldCgwLCAwLCAwKTsKKyAgICBnZXRob3N0YnluYW1lKDApOworICBdKV0sIFsKKyAgICAjIEtlZXAgTElCUy4KKyAgICB0cnVlCisgIF0sIFsKKyAgICAjIFJlc3RvcmUgTElCUyBhbmQgY29tcGxhaW4uCisgICAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorICAgIEFDX01TR19FUlJPUihbbGlid3MyXzMyIG5vdCBmb3VuZC5dKQorICBdKQorICA7OworKikKKyAgQUNfU0VBUkNIX0xJQlMoc29ja2V0LCBzb2NrZXQsLEFDX01TR19FUlJPUihbc29ja2V0KDIpIG5vdCBmb3VuZC5dKSkKKyAgQUNfU0VBUkNIX0xJQlMoZ2V0aG9zdGJ5bmFtZSwgW25zbCBzb2NrZXRdKQorICBBQ19DSEVDS19GVU5DUyhnZXRob3N0YnluYW1lKQorICBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnlhZGRyLCBbbnNsIHNvY2tldF0pCisgIEFDX0NIRUNLX0ZVTkNTKGdldGhvc3RieWFkZHIpCisgIDs7Citlc2FjCisKKworIyAgIGxpYmlwaGxwYXBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ3lnd2luIGFuZCBNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1saXBobHBhcGkiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgICNpbmNsdWRlIDxpcGhscGFwaS5oPgorXSwgWworICBJcFJlbmV3QWRkcmVzcygwKTsKK10pXSwgWworICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQorXSwgWworICAjIFJlc3RvcmUgTElCUyBhbmQgY29tcGxhaW4uCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKyAgY2FzZSB4JHdpdGhfc29ja2xpYiBpbgorICB4d2luc29jazIpCisgICAgQUNfTVNHX0VSUk9SKFtsaWJpcGhscGFwaSBub3QgZm91bmQuXSkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgICBsaWJyZWdleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxyZWdleCIKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICNpbmNsdWRlIDxyZWdleC5oPgorXSwgWworICByZWdjb21wKDAsIDAsIDApOworXSldLCBbCisgICMgS2VlcCBMSUJTLgorICB0cnVlCitdLCBbCisgICMgUmVzdG9yZSBMSUJTLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCitdKQorCisKKyMgICBsaWJzbm1wYXBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxzbm1wYXBpIgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICNpbmNsdWRlIDxzbm1wLmg+CitdLCBbCisgIFNubXBVdGlsTWVtQWxsb2MoMCk7CitdKV0sIFsKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKK10sIFsKKyAgIyBSZXN0b3JlIExJQlMuCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKK10pCisKKworIyAgIGtzdGF0IGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3N0YXRfbG9va3VwLCBrc3RhdCwKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCS1NUQVQsIDEsCisgICAgICAgIAlbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuXSksLCwKKyAgICAgICAgTE5FVFNOTVBMSUJTKQorCisKKyMKKyMgICBsaWJydAorIworCitORVRTTk1QX1NFQVJDSF9MSUJTKGNsb2NrX2dldHRpbWUsIHJ0LAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9DTE9DS19HRVRUSU1FLCAxLAorICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrX2dldHRpbWUnIGxpYnJhcnldKSwsLAorICAgICAgICBMTkVUU05NUExJQlMpCisKKworIyMKKyMgICBNSUItbW9kdWxlLXNwZWNpZmljIGNoZWNrcworIyMKKworIyAgIGxpYmRldnN0YXQKKyMgICAgICAgIChmb3IgZGlza0lPIE1JQikKKyMKKyMgICBOb3QtVXNlZDogSEFWRV9HRVRERVZTL0hBVkVfREVWU1RBVF9HRVRERVZTCisjCitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiIHVjZC1zbm1wL2Rpc2tpbyAiID4vZGV2L251bGwKK2lmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisJTkVUU05NUF9TRUFSQ0hfTElCUyhnZXRkZXZzLCBkZXZzdGF0LAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0dFVERFVlMsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBbZGVmaW5lIGlmIHlvdSBoYXZlIGdldGRldnMoKV0pLCwsTE1JQkxJQlMpCisJTkVUU05NUF9TRUFSQ0hfTElCUyhkZXZzdGF0X2dldGRldnMsIGRldnN0YXQsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfREVWU1RBVF9HRVRERVZTLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluZSBpZiB5b3UgaGF2ZSBkZXZzdGF0X2dldGRldnMoKV0pLCwsTE1JQkxJQlMpCitmaQorCisjICAgbGlicGNpCisjICAgICAgICAoZm9yIGlmLW1pYiBkZXNjcmlwdGlvbikKKyMKK05FVFNOTVBfU0VBUkNIX0xJQlMocGNpX2xvb2t1cF9uYW1lLCBwY2ksCisJQUNfREVGSU5FKEhBVkVfUENJX0xPT0tVUF9OQU1FLCAxLAorCQlbZGVmaW5lIGlmIHlvdSBoYXZlIHBjaV9sb29rdXBfbmFtZSgpXSksLCxMTUlCTElCUykKKworIyAgIExNLVNFTlNPUlMtTUlCIHN1cHBvcnQKKyMKK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQIC1pICJ1Y2Qtc25tcC9sbXNlbnNvciIgPiAvZGV2L251bGwKK2lmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNlbnNvcnMgc3VwcG9ydF0pCisgICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICAgICMgIEFnZW50OiAgSEFWRV9QSUNMX0gKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUihwaWNsLmgsIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBpY2wiLCkKKyAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMocGljbC5oKQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgIE5vdC1Vc2VkOiAgSEFWRV9TRU5TT1JTX1NFTlNPUlNfSAorICAgICAgICAgICAgIworICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKHNlbnNvcnMvc2Vuc29ycy5oLCwKKyAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFthc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIHNlbnNvcnMvc2Vuc29ycy5oXSldKQorICAgICAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcywgc2Vuc29ycywsCisgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCAtbHNlbnNvcnNdKV0sLAorICAgICAgICAgICAgICAgIExNSUJMSUJTKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZmkKKworIworIyBsaWJubCAobmV0bGluaykKKyMKKworaWYgdGVzdCAieCR3aXRoX25sIiAhPSAieG5vIjsgdGhlbgorICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgIGxpbnV4KikgIyBDaGVjayBmb3IgbGlibmwgKGxpbnV4KQorICAgICAgICBuZXRzbm1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgQ1BQRkxBR1M9Ii1JL3Vzci9pbmNsdWRlL2xpYm5sMyAkQ1BQRkxBR1MiCisgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMobmxfY29ubmVjdCwgbmwtMywKKyAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTKG5ldGxpbmsvbmV0bGluay5oKQorICAgICAgICAgICAgRVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVM9IiRFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUyAtSS91c3IvaW5jbHVkZS9saWJubDMiXSwKKyAgICAgICAgICAgIFtDUFBGTEFHUz0iJG5ldHNubXBfc2F2ZV9DUFBGTEFHUyJdLCBbXSwgW10sIFtMTUlCTElCU10pCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiAhPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKG5sX2Nvbm5lY3QsIG5sLCBbCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhuZXRsaW5rL25ldGxpbmsuaCldLCBbXSwgW10sIExNSUJMSUJTKQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBBQ19FR1JFUF9IRUFERVIoW25sX3NvY2tldF9mcmVlXSwgW25ldGxpbmsvc29ja2V0LmhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfTElCTkwzXSwgWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8bmV0bGluay9uZXRsaW5rLmg+IHByb3ZpZGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYm5sMyBBUEldKV0pCisgICAgICAgIGZpCisgICAgOzsKKyAgICBlc2FjCitmaQorCisKKworIyMKKyMgICBNb3JlIGNvbXBsZXggY2hlY2tzOgorIyMKKworIyAgIFNlY3VyaXR5IHJlbGF0ZWQgZnVuY3Rpb25zCisjCitOT05BR0VOVExJQlM9JExJQlMJICMgc2F2ZSBvbGQgbGlicmFyaWVzCitTU0hQUk9HPW5vCitUTFNQUk9HPW5vCitpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iIC1hICJ4JHRyeW9wZW5zc2wiICE9ICJ4aW50ZXJuYWwiOyB0aGVuCisgICAgIyBjaGVjayBmb3IgbGlicGtjczExIGlmIGFza2VkCisgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiICE9ICJ4eWVzIiAtYSAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX0xJQihwa2NzMTEsIENfSW5pdGlhbGl6ZSwKKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlBLQ1MxMSwgMSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwa2NzMTEnIGxpYnJhcnkgKC1scGtjczExKS5dKQorCQlMSUJQS0NTMTE9Ii1scGtjczExIikKKyAgICBlbHNlIAorICAgICAgICBpZiB0ZXN0ICJ4JHRyeXJzYXJlZiIgIT0gInhubyI7IHRoZW4KKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQihyc2FyZWYsIFJTQVByaXZhdGVEZWNyeXB0KQorICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFJTQWdsdWUsIFJTQV9QS0NTMV9SU0FyZWYpCisgICAgICAgIGZpCisKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgLWxlYXkzMl0pCisgICAgICAgIG5ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iLWxlYXkzMiIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+XSwKKyAgICAgICAgICAgICAgICBbcmV0dXJuIEVWUF9tZDUoKTtdKV0sCisgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpOyBhY19jdl9saWJfZWF5MzJfRVZQX21kNT15ZXM7IENSWVBUTz0iZWF5MzIiXSwKKyAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKG5vKV0KKyAgICAgICAgKQorICAgICAgICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKKyAgICAgICAgaWYgdGVzdCB4JENSWVBUTyA9IHg7IHRoZW4KKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbY3J5cHRvXSwgW0VWUF9tZDVdLCBbQ1JZUFRPPSJjcnlwdG8iXSkKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0IHgkQ1JZUFRPICE9IHg7IHRoZW4KKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQkNSWVBUTywgMSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE9wZW5TU0wgbGlicmFyeSAoLWxjcnlwdG8gb3IgLWxlYXkzMikuXSkKKyAgICAgICAgICAgIExJQkNSWVBUTz0iLWwke0NSWVBUT30iCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoJHtDUllQVE99LCBBRVNfY2ZiMTI4X2VuY3J5cHQsIAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FFU19DRkIxMjhfRU5DUllQVCwgMSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgQUVTX2NmYjEyOF9lbmNyeXB0JyBmdW5jdGlvbi5dKSkKKworICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKCR7Q1JZUFRPfSwgRVZQX01EX0NUWF9jcmVhdGUsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9NRF9DVFhfQ1JFQVRFXSwgW10sCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9NRF9DVFhfY3JlYXRlJyBmdW5jdGlvbi5dKQorICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9FVlBfTURfQ1RYX0RFU1RST1ldLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX01EX0NUWF9kZXN0cm95JyBmdW5jdGlvbi5dKSkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJEVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBBQ19DSEVDS19MSUIoc3NsLCBEVExTdjFfbWV0aG9kLAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlNTTF9EVExTLCAxLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBgc3NsJyBsaWJyYXJ5IHN1cHBvcnRzIERUTFMgKC1sc3NsKS5dKQorICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NsICRMSUJDUllQVE8iLAkKKwkJQUNfTVNHX0VSUk9SKFtUaGUgRFRMUyBiYXNlZCB0cmFuc3BvcnRzIHJlcXVpcmUgdGhlIGxpYnNzbCBsaWJyYXJ5IGZyb20gT3BlblNTTCB0byBiZSBhdmFpbGFibGUgYW5kIHN1cHBvcnQgRFRMU10pCSwtbGNyeXB0bykKKyAgICAgICAgICAgIFRMU1BST0c9eWVzCisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBBQ19DSEVDS19MSUIoc3NsLCBTU0xfbGlicmFyeV9pbml0LAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlNTTCwgMSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuXSkKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzbCAkTElCQ1JZUFRPIiwJCisJCUFDX01TR19FUlJPUihbVGhlIERUTFMgYmFzZWQgdHJhbnNwb3J0cyByZXF1aXJlIHRoZSBsaWJzc2wgbGlicmFyeSBmcm9tIE9wZW5TU0wgdG8gYmUgYXZhaWxhYmxlXSkJLC1sY3J5cHRvKQorICAgICAgICAgICAgVExTUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICIgU1NIICIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgQUNfQ0hFQ0tfTElCKHNzaDIsIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwLAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlNTSDIsIDEsCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzaDInIGxpYnJhcnkgKC1sc3NoMikuXSkKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzaDIgJExJQkNSWVBUTyIsCisgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtUaGUgU1NIIHRyYW5zcG9ydCByZXF1aXJlcyB0aGUgbGlic3NoMiBsaWJyYXJ5IHRvIGJlIGF2YWlsYWJsZV0pLCkKKyAgICAgICAgICAgIFNTSFBST0c9eWVzCisgICAgICAgIGZpCisgICAgZmkKK2VsaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgQUNfQ0hFQ0tfTElCKHBrY3MxMSwgQ19Jbml0aWFsaXplLAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJQS0NTMTEpCisgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiKQorZmkKK2lmIHRlc3QgIngkVExTUFJPRyIgPSAieHllcyI7IHRoZW4KKyAgIEFDX0NIRUNLX0RFQ0woW0VWUF9zaGEyMjRdLAorICAgIEFDX0RFRklORShbSEFWRV9FVlBfU0hBMjI0XSwgW10sIFtEZWZpbmUgaWYgeW91IGhhdmUgRVZQX3NoYTIyNC8yNTYgaW4gb3BlbnNzbF0pLAorICAgIDogLAorICAgIFtbI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+XV0pCisgICBBQ19DSEVDS19ERUNMKFtFVlBfc2hhMzg0XSwKKyAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX1NIQTM4NF0sIFtdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIEVWUF9zaGEzODQvMjU2IGluIG9wZW5zc2xdKSwKKyAgICA6ICwKKyAgICBbWyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPl1dKQorZmkKKworTElCUz0kTk9OQUdFTlRMSUJTCSAjIHJlc3RvcmUgb2xkIGxpYnJhcmllcworaWYgdGVzdCAieCRTU0hQUk9HIiA9ICJ4eWVzIjsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRT0nJworICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0U9JyMnCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0U9JycKK2ZpCitpZiB0ZXN0ICJ4JFRMU1BST0ciID0gInh5ZXMiIC1hICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUU9JycKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFPScjJworZWxzZQorICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFPScnCitmaQoraWYgZWNobyAiICR7c2VjdXJpdHlfbW9kX2xpc3R9ICIgfCBncmVwICcgdXNtICcgOyB0aGVuCisgICAgaWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nJworICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScjJworICAgIGVsc2UKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScjJworICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScnCisgICAgZmkKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nJworZmkKK2lmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRT0iIgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0U9IiMiCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFPSIjIgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0U9IiIKK2ZpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUUpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0UpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUUpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFKQorCisjCisjIElmIHdlJ3JlIHVzaW5nIGludGVybmFsIGNyeXB0byBzdXBwb3J0IHdlIG5lZWQgdG8gY29tcGlsZSBpbiBleHRyYSBmaWxlcworIworY3J5cHRvX2ZpbGVzX2M9IiIKK2NyeXB0b19maWxlc19vPSIiCitjcnlwdG9fZmlsZXNfbG89IiIKK2lmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyIgLWEgIngkQ1JZUFRPIiA9ICJ4IjsgdGhlbgorICAgIyBJZiB3ZToKKyAgICMgICAxKSBjb3VsZG4ndCBmaW5kIG5lZWRlZCBvcGVuc3NsIHN1cHBvcnQKKyAgICMgICAyKSBPUiB3ZXJlIGFza2VkIHRvIHVzZSBpbnRlcm5hbCBzdXBwb3J0CisgICAjICAgMykgQU5EIHdlIGhhdmUgdGhlIG5lZWRlZCBmaWxlcworICAgIyB0aGVuIHVzZSBpdAorICAgQ1JZUFRPPSJpbnRlcm5hbCIKKyAgIGNyeXB0b19maWxlc19jPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5jIG9wZW5zc2wvb3BlbnNzbF9tZDUuYyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMgb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjguYyIKKyAgIGNyeXB0b19maWxlc19vPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5vIG9wZW5zc2wvb3BlbnNzbF9tZDUubyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5vIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLm8gb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5vIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5vbyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4Lm8iCisgICBjcnlwdG9fZmlsZXNfbG89Im9wZW5zc2wvb3BlbnNzbF9zaGExLmxvIG9wZW5zc2wvb3BlbnNzbF9tZDUubG8gb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubG8gb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG8gb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubG8gb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubG8gb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmxvIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjgubG8iCisgICBBQ19ERUZJTkUoSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQpCitmaQorQUNfU1VCU1QoY3J5cHRvX2ZpbGVzX2MpCitBQ19TVUJTVChjcnlwdG9fZmlsZXNfbykKK0FDX1NVQlNUKGNyeXB0b19maWxlc19sbykKKworIworIyBpZiB3ZSBjYW4gZG8gYW55IHNvcnQgb2YgY3J5cHRvIHRoZW4gbm90ZSBpdAorIworaWYgdGVzdCAieCRDUllQVE8iICE9ICJ4IiA7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfQ0FOX0RPX0NSWVBUTywgMSwgIkRlZmluZSBpZiBjcnl0b2dyYXBoeSBzdXBwb3J0IGlzIHBvc3NpYmxlIikKK2ZpCisKKyMgICBUQ1Agd3JhcHBlciBzdXBwb3J0CisjCitfY3BwZmxhZ3M9IiR7Q1BQRkxBR1N9IgorX2xkZmxhZ3M9IiR7TERGTEFHU30iCitpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAibm8iOyB0aGVuCisgIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGhfbGlid3JhcC9pbmNsdWRlIgorICAgIExERkxBR1M9IiR7TERGTEFHU30gLUwkd2l0aF9saWJ3cmFwL2xpYiIKKyAgZmkKKworICBfbGlicz0ke0xJQlN9CisgIEFDX0NIRUNLX0hFQURFUih0Y3BkLmgsICwKKyAgICBBQ19NU0dfRVJST1IoW0Fza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgdGNwZC5oLl0pKQorCisgIExJQlM9IiRMSUJTIC1sd3JhcCIKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwXSkKKyAgIyBYWFg6IHNob3VsZCBjaGVjayBmb3IgaG9zdHNfY3RsCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICNpbmNsdWRlIDx0Y3BkLmg+CisgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7CisgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7XV0sCisgICAgW1tob3N0c19hY2Nlc3MoKHZvaWQgKikwKV1dKV0sCisgICAgW0FDX01TR19SRVNVTFQoW3llc10pCisgICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9MSUJXUkFQKQorICAgICB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKKyAgICAgX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCJdLAorICAgIFtBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICMgTGludXggUmVkSGF0IDYuMSB3b24ndCBsaW5rIGxpYndyYXAgd2l0aG91dCBsaWJuc2wKKyAgICAgQUNfQ0hFQ0tfRlVOQyh5cF9nZXRfZGVmYXVsdF9kb21haW4sICwKKyAgICAgICBBQ19DSEVDS19MSUIobnNsLCB5cF9nZXRfZGVmYXVsdF9kb21haW4pKQorICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2xdKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDx0Y3BkLmg+CisJaW50IGFsbG93X3NldmVyaXR5ID0gMDsKKwlpbnQgZGVueV9zZXZlcml0eSAgPSAwO11dLAorICAgICAgIFtbaG9zdHNfYWNjZXNzKCh2b2lkICopMCldXSldLAorICAgICAgIFtBQ19NU0dfUkVTVUxUKHllcykKKwlBQ19ERUZJTkUoTkVUU05NUF9VU0VfTElCV1JBUCkKKwl0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKKwlfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIC1sbnNsIl0sCisgICAgICAgW0FDX01TR19SRVNVTFQobm8pCisJQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKV0pXSkKKyAgTEFHRU5UTElCUz0iJF93cmFwbGlicyIKKyAgQ1BQRkxBR1M9JHtfY3BwZmxhZ3N9CisgIExERkxBR1M9JHtfbGRmbGFnc30KKyAgTElCUz0ke19saWJzfQorZmkKKworCisjIworIyAgIG15c3FsCisjIworaWYgdGVzdCAieCR3aXRoX215c3FsIiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfUEFUSF9QUk9HUyhNWVNRTENPTkZJRyxteXNxbF9jb25maWcpCisgIHRlc3QgLXggIiRNWVNRTENPTkZJRyIgXAorCXx8IEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbXlzcWxfY29uZmlnIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBNeVNRTCBzdXBwb3J0XSkKKyAgTVlTUUxfTElCUz1gJE1ZU1FMQ09ORklHIC0tbGlic2AKKyAgTVlTUUxfSU5DTFVERVM9YCRNWVNRTENPTkZJRyAtLWluY2x1ZGVgCisgIF9saWJzPSIke0xJQlN9IgorICBfY3BwZmxhZ3M9IiR7Q1BQRkxBR1N9IgorICBMSUJTPSIke0xJQlN9ICR7TVlTUUxfTElCU30iCisgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke01ZU1FMX0lOQ0xVREVTfSIKKyAgQUNfQ0hFQ0tfSEVBREVSKG15c3FsLmgsLAorICAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBteXNxbC5oIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBNeVNRTCBzdXBwb3J0XSldKQorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTVlfSU5JVCgpIHdvcmtzXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTSgKKyAgICAgIFtbI2luY2x1ZGUgPG15X2dsb2JhbC5oPgorICAgICAgICAjaW5jbHVkZSA8bXlfc3lzLmg+XV0sCisgICAgICBbW01ZX0lOSVQoIm15X2luaXRfdGVzdCIpXV0pXSwKKyAgICAgIFtBQ19NU0dfUkVTVUxUKHllcyldLAorICAgICAgW0FDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKFtIQVZFX0JST0tFTl9MSUJNWVNRTENMSUVOVF0sIDEsCisgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdXNpbmcgTVlfSU5JVCgpIGNhdXNlcyBhIGxpbmtlciBlcnJvcl0pXSkKKyAgQ1BQRkxBR1M9IiR7X2NwcGZsYWdzfSIKKyAgTElCUz0iJHtfbGlic30iCisgIEFDX01TR19DQUNIRV9BREQoTVlTUUwgVHJhcCBMb2dnaW5nOiAgICAgICAgIGVuYWJsZWQpCitlbHNlCisgIEFDX01TR19DQUNIRV9BREQoTVlTUUwgVHJhcCBMb2dnaW5nOiAgICAgICAgIHVuYXZhaWxhYmxlKQorZmkKK0FDX1NVQlNUKE1ZU1FMX0xJQlMpCitBQ19TVUJTVChNWVNRTF9JTkNMVURFUykKKyAgCisKKyMjCisjICAgTm9uLWxpYnJhcnkgY2hlY2tzCisjIworCisjIG5saXN0CitBQ19DSEVDS19GVU5DUyhubGlzdCBubGlzdDY0IGtubGlzdCkKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZWM5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEKQEAgLTAsMCArMSwyNCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIENvbXBpbGF0aW9uLXJlbGF0ZWQKKyMjCisKKyMgICAgICAgRHluYW1pYyBtb2R1bGVzIHJlcXVpcmUgUG9zaXRpb24tSW5kZXBlbmRlbnQgQ29kZQorIwkgICAgTElCX0NGTEFHUy9ETExJQlM6IHVzZWQgaW4gYWdlbnQgTWFrZWZpbGUgb25seQorIworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGVdKQorZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiB1Y2Qtc25tcC9kbG1vZCAiID4vZGV2L251bGwKK2lmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisgICAgTElCX0NGTEFHUz0iJExJQl9DRkxBR1MgJFNITElCX0NGTEFHUyIKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKyAgICBETExJQlM9IiIKKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYThmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIKQEAgLTAsMCArMSwxNDIgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBQYWNrYWdlIGNoYXJhY3RlcmlzdGljcworIyAgICAgICBBdXRoZW50aWNhdGlvbi9FbmNyeXB0aW9uIHN1cHBvcnQKKyMjCisKKyMgICAgICAgQ2hlY2sgZm9yIFBLQ1MxMQorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydF0pCit1c2VvcGVuc3NsPW5vCit1c2Vwa2NzPW5vCitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X2NyeXB0b2tpX2giICE9ICJ4eWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIFBLQ1MxMSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKKyAgICBmaQorZWxzZQorICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICB1c2Vwa2NzPXllcworICAgIGZpCitmaQorCisjICAgICAgIENoZWNrIGZvciBPcGVuU1NMCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1IiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBPcGVuU1NMIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQorICAgIGZpCitlbHNlCisgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIHVzZW9wZW5zc2w9eWVzCisgICAgZWxpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkdXNlcGtjcyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICB1c2VvcGVuc3NsPXllcworICAgICAgICBmaQorICAgIGZpCitmaQorCisjICAgICAgIEF2YWlsYWJsZSBhdXRoZW50aWNhdGlvbi9lbmNyeXB0aW9uIG1vZGVzCisjCitpZiB0ZXN0ICJ4JENSWVBUTyIgPSAieGludGVybmFsIiA7IHRoZW4KKyAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBlbmNybW9kZXM9IkRFUyBBRVMiCisgICAgZWxzZQorICAgICAgICBlbmNybW9kZXM9IltkaXNhYmxlZF0iCisgICAgZmkKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPLCAxLCAiRGVmaW5lIGlmIGludGVybmFsIGNyeXB0b2dyYXBoeSBjb2RlIHNob3VsZCBiZSB1c2VkIikKKyAgICBBQ19NU0dfUkVTVUxUKEludGVybmFsIENyeXB0byBTdXBwb3J0KQorZWxpZiB0ZXN0ICJ4JHVzZW9wZW5zc2wiICE9ICJ4bm8iIDsgdGhlbgorICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCisgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfYWVzX2giID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAgICAgZW5jcm1vZGVzPSJERVMgQUVTIgorCWVsc2UKKwkgICAgZW5jcm1vZGVzPSJERVMiCisJZmkKKyAgICBlbHNlCisgICAgICAgIGVuY3Jtb2Rlcz0iW2Rpc2FibGVkXSIKKyAgICBmaQorICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9PUEVOU1NMKQorICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCQ1JZUFRPIgorICAgIEFDX01TR19SRVNVTFQoT3BlblNTTCBTdXBwb3J0KQorZWxpZiB0ZXN0ICJ4JHVzZXBrY3MiICE9ICJ4bm8iIDsgdGhlbgorICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCisgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGVuY3Jtb2Rlcz0iREVTIgorICAgIGVsc2UKKyAgICAgICAgZW5jcm1vZGVzPSJbZGlzYWJsZWRdIgorICAgIGZpCisgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX1BLQ1MxMSwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgY29kZVMxMSBsaWJyYXJ5IC4uLl0pCisgICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJQS0NTMTEiCisgICAgQUNfTVNHX1JFU1VMVChQS0NTMTEgU3VwcG9ydCkKK2VsaWYgdGVzdCAieCRlbmFibGVfbWQ1IiAhPSAieG5vIjsgdGhlbgorICAgIGF1dGhtb2Rlcz0iTUQ1IgorICAgIGVuY3Jtb2Rlcz0iIgorICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpCisgICAgQUNfTVNHX1JFU1VMVChJbnRlcm5hbCBNRDUgU3VwcG9ydCkKK2ZpCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KKyAgICBhdXRobW9kZXM9YGVjaG8gJGF1dGhtb2RlcyB8ICRTRUQgJ3MvTUQ1ICovLzsnYAorZmkKK0FDX1NVQlNUKExORVRTTk1QTElCUykKK0FDX1NVQlNUKExBR0VOVExJQlMpCisKK0FDX01TR19DQUNIRV9BREQoQ3J5cHRvIHN1cHBvcnQgZnJvbTogICAgICAgICRDUllQVE8pCitBQ19NU0dfQ0FDSEVfQUREKEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQ6ICAgICAkYXV0aG1vZGVzKQorQUNfTVNHX0NBQ0hFX0FERChFbmNyeXB0aW9uIHN1cHBvcnQ6ICAgICAgICAgJGVuY3Jtb2RlcykKKworaWYgdGVzdCAieCRhbGxfd2FybmluZ3MiICE9ICJ4IjsgdGhlbgorICAgIEFDX01TR19DQUNIRV9BREQoV0FSTklORzogJGFsbF93YXJuaW5ncykKK2ZpCisKKyMKKyMgQ2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIEROU1NFQyBsb2NhbCB2YWxpZGF0aW9uIHN1cHBvcnQKKyMKK19saWJzPSR7TElCU30KK2lmICEgdGVzdCAieC0kd2FudF9kbnNzZWMiID0gIngtbm8iIDsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3ZhbGlkYXRvci92YWxpZGF0b3ItY29uZmlnLmhdKQorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfdmFsaWRhdG9yX3ZhbGlkYXRvcl9jb25maWdfaCIgIT0geWVzOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihDYW4ndCBmaW5kIHZhbGlkYXRvci5oKQorICAgIGZpCisgICAgaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtYSBcCisgICAgICAgICAgICAieCRhY19jdl9saWJfZWF5MzJfRVZQX21kNSIgIT0gInh5ZXMiIC1vIFwKKyAgICAgICAgICAgICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihDb3VsZG4ndCBmaW5kIE9wZW5TU0wgZm9yIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHN1cHBvcnQuKQorICAgIGZpCisgICAgTElCUz0iJExJQlMgJExJQkNSWVBUTyIKKyAgICBBQ19DSEVDS19MSUIoc3JlcywgcXVlcnlfc2VuZCwsQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGxpYnNyZXNdKSkKKyAgICBWQUxfTElCUz0iLWxzcmVzICRMSUJDUllQVE8iCisgICAgTElCUz0iJExJQlMgLWxzcmVzIgorICAgIEFDX0NIRUNLX0xJQih2YWwsIHBfdmFsX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgTElCUz0iJExJQlMgLWx2YWwiCisgICAgICAgICAgICAgICAgIFZBTF9MSUJTPSIkVkFMX0xJQlMgLWx2YWwiCisgICAgICAgICAgICAgICAgIGhhdmVfdmFsX3Jlc19xdWVyeT15ZXMsCisgICAgICAgICAgICAgICAgIFsgQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHB0aHJlYWRfcndsb2NrX2luaXQpCisJCSAgIEFDX0NIRUNLX0xJQih2YWwtdGhyZWFkcywgcF92YWxfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgIGhhdmVfdmFsX3Jlc19xdWVyeT15ZXMKKyAgICAgICAgICAgICAgICAgICBMSUJTPSItbHZhbC10aHJlYWRzICRMSUJTIgorICAgICAgICAgICAgICAgICAgIFZBTF9MSUJTPSItbHZhbC10aHJlYWRzIC1scHRocmVhZCAkVkFMX0xJQlMiCisgICAgICAgICAgICAgICAgICAgTElCVkFMX1NVRkZJWD0iLXRocmVhZHMiLAorICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihDYW4ndCBmaW5kIGxpYnZhbCBvciBsaWJ2YWwtdGhyZWFkcykpCisgICAgICAgICAgICAgICAgIF0pCisgICAgQUNfREVGSU5FKEROU1NFQ19MT0NBTF9WQUxJREFUSU9OLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHN1cHBvcnRdKQorICAgIEROU1NFQz0iZW5hYmxlZCIKK2Vsc2UKKyAgICBETlNTRUM9ImRpc2FibGVkIgorZmkKKworTElCUz0ke19saWJzfQorCitBQ19TVUJTVChWQUxfTElCUykKK0FDX01TR19DQUNIRV9BREQoTG9jYWwgRE5TU0VDIHZhbGlkYXRpb246ICAgICRETlNTRUMpCisKKyAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2FmZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzCkBAIC0wLDAgKzEsMjAgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBDb21waWxhdGlvbiBjaGFyYWN0ZXJpc3RpY3MKKyMjCisKKyMgICAgICAgQnl0ZSBvcmRlcgorIworaWYgdGVzdCAiJHdpdGhfZW5kaWFubmVzcyIgPSAiYmlnIjsgdGhlbgorICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxpZiB0ZXN0ICIkd2l0aF9lbmRpYW5uZXNzIiA9ICJsaXR0bGUiIDsgdGhlbgorICAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorQUNfQ19CSUdFTkRJQU4oLCwKKyAgICBbQUNfTVNHX0VSUk9SKFtGYWlsZWQgdG8gZmlndXJlIG91dCBob3N0IGVuZGlhbm5lc3MsIHBsZWFzZSB1c2UgLS13aXRoLWVuZGlhbm5lc3MgdG8gc3BlY2lmeSBpdC5dKV0pCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4YmFkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNApAQCAtMCwwICsxLDQxNiBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBPcGVyYXRpbmctU3lzdGVtIGNoYXJhY3RlcmlzdGljcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIwlEZXRlcm1pbmUgaG93IHRvIHRlc3QgZm9yIGNoYXJhY3RlciBkZXZpY2VzCisjCVtXZSBhc3N1bWUgdGhhdCAvZGV2L251bGwgZG9lcyBhY3R1YWxseSBleGlzdCFdCisjCitpZiB0ZXN0IC1jIC9kZXYvbnVsbDsgdGhlbgorICAgIENERVZfVEVTVF9GTEFHPSItYyIKK2VsaWYgdGVzdCAtZiAvZGV2L251bGw7IHRoZW4KKyAgICBDREVWX1RFU1RfRkxBRz0iLWYiCitlbHNlCisgICAgQUNfTVNHX1dBUk4oW0Nhbid0IHJlbGlhYmx5IGRldGVjdCBjaGFyYWN0ZXIgZGV2aWNlc10pCisgICAgIyBJcyBpdCBhY3R1YWxseSBzZW5zaWJsZSB0byBmYWxsIGJhY2sgb24gInRlc3QgLWYiID8KKyAgICBDREVWX1RFU1RfRkxBRz0iLWYiCitmaQorCisjICAgICAgIEtlcm5lbCBMb2NhdGlvbgorIwkgICAgdXNlZCBpbiBsaWJyYXJ5L2FnZW50CisjCitBQ19DQUNIRV9DSEVDSyhbZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWxdLAorICAgIGFjX2N2X0tFUk5FTF9MT0MsCisgICBbYWNfY3ZfS0VSTkVMX0xPQz0idW5rbm93biIKKyAgICBmb3IgaSBpbiAvdm11bml4IC9ocC11eCAvc3RhbmQvdm11bml4IC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvbmV0YnNkIC91bml4IC9rZXJuZWwgL2JzZCAvbWFjaF9rZXJuZWwgL2Jvb3Qva2VybmVsL2tlcm5lbAorICAgIGRvCisgICAgICAgIGlmIHRlc3QgJENERVZfVEVTVF9GTEFHICRpOyB0aGVuCisgICAgICAgICAgICBhY19jdl9LRVJORUxfTE9DPSIkaSIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorICAgIGRvbmUKKyAgICAjCisgICAgIyBJbiBwcmluY2lwbGUsIHRoaXMgdGVzdCBpcyBtZWFudCB0byBwcm92aWRlIGEgZGVmYXVsdCBwYXRoIHRvIHRoZSBrZXJuZWwKKyAgICAjIEluIHByYWN0aWNlLCB0aGUgdGVzdCBpcyBicm9rZW4gYW5kIHRoZSBrZXJuZWwgcGF0aCBpcyBzZXQgdG8gInVua25vd24iCisgICAgIworICAgICMgTm90ZSB0aGF0IG9uIGNlcnRhaW4gc3lzdGVtcyAoZS5nLiBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMpLAorICAgICMgICAgaXQgaXMgaW1wb3NzaWJsZSB0byBwcmVkaWN0IHRoZSBuYW1lIG9mIHRoZSBrZXJuZWwsCisgICAgIyAgICBwYXJ0aWN1bGFybHkgaWYgaXQgaW5jbHVkZXMgdGhlIGtlcm5lbCB2ZXJzaW9uLCBhcmNoaXRlY3R1cmUsIGV0YworICAgICMKKyAgICAjIFNpbmNlIHRoaXMgZGVmYXVsdCB3aWxsIG5ldmVyIGFjdHVhbGx5IGJlIHVzZWQsIHRoZW4gZG9uJ3QgdHJ5IHRvIHNldCBpdAorICAgICMKKyAgICBpZiB0ZXN0ICRpID0gInVua25vd24iOyB0aGVuCisgICAgICAgIEFDX01TR19XQVJOKFtDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gaG9wZWZ1bGx5IHRoaXMgd29uJ3QgYmUgbmVlZGVkIV0pCisgICAgZmkKK10pCitBQ19ERUZJTkVfVU5RVU9URUQoS0VSTkVMX0xPQywiJGFjX2N2X0tFUk5FTF9MT0MiLCBbbG9jYXRpb24gb2YgVU5JWCBrZXJuZWxdKQorCisKKyMgICAgICAgL2Rldi9rbWVtIGV4aXN0ZW5jZQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19DQUNIRV9DSEVDSyhbZm9yIC9kZXYva21lbV0sCisgICAgYWNfY3ZfSEFWRV9LTUVNLAorICAgW2lmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYva21lbTsgdGhlbgorICAgICAgICBhY19jdl9IQVZFX0tNRU09Ii9kZXYva21lbSIKKyAgICBmaQorXSkKKyMKKyMgIE5vdGUgdGhhdCBpdCdzIE9LIGlmIHRoaXMgZGV2aWNlIGlzIG5vdCBmb3VuZAorIworaWYgdGVzdCAieCRhY19jdl9IQVZFX0tNRU0iID0gIngvZGV2L2ttZW0iOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfS01FTSwiJGFjX2N2X0hBVkVfS01FTSIsIFtEZWZpbmUgaWYgeW91IGhhdmUgL2Rldi9rbWVtXSkKK2ZpCisKKworIyAgICAgICBTd2FwIGRldmljZSBMb2NhdGlvbgorIyAgICAgICAgICAgKC9kZXYvZG1lbSBvciAvZGV2L2RydW0pCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2VdLAorICAgIGFjX2N2X0RNRU1fTE9DLAorICAgW2lmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYvZG1lbTsgdGhlbgorICAgICAgICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kbWVtIgorICAgIGVsaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9kcnVtOyB0aGVuCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RydW0iCisgICAgZWxzZQorICAgICAgICBhY19jdl9ETUVNX0xPQz0ibm9uZSIKKyAgICBmaQorXSkKKyMKKyMgIE5vdGUgdGhhdCBpdCdzIE9LIGlmIHRoaXMgZGV2aWNlIGlzIG5vdCBmb3VuZAorIworaWYgdGVzdCAieCRhY19jdl9ETUVNX0xPQyIgIT0gInhub25lIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChETUVNX0xPQywiJGFjX2N2X0RNRU1fTE9DIiwgW2xvY2F0aW9uIG9mIHN3YXAgZGV2aWNlXSkKK2ZpCisKKworIyAgICAgICBNb3VudCB0YWJsZSBMb2NhdGlvbgorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19DQUNIRV9DSEVDSyhbZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uXSwKKyAgICBhY19jdl9FVENfTU5UVEFCLAorICAgW2FjX2N2X0VUQ19NTlRUQUI9IiR7d2l0aF9tbnR0YWI6LXVua25vd259IgorICAgIGlmIHRlc3QgIiRhY19jdl9FVENfTU5UVEFCIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBmb3IgaSBpbiAvZXRjL21udHRhYiAvZXRjL210YWIgL2V0Yy9maWxlc3lzdGVtcyAvZGV2L21udHRhYgorICAgICAgICBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAkaSAtbyAtYyAkaTsgdGhlbgorICAgICAgICAgICAgICAgIGFjX2N2X0VUQ19NTlRUQUI9IiRpIgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGZpCitdKQorQUNfREVGSU5FX1VOUVVPVEVEKEVUQ19NTlRUQUIsIiRhY19jdl9FVENfTU5UVEFCIiwgW2xvY2F0aW9uIG9mIG1vdW50IHRhYmxlIGxpc3RdKQorCisKKyMgICAgICAgUHJpbnRpbmcKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfUEFUSF9QUk9HKFtMUFNUQVRfUEFUSF0sbHBzdGF0KQoraWYgdGVzdCB4JExQU1RBVF9QQVRIICE9IHg7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoTFBTVEFUX1BBVEgsICIkTFBTVEFUX1BBVEgiLAorCVtQYXRoIHRvIHRoZSBscHN0YXQgY29tbWFuZF0pCisgICAgQUNfREVGSU5FKEhBVkVfTFBTVEFULCAxLCBbU2V0IGlmIHRoZSBscHN0YXQgY29tbWFuZCBpcyBhdmFpbGFibGVdKQorZmkKK2lmIHRlc3QgLXIgL2V0Yy9wcmludGNhcDsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1BSSU5UQ0FQLCAxLCBbU2V0IGlmIC9ldGMvcHJpbnRjYXAgZXhpc3RzXSkKK2ZpCisKKworIyAgICAgICBDaGVjayBwcyBhcmdzCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgY29ycmVjdCBmbGFncyB0byBwc10sCisgICAgIGFjX2N2X3BzX2ZsYWdzLAorICAgICBbCitpZiB0ZXN0ICJgKCRQU1BST0cgLWUgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1lbCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lbCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIGFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9ImFjeCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1hY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0gMj4mMSkgfCAkRUdSRVAgJyBwcyAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0iCitlbGlmIHRlc3QgImAoJFBTUFJPRyBheCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9ImF4IgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuIAorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2Vsc2UKKyAgICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLl0pCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCitmaQorXSkKKworUFNDTUQ9IiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgorQUNfU1VCU1QoUFNDTUQpCitBQ19ERUZJTkVfVU5RVU9URUQoUFNDTUQsICIkUFNQUk9HICRhY19jdl9wc19mbGFncyIsCisgIFtDb21tYW5kIHRvIGdlbmVyYXRlIHBzIG91dHB1dCwgdGhlIGZpbmFsIGNvbHVtbiBtdXN0IGJlIHRoZSBwcm9jZXNzCisgICBuYW1lIHdpdGhPVVQgYXJndW1lbnRzXSkKKworCisjIworIyAgIFN5c3RlbS9Db21waWxhdGlvbi1yZWxhdGVkCisjIworCisjICAgICAgIFRlc3QgZm9yIFNJR0hVUAorIworCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBTSUdIVVBdKQorQUNfQ09NUElMRV9JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHNpZ25hbC5oPl0sIFtyZXR1cm4gU0lHSFVQXSldLAorICAgIFtuZXRzbm1wX2hhdmVfc2lnaHVwPXllc10sCisgICAgW25ldHNubXBfaGF2ZV9zaWdodXA9bm9dCispCitBQ19NU0dfUkVTVUxUKFskbmV0c25tcF9oYXZlX3NpZ2h1cF0pCitpZiB0ZXN0ICJ4JG5ldHNubXBfaGF2ZV9zaWdodXAiID0geHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9TSUdIVVBdLCBbMV0sCisgICAgICAgICAgICAgIFtEZWZpbmUgaWYgU0lHSFVQIGlzIGRlZmluZWQgaW4gPHNpZ25hbC5oPi5dKQorZmkKKworCisjICAgICAgIENoZWNrIHdoZXRoZXIgc3lzY3RsKCkgaXMgdXNhYmxlCisjCSAgICB1c2VkIGluIGxpYnJhcnkvYWdlbnQKKyMKK2lmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllczsgdGhlbgorICAgIEFDX01TR19XQVJOKFtDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlXSkKK2Vsc2UKKyAgICBBQ19DQUNIRV9DSEVDSyhbaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbl0sCisgICAgICAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwsCisgICAgICAgW0FDX1RSWV9SVU4oWworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1NZU19TWVNDVExfSAorIyBpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKworbWFpbigpIHsKKyAgaW50ICAgICAgICAgICAgICAgICBtaWJbMl07CisgIHNpemVfdCAgICAgICAgICAgICAgbGVuOworICBzdHJ1Y3QgdGltZXZhbCBib290dGltZTsKKyAgCisgIG1pYlswXSA9IENUTF9LRVJOOworICBtaWJbMV0gPSBLRVJOX0JPT1RUSU1FOworICAKKyAgbGVuID0gc2l6ZW9mKGJvb3R0aW1lKTsKKyAgc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmbGVuLCBOVUxMLCBOVUxMKTsKKyAgaWYgKGJvb3R0aW1lLnR2X3NlYyAhPSAwKQorICAgIGV4aXQoMCk7CisgIGVsc2UKKyAgICBleGl0KDEpOworfQorICAgICAgICBdLAorICAgICAgICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPXllcywKKyAgICAgICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubywKKyAgICAgICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubyldKQorZmkKKworaWYgdGVzdCAieCRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA9ICJ4eWVzIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCwgMSwgW3N5c2N0bCB3b3JrcyB0byBnZXQgYm9vdHRpbWUsIGV0Yy4uLl0pCitmaQorCisKKyMgICBDaGVjayB3aGV0aGVyIFRDUCB0aW1lciBjb25zdGFudHMgYXJlIGluZGVlZCBjb25zdGFudAorIyAgICAgICBvciBkZXBlbmQgb24gdGhlIGtlcm5lbCBjbG9jayB0aWNrICdoeicuICAgICAgICAoRnJlZUJTRCA0LngpCisjCisjICAgICAgIElmIHRoZSBsYXR0ZXIsIHRoZW4gd2Ugd2lsbCBuZWVkIHRvIGhhdmUgYSBsb2NhbAorIyAgICAgICB2YXJpYWJsZSAnaHonIGRlZmluZWQgYW5kIHdpdGggYSBzdWl0YWJsZSB2YWx1ZSwKKyMgICAgICAgd2hlbmV2ZXIgd2Ugd2FudCB0byAgdXNlIG9uZSBvbmUgb2YgdGhlc2UgJ2NvbnN0YW50cycuCisjCisjIAkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonXSwKKyAgICBhY19jdl9UQ1BUVl9ORUVEU19IWiwKKyAgIFtBQ19FR1JFUF9DUFAoaHosCisgICAgICAgIFsKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorVENQVFZfU1JUVERGTFQKKyAgICAgICAgXSwKKyAgICAgICAgYWNfY3ZfVENQVFZfTkVFRFNfSFo9eWVzLAorICAgICAgICBhY19jdl9UQ1BUVl9ORUVEU19IWj1ubyldKQorCitpZiB0ZXN0ICJ4JGFjX2N2X1RDUFRWX05FRURTX0haIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX0RFRklORShUQ1BUVl9ORUVEU19IWiwgMSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBpbiA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyAgICAgICAgIGRlcGVuZCBvbiB0aGUgaW50ZWdlciB2YXJpYWJsZSAnaHonLiAgQDw6QEZyZWVCU0QgNC54QDo+QF0pCitmaQorCisKKyMgICBDaGVjayB3aGV0aGVyIElQIFJvdXRlIHRhYmxlIGlzIGNhY2hlZCAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK2Nhc2UgJHRhcmdldF9vcyBpbgorICBzb2xhcmlzKikKKyAgICAjICAgIEhlYWRlciBjaGVja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgMi42LzcpCisgICAgIworICAgIEFDX0NIRUNLX0hFQURFUlMoaW5ldC9jb21tb24uaCkKKyAgICBBQ19DSEVDS19IRUFERVJTKGluZXQvaXAuaCxhY19pbmV0X2lwX2g9eWVzLGFjX2luZXRfaXBfaD1ubywKKyAgICAgICAgQUNfSU5DTFVERVNfREVGQVVMVChbXSkKKyAgICAgICAgWworI2lmIEhBVkVfU1lTX1NUUkVBTV9ICisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9JTkVUX0NPTU1PTl9ICisjaW5jbHVkZSA8aW5ldC9jb21tb24uaD4KKyNlbmRpZgorICAgICAgICBdKQorICAgIGlmIHRlc3QgJGFjX2luZXRfaXBfaCA9IHllcyA7IHRoZW4KKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtaWIyX2lwUm91dGVFbnRyeV90IGluIGluZXQvbWliMi5oXSwKKyAgICAgICAgICAgIGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QsCisgICAgICAgICAgIFtBQ19UUllfQ09NUElMRShbCisjaWYgSEFWRV9JTkVUX01JQjJfSAorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorI2VuZGlmCisgICAgICAgICAgICAgICBdLFsKKyAgbWliMl9pcFJvdXRlRW50cnlfdCB0ZXN0aXQ7CisgIGlmKHNpemVvZih0ZXN0aXQpKQorICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICBhY19jdl9taWIyX2lwUm91dGVFbnRyeV90PXllcywKKyAgICAgICAgICAgICAgIGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3Q9bm8pXSkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgSVJFX0NBQ0hFIGlzIGRlZmluZWQgaW4gaW5ldC9pcC5oXSwKKyAgICAgICAgICAgICAgICBhY19jdl9pcmVfY2FjaGUsCisgICAgICAgICAgICAgICBbQUNfVFJZX0NPTVBJTEUoWworI2lmIEhBVkVfSU5FVF9JUF9ICisjaW5jbHVkZSA8aW5ldC9pcC5oPgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgXSxbCisgIGludCB0ZXN0aXQ9SVJFX0NBQ0hFOworICBpZih0ZXN0aXQpCisgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgYWNfY3ZfaXJlX2NhY2hlPXllcywKKyAgICAgICAgICAgICAgICAgICBhY19jdl9pcmVfY2FjaGU9bm8pXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNfY3ZfaXJlX2NhY2hlPW5vCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9pcmVfY2FjaGUiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUsW10sCisgICAgICAgICAgICAgICAgW2RlZmluZSB0byAxIGlmIHlvdSBoYXZlIElSRV9DQUNIRSBkZWZpbmVkIGluIDxpbmV0L2lwLmg+IGhlYWRlciBmaWxlLl0pCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIGluZXQvaXAuaCwgYnV0IElSRV9DQUNIRSBpcyBub3QgZGVmaW5lZC4gXAorVGhhdCBtZWFucyB0aGF0IHlvdXIgcXVlcnkgdG8gaXBSb3V0ZSBNSUIgY291bGQgZ2VuZXJhdGUgb3ZlciAyMGsgcmVzdWx0cyEgXAorQW5kIHRoaXMgY2FuIGJlIHZlcnkgc2xvdy5dKQorICAgICAgICBmaQorICAgIGZpICAgICAgICAgIyAidGVzdCAkYWNfaW5ldF9pcF9oID0geWVzIgorICAgIDs7Citlc2FjCisKKyMgICBDaGVjayB3aGV0aGVyIElQX1BLVElORk8gaXMgdXNhYmxlLgorIworCitBQ19DQUNIRV9DSEVDSyhbZm9yIElQX1BLVElORk8gXSwKKyAgICAgICAgICAgICAgICBbYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvXSwKK1tBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorXSwgWworICAgIHZvaWQgKmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIHZvaWQgKmZyb207CisgICAgc29ja2xlbl90ICpmcm9tbGVuOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBjaGFyICpjbXNnID0gbWFsbG9jKENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSkpOworICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICBpb3YuaW92X2xlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICBtc2cubXNnX25hbWUgPSBmcm9tOworICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOworICAgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworCisgICAgZm9yIChjbSA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZtc2csIGNtKSkgeworICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gU09MX0lQICYmIGNtLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykgeworICAgICAgICAgICAgc3RydWN0IGluX3BrdGluZm8qIHNyYyA9IChzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICBwcmludGYoIkFkZHJlc3M6ICVzOyBpbmRleDogJWRcbiIsIGluZXRfbnRvYShzcmMtPmlwaV9hZGRyKSwKKwkgICAgICAgICAgIHNyYy0+aXBpX2lmaW5kZXgpOworICAgICAgICB9CisgICAgfQorXSldLAorW2FjX2N2X2hhdmVfaXBfcGt0aW5mbz15ZXNdLAorW2FjX2N2X2hhdmVfaXBfcGt0aW5mbz1ub10KKyldKQoraWYgdGVzdCB4JGFjX2N2X2hhdmVfaXBfcGt0aW5mbyA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9JUF9QS1RJTkZPLCAxLCBbU2V0IGlmIElQX1BLVElORk8gaXMgdXNhYmxlXSkKK2ZpCisKKyMgICBDaGVjayB3aGV0aGVyIElQX1JFQ1ZEU1RBRERSIGlzIHVzYWJsZS4KKyMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBJUF9SRUNWRFNUQUREUiBdLAorICAgICAgICAgICAgICAgIFthY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyXSwKK1tBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorXSwgWworICAgIHZvaWQgKmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIHZvaWQgKmZyb207CisgICAgc29ja2xlbl90ICpmcm9tbGVuOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBjaGFyICpjbXNnID0gbWFsbG9jKENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpOworICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICBpb3YuaW92X2xlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICBtc2cubXNnX25hbWUgPSBmcm9tOworICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOworICAgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworCisgICAgZm9yIChjbSA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZtc2csIGNtKSkgeworICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciogc3JjID0gKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkcmVzczogJXNcbiIsIGluZXRfbnRvYShzcmMpKTsKKyAgICAgICAgfQorICAgIH0KK10pXSwKK1thY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyPXllc10sCitbYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcj1ub10KKyldKQoraWYgdGVzdCB4JGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHIgPSB4eWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfSVBfUkVDVkRTVEFERFIsIDEsIFtTZXQgaWYgSVBfUkVDVkRTVEFERFIgaXMgdXNhYmxlXSkKK2ZpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MgYi9jb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMTM0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncwpAQCAtMCwwICsxLDQzOCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU2hlbGwgY2hlY2tzOgorIyMKKworIyAgICAgICBDaGVjayBmb3IgJ3NoJyBvdmVyZmxvdyAgICAgICAgICAgICAgICAgICAgICAgICAoSFAtVVgpCisjICAgICAgICAgKHRha2VuIGZyb20gUGVybCdzIGNvbmZpZ3VyZSBzY3JpcHQpCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2hdKQoraWYgdGVzdCAtZiAvaHAtdXggLWEgLWYgL2Jpbi9rc2g7IHRoZW4KKyAgaWYgKFBBVEg9LjsgYWxpYXMgLXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIEFDX01TR19SRVNVTFQobm8pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICBpZiB0ZXN0ICJ4JDEiID0gIngiOyB0aGVuCisgICAgICBleGVjIC9iaW4va3NoICQwCisgICAgZWxzZQorICAgICAgZXhlYyAvYmluL2tzaCAkMCAiJEAiCisgICAgZmkKKyAgZmkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKKworIyMKKyMgICBTdGFuZGFyZCBhbmQgcGF0aCBwcm9ncmFtIGNoZWNrczoKKyMjCisKK0FDX1BST0dfRUdSRVAKK0FDX1BST0dfR1JFUAorQUNfUFJPR19JTlNUQUxMCitBQ19QUk9HX0xOX1MKK0FDX1BST0dfTUFLRV9TRVQKK0FDX1BST0dfU0VECisKK0FDX0NIRUNLX1BST0dTKFtGSUxFXSwgW2ZpbGVdKQoraWYgdGVzdCB4JGFjX2N2X3Byb2dfRklMRSA9IHg7IHRoZW4KKyAgIyBUaGUgZmlsZSBwcm9ncmFtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBDeWd3aW4gc2V0dXAsIGFsdGhvdWdoCisgICMgdGhpcyBwcm9ncmFtIGlzIGVzc2VudGlhbCBmb3IgbGlidG9vbCB0byB3b3JrIHByb3Blcmx5LiBJdCBpcyBub250cml2aWFsCisgICMgdG8gZGVkdWNlIGZyb20gdGhlIG1lc3NhZ2UgcHJpbnRlZCBieSBsaWJ0b29sIHRoYXQgdGhlICdmaWxlJyB0b29sIGlzCisgICMgbWlzc2luZyBhbmQgbGlidG9vbCBkb2VzIG5vdCBhYm9ydCB3aGVuIHRoZSBmaWxlIHByb2dyYW0gaXMgbm90IGZvdW5kLiBTbworICAjIHN0b3Agbm93IGlmIHRoZSBmaWxlIHByb2dyYW0gaGFzIG5vdCBiZWVuIGZvdW5kLgorICBBQ19NU0dfRVJST1IoW2ZpbGUgcHJvZ3JhbSBub3QgZm91bmQgYWx0aG91Z2ggaXQgaXMgbmVlZGVkIGJ5IGxpYnRvb2wuXSwgWzFdKQorZmkKKworQUNfQ0hFQ0tfUFJPR1MoRklORCwgICBmaW5kKQorQUNfQ0hFQ0tfUFJPR1MoV0hPQU1JLCB3aG9hbWkgbG9nbmFtZSwgd2hvYW1pKQorCitBQ19QQVRIX1BST0coQVVUT0NPTkYsICAgIGF1dG9jb25mKQorQUNfUEFUSF9QUk9HKEFVVE9IRUFERVIsICBhdXRvaGVhZGVyKQorQUNfUEFUSF9QUk9HKFtQRVJMUFJPR10sICBwZXJsKQorQUNfUEFUSF9QUk9HKFtQU1BST0ddLCAgICBwcykKK0FDX1BBVEhfUFJPRyhbUFlUSE9OUFJPR10scHl0aG9uKQorCitBQ19QQVRIX1BST0coW1VOQU1FUFJPR10sIHVuYW1lKQorQUNfREVGSU5FX1VOUVVPVEVEKFVOQU1FUFJPRywiJFVOQU1FUFJPRyIsIFtXaGVyZSBpcyB0aGUgdW5hbWUgY29tbWFuZF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPQ09ORiIgPSAieCI7IHRoZW4KKwlBVVRPQ09ORj0iOiIKKwlBQ19TVUJTVChBVVRPQ09ORikKK2ZpCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0hFQURFUiIgPSAieCI7IHRoZW4KKwlBVVRPSEVBREVSPSI6IgorCUFDX1NVQlNUKEFVVE9IRUFERVIpCitmaQorCitNQUtFPSR7TUFLRS0ibWFrZSJ9CiskTUFLRSAtdiAtZiAvZGV2L251bGwgMj4vZGV2L251bGwgfCAkR1JFUCBHTlUgPi9kZXYvbnVsbAoraGF2ZV9nbnVfbWFrZT0kPworCisKKyMjCisjICAgVGhlIFBlcmwgZnVuY3Rpb24gc3lzdGVtKCkgaXMgdXNlZCBmb3IgcnVubmluZyB0aGUgTmV0LVNOTVAgcmVncmVzc2lvbgorIyAgIHRlc3RzLiBGaW5kIG91dCB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaW52b2tlcyBhIFBPU0lYIHNoZWxsLCB3aGljaCBpcworIyAgIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuIFdoZW4gdXNpbmcgV2luZG93cyArIE1TWVMKKyMgICArIEFjdGl2ZVN0YXRlIFBlcmwsIFBlcmwncyBzeXN0ZW0oKSBmdW5jdGlvbiBkb2VzIGludm9rZSBXaW5kb3dzJyBjbWQuZXhlCisjICAgd2hpY2ggaXMgbm90IGEgUE9TSVggc2hlbGwuCisjIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIFBlcmwgZnVuY3Rpb24gc3lzdGVtKCkgaW52b2tlcyBhIFBPU0lYIHNoZWxsXSkKK2lmIHRlc3QgIngkUEVSTFBST0ciICE9ICd4JyAmJiB0ZXN0IC14ICIkUEVSTFBST0ciICYmIHRlc3QgInhgJFBFUkxQUk9HIC1lICdzeXN0ZW0oJ1wnJ2VjaG8gJE9TVFlQRSdcJycpOydgIiAhPSAneCRPU1RZUEUnOyB0aGVuCisgICAgUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTD15ZXMKK2Vsc2UKKyAgICBQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMPW5vCitmaQorQUNfTVNHX1JFU1VMVChbJFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTExdKQorQUNfU1VCU1QoW1BFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTExdKQorCisKKyMjCisjICAgQ29tcGlsYXRpb24tcmVsYXRlZCBwcm9ncmFtIGNoZWNrczoKKyMjCisKK0FDX0xBTkcoW0NdKQorQUNfUFJPR19DQworQUNfUFJPR19DUFAKK0xJTktDQz0ke0xJTktDQy0iJENDIn0KK0FDX1NVQlNUKExJTktDQykKKworQUNfQUlYCitBQ19DX0NPTlNUCitBQ19DX0lOTElORQorCisjICAgICAgIGxpYnRvb2wgc3R1ZmYgZm9yIHNoYXJlZC9zdGF0aWMgbGlicmFyaWVzLgorIworTFRfUFJFUkVRKFsyLjIuNl0pCitMVF9JTklUKFt3aW4zMi1kbGxdKQorQUNfU1VCU1QoTElCVE9PTF9ERVBTKQorCisKKyMjCisjICAgQnVpbGQgZW52aXJvbm1lbnQ6CisjIworCisjICAgZGV2ZWxvcGVyIGJ1aWxkIAorIyAgICAgICAoZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYnVpbGRpbmcgZnJvbSBTVk4gY2hlY2tvdXQpCisjCitpZiB0ZXN0ICJ4JGRldmVsb3BlciIgIT0gInhubyIgLWEgLWYgJHNyY2Rpci9yZW1vdmUtZmlsZXM7IHRoZW4KKyAgICBkZXZlbG9wZXI9InllcyIKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzXSkKK2lmIHRlc3QgIngkZGV2ZWxvcGVyIiA9ICJ4eWVzIiAtYSAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisKKyAgICAjICAgICAgIFdXV1hYWCAtIHN0cmljdCB0eXBlIGNoZWNraW5nCisgICAgIworICAgIERFVkZMQUdTPSItV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCIKK2Vsc2UKKyAgICBERVZGTEFHUz0iIgorZmkKK0FDX01TR19SRVNVTFQoJERFVkZMQUdTKQorQUNfU1VCU1QoREVWRkxBR1MpCisKKworIyAgIGJ1aWxkaW5nIG91dHNpZGUgc291cmNlIGRpcmVjdG9yeQorIworIyAgICAgICBhKSBlbnN1cmUgYnVpbGQgaW5jbHVkZSBwYXRocyBhcmUgYmVmb3JlIHNvdXJjZQorIyAgICAgICBiKSBlbnN1cmUgR05VIG1ha2UgdXNlcyAndnBhdGgnIGluc3RlYWQgb2YgJ1ZQQVRIJworIworTk9OX0dOVV9WUEFUSD0iVlBBVEggPSIKK0dOVV92cGF0aD0iI3ZwYXRoIgorCisjICAgICAgIGRlZmluZSBpbmNsdWRlIHBhdGhzIHJlbGF0aXZlIHRvIHRvcF9zcmNkaXIKKyMgICAgICAgdHdlYWsgaW5jbHVkZXMgaWYgd2UncmUgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcgorIworaWYgdGVzdCAieCRzcmNkaXIiID0gInguIjsgdGhlbgorICAgIFRPUF9JTkNMVURFUz1TUkNfVE9QX0lOQ0xVREVTCisgICAgU05NUExJQl9JTkNMVURFUz1TUkNfU05NUExJQl9JTkNMVURFUworICAgIEFHRU5UX0lOQ0xVREVTPVNSQ19BR0VOVF9JTkNMVURFUworICAgIEhFTFBFUl9JTkNMVURFUz1TUkNfSEVMUEVSX0lOQ0xVREVTCisgICAgTUlCR1JPVVBfSU5DTFVERVM9U1JDX01JQkdST1VQX0lOQ0xVREVTCitlbHNlCisgICAgVE9QX0lOQ0xVREVTPUJMRF9UT1BfSU5DTFVERVMKKyAgICBTTk1QTElCX0lOQ0xVREVTPUJMRF9TTk1QTElCX0lOQ0xVREVTCisgICAgQUdFTlRfSU5DTFVERVM9QkxEX0FHRU5UX0lOQ0xVREVTCisgICAgSEVMUEVSX0lOQ0xVREVTPUJMRF9IRUxQRVJfSU5DTFVERVMKKyAgICBNSUJHUk9VUF9JTkNMVURFUz1CTERfTUlCR1JPVVBfSU5DTFVERVMKKyAgICBpZiB0ZXN0ICRoYXZlX2dudV9tYWtlIC1lcSAwIDsgdGhlbgorICAgICAgICBOT05fR05VX1ZQQVRIPSIjVlBBVEggPSIKKyAgICAgICAgR05VX3ZwYXRoPSJ2cGF0aCIKKyAgICBmaQorZmkKK0FDX1NVQlNUKFRPUF9JTkNMVURFUykKK0FDX1NVQlNUKFNOTVBMSUJfSU5DTFVERVMpCitBQ19TVUJTVChBR0VOVF9JTkNMVURFUykKK0FDX1NVQlNUKEhFTFBFUl9JTkNMVURFUykKK0FDX1NVQlNUKE1JQkdST1VQX0lOQ0xVREVTKQorQUNfU1VCU1QoRVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVMpCitBQ19TVUJTVChHTlVfdnBhdGgpCitBQ19TVUJTVChOT05fR05VX1ZQQVRIKQorCisKKyMjCisjICAgU3lzdGVtLXJlbGF0ZWQgY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgICAgICBXaGF0IHN5c3RlbSBhcmUgd2UgYnVpbGRpbmcgZm9yCisjCitBQ19DQU5PTklDQUxfVEFSR0VUCitjaGFuZ2VxdW90ZSgsICkKK1BBUlRJQUxUQVJHRVRPUz1gZWNobyAkdGFyZ2V0X29zIHwgc2VkICdzL1stLl9dLiovLydgCitjaGFuZ2VxdW90ZShbLCBdKQorQUNfTVNHX0NBQ0hFX0FERChCdWlsZGluZyBmb3I6ICAgICAgICAgICAgICAgJFBBUlRJQUxUQVJHRVRPUykKKworCisjCisjICAgIFdoZXRoZXIgb3Igbm90IEN5Z3dpbidzIGxkIHJlY29nbml6ZXMgdGhlIGZsYWcgLW5vLXVuZGVmaW5lZC4gCisjCisKK2Nhc2UgeCR0YXJnZXRfb3MgaW4KK3hjeWd3aW4qKQorICBzYXZlZF9MREZMQUdTPSRMREZMQUdTCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgLW5vLXVuZGVmaW5lZF0pCisgIExERkxBR1M9IiRzYXZlZF9MREZMQUdTIC1XbCwtbm8tdW5kZWZpbmVkIgorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgZG5sCisgICAgICAgICAgICAgICAgICBMRF9OT19VTkRFRklORUQ9LW5vLXVuZGVmaW5lZF0sCisgICAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgCisgIExERkxBR1M9IiRzYXZlZF9MREZMQUdTIgorICA7OworZXNhYworCitBQ19TVUJTVChMRF9OT19VTkRFRklORUQpCisKKworIworIyAgIFNvY2tldCBsaWJyYXJ5OiBlaXRoZXIgJ2RlZmF1bHQnIChub24tTWluR1cpIG9yICd3aW5zb2NrMicgKE1pbkdXKS4KKyMKK2Nhc2UgeCR0YXJnZXRfb3MgaW4KKyAgeG1pbmd3KikKKyAgICB3aXRoX3NvY2tsaWI9d2luc29jazIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQ0ZMQUdTPSItRF9XSU4zMl9XSU5OVD0weDA1MDEgJENGTEFHUyIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgd2l0aF9zb2NrbGliPWRlZmF1bHQ7OworZXNhYworCisKKyMgICBDaGVjayBzeXN0ZW0gZGVmaW5lIGJlaGF2aW91cgorIyAgICAgICBEb2VzICItVXggLUR4PXgiIHdvcmsgYXMgZXhwZWN0ZWQ/CisjCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKV0pCitPTERfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKK0NQUEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisKK0FDX0VHUkVQX0NQUCh5ZXMsCisgICAgW1sKKyNpZmRlZiAkUEFSVElBTFRBUkdFVE9TCit5ZXMKKyNlbmRpZgorICAgIF1dLAorICAgIFsgIFBBUlRJQUxUQVJHRVRGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pXSwKKyAgICBbICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorICAgICAgIEFDX01TR19SRVNVTFQoW25vXSldKQorQ0ZMQUdTPSIkQ0ZMQUdTICRQQVJUSUFMVEFSR0VURkxBR1MiCitDUFBGTEFHUz0iJE9MRF9DUFBGTEFHUyIKKworCisjICAgICAgIERldGVybWluZSBhcHByb3ByaWF0ZSA8bmV0LXNubXAvc3lzdGVtL3tvc30uaD4gaW5jbHVkZQorIworQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZV0pCitjaGFuZ2VxdW90ZSgsICkKK2ZpbGViYXNlPSR0YXJnZXRfb3MKKyMgaWdub3JlIGJpbmFyeSBmb3JtYXQgaW5kaWNhdGlvbgorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9lbGYvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2FvdXQvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2Vjb2ZmLy8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9jb2ZmLy8nYAord2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oCitkbworICAgIGxhc3Q9JGZpbGViYXNlCisgICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bLS5fXVteLS5fXSokLy8nYAorICAgIGlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KKwlmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1swLTldKiQvLydgCisgICAgZmkKK2RvbmUKKworaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgorICAgIGZpbGViYXNlPSJnZW5lcmljIgorZmkKK2FjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oIgorY2hhbmdlcXVvdGUoWywgXSkKK0FDX01TR19SRVNVTFQoJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKKworCisjICAgICAgIERldGVybWluZSBhcHByb3ByaWF0ZSA8bmV0LXNubXAvbWFjaGluZS97Y3B1fS5oPiBpbmNsdWRlCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlXSkKK2NoYW5nZXF1b3RlKCwgKQorZmlsZWJhc2U9JHRhcmdldF9jcHUKK3doaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgKK2RvCisgICAgbGFzdD0kZmlsZWJhc2UKKyAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1stLl9dW14tLl9dKiQvLydgCitkb25lCisKK2lmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KKyAgICBmaWxlYmFzZT0iZ2VuZXJpYyIKK2ZpCithY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFPSJuZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oIgorY2hhbmdlcXVvdGUoWywgXSkKK0FDX01TR19SRVNVTFQoWyRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFXSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFLCAiJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiKQorCisKKyMjCisjICAgUGxhdGZvcm0tc3BlY2lmaWMgY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgIFByZXByb2Nlc3NvciBjaGVja3M6CisjCisKKyMgICAgICAgTW9yZSBzZW5zaWJsZSBzeXN0ZW0gaWRlbnRpZmllciAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKwlDRkxBR1M9IiRDRkxBR1MgLURtaW5ndzMyIgorZmkKKworIyAgICAgICBIYW5kbGUgLmluIGZpbGUgZXh0ZW5zaW9uICAgICAgICAgICAgICAgICAgICAgICAoR0NDKQorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3NdKQoraWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JENQUCIgPSAieCRDQyAtRSI7IHRoZW4KKyAgICBFWFRSQUNQUEZMQUdTPSIteCBjIgorZWxzZQorICAgIEVYVFJBQ1BQRkxBR1M9IiIKK2ZpCisKKyMgICAgICAgU29sYXJpcyBleHRyYSBDUFAgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCitpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCisgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgICAgIHNvbGFyaXMqKSBFWFRSQUNQUEZMQUdTPSIkRVhUUkFDUFBGTEFHUyAtWHMiIDs7CisgICAgZXNhYworZmkKKworQUNfU1VCU1QoRVhUUkFDUFBGTEFHUykKK0FDX01TR19SRVNVTFQoJEVYVFJBQ1BQRkxBR1MpCisKKworIyAgIENvbXBpbGVyIGNoZWNrczoKKyMKKworQUNfUEFUSF9QUk9HKFtDQ1BBVEhdLCRDQykKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIGJzZGkqKQorICAgICAgICAjICAgQ2hlY2sgZm9yIGJ1bmRsZWQgY29tcGlsZXIgICAgICAgICAgICAgICAgICAoQlNEaSkKKyAgICAgICAgIworCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiIC1vICJ4JENDUEFUSCIgPSAieC91c3IvYmluL2NjIjsgdGhlbgorCSAgICBBQ19NU0dfRVJST1IoWworCisqKiogVGhlIEJTREkgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4gIAorKioqIFBsZWFzZSBydW4gY29uZmlndXJlIHdpdGggLS13aXRoLWNjPWdjYworXSkKKwlmaQorICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICAgICMgICBDaGVjayBmb3IgYnVuZGxlZCBjb21waWxlciAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorICAgICAgICAjCisJaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyI7IHRoZW4KKwkgICAgQUNfTVNHX0VSUk9SKFsKKworKioqIFRoZSBzb2xhcmlzIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuICAKKyoqKiBQbGVhc2UgcHV0IGEgZGlmZmVyZW50IGNvbXBpbGVyIGluIHlvdXIgcGF0aCBmaXJzdCBvciBydW4KKyoqKiBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9WFgsIHdoZXJlIFhYIGlzIHRoZSBjb21waWxlciB5b3Ugd2FudCB0byB1c2UuCitdKQorCWZpCisgICAgOzsKK2VzYWMKKworCisjICAgQ29tcGlsZXIgZmxhZ3M6CisjCisKKyMgVGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGlzIG5vdCBzdHJpY3QtYWxpYXNpbmcgc2FmZSwgc28gYWRkCisjIC1mbm8tc3RyaWN0LWFsaWFzaW5nIHRvICRDRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LgorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZ10pCituZXRzbm1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorQ0ZMQUdTPSItZm5vLXN0cmljdC1hbGlhc2luZyAkQ0ZMQUdTIgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW0FDX01TR19SRVNVTFQoW3llc10pXSwgWworICBBQ19NU0dfUkVTVUxUKFtub10pCisgIENGTEFHUz0iJG5ldHNubXBfc2F2ZV9DRkxBR1MiCitdKQorCisKKyMgICBMaW5rZXIgY2hlY2tzOgorIworICAgIAorY2FzZSAkdGFyZ2V0X29zIGluCisgICAgYWl4NC4yKnxhaXg0LjMqfGFpeDUqfGFpeDYqfGFpeDcqKQorICAgICAgICAjICAgUnVudGltZSBsaW5raW5nIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAoQUlYKQorICAgICAgICAjCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYXSkKKyAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rPXllcworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIHRlc3QgIlgkbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2siICE9ICJYeWVzIjsgdGhlbgorCSAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKwkgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1XbCwtYnJ0bCIKKwkgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1icnRsIgorCSAgICBmaQorICAgICAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfYWl4X2xkZmxhZ3MgJExERkxBR1MiCisJICAgIEFDX01TR19SRVNVTFQoJG5ldHNubXBfYWl4X2xkZmxhZ3MpCisJZWxzZQorCSAgICBBQ19NU0dfUkVTVUxUKFtub25lXSkKKwlmaQorCTs7CisKKyAgICBkYXJ3aW44KnxkYXJ3aW45KnxkYXJ3aW4xMCp8ZGFyd2luMTEqfGRhcndpbjEyKnxkYXJ3aW4xMyopCisgICAgICAgICMgICBGbGF0IE5hbWVzcGFjZSBsaW5raW5nICAgICAgICAgICAgICAgICAgICAgIChNYWMgT1MvWCkKKyAgICAgICAgIworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlXSkKKwlpZiB0ZXN0IC16ICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsgdGhlbgorCQlMREZMQUdTPSItZmxhdF9uYW1lc3BhY2UgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlcyAtZnJhbWV3b3JrIERpc2tBcmJpdHJhdGlvbiAtZnJhbWV3b3JrIElPS2l0ICRMREZMQUdTIgorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbbm9dKQorCWZpCisJOzsKKworICAgICopCisgICAgICAgIDs7Citlc2FjCisKKworIyAgICAgICBkcGtnIHBhY2thZ2UgKHN3aW50c3RfYXB0KQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19QQVRIX1BST0coW0RQS0dfUVVFUllfUEFUSF0sIGRwa2ctcXVlcnkpCitpZiB0ZXN0IHgkRFBLR19RVUVSWV9QQVRIICE9IHg7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9EUEtHX1FVRVJZLCAxLCBbU2V0IGlmIHRoZSBkcGtnLXF1ZXJ5IGNvbW1hbmQgaXMgYXZhaWxhYmxlXSkKK2ZpCisKKworIyMKKyMgICBOb24tcHJvZ3JhbS9jb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgICAgIFN1YnN0aXR1dGUgdmVyc2lvbiBudW1iZXIuCisjCitBQ19TVUJTVChWRVJTSU9OLCAkUEFDS0FHRV9WRVJTSU9OKQorQUNfTVNHX0NBQ0hFX0FERChOZXQtU05NUCBWZXJzaW9uOiAgICAgICAgICAgJFBBQ0tBR0VfVkVSU0lPTikKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzIGIvY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNmIyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMKQEAgLTAsMCArMSw3MTUgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgZGF0YSBzdHJ1Y3R1cmVzICYgbWVtYmVycworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU2ltcGxlIGNoZWNrczoKKyMjCisKKyMgICAgICAgc3RydWN0IGFycGhkCisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgYXJwaGQuYXRfbmV4dF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgZGVzX2tzX3N0cnVjdAorIyAgICAgICAgICgnd2Vha19rZXknIGluZGljYXRlcyBvbGRlciB2ZXJzaW9uIG9mIE9wZW5TU0wpCisjICAgTGlicmFyeToKKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfZGVzX2giID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBkZXNfa3Nfc3RydWN0LndlYWtfa2V5XSwsLFtbCisjaWZkZWYgSEFWRV9PUEVOU1NMX0RFU19ICisjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKyNlbmRpZgorICAgIF1dKQorZmkKKworIyAgICAgICBzdHJ1Y3QgZGlyZW50CisjICAgICAgICAgKHNlZSBhbHNvIEFDX1NUUlVDVF9ESVJFTlRfRF9UWVBFKQorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgZGlyZW50LmRfdHlwZV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBldGh0b29sX2NtZAorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfZXRodG9vbF9oIiA9ICJ4eWVzIiA7IHRoZW4KK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBldGh0b29sX2NtZC5zcGVlZF9oaV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2VuZGlmCisgICAgXV0pCitmaQorCisjICAgICAgIHN0cnVjdCBpcHN0YXQKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpcHN0YXQuaXBzX2NhbnRmcmFnLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfZGVsaXZlcmVkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19mcmFnbWVudGVkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfbG9jYWxvdXQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19ub3Byb3RvLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfbm9yb3V0ZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX29kcm9wcGVkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfb2ZyYWdtZW50cywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX3JlYXNzZW1ibGVkXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisjICAgICAgIHN0cnVjdCBpcDZzdGF0CisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaXA2c3RhdC5pcDZzX2V4dGhkcnRvb2xvbmcgXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVQ2X0lQNl9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisjCisjICAgTm90LVVzZWQ6CitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaXBzdGF0Lmlwc19jYW50Zm9yd2FyZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0XSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IG1ic3RhdAorIyAgIE5vdC1Vc2VkOgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IG1ic3RhdC5tX2NsdXN0ZXJzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IG1ic3RhdC5tX2NsZnJlZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnN0YXQubV9tYnVmc10sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01CVUZfSAorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKKyAgICBdXSkKKworIwlzdHJ1Y3QgdXZtZXhwCisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdXZtZXhwLnBnc3dhcGluXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaW5jbHVkZSA8dXZtL3V2bV9leHRlcm4uaD4KKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgbmxpc3QKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBubGlzdC5uX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IG5saXN0NjQubl92YWx1ZV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfTkxJU1RfSAorI2luY2x1ZGUgPG5saXN0Lmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uCisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc2lnYWN0aW9uLnNhX3NpZ2FjdGlvbl0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NJR05BTF9ICisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzb2NrYWRkci5zYV9sZW4sCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIuc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UuX19zc19mYW1pbHldLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAgICAgKHNlZSBSRkMgMjU1MykKKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyX3VuCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX1NJWkVPRihbc29ja2FkZHJfdW4uc3VuX3BhdGhdLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVAorICAgIFsKKyNpZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZW5kaWYKK3N0cnVjdCBzb2NrYWRkcl91biBzb2NrYWRkcl91bjsKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc3RhdGZzCisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdGZzLmZfZmF2YWlsLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXRmcy5mX2ZmcmVlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXRmcy5mX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXRmcy5mX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXRmcy5mX2Zyc2l6ZV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmIAorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZiAKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc3RhdHZmcworIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXR2ZnMuZl9maWxlcywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0dmZzLmZfZnJzaXplLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXR2ZnMubW50X2Rpcl0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVFZGU19ICisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzd2RldnQKKyMgICBOb3QtVXNlZDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzd2RldnQuc3dfbmJsa3NlbmFibGVkXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfQ09ORl9ICisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCB0Y3BzdGF0CisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdGNwc3RhdC50Y3BfcmN2bWVtZHJvcF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCB0bQorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdG0udG1fZ210b2ZmXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgZXh0ZXJuIHRpbWV6b25lCitBQ19NU0dfQ0hFQ0tJTkcoW2V4dGVybiB0aW1lem9uZV0pCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCitdXSwgW1sKKyAgcmV0dXJuIHRpbWV6b25lOworXV0pXSwgWworQUNfTVNHX1JFU1VMVChbeWVzXSkKK0FDX0RFRklORShbSEFWRV9USU1FWk9ORV9WQVJJQUJMRV0sIFsxXSwgW0RlZmluZSBpZiBhIHRpbWV6b25lIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGluIDxzeXMvdGltZS5oPl0pCitdLCBbCitBQ19NU0dfUkVTVUxUKFtub10pCitdKQorCisjICAgICAgIHN0cnVjdCB0aW1lem9uZQorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdGltZXpvbmUudHpfZHN0dGltZV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1RJTUVCX0gKKyMgaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZW5kaWYKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgdWRwc3RhdAorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHVkcHN0YXQudWRwc19kaXNjYXJkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcHN0YXQudWRwc19mdWxsc29jaywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBzdGF0LnVkcHNfbm9wb3J0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcHN0YXQudWRwc19ub3BvcnRiY2FzdCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBzdGF0LnVkcHNfaXBhY2tldHMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwc3RhdC51ZHBzX29wYWNrZXRzXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisKKworIyMKKyMgICBpZm5ldC1yZWxhdGVkIGNoZWNrczoKKyMjCisKKyMgICAgICAgRG9lcyAic3RydWN0IGlmbmV0IiBuZWVkIF9LRVJORUwgZGVmaW5lZD8gICAgICAgKElyaXgpCisjCitBQ19DQUNIRV9DSEVDSyhbaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHVdLAorICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMXSwKKyAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTD11bmtub3duCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisgICAgICAgICAgICAgXSwgW1tzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwO11dKV0sCisgICAgICAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ub10pCisgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9IHVua25vd24gOyB0aGVuCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKyNkZWZpbmUgX0tFUk5FTCAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorICAgICAgICAgICAgIF0sIFtbc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDtdXSldLAorICAgICAgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUw9eWVzXSkKKyAgICAgICAgIGZpXSkKKworaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gInh5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMLCAxLAorICAgICAgICBbaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWRdKQorZmkKKworIyAgICAgICBEb2VzICJzdHJ1Y3QgaWZuZXQiIG5lZWQgX0tFUk5FTF9TVFJVQ1RVUkVTIGRlZmluZWQ/ICAgICAgIChEcmFnb25GbHkgMykKKyMKK0FDX0NBQ0hFX0NIRUNLKFtpZiBfS0VSTkVMX1NUUlVDVFVSRVMgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1XSwKKyAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTXSwKKyAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPXVua25vd24KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyAgICAgICAgICAgICBdLCBbW3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7XV0pXSwKKyAgICAgICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9bm9dKQorICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA9IHVua25vd24gOyB0aGVuCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisgICAgICAgICAgICAgXSwgW1tzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwO11dKV0sCisgICAgICAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPXllc10pCisgICAgICAgICBmaV0pCisKK2lmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID0gInh5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMsIDEsCisgICAgICAgIFtpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUxfU1RSVUNUVVJFUyBkZWZpbmVkXSkKK2ZpCisKKworIyAgICAgICBzdHJ1Y3QgaWZhZGRyCisjICAgTm90LVVzZWQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaWZhZGRyLmlmYV9uZXh0XSwsLFsKKyAgICBbCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorICAgIF0KKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgaWZuZXQKKyMgICAgICAgICAoQnJva2VuIG9uIEZyZWVCU0QgLSAjZGVmaW5lJ2QgaW4gPG5ldC9pZi5oPikKKyMgICBBZ2VudDogICAoP29yIE5vdC1Vc2VkPykKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpZm5ldC5pZl9hZGRybGlzdCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9hZGRyaGVhZC50cWhfZmlyc3QsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfYmF1ZHJhdGUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2lieXRlcywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9pbWNhc3RzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2lxZHJvcHMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9zZWMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9uc2VjLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX210dSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9ub3Byb3RvLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX29ieXRlcywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9vbWNhc3RzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX3NwZWVkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX3R5cGUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfeG5hbWVdLCwsW1sKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKyAgICBdXSkKKworCisjIENoZWNrIGZvciBCU0QgNC4zIHZzIDQuNCBzdHJ1Y3QgcnRlbnRyeQorIworQUNfQ0FDSEVfQ0hFQ0soW3R5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmVdLAorICAgIFthY19jdl9SVEVOVFJZX1RZUEVdLAorICAgIFsKKyAgICAgICAgIyBCU0QgNC40IGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMgICAgKCdydF9ub2RlcycgYXJyYXkpCisgICAgICAgICMKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorICAgICAgICBdLFsKKworI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAorI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQorI2VuZGlmCisKKyAgc3RydWN0IHJ0ZW50cnkgcnQ7IAorICBydC5ydF9ub2Rlc1swXS5ybl9mbGFncyA9IDE7CisgIHJ0LnJ0X2RzdDsKKyAgICAgICAgXSwgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC40IikKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KKyAgICAgICAgIyBCU0QgNC4zIGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMgICAgKCdydF9oYXNoJykKKyAgICAgICAgIworICAgICAgICBBQ19UUllfQ09NUElMRShbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisgICAgICAgIF0sWworCitzdHJ1Y3QgcnRlbnRyeSBydDsgCitydC5ydF9oYXNoOworICAgICAgICBdLCBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjMiKQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgorICAgICAgICAjIE5laXRoZXIgQlNEIDQuMyBub3IgNC40IGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMKKyAgICAgICAgICAgIGFjX2N2X1JURU5UUllfVFlQRT0idW5rbm93biIKKyAgICAgICAgZmkKKyAgICBdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjQiOyB0aGVuCisgICAgQUNfREVGSU5FKFJURU5UUllfNF80LCAxLCBbVXNlIEJTRCA0LjQgcm91dGluZyB0YWJsZSBlbnRyaWVzP10pCitmaQorCisjICAgIENoZWNrIGZvciBvcnRlbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBbHBoYSkKKyMKK2lmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4dW5rbm93biI7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCBydGVudHJ5XSwKKyAgICAgICAgW2FjX2N2X3N0cnVjdF9ydGVudHJ5XSwKKyAgICAgICAgW0FDX0VHUkVQX0NQUChvcnRlbnRyeSwKKyAgICAgICAgICAgIFsKKyNkZWZpbmUgS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgW2FjX2N2X3N0cnVjdF9ydGVudHJ5PW9ydGVudHJ5XSwKKyAgICAgICAgICAgIFthY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5IF0pCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gInhydGVudHJ5IiA7IHRoZW4KKyAgICAgICAgICAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJvcnRlbnRyeSIKKyAgICAgICAgZmkKKyAgICBdKQorZWxzZQorICAgIFJURU5UUllfVFlQRT0icnRlbnRyeSIKKyAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKK2ZpCisKK2lmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gIngiOyB0aGVuCisgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeQorZmkKK0FDX0RFRklORV9VTlFVT1RFRChSVEVOVFJZLHN0cnVjdCAke2FjX2N2X3N0cnVjdF9ydGVudHJ5fSwKKyAgICAgICAgW2RlZmluZSBydGVudHJ5IHRvIG9ydGVudHJ5IG9uIFNZU1YgbWFjaGluZXMgKGFscGhhcyldKQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTg4NmExCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcwpAQCAtMCwwICsxLDIwOCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciB0eXBlcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKworQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKKworQUNfVFlQRV9JTlQ4X1QKK0FDX1RZUEVfSU5UMTZfVAorQUNfVFlQRV9JTlQzMl9UCitBQ19UWVBFX0lOVDY0X1QKK0FDX1RZUEVfSU5UTUFYX1QKK0FDX1RZUEVfVUlOVDhfVAorQUNfVFlQRV9VSU5UMTZfVAorQUNfVFlQRV9VSU5UMzJfVAorQUNfVFlQRV9VSU5UNjRfVAorQUNfVFlQRV9VSU5UTUFYX1QKK0FDX1RZUEVfSU5UUFRSX1QKK0FDX1RZUEVfVUlOVFBUUl9UCisKKyMjCisjICAgT3RoZXIgdHlwZSBjaGVja3M6CisjIworCitBQ19DSEVDS19UWVBFUyhbb2ZmNjRfdF0pCitBQ19DSEVDS19UWVBFUyhbbmZkc190XSwsLFsjaW5jbHVkZSA8c3lzL3BvbGwuaD5dKQorCisjICAgU29sYXJpcyBzcGVjaWZpYyBjaGVja3MKKyMgICAgICAgKHRha2VuIGZyb20gUGVybCdzIGNvbmZpZ3VyZSBzY3JpcHQpCisjCitBQ19DSEVDS19UWVBFUyhbQ291bnRlcjY0XSwsLFsjaW5jbHVkZSA8aW5ldC9taWIyLmg+XSkKK0FDX0NIRUNLX1RZUEVTKFttaWIyX2lwSWZTdGF0c0VudHJ5X3RdLCwsWyNpbmNsdWRlIDxpbmV0L21pYjIuaD5dKQorCisjICAgTi5COiAgVGhlIGFib3ZlIGNoZWNrcyBjb3VsZCBzYWZlbHkgYmUgbW92ZWQgdG8KKyMgICAgICAgICB0aGUgbGF0ZXIgJ2NvbmZpZ190eXBlcycgc3ViLXNjcmlwdAorIworCisKKyMjCisjICAgRGV0ZXJtaW5lIHRoZSBJUHY2IHN0YWNrIHR5cGUKKyMjCisKKyMgICAgICAgVGhlc2UgY2hlY2tzIGFsc28gc2V0IHRoZSBMSUJTL0NGTEFHUyB2YXJpYWJsZXMsCisjICAgICAgIHdoaWNoIG1heSBiZSBuZWVkZWQgZm9yIHN1YnNlcXVlbnQgZnVuY3Rpb24gdGVzdHMKKyMKKworaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKwl2NnR5cGU9dW5rbm93bgorCXY2bGliPW5vbmUKKwl2NnRyeWxpYmM9bm8KKworCUFDX01TR19DSEVDS0lORyhbW2lwdjYgc3RhY2sgdHlwZV1dKQorCWZvciBpIGluIHY2ZCB0b3NoaWJhIGthbWUgaW5yaWEgemV0YSBsaW51eC1nbGliYyBsaW51eC1pbmV0NiBjeWd3aW4gd2luc29jazIgZ2VuZXJpYzsgZG8KKwkJY2FzZSAkaSBpbgorCQl2NmQpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8L3Vzci9sb2NhbC92Ni9pbmNsdWRlL3N5cy90eXBlcy5oPgorI2lmZGVmIF9fVjZEX18KK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOyB2NmxpYj12NjsKKwkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKKwkJCQlDRkxBR1M9Ii1JL3Vzci9sb2NhbC92Ni9pbmNsdWRlICRDRkxBR1MiXSkKKwkJCTs7CisJCXRvc2hpYmEpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaWZkZWYgX1RPU0hJQkFfSU5FVDYKK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKKwkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQlrYW1lKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBfX0tBTUVfXworeWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OworCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOworCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJaW5yaWEpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIElQVjZfSU5SSUFfVkVSU0lPTgoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZTsKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCXpldGEpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaWZkZWYgX1pFVEFfTUlOQU1JX0lORVQ2CitBCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CisJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJbGludXgtZ2xpYmMpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfID4gMikpCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lOworCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJbGludXgtaW5ldDYpCisJCQlpZiB0ZXN0IC1kIC91c3IvaW5ldDY7IHRoZW4KKwkJCQl2NnR5cGU9JGkKKwkJCQl2NmxpYj1pbmV0NgorCQkJCXY2bGliZGlyPS91c3IvaW5ldDYvbGliCisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKKwkJCWZpCisJCQk7OworCQljeWd3aW4pCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIF9DWUdXSU5fSU42X0gKK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmUKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKwkJd2luc29jazIpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpZiBkZWZpbmVkKF9XUzJUQ1BJUF9IKQoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZQorCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJZ2VuZXJpYykKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW1twb3N0cG9uZWRdXSkKKwkJCUFDX0NIRUNLX01FTUJFUihbc3RydWN0IHNvY2thZGRyX2luNi5zaW42X2FkZHJdLCwsWworQUNfSU5DTFVERVNfREVGQVVMVCgpCitbI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKK11dKQorCSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW1tpcHY2IHN0YWNrIHR5cGVdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9hZGRyIiA9ICJ4eWVzIjsgdGhlbgorCQkJCXY2dHlwZT0kaQorCQkJCXY2bGliPWR1bW15CisJCQkJdjZsaWJkaXI9bm9uZQorCQkJCXY2dHJ5bGliYz15ZXMKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJCTs7CisJCWVzYWMKKwkJaWYgdGVzdCAiJHY2dHlwZSIgIT0gInVua25vd24iOyB0aGVuCisJCQlicmVhaworCQlmaQorCWRvbmUKKworCWlmIHRlc3QgIiR2NmxpYiIgIT0gIm5vbmUiOyB0aGVuCisJCWlmIHRlc3QgLWQgJHY2bGliZGlyIC1hIC1mICR2NmxpYmRpci9saWIkdjZsaWIuYTsgdGhlbgorCQkJTElCUz0iLUwkdjZsaWJkaXIgLWwkdjZsaWIgJExJQlMiCisJCQllbmFibGVfaXB2Nj0ieWVzIgorCQkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliIl0pCisJCWVsaWYgdGVzdCAiJHY2dHJ5bGliYyIgPSAieWVzIjsgdGhlbgorCQkJZW5hYmxlX2lwdjY9InllcyIKKwkJCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmMiXSkKKwkJZWxzZQorCQkJQUNfTVNHX0VSUk9SKG5vIElQdjYgbGlicmFyeSBsaWIkdjZsaWIuYSBmb3VuZC4pCisJCQlleGl0IDEKKwkJZmkKKwllbHNlCisJCWVuYWJsZV9pcHY2PSJubyIKKwkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiJdKQorCWZpCitmaQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZWZkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwKQEAgLTAsMCArMSwxNzAgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIworIyBQcm9tcHQgZm9yIHZhcmlvdXMgYml0cyBvZiB1c2VyIGluZm9ybWF0aW9uCisjCisKK2lmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIngiOyB0aGVuCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzLCBhY19jdl9oYXZlX3dhcm5lZCwKK1sKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK0FDX01TR19OT1RJQ0UoWworCisJICoqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAqKioqKioqKioqKioqKgorCisJWW91IGFyZSBhYm91dCB0byBiZSBwcm9tcHRlZCB3aXRoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucy4gIEFuc3dlcgordGhlbSBjYXJlZnVsbHksIGFzIHRoZXkgZGV0ZXJtaW5lIGhvdyB0aGUgU05NUCBhZ2VudCBhbmQgcmVsYXRlZAorYXBwbGljYXRpb25zIGFyZSB0byBmdW5jdGlvbi4KKworCUFmdGVyIHRoZSBjb25maWd1cmUgc2NyaXB0IGZpbmlzaGVzLCB5b3UgY2FuIGJyb3dzZSB0aGUgbmV3bHkKK2NyZWF0ZWQgbmV0LXNubXAtY29uZmlnLmggZmlsZSBmb3IgZnVydGhlciAtIGxlc3MgaW1wb3J0YW50IC0gcGFyYW1ldGVycyB0bworbW9kaWZ5LiAgQmUgY2FyZWZ1bCBpZiB5b3UgcmUtcnVuIGNvbmZpZ3VyZSB0aG91Z2gsIHNpbmNlIG5ldC1zbm1wLWNvbmZpZy5oIAord2lsbCBiZSBvdmVyd3JpdHRlbi4KKworLVByZXNzIHJldHVybiB0byBjb250aW51ZS0KK10pCisKK3JlYWQgdG1waW5wdXQgPCZBU19PUklHSU5BTF9TVERJTl9GRAorYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV93YXJuZWQ9Im5vIgorZmkKK10pCitlbHNlCisgIGFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCitmaQorCitNRT1gJFdIT0FNSWAKK2lmIHRlc3QgLWYgL2V0Yy9yZXNvbHYuY29uZjsgdGhlbgorICBMT0M9YGF3ayAnL15kb21haW4ve2xvYz0kTkZ9RU5Ee3ByaW50IGxvY30nIC9ldGMvcmVzb2x2LmNvbmZgCitmaQoraWYgdGVzdCAieCRMT0MiID0geDsgdGhlbgorICBMT0M9IkBuby53aGVyZSIKK2ZpCisKK0FDX1BST01QVF9VU0VSKE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04sWworCisqKiogRGVmYXVsdCBTTk1QIFZlcnNpb246CisKKwlTdGFydGluZyB3aXRoIE5ldC1TTk1QIDUuMCwgeW91IGNhbiBjaG9vc2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgordGhlIFNOTVAgcHJvdG9jb2wgdG8gdXNlIHdoZW4gbm8gdmVyc2lvbiBpcyBnaXZlbiBleHBsaWNpdGx5IG9uIHRoZQorY29tbWFuZCBsaW5lLCBvciB2aWEgYW4gJ3NubXAuY29uZicgZmlsZS4gIEluIHRoZSBwYXN0IHRoaXMgd2FzIHNldCB0bworU05NUHYxLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byBzd2l0Y2ggdG8gU05NUHYzIGlmIGRlc2lyZWQuICBTTk1QdjMKK3dpbGwgcHJvdmlkZSBhIG1vcmUgc2VjdXJlIG1hbmFnZW1lbnQgZW52aXJvbm1lbnQgKGFuZCB0aHVzIHlvdSdyZQorZW5jb3VyYWdlZCB0byBzd2l0Y2ggdG8gU05NUHYzKSwgYnV0IG1heSBicmVhayBleGlzdGluZyBzY3JpcHRzIHRoYXQKK3JlbHkgb24gdGhlIG9sZCBiZWhhdmlvdXIuICAoVGhvdWdoIHN1Y2ggc2NyaXB0cyB3aWxsIHByb2JhYmx5IG5lZWQgdG8KK2JlIGNoYW5nZWQgdG8gdXNlIHRoZSAnLWMnIGNvbW11bml0eSBmbGFnIGFueXdheSwgYXMgdGhlIFNOTVB2MQorY29tbWFuZCBsaW5lIHVzYWdlIGhhcyBjaGFuZ2VkIGFzIHdlbGwuKS4KKyAgIEF0IHRoaXMgcHJvbXB0IHlvdSBjYW4gc2VsZWN0IFwiMVwiLCBcIjJcIiAoZm9yIFNOTVB2MmMpLCBvciBcIjNcIiBhcwordGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGNvbW1hbmQgdG9vbHMgKHNubXBnZXQsIC4uLikgdG8gdXNlLiAgVGhpcworY2FuIGFsd2F5cyBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdXNpbmcgdGhlIC12IGZsYWcgdG8gdGhlIHRvb2xzLCBvcgorYnkgdXNpbmcgdGhlIFwiZGVmVmVyc2lvblwiIHRva2VuIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCisgICBQcm92aWRpbmcgdGhlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj1cInhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0RlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZV0sMyx1bnF1b3RlZCkKKworIyB3ZSB0ZXN0ZWQgdGhpcyBhYm92ZSBiZWZvcmUgdGhlIHByb21wdCwgYnV0IHRoZSBwcm9tcHQgbWF5IGdpdmUgYSBuZXcgdmFsdWUuCitjYXNlICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT059IiBpbgorICBbWzEyM11dKSA7OworICAyYykgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0yIDs7CisgICopCisgICAgQUNfTVNHX0VSUk9SKFtJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC5dKQorICAgIDs7Citlc2FjCisKK0FDX1BST01QVF9VU0VSKE5FVFNOTVBfU1lTX0NPTlRBQ1QsWworCisqKiogU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb246CisKKwlEZXNjcmliZXMgd2hvIHNob3VsZCBiZSBjb250YWN0ZWQgYWJvdXQgdGhlIGhvc3QgdGhlIGFnZW50IGlzCitydW5uaW5nIG9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgVGhpcworY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlIFwic3lzY29udGFjdFwiIHN5bnRheCBpbiB0aGUgYWdlbnQncworY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWNvbnRhY3Q9XCJjb250YWN0XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbl0sJE1FQCRMT0MscXVvdGVkKQorCitBQ19QUk9NUFRfVVNFUihORVRTTk1QX1NZU19MT0MsWworCisqKiogU3lzdGVtIExvY2F0aW9uOgorCisJRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcworYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIHRoaXMgY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlCitcInN5c2xvY2F0aW9uXCIgc3ludGF4IGluIHRoZSBhZ2VudCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1sb2NhdGlvbj1cImxvY2F0aW9uXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitTeXN0ZW0gTG9jYXRpb25dLFVua25vd24scXVvdGVkKQorCitpZiB0ZXN0IC1kIC92YXIvbG9nOyB0aGVuCisgIGRlZmF1bHRsb2c9Ii92YXIvbG9nL3NubXBkLmxvZyIKK2Vsc2UKKyAgZGVmYXVsdGxvZz0iL3Vzci9hZG0vc25tcGQubG9nIgorZmkKKyAgCitBQ19QUk9NUFRfVVNFUihORVRTTk1QX0xPR0ZJTEUsWworCisqKiogTG9nZmlsZSBsb2NhdGlvbjoKKworCUVudGVyIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgc25tcGQgYWdlbnQgdG8gZHVtcAoraW5mb3JtYXRpb24gJiBlcnJvcnMgdG8uICBJZiBub3QgZGVmaW5lZCAoZW50ZXIgdGhlIGtleXdvcmQgXCJub25lXCIKK2F0IHRoZSBwcm9tcHQgYmVsb3cpIHRoZSBhZ2VudCB3aWxsIHVzZSBzdGRvdXQgYW5kIHN0ZGVyciBpbnN0ZWFkLgorKE5vdGU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXItcmlkZGVuIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLikKKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtbG9nZmlsZT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0xvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGVdLCRkZWZhdWx0bG9nLHF1b3RlZCkKKworaWYgdGVzdCAtZCAvdmFyOyB0aGVuCisgIGRlZmF1bHRzdG9yZT0iL3Zhci9uZXQtc25tcCIKKyAgdWNkZGVmYXVsdHN0b3JlPSIvdmFyL3VjZC1zbm1wIgorZWxzZQorICBkZWZhdWx0c3RvcmU9Ii9ldGMvbmV0LXNubXAiCisgIHVjZGRlZmF1bHRzdG9yZT0iL2V0Yy91Y2Qtc25tcCIKK2ZpCisgIAorQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSxbCisKKyoqKiBzbm1wZCBwZXJzaXN0ZW50IHN0b3JhZ2UgbG9jYXRpb246CisKKwlFbnRlciBhIGRpcmVjdG9yeSBmb3IgdGhlIFNOTVAgbGlicmFyeSB0byBzdG9yZSBwZXJzaXN0ZW50CitkYXRhIGluIHRoZSBmb3JtIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBkZWZhdWx0IGxvY2F0aW9uIGlzCitkaWZmZXJlbnQgdGhhbiB0aGUgb2xkIGRlZmF1bHQgbG9jYXRpb24gKHdoaWNoIHdhcyBmb3IgdWNkLXNubXApLiAgSWYKK3lvdSBzdGF5IHdpdGggdGhlIG5ldyBwYXRoLCBJJ2xsIGFzayB5b3UgaW4gYSBzZWNvbmQgaWYgeW91IHdpc2ggdG8KK2NvcHkgeW91ciBmaWxlcyBvdmVyIHRvIHRoZSBuZXcgbG9jYXRpb24gKG9uY2Ugb25seSkuICBJZiB5b3UgcGljaworc29tZSBvdGhlciBwYXRoIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlbSB5b3Vyc2VsZi4KK1RoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBwaWNraW5nIHRoZSBvbGQgcGF0aCAoJHVjZGRlZmF1bHRzdG9yZSkgaWYKK3lvdSdkIHJhdGhlci4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9XCJwYXRoXCIgcGFyYW1ldGVyIHRvCisuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitMb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uXSwkZGVmYXVsdHN0b3JlLHF1b3RlZCkKKworUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKK0FDX1NVQlNUKFBFUlNJU1RFTlRfRElSRUNUT1JZKQorVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JHVjZGRlZmF1bHRzdG9yZQorQUNfU1VCU1QoVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlkpCisKK2lmIHRlc3QgJFBFUlNJU1RFTlRfRElSRUNUT1JZID0gIiRkZWZhdWx0c3RvcmUiIC1hIC1kICIkdWNkZGVmYXVsdHN0b3JlIiAtYSAhIC1kICIkZGVmYXVsdHN0b3JlIiA7IHRoZW4KK0FDX0NBQ0hFX0NIRUNLKElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnksIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUywKK1sKK0FDX1BST01QVF9VU0VSX05PX0RFRklORShhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMsWworCisqKiogQ29weWluZyBvbGQgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcyB0byBuZXQtc25tcCBwZXJzaXN0ZW50IGRpcmVjdG9yeToKKworCVdvdWxkIHlvdSBsaWtlIHRvIGNvcHkgdGhlIG9sZGVyIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMKK2ludG8geW91ciBuZXcgbmV0LXNubXAgcGVyc2lzdGVudCBmaWxlIHBhdGg/ICBUaGlzIHdpbGwgZnVuY3Rpb25hbGx5CitzYXZlIGFsbCB5b3VyIHVjZC1zbm1wIGRhdGEgYW5kIGxldCBpdCBiZSB1c2VkIHdpdGhpbiB0aGUgbmV0LXNubXAKK3Rvb2xzLiAgVGhpcyB3aWxsIG9ubHkgYmUgZG9uZSBvbmNlIHdoZW4geW91IHJ1biBtYWtlIGluc3RhbGwuICBJZiB5b3UKK3dpc2ggdG8gZG8gdGhpcywgZW50ZXIgInllcyIgYXQgdGhlIHByb21wdC4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPVwibm9cIiAob3IgXCJ5ZXNcIikKK3BhcmFtZXRlcnMgdG8gLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworQ29weSB1Y2Qtc25tcCBkYXRhIGludG8gdGhlIG5ldC1zbm1wIGRhdGEgZGlyZWN0b3J5XSwieWVzIikKK10pCitlbHNlCithY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9Im5vIgorZmkKK0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIKK0FDX1NVQlNUKENPUFlfUEVSU0lTVEVOVF9GSUxFUykKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5MGM4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzCkBAIC0wLDAgKzEsMTAxIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDb25maWd1cmUgcGF0aHMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFByZWZpeCBwYXRoczoKKyMjCisKKyMgICBNYWluIHByZWZpeAorIworaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgorICBwcmVmaXg9L3Vzci9sb2NhbAorZmkKKworIyAgICAgICBQcmVmaXggbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoCisjICAgICAgICAgICBpLmUuIGJlZ2luIHdpdGggIi8iICAgICAgICAgICAgICAgICAgICAgICAgIChVbml4KQorIyAgICAgICAgICAgICAgICBvciAiW0EtWl06IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2luZG93cykKKyMKK2ZpcnN0Y2hhcj1gZWNobyAkcHJlZml4IHwgJFNFRCAncy9cKC5cKS4qL1wxLydgCitpZiB0ZXN0ICJ4JGZpcnN0Y2hhciIgIT0gIngvIiA7IHRoZW4KKyAgIHNlY29uZGNoYXI9YGVjaG8gJHByZWZpeCB8ICRTRUQgJ3MvLlwoLlwpLiovXDEvJ2AKKyAgIGlmIHRlc3QgIngkc2Vjb25kY2hhciIgIT0gIng6IiA7IHRoZW4KKyAgICAgIHByZWZpeD1gcHdkYC8kcHJlZml4CisgICAgICBlY2hvICJhZGp1c3RpbmcgcHJlZml4IHRvICRwcmVmaXgiCisgICBmaQorZmkKKworCisjICAgRXhlYyBwcmVmaXgKKyMKKyMgICAgICAgUHJlZml4IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aAorIyAgICAgICAgICAgaS5lLiBiZWdpbiB3aXRoICIvIiAgICAgICAgICAgICAgICAgICAgICAgICAoVW5peCkKKyMgICAgICAgICAgICAgICAgb3IgIltBLVpdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdpbmRvd3MpCisjCitpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCitlbHNlCisgICBmaXJzdGNoYXI9YGVjaG8gJGV4ZWNfcHJlZml4IHwgJFNFRCAncy9cKC5cKS4qL1wxLydgCisgICBpZiB0ZXN0ICJ4JGZpcnN0Y2hhciIgIT0gIngvIiA7IHRoZW4KKyAgICAgIHNlY29uZGNoYXI9YGVjaG8gJGV4ZWNfcHJlZml4IHwgJFNFRCAncy8uXCguXCkuKi9cMS8nYAorICAgICAgaWYgdGVzdCAieCRzZWNvbmRjaGFyIiAhPSAieDoiIDsgdGhlbgorICAgICAgICAgZXhlY19wcmVmaXg9YHB3ZGAvJGV4ZWNfcHJlZml4CisgICAgICAgICBlY2hvICJhZGp1c3RpbmcgZXhlY19wcmVmaXggdG8gJGV4ZWNfcHJlZml4IgorICAgICAgZmkKKyAgIGZpCitmaQorCisKKyMjCisjICAgRW52aXJvbm1lbnRhbCB2YXJpYWJsZXM6CisjIworCisjICAgICAgIFNOTVBMSUJQQVRICisjCitTTk1QTElCUEFUSD0iIgordG1wc2V0PSIkbGliZGlyL3NubXAiCit3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUExJQlBBVEgiOyBkbworICAgIFNOTVBMSUJQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorZG9uZQorQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBMSUJQQVRILCIkU05NUExJQlBBVEgiKQorQUNfU1VCU1QoU05NUExJQlBBVEgpCitBQ19ERUZJTkVfVU5RVU9URUQoU05NUERMTU9EUEFUSCwiJFNOTVBMSUJQQVRIL2RsbW9kIikKKworIyAgICAgICBTTk1QU0hBUkVQQVRICisjCitTTk1QU0hBUkVQQVRIPSIiCit0bXBzZXQ9IiRkYXRhZGlyL3NubXAiCit3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUFNIQVJFUEFUSCI7IGRvCisgICAgU05NUFNIQVJFUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKK2RvbmUKK0FDX0RFRklORV9VTlFVT1RFRChTTk1QU0hBUkVQQVRILCIkU05NUFNIQVJFUEFUSCIpCitBQ19TVUJTVChTTk1QU0hBUkVQQVRIKQorCisjICAgICAgIE1JQkRJUlMgICAoZGVmYXVsdCkKKyMKK2lmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiID0gIngiOyB0aGVuCisgICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IlwkSE9NRS8uc25tcC9taWJzOiRTTk1QU0hBUkVQQVRIL21pYnMiCisgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAgICAgICAjCisgICAgICAgICMgICAgVVNlIFdpbmRvd3Mtc3R5bGUgcGF0aCBzZXBhcmF0b3IKKyAgICAgICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgfCAkU0VEICdzLzovOy9nJ2AKKyAgICBmaQorICAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRElSUywiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIikKK2ZpCitBQ19TVUJTVChORVRTTk1QX0RFRkFVTFRfTUlCRElSUykKKworIyAgICAgICBTTk1QQ09ORlBBVEgKKyMKK1NOTVBDT05GUEFUSD0iIgordG1wc2V0PSIkc3lzY29uZmRpci9zbm1wIgord2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBDT05GUEFUSCI7IGRvCisgICAgU05NUENPTkZQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorZG9uZQorQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBDT05GUEFUSCwiJFNOTVBDT05GUEFUSCIpCitBQ19TVUJTVChTTk1QQ09ORlBBVEgpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjhjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbgpAQCAtMCwwICsxLDM3OSBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgICBQZXJsICYgUHl0aG9uIHN1cHBvcnQKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIENoZWNrIHdoZXRoZXIgTmV0LVNOTVAgY29uZmlndXJhdGlvbiB3aWxsIHN1cHBvcnQgUGVybAorIyMKKworIyAgIElucHV0czoKKyMgICAgICAgaW5zdGFsbF9wZXJsOiAgIHdoZXRoZXIgb3Igbm90IHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcy9uby90cnkgICAoaS5lLiAnbWF5YmUnIC0gdGhlIGRlZmF1bHQpCisjICAgICAgIGVtYmVkX3Blcmw6ICAgICB3aGV0aGVyIG9yIG5vdCB0byBlbWJlZCBQZXJsIHN1cHBvcnQgd2l0aGluIHRoZSBhZ2VudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcy9uby90cnkgICAoaS5lLiAnbWF5YmUnIC0gdGhlIGRlZmF1bHQpCisjCisjICAgICAgIGFjX2N2X3BhdGhfUEVSTFBST0c6ICAgIFBhdGggdG8gcGVybCBiaW5hcnkKKworCisjICAgICAgIEVtYmVkZGVkIFBlcmwgcmVxdWlyZXMgUGVybCBtb2R1bGVzLCBhbmQgdGhlIHBlcmwgYmluYXJ5CisjCitpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9InRyeSIKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieCIgLW8gIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgZmkKK2ZpCisKKyMgICAgICAgUGVybCBtb2R1bGVzIHJlcXVpcmUgdGhlIHBlcmwgYmluYXJ5CisjCitpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgbXlwZXJsPSRhY19jdl9wYXRoX1BFUkxQUk9HCisgICAgaWYgdGVzdCAkbXlwZXJsID0gIm5vIiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgcmVxdWVzdGVkIGJ1dCBubyBwZXJsIGV4ZWN1dGFibGUgZm91bmQpCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisKKyMgICAgICAgUGVybCBtb2R1bGVzIHJlcXVpcmUgc2hhcmVkIGxpYnJhcmllcworIworaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihQZXJsIHN1cHBvcnQgcmVxdWlyZXMgLS1lbmFibGUtc2hhcmVkKQorICAgICAgICBmaQorICAgIGZpCitmaQorCisjICAgICAgIFBlcmwgbW9kdWxlcyBjYW4gb25seSBiZSBpbnN0YWxsZWQgZnJvbSB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlCisjCitpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlc10pCisgICAgaWYgdGVzdCAieCRzcmNkaXIiID0gInguIiAtbyAtZCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUgOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoW1llc10pCisgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbTm9dKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1BlcmwgbW9kdWxlcyBjYW4gbm90IGJlIGJ1aWx0IG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnldKQorICAgICAgICBmaQorICAgIGZpCitmaSAgICAgIAorCisKKyMgICBUaGUgcmVzdCBvZiB0aGUgUGVybC1yZWxhdGVkIGNoZWNrcyBhcmVuJ3QgcmVsZXZhbnQKKyMgICAgICAgaWYgd2UncmUgbm90IHVzaW5nIHRoZSBQZXJsIG1vZHVsZXMKKyMKK2lmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKworCisjIworIyAgIENoZWNrIGNvbXBpbGVyIGNvbXBhdGFiaWxpdHkKKyMjCisKKyAgICAjICAgICAgIFdoYXQgY29tcGlsZXIgd2FzIHVzZWQgdG8gYnVpbGQgdGhlIHBlcmwgYmluYXJ5PworICAgICMKKyAgICBpZiB0ZXN0ICJ4ZW5hYmxlX3BlcmxfY2NfY2hlY2tzIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBjY10pCisgICAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgICBQRVJMQ0M9YCRteXBlcmwgLVY6Y2MgfCAkbXlwZXJsIC1uIC1lICdwcmludCBpZiAocy9eXHMqY2M9LihbLT1cd1xzXC9dKykuO1xzKi8kMS8pOydgCisgICAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisgICAgICAgIGlmIHRlc3QgIngkUEVSTENDIiAhPSAieCIgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFskUEVSTENDXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHRvIGJ1aWxkIHdpdGhvdXQgUGVybC5dKQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyAgICAgICBXYXMgR0NDIHVzZWQgdG8gYnVpbGQgdGhlIHBlcmwgYmluYXJ5PworICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXJdKQorICAgICAgICBPTERDQz0kQ0MKKyAgICAgICAgQ0M9IiRQRVJMQ0MiCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbXSwgW1sKKyNpZm5kZWYgX19HTlVDX18KKyAgY2hva2UgbWUKKyNlbmRpZgorICAgICAgICAgICAgXV0pXSwgW3BlcmxjY19pc19nbnU9eWVzXSwgW3BlcmxjY19pc19nbnU9bm9dKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFskcGVybGNjX2lzX2dudV0pCisgICAgICAgIENDPSRPTERDQworCisgICAgICAgICMgICAgICAgQ2hlY2sgY29tcGF0YWJpbGl0eTogIEdudSBOZXQtU05NUCB2cyBOb24tR251IHBlcmwKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgIAkgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAJICAgIGVsc2UKKyAgICAgIAkgICAgICAgIEFDX01TR19FUlJPUihbVGhpcyBidWlsZCBpcyB1c2luZyBhIEdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIG5vbi1HTlUgKG9yIG5vbi13b3JraW5nKSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS5dKQorICAgICAgCSAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgICAgIENoZWNrIGNvbXBhdGFiaWxpdHk6ICBOb24tR251IE5ldC1TTk1QIHZzIEdudSBwZXJsCisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIAkgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgCSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgIAkgICAgZWxzZQorICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbVGhpcyBidWlsZCBpcyB1c2luZyBhIG5vbi1HTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuXSkKKyAgICAgIAkgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyAgICAgICBBcmUgd2UgY2xlYXIgdG8gcHJvY2VlZD8KKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9InllcyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgICBmaQorICAgIGZpCisKKworIyMKKyMgICBEZXRlcm1pbmUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsCisjIworCisjICAgICAgIFN5c3RlbS1zcGVjaWZpYyByZXF1aXJlbWVudHMKKyMKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIHNvbGFyaXMqKQorICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAjICAgQ2hlY2sgZm9yIExBUkdFRklMRSBzdXBwb3J0ICAgICAgICAgICAgICAgKFNvbGFyaXMpCisgICAgICAgICAgIworICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3Vuc10pCisgICAgICAgICAgaWYgJG15cGVybCAtVjpjY2ZsYWdzIHwgJEdSRVAgTEFSR0VGSUxFID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbUGVybCB3YXMgY29tcGlsZWQgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydCB3aGljaCB3aWxsIGJyZWFrIE5ldC1TTk1QLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBrbm93bl0pCisgICAgICAgICAgZmkKKyAgICAgIGZpCisgICAgOzsKKworICAgICMgRW1iZWRkZWQgcGVybCB0eXBpY2FsbHkgZmFpbHMgb24gSFAtVVggYW5kIE1hYyBPUyBYCisgICAgIyBXZSByZWFsbHkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHksIGFuZCBjaGVjayBmb3IgdGhpcyBleHBsaWNpdGx5CisgICAgIyBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0dXJuIHRoaXMgb2ZmIGJ5IGRlZmF1bHQKKyAgICBocHV4KnxkYXJ3aW44KnxkYXJ3aW45KnxkYXJ3aW4xMCopCisgICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfV0FSTihbRW1iZWRkZWQgcGVybCBkZWZhdWx0aW5nIHRvIG9mZl0pCisgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgICAgZmkKKyAgICA7OworCisgICAgKikKKyAgICA7OworZXNhYworCisjICAgICAgIENvbXBpbGVyIGZsYWdzCisjCitpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgQ0ZMQUdTXSkKKyAgICBwZXJsY2ZsYWdzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGNjb3B0c2AKKyAgICBpZiB0ZXN0ICJ4JHBlcmxjZmxhZ3MiICE9ICJ4IiA7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoWyRwZXJsY2ZsYWdzXSkKKyAgICAgIENGTEFHUz0iJENGTEFHUyAkcGVybGNmbGFncyIKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBDIGNvbXBpbGVyIGZsYWdzIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQorICAgICAgZmkKKyAgICBmaQorZmkKKworIyAgICAgICBMaW5rZXIgZmxhZ3MKKyMKK2lmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBMREZMQUdTXSkKKyAgICBuZXRzbm1wX3BlcmxsZG9wdHM9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgbGRvcHRzYAorICAgIGlmIHRlc3QgIngkbmV0c25tcF9wZXJsbGRvcHRzIiAhPSAieCIgOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFskbmV0c25tcF9wZXJsbGRvcHRzXSkKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBsaW5rZXIgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9hc19uZWVkZWQiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgIyAgIEp1c3QtaW4tdGltZSBsaW5raW5nIHdpbGwgZW1iZWQgdGhlIFBlcmwgbGlicmFyeSB3aXRoaW4KKyAgICAgICMgICAgICAgdGhlIE5ldC1TTk1QIGxpYnJhcnkgKHJhdGhlciB0aGFuIHRoZSBhZ2VudCBhcHBsaWNhdGlvbikKKyAgICAgICMKKyAgICAgIFBFUkxMRE9QVFNfRk9SX0xJQlM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCisgICAgICAjICAgUGVybCBjY2RsZmxhZ3MgKFJQQVRIIHRvIGxpYnBlcmwsIGhvcGVmdWxseSkKKyAgICAgICMKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgQ0NETEZMQUdTXSkKKyAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgbmV0c25tcF9wZXJsY2NkbGZsYWdzPWAkbXlwZXJsIC1WOmNjZGxmbGFncyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50ICQxICciaWYgKC9eXHMqY2NkbGZsYWdzPScoW14nXSspJzsvKTsiYAorICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoWyRuZXRzbm1wX3BlcmxjY2RsZmxhZ3NdKQorICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGNjZGxmbGFncyIKKyAgICBlbHNlCisgICAgICAjICAgT3RoZXJ3aXNlIGVtYmVkIHRoZSBQZXJsIGxpYnJhcnkgd2l0aGluIHRoZSBhcHBsaWNhdGlvbgorICAgICAgIworICAgICAgUEVSTExET1BUU19GT1JfTElCUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKKyAgICAgICMgbGluayAqYXBwbGljYXRpb25zKiBhZ2FpbnN0IGxpYnBlcmwKKyAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCisgICAgZmkKK2ZpCisKKyMgICAgICAgJ1BlcmxfZXZhbF9wdicgZnVuY3Rpb24gKGFuZCBlcXVpdmFsZW50cykKKyMKK2lmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgIyAgIFRocmVlIHBvc3NpYmxlIHZlcnNpb25zIG9mIHRoaXMgcm91dGluZToKKyAgICAjICAgICAgIGV2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvIDUuMDAzXzk3ZCkKKyAgICAjICAgICAgIHBlcmxfZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUuMDA0LzUuMDA1KQorICAgICMgICAgICAgUGVybF9ldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJvbSA1LjZmZikKKyAgICAjCisgICAgT0xETElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJG5ldHNubXBfcGVybGxkb3B0cyIKKyAgICBBQ19DSEVDS19GVU5DUyhldmFsX3B2KQorICAgIEFDX0NIRUNLX0ZVTkMocGVybF9ldmFsX3B2LAorICAgICAgQUNfREVGSU5FKEhBVkVfUEVSTF9FVkFMX1BWX0xDLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYHRoZSBwZXJsX2V2YWxfcHYnIGZ1bmN0aW9uLl0pKQorICAgIEFDX0NIRUNLX0ZVTkMoUGVybF9ldmFsX3B2LAorICAgICAgQUNfREVGSU5FKEhBVkVfUEVSTF9FVkFMX1BWX1VDLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBQZXJsX2V2YWxfcHYnIGZ1bmN0aW9uLl0pKQorICAgIExJQlM9IiRPTERMSUJTIgorICAgICMKKyAgICAjICAgTm90ZSB0aGF0IGF1dG9jb25mIGZsYXR0ZW5zIGNhc2Ugd2hlbiBkZWZpbmluZyB0b2tlbnMsCisgICAgIyAgIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBsYXR0ZXIgdHdvLgorCisgICAgaWYgdGVzdCAieCRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19ldmFsX3B2IiAhPSAieHllcyIgOyB0aGVuCisgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCB0aGUgZXZhbF9wdiwgcGVybF9ldmFsX3B2IG9yIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAjICAgQWN0aXZhdGUgRW1iZWRkZWQgUGVybAorICAgICAgIworICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU1CRURERURfUEVSTCwgMSwKKyAgICAgICAgW0RlZmluZSBpZiB5b3UgYXJlIGVtYmVkZGluZyBwZXJsIGluIHRoZSBtYWluIGFnZW50Ll0pCisgICAgICBPVEhFUkFHRU5UTElCT0JKUz0ic25tcF9wZXJsLm8iCisgICAgICBPVEhFUkFHRU5UTElCTE9CSlM9InNubXBfcGVybC5sbyIKKyAgICAgIE9USEVSQUdFTlRMSUJMRlRTPSJzbm1wX3BlcmwuZnQiCisKKyAgICAgIEVNQkVEUEVSTElOU1RBTEw9ImVtYmVkcGVybGluc3RhbGwiCisgICAgICBFTUJFRFBFUkxVTklOU1RBTEw9ImVtYmVkcGVybHVuaW5zdGFsbCIKKyAgICAgIGVtYmVkX3Blcmw9InllcyIKKyAgICBmaQorZWxzZQorICAgICAgRU1CRURQRVJMSU5TVEFMTD0iIgorICAgICAgRU1CRURQRVJMVU5JTlNUQUxMPSIiCisgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICBmaQorZmkKKworCisjIworIyAgIFJlcG9ydCBhbmQgY29uZmlndXJlIHJlc3VsdHMKKyMjCisKK0FDX1NVQlNUKEVNQkVEUEVSTElOU1RBTEwpCitBQ19TVUJTVChFTUJFRFBFUkxVTklOU1RBTEwpCitBQ19TVUJTVChQRVJMTERPUFRTX0ZPUl9MSUJTKQorQUNfU1VCU1QoUEVSTExET1BUU19GT1JfQVBQUykKKworIyAgICAgICBSZXN1bHRzIG9mIEVtYmVkZGVkIFBlcmwgY2hlY2tzCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0XSkKK2lmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInh5ZXMiIDsgdGhlbgorICBBQ19NU0dfQ0FDSEVfQUREKEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBkaXNhYmxlZCkKKyAgQUNfTVNHX1JFU1VMVChbZGlzYWJsZWRdKQorZWxzZQorICBBQ19NU0dfQ0FDSEVfQUREKEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBlbmFibGVkKQorICBBQ19NU0dfUkVTVUxUKFtlbmFibGVkXSkKK2ZpCisKKyMgICAgICAgUmVzdWx0cyBvZiBQZXJsIE1vZHVsZSBjaGVja3MKKyMKK1BFUkxUQVJHUz0iIgorUEVSTElOU1RBTExUQVJHUz0iIgorUEVSTFVOSU5TVEFMTFRBUkdTPSIiCitQRVJMRkVBVFVSRVM9IiIKK0FDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc10pCitpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHllcyIgOyB0aGVuCisgICAgUEVSTFRBUkdTPSJwZXJsbW9kdWxlcyIKKyAgICBQRVJMSU5TVEFMTFRBUkdTPSJwZXJsaW5zdGFsbCIKKyAgICBQRVJMVU5JTlNUQUxMVEFSR1M9InBlcmx1bmluc3RhbGwiCisgICAgUEVSTEZFQVRVUkVTPSJwZXJsZmVhdHVyZXMiCisgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIGVtYmVkZGFibGUpCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgLS0gYW5kIGVtYmVkZGFibGVdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIG5vdCBlbWJlZGRhYmxlKQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzIC0tIG5vdCBlbWJlZGRhYmxlXSkKKyAgICBmaQorZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBkaXNhYmxlZCkKK2ZpCitBQ19TVUJTVChQRVJMVEFSR1MpCitBQ19TVUJTVChQRVJMSU5TVEFMTFRBUkdTKQorQUNfU1VCU1QoUEVSTFVOSU5TVEFMTFRBUkdTKQorQUNfU1VCU1QoUEVSTEFSR1MpCitBQ19TVUJTVChQRVJMRkVBVFVSRVMpCisKKworIyAgICAgICBSZXNldCBMSUJTIHRvIHByZS1saWJ3cmFwIHZhbHVlICAgKD8/PykKKyMKK0FHRU5UTElCUz0kTElCUworTElCUz0kTk9OQUdFTlRMSUJTCisKKworCisjIworIyAgIFB5dGhvbiBjaGVja3MKKyMjCisKK1BZVEhPTlRBUkdTPSIiCitQWVRIT05JTlNUQUxMVEFSR1M9IiIKK1BZVEhPTlVOSU5TVEFMTFRBUkdTPSIiCitQWVRIT05DTEVBTlRBUkdTPSIiCitQWVRIT05GRUFUVVJFUz0iIgorQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzXSkKK2lmIHRlc3QgIngkaW5zdGFsbF9weXRob24iID0gInh5ZXMiIDsgdGhlbgorICAgIFBZVEhPTlRBUkdTPSJweXRob25tb2R1bGVzIgorICAgIFBZVEhPTklOU1RBTExUQVJHUz0icHl0aG9uaW5zdGFsbCIKKyAgICBQWVRIT05VTklOU1RBTExUQVJHUz0icHl0aG9udW5pbnN0YWxsIgorICAgIFBZVEhPTkNMRUFOVEFSR1M9InB5dGhvbmNsZWFuIgorICAgIFBZVEhPTkZFQVRVUkVTPSJweXRob25mZWF0dXJlcyIKKyAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBidWlsZGluZyBmb3IgJFBZVEhPTlBST0cpCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBkaXNhYmxlZCkKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCitmaQorQUNfU1VCU1QoUFlUSE9OVEFSR1MpCitBQ19TVUJTVChQWVRIT05JTlNUQUxMVEFSR1MpCitBQ19TVUJTVChQWVRIT05VTklOU1RBTExUQVJHUykKK0FDX1NVQlNUKFBZVEhPTkNMRUFOVEFSR1MpCitBQ19TVUJTVChQWVRIT05BUkdTKQorQUNfU1VCU1QoUFlUSE9ORkVBVFVSRVMpCisKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzljODVhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMKQEAgLTAsMCArMSw1NyBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciB0eXBlcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfVFlQRV9PRkZfVAorQUNfVFlQRV9QSURfVAorQUNfSEVBREVSX1RJTUUKKworCisjIworIyAgIE1vcmUgY29tcGxleCBjaGVja3M6CisjIworCisjICAgQ2hlY2sgZm9yICdzb2NrbGVuX3QnICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhQLVVYKQorIworQUNfQ0hFQ0tfVFlQRVMoW3NvY2tsZW5fdF0sLCxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZl0pCisKKworIyAgIENoZWNrIGZvciAnaW5fYWRkcl90JworIyAgICAgICBNYXkgYmUgaW4gPG5ldGluZXQvaW4uaD4gICAgICAgICAgICAgICAgICAgICAgICAoQUlYKQorIworQUNfQ0hFQ0tfVFlQRVMoW2luX2FkZHJfdF0sLCxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZl0pCisKKworIyAgIENoZWNrIGZvciAnc3NpemVfdCcKKyMgICAgICAgTm90IG5lY2Vzc2FyaWx5IGluIDxzeXMvdHlwZXMuaD4gICAgICAgICAgICAgICAgKG9sZGVyIE1pbkdXKQorIworQUNfQ0hFQ0tfVFlQRVMoW3NzaXplX3RdLCwsWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIFNURENfSEVBREVSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmXSkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiYTAyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlCkBAIC0wLDAgKzEsMTE1MCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgICBDb21tYW5kLWxpbmUgcHJvY2Vzc2luZyAtIC0td2l0aC8tLWVuYWJsZQorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3lzdGVtOiBDb21waWxlciBzZXR0aW5ncworIyMKKworQUNfQVJHX1dJVEgoY2MsIFsKK0NvbXBpbGVyIE9wdGlvbnM6CisgIC0td2l0aC1jYz1DQyAgICAgICAgICAgICAgICAgICAgdXNlIENDIHRvIGNvbXBpbGUgKGRlZmF1bHQ9Z2NjKS5dLAorICAgIFtDQz0kd2l0aF9jYztleHBvcnQgQ0NdKQorCitBQ19BUkdfV0lUSChsaW5rY2MsIFsKKyAgLS13aXRoLWxpbmtjYz1DQyAgICAgICAgICAgICAgICB1c2UgQ0MgdG8gbGluayAoZGVmYXVsdD1nY2MpLl0sCisgICAgW0xJTktDQz0kd2l0aF9saW5rY2M7ZXhwb3J0IExJTktDQ10pCisKK0FDX0FSR19XSVRIKGFyLAorWyAgLS13aXRoLWFyPUFSICAgICAgICAgICAgICAgICAgICB1c2UgQVIgYXMgdGhlIGFyY2hpdmVyLl0sCisgICAgW0FSPSR3aXRoX2FyOyBleHBvcnQgQVJdKQorCitBQ19BUkdfV0lUSChlbmRpYW5uZXNzLAorWyAgLS13aXRoLWVuZGlhbm5lc3M9YmlnfGxpdHRsZSAgICBkZWZpbmUgZW5kaWFubmVzcyBvZiB0YXJnZXQgcGxhdGZvcm0gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGluZy5dLAorICAgIFtpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3MgIT0gImJpZyIgLWEgJHdpdGhfZW5kaWFubmVzcyAhPSAibGl0dGxlIiA7IHRoZW4KKyAgICAgICBBQ19NU0dfRVJST1IoW0VuZGlhbm5lc3MgbXVzdCBiZSBiaWcgb3IgbGl0dGxlLCBub3QgIiR3aXRoX2VuZGlhbm5lc3MiLl0pOworICAgICBmaQorXSkKKworQUNfQVJHX1dJVEgoY2ZsYWdzLAorWyAgLS13aXRoLWNmbGFncz1DRkxBR1MgICAgICAgICAgICB1c2UgQ0ZMQUdTIGFzIGNvbXBpbGUgdGltZSBhcmd1bWVudHMuXSwKKyAgICBbQ0ZMQUdTPSR3aXRoX2NmbGFnczsgZXhwb3J0IENGTEFHU10pCisKK0FDX0FSR19XSVRIKGxkZmxhZ3MsCitbICAtLXdpdGgtbGRmbGFncz1MREZMQUdTICAgICAgICAgIHVzZSBMREZMQUdTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuXSwKKyAgICBbTERGTEFHUz0kd2l0aF9sZGZsYWdzOyBleHBvcnQgTERGTEFHU10pCisKK0FDX0FSR19FTkFCTEUoYXMtbmVlZGVkLAorWyAgLS1kaXNhYmxlLWFzLW5lZWRlZCAgICAgICAgICAgICBMaW5rIGxpYnBlcmwgYWdhaW5zdCBhcHBsaWNhdGlvbnMgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBOZXQtU05NUCBsaWJyYXJpZXMuIFVzZSBvbmx5IGlmIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdheSBkb2Vzbid0IHdvcmsuXSkKKworQUNfQVJHX1dJVEgobGlicywKK1sgIC0td2l0aC1saWJzPUxJQlMgICAgICAgICAgICAgICAgdXNlIExJQlMgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC5dLAorICAgIFtMSUJTPSR3aXRoX2xpYnM7IGV4cG9ydCBMSUJTXSkKKworQUNfQVJHX0VOQUJMRShzaWxlbnQtbGlidG9vbCwKK1sgIC0tZW5hYmxlLXNpbGVudC1saWJ0b29sICAgICAgICAgUGFzcyAtLXNpbGVudCB0byBsaWJ0b29sLl0sCisJTElCVE9PTEZMQUdTPS0tc2lsZW50KQorQUNfU1VCU1QoTElCVE9PTEZMQUdTKQorCisKKyMjCisjICAgU3lzdGVtOiBMaWJyYXJ5IHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19XSVRIKGRtYWxsb2MsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZG1hbGxvYz1QQVRIXSwKKyAgICAgICAgICAgICAgICBbVXNlIGRtYWxsb2MgbGlicmFyeSAod3d3LmRtYWxsb2MuY29tKV0pKQorCitORVRTTk1QX0FSR19XSVRIKGVmZW5jZSwKK1sgIC0td2l0aC1lZmVuY2UgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYW5kIHVzZSBsaWJlZmVuY2UgKG1hbGxvYykuXSwKKyAgICAgIHVzZV9lZmVuY2U9IiR3aXRodmFsIikKKwordHJ5cnNhcmVmPW5vCitORVRTTk1QX0FSR19XSVRIKHJzYXJlZiwKK1sgIC0td2l0aC1yc2FyZWY9UEFUSCAgICAgICAgICAgICAgTG9vayBmb3IgbGlicnNhcmVmIGluIFBBVEgvbGliLl0sCisgICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHJ5cnNhcmVmPXllcworICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCisgICAgICB0cnlyc2FyZWY9bm8KKyAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQorICAgICAgdHJ5cnNhcmVmPXllcworICAgIGZpLAorKQorCit0cnlvcGVuc3NsPWRlZmF1bHR5ZXMKK2Fza2Vkb3BlbnNzbD1ubworTkVUU05NUF9BUkdfV0lUSChvcGVuc3NsLAorWyAgLS13aXRoLW9wZW5zc2w9UEFUSCAgICAgICAgICAgICBMb29rIGZvciBvcGVuc3NsIGluIFBBVEgvbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIFBBVEggbWF5IGJlICJpbnRlcm5hbCIgdG8gYnVpbGQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWwgY29waWVkIE9wZW5TU0wgY29kZSBmb3IgVVNNIG9ubHkuXSwKKyAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisgICAgICB0cnlvcGVuc3NsPXllcworICAgICAgYXNrZWRvcGVuc3NsPXllcworICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4aW50ZXJuYWwiOyB0aGVuCisgICAgICB0cnlvcGVuc3NsPWludGVybmFsCisgICAgICBhc2tlZG9wZW5zc2w9aW50ZXJuYWwKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgorICAgICAgdHJ5b3BlbnNzbD1ubworICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1kICIkd2l0aHZhbC9saWIvTWluR1ciOyB0aGVuCisgICAgICAgIExERkxBR1M9Ii1MJHdpdGh2YWwvbGliL01pbkdXICRMREZMQUdTIgorICAgICAgICBDUFBGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlICRDUFBGTEFHUyIKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQorICAgICAgZmkKKyAgICAgIHRyeW9wZW5zc2w9eWVzCisgICAgICBhc2tlZG9wZW5zc2w9eWVzCisgICAgZmksCispCitpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiID0gInhkZWZhdWx0eWVzIjsgdGhlbgorICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKC91c3IvbG9jYWwvc3NsKQorICAgICAgdHJ5b3BlbnNzbD15ZXMKK2ZpCitBQ19BUkdfV0lUSChbc3NsXSwsTkVUU05NUF9JTlZBTElEX1dJVEgoW29wZW5zc2xdKSkKK0FDX0FSR19FTkFCTEUoW3NzbF0sLE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvcGVuc3NsXSkpCisKK2Fza2VkcGtjcz1ubworTkVUU05NUF9BUkdfV0lUSChwa2NzLAorWyAgLS13aXRoLXBrY3M9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBwa2NzMTEgaW4gUEFUSC9saWIuXSwKKyAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisgICAgICBhc2tlZHBrY3M9eWVzCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KKyAgICAgIGFza2VkcGtjcz1ubworICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCisgICAgICBhc2tlZHBrY3M9eWVzCisgICAgZmksCispCisKK3RyeWtyYjU9ZGVmYXVsdHllcworYXNrZWRrcmI1PW5vCitORVRTTk1QX0FSR19XSVRIKGtyYjUsCitbICAtLXdpdGgta3JiNT1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIGtyYjUgaW4gUEFUSC9saWIuXSwKKyAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAgYXNrZWRrcmI1PXllcworICAgICAga3JiNXBhdGg9dW5kZWYKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgorICAgICAgdHJ5a3JiNT1ubworICAgICAga3JiNXBhdGg9dW5kZWYKKyAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGFza2Vka3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPSR3aXRodmFsCisgICAgZmksCispCitpZiB0ZXN0ICJ4JHRyeWtyYjUiID0gInhkZWZhdWx0eWVzIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPS91c3Iva2VyYmVyb3MKK2ZpCisKK0FDX0FSR19XSVRIKGRuc3NlYy1sb2NhbC12YWxpZGF0aW9uLAorICAgICAgICBbICAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gRW5hYmxlIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHVzaW5nIGxpYnZhbCAobm8pXSwgd2FudF9kbnNzZWM9JHdpdGh2YWwsIHdhbnRfZG5zc2VjPW5vKQorQUNfQVJHX0VOQUJMRShbZG5zc2VjLWxvY2FsLXZhbGlkYXRpb25dLCwKKyAgICAgICAgICAgICAgTkVUU05NUF9JTlZBTElEX1dJVEgoW2Ruc3NlYy1sb2NhbC12YWxpZGF0aW9uXSkpCitBQ19BUkdfV0lUSChbZG5zc2VjXSwsTkVUU05NUF9JTlZBTElEX1dJVEgoW2Ruc3NlYy1sb2NhbC12YWxpZGF0aW9uXSkpCitBQ19BUkdfRU5BQkxFKFtkbnNzZWNdLCxORVRTTk1QX0lOVkFMSURfV0lUSChbZG5zc2VjLWxvY2FsLXZhbGlkYXRpb25dKSkKKworTkVUU05NUF9BUkdfV0lUSChycG0sCitbICAtLXdpdGhvdXQtcnBtICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFJQTSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBidWlsZGluZyB0aGUgaG9zdCBNSUIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuXSkKKworCisjIworIyAgIFByb2plY3Q6IEJ1aWxkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKKyMgICAgICAgSW5zdGFsbCBwcmVmaXgKKyMKK0FDX0FSR19XSVRIKGluc3RhbGwtcHJlZml4LAorWyAgLS13aXRoLWluc3RhbGwtcHJlZml4PVBBVEggICAgICBKdXN0IGZvciBpbnN0YWxsaW5nLCBwcmVmaXggYWxsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHdpdGggUEFUSC4gIFRoaXMgaXMga25vd24gbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvbiBzb21lIHN5c3RlbXMgd2l0aCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgKGVnLCBIUFVYKV0sCisgICAgICBJTlNUQUxMX1BSRUZJWD0iJHdpdGh2YWwiKQorCitpZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFstLXdpdGgtaW5zdGFsbC1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnRdKQorZmkKK2lmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInhubyIgOyB0aGVuCisgIElOU1RBTExfUFJFRklYPSIiCitmaQorQUNfU1VCU1QoSU5TVEFMTF9QUkVGSVgpCisKKworIworIyAgIFN1YnN5c3RlbXMgdG8gYnVpbGQ6CisjICAgICAgIExpYnJhcnkKKyMKK0ZFQVRVUkVIRUFERVJTPSJsaWJyYXJ5L2ZlYXR1cmVzLmgiCitGVE1BSU5TVUJTPSIiCisKKyMKKyMgICAgICAgQWdlbnQKKyMKK05FVFNOTVBfQVJHX0VOQUJMRShhZ2VudCwKK1sgIC0tZGlzYWJsZS1hZ2VudCAgICAgICAgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhZ2VudCAoc25tcGQpLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgIT0gInhubyI7IHRoZW4KKyAgIFNOTVBEPSdzbm1wZCQoRVhFRVhUKScKKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCisgICBGRUFUVVJFSEVBREVSUz0iJEZFQVRVUkVIRUFERVJTIGFnZW50L2ZlYXR1cmVzLW1pYmdyb3Vwcy5oIGFnZW50L2ZlYXR1cmVzLmgiCisgICBGVE1BSU5TVUJTPSJhZ2VudCAkRlRNQUlOU1VCUyIKKyAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKKyAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCitlbHNlCisgICBTTk1QRD0iIgorICAgIyB3ZSBzdGlsbCBuZWVkL3dhbnQgdGhlIGFnZW50bGlicyAoZm9yIHN1YmFnZW50cywgZS5nLiBzbm1wdHJhcGQpCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgorICAgIyBidWlsZGluZyBzbm1wdHJhcGQgdy9vIGFnZW50bGlicyBkb2Vzbid0IHdvcmsgYXRtCisgICAjVFJBUExJQlM9JyQoVFJBUERXSVRIT1VUQUdFTlQpJworICAgI1VTRVRSQVBMSUJTPSckKFVTRUxJQlMpJworICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJworICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKKyAgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX0FHRU5UXSwgMSwgW0RlZmluZSBpZiBubyBhZ2VudCBpcyBidWlsdF0pCitmaQorCitBQ19TVUJTVChTTk1QRCkKK0FDX1NVQlNUKFRSQVBMSUJTKQorQUNfU1VCU1QoVVNFVFJBUExJQlMpCisKKyMgICAgICAgQXBwbGljYXRpb25zCisjCitORVRTTk1QX0FSR19FTkFCTEUoYXBwbGljYXRpb25zLAorWyAgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFwcHMgKHNubXBnZXQsIC4uLikuXSkKK2lmIHRlc3QgIngkZW5hYmxlX2FwcGxpY2F0aW9ucyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYXBwcyIKKyAgIEZFQVRVUkVIRUFERVJTPSIkRkVBVFVSRUhFQURFUlMgZmVhdHVyZXMtc25tcG5ldHN0YXQuaCBmZWF0dXJlcy1hcHBzLmgiCisgICBGVE1BSU5TVUJTPSJhcHBzICRGVE1BSU5TVUJTIgorZWxzZQorICAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfQVBQU10sIDEsIFtEZWZpbmUgaWYgbm8gYXBwcyBhcmUgYnVpbHRdKQorZmkKKworIyAgICAgICBNYW51YWwgcGFnZXMKKyMKK05FVFNOTVBfQVJHX0VOQUJMRShtYW51YWxzLAorWyAgLS1kaXNhYmxlLW1hbnVhbHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWFudWFscy5dKQoraWYgdGVzdCAieCRlbmFibGVfbWFudWFscyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWFuIgorZmkKKworIyAgICAgICBTdXBwb3J0aW5nIHNjcmlwdHMKKyMKK05FVFNOTVBfQVJHX0VOQUJMRShzY3JpcHRzLAorWyAgLS1kaXNhYmxlLXNjcmlwdHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgc2NyaXB0cyAobWliMmMsIC4uLikuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NjcmlwdHMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGxvY2FsIgorZmkKKworIyAgICAgICBNSUIgZmlsZXMKKyMKK0FDX0FSR19FTkFCTEUobWlicywKK1sgIC0tZGlzYWJsZS1taWJzICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1pYiBmaWxlcy5dKQoraWYgdGVzdCAieCRlbmFibGVfbWlicyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWlicyIKK2ZpCisjIHdpdGgtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQorCitBQ19TVUJTVChNQUlOU1VCUykKK0FDX1NVQlNUKEZUTUFJTlNVQlMpCitBQ19NU0dfQ0hFQ0tJTkcoW3doYXQgdG8gYnVpbGQgYW5kIGluc3RhbGxdKQorQUNfTVNHX1JFU1VMVChbJE1BSU5TVUJTXSkKKworCisjICAgICAgIE1JQiBtb2R1bGUgdmFsaWRhdGlvbiAoZHVyaW5nICJjb25maWd1cmUiKQorIworTkVUU05NUF9BUkdfRU5BQkxFKG1pYi1jb25maWctY2hlY2tpbmcsCitbICAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nICAgIFR1cm5zIG9uIGV4dHJhIGNoZWNrcyBkdXJpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1pYiBtb2R1bGVzLiBBbnkgY29uZmxpY3RzIHdpbGwgY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgdG8gYWJvcnQgKGRlZmF1bHQgaXMgdG8gaXNzdWUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLildLAorICBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfbWliX2NmZ19jaGVja3M9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZ10pCisgICBmaV0sCisgIFt3aXRoX21pYl9jZmdfY2hlY2tzPSJubyJdKQorCitORVRTTk1QX0FSR19FTkFCTEUobWliLWNvbmZpZy1kZWJ1ZywKK1sgIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgICAgICAgVHVybnMgb24gdmVyYm9zZSBvdXRwdXQgZHVyaW5nIG1pYiBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgcHJvY2Vzc2luZy5dLAorICBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfbWliX2NmZ19kZWJ1Zz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1taWItY29uZmlnLWRlYnVnXSkKKyAgIGZpXSwKKyAgW3dpdGhfbWliX2NmZ19kZWJ1Zz0ibm8iXSkKKworCisjICAgICAgIFZlcnNpb24tc3BlY2lmaWMgZmVhdHVyZXMKKyMKK0FDX0FSR19FTkFCTEUoW25ldy1mZWF0dXJlc10sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbmV3LWZlYXR1cmVzXSwKKyAgICAgICAgICAgICAgICBbQ29tcGlsZSBpbiBuZXcgTUlCIG1vZHVsZXMgYW5kIG90aGVyIGV4cGVyaW1lbnRhbCBmZWF0dXJlcworICAgICAgICAgICAgICAgICB3aGljaCBhcmUgZHVlIHRvIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSByZWxlYXNlcy5dKV0pCisKK0FDX0FSR19FTkFCTEUoW29sZC1mZWF0dXJlc10sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb2xkLWZlYXR1cmVzXSwKKyAgICAgICAgICAgICAgICBbQ29tcGlsZSBpbiBvbGQgTUlCIG1vZHVsZXMgYW5kIG90aGVyIGRlcHJlY2F0ZWQgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgd2hpY2ggd2VyZSByZXBsYWNlZCBpbiB0aGUgZGVmYXVsdCBidWlsZCBvZiB0aGlzIHJlbGVhc2UuXSldKQorCitBQ19BUkdfV0lUSChbZmVhdHVyZXMtb2ZdLAorICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mZWF0dXJlcy1vZj12ZXJzaW9uXSwKKyAgICAgICAgICAgICAgICBbQ29tcGlsZSBpbiBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZmVhdHVyZXMgYXMgaWYgdGhpcyB3YXMKKyAgICAgICAgICAgICAgICAgcmVsZWFzZSAidmVyc2lvbiIgKGRlZmF1bHQgaXMgXUFDX1BBQ0tBR0VfVkVSU0lPTlspLl0pXSwsCisgICAgICAgIFt3aXRoX2ZlYXR1cmVzX29mPSRQQUNLQUdFX1ZFUlNJT05dKQorICAgCisKKyMgICAgICAgTWFudWFsIHByb21wdGluZyBkdXJpbmcgImNvbmZpZ3VyZSIKKyMKK05FVFNOTVBfQVJHX1dJVEgoZGVmYXVsdHMsCitbCitNaXNjZWxsYW5lb3VzOgorICAtLXdpdGgtZGVmYXVsdHMgICAgICAgICBVc2UgZGVmYXVsdHMgZm9yIHByb21wdGVkIHZhbHVlcy5dLAorICBbaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzIC1vICIkd2l0aHZhbCIgPSBubyA7IHRoZW4KKyAgICAgZGVmYXVsdHM9IiR3aXRodmFsIgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS13aXRoLy0td2l0aG91dC1kZWZhdWx0c10pCisgICBmaV0sCisgIFtkZWZhdWx0cz0ibm8iXSkKKworCisjICAgICAgIFVDRCBjb21wYXRhYmlsaXR5CisjCitORVRTTk1QX0FSR19FTkFCTEUodWNkLXNubXAtY29tcGF0aWJpbGl0eSwKK1sgIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgSW5zdGFsbCB1Y2Qtc25tcCBsb29rLWFsaWtlIGhlYWRlcnMgYW5kIGxpYnMuCitdKQorCitpZiB0ZXN0ICJ4JGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IiA9ICJ4eWVzIiA7IHRoZW4JCisgIGluc3RhbGx1Y2RoZWFkZXJzPWluc3RhbGx1Y2RoZWFkZXJzCisgIGluc3RhbGx1Y2RsaWJzPWluc3RhbGx1Y2RsaWJzCisgIEFDX01TR19DQUNIRV9BREQoVUNELVNOTVAgY29tcGF0YWJpbGl0eTogICAgIGVuYWJsZWQpCitmaQorQUNfU1VCU1QoaW5zdGFsbHVjZGhlYWRlcnMpCitBQ19TVUJTVChpbnN0YWxsdWNkbGlicykKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IE1JQiBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19FTkFCTEUobWliLWxvYWRpbmcsCitbICAtLWRpc2FibGUtbWliLWxvYWRpbmcgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBwYXJzZXMgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlwdWxhdGVzIHRoZSBtaWIgZmlsZXMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21pYl9sb2FkaW5nIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HXSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIG1pYiBsb2FkaW5nIGFuZCBwYXJzaW5nIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCitmaQorCitORVRTTk1QX0FSR19XSVRIKG1pYmRpcnMsCitbICAtLXdpdGgtbWliZGlycz0iZGlyMTpkaXIyOiIgICBEZWZhdWx0IGRpcmVjdG9yaWVzIHRvIGxvb2sgZm9yIG1pYnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFwkSE9NRS8uc25tcC9taWJzOkRBVEFESVIvc25tcC9taWJzKV0sCisgICAgW05FVFNOTVBfREVGQVVMVF9NSUJESVJTPSIkd2l0aF9taWJkaXJzIgorICAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRElSUywiJHdpdGhfbWliZGlycyIsCisgICAgICAgIFtkZWZhdWx0IGxvY2F0aW9uIHRvIGxvb2sgZm9yIG1pYnMgdG8gbG9hZCB1c2luZyB0aGUgYWJvdmUgdG9rZW5zCisgICAgICAgICBhbmQvb3IgdGhvc2UgaW4gdGhlIE1JQlMgZW52cmlvbm1lbnQgdmFyaWFibGVdKV0pCisKK0FDX0FSR19XSVRIKG1pYnMsCitbICAtLXdpdGgtbWlicz0iaXRlbTE6aXRlbTI6IiAgICBEZWZhdWx0IG1pYiBJRHMgdG8gcmVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGhlIGRlZmF1bHQgbGlzdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbnkgbWlicyB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1pYiBtb2R1bGVzIHRoZSBhZ2VudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgd2l0aCldLAorICAgIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkd2l0aF9taWJzIikKKyMgZW5hYmxlLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKKworTkVUU05NUF9BUkdfV0lUSChtaWJmaWxlcywKK1sgIC0td2l0aC1taWJmaWxlcz0iZmlsZTE6ZmlsZTIiIERlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6ICBub25lLiAgdXNlcyBJRHMgYWJvdmUgaW5zdGVhZC4pXSwKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTLCIkd2l0aF9taWJmaWxlcyIsCisgICAgICAgIFtkZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLCBzcGVjaWZpZWQgYnkgcGF0aC5dKSkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24KKyMjCisKK05FVFNOTVBfQVJHX0VOQUJMRShkZXMsCitbICAtLWRpc2FibGUtZGVzICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IERFUyBlbmNyeXB0aW9uLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXMiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfREVTXSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIERFUyBlbmNyeXB0aW9uIHNob3VsZCBub3QgYmUgc3VwcG9ydGVkXSkKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShwcml2YWN5LAorWyAgLS1kaXNhYmxlLXByaXZhY3kgICAgICAgICAgICAgICBEb24ndCBjb21waWxlIGluIHN1cHBvcnQgZm9yIHByaXZhY3kgKGVuY3J5cHRpb24pLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYsIDEsCisgICAgW2RlZmluZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHN1cHBvcnQgZm9yIGJvdGggYXV0aGVudGljYXRpb24gYW5kCisgICAgIHByaXZhY3kgc3VwcG9ydC5dKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKG1kNSwKK1sgIC0tZGlzYWJsZS1tZDUgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgTUQ1IGF1dGhlbnRpY2F0aW9uLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfTUQ1XSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIE1ENSBhdXRoZW50aWNhdGlvbiBzaG91bGQgbm90IGJlIHN1cHBvcnRlZF0pCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUoaW50ZXJuYWwtbWQ1LAorWyAgLS1lbmFibGUtaW50ZXJuYWwtbWQ1ICAgICAgICAgICBVc2UgdGhlIGludGVybmFsIE1ENSBzdXBwb3J0Ll0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9pbnRlcm5hbF9tZDUiID0gInh5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihZb3UgY2FuIG5vdCBzcGVjaWZ5IGJvdGggLS1lbmFibGUtaW50ZXJuYWwtbWQ1IGFuZCAtLWRpc2FibGUtbWQ1KQorICBlbHNlCisgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSwgMSwKKyAgICAgIFtkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTUQ1IGNvZGUgLi4uXSkKKyAgZmkKK2ZpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBNaXNjIGNvbmZpZ3VyYXRpb24KKyMjCisKK05FVFNOTVBfQVJHX1dJVEgob3BhcXVlLXNwZWNpYWwtdHlwZXMsCitbICAtLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgIERvbid0IHVzZSBzcGVjaWFsIG9wYXF1ZSBlbmNvZGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBub3JtYWxseSBjYW5ub3QgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgbnVtYmVycywgbm9yIGxhcmdlIDY0IGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJzIHdlbGwuICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQtc25tcCBwYWNrYWdlIGNvbXBpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlc2UgZXh0cmEgZGF0YXR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluIGEgbGVnYWwgd2F5KV0pCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzIiAhPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTLCAxLAorICAgIFtTaG91bGQgd2UgY29tcGlsZSB0byB1c2Ugc3BlY2lhbCBvcGFxdWUgdHlwZXM6IGZsb2F0LCBkb3VibGUsIGNvdW50ZXI2NCwKKyAgICAgaTY0LCB1aTY0LCB1bmlvbj9dKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKGlwdjYsCitbICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIElQdjYgcmVhZHkgdmVyc2lvbi5dLAorICAgIFtpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX0lQVjYsIDEsCisgICAgICAgIFtkZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydF0pCisgICAgZmldKQorCitORVRTTk1QX0FSR19XSVRIKGxvZ2ZpbGUsCitbICAtLXdpdGgtbG9nZmlsZT0ibG9jYXRpb24iICAgICAgIERlZmF1bHQgbG9nIGZpbGUgbG9jYXRpb24gZm9yIHNubXBkLl0sCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSIkd2l0aF9sb2dmaWxlIikKK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIm5vIjsgdGhlbgorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0ibm9uZSIKK2ZpCisKK05FVFNOTVBfQVJHX1dJVEgocGVyc2lzdGVudC1kaXJlY3RvcnksCitbICAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9ImRpcmVjdG9yeSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGRpcmVjdG9yeSBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuXSxhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPSIkd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeSIpCisKK05FVFNOTVBfQVJHX1dJVEgocGVyc2lzdGVudC1tYXNrLAorWyAgLS13aXRoLXBlcnNpc3RlbnQtbWFzaz0ibWFzayIgIERlZmF1bHQgbWFzayBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDA3NyldLAorICBbaWYgdGVzdCBbYGV4cHIgIlgkd2l0aHZhbCIgOiAnWFswLTddKiQnYF0gLWVxIDQgOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3VzaW5nIHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbF0pCisgICAgIHdpdGh2YWw9IjAkd2l0aHZhbCIKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgcHJvdmlkZSBhIHRocmVlIGRpZ2l0IG9jdGFsIHBlcnNpc3RlbnQgbWFzayB2YWx1ZV0pCisgICBmaV0sCisgIFt3aXRodmFsPTA3NworICAgQUNfTVNHX1JFU1VMVChbdXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWxdKV0pCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9QRVJTSVNURU5UX01BU0ssJHdpdGh2YWwsCisgICBbdW1hc2sgcGVybWlzc2lvbnMgdG8gc2V0IHVwIHBlcnNpc3RlbnQgZmlsZXMgd2l0aF0pCisKK05FVFNOTVBfQVJHX1dJVEgoY29weV9wZXJzaXN0ZW50X2ZpbGVzLAorWyAgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz0ibm8iIERvbid0IGNvcHkgcGVyc2lzdGVudCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB1c2UgInllcyIgdG8gY29weSB0aGVtKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogeWVzKV0sCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiKQorCitkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuPSIvdG1wL3NubXBkWFhYWFhYIgorTkVUU05NUF9BUkdfV0lUSCh0ZW1wLWZpbGUtcGF0dGVybiwKK1sgIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybj1QQVRURVJOICBQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlcyAoRGVmYXVsdDogL3RtcC9zbm1wZFhYWFhYWCldLAorICBbaWYgdGVzdCBgZXhwciAiWCR3aXRodmFsIiA6ICIuKlhYWFhYWCQiYCAtbmUgMCA7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh1c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsKQorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW3RlbXBvcmFyeSBmaWxlIHBhdHRlbnMgbXVzdCBlbmQgd2l0aCA2IFgnc10pCisgICBmaV0sCisgIFt3aXRodmFsPSIkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIKKyAgIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsKV0pCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiwiJHdpdGh2YWwiLAorICBbUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXNdKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogVmVyc2lvbiBjb25maWd1cmF0aW9uCisjIworCitTTk1QX1ZFUlNJT05TPSIiCitORVRTTk1QX0FSR19FTkFCTEUoc25tcHYxLAorWyAgLS1kaXNhYmxlLXNubXB2MSAgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjEuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB2MSIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TTk1QVjFdLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUHYxIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCitlbHNlCisgIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDEiCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUoc25tcHYyYywKK1sgIC0tZGlzYWJsZS1zbm1wdjJjICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYyYy5dKQoraWYgdGVzdCAieCRlbmFibGVfc25tcHYyYyIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TTk1QVjJDXSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVB2MmMgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKK2Vsc2UKKyAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMmMiCitmaQorCitTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAzIgorQUNfTVNHX0NBQ0hFX0FERChTTk1QIFZlcnNpb25zIFN1cHBvcnRlZDogICAkU05NUF9WRVJTSU9OUykKKworTkVUU05NUF9BUkdfV0lUSChkZWZhdWx0LXNubXAtdmVyc2lvbiwKK1sgIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj0iMyIgRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWdhbCB2YWx1ZXM6IDEsIDIgKGZvciBTTk1QdjJjKSBvciAzLl0sCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iJHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24iKQorCisjIHdlIHRlc3QgdGhpcyBub3cgYW5kIGxhdGVyIGFzIHdlbGwuICB3ZSB0ZXN0IGl0IG5vdyBzbyBjb25maWd1cmUgY2FuIGRpZQorIyBlYXJseSBvbiB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHdhaXRpbmcgdGlsbCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCitjYXNlICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04tM30iIGluCisgIFtbMTIzXV0pIDs7CisgIDJjKSBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPTIgOzsKKyAgKikKKyAgICBBQ19NU0dfRVJST1IoW0lsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLl0pCisgICAgOzsKK2VzYWMKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFRyYW5zcG9ydCBtb2R1bGVzCisjIworCitBQ19BUkdfV0lUSCh0cmFuc3BvcnRzLAorWyAgLS13aXRoLXRyYW5zcG9ydHM9InQxIHQyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHRyYW5zcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyAoc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIGxpc3QpLl0pCitBQ19BUkdfV0lUSChvdXRfdHJhbnNwb3J0cywKK1sgIC0td2l0aC1vdXQtdHJhbnNwb3J0cz0idDEgLi4uIiAgRXhjbHVkZSBsaXN0ZWQgU05NUCB0cmFuc3BvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIGxpc3QpLgorCisgIEF2YWlsYWJsZSBTTk1QIHRyYW5zcG9ydCBtb2R1bGVzIGFyZToKKworICAgIFVEUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVAuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYWx3YXlzIGNvbXBpbGVkIGluLgorICAgIFVEUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAorICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBpZiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKyAgICBUQ1BJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKKyAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisgICAgVENQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFRDUC9JUC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0LCBidXQgbWF5IGJlIG9taXR0ZWQuCisgICAgVW5peCAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVuaXggZG9tYWluIHByb3RvY29scy4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGV4Y2VwdCBvbiBXaW4zMgorICAgICAgICAgICAgICAgIHBsYXRmb3JtcywgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIENhbGxiYWNrICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBhbiBpbnRlcm5hbCBsb2NhbGx5IGNvbm5lY3RlZCBwYWlyCisgICAgICAgICAgICAgICAgb2Ygc25tcF9zZXNzaW9ucy4KKyAgICBBbGlhcyAgICAgICBUaGUgYWxpYXMgdHJhbnNwb3J0IHNpbXBseSBsZXRzIHlvdSBkZWZpbmUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0IHN0cmluZ3MgYW5kIGFsaWFzIHRoZW0gdG8gc2ltcGxlIG5hbWVzIGluCisgICAgICAgICAgICAgICAgdGhlIHNubXAuY29uZiBmaWxlLgorICAgIEFBTDVQVkMgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBBQUw1IFBWQ3MuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKKyAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KKyAgICBJUFggICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgSVBYIHBlciBSRkMgMTQyMC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAorICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIERUTFNVRFAgICAgIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgRFRMUy9VRFAKKyAgICBUTFNUQ1AgICAgICBzdXBwb3J0IGZvciB0dW5uZWxpbmcgU05NUCBvdmVyIFRMUy9UQ1AKKyAgICBTU0ggICAgICAgICAoYWxwaGEpIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgU1NICitdKQorCisjCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiB0cmFuc3BvcnQgb3B0aW9ucworIworQUNfQVJHX1dJVEgodHJhbnNwb3J0LCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW3RyYW5zcG9ydHNdKSkKK0FDX0FSR19XSVRIKG91dC10cmFuc3BvcnQsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbb3V0LXRyYW5zcG9ydHNdKSkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFNlY3VyaXR5IG1vZHVsZXMKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgoc2VjdXJpdHktbW9kdWxlcywKK1sgIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzPSJzMSBzMiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCBzZWN1cml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHNlcnZpY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCkuCisKKyAgQXZhaWxhYmxlIFNOTVAgc2VjdXJpdHkgc2VydmljZXM6CisKKyAgICAgICAgdXNtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHVzZXIgYmFzZWQgU05NUCBzZWN1cml0eQorICAgICAgICBrc20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Iga2VyYmVyb3MgYmFzZWQgU05NUCBzZWN1cml0eQorICAgICAgICB0c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIFRyYW5zcG9ydC1iYXNlZCBzZWN1cml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvciB1c2Ugd2l0aCB0aGUgU1NILCBEVExTVURQIGFuZCBUTFNUQ1AgdHJhbnNwb3J0cykKK10pCisKK05FVFNOTVBfQVJHX1dJVEgob3V0LXNlY3VyaXR5LW1vZHVsZXMsCitbICAtLXdpdGgtb3V0LXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBSZW1vdmVzIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgZnJvbSB0aGUgZGVmYXVsdCBsaXN0LgorXSkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IERldmVsb3Blci1yZWxhdGVkIHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19FTkFCTEUoZGVidWdnaW5nLAorWyAgLS1lbmFibGUtZGVidWdnaW5nICAgICAgICAgICAgICBPdXRwdXRzIGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhdCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy4gIE5vcm1hbGx5LCB5b3Ugc2hvdWxkIG5vdCBlbmFibGUgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaW5zdGVhZCB1c2UgdGhlIC1EIGZsYWcgb2YgdGhlIGNvbW1hbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvZ2dsZXMgZGVidWdpbmcgb3V0cHV0IGF0IHJ1bnRpbWUuCisgIC0tZGlzYWJsZS1kZWJ1Z2dpbmcgICAgICAgICAgICAgRGlzYWxsb3dzIGRlYnVnZ2luZyBjb2RlIHRvIGJlIGJ1aWx0IGluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWlnaHQgcHJvdmlkZSBzb21lIHNwZWVkIGJlbmVmaXRzLl0sCisgICAgQUNfREVGSU5FKE5FVFNOTVBfQUxXQVlTX0RFQlVHKSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlYnVnZ2luZyIgPSAieG5vIjsgdGhlbgorICAgIEFDX0RFRklORShORVRTTk1QX05PX0RFQlVHR0lORykKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShkZXZlbG9wZXIsCitbICAtLWVuYWJsZS1kZXZlbG9wZXIgICAgICAgICAgICAgIFR1cm5zIG9uIHN1cGVyLWR1cGVyLWV4dHJhLWNvbXBpbGUtd2FybmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHVzaW5nIGdjYy5dLAorICBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgOyB0aGVuCisgICAgIGRldmVsb3Blcj0ieWVzIgorICAgZWxpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSBubyA7IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1kZXZlbG9wZXJdKQorICAgZWxzZQorICAgICBkZXZlbG9wZXI9Im5vIgorICAgZmldKQorCitORVRTTk1QX0FSR19FTkFCTEUodGVzdGluZy1jb2RlLAorWyAgLS1lbmFibGUtdGVzdGluZy1jb2RlICAgICAgICAgICBFbmFibGVzIHNvbWUgY29kZSBzZWN0aW9ucyB0aGF0IHNob3VsZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlIHVzZWQgZm9yIHRlc3Rpbmcgb2YgY2VydGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgZnVuY3Rpb25hbGl0aWVzLiAgVGhpcyBzaG91bGQgKm5vdCogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdHVybmVkIG9uIGZvciBwcm9kdWN0aW9uIHVzZS4gIEV2ZXIuXSwKKyAgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIDsgdGhlbgorICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFLCAxLCBbdGVzdGluZyBjb2RlIHNlY3Rpb25zLl0pCisgICBlbGlmIHRlc3QgIiRlbmFibGV2YWwiICE9IG5vIDsgdGhlbgorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZV0pCisgICBmaV0pCisKK05FVFNOTVBfQVJHX0VOQUJMRShyZWVudHJhbnQsCitbICAtLWVuYWJsZS1yZWVudHJhbnQgICAgICAgICAgICAgIEVuYWJsZXMgbG9ja2luZyBmdW5jdGlvbnMgdGhhdCBwcm90ZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeSByZXNvdXJjZXMgaW4gc29tZSBtdWx0aS10aHJlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuICBUaGlzIGRvZXMgbm90IGd1YXJhbnRlZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC1zYWZlIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgYW4gZXhwZXJpbWVudGFsIHNldHRpbmcuXSwKKyAgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX3Jlc19sb2Nrcz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1yZWVudHJhbnRdKQorICAgZmldLAorICBbd2l0aF9yZXNfbG9ja3M9Im5vIl0pCisKK05FVFNOTVBfQVJHX0VOQUJMRShkZXByZWNhdGVkLAorWyAgLS1kaXNhYmxlLWRlcHJlY2F0ZWQgICAgICAgICAgICBEb24ndCBjb21waWxlIGluIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLl0pCitpZiB0ZXN0ICIkZW5hYmxlX2RlcHJlY2F0ZWQiID0gbm8gOyB0aGVuCisgICBBQ19ERUZJTkUoW05FVFNOTVBfTk9fREVQUkVDQVRFRF9GVU5DVElPTlNdLCAxLAorICAgICAgICAgICAgIFtEZWZpbmUgdG8gc3VwcHJlc3MgaW5jbHVzaW9uIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXSkKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgocm9vdC1hY2Nlc3MsCitbCitDb25maWd1cmluZyB0aGUgYWdlbnQ6CisgIC0td2l0aG91dC1yb290LWFjY2VzcyAgICAgICAgICAgVGhlIHNubXBkIGFnZW50IHdvbid0IHJlcXVpcmUgcm9vdCBhY2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4gaXQuICBUaGUgaW5mb3JtYXRpb24gaXQgcmV0dXJucyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWItSUkgdHJlZSBtYXkgbm90IGJlIGNvcnJlY3QsIGhvd2V2ZXIuXSkKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfcm9vdF9hY2Nlc3MiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MsIDEsCisgICAgW0lmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9yc10pCitmaQorCitORVRTTk1QX0FSR19XSVRIKGttZW0tdXNhZ2UsCitbICAtLXdpdGhvdXQta21lbS11c2FnZSAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGFueSBjb2RlIHJlbGF0ZWQgdG8gdGhlIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGttZW0uXSkKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfa21lbV91c2FnZSIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9OT19LTUVNX1VTQUdFLCAxLCBbSWYgd2UgZG9uJ3Qgd2FudCB0byB1c2Uga21lbS5dKQorZmkKKworTkVUU05NUF9BUkdfV0lUSChkdW1teS12YWx1ZXMsCitbICAtLXdpdGgtZHVtbXktdmFsdWVzICAgICAgICAgICAgIFByb3ZpZGUgJ3BsYWNlaG9sZGVyJyBkdW1teSB2YWx1ZXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0ZWNobmljYWxseSBub3QgY29tcGxpYW50IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBzcGVjaWZpY2F0aW9ucywgYnV0IHdhcyBob3cgdGhlIGFnZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0ZWQgZm9yIHZlcnNpb25zIDwgNC4wLl0pCisjIERlZmluZSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHN1cHByZXNzZWQgKGkuZS4sIG9wdGlvbiBkZWZhdWx0cyB0byBmYWxzZSkuCitpZiB0ZXN0ICJ4JHdpdGhfZHVtbXlfdmFsdWVzIiAhPSAieHllcyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTLCAxLAorICAgIFtJZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWdlbnQgdG8gcmVwb3J0IG9uIHZhcmlhYmxlcyBpdCBkb2Vzbid0IGhhdmUKKyAgICAgZGF0YSBmb3JdKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKHNldC1zdXBwb3J0LAorWyAgLS1kaXNhYmxlLXNldC1zdXBwb3J0ICAgICAgICAgICBEbyBub3QgYWxsb3cgU05NUCBzZXQgcmVxdWVzdHMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NldF9zdXBwb3J0IiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUXSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVAgU0VUIHN1cHBvcnQgc2hvdWxkIGJlIGRpc2FibGVkXSkKK2ZpCisKKworTkVUU05NUF9BUkdfV0lUSChzeXNfY29udGFjdCwKK1sgIC0td2l0aC1zeXMtY29udGFjdD0id2hvQHdoZXJlIiAgRGVmYXVsdCBzeXN0ZW0gY29udGFjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBMT0dJTkBET01BSU5OQU1FKV0sCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD0iJHdpdGhfc3lzX2NvbnRhY3QiKQorCitORVRTTk1QX0FSR19XSVRIKHN5c19sb2NhdGlvbiwKK1sgIC0td2l0aC1zeXMtbG9jYXRpb249ImxvY2F0aW9uIiAgRGVmYXVsdCBzeXN0ZW0gbG9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogVW5rbm93bildLAorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz0iJHdpdGhfc3lzX2xvY2F0aW9uIikKKworCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQ6IEV4dGVuc2liaWxpdHkgY29uZmlndXJhdGlvbgorIyMKKworTkVUU05NUF9BUkdfRU5BQkxFKGxvY2FsLXNtdXgsCitbICAtLWVuYWJsZS1sb2NhbC1zbXV4ICAgICAgICAgICAgIFJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IChieSBkZWZhdWx0KS5dLAorICAgIFtpZiB0ZXN0ICJ4JGVuYWJsZV9sb2NhbF9zbXV4IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVgsIDEsCisgICAgICAgICAgW2RlZmluZSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdAorICAgICAgICAgICBieSBkZWZhdWx0XSkKKyAgICBmaV0pCisKK05FVFNOTVBfQVJHX0VOQUJMRShhZ2VudHgtZG9tLXNvY2stb25seSwKK1sgIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5ICAgRGlzYWJsZSBVRFAvVENQIHRyYW5zcG9ydHMgZm9yIGFnZW50eC5dLAorQUNfREVGSU5FKE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFksIDEsCisgICAgW2RlZmluZSBpZiBhZ2VudHggdHJhbnNwb3J0IGlzIHRvIHVzZSBkb21haW4gc29ja2V0cyBvbmx5XSkpCisKK05FVFNOTVBfQVJHX0VOQUJMRShzbm1wdHJhcGQtc3ViYWdlbnQsCitbICAtLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50ICAgIERpc2FibGUgYWdlbnR4IHN1YmFnZW50IGNvZGUgaW4gc25tcHRyYXBkLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYLCAxLAorICAgIFtkZWZpbmUgaWYgeW91IGRvIG5vdCB3YW50IHNubXB0cmFwZCB0byByZWdpc3RlciBhcyBhbiBBZ2VudFggc3ViYWdlbnRdKQorZmkKKworZGVmYXVsdF9hZ2VudHhfc29ja2V0PSIvdmFyL2FnZW50eC9tYXN0ZXIiCitORVRTTk1QX0FSR19XSVRIKGFnZW50eC1zb2NrZXQsCitbICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGZ1bGwgcGF0aCBdKTsKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsKQorXSxbCisgIHdpdGh2YWw9JGRlZmF1bHRfYWdlbnR4X3NvY2tldAorICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0KQorXSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0FHRU5UWF9TT0NLRVQsIiR3aXRodmFsIiwKKyAgICAgICAgW1VuaXggZG9tYWluIHNvY2tldCBmb3IgQWdlbnRYIG1hc3Rlci1zdWJhZ2VudCBjb21tdW5pY2F0aW9uXSkKKworIworIyBmZWF0dXJlIGFkZGl0aW9uL3JlbW92YWwgYW5kIG1pbmltaWFsaXN0IHN1cHBvcnQKKyMKK0ZFQVRVUkVfQUREX0ZMQUdTPSIiCitORVRTTk1QX0FSR19XSVRIKGZlYXR1cmVzLAorWyAgLS13aXRoLWZlYXR1cmVzPSJmZWF0MSBmZWF0MiIgICBSZXF1ZXN0IGV4dHJhIGZlYXR1cmVzIHRvIGJlIHR1cm5lZCBvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgdXNlZnVsIHdpdGggLS1lbmFibGUtbWluaW1hbGlzdCldLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGZlYXR1cmVzIF0pOworICBmaQorICBGRUFUVVJFX0FERF9GTEFHUz0iLS1hZGQgJHdpdGh2YWwiCisgIEFDX01TR19SRVNVTFQoYWRkaW5nIGluIGZlYXR1cmVzOiAkd2l0aHZhbCkKK10pCitBQ19TVUJTVChGRUFUVVJFX0FERF9GTEFHUykKKworCitGRUFUVVJFX1JFTU9WRV9GTEFHUz0iIgorTkVUU05NUF9BUkdfV0lUSChvdXQtZmVhdHVyZXMsCitbICAtLXdpdGgtb3V0LWZlYXR1cmVzPSJmZWF0MS4uLiIgIFJlbW92ZSBzcGVjaWZpYyBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltcGxpZXMgLS1lbmFibGUtbWluaW1hbGlzdCldLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGZlYXR1cmVzIF0pOworICBmaQorICBGRUFUVVJFX1JFTU9WRV9GTEFHUz0iLS1yZW1vdmUgJHdpdGh2YWwiCisgIEZFQVRVUkVUQVJHUz0iZmVhdHVyZXMiCisgIEFDX0RFRklORShORVRTTk1QX01JTklNQUxfQ09ERSwgMSwKKyAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgbm9uLWVzc2VudGlhbCBjb2RlIGZlYXR1cmVzLl0pCisgIEFDX01TR19SRVNVTFQocmVtb3ZpbmcgZmVhdHVyZXM6ICR3aXRodmFsKQorXSkKK0FDX1NVQlNUKEZFQVRVUkVfUkVNT1ZFX0ZMQUdTKQorCisKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzCitBQ19BUkdfV0lUSChmZWF0dXJlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW2ZlYXR1cmVzXSkpCitBQ19BUkdfV0lUSChvdXQtZmVhdHVyZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvdXQtZmVhdHVyZXNdKSkKKworRkVBVFVSRVRBUkdTPSIiCitORVRTTk1QX0FSR19FTkFCTEUobWluaW1hbGlzdCwKK1sgIC0tZW5hYmxlLW1pbmltYWxpc3QgICAgICAgICAgICAgUmVtb3ZlIGFsbCBub24tZXNzZW50aWFsIGNvZGUgZmVhdHVyZXMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21pbmltYWxpc3QiID0gInh5ZXMiOyB0aGVuCisgICAjIHdlJ2xsIGFzc3VtZSB0aGUgbWluaSBhZ2VudCBpcyBkZXNpcmVkIGhlcmUgYXMgd2VsbAorICAgbWluaV9hZ2VudD0ieWVzIgorICAgRkVBVFVSRVRBUkdTPSJmZWF0dXJlcyIKKworICAgIyBuZWVkZWQgdG8gYm9vdHN0cmFwIGxhdGVyIGNoZWNrcworICAgZWNobyAiIiA+IGluY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKyAgIEFDX0RFRklORShORVRTTk1QX01JTklNQUxfQ09ERSwgMSwKKyAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIG5vbi1lc3NlbnRpYWwgY29kZSBmZWF0dXJlcy5dKQorZWxzZQorICAgRkVBVFVSRUhFQURFUlM9IiIKK2ZpCitBQ19BUkdfV0lUSChbbWluaW1hbGlzdF0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW21pbmltYWxpc3RdKSkKK0FDX1NVQlNUKEZFQVRVUkVUQVJHUykKK0FDX1NVQlNUKEZFQVRVUkVIRUFERVJTKQorCitORVRTTk1QX0FSR19FTkFCTEUobm90aWZ5LW9ubHksCitbICAtLWVuYWJsZS1ub3RpZnktb25seSAgICAgICAgICAgIEJ1aWxkIHRvb2xzIHRoYXQgY2FuIG9ubHkgc2VuZCBub3RpZmljYXRpb25zLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyI7IHRoZW4KKyAgIEFDX0RFRklORShORVRTTk1QX05PVElGWV9PTkxZLCAxLAorICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIG9ubHkgc3VwcG9ydCBzZW5kaW5nIG5vdGlmaWNhdGlvbnNdKQorZmkKK0FDX0FSR19XSVRIKFtub3RpZnktb25seV0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW25vdGlmeS1vbmx5XSkpCitBQ19BUkdfRU5BQkxFKFtub3RpZnlvbmx5XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbm90aWZ5LW9ubHldKSkKKworTkVUU05NUF9BUkdfRU5BQkxFKG5vLWxpc3RlbiwKK1sgIC0tZW5hYmxlLW5vLWxpc3RlbiAgICAgICAgICAgICAgQnVpbGQgdG9vbHMgdGhhdCBjYW4ndCBsaXN0ZW4gdG8gcG9ydHMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX25vX2xpc3RlbiIgPSAieHllcyIgLW8gIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIjsgdGhlbgorICAgZW5hYmxlX25vX2xpc3Rlbj0ieWVzIgorICAgQUNfREVGSU5FKE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQsIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBsaXN0ZW5pbmcgc3VwcG9ydCBmcm9tIHRoZSBjb2RlXSkKK2ZpCitBQ19BUkdfV0lUSChbbm8tbGlzdGVuXSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbm8tbGlzdGVuXSkpCitBQ19BUkdfRU5BQkxFKFtub2xpc3Rlbl0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW25vLWxpc3Rlbl0pKQorCitORVRTTk1QX0FSR19FTkFCTEUocmVhZC1vbmx5LAorWyAgLS1lbmFibGUtcmVhZC1vbmx5ICAgICAgICAgICAgICBSZW1vdmUgYWxsIFNFVCBzdXBwb3J0IGZyb20gdGhlIGNvZGUuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgPSAieHllcyIgLW8gIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIiA7IHRoZW4KKyAgIGVuYWJsZV9yZWFkX29ubHk9InllcyIKKyAgIEFDX0RFRklORShORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQsIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBTRVQvd3JpdGUgYWNjZXNzIGZyb20gdGhlIGNvZGVdKQorZmkKK0FDX0FSR19XSVRIKFtyZWFkLW9ubHldLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtyZWFkLW9ubHldKSkKK0FDX0FSR19FTkFCTEUoW3JlYWRvbmx5XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbcmVhZC1vbmx5XSkpCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudDogTUlCIG1vZHVsZSBjb25maWd1cmF0aW9uCisjIworCitORVRTTk1QX0FSR19FTkFCTEUobWluaV9hZ2VudCwKK1sgIC0tZW5hYmxlLW1pbmktYWdlbnQgICAgICAgICAgICAgQnVpbGQgYSBtaW5pbWFsIGFnZW50Ll0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9taW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgorICAgIG1pbmlfYWdlbnQ9InllcyIKK2Vsc2UKKyAgICBtaW5pX2FnZW50PSJubyIKK2ZpCitBQ19BUkdfV0lUSChbbWluaWFnZW50XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbWluaS1hZ2VudF0pKQorQUNfQVJHX0VOQUJMRShbbWluaWFnZW50XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbWluaS1hZ2VudF0pKQorCisKKworCitORVRTTk1QX0FSR19FTkFCTEUobWZkLXJld3JpdGVzLAorWyAgLS1lbmFibGUtbWZkLXJld3JpdGVzICAgICAgICAgICBVc2UgbmV3IE1GRCByZXdyaXRlcyBvZiBtaWIgbW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhdmFpbGFibGUuIChkZWZhdWx0IGlzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG1pYiBtb2R1bGUgY29kZSkuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KKyAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMsIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgTUZEIG1vZHVsZSByZXdyaXRlc10pCitmaQorCisKK05FVFNOTVBfQVJHX1dJVEgobWliX21vZHVsZXMsCitbICAtLXdpdGgtbWliLW1vZHVsZXM9Iml0ZW0xIC4uLiIgIENvbXBpbGUgd2l0aCBhZGRpdGlvbmFsIG1pYiBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3BhY2Ugc2VwYXJhdGVkIGxpc3QpLl0pCisKK05FVFNOTVBfQVJHX1dJVEgob3V0X21pYl9tb2R1bGVzLAorWyAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibGlzdCIgICBDb21waWxlIHdpdGhvdXQgdGhlc2UgbWliIG1vZHVsZXMuCisKKyAgRGVmYXVsdCBtaWIgbW9kdWxlcyBjb21waWxlZCBpbnRvIHRoZSBhZ2VudCAod2hpY2ggY2FuIGJlIHJlbW92ZWQpOgorICAKKyAgICBtaWJJSSAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBtaWItSUkgdHJlZS4KKyAgICBzbm1wdjNtaWJzICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBzbm1wdjMgbWliIG1vZHVsZXMuCisgICAgdWNkX3NubXAgICAgICAgICAgICAgICBVQ0QtU05NUC1NSUIgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KKyAgICBhZ2VudF9taWJzICAgICAgICAgICAgIE5FVC1TTk1QLUFHRU5ULU1JQiBleHRlbnNpb25zCisgICAgYWdlbnR4ICAgICAgICAgICAgICAgICBBZ2VudFggc3VwcG9ydCAoc2VlIGJlbG93KQorICAgIG5vdGlmaWNhdGlvbiAgICAgICAgICAgbWlicyBzdXBwb3J0aW5nIHNwZWNpZmljYXRpb24gb2YgdHJhcCBkZXN0aW5hdGlvbnMuCisgICAgdGFyZ2V0ICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgU05NUCBXR3MgVEFSR0VULU1JQi4KKyAgICB1dGlsaXRpZXMgICAgICAgICAgICAgIGdlbmVyYWwgYWdlbnQgY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuCisgICAgZGlzbWFuL2V2ZW50ICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgRElTTUFOLUVWRU5ULU1JQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydHMgc2VsZiBtb25pdG9yaW5nIGFuZCBub3RpZmljYXRpb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgYXJlIGZvdW5kKQorICAgIGRpc21hbi9zY2hlZHVsZSAgICAgICAgc3VwcG9ydCBmb3IgdGhlIERJU01BTi1TQ0hFRFVMRS1NSUIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyaWdnZXIgU0VUIHJlcXVlc3RzIGF0IHNwZWNpZmllZCB0aW1lcykKKyAgICBob3N0ICAgICAgICAgICAgICAgICAgIGhvc3QgcmVzb3VyY2VzIG1pYiBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBvbiBtYWpvciBzdXBwb3J0ZWQgcGxhdGZvcm1zKQorCisgIE9wdGlvbmFsIG1pYiBtb2R1bGVzIHRoYXQgY2FuIGJlIGJ1aWx0IGludG8gdGhlIGFnZW50IGluY2x1ZGU6CisgICAgc211eCAgICAgICAgICAgICAgICAgICBzbXV4IHN1cHBvcnQgdG8gYWxsb3cgc3ViYWdlbnRzIHRvIGF0dGFjaCB0byBzbm1wZC4KKyAgICBtaWJJSS9tdGFfc2VuZG1haWwgICAgIFNlbmRtYWlsIHN0YXRpc3RpY3MgbW9uaXRvcmluZyAoTVRBLU1JQikKKyAgICB1Y2Qtc25tcC9kaXNraW8gICAgICAgIFRhYmxlIG9mIGlvLWRldmljZXMgYW5kIGhvdyBtdWNoIGRhdGEgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkL3dyaXR0ZW4uICAob25seSB0ZXN0ZWQgb24gU29sYXJpcywgTGludXgpCisgICAgZGlzbWFuL29sZC1ldmVudC1taWIgICBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElTTUFOLUVWRU5ULU1JQgorCisgIE9wdGlvbmFsIG1vZHVsZXMgZm9yIHNwZWNpZmljIHBsYXRmb3JtcworICAgIExpbnV4CisgICAgICB1Y2Qtc25tcC9sbVNlbnNvcnMgICBoYXJkd2FyZSBtb25pdG9yaW5nIChMTS1TRU5TT1JTLU1JQikKKyAgICAgIGlwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUgIChleHBlcmltZW50YWwpCisgICAgICBpcC1taWIvaXB2NkludGVyZmFjZVRhYmxlICAoZXhwZXJpbWVudGFsKQorICAgICAgdHVubmVsICAgICAgICAgICAgICAgTGludXggVFVOTkVMLU1JQiBzdXBwb3J0IChpZlRhYmxlIGV4dGVuc2lvbikKKyAgICAgIG1pYklJL2ludGVyZmFjZXMgICAgIChvbGQgaWZUYWJsZSBpbXBsZW1lbnRhdGlvbikKKyAgICAgIG1pc2MvaXBmd2FjYyAgICAgICAgIGFjY291bnRpbmcgcnVsZXMgSVAgZmlyZXdhbGwgaW5mb3JtYXRpb24KKyAgICAgIGlwZndjaGFpbnMvaXBmd2NoYWlucyAgZmlyZXdhbGwgY2hhaW5zIHVuZGVyIGlwZncKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBhZ2VudC9taWJncm91cC9pcGZ3Y2hhaW5zL1JFQURNRSkKKyAgICAgIHNjdHAtbWliICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBTQ1RQLU1JQgorICAgICAgZXRoZXJsaWtlLW1pYiAgICAgICAgc3VwcG9ydCBmb3IgdGhlIEV0aGVyTGlrZS1NSUIKKworICAgIFNvbGFyaXMKKyAgICAgIHVjZC1zbm1wL2xtU2Vuc29ycyAgIGhhcmR3YXJlIG1vbml0b3JpbmcgKExNLVNFTlNPUlMtTUlCKQorICAgICAgaWYtbWliICAgICAgICAgICAgICAgSUYtTUlCIHJld3JpdGUgKGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCisgICAgICB0Y3AtbWliICAgICAgICAgICAgICBUQ1AtTUlCIHJld3JpdGUgKHRjcENvbm5lY3Rpb25UYWJsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwTGlzdGVuZXJUYWJsZTsgYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKKyAgICAgIHVkcC1taWIgICAgICAgICAgICAgIFVEUC1NSUIgcmV3cml0ZSAodWRwRW5kcG9pbnRUYWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKKworICAgIEZyZWVCU0QvT3BlbkJTRAorICAgICAgaWYtbWliICAgICAgICAgICAgICAgSUYtTUlCIHJld3JpdGUgKGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCisKKyAgQWdlbnRYIHN1cHBvcnQ6CisgICAgYWdlbnR4L3N1YmFnZW50ICAgICAgICBhbGxvd3MgdGhlIGFnZW50IHRvIHJ1biBhcyBlaXRoZXIgYSBzbm1wIGFnZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhZ2VudFggc3ViLWFnZW50LgorICAgIGFnZW50eC9tYXN0ZXIgICAgICAgICAgbWFrZXMgdGhlIGFnZW50IHJ1biBhcyBhbiBhZ2VudFggbWFzdGVyIGFnZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEgbm9ybWFsIHNubXAgYWdlbnQuCisgICAgYWdlbnR4ICAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIGFnZW50eC9tYXN0ZXIgYW5kIGFnZW50eC9jbGllbnQuCisKKyAgT3B0aW9uYWwgbW9kdWxlcyBmb3IgQyBjb2RlcnMgdG8gbG9vayBhdCBhbmQvb3IgaW5jbHVkZSBhcyBleHRlbnNpb24gZXhhbXBsZXM6CisgIAorICAgIGV4YW1wbGVzL3VjZERlbW9QdWJsaWMgIFNOTVB2MyBpbnRlcm9wZXJhYmlsaXR5IHRlc3RpbmcgbWliLgorICAgIGV4YW1wbGVzL2V4YW1wbGUgICAgICAgIGV4YW1wbGUgQyBjb2RlIGV4dGVuc2lvbi5dKQorCisKKyMKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIGNvbmZpZ3VyZSBvcHRpb25zCisjCitBQ19BUkdfV0lUSChtaWItbW9kdWxlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW21pYi1tb2R1bGVzXSkpCitBQ19BUkdfV0lUSChtb2R1bGUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbbWliLW1vZHVsZXNdKSkKK0FDX0FSR19XSVRIKG1vZHVsZXMsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbbWliLW1vZHVsZXNdKSkKKworQUNfQVJHX1dJVEgob3V0LW1pYi1tb2R1bGUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbb3V0LW1pYi1tb2R1bGVzXSkpCitBQ19BUkdfV0lUSChvdXQtbW9kdWxlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW291dC1taWItbW9kdWxlc10pKQorQUNfQVJHX1dJVEgob3V0LW1vZHVsZXMsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbb3V0LW1pYi1tb2R1bGVzXSkpCisKKworIyMKKyMgICBQcm9qZWN0OiBFbnRlcnByaXNlIHNldHRpbmdzCSg/IEFnZW50L0xpYnJhcnkvQm90aD8pCisjIworCitORVRTTk1QX0FSR19XSVRIKGVudGVycHJpc2Utb2lkLAorW0VudGVycHJpc2UgT0lEczogICh3YXJuaW5nOiB0aGlzIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4pCisKKyAgLS13aXRoLWVudGVycHJpc2Utb2lkICAgICAgICAgICAgICBUaGUgZW50ZXJwcmlzZSBudW1iZXIgYXNzaWduZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yIGJ5IElBTkEuICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL2NnaS1iaW4vZW50ZXJwcmlzZS5wbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdldCBvbmUsIHRob3VnaCB1c2luZyB0aGUgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmx5IHRoZSByaWdodCBjaG9pY2UgaXMgbW9zdCBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA4MDcyID0gImVudGVycHJpc2UubmV0LXNubXAiKV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgZW50ZXJwcmlzZSBudW1iZXIgXSk7CisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfT0lELCAkd2l0aHZhbCkKKyAgZW50X29pZD0iMSwzLDYsMSw0LDEsJHdpdGh2YWwiCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfTUlCLCAkZW50X29pZCkKKyAgZW50X2RvdF9vaWQ9IjEuMy42LjEuNC4xLiR3aXRodmFsIgorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX0RPVF9NSUIsICRlbnRfZG90X29pZCkKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCkKK10sWworICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgImVudGVycHJpc2UubmV0LXNubXAiKQorXSkKKworTkVUU05NUF9BUkdfV0lUSChlbnRlcnByaXNlLXN5c29pZCwKK1sKKyAgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkICAgICAgICAgICBUaGUgYmFzZSBPSUQgZm9yIHRoZSBzeXNPYmplY3RJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzeXN0ZW0gZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCAuMS4zLjYuMS40LjEuODA3Mi4zLjIuLi4gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldFNubXBBZ2VudE9JRHMuLi4iKV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlIF0pOworICBmaQorICBzeXNfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fTUlCLCAkc3lzX29pZCkKKyAgc3lzX2RvdF9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLydgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9ET1RfTUlCLCAkc3lzX2RvdF9vaWQpCisgIHN5c29pZF9sZW49YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9bXlwuXS8vZycgfCBhd2sgLUZcLiAneyBwcmludCBORiB9J2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0RPVF9NSUJfTEVOR1RILCAkc3lzb2lkX2xlbikKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uKQorXSxbCisgIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCAiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uIikKK10pCisKK05FVFNOTVBfQVJHX1dJVEgoZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLAorWworICAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIFRoZSBPSUQgdXNlZCBmb3IgdGhlIHJvb3Qgb2YKKwkJCQkgICAgIGVudGVycHJpc2Ugc3BlY2lmaWMgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCAuMS4zLjYuMS40LjEuODA3Mi40ID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRTbm1wTm90aWZpY2F0aW9uUHJlZml4IildLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSBdKTsKKyAgZmkKKyAgbm90aWZpY2F0aW9uX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiwgJG5vdGlmaWNhdGlvbl9vaWQpCisgIG5vdGlmaWNhdGlvbl9kb3Rfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fRE9UX01JQiwgJG5vdGlmaWNhdGlvbl9kb3Rfb2lkKQorICBub3RpZmljYXRpb25vaWRfbGVuPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvW15cLl0vL2cnIHwgYXdrIC1GXC4gJ3sgcHJpbnQgTkYgfSdgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9ET1RfTUlCX0xFTkdUSCwgJG5vdGlmaWNhdGlvbm9pZF9sZW4pCisgIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsKQorXSxbCisgIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zICJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zIikKK10pCisKKworIyMKKyMgICBQcm9qZWN0OiBQZXJsIHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19XSVRIKHBlcmwtbW9kdWxlcywKK1sKK1Blcmw6CisgIC0td2l0aC1wZXJsLW1vZHVsZXNbPUFSR1NdICAgICAgSW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzIGFsb25nIHdpdGggdGhlIHJlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbmV0LXNubXAgdG9vbGtpdC4gIElmIEFSR1MgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZXkncmUgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlLlBMIHNjcmlwdC5dLFsKKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCisgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcGVybD0ieWVzIgorICAgICAgaWYgdGVzdCAiJHdpdGh2YWwiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgIFBFUkxBUkdTPSIkd2l0aHZhbCIKKyAgICAgIGZpCisgICAgZmkKK10sIGluc3RhbGxfcGVybD0idHJ5IikKKworTkVUU05NUF9BUkdfRU5BQkxFKGVtYmVkZGVkLXBlcmwsCitbICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAgICAgICAgIERpc2FibGUgZW1iZWRkZWQgUGVybCBpbiB0aGUgU05NUCBhZ2VudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGQuIFtlbmFibGVkIGJ5IGRlZmF1bHRdXSwKKyAgICBlbWJlZF9wZXJsPSIkZW5hYmxldmFsIiwgZW1iZWRfcGVybD0idHJ5IikKKworTkVUU05NUF9BUkdfRU5BQkxFKHBlcmwtY2MtY2hlY2tzLAorWyAgLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzICAgICAgICBEaXNhYmxlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIHdoZXRoZXIgUGVybCdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyBDb21waWxlciBpcyBjb21wYXRpYmxlIHdpdGggb3VycyB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgUGVybCBpcyBlbmFibGVkLl0pCisKKworIyMKKyMgICBQcm9qZWN0OiBQeXRob24gc2V0dGluZ3MKKyMjCisKK0FDX0FSR19XSVRIKHB5dGhvbi1tb2R1bGVzLAorWworUHl0aG9uOgorICAtLXdpdGgtcHl0aG9uLW1vZHVsZXNbPUFSR1NdICAgIEluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncyBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Qgb2YgdGhlIG5ldC1zbm1wIHRvb2xraXQuICBJZiBBUkdTIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGV5J3JlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cC5weSBzY3JpcHQgYXMgYXJndW1lbnRzLl0sWworICAgIGluc3RhbGxfcHl0aG9uPSJ5ZXMiCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKyAgICAgIFBZVEhPTkFSR1M9IiIKKyAgICBlbGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKyAgICAgIFBZVEhPTkFSR1M9IiIKKyAgICAgIGluc3RhbGxfcHl0aG9uPSJubyIKKyAgICBlbHNlCisgICAgICBQWVRIT05BUkdTPSIkd2l0aHZhbCIKKyAgICBmaQorXSwgaW5zdGFsbF9weXRob249Im5vIikKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnkgc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgoc2VydmVyLXNlbmQtYnVmLAorWworTmV0d29yayBCdWZmZXJzOgorICAtLXdpdGgtc2VydmVyLXNlbmQtYnVmWz1BUkddICAgIFVzZSBBUkcgZm9yIHRoZSBkZWZhdWx0IFVEUC9UQ1Agc2VuZCBidWZmZXIgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBPUyBidWZmZXIgZm9yIHNlcnZlciBzb2NrZXRzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCAoc25tcGQsIHNubXB0cmFwZCkuICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHJ1bnRpbWUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVJHIHNob3VsZCBiZSB0aGUgc2l6ZSBpbiBieXRlc10sWworICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgc2VuZCBidWZmZXIgXSkKKyAgIGZpCisgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRiwgJHdpdGh2YWwpXSwKKyAgIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHNdKSApCisKK05FVFNOTVBfQVJHX1dJVEgoc2VydmVyLXJlY3YtYnVmLAorWyAgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbiwgYnV0IGZvciByZWNlaXZlIGJ1ZmZlcl0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciByZWN2IGJ1ZmZlciBdKQorICBmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRiwgJHdpdGh2YWwpXSwKKyAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0c10pICkKKworTkVUU05NUF9BUkdfV0lUSChjbGllbnQtc2VuZC1idWYsCitbICAtLXdpdGgtY2xpZW50LXNlbmQtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlIGJ1ZmZlciBvZiBjbGllbnQgc29ja2V0c10sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCBzZW5kIGJ1ZmZlciBdKQorICBmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRiwgJHdpdGh2YWwpXSwKKyAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0c10pICkKKworTkVUU05NUF9BUkdfV0lUSChjbGllbnQtcmVjdi1idWYsCitbICAtLXdpdGgtY2xpZW50LXJlY3YtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUgc2VuZCBidWZmZXJdLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgcmVjdiBidWZmZXIgXSkKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUYsICR3aXRodmFsKV0sCisgIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHNdKSApCisKKyMjCisjICAgU3lzdGVtOiBsaWJyYXJ5IHNldHRpbmdzICAobW9yZSkKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgoZWxmLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1lbGZdLFt1c2UgZWxmIGxpYnJhcmllc10pXSkKKworTkVUU05NUF9BUkdfV0lUSChubCwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbmxdLFt1c2UgbGlibmwgdG8gZ2V0IG5ldGxpbmsgZGF0YSAobGludXggb25seSkuXSldKQorCitORVRTTk1QX0FSR19XSVRIKGxpYndyYXAsCisgIFsgIC0td2l0aC1saWJ3cmFwWz1MSUJQQVRIXSAgQ29tcGlsZSBpbiBsaWJ3cmFwICh0Y3Bfd3JhcHBlcnMpIHN1cHBvcnQuXSwKKyAgW10sCisgIFt3aXRoX2xpYndyYXA9Im5vIl0pCisKK05FVFNOTVBfQVJHX1dJVEgoemxpYiwKKyAgWyAgLS13aXRoLXpsaWJbPURJUl0gICAgICAgICB1c2UgbGlieiBpbiBESVJdLAorICBbXSwKKyAgW3dpdGhfemxpYj0ibm8iXSkKKworQUNfQVJHX1dJVEgoYnppcDIsCisgIFsgIC0td2l0aC1iemlwMls9RElSXSAgICAgICAgdXNlIGxpYmJ6MiBpbiBESVJdLAorICBbXSwKKyAgW3dpdGhfYnppcDI9Im5vIl0pCisKK05FVFNOTVBfQVJHX1dJVEgoCisgW21udHRhYl0sCisgQVNfSEVMUF9TVFJJTkcoCisgICBbLS13aXRoLW1udHRhYj0iL2V0Yy9tbnR0YWIiXSwKKyAgIFtNb3VudCB0YWJsZSBsb2NhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdG8gYXV0b2RldGVjdCB0aGlzLl0pKQorCisjIworIyAgIFByb2plY3Q6IG15c3FsCisjIworCitORVRTTk1QX0FSR19XSVRIKG15c3FsLAorICBbICAtLXdpdGgtbXlzcWwgICAgICAgICAgICBJbmNsdWRlIHN1cHBvcnQgZm9yIE15U1FMLl0pCitpZiB0ZXN0ICJ4JHdpdGhfbXlzcWwiID0gInh5ZXMiOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX1VTRV9NWVNRTCwgMSwKKyAgICBbZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIG15c3FsIGNvZGUgZm9yIHNubXB0cmFwZCAuLi5dKQorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxOTk3Zi4uMDAwMDAwMAotLS0gYS9jb25maWd1cmUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0ODE3ICswLDAgQEAKLSMgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCi0jIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCi0jIHRoYXQgbWF5IGFwcGx5OgotIwotIyBQb3J0aW9ucyBDb3B5cmlnaHQgqSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgotIwotCi0jCi0jIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCi0jCi1BQ19JTklUKFtOZXQtU05NUF0sIFs1LjQuNF0sIFtuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKLUFDX1BSRVJFUShbMi41OV0pCi1BQ19DT05GSUdfU1JDRElSKFthZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmNdKQotQUNfUkVWSVNJT04oWyRSZXZpc2lvbiRdKQotCi1BQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgpCi0KLUFDX01TR19DQUNIRV9JTklUKCkKLQotIwotIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCi0jCi1BQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUywiJGFjX2NvbmZpZ3VyZV9hcmdzIikKLUNPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJncyJcIgotQUNfU1VCU1QoQ09ORklHVVJFX09QVElPTlMpCi0KLSMKLSMgQ29tcGlsYXRpb24gc2V0dXAKLSMKLUFDX0FSR19XSVRIKGNjLCBbCi1Db21waWxlciBPcHRpb25zOgotICAtLXdpdGgtY2M9Q0MgICAgICAgICAgICAgICAgICAgIHVzZSBDQyB0byBjb21waWxlIChkZWZhdWx0PWdjYykuXSwKLSAgICBbQ0M9JHdpdGhfY2M7ZXhwb3J0IENDXSkKLQotQUNfQVJHX1dJVEgobGlua2NjLCBbCi0gIC0td2l0aC1saW5rY2M9Q0MgICAgICAgICAgICAgICAgdXNlIENDIHRvIGxpbmsgKGRlZmF1bHQ9Z2NjKS5dLAotICAgIFtMSU5LQ0M9JHdpdGhfbGlua2NjO2V4cG9ydCBMSU5LQ0NdKQotCi1BQ19BUkdfV0lUSChhciwKLVsgIC0td2l0aC1hcj1BUiAgICAgICAgICAgICAgICAgICAgdXNlIEFSIGFzIHRoZSBhcmNoaXZlci5dLAotICAgIFtBUj0kd2l0aF9hcjsgZXhwb3J0IEFSXSkKLQotQUNfQVJHX1dJVEgoZW5kaWFubmVzcywKLVsgIC0td2l0aC1lbmRpYW5uZXNzPWJpZ3xsaXR0bGUgICAgZGVmaW5lIGVuZGlhbm5lc3Mgb2YgdGFyZ2V0IHBsYXRmb3JtIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxpbmcuXSwKLSAgICBbaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzICE9ICJiaWciIC1hICR3aXRoX2VuZGlhbm5lc3MgIT0gImxpdHRsZSIgOyB0aGVuCi0gICAgICAgQUNfTVNHX0VSUk9SKFtFbmRpYW5uZXNzIG11c3QgYmUgYmlnIG9yIGxpdHRsZSwgbm90ICIkd2l0aF9lbmRpYW5uZXNzIi5dKTsKLSAgICAgZmkKLV0pCi0KLUFDX0FSR19XSVRIKGNmbGFncywKLVsgIC0td2l0aC1jZmxhZ3M9Q0ZMQUdTICAgICAgICAgICAgdXNlIENGTEFHUyBhcyBjb21waWxlIHRpbWUgYXJndW1lbnRzLl0sCi0gICAgW0NGTEFHUz0kd2l0aF9jZmxhZ3M7IGV4cG9ydCBDRkxBR1NdKQotCi1BQ19BUkdfV0lUSChsZGZsYWdzLAotWyAgLS13aXRoLWxkZmxhZ3M9TERGTEFHUyAgICAgICAgICB1c2UgTERGTEFHUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLl0sCi0gICAgW0xERkxBR1M9JHdpdGhfbGRmbGFnczsgZXhwb3J0IExERkxBR1NdKQotCi1BQ19BUkdfRU5BQkxFKGFzLW5lZWRlZCwKLVsgIC0tZW5hYmxlLWFzLW5lZWRlZCAgICAgICAgICAgICAgTGluayBsaWJwZXJsIGFnYWluc3QgTmV0LVNOTVAgbGlicmFyaWVzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9ucy4gV2UgcmVjb21tZW5kIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoaXMgb3B0aW9uIGlmIGl0IHdvcmtzLl0pCi0KLUFDX0FSR19XSVRIKGxpYnMsCi1bICAtLXdpdGgtbGlicz1MSUJTICAgICAgICAgICAgICAgIHVzZSBMSUJTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuXSwKLSAgICBbTElCUz0kd2l0aF9saWJzOyBleHBvcnQgTElCU10pCi0KLUFDX0FSR19FTkFCTEUoc2lsZW50LWxpYnRvb2wsCi1bICAtLWVuYWJsZS1zaWxlbnQtbGlidG9vbCAgICAgICAgIFBhc3MgLS1zaWxlbnQgdG8gbGlidG9vbC5dLAotCUxJQlRPT0xGTEFHUz0tLXNpbGVudCkKLUFDX1NVQlNUKExJQlRPT0xGTEFHUykKLQotQUNfQVJHX1dJVEgoaW5zdGFsbC1wcmVmaXgsCi1bICAtLXdpdGgtaW5zdGFsbC1wcmVmaXg9UEFUSCAgICAgIEp1c3QgZm9yIGluc3RhbGxpbmcsIHByZWZpeCBhbGwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2l0aCBQQVRILiAgVGhpcyBpcyBrbm93biBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3b3JrIG9uIHNvbWUgc3lzdGVtcyB3aXRoIHNoYXJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyAoZWcsIEhQVVgpXSwKLSAgICAgIElOU1RBTExfUFJFRklYPSIkd2l0aHZhbCIpCi0KLWlmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInh5ZXMiIDsgdGhlbgotICBBQ19NU0dfRVJST1IoWy0td2l0aC1pbnN0YWxsLXByZWZpeCByZXF1aXJlcyBhbiBhcmd1bWVudF0pCi1maQotaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieG5vIiA7IHRoZW4KLSAgSU5TVEFMTF9QUkVGSVg9IiIKLWZpCi1BQ19TVUJTVChJTlNUQUxMX1BSRUZJWCkKLQotIyBjaGVjayBmb3IgZXJyb3JzIGluIGFyZ3MgdGhhdCBydW4gYWZ0ZXIgbW9kdWxlIHByb2Nlc3NpbmcgaGVyZSwgc28KLSMgdGhleSBmYWlsIGJlZm9yZSBtb2R1bGUgcHJvY2Vzc2luZy4uLgotQUNfQVJHX0VOQUJMRShsaWJ3cmFwLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1saWJ3cmFwLy0td2l0aG91dC1saWJ3cmFwIGluc3RlYWQgXSkgKQotICBBQ19BUkdfRU5BQkxFKHpsaWIsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXpsaWIvLS13aXRob3V0LXpsaWIgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWluaV9hZ2VudCwKLVsgIC0tZW5hYmxlLW1pbmktYWdlbnQgICAgICAgICAgICAgQnVpbGQgYSBtaW5pbWFsIGFnZW50Ll0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9taW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgotICAgIG1pbmlfYWdlbnQ9InllcyIKLWVsc2UKLSAgICBtaW5pX2FnZW50PSJubyIKLWZpCi1BQ19BUkdfV0lUSChtaW5pX2FnZW50LCwKLSAgICAgICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKG1pbmlhZ2VudCwsCi0gICAgICAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCBdKSApCi1BQ19BUkdfRU5BQkxFKG1pbmlhZ2VudCwsCi0gICAgICAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoYWdlbnQsCi1bICAtLWRpc2FibGUtYWdlbnQgICAgICAgICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYWdlbnQgKHNubXBkKS5dKQotaWYgdGVzdCAieCRlbmFibGVfYWdlbnQiICE9ICJ4bm8iOyB0aGVuCi0gICBTTk1QRD0nc25tcGQkKEVYRUVYVCknCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgotICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJwotICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKLWVsc2UKLSAgIFNOTVBEPSIiCi0gICAjIHdlIHN0aWxsIG5lZWQvd2FudCB0aGUgYWdlbnRsaWJzIChmb3Igc3ViYWdlbnRzLCBlLmcuIHNubXB0cmFwZCkKLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCi0gICAjIGJ1aWxkaW5nIHNubXB0cmFwZCB3L28gYWdlbnRsaWJzIGRvZXNuJ3Qgd29yayBhdG0KLSAgICNUUkFQTElCUz0nJChUUkFQRFdJVEhPVVRBR0VOVCknCi0gICAjVVNFVFJBUExJQlM9JyQoVVNFTElCUyknCi0gICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCi0gICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJwotZmkKLUFDX1NVQlNUKFNOTVBEKQotQUNfU1VCU1QoVFJBUExJQlMpCi1BQ19TVUJTVChVU0VUUkFQTElCUykKLUFDX0FSR19XSVRIKGFnZW50LCwKLSAgICAgICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnQvLS1kaXNhYmxlLWFnZW50IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGFwcGxpY2F0aW9ucywKLVsgIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhcHBzIChzbm1wZ2V0LCAuLi4pLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9hcHBsaWNhdGlvbnMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFwcHMiCi1maQotIyBDb21tb24gbWlzdGFrZXMKLUFDX0FSR19XSVRIKGFwcGxpY2F0aW9ucywsCi0gICAgICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWFudWFscywKLVsgIC0tZGlzYWJsZS1tYW51YWxzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1hbnVhbHMuXSkKLWlmIHRlc3QgIngkZW5hYmxlX21hbnVhbHMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1hbiIKLWZpCi1BQ19BUkdfV0lUSChtYW51YWxzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1hbnVhbHMvLS1kaXNhYmxlLW1hbnVhbHMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoc2NyaXB0cywKLVsgIC0tZGlzYWJsZS1zY3JpcHRzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIHNjcmlwdHMgKG1pYjJjLCAuLi4pLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zY3JpcHRzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBsb2NhbCIKLWZpCi1BQ19BUkdfV0lUSChzY3JpcHRzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNjcmlwdHMvLS1kaXNhYmxlLXNjcmlwdHMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWlicywKLVsgIC0tZGlzYWJsZS1taWJzICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1pYiBmaWxlcy5dKQotaWYgdGVzdCAieCRlbmFibGVfbWlicyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWlicyIKLWZpCi0jIHdpdGgtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQotCi1BQ19TVUJTVChNQUlOU1VCUykKLUFDX01TR19DSEVDS0lORyhbd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbF0pCi1BQ19NU0dfUkVTVUxUKFskTUFJTlNVQlNdKQotCi1BQ19BUkdfRU5BQkxFKG1pYi1sb2FkaW5nLAotWyAgLS1kaXNhYmxlLW1pYi1sb2FkaW5nICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgcGFyc2VzIGFuZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlcyB0aGUgbWliIGZpbGVzLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9taWJfbG9hZGluZyIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElOR10sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBtaWIgbG9hZGluZyBhbmQgcGFyc2luZyBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQotZmkKLUFDX0FSR19XSVRIKG1pYi1sb2FkaW5nLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1sb2FkaW5nLy0tZGlzYWJsZS1taWItbG9hZGluZyBpbnN0ZWFkIF0pICkKLQotIwotU05NUF9WRVJTSU9OUz0iIgotQUNfQVJHX0VOQUJMRShzbm1wdjEsCi1bICAtLWRpc2FibGUtc25tcHYxICAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MS5dKQotaWYgdGVzdCAieCRlbmFibGVfc25tcHYxIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NOTVBWMV0sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QdjEgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKLWVsc2UKLSAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMSIKLWZpCi1BQ19BUkdfV0lUSChzbm1wdjEsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYxLy0tZGlzYWJsZS1zbm1wdjEgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoc25tcHYyYywKLVsgIC0tZGlzYWJsZS1zbm1wdjJjICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYyYy5dKQotaWYgdGVzdCAieCRlbmFibGVfc25tcHYyYyIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TTk1QVjJDXSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVB2MmMgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKLWVsc2UKLSAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMmMiCi1maQotQUNfQVJHX1dJVEgoc25tcHYyYywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjJjLy0tZGlzYWJsZS1zbm1wdjJjIGluc3RlYWQgXSkgKQotCi1TTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAzIgotQUNfTVNHX0NBQ0hFX0FERChTTk1QIFZlcnNpb25zIFN1cHBvcnRlZDogICAkU05NUF9WRVJTSU9OUykKLQotQUNfQVJHX0VOQUJMRShzZXQtc3VwcG9ydCwKLVsgIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCAgICAgICAgICAgRG8gbm90IGFsbG93IFNOTVAgc2V0IHJlcXVlc3RzIHRvIHRoZSBhZ2VudC5dKQotaWYgdGVzdCAieCRlbmFibGVfc2V0X3N1cHBvcnQiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlRdLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUCBTRVQgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWRdKQotZmkKLUFDX0FSR19XSVRIKHNldC1zdXBwb3J0LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNldC1zdXBwb3J0Ly0tZGlzYWJsZS1zZXQtc3VwcG9ydCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShkZXMsCi1bICAtLWRpc2FibGUtZGVzICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IERFUyBlbmNyeXB0aW9uLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZXMiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfREVTXSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIERFUyBlbmNyeXB0aW9uIHNob3VsZCBub3QgYmUgc3VwcG9ydGVkXSkKLWZpCi1BQ19BUkdfV0lUSChkZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVzLy0tZGlzYWJsZS1kZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUocHJpdmFjeSwKLVsgIC0tZGlzYWJsZS1wcml2YWN5ICAgICAgICAgICAgICAgRG9uJ3QgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBwcml2YWN5IChlbmNyeXB0aW9uKS5dKQotaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWKQotZmkKLUFDX0FSR19XSVRIKHByaXZhY3ksLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcHJpdmFjeS8tLWRpc2FibGUtcHJpdmFjeSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtZDUsCi1bICAtLWRpc2FibGUtbWQ1ICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IE1ENSBhdXRoZW50aWNhdGlvbi5dKQotaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX01ENV0sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBNRDUgYXV0aGVudGljYXRpb24gc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWRdKQotZmkKLUFDX0FSR19XSVRIKG1kNSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZDUvLS1kaXNhYmxlLW1kNSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShpbnRlcm5hbC1tZDUsCi1bICAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgICAgICAgICAgIFVzZSB0aGUgaW50ZXJuYWwgTUQ1IHN1cHBvcnQuXSkKLWlmIHRlc3QgIngkZW5hYmxlX2ludGVybmFsX21kNSIgPSAieHllcyI7IHRoZW4KLSAgaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFlvdSBjYW4gbm90IHNwZWNpZnkgYm90aCAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgYW5kIC0tZGlzYWJsZS1tZDUpCi0gIGVsc2UKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KQotICBmaQotZmkKLUFDX0FSR19XSVRIKGludGVybmFsLW1kNSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pbnRlcm5hbC1tZDUvLS1kaXNhYmxlLWludGVybmFsLW1kNSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShpcHY2LAotWyAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBJUHY2IHJlYWR5IHZlcnNpb24uXSwKLSAgICBbaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9JUFY2KQotICAgIGZpXSkKLUFDX0FSR19XSVRIKGlwdjYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaXB2Ni8tLWRpc2FibGUtaXB2NiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShsb2NhbC1zbXV4LAotWyAgLS1lbmFibGUtbG9jYWwtc211eCAgICAgICAgICAgICBSZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCAoYnkgZGVmYXVsdCkuXSwKLSAgICBbaWYgdGVzdCAieCRlbmFibGVfbG9jYWxfc211eCIgPSAieHllcyI7IHRoZW4KLSAgICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYKQotICAgIGZpXSkKLUFDX0FSR19XSVRIKGxvY2FsLXNtdXgsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbG9jYWwtc211eC8tLWRpc2FibGUtbG9jYWwtc211eCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShkZWJ1Z2dpbmcsCi1bICAtLWVuYWJsZS1kZWJ1Z2dpbmcgICAgICAgICAgICAgIE91dHB1dHMgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGF0IGFsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzLiAgTm9ybWFsbHksIHlvdSBzaG91bGQgbm90IGVuYWJsZSB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgLUQgZmxhZyBvZiB0aGUgY29tbWFuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG9nZ2xlcyBkZWJ1Z2luZyBvdXRwdXQgYXQgcnVudGltZS4KLSAgLS1kaXNhYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICBEaXNhbGxvd3MgZGVidWdnaW5nIGNvZGUgdG8gYmUgYnVpbHQgaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtaWdodCBwcm92aWRlIHNvbWUgc3BlZWQgYmVuZWZpdHMuXSwKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9BTFdBWVNfREVCVUcpKQotQUNfQVJHX1dJVEgoZGVidWdnaW5nLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlYnVnZ2luZy8tLWRpc2FibGUtZGVidWdnaW5nIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGRldmVsb3BlciwKLVsgIC0tZW5hYmxlLWRldmVsb3BlciAgICAgICAgICAgICAgVHVybnMgb24gc3VwZXItZHVwZXItZXh0cmEtY29tcGlsZS13YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdXNpbmcgZ2NjLl0sCi0gICAgZGV2ZWxvcGVyPXllcykKLUFDX0FSR19XSVRIKGRldmVsb3BlciwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXZlbG9wZXIvLS1kaXNhYmxlLWRldmVsb3BlciBpbnN0ZWFkIF0pICkKLQotaWYgdGVzdCAieCRlbmFibGVfZGVidWdnaW5nIiA9ICJ4bm8iOyB0aGVuCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfTk9fREVCVUdHSU5HKQotZmkKLQotQUNfQVJHX1dJVEgoZG1hbGxvYywKLVsgIC0td2l0aC1kbWFsbG9jPVBBVEggICAgICAgICAgICAgVXNlIGRtYWxsb2MgbGlicmFyeSAod3d3LmRtYWxsb2MuY29tKV0sCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgotICAgICAgQUNfREVGSU5FKEhBVkVfRE1BTExPQ19IKQotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCi0gICAgICBMSUJTPSIkTElCUyAtbGRtYWxsb2MiCi0gICAgICBBQ19ERUZJTkUoSEFWRV9ETUFMTE9DX0gpCi0gICAgZmkKLSkKLUFDX1NVQlNUKEhBVkVfRE1BTExPQ19IKQotQUNfQVJHX0VOQUJMRShkbWFsbG9jLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbWFsbG9jLy0td2l0aG91dC1kbWFsbG9jIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChlZmVuY2UsCi1bICAtLXdpdGgtZWZlbmNlICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGFuZCB1c2UgbGliZWZlbmNlIChtYWxsb2MpLl0sCi0gICAgICB1c2VfZWZlbmNlPSIkd2l0aHZhbCIpCi1BQ19BUkdfRU5BQkxFKGVmZW5jZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWZlbmNlLy0td2l0aG91dC1lZmVuY2UgaW5zdGVhZCBdKSApCi0KLXRyeXJzYXJlZj1ubwotQUNfQVJHX1dJVEgocnNhcmVmLAotWyAgLS13aXRoLXJzYXJlZj1QQVRIICAgICAgICAgICAgICBMb29rIGZvciBsaWJyc2FyZWYgaW4gUEFUSC9saWIuXSwKLSAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICB0cnlyc2FyZWY9eWVzCi0gICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KLSAgICAgIHRyeXJzYXJlZj1ubwotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCi0gICAgICB0cnlyc2FyZWY9eWVzCi0gICAgZmksCi0pCi1BQ19BUkdfRU5BQkxFKHJzYXJlZiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnNhcmVmLy0td2l0aG91dC1yc2FyZWYgaW5zdGVhZCBdKSApCi0KLXRyeW9wZW5zc2w9ZGVmYXVsdHllcwotYXNrZWRvcGVuc3NsPW5vCi1BQ19BUkdfV0lUSChvcGVuc3NsLAotWyAgLS13aXRoLW9wZW5zc2w9UEFUSCAgICAgICAgICAgICBMb29rIGZvciBvcGVuc3NsIGluIFBBVEgvbGliLl0sCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgdHJ5b3BlbnNzbD15ZXMKLSAgICAgIGFza2Vkb3BlbnNzbD15ZXMKLSAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgotICAgICAgdHJ5b3BlbnNzbD1ubwotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCi0gICAgICB0cnlvcGVuc3NsPXllcwotICAgICAgYXNrZWRvcGVuc3NsPXllcwotICAgIGZpLAotKQotaWYgdGVzdCAieCR0cnlvcGVuc3NsIiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgvdXNyL2xvY2FsL3NzbCkKLSAgICAgIHRyeW9wZW5zc2w9eWVzCi1maQotQUNfQVJHX0VOQUJMRShvcGVuc3NsLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgoc3NsLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgXSkgKQotQUNfQVJHX0VOQUJMRShzc2wsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCBdKSApCi0KLXRyeWtyYjU9ZGVmYXVsdHllcwotYXNrZWRrcmI1PW5vCi1BQ19BUkdfV0lUSChrcmI1LAotWyAgLS13aXRoLWtyYjU9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBrcmI1IGluIFBBVEgvbGliLl0sCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGFza2Vka3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPXVuZGVmCi0gICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9bm8KLSAgICAgIGtyYjVwYXRoPXVuZGVmCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBhc2tlZGtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD0kd2l0aHZhbAotICAgIGZpLAotKQotaWYgdGVzdCAieCR0cnlrcmI1IiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD0vdXNyL2tlcmJlcm9zCi1maQotQUNfQVJHX0VOQUJMRShrcmI1LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rcmI1Ly0td2l0aG91dC1rcmI1IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChycG0sCi1bICAtLXdpdGhvdXQtcnBtICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFJQTSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBidWlsZGluZyB0aGUgaG9zdCBNSUIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuXSkKLUFDX0FSR19FTkFCTEUocnBtLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1ycG0vLS13aXRob3V0LXJwbSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShhZ2VudHgtZG9tLXNvY2stb25seSwKLVsgIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5ICAgRGlzYWJsZSBVRFAvVENQIHRyYW5zcG9ydHMgZm9yIGFnZW50eC5dLAotQUNfREVGSU5FKE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkpKQotQUNfQVJHX1dJVEgoYWdlbnR4LWRvbS1zb2NrLW9ubHksLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkvLS1kaXNhYmxlLWFnZW50eC1kb20tc29jay1vbmx5IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHNubXB0cmFwZC1zdWJhZ2VudCwKLVsgIC0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgICAgRGlzYWJsZSBhZ2VudHggc3ViYWdlbnQgY29kZSBpbiBzbm1wdHJhcGQuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgpCi1maQotQUNfQVJHX1dJVEgoc25tcHRyYXBkLXN1YmFnZW50LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudC8tLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChvcGFxdWUtc3BlY2lhbC10eXBlcywKLVsgIC0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyAgRG9uJ3QgdXNlIHNwZWNpYWwgb3BhcXVlIGVuY29kaW5ncy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIG5vcm1hbGx5IGNhbm5vdCBoYW5kbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyBudW1iZXJzLCBub3IgbGFyZ2UgNjQgYml0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgd2VsbC4gIEJ5IGRlZmF1bHQsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC1zbm1wIHBhY2thZ2UgY29tcGlsZXMgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGVzZSBleHRyYSBkYXRhdHlwZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gYSBsZWdhbCB3YXkpXSkKLUFDX0FSR19FTkFCTEUob3BhcXVlLXNwZWNpYWwtdHlwZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzLy0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgobWliZGlycywKLVsgIC0td2l0aC1taWJkaXJzPSJkaXIxOmRpcjI6IiAgIERlZmF1bHQgZGlyZWN0b3JpZXMgdG8gbG9vayBmb3IgbWlicy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogXCRIT01FLy5zbm1wL21pYnM6REFUQURJUi9zbm1wL21pYnMpXSwKLSAgICBbTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IiR3aXRoX21pYmRpcnMiCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTLCIkd2l0aF9taWJkaXJzIildKQotQUNfQVJHX0VOQUJMRShtaWJkaXJzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJkaXJzLy0td2l0aG91dC1taWJkaXJzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChtaWJzLAotWyAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbnkgbWlicyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1pYiBtb2R1bGVzIHRoZSBhZ2VudCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgd2l0aCldLAotICAgIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkd2l0aF9taWJzIikKLSMgZW5hYmxlLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKLQotQUNfQVJHX1dJVEgobWliZmlsZXMsCi1bICAtLXdpdGgtbWliZmlsZXM9ImZpbGUxOmZpbGUyIiBEZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAgbm9uZS4gIHVzZXMgSURzIGFib3ZlIGluc3RlYWQuKV0sCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUywiJHdpdGhfbWliZmlsZXMiKSkKLUFDX0FSR19FTkFCTEUobWliZmlsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmZpbGVzLy0td2l0aG91dC1taWJmaWxlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtaWItY29uZmlnLWNoZWNraW5nLAotWyAgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyAgICBUdXJucyBvbiBleHRyYSBjaGVja3MgZHVyaW5nIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtaWIgbW9kdWxlcy4gQW55IGNvbmZsaWN0cyB3aWxsIGNhdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHRvIGFib3J0IChkZWZhdWx0IGlzIHRvIGlzc3VlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIGFuZCBjb250aW51ZS4pXSwKLSAgICB3aXRoX21pYl9jZmdfY2hlY2tzPSJ5ZXMiLHdpdGhfbWliX2NmZ19jaGVja3M9Im5vIikKLUFDX0FSR19XSVRIKG1pYi1jb25maWctY2hlY2tpbmcsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtaWItY29uZmlnLWRlYnVnLAotWyAgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyAgICAgICBUdXJucyBvbiB2ZXJib3NlIG91dHB1dCBkdXJpbmcgbWliIG1vZHVsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBwcm9jZXNzaW5nLildLAotICAgIHdpdGhfbWliX2NmZ19kZWJ1Zz0ieWVzIix3aXRoX21pYl9jZmdfZGVidWc9Im5vIikKLUFDX0FSR19XSVRIKG1pYi1jb25maWctY2hlY2tpbmcsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtZmQtcmV3cml0ZXMsCi1bICAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgICAgICAgICAgIFVzZSBuZXcgTUZEIHJld3JpdGVzIG9mIG1pYiBtb2R1bGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGF2YWlsYWJsZS4gKGRlZmF1bHQgaXMgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbWliIG1vZHVsZSBjb2RlKS5dKQotaWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgotICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUykKLWZpCi1BQ19BUkdfV0lUSChtZmQtcmV3cml0ZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWZkLXJld3JpdGVzLy0tZGlzYWJsZS1tZmQtcmV3cml0ZXMgaW5zdGVhZCBdKSApCi0KLWFza2VkcGtjcz1ubwotQUNfQVJHX1dJVEgocGtjcywKLVsgIC0td2l0aC1wa2NzPVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3IgcGtjczExIGluIFBBVEgvbGliLl0sCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgYXNrZWRwa2NzPXllcwotICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCi0gICAgICBhc2tlZHBrY3M9bm8KLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQotICAgICAgYXNrZWRwa2NzPXllcwotICAgIGZpLAotKQotQUNfQVJHX0VOQUJMRShwa2NzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wa2NzLy0td2l0aG91dC1wa2NzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHRlc3RpbmctY29kZSwKLVsgIC0tZW5hYmxlLXRlc3RpbmctY29kZSAgICAgICAgICAgRW5hYmxlcyBzb21lIGNvZGUgc2VjdGlvbnMgdGhhdCBzaG91bGQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nIG9mIGNlcnRhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIGZ1bmN0aW9uYWxpdGllcy4gIFRoaXMgc2hvdWxkICpub3QqIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHR1cm5lZCBvbiBmb3IgcHJvZHVjdGlvbiB1c2UuICBFdmVyLl0sCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSkpCi1BQ19BUkdfV0lUSCh0ZXN0aW5nLWNvZGUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdGVzdGluZy1jb2RlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGUgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUocmVlbnRyYW50LAotWyAgLS1lbmFibGUtcmVlbnRyYW50ICAgICAgICAgICAgICBFbmFibGVzIGxvY2tpbmcgZnVuY3Rpb25zIHRoYXQgcHJvdGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgcmVzb3VyY2VzIGluIHNvbWUgbXVsdGktdGhyZWFkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLiAgVGhpcyBkb2VzIG5vdCBndWFyYW50ZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQtc2FmZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5IGFuIGV4cGVyaW1lbnRhbCBzZXR0aW5nLl0sCi0gICAgd2l0aF9yZXNfbG9ja3M9InllcyIsd2l0aF9yZXNfbG9ja3M9Im5vIikKLUFDX0FSR19XSVRIKHJlZW50cmFudCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWVudHJhbnQvLS1kaXNhYmxlLXJlZW50cmFudCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgocm9vdC1hY2Nlc3MsCi1bCi1Db25maWd1cmluZyB0aGUgYWdlbnQ6Ci0gIC0td2l0aG91dC1yb290LWFjY2VzcyAgICAgICAgICAgVGhlIHNubXBkIGFnZW50IHdvbid0IHJlcXVpcmUgcm9vdCBhY2Nlc3MgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4gaXQuICBUaGUgaW5mb3JtYXRpb24gaXQgcmV0dXJucyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWItSUkgdHJlZSBtYXkgbm90IGJlIGNvcnJlY3QsIGhvd2V2ZXIuXSkKLUFDX0FSR19FTkFCTEUocm9vdC1hY2Nlc3MsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJvb3QtYWNjZXNzLy0td2l0aG91dC1yb290LWFjY2VzcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoa21lbS11c2FnZSwKLVsgIC0td2l0aG91dC1rbWVtLXVzYWdlICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgYW55IGNvZGUgcmVsYXRlZCB0byB0aGUgdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Yga21lbS5dKQotQUNfQVJHX0VOQUJMRShrbWVtLXVzYWdlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rbWVtLXVzYWdlLy0td2l0aG91dC1rbWVtLXVzYWdlIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChkdW1teS12YWx1ZXMsCi1bICAtLXdpdGgtZHVtbXktdmFsdWVzICAgICAgICAgICAgIFByb3ZpZGUgJ3BsYWNlaG9sZGVyJyBkdW1teSB2YWx1ZXMgd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0ZWNobmljYWxseSBub3QgY29tcGxpYW50IHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBzcGVjaWZpY2F0aW9ucywgYnV0IHdhcyBob3cgdGhlIGFnZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0ZWQgZm9yIHZlcnNpb25zIDwgNC4wLl0pCi1BQ19BUkdfRU5BQkxFKGR1bW15LXZhbHVlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZHVtbXktdmFsdWVzLy0td2l0aG91dC1kdW1teS12YWx1ZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKHBlcnNpc3RlbnQtZGlyZWN0b3J5LAotWyAgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PSJkaXJlY3RvcnkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBkaXJlY3RvcnkgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLl0sYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT0iJHdpdGhfcGVyc2lzdGVudF9kaXJlY3RvcnkiKQotQUNfQVJHX0VOQUJMRShwZXJzaXN0ZW50LWRpcmVjdG9yeSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3RvcnkvLS13aXRob3V0LXBlcnNpc3RlbnQtZGlyZWN0b3J5IGluc3RlYWQgXSkgKQotCi1kZWZhdWx0X3BlcnNpc3RlbnRfbWFzaz0wNzcKLUFDX0FSR19XSVRIKHBlcnNpc3RlbnQtbWFzaywKLVsgIC0td2l0aC1wZXJzaXN0ZW50LW1hc2s9Im1hc2siICBEZWZhdWx0IG1hc2sgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAwNzcpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgbWFzayB2YWx1ZSBdKTsKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLLCR3aXRodmFsKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJGRlZmF1bHRfcGVyc2lzdGVudF9tYXNrKQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9QRVJTSVNURU5UX01BU0ssJGRlZmF1bHRfcGVyc2lzdGVudF9tYXNrKQotXSkKLUFDX0FSR19FTkFCTEUocGVyc2lzdGVudC1tYXNrLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGNvcHlfcGVyc2lzdGVudF9maWxlcywKLVsgIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9Im5vIiBEb24ndCBjb3B5IHBlcnNpc3RlbnQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdXNlICJ5ZXMiIHRvIGNvcHkgdGhlbSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IHllcyldLAotICAgIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzIikKLUFDX0FSR19FTkFCTEUoY29weV9wZXJzaXN0ZW50X2ZpbGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMvLS13aXRob3V0LWNvcHlfcGVyc2lzdGVudF9maWxlcyBpbnN0ZWFkIF0pICkKLQotZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybj0iL3RtcC9zbm1wZFhYWFhYWCIKLUFDX0FSR19XSVRIKHRlbXAtZmlsZS1wYXR0ZXJuLAotWyAgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuPVBBVFRFUk4gIFBhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzIChEZWZhdWx0OiAvdG1wL3NubXBkWFhYWFhYKV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBhdHRlcm4gXSk7Ci0gIGZpCi0gIEFDX01TR19SRVNVTFQodXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4sIiR3aXRodmFsIixbUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXNdKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuKQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiwiJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iLFtQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlc10pCi1dKQotQUNfQVJHX0VOQUJMRSh0ZW1wLWZpbGUtcGF0dGVybiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gaW5zdGVhZCBdKSApCi0KLWRlZmF1bHRfYWdlbnR4X3NvY2tldD0iL3Zhci9hZ2VudHgvbWFzdGVyIgotQUNfQVJHX1dJVEgoYWdlbnR4LXNvY2tldCwKLVsgIC0td2l0aC1hZ2VudHgtc29ja2V0PUZJTEUgICAgICAgICBBZ2VudFggc29ja2V0IChEZWZhdWx0OiAvdmFyL2FnZW50eC9tYXN0ZXIgYXMgc3BlY2lmaWVkIGluIFJGQzI3NDEpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgZnVsbCBwYXRoIF0pOwotICBmaQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0FHRU5UWF9TT0NLRVQsIiR3aXRodmFsIixbVW5peCBkb21haW4gc29ja2V0IGZvciBBZ2VudFggbWFzdGVyLXN1YmFnZW50IGNvbW11bmljYXRpb25dKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0FHRU5UWF9TT0NLRVQsIiRkZWZhdWx0X2FnZW50eF9zb2NrZXQiLFtVbml4IGRvbWFpbiBzb2NrZXQgZm9yIEFnZW50WCBtYXN0ZXItc3ViYWdlbnQgY29tbXVuaWNhdGlvbl0pCi1dKQotQUNfQVJHX0VOQUJMRShhZ2VudHgtc29ja2V0LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1hZ2VudHgtc29ja2V0IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChkZWZhdWx0LXNubXAtdmVyc2lvbiwKLVsgIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj0iMyIgRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWdhbCB2YWx1ZXM6IDEsIDIgKGZvciBTTk1QdjJjKSBvciAzLl0sCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iJHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24iKQotQUNfQVJHX0VOQUJMRShkZWZhdWx0LXNubXAtdmVyc2lvbiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24vLS13aXRob3V0LWRlZmF1bHQtc25tcC12ZXJzaW9uIGluc3RlYWQgXSkgKQotCi0jIHdlIHRlc3QgdGhpcyBub3cgYW5kIGxhdGVyIGFzIHdlbGwuICB3ZSB0ZXN0IGl0IG5vdyBzbyBjb25maWd1cmUgY2FuIGRpZQotIyBlYXJseSBvbiB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHdhaXRpbmcgdGlsbCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCi1pZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICJ4IjsgdGhlbgotICBpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAiMmMiOyB0aGVuCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iMiIKLSAgZmkKLSAgaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIxIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIyIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIzIjsgdGhlbgotICAgIEFDX01TR19FUlJPUihJbGxlZ2FsIHZlcnNpb24gbnVtYmVyIHBhc3NlZCB0byAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24pCi0gIGZpCi1maQotCi1BQ19BUkdfV0lUSChzeXNfY29udGFjdCwKLVsgIC0td2l0aC1zeXMtY29udGFjdD0id2hvQHdoZXJlIiAgRGVmYXVsdCBzeXN0ZW0gY29udGFjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBMT0dJTkBET01BSU5OQU1FKV0sCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD0iJHdpdGhfc3lzX2NvbnRhY3QiKQotQUNfQVJHX0VOQUJMRShzeXNfY29udGFjdCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWNvbnRhY3QvLS13aXRob3V0LXN5cy1jb250YWN0IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChzeXNfbG9jYXRpb24sCi1bICAtLXdpdGgtc3lzLWxvY2F0aW9uPSJsb2NhdGlvbiIgIERlZmF1bHQgc3lzdGVtIGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFVua25vd24pXSwKLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9IiR3aXRoX3N5c19sb2NhdGlvbiIpCi1BQ19BUkdfRU5BQkxFKHN5c19sb2NhdGlvbiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWxvY2F0aW9uLy0td2l0aG91dC1zeXMtbG9jYXRpb24gaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGxvZ2ZpbGUsCi1bICAtLXdpdGgtbG9nZmlsZT0ibG9jYXRpb24iICAgICAgIERlZmF1bHQgbG9nIGZpbGUgbG9jYXRpb24gZm9yIHNubXBkLl0sCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSIkd2l0aF9sb2dmaWxlIikKLUFDX0FSR19FTkFCTEUobG9nZmlsZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbG9nZmlsZS8tLXdpdGhvdXQtbG9nZmlsZSBpbnN0ZWFkIF0pICkKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIm5vIjsgdGhlbgotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0ibm9uZSIKLWZpCi0KLUFDX0FSR19XSVRIKHRyYW5zcG9ydHMsCi1bICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCkuXSkKLUFDX0FSR19XSVRIKG91dF90cmFuc3BvcnRzLAotWyAgLS13aXRoLW91dC10cmFuc3BvcnRzPSJ0MSAuLi4iICBFeGNsdWRlIGxpc3RlZCBTTk1QIHRyYW5zcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCkuCi0KLSAgQXZhaWxhYmxlIFNOTVAgdHJhbnNwb3J0IG1vZHVsZXMgYXJlOgotCi0gICAgVURQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUC4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhbHdheXMgY29tcGlsZWQgaW4uCi0gICAgVURQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCi0gICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KLSAgICAgICAgICAgICAgICBJdCBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0LgotICAgIFRDUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAotICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCi0gICAgICAgICAgICAgICAgSXQgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdC4KLSAgICBUQ1AgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVENQL0lQLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQsIGJ1dCBtYXkgYmUgb21pdHRlZC4KLSAgICBVbml4ICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVW5peCBkb21haW4gcHJvdG9jb2xzLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgZXhjZXB0IG9uIFdpbjMyCi0gICAgICAgICAgICAgICAgcGxhdGZvcm1zLCBhbmQgbWF5IGJlIG9taXR0ZWQuCi0gICAgQ2FsbGJhY2sgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIGFuIGludGVybmFsIGxvY2FsbHkgY29ubmVjdGVkIHBhaXIKLSAgICAgICAgICAgICAgICBvZiBzbm1wX3Nlc3Npb25zLgotICAgIEFBTDVQVkMgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBBQUw1IFBWQ3MuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKLSAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KLSAgICBJUFggICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgSVBYIHBlciBSRkMgMTQyMC4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAotICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgotXSkKLQotIwotIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gdHJhbnNwb3J0IG9wdGlvbnMKLSMKLUFDX0FSR19XSVRIKHRyYW5zcG9ydCwsICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRyYW5zcG9ydHMvLS13aXRob3V0LXRyYW5zcG9ydHMgaW5zdGVhZCBdKSAgICAgKQotQUNfQVJHX1dJVEgob3V0LXRyYW5zcG9ydCwsQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LXRyYW5zcG9ydHMvLS13aXRob3V0LW91dC10cmFuc3BvcnRzIGluc3RlYWQgXSkgKQotCi0jCi0jIHNlY3VyaXR5IG1vZHVsZXMKLSMKLQotQUNfQVJHX1dJVEgoc2VjdXJpdHktbW9kdWxlcywKLVsgIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzPSJzMSBzMiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCBzZWN1cml0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHNlcnZpY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCkuCi0KLSAgQXZhaWxhYmxlIFNOTVAgc2VjdXJpdHkgc2VydmljZXM6Ci0KLSAgICAgICAgdXNtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHVzZXIgYmFzZWQgU05NUCBzZWN1cml0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVpcmVkIGFuZCBhbHdheXMgY29tcGlsZWQgaW4pCi0gICAgICAgIGtzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBrZXJiZXJvcyBiYXNlZCBTTk1QIHNlY3VyaXR5Ci1dKQotQUNfQVJHX0VOQUJMRShzZWN1cml0eS1tb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzLy0td2l0aG91dC1zZWN1cml0eS1tb2R1bGVzIGluc3RlYWQgXSkgKQotCi0jCi0jIG1pYiBtb2R1bGVzCi0jCi0KLUFDX0FSR19XSVRIKG1pYl9tb2R1bGVzLAotWyAgLS13aXRoLW1pYi1tb2R1bGVzPSJpdGVtMSAuLi4iICBDb21waWxlIHdpdGggYWRkaXRpb25hbCBtaWIgbW9kdWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNwYWNlIHNlcGFyYXRlZCBsaXN0KS5dKQotQUNfQVJHX0VOQUJMRShtaWJfbW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChvdXRfbWliX21vZHVsZXMsCi1bICAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzPSJsaXN0IiAgIENvbXBpbGUgd2l0aG91dCB0aGVzZSBtaWIgbW9kdWxlcy4KLQotICBEZWZhdWx0IG1pYiBtb2R1bGVzIGNvbXBpbGVkIGludG8gdGhlIGFnZW50ICh3aGljaCBjYW4gYmUgcmVtb3ZlZCk6Ci0gIAotICAgIG1pYklJICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIG1pYi1JSSB0cmVlLgotICAgIHNubXB2M21pYnMgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIHNubXB2MyBtaWIgbW9kdWxlcy4KLSAgICB1Y2Rfc25tcCAgICAgICAgICAgICAgIFVDRC1TTk1QLU1JQiBzcGVjaWZpYyBleHRlbnNpb25zLgotICAgIGFnZW50X21pYnMgICAgICAgICAgICAgTkVULVNOTVAtQUdFTlQtTUlCIGV4dGVuc2lvbnMKLSAgICBhZ2VudHggICAgICAgICAgICAgICAgIEFnZW50WCBzdXBwb3J0IChzZWUgYmVsb3cpCi0gICAgbm90aWZpY2F0aW9uICAgICAgICAgICBtaWJzIHN1cHBvcnRpbmcgc3BlY2lmaWNhdGlvbiBvZiB0cmFwIGRlc3RpbmF0aW9ucy4KLSAgICB0YXJnZXQgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBTTk1QIFdHcyBUQVJHRVQtTUlCLgotICAgIHV0aWxpdGllcyAgICAgICAgICAgICAgZ2VuZXJhbCBhZ2VudCBjb25maWd1cmF0aW9uIHV0aWxpdGllcy4KLSAgICBkaXNtYW4vZXZlbnQgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBESVNNQU4tRVZFTlQtTUlCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0cyBzZWxmIG1vbml0b3JpbmcgYW5kIG5vdGlmaWNhdGlvbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5IHdoZW4gZXJyb3IgY29uZGl0aW9ucyBhcmUgZm91bmQpCi0gICAgZGlzbWFuL3NjaGVkdWxlICAgICAgICBzdXBwb3J0IGZvciB0aGUgRElTTUFOLVNDSEVEVUxFLU1JQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHJpZ2dlciBTRVQgcmVxdWVzdHMgYXQgc3BlY2lmaWVkIHRpbWVzKQotICAgIGhvc3QgICAgICAgICAgICAgICAgICAgaG9zdCByZXNvdXJjZXMgbWliIHN1cHBvcnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IG9uIG1ham9yIHN1cHBvcnRlZCBwbGF0Zm9ybXMpCi0KLSAgT3B0aW9uYWwgbWliIG1vZHVsZXMgdGhhdCBjYW4gYmUgYnVpbHQgaW50byB0aGUgYWdlbnQgaW5jbHVkZToKLSAgICBzbXV4ICAgICAgICAgICAgICAgICAgIHNtdXggc3VwcG9ydCB0byBhbGxvdyBzdWJhZ2VudHMgdG8gYXR0YWNoIHRvIHNubXBkLgotICAgIG1pYklJL210YV9zZW5kbWFpbCAgICAgU2VuZG1haWwgc3RhdGlzdGljcyBtb25pdG9yaW5nIChNVEEtTUlCKQotICAgIHVjZC1zbm1wL2Rpc2tpbyAgICAgICAgVGFibGUgb2YgaW8tZGV2aWNlcyBhbmQgaG93IG11Y2ggZGF0YSB0aGV5IGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQvd3JpdHRlbi4gIChvbmx5IHRlc3RlZCBvbiBTb2xhcmlzLCBMaW51eCkKLSAgICBkaXNtYW4vb2xkLWV2ZW50LW1pYiAgIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBESVNNQU4tRVZFTlQtTUlCCi0KLSAgT3B0aW9uYWwgbW9kdWxlcyBmb3Igc3BlY2lmaWMgcGxhdGZvcm1zCi0gICAgTGludXgKLSAgICAgIHVjZC1zbm1wL2xtU2Vuc29ycyAgIGhhcmR3YXJlIG1vbml0b3JpbmcgKExNLVNFTlNPUlMtTUlCKQotICAgICAgaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZSAgKGV4cGVyaW1lbnRhbCkKLSAgICAgIGlwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUgIChleHBlcmltZW50YWwpCi0gICAgICB0dW5uZWwgICAgICAgICAgICAgICBMaW51eCBUVU5ORUwtTUlCIHN1cHBvcnQgKGlmVGFibGUgZXh0ZW5zaW9uKQotICAgICAgbWliSUkvaW50ZXJmYWNlcyAgICAgKG9sZCBpZlRhYmxlIGltcGxlbWVudGF0aW9uKQotICAgICAgbWlzYy9pcGZ3YWNjICAgICAgICAgYWNjb3VudGluZyBydWxlcyBJUCBmaXJld2FsbCBpbmZvcm1hdGlvbgotICAgICAgaXBmd2NoYWlucy9pcGZ3Y2hhaW5zICBmaXJld2FsbCBjaGFpbnMgdW5kZXIgaXBmdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvUkVBRE1FKQotICAgICAgc2N0cC1taWIgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIFNDVFAtTUlCCi0KLSAgICBTb2xhcmlzCi0gICAgICB1Y2Qtc25tcC9sbVNlbnNvcnMgICBoYXJkd2FyZSBtb25pdG9yaW5nIChMTS1TRU5TT1JTLU1JQikKLSAgICAgIGlmLW1pYiAgICAgICAgICAgICAgIElGLU1JQiByZXdyaXRlIChhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQotICAgICAgdGNwLW1pYiAgICAgICAgICAgICAgVENQLU1JQiByZXdyaXRlICh0Y3BDb25uZWN0aW9uVGFibGUgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcExpc3RlbmVyVGFibGU7IGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCi0gICAgICB1ZHAtbWliICAgICAgICAgICAgICBVRFAtTUlCIHJld3JpdGUgKHVkcEVuZHBvaW50VGFibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCi0KLSAgICBGcmVlQlNEL09wZW5CU0QKLSAgICAgIGlmLW1pYiAgICAgICAgICAgICAgIElGLU1JQiByZXdyaXRlIChhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQotCi0gIEFnZW50WCBzdXBwb3J0OgotICAgIGFnZW50eC9zdWJhZ2VudCAgICAgICAgYWxsb3dzIHRoZSBhZ2VudCB0byBydW4gYXMgZWl0aGVyIGEgc25tcCBhZ2VudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWdlbnRYIHN1Yi1hZ2VudC4KLSAgICBhZ2VudHgvbWFzdGVyICAgICAgICAgIG1ha2VzIHRoZSBhZ2VudCBydW4gYXMgYW4gYWdlbnRYIG1hc3RlciBhZ2VudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhIG5vcm1hbCBzbm1wIGFnZW50LgotICAgIGFnZW50eCAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYm90aCBhZ2VudHgvbWFzdGVyIGFuZCBhZ2VudHgvY2xpZW50LgotCi0gIE9wdGlvbmFsIG1vZHVsZXMgZm9yIEMgY29kZXJzIHRvIGxvb2sgYXQgYW5kL29yIGluY2x1ZGUgYXMgZXh0ZW5zaW9uIGV4YW1wbGVzOgotICAKLSAgICBleGFtcGxlcy91Y2REZW1vUHVibGljICBTTk1QdjMgaW50ZXJvcGVyYWJpbGl0eSB0ZXN0aW5nIG1pYi4KLSAgICBleGFtcGxlcy9leGFtcGxlICAgICAgICBleGFtcGxlIEMgY29kZSBleHRlbnNpb24uXSkKLUFDX0FSR19FTkFCTEUob3V0X21pYl9tb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLQotCi0jCi1BQ19BUkdfV0lUSChlbnRlcnByaXNlLW9pZCwKLVtFbnRlcnByaXNlIE9JRHM6ICAod2FybmluZzogdGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uKQotCi0gIC0td2l0aC1lbnRlcnByaXNlLW9pZCAgICAgICAgICAgICAgVGhlIGVudGVycHJpc2UgbnVtYmVyIGFzc2lnbmVkIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvciBieSBJQU5BLiAgU2VlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9jZ2ktYmluL2VudGVycHJpc2UucGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgb25lLCB0aG91Z2ggdXNpbmcgdGhlIGRlZmF1bHQgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iYWJseSB0aGUgcmlnaHQgY2hvaWNlIGlzIG1vc3QgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgODA3MiA9ICJlbnRlcnByaXNlLm5ldC1zbm1wIildLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGVudGVycHJpc2UgbnVtYmVyIF0pOwotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX09JRCwgJHdpdGh2YWwpCi0gIGVudF9vaWQ9IjEsMyw2LDEsNCwxLCR3aXRodmFsIgotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX01JQiwgJGVudF9vaWQpCi0gIGVudF9kb3Rfb2lkPSIxLjMuNi4xLjQuMS4kd2l0aHZhbCIKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9ET1RfTUlCLCAkZW50X2RvdF9vaWQpCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwpCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0ICJlbnRlcnByaXNlLm5ldC1zbm1wIikKLV0pCi1BQ19BUkdfRU5BQkxFKGVudGVycHJpc2Utb2lkLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1vaWQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGVudGVycHJpc2Utc3lzb2lkLAotWwotICAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQgICAgICAgICAgIFRoZSBiYXNlIE9JRCBmb3IgdGhlIHN5c09iamVjdElECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN5c3RlbSBncm91cAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IC4xLjMuNi4xLjQuMS44MDcyLjMuMi4uLiA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0U25tcEFnZW50T0lEcy4uLiIpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgXSk7Ci0gIGZpCi0gIHN5c19vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9NSUIsICRzeXNfb2lkKQotICBzeXNfZG90X29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJ2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0RPVF9NSUIsICRzeXNfZG90X29pZCkKLSAgc3lzb2lkX2xlbj1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL1teXC5dLy9nJyB8IGF3ayAtRlwuICd7IHByaW50IE5GIH0nYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fRE9UX01JQl9MRU5HVEgsICRzeXNvaWRfbGVuKQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4pCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEICJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi4iKQotXSkKLUFDX0FSR19FTkFCTEUoZW50ZXJwcmlzZS1zeXNvaWQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLXN5c29pZCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLAotWwotICAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIFRoZSBPSUQgdXNlZCBmb3IgdGhlIHJvb3Qgb2YKLQkJCQkgICAgIGVudGVycHJpc2Ugc3BlY2lmaWMgbm90aWZpY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCAuMS4zLjYuMS40LjEuODA3Mi40ID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRTbm1wTm90aWZpY2F0aW9uUHJlZml4IildLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSBdKTsKLSAgZmkKLSAgbm90aWZpY2F0aW9uX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiwgJG5vdGlmaWNhdGlvbl9vaWQpCi0gIG5vdGlmaWNhdGlvbl9kb3Rfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fRE9UX01JQiwgJG5vdGlmaWNhdGlvbl9kb3Rfb2lkKQotICBub3RpZmljYXRpb25vaWRfbGVuPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvW15cLl0vL2cnIHwgYXdrIC1GXC4gJ3sgcHJpbnQgTkYgfSdgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9ET1RfTUlCX0xFTkdUSCwgJG5vdGlmaWNhdGlvbm9pZF9sZW4pCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zICJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zIikKLV0pCi1BQ19BUkdfRU5BQkxFKGVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgaW5zdGVhZCBdKSApCi0jCi0jIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiBjb25maWd1cmUgb3B0aW9ucwotIwotQUNfQVJHX1dJVEgobWliLW1vZHVsZSwsICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uMS4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICAgICApCi1BQ19BUkdfV0lUSChtb2R1bGUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uMy4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKG1vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uNC4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgob3V0LW1pYi1tb2R1bGUsLEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uNS4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChvdXQtbW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb243LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKG91dC1tb2R1bGUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uOC4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi0KLSMKLSMgUGVybCBzcGVjaWZpYwotIwotQUNfQVJHX1dJVEgocGVybC1tb2R1bGVzLAotWwotUGVybDoKLSAgLS13aXRoLXBlcmwtbW9kdWxlc1s9QVJHU10gICAgICBJbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMgYWxvbmcgd2l0aCB0aGUgcmVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBuZXQtc25tcCB0b29sa2l0LiAgSWYgQVJHUyBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhleSdyZSBwYXNzZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUuUEwgc2NyaXB0Ll0sWwotICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KLSAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgZWxzZQotICAgICAgaW5zdGFsbF9wZXJsPSJ5ZXMiCi0gICAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgIT0gInllcyI7IHRoZW4KLSAgICAgICAgUEVSTEFSR1M9IiR3aXRodmFsIgotICAgICAgZmkKLSAgICBmaQotXSwgaW5zdGFsbF9wZXJsPSJ0cnkiKQotCi1BQ19BUkdfRU5BQkxFKGVtYmVkZGVkLXBlcmwsCi1bICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAgICAgICAgIERpc2FibGUgZW1iZWRkZWQgUGVybCBpbiB0aGUgU05NUCBhZ2VudCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGQuIFtlbmFibGVkIGJ5IGRlZmF1bHRdXSwKLSAgICBlbWJlZF9wZXJsPSIkZW5hYmxldmFsIiwgZW1iZWRfcGVybD0idHJ5IikKLQotQUNfQVJHX0VOQUJMRShwZXJsLWNjLWNoZWNrcywKLVsgIC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyAgICAgICAgRGlzYWJsZSBjb25maWd1cmUgY2hlY2tzIGZvciB3aGV0aGVyIFBlcmwncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgQ29tcGlsZXIgaXMgY29tcGF0aWJsZSB3aXRoIG91cnMgd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIFBlcmwgaXMgZW5hYmxlZC5dKQotCi0jIENvbW1vbiBwZXJsIG1pc3Rha2VzCi1BQ19BUkdfRU5BQkxFKHBlcmwtbW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVybC1tb2R1bGVzLy0td2l0aG91dC1wZXJsLW1vZHVsZXMgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChlbWJlZGRlZC1wZXJsLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwvLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChwZXJsLWNjLWNoZWNrcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcy8tLWRpc2FibGUtcGVybC1jYy1jaGVja3MgaW5zdGVhZCBdKSApCi0KLQotIwotIyBQeXRob24gc3BlY2lmaWMKLSMKLUFDX0FSR19XSVRIKHB5dGhvbi1tb2R1bGVzLAotWwotUHl0aG9uOgotICAtLXdpdGgtcHl0aG9uLW1vZHVsZXNbPUFSR1NdICAgIEluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncyBhbG9uZyB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Qgb2YgdGhlIG5ldC1zbm1wIHRvb2xraXQuICBJZiBBUkdTIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGV5J3JlIHBhc3NlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cC5weSBzY3JpcHQgYXMgYXJndW1lbnRzLl0sWwotICAgIGluc3RhbGxfcHl0aG9uPSJ5ZXMiCi0gICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KLSAgICAgIFBZVEhPTkFSR1M9IiIKLSAgICBlbGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KLSAgICAgIFBZVEhPTkFSR1M9IiIKLSAgICAgIGluc3RhbGxfcHl0aG9uPSJubyIKLSAgICBlbHNlCi0gICAgICBQWVRIT05BUkdTPSIkd2l0aHZhbCIKLSAgICBmaQotXSwgaW5zdGFsbF9weXRob249Im5vIikKLQotIyBvdGhlciBmbGFncwotCi1BQ19BUkdfV0lUSChzZXJ2ZXItc2VuZC1idWYsCi1bCi1OZXR3b3JrIEJ1ZmZlcnM6Ci0gIC0td2l0aC1zZXJ2ZXItc2VuZC1idWZbPUFSR10gICAgVXNlIEFSRyBmb3IgdGhlIGRlZmF1bHQgVURQL1RDUCBzZW5kIGJ1ZmZlciBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIE9TIGJ1ZmZlciBmb3Igc2VydmVyIHNvY2tldHMgdGhhdCBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIChzbm1wZCwgc25tcHRyYXBkKS4gIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgcnVudGltZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUkcgc2hvdWxkIGJlIHRoZSBzaXplIGluIGJ5dGVzXSxbCi0gICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciBzZW5kIGJ1ZmZlciBdKQotICAgZmkKLSAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGLCAkd2l0aHZhbCldLAotICAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0c10pICkKLUFDX0FSR19FTkFCTEUoc2VydmVyLXNlbmQtYnVmLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYvLS13aXRob3V0LXNlcnZlci1zZW5kLWJ1ZiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoc2VydmVyLXJlY3YtYnVmLAotWyAgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbiwgYnV0IGZvciByZWNlaXZlIGJ1ZmZlcl0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciByZWN2IGJ1ZmZlciBdKQotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRiwgJHdpdGh2YWwpXSwKLSAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0c10pICkKLUFDX0FSR19FTkFCTEUoc2VydmVyLXJlY3YtYnVmLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYvLS13aXRob3V0LXNlcnZlci1yZWN2LWJ1ZiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoY2xpZW50LXNlbmQtYnVmLAotWyAgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbnMsIGJ1dCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBidWZmZXIgb2YgY2xpZW50IHNvY2tldHNdLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgc2VuZCBidWZmZXIgXSkKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUYsICR3aXRodmFsKV0sCi0gIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHNdKSApCi1BQ19BUkdfRU5BQkxFKGNsaWVudC1zZW5kLWJ1ZiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXNlbmQtYnVmLy0td2l0aG91dC1jbGllbnQtc2VuZC1idWYgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGNsaWVudC1yZWN2LWJ1ZiwKLVsgIC0td2l0aC1jbGllbnQtcmVjdi1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZSBzZW5kIGJ1ZmZlcl0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCByZWN2IGJ1ZmZlciBdKQotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRiwgJHdpdGh2YWwpXSwKLSAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0c10pICkKLUFDX0FSR19FTkFCTEUoY2xpZW50LXJlY3YtYnVmLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtcmVjdi1idWYvLS13aXRob3V0LWNsaWVudC1yZWN2LWJ1ZiBpbnN0ZWFkIF0pICkKLQotIwotIyBvdGhlcndpc2UgcHJvbXB0ZWQgaW5mb3JtYXRpb24KLSMKLUFDX0FSR19XSVRIKGRlZmF1bHRzLAotWwotTWlzY2VsbGFuZW91czoKLSAgLS13aXRoLWRlZmF1bHRzICAgICAgICAgVXNlIGRlZmF1bHRzIGZvciBwcm9tcHRlZCB2YWx1ZXMuXSwKLSAgICBkZWZhdWx0cz0ieWVzIixkZWZhdWx0cz0ibm8iKQotQUNfQVJHX0VOQUJMRShkZWZhdWx0cywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdHMvLS13aXRob3V0LWRlZmF1bHRzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHVjZC1zbm1wLWNvbXBhdGliaWxpdHksCi1bICAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IEluc3RhbGwgdWNkLXNubXAgbG9vay1hbGlrZSBoZWFkZXJzIGFuZCBsaWJzLgotXSkKLUFDX0FSR19XSVRIKHVjZC1zbm1wLWNvbXBhdGliaWxpdHksLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eS8tLWRpc2FibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBpbnN0ZWFkIF0pICkKLQotIwotIyBzZXR1cCBpbnN0YWxsIHRhcmdldHMKLSMKLWlmIHRlc3QgIngkZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiID0gInh5ZXMiIDsgdGhlbgkKLSAgaW5zdGFsbHVjZGhlYWRlcnM9aW5zdGFsbHVjZGhlYWRlcnMKLSAgaW5zdGFsbHVjZGxpYnM9aW5zdGFsbHVjZGxpYnMKLSAgQUNfTVNHX0NBQ0hFX0FERChVQ0QtU05NUCBjb21wYXRhYmlsaXR5OiAgICAgZW5hYmxlZCkKLWZpCi1BQ19TVUJTVChpbnN0YWxsdWNkaGVhZGVycykKLUFDX1NVQlNUKGluc3RhbGx1Y2RsaWJzKQotCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLiAKLWlmIHRlc3QgIngkd2l0aF9yb290X2FjY2VzcyIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9OT19ST09UX0FDQ0VTUykKLWZpCi0KLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCi1pZiB0ZXN0ICJ4JHdpdGhfa21lbV91c2FnZSIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9OT19LTUVNX1VTQUdFKQotZmkKLQotIyBEZWZpbmUgdW5sZXNzIHNwZWNpZmljYWxseSBzdXBwcmVzc2VkIChpLmUuLCBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UpLiAKLWlmIHRlc3QgIngkd2l0aF9kdW1teV92YWx1ZXMiICE9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9OT19EVU1NWV9WQUxVRVMpCi1maQotCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLiAKLWlmIHRlc3QgIngkd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcyIgIT0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUykKLWZpCi0KLQotIyBvdmVyZmxvdyBwcm9ibGVtcyB3aXRoIGhwdXgncyBzaAotIyB0YWtlbiBmcm9tIFBlcmwncyBDb25maWd1cmUgc2NyaXB0IAotCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2hdKQotaWYgdGVzdCAtZiAvaHAtdXggLWEgLWYgL2Jpbi9rc2g7IHRoZW4KLSAgaWYgKFBBVEg9LjsgYWxpYXMgLXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIEFDX01TR19SRVNVTFQobm8pCi0gIGVsc2UKLSAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICBpZiB0ZXN0ICJ4JDEiID0gIngiOyB0aGVuCi0gICAgICBleGVjIC9iaW4va3NoICQwCi0gICAgZWxzZQotICAgICAgZXhlYyAvYmluL2tzaCAkMCAiJEAiCi0gICAgZmkKLSAgZmkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi0KLWlmIHRlc3QgIngkZGV2ZWxvcGVyIiAhPSAieG5vIiAtYSAtZiAkc3JjZGlyL3JlbW92ZS1maWxlczsgdGhlbgotICAjIHR1cm4gb24gdGhlIGRldmVsb3BlciBmbGFnIHdoZW4gdGFrZW4gZnJvbSBhIFNWTiBjaGVja291dCAobm90IGEgcmVsZWFzZSkKLSAgZGV2ZWxvcGVyPSJ5ZXMiCi1maQotCi1BQ19MQU5HKFtDXSkKLUFDX1BST0dfQ0MKLUFDX1BST0dfQ1BQCi1MSU5LQ0M9JHtMSU5LQ0MtIiRDQyJ9Ci1BQ19TVUJTVChMSU5LQ0MpCi1BQ19BSVgKLQotIyBzeXN0ZW0gY2hlY2sKLUFDX0NBTk9OSUNBTF9UQVJHRVQKLWNoYW5nZXF1b3RlKCwgKQotUEFSVElBTFRBUkdFVE9TPWBlY2hvICR0YXJnZXRfb3MgfCBzZWQgJ3MvWy0uX10uKi8vJ2AKLWNoYW5nZXF1b3RlKFssIF0pCi0KLSMgcGxhdGZvcm0tc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0JQ0ZMQUdTPSIkQ0ZMQUdTIC1EbWluZ3czMiIKLWZpCi0KLSMgcGxhdGZvcm0tc3BlY2lmaWMgbGlua2VyIGZsYWdzCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBhaXg0LjIqfGFpeDQuMyp8YWl4NSp8YWl4NiopCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYXSkKLSAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rPXllcwotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBmaQotICAgICAgICBkb25lCi0gICAgICAgIGlmIHRlc3QgIlgkbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2siICE9ICJYeWVzIjsgdGhlbgotCSAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KLQkgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1XbCwtYnJ0bCIKLQkgICAgZWxzZQotICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1icnRsIgotCSAgICBmaQotICAgICAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfYWl4X2xkZmxhZ3MgJExERkxBR1MiCi0JICAgIEFDX01TR19SRVNVTFQoJG5ldHNubXBfYWl4X2xkZmxhZ3MpCi0JZWxzZQotCSAgICBBQ19NU0dfUkVTVUxUKFtub25lXSkKLQlmaQotCTs7Ci0gICAgZGFyd2luOCp8ZGFyd2luOSopCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2VdKQotCWlmIHRlc3QgLXogIiRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiOyB0aGVuCi0JCUxERkxBR1M9Ii1mbGF0X25hbWVzcGFjZSAkTERGTEFHUyIKLQkJQUNfTVNHX1JFU1VMVChbeWVzXSkKLQllbHNlCi0JCUFDX01TR19SRVNVTFQoW25vXSkKLQlmaQotCTs7Ci0gICAgKikKLSAgICAgICAgOzsKLWVzYWMKLQotIyBsaWJ0b29sIHN0dWZmIGZvciBzaGFyZWQvc3RhdGljIGxpYnJhcmllcy4KLUFDX0xJQlRPT0xfRExPUEVOCi1BQ19MSUJUT09MX1dJTjMyX0RMTAotQUNfUFJPR19MSUJUT09MCi1BQ19TVUJTVChMSUJUT09MX0RFUFMpCi0KLSMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLUFDX1BST0dfSU5TVEFMTAotQUNfUFJPR19MTl9TCi1BQ19QUk9HX01BS0VfU0VUCi1BQ19QUk9HX0VHUkVQCi1BQ19QQVRIX1BST0coW1BTUFJPR10scHMpCi1BQ19QQVRIX1BST0coW1BFUkxQUk9HXSxwZXJsKQotQUNfUEFUSF9QUk9HKFtQWVRIT05QUk9HXSxweXRob24pCi1BQ19DSEVDS19QUk9HUyhXSE9BTUksIHdob2FtaSBsb2duYW1lLCB3aG9hbWkpCi1BQ19DSEVDS19QUk9HUyhTRUQsc2VkIGdzZWQpCi1BQ19DSEVDS19QUk9HUyhGSU5ELGZpbmQpCi1BQ19QQVRIX1BST0coQVVUT0NPTkYsIGF1dG9jb25mKQotQUNfUEFUSF9QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0NPTkYiID0gIngiOyB0aGVuCi0JQVVUT0NPTkY9IjoiCi0JQUNfU1VCU1QoQVVUT0NPTkYpCi1maQotaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9IRUFERVIiID0gIngiOyB0aGVuCi0JQVVUT0hFQURFUj0iOiIKLQlBQ19TVUJTVChBVVRPSEVBREVSKQotZmkKLQotQUNfUEFUSF9QUk9HKFtVTkFNRVBST0ddLHVuYW1lKQotQUNfREVGSU5FX1VOUVVPVEVEKFVOQU1FUFJPRywiJFVOQU1FUFJPRyIpCi0KLUFDX0NfQ09OU1QKLUFDX0NfSU5MSU5FCi0KLQotIyBnZXQgdmVyc2lvbiBudW1iZXIuCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBuZXQtc25tcCB2ZXJzaW9uIG51bWJlcl0pCi1WRVJTSU9OPSRQQUNLQUdFX1ZFUlNJT04KLQotIyBjcmVhdGUgdGhlIHJlbGVhc2UgdmVyc2lvbiBudW1iZXIuLi4uICBJJ20gbm90IHN1cmUgdGhpcyBpcyB1c2VkCi0jIGFueXdoZXJlIGFueSBsb25nZXIuCi1fcmVsZWFzZV92ZXJzaW9uPWBlY2hvICRWRVJTSU9OIHwgc2VkICdzLyI7LiovLztzLy4qIi8vO3MvcHJlLzAuLzsnYAotY2hhbmdlcXVvdGUoLCApCi1SRUxFQVNFVkVSU0lPTj1gZWNobyAkX3JlbGVhc2VfdmVyc2lvbiB8IHNlZCAncy9eXChbMC05XVwpXC5cKFswLTldXCkvXDE6XDI6MC8nYAotY2hhbmdlcXVvdGUoWywgXSkKLQotQUNfU1VCU1QoVkVSU0lPTikKLUFDX1NVQlNUKFJFTEVBU0VWRVJTSU9OKQotQUNfTVNHX1JFU1VMVCgkVkVSU0lPTikKLUFDX01TR19DQUNIRV9BREQoTmV0LVNOTVAgVmVyc2lvbjogICAgICAgICAgICRWRVJTSU9OKQotCi0jIHN1cGVyIHR5cGUgY2hlY2tpbmcKLSMgV1dXWFhYCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzXSkKLWlmIHRlc3QgIngkZGV2ZWxvcGVyIiA9ICJ4eWVzIiAtYSAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0gIERFVkZMQUdTPSItV2FsbCAtV2lubGluZSAtV3N0cmljdC1wcm90b3R5cGVzIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCAtV25vLWNoYXItc3Vic2NyaXB0cyIKLWVsc2UKLSAgREVWRkxBR1M9IiIKLWZpCi1BQ19NU0dfUkVTVUxUKCRERVZGTEFHUykKLUFDX1NVQlNUKERFVkZMQUdTKQotCi0jCi0jIGhhY2tzIGZvciBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5Ci0jCi0jIDEpIG1ha2Ugc3VyZSBidWlsZCBpbmNsdWRlIHBhdGhzIGFyZSBiZWZvcmUgc291cmNlCi0jIDIpIGNoZWNrIGZvciBHTlUgbWFrZSB0byB1c2UgdnBhdGggaW5zdGVhZCBvZiBWUEFUSAotIwotTk9OX0dOVV9WUEFUSD0iVlBBVEggPSIKLUdOVV92cGF0aD0iI3ZwYXRoIgotIwotIyBkZWZpbmUgaW5jbHVkZSBwYXRocyByZWxhdGl2ZSB0byB0b3Bfc3JjZGlyCi0jIHR3ZWFrIGluY2x1ZGVzIGlmIHdlJ3JlIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXIKLWlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiI7IHRoZW4KLVRPUF9JTkNMVURFUz1TUkNfVE9QX0lOQ0xVREVTCi1TTk1QTElCX0lOQ0xVREVTPVNSQ19TTk1QTElCX0lOQ0xVREVTCi1BR0VOVF9JTkNMVURFUz1TUkNfQUdFTlRfSU5DTFVERVMKLUhFTFBFUl9JTkNMVURFUz1TUkNfSEVMUEVSX0lOQ0xVREVTCi1NSUJHUk9VUF9JTkNMVURFUz1TUkNfTUlCR1JPVVBfSU5DTFVERVMKLWVsc2UKLVRPUF9JTkNMVURFUz1CTERfVE9QX0lOQ0xVREVTCi1TTk1QTElCX0lOQ0xVREVTPUJMRF9TTk1QTElCX0lOQ0xVREVTCi1BR0VOVF9JTkNMVURFUz1CTERfQUdFTlRfSU5DTFVERVMKLUhFTFBFUl9JTkNMVURFUz1CTERfSEVMUEVSX0lOQ0xVREVTCi1NSUJHUk9VUF9JTkNMVURFUz1CTERfTUlCR1JPVVBfSU5DTFVERVMKLW1ha2UgLXYgLWYgL2Rldi9udWxsIDI+L2Rldi9udWxsIHwgZ3JlcCBHTlUgPi9kZXYvbnVsbAotaGF2ZV9nbnVfbWFrZT0kPwotaWYgdGVzdCAkaGF2ZV9nbnVfbWFrZSAtZXEgMCA7IHRoZW4KLSAgICBOT05fR05VX1ZQQVRIPSIjVlBBVEggPSIKLSAgICBHTlVfdnBhdGg9InZwYXRoIgotZmkKLWZpCi1BQ19TVUJTVChUT1BfSU5DTFVERVMpCi1BQ19TVUJTVChTTk1QTElCX0lOQ0xVREVTKQotQUNfU1VCU1QoQUdFTlRfSU5DTFVERVMpCi1BQ19TVUJTVChIRUxQRVJfSU5DTFVERVMpCi1BQ19TVUJTVChNSUJHUk9VUF9JTkNMVURFUykKLUFDX1NVQlNUKEdOVV92cGF0aCkKLUFDX1NVQlNUKE5PTl9HTlVfVlBBVEgpCi0KLQotIwotIyBDaGVjayB3aGV0aGVyIHdlIGNhbiB1c2UgLVV4IC1EeD14IHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW91cgotIwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZyldKQotT0xEX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi1DUFBGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgotCi1BQ19FR1JFUF9DUFAoeWVzLFtbCi0jaWZkZWYgJFBBUlRJQUxUQVJHRVRPUwoteWVzCi0jZW5kaWYKLV1dLAotW1BBUlRJQUxUQVJHRVRGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgotIEFDX01TR19SRVNVTFQoW3llc10pXSwKLVtQQVJUSUFMVEFSR0VURkxBR1M9Ii1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgotIEFDX01TR19SRVNVTFQoW25vXSldKQotQ0ZMQUdTPSIkQ0ZMQUdTICRQQVJUSUFMVEFSR0VURkxBR1MiCi1DUFBGTEFHUz0iJE9MRF9DUFBGTEFHUyIKLUFDX01TR19DQUNIRV9BREQoQnVpbGRpbmcgZm9yOiAgICAgICAgICAgICAgICRQQVJUSUFMVEFSR0VUT1MpCi0KLQotIwotIyBjaGVjayBmb3Igc3BlY2lhbCBpbmNsdWRlcyBhbmQgcGljayBvbmUKLSMKLQotQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZV0pCi1jaGFuZ2VxdW90ZSgsICkKLWZpbGViYXNlPSR0YXJnZXRfb3MKLSMgaWdub3JlIGJpbmFyeSBmb3JtYXQgaW5kaWNhdGlvbgotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2VsZi8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9hb3V0Ly8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2Vjb2ZmLy8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2NvZmYvLydgCi13aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgKLWRvCi0gICAgbGFzdD0kZmlsZWJhc2UKLSAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKLSAgICBpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCi0JZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1swLTldKiQvLydgCi0gICAgZmkKLWRvbmUKLQotaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgotICAgIGZpbGViYXNlPSJnZW5lcmljIgotZmkKLWFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oIgotCi1jaGFuZ2VxdW90ZShbLCBdKQotQUNfTVNHX1JFU1VMVCgkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFKQotQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSwgIiRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiKQotCi0jIHNlY29uZCBwYXJ0LCB0aGUgQ1BVIHR5cGUuCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGVdKQotY2hhbmdlcXVvdGUoLCApCi1maWxlYmFzZT0kdGFyZ2V0X2NwdQotd2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaAotZG8KLSAgICBsYXN0PSRmaWxlYmFzZQotICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bLS5fXVteLS5fXSokLy8nYAotZG9uZQotCi1pZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCi0gICAgZmlsZWJhc2U9ImdlbmVyaWMiCi1maQotYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaCIKLWNoYW5nZXF1b3RlKFssIF0pCi1BQ19NU0dfUkVTVUxUKFskYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRV0pCi0KLUFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFLCAiJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiKQotCi1BQ19QQVRIX1BST0coW0NDUEFUSF0sJENDKQotIyB3YXRjaCBvdXQgZm9yIC91c3IvdWNiL2NjIG9uIHNvbGFyaXMsIGl0IGRvZXNuJ3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIGJzZGkqKQotCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiIC1vICJ4JENDUEFUSCIgPSAieC91c3IvYmluL2NjIjsgdGhlbgotCSAgICBBQ19NU0dfRVJST1IoWwotCi0qKiogVGhlIEJTREkgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4gIAotKioqIFBsZWFzZSBydW4gY29uZmlndXJlIHdpdGggLS13aXRoLWNjPWdjYwotXSkKLQlmaQotICAgIDs7Ci0gICAgc29sYXJpcyopCi0JaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyI7IHRoZW4KLQkgICAgQUNfTVNHX0VSUk9SKFsKLQotKioqIFRoZSBzb2xhcmlzIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuICAKLSoqKiBQbGVhc2UgcHV0IGEgZGlmZmVyZW50IGNvbXBpbGVyIGluIHlvdXIgcGF0aCBmaXJzdCBvciBydW4KLSoqKiBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9WFgsIHdoZXJlIFhYIGlzIHRoZSBjb21waWxlciB5b3Ugd2FudCB0byB1c2UuCi1dKQotCWZpCi0gICAgOzsKLWVzYWMKLSAgICAKLUFDX01TR19DSEVDS0lORyhbZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzXSkKLSMgZ2NjIGV4dHJhIENQUEZMQUdTCi1pZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkQ1BQIiA9ICJ4JENDIC1FIjsgdGhlbgotICAjIGV4dHJhIGNwcCBmbGFncyBmb3IgZ251IGMgY29tcGlsZXIgdG8gYWxsb3cgLmluIGZpbGUgZXh0ZW5zaW9ucy4KLSAgRVhUUkFDUFBGTEFHUz0iLXggYyIKLWVsc2UKLSAgRVhUUkFDUFBGTEFHUz0iIgotZmkKLQotIyBTb2xhcmlzIGV4dHJhIGNwcCBmbGFncy4KLWlmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KLSAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgc29sYXJpcyopIEVYVFJBQ1BQRkxBR1M9IiRFWFRSQUNQUEZMQUdTIC1YcyIgOzsKLSAgZXNhYwotZmkKLQotQUNfU1VCU1QoRVhUUkFDUFBGTEFHUykKLUFDX01TR19SRVNVTFQoJEVYVFJBQ1BQRkxBR1MpCi0KLSMgICBDb21waWxlciBmbGFnczoKLSMKLQotIyBUaGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaXMgbm90IHN0cmljdC1hbGlhc2luZyBzYWZlLCBzbyBhZGQKLSMgLWZuby1zdHJpY3QtYWxpYXNpbmcgdG8gJENGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQuCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nXSkKLW5ldHNubXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9Ii1mbm8tc3RyaWN0LWFsaWFzaW5nICRDRkxBR1MiCi1BQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLCBbQUNfTVNHX1JFU1VMVChbeWVzXSldLCBbCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLSAgQ0ZMQUdTPSIkbmV0c25tcF9zYXZlX0NGTEFHUyIKLV0pCi0KLSMgUHJlZml4ZXMgbXVzdCBiZWdpbiB3aXRoICIvIiBvciBbQS1aXSBmb2xsb3dlZCBieSBjb2xvbi4KLQotaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgotICBwcmVmaXg9L3Vzci9sb2NhbAotZmkKLQotZmNoPWBlY2hvICRwcmVmaXggfCBzZWQgJ3MvXCguXCkuKi9cMS8nYAotaWYgdGVzdCAieCRmY2giICE9ICJ4LyIgOyB0aGVuCi0gICBzY2g9YGVjaG8gJHByZWZpeCB8IHNlZCAncy8uXCguXCkuKi9cMS8nYAotICAgaWYgdGVzdCAieCRzY2giICE9ICJ4OiIgOyB0aGVuCi0gICAgICBwcmVmaXg9YHB3ZGAvJHByZWZpeAotICAgICAgZWNobyAiYWRqdXN0aW5nIHByZWZpeCB0byAkcHJlZml4IgotICAgZmkKLWZpCi0KLWlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICBleGVjX3ByZWZpeD0kcHJlZml4Ci1maQotCi1mY2g9YGVjaG8gJGV4ZWNfcHJlZml4IHwgc2VkICdzL1woLlwpLiovXDEvJ2AKLWlmIHRlc3QgIngkZmNoIiAhPSAieC8iIDsgdGhlbgotICAgc2NoPWBlY2hvICRleGVjX3ByZWZpeCB8IHNlZCAncy8uXCguXCkuKi9cMS8nYAotICAgaWYgdGVzdCAieCRzY2giICE9ICJ4OiIgOyB0aGVuCi0gICAgICBleGVjX3ByZWZpeD1gcHdkYC8kZXhlY19wcmVmaXgKLSAgICAgIGVjaG8gImFkanVzdGluZyBleGVjX3ByZWZpeCB0byAkZXhlY19wcmVmaXgiCi0gICBmaQotZmkKLQotIyBTZXQgU05NUExJQlBBVEggJiBTTk1QU0hBUkVQQVRICi0KLVNOTVBMSUJQQVRIPSIiCi10bXBzZXQ9IiRsaWJkaXIvc25tcCIKLXdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QTElCUEFUSCI7IGRvCi0gIFNOTVBMSUJQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKLWRvbmUKLUFDX0RFRklORV9VTlFVT1RFRChTTk1QTElCUEFUSCwiJFNOTVBMSUJQQVRIIikKLUFDX1NVQlNUKFNOTVBMSUJQQVRIKQotQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBETE1PRFBBVEgsIiRTTk1QTElCUEFUSC9kbG1vZCIpCi0KLVNOTVBTSEFSRVBBVEg9IiIKLXRtcHNldD0iJGRhdGFkaXIvc25tcCIKLXdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QU0hBUkVQQVRIIjsgZG8KLSAgU05NUFNIQVJFUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCi1kb25lCi1BQ19ERUZJTkVfVU5RVU9URUQoU05NUFNIQVJFUEFUSCwiJFNOTVBTSEFSRVBBVEgiKQotQUNfU1VCU1QoU05NUFNIQVJFUEFUSCkKLQotaWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgPSAieCI7IHRoZW4KLSAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IlwkSE9NRS8uc25tcC9taWJzOiRTTk1QU0hBUkVQQVRIL21pYnMiCi0gIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiB8ICRTRUQgJ3MvOi87L2cnYAotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIpCi1maQotQUNfU1VCU1QoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMpCi0KLVNOTVBDT05GUEFUSD0iIgotdG1wc2V0PSIkc3lzY29uZmRpci9zbm1wIgotd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBDT05GUEFUSCI7IGRvCi0gIFNOTVBDT05GUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCi1kb25lCi1BQ19ERUZJTkVfVU5RVU9URUQoU05NUENPTkZQQVRILCIkU05NUENPTkZQQVRIIikKLUFDX1NVQlNUKFNOTVBDT05GUEFUSCkKLQotQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQotQUNfQ0hFQ0tfU0laRU9GKGludCkKLUFDX0NIRUNLX1NJWkVPRihsb25nKQotQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKLUFDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKLUFDX0NIRUNLX1RZUEVTKFtpbnQ4X3QsICB1aW50OF90LCAgdV9pbnQ4X3RdKQotQUNfQ0hFQ0tfVFlQRVMoW2ludDE2X3QsIHVpbnQxNl90LCB1X2ludDE2X3RdKQotQUNfQ0hFQ0tfVFlQRVMoW2ludDMyX3QsIHVpbnQzMl90LCB1X2ludDMyX3RdKQotQUNfQ0hFQ0tfVFlQRVMoW2ludDY0X3QsIHVpbnQ2NF90LCB1X2ludDY0X3RdKQotQUNfQ0hFQ0tfVFlQRVMoW2ludG1heF90LCB1aW50bWF4X3RdKQotQUNfQ0hFQ0tfVFlQRVMoW29mZjY0X3RdKQotQUNfQ0hFQ0tfVFlQRVMoW3VpbnRwdHJfdCwgaW50cHRyX3RdKQotCi0jIHNvbGFyaXMgc3BlY2lmaWMgdHlwZQotQUNfQ0hFQ0tfVFlQRVMoW0NvdW50ZXI2NF0sLCxbI2luY2x1ZGUgPGluZXQvbWliMi5oPl0pCi0KLSMgZ3Vlc3MgSVB2NiBzdGFjayB0eXBlLgotaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLQl2NnR5cGU9dW5rbm93bgotCXY2bGliPW5vbmUKLQl2NnRyeWxpYmM9bm8KLQotCUFDX01TR19DSEVDS0lORyhbW2lwdjYgc3RhY2sgdHlwZV1dKQotCWZvciBpIGluIHY2ZCB0b3NoaWJhIGthbWUgaW5yaWEgemV0YSBsaW51eC1nbGliYyBsaW51eC1pbmV0NiBnZW5lcmljOyBkbwotCQljYXNlICRpIGluCi0JCXY2ZCkKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDwvdXNyL2xvY2FsL3Y2L2luY2x1ZGUvc3lzL3R5cGVzLmg+Ci0jaWZkZWYgX19WNkRfXwoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7IHY2bGliPXY2OwotCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCUNGTEFHUz0iLUkvdXNyL2xvY2FsL3Y2L2luY2x1ZGUgJENGTEFHUyJdKQotCQkJOzsKLQkJdG9zaGliYSkKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpZmRlZiBfVE9TSElCQV9JTkVUNgoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwotCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKLQkJCTs7Ci0JCWthbWUpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2lmZGVmIF9fS0FNRV9fCi15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7Ci0JCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCi0JCQk7OwotCQlpbnJpYSkKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaWZkZWYgSVBWNl9JTlJJQV9WRVJTSU9OCi15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsKLQkJCQl2NmxpYj1kdW1teTsKLQkJCQl2NmxpYmRpcj1ub25lOwotCQkJCXY2dHJ5bGliYz15ZXM7Ci0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQotCQkJOzsKLQkJemV0YSkKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpZmRlZiBfWkVUQV9NSU5BTUlfSU5FVDYKLUEKLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKLQkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCi0JCQk7OwotCQlsaW51eC1nbGliYykKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ18gPiAyKSkKLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOwotCQkJCXY2bGliPWR1bW15OwotCQkJCXY2bGliZGlyPW5vbmU7Ci0JCQkJdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCi0JCQk7OwotCQlsaW51eC1pbmV0NikKLQkJCWlmIHRlc3QgLWQgL3Vzci9pbmV0NjsgdGhlbgotCQkJCXY2dHlwZT0kaQotCQkJCXY2bGliPWluZXQ2Ci0JCQkJdjZsaWJkaXI9L3Vzci9pbmV0Ni9saWIKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgotCQkJZmkKLQkJCTs7Ci0JCWdlbmVyaWMpCi0gICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtbcG9zdHBvbmVkXV0pCi0JCQlBQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotXSwgc29ja2FkZHJfaW42LCBzaW42X2FkZHIsIG5vKQotCSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW1tpcHY2IHN0YWNrIHR5cGVdXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNl9oYXNfc2luNl9hZGRyIiA9ICJ4eWVzIjsgdGhlbgotCQkJCXY2dHlwZT0kaQotCQkJCXY2bGliPWR1bW15Ci0JCQkJdjZsaWJkaXI9bm9uZQotCQkJCXY2dHJ5bGliYz15ZXMKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLQkJCTs7Ci0JCWVzYWMKLQkJaWYgdGVzdCAiJHY2dHlwZSIgIT0gInVua25vd24iOyB0aGVuCi0JCQlicmVhawotCQlmaQotCWRvbmUKLQotCWlmIHRlc3QgIiR2NmxpYiIgIT0gIm5vbmUiOyB0aGVuCi0JCWlmIHRlc3QgLWQgJHY2bGliZGlyIC1hIC1mICR2NmxpYmRpci9saWIkdjZsaWIuYTsgdGhlbgotCQkJTElCUz0iLUwkdjZsaWJkaXIgLWwkdjZsaWIgJExJQlMiCi0JCQllbmFibGVfaXB2Nj0ieWVzIgotCQkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliIl0pCi0JCWVsaWYgdGVzdCAiJHY2dHJ5bGliYyIgPSAieWVzIjsgdGhlbgotCQkJZW5hYmxlX2lwdjY9InllcyIKLQkJCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmMiXSkKLQkJZWxzZQotCQkJQUNfTVNHX0VSUk9SKG5vIElQdjYgbGlicmFyeSBsaWIkdjZsaWIuYSBmb3VuZC4pCi0JCQlleGl0IDEKLQkJZmkKLQllbHNlCi0JCWVuYWJsZV9pcHY2PSJubyIKLQkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiJdKQotCWZpCi1maQotCi0jCi0jIE1heWJlIGFkZCBsaWJyYXJ5IGV4dGVuc2lvbnMgZm9yIHRocmVhZCBtdXRleCBsb2NraW5nLgotIwotCi1pZiB0ZXN0ICJ4JHdpdGhfcmVzX2xvY2tzIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9SRUVOVFJBTlQpCi0KLSAgICBjYXNlICR0YXJnZXRfb3MgaW4KLQotICAgIGFpeCopCi0JQ0NfUlVOVElNRV9BUkc9IiRDQ19SVU5USU1FX0FSRyAtbHB0aHJlYWRzIgotCTs7Ci0KLSAgICAqKQotCTs7Ci0KLSAgICBlc2FjCi1maQotCi0jCi0jIEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UgZmlsZXMuCi0jCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2VdKQotb3RoZXJfc3JjX2xpc3Q9IiIKLW90aGVyX29ianNfbGlzdD0iIgotb3RoZXJfbG9ianNfbGlzdD0iIgotb3RoZXJfYWdlbnRvYmpzPSIiCi1vdGhlcl9sYWdlbnRvYmpzPSIiCi1vdGhlcl90cmFwZF9vYmplY3RzPSIiCi0KLSMgV2luMzIgc2VydmljZSBjb2RlCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnNlcnZpY2UuYyB3aW5zZXJ2aWNlcmMucmMiCi0gIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5zZXJ2aWNlLm8gd2luc2VydmljZXJjLm8iCi0gIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnNlcnZpY2UubG8gd2luc2VydmljZXJjLmxvIgotICBvdGhlcl9hZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iCi0gIG90aGVyX2xhZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLmxvIgotICBvdGhlcl90cmFwZF9vYmplY3RzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIiAKLWZpCi0gIAotIyBXaW4zMiBwaXBlcwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnBpcGUuYyIKLSAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnBpcGUubyIKLSAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2lucGlwZS5sbyIKLWZpCi0KLUFDX1NVQlNUKG90aGVyX3NyY19saXN0KQotQUNfU1VCU1Qob3RoZXJfb2Jqc19saXN0KQotQUNfU1VCU1Qob3RoZXJfbG9ianNfbGlzdCkKLUFDX1NVQlNUKG90aGVyX2FnZW50b2JqcykKLUFDX1NVQlNUKG90aGVyX2xhZ2VudG9ianMpCi1BQ19TVUJTVChvdGhlcl90cmFwZF9vYmplY3RzKQotCi1BQ19NU0dfUkVTVUxUKFskb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdF0pCi1BQ19NU0dfUkVTVUxUKFskb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzXSkKLSAgCi0jCi0jIERvIHRyYW5zcG9ydCBtb2R1bGUgcHJvY2Vzc2luZy4KLSMKLUFDX01TR19DSEVDS0lORyhbZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2VdKQotdHJhbnNwb3J0X3NyY19saXN0PSIiCi10cmFuc3BvcnRfaGRyX2xpc3Q9IiIKLXRyYW5zcG9ydF9kZWZfbGlzdD0iIgotdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIiCi10cmFuc3BvcnRfYWRkX2xpc3Q9IiIKLXRyYW5zcG9ydF9jYWxsYmFja19kaXNhYmxlZD0iIgotbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfdHJhbnNwb3J0cyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX291dF90cmFuc3BvcnRzIHwgc2VkICdzLywvIC9nOydgCi0KLSMKLSMgQWRkIHRoZSBkZWZhdWx0IHRyYW5zcG9ydHMgdG8gdGhlIGxpc3QKLSMKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIENhbGxiYWNrIgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbiAKLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBDYWxsYmFjayIKLWVsc2UKLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBVbml4IENhbGxiYWNrIgotZmkKLWlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUElQdjYgVENQSVB2NiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdCIKLWZpCi1mb3IgaSBpbiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCAiIHwgZ3JlcCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgotICAgIDoKLSAgZWxzZQotICAgIHRyYW5zcG9ydF9hZGRfbGlzdD0iJGkgJHRyYW5zcG9ydF9hZGRfbGlzdCIKLSAgZmkKLWRvbmUKLW5ld190cmFuc3BvcnRfbGlzdD0iJHRyYW5zcG9ydF9hZGRfbGlzdCAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QiCi0KLWZvciBpIGluICRuZXdfdHJhbnNwb3J0X2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0ICIgfCBncmVwICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQIjsgdGhlbgotICAgICAgZWNobwotICAgICAgQUNfTVNHX0VSUk9SKEl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGhvdXQgVURQL0lQIHN1cHBvcnQuKQotICAgIGVsaWYgdGVzdCAieCRpIiA9ICJ4Q2FsbGJhY2siOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICB0cmFuc3BvcnRfY2FsbGJhY2tfZGlzYWJsZWQ9InllcyIKLSAgICBmaQotICBlbHNlCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4QUFMNVBWQyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiAhPSAieGxpbnV4IjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIEFDX01TR19FUlJPUihBQUw1IFBWQyBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhJUFgiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgIT0gInhsaW51eCI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICBBQ19NU0dfRVJST1IoSVBYIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpKQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkaSIgPSAieFVuaXgiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICBBQ19NU0dfRVJST1IoVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSkKLSAgICAgIGVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICBBQ19NU0dfRVJST1IoVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUElQdjYiIC1vICJ4JGkiID0gInhUQ1BJUHY2IjsgdGhlbgotICAgICAgICAgICAgZWNobwotICAgICAgICAgICAgQUNfTVNHX0VSUk9SKElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCkKLSAgICAgICAgZmkKLSAgICBmaQotICAgIHRyYW5zcG9ydF9zcmM9InNubXAiJGkiRG9tYWluLmMiCi0gICAgdHJhbnNwb3J0X2hkcj0ic25tcCIkaSJEb21haW4uaCIKLSAgICByZWxfdHJhbnNwb3J0X3NyYz0ic25tcGxpYi8iJHRyYW5zcG9ydF9zcmMKLSAgICByZWxfdHJhbnNwb3J0X2hkcj0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkdHJhbnNwb3J0X2hkcgotICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIjsgdGhlbgotICAgICAgdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICRpIgotICAgICAgdHJhbnNwb3J0X3NyY19saXN0PSIkdHJhbnNwb3J0X3NyYyAkdHJhbnNwb3J0X3NyY19saXN0IgotICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9oZHIiOyB0aGVuCi0gICAgICAgIHRyYW5zcG9ydF9oZHJfbGlzdD0iJHRyYW5zcG9ydF9oZHIgJHRyYW5zcG9ydF9oZHJfbGlzdCIKLSAgICAgIGZpCi0gICAgICB0cmFuc3BvcnRfZGVmPWBlY2hvICRpIHwgc2VkICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCi0gICAgICB0cmFuc3BvcnRfZGVmX2xpc3Q9Ik5FVFNOTVBfVFJBTlNQT1JUXyIkdHJhbnNwb3J0X2RlZiJfRE9NQUlOICR0cmFuc3BvcnRfZGVmX2xpc3QiCi0gICAgZWxzZQotICAgICAgZWNobwotICAgICAgQUNfTVNHX0VSUk9SKENhbm5vdCBmaW5kIGZpbGUgJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgdG8gc3VwcG9ydCBTTk1QIHRyYW5zcG9ydCBkb21haW4gJGkuKQotICAgIGZpCi0gIGZpCi1kb25lCi10cmFuc3BvcnRfb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCBzZWQgJ3MvXC5jL1wuby9nJ2AgCSAKLXRyYW5zcG9ydF9sb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCBzZWQgJ3MvXC5jL1wubG8vZydgCi0KLSMjIHdpbjMyIHBsYXRmb3JtcyByZXF1aXJlIGluZXRfbnRvcCBldGMuCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICBpZiBlY2hvICIkdHJhbnNwb3J0X2RlZl9saXN0IiB8IGdyZXAgIklQVjYiID4vZGV2L251bGw7IHRoZW4KLSAgICB0cmFuc3BvcnRfb2JqX2xpc3Q9IiR0cmFuc3BvcnRfb2JqX2xpc3QgaW5ldF9udG9wLm8gaW5ldF9wdG9uLm8iCi0gICAgdHJhbnNwb3J0X2xvYmpfbGlzdD0iJHRyYW5zcG9ydF9sb2JqX2xpc3QgaW5ldF9udG9wLmxvIGluZXRfcHRvbi5sbyIKLSAgZmkKLWZpCi0KLUFDX1NVQlNUKHRyYW5zcG9ydF9oZHJfbGlzdCkKLUFDX1NVQlNUKHRyYW5zcG9ydF9zcmNfbGlzdCkKLUFDX1NVQlNUKHRyYW5zcG9ydF9vYmpfbGlzdCkKLUFDX1NVQlNUKHRyYW5zcG9ydF9sb2JqX2xpc3QpCi1mb3IgaSBpbiAkdHJhbnNwb3J0X2RlZl9saXN0OyBkbwotICBBQ19ERUZJTkVfVU5RVU9URUQoJGkpCi1kb25lCi1BQ19NU0dfUkVTVUxUKCR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuKQotQUNfTVNHX0NBQ0hFX0FERChOZXR3b3JrIHRyYW5zcG9ydCBzdXBwb3J0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0KQotCi0jCi0jIFNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlCi0jIAotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZV0pCi1zZWN1cml0eV9kZWZfbGlzdD0idXNtIgotc2VjdXJpdHlfc3JjX2xpc3Q9IiIKLXNlY3VyaXR5X29ial9saXN0PSIiIAkgCi1zZWN1cml0eV9sb2JqX2xpc3Q9IiIKLXNlY3VyaXR5X2luaXRfZmlsZT0ic25tcGxpYi9zbm1wc21faW5pdC5oIgotc2VjdXJpdHlfaW5jbF9maWxlPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgiCi1uZXdfd2l0aF9zZWN1cml0eT1gZWNobyAkd2l0aF9zZWN1cml0eV9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfc2VjdXJpdHk9YGVjaG8gJHdpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLQotaWYgdGVzdCAhIC1kIGluY2x1ZGU7IHRoZW4KLSAgbWtkaXIgaW5jbHVkZQotZmkKLWlmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wOyB0aGVuCi0gIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAKLWZpCi1pZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcC9hZ2VudDsgdGhlbgotICBta2RpciBpbmNsdWRlL25ldC1zbm1wL2FnZW50Ci1maQotaWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeTsgdGhlbgotICBta2RpciBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkKLWZpCi1pZiB0ZXN0ICEgLWQgaW5jbHVkZS91Y2Qtc25tcDsgdGhlbgotICBta2RpciBpbmNsdWRlL3VjZC1zbm1wCi1maQotCi1pZiB0ZXN0ICEgLWQgc25tcGxpYjsgdGhlbgotICBta2RpciBzbm1wbGliCi1maQotZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luaXRfZmlsZQotZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luY2xfZmlsZQotCi1mb3IgaSBpbiAkc2VjdXJpdHlfZGVmX2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGlmIHRlc3QgIngkaSIgPSAieHVzbSI7IHRoZW4KLQllY2hvCi0gICAgICAgIEFDX01TR19FUlJPUihUaGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBtYW5kYXRvcnkpCi0gICAgZmkKLSAgZWxzZQotICAgIG5ld193aXRoX3NlY3VyaXR5PSIkbmV3X3dpdGhfc2VjdXJpdHkgJGkiCi0gIGZpCi1kb25lCi0KLWZvciBpIGluICRuZXdfd2l0aF9zZWN1cml0eTsgZG8KLSAgY2ZpbGU9InNubXAiJGkiLmMiCi0gIGhmaWxlPSJzbm1wIiRpIi5oIgotCi0gICMgbWFrZSBzdXJlIHN1cHBvcnQgZXhpc3RzIGZvciBpdAotICBpZiB0ZXN0IC1mICRzcmNkaXIiL3NubXBsaWIvIiRjZmlsZSAtYSAtZiAkc3JjZGlyIi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiRoZmlsZTsgdGhlbgotICAgIDoKLSAgZWxzZQotICAgIGVjaG8KLSAgICBBQ19NU0dfRVJST1IoTm8gc3VjaCBzZWN1cml0eSBtb2R1bGU6ICRpIC8gJGNmaWxlIC8gJGhmaWxlKQotICBmaQotCi0gICMgZGVmaW5lIGEgYnVuY2ggb2Ygc3R1ZmYgdG8gZW5hYmxlIGl0Ci0gIHNlY3VyaXR5X3NyY19saXN0PSIkc2VjdXJpdHlfc3JjX2xpc3QgJGNmaWxlIgotICBzZWN1cml0eV9oZHJfbGlzdD0iJHNlY3VyaXR5X2hkcl9saXN0ICRoZmlsZSIKLSAgc2VjdXJpdHlfb2JqX2xpc3Q9IiRzZWN1cml0eV9vYmpfbGlzdCBzbm1wIiRpIi5vIiAJIAotICBzZWN1cml0eV9sb2JqX2xpc3Q9IiRzZWN1cml0eV9sb2JqX2xpc3Qgc25tcCIkaSIubG8iCi0gIGRlZl9uYW1lPSJORVRTTk1QX1NFQ01PRF8iYGVjaG8gJGkgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgCi0gIGVjaG8gImluaXRfIiRpIigpOyIgPj4gJHNlY3VyaXR5X2luaXRfZmlsZQotICBlY2hvICIjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS8kaGZpbGU+IiA+PiAkc2VjdXJpdHlfaW5jbF9maWxlCi0gIEFDX0RFRklORV9VTlFVT1RFRCgkZGVmX25hbWUpCi1kb25lCi0KLUFDX1NVQlNUKHNlY3VyaXR5X3NyY19saXN0KQotQUNfU1VCU1Qoc2VjdXJpdHlfaGRyX2xpc3QpCi1BQ19TVUJTVChzZWN1cml0eV9vYmpfbGlzdCkgCSAKLUFDX1NVQlNUKHNlY3VyaXR5X2xvYmpfbGlzdCkKLUFDX01TR19SRVNVTFQoJG5ld193aXRoX3NlY3VyaXR5KQotQUNfTVNHX0NBQ0hFX0FERChTTk1QdjMgU2VjdXJpdHkgTW9kdWxlczogICAgJG5ld193aXRoX3NlY3VyaXR5KQotCi0jCi0jIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIEtTTSB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBzdXBwb3J0Ci0jCi0KLWFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD1ubwotcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0KLWFscmVhZHlfY2hlY2tlZF9rcmI1PW5vCi0KLWZvciBzZWMgaW4gJG5ld193aXRoX3NlY3VyaXR5Ci1kbwotICBpZiB0ZXN0ICJ4JHNlYyIgPSAieGtzbSIgLWEgInh5ZXMiID0gIngkYWxyZWFkeV9jaGVja2VkX2tyYjUiOyB0aGVuCi0gICAgY29udGludWUKLSAgZmkKLSAgYWxyZWFkeV9jaGVja2VkX2tyYjU9eWVzCi0KLSAgaWYgdGVzdCB4JHNlYyAhPSB4a3NtOyB0aGVuCi0gICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkgJHNlYyIKLSAgZWxzZQotICAgIGlmIHRlc3Qgbm8gPSAkdHJ5a3JiNTsgdGhlbgotICAgICAgQUNfTVNHX05PVElDRShbY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc21dKQotICAgICAgY29udGludWUKLSAgICBmaQotCi0gICAgQUNfUEFUSF9QUk9HKFtrcmI1X2NvbmZpZ10sa3JiNS1jb25maWcsW25vXSwka3JiNXBhdGgvYmluOiRQQVRIKQotCi0gICAgaWYgdGVzdCBubyAhPSAka3JiNV9jb25maWc7IHRoZW4KLSAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgYCRrcmI1X2NvbmZpZyAtLWNmbGFnc2AiCi0gICAgICBMSUJTPSIkTElCUyBgJGtyYjVfY29uZmlnIC0tbGlic2AiCi0gICAgZWxpZiB0ZXN0ICRrcmI1cGF0aCAhPSBubzsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCRrcmI1cGF0aCkKLSAgICBlbHNlCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoL3Vzci9rZXJiZXJvcykKLSAgICBmaQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Iga3JiNV0pCi0gICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfa3JiNSwKLSAgICAgIEFDX0NIRUNLX0xJQihrcmI1LCBrcmI1X2luaXRfY29udGV4dCwKLQlhY19jdl9oYXZlX2tyYjU9eWVzLCBhY19jdl9oYXZlX2tyYjU9bm8KLSAgICAgICkKLSAgICApCi0KLSAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2tyYjUgPSBubzsgdGhlbgotICAgICAgaWYgdGVzdCAieCRhc2tlZGtyYjUiID0gInh5ZXMiOyB0aGVuCi0JQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBrcmI1IGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQotICAgICAgZmkKLSAgICAgIEFDX01TR19SRVNVTFQobm8uIGRpc2FibGluZyBrc20pCi0gICAgICBjb250aW51ZQotICAgIGZpCi0gICAgICAKLSAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSBrc20iCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgaGVpbWRhbF1dKQotICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9oZWltZGFsLAotICAgIFtBQ19UUllfQ09NUElMRSgKLSAgICAgIFsjaW5jbHVkZSA8a3JiNS5oPl0sCi0gICAgICBbY29uc3QgY2hhciAqdiA9IGhlaW1kYWxfdmVyc2lvbjtdLAotICAgICAgYWNfY3ZfaGVpbWRhbD15ZXMsCi0gICAgICBhY19jdl9oZWltZGFsPW5vCi0gICAgKV0pCi0gICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGVpbWRhbCkKLSAgICBpZiB0ZXN0ICRhY19jdl9oZWltZGFsID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTCkKLSAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KLQlMSUJTPSIkTElCUyAtbGtyYjUgLWxhc24xIC1sY29tX2VyciAtbHJva2VuIgotICAgICAgZmkKLSAgICBlbGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KLQlMSUJTPSIkTElCUyAtbGtyYjUgLWxjb21fZXJyIgotICAgIGZpCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlXSkKLSAgICBBQ19DSEVDS19GVU5DKGtyYjVfY19lbmNyeXB0LFsKLSAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlULAotICAgICAgQUNfQ0hFQ0tfTElCKGs1Y3J5cHRvLCBrcmI1X2luaXRfY29udGV4dCwKLQlhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9eWVzLCBhY19jdl9NSVRfTkVXX0NSWVBUbz1ubwotICAgICAgKQotICAgICkKLQotICAgIGlmIHRlc3QgeWVzID0gJGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVDsgdGhlbgotICAgICAgQUNfTVNHX1JFU1VMVChuZXcgTUlUIGNyeXB0byBBUEkpCi0gICAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUKQotICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgotCUxJQlM9IiRMSUJTIC1sazVjcnlwdG8iCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIEFDX01TR19SRVNVTFQob2xkIE1JVCBjcnlwdG8gQVBJKV0pCi0gICAgZmkKLSAgZmkKLWRvbmUKLQotbmV3X3dpdGhfc2VjdXJpdHk9JHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkKLQotIwotIyBnZW5lcmF0ZSBlbXB0eSBmaWxlcwotIwotIyBDcmVhdGUgaW5jbHVkZSBmaWxlIGxpc3QgZm9yIHNubXBfdmFycy5oIHRvIHVzZS4KLW1pYmRpcj0iYWdlbnQvbWliZ3JvdXAiCi1pZiB0ZXN0ICEgLWQgYWdlbnQ7IHRoZW4KLSAgbWtkaXIgYWdlbnQKLWZpCi1pZiB0ZXN0ICEgLWQgYWdlbnQvbWliZ3JvdXA7IHRoZW4KLSAgbWtkaXIgYWdlbnQvbWliZ3JvdXAKLWZpCi1qPSIkbWliZGlyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaCBcCi0gICAkbWliZGlyL21pYl9tb2R1bGVfaW5pdHMuaCAgICAgJG1pYmRpci9hZ2VudF9tb2R1bGVfaW5pdHMuaCAgICBcCi0gICAkbWliZGlyL21pYl9tb2R1bGVfc2h1dGRvd24uaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfc2h1dGRvd24uaCBcCi0gICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmggICBcCi0gICAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfZG90X2NvbmYuaCIKLQotZm9yIGkgaW4gJGo7IGRvCi0gIHJtIC1mICRpCi0gIGVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRpCi1kb25lCi0KLSMKLSMgRG8gaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcuCi0jCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlXSkKLQotIyBzZXQgdXAgdGhlIENQUCBjb21tYW5kCi1NT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAtSSR7c3JjZGlyfS9pbmNsdWRlIC1JJHtzcmNkaXJ9L2FnZW50L21pYmdyb3VwIgotaWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgotICBNT0RVTEVDUFA9IiRNT0RVTEVDUFAgLURORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMiCi1maQotCi1tb2R1bGVfbGlzdD0iIgotbWliX21vZHVsZV9saXN0PSIiCi1hZ2VudF9tb2R1bGVfbGlzdD0iIgotbmV3X3dpdGhfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfbWliX21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9vdXRfbWliX21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLQotIyBzZXQgdXAgaW5pdGlhbCBtb2R1bGUgbGlzdAotbmV3X21vZHVsZV9saXN0PSIkbmV3X3dpdGhfbWliX21vZHVsZXMgZGVmYXVsdF9tb2R1bGVzIgotCi0jIG1pbm9yIG1vZGlmaWNhdGlvbnMKLWlmIHRlc3QgIngkZW5hYmxlX2FnZW50IiA9ICJ4bm8iOyB0aGVuCi0gICAjIG1pbmltdW0gbWliIG1vZHVsZSBsaXN0IGZvciBzbm1wdHJhcGQKLSAgIG5ld19tb2R1bGVfbGlzdD0ibWliSUkvdmFjbV92YXJzIG1pYklJL3ZhY21fY29uZiB1dGlsaXRpZXMvZXhlY3V0ZSAkbmV3X3dpdGhfbWliX21vZHVsZXMiCi0gICBkZWZhdWx0X21pYnM9U05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQgotICAgZGVmYXVsdF9taWJzX2luc3RhbGw9IiAiCi1lbGlmIHRlc3QgIngkbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KLSAgICMgZGVmaW5lIHRoZSBtaW5pIGFnZW50IGZsYWcgdG8gcmVkdWNlIG91ciBsb2FkIGxpc3QgZnJvbSBkZWZhdWx0X21pYnMuaAotICAgTU9EVUxFQ1BQPSIkTU9EVUxFQ1BQIC1ETkVUU05NUF9NSU5JX0FHRU5UIgotZmkKLQotdGVzdF9tb2R1bGVzPSIkbmV3X21vZHVsZV9saXN0IgotbmV3X21vZHVsZV9saXN0PSIiCi0KLSMgcmVtb3ZlIG1vZHVsZXMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQKLWZvciBpIGluICR0ZXN0X21vZHVsZXMKLSBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGlzIGJvdGggaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkLiIKLSAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBjb25mbGljdF0pCi0gICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgQUNfTVNHX1dBUk4oW3VzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzXSkKLSAgICAgIEFDX01TR19XQVJOKFtmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0XSkKLSAgICAgIEFDX01TR19XQVJOKFt1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXNdKQotICAgICAgQUNfTVNHX1dBUk4oW2ZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXNdKQotICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQotICAgIGVsc2UKLSAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZF0pCi0gICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2cgSXQgaGFzIGJlZW4gZXhjbHVkZWQuXSkKLSAgICBmaQotICBlbHNlCi0gICAgbmV3X21vZHVsZV9saXN0PSIkbmV3X21vZHVsZV9saXN0ICRpIgotICBmaQotZG9uZQotCi1BQ19NU0dfUkVTVUxUKFskbmV3X21vZHVsZV9saXN0Ll0pCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgbG9vcCBvdmVyIG1vZHVsZSBsaXN0Ci0jCi1hbGxfd2FybmluZ3M9IiIKLWlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2RlYnVnIiA9ICJ4eWVzIjsgdGhlbgotICAgbW9kdWxlX2RlYnVnPTEKLWVsc2UKLSAgIG1vZHVsZV9kZWJ1Zz0wCi1maQotZmlyc3RfcGFzcz0xCi1vdXRwdXRfdG89bm9ybWFsCi0KLWlmIHRlc3QgISAtZCBtayA7IHRoZW4KLSAgbWtkaXIgbWsKLWZpCi0KLQotbW9kdWxlX3J1bGVzPW1rL21vZHVsZV9ydWxlcy5tawotZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiAkbW9kdWxlX3J1bGVzCi0KLSMKLSMgbWFrZSBmaWxlIHN1Yi1waWVjZXMKLSMKLWZvciBpIGluIG1vZHVsZV9saXN0X2RlcHMgbWliX21vZHVsZV9saXN0X2RlcHMgYWdlbnRfbW9kdWxlX2xpc3RfZGVwcyA7IGRvCi0gIGV2YWwgIiRpPW1rLyR7aX0ubWsiCi0gIGVjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gbWsvJHtpfS5tawotZG9uZQotCi0jCi0jIHZhcmlhYmxlIHNldHRpbmdzIHN1Yi1waWVjZXMKLSMKLWZvciBpIGluIG1vZHVsZV9saXN0X2NvZGUgbWliX21vZHVsZV9saXN0X2NvZGUgYWdlbnRfbW9kdWxlX2xpc3RfY29kZSBtb2R1bGVfbGlzdCBtaWJfbW9kdWxlX2xpc3QgYWdlbnRfbW9kdWxlX2xpc3QgOyBkbwotICBldmFsICIkaT1tay8ke2l9Lm1rIgotICBlY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+IG1rLyR7aX0ubWsKLSAgZWNobyAiJGk9IFxcIiA+PiBtay8ke2l9Lm1rCi1kb25lCi0KLWVjaG8gJEVDSE9fTiAiZWNobyAiICRFQ0hPX0MgPiBtay9NT0RVTEVfTElTVC5tawotTU9EVUxFX0xJU1Q9bWsvTU9EVUxFX0xJU1QubWsKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHVudGlsIHdlIGhhdmUgYW4gZW1wdHkgbW9kdWxlIGxpc3QuLi4KLSMgICAobW9kdWxlcyBtYXkgYWRkIG5ldyBtb2R1bGVzLCBhbmQgdW50aWwgYWxsIGRlcGVuZGVuY2llcyBhcmUgZG9uZS4uLikKLSMKLXdoaWxlIHRlc3QgIngkbmV3X21vZHVsZV9saXN0IiAhPSAieCI7IGRvCi0gIEFDX01TR19NT0RVTEVfREJHKC1lLCJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQotICBBQ19NU0dfTU9EVUxFX0RCRygibm1sOiAkbmV3X21vZHVsZV9saXN0IikKLQotICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICMgbG9vcCBvdmVyIGFsbCB0aGUgbW9kdWxlcyBpbiB0aGUgY3VycmVudCBsaXN0Ci0gICMKLSAgZm9yIGogaW4gJG5ld19tb2R1bGVfbGlzdAotICAgIGRvCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBmaWd1cmUgb3V0IHdoaWNoIHN1Yi1ibG9ja3MgdG8gYnVpbGQgaW4gcGFydHMKLSAgICBpZiBlY2hvICIkaiIgfCBncmVwICI9IiA7IHRoZW4KLSAgICAgICAjIGJ1aWxkIGEgc2hhcmVkIG9iamVjdCBmaWxlCi0gICAgICAgIyBmb3JtYXQ6IHNvZmlsZW5hbWU9bW9kdWxlMTptb2R1bGUyCi0gICAgICAgIyBYWFg6IGN1cnJlbnRseSBkb2Vzbid0IGRvIHRoaXMKLSAgICAgICBkbF9uYW1lPWBlY2hvICRqIHwgc2VkICdzLz0uKi8vJ2AKLSAgICAgICBkbF9uYW1lcz0iJGRsX25hbWVzICRkbF9uYW1lIgotICAgICAgIGRsX29iamVjdHM9YGVjaG8gJGogfCBzZWQgJ3MvLio9Ly8nYAotICAgICAgIG1vZHVsZV9zdWJsaXN0PWBlY2hvICRkbF9vYmplY3RzIHwgc2VkICdzLzovIC9nJ2AKLSAgICAgICBzYXZlZF9zdWJsaXN0PSIiCi0gICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIiCi0gICAgICAgb3V0cHV0X3RvPXNlcGFyYXRlCi0KLSAgICAgICAjIGNyZWF0ZSBvdXRwdXQgZmlsZXMKLSAgICAgICAjIHRoZXNlIGFjdHVhbGx5IGdldCBudWtlZCBsYXRlcgotICAgICAgIG91dHB1dF9pbml0cz0iYWdlbnQvbWliZ3JvdXAvJHtkbF9uYW1lfS1kbGwuYyIKLSAgICAgICBvdXRwdXRfaGRycz0iYWdlbnQvbWliZ3JvdXAvJHtkbF9uYW1lfS1oZHJzLmgiCi0gICAgZWxzZQotICAgICAgICMgbm90IGEgc3BlY2lhbCB0b2tlbiBpbnZvY2F0aW9uCi0gICAgICAgbW9kdWxlX3N1Ymxpc3Q9JGoKLSAgICAgICBvdXRwdXRfdG89bm9ybWFsCi0gICAgICAgb3V0cHV0X3Q9Ci0gICAgZmkKLQotICAgIHdoaWxlIHRlc3QgIngkbW9kdWxlX3N1Ymxpc3QiICE9ICJ4IiA7IGRvCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBsb29wIG92ZXIgYWxsIHRoZSBtb2R1bGVzIGluIHRoZSBzdWIgbGlzdAotICAgIGZvciBpIGluICRtb2R1bGVfc3VibGlzdAotICAgIGRvCi0KLSAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IikKLSAgICBBQ19NU0dfTU9EVUxFX0RCRygidGVzdGluZyAkaSIpCi0gICAgbmVlZF9oZWFkZXI9MAotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgYnVpbGQgYSBwc2V1ZG8gaW5jbHVkZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBjdXJyZW50IGNvbmZpZyBhbmQKLSAgICAjIHN5c3RlbSBzeW1ib2xzOgotICAgIEFDX0xBTkdfQ09ORlRFU1QoQUNfTEFOR19TT1VSQ0UoW1sKLSNpbmNsdWRlIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQotI2luY2x1ZGUgIiRzcmNkaXIvJG1pYmRpci8kaS5oIl1dKSkKLSAgICBtdiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIG1hY3JvOiBjb25maWdfYmVsb25nc19pbihBUkcpCi0gICAgIyAgIEFSRzogZWl0aGVyCi0gICAgIyAgICAgLSBtaWJfbW9kdWxlICAgPT4gbGlibmV0c25tcG1pYnMgICAoZGVmYXVsdCkKLSAgICAjICAgICAtIGFnZW50X21vZHVsZSA9PiBsaWJuZXRzbm1wYWdlbnQKLSAgICAjCi0gICAgbW9kdWxlX3R5cGU9bWliX21vZHVsZQotICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmg7IHRoZW4KLSAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgbW9kdWxlX3R5cGU9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2JlbG9uZ3NfaW4gfCBzZWQgJ3NALipjb25maWdfYmVsb25nc19pbihcKFteKV0qXCkpLipAXDFAJ2AKLSAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JG1vZHVsZV90eXBlIiA9ICJ4IiA7IHRoZW4KLSAgICAgIG1vZHVsZV90eXBlPW1pYl9tb2R1bGUKLSAgICBmaQotICAgIGlmIHRlc3QgIngkb3V0cHV0X3RvIiA9ICJ4bm9ybWFsIiA7IHRoZW4KLSAgICAgCW91dHB1dF9pbml0cz0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbml0cy5oIgotICAgICAJb3V0cHV0X2hkcnM9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5jbHVkZXMuaCIKLSAgICBmaQotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBjaGVjayBmb3IgZHVwbGljYXRlcyB3aXRoaW4gdGhlIGRsbCBzeXN0ZW0uIAotICAgICMgICAtIGlmIGZvdW5kIGluIGEgZGxsLCB0aGVuIHJlbW92ZSBmcm9tIHRoZSBkbGwgYW5kIGFkZCB0byBtYWluCi0gICAgZGJsZml4PSIiCi0gICAgZm9yIGRsdGVzdCBpbiAkZGxfbmFtZXMgOyBkbwotICAgICAgZXZhbCBtb2RfZmlsZXM9IlwiXCRkbF8ke2RsdGVzdH1fZmlsZXNcIiIKLSAgICAgIGlmIGVjaG8gIiAkbW9kX2ZpbGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIHNvbWUgZGxsIG1vZHVsZSBoYXMgYWxyZWFkeSBzZWVuIHRoaXMsIHVubG9hZCBpdCBmcm9tIHRoYXQgbGlzdAotICAgICAgICAjIGFuZCBpbmNsdWRlIGl0IGluIHRoZSBjb3JlIChhZ2FpbikKLSAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoInJlbW92aW5nICRpIGZyb20gJGRsdGVzdCIpCi0gICAgICAgIG1vZF9maWxlcz1gZWNobyAiICRtb2RfZmlsZXMgIiB8IHNlZCAic0AgJGkgQEAiYAotICAgICAgICBkYmxmaXg9Il9fWFhYX18iCi0gICAgICAgIGV2YWwgImRsXyR7ZGx0ZXN0fV9maWxlcz1cIiRtb2RfZmlsZXNcIiIKLQotICAgICAgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgotCWVjaG8gInJlYWRfY29uZmlnLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbW9kdWxlX2xpc3RfZGVwcwotCWlmIHRlc3QgJG1vZHVsZV90eXBlID0gImFnZW50X21vZHVsZSIgOyB0aGVuCi0gCSAgICBlY2hvICJzbm1wX3ZhcnMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCi0gICAgICAgIGVsc2UKLSAJICAgIGVjaG8gIm1pYl9tb2R1bGVzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbWliX21vZHVsZV9saXN0X2RlcHMKLSAgICAgICAgZmkKLSAgICAgICAgZXZhbCAke21vZHVsZV90eXBlfV9saXN0PSJcIlwkJHttb2R1bGVfdHlwZX1fbGlzdCAkaVwiIgotCWVjaG8gIgkkaSBcXCIgPj4gJG1vZHVsZV9saXN0X2NvZGUKLQllY2hvICRFQ0hPX04gIiAkaSIgJEVDSE9fQyA+PiAkTU9EVUxFX0xJU1QKLSAgICAgICAgZXZhbCB0bXBmaWxldmFyPVwkYGVjaG8gJHttb2R1bGVfdHlwZX1fbGlzdF9jb2RlYAotICAgICAgICBlY2hvICIJJGkgXFwiID4+ICR0bXBmaWxldmFyCi0KLQkjIFhYWDogYWRkIHRoaXMgdG8gdGhlIG1haW4gaW5pdCBsaXN0OyB0aGlzIGlzIHBvc3NpYmxlIG5vdAotCSMgcXVpdGUgaW4gdGhlIHJpZ2h0IHNwb3QgYW55IGxvbmdlciBidXQgd2UncmUgc3R1Y2sgd2l0aCBpdC4KLQkjIEFkZGluZyBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvcmRlcmVkIHNwb3Qgd291bGQgYmUgYQotCSMgbmlnaHRtYXJlLiAgT2ssIHdlJ3JlIGFscmVhZHkgaW4gbmlnaHRtYXJlIGNvZGUgc28gdGhhdAotCSMgd29sdWQgaGF2ZSB0byBiZSBhIG5pZ2h0LXRlcnJvci4KLSAgICAgICAgbW5tPWBlY2hvICRpIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAotCW91dHB1dF9pbml0c190bXA9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5pdHMuaCIKLQllY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0c190bXAKLSAgICAgICAgIyBYWFg6IGV2ZW4gd29yc2UsIHdlIGxvb3NlIHdoZXRoZXIgdGhlIGhlYWRlciBpcyBuZWVkZWQgb3Igbm90LgotICAgICAJb3V0cHV0X2hkcnNfdG1wPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luY2x1ZGVzLmgiCi0gICAgICAgIGVjaG8gJyNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyInID4+ICRvdXRwdXRfaGRyc190bXAKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgbWFrZSBzdXJlIG1vZHVsZSB3YXNuJ3QgZXhwbGljaXRseSBleGNsdWRlZCwgb3IgYWxyZWFkeSBhZGRlZAotICAgICMKLSAgICBpZiB0ZXN0ICJ4JGRibGZpeCIgIT0gIngiIDsgdGhlbgotICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIHdhcyBkdXBsaWNhdGVkIC0tIHB1dHRpbmcgaW50byBtYWluIikKLSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIHdhcyBleGNsdWRlZCIpCi0gICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIGFscmVhZHkgdGVzdGVkIikKLSAgICBlbHNlCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgcHJvY2VzcyBtb2R1bGVzIGhlYWRlciwgY2hlY2tpbmcgZm9yIGNvbmZpZ18gcHNldWRvLW1hY3JvcwotICAgICAgIwotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIGRvZXMgdGhlIGhlYWRlciBmaWxlIGZvciB0aGUgbW9kdWxlIGV4aXN0PwotICAgICAgIyAgIG1hY3JvcyBhcmUgb25seSBwcm9jZXNzZWQgaWYgaXQgZG9lcwotICAgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuaDsgdGhlbgotICAgICAgICBuZXdfbGlzdD0iIgotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfZXhjbHVkZShtb2R1bGVzKQotICAgICAgCSMgIC0gbGlzdHMgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcwotICAgICAgCSMgICAgLSBFRzogbmV3IE1JQiBpbXBsZW1lbnRhdGlvbnMgZXhjbHVkZSBvbGQgYW5kIHZpY2UtdmVyc2EKLSAgICAgIAkjCi0gICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBjb25mbGljdHMKLSAgICAgICAgIwotCW5ld19saXN0X2V4Y2w9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2V4Y2x1ZGUgfCBzZWQgJ3MvLipjb25maWdfZXhjbHVkZShcKC4qXCkpLiovXDEvJ2AKLQlpZiB0ZXN0ICJ4JG5ld19saXN0X2V4Y2wiICE9ICJ4IjsgdGhlbgotICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSBleGNsdWRlcyAkbmV3X2xpc3RfZXhjbCIpCi0JICBmb3IgaiBpbiAkbmV3X2xpc3RfZXhjbAotCSAgICBkbwotCSAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbWliX21vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgZXhjbHVkZXMgbW9kdWxlICckaicgYnV0IGFub3RoZXIgbW9kdWxlIHJlcXVpcmVzIGl0IgotICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0gICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLQkgICAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgZWxzZQotCSAgICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgIG5ld193aXRoX291dF9taWJfbW9kdWxlcz0iJGogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIKLSAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRqIGFkZGVkIHRvIGV4Y2x1ZGVkIGxpc3QiKQotCSAgICBmaQotCSAgZG9uZQotCWZpCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ19hcmNoX3JlcXVpcmUoQVJDSCxtb2R1bGVzKQotICAgICAgCSMgIC0gbGlzdHMgbW9kdWxlcyByZXF1aXJlZCBmb3IgYSBnaXZlbiBBUkNICi0gICAgICAgICMKLSAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZXF1aXJlbWVudHMKLSAgICAgICAgIwotICAgICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgICAgbmV3X2xpc3RfYXJjaD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYXJjaF9yZXF1aXJlIHwgc2VkICdzLy4qY29uZmlnX2FyY2hfcmVxdWlyZSggKlwoW14gXSpcKSAqLCAqXChbXiBdKlwpICopLiovXDEteGFyY2h4LVwyLydgCi0gICAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0JaWYgdGVzdCAieCRuZXdfbGlzdF9hcmNoIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICBmb3IgaiBpbiAkbmV3X2xpc3RfYXJjaAotCSAgICBkbwotCSAgICBhcmNodGVzdD1gZWNobyAkaiB8IHNlZCAncy8teGFyY2h4LS4qLy8nYAotCSAgICAjIHRhcmdldF9vcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYSAjZGVmaW5lIG9mIDEuLi4KLQkgICAgaWYgdGVzdCAieCRhcmNodGVzdCIgPSAieDEiIC1vICJ4JHRhcmdldF9vcyIgPSAieCRhcmNodGVzdCIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4JGFyY2h0ZXN0IjsgdGhlbgotCSAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYGVjaG8gJGogfCBzZWQgJ3MvLioteGFyY2h4LS8vJ2AiCi0gICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgcmVxdWlyZWQgYWRkaW5nIGFyY2ggZmlsZXM6IGBlY2hvICRqIHwgc2VkICdzLy4qLXhhcmNoeC0vLydgIikKLQkgICAgZmkKLQkgIGRvbmUKLQlmaQotICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHJlcXVpcmVkIGFyY2ggZmlsZXM6ICRuZXdfbGlzdCIpCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ19yZXF1aXJlKG1vZHVsZXMpCi0gICAgICAJIyAgLSBsaXN0cyBtb2R1bGVzIHJlcXVpcmVkIGZvciB0aGlzIG1vZHVsZQotICAgICAgICAjCi0gICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBvdGhlciByZXF1aXJlZCBtb2R1bGVzCi0gICAgICAgICMKLQluZXdfbGlzdD0iJG5ld19saXN0IGAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19yZXF1aXJlIHwgc2VkICdzLy4qY29uZmlnX3JlcXVpcmUoXCguKlwpKS4qL1wxLydgIgotICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHdpbGwgdGVzdDogJG5ld19saXN0IikKLQlpZiB0ZXN0ICJ4JG5ld19saXN0IiAhPSAieCI7IHRoZW4KLQkgIGZvciBqIGluICRuZXdfbGlzdAotCSAgICBkbwotICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLW4gIiAkaSB3YW50cyB0byBhZGQgJGo6ICIpCi0JICAgIGlmIHRlc3QgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouaCAtYSAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5jOyB0aGVuCi0gICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLQkgICAgICBBQ19NU0dfRVJST1IoW21pYiBtb2R1bGUgIiRpIiByZXF1aXJlcyBtb2R1bGUgIiRqIiBidXQgJGouaCBvciAkai5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXJdKQotCSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgIGlmIHRlc3QgIngkaSIgIT0gInhkZWZhdWx0X21vZHVsZXMiIDsgdGhlbgotICAgICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgcmVxdWlyZXMgbW9kdWxlICckaicgYnV0IHNvbWVvbmUgdG9sZCBtZSB0byBjb21waWxlIHdpdGhvdXQgaXQiCi0gICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgICAgZmkKLSMJICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCi0jICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaiBpbmNsdWRlZCBwcmV2aW91c2x5IikKLSAgICAgICAgICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgIG5ld19saXN0X3R3bz0iJG5ld19saXN0X3R3byAkaiIKLSAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGogaW5jbHVkZWQiKQotCSAgICBmaQotCSAgZG9uZQotCWZpCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ19hZGRfbWliKFNPTUUtTUlCKQotICAgICAgCSMgIC0gbGlzdHMgTUlCcyB0byBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdCB0by1sb2FkIGxpc3QuCi0gICAgICAgICMKLSAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG1pYnMgdG8gYWRkCi0gICAgICAgICMKLQluZXdfbWlicz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYWRkX21pYiB8IHNlZCAncy8uKmNvbmZpZ19hZGRfbWliKFwoLipcKSkuKi9cMS8nYAotCWlmIHRlc3QgIngkbmV3X21pYnMiICE9ICJ4IjsgdGhlbgotCSAgICBmb3IgaiBpbiAkbmV3X21pYnMKLQkJZG8KLQkJaWYgdGVzdCAieGBlY2hvIDokZGVmYXVsdF9taWJzOiB8IGdyZXAgOiRqOmAiID0gIngiOyB0aGVuCi0JCSAgICBkZWZhdWx0X21pYnM9IiRkZWZhdWx0X21pYnM6JGoiCi0JCWZpCi0JCWlmIHRlc3QgLWYgJHNyY2Rpci9taWJzLyRqLnR4dDsgdGhlbgotCQkgICAgaWYgZWNobyAkZGVmYXVsdF9taWJzX2luc3RhbGwgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgotCQkJICAgIDoKLQkJICAgIGVsc2UKLQkJCSAgICBkZWZhdWx0X21pYnNfaW5zdGFsbD0iJGRlZmF1bHRfbWlic19pbnN0YWxsICRqLnR4dCIKLQkJICAgIGZpCi0JCWZpCi0JICAgIGRvbmUKLQlmaSAjIG5ldyBtaWJzCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgIyBhZGQgdGhlIGN1cnJlbnQgbW9kdWxlIHRvIHRoZSBsaXN0IG9mIHN0dWZmIHRvIGNvbXBpbGUsIGV0Yy4KLSAgICAgICAgIwotICAgICAgICAjIGFkZCAkaSB0byBtb2R1bGUgbGlzdAotICAgICAgICAjCi0gICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFkZGVkIChiYXNlZCBvbiAkaS5oKSIpCi0gICAgICAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCi0gICAgICAgIGV2YWwgJHttb2R1bGVfdHlwZX1fbGlzdD0iXCJcJCR7bW9kdWxlX3R5cGV9X2xpc3QgJGlcIiIKLQotCWVjaG8gInJlYWRfY29uZmlnLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbW9kdWxlX2xpc3RfZGVwcwotCWlmIHRlc3QgJG1vZHVsZV90eXBlID0gImFnZW50X21vZHVsZSIgOyB0aGVuCi0gCSAgICBlY2hvICJzbm1wX3ZhcnMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCi0gICAgICAgIGVsc2UKLSAJICAgIGVjaG8gIm1pYl9tb2R1bGVzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbWliX21vZHVsZV9saXN0X2RlcHMKLSAgICAgICAgZmkKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAjIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBjb25maWdfbG9hZF9taWIKLSAgICAgICAgIwotICAgICAgICBpZiAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19sb2FkX21pYiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotICAgICAgCSAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgIiRpIiB1c2VzIHRoZSAiY29uZmlnX2xvYWRfbWliIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLl0pCi0gICAgICAgIGZpICMgZ3JlcCBjb25maWdfbG9hZF9taWIKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAjIGNoZWNrIGZvciBjb25maWdfcGFyc2VfZG90X2NvbmYKLSAgICAgICAgIyAgKGdlbmVyYWxseSBub3QgdXNlZCBhbnkgbG9uZ2VyOyBvbGQgYXV0by1sb2FkIGEgLmNvbmYgdG9rZW4pCi0gICAgICAgICMKLSAgICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICAgICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3BhcnNlX2RvdF9jb25mIHwgc2VkICdzQC4qY29uZmlnX3BhcnNlX2RvdF9jb25mKFwoW14pXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSkuKkByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcGQiLFwxLCBcMiwgXDMsIFw0KTtAJyA+PiAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaAotCWNoYW5nZXF1b3RlKFssIF0pCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ19lcnJvcihlcnJvciB0ZXh0KQotICAgICAgCSMgIC0gdXNlZCB0byBzaWduYWwgYSBjb25maWd1cmF0aW9uIGVycm9yIGZyb20gYSBtb2R1bGUKLSAgICAgICAgIwotICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgZXJyb3JzLCBvciB3YXJuaW5ncwotICAgICAgICAjCi0JZXJyb3I9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2Vycm9yIHwgc2VkICdzLy4qY29uZmlnX2Vycm9yKFwoLipcKSkuKi9cMS8nYAotCWlmIHRlc3QgIngkZXJyb3IiICE9ICJ4IjsgdGhlbgotICAgICAgICAgIGVjaG8KLSAgICAgICAgICBlY2hvCi0gICAgICAgICAgQUNfTVNHX0VSUk9SKFskaTogKioqICRlcnJvciAqKipdKQotICAgICAgICBmaQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfd2FybmluZyh3YXJuaW5nIHRleHQpCi0gICAgICAJIyAgLSB1c2VkIHRvIHNpZ25hbCBhIGNvbmZpZ3VyYXRpb24gIndhcm5pbmciIHRvIGJlIHByaW50ZWQgdG8gdGhlIHVzZXIKLSAgICAgICAgIwotCXdhcm5pbmc9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3dhcm5pbmcgfCBzZWQgJ3MvLipjb25maWdfd2FybmluZyhcKC4qXCkpLiovXDEvJ2AKLQlpZiB0ZXN0ICJ4JHdhcm5pbmciICE9ICJ4IjsgdGhlbgotICAgICAgICAgIGFsbF93YXJuaW5ncz0iJGFsbF93YXJuaW5ncyAkd2FybmluZwotIgotICAgICAgICBmaQotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIENoZWNrIGZvciBhIC5jIGZpbGUgaWYgdGhlIC5oIGRpZG4ndCBleGlzdAotICAgICAgIwotICAgICAgZWxpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jOyB0aGVuCi0gICAgICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCBncmVwICIgJGkgICAgICAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFscmVhZHkgaW5jbHVkZWQiKQotICAgICAgICBlbHNlCi0gICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFkZGVkIChiYXNlZCBvbiAkaS5jKSIpCi0JICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKLQkgICBtaWJfbW9kdWxlX2xpc3Q9IiRtaWJfbW9kdWxlX2xpc3QgJGkiCi0gICAgICAgIGZpCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgTm8gLmggb3IgLmMgPSBlcnJvciEgICh0eXBvPykKLSAgICAgICMKLSAgICAgIGVsc2UgIyBubyAkaS5oIG9yICRpLmMKLSAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotCUFDX01TR19FUlJPUihbbW9kdWxlIGZpbGVzICRpLmggb3IgJGkuYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyXSkKLSAgICAgIGZpICMgbm8gJGkuaAotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBjaGVjayBmb3IgaW5pdC9zaHV0ZG93biByb3V0aW5lcyB0b28KLSAgICAgICMKLSAgICAgIGhhc19jX2NvZGU9bm8KLSAgICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmM7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieCRvdXRwdXRfdG8iID0gInhub3JtYWwiIDsgdGhlbgotCSAgZWNobyAiCSRpIFxcIiA+PiAkbW9kdWxlX2xpc3RfY29kZQotICAJICBlY2hvICRFQ0hPX04gIiAkaSIgJEVDSE9fQyA+PiAkTU9EVUxFX0xJU1QKLSAgICAgICAgICBldmFsIHRtcGZpbGV2YXI9XCRgZWNobyAke21vZHVsZV90eXBlfV9saXN0X2NvZGVgCi0gICAgICAgICAgZWNobyAiCSRpIFxcIiA+PiAkdG1wZmlsZXZhcgotICAgICAgICBlbHNlCi0gICAgICAgICAgZXZhbCAiZGxfJHtkbF9uYW1lfV9maWxlcz1cIlwkZGxfJHtkbF9uYW1lfV9maWxlcyAkaVwiIgotICAgICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iJHNhdmVkX3N1Ymxpc3RfY29kZSAkaSIKLSAgICAgICAgZmkKLSAgICAgICAgbW5tPWBlY2hvICRpIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAotICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiXG5jaGVja2luZyAnJHNyY2Rpci8kbWliZGlyLyRpLmMnICgkbW5tL2BiYXNlbmFtZSAkaWApIEMgZmlsZSBmb3IgaW5pdC9zaHV0ZG93biIpCi0gICAgICAgIGlmIHRlc3QgIngkbW5tIiAhPSAieGBiYXNlbmFtZSAkaWAiOyB0aGVuCi0gICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLQkgICBBQ19NU0dfRVJST1IoW2NvbmZsaWN0aW5nIG5hbWVzOiAkbW5tICE9IGBiYXNlbmFtZSAkaWBdKQotICAgICAgICBmaQotICAgICAgICB0ZW1wX2luaXQ9YGdyZXAgaW5pdF8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jIHwgZ3JlcCAtdiBfaW5pdF8kbW5tYAotCWlmIHRlc3QgIngkdGVtcF9pbml0IiAhPSAieCI7IHRoZW4KLSAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJhZGRpbmcgaW5pdF8kbW5tKCkgdG8gbGlzdCIpCi0gICAgICAgICAgICBuZWVkX2hlYWRlcj0xCi0JICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCi0JZmkKLQlncmVwIHNodXRkb3duXyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgPiAvZGV2L251bGwKLSAgICAgICAgaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgotICAgICAgICAgICAgICBlY2hvIC1lICJcbmFkZGluZyBzaHV0ZG93bl8kbW5tKCkgdG8gbGlzdCIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBuZWVkX2hlYWRlcj0xCi0JICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgc2h1dGRvd25fJG1ubSgpOyIgPj4gJG1pYmRpci8ke21vZHVsZV90eXBlfV9zaHV0ZG93bi5oCi0JZmkKLSAgICAgIGZpICMgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYwotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBpZiB0aGVyZSBpcyBhIHNodXRkb3duL2luaXQgbGlzdCwKLSAgICAgICMKLSAgICAgIGlmIHRlc3QgJG5lZWRfaGVhZGVyIC1lcSAxIDsgdGhlbgotICAgICAgICAgZWNobyAnI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIicgPj4gJG91dHB1dF9oZHJzCi0gICAgICBlbHNlCi0gICAgICAgICBlY2hvICcvKiNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyIqLycgPj4gJG91dHB1dF9oZHJzCi0gICAgICBmaQotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBjaGVjayBmb3Igb3V0cHV0IGRpcmVjdG9yeSAoZm9yIGJ1aWxkaW5nIG91dHNpZGUgb2Ygc291cmNlIHRyZWUKLSAgICAgICMKLSAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgaWYgdGVzdCAieGBlY2hvICRpIHwgc2VkICdzL1wvLy9nOydgIiAhPSAieCRpIjsgdGhlbgotCW1uZD1gZWNobyAkaSB8IHNlZCAncy9cL1teL10qJC8vOydgCi0JaWYgdGVzdCAhIC1kIC4vJG1pYmRpci8kbW5kOyB0aGVuCi0JICAgIG1vZHVsZV9kaXJlY3Rvcmllcz0iJG1vZHVsZV9kaXJlY3RvcmllcyAuLyRtaWJkaXIvJG1uZCIKLQlmaQotICAgICAgZmkgIyBtb2R1bGUgZGlyZWN0b3J5IHRlc3QKLSAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIGRlZmluZSBVU0lOR18qX01PRFVMRQotICAgICAgIwotICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICBzeW09ImBlY2hvICR7aX0gfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2cnIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYCIKLSAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0gICAgICBlY2hvICIvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlICR7aX0gbW9kdWxlIGZpbGVzLiAgKi8iID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKLSAgICAgIGVjaG8gIiNkZWZpbmUgVVNJTkdfJHtzeW19X01PRFVMRSAxIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCi0gICAgICBlY2hvICIgIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBlY2hvICRFQ0hPX04gIiAkaSRFQ0hPX0MiCi0gICAgZmkgIwotICAgIGRvbmUgIyBmb3IgaSBpbiAkbW9kdWxlX3N1Ymxpc3QKLQotICAgIGlmIHRlc3QgIiRvdXRwdXRfdG8iID0gInNlcGFyYXRlIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkbmV3X2xpc3RfdHdvIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgIyBubyBuZXcgc3ViLW1vZHVsZXMgdG8gYWRkIHRvIHRoZSBjdXJyZW50IHRhcmdldAotICAgICAgICBvdXRwdXRfdG89Im5vcm1hbCIKLQotICAgICAgICBkbGxjbGVhbnM9IiRzYXZlZF9zdWJsaXN0X28gJGRsbGNsZWFucyIKLSAgICAgICAgb3V0cHV0X2luaXRzPSIiCi0gICAgICAgIG1vZHVsZV9zdWJsaXN0PSIiCi0gICAgICBlbHNlCi0gICAgICAgICMgYSBtb2R1bGUgaGFkIHN1Yi1tb2R1bGVzIHJlcXVpcmVkOyBrZWVwIGdvaW4nCi0gICAgICAgIHNhdmVkX3N1Ymxpc3Q9IiRzYXZlZF9zdWJsaXN0ICRtb2R1bGVfc3VibGlzdCIKLSAgICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiRuZXdfbGlzdF90d28iCi0gICAgICAgIG5ld19saXN0X3R3bz0iIgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBtb2R1bGVfc3VibGlzdD0iIgotICAgIGZpCi0KLSAgICBkb25lICMgd2hpbGUgbW9kdWxlX3N1Ymxpc3QKLSAgZG9uZSAjIGZvciBqIGluICRuZXdfbW9kdWxlX2xpc3QKLQotICAjIHJlbWVtYmVyIHRoZSB0b3AgbGV2ZWwgbW9kdWxlcyBmb3IgbGF0ZXIgcmVwb3J0aW5nCi0gIGlmIHRlc3QgJGZpcnN0X3Bhc3MgPSAxIDsgdGhlbgotICAgICMgcmVtZW1iZXIgdGhpcyBsaXN0IGZvciBsYXRlciByZXBvcnRpbmcKLSAgICB0b3BfbGV2ZWxfbW9kdWxlcz0iJG5ld19tb2R1bGVfbGlzdCA9PiAkbmV3X2xpc3RfdHdvIgotICAgIGZpcnN0X3Bhc3M9MAotICBmaQotICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAjIGlmICRpIGFkZGVkIG5ldyBtb2R1bGVzIHZpcyBjb25maWdfKiwKLSAgIyBjaGVjayB0aG9zZSBtb2R1bGVzIGZvciByZXF1aXJlbWVudHMgdG9vCi0gICMKLSAgIyB0cmFuc2ZlciB0aGUgbmV3IG1vZHVsZSB0byBjaGVjayBsaXN0IHRvIHRoZSBub3JtYWwgdmFyaWFibGUKLSAgIwotICBpZiB0ZXN0ICJ4JG5ld19saXN0X3R3byIgOyB0aGVuCi0gICAgb3V0cHV0X3RvPW5vcm1hbAotICBmaQotICBuZXdfbW9kdWxlX2xpc3Q9IiRuZXdfbGlzdF90d28iCi0gIG5ld19saXN0X3R3bz0iIgotZG9uZSAjIHdoaWxlIHRlc3QgIngkbmV3X21vZHVsZV9saXN0IiAhPSAieCI7IGRvCi1lY2hvICIiCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25zdHJ1Y3QgdGhlIGRsbCBjb2RlIGZpbGVzIGFuZCBtYWtlIHJ1bGVzLiAgVGhpcyBjYW4ndCBiZSBkb25lCi0jIHVudGlsIG5vdyBiZWNhdXNlIGR1cGxpY2F0ZSB1c2Ugb2YgYSBtb2R1bGUgbWVhbnMgaXQgZ2V0cyByZW1vdmVkCi0jIGZyb20gdGhlIGRsbCBhbmQgcHV0IGludG8gdGhlIG1haW4gYWdlbnQuCi0jCi1mb3IgaSBpbiAkZGxfbmFtZXMgOyBkbwotICBldmFsIG1vZF9maWxlcz0iXCJcJGRsXyR7aX1fZmlsZXNcIiIKLSAgZWNobyAiY29tcG9uZW50cyBpbiB0aGUgJGkgZGxsOiAkbW9kX2ZpbGVzIgotCi0gIG91dHB1dF9pbml0cz0iYWdlbnQvbWliZ3JvdXAvJHtpfS1kbGwuYyIKLSAgb3V0cHV0X2hkcnM9ImFnZW50L21pYmdyb3VwLyR7aX0taGRycy5oIgotCi0gIEFDX01TR19NT0RVTEVfREJHKCJjcmVhdGluZyBkbGwgZmlsZTogJG91dHB1dF9pbml0cyIpCi0gIGZvciBvZmlsZSBpbiAkb3V0cHV0X2luaXRzICRvdXRwdXRfaGRycyA7IGRvCi0gICAgaWYgdGVzdCAtZiAkb2ZpbGUgOyB0aGVuCi0gICAgICBpZiBncmVwICJ0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSIgJG9maWxlID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCi0gIAk6Ci0gICAgICBlbHNlCi0gIAlBQ19NU0dfRVJST1IoWyRvZmlsZSBhbHJlYWR5IGV4aXN0ZWQgOyBjYW4ndCBidWlsZCBkbGwgb2JqZWN0ICRpXSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBjYXQgPiAkb2ZpbGUgPDwgRU9GSUYKLS8qIHhEbyBub3QgZWRpdDsgdGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUgKi8KLUVPRklGCi0gIGRvbmUKLQotICBjYXQgPj4gJG91dHB1dF9pbml0cyA8PCBFT0ZPQwotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLSNpbmNsdWRlICIke2l9LWhkcnMuaCIKLXZvaWQKLWluaXRfJGkodm9pZCkgewotRU9GT0MKLQotICAjIGNyZWF0ZSB0aGUgLnNvIHJ1bGUKLSAgc2F2ZWRfc3VibGlzdF9vPWBlY2hvICIkbW9kX2ZpbGVzICIgfCBzZWQgJ3MvXiAqLy9nO3MvICAqLy5vIC9nOydgCi0KLSAgIyBjcmVhdGUgdGhlIHJ1bGVzIGZvciBlYWNoIG9iamVjdAotICBmb3IgaiBpbiAkbW9kX2ZpbGVzIDsgZG8KLSAgICBjYXQgPj4gJG1vZHVsZV9ydWxlcyA8PCBFT0ZSCi0kai5vOiAkai5jCi0JXCQoQ0MpIC1jIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCBcJDwKLQotRU9GUgotICAgIG1ubT1gZWNobyAkaiB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKLSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cwotICBkb25lCi0KLSAgIyBjcmVhdGUgdGhlIHJ1bGUgZm9yIHRoZSAuc28gYW5kIHdyYXBwZXIgY29kZQotICBjYXQgPj4gJG1vZHVsZV9ydWxlcyA8PCBFT0ZNCi0ke2l9LWRsbC5vOiAke2l9LWRsbC5jCi0JXCQoQ0MpIC1jIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCBcJDwKLQotJHtpfS5zbzogJHNhdmVkX3N1Ymxpc3RfbyAke2l9LWRsbC5vCi0JXCQoQ0MpIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCAkc2F2ZWRfc3VibGlzdF9vICR7aX0tZGxsLm8KLQotRU9GTQotICAgICAgICBjYXQgPj4gJG91dHB1dF9pbml0cyA8PCBFT0ZPQ0ZJTgotfQotRU9GT0NGSU4KLQotZG9uZQotCi0jIGNsZWFudXAKLXJtIC1mIG1vZHVsZV90bXBfaGVhZGVyLmgKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgYnVpbGQgbW9kdWxlIGxpc3RzIGZvciBNYWtlZmlsZXMKLSMKLWNoYW5nZXF1b3RlKCwgKQotCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gOyBkbwotICBldmFsICIkaT1tay8ke2l9Lm1rIgotZG9uZQotCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X28KLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfYwotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbG8KLQotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3Rfbwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfYwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2xvCi0KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X28vbWliZ3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbyA+ICRtaWJncm91cF9saXN0X28KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2xvL21pYmdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkbWliX21vZHVsZV9saXN0X2xvID4gJG1pYmdyb3VwX2xpc3RfbG8KLQotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2MKLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2xvCi0KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3Rfby9hZ2VudGdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbyA+ICRhZ2VudGdyb3VwX2xpc3Rfbwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9sby9hZ2VudGdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbG8gPiAkYWdlbnRncm91cF9saXN0X2xvCi0KLWZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyA7IGRvCi0JIyBocHV4IG1ha2UgKGF0IGxlYXN0KSBkb2Vzbid0IGxpa2UgYSB0cmFpbGluZyBcIG9uIHRoZSBsYXN0Ci0JIyBsaW5lIGV2ZW4gd2hlbiB0aGUgbmV4dCBsaW5lIGNvbnRhaW5zIG5vdGhpbmcgYnV0Ci0JIyB3aGl0ZXNwYWNlLgotCWxhc3R0b2tlbj1gdGFpbCAtMSBtay8kaS5tayB8IGF3ayAne3ByaW50ICQxfSdgCi0Jc2VkICJzIyRsYXN0dG9rZW4gXFxcXCMkbGFzdHRva2VuIyIgPCBtay8kaS5tayA+IG1rLyRpLm1rLnRtcAotCW12IG1rLyRpLm1rLnRtcCBtay8kaS5tawotCi0JIyBhZGQgYSBjbG9zaW5nIGNvbW1lbnQKLQllY2hvICIiID4+IG1rLyRpLm1rCi0JZWNobyAiIyBlbmQgY29uZmlndXJlIGdlbmVyYXRlZCBjb2RlIiA+PiBtay8kaS5tawotZG9uZQotCi1jaGFuZ2VxdW90ZShbLCBdKQotCi1pZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KLSAgIGVjaG8gLWUgIlxuRmluYWwgbW9kdWxlIGxpc3Q6ICRtb2R1bGVfbGlzdF9jb2RlIgotICAgZXhpdAotZmkKLWlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLSAgQUNfTVNHX0NBQ0hFX0FERChbQWdlbnQgTW9kdWxlIGxpc3Q6ICRtb2R1bGVfbGlzdF9jb2RlXSkKLWZpCi1BQ19TVUJTVF9GSUxFKE1PRFVMRV9MSVNUKQotQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9jKQotQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9vKQotQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9sbykKLUFDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2MpCi1BQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9vKQotQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfbG8pCi1BQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2MpCi1BQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X28pCi1BQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2xvKQotQUNfU1VCU1RfRklMRShtaWJncm91cF9saXN0X28pCi1BQ19TVUJTVF9GSUxFKG1pYmdyb3VwX2xpc3RfbG8pCi1BQ19TVUJTVF9GSUxFKGFnZW50Z3JvdXBfbGlzdF9vKQotQUNfU1VCU1RfRklMRShhZ2VudGdyb3VwX2xpc3RfbG8pCi1BQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0KQotCi0jQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3QpCi0jQUNfU1VCU1QobW9kdWxlX2xpc3QpCi1BQ19TVUJTVChkZWZhdWx0X21pYnNfaW5zdGFsbCkKLUFDX1NVQlNUKGRsbGNsZWFucykKLUFDX1NVQlNUX0ZJTEUobW9kdWxlX3J1bGVzKQotQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9kZXBzKQotQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfZGVwcykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfZGVwcykKLQotQUNfTVNHX1JFU1VMVCguKQotCi1pZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KLUFDX01TR19DQUNIRV9BREQoQWdlbnQgTUlCIGNvZGU6ICAgICAgICAgICAgJG1vZHVsZV9saXN0KQotZmkKLUFDX01TR19DQUNIRV9BREQoQWdlbnQgTUlCIGNvZGU6ICAgICAgICAgICAgJHRvcF9sZXZlbF9tb2R1bGVzKQotCi0jIGVuZCBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZwotCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZF0pCi1mb3IgaSBpbiAkbW9kdWxlX2RpcmVjdG9yaWVzOyBkbwotICAkc3JjZGlyL21raW5zdGFsbGRpcnMgJGkKLWRvbmUKLUFDX01TR19SRVNVTFQoLikKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIGRlZmF1bHQgbWlicwotIwotQUNfTVNHX0NIRUNLSU5HKFtkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkXSkKLWlmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQlMiID0gIngiOyB0aGVuCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkZGVmYXVsdF9taWJzIgotZmkKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgIyBtaW5ndzMyIGFuZCBjeWd3aW4gdXNlICc7JyBhcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2VwYXJhdG9yIGNoYXIKLSAgRU5WX1NFUEFSQVRPUj0iOyIKLSAgTkVUU05NUF9ERUZBVUxUX01JQlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIgfCBzZWQgJ3MvOi87L2cnYAotICBkZWZhdWx0X21pYnM9YGVjaG8gIiRkZWZhdWx0X21pYnMiIHwgc2VkICdzLzovOy9nJ2AKLWVsc2UKLSAgRU5WX1NFUEFSQVRPUj0iOiIKLWZpCi1BQ19TVUJTVChFTlZfU0VQQVJBVE9SKQotQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJTLCIkTkVUU05NUF9ERUZBVUxUX01JQlMiKQotQUNfU1VCU1QoTkVUU05NUF9ERUZBVUxUX01JQlMpCi1BQ19NU0dfUkVTVUxUKCRORVRTTk1QX0RFRkFVTFRfTUlCUykKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGVdKQotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2RsbW9kICIgPi9kZXYvbnVsbAotaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgICAgTElCX0NGTEFHUz0iJExJQl9DRkxBR1MgJFNITElCX0NGTEFHUyIKLQlBQ19NU0dfUkVTVUxUKHllcykKLWVsc2UKLQlETExJQlM9IiIKLQlBQ19NU0dfUkVTVUxUKG5vKQotZmkKLQotIwotIyBDaGVjayBmb3Iga2VybmVsIGxvY2F0aW9uCi0jCi0KLUFDX0NBQ0hFX0NIRUNLKGZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsLGFjX2N2X0tFUk5FTF9MT0MsCi1bYWNfY3ZfS0VSTkVMX0xPQz0idW5rbm93biIKLSMgRmlyc3QgZGV0ZXJtaW5lIGlmIHRlc3QgZXhwZWN0cyBhIC1mIG9yIGEgLWMgKGNoYXJhY3RlciBkZXZpY2UgKFNZU1YpKQotCi1pZiB0ZXN0IC1jIC9kZXYvbnVsbDsgdGhlbgotICBDRkxBRz0iLWMiCi1lbGlmIHRlc3QgLWYgL2Rldi9udWxsOyB0aGVuCi0gIENGTEFHPSItZiIKLWVsc2UKLSAgIyBmYWxsIGJhY2sKLSAgQ0ZMQUc9Ii1mIgotZmkKLWZvciBpIGluIC92bXVuaXggL2hwLXV4IC9zdGFuZC92bXVuaXggL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC9uZXRic2QgL3VuaXggL2tlcm5lbCAvYnNkIC9tYWNoX2tlcm5lbCAvYm9vdC9rZXJuZWwva2VybmVsCi0gIGRvCi0gIGlmIHRlc3QgLWYgJGkgLW8gJENGTEFHICRpOyB0aGVuCi0gICAgYWNfY3ZfS0VSTkVMX0xPQz0iJGkiCi0gICAgYnJlYWs7Ci0gIGZpCi1kb25lCi1pZiB0ZXN0ICRpID0gInVua25vd24iOyB0aGVuCi0gIEFDX01TR19XQVJOKFtDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gIFNldHRpbmcgdG8gL3ZtdW5peF0pCi0gIGFjX2N2X0tFUk5FTF9MT0M9Ii92bXVuaXgiCi1maQotXSkKLQotQUNfREVGSU5FX1VOUVVPVEVEKEtFUk5FTF9MT0MsIiRhY19jdl9LRVJORUxfTE9DIikKLQotIwotIyBDaGVjayBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24KLSMKLQotQUNfQ0FDSEVfQ0hFQ0soZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uLGFjX2N2X0VUQ19NTlRUQUIsCi1bYWNfY3ZfRVRDX01OVFRBQj0idW5rbm93biIKLWZvciBpIGluIC9ldGMvbW50dGFiIC9ldGMvbXRhYiAvZXRjL2ZpbGVzeXN0ZW1zIC9kZXYvbW50dGFiCi0gIGRvCi0gIGlmIHRlc3QgLWYgJGkgLW8gLWMgJGk7IHRoZW4KLSAgICBhY19jdl9FVENfTU5UVEFCPSIkaSIKLSAgICBicmVhazsKLSAgZmkKLWRvbmUKLV0pCi0KLUFDX0RFRklORV9VTlFVT1RFRChFVENfTU5UVEFCLCIkYWNfY3ZfRVRDX01OVFRBQiIpCi0KLSMgQ2hlY2sgZm9yIC9kZXYvZG1lbSBvciAvZGV2L2RydW0gbG9jYXRpb24KLUFDX0NBQ0hFX0NIRUNLKGZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSxhY19jdl9ETUVNX0xPQywKLVsKLSMgRmlyc3QgZGV0ZXJtaW5lIGlmIHRlc3QgZXhwZWN0cyBhIC1mIG9yIGEgLWMgKGNoYXJhY3RlciBkZXZpY2UgKFNZU1YpKQotCi1pZiB0ZXN0IC1mIC9kZXYva21lbTsgdGhlbgotICBDVEVTVD0idGVzdCAtZiIKLWVsaWYgdGVzdCAtYyAvZGV2L2ttZW07IHRoZW4KLSAgQ1RFU1Q9InRlc3QgLWMiCi1lbHNlCi0gICMgZmFsbCBiYWNrCi0gIENURVNUPSJ0ZXN0IC1mIgotZmkKLQotaWYgJENURVNUIC9kZXYvZG1lbTsgdGhlbgotICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kbWVtIgotZWxpZiAkQ1RFU1QgL2Rldi9kcnVtOyB0aGVuCi0gIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RydW0iCi1lbHNlCi0gIGFjX2N2X0RNRU1fTE9DPSJub25lIgotZmkKLV0pCi0KLWlmIHRlc3QgIngkYWNfY3ZfRE1FTV9MT0MiICE9ICJ4bm9uZSI7IHRoZW4KLSAgQUNfREVGSU5FX1VOUVVPVEVEKERNRU1fTE9DLCIkYWNfY3ZfRE1FTV9MT0MiKQotZmkKLQotIyBmb3JjZWQgZWZlbmNlIHR1cm5lZCBvZmYuCi0jIGlmIHRlc3QgIngkZGV2ZWxvcGVyIiA9ICJ4eWVzIiAtYSAieCR1c2VfZWZlbmNlIiAhPSAieG5vIjsgdGhlbgotIyAgICB1c2VfZWZlbmNlPSJ5ZXMiCi0jIGZpCi0KLWlmIHRlc3QgIngkdXNlX2VmZW5jZSIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19DSEVDS19MSUIoZWZlbmNlLCBFRl9FeGl0KQotZmkKLQotIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KLSMgQUNfQ0hFQ0tfTElCKGRlcywgbWFpbikKLUFDX0NIRUNLX0xJQihtLCByb3VuZCkKLUFDX0NIRUNLX0xJQihtLCBleHApCi0KLUFDX0FSR19XSVRIKGVsZiwKLQlbQVNfSEVMUF9TVFJJTkcoLS13aXRob3V0LWVsZixbdXNlIGVsZiBsaWJyYXJpZXNdKV0sLAotCVtBQ19BUkdfRU5BQkxFKGVsZiwsCi0JCVtBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbGYvLS13aXRob3V0LWVsZiBpbnN0ZWFkIF0pXSldKQotCi1pZiB0ZXN0ICJ4JHdpdGhfZWxmIiAhPSAieG5vIjsgdGhlbgotIyBubGlzdCBpcyBuZWVkZWQgZm9yIHVwdGltZSBvbiBzb21lIHN5dGVtcyBpbiB0aGUgZ2VuZXJpYyBsaWJyYXJ5Ci0jIGFkZCBob3N0cyB3aGljaCBkb24ndCB1c2Ugbmxpc3QgdG8gdGhlIGJsYW5rIGZpcnN0IGxpbmUKLWNhc2UgJHRhcmdldF9vcyBpbgotCWxpbnV4KikgOzsKLQlpcml4KikgIyBDaGVjayBmb3Igbmxpc3QgaW4gbWxkIChpcml4KQotCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdCkKLQkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3Q2NCkKLQkJQUNfQ0hFQ0tfTElCKG1sZCwgbmxpc3QpCi0JCTs7Ci0JKikgIyBkZWZhdWx0Ci0JCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0KQotCQk7OwotZXNhYwotZmkKLSAKLQotIyBPbiBzb21lIHBsYXRmb3JtcyAoSXJpeCkgbGlibnNsIGFuZCBsaWJzb2NrZXQgc2hvdWxkIG5vdCBiZSB1c2VkLgotQUNfQ0hFQ0tfRlVOQyhnZXRob3N0YnluYW1lLCBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FKSwKLQlBQ19DSEVDS19MSUIobnNsLCBnZXRob3N0YnluYW1lLCBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FKQotCUxJQlM9IiR7TElCU30gLWxuc2wiKSkKLQotIyBTQ08gVW5peHdhcmUgNy4xLjQgZmluZHMgZ2V0aG9zdGJ5bmFtZSgpIGluIC1sc29ja2V0Ci1BQ19DSEVDS19GVU5DKGdldGhvc3RieW5hbWUsIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUUpLAotCUFDX0NIRUNLX0xJQihzb2NrZXQsIGdldGhvc3RieW5hbWUsIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUUpCi0JTElCUz0iJHtMSUJTfSAtbHNvY2tldCIpKQotCi0jIFNvbGFyaXMga3N0YXQKLUFDX0NIRUNLX0xJQihrc3RhdCwga3N0YXRfbG9va3VwLAotICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJLU1RBVCwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3N0YXQnIGxpYnJhcnkgKC1sa3N0YXQpLl0pCi0gICAgICAgIExORVRTTk1QTElCUz0iJHtMTkVUU05NUExJQlN9IC1sa3N0YXQiKQotCi0jIENoZWNrIGZvciBsaWJyYXJpZXMgdGhhdCB0aGUgYWdlbnQgbmVlZHMKLSMgc2F2aW5nIG9sZCBsaWJyYXJpZXMKLU5PTkFHRU5UTElCUz0kTElCUwotCi0jIENoZWNrIGZvciBzZWN1cml0eSByZWxhdGVkIGZ1bmN0aW9ucwotaWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIjsgdGhlbgotICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiAhPSAieHllcyIgLWEgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgQUNfQ0hFQ0tfTElCKHBrY3MxMSwgQ19Jbml0aWFsaXplLCBBQ19ERUZJTkUoSEFWRV9MSUJQS0NTMTEsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBrY3MxMScgbGlicmFyeSAoLWxwa2NzMTEpLl0pCi0gICAgICAgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiKQotICAgIGVsc2UgCi0gICAgICBpZiB0ZXN0ICJ4JHRyeXJzYXJlZiIgIT0gInhubyI7IHRoZW4KLSAgICAgICAgIEFDX0NIRUNLX0xJQihyc2FyZWYsIFJTQVByaXZhdGVEZWNyeXB0KQotICAgICAgICAgQUNfQ0hFQ0tfTElCKFJTQWdsdWUsIFJTQV9QS0NTMV9SU0FyZWYpCi0gICAgICBmaQotCi0gICAgICBBQ19DSEVDS19MSUIoY3J5cHRvLCBFVlBfbWQ1LCBBQ19ERUZJTkUoSEFWRV9MSUJDUllQVE8sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLl0pCi0gICAgICAgICAgICAgIExJQkNSWVBUTz0iLWxjcnlwdG8iKQotICAgICAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgQUVTX2NmYjEyOF9lbmNyeXB0LCAKLSAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBULCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBBRVNfY2ZiMTI4X2VuY3J5cHQnIGZ1bmN0aW9uLl0pKQotICAgICAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgRVZQX01EX0NUWF9jcmVhdGUsCi0gICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9NRF9DVFhfQ1JFQVRFXSwgW10sCi0gICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9NRF9DVFhfY3JlYXRlJyBmdW5jdGlvbi5dKQotICAgICAgICAgIEFDX0RFRklORShbSEFWRV9FVlBfTURfQ1RYX0RFU1RST1ldLCBbXSwKLSAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX01EX0NUWF9kZXN0cm95JyBmdW5jdGlvbi5dKSkKLSAgICBmaQotZWxpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19DSEVDS19MSUIocGtjczExLCBDX0luaXRpYWxpemUsIEFDX0RFRklORShIQVZFX0xJQlBLQ1MxMSkKLSAgICAgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiKQotZmkKLQotTElCUz0kTk9OQUdFTlRMSUJTCi0KLSMgY2hlY2sgZm9yIHRjcCB3cmFwcGVyIHN1cHBvcnQKLV9jcHBmbGFncz0iJHtDUFBGTEFHU30iCi1fbGRmbGFncz0iJHtMREZMQUdTfSIKLQotQUNfQVJHX1dJVEgobGlid3JhcCwKLVsgIC0td2l0aC1saWJ3cmFwWz1MSUJQQVRIXSAgQ29tcGlsZSBpbiBsaWJ3cmFwICh0Y3Bfd3JhcHBlcnMpIHN1cHBvcnQuXSxbCi0gIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJubyI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAieWVzIjsgdGhlbgotICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGhfbGlid3JhcC9pbmNsdWRlIgotICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtTCR3aXRoX2xpYndyYXAvbGliIgotICAgIGZpCi0KLSAgICBfbGlicz0ke0xJQlN9Ci0gICAgQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwgLAotCSAgICBBQ19NU0dfRVJST1IoW0Fza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgdGNwZC5oLl0pKQotCi0gICAgTElCUz0iJExJQlMgLWx3cmFwIgotCUFDX01TR19DSEVDS0lORyhbZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcF0pCi0JIyBYWFg6IHNob3VsZCBjaGVjayBmb3IgaG9zdHNfY3RsCi0JQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJICAgICAjaW5jbHVkZSA8dGNwZC5oPgotCQkgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7Ci0JCSAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKLQkJICAgIF0sW2hvc3RzX2FjY2Vzcygodm9pZCAqKTApXSxbCi0KLQkgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLQkgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0xJQldSQVApCi0JICAgIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgotCSAgICBfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIl0sCi0gICAgICAgIFsKLQkgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotCSAgICAjIExpbnV4IFJlZEhhdCA2LjEgd29uJ3QgbGluayBsaWJ3cmFwIHdpdGhvdXQgbGlibnNsCi0JICAgIEFDX0NIRUNLX0ZVTkMoeXBfZ2V0X2RlZmF1bHRfZG9tYWluLCAsCi0JCUFDX0NIRUNLX0xJQihuc2wsIHlwX2dldF9kZWZhdWx0X2RvbWFpbikpCi0JICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbF0pCi0JICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0JCSAgICAgICAgICNpbmNsdWRlIDx0Y3BkLmg+Ci0JCSAgICAgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7Ci0JICAgICAgICAgICAgICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwOwotCSAJCV0sW2hvc3RzX2FjY2Vzcygodm9pZCAqKTApXSwKLQotCQkJQUNfTVNHX1JFU1VMVCh5ZXMpCi0JCQlBQ19ERUZJTkUoTkVUU05NUF9VU0VfTElCV1JBUCkKLQkJCXRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgotCQkJX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCAtbG5zbCIsCi0KLQkJCUFDX01TR19SRVNVTFQobm8pCi0JCQlBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pKV0pCi0gICAgTEFHRU5UTElCUz0iJF93cmFwbGlicyIKLSAgICBDUFBGTEFHUz0ke19jcHBmbGFnc30KLSAgICBMREZMQUdTPSR7X2xkZmxhZ3N9Ci0gICAgTElCUz0ke19saWJzfQotICBmaQotXSkKLQotQUNfQ0hFQ0tfSEVBREVSUyhycG0vcnBtbGliLmggcnBtL2hlYWRlci5oKQotCi1BQ19DSEVDS19IRUFERVIocnBtL3JwbWxpYi5oLHJwbWxpYl9oPXllcyxycG1saWJfaD1ubykKLUFDX0NIRUNLX0hFQURFUihycG0vaGVhZGVyLmgscnBtaGVhZGVyX2g9eWVzLHJwbWhlYWRlcl9oPW5vKQotCi1pZiB0ZXN0ICJ4JHJwbWhlYWRlcl9oIiA9ICJ4bm8iIC1vICJ4JHJwbWxpYl9oIiA9ICJ4bm8iIDsgdGhlbgotICBpZiB0ZXN0ICJ4JHdpdGhfcnBtIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGVpdGhlciB0aGUgUlBNIGhlYWRlciBmaWxlcyBuZWVkZWQgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIFJQTSBzdXBwb3J0XSkKLSAgZWxzZQotICAgIHdpdGhfcnBtPW5vCi0gIGZpCi1maQotCi0jCi0jIHJwbSBsaWJyYXJpZXMgb25seSBuZWVkZWQgZm9yIHRoZSBob3N0IHJlc291cmNlcyBtaWIgc29mdHdhcmUKLSMgaW5zdGFsbGVkIHRhYmxlcyAob24gbGludXggaW4gcGFydGljdWxhcikKLSMKLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgIyBBUkcuICBSUE0gaXMgYSByZWFsIHBhaW4uCi0gICMgRldJVyBsaWJycG0ubGEsIGxpYnJwbWlvLmxhLCBhbmQgbGlicG9wdC5sYSBoYXZlIGNvcnJlY3QgZGVwZW5kZW5jaWVzLgotICBfcnBtbGlicz0iIgotCi0gICMgcnBtLTQuMC54IG5lZWRzIHJwbWlvLgotICBBQ19DSEVDS19MSUIocnBtaW8sIHJwbUdldFBhdGgsIFtfcnBtbGlicz0iLWxycG1pbyAkX3JwbWxpYnMiXSwsJF9ycG1saWJzKQotICAKLSAgIyBub3cgY2hlY2sgZm9yIHJwbSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbGlicmFyaWVzLgotICBBQ19DSEVDS19MSUIocnBtLCBycG1HZXRGaWxlc3lzdGVtTGlzdCxbCi0gICAgQUNfREVGSU5FKEhBVkVfTElCUlBNKQotICAgIExNSUJMSUJTPSItbHJwbSAkX3JwbWxpYnMgJExNSUJMSUJTIgotICAgIENGTEFHUz0iJENGTEFHUyAtSS91c3IvaW5jbHVkZS9ycG0iCi0gIF0sWwotICAgICMgcnBtLTQuMC4zIGxpYnJwbWRiIGFjdHVhbGx5IGNvbnRhaW5zIHdoYXQgd2UgbmVlZC4KLSAgICBBQ19DSEVDS19MSUIocnBtZGIsIHJwbWRiT3BlbixbCi0gICAgICBBQ19ERUZJTkUoSEFWRV9MSUJSUE0pCi0gICAgICBMTUlCTElCUz0iLWxycG1kYiAtbHJwbSAkX3JwbWxpYnMgJExNSUJMSUJTIgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JL3Vzci9pbmNsdWRlL3JwbSIKLSAgICBdLCwtbHJwbSAkX3JwbWxpYnMpCi0gIF0pCi0KLSAgIyBycG0gNC42IGhhcyBpbmNvbXBhdGlibGUgQVBJLCB0dXJuIG9uIHRoZSBsZWdhY3kgb25lCi0gIEFDX0NIRUNLX0RFQ0woW2hlYWRlckdldEVudHJ5XSwKLSAgICA6ICwKLSAgICBBQ19ERUZJTkUoW19SUE1fNF80X0NPTVBBVF0sIFtdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFJQTSA0LjYgb3IgbmV3ZXIgdG8gdHVybiBvbiBsZWdhY3kgQVBJXSksCi0gICAgW1sjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPl1dCi0gICkKLWZpCi0KLSMgbGlia3ZtCi1BQ19DSEVDS19MSUIoa3ZtLCBrdm1fcmVhZCwgW19saWJrdm09Ii1sa3ZtIl0pCi1BQ19DSEVDS19GVU5DKGt2bV9vcGVuZmlsZXMsIEFDX0RFRklORShIQVZFX0tWTV9PUEVORklMRVMsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9vcGVuZmlsZXMnIGZ1bmN0aW9uLl0pLAotCUFDX0NIRUNLX0xJQihrdm0sIGt2bV9vcGVuZmlsZXMsIEFDX0RFRklORShIQVZFX0tWTV9PUEVORklMRVMsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9vcGVuZmlsZXMnIGZ1bmN0aW9uLl0pCi0JX2xpYmt2bT0iLWxrdm0iKSkKLUFDX0NIRUNLX0ZVTkMoa3ZtX2dldHByb2NzLCBBQ19ERUZJTkUoSEFWRV9LVk1fR0VUUFJPQ1MsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRwcm9jcycgZnVuY3Rpb24uXSksCi0JQUNfQ0hFQ0tfTElCKGt2bSwga3ZtX2dldHByb2NzLCBBQ19ERUZJTkUoSEFWRV9LVk1fR0VUUFJPQ1MsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRwcm9jcycgZnVuY3Rpb24uXSkKLQlfbGlia3ZtPSItbGt2bSIpKQotQUNfQ0hFQ0tfRlVOQyhrdm1fZ2V0c3dhcGluZm8sIEFDX0RFRklORShIQVZFX0tWTV9HRVRTV0FQSU5GTywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHN3YXBpbmZvJyBmdW5jdGlvbi5dKSwKLQlBQ19DSEVDS19MSUIoa3ZtLCBrdm1fZ2V0c3dhcGluZm8sIEFDX0RFRklORShIQVZFX0tWTV9HRVRTV0FQSU5GTywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHN3YXBpbmZvJyBmdW5jdGlvbi5dKQotCV9saWJrdm09Ii1sa3ZtIikpCi1pZiB0ZXN0ICJ4JHtfbGlia3ZtfSIgIT0gIngiOyB0aGVuCi0JQUNfREVGSU5FKEhBVkVfTElCS1ZNLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm0nIGxpYnJhcnkgKC1sa3ZtKS5dKQotCUxBR0VOVExJQlM9IiRMQUdFTlRMSUJTICR7X2xpYmt2bX0iCi1maQotCi0jIERZTkFNSUMgTU9EVUxFIFNVUFBPUlQKLUFDX0NIRUNLX0ZVTkMoZGxvcGVuLCBBQ19ERUZJTkUoSEFWRV9ETE9QRU4sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsb3BlbicgZnVuY3Rpb24uXSksCi0JQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sIEFDX0RFRklORShIQVZFX0RMT1BFTiwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGxvcGVuJyBmdW5jdGlvbi5dKQotCUFDX0RFRklORShIQVZFX0xJQkRMLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuXSkKLQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkbCIpKQotCi0jIG5saXN0Ci1BQ19DSEVDS19GVU5DUyhubGlzdCBubGlzdDY0IGtubGlzdCkKLQotIyB3aGV0aGVyIHdlIG5lZWQgLWxkZXZzdGF0IGZvciBkaXNraW8gTUlCCi1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvZGlza2lvICIgPi9kZXYvbnVsbAotaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLQlBQ19DSEVDS19GVU5DKGdldGRldnMsIEFDX0RFRklORShIQVZFX0dFVERFVlMpLAotCQlBQ19DSEVDS19MSUIoZGV2c3RhdCwgZ2V0ZGV2cywgQUNfREVGSU5FKEhBVkVfR0VUREVWUykKLQkJTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGV2c3RhdCIpKQotCUFDX0NIRUNLX0ZVTkMoZ2V0ZGV2cywgQUNfREVGSU5FKEhBVkVfREVWU1RBVF9HRVRERVZTKSwKLQkJQUNfQ0hFQ0tfTElCKGRldnN0YXQsIGRldnN0YXRfZ2V0ZGV2cywgQUNfREVGSU5FKEhBVkVfREVWU1RBVF9HRVRERVZTKQotCQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkZXZzdGF0IikpCi1maQotCi0jIExNLVNFTlNPUlMtTUlCIHN1cHBvcnQKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9sbVNlbnNvcnMgIiA+IC9kZXYvbnVsbAotaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2Vuc29ycyBzdXBwb3J0XSkKLSAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgICAgICAgc29sYXJpcyopCi0gICAgICAgICAgICBBQ19DSEVDS19IRUFERVIocGljbC5oLCBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwaWNsIiwpCi0gICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKHBpY2wuaCkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgICBBQ19DSEVDS19IRUFERVIoc2Vuc29ycy9zZW5zb3JzLmgsLAotICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW2Fza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgc2Vuc29ycy9zZW5zb3JzLmhdKV0pCi0gICAgICAgICAgICBBQ19DSEVDS19MSUIoc2Vuc29ycywgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMsIFsKLQkJICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sc2Vuc29ycyIgOwotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCAtbHNlbnNvcnNdKV0pCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi1maQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBFUkwgU1VQUE9SVAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIHRlc3QgdG8gc2VlIGlmIHdlIGNhbiBhdHRlbXB0IHRvIGJ1aWxkIGVtYmVkZGVkIFBlcmwgc28gZmFyCi0jCi1pZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9InRyeSIKLSAgZmkKLSAgaWYgdGVzdCAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4IiAtbyAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgZW1iZWRfcGVybD0ibm8iCi0gIGZpCi1maQotCi0KLSMKLSMgRW1iZWRkZWQgUGVybCBzcGVjaWZpYyBzdHVmZgotIwotCi0jIHRlc3QgcGVybCBwcm9nCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgbXlwZXJsPSRhY19jdl9wYXRoX1BFUkxQUk9HCi0gICAgaWYgdGVzdCAkbXlwZXJsID0gIm5vIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgcmVxdWVzdGVkIGJ1dCBubyBwZXJsIGV4ZWN1dGFibGUgZm91bmQpCi0gICAgICBmaQotICAgIGZpCi1maQotCi0jIHRlc3QgZm9yIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydAotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICMgZW1iZWRkZWQgUGVybCByZXF1aXJlcyBzaGFyZWQgbGlicmFyaWVzCi0gICAgaWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiAhPSAieHllcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFBlcmwgc3VwcG9ydCByZXF1aXJlcyAtLWVuYWJsZS1zaGFyZWQpCi0gICAgICBmaQotICAgIGZpCi1maQotCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyhbaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXNdKQotICBpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iIC1vIC1kIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZSA7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKFtZZXNdKQotICBlbHNlCi0gICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIEFDX01TR19SRVNVTFQoW05vXSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfRVJST1IoW1BlcmwgbW9kdWxlcyBjYW4gbm90IGJlIGJ1aWx0IG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnldKQotICAgIGZpCi0gIGZpCi1maSAgICAgIAotCi0jIGNoZWNrIHRoZSBQZXJsIGNvbXBpbGVyIG5hbWUKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAjCi0gICAgIyBQZXJsIGNjIGNoZWNrcwotICAgICMKLSAgICBpZiB0ZXN0ICJ4ZW5hYmxlX3BlcmxfY2NfY2hlY2tzIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgY2NdKQotICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICBQRVJMQ0M9YCRteXBlcmwgLVY6Y2MgfCAkbXlwZXJsIC1uIC1lICdwcmludCBpZiAocy9eXHMqY2M9LihbLT1cd1xzXC9dKykuO1xzKi8kMS8pOydgCi0gICAgICBjaGFuZ2VxdW90ZShbLCBdKQotICAgICAgaWYgdGVzdCAieCRQRVJMQ0MiICE9ICJ4IiA7IHRoZW4KLSAgICAgICAgQUNfTVNHX1JFU1VMVChbJFBFUkxDQ10pCi0gICAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgICBlbHNlCi0gICAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHRvIGJ1aWxkIHdpdGhvdXQgUGVybC5dKQotICAgICAgICBmaQotICAgICAgZmkKLWZpCi0KLSMgY2hlY2sgdGhlIFBlcmwgY29tcGlsZXIgY29tcGF0aWJpbGl0eQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlcl0pCi0gICAgICBPTERDQz0kQ0MKLSAgICAgIENDPSIkUEVSTENDIgotICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW1sKLSNpZm5kZWYgX19HTlVDX18KLSAgY2hva2UgbWUKLSNlbmRpZgotICAgICAgXV0pXSwgW3BlcmxjY19pc19nbnU9eWVzXSwgW3BlcmxjY19pc19nbnU9bm9dKQotICAgICAgQUNfTVNHX1JFU1VMVChbJHBlcmxjY19pc19nbnVdKQotICAgICAgQ0M9JE9MRENDCi0gICAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieG5vIiA7IHRoZW4KLSAgICAgIAlpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAJICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgCWVsc2UKLSAgICAgIAkgIEFDX01TR19FUlJPUihbVGhpcyBidWlsZCBpcyB1c2luZyBhIEdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIG5vbi1HTlUgKG9yIG5vbi13b3JraW5nKSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS5dKQotICAgICAgCWZpCi0gICAgICBmaQotZmkKLQotIyBjaGVjayBpZiB0aGV5J3JlIGJvdGggZ251Ci1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInh5ZXMiIDsgdGhlbgotICAgICAgCWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIAkgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICAJZWxzZQotICAgICAgICAgIEFDX01TR19FUlJPUihbVGhpcyBidWlsZCBpcyB1c2luZyBhIG5vbi1HTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuXSkKLSAgICAgIAlmaQotICAgICAgZmkKLWZpCi0KLSMgd2UgaGF2ZSBlbm91Z2ggc3VwcG9ydCBmb3IgaW5zdGFsbGluZyB0aGUgbW9kdWxlcyBhdCBsZWFzdC4KLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgaW5zdGFsbF9wZXJsPSJ5ZXMiCi1lbHNlCi0gIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgZW1iZWRfcGVybD0ibm8iCi0gIGZpCi1maQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBvbiB0byBlbWJlZGRpbmcuLi4KLQotIyBjaGVjayB0aGUgY29tcGlsZXIgZmxhZ3MgZm9yIGlsbGVnYWwgdG9rZW5zCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgICAgICAgIwotICAgICAgICAgICMgUGVybCBjYyBjaGVja3MKLSAgICAgICAgICAjCi0gICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zXSkKLSAgICAgICAgICBpZiAkbXlwZXJsIC1WOmNjZmxhZ3MgfCBncmVwIExBUkdFRklMRSA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Blcmwgd2FzIGNvbXBpbGVkIHdpdGggTEFSR0VGSUxFIHN1cHBvcnQgd2hpY2ggd2lsbCBicmVhayBOZXQtU05NUC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vbmUga25vd25dKQotICAgICAgICAgIGZpCi0gICAgICBmaQotICAgIDs7Ci0KLSAgICAqKQotICAgIDs7Ci1lc2FjCi0KLQotIyBjaGVjayB0aGUgY2ZsYWdzCi1pZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgQ0ZMQUdTXSkKLSAgICBwZXJsY2ZsYWdzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGNjb3B0c2AKLSAgICBpZiB0ZXN0ICJ4JHBlcmxjZmxhZ3MiICE9ICJ4IiA7IHRoZW4KLSAgICAgIEFDX01TR19SRVNVTFQoWyRwZXJsY2ZsYWdzXSkKLSAgICAgIENGTEFHUz0iJENGTEFHUyAkcGVybGNmbGFncyIKLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBlbWJlZF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBDIGNvbXBpbGVyIGZsYWdzIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQotICAgICAgZmkKLSAgICBmaQotZmkKLQotIyBjaGVjayB0aGUgbGRmbGFncwotaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIExERkxBR1NdKQotICAgIG5ldHNubXBfcGVybGxkb3B0cz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBsZG9wdHNgCi0gICAgaWYgdGVzdCAieCRuZXRzbm1wX3BlcmxsZG9wdHMiICE9ICJ4IiA7IHRoZW4KLSAgICAgIEFDX01TR19SRVNVTFQoWyRuZXRzbm1wX3BlcmxsZG9wdHNdKQotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGVtYmVkX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxpbmtlciBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkZW5hYmxlX2FzX25lZWRlZCIgPSAieHllcyIgOyB0aGVuCi0gICAgICAjIGxpbmsgKmxpYnJhcmllcyogd2l0aCBsaWJwZXJsCi0gICAgICBQRVJMTERPUFRTX0ZPUl9MSUJTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgotICAgICAgIyBQZXJsIGNjZGxmbGFncyAoUlBBVEggdG8gbGlicGVybCwgaG9wZWZ1bGx5KQotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBDQ0RMRkxBR1NdKQotICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICBuZXRzbm1wX3BlcmxjY2RsZmxhZ3M9YCRteXBlcmwgLVY6Y2NkbGZsYWdzIHwgJG15cGVybCAtbiAtZSAncHJpbnQgJDEgJyJpZiAoL15ccypjY2RsZmxhZ3M9JyhbXiddKyknOy8pOyJgCi0gICAgICBjaGFuZ2VxdW90ZShbLCBdKQotICAgICAgQUNfTVNHX1JFU1VMVChbJG5ldHNubXBfcGVybGNjZGxmbGFnc10pCi0gICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsY2NkbGZsYWdzIgotICAgIGVsc2UKLSAgICAgICMgbGluayAqYXBwbGljYXRpb25zKiBhZ2FpbnN0IGxpYnBlcmwKLSAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCi0gICAgZmkKLWZpCi0KLSMgY2hlY2sgbmVlZGVkIGZ1bmN0aW9ucwotaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBPTERMSUJTPSIkTElCUyIKLSAgICBMSUJTPSIkTElCUyAkbmV0c25tcF9wZXJsbGRvcHRzIgotCi0gICAgIyBuZXdlciBwZXJsIHZzIG9sZGVyIHBlcmwgY2FsbCBmdW5jdGlvbnMKLSAgICBBQ19DSEVDS19GVU5DUyhldmFsX3B2KQotCi0gICAgIyBzaWdoOiB0aGlzIGhhcyBhIENBUElUQUwgUCBpbiBQZXJsLCB3aGljaCBlbmRzIHVwIGJlaW5nIHRoZSBzYW1lCi0gICAgIyBhdXRvY29uZiBkZWZpbmUgYXMgdGhlIGxvd2VyIGNhc2Ugc28gd2UgaGF2ZSB0byB0cmVhdCB0aGVtICpCT1RIKgotICAgICMgc3BlY2lhbGx5LiAgV29uZGVyZnVsLgotICAgIEFDX0NIRUNLX0ZVTkMocGVybF9ldmFsX3B2LCBBQ19ERUZJTkUoSEFWRV9QRVJMX0VWQUxfUFZfTEMpKQotICAgIEFDX0NIRUNLX0ZVTkMoUGVybF9ldmFsX3B2LCBBQ19ERUZJTkUoSEFWRV9QRVJMX0VWQUxfUFZfVUMpKQotCi0gICAgTElCUz0iJE9MRExJQlMiCi0KLQotICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfZXZhbF9wdiIgIT0gInh5ZXMiIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgZW1iZWRfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgdGhlIGV2YWxfcHYsIHBlcmxfZXZhbF9wdiBvciBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU1CRURERURfUEVSTCkKLSAgICAgIE9USEVSQUdFTlRMSUJPQkpTPSJzbm1wX3BlcmwubyIKLSAgICAgIE9USEVSQUdFTlRMSUJMT0JKUz0ic25tcF9wZXJsLmxvIgotCi0gICAgICBFTUJFRFBFUkxJTlNUQUxMPSJlbWJlZHBlcmxpbnN0YWxsIgotICAgICAgRU1CRURQRVJMVU5JTlNUQUxMPSJlbWJlZHBlcmx1bmluc3RhbGwiCi0gICAgICAjIHlheSwgd2UgZ290IGhlcmUhCi0gICAgICBlbWJlZF9wZXJsPSJ5ZXMiCi0gICAgZmkKLWVsc2UKLSAgICAgIEVNQkVEUEVSTElOU1RBTEw9IiIKLSAgICAgIEVNQkVEUEVSTFVOSU5TVEFMTD0iIgotICAgICAgZW1iZWRfcGVybD0ibm8iCi0gICAgZmkKLWZpCi1BQ19TVUJTVChFTUJFRFBFUkxJTlNUQUxMKQotQUNfU1VCU1QoRU1CRURQRVJMVU5JTlNUQUxMKQotQUNfU1VCU1QoUEVSTExET1BUU19GT1JfTElCUykKLUFDX1NVQlNUKFBFUkxMRE9QVFNfRk9SX0FQUFMpCi0KLSMgZW1iZWRkZWQgUGVybCByZXN1bHRzCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0XSkKLWlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInh5ZXMiIDsgdGhlbgotICBBQ19NU0dfQ0FDSEVfQUREKEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBkaXNhYmxlZCkKLSAgQUNfTVNHX1JFU1VMVChbZGlzYWJsZWRdKQotZWxzZQotICBBQ19NU0dfQ0FDSEVfQUREKEVtYmVkZGVkIFBlcmwgc3VwcG9ydDogICAgICBlbmFibGVkKQotICBBQ19NU0dfUkVTVUxUKFtlbmFibGVkXSkKLWZpCi0KLSMgaW5zdGFsbCBQZXJsIG1vZHVsZSByZXN1bHRzCi1QRVJMVEFSR1M9IiIKLVBFUkxJTlNUQUxMVEFSR1M9IiIKLVBFUkxVTklOU1RBTExUQVJHUz0iIgotQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXSkKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBQRVJMVEFSR1M9InBlcmxtb2R1bGVzIgotICAgIFBFUkxJTlNUQUxMVEFSR1M9InBlcmxpbnN0YWxsIgotICAgIFBFUkxVTklOU1RBTExUQVJHUz0icGVybHVuaW5zdGFsbCIKLSAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh5ZXMiIDsgdGhlbgotICAgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gZW1iZWRkYWJsZSkKLSAgICAgIEFDX01TR19SRVNVTFQoW3llcyAtLSBhbmQgZW1iZWRkYWJsZV0pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gbm90IGVtYmVkZGFibGUpCi0gICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgLS0gbm90IGVtYmVkZGFibGVdKQotICAgIGZpCi1lbHNlCi0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGRpc2FibGVkKQotZmkKLUFDX1NVQlNUKFBFUkxUQVJHUykKLUFDX1NVQlNUKFBFUkxJTlNUQUxMVEFSR1MpCi1BQ19TVUJTVChQRVJMVU5JTlNUQUxMVEFSR1MpCi1BQ19TVUJTVChQRVJMQVJHUykKLQotCi0KLSMgcmVzZXQgbGlicwotQUdFTlRMSUJTPSRMSUJTCi1MSUJTPSROT05BR0VOVExJQlMKLQotCi0KLSMgcHl0aG9uIHN1cHBvcnQKLVBZVEhPTlRBUkdTPSIiCi1QWVRIT05JTlNUQUxMVEFSR1M9IiIKLVBZVEhPTlVOSU5TVEFMTFRBUkdTPSIiCi1QWVRIT05DTEVBTlRBUkdTPSIiCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3NdKQotaWYgdGVzdCAieCRpbnN0YWxsX3B5dGhvbiIgPSAieHllcyIgOyB0aGVuCi0gICAgUFlUSE9OVEFSR1M9InB5dGhvbm1vZHVsZXMiCi0gICAgUFlUSE9OSU5TVEFMTFRBUkdTPSJweXRob25pbnN0YWxsIgotICAgIFBZVEhPTlVOSU5TVEFMTFRBUkdTPSJweXRob251bmluc3RhbGwiCi0gICAgUFlUSE9OQ0xFQU5UQVJHUz0icHl0aG9uY2xlYW4iCi0gICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgYnVpbGRpbmcgZm9yICRQWVRIT05QUk9HKQotICAgIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0gICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgZGlzYWJsZWQpCi0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQotZmkKLUFDX1NVQlNUKFBZVEhPTlRBUkdTKQotQUNfU1VCU1QoUFlUSE9OSU5TVEFMTFRBUkdTKQotQUNfU1VCU1QoUFlUSE9OVU5JTlNUQUxMVEFSR1MpCi1BQ19TVUJTVChQWVRIT05DTEVBTlRBUkdTKQotQUNfU1VCU1QoUFlUSE9OQVJHUykKLQotCi0KLSMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCi1BQ19IRUFERVJfU1REQwotQUNfSEVBREVSX0RJUkVOVAotQUNfSEVBREVSX1NZU19XQUlUCi1BQ19DSEVDS19IRUFERVJTKHN0ZGFyZy5oIHN0cmluZy5oIGZjbnRsLmggbGltaXRzLmggc3lzL2ZpbGUuaCBzeXMvaW9jdGwuaCBzeXNsb2cuaCB1bmlzdGQuaCBzeXMvZG1hcC5oIG1hY2hpbmUvcHRlLmggeHRpLmggc3lzL3NvY2tpby5oIHN5cy9zb2NrZXQuaCBzeXMvcGFyYW0uaCBzeXMvdWlvLmgpCi0jIGF0IGxlYXN0IFNvbGFyaXMgOSBuZWVkcyBzeXMvc29ja2V0LmggdG8gY29tcGlsZSBzeXMvc29ja2V0dmFyLmgKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldHZhci5oLCwsCi1BQ19JTkNMVURFU19ERUZBVUxUKFtdKQotWwotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi1dKQotIyBhdCBsZWFzdCBPcGVuQlNEIDMuNCBuZWVkcyBzeXMvcGFyYW0uaCAoTUFYUEFUSExFTikgdG8gY29tcGlsZSBzeXMvc3dhcC5oCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zd2FwLmgsLCwKLUFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCi1bCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi1dKQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdGltZW91dC5oIHN5cy91bi5oIGZzdGFiLmggc3lzL2ZzLmggbXRhYi5oIHVmcy9mcy5oIHN5cy9maXhwb2ludC5oIG1hY2hpbmUvcGFyYW0uaCBzeXMvdm0uaCB2bS92bS5oIHN5cy92bW1ldGVyLmggc3lzL3ZtcGFyYW0uaCBzeXMvdm1tYWMuaCBzeXMvdm1zeXN0bS5oIHN5cy90aW1lLmggc3lzL3RpbWVzLmggc3lzL3N0YXR2ZnMuaCBzeXMvdmZzLmggc3lzL21udHRhYi5oIHN5cy9zZWxlY3QuaCBtbnRlbnQuaCBzeXMvbW50ZW50Lmgga3N0YXQuaCB1dHNuYW1lLmggc3lzL3V0c25hbWUuaCBzeXMvY2RlZnMuaCBnZXRvcHQuaCBsb2NhbGUuaCBwdGhyZWFkLmggc3lzL2xvYWRhdmcuaCByZWdleC5oIGxpbnV4L3Rhc2tzLmggcHdkLmggZ3JwLmggdXRtcHguaCkKLSMgTmV0d29yayBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKGFycGEvaW5ldC5oIG5ldGluZXQvaW5fc3lzdG0uaCBuZXRpbmV0L2luLmggbmV0aW5ldC9pcF92YXIuaCBuZXRpbmV0L3RjcC5oIG5ldGluZXQvdGNwaXAuaCBuZXRpbmV0L3VkcC5oIG5ldC9pZi5oIG5ldGluZXQvaW5fdmFyLmggbmV0aW5ldC9pcC5oIG5ldGluZXQvaXBfaWNtcC5oIG5ldC9pZl9hcnAuaCBuZXQvaWZfbWliLmggbmV0L2lmX3Zhci5oIG5ldGluZXQvaWZfZXRoZXIuaCBuZXRpbmV0L3RjcF90aW1lci5oIG5ldGluZXQvdGNwX3Zhci5oIG5ldGluZXQvdWRwX3Zhci5oIG5ldGluZXQvaWNtcF92YXIuaCBuZXRkYi5oIG5ldC9yb3V0ZS5oLCwsCi1bWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAotI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfSUZfSAotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSNlbmRpZgotXV0pCi0jIFVGUyBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKHVmcy91ZnMvZGlub2RlLmggdWZzL3Vmcy9xdW90YS5oIHVmcy91ZnMvaW5vZGUuaCB1ZnMvZmZzL2ZzLmgsLCwKLVtbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9VRlNfVUZTX0RJTk9ERV9ICi0jaW5jbHVkZSA8dWZzL3Vmcy9kaW5vZGUuaD4KLSNlbmRpZgotI2lmIEhBVkVfVUZTX1VGU19RVU9UQV9ICi0jaW5jbHVkZSA8dWZzL3Vmcy9xdW90YS5oPgotI2VuZGlmCi1dXSkKLSMgRnJlZUJTRCByZXF1aXJlZCBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKG1hbGxvYy5oIG5ldC9pZl9kbC5oIHN5cy9zeXNjdGwuaCBzdGRsaWIuaCBuZXQvaWZfdHlwZXMuaCBzeXMvcXVldWUuaCBvc3JlbGRhdGUuaCBtYWNoaW5lL3R5cGVzLmggc3lzL3VzZXIuaCBzeXMvcHJvYy5oIHN5cy9tYnVmLmggc3lzL21vdW50Lmggc3lzL2Rrc3RhdC5oIHN5cy9jb25mLmgsLCwKLVtbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi1dXSkKLSMgTGludXgKLUFDX0NIRUNLX0hFQURFUlMobmV0aW5ldC90Y3BfZnNtLmggc3lzL3Byb3Rvc3cuaCBubGlzdC5oIGlvY3Rscy5oIGFzbS9wYWdlLmggYXNtL3R5cGVzLmggbmV0aXB4L2lweC5oIHBjaS9wY2kuaCkKLSMgU29sYXJpcwotQUNfQ0hFQ0tfSEVBREVSUyhpbmV0L21pYjIuaCkKLSMgTmV0QlNEIHJlcXVpcmVkIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlMoa3ZtLmggc3lzL3Bvb2wuaCB1dm0vdXZtX3BhcmFtLmggdXZtL3V2bV9leHRlcm4uaCB2bS92bV9wYXJhbS5oIHZtL3ZtX2V4dGVybi5oKQotIyBCU0RpMiBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKHZtL3N3YXBfcGFnZXIuaCwsLAotW1sKLSNpZiBIQVZFX1ZNX1ZNX0gKLSNpbmNsdWRlIDx2bS92bS5oPgotI2VuZGlmCi1dXSkKLSMgbGludXggZXRodG9vbAotIyByZXF1aXJlcyBzcGVjaWFsIGhhY2tzIHRvIGdldCBhcm91bmQgdmFyaW91cyBwcm9ibGVtcyBvbiBvbGRlciBsaW51eCBrZXJuZWxzLgotIyBtYWpvciB1Z2guLi4uCi1BQ19DSEVDS19IRUFERVJTKFtsaW51eC9ldGh0b29sLmhdLCwsCi1bWwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci10eXBlZGVmIF9fdTY0IHU2NDsgICAgICAgICAvKiBoYWNrLCBzbyB3ZSBtYXkgaW5jbHVkZSBrZXJuZWwncyBldGh0b29sLmggKi8KLXR5cGVkZWYgX191MzIgdTMyOyAgICAgICAgIC8qIGRpdHRvICovCi10eXBlZGVmIF9fdTE2IHUxNjsgICAgICAgICAvKiBkaXR0byAqLwotdHlwZWRlZiBfX3U4IHU4OyAgICAgICAgICAgLyogZGl0dG8gKi8KLV1dKQotIyBCU0RpMyBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zdGF0LmgpCi0jIEJTRGkzL0lSSVggaGVhZGVycwotIyBhdCBsZWFzdCBJUklYIDYuNSBuZWVkcyBfS01FTVVTRVIgYW5kIHN5cy90eXBlcy5oIChtcHJvdF90KSB0byBjb21waWxlIAotIyAgIHN5cy92bm9kZS5oCi1BQ19DSEVDS19IRUFERVJTKHN5cy92bm9kZS5oLCwsCi1bCi0jZGVmaW5lIF9LTUVNVVNFUiAxCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi1dKQotIyBhdCBsZWFzdCBJUklYIDYuNSBuZWVkcyBzeXMvc2VtYS5oIChtcmxvY2tfdCkgdG8gY29tcGlsZSBzeXMvaGFzaGluZy5oCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zZW1hLmgpCi1BQ19DSEVDS19IRUFERVJTKHN5cy9oYXNoaW5nLmgsLCwKLUFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCi1bCi0jaWYgSEFWRV9TWVNfU0VNQV9ICi0jaW5jbHVkZSA8c3lzL3NlbWEuaD4KLSNlbmRpZgotXSkKLSMgbW9yZSBJUklYIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3RjcGlwc3RhdHMuaCBzeXMvc3lzbXAuaCBzeXMvc3lzdGVtaW5mby5oIHN5cy9zeXNnZXQuaCkKLSMgQUlYIHN5c3RlbSBjb25maWd1cmF0aW9uCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zeXN0ZW1jZmcuaCkKLSMgZnJvbSBzbXV4IHN0dWZmCi1BQ19DSEVDS19IRUFERVJTKGVyci5oIHN5cy9maWxpby5oIHNndHR5LmgpCi0jIEFJWCBuZWVkcyB0aGlzIGZvciBzdGF0ZnMgZnVuYwotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3RhdGZzLmgpCi0jIGZvciBIb3N0UmVzIChIUC1VWCBhdCBsZWFzdCkKLUFDX0NIRUNLX0hFQURFUlMoc3lzL2RraW8uaCBzeXMvZGlza2lvLmggc3lzL3BzdGF0LmggbGludXgvaGRyZWcuaCBwa2dsb2NzLmgpCi0jIGZvciBIb3N0UmVzIChTb2xhcmlzIDIueCBhdCBsZWFzdCkKLUFDX0NIRUNLX0hFQURFUlMocGtnaW5mby5oLAotICAgIEFDX0NIRUNLX0xJQihhZG0sIHBrZ2luZm8sIEFDX0RFRklORShIQVZFX1BLR0lORk8pCi0gICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sYWRtIikpCi0KLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIGFpeCopICMgQUlYIHBlcmZzdGF0IGxpYnJhcnksIG5lZWRlZCBmb3IgQ1BVL21lbW9yeSBzdGF0aXN0aWNzCi0gICAgICAgIEFDX0NIRUNLX0hFQURFUlMobGlicGVyZnN0YXQuaCwKLSAgICAgICAgICAgIEFDX0NIRUNLX0xJQihwZXJmc3RhdCwgcGVyZnN0YXRfY3B1X3RvdGFsLCBBQ19ERUZJTkUoSEFWRV9QRVJGU1RBVCkKLSAgICAgICAgICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBlcmZzdGF0IiksIEFDX01TR19FUlJPUihbCi0KLSoqKiBUbyBtb25pdG9yIENQVS9tZW1vcnkgdmFsdWVzIGluIEFJWCB5b3UgbmVlZCB0byBpbnN0YWxsCi0qKiogbGlicGVyZnN0YXQgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGJvcy5wZXJmCi1dKSkKLSAgICAgICAgOzsKLSAgICBocHV4KikgIyBIUC1VWCBhZ2VudCBuZWVkcyBvcGVuX21pYgotICAgICAgICBBQ19DSEVDS19MSUIobm0sIG9wZW5fbWliLCBBQ19ERUZJTkUoSEFWRV9MSUJOTSkKLSAgICAgICAgICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbG5tIikKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICA7OwotZXNhYwotIyBXSU4zMgotIyAobWluZ3czMiBtdXN0IGxpbmsgd2luc29jayBleHBsaWNpdGx5KQotQUNfQ0hFQ0tfSEVBREVSUyh3aW5zb2NrLmgsWwotICAgICAgICBBR0VOVExJQlM9IiR7QUdFTlRMSUJTfSAtbGlwaGxwYXBpIgotICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgICAgICAgICBtaW5ndyopCi0gICAgICAgICAgICAgICAgICAgICAgICBMSUJTPSIke0xJQlN9IC1scmVnZXggLWx3czJfMzIiCi0gICAgICAgICAgICAgICAgICAgICAgICBBR0VOVExJQlM9IiR7QUdFTlRMSUJTfSAtbHJlZ2V4IC1sd3MyXzMyIgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotXSkKLUFDX0NIRUNLX0hFQURFUlMoaW8uaCkKLSMgU0NPCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zdHJlYW0uaCkKLSMgS0FNRQotQUNfQ0hFQ0tfSEVBREVSUyhuZXRpbmV0L2lwNi5oIG5ldGluZXQ2L2luNl92YXIuaCBuZXRpbmV0Ni9pbjZfcGNiLmggbmV0aW5ldDYvaXA2X3Zhci5oIG5ldGluZXQ2L3RjcDYuaCBuZXRpbmV0Ni90Y3A2X2ZzbS5oIG5ldGluZXQ2L25kNi5oIG5ldGluZXQ2L3RjcDZfdGltZXIuaCBuZXRpbmV0Ni90Y3A2X3Zhci5oLCwsCi1bWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQNl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX0lGX0gKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX1JPVVRFX0gKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSNlbmRpZgotXV0pCi0jIERZTkFNSUMgTU9EVUxFIFNVUFBPUlQKLUFDX0NIRUNLX0hFQURFUlMoZGxmY24uaCkKLSMgdGFibGVfYXJyYXkgaGVscGVyIHN1cHBvcnQKLUFDX0NIRUNLX0hFQURFUlMoc2VhcmNoLmgpCi0KLSMgUlBNIHN1YmRpcmVjdG9yeSBwYXRoIChzaWdoKQotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBBQ19DSEVDS19IRUFERVJTKHJwbS9ycG10cy5oLCBbXSwgW10sIFtbI2luY2x1ZGUgPHJwbS9ycG1saWIuaD5dXSkKLWZpCi0KLSMgT3BlbkJTRCAyLjYgbmVlZHMgbmV0aW5ldC9pbi5oIGJlZm9yZSBuZXRpbmV0L2luX3BjYi5oCi1BQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgbmV0aW5ldC9pbl9wY2IuaF1dKQotQUNfQ0FDSEVfVkFMKGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCwKLVsgQUNfVFJZX0NQUCggWwotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luX3BjYi5oPgotXSwgY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oPXllcywgY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oPW5vKV0pCi1BQ19NU0dfUkVTVUxUKCRjdl9oYXZlX25ldGluZXRfaW5fcGNiX2gpCi1pZiB0ZXN0ICRjdl9oYXZlX25ldGluZXRfaW5fcGNiX2ggPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfTkVUSU5FVF9JTl9QQ0JfSCkKLWZpCi0KLSMgTmV0QlNEIG5lZWRzIG1hY2hpbmUvdHlwZXMuaCBiZWZvcmUgc3lzL2Rpc2tsYWJlbC5oCi1BQ19NU0dfQ0hFQ0tJTkcoW1tmb3Igc3lzL2Rpc2tsYWJlbC5oXV0pCi1BQ19DQUNIRV9WQUwoY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2gsCi1bIEFDX1RSWV9DUFAoIFsKLSNpbmNsdWRlIDxtYWNoaW5lL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2Rpc2tsYWJlbC5oPgotXSwgY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2g9eWVzLCBjdl9oYXZlX3N5c19kaXNrbGFiZWxfaD1ubyldKQotQUNfTVNHX1JFU1VMVCgkY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2gpCi1pZiB0ZXN0ICRjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9TWVNfRElTS0xBQkVMX0gpCi1maQotCi0jIE9wZW5TU0wKLUFDX0NIRUNLX0hFQURFUlMob3BlbnNzbC9obWFjLmggb3BlbnNzbC9ldnAuaCBvcGVuc3NsL2Flcy5oIG9wZW5zc2wvZGVzLmggb3BlbnNzbC9kaC5oKQotQUNfQ0hFQ0tfSEVBREVSUyhzZWN1cml0eS9jcnlwdG9raS5oKQotCi0jIFByaW50aW5nCi1BQ19QQVRIX1BST0coW0xQU1RBVF9QQVRIXSxscHN0YXQpCi1pZiB0ZXN0IHgkTFBTVEFUX1BBVEggIT0geDsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRChMUFNUQVRfUEFUSCwiJExQU1RBVF9QQVRIIikKLSAgICBBQ19ERUZJTkUoSEFWRV9MUFNUQVQpCi1maQotQUNfQ0hFQ0tfRlVOQ1MoY2dldG5leHQpCi1pZiB0ZXN0IC1yIC9ldGMvcHJpbnRjYXA7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9QUklOVENBUCkKLWZpCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRdKQotdXNlb3BlbnNzbD1ubwotdXNlcGtjcz1ubwotaWYgdGVzdCAieCRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9zZWN1cml0eV9jcnlwdG9raV9oIiAhPSAieHllcyI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICBBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIFBLQ1MxMSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKLSAgICBmaQotZWxzZQotICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICB1c2Vwa2NzPXllcwotICAgIGZpCi1maQotCi1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCi0gICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgT3BlblNTTCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKLSAgICBmaQotZWxzZQotICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICB1c2VvcGVuc3NsPXllcwotICAgIGVsaWYgdGVzdCAieCR0cnlvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJ4JHVzZXBrY3MiICE9ICJ4eWVzIjsgdGhlbgotICAgICAgICAgICAgdXNlb3BlbnNzbD15ZXMKLSAgICAgICAgZmkKLSAgICBmaQotZmkKLQotaWYgdGVzdCAieCR1c2VvcGVuc3NsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgotICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Flc19oIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgICAgIGVuY3Jtb2Rlcz0iREVTIEFFUyIKLQllbHNlCi0JICAgIGVuY3Jtb2Rlcz0iREVTIgotCWZpCi0gICAgZWxzZQotICAgICAgICBlbmNybW9kZXM9IltkaXNhYmxlZF0iCi0gICAgZmkKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfT1BFTlNTTCkKLSAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQkNSWVBUTyIKLSAgICBBQ19NU0dfUkVTVUxUKE9wZW5TU0wgU3VwcG9ydCkKLWVsaWYgdGVzdCAieCR1c2Vwa2NzIiAhPSAieG5vIiA7IHRoZW4KLSAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgotICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgICBlbmNybW9kZXM9IkRFUyIKLSAgICBlbHNlCi0gICAgICAgIGVuY3Jtb2Rlcz0iW2Rpc2FibGVkXSIKLSAgICBmaQotICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9QS0NTMTEpCi0gICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJQS0NTMTEiCi0gICAgQUNfTVNHX1JFU1VMVChQS0NTMTEgU3VwcG9ydCkKLWVsaWYgdGVzdCAieCRlbmFibGVfbWQ1IiAhPSAieG5vIjsgdGhlbgotICAgIGF1dGhtb2Rlcz0iTUQ1IgotICAgIGVuY3Jtb2Rlcz0iIgotICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpCi0gICAgQUNfTVNHX1JFU1VMVChJbnRlcm5hbCBNRDUgU3VwcG9ydCkKLWZpCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLSAgICBhdXRobW9kZXM9YGVjaG8gJGF1dGhtb2RlcyB8IHNlZCAncy9NRDUgKi8vOydgCi1maQotQUNfU1VCU1QoTE5FVFNOTVBMSUJTKQotQUNfU1VCU1QoTEFHRU5UTElCUykKLQotQUNfTVNHX0NBQ0hFX0FERChBdXRoZW50aWNhdGlvbiBzdXBwb3J0OiAgICAgJGF1dGhtb2RlcykKLUFDX01TR19DQUNIRV9BREQoRW5jcnlwdGlvbiBzdXBwb3J0OiAgICAgICAgICRlbmNybW9kZXMpCi0KLWlmIHRlc3QgIngkYWxsX3dhcm5pbmdzIiAhPSAieCI7IHRoZW4KLSAgICBBQ19NU0dfQ0FDSEVfQUREKFdBUk5JTkc6ICRhbGxfd2FybmluZ3MpCi1maQotCi0jIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCi1BQ19UWVBFX09GRl9UCi1BQ19UWVBFX1BJRF9UCi1BQ19IRUFERVJfVElNRQotCi0jIHRoaXMgc2hvdWxkIHVzZSBBQ19DSEVDS19UWVBFLCBidXQgaXQncyBicm9rZW4gYXQgbGVhc3QgaW4gMi4xMy0xNAotIyBzbyB3ZSBkbyBpdCBieSBoYW5kLgotQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90XSkKLUFDX0NBQ0hFX1ZBTChhY19jdl90eXBlXyQxLAotW0FDX0VHUkVQX0NQUChbc29ja2xlbl90QDw6QF5hLXpBLVpfMC05QDo+QF0sCi1bI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFNURENfSEVBREVSUwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWZdLCBbYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzXSwgW2FjX2N2X3R5cGVfc29ja2xlbl90PW5vXSldKQotCi1BQ19NU0dfUkVTVUxUKFskYWNfY3ZfdHlwZV9zb2NrbGVuX3RdKQotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QgPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfU09DS0xFTl9UKQotZmkKLQotIyBBSVgga2VlcHMgaW5fYWRkcl90IGluIC91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgKLUFDX01TR19DSEVDS0lORyhbZm9yIGluX2FkZHJfdF0pCi1BQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV8kMSwKLVtBQ19FR1JFUF9DUFAoW2luX2FkZHJfdEA8OkBeYS16QS1aXzAtOUA6PkBdLAotWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBTVERDX0hFQURFUlMKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmXSwgW2FjX2N2X3R5cGVfaW5fYWRkcl90PXllc10sIFthY19jdl90eXBlX2luX2FkZHJfdD1ub10pXSkKLQotQUNfTVNHX1JFU1VMVChbJGFjX2N2X3R5cGVfaW5fYWRkcl90XSkKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW5fYWRkcl90ID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX0lOX0FERFJfVCkKLWZpCi0KLSMgT2xkZXIgdmVyc2lvbnMgb2YgTWluR1cgZG8gbm90IGRlZmluZSBzc2l6ZV90IGluIHN5cy90eXBlcwotQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3NpemVfdF0pCi1BQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV8kMSwKLVtBQ19FR1JFUF9DUFAoW3NzaXplX3RAPDpAXmEtekEtWl8wLTlAOj5AXSwKLVsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgU1REQ19IRUFERVJTCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5kaWZdLCBbYWNfY3ZfdHlwZV9zc2l6ZV90PXllc10sIFthY19jdl90eXBlX3NzaXplX3Q9bm9dKV0pCi0KLUFDX01TR19SRVNVTFQoWyRhY19jdl90eXBlX3NzaXplX3RdKQotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zc2l6ZV90ID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX1NTSVpFX1QsIDEsIFtEZWZpbmUgaWYgdHlwZSBzc2l6ZV90IGlzIGF2YWlsYWJsZV0pCi1maQotCi0jIENoZWNrIHBzIGFyZ3MKLUFDX0NBQ0hFX0NIRUNLKFtmb3IgY29ycmVjdCBmbGFncyB0byBwc10sIGFjX2N2X3BzX2ZsYWdzLAotW2lmIHRlc3QgImAoJFBTUFJPRyAtZSAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1lbCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZWwiCi1lbGlmIHRlc3QgImAoJFBTUFJPRyBhY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iYWN4IgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0gMj4mMSkgfCAkRUdSRVAgJyBwcyAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgYXggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iYXgiCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuIAotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbHNlCi0gIEFDX01TR19XQVJOKFtVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uXSkKLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCi1maQotXSkKLQotUFNDTUQ9IiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgotQUNfU1VCU1QoUFNDTUQpCi1BQ19ERUZJTkVfVU5RVU9URUQoUFNDTUQsICIkUFNQUk9HICRhY19jdl9wc19mbGFncyIpCi0KLSMgQ2hlY2tzIGZvciBieXRlIG9yZGVyCi1pZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCB4JHdpdGhfZW5kaWFubmVzcyA9IHhiaWc7IHRoZW4KLSAgICBBQ19ERUZJTkUoV09SRFNfQklHRU5ESUFOKQotICBlbGlmIHRlc3QgLXogJHdpdGhfZW5kaWFubmVzczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbWW91IGFyZSBjcm9zcy1jb21waWxpbmcsIGJ1dCB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0YXJnZXQncyBlbmRpYW5uZXNzXSkKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtFbmRpYW5uZXNzIGhhcyBiZWVuIHNwZWNpZmllZCwgYnV0IHlvdSBhcmUgbm90IGNyb3NzLWNvbXBpbGluZy5dKQotICBmaQotICBBQ19DX0JJR0VORElBTgotZmkKLQotIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgotQUNfRlVOQ19BTExPQ0EKLUFDX1BST0dfR0NDX1RSQURJVElPTkFMCi1BQ19GVU5DX01FTUNNUAotQUNfVFlQRV9TSUdOQUwKLUFDX0ZVTkNfR0VUTU5URU5UCi1BQ19DSEVDS19GVU5DUyhzZXRtbnRlbnQgaGFzbW50b3B0IGdldGhvc3RuYW1lIHVuYW1lIGdldHRpbWVvZmRheSBzZWxlY3Qgc29ja2V0KQotQUNfQ0hFQ0tfRlVOQ1Moc3RybGNhdCBzdHJsY3B5IHN0cnRvbCBzdHJ0b3VsKQotQUNfQ0hFQ0tfRlVOQ1Moc3RyY2hyIHN0cnRva19yIHN0cmR1cCBtZW1jcHkgbWVtbW92ZSBpbmRleCBiY29weSBzdHJjYXNlc3RyIHJlZ2NvbXApCi1BQ19DSEVDS19GVU5DUyhzaWduYWwgc2V0c2lkIHNpZ3NldCBzaWdibG9jayBzaWdob2xkIHN0cmVycm9yIHNldGVudiB2c25wcmludGYgc25wcmludGYpCi1BQ19DSEVDS19GVU5DUyhzaWdhY3Rpb24pCi1BQ19DSEVDS19GVU5DUyhyYW5kb20gbHJhbmQ0OCByYW5kKQotQUNfQ0hFQ0tfRlVOQ1MoZXhlY3Ygc3lzdGVtIGZvcmsgZ2V0cGlkIHN0cm5jYXNlY21wIHNpZ2Fscm0pCi1BQ19DSEVDS19GVU5DUyhsc2VlazY0IHByZWFkNjQpCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIE9MRExJQlM9JExJQlMKLSAgTElCUz0kTE1JQkxJQlMKLSAgQUNfQ0hFQ0tfRlVOQ1MocnBtR2V0UGF0aCkKLSAgTElCUz0kT0xETElCUwotZmkKLQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0bG9hZGF2ZykKLUFDX0NIRUNLX0ZVTkNTKGdldGFkZHJpbmZvIGdldGlwbm9kZWJ5bmFtZSBnYWlfc3RyZXJyb3IpCi0jIEJTRGkyIGZ1bmN0aW9ucyBkaWZmZXIKLUFDX0NIRUNLX0ZVTkNTKHN0YXR2ZnMgc3RhdGZzKQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0ZHRhYmxlc2l6ZSkKLSMgZnJlZWJzZDIgY2hlY2tzCi1BQ19DSEVDS19GVU5DUyhnZXRmc3N0YXQpCi1BQ19DSEVDS19GVU5DUyh1c2xlZXApCi1BQ19DSEVDS19GVU5DUyhzZXRsb2NhbGUpCi1BQ19DSEVDS19GVU5DUyh0Y2dldGF0dHIpCi1BQ19DSEVDS19GVU5DUyhpZl9uYW1laW5kZXggaWZfZnJlZW5hbWVpbmRleCkKLUFDX0NIRUNLX0ZVTkNTKGtpbmZvX2dldF9jcHVzKQotIyBzb2xhcmlzIGNoZWNrcwotQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGFnZXNpemUpCi1BQ19DSEVDS19GVU5DUyhta3N0ZW1wKQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0cHduYW0gZ2V0Z3JuYW0gc2V0Z2lkIHNldHVpZCBzZXRncm91cHMpCi0jIEhpZ2ggcmVzb2x1dGlvbiBhbGFybSBzdXBwb3J0Ci1BQ19DSEVDS19GVU5DUyhzZXRpdGltZXIpCi0jIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBjbG9jay4KLUFDX0NIRUNLX0ZVTkNTKG1rdGltZSBzdGltZSB0aW1lcyBzeXNjb25mKQotIyBtaXNzaW5nIGZyb20gaHAtdXgKLUFDX0NIRUNLX0ZVTkNTKGlmX25hbWV0b2luZGV4KQotIyBtaXNzaW5nIGZyb20gTWluR1cKLUFDX0NIRUNLX0ZVTkNTKGNob3duIGxvY2FsdGltZV9yKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmhdXSkKLUFDX0NBQ0hFX1ZBTChjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIsCi1bIEFDX0VHUkVQX0NQUCh4eHh5ZXN4eHgsCi1bCi0jaWZkZWYgSEFWRV9TWVNfSU9DVExfSAotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2VuZGlmCi0jaWZkZWYgU0lPQ0dJRkFERFIKLXh4eHllc3h4eAotI2VuZGlmCi1dLCBjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9eWVzLCBjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9bm8pXSkKLUFDX01TR19SRVNVTFQoJGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUikKLWlmIHRlc3QgJGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSKQotZmkKLQotIyB1bHRyaXgKLUFDX01TR19DSEVDS0lORyhbW2ZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCldXSkKLUFDX0NBQ0hFX1ZBTChmdV9jdl9zeXNfc3RhdF9mc19kYXRhLAotW0FDX1RSWV9SVU4oWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX0ZTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvZnNfdHlwZXMuaD4KLSNlbmRpZgotbWFpbiAoKQotewotc3RydWN0IGZzX2RhdGEgZnNkOwotLyogVWx0cml4J3Mgc3RhdGZzIHJldHVybnMgMSBmb3Igc3VjY2VzcywKLSAgIDAgZm9yIG5vdCBtb3VudGVkLCAtMSBmb3IgZmFpbHVyZS4gICovCi1leGl0IChzdGF0ZnMgKCIuIiwgJmZzZCkgIT0gMSk7Ci19XSwKLWZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9eWVzLAotZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ubywKLWZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8pXSkKLUFDX01TR19SRVNVTFQoJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEpCi1pZiB0ZXN0ICRmdV9jdl9zeXNfc3RhdF9mc19kYXRhID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShTVEFUX1NUQVRGU19GU19EQVRBKQotZmkKLQotIyBjaGVjayBpZiBjb21waWxlciBwcmUtcHJvY2Vzc29yIGRlZmluZXMgX19GVU5DVElPTl9fCi1BQ19DQUNIRV9DSEVDSyhpZiBfX0ZVTkNUSU9OX18gaXMgZGVmaW5lZCxhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVELAotWwotQUNfVFJZX0NPTVBJTEUoLFsKLSAgICBjaGFyICpjcCA9IF9fRlVOQ1RJT05fXzsKLV0sIGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQ9eWVzLCBhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEPW5vKV0pCi0KLWlmIHRlc3QgIngkYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQpCi1maQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb24gU0NPIFVuaXh3YXJlIDcuMS40IChTQ08gY29tcGlsZXIpLCAic3RhdGljIGlubGluZSIgZnVuY3Rpb25zCi0jIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGlzIGRpc2FibGVzIHRoZSB3aG9sZSBpbmxpbmUgdGhpbmcgaWYgaXQKLSMgZG9lc24ndCB3b3JrIHByb3Blcmx5LiBTaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gb3RoZXIgcGxhdGZvcm1zLgotQUNfQ0FDSEVfQ0hFQ0soW1t3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKV1dLAotICAgIFtuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZV0sCi1BQ19DT01QSUxFX0lGRUxTRShbWwotc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX2lubGluZV9mdW5jdGlvbih2b2lkKSB7Ci0gIHJldHVybiAwOwotfQotaW5saW5lIGludCBtYWluX2lubGluZV9mdW5jdGlvbiggdm9pZCApIHsKLSAgcmV0dXJuIG5lc3RlZF9pbmxpbmVfZnVuY3Rpb24oKTsKLX0KLV1dLCBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9bm8sIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMpKQotCi0jIEJ1dCwgc2FkbHksIHRoZSB1c2FnZSBvZiBpbmxpbmUgaW4gTkVUX1NOTVAgZGlzYWdyZWVzIHNlcmlvdXNseSB3aXRoIGF0IGxlYXN0Ci0jIHNvbGFyaXMyLCBzbyBkaXNhYmxlIGl0IGZvciBub3cuCi1jYXNlICIkdGFyZ2V0X29zIiBpbgotICAgIHNvbGFyaXMqKQotICAgICAgICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzCi0gICAgICAgIDs7Ci0gICAgKikKLSAgICAgICAgOzsKLWVzYWMKLQotaWYgdGVzdCAiJG5ldHNubXBfY3ZfYnJva2VuX2lubGluZSIgPSB5ZXMgOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX0JST0tFTl9JTkxJTkUsIDEsCi0gICAgICAgIFtEZWZpbmUgaWYgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIHVuc3VwcG9ydGVkXSkKLWZpCi0KLSMgb3BlbmJzZCBzZWVtcyB0byBoYXZlIGRyb3BwZWQgbV9jbHVzdGVycyBhbmQgbV9jbGZyZWUgZnJvbSBtYnN0YXQKLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX01CVUZfSAotI2luY2x1ZGUgPHN5cy9tYnVmLmg+Ci0jZW5kaWYKLV0sIG1ic3RhdCwgbV9jbHVzdGVycywgbm8pCi0KLSMgb3BlbmJzZCBzZWVtcyB0byBoYXZlIGRyb3BwZWQgbV9tYnVmcyBmcm9tIG1ic3RhdCB0b28KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX01CVUZfSAotI2luY2x1ZGUgPHN5cy9tYnVmLmg+Ci0jZW5kaWYKLV0sIG1ic3RhdCwgbV9tYnVmcywgbm8pCi0KLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgotXSwgc2lnYWN0aW9uLCBzYV9zaWdhY3Rpb24sIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLV0sIHRtLCB0bV9nbXRvZmYsIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLV0sIGlmbmV0LCBpZl9tdHUpCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X2lmbmV0X2hhc19pZl9tdHUiID0gInhubyI7IHRoZW4KLUFDX0NBQ0hFX0NIRUNLKGlmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1LCBhY19jdl9JRk5FVF9ORUVEU19LRVJORUwsCi1bCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9pZm5ldF9oYXNfaWZfbXR1IiA9ICJ4eWVzIjsgdGhlbgotICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm8KLWVsc2UKLUFDX1RSWV9DT01QSUxFKFsKLSNkZWZpbmUgX0tFUk5FTCAxCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotXSxbCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX210dSA9IDA7Ci1dLCBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9eWVzLCBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm8pCi1maQotXSkKLQotaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShJRk5FVF9ORUVEU19LRVJORUwpCi1maQotZmkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci1dLCBzb2NrYWRkciwgc2FfbGVuLCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci1dLCBzb2NrYWRkciwgc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyLCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLV0sIHNvY2thZGRyX3N0b3JhZ2UsIHNzX2ZhbWlseSwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi1dLCBzb2NrYWRkcl9zdG9yYWdlLCBfX3NzX2ZhbWlseSwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sIHJ0ZW50cnksIHJ0X2RzdCwgbm8pCi0KLSMgY2hlY2tpbmcgZm9yIDQuMyB2cyA0LjQgcnRlbnRyeS4KLUFDX0NBQ0hFX0NIRUNLKHR5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmUsYWNfY3ZfUlRFTlRSWV9UWVBFLAotWwotCi0jIDQuNCBjb21wYXQKLUFDX1RSWV9DT01QSUxFKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLFsKLQotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCi0jZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5Ci0jZW5kaWYKLQotICBzdHJ1Y3QgcnRlbnRyeSBydDsgCi0gIHJ0LnJ0X25vZGVzWzBdLnJuX2ZsYWdzID0gMTsKLSAgcnQucnRfZHN0OwotICBdLCBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjQiKQotCi0jIDQuMyBjb21wYXQKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgotQUNfVFJZX0NPTVBJTEUoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sWwotc3RydWN0IHJ0ZW50cnkgcnQ7IAotcnQucnRfaGFzaDsKLV0sIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuMyIpCi1maQotCi0jIGVsc2UgYWNrLgotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoVW5rbm93bikKLSAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJ1bmtub3duIgotZmkKLQotXSkKLQotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC40IjsgdGhlbgotICBBQ19ERUZJTkUoUlRFTlRSWV80XzQpCi1maQotCi0jIGNoZWNraW5nIGZvciBhbHBoYSdzIG9ydGVudHJ5IHZzIHJ0ZW50cnkKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4dW5rbm93biI7IHRoZW4KLUFDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3QgcnRlbnRyeSwgYWNfY3Zfc3RydWN0X3J0ZW50cnksCi1bQUNfRUdSRVBfQ1BQKG9ydGVudHJ5LCBbI2RlZmluZSBLRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1vcnRlbnRyeSwgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkgKQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieHJ0ZW50cnkiIDsgdGhlbgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKLWVsc2UKLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9Im9ydGVudHJ5IgotZmkKLV0pCi1lbHNlCi0gIFJURU5UUllfVFlQRT0icnRlbnRyeSIKLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCi1maQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiAhPSAieCI7IHRoZW4KLSAgQUNfREVGSU5FX1VOUVVPVEVEKFJURU5UUlksc3RydWN0ICR7YWNfY3Zfc3RydWN0X3J0ZW50cnl9KQotZWxzZQotICBBQ19ERUZJTkUoUlRFTlRSWSxzdHJ1Y3QgcnRlbnRyeSkKLWZpCi0KLSMgY2hlY2sgZm9yIDQuMydzIHJ0ZW50cnktPnJ0X25leHQKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuMyI7IHRoZW4KLUFDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3QgcnRlbnRyeSBoYXMgYSBydF9uZXh0IG5vZGUsIAotCWFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQsCi1bCi1BQ19UUllfQ09NUElMRShbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSxbCi1zdHJ1Y3QgcnRlbnRyeSBydDsgCi1ydC5ydF9uZXh0OwotXSwgYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dD15ZXMsICBhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0PW5vICkKLV0pCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKFJURU5UUllfUlRfTkVYVCkKLWZpCi0KLWZpCi0KLSMgQ2hlY2sgc2luNl9zY29wZV9pZCBtZW1iZXIgc3BlY2lmaWVkIGluIFJGQzI1NTMgYWRkaXRpb25hbGx5Ci1BQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWRdLCwsWwotQUNfSU5DTFVERVNfREVGQVVMVCgpCi1bI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLV1dKQotCi0jIENoZWNrIHN0cnVjdCBydGVudHJ5IGZvciB2YXJpb3VzIHRoaW5ncy4KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sIHJ0ZW50cnksIHJ0X3VuaXQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sIHJ0ZW50cnksIHJ0X3JlZmNudCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgcnRlbnRyeSwgcnRfaGFzaCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgcnRlbnRyeSwgcnRfdXNlKQotCi0jIENoZWNrIHRjcHN0YXQgZm9yIHRjcHN0YXQudGNwX3Jjdm1lbWRyb3AKLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVPVVRfSAotI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgotI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KLSNlbmRpZgotXSwgdGNwc3RhdCwgdGNwX3Jjdm1lbWRyb3ApCi0KLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi1dLCBpZmFkZHIsIGlmYV9uZXh0KQotCi0jIENoZWNrIGlmbmV0IGVudHJpZXMgdXNpbmcgbWFjcm8gZGVmaW5lZCBpbiBhY2xvY2FsLm00LgotIwotIyBYWFggIEJyb2tlbiBvbiBGcmVlQlNEIHdoZXJlIHRoZXNlIGFyZSAjZGVmaW5lJ2QgaW4gPG5ldC9pZi5oPgotIwotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2JhdWRyYXRlKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2JhdWRyYXRlLmlmc192YWx1ZSkKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9zcGVlZCkKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl90eXBlKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2ltY2FzdHMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfaXFkcm9wcykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9ub3Byb3RvKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX29tY2FzdHMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfeG5hbWUsbm8pCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfbGFzdGNoYW5nZS50dl9zZWMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfbGFzdGNoYW5nZS50dl9uc2VjKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX29ieXRlcykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9pYnl0ZXMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfYWRkcmxpc3QpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfYWRkcmhlYWQudHFoX2ZpcnN0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi1dLHVkcHN0YXQsdWRwc19kaXNjYXJkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi1dLHVkcHN0YXQsdWRwc19ub3BvcnQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLV0sdWRwc3RhdCx1ZHBzX25vcG9ydGJjYXN0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi1dLHVkcHN0YXQsdWRwc19mdWxsc29jaykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgotI2VuZGlmCi1dLGFycGhkLGF0X25leHQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX0NPTkZfSAotI2luY2x1ZGUgPHN5cy9jb25mLmg+Ci0jZW5kaWYKLV0sc3dkZXZ0LHN3X25ibGtzZW5hYmxlZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotXSxzdGF0dmZzLG1udF9kaXIpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLV0sc3RhdHZmcyxmX2Zyc2l6ZSkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotXSxzdGF0ZnMsZl9mcnNpemUpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLV0sc3RhdHZmcyxmX2ZpbGVzKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLV0sc3RhdGZzLGZfZmlsZXMpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotXSxzdGF0ZnMsZl9mZnJlZSkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi1dLHN0YXRmcyxmX2ZhdmFpbCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9OTElTVF9ICi0jaW5jbHVkZSA8bmxpc3QuaD4KLSNlbmRpZgotXSxubGlzdCxuX3ZhbHVlKQotCi0jIHN0cnVjdCBubGlzdDY0IChJUklYKQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9OTElTVF9ICi0jaW5jbHVkZSA8bmxpc3QuaD4KLSNlbmRpZgotXSxubGlzdDY0LCBuX3ZhbHVlKQotCi0jIHN0cnVjdCBldGh0b29sX2NtZAotQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGV0aHRvb2xfY21kLnNwZWVkX2hpXSwsLFsKLSAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKLSAgICBbCi0jaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jZW5kaWYKLSAgICBdXSkKLQotIyBjaGVjayBzdHJ1Y3QgaXBzdGF0IGZvciB2YXJpb3VzIHRoaW5ncwotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19jYW50Zm9yd2FyZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19jYW50ZnJhZykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19kZWxpdmVyZWQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfZnJhZ2Ryb3BwZWQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfZnJhZ3RpbWVvdXQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfZnJhZ21lbnRlZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19sb2NhbG91dCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19ub3Byb3RvKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX25vcm91dGUpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfb2Ryb3BwZWQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfb2ZyYWdtZW50cykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19yZWFzc2VtYmxlZCkKLQotIyBjaGVjayBmb3IgdGhlIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgYXR0cmlidXRlLCB3aGljaCBpbmRpY2F0ZXMgdGhlIAotIyBvbGRlciBvcGVuc3NsIHZlcnNpb24gaXMgYmVpbmcgdXNlZC4KLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfZGVzX2giID0gInh5ZXMiIDsgdGhlbgotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLV0sIGRlc19rc19zdHJ1Y3QsIHdlYWtfa2V5KQotZmkKLQotIyBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgaWYgc3lzY3RsIGlzIHVzYWJsZQotCi1pZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXM7IHRoZW4KLSAgQUNfTVNHX1dBUk4oW0Nhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGVdKQotZWxzZQotICBBQ19DQUNIRV9DSEVDSyhpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uLGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwsCi0gIFtBQ19UUllfUlVOKFsKLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9TWVNfU1lTQ1RMX0gKLSMgaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2VuZGlmCi0KLW1haW4oKSB7Ci0gIGludCAgICAgICAgICAgICAgICAgbWliWzJdOwotICBzaXplX3QgICAgICAgICAgICAgIGxlbjsKLSAgc3RydWN0IHRpbWV2YWwgYm9vdHRpbWU7Ci0gIAotICBtaWJbMF0gPSBDVExfS0VSTjsKLSAgbWliWzFdID0gS0VSTl9CT09UVElNRTsKLSAgCi0gIGxlbiA9IHNpemVvZihib290dGltZSk7Ci0gIHN5c2N0bChtaWIsIDIsICZib290dGltZSwgJmxlbiwgTlVMTCwgTlVMTCk7Ci0gIGlmIChib290dGltZS50dl9zZWMgIT0gMCkKLSAgICBleGl0KDApOwotICBlbHNlCi0gICAgZXhpdCgxKTsKLX0KLSAgXSwgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD15ZXMsIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8sIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8pXSkKLWZpCi0KLWlmIHRlc3QgIngkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpCi1maQotCi0jCi0jIEluIEZyZWVCU0QgNC54LCB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBhcmVuJ3QuICBUaGV5IGFyZSBkZWZpbmVkCi0jIGluIHRlcm1zIG9mICdoeicsIHRoZSBrZXJuZWwgY2xvY2sgdGljay4gIEluIHRoaXMgY2FzZSwKLSMgd2UgbmVlZCB0byBoYXZlIGEgbG9jYWwgdmFyaWFibGUgJ2h6JyBpbiBzY29wZSBhbmQgc2V0IHRvIGEgdXNlZnVsCi0jIHZhbHVlIHdoZW5ldmVyIHdlIHVzZSBvbmUgb2YgdGhlc2UgY29uc3RhbnRzLgotIwotQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonLGFjX2N2X1RDUFRWX05FRURTX0haLAotW0FDX0VHUkVQX0NQUChoeiwKLVsjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLVRDUFRWX1NSVFRERkxUCi1dLCBhY19jdl9UQ1BUVl9ORUVEU19IWj15ZXMsIGFjX2N2X1RDUFRWX05FRURTX0haPW5vKV0pCi0KLWlmIHRlc3QgIngkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShUQ1BUVl9ORUVEU19IWikKLWZpCi0KLSMKLSMgZGVmaW5lIHRoZSBhZ2VudCBsaWJyYXJpZXMgdmFyaWFibGVzCi0jCi1BQ19TVUJTVChMTUlCTElCUykKLUFDX1NVQlNUKEFHRU5UTElCUykKLUFDX1NVQlNUKE9USEVSQUdFTlRMSUJPQkpTKQotQUNfU1VCU1QoT1RIRVJBR0VOVExJQkxPQkpTKQotCi0jCi0jIFByb21wdCBmb3IgdmFyaW91cyBiaXRzIG9mIHVzZXIgaW5mb3JtYXRpb24KLSMKLQotaWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAieCI7IHRoZW4KLUFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMsIGFjX2N2X2hhdmVfd2FybmVkLAotWwotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotY2F0IDw8IEVPRgotCi0JICoqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAqKioqKioqKioqKioqKgotCi0JWW91IGFyZSBhYm91dCB0byBiZSBwcm9tcHRlZCB3aXRoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucy4gIEFuc3dlcgotdGhlbSBjYXJlZnVsbHksIGFzIHRoZXkgZGV0ZXJtaW5lIGhvdyB0aGUgU05NUCBhZ2VudCBhbmQgcmVsYXRlZAotYXBwbGljYXRpb25zIGFyZSB0byBmdW5jdGlvbi4KLQotCUFmdGVyIHRoZSBjb25maWd1cmUgc2NyaXB0IGZpbmlzaGVzLCB5b3UgY2FuIGJyb3dzZSB0aGUgbmV3bHkKLWNyZWF0ZWQgbmV0LXNubXAtY29uZmlnLmggZmlsZSBmb3IgZnVydGhlciAtIGxlc3MgaW1wb3J0YW50IC0gcGFyYW1ldGVycyB0bwotbW9kaWZ5LiAgQmUgY2FyZWZ1bCBpZiB5b3UgcmUtcnVuIGNvbmZpZ3VyZSB0aG91Z2gsIHNpbmNlIG5ldC1zbm1wLWNvbmZpZy5oIAotd2lsbCBiZSBvdmVyd3JpdHRlbi4KLQotLVByZXNzIHJldHVybiB0byBjb250aW51ZS0KLUVPRgotCi1yZWFkIHRtcGlucHV0Ci1hY19jdl9oYXZlX3dhcm5lZD0ieWVzIgotZWxzZQotICBhY19jdl9oYXZlX3dhcm5lZD0ibm8iCi1maQotXSkKLWVsc2UKLSAgYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKLWZpCi0KLU1FPWAkV0hPQU1JYAotaWYgdGVzdCAtZiAvZXRjL3Jlc29sdi5jb25mOyB0aGVuCi0gIExPQz1gY2F0IC9ldGMvcmVzb2x2LmNvbmYgfCBncmVwICdeZG9tYWluJyB8IHRhaWwgLTEgfCBhd2sgJ3twcmludCAkTkZ9J2AKLWVsc2UKLSAgTE9DPSJAbm8ud2hlcmUiCi1maQotCi1BQ19QUk9NUFRfVVNFUihORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OLFsKLQotKioqIERlZmF1bHQgU05NUCBWZXJzaW9uOgotCi0JU3RhcnRpbmcgd2l0aCBOZXQtU05NUCA1LjAsIHlvdSBjYW4gY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKLXRoZSBTTk1QIHByb3RvY29sIHRvIHVzZSB3aGVuIG5vIHZlcnNpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSBvbiB0aGUKLWNvbW1hbmQgbGluZSwgb3IgdmlhIGFuICdzbm1wLmNvbmYnIGZpbGUuICBJbiB0aGUgcGFzdCB0aGlzIHdhcyBzZXQgdG8KLVNOTVB2MSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8gc3dpdGNoIHRvIFNOTVB2MyBpZiBkZXNpcmVkLiAgU05NUHYzCi13aWxsIHByb3ZpZGUgYSBtb3JlIHNlY3VyZSBtYW5hZ2VtZW50IGVudmlyb25tZW50IChhbmQgdGh1cyB5b3UncmUKLWVuY291cmFnZWQgdG8gc3dpdGNoIHRvIFNOTVB2MyksIGJ1dCBtYXkgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cyB0aGF0Ci1yZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3VyLiAgKFRob3VnaCBzdWNoIHNjcmlwdHMgd2lsbCBwcm9iYWJseSBuZWVkIHRvCi1iZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJy1jJyBjb21tdW5pdHkgZmxhZyBhbnl3YXksIGFzIHRoZSBTTk1QdjEKLWNvbW1hbmQgbGluZSB1c2FnZSBoYXMgY2hhbmdlZCBhcyB3ZWxsLikuCi0gICBBdCB0aGlzIHByb21wdCB5b3UgY2FuIHNlbGVjdCBcIjFcIiwgXCIyXCIgKGZvciBTTk1QdjJjKSwgb3IgXCIzXCIgYXMKLXRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBjb21tYW5kIHRvb2xzIChzbm1wZ2V0LCAuLi4pIHRvIHVzZS4gIFRoaXMKLWNhbiBhbHdheXMgYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSAtdiBmbGFnIHRvIHRoZSB0b29scywgb3IKLWJ5IHVzaW5nIHRoZSBcImRlZlZlcnNpb25cIiB0b2tlbiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgotICAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249XCJ4XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1EZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2VdLDMsdW5xdW90ZWQpCi0KLSMgd2UgdGVzdGVkIHRoaXMgYWJvdmUgYmVmb3JlIHRoZSBwcm9tcHQsIGJ1dCB0aGUgcHJvbXB0IG1heSBnaXZlIGEgbmV3IHZhbHVlLgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIjJjIjsgdGhlbgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIyIgotZmkKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMSIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMiIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMyI7IHRoZW4KLSAgQUNfTVNHX0VSUk9SKFtJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC5dKQotZmkKLQotQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9TWVNfQ09OVEFDVCxbCi0KLSoqKiBTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbjoKLQotCURlc2NyaWJlcyB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCBhYm91dCB0aGUgaG9zdCB0aGUgYWdlbnQgaXMKLXJ1bm5pbmcgb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICBUaGlzCi1jYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUgXCJzeXNjb250YWN0XCIgc3ludGF4IGluIHRoZSBhZ2VudCdzCi1jb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtY29udGFjdD1cImNvbnRhY3RcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uXSwkTUVAJExPQyxxdW90ZWQpCi0KLUFDX1BST01QVF9VU0VSKE5FVFNOTVBfU1lTX0xPQyxbCi0KLSoqKiBTeXN0ZW0gTG9jYXRpb246Ci0KLQlEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGluZm9ybWF0aW9uIGlzCi1hdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgdGhpcyBjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUKLVwic3lzbG9jYXRpb25cIiBzeW50YXggaW4gdGhlIGFnZW50J3MgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVwibG9jYXRpb25cIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBMb2NhdGlvbl0sVW5rbm93bixxdW90ZWQpCi0KLWlmIHRlc3QgLWQgL3Zhci9sb2c7IHRoZW4KLSAgZGVmYXVsdGxvZz0iL3Zhci9sb2cvc25tcGQubG9nIgotZWxzZQotICBkZWZhdWx0bG9nPSIvdXNyL2FkbS9zbm1wZC5sb2ciCi1maQotICAKLUFDX1BST01QVF9VU0VSKE5FVFNOTVBfTE9HRklMRSxbCi0KLSoqKiBMb2dmaWxlIGxvY2F0aW9uOgotCi0JRW50ZXIgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBzbm1wZCBhZ2VudCB0byBkdW1wCi1pbmZvcm1hdGlvbiAmIGVycm9ycyB0by4gIElmIG5vdCBkZWZpbmVkIChlbnRlciB0aGUga2V5d29yZCBcIm5vbmVcIgotYXQgdGhlIHByb21wdCBiZWxvdykgdGhlIGFnZW50IHdpbGwgdXNlIHN0ZG91dCBhbmQgc3RkZXJyIGluc3RlYWQuCi0oTm90ZTogVGhpcyB2YWx1ZSBjYW4gYmUgb3Zlci1yaWRkZW4gdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuKQotICBQcm92aWRpbmcgdGhlIC0td2l0aC1sb2dmaWxlPVwicGF0aFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZV0sJGRlZmF1bHRsb2cscXVvdGVkKQotCi1pZiB0ZXN0IC1kIC92YXI7IHRoZW4KLSAgZGVmYXVsdHN0b3JlPSIvdmFyL25ldC1zbm1wIgotICB1Y2RkZWZhdWx0c3RvcmU9Ii92YXIvdWNkLXNubXAiCi1lbHNlCi0gIGRlZmF1bHRzdG9yZT0iL2V0Yy9uZXQtc25tcCIKLSAgdWNkZGVmYXVsdHN0b3JlPSIvZXRjL3VjZC1zbm1wIgotZmkKLSAgCi1BQ19QUk9NUFRfVVNFUihORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZLFsKLQotKioqIHNubXBkIHBlcnNpc3RlbnQgc3RvcmFnZSBsb2NhdGlvbjoKLQotCUVudGVyIGEgZGlyZWN0b3J5IGZvciB0aGUgU05NUCBsaWJyYXJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQKLWRhdGEgaW4gdGhlIGZvcm0gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGRlZmF1bHQgbG9jYXRpb24gaXMKLWRpZmZlcmVudCB0aGFuIHRoZSBvbGQgZGVmYXVsdCBsb2NhdGlvbiAod2hpY2ggd2FzIGZvciB1Y2Qtc25tcCkuICBJZgoteW91IHN0YXkgd2l0aCB0aGUgbmV3IHBhdGgsIEknbGwgYXNrIHlvdSBpbiBhIHNlY29uZCBpZiB5b3Ugd2lzaCB0bwotY29weSB5b3VyIGZpbGVzIG92ZXIgdG8gdGhlIG5ldyBsb2NhdGlvbiAob25jZSBvbmx5KS4gIElmIHlvdSBwaWNrCi1zb21lIG90aGVyIHBhdGggdGhhbiB0aGUgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gY29weSB0aGVtIHlvdXJzZWxmLgotVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHBpY2tpbmcgdGhlIG9sZCBwYXRoICgkdWNkZGVmYXVsdHN0b3JlKSBpZgoteW91J2QgcmF0aGVyLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8KLS4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb25dLCRkZWZhdWx0c3RvcmUscXVvdGVkKQotCi1QRVJTSVNURU5UX0RJUkVDVE9SWT0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQotQUNfU1VCU1QoUEVSU0lTVEVOVF9ESVJFQ1RPUlkpCi1VQ0RQRVJTSVNURU5UX0RJUkVDVE9SWT0kdWNkZGVmYXVsdHN0b3JlCi1BQ19TVUJTVChVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWSkKLQotaWYgdGVzdCAkUEVSU0lTVEVOVF9ESVJFQ1RPUlkgPSAiJGRlZmF1bHRzdG9yZSIgLWEgLWQgIiR1Y2RkZWZhdWx0c3RvcmUiIC1hICEgLWQgIiRkZWZhdWx0c3RvcmUiIDsgdGhlbgotQUNfQ0FDSEVfQ0hFQ0soSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeSwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTLAotWwotQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyxbCi0KLSoqKiBDb3B5aW5nIG9sZCB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzIHRvIG5ldC1zbm1wIHBlcnNpc3RlbnQgZGlyZWN0b3J5OgotCi0JV291bGQgeW91IGxpa2UgdG8gY29weSB0aGUgb2xkZXIgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcwotaW50byB5b3VyIG5ldyBuZXQtc25tcCBwZXJzaXN0ZW50IGZpbGUgcGF0aD8gIFRoaXMgd2lsbCBmdW5jdGlvbmFsbHkKLXNhdmUgYWxsIHlvdXIgdWNkLXNubXAgZGF0YSBhbmQgbGV0IGl0IGJlIHVzZWQgd2l0aGluIHRoZSBuZXQtc25tcAotdG9vbHMuICBUaGlzIHdpbGwgb25seSBiZSBkb25lIG9uY2Ugd2hlbiB5b3UgcnVuIG1ha2UgaW5zdGFsbC4gIElmIHlvdQotd2lzaCB0byBkbyB0aGlzLCBlbnRlciAieWVzIiBhdCB0aGUgcHJvbXB0LgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9XCJub1wiIChvciBcInllc1wiKQotcGFyYW1ldGVycyB0byAuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Db3B5IHVjZC1zbm1wIGRhdGEgaW50byB0aGUgbmV0LXNubXAgZGF0YSBkaXJlY3RvcnldLCJ5ZXMiKQotXSkKLWVsc2UKLWFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0ibm8iCi1maQotQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIgotQUNfU1VCU1QoQ09QWV9QRVJTSVNURU5UX0ZJTEVTKQotCi1BQ19TVUJTVChETExJQlMpCi0KLUFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKLUFDX0NPTkZJR19GSUxFUyhbc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2FwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFthcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2FnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKLUFDX0NPTkZJR19GSUxFUyhbdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbl0pCi1BQ19DT05GSUdfRklMRVMoW21hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKLUFDX0NPTkZJR19GSUxFUyhbbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCi1BQ19DT05GSUdfRklMRVMoW25ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW5dLAotCQlbY2htb2QgK3ggbmV0LXNubXAtY29uZmlnXSkKLQotQUNfQ09ORklHX0NPTU1BTkRTKFtkZWZhdWx0XSwgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oKQotCi0jCi0jIHByb3RlY3QgUEFDS0FHRV8qIHZhcmlhYmxlcwotIwotQUhfVkVSQkFUSU0oW1BBQ0tBR0VfQlVHUkVQT1JUXSxbLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCi0jaWZuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0jdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKLSNlbmRpZl0pCi1BSF9WRVJCQVRJTShbUEFDS0FHRV9OQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2lmbmRlZiBQQUNLQUdFX05BTUUKLSN1bmRlZiBQQUNLQUdFX05BTUUKLSNlbmRpZl0pCi1BSF9WRVJCQVRJTShbUEFDS0FHRV9TVFJJTkddLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIFBBQ0tBR0VfU1RSSU5HCi0jdW5kZWYgUEFDS0FHRV9TVFJJTkcKLSNlbmRpZl0pCi1BSF9WRVJCQVRJTShbUEFDS0FHRV9UQVJOQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKLSN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKLSNlbmRpZl0pCi1BSF9WRVJCQVRJTShbUEFDS0FHRV9WRVJTSU9OXSxbLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCi0jdW5kZWYgUEFDS0FHRV9WRVJTSU9OCi0jZW5kaWZdKQotCi1BQ19PVVRQVVQKLQotQUNfTVNHX0NBQ0hFX0RJU1BMQVkoKQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6IEF1dG9jb25mCi0jIGNvbW1lbnQtc3RhcnQ6ICIjIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9kaXN0L01ha2VmaWxlIGIvZGlzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFjYWYxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9NYWtlZmlsZQpAQCAtMCwwICsxLDEzMyBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICRTb3VyY2UkCisjICRSZXZpc2lvbiQKKyMgJERhdGUkCisjICRBdXRob3IkCisjICROYW1lJAorIyAkU3RhdGUkCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBNYWtlZmlsZSBmb3IgZ2VuZXJhdGluZyBycG0gcGFja2FnZSBmaWxlcyAoLnJwbSkgZm9yIG5ldC1zbm1wLgorCisjIEdOVSAnbWFrZSctc3BlY2lmaWMgZmVhdHVyZXMgYXJlIHVzZWQgaW4gdGhpcyBtYWtlZmlsZS4KKyMgT3RoZXIgbWFrZXMgbWF5IG9yIG1heSBub3Qgd29yayB3aXRoIGl0LgorIyBTZWUgaHR0cDovL3d3dy5nbnUub3JnL21hbnVhbC9tYWtlL2luZGV4Lmh0bWwgZm9yIGRldGFpbHMuCisKK1NIRUxMID0gL2Jpbi9zaAorCisjIERlZmluZSB0aGUgUlBNIHBhY2thZ2UgbmFtZQorTkFNRSA9IG5ldC1zbm1wCisKKyMgRGVmaW5lIHRoZSBkZWZhdWx0IFJQTSByZWxlYXNlIG51bWJlci4gU2V0IGJ5IFZlcnNpb24tTXVuZ2UucGwKK1ZFUlNJT04gPSA1LjcuMy5yYzMKKworVkVSU0lPTl9UQUc9YGVjaG8gRXh0LSQoVkVSU0lPTikgfCBzZWQgJ3MvXC4vLS9nOydgCisKK1dJVEhfUEVSTD0xCitFTUJFRF9QRVJMPTEKKworIyBEZWZpbmUgdGhlIFJQTSBhcmNoaXRlY3R1cmUsIGkuZS4sICdwcGMnLCAnaTM4NicsIGV0Yy4KK0FSQ0ggPSBgdW5hbWUgLWlgCisKKyMgRGlyZWN0b3J5IHN0cnVjdHVyZSBleHBlY3RlZCBieSAncnBtJyBwcm9ncmFtCitSUE1fQkFTRSA6PSAkKFBXRCkvcnBtCisKK1JQTV9UUkVFIDo9IFwKKyAgICAkKFJQTV9CQVNFKS9CVUlMRCBcCisgICAgJChSUE1fQkFTRSkvUlBNUyBcCisgICAgJChSUE1fQkFTRSkvU09VUkNFUyBcCisgICAgJChSUE1fQkFTRSkvU1BFQ1MgXAorICAgICQoUlBNX0JBU0UpL1NSUE1TCisKKy5QSE9OWToJYWxsIGNsZWFuIHJwbV9maWxlcyBiaW5hcnlfcnBtIHNvdXJjZV9ycG0gYWxsX3JwbQorCithbGw6CWFsbF9ycG1fZmlsZXMKKworIyBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcy4KK2NsZWFuOgorCXJtIC1yZiAkKFJQTV9CQVNFKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hY3JvcyBhbmQgcnVsZXMgZm9yIHVwZGF0aW5nIG5ldC1zbm1wLXgueC54LnRhci5nei4KKyMgJ3JwbScgZXhwZWN0cyBhIGNvbXByZXNzZWQgYXJjaGl2ZSAoLnRhci5neikgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyMgdG8gZXhpc3QgKGluIHRoZSBycG0vU09VUkNFUyBkaXJlY3RvcnkpIGJlZm9yZSBpdCBpcyBydW4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDVlNST09UID0gOnBzZXJ2ZXI6YW5vbnltb3VzQG5ldC1zbm1wLmN2cy5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvbmV0LXNubXAKKworUEtHX1ZFUiA6PSAkKE5BTUUpLSQoVkVSU0lPTikKKworR1pJUF9UQVIgOj0gJChSUE1fQkFTRSkvU09VUkNFUy8kKFBLR19WRVIpLnRhci5negorCitnemlwX3RhcjoJJChHWklQX1RBUikKKworJChHWklQX1RBUik6CisJQGVjaG8gIkNyZWF0aW5nIGEgY29tcHJlc3NlZCBhcmNoaXZlIG9mIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGZpbGVzLi4uIgorCShjZCAkKFJQTV9CQVNFKS9TT1VSQ0VTOyBcCisJY3ZzIC1kJChDVlNST09UKSBsb2dpbjsgXAorCWN2cyAtejMgLWQkKENWU1JPT1QpIGV4cG9ydCAtciQoVkVSU0lPTl9UQUcpICQoTkFNRSk7IFwKKwltdiAkKE5BTUUpICQoUEtHX1ZFUik7IFwKKwl0YXIgY2YgJChQS0dfVkVSKS50YXIgJChQS0dfVkVSKTsgXAorCWd6aXAgJChQS0dfVkVSKS50YXIpCisJQGVjaG8gIkEgY29tcHJlc3NlZCBhcmNoaXZlIG9mIHRoZSBwYWNrYWdlJ3Mgc291cmNlLWZpbGUgdHJlZSBoYXMgYmVlbiBjcmVhdGVkLiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWNyb3MgYW5kIHJ1bGVzIGZvciB1cGRhdGluZyB0aGUgYmluYXJ5IGFuZCBzb3VyY2UgUlBNIHBhY2thZ2UgZmlsZXMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lICclX3RvcGRpcicgdG8gYWxsb3cgYW4gUlBNIHBhY2thZ2UgZmlsZSB0byBiZSBidWlsdCBhbnl3aGVyZSwKKyMgaW5zdGVhZCBvZiBpbiB0aGUgL3Vzci9zcmMvcmVkaGF0IGRpcmVjdG9yeSB0cmVlLgorIworIyBEb24ndCB3YW50ICdycG1idWlsZCcgdG8gc3RyaXAgeW91ciBleGVjdXRhYmxlIHByb2dyYW1zPworIyBUaGVuIGFkZCB0aGlzIGxpbmU6CisjICAgLS1kZWZpbmU9J19vc19pbnN0YWxsX3Bvc3QgL3Vzci9saWIvcnBtL2JycC1jb21wcmVzcycgXAorIyB0byB0aGUgUlBNX09QVFMgbWFjcm8gZGVmaW5pdGlvbi4gIFRoaXMgd2lsbCBlbGltaW5hdGUgdGhlIAorIyBzdHJpcHBpbmcgb2YgYmluYXJpZXMsIGJ1dCBzdGlsbCByZXRhaW4gdGhlIGNvbXByZXNzaW9uIG9mCisjIG1hbnVhbCBwYWdlcy4KKyMKK2lmZXEgKCQoV0lUSF9QRVJMKSwwKQorUEVSTE9QVFMgPSAtLXdpdGhvdXQgcGVybF9tb2R1bGVzCitlbmRpZgoraWZlcSAoJChFTUJFRF9QRVJMKSwwKQorUEVSTE9QVFMgKz0gLS13aXRob3V0IGVtYmVkZGVkX3BlcmwKK2VuZGlmCisKK1JQTV9PUFRTIDo9IFwKKyAgICAtLWRlZmluZT0nX3RvcGRpciAkKFJQTV9CQVNFKScgXAorICAgIC0tZGVmaW5lPSdfaW5jbHVkZWRpciAvdXNyL2luY2x1ZGUvbmV0LXNubXAnIFwKKyAgICAtLXRhcmdldCAkKEFSQ0gpICQoUEVSTE9QVFMpCisKK1NQRUNfRklMRSAgOj0gJChOQU1FKS5zcGVjCitSUE1fU1BFQyAgIDo9ICQoUlBNX0JBU0UpL1NQRUNTLyQoU1BFQ19GSUxFKQorCitCSU5BUllfUlBNIDo9ICQoUlBNX0JBU0UpL1JQTVMvJChBUkNIKS8kKFBLR19WRVIpLSQoUkVMRUFTRSkuJChBUkNIKS5ycG0KK1NPVVJDRV9SUE0gOj0gJChSUE1fQkFTRSkvU1JQTVMvJChQS0dfVkVSKS0kKFJFTEVBU0UpLnNyYy5ycG0KKworcnBtX2ZpbGVzOgkkKEdaSVBfVEFSKSBhbGxfcnBtX2ZpbGVzCitiaW5hcnlfcnBtOgkkKEJJTkFSWV9SUE0pCitzb3VyY2VfcnBtOgkkKFNPVVJDRV9SUE0pCitycG1fdHJlZTogJChSUE1fVFJFRSkKKworYWxsX3JwbV9maWxlczoJJChSUE1fVFJFRSkgJChSUE1fU1BFQykKKwkoY2QgJChSUE1fQkFTRSkvU1BFQ1M7IFwKKwlycG1idWlsZCAtYmEgJChSUE1fT1BUUykgJChTUEVDX0ZJTEUpKQorCiskKEJJTkFSWV9SUE0pOgkkKFJQTV9UUkVFKSAkKFJQTV9TUEVDKQorCShjZCAkKFJQTV9CQVNFKS9TUEVDUzsgXAorCXJwbWJ1aWxkIC1iYiAkKFJQTV9PUFRTKSAkKFNQRUNfRklMRSkpCisKKyQoU09VUkNFX1JQTSk6CSQoUlBNX1RSRUUpICQoUlBNX1NQRUMpCisJKGNkICQoUlBNX0JBU0UpL1NQRUNTOyBcCisJcnBtYnVpbGQgLWJzICQoUlBNX09QVFMpICQoU1BFQ19GSUxFKSkKKworJChSUE1fU1BFQyk6CSQoUlBNX0JBU0UpL1NQRUNTICQoU1BFQ19GSUxFKQorCWNwICQoU1BFQ19GSUxFKSAkQAorCiskKFJQTV9UUkVFKToKKwlta2RpciAtcCAkQAorCiskKFNQRUNfRklMRSk6CisJQGVjaG8gIkVSUk9SOiBtaXNzaW5nICckKFNQRUNfRklMRSknIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIKKwlAZXhpdCAxCisKK0ZPUkNFOgorCisjID09PSBFbmQgb2YgTWFrZWZpbGUgPT09ICMKZGlmZiAtLWdpdCBhL2Rpc3QvUkVBRE1FLmJ1aWxkLXNjcmlwdHMgYi9kaXN0L1JFQURNRS5idWlsZC1zY3JpcHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L1JFQURNRS5idWlsZC1zY3JpcHRzCkBAIC0wLDAgKzEsMTA4IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogUkVBRE1FLmJ1aWxkLXNjcmlwdHMKKyoKKyogQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisqCisqICRJZCQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1RoZSBhdXRvbWF0ZWQgYnVpbGQgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBydW4gY29uZmlndXJlLCAnbWFrZSBhbGwnLAorJ21ha2UgdGVzdCcgYW5kICdtYWtlIGluc3RhbGwnLiBMb2cgZmlsZXMgYXJlIGtlcHQgZm9yIGVhY2ggc3RlcCwgYW5kIHRoZQorc2NyaXB0cyBzaG91bGQgYWJvcnQgd2hlbiBlcnJvcnMgb2NjdXIuCisKK1RoZSB1c2FnZSBvZiBuc2ItcGFja2FnZSBpczoKKworIFVzYWdlOiBuc2ItcGFja2FnZSBbLWNdIFstZF0gWy1wXSBbLXMgU1JDRF0gWy1iIEJVSUxERF0gWy1pIElOU1RBTExEXSBWRVJTSU9OCisgIAorICAgIFZFUlNJT04gICAgOiByZWxlYXNlIG51bWJlciAoZWcgNS4yLjIpCisgICAgLXMgU1JDRElSICA6IHNvdXJlIGRpcmVjdG9yeSBbJEhPTUUvc3JjL25ldC1zbm1wLVZFUlNJT05dCisgICAgLWIgQlVJTEREICA6IGJ1aWxkIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXQorICAgICAgICAgICAgICAgICBOT1RFLXBsYXRmb3JtIHdpbGwgYmUgYXBwZW5kZWQgdG8gYnVpbGQgZGlyZWN0b3J5CisgICAgLWkgSU5TVEFMTEQ6IGluc3RhbGwgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9cJFBMQVRGT1JNL3Vzci9sb2NhbF0KKyAgIAorICAgIC1jIDogc2tpcCBjb25maWd1cmUKKyAgICAtZCA6IGRpcnR5IGJ1aWxkIChkb24ndCBtYWtlIGRpc3RjbGVhbikKKyAgICAtbSA6IHNraXAgJ21ha2UgYWxsJworICAgIC1wIDogZG9uJ3QgcGF1c2UgYXQgcHJvbXB0cyBpbiBiZXR3ZWVuIHN0YWdlcworICAgIC10IDogc2tpcCAnbWFrZSB0ZXN0JworCisKK1RoZSBkZWZhdWx0cyBhc3N1bWUgeW91IGhhdmUgYSAnc3JjJywgJ2J1aWxkJyBhbmQgJ2JpbmFyaWVzJyBkaXJlY3RvcnkgaW4KK3lvdXIgaG9tZSBkaXJlY3RvcnkuCisKKworCitSZWNvbW1lbmRlZCBQcm9jZWR1cmUKKz09PT09PT09PT09PT09PT09PT09PQorCisxKSBMb2cgaW50byBTb3VyY2Vmb3JnZSBDb21waWxlIEZhcm0gU2VydmVyCisKKzIpIFVwZGF0ZSBzb3VyY2UgKHRoaXMgd2lsbCBsaWtlbHkgYmUgYXV0b21hdGVkIGluIHRoZSBmdXR1cmUpCisKKyAgIEZvciBleGFtcGxlLCBmb3IgcmVsZWFzZSA1LjAuMzoKKworICAgJCBjZCB+L3NyYworICAgJCBDVlNfUlNIPXNzaCBjdnMgLWQgJFVTRVJAY3ZzLm5ldC1zbm1wLm9yZzovY3Zzcm9vdC9uZXQtc25tcCBcCisgICAgICAgICAtcSBjbyAtciBFeHQtNS0wLTMgLWQgfi9zcmMvbmV0LXNubXAtRXh0LTUtMC0zIG5ldC1zbm1wCisKKzMpIFJ1biB0aGUgcGFja2FnZSBzY3JpcHQuIAorCisgICAkICRIT01FL3NyYy9uZXQtc25tcC1jdnMvZGlzdC9uc2ItcGFja2FnZSAtciBcCisgICAgICAgIC1zICRIT01FL3NyYy9uZXQtc25tcC01LjAuNSA1LjAuNQorCis0KSBDcmVhdGUgdGFyYmFsbCAoYXNzdW1pbmcgbm8gZXJyb3JzOyBzZWUgbmV4dCBzZWN0aW9uIGlmIHRoZXJlIGFyZSBlcnJvcnMpCisKKyAgICQgY2Qgfi9idWlsZC9gbnNiLXBsYXRmb3JtYAorICAgJCB0YXIgY3ZmIG5ldC1zbm1wLTUuMC4zLWBuc2ItcGxhdGZvcm1gLnRhciB1c3IKKyAgICQgZ3ppcCAtLWJlc3QgKi50YXIKKworNSkgQ29weSB0YXJiYWxsIHRvIFNvdXJjZWZvcmdlIHNoZWxsIHNldmVyCisKKyAgICQgc2NwICouZ3ogbmV0LXNubXAuc291cmNlZm9yZ2UubmV0On4vYmluYXJpZXMvCisKKzYpIExvZyBvdXQgb2YgY29tcGlsZSBmYXJtIHNlcnZlciwgbG9nIGludG8gc2hlbGwgc2VydmVyCisKKzcpIFVwbG9hZCB0byBTb3VyY2Vmb3JnZQorCisgICAkIGZ0cCB1cGxvYWQuc291cmNlZm9yZ2UubmV0CisgICAgID5iaW4KKyAgICAgPnB1dCAqLmd6CisKKzgpIFVwZGF0ZSBiaW5hcmllcyB2aWEgU291cmNlZm9yZ2UgYWRtaW4gcGFnZQorCisKKworQnVpbGRzIHdpdGggZXJyb3JzCis9PT09PT09PT09PT09PT09PT0KKworU2hvdWxkIHlvdSBlbmNvdW50ZXIgYSBidWlsZCBlcnJvciwgeW91IHdpbGwgbW9zdCBsaWtlbHkgd2FudCB0byBza2lwIHRoZQorJ21ha2UgZGlzdGNsZWFuJyBhbmQgY29uZmlndXJlIHN0ZXAgKGFzc3VtaW5nIHRoZSBwcm9ibGVtIHdhc24ndCB3aXRoCitjb25maWd1cmUhKS4gVG8gZG8gdGhpcywgc3BlY2lmeSB0aGUgJ2RpcnR5JyBhbmQgJ3NraXAgY29uZmlndXJlJyBvcHRpb25zOgorCisgICAkIG5zYi1wYWNrYWdlIC1wIC1kIC1jIEV4dC01LTAtMworCisKK1Nob3VsZCB0aGUgYnVpbGQgc3VjY2VlZCwgYnV0IHNvbWUgdGVzdHMgZmFpbCBkdXJpbmcgJ21ha2UgdGVzdCcsIHlvdSBwcm9iYWJseQorY2FuIHRvIHNraXAgdGhlIHRlc3Qgc3RlcCB0byBnZXQgdG8gdGhlIGluc3RhbGwgc3RlcDoKKworICAgJCBuc2ItcGFja2FnZSAtcCAtZCAtYyAtdCBFeHQtNS0wLTMKKworCitPVEhFUiBQUk9CTEVNUworLS0tLS0tLS0tLS0tLS0KKyogIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMiCisgIAorICAgSXQncyBhIGhhY2ssIGJ1dCBzeW1saW5rIG5zYi1mdW5jdGlvbnMgYW5kIG5zYi1wYWNrYWdlIHRvIHlvdXIgbG9jYWwKKyAgIGJpbiBkaXJlY3RvcnkgKCRIT01FL2JpbikuICBJJ20gdHJ5aW5nIHRvIHRoaW5rIG9mIGEgYmV0dGVyIHNvbHV0aW9uLgorCisqICJnY2M6IHNubXBfdmVyc2lvbi5sbzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKworICAgVGhpcyBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHlvdSBoYXZlIHByZXZpb3VzbHkgYnVpbGQgaW4geW91cgorICAgc291cmNlIGRpcmVjdG9yeS4gJ21ha2UgZGlzdGNsZWFuJyBpbiB5b3VyIHNvdXJjZSBkaXJlY3RvcnksIG9yCisgICBjaGVjayBvdXQgYSBmcmVzaCBuZXcgdmVyc2lvbiBmcm9tIENWUy4KZGlmZiAtLWdpdCBhL2Rpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMgYi9kaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTQxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TCkBAIC0wLDAgKzEsMTAwMSBAQAorVGhpcyBpcyBhIHN1bW1hcnkgb2YgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIG1ha2UgYSBuZXcgcmVsZWFzZS4gIERvIG5vdAorYXR0ZW1wdCB0byBydW4gdGhlc2UgbWFudWFsbHkgLSBpbnN0ZWFkIHVzZSB0aGUgJ21ha2VyZWxlYXNlJworYXBwbGljYXRpb24gYW5kIG1ha2VyZWxlYXNlLnhtbCBmaWxlLiAgR2V0ICdtYWtlcmVsZWFzZScgZnJvbSB0aGUKK21ha2VyZWxlYXNlIFNWTiByZXBvc2l0b3J5OgorCisgIHN2biBjbyBodHRwczovL21ha2VyZWxlYXNlLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9tYWtlcmVsZWFzZS90cnVuay9tYWtlcmVsZWFzZQorICBjZCBtYWtlcmVsZWFzZQorICBwZXJsIE1ha2VmaWxlLlBMCisgIG1ha2UKKyAgc3VkbyBtYWtlIGluc3RhbGwKKworVGhlbiB0byBydW4gaXQgZnJvbSBhIGRpcmVjdG9yeSB0byByZWxlYXNlOgorCisgIG1ha2VyZWxlYXNlIC1jIE5FVFNOTVBUUlVOSy9kaXN0L21ha2VyZWxlYXNlLnhtbAorCitJdCB3aWxsIHByb21wdCB5b3UgZm9yIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gYW5kIHRhc2tzIHRvIGJlIGRvbmUuCisKK0lNUE9SVEFOVCBOT1RFOgorICAgIERvbid0ICpldmVyKiByZWxlYXNlIGEgc2Vjb25kIHRhciBiYWxsIHVuZGVyIHRoZSBzYW1lIG5hbWUgYXMgdGhlCisgICAgZmlyc3QuICBJdCdzIG11Y2ggbXVjaCBtdWNoIGJldHRlciB0byByZWxlYXNlIGFub3RoZXIgdmVyc2lvbgorICAgIGluc3RlYWQsIHNpbmNlIHlvdSBkb24ndCBoYXZlIHRvIGZpZ3VyZSBvdXQgZnJvbSB0aGUgYnVnIHJlcG9ydHMKKyAgICB0aGF0IGEgdXNlciByZWFsbHkgZ3JhYmJlZCB0aGUgZmlyc3Qgc25hcHNob3QgaW5zdGVhZCBvZiB0aGUKKyAgICBzZWNvbmQgd2hlbiB0aGV5IGNvbXBsYWluIGFib3V0IHZlcnNpb24gIlhYWCIgbm90IHdvcmtpbmcuCisKKz09PT09PSBtYWtlcmVsZWFzZSAtbiBvdXRwdXQgc2hvd2luZyBtYWtlcmVsZWFzZSBkb2N1bWVudGVkIHN0ZXBzID09PT09PQorCitTVEVQOiAxOiBTZXR1cCBTdGVwcworCisgIFRoaXMgc2V0IG9mIHN0ZXBzIHdpbGwgZG8gc29tZSBwcmVsaW1pbmFyeSAic2FmZXR5IiBjaGVja3MgdG8gZW5zdXJlIHRoZQorICBsb2NhbCBlbnZpcm9ubWVudCBpcyBvayBhbmQgc2V0dXAgc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24uCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMSA9PT09PQorCitTVEVQOiAxLjE6IFNldHVwIENoZWNjaworCisgIFRoaXMgc2hvdWxkIHNob3cgdGhlIGxhc3QgdmVyc2lvbiBudW1iZXIgcHVibGlzaGVkIGluIHRoaXMgYnJhbmNoIGJ5CisgIGxvb2tpbmcgYXQgdGhlIHRpbWUgbGluZSBpbiB0aGUgUkVBRE1FIGZpbGU6CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGhlYWQgLTEgUkVBRE1FCisKK1NURVA6IDEuMjogUGljayBhIFZlcnNpb24gTnVtYmVyCisKKyAgUGxlYXNlIGVudGVyIHRoZSB2ZXJzaW9uIG51bWJlciB0byBwdWJsaXNoLiAgTmV0LVNOTVAgY29udmVudGlvbiBkaWN0YXRlcworICB0aGF0IHRoaXMgYmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIDUuNCBvciA1LjQuMS4gIFByZS1yZWxlYXNlcyB0aGF0IG9jY3VyCisgIGJlZm9yZSBhIGJyYW5jaCBmcmVlemVzIHNob3VsZCBiZSBhcHBlbmRlZCB3aXRoICIucHJlTiIgbGlrZSA1LjQuMS5wcmUyLiAKKyAgUmVsZWFzZS1jYW5kaWRhdGVzIHNob3VsZCBiZSBsYWJlbGVkICIucmNOIiBsaWtlIDUuNC4xLnJjMS4KKworICBEZWNpZGUgb24gYSB2YWx1ZSBmb3IgcGFyYW1ldGVyICdWRVJTSU9OJworCisgICAgcGFyYW1ldGVyOiBWRVJTSU9OCisKKyAgICBwcm9tcHQ6ICAgIEVudGVyIHRoZSBuZXcgdmVyc2lvbiBudW1iZXI6CisKK1NURVA6IDEuMzogRGVmaW5pbmcgYSBzZWNvbmQgaW50ZXJuYWwgdmVyc2lvbiBzdHJpbmcKKworICBJbnRlcm5hbCBwZXJsIGNvZGUgd2lsbCBiZSBleGVjdXRlZAorCitTVEVQOiAxLjQ6IFJlbGVhc2UgUGFyYW1ldGVyIEluZm9ybWF0aW9uCisKKyAgSGVyZSBpcyB0aGUgY29uZmlndXJlZCBpbmZvcm1hdGlvbiB3ZSdsbCBiZSB1c2luZzoKKworICBWRVJTSU9OOgkJICAge1ZFUlNJT059CisKKyAgVkVSU0lPTiB3aXRoIGRhc2hlczoJICAge1ZFUlNJT05EQVNIRVN9CisKKyAgRmxvYXRpbmcgcG9pbnQgVkVSU0lPTjogIHtWRVJTSU9ORkxPQVR9CisKKyAgU1ZOIEJyYW5jaCBVUkw6CSAgIHtCUkFOQ0hQQVRIfQorCitTVEVQOiAxLjU6IHVwZGF0ZQorCisgIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSBpcyB1cCB0byBkYXRlIGFuZCBtYXRjaGVzIHRoZSBsYXRlc3QKKyAgc291cmNlcyBpbiB0aGlzIGJyYW5jaC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIHVwZGF0ZQorCitTVEVQOiAxLjY6IENoZWNrIGZvciBjaGFuZ2VzCisKKyAgVGhpcyBzdGVwcyBsb29rcyBmb3Igb3V0c3RhbmRpbmcgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuICBUaGVyZQorICBzaG91bGQgYmUgbm8gb3V0c3RhbmRpbmcgbW9kaWZpY2F0aW9ucyEgIElmIHRoaXMgc3RlcCBmaW5kcyBvdXRzdGFuZGluZworICBtb2RpZmllZCBmaWxlcyB5b3UgbmVlZCB0byBjaGVjayB0aGVtIGluIG9yIHJldmVydCB0aGVtIGJlZm9yZQorICBjb250aW51aW5nIQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gLXUgc3RhdHVzIHwgZWdyZXAgJ15bXlw/XScKKworICAoTGVhdmluZyBTdGVwOiAxKQorCitTVEVQOiAyOiBTb3VyY2UgQ29kZSBTZXR1cAorCisgIFRoaXMgc2V0IG9mIHN0ZXBzIHdpbGwgbW9kaWZ5IHZhcmlvdXMgcGxhY2VzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgdHJlZQorICB0byBicmluZyBpdCB1cCB0byBkYXRlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciBhYm91dCB0byBiZSBwdWJsaXNoZWQuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMiA9PT09PQorCitTVEVQOiAyLjE6IExpYnRvb2wgLyBMaWJyYXJ5IHZlcnNpb25pbmcgc2V0dXAKKworICBUaGVzZSBzdGVwcyB3aWxsIG1vZGlmeSB0aGUgdmFyaW91cyBmaWxlcyBpbiB0aGUgc291cmNlIHRyZWUgdGhhdCBjb250YWluCisgIHRoZSB2ZXJzaW9uIG51bWJlciwgc2hvdyB5b3UgdGhlIGNoYW5nZXMgdGhhdCB3aWxsIGJlIG1hZGUgYW5kIHRoZW4gY2hlY2sKKyAgaW4gdGhlIHJlc3VsdGluZyBjaGFuZ2VzIGlmIHlvdSBhcHByb3ZlIG9mIHRoZW0uCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMi4xID09PT09CisKK1NURVA6IDIuMS4xOiB2ZXJzaW9uOmxpYnRvb2xtYW51YWxlZGl0CisKKyAgWW91IChtYXkpIG5lZWQgdG8gZWRpdCBNYWtlZmlsZS50b3AgdG8gdXBkYXRlIHRoZSBsaWJyYXJ5IHZlcnNpb24KKyAgbnVtYmVyaW5nICh1c3VhbGx5IGp1c3QgZm9yIHRoZSBmaXJzdCBwcmUtcmVsZWFzZSBvZiBhIGdpdmVuIHZlcnNpb24pLiAKKyAgU2VlIHRoZSBjb21tZW50cyBpbiBSRUxFQVNFLUlOU1RSVUNUSU9OUyBhYm91dCBMSUJDVVJSRU5ULCBMSUJBR0UgYW5kCisgIExJQlJFVklTSU9OLgorCisgIFRoaXMgc2NyaXB0IHdpbGwgY29tbWl0IHRoZSBmaWxlIGZvciB5b3UgYWZ0ZXIgeW91J3JlIGRvbmUuCisKK1NURVA6IDIuMS4yOiB2ZXJzaW9uOmNvbW1pdAorCisgIFdlJ2xsIG5vdyBjb21taXQgdGhlIE1ha2VmaWxlLnRvcCBmaWxlIGlmIHlvdSd2ZSBtb2RpZmllZCBpdC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAidmVyc2lvbiB1cGRhdGUiIE1ha2VmaWxlLnRvcAorCisgIChMZWF2aW5nIFN0ZXA6IDIuMSkKKworU1RFUDogMi4yOiBDaGFuZ2UgVGhlIFZlcnNpb24gTnVtYmVyCisKKyAgVGhlc2Ugc3RlcHMgd2lsbCBtb2RpZnkgdGhlIHZhcmlvdXMgZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlIHRoYXQgY29udGFpbgorICB0aGUgdmVyc2lvbiBudW1iZXIsIHNob3cgeW91IHRoZSBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBtYWRlIGFuZCB0aGVuIGNoZWNrCisgIGluIHRoZSByZXN1bHRpbmcgY2hhbmdlcyBpZiB5b3UgYXBwcm92ZSBvZiB0aGVtLgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDIuMiA9PT09PQorCitTVEVQOiAyLjIuMTogTW9kaWZ5IHRoZSBzb3VyY2UgZmlsZXMKKworICBXZSB3aWxsIG5vdyBtb2RpZnkgZmlsZXMgdGhyb3VnaCB0aGUgY29kZSB0byByZXBsYWNlIHRoZSB2ZXJzaW9uIG51bWJlcgorICB3aXRoIHRoZSBuZXdlciBvbmUuCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnVkVSU0lPTiA9ICcoLiopJycgd2l0aDogJ1ZFUlNJT04gPSBcJ3tWRVJTSU9ORkxPQVR9XCcnCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzkwNjQpCisKKyAgICAgIHBlcmwvU05NUC9TTk1QLnBtCisKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0KKworICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KKworICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKworICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKworICAgICAgcGVybC9PSUQvT0lELnBtCisKKyAgICAgIHBlcmwvQVNOL0FTTi5wbQorCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtCisKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL0Zvcm1hdC5wbQorCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnTmV0U25tcFZlcnNpb25JbmZvID0gIltcZFwuXSsiJyB3aXRoOiAnTmV0U25tcFZlcnNpb25JbmZvID0KKyAgIntWRVJTSU9OfSInCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhmZDQpCisKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmMKKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnVmVyc2lvbjogW1wuMC05YS16QS1aXSsnIHdpdGg6ICdWZXJzaW9uOiB7VkVSU0lPTn0nCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhmNDQpCisKKyAgICAgIFJFQURNRQorCisgICAgICBGQVEKKworICAgICAgZGlzdC9uZXQtc25tcC5zcGVjCisKKworCisgIE1vZGlmeWluZyBmaWxlczoKKworICAgIHJlcGxhY2luZzogJ1ZFUlNJT04gPSBbXC4wLTlhLXpBLVpdKycgd2l0aDogJ1ZFUlNJT04gPSB7VkVSU0lPTn0nCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhlZDQpCisKKyAgICAgIGRpc3QvTWFrZWZpbGUKKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnQUNfSU5JVFwoXFtOZXQtU05NUFxdLCBcWyhbXlxdXSspXF0nIHdpdGg6CisgICdBQ19JTklUKFtOZXQtU05NUF0sIFt7VkVSU0lPTn1dJworCisKKyAgICBmaWxlczogIGdsb2I9QVJSQVkoMHg4ZGM4ZTY0KQorCisgICAgICBjb25maWd1cmUuaW4KKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnTmV0U25tcFZlcnNpb25JbmZvID0gIlteIl0rIicgd2l0aDogJ05ldFNubXBWZXJzaW9uSW5mbyA9CisgICJ7VkVSU0lPTn0iJworCisKKyAgICBmaWxlczogIGdsb2I9QVJSQVkoMHg4ZGM4ZGY0KQorCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jCisKKworCitTVEVQOiAyLjIuMjogUnVubmluZyBhdXRvY29uZiB0byByZWJ1aWxkIGNvbmZpZ3VyZQorCisgIFdlIG1vZGlmaWVkIGNvbmZpZ3VyZS5pbiwgc28gd2Ugbm93IG5lZWQgdG8gcnVuIGF1dG9jb25mIHRvIHJlYnVpbGQKKyAgY29uZmlndXJlLgorCisgIFhYWDogaW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBjb3JyZWN0IGF1dG9jb25mIHZlcnNpb24gbnVtYmVyCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGF1dG9jb25mCisKK1NURVA6IDIuMi4zOiBSdW5uaW5nIHN2biBkaWZmIHRvIGNoZWNrIGNoYW5nZXMKKworICBDaGVjayB0aGUgZm9sbG93aW5nIGNoYW5nZXMgZm9yIHByb3BlciB2ZXJzaW9uIG51bWJlciBkaWZmZXJlbmNlcyBiZWZvcmUKKyAgd2UgY29tbWl0IHRoZSBjaGFuY2VzLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gZGlmZgorCitTVEVQOiAyLjIuNDogUnVubmluZyBzdm4gY29tbWl0IHRvIGNvbW1pdCB0aGUgY2hhbmdlcworCisgIENoZWNrIHRoZSBjaGFuZ2VzIGluIHRoZSBhYm92ZSBkaWZmIGFuZCB0aGVuIHdlJ2xsIGNvbW1pdCB0aGUgcmVzdWx0cworICBoZXJlIGlmIHRoZXkgbG9vayBvay4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAiVmVyc2lvbiBudW1iZXIgdXBkYXRlIgorCisgIChMZWF2aW5nIFN0ZXA6IDIuMikKKworU1RFUDogMi4zOiBkb2NzOm1ha2UKKworICBUaGlzIHN0ZXAgd2lsbCBjcmVhdGUgbWFudWFsIHBhZ2VzIGZyb20gZG94eWdlbiBpbnN0cnVtZW50ZWQgY29kZSBmaWxlcy4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBkb2NzCisKKyAgICBtYWtlIG1hbmNwCisKK1NURVA6IDIuNDogZG9jczp1cGRhdGUKKworICBUaGlzIHdpbGwgcnVuIHN2biBzdGF0dXMgdG8gZmlndXJlIG91dCB3aGF0IGZpbGVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUKKyAgcHJldmlvdXMgbWFuIHBhZ2UgZ2VuZXJhdGlvbiBzdGVwcyB3ZXJlIGRvbmUuICBBZnRlciB0aGlzIHN0ZXAsIHdlJ2xsCisgIGNvbW1pdCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzLgorCisgIFlvdSBtYXkgZmluZCBhZGRpdGlvbmFsIGZpbGVzIChtYXJrZWQgd2l0aCBhID8pIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvCisgIHRoZSBzdm4gcmVwb3NpdG9yeSBhbmQgeW91J2xsIG5lZWQgdG8gZG8gdGhpcyBieSBoYW5kIGJlZm9yZSBnb2luZyBvbiB0bworICB0aGUgbmV4dCBzdGVwLgorCisgIE5vdGU6IGJhc2VkIG9uIGEgcmVjZW50IG5ldC1zbm1wLWFkbWluIGRpc2N1c3Npb24sIHdlJ3JlIG5vIGxvbmdlciBnb2luZworICB0byBiZSBhZGRpbmcgdGhlIGJhemlsbGlvbnMgb2YgbWFuIHBhZ2VzIHRoYXQgZG94eWdlbiBnZW5lcmF0ZXMgYnkKKyAgZGVmYXVsdC4gIE9ubHkgaW1wb3J0YW50IG9uZXMgc2hvdWxkIGJlIGFkZGVkLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gLXUgc3RhdHVzIG1hbgorCitTVEVQOiAyLjU6IGRvY3M6bWFudWFsYWRkbmV3bWFuCisKKyAgVXBkYXRlIG1hbi9NYWtlZmlsZS5pbiB3aXRoIGRldGFpbHMgb2YgYW55IG5ldyBtYW4gcGFnZXMsIGFuZCBydW4gJ3N2bgorICBhZGQnIG9uIHRoZW0uCisKKyAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyIHlvdSdyZSBkb25lLgorCitTVEVQOiAyLjY6IGRvY3M6Y29tbWl0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biBjb21taXQgLW0gImRvY3VtZW50YXRpb24gdXBkYXRlIiBtYW4KKworICAoTGVhdmluZyBTdGVwOiAyKQorCitTVEVQOiAzOiBUZXN0aW5nIFN0ZXBzCisKKyAgVGhlc2Ugc3RlcHMgd2lsbCBoZWxwIHlvdSB0ZXN0IHRoZSBzb3VyY2UgY29kZSB0byBlbnN1cmUgaXQgcGFzc2VzIHNvbWUKKyAgc2ltcGxlICJpdCB3b3JrcyIgdGVzdHMuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMyA9PT09PQorCitTVEVQOiAzLjE6IGJ1aWxkOmRpc3RjbGVhbgorCisgIEZpcnN0IHdlIG5lZWQgdG8gY2xlYW4gdGhlIGV4aXN0aW5nIGJ1aWxkIHRyZWUgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKworU1RFUDogMy4yOiBidWlsZDpjb25maWd1cmUKKworICBXZSBuZWVkIHRvIHJ1biBjb25maWd1cmUgdG8gc2V0IHVwIHRoZSBidWlsZCB0cmVlLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICAuL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZSAtLXdpdGgtZGVmYXVsdHMKKyAgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgdGVzdGhhbmRsZXIgc211eCBSbW9uCisgIGRpc21hbi9ldmVudC1taWInIC0td2l0aC10cmFuc3BvcnRzPUlQWCAtLWVuYWJsZS1pcHY2CisgIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkCisKK1NURVA6IDMuMzogYnVpbGQ6bWFrZQorCisgIFRoZW4gd2UgbmVlZCB0byBidWlsZCB0aGUgY29kZQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlCisKK1NURVA6IDMuNDogYnVpbGQ6dGVzdAorCisgIE5vdyB3ZSBydW4gIm1ha2UgdGVzdCIgd2hpY2ggc2hvdWxkIHByb2R1Y2UgYSBwZXJmZWN0IHNldCB1cCB0ZXN0CisgIHJlc3VsdHMuICBJZiBub3QsIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBhbmQKKyAgYWNjZXB0ZWQgYXMgaXMgZm9yIHNvbWUgb3RoZXIgcmVhc29uLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlIHRlc3QgVEVTVE9QVFM9LW4KKworU1RFUDogMy41OiBjb2RlOmNoZWNrY29tbWVudHMKKworICBUaGlzIGNvbW1hbmQgbG9va3MgZm9yIHNvdXJjZSBjb2RlIG9kZGl0aWVzIGFuZCBwb2xpY3kgdmlvbGF0aW9ucy4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBjaGVja3MKKworICAoTGVhdmluZyBTdGVwOiAzKQorCitTVEVQOiA0OiBSZWxlYXNlIEZpbGUgU3RlcHMKKworICBDZXJ0YWluIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gYW5kIGJ1aWx0IG9uIGEgcGVyLXJlbGVhc2UgYmFzaXMuIAorICBUaGVzZSBzdGVwcyB3aWxsIGhlbHAgc2V0IHVwIHRoZXNlIGZpbGVzLgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDQgPT09PT0KKworU1RFUDogNC4xOiBjb2RlOm1ha2VkZXBlbmQKKworICBUaGlzIHN0ZXAgY3JlYXRlcyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgdXNpbmcgdGhlICJkaXN0ZGVwZW5kIiBydWxlIGluCisgIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIG1ha2UgZGlzdGRlcGVuZAorCitTVEVQOiA0LjI6IGNvZGU6Y29tbWl0ZGVwZW5kCisKKyAgVGhpcyBzdGVwIGNvbW1pdHMgdGhlIGRlcGVuZGVuY3kgY2hhbmdlcyBkb25lIGluIHRoZSBwcmV2aW91cyBzdGVwLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJtYWtlIGRlcGVuZCIgYGZpbmQgLiAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgCisKK1NURVA6IDQuMzogY2hhbmdlbG9nOnN2bjJjbAorCisgIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgcG9ydGlvbnMgb2YgdGhlIGNoYW5nZSBsb2dzIGNvbW1pdHRlZCB0byB0aGUKKyAgcmVwb3NpdG9yeS4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuMmNsIC1mIENoYW5nZUxvZy5hZGQgLS1icmVhay1iZWZvcmUtbXNnIC0tc3RvcC1vbi1jb3B5CisKKyAgICBwZXJsIGRpc3QvY2hhbmdlbG9nZml4ICA8IENoYW5nZUxvZy5hZGQgPiBDaGFuZ2VMb2cucmVhbGx5YWRkCisKK1NURVA6IDQuNDogY2hhbmdlbG9nOm1hbnVhbGVkaXQKKworICBZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlICpyZWxldmVudCogcG9ydGlvbnMgb2YKKyAgJ0NoYW5nZUxvZy5yZWFsbHlhZGQnIGludG8gdGhlIENoYW5nZUxvZyBmaWxlLiBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzCisgIGZvciB5b3UgYWZ0ZXIgeW91IGZpbmlzaCBjdXR0aW5nIG91dCB0aGUgcHJvcGVyIGNoYW5nZXMuCisKK1NURVA6IDQuNTogY2hhbmdlbG9nOmNvbW1pdAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJ2ZXJzaW9uIHVwZGF0ZSIgQ2hhbmdlTG9nCisKK1NURVA6IDQuNjogZG9jczpuZXduZXdzCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHBlcmwgZGlzdC9leHRyYWN0bmV3cyAtcyAtLS0tLSAtZSAtLS0tLSBDaGFuZ2VMb2cKKworU1RFUDogNC43OiBkb2NzOm5ld25ld3MKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcGVybCBkaXN0L2V4dHJhY3RuZXdzIC1jIENIQU5HRVMubmV3MiAtbiBORVdTLm5ldzIgQ2hhbmdlTG9nLnJlYWxseWFkZAorCitTVEVQOiA0Ljg6IGRvY3M6UkVBRE1FCisKKyAgWW91IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHRoZSByZWxldmVudCBwb3J0aW9ucyBvZiAnQ0hBTkdFUy5uZXcnIGFuZAorICAnTkVXUy5uZXcnIGludG8gdGhlIENIQU5HRVMgYW5kIE5FV1MgZmlsZS4gKFRoZXJlIGFyZSBhbHRlcm5hdGl2ZQorICB2ZXJzaW9ucyBpbiAnQ0hBTkdFUy5uZXcyJyBhbmQgJ05FV1MubmV3MicpIFlvdSBtYXkgd2lzaCB0byB1cGRhdGUgdGhlCisgIFJFQURNRSBmaWxlIGFzIHdlbGwuIEknbGwgY29tbWl0IHRoZXNlIGNoYW5nZXMgZm9yIHlvdSBhZnRlcndhcmRzCisKK1NURVA6IDQuOTogZG9jczpjb21taXQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAidmVyc2lvbiB1cGRhdGUiIFJFQURNRSBORVdTIENIQU5HRVMKKworU1RFUDogNC4xMDogcmVsZWFzZTp1cGRhdGUKKworICBPbmUgbW9yZSBzdm4gdXBkYXRlIGFuZCBzdGF0dXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgb2RkIGV4aXN0cyBpbiB5b3VyCisgIHNvdXJjZSB0cmVlLglQbGVhc2UgY2hlY2sgdGhlIHJlc3VsdHMhCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biAtdSBzdGF0dXMKKworICAoTGVhdmluZyBTdGVwOiA0KQorCitTVEVQOiA1OiBNYWtlIHRoZSBSZWxlYXNlCisKKyAgVGhpcyBpcyBpdCEgIEFmdGVyIHRoaXMgcG9pbnQgaXQncyBtdWNoIGhhcmRlciB0byB0dXJuIGJhY2suCUlmCisgIGV2ZXJ5dGhpbmcgaXMgb2sgdW50aWwgdGhpcyBwb2ludCBhbmQgeW91J3JlIHJlYWR5IHRvIGFjdHVhbGx5IHN0YW1wIHRoZQorICByZWxlYXNlIGluIFNWTiBhbmQgbWFrZSByZWxlYXNlIGZpbGVzLCB0aGVzZSBzdGVwcyB3aWxsIGRvIHRoYXQgZm9yIHlvdS4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiA1ID09PT09CisKK1NURVA6IDUuMTogcmVsZWFzZTp0YWcKKworICBUaGlzIHdpbGwgYWN0dWFsbHkgc3ZuIGNvcHkgdGhlIGN1cnJlbnQgY2hlY2tlZCBvdXQgYnJhbmNoIHRvIHRoZSBuZXcgdGFnCisgIG5hbWUuICBTcGVjaWZpY2FsbHk6CisKKyAgc3ZuIGNvcHkge0JSQU5DSFBBVEh9IC4uLi90YWdzL0V4dC17VkVSU0lPTkRBU0hFU30KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvcHkgLW0gIntWRVJTSU9OfSByZWxlYXNlIiB7QlJBTkNIUEFUSH0KKyAgaHR0cHM6Ly9uZXQtc25tcC5zdm4uc291cmNlZm9yZ2UubmV0L3N2bnJvb3QvbmV0LXNubXAvdGFncy9FeHQte1ZFUlNJT05EQQorICBTSEVTfQorCitTVEVQOiA1LjI6IHJlbGVhc2U6bWFrZWRpc3QKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGV4cG9ydAorICBodHRwczovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9uZXQtc25tcC90YWdzL0V4dC17VkVSU0lPTkRBCisgIFNIRVN9L25ldC1zbm1wIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1LjM6IHJlbGVhc2U6cmVtb3ZlZmlsZXMKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbmV0LXNubXAte1ZFUlNJT059L3JlbW92ZS1maWxlcyBuZXQtc25tcC17VkVSU0lPTn0KKworU1RFUDogNS40OiByZWxlYXNlOm1ha2VkaXN0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN0YXIgYXJ0eXBlPXVzdGFyIC1jIC16IC1mIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3ogCisgIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1LjU6IHJlbGVhc2U6bWFrZXppcGNsZWFuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHJtIC1mIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAKKworU1RFUDogNS42OiByZWxlYXNlOm1ha2V6aXAKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgemlwIC1yIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAgIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1Ljc6IHJlbGVhc2U6c2VhcmNoaW5nLWdwZy1rZXlzCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGdwZyAtLWxpc3Qtc2VjcmV0LWtleXMgbmV0LXNubXAtYWRtaW4KKworU1RFUDogNS44OiByZWxlYXNlOmdwZworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBncGcgLXUgMzE3RjhGNjQgLWEgLS1kZXRhY2gtc2lnbiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6CisKK1NURVA6IDUuOTogcmVsZWFzZTpncGcKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZ3BnIC11IDMxN0Y4RjY0IC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAte1ZFUlNJT059LnppcAorCitTVEVQOiA1LjEwOiBSZWxlYXNlIEZpbGUgVGVzdAorCisgIFdlJ2xsIGFsc28gcmUtYnVpbGQgdGhlIHNvdXJjZSBhbmQgcmV0ZXN0IGEgZmV3IHRoaW5ncyB0byBlbnN1cmUgdGhlCisgIHBhY2thZ2VkIGZpbGUgY2FuIGFjdHVhbGx5IGJlIGJ1aWx0LgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDUuMTAgPT09PT0KKworU1RFUDogNS4xMC4xOiBwb3N0dGVzdDp1bnRhcgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBybSAtcmYgbmV0LXNubXAte1ZFUlNJT059CisKK1NURVA6IDUuMTAuMjogcG9zdHRlc3Q6dW50YXIKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgdGFyIHh6ZiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6CisKK1NURVA6IDUuMTAuMzogcG9zdHRlc3Q6Y29uZmlndXJlCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGNkIG5ldC1zbm1wLXtWRVJTSU9OfSAmJiAuL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZQorICAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUJCisgIHRlc3RoYW5kbGVyIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz1JUFgKKyAgLS1lbmFibGUtaXB2NiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC0tZW5hYmxlLXNoYXJlZAorCitTVEVQOiA1LjEwLjQ6IHBvc3R0ZXN0Om1ha2UKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgY2QgbmV0LXNubXAte1ZFUlNJT059ICYmIG1ha2UKKworU1RFUDogNS4xMC41OiBwb3N0dGVzdDp0ZXN0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGNkIG5ldC1zbm1wLXtWRVJTSU9OfSAmJiBtYWtlIHRlc3QKKworICAoTGVhdmluZyBTdGVwOiA1LjEwKQorCisgIChMZWF2aW5nIFN0ZXA6IDUpCisKK1NURVA6IDY6IFJlbGVhc2UgdGhlIHJlc3VsdHMKKworICBOb3cgd2UnbGwgcHVibGlzaCB0aGUgcmVzdWx0cyB0byB0aGUgU0Ygc2VydmVyCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogNiA9PT09PQorCitTVEVQOiA2LjE6IHJzeW5jIHRoZSBuZXcgZmlsZXMKKworICBUaGlzIHdpbGwgY29weSB0aGUgcmVzdWx0cyB0byB0aGUgU0YgdXBsb2FkcyBkaXJlY3RvcnkgaW4geW91ciBhY2NvdW50IG9uCisgIGZycy5zb3VyY2Vmb3JnZS5uZXQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcnN5bmMgLXYgbmV0LXNubXAte1ZFUlNJT059LnRhci5neiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6LmFzYworICBuZXQtc25tcC17VkVSU0lPTn0uemlwIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAuYXNjCisgIGZycy5zb3VyY2Vmb3JnZS5uZXQ6dXBsb2Fkcy8KKworU1RFUDogNi4yOiBVcGRhdGUgdGhlIFNGIHJlbGVhc2Ugd2ViIHBhZ2UKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZmlyZWZveAorICAnaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2FkbWluL2VkaXRwYWNrYWdlcy5waHA/Z3JvdXBfaWQ9MTI2OTQnCisKKyAgKExlYXZpbmcgU3RlcDogNikKKworU1RFUDogNzogCisKKyAgQmluYXJpZXM6IGJ1aWxkIHJwbXMsIC50YXIuZ3pzLCBldGMuCisKK1NURVA6IDg6IEFkdmVydGlzZSBpdCEKKworICA9PT09PSBFbnRlcmluZyBTdGVwOiA4ID09PT09CisKK1NURVA6IDguMTogCisKKyAgQWRkIGEgbm90ZSB0byB0aGUgc291cmNlIGZvcmdlIG5ld3Mgc3lzdGVtOgorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbmV3cy9zdWJtaXQucGhwP2dyb3VwX2lkPTEyNjk0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGZpcmVmb3ggJ2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbmV3cy9zdWJtaXQucGhwP2dyb3VwX2lkPTEyNjk0JworCitTVEVQOiA4LjI6IAorCisgIFNlbmQgYW4gYW5ub3VuY2VtZW50IG1lc3NhZ2UgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbWFpbGluZyBsaXN0cyBiYXNlZAorICBvbiBpdCdzIHR5cGU6CisKKyAgcHJlOgkgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICByYzoJICBuZXQtc25tcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICBmaW5hbDogIG5ldC1zbm1wLWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitTVEVQOiA4LjM6IAorCisgIFVwZGF0ZSB0aGUgdG9waWMgb24gdGhlICNOZXQtU05NUCBjaGFubmVsIGlmIHRoaXMgaXMgYSB0cnVuayBiYXNlZAorICByZWxlYXNlLgorCitTVEVQOiA4LjQ6IAorCisgIFVwZGF0ZSB0aGUgZnJlc2htZWF0IGxpc3RpbmcgKFdlcyBuZWVkcyB0byBkbyB0aGlzKToKKworICBodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9uZXQtc25tcC8KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZmlyZWZveCBodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9uZXQtc25tcC8KKworICAoTGVhdmluZyBTdGVwOiA4KQorCitTVEVQOiA5OiAKKworICBBZHZlcnRpc2U6IE5FV1MgdXBsb2FkIHRvIHNmLCBwdWJsaXNoIG9uIC1hbm5vdW5jZSwgZnJlc2htZWF0LCBhbmQgdGhlCisgIEdOVSBGU0YgZGlyZWN0b3J5IChodHRwOi8vZGlyZWN0b3J5LmZzZi5vcmcvcHJvamVjdC9uZXQtc25tcC8pLi4uIChzZW5kCisgIG1haWwgdG8gYnVnLWRpcmVjdG9yeUBnbnUub3JnKQorCisKKworCisKKz09PT09PSBCRUdJTiBPQlNPTEVURSAocHJlLW1ha2VyZWxlYXNlKSBET0NVTUVOVEFUSU9OID09PT09PQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1RFU1RJTkc6CisKKyAgMSkgVXBkYXRlIHRoZSBzb3VyY2UgdHJlZSB0byBjYXRjaCBhbGwgcmVjZW50IGNvbW1pdHMsCisgICAgIGFuZCBjaGVjayB0aGF0IGFsbCBsb2NhbCBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQuCisKKyAgICAgJCBzdm4gLXUgc3RhdHVzCisgICAgICQgc3ZuICAgIHVwZGF0ZQorCisgIDIpIENoYW5nZSB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcC4KKyAgICAgU2VlIE1BTlVBTCAtIFNURVAgMSBsYXRlciBpbiB0aGVzZSBpbnN0cnVjdGlvbnMuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkuCisKKyAgMykgQ29uZmlndXJlIHRoZSBzdWl0ZSB3aXRoIGFzIG1hbnkgbW9kdWxlcyBhcyBwb3NzaWJsZSwKKyAgICAgYnVpbGQgYW5kIHRlc3QgaXQuICBUaGUgbWFrZXJlbGVhc2Ugc2NyaXB0IHdpbGwgdXNlCisgICAgIHRoZSBvcHRpb25zOgorCisgICAgICAkIC4vY29uZmlndXJlICAnLS13aXRoLW1pYi1tb2R1bGVzPWhvc3QgZXhhbXBsZXMgZXhhbXBsZXMvZXhhbXBsZSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGhhbmRsZXIgc211eCBSbW9uIGRpc21hbi9ldmVudC1taWInICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtdHJhbnNwb3J0cz1JUFggIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZW1iZWRkZWQtcGVybCAtLWVuYWJsZS1zaGFyZWQKKworICAgICBJZGVhbGx5IHRoaXMgc2hvdWxkIGJlIHJlcGVhdGVkIG9uIGFzIG1hbnkgc3lzdGVtcyBhcyBwb3NzaWJsZQorICAgICAoaW5jbHVkaW5nIHJ1bm5pbmcgIm1ha2UgaW5zdGFsbCIpLiAgSG93ZXZlciB0aGUgbWFrZXJlbGVhc2UKKyAgICAgc2NyaXB0IHdpbGwgb25seSB0ZXN0IHRoaW5ncyBvbiB0aGUgY3VycmVudCBib3gsIGFuZCB3aWxsIG5vdAorICAgICB0cnkgdG8gaW5zdGFsbCB0aGUgc29mdHdhcmUuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitET0NVTUVOVEFUSU9OOgorCisgIDQpICBVcGRhdGUgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBkb3h5Z2VuLmNvbmYgZmlsZQorICAgICAgKGhhbmRsZWQgYXV0b21hdGljYWxseSBieSAnbWFrZXJlbGVhc2UnKSBhbmQgZ2VuZXJhdGUKKyAgICAgIHRoZSBkb3h5Z2VuIGV4dHJhY3RlZCBtYW51YWwgcGFnZXMuCisKKyAgICAgICAgJCBtYWtlIGRvY3MKKyAgICAgICAgJCBtYWtlIG1hbmNwCisKKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIGNvbW1pdCB0aGlzIGZpbGUgYXV0b21hdGljYWxseS4KKyAgICAgTm90ZSB0aGF0IGFueSBuZXcgbWFuIHBhZ2VzIHNob3VsZCBiZSBhZGRlZCB0byBNYWtlZmlsZS5pbi4KKyAgICAgVGhpcyBpcyAqTk9UKiBjdXJyZW50bHkgaGFuZGxlZCBieSB0aGUgbWFrZXJlbGVhc2Ugc2NyaXB0LgorCisgIDUpIENoZWNrIHRoZSBjb2RlIGZvciBpbGxlZ2FsIGNvbnN0cnVjdHMgKGUuZy4gQysrIHN0eWxlIGNvbW1lbnRzCisgICAgIG9yIEdOVSBtYWtlIHNwZWNpZmljIGNvbnN0cnVjdHMgaW4gTWFrZWZpbGVzKToKKworICAgICAgICAkIG1ha2UgY2hlY2tzCisKKyAgNikgVXBkYXRlIE1ha2VmaWxlIGRlcGVuZGVuY2llczoKKworICAgICAgICAkIG1ha2UgZGlzdGRlcGVuZAorCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhlc2UgZGVwZW5kZW5jaWVzIGF1dG9tYXRpY2FsbHkuCisKKyAgNykgVXBkYXRlIHRoZSBDaGFuZ2VMb2cgZmlsZSB3aXRoIGRldGFpbHMgb2YgYWxsIChyZWNlbnQpIGNoYW5nZXMKKyAgICAgdG8gdGhlIHN1aXRlLiAgU2VlIE1BTlVBTCAtIFNURVAgMiBsYXRlciBpbiB0aGVzZSBpbnN0cnVjdGlvbnMuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkuCisKKyAgOCkgVXBkYXRlIHRoZSBSRUFETUUsIE5FV1MsIGFuZCBDSEFOR0VTIGZpbGVzIHdpdGggZGV0YWlscyBvZgorICAgICBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBzdWl0ZS4gIFNlZSBNQU5VQUwgLSBTVEVQIDMgbGF0ZXIKKyAgICAgaW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLgorICAgICAnbWFrZXJlbGVhc2UnIHdpbGwgY29tbWl0IHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitSRUxFQVNFOgorCisgIDkpIE1ha2Ugc3VyZSBhbGwgY2hhbmdlcyBhcmUgY2hlY2tlZCBpbjoKKworICAgICAgICQgc3ZuIC11IHN0YXR1cworICAgICAgICQgc3ZuICAgIHVwZGF0ZQorCisgICAgIFtOb3RlIHRoYXQgdGhpcyBzdGVwIGlzIG9taXR0ZWQgd2hlbiBydW5uaW5nICJtYWtlcmVsZWFzZSJdCisKKyAxMCkgQ2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB2YXJpb3VzIGZpbGVzCisgICAgICAgKFJFQURNRSwgRkFRLCBjb25maWd1cmUuaW4sIG5ldC1zbm1wLnNwZWMgYW5kIGFzc29ydGVkIFBlcmwgbW9kdWxlcykuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCB1cGRhdGUgYW5kIGNvbW1pdCB0aGVzZSBmaWxlcyBhdXRvbWF0aWNhbGx5LgorCisgMTEpIENyZWF0ZSBhIHRhZyBjaGVja3BvaW50IGZvciB0aGlzIHJlbGVhc2U6CisKKyAgICAgICAkIHN2biBjb3B5ICAvdHJ1bmsgICAgICAgICAgICAgICAgIC90YWdzL0V4dC01LXgKKyAgICAgb3IKKyAgICAgICAkIHN2biBjb3B5ICAvYnJhbmNoZXMvVjUteC1wYXRjaGVzIC90YWdzL0V4dC01LXgteQorCisgMTIpIENvbnN0cnVjdCB0aGUgc291cmNlIHBhY2thZ2VzOgorCisgICAgICAgICQgc3ZuIGV4cG9ydCAvdGFncy9FeHQtNS14LXkvbmV0LXNubXAgbmV0LXNubXAtNS54LnkKKyAgICAgICAgJCBuZXQtc25tcC01LngueS9yZW1vdmUtZmlsZXMgICAgICAgICBuZXQtc25tcC01LngueQorICAgICAgICAkIHN0YXIgYXJ0eXBlPXVzdGFyIC1jIC16IC1mIG5ldC1zbm1wLTUueC55LnRhci5neiAgICBuZXQtc25tcC01LngueQorICAgICAgICAkIHJtIC1mIG5ldC1zbm1wLTUueC55LnppcCIKKyAgICAgICAgJCB6aXAgLXIgbmV0LXNubXAtNS54LnkuemlwIG5ldC1zbm1wLTUueC55IgorCisKKyAxMykgU2lnbiAob3IgY2hlY2tzdW0pIHRoZSBwYWNrYWdlczoKKworICAgICBXZXMvUm9iZXJ0OgorICAgICAgICAkIGdwZyAtdSBuZXQtc25tcC1hZG1pbiAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLTUueC55LnRhci5negorICAgICAgICAkIGdwZyAtdSBuZXQtc25tcC1hZG1pbiAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLTUueC55LnppcAorICAgICBPdGhlcnM6CisgICAgICAgICQgbWQ1c3VtIG5ldC1zbm1wLTUueC55LnRhci5neiA+IG5ldC1zbm1wLTUueC55LnRhci5nei5tZDUKKyAgICAgICAgJCBtZDVzdW0gbmV0LXNubXAtNS54LnkuemlwICAgID4gbmV0LXNubXAtNS54LnkuemlwLm1kNQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorUkVMRUFTRSBURVNUSU5HOgorCisgMTQpIFVucGFjayBhIGNsZWFuIGNvcHkgb2YgdGhlIHRhcmJhbGwsIGNvbmZpZ3VyZSwgYnVpbGQgYW5kCisgICAgIHRlc3QgdGhlIHJlbGVhc2UgdGFyYmFsbC4KKworIDE1KSBEb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgY2hhbmdlcyB0aGF0IGhhdmUKKyAgICAgYmVlbiBtaXNzZWQgZnJvbSB0aGUgQ1ZTIGNoZWNraW46CisKKyAgICAgICAgJCBzdm4gc3RhdHVzCisKK05vdGU6ICBUaGlzIGlzIHRoZSBsYXN0IHN0YWdlIHRoYXQgaXMgaGFuZGxlZCBieSB0aGUgIm1ha2VyZWxlYXNlIiBzY3JpcHQKKyAgICAgICBFdmVyeXRoaW5nIGZvbGxvd2luZyB3aWxsIG5lZWQgdG8gYmUgZG9uZSBtYW51YWxseS4KKworIDE1KSBVcGxvYWQgdGhlIHBhY2thZ2VzIChhbmQgc2lnbmF0dXJlIGZpbGVzKSB0byB0aGUgU291cmNlRm9yZ2Ugc2VydmVyOgorIAorICAgICAgICAkIG5jZnRwcHV0IHVwbG9hZC5zZi5uZXQgaW5jb21pbmcgbmV0LXNubXAtNS54LnkudGFyLmd6CisgICAgICAgICQgbmNmdHBwdXQgdXBsb2FkLnNmLm5ldCBpbmNvbWluZyBuZXQtc25tcC01LngueS56aXAKKyAgICAgICAgKiBTRiBwYWdlczogICJBZG1pbiIgLT4gIkZpbGUgUmVsZWFzZXMiCisgICAgICAgICogbmV0LXNubXA6ICAiQWRkIFJlbGVhc2UiIChvciAiRWRpdCBSZWxlYXNlIikKKyAgICAgICAgKiBDcmVhdGUgKG9yIGNob29zZSkgYW4gYXBwcm9wcmlhdGUgcmVsZWFzZSBuYW1lCisgICAgICAgICAgICAgZS5nLiAgIjUueC55IHNvdXJjZSBjb2RlIiAgKG9yICI1LngueSBwcmUtcmVsZWFzZXMiKQorICAgICAgICAqICJFZGl0IFRoaXMgUmVsZWFzZSIKKyAgICAgICAgKiBTZWxlY3QgdGhlIHRhcmJhbGwgYW5kL29yIG90aGVyIHJlbGV2YW50IGZpbGVzCisKKyAxNikgQW5ub3VuY2UgdGhlIHJlbGVhc2Ugb24gdGhlIGFwcHJvcHJpYXRlIGxpc3QuCisgICAgIFByZS1yZWxlYXNlIGFubm91bmNlbWVudHMgKGFuZCBhIGNhbGwgZm9yIHRlc3RpbmcpIHNob3VsZCBiZQorICAgICBzZW50IHRvIG5ldC1zbm1wLWNvZGVycywgcmVsZWFzZS1jYW5kaWRhdGVzIHRvIG5ldC1zbm1wLXVzZXJzLgorCisgICAgIEZ1bGwgcmVsZWFzZXMgc2hvdWxkIGJlIGFubm91bmNlZCBvbiBuZXQtc25tcC11c2VycywgYW5kIGFzIGEKKyAgICAgbmV3cyBpdGVtIG9uIHRoZSBwcm9qZWN0IGhvbWUgcGFnZSAtIGluY2x1ZGluZyB0aGUgTkVXUyBzbmlwcGV0CisgICAgIG9mIHNpZ25pZmljYW50IGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgcmVsZWFzZS4KKworIDE3KSBVcGRhdGUgdGhlIGZvbGxvd2luZyBodGRvY3MgZmlsZXMgKGluIHRoZSBtYWluIFNWTiB0cnVuayk6CisgICAgICAgICBodGRvY3MvZG93bmxvYWQuaHRtbAorICAgICAgICAgaHRkb2NzL2Rldi9zY2hlZHVsZS5odG1sCisKKyAgICAgW01ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyBzZXQgdXAgcHJvcGVybHkgb24gdGhlIHdlYgorICAgICAgc2VydmVyIHNvIHRoYXQgZmlsZXMgY3JlYXRlZCBiZWNvbWUgZ3JvdXAtd3JpdGFibGUhISFdCisKKyAgICAgVGhhdCBjb25jbHVkZXMgdGhlIHByb2Nlc3MgZm9yIHByZS1yZWxlYXNlcyBhbmQgcmVsZWFzZS1jYW5kaWRhdGVzLgorICAgICBGb3IgZnVsbCByZWxlYXNlcywgd2FpdCBhIHdlZWsgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG1ham9yCisgICAgIHByb2JsZW1zLCBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSByZW1haW5pbmcgc3RlcHMuCisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGtub3duIHByb2JsZW1zIGFuZCBhbm90aGVyIHJlbGVhc2UgaXMgcGxhbm5lZCB0bworICAgICBmaXggdGhlbSwgZG9uJ3QgYW5ub3VuY2UgdGhlIGJyb2tlbiB2ZXJzaW9uIC0gd2FpdCBmb3IgdGhlIHVwZGF0ZWQKKyAgICAgb25lIGluc3RlYWQuCisKKyAxOCkgT25jZSB0aGlzIHdlZWsgaGFzIGVsYXBzZWQsIHN1Ym1pdCBhbiBhbm5vdW5lbWVudCBvZiB0aGUgbmV3CisgICAgIHJlbGVhc2UgdG8gbmV0LXNubXAtYW5ub3VuY2UuICBUaGlzIG1lc3NhZ2Ugd2lsbCBuZWVkIHRvIGJlCisgICAgIGV4cGxpY2l0bHkgYXV0aG9yaXplZCB2aWEgTWFpbE1hbi4KKworICAgICBBbHNvIHVwZGF0ZSB0aGUgSVJDIHRvcGljIHRvIGluY2x1ZGUgbWVudGlvbiBvZiB0aGlzIHJlbGVhc2UuCisKKyAxOSkgRm9yIGEgcmVsZWFzZSBvbiB0aGUgbW9zdCByZWNlbnQgZGV2ZWxvcG1lbnQgbGluZSwgc3RhcnQgYnVnZ2luZworICAgICBXZXMgdG8gdXBkYXRlIHRoZSBmcmVzaG1lYXQsIEZyZWUgU29mdHdhcmUgRGlyZWN0b3J5IGFuZAorICAgICBXaWtpcGVkaWEgZW50cmllcy4KKworIDIwKSBGb3IgYSByZWxlYXNlIG9uIHRoZSBtb3N0IHJlY2VudCBkZXZlbG9wbWVudCBsaW5lLCB1cGRhdGUgdGhlCisgICAgICdodGRvY3MvcGFnZS10b3AuaHRtbCcgZmlsZSAoaW4gdGhlIG1haW4gU1ZOIHRydW5rKSB0byByZWZlcmVuY2UKKyAgICAgdGhlIGxhdGVzdCB2ZXJzaW9uLgorCisgICAgIFVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzIHdpdGggYW55IGNoYW5nZXM6CisKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL05FV1MKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL0NIQU5HRVMKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL1JFQURNRSoKKyAgICAgICAgIGh0ZG9jcy9DT1BZSU5HCisKKyAgICAgW01ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyBzZXQgdXAgcHJvcGVybHkgb24gdGhlIHdlYgorICAgICAgc2VydmVyIHNvIHRoYXQgZmlsZXMgY3JlYXRlZCBiZWNvbWUgZ3JvdXAtd3JpdGFibGUhISFdCisgICAgICAgICAKKworIDIxKSBGb3IgYSBtYWpvciBuZXctZmVhdHVyZSByZWxlYXNlIChpLmUuIDUueCksIGNyZWF0ZSB0aGUgcGF0Y2hlcworICAgICBicmFuY2g6CisKKyAgICAgICAgJCBzdm4gY29weSAgL3RhZ3MvRXh0LTUteCAgIC9icmFuY2hlcy9WNS14LXBhdGNoZXMKKworICAgICBhbmQgdXBkYXRlIHRoZSBTVk4gbWFpbiB0cnVuayB3aXRoIGEgbmV3IHZlcnNpb24gbnVtYmVyOgorCisgICAgICAgICQgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiA1Lih4KzEpLmRldiAtTSAtUCAtQworCisgICAgIFRoZSAxIHdlZWsgZGVsYXkgKGFuZCBjb250aW51ZWQgY29kZSBmcmVlemUpIGlzIHRvIHRvIGVuc3VyZSB0aGF0CisgICAgIGRldmVsb3BlciBlZmZvcnQgaXMgY29uY2VudHJhdGVkIG9uIGltbWVkaWF0ZSBwcm9ibGVtcyBmb2xsb3dpbmcKKyAgICAgdGhlIHJlbGVhc2UuICBBbnkgbWFqb3IgcHJvYmxlbXMgc2hvdWxkIGhvcGVmdWxseSBjb21lIHRvIGxpZ2h0CisgICAgIGR1cmluZyB0aGlzIHBlcmlvZCwgc28gYWZ0ZXIgYSB3ZWVrIGl0IHNob3VsZCBiZSBzYWZlIHRvIGNyZWF0ZQorICAgICB0aGUgcGF0Y2hlcyBicmFuY2ggYW5kIG9mZmljaWFsbHkgZW5kIHRoZSBjb2RlIGZyZWV6ZSBvbiBNQUlOLgorCisgMjIpIFVwZGF0ZSB0aGUgb2ZmaWNpYWwgcGF0Y2hlcyB0cmFja2VyIHNldDoKKworICAgICAtIGFueSBwYXRjaGVzIGZvciB0aGlzIG5ldyByZWxlYXNlIHRhcmJhbGwgc2hvdWxkIGJlIGdpdmVuCisgICAgICAgcHJpb3JpdHkgOQorICAgICAtIGFsbCBwYXRjaGVzIGZvciB0aGUgcHJldmlvdXMgcmVsZWFzZSBvbiB0aGlzIGxpbmUgc2hvdWxkCisgICAgICAgYmUgbWFya2VkIGF0IHByaW9yaXR5IDUKKyAgICAgLSBhbGwgcGF0Y2hlcyBmb3IgZWFybGllciByZWxlYXNlcyBvbiB0aGlzIGxpbmUgc2hvdWxkCisgICAgICAgYmUgbWFya2VkIGF0IHByaW9yaXR5IDEsIGFuZCBjbG9zZWQKKworICAgICBJZiBhIGxpbmUgaGFzIGJlZW4gZGVzaWduYXRlZCBjbG9zZWQsIHRoZW4gYWxsIG9mZmljaWFsCisgICAgIHBhdGNoZXMgZm9yIHRoYXQgbGluZSBzaG91bGQgYmUgbWFya2VkIGFzIGNsb3NlZCBhcyB3ZWxsLgorCisgMjMpIEhpZGUgdGhlIHByZS1yZWxlYXNlIHJlcG9zaXRvcnkgZnJvbSB0aGUgRmlsZSBSZWxlYXNlcworICAgICBhZG1pbiBwYWdlcy4KKworIDI0KSBDbGVhbiB1cCB0aGUgJ2Rpc3QnIGRpciBvZiB0aGUgcmVsZXZhbnQgVjUteC1wYXRjaGVzIGJyYW5jaC4KKyAgICAgT25seSBsZWF2ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCisgICAgIGNoYW5nZWxvZ2ZpeCAgY3Zzc2hvdyAgY3ZzdXAgIGV4dHJhY3RuZXdzICBtYWtlcmVsZWFzZQorICAgICBuZXQtc25tcC5zcGVjICBzbm1wZC1pbml0LmQgIHNubXB0cmFwZC1pbml0LmQKKworICAgICBOb3RlIHRoYXQgYW55IGZpbGVzIHJlbW92ZWQgc2hvdWxkIGFsc28gYmUgZGVsZXRlZCBmcm9tCisgICAgIFNWTiByZXBvc2l0b3J5LgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQ1JFQVRJTkcgQklOQVJZIERJU1RSSUJVVElPTlMKKworICAwKSBBbHdheXMgUkVNT1ZFIEFMTCBQUkVWSU9VUyBJTlNUQUxMUyBGSVJTVCwgdGhlbiBkbyBhIG1ha2UgaW5zdGFsbAorICAgICBmcm9tIHRoZSB0YXItYmFsbCBleHRyYWN0ZWQgc291cmNlcyBhbmQgKlRIRU4qIHJlYnVpbGQgYWxsCisgICAgIGJpbmFyaWVzIGFnYWluLiAgVGhpcyBlbnN1cmVzIHRoYXQgZXZlcnl0aGluZyAoZXNwZWNpYWxseSBwZXJsCisgICAgIG1vZHVsZXMpIGFyZSBwcm9wZXJseSBsaW5rZWQgYWdhaW5zdCB0aGUgcmlnaHQgbGlicmFyaWVzLgorCisgIDEpIGFsd2F5cyBidWlsZCByZWxlYXNlcyBmcm9tIGEgdGFyYmFsbCwgbm90IGZyb20gU1ZOLgorCisgIDIpIEFkZCBtaWIgbW9kdWxlcyB0aGF0IGFyZSBjb21tb24uICBCYXNpY2FsbHksIGFkZDoKKworICAgICAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgLS0gd2hlcmUgc3VwcG9ydGVkLgorICAgICAgIGRpc21hbi9ldmVudC1taWIKKyAgICAgICBzbXV4CisKKyAgMykgdXNlIC0td2l0aC1kZWZhdWx0cyAtLXdpdGgtc3lzY29udGFjdD0iVW5rbm93biIgCisgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLXN5c2xvY2F0aW9uPSJVbmtub3duIgorCisgIDQpIHdoZW4gcnVubmluZyBtYWtlIGluc3RhbGwsIGRvIGl0IGxpa2U6CisKKyAgICAgJCBtYWtlIGluc3RhbGwgcHJlZml4PS9zb21lL3BhdGgvdG8vaG9tZS9BUkNIL3Vzci9sb2NhbCBcCisgICAgICAgICAgICBleGVjX3ByZWZpeD0vc29tZS9wYXRoL3RvL2hvbWUvQVJDSC91c3IvbG9jYWwKKyAgICAKKyAgNSkgVGFyIGl0IHVwOgorCisgICAgICQgY2QgL3NvbWUvcGF0aC90by9ob21lL0FSQ0gKKyAgICAgJCB0YXIgY3pmIG5ldC1zbm1wLTUuMC4zLUFSQ0gudGFyLmd6IHVzci9sb2NhbAorCisgIDYpIHVwbG9hZCBhbmQgcmVsZWFzZSwgbGlrZSB5b3UgZGlkIGZvciB0aGUgc291cmNlIGNvZGUgYnV0IHdpdGggYQorICAgICBkaWZmZXJlbnQgcGFja2FnZSBuYW1lIGZvciBiaW5hcmllcyAoNS4wLjMgYmluYXJpZXMpLgorCisgIDcpIFJQTXMgW2RvIHRoaXMgaW4gbWFpbiBsaW5lIGV2ZW4gaWYgaXRzIGZvciBhIHBhdGNoIGJyYW5jaF06CisgICAgICQgY2QgZGlzdAorICAgICAkIGNwIC4uL25ldC1zbm1wLTUuMC44LnRhci5neiBycG0vU09VUkNFUworICAgICAkIG1ha2UgUkVMRUFTRT0xCisgICAgIAorICAgICBUaGlzIHNob3VsZCBwdXQgbXVsdGlwbGUgYmluYXJ5IHJwbSBmaWxlcyBpbjoKKyAgICAgICBkaXN0L3JwbS9SUE1TL2kzODYvCisgICAgIEFuZCBvbmUgc291cmNlIFJQTSBpbjoKKyAgICAgICBkaXN0L3JwbS9TUlBNUy8KKworICAgICAqKiogVGhlc2UgZmlsZXMgbmVlZCB0byBiZSByZW5hbWVkIHRvIGluY2x1ZGUgdGhlIE9TIHZlcnNpb24uCisKKyAgICAgICAgIEVHOiAuLi5pMzg2LnJwbSBuZWVkcyB0byBiZWNvbWUgLi4uZmM1LmkzODYucnBtCisKKyAgOCkgUmVtb3ZlIChvciBoaWRlKSBiaW5hcmllcyBmcm9tIG9sZGVyIHJlbGVhc2VzIG9mIHRoZSBzYW1lIGxpbmUsCisgICAgIHdoZXJlIHlvdSBoYXZlIHN1Ym1pdHRlZCBhIG5ld2VyIGJpbmFyeSBmb3IgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLgorICAgICBPbmNlIHRoZSBsYXN0IGJpbmFyeSBmb3IgYSBwYXJ0aWN1bGFyIHJlbGVhc2UgdmVyc2lvbiBoYXMgYmVlbgorICAgICByZW1vdmVkLCBoaWRlIHRoYXQgcmVwb3NpdG9yeS4KKyAgICAgCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitNQU5VQUwgLSBTVEVQIDEKKworICBDaGFuZ2luZyB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcC4KKworICAgICAgLSBJZiBhbnkgaW50ZXJmYWNlcy9zdHJ1Y3R1cmVzIGhhdmUgYmVlbiByZW1vdmVkIG9yIGNoYW5nZWQgc2luY2UgdGhlCisgICAgICAgIGxhc3QgdXBkYXRlLCBpbmNyZW1lbnQgY3VycmVudCAoKzUpLCBhbmQgc2V0IGFnZSBhbmQgcmV2aXNpb24gdG8gMC4KKyAgICAgICAgU3RvcCEKKworICAgICAgLSBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UsCisgICAgICAgIHRoZW4gaW5jcmVtZW50IGN1cnJlbnQgYW5kIGFnZSwgYW5kIHNldCByZXZpc2lvbiB0byAwLgorICAgICAgICBTdG9wIQorCisgICAgICAtIElmIHRoZSBzb3VyY2UgY29kZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIGxhc3QgdXBkYXRlLAorICAgICAgICB0aGVuIGluY3JlbWVudCByZXZpc2lvbiAoYzpyOmEgYmVjb21lcyBjOnIrMTphKS4KKworICAgICAgTm90ZTogbWFpbnRlbmFuY2UgcmVsZWFzZXMgKGVnIDUuMi54KSBzaG91bGQgbmV2ZXIgaGF2ZSBjaGFuZ2VzCisgICAgICAgICAgICB0aGF0IHdvdWxkIHJlcXVpcmUgY3VycmVudCB0byBiZSBpbmNyZW1lbnRlZC4KKworICBUaGUgY2hlY2stYXBpLWNoYW5nZXMgc2NyaXB0IGluIHRoZSBkaXN0IGRpcmVjdG9yeSB3aWxsIGNvbnN0cnVjdCBhCisgIGRpZmYgb2YgYWxsIGhlYWRlcnMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGRldGVybWluaW5nIGlmIGFueXRoaW5nCisgIG5lZWRzIGJ1bXBpbmcuCisKKyAgICAgVXBkYXRlIHRoZXNlIHZhcmlhYmxlcyBub3csIHNvIHRoYXQgd2hlbiB5b3UgcnVuCisgICAgIG1ha2UgaW4gYSBzZWNvbmQgdG8gdGVzdCB0aGluZ3MgeW91IGNhbiBzcG90IGxpYnRvb2wgeWVsbGluZworICAgICBhYm91dCBpbXByb3BlciBudW1iZXJpbmcgYmVmb3JlIHlvdSBtYWtlIHRoZSByZWxlYXNlIGFuZCBub3QKKyAgICAgYWZ0ZXIgeW91J3ZlIHVwbG9hZGVkIHRoZSB0YXIgYmFsbCA6LS8KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK01BTlVBTCAtIFNURVAgMgorCisgIENoYW5naW5nIHRoZSBsaWJ0b29sIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gTWFrZWZpbGUudG9wLgorICBVcGRhdGluZyB0aGUgQ2hhbmdlTG9nIGZpbGUKKworICAgICAgLSBUaGUgQ2hhbmdlTG9nIGVudHJpZXMgYXJlIGV4dHJhY3RlZCAobm9ybWFsbHkgYXV0b21hdGljYWxseSkKKyAgICAgICAgdXNpbmcgdGhlIGNvbW1hbmQ6CisKKyAgICAgICAgICAkIHN2bjJjbCAtZiBDaGFuZ2VMb2cuYWRkIC0tYnJlYWstYmVmb3JlLW1zZyAtLXN0b3Atb24tY29weQorCisgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIHN2bjJjbCBpbnN0YWxsZWQsIHlvdSBjYW4gdHJ5IGFuZCBmaW5kIGEKKyAgICAgICAgc3VpdGFibGUgYmluYXJ5IHBhY2thZ2UgZm9yIHlvdXIgYXJjaGl0ZWN0dXJlLCBvciB5b3UgY2FuCisgICAgICAgIGdldCBpdCBkaXJlY3RseSBmcm9tCisgICAgICAgICAgICAgIGh0dHA6Ly9jaC50dWRlbGZ0Lm5sL35hcnRodXIvc3ZuMmNsCisgICAgICAgIFlvdSBtYXkgbmVlZCB0byByZW5hbWUgdGhlIHNjcmlwdCBmcm9tICdzdm4yY2wuc2gnIHRvICdzdm4yY2wnCisKKyAgICAgIC0gSW4gZWl0aGVyIGNhc2UsIHRoZXkgYXJlIGZpeGVkIHVwIChhdXRvbWF0aWNhbGx5KSB1c2luZzoKKworICAgICAgICAgICQgcGVybCBkaXN0L2NoYW5nZWxvZ2ZpeCA8IENoYW5nZUxvZy5hZGQgPiBDaGFuZ2VMb2cucmVhbGx5YWRkCisgICAgICAgIG9yCisgICAgICAgICAgJCBwZXJsIGRpc3QvY2hhbmdlbG9nZml4IFY1LXtOfS1wYXRjaGVzIDwgQ2hhbmdlTG9nLmFkZCA+IENoYW5nZUxvZy5yZWFsbHlhZGQKKworICAgICAgLSBUaGUgbWFudWFsIHByb2Nlc3Npbmcgc3RlcCBpcyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlIHBvcnRpb24KKyAgICAgICAgb2YgdGhlIGZpbGUgJ0NoYW5nZUxvZy5yZWFsbHlhZGQnIGludG8gJ0NoYW5nZUxvZycuICBZb3UgY2FuCisgICAgICAgIHVzdWFsbHkgZmluZCB0aGUgcG9pbnQgd2hlcmUgdGhlIHByZXZpb3VzIHJlbGVhc2Ugc3RhcnRlZCBpbgorICAgICAgICB0aGUgZmlsZSBieSBzZWFyY2hpbmcgZm9yICJ2ZXJzaW9uIHRhZyIuCisKKyAgICAgIC0gUGxlYXNlIGtlZXAgdGhlIGxpbmUgb2YgZGFzaGVzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIGFzIHRoaXMKKyAgICAgICAgbWFrZXMgaXQgZWFzaWVyIHRvIGNvcHkgZHVyaW5nIHRoZSBuZXh0IHJlbGVhc2UuCisKKyAgICAgIC0gSWYgdXNpbmcgZW1hY3MsIHN3aXRjaCBmcm9tIGNoYW5nZWxvZy1tb2RlIHRvIHRleHQtbW9kZS4KKworICAgICAgLSBDaGVjayBpbiB0aGUgbmV3IENoYW5nZUxvZzoKKworICAgICAgICAgICQgc3ZuIGNvbW1pdCAtbSAidXBkYXRlIGZvciByZWxlYXNlIFgiIENoYW5nZUxvZworCisgICAgICAgIFRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5ICJtYWtlcmVsZWFzZSIKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK01BTlVBTCAtIFNURVAgMworCitVcGRhdGluZyBSRUFETUUsIE5FV1MsIGFuZCBDSEFOR0VTIGZpbGVzCisKKyAgWyBUaGlzIGluZm9ybWF0aW9uIGhhcyBiZWVuIG1vdmVkIHRvOgorCisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0NvbW1pdF9tZXNzYWdlX2F1dG8tZXh0cmFjdGlvbl9mb3JtYXRzCisKKyAgXQorCitIb3dldmVyLCBsZWF2aW5nIHNvbWUgZXhhbXBsZXMgaGVyZSBmb3IgcXVpY2sgcmVmZXJyYWw6CisKKyAgU1ZOIGNvbW1pdCBtZXNzYWdlcyB0aGF0IGdlbmVyYXRlIGF1dG8tTkVXUyBhbmQgYXV0by1DSEFOR0VTCisgIGV4dHJhY3Rpb25zIHNob3VsZCBiZSBmb3JtYXR0ZWQgbGlrZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgorCisgICAgTkVXUzogc25tcGQ6IEkgZGlkIHNvbWV0aGluZyByZWFsbHkgY29vbCB0byB0aGUgYWdlbnQKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IGZpeGVkIHNvbWV0aGluZyBtaW5vciBpbiBzbm1wdHJhcGQKKyAgICBORVdTOiBwZXJsOiBQQVRDSDogMTIzLDQ1NjogQXBwbGllZCBwYXRjaGVzIDEyMyBhbmQgNDU2IHRvIHN1cHBvcnQgcGVybDYKKyAgICBDSEFOR0VTOiBCVUc6IDEzOiBGaXhlZCBidWcgMTMgJiBzZWN1cmVkIHRoZSB3b3JsZCBhdCBsYXJnZSBhZ2FpbnN0IGhhY2tlcnMKKyAgICBORVdTOiBwZXJsOiBQQVRDSDogMTIzOiBmcm9tIFJvYmVydDogZGlkIHNvbWV0aGluZworICAgIE5FV1M6IHBlcmw6IFBBVENIOiAxMjM6IGZyb20gIlJvYmVydCBTdG9yeSI6IGRpZCBzb21ldGhpbmcgZWxzZQpkaWZmIC0tZ2l0IGEvZGlzdC9hdXRvY29uZi12ZXJzaW9uIGIvZGlzdC9hdXRvY29uZi12ZXJzaW9uCmluZGV4IGFjYzA3OTcuLjI2NGYyY2UgMTAwNjQ0Ci0tLSBhL2Rpc3QvYXV0b2NvbmYtdmVyc2lvbgorKysgYi9kaXN0L2F1dG9jb25mLXZlcnNpb24KQEAgLTEgKzEgQEAKLTIuNTkKKzIuNjgKZGlmZiAtLWdpdCBhL2Rpc3QvY2hlY2stYXBpLWNoYW5nZSBiL2Rpc3QvY2hlY2stYXBpLWNoYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjYxZTQyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9jaGVjay1hcGktY2hhbmdlCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorIworIyBzaW1wbGlzdGljIHNjcmlwdCB0byBjaGVjayBhbGwgaGVhZGVyIGZpbGVzIGZvcgorIyBkaWZmZXJlbmNlcy4gSW50ZW5kZWQgdG8gaGVscCBkZXRlY3QgYXBpIGNoYW5nZXMKKyMgYmV0d2VlbiByZWxlYXNlcy4KKyMKKyMgaXQncyBub3QgcHJldHR5IG9yIGVmZmljaWVudCwgYW5kIGluc3BlY3Rpb24gb2YKKyMgdGhlIHJlc3VsdHMgbXVzdCBiZSBkb25lIG1hbnVhbGx5LgorIworIyBpdCdzIGFsc28gbm90IHNlY3VyZSAoZG9uJ3QgcnVuIGFzIHJvb3QpCisjIG9yIHBvcnRhYmxlLiBUZXN0ZWQgb24gTGludXguCisjCisKK2lmIFsgIngkMSIgPSAieCIgLW8gIngkMiIgPSAieCIgXTsgdGhlbgorICAgZWNobyAiVXNhZ2U6ICQwIDxvbGQtZGlyPiA8bmV3LWRpcj4iCisgICBleGl0IDEKK2ZpCisKK29kPSQxCituZD0kMgorRElSPS90bXAKK09VVFBVVD0kRElSL2FwaS1kaWZmLnBhdAorT0RUPSRESVIvYXBpLW9kCisKK2lmIFsgISAtZCAkb2QgXTsgdGhlbgorICAgZWNobyAib2xkIGRpciAkb2QgZG9lc24ndCBleGlzdCIKKyAgIGV4aXQgMQorZmkKKworaWYgWyAhIC1kICRuZCBdOyB0aGVuCisgICBlY2hvICJvbGQgZGlyICRuZCBkb2Vzbid0IGV4aXN0IgorICAgZXhpdCAxCitmaQorCisjIGZpbmQgaGVhZGVyIGluIG5kCitybSAtZiAkT1VUUFVUICRPRFQgMj4vZGV2L251bGwKKyhjZCAkb2QgJiYgZmluZCAuIC10eXBlIGYgLW5hbWUgIiouaCJ8c29ydCA+ICRPRFQpCisKK09IPWBjYXQgJE9EVGAKK2ZvciBoIGluICRPSAorZG8KKyAgIG5oPSRuZC8kaAorICAgb2g9JG9kLyRoCisgICBlY2hvICIqICRuaCIKKyAgIGlmIFsgLWYgIiRuaCIgXTsgdGhlbgorICAgICAgZWNobyAiKiBkaWZmOiAkaCB2cyAkbmgiID4+ICRPVVRQVVQKKyAgICAgIGRpZmYgLXUgJG9oICRuaCA+PiAkT1VUUFVUIDI+JjEKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiogT2xkIGhlYWRlciAkaCBub3QgZm91bmQgaW4gbmV3IGhlYWRlcnMiID4+ICRPVVRQVVQKKyAgIGZpCitkb25lCisKK2VjaG8gIkluc3BlY3Qgb3V0cHV0IGluICRPVVRQVVQiCitlY2hvICJTZWUgTWFrZWZpbGUudG9wIGZvciBsaWJ0b29sIHZlcnNpb24gYnVtcGluZyBydWxlcy4iCmRpZmYgLS1naXQgYS9kaXN0L2N2c3Nob3cgYi9kaXN0L2N2c3Nob3cKaW5kZXggNjIzYjMyZC4uNzUzOTU5NSAxMDA3NTUKLS0tIGEvZGlzdC9jdnNzaG93CisrKyBiL2Rpc3QvY3Zzc2hvdwpAQCAtMSw0NiArMSw2OSBAQAotIyEvYmluL2Jhc2gKLSMKLSMgJElkJAorIyEvYmluL3NoCiAjCiBleHBvcnQgQ1ZTX1JTSD1zc2gKIFRBRz0KIAotaWYgWyAkIyAtZXEgMCBdOyB0aGVuCi0JRElSPS4KLWVsc2UKLQlpZiBbICQjIC1uZSAxIF07IHRoZW4KLQkJZWNobyAidXNhZ2U6ICQwIDx3b3JraW5nIGRpcmVjdG9yeT4iCi0JCWV4aXQKLQlmaQotCURJUj0kMQotZmkKLQotaWYgWyAhIC1kICRESVIgXTsgdGhlbgotCWVjaG8gIm5vIHN1Y2ggZGlyZWN0b3J5ICckRElSJyIKLQlleGl0Ci1maQotCi1pZiBbICEgLWQgJERJUi9DVlMgXTsgdGhlbgotCWVjaG8gIickRElSJyBoYXMgbm8gQ1ZTIGRpcmVjdG9yeSEiCi0JZXhpdAotZmkKLQotaWYgWyAhIC1mICRESVIvQ1ZTL1JlcG9zaXRvcnkgXTsgdGhlbgorZG9fY3ZzKCkKK3sKKyAgIERJUj0kMQorICAgaWYgWyAhIC1mICRESVIvQ1ZTL1JlcG9zaXRvcnkgXTsgdGhlbgogCWVjaG8gIickRElSJyBoYXMgbm8gQ1ZTL1JlcG9zaXRvcnkhIgogCWV4aXQKLWZpCisgICBmaQogCi1pZiBbICEgLWYgJERJUi9DVlMvUm9vdCBdOyB0aGVuCisgICBpZiBbICEgLWYgJERJUi9DVlMvUm9vdCBdOyB0aGVuCiAJZWNobyAiJyRESVInIGhhcyBubyBDVlMvUm9vdCEiCiAJZXhpdAotZmkKKyAgIGZpCiAKLWlmIFsgLWYgJERJUi9DVlMvVGFnIF07IHRoZW4KKyAgIGlmIFsgLWYgJERJUi9DVlMvVGFnIF07IHRoZW4KIAlUQUc9Ii1yIGBjYXQgJERJUi9DVlMvVGFnIHwgY3V0IC1jIDItYCIKKyAgIGZpCisKKyAgIFJFUD0iYGNhdCAkRElSL0NWUy9SZXBvc2l0b3J5YCIKKyAgIFJPT1Q9ImBjYXQgJERJUi9DVlMvUm9vdGAiCisKKyAgIGVjaG8gIkRpcmVjdG9yeSAkRElSIGlzIHJvb3RlZCBhdCAkUk9PVCwgJFRBRyAkUkVQLi4uIgorICAgZWNobyAiICAgdXBkYXRlIHdpdGggY3ZzIC16MyAtZCAkUk9PVCAtcSBjbyAkVEFHIC1kICRESVIgJFJFUCIKK30KKworZG9fc3ZuKCkKK3sKKyAgIERJUj0kMQorICAgaWYgWyAhIC1kICRESVIvLnN2biBdOyB0aGVuCisJZWNobyAiJyRESVInIGhhcyBubyAuc3ZuLyBzdWJkaXIhIgorCWV4aXQKKyAgIGZpCisKKyAgIFJPT1Q9YHN2biBpbmZvIHwgZ3JlcCBVUkx8Y3V0IC1mMiAtZCAiICJgCisgICBpZiBbIC16ICIkUk9PVCIgXTsgdGhlbgorICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCByb290IGZyb20gJERJUi8uc3ZuL2VudHJpZXMiCisgICAgICBleGl0IDEKKyAgIGZpCisKKyAgIGVjaG8gIkRpcmVjdG9yeSAkRElSIGlzIHJvb3RlZCBhdCAkUk9PVC4uLiIKKyAgIGVjaG8gIiAgIHVwZGF0ZSB3aXRoIHN2biBjbyAkUk9PVCAkRElSIgorfQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKwlESVJTPS4KK2Vsc2UKKwlESVJTPSRACiBmaQogCi1SRVA9ImBjYXQgJERJUi9DVlMvUmVwb3NpdG9yeWAiCi1ST09UPSJgY2F0ICRESVIvQ1ZTL1Jvb3RgIgorZm9yIGQgaW4gJERJUlMKK2RvCisgICBpZiBbICEgLWQgJGQgXTsgdGhlbgorCWVjaG8gIm5vIHN1Y2ggZGlyZWN0b3J5ICckZCciCisJZXhpdAorICAgZmkKIAotZWNobyAiRGlyZWN0b3J5ICRESVIgaXMgcm9vdGVkIGF0ICRST09ULCAkVEFHICRSRVAuLi4iCi1lY2hvICJ1cGRhdGUgd2l0aCBjdnMgLXozIC1kICRST09UIC1xIGNvICRUQUcgLWQgJERJUiAkUkVQIgorICAgaWYgWyAtZCAkZC9DVlMgXTsgdGhlbgorCWRvX2N2cyAkZAorICAgZWxpZiBbIC1kICRkLy5zdm4gXTsgdGhlbgorCWRvX3N2biAkZAorICAgZWxzZQorCWVjaG8gIickZCcgaGFzIG5laXRoZXIgQ1ZTIG5vciBTVk4gaW5mb3JtYXRpb24hIgorICAgZmkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvZGlzdC9jdnN1cCBiL2Rpc3QvY3ZzdXAKaW5kZXggMDhjOGE3NS4uY2EwN2IwZiAxMDA3NTUKLS0tIGEvZGlzdC9jdnN1cAorKysgYi9kaXN0L2N2c3VwCkBAIC0xLDggKzEsOCBAQAotIyEvdXNyL2Jpbi9lbnYgYmFzaAorIyEvYmluL3NoCiAjCiAjICRJZCQKICMKLWV4cG9ydCBDVlNfUlNIPXNzaAorQ1ZTX1JTSD1zc2g7IGV4cG9ydCBDVlNfUlNICiBUQUc9CiBXTz0wCiBERVNUPQpAQCAtMTgsNiArMTgsNyBAQAogICAgICAgICBUQVI9Jy91c3IvYmluL3N0YXIgLUh1c3RhciAtbm90IC1wYXQ9IiovQ1ZTLyoiIC1jIC1mJwogICAgIGVsaWYgWyAteCAvYmluL3RhciBdOyB0aGVuCiAgICAgICAgIFRBUj0iL2Jpbi90YXIgLS1leGNsdWRlPUNWUyAtYyAtZiIKKyAgICAgICAgZWNobyAid2FybmluZzogc3RhciBub3QgYXZhaWxhYmxlLCB1c2luZyAobGVzcyBwb3J0YWJsZSkgdGFyLi4uIgogICAgIGVsc2UKICAgICAgICAgZWNobyAibmVpdGhlciAvdXNyL2Jpbi9zdGFyIG5vciAvYmluL3RhciBmb3VuZC4iCiAgICAgICAgIGV4aXQKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1ODgxYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisjIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgY29uZmlndXJlLWxpa2UKKyMgc2NyaXB0LCBidXQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIG00IGRpcmVjdGx5LgorQUNfSU5JVChbTmV0LVNOTVBdLCBbNS42LnByZTJdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCisKK0FDX0FSR19XSVRIKHNlY3VyaXR5LW1vZHVsZXMsCitbICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS5dKQorQUNfQVJHX1dJVEgob3V0cHV0LWhlYWRlciwKK1sgIC0td2l0aC1vdXRwdXQtaGVhZGVyPSJmaWxlIiAgICAgICAgICAgIFdoZXJlIHRvIHN0b3JlIHRoZSBoZWFkZXIgZmlsZV0pCitBQ19BUkdfV0lUSChvdXRwdXQtaW5pdCwKK1sgIC0td2l0aC1vdXRwdXQtaW5pdD0iZmlsZSIgICAgICAgICAgICAgIFdoZXJlIHRvIHN0b3JlIHRoZSBpbml0IGZpbGVdKQorCittNF9pbmNsdWRlKGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMpCisKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKKworaWYgdGVzdCAieCR3aXRoX291dHB1dF9oZWFkZXIiICE9ICJ4IiA7IHRoZW4KKyAgICBzZWN1cml0eV9pbmNsX2ZpbGU9IiR3aXRoX291dHB1dF9oZWFkZXIiCitmaQorCitpZiB0ZXN0ICJ4JHdpdGhfb3V0cHV0X2luaXQiICE9ICJ4IiA7IHRoZW4KKyAgICBzZWN1cml0eV9pbml0X2ZpbGU9IiR3aXRoX291dHB1dF9pbml0IgorZmkKKworbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzKQorCisKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE3YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisjIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgY29uZmlndXJlLWxpa2UKKyMgc2NyaXB0LCBidXQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIG00IGRpcmVjdGx5LgorQUNfSU5JVChbTmV0LVNOTVBdLCBbNS42LnByZTJdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCisKK0FDX0FSR19XSVRIKHRyYW5zcG9ydHMsCitbICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuXSkKK0FDX0FSR19XSVRIKG91dF90cmFuc3BvcnRzLAorWyAgLS13aXRoLW91dC10cmFuc3BvcnRzPSJ0MSAuLi4iICBFeGNsdWRlIGxpc3RlZCBTTk1QIHRyYW5zcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuXSkKKworQUNfQVJHX1dJVEgob3V0cHV0LAorWyAgLS13aXRoLW91dHB1dD0iZmlsZSIgICAgICAgICAgICBXaGVyZSB0byBzdG9yZSB0aGUgaGVhZGVyIGZpbGVdKQorCittNF9pbmNsdWRlKGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMpCisKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKKworaWYgdGVzdCAieCR3aXRoX291dHB1dCIgIT0gIngiIDsgdGhlbgorICAgIGN0b3JfaGVhZGVyPSR3aXRoX291dHB1dAorZmkKKworbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzKQorCisKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW4gYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjkyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzCisjCitTRUQ9IkBTRURAIgorQ1BQPSJAQ1BQQCIKK0dSRVA9IkBHUkVQQCIKK1BBUlRJQUxUQVJHRVRGTEFHUz0iQFBBUlRJQUxUQVJHRVRGTEFHU0AiCitORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEU9IkBhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEVAIgorCitzcmNkaXI9QHNyY2RpckAKZGlmZiAtLWdpdCBhL2Rpc3QvbWFrZXJlbGVhc2UgYi9kaXN0L21ha2VyZWxlYXNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNDZiOWY5Li4wMDAwMDAwCi0tLSBhL2Rpc3QvbWFrZXJlbGVhc2UKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLXVzZSBzdHJpY3Q7Ci11c2UgUG9kOjpVc2FnZTsKLQotCi1teSAlb3B0czsKLW15ICRkZXNjcjsKLQotTG9jYWxHZXRPcHRpb25zKFwlb3B0cywKLQkgICBbJ3J8cmVnZXhwLWlnbm9yZS1zdGVwcz1zJywnSWdub3JlIHRoZXNlIFJFR0VYUCBzdGVwcyddLAotCSAgIFsnc3xzdGFydC1hdD1zJywgICAgICAgICAgICdTa2lwIGFsbCBzdGVwcyB1bnRpbCBBUkcnXSwKLQkgICBbJ2l8aW50ZXJhY3RpdmUnLCAgICAgICAgICAnUHJvbXB0IHdoZXRoZXIgdG8gZG8gZWFjaCBzdGVwJ10sCi0JICAgWydufGRyeS1ydW4nLCAgICAgJ0RyeSBydW4gb25seS4gIERvblwndCBhY3R1YWxseSBkbyBhbnl0aGluZy4nXSwKLQkgICBbJ2h8aGVscCcsICdIZWxwJ10pOwotCi1wb2QydXNhZ2UoMSkgaWYgKCRvcHRzeydoJ30pOwotbXkgJHZlcnNpb24gPSBzaGlmdDsKLXBvZDJ1c2FnZSggIk5vIHZlcnNpb24gc3VwcGxpZWQiICkgaWYgKCEkdmVyc2lvbik7Ci1teSAkZXh0cmFqdW5rID0gc2hpZnQ7Ci1wb2QydXNhZ2UoICJVbmV4cGVjdGVkIGFyZ3VtZW50ICgkZXh0cmFqdW5rKSIgKSBpZiAoJGV4dHJhanVuayk7Ci1teSAkdnRhZyAgID0gJHZlcnNpb247Ci1teSAkYnJhbmNoID0gIiI7Ci0jIEVuc3VyZSB3ZSBoYXZlIGJvdGggbnVtZXJpYyBhbmQgdGFnLXN0eWxlIHZlcnNpb24gbGFiZWxzCi0jIHBsdXMgdGhlIGJyYW5jaCB0aGF0IHdlJ3JlIHdvcmtpbmcgZnJvbSAoaWYgcmVsZXZhbnQpCi1pZiAoICR2ZXJzaW9uID1+IC9eRXh0LykgewotICAgICR2ZXJzaW9uID1+IHMvXkV4dC0vL2c7Ci0gICAgJHZlcnNpb24gPX4gcy8tLy4vZzsKLX0gZWxzZSB7Ci0gICAgJHZ0YWcgPX4gcy9cLi8tL2c7Ci0gICAgJHZ0YWcgPSAiRXh0LSIgLiAkdnRhZzsKLX0KLWlmICggJHZlcnNpb24gPX4gL14oWzAtOV1cLlswLTldKVwuWzAtOV0vKSB7Ci0gICAgKCRicmFuY2ggPSAkdmVyc2lvbikgPX4gcy8oWzAtOV1cLlswLTldKVwuWzAtOV0uKi9cMS87Ci0gICAgJGJyYW5jaCA9fiBzL1wuLy0vOwotICAgICRicmFuY2ggPSAiViR7YnJhbmNofS1wYXRjaGVzIjsKLX0KLQotIyBNYWtlIHN1cmUgd2UncmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGJ1aWxkIHRyZWUKLSMgIChpZiB3ZSdyZSBpbiB0aGUgZGlzdCBkaXJlY3RvcnksIHRoZW4gY2QgLi4pCi1jaGRpcigiLi4iKSBpZiAoLWYgJ21ha2VyZWxlYXNlJyk7Ci1kaWUgIk5vdCBhdCByb290IG9mIGJ1aWxkIHRyZWUiIGlmICghIC1mICdjb25maWd1cmUuaW4nKTsKLQotIwotIyAgVEVTVElORzoKLSMKLSMgU3RlcCAxKSBFbnN1cmUgdGhlIGJ1aWxkIHRyZWUgaXMgdXAgdG8gZGF0ZQotU3lzdGVtKCJ1cGRhdGUiLCJzdm4gLXUgc3RhdHVzIik7Ci1TeXN0ZW0oInVwZGF0ZSIsInN2biAtcSB1cGRhdGUiKTsKLQotIyBTdGVwIDIpIENoYW5nZSB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcAotbWFudWFsc3RlcCgndmVyc2lvbjptYW51YWxlZGl0JywKLQkgICAiWW91IChtYXkpIG5lZWQgdG8gZWRpdCBNYWtlZmlsZS50b3AgdG8gdXBkYXRlIHRoZSBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyaW5nCi0gICAgICh1c3VhbGx5IGp1c3QgZm9yIHRoZSBmaXJzdCBwcmUtcmVsZWFzZSBvZiBhIGdpdmVuIHZlcnNpb24pLgotICAgICAgICBTZWUgdGhlIGNvbW1lbnRzIGluIFJFTEVBU0UtSU5TVFJVQ1RJT05TCi0gICAgICAgIGFib3V0IExJQkNVUlJFTlQsIExJQkFHRSBhbmQgTElCUkVWSVNJT04uCi0KLSAgSSdsbCBjb21taXQgdGhlIGZpbGUgZm9yIHlvdSBhZnRlciB5b3UncmUgZG9uZQotIik7Ci1TeXN0ZW0oInZlcnNpb246Y29tbWl0IiwKLSAgICAgICAic3ZuIGNvbW1pdCAtbSBcInZlcnNpb24gdXBkYXRlXCIgTWFrZWZpbGUudG9wIik7Ci0KLSMgU3RlcCAzKSBjb25maWd1cmUgYW5kIGJ1aWxkIGFuZCB0ZXN0IGl0Ci1teSAkdHJhbnNwb3J0YXJncyA9ICIiOwotaWYgKCAkXk8gZXEgImxpbnV4IiApIHsKLSAgICAkdHJhbnNwb3J0YXJncyA9ICItLXdpdGgtdHJhbnNwb3J0cz1JUFgiOwotfQotbXkgJGNvbmZpZ3VyZWFyZ3MgPSAiLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzICIuCi0gICAgIi0td2l0aC1taWItbW9kdWxlcz0nICAgICBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlICAgIi4KLSAgICAiICB0ZXN0aGFuZGxlciBzbXV4IFJtb24nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLgotICAgICIgJHRyYW5zcG9ydGFyZ3MgICAgICAgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICAgICIuCi0gICAgIi0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkIjsKLVN5c3RlbSgiYnVpbGQ6ZGlzdGNsZWFuIiwibWFrZSBkaXN0Y2xlYW4iKSBpZiAoLWYgJ01ha2VmaWxlJyk7Ci1TeXN0ZW0oImJ1aWxkOmNvbmZpZ3VyZSIsIi4vY29uZmlndXJlICRjb25maWd1cmVhcmdzIik7Ci1TeXN0ZW0oImJ1aWxkOm1ha2UiLCJtYWtlIik7Ci1TeXN0ZW0oImJ1aWxkOnRlc3QiLCJtYWtlIHRlc3QgVEVTVE9QVFM9LW4iKTsKLQotIwotIyBET0NVTUVOVEFUSU9OCi0jCi0jIFN0ZXAgNCkgVXBkYXRlIGRveHlnZW4gdmVyc2lvbiBudW1iZXIsIGFuZCBnZW5lcmF0ZSBtYW4gcGFnZXMKLVN5c3RlbSgiZG9jczpkb3h5Z2VuY29uZiIsCi0gICAgICAgInBlcmwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiAkdmVyc2lvbiAtTSAtUCAtQyAtdCBkb3h5Z2VuIik7Ci1TeXN0ZW0oImRvY3M6bWFrZSIsIm1ha2UgZG9jcyIpOwotU3lzdGVtKCJkb2NzOm1hbmNwIiwibWFrZSBtYW5jcCIpOwotU3lzdGVtKCJkb2NzOnVwZGF0ZSIsInN2biAtdSBzdGF0dXMgbWFuIik7Ci1tYW51YWxzdGVwKCdkb2NzOm1hbnVhbGFkZG5ld21hbicsCi0gICJVcGRhdGUgbWFuL01ha2VmaWxlLmluIHdpdGggZGV0YWlscyBvZiBhbnkgbmV3IG1hbiBwYWdlcywKLSAgYW5kIHJ1biAnc3ZuIGFkZCcgb24gdGhlbS4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyIHlvdSdyZSBkb25lCi0iKTsKLVN5c3RlbSgiZG9jczpjb21taXQiLCJzdm4gY29tbWl0IC1tIFwiZG9jdW1lbnRhdGlvbiB1cGRhdGVcIiBtYW4iKTsKLQotIyBTdGVwIDUpIENoZWNrIGNvZGUgZm9yIGlsbGVnYWwgY29uc3RydWN0cwotU3lzdGVtKCJjb2RlOmNoZWNrY29tbWVudHMiLCJtYWtlIGNoZWNrcyIpOwotCi0jIFN0ZXAgNikgVXBkYXRlIE1ha2VmaWxlIGRlcGVuZGVuY2llcwotU3lzdGVtKCJjb2RlOm1ha2VkZXBlbmQiLCJtYWtlIGRpc3RkZXBlbmQiKTsKLVN5c3RlbSgiY29kZTpjb21taXRkZXBlbmQiLCJzdm4gY29tbWl0IC1tIFwibWFrZSBkZXBlbmRcIiBgZmluZCAuIC1uYW1lIE1ha2VmaWxlLmRlcGVuZGAiKTsKLQotIyBTdGVwIDcpIFVwZGF0ZSBDaGFuZ2VMb2cKLSMgICBYWFg6IE1heSBuZWVkIHRvIGV4dGVuZCB0aGUgZm9sZGluZyBsaW5lLWxlbmd0aCwKLSMgICAgICAgIHRvIGF2b2lkIHN2bjJjbCBtYW5nbGluZyBDSEFOR0VTL05FV1MgZW50cmllcwotU3lzdGVtKCJjaGFuZ2Vsb2c6c3ZuMmNsIiwKLSAgICAgICAic3ZuMmNsIC1mIENoYW5nZUxvZy5hZGQgLS1icmVhay1iZWZvcmUtbXNnIC0tc3RvcC1vbi1jb3B5Iik7Ci1TeXN0ZW0oImNoYW5nZWxvZzpjaGFuZ2Vsb2dmaXgiLAotICAgICAgICJwZXJsIGRpc3QvY2hhbmdlbG9nZml4ICRicmFuY2ggPCBDaGFuZ2VMb2cuYWRkID4gQ2hhbmdlTG9nLnJlYWxseWFkZCIpOwotbWFudWFsc3RlcCgiY2hhbmdlbG9nOm1hbnVhbGVkaXQiLAotICAgICAgICAgICAiWW91IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHRoZSAqcmVsZXZlbnQqIHBvcnRpb25zIG9mCi0gICdDaGFuZ2VMb2cucmVhbGx5YWRkJyBpbnRvIHRoZSBDaGFuZ2VMb2cgZmlsZS4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyd2FyZHMiKTsKLVN5c3RlbSgiY2hhbmdlbG9nOmNvbW1pdCIsInN2biBjb21taXQgLW0gXCJ2ZXJzaW9uIHVwZGF0ZVwiIENoYW5nZUxvZyIpOwotCi0jIFN0ZXAgOCkgVXBkYXRlIFJFQURNRS9ORVdTL0NIQU5HRVMKLVN5c3RlbSgiZG9jczpuZXduZXdzIiwKLSAgICAgICAicGVybCBkaXN0L2V4dHJhY3RuZXdzIC1zIC0tLS0tIC1lIC0tLS0tIENoYW5nZUxvZyIpOwotU3lzdGVtKCJkb2NzOm5ld25ld3MiLAotICAgICAgICJwZXJsIGRpc3QvZXh0cmFjdG5ld3MgLWMgQ0hBTkdFUy5uZXcyIC1uIE5FV1MubmV3MiBDaGFuZ2VMb2cucmVhbGx5YWRkIik7Ci1tYW51YWxzdGVwKCJkb2NzOlJFQURNRSIsCi0gICAgICAgICAgICJZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlIHJlbGV2ZW50IHBvcnRpb25zIG9mCi0gICdDSEFOR0VTLm5ldycgYW5kICdORVdTLm5ldycgaW50byB0aGUgQ0hBTkdFUyBhbmQgTkVXUyBmaWxlLgotICAoVGhlcmUgYXJlIGFsdGVybmF0aXZlIHZlcnNpb25zIGluICdDSEFOR0VTLm5ldzInIGFuZCAnTkVXUy5uZXcyJykKLSAgWW91IG1heSB3aXNoIHRvIHVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYXMgd2VsbC4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyd2FyZHMiKTsKLVN5c3RlbSgiZG9jczpjb21taXQiLAotICAgICAgICJzdm4gY29tbWl0IC1tIFwidmVyc2lvbiB1cGRhdGVcIiBSRUFETUUgTkVXUyBDSEFOR0VTIik7Ci0KLSMKLSMgUkVMRUFTRQotIwotIyBTdGVwICA5KSAgUmVzeW5jIGNvZGUgKG9taXR0ZWQpCi0jIFN0ZXAgMTApICBVcGRhdGUgdmVyc2lvbgotU3lzdGVtKCJyZWxlYXNlOnZlcnNpb25zdGFtcCIsCi0gICAgICAgInBlcmwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiAkdmVyc2lvbiAtTSAtUCAtQyIpOwotCi0jIFN0ZXAgMTEpICBDcmVhdGUgdGhlIHJlbGVhc2UgdGFnIGNoZWNrcG9pbnQKLW15ICRyb290PSJodHRwczovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9uZXQtc25tcCI7Ci1pZiAoICRicmFuY2ggKSB7Ci0gICAgU3lzdGVtKCJyZWxlYXNlOnRhZyIsCi0gICAgICAgInN2biBjb3B5IC1tIFwiJHZlcnNpb24gcmVsZWFzZVwiICRyb290L2JyYW5jaGVzLyRicmFuY2ggJHJvb3QvdGFncy8kdnRhZyIpOwotfSBlbHNlIHsKLSAgICBTeXN0ZW0oInJlbGVhc2U6dGFnIiwKLSAgICAgICAic3ZuIGNvcHkgLW0gXCIkdmVyc2lvbiByZWxlYXNlXCIgJHJvb3QvdHJ1bmsgJHJvb3QvdGFncy8kdnRhZyIpOwotfQotCi0jIFN0ZXAgMTIpICBDb25zdHJ1Y3QgdGhlIHRhcmJhbGwKLW15ICR0YXIgPSAic3RhciBhcnR5cGU9dXN0YXIiOyAgICAjIFhYWCAtIGNoZWNrIGZvciBzdGFyL2d0YXIvZXRjCi1TeXN0ZW0oInJlbGVhc2U6bWFrZWRpc3QiLAotICAgICAgICJzdm4gZXhwb3J0ICRyb290L3RhZ3MvJHt2dGFnfS9uZXQtc25tcCBuZXQtc25tcC0kdmVyc2lvbiIpOwotU3lzdGVtKCJyZWxlYXNlOnJlbW92ZWZpbGVzIiwKLSAgICAgICAibmV0LXNubXAtJHZlcnNpb24vcmVtb3ZlLWZpbGVzIG5ldC1zbm1wLSR2ZXJzaW9uIik7Ci1TeXN0ZW0oInJlbGVhc2U6bWFrZWRpc3QiLAotICAgICAgICIkdGFyIC1jIC16IC1mIG5ldC1zbm1wLSR7dmVyc2lvbn0udGFyLmd6ICBuZXQtc25tcC0kdmVyc2lvbiIpOwotU3lzdGVtKCJyZWxlYXNlOm1ha2V6aXBjbGVhbiIsCi0gICAgICAgInJtIC1mIG5ldC1zbm1wLSR7dmVyc2lvbn0uemlwIik7Ci1TeXN0ZW0oInJlbGVhc2U6bWFrZXppcCIsCi0gICAgICAgInppcCAtciBuZXQtc25tcC0ke3ZlcnNpb259LnppcCAgbmV0LXNubXAtJHZlcnNpb24iKTsKLQotCi0jIFN0ZXAgMTMpICBTaWduIChvciBjaGVja3N1bSkgdGhlIHBhY2thZ2UKLW15ICRzaWcxOwotbXkgJHNpZzI7Ci1teSAkcGtnMSA9ICJuZXQtc25tcC0ke3ZlcnNpb259LnRhci5neiI7Ci1teSAkcGtnMiA9ICJuZXQtc25tcC0ke3ZlcnNpb259LnppcCI7Ci0KLVN5c3RlbSgicmVsZWFzZTpzZWFyY2hpbmctZ3BnLWtleXMiLAotICAgICAgICJncGcgLS1saXN0LXNlY3JldC1rZXlzIG5ldC1zbm1wLWFkbWluIik7Ci1pZigkPyAhPSAwKSB7Ci0gICAgJHNpZzEgPSAiJHtwa2cxfS5tZDUiOwotICAgICRzaWcyID0gIiR7cGtnMn0ubWQ1IjsKLSAgICBTeXN0ZW0oInJlbGVhc2U6bWQ1IiwibWQ1c3VtICRwa2cxID4gJHNpZzEiKTsKLSAgICBTeXN0ZW0oInJlbGVhc2U6bWQ1IiwibWQ1c3VtICRwa2cyID4gJHNpZzIiKTsKLX0gZWxzZSB7Ci0gICAgIyBjdXJyZW50bHkgb25seSByc3RvcnkgYW5kIGhhcmRha2VyIGhhdmUgdGhlIGdwZyBrZXlzIHRpbGwgV2VzCi0gICAgIyBzZWVzIHNvbWVvbmUgZWxzZSBpbiBwZXJzb24gOy0pCi0gICAgJHNpZzEgPSAiJHtwa2cxfS5hc2MiOwotICAgIFN5c3RlbSgicmVsZWFzZTpncGciLCJncGcgLXUgbmV0LXNubXAtYWRtaW4gLWEgLS1kZXRhY2gtc2lnbiAkcGtnMSIpOwotICAgICRzaWcyID0gIiR7cGtnMn0uYXNjIjsKLSAgICBTeXN0ZW0oInJlbGVhc2U6Z3BnIiwiZ3BnIC11IG5ldC1zbm1wLWFkbWluIC1hIC0tZGV0YWNoLXNpZ24gJHBrZzIiKTsKLX0KLQotIwotIyAgUkVMRUFTRSBURVNUSU5HOgotIwotIyBTdGVwIDE0KSAgVW5wYWNrLCBidWlsZCBhbmQgdGVzdCB0aGUgcmVsZWFzZSB0YXJiYWxsCi1TeXN0ZW0oInBvc3R0ZXN0OnVudGFyIiwgInJtIC1yZiBuZXQtc25tcC0ke3ZlcnNpb259Iik7Ci1TeXN0ZW0oInBvc3R0ZXN0OnVudGFyIiwgInRhciB4emYgbmV0LXNubXAtJHt2ZXJzaW9ufS50YXIuZ3oiKTsKLWNoZGlyKCJuZXQtc25tcC0ke3ZlcnNpb259Iik7Ci1TeXN0ZW0oInBvc3R0ZXN0OmNvbmZpZ3VyZSIsIi4vY29uZmlndXJlICRjb25maWd1cmVhcmdzIik7Ci1TeXN0ZW0oInBvc3R0ZXN0Om1ha2UiLCJtYWtlIik7Ci1TeXN0ZW0oInBvc3R0ZXN0OnRlc3QiLCJtYWtlIHRlc3QiKTsKLWNoZGlyKCIuLiIpOwotCi0jIFN0ZXAgMTUpICBEb3VibGUtY2hlY2sgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIGNoYW5nZXMKLVN5c3RlbSgicmVsZWFzZTp1cGRhdGUiLCJzdm4gLXUgc3RhdHVzIik7Ci0KLSMKLSMgU3RlcHMgMTYgYW5kIGZvbGxvd2luZyBhcmUgTk9UIGhhbmRsZWQgYXV0b21hdGljYWxseS4KLSMgU2VlIHRoZSBSRUxFQVNFLUlOU1RSVUNUSU9OUyBmb3IgZnVsbCBkZXRhaWxzLgotIwotcHJpbnQgU1RERVJSICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEZJTklTSEVEICoqKioqKioqKioqKioqKioqKioqXG4iOwotcHJpbnQgU1RERVJSICJcbkRvdWJsZSBjaGVjayB0aGUgU1ZOIHN0YXR1cyBvdXRwdXQgYWJvdmUgZm9yIGFueSBvdXRzdGFuZGluZyBjaGFuZ2VzXG5cbiI7Ci1wcmludCBTVERFUlIgIlJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gdXBsb2FkIHRoZSByZWxhc2UgdG8gU0Y6XG4iOwotcHJpbnQgU1RERVJSICIgIHJzeW5jIC12ICAkcGtnMSAkcGtnMiAkc2lnMSAkc2lnMiBmcnMuc291cmNlZm9yZ2UubmV0OnVwbG9hZHMvXG4iOwotcHJpbnQgU1RERVJSICJTZWUgUkVMRUFTRS1JTlNUUlVDVElPTlMgZm9yIGFueSBhZGRpdGlvbmFsIHN0ZXBzXG4iOwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXN1YiBTeXN0ZW0gewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNtZCA9ICRkZXNjciA9IGpvaW4oIiAiLCBAXyk7Ci0gICAgbXkgJHJjOwotICAgIHdoaWxlIChkb3N0ZXAoJG5hbWUpKSB7Ci0JcHJpbnQgU1RERVJSICIgIHJ1bm5pbmc6ICIsJGNtZCwiXG4iOwotCWxhc3QgaWYgKCRvcHRzeyduJ30pOwotCXN5c3RlbShAXyk7Ci0JJHJjID0gY2hlY2tyZXN1bHQoKTsKLSAgICAgICAgbGFzdCBpZiAoJHJjID09IDApOwotICAgIH0KLX0KLQotc3ViIGNoZWNrcmVzdWx0IHsKLSAgICBpZiAoJD8pIHsKLQlwcmludCBTVERFUlIgIlRoZSBhYm92ZSBTVEVQIGZhaWxlZC4gIENvbnRpbnVlIGFueXdheSAoeS9uL3IpPyAgIjsKLQlteSAkYW5zID0gPFNURElOPjsKLSAgICAgICAgcmV0dXJuIDEgaWYgKCRhbnMgPX4gL15yLyk7Ci0JaWYgKCRhbnMgPX4gL15uLykgewotCSAgICBwcmludCBTVERFUlIgIiAgRVhJVElOR1xuIjsKLQkgICAgZXhpdDsKLQl9Ci0gICAgfQotICAgcmV0dXJuIDA7Ci19Ci0KLXN1YiBkb3N0ZXAgewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0gICAgcHJpbnQgU1RERVJSICJcbioqKioqKioqKiogU1RFUDogJG5hbWUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOwotICAgIGlmICgkZGVzY3IpIHsKLQlwcmludCBTVERFUlIgIiAgWyRkZXNjcl1cbiI7Ci0JJGRlc2NyID0gdW5kZWY7Ci0gICAgfQotICAgIHByaW50ICJcbiI7Ci0gICAgaWYgKCRvcHRzeydzJ30gJiYgJG5hbWUgbmUgJG9wdHN7J3MnfSkgewotCXByaW50IFNUREVSUiAiICAgICAgW3NraXBwaW5nXVxuIjsKLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgJG9wdHN7J3MnfSA9ICcnOwotICAgIGlmICgkb3B0c3tyfSAmJiAkbmFtZSA9fiAvJG9wdHN7cn0vKSB7Ci0JcHJpbnQgU1RERVJSICIgICAgICBbc2tpcHBpbmddXG4iOwotCXJldHVybiAwOwotICAgIH0gZWxzaWYgKCRvcHRzeydpJ30pIHsKLQlwcmludCBTVERFUlIgIiAgRG8gdGhpcyBzdGVwICh5L24vcSk/ICAiOwotCW15ICRhbnMgPSA8U1RESU4+OwotCWlmICgkYW5zID1+IC9ebi8pIHsKLQkgICAgcHJpbnQgU1RERVJSICIgICAgICBbc2tpcHBpbmddXG4iOwotCSAgICByZXR1cm4gMDsKLQl9Ci0JaWYgKCRhbnMgPX4gL15xLykgewotCSAgICBwcmludCBTVERFUlIgIiAgICAgIFFVSVRUSU5HXG4iOwotCSAgICBleGl0OwotCX0KLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN1YiBtYW51YWxzdGVwIHsKLSAgICBteSAkdGFnID0gc2hpZnQ7Ci0KLSAgICBpZiAoZG9zdGVwKCR0YWcpKSB7Ci0JcHJpbnQgU1RERVJSICJcblxuIixqb2luKCIgIixAXyk7Ci0KLQlwcmludCBTVERFUlIgIlxuXG4gIEhpdCByZXR1cm4gd2hlbiBkb25lOiAgIjsKLQotCXJldHVybiAxIGlmICgkb3B0c3snbid9KTsKLQotCW15ICRib2d1cyA9IDxTVERJTj47Ci0JcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBnZXRvcHQgbG9uZyBndWkgcG9ydGFiaWxpdHkgY29kZQotIwotc3ViIExvY2FsR2V0T3B0aW9ucyB7Ci0gICAgaWYgKGV2YWwge3JlcXVpcmUgR2V0b3B0OjpHVUk6Okxvbmc7fSkgewotCWltcG9ydCBHZXRvcHQ6OkdVSTo6TG9uZzsKLQlHZXRvcHQ6OkdVSTo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSkpOwotCXJldHVybiBHZXRPcHRpb25zKEBfKTsKLSAgICB9IGVsc2UgewotCXJlcXVpcmUgR2V0b3B0OjpMb25nOwotCUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KGF1dG9faGVscCBub19pZ25vcmVfY2FzZSkpOwotCWltcG9ydCBHZXRvcHQ6Okxvbmc7Ci0gICAgfQotICAgIEdldE9wdGlvbnMoTG9jYWxPcHRpb25zTWFwKEBfKSk7Ci19Ci0KLXN1YiBMb2NhbE9wdGlvbnNNYXAgewotICAgIG15ICgkc3QsICRjYiwgQG9wdHMpID0gKChyZWYoJF9bMF0pIGVxICdIQVNIJykKLQkJCSAgICA/ICgxLCAxLCAkX1swXSkgOiAoMCwgMikpOwotICAgIGZvciAobXkgJGkgPSAkc3Q7ICRpIDw9ICQjXzsgJGkgKz0gJGNiKSB7Ci0JaWYgKCRfWyRpXSkgewotCSAgICBuZXh0IGlmIChyZWYoJF9bJGldKSBlcSAnQVJSQVknICYmICRfWyRpXVswXSA9fiAvXkdVSTovKTsKLQkgICAgcHVzaCBAb3B0cywgKChyZWYoJF9bJGldKSBlcSAnQVJSQVknKSA/ICRfWyRpXVswXSA6ICRfWyRpXSk7Ci0JICAgIHB1c2ggQG9wdHMsICRfWyRpKzFdIGlmICgkY2IgPT0gMik7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gQG9wdHM7Ci19Ci0KLV9fRU5EX18KLQotPWhlYWQxIE5BTUUKLQotbWFrZXJlbGVhc2UgLSBzb2Z0d2FyZSBwYWNrYWdlIHJlbGVhc2Ugc2NyaXB0Ci0KLT1oZWFkMSBTWU5PUFNJUwotCi1tYWtlcmVsZWFzZSBbb3B0aW9uc10gdmVyc2lvbgotCi09aGVhZDEgQVJHVU1FTlRTCi0KLUZvciBmdWxsIHJlbGVhc2VzLCB0aGUgdmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICBJPDUueC55PgotCi1Gb3IgcHJlLXJlbGVhc2VzLCB0aGUgdmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICBJPDUueC55LnByZU4+Ci0KLUZvciByZWxlYXNlIGNhbmRpZGF0ZXMsIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gIEk8NS54LnkucmNOPgotCi1BbHRlcm5hdGl2ZWx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdmVyc2lvbnMgaW4gdGhlIGZvcm0gIEV4dC01LXgteQotCi09aGVhZDEgT1BUSU9OUwotCi09b3ZlciA4Ci0KLT1pdGVtIEI8LXIge3N0ZXB9fCAtLXJlZ2V4cC1pZ25vcmUtc3RlcHM9e3N0ZXB9PgotCi1JZ25vcmUgc3RlcHMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB7c3RlcH0KLQotPWl0ZW0gQjwtcyB7c3RlcH18IC0tc3RhcnQtYXQ9e3N0ZXB9PgotCi1Ta2lwIGFsbCBzdGVwcyBwcmVjZWRpbmcgdGhlIHNwZWNpZmllZCAoZXhhY3QpIHtzdGVwfQotCi09aXRlbSBCPC1pIHwgLS1pbnRlcmFjdGl2ZT4KLQotUHJvbXB0IHdoZXRoZXIgb3Igbm90IHRvIGV4ZWN1dGUgZWFjaCBzdGVwCi0KLT1pdGVtIEI8LW4gfCAtLWRyeS1ydW4+Ci0KLVByaW50IHRoZSBjb21tYW5kcyB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLCBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KLQotPWl0ZW0gQjwtaCB8IC0taGVscD4KLQotRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZS4KLQotPWJhY2sKZGlmZiAtLWdpdCBhL2Rpc3QvbWFrZXJlbGVhc2UueG1sIGIvZGlzdC9tYWtlcmVsZWFzZS54bWwKaW5kZXggMjViN2E5ZC4uYjFjYmQ0OCAxMDA2NDQKLS0tIGEvZGlzdC9tYWtlcmVsZWFzZS54bWwKKysrIGIvZGlzdC9tYWtlcmVsZWFzZS54bWwKQEAgLTI3OSw3ICsyNzksNyBAQAogCSAgICAgIDwvdGV4dD4KIAkgICAgICA8Y29tbWFuZHM+CiAJICAgICAgICA8Y29tbWFuZD5naXQgY2hlY2tvdXQgVjUtNC1wYXRjaGVzPC9jb21tYW5kPgotCSAgICAgICAgPGNvbW1hbmQ+ZWNobyB7QlJBTkNIUEFUSH0gPj4gZGlzdC9yZWxlYXNlIDwvY29tbWFuZD4KKwkgICAgICAgIDxjb21tYW5kPmVjaG8ge0JSQU5DSFBBVEh9IHJjID4+IGRpc3QvcmVsZWFzZSA8L2NvbW1hbmQ+CiAJICAgICAgICA8Y29tbWFuZCBpZ25vcmVlcnJvcj0iMSI+Z2l0IGNvbW1pdCAtbSAiUmVsZWFzZSBDYW5kaWRhdGUgZm9yIHtCUkFOQ0hQQVRIfSIgZGlzdC9yZWxlYXNlPC9jb21tYW5kPgogCSAgICAgICAgPGNvbW1hbmQ+Z2l0IGNoZWNrb3V0IHtCUkFOQ0hQQVRIfSA8L2NvbW1hbmQ+CiAJICAgICAgICA8Y29tbWFuZD5naXQgbWVyZ2UgVjUtNC1wYXRjaGVzICAgIDwvY29tbWFuZD4KQEAgLTM2Miw3ICszNjIsNyBAQAogCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOmNvbmZpZ3VyZSIgdGl0bGU9ImJ1aWxkOmNvbmZpZ3VyZSI+CiAJICA8dGV4dD5XZSBuZWVkIHRvIHJ1biBjb25maWd1cmUgdG8gc2V0IHVwIHRoZSBidWlsZCB0cmVlLjwvdGV4dD4KIAkgIDxjb21tYW5kcz4KLQkgICAgPGNvbW1hbmQ+Li9jb25maWd1cmUgLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0naG9zdCBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlIHRlc3RoYW5kbGVyIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz1JUFggLS1lbmFibGUtaXB2NiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC0tZW5hYmxlLXNoYXJlZDwvY29tbWFuZD4KKwkgICAgPGNvbW1hbmQ+Li9jb25maWd1cmUgLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0naG9zdCBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlIHRlc3RoYW5kbGVyIHRsc3RtLW1pYiB0c20tbWliIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz0iSVBYIFRMU1RDUCBEVExTVURQIiAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0idHNtIiAtLWVuYWJsZS1pcHY2IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkPC9jb21tYW5kPgogCSAgPC9jb21tYW5kcz4KIAk8L3N0ZXA+CiAJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6bWFrZSIgdGl0bGU9ImJ1aWxkOm1ha2UiPgpAQCAtMzcxLDEyICszNzEsMzAgQEAKIAkgICAgPGNvbW1hbmQ+TkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT049MSBtYWtlPC9jb21tYW5kPgogCSAgPC9jb21tYW5kcz4KIAk8L3N0ZXA+Ci0JPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6dGVzdCIgdGl0bGU9ImJ1aWxkOnRlc3QiPgorCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOnRlc3QiIHRpdGxlPSJ0ZXN0aW5nOiBkZWZhdWx0IHRlc3RzIj4KIAkgIDx0ZXh0Pk5vdyB3ZSBydW4gIm1ha2UgdGVzdCIgd2hpY2ggc2hvdWxkIHByb2R1Y2UgYSBwZXJmZWN0CiAJICBzZXQgdXAgdGVzdCByZXN1bHRzLiAgSWYgbm90LCB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkIG9yIGF0CiAJICBsZWFzdCB1bmRlcnN0b29kIGFuZCBhY2NlcHRlZCBhcyBpcyBmb3Igc29tZSBvdGhlciByZWFzb24uPC90ZXh0PgogCSAgPGNvbW1hbmRzPgotCSAgICA8Y29tbWFuZD5tYWtlIHRlc3QgVEVTVE9QVFM9LW48L2NvbW1hbmQ+CisJICAgIDxjb21tYW5kPm1ha2UgdGVzdDwvY29tbWFuZD4KKwkgIDwvY29tbWFuZHM+CisJPC9zdGVwPgorCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOnRlc3Q6dW5pdCIgdGl0bGU9InRlc3Rpbmc6IHVuaXQtdGVzdHMiPgorCSAgPHRleHQ+Tm93IHdlIHJ1biB0aGUgdW5pdC10ZXN0cyB3aGljaCBzaG91bGQgYWxzbyBwcm9kdWNlIGEgcGVyZmVjdAorCSAgc2V0IHVwIHRlc3QgcmVzdWx0cy4gIElmIG5vdCwgdGhpcyBuZWVkcyB0byBiZSBmaXhlZCBvciBhdAorCSAgbGVhc3QgdW5kZXJzdG9vZCBhbmQgYWNjZXB0ZWQgYXMgaXMgZm9yIHNvbWUgb3RoZXIgcmVhc29uLjwvdGV4dD4KKwkgIDxjb21tYW5kcz4KKwkgICAgPGNvbW1hbmQ+Y2QgdGVzdGluZyAmYW1wOyZhbXA7IC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHM8L2NvbW1hbmQ+CisJICA8L2NvbW1hbmRzPgorCTwvc3RlcD4KKwk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJidWlsZDp0ZXN0OnRyYW5zcG9ydHMiIHRpdGxlPSJ0ZXN0aW5nOiB0cmFuc3BvcnRzIj4KKwkgIDx0ZXh0Pk5vdyB3ZSBydW4gdGhlIHRyYW5zcG9ydCB0ZXN0cyB3aGljaCBzaG91bGQgYWxzbworCSAgcHJvZHVjZSBhIHBlcmZlY3Qgc2V0IHVwIHRlc3QgcmVzdWx0cywgaWYgeW91ciBtYWNoaW5lCisJICBzdXBwb3J0cyBhbGwgdGhlIHRyYW5zcG9ydHMuICBJZiBub3QsIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQKKwkgIG9yIGF0IGxlYXN0IHVuZGVyc3Rvb2QgYW5kIGFjY2VwdGVkIGFzIGlzIGZvciBzb21lIG90aGVyCisJICByZWFzb24gKGxpa2UgeW91IGNhbid0IGRvIElQdjYgb24geW91ciBzeXN0ZW0pLjwvdGV4dD4KKwkgIDxjb21tYW5kcz4KKwkgICAgPGNvbW1hbmQ+Y2QgdGVzdGluZyAmYW1wOyZhbXA7IC4vUlVORlVMTFRFU1RTIC1nIHRyYW5zcG9ydHM8L2NvbW1hbmQ+CiAJICA8L2NvbW1hbmRzPgogCTwvc3RlcD4KIAk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJjb2RlOmNoZWNrY29tbWVudHMiIHRpdGxlPSJjb2RlOmNoZWNrY29tbWVudHMiPgpkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOViBiL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9ERVZFTlYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwNWNhZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9ERVZFTlYKQEAgLTAsMCArMSw0NCBAQAorUFJFRklYPS9vcHQvT1NTCitleHBvcnQgUFJFRklYCisKK1BBVEg9JFBSRUZJWC9iaW46L3Vzci9iaW46L3Vzci9kdC9iaW46L3Vzci9vcGVud2luL2JpbjovdXNyL3NiaW46L3Vzci9jY3MvYmluOi91c3IvdWNiCitleHBvcnQgUEFUSAorCitMRF9MSUJSQVJZX1BBVEg9JFBSRUZJWC9saWIgCitMRF9SVU5fUEFUSD0kTERfTElCUkFSWV9QQVRICitleHBvcnQgTERfTElCUkFSWV9QQVRIIExEX1JVTl9QQVRICisKK0NDPWdjYworZXhwb3J0IENDCisKK0NQUEZMQUdTPSItSSRQUkVGSVgvaW5jbHVkZSIKK0NGTEFHUz0iLW12OCAtbXR1bmU9dWx0cmFzcGFyYyIKK0xERkxBR1M9Ii1MJFBSRUZJWC9saWIgLVIkUFJFRklYL2xpYiIKK2V4cG9ydCBDUFBGTEFHUyBDRkxBR1MgTERGTEFHUworCitUTVA9L3RtcAorZXhwb3J0IFRNUAorCitUT1A9L2N0YnRvL2lkYy9jaWNuL3NvdXJjZS9idWlsZC9gYmFzZW5hbWUgJFBSRUZJWGAKK2V4cG9ydCBUT1AKKworU1JDPSRUT1AvZGlzdAorZXhwb3J0IFNSQworCitXT1JLPSRUT1Avd29yaworZXhwb3J0IFdPUksKKworCisjIGZvciBzdXBlcnBhY2s6CisKK0NIRUNLTElTVD0kVE9QL0NoZWNrbGlzdDsgZXhwb3J0IENIRUNLTElTVAorTUFLRT0kUFJFRklYL2Jpbi9tYWtlCitleHBvcnQgTUFLRQorCisjQ0FURUdPUlk9T3BlblNvdXJjZTsgZXhwb3J0IENBVEVHT1JZCisjVkVORE9SPSJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24iOyBleHBvcnQgVkVORE9SCitCQVNFRElSPS9vcHQ7IGV4cG9ydCBCQVNFRElSCitQUkVGSVg9JEJBU0VESVIvYGJhc2VuYW1lICRUT1BgOyBleHBvcnQgUFJFRklYCitSRUxFQVNFX0FSRUE9JFRPUC8uLi9wYWNrYWdlcy9gL2Jpbi91bmFtZSAtcGAvYC9iaW4vdW5hbWUgLXJgOyBleHBvcnQgUkVMRUFTRV9BUkVBCisKK3VtYXNrIDAyMgpkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRSBiL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlMjVhNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorVGhlICJidWlsZHBhY2thZ2Utc29sYXJpcyIgc2NyaXB0IGRvZXMgYSAib25lLXNob3QiIGJ1aWxkIAorYW5kIHBhY2thZ2luZyBvZiBhbiB1bnRhcnJlZCBuZXQtc25tcCBkaXN0cmlidXRpb24gCitvbiBTb2xhcmlzIHdpdGhvdXQgcmVxdWlyaW5nIHJvb3QgYWNjZXNzLiAKKyAKK1RoZSByZXN1bHRpbmcgbmF0aXZlIFNvbGFyaXMgcGFja2FnZSBjYW4gdGhlbiBiZSAKKyhhdXRvbWF0aWNhbGx5KSBpbnN0YWxsZWQvcmVtb3ZlZCB1c2luZyB0aGUgU29sYXJpcyAKK3BrZ2FkZCgxKS9wa2dybSgxKSBjb21tYW5kcy4gCisgCitUaGUgc2NyaXB0IHJlcXVpcmVzIGN1c3RvbWl6YXRpb24gb2YgeW91ciAKK2RldmVsb3BtZW50IGVudmlyb25tZW50IC0gc2VlIGF0dGFjaGVkIGZpbGUgCitERVZFTlYgLSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIAorIAorIEJhc2ljIHVzYWdlOiAuL2J1aWxkcGFja2FnZS1zb2xhcmlzIGRpc3RjbGVhbiAKKyAKK1RoZSBzY3JpcHQgImVsZmRlcGVuZC5zaCIgaXMgcmVxdWlyZWQgdG8gCitkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBhbGwgYnVpbHQgRUxGIGJpbmFyaWVzIAorYW5kIGxpYnJhcmllcyB0byBjcmVhdGUgYSAicGFja2FnZSBkZXBlbmRlbmN5IGZpbGUiIC0gCitzZWUgZGVwZW5kKDQpLiAKKyAKZGlmZiAtLWdpdCBhL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9idWlsZHBhY2thZ2Utc29sYXJpcyBiL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9idWlsZHBhY2thZ2Utc29sYXJpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY0ZjBjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4va3NoCisjCisjIGF1dG9tYXRpYyBidWlsZCAoY29uZmlndXJlL21ha2UvcGFja2FnZSkgc2NyaXB0IAorIyBmb3IgTkVULVNOTVAgb24gU29sYXJpcworIworIyAyMDA0LzExIFJld3JpdGUgdG8gc3RyaWN0bHkgYnVpbGQgdGhlIHBhY2thZ2UgamZyYW5rQGZhc3RyaWV2ZS5jb20KKyMgMjAwMi8xMSBTdGVmYW4uUmFkbWFuQENUQlRPLk9SRworCisKKyMgSWYgeW91IGRlZmluZSBERUJVRywgdGhlIHNjcmlwdCB3aWxsIGJlIHZlcmJvc2UsIGFuZCB3ZSB3b24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKKyNERUJVRz1ZCitpZiBbICEgLXogJERFQlVHIF07IHRoZW4KKyAgIHNldCAteCAjIGJlIHZlcmJvc2UKK2ZpCisKKyMgVE1QIGlzIHdoZXJlIHdlIGFyZSB0ZW1wb3JhcmlseSBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIHRvCitUTVA9YHB3ZGAvcGtncm9vdAorCisjIFBLRyBpcyB0aGUgaW50ZXJuYWwgYW5kIGV4dGVybmFsIG5hbWUgZm9yIHRoZSBwYWNrYWdlCitQS0c9T1NTbmV0LXNubXAKKworI1BSRUZJWCBpcyB0aGUgdG9wIGxldmVsIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZGlyZWN0b3J5LgorIyBUaGlzIHNob3VsZCBiZSBub3JtYWxseSBkZXRlcm1pbmVkIGJ5IGNvbmZpZ3VyZQorI3ByZWZpeD0vb3B0LyR7UEtHfQorcHJlZml4PS91c3IvbG9jYWwKKworIyBWQVJESVIgaXMgdGhlIHBlcnNpc3RlbnQgZGlyIGZyb20gY29uZmlndXJlCitWQVJESVI9L3Zhci9uZXQtc25tcAorCitleHBhbmRlZHByZWZpeD0ke1RNUH0vJHtwcmVmaXh9CisKK1BFUkw9JHtQRVJMOj1gd2hpY2ggcGVybGB9CitNQUtFPSR7TUFLRTo9YHdoaWNoIG1ha2VgfQorCitpZiBbIC1kICR7VE1QfSBdOyB0aGVuCisgICBybSAtcmYgJHtUTVB9OworZmkKKworIyBpbnN0YWxsIHRvIHRlbXBvcmFyeSBwYWNrYWdlIGJ1aWxkIHJvb3QKK2NkIC4uLy4uCisKKyRNQUtFIGluc3RhbGwgcHJlZml4PSR7ZXhwYW5kZWRwcmVmaXh9IGV4ZWNfcHJlZml4PSR7ZXhwYW5kZWRwcmVmaXh9IHx8IGV4aXQgMQorCisjIFdlIG5vdyBoYXZlIHRoZSBtYWluIHNvZnR3YXJlIGluc3RhbGxlZCwgY29weSBvdmVyIHRoZSBhdXhpbGxhcnkgZmlsZXMKK2NkIC0KKworYXdrIC9eX19fc25tcGQtaW5pdC5kLywvX19fRU9GLyAkMCB8IGdyZXAgLXYgXl9fXyB8IHNlZCAicyxAcHJlZml4QCwkcHJlZml4LGciID58c25tcGQtaW5pdC5kCisKKyMgY3JlYXRlIHBlcnNpc3RlbnQgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0CitbIC1kICRUTVAvJFZBUkRJUiBdIHx8IGluc3RhbGwgLWQgLW0gMDc1NSAkVE1QLyRWQVJESVIgCisKKyMgcG9zdGluc3RhbGwKK0xEX0xJQlJBUllfUEFUSD0kVE1QJHByZWZpeC9saWI6JExEX0xJQlJBUllfUEFUSCAkVE1QLyRwcmVmaXgvYmluL3NubXB0cmFuc2xhdGVcCisgIC1NJFRNUC8kcHJlZml4L3NoYXJlL3NubXAvbWlicyAtbSBTTk1QdjItU01JIC4xID4mLSB8fCBleGl0ICQ/ICMgY3JlYXRlIE1JQiBpbmRleAorCisjIHBhY2thZ2UKK3ZlcnNpb249YC4uLy4uL25ldC1zbm1wLWNvbmZpZyAtLXZlcnNpb25gCitvcz1gdW5hbWUgLXNgCityZWw9YHVuYW1lIC1yYAorY2xhc3M9c25tcAorb3duZXI9JExPR05BTUUKK2dyb3VwcyB8IGF3ayAne3ByaW50ICQxfScgfCByZWFkIGdyb3VwCitjYXQgPDw9PSA+fHBrZ2luZm8KK1BLRz0iJHtQS0d9IgorTkFNRT0ibmV0LXNubXAtJHZlcnNpb24iCitBUkNIPSJgdW5hbWUgLXBgIgorVkVSU0lPTj0iJHZlcnNpb24sICRvcyAkcmVsLCBgZGF0ZSArJVkuJW0uJWQuJUguJU0uJVNgIgorQ0FURUdPUlk9Ik9wZW5Tb3VyY2UiCitERVNDPSJUaGUgTkVULVNOTVAgVG9vbHMgYW5kIExpYnJhcnkiCitWRU5ET1I9Imh0dHA6Ly9uZXQtc25tcC5zb3VyY2Vmb3JnZS5uZXQiCitDTEFTU0VTPSIkY2xhc3MiCitCQVNFRElSPSIkcHJlZml4IgorPT0KKy4gLi9wa2dpbmZvCisKK2VjaG8gJ2NoZWNraW5nIGRlcGVuZGVuY2llcycKK3Vuc2V0IExEX0xJQlJBUllfUEFUSCAjIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgUlBBVEggbm93CisuL2VsZmRlcGVuZC5zaCAkVE1QIHwgZ3JlcCAtdiAiUCAgKiRQS0cgIiA+fGRlcGVuZCAjIGlnbm9yZSBvd24gcGFja2FnZQorCitlY2hvICdjcmVhdGluZyBwcm90b3R5cGUgZmlsZScKK2NhdCA8PD09ID58cHJvdG90eXBlCitpIHBrZ2luZm8KK2kgY29weXJpZ2h0PS4uLy4uL0NPUFlJTkcKKyNpIHByZWluc3RhbGw9Li9wcmVpbnN0YWxsLXBvc3RyZW1vdmUKKyNpIHBvc3RpbnN0YWxsPS4vcHJlaW5zdGFsbC1wb3N0cmVtb3ZlCitpIGRlcGVuZAorIyBzZXQgZGVmYXVsdCBtb2RlLCBvd25lciBhbmQgZ3JvdXAKKyEgZGVmYXVsdCAwNzc1IHJvb3Qgc3lzCitkIHNubXAgL2V0YyAwNzU1IHJvb3Qgc3lzCitkIHNubXAgL2V0Yy9pbml0LmQgMDc1NSByb290IHN5cworZiBzbm1wIC9ldGMvaW5pdC5kL3NubXBkPS4vc25tcGQtaW5pdC5kIDA3NTUgcm9vdCBzeXMKKyNsIHNubXAgL2V0Yy9yYzIuZC9TNzZzbm1wZD0vZXRjL2luaXQuZC9zbm1wZCAjIG5vdCB5ZXQKKz09CisKK3BrZ3Byb3RvIC1jIHNubXAgJFRNUD0vIHxcCitlZ3JlcCAtdiAnXmQgLiogLyB8XmQgLiogL3ZhciB8XmQgLiogL29wdCB8XiAuKnBlcmxsb2NhbC5wb2Q9JyB8XAorc2VkIC1lICJzLyAkb3duZXIgJGdyb3VwXCQvLyIgPj4gcHJvdG90eXBlIHx8IGV4aXQgJD8KKyMgYW5kIGlnbm9yZSB0b3AgbGV2ZWwgZGlyZWN0b3JpZXMgKG11c3QgcHJlLWV4aXN0KQorCitlY2hvICdjcmVhdGluZyBwYWNrYWdlJworcGtnbWsgLW9kIC4gfHwgZXhpdCAkPworcGtndHJhbnMgLiAkUEtHLSR2ZXJzaW9uLSRBUkNILSRvcyRyZWwucGtnICRQS0cgfHwgZXhpdCAkPworCisjIFdlIHNob3VsZCByZWFsbHkgZG8gc29tZSBjbGVhbnVwIGhlcmUKK2lmIFsgLXogJERFQlVHIF07IHRoZW4KKyAgIHJtIC1yZiBzbm1wZC1pbml0LmQgJFBLRyAkVE1QIHBrZ2luZm8gcHJvdG90eXBlIGRlcGVuZCAKK2ZpCisKK2VjaG8gImJ1aWxkIHdhcyBzdWNjZXNzZnVsbCIKK2V4aXQgMAorCisjIC9ldGMvaW5pdC9zbm1wZAorIyBUaGlzIGlzIHBhY2thZ2VkIGluc2lkZSBvZiBidWlsZHBhY2thZ2Utc29sYXJpcyBiZWNhdXNlIHdlIG5lZWQgdG8gc3Vic3RpdHV0ZQorIyBpbiB0aGUgYWN0dWFsIHNlcnZlciBuYW1lLgorCitfX19zbm1wZC1pbml0LmRfX18KKyMhIC9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCB0aGUgTkVULVNOTVAgbWFzdGVyIGFnZW50IChzbm1wZCkKKyMKKyMgTG9jYXRpb246ICAgICAgL2V0Yy9pbml0LmQvc25tcGQKKyMgICAgICAgICAgICAgICAgL2V0Yy9yYzMuZC9TPz9zbm1wZAorIworbmFtZT0iTkVULVNOTVAgYWdlbnQiCitkYWVtb249QHByZWZpeEAvc2Jpbi9zbm1wZAorCitjYXNlICIkMSIgaW4KK3N0YXJ0KQorICAgICAgICBbICEgLXggJGRhZW1vbiBdICYmIGVjaG8gIkVSUk9SOiBjYW5ub3Qgc3RhcnQgJG5hbWUgKCRkYWVtb24pIiAmJiBleGl0IDEKKyAgICAgICAgZWNobyAiU3RhcnRpbmcgJG5hbWUgLi4uIFxjIgorICAgICAgICBQR1JFUD1gd2hpY2ggcGdyZXBgCisgICAgICAgIGlmIFsgLXogJFBHUkVQIF07IHRoZW4KKyAgICAgICAgICAgcGlkPWBwZ3JlcCAtZnggJGRhZW1vbmAKKyAgICAgICAgZWxzZQorICAgICAgICAgICBwaWQ9YHBzIC1lZiB8IGdyZXAgJGRhZW1vbiB8IGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgCisgICAgICAgIGZpCisKKyAgICAgICAgWyAhIC16ICIkcGlkIiBdICYmIGVjaG8gImFscmVhZHkgcnVubmluZyB3aXRoIHBpZCAkcGlkLiIgJiYgZXhpdCAwCisgICAgICAgICRkYWVtb24gJiYgZWNobyAiZG9uZS4iCisgICAgICAgIDs7CitzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyAkbmFtZSAuLi4gXGMiCisgICAgICAgIFBHUkVQPWB3aGljaCBwZ3JlcGAKKyAgICAgICAgaWYgWyAteiAkUEdSRVAgXTsgdGhlbgorICAgICAgICAgICBwaWQ9YHBncmVwIC1meCAkZGFlbW9uYAorICAgICAgICBlbHNlCisgICAgICAgICAgIHBpZD1gcHMgLWVmIHwgZ3JlcCAkZGFlbW9uIHwgZ3JlcCAtdiBncmVwIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAgICAgICAgZmkKKyAgICAgICAgWyAhIC16ICIkcGlkIiBdICYmIChraWxsICRwaWQgJiYgZWNobyAiZG9uZSIgKSB8fCBlY2hvICJub3QgcnVubmluZyIKKworICAgICAgICA7Oworc3RhdHVzKQorICAgICAgICBlY2hvICIkbmFtZSBpcyBcYyIKKyAgICAgICAgUEdSRVA9YHdoaWNoIHBncmVwYAorICAgICAgICBpZiBbIC16ICRQR1JFUCBdOyB0aGVuCisgICAgICAgICAgIHBpZD1gcGdyZXAgLWZ4ICRkYWVtb25gCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgcGlkPWBwcyAtZWYgfCBncmVwICRkYWVtb24gfCBncmVwIC12IGdyZXAgfCBhd2sgJ3twcmludCAkMn0nYAorICAgICAgICBmaQorICAgICAgICBbIC16ICIkcGlkIiBdICYmIGVjaG8gIm5vdCBydW5uaW5nIiB8fCBlY2hvICJydW5uaW5nIHdpdGggcGlkICRwaWQiCisgICAgICAgIDs7CityZXN0YXJ0KQorICAgICAgICAkMCBzdG9wICYmICQwIHN0YXJ0CisgICAgICAgIDs7CityZWxvYWQpCisgICAgICAgIGVjaG8gIlJlLWluaXRpYWxpemluZyAkbmFtZSAuLi5cYyIKKyAgICAgICAgUEdSRVA9YHdoaWNoIHBncmVwYAorICAgICAgICBpZiBbIC16ICRQR1JFUCBdOyB0aGVuCisgICAgICAgICAgIHBpZD1gcGdyZXAgLWZ4ICRkYWVtb25gCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgcGlkPWBwcyAtZWYgfCBncmVwICRkYWVtb24gfCBncmVwIC12IGdyZXAgfCBhd2sgJ3twcmludCAkMn0nYAorICAgICAgICBmaQorICAgICAgICBbICEgLXogIiRwaWQiIF0gJiYgKGtpbGwgLUhVUCAkcGlkICYmIGVjaG8gImRvbmUiICkgfHwgZWNobyAibm90IHJ1bm5pbmciCisgICAgICAgIDs7CisqKQorICAgICAgICBlY2hvICJVc2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCBzdGF0dXMgfCByZXN0YXJ0IHwgcmVsb2FkIH0iCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgMAorX19fRU9GX19fCmRpZmYgLS1naXQgYS9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2VsZmRlcGVuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NDdjNGNjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2VsZmRlcGVuZC5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4va3NoCisjCisjIGVsZmRlcGVuZC5zaAorIworIyBnaXZlbiBhIHBhdGgsIHRoaXMgc2NyaXB0cyBzZWFyY2hlcyBmb3IgRUxGIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMKKyMgYW5kIGdlbmVyYXRlcyBwYWNrYWdlIGRlcGVuZGVuY3kgZmlsZSBlbnRyaWVzIGFjY29yZGluZyB0byB0aGVyIGRlcGVuZGVuY2llcworIworIyBVc2FnZTogZWxmZGVwZW5kIDxFTEYtYmluYXJ5Pnw8ZGlyZWN0b3J5PgorIworIyAyMDAyLzExIFN0ZWZhbi5SYWRtYW5AQ1RCVE8uT1JHCisjCisjIC92YXIvc2FkbS9pbnN0YWxsL2NvbnRlbnRzIGZvcm1hdDoKKyMKKyMgL2RldiBkIG5vbmUgMDc3NSByb290IHN5cyBTVU5XY3NyIFNVTldjc2QKKyMgcGF0aCB0eXBlIGNsYXNzIG1vZGUgb3duZXIgZ3JvdXAgcGFja2FnZXMKKyMgL2V0Yy8ubG9naW4gZiByZW5hbWVuZXcgMDY0NCByb290IHN5cyA1MTYgMzc5NTYgOTA0NjQ3Njk1IFNVTldjc3IKKyMgL2V0Yy9hY2N0L2hvbGlkYXlzIGUgcHJlc2VydmUgMDY2NCBiaW4gYmluIDI4OSAyMjA5MCA5MDQ2NDc2MDMgU1VOV2FjY3IKKyMgcGF0aCB0eXBlIGNsYXNzIG1vZGUgb3duZXIgZ3JvdXAgeCB4IHggcGFja2FnZXMKKyMgL2Jpbj0uL3Vzci9iaW4gcyBub25lIFNVTldjc3IKKyMgcGF0aD1saW5rIHR5cGUgY2xhc3MgcGFja2FnZXMKKyMgL2RldmljZXMvcHNldWRvL2Nsb25lQDA6aG1lIGMgbm9uZSAxMSA3IDA2MDAgcm9vdCBzeXMgU1VOV2NzZAorIyBwYXRoIHR5cGUgY2xhc3MgeCB4IG93bmVyIG1vZGUgcGFja2FnZXMKKyMKKyMgdHlwZXMgZSAoc2VkKSwgdiAodm9sYXRpbGUpIGhhdmUgc2FtZSBmb3JtYXQgbGlrZSB0eXBlIGYgKGZpbGUpCisjIHR5cGUgbCAoaGFyZGxpbmspIGhhcyBzYW1lIGZvcm1hdCBsaWtlIHR5cGUgcyAoc3ltbGluaykKKyMKK3Byb2c9YGJhc2VuYW1lICQwYAorTEFTVF9DSEFOQ0U9L29wdC9PU1MvbGliCisKK2lmIFsgLWQgIiQxIiBdIDsgdGhlbgorICBmaW5kICQxIC10eXBlIGYgLWV4ZWMgZmlsZSB7fSBcOworZWxpZiBbIC14ICIkMSIgXSA7IHRoZW4KKyAgZmlsZSAkMQorZWxzZQorICBlY2hvIDE+JjIgInVzYWdlOiAkMCA8ZGlyZWN0b3J5Pnw8RUxGIGV4ZWN1dGFibGU+IgorICBleGl0IDEKK2ZpIHwgYXdrICckMiA9PSAiRUxGIiB7IHByaW50IH0nIHwgY3V0IC1kOiAtZjEgfFwKK3doaWxlIHJlYWQgZWxmCitkbworICBsZGQgIiRlbGYiIHwgd2hpbGUgcmVhZCBsaWIgeCBwYXRoCisgIGRvCisgICAgWyAteiAiJHBhdGgiIF0gJiYgY29udGludWUKKyAgICBpZiBbICIkcGF0aCIgPSAnKGZpbGUgbm90IGZvdW5kKScgXQorICAgIHRoZW4KKyAgICAgIGlmIFsgLXggJExBU1RfQ0hBTkNFLyRsaWIgXQorICAgICAgdGhlbgorICAgICAgICBwYXRoPSIkTEFTVF9DSEFOQ0UvJGxpYiIKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiIyAkcHJvZzogJGxpYiAkeCAkcGF0aCIKKyAgICAgICAgY29udGludWUgIyBub3QgZm91bmQKKyAgICAgIGZpCisgICAgZmkKKyAgICBlY2hvICIkcGF0aCIKKyAgICAjIG5lZWQgc3ltbGluayBoYW5kbGluZyBoZXJlIC0gc2VlIC91c3IvcGxhdGZvcm0vU1VOVywqL2xpYi8qCisgIGRvbmUKK2RvbmUgfCBzb3J0IC11IHwgd2hpbGUgcmVhZCBsaWJwYXRoIG90aGVyCitkbworICBbICIkbGlicGF0aCIgPSAiIyIgXSAmJiBlY2hvICIkbGlicGF0aCAkb3RoZXIiICYmIGNvbnRpbnVlICMgZXJyb3IgbWVzc2FnZQorICBzZXQgLS0gYGdyZXAgIl4kbGlicGF0aFsgPV0iICAvdmFyL3NhZG0vaW5zdGFsbC9jb250ZW50cyB8IGhlYWQgLTFgCisgIHBhdGg9JDE7IHR5cGU9JDIKKyAgY2FzZSAkdHlwZSBpbgorICAgIGYpICMgZmlsZQorICAgICAgc2hpZnQgOSAjIGZpcnN0IHBhY2thZ2UKKyAgICAgIDs7CisgICAgc3xsKSAjIGxpbmsKKyAgICAgIHNoaWZ0IDMgIyBmaXJzdCBwYWNrYWdlCisgICAgICA7OworICAgICcnKSAjIG5vdCBmb3VuZAorICAgICAgZWNobyAiIyAkcHJvZzogJGxpYnBhdGggaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFja2FnZSIKKyAgICAgIGNvbnRpbnVlCisgICAgICA7OworICAgICopICMgZHViaW91cyBmaWxlIHR5cGUKKyAgICAgIGVjaG8gIiMgJHByb2c6IHBhdGggJDEgaGFzIGR1YmlvdXMgZmlsZSB0eXBlICQyIgorICAgICAgY29udGludWUKKyAgICAgIDs7CisgIGVzYWMKKyAgc2V0IC0tIGBlY2hvICQxIHwgdHIgOiAnICdgCisgIGVjaG8gJDEgIyBzdHJpcCBvZmYgY2xhc3NlcworZG9uZSB8IHNvcnQgLXUgfCB3aGlsZSByZWFkIHBrZyBvdGhlcgorZG8KKyAgaWYgWyAiJHBrZyIgPSAiIyIgXSA7IHRoZW4gIyBlcnJvciBtZXNzYWdlCisgICAgZWNobyAxPiYyICIkb3RoZXIiICMgZ29lcyB0byBzdGRlcnIKKyAgICBjb250aW51ZQorICBmaQorICBldmFsIGBwa2dwYXJhbSAtdiAkcGtnIFBLRyBOQU1FYAorICBwcmludGYgIlAgICUtMTVzJXNcbiIgIiRQS0ciICIkTkFNRSIKK2RvbmUKZGlmZiAtLWdpdCBhL2Rpc3QvbmV0LXNubXAuc3BlYyBiL2Rpc3QvbmV0LXNubXAuc3BlYwppbmRleCA2YWM0YTlmLi4wNzdiNWYxIDEwMDY0NAotLS0gYS9kaXN0L25ldC1zbm1wLnNwZWMKKysrIGIvZGlzdC9uZXQtc25tcC5zcGVjCkBAIC0zNyw3ICszNyw3IEBACiAlZW5kaWYKIFN1bW1hcnk6IFRvb2xzIGFuZCBzZXJ2ZXJzIGZvciB0aGUgU05NUCBwcm90b2NvbAogTmFtZTogbmV0LXNubXAKLVZlcnNpb246IDUuNC40CitWZXJzaW9uOiA1LjcuMy5yYzMKICMgdXBkYXRlIHJlbGVhc2UgZm9yIHZlbmRvciByZWxlYXNlLiAoZWcgMS5mYzYsIDEucmg3MiwgMS55ZGwzLCAxLnlkbDIzKQogUmVsZWFzZTogMQogVVJMOiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KQEAgLTEzMyw3ICsxMzMsNyBAQAogCS0tZW5hYmxlLXNoYXJlZCBcCiAJJXs/bmV0c25tcF9wZXJsX21vZHVsZXM6IC0td2l0aC1wZXJsLW1vZHVsZXM9IklOU1RBTExESVJTPXZlbmRvciJ9IFwKIAkleyE/bmV0c25tcF9wZXJsX21vZHVsZXM6IC0td2l0aG91dC1wZXJsLW1vZHVsZXN9IFwKLQklez9uZXRzbm1wX2VtYmVkZGVkX3Blcmw6IC0tZW5hYmxlLWFzLW5lZWRlZCAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsfSBcCisJJXs/bmV0c25tcF9lbWJlZGRlZF9wZXJsOiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsfSBcCiAJJXshP25ldHNubXBfZW1iZWRkZWRfcGVybDogLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmx9IFwKIAktLXdpdGgtY2ZsYWdzPSIkUlBNX09QVF9GTEFHUyAle25ldHNubXBfY2ZsYWdzfSIKIApAQCAtMjUyLDEyICsyNTIsMTIgQEAKIAogKiBUdWUgTWF5ICA2IDIwMDggSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc2YubmV0PgogLSByZW1vdmUgJXtsaWJjdXJyZW50fQotLSBkb24ndCB1c2UgUHJvdmlkZXM6IHVubGVzcyBuZWNlc3NhcnksIGxldCBycG1idWlsZCBjb21wdXRlIHRoZSBwcm92aWRlZAorLSBhZGQgb3BlbnNzbC1kZXZlbCB0byBidWlsZCByZXF1aXJlbWVudHMKKy0gZG9uJ3QgdXNlIFByb3ZpZGVzOiB1bmxlc3MgbmVjZXNzYXJ5LCBsZXQgcnBtYnVpbGQgY29tcHV0ZSB0aGUgcHJvdmlkZWQgCiAgIGxpYnJhcmllcwogCi0qIFR1ZSBKdW4gMzAgMjAwNyBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNmLm5ldD4KKyogVHVlIEp1biAxOSAyMDA3IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc2YubmV0PgogLSBhZGQgIkJ1aWxkUmVxdWlyZXM6IHBlcmwtRXh0VXRpbHMtRW1iZWQiLCBlLmcuIGZvciBGZWRvcmEgNwotLSBhZGQgLS1lbmFibGUtYXMtbmVlZGVkIGlmIGJ1aWxkaW5nIHdpdGggZW1iZWRkZWQgUGVybCBzdXBwb3J0CiAKICogV2VkIE5vdiAyMyAyMDA2IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc2YubmV0PgogLSBmaXhlcyBmb3IgNS40IGFuZCA2NC1iaXQgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9kaXN0L25zYi1jb25maWcgYi9kaXN0L25zYi1jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDk0NGZlNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbnNiLWNvbmZpZwpAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMKKyMgJElkJAorIyBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3VzYWdlKCkKK3sKKyAgIGVjaG8gIlVzYWdlOiAkMCAgWy1kfC14XSBbLXMgU1JDRF0iCisgICBlY2hvICIiCisgICBlY2hvICIgLXMgU1JDRElSICA6IHNvdXJlIGRpcmVjdG9yeSBbJEhPTUUvc3JjL25ldC1zbm1wLVZFUlNJT05dIgorICAgZWNobyAiIgorICAgZWNobyAiIC14IDogY29uZmlndXJlIGV4dHJhIGZlYXR1cmVzIGZvciBwcmUtcmVsZWFzZSB0ZXN0aW5nIgorICAgZWNobyAiIC1kIDogY29uZmlndXJlIGZvciBiaW5hcnkgZGlzdHJpYnV0aW9uIgorICAgZXhpdCAxCit9CisKKyNzZXQgLXgKKworCisjCisjIGZpbmQgbnNiLXBsYXRmb3JtIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoaXMgc2NyaXB0CisjCitFWEVfUEFUSD1gZGlybmFtZSAkMGAKK2lmIFsgLWYgJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAuICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zCitlbGlmIFsgLWYgJEhPTUUvYmluL25zYi1mdW5jdGlvbnMgXTsgdGhlbgorICAgLiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucworZWxpZiBbIC1mIG5zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAuIG5zYi1mdW5jdGlvbnMKK2Vsc2UKKyAgIGVjaG8gIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMgaW4gJEVYRV9QQVRILCAkSE9NRS9iaW4gb3IgJFBXRCIKKyAgIGV4aXQgMQorZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTlNCX0NPTkZJR19BTEw9MgorCisjICAgICAgeCkgIHg9JE9QVEFSRyA7Oword2hpbGUgZ2V0b3B0cyBkczp4IG9wdAorZG8KKyAgICBjYXNlICIkb3B0IiBpbgorICAgICAgZCkgIE5TQl9DT05GSUdfQUxMPTA7OworICAgICAgcykgIFNSQ0Q9JE9QVEFSRyA7OworICAgICAgeCkgIE5TQl9DT05GSUdfQUxMPTE7OworICAgICAgXD8pIyB1bmtub3duIGZsYWcKKyAgICAgICAgdXNhZ2U7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0IGBleHByICRPUFRJTkQgLSAxYAorCitpZiBbICROU0JfQ09ORklHX0FMTCAtZXEgMiBdOyB0aGVuCisgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IC1kIG9yIC14IgorICAgdXNhZ2UKK2ZpCisKK2lmIFsgIngkU1JDRCIgPSAieCIgXTsgdGhlbgorICAgZm9yIHggaW4gLiAkSE9NRS9zcmMvbmV0LXNubXAKKyAgIGRvCisgICAgICBpZiBbIC1mICR4L2NvbmZpZ3VyZSBdOyB0aGVuCisgICAgICAgICBTUkNEPSR4CisgICAgICAgICBicmVhaworICAgICAgZmkKKyAgIGRvbmUKKyAgIGlmIFsgIngkU1JDRCIgPSAieCIgXTsgdGhlbgorICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCBhIHNvdXJjZSBkaXJlY3RvcnkuIFBsZWFzZSBzcGVjaWZ5IG9uZSBmb3IgbWUuIgorICAgICAgdXNhZ2UKKyAgIGZpCitmaQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZiBbICROU0JfQ09ORklHX0FMTCAtZXEgMCBdO3RoZW4KKyAgICBuc2JfY29uZmlnX2Rpc3QgJFNSQ0QKK2Vsc2UKKyAgICBuc2JfY29uZmlnX2FsbCAkU1JDRAorZmkKZGlmZiAtLWdpdCBhL2Rpc3QvbnNiLWZ1bmN0aW9ucyBiL2Rpc3QvbnNiLWZ1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY1Y2MyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uc2ItZnVuY3Rpb25zCkBAIC0wLDAgKzEsNTA4IEBACisjIS9iaW4vc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRJZCQKKyMgQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHNvdXJjZSB1c2VyIGNvbmZpZworaWYgWyAtZiAkSE9NRS8uc25tcC9uc2ItcmMgXTsgdGhlbgorICAgLiAkSE9NRS8uc25tcC9uc2ItcmMKK2ZpCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK25zYl9zeXNuYW1lKCkKK3sKKyAgIGVjaG8gYHVuYW1lIC1tcnMgfCB0ciAnIC8nICdfXydgCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFV0aWxpdHkgdmFycworIworTlNCX1ZFUlNJT049JHtOU0JfVkVSU0lPTjo9IiJ9CitOU0JfQlVJTERfRElSPSR7TlNCX0JVSUxEX0RJUjo9IiJ9CitOU0JfQlVJTERfU1VGRklYPSR7TlNCX0JVSUxEX1NVRkZJWDo9IiJ9CitOU0JfU1JDX0RJUj0ke05TQl9TUkNfRElSOj0iIn0KK05TQl9JTlNUQUxMX0RJUj0ke05TQl9JTlNUQUxMX0RJUjo9IiJ9CitOU0JfSU5TVEFMTF9ESVJfREVGQVVMVD0ke05TQl9JTlNUQUxMX0RJUl9ERUZBVUxUOj0iJE5TQl9CVUlMRF9ESVIvdXNyIn0KK05TQl9QTEFURk9STT0ke05TQl9QTEFURk9STTo9YG5zYl9zeXNuYW1lYH0KKyMgc3VuIGRvZXNuJ3Qgc3VwcG9ydCBob3N0bmFtZSAtcworTlNCX0hPU1Q9JHtOU0JfSE9TVDo9YGhvc3RuYW1lIHwgY3V0IC1mMSAtZC5gfQorTlNCX1FVSUVUPSR7TlNCX1FVSUVUOj0wfQorTlNCX1BST01QVD0ke05TQl9QUk9NUFQ6PTB9CitOU0JfQ0xFQU49JHtOU0JfQ0xFQU46PTF9CitOU0JfQ09ORklHX0FMTD0ke05TQl9DT05GSUdfQUxMOj0wfQorTlNCX1NLSVBfQ09ORklHPSR7TlNCX1NLSVBfQ09ORklHOj0wfQorTlNCX1NLSVBfQlVJTEQ9JHtOU0JfU0tJUF9CVUlMRDo9MH0KK05TQl9TS0lQX1RFU1Q9JHtOU0JfU0tJUF9URVNUOj0wfQorTlNCX1NLSVBfSU5TVEFMTD0ke05TQl9TS0lQX0lOU1RBTEw6PTB9CitOU0JfRVJSX0NUWF9MSU5FUz0ke05TQl9FUlJfQ1RYX0xJTkVTOj0yNX0KK05TQl9ESVNUX1RSQU5TUE9SVFM9IlVEUCBUQ1AgVW5peCBDYWxsYmFjayIKK05TQl9FWFRSQV9UUkFOU1BPUlRTPSIiCitOU0JfRElTVF9NT0RVTEVTPSR7TlNCX0RJU1RfTU9EVUxFUzo9Imhvc3QgZGlzbWFuL2V2ZW50LW1pYiBzbXV4In0KK05TQl9FWFRSQV9NT0RVTEVTPSR7TlNCX0VYVFJBX01PRFVMRVM6PSJleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlIHNtdXggUm1vbiJ9CisjdGVzdGhhbmRsZXIKK05TQl9FWFRSQV9DT05GSUc9JHtOU0JfRVhUUkFfQ09ORklHOj0iIn0KK05TQl9QUkVGSVg9JHtOU0JfUFJFRklYOj0iL3VzciJ9CitOU0JfRVhUUkFfSU5TVEFMTD0ke05TQl9FWFRSQV9JTlNUQUxMOj0iIn0KK05TQl9TSEFSRUQ9JHtOU0JfU0hBUkVEOj0iLS1lbmFibGUtc2hhcmVkIn0KK05TQl9WSUVXPWNhdAorTlNCX0ZMT1c9CitOU0JfREFURT0ke05TQl9EQVRFOj1gZGF0ZSArJXklbSVkXyVIJU1gfQorCisjIyBlbWJlZGRlZCBwZXJsCitOU0JfRElSTElOS19ESVJTPSJwZXJsIG1pYnMgaW5jbHVkZSBweXRob24iCitOU0JfUEVSTD0ke05TQl9QRVJMOj0iIn0KKyNOU0JfUEVSTD0ke05TQl9QRVJMOj0iLS1lbmFibGUtZW1iZWRkZWQtcGVybCJ9CitpZiBbICJ4JE5TQl9QRVJMIiAhPSAieCIgXTsgdGhlbgorICBOU0JfU0tJUF9ESVJMSU5LPSR7TlNCX1NLSVBfRElSTElOSzo9MH0KK2Vsc2UKKyAgTlNCX1NLSVBfRElSTElOSz0ke05TQl9TS0lQX0RJUkxJTks6PTF9CitmaQorCisjCisjIFN5c3RlbSBzcGVjaWZpYyBhZGRpdGlvbnMKKyMKK2Nhc2UgYHVuYW1lIC1zYCBpbgorCisgICBTdW5PUykKKyAgICAgIE5TQl9UQUlMX0FSR1M9Ii0kTlNCX0VSUl9DVFhfTElORVMiCisgICAgICA7OworCisgICAqKQorICAgICAgTlNCX1RBSUxfQVJHUz0iLW4gJE5TQl9FUlJfQ1RYX0xJTkVTIgorICAgICAgOzsKK2VzYWMKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBVdGlsaXR5IGZ1bmN0aW9ucworIworCituc2JfYWJvcnQoKQoreworICAgZWNobworICAgZWNobyAiQUJPUlRJTkc6ICRAIiA+JjIKKyAgIGV4aXQgMjU1Cit9CisKK25zYl9pbmZvKCkKK3sKKyAgIGlmIFsgJE5TQl9RVUlFVCAtbmUgMSBdOyB0aGVuCisgICAgICBlY2hvICRACisgICBmaQorfQorCituc2JfcHJvbXB0KCkKK3sKKyAgIGlmIFsgIngkMSIgPSAieC1mIiBdOyB0aGVuCisgICAgICBzaGlmdCAxCisgICAgICB0bXBfbnNiX3Byb21wdD0xCisgICBlbHNlCisgICAgICB0bXBfbnNiX3Byb21wdD0kTlNCX1BST01QVAorICAgZmkKKyAgIGlmIFsgJHRtcF9uc2JfcHJvbXB0IC1lcSAxIF07IHRoZW4KKyAgICAgIGVjaG8gJEAKKyAgICAgIHJlYWQgbnNiX3Byb21wdF9kdW1teQorICAgZWxzZQorICAgICAgZWNobyAiJEAgKFBST01QVCBTS0lQUEVEKSIKKyAgIGZpCit9CisKK25zYl9mbG93KCkKK3sKKyAgICBOU0JfRkxPVz0kTlNCX0ZMT1c6JEAKKyAgICBlY2hvICJSdW5uaW5nICRAIiA+JjIKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK25zYl9jb25maWdfZGlzdCgpCit7CisgICBuc2JfZmxvdyBjb25maWdfZGlzdAorICAgaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgInVzYWdlOiBuc2JfY29uZmlnX2Rpc3Qgc3JjX2RpciIKKyAgIGZpCisgICBuZ2Nfc3JjPSQxCisgICBpZiBbICEgLWQgJG5nY19zcmMgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkbmdjX3NyYyBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorICAgaWYgWyAhIC1kICRuZ2Nfc3JjL2FnZW50L21pYmdyb3VwIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiYWdlbnQvbWliZ3JvdXAgZGlyZWN0b3J5IGluICRuZ2Nfc3JjIGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisgICBuZ2NfZGVzdD0kMgorICAgaWYgWyAiWCRuZ2NfZGVzdCIgIT0gIlgiIC1hICEgLWQgJG5nY19kZXN0IF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJG5nY19kZXN0IGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisKKyAgICMKKyAgICMgc29tZSBtb2R1bGVzIG1pZ2h0IGJlIHJlbGVhc2Ugc3BlY2lmaWMsIHNvIG1ha2Ugc3VyZSB0aGV5CisgICAjIGV4aXN0IGJlZm9yZSB3ZSBzZW5kIHRoZW0gb2ZmIHRvIGNvbmZpZ3VyZQorICAgIworICAgTlNCX0ZJTkFMX01PRFVMRVM9CisgICBmb3IgbmNkX3ggaW4gJE5TQl9ESVNUX01PRFVMRVMKKyAgIGRvCisJaWYgWyAtciAkbmdjX3NyYy9hZ2VudC9taWJncm91cC8kbmNkX3guaCBdOyB0aGVuCisJCU5TQl9GSU5BTF9NT0RVTEVTPSIkTlNCX0ZJTkFMX01PRFVMRVMgJG5jZF94IgorCWZpCisgICBkb25lCisKKyAgICMKKyAgICMgTk9URTogZm9yIHNvbWUgcmVhc29uLCBiYXNoIGRvZXMgbm90IGV4cGFuZCB2YXJpYWJsZXMKKyAgICMgaW5zaWRlIG9mIHNpbmdsZSBxdW90ZXMsIHNvIHVzZSBkb3VibGUgcXVvdGVzCisgICAjCisgICBlY2hvICRuZ2Nfc3JjL2NvbmZpZ3VyZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVVua25vd24gXAorICAgICAgLS1wcmVmaXg9IiROU0JfUFJFRklYIiBcCisgICAgICAtLWRpc2FibGUtZGV2ZWxvcGVyICROU0JfRVhUUkFfQ09ORklHIFwKKyAgICAgIC0td2l0aC1zeXMtY29udGFjdD0nU3lzdGVtIEFkbWluaXN0cmF0b3InIFwKKyAgICAgIC0td2l0aC1kZWZhdWx0cyAtLXdpdGgtbWliLW1vZHVsZXM9IiROU0JfRklOQUxfTU9EVUxFUyIKKyAgICRuZ2Nfc3JjL2NvbmZpZ3VyZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVVua25vd24gXAorICAgICAgLS1wcmVmaXg9IiROU0JfUFJFRklYIiBcCisgICAgICAtLWRpc2FibGUtZGV2ZWxvcGVyICROU0JfRVhUUkFfQ09ORklHIFwKKyAgICAgIC0td2l0aC1zeXMtY29udGFjdD0nU3lzdGVtIEFkbWluaXN0cmF0b3InIFwKKyAgICAgIC0td2l0aC1kZWZhdWx0cyAtLXdpdGgtbWliLW1vZHVsZXM9IiROU0JfRklOQUxfTU9EVUxFUyIKKyAgICMgSSdkIGxpa2UgdG8gYWRkICcgfCB0ZWUgbnNiX2NvbmZpZy4kTlNCX0RBVEUnIHRvIHNhdmUgb3V0cHV0LCBidXQgdGhlbgorICAgIyBJJ2QgbG9zZSB0aGUgcmMgZnJvbSBjb25maWd1cmUsIHdoaWNoIEkgbmVlZC4uLiBzaWdoCisgICBuZ2NfcmM9JD8KKyAgIGlmIFsgJG5nY19yYyAtbmUgMCBdO3RoZW4KKyAgICAgIG5zYl9hYm9ydCAiRXJyb3IgZHVyaW5nIGNvbmZpZ3VyZSBkaXN0IChyYz0kbmdjX3JjKSIKKyAgIGZpCit9CisKK25zYl9jb25maWdfYWxsKCkKK3sKKyAgIG5zYl9mbG93IGNvbmZpZ19hbGwKKyAgIGlmIFsgJCMgLWx0IDEgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJ1c2FnZTogbnNiX2NvbmZpZ19hbGwgc3JjX2RpciIKKyAgIGZpCisgICBuZ2Nfc3JjPSQxCisgICBpZiBbICEgLWQgJG5nY19zcmMgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkbmdjX3NyYyBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorICAgaWYgWyAhIC1kICRuZ2Nfc3JjL2FnZW50L21pYmdyb3VwIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiYWdlbnQvbWliZ3JvdXAgZGlyZWN0b3J5IGluICRuZ2Nfc3JjIGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisgICBuZ2NfZGVzdD0kMgorICAgaWYgWyAiWCRuZ2NfZGVzdCIgIT0gIlgiIC1hICEgLWQgJG5nY19kZXN0IF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJG5nY19kZXN0IGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisKKyAgICMKKyAgICMgU3lzdGVtIHNwZWNpZmljIGFkZGl0aW9ucworICAgIworICAgY2FzZSBgdW5hbWUgLXNgIGluCisKKyAgIExpbnV4KQorICAgICAgTlNCX0lQVjY9JHtOU0JfSVBWNjo9Ii0tZW5hYmxlLWlwdjYifQorICAgICAgTlNCX0VYVFJBX1RSQU5TUE9SVFM9IklQWCIKKyAgICAgIDs7CisKKyAgICNEYXJ3aW4pCisgICAjICAgOzsKKworICAgKikKKyAgICAgIE5TQl9JUFY2PSR7TlNCX0lQVjY6PSItLWVuYWJsZS1pcHY2In0KKyAgICAgIDs7CisgICBlc2FjCisKKyAgICMKKyAgICMgdXNlIGxpYndyYXAgaWYgd2UgY2FuIGZpbmQgdGhlIGhlYWRlcgorICAgIworICAgaWYgWyAtZiAvdXNyL2luY2x1ZGUvdGNwZC5oIF07IHRoZW4KKyAgICAgIE5TQl9MSUJXUkFQPSR7TlNCX0xJQldSQVA6PSItLXdpdGgtbGlid3JhcCJ9CisgICAgICBOU0JfRVhUUkFfQ09ORklHPSIkTlNCX0VYVFJBX0NPTkZJRyAkTlNCX0xJQldSQVAiCisgICBmaQorCisgICAjCisgICAjIHNvbWUgbW9kdWxlcyBtaWdodCBiZSByZWxlYXNlIHNwZWNpZmljLCBzbyBtYWtlIHN1cmUgdGhleQorICAgIyBleGlzdCBiZWZvcmUgd2Ugc2VuZCB0aGVtIG9mZiB0byBjb25maWd1cmUKKyAgICMKKyAgIE5TQl9GSU5BTF9NT0RVTEVTPQorICAgZm9yIG5jZF94IGluICROU0JfRElTVF9NT0RVTEVTICROU0JfRVhUUkFfTU9EVUxFUworICAgZG8KKwlpZiBbIC1yICRuZ2Nfc3JjL2FnZW50L21pYmdyb3VwLyRuY2RfeC5oIF07IHRoZW4KKwkJTlNCX0ZJTkFMX01PRFVMRVM9IiROU0JfRklOQUxfTU9EVUxFUyAkbmNkX3giCisJZmkKKyAgIGRvbmUKKworICAgIworICAgIyBjb25maWd1cmUKKyAgICMKKyAgICMgTk9URTogZm9yIHNvbWUgcmVhc29uLCBiYXNoIGRvZXMgbm90IGV4cGFuZCB2YXJpYWJsZXMKKyAgICMgaW5zaWRlIG9mIHNpbmdsZSBxdW90ZXMsIHNvIHVzZSBkb3VibGUgcXVvdGVzCisgICAjCisgICBlY2hvICRuZ2Nfc3JjL2NvbmZpZ3VyZSAgLS13aXRoLWRlZmF1bHRzIFwKKyAgICAgIC0tcHJlZml4PSIkTlNCX1BSRUZJWCIgXAorICAgICAgLS1kaXNhYmxlLWRldmVsb3BlciAkTlNCX0VYVFJBX0NPTkZJRyBcCisgICAgICAiLS13aXRoLW1pYi1tb2R1bGVzPSROU0JfRklOQUxfTU9EVUxFUyIgXAorICAgICAgIi0td2l0aC10cmFuc3BvcnRzPSROU0JfRElTVF9UUkFOU1BPUlRTICROU0JfRVhUUkFfVFJBTlNQT1JUUyIgXAorICAgICAgJE5TQl9TSEFSRUQgJE5TQl9JUFY2ICROU0JfUEVSTAorICAgJG5nY19zcmMvY29uZmlndXJlICAtLXdpdGgtZGVmYXVsdHMgXAorICAgICAgLS1wcmVmaXg9IiROU0JfUFJFRklYIiBcCisgICAgICAtLWRpc2FibGUtZGV2ZWxvcGVyICROU0JfRVhUUkFfQ09ORklHIFwKKyAgICAgICItLXdpdGgtbWliLW1vZHVsZXM9JE5TQl9GSU5BTF9NT0RVTEVTIiBcCisgICAgICAiLS13aXRoLXRyYW5zcG9ydHM9JE5TQl9ESVNUX1RSQU5TUE9SVFMgJE5TQl9FWFRSQV9UUkFOU1BPUlRTIiBcCisgICAgICAkTlNCX1NIQVJFRCAkTlNCX0lQVjYgJE5TQl9QRVJMCisgICAjIEknZCBsaWtlIHRvIGFkZCAnIHwgdGVlIG5zYl9jb25maWcuJE5TQl9EQVRFJyB0byBzYXZlIG91dHB1dCwgYnV0IHRoZW4KKyAgICMgSSdkIGxvc2UgdGhlIHJjIGZyb20gY29uZmlndXJlLCB3aGljaCBJIG5lZWQuLi4gc2lnaAorICAgbmdjX3JjPSQ/CisgICBpZiBbICRuZ2NfcmMgLW5lIDAgXTt0aGVuCisgICAgICBuc2JfYWJvcnQgIkVycm9yIGR1cmluZyBjb25maWd1cmUgYWxsIChyYz0kbmdjX3JjKSIKKyAgIGZpCit9CisKK25zYl96aXAoKQoreworICAgaWYgWyAkIyAtbmUgMyBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgInVzYWdlOiAkMCByZWxlYXNlIGJ1aWxkX2RpcmVjdG9yeSBkZXN0X2RpciIKKyAgIGZpCisKKyAgIHJlbGVhc2U9JDEKKyAgIGJ1aWxkX2Rpcj0kMgorICAgZGVzdF9kaXI9JDMKKworICAgYnVpbGQ9JGJ1aWxkX2Rpci8kTlNCX1BMQVRGT1JNCisKKyAgIGlmIFsgISAtZCAkYnVpbGQgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkYnVpbGQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisKKyAgIGlmIFsgISAtZCAkYnVpbGQvdXNyIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiaW5zdGFsbCBkaXJlY3RvcnkgJGJ1aWxkL3VzciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKworICAgY2QgJGJ1aWxkCisKKyAgIHJtIC1mICRkZXN0X2Rpci8kcmVsZWFzZS0kTlNCX1BMQVRGT1JNLnRhcgorICAgbnNiX2luZm8gInRhciBjZiAkZGVzdF9kaXIvJHJlbGVhc2UtJE5TQl9QTEFURk9STS50YXIgdXNyIgorICAgdGFyIGNmICRkZXN0X2Rpci8kcmVsZWFzZS0kTlNCX1BMQVRGT1JNLnRhciB1c3IKKworICAgbnNiX2luZm8gImd6aXAgLS1iZXN0ICRkZXN0X2Rpci8kcmVsZWFzZS0kTlNCX1BMQVRGT1JNLnRhciIKKyAgIGd6aXAgLS1iZXN0ICRkZXN0X2Rpci8kcmVsZWFzZS0kTlNCX1BMQVRGT1JNLnRhcgorCisgICBpZiBbICROU0JfUVVJRVQgLW5lIDEgXTsgdGhlbgorICAgICAgbHMgLWx0ICRkZXN0X2RpcgorICAgZmkKK30KKworbnNiX3VwbG9hZCgpCit7CisgICBidWlsZF9kaXI9JDEKKyAgIHRhcmdldD0kMgorICAgbnNiX2Zsb3cgdXBsb2FkIHRvICR0YXJnZXQ6IGNvbmZpZy5sb2cgY29uZmlndXJlLXN1bW1hcnkgbnNiX21ha2UtYWxsLiROU0JfREFURSBuc2JfbWFrZS10ZXN0LiROU0JfREFURQorICAgZGlyPSRQV0QKKyAgIGNkICRidWlsZF9kaXIKKyAgIC91c3IvYmluL3NjcCBjb25maWcubG9nIGNvbmZpZ3VyZS1zdW1tYXJ5IG5zYl9tYWtlLWFsbC4kTlNCX0RBVEUgbnNiX21ha2UtdGVzdC4kTlNCX0RBVEVcCisgICAgICAgICAgICAgICAgICR0YXJnZXQKKyAgIGNkICRkaXIKK30KKworbnNiX2Rpcl9saW5rKCkKK3sKKyAgaWYgWyAkIyAtbHQgMiBdOyB0aGVuCisgICAgbnNiX2Fib3J0ICJ1c2FnZTogbnNiX2Rpcl9saW5rIHNyY19kaXIgZHN0X2RpciIKKyAgZmkKKyAgbGlua19zcmNfZGlyPSQxCisgIGxpbmtfZHN0X2Rpcj0kMgorICBpZiBbIC1kICRsaW5rX3NyY19kaXIgXTsgdGhlbgorICAgIG5zYl9mbG93IHNldCB1cCBzaGFkb3cgZGlyZWN0b3J5ICRsaW5rX2RzdF9kaXIKKyAgICAkTlNCX0RJUkxJTksgJGxpbmtfc3JjX2RpciAkbGlua19kc3RfZGlyCisgICAgcmM9JD8KKyAgICBpZiBbICRyYyAtbmUgMCBdO3RoZW4KKyAgICAgIG5zYl9hYm9ydCAiRXJyb3IgZHVyaW5nIG5zYl9kaXJfbGluayAocmM9JHJjKSIKKyAgICBmaQorICBlbHNlCisgICAgbnNiX2luZm8gIlNraXBwaW5nICRsaW5rX3NyY19kaXIiCisgIGZpCisgIH0KKworbnNiX21ha2UoKQoreworICAgbnNiX2Zsb3cgbWFrZSAkMQorICAgdGFyZ2V0PSQxCisgICBzaGlmdCAxCisgICBwYXJtcz0kQAorCisgICBpZiBbICJ4JE5TQl9NQUtFIiA9ICJ4IiBdO3RoZW4KKyAgICAgICNuc2JfaW5mbyAiU2VhcmNoaW5nIGZvciBHTlUgbWFrZSAoc2V0IE5TQl9NQUtFIHRvIHNraXAgdGhpcyBzdGVwKSIKKyAgICAgIGZvciBwIGluIGBlY2hvICRQQVRIIHwgdHIgJzonICcgJ2AKKyAgICAgIGRvCisgICAgICAgICAjZWNobyAkcAorICAgICAgICAgaWYgWyAteCAkcC9tYWtlIF07dGhlbgorICAgICAgICAgICAgZHVtbXk9YCRwL21ha2UgLS12ZXJzaW9uIDI+JjEgfCBncmVwIEdOVWAKKyAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTt0aGVuCisJICAgICAgICNuc2JfaW5mbyAidXNpbmcgJHAvbWFrZSAoJGR1bW15KSIKKyAgICAgICAgICAgICAgIE5TQl9NQUtFPSRwL21ha2UKKyAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgICAgIGlmIFsgLXggJHAvZ21ha2UgXTt0aGVuCisgICAgICAgICAgICBkdW1teT1gJHAvZ21ha2UgLS12ZXJzaW9uIDI+JjEgfCBncmVwIEdOVWAKKyAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTt0aGVuCisJICAgICAgICNuc2JfaW5mbyAidXNpbmcgJHAvZ21ha2UgKCRkdW1teSkiCisgICAgICAgICAgICAgICBOU0JfTUFLRT0kcC9nbWFrZQorICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgWyAieCROU0JfTUFLRSIgPSAieCIgXTt0aGVuCisgICAgICAgICBuc2JfYWJvcnQgIkdOVSBtYWtlIG5vdCBmb3VuZC4gU2V0IE5TQl9NQUtFIHRvIHlvdXIgbWFrZSBleGVjdXRhYmxlLiIKKyAgICAgIGZpCisgICBmaQorCisgICBuc2JfbWFrZV9PVVRQVVQ9bnNiX21ha2UtJHRhcmdldC4kTlNCX0RBVEUKKyAgIG5zYl9pbmZvICJNYWtpbmcgJHRhcmdldC4uLiAobG9nIGlzICRuc2JfbWFrZV9PVVRQVVQpIgorICAgIworICAgaWYgWyAieCR0YXJnZXQiID0gInhhbGwiIF07IHRoZW4KKyAgICAgICROU0JfTUFLRSBOT0FVVE9ERVBTPXkgdG91Y2hpdCAyPiYxIHwgdGVlICRuc2JfbWFrZV9PVVRQVVQKKyAgIGZpCisgICAkTlNCX01BS0UgJE5TQl9NQUtFX0VYVFJBIE5PQVVUT0RFUFM9eSBzdGFydC1mbGFnICR0YXJnZXQgJHBhcm1zIGVuZC1mbGFnIDI+JjEgfCB0ZWUgLWEgJG5zYl9tYWtlX09VVFBVVAorICAgIyBjaGVja2luZyAkPyB3b3VsZCBvbmx5IGdldCB1cyB0aGUgcmMgZnJvbSB0ZWUsIHdoaWNoIGlzIHVzZWxlc3MKKworICAgbnNiX2luZm8gIkNoZWNraW5nIGZvciBlcnJvcnMuLi4iCisgICBlZ3JlcCAtaSAiZXJyb3J8ZmFpbHx3YXJufG5vIHN1Y2h8ZXhpc3RzfHQgZmluZCB8ZXJtaXNzaW9uIGRlbmllZCIgJG5zYl9tYWtlX09VVFBVVCBcCisgICAgICAgICA+IG5zYl9tYWtlLSR0YXJnZXQtYWxsZXJycy4kTlNCX0RBVEUKKyAgICMgYWxsb3cgZm9yIGEgZmV3IGV4Y2VwdGlvbnMKKyAgIGVncmVwIC12IC1pICJeb2t8dGVzdGluZyAuKmZhaWx1cmV8W2EteiZfXShmYWlsfGVycm9yKXx3YXJufGVycm9yKG1pYnxcLjMpfChMT0d8U05NUClfRVJSfEluIGZ1bmN0aW9ufD0gRkFJTFVSRXxERUJVR01TR3wvXCp8c3RhdGljIGxpYnJhcnkgLiogaXMgbm90IHBvcnRhYmxlIiBuc2JfbWFrZS0kdGFyZ2V0LWFsbGVycnMuJE5TQl9EQVRFIFwKKyAgICAgICAgID4gbnNiX21ha2UtJHRhcmdldC1lcnJzLiROU0JfREFURQorICAgaWYgWyAtcyBuc2JfbWFrZS0kdGFyZ2V0LWVycnMuJE5TQl9EQVRFIF07IHRoZW4KKyAgICAgIG5zYl9wcm9tcHQgInByZXNzIGVudGVyIHRvIHZpZXcgZXJyb3JzIgorIyAgICAgIGdyZXAgJzonICRuc2JfbWFrZV9PVVRQVVQgPiBuc2JfbWFrZS0kdGFyZ2V0LWVycnMyLiROU0JfREFURQorIyAgICAgIHRhaWwgLW4gJE5TQl9FUlJfQ1RYX0xJTkVTIG5zYl9tYWtlLSR0YXJnZXQtZXJyczIuJE5TQl9EQVRFID4mMgorICAgICAgdGFpbCAkTlNCX1RBSUxfQVJHUyBuc2JfbWFrZS0kdGFyZ2V0LWVycnMuJE5TQl9EQVRFID4mMgorICAgICAgbnNiX2Fib3J0ICJFcnJvcihzKSBkdXJpbmcgbWFrZSAkdGFyZ2V0IgorICAgZmkKKworICAgaWYgWyAtZiBidWlsZC1pbi1wcm9ncmVzcy1mbGFnIF07dGhlbgorICAgICBuc2JfYWJvcnQgIm1ha2UgJHRhcmdldCBpbmNvbXBsZXRlIgorICAgZmkKK30KKworbnNiX2RlZmF1bHRfcGF0aHMoKQoreworICAgaWYgWyAieCROU0JfVkVSU0lPTiIgPSAieCIgXTsgdGhlbgorICAgICAgTlNCX1ZFUlNJT049InVua25vd24tdmVyc2lvbiIKKyAgIGZpCisgICBpZiBbICJ4JE5TQl9TUkNfRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgICBOU0JfU1JDX0RJUj0kSE9NRS9zcmMvbmV0LXNubXAtJE5TQl9WRVJTSU9OCisgICBmaQorICAgaWYgWyAieCROU0JfQlVJTERfRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgICBOU0JfQlVJTERfRElSPSRIT01FL2J1aWxkLyROU0JfVkVSU0lPTgorICAgICAgaWYgWyAieCROU0JfU1VGRklYIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgTlNCX0JVSUxEX0RJUj0kTlNCX0JVSUxEX0RJUi8kTlNCX1NVRkZJWAorICAgICAgZmkKKyAgIGZpCisgICBpZiBbICJ4JE5TQl9JTlNUQUxMX0RJUiIgPSAieCIgXTsgdGhlbgorICAgICAgTlNCX0lOU1RBTExfRElSPSIkTlNCX0lOU1RBTExfRElSX0RFRkFVTFQiCisgICBmaQorfQorCituc2JfYnVpbGQoKQoreworICAgaWYgWyAkIyAtbHQgNSBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgInVzYWdlOiAkMCByZWxlYXNlIHNyY19kaXIgYnVpbGRfZGlyZWN0b3J5IGRlc3RfZGlyIGNvbmZpZ19hbGxfZmxhZyAoJEApIgorICAgZmkKKworICAgbnNiX2NvbmZpZ19hbGxfZmxhZz0wCisgICByZWxlYXNlPSQxCisgICBzcmNfZGlyPSQyCisgICBidWlsZF9kaXI9JDMKKyAgIGRlc3RfZGlyPSQ0CisgICBuc2JfY29uZmlnX2FsbF9mbGFnPSQ1CisgICBzaGlmdCA1CisKKyAgIG5zYl9mbG93IGJ1aWxkIGluICRidWlsZF9kaXIKKyAgIG5zYl9mbG93IGhvc3QgJE5TQl9IT1NUCisgICBuc2JfZmxvdyBwbGF0Zm9ybSAkTlNCX1BMQVRGT1JNCisKKyAgIGlmIFsgISAtZCAkc3JjX2RpciBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRzcmNfZGlyIGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisKKyAgIGlmIFsgISAtZCAkYnVpbGRfZGlyIF07IHRoZW4KKyAgICAgIG1rZGlyICRidWlsZF9kaXIKKyAgICAgIGlmIFsgISAtZCAkYnVpbGRfZGlyIF07IHRoZW4KKyAgICAgICAgIG5zYl9hYm9ydCAiJGJ1aWxkX2RpciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QhIgorICAgICAgZmkKKyAgIGZpCisKKyAgIG5zYl9pbmZvICJDaGFuZ2luZyBkaXJlY3RvcmllcyB0byAkYnVpbGRfZGlyIgorICAgY2QgJGJ1aWxkX2RpcgorCisgICBpZiBbICROU0JfQ0xFQU4gLWd0IDAgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIkNsZWFuaW5nIHVwLi4uIgorICAgICAgaWYgWyAkTlNCX0NMRUFOIC1lcSAyIF07dGhlbgorICAgICAgICBpZiBbICJ4JFBXRCIgPSAieC8iIF07IHRoZW4KKyAgICAgICAgICAgbnNiX2Fib3J0ICJOb3QgcnVubmluZyBybSAtZlIgZnJvbSAvIgorICAgICAgICBmaQorICAgICAgICBuc2JfaW5mbyAicm0gLWZSICogLlthLXpBLVpdKiA+IC9kZXYvbnVsbCAyPiYxIgorICAgICAgICBybSAtZlIgKiAuW2EtekEtWl0qID4gL2Rldi9udWxsIDI+JjEKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgWyAieCRkZXN0X2RpciIgIT0gIngiIC1hICJ4JGRlc3RfZGlyIiAhPSAieC8iIF07IHRoZW4KKyAgICAgICAgICBuc2JfaW5mbyAicm0gLWZSIG5zYl8qICRkZXN0X2RpciA+IC9kZXYvbnVsbCAyPiYxIgorICAgICAgICAgICNybSAtZlIgbnNiXyogJGRlc3RfZGlyID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZiBNYWtlZmlsZSBdOyB0aGVuCisgICAgICAgICAgICBuc2JfbWFrZSBOT0FVVE9ERVBTPXkgZGlzdGNsZWFuCisgICAgICAgICAgICBuc2JfYnVpbGRfcmM9JD8KKyAgICAgICAgICAgIGlmIFsgJG5zYl9idWlsZF9yYyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgbnNiX2Fib3J0ICJFcnJvciBkdXJpbmcgbWFrZSBkaXN0Y2xlYW4gKHJjPSRuc2JfYnVpbGRfcmMpIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICBmaQorCisgICBpZiBbICJYJGRlc3RfZGlyIiAhPSAiWCIgLWEgISAtZCAkZGVzdF9kaXIgXTsgdGhlbgorICAgICAgbWtkaXIgLXAgJGRlc3RfZGlyCisgICAgICBpZiBbICEgLWQgJGRlc3RfZGlyIF07IHRoZW4KKyAgICAgICAgIG5zYl9hYm9ydCAiJGRlc3RfZGlyIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCEiCisgICAgICBmaQorICAgZmkKKworICAgaWYgWyAkTlNCX1NLSVBfRElSTElOSyAtZXEgMSBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiU2tpcHBpbmcgbnNiX2Rpcl9saW5rIgorICAgZWxzZQorICAgICAgZm9yIGQgaW4gJE5TQl9ESVJMSU5LX0RJUlM7IGRvCisgICAgICAgIG5zYl9kaXJfbGluayAkc3JjX2Rpci8kZCAkYnVpbGRfZGlyLyRkCisgICAgICBkb25lCisgICBmaQorCisgICBpZiBbICROU0JfU0tJUF9DT05GSUcgLW5lIDEgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIkNvbmZpZ3VyaW5nLi4uIChsb2cgaXMgbnNiX2NvbmZpZy4kTlNCX0RBVEUpIgorICAgICAgaWYgWyAieCRuc2JfY29uZmlnX2FsbF9mbGFnIiA9ICJ4MCIgXTsgdGhlbgorICAgICAgICAgIG5zYl9jb25maWdfZGlzdCAkc3JjX2RpciAiJGRlc3RfZGlyIgorICAgICAgZWxzZQorICAgICAgICAgIG5zYl9jb25maWdfYWxsICRzcmNfZGlyICIkZGVzdF9kaXIiCisgICAgICBmaQorICAgICAgbnNiX3Byb21wdCAicHJlc3MgZW50ZXIgdG8gY29udGludWUiCisgICBmaQorCisgICBpZiBbICROU0JfU0tJUF9CVUlMRCAtZXEgMSBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiU2tpcHBpbmcgJ21ha2UgYWxsJyIKKyAgIGVsc2UKKyAgICAgIG5zYl9tYWtlIGFsbAorICAgZmkKKworICAgaWYgWyAkTlNCX1NLSVBfVEVTVCAtZXEgMSBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiU2tpcHBpbmcgJ21ha2UgdGVzdCciCisgICBlbHNlCisgICAgICBuc2JfcHJvbXB0ICJObyBlcnJvcnMgZm91bmQsIHByZXNzIGVudGVyIHRvIHJ1biB0ZXN0cyIKKyAgICAgIFNOTVBfVE1QRElSX0JBU0U9JGJ1aWxkX2Rpci90ZXN0cworICAgICAgZXhwb3J0IFNOTVBfVE1QRElSX0JBU0UKKyAgICAgIG5zYl9tYWtlIHRlc3QKKyAgIGZpCisKKyAgIGlmIFsgJE5TQl9TS0lQX0lOU1RBTEwgLWVxIDEgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIlNraXBwaW5nICdtYWtlIGluc3RhbGwnIgorICAgZWxzZQorICAgICAgbnNiX3Byb21wdCAiTm8gZXJyb3JzIGZvdW5kLCBwcmVzcyBlbnRlciB0byBpbnN0YWxsIgorICAgICAgIyBERVNURElSIG1ha2VzIHN1cmUgdGhlIHBlcmwgc3R1ZmYgZ29lcyBpbnRvICRkZXN0X2RpciwgdG9vCisgICAgICBuc2JfbWFrZSBpbnN0YWxsIERFU1RESVI9IiRkZXN0X2RpciIgJE5TQl9FWFRSQV9JTlNUQUxMCisgICBmaQorCisgICByZXR1cm4gMAorfQpkaWZmIC0tZ2l0IGEvZGlzdC9uc2ItbmlnaHRseSBiL2Rpc3QvbnNiLW5pZ2h0bHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI5OGEyNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbnNiLW5pZ2h0bHkKQEAgLTAsMCArMSwxODggQEAKKyMhL2Jpbi9zaAorIworIyAkSWQkCisjIEF1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordXNhZ2UoKQoreworICAgZWNobyAiVXNhZ2U6ICQwICBbb3B0aW9uYWwgcGFyYW1zXSBWRVJTSU9OIgorICAgZWNobyAiIgorICAgZWNobyAiIG9wdGlvbmFsIHBhcmFtczogWy14XSBbLXMgU1JDRF0gWy1iIEJVSUxERF0gWy1pIElOU1RBTExEXSIKKyAgIGVjaG8gIiAgICAgICAgICAgICAgICAgIFstaCBob3N0XSBbLXAgcGF0aF0iCisgICBlY2hvICIgVkVSU0lPTiAgICA6IHJlbGVhc2UgbnVtYmVyIChlZyA1LjIuMikiCisgICBlY2hvICIgLXMgU1JDRElSICA6IHNvdXJlIGRpcmVjdG9yeSBbJEhPTUUvc3JjL25ldC1zbm1wLVZFUlNJT05dIgorICAgZWNobyAiIC1iIEJVSUxERCAgOiBidWlsZCBkaXJlY3RvcnkgWyRIT01FL2J1aWxkL10iCisgICBlY2hvICIgICAgICAgICAgICAgIE5PVEUtcGxhdGZvcm0gd2lsbCBiZSBhcHBlbmRlZCB0byBidWlsZCBkaXJlY3RvcnkiCisgICBlY2hvICIgLWkgSU5TVEFMTEQ6IGluc3RhbGwgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9cJFBMQVRGT1JNL3Vzcl0iCisgICBlY2hvICIiCisgICBlY2hvICIgLXggOiBjb25maWd1cmUgZXh0cmEgZmVhdHVyZXMgZm9yIHByZS1yZWxlYXNlIHRlc3RpbmciCisgICBlY2hvICIgLUMgOiBkb24ndCBzb3VyY2UgJEhPTUUvLnNubXAvbnNiLW5pZ2h0bHkiCisgICBlY2hvICIiCisgICBlY2hvICIgLWYgOiBmcm9tIGFkZHJlc3MgZm9yIGVtYWlsIHJlc3VsdHMiCisgICBlY2hvICIgLWUgOiBhZGRyZXNzIHRvIGVtYWlsIGVycm9yIHJlc3VsdHMgdG8iCisgICBlY2hvICIgLW8gOiBhZGRyZXNzIHRvIGVtYWlsIHN1Y2Nlc3MgcmVzdWx0cyB0byIKKyAgIGVjaG8gIiAtaCA6IGhvc3QgdG8gdXBsb2FkIHJlc3VsdHMgdG8iCisgICBlY2hvICIgLXAgOiBwYXRoIHRvIHVwbG9hZCByZXN1bHRzIHRvIgorICAgZXhpdCAxCit9CisKKyNzZXQgLXgKKworIyBtYWtlIGdldG9wdHMgd29yayBvbiBUcnU2NCBieSByZXNwYXduaW5nIGluIFBvc2l4IG1vZGUKK2lmIFsgImB1bmFtZWAiID0gIk9TRjEiIC1hICIkQklOX1NIIiAhPSAieHBnNCIgXTsgdGhlbgorICAgIEJJTl9TSD14cGc0CisgICAgZXhwb3J0IEJJTl9TSAorICAgIGV4ZWMgJDAgJCoKK2ZpCisKKyMKKyMgZmluZCBuc2ItcGxhdGZvcm0gYmFzZWQgb24gdGhlIHBhdGggdG8gdGhpcyBzY3JpcHQKKyMKK0VYRV9QQVRIPWBkaXJuYW1lICQwYAoraWYgWyAhIC1mICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zIF07dGhlbgorICAgaWYgWyAtZiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucyBdOyB0aGVuCisgICAgICBFWEVfUEFUSD0kSE9NRS9iaW4KKyAgIGVsaWYgWyAtZiBuc2ItZnVuY3Rpb25zIF07dGhlbgorICAgICAgRVhFX1BBVEg9JFBXRAorICAgZWxzZQorICAgICAgZWNobyAiQ2Fubm90IGZpbmQgbnNiLWZ1bmN0aW9ucyBpbiAkRVhFX1BBVEgsICRIT01FL2JpbiBvciAkUFdEIgorICAgICAgZXhpdCAxCisgICBmaQorZmkKKworaWYgWyAieCQxIiA9ICJ4LUMiIF07IHRoZW4KKyAgICBzaGlmdAorZWxzZQorICAgIGlmIFsgLWYgJEhPTUUvLnNubXAvbnNiLW5pZ2h0bHkgXTt0aGVuCisgICAgICAgIC4gJEhPTUUvLnNubXAvbnNiLW5pZ2h0bHkKKyAgICBmaQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAtciA6IHJlbW92ZSBidWlsZCBkaXIgYmVmb3JlCisjIC1SIDogcmVtb3ZlIGJ1aWxkIGRpciBhZnRlcgorUEFSTVM9IiRQQVJNUyAtciIKK05JR0hUTFlfVkVSQk9TRT0wCitOU0JfRVJSX1JFU1VMVFNfVE89IiIKK05TQl9PS19SRVNVTFRTX1RPPSIiCisKK3doaWxlIGdldG9wdHMgYjplOmY6aTpvOnM6eGg6cDp2IG9wdAorZG8KKyAgICBjYXNlICIkb3B0IiBpbgorICAgICAgYikgIE5TQl9CVUlMRF9ESVI9JE9QVEFSRzs7CisgICAgICBlKSAgTlNCX0VSUl9SRVNVTFRTX1RPPSRPUFRBUkc7OworICAgICAgZikgIE5TQl9GUk9NPSRPUFRBUkc7OworICAgICAgbykgIE5TQl9PS19SRVNVTFRTX1RPPSRPUFRBUkc7OworICAgICAgaSkgIFBBUk1TPSItaSAkT1BUQVJHICRQQVJNUyI7OworICAgICAgcykgIE5TQl9TUkNfRElSPSRPUFRBUkc7OworICAgICAgaCkgIE5TQl9TQ1BfSE9TVD0kT1BUQVJHCisgICAgICAgICAgUEFSTVM9Ii1oICROU0JfU0NQX0hPU1QgJFBBUk1TIgorICAgICAgICAgIDs7CisgICAgICBwKSAgTlNCX1NDUF9ERVNUPSRPUFRBUkcKKyAgICAgICAgICBQQVJNUz0iLXAgJE5TQl9TQ1BfREVTVCAkUEFSTVMiCisgICAgICAgICAgOzsKKyAgICAgIHgpICBQQVJNUz0iLXggJFBBUk1TIjs7CisgICAgICB2KSAgTklHSFRMWV9WRVJCT1NFPTE7OworICAgICAgXD8pIyB1bmtub3duIGZsYWcKKyAgICAgICAgdXNhZ2U7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0IGBleHByICRPUFRJTkQgLSAxYAorCitpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgIGVjaG8gImV4cGVjdGluZyAxIGFyZ3VtZW50LCBnb3QgJCMgKCRAKSIKKyAgIHVzYWdlCitmaQorCitOU0JfVkVSU0lPTj0kMQorCisuICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zCisKK25zYl9kZWZhdWx0X3BhdGhzCisKK1BBUk1TPSIkUEFSTVMgLWIgJE5TQl9CVUlMRF9ESVIgLXMgJE5TQl9TUkNfRElSIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZWNobyAiU3RhcnQ6IGBkYXRlYCIKK2VjaG8gIlJ1bm5pbmcgbnNiLXBhY2thZ2UgJFBBUk1TICROU0JfVkVSU0lPTiIKK2lmIFsgJE5JR0hUTFlfVkVSQk9TRSA9IDEgXTsgdGhlbgorICAgICRFWEVfUEFUSC9uc2ItcGFja2FnZSAkUEFSTVMgJE5TQl9WRVJTSU9OCitlbHNlCisgICAgJEVYRV9QQVRIL25zYi1wYWNrYWdlICRQQVJNUyAkTlNCX1ZFUlNJT04gPiAvZGV2L251bGwKK2ZpCitSQz0kPworZWNobyAiRmluaXNoOiBgZGF0ZWAiCitjZCAkTlNCX0JVSUxEX0RJUgorY2FzZSAkUkMgaW4KKyAgICAwKSAgUkVTVUxUPSJTdWNjZXNzIgorICAgICAgICBOU0JfUkVTVUxUU19UTz0kTlNCX09LX1JFU1VMVFNfVE8KKyAgICAgICAgRklMRVM9IiIKKyAgICAgICAgOzsKKyAgICAqKSBSRVNVTFQ9IkVycm9yIChyYyAkUkMpIgorICAgICAgIE5TQl9SRVNVTFRTX1RPPSROU0JfRVJSX1JFU1VMVFNfVE8KKyAgICAgICBGSUxFUz1gbHMgbnNiLW1ha2UtKi1lcnJzLiogMj4vZGV2L251bGxgCisgICAgICAgaWYgWyAieCROU0JfU0NQX0hPU1QiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgbnNiX3VwbG9hZCAkTlNCX0JVSUxEX0RJUiAkTlNCX1NDUF9IT1NUOiROU0JfU0NQX0RFU1QvJE5TQl9WRVJTSU9OLyROU0JfU1VGRklYCisgICAgICAgZmkKKyAgICAgICAgOzsKK2VzYWMKK2VjaG8gIlJlc3VsdDogJFJFU1VMVCIKKworaWYgWyAieCROU0JfUkVTVUxUU19UTyIgIT0gIngiIF07IHRoZW4KKyAgIFNVQkpFQ1Q9IiROU0JfVkVSU0lPTiAkUkVTVUxUIG9uICROU0JfSE9TVCAoJE5TQl9QTEFURk9STSkiCisgICBlY2hvICJTZW5kaW5nIG1haWwgdG8gJE5TQl9SRVNVTFRTX1RPOiAkU1VCSkVDVCIKKyAgIGNhc2UgYHVuYW1lIC1zYCBpbgorICAgICAgT3BlbkJTRHxGcmVlQlNEKSAjIG1haWwgZG9lc24ndCBhbGxvdyBzZXR0aW5nIEZyb20KKyAgICAgICAgICMgc2VlbXMgdG8gYmUgaW4gL3Vzci9zYmluLCB3aGljaCBpc24ndCBpbiBhbGwgcGF0aHMKKwkgUEFUSD0vdXNyL3NiaW4vOiRQQVRICisgICAgICAgICBlY2hvICJGcm9tOiAkTlNCX0ZST00iID4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICJUbzogJE5TQl9SRVNVTFRTX1RPIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgICMgbWFpbC1yZWxhdGVkIGVycm9ycyB0byBPSyBhZGRyZXNzICh1c3VsbHkgYnVpbGRtYXN0ZXIpCisgICAgICAgICBlY2hvICJFcnJvcnMtVG86ICROU0JfT0tfUkVTVUxUU19UTyIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICJTdWJqZWN0OiAkU1VCSkVDVCIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICIiID4+IG1haWwucmVzdWx0cworICAgICAgICAgZ3JlcCBDT05GSUdVUkVfT1BUSU9OUyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5ofHNlZCAnczovaG9tZS9bXiBdKi9idWlsZDokSE9NRTpnJyA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIlJlc3VsdDogJFJFU1VMVCIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBpZiBbICJ4JEZJTEVTIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgY2F0ICRGSUxFUyA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGZpCisgICAgICAgICBzZW5kbWFpbCAtdCA8IG1haWwucmVzdWx0cworICAgICAgICAgOzsKKyAgICAgIFN1bk9TKSAjIG5vIHNlbmRtYWlsLCBubyBtYWlsIC1zLCBuZWVkIC10IGZvciBUbyAKKyAgICAgICAgIGVjaG8gIkZyb206ICROU0JfRlJPTSIgPiBtYWlsLnJlc3VsdHMKKyAgICAgICAgICMgbWFpbC1yZWxhdGVkIGVycm9ycyB0byBPSyBhZGRyZXNzICh1c3VsbHkgYnVpbGRtYXN0ZXIpCisgICAgICAgICBlY2hvICJFcnJvcnMtVG86ICROU0JfT0tfUkVTVUxUU19UTyIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICJTdWJqZWN0OiAkU1VCSkVDVCIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICIiID4+IG1haWwucmVzdWx0cworICAgICAgICAgZ3JlcCBDT05GSUdVUkVfT1BUSU9OUyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5ofHNlZCAnczovaG9tZS9bXiBdKi9idWlsZDokSE9NRTpnJyA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIlJlc3VsdDogJFJFU1VMVCIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBpZiBbICJ4JEZJTEVTIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgY2F0ICRGSUxFUyA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGZpCisgICAgICAgICBtYWlsIC10ICROU0JfUkVTVUxUU19UTyA8IG1haWwucmVzdWx0cworICAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgICBlY2hvICJSZXN1bHQ6ICRSRVNVTFQiID4+IG1haWwucmVzdWx0cworICAgICAgICAgaWYgWyAieCRGSUxFUyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIGNhdCAkRklMRVMgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBmaQorICAgICAgICAgbWFpbCAtcyAiJFNVQkpFQ1QiICROU0JfUkVTVUxUU19UTyA8IG1haWwucmVzdWx0cworICAgICAgICAgOzsKKyAgIGVzYWMKK2ZpCisKK2lmIFsgJFJDIC1lcSAwIF07IHRoZW4KKyAgICAgICAgaWYgWyAieCROU0JfQlVJTERfRElSIiA9ICIvIiBdOyB0aGVuCisgICAgICAgICAgICBuc2JfYWJvcnQgIk5vdCBydW5uaW5nIHJtIC1mUiBmcm9tIC8iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC9iaW4vcm0gLWZSICROU0JfQlVJTERfRElSID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgZmkKK2ZpCisKK2V4aXQgJFJDCmRpZmYgLS1naXQgYS9kaXN0L25zYi1wYWNrYWdlIGIvZGlzdC9uc2ItcGFja2FnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTFjMTUwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uc2ItcGFja2FnZQpAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisjCisjICRJZCQKKyMgQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1c2FnZSgpCit7CisgICBlY2hvICJVc2FnZTogJDAgIFtwYXJhbXNdIFZFUlNJT04iCisgICBlY2hvICIiCisgICBlY2hvICIgIHBhcmFtczogWy1jXSBbLWRdIFstUF0gWy1zIE5TQl9TUkNfRElSXSBbLWIgQlVJTEREXSBbLWkgTlNCX0lOU1RBTExfRElSXSIKKyAgIGVjaG8gIiAgICAgICAgICBbLWggaG9zdF0gWy1wIHBhdGhdIgorICAgZWNobyAiIgorICAgZWNobyAiIFZFUlNJT04gICAgOiByZWxlYXNlIG51bWJlciAoZWcgNS4yLjIpIgorICAgZWNobyAiIC1zIE5TQl9TUkNfRElSICA6IHNvdXJjZSBkaXJlY3RvcnkgWyRIT01FL3NyYy9uZXQtc25tcC1WRVJTSU9OXSIKKyAgIGVjaG8gIiAtYiBCVUlMREQgIDogYnVpbGQgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9dIgorICAgZWNobyAiICAgICAgICAgICAgICBOT1RFLXBsYXRmb3JtIHdpbGwgYmUgYXBwZW5kZWQgdG8gYnVpbGQgZGlyZWN0b3J5IgorICAgZWNobyAiIC1pIE5TQl9JTlNUQUxMX0RJUjogaW5zdGFsbCBkaXJlY3RvcnkgWyRIT01FL2J1aWxkL1wkUExBVEZPUk0vdXNyXSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAteCA6IGNvbmZpZ3VyZSBleHRyYSBmZWF0dXJlcyBmb3IgcHJlLXJlbGVhc2UgdGVzdGluZyIKKyAgIGVjaG8gIiAtYyA6IHNraXAgY29uZmlndXJlIgorICAgZWNobyAiIC1kIDogZGlydHkgYnVpbGQgKGRvbid0IG1ha2UgZGlzdGNsZWFuKSIKKyAgIGVjaG8gIiAtbSA6IHNraXAgJ21ha2UgYWxsJyIKKyAgIGVjaG8gIiAtUCA6IHBhdXNlIGF0IHByb21wdHMgaW4gYmV0d2VlbiBzdGFnZXMiCisgICBlY2hvICIgLXIgOiByZW1vdmUgYnVpbGQgZGlyIChybSAtZlIpIGJlZm9yZSBidWlsZCIKKyAgIGVjaG8gIiAtUiA6IHJlbW92ZSBidWlsZCBkaXIgKHJtIC1mUikgYWZ0ZXIgc3VjY2Vzc2Z1bCBidWlsZCIKKyAgIGVjaG8gIiAtdCA6IHNraXAgJ21ha2UgdGVzdCciCisgICBlY2hvICIgLUMgOiBkb24ndCBzb3VyY2UgJEhPTUUvLnNubXAvbnNiLXBhY2thZ2UiCisgICBlY2hvICIiCisgICBlY2hvICIgLWggOiBob3N0IHRvIHVwbG9hZCByZXN1bHRzIHRvIgorICAgZWNobyAiIC1wIDogcGF0aCB0byB1cGxvYWQgcmVzdWx0cyB0byIKKyAgIGV4aXQgMQorfQorCisjdHJhcCBleGl0IFNJR0lOVAorCisjc2V0IC14CisKKyMgbWFrZSBnZXRvcHRzIHdvcmsgb24gVHJ1NjQgYnkgcmVzcGF3bmluZyBpbiBQb3NpeCBtb2RlCitpZiBbICJgdW5hbWVgIiA9ICJPU0YxIiAtYSAiJEJJTl9TSCIgIT0gInhwZzQiIF07IHRoZW4KKyAgICBCSU5fU0g9eHBnNAorICAgIGV4cG9ydCBCSU5fU0gKKyAgICBleGVjICQwICQqCitmaQorCisjCisjIGZpbmQgbnNiLXBsYXRmb3JtIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoaXMgc2NyaXB0CisjCitFWEVfUEFUSD1gZGlybmFtZSAkMGAKK2lmIFsgISAtZiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIGlmIFsgLWYgJEhPTUUvYmluL25zYi1mdW5jdGlvbnMgXTsgdGhlbgorICAgICAgRVhFX1BBVEg9JEhPTUUvYmluCisgICBlbGlmIFsgLWYgbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgICAgIEVYRV9QQVRIPSRQV0QKKyAgIGVsc2UKKyAgICAgIGVjaG8gIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMgaW4gJEVYRV9QQVRILCAkSE9NRS9iaW4gb3IgJFBXRCIKKyAgICAgIGV4aXQgMQorICAgZmkKK2ZpCisKK2lmIFsgIngkMSIgPSAieC1DIiBdOyB0aGVuCisgICAgc2hpZnQKK2Vsc2UKKyAgICBpZiBbIC1mICRIT01FLy5zbm1wL25zYi1wYWNrYWdlIF07dGhlbgorICAgICAgICAuICRIT01FLy5zbm1wL25zYi1wYWNrYWdlCisgICAgZmkKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JFTU9WRV9TVUNDRVNTPTAKKworIyAgICAgIHgpICB4PSRPUFRBUkcgOzsKK3doaWxlIGdldG9wdHMgYjpjZGg6aTptUHA6clJzOnR4IG9wdAorZG8KKyAgICBjYXNlICIkb3B0IiBpbgorICAgICAgYikgIE5TQl9CVUlMRF9ESVI9JE9QVEFSRyA7OworICAgICAgYykgIE5TQl9TS0lQX0NPTkZJRz0xIDs7CisgICAgICBkKSAgTlNCX0NMRUFOPTAgOzsKKyAgICAgIGgpICBOU0JfU0NQX0hPU1Q9JE9QVEFSRyA7OworICAgICAgaSkgIE5TQl9JTlNUQUxMX0RJUj0kT1BUQVJHIDs7CisgICAgICBtKSAgTlNCX1NLSVBfQlVJTEQ9MSA7OworICAgICAgUCkgIE5TQl9QUk9NUFQ9MSA7OworICAgICAgcCkgIE5TQl9TQ1BfREVTVD0kT1BUQVJHIDs7CisgICAgICByKSAgTlNCX0NMRUFOPTIgOzsKKyAgICAgIFIpICBSRU1PVkVfU1VDQ0VTUz0xIDs7CisgICAgICBzKSAgTlNCX1NSQ19ESVI9JE9QVEFSRyA7OworICAgICAgdCkgIE5TQl9TS0lQX1RFU1Q9MSA7OworICAgICAgeCkgIE5TQl9DT05GSUdfQUxMPTE7OworICAgICAgXD8pIyB1bmtub3duIGZsYWcKKyAgICAgICAgdXNhZ2U7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0IGBleHByICRPUFRJTkQgLSAxYAorCitpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgIGVjaG8gImV4cGVjdGluZyAxIGFyZ3VtZW50LCBnb3QgJCMgKCRAKSIKKyAgIHVzYWdlCitmaQorCitOU0JfVkVSU0lPTj0kMQorCisuICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zCisKK25zYl9kZWZhdWx0X3BhdGhzCisKK2lmIFsgJE5TQl9DTEVBTiAtZXEgMSBdOyB0aGVuCisgICBpZiBbICROU0JfU0tJUF9DT05GSUcgLWVxIDEgXTsgdGhlbgorICAgICAgZWNobyAiQSBjbGVhbiBidWlsZCBhbHNvIHJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gKC1kIGFuZCAtYyIKKyAgICAgIGVjaG8gImNhbm5vdCBib3RoIGJlIHNwZWNpZmllZCkuIgorICAgICAgdXNhZ2UKKyAgIGZpCitmaQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCituc2JfcHJvbXB0ICJwcmVzcyBlbnRlciB0byBidWlsZCAkTlNCX1NSQ19ESVIgaW4gJE5TQl9CVUlMRF9ESVIsIGFuZCBpbnN0YWxsIGluICROU0JfSU5TVEFMTF9ESVIiCituc2JfYnVpbGQgJE5TQl9WRVJTSU9OICROU0JfU1JDX0RJUiAkTlNCX0JVSUxEX0RJUiAkTlNCX0lOU1RBTExfRElSICROU0JfQ09ORklHX0FMTAorcmM9JD8KK2lmIFsgIngkTlNCX1NDUF9IT1NUIiAhPSAieCIgXTsgdGhlbgorICAgbnNiX3VwbG9hZCAkTlNCX0JVSUxEX0RJUiAkTlNCX1NDUF9IT1NUOiROU0JfU0NQX0RFU1QvJE5TQl9WRVJTSU9OLyROU0JfSE9TVC8KK2ZpCitpZiBbICRyYyAtZXEgMCBdICYmIFsgJFJFTU9WRV9TVUNDRVNTIC1lcSAxIF07dGhlbgorICAgIG5zYl9wcm9tcHQgInByZXNzIGVudGVyIHRvIHJlbW92ZSAkTlNCX0JVSUxEX0RJUiIKKyAgICBpZiBbICJ4JE5TQl9CVUlMRF9ESVIiID0gIi8iIF07IHRoZW4KKyAgICAgICBuc2JfYWJvcnQgIk5vdCBydW5uaW5nIHJtIC1mUiBmcm9tIC8iCisgICAgZWxzZQorICAgICAgIC9iaW4vcm0gLWZSICROU0JfQlVJTERfRElSID4gL2Rldi9udWxsIDI+JjEKKyAgICBmaQorZmkKKworbnNiX3Byb21wdCAicHJlc3MgZW50ZXIgdG8gZXhpdCB3aXRoIHJjICRSQyIKK2V4aXQgJHJjCmRpZmYgLS1naXQgYS9kaXN0L25zYi1wbGF0Zm9ybSBiL2Rpc3QvbnNiLXBsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3NTUwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25zYi1wbGF0Zm9ybQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKyMKKyMgJElkJAorIyBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgZmluZCBuc2ItcGxhdGZvcm0gYmFzZWQgb24gdGhlIHBhdGggdG8gdGhpcyBzY3JpcHQKKyMKK0VYRV9QQVRIPWBkaXJuYW1lICQwYAoraWYgWyAtZiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIC4gJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMKK2VsaWYgWyAtZiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucyBdOyB0aGVuCisgICAuICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zCitlbGlmIFsgLWYgbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIC4gbnNiLWZ1bmN0aW9ucworZWxzZQorICAgZWNobyAiQ2Fubm90IGZpbmQgbnNiLWZ1bmN0aW9ucyBpbiAkRVhFX1BBVEgsICRIT01FL2JpbiBvciAkUFdEIgorICAgZXhpdCAxCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCituc2Jfc3lzbmFtZQpkaWZmIC0tZ2l0IGEvZGlzdC9wYXRtZSBiL2Rpc3QvcGF0bWUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZkNTBlZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvcGF0bWUKQEAgLTAsMCArMSwzNTEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgR2V0b3B0OjpHVUk6Okxvbmc7Cit1c2UgUVdpemFyZDsKK3VzZSBRV2l6YXJkOjpBUEk7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEN3ZDsKKwordXNlIEdldG9wdDo6U3RkOworR2V0b3B0OjpHVUk6Okxvbmc6OkNvbmZpZ3VyZShxdyhkaXNwbGF5X2hlbHAgbm9faWdub3JlX2Nhc2UpKTsKKwordXNlIHN0cmljdDsKKworb3VyICVvcHRzID0KKygKKyAnZCcgPT4gJEVOVnsnSE9NRSd9IC4gIi9zcmMvc25tcC9wYXRtZS8iLAorICdiJyA9PiAnbWFpbiw1LjYsNS41LDUuNCw1LjMnLAorICdwJyA9PiAnLXAwJywKKyk7CisKKyMgc2V0cyB0aGUgb3JkZXIgc2hvd24KK291ciBAY29kZXRyZWVzID0gKCdtYWluJywKKwkJICAnNS42JywKKwkJICAnNS41JywKKwkJICAnNS40JywKKwkJICAnNS4zJywKKwkJICAnNS4yJywKKwkJICAnNS4xJywKKwkJICAnNS4wJywKKwkJICAnVUNEJyk7CisKK291ciAlY29kZXRyZWVzID0gKCc1LjAnID0+ICdWNS0wLXBhdGNoZXMnLAorCQkgICc1LjEnID0+ICdWNS0xLXBhdGNoZXMnLAorCQkgICc1LjInID0+ICdWNS0yLXBhdGNoZXMnLAorCQkgICc1LjMnID0+ICdWNS0zLXBhdGNoZXMnLAorCQkgICc1LjQnID0+ICdWNS00LXBhdGNoZXMnLAorCQkgICc1LjUnID0+ICdWNS01LXBhdGNoZXMnLAorCQkgICc1LjYnID0+ICdWNS02LXBhdGNoZXMnLAorCQkgICdtYWluJyA9PiAnbmV0LXNubXAnLAorCQkgICdVQ0QnID0+ICdWNC0yLXBhdGNoZXMnKTsKKworb3VyIChAY2FwdHVyZXMsICRjYXBmaWx0LCAkcmVzdWx0LCAlY2FwdHVyZXMsICRjYXB0dXJlbnVtKTsKKworR2V0T3B0aW9ucyhcJW9wdHMsCisJICAgWydmfGZpbGU9cycsICAgICAgICAgICAnUGF0Y2ggZmlsZSddLAorCSAgIFsnZHxiYXNlLWRpcmVjdG9yeT1zJywgJ0Jhc2UgZGlyZWN0b3J5IG9mIGNoZWNrb3V0cyddLAorCSAgIFsncHxwYXRjaC1hcmdzPXMnLCAgICAgJ0RlZmF1bHQgcGF0Y2ggYXJndW1lbnRzICgtcDEpJ10sCisKKwkgICBbJ0dVSTpzZXBhcmF0b3InLCAgICdQYXRjaCBhcHBsaWNhdGlvbiBzcGVjaWZpY3M7J10sCisJICAgWydifGJyYWNoZXM9cycsICAgICAnQnJhbmNoZXMgdG8gYXBwbHkgdG8gKGVnIDUuMSw1LjIsLi4uKSddLAorCSAgIFsnbXxjb21taXQtbXNnPXMnLCAgJ0RlZmF1bHQgY29tbWl0IG1lc3NhZ2UgdG8gdXNlJ10sCisJICAgWydEfHN1YmRpcj1zJywgICAgICAnQXBwbHkgcGF0Y2hlcyB0byBhIHN1YmRpcmVjdG9yeSddLAorCSAgIFsndXxuby11cGRhdGUnLCAgICAgJ0RvIG5vdCBydW4gc3ZuIHN0YXR1cy91cGRhdGUgaW4gdGhlIGRpcmVjdG9yeSBmaXJzdC4gIE9ubHkgdXNlIHRoaXMgaWYgaXRcJ3Mga25vd24gY2xlYW4uJ10sCisJICApOworCitteSAlYnM7CitpZiAoJG9wdHN7J2InfSkgeworICAgIG1hcCB7ICRic3skX30gPSAxOyB9IHNwbGl0KC8sXHMqLywkb3B0c3snYid9KTsgCit9Ciskb3B0c3snZCd9IC49ICIvIiBpZiAoJG9wdHN7J2QnfSAhfiAvXC8kLyk7CisKK215ICRxdyA9IG5ldyBRV2l6YXJkKCk7CitteSAkcHJpcyA9IGxvYWRfcHJpbWFyaWVzKCk7CiskcXctPnsncHJpbWFyaWVzJ30gPSAkcHJpczsKKworJHF3LT5xd3BhcmFtKCdzdm5jb21taXQnLCRvcHRzeydtJ30pIGlmICgkb3B0c3snbSd9KTsKKworJHF3LT5tYWdpYygndG9wJyk7CisKK3N1YiBtYWtlX3RvcHMgeworICAgIG15IEB0b3BzOworICAgIGZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwlwdXNoIEB0b3BzLCAKKwkgIHF3X2NoZWNrYm94KCRrLCAiQXBwbHkgdG8gJGsiLCAxLCAwLCAKKwkJICAgICAgZGVmYXVsdCA9PiAkcXctPnF3cGFyYW0oJGspIHx8ICRic3ska30sCisJCSAgICAgIG92ZXJyaWRlID0+IDEpOworICAgIH0KKyAgICByZXR1cm4gQHRvcHM7Cit9CisKK3N1YiBsb2FkX3ByaW1hcmllcyB7CisgICAgbXkgQHRvcHMgPSBtYWtlX3RvcHMoKTsKKyAgICByZXR1cm4KKyAgICAgIHsKKyAgICAgICB0b3AgPT4KKyAgICAgICBxd19wcmltYXJ5KCd0b3AnLCdTZWxlY3QgcGFja2FnZXMgdG8gYXBwbHkgdGhlIHBhdGNoIHRvOicsICcnLCAKKwkJICBbQHRvcHMsCisJCSAgcXdfdGV4dCgnYmFzZWRpcicsICdCYXNlIGNvZGUgZGlyZWN0b3J5OicsIAorCQkJICBkZWZhdWx0ID0+ICRvcHRzeydkJ30pLAorCQkgIHF3X2hpZGRlbignbm9fY29uZmlybScsMSksCisJCSAgcXdfdGV4dCgncGF0Y2hmaWxlJywnUGF0Y2ggZmlsZTonLCBkZWZhdWx0ID0+ICRvcHRze2Z9LAorCQkJIGNoZWNrX3ZhbHVlID0+IHN1YiB7IAorCQkJICAgICByZXR1cm4gInBhdGNoIGZpbGUgZG9lc24ndCBleGlzdCIgaWYgKCEgLWYgcXdwYXJhbSgncGF0Y2hmaWxlJykpCisJCQkgfSksCisJCSAgcXdfY2hlY2tib3goJ25vdXBkYXRlJywnRG9uXCd0IHJ1biBzdm4gdXBkYXRlL3JldmVydCBmaXJzdDonLCAKKwkJCSAgICAgIDEsIDAsIGRlZmF1bHQgPT4gJG9wdHN7J3UnfSB8fCAwKV0sCisJCSAgW10sW10sc3ViX21vZHVsZXMgPT4gWydjb21taXQnLCAnY29tbWl0bXNnJywgJ21ha2V0ZXN0JywKKwkJCQkJJ2VkaXQnLCAnYXBwbHlpbmcnLCAnY2hlY2snLAorCQkJCQkncGF0Y2hfaW5mbyddKSwKKworICAgICAgIHBhdGNoX2luZm8gPT4KKyAgICAgICBxd19wcmltYXJ5KCdjaGVjaycsJ0NoZWNraW5nIGNvZGUgZGlyZWN0b3J5IHN0YXR1czonLCAnJywKKwkJICBbcXdfcGFyYWdyYXBoKCdwYXRjaCBwaWVjZXM6JywKKwkJCQlzdWIgeyBjYXB0dXJlKCJlZ3JlcCAnXigtLS18XFwrXFwrXFwrKScgIiAuIAorCQkJCQkgICAgICBxd3BhcmFtKCdwYXRjaGZpbGUnKSl9LAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiAzMCksCisJCSAgIHF3X3RleHQoJ3BhdGNoYXJncycsJ1BhdGNoIGFyZ3VtZW50cycsCisJCQkgICBkZWZhdWx0ID0+ICRvcHRzeydwJ30pLAorCQkgICBxd190ZXh0KCdzdWJkaXInLCAnQXBwbHkgaW4gcGFja2FnZSBzdWJkaXI6JywKKwkJCSAgIGRlZmF1bHQgPT4gJG9wdHN7J0QnfSksCisJCSAgIHF3X3BhcmFncmFwaCgnTm90ZTonLCdIaXR0aW5nIG5leHQgYmVsb3cgd2lsbCBmaXJzdCBjbGVhbiB5b3VyIGxvY2FsIHJlcG9zaXRvcmllcyB3aGljaCBjb3VsZCB0YWtlIGEgYml0ICh3YXRjaCB0aGUgY29uc29sZSBmb3IgZGVhaWxzIG9uIHdoYXQgaXRcJ3MgZG9pbmcgYXQgYW55IG1vbWVudCknLCBkb2lmID0+IHN1YiB7IXF3cGFyYW0oJ25vdXBkYXRlJyl9KSwKK10pLAorCisKKyAgICAgICBjaGVjayA9PgorICAgICAgIHF3X3ByaW1hcnkoJ2NoZWNrJywnQ2hlY2tpbmcgY29kZSBkaXJlY3Rvcnkgc3RhdHVzOicsICcnLAorCQkgIFtxd19wYXJhZ3JhcGgoJ3JlbW92ZWQgLnJlaiBmaWxlczonLAorCQkJICAgICAgIHN1YiB7IG15ICRpdCA9IGNhcHR1cmVlYWNoZGlyKCdmaW5kIC4gLW5hbWUgXCoucmVqJyk7CisJCQkJICAgICBjYXB0dXJlZWFjaGRpcignZmluZCAuIC1uYW1lIFwqLnJlaiB8IHhhcmdzIHJtIC1mJyk7CisJCQkJICAgICByZXR1cm4gJGl0OworCQkJCSB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiA2MCwKKwkJCSAgICAgICApLAorCQkgICBxd19wYXJhZ3JhcGgoJ3N2biB1cGRhdGU6JywKKwkJCQlzdWIgeworCQkJCSAgICBteSAoJHJlcywgJG9uZSk7CisJCQkJICAgIGZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwkJCQkJbmV4dCBpZiAoIXF3cGFyYW0oJGspKTsKKwkJCQkJJHJlcyAuPSAiJGs6XG4iOworCQkJCQkkb25lID0gY2FwdHVyZWRpcigkY29kZXRyZWVzeyRrfSwgCisJCQkJCQkJICAic3ZuIHVwZGF0ZSIpOworCQkJCQkkcmVzIC49ICRvbmU7CisJCQkJCSRvbmUgPSBjYXB0dXJlZGlyKCRjb2RldHJlZXN7JGt9LCAKKwkJCQkJCQkgICJzdm4gcmV2ZXJ0IC1SIC4iKTsKKwkJCQkJJHJlcyAuPSAkb25lOworCQkJCSAgICB9CisJCQkJICAgIHJldHVybiAkcmVzOworCQkJCSAgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gNjAsCisJCQkJZG9pZiA9PiBzdWJ7IXF3cGFyYW0oJ25vdXBkYXRlJyl9CisJCQkgICAgICAgKQkJICBdLAorCQkgKSwKKworICAgICAgIGFwcGx5aW5nID0+CisgICAgICAgcXdfcHJpbWFyeSgiYXBwbHlpbmciLCAnQXBwbHlpbmcgcGF0Y2hlcyB0byB0aGUgY29kZSBiYXNlcycsICcnLAorCQkgIFt7dHlwZSA9PiAndGFibGUnLAorCQkgICAgdGV4dCA9PiAnUmVzdWx0czonLAorCQkgICAgdmFsdWVzID0+IHN1YiB7CisJCQlteSBAdGFiOworCQkJZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCQkJICAgIG5leHQgaWYgKCFxd3BhcmFtKCRrKSk7CisJCQkgICAgcHVzaCBAdGFiLCBbJGssCisJCQkJCXF3X3BhcmFncmFwaCgiciRrIiwiIiwgCisJCQkJCQkgICAgIHByZWZvcm1hdHRlZCA9PiAxLAorCQkJCQkJICAgICB3aWR0aCA9PiA4MCwKKwkJCQkJCSAgICAgaGVpZ2h0ID0+IDIwLAorCQkJCQkJICAgICB2YWx1ZXMgPT4gCisJCQkJCQkgICAgIHN1YiB7IG15ICRjbWQgPSAicGF0Y2ggIiAuIHF3cGFyYW0oJ3BhdGNoYXJncycpIC4gIiA8ICIgLiBxd3BhcmFtKCdwYXRjaGZpbGUnKTsKKwkJCQkJCQkgICBteSAkcmVzdWx0cyA9ICJSdW5uaW5nIG9uICRrOiAkY21kIiAuICJcbiIgLiBjYXB0dXJlZGlyKCRjb2RldHJlZXN7JGt9LCRjbWQpOworCQkJCQkJCSAgIHJldHVybiAkcmVzdWx0c30pXTsKKwkJCX0KKwkJCXJldHVybiBbXEB0YWJdOworCQkgICAgfX1dLFtdLFtdKSwKKworICAgICAgIGVkaXQgPT4KKyAgICAgICBxd19wcmltYXJ5KCdlZGl0JywnRml4IHRoZSBmb2xsb3dpbmcgZmlsZXM6JywnJywKKwkJICBbcXdfcGFyYWdyYXBoKCdGaXggdGhlc2UgKG1heWJlKTonLAorCQkJICAgICAgIHN1YiB7CisJCQkJICAgJGNhcGZpbHQgPSAnKC4qLnJlaiknOworCQkJCSAgIG15ICRyZXMgPSAKKwkJCQkgICAgIGNhcHR1cmVlYWNoZGlyKCdmaW5kIC4gLW5hbWUgXCoucmVqJyk7CisJCQkJICAgcHJpbnQgRHVtcGVyKFwlY2FwdHVyZXMpOworCQkJCSAgICRjYXBmaWx0ID0gdW5kZWY7CisJCQkJICAgcmV0dXJuICRyZXM7CisJCQkJIH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDYwLAorCQkJICAgICAgICksCisJCSAgIHF3X2xhYmVsKCdmYWlsZWQgZmlsZXM6JywKKwkJCSAgICBzdWIgeyAkY2FwdHVyZW51bSA9IDA7CisJCQkJICBtYXAgeyAkY2FwdHVyZW51bSArPSAkI3skY2FwdHVyZXN7JF99fSArIDE7CisJCQkJICAgIH0gKGtleXMoJWNhcHR1cmVzKSk7CisJCQkJICByZXR1cm4gJGNhcHR1cmVudW07CisJCQkgICAgICB9KSwKKwkJICBxd19jaGVja2JveCgnZWRpdGhlbScsJ09wZW4gYW4gZWRpdG9yIG9uIHRoZSBmYWlsZWQgZmlsZXM/JywKKwkJCSAgICAgIDEsIDAsIGRvaWYgPT4gc3ViIHsgcmV0dXJuICRjYXB0dXJlbnVtID4gMCB9KSwKKwkJICBxd190ZXh0KCdlZGl0b3InLCdFZGl0b3I6JyxkZWZhdWx0ID0+ICRFTlZ7J0VESVRPUid9IHx8ICd2aScsCisJCQkgIGRvaWYgPT4gc3ViIHsgcmV0dXJuICRjYXB0dXJlbnVtID4gMCB9KV0sCisJCSAgW3N1YiB7CisJCSAgICAgICBpZiAocXdwYXJhbSgnZWRpdGhlbScpKSB7CisJCQkgICBmb3JlYWNoIG15ICRrIChrZXlzKCVjYXB0dXJlcykpIHsKKwkJCSAgICAgICBmb3JlYWNoIG15ICRmIChAeyRjYXB0dXJlc3ska319KSB7CisJCQkJICAgbXkgJGZpbGUgPSBxd3BhcmFtKCdiYXNlZGlyJykgLgorCQkJCSAgICAgJGNvZGV0cmVlc3ska30gLgorCQkJCSAgICAgICBxd3BhcmFtKCdzdWJkaXInKSAuICcvJyAuICRmLT5bMF07CisJCQkJICAgcHJpbnQgU1RERVJSICJlZGl0aW5nOiAkZmlsZVxuIjsKKwkJCQkgICBzeXN0ZW0ocXdwYXJhbSgnZWRpdG9yJykgLiAiICIgLiAkZmlsZSk7CisJCQkgICAgICAgfQorCQkJICAgfQorCQkgICAgICAgfQorCQkgICB9XQorCQkgKSwKKworICAgICAgIG1ha2V0ZXN0ID0+CisgICAgICAgcXdfcHJpbWFyeSgibWFrZXRlc3QiLCAiUnVuIG1ha2U/IiwnJywKKwkJIFtxd19jaGVja2JveCgnbWFrZWl0JywnUnVuIG1ha2U/JywgMSwgMCksCisJCSAgcXdfY2hlY2tib3goJ21ha2V0ZXN0JywgJ1J1biBtYWtlIHRlc3Q/JywgMSwgMCkKKwkJIF0sCisgCQkgW3N1YiB7CisgCQkgICAgICBpZiAocXdwYXJhbSgnbWFrZWl0JykgfHwgcXdwYXJhbSgnbWFrZXRlc3QnKSkgeworIAkJCSAgJF9bMF0tPmFkZF90b2RvcygtZWFybHksICdkb21ha2UnKTsKKyAJCSAgICAgIH0KKyAJCSAgfV0KKwkJICksCisKKyAgICAgICBkb21ha2UgPT4KKyAgICAgICBxd19wcmltYXJ5KCJkb21ha2UiLCAiTWFrZSByZXN1bHRzIiwnJywKKwkJICBbcXdfcGFyYWdyYXBoKCdNYWtlIHJlc3VsdHM6JywKKwkJCQlzdWIgeyByZXR1cm4gY2FwdHVyZWVhY2hkaXIoJ21ha2UnKTsgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gMjAsCisJCQkJZG9pZiA9PiBzdWIgeyBxd3BhcmFtKCdtYWtlaXQnKSB9CisJCQkgICAgICAgKSwKKwkJICAgcXdfcGFyYWdyYXBoKCdNYWtlIHRlc3QgcmVzdWx0czonLAorCQkJCXN1YiB7IHJldHVybiBjYXB0dXJlZWFjaGRpcignbWFrZSB0ZXN0Jyk7IH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDIwLAorCQkJCWRvaWYgPT4gc3ViIHsgcXdwYXJhbSgnbWFrZXRlc3QnKSB9CisJCQkgICAgICAgKV0KKwkJICApLAorCisgICAgICAgY29tbWl0bXNnID0+CisgICAgICAgcXdfcHJpbWFyeSgiY29tbWl0bXNnIiwgJ0NvbW1pdCBpbmZvOicsICcnLAorCQkgIFtxd190ZXh0KCdzdm5jb21taXQnLCdDb21taXQgbWVzc2FnZScsCisJCQkgICBkZWZhdWx0ID0+IHF3cGFyYW0oJ3N2bmNvbW1pdCcpIHx8ICRvcHRzeydtJ30pLAorCQkgIHt0eXBlID0+ICdkeW5hbWljJywKKwkJICAgdmFsdWVzID0+IHN1YiB7IG15IEB0b3BzID0gbWFrZV90b3BzKDEpOyByZXR1cm4gXEB0b3BzfX1dKSwKKworICAgICAgIGNvbW1pdCA9PgorICAgICAgIHF3X3ByaW1hcnkoImNvbW1pdCIsICdydW5uaW5nIGNvbW1pdDonLCAnJywKKwkJICBbcXdfcGFyYWdyYXBoKCdjb21taXR0aW5nIGZpbGVzOicsCisJCQkgICAgICAgc3ViIHsgbXkgJG1zZyA9IHF3cGFyYW0oJ3N2bmNvbW1pdCcpOworCQkJCSAgICAgJG1zZyA9fiBzL1wnL1wnXCJcJ1wiXCcvZzsgIyBlc2NhcGUgJ3MKKwkJCQkgICAgIHJldHVybiBjYXB0dXJlZGlyKCRvcHRzeydkJ30sCisJCQkJCQkgICAgICAgJ3N2biBjb21taXQgLW0gXCcnIC4gJG1zZyAuICdcJyAnIC4gZ2V0X2NvZGVkaXJzX3N0cigpKTsgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gMjAsCisJCQkgICAgICAgKV0pLAorCisgICAgICAgZWRpdGluZyA9PgorICAgICAgIHF3X3ByaW1hcnkoImFwcGx5aW5nIiwgJ0VkaXQgdGhlIGZvbGxvd2luZyBmaWxlczonLCAnJywKKwkJICBbe3R5cGUgPT4gJ3RhYmxlJywKKwkJICAgIHRleHQgPT4gJ1Jlc3VsdHM6JywKKwkJICAgIHZhbHVlcyA9PiBzdWIgeyByZXR1cm4gW1xAY2FwdHVyZXNdfSwKKwkJICAgfV0sW10sW10pCisgICAgICB9Cit9CisKK3N1YiBjYXB0dXJlIHsKKyAgICBteSAkY21kID0gam9pbigiICIsQF8pOworICAgIG15ICRyZXN1bHRzID0gIlJ1bm5pbmc6ICRjbWRcbiI7CisgICAgbXkgQGE7CisgICAgcHJpbnQgJHJlc3VsdHM7CisgICAgb3BlbihJLCIkY21kIDI+JjF8Iik7CisgICAgd2hpbGUgKDxJPikgeworCSRyZXN1bHRzIC49ICRfOworCXByaW50ICRfOworCWlmICgkY2FwZmlsdCkgeworCSAgICBwcmludCAiY2FwZmlsdDogJGNhcGZpbHRcbiI7CisJICAgIEBhID0gLyRjYXBmaWx0LzsKKwkgICAgcHJpbnQgIiAgY2FwZmlsdDogQGFcbiI7CisJICAgIHB1c2ggQGNhcHR1cmVzLCBbQGFdOworCX0KKyAgICB9CisgICAgY2xvc2UoSSk7CisgICAgJHJlc3VsdCA9ICQ/ID4+IDg7CisgICAgJHJlc3VsdHMgLj0gIlJFU1VMVDogIiAuICgoJHJlc3VsdCkgPyAiRkFJTCIgOiAiU1VDQ0VTUyIpIC4gIigkcmVzdWx0KVxuIjsKKyAgICByZXR1cm4gJHJlc3VsdHM7Cit9CisKK3N1YiBjYXB0dXJlZGlyIHsKKyAgICBteSAkZGlyID0gc2hpZnQ7CisgICAgJGRpciAuPSAiLyIgaWYgKCRkaXIgIX4gL1wvJC8pOworICAgIG15ICRiYXNlZGlyID0gcXdwYXJhbSgnYmFzZWRpcicpOworICAgICRiYXNlZGlyIC49ICIvIiBpZiAoJGJhc2VkaXIgIX4gL1wvJC8pOworICAgIG15ICRvbGRkaXIgPSBnZXRjd2QoKTsKKyAgICBteSAkbmV3ZGlyID0gIiRiYXNlZGlyJGRpciIgLiBxd3BhcmFtKCdzdWJkaXInKTsKKyAgICBteSAkcmVzID0gImNoYW5naW5nIHRvOiAkbmV3ZGlyXG4iOworICAgIHByaW50ICRyZXM7CisgICAgY2hkaXIoJG5ld2Rpcik7CisgICAgJHJlcyAuPSBjYXB0dXJlKEBfKTsKKyAgICBjaGRpcigkb2xkZGlyKTsKKyAgICByZXR1cm4gJHJlczsKK30KKworc3ViIGdldF9jb2RlZGlyc19zdHIoKSB7CisgICAgbXkgJHJlcyA9ICIiOworICAgIGZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwluZXh0IGlmICghcXdwYXJhbSgkaykpOworCSRyZXMgLj0gIiAkb3B0c3snZCd9JGNvZGV0cmVlc3ska30iOworICAgIH0KKyAgICAkcmVzID1+IHMvXiAvLzsKKyAgICByZXR1cm4gJHJlczsKK30KKworc3ViIGNhcHR1cmVlYWNoZGlyIHsKKyAgICBteSAkb3V0OworICAgICVjYXB0dXJlcyA9ICgpOworICAgIGZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwluZXh0IGlmICghcXdwYXJhbSgkaykpOworCSRvdXQgLj0gIiRrOlxuIjsKKwkkb3V0IC49IGNhcHR1cmVkaXIoJGNvZGV0cmVlc3ska30sIEBfKSAuICJcbiI7CisJaWYgKCQjY2FwdHVyZXMgPiAtMSkgeworCSAgICBAeyRjYXB0dXJlc3ska319ID0gQGNhcHR1cmVzOworCSAgICBAY2FwdHVyZXMgPSAoKTsKKwl9CisgICAgfQorICAgIHJldHVybiAkb3V0OworfQorCitzdWIgZG9kaXIgeworICAgIG15ICR0ZXh0ID0gc2hpZnQ7CisgICAgcmV0dXJuCisgICAgICBbe3R5cGUgPT4gJ3RhYmxlJywKKwl0ZXh0ID0+ICR0ZXh0LAorCXZhbHVlcyA9PiBbW3N1YiB7CisJCQlteSBAdGFiOworCQkJZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCQkJICAgIG5leHQgaWYgKCFxd3BhcmFtKCRrKSk7CisJCQkgICAgcHVzaCBAdGFiLCBbJGssCisJCQkJCXF3X3BhcmFncmFwaCgiciRrIiwiIiwgCisJCQkJCQkgICAgIHByZWZvcm1hdHRlZCA9PiAxLAorCQkJCQkJICAgICB3aWR0aCA9PiA4MCwKKwkJCQkJCSAgICAgaGVpZ2h0ID0+IDIwLAorCQkJCQkJICAgICB2YWx1ZXMgPT4gCisJCQkJCQkgICAgIFtbc3ViIHsgJF8tPlswXSgkayl9LCAKKwkJCQkJCSAgICAgICBAX11dKV07CisJCQl9CisJCQlyZXR1cm4gW1xAdGFiXTsKKwkJICAgIH0sIEBfXV0KKyAgICAgICB9XTsKK30KZGlmZiAtLWdpdCBhL2Rpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwgYi9kaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTZmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsCkBAIC0wLDAgKzEsMzEgQEAKK1VTRSBuZXRfc25tcDsKK0RST1AgVEFCTEUgSUYgRVhJU1RTIG5vdGlmaWNhdGlvbnM7CitDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgbm90aWZpY2F0aW9uc2AgKAorICBgdHJhcF9pZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKKyAgYGRhdGVfdGltZWAgZGF0ZXRpbWUgTk9UIE5VTEwsCisgIGBob3N0YCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCisgIGBhdXRoYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCisgIGB0eXBlYCBFTlVNKCdnZXQnLCdnZXRuZXh0JywncmVzcG9uc2UnLCdzZXQnLCd0cmFwJywnZ2V0YnVsaycsJ2luZm9ybScsJ3RyYXAyJywncmVwb3J0JykgTk9UIE5VTEwsCisgIGB2ZXJzaW9uYCBFTlVNKCd2MScsJ3YyYycsICd1bnN1cHBvcnRlZCh2MnUpJywndjMnKSBOT1QgTlVMTCwKKyAgYHJlcXVlc3RfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCisgIGBzbm1wVHJhcE9JRGAgdmFyY2hhcigxMDI0KSBOT1QgTlVMTCwKKyAgYHRyYW5zcG9ydGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMLAorICBgc2VjdXJpdHlfbW9kZWxgIEVOVU0oJ3NubXBWMScsJ3NubXBWMmMnLCdVU00nKSBOT1QgTlVMTCwKKyAgYHYzbXNnaWRgIGludCgxMSkgdW5zaWduZWQsCisgIGB2M3NlY3VyaXR5X2xldmVsYCBFTlVNKCdub0F1dGhOb1ByaXYnLCdhdXRoTm9Qcml2JywnYXV0aFByaXYnKSwKKyAgYHYzY29udGV4dF9uYW1lYCB2YXJjaGFyKDMyKSwKKyAgYHYzY29udGV4dF9lbmdpbmVgIHZhcmNoYXIoNjQpLAorICBgdjNzZWN1cml0eV9uYW1lYCB2YXJjaGFyKDMyKSwKKyAgYHYzc2VjdXJpdHlfZW5naW5lYCB2YXJjaGFyKDY0KSwKKyAgUFJJTUFSWSBLRVkgIChgdHJhcF9pZGApCispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKworCitEUk9QIFRBQkxFIElGIEVYSVNUUyB2YXJiaW5kczsKK0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGB2YXJiaW5kc2AgKAorICBgdHJhcF9pZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKKyAgYG9pZGAgdmFyY2hhcigxMDI0KSBOT1QgTlVMTCwKKyAgYHR5cGVgIEVOVU0oJ2Jvb2xlYW4nLCdpbnRlZ2VyJywnYml0Jywnb2N0ZXQnLCdudWxsJywnb2lkJywnaXBhZGRyZXNzJywnY291bnRlcicsJ3Vuc2lnbmVkJywndGltZXRpY2tzJywnb3BhcXVlJywndW51c2VkMScsJ2NvdW50ZXI2NCcsJ3VudXNlZDInKSBOT1QgTlVMTCwKKyAgYHZhbHVlYCBibG9iIE5PVCBOVUxMLAorICBLRVkgYHRyYXBfaWRgIChgdHJhcF9pZGApCispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKZGlmZiAtLWdpdCBhL2Rpc3Qvc3ZudXAgYi9kaXN0L3N2bnVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMzUzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L3N2bnVwCkBAIC0wLDAgKzEsMTMwIEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBjdnN1cCAxNTc4OCAyMDA3LTAxLTI0IDEzOjQ5OjM4WiBkdHMxMiAkCisjCitUQUc9CitXTz0wCitERVNUPQorVE1QRElSPS90bXAKKworaWYgWyAieCQxIiA9ICJ4LXUiIF07IHRoZW4KKyAgICBERVNUPSQyCisgICAgc2hpZnQgMgorCisgICAgIyBnbnUgdGFyIChhcyBvZiAxLjE1LjEpIGlzIHVuYWJsZSB0byBjcmVhdGUgcG9ydGFibGUgdGFyIGFyY2hpdmVzLCAKKyAgICAjIGVzcGVjaWFsbHkgaWYgbG9uZyBmaWxlIG5hbWVzICg+MTAwIGNoYXIpIGFyZSBwcmVzZW50LgorICAgICMgc3RhciBpcyBhIGJldHRlciByZXBsYWNlbWVudC4KKyAgICBpZiBbIC14IC91c3IvYmluL3N0YXIgXTsgdGhlbgorICAgICAgICBUQVI9Jy91c3IvYmluL3N0YXIgLUh1c3RhciAtbm90IC1wYXQ9Ki8uc3ZuLyogLWMgLWYnCisgICAgZWxpZiBbIC14IC9iaW4vdGFyIF07IHRoZW4KKyAgICAgICAgVEFSPSIvYmluL3RhciAtLWV4Y2x1ZGU9LnN2biAtYyAtZiIKKyAgICAgICAgZWNobyAid2FybmluZzogc3RhciBub3QgYXZhaWxhYmxlLCB1c2luZyAobGVzcyBwb3J0YWJsZSkgdGFyLi4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAibmVpdGhlciAvdXNyL2Jpbi9zdGFyIG5vciAvYmluL3RhciBmb3VuZC4iCisgICAgICAgIGV4aXQKKyAgICBmaQorZmkKKworaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgICAgRElSPSRQV0QKK2Vsc2UKKyAgICBpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIDx3b3JraW5nIGRpcmVjdG9yeT4iCisgICAgICAgIGV4aXQKKyAgICBmaQorICAgIERJUj0kMQorZmkKKworaWYgWyAteiAke0RJUiMjKi99IF07dGhlbgorICAgRElSPSR7RElSJS8qfQorZmkKK1NVQkQ9JHtESVIjIyovfQorUEFSRU5UPSR7RElSJSokU1VCRH0KKyNlY2hvICIkRElSID0gJFBBUkVOVCArICRTVUJEIgorCitpZiBbICEgLWQgJERJUiBdOyB0aGVuCisgICAgZWNobyAibm8gc3VjaCBkaXJlY3RvcnkgJyRESVInIgorICAgIGV4aXQKK2ZpCisKK2lmIFsgISAtZCAkRElSLy5zdm4gXTsgdGhlbgorICAgIGVjaG8gIickRElSJyBoYXMgbm8gLnN2biBkaXJlY3RvcnkhIgorICAgIGV4aXQKK2ZpCisKK2lmIFsgISAtZiAkRElSLy5zdm4vZW50cmllcyBdOyB0aGVuCisgICAgZWNobyAiJyRESVInIGhhcyBubyAuc3ZuL2VudHJpZXMhIgorICAgIGV4aXQKK2ZpCisKK1NWTlVSTD1gc3ZuIGluZm8gJERJUnwgZ3JlcCBVUkx8Y3V0IC1mMiAtZCAiICJgCitTVk5UTEQ9YGVjaG8gJFNWTlVSTCB8IHNlZCAnczouKnN2bnJvb3QvbmV0LXNubXAvXChbXi9dKlwpLio6XDE6J2AKK2lmIFsgIngkU1ZOVExEIiA9ICJ4dHJ1bmsiIF07IHRoZW4KKyAgIFRBRz0ibWFpbiIKK2Vsc2UKKyAgIFRBRz1gZWNobyAkU1ZOVVJMIHwgc2VkICdzOi4qc3Zucm9vdC9uZXQtc25tcC9bXi9dKi9cKFteL10qXCkuKjpcMTonYAorZmkKKworaWYgWyAhIC16ICRERVNUIF07IHRoZW4KKyAgICBpZiBbIC16ICRUQUcgXTsgdGhlbgorICAgICAgICBlY2hvICJubyBUQUcgZm91bmQgaW4gJERJUiEiCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitDT01NQU5EPSJzdm4gdXBkYXRlIC1xICRTVk5VUkwgJERJUiIKKworaWYgWyAhIC13ICRESVIvLnN2biBdOyB0aGVuCisgICAgaWYgWyAtTyAkRElSLy5zdm4gXTsgdGhlbgorICAgICAgICBXTz0xCisgICAgICAgIGVjaG8gIk1ha2luZyAkRElSIHdyaXRhYmxlIgorICAgICAgICBjaG1vZCAtUiB1K3cgJERJUgorICAgIGZpCitmaQorCitlY2hvICJVcGRhdGluZyBkaXJlY3RvcnkgJERJUiBmcm9tICRUQUcuLi4iCitlY2hvICIkQ09NTUFORCIKKworJENPTU1BTkQKK3JjPSQ/CitpZiBbICRyYyAtbmUgMCBdOyB0aGVuCisgICAgZWNobyAic3ZuIGNvbW1hbmQgcmV0dXJuZWQgJD8iCitmaQorCitpZiBbICRXTyAtZXEgMSBdOyB0aGVuCisgICAgZWNobyAiTWFraW5nICRESVIgcmVhZC1vbmx5IgorICAgIGNobW9kIC1SIGEtdyAkRElSCitmaQorCitpZiBbICEgLXogJERFU1QgXTsgdGhlbgorICBpZiBbICRyYyAtbmUgMCBdOyB0aGVuCisgICAgZWNobyAic2tpcHBpbmcgdXBsb2FkIGR1ZSB0byByYyAkcmMgZnJvbSBzdm4gY29tbWFuZCIKKyAgICBleGl0ICRyYworICBlbHNlCisgICAgY2QgJERJUi8uLgorICAgICNlY2hvICRQV0QKKyAgICBEQVRFPWBkYXRlICslWSVtJWRfJUglTWAKKyAgICBTT1VSQ0U9bmV0LXNubXAtc3ZuLSRUQUciXyREQVRFIgorICAgICRUQVIgJFRNUERJUi8kU09VUkNFLnRhciAkU1VCRAorICAgIHJjPSQ/CisgICAgaWYgWyAkcmMgLW5lIDAgXTsgdGhlbgorICAgICAgZWNobyAic2tpcHBpbmcgdXBsb2FkIGR1ZSB0byByYyAkcmMgZnJvbSB0YXIgY29tbWFuZCIKKyAgICAgIHJtIC1mICRUTVBESVIvJFNPVVJDRS50YXIuZ3oKKyAgICAgIGV4aXQgJHJjCisgICAgZmkKKyAgICBnemlwIC1mIC0tYmVzdCAkVE1QRElSLyRTT1VSQ0UudGFyCisgICAgcmM9JD8KKyAgICBpZiBbICRyYyAtbmUgMCBdOyB0aGVuCisgICAgICBlY2hvICJza2lwcGluZyB1cGxvYWQgZHVlIHRvIHJjICRyYyBmcm9tIGd6aXAgY29tbWFuZCIKKyAgICAgIHJtIC1mICRUTVBESVIvJFNPVVJDRS50YXIuZ3oKKyAgICAgIGV4aXQgJHJjCisgICAgZmkKKyAgICBzY3AgJFRNUERJUi8kU09VUkNFLnRhci5neiAkREVTVAorICAgIHJjPSQ/CisgICAgaWYgWyAkcmMgLW5lIDAgXTsgdGhlbgorICAgICAgZWNobyAid2FybmluZzogcmMgJHJjIGZyb20gc2NwIGNvbW1hbmQgKHRhcmJhbGwgaW4gJFRNUERJUikiCisgICAgZWxzZQorICAgICAgcm0gLWYgJFRNUERJUi8kU09VUkNFLnRhci5negorICAgIGZpCisgIGZpCitmaQpkaWZmIC0tZ2l0IGEvZG94eWdlbi5jb25mIGIvZG94eWdlbi5jb25mCmluZGV4IDllMGVmNDUuLjIwZTQ1N2QgMTAwNjQ0Ci0tLSBhL2RveHlnZW4uY29uZgorKysgYi9kb3h5Z2VuLmNvbmYKQEAgLTIzLDcgKzIzLDcgQEAKICMgVGhpcyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvciAKICMgaWYgc29tZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCiAKLVBST0pFQ1RfTlVNQkVSICAgICAgICAgPSA1LjQuMy5wcmUxCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gJChWRVJTSU9OKQogCiAjIFRoZSBPVVRQVVRfRElSRUNUT1JZIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkgCiAjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuIApAQCAtNTg1LDcgKzU4NSw3IEBACiAjIElmIHRoZSBHRU5FUkFURV9NQU4gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCiAjIGdlbmVyYXRlIG1hbiBwYWdlcwogCi1HRU5FUkFURV9NQU4gICAgICAgICAgID0gWUVTCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KIAogIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuIAogIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAppbmRleCA2OTE1MWE4Li5lYzkzMGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNjEsNiArNjEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfcmVxdWVzdF9pbmZvX3MgKik7CisgICAgICAgIC8qKiBkYXRhIGNsb25lIGhvb2sgZm9yIG15dm9pZAorICAgICAgICAgKiAgZGVlcCBjb3B5IHRoZSBteXZvaWQgbWVtYmVyIC0gZGVmYXVsdCBpcyB0byBjb3B5IHRoZSBwb2ludGVyCisgICAgICAgICAqICBUaGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBpZiBteXZvaWQgIT0gTlVMTAorICAgICAgICAgKiAgbXl2b2lkIGlzIHRoZSBjdXJyZW50IG15dm9pZCBwb2ludGVyLgorICAgICAgICAgKiAgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgKigqZGF0YV9jbG9uZSkodm9pZCAqbXl2b2lkKTsKKyAgICAgICAgLyoqIGRhdGEgZnJlZSBob29rIGZvciBteXZvaWQKKyAgICAgICAgICogIGRlbGV0ZSB0aGUgbXl2b2lkIG1lbWJlciAtIGRlZmF1bHQgaXMgdG8gZG8gbm90aGluZworICAgICAgICAgKiAgVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgaWYgbXl2b2lkICE9IE5VTEwKKyAgICAgICAgICovCiAgICAgICAgIHZvaWQgKCpkYXRhX2ZyZWUpKHZvaWQgKm15dm9pZCk7IC8qKjwgZGF0YSBmcmVlIGhvb2sgZm9yIG15dm9pZCAqLwogCiAgICAgICAgIHN0cnVjdCBuZXRzbm1wX21pYl9oYW5kbGVyX3MgKm5leHQ7CkBAIC0yMDcsMTIgKzIxOCwxMyBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2Rlcyk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oY29uc3QgY2hhciAqbmFtZSwgTmV0c25tcF9Ob2RlX0hhbmRsZXIqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBvaWQgKnJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfYWNjZXNzX21ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZXMpOwogCiAgICAgbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGUKICAgICAgICAgKm5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZShuZXRzbm1wX21pYl9oYW5kbGVyICosCkBAIC0yMzEsNiArMjQzLDggQEAKICAgICB2b2lkCiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSk7CisgICAgaW50IG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKIAogICAgIGludAogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAppbmRleCBlOWFmODlkLi5lNmIzNTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCkBAIC0xMSwxMiArMTEsMTcgQEAKIAogICAgIHZvaWQgICAgICAgICAgICBpbml0X2FnZW50X3JlYWRfY29uZmlnKGNvbnN0IGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHVwZGF0ZV9jb25maWcodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiwKKyAgICB2b2lkICAgICAgICAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlbHApOworICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGNvbnN0IGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAppbmRleCBlOWUyODQ1Li4yOTQ5YzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCkBAIC0zNSwxOCArMzUsMjAgQEAKIH07CiAKIHN0cnVjdCByZWdpc3Rlcl9wYXJhbWV0ZXJzIHsKLSAgICBvaWQgICAgICAgICAgICAqbmFtZTsKLSAgICBzaXplX3QgICAgICAgICAgbmFtZWxlbjsKLSAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7Ci0gICAgaW50ICAgICAgICAgICAgIHJhbmdlX3N1YmlkOwotICAgIG9pZCAgICAgICAgICAgICByYW5nZV91Ym91bmQ7Ci0gICAgaW50ICAgICAgICAgICAgIHRpbWVvdXQ7Ci0gICAgdV9jaGFyICAgICAgICAgIGZsYWdzOwotICAgIGNvbnN0IGNoYXIgICAgICpjb250ZXh0TmFtZTsKKyAgICBvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVsZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Vfc3ViaWQ7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VfdWJvdW5kOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAqY29udGV4dE5hbWU7CisgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICAgICAgICAqc2Vzc2lvbjsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3Qgc3VidHJlZV9jb250ZXh0X2NhY2hlX3MgewotICAgIGNoYXIJCQkJKmNvbnRleHRfbmFtZTsKKyAgICBjb25zdCBjaGFyCQkJCSpjb250ZXh0X25hbWU7CiAgICAgc3RydWN0IG5ldHNubXBfc3VidHJlZV9zCQkqZmlyc3Rfc3VidHJlZTsKICAgICBzdHJ1Y3Qgc3VidHJlZV9jb250ZXh0X2NhY2hlX3MJKm5leHQ7CiB9IHN1YnRyZWVfY29udGV4dF9jYWNoZTsKQEAgLTU3LDE4ICs1OSwyMSBAQAogdm9pZCAgICAgICAgICAgICBzaHV0ZG93bl90cmVlICAgICh2b2lkKTsKIAogCi1uZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kCSAgKG9pZCAqLCBzaXplX3QsIG5ldHNubXBfc3VidHJlZSAqLAorbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZAkgIChjb25zdCBvaWQgKiwgc2l6ZV90LAorCQkJCQkgICBuZXRzbm1wX3N1YnRyZWUgKiwKIAkJCQkJICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKTsKIAotbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0KG9pZCAqLCBzaXplX3QsIG5ldHNubXBfc3VidHJlZSAqLAorbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0KGNvbnN0IG9pZCAqLCBzaXplX3QsCisJCQkJCSAgIG5ldHNubXBfc3VidHJlZSAqLAogCQkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpOwogCi1uZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYob2lkICosIHNpemVfdCxuZXRzbm1wX3N1YnRyZWUgKiwKK25ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihjb25zdCBvaWQgKiwgc2l6ZV90LAorCQkJCQkgICBuZXRzbm1wX3N1YnRyZWUgKiwKIAkJCQkJICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKTsKIAogbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb25zdCBjaGFyICpjb250ZXh0X25hbWUpOwogCi1uZXRzbm1wX3Nlc3Npb24gKmdldF9zZXNzaW9uX2Zvcl9vaWQJICAgKG9pZCAqLCBzaXplX3QsIAorbmV0c25tcF9zZXNzaW9uICpnZXRfc2Vzc2lvbl9mb3Jfb2lkCSAgIChjb25zdCBvaWQgKiwgc2l6ZV90LCAKIAkJCQkJICAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSk7CiAKIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqZ2V0X3RvcF9jb250ZXh0X2NhY2hlKHZvaWQpOwpAQCAtODQsMjUgKzg5LDMyIEBACiAjZGVmaW5lIE1JQl9VTlJFR0lTVFJBVElPTl9GQUlMRUQJLTIKICNkZWZpbmUgREVGQVVMVF9NSUJfUFJJT1JJVFkJCTEyNwogCi1pbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliCQkgICAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdmFyaWFibGUgKiwKLQkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90KTsKK2ludCAgICAgICAgICAgICByZWdpc3Rlcl9taWIJCSAgIChjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqLAorCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIGNvbnN0IG9pZCAqLAorCQkJCQkgICAgc2l6ZV90KTsKIAotaW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9wcmlvcml0eQkgICAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdmFyaWFibGUgKiwKLQkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90LAoraW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9wcmlvcml0eQkgICAoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKiwKKwkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBjb25zdCBvaWQgKiwgc2l6ZV90LAogCQkJCQkgICAgaW50KTsKIAotaW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9yYW5nZQkgICAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdmFyaWFibGUgKiwKLQkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90LCAKLQkJCQkJICAgIGludCwgaW50LCBvaWQsIG5ldHNubXBfc2Vzc2lvbiAqKTsKK2ludCAgICAgICAgICAgICByZWdpc3Rlcl9taWJfcmFuZ2UJICAgKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICosCisJCQkJCSAgICBzaXplX3QsIHNpemVfdCwgY29uc3Qgb2lkICosCisJCQkJCSAgICBzaXplX3QsIGludCwgaW50LCBvaWQsCisJCQkJCSAgICBuZXRzbm1wX3Nlc3Npb24gKik7CiAKLWludAkJcmVnaXN0ZXJfbWliX2NvbnRleHQJICAgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHZhcmlhYmxlICosCi0JCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosIHNpemVfdCwKK2ludAkJcmVnaXN0ZXJfbWliX2NvbnRleHQJICAgKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICosCisJCQkJCSAgICBzaXplX3QsIHNpemVfdCwgY29uc3Qgb2lkICosIHNpemVfdCwKIAkJCQkJICAgIGludCwgaW50LCBvaWQsIG5ldHNubXBfc2Vzc2lvbiAqLAogCQkJCQkgICAgY29uc3QgY2hhciAqLCBpbnQsIGludCk7CiAKLWludAluZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3cJICAgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHZhcmlhYmxlICosCi0JCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosIHNpemVfdCwgCi0JCQkJCSAgICBpbnQsIGludCwgbmV0c25tcF9zZXNzaW9uICosCitpbnQJbmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93CSAgIChjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqLAorCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLAorCQkJCQkgICAgc2l6ZV90LCBpbnQsIGludCwgbmV0c25tcF9zZXNzaW9uICosCiAJCQkJCSAgICBjb25zdCBjaGFyICosIGludCwgaW50KTsKIAogaW50CQl1bnJlZ2lzdGVyX21pYgkJICAgKG9pZCAqLCBzaXplX3QpOwpAQCAtMTM3LDEwICsxNDksMTIgQEAKICAqICAgICAgICAgIChzaXplb2YodGhlb2lkKSAqbXVzdCogcmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMhKSAKICAqLwogCi0jZGVmaW5lIFJFR0lTVEVSX01JQihkZXNjciwgdmFyLCB2YXJ0eXBlLCB0aGVvaWQpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHJlZ2lzdGVyX21pYihkZXNjciwgKHN0cnVjdCB2YXJpYWJsZSAqKSB2YXIsIHNpemVvZihzdHJ1Y3QgdmFydHlwZSksIFwKLSAgICAgICAgICAgICAgIHNpemVvZih2YXIpL3NpemVvZihzdHJ1Y3QgdmFydHlwZSksICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgdGhlb2lkLCBzaXplb2YodGhlb2lkKS9zaXplb2Yob2lkKSkgIT0gTUlCX1JFR0lTVEVSRURfT0sgKSBcCisjZGVmaW5lIFJFR0lTVEVSX01JQihkZXNjciwgdmFyLCB2YXJ0eXBlLCB0aGVvaWQpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHJlZ2lzdGVyX21pYihkZXNjciwgKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqKSB2YXIsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZhcnR5cGUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmFyKS9zaXplb2Yoc3RydWN0IHZhcnR5cGUpLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICB0aGVvaWQsIHNpemVvZih0aGVvaWQpL3NpemVvZihvaWQpKSAhPSAgICAgICAgICAgICBcCisgICAgICAgIE1JQl9SRUdJU1RFUkVEX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJREVCVUdNU0dUTCgoInJlZ2lzdGVyX21pYiIsICIlcyByZWdpc3RyYXRpb24gZmFpbGVkXG4iLCBkZXNjcikpOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyNmU0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgQUdFTlRfU1lTT1JUQUJMRV9ICisjZGVmaW5lIEFHRU5UX1NZU09SVEFCTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKK3N0cnVjdCBzeXNPUlRhYmxlOworCitleHRlcm4gdm9pZCAgICAgaW5pdF9hZ2VudF9zeXNPUlRhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgICAgIHNodXRkb3duX2FnZW50X3N5c09SVGFibGUodm9pZCk7CisKK2V4dGVybiB2b2lkICAgICBuZXRzbm1wX3N5c09SVGFibGVfZm9yZWFjaCh2b2lkICgqKShjb25zdCBzdHJ1Y3Qgc3lzT1JUYWJsZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKTsKKworZXh0ZXJuIGludCAgICAgIHJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICopOworZXh0ZXJuIGludCAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqLCBzaXplX3QsIG5ldHNubXBfc2Vzc2lvbiAqKTsKK2V4dGVybiB2b2lkICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBBR0VOVF9TWVNPUlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKaW5kZXggZWJjMmIwNi4uMjZlMjIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKQEAgLTE0LDE2ICsxNCwyMCBAQAogdm9pZCAgICAgICAgICAgIHNlbmRfZWFzeV90cmFwKGludCwgaW50KTsKIHZvaWQgICAgICAgICAgICBzZW5kX3RyYXBfcGR1KG5ldHNubXBfcGR1ICopOwogdm9pZCAgICAgICAgICAgIHNlbmRfdjJ0cmFwKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsKK3ZvaWQgICAgICAgICAgICBzZW5kX3YzdHJhcChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsIGNvbnN0IGNoYXIgKmNvbnRleHQpOwogdm9pZCAgICAgICAgICAgIHNlbmRfdHJhcF92YXJzKGludCwgaW50LCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7Cit2b2lkICAgICAgICAgICAgc2VuZF90cmFwX3ZhcnNfd2l0aF9jb250ZXh0KGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHQpOwogdm9pZCAgICAgICAgICAgIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMoaW50IHRyYXAsIGludCBzcGVjaWZpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGVudGVycHJpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBlbnRlcnByaXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudGVycHJpc2VfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFycyk7CiBpbnQgICAgICAgICAgICAgbmV0c25tcF9zZW5kX3RyYXBzKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBuZXh0IHR3byBhcmUgY3VycmVudGx5IHVudXNlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogY29udGV4dCwgaW50IGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgYXJlIGN1cnJlbnRseSB1bnVzZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnRleHQsIGludCBmbGFncyk7CiB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX2F1dGh0cmFwKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNpbmsoY29uc3QgY2hhciAqLCBjaGFyICopOwogdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190cmFwMnNpbmsoY29uc3QgY2hhciAqLCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCmluZGV4IDI3ZTU4MGUuLmQwZDVjMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oPiAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21mZC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oPgogCiAKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2luaXRfaGVscGVycyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKaW5kZXggNmExYThiOS4uZDI1NjU1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgQkFCWV9TVEVQX05PTkUgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEJBQllfU1RFUF9QUkVfUkVRVUVTVCAgICAgICAgICAgKDB4MSA8PCAgMSkKICNkZWZpbmUgQkFCWV9TVEVQX09CSkVDVF9MT09LVVAgICAgICAgICAoMHgxIDw8ICAyKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgQkFCWV9TVEVQX0NIRUNLX1ZBTFVFICAgICAgICAgICAoMHgxIDw8ICAzKQogI2RlZmluZSBCQUJZX1NURVBfUk9XX0NSRUFURSAgICAgICAgICAgICgweDEgPDwgIDQpCiAjZGVmaW5lIEJBQllfU1RFUF9VTkRPX1NFVFVQICAgICAgICAgICAgKDB4MSA8PCAgNSkKQEAgLTI2LDE0ICsyNywxNyBAQAogI2RlZmluZSBCQUJZX1NURVBfVU5ET19DT01NSVQgICAgICAgICAgICgweDEgPDwgMTApCiAjZGVmaW5lIEJBQllfU1RFUF9JUlJFVkVSU0lCTEVfQ09NTUlUICAgKDB4MSA8PCAxMSkKICNkZWZpbmUgQkFCWV9TVEVQX1VORE9fQ0xFQU5VUCAgICAgICAgICAoMHgxIDw8IDEyKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2RlZmluZSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUICAgICAgICAgICgweDEgPDwgMTMpCiAKICNkZWZpbmUgQkFCWV9TVEVQX0FMTCAgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZikKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUICAgICAgICAgIEJBQllfU1RFUF9DSEVDS19WQUxVRQogI2RlZmluZSBCQUJZX1NURVBfU0VUX1ZBTFVFUyAgICAgICAgICAgIEJBQllfU1RFUF9TRVRfVkFMVUUKICNkZWZpbmUgQkFCWV9TVEVQX1VORE9fU0VUUyAgICAgICAgICAgICBCQUJZX1NURVBfVU5ET19TRVQKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoqIEBuYW1lIGJhYnlfc3RlcHMKICAqCkBAIC00Myw2ICs0Nyw4IEBACiAgKiAgQHsgKi8KIAogICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfYmFieV9zdGVwc19tb2Rlc19zIHsKKyAgICAgICAvKiogTnVtYmVyIG9mIGhhbmRsZXJzIHdob3NlIG15dm9pZCBwb2ludGVyIHBvaW50cyBhdCB0aGlzIG9iamVjdC4gKi8KKyAgICAgICBpbnQgICAgICAgICByZWZjbnQ7CiAgICAgICAgdV9pbnQgICAgICAgcmVnaXN0ZXJlZDsKICAgICAgICB1X2ludCAgICAgICBjb21wbGV0ZWQ7CiAgICAgfSBuZXRzbm1wX2JhYnlfc3RlcHNfbW9kZXM7CkBAIC03NCw2ICs4MCw3IEBACiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqcHJlX3JlcXVlc3Q7CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqb2JqZWN0X2xvb2t1cDsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpnZXRfdmFsdWVzOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpvYmplY3Rfc3ludGF4X2NoZWNrczsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpyb3dfY3JlYXRpb247CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqdW5kb19zZXR1cDsKQEAgLTg0LDYgKzkxLDcgQEAKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICp1bmRvX2NsZWFudXA7CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqdW5kb19jb21taXQ7CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqaXJyZXZlcnNpYmxlX2NvbW1pdDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpwb3N0X3JlcXVlc3Q7CiAKICAgIHZvaWQgICAgICAgICAgICAgICAgICpteV9hY2Nlc3Nfdm9pZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKaW5kZXggZTVhYzY1My4uMWU0NzUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKQEAgLTEsMyArMSwxMyBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAjaWZuZGVmIE5FVFNOTVBfQ0FDSEVfSEFORExFUl9ICiAjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfSEFORExFUl9ICiAKQEAgLTIyLDYgKzMyLDggQEAKICAgICB0eXBlZGVmIHZvaWQgKE5ldHNubXBDYWNoZUZyZWUpKG5ldHNubXBfY2FjaGUgKiwgdm9pZCopOwogCiAgICAgc3RydWN0IG5ldHNubXBfY2FjaGVfcyB7CisJLyoqIE51bWJlciBvZiBoYW5kbGVycyB3aG9zZSBteXZvaWQgbWVtYmVyIHBvaW50cyBhdCB0aGlzIHN0cnVjdHVyZS4gKi8KKwlpbnQgICAgICByZWZjbnQ7CiAgICAgICAgIC8qCiAJICogRm9yIG9wZXJhdGlvbiBvZiB0aGUgZGF0YSBjYWNoZXMKIAkgKi8KQEAgLTMwLDcgKzQyLDcgQEAKICAgICAgICAgaW50ICAgICAgdmFsaWQ7CiAgICAgICAgIGNoYXIgICAgIGV4cGlyZWQ7CiAgICAgICAgIGludCAgICAgIHRpbWVvdXQ7CS8qIExlbmd0aCBvZiB0aW1lIHRoZSBjYWNoZSBpcyB2YWxpZCAoaW4gcykgKi8KLSAgICAgICAgbWFya2VyX3QgdGltZXN0YW1wOwkvKiBXaGVuIHRoZSBjYWNoZSB3YXMgbGFzdCBsb2FkZWQgKi8KKyAgICAgICAgbWFya2VyX3QgdGltZXN0YW1wTTsJLyogV2hlbiB0aGUgY2FjaGUgd2FzIGxhc3QgbG9hZGVkICovCiAgICAgICAgIHVfbG9uZyAgIHRpbWVyX2lkOyAgICAgIC8qIHBlcmlvZGljIHRpbWVyIGlkICovCiAKICAgICAgICAgTmV0c25tcENhY2hlTG9hZCAqbG9hZF9jYWNoZTsKQEAgLTc0LDcgKzg2LDcgQEAKICAgICBpbnQgICAgICAgICAgICBuZXRzbm1wX2lzX2NhY2hlX3ZhbGlkKCAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqKTsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyKGludCwgTmV0c25tcENhY2hlTG9hZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQ2FjaGVGcmVlICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCosIGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCosIGludCk7CiAgICAgaW50ICAgbmV0c25tcF9yZWdpc3Rlcl9jYWNoZV9oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgTmV0c25tcENhY2hlTG9hZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBDYWNoZUZyZWUgKik7CkBAIC04NCwxMSArOTYsMTUgQEAKICAgICBuZXRzbm1wX2NhY2hlICoKICAgICBuZXRzbm1wX2NhY2hlX2NyZWF0ZShpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQ2FjaGVGcmVlICogZnJlZV9ob29rLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKTsKKyAgICBpbnQgbmV0c25tcF9jYWNoZV9yZW1vdmUobmV0c25tcF9jYWNoZSAqY2FjaGUpOworICAgIGludCBuZXRzbm1wX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUpOworCiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqCiAgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChuZXRzbm1wX2NhY2hlKiBjYWNoZSk7CisgICAgdm9pZCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKTsKIAotICAgIG5ldHNubXBfY2FjaGUgKiBuZXRzbm1wX2NhY2hlX2ZpbmRfYnlfb2lkKG9pZCAqIHJvb3RvaWQsCisgICAgbmV0c25tcF9jYWNoZSAqIG5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQoY29uc3Qgb2lkICogcm9vdG9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdG9pZF9sZW4pOwogCiAgICAgdW5zaWduZWQgaW50IG5ldHNubXBfY2FjaGVfdGltZXJfc3RhcnQobmV0c25tcF9jYWNoZSAqY2FjaGUpOwpAQCAtMTAzLDYgKzExOSw3IEBACiAjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UgICAgICAgICAgICAgICAgICAgICAweDAwMDgKICNkZWZpbmUgTkVUU05NUF9DQUNIRV9QUkVMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAogI2RlZmluZSBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfUkVTRVRfVElNRVJfT05fVVNFICAgICAgICAgICAgICAgICAgICAweDAwNDAKIAogI2RlZmluZSBORVRTTk1QX0NBQ0hFX0hJTlRfSEFORExFUl9BUkdTICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAppbmRleCBhYWJiNzkyLi5mNmY2MzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCkBAIC0yNywxMCArMjcsMTggQEAKICNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9ET05UX0xPR19UQ1BXUkFQUEVSU19DT05ORUNUUyAxMiAgIC8qIDEgPSBkaXNhYmxlIGxvZ2dpbmcgKi8KICNkZWZpbmUgTkVUU05NUF9EU19BUFBfRE9OVF9MT0cgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RPTlRfUkVUQUlOX05PVElGSUNBVElPTlMgLyogY29tcGF0ICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUyAgICAxMyAgIC8qIDEgPSBkb24ndCBzdG9yZSBORlMgZW50cmllcyBpbiBoclN0b3JhZ2VUYWJsZSAqLworI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMgMTQgICAgLyogMSA9IHVzZSByZWFsIGFsbG9jYXRpb24gdW5pdHMgaW4gaHJTdG9yYWdlVGFibGUsIDAgPSByZWNhbGN1bGF0ZSBpdCB0byBmaXQgMzJiaXRzICovCiAKLS8qIFdBUk5JTkc6IFRoZSB0cmFwIHJlY2VpdmVyIHVzZXMgRFMgZmxhZ3MgYW5kIG11c3Qgbm90IGNvbmZsaWN0IHdpdGgKLSAgIHRoZXNlISAgSWYgeW91IHVzZSBhIHZhbHVlIGFib3ZlIDE1LCBjaGFuZ2UgdGhlIG1pbmltaW11bSBEUyBib29sCi0gICB2YWx1ZSBpbiBzbm1wdHJhcGRfbG9nLmggKi8KKyAgIC8qIFJlcGVhdGVkIGZyb20gImFwcHMvc25tcHRyYXBkX2RzLmgiICovCisjZGVmaW5lIE5FVFNOTVBfRFNfQVBQX05VTUVSSUNfSVAgICAgICAgMTYKKyNkZWZpbmUgTkVUU05NUF9EU19BUFBfTk9fQVVUSE9SSVpBVElPTiAxNworCisjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0ZEICAgMTggICAgICAvKiAxID0gZG9uJ3QgcmVwb3J0IC9kZXYvZmQqICAgZW50cmllcyBpbiBkaXNrSU9UYWJsZSAqLworI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19MT09QIDE5ICAgICAgLyogMSA9IGRvbid0IHJlcG9ydCAvZGV2L2xvb3AqIGVudHJpZXMgaW4gZGlza0lPVGFibGUgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fUkFNICAyMCAgICAgIC8qIDEgPSBkb24ndCByZXBvcnQgL2Rldi9yYW0qICBlbnRyaWVzIGluIGRpc2tJT1RhYmxlICovCisKKy8qIFdBUk5JTkc6IFRoZSB0cmFwIHJlY2VpdmVyIGFsc28gdXNlcyBEUyBmbGFncyBhbmQgbXVzdCBub3QgY29uZmxpY3Qgd2l0aCB0aGVzZSEKKyAqIElmIHlvdSBkZWZpbmUgYWRkaXRpb25hbCBib29sZWFuIGVudHJpZXMsIGNoZWNrIGluICJhcHBzL3NubXB0cmFwZF9kcy5oIiBmaXJzdCAqLwogCiAvKgogICogc3RyaW5ncyAKQEAgLTQyLDYgKzUwLDcgQEAKICNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9QRVJMX0lOSVRfRklMRSAgICA0ICAgIC8qIHVzZWQgYnkgZW1iZWRkZWQgcGVybCAqLwogI2RlZmluZSBORVRTTk1QX0RTX1NNVVhfU09DS0VUICAgIDUgICAgIC8qIGlwOnBvcnQgc29ja2V0IGFkZHIgKi8KICNkZWZpbmUgTkVUU05NUF9EU19OT1RJRl9MT0dfQ1RYICA2ICAgICAvKiAiIiB8ICJzbm1wdHJhcGQiICovCisjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfVFJBUF9BRERSICAgICAgNyAgICAgLyogdXNlZCBhcyB2MSB0cmFwIGFnZW50IGFkZHJlc3MgKi8KIAogLyoKICAqIGludGVnZXJzIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKaW5kZXggNjI2ODg5Ny4uZjZlNDNlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCkBAIC0zMyw2ICszMyw5IEBACiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBrZXJuX3RpY2tzOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50cnB0X3RpY2tzOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2lycV90aWNrczsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0ZWFsX3RpY2tzOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ3Vlc3RfdGlja3M7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBndWVzdG5pY2VfdGlja3M7CiAKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3RpY2tzOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3lzMl90aWNrczsgIC8qIEZvciBub24tYXRvbWljIHN5c3RlbSBjb3VudHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlOGUxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oCkBAIC0wLDAgKzEsMTA5IEBACit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2ZzeXNfaW5mb19zIG5ldHNubXBfZnN5c19pbmZvOworCisjZGVmaW5lIF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQgICAweDIwMDAKKyNkZWZpbmUgX05FVFNOTVBfRlNfVFlQRV9MT0NBTCAgICAgIDB4MTAwMAorCisgICAvKgorICAgICogRW51bWVyYXRpb24gZnJvbSBIT1NULVJFU09VUkNFUy1UWVBFUyBtaWIKKyAgICAqLworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfT1RIRVIJICAgMQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTgkgICAyCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWSAgIDMKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1NZU1YJICAgNAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfRkFUCSAgIDUKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0hQRlMJICAgNgorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfSEZTCSAgIDcKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX01GUwkgICA4CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9OVEZTCSAgIDkKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1ZOT0RFCSAgIDEwCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9KRlMJICAgMTEKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0lTTzk2NjAJICAgMTIKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1JPQ0tSSURHRSAgMTMKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX05GUwkgICAxNAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfTkVUV0FSRQkgICAxNQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfQUZTCSAgIDE2CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ERlMJICAgMTcKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0FQUExFU0hBUkUgMTgKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1JGUwkgICAxOQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfREdDUwkgICAyMAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfQk9PVEZTCSAgIDIxCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9GQVQzMgkgICAyMgorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfRVhUMgkgICAyMworCisgICAvKgorICAgICogQWRkaXRpb25hbCBlbnVtZXJhdGlvbmlzIC0gbm90IGxpc3RlZCBpbiB0aGF0IE1JQgorICAgICovCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9JR05PUkUJICAgMSB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgfCBfTkVUU05NUF9GU19UWVBFX1NLSVBfQklUCisKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1BST0MJICAgMiB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgfCBfTkVUU05NUF9GU19UWVBFX1NLSVBfQklUCisKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0RFVlBUUwkgICAzIHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTCB8IF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1NZU0ZTCSAgIDQgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMIHwgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfVE1QRlMJICAgNSB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1VTQkZTCSAgIDYgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMCisKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX0FDVElWRSAgIDB4MDEKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX1JFTU9URSAgIDB4MDIKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX1JPTkxZICAgIDB4MDQKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFIDB4MDgKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX1JFTU9WRSAgIDB4MTAKKyNkZWZpbmUgTkVUU05NUF9GU19GTEFHX1VDRCAgICAgIDB4MjAKKworI2RlZmluZSBORVRTTk1QX0ZTX0ZJTkRfQ1JFQVRFICAgICAxICAgLyogb3IgdXNlIG9uZSBvZiB0aGUgdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9GU19GSU5EX0VYSVNUICAgICAgMAorCitzdHJ1Y3QgbmV0c25tcF9mc3lzX2luZm9fcyB7CisgICAgIG5ldHNubXBfaW5kZXggIGlkeDsKKyAgLyogaW50ICBpZHg7ICovCisgCisgICAgIGNoYXIgcGF0aFsgIFNOTVBfTUFYUEFUSCsxXTsKKyAgICAgY2hhciBkZXZpY2VbU05NUF9NQVhQQVRIKzFdOworICAgICBpbnQgIHR5cGU7CisKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VkOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXZhaWw7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bml0czsKKworICAgICAvKiBhcnRpZmljaWFsbHkgY29tcHV0ZWQgdmFsdWVzLCBib3RoICdzaXplXzMyJyBhbmQgJ3VuaXRzXzMyJyBmaXQgSU5UMzIgKi8KKyAgICAgdW5zaWduZWQgbG9uZyBzaXplXzMyOworICAgICB1bnNpZ25lZCBsb25nIHVzZWRfMzI7CisgICAgIHVuc2lnbmVkIGxvbmcgYXZhaWxfMzI7CisgICAgIHVuc2lnbmVkIGxvbmcgdW5pdHNfMzI7CisKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludW1zX3RvdGFsOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW51bXNfYXZhaWw7CisKKyAgICAgaW50ICBtaW5zcGFjZTsKKyAgICAgaW50ICBtaW5wZXJjZW50OworCisgICAgIGxvbmcgZmxhZ3M7CisKKyAgICAgbmV0c25tcF9mc3lzX2luZm8gKm5leHQ7Cit9OworCisKKyAgICAvKgorICAgICAqIFBvc3NpYmx5IG5vdCBhbGwgbmVlZGVkID8/CisgICAgICovCituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9maXJzdCggdm9pZCApOworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfbmV4dCggbmV0c25tcF9mc3lzX2luZm8qICk7CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9ieUlkeCggIGludCwgICBpbnQgKTsKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfZ2V0X25leHRfYnlJZHgoaW50LGludCApOworCituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2J5X2RldmljZSggIGNoYXIqLCBpbnQgKTsKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfYnlfcGF0aCggICAgY2hhciosIGludCApOworCituZXRzbm1wX2NhY2hlICpuZXRzbm1wX2ZzeXNfZ2V0X2NhY2hlKCB2b2lkICk7CitpbnQgIG5ldHNubXBfZnN5c19sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqZGF0YSApOwordm9pZCBuZXRzbm1wX2ZzeXNfZnJlZSggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKTsKKworaW50IG5ldHNubXBfZnN5c19zaXplKCBuZXRzbm1wX2ZzeXNfaW5mbyogKTsKK2ludCBuZXRzbm1wX2ZzeXNfdXNlZCggbmV0c25tcF9mc3lzX2luZm8qICk7CitpbnQgbmV0c25tcF9mc3lzX2F2YWlsKG5ldHNubXBfZnN5c19pbmZvKiApOworCit1bnNpZ25lZCBsb25nIGxvbmcgbmV0c25tcF9mc3lzX3NpemVfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyogKTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoIG5ldHNubXBfZnN5c19pbmZvKiApOwordW5zaWduZWQgbG9uZyBsb25nIG5ldHNubXBfZnN5c19hdmFpbF91bGwobmV0c25tcF9mc3lzX2luZm8qICk7CisKK3ZvaWQgbmV0c25tcF9mc3lzX2NhbGN1bGF0ZTMyKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWVjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgLSBTZW5zb3JzIG1vZHVsZQorICoKKyAqIFB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIgICAgICAgMQorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfQUMgIDMKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICA0CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfQ1VSUkVOVCAgICAgNQorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1BPV0VSICAgICAgIDYKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9GUkVRVUVOQ1kgICA3CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgOAorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX0hVTUlESVRZICAgIDkKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9SUE0gICAgICAgIDEwCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVU1FICAgICAxMQorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX0JPT0xFQU4gICAgMTIKKworCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFICAgICAweDAxCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZMQUdfTkFWQUlMICAgICAweDAyCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZMQUdfQlJPS0VOICAgICAweDA0CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZMQUdfRElTQUJMRSAgICAweDA4CisKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfTUFTS19TVEFUVVMgICAgIDB4MDYgIC8qIE5BVkFJTHxCUk9LRU4gKi8KKworCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZJTkRfQ1JFQVRFICAgICAxICAgLyogb3IgdXNlIG9uZSBvZiB0aGUgc2Vuc29yIHR5cGUgdmFsdWVzICovCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX0ZJTkRfRVhJU1QgICAgICAwCisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfc2Vuc29yX2luZm9fcyBuZXRzbm1wX3NlbnNvcl9pbmZvOworc3RydWN0IG5ldHNubXBfc2Vuc29yX2luZm9fcyB7CisKKyAgICBuZXRzbm1wX2luZGV4ICBpZHg7CisgICAgLyogaW50ICBpZHg7ICovCisgICAgY2hhciAgbmFtZVsyNTZdOworICAgIAorICAgIGludCAgIHR5cGU7CisgICAgZmxvYXQgdmFsdWU7CisgICAgY2hhciAgZGVzY3JbMjU2XTsKKyAgICBsb25nICBmbGFnczsKK307CisKK25ldHNubXBfY29udGFpbmVyICAgKmdldF9zZW5zb3JfY29udGFpbmVyKCB2b2lkICk7CituZXRzbm1wX2NhY2hlICAgICAgICpnZXRfc2Vuc29yX2NhY2hlKCB2b2lkICk7CituZXRzbm1wX3NlbnNvcl9pbmZvICpzZW5zb3JfYnlfbmFtZSggY29uc3QgY2hhciAqLCBpbnQgKTsKK05ldHNubXBDYWNoZUxvYWQgICAgIG5ldHNubXBfc2Vuc29yX2xvYWQ7CitOZXRzbm1wQ2FjaGVGcmVlICAgICBuZXRzbm1wX3NlbnNvcl9mcmVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCmluZGV4IDBhMDJjMjEuLjgyZjJlZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKQEAgLTIwLDggKzIwLDkgQEAKICAqICogaGF2ZSB0byBjaGVjayB0aGUgb2lkIGF0IGFsbC4gIEp1c3QgYW5zd2VyLgogICovCiAKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICogcmVnaW5mbyk7CisKIGludCAgICAgICAgICAgIAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbyk7CiAKQEAgLTI5LDExMSArMzAsMTAzIEBACiAKIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X2luc3RhbmNlX2hhbmRsZXIodm9pZCk7CiAKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIpOwotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpOwotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZShjb25zdCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpOwotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyKTsKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIAotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIAotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiAKIC8qIGlkZW50aWNhbCBmdW5jdGlvbnMgdGhhdCByZWdpc3RlciBhIGluIGEgcGFydGljdWxhciBjb250ZXh0ICovCi1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKLWludCAgbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKLWludCAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAoraW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKLWludCAgbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKIAotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CiAKLWludCAgbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwogCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbnVtX2ZpbGVfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKQEAgLTE0MywxMSArMTM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwogCiBOZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX2hlbHBlcl9oYW5kbGVyOwotTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyOwotTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXI7Ci1OZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyOwotTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXI7Ci1OZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV9udW1fZmlsZV9oYW5kbGVyOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKaW5kZXggMDZlYzQ0OS4uMmJkM2NkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKQEAgLTI1LDEwICsyNSwxMCBAQAogfSBuZXRzbm1wX29sZF9hcGlfY2FjaGU7CiAKIGludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbWlibG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWlibG9jbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYW5nZV9zdWJpZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKaW5kZXggNDVjYTYyYi4uYWFkODgzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKQEAgLTExOCw5ICsxMTgsMTUgQEAKICNkZWZpbmUgTU9ERV9HRVRORVhUICAgICAgICAgIFNOTVBfTVNHX0dFVE5FWFQKICNkZWZpbmUgTU9ERV9HRVRCVUxLICAgICAgICAgIFNOTVBfTVNHX0dFVEJVTEsKICNkZWZpbmUgTU9ERV9HRVRfU1RBU0ggICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX0dFVF9TVEFTSAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgTU9ERV9JU19HRVQoeCkgICAgICAgICgoeCA+PSAxMjgpICYmICh4ICE9IC0xKSAgJiYgKHggIT0gU05NUF9NU0dfU0VUKSkKKyNlbHNlIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworI2RlZmluZSBNT0RFX0lTX0dFVCh4KSAgICAgICAgKCh4ID49IDEyOCkgJiYgKHggIT0gLTEpKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAgICAgLyogI2RlZmluZSBNT0RFX0lTX0dFVCh4KSAgICAgICAgKCh4ID09IFNOTVBfTVNHX0dFVCkgfHwgKHggPT0gU05NUF9NU0dfR0VUTkVYVCkgfHwgKHggPT0gU05NUF9NU0dfR0VUQlVMSykgfHwgKHggPT0gU05NUF9NU0dfSU5URVJOQUxfR0VUX1NUQVNIKSkgKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgTU9ERV9TRVRfQkVHSU4gICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTgogI2RlZmluZSBNT0RFX1NFVF9SRVNFUlZFMSAgICAgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxCiAjZGVmaW5lIE1PREVfU0VUX1JFU0VSVkUyICAgICBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTIKQEAgLTEzMCwxMSArMTM2LDEzIEBACiAjZGVmaW5lIE1PREVfU0VUX1VORE8gICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9TRVRfVU5ETwogI2RlZmluZSBNT0RFX0lTX1NFVCh4KSAgICAgICAgICgoeCA8IDEyOCkgfHwgKHggPT0gLTEpIHx8ICh4ID09IFNOTVBfTVNHX1NFVCkpCiAgICAgLyogI2RlZmluZSBNT0RFX0lTX1NFVCh4KSAgICAgICAgICghTU9ERV9JU19HRVQoeCkpICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICNkZWZpbmUgTU9ERV9CU1RFUF9QUkVfUkVRVUVTVCAgIFNOTVBfTVNHX0lOVEVSTkFMX1BSRV9SRVFVRVNUCiAjZGVmaW5lIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUICBTTk1QX01TR19JTlRFUk5BTF9QT1NUX1JFUVVFU1QKIAogI2RlZmluZSBNT0RFX0JTVEVQX09CSkVDVF9MT09LVVAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfT0JKRUNUX0xPT0tVUAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgTU9ERV9CU1RFUF9DSEVDS19WQUxVRSAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX0NIRUNLX1ZBTFVFCiAjZGVmaW5lIE1PREVfQlNURVBfUk9XX0NSRUFURSAgICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9ST1dfQ1JFQVRFCiAjZGVmaW5lIE1PREVfQlNURVBfVU5ET19TRVRVUCAgICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9VTkRPX1NFVFVQCkBAIC0xNDUsNyArMTUzLDcgQEAKICNkZWZpbmUgTU9ERV9CU1RFUF9VTkRPX0NPTU1JVCAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1VORE9fQ09NTUlUCiAjZGVmaW5lIE1PREVfQlNURVBfSVJSRVZFUlNJQkxFX0NPTU1JVCBTTk1QX01TR19JTlRFUk5BTF9JUlJFVkVSU0lCTEVfQ09NTUlUCiAjZGVmaW5lIE1PREVfQlNURVBfVU5ET19DTEVBTlVQICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9VTkRPX0NMRUFOVVAKLQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKiogQHR5cGVkZWYgc3RydWN0IG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KICAqIFR5cGVkZWZzIHRoZSBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zIHN0cnVjdCBpbnRvCkBAIC0yNjIsNyArMjcwLDExIEBACiAKICAgICB1X2xvbmcgICAgICAgICAgbmV0c25tcF9tYXJrZXJfdXB0aW1lKG1hcmtlcl90IHBtKTsKICAgICB1X2xvbmcgICAgICAgICAgbmV0c25tcF90aW1ldmFsX3VwdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpOworICAgIGNvbnN0X21hcmtlcl90ICBuZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUodm9pZCk7CisgICAgdWludDY0X3QgICAgICAgIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZShtYXJrZXJfdCBzKTsKICAgICB1X2xvbmcgICAgICAgICAgbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3NldF9hZ2VudF91cHRpbWUodV9sb25nIGhzZWMpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2NoZWNrX3RyYW5zYWN0aW9uX2lkKGludCB0cmFuc2FjdGlvbl9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfY2hlY2tfcGFja2V0KG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M1ZDQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBTTk1QX0dFVF9TVEFUSVNUSUNfSAorI2RlZmluZSBTTk1QX0dFVF9TVEFUSVNUSUNfSAorCisvKiogUmVnaXN0ZXJzIGEgc2NhbGFyIGdyb3VwIHdpdGggc3RhdGlzdGljcyBmcm9tIEByZWYgc25tcF9nZXRfc3RhdGlzdGljLgorICogIGFzIHJlZ2luZm8uW3N0YXJ0LCBzdGFydCArIGVuZCAtIGJlZ2luXS4KKyAqICBAcGFyYW0gcmVnaW5mbyByZWdpc3RyYXRpb24gdG8gcmVnaXN0ZXIgdGhlIGl0ZW1zIHVuZGVyCisgKiAgQHBhcmFtIHN0YXJ0IG9mZnNldCB0byB0aGUgYmVnaW4gaXRlbQorICogIEBwYXJhbSBiZWdpbiBmaXJzdCBzbm1wX2dldF9zdGF0aXN0aWMga2V5IHRvIHJldHVybgorICogIEBwYXJhbSBlbmQgbGFzdCBzbm1wX2dldF9zdGF0aXN0aWMga2V5IHRvIHJldHVybgorICovCitpbnQKK25ldHNubXBfcmVnaXN0ZXJfc3RhdGlzdGljX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkIHN0YXJ0LCBpbnQgYmVnaW4sIGludCBlbmQpOworCisjZGVmaW5lIE5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIocmVnaW5mbywgc3RhcnQsIHN0YXQpICAgICAgICBcCisgIG5ldHNubXBfcmVnaXN0ZXJfc3RhdGlzdGljX2hhbmRsZXIocmVnaW5mbywgc3RhcnQsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF8gIyMgc3RhdCAjIyBfU1RBVFNfU1RBUlQsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF8gIyMgc3RhdCAjIyBfU1RBVFNfRU5EKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCmluZGV4IGQyODBhOWEuLjc3ZGJkNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaApAQCAtNDUsNiArNDUsMjMgQEAKIAogICAgIHN0cnVjdCB2YXJpYWJsZTsKIAorICAgIC8qKgorICAgICAqIER1cGxpY2F0ZXMgYSB2YXJpYWJsZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gUG9pbnRlciB0byB0aGUgZHVwbGljYXRlIHZhcmlhYmxlIHVwb24gc3VjY2VzczsgTlVMTCB1cG9uCisgICAgICogICBmYWlsdXJlLgorICAgICAqCisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGUKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTEKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTIKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTMKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTQKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTcKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTgKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZTEzCisgICAgICovCisgICAgc3RydWN0IHZhcmlhYmxlICpuZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZShjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhcik7CisKICAgICAvKgogICAgICAqIEZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIGJ5IHRoZSBtYXN0ZXIgYWdlbnQgZm9yIHdyaXRlcy4gCiAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKaW5kZXggY2ZhODVlZi4uMzcwOWEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaApAQCAtMjAsNiArMjAsNyBAQAogfSBuZXRzbm1wX3N0YXNoX2NhY2hlX2RhdGE7CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3ZvaWQgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlcih2b2lkKTsKIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlcih2b2lkKTsKIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X3N0YXNoX2NhY2hlX2hhbmRsZXIodm9pZCk7CiBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF90aW1lZF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXIoaW50IHRpbWVvdXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWJhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIE5FVFNOTVBfU1lTT1JUQUJMRV9ICisjZGVmaW5lIE5FVFNOTVBfU1lTT1JUQUJMRV9ICisKK3N0cnVjdCBzeXNPUlRhYmxlIHsKKyAgICBjaGFyICAgICAgICAgICAgKk9SX2Rlc2NyOworICAgIG9pZCAgICAgICAgICAgICAqT1Jfb2lkOworICAgIHNpemVfdCAgICAgICAgICAgT1Jfb2lkbGVuOworICAgIG5ldHNubXBfc2Vzc2lvbiAqT1Jfc2VzczsKKyAgICB1X2xvbmcgICAgICAgICAgIE9SX3VwdGltZTsKK307CisKK3N0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzIHsKKyAgICBjaGFyICAgICAgICAgICAgKmRlc2NyOworICAgIG9pZCAgICAgICAgICAgICAqbmFtZTsKKyAgICBzaXplX3QgICAgICAgICAgIG5hbWVsZW47Cit9OworCisjZGVmaW5lIFNZU19PUlRBQkxFX1JFR0lTVEVSRURfT0sgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRCAgICAgICAtMQorI2RlZmluZSBTWVNfT1JUQUJMRV9VTlJFR0lTVEVSRURfT0sgICAgICAgICAgICAwCisjZGVmaW5lIFNZU19PUlRBQkxFX05PX1NVQ0hfUkVHSVNUUkFUSU9OICAgICAgLTEKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgorCisjZGVmaW5lIFJFR0lTVEVSX1NZU09SX1RBQkxFKHRoZW9pZCwgbGVuLCBkZXNjcikgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBzeXNPUlRhYmxlIHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9kZXNjciA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgZGVzY3IpOyAgICAgIFwKKyAgICB0Lk9SX29pZCA9IHRoZW9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1Jfb2lkbGVuID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9zZXNzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX3VwdGltZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfUkVHX1NZU09SLCAmdCk7IFwKKyAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9FTlRSWSh0aGVvaWQsIGRlc2NyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgUkVHSVNURVJfU1lTT1JfVEFCTEUodGhlb2lkLCBzaXplb2YodGhlb2lkKSAvIHNpemVvZihvaWQpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyKQorCisjZGVmaW5lIFVOUkVHSVNURVJfU1lTT1JfVEFCTEUodGhlb2lkLCBsZW4pICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9kZXNjciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1Jfb2lkID0gdGhlb2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX29pZGxlbiA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9zZXNzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1JfdXB0aW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1IsICZ0KTsgICAgXAorICB9IHdoaWxlKDApOworCisjZGVmaW5lIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkodGhlb2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBVTlJFR0lTVEVSX1NZU09SX1RBQkxFKHRoZW9pZCwgc2l6ZW9mKHRoZW9pZCkgLyBzaXplb2Yob2lkKSkKKworI2RlZmluZSBVTlJFR0lTVEVSX1NZU09SX1NFU1Moc2VzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SX1NFU1MsICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHNlc3MpOworCisKKyNlbmRpZiAvKiBORVRTTk1QX1NZU09SVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCmluZGV4IDNiOGJiYzIuLjc5ZTU4OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKQEAgLTksNiArOSwxMiBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKy8qCiAgKiBAZmlsZSB0YWJsZS5oCiAgKgogICogQGFkZHRvZ3JvdXAgdGFibGUKQEAgLTExNSwxNSArMTIxLDE0IEBACiAgICAgbmV0c25tcF9taWJfaGFuZGxlcgogICAgICAgICAqbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJyZXEpOwotICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYnJlcSk7Ci0gICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfYnVpbGRfb2lkKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFibGVfaW5mbyk7CisgICAgdm9pZCAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKTsKKyAgICB2b2lkICBuZXRzbm1wX3JlZ2lzdHJhdGlvbl9vd25zX3RhYmxlX2luZm8obmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnKTsKKyAgICBpbnQgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKCAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVxKTsKKyAgICBpbnQgICBuZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbyk7CisgICAgaW50ICAgbmV0c25tcF90YWJsZV9idWlsZF9vaWQoIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgICAgKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICAgKnRhYmxlX2luZm8pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICBuZXRzbm1wX3RhYmxlX2J1aWxkX29pZF9mcm9tX2luZGV4KG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKQEAgLTE0Nyw2ICsxNTIsMTAgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvCiAgICAgICAgICpuZXRzbm1wX2ZpbmRfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8obmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICoKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZShuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0cmkpOworICAgIHZvaWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKik7CisKICAgICBuZXRzbm1wX2luZGV4ICogbmV0c25tcF90YWJsZV9pbmRleF9maW5kX25leHRfcm93KG5ldHNubXBfY29udGFpbmVyICpjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcSk7CiAKQEAgLTE1OCwxMyArMTY3LDkgQEAKIAogI2RlZmluZSBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXgodGluZm8sIHR5cGUpIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnRpbmZvLT5pbmRleGVzLCBOVUxMLCAwLCAodV9jaGFyKXR5cGUsIE5VTEwsIDApOwogCi0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZvaWQgICAgICAgICAgIAogICAgICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aW5mbywgLi4uKTsKLSNlbHNlCi0gICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHZhX2FsaXN0KTsKLSNlbmRpZgogCiAgICAgaW50IG5ldHNubXBfY2hlY2tfZ2V0bmV4dF9yZXBseShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAppbmRleCBkNTFhY2IxLi5iMzQyMTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKQEAgLTUyLDYgKzUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJyZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGtleV90eXBlKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV91bnJlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pOwogICAgIAogICAgIC8qKiByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHVzZWQgYnkgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgKi8KICAgICBuZXRzbm1wX2NvbnRhaW5lcioKQEAgLTg3LDYgKzg5LDggQEAKIAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2luc2VydChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pbmRleCAqcm93KTsKKyAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19yZW1vdmUobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5kZXggICAgICAgICpyb3cpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29udGFpbmVyIFRhYmxlIEFQSTogUm93IG9wZXJhdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKaW5kZXggY2MyNmViNi4uNjZlM2IzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKQEAgLTExMywxMiArMTEzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAqZGVmYXVsdF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkZWZhdWx0X3ZhbHVlX2xlbik7Ci0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZvaWQgbmV0c25tcF90YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7Ci0jZWxzZQotICAgIHZvaWQgbmV0c25tcF90YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KHZhX2FsaXN0KTsKLSNlbmRpZgogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEzNiw2ICsxMzIsMTYgQEAKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UKICAgICAgICAgKm5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldF9jb2x1bW4obmV0c25tcF9yZXF1ZXN0X2luZm8gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KTsKKyAgICBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqCisgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2dldF9vcl9jcmVhdGVfc3Rhc2gobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0ZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaSk7CisgICAgbmV0c25tcF90YWJsZV9yb3cgKgorICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfbmV3cm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290b2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICpkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8pOwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE0NCw2ICsxNTAsOCBAQAogCiAgICAgdm9pZCBuZXRzbm1wX3JlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZShuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZWdpc3RyYXRpb25fbmFtZSk7CisgICAgdm9pZCBuZXRzbm1wX3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCwKKwkJCQkJICAgIGNoYXIgKnJlZ2lzdHJhdGlvbl9uYW1lKTsKICAgICB2b2lkIG5ldHNubXBfY29uZmlnX3BhcnNlX3RhYmxlX3NldChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CiAgICAgdm9pZCBuZXRzbm1wX2NvbmZpZ19wYXJzZV9hZGRfcm93KCAgY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOwogCkBAIC0xNzcsMTEgKzE4NSw3IEBACiAKICAgICB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfaW5kZXgobmV0c25tcF90YWJsZV9kYXRhX3NldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJsZSwgdV9jaGFyIHR5cGUpOwotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2b2lkIG5ldHNubXBfdGFibGVfc2V0X2FkZF9pbmRleGVzKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRzZXQsIC4uLik7Ci0jZWxzZQotICAgIHZvaWQgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModmFfYWxpc3QpOwotI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCmluZGV4IDhjZGIxZTcuLmM3MWRkNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKQEAgLTUxLDYgKzUxLDkgQEAKICAgICAgICBUaGUgbmV0c25tcF9pdGVyYXRvcl9pbmZvIHR5cGVkZWYgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIHRoaXMgc3RydWN0IGlmIHlvdSB3b3VsZCBwcmVmZXIuCiAgICAgICovCiAgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MgeworICAgICAgIC8qKiBOdW1iZXIgb2YgaGFuZGxlcnMgdGhhdCBvd24gdGhpcyBkYXRhIHN0cnVjdHVyZS4gKi8KKyAgICAgICBpbnQgcmVmY250OworCiAgICAgICAgLyoqIFJlc3BvbnNpYmxlIGZvcjogcmV0dXJuaW5nIHRoZSBmaXJzdCBzZXQgb2YgImluZGV4IiBkYXRhLCBhCiAgICAgICAgICAgIGxvb3AtY29udGV4dCBwb2ludGVyLCBhbmQgb3B0aW9uYWxseSBhIGRhdGEgY29udGV4dAogICAgICAgICAgICBwb2ludGVyICovCkBAIC05NCw2ICs5Nyw3IEBACiAgICAgICAgIHZvaWQgICAgICAgICAgICpteXZvaWQ7CiAgICAgICAgIGludCAgICAgICAgICAgICBmbGFnczsKICNkZWZpbmUgTkVUU05NUF9JVEVSQVRPUl9GTEFHX1NPUlRFRAkweDAxCisjZGVmaW5lIE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPCTB4MDIKIAogICAgICAgIC8qKiBBIHBvaW50ZXIgdG8gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0CiAgICAgICAgICAgIHRoaXMgaXRlcmF0b3IgaXMgcmVnaXN0ZXJlZCBhbG9uZyB3aXRoLiAqLwpAQCAtMTE2LDExICsxMjAsMTEgQEAKICAqIEl0ZXJhdG9yIEFQSTogTUlCIG1haW50ZW5hbmNlCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyAgICB2b2lkICAgbmV0c25tcF9oYW5kbGVyX293bnNfaXRlcmF0b3JfaW5mbyhuZXRzbm1wX21pYl9oYW5kbGVyICpoKTsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyCiAgICAgICAgICAgKm5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyk7Ci0gICAgaW50ICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKTsKKyAgICBpbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pOwogICAgIHZvaWQgIG5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pOwogCiAgICAgdm9pZCAqbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQobmV0c25tcF9yZXF1ZXN0X2luZm8gKik7CkBAIC0xMjgsNiArMTMyLDEwIEBACiAKICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyOwogCisjZGVmaW5lIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHJlZ2luZm8sIGlpbmZvKSAgICAgICAgXAorICAgICgoKGlpbmZvKS0+ZmxhZ3MgfD0gTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8pLCAgICAgICAgICAgXAorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKChyZWdpbmZvKSwgKGlpbmZvKSkpCisKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogSXRlcmF0b3IgQVBJOiBSb3cgb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCmluZGV4IDI0MmIxNTkuLmIwYTE2ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgVEFCTEVfVERBVEFfVEFCTEUgInRhYmxlX3RkYXRhX3RhYmxlIgogCiAjZGVmaW5lIFREQVRBX0ZMQUdfTk9fU1RPUkVfSU5ERVhFUyAgIDB4MDEKKyNkZWZpbmUgVERBVEFfRkxBR19OT19DT05UQUlORVIgICAgICAgMHgwMiAvKiB1c2VyIHdpbGwgcHJvdmlkZSBjb250YWluZXIgKi8KIAogICAgIC8qCiAgICAgICogVGhlICh0YWJsZS1pbmRlcGVuZGVudCkgcGVyLXJvdyBkYXRhIHN0cnVjdHVyZQpAQCAtODMsOSArODQsMTAgQEAKIAogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X3RkYXRhX2hhbmRsZXIobmV0c25tcF90ZGF0YSAqdGFibGUpOwogCi0gICAgaW50IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhICAgICAgICAgICAgICAgICp0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvKTsKKyAgICBpbnQgbmV0c25tcF90ZGF0YV9yZWdpc3RlciggIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhICAgICAgICAgICAgICAgICAgICp0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8pOworICAgIGludCBuZXRzbm1wX3RkYXRhX3VucmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbyk7CiAKICAgICBuZXRzbm1wX3RkYXRhICAgICAgKm5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZSggICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKik7CiAgICAgbmV0c25tcF9jb250YWluZXIgICpuZXRzbm1wX3RkYXRhX2V4dHJhY3RfY29udGFpbmVyKG5ldHNubXBfcmVxdWVzdF9pbmZvICopOwpAQCAtOTMsNiArOTUsNyBAQAogICAgIHZvaWQgICAgICAgICAgICAgICAqbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KCAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKTsKIAogICAgIHZvaWQgbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICosIG5ldHNubXBfdGRhdGFfcm93ICopOworICAgIHZvaWQgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICosIG5ldHNubXBfdGRhdGFfcm93ICopOwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKaW5kZXggNDNhMTlkNy4uNjcxMDRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKQEAgLTgsNiArOCwxMCBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorLyoqIEBpbmdyb3VwIHdhdGNoZXIKKyAqICBAeworICovCisKIC8qCiAgKiBpZiBoYW5kbGVyIGZsYWcgaGFzIHRoaXMgYml0IHNldCwgdGhlIHRpbWVzdGFtcCB3aWxsIGJlCiAgKiB0cmVhdGVkIGFzIGEgcG9pbnRlciB0byB0aGUgdGltZXN0YW1wLiBJZiB0aGlzIGJpdCBpcwpAQCAtMTYsOCArMjAsMzYgQEAKICAqLwogI2RlZmluZSBORVRTTk1QX1dBVENIRVJfRElSRUNUIE1JQl9IQU5ETEVSX0NVU1RPTTEKIAotI2RlZmluZSBXQVRDSEVSX0ZJWEVEX1NJWkUgICAgMHgwMQotI2RlZmluZSBXQVRDSEVSX01BWF9TSVpFICAgICAgMHgwMgorLyoqIFRoZSBzaXplIG9mIHRoZSB3YXRjaGVkIG9iamVjdCBpcyBjb25zdGFudC4KKyAqICBAaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgV0FUQ0hFUl9GSVhFRF9TSVpFICAgICAweDAxCisvKiogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgd2F0Y2hlZCBvYmplY3QgaXMgc3RvcmVkIGluIG1heF9zaXplLgorICogIElmIFdBVENIRVJfU0laRV9TVFJMRU4gaXMgc2V0IHRoZW4gaXQgaXMgc3VwcG9zZWQgdGhhdCBtYXhfc2l6ZSArIDEKKyAqICBieXRlcyBjb3VsZCBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlci4KKyAqICBAaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgV0FUQ0hFUl9NQVhfU0laRSAgICAgICAweDAyCisvKiogSWYgc2V0IHRoZW4gdGhlIHZhcmlhYmxlIGRhdGFfc2l6ZV9wIHBvaW50cyB0byBpcyBzdXBwb3NlZCB0byBob2xkIHRoZQorICogIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd2F0Y2hlZCBvYmplY3QgYW5kIHdpbGwgYmUgdXBkYXRlZCBvbiB3cml0ZXMuCisgKiAgQGhpZGVpbml0aWFsaXplcgorICogIEBzaW5jZSBOZXQtU05NUCA1LjUKKyAqLworI2RlZmluZSBXQVRDSEVSX1NJWkVfSVNfUFRSICAgIDB4MDQKKy8qKiBJZiBzZXQgdGhlbiBkYXRhIGlzIHN1cHBwb3NlZCB0byBiZSBhIHplcm8tdGVybWluYXRlZCBjaGFyYWN0ZXIgYXJyYXkKKyAqICBhbmQgYm90aCBkYXRhX3NpemUgYW5kIGRhdGFfc2l6ZV9wIGFyZSBpZ25vcmVkLiBBZGRpdGlvbmFsbHkgXFwwIGlzIGEKKyAqICBmb3JiaWRkZW4gY2hhcmFjdGVyIGluIHRoZSBkYXRhIHNldC4KKyAqICBAaGlkZWluaXRpYWxpemVyCisgKiAgQHNpbmNlIE5ldC1TTk1QIDUuNQorICovCisjZGVmaW5lIFdBVENIRVJfU0laRV9TVFJMRU4gICAgMHgwOAorLyoqIElmIHNldCB0aGVuIHNpemUgaXMgaW4gdW5pdHMgb2Ygb2JqZWN0IGlkZW50aWZpZXJzLgorICogIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGFuIE9JRCBhbmQgdHJhY2tzIHRoZSBPSURfTEVOR1RIIG9mIGl0IGFzCisgKiAgb3Bwb3NlZCB0byBpdCdzIHNpemUuCisgKiAgQGhpZGVpbml0aWFsaXplcgorICogIEBzaW5jZSBOZXQtU05NUCA1LjUuMQorICovCisjZGVmaW5lIFdBVENIRVJfU0laRV9VTklUX09JRFMgMHgxMAogCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3dhdGNoZXJfaW5mb19zIHsKICAgICB2b2lkICAgICAqZGF0YTsKQEAgLTI1LDEyICs1NywxOSBAQAogICAgIHNpemVfdCAgICBtYXhfc2l6ZTsKICAgICB1X2NoYXIgICAgdHlwZTsKICAgICBpbnQgICAgICAgZmxhZ3M7CisgICAgc2l6ZV90ICAgKmRhdGFfc2l6ZV9wOwogfSBuZXRzbm1wX3dhdGNoZXJfaW5mbzsKIAorLyoqIEB9ICovCisKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UoIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3aW5mbyk7CitpbnQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2luZm8pOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndpbmZvKTsKK2ludCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMiggIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3aW5mbyk7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3RpbWVzdGFtcChuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyX3QgdGltZXN0YW1wKTsKIGludCBuZXRzbm1wX3dhdGNoZWRfdGltZXN0YW1wX3JlZ2lzdGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKndoYW5kbGVyLApAQCAtNDQsMzggKzgzLDU2IEBACiAgKi8KIAogaW50IG5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9sb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX2ludF9zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogCiAjZGVmaW5lIFdBVENIRVJfSEFORExFUl9OQU1FICJ3YXRjaGVyIgogCiBuZXRzbm1wX21pYl9oYW5kbGVyICAqbmV0c25tcF9nZXRfd2F0Y2hlcl9oYW5kbGVyKHZvaWQpOwotbmV0c25tcF93YXRjaGVyX2luZm8gKm5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyh2b2lkICosIHNpemVfdCwgdV9jaGFyLCBpbnQpOworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICosIHZvaWQgKiwgc2l6ZV90LCB1X2NoYXIsIGludCk7CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KG5ldHNubXBfd2F0Y2hlcl9pbmZvICosCisJCQkgICB2b2lkICosIHNpemVfdCwgdV9jaGFyLCBpbnQsIHNpemVfdCwgc2l6ZV90Kik7CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyh2b2lkICosIHNpemVfdCwgdV9jaGFyLCBpbnQpOworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm82KHZvaWQgKiwgc2l6ZV90LCB1X2NoYXIsIGludCwgc2l6ZV90LCBzaXplX3QqKTsKKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9jbG9uZV93YXRjaGVyX2luZm8obmV0c25tcF93YXRjaGVyX2luZm8gKndpbmZvKTsKK3ZvaWQKK25ldHNubXBfb3duc193YXRjaGVyX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcik7CisKIE5ldHNubXBfTm9kZV9IYW5kbGVyICBuZXRzbm1wX3dhdGNoZXJfaGVscGVyX2hhbmRsZXI7CiAKIG5ldHNubXBfbWliX2hhbmRsZXIgICpuZXRzbm1wX2dldF93YXRjaGVkX3RpbWVzdGFtcF9oYW5kbGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAppbmRleCA2N2NkNmE0Li4wNDhlZWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaApAQCAtOCwxNCArOCw4NCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyogQ29uZmlnIEhhbmRsZXJzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlTGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZUxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlTGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlUHJlZml4LCBjb25zdCBjaGFyICp0b2tlbik7CisKKyAgICAJCQkJLyogRGVmaW5lZCBpbiBtaWIuYywgcmF0aGVyIHRoYW4gcmVhZF9jb25maWcuYyAqLworICAgIHZvaWQgICAgICAgICAgICByZWdpc3Rlcl9taWJfaGFuZGxlcnModm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyh2b2lkKTsKKworICAgIC8qIEFwcGxpY2F0aW9uIEhhbmRsZXJzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2VMaW5lKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2VMaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlciggICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuKTsKKworICAgIC8qIFJlYWRpbmcgQ29uZmlnIEZpbGVzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdzKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHJlYWRfcHJlbWliX2NvbmZpZ3Modm9pZCk7CisKKyAgICAvKiBIZWxwIFN0cmluZ3MgYW5kIEVycm9ycyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKGNvbnN0IGNoYXIgKmxlYWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBjb25maWdfcHdhcm4oY29uc3QgY2hhciAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwogICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgogICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L2NvbmZpZ19hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgICAgICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaAppbmRleCA0YzZiYWUzLi5iYTRiYjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKQEAgLTczLDYgKzczLDcgQEAKIAogICAgaW50ICAgICAgIGZsYWdzOyAvKiBmb3IgbmV0LXNubXAgdXNlICovCiAKKyAgIHVuc2lnbmVkICBnZW5lcmF0aW9uOwogICAgb2lkICAgICAgIGlmX2luZGV4OwogCiAgICB1X2NoYXIgICAgYXJwX3BoeXNhZGRyZXNzW05FVFNOTVBfQUNDRVNTX0FSUF9QSFlTQUREUl9CVUZfU0laRV07CkBAIC04MywzMyArODQsNDIgQEAKICAgIHVfY2hhciAgICBhcnBfdHlwZTsgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVHlwZSAxLTUgKi8KICAgIHVfY2hhciAgICBhcnBfc3RhdGU7ICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhU3RhdGUgMS03ICovCiAKKyAgIHVfbG9uZyAgICBhcnBfbGFzdF91cGRhdGVkOyAgIC8qIHRpbWV0aWNrcyBvZiBsYXN0IHVwZGF0ZSAqLwogfSBuZXRzbm1wX2FycF9lbnRyeTsKIAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEUgICAgICAweDAwMDAwMDAxCiAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogQUNDRVNTIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwotLyoKLSAqIGlmY29udGFpbmVyIGluaXQKLSAqLwotbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2luaXQodV9pbnQgaW5pdF9mbGFncyk7Ci0jZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9JTklUX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKK3N0cnVjdCBuZXRzbm1wX2FycF9hY2Nlc3NfczsKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfYXJwX2FjY2Vzc19zIG5ldHNubXBfYXJwX2FjY2VzczsKIAotLyoKLSAqIGlmY29udGFpbmVyIGxvYWQgYW5kIGZyZWUKLSAqLwotbmV0c25tcF9jb250YWluZXIqCi1uZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOwotI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfTE9BRF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCit0eXBlZGVmIHZvaWQgKE5ldHNubXBBY2Nlc3NBcnBVcGRhdGUpKG5ldHNubXBfYXJwX2FjY2VzcyAqLCBuZXRzbm1wX2FycF9lbnRyeSopOwordHlwZWRlZiB2b2lkIChOZXRzbm1wQWNjZXNzQXJwR0MpICAgIChuZXRzbm1wX2FycF9hY2Nlc3MgKik7CiAKLXZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpOwotI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfRlJFRV9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0RPTlRfQ0xFQVIgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVIgICAgICAgIDB4MDAwMgorc3RydWN0IG5ldHNubXBfYXJwX2FjY2Vzc19zIHsKKyAgICB2b2lkICptYWdpYzsKKyAgICB2b2lkICphcmNoX21hZ2ljOworICAgIGludCBzeW5jaHJvbml6ZWQ7CisgICAgdW5zaWduZWQgZ2VuZXJhdGlvbjsKKyAgICBOZXRzbm1wQWNjZXNzQXJwVXBkYXRlICp1cGRhdGVfaG9vazsKKyAgICBOZXRzbm1wQWNjZXNzQXJwR0MgKmdjX2hvb2s7CisgICAgY2hhciAqY2FjaGVfZXhwaXJlZDsKK307CiAKK25ldHNubXBfYXJwX2FjY2VzcyAqCituZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlKHVfaW50IGluaXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBVcGRhdGUgKnVwZGF0ZV9ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwR0MgKmdjX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2FjaGVfdGltZW91dCwgaW50ICpjYWNoZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY2FjaGVfZXhwaXJlZCk7CisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9DUkVBVEVfTk9GTEFHUyAgICAgICAgICAgICAweDAwMDAKKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpOworaW50IG5ldHNubXBfYWNjZXNzX2FycF9sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKTsKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKTsKIAogLyoKICAqIGNyZWF0ZS9mcmVlIGEgYXJwK2VudHJ5CkBAIC0xMTksNiArMTI5LDkgQEAKIAogdm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShuZXRzbm1wX2FycF9lbnRyeSAqIGVudHJ5KTsKIAordm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfdXBkYXRlKG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSwKKyAgICAgICAgbmV0c25tcF9hcnBfZW50cnkgKm5ld19kYXRhKTsKKwogLyoKICAqIGZpbmQgZW50cnkgaW4gY29udGFpbmVyCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhYzE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogZGVmYXVsdHJvdXRlciBkYXRhIGFjY2VzcyBoZWFkZXIKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0gKKworIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqLworI2lmIGRlZmluZWQoIE5FVFNOTVBfRU5BQkxFX0lQVjYgKQorIyAgIGRlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFIDE2ICAgLyogWFhYOiAyMCwgZm9yIGlwNno/ICovCisjZWxzZQorIyAgIGRlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFIDQKKyNlbmRpZgorCisKKy8qCisgKiBuZXRzbm1wX2RlZmF1bHRfcm91dGVfZW50cnkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9kZWZhdWx0cm91dGVyX3MgeworCisgICAgbmV0c25tcF9pbmRleCBvaWRfaW5kZXg7ICAgLyogTVVTVCBCRSBGSVJTVCEhIGZvciBjb250YWluZXIgdXNlICovCisgICAgb2lkICAgICAgICAgICBuc19kcl9pbmRleDsgLyogYXJiaXRyYXJ5IGluZGV4ICovCisKKyAgICBpbnQgICAgICBmbGFnczsgLyogZm9yIG5ldC1zbm1wIHVzZSAqLworCisgICAgLyoKKyAgICAgKiBtaWIgcmVsYXRlZCBkYXRhCisgICAgICovCisgICAgdV9jaGFyICAgZHJfYWRkcmVzc3R5cGU7ICAgIC8qIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlICovCisgICAgY2hhciAgICAgZHJfYWRkcmVzc1tORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFXTsgLyogaXBEZWZhdWx0Um91dGVyQWRkcmVzcyAqLworICAgIHNpemVfdCAgIGRyX2FkZHJlc3NfbGVuOyAgICAvKiBsZW5ndGggb2YgaXBEZWZhdWx0Um91dGVyQWRkcmVzcyAqLworICAgIG9pZCAgICAgIGRyX2lmX2luZGV4OyAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4ICovCisgICAgdWludDMyX3QgZHJfbGlmZXRpbWU7ICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lICgwLTY1NTM1KSAqLworICAgIGNoYXIgICAgIGRyX3ByZWZlcmVuY2U7ICAgICAvKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlICgtMiwtMSwwLDEpICovCisKK30gbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5OworCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogQUNDRVNTIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworLyoKKyAqIGNvbnRhaW5lciBpbml0CisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2luaXQodV9pbnQgZmxhZ3MpOworI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0lOSVRfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0lOSVRfQURETF9JRFhfQllfQUREUiAgICAgIDB4MDAwMQorCisvKgorICogY29udGFpbmVyIGxvYWQKKyAqLworbmV0c25tcF9jb250YWluZXIqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfSVBWNF9PTkxZICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfSVBWNl9PTkxZICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfQURETF9JRFhfQllfQUREUiAgICAgIDB4MDAwNAorCisvKgorICogY29udGFpbmVyIGZyZWUKKyAqLwordm9pZAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmcmVlX2ZsYWdzKTsKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0RPTlRfQ0xFQVIgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0tFRVBfQ09OVEFJTkVSICAgICAgICAweDAwMDIKKworLyoKKyAqIGVudHJ5IGNyZWF0ZQorICovCituZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUodm9pZCk7CisKKy8qCisgKiBlbnRyeSBsb2FkCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9sb2FkKHNpemVfdCAqbnVtX2VudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICoqZW50cmllcyk7CisKKy8qCisgKiBlbnRyeSB1cGRhdGUKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X3VwZGF0ZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqcmhzKTsKKworLyoKKyAqIGVudHJ5IGZyZWUKKyAqLwordm9pZAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZW50cnkpOworCisKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworIyBpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCmluZGV4IDUzZGZiMzYuLjIwMDEzZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaApAQCAtMzQsNiArMzQsMjAgQEAKICNkZWZpbmUgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y2X1JFQUNIQUJMRSAgICAgICAgMHgwMDA0MDAwMAogI2RlZmluZSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfVjZfSUZJRCAgICAgICAgICAgICAweDAwMDgwMDAwCiAjZGVmaW5lIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9GT1JXQVJESU5HICAgICAgIDB4MDAxMDAwMDAKKy8qIFNvbWUgcGxhdGZvcm1zLCBlLmcuTGludXgsIGRvIG5vdCBwcm92aWRlIHN0YW5kYWxvbmUgY291bnRlcgorICogZm9yIGluY29taW5nIHVuaWNhc3QgcGFja2V0cyAtIHRoZXkgcHJvdmlkZSBjb3VudGVyIG9mIGFsbCBwYWNrZXRzCisgKiArIHNlcGFyYXRlIGNvdW50ZXIgZm9yIHRoZSBtdWx0aWNhc3Qgb25lcy4KKyAqIFRoYXQgbWVhbnMgdGhlIGNvdW50ZXIgb2YgYWxsIHBhY2tldHMgbXVzdCB3YXRjaGVkIGFuZCBjaGVja2VkCisgKiBmb3Igb3ZlcmZsb3dzIHRvIHJlY29uc3RydWN0IGl0cyA2NC1iaXQgdmFsdWUgKGkuZS4gYXMgdXN1YWwKKyAqIGZvciBjb3VudGVyIG9mIHVuaWNhc3QgcGFja2V0cyksIGFuZCBhZnRlciBpdHMgZXhwYW5zaW9uIHRvIDY0LWJpdHMsCisgKiBuci5vZiBtdWx0aWNhc3QgcGFja2V0cyBtdXN0IGJlIHN1YnN0cmFjdGVkIHRvIGdldCBuci4gb2YgdW5pY2FzdAorICogcGFja2V0cy4KKyAqIFRoaXMgZmxhZyBtYXJrcyBzdGF0cyBvZiBzdWNoIHBsYXRmb3Jtcy4gTnIuIG9mIGFsbCBpbmNvbWluZyBwYWNrZXRzLAorICogcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLCBtdXN0IGJlIHN0b3JlZCBpbgorICogbmV0c25tcF9pbnRlcmZhY2Vfc3RhdHMuaWFsbCBhbmQgbmV0c25tcF9pbnRlcmZhY2Vfc3RhdHMuaXVjYXN0IHdpbGwKKyAqIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBsYXRlci4KKyAqLworI2RlZmluZSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19DQUxDVUxBVEVfVUNBU1QgICAgICAgICAweDAwMjAwMDAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKQEAgLTkzLDYgKzEwNywxMSBAQAogICAgICAqLwogICAgLyoqIGlucHV0ICovCiAgICAgc3RydWN0IGNvdW50ZXI2NCBpYnl0ZXM7CisgICAgLyoKKyAgICAgKiBuci4gb2YgYWxsIHBhY2tldHMgKHRvIGNhbGN1bGF0ZSBpdWNhc3QsIHdoZW4gdW5kZXJseWluZyBwbGF0Zm9ybSBkb2VzCisgICAgICogbm90IHByb3ZpZGUgaXQpCisgICAgICovCisgICAgc3RydWN0IGNvdW50ZXI2NCBpYWxsOwogICAgIHN0cnVjdCBjb3VudGVyNjQgaXVjYXN0OwogICAgIHN0cnVjdCBjb3VudGVyNjQgaW1jYXN0OwogICAgIHN0cnVjdCBjb3VudGVyNjQgaWJjYXN0OwpAQCAtMTc5LDcgKzE5OCw3IEBACiB0eXBlZGVmIHN0cnVjdCBfY29uZl9pZl9saXN0IHsKICAgICBjb25zdCBjaGFyICAgICAqbmFtZTsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKLSAgICB1aW50NjRfdCAgICAgICAgc3BlZWQ7CisgICAgdWludDY0X3Qgc3BlZWQ7CiAgICAgc3RydWN0IF9jb25mX2lmX2xpc3QgKm5leHQ7CiB9IG5ldHNubXBfY29uZl9pZl9saXN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oCmluZGV4IDI1MTkxZmUuLjAzNjAxYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oCkBAIC01LDEwICs1LDE3IEBACiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCi1pbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSk7CitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX2dldCh1X2xvbmcgKnZhbHVlKTsKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSk7CiAKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfZ2V0KHVfbG9uZyAqdmFsdWUpOworaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodV9sb25nIHZhbHVlKTsKKworaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpOwogaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSk7CiAKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfZ2V0KHVfbG9uZyAqdmFsdWUpOworaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9zZXQodV9sb25nIHZhbHVlKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaAppbmRleCA2YjUxNTE5Li4wYmZmMTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKQEAgLTQ3LDcgKzQ3LDEwIEBACiAgICB1X2NoYXIgICAgaWFfc3RhdHVzOyAgICAgLyogSXBBZGRyZXNzU3RhdHVzICgxLTcpICovCiAgICB1X2NoYXIgICAgaWFfb3JpZ2luOyAgICAgLyogSXBBZGRyZXNzT3JpZ2luICgxLTYpICovCiAgICB1X2NoYXIgICAgaWFfc3RvcmFnZXR5cGU7IC8qIElwQWRkcmVzc1N0b3JhZ2VUeXBlICgxLTUpICovCi0KKyAgIHVfY2hhciAgICBpYV9vbmxpbmtfZmxhZzsgLyogSXBPbmxpbmtGbGFnICovCisgICB1X2NoYXIgICAgaWFfYXV0b25vbW91c19mbGFnOyAvKklwQXV0b25vbW91c0ZsYWcgKi8KKyAgIHVfbG9uZyAgICBpYV9wcmVmZXJlZF9saWZldGltZTsvKklwUHJlZmVyZWRMaWZlVGltZSovCisgICB1X2xvbmcgICAgaWFfdmFsaWRfbGlmZXRpbWU7LypJcFZhbGlkTGlmZVRpbWUqLwogICAgbmV0c25tcF9kYXRhX2xpc3QgKmFyY2hfZGF0YTsgICAgICAvKiBhcmNoIHNwZWNpZmljIGRhdGEgKi8KIAogfSBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeTsKQEAgLTE0MSw4ICsxNDQsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRkcl9sZW4sIGludCBwZnhfbGVuKTsKIAogaW50IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbihpbl9hZGRyX3QgbWFzayk7Citpbl9hZGRyX3QgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGludCBsZW4pOworaW50IG5ldHNubXBfaXBhZGRyZXNzX2lwdjZfcHJlZml4X2xlbihzdHJ1Y3QgaW42X2FkZHIgbWFzayk7CiAKK2ludCBuZXRzbm1wX2lwYWRkcmVzc19mbGFnc19jb3B5KHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppYV9wcmVmZXJlZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaWFfdmFsaWRfbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX29ubGlua19mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppYV9hdXRvbm9tb3VzX2ZsYWcpOwogCitpbnQgbmV0c25tcF9pcGFkZHJlc3NfcHJlZml4X29yaWdpbl9jb3B5KHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgaWFfb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NBZGRyVHlwZSk7CiAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgKaW5kZXggMjE2MTQ0NS4uZjc4MjQ1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmgKQEAgLTEwLDYgKzEwLDQwIEBACiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVMgICAgICAgMQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUUyAgICAgICAgIDIKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTICAgICAgICAzCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVMgICAgICAgNCAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SUyAgICAgICA1CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1MgICAgNgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTICAgIDcKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TICA4IAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEUyAgICAgICAgIDkKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTICAgICAgICAgICAxMAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMUyAgICAgICAgIDExCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTICAgICAgICAgMTIKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSUyAgICAgICAxMworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUUyAgICAgIDE0CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE5PUk9VVEVTICAgICAgMTUKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNUyAxNgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEUyAgICAgIDE3CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEUyAgICAgMTgKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LUyAgICAgICAxOQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFMgICAgIDIwCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTICAgMjEKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTICAgICAyMgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFMgICAgICAgIDIzCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTICAgICAgMjQKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUUyAgICAyNQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFMgICAgIDI2CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTICAgMjcKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFMgICAgICAyOAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFMgICAgIDI5CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRSAgMzAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFICAgICAgICAzMQorICAgIAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfTEFTVCBJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEUKKyAgICAKIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogc3RydWN0dXJlIGRlZmluaXRpb25zCkBAIC0yMCwyOCArNTQsNDIgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9pcHN0YXRzX3MgewogCisgICAvKiBDb2x1bW5zIG9mIGlwU3RhdHNUYWJsZS4gU29tZSBvZiB0aGVtIGFyZSBIQyBmb3IgY29tcHV0YXRpb24gb2YgdGhlIAorICAgICogb3RoZXIgY29sdW1ucywgd2hlbiB1bmRlcmx5aW5nIE9TIGRvZXMgbm90IHByb3ZpZGUgdGhlbS4KKyAgICAqIEFsd2F5cyBmaWxsIGF0IGxlYXN0IDMyIGJpdHMsIHRoZSB0YWJsZSBpcyBwZXJpb2RpY2FsbHkgcG9sbGVkIC0+IDMyIGJpdAorICAgICogb3ZlcmZsb3cgc2hhbGwgYmUgZGV0ZWN0ZWQgYW5kIDY0IGJpdCB2YWx1ZSBzaG91bGQgYmUgY29tcHV0ZWQgYXV0b21hdGljYWxseS4gKi8KICAgIFU2NCAgICAgICAgICAgICBIQ0luUmVjZWl2ZXM7CiAgICBVNjQgICAgICAgICAgICAgSENJbk9jdGV0czsKICAgIHVfbG9uZyAgICAgICAgICBJbkhkckVycm9yczsKLSAgIHVfbG9uZyAgICAgICAgICBJbk5vUm91dGVzOworICAgVTY0ICAgICAgICAgICAgIEhDSW5Ob1JvdXRlczsgCiAgICB1X2xvbmcgICAgICAgICAgSW5BZGRyRXJyb3JzOwogICAgdV9sb25nICAgICAgICAgIEluVW5rbm93blByb3RvczsKICAgIHVfbG9uZyAgICAgICAgICBJblRydW5jYXRlZFBrdHM7Ci0gICBVNjQgICAgICAgICAgICAgSENJbkZvcndEYXRhZ3JhbXM7CisgICAKKyAgIC8qIG9wdGlvbmFsLCBjYW4gYmUgY29tcHV0ZWQgZnJvbSBIQ0luTm9Sb3V0ZXMgYW5kIEhDT3V0Rm9yd0RhdGFncmFtcyAqLworICAgVTY0ICAgICAgICAgICAgIEhDSW5Gb3J3RGF0YWdyYW1zOyAKKyAgIAogICAgdV9sb25nICAgICAgICAgIFJlYXNtUmVxZHM7CiAgICB1X2xvbmcgICAgICAgICAgUmVhc21PS3M7CiAgICB1X2xvbmcgICAgICAgICAgUmVhc21GYWlsczsKICAgIHVfbG9uZyAgICAgICAgICBJbkRpc2NhcmRzOwogICAgVTY0ICAgICAgICAgICAgIEhDSW5EZWxpdmVyczsKICAgIFU2NCAgICAgICAgICAgICBIQ091dFJlcXVlc3RzOwotICAgdV9sb25nICAgICAgICAgIE91dE5vUm91dGVzOworICAgVTY0ICAgICAgICAgICAgIEhDT3V0Tm9Sb3V0ZXM7CiAgICBVNjQgICAgICAgICAgICAgSENPdXRGb3J3RGF0YWdyYW1zOwotICAgdV9sb25nICAgICAgICAgIE91dERpc2NhcmRzOwotICAgdV9sb25nICAgICAgICAgIE91dEZyYWdSZXFkczsKLSAgIHVfbG9uZyAgICAgICAgICBPdXRGcmFnT0tzOwotICAgdV9sb25nICAgICAgICAgIE91dEZyYWdGYWlsczsKLSAgIHVfbG9uZyAgICAgICAgICBPdXRGcmFnQ3JlYXRlczsKKyAgIFU2NCAgICAgICAgICAgICBIQ091dERpc2NhcmRzOworICAgCisgICAvKiBvcHRpb25hbCwgY2FuIGJlIGNvbXB1dGVkIGZyb20gSENPdXRGcmFnT0tzICsgSENPdXRGcmFnRmFpbHMqLworICAgVTY0ICAgICAgICAgICAgIEhDT3V0RnJhZ1JlcWRzOworICAgVTY0ICAgICAgICAgICAgIEhDT3V0RnJhZ09LczsKKyAgIFU2NCAgICAgICAgICAgICBIQ091dEZyYWdGYWlsczsKKyAgIFU2NCAgICAgICAgICAgICBIQ091dEZyYWdDcmVhdGVzOworICAgCisgICAvKiBvcHRpb25hbCwgY2FuIGJlIGNvbXB1dGVkIGZyb20gCisgICAgKiBIQ091dFJlcXVlc3RzICtIQ091dEZvcndEYXRhZ3JhbXMgKyBIQ091dEZyYWdDcmVhdGVzCisgICAgKiAtIEhDT3V0RnJhZ1JlcWRzIC0gSENPdXROb1JvdXRlcyAgLSBIQ091dERpc2NhcmRzICovCiAgICBVNjQgICAgICAgICAgICAgSENPdXRUcmFuc21pdHM7CisgICAKICAgIFU2NCAgICAgICAgICAgICBIQ091dE9jdGV0czsKICAgIFU2NCAgICAgICAgICAgICBIQ0luTWNhc3RQa3RzOwogICAgVTY0ICAgICAgICAgICAgIEhDSW5NY2FzdE9jdGV0czsKQEAgLTUwLDYgKzk4LDggQEAKICAgIFU2NCAgICAgICAgICAgICBIQ0luQmNhc3RQa3RzOwogICAgVTY0ICAgICAgICAgICAgIEhDT3V0QmNhc3RQa3RzOwogCisgICAvKiBBcnJheSBvZiBhdmFpbGFibGUgY29sdW1ucy4qLworICAgaW50ICAgICAgICAgICAgIGNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9MQVNUKzFdOwogfSBuZXRzbm1wX2lwc3RhdHM7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oCmluZGV4IDliYTFiMTkuLmQ5NDRkMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAqIGRlZmluZSB0aGUgbWF4aW11bSBvaWQgbGVuZ3RoIGZvciBhIHBvbGljeSwgZm9yIHVzZSBieSB0aGUKICAgICAqIGluZXRDaWRyUm91dGVUYWJsZS4gTXVzdCBiZSBhdCBsZWFzdCAyLCBmb3IgZGVmYXVsdCBudWxsT2lkIGNhc2UuCiAgICAgKi8KLSNkZWZpbmUgTkVUU05NUF9QT0xJQ1lfT0lEX01BWF9MRU4gIDIKKyNkZWZpbmUgTkVUU05NUF9QT0xJQ1lfT0lEX01BWF9MRU4gIDMKICAgIG9pZCAgICAgICpydF9wb2xpY3k7ICAgICAgLyogTlVMTCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgeyAwLCAwIH0gKi8KICAgIHVfY2hhciAgICBydF9wb2xpY3lfbGVuOyAgLyogMC0xMjggb2lkcyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTVjOGJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogc2NvcGV6b25lIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDogc2NvcGV6b25lLmggMTQxNzAgMjAwNy0wNC0yOSAwMjoyMjoxMlogdmFydW5fYyAkCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0gKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogc3RydWN0dXJlIGRlZmluaXRpb25zCisgKgorICoKKyAqIE5PVEU6IGlmIHlvdSBhZGQgZmllbGRzLCB1cGRhdGUgY29kZSBkZWFsaW5nIHdpdGgKKyAqICAgICAgIHRoZW0gaW4gaXB2NnNjb3Blem9uZV9jb21tb24uYworICovCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5X3MgeworICAgIG5ldHNubXBfaW5kZXggb2lkX2luZGV4OworICAgIG9pZCAgICAgICAgICAgbnNfc2NvcGV6b25lX2luZGV4OworICAgIHVfaW50ICAgbnNfZmxhZ3M7IC8qIG5ldC1zbm1wIGZsYWdzICovCisgICAgb2lkICAgICBpbmRleDsKKyAgICBpbnQgICAgIHNjb3Blem9uZV9saW5rbG9jYWw7ICAgIAorCit9IG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnk7CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogQUNDRVNTIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKgorICogc2NvcGV6b25lIGNvbnRhaW5lciBpbml0CisgKi8KK25ldHNubXBfY29udGFpbmVyICogbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9pbml0KHVfaW50IGluaXRfZmxhZ3MpOworCisvKgorICogc2NvcGV6b25lIGNvbnRhaW5lciBsb2FkIGFuZCBmcmVlCisgKi8KK25ldHNubXBfY29udGFpbmVyKgorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CisKK3ZvaWQgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmcmVlX2ZsYWdzKTsKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ZSRUVfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfRlJFRV9ET05UX0NMRUFSICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX0tFRVBfQ09OVEFJTkVSICAgICAgICAweDAwMDIKKworCisvKgorICogY3JlYXRlL2ZyZWUgYW4gc2NvcGV6b25lIGVudHJ5CisgKi8KK25ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKgorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2NyZWF0ZSh2b2lkKTsKKwordm9pZCBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICogZW50cnkpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyOGRmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKQEAgLTAsMCArMSw3NyBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIE5FVFNOTVBfU1dJTlNUX0gKKyNkZWZpbmUgTkVUU05NUF9TV0lOU1RfSAorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgYSBzd2luc3QgZW50cnkgCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaHJTV0luc3RhbGxlZFRhYmxlX2VudHJ5IHsKKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pbmRleDsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIEluZGV4IHZhbHVlczsgTUlCIHR5cGUgaXMgaW50MzIsIGJ1dCB3ZSB1c2Ugb2lkIHNvIHRoaXMKKyAgICAgICAgICogc3RydWN0dXJlIGNhbiBiZSB1c2VkIGRpcmVjdGx5IHdpdGggYSB0YWJsZV9jb250YWluZXIuCisgICAgICAgICAqLworICAgICAgICBvaWQgICAgICAgICAgICAgc3dJbmRleDsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIENvbHVtbiB2YWx1ZXMgCisgICAgICAgICAqLworICAgICAgICBjaGFyICAgICAgICAgICAgc3dOYW1lWzY0XTsKKyAgICAgICAgY2hhciAgICAgICAgICAgIHN3RGF0ZVsxMV07CisjaWZkZWYgTkVUU05NUF9IQVZFX1NXSUQKKyAgICAgICAgb2lkICAgICAgICAgICAgKnN3SUQ7CisgICAgICAgIHVfY2hhciAgICAgICAgICBzd0lEX2xlbjsKKyNlbmRpZgorICAgICAgICB1X2NoYXIgICAgICAgICAgc3dUeXBlOworICAgICAgICB1X2NoYXIgICAgICAgICAgc3dOYW1lX2xlbjsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIHN3RGF0ZV9sZW47CisgICAgfSBuZXRzbm1wX3N3aW5zdF9lbnRyeTsKKyAgICAKKyNkZWZpbmUgSFJTV0lOU1RBTExFRFRZUEVfVU5LTk9XTiAgMQorI2RlZmluZSBIUlNXSU5TVEFMTEVEVFlQRV9PUEVSQVRJTkdTWVNURU0gIDIKKyNkZWZpbmUgSFJTV0lOU1RBTExFRFRZUEVfREVWSUNFRFJJVkVSICAzCisjZGVmaW5lIEhSU1dJTlNUQUxMRURUWVBFX0FQUExJQ0FUSU9OICA0CisKKworI2RlZmluZSBORVRTTk1QX1NXSU5TVF9OT0ZMQUdTICAgICAgICAgICAgMHgwMDAwMDAwMAorCisjZGVmaW5lIE5FVFNOTVBfU1dJTlNUX0FMTF9PUl9OT05FICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5FVFNOTVBfU1dJTlNUX0RPTlRfRlJFRV9JVEVNUyAgICAweDAwMDAwMDAyCisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGZsYWdzICk7CisKKyAgICB2b2lkIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmbGFncyk7CisgICAgdm9pZCBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcyhuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKTsKKworICAgIHZvaWQgbmV0c25tcF9zd2luc3RfZW50cnlfcmVtb3ZlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSk7CisKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqIG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZShpbnQzMl90IGluZGV4KTsKKyAgICB2b2lkIG5ldHNubXBfc3dpbnN0X2VudHJ5X2ZyZWUobmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5KTsKKworICAgIGludDMyX3QgbmV0c25tcF9zd2luc3RfYWRkX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50MzJfdCBuZXRzbm1wX3N3aW5zdF9nZXRfaWQoY29uc3QgY2hhciAqbmFtZSk7CisgICAgY29uc3QgY2hhciAqIG5ldHNubXBfc3dpbnN0X2dldF9uYW1lKGludDMyX3QgaWQpOworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogTkVUU05NUF9TV0lOU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTVjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2lmbmRlZiBORVRTTk1QX1NXUlVOX0gKKyNkZWZpbmUgTkVUU05NUF9TV1JVTl9ICisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworICAgIC8qLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaHJTV1J1blRhYmxlX2VudHJ5IHsKKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pbmRleDsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIEluZGV4IHZhbHVlcyAKKyAgICAgICAgICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBoclNXUnVuSW5kZXg7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBDb2x1bW4gdmFsdWVzIAorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGhyU1dSdW5OYW1lWyA2NCsxXTsgIC8qIHNpemUgcGVyIE1JQiArIDEgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGhyU1dSdW5QYXRoWzEyOCsxXTsgIC8qIHNpemUgcGVyIE1JQiArIDEgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGhyU1dSdW5QYXJhbWV0ZXJzWzEyOCsxXTsgLyogc2l6ZSBwZXIgTUlCICsgMSAqLworI2lmZGVmIE5FVFNOTVBfU1dSVU5fSEFWRV9JRCAgLyogaWYgbm90IGRlZmluZWQsIHdpbGwgYWx3YXlzIHVzZSBudWxsT2lkICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBoclNXUnVuSURbU05NUF9NQVhPSURdOworICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1bklEX2xlbjsKKyNlbmRpZgorICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1bk5hbWVfbGVuOworICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1blBhdGhfbGVuOworICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1blBhcmFtZXRlcnNfbGVuOworCisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuVHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5TdGF0dXM7CisgICAgICAgIHVfY2hhciAgICAgICAgICBvbGRfaHJTV1J1blN0YXR1czsKKworICAgICAgICAvKgorICAgICAgICAgKiBQZXJmIHZhbHVlcworICAgICAgICAgKi8KKyAgICAgICAgaW50MzJfdCAgICAgICAgIGhyU1dSdW5QZXJmQ1BVOworICAgICAgICBpbnQzMl90ICAgICAgICAgaHJTV1J1blBlcmZNZW07CisgICAgICAgIAorICAgIH0gbmV0c25tcF9zd3J1bl9lbnRyeTsKKworICAgIC8qCisgICAgICogZW51bXMgZm9yIGNvbHVtbiBoclNXUnVuVHlwZQorICAgICAqLworI2RlZmluZSBIUlNXUlVOVFlQRV9VTktOT1dOICAgICAgICAgICAgIDEKKyNkZWZpbmUgSFJTV1JVTlRZUEVfT1BFUkFUSU5HU1lTVEVNICAgICAyCisjZGVmaW5lIEhSU1dSVU5UWVBFX0RFVklDRURSSVZFUiAgICAgICAgMworI2RlZmluZSBIUlNXUlVOVFlQRV9BUFBMSUNBVElPTiAgICAgICAgIDQKKworICAgIC8qCisgICAgICogZW51bXMgZm9yIGNvbHVtbiBoclNXUnVuU3RhdHVzCisgICAgICovCisjZGVmaW5lIEhSU1dSVU5TVEFUVVNfUlVOTklORyAgICAgICAgICAgMQorI2RlZmluZSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFICAgICAgICAgIDIKKyNkZWZpbmUgSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRSAgICAgICAzCisjZGVmaW5lIEhSU1dSVU5TVEFUVVNfSU5WQUxJRCAgICAgICAgICAgNAorCisgICAgLyotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIFByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgbmV0c25tcF9zd3J1bl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyApOworCisgICAgdm9pZCBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKKyAgICB2b2lkIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpOworCisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqCisgICAgbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUoaW50MzJfdCBzd0luZGV4KTsKKworICAgIHZvaWQgbmV0c25tcF9zd3J1bl9lbnRyeV9mcmVlKG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5KTsKKworICAgIGludCAgc3dydW5fY291bnRfcHJvY2Vzc2VzKCB2b2lkICk7CisgICAgaW50ICBzd3J1bl9tYXhfcHJvY2Vzc2VzKCAgIHZvaWQgKTsKKyAgICBpbnQgIHN3cnVuX2NvdW50X3Byb2Nlc3Nlc19ieV9uYW1lKCBjaGFyICpuYW1lICk7CisKKyNkZWZpbmUgTkVUU05NUF9TV1JVTl9OT0ZMQUdTICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBORVRTTk1QX1NXUlVOX0FMTF9PUl9OT05FICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5FVFNOTVBfU1dSVU5fRE9OVF9GUkVFX0lURU1TICAgIDB4MDAwMDAwMDIKKy8qI2RlZmluZSBORVRTTk1QX1NXUlVOX3h4ICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgKi8KKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIE5FVFNOTVBfU1dSVU5fSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaAppbmRleCA0MzgyMzk3Li5jNzJkZmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCkBAIC0yMiw3ICsyMiwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9zeXN0ZW1zdGF0c19zIHsKIAogICAgbmV0c25tcF9pbmRleCBvaWRfaW5kZXg7ICAgLyogTVVTVCBCRSBGSVJTVCEhIGZvciBjb250YWluZXIgdXNlICovCi0gICBvaWQgICAgICAgICAgIG5zX2lwX3ZlcnNpb247CisgICAvKiAKKyAgICAqIEluZGV4IG9mIHRoZSB0YWJsZQorICAgICogRmlyc3QgZW50cnkgPSBpcCB2ZXJzaW9uCisgICAgKiBTZWNvbmQgZW50cnkgPSBpbnRlcmZhY2UgaW5kZXggKDAgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSAqLworICAgb2lkICAgICAgICAgICBpbmRleFsyXTsgICAgICAgICAgIAogCiAgICBpbnQgICAgICAgZmxhZ3M7IC8qIGZvciBuZXQtc25tcCB1c2UgKi8KIApAQCAtMzIsNiArMzYsMTEgQEAKICAgICAqLwogICAgbmV0c25tcF9pcHN0YXRzIHN0YXRzOwogCisgICAvKgorICAgICogZm9yIGxvZ2dpbmcKKyAgICAqLworICAgY29uc3QgY2hhciogdGFibGVOYW1lOworICAgCiAgICAvKiogb2xkX3N0YXRzIGlzIHVzZWQgaW4gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X3VwZGF0ZV9zdGF0cyAqLwogICAgbmV0c25tcF9pcHN0YXRzICpvbGRfc3RhdHM7CiAKQEAgLTQ1LDE3ICs1NCwyNCBAQAogLyoKICAqIGluaXQKICAqLwordm9pZCBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19pbml0KHZvaWQpOworCisvKgorICogaW5pdAorICovCiBuZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9pbml0KHVfaW50IGluaXRfZmxhZ3MpOwogI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19JTklUX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKICNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfSU5JVF9BRERMX0lEWF9CWV9BRERSICAgICAgMHgwMDAxCiAKLS8qCi0gKiBsb2FkIGFuZCBmcmVlCisvKioKKyAqIExvYWQgY29udGFpbmVyLiBJZiB0aGUgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFIGlzIHNldAorICogdGhlIGlwSWZTeXN0ZW1TdGF0cyB0YWJsZSBpcyBsb2FkZWQsIGVsc2UgaXBTeXN0ZW1TdGF0c1RhYmxlIGlzIGxvYWRlZC4KICAqLwogbmV0c25tcF9jb250YWluZXIqCiBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CiAjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUgICAgICAgICAgICAgICAweDAwMDEgCiAKIHZvaWQgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZnJlZV9mbGFncyk7CkBAIC02OCw3ICs4NCw4IEBACiAgKiBjcmVhdGUvZnJlZSBhbiBlbnRyeQogICovCiBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICoKLW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbik7CituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoaW50IHZlcnNpb24sIGludCBpZl9pbmRleCwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhYmxlTmFtZSk7CiAKIHZvaWQgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICogZW50cnkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaAppbmRleCA2NDcwNGQyLi4zNjIzMWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKQEAgLTQxLDYgKzQxLDcgQEAKICAgICAgICAgdV9zaG9ydCAgIHJtdF9wb3J0OwogCiAgICAgICAgIHVfaW50ICAgICBpbnN0YW5jZTsKKyAgICAgICAgdV9pbnQgICAgIHBpZDsKICAgIAogICAgIH0gbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCmluZGV4IGYxMzJmM2IuLjUyZWNjM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgQVNOMV9ICiAjZGVmaW5lIEFTTjFfSAogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vaWQuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgpAQCAtMzcsMTYgKzM5LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIE1BWF9TVUJJRCAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSAtIGR1cGxpY2F0ZSBkZWZpbml0aW9uIHByb3RlY3Rpb24gKi8KLSNpZm5kZWYgRUlHSFRCSVRfU1VCSURTCi0gICAgdHlwZWRlZiB1X2xvbmcgIG9pZDsKLSNkZWZpbmUgTUFYX1NVQklEICAgMHhGRkZGRkZGRgotI2Vsc2UKLSAgICB0eXBlZGVmIHVfY2hhciAgb2lkOwotI2RlZmluZSBNQVhfU1VCSUQgICAweEZGCi0jZW5kaWYKLSNlbmRpZgotCiAjZGVmaW5lIE1JTl9PSURfTEVOCSAgICAyCiAjZGVmaW5lIE1BWF9PSURfTEVOCSAgICAxMjggLyogbWF4IHN1YmlkJ3MgaW4gYW4gb2lkICovCiAjaWZuZGVmIE1BWF9OQU1FX0xFTiAgICAgICAgICAgIC8qIGNvbmZsaWN0cyB3aXRoIHNvbWUgbGlicmFyaWVzICovCkBAIC0xODYsMzcgKzE3OCw1NiBAQAogCiAKICAgICBpbnQgICAgICAgICAgICAgYXNuX2NoZWNrX3BhY2tldCh1X2NoYXIgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfaW50KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIGxvbmcgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9pbnQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsIGNvbnN0IGxvbmcgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV91bnNpZ25lZF9pbnQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfdW5zaWduZWRfaW50KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfbG9uZyAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9zdHJpbmcodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9zdHJpbmcodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX2hlYWRlcih1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqKTsKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX3NlcXVlbmNlKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIHVfY2hhciBleHBlY3RlZF90eXBlLCAgICAgIC8qIG11c3QgYmUgdGhpcyB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplc3RyKTsgICAgICAgLyogZXJyb3IgbWVzc2FnZSBwcmVmaXggKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfaGVhZGVyKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9zZXF1ZW5jZSh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfbGVuZ3RoKHVfY2hhciAqLCB1X2xvbmcgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX2xlbmd0aCh1X2NoYXIgKiwgc2l6ZV90ICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX29iamlkKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9vYmppZCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9udWxsKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9udWxsKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfYml0c3RyaW5nKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfYml0c3RyaW5nKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvdW50ZXI2NCAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb3VudGVyNjQgKiwgc2l6ZV90KTsKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAppbmRleCBhY2Q1ZDQwLi41NmNkYmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaApAQCAtMjcsNiArMjcsOCBAQAogI2RlZmluZSBTTk1QX0NBTExCQUNLX1BPU1RfUFJFTUlCX1JFQURfQ09ORklHCTMKICNkZWZpbmUgU05NUF9DQUxMQkFDS19MT0dHSU5HCQkJNAogI2RlZmluZSBTTk1QX0NBTExCQUNLX1NFU1NJT05fSU5JVAkJNQorI2RlZmluZSBTTk1QX0NBTExCQUNLX1BSRV9SRUFEX0NPTkZJRwkgICAgICAgIDcKKyNkZWZpbmUgU05NUF9DQUxMQkFDS19QUkVfUFJFTUlCX1JFQURfQ09ORklHCTgKIAogCiAgICAgLyoKQEAgLTQ5LDIxICs1MSwyOSBAQAogICAgIC8qCiAgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcyAKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBpbml0X2NhbGxiYWNrcyh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUENhbGxiYWNrICogbmV3X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywgaW50IHByaW9yaXR5KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBDYWxsYmFjayAqIG5ld19jYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGVyX2FyZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9jYWxsYmFja19hdmFpbGFibGUoaW50IG1ham9yLCBpbnQgbWlub3IpOyAgICAgIC8qIGlzID4xIGF2YWlsYWJsZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfY291bnRfY2FsbGJhY2tzKGludCBtYWpvciwgaW50IG1pbm9yKTsgLyogcmV0IHRoZSBudW1iZXIgcmVnaXN0ZXJlZCAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhpbnQgbWFqb3IsIGludCBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBDYWxsYmFjayAqIG5ld19jYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywgaW50IG1hdGNoYXJncyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgY2xlYXJfY2FsbGJhY2sgKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2NsZWFyX2NsaWVudF9hcmcodm9pZCAqLCBpbnQgaSwgaW50IGopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhNzlkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaApAQCAtMCwwICsxLDIyNiBAQAorI2lmbmRlZiBORVRTTk1QX0NFUlRfVVRJTF9ICisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCisKKyNpZm5kZWYgSEVBREVSX1NTTF9ICisjZXJyb3IgIm11c3QgaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4gYmVmb3JlIGNlcnRfdXRpbC5oIgorI2VuZGlmCisjaWZuZGVmIEhFQURFUl9YNTA5X0gKKyNlcnJvciAibXVzdCBpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4gYmVmb3JlIGNlcnRfdXRpbC5oIgorI2VuZGlmCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogbmV0c25tcF9jZXJ0IHN0cnVjdHVyZXMsIGRlZmluZXMgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zCisgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBuZXRzbm1wX2NlcnRzX2luaXQodm9pZCk7Cit2b2lkIG5ldHNubXBfY2VydHNfYWdlbnRfaW5pdCh2b2lkKTsKK3ZvaWQgbmV0c25tcF9jZXJ0c19zaHV0ZG93bih2b2lkKTsKK3ZvaWQgbmV0c25tcF9jZXJ0c19sb2FkKHZvaWQpOworbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY2VydF9nZXRfdHJ1c3RsaXN0KHZvaWQpOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9jZXJ0X2NvbW1vbl9zIHsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmRpcjsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmZpbGVuYW1lOworICAgICAgICAKKyAgICAgICAgdV9jaGFyICAgICAgICAgIHR5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgICBhbGxvd2VkX3VzZXM7CisgICAgICAgIHVfY2hhciAgICAgICAgICBfcGFkWzJdOyAvKiBmb3IgZnV0dXJlIHVzZSAqLworICAgIH0gbmV0c25tcF9jZXJ0X2NvbW1vbjsKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfa2V5X3MgeworICAgICAgICBuZXRzbm1wX2NlcnRfY29tbW9uIGluZm87CisKKyAgICAgICAgRVZQX1BLRVkgICAgICAgKm9rZXk7CisgICAgICAgIHN0cnVjdCBuZXRzbm1wX2NlcnRfcyAgICpjZXJ0OworICAgIH0gbmV0c25tcF9rZXk7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2NlcnRfcyB7CisgICAgICAgIG5ldHNubXBfY2VydF9jb21tb24gaW5mbzsKKworICAgICAgICBYNTA5ICAgICAgICAgICAqb2NlcnQ7CisgICAgICAgIG5ldHNubXBfa2V5ICAgICprZXk7CisgICAgICAgIHN0cnVjdCBuZXRzbm1wX2NlcnRfcyAqaXNzdWVyX2NlcnQ7CisKKyAgICAgICAgY2hhciAgICAgICAgICAgKmlzc3VlcjsKKyAgICAgICAgY2hhciAgICAgICAgICAgKnN1YmplY3Q7CisgICAgICAgIGNoYXIgICAgICAgICAgICpmaW5nZXJwcmludDsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmNvbW1vbl9uYW1lOworCisgICAgICAgIHVfY2hhciAgICAgICAgICBoYXNoX3R5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgICBfcGFkWzNdOyAvKiBmb3IgZnV0dXJlIHVzZSAqLworICAgIH0gbmV0c25tcF9jZXJ0OworCisvKiogdHlwZXMgKi8KKyAgICBlbnVtIHsgTlNfQ0VSVF9UWVBFX1VOS05PV04gPSAwLCBOU19DRVJUX1RZUEVfUEVNLCBOU19DRVJUX1RZUEVfREVSLAorICAgICAgICAgICBOU19DRVJUX1RZUEVfUEtDUzEyLCBOU19DRVJUX1RZUEVfS0VZIH07CisKKy8qKiB1c2VzICovCisjZGVmaW5lIE5TX0NFUlRfSURFTlRJVFkgICAgICAgMHgwMDAxCisjZGVmaW5lIE5TX0NFUlRfUkVNT1RFX1BFRVIgICAgMHgwMDAyCisjZGVmaW5lIE5TX0NFUlRfUkVTRVJWRUQxICAgICAgMHgwMDA0CisjZGVmaW5lIE5TX0NFUlRfQ0EgICAgICAgICAgICAgMHgwMDA4CisKKy8qKiBzb3VyY2UgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9ERUZBVUxUICAgICAgIDB4MDAwIC8qIGdldCBkZWZhdWx0IGZyb20gRFMgc3RvcmUgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9GSUxFICAgICAgICAgIDB4MDAxIC8qIGZpbGVuYW1lL2Z1bGwgcGF0aCAqLworI2RlZmluZSBOU19DRVJUS0VZX0ZJTkdFUlBSSU5UICAgMHgwMDIgLyogcHVibGljIGtleSBmaW5nZXJwcmludCAqLworI2RlZmluZSBOU19DRVJUS0VZX0NBICAgICAgICAgICAgMHgwMDQgLyogdHJ1c3RlZCBDQSAqLworI2RlZmluZSBOU19DRVJUS0VZX1NBTl9SRkM4MjIgICAgMHgwMDggLyogc3ViaiBhbHQgbmFtZTogcmZjODIyICovCisjZGVmaW5lIE5TX0NFUlRLRVlfU0FOX0ROUyAgICAgICAweDAxMCAvKiBzdWJqIGFsdCBuYW1lOiBETlMgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9TQU5fSVBBRERSICAgIDB4MDIwIC8qIHN1YmogYWx0IG5hbWU6IElQIGFkZHJlc3MgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9DT01NT05fTkFNRSAgIDB4MDQwIC8qIGNvbW1vbiBuYW1lICovCisjZGVmaW5lIE5TX0NFUlRLRVlfVEFSR0VUX1BBUkFNICAweDA4MCAvKiB0bHN0bVBhcmFtc1RhYmxlICovCisjZGVmaW5lIE5TX0NFUlRLRVlfVEFSR0VUX0FERFIgICAweDEwMCAvKiB0bHN0bUFkZHJUYWJsZSAqLworI2RlZmluZSBOU19DRVJUS0VZX01VTFRJUExFICAgICAgMHgyMDAgLyogdHJ5IG11bHRpcGxlIHNvdXJjZXMgKi8KKworLyoqIFJGQyA1MjQ2IGhhc2ggYWxnb3JpdGhtcyAoU2VjdGlvbiA3LjQuMS40LjEpICovCisjZGVmaW5lIE5TX0hBU0hfTk9ORSAgICAgICAgMAorI2RlZmluZSBOU19IQVNIX01ENSAgICAgICAgIDEKKyNkZWZpbmUgTlNfSEFTSF9TSEExICAgICAgICAyCisjZGVmaW5lIE5TX0hBU0hfU0hBMjI0ICAgICAgMworI2RlZmluZSBOU19IQVNIX1NIQTI1NiAgICAgIDQKKyNkZWZpbmUgTlNfSEFTSF9TSEEzODQgICAgICA1CisjZGVmaW5lIE5TX0hBU0hfU0hBNTEyICAgICAgNgorI2RlZmluZSBOU19IQVNIX01BWCAgICAgICAgIE5TX0hBU0hfU0hBNTEyCisKKy8qKiBTTk1QLVRMUy1UTS1NSUIgKi8KKyNkZWZpbmUgU05NUFRMU0ZJTkdFUlBSSU5UX01BWF9MRU4gICAyNTUKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogbmV0c25tcF9jZXJ0IGZ1bmN0aW9uIGRlZmluaXRpb25zCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICBuZXRzbm1wX2NlcnQgKm5ldHNubXBfY2VydF9maW5kKGludCB3aGF0LCBpbnQgd2hlcmUsIHZvaWQgKmhpbnQpOworCisgICAgaW50IG5ldHNubXBfY2VydF9jaGVja192Yl9maW5nZXJwcmludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CisKKyAgICB2b2lkIG5ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihjaGFyICpmcCk7CisgICAgaW50IG5ldHNubXBfY2VydF9wYXJzZV9oYXNoX3R5cGUoY29uc3QgY2hhciAqc3RyKTsKKyAgICBpbnQgbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoaW50IGhhc2hfdHlwZSwgY29uc3QgY2hhciAqaGV4X2ZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip0bHNfZnAsIHNpemVfdCAqdGxzX2ZwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MpOworICAgIGludCBuZXRzbm1wX3Rsc19maW5nZXJwcmludF9wYXJzZShjb25zdCB1X2NoYXIgKmJpbmFyeV9mcCwgaW50IGZwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmZwX3N0cl9wdHIsIHVfaW50ICpmcF9zdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywgdV9jaGFyICpoYXNoX3R5cGVfcHRyKTsKKworCisgICAgaW50IG5ldHNubXBfY2VydF90cnVzdChTU0xfQ1RYICpjdHgsIG5ldHNubXBfY2VydCAqdGhpc2NlcnQpOworICAgIGludCBuZXRzbm1wX2NlcnRfdHJ1c3RfY2EoU1NMX0NUWCAqY3R4LCBuZXRzbm1wX2NlcnQgKnRoaXNjZXJ0c3Jvb3RjYSk7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogIGNlcnRpZmljYXRlIHRvIFRyYW5zcG9ydCBTZWN1cml0eSBOYW1lIG1hcHBpbmcgKG5ldHNubXBfY2VydF9tYXApCisgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWUgICAgICAgICAgICAgMgorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTkROU05hbWUgICAgICAgICAgICAgICAgMworI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzcyAgICAgICAgICAgICAgNAorI2RlZmluZSBUU05NX3Rsc3RtQ2VydFNBTkFueSAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWUgICAgICAgICAgICAgICAgNgorI2RlZmluZSBUU05NX3Rsc3RtQ2VydF9NQVggICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lCisKKyNkZWZpbmUgTlNDTV9GUk9NX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBOU0NNX0ZST01fTUlCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE5TQ01fTk9OVk9MQVRJTEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfY2VydF9tYXBfcyB7CisgICAgICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmZpbmdlcnByaW50OworICAgICAgICBpbnQgICAgICAgICAgICAgbWFwVHlwZTsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmRhdGE7CisKKyAgICAgICAgY2hhciAgICAgICAgICAgIGhhc2hUeXBlOworICAgICAgICBjaGFyICAgICAgICAgICAgZmxhZ3M7CisKKyAgICAgICAgWDUwOSAgICAgICAgICAgKm9jZXJ0OworICAgIH0gbmV0c25tcF9jZXJ0X21hcDsKKworICAgIG5ldHNubXBfY2VydF9tYXAgKm5ldHNubXBfY2VydF9tYXBfYWxsb2MoY2hhciAqZnAsIFg1MDkgKm9jZXJ0KTsKKyAgICB2b2lkIG5ldHNubXBfY2VydF9tYXBfZnJlZShuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCk7CisgICAgaW50IG5ldHNubXBfY2VydF9tYXBfYWRkKG5ldHNubXBfY2VydF9tYXAgKm1hcCk7CisgICAgaW50IG5ldHNubXBfY2VydF9tYXBfcmVtb3ZlKG5ldHNubXBfY2VydF9tYXAgKm1hcCk7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbmV0c25tcF9jZXJ0X21hcF9maW5kKG5ldHNubXBfY2VydF9tYXAgKm1hcCk7CisKKyAgICB2b2lkIG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmMpOworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9jcmVhdGUoaW50IHdpdGhfZnApOworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcih2b2lkKTsKKworICAgIGludCBuZXRzbm1wX2NlcnRfZ2V0X3NlY25hbWVfbWFwcyhuZXRzbm1wX2NvbnRhaW5lciAqY20pOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqICBzbm1wVGxzdG1QYXJhbXNUYWJsZSBkYXRhCisgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBzbm1wVGxzdG1QYXJhbXNfcyB7CisgICAgICAgIGNoYXIgICAgICAgICAqbmFtZTsKKyAgICAgICAgY2hhciAgICAgICAgICpmaW5nZXJwcmludDsKKyAgICAgICAgY2hhciAgICAgICAgICBoYXNoVHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICBmbGFnczsKKyAgICAgICAgdV9jaGFyICAgICAgICBmaW5nZXJwcmludF9sZW47CisgICAgfSBzbm1wVGxzdG1QYXJhbXM7CisgICAgCisjZGVmaW5lIFRMU1RNX1BBUkFNU19GUk9NX0NPTkZJRyAgICAgICAgICAweDAxCisjZGVmaW5lIFRMU1RNX1BBUkFNU19GUk9NX01JQiAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFRMU1RNX1BBUkFNU19OT05WT0xBVElMRSAgICAgICAgICAweDA0CisvKiogaW5lIFRMU1RNX1BBUkFNU19YWFggICAgICAgICAgICAgICAgICAweDA4ICovCisKKyAgICBzbm1wVGxzdG1QYXJhbXMgKm5ldHNubXBfdGxzdG1QYXJhbXNfY3JlYXRlKGNvbnN0IGNoYXIgKnRhZywgaW50IGhhc2hUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnAsIGludCBmcF9sZW4pOworICAgIHZvaWQgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHNubXBUbHN0bVBhcmFtcyAqc3RwKTsKKyAgICBzbm1wVGxzdG1QYXJhbXMgKm5ldHNubXBfdGxzdG1QYXJhbXNfcmVzdG9yZV9jb21tb24oY2hhciAqKmxpbmUpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfdGxzdG1QYXJhbXNfY29udGFpbmVyKHZvaWQpOworICAgIGludCBuZXRzbm1wX3Rsc3RtUGFyYW1zX2FkZChzbm1wVGxzdG1QYXJhbXMgKnN0cCk7CisgICAgaW50IG5ldHNubXBfdGxzdG1QYXJhbXNfcmVtb3ZlKHNubXBUbHN0bVBhcmFtcyAqc3RwKTsKKyAgICBzbm1wVGxzdG1QYXJhbXMgKm5ldHNubXBfdGxzdG1QYXJhbXNfZmluZChzbm1wVGxzdG1QYXJhbXMgKnN0cCk7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhCisgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBzbm1wVGxzdG1BZGRyX3MgeworICAgICAgICBjaGFyICAgICAgICAgKm5hbWU7CisgICAgICAgIGNoYXIgICAgICAgICAqZmluZ2VycHJpbnQ7CisgICAgICAgIGNoYXIgICAgICAgICAqaWRlbnRpdHk7CisgICAgICAgIAorICAgICAgICB1X2NoYXIgICAgICAgIGhhc2hUeXBlOworICAgICAgICB1X2NoYXIgICAgICAgIGZsYWdzOworICAgICAgICAKKyAgICB9IHNubXBUbHN0bUFkZHI7CisKKyNkZWZpbmUgVExTVE1fQUREUl9GUk9NX0NPTkZJRyAgICAgICAgICAweDAxCisjZGVmaW5lIFRMU1RNX0FERFJfRlJPTV9NSUIgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBUTFNUTV9BRERSX05PTlZPTEFUSUxFICAgICAgICAgIDB4MDQKKy8qKiBpbmUgVExTVE1fQUREUl9YWFggICAgICAgICAgICAgICAgICAweDA4ICovCisKKyAgICBpbnQgbmV0c25tcF90bHN0bUFkZHJfcmVzdG9yZV9jb21tb24oY2hhciAqKmxpbmUsIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmFtZV9sZW4sIGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkX2xlbiwgY2hhciAqZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZnBfbGVuLCB1X2NoYXIgKmh0KTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKHZvaWQpOworICAgIHNubXBUbHN0bUFkZHIgKm5ldHNubXBfdGxzdG1BZGRyX2ZpbmQoc25tcFRsc3RtQWRkciAqZW50cnkpOworICAgIHNubXBUbHN0bUFkZHIgKm5ldHNubXBfdGxzdG1BZGRyX2NyZWF0ZShjaGFyICp0YXJnZXRBZGRyTmFtZSk7CisgICAgdm9pZCBuZXRzbm1wX3Rsc3RtQWRkcl9mcmVlKHNubXBUbHN0bUFkZHIgKmVudHJ5KTsKKyAgICBpbnQgbmV0c25tcF90bHN0bUFkZHJfYWRkKHNubXBUbHN0bUFkZHIgKmVudHJ5KTsKKyAgICBpbnQgbmV0c25tcF90bHN0bUFkZHJfcmVtb3ZlKHNubXBUbHN0bUFkZHIgKmVudHJ5KTsKKyAgICBjaGFyICpuZXRzbm1wX3Rsc3RtQWRkcl9nZXRfc2VydmVySWQoY29uc3QgY2hhciAqbmFtZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpICovCisKKyNlbmRpZiAvKiBORVRTTk1QX0NFUlRfVVRJTF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCmluZGV4IDQyNzFmNzYuLjFlMTYxNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaApAQCAtMTgsMjEgKzE4LDMxIEBACiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfc2l6ZV9yYW5nZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3csIHNpemVfdCBoaWdoICk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgc2l6ZV90IHNpemUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgc2l6ZV90IHNpemUpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9vaWQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfaW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3VpbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGlnaCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3RydXRodmFsdWUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfdmFsdWUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgb2xkX3ZhbCk7CisgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBvbGRfdmFsLCBpbnQgb2xkX3N0b3JhZ2UpOwogCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfc3RvcmFnZXR5cGUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBvbGRfdmFsKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NzVjNmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi0vKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKLSAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCi0gKiB0aGF0IG1heSBhcHBseToKLSAqLwotLyoKLSAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6Ci0gKiBDb3B5cmlnaHQgqSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCi0gKi8KLQotLyoKLSAqICBDTVUgY29tcGF0YWJpbGl0eSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4KLSAqCi0gKiAgICAoc2luY2UgdGhlIFVDRCBwYWNrYWdlIHNwbGl0IGZyb20gdGhlIENNVSBvbmUKLSAqICAgICBhYm91dCA4IHllYXJzIGFnbywgdGhhdCdzIHByb2JhYmx5IGVub3VnaCB0aW1lCi0gKiAgICAgZm9yIHBlb3BsZSB0byBjb252ZXJ0IGFueSBvdXRzdGFuZGluZyBjb2RlISkKLSAqLwotCi0jaWZuZGVmIE5FVF9TTk1QX0NNVV9DT01QQVRfSAotI2RlZmluZSBORVRfU05NUF9DTVVfQ09NUEFUX0gKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gICAgICAgICAgIkMiIHsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICogKgotICAgICAqICogRW51bWVyYXRpb25zIGFuZCBkZWZpbml0aW9ucwotICAgICAqICoKLSAgICAgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICovCi0jaW5jbHVkZSA8bmV0LXNubXAvZGVmaW5pdGlvbnMuaD4KLSAgICAvKgotICAgICAqIEZyb20gcGFyc2UuaCAKLSAgICAgKi8KLSNkZWZpbmUgQUNDRVNTX1JFQURPTkxZCQlNSUJfQUNDRVNTX1JFQURPTkxZCi0jZGVmaW5lIEFDQ0VTU19SRUFEV1JJVEUJTUlCX0FDQ0VTU19SRUFEV1JJVEUKLSNkZWZpbmUgQUNDRVNTX1dSSVRFT05MWQlNSUJfQUNDRVNTX1dSSVRFT05MWQotI2RlZmluZSBBQ0NFU1NfTk9BQ0NFU1MJCU1JQl9BQ0NFU1NfTk9BQ0NFU1MKLSNkZWZpbmUgQUNDRVNTX05PVElGWQkJTUlCX0FDQ0VTU19OT1RJRlkKLSNkZWZpbmUgQUNDRVNTX0NSRUFURQkJTUlCX0FDQ0VTU19DUkVBVEUKLSNkZWZpbmUgU1RBVFVTX01BTkRBVE9SWQlNSUJfU1RBVFVTX01BTkRBVE9SWQotI2RlZmluZSBTVEFUVVNfT1BUSU9OQUwJCU1JQl9TVEFUVVNfT1BUSU9OQUwKLSNkZWZpbmUgU1RBVFVTX09CU09MRVRFCQlNSUJfU1RBVFVTX09CU09MRVRFCi0jZGVmaW5lIFNUQVRVU19ERVBSRUNBVEVECU1JQl9TVEFUVVNfREVQUkVDQVRFRAotI2RlZmluZSBTVEFUVVNfQ1VSUkVOVAkJTUlCX1NUQVRVU19DVVJSRU5UCi0gICAgLyoKLSAgICAgKiBGcm9tIHNtbnBfaW1wbC5oIAotICAgICAqLwotI2RlZmluZSBJTlRFR0VSCSAgICBBU05fSU5URUdFUgotI2RlZmluZSBTVFJJTkcJICAgIEFTTl9PQ1RFVF9TVFIKLSNkZWZpbmUgT0JKSUQJICAgIEFTTl9PQkpFQ1RfSUQKLSNkZWZpbmUgTlVMTE9CSgkgICAgQVNOX05VTEwKLSNkZWZpbmUgQklUU1RSSU5HICAgQVNOX0JJVF9TVFIgLyogSElTVE9SSUMgLSBkb24ndCB1c2UgKi8KLSNkZWZpbmUgSVBBRERSRVNTICAgQVNOX0lQQUREUkVTUwotI2RlZmluZSBDT1VOVEVSCSAgICBBU05fQ09VTlRFUgotI2RlZmluZSBHQVVHRQkgICAgQVNOX0dBVUdFCi0jZGVmaW5lIFVOU0lHTkVEICAgIEFTTl9VTlNJR05FRAotI2RlZmluZSBUSU1FVElDS1MgICBBU05fVElNRVRJQ0tTCi0jZGVmaW5lIEFTTlRfT1BBUVVFIEFTTl9PUEFRVUUKLSNkZWZpbmUgTlNBUAkgICAgQVNOX05TQVAKLSNkZWZpbmUgQ09VTlRFUjY0ICAgQVNOX0NPVU5URVI2NAotI2RlZmluZSBVSU5URUdFUiAgICBBU05fVUlOVEVHRVIKLSAgICAvKgotICAgICAqIEZyb20gc25tcC5oIAotICAgICAqLwotI2RlZmluZSBHRVRfUkVRX01TRwkgICAgU05NUF9NU0dfR0VUCi0jZGVmaW5lIEdFVE5FWFRfUkVRX01TRwkgICAgU05NUF9NU0dfR0VUTkVYVAotI2RlZmluZSBHRVRfUlNQX01TRwkgICAgU05NUF9NU0dfUkVTUE9OU0UKLSNkZWZpbmUgU0VUX1JFUV9NU0cJICAgIFNOTVBfTVNHX1NFVAotI2RlZmluZSBUUlBfUkVRX01TRwkgICAgU05NUF9NU0dfVFJBUAotI2RlZmluZSBCVUxLX1JFUV9NU0cJICAgIFNOTVBfTVNHX0dFVEJVTEsKLSNkZWZpbmUgSU5GT1JNX1JFUV9NU0cJICAgIFNOTVBfTVNHX0lORk9STQotI2RlZmluZSBUUlAyX1JFUV9NU0cJICAgIFNOTVBfTVNHX1RSQVAyCi0jZGVmaW5lIFJFUE9SVF9SU1BfTVNHCSAgICBTTk1QX01TR19SRVBPUlQKLSAgICAvKgotICAgICAqIHNpbmNlIENNVSBWMS41IAotICAgICAqLwotI2RlZmluZSBTTk1QX1BEVV9HRVQJICAgIFNOTVBfTVNHX0dFVAotI2RlZmluZSBTTk1QX1BEVV9HRVRORVhUICAgIFNOTVBfTVNHX0dFVE5FWFQKLSNkZWZpbmUgU05NUF9QRFVfUkVTUE9OU0UgICBTTk1QX01TR19SRVNQT05TRQotI2RlZmluZSBTTk1QX1BEVV9TRVQgICAgICAgIFNOTVBfTVNHX1NFVAotI2RlZmluZSBTTk1QX1BEVV9HRVRCVUxLICAgIFNOTVBfTVNHX0dFVEJVTEsKLSNkZWZpbmUgU05NUF9QRFVfSU5GT1JNICAgICBTTk1QX01TR19JTkZPUk0KLSNkZWZpbmUgU05NUF9QRFVfVjJUUkFQICAgICBTTk1QX01TR19UUkFQMgotI2RlZmluZSBTTk1QX1BEVV9SRVBPUlQgICAgIFNOTVBfTVNHX1JFUE9SVAotI2RlZmluZSBTTk1QX1RSQVBfQVVUSEVOVElDQVRJT05GQUlMVVJFIFNOTVBfVFJBUF9BVVRIRkFJTAotI2RlZmluZSBTTUlfSU5URUdFUiAgICAgQVNOX0lOVEVHRVIKLSNkZWZpbmUgU01JX1NUUklORyAgICAgIEFTTl9PQ1RFVF9TVFIKLSNkZWZpbmUgU01JX09CSklEICAgICAgIEFTTl9PQkpFQ1RfSUQKLSNkZWZpbmUgU01JX05VTExPQkogICAgIEFTTl9OVUxMCi0jZGVmaW5lIFNNSV9JUEFERFJFU1MgICBBU05fSVBBRERSRVNTCi0jZGVmaW5lIFNNSV9DT1VOVEVSMzIJQVNOX0NPVU5URVIKLSNkZWZpbmUgU01JX0dBVUdFMzIJQVNOX0dBVUdFCi0jZGVmaW5lIFNNSV9VTlNJR05FRDMyICBTTUlfR0FVR0UzMgotI2RlZmluZSBTTUlfVElNRVRJQ0tTICAgQVNOX1RJTUVUSUNLUwotI2RlZmluZSBTTUlfT1BBUVVFICAgICAgQVNOX09QQVFVRQotI2RlZmluZSBTTUlfQ09VTlRFUjY0ICAgQVNOX0NPVU5URVI2NAotICAgIC8qCi0gICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAqICoKLSAgICAgKiAqICAgICBGdW5jdGlvbiBkZWNsYXJhdGlvbnMKLSAgICAgKiAqICAgICBhbmQgZ2xvYmFsIHZhcmlhYmxlcwotICAgICAqICoKLSAgICAgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICovCi1leHRlcm4gaW50ICAgICAgc25tcF9kdW1wX3BhY2tldDsgICAgICAgLyogZnJvbSBzbm1wX2FwaS5oICovCi1leHRlcm4gaW50ICAgICAgcXVpY2tfcHJpbnQ7ICAgIC8qIGZyb20gc25tcF9hcGkuaCAqLwotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4gICAgIC8qIGZvciBzbm1wX3BkdSAmIHNubXBfc2Vzc2lvbiAqLwotCi1pbnQgICAgICAgICAgICAgbWliX1R4dFRvT2lkKGNoYXIgKiwgb2lkICoqLCBzaXplX3QgKik7IC8qIGZyb20gc25tcC5oICovCi1pbnQgICAgICAgICAgICAgbWliX09pZFRvVHh0KG9pZCAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90KTsgICAgLyogZnJvbSBzbm1wLmggKi8KLXVfY2hhciAgICAgICAgICpjbXVfc25tcF9wYXJzZShuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsgICAgICAvKiBmcm9tIHNubXAuaCAqLwotCi0KLQotCi0gICAgICAgIC8qCi0gICAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICogKgotICAgICAgICAgKiAqIE1JQi1JSSBkYXRhIHN0cnVjdHVyZXMKLSAgICAgICAgICogKiAgICAoZnJvbSBtaWIuaCkgCi0gICAgICAgICAqICoKLSAgICAgICAgICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgICAgKi8KLQotCi1zdHJ1Y3QgbWliX3N5c3RlbSB7Ci0gICAgY2hhciAgICAgICAgICAgIHN5c0Rlc2NyWzMyXTsgICAgICAgLyogdGV4dHVhbCBkZXNjcmlwdGlvbiAqLwotICAgIHVfY2hhciAgICAgICAgICBzeXNPYmplY3RJRFsxNl07ICAgIC8qIE9CSkVDVCBJREVOVElGSUVSIG9mIHN5c3RlbSAqLwotICAgIHVfY2hhciAgICAgICAgICBPYmpJRExlbjsgICAvKiBsZW5ndGggb2Ygc3lzT2JqZWN0SUQgKi8KLSAgICB1X2ludCAgICAgICAgICAgc3lzVXBUaW1lOyAgLyogVXB0aW1lIGluIDEwMC9zIG9mIGEgc2Vjb25kICovCi19OwotCi1zdHJ1Y3QgbWliX2ludGVyZmFjZSB7Ci0gICAgaW50ICAgICAgICAgICAgIGlmTnVtYmVyOyAgIC8qIG51bWJlciBvZiBpbnRlcmZhY2VzICovCi19OwotCi1zdHJ1Y3QgbWliX2lmRW50cnkgewotICAgIGludCAgICAgICAgICAgICBpZkluZGV4OyAgICAvKiBpbmRleCBvZiB0aGlzIGludGVyZmFjZSAgKi8KLSAgICBjaGFyICAgICAgICAgICAgaWZEZXNjclszMl07ICAgICAgICAvKiBlbmdsaXNoIGRlc2NyaXB0aW9uIG9mIGludGVyZmFjZSAqLwotICAgIGludCAgICAgICAgICAgICBpZlR5cGU7ICAgICAvKiBuZXR3b3JrIHR5cGUgb2YgZGV2aWNlICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgaWZNdHU7ICAgICAgLyogc2l6ZSBvZiBsYXJnZXN0IHBhY2tldCBpbiBieXRlcyAgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZTcGVlZDsgICAgLyogYmFuZHdpZHRoIGluIGJpdHMvc2VjICAgICovCi0gICAgdV9jaGFyICAgICAgICAgIGlmUGh5c0FkZHJlc3NbMTFdOyAgLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotICAgIHVfY2hhciAgICAgICAgICBQaHlzQWRkckxlbjsgICAgICAgIC8qIGxlbmd0aCBvZiBwaHlzQWRkciAqLwotICAgIGludCAgICAgICAgICAgICBpZkFkbWluU3RhdHVzOyAgICAgIC8qIGRlc2lyZWQgc3RhdGUgb2YgaW50ZXJmYWNlICovCi0gICAgaW50ICAgICAgICAgICAgIGlmT3BlclN0YXR1czsgICAgICAgLyogY3VycmVudCBvcGVyYXRpb25hbCBzdGF0dXMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZMYXN0Q2hhbmdlOyAgICAgICAvKiB2YWx1ZSBvZiBzeXNVcFRpbWUgd2hlbiBjdXJyZW50IHN0YXRlIGVudGVyZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJbk9jdGV0czsgLyogbnVtYmVyIG9mIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJblVjYXN0UGt0czsgICAgICAvKiBudW1iZXIgb2YgdW5pY2FzdCBwYWNrZXRzIGRlbGl2ZXJlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluTlVjYXN0UGt0czsgICAgIC8qIG51bWJlciBvZiBicm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJbkRpc2NhcmRzOyAgICAgICAvKiBudW1iZXIgb2YgcGFja2V0cyBkaXNjYXJkZWQgd2l0aCBubyBlcnJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluRXJyb3JzOyAvKiBudW1iZXIgb2YgcGFja2V0cyBjb250YWluaW5nIGVycm9ycyAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluVW5rbm93blByb3RvczsgIC8qIG51bWJlciBvZiBwYWNrZXRzIHdpdGggdW5rbm93biBwcm90b2NvbCAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dE9jdGV0czsgICAgICAgIC8qIG51bWJlciBvZiBvY3RldHMgdHJhbnNtaXR0ZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXRVY2FzdFBrdHM7ICAgICAvKiBudW1iZXIgb2YgdW5pY2FzdCBwYWNrZXRzIHNlbnQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXROVWNhc3RQa3RzOyAgICAvKiBudW1iZXIgb2YgYnJvYWRjYXN0IG9yIG11bHRpY2FzdCBwa3RzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0RGlzY2FyZHM7ICAgICAgLyogbnVtYmVyIG9mIHBhY2tldHMgZGlzY2FyZGVkIHdpdGggbm8gZXJyb3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXRFcnJvcnM7ICAgICAgICAvKiBudW1iZXIgb2YgcGt0cyBkaXNjYXJkZWQgd2l0aCBhbiBlcnJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dFFMZW47ICAvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBvdXRwdXQgcXVldWUgKi8KLX07Ci0KLXN0cnVjdCBtaWJfYXRFbnRyeSB7Ci0gICAgaW50ICAgICAgICAgICAgIGF0SWZJbmRleDsgIC8qIGludGVyZmFjZSBvbiB3aGljaCB0aGlzIGVudHJ5IG1hcHMgKi8KLSAgICB1X2NoYXIgICAgICAgICAgYXRQaHlzQWRkcmVzc1sxMV07ICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uICovCi0gICAgdV9jaGFyICAgICAgICAgIFBoeXNBZGRyZXNzTGVuOyAgICAgLyogbGVuZ3RoIG9mIGF0UGh5c0FkZHJlc3MgKi8KLSAgICB1X2ludCAgICAgICAgICAgYXROZXRBZGRyZXNzOyAgICAgICAvKiBJUCBhZGRyZXNzIG9mIHBoeXNpY2FsIGFkZHJlc3MgKi8KLX07Ci0KLXN0cnVjdCBtaWJfaXAgewotICAgIGludCAgICAgICAgICAgICBpcEZvcndhcmRpbmc7ICAgICAgIC8qIDEgaWYgZ2F0ZXdheSwgMiBpZiBob3N0ICovCi0gICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFRUTDsgICAgICAgLyogZGVmYXVsdCBUVEwgZm9yIHBrdHMgb3JpZ2luYXRpbmcgaGVyZSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluUmVjZWl2ZXM7ICAgICAgIC8qIG5vLiBvZiBJUCBwYWNrZXRzIHJlY2VpdmVkIGZyb20gaW50ZXJmYWNlcyAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluSGRyRXJyb3JzOyAgICAgIC8qIG51bWJlciBvZiBwa3RzIGRpc2NhcmRlZCBkdWUgdG8gaGVhZGVyIGVycm9ycyAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluQWRkckVycm9yczsgICAgIC8qIG5vLiBvZiBwa3RzIGRpc2NhcmRlZCBkdWUgdG8gYmFkIGFkZHJlc3MgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBGb3J3RGF0YWdyYW1zOyAgICAvKiBudW1iZXIgcGYgcGt0cyBmb3J3YXJkZWQgdGhyb3VnaCB0aGlzIGVudGl0eSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluVW5rbm93blByb3RvczsgIC8qIG5vLiBvZiBsb2NhbC1hZGRyZXNzZWQgcGt0cyB3L3Vua25vd24gcHJvdG8gKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJbkRpc2NhcmRzOyAgICAgICAvKiBudW1iZXIgb2YgZXJyb3ItZnJlZSBwYWNrZXRzIGRpc2NhcmRlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluRGVsaXZlcnM7ICAgICAgIC8qIG51bWJlciBvZiBkYXRhZ3JhbXMgZGVsaXZlcmVkIHRvIHVwcGVyIGxldmVsICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwT3V0UmVxdWVzdHM7ICAgICAgLyogbnVtYmVyIG9mIElQIGRhdGFncmFtcyBvcmlnaW5hdGluZyBsb2NhbGx5ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwT3V0RGlzY2FyZHM7ICAgICAgLyogbnVtYmVyIG9mIGVycm9yLWZyZWUgb3V0cHV0IElQIHBrdHMgZGlzY2FyZGVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwT3V0Tm9Sb3V0ZXM7ICAgICAgLyogbnVtYmVyIG9mIElQIHBrdHMgZGlzY2FyZGVkIGR1ZSB0byBubyByb3V0ZSAqLwotICAgIGludCAgICAgICAgICAgICBpcFJlYXNtVGltZW91dDsgICAgIC8qIHNlY29uZHMgZnJhZ21lbnQgaXMgaGVsZCBhd2FpdGluZyByZWFzc2VtYmx5ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwUmVhc21SZXFkczsgICAgICAgLyogbm8uIG9mIGZyYWdtZW50cyBuZWVkaW5nIHJlYXNzZW1ibHkgKGhlcmUpICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwUmVhc21PS3M7IC8qIG51bWJlciBvZiBmcmFnbWVudHMgcmVhc3NlbWJsZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBSZWFzbUZhaWxzOyAgICAgICAvKiBudW1iZXIgb2YgZmFpbHVyZXMgaW4gSVAgcmVhc3NlbWJseSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEZyYWdPS3M7ICAvKiBudW1iZXIgb2YgZGF0YWdyYW1zIGZyYWdtZW50ZWQgaGVyZSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEZyYWdGYWlsczsgICAgICAgIC8qIG5vLiBwa3RzIHVuYWJsZSB0byBiZSBmcmFnbWVudGVkIGhlcmUgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBGcmFnQ3JlYXRlczsgICAgICAvKiBudW1iZXIgb2YgSVAgZnJhZ21lbnRzIGNyZWF0ZWQgaGVyZSAqLwotfTsKLQotc3RydWN0IG1pYl9pcEFkZHJFbnRyeSB7Ci0gICAgdV9pbnQgICAgICAgICAgIGlwQWRFbnRBZGRyOyAgICAgICAgLyogSVAgYWRkcmVzcyBvZiB0aGlzIGVudHJ5ICovCi0gICAgaW50ICAgICAgICAgICAgIGlwQWRFbnRJZkluZGV4OyAgICAgLyogSUYgZm9yIHRoaXMgZW50cnkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBBZEVudE5ldE1hc2s7ICAgICAvKiBzdWJuZXQgbWFzayBvZiB0aGlzIGVudHJ5ICovCi0gICAgaW50ICAgICAgICAgICAgIGlwQWRFbnRCY2FzdEFkZHI7ICAgLyogcmVhZCB0aGUgTUlCIGZvciB0aGlzIG9uZSAqLwotICAgIGludCAJICAgIGlwQWRFbnRSZWFzbU1heFNpemU7Ci0JCS8qIG1heCBzaXplIGZvciBkZyByZWFzc2VtYmx5ICAge2lwQWRkckVudHJ5IDV9ICovCi19OwotCi1zdHJ1Y3QgbWliX2lwUm91dGVFbnRyeSB7Ci0gICAgdV9pbnQgICAgICAgICAgIGlwUm91dGVEZXN0OyAgICAgICAgLyogZGVzdGluYXRpb24gSVAgYWRkciBmb3IgdGhpcyByb3V0ZSAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlSWZJbmRleDsgICAgIC8qIGluZGV4IG9mIGxvY2FsIElGIGZvciB0aGlzIHJvdXRlICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVNZXRyaWMxOyAgICAgLyogUHJpbWFyeSByb3V0aW5nIG1ldHJpYyAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljMjsgICAgIC8qIEFsdGVybmF0ZSByb3V0aW5nIG1ldHJpYyAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljMzsgICAgIC8qIEFsdGVybmF0ZSByb3V0aW5nIG1ldHJpYyAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljNDsgICAgIC8qIEFsdGVybmF0ZSByb3V0aW5nIG1ldHJpYyAqLwotICAgIHVfaW50ICAgICAgICAgICBpcFJvdXRlTmV4dEhvcDsgICAgIC8qIElQIGFkZHIgb2YgbmV4dCBob3AgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZVR5cGU7ICAgICAgICAvKiBUeXBlIG9mIHRoaXMgcm91dGUgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZVByb3RvOyAgICAgICAvKiBIb3cgdGhpcyByb3V0ZSB3YXMgbGVhcm5lZCAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlQWdlOyAvKiBOby4gb2Ygc2Vjb25kcyBzaW5jZSB1cGRhdGluZyB0aGlzIHJvdXRlICovCi19OwotCi1zdHJ1Y3QgbWliX2ljbXAgewotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5Nc2dzOyAvKiBUb3RhbCBvZiBJQ01QIG1zZ3MgcmVjZWl2ZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluRXJyb3JzOyAgICAgICAvKiBUb3RhbCBvZiBJQ01QIG1zZ3MgcmVjZWl2ZWQgd2l0aCBlcnJvcnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluRGVzdFVucmVhY2hzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5UaW1lRXhjZHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblBhcm1Qcm9iczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluU3JjUXVlbmNoczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluUmVkaXJlY3RzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5FY2hvczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluRWNob1JlcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblRpbWVzdGFtcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblRpbWVzdGFtcFJlcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkFkZHJNYXNrczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluQWRkck1hc2tSZXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0TXNnczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEVycm9yczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dERlc3RVbnJlYWNoczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFRpbWVFeGNkczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFBhcm1Qcm9iczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFNyY1F1ZW5jaHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRSZWRpcmVjdHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRFY2hvczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEVjaG9SZXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0VGltZXN0YW1wczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFRpbWVzdGFtcFJlcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRBZGRyTWFza3M7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRBZGRyTWFza1JlcHM7Ci19OwotCi1zdHJ1Y3QgbWliX3RjcCB7Ci0gICAgaW50ICAgICAgICAgICAgIHRjcFJ0b0FsZ29yaXRobTsgICAgLyogcmV0cmFuc21pc3Npb24gdGltZW91dCBhbGdvcml0aG0gKi8KLSAgICBpbnQgICAgICAgICAgICAgdGNwUnRvTWluOyAgLyogbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChtUykgKi8KLSAgICBpbnQgICAgICAgICAgICAgdGNwUnRvTWF4OyAgLyogbWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChtUykgKi8KLSAgICBpbnQgICAgICAgICAgICAgdGNwTWF4Q29ubjsgLyogbWF4aW11bSB0Y3AgY29ubmVjdGlvbnMgcG9zc2libGUgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwQWN0aXZlT3BlbnM7ICAgICAvKiBudW1iZXIgb2YgU1lOLVNFTlQgLT4gQ0xPU0VEIHRyYW5zaXRpb25zICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcFBhc3NpdmVPcGVuczsgICAgLyogbnVtYmVyIG9mIFNZTi1SQ1ZEIC0+IExJU1RFTiB0cmFuc2l0aW9ucyAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BBdHRlbXB0RmFpbHM7ICAgIC8qKFNZTi1TRU5ULFNZTi1SQ1ZEKS0+Q0xPU0VEIG9yIFNZTi1SQ1ZELT5MSVNURU4gKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwRXN0YWJSZXNldHM7ICAgICAvKiAoRVNUQUJMSVNIRUQsQ0xPU0UtV0FJVCkgLT4gQ0xPU0VEICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcEN1cnJFc3RhYjsgICAgICAgLyogbnVtYmVyIGluIEVTVEFCTElTSEVEIG9yIENMT1NFLVdBSVQgc3RhdGUgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwSW5TZWdzOyAgLyogbnVtYmVyIG9mIHNlZ21lbnRzIHJlY2VpdmVkICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcE91dFNlZ3M7IC8qIG51bWJlciBvZiBzZWdtZW50cyBzZW50ICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcFJldHJhbnNTZWdzOyAgICAgLyogbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgc2VnbWVudHMgKi8KLX07Ci0KLXN0cnVjdCBtaWJfdGNwQ29ubkVudHJ5IHsKLSAgICBpbnQgICAgICAgICAgICAgdGNwQ29ublN0YXRlOyAgICAgICAvKiBTdGF0ZSBvZiB0aGlzIGNvbm5lY3Rpb24gKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwQ29ubkxvY2FsQWRkcmVzczsgICAgICAgIC8qIGxvY2FsIElQIGFkZHJlc3MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwotICAgIGludCAgICAgICAgICAgICB0Y3BDb25uTG9jYWxQb3J0OyAgIC8qIGxvY2FsIHBvcnQgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BDb25uUmVtQWRkcmVzczsgIC8qIHJlbW90ZSBJUCBhZGRyZXNzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KLSAgICBpbnQgICAgICAgICAgICAgdGNwQ29ublJlbVBvcnQ7ICAgICAvKiByZW1vdGUgcG9ydCBmb3IgdGhpcyBjb25uZWN0aW9uICovCi19OwotCi1zdHJ1Y3QgbWliX3VkcCB7Ci0gICAgdV9pbnQgICAgICAgICAgIHVkcEluRGF0YWdyYW1zOyAgICAgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgZGVsaXZlcmVkIHRvIHVzZXJzICovCi0gICAgdV9pbnQgICAgICAgICAgIHVkcE5vUG9ydHM7IC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIHRvIHBvcnQgd2l0aCBubyBsaXN0ZW5lciAqLwotICAgIHVfaW50ICAgICAgICAgICB1ZHBJbkVycm9yczsgICAgICAgIC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIHVuYWJsZSB0byBiZSBkZWxpdmVyZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgdWRwT3V0RGF0YWdyYW1zOyAgICAvKiBOby4gb2YgVURQIGRhdGFncmFtcyBzZW50IGZyb20gdGhpcyBlbnRpdHkgKi8KLX07Ci0KLXN0cnVjdCBtaWJfZWdwIHsKLSAgICB1X2ludCAgICAgICAgICAgZWdwSW5Nc2dzOyAgLyogTm8uIG9mIEVHUCBtc2dzIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgZWdwSW5FcnJvcnM7ICAgICAgICAvKiBOby4gb2YgRUdQIG1zZ3MgcmVjZWl2ZWQgd2l0aCBlcnJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBlZ3BPdXRNc2dzOyAvKiBOby4gb2YgRUdQIG1zZ3Mgc2VudCAqLwotICAgIHVfaW50ICAgICAgICAgICBlZ3BPdXRFcnJvcnM7ICAgICAgIC8qIE5vLiBvZiAob3V0Z29pbmcpIEVHUCBtc2dzIGRyb3BwZWQgZHVlIHRvIGVycm9yICovCi19OwotCi1zdHJ1Y3QgbWliX2VncE5laWdoRW50cnkgewotICAgIGludCAgICAgICAgICAgICBlZ3BOZWlnaFN0YXRlOyAgICAgIC8qIGxvY2FsIEVHUCBzdGF0ZSB3aXRoIHRoaXMgZW50cnkncyBuZWlnaGJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBlZ3BOZWlnaEFkZHI7ICAgICAgIC8qIElQIGFkZHJlc3Mgb2YgdGhpcyBlbnRyeSdzIG5laWdoYm9yICovCi19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRfU05NUF9DTVVfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAppbmRleCBjNmE0MDdmLi45NjMyODllIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCkBAIC0xLDMgKzEsMTMgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogI2lmbmRlZiBORVRTTk1QX0NPTlRBSU5FUl9ICiAjZGVmaW5lIE5FVFNOTVBfQ09OVEFJTkVSX0gKIApAQCAtMTQsOSArMjQsMTEgQEAKICNlcnJvciAiUGxlYXNlIGluY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBiZWZvcmUgdGhpcyBmaWxlIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZnJlZSgpICovCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KIAogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0zMSw3ICs0MywxNCBAQAogICAgIHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zOyAvKiogZm9yd2FyZCBkZWNsYXJlICovCiAKICAgICAvKgotICAgICAqIGZ1bmN0aW9uIHJldHVybmluZyBhbiBpbnQgZm9yIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnRhaW5lcgorICAgICAqIGZ1bmN0aW9uIGZvciBwZXJmb3JtaW5nIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnRhaW5lciB3aGljaAorICAgICAqIHJldHVybnMgKG1heWJlIHRoZSBzYW1lKSBjb250YWluZXIuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyogKG5ldHNubXBfY29udGFpbmVyX21vZF9vcCkKKyAgICAgICAgKHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICosIHZvaWQgKmNvbnRleHQsIHVfaW50IGZsYWdzKTsKKworICAgIC8qCisgICAgICogZnVuY3Rpb24gZm9yIHNldHRpbmcgYW4gb3B0aW9uIG9uIGEgY29udGFpbmVyCiAgICAgICovCiAgICAgdHlwZWRlZiBpbnQgKG5ldHNubXBfY29udGFpbmVyX29wdGlvbikoc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2V0LCB1X2ludCBmbGFncyk7CkBAIC0xMzUsMTcgKzE1NCwxNSBAQAogICAgICAgIC8qCiAgICAgICAgICogcmVsZWFzZSBtZW1vcnkgZm9yIGFuIGVudHJ5IGZyb20gdGhlIGNvbnRhaW5lcgogICAgICAgICAqLwotICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICAgICpyZWxlYXNlOwotCi0gICAgICAgLyoKLSAgICAgICAgKiBOb3RlOiBkbyBub3QgY2hhbmdlIHRoZSBrZXkhICBJZiB5b3UgbmVlZCB0bwotICAgICAgICAqIGNoYW5nZSBhIGtleSwgcmVtb3ZlIHRoZSBlbnRyeSwgY2hhbmdlIHRoZSBrZXksCi0gICAgICAgICogYW5kIHRoZSByZS1hZGQgdGhlIGVudHJ5LgotICAgICAgICAqLworICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICAgICpyZWxlYXNlOyAvKiBOT1RFOiBkZXByZWNhdGVkLiBVc2UgZnJlZV9pdGVtICovCisgICAgICAgbmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKmZyZWVfaXRlbTsKIAogICAgICAgIC8qCiAgICAgICAgICogZmluZCB0aGUgZW50cnkgaW4gdGhlIGNvbnRhaW5lciB3aXRoIHRoZSBzYW1lIGtleQogICAgICAgICAqCisgICAgICAgICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUga2V5ISAgSWYgeW91IG5lZWQgdG8KKyAgICAgICAgKiBjaGFuZ2UgYSBrZXksIHJlbW92ZSB0aGUgZW50cnksIGNoYW5nZSB0aGUga2V5LAorICAgICAgICAqIGFuZCB0aGUgcmUtYWRkIHRoZSBlbnRyeS4KICAgICAgICAgKi8KICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9ydG4gICAqZmluZDsKIApAQCAtMTkxLDYgKzIwOCwxNCBAQAogICAgICAgICAqLwogICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICAgICppbnNlcnRfZmlsdGVyOwogCisgICAgICAgIC8qCisgICAgICAgICAqIE9QVElPTkFMIGZ1bmN0aW9uIHRvIGR1cGxpY2F0ZSBhIGNvbnRhaW5lci4gRGVmYXVsdHMgdG8gYSBzaGFsbG93CisgICAgICAgICAqIGNvcHkuIE9ubHkgdGhlIHNwZWNpZmllZCBjb250YWluZXIgaXMgY29waWVkIChpLmUuIHN1Yi1jb250YWluZXJzCisgICAgICAgICAqIG5vdCBpbmNsdWRlZCkuCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9tb2Rfb3AgKmR1cGxpY2F0ZTsKKworCiAgICAgICAgLyoKICAgICAgICAgKiBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBvYmplY3Qgc3RvcmVkIGluIHRoZSBjb250YWluZXIuCiAgICAgICAgICoKQEAgLTIxOSwxMSArMjQ0LDE2IEBACiAKICAgICAgICAvKgogICAgICAgICAqIHNvcnQgY291bnQsIGZvciBpdGVyYXRvcnMgdG8gdHJhY2sgKGluc2VydC9kZWxldGUKLSAgICAgICAgKiBidW1wcyBjb3V0bmVyLCBpbnZhbGlkYXRlcyBpdGVyYXRvcgorICAgICAgICAqIGJ1bXBzIGNvdW50ZXIsIGludmFsaWRhdGVzIGl0ZXJhdG9yKQogICAgICAgICAqLwogICAgICAgIHVfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYzsKIAogICAgICAgIC8qCisgICAgICAgICogZmxhZ3MKKyAgICAgICAgKi8KKyAgICAgICB1X2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworCisgICAgICAgLyoKICAgICAgICAgKiBjb250YWluZXJzIGNhbiBjb250YWluIG90aGVyIGNvbnRhaW5lcnMgKGFkZGl0aW9uYWwgaW5kZXhlcykKICAgICAgICAgKi8KICAgICAgICBzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyAqbmV4dCwgKnByZXY7CkBAIC0yMzQsNyArMjY0LDkgQEAKICAgICAgKiBpbml0aWFsaXplL2ZyZWUgYSBjb250YWluZXIgb2YgY29udGFpbmVyIGZhY3Rvcmllcy4gdXNlZCBieQogICAgICAqIG5ldHNubXBfY29udGFpbmVyX2ZpbmQqIGZ1bmN0aW9ucy4KICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl9mcmVlX2xpc3Qodm9pZCk7CiAKICAgICAvKgpAQCAtMjQ5LDEyICsyODEsMTQgQEAKICAgICAgKiBzZWFyY2ggZm9yIGFuZCBjcmVhdGUgYSBjb250YWluZXIgZnJvbSBhIGxpc3Qgb2YgdHlwZXMgb3IgYQogICAgICAqIHNwZWNpZmljIHR5cGUuCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoY29uc3QgY2hhciAqdHlwZV9saXN0KTsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfY29udGFpbmVyX2dldChjb25zdCBjaGFyICp0eXBlKTsKIAogICAgIC8qCiAgICAgICogdXRpbGl0eSByb3V0aW5lcwogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgobmV0c25tcF9jb250YWluZXIgKnByaW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKm5ld19pbmRleCk7CiAKQEAgLTI2NSw3ICsyOTksOSBAQAogICAgICAqIGNvbW1vbiBjb21wYXJpc29uIHJvdXRpbmVzCiAgICAgICovCiAgICAgLyoqIGZpcnN0IGRhdGEgZWxlbWVudCBpcyBhICduZXRzbm1wX2luZGV4JyAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY29tcGFyZV9uZXRzbm1wX2luZGV4KGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX25jb21wYXJlX25ldHNubXBfaW5kZXgoY29uc3Qgdm9pZCAqbGhzLCBjb25zdCB2b2lkICpyaHMpOwogCiAgICAgLyoqIGZpcnN0IGRhdGEgZWxlbWVudCBpcyBhICdjaGFyIConICovCkBAIC0yNzYsNyArMzEyLDE2IEBACiAgICAgaW50IG5ldHNubXBfY29tcGFyZV9tZW0oY29uc3QgY2hhciAqIGxocywgc2l6ZV90IGxoc19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHJocywgc2l6ZV90IHJoc19sZW4pOwogCisgICAgLyoqIG5vIHN0cnVjdHVyZSwganVzdCAnY2hhciAqJyBwb2ludGVycyAqLworICAgIGludCBuZXRzbm1wX2NvbXBhcmVfZGlyZWN0X2NzdHJpbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocyk7CisKKyAgICBpbnQgbmV0c25tcF9jb21wYXJlX2xvbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocyk7CisgICAgaW50IG5ldHNubXBfY29tcGFyZV91bG9uZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKTsKKyAgICBpbnQgbmV0c25tcF9jb21wYXJlX2ludDMyKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpOworICAgIGludCBuZXRzbm1wX2NvbXBhcmVfdWludDMyKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpOworCiAgICAgLyoqIGZvcl9lYWNoIGNhbGxiYWNrIHRvIGNhbGwgZnJlZSBvbiBkYXRhIGl0ZW0gKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlKHZvaWQgKmRhdGEsIHZvaWQgKmNvbnRleHQpOwogCiAvKgpAQCAtMjg4LDE1ICszMzMsMTUgQEAKICNkZWZpbmUgQ09OVEFJTkVSX1NFVF9PUFRJT05TKHgsbyxyYykgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKE5VTEw9PSh4KS0+b3B0aW9ucykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJjID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJjID0gKHgpLT5vcHRpb25zKHgsIDEsIG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChyYyAhPSAtMSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoeCktPmZsYWdzIHw9IG87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgQ09OVEFJTkVSX0NIRUNLX09QVElPTih4LG8scmMpICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKE5VTEw9PSh4KS0+b3B0aW9ucykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJjID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJjID0gKHgpLT5vcHRpb25zKHgsMCwgbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmMgPSB4LT5mbGFncyAmIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlKDApCiAKIApAQCAtMzIzLDE2OCArMzY4LDY3IEBACiAgICAgICogaW5saW5lIGZ1bmN0aW9ucywgeW91IG1vc3QgbGlrZWx5IGhhdmUgb3B0aW1pemF0aW9ucyB0dXJuZWQgb2ZmLgogICAgICAqIEVpdGhlciB0dXJuIHRoZW0gYmFjayBvbiwgb3IgZGVmaW5lIE5FVFNOTVBfTk9fSU5MSU5FCiAgICAgICovCi0jaWZuZGVmIE5FVFNOTVBfVVNFX0lOTElORSAvKiBkZWZhdWx0IGlzIHRvIGlubGluZSAqLwogICAgIC8qCiAgICAgICogaW5zZXJ0IGsgaW50byBhbGwgY29udGFpbmVycwogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IENPTlRBSU5FUl9JTlNFUlQobmV0c25tcF9jb250YWluZXIgKngsIGNvbnN0IHZvaWQgKmspOwogCiAgICAgLyoKICAgICAgKiByZW1vdmUgayBmcm9tIGFsbCBjb250YWluZXJzCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgQ09OVEFJTkVSX1JFTU9WRShuZXRzbm1wX2NvbnRhaW5lciAqeCwgY29uc3Qgdm9pZCAqayk7CiAKICAgICAvKgorICAgICAqIGR1cGxpY2F0ZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfY29udGFpbmVyICpDT05UQUlORVJfRFVQKG5ldHNubXBfY29udGFpbmVyICp4LCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZmxhZ3MpOworCisgICAgLyoKICAgICAgKiBjbGVhciBhbGwgY29udGFpbmVycy4gV2hlbiBjbGVhcmluZyB0aGUgKmZpcnN0KiBjb250YWluZXIsIGFuZAogICAgICAqICpvbmx5KiB0aGUgZmlyc3QgY29udGFpbmVyLCBjYWxsIHRoZSBmdW5jdGlvbiBmIGZvciBlYWNoIGl0ZW0uCiAgICAgICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBhbGwgY29udGFpbmVycyBzaG91bGQgYmUgZW1wdHkuCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIENPTlRBSU5FUl9DTEVBUihuZXRzbm1wX2NvbnRhaW5lciAqeCwgbmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKmYsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjKTsKKworICAgIC8qCisgICAgICogY2xlYXIgYWxsIGNvbnRhaW5lcnMuIFdoZW4gY2xlYXJpbmcgdGhlICpmaXJzdCogY29udGFpbmVyLCBhbmQKKyAgICAgKiAqb25seSogdGhlIGZpcnN0IGNvbnRhaW5lciwgY2FsbCB0aGUgZnJlZV9pdGVtIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uCisgICAgICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBhbGwgY29udGFpbmVycyBzaG91bGQgYmUgZW1wdHkuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkIENPTlRBSU5FUl9GUkVFX0FMTChuZXRzbm1wX2NvbnRhaW5lciAqeCwgdm9pZCAqYyk7CisKICAgICAvKgogICAgICAqIGZyZWUgYWxsIGNvbnRhaW5lcnMKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBDT05UQUlORVJfRlJFRShuZXRzbm1wX2NvbnRhaW5lciAqeCk7Ci0jZWxzZQotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCi0gICAgaW50IENPTlRBSU5FUl9JTlNFUlRfSEVMUEVSKG5ldHNubXBfY29udGFpbmVyKiB4LCBjb25zdCB2b2lkKiBrKQotICAgIHsKLSAgICAgICAgd2hpbGUoeCAmJiB4LT5pbnNlcnRfZmlsdGVyICYmIHgtPmluc2VydF9maWx0ZXIoeCxrKSA9PSAxKQotICAgICAgICAgICAgeCA9IHgtPm5leHQ7Ci0gICAgICAgIGlmKHgpIHsKLSAgICAgICAgICAgIGludCByYyA9IHgtPmluc2VydCh4LGspOwotICAgICAgICAgICAgaWYocmMpCi0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCJlcnJvciBvbiBzdWJjb250YWluZXIgJyVzJyBpbnNlcnQgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB4LT5jb250YWluZXJfbmFtZSA/IHgtPmNvbnRhaW5lcl9uYW1lIDogIiIsIHJjKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVF9IRUxQRVIoeC0+bmV4dCwgayk7Ci0gICAgICAgICAgICAgICAgaWYocmMpCi0gICAgICAgICAgICAgICAgICAgIHgtPnJlbW92ZSh4LGspOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCi0gICAgaW50IENPTlRBSU5FUl9JTlNFUlQobmV0c25tcF9jb250YWluZXIqIHgsIGNvbnN0IHZvaWQqIGspCi0gICAgewotICAgICAgICAvKiogc3RhcnQgYXQgZmlyc3QgY29udGFpbmVyICovCi0gICAgICAgIHdoaWxlKHgtPnByZXYpCi0gICAgICAgICAgICB4ID0geC0+cHJldjsKLSAgICAgICAgcmV0dXJuIENPTlRBSU5FUl9JTlNFUlRfSEVMUEVSKHgsIGspOwotICAgIH0KLQotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCi0gICAgaW50IENPTlRBSU5FUl9SRU1PVkUobmV0c25tcF9jb250YWluZXIgKngsIGNvbnN0IHZvaWQgKmspCi0gICAgewotICAgICAgICBpbnQgcmMyLCByYyA9IDA7Ci0gICAgICAgIAotICAgICAgICAvKiogc3RhcnQgYXQgbGFzdCBjb250YWluZXIgKi8KLSAgICAgICAgd2hpbGUoeC0+bmV4dCkKLSAgICAgICAgICAgIHggPSB4LT5uZXh0OwotICAgICAgICB3aGlsZSh4KSB7Ci0gICAgICAgICAgICByYzIgPSB4LT5yZW1vdmUoeCxrKTsKLSAgICAgICAgICAgIC8qKiBpZ25vcmUgcmVtb3ZlIGVycm9ycyBpZiB0aGVyZSBpcyBhIGZpbHRlciBpbiBwbGFjZSAqLwotICAgICAgICAgICAgaWYgKChyYzIpICYmIChOVUxMID09IHgtPmluc2VydF9maWx0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyIHJlbW92ZSAoJWQpXG4iLCByYzIpOwotICAgICAgICAgICAgICAgIHJjID0gcmMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IHgtPnByZXY7Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfQotICAgIAotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCi0gICAgaW50IENPTlRBSU5FUl9GUkVFKG5ldHNubXBfY29udGFpbmVyICp4KQotICAgIHsKLQlpbnQgIHJjMiwgcmMgPSAwOwotICAgICAgICAKLSAgICAgICAgLyoqIHN0YXJ0IGF0IGxhc3QgY29udGFpbmVyICovCi0gICAgICAgIHdoaWxlKHgtPm5leHQpCi0gICAgICAgICAgICB4ID0geC0+bmV4dDsKLSAgICAgICAgd2hpbGUoeCkgewotICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnRtcDsKLSAgICAgICAgICAgIHRtcCA9IHgtPnByZXY7Ci0gICAgICAgICAgICBpZiAoTlVMTCAhPSB4LT5jb250YWluZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoeC0+Y29udGFpbmVyX25hbWUpOwotICAgICAgICAgICAgcmMyID0geC0+Y2ZyZWUoeCk7Ci0gICAgICAgICAgICBpZiAocmMyKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyIGNmcmVlICglZClcbiIsIHJjMik7Ci0gICAgICAgICAgICAgICAgcmMgPSByYzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4ID0gdG1wOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByYzsKLSAgICB9Ci0KLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICAvKgotICAgICAqIGNsZWFyIGFsbCBjb250YWluZXJzLiBXaGVuIGNsZWFyaW5nIHRoZSAqZmlyc3QqIGNvbnRhaW5lciwgYW5kCi0gICAgICogKm9ubHkqIHRoZSBmaXJzdCBjb250YWluZXIsIGNhbGwgdGhlIGZ1bmN0aW9uIGYgZm9yIGVhY2ggaXRlbS4KLSAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFsbCBjb250YWluZXJzIHNob3VsZCBiZSBlbXB0eS4KLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLwotICAgIHZvaWQgQ09OVEFJTkVSX0NMRUFSKG5ldHNubXBfY29udGFpbmVyICp4LCBuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmMpCi0gICAgewotICAgICAgICAvKiogc3RhcnQgYXQgbGFzdCBjb250YWluZXIgKi8KLSAgICAgICAgd2hpbGUoeC0+bmV4dCkKLSAgICAgICAgICAgIHggPSB4LT5uZXh0OwotICAgICAgICB3aGlsZSh4LT5wcmV2KSB7Ci0gICAgICAgICAgICB4LT5jbGVhcih4LCBOVUxMLCBjKTsKLSAgICAgICAgICAgIHggPSB4LT5wcmV2OwotICAgICAgICB9Ci0gICAgICAgIHgtPmNsZWFyKHgsIGYsIGMpOwotICAgIH0KLQotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIC8qCi0gICAgICogRmluZCBhIHN1Yi1jb250YWluZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZQotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqU1VCQ09OVEFJTkVSX0ZJTkQobmV0c25tcF9jb250YWluZXIgKngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgewotICAgICAgICBpZiAoKE5VTEwgPT0geCkgfHwgKE5VTEwgPT0gbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSk7CiAKLSAgICAgICAgLyoqIHN0YXJ0IGF0IGZpcnN0IGNvbnRhaW5lciAqLwotICAgICAgICB3aGlsZSh4LT5wcmV2KQotICAgICAgICAgICAgeCA9IHgtPnByZXY7Ci0gICAgICAgIHdoaWxlKHgpIHsKLSAgICAgICAgICAgIGlmICgoTlVMTCAhPSB4LT5jb250YWluZXJfbmFtZSkgJiYKLSAgICAgICAgICAgICAgICAoMCA9PSBzdHJjbXAobmFtZSx4LT5jb250YWluZXJfbmFtZSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgeCA9IHgtPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQorICAgIC8qCisgICAgICogSU5URVJOQUwgdXRpbGl0eSByb3V0aW5lcyBmb3IgY29udGFpbmVyIGltcGxlbWVudGF0aW9ucworICAgICAqLworICAgIHZvaWQgbmV0c25tcF9pbml0X2NvbnRhaW5lcihuZXRzbm1wX2NvbnRhaW5lciAgICAgICAgICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yYyAgICAgICppbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yYyAgICAgICpjZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfc2l6ZSAgICAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfY29tcGFyZSAqY21wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAgICAgICppbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICAgICAgKnJlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfcnRuICAgICAqZm5kKTsKKyAgICAvKiogRHVwbGljYXRlIGNvbnRhaW5lciBtZXRhLWRhdGEuICovCisgICAgaW50IG5ldHNubXBfY29udGFpbmVyX2RhdGFfZHVwKG5ldHNubXBfY29udGFpbmVyICpkdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjKTsKIAotI2VuZGlmCiAgICAgCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtNTM0LDEyICs0NzgsMjAgQEAKIAogICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcnRuICAgICAgICAgICpuZXh0OwogCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSB3aWxsIHJlbW92ZSB0aGUgaXRlbSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgdGhlbiBiYWNrIHVwCisgICAgICAgICAqIHRoZSBpdGVyYXRvciB0byB0aGUgcHJldmlvdXMgaXRlbS4gVGhhdCB3YXkgbmV4dCB3aWxsIG1vdmUgdG8gdGhlCisgICAgICAgICAqIGl0ZW0gKHRoZSBvbmUgdGhhdCByZXBsYWNlZCB0aGUgcmVtb3ZlZCBpdGVtLgorICAgICAgICAgKi8KKyAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX3JjICAgICAgICAgICAqcmVtb3ZlOworCiAgICAgfSBuZXRzbm1wX2l0ZXJhdG9yOwogCiAKICNkZWZpbmUgSVRFUkFUT1JfRklSU1QoeCkgIHgtPmZpcnN0KHgpCiAjZGVmaW5lIElURVJBVE9SX05FWFQoeCkgICB4LT5uZXh0KHgpCiAjZGVmaW5lIElURVJBVE9SX0xBU1QoeCkgICB4LT5sYXN0KHgpCisjZGVmaW5lIElURVJBVE9SX1JFTU9WRSh4KSB4LT5yZW1vdmUoeCkKICNkZWZpbmUgSVRFUkFUT1JfUkVMRUFTRSh4KSBkbyB7IHgtPnJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IHdoaWxlKDApCiAgICAgCiAjaWZkZWYgIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAppbmRleCAzYTdlMjM3Li4zMzZhOGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogICAgIGludCBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChuZXRzbm1wX2NvbnRhaW5lciAqYywgaW50IHNldCwgdV9pbnQgZmxhZ3MpOwogCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAppbmRleCAwMzliYTQ4Li40OTRmMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jb250YWluZXJfZ2V0X3NvcnRlZF9zaW5nbHlfbGlua2VkX2xpc3Qodm9pZCk7CiAgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY29udGFpbmVyX2dldF9zaW5nbHlfbGlua2VkX2xpc3QoaW50IGZpZm8pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX3NzbGxfaW5pdCh2b2lkKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCmluZGV4IDY0ODk2MDYuLmE1NWQzNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCkBAIC0xMCw2ICsxMCw3IEBACiAKIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NvbnRhaW5lcl9nZXRfbnVsbCh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl9udWxsX2luaXQodm9pZCk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCmluZGV4IGE2NGUwN2EuLjU0YTNhNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKQEAgLTU2LDYgKzU2LDcgQEAKICAgICAgICBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICpkYXRhX2xpc3RfZnJlZV9wdHI7CiAgICAgfSBuZXRzbm1wX2RhdGFfbGlzdF9zYXZlaW5mbzsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9kYXRhX2xpc3QgKgogICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhKiApOwogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsCkBAIC02NCwxNyArNjUsMjMgQEAKICAgICAgIG5ldHNubXBfZGF0YV9saXN0X2FkZF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogYmVlcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAqbmV0c25tcF9nZXRfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbm9kZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9mcmVlX2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqaGVhZCk7ICAgIC8qIHNpbmdsZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICpoZWFkKTsgICAgICAgIC8qIG11bHRpcGxlICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKG5ldHNubXBfZGF0YV9saXN0ICoqcmVhbGhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfZGF0YV9saXN0ICoKICAgICBuZXRzbm1wX2dldF9saXN0X25vZGUobmV0c25tcF9kYXRhX2xpc3QgKmhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAgICAgLyoqIGRlcHJlY2lhdGVkOiB1c2UgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUoKSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfYWRkX2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCmluZGV4IGFlZDQzNWEuLjNjM2M1MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMjQsMTkgKzI0LDIxIEBACiAjaWZuZGVmIERFRkFVTFRfU1RPUkVfSAogI2RlZmluZSBERUZBVUxUX1NUT1JFX0gKIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKICNkZWZpbmUgTkVUU05NUF9EU19NQVhfSURTIDMKLSNkZWZpbmUgTkVUU05NUF9EU19NQVhfU1VCSURTIDQwICAgICAgICAvKiBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDggKi8KKyNkZWZpbmUgTkVUU05NUF9EU19NQVhfU1VCSURTIDQ4ICAgICAgICAvKiBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDggKi8KIAogICAgIC8qCiAgICAgICogYmVnaW4gc3RvcmFnZSBkZWZpbml0aW9ucyAKICAgICAgKi8KIC8qKgogICogQGRlZiBORVRTTk1QX0RTX0xJQlJBUllfSUQKLSAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgInN0b3JpZCIgYXJndW1lbnQgdG8gdGhlIEFQSSAKKyAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgInN0b3JpZCIgYXJndW1lbnQgdG8gdGhlIEFQSS4KICAqLwogI2RlZmluZSBORVRTTk1QX0RTX0xJQlJBUllfSUQgICAgIDAKICNkZWZpbmUgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCAxCkBAIC04OCwyMyArOTAsMzUgQEAKICNkZWZpbmUgTkVUU05NUF9EU19MSUJfRElTQUJMRV9QRVJTSVNURU5UX0xPQUQgIDM1IC8qIGRvbid0IGxvYWQgcGVyc2lzdGVudCBmaWxlICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9TQVZFICAzNiAvKiBkb24ndCBzYXZlIHBlcnNpc3RlbnQgZmlsZSAqLwogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMgICAgIDM3IC8qIGFwcGVuZCwgZG9uJ3Qgb3ZlcndyaXRlLCBsb2cgZmlsZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfTk9fRElTQ09WRVJZICAgICAgICAzOCAvKiBkb24ndCBzdXBwb3J0IFJGQzUzNDMgY29udGV4dEVuZ2luZUlEIGRpc2NvdmVyeSAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCAgICAgIDM5IC8qIFRTTSdzIHNpbXBsZSBzZWN1cml0eSBuYW1lIG1hcHBpbmcgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9MT0FEX0hPU1RfRklMRVMgNDAgLyogZG9uJ3QgcmVhZCBob3N0LmNvbmYgZmlsZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE5TU0VDX1dBUk5fT05MWSAgICAgNDEgLyogdHJlYWQgRE5TU0VDIGVycm9ycyBhcyB3YXJuaW5ncyAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NQVhfQk9PTF9JRCAgICAgICAgICA0OCAvKiBtYXRjaCBORVRTTk1QX0RTX01BWF9TVUJJRFMgKi8KIAogICAgIC8qCiAgICAgICogbGlicmFyeSBpbnRlZ2VycyAKICAgICAgKi8KLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1dBUk5JTkdTICAwCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ0xFVkVMICAgICAgMQotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TTk1QVkVSU0lPTiAgIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUICAzCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUICA0Ci0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX1NVRkZJWF9PTkxZICBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfV0FSTklOR1MgICAgICAgICAwCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ0xFVkVMICAgICAgICAgICAgIDEKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04gICAgICAgICAgMgorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgICAgICAgICAzCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUICAgIDQKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfU1VGRklYX09OTFkgICAgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQKICNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1RSSU5HX09VVFBVVF9GT1JNQVQgNQotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IRVhfT1VUUFVUX0xFTkdUSCA2Ci0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFUlZFUlNFTkRCVUYgICA3IC8qIHNlbmQgYnVmZmVyIChzZXJ2ZXIpICovCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFUlZFUlJFQ1ZCVUYgICA4IC8qIHJlY2VpdmUgYnVmZmVyIChzZXJ2ZXIpICovCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFNFTkRCVUYgICA5IC8qIHNlbmQgYnVmZmVyIChjbGllbnQpICovCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFJFQ1ZCVUYgIDEwIC8qIHJlY2VpdmUgYnVmZmVyIChjbGllbnQpICovCi0KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEVYX09VVFBVVF9MRU5HVEggICAgNgorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJTRU5EQlVGICAgICAgICA3IC8qIHNlbmQgYnVmZmVyIChzZXJ2ZXIpICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFUlZFUlJFQ1ZCVUYgICAgICAgIDggLyogcmVjZWl2ZSBidWZmZXIgKHNlcnZlcikgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UU0VOREJVRiAgICAgICAgOSAvKiBzZW5kIGJ1ZmZlciAoY2xpZW50KSAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRSRUNWQlVGICAgICAgIDEwIC8qIHJlY2VpdmUgYnVmZmVyIChjbGllbnQpICovCisjZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfUEVSTSAgICAgMTEKKyNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fRElSX1BFUk0gICAgICAxMgorI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX1VTRVIgICAgIDEyCisjZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfR1JPVVAgICAgMTMKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfVElNRU9VVCAgICAgICAgICAgICAxNAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRVRSSUVTICAgICAgICAgICAgIDE1CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX01BWF9JTlRfSUQgICAgICAgICAgNDggLyogbWF0Y2ggTkVUU05NUF9EU19NQVhfU1VCSURTICovCisgICAgCiAgICAgLyoKICAgICAgKiBzcGVjaWFsIG1lYW5pbmdzIGZvciB0aGUgZGVmYXVsdCBTTk1QIHZlcnNpb24gc2xvdCAoTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04pIAogICAgICAqLwpAQCAtMTQzLDI4ICsxNTcsNTQgQEAKICNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVBQVFlQRVMgICAgICAgICAgMjAKICNkZWZpbmUgTkVUU05NUF9EU19MSUJfS1NNX0tFWVRBQiAgICAgICAgMjEKICNkZWZpbmUgTkVUU05NUF9EU19MSUJfS1NNX1NFUlZJQ0VfTkFNRSAgMjIKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCICAgMjMKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfWDUwOV9TRVJWRVJfUFVCICAgMjQKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1NIVE9TTk1QX1NPQ0tFVCAgMjUKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIgMjYKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUgICAgICAgICAgMjcKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfWDUwOV9DUkxfRklMRSAgICAgMjgKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfVExTX0FMR09SSVRNUyAgICAgMjkKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfVExTX0xPQ0FMX0NFUlQgICAgMzAKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfVExTX1BFRVJfQ0VSVCAgICAgMzEKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1NIX1VTRVJOQU1FICAgICAgMzIKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1NIX1BVQktFWSAgICAgICAgMzMKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1NIX1BSSVZLRVkgICAgICAgMzQKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX1NUUl9JRCAgICAgICAgNDggLyogbWF0Y2ggTkVUU05NUF9EU19NQVhfU1VCSURTICovCiAKICAgICAvKgogICAgICAqIGVuZCBzdG9yYWdlIGRlZmluaXRpb25zIAogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbihpbnQgc3RvcmVpZCwgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoaW50IHN0b3JlaWQsIGludCB3aGljaCwgaW50IHZhbHVlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKm5ldHNubXBfZHNfZ2V0X3N0cmluZyhpbnQgc3RvcmVpZCwgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF92b2lkKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIHZvaWQgKnZhbHVlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF92b2lkKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKHVfY2hhciB0eXBlLCBjb25zdCBjaGFyICpmdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGludCBzdG9yZWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4oY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9kc19zaHV0ZG93bih2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaApAQCAtMCwwICsxLDYzIEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9ESVJfVVRJTFNfSAorI2RlZmluZSBORVRTTk1QX0RJUl9VVElMU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogZmlsdGVyIGZ1bmN0aW9uOyByZXR1cm4gMSB0byBpbmNsdWRlIGZpbGUsIDAgdG8gZXhjbHVkZQorICAgICAqLworI2RlZmluZSBORVRTTk1QX0RJUl9FWENMVURFIDAKKyNkZWZpbmUgTkVUU05NUF9ESVJfSU5DTFVERSAxCisgICAgdHlwZWRlZiBpbnQgKG5ldHNubXBfZGlyZWN0b3J5X2ZpbHRlcikoY29uc3Qgdm9pZCAqdGV4dCwgdm9pZCAqY3R4KTsKKworCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqIFByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWRfc29tZShuZXRzbm1wX2NvbnRhaW5lciAqdXNlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfZmlsdGVyICpmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWx0ZXJfY3R4LCB1X2ludCBmbGFncyk7CisKKyNkZWZpbmUgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWQoYyxkLGYpIFwKKyAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZF9zb21lKGMsZCxOVUxMLE5VTEwsZik7CisKKyAgICB2b2lkIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjKTsKKworICAgICAgICAKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoKKyAgICAgKiBmbGFncworICAgICAqLworI2RlZmluZSBORVRTTk1QX0RJUl9SRUNVUlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE5FVFNOTVBfRElSX1JFTEFUSVZFX1BBVEggICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTkVUU05NUF9ESVJfU09SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorLyoqIGRvbid0IHJldHVybiBudWxsIGlmIGRpciBlbXB0eSAqLworI2RlZmluZSBORVRTTk1QX0RJUl9FTVBUWV9PSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisvKiogc3RvcmUgbmV0c25tcF9maWxlIGluc3RlYWQgb2YgZmlsZW5hbWVzICovCisjZGVmaW5lIE5FVFNOTVBfRElSX05TRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKy8qKiBsb2FkIHN0YXRzIGluIG5ldHNubXBfZmlsZSAqLworI2RlZmluZSBORVRTTk1QX0RJUl9OU0ZJTEVfU1RBVFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisKKyAgICAKKyAgICAgICAgCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9ESVJfVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKaW5kZXggNGI3MjQyZC4uZWRlNjdiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCkBAIC04OCw4ICs4OCwxNSBAQAogICoKICAqIFNpZGUgRWZmZWN0czogTm9uZQogICovCitORVRTTk1QX0lNUE9SVAogdm9pZCBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8oaW50ICpudW1mZHMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICpleGNlcHRmZHMpOwogCitORVRTTk1QX0lNUE9SVAordm9pZCBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8yKGludCAqbnVtZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzKTsKKwogLyoKICAqIERpc3BhdGNoIEV4dGVybmFsIEV2ZW50cwogICoKQEAgLTExNCw3ICsxMjEsMTMgQEAKICAqCiAgKiBTaWRlIEVmZmVjdHM6IE5vbmUKICAqLworTkVUU05NUF9JTVBPUlQKIHZvaWQgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMoaW50ICpjb3VudCwgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLCBmZF9zZXQgKmV4Y2VwdGZkcyk7CitORVRTTk1QX0lNUE9SVAordm9pZCBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50czIoaW50ICpjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcyk7CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKaW5kZXggZmE5YjVhNC4uOWY1Y2RjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCkBAIC0xMywzMiArMTMsMjMgQEAKICAgICAgKi8KICAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2ZpbGVfcyB7CiAgICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBmaWxlIG5hbWUKLSAgICAgICAgICovCisgICAgICAgIC8qKiBmaWxlIG5hbWUgKi8KICAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAqbmFtZTsKICAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAqIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUKLSAgICAgICAgICovCisgICAgICAgIC8qKiBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlICovCiAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGZkOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIGZpbGVzeXN0ZW0gZmxhZ3MKLSAgICAgICAgICovCisgICAgICAgIC8qKiBmaWxlc3lzdGVtIGZsYWdzICovCiAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGZzX2ZsYWdzOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIG9wZW4vY3JlYXRlIG1vZGUKLSAgICAgICAgICovCisgICAgICAgIC8qKiBvcGVuL2NyZWF0ZSBtb2RlICovCiAgICAgICAgIG1vZGVfdCAgICAgICAgICAgICAgICAgIG1vZGU7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogbmV0c25tcCBmbGFncwotICAgICAgICAgKi8KKyAgICAgICAgLyoqIG5ldHNubXAgZmxhZ3MgKi8KICAgICAgICAgdV9pbnQgICAgICAgICAgICAgICAgICAgbnNfZmxhZ3M7CiAKLQorICAgICAgICAvKiogZmlsZSBzdGF0cyAqLworICAgICAgICBzdHJ1Y3Qgc3RhdCAgICAgICAgICAgICpzdGF0czsKIAogICAgICAgICAvKgogICAgICAgICAgKiBmdXR1cmUgZXhwYW5zaW9uCkBAIC01NCw2ICs0NSw5IEBACiAgICAgICogUHJvdG90eXBlcwogICAgICAqCiAgICAgICovCisgICAgbmV0c25tcF9maWxlICpuZXRzbm1wX2ZpbGVfbmV3KGNvbnN0IGNoYXIgKm5hbWUsIGludCBmc19mbGFncywgbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IG5zX2ZsYWdzKTsKKwogICAgIG5ldHNubXBfZmlsZSAqIG5ldHNubXBfZmlsZV9jcmVhdGUodm9pZCk7CiAgICAgbmV0c25tcF9maWxlICogbmV0c25tcF9maWxlX2ZpbGwobmV0c25tcF9maWxlICogZmlsZWksIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZzX2ZsYWdzLCBtb2RlX3QgbW9kZSwgdV9pbnQgbnNfZmxhZ3MpOwpAQCAtNjIsNyArNTYsMTEgQEAKICAgICBpbnQgbmV0c25tcF9maWxlX29wZW4obmV0c25tcF9maWxlICogZmlsZWkpOwogICAgIGludCBuZXRzbm1wX2ZpbGVfY2xvc2UobmV0c25tcF9maWxlICogZmlsZWkpOwogCi0gICAgICAgIAorICAgIC8qKiBzdXBwb3J0IG5ldHNubXBfZmlsZSBjb250YWluZXJzICovCisgICAgaW50IG5ldHNubXBfZmlsZV9jb21wYXJlX25hbWUobmV0c25tcF9maWxlICpsaHMsIG5ldHNubXBfZmlsZSAqcmhzKTsKKyAgICB2b2lkIG5ldHNubXBfZmlsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2ZpbGUgKmZpbGUsIHZvaWQgKmNvbnRleHQpOworCisKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICoKQEAgLTcwLDcgKzY4LDggQEAKICAgICAgKgogICAgICAqLwogI2RlZmluZSBORVRTTk1QX0ZJTEVfTk9fQVVUT0NMT1NFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTkVUU05NUF9GSUxFXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5FVFNOTVBfRklMRV9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORVRTTk1QX0ZJTEVfQVVUT19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAppbmRleCAwZjRkNjkxLi5mNzBmZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCkBAIC0xLDYgKzEsMTIgQEAKICNpZm5kZWYgX0dFVE9QVF9IXwogI2RlZmluZSBfR0VUT1BUX0hfIDEKIAorI2lmbmRlZiBORVRfU05NUF9DT05GSUdfSAorI2Vycm9yIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPG5ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0Lmg+LgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX0dFVE9QVF9IKQorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCkBAIC0xMiw0ICsxOCw3IEBACiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9HRVRPUFRfSCAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKaW5kZXggZmRjNjgwNS4uOWM3Yzg5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKQEAgLTEzLDExICsxMywxNSBAQAogICAgIHZvaWQgICAgICAgICAgICBtdWx0QnkxMChVNjQsIFU2NCAqKTsKICAgICB2b2lkICAgICAgICAgICAgaW5jckJ5VTE2KFU2NCAqLCB1bnNpZ25lZCBpbnQpOwogICAgIHZvaWQgICAgICAgICAgICBpbmNyQnlVMzIoVTY0ICosIHVuc2lnbmVkIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgemVyb1U2NChVNjQgKik7CiAgICAgaW50ICAgICAgICAgICAgIGlzWmVyb1U2NChjb25zdCBVNjQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRVNjQoY2hhciAqLCBjb25zdCBVNjQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRJNjQoY2hhciAqLCBjb25zdCBVNjQgKik7CiAgICAgaW50ICAgICAgICAgICAgIHJlYWQ2NChVNjQgKiwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB1NjRTdWJ0cmFjdChjb25zdCBVNjQgKiBwdTY0b25lLCBjb25zdCBVNjQgKiBwdTY0dHdvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBwdTY0b3V0KTsKICAgICB2b2lkICAgICAgICAgICAgdTY0SW5jcihVNjQgKiBwdTY0b3V0LCBjb25zdCBVNjQgKiBwdTY0b25lKTsKQEAgLTI3LDYgKzMxLDcgQEAKIAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcChVNjQgKm9sZF92YWwsIFU2NCAqbmV3X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKHN0cnVjdCBjb3VudGVyNjQgKnByZXZfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvdW50ZXI2NCAqbmV3X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb3VudGVyNjQgKm9sZF9wcmV2X3ZhbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKaW5kZXggMjI3NjIxNi4uNDRhY2M0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKQEAgLTI0LDIxICsyNCwyNSBAQAogICAgIC8qCiAgICAgICogUHJvdG90eXBlcy5oCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZ2VuZXJhdGVfS3UoY29uc3Qgb2lkICogaGFzaHR5cGUsIHVfaW50IGhhc2h0eXBlX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogUCwgc2l6ZV90IHBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBQLCBzaXplX3QgcHBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIEt1LCBzaXplX3QgKiBrdWxlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBnZW5lcmF0ZV9rdWwoY29uc3Qgb2lkICogaGFzaHR5cGUsIHVfaW50IGhhc2h0eXBlX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGVuZ2luZUlELCBzaXplX3QgZW5naW5lSURfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogS3UsIHNpemVfdCBrdV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgc2l6ZV90IGVuZ2luZUlEX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIEt1LCBzaXplX3Qga3VfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogS3VsLCBzaXplX3QgKiBrdWxfbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGVuY29kZV9rZXljaGFuZ2UoY29uc3Qgb2lkICogaGFzaHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgaGFzaHR5cGVfbGVuLCB1X2NoYXIgKiBvbGRrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZGtleV9sZW4sIHVfY2hhciAqIG5ld2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3a2V5X2xlbiwgdV9jaGFyICoga2NzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICoga2NzdHJpbmdfbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGRlY29kZV9rZXljaGFuZ2UoY29uc3Qgb2lkICogaGFzaHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgaGFzaHR5cGVfbGVuLCB1X2NoYXIgKiBvbGRrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZGtleV9sZW4sIHVfY2hhciAqIGtjc3RyaW5nLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2ZhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qKgorICogQGZpbGUgIGxhcmdlX2ZkX3NldC5oCisgKgorICogQGJyaWVmIE1hY3JvJ3MgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW9uIG9mIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXRzLgorICovCisKKworI2lmbmRlZiBMQVJHRV9GRF9TRVRfSAorI2RlZmluZSBMQVJHRV9GRF9TRVRfSAorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpICYmICFkZWZpbmVkKF9XSU5TT0NLQVBJXykgJiYgIWRlZmluZWQoX1dJTlNPQ0tfSCkKKyNlcnJvciA8d2luc29jay5oPiBvciA8d2luc29jazIuaD4gbXVzdCBoYXZlIGJlZW4gaW5jbHVkZWQgYmVmb3JlIHRoaXMgZmlsZS4KKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisKKy8qKgorICogQWRkIHNvY2tldCBmZCB0byB0aGUgc2V0ICpmZHNldCBpZiBub3QgeWV0IHByZXNlbnQuCisgKiBFbmxhcmdlcyB0aGUgc2V0IGlmIG5lY2Vzc2FyeS4KKyAqLworI2RlZmluZSBORVRTTk1QX0xBUkdFX0ZEX1NFVChmZCwgZmRzZXQpIFwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRmZChmZCwgZmRzZXQpCisKKy8qKgorICogUmVtb3ZlIHNvY2tldCBmZCBmcm9tIHRoZSBzZXQgKmZkc2V0LgorICogRG8gbm90aGluZyBpZiBmZCBpcyBub3QgcHJlc2VudCBpbiAqZmRzZXQuCisgKiBEbyBub3RoaW5nIGlmIGZkID49IGZkc2V0LT5sZnNfc2V0c2l6ZS4KKyAqLworI2RlZmluZSBORVRTTk1QX0xBUkdFX0ZEX0NMUihmZCwgZmRzZXQpIFwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9jbHIoZmQsIGZkc2V0KQorCisvKioKKyAqIFRlc3Qgd2hldGhlciBzZXQgKmZkc2V0IGNvbnRhaW5zIHNvY2tldCBmZC4KKyAqIEV2YWx1YXRlcyB0byB6ZXJvIChmYWxzZSkgaWYgZmQgPj0gZmRzZXQtPmxmc19zZXRzaXplLgorICovCisjZGVmaW5lIE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoZmQsIGZkc2V0KSBcCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KGZkLCBmZHNldCkKKworI2lmICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKworLyoqCisgKiBOdW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIGEgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYXMgYQorICogc3RydWN0IGZkX3NldC4KKyAqLworI2RlZmluZSBORVRTTk1QX0ZEX1NFVF9CWVRFUyhzZXRzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChzaXplb2YoZmRfc2V0KSArICgoc2V0c2l6ZSkgPiBGRF9TRVRTSVpFID8gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAoKHNldHNpemUpIC0gRkRfU0VUU0laRSkgKiBzaXplb2YoU09DS0VUKSA6IDApKQorCisvKiogUmVtb3ZlIGFsbCBzb2NrZXRzIGZyb20gdGhlIHNldCAqZmRzZXQuICovCisjZGVmaW5lIE5FVFNOTVBfTEFSR0VfRkRfWkVSTyhmZHNldCkgXAorICAgIGRvIHsgKGZkc2V0KS0+bGZzX3NldHB0ci0+ZmRfY291bnQgPSAwOyB9IHdoaWxlKDApCisKKworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX3NldGZkKCBTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CitORVRTTk1QX0lNUE9SVAordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfY2xyKCAgIFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKK05FVFNOTVBfSU1QT1JUCitpbnQgICAgbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworCisjZWxzZQorCisvKioKKyAqIFNpemUgb2YgYSBzaW5nbGUgZWxlbWVudCBvZiB0aGUgYXJyYXkgd2l0aCBmaWxlIGRlc2NyaXB0b3IgYml0bWFza3MuCisgKgorICogQWNjb3JkaW5nIHRvIFNVU3YyLCB0aGlzIGFycmF5IG11c3QgaGF2ZSB0aGUgbmFtZSBmZHNfYml0cy4gU2VlIGFsc28KKyAqIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwODc3NS94c2gvc3lzdGltZS5oLmh0bWwiPlRoZSBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIsICZsdDtzeXMvdGltZS5oJmd0OzwvYT4uCisgKi8KKyNkZWZpbmUgTkVUU05NUF9GRF9NQVNLX1NJWkUgc2l6ZW9mKCgoZmRfc2V0KikwKS0+ZmRzX2JpdHNbMF0pCisKKy8qKiBOdW1iZXIgb2YgYml0cyBpbiBvbmUgZWxlbWVudCBvZiB0aGUgZmRfc2V0LmZkc19iaXRzIGFycmF5LiAqLworI2RlZmluZSBORVRTTk1QX0JJVFNfUEVSX0ZEX01BU0sgKDggKiBORVRTTk1QX0ZEX01BU0tfU0laRSkKKworLyoqIE51bWJlciBvZiBlbGVtZW50cyBuZWVkZWQgZm9yIHRoZSBmZHNfYml0cyBhcnJheS4gKi8KKyNkZWZpbmUgTkVUU05NUF9GRF9TRVRfRUxFTV9DT1VOVChzZXRzaXplKSBcCisgICAgKHNldHNpemUgKyBORVRTTk1QX0JJVFNfUEVSX0ZEX01BU0sgLSAxKSAvIE5FVFNOTVBfQklUU19QRVJfRkRfTUFTSworCisvKioKKyAqIE51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gc3RvcmUgYSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBhcyBhCisgKiBzdHJ1Y3QgZmRfc2V0LgorICovCisjZGVmaW5lIE5FVFNOTVBfRkRfU0VUX0JZVEVTKHNldHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChzaXplb2YoZmRfc2V0KSArICgoc2V0c2l6ZSkgPiBGRF9TRVRTSVpFID8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GRF9TRVRfRUxFTV9DT1VOVCgoc2V0c2l6ZSkgLSBGRF9TRVRTSVpFKSBcCisgICAgICAgICAgICAgICAgICAgICAgICogTkVUU05NUF9GRF9NQVNLX1NJWkUgOiAwKSkKKworLyoqIFJlbW92ZSBhbGwgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSBzZXQgKmZkc2V0LiAqLworI2RlZmluZSBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oZmRzZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1lbXNldCgoZmRzZXQpLT5sZnNfc2V0cHRyLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgTkVUU05NUF9GRF9TRVRfQllURVMoKGZkc2V0KS0+bGZzX3NldHNpemUpKTsgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX3NldGZkKCBpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7Cit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9jbHIoICAgaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworaW50ICAgIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKKworI2VuZGlmCisKKy8qKgorICogSW5pdGlhbGl6ZSBhIG5ldHNubXBfbGFyZ2VfZmRfc2V0IHN0cnVjdHVyZS4KKyAqCisgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIG9ubHkgaW5pdGlhbGl6ZXMgdGhlIGxmc19zZXRzaXplIGFuZCBsZnNfc2V0cHRyCisgKiBtZW1iZXJzIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0LCBub3QgdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgaXRzZWxmLgorICogVGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgbXVzdCBiZSBpbml0aWFsaXplZCBzZXBhcmF0ZWx5LCBlLmcuIHZpYQorICogTkVUU05NUF9MQVJHRV9GRF9DTFIoKS4KKyAqLworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCwgaW50IHNldHNpemUpOworCisvKioKKyAqIE1vZGlmeSB0aGUgc2l6ZSBvZiBhIGZpbGUgZGVzY3JpcHRvciBzZXQgYW5kIHByZXNlcnZlIHRoZSBmaXJzdAorICogbWluKGZkc2V0LT5sZnNfc2V0c2l6ZSwgc2V0c2l6ZSkgZmlsZSBkZXNjcmlwdG9ycy4KKyAqCisgKiBSZXR1cm5zIDEgdXBvbiBzdWNjZXNzIG9yIDAgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgorICovCitpbnQgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQsIGludCBzZXRzaXplKTsKKworLyoqCisgKiBTeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nIGZvciBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0cy4KKyAqCisgKiBPbiBQT1NJWCBzeXN0ZW1zLCBhbnkgZmlsZSBkZXNjcmlwdG9yIHNldCB3aXRoIHNpemUgYmVsb3cgbnVtZmRzIHdpbGwgYmUKKyAqIHJlc2l6ZWQgYmVmb3JlIGludm9raW5nIHNlbGVjdCgpLgorICoKKyAqIEBzZWUgU2VlIGFsc28gc2VsZWN0KDIpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitORVRTTk1QX0lNUE9SVAoraW50ICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3NlbGVjdChpbnQgbnVtZmRzLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKwkJCSAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisJCQkgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcywKKwkJCSAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCk7CisKKy8qKiBEZWFsbG9jYXRlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQuICovCitORVRTTk1QX0lNUE9SVAordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAobmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKKworLyoqCisgKiBDb3B5IGFuIGZkX3NldCB0byBhIG5ldHNubXBfbGFyZ2VfZmRfc2V0IHN0cnVjdHVyZS4KKyAqCisgKiBAbm90ZSBkc3QgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICovCit2b2lkICAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQobmV0c25tcF9sYXJnZV9mZF9zZXQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZkX3NldCAqc3JjKTsKKworLyoqCisgKiBDb3B5IGEgbmV0c25tcF9sYXJnZV9mZF9zZXQgc3RydWN0dXJlIGludG8gYW4gZmRfc2V0LgorICoKKyAqIEByZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIC0xIHdoZW4gY29weWluZyBmYWlscyBiZWNhdXNlICpzcmMgaXMgdG9vIGxhcmdlIHRvCisgKiAgICAgICAgIGZpdCBpbnRvICpkc3QuCisgKi8KK2ludCAgICBuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldCggICAgICAgICAgICAgIGZkX3NldCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpzcmMpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBMQVJHRV9GRF9TRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAppbmRleCAyYzY1ZTJjLi5kYThjM2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaApAQCAtOTksNyArOTksNyBAQAogICAgIC8qCiAgICAgICogUHJvdG90eXBlcy4KICAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgZ2V0X2VuZ2luZXRpbWUodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbiwKKyAgICBpbnQgICAgICAgICAgICAgZ2V0X2VuZ2luZXRpbWUoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgKiBlbmdpbmVfYm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgKiBlbmdpbmVfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgYXV0aGVudGljYXRlZCk7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgKiBsYXN0X2VuZ2luZV90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBhdXRoZW50aWNhdGVkKTsKIAotICAgIGludCAgICAgICAgICAgICBzZXRfZW5naW5ldGltZSh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuLAorICAgIGludCAgICAgICAgICAgICBzZXRfZW5naW5ldGltZShjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBlbmdpbmVfYm9vdCwgdV9pbnQgZW5naW5lX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGF1dGhlbnRpY2F0ZWQpOwogCkBAIC0xMjIsOSArMTIyLDkgQEAKICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgIEVuZ2luZXRpbWUKLSAgICAgICAgc2VhcmNoX2VuZ2luZXRpbWVfbGlzdCh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKTsKKyAgICAgICAgc2VhcmNoX2VuZ2luZXRpbWVfbGlzdChjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKTsKIAotICAgIGludCAgICAgICAgICAgICBoYXNoX2VuZ2luZUlEKHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pOworICAgIGludCAgICAgICAgICAgICBoYXNoX2VuZ2luZUlEKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pOwogCiAgICAgdm9pZCAgICAgICAgICAgIGR1bXBfZXRpbWVsaXN0X2VudHJ5KEVuZ2luZXRpbWUgZSwgaW50IGNvdW50KTsKICAgICB2b2lkICAgICAgICAgICAgZHVtcF9ldGltZWxpc3Qodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaAppbmRleCBlYmQwMDYyLi42YTA3MzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgKQEAgLTUzLDExICs1Myw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03MSw5ICs2Nyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZWxzZQorI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKICNpZiBIQVZFX0FSUEFfSU5FVF9ICkBAIC04Miw4ICs3Niw2IEBACiAKICNpZmRlZiBVQ0RfU05NUF9MSUJSQVJZCiAKLSNkZWZpbmUgc25tcF9wYXJzZSBjbXVfc25tcF9wYXJzZQotCiAjaW5jbHVkZSA8dWNkLXNubXAvYXNuMS5oPgogI2luY2x1ZGUgPHVjZC1zbm1wL3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8dWNkLXNubXAvc25tcF9pbXBsLmg+CkBAIC0xNDEsNyArMTMzLDkgQEAKICNkZWZpbmUgU05NUF9NU0dfR0VUIEdFVF9SRVFfTVNHCiAjZGVmaW5lIFNOTVBfTVNHX0dFVE5FWFQgR0VUTkVYVF9SRVFfTVNHCiAjZGVmaW5lIFNOTVBfTVNHX1JFU1BPTlNFIEdFVF9SU1BfTVNHCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBTTk1QX01TR19TRVQgU0VUX1JFUV9NU0cKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZGVmaW5lIFNOTVBfTVNHX1RSQVAgVFJQX1JFUV9NU0cKICNkZWZpbmUgU05NUF9NU0dfR0VUQlVMSyAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDUpCiAjZGVmaW5lIFNOTVBfTVNHX0lORk9STSAgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHg2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCmluZGV4IGM5OTVjN2UuLjEyYjE5MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgKiAqKiBJbnB1dDogTUQgLS0gYW4gTURwdHIKICAgICAgKiAqKiBJbml0aWFsaXplIHRoZSBNRHN0cnVjdCBwcmVwYXRvcnkgdG8gZG9pbmcgYSBtZXNzYWdlIGRpZ2VzdCBjb21wdXRhdGlvbi4KICAgICAgKi8KLSAgICBleHRlcm4gdm9pZCAgICAgTURiZWdpbihNRHB0cik7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCBNRGJlZ2luKE1EcHRyKTsKIAogICAgIC8qCiAgICAgICogTUR1cGRhdGUoTUQsWCxjb3VudCkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgKiAqKiBldmVyeSBNRCBjb21wdXRhdGlvbiBzaG91bGQgZW5kIHdpdGggb25lIGNhbGwgdG8gTUR1cGRhdGUgd2l0aCBhCiAgICAgICogKiogY291bnQgbGVzcyB0aGFuIDUxMi4gIFplcm8gaXMgT0sgZm9yIGEgY291bnQuCiAgICAgICovCi0gICAgZXh0ZXJuIGludCAgICAgIE1EdXBkYXRlKE1EcHRyLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQgaW50IE1EdXBkYXRlKE1EcHRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7CiAKICAgICAvKgogICAgICAqIE1EcHJpbnQoTUQpCkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgKi8KICAgICBleHRlcm4gdm9pZCAgICAgTURwcmludChNRHB0cik7CiAKLSAgICBpbnQgICAgICAgICAgICAgTURjaGVja3N1bSh1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsCisgICAgaW50ICAgICAgICAgICAgIE1EY2hlY2tzdW0oY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNsZW4pOwotICAgIGludCAgICAgICAgICAgICBNRHNpZ24odV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbiwgdV9jaGFyICogc2VjcmV0LAorICAgIGludCAgICAgICAgICAgICBNRHNpZ24oY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbiwgY29uc3QgdV9jaGFyICogc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlY3JldGxlbik7CiAgICAgdm9pZCAgICAgICAgICAgIE1EZ2V0KE1Ec3RydWN0ICogTUQsIHVfY2hhciAqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAppbmRleCBmN2M4YmJhLi4xOGQ5OGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCkBAIC0zNCw3ICszNCwxMyBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgICAgICAgIC8qIGZvciBGSUxFICovCiAKLSNkZWZpbmUgTUlCIDEsIDMsIDYsIDEsIDIsIDEKKyNpbmNsdWRlIDxuZXQtc25tcC9taWJfYXBpLmg+CisKKyNkZWZpbmUgTkVUU05NUF9NSUIyX09JRCAxLCAzLCA2LCAxLCAyLCAxCisKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgTUlCIE5FVFNOTVBfTUlCMl9PSUQKKyNlbmRpZgogCiAjZGVmaW5lIE1JQl9JRlRZUEVfT1RIRVIJCSAgICAxCiAjZGVmaW5lIE1JQl9JRlRZUEVfUkVHVUxBUjE4MjIJCSAgICAyCkBAIC0xMTEsNjcgKzExNyw1NCBAQAogICAgIHN0cnVjdCB2YXJpYWJsZV9saXN0OwogICAgIHN0cnVjdCBlbnVtX2xpc3Q7CiAKLSAgICB2b2lkICAgICAgICAgICAgcHJpbnRfbWliKEZJTEUgKiBmcCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfYXNjaWlfZHVtcChGSUxFICopOwotICAgIGludCAgICAgICAgICAgICByZWFkX29iamlkKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKICAgICB2b2lkICAgICAgICAgICAgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3NldF9taWJfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAgKm5ldHNubXBfZ2V0X21pYl9kaXJlY3Rvcnkodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZml4dXBfbWliX2RpcmVjdG9yeSh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9pbml0X21pYih2b2lkKTsKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKLSAgICB2b2lkICAgICAgICAgICAgaW5pdF9taWIodm9pZCk7Ci0jZW5kaWYKLSAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fbWliKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBwcmludF9kZXNjcmlwdGlvbihvaWQgKiwgc2l6ZV90LCBpbnQpOwotICAgIHZvaWQgICAgICAgICAgICBmcHJpbnRfZGVzY3JpcHRpb24oRklMRSAqLCBvaWQgKiwgc2l6ZV90LCBpbnQpOwotICAgIGludCAgICAgICAgICAgICBzbnByaW50X2Rlc2NyaXB0aW9uKGNoYXIgKiwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90LCBpbnQpOwotICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19kZXNjcmlwdGlvbih1X2NoYXIgKiosIHNpemVfdCAqLCBzaXplX3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBvaWQgKiwgc2l6ZV90LCBpbnQpOwotICAgIGludCAgICAgICAgICAgICBnZXRfbW9kdWxlX25vZGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIG9pZCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX21pYmluZGV4X2xvYWQoIHZvaWQgKTsKKyAgICBjaGFyICogICAgICAgICAgbmV0c25tcF9taWJpbmRleF9sb29rdXAoIGNvbnN0IGNoYXIgKiApOworICAgIEZJTEUgKiAgICAgICAgICBuZXRzbm1wX21pYmluZGV4X25ldyggY29uc3QgY2hhciAqICk7CisgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX2Rlc2NyaXB0aW9uKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGdldF93aWxkX25vZGUoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGdldF9ub2RlKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKLSAgICBvaWQgICAgICAgICAgICAqc25tcF9wYXJzZV9vaWQoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmdldF90cmVlKGNvbnN0IG9pZCAqLCBzaXplX3QsIHN0cnVjdCB0cmVlICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmdldF90cmVlX2hlYWQodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNldF9mdW5jdGlvbihzdHJ1Y3QgdHJlZSAqKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHBhcnNlX29uZV9vaWRfaW5kZXgob2lkICoqIG9pZFN0YXJ0LCBzaXplX3QgKiBvaWRMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGxldGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHBhcnNlX29pZF9pbmRleGVzKG9pZCAqIG9pZEluZGV4LCBzaXplX3Qgb2lkTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBkYXRhKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyhvaWQgKiBpbiwgc2l6ZV90IGluX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgb2lkICogcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJlZml4X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogaW5kZXhlcyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgYnVpbGRfb2lkKG9pZCAqKiBvdXQsIHNpemVfdCAqIG91dF9sZW4sIG9pZCAqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmVmaXhfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogaW5kZXhlcyk7CiAgICAgaW50ICAgICAgICAgICAgIGJ1aWxkX29pZF9zZWdtZW50KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcik7CiAKLQotICAgIHZvaWQgICAgICAgICAgICBwcmludF92YXJpYWJsZShjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CiAKLSAgICB2b2lkICAgICAgICAgICAgZnByaW50X3ZhcmlhYmxlKEZJTEUgKiBmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7Ci0KLSAgICBpbnQgICAgICAgICAgICAgc25wcmludF92YXJpYWJsZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwotCi0gICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlKHVfY2hhciAqKiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSk7Ci0KKyAgICBORVRTTk1QX0lNUE9SVAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKICAgICBzdHJ1Y3QgdHJlZSAgICAqCiAjZWxzZQpAQCAtMTg1LDYgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYmppZGxlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZCh1X2NoYXIgKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGJ1Zl9sZW4sCkBAIC0xOTQsNDAgKzE4OCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYmppZGxlbik7CiAKLSAgICB2b2lkICAgICAgICAgICAgcHJpbnRfdmFsdWUoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwotCi0gICAgdm9pZCAgICAgICAgICAgIGZwcmludF92YWx1ZShGSUxFICogZnAsCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfdmFsdWUodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKIAotICAgIGludCAgICAgICAgICAgICBzbnByaW50X3ZhbHVlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7Ci0KLSAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfdmFsdWUodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKLQotCi0gICAgdm9pZCAgICAgICAgICAgIHByaW50X29iamlkKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOwotCi0gICAgdm9pZCAgICAgICAgICAgIGZwcmludF9vYmppZChGSUxFICogZnAsCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2Nfb2JqaWQodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7CiAKLSAgICBpbnQgICAgICAgICAgICAgc25wcmludF9vYmppZChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOwotCi0gICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX29iamlkKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9iamlkbGVuKTsKLQotCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfYnlfdHlwZSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCkBAIC0yMzYsMTIgKzIwOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdW5pdHMpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfaGV4c3RyaW5nKHVfY2hhciAqKiBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICosIHNpemVfdCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19hc2NpaXN0cmluZyh1X2NoYXIgKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLApAQCAtNDYwLDYgKzQzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZW51bV9saXN0ICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbnByaW50X2JpdHN0cmluZyhjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGVudW1fbGlzdCAqLCBjb25zdCBjaGFyICosCkBAIC00OTIsMjMgKzQ2NywzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwogI2VuZGlmCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0KEZJTEUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbGFiZWxlZG9pZCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9vaWQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3VmZml4KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N5bWJvbGljKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX21pYmNoaWxkb2lkKHZvaWQpOwogCiAgICAgY29uc3QgY2hhciAgICAgKnBhcnNlX29jdGV0X2hpbnQoY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdmFsdWUsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqbmV3X3ZhbCwgaW50ICpuZXdfdmFsX2xlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBjbGVhcl90cmVlX2ZsYWdzKHJlZ2lzdGVyIHN0cnVjdCB0cmVlICp0cCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpzbm1wX291dF90b2dnbGVfb3B0aW9ucyhjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfb3V0X3RvZ2dsZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpzbm1wX2luX3RvZ2dsZV9vcHRpb25zKGNoYXIgKik7CiAgICAgY2hhciAgICAgICAgICAgKnNubXBfaW5fb3B0aW9ucyhjaGFyICosIGludCwgY2hhciAqIGNvbnN0ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfaW5fdG9nZ2xlX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqLCBGSUxFICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgIG1pYl90b19hc25fdHlwZShpbnQgbWliX3R5cGUpOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCmluZGV4IGMxN2M3MjkuLjRlMzVkMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaApAQCAtNjMsOSArNjMsMTMgQEAKICNlbmRpZiAvKiAgSEFWRV9QVEhSRUFEX0ggICovCiAKIAorTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX3Jlc19pbml0KHZvaWQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX3Jlc19sb2NrKGludCBncm91cElELCBpbnQgcmVzb3VyY2VJRCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfcmVzX3VubG9jayhpbnQgZ3JvdXBJRCwgaW50IHJlc291cmNlSUQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX3Jlc19kZXN0cm95X211dGV4KGludCBncm91cElELCBpbnQgcmVzb3VyY2VJRCk7CiAKICNlbHNlIC8qICBORVRTTk1QX1JFRU5UUkFOVCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2FkZjQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgTkVUU05NUF9MSUJSQVJZX09JRF9ICisjZGVmaW5lIE5FVFNOTVBfTElCUkFSWV9PSURfSAorCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisjaWZuZGVmIEVJR0hUQklUX1NVQklEUwordHlwZWRlZiB1X2xvbmcgb2lkOworI2RlZmluZSBNQVhfU1VCSUQgICAweEZGRkZGRkZGVUwKKyNkZWZpbmUgTkVUU05NUF9QUklvICJsIgorI2Vsc2UKK3R5cGVkZWYgdWludDhfdCBvaWQ7CisjZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkYKKyNkZWZpbmUgTkVUU05NUF9QUklvICIiCisjZW5kaWYKKworI2VuZGlmIC8qIE5FVFNOTVBfTElCUkFSWV9PSURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCmluZGV4IGVlYWI0OTAuLjI5MGJiNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKQEAgLTM4LDYgKzM4LDcgQEAKICAgICAgICBOZXRTTk1QU3Rhc2hEdW1wICpkdW1wZm47CiAgICAgfSBuZXRzbm1wX29pZF9zdGFzaF9zYXZlX2luZm87CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9zdGFzaF9hZGRfZGF0YShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqcm9vdCwKIAkJCQkJICAgICAgIGNvbnN0IG9pZCAqIGxvb2t1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvb2t1cF9sZW4sCkBAIC00OCw5ICs0OSwxMSBAQAogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUKICAgICAgICAgKm5ldHNubXBfb2lkX3N0YXNoX2dldF9ub2RlKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICpyb290LAogCQkJCQkgICAgICAgY29uc3Qgb2lkICogbG9va3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG9va3VwX2xlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoKICAgICBuZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGUobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbik7CkBAIC02NSw2ICs2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKmN1cm9pZCwgc2l6ZV90IGN1cm9pZF9sZW4pOwogCiAgICAgLyogZnJlZXMgYWxsIGRhdGEgaW4gdGhlIHN0YXNoIGFuZCBjbGVhbnMgaXQgb3V0LiAgU2V0cyByb290ID0gTlVMTCAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX29pZF9zdGFzaF9mcmVlKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRTTk1QU3Rhc2hGcmVlTm9kZSAqZnJlZWZuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGYwODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaApAQCAtMCwwICsxLDE0MCBAQAorLyogY3J5cHRvL2Flcy9hZXMuaCAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaWZuZGVmIEhFQURFUl9BRVNfSAorI2RlZmluZSBIRUFERVJfQUVTX0gKKworI2lmZGVmIE9QRU5TU0xfTk9fQUVTCisjZXJyb3IgQUVTIGlzIGRpc2FibGVkLgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBBRVNfRU5DUllQVAkxCisjZGVmaW5lIEFFU19ERUNSWVBUCTAKKworLyogQmVjYXVzZSBhcnJheSBzaXplIGNhbid0IGJlIGEgY29uc3QgaW4gQywgdGhlIGZvbGxvd2luZyB0d28gYXJlIG1hY3Jvcy4KKyAgIEJvdGggc2l6ZXMgYXJlIGluIGJ5dGVzLiAqLworI2RlZmluZSBBRVNfTUFYTlIgMTQKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhpcyBzaG91bGQgYmUgYSBoaWRkZW4gdHlwZSwgYnV0IEVWUCByZXF1aXJlcyB0aGF0IHRoZSBzaXplIGJlIGtub3duICovCitzdHJ1Y3QgYWVzX2tleV9zdCB7CisjaWZkZWYgQUVTX0xPTkcKKyAgICB1bnNpZ25lZCBsb25nIHJkX2tleVs0ICooQUVTX01BWE5SICsgMSldOworI2Vsc2UKKyAgICB1bnNpZ25lZCBpbnQgcmRfa2V5WzQgKihBRVNfTUFYTlIgKyAxKV07CisjZW5kaWYKKyAgICBpbnQgcm91bmRzOworfTsKK3R5cGVkZWYgc3RydWN0IGFlc19rZXlfc3QgQUVTX0tFWTsKKworY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCk7CisKK2ludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CitpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwlBRVNfS0VZICprZXkpOworCit2b2lkIEFFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgQUVTX0tFWSAqa2V5KTsKK3ZvaWQgQUVTX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCBBRVNfS0VZICprZXkpOworCit2b2lkIEFFU19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCWNvbnN0IEFFU19LRVkgKmtleSwgY29uc3QgaW50IGVuYyk7Cit2b2lkIEFFU19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgQUVTX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgQUVTX2NmYjFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYyk7Cit2b2lkIEFFU19jZmI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwordm9pZCBBRVNfb2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0pOwordm9pZCBBRVNfY3RyMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciBpdmVjW0FFU19CTE9DS19TSVpFXSwKKwl1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbQUVTX0JMT0NLX1NJWkVdLAorCXVuc2lnbmVkIGludCAqbnVtKTsKKy8qIE5COiB0aGUgSVYgaXMgX3R3b18gYmxvY2tzIGxvbmcgKi8KK3ZvaWQgQUVTX2lnZV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGNvbnN0IGludCBlbmMpOworLyogTkI6IHRoZSBJViBpcyBfZm91cl8gYmxvY2tzIGxvbmcgKi8KK3ZvaWQgQUVTX2JpX2lnZV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCQljb25zdCBBRVNfS0VZICprZXkyLCBjb25zdCB1bnNpZ25lZCBjaGFyICppdmVjLAorCQkJY29uc3QgaW50IGVuYyk7CisKK2ludCBBRVNfd3JhcF9rZXkoQUVTX0tFWSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKwkJdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubGVuKTsKK2ludCBBRVNfdW53cmFwX2tleShBRVNfS0VZICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pOworCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIUhFQURFUl9BRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU3YmFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKQEAgLTAsMCArMSwyMzYgQEAKKy8qIGNyeXB0by9kZXMvZGVzLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworLyogQ29waWVkIHJvdWdobHkgZnJvbSBvcGVuc3NsY29uZi5oIHdoaWNoIGl0J3MgYSBsaXR0bGUgbW9yZSBjb21wbGV4ICovCisjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkIGxvbmcKKworI2lmbmRlZiBIRUFERVJfTkVXX0RFU19ICisjZGVmaW5lIEhFQURFUl9ORVdfREVTX0gKKworI2lmZGVmIE9QRU5TU0xfTk9fREVTCisjZXJyb3IgREVTIGlzIGRpc2FibGVkLgorI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX0JVSUxEX1NITElCQ1JZUFRPCisjIHVuZGVmIE9QRU5TU0xfRVhURVJOCisjIGRlZmluZSBPUEVOU1NMX0VYVEVSTiBPUEVOU1NMX0VYUE9SVAorI2VuZGlmCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBERVNfY2Jsb2NrWzhdOwordHlwZWRlZiAvKiBjb25zdCAqLyB1bnNpZ25lZCBjaGFyIGNvbnN0X0RFU19jYmxvY2tbOF07CisvKiBXaXRoICJjb25zdCIsIGdjYyAyLjguMSBvbiBTb2xhcmlzIHRoaW5rcyB0aGF0IERFU19jYmxvY2sgKgorICogYW5kIGNvbnN0X0RFU19jYmxvY2sgKiBhcmUgaW5jb21wYXRpYmxlIHBvaW50ZXIgdHlwZXMuICovCisKK3R5cGVkZWYgc3RydWN0IERFU19rcworICAgIHsKKyAgICB1bmlvbgorCXsKKwlERVNfY2Jsb2NrIGNibG9jazsKKwkvKiBtYWtlIHN1cmUgdGhpbmdzIGFyZSBjb3JyZWN0IHNpemUgb24gbWFjaGluZXMgd2l0aAorCSAqIDggYnl0ZSBsb25ncyAqLworCURFU19MT05HIGRlc2xvbmdbMl07CisJfSBrc1sxNl07CisgICAgfSBERVNfa2V5X3NjaGVkdWxlOworCisjaWZuZGVmIE9QRU5TU0xfRElTQUJMRV9PTERfREVTX1NVUFBPUlQKKyMgaWZuZGVmIE9QRU5TU0xfRU5BQkxFX09MRF9ERVNfU1VQUE9SVAorIyAgZGVmaW5lIE9QRU5TU0xfRU5BQkxFX09MRF9ERVNfU1VQUE9SVAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgREVTX0tFWV9TWiAJKHNpemVvZihERVNfY2Jsb2NrKSkKKyNkZWZpbmUgREVTX1NDSEVEVUxFX1NaIChzaXplb2YoREVTX2tleV9zY2hlZHVsZSkpCisKKyNkZWZpbmUgREVTX0VOQ1JZUFQJMQorI2RlZmluZSBERVNfREVDUllQVAkwCisKKyNkZWZpbmUgREVTX0NCQ19NT0RFCTAKKyNkZWZpbmUgREVTX1BDQkNfTU9ERQkxCisKKyNkZWZpbmUgREVTX2VjYjJfZW5jcnlwdChpLG8sazEsazIsZSkgXAorCURFU19lY2IzX2VuY3J5cHQoKGkpLChvKSwoazEpLChrMiksKGsxKSwoZSkpCisKKyNkZWZpbmUgREVTX2VkZTJfY2JjX2VuY3J5cHQoaSxvLGwsazEsazIsaXYsZSkgXAorCURFU19lZGUzX2NiY19lbmNyeXB0KChpKSwobyksKGwpLChrMSksKGsyKSwoazEpLChpdiksKGUpKQorCisjZGVmaW5lIERFU19lZGUyX2NmYjY0X2VuY3J5cHQoaSxvLGwsazEsazIsaXYsbixlKSBcCisJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdCgoaSksKG8pLChsKSwoazEpLChrMiksKGsxKSwoaXYpLChuKSwoZSkpCisKKyNkZWZpbmUgREVTX2VkZTJfb2ZiNjRfZW5jcnlwdChpLG8sbCxrMSxrMixpdixuKSBcCisJREVTX2VkZTNfb2ZiNjRfZW5jcnlwdCgoaSksKG8pLChsKSwoazEpLChrMiksKGsxKSwoaXYpLChuKSkKKworY29uc3QgY2hhciAqREVTX29wdGlvbnModm9pZCk7Cit2b2lkIERFU19lY2IzX2VuY3J5cHQoY29uc3RfREVTX2NibG9jayAqaW5wdXQsIERFU19jYmxvY2sgKm91dHB1dCwKKwkJICAgICAgREVTX2tleV9zY2hlZHVsZSAqa3MxLERFU19rZXlfc2NoZWR1bGUgKmtzMiwKKwkJICAgICAgREVTX2tleV9zY2hlZHVsZSAqa3MzLCBpbnQgZW5jKTsKK0RFU19MT05HIERFU19jYmNfY2tzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsREVTX2NibG9jayAqb3V0cHV0LAorCQkgICAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsCisJCSAgICAgICBjb25zdF9ERVNfY2Jsb2NrICppdmVjKTsKKy8qIERFU19jYmNfZW5jcnlwdCBkb2VzIG5vdCB1cGRhdGUgdGhlIElWISAgVXNlIERFU19uY2JjX2VuY3J5cHQgaW5zdGVhZC4gKi8KK3ZvaWQgREVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLAorCQkgICAgIGludCBlbmMpOwordm9pZCBERVNfbmNiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJICAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYywKKwkJICAgICAgaW50IGVuYyk7Cit2b2lkIERFU194Y2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkgICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLAorCQkgICAgICBjb25zdF9ERVNfY2Jsb2NrICppbncsY29uc3RfREVTX2NibG9jayAqb3V0dyxpbnQgZW5jKTsKK3ZvaWQgREVTX2NmYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxpbnQgbnVtYml0cywKKwkJICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLAorCQkgICAgIGludCBlbmMpOwordm9pZCBERVNfZWNiX2VuY3J5cHQoY29uc3RfREVTX2NibG9jayAqaW5wdXQsREVTX2NibG9jayAqb3V0cHV0LAorCQkgICAgIERFU19rZXlfc2NoZWR1bGUgKmtzLGludCBlbmMpOworCisvKiAJVGhpcyBpcyB0aGUgREVTIGVuY3J5cHRpb24gZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBieSBqdXN0IGFib3V0CisJZXZlcnkgb3RoZXIgREVTIHJvdXRpbmUgaW4gdGhlIGxpYnJhcnkuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcworCWZ1bmN0aW9uIGV4Y2VwdCB0byBpbXBsZW1lbnQgJ21vZGVzJyBvZiBERVMuICBJIHNheSB0aGlzIGJlY2F1c2UgdGhlCisJZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGlzIHJvdXRpbmUgZG8gdGhlIGNvbnZlcnNpb24gZnJvbSAnY2hhciAqJyB0bworCWxvbmcsIGFuZCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgdG8gbWFrZSBzdXJlICdub24tYWxpZ25lZCcgbWVtb3J5CisJYWNjZXNzIGRvIG5vdCBvY2N1ci4gIFRoZSBjaGFyYWN0ZXJzIGFyZSBsb2FkZWQgJ2xpdHRsZSBlbmRpYW4nLgorCURhdGEgaXMgYSBwb2ludGVyIHRvIDIgdW5zaWduZWQgbG9uZydzIGFuZCBrcyBpcyB0aGUKKwlERVNfa2V5X3NjaGVkdWxlIHRvIHVzZS4gIGVuYywgaXMgbm9uIHplcm8gc3BlY2lmaWVzIGVuY3J5cHRpb24sCisJemVybyBpZiBkZWNyeXB0aW9uLiAqLwordm9pZCBERVNfZW5jcnlwdDEoREVTX0xPTkcgKmRhdGEsREVTX2tleV9zY2hlZHVsZSAqa3MsIGludCBlbmMpOworCisvKiAJVGhpcyBmdW5jdGlvbnMgaXMgdGhlIHNhbWUgYXMgREVTX2VuY3J5cHQxKCkgZXhjZXB0IHRoYXQgdGhlIERFUworCWluaXRpYWwgcGVybXV0YXRpb24gKElQKSBhbmQgZmluYWwgcGVybXV0YXRpb24gKEZQKSBoYXZlIGJlZW4gbGVmdAorCW91dC4gIEFzIGZvciBERVNfZW5jcnlwdDEoKSwgeW91IHNob3VsZCBub3QgdXNlIHRoaXMgZnVuY3Rpb24uCisJSXQgaXMgdXNlZCBieSB0aGUgcm91dGluZXMgaW4gdGhlIGxpYnJhcnkgdGhhdCBpbXBsZW1lbnQgdHJpcGxlIERFUy4KKwlJUCgpIERFU19lbmNyeXB0MigpIERFU19lbmNyeXB0MigpIERFU19lbmNyeXB0MigpIEZQKCkgaXMgdGhlIHNhbWUKKwlhcyBERVNfZW5jcnlwdDEoKSBERVNfZW5jcnlwdDEoKSBERVNfZW5jcnlwdDEoKSBleGNlcHQgZmFzdGVyIDotKS4gKi8KK3ZvaWQgREVTX2VuY3J5cHQyKERFU19MT05HICpkYXRhLERFU19rZXlfc2NoZWR1bGUgKmtzLCBpbnQgZW5jKTsKKwordm9pZCBERVNfZW5jcnlwdDMoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJICBERVNfa2V5X3NjaGVkdWxlICprczIsIERFU19rZXlfc2NoZWR1bGUgKmtzMyk7Cit2b2lkIERFU19kZWNyeXB0MyhERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMiwgREVTX2tleV9zY2hlZHVsZSAqa3MzKTsKK3ZvaWQgREVTX2VkZTNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsdW5zaWduZWQgY2hhciAqb3V0cHV0LCAKKwkJCSAgbG9uZyBsZW5ndGgsCisJCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMSxERVNfa2V5X3NjaGVkdWxlICprczIsCisJCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMyxERVNfY2Jsb2NrICppdmVjLGludCBlbmMpOwordm9pZCBERVNfZWRlM19jYmNtX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LAorCQkJICAgbG9uZyBsZW5ndGgsCisJCQkgICBERVNfa2V5X3NjaGVkdWxlICprczEsREVTX2tleV9zY2hlZHVsZSAqa3MyLAorCQkJICAgREVTX2tleV9zY2hlZHVsZSAqa3MzLAorCQkJICAgREVTX2NibG9jayAqaXZlYzEsREVTX2NibG9jayAqaXZlYzIsCisJCQkgICBpbnQgZW5jKTsKK3ZvaWQgREVTX2VkZTNfY2ZiNjRfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkJICAgIERFU19rZXlfc2NoZWR1bGUgKmtzMixERVNfa2V5X3NjaGVkdWxlICprczMsCisJCQkgICAgREVTX2NibG9jayAqaXZlYyxpbnQgKm51bSxpbnQgZW5jKTsKK3ZvaWQgREVTX2VkZTNfY2ZiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LAorCQkJICBpbnQgbnVtYml0cyxsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICprczEsCisJCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMixERVNfa2V5X3NjaGVkdWxlICprczMsCisJCQkgIERFU19jYmxvY2sgKml2ZWMsaW50IGVuYyk7Cit2b2lkIERFU19lZGUzX29mYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LAorCQkJICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJCSAgICBERVNfa2V5X3NjaGVkdWxlICprczIsREVTX2tleV9zY2hlZHVsZSAqa3MzLAorCQkJICAgIERFU19jYmxvY2sgKml2ZWMsaW50ICpudW0pOworI2lmIDAKK3ZvaWQgREVTX3h3aGl0ZV9pbjJvdXQoY29uc3RfREVTX2NibG9jayAqREVTX2tleSxjb25zdF9ERVNfY2Jsb2NrICppbl93aGl0ZSwKKwkJICAgICAgIERFU19jYmxvY2sgKm91dF93aGl0ZSk7CisjZW5kaWYKKworaW50IERFU19lbmNfcmVhZChpbnQgZmQsdm9pZCAqYnVmLGludCBsZW4sREVTX2tleV9zY2hlZHVsZSAqc2NoZWQsCisJCSBERVNfY2Jsb2NrICppdik7CitpbnQgREVTX2VuY193cml0ZShpbnQgZmQsY29uc3Qgdm9pZCAqYnVmLGludCBsZW4sREVTX2tleV9zY2hlZHVsZSAqc2NoZWQsCisJCSAgREVTX2NibG9jayAqaXYpOworY2hhciAqREVTX2ZjcnlwdChjb25zdCBjaGFyICpidWYsY29uc3QgY2hhciAqc2FsdCwgY2hhciAqcmV0KTsKK2NoYXIgKkRFU19jcnlwdChjb25zdCBjaGFyICpidWYsY29uc3QgY2hhciAqc2FsdCk7Cit2b2lkIERFU19vZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsaW50IG51bWJpdHMsCisJCSAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYyk7Cit2b2lkIERFU19wY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkgICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLAorCQkgICAgICBpbnQgZW5jKTsKK0RFU19MT05HIERFU19xdWFkX2Nrc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LERFU19jYmxvY2sgb3V0cHV0W10sCisJCQlsb25nIGxlbmd0aCxpbnQgb3V0X2NvdW50LERFU19jYmxvY2sgKnNlZWQpOworaW50IERFU19yYW5kb21fa2V5KERFU19jYmxvY2sgKnJldCk7Cit2b2lkIERFU19zZXRfb2RkX3Bhcml0eShERVNfY2Jsb2NrICprZXkpOworaW50IERFU19jaGVja19rZXlfcGFyaXR5KGNvbnN0X0RFU19jYmxvY2sgKmtleSk7CitpbnQgREVTX2lzX3dlYWtfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSk7CisvKiBERVNfc2V0X2tleSAoPSBzZXRfa2V5ID0gREVTX2tleV9zY2hlZCA9IGtleV9zY2hlZCkgY2FsbHMKKyAqIERFU19zZXRfa2V5X2NoZWNrZWQgaWYgZ2xvYmFsIHZhcmlhYmxlIERFU19jaGVja19rZXkgaXMgc2V0LAorICogREVTX3NldF9rZXlfdW5jaGVja2VkIG90aGVyd2lzZS4gKi8KK2ludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKK2ludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cit2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwordm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5KTsKK3ZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKK3ZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLAorCQkgICAgICAgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYyxpbnQgKm51bSwKKwkJICAgICAgIGludCBlbmMpOwordm9pZCBERVNfb2ZiNjRfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsbG9uZyBsZW5ndGgsCisJCSAgICAgICBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLGludCAqbnVtKTsKKworaW50IERFU19yZWFkX3Bhc3N3b3JkKERFU19jYmxvY2sgKmtleSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgdmVyaWZ5KTsKK2ludCBERVNfcmVhZF8ycGFzc3dvcmRzKERFU19jYmxvY2sgKmtleTEsIERFU19jYmxvY2sgKmtleTIsIGNvbnN0IGNoYXIgKnByb21wdCwKKwlpbnQgdmVyaWZ5KTsKKworI2RlZmluZSBERVNfZml4dXBfa2V5X3Bhcml0eSBERVNfc2V0X29kZF9wYXJpdHkKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTg1ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1LmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIGNyeXB0by9tZDUvbWQ1LmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2lmbmRlZiBIRUFERVJfTUQ1X0gKKyNkZWZpbmUgSEVBREVSX01ENV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfTk9fTUQ1CisjZXJyb3IgTUQ1IGlzIGRpc2FibGVkLgorI2VuZGlmCisKKy8qCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICogISBNRDVfTE9ORyBoYXMgdG8gYmUgYXQgbGVhc3QgMzIgYml0cyB3aWRlLiBJZiBpdCdzIHdpZGVyLCB0aGVuICEKKyAqICEgTUQ1X0xPTkdfTE9HMiBoYXMgdG8gYmUgZGVmaW5lZCBhbG9uZy4JCQkgICAhCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICovCisKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCisjZGVmaW5lIE1ENV9MT05HX0xPRzIgMworLyoKKyAqIF9DUkFZIG5vdGUuIEkgY291bGQgZGVjbGFyZSBzaG9ydCwgYnV0IEkgaGF2ZSBubyBpZGVhIHdoYXQgaW1wYWN0CisgKiBkb2VzIGl0IGhhdmUgb24gcGVyZm9ybWFuY2Ugb24gbm9uZS1UM0UgbWFjaGluZXMuIEkgY291bGQgZGVjbGFyZQorICogaW50LCBidXQgYXQgbGVhc3Qgb24gQzkwIHNpemVvZihpbnQpIGNhbiBiZSBjaG9zZW4gYXQgY29tcGlsZSB0aW1lLgorICogU28gSSd2ZSBjaG9zZW4gbG9uZy4uLgorICoJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAqLworI2Vsc2UKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSBNRDVfQ0JMT0NLCTY0CisjZGVmaW5lIE1ENV9MQkxPQ0sJKE1ENV9DQkxPQ0svNCkKKyNkZWZpbmUgTUQ1X0RJR0VTVF9MRU5HVEggMTYKKwordHlwZWRlZiBzdHJ1Y3QgTUQ1c3RhdGVfc3QKKwl7CisJTUQ1X0xPTkcgQSxCLEMsRDsKKwlNRDVfTE9ORyBObCxOaDsKKwlNRDVfTE9ORyBkYXRhW01ENV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW07CisJfSBNRDVfQ1RYOworCitpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CitpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqTUQ1KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIE1ENV9UcmFuc2Zvcm0oTUQ1X0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqYik7CisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaApAQCAtMCwwICsxLDE5OSBAQAorLyogY3J5cHRvL3NoYS9zaGEuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaWZuZGVmIEhFQURFUl9TSEFfSAorI2RlZmluZSBIRUFERVJfU0hBX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgfHwgKGRlZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiBkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkpCisjZXJyb3IgU0hBIGlzIGRpc2FibGVkLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKyNkZWZpbmUgRklQU19TSEFfU0laRV9UIHNpemVfdAorI2VuZGlmCisKKy8qCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKiAhIFNIQV9MT05HIGhhcyB0byBiZSBhdCBsZWFzdCAzMiBiaXRzIHdpZGUuIElmIGl0J3Mgd2lkZXIsIHRoZW4gIQorICogISBTSEFfTE9OR19MT0cyIGhhcyB0byBiZSBkZWZpbmVkIGFsb25nLiAgICAgICAgICAgICAgICAgICAgICAgICEKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqLworCisjaWYgZGVmaW5lZChfX0xQMzJfXykKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgbG9uZworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19DUkFZKSB8fCBkZWZpbmVkKF9fSUxQNjRfXykKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgbG9uZworI2RlZmluZSBTSEFfTE9OR19MT0cyIDMKKyNlbHNlCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgU0hBX0xCTE9DSwkxNgorI2RlZmluZSBTSEFfQ0JMT0NLCShTSEFfTEJMT0NLKjQpCS8qIFNIQSB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgMzIgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjZGVmaW5lIFNIQV9MQVNUX0JMT0NLICAoU0hBX0NCTE9DSy04KQorI2RlZmluZSBTSEFfRElHRVNUX0xFTkdUSCAyMAorCit0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORyBoMCxoMSxoMixoMyxoNDsKKwlTSEFfTE9ORyBObCxOaDsKKwlTSEFfTE9ORyBkYXRhW1NIQV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW07CisJfSBTSEFfQ1RYOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAoraW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOworaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQoraW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKK2ludCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTEoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBMV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2RlZmluZSBTSEEyNTZfQ0JMT0NLCShTSEFfTEJMT0NLKjQpCS8qIFNIQS0yNTYgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDMyIGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2RlZmluZSBTSEEyMjRfRElHRVNUX0xFTkdUSAkyOAorI2RlZmluZSBTSEEyNTZfRElHRVNUX0xFTkdUSAkzMgorCit0eXBlZGVmIHN0cnVjdCBTSEEyNTZzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORyBoWzhdOworCVNIQV9MT05HIE5sLE5oOworCVNIQV9MT05HIGRhdGFbU0hBX0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bSxtZF9sZW47CisJfSBTSEEyNTZfQ1RYOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CitpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7CitpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMjI0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK2ludCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKK2ludCBTSEEyNTZfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTI1Nl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEEyNTZfVHJhbnNmb3JtKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNkZWZpbmUgU0hBMzg0X0RJR0VTVF9MRU5HVEgJNDgKKyNkZWZpbmUgU0hBNTEyX0RJR0VTVF9MRU5HVEgJNjQKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorLyoKKyAqIFVubGlrZSAzMi1iaXQgZGlnZXN0IGFsZ29yaXRobXMsIFNIQS01MTIgKnJlbGllcyogb24gU0hBX0xPTkc2NAorICogYmVpbmcgZXhhY3RseSA2NC1iaXQgd2lkZS4gU2VlIEltcGxlbWVudGF0aW9uIE5vdGVzIGluIHNoYTUxMi5jCisgKiBmb3IgZnVydGhlciBkZXRhaWxzLgorICovCisjZGVmaW5lIFNIQTUxMl9DQkxPQ0sJKFNIQV9MQkxPQ0sqOCkJLyogU0hBLTUxMiB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgNjQgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIF9faW50NjQKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVSTY0CisjZWxpZiBkZWZpbmVkKF9fYXJjaDY0X18pCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgbG9uZworI2RlZmluZSBVNjQoQykgICAgIEMjI1VMCisjZWxzZQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIGxvbmcgbG9uZworI2RlZmluZSBVNjQoQykgICAgIEMjI1VMTAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0CisJeworCVNIQV9MT05HNjQgaFs4XTsKKwlTSEFfTE9ORzY0IE5sLE5oOworCXVuaW9uIHsKKwkJU0hBX0xPTkc2NAlkW1NIQV9MQkxPQ0tdOworCQl1bnNpZ25lZCBjaGFyCXBbU0hBNTEyX0NCTE9DS107CisJfSB1OworCXVuc2lnbmVkIGludCBudW0sbWRfbGVuOworCX0gU0hBNTEyX0NUWDsKKyNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCitpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEzODRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMzg0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK2ludCBTSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKK2ludCBTSEE1MTJfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTUxMl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEE1MTIoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEE1MTJfVHJhbnNmb3JtKFNIQTUxMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKaW5kZXggNzg1MTA2ZC4uY2U0NmFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKQEAgLTQsNiArNCw5IEBACiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9taWJfYXBpLmg+CisKICAgICAvKgogICAgICAqIHBhcnNlLmgKICAgICAgKi8KQEAgLTI5LDEwICszMiwxOSBAQAogU09GVFdBUkUuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTUFYTEFCRUwgICAgICAgIDY0ICAgICAgLyogbWF4aW11bSBjaGFyYWN0ZXJzIGluIGEgbGFiZWwgKi8KKyNkZWZpbmUgTkVUU05NUF9NQVhMQUJFTCA2NCAgICAgIC8qIG1heGltdW0gY2hhcmFjdGVycyBpbiBhIGxhYmVsICovCiAjZGVmaW5lIE1BWFRPS0VOICAgICAgICAxMjggICAgIC8qIG1heGltdW0gY2hhcmFjdGVycyBpbiBhIHRva2VuICovCiAjZGVmaW5lIE1BWFFVT1RFU1RSICAgICA0MDk2ICAgIC8qIG1heGltdW0gY2hhcmFjdGVycyBpbiBhIHF1b3RlZCBzdHJpbmcgKi8KIAorLyoKKyAqIE1BWExBQkVMIGFwcGVhcnMgdG8gYmUgdW51c2VkIGluIGNvZGUsIGFuZCBjb25mbGljdHMgd2l0aAorICogPGFycGEvbmFtZXNlci5oPi4gT25seSBkZWZpbmUgaXQgaWYgcmVxdWVzdGVkLiBUaGlzIHdpbGwKKyAqIGNhdXNlIHByb2JsZW1zIGlmIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIGlzIGFsc28gZW5hYmxlZC4KKyAqLworI2lmZGVmIFVDRF9DT01QQVRJQkxFCisjZGVmaW5lIE1BWExBQkVMICAgICAgICBORVRTTk1QX01BWExBQkVMCisjZW5kaWYKKwogICAgIHN0cnVjdCB2YXJpYWJsZV9saXN0OwogCiAgICAgLyoKQEAgLTcwLDMzICs4Miw2IEBACiAgICAgfTsKIAogICAgIC8qCi0gICAgICogQSBsaW5rZWQgbGlzdCBvZiBub2Rlcy4KLSAgICAgKi8KLSAgICBzdHJ1Y3Qgbm9kZSB7Ci0gICAgICAgIHN0cnVjdCBub2RlICAgICpuZXh0OwotICAgICAgICBjaGFyICAgICAgICAgICAqbGFiZWw7ICAvKiBUaGlzIG5vZGUncyAodW5pcXVlKSB0ZXh0dWFsIG5hbWUgKi8KLSAgICAgICAgdV9sb25nICAgICAgICAgIHN1YmlkOyAgLyogVGhpcyBub2RlJ3MgaW50ZWdlciBzdWJpZGVudGlmaWVyICovCi0gICAgICAgIGludCAgICAgICAgICAgICBtb2RpZDsgIC8qIFRoZSBtb2R1bGUgY29udGFpbmluZyB0aGlzIG5vZGUgKi8KLSAgICAgICAgY2hhciAgICAgICAgICAgKnBhcmVudDsgLyogVGhlIHBhcmVudCdzIHRleHR1YWwgbmFtZSAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgdGNfaW5kZXg7ICAgICAgIC8qIGluZGV4IGludG8gdGNsaXN0ICgtMSBpZiBOQSkgKi8KLSAgICAgICAgaW50ICAgICAgICAgICAgIHR5cGU7ICAgLyogVGhlIHR5cGUgb2Ygb2JqZWN0IHRoaXMgcmVwcmVzZW50cyAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgYWNjZXNzOwotICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwotICAgICAgICBzdHJ1Y3QgZW51bV9saXN0ICplbnVtczsgICAgICAgIC8qIChvcHRpb25hbCkgbGlzdCBvZiBlbnVtZXJhdGVkIGludGVnZXJzICovCi0gICAgICAgIHN0cnVjdCByYW5nZV9saXN0ICpyYW5nZXM7Ci0gICAgICAgIHN0cnVjdCBpbmRleF9saXN0ICppbmRleGVzOwotICAgICAgICBjaGFyICAgICAgICAgICAqYXVnbWVudHM7Ci0gICAgICAgIHN0cnVjdCB2YXJiaW5kX2xpc3QgKnZhcmJpbmRzOwotICAgICAgICBjaGFyICAgICAgICAgICAqaGludDsKLSAgICAgICAgY2hhciAgICAgICAgICAgKnVuaXRzOwotICAgICAgICBjaGFyICAgICAgICAgICAqZGVzY3JpcHRpb247ICAgIC8qIGRlc2NyaXB0aW9uIChhIHF1b3RlZCBzdHJpbmcpICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICpyZWZlcmVuY2U7ICAgIC8qIHJlZmVyZW5jZXMgKGEgcXVvdGVkIHN0cmluZykgKi8KLSAgICAgICAgY2hhciAgICAgICAgICAgKmRlZmF1bHRWYWx1ZTsKLQljaGFyICAgICAgICAgICAqZmlsZW5hbWU7Ci0gICAgICAgIGludCAgICAgICAgICAgICBsaW5lbm87Ci0gICAgfTsKLQotICAgIC8qCiAgICAgICogQSB0cmVlIGluIHRoZSBmb3JtYXQgb2YgdGhlIHRyZWUgc3RydWN0dXJlIG9mIHRoZSBNSUIuCiAgICAgICovCiAgICAgc3RydWN0IHRyZWUgewpAQCAtMTI5LDYgKzExNCw3IEBACiAgICAgICAgIGNoYXIgICAgICAgICAgICpyZWZlcmVuY2U7ICAgIC8qIHJlZmVyZW5jZXMgKGEgcXVvdGVkIHN0cmluZykgKi8KICAgICAgICAgaW50ICAgICAgICAgICAgIHJlcG9ydGVkOyAgICAgICAvKiAxPXJlcG9ydCBzdGFydGVkIGluIHByaW50X3N1YnRyZWUuLi4gKi8KICAgICAgICAgY2hhciAgICAgICAgICAgKmRlZmF1bHRWYWx1ZTsKKyAgICAgICBjaGFyCSAgICAgICAqcGFyc2VFcnJvclN0cmluZzsgLyogQ29udGFpbnMgdGhlIGVycm9yIHN0cmluZyBpZiB0aGVyZSBhcmUgZXJyb3JzIGluIHBhcnNpbmcgTUlCcyAqLwogICAgIH07CiAKICAgICAvKgpAQCAtMjA5LDQ2ICsxOTUsNTEgQEAKICNkZWZpbmUJQU5PTgkiYW5vbnltb3VzIyIKICNkZWZpbmUJQU5PTl9MRU4gIHN0cmxlbihBTk9OKQogCi0gICAgc3RydWN0IHRyZWUgICAgKm5ldHNubXBfcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqKTsKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKLSAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqKTsKLSNlbmRpZgotICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX21pYihjb25zdCBjaGFyICopOwotICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX2FsbF9taWJzKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3VubG9hZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSk7Ci0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCiAgICAgaW50ICAgICAgICAgICAgIHVubG9hZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgdm9pZCAgICAgICAgICAgIGluaXRfbWliX2ludGVybmFscyh2b2lkKTsKICNlbmRpZgogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2luaXRfbWliX2ludGVybmFscyh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgdW5sb2FkX2FsbF9taWJzKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBhZGRfbWliZmlsZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEZJTEUgKik7Ci0gICAgaW50ICAgICAgICAgICAgIGFkZF9taWJkaXIoY29uc3QgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgYWRkX21vZHVsZV9yZXBsYWNlbWVudChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCk7CiAgICAgaW50ICAgICAgICAgICAgIHdoaWNoX21vZHVsZShjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKm1vZHVsZV9uYW1lKGludCwgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9zdWJ0cmVlKEZJTEUgKiwgc3RydWN0IHRyZWUgKiwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9hc2NpaV9kdW1wX3RyZWUoRklMRSAqLCBzdHJ1Y3QgdHJlZSAqLCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmZpbmRfdHJlZV9ub2RlKGNvbnN0IGNoYXIgKiwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpnZXRfdGNfZGVzY3JpcHRvcihpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKmdldF90Y19kZXNjcmlwdGlvbihpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmZpbmRfYmVzdF90cmVlX25vZGUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdHJlZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50ICopOwogICAgIC8qCiAgICAgICogYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZmluZF9ub2RlKGNvbnN0IGNoYXIgKiwgc3RydWN0IHRyZWUgKik7CiAgICAgc3RydWN0IHRyZWUgICAgKmZpbmRfbm9kZTIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCBtb2R1bGUgICpmaW5kX21vZHVsZShpbnQpOwogICAgIHZvaWQgICAgICAgICAgICBhZG9wdF9vcnBoYW5zKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNubXBfbWliX3RvZ2dsZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKmxlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBvdXRmKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9taWIoRklMRSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9taWJfdHJlZShGSUxFICosIHN0cnVjdCB0cmVlICosIGludCk7CiAgICAgaW50ICAgICAgICAgICAgIGdldF9taWJfcGFyc2VfZXJyb3JfY291bnQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfdG9rZW4oRklMRSAqIGZwLCBjaGFyICp0b2tlbiwgaW50IG1heHRsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmZpbmRfYmVzdF90cmVlX25vZGUoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdHJlZSAqdHJlZV90b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgKiBtYXRjaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCmluZGV4IDc4YWY1NmUuLjA4ZWNhOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCkBAIC0xNSw3ICsxNSw3IEBACiAjZGVmaW5lIFBSRU1JQl9DT05GSUcgMQogI2RlZmluZSBFSVRIRVJfQ09ORklHIDIKIAotCisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgogCiAgICAgLyoKICAgICAgKiBEZWZpbmVzIGEgc2V0IG9mIGZpbGUgdHlwZXMgYW5kIHRoZSBwYXJzZSBhbmQgZnJlZSBmdW5jdGlvbnMKQEAgLTQzLDc2ICs0Myw4OCBAQAogICAgIH07CiAKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnKGNoYXIgKik7ICAgICAvKiBwYXJzZSBhIHNpbXBsZSBsaW5lOiB0b2tlbj12YWx1ZXMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcihjaGFyICopOyAgICAvKiBwcm9jZXNzIGxhdGVyLCBkdXJpbmcgc25tcF9pbml0KCkgKi8KICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcmllcyh2b2lkKTsgICAgICAvKiBydW4gYWxsIG1lbW9yaWVzIHRocm91Z2ggcGFyc2VyICovCi0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgc3RydWN0IGNvbmZpZ19saW5lICosIGludCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlncyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9wcmVtaWJfY29uZmlncyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZXMoaW50KTsKKyAgICBpbnQgICAgICAgICAgICAgcmVhZF9jb25maWcoY29uc3QgY2hhciAqLCBzdHJ1Y3QgY29uZmlnX2xpbmUgKiwgaW50KTsKKyAgICBpbnQgICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZXMoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBmcmVlX2NvbmZpZyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgY29uZmlnX3BlcnJvcihjb25zdCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICBjb25maWdfcHdhcm4oY29uc3QgY2hhciAqKTsKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyJiYgX19HTlVDX01JTk9SX18gPCA4KQorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKGNvbnN0IGNoYXIgKiwgLi4uKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfd2Fybihjb25zdCBjaGFyICosIC4uLik7CisjZWxzZQorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKGNvbnN0IGNoYXIgKiwgLi4uKQorCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgMSwgMikpKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfd2Fybihjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKF9fcHJpbnRmX18sIDEsIDIpKSk7CisjZW5kaWYKKworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNraXBfd2hpdGUoY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpza2lwX3doaXRlX2NvbnN0KGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc2tpcF9ub3Rfd2hpdGUoY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpza2lwX25vdF93aGl0ZV9jb25zdChjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNraXBfdG9rZW4oY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpza2lwX3Rva2VuX2NvbnN0KGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqY29weV9ud29yZChjaGFyICosIGNoYXIgKiwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpjb3B5X253b3JkX2NvbnN0KGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKmNvcHlfd29yZChjaGFyICosIGNoYXIgKik7ICAvKiBkbyBub3QgdXNlICovCi0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnX3dpdGhfdHlwZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgY2hhciAqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKLSAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpLCBjb25zdCBjaGFyICopOwotICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwotICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqcmVsZWFzZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ19wcmludF91c2FnZShjb25zdCBjaGFyICpsZWFkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICByZWFkX2NvbmZpZ193aXRoX3R5cGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGNoYXIgKnNhdmV0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKLSAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY2hhciAqcmVhZGZyb20sCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY29uc3QgY2hhciAqcmVhZGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqcmVhZGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfcmVhZF9vYmppZChjaGFyICpyZWFkZnJvbSwgb2lkICoqIG9iamlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbik7CisgICAgY29uc3QgY2hhciAgICAgKnJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QoY29uc3QgY2hhciAqcmVhZGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoqIG9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfc2F2ZV9vYmppZChjaGFyICpzYXZldG8sIG9pZCAqIG9iamlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3JlYWRfZGF0YShpbnQgdHlwZSwgY2hhciAqcmVhZGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhcHRyLCBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3JlYWRfbWVtb3J5KGludCB0eXBlLCBjaGFyICpyZWFkZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YXB0ciwgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19zdG9yZV9kYXRhKGludCB0eXBlLCBjaGFyICpzdG9yZXRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGFwdHIsIHNpemVfdCAqIGxlbik7CiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3N0b3JlX2RhdGFfcHJlZml4KGNoYXIgcHJlZml4LCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RvcmV0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IGxlbik7CisgICAgaW50ICByZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKGludCB3aGVuLCBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ19zdG9yZShjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICByZWFkX2FwcF9jb25maWdfc3RvcmUoY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9zYXZlX3BlcnNpc3RlbnQoY29uc3QgY2hhciAqdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9jbGVhbl9wZXJzaXN0ZW50KGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKGNvbnN0IGNoYXIgKnR5cGUpOwogCkBAIC0xMzAsMTMgKzE0MiwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiptZW0pOwogCiAgICAgdm9pZCAgICAgICAgICAgIHNldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKmdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpcik7CiAgICAgY29uc3QgY2hhciAgICAgKmdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc2V0X3RlbXBfZmlsZV9wYXR0ZXJuKGNvbnN0IGNoYXIgKnBhdHRlcm4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKmdldF90ZW1wX2ZpbGVfcGF0dGVybih2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBoYW5kbGVfbG9uZ19vcHQoY29uc3QgY2hhciAqbXlvcHRhcmcpOwogCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCmluZGV4IGQ5MjcwNDQuLmY0YjYzZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCkBAIC0zNSw2ICszNSw3IEBACiAgICAgaW50ICAgICAgICAgICAgIHNjX2dldF9wcm9wZXJfcHJpdl9sZW5ndGgoY29uc3Qgb2lkICogcHJpdnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgcHJpdnR5cGVfbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNjX2luaXQodm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIHNjX3NodXRkb3duKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOwpAQCAtNDMsMjAgKzQ0LDIwIEBACiAKICAgICBpbnQgICAgICAgICAgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaChjb25zdCBvaWQgKiBhdXRodHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXV0aHR5cGVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBNQUMsIHNpemVfdCAqIG1hY2xlbik7CiAKICAgICBpbnQgICAgICAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaChjb25zdCBvaWQgKiBhdXRodHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXV0aHR5cGVsZW4sIHVfY2hhciAqIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBrZXlsZW4sIHVfY2hhciAqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbXNnbGVuLCB1X2NoYXIgKiBNQUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGF1dGh0eXBlbGVuLCBjb25zdCB1X2NoYXIgKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQga2V5bGVuLCBjb25zdCB1X2NoYXIgKiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IG1zZ2xlbiwgY29uc3QgdV9jaGFyICogTUFDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IG1hY2xlbik7CiAKICAgICBpbnQgICAgICAgICAgICAgc2NfZW5jcnlwdChjb25zdCBvaWQgKiBwcml2dHlwZSwgc2l6ZV90IHByaXZ0eXBlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGl2LCB1X2ludCBpdmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwbGFpbnRleHQsIHVfaW50IHB0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHBsYWludGV4dCwgdV9pbnQgcHRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogY2lwaGVydGV4dCwgc2l6ZV90ICogY3RsZW4pOwogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2RlY3J5cHQoY29uc3Qgb2lkICogcHJpdnR5cGUsIHNpemVfdCBwcml2dHlwZWxlbiwKQEAgLTY2LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwbGFpbnRleHQsIHNpemVfdCAqIHB0bGVuKTsKIAogICAgIGludCAgICAgICAgICAgICBzY19oYXNoKGNvbnN0IG9pZCAqIGhhc2h0eXBlLCBzaXplX3QgaGFzaHR5cGVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIE1BQywgc2l6ZV90ICogTUFDX2xlbik7CiAKICAgICBpbnQgICAgICAgICAgICAgc2NfZ2V0X3RyYW5zZm9ybV90eXBlKG9pZCAqIGhhc2h0eXBlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKaW5kZXggYmZiNGM1Zi4uYTM1NWRkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCkBAIC0xOCw4ICsxOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdXRjX29mZnNldF9ob3VycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB1dGNfb2Zmc2V0X21pbnV0ZXMpOwogCi0gICAgdV9jaGFyICAgICAgICAgKmRhdGVfbl90aW1lKHRpbWVfdCAqLCBzaXplX3QgKik7Ci0gICAgdGltZV90ICAgICAgICAgIGN0aW1lX3RvX3RpbWV0KGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB1X2NoYXIgICAgICAgICAqZGF0ZV9uX3RpbWUoY29uc3QgdGltZV90ICosIHNpemVfdCAqKTsKKyAgICB0aW1lX3QgICAgICAgICAgY3RpbWVfdG9fdGltZXQoY29uc3QgY2hhciAqKTsKIAogICAgIC8qCiAgICAgICogVHJ1ZVZhbHVlIApAQCAtNTIsNyArNTMsMTEgQEAKICNkZWZpbmUgU1RfUEVSTUFORU5UCTQKICNkZWZpbmUgU1RfUkVBRE9OTFkJNQogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAgY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24oaW50IG9sZF92YWwsIGludCBuZXdfdmFsKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNoYXIgICAgICAgICAgICBjaGVja19yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZV90cmFuc2l0aW9uKGludCBvbGRfdmFsLCBpbnQgbmV3X3ZhbCwgaW50IG9sZF9zdG9yYWdlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICBjaGVja19zdG9yYWdlX3RyYW5zaXRpb24oaW50IG9sZF92YWwsIGludCBuZXdfdmFsKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAppbmRleCAzYmI1NWJmLi5mNTk3OGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKQEAgLTExOCw3ICsxMTgsOSBAQAogI2RlZmluZSBTTk1QX01TR19HRVQgICAgICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4MCkgLyogYTA9MTYwICovCiAjZGVmaW5lIFNOTVBfTVNHX0dFVE5FWFQgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHgxKSAvKiBhMT0xNjEgKi8KICNkZWZpbmUgU05NUF9NU0dfUkVTUE9OU0UgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDIpIC8qIGEyPTE2MiAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgU05NUF9NU0dfU0VUICAgICAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDMpIC8qIGEzPTE2MyAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogUERVIHR5cGVzIGluIFNOTVB2MSBhbmQgU05NUHNlYyAKQEAgLTEzNyw2ICsxMzksNyBAQAogICAgICAqLwogI2RlZmluZSBTTk1QX01TR19SRVBPUlQgICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4OCkgLyogYTg9MTY4ICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgLyoKICAgICAgKiBpbnRlcm5hbCBtb2RlcyB0aGF0IHNob3VsZCBuZXZlciBiZSB1c2VkIGJ5IHRoZSBwcm90b2NvbCBmb3IgdGhlCiAgICAgICogcGR1IHR5cGUuCkBAIC0xNjIsNiArMTY1LDcgQEAKICNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfVU5ET19DT01NSVQgICAgICAgICAgIDI0CiAjZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX0lSUkVWRVJTSUJMRV9DT01NSVQgICAyNQogI2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9VTkRPX0NMRUFOVVAgICAgICAgICAgMjYKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIG1vZGVzID4gMTI4IGZvciBub24gc2V0cy4KQEAgLTE3NSw5ICsxNzksMTQgQEAKICAgICAvKgogICAgICAqIHRlc3QgZm9yIG1lbWJlciBvZiBDb25maXJtZWQgQ2xhc3MgaS5lLiwgcmVwb3J0YWJsZSAKICAgICAgKi8KKyNpZmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgU05NUF9DTURfQ09ORklSTUVEKGMpIChjID09IFNOTVBfTVNHX0lORk9STSB8fCBjID09IFNOTVBfTVNHX0dFVEJVTEsgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSBTTk1QX01TR19HRVRORVhUIHx8IGMgPT0gU05NUF9NU0dfR0VUICkKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNkZWZpbmUgU05NUF9DTURfQ09ORklSTUVEKGMpIChjID09IFNOTVBfTVNHX0lORk9STSB8fCBjID09IFNOTVBfTVNHX0dFVEJVTEsgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSBTTk1QX01TR19HRVRORVhUIHx8IGMgPT0gU05NUF9NU0dfR0VUIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID09IFNOTVBfTVNHX1NFVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID09IFNOTVBfTVNHX1NFVCApCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgLyoKICAgICAgKiBFeGNlcHRpb24gdmFsdWVzIGZvciBTTk1QdjJwLCBTTk1QdjJjLCBTTk1QdjJ1LCBTTk1QdjIqLCBhbmQgU05NUHYzIApAQCAtMjc3LDYgKzI4Niw3IEBACiAjZGVmaW5lIFNOTVBfU0VDX01PREVMX1NOTVB2MQkJMQogI2RlZmluZSBTTk1QX1NFQ19NT0RFTF9TTk1QdjJjCQkyCiAjZGVmaW5lIFNOTVBfU0VDX01PREVMX1VTTQkJMworI2RlZmluZSBTTk1QX1NFQ19NT0RFTF9UU00gICAgICAgICAgICAgIDQKICNkZWZpbmUgU05NUF9TRUNfTU9ERUxfU05NUHYycAkJMjU2CiAKICNkZWZpbmUgU05NUF9TRUNfTEVWRUxfTk9BVVRICQkxCkBAIC0zMTksMTEgKzMyOSwxNSBAQAogI2RlZmluZSBTTk1QQURNSU5MRU5HVEggMjU1CiAKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnVwdGltZV9zdHJpbmcodV9sb25nLCBjaGFyICopOwogICAgIGNoYXIgICAgICAgICAgICp1cHRpbWVfc3RyaW5nX24odV9sb25nLCBjaGFyICosIHNpemVfdCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHhkdW1wKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgeGR1bXAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqc25tcF9wYXJzZV92YXJfb3AodV9jaGFyICosIG9pZCAqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCB1X2NoYXIgKiosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICpzbm1wX2J1aWxkX3Zhcl9vcCh1X2NoYXIgKiwgb2lkICosIHNpemVfdCAqLCB1X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwgdV9jaGFyICosIHNpemVfdCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaAppbmRleCA4ODUxNmNiLi4zMjUxMDlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaApAQCAtMTEsNiArMTEsMTAgQEAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKIAorI2lmbmRlZiBsaW51eAorICAgIGNvbmZpZ19lcnJvcihBQUw1IFBWQyBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIC1MaW51eCBvbmx5LSk7CisjZW5kaWYKKwogI2luY2x1ZGUgPGF0bS5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWZjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfU05NUEFMSUFTRE9NQUlOX0gKKyNkZWZpbmUgX1NOTVBBTElBU0RPTUFJTl9ICisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCisvKgorICogU2ltcGxlIGFsaWFzZXMgZm9yIGNvbXBsZXggdHJhbnNwb3J0IHN0cmluZ3MgdGhhdCBjYW4gYmUgc3BlY2lmaWVkCisgKiB2aWEgdGhlIHNubXAuY29uZiBmaWxlIGFuZCB0aGUgJ2FsaWFzJyB0b2tlbi4KKyAqLworCisjZGVmaW5lIFRSQU5TUE9SVF9ET01BSU5fQUxJQVNfSVAJCTEsMyw2LDEsMiwxLDEwMCwxLDUKK05FVFNOTVBfSU1QT1JUIG9pZCBuZXRzbm1wX3NubXBBTElBU0RvbWFpbltdOworCisvKgorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF9hbGlhc19jdG9yKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKk5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTiAqLworCisjZW5kaWYvKl9TTk1QQUxJQVNET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKaW5kZXggNGE0ZTFhOC4uZTFiZTcwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOCiAKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9jYWxsYmFja19wYXNzX3MgewpAQCAtMzgsNiArMzksNyBAQAogaW50ICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfY2hlY2tfcGFja2V0KHVfY2hhciAqIHBrdCwgc2l6ZV90IGxlbik7CiBuZXRzbm1wX3BkdSAgICAqbmV0c25tcF9jYWxsYmFja19jcmVhdGVfcGR1KG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSwgc2l6ZV90IG9sZW5ndGgpOworTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfc2Vzc2lvbiAqbmV0c25tcF9jYWxsYmFja19vcGVuKGludCBhdHRhY2hfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyZXR1cm5fZnVuYykgKGludCBvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uCkBAIC01NSw2ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICAgbmV0c25tcF9jbGVhcl9jYWxsYmFja19saXN0KHZvaWQpOwogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTM1ZGEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfU05NUERUTFNVRFBET01BSU5fSAorI2RlZmluZSBfU05NUERUTFNVRFBET01BSU5fSAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworY29uZmlnX3JlcXVpcmUoVURQKQorY29uZmlnX3JlcXVpcmUoVExTQmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgVFJBTlNQT1JUX0RPTUFJTl9EVExTX1VEUF9JUAkxLDMsNiwxLDYsMSw5CitORVRTTk1QX0lNUE9SVCBvaWQgbmV0c25tcERUTFNVRFBEb21haW5bN107CitORVRTTk1QX0lNUE9SVCBzaXplX3QgbmV0c25tcERUTFNVRFBEb21haW5fbGVuOworCituZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF9kdGxzdWRwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYWwpOworCisKKy8qCisgKiBSZWdpc3RlciBhbnkgY29uZmlndXJhdGlvbiB0b2tlbnMgc3BlY2lmaWMgdG8gdGhlIGFnZW50LiAgCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfZHRsc3VkcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpOworCisvKgorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF9kdGxzdWRwX2N0b3Iodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYvKl9TTk1QRFRMU1VEUERPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCmluZGV4IDMwNGIzNjAuLjExYzJiZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaApAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgPG5ldGlweC9pcHguaD4KICNlbmRpZgogCisjaWZuZGVmIGxpbnV4CisgICAgY29uZmlnX2Vycm9yKElQWCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIC1MaW51eCBvbmx5LSk7CisjZW5kaWYKIAogbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfaXB4X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICphZGRyLCBpbnQgbG9jYWwpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MWRjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaApAQCAtMCwwICsxLDM3IEBACisvKiBJUFY0IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgU05NUElQVjRCQVNFX0gKKyNkZWZpbmUgU05NUElQVjRCQVNFX0gKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworCisgICAgY2hhciAqbmV0c25tcF9pcHY0X2ZtdGFkZHIoY29uc3QgY2hhciAqcHJlZml4LCBuZXRzbm1wX3RyYW5zcG9ydCAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKworLyoKKyAqIENvbnZlcnQgYSAidHJhZGl0aW9uYWwiIHBlZXJuYW1lIGludG8gYSBzb2NrYWRkcl9pbiBzdHJ1Y3R1cmUgd2hpY2ggaXMKKyAqIHdyaXR0ZW4gdG8gKmFkZHJfICBSZXR1cm5zIDEgaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwsIG9yIDAgaWYgaXQKKyAqIGZhaWxlZAorICovCisKKyAgICBpbnQgbmV0c25tcF9zb2NrYWRkcl9pbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGNvbnN0IGNoYXIgKnBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCk7CisgICAgaW50IG5ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgY29uc3QgY2hhciAqaW5wZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIFNOTVBJUFY0QkFTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YzhmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaApAQCAtMCwwICsxLDM0IEBACisvKiBJUFY2IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgU05NUElQVjZCQVNFX0gKKyNkZWZpbmUgU05NUElQVjZCQVNFX0gKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjaGFyICpuZXRzbm1wX2lwdjZfZm10YWRkcihjb25zdCBjaGFyICpwcmVmaXgsIG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50IG5ldHNubXBfc29ja2FkZHJfaW42XzIoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKKyAgICBpbnQgbmV0c25tcF9zb2NrYWRkcl9pbjYoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBTTk1QSVBWNkJBU0VfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQ0NGU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9TTk1QU1NIRE9NQUlOX0gKKyNkZWZpbmUgX1NOTVBTU0hET01BSU5fSAorCitjb25maWdfcmVxdWlyZShJUHY0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBUaGUgU05NUCBvdmVyIFNTSCBvdmVyIElQdjQgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CisgKiB0cmFuc3BvcnREb21haW5Tc2hJcHY0IGFzIGRlZmluZWQgaW4gUkZDIDM0MTkuCisgKi8KKworI2RlZmluZSBUUkFOU1BPUlRfRE9NQUlOX1NTSF9JUAkJMSwzLDYsMSwyLDEsMTAwLDEsMTAwCitORVRTTk1QX0lNUE9SVCBjb25zdCBvaWQgbmV0c25tcF9zbm1wU1NIRG9tYWluW107CitlbnVtIHsgbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbiA9IDkgfTsKKworbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfc3NoX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCk7CisKKy8qCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4KKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF9zc2hfY3Rvcih2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOICovCisKKyNlbmRpZi8qX1NOTVBTU0hET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaAppbmRleCA3N2JlMjJiLi4zZTlhNTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgKQEAgLTMsMTMgKzMsMTIgQEAKIAogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgotCiAvKgogICogVGhlIFNOTVAgb3ZlciBTVEQgb3ZlciBJUHY0IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQogICogdHJhbnNwb3J0RG9tYWluU3RkSXB2NCBhcyBkZWZpbmVkIGluIFJGQyAzNDE5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ4NmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBTTk1QU09DS0VUQkFTRURPTUFJTl9ICisjZGVmaW5lIFNOTVBTT0NLRVRCQVNFRE9NQUlOX0gKKworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworICAgIGludCBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpOworICAgIGludCBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChpbnQgcywgaW50IG9wdG5hbWUsIGludCBsb2NhbCwgaW50IHNpemUpOworICAgIGludCBuZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZShpbnQgc29jaywgaW50IG5vbl9ibG9ja2luZ19tb2RlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNOTVBTT0NLRVRCQVNFRE9NQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4MWE5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgU05NUFRDUEJBU0VET01BSU5fSAorI2RlZmluZSBTTk1QVENQQkFTRURPTUFJTl9ICisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworICAgIGludCBuZXRzbm1wX3RjcGJhc2VfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKyAgICBpbnQgbmV0c25tcF90Y3BiYXNlX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisgICAgICAgIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNOTVBUQ1BCQVNFRE9NQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCmluZGV4IGY0NjViNzkuLmM0NTg1NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaApAQCAtMSwyMiArMSwyMiBAQAogI2lmbmRlZiBfU05NUFRDUERPTUFJTl9ICiAjZGVmaW5lIF9TTk1QVENQRE9NQUlOX0gKIAorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKK2NvbmZpZ19yZXF1aXJlKElQdjRCYXNlKQorY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFRDUEJhc2UpCisKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+Ci0KLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KIC8qCiAgKiBUaGUgU05NUCBvdmVyIFRDUCBvdmVyIElQdjQgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CiAgKiB0cmFuc3BvcnREb21haW5UY3BJcHY0IGFzIGRlZmluZWQgaW4gUkZDIDM0MTkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCmluZGV4IGI5ZGU5ZWIuLjNiY2EyMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCkBAIC0xLDEzICsxLDIwIEBACiAjaWZuZGVmIF9TTk1QVENQSVBWNkRPTUFJTl9ICiAjZGVmaW5lIF9TTk1QVENQSVBWNkRPTUFJTl9ICiAKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCitjb25maWdfcmVxdWlyZShJUHY2QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCitjb25maWdfcmVxdWlyZShUQ1BCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgotCiAvKgogICogVGhlIFNOTVAgb3ZlciBUQ1Agb3ZlciBJUHY2IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQogICogdHJhbnNwb3J0RG9tYWluVGNwSXB2NCBhcyBkZWZpbmVkIGluIFJGQyAzNDE5LgpAQCAtMjMsNyArMzAsNyBAQAogICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKICAqLwogCi12b2lkICAgICAgICAgICAgbmV0c25tcF90Y3A2X2N0b3Iodm9pZCk7CitORVRTTk1QX0lNUE9SVCB2b2lkICAgICBuZXRzbm1wX3RjcGlwdjZfY3Rvcih2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjFjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaApAQCAtMCwwICsxLDgzIEBACisjaWZuZGVmIF9TTk1QVExTQkFTRURPTUFJTl9ICisjZGVmaW5lIF9TTk1QVExTQkFTRURPTUFJTl9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisvKiBPcGVuU1NMIEluY2x1ZGVzICovCisjaW5jbHVkZSAib3BlbnNzbC9iaW8uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKworICAgIHZvaWQgbmV0c25tcF90bHNiYXNlX2N0b3Iodm9pZCk7CisgICAgdm9pZCBuZXRzbm1wX2luaXRfdGxzYmFzZSh2b2lkKTsKKyAgICBjb25zdCBjaGFyICogX3g1MDlfZ2V0X2Vycm9yKGludCB4NTA5ZmFpbHZhbHVlLCBjb25zdCBjaGFyICpsb2NhdGlvbik7CisgICAgdm9pZCBfb3BlbnNzbF9sb2dfZXJyb3IoaW50IHJjLCBTU0wgKmNvbiwgY29uc3QgY2hhciAqbG9jYXRpb24pOworCisgICAgLyogd2lsbCBsaWtlbHkgZ28gYXdheSAqLworICAgIFNTTF9DVFggKmdldF9jbGllbnRfY3R4KHZvaWQpOworICAgIFNTTF9DVFggKmdldF9zZXJ2ZXJfY3R4KHZvaWQpOworCisjZGVmaW5lIE5FVFNOTVBfVExTQkFTRV9JU19DTElFTlQgICAgIDB4MDEKKyNkZWZpbmUgTkVUU05NUF9UTFNCQVNFX0NFUlRfRlBfVkVSSUZJRUQgMHgwMgorCisgICAgLyoKKyAgICAgKiBfSW50ZXJuYWxfIHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBfbmV0c25tcFRMU0Jhc2VEYXRhX3MgeworICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgIFNTTF9DVFggICAgICAgICAgICAgICAgICAgKnNzbF9jb250ZXh0OworICAgICAgIFNTTCAgICAgICAgICAgICAgICAgICAgICAgKnNzbDsKKyAgICAgICBCSU8gICAgICAgICAgICAgICAgICAgICAgICpzc2xiaW87CisgICAgICAgQklPICAgICAgICAgICAgICAgICAgICAgICAqYWNjZXB0X2JpbzsKKyAgICAgICBCSU8gICAgICAgICAgICAgICAgICAgICAgICphY2NlcHRlZF9iaW87CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqc2VjdXJpdHlOYW1lOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKmFkZHJfc3RyaW5nOworICAgICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHI7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqb3VyX2lkZW50aXR5OworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnRoZWlyX2lkZW50aXR5OworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnRoZWlyX2ZpbmdlcnByaW50OworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnRoZWlyX2hvc3RuYW1lOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnRydXN0X2NlcnQ7CisgICAgfSBfbmV0c25tcFRMU0Jhc2VEYXRhOworCisjZGVmaW5lIFZSRllfUEFSRU5UX1dBU19PSyAxCisgICAgdHlwZWRlZiBzdHJ1Y3QgX25ldHNubXBfdmVyaWZ5X2luZm9fcyB7CisgICAgICAgaW50IGZsYWdzOworICAgIH0gX25ldHNubXBfdmVyaWZ5X2luZm87CisKKyAgICBTU0xfQ1RYICpzc2xjdHhfY2xpZW50X3NldHVwKGNvbnN0IFNTTF9NRVRIT0QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2Jhc2UpOworICAgIFNTTF9DVFggKnNzbGN0eF9zZXJ2ZXJfc2V0dXAoY29uc3QgU1NMX01FVEhPRCAqKTsKKworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X3NlcnZlcl9jZXJ0KFNTTCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEpOworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X2NsaWVudF9jZXJ0KFNTTCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEpOworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2VfZXh0cmFjdF9zZWN1cml0eV9uYW1lKFNTTCAqc3NsLCBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhKTsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICpuZXRzbm1wX3Rsc2Jhc2VfYWxsb2NhdGVfdGxzZGF0YShuZXRzbm1wX3RyYW5zcG9ydCAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNzZXJ2ZXIpOworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisgICAgaW50IG5ldHNubXBfdGxzYmFzZV9jb25maWcoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2Vfc2Vzc2lvbl9pbml0KHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzcyk7CisgICAgaW50IHRsc19nZXRfdmVyaWZ5X2luZm9faW5kZXgodm9pZCk7CisKKyAgICB2b2lkIG5ldHNubXBfdGxzYmFzZV9mcmVlX3Rsc2RhdGEoX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzYmFzZSk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmLypfU05NUFRMU0JBU0VET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI3NjYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIF9TTk1QVExTVENQRE9NQUlOX0gKKyNkZWZpbmUgX1NOTVBUTFNUQ1BET01BSU5fSAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworY29uZmlnX3JlcXVpcmUoSVB2NEJhc2UpCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorY29uZmlnX3JlcXVpcmUoVExTQmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBUUkFOU1BPUlRfRE9NQUlOX1RMU19UQ1BfSVAJMSwzLDYsMSw2LDEsOAorTkVUU05NUF9JTVBPUlQgb2lkIG5ldHNubXBUTFNUQ1BEb21haW5bN107CitORVRTTk1QX0lNUE9SVCBzaXplX3QgbmV0c25tcFRMU1RDUERvbWFpbl9sZW47CisKK25ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3Rsc3RjcF90cmFuc3BvcnQoY29uc3QgY2hhciAqYWRkcl9zdHJpbmcsIGludCBsb2NhbCk7CisKKy8qCisgKiBSZWdpc3RlciBhbnkgY29uZmlndXJhdGlvbiB0b2tlbnMgc3BlY2lmaWMgdG8gdGhlIGFnZW50LiAgCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfdGxzdGNwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCk7CisKKy8qCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX3Rsc3RjcF9jdG9yKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmLypfU05NUFRMU1RDUERPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkMmMzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgU05NUFVEUEJBU0VET01BSU5fSAorI2RlZmluZSBTTk1QVURQQkFTRURPTUFJTl9ICisKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCisgKi8KKworICAgIHZvaWQgbmV0c25tcF91ZHBfYmFzZV9jdG9yKHZvaWQpOworCisvKgorICogUHJvdG90eXBlcworICovCisgICAgdm9pZCBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgbG9jYWwpOworICAgIGludCBuZXRzbm1wX3VkcGJhc2VfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKyAgICBpbnQgbmV0c25tcF91ZHBiYXNlX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykgfHwgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorICAgIGludCBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwgc29ja2xlbl90ICpmcm9tbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpkc3RpcCwgc29ja2xlbl90ICpkc3RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmlmX2luZGV4KTsKKyAgICBpbnQgbmV0c25tcF91ZHBiYXNlX3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgaW50IGlmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU05NUFVEUEJBU0VET01BSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKaW5kZXggNTQwYWRmNS4uM2EwOWRmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCkBAIC0xNSwzNiArMTUsMjggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKIAorY29uZmlnX3JlcXVpcmUoVURQSVB2NEJhc2UpCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaD4KKwogbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdWRwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCk7CiAKIAogLyoKLSAqIENvbnZlcnQgYSAidHJhZGl0aW9uYWwiIHBlZXJuYW1lIGludG8gYSBzb2NrYWRkcl9pbiBzdHJ1Y3R1cmUgd2hpY2ggaXMKLSAqIHdyaXR0ZW4gdG8gKmFkZHIuICBSZXR1cm5zIDEgaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwsIG9yIDAgaWYgaXQKLSAqIGZhaWxlZC4gIAotICovCi0KLWludCAgICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlZXJuYW1lLCBpbnQgcmVtb3RlX3BvcnQpOwotCi0KLS8qCiAgKiBSZWdpc3RlciBhbnkgY29uZmlndXJhdGlvbiB0b2tlbnMgc3BlY2lmaWMgdG8gdGhlIGFnZW50LiAgCiAgKi8KIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpOwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSk7CiAKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgbmV0c25tcF91ZHBfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqc2VjbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjb250ZXh0TmFtZSk7Ci0KLWludCAgICAgICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChpbnQgcywgaW50IG9wdG5hbWUsIGludCBsb2NhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipzZWNuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmNvbnRleHROYW1lKTsKIAogLyoKICAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCkBAIC01Miw2ICs0NCwxOCBAQAogCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91ZHBfY3Rvcih2b2lkKTsKIAorLyoKKyAqIHByb3RlY3RlZC1pc2ggZnVuY3Rpb25zIHVzZWQgYnkgb3RoZXIgY29yZS1jb2RlCisgKi8KK2NoYXIgKm5ldHNubXBfdWRwX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pOworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCitpbnQgbmV0c25tcF91ZHBfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqZnJvbWxlbiwgc3RydWN0IHNvY2thZGRyICpkc3RpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmRzdGxlbiwgaW50ICppZl9pbmRleCk7CitpbnQgbmV0c25tcF91ZHBfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBpbnQgaWZfaW5kZXgsCisJCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmN2YyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKQEAgLTAsMCArMSw0MyBAQAorLyogVURQSVBWNCBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisjaWZuZGVmIFNOTVBVRFBJUFY0QkFTRV9ICisjZGVmaW5lIFNOTVBVRFBJUFY0QkFTRV9ICisKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKK2NvbmZpZ19yZXF1aXJlKFVEUEJhc2UpCitjb25maWdfcmVxdWlyZShJUHY0QmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKworICAgIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3VkcGlwdjRiYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2NhbCk7CisKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykgfHwgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorICAgIGludCBuZXRzbm1wX3VkcGlwdjRfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwgc29ja2xlbl90ICpmcm9tbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpkc3RpcCwgc29ja2xlbl90ICpkc3RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmlmX2luZGV4KTsKKyAgICBpbnQgbmV0c25tcF91ZHBpcHY0X3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgaW50IGlmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogU05NUFVEUElQVjRCQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKaW5kZXggYzRlYTQ2NC4uODNlYmEyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKQEAgLTEsMTIgKzEsMTggQEAKICNpZm5kZWYgX1NOTVBVRFBJUFY2RE9NQUlOX0gKICNkZWZpbmUgX1NOTVBVRFBJUFY2RE9NQUlOX0gKIAorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKworY29uZmlnX3JlcXVpcmUoSVB2NkJhc2UpCitjb25maWdfcmVxdWlyZShVRFBCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaD4KIAogLyoKICAqIFRoZSBTTk1QIG92ZXIgVURQIG92ZXIgSVB2NiB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKQEAgLTE2LDM0ICsyMiwzOCBAQAogI2RlZmluZSBUUkFOU1BPUlRfRE9NQUlOX1VEUF9JUFY2CTEsMyw2LDEsMiwxLDEwMCwxLDIKIE5FVFNOTVBfSU1QT1JUIG9pZCAgICAgIG5ldHNubXBfVURQSVB2NkRvbWFpbltdOwogCi1uZXRzbm1wX3RyYW5zcG9ydCAqc25tcF91ZHA2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvY2FsKTsKK25ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3VkcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYWwpOwogCiAKIC8qCiAgKiBDb252ZXJ0IGEgInRyYWRpdGlvbmFsIiBwZWVybmFtZSBpbnRvIGEgc29ja2FkZHJfaW42IHN0cnVjdHVyZSB3aGljaCBpcwogICogd3JpdHRlbiB0byAqYWRkci4gIFJldHVybnMgMSBpZiB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgb3IgMCBpZiBpdAotICogZmFpbGVkLiAgCisgKiBmYWlsZWQuCiAgKi8KIAogaW50ICAgICAgICAgICAgIG5ldHNubXBfc29ja2FkZHJfaW42KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbW90ZV9wb3J0KTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcDZfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwYXJhbSk7CiAKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgbmV0c25tcF91ZHA2X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW11bml0eV9sZW4sIGNoYXIgKipzZWNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjb250ZXh0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW11bml0eV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnNlY25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmNvbnRleHROYW1lKTsKIAogLyoKLSAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4KICAqLwogCi12b2lkICAgICAgICAgICAgbmV0c25tcF91ZHA2X2N0b3Iodm9pZCk7CitORVRTTk1QX0lNUE9SVCB2b2lkIG5ldHNubXBfdWRwaXB2Nl9jdG9yKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKaW5kZXggNTE5MDlmNy4uOTFlN2Y2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKQEAgLTMsOCArMyw4IEBACiAKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAgICAgICAgICAiQyIgeworI2lmIGRlZmluZWQoY3lnd2luKSB8fCBkZWZpbmVkKG1pbmd3MzIpIHx8IGRlZmluZWQobWluZ3czMm1zdmMpCisgICAgY29uZmlnX2Vycm9yKFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0pCiAjZW5kaWYKIAogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICkBAIC0xNSw3ICsxNSwxMiBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKIAogLyoKICAqIFRoZSBTTk1QIG92ZXIgbG9jYWwgc29ja2V0IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQpAQCAtMzEsOCArMzYsOCBAQAogdm9pZCBuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKTsKIGludCBuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwgY2hhciAqKnNlY05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmNvbnRleHROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwgY29uc3QgY2hhciAqKnNlY05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmNvbnRleHROYW1lKTsKIAogCiAvKgpAQCAtNDEsOSArNDYsMjAgQEAKIAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdW5peF9jdG9yKHZvaWQpOwogCisvKgorICogU3VwcG9ydCBmdW5jdGlvbnMKKyAqLwordm9pZCAgICAgICAgICAgIG5ldHNubXBfdW5peF9jcmVhdGVfcGF0aF93aXRoX21vZGUoaW50IG1vZGUpOwordm9pZCAgICAgICAgICAgIG5ldHNubXBfdW5peF9kb250X2NyZWF0ZV9wYXRoKHZvaWQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgorI2Vsc2UKKworI2RlZmluZSBuZXRzbm1wX3VuaXhfY3JlYXRlX3BhdGhfd2l0aF9tb2RlKHgpCisjZGVmaW5lIG5ldHNubXBfdW5peF9kb250X2NyZWF0ZV9wYXRoKCkKKwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKk5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOICovCiAKICNlbmRpZi8qX1NOTVBVTklYRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKaW5kZXggZjk3YTcxMi4uZDFiY2JmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCkBAIC0xMiwxMyArMTIsMTcgQEAKICAgICAgKiBhbGFybSBmbGFncyAKICAgICAgKi8KICNkZWZpbmUgU0FfUkVQRUFUIDB4MDEgICAgICAgICAgLyoga2VlcCByZXBlYXRpbmcgZXZlcnkgWCBzZWNvbmRzICovCisjZGVmaW5lIFNBX0ZJUkVEIDB4MTAgICAgICAgICAgLyogQmVpbmcgcHJvY2Vzc2VkIGluIHJ1bl9hbGFybXMgKi8KIAogICAgIHN0cnVjdCBzbm1wX2FsYXJtIHsKKyAgICAgICAgLyoqIEFsYXJtIGludGVydmFsLiBaZXJvIGlmIHNpbmdsZS1zaG90LiAqLwogICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdDsKICAgICAgICAgdW5zaWduZWQgaW50ICAgIGZsYWdzOwogICAgICAgICB1bnNpZ25lZCBpbnQgICAgY2xpZW50cmVnOwotICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9sYXN0OwotICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9uZXh0OworICAgICAgICAvKiogTGFzdCB0aW1lIHRoZSBhbGFybSBmaXJlZCBbbW9ub3RvbmljIGNsb2NrXS4gKi8KKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRfbGFzdE07CisgICAgICAgIC8qKiBOZXh0IHRpbWUgdGhlIGFsYXJtIHdpbGwgZmlyZSBbbW9ub3RvbmljIGNsb2NrXS4gKi8KKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRfbmV4dE07CiAgICAgICAgIHZvaWQgICAgICAgICAgICpjbGllbnRhcmc7CiAgICAgICAgIFNOTVBBbGFybUNhbGxiYWNrICp0aGVjYWxsYmFjazsKICAgICAgICAgc3RydWN0IHNubXBfYWxhcm0gKm5leHQ7CkBAIC0yNyw4ICszMSwxMCBAQAogICAgIC8qCiAgICAgICogdGhlIG9uZXMgeW91IHNob3VsZCBuZWVkIAogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfYWxhcm1fdW5yZWdpc3Rlcih1bnNpZ25lZCBpbnQgY2xpZW50cmVnKTsKICAgICB2b2lkCSAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXJfYWxsKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdW5zaWduZWQgaW50ICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIodW5zaWduZWQgaW50IHdoZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBBbGFybUNhbGxiYWNrICogdGhlY2FsbGJhY2ssCkBAIC00NSwxNyArNTEsMjAgQEAKICAgICAvKgogICAgICAqIHRoZSBvbmVzIHlvdSBzaG91bGRuJ3QgCiAgICAgICovCi0gICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcF9hbGFybSh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkIGluaXRfc25tcF9hbGFybSh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgaW5pdF9hbGFybV9wb3N0X2NvbmZpZyhpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CiAgICAgdm9pZCAgICAgICAgICAgIHNhX3VwZGF0ZV9lbnRyeShzdHJ1Y3Qgc25tcF9hbGFybSAqYWxybSk7CiAgICAgc3RydWN0IHNubXBfYWxhcm0gKnNhX2ZpbmRfbmV4dCh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgcnVuX2FsYXJtcyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkIHJ1bl9hbGFybXModm9pZCk7CiAgICAgUkVUU0lHVFlQRSAgICAgIGFsYXJtX2hhbmRsZXIoaW50IGEpOwogICAgIHZvaWQgICAgICAgICAgICBzZXRfYW5fYWxhcm0odm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZ2V0X25leHRfYWxhcm1fdGltZShzdHJ1Y3QgdGltZXZhbCAqYWxhcm1fdG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93KTsKICAgICBpbnQgICAgICAgICAgICAgZ2V0X25leHRfYWxhcm1fZGVsYXlfdGltZShzdHJ1Y3QgdGltZXZhbCAqZGVsdGEpOwogCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCmluZGV4IDJjYWQ5MmUuLjZmNjU4ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCkBAIC0yNCw2ICsyNCwxNCBAQAogICogQHsKICAqLwogCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC92YXJiaW5kX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKICNpZm5kZWYgRE9OVF9TSEFSRV9FUlJPUl9XSVRIX09USEVSX1RIUkVBRFMKICNkZWZpbmUgU0VUX1NOTVBfRVJST1IoeCkgc25tcF9lcnJubz0oeCkKICNlbHNlCkBAIC01NywyNTcgKzY1LDcgQEAKIFNPRlRXQVJFLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiogQHR5cGVkZWYgc3RydWN0IHZhcmlhYmxlX2xpc3QgbmV0c25tcF92YXJpYWJsZV9saXN0Ci0gICAgKiBUeXBlZGVmcyB0aGUgdmFyaWFibGVfbGlzdCBzdHJ1Y3QgaW50byBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKi8KLXN0cnVjdCB2YXJpYWJsZV9saXN0OwotdHlwZWRlZiBzdHJ1Y3QgdmFyaWFibGVfbGlzdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3Q7CiBzdHJ1Y3QgdGltZXZhbDsKLXN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zOwotCi0jZGVmaW5lIFVTTV9BVVRIX0tVX0xFTiAgICAgMzIKLSNkZWZpbmUgVVNNX1BSSVZfS1VfTEVOICAgICAzMgotCi0vKiogQHR5cGVkZWYgc3RydWN0IHNubXBfcGR1IHRvIG5ldHNubXBfcGR1Ci0gICAgKiBUeXBlZGVmcyB0aGUgc25tcF9wZHUgc3RydWN0IGludG8gbmV0c25tcF9wZHUgKi8KLS8qKiBAc3RydWN0IHNubXBfcGR1Ci0gKiBUaGUgc25tcCBwcm90b2NvbCBkYXRhIHVuaXQuCi0gKi8JCi10eXBlZGVmIHN0cnVjdCBzbm1wX3BkdSB7Ci0KLSAgICAvKgotICAgICAqIFByb3RvY29sLXZlcnNpb24gaW5kZXBlbmRlbnQgZmllbGRzCi0gICAgICovCi0gICAgLyoqIHNubXAgdmVyc2lvbiAqLwotICAgIGxvbmcgICAgICAgICAgICB2ZXJzaW9uOwotICAgIC8qKiBUeXBlIG9mIHRoaXMgUERVICovCQotICAgIGludCAgICAgICAgICAgICBjb21tYW5kOwotICAgIC8qKiBSZXF1ZXN0IGlkIC0gbm90ZTogbm90IGluY3JlbWVudGVkIG9uIHJldHJpZXMgKi8KLSAgICBsb25nICAgICAgICAgICAgcmVxaWQ7ICAKLSAgICAvKiogTWVzc2FnZSBpZCBmb3IgVjMgbWVzc2FnZXMgbm90ZTogaW5jcmVtZW50ZWQgZm9yIGVhY2ggcmV0cnkgKi8KLSAgICBsb25nICAgICAgICAgICAgbXNnaWQ7Ci0gICAgLyoqIFVuaXF1ZSBJRCBmb3IgaW5jb21pbmcgdHJhbnNhY3Rpb25zICovCi0gICAgbG9uZyAgICAgICAgICAgIHRyYW5zaWQ7Ci0gICAgLyoqIFNlc3Npb24gaWQgZm9yIEFnZW50WCBtZXNzYWdlcyAqLwotICAgIGxvbmcgICAgICAgICAgICBzZXNzaWQ7Ci0gICAgLyoqIEVycm9yIHN0YXR1cyAobm9uX3JlcGVhdGVycyBpbiBHZXRCdWxrKSAqLwotICAgIGxvbmcgICAgICAgICAgICBlcnJzdGF0OwotICAgIC8qKiBFcnJvciBpbmRleCAobWF4X3JlcGV0aXRpb25zIGluIEdldEJ1bGspICovCi0gICAgbG9uZyAgICAgICAgICAgIGVycmluZGV4OyAgICAgICAKLSAgICAvKiogVXB0aW1lICovCi0gICAgdV9sb25nICAgICAgICAgIHRpbWU7ICAgCi0gICAgdV9sb25nICAgICAgICAgIGZsYWdzOwotCi0gICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TW9kZWw7Ci0gICAgLyoqIG5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgKi8KLSAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlMZXZlbDsgIAotICAgIGludCAgICAgICAgICAgICBtc2dQYXJzZU1vZGVsOwotCi0gICAgLyoqCi0gICAgICogVHJhbnNwb3J0LXNwZWNpZmljIG9wYXF1ZSBkYXRhLiAgVGhpcyByZXBsYWNlcyB0aGUgSVAtY2VudHJpYyBhZGRyZXNzCi0gICAgICogZmllbGQuICAKLSAgICAgKi8KLSAgICAKLSAgICB2b2lkICAgICAgICAgICAqdHJhbnNwb3J0X2RhdGE7Ci0gICAgaW50ICAgICAgICAgICAgIHRyYW5zcG9ydF9kYXRhX2xlbmd0aDsKLQotICAgIC8qKgotICAgICAqIFRoZSBhY3R1YWwgdHJhbnNwb3J0IGRvbWFpbi4gIFRoaXMgU0hPVUxEIE5PVCBCRSBGUkVFKClELiAgCi0gICAgICovCi0KLSAgICBjb25zdCBvaWQgICAgICAqdERvbWFpbjsKLSAgICBzaXplX3QgICAgICAgICAgdERvbWFpbkxlbjsKLQotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyaWFibGVzOwotCi0KLSAgICAvKgotICAgICAqIFNOTVB2MSAmIFNOTVB2MmMgZmllbGRzCi0gICAgICovCi0gICAgLyoqIGNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuICovCi0gICAgdV9jaGFyICAgICAgICAgKmNvbW11bml0eTsKLSAgICAvKiogbGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAqLwotICAgIHNpemVfdCAgICAgICAgICBjb21tdW5pdHlfbGVuOyAgCi0KLSAgICAvKgotICAgICAqIFRyYXAgaW5mb3JtYXRpb24KLSAgICAgKi8KLSAgICAvKiogU3lzdGVtIE9JRCAqLwotICAgIG9pZCAgICAgICAgICAgICplbnRlcnByaXNlOyAgICAgCi0gICAgc2l6ZV90ICAgICAgICAgIGVudGVycHJpc2VfbGVuZ3RoOwotICAgIC8qKiB0cmFwIHR5cGUgKi8KLSAgICBsb25nICAgICAgICAgICAgdHJhcF90eXBlOwotICAgIC8qKiBzcGVjaWZpYyB0eXBlICovCi0gICAgbG9uZyAgICAgICAgICAgIHNwZWNpZmljX3R5cGU7Ci0gICAgLyoqIFRoaXMgaXMgT05MWSB1c2VkIGZvciB2MSBUUkFQcyAgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgYWdlbnRfYWRkcls0XTsgIAotCi0gICAgLyoKLSAgICAgKiAgU05NUHYzIGZpZWxkcwotICAgICAqLwotICAgIC8qKiBjb250ZXh0IHNubXBFbmdpbmVJRCAqLwotICAgIHVfY2hhciAgICAgICAgICpjb250ZXh0RW5naW5lSUQ7Ci0gICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KLSAgICBzaXplX3QgICAgICAgICAgY29udGV4dEVuZ2luZUlETGVuOyAgICAgCi0gICAgLyoqIGF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgKi8KLSAgICBjaGFyICAgICAgICAgICAqY29udGV4dE5hbWU7Ci0gICAgLyoqIExlbmd0aCBvZiBjb250ZXh0TmFtZSAqLwotICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0TmFtZUxlbjsKLSAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgZm9yIHNlY3VyaXR5ICovCi0gICAgdV9jaGFyICAgICAgICAgKnNlY3VyaXR5RW5naW5lSUQ7Ci0gICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eUVuZ2luZUlEICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5RW5naW5lSURMZW47ICAgIAotICAgIC8qKiBvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgKi8KLSAgICBjaGFyICAgICAgICAgICAqc2VjdXJpdHlOYW1lOwotICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eU5hbWVMZW47ICAgICAgICAKLSAgICAKLSAgICAvKgotICAgICAqIEFnZW50WCBmaWVsZHMKLSAgICAgKiAgICAgIChhbHNvIHVzZXMgU05NUHYxIGNvbW11bml0eSBmaWVsZCkKLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7Ci0gICAgaW50ICAgICAgICAgICAgIHJhbmdlX3N1YmlkOwotICAgIAotICAgIHZvaWQgICAgICAgICAgICpzZWN1cml0eVN0YXRlUmVmOwotfSBuZXRzbm1wX3BkdTsKLQotc3RydWN0IHNubXBfc2Vzc2lvbjsKLQotLyoqIEB0eXBlZGVmIHN0cnVjdCBzbm1wX3Nlc3Npb24gbmV0c25tcF9zZXNzaW9uCi0gKiBUeXBlZGVmcyB0aGUgc25tcF9zZXNzaW9uIHN0cnVjdCBpbnRvbmV0c25tcF9zZXNzaW9uICovCi10eXBlZGVmIHN0cnVjdCBzbm1wX3Nlc3Npb24gbmV0c25tcF9zZXNzaW9uOwotCi10eXBlZGVmIGludCAgICAgKCpzbm1wX2NhbGxiYWNrKSAoaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB2b2lkICopOwotdHlwZWRlZiBpbnQgICAgICgqbmV0c25tcF9jYWxsYmFjaykgKGludCwgbmV0c25tcF9zZXNzaW9uICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdm9pZCAqKTsKLS8qKiBAc3RydWN0IHNubXBfc2Vzc2lvbgotICogVGhlIHNubXAgc2Vzc2lvbiBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBzbm1wX3Nlc3Npb24gewotICAgIC8qCi0gICAgICogUHJvdG9jb2wtdmVyc2lvbiBpbmRlcGVuZGVudCBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogc25tcCB2ZXJzaW9uICovCi0gICAgbG9uZyAgICAgICAgICAgIHZlcnNpb247Ci0gICAgLyoqIE51bWJlciBvZiByZXRyaWVzIGJlZm9yZSB0aW1lb3V0LiAqLwotICAgIGludCAgICAgICAgICAgICByZXRyaWVzOwotICAgIC8qKiBOdW1iZXIgb2YgdVMgdW50aWwgZmlyc3QgdGltZW91dCwgdGhlbiBleHBvbmVudGlhbCBiYWNrb2ZmICovCi0gICAgbG9uZyAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAKLSAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7Ci0gICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc3Vic2Vzc2lvbjsKLSAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpuZXh0OwotCi0gICAgLyoqIG5hbWUgb3IgYWRkcmVzcyBvZiBkZWZhdWx0IHBlZXIgKG1heSBpbmNsdWRlIHRyYW5zcG9ydCBzcGVjaWZpZXIgYW5kL29yIHBvcnQgbnVtYmVyKSAqLwotICAgIGNoYXIgICAgICAgICAgICpwZWVybmFtZTsKLSAgICAvKiogVURQIHBvcnQgbnVtYmVyIG9mIHBlZXIuIChOTyBMT05HRVIgVVNFRCAtIFVTRSBwZWVybmFtZSBJTlNURUFEKSAqLwotICAgIHVfc2hvcnQgICAgICAgICByZW1vdGVfcG9ydDsKLSAgICAvKiogTXkgRG9tYWluIG5hbWUgb3IgZG90dGVkIElQIGFkZHJlc3MsIDAgZm9yIGRlZmF1bHQgKi8KLSAgICBjaGFyICAgICAgICAgICAqbG9jYWxuYW1lOwotICAgIC8qKiBNeSBVRFAgcG9ydCBudW1iZXIsIDAgZm9yIGRlZmF1bHQsIHBpY2tlZCByYW5kb21seSAqLwotICAgIHVfc2hvcnQgICAgICAgICBsb2NhbF9wb3J0OyAgICAgCi0gICAgLyoqCi0gICAgICogQXV0aGVudGljYXRpb24gZnVuY3Rpb24gb3IgTlVMTCBpZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQgCi0gICAgICovCi0gICAgdV9jaGFyICAgICAgICAgKigqYXV0aGVudGljYXRvcikgKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIHNpemVfdCk7Ci0gICAgLyoqIEZ1bmN0aW9uIHRvIGludGVycHJldCBpbmNvbWluZyBkYXRhICovCi0gICAgbmV0c25tcF9jYWxsYmFjayBjYWxsYmFjazsgICAgICAKLSAgICAvKioKLSAgICAgKiBQb2ludGVyIHRvIGRhdGEgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IGNvbnNpZGVyIGltcG9ydGFudCAKLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAqY2FsbGJhY2tfbWFnaWM7Ci0gICAgLyoqIGNvcHkgb2Ygc3lzdGVtIGVycm5vICovCi0gICAgaW50ICAgICAgICAgICAgIHNfZXJybm87Ci0gICAgLyoqIGNvcHkgb2YgbGlicmFyeSBlcnJubyAqLwotICAgIGludCAgICAgICAgICAgICBzX3NubXBfZXJybm87ICAgCi0gICAgLyoqIFNlc3Npb24gaWQgLSBBZ2VudFggb25seSAqLwotICAgIGxvbmcgICAgICAgICAgICBzZXNzaWQ7IAotCi0gICAgLyoKLSAgICAgKiBTTk1QdjEgJiBTTk1QdjJjIGZpZWxkcwotICAgICAqLwotICAgIC8qKiBjb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAqLwotICAgIHVfY2hhciAgICAgICAgICpjb21tdW5pdHk7Ci0gICAgLyoqIExlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gKi8KLSAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5X2xlbjsgIAotICAgIC8qKiAgTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byByZWNlaXZlLiAgKi8KLSAgICBzaXplX3QgICAgICAgICAgcmN2TXNnTWF4U2l6ZTsKLSAgICAvKiogIExhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gc2VuZC4gICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNuZE1zZ01heFNpemU7ICAKLQotICAgIC8qCi0gICAgICogU05NUHYzIGZpZWxkcwotICAgICAqLwotICAgIC8qKiBhcmUgd2UgdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lPyAqLwotICAgIHVfY2hhciAgICAgICAgICBpc0F1dGhvcml0YXRpdmU7Ci0gICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEICovCi0gICAgdV9jaGFyICAgICAgICAgKmNvbnRleHRFbmdpbmVJRDsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLwotICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0RW5naW5lSURMZW47ICAgICAKLSAgICAvKiogaW5pdGlhbCBlbmdpbmVCb290cyBmb3IgcmVtb3RlIGVuZ2luZSAqLwotICAgIHVfaW50ICAgICAgICAgICBlbmdpbmVCb290czsKLSAgICAvKiogaW5pdGlhbCBlbmdpbmVUaW1lIGZvciByZW1vdGUgZW5naW5lICovCi0gICAgdV9pbnQgICAgICAgICAgIGVuZ2luZVRpbWU7Ci0gICAgLyoqIGF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgKi8KLSAgICBjaGFyICAgICAgICAgICAqY29udGV4dE5hbWU7Ci0gICAgLyoqIExlbmd0aCBvZiBjb250ZXh0TmFtZSAqLwotICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0TmFtZUxlbjsKLSAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgKi8KLSAgICB1X2NoYXIgICAgICAgICAqc2VjdXJpdHlFbmdpbmVJRDsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUVuZ2luZUlETGVuOyAgICAKLSAgICAvKiogb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsICovCi0gICAgY2hhciAgICAgICAgICAgKnNlY3VyaXR5TmFtZTsKLSAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlOYW1lTGVuOwotCi0gICAgLyoqIGF1dGggcHJvdG9jb2wgb2lkICovCi0gICAgb2lkICAgICAgICAgICAgKnNlY3VyaXR5QXV0aFByb3RvOwotICAgIC8qKiBMZW5ndGggb2YgYXV0aCBwcm90b2NvbCBvaWQgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoUHJvdG9MZW47Ci0gICAgLyoqIEt1IGZvciBhdXRoIHByb3RvY29sIFhYWCAqLwotICAgIHVfY2hhciAgICAgICAgICBzZWN1cml0eUF1dGhLZXlbVVNNX0FVVEhfS1VfTEVOXTsgICAgICAgCi0gICAgLyoqIExlbmd0aCBvZiBLdSBmb3IgYXV0aCBwcm90b2NvbCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhLZXlMZW47Ci0gICAgLyoqIEt1bCBmb3IgYXV0aCBwcm90b2NvbCAqLwotICAgIHVfY2hhciAgICAgICAgICAqc2VjdXJpdHlBdXRoTG9jYWxLZXk7ICAgICAgIAotICAgIC8qKiBMZW5ndGggb2YgS3VsIGZvciBhdXRoIHByb3RvY29sIFhYWCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhMb2NhbEtleUxlbjsgICAgICAgCi0KLSAgICAvKiogcHJpdiBwcm90b2NvbCBvaWQgKi8KLSAgICBvaWQgICAgICAgICAgICAqc2VjdXJpdHlQcml2UHJvdG87Ci0gICAgLyoqIExlbmd0aCBvZiBwcml2IHByb3RvY29sIG9pZCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZQcm90b0xlbjsKLSAgICAvKiogS3UgZm9yIHByaXZhY3kgcHJvdG9jb2wgWFhYICovCi0gICAgdV9jaGFyICAgICAgICAgIHNlY3VyaXR5UHJpdktleVtVU01fUFJJVl9LVV9MRU5dOyAgICAgICAKLSAgICAvKiogTGVuZ3RoIG9mIEt1IGZvciBwcml2IHByb3RvY29sICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdktleUxlbjsKLSAgICAvKiogS3VsIGZvciBwcml2IHByb3RvY29sICovCi0gICAgdV9jaGFyICAgICAgICAgICpzZWN1cml0eVByaXZMb2NhbEtleTsgICAgICAgCi0gICAgLyoqIExlbmd0aCBvZiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgWFhYICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuOyAgICAgICAKLQotICAgIC8qKiBzbm1wIHNlY3VyaXR5IG1vZGVsLCB2MSwgdjJjLCB1c20gKi8KLSAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlNb2RlbDsKLSAgICAvKiogbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAqLwotICAgIGludCAgICAgICAgICAgICBzZWN1cml0eUxldmVsOyAgCi0gICAgLyoqIHRhcmdldCBwYXJhbSBuYW1lICovCi0gICAgY2hhciAgICAgICAgICAgKnBhcmFtTmFtZTsKLQotICAgIC8qKgotICAgICAqIHNlY3VyaXR5IG1vZHVsZSBzcGVjaWZpYyAKLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAqc2VjdXJpdHlJbmZvOwotCi0gICAgLyoqCi0gICAgICogdXNlIGFzIHlvdSB3YW50IGRhdGEgCi0gICAgICoKLSAgICAgKiAgICAgdXNlZCBieSAnU05NUF9GTEFHU19SRVNQX0NBTExCQUNLJyBoYW5kbGluZyBpbiB0aGUgYWdlbnQKLSAgICAgKiBYWFg6IG9yIHNob3VsZCB3ZSBhZGQgYSBuZXcgZmllbGQgaW50byB0aGlzIHN0cnVjdHVyZT8KLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAqbXl2b2lkOwotfTsKLQogLyoKICAqIEEgbGlzdCBvZiBhbGwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZvciBhIHBhcnRpY3VsYXIgc2Vzc2lvbi4KICAqLwpAQCAtMzIwLDggKzc4LDggQEAKICAgICB2b2lkICAgICAgICAgICAqY2JfZGF0YTsgICAgICAgIC8qIHVzZXIgY2FsbGJhY2sgZGF0YSBwZXIgcmVxdWVzdCAoTlVMTCBpZiB1bnVzZWQpICovCiAgICAgaW50ICAgICAgICAgICAgIHJldHJpZXM7ICAgICAgICAvKiBOdW1iZXIgb2YgcmV0cmllcyAqLwogICAgIHVfbG9uZyAgICAgICAgICB0aW1lb3V0OyAgICAgICAgLyogbGVuZ3RoIHRvIHdhaXQgZm9yIHRpbWVvdXQgKi8KLSAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZTsgICAvKiBUaW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZSAqLwotICAgIHN0cnVjdCB0aW1ldmFsICBleHBpcmU7IC8qIHRpbWUgdGhpcyByZXF1ZXN0IGlzIGR1ZSB0byBleHBpcmUgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZU07ICAgLyogVGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUgW21vbm90b25pYyBjbG9ja10gKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCAgZXhwaXJlTTsgLyogVGltZSB0aGlzIHJlcXVlc3QgaXMgZHVlIHRvIGV4cGlyZSBbbW9ub3RvbmljIGNsb2NrXS4gKi8KICAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uOwogICAgIG5ldHNubXBfcGR1ICAgICpwZHU7ICAgIC8qIFRoZSBwZHUgZm9yIHRoaXMgcmVxdWVzdAogCQkJICAgICAqIChzYXZlZCBzbyBpdCBjYW4gYmUgcmV0cmFuc21pdHRlZCAqLwpAQCAtMzU5LDggKzExNyw2IEBACiAjZW5kaWYKICNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE9MRU4gIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STQogCi0gICAgTkVUU05NUF9JTVBPUlQgY29uc3QgY2hhciAqc25tcF9hcGlfZXJyc3RyaW5nKGludCk7Ci0gICAgTkVUU05NUF9JTVBPUlQgdm9pZCAgICAgc25tcF9wZXJyb3IoY29uc3QgY2hhciAqKTsKICAgICBORVRTTk1QX0lNUE9SVCB2b2lkICAgICBzbm1wX3NldF9kZXRhaWwoY29uc3QgY2hhciAqKTsKIAogI2RlZmluZSBTTk1QX01BWF9NU0dfU0laRSAgICAgICAgICAxNDcyIC8qIGV0aGVybmV0IE1UVSBtaW51cyBJUC9VRFAgaGVhZGVyICovCkBAIC00MDQsNiArMTYwLDcgQEAKIAogI2RlZmluZSBTTk1QX0RFVEFJTF9TSVpFICAgICAgICA1MTIKIAorI2RlZmluZSBTTk1QX0ZMQUdTX1VEUF9CUk9BRENBU1QgICAweDgwMAogI2RlZmluZSBTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0sgICAweDQwMCAgICAgIC8qIEFkZGl0aW9uYWwgY2FsbGJhY2sgb24gcmVzcG9uc2UgKi8KICNkZWZpbmUgU05NUF9GTEFHU19VU0VSX0NSRUFURUQgICAgMHgyMDAgICAgICAvKiBVU00gdXNlciBoYXMgYmVlbiBjcmVhdGVkICovCiAjZGVmaW5lIFNOTVBfRkxBR1NfRE9OVF9QUk9CRSAgICAgIDB4MTAwICAgICAgLyogZG9uJ3QgcHJvYmUgZm9yIGFuIGVuZ2luZUlEICovCkBAIC01MDAsMTMyICsyNTcsMjkgQEAKICNkZWZpbmUgU05NUEVSUl9LUkI1CQkJKC02MykKICNkZWZpbmUgU05NUEVSUl9QUk9UT0NPTAkJKC02NCkKICNkZWZpbmUgU05NUEVSUl9PSURfTk9OSU5DUkVBU0lORyAgICAgICAoLTY1KQorI2RlZmluZSBTTk1QRVJSX0pVU1RfQV9DT05URVhUX1BST0JFICAgICgtNjYpCisjZGVmaW5lIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRyAgICAgKC02NykKKyNkZWZpbmUgU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SICAoLTY4KQorI2RlZmluZSBTTk1QRVJSX1RMU19OT19DRVJUSUZJQ0FURSAgICAgICgtNjkpCiAKLSNkZWZpbmUgU05NUEVSUl9NQVgJCQkoLTY1KQotCi0jZGVmaW5lIG5vbl9yZXBlYXRlcnMJZXJyc3RhdAotI2RlZmluZSBtYXhfcmVwZXRpdGlvbnMgZXJyaW5kZXgKLQotdHlwZWRlZiB1bmlvbiB7Ci0gICBsb25nICAgICAgICAgICAqaW50ZWdlcjsKLSAgIHVfY2hhciAgICAgICAgICpzdHJpbmc7Ci0gICBvaWQgICAgICAgICAgICAqb2JqaWQ7Ci0gICB1X2NoYXIgICAgICAgICAqYml0c3RyaW5nOwotICAgc3RydWN0IGNvdW50ZXI2NCAqY291bnRlcjY0OwotI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUwotICAgZmxvYXQgICAgICAgICAgKmZsb2F0VmFsOwotICAgZG91YmxlICAgICAgICAgKmRvdWJsZVZhbDsKLSAgIC8qCi0gICAgKiB0X3VuaW9uICp1bmlvblZhbDsgCi0gICAgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTICovCi19IG5ldHNubXBfdmFyZGF0YTsKLQotCi0vKiogQHN0cnVjdCB2YXJpYWJsZV9saXN0Ci0gKiBUaGUgbmV0c25tcCB2YXJpYWJsZSBsaXN0IGJpbmRpbmcgc3RydWN0dXJlLCBpdCdzIHR5cGVkZWYnZCB0bwotICogbmV0c25tcF92YXJpYWJsZV9saXN0LgotICovCi1zdHJ1Y3QgdmFyaWFibGVfbGlzdCB7Ci0gICAvKiogTlVMTCBmb3IgbGFzdCB2YXJpYWJsZSAqLwotICAgc3RydWN0IHZhcmlhYmxlX2xpc3QgKm5leHRfdmFyaWFibGU7ICAgIAotICAgLyoqIE9iamVjdCBpZGVudGlmaWVyIG9mIHZhcmlhYmxlICovCi0gICBvaWQgICAgICAgICAgICAqbmFtZTsgICAKLSAgIC8qKiBudW1iZXIgb2Ygc3ViaWQncyBpbiBuYW1lICovCi0gICBzaXplX3QgICAgICAgICAgbmFtZV9sZW5ndGg7ICAgIAotICAgLyoqIEFTTiB0eXBlIG9mIHZhcmlhYmxlICovCi0gICB1X2NoYXIgICAgICAgICAgdHlwZTsgICAKLSAgIC8qKiB2YWx1ZSBvZiB2YXJpYWJsZSAqLwotICAgIG5ldHNubXBfdmFyZGF0YSB2YWw7Ci0gICAvKiogdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgdG8gYmUgY29waWVkIGludG8gYnVmICovCi0gICBzaXplX3QgICAgICAgICAgdmFsX2xlbjsKLSAgIC8qKiBidWZmZXIgdG8gaG9sZCB0aGUgT0lEICovCi0gICBvaWQgICAgICAgICAgICAgbmFtZV9sb2NbTUFYX09JRF9MRU5dOyAgCi0gICAvKiogOTAgcGVyY2VudGlsZSA8IDQwLiAqLwotICAgdV9jaGFyICAgICAgICAgIGJ1Zls0MF07Ci0gICAvKiogKE9wYXF1ZSkgaG9vayBmb3IgYWRkaXRpb25hbCBkYXRhICovCi0gICB2b2lkICAgICAgICAgICAqZGF0YTsKLSAgIC8qKiBjYWxsYmFjayB0byBmcmVlIGFib3ZlICovCi0gICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spKHZvaWQgKik7ICAgIAotICAgaW50ICAgICAgICAgICAgIGluZGV4OwotfTsKLQotCi0KLSAgICAvKgotICAgICAqIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9vcGVuKHNlc3Npb24pCi0gICAgICogICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgICoKLSAgICAgKiBTZXRzIHVwIHRoZSBzZXNzaW9uIHdpdGggdGhlIHNubXBfc2Vzc2lvbiBpbmZvcm1hdGlvbiBwcm92aWRlZAotICAgICAqIGJ5IHRoZSB1c2VyLiAgVGhlbiBvcGVucyBhbmQgYmluZHMgdGhlIG5lY2Vzc2FyeSBVRFAgcG9ydC4KLSAgICAgKiBBIGhhbmRsZSB0byB0aGUgY3JlYXRlZCBzZXNzaW9uIGlzIHJldHVybmVkICh0aGlzIGlzIGRpZmZlcmVudCB0aGFuCi0gICAgICogdGhlIHBvaW50ZXIgcGFzc2VkIHRvIHNubXBfb3BlbigpKS4gIE9uIGFueSBlcnJvciwgTlVMTCBpcyByZXR1cm5lZAotICAgICAqIGFuZCBzbm1wX2Vycm5vIGlzIHNldCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KLSAgICAgKi8KLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3BlbihuZXRzbm1wX3Nlc3Npb24gKik7Ci0KLSAgICAvKgotICAgICAqIGludCBzbm1wX2Nsb3NlKHNlc3Npb24pCi0gICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICAgKgotICAgICAqIENsb3NlIHRoZSBpbnB1dCBzZXNzaW9uLiAgRnJlZXMgYWxsIGRhdGEgYWxsb2NhdGVkIGZvciB0aGUgc2Vzc2lvbiwKLSAgICAgKiBkZXF1ZXVlcyBhbnkgcGVuZGluZyByZXF1ZXN0cywgYW5kIGNsb3NlcyBhbnkgc29ja2V0cyBhbGxvY2F0ZWQgZm9yCi0gICAgICogdGhlIHNlc3Npb24uICBSZXR1cm5zIDAgb24gZXJyb3IsIDEgb3RoZXJ3aXNlLgotICAgICAqCi0gICAgICogc25tcF9jbG9zZV9zZXNzaW9ucygpIGRvZXMgdGhlIHNhbWUgdGhpbmcgZm9yIGFsbCBvcGVuIHNlc3Npb25zCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvc2UobmV0c25tcF9zZXNzaW9uICopOwotICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb3NlX3Nlc3Npb25zKHZvaWQpOworI2RlZmluZSBTTk1QRVJSX01BWAkJCSgtNjkpCiAKIAogICAgIC8qCi0gICAgICogaW50IHNubXBfc2VuZChzZXNzaW9uLCBwZHUpCi0gICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICAgKiAgICAgbmV0c25tcF9wZHUgICAgICAqcGR1OwotICAgICAqCi0gICAgICogU2VuZHMgdGhlIGlucHV0IHBkdSBvbiB0aGUgc2Vzc2lvbiBhZnRlciBjYWxsaW5nIHNubXBfYnVpbGQgdG8gY3JlYXRlCi0gICAgICogYSBzZXJpYWxpemVkIHBhY2tldC4gIElmIG5lY2Vzc2FyeSwgc2V0IHNvbWUgb2YgdGhlIHBkdSBkYXRhIGZyb20gdGhlCi0gICAgICogc2Vzc2lvbiBkZWZhdWx0cy4gIEFkZCBhIHJlcXVlc3QgY29ycmVzcG9uZGluZyB0byB0aGlzIHBkdSB0byB0aGUgbGlzdAotICAgICAqIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIG9uIHRoaXMgc2Vzc2lvbiwgdGhlbiBzZW5kIHRoZSBwZHUuCi0gICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgZ2VuZXJhdGVkIHBhY2tldCBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgMS4KLSAgICAgKiBPbiBhbnkgZXJyb3IsIDAgaXMgcmV0dXJuZWQuCi0gICAgICogVGhlIHBkdSBpcyBmcmVlZCBieSBzbm1wX3NlbmQoKSB1bmxlc3MgYSBmYWlsdXJlIG9jY3VyZWQuCisgICAgICogR2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0bworICAgICAqIGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1heSBiZSByZWFsbG9jYXRlZCBvciBmcmVlZCBieSB0aGUgTmV0LVNOTVAKKyAgICAgKiBsaWJyYXJ5IG9yIHRvIHJlYWxsb2NhdGUgb3IgZnJlZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgdGhlCisgICAgICogTmV0LVNOTVAgbGlicmFyeSwgYW5kIHdoZW4gd29ya2luZyBpbiBhIGNvbnRleHQgd2hlcmUgdGhlcmUgaXMgbW9yZSB0aGFuCisgICAgICogb25lIGhlYXAuIEV4YW1wbGVzIGFyZToKKyAgICAgKiAtIFBlcmwgWFNVQidzLgorICAgICAqIC0gTVNWQyBvciBNaW5HVyB3aXRoIHRoZSBOZXQtU05NUCBsaWJyYXJ5IGNvbXBpbGVkIGFzIGEgRExMIGluc3RlYWQgb2YKKyAgICAgKiAgIGEgc3RhdGljIGxpYnJhcnkuCiAgICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2VuZChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKik7Ci0KLSAgICAvKgotICAgICAqIGludCBzbm1wX2FzeW5jX3NlbmQoc2Vzc2lvbiwgcGR1LCBjYWxsYmFjaywgY2JfZGF0YSkKLSAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgICAqICAgICBuZXRzbm1wX3BkdSAgICAgICpwZHU7Ci0gICAgICogICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgICogICAgIHZvaWQgICAqY2JfZGF0YTsKLSAgICAgKgotICAgICAqIFNlbmRzIHRoZSBpbnB1dCBwZHUgb24gdGhlIHNlc3Npb24gYWZ0ZXIgY2FsbGluZyBzbm1wX2J1aWxkIHRvIGNyZWF0ZQotICAgICAqIGEgc2VyaWFsaXplZCBwYWNrZXQuICBJZiBuZWNlc3NhcnksIHNldCBzb21lIG9mIHRoZSBwZHUgZGF0YSBmcm9tIHRoZQotICAgICAqIHNlc3Npb24gZGVmYXVsdHMuICBBZGQgYSByZXF1ZXN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwZHUgdG8gdGhlIGxpc3QKLSAgICAgKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBvbiB0aGlzIHNlc3Npb24gYW5kIHN0b3JlIGNhbGxiYWNrIGFuZCBkYXRhLAotICAgICAqIHRoZW4gc2VuZCB0aGUgcGR1LgotICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIGdlbmVyYXRlZCBwYWNrZXQgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIDEuCi0gICAgICogT24gYW55IGVycm9yLCAwIGlzIHJldHVybmVkLgotICAgICAqIFRoZSBwZHUgaXMgZnJlZWQgYnkgc25tcF9zZW5kKCkgdW5sZXNzIGEgZmFpbHVyZSBvY2N1cmVkLgotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBzbm1wX2FzeW5jX3NlbmQobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrLCB2b2lkICopOwotCi0KLSAgICAvKgotICAgICAqIHZvaWQgc25tcF9yZWFkKGZkc2V0KQotICAgICAqICAgICBmZF9zZXQgICpmZHNldDsKLSAgICAgKgotICAgICAqIENoZWNrcyB0byBzZWUgaWYgYW55IG9mIHRoZSBmZCdzIHNldCBpbiB0aGUgZmRzZXQgYmVsb25nIHRvCi0gICAgICogc25tcC4gIEVhY2ggc29ja2V0IHdpdGggaXQncyBmZCBzZXQgaGFzIGEgcGFja2V0IHJlYWQgZnJvbSBpdAotICAgICAqIGFuZCBzbm1wX3BhcnNlIGlzIGNhbGxlZCBvbiB0aGUgcGFja2V0IHJlY2VpdmVkLiAgVGhlIHJlc3VsdGluZyBwZHUKLSAgICAgKiBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHJvdXRpbmUgZm9yIHRoYXQgc2Vzc2lvbi4gIElmIHRoZSBjYWxsYmFjawotICAgICAqIHJvdXRpbmUgcmV0dXJucyBzdWNjZXNzZnVsbHksIHRoZSBwZHUgYW5kIGl0J3MgcmVxdWVzdCBhcmUgZGVsZXRlZC4KLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9yZWFkKGZkX3NldCAqKTsKLQotCisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9tYWxsb2Moc2l6ZV90IHNpemUpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgKm5ldHNubXBfY2FsbG9jKHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9yZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgbmV0c25tcF9mcmVlKHZvaWQgKnB0cik7CisgICAgTkVUU05NUF9JTVBPUlQgY2hhciAqbmV0c25tcF9zdHJkdXAoY29uc3QgY2hhciAqczEpOwogCiAgICAgLyoKICAgICAgKiB2b2lkCkBAIC02MzQsNTcgKzI4OCw4IEBACiAgICAgICoKICAgICAgKiBGcmVlcyB0aGUgcGR1IGFuZCBhbnkgbWFsbG9jJ2QgZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICovCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZnJlZV9wZHUobmV0c25tcF9wZHUgKik7CiAKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3ZhcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7ICAgICAvKiBmcmVlcyBqdXN0IHRoaXMgb25lICovCi0KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKTsgICAgIC8qIGZyZWVzIGFsbCBpbiBsaXN0ICovCi0KLSAgICAvKgotICAgICAqIGludCBzbm1wX3NlbGVjdF9pbmZvKG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrKQotICAgICAqIGludCAqbnVtZmRzOwotICAgICAqIGZkX3NldCAgICpmZHNldDsKLSAgICAgKiBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dDsKLSAgICAgKiBpbnQgKmJsb2NrOwotICAgICAqCi0gICAgICogUmV0dXJucyBpbmZvIGFib3V0IHdoYXQgc25tcCByZXF1aXJlcyBmcm9tIGEgc2VsZWN0IHN0YXRlbWVudC4KLSAgICAgKiBudW1mZHMgaXMgdGhlIG51bWJlciBvZiBmZHMgaW4gdGhlIGxpc3QgdGhhdCBhcmUgc2lnbmlmaWNhbnQuCi0gICAgICogQWxsIGZpbGUgZGVzY3JpcHRvcnMgb3BlbmVkIGZvciBTTk1QIGFyZSBPUidkIGludG8gdGhlIGZkc2V0LgotICAgICAqIElmIGFjdGl2aXR5IG9jY3VycyBvbiBhbnkgb2YgdGhlc2UgZmlsZSBkZXNjcmlwdG9ycywgc25tcF9yZWFkCi0gICAgICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoYXQgZmlsZSBkZXNjcmlwdG9yIHNldC4KLSAgICAgKgotICAgICAqIFRoZSB0aW1lb3V0IGlzIHRoZSBsYXRlc3QgdGltZSB0aGF0IFNOTVAgY2FuIHdhaXQgZm9yIGEgdGltZW91dC4gIFRoZQotICAgICAqIHNlbGVjdCBzaG91bGQgYmUgZG9uZSB3aXRoIHRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiB0aW1lb3V0IGFuZCBhbnkgb3RoZXIKLSAgICAgKiB0aW1lb3V0cyBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBiZSBjaGVja2VkIHVwb24gZWFjaCBpbnZvY2F0aW9uIG9mIHNlbGVjdC4KLSAgICAgKiBJZiBhIHRpbWVvdXQgaXMgcmVjZWl2ZWQsIHNubXBfdGltZW91dCBzaG91bGQgYmUgY2FsbGVkIHRvIGNoZWNrIGlmIHRoZQotICAgICAqIHRpbWVvdXQgd2FzIGZvciBTTk1QLiAgKHNubXBfdGltZW91dCBpcyBpZGVtcG90ZW50KQotICAgICAqCi0gICAgICogQmxvY2sgaXMgMSBpZiB0aGUgc2VsZWN0IGlzIHJlcXVlc3RlZCB0byBibG9jayBpbmRlZmluaXRlbHksIHJhdGhlciB0aGFuCi0gICAgICogdGltZSBvdXQuICBJZiBibG9jayBpcyBpbnB1dCBhcyAxLCB0aGUgdGltZW91dCB2YWx1ZSB3aWxsIGJlIHRyZWF0ZWQgYXMKLSAgICAgKiB1bmRlZmluZWQsIGJ1dCBpdCBtdXN0IGJlIGF2YWlsYWJsZSBmb3Igc2V0dGluZyBpbiBzbm1wX3NlbGVjdF9pbmZvLiAgT24KLSAgICAgKiByZXR1cm4sIGlmIGJsb2NrIGlzIHRydWUsIHRoZSB2YWx1ZSBvZiB0aW1lb3V0IHdpbGwgYmUgdW5kZWZpbmVkLgotICAgICAqCi0gICAgICogc25tcF9zZWxlY3RfaW5mbyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3BlbiBzb2NrZXRzLiAgKGkuZS4gVGhlIG51bWJlcgotICAgICAqIG9mIHNlc3Npb25zIG9wZW4pCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2VsZWN0X2luZm8oaW50ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKTsKLQotCi0KLSAgICAvKgotICAgICAqIHZvaWQgc25tcF90aW1lb3V0KCk7Ci0gICAgICoKLSAgICAgKiBzbm1wX3RpbWVvdXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdGltZW91dCBmcm9tIHNubXBfc2VsZWN0X2luZm8KLSAgICAgKiBleHBpcmVzLCBidXQgaXQgaXMgaWRlbXBvdGVudCwgc28gc25tcF90aW1lb3V0IGNhbiBiZSBwb2xsZWQgKHByb2JhYmx5IGEKLSAgICAgKiBjcHUgZXhwZW5zaXZlIHByb3Bvc2l0aW9uKS4gIHNubXBfdGltZW91dCBjaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUKLSAgICAgKiBzZXNzaW9ucyBoYXZlIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QgdGhhdCBoYXMgdGltZWQgb3V0LiAgSWYgaXQgZmluZHMgb25lCi0gICAgICogKG9yIG1vcmUpLCBhbmQgdGhhdCBwZHUgaGFzIG1vcmUgcmV0cmllcyBhdmFpbGFibGUsIGEgbmV3IHBhY2tldCBpcyBmb3JtZWQKLSAgICAgKiBmcm9tIHRoZSBwZHUgYW5kIGlzIHJlc2VudC4gIElmIHRoZXJlIGFyZSBubyBtb3JlIHJldHJpZXMgYXZhaWxhYmxlLCB0aGUKLSAgICAgKiBjYWxsYmFjayBmb3IgdGhlIHNlc3Npb24gaXMgdXNlZCB0byBhbGVydCB0aGUgdXNlciBvZiB0aGUgdGltZW91dC4KLSAgICAgKi8KLQotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3RpbWVvdXQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCBzbm1wX2ZyZWVfdmFyX2ludGVybmFscyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7ICAgICAvKiBmcmVlcyBjb250ZW50cyBvbmx5ICovCiAKIAogICAgIC8qCkBAIC03MjYsMjAgKzMzMSwyNyBAQAogCiAgICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfbXNnaWQodm9pZCk7CiAgICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfcmVxaWQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9zZXNzaWQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF90cmFuc2lkKHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWRfY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9uY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90LCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkdHJlZV9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkc3VidHJlZV9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwoY29uc3Qgb2lkICogaW5fbmFtZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4yLCBzaXplX3QgKm9mZnB0KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9lcXVhbHMoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF90cmVlX2VxdWFscyhjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKQEAgLTc0Nyw4ICszNTksMTAgQEAKICAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9pc19zdWJ0cmVlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfZmluZF9wcmVmaXgoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcChjb25zdCBjaGFyICopOwogICAgIHVfY2hhciAgICAgICAgICpzbm1wX3BkdV9idWlsZChuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwgc2l6ZV90ICopOwogI2lmZGVmIE5FVFNOTVBfVVNFX1JFVkVSU0VfQVNORU5DT0RJTkcKQEAgLTc3MiwyNyArMzg2LDQwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCk7CiAgICAgdV9jaGFyICAgICAgICAgKnNubXB2M19zY29wZWRQRFVfcGFyc2UobmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChjb25zdCBjaGFyICp0eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlX2lmX25lZWRlZCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlKGNvbnN0IGNoYXIgKnR5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2h1dGRvd24oY29uc3QgY2hhciAqdHlwZSk7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX3BkdV9hZGRfdmFyaWFibGUobmV0c25tcF9wZHUgKiwgY29uc3Qgb2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90LCB1X2NoYXIsIGNvbnN0IHVfY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKG5ldHNubXBfdmFyaWFibGVfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiB2YXJsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9hZGRfdmFyKG5ldHNubXBfcGR1ICosIGNvbnN0IG9pZCAqLCBzaXplX3QsIGNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgb2lkICAgICAgICAgICAgKnNubXBfZHVwbGljYXRlX29iamlkKGNvbnN0IG9pZCAqIG9ialRvQ29weSwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUwogICAgIHVfaW50ICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfaW50ICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkoaW50IHdoaWNoLCBpbnQgY291bnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9pbnQgICAgICAgICAgIHNubXBfZ2V0X3N0YXRpc3RpYyhpbnQgd2hpY2gpOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2luaXRfc3RhdGlzdGljcyh2b2lkKTsKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUyAqLworCisvKiBhbGxvdyBjb2RlIHRvIGNvbnRpbnVlIHJlZmVyZW5jaW5nIEFQSSBldmVuIGlmIHN0YXRpc3RpY3MgYXJlIHJlbW92ZWQgKi8KKyNkZWZpbmUgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFgpCisjZGVmaW5lIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieShYLFkpCisjZGVmaW5lIHNubXBfaW5pdF9zdGF0aXN0aWNzKCkKKworI2VuZGlmCisKICAgICBpbnQgICAgICAgICAgICAgY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pOwotICAgIGludCBzbm1wX2dldF9mZF9mb3Jfc2Vzc2lvbihzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzcCk7CisgICAgaW50IHNubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0Myh2b2lkICpzbHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOwogCiAgICAgLyoKICAgICAgKiBOZXcgcmUtYWxsb2NhdGluZyByZXZlcnNlIGVuY29kaW5nIGZ1bmN0aW9ucy4gIApAQCAtODExLDEwICs0MzgsMTMgQEAKIAogCiAKK3N0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zOworCiAgICAgLyoKICAgICAgKiBFeHRlbmRlZCBvcGVuOyBmcHJlX3BhcnNlIGhhcyBjaGFuZ2VkLiAgCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9vcGVuX2V4KG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0CkBAIC04MzgsNzAgKzQ2OCwzNiBAQAogICAgICAqIFNlZSBzbm1wX2RlYnVnLmggYW5kIHNubXBfZGVidWcuYyBpbnN0ZWFkLgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZG9fZGVidWdnaW5nKHZvaWQpOwogCiAKLSAgICAvKgotICAgICAqIHNubXBfZXJyb3IgLSByZXR1cm4gZXJyb3IgZGF0YQotICAgICAqIElucHV0cyA6ICBhZGRyZXNzIG9mIGVycm5vLCBhZGRyZXNzIG9mIHNubXBfZXJybm8sIGFkZHJlc3Mgb2Ygc3RyaW5nCi0gICAgICogQ2FsbGVyIG11c3QgZnJlZSB0aGUgc3RyaW5nIHJldHVybmVkIGFmdGVyIHVzZS4KLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9lcnJvcihuZXRzbm1wX3Nlc3Npb24gKiwgaW50ICosIGludCAqLCBjaGFyICoqKTsKLSAgICAvKgotICAgICAqIHNpbmdsZSBzZXNzaW9uIEFQSS4KLSAgICAgKgotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIHNpbWlsYXIgYWN0aW9ucyBhcyBzbm1wX1hYIGZ1bmN0aW9ucywKLSAgICAgKiBidXQgb3BlcmF0ZSBvbiBhIHNpbmdsZSBzZXNzaW9uIG9ubHkuCi0gICAgICoKLSAgICAgKiBTeW5vcHNpczoKLSAgICAgCi0gICAgIHZvaWQgKiBzZXNzcDsKLSAgICAgbmV0c25tcF9zZXNzaW9uIHNlc3Npb24sICpzczsKLSAgICAgbmV0c25tcF9wZHUgKnBkdSwgKnJlc3BvbnNlOwotICAgICAKLSAgICAgc25tcF9zZXNzX2luaXQoJnNlc3Npb24pOwotICAgICBzZXNzaW9uLnJldHJpZXMgPSAuLi4KLSAgICAgc2Vzc2lvbi5yZW1vdGVfcG9ydCA9IC4uLgotICAgICBzZXNzcCA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKLSAgICAgc3MgPSBzbm1wX3Nlc3Nfc2Vzc2lvbihzZXNzcCk7Ci0gICAgIGlmIChzcyA9PSBOVUxMKQotICAgICBleGl0KDEpOwotICAgICAuLi4KLSAgICAgaWYgKHNzLT5jb21tdW5pdHkpIGZyZWUoc3MtPmNvbW11bml0eSk7Ci0gICAgIHNzLT5jb21tdW5pdHkgPSBzdHJkdXAoZ2F0ZXdheSk7Ci0gICAgIHNzLT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGdhdGV3YXkpOwotICAgICAuLi4KLSAgICAgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNlc3NwLCBwZHUsICZyZXNwb25zZSk7Ci0gICAgIC4uLgotICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2Vzc3ApOwotICAgICAKLSAgICAgKiBTZWUgYWxzbzoKLSAgICAgKiBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UsIGluIHNubXBfY2xpZW50LmguCi0gICAgIAotICAgICAqIE5vdGVzOgotICAgICAqICAxLiBJbnZva2Ugc25tcF9zZXNzX3Nlc3Npb24gYWZ0ZXIgc25tcF9zZXNzX29wZW4uCi0gICAgICogIDIuIHNubXBfc2Vzc19zZXNzaW9uIHJldHVybiB2YWx1ZSBpcyBhbiBvcGFxdWUgcG9pbnRlci4KLSAgICAgKiAgMy4gRG8gTk9UIGZyZWUgbWVtb3J5IHJldHVybmVkIGJ5IHNubXBfc2Vzc19zZXNzaW9uLgotICAgICAqICA0LiBSZXBsYWNlIHNubXBfc2VuZChzcyxwZHUpIHdpdGggc25tcF9zZXNzX3NlbmQoc2Vzc3AscGR1KQotICAgICAqLwotCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc19pbml0KG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICB2b2lkICAgICAgICAgICAqc25tcF9zZXNzX29wZW4obmV0c25tcF9zZXNzaW9uICopOwotICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3NfcG9pbnRlcihuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbih2b2lkICopOwogICAgIE5FVFNOTVBfSU1QT1JUCi0gICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAodm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXNzX2xvZ19lcnJvcihpbnQgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc3MpOworICAgIGNvbnN0IGNoYXIgKiAgICBzbm1wX3BkdV90eXBlKGludCB0eXBlKTsKIAogICAgIC8qCiAgICAgICogUmV0dXJuIHRoZSBuZXRzbm1wX3RyYW5zcG9ydCBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvcGFxdWUKICAgICAgKiBwb2ludGVyLiAgCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICpzbm1wX3Nlc3NfdHJhbnNwb3J0KHZvaWQgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc190cmFuc3BvcnRfc2V0KHZvaWQgKiwKIAkJCQkJICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOwogCisgICAgTkVUU05NUF9JTVBPUlQgaW50CisgICAgbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQoc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0cmFuc3BvcnQpOworCisgICAgTkVUU05NUF9JTVBPUlQgaW50CisgICAgbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQobmV0c25tcF9zZXNzaW9uICppbl9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0cmFuc3BvcnQpOworCiAgICAgLyoKICAgICAgKiBFWFRFTkRFRCBTRVNTSU9OIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICAgICogCkBAIC05NTAsNiArNTQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgaW50KSk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9hZGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLApAQCAtOTU3LDYgKzU1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgaW50KSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfYWRkX2Z1bGwobmV0c25tcF9zZXNzaW9uICogaW5fc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLApAQCAtOTgxLDI4ICs1NzksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpCiAgICAgICAgICk7Ci0KLSAgICAvKgotICAgICAqIHVzZSByZXR1cm4gdmFsdWUgZnJvbSBzbm1wX3Nlc3Nfb3BlbiBhcyB2b2lkICogcGFyYW1ldGVyIAotICAgICAqLwotCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZW5kKHZvaWQgKiwgbmV0c25tcF9wZHUgKik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19hc3luY19zZW5kKHZvaWQgKiwgbmV0c25tcF9wZHUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFjaywgdm9pZCAqKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKiwgaW50ICosIGZkX3NldCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICopOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfcmVhZCh2b2lkICosIGZkX3NldCAqKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3RpbWVvdXQodm9pZCAqKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHZvaWQgKik7Ci0KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX2Vycm9yKHZvaWQgKiwgaW50ICosIGludCAqLCBjaGFyICoqKTsKLSAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXNzX2xvZ19lcnJvcihpbnQgcHJpb3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc3MpOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfcGVycm9yKGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNzKTsKLSAgICBjb25zdCBjaGFyICogICAgc25tcF9wZHVfdHlwZShpbnQgdHlwZSk7Ci0KICAgICAvKgogICAgICAqIGVuZCBzaW5nbGUgc2Vzc2lvbiBBUEkgCiAgICAgICovCkBAIC0xMDg4LDcgKzY2NCw0OCBAQAogI2RlZmluZSAgU1RBVF9UQVJHRVRfU1RBVFNfU1RBUlQgICAgICAgICAgICAgU1RBVF9TTk1QVU5BVkFJTEFCTEVDT05URVhUUwogI2RlZmluZSAgU1RBVF9UQVJHRVRfU1RBVFNfRU5EICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTkNPTlRFWFRTCiAKLSNkZWZpbmUgIE1BWF9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzCisgICAgLyoKKyAgICAgKiBUU00gY291bnRlcnMKKyAgICAgKi8KKyNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEQ0FDSEVTICAgICAgICAgICAgIDQzCisjZGVmaW5lICBTVEFUX1RTTV9TTk1QVFNNSU5BREVRVUFURVNFQ1VSSVRZTEVWRUxTICA0NAorI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTVVOS05PV05QUkVGSVhFUyAgICAgICAgICAgNDUKKyNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEUFJFRklYRVMgICAgICAgICAgIDQ2CisjZGVmaW5lICBTVEFUX1RTTV9TVEFUU19TVEFSVCAgICAgICAgICAgICAgICAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURDQUNIRVMKKyNkZWZpbmUgIFNUQVRfVFNNX1NUQVRTX0VORCAgICAgICAgICAgICAgICAgICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRFBSRUZJWEVTCisKKyAgICAvKgorICAgICAqIFRMU1RNIGNvdW50ZXJzCisgICAgICovCisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVOUyAgICAgICAgICAgICAgICAgICAgICA0NworI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQ0xJRU5UQ0xPU0VTICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMgICAgICAgICAgICAgICAgIDQ5CisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05BQ0NFUFRTICAgICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OU0VSVkVSQ0xPU0VTICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk5PU0VTU0lPTlMgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0xJRU5UQ0VSVElGSUNBVEVTICA1MworI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OVU5LTk9XTlNFUlZFUkNFUlRJRklDQVRFICAgNTQKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURTRVJWRVJDRVJUSUZJQ0FURVMgIDU1CisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0FDSEVTICAgICAgICAgICAgICA1NgorCisjZGVmaW5lICBTVEFUX1RMU1RNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVOUworI2RlZmluZSAgU1RBVF9UTFNUTV9TVEFUU19FTkQgICAgICAgICAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENBQ0hFUworCisgICAgLyogdGhpcyBwcmV2aW91c2x5IHdhcyBlbmQrMTsgZG9uJ3Qga25vdyB3aHkgdGhlICsxIGlzIG5lZWRlZDsKKyAgICAgICBYWFg6IGNoZWNrIHRoZSBjb2RlICovCisjZGVmaW5lICBORVRTTk1QX1NUQVRfTUFYX1NUQVRTICAgICAgICAgICAgICAoU1RBVF9UTFNUTV9TVEFUU19FTkQrMSkKKy8qKiBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSAqLworI2RlZmluZSBNQVhfU1RBVFMgTkVUU05NUF9TVEFUX01BWF9TVEFUUworCisgICAgLyoKKyAgICAgKiBJbnRlcm5hbDogVGhlIGxpc3Qgb2YgYWN0aXZlL29wZW4gc2Vzc2lvbnMuCisgICAgICovCisgICAgc3RydWN0IHNlc3Npb25fbGlzdCB7CisgICAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqbmV4dDsKKyAgICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CisgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKKyAgICAgICBzdHJ1Y3Qgc25tcF9pbnRlcm5hbF9zZXNzaW9uICppbnRlcm5hbDsKKyAgICB9OwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKaW5kZXggNTc4YjZjZS4uOGY1MmE2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKQEAgLTIzLDQyICsyMywxMDUgQEAKICMgIGVuZGlmIC8qIF9fU1REQ19fICovCiAjZW5kaWYgLyogX19TVFJJTkcgKi8KIAotI2RlZmluZSBuZXRzbm1wX3N0YXRpY19hc3NlcnQoeCkgXAotICAgIGRvIHsgc3dpdGNoKDApIHsgY2FzZSAoeCk6IGNhc2UgMDogOyB9IH0gd2hpbGUoMCkKLQotCiAvKgogICogYWx3YXlzIHVzZSBhc3NlcnQgaWYgcmVxdWVzdGVkCiAgKi8KICNpZmRlZiBORVRTTk1QX1VTRV9BU1NFUlQKIC8qICAgdm9pZCBuZXRzbm1wX2Fzc2VydCggaW50ICk7Ki8KICMgICBkZWZpbmUgbmV0c25tcF9hc3NlcnQoeCkgIGFzc2VydCggeCApCisjICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih4LCB5KSAgYXNzZXJ0KCB4ICkKKyMgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKHgsIHksIHopICBhc3NlcnQoIHggKQogI2Vsc2UKIC8qCiAgKiAgaWYgYXNzZXJ0cyB3ZXJlbid0IHJlcXVlc3RlZCwganVzdCBsb2csIHVubGVzcyBORVRTTk1QX05PX0RFQlVHR0lORyBzcGVjaWZpZWQKICAqLwogIyAgIGlmbmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwotIyAgICAgIGlmZGVmICBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVECi0jICAgICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0KHgpICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgaWYgKCB4ICkgXAotICAgICAgICAgICAgICAgICAgICA7IFwKLSAgICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYXNzZXJ0ICVzIGZhaWxlZCAlczolZCAlcygpXG4iLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HKHgpLF9fRklMRV9fLF9fTElORV9fLF9fRlVOQ1RJT05fXyk7IFwKLSAgICAgICAgICAgICAgfXdoaWxlKDApCisjICAgICAgaWZkZWYgIE5FVFNOTVBfRlVOQ1RJT04KKyMgICAgICAgICAgZGVmaW5lIE5FVFNOTVBfRlVOQ19GTVQgIiAlcygpXG4iCisjICAgICAgICAgIGRlZmluZSBORVRTTk1QX0ZVTkNfUEFSQU0gTkVUU05NUF9GVU5DVElPTgogIyAgICAgIGVsc2UKLSMgICAgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnQoeCkgIGRvIHsgXAotICAgICAgICAgICAgICAgICBpZiggeCApXAotICAgICAgICAgICAgICAgICAgICA7IFwKLSAgICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYXNzZXJ0ICVzIGZhaWxlZCAlczolZFxuIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORyh4KSxfX0ZJTEVfXyxfX0xJTkVfXyk7IFwKLSAgICAgICAgICAgICAgfXdoaWxlKDApCisjICAgICAgICAgIGRlZmluZSBORVRTTk1QX0ZVTkNfRk1UICIlYyIKKyMgICAgICAgICAgZGVmaW5lIE5FVFNOTVBfRlVOQ19QQVJBTSAnXG4nCiAjICAgICAgZW5kaWYKKyMKKyMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnQoeCkgIGRvIHsgXAorICAgICAgICAgICAgICBpZiAoIHggKSBcCisgICAgICAgICAgICAgICAgIDsgXAorICAgICAgICAgICAgICBlbHNlIFwKKyAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0c25tcF9hc3NlcnQgJXMgZmFpbGVkICVzOiVkIiBORVRTTk1QX0ZVTkNfRk1ULCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HKHgpLF9fRklMRV9fLF9fTElORV9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlVOQ19QQVJBTSk7IFwKKyAgICAgICAgICAgfXdoaWxlKDApCisjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih4LCB5KSAgZG8geyAgICAgICAgXAorICAgICAgICAgICAgICBpZiAoIHggKSBcCisgICAgICAgICAgICAgICAgIDsgXAorICAgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRzbm1wX2Fzc2VydCAlcyBmYWlsZWQgJXM6JWQiIE5FVFNOTVBfRlVOQ19GTVQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19TVFJJTkcoeCksX19GSUxFX18sX19MSU5FX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GVU5DX1BBUkFNKTsgXAorICAgICAgICAgICAgICAgICByZXR1cm4geTsgXAorICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgfXdoaWxlKDApCisjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybih4LCB5LCB6KSAgZG8geyAgICAgICBcCisgICAgICAgICAgICAgIGlmICggeCApIFwKKyAgICAgICAgICAgICAgICAgOyBcCisgICAgICAgICAgICAgIGVsc2UgeyBcCisgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldHNubXBfYXNzZXJ0ICVzIGZhaWxlZCAlczolZCIgTkVUU05NUF9GVU5DX0ZNVCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORyh4KSxfX0ZJTEVfXyxfX0xJTkVfXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0ZVTkNfUEFSQU0pOyBcCisgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIHkpOyBcCisgICAgICAgICAgICAgICAgIHJldHVybiB6OyBcCisgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICB9d2hpbGUoMCkKICMgICBlbHNlIC8qIE5PIERFQlVHR0lORyAqLwogIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydCh4KQorIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oeCwgeSkgIGRvIHsgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgaWYgKCB4ICkgXAorICAgICAgICAgICAgICAgICAgICA7IFwKKyAgICAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHk7IFwKKyAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgIH13aGlsZSgwKQorIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oeCwgeSwgeikgIGRvIHsgICAgICAgXAorICAgICAgICAgICAgICAgICBpZiAoIHggKSBcCisgICAgICAgICAgICAgICAgICAgIDsgXAorICAgICAgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gejsgXAorICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgfXdoaWxlKDApCiAjICAgZW5kaWYgLyogTk8gREVCVUdHSU5HICovCiAjZW5kaWYgLyogbm90IE5FVFNOTVBfVVNFX0FTU0VSVCAqLwogCiAKKyNkZWZpbmUgbmV0c25tcF9zdGF0aWNfYXNzZXJ0KHgpIFwKKyAgICBkbyB7IHN3aXRjaCgwKSB7IGNhc2UgKHgpOiBjYXNlIDA6IDsgfSB9IHdoaWxlKDApCisKKworLyoKKyAqICBFWFBFUklNRU5UQUwgbWFjcm9zLiBNYXkgYmUgcmVtb3ZlZCB3aXRob3V0IHdhcm5pbmcgaW4gZnV0dXJlCisgKiByZWxlYXNlcy4gVXNlIGF0IHlvdXIgb3duIHJpc2sKKyAqCisgKiBUaGUgc2VyaWVzIG9mIHVwcGVyY2FzZSBsZXR0ZXJzIGF0IG9yIG5lYXIgdGhlIGVuZCBvZiB0aGVzZSBtYWNyb3MgZ2l2ZQorICogYW4gaW5kaWNhdGlvbiBvZiB3aGF0IHRoZXkgZG8uIFRoZSBsZXR0ZXJzIHVzZWQgYXJlOgorICoKKyAqICAgTCAgOiBsb2cgYSBtZXNzYWdlCisgKiAgIFJOIDogcmV0dXJuIE5VTEwKKyAqICAgUkUgOiByZXR1cm4gYSBzcGVjaWZpYyBoYXJkY29kZWQgZXJyb3IgYXBwcm9wcmlhdGUgZm9yIHRoZSBjb25kaXRpb24KKyAqICAgUlYgOiByZXR1cm4gdXNlciBzcGVjaWZpZWQgdmFsdWUKKyAqCisgKi8KKyNkZWZpbmUgbmV0c25tcF9tYWxsb2NfY2hlY2tfTFJOKHB0cikgICAgICAgICAgIFwKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oIChwdHIpICE9IE5VTEwsIE5VTEwpCisjZGVmaW5lIG5ldHNubXBfbWFsbG9jX2NoZWNrX0xSRShwdHIpICAgICAgICAgICBcCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKCAocHRyKSAhPSBOVUxMLCBTTk1QRVJSX01BTExPQykKKyNkZWZpbmUgbmV0c25tcF9tYWxsb2NfY2hlY2tfTFJWKHB0ciwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiggKHB0cikgIT0gTlVMTCwgdmFsKQorCisjZGVmaW5lIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBwdHIsIHZhbCApIFwKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oIChwdHIpICE9IE5VTEwsIHZhbCkKKworCiAjZW5kaWYgLyogU05NUF9BU1NFUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAppbmRleCA5OWU3NWI1Li5lYTU0ZTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaApAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgU05NUF9DTElFTlRfSAogI2RlZmluZSBTTk1QX0NMSUVOVF9ICiAKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3ZhcmJpbmRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCkBAIC00OCw2MiArNTQsMTEyIEBACiAgICAgICAgIG5ldHNubXBfcGR1ICAgICpwZHU7CiAgICAgfTsKIAotICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUobmV0c25tcF92YXJpYWJsZV9saXN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICosIHNpemVfdCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5hbWVfbGVuZ3RoKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YXIsIHVfY2hhciB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIHZhbF9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFsX2xlbik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIG5ld3ZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGxvbmcgdmFsKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3JlcGxhY2VfdmFyX3R5cGVzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZibCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgb2xkX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIG5ld190eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcik7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVzZXRfdmFyX3R5cGVzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZibCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIG5ld190eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBjb3VudF92YXJiaW5kcyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJfcHRyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBjb3VudF92YXJiaW5kc19vZl90eXBlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUpOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqZmluZF92YXJiaW5kX29mX3R5cGUobmV0c25tcF92YXJpYWJsZV9saXN0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9wdHIsIHVfY2hhciB0eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqZmluZF92YXJiaW5kX2luX2xpc3QobmV0c25tcF92YXJpYWJsZV9saXN0ICp2Ymxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKm5hbWUsIHNpemVfdCBsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuKTsKIAotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9hZGRfbnVsbF92YXIobmV0c25tcF9wZHUgKiwgY29uc3Qgb2lkICosIHNpemVfdCk7Ci0gICAgbmV0c25tcF9wZHUgICAgKnNubXBfcGR1X2NyZWF0ZShpbnQpOwotICAgIG5ldHNubXBfcGR1ICAgICpzbm1wX2ZpeF9wZHUobmV0c25tcF9wZHUgKiwgaW50KTsKLSAgICBuZXRzbm1wX3BkdSAgICAqc25tcF9jbG9uZV9wZHUobmV0c25tcF9wZHUgKik7CiAgICAgbmV0c25tcF9wZHUgICAgKnNubXBfc3BsaXRfcGR1KG5ldHNubXBfcGR1ICosIGludCBza2lwQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3B5Q291bnQpOwogCiAgICAgdW5zaWduZWQgbG9uZyAgIHNubXBfdmFyYmluZF9sZW4obmV0c25tcF9wZHUgKnBkdSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9uZV92YXIobmV0c25tcF92YXJpYWJsZV9saXN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfY2xvbmVfdmFyYmluZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7Ci0gICAgY29uc3QgY2hhciAgICAgKnNubXBfZXJyc3RyaW5nKGludCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc3luY2hfcmVzcG9uc2UobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfc3luY2hfcmVzcG9uc2VfY2IobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgbmV0c25tcF9wZHUgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9jYWxsYmFjayk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvbmVfbWVtKHZvaWQgKiosIHZvaWQgKiwgdW5zaWduZWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvbmVfbWVtKHZvaWQgKiosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpOwogCi0gICAgLyoKLSAgICAgKiBzaW5nbGUgc2Vzc2lvbiBBUEkgLSBzZWUgc25tcF9hcGkuaCBmb3IgZnVsbCBkZXRhaWxzIAotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uodm9pZCAqLCBuZXRzbm1wX3BkdSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiopOwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqKTsKK05FVFNOTVBfSU1QT1JUCituZXRzbm1wX3Nlc3Npb24gKiBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb25fdW5jaGVja2VkKCB2b2lkICk7CitORVRTTk1QX0lNUE9SVAogbmV0c25tcF9zZXNzaW9uICogbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCB2b2lkICk7CitORVRTTk1QX0lNUE9SVAogaW50IG5ldHNubXBfcXVlcnlfZ2V0KCAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICosIG5ldHNubXBfc2Vzc2lvbiAqKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9nZXRuZXh0KCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwgbmV0c25tcF9zZXNzaW9uICopOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X3dhbGsoICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLCBuZXRzbm1wX3Nlc3Npb24gKik7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X3NldCggICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLCBuZXRzbm1wX3Nlc3Npb24gKik7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdGF0ZSBtYWNoaW5lCisgKgorICovCisgICAgLyoqIGZvcndhcmQgZGVjbGFyZSAqLworICAgIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcF9zOworICAgIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXRfczsKKworICAgIC8qKiBzdGF0ZSBtYWNoaW5lIHByb2Nlc3MgKi8KKyAgICB0eXBlZGVmIGludCAobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2Z1bmMpKHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXRfcyAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXBfcyAqc3RlcCk7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcF9zIHsKKworICAgICAgICBjb25zdCBjaGFyICAgKm5hbWU7IC8qIHByaW1hcmlseSBmb3IgbG9nZ2luZy9kZWJ1Z2dpbmcgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICBzbV9mbGFnczsKKyAgICAgICAgCisgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9mdW5jICpydW47CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ7IC8qIHJldHVybiBjb2RlIGZvciB0aGlzIHN0ZXAgKi8KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXBfcyAqb25fc3VjY2VzczsKKyAgICAgICAgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwX3MgKm9uX2Vycm9yOworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogdXNlciBmaWVsZHMgKG5vdCB0b3VjaGVkIGJ5IHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zKQorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICBmbGFnczsKKyAgICAgICAgdm9pZCAgICAgICAgICpzdGVwX2NvbnRleHQ7CisgICAgICAgIAorICAgIH0gbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXA7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXRfcyB7CisgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAqbmFtZTsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwc19zb19mYXI7CisgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICAqc3RlcHM7CisgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICAqY2xlYW51cDsKKyAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgICpsYXN0X3J1bjsKKworICAgICAgICAvKgorICAgICAgICAgKiB1c2VyIGZpZWxkcyAobm90IHRvdWNoZWQgYnkgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpCisgICAgICAgICAqLworICAgICAgICB2b2lkICAgICAgICAgKmlucHV0X2NvbnRleHQ7CisKKyAgICB9IG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dDsKKworCisgICAgTkVUU05NUF9JTVBPUlQgaW50CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3J1biggbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCApOworCisgICAgTkVUU05NUF9JTVBPUlQgaW50CisgICAgbmV0c25tcF9yb3dfY3JlYXRlKG5ldHNubXBfc2Vzc2lvbiAqc2VzcywgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm93X3N0YXR1c19pbmRleCk7CisKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAppbmRleCA5ZTNkNWE5Li5hMzk2OWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKQEAgLTE1LDM2ICsxNSw2MCBAQAogICAgICAqLwogCiAKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgOCkKKyNkZWZpbmUgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUKHR5cGUsIGZvcm1hdEFyZywgZmlyc3RBcmcpCisjZWxzZQorI2RlZmluZSBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQodHlwZSwgZm9ybWF0QXJnLCBmaXJzdEFyZykgXAorICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKCBfXyAjIyB0eXBlICMjIF9fLCBmb3JtYXRBcmcsIGZpcnN0QXJnICkpKQorI2VuZGlmCisKICAgICAvKgogICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQsIGlmIGF0IGFsbCBwb3NzaWJsZS4gIEluc3RlYWQsIHVzZQogICAgICAqIHRoZSBtYWNyb3MgYmVsb3cuIAogICAgICAqLwotI2lmIEhBVkVfU1REQVJHX0gKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2coY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQocHJpbnRmLCAyLCAzKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ3Rva2VuKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQocHJpbnRmLCAyLCAzKTsKICAgICB2b2lkICAgICAgICAgICAgZGVidWdfY29tYm9fbmMoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKLSNlbHNlCi0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnKHZhX2FsaXN0KTsKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2d0b2tlbih2YV9hbGlzdCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnX2NvbWJvX25jKHZhX2FsaXN0KTsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQocHJpbnRmLCAyLCAzKTsKKworI3VuZGVmIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVAorCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfb2lkKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBvaWQgKiB0aGVvaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19zdWJvaWQoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IG9pZCAqIHRoZW9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX3Zhcihjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfb2lkcmFuZ2UoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHRoZW9pZCwgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcl9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX2hleChjb25zdCBjaGFyICp0b2tlbiwgdV9jaGFyICogdGhlZGF0YSwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19oZXgoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfaGV4dGxpKGNvbnN0IGNoYXIgKnRva2VuLCB1X2NoYXIgKiB0aGVkYXRhLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX2hleHRsaShjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgdV9jaGFyICogdGhlZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnX2luZGVudF9hZGQoaW50IGFtb3VudCk7Ci0gICAgY2hhciAgICAgICAgICAgKmRlYnVnX2luZGVudCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBkZWJ1Z19pbmRlbnRfZ2V0KHZvaWQpOworICAgIC8qCisgICAgICogV2hhdCBpcyBzYWlkIGFib3ZlIGlzIHRydWUgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC4gRnVydGhlciB0aGlzCisgICAgICogZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgb25seSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAgICogUGxlYXNlIHVzZSAiJSpzIiwgZGVidWdfaW5kZW50X2dldCgpLCAiIiBpZiB5b3UgdXNlZCB0aGlzIG9uZSBiZWZvcmUuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqZGVidWdfaW5kZW50KHZvaWQpOwogCiAgICAgLyoKICAgICAgKiBVc2UgdGhlc2UgbWFjcm9zIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSB0byBhbGxvdyB0aGVtIHRvIGJlCkBAIC0xMjEsMTEgKzE0NSwxNCBAQAogI2RlZmluZSBfX0RCR01TR0xfTkMoeCkgIF9fREJHVFJBQ0U7IGRlYnVnbXNnIHgKICNkZWZpbmUgX19EQkdNU0dUTF9OQyh4KSBfX0RCR1RSQUNFOyBkZWJ1Z19jb21ib19uYyB4CiAKLSNpZmRlZiAgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRAotI2RlZmluZSBfX0RCR1RSQUNFICAgICAgIF9fREJHTVNHVCgoInRyYWNlIiwiJXMoKTogJXMsICVkOlxuIixfX0ZVTkNUSU9OX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sX19MSU5FX18pKQorI2lmZGVmICBORVRTTk1QX0ZVTkNUSU9OCisjZGVmaW5lIF9fREJHVFJBQ0UgICAgICAgX19EQkdNU0dUKCgidHJhY2UiLCIlcygpOiAlcywgJWQ6XG4iLFwKKwkJCQlORVRTTk1QX0ZVTkNUSU9OLF9fRklMRV9fLF9fTElORV9fKSkKKyNkZWZpbmUgX19EQkdUUkFDRVRPSyh4KSBfX0RCR01TR1QoKHgsIiVzKCk6ICVzLCAlZDpcbiIsICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlVOQ1RJT04sX19GSUxFX18sX19MSU5FX18pKQogI2Vsc2UKICNkZWZpbmUgX19EQkdUUkFDRSAgICAgICBfX0RCR01TR1QoKCJ0cmFjZSIsIiAlcywgJWQ6XG4iLCBfX0ZJTEVfXyxfX0xJTkVfXykpCisjZGVmaW5lIF9fREJHVFJBQ0VUT0soeCkgX19EQkdNU0dUKCh4LCIgJXMsICVkOlxuIiwgX19GSUxFX18sX19MSU5FX18pKQogI2VuZGlmCiAKICNkZWZpbmUgX19EQkdNU0dMKHgpICAgICBfX0RCR1RSQUNFLCBkZWJ1Z21zZyB4CkBAIC0xMzYsMTEgKzE2MywxMSBAQAogI2RlZmluZSBfX0RCR01TR09JRFJBTkdFKHgpIGRlYnVnbXNnX29pZHJhbmdlIHgKICNkZWZpbmUgX19EQkdNU0dIRVgoeCkgICAgIGRlYnVnbXNnX2hleCB4CiAjZGVmaW5lIF9fREJHTVNHSEVYVExJKHgpICBkZWJ1Z21zZ19oZXh0bGkgeAotI2RlZmluZSBfX0RCR0lOREVOVCgpICAgICAgZGVidWdfaW5kZW50KCkKKyNkZWZpbmUgX19EQkdJTkRFTlQoKSAgICAgIGRlYnVnX2luZGVudF9nZXQoKQogI2RlZmluZSBfX0RCR0lOREVOVEFERCh4KSAgZGVidWdfaW5kZW50X2FkZCh4KQogI2RlZmluZSBfX0RCR0lOREVOVE1PUkUoKSAgZGVidWdfaW5kZW50X2FkZCgyKQogI2RlZmluZSBfX0RCR0lOREVOVExFU1MoKSAgZGVidWdfaW5kZW50X2FkZCgtMikKLSNkZWZpbmUgX19EQkdQUklOVElOREVOVCh0b2tlbikgX19EQkdNU0dUTCgodG9rZW4sICIlcyIsIF9fREJHSU5ERU5UKCkpKQorI2RlZmluZSBfX0RCR1BSSU5USU5ERU5UKHRva2VuKSBfX0RCR01TR1RMKCh0b2tlbiwgIiUqcyIsIF9fREJHSU5ERU5UKCksICIiKSkKIAogI2RlZmluZSBfX0RCR0RVTVBIRUFERVIodG9rZW4seCkgXAogICAgICAgICBfX0RCR1BSSU5USU5ERU5UKCJkdW1waF8iIHRva2VuKTsgXApAQCAtMTU3LDEyICsxODQsMTEgQEAKIAogI2RlZmluZSBfX0RCR0RVTVBTRUNUSU9OKHRva2VuLHgpIFwKICAgICAgICAgX19EQkdQUklOVElOREVOVCgiZHVtcGhfIiB0b2tlbik7IFwKLSAgICAgICAgZGVidWdtc2coImR1bXBoXyIgdG9rZW4seCk7IFwKLSAgICAgICAgZGVidWdtc2coImR1bXBoXyIgdG9rZW4sIlxuIik7IFwKKyAgICAgICAgZGVidWdtc2coImR1bXBoXyIgdG9rZW4sIiVzXG4iLHgpO1wKICAgICAgICAgX19EQkdJTkRFTlRNT1JFKCkKIAogI2RlZmluZSBfX0RCR0RVTVBTRVRVUCh0b2tlbixidWYsbGVuKSBcCi0gICAgICAgIGRlYnVnbXNnKCJkdW1weCIgdG9rZW4sICJkdW1weF8lczolcyIsIHRva2VuLCBfX0RCR0lOREVOVCgpKTsgXAorICAgICAgICBkZWJ1Z21zZygiZHVtcHgiIHRva2VuLCAiZHVtcHhfJXM6JSpzIiwgdG9rZW4sIF9fREJHSU5ERU5UKCksICIiKTsgXAogICAgICAgICBfX0RCR01TR0hFWCgoImR1bXB4XyIgdG9rZW4sYnVmLGxlbikpOyBcCiAgICAgICAgIGlmIChkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKCJkdW1wdiIgdG9rZW4pID09IFNOTVBFUlJfU1VDQ0VTUyB8fCBcCiAgICAgICAgICAgICBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKCJkdW1wdl8iIHRva2VuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsgXApAQCAtMTcwLDk1ICsxOTYsMzEgQEAKICAgICAgICAgfSBlbHNlIHsgXAogICAgICAgICAgICAgZGVidWdtc2coImR1bXB4XyIgdG9rZW4sIiAgIik7IFwKICAgICAgICAgfSBcCi0gICAgICAgIGRlYnVnbXNnKCJkdW1wdiIgdG9rZW4sICJkdW1wdl8lczolcyIsIHRva2VuLCBfX0RCR0lOREVOVCgpKTsKKyAgICAgICAgZGVidWdtc2coImR1bXB2IiB0b2tlbiwgImR1bXB2XyVzOiUqcyIsIHRva2VuLCBfX0RCR0lOREVOVCgpLCAiIik7CiAKIC8qKioqKioqKioqKioqKioqKioqIEVuZCAgIHByaXZhdGUgbWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX0RFQlVHR0lORyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKipTdGFydCBwdWJsaWMgIG1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgREVCVUdNU0coeCkgICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtkZWJ1Z21zZyB4O30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHVCh4KSAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dUKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHVFJBQ0UgICAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdUUkFDRTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR0woeCkgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHTCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR1RMKHgpICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVEwoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dPSUQoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR09JRCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR1NVQk9JRCh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHU1VCT0lEKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHVkFSKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dWQVIoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dPSURSQU5HRSh4KSBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dPSURSQU5HRSh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR0hFWCh4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHSEVYKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHSEVYVExJKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dIRVhUTEkoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdJTkRFTlQoKSAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVCgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHSU5ERU5UQUREKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRBREQoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdJTkRFTlRNT1JFKCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVE1PUkUoKTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR0lOREVOVExFU1MoKSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UTEVTUygpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHUFJJTlRJTkRFTlQodG9rZW4pIFwKLQlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdQUklOVElOREVOVCh0b2tlbik7fSB9d2hpbGUoMCkKLQotCi0jZGVmaW5lIERFQlVHRFVNUEhFQURFUih0b2tlbix4KSBcCi0JZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUEhFQURFUih0b2tlbix4KTt9IH13aGlsZSgwKQotCi0jZGVmaW5lIERFQlVHRFVNUFNFQ1RJT04odG9rZW4seCkgXAotCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBTRUNUSU9OKHRva2VuLHgpO30gfXdoaWxlKDApCi0KLSNkZWZpbmUgREVCVUdEVU1QU0VUVVAodG9rZW4sYnVmLGxlbikgXAotCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBTRVRVUCh0b2tlbixidWYsbGVuKTt9IH13aGlsZSgwKQotCi0jZGVmaW5lIERFQlVHTVNHX05DKHgpICBkbyB7IF9fREJHTVNHX05DKHgpOyB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dUX05DKHgpIGRvIHsgX19EQkdNU0dUX05DKHgpOyB9d2hpbGUoMCkKLQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX05PX0RFQlVHR0lORyA6PSBlbmFibGUgc3RyZWFtbGluaW5nIG9mIHRoZSBjb2RlICovCi0KLSNkZWZpbmUgREVCVUdNU0coeCkKLSNkZWZpbmUgREVCVUdNU0dUKHgpCi0jZGVmaW5lIERFQlVHVFJBQ0UKLSNkZWZpbmUgREVCVUdNU0dMKHgpCi0jZGVmaW5lIERFQlVHTVNHVEwoeCkKLSNkZWZpbmUgREVCVUdNU0dPSUQoeCkKLSNkZWZpbmUgREVCVUdNU0dTVUJPSUQoeCkKLSNkZWZpbmUgREVCVUdNU0dWQVIoeCkKLSNkZWZpbmUgREVCVUdNU0dPSURSQU5HRSh4KQotI2RlZmluZSBERUJVR01TR0hFWCh4KQotI2RlZmluZSBERUJVR0lGKHgpICAgICAgICBpZigwKQotI2RlZmluZSBERUJVR0RVTVAodCxiLGwscCkKLSNkZWZpbmUgREVCVUdJTkRFTlQoKQotI2RlZmluZSBERUJVR0lOREVOVE1PUkUoKQotI2RlZmluZSBERUJVR0lOREVOVExFU1MoKQotI2RlZmluZSBERUJVR0lOREVOVEFERCh4KQotI2RlZmluZSBERUJVR01TR0hFWFRMSSh4KQotI2RlZmluZSBERUJVR1BSSU5USU5ERU5UKHRva2VuKQotI2RlZmluZSBERUJVR0RVTVBIRUFERVIodG9rZW4seCkKLSNkZWZpbmUgREVCVUdEVU1QU0VDVElPTih0b2tlbix4KQotI2RlZmluZSBERUJVR0RVTVBTRVRVUCh0b2tlbiwgYnVmLCBsZW4pCi0KLSNkZWZpbmUgREVCVUdNU0dfTkMoeCkKLSNkZWZpbmUgREVCVUdNU0dUX05DKHgpCi0KKyNpZmRlZiBfX2NwbHVzcGx1cworfQogI2VuZGlmCiAKKyAgICAvKiBQdWJsaWMgbWFjcm9zIG1vdmVkIHRvIHRvcC1sZXZlbCBBUEkgaGVhZGVyIGZpbGUgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIHZvaWQgICAgICAgICAgICBzbm1wX2RlYnVnX2luaXQodm9pZCk7CisKICNkZWZpbmUgTUFYX0RFQlVHX1RPS0VOUyAyNTYKICNkZWZpbmUgTUFYX0RFQlVHX1RPS0VOX0xFTiAxMjgKICNkZWZpbmUgREVCVUdfVE9LRU5fREVMSU1JVEVSICIsIgogI2RlZmluZSBERUJVR19BTFdBWVNfVE9LRU4gImFsbCIKIAotICAgIC8qCi0gICAgICogc2V0dXAgcm91dGluZXM6Ci0gICAgICogCi0gICAgICogZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNoYXIgKik6ICAgICByZWdpc3RlcnMgYSBsaXN0IG9mIHRva2VucyB0bwotICAgICAqIHByaW50IGRlYnVnZ2luZyBvdXRwdXQgZm9yLgotICAgICAqIAotICAgICAqIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoY2hhciAqKTogcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl9HRU5FUlIKLSAgICAgKiBpZiBhIHRva2VuIGhhcyBiZWVuIHJlZ2lzdGVyZWQgb3IKLSAgICAgKiBub3QgKGFuZCBkZWJ1Z2dpbmcgb3V0cHV0IGlzICJvbiIpLgotICAgICAqIHNubXBfZGVidWdfaW5pdCh2b2lkKTogICAgICAgICAgICAgcmVnaXN0ZXJzIC5jb25mIGhhbmRsZXJzLgotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY2hhciAqdG9rZW5zKTsKLSAgICBpbnQgICAgICAgICAgICAgZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZChjb25zdCBjaGFyICp0b2tlbik7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZGVidWdfaW5pdCh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKGludCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKTsKKyNpZm5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKIAogLyoKICAqIGludGVybmFsOgpAQCAtMjcyLDcgKzIzNCw5IEBACiAKIE5FVFNOTVBfSU1QT1JUIGludCAgICAgICAgICAgICAgICAgZGVidWdfbnVtX3Rva2VuczsKIE5FVFNOTVBfSU1QT1JUIG5ldHNubXBfdG9rZW5fZGVzY3IgZGJnX3Rva2Vuc1tNQVhfREVCVUdfVE9LRU5TXTsKLSAgICAKKworI2VuZGlmIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKaW5kZXggNDE2N2QyOC4uMjM3ODkxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaApAQCAtNjMsOCArNjMsMTAgQEAKICAgICAgKiBmaW5kIGEgbGlzdCwgYW5kIHRoZW4gb3BlcmF0ZSBvbiB0aGF0IGxpc3QKICAgICAgKiAgICggZGlyZWN0IG1ldGhvZHMgZnVydGhlciBiZWxvdyBpZiB5b3UgYWxyZWFkeSBoYXZlIHRoZSBsaXN0IHBvaW50ZXIpCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc2VfZmluZF9sYWJlbF9pbl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwpOwogICAgIGludCAgICAgICAgICAgICBzZV9maW5kX2ZyZWVfdmFsdWVfaW5fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUpOwpAQCAtNzMsNiArNzUsNyBAQAogICAgICAqIG93bmVyc2hpcCBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgbGFiZWwgdG8gdGhlIGxpc3Q6CiAgICAgICogY2xlYXJfc25tcF9lbnVtKCkgZGVhbGxvY2F0ZXMgdGhhdCBtZW1vcnkuCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsIGNoYXIgKmxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpOwogCkBAIC05NCw2ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdHlwZSk7CiAgICAgdm9pZCAgICAgICAgICAgIHNlX3N0b3JlX2xpc3QodW5zaWduZWQgaW50IG1ham9yLCB1bnNpZ25lZCBpbnQgbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZSk7CisgICAgdm9pZCAgICAgICAgICAgIHNlX2NsZWFyX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lKTsKICAgICB2b2lkICAgICAgICAgICAgc2Vfc3RvcmVfc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIGludCAgICAgICAgICAgICBzZV9zdG9yZV9zbGlzdF9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJncywgdm9pZCAqY2xpZW50YXJncyk7CkBAIC0xMDIsNiArMTA2LDcgQEAKICAgICAgKiBEZWFsbG9jYXRlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGluaXRfc25tcF9lbnVtKCk6IHJlbW92ZSBhbGwga2V5L3ZhbHVlCiAgICAgICogcGFpcnMgc3RvcmVkIGJ5IHNlX2FkZF8qKCkgY2FsbHMuCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgY2xlYXJfc25tcF9lbnVtKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAppbmRleCAwZDMyYzQ0Li5mNzlhZWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCkBAIC03MiwxMCArNzIsMTUgQEAKICAgICAvKgogICAgICAqIEFjY2VzcyBjb250cm9sIHN0YXRlbWVudHMgZm9yIHRoZSBhZ2VudCAKICAgICAgKi8KLSNkZWZpbmUgUk9OTFkJMHgxICAgICAgICAgICAgIC8qIHJlYWQgYWNjZXNzIG9ubHkgKi8KLSNkZWZpbmUgUldSSVRFCTB4MiAgICAgICAgICAgICAvKiByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgKG11c3QgaGF2ZSAweDIgYml0IHNldCkgKi8KKyNkZWZpbmUgTkVUU05NUF9PTERBUElfUk9OTFkJMHgxICAgICAvKiByZWFkIGFjY2VzcyBvbmx5ICovCisjZGVmaW5lIE5FVFNOTVBfT0xEQVBJX1JXUklURQkweDIgICAgIC8qIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyAobXVzdCBoYXZlIDB4MiBiaXQgc2V0KSAqLworI2RlZmluZSBORVRTTk1QX09MREFQSV9OT0FDQ0VTUyAweDAwMDAgIC8qIG5vIGFjY2VzcyBmb3IgYW55Ym9keSAqLwogCi0jZGVmaW5lIE5PQUNDRVNTIDB4MDAwMCAgICAgICAgIC8qIG5vIGFjY2VzcyBmb3IgYW55Ym9keSAqLworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBST05MWSAgICAgICAgICAgTkVUU05NUF9PTERBUElfUk9OTFkKKyNkZWZpbmUgUldSSVRFICAgICAgICAgIE5FVFNOTVBfT0xEQVBJX1JXUklURQorI2RlZmluZSBOT0FDQ0VTUyAgICAgICAgTkVUU05NUF9PTERBUElfTk9BQ0NFU1MKKyNlbmRpZgogCiAgICAgLyoKICAgICAgKiBkZWZpbmVkIHR5cGVzIChmcm9tIHRoZSBTTUksIFJGQyAxMTU3KSAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAppbmRleCAwZGRlN2FlLi4xZDc5MjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCkBAIC0xLDE4ICsxLDE3IEBACiAjaWZuZGVmIFNOTVBfTE9HR0lOR19ICiAjZGVmaW5lIFNOTVBfTE9HR0lOR19ICiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICAgICAgICAgICJDIiB7Ci0jZW5kaWYKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KIAotI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TWVNMT0dfSAogI2luY2x1ZGUgPHN5c2xvZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVERBUkdfSAorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCiAjaWZuZGVmIExPR19FUlIKQEAgLTM1LDUxICszNCwzNiBAQAogI2RlZmluZSBERUZBVUxUX0xPR19JRCAibmV0LXNubXAiCiAjZW5kaWYKIAorI2RlZmluZSBORVRTTk1QX0xPR09OQ0UoeCkgZG8geyBcCisgICAgICAgIHN0YXRpYyBjaGFyIGxvZ2dlZCA9IDA7IFwKKyAgICAgICAgaWYgKCFsb2dnZWQpIHsgICAgICAgICAgXAorICAgICAgICAgICAgbG9nZ2VkID0gMTsgICAgICAgICBcCisgICAgICAgICAgICBzbm1wX2xvZyB4IDsgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKwogICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXBfbG9nZ2luZyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc25tcF9sb2dnaW5nKHZvaWQpOwotICAgIGludCAgICAgICAgICAgICBzbm1wX2dldF9kb19sb2dnaW5nKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2codm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZGlzYWJsZV9maWxlbG9nKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZGlzYWJsZV9zdGRlcnJsb2codm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZGlzYWJsZV9jYWxsbG9nKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Rpc2FibGVfbG9nKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoY29uc3QgY2hhciAqaWRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgICBmYWNpbGl0eSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9lbmFibGVfZmlsZWxvZyhjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9udF96ZXJvX2xvZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9lbmFibGVfc3RkZXJybG9nKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2VuYWJsZV9jYWxsbG9nKHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9zdGRlcnJsb2dfc3RhdHVzKHZvaWQpOwogCi0jaWYgSEFWRV9TVERBUkdfSAotIyBpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgOCkKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Ci0jIGVsc2UKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSAgICAgICAgICAgICAgICAgICAgCV9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwotIyBlbmRpZgotI2Vsc2UKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9sb2codmFfYWxpc3QpOwotI2VuZGlmCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfdmxvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXApOwotICAgIC8qCi0gICAgICogMCAtIHN1Y2Nlc3NmdWwgbWVzc2FnZSBmb3JtYXR0aW5nIAotICAgICAqLwotICAgIC8qCi0gICAgICogLTEgLSBDb3VsZCBub3QgZm9ybWF0IGxvZy1zdHJpbmcgCi0gICAgICovCi0gICAgLyoKLSAgICAgKiAtMiAtIENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGxvZy1tZXNzYWdlIAotICAgICAqLwotICAgIC8qCi0gICAgICogLTMgLSBMb2ctbWVzc2FnZSB0b28gbG9uZyEgCi0gICAgICovCi0KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKGNvbnN0IGNoYXIgKnMpOwotCiAKICNkZWZpbmUgTkVUU05NUF9MT0dIQU5ETEVSX1NURE9VVAkxCiAjZGVmaW5lIE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlIJMgpAQCAtODgsOCArNzIsMTMgQEAKICNkZWZpbmUgTkVUU05NUF9MT0dIQU5ETEVSX0NBTExCQUNLCTUKICNkZWZpbmUgTkVUU05NUF9MT0dIQU5ETEVSX05PTkUJCTYKIAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhGSUxFICpzdHJlYW0pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IHNubXBfbG9nX29wdGlvbnMoY2hhciAqb3B0YXJnLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBzbm1wX2xvZ19vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKmxlYWQsIEZJTEUgKm91dGYpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAqc25tcF9sb2dfc3lzbG9nbmFtZShjb25zdCBjaGFyICpzeXNsb2duYW1lKTsKICAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2xvZ19oYW5kbGVyX3MgbmV0c25tcF9sb2dfaGFuZGxlcjsgCiAgICAgdHlwZWRlZiBpbnQgKE5ldHNubXBMb2dIYW5kbGVyKShuZXRzbm1wX2xvZ19oYW5kbGVyKiwgaW50LCBjb25zdCBjaGFyICopOwpAQCAtMTE1LDEzICsxMDQsMjEgQEAKIAluZXRzbm1wX2xvZ19oYW5kbGVyCSpuZXh0LCAqcHJldjsKICAgICB9OwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF9sb2dfaGFuZGxlciAqZ2V0X2xvZ2hfaGVhZCggdm9pZCApOworTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfbG9nX2hhbmRsZXIgKm5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlciggaW50IHR5cGUsIGludCBwcmkgKTsKIG5ldHNubXBfbG9nX2hhbmRsZXIgKm5ldHNubXBfZmluZF9sb2doYW5kbGVyKCBjb25zdCBjaGFyICp0b2tlbiApOwogaW50IG5ldHNubXBfYWRkX2xvZ2hhbmRsZXIoICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2ggKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlciggbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCApOwogaW50IG5ldHNubXBfZW5hYmxlX2xvZ2hhbmRsZXIoIGNvbnN0IGNoYXIgKnRva2VuICk7CiBpbnQgbmV0c25tcF9kaXNhYmxlX2xvZ2hhbmRsZXIoIGNvbnN0IGNoYXIgKnRva2VuICk7CitORVRTTk1QX0lNUE9SVAordm9pZCBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIoIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2ggKTsKK05FVFNOTVBfSU1QT1JUCit2b2lkIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIoIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2ggKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0KHZvaWQpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5MTczNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogSGVhZGVyIGZpbGUgZm9yIHRoZSBPcGVuU1NMIFdyYXBwZXIKKyAqLworCisjaWZuZGVmIFNOTVBfT1BFTlNTTF9ICisjZGVmaW5lIFNOTVBfT1BFTlNTTF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIHZvaWQgbmV0c25tcF9pbml0X29wZW5zc2wodm9pZCk7CisKKyAgICAvKgorICAgICAqIGNlcnQgZmllbGRzCisgICAgICovCisgICAgdm9pZCBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX25hbWVzKFg1MDkgKm9jZXJ0KTsKKyAgICB2b2lkIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhYNTA5ICpvY2VydCk7CisKKyAgICBjaGFyICpuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZShYNTA5ICosIGNoYXIgKipidWYsIGludCAqbGVuKTsKKyAgICBjaGFyICpuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdE5hbWUoWDUwOSAqLCBjaGFyICoqYnVmLCBpbnQgKmxlbik7CisgICAgY2hhciAqbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KFg1MDkgKm9jZXJ0LCBpbnQgYWxnKTsKKyAgICBpbnQgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShYNTA5ICpvY2VydCk7CisKKyAgICBpbnQgbmV0c25tcF9vcGVuc3NsX2NlcnRfaXNzdWVkX2J5KFg1MDkgKmlzc3VlciwgWDUwOSAqY2VydCk7CisKKyAgICBjaGFyICpuZXRzbm1wX29wZW5zc2xfZXh0cmFjdF9zZWNuYW1lKG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcCAqcGVlcl9jZXJ0KTsKKworICAgIGNoYXIgKm5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZShYNTA5ICosIGNoYXIgKipidWYsIGludCAqbGVuKTsKKworICAgIC8qCisgICAgICogc3NsIGNlcnQgY2hhaW5zCisgICAgICovCisgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfb3BlbnNzbF9nZXRfY2VydF9jaGFpbihTU0wgKnNzbCk7CisKKyAgICAvKgorICAgICAqIG1pc2MKKyAgICAgKi8KKyAgICB2b2lkIG5ldHNubXBfb3BlbnNzbF9lcnJfbG9nKGNvbnN0IGNoYXIgKnByZWZpeCk7CisgICAgdm9pZCBuZXRzbm1wX29wZW5zc2xfbnVsbF9jaGVja3MoU1NMICpzc2wsIGludCAqbnVsbEF1dGgsIGludCAqbnVsbENpcGhlcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBfT1BFTlNTTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKaW5kZXggYzBmZTcxZS4uMWFkNjNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaApAQCAtMSwxNiArMSw4OSBAQAogI2lmbmRlZiBTTk1QX1BBUlNFX0FSR1NfSAogI2RlZmluZSBTTk1QX1BBUlNFX0FSR1NfSAorCisvKioKKyAqIEBmaWxlIHNubXBfcGFyc2VfYXJncy5oCisgKgorICogU3VwcG9ydCBmb3IgaW5pdGlhbGl6aW5nIHZhcmlhYmxlcyBvZiB0eXBlIG5ldHNubXBfc2Vzc2lvbiBmcm9tIGNvbW1hbmQKKyAqIGxpbmUgYXJndW1lbnRzCisgKi8KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisvKiogRG9uJ3QgZW5hYmxlIGFueSBsb2dnaW5nIGV2ZW4gaWYgdGhlcmUgaXMgbm8gLUwgYXJndW1lbnQgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX05PTE9HR0lORyAgICAweDAwMDEKKy8qKiBEb24ndCB6ZXJvIG91dCBzZW5zaXRpdmUgYXJndW1lbnRzIGFzIHRoZXkgYXJlIG5vdCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKiAgYW55d2F5LCB0eXBpY2FsbHkgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcm5hbAorICogIGNvbmZpZy1saW5lIGhhbmRsZXIKKyAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfTk9aRVJPICAgICAgIDB4MDAwMgorCisvKioKKyAqIFBhcnNpbmcgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBzdWNjZWVkZWQgYW5kIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkCisgKiB0byBjb250aW51ZSB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1MgICAgICAgMAorLyoqCisgICogUGFyc2luZyBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHN1Y2NlZWRlZCwgYnV0IHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZAorICAqIHRvIGV4aXQgd2l0aCB6ZXJvIGV4aXQgY29kZS4gRm9yIGV4YW1wbGUsICctVicgcGFyYW1ldGVyIGhhcyBiZWVuIGZvdW5kLgorICAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUICAtMgorLyoqCisgKiBQYXJzaW5nIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZmFpbGVkIGFuZCBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byBzaG93CisgKiB1c2FnZSAoaS5lLiBsaXN0IG9mIHBhcmFtZXRlcnMpIGFuZCBleGl0IHdpdGggbm96ZXJvIGV4aXQgY29kZS4gCisgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFICAgLTEKKy8qKgorICogUGFyc2luZyBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZhaWxlZCBhbmQgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gZXhpdAorICogd2l0aCBub3plcm8gZXhpdCBjb2RlLiAgbmV0c25tcF9wYXJzZV9hcmdzKCkgaGFzIGFscmVhZHkgcHJpbnRlZCB3aGF0IHdlbnQKKyAqIHdyb25nLgorICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUiAgICAgICAgIC0zCisgICAgCisvKioKKyAqICBQYXJzZSBhbiBhcmd1bWVudCBsaXN0IGFuZCBpbml0aWFsaXplIFxsaW5rIG5ldHNubXBfc2Vzc2lvbgorICogIHNlc3Npb25cZW5kbGluaworICogIGZyb20gaXQuCisgKiAgQHBhcmFtIGFyZ2MgTnVtYmVyIG9mIGVsZW1lbnRzIGluIGFyZ3YKKyAqICBAcGFyYW0gYXJndiBzdHJpbmcgYXJyYXkgb2YgYXQgbGVhc3QgYXJnYyBlbGVtZW50cworICogIEBwYXJhbSBzZXNzaW9uCisgKiAgQHBhcmFtIGxvY2FsT3B0cyBBZGRpdGlvbmFsIG9wdGlvbiBjaGFyYWN0ZXJzIHRvIGFjY2VwdAorICogIEBwYXJhbSBwcm9jIGZ1bmN0aW9uIHBvaW50ZXIgdXNlZCB0byBwcm9jZXNzIGFueSB1bmhhbmRsZWQgYXJndW1lbnRzCisgKiAgQHBhcmFtIGZsYWdzIGZsYWdzIGRpcmVjdGluZyBob3cgdG8gaGFuZGxlIHRoZSBzdHJpbmcKKyAqCisgKiAgQHJldHZhbCAwICg9ICNORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTUykgb24gc3VjY2VzcworICogIEByZXR2YWwgI05FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQKKyAqICB0byBleGl0IHdpdGggemVybyBleGl0IGNvZGUgKGUuZy4gJy1WJyBvcHRpb24gd2FzIGZvdW5kKQorICogIEByZXR2YWwgI05FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSB3aGVuIHRoZSBmdW5jdGlvbiBmYWlsZWQgdG8gcGFyc2UKKyAqICB0aGUgY29tbWFuZCBsaW5lIGFuZCB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gc2hvdyBpdCdzIHVzYWdlCisgKiAgQHJldHZhbCAjTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SIHdoZW4gdGhlIGZ1bmN0aW9uIGZhaWxlZCB0byBwYXJzZQorICogIHRoZSBjb21tYW5kIGxpbmUgYW5kIGl0IGhhcyBhbHJlYWR5IHByaW50ZWQgZW5vdWdoIGluZm9ybWF0aW9uIGZvciB0aGUgdXNlcgorICogIGFuZCBubyBvdGhlciBvdXRwdXQgaXMgbmVlZGVkCisgKgorICogIFRoZSBwcm9jIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFyZ2MsIGFyZ3YgYW5kIHRoZSBjdXJyZW50bHkgcHJvY2Vzc2VkCisgKiAgb3B0aW9uIGFzIGFyZ3VtZW50cworICovCitORVRTTk1QX0lNUE9SVCBpbnQKK25ldHNubXBfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbE9wdHMsIHZvaWQgKCpwcm9jKShpbnQsIGNoYXIgKmNvbnN0ICosIGludCksCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKworLyoqCisgKiAgQ2FsbHMgXGxpbmsgbmV0c25tcF9wYXJzZV9hcmdzKCkKKyAqICBuZXRzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgc2Vzc2lvbiwgbG9jYWxPcHRzLCBwcm9jLCAwKVxlbmRsaW5rCisgKi8KK05FVFNOTVBfSU1QT1JUCiBpbnQKIHNubXBfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJY29uc3QgY2hhciAqbG9jYWxPcHRzLCB2b2lkICgqcHJvYykoaW50LCBjaGFyICpjb25zdCAqLCBpbnQpKTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQKIHNubXBfcGFyc2VfYXJnc19kZXNjcmlwdGlvbnMoRklMRSAqKTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQKIHNubXBfcGFyc2VfYXJnc191c2FnZShGSUxFICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCmluZGV4IGFlZWIyNGEuLmFhYmI3ZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCkBAIC0xMCw4ICsxMCw5IEBACiAvKiBMb2NhbGx5IGRlZmluZWQgc2VjdXJpdHkgbW9kZWxzLgogICogKE5ldC1TTk1QIGVudGVycHJpc2UgbnVtYmVyID0gODA3MikqMjU2ICsgbG9jYWxfbnVtCiAgKi8KLSNkZWZpbmUgTkVUU05NUF9LU01fU0VDVVJJVFlfTU9ERUwgICAgIDIwNjY0MzIKLSNkZWZpbmUgTkVUU05NUF9MT0NBTFNNX1NFQ1VSSVRZX01PREVMIDIwNjY0MzMKKyNkZWZpbmUgTkVUU05NUF9TRUNfTU9ERUxfS1NNICAgICAyMDY2NDMyCisjZGVmaW5lIE5FVFNOTVBfS1NNX1NFQ1VSSVRZX01PREVMICAgICBORVRTTk1QX1NFQ19NT0RFTF9LU00KKyNkZWZpbmUgTkVUU05NUF9UU01fU0VDVVJJVFlfTU9ERUwgICAgIFNOTVBfU0VDX01PREVMX1RTTQogCiBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmOwogCkBAIC05MCw3ICs5MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKm9yaWdwZHUpOwordHlwZWRlZiBpbnQgICAgIChTZWNtb2REaXNjb3ZlcnlNZXRob2QpICh2b2lkICpzbHAsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik7Cit0eXBlZGVmIGludCAgICAgKFNlY21vZFBvc3REaXNjb3ZlcnkpICh2b2lkICpzbHAsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKK3R5cGVkZWYgaW50ICAgICAoU2VjbW9kU2Vzc2lvblNldHVwKSAobmV0c25tcF9zZXNzaW9uICppbl9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKm91dF9zZXNzaW9uKTsKIC8qCiAgKiBkZWZpbml0aW9uIG9mIGEgc2VjdXJpdHkgbW9kdWxlCiAgKi8KQEAgLTEwNSw2ICsxMTAsNyBAQAogICAgICAqLwogICAgIFNlY21vZFNlc3Npb25DYWxsYmFjayAqc2Vzc2lvbl9vcGVuOyAgICAgICAgLyogY2FsbGVkIGluIHNubXBfc2Vzc19vcGVuKCkgICovCiAgICAgU2VjbW9kU2Vzc2lvbkNhbGxiYWNrICpzZXNzaW9uX2Nsb3NlOyAgICAgICAvKiBjYWxsZWQgaW4gc25tcF9zZXNzX2Nsb3NlKCkgKi8KKyAgICBTZWNtb2RTZXNzaW9uU2V0dXAgICAgKnNlc3Npb25fc2V0dXA7CiAKICAgICAvKgogICAgICAqIHBkdSBtYW5pcHVsYXRpb24gcm91dGluZXMgCkBAIC0xMjUsNiArMTMxLDEyIEBACiAgICAgKiBlcnJvciBhbmQgcmVwb3J0IGhhbmRsaW5nCiAgICAgKi8KICAgIFNlY21vZEhhbmRsZVJlcG9ydCAqaGFuZGxlX3JlcG9ydDsKKworICAgLyoKKyAgICAqIGRlZmF1bHQgZW5naW5lSUQgZGlzY292ZXJ5IG1lY2hhbmlzbQorICAgICovCisgICBTZWNtb2REaXNjb3ZlcnlNZXRob2QgKnByb2JlX2VuZ2luZWlkOworICAgU2VjbW9kUG9zdERpc2NvdmVyeSAgICpwb3N0X3Byb2JlX2VuZ2luZWlkOwogfTsKIAogCkBAIC0xNDYsMTYgKzE1OCwyMCBAQAogLyoKICAqIGZpbmQgYSBzZWN1cml0eSBzZXJ2aWNlIGRlZmluaXRpb24gCiAgKi8KK05FVFNOTVBfSU1QT1JUCiBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmICpmaW5kX3NlY19tb2QoaW50KTsKIC8qCiAgKiByZWdpc3RlciBhIHNlY3VyaXR5IHNlcnZpY2UgCiAgKi8KIGludCAgICAgICAgICAgICB1bnJlZ2lzdGVyX3NlY19tb2QoaW50KTsgICAgICAgIC8qIHJlZ2lzdGVyIGEgc2VjdXJpdHkgc2VydmljZSAqLwogdm9pZCAgICAgICAgICAgIGluaXRfc2VjbW9kKHZvaWQpOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zZWNtb2Qodm9pZCk7CiAKIC8qCiAgKiBjbGVhcnMgdGhlIHNlY19tb2QgbGlzdAogICovCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIGNsZWFyX3NlY19tb2Qodm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCmluZGV4IDVhNDU2NWQuLjcxMWY2NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKQEAgLTcsNyArNyw3IEBACiAKIC8qIERlZmF1bHQgcG9ydCBoYW5kbGluZyAqLwogCi1leHRlcm4gaW50CitORVRTTk1QX0lNUE9SVCBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4oY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIGRvbWFpbik7CiAKIGV4dGVybiBjb25zdCBjaGFyKgpAQCAtMTksNyArMTksNyBAQAogZXh0ZXJuIHZvaWQKIG5ldHNubXBfY2xlYXJfZGVmYXVsdF9kb21haW4odm9pZCk7CiAKLWV4dGVybiBpbnQKK05FVFNOTVBfSU1QT1JUIGludAogbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldChjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogZG9tYWluLAogCQkJCWNvbnN0IGNoYXIqIHRhcmdldCk7CiAKQEAgLTI5LDcgKzI5LDcgQEAKIGV4dGVybiB2b2lkCiBuZXRzbm1wX2NsZWFyX2RlZmF1bHRfdGFyZ2V0KHZvaWQpOwogCi1leHRlcm4gdm9pZAorTkVUU05NUF9JTVBPUlQgdm9pZAogbmV0c25tcF9yZWdpc3Rlcl9zZXJ2aWNlX2hhbmRsZXJzKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKaW5kZXggY2U3NDJkNS4uNDE2Mjg5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKQEAgLTIsNiArMiwzMSBAQAogI2RlZmluZSBfU05NUF9UUkFOU1BPUlRfSAogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIHNvbGFyaXMyCisjZGVmaW5lIF9YUEc0XzIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQorI2RlZmluZSBfTElOVVhfU09VUkNFX0NPTVBBVAorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpZmRlZiBzb2xhcmlzMgorIyBpZm5kZWYgQ01TR19TUEFDRQorIyAgZGVmaW5lIENNU0dfU1BBQ0UobCkgXAorICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpX0NNU0dfSERSX0FMSUdOKHNpemVvZiAoc3RydWN0IGNtc2doZHIpICsgKGwpKSkKKyMgIGRlZmluZSBDTVNHX0xFTihsKSAgIChfQ01TR19IRFJfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyAobCkpCisjIGVuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NZU19TT0NLRVRfSCAqLworCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE2LDkgKzQxLDE0IEBACiAKIC8qICBTb21lIHRyYW5zcG9ydC10eXBlIGZsYWdzLiAgKi8KIAotI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0JMHgwMQotI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU4JMHgwMgotI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRAkweDA0CisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTQkgMHgwMQorI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU4JIDB4MDIKKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQJIDB4MDQKKyNkZWZpbmUgICAgICAgICBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RNU1RBVEUgICAweDA4ICAvKiBpbmRpY2F0ZXMgb3BhcXVlIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU00gdG1TdGF0ZVJlZmVyZW5jZSAqLworI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19FTVBUWV9QS1QgMHgxMAorI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQJIDB4MjAgIC8qIGZfb3BlbiBjYWxsZWQgKi8KKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfSE9TVE5BTUUJIDB4ODAgIC8qIGZvciBmbXRhZGRyIGhvb2sgKi8KIAogLyogIFRoZSBzdGFuZGFyZCBTTk1QIGRvbWFpbnMuICAqLwogCkBAIC0zMyw4ICs2Myw1MyBAQAogTkVUU05NUF9JTVBPUlQgc2l6ZV90ICAgbmV0c25tcEREUERvbWFpbl9sZW47CiBORVRTTk1QX0lNUE9SVCBzaXplX3QgICBuZXRzbm1wSVBYRG9tYWluX2xlbjsKIAorLyogU3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0cmFuc3BvcnQgc2VjdXJpdHkgbW9kZWwgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworLyogaXNtcy1zZWNzaGVsbC0xMSBzZWN0aW9uIDQuMSAqLworCisvKiBjb250ZW50cyBkb2N1bWVudGVkIGluIGRyYWZ0LWlldGYtaXNtcy10cmFuc3BvcnQtc2VjdXJpdHktbW9kZWwKKyAgIFNlY3Rpb24gMy4yICovCisvKiBub3RlOiBWQUNNIG9ubHkgYWxsb3dzIDw9IDMyIHNvIHRoaXMgaXMgb3ZlcmtpbGwgdGlsbCBhbm90aGVyIEFDTSBjb21lcyAqLworI2RlZmluZSBORVRTTk1QX1RNX01BWF9TRUNOQU1FIDI1NgorCit0eXBlZGVmIHVuaW9uIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZV91IHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgc2luOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisjZW5kaWYKK30gbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlOworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2FkZHJfcGFpcl9zIHsKKyAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSByZW1vdGVfYWRkcjsKKyAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworfSBuZXRzbm1wX2FkZHJfcGFpcjsKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcl9zIHsKKyAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSByZW1vdGVfYWRkcjsKKyAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworICAgIGludCBpZl9pbmRleDsKK30gbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcjsKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlX3MgeworICAgb2lkICAgIHRyYW5zcG9ydERvbWFpbltNQVhfT0lEX0xFTl07CisgICBzaXplX3QgdHJhbnNwb3J0RG9tYWluTGVuOworICAgY2hhciAgIHNlY3VyaXR5TmFtZVtORVRTTk1QX1RNX01BWF9TRUNOQU1FXTsKKyAgIHNpemVfdCBzZWN1cml0eU5hbWVMZW47CisgICBpbnQgICAgcmVxdWVzdGVkU2VjdXJpdHlMZXZlbDsKKyAgIGludCAgICB0cmFuc3BvcnRTZWN1cml0eUxldmVsOworICAgY2hhciAgIHNhbWVTZWN1cml0eTsKKyAgIGNoYXIgICBzZXNzaW9uSURbOF07CisgICAKKyAgIGNoYXIgICBoYXZlX2FkZHJlc3NlczsKKyAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgYWRkcmVzc2VzOworCisgICB2b2lkICpvdGhlclRyYW5zcG9ydE9wYXF1ZTsgLyogWFhYOiBNYXkgaGF2ZSBtZW0gbGVhayBpc3N1ZXMgKi8KK30gbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlOworCiAvKiAgU3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIHRyYW5zcG9ydC1pbmRlcGVuZGVudCBBUEkuICAqLwogCitzdHJ1Y3Qgc25tcF9zZXNzaW9uOworCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zIHsKICAgICAvKiAgVGhlIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0IGlkZW50aWZpZXIuICAqLwogCkBAIC02OCw2ICsxNDMsMTQgQEAKIAogICAgIHNpemVfdCAgICAgICAgICBtc2dNYXhTaXplOwogCisjaWZkZWYgRk9SX1NUQU5EQVJEU19DT01QTElBTkNFX09SX0ZVVFVSRV9VU0UKKyAgICAvKiBUTSBzdGF0ZSByZWZlcmVuY2UgcGVyIElTTVMgV0cgc29sdXRpb24gKi8KKyAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWY7CisjZW5kaWYKKworICAgIC8qIHR1bm5lbGVkIHRyYW5zcG9ydHMgKi8KKyAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqIGJhc2VfdHJhbnNwb3J0OworCiAgICAgLyogIENhbGxiYWNrcy4gIEFyZ3VtZW50cyBhcmU6CiAgICAgICoJCQogICAgICAqICAgICAgICAgICAgICAidGhpcyIgcG9pbnRlciwgZmQsIGJ1Ziwgc2l6ZSwgKm9wYXF1ZSwgKm9wYXF1ZV9sZW5ndGggIApAQCAtNzksMTQgKzE2MiwzNCBAQAogCQkJCSBpbnQsIHZvaWQgKiosIGludCAqKTsKICAgICBpbnQgICAgICAgICAgICAgKCpmX2Nsb3NlKSAgKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOwogCisgICAgLyogT3B0aW9uYWw6IG9wZW5pbmcgY2FuIG9jY3VyIGR1cmluZyBjcmVhdGlvbiBpZiBtb3JlIGFwcHJvcHJpYXRlICovCisgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqICgqZl9vcGVuKSAgIChzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKKwogICAgIC8qICBUaGlzIGNhbGxiYWNrIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBzdHJlYW0tb3JpZW50ZWQgdHJhbnNwb3J0cy4gICovCiAKICAgICBpbnQgICAgICAgICAgICAgKCpmX2FjY2VwdCkgKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOwogCiAgICAgLyogIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGZvcm1hdCBhIHRyYW5zcG9ydCBhZGRyZXNzLiAgKi8KIAotICAgIGNoYXIgICAgICAgICAgICooKmZfZm10YWRkcikoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwgdm9pZCAqLAotCQkJCSBpbnQpOworICAgIGNoYXIgICAgICAgICAgICooKmZfZm10YWRkcikoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwgdm9pZCAqLCBpbnQpOworCisgICAgLyogIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHN1cHBvcnQgZXh0cmEgY29uZmlndXJhdGlvbiB0b2tlbi92YWx1ZSBwYWlycyAqLworICAgIC8qICByZXR1cm4gbm9uLXplcm8gb24gZXJyb3IgKi8KKyAgICBpbnQgICAgICAgICAgICAoKmZfY29uZmlnKShzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKKworICAgIC8qICBPcHRpb25hbCBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBhZnRlciB0aGUgZmlyc3QgdHJhbnNwb3J0IGlzCisgICAgICAgIGNsb25lZCB0byB0aGUgc2Vjb25kICovCisgICAgaW50ICAgICAgICAgICAgKCpmX2NvcHkpKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOworCisgICAgLyogIFNldHVwIGluaXRpYWwgc2Vzc2lvbiBjb25maWcgaWYgc3BlY2lhbCB0aGluZ3MgYXJlIG5lZWRlZCAqLworICAgaW50ICAgICAgICAgICAgICgqZl9zZXR1cF9zZXNzaW9uKShzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICopOworICAKKyAgICAvKiBhbGxvY2F0ZWQgaG9zdCBuYW1lIGlkZW50aWZpZXI7IHVzZWQgYnkgY29uZmlndXJhdGlvbiBzeXN0ZW0KKyAgICAgICB0byBsb2FkIGxvY2FsaG9zdC5jb25mIGZvciBob3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1X2NoYXIgICAgICAgICAqaWRlbnRpZmllcjsgLyogdWRwOmxvY2FsaG9zdDoxNjEgLT4gImxvY2FsaG9zdCIgKi8KIH0gbmV0c25tcF90cmFuc3BvcnQ7CiAKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X2xpc3RfcyB7CkBAIC0xMTQsMTMgKzIxNywyMiBAQAogCiB9IG5ldHNubXBfdGRvbWFpbjsKIAordm9pZCBpbml0X3NubXBfdHJhbnNwb3J0KHZvaWQpOwogCiAvKiAgU29tZSB1dGlsaXR5IGZ1bmN0aW9ucy4gICovCiAKK2NoYXIgKm5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKworaW50IG5ldHNubXBfdHJhbnNwb3J0X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworaW50IG5ldHNubXBfdHJhbnNwb3J0X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworCiBpbnQgbmV0c25tcF90cmFuc3BvcnRfYWRkX3RvX2xpc3QobmV0c25tcF90cmFuc3BvcnRfbGlzdCAqKnRyYW5zcG9ydF9saXN0LAogCQkJCSAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCk7CiBpbnQgbmV0c25tcF90cmFuc3BvcnRfcmVtb3ZlX2Zyb21fbGlzdChuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICoqdHJhbnNwb3J0X2xpc3QsCiAJCQkJICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworaW50IG5ldHNubXBfc29ja2FkZHJfc2l6ZShzdHJ1Y3Qgc29ja2FkZHIgKnNhKTsKIAogCiAvKgpAQCAtMTMzLDYgKzI0NSw3IEBACiAKIC8qICBGcmVlIGFuIG5ldHNubXBfdHJhbnNwb3J0LiAgKi8KIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKG5ldHNubXBfdHJhbnNwb3J0ICp0KTsKIAogCkBAIC0xNDQsNiArMjU3LDcgQEAKICAqICpvdXRfbGVuLgogICovCiAKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgbmV0c25tcF90ZG9tYWluX3N1cHBvcnQoY29uc3Qgb2lkICppbl9vaWQsIHNpemVfdCBpbl9sZW4sCiAJCQkJCWNvbnN0IG9pZCAqKm91dF9vaWQsIHNpemVfdCAqb3V0X2xlbik7CiAKQEAgLTE1MSwzNSArMjY1LDUyIEBACiAgICAgCiBpbnQgICAgICAgICAgICAgbmV0c25tcF90ZG9tYWluX3VucmVnaXN0ZXIobmV0c25tcF90ZG9tYWluICpkb21haW4pOwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfY2xlYXJfdGRvbWFpbl9saXN0KHZvaWQpOwogCiB2b2lkICAgICAgICAgICAgbmV0c25tcF90ZG9tYWluX2luaXQodm9pZCk7CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydChjb25zdCBjaGFyICpzdHIsCiAJCQkJCSAgICAgaW50IGxvY2FsLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfZG9tYWluKTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwoY29uc3QgY2hhciAqYXBwbGljYXRpb24sCiAJCQkJCQkgIGNvbnN0IGNoYXIgKnN0ciwKIAkJCQkJCSAgaW50IGxvY2FsLAogCQkJCQkJICBjb25zdCBjaGFyICpkZWZhdWx0X2RvbWFpbiwKIAkJCQkJCSAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfb2lkKGNvbnN0IG9pZCAqIGRvbSwKIAkJCQkJCSBzaXplX3QgZG9tX2xlbiwKIAkJCQkJCSBjb25zdCB1X2NoYXIgKiBvLAogCQkJCQkJIHNpemVfdCBvX2xlbiwKIAkJCQkJCSBpbnQgbG9jYWwpOwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF90cmFuc3BvcnQqCiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX2NsaWVudChjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogc3RyKTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfdHJhbnNwb3J0KgogbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIoY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIHN0cik7CiAKIG5ldHNubXBfdHJhbnNwb3J0KgogbmV0c25tcF90cmFuc3BvcnRfb3Blbihjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogc3RyLCBpbnQgbG9jYWwpOwogCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfcyB7CisgICBjaGFyICprZXk7CisgICBjaGFyICp2YWx1ZTsKK30gbmV0c25tcF90cmFuc3BvcnRfY29uZmlnOworICAgIAorTkVUU05NUF9JTVBPUlQgICAgCitpbnQgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX2NvbXBhcmUobmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqcmlnaHQpOworTkVUU05NUF9JTVBPUlQKK25ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZyhjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oCmluZGV4IDAyODQ3MjcuLjFiNTYzZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaApAQCAtMTMsNyArMTMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZWNtb2Rfb3V0Z29pbmdfcGFyYW1zICopOwogICAgIGludCAgICAgICAgICAgICBrc21fcHJvY2Vzc19pbl9tc2coc3RydWN0IHNubXBfc2VjbW9kX2luY29taW5nX3BhcmFtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIGluaXRfdXNtKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBpbml0X2tzbSh2b2lkKTsKKworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9rc20odm9pZCk7CiAKICAgICAvKgogICAgICAqIFRoaXMgaXMgdGhlICJrZXkgdXNhZ2UiIHRoYXQgaXMgdXNlZCBieSB0aGUgbmV3IGNyeXB0byBBUEkuICBJdCdzIHVzZWQKQEAgLTI1LDYgKzI3LDggQEAKICNkZWZpbmUgS1NNX0tFWV9VU0FHRV9FTkNSWVBUSU9OCTEwMzAKICNkZWZpbmUgS1NNX0tFWV9VU0FHRV9DSEVDS1NVTQkJMTAzMQogCisjZGVmaW5lIEtTTV9TRUNfTU9ERUxfTlVNQkVSICAgICAgICAgICAgU05NUF9TRUNfTU9ERUxfS1NNCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRhOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogSGVhZGVyIGZpbGUgZm9yIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCBzdXBwb3J0CisgKi8KKworI2lmbmRlZiBTTk1QVFNNX0gKKyNkZWZpbmUgU05NUFRTTV9ICisKKyNkZWZpbmUgVFNNX1NFQ19NT0RFTF9OVU1CRVIgICAgICAgICAgICBTTk1QX1NFQ19NT0RFTF9UU00KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgaW50ICAgICAgICAgICAgIHRzbV9yZ2VuZXJhdGVfb3V0X21zZyhzdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2VjbW9kX291dGdvaW5nX3BhcmFtcyAqKTsKKyAgICBpbnQgICAgICAgICAgICAgdHNtX3Byb2Nlc3NfaW5fbXNnKHN0cnVjdCBzbm1wX3NlY21vZF9pbmNvbWluZ19wYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopOworICAgIHZvaWQgICAgICAgICAgICBpbml0X3RzbSh2b2lkKTsKKworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl90c20odm9pZCk7CisKKyAgICAjZGVmaW5lIE5FVFNOTVBfVE1fU0FNRV9TRUNVUklUWV9OT1RfUkVRVUlSRUQgMAorICAgICNkZWZpbmUgTkVUU05NUF9UTV9VU0VfU0FNRV9TRUNVUklUWSAgICAgICAgICAxCisKKyAgICAvKiBiYXNpY2FsbHkgd2Ugc3RvcmUgYWxtb3N0IG5vdGhpbmcgZWxzZSBidXQgYSB0bSByZWYgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlX3MgeworICAgICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZjsKKyAgICB9IG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2U7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUU01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKaW5kZXggNWQxNDMwMy4uOWQ2NzNjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTiAgICAgICAgMTIgICAgICAvKiBieXRlcyAqLwogI2RlZmluZSBVU01fTUFYX0FVVEhTSVpFICAgICAgICAgICAgICAgIFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTgogCi0jZGVmaW5lIFVTTV9TRUNfTU9ERUxfTlVNQkVSICAgICAgICAgICAgMworI2RlZmluZSBVU01fU0VDX01PREVMX05VTUJFUiAgICAgICAgICAgIFNOTVBfU0VDX01PREVMX1VTTQogCiAgICAgLyoKICAgICAgKiBTdHJ1Y3R1cmVzLgpAQCAtNzUsNiArNzUsNyBAQAogICAgICAgICB1X2NoYXIgICAgICAgICAqcHJpdktleTsKICAgICAgICAgc2l6ZV90ICAgICAgICAgIHByaXZLZXlMZW47CiAgICAgICAgIHVfY2hhciAgICAgICAgICp1c2VyUHVibGljU3RyaW5nOworICAgICAgICBzaXplX3QgICAgICAgICAgdXNlclB1YmxpY1N0cmluZ0xlbjsKICAgICAgICAgaW50ICAgICAgICAgICAgIHVzZXJTdGF0dXM7CiAgICAgICAgIGludCAgICAgICAgICAgICB1c2VyU3RvcmFnZVR5cGU7CiAgICAgICAgLyogdGhlc2UgYXJlIGFjdHVhbGx5IERIICogcG9pbnRlcnMgYnV0IG9ubHkgaWYgb3BlbnNzbCBpcyBhdmFpbC4gKi8KQEAgLTE3OSw2ICsxODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IHRpbWVfdWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycm9yKTsKIAorICAgIFNlY21vZFNlc3Npb25DYWxsYmFjayB1c21fb3Blbl9zZXNzaW9uOwogICAgIFNlY21vZE91dE1zZyAgICB1c21fc2VjbW9kX2dlbmVyYXRlX291dF9tc2c7CiAgICAgU2VjbW9kT3V0TXNnICAgIHVzbV9zZWNtb2RfZ2VuZXJhdGVfb3V0X21zZzsKICAgICBTZWNtb2RJbk1zZyAgICAgdXNtX3NlY21vZF9wcm9jZXNzX2luX21zZzsKQEAgLTE5OSw1MCArMjAxLDc5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqLCBuZXRzbm1wX3Nlc3Npb24gKiwgdV9jaGFyKTsKIAogICAgIGludCAgICAgICAgICAgICB1c21fY2hlY2tfc2VjTGV2ZWwoaW50IGxldmVsLCBzdHJ1Y3QgdXNtVXNlciAqdXNlcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2dldF91c2VyTGlzdCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fZ2V0X3VzZXIodV9jaGFyICogZW5naW5lSUQsIHNpemVfdCBlbmdpbmVJRExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUpOwogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fZ2V0X3VzZXJfZnJvbV9saXN0KHVfY2hhciAqIGVuZ2luZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbmdpbmVJRExlbiwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9kZWZhdWx0KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fYWRkX3VzZXIoc3RydWN0IHVzbVVzZXIgKnVzZXIpOwogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fYWRkX3VzZXJfdG9fbGlzdChzdHJ1Y3QgdXNtVXNlciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzbVVzZXIgKnVzZXJMaXN0KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fZnJlZV91c2VyKHN0cnVjdCB1c21Vc2VyICp1c2VyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fY3JlYXRlX3VzZXIodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2NyZWF0ZV9pbml0aWFsX3VzZXIoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogYXV0aFByb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXV0aFByb3RvY29sTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBwcml2UHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcml2UHJvdG9jb2xMZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9jbG9uZUZyb21fdXNlcihzdHJ1Y3QgdXNtVXNlciAqZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c21Vc2VyICp0byk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX3JlbW92ZV91c2VyKHN0cnVjdCB1c21Vc2VyICp1c2VyKTsKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX3JlbW92ZV91c2VyX2Zyb21fbGlzdChzdHJ1Y3QgdXNtVXNlciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNtVXNlciAqKnVzZXJMaXN0KTsKICAgICBjaGFyICAgICAgICAgICAqZ2V0X29iamlkKGNoYXIgKmxpbmUsIG9pZCAqKiBvcHRyLCBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9zYXZlX3VzZXJzKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICp0eXBlKTsKICAgICB2b2lkICAgICAgICAgICAgdXNtX3NhdmVfdXNlcnNfZnJvbV9saXN0KHN0cnVjdCB1c21Vc2VyICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlKTsKICAgICB2b2lkICAgICAgICAgICAgdXNtX3NhdmVfdXNlcihzdHJ1Y3QgdXNtVXNlciAqdXNlciwgY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBTTk1QQ2FsbGJhY2sgICAgdXNtX3N0b3JlX3VzZXJzOwotICAgIHN0cnVjdCB1c21Vc2VyICp1c21fcmVhZF91c2VyKGNoYXIgKmxpbmUpOworICAgIHN0cnVjdCB1c21Vc2VyICp1c21fcmVhZF91c2VyKGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9wYXJzZV9jb25maWdfdXNtVXNlcihjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUpOwogCiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9zZXRfcGFzc3dvcmQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9zZXRfdXNlcl9wYXNzd29yZChzdHJ1Y3QgdXNtVXNlciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKICAgICB2b2lkICAgICAgICAgICAgaW5pdF91c20odm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgaW5pdF91c21fY29uZihjb25zdCBjaGFyICphcHApOwogICAgIGludCAgICAgICAgICAgICBpbml0X3VzbV9wb3N0X2NvbmZpZyhpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKICAgICBpbnQgICAgICAgICAgICAgZGVpbml0X3VzbV9wb3N0X2NvbmZpZyhpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsIHZvaWQgKnNlcnZlcmFyZywKIAkJCQkJICAgdm9pZCAqY2xpZW50YXJnKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBjbGVhcl91c2VyX2xpc3Qodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fdXNtKHZvaWQpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uKTsKKyAgICBTZWNtb2RQb3N0RGlzY292ZXJ5IHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb25faG9vazsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB1c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIoY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IG9pZCAgICAgICpnZXRfZGVmYXVsdF9hdXRodHlwZShzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBvaWQgICAgICAqZ2V0X2RlZmF1bHRfcHJpdnR5cGUoc2l6ZV90ICopOworICAgIHZvaWQgICAgICAgICAgICBzbm1wdjNfYXV0aHR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKTsKKyAgICB2b2lkICAgICAgICAgICAgc25tcHYzX3ByaXZ0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCmluZGV4IGUyNDg0NDEuLmE5NTg4MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKQEAgLTksMjUgKzksMjQgQEAKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgTUFYX0VOR0lORUlEX0xFTkdUSCAxMjgKKyNkZWZpbmUgTUFYX0VOR0lORUlEX0xFTkdUSCAzMiAvKiBwZXIgU05NUC1GUkFNRVdPUkstTUlCIFNubXBFbmdpbmVJRCBUQyAqLwogCiAjZGVmaW5lIEVOR0lORUlEX1RZUEVfSVBWNCAgICAxCiAjZGVmaW5lIEVOR0lORUlEX1RZUEVfSVBWNiAgICAyCiAjZGVmaW5lIEVOR0lORUlEX1RZUEVfTUFDQUREUiAzCiAjZGVmaW5lIEVOR0lORUlEX1RZUEVfVEVYVCAgICA0CisjZGVmaW5lIEVOR0lORUlEX1RZUEVfRVhBQ1QgICA1CiAjZGVmaW5lIEVOR0lORUlEX1RZUEVfTkVUU05NUF9STkQgMTI4CiAKICNkZWZpbmUJREVGQVVMVF9OSUMgImV0aDAiCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzZXR1cF9lbmdpbmVJRCh1X2NoYXIgKiogZWlkcCwgY29uc3QgY2hhciAqdGV4dCk7CiAgICAgdm9pZCAgICAgICAgICAgIGVuZ2luZUlEX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cik7CiAgICAgdm9pZCAgICAgICAgICAgIGVuZ2luZUJvb3RzX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICBlbmdpbmVJRFR5cGVfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIGVuZ2luZUlETmljX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wdjNfYXV0aHR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcHYzX3ByaXZ0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cik7Ci0gICAgdm9pZCAgICAgICAgICAgIHVzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcihjb25zdCBjaGFyICp0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcHYzKGNvbnN0IGNoYXIgKik7CiAgICAgaW50ICAgICAgICAgICAgIGluaXRfc25tcHYzX3Bvc3RfY29uZmlnKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLApAQCAtMzksMTggKzM4LDIxIEBACiAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NubXB2Myhjb25zdCBjaGFyICp0eXBlKTsKICAgICBpbnQgICAgICAgICAgICAgc25tcHYzX3N0b3JlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfbG9uZyAgICAgICAgICBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZUJvb3RzKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBzbm1wdjNfY2xvbmVfZW5naW5lSUQodV9jaGFyICoqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc2l6ZV90ICAgICAgICAgIHNubXB2M19nZXRfZW5naW5lSUQodV9jaGFyICogYnVmLCBzaXplX3QgYnVmbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICpzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQoc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9sb25nICAgICAgICAgIHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgZ2V0X2RlZmF1bHRfc2VjTGV2ZWwodm9pZCk7Ci0gICAgY29uc3Qgb2lkICAgICAgKmdldF9kZWZhdWx0X2F1dGh0eXBlKHNpemVfdCAqKTsKLSAgICBjb25zdCBvaWQgICAgICAqZ2V0X2RlZmF1bHRfcHJpdnR5cGUoc2l6ZV90ICopOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wdjNfc2V0X2VuZ2luZUJvb3RzQW5kVGltZShpbnQgYm9vdHMsIGludCB0dGltZSk7CiAgICAgaW50ICAgICAgICAgICAgIGZyZWVfZW5naW5lSUQoaW50IG1ham9yaWQsIGludCBtaW5vcmlkLCB2b2lkICpzZXJ2ZXJhcmcsCiAJCQkJICB2b2lkICpjbGllbnRhcmcpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHBhcnNlX3NlY0xldmVsX2NvbmYoY29uc3QgY2hhciogd29yZCwgY2hhciAqY3B0cik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCmluZGV4IGYzMmM0M2YuLmFjNTA1MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKQEAgLTQ3LDE1ICs0NywxOSBAQAogICAgICAqIFJldHVybnM6IC0xIDogZm9yayBmYWlsZWQKICAgICAgKiAgICAgICAgICAgMCA6IE5vIGVycm9ycwogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfZGFlbW9uaXplKGludCBxdWl0X2ltbWVkaWF0ZWx5LCBpbnQgc3RkZXJyX2xvZyk7CiAKICAgICAvKgogICAgICAqIERlZmluaXRpb25zIGZvciB0aGUgc3lzdGVtIGRlcGVuZGVudCBsaWJyYXJ5IGZpbGUKKyAgICAgKgorICAgICAqIERvIG5vdCBkZWZpbmUgJ3N0cnVjdCBkaXJlY3QnIHdoZW4gTVNWQ19QRVJMIGlzIGRlZmluZWQgYmVjYXVzZSBhCisgICAgICogc3RydWN0dXJlIHdpdGggdGhhdCBuYW1lIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgUGVybCBoZWFkZXIKKyAgICAgKiBsaWJcQ09SRVxkaXJlbnQuaC4gRG8gbm90IGRlY2xhcmUgZ2V0dGltZW9mZGF5KCkgZWl0aGVyLgogICAgICAqLwogI2lmbmRlZiBNU1ZDX1BFUkwKLSNpZmRlZiBXSU4zMgogCi0jaWZuZGVmIEhBVkVfRElSRU5UX0ggLyogTWluZ0dXIGhhcyBkaXJlbnQuaCBidXQgYWxzbyBkZWZpbmVzIFdJTjMyICovCisjaWZuZGVmIEhBVkVfUkVBRERJUgogICAgIC8qCiAgICAgICogc3RydWN0dXJlIG9mIGEgZGlyZWN0b3J5IGVudHJ5IAogICAgICAqLwpAQCAtNzYsNDkgKzgwLDkwIEBACiAgICAgICAgIHN0cnVjdCBkaXJlY3QgICBkaXJzdHI7IC8qIERpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gcmV0dXJuICovCiAgICAgfSBESVI7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIERJUiAgICAgICAgICAgICpvcGVuZGlyKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCBkaXJlY3QgICpyZWFkZGlyKERJUiAqIGRpcnApOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGNsb3NlZGlyKERJUiAqIGRpcnApOwotI2VuZGlmIC8qIEhBVkVfRElSRU5UX0ggKi8KKyNlbmRpZiAvKiBIQVZFX1JFQURESVIgKi8KIAogI2lmbmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKICNlbmRpZgotI2lmbmRlZiBIQVZFX1NUUk5DQVNFQ01QCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNU1ZDX1BFUkwgKi8KKworLyoKKyAqIE5vdGU6IHdoZW4gY29tcGlsaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBlbmFibGVkIG9uIGEgc3lzdGVtIHdpdGhvdXQKKyAqIHN0cmNhc2VjbXAoKSBvciBzdHJuY2FzZWNtcCgpLCB0aGUgbWFjcm8gSEFWRV9TVFJOQ0FTRUNNUCBpcworICogbm90IGRlZmluZWQgYnV0IHN0cmNhc2VjbXAoKSBhbmQgc3RybmNhc2VjbXAoKSBhcmUgZGVmaW5lZCBhcyBtYWNyb3MgaW4KKyAqIDxkbWFsbG9jLmg+LiBJbiBvcmRlciB0byBwcmV2ZW50IGEgY29tcGlsYXRpb24gZXJyb3IsIGRvIG5vdCBkZWNsYXJlCisgKiBzdHJjYXNlY21wKCkgb3Igc3RybmNhc2VjbXAoKSB3aGVuIHRoZSA8ZG1hbGxvYy5oPiBoZWFkZXIgaGFzIGJlZW4gaW5jbHVkZWQuCisgKi8KKyNpZiAhZGVmaW5lZChIQVZFX1NUUk5DQVNFQ01QKSAmJiAhZGVmaW5lZChzdHJjYXNlY21wKQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKEhBVkVfU1RSTkNBU0VDTVApICYmICFkZWZpbmVkKHN0cm5jYXNlY21wKQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwogI2VuZGlmCiAKKyNpZmRlZiBXSU4zMgorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKndpbnNvY2tfc3RhcnR1cCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB3aW5zb2NrX2NsZWFudXAodm9pZCk7Ci0KICNkZWZpbmUgU09DS19TVEFSVFVQIHdpbnNvY2tfc3RhcnR1cCgpCiAjZGVmaW5lIFNPQ0tfQ0xFQU5VUCB3aW5zb2NrX2NsZWFudXAoKQotCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFXSU4zMiAqLwotCiAjZGVmaW5lIFNPQ0tfU1RBUlRVUAogI2RlZmluZSBTT0NLX0NMRUFOVVAKLQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiAqLwotI2VuZGlmCQkJCS8qIE1TVkNfUEVSTCAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4gICAgIC8qIEZvciBkZWZpbml0aW9uIG9mIGluX2FkZHJfdCAqLwogCisgICAgLyogU2ltcGx5IHJlc29sdmUgYSBob3N0bmFtZSBhbmQgcmV0dXJuIGZpcnN0IElQdjQgYWRkcmVzcy4KKyAgICAgKiBSZXR1cm5zIC0xIG9uIGVycm9yICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyX3QgKmFkZHJfb3V0KTsKKworICAgIC8qKiBuZXRzbm1wIHZlcnNpb25zIG9mIGRucyByZXNvbG91dGlvbi4uIG1heSBpbmNsdWRlIEROU1NFQyB2YWxpZGF0aW9uLiAqLworICAgIHN0cnVjdCBhZGRyaW5mbzsgLyogZm9yd2FyZCBkZWNsYXJlICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgaG9zdGVudCAqbmV0c25tcF9nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgaG9zdGVudCAqbmV0c25tcF9nZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFkZHIsIHNvY2tsZW5fdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpOworCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbl9hZGRyX3QgICAgICAgZ2V0X215YWRkcih2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGxvbmcgICAgICAgICAgICBnZXRfdXB0aW1lKHZvaWQpOwogCiAjaWZuZGVmIEhBVkVfU1RSRFVQCiAgICAgY2hhciAgICAgICAgICAgKnN0cmR1cChjb25zdCBjaGFyICopOwogI2VuZGlmCiAjaWZuZGVmIEhBVkVfU0VURU5WCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc2V0ZW52KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogI2VuZGlmCiAKLSAgICBpbnQgICAgICAgICAgICAgY2FsY3VsYXRlX3RpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICopOwotICAgIHVfaW50ICAgICAgICAgICBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRoZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGNhbGN1bGF0ZV90aW1lX2RpZmYoY29uc3Qgc3RydWN0IHRpbWV2YWwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHVfaW50ICAgICAgICAgICBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnRoZW4pOwogCiAjaWZuZGVmIEhBVkVfU1RSQ0FTRVNUUgogICAgIGNoYXIgICAgICAgICAgICpzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKQEAgLTEyOSwxNyArMTc0LDI0IEBACiAjaWZuZGVmIEhBVkVfU1RSVE9VTAogICAgIHVuc2lnbmVkIGxvbmcgICBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKICNlbmRpZgorI2lmbmRlZiBIQVZFX1NUUlRPVUxMCisgICAgTkVUU05NUF9JTVBPUlQgdWludDY0X3Qgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworI2VuZGlmCiAjaWZuZGVmIEhBVkVfU1RSVE9LX1IKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CiAjZW5kaWYKICNpZm5kZWYgSEFWRV9TTlBSSU5URgogICAgIGludCAgICAgICAgICAgICBzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwogI2VuZGlmCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBta2RpcmhpZXIoY29uc3QgY2hhciAqcGF0aG5hbWUsIG1vZGVfdCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNraXBsYXN0KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpuZXRzbm1wX21rdGVtcCh2b2lkKTsKICNpZm5kZWYgSEFWRV9TVFJMQ1BZCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzaXplX3QgICAgICAgICAgICBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogI2VuZGlmCiAjaWZuZGVmIEhBVkVfU1RSTENBVApAQCAtMTUxLDYgKzIwMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9zcG1yZWxwcmVmaXgpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29zX2tlcm5lbF93aWR0aCh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfc3RyX3RvX3VpZChjb25zdCBjaGFyICp1c2Vyb3J1aWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfc3RyX3RvX2dpZChjb25zdCBjaGFyICpncm91cG9yZ2lkKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgTkVUU05NUF9MSUJSQVJZX1RFU1RJTkdfSAorI2RlZmluZSBORVRTTk1QX0xJQlJBUllfVEVTVElOR19ICisKKy8qIFRoZXNlIGFyZSBtYWNyb3MgdXNlZCBmb3IgdGhlIG5ldC1zbm1wIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmU7IHNlZQorICAgdGhlICJ0ZXN0aW5nIiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciBkZXRhaWxzLiAqLworCitzdGF0aWMgaW50IF9fdGVzdF9jb3VudGVyID0gMDsKK3N0YXRpYyBpbnQgX19kaWRfcGxhbiA9IDA7CisKKyNkZWZpbmUgT0soaXNvaywgZGVzY3JpcHRpb24pIGRvIHsgcHJpbnRmKCIlcyAlZCAtICVzXG4iLCAoKGlzb2spID8gIm9rIiA6ICJub3Qgb2siKSwgKytfX3Rlc3RfY291bnRlciwgZGVzY3JpcHRpb24pOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIE9LRihpc29rLCBkZXNjcmlwdGlvbikgZG8geyBwcmludGYoIiVzICVkIC0gIiwgKChpc29rKSA/ICJvayIgOiAibm90IG9rIiksICsrX190ZXN0X2NvdW50ZXIpOyBwcmludGYgZGVzY3JpcHRpb247IHByaW50ZigiXG4iKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQTEFOKG51bWJlcikgZG8geyBwcmludGYoIjEuLiVkXG4iLCBudW1iZXIpOyBfX2RpZF9wbGFuID0gMTsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIE5FVFNOTVBfTElCUkFSWV9URVNUSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKaW5kZXggOTNlMDViMC4uMjYzNGIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKQEAgLTE5OSw2ICsxOTksNyBAQAogICAgICAqIFByb3RvdHlwZXMuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3JlYWxsb2ModV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbik7CiAKICAgICB2b2lkICAgICAgICAgICAgZnJlZV96ZXJvKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwpAQCAtMjA4LDYgKzIwOSwxNSBAQAogICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgKm5ldHNubXBfbWVtZHVwKGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3Qgc2l6ZSk7CiAKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jaGVja19kZWZpbmVkbmVzcyhjb25zdCB2b2lkICpwYWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHVfaW50ICAgICAgICAgICBuZXRzbm1wX2JpbmFyeV90b19oZXgodV9jaGFyICoqIGRlc3QsIHNpemVfdCAqZGVzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9pbnQgICAgICAgICAgIGJpbmFyeV90b19oZXgoY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB1dCk7CiAgICAgICAgICAgICAgICAgICAgIC8qIHByZWZlcnJlZCAqLwpAQCAtMjE1LDM5ICsyMjUsNTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGV4LCBjb25zdCBjaGFyICpkZWxpbSk7CiAgICAgICAgICAgICAgICAgICAgIC8qIGNhbGxzIG5ldHNubXBfaGV4X3RvX2JpbmFyeSB3L2RlbGltIG9mICIgIiAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfaGV4X3RvX2JpbmFyeSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhleCk7CiAgICAgICAgICAgICAgICAgICAgIC8qIGhhbmRsZXMgb2RkIGxlbmd0aHMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBoZXhfdG9fYmluYXJ5Mihjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB1dCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2RlY2ltYWxfdG9fYmluYXJ5KHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWNpbWFsKTsKICNkZWZpbmUgc25tcF9jc3RyY2F0KGIsbCxvLGEscykgc25tcF9zdHJjYXQoYixsLG8sYSwoY29uc3QgdV9jaGFyICopcykKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3N0cmNhdCh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogcyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqbmV0c25tcF9zdHJkdXBfYW5kX251bGwoY29uc3QgdV9jaGFyICogZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZyb21fbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGR1bXBfY2h1bmsoY29uc3QgY2hhciAqZGVidWd0b2tlbiwgY29uc3QgY2hhciAqdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogYnVmLCBpbnQgc2l6ZSk7CiAgICAgY2hhciAgICAgICAgICAgKmR1bXBfc25tcEVuZ2luZUlEKGNvbnN0IHVfY2hhciAqIGJ1Ziwgc2l6ZV90ICogYnVmbGVuKTsKIAorICAgIC8qKiBBIHBvaW50ZXIgdG8gYW4gb3BhcXVlIHRpbWUgbWFya2VyIHZhbHVlLiAqLwogICAgIHR5cGVkZWYgdm9pZCAgICptYXJrZXJfdDsKLSAgICBtYXJrZXJfdCAgICAgICAgYXRpbWVfbmV3TWFya2VyKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBhdGltZV9zZXRNYXJrZXIobWFya2VyX3QgcG0pOwotICAgIGxvbmcgICAgICAgICAgICBhdGltZV9kaWZmKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpOwotICAgIHVfbG9uZyAgICAgICAgICB1YXRpbWVfZGlmZihtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKTsgICAgICAgLyogMS8xMDAwdGggc2VjICovCi0gICAgdV9sb25nICAgICAgICAgIHVhdGltZV9oZGlmZihtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKTsgICAgICAvKiAxLzEwMHRoIHNlYyAqLwotICAgIGludCAgICAgICAgICAgICBhdGltZV9yZWFkeShtYXJrZXJfdCBwbSwgaW50IGRlbHRhVCk7Ci0gICAgaW50ICAgICAgICAgICAgIHVhdGltZV9yZWFkeShtYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhVCk7CisgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9tYXJrZXJfdDsKIAotICAgIGludCAgICAgICAgICAgICBtYXJrZXJfdHRpY2tzKG1hcmtlcl90IHBtKTsKLSAgICBpbnQgICAgICAgICAgICAgdGltZXZhbF90dGlja3Moc3RydWN0IHRpbWV2YWwgKnR2KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG1hcmtlcl90ICAgICAgICBhdGltZV9uZXdNYXJrZXIodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgYXRpbWVfc2V0TWFya2VyKG1hcmtlcl90IHBtKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soc3RydWN0IHRpbWV2YWwqIHR2KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKG1hcmtlcl90ICpwbSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBsb25nICAgICAgICAgICAgYXRpbWVfZGlmZihjb25zdF9tYXJrZXJfdCBmaXJzdCwgY29uc3RfbWFya2VyX3Qgc2Vjb25kKTsKKyAgICB1X2xvbmcgICAgICAgICAgdWF0aW1lX2RpZmYoY29uc3RfbWFya2VyX3QgZmlyc3QsIGNvbnN0X21hcmtlcl90IHNlY29uZCk7ICAgICAgIC8qIDEvMTAwMHRoIHNlYyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdV9sb25nICAgICAgICAgIHVhdGltZV9oZGlmZihjb25zdF9tYXJrZXJfdCBmaXJzdCwgY29uc3RfbWFya2VyX3Qgc2Vjb25kKTsgICAgICAvKiAxLzEwMHRoIHNlYyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGF0aW1lX3JlYWR5KGNvbnN0X21hcmtlcl90IHBtLCBpbnQgZGVsdGFfbXMpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKGNvbnN0X21hcmtlcl90IHBtLCBpbnQgZGVsdGFfbXMpOworICAgIGludCAgICAgICAgICAgICB1YXRpbWVfcmVhZHkoY29uc3RfbWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YV9tcyk7CisKKyAgICBpbnQgICAgICAgICAgICAgbWFya2VyX3R0aWNrcyhjb25zdF9tYXJrZXJfdCBwbSk7CisgICAgaW50ICAgICAgICAgICAgIHRpbWV2YWxfdHRpY2tzKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dik7CiAgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAgKm5ldHNubXBfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOwogICAgIE5FVFNOTVBfSU1QT1JUCkBAIC0yNTYsNiArMjg2LDkgQEAKIAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2FkZHJzdHJfaHRvbihjaGFyICpwdHIsIHNpemVfdCBsZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKGNvbnN0IGNoYXIgKnRpbWVfc3RyaW5nKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3NDI5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCkBAIC0wLDAgKzEsNzAgQEAKKyNpZm5kZWYgTkVUX1NOTVBfTElCUkFSWV9UWVBFU19ICisjZGVmaW5lIE5FVF9TTk1QX0xJQlJBUllfVFlQRVNfSAorCisjaWZuZGVmIE5FVF9TTk1QX0NPTkZJR19ICisjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gYmVmb3JlIHRoaXMgZmlsZSIKKyNlbmRpZgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfaW5kZXhfcyB7CisgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKKyAgICBvaWQgICAgICAgICAgICAqb2lkczsKK30gbmV0c25tcF9pbmRleDsKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF92b2lkX2FycmF5X3MgeworICAgIHNpemVfdCAgICAgICAgICBzaXplOworICAgIHZvaWQgICAgICAgICAgKiphcnJheTsKK30gbmV0c25tcF92b2lkX2FycmF5OworCisvKgorICogcmVmZXJlbmNlcyB0byB2YXJpb3VzIHR5cGVzCisgKi8KK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3ZvaWQgeworICAgIHZvaWQgICAgICAgICAgICp2YWw7Cit9IG5ldHNubXBfcmVmX3ZvaWQ7CisKK3R5cGVkZWYgdW5pb24geworICAgIHVfbG9uZyAgICAgICAgICB1bDsKKyAgICB1X2ludCAgICAgICAgICAgdWk7CisgICAgdV9zaG9ydCAgICAgICAgIHVzOworICAgIHVfY2hhciAgICAgICAgICB1YzsKKyAgICBsb25nICAgICAgICAgICAgc2w7CisgICAgaW50ICAgICAgICAgICAgIHNpOworICAgIHNob3J0ICAgICAgICAgICBzczsKKyAgICBjaGFyICAgICAgICAgICAgc2M7CisgICAgY2hhciAgICAgICAgICAgKmNwOworICAgIHZvaWQgICAgICAgICAgICp2cDsKK30gbmV0c25tcF9jdmFsdWU7CisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3NpemVfdF9zIHsKKyAgICBzaXplX3QgICAgICAgICAgdmFsOworfSAgICAgICAgICAgICAgKm5ldHNubXBfcmVmX3NpemVfdDsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzLCBzaW1pbGFyIHRvIGZkX3NldC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBob3dldmVyIGNhbiBob2xkIHNvLWNhbGxlZCBsYXJnZSBmaWxlIGRlc2NyaXB0b3JzCisgKiAoPj0gRkRfU0VUU0laRSBvciAxMDI0KSBvbiBVbml4IHN5c3RlbXMgb3IgbW9yZSB0aGFuIEZEX1NFVFNJWkUgKDY0KQorICogc29ja2V0cyBvbiBXaW5kb3dzIHN5c3RlbXMuCisgKgorICogSXQgaXMgc2FmZSB0byBhbGxvY2F0ZSB0aGlzIHN0cnVjdHVyZSBvbiB0aGUgc3RhY2suCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbXVzdCBiZSBpbml0aWFsaXplZCBieSBjYWxsaW5nIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoKQorICogYW5kIG11c3QgYmUgY2xlYW5lZCB1cCB2aWEgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgpLiBJZiB0aGlzIGxhc3QKKyAqIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgdGhpcyBtYXkgcmVzdWx0IGluIGEgbWVtb3J5IGxlYWsuCisgKgorICogVGhlIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlOgorICogbGZzX3NldHNpemU6IG1heGltdW0gc2V0IHNpemUuCisgKiBsc2Zfc2V0cHRyOiAgcG9pbnRzIHRvIGxmc19zZXQgaWYgbGZzX3NldHNpemUgPD0gRkRfU0VUU0laRSwgYW5kIG90aGVyd2lzZQorICogICAgICAgICAgICAgIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkuCisgKiBsZnNfc2V0OiAgICAgZmlsZSBkZXNjcmlwdG9yIC8gc29ja2V0IHNldCBkYXRhIGlmIGxmc19zZXRzaXplIDw9IEZEX1NFVFNJWkUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfbGFyZ2VfZmRfc2V0X3MgeworICAgIHVuc2lnbmVkICAgICAgICBsZnNfc2V0c2l6ZTsKKyAgICBmZF9zZXQgICAgICAgICAqbGZzX3NldHB0cjsKKyAgICBmZF9zZXQgICAgICAgICAgbGZzX3NldDsKK30gbmV0c25tcF9sYXJnZV9mZF9zZXQ7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TTk1QX0xJQlJBUllfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKaW5kZXggNzM5NzlkMy4uMzI5ZDQzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCkBAIC0xMywyMiArMTMsMzQgQEAKICAgICAgICAgLyoKICAgICAgICAgICogZnJvbSBzbm1wX2FwaS5oIAogICAgICAgICAgKi8KK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZHVtcF9wYWNrZXQoaW50KTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZHVtcF9wYWNrZXQodm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KGludCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X3F1aWNrX3ByaW50KHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9zdWZmaXhfb25seShpbnQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX2dldF9zdWZmaXhfb25seSh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZnVsbF9vYmppZChpbnQpOwogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2Z1bGxfb2JqaWQodm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X3JhbmRvbV9hY2Nlc3MoaW50KTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfcmFuZG9tX2FjY2Vzcyh2b2lkKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBmcm9tIHBhcnNlLmggCiAgICAgICAgICAqLworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfd2FybmluZ3MoaW50KTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX2Vycm9ycyhpbnQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyhpbnQpOwogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl9jb21tZW50X3Rlcm0oaW50KTsKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfcGFyc2VfbGFiZWwoaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCmluZGV4IGEzNGRjNjkuLmE1YmU2YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaApAQCAtMTI2LDEyICsxMjYsMTUgQEAKICAgICAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICpuZXh0OwogICAgIH07CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lWaWV3RW50cnkoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lBbGxWaWV3RW50cmllcyh2b2lkKTsKIAogI2RlZmluZSBWQUNNX01PREVfRklORCAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIFZBQ01fTU9ERV9JR05PUkVfTUFTSyAgICAgICAgIDEKICNkZWZpbmUgVkFDTV9NT0RFX0NIRUNLX1NVQlRSRUUgICAgICAgMgorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2YWNtX2dldFZpZXdFbnRyeShjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOwogICAgIC8qCkBAIC0xNDAsNiArMTQzLDcgQEAKICAgICAgKiBSZXR1cm5zIE5VTEwgaWYgdGhhdCBlbnRyeSBkb2VzIG5vdCBleGlzdC4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IHZhY21fY2hlY2tTdWJ0cmVlKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCk7CiAKICAgICAvKgpAQCAtMTU1LDYgKzE1OSw3IEBACiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dlZCBwb3J0aW9ucy4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZAogICAgICAgICAgICAgICAgICAgICB2YWNtX3NjYW5WaWV3SW5pdCh2b2lkKTsKICAgICAvKgpAQCAtMTY0LDYgKzE2OSw3IEBACiAgICAgICovCiAKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2YWNtX3NjYW5WaWV3TmV4dCh2b2lkKTsKICAgICAvKgogICAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IHZpZXdFbnRyeS4KQEAgLTE3NCw2ICsxODAsNyBAQAogICAgICAqIHZpZXdfc2NhbkluaXQoKSBzdGFydHMgdGhlIHNjYW4gb3Zlci4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2YWNtX2NyZWF0ZVZpZXdFbnRyeShjb25zdCBjaGFyICosIG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgICAvKgpAQCAtMTgyLDIyICsxODksMzQgQEAKICAgICAgKiBUaGUgc3RhdHVzIG9mIHRoaXMgZW50cnkgaXMgY3JlYXRlZCBhcyBpbnZhbGlkLgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95R3JvdXBFbnRyeShpbnQsIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95QWxsR3JvdXBFbnRyaWVzKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqdmFjbV9jcmVhdGVHcm91cEVudHJ5KGludCwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKnZhY21fZ2V0R3JvdXBFbnRyeShpbnQsIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9zY2FuR3JvdXBJbml0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqdmFjbV9zY2FuR3JvdXBOZXh0KHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95QWNjZXNzRW50cnkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lBbGxBY2Nlc3NFbnRyaWVzKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKnZhY21fY3JlYXRlQWNjZXNzRW50cnkoY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqdmFjbV9nZXRBY2Nlc3NFbnRyeShjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9zY2FuQWNjZXNzSW5pdCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICp2YWNtX3NjYW5BY2Nlc3NOZXh0KHZvaWQpOwogCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveVNlY3VyaXR5RW50cnkoY29uc3QgY2hhciAqKTsKQEAgLTIwNSw2ICsyMjQsNyBAQAogICAgIHN0cnVjdCB2YWNtX3NlY3VyaXR5RW50cnkgKnZhY21fZ2V0U2VjdXJpdHlFbnRyeShjb25zdCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3NjYW5TZWN1cml0eUluaXQodm9pZCk7CiAgICAgc3RydWN0IHZhY21fc2VjdXJpdHlFbnRyeSAqdmFjbV9zY2FuU2VjdXJpdHlFbnRyeSh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICB2YWNtX2lzX2NvbmZpZ3VyZWQodm9pZCk7CiAKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9zYXZlKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICp0eXBlKTsKQEAgLTIxNywxNiArMjM3LDIzIEBACiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fc2F2ZV9ncm91cChzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICpncm91cF9lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICp0eXBlKTsKIAotICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ192aWV3KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKLSAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX3ZpZXcoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2dyb3VwKGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MoY29uc3QgY2hhciAqdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzKGNvbnN0IGNoYXIgKnRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbmUpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3RvcmVfdmFjbShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKm5ldHNubXBfdmlld19nZXQoc3RydWN0IHZhY21fdmlld0VudHJ5ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2aWV3TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogdmlld1N1YnRyZWUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaAppbmRleCBjMWRkOTNmLi45MGZkNzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpZm5kZWYgV0lOUElQRV9ICiAjZGVmaW5lIFdJTlBJUEVfSAogCitORVRTTk1QX0lNUE9SVAogaW50IGNyZWF0ZV93aW5waXBlX3RyYW5zcG9ydChpbnQgKnBpcGVmZHMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oCmluZGV4IDFjNDc2M2EuLjc2MDgwZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaApAQCAtOTUsMTcgKzk1LDYgQEAKICAgVk9JRCBEaXNwbGF5RXJyb3IgKExQQ1RTVFIgcHN6VGl0bGUsIGludCBxdWl0ZSk7CiAKICAgLyoKLSAgICogVG8gdXBkYXRlIHdpbmRvd3Mgc2VydmljZSBzdGF0dXMgdG8gU0NNIAotICAgKi8KLSAgc3RhdGljIEJPT0wgVXBkYXRlU2VydmljZVN0YXR1cyAoRFdPUkQgZHdTdGF0dXMsIERXT1JEIGR3RXJyb3JDb2RlLAotCQkJCSAgIERXT1JEIGR3V2FpdEhpbnQpOwotCi0gIC8qCi0gICAqIFRvIFJlcG9ydCBjdXJyZW50IHNlcnZpY2Ugc3RhdHVzIHRvIFNDTSAKLSAgICovCi0gIHN0YXRpYyBCT09MIFJlcG9ydEN1cnJlbnRTZXJ2aWNlU3RhdHVzIChWT0lEKTsKLQotICAvKgogICAgKiBTZXJ2aWNlIE1haW4gZnVuY3Rpb24sICBXaGljaCB3aWxsIHNwYXduIGEgdGhyZWFkLCBhbmQgY2FsbHMgdGhlCiAgICAqIFNlcnZpY2UgcnVuIHBhcnQKICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCmluZGV4IDA5ZmY1ZjUuLjNiNTRlODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCkBAIC03LDE4ICs3LDEwMSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyogSW5pdGlhbGlzYXRpb24gYW5kIFNodXRkb3duICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgYWRkX21pYmRpcihjb25zdCBjaGFyICopOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9pbml0X21pYih2b2lkKTsKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBpbml0X21pYih2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBpbml0X21pYl9pbnRlcm5hbHModm9pZCk7CisjZW5kaWYKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9taWIodm9pZCk7CisKKyAgICAgLyogUmVhZGluZyBhbmQgUGFyc2luZyBNSUJzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgdHJlZSAgICAqbmV0c25tcF9yZWFkX21vZHVsZShjb25zdCBjaGFyICopOworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IHRyZWUgICAgKnJlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IHRyZWUgICAgKnJlYWRfbWliKGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9hbGxfbWlicyh2b2lkKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOworCisgICAgICAgICAvKiBmcm9tIHVjZC1jb21wYXQuaCAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl93YXJuaW5ncyhpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl9lcnJvcnMoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyhpbnQpOworCisKKyAgICAgLyogU2VhcmNoaW5nIHRoZSBNSUIgVHJlZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHJlYWRfb2JqaWQoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgb2lkICAgICAgICAgICAgKnNubXBfcGFyc2Vfb2lkKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBnZXRfbW9kdWxlX25vZGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CisKKyAgICAgLyogT3V0cHV0ICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcHJpbnRfbWliKEZJTEUgKiBmcCk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBwcmludF9vYmppZChjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgIGZwcmludF9vYmppZChGSUxFICogZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICBzbnByaW50X29iamlkKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcHJpbnRfZGVzY3JpcHRpb24ob2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgIGZwcmludF9kZXNjcmlwdGlvbihGSUxFICogZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgIHNucHJpbnRfZGVzY3JpcHRpb24oY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwogICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgogICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L21pYl9hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgICAgICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3BhcnNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgppbmRleCAzYzVkN2MyLi4xZGIwMjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KQEAgLTEsNiArMSwxMCBAQAotLyogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8KKy8qIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCiAvKiAKICAqIG5ldC1zbm1wIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBOT1RFOiBETyBOT1QgRURJVCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGFzIHlvdXIgY2hhbmdlcworICogICAgICAgd2lsbCBiZSBvdmVyd3JpdHRlbi4gVGhpcyBjb250ZW50IGlzIGluIGFjY29uZmlnLmggYW5kIG1lcmdlZAorICogICAgICAgaW50byBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGJ5IGF1dG9oZWFkZXIuCiAgKi8KIC8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQogICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKQEAgLTI0LDI0NiArMjgsMjkgQEAKICAqLwogI2lmbmRlZiBORVRTTk1QX05PX0FVVE9DT05GX0RFRklOSVRJT05TCiAKLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludDMyX3QgKi8KLSN1bmRlZiBIQVZFX0lOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdWludDMyX3QgKi8KLSN1bmRlZiBIQVZFX1VJTlQzMl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVfaW50MzJfdCAqLwotI3VuZGVmIEhBVkVfVV9JTlQzMl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludDY0X3QgKi8KLSN1bmRlZiBIQVZFX0lOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdWludDY0X3QgKi8KLSN1bmRlZiBIQVZFX1VJTlQ2NF9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVfaW50NjRfdCAqLwotI3VuZGVmIEhBVkVfVV9JTlQ2NF9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGludHB0cl90ICovCi0jdW5kZWYgSEFWRV9JTlRQVFJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50cHRyX3QgKi8KLSN1bmRlZiBIQVZFX1VJTlRQVFJfVAotCi0vKiBnb3Qgc29ja2xlbl90PyAqLwotI3VuZGVmIEhBVkVfU09DS0xFTl9UCi0KLS8qIGdvdCBpbl9hZGRyX3Q/ICovCi0jdW5kZWYgSEFWRV9JTl9BRERSX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGRldnMoKSAqLwotI3VuZGVmIEhBVkVfR0VUREVWUwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZGV2c3RhdF9nZXRkZXZzKCkgKi8KLSN1bmRlZiBIQVZFX0RFVlNUQVRfR0VUREVWUwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgPG5ldGluZXQvaW5fcGNiLmg+ICovCi0jdW5kZWYgSEFWRV9ORVRJTkVUX0lOX1BDQl9ICi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSA8c3lzL2Rpc2tsYWJlbC5oPiAqLwotI3VuZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICi0KLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIChwcm9jZXNzb3IpIGRlZmluZXMgX19GVU5DVElPTl9fIGZvciB5b3UgKi8KLSN1bmRlZiBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVECi0KLS8qIG9uIGFpeCwgaWYgeW91IGhhdmUgcGVyZnN0YXQgKi8KLSN1bmRlZiBIQVZFX1BFUkZTVEFUCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBsaWJkYiwgbGlibm0gb3IgbGlicnBtLCByZXNwZWN0aXZlbHkgKi8KLSN1bmRlZiBIQVZFX0xJQkRCCi0jdW5kZWYgSEFWRV9MSUJOTQotI3VuZGVmIEhBVkVfTElCUlBNCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBwa2dpbmZvICovCi0jdW5kZWYgSEFWRV9QS0dJTkZPCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBnZXRob3N0YnluYW1lICovCi0jdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcGVybF9ldmFsX3B2KCkgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9MQwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdGhlIFBlcmxfZXZhbF9wdigpIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFZfVUMKLQotLyogcHJpbnRpbmcgc3lzdGVtICovCi0jdW5kZWYgSEFWRV9MUFNUQVQKLSN1bmRlZiBMUFNUQVRfUEFUSAotI3VuZGVmIEhBVkVfUFJJTlRDQVAKLS8qIFVzZSBkbWFsbG9jIHRvIGRvIG1hbGxvYyBkZWJ1Z2dpbmc/ICovCi0jdW5kZWYgSEFWRV9ETUFMTE9DX0gKLQotLyogbG9jYXRpb24gb2YgVU5JWCBrZXJuZWwgKi8KLSNkZWZpbmUgS0VSTkVMX0xPQyAiL3ZtdW5peCIKLQotLyogbG9jYXRpb24gb2YgbW91bnQgdGFibGUgbGlzdCAqLwotI2RlZmluZSBFVENfTU5UVEFCICIvZXRjL21udHRhYiIKLQotLyogbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UgKG9rIGlmIG5vdCBmb3VuZCkgKi8KLSN1bmRlZiBETUVNX0xPQwotCi0vKiBDb21tYW5kIHRvIGdlbmVyYXRlIHBzIG91dHB1dCwgdGhlIGZpbmFsIGNvbHVtbiBtdXN0IGJlIHRoZSBwcm9jZXNzCi0gICBuYW1lIHdpdGhPVVQgYXJndW1lbnRzICovCi0jZGVmaW5lIFBTQ01EICIvYmluL3BzIgotCi0vKiBXaGVyZSBpcyB0aGUgdW5hbWUgY29tbWFuZCAqLwotI2RlZmluZSBVTkFNRVBST0cgIi9iaW4vdW5hbWUiCi0KLS8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIGxpbnV4IGFuZCAvcHJvYy9uZXQvZGV2IGhhcyB0aGUgY29tcHJlc3NlZAotICAgZmllbGQsIHdoaWNoIGV4aXN0cyBpbiBsaW51eCBrZXJuZWxzIDIuMiBhbmQgZ3JlYXRlci4gKi8KLSN1bmRlZiBQUk9DX05FVF9ERVZfSEFTX0NPTVBSRVNTRUQKLQotLyogZGVmaW5lIHJ0ZW50cnkgdG8gb3J0ZW50cnkgb24gU1lTViBtYWNoaW5lcyAoYWxwaGFzKSAqLwotI3VuZGVmIFJURU5UUlkKLQotLyogVXNlIEJTRCA0LjQgcm91dGluZyB0YWJsZSBlbnRyaWVzPyAqLwotI3VuZGVmIFJURU5UUllfNF80Ci0KLS8qIERvZXMgc3RydWN0IHNpZ2FjdGlvbiBoYXZlIGEgc2Ffc2lnYWN0aW9uIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TSUdBQ1RJT05fSEFTX1NBX1NJR0FDVElPTgotCi0vKiBEb2VzIHN0cnVjdCB0bSBoYXZlIGEgdG1fZ210b2ZmIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9UTV9IQVNfVE1fR01UT0ZGRgotCi0vKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfbGVuIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfTEVOCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9mYW1pbHkyIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaGF2ZSBhIHNzX2ZhbWlseSBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaGF2ZSBhIF9fc3NfZmFtaWx5IGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19fX1NTX0ZBTUlMWQotCi0vKiBEb2VzIHN0cnVjdCBpbjZfYWRkciBoYXZlIGEgczZfdW4uc2E2X2xhZGQgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX0lONl9BRERSX0hBU19TNl9VTl9TQTZfTEFERFIKLQotLyogcnRlbnRyeSBzdHJ1Y3R1cmUgdGVzdHMgKi8KLSN1bmRlZiBSVEVOVFJZX1JUX05FWFQKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVVNFCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1JFRkNOVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNICi0KLS8qIGlmbmV0IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFX0lGU19WQUxVRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfU1BFRUQKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lRRFJPUFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX05TRUMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX05PUFJPVE8KLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PQllURVMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lCWVRFUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QKLQotLyogdGNwc3RhdC50Y3BzX3Jjdm1lbWRyb3AgKi8KLSN1bmRlZiBTVFJVQ1RfVENQU1RBVF9IQVNfVENQU19SQ1ZNRU1EUk9QCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRElTQ0FSRAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVEJDQVNUCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRlVMTFNPQ0sKLQotLyogYXJwaGQuYXRfbmV4dCAqLwotI3VuZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAotCi0vKiBpZmFkZHIuaWZhX25leHQgKi8KLSN1bmRlZiBTVFJVQ1RfSUZBRERSX0hBU19JRkFfTkVYVAotCi0vKiBpZm5ldC5pZl9tdHUgKi8KLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX01UVQotCi0vKiBzd2RldnQuc3dfbmJsa3NlbmFibGVkICovCi0jdW5kZWYgU1RSVUNUX1NXREVWVF9IQVNfU1dfTkJMS1NFTkFCTEVECi0KLS8qIG5saXN0Lm5fdmFsdWUgKi8KLSN1bmRlZiBTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUKLQotLyogbmxpc3Q2NC5uX3ZhbHVlICovCi0jdW5kZWYgU1RSVUNUX05MSVNUNjRfSEFTX05fVkFMVUUKLQotLyogaXBzdGF0IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URk9SV0FSRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URlJBRwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19ERUxJVkVSRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR0RST1BQRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR1RJTUVPVVQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTE9DQUxPVVQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9QUk9UTwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1JPVVRFCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09EUk9QUEVECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09GUkFHTUVOVFMKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfUkVBU1NFTUJMRUQKLQotLyogdmZzc3RhdC5mX2Zyc2l6ZSAqLwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQotCi0vKiB2ZnNzdGF0LmZfZmlsZXMgKi8KLSN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUwotCi0vKiBzdGF0ZnMgaW5vZGUgc3RydWN0dXJlIHRlc3RzKi8KLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GRlJFRQotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkFWQUlMCi0KLS8qIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgKi8KLSN1bmRlZiBTVFJVQ1RfREVTX0tTX1NUUlVDVF9IQVNfV0VBS19LRVkKLQotLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWQgKi8KLSN1bmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLQotLyogc3lzY3RsIHdvcmtzIHRvIGdldCBib290dGltZSwgZXRjLi4uICovCi0jdW5kZWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTAotCi0vKiBkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oICovCi0jdW5kZWYgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSCi0KLS8qIERlZmluZSBpZiBzdGF0ZnMgdGFrZXMgMiBhcmdzIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGhhcwotICAgdHlwZSBzdHJ1Y3QgZnNfZGF0YS4gW1VsdHJpeF0gKi8KLSN1bmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCi0KLS8qIERlZmluZSBpZiB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBpbiA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSAgIGRlcGVuZCBvbiB0aGUgaW50ZWdlciB2YXJpYWJsZSBgaHonLiAgW0ZyZWVCU0QgNC54XSAqLwotI3VuZGVmIFRDUFRWX05FRURTX0haCi0KLS8qIE5vdC10by1iZS1jb21waWxlZCBtYWNyb3MgZm9yIHVzZSBieSBjb25maWd1cmUgb25seSAqLwotI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KQotI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KQotI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSkKLSNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopCi0jZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpCi0jZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpCi0jZGVmaW5lIGNvbmZpZ19lcnJvcih4KQotI2RlZmluZSBjb25maWdfd2FybmluZyh4KQotICAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAobWluZ3czMikgfHwgZGVmaW5lZCAoY3lnd2luKQotI2RlZmluZSBFTlZfU0VQQVJBVE9SICI7IgotI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzsnCi0jZWxzZQotI2RlZmluZSBFTlZfU0VQQVJBVE9SICI6IgotI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzonCi0jZW5kaWYKLQogLyogZGVmaW5pdGlvbnMgYWRkZWQgYnkgY29uZmlndXJlIG9uLXRoZS1mbHkgKi8KIAorI2RlZmluZSBjb25maWdfYmVsb25nc19pbih4KQorCisjZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCisKKyNkZWZpbmUgY29uZmlnX2FyY2hfcmVxdWlyZSh4LHkpCisKKyNkZWZpbmUgY29uZmlnX3ZlcnNpb25fcmVxdWlyZSh4KQorCisjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCisKKyNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKKworI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKKworI2RlZmluZSBjb25maWdfZXJyb3IoeCkKKworI2RlZmluZSBjb25maWdfd2FybmluZyh4KQorCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisjdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisKIC8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKICAgIHN5c3RlbXMuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLgogICAgKi8KQEAgLTI3Miw2ICs1OSwyMSBAQAogLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgYGFsbG9jYS5jJy4gKi8KICN1bmRlZiBDX0FMTE9DQQogCisvKiBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSAqLworI3VuZGVmIERNRU1fTE9DCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBzdXBwb3J0ICovCisjdW5kZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKworLyogRW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXMuICovCisjdW5kZWYgRU5WX1NFUEFSQVRPUgorCisvKiBFbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3Rlcy4gKi8KKyN1bmRlZiBFTlZfU0VQQVJBVE9SX0NIQVIKKworLyogbG9jYXRpb24gb2YgbW91bnQgdGFibGUgbGlzdCAqLworI3VuZGVmIEVUQ19NTlRUQUIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBBRVNfY2ZiMTI4X2VuY3J5cHQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUCiAKQEAgLTI5MSw4ICs5Myw4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFzbS90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0FTTV9UWVBFU19ICiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmNvcHknIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfQkNPUFkKKy8qIERlZmluZSBpZiB1c2luZyBNWV9JTklUKCkgY2F1c2VzIGEgbGlua2VyIGVycm9yICovCisjdW5kZWYgSEFWRV9CUk9LRU5fTElCTVlTUUxDTElFTlQKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjZ2V0bmV4dCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9DR0VUTkVYVApAQCAtMzAwLDkgKzEwMiwyOCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9DSE9XTgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrX2dldHRpbWUnIGxpYnJhcnkgKi8KKyN1bmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9zZWRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9TRURJUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNvbV9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9DT01fRVJSX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYENvdW50ZXI2NCcuICovCiAjdW5kZWYgSEFWRV9DT1VOVEVSNjQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzZW5zb3JzX2dldF9hbGxfc3ViZmVhdHVyZXMnLAorICAgYW5kIHRvIDAgaWYgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9TRU5TT1JTX0dFVF9BTExfU1VCRkVBVFVSRVMKKworLyogZGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgSVJFX0NBQ0hFIGRlZmluZWQgaW4gPGluZXQvaXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ERUZJTkVEX0lSRV9DQUNIRQorCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgZGV2c3RhdF9nZXRkZXZzKCkgKi8KKyN1bmRlZiBIQVZFX0RFVlNUQVRfR0VUREVWUworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCiAgICAqLwogI3VuZGVmIEhBVkVfRElSRU5UX0gKQEAgLTMxMyw5ICsxMzQsMTggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGxvcGVuJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0RMT1BFTgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETUFMTE9DX0gKKworLyogU2V0IGlmIHRoZSBkcGtnLXF1ZXJ5IGNvbW1hbmQgaXMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9EUEtHX1FVRVJZCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRVJSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxldC9jb21fZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRVRfQ09NX0VSUl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXZhbF9wdicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9FVkFMX1BWCiAKQEAgLTMyNSwyNCArMTU1LDQyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9NRF9DVFhfZGVzdHJveScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9FVlBfTURfQ1RYX0RFU1RST1kKIAorLyogRGVmaW5lIGlmIHlvdSBoYXZlIEVWUF9zaGEyMjQvMjU2IGluIG9wZW5zc2wgKi8KKyN1bmRlZiBIQVZFX0VWUF9TSEEyMjQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIEVWUF9zaGEzODQvMjU2IGluIG9wZW5zc2wgKi8KKyN1bmRlZiBIQVZFX0VWUF9TSEEzODQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBleGVjdicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9FWEVDVgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRkNOVExfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZnZXRjX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZHRVRDX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvY2tmaWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZMT0NLRklMRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRk9SSwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZzdGFiLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRlNUQUJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1bmxvY2tmaWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZVTkxPQ0tGSUxFCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2FpX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dBSV9TVFJFUlJPUgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGFkZHJpbmZvJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBnZXRkZXZzKCkgKi8KKyN1bmRlZiBIQVZFX0dFVERFVlMKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRkdGFibGVzaXplJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVERUQUJMRVNJWkUKIApAQCAtMzUyLDYgKzIwMCwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRncm5hbScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRHUk5BTQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieW5hbWUyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUyCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUUKIApAQCAtMzY0LDYgKzIyMSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG1udGVudCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRNTlRFTlQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRvcHQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfR0VUT1BUX0gKIApAQCAtMzc5LDYgKzIzOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR2ZnNzdGF0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFZGU1NUQVQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxncnAuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9HUlBfSAogCkBAIC0zODgsMjkgKzI1MSwzMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9mcmVlbmFtZWluZGV4JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0lGX0ZSRUVOQU1FSU5ERVgKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9pbmRleHRvbmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JRl9JTkRFWFRPTkFNRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9JRl9OQU1FSU5ERVgKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1ldG9pbmRleCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZGV4JyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0lOREVYCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGluZXQvY29tbW9uLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5FVF9DT01NT05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGluZXQvaXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTkVUX0lQX0gKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbmV0L21pYjIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JTkVUX01JQjJfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MTZfdCcuICovCi0jdW5kZWYgSEFWRV9JTlQxNl9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZXRfbnRvcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX05UT1AKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDMyX3QnLiAqLwotI3VuZGVmIEhBVkVfSU5UMzJfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9QVE9OCiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQ2NF90Jy4gKi8KLSN1bmRlZiBIQVZFX0lOVDY0X1QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDhfdCcuICovCi0jdW5kZWYgSEFWRV9JTlQ4X1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5pdGdyb3VwcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTklUR1JPVVBTCiAKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnRtYXhfdCcuICovCiAjdW5kZWYgSEFWRV9JTlRNQVhfVApAQCAtNDIxLDIxICsyODcsNDIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JTlRUWVBFU19ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbl9hZGRyX3QnLiAqLworI3VuZGVmIEhBVkVfSU5fQUREUl9UCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW9jdGxzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU9DVExTX0gKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0lPX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpcGhscGFwaS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lQSExQQVBJX0gKKworLyogU2V0IGlmIElQX1BLVElORk8gaXMgdXNhYmxlICovCisjdW5kZWYgSEFWRV9JUF9QS1RJTkZPCisKKy8qIFNldCBpZiBJUF9SRUNWRFNUQUREUiBpcyB1c2FibGUgKi8KKyN1bmRlZiBIQVZFX0lQX1JFQ1ZEU1RBRERSCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga2luZm9fZ2V0X2NwdXMnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfS0lORk9fR0VUX0NQVVMKIAorLyogRGVmaW5lIGlmIHlvdSBoYXZlIC9kZXYva21lbSAqLworI3VuZGVmIEhBVkVfS01FTQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtubGlzdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9LTkxJU1QKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfS1JCNV9BVVRIX0NPTl9HRVRTRU5EU1VCS0VZCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8a3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9LU1RBVF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHByb2MyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0tWTV9HRVRQUk9DMgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRwcm9jcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9LVk1fR0VUUFJPQ1MKIApAQCAtNDQ4LDMwICszMzUsMjQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX29wZW5maWxlcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9LVk1fT1BFTkZJTEVTCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJ5ICgtbGNyeXB0byBvciAtbGVheTMyKS4gKi8KICN1bmRlZiBIQVZFX0xJQkNSWVBUTwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KLSN1bmRlZiBIQVZFX0xJQkRMCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZWZlbmNlJyBsaWJyYXJ5ICgtbGVmZW5jZSkuICovCi0jdW5kZWYgSEFWRV9MSUJFRkVOQ0UKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlbGYnIGxpYnJhcnkgKC1sZWxmKS4gKi8KICN1bmRlZiBIQVZFX0xJQkVMRgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtzdGF0JyBsaWJyYXJ5ICgtbGtzdGF0KS4gKi8KICN1bmRlZiBIQVZFX0xJQktTVEFUCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtJyBsaWJyYXJ5ICgtbGt2bSkuICovCi0jdW5kZWYgSEFWRV9MSUJLVk0KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtJyBsaWJyYXJ5ICgtbG0pLiAqLwotI3VuZGVmIEhBVkVfTElCTQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1sZCcgbGlicmFyeSAoLWxtbGQpLiAqLwogI3VuZGVmIEhBVkVfTElCTUxECiAKKy8qIERlZmluZSB0byAxIGlmIDxuZXRsaW5rL25ldGxpbmsuaD4gcHJvdmlkZXMgdGhlIGxpYm5sMyBBUEkgKi8KKyN1bmRlZiBIQVZFX0xJQk5MMworCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgbGlibm0gKi8KKyN1bmRlZiBIQVZFX0xJQk5NCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNsJyBsaWJyYXJ5ICgtbG5zbCkuICovCiAjdW5kZWYgSEFWRV9MSUJOU0wKIApAQCAtNDgxLDEyICszNjIsMzMgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGtjczExJyBsaWJyYXJ5ICgtbHBrY3MxMSkuICovCiAjdW5kZWYgSEFWRV9MSUJQS0NTMTEKIAorLyogZGVmaW5lIGlmIHlvdSBoYXZlIEJTRCBwa2ctbmcgKi8KKyN1bmRlZiBIQVZFX0xJQlBLRworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB0aHJlYWQnIGxpYnJhcnkgKC1scHRocmVhZCkuICovCisjdW5kZWYgSEFWRV9MSUJQVEhSRUFECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcnBtJyBsaWJyYXJ5ICgtbHJwbSkuICovCisjdW5kZWYgSEFWRV9MSUJSUE0KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSU0FnbHVlJyBsaWJyYXJ5ICgtbFJTQWdsdWUpLiAqLwogI3VuZGVmIEhBVkVfTElCUlNBR0xVRQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJzYXJlZicgbGlicmFyeSAoLWxyc2FyZWYpLiAqLwogI3VuZGVmIEhBVkVfTElCUlNBUkVGCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3JlcycgbGlicmFyeSAoLWxzcmVzKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNSRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2gyJyBsaWJyYXJ5ICgtbHNzaDIpLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLworI3VuZGVmIEhBVkVfTElCU1NMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgYHNzbCcgbGlicmFyeSBzdXBwb3J0cyBEVExTICgtbHNzbCkuICovCisjdW5kZWYgSEFWRV9MSUJTU0xfRFRMUworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTUlUU19ICiAKQEAgLTQ5Niw2ICszOTgsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvaGRyZWcuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSU5VWF9IRFJFR19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbmV0bGluay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX05FVExJTktfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3J0bmV0bGluay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdGFza3MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSU5VWF9UQVNLU19ICiAKQEAgLTUwNSw2ICs0MTMsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvbmcgbG9uZyBpbnQnLiAqLworI3VuZGVmIEhBVkVfTE9OR19MT05HX0lOVAorCisvKiBTZXQgaWYgdGhlIGxwc3RhdCBjb21tYW5kIGlzIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfTFBTVEFUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHJhbmQ0OCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MUkFORDQ4CiAKQEAgLTUyMywxNSArNDM3LDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX01BTExPQ19ICiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX01FTUNQWQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfTUVNTU9WRQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX01FTU9SWV9ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBtaWIyX2lwSWZTdGF0c0VudHJ5X3QnLiAqLworI3VuZGVmIEhBVkVfTUlCMl9JUElGU1RBVFNFTlRSWV9UCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtzdGVtcCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9NS1NURU1QCiAKQEAgLTU0NCw2ICs0NTUsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtdGFiLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTVRBQl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmJ1dGlsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkJVVElMX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gKi8KICN1bmRlZiBIQVZFX05ESVJfSAogCkBAIC01NzQsNiArNDg4LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldDYvdGNwNl92YXIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJTkVUNl9UQ1A2X1ZBUl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pY21wNi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSUNNUDZfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWNtcF92YXIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lDTVBfVkFSX0gKIApAQCAtNTgzLDYgKzUwMCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luX3BjYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSU5fUENCX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luX3N5c3RtLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICiAKQEAgLTYyNSw2ICs1NDUsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpcHgvaXB4Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUSVBYX0lQWF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0bGluay9uZXRsaW5rLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUTElOS19ORVRMSU5LX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWZfYXJwLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUX0lGX0FSUF9ICiAKQEAgLTY0Niw2ICs1NjksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvcm91dGUuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRfUk9VVEVfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbmZkc190Jy4gKi8KKyN1bmRlZiBIQVZFX05GRFNfVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5saXN0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX05MSVNUCiAKQEAgLTY1OCw2ICs1ODQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYG9mZjY0X3QnLiAqLwogI3VuZGVmIEhBVkVfT0ZGNjRfVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5kaXInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfT1BFTkRJUgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvYWVzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfT1BFTlNTTF9BRVNfSAogCkBAIC02NzYsMjEgKzYwNSw0NSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvc3JlbGRhdGUuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9PU1JFTERBVEVfSAogCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgcGNpX2xvb2t1cF9uYW1lKCkgKi8KKyN1bmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBjaS9wY2kuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QQ0lfUENJX0gKIAorLyogb24gYWl4LCBpZiB5b3UgaGF2ZSBwZXJmc3RhdCAqLworI3VuZGVmIEhBVkVfUEVSRlNUQVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYHRoZSBwZXJsX2V2YWxfcHYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX0xDCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUGVybF9ldmFsX3B2JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9VQworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBpY2wuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QSUNMX0gKIAorLyogZGVmaW5lIGlmIHlvdSBoYXZlIHBrZ2luZm8gKi8KKyN1bmRlZiBIQVZFX1BLR0lORk8KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwa2dpbmZvLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUEtHSU5GT19ICiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGtnbG9jcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BLR0xPQ1NfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBrZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BLR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9sbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT0xMCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHJlYWQ2NCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRDY0CiAKKy8qIFNldCBpZiAvZXRjL3ByaW50Y2FwIGV4aXN0cyAqLworI3VuZGVmIEhBVkVfUFJJTlRDQVAKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhyZWFkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUFRIUkVBRF9ICiAKQEAgLTcwMyw2ICs2NTYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYW5kb20nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUkFORE9NCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUFERElSCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVnY29tcCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9SRUdDT01QCiAKQEAgLTcxNSw2ICs2NzEsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxycG0vaGVhZGVyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUlBNX0hFQURFUl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnBtL3JwbWZpbGV1dGlsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUlBNX1JQTUZJTEVVVElMX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxycG0vcnBtbGliLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUlBNX1JQTUxJQl9ICiAKQEAgLTczMCw2ICs2ODksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VMRUNUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2Vuc29ycy9zZW5zb3JzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0VOU09SU19TRU5TT1JTX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VURU5WCiAKQEAgLTc2OSw5ICs3MzEsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnaG9sZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TSUdIT0xECiAKKy8qIERlZmluZSBpZiBTSUdIVVAgaXMgZGVmaW5lZCBpbiA8c2lnbmFsLmg+LiAqLworI3VuZGVmIEhBVkVfU0lHSFVQCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnbmFsJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NJR05BTAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3Byb2NtYXNrJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR1BST0NNQVNLCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnc2V0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NJR1NFVAogCkBAIC03ODEsNyArNzQ5LDEwIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TT0NLRVQKIAotLyogRGVmaW5lIGlmIHR5cGUgc3NpemVfdCBpcyBhdmFpbGFibGUgKi8KKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzb2NrbGVuX3QnLiAqLworI3VuZGVmIEhBVkVfU09DS0xFTl9UCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzc2l6ZV90Jy4gKi8KICN1bmRlZiBIQVZFX1NTSVpFX1QKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0ZnMnIGZ1bmN0aW9uLiAqLwpAQCAtNzkwLDkgKzc2MSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0YXR2ZnMnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU1RBVFZGUwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGFyZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NUREFSR19ICi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1RESU5UX0gKIApAQCAtODA1LDkgKzc3Myw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VzdHInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU1RSQ0FTRVNUUgogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocicgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TVFJDSFIKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU1RSRFVQCiAKQEAgLTgzOCwxMiArODAzLDIyMCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NUUlRPVUwKIAotLyogRGVmaW5lIHRvIDEgaWYgYHNwZWVkX2hpJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBldGh0b29sX2NtZCcuICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvdWxsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPVUxMCisKKy8qIERlZmluZSB0byAxIGlmIGBhdF9uZXh0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGFycGhkJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUCisKKy8qIERlZmluZSB0byAxIGlmIGB3ZWFrX2tleScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBkZXNfa3Nfc3RydWN0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9ERVNfS1NfU1RSVUNUX1dFQUtfS0VZCisKKy8qIERlZmluZSB0byAxIGlmIGBkX3R5cGUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgZGlyZW50Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9ESVJFTlRfRF9UWVBFCisKKy8qIERlZmluZSB0byAxIGlmIGBzcGVlZF9oaScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBldGh0b29sX2NtZCcuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfRVRIVE9PTF9DTURfU1BFRURfSEkKIAotLyogRGVmaW5lIHRvIDEgaWYgYHNpbjZfc2NvcGVfaWQnIGlzIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyX2luNicuICovCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZhX25leHQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZhZGRyJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRkFERFJfSUZBX05FWFQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2FkZHJoZWFkLnRxaF9maXJzdCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkhFQURfVFFIX0ZJUlNUCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9hZGRybGlzdCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2JhdWRyYXRlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURV9JRlNfVkFMVUUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2lieXRlcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSUJZVEVTCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9pbWNhc3RzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9pcWRyb3BzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JUURST1BTCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9sYXN0Y2hhbmdlLnR2X25zZWMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfTlNFQworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfbGFzdGNoYW5nZS50dl9zZWMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9tdHUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX01UVQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfbm9wcm90bycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTk9QUk9UTworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfb2J5dGVzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PQllURVMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX29tY2FzdHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX3NwZWVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9TUEVFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfdHlwZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfeG5hbWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIGBpcDZzX2V4dGhkcnRvb2xvbmcgJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwNnN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQNlNUQVRfSVA2U19FWFRIRFJUT09MT05HXworCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2NhbnRmb3J3YXJkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URk9SV0FSRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2NhbnRmcmFnJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URlJBRworCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2RlbGl2ZXJlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfREVMSVZFUkVECisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfZnJhZ2Ryb3BwZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdEUk9QUEVECisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfZnJhZ21lbnRlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR01FTlRFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2ZyYWd0aW1lb3V0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHVElNRU9VVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2xvY2Fsb3V0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19MT0NBTE9VVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX25vcHJvdG8nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUFJPVE8KKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19ub3JvdXRlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1JPVVRFCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfb2Ryb3BwZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09EUk9QUEVECisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfb2ZyYWdtZW50cycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0ZSQUdNRU5UUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX3JlYXNzZW1ibGVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19SRUFTU0VNQkxFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgbV9jbGZyZWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgbWJzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9NQlNUQVRfTV9DTEZSRUUKKworLyogRGVmaW5lIHRvIDEgaWYgYG1fY2x1c3RlcnMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgbWJzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9NQlNUQVRfTV9DTFVTVEVSUworCisvKiBEZWZpbmUgdG8gMSBpZiBgbV9tYnVmcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBtYnN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX01CU1RBVF9NX01CVUZTCisKKy8qIERlZmluZSB0byAxIGlmIGBuX3ZhbHVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG5saXN0NjQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX05MSVNUNjRfTl9WQUxVRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgbl92YWx1ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBubGlzdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfZHN0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCisKKy8qIERlZmluZSB0byAxIGlmIGBydF9oYXNoJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSAorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfbmV4dCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX05FWFQKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X3JlZmNudCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1JFRkNOVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfdW5pdCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X3VzZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VTRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2Ffc2lnYWN0aW9uJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNpZ2FjdGlvbicuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2luNl9zY29wZV9pZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcl9pbjYnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lECiAKKy8qIERlZmluZSB0byAxIGlmIGBzYV9sZW4nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHInLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX0xFTgorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0CisgICBzb2NrYWRkcicuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyCisKKy8qIERlZmluZSB0byAxIGlmIGBzc19mYW1pbHknIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkKKworLyogRGVmaW5lIHRvIDEgaWYgYF9fc3NfZmFtaWx5JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfX19TU19GQU1JTFkKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZmF2YWlsJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXRmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkFWQUlMCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2ZmcmVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXRmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkZSRUUKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZmlsZXMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GSUxFUworCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9mbGFncycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZMQUdTCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2Zyc2l6ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZSU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9maWxlcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0dmZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZnJzaXplJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXR2ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKKworLyogRGVmaW5lIHRvIDEgaWYgYG1udF9kaXInIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdHZmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19NTlRfRElSCisKKy8qIERlZmluZSB0byAxIGlmIGBzd19uYmxrc2VuYWJsZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3dkZXZ0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TV0RFVlRfU1dfTkJMS1NFTkFCTEVECisKKy8qIERlZmluZSB0byAxIGlmIGB0Y3BfcmN2bWVtZHJvcCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB0Y3BzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9UQ1BTVEFUX1RDUF9SQ1ZNRU1EUk9QCisKKy8qIERlZmluZSB0byAxIGlmIGB0el9kc3R0aW1lJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHRpbWV6b25lJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9USU1FWk9ORV9UWl9EU1RUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIGB0bV9nbXRvZmYnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgorCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19kaXNjYXJkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19ESVNDQVJECisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX2Z1bGxzb2NrJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19GVUxMU09DSworCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19pcGFja2V0cycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfSVBBQ0tFVFMKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfbm9wb3J0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlQKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfbm9wb3J0YmNhc3QnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVEJDQVNUCisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX29wYWNrZXRzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19PUEFDS0VUUworCisvKiBEZWZpbmUgdG8gMSBpZiBgcGdzd2FwaW4nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdXZtZXhwJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVk1FWFBfUEdTV0FQSU4KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeXNjb25mJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NZU0NPTkYKIApAQCAtODY2LDYgKzEwMzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGlza2lvLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX0RJU0tJT19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Rpc2tsYWJlbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9ka2lvLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX0RLSU9fSAogCkBAIC05MTUsNiArMTA5MSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUE9MTF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Bvb2wuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfUE9PTF9ICiAKQEAgLTk3OCw2ICsxMTU3LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RjcGlwc3RhdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfVENQSVBTVEFUU19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWViLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVCX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZW91dC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19USU1FT1VUX0gKIApAQCAtMTAzMiw2ICsxMjE0LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGltZXMnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfVElNRVMKIAorLyogRGVmaW5lIGlmIGEgdGltZXpvbmUgdmFyaWFibGUgaXMgZGVjbGFyZWQgaW4gPHN5cy90aW1lLmg+ICovCisjdW5kZWYgSEFWRV9USU1FWk9ORV9WQVJJQUJMRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVmcy9mZnMvZnMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9VRlNfRkZTX0ZTX0gKIApAQCAtMTA0NywxOCArMTIzMiw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVmcy91ZnMvcXVvdGEuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9VRlNfVUZTX1FVT1RBX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQxNl90Jy4gKi8KLSN1bmRlZiBIQVZFX1VJTlQxNl9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MzJfdCcuICovCi0jdW5kZWYgSEFWRV9VSU5UMzJfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDY0X3QnLiAqLwotI3VuZGVmIEhBVkVfVUlOVDY0X1QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQ4X3QnLiAqLwotI3VuZGVmIEhBVkVfVUlOVDhfVAotCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludG1heF90Jy4gKi8KICN1bmRlZiBIQVZFX1VJTlRNQVhfVAogCkBAIC0xMDcxLDYgKzEyNDQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9VTklTVERfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCisjdW5kZWYgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXNsZWVwJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1VTTEVFUAogCkBAIC0xMDg2LDE3ICsxMjYyLDE0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV2bS91dm1fcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9VVk1fVVZNX1BBUkFNX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVfaW50MTZfdCcuICovCi0jdW5kZWYgSEFWRV9VX0lOVDE2X1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9WQUxHUklORF9NRU1DSEVDS19ICiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1X2ludDMyX3QnLiAqLwotI3VuZGVmIEhBVkVfVV9JTlQzMl9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVkFMR1JJTkRfVkFMR1JJTkRfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdV9pbnQ2NF90Jy4gKi8KLSN1bmRlZiBIQVZFX1VfSU5UNjRfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdV9pbnQ4X3QnLiAqLwotI3VuZGVmIEhBVkVfVV9JTlQ4X1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dmFsaWRhdG9yL3ZhbGlkYXRvci1jb25maWcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9WQUxJREFUT1JfVkFMSURBVE9SX0NPTkZJR19ICiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dm0vc3dhcF9wYWdlci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1ZNX1NXQVBfUEFHRVJfSApAQCAtMTExMywxOCArMTI4Niw2MiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2c25wcmludGYnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfVlNOUFJJTlRGCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTkRPV1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DSzJfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9XSU5TT0NLX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dTMlRDUElQX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4dGkuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9YVElfSAogCisvKiBsb2NhdGlvbiBvZiBVTklYIGtlcm5lbCAqLworI3VuZGVmIEtFUk5FTF9MT0MKKworLyogUGF0aCB0byB0aGUgbHBzdGF0IGNvbW1hbmQgKi8KKyN1bmRlZiBMUFNUQVRfUEFUSAorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHkgKi8KKyN1bmRlZiBORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZCisKIC8qIFVuaXggZG9tYWluIHNvY2tldCBmb3IgQWdlbnRYIG1hc3Rlci1zdWJhZ2VudCBjb21tdW5pY2F0aW9uICovCiAjdW5kZWYgTkVUU05NUF9BR0VOVFhfU09DS0VUCiAKIC8qIERlZmluZSBpZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgdW5zdXBwb3J0ZWQgKi8KICN1bmRlZiBORVRTTk1QX0JST0tFTl9JTkxJTkUKIAorLyogIkRlZmluZSBpZiBjcnl0b2dyYXBoeSBzdXBwb3J0IGlzIHBvc3NpYmxlIiAqLworI3VuZGVmIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworCisvKiBzeXNjdGwgd29ya3MgdG8gZ2V0IGJvb3R0aW1lLCBldGMuLi4gKi8KKyN1bmRlZiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMCisKKy8qIGNvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZCAqLworI3VuZGVmIE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMKKworLyogZGVmYXVsdCBsb2NhdGlvbiB0byBsb29rIGZvciBtaWJzIHRvIGxvYWQgdXNpbmcgdGhlIGFib3ZlIHRva2VucyBhbmQvb3IKKyAgIHRob3NlIGluIHRoZSBNSUJTIGVudnJpb25tZW50IHZhcmlhYmxlICovCisjdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKKworLyogZGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZCwgc3BlY2lmaWVkIGJ5IHBhdGguICovCisjdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTCisKKy8qIERlZmluZSBpZiBubyBhZ2VudCBpcyBidWlsdCAqLworI3VuZGVmIE5FVFNOTVBfRElTQUJMRV9BR0VOVAorCisvKiBEZWZpbmUgaWYgbm8gYXBwcyBhcmUgYnVpbHQgKi8KKyN1bmRlZiBORVRTTk1QX0RJU0FCTEVfQVBQUworCiAvKiBEZWZpbmUgaWYgREVTIGVuY3J5cHRpb24gc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWQgKi8KICN1bmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCiAKQEAgLTExNDMsOSArMTM2MCwxMDMgQEAKIC8qIERlZmluZSBpZiBTTk1QdjJjIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCAqLwogI3VuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCiAKKy8qIERlZmluZSBpZiB5b3UgYXJlIGVtYmVkZGluZyBwZXJsIGluIHRoZSBtYWluIGFnZW50LiAqLworI3VuZGVmIE5FVFNOTVBfRU1CRURERURfUEVSTAorCisvKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKworLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IGJ5IGRlZmF1bHQgKi8KKyN1bmRlZiBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNRkQgbW9kdWxlIHJld3JpdGVzICovCisjdW5kZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCisKKy8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHN1cHBvcnQgZm9yIGJvdGggYXV0aGVudGljYXRpb24gYW5kIHByaXZhY3kKKyAgIHN1cHBvcnQuICovCisjdW5kZWYgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKKworLyogdGVzdGluZyBjb2RlIHNlY3Rpb25zLiAqLworI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQorCisvKiBTaG91bGQgZXZhbHVhdGUgdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaWYgZGVmaW5lZCAqLworI3VuZGVmIE5FVFNOTVBfRlVOQ1RJT04KKworLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWQgKi8KKyN1bmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorCisvKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUxfU1RSVUNUVVJFUyBkZWZpbmVkICovCisjdW5kZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBub24tZXNzZW50aWFsIGNvZGUgZmVhdHVyZXMuICovCisjdW5kZWYgTkVUU05NUF9NSU5JTUFMX0NPREUKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIG9ubHkgc3VwcG9ydCBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgKi8KKyN1bmRlZiBORVRTTk1QX05PVElGWV9PTkxZCisKKy8qIERlZmluZSB0byBzdXBwcmVzcyBpbmNsdXNpb24gb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKi8KKyN1bmRlZiBORVRTTk1QX05PX0RFUFJFQ0FURURfRlVOQ1RJT05TCisKKy8qIElmIHlvdSBkb24ndCB3YW50IHRoZSBhZ2VudCB0byByZXBvcnQgb24gdmFyaWFibGVzIGl0IGRvZXNuJ3QgaGF2ZSBkYXRhIGZvcgorICAgKi8KKyN1bmRlZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUworCisvKiBJZiB3ZSBkb24ndCB3YW50IHRvIHVzZSBrbWVtLiAqLworI3VuZGVmIE5FVFNOTVBfTk9fS01FTV9VU0FHRQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBsaXN0ZW5pbmcgc3VwcG9ydCBmcm9tIHRoZSBjb2RlICovCisjdW5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorCisvKiBJZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBkb24ndCBleGl0IHVwb24ga21lbSBlcnJvcnMgKi8KKyN1bmRlZiBORVRTTk1QX05PX1JPT1RfQUNDRVNTCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIFNFVC93cml0ZSBhY2Nlc3MgZnJvbSB0aGUgY29kZSAqLworI3VuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCisvKiB1bWFzayBwZXJtaXNzaW9ucyB0byBzZXQgdXAgcGVyc2lzdGVudCBmaWxlcyB3aXRoICovCisjdW5kZWYgTkVUU05NUF9QRVJTSVNURU5UX01BU0sKKworLyogU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHVpbnQzMl90ICovCisjdW5kZWYgTkVUU05NUF9QUkkzMgorCisvKiBTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgc2l6ZV90IG9yIHNzaXplX3QgKi8KKyN1bmRlZiBORVRTTk1QX1BSSXoKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCByZWVudHJhbnQvdGhyZWFkZWQgY29kZSAoaW5jb21wbGV0ZSkuCisgICAqLworI3VuZGVmIE5FVFNOTVBfUkVFTlRSQU5UCisKKy8qIGRlZmluZSBpZiB5b3UgZG8gbm90IHdhbnQgc25tcHRyYXBkIHRvIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudCAqLworI3VuZGVmIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCisKIC8qIFBhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzICovCiAjdW5kZWYgTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTgogCisvKiAiRGVmaW5lIGlmIGludGVybmFsIGNyeXB0b2dyYXBoeSBjb2RlIHNob3VsZCBiZSB1c2VkIiAqLworI3VuZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworCisvKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTUQ1IGNvZGUgLi4uICovCisjdW5kZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSdyZSB1c2luZyBIZWltZGFsIEtlcmJlcm9zICovCisjdW5kZWYgTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTAorCisvKiBEZWZpbmUgdGhpcyBpZiB3ZSdyZSB1c2luZyB0aGUgbmV3IE1JVCBjcnlwdG8gQVBJICovCisjdW5kZWYgTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUCisKKy8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBteXNxbCBjb2RlIGZvciBzbm1wdHJhcGQgLi4uICovCisjdW5kZWYgTkVUU05NUF9VU0VfTVlTUUwKKworLyogRGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGVTMTEgbGlicmFyeSAuLi4gKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9QS0NTMTEKKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbG1fc2Vuc29ycyB2MyBvciBsYXRlciAqLworI3VuZGVmIE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMKKworLyogU2hvdWxkIHdlIGNvbXBpbGUgdG8gdXNlIHNwZWNpYWwgb3BhcXVlIHR5cGVzOiBmbG9hdCwgZG91YmxlLCBjb3VudGVyNjQsCisgICBpNjQsIHVpNjQsIHVuaW9uPyAqLworI3VuZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworCiAvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KICNpZm5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVApAQCAtMTE2Niw1NyArMTQ3NywxMzUgQEAKICN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKICNlbmRpZgogCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAjaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgogI2VuZGlmCiAKKy8qIENvbW1hbmQgdG8gZ2VuZXJhdGUgcHMgb3V0cHV0LCB0aGUgZmluYWwgY29sdW1uIG11c3QgYmUgdGhlIHByb2Nlc3MgbmFtZQorICAgd2l0aE9VVCBhcmd1bWVudHMgKi8KKyN1bmRlZiBQU0NNRAorCiAvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KICN1bmRlZiBSRVRTSUdUWVBFCiAKLS8qIFRoZSBzaXplIG9mIGEgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qIGRlZmluZSBydGVudHJ5IHRvIG9ydGVudHJ5IG9uIFNZU1YgbWFjaGluZXMgKGFscGhhcykgKi8KKyN1bmRlZiBSVEVOVFJZCisKKy8qIFVzZSBCU0QgNC40IHJvdXRpbmcgdGFibGUgZW50cmllcz8gKi8KKyN1bmRlZiBSVEVOVFJZXzRfNAorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9JTlQKIAotLyogVGhlIHNpemUgb2YgYSBgaW50bWF4X3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiBUaGUgc2l6ZSBvZiBgaW50bWF4X3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0lOVE1BWF9UCiAKLS8qIFRoZSBzaXplIG9mIGEgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfTE9ORwogCi0vKiBUaGUgc2l6ZSBvZiBhIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9MT05HX0xPTkcKIAotLyogVGhlIHNpemUgb2YgYSBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX1NIT1JUCiAKKy8qIFRoZSBzaXplIG9mIGBzb2NrYWRkcl91bi5zdW5fcGF0aCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU09DS0FERFJfVU5fU1VOX1BBVEgKKwogLyogSWYgdXNpbmcgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCiAgICBkaXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKLSAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW4tdGltZS4KKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgogCVNUQUNLX0RJUkVDVElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKIAlTVEFDS19ESVJFQ1RJT04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKIAlTVEFDS19ESVJFQ1RJT04gPSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLwogI3VuZGVmIFNUQUNLX0RJUkVDVElPTgogCisvKiBEZWZpbmUgaWYgc3RhdGZzIHRha2VzIDIgYXJncyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBoYXMgdHlwZSBzdHJ1Y3QKKyAgIGZzX2RhdGEuIFtVbHRyaXhdICovCisjdW5kZWYgU1RBVF9TVEFURlNfRlNfREFUQQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICN1bmRlZiBTVERDX0hFQURFUlMKIAorLyogZGVmaW5lIGlmIFNJT0NHSUZBRERSIGV4aXN0cyBpbiBzeXMvaW9jdGwuaCAqLworI3VuZGVmIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUgorCisvKiBEZWZpbmUgaWYgdGhlIFRDUCB0aW1lciBjb25zdGFudHMgaW4gPG5ldGluZXQvdGNwX3RpbWVyLmg+IGRlcGVuZCBvbiB0aGUKKyAgIGludGVnZXIgdmFyaWFibGUgJ2h6Jy4gW0ZyZWVCU0QgNC54XSAqLworI3VuZGVmIFRDUFRWX05FRURTX0haCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwogI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlCi0gICBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQgVkFYKS4gKi8KLSN1bmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qIFdoZXJlIGlzIHRoZSB1bmFtZSBjb21tYW5kICovCisjdW5kZWYgVU5BTUVQUk9HCiAKLS8qIERlZmluZSB0byAxIGlmIG9uIEFJWCAzLgotICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgotICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLwogI2lmbmRlZiBfQUxMX1NPVVJDRQogIyB1bmRlZiBfQUxMX1NPVVJDRQogI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyN1bmRlZiBfTUlOSVgKKworLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKyN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisjdW5kZWYgX1BPU0lYX1NPVVJDRQogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgUlBNIDQuNiBvciBuZXdlciB0byB0dXJuIG9uIGxlZ2FjeSBBUEkgKi8KICN1bmRlZiBfUlBNXzRfNF9DT01QQVQKIAorLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50MzJfdCB0eXBlZGVmIGZyb20gPHN5cy9zeW5jaC5oPiwKKyAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3ZXJlIGFsbG93ZWQsIHRoZQorICAgI2RlZmluZSBiZWxvdyB3b3VsZCBjYXVzZSBhIHN5bnRheCBlcnJvci4gKi8KKyN1bmRlZiBfVUlOVDMyX1QKKworLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50NjRfdCB0eXBlZGVmIGZyb20gPHN5cy9zeW5jaC5oPiwKKyAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3ZXJlIGFsbG93ZWQsIHRoZQorICAgI2RlZmluZSBiZWxvdyB3b3VsZCBjYXVzZSBhIHN5bnRheCBlcnJvci4gKi8KKyN1bmRlZiBfVUlOVDY0X1QKKworLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50OF90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI3VuZGVmIF9VSU5UOF9UCisKIC8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLwogI3VuZGVmIGNvbnN0CiAKQEAgLTEyMjYsNTggKzE2MTUsNjggQEAKICN1bmRlZiBpbmxpbmUKICNlbmRpZgogCi0vKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDE2IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50MTZfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnQzMl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA2NCBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludDY0X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDggYml0cyBpZiBzdWNoCisgICBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnQ4X3QKKworLyogRGVmaW5lIHRvIHRoZSB3aWRlc3Qgc2lnbmVkIGludGVnZXIgdHlwZSBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG8KKyAgIG5vdCBkZWZpbmUuICovCisjdW5kZWYgaW50bWF4X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSB3aWRlIGVub3VnaCB0byBob2xkIGEgcG9pbnRlciwKKyAgIGlmIHN1Y2ggYSB0eXBlIGV4aXN0cywgYW5kIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludHB0cl90CisKKy8qIERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwogI3VuZGVmIG9mZl90CiAKIC8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KICN1bmRlZiBwaWRfdAogCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAxNiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnQxNl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnQzMl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA2NCBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnQ2NF90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA4IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDhfdAorCisvKiBEZWZpbmUgdG8gdGhlIHdpZGVzdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+CisgICBkbyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHVpbnRtYXhfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYQorICAgcG9pbnRlciwgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludHB0cl90CisKIC8qIGVuZCBvZiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyIGluZGV4Ci0jIGRlZmluZSBzdHJyY2hyIHJpbmRleAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBtaW5ndzMyCi0jIGRlZmluZSBpbmRleChhLGIpIHN0cmNocihhLGIpCi0jIGRlZmluZSByaW5kZXgoYSxiKSBzdHJyY2hyKGEsYikKLSNlbHNlCi0jIGRlZmluZSBpbmRleCBzdHJjaHIKLSMgZGVmaW5lIHJpbmRleCBzdHJyY2hyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLQogLyogSWYgeW91IGhhdmUgb3BlbnNzbCAwLjkuNyBvciBhYm92ZSwgeW91IGxpa2VseSBoYXZlIEFFUyBzdXBwb3J0LiAqLwogI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKQorI2lmIChkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiAjZGVmaW5lIEhBVkVfQUVTIDEKICNlbmRpZgogCkBAIC0xMzMxLDI3ICsxNzMwLDYgQEAKIC8qIGRlZmF1bHQgbGlzdCBvZiBtaWJzIHRvIGxvYWQgKi8KICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQlMgIklQLU1JQjpJRi1NSUI6VENQLU1JQjpVRFAtTUlCOlNOTVB2Mi1NSUI6UkZDMTIxMy1NSUIiCiAKLS8qIGRlZmF1bHQgbG9jYXRpb24gdG8gbG9vayBmb3IgbWlicyB0byBsb2FkIHVzaW5nIHRoZSBhYm92ZSB0b2tlbnMKLSAgIGFuZC9vciB0aG9zZSBpbiB0aGUgTUlCUyBlbnZyaW9ubWVudCB2YXJpYWJsZSovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKLQotLyogZGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZCwgc3BlY2lmaWVkIGJ5IHBhdGguICovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTCi0KLS8qIHNob3VsZCB3ZSBjb21waWxlIHRvIHVzZSBzcGVjaWFsIG9wYXF1ZSB0eXBlczogZmxvYXQsIGRvdWJsZSwKLSAgIGNvdW50ZXI2NCwgaTY0LCB1aTY0LCB1bmlvbj8gKi8KLSN1bmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKLQotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQKLSAgIHByaXZhY3kgc3VwcG9ydC4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0vKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTUQ1IGNvZGUgLi4uKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGVTMTEgbGlicmFyeSAuLi4qLwotI3VuZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQotCiAvKiBkZWJ1Z2dpbmcgc3R1ZmYgKi8KIC8qIGlmIGRlZmluZWQsIHdlIG9wdGltaXplIHRoZSBjb2RlIHRvIGV4Y2x1ZGUgYWxsIGRlYnVnZ2luZyBjYWxscy4gKi8KICN1bmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwpAQCAtMTM2Nyw5ICsxNzQ1LDYgQEAKICAgIGxpbmVzOiBQRVJTSVNURU5UX0RJUkVDVE9SWS9OQU1FLnBlcnNpc3RlbnQuY29uZiAqLwogI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZICIvdmFyL3NubXAiCiAKLS8qIFBFUlNJU1RFTlRfTUFTSzogdGhlIHVtYXNrIHBlcm1pc3Npb25zIHRvIHNldCB1cCBwZXJzaXN0ZW50IGZpbGVzIHdpdGggKi8KLSNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX01BU0sgMDc3Ci0KIC8qIEFHRU5UX0RJUkVDVE9SWV9NT0RFOiB0aGUgbW9kZSB0aGUgYWdlbnRzIHNob3VsZCB1c2UgdG8gY3JlYXRlCiAgICBkaXJlY3RvcmllcyB3aXRoLiBTaW5jZSB0aGUgZGF0YSBzdG9yZWQgaGVyZSBpcyBwcm9iYWJseSBzZW5zaXRpdmUsIGl0CiAgICBwcm9iYWJseSBzaG91bGQgYmUgcmVhZC1vbmx5IGJ5IHJvb3QvYWRtaW5pc3RyYXRvci4gKi8KQEAgLTE0MTQsMTkgKzE3ODksNiBAQAogLyogVXNlIGxpYndyYXAgdG8gaGFuZGxlIGFsbG93L2RlbnkgaG9zdHM/ICovCiAjdW5kZWYgTkVUU05NUF9VU0VfTElCV1JBUAogCi0vKiB0ZXN0aW5nIGNvZGUgc2VjdGlvbnMuICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFIAotCi0vKiBJZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBkb24ndCBleGl0IHVwb24ga21lbSBlcnJvcnMgKi8KLSN1bmRlZiBORVRTTk1QX05PX1JPT1RfQUNDRVNTCi0KLS8qIElmIHdlIGRvbid0IHdhbnQgdG8gdXNlIGttZW0uICovCi0jdW5kZWYgTkVUU05NUF9OT19LTUVNX1VTQUdFCi0KLS8qIElmIHlvdSBkb24ndCB3YW50IHRoZSBhZ2VudCB0byByZXBvcnQgb24gdmFyaWFibGVzIGl0IGRvZXNuJ3QgaGF2ZSBkYXRhIGZvciAqLwotI3VuZGVmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCi0KLQogLyogTWliLTIgdHJlZSBJbmZvICovCiAvKiBUaGVzZSBhcmUgdGhlIHN5c3RlbSBpbmZvcm1hdGlvbiB2YXJpYWJsZXMuICovCiAKQEAgLTE1MzAsNyArMTg5Miw3IEBACiAjaWZkZWYgV0lOMzIKICNkZWZpbmUgTkVUU05NUF9PU1RZUEUgTkVUU05NUF9XSU4zMklECiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDMpIHx8IGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXgzKSB8fCBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAjZGVmaW5lIE5FVFNOTVBfT1NUWVBFIE5FVFNOTVBfQUlYSUQKICNlbmRpZgogI2lmIGRlZmluZWQoZGFyd2luKSAmJiAoZGFyd2luID49IDgpCkBAIC0xNjIxLDkgKzE5ODMsNiBAQAogLyogaW50ZXJuYWwgZGVmaW5lICovCiAjZGVmaW5lIE5FVFNOTVBfTEFTVEZJRUxEIC0xCiAKLS8qIGNvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZCAqLwotI2RlZmluZSBORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TICIiCi0KIC8qICBQbHVnZ2FibGUgdHJhbnNwb3J0cy4gICovCiAKIC8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFVEUC9JUCB0cmFuc3BvcnQgZG9tYWluIGlzCkBAIC0xNjU4LDEzICsyMDE3LDMyIEBACiAgICAgYXZhaWxhYmxlLiAgKi8KICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgogCi0vKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBVRFAvSVAgdHJhbnNwb3J0IGRvbWFpbiBpcworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTIHRyYW5zcG9ydCBkb21haW4gaXMKICAgICBhdmFpbGFibGUuICAgKi8KLSN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNfRE9NQUlOCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTQkFTRV9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgQWxpYXMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBTU0ggdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgRFRMUy9VRFAgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUy9UQ1AgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KIAogLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciBzdGRpbi9vdXQgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOCiAKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIElQdjRCYXNlIHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfSVBWNEJBU0VfRE9NQUlOCisKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI3VuZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogCkBAIC0xNjc0LDE4ICsyMDUyLDkgQEAKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBsb2NhbCBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfTE9DQUxTTQogCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCByZWVudHJhbnQvdGhyZWFkZWQgY29kZSAoaW5jb21wbGV0ZSkqLwotI3VuZGVmIE5FVFNOTVBfUkVFTlRSQU5UCi0KIC8qIGRlZmluZSBpZiBjb25maWd1cmVkIGFzIGEgIm1pbmktYWdlbnQiICovCiAjdW5kZWYgTkVUU05NUF9NSU5JX0FHRU5UCiAKLS8qIGRlZmluZSBpZiB5b3UgYXJlIGVtYmVkZGluZyBwZXJsIGluIHRoZSBtYWluIGFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9FTUJFRERFRF9QRVJMCi0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNRkQgbW9kdWxlIHJld3JpdGVzKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKLQogLyogdGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldC1zbm1wIG1pYiB0cmVlLiAgSXQgc2hvdWxkbid0IGJlCiAgICBjaGFuZ2VkLCBhcyB0aGUgcGxhY2VzIGl0IGlzIHVzZWQgYXJlIGV4cGVjdGVkIHRvIGJlIGNvbnN0YW50CiAgICB2YWx1ZXMgb3IgYXJlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIFVDRC1TTk1QLU1JQi4gKi8KQEAgLTE3NTMsMzMgKzIxMjIsMTIgQEAKICMgIGRlZmluZSBORVRTTk1QX0lNUE9SVCBleHRlcm4KICNlbmRpZgogCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKLQotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IGJ5IGRlZmF1bHQgKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYCi0KLS8qIGRlZmluZSBpZiBhZ2VudHggdHJhbnNwb3J0IGlzIHRvIHVzZSBkb21haW4gc29ja2V0cyBvbmx5ICovCi0jdW5kZWYgTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWQotCi0vKiBkZWZpbmUgaWYgeW91IGRvIG5vdCB3YW50IHNubXB0cmFwZCB0byByZWdpc3RlciBhcyBhbiBBZ2VudFggc3ViYWdlbnQgKi8KLSN1bmRlZiBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAotCi0vKiBkZWZpbmUgdGhpcyBpZiB3ZSdyZSB1c2luZyB0aGUgbmV3IE1JVCBjcnlwdG8gQVBJICovCi0jdW5kZWYgTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUCi0KLS8qIGRlZmluZSB0aGlzIGlmIHlvdSdyZSB1c2luZyBIZWltZGFsIEtlcmJlcm9zICovCi0jdW5kZWYgTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTAotCiAvKiBjb21tZW50IHRoZSBuZXh0IGxpbmUgaWYgeW91IGFyZSBjb21waWxpbmcgd2l0aCBsaWJzbm1wLmggCiAgICBhbmQgYXJlIG5vdCB1c2luZyB0aGUgVUMtRGF2aXMgU05NUCBsaWJyYXJ5LiAqLwogI2RlZmluZSBVQ0RfU05NUF9MSUJSQVJZIDEKIAotLyogYWRkIGluIHJlY2VudCBDTVUgbGlicmFyeSBleHRlbnNpb25zIChub3QgY29tcGxldGUpICovCi0jdW5kZWYgQ01VX0NPTVBBVElCTEUKLQogLyogZmluYWwgY29uY2x1c2lvbiBvbiBubGlzdCB1c2FnZSAqLwotI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUpICYmICFkZWZpbmVkKE5FVFNOTVBfRE9OVF9VU0VfTkxJU1QpICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKKyNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSkgJiYgIWRlZmluZWQoTkVUU05NUF9ET05UX1VTRV9OTElTVCkgJiYgZGVmaW5lZChIQVZFX0tNRU0pICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKICNkZWZpbmUgTkVUU05NUF9DQU5fVVNFX05MSVNUCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2U2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVTX0gKKyNkZWZpbmUgTkVUU05NUF9GRUFUVVJFU19ICisKKy8qIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgb25seSBuZWVkZWQgaWYgLS1lbmFibGUtbWluaW1hbGlzdCBpcyBvbiAqLworI2lmZGVmIE5FVFNOTVBfTUlOSU1BTF9DT0RFCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisjaW5jbHVkZSA8bmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmg+CisjZWxzZSAvKiAhIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmVhdHVyZXMuaD4KKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0FHRU5UCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9mZWF0dXJlcy1taWJncm91cHMuaD4KKyNlbmRpZgorI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfQVBQUworI2luY2x1ZGUgPG5ldC1zbm1wL2ZlYXR1cmVzLXNubXBuZXRzdGF0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZmVhdHVyZXMtYXBwcy5oPgorI2VuZGlmCisjZW5kaWYgLyogISBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgKi8KKyNlbmRpZiAvKiBORVRTTk1QX01JTklNQUxfQ09ERSAqLworCisKKy8qIHByb3RvdHlwZXMgYWx3YXlzIG5lZWRlZCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcKKyNkZWZpbmUgbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoWCkKKyNkZWZpbmUgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoWCkKKyNkZWZpbmUgbmV0c25tcF9mZWF0dXJlX3dhbnQoWCkKKyNkZWZpbmUgbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKFgsIFkpCisjZW5kaWYKKworI2RlZmluZSBuZXRzbm1wX2ZlYXR1cmVfdW51c2VkKFgpIGNoYXIgbmV0c25tcF9mZWF0dXJlX3VudXNlZF8gIyMgWAorCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmggYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKaW5kZXggNTNkYzdiOC4uM2VlNjJhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaApAQCAtMzgsMTEgKzM4LDcgQEAKICNlbmRpZgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03MSw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGVmaW5pdGlvbnMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KQEAgLTgwLDggKzc3LDQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvc25tcHYzX2FwaS5oPgogCi0jaWZkZWYgQ01VX0NPTVBBVElCTEUKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaD4KLSNlbmRpZgotCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TTk1QX0lOQ0xVREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaCBiL2luY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTg1ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiBjcnlwdG8vbWQ1L21kNS5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpZm5kZWYgSEVBREVSX01ENV9ICisjZGVmaW5lIEhFQURFUl9NRDVfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX05PX01ENQorI2Vycm9yIE1ENSBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisvKgorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqICEgTUQ1X0xPTkcgaGFzIHRvIGJlIGF0IGxlYXN0IDMyIGJpdHMgd2lkZS4gSWYgaXQncyB3aWRlciwgdGhlbiAhCisgKiAhIE1ENV9MT05HX0xPRzIgaGFzIHRvIGJlIGRlZmluZWQgYWxvbmcuCQkJICAgIQorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqLworCisjaWYgZGVmaW5lZChfX0xQMzJfXykKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19DUkFZKSB8fCBkZWZpbmVkKF9fSUxQNjRfXykKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZworI2RlZmluZSBNRDVfTE9OR19MT0cyIDMKKy8qCisgKiBfQ1JBWSBub3RlLiBJIGNvdWxkIGRlY2xhcmUgc2hvcnQsIGJ1dCBJIGhhdmUgbm8gaWRlYSB3aGF0IGltcGFjdAorICogZG9lcyBpdCBoYXZlIG9uIHBlcmZvcm1hbmNlIG9uIG5vbmUtVDNFIG1hY2hpbmVzLiBJIGNvdWxkIGRlY2xhcmUKKyAqIGludCwgYnV0IGF0IGxlYXN0IG9uIEM5MCBzaXplb2YoaW50KSBjYW4gYmUgY2hvc2VuIGF0IGNvbXBpbGUgdGltZS4KKyAqIFNvIEkndmUgY2hvc2VuIGxvbmcuLi4KKyAqCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgKi8KKyNlbHNlCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgTUQ1X0NCTE9DSwk2NAorI2RlZmluZSBNRDVfTEJMT0NLCShNRDVfQ0JMT0NLLzQpCisjZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIDE2CisKK3R5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0CisJeworCU1ENV9MT05HIEEsQixDLEQ7CisJTUQ1X0xPTkcgTmwsTmg7CisJTUQ1X0xPTkcgZGF0YVtNRDVfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCX0gTUQ1X0NUWDsKKworaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOworaW50IE1ENV9VcGRhdGUoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKk1ENShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBNRDVfVHJhbnNmb3JtKE1ENV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIpOworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAppbmRleCBiZTJjZTBjLi4zYmYzMTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgTkVUX1NOTVBfTE9HR0lOR19BUElfSAotI2RlZmluZSBORVRfU05NUF9MT0dHSU5HX0FQSV9ICisjaWZuZGVmIE5FVF9TTk1QX09VVFBVVF9BUElfSAorI2RlZmluZSBORVRfU05NUF9PVVRQVVRfQVBJX0gKIAogICAgIC8qKgogICAgICAqICBMaWJyYXJ5IEFQSSByb3V0aW5lcyBjb25jZXJuZWQgd2l0aCBsb2dnaW5nIGFuZCBtZXNzYWdlIG91dHB1dApAQCAtNywxNyArNywxNDUgQEAKICAgICAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CS8qIGZvciB2YV9saXN0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAgIC8qIEVycm9yIHJlcG9ydGluZyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICBzbm1wX2Vycm9yKG5ldHNubXBfc2Vzc2lvbiAqc2VzcywgaW50ICpjbGliX2Vycm9ybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNubXBfZXJyb3JubywgY2hhciAqKmVycnN0cmluZyk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgIHNubXBfc2Vzc19lcnJvciggICAgICB2b2lkICpzZXNzLCBpbnQgKmNsaWJfZXJyb3JubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc25tcF9lcnJvcm5vLCBjaGFyICoqZXJyc3RyaW5nKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAqc25tcF9hcGlfZXJyc3RyaW5nKGludCBzbm1wX2Vycm9ybm8pOyAgLyogIGxpYnJhcnkgZXJyb3JzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqc25tcF9lcnJzdHJpbmcoaW50IHNubXBfZXJyb3Jubyk7ICAvKiBwcm90b2NvbCBlcnJvcnMgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICBzbm1wX3BlcnJvcihjb25zdCBjaGFyICptc2cpOyAgIC8qIGZvciBwYXJzaW5nIGVycm9ycyBvbmx5ICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgc25tcF9zZXNzX3BlcnJvcihjb25zdCBjaGFyICptc2csIG5ldHNubXBfc2Vzc2lvbiAqc2Vzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgYWxsIG90aGVyIFNOTVAgbGlicmFyeSBlcnJvcnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgc25tcF9sb2dfcGVycm9yKGNvbnN0IGNoYXIgKm1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3Igc3lzdGVtIGxpYnJhcnkgZXJyb3JzICovCisKKyAgICAvKiBMb2dnaW5nIG1lc3NhZ2VzICovCisKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgOCkKKyNkZWZpbmUgX0xPR19BVFRSCisjZWxzZQorI2RlZmluZSBfTE9HX0FUVFIgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKQorI2VuZGlmCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgc25tcF9sb2coIGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIF9MT0dfQVRUUjsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgc25tcF92bG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgc25tcF9nZXRfZG9fbG9nZ2luZyggICAgdm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCBzbm1wX2Rpc2FibGVfbG9nKCAgICAgICB2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgc2h1dGRvd25fc25tcF9sb2dnaW5nKCAgdm9pZCk7CisKKyN1bmRlZiBfTE9HX0FUVFIKKworICAgIC8qIERlYnVnIG1lc3NhZ2VzICovCisjaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CS8qIGZvciBpbnRlcm5hbCBtYWNyb3MgKi8KKyNkZWZpbmUgREVCVUdNU0coeCkgICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtkZWJ1Z21zZyB4O30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHVCh4KSAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dUKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHVFJBQ0UgICAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdUUkFDRTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR1RSQUNFVE9LKHgpICAgZG8ge2lmIChfREJHX0lGXykge19fREJHVFJBQ0VUT0soeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dMKHgpICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0woeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dUTCh4KSAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1RMKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHT0lEKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dPSUQoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dTVUJPSUQoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1NVQk9JRCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR1ZBUih4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVkFSKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHT0lEUkFOR0UoeCkgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHT0lEUkFOR0UoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dIRVgoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0hFWCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR0hFWFRMSSh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHSEVYVExJKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHSU5ERU5UQUREKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRBREQoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdJTkRFTlRNT1JFKCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVE1PUkUoKTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0lOREVOVExFU1MoKSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UTEVTUygpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHUFJJTlRJTkRFTlQodG9rZW4pIFwKKwlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdQUklOVElOREVOVCh0b2tlbik7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdEVU1QSEVBREVSKHRva2VuLHgpIFwKKwlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QSEVBREVSKHRva2VuLHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHRFVNUFNFQ1RJT04odG9rZW4seCkgXAorCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBTRUNUSU9OKHRva2VuLHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHRFVNUFNFVFVQKHRva2VuLGJ1ZixsZW4pIFwKKwlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QU0VUVVAodG9rZW4sYnVmLGxlbik7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dfTkMoeCkgIGRvIHsgX19EQkdNU0dfTkMoeCk7IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR1RfTkMoeCkgZG8geyBfX0RCR01TR1RfTkMoeCk7IH13aGlsZSgwKQorCisjZWxzZSAgICAgICAgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgOj0gZW5hYmxlIHN0cmVhbWxpbmluZyBvZiB0aGUgY29kZSAqLworCisjZGVmaW5lIERFQlVHTVNHKHgpCisjZGVmaW5lIERFQlVHTVNHVCh4KQorI2RlZmluZSBERUJVR1RSQUNFCisjZGVmaW5lIERFQlVHVFJBQ0VUT0soeCkKKyNkZWZpbmUgREVCVUdNU0dMKHgpCisjZGVmaW5lIERFQlVHTVNHVEwoeCkKKyNkZWZpbmUgREVCVUdNU0dPSUQoeCkKKyNkZWZpbmUgREVCVUdNU0dTVUJPSUQoeCkKKyNkZWZpbmUgREVCVUdNU0dWQVIoeCkKKyNkZWZpbmUgREVCVUdNU0dPSURSQU5HRSh4KQorI2RlZmluZSBERUJVR01TR0hFWCh4KQorI2RlZmluZSBERUJVR0lGKHgpICAgICAgICBpZigwKQorI2RlZmluZSBERUJVR0RVTVAodCxiLGwscCkKKyNkZWZpbmUgREVCVUdJTkRFTlRNT1JFKCkKKyNkZWZpbmUgREVCVUdJTkRFTlRMRVNTKCkKKyNkZWZpbmUgREVCVUdJTkRFTlRBREQoeCkKKyNkZWZpbmUgREVCVUdNU0dIRVhUTEkoeCkKKyNkZWZpbmUgREVCVUdQUklOVElOREVOVCh0b2tlbikKKyNkZWZpbmUgREVCVUdEVU1QSEVBREVSKHRva2VuLHgpCisjZGVmaW5lIERFQlVHRFVNUFNFQ1RJT04odG9rZW4seCkKKyNkZWZpbmUgREVCVUdEVU1QU0VUVVAodG9rZW4sIGJ1ZiwgbGVuKQorCisjZGVmaW5lIERFQlVHTVNHX05DKHgpCisjZGVmaW5lIERFQlVHTVNHVF9OQyh4KQorCisjZW5kaWYgICAgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICp0b2tlbnMpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoY29uc3QgY2hhciAqdG9rZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZyhpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKTsKIAogICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgogICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L291dHB1dF9hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgICAgICovCiAKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CkBAIC0yNiw0ICsxNTQsNCBAQAogI2RlZmluZSBFUlJPUl9NU0coc3RyaW5nKQlzbm1wX3NldF9kZXRhaWwoc3RyaW5nKQogI2VuZGlmCiAKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfTE9HR0lOR19BUElfSCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRfU05NUF9PVVRQVVRfQVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKaW5kZXggYTNhMWRkNi4uMTI1NTk1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKQEAgLTcsMTQgKzcsMzYgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworTkVUU05NUF9JTVBPUlQKK25ldHNubXBfcGR1ICAgICpzbm1wX3BkdV9jcmVhdGUoaW50IHR5cGUpOworTkVUU05NUF9JTVBPUlQKK25ldHNubXBfcGR1ICAgICpzbm1wX2Nsb25lX3BkdShuZXRzbm1wX3BkdSAqcGR1KTsKK05FVFNOTVBfSU1QT1JUCituZXRzbm1wX3BkdSAgICAqc25tcF9maXhfcGR1KCAgbmV0c25tcF9wZHUgKnBkdSwgaW50IGlkeCk7CitORVRTTk1QX0lNUE9SVAordm9pZCAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoIG5ldHNubXBfcGR1ICpwZHUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCiAgICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCiAgICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvcGR1X2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKICAgICAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAppbmRleCAzMzI3Zjg5Li44OGRiYzQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCkBAIC04LDE0ICs4LDI3MiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX2luaXQobmV0c25tcF9zZXNzaW9uICopOworCiAgICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KKyAgICAgKiBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3BlbihzZXNzaW9uKQorICAgICAqICAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwogICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgorICAgICAqIFNldHMgdXAgdGhlIHNlc3Npb24gd2l0aCB0aGUgc25tcF9zZXNzaW9uIGluZm9ybWF0aW9uIHByb3ZpZGVkCisgICAgICogYnkgdGhlIHVzZXIuICBUaGVuIG9wZW5zIGFuZCBiaW5kcyB0aGUgbmVjZXNzYXJ5IFVEUCBwb3J0LgorICAgICAqIEEgaGFuZGxlIHRvIHRoZSBjcmVhdGVkIHNlc3Npb24gaXMgcmV0dXJuZWQgKHRoaXMgaXMgZGlmZmVyZW50IHRoYW4KKyAgICAgKiB0aGUgcG9pbnRlciBwYXNzZWQgdG8gc25tcF9vcGVuKCkpLiAgT24gYW55IGVycm9yLCBOVUxMIGlzIHJldHVybmVkCisgICAgICogYW5kIHNubXBfZXJybm8gaXMgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW4obmV0c25tcF9zZXNzaW9uICopOworCisgICAgLyoKKyAgICAgKiBpbnQgc25tcF9jbG9zZShzZXNzaW9uKQorICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CisgICAgICoKKyAgICAgKiBDbG9zZSB0aGUgaW5wdXQgc2Vzc2lvbi4gIEZyZWVzIGFsbCBkYXRhIGFsbG9jYXRlZCBmb3IgdGhlIHNlc3Npb24sCisgICAgICogZGVxdWV1ZXMgYW55IHBlbmRpbmcgcmVxdWVzdHMsIGFuZCBjbG9zZXMgYW55IHNvY2tldHMgYWxsb2NhdGVkIGZvcgorICAgICAqIHRoZSBzZXNzaW9uLiAgUmV0dXJucyAwIG9uIGVycm9yLCAxIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIHNubXBfY2xvc2Vfc2Vzc2lvbnMoKSBkb2VzIHRoZSBzYW1lIHRoaW5nIGZvciBhbGwgb3BlbiBzZXNzaW9ucworICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvc2UobmV0c25tcF9zZXNzaW9uICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvc2Vfc2Vzc2lvbnModm9pZCk7CisKKworICAgIC8qCisgICAgICogaW50IHNubXBfc2VuZChzZXNzaW9uLCBwZHUpCisgICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAgICAgKiAgICAgbmV0c25tcF9wZHUgICAgICAqcGR1OworICAgICAqCisgICAgICogU2VuZHMgdGhlIGlucHV0IHBkdSBvbiB0aGUgc2Vzc2lvbiBhZnRlciBjYWxsaW5nIHNubXBfYnVpbGQgdG8gY3JlYXRlCisgICAgICogYSBzZXJpYWxpemVkIHBhY2tldC4gIElmIG5lY2Vzc2FyeSwgc2V0IHNvbWUgb2YgdGhlIHBkdSBkYXRhIGZyb20gdGhlCisgICAgICogc2Vzc2lvbiBkZWZhdWx0cy4gIEFkZCBhIHJlcXVlc3QgY29ycmVzcG9uZGluZyB0byB0aGlzIHBkdSB0byB0aGUgbGlzdAorICAgICAqIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIG9uIHRoaXMgc2Vzc2lvbiwgdGhlbiBzZW5kIHRoZSBwZHUuCisgICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgZ2VuZXJhdGVkIHBhY2tldCBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgMS4KKyAgICAgKiBPbiBhbnkgZXJyb3IsIDAgaXMgcmV0dXJuZWQuCisgICAgICogVGhlIHBkdSBpcyBmcmVlZCBieSBzbm1wX3NlbmQoKSB1bmxlc3MgYSBmYWlsdXJlIG9jY3VyZWQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZW5kKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqKTsKKworICAgIC8qCisgICAgICogaW50IHNubXBfYXN5bmNfc2VuZChzZXNzaW9uLCBwZHUsIGNhbGxiYWNrLCBjYl9kYXRhKQorICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CisgICAgICogICAgIG5ldHNubXBfcGR1ICAgICAgKnBkdTsKKyAgICAgKiAgICAgbmV0c25tcF9jYWxsYmFjayBjYWxsYmFjazsKKyAgICAgKiAgICAgdm9pZCAgICpjYl9kYXRhOworICAgICAqCisgICAgICogU2VuZHMgdGhlIGlucHV0IHBkdSBvbiB0aGUgc2Vzc2lvbiBhZnRlciBjYWxsaW5nIHNubXBfYnVpbGQgdG8gY3JlYXRlCisgICAgICogYSBzZXJpYWxpemVkIHBhY2tldC4gIElmIG5lY2Vzc2FyeSwgc2V0IHNvbWUgb2YgdGhlIHBkdSBkYXRhIGZyb20gdGhlCisgICAgICogc2Vzc2lvbiBkZWZhdWx0cy4gIEFkZCBhIHJlcXVlc3QgY29ycmVzcG9uZGluZyB0byB0aGlzIHBkdSB0byB0aGUgbGlzdAorICAgICAqIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIG9uIHRoaXMgc2Vzc2lvbiBhbmQgc3RvcmUgY2FsbGJhY2sgYW5kIGRhdGEsCisgICAgICogdGhlbiBzZW5kIHRoZSBwZHUuCisgICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgZ2VuZXJhdGVkIHBhY2tldCBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgMS4KKyAgICAgKiBPbiBhbnkgZXJyb3IsIDAgaXMgcmV0dXJuZWQuCisgICAgICogVGhlIHBkdSBpcyBmcmVlZCBieSBzbm1wX3NlbmQoKSB1bmxlc3MgYSBmYWlsdXJlIG9jY3VyZWQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9hc3luY19zZW5kKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFjaywgdm9pZCAqKTsKKworCisgICAgLyoKKyAgICAgKiB2b2lkIHNubXBfcmVhZChmZHNldCkKKyAgICAgKiAgICAgZmRfc2V0ICAqZmRzZXQ7CisgICAgICoKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUgZmQncyBzZXQgaW4gdGhlIGZkc2V0IGJlbG9uZyB0bworICAgICAqIHNubXAuICBFYWNoIHNvY2tldCB3aXRoIGl0J3MgZmQgc2V0IGhhcyBhIHBhY2tldCByZWFkIGZyb20gaXQKKyAgICAgKiBhbmQgc25tcF9wYXJzZSBpcyBjYWxsZWQgb24gdGhlIHBhY2tldCByZWNlaXZlZC4gIFRoZSByZXN1bHRpbmcgcGR1CisgICAgICogaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayByb3V0aW5lIGZvciB0aGF0IHNlc3Npb24uICBJZiB0aGUgY2FsbGJhY2sKKyAgICAgKiByb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgcGR1IGFuZCBpdCdzIHJlcXVlc3QgYXJlIGRlbGV0ZWQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9yZWFkKGZkX3NldCAqKTsKKworICAgIC8qCisgICAgICogc25tcF9yZWFkMigpIGlzIHNpbWlsYXIgdG8gc25tcF9yZWFkKCksIGJ1dCBhY2NlcHRzIGEgcG9pbnRlciB0byBhCisgICAgICogbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldCBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0byBhIHJlZ3VsYXIgZmlsZQorICAgICAqIGRlc2NyaXB0b3Igc2V0LgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVhZDIobmV0c25tcF9sYXJnZV9mZF9zZXQgKik7CisKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc3luY2hfcmVzcG9uc2UobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiopOworCisgICAgLyoKKyAgICAgKiBpbnQgc25tcF9zZWxlY3RfaW5mbyhudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jaykKKyAgICAgKiBpbnQgKm51bWZkczsKKyAgICAgKiBmZF9zZXQgICAqZmRzZXQ7CisgICAgICogc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7CisgICAgICogaW50ICpibG9jazsKKyAgICAgKgorICAgICAqIFJldHVybnMgaW5mbyBhYm91dCB3aGF0IHNubXAgcmVxdWlyZXMgZnJvbSBhIHNlbGVjdCBzdGF0ZW1lbnQuCisgICAgICogbnVtZmRzIGlzIHRoZSBudW1iZXIgb2YgZmRzIGluIHRoZSBsaXN0IHRoYXQgYXJlIHNpZ25pZmljYW50LgorICAgICAqIEFsbCBmaWxlIGRlc2NyaXB0b3JzIG9wZW5lZCBmb3IgU05NUCBhcmUgT1InZCBpbnRvIHRoZSBmZHNldC4KKyAgICAgKiBJZiBhY3Rpdml0eSBvY2N1cnMgb24gYW55IG9mIHRoZXNlIGZpbGUgZGVzY3JpcHRvcnMsIHNubXBfcmVhZAorICAgICAqIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGF0IGZpbGUgZGVzY3JpcHRvciBzZXQuCisgICAgICoKKyAgICAgKiBUaGUgdGltZW91dCBpcyB0aGUgbGF0ZXN0IHRpbWUgdGhhdCBTTk1QIGNhbiB3YWl0IGZvciBhIHRpbWVvdXQuICBUaGUKKyAgICAgKiBzZWxlY3Qgc2hvdWxkIGJlIGRvbmUgd2l0aCB0aGUgbWluaW11bSB0aW1lIGJldHdlZW4gdGltZW91dCBhbmQgYW55IG90aGVyCisgICAgICogdGltZW91dHMgbmVjZXNzYXJ5LiAgVGhpcyBzaG91bGQgYmUgY2hlY2tlZCB1cG9uIGVhY2ggaW52b2NhdGlvbiBvZiBzZWxlY3QuCisgICAgICogSWYgYSB0aW1lb3V0IGlzIHJlY2VpdmVkLCBzbm1wX3RpbWVvdXQgc2hvdWxkIGJlIGNhbGxlZCB0byBjaGVjayBpZiB0aGUKKyAgICAgKiB0aW1lb3V0IHdhcyBmb3IgU05NUC4gIChzbm1wX3RpbWVvdXQgaXMgaWRlbXBvdGVudCkKKyAgICAgKgorICAgICAqIEJsb2NrIGlzIDEgaWYgdGhlIHNlbGVjdCBpcyByZXF1ZXN0ZWQgdG8gYmxvY2sgaW5kZWZpbml0ZWx5LCByYXRoZXIgdGhhbgorICAgICAqIHRpbWUgb3V0LiAgSWYgYmxvY2sgaXMgaW5wdXQgYXMgMSwgdGhlIHRpbWVvdXQgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzCisgICAgICogdW5kZWZpbmVkLCBidXQgaXQgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHNldHRpbmcgaW4gc25tcF9zZWxlY3RfaW5mby4gIE9uCisgICAgICogcmV0dXJuLCBpZiBibG9jayBpcyB0cnVlLCB0aGUgdmFsdWUgb2YgdGltZW91dCB3aWxsIGJlIHVuZGVmaW5lZC4KKyAgICAgKgorICAgICAqIHNubXBfc2VsZWN0X2luZm8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9wZW4gc29ja2V0cy4gIChpLmUuIFRoZSBudW1iZXIKKyAgICAgKiBvZiBzZXNzaW9ucyBvcGVuKQorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2VsZWN0X2luZm8oaW50ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKTsKKworICAgIC8qCisgICAgICogc25tcF9zZWxlY3RfaW5mbzIoKSBpcyBzaW1pbGFyIHRvIHNubXBfc2VsZWN0X2luZm8oKSwgYnV0IGFjY2VwdHMgYQorICAgICAqIHBvaW50ZXIgdG8gYSBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0IGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGEKKyAgICAgKiByZWd1bGFyIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZWxlY3RfaW5mbzIoaW50ICosIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqKTsKKworI2RlZmluZSBORVRTTk1QX1NFTEVDVF9OT0ZMQUdTICAweDAwCisjZGVmaW5lIE5FVFNOTVBfU0VMRUNUX05PQUxBUk1TIDB4MDEKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm9fZmxhZ3Modm9pZCAqLCBpbnQgKiwgZmRfc2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKiwgaW50KTsKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncyh2b2lkICosIGludCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICosIGludCk7CisKKyAgICAvKgorICAgICAqIHZvaWQgc25tcF90aW1lb3V0KCk7CisgICAgICoKKyAgICAgKiBzbm1wX3RpbWVvdXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdGltZW91dCBmcm9tIHNubXBfc2VsZWN0X2luZm8KKyAgICAgKiBleHBpcmVzLCBidXQgaXQgaXMgaWRlbXBvdGVudCwgc28gc25tcF90aW1lb3V0IGNhbiBiZSBwb2xsZWQgKHByb2JhYmx5IGEKKyAgICAgKiBjcHUgZXhwZW5zaXZlIHByb3Bvc2l0aW9uKS4gIHNubXBfdGltZW91dCBjaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUKKyAgICAgKiBzZXNzaW9ucyBoYXZlIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QgdGhhdCBoYXMgdGltZWQgb3V0LiAgSWYgaXQgZmluZHMgb25lCisgICAgICogKG9yIG1vcmUpLCBhbmQgdGhhdCBwZHUgaGFzIG1vcmUgcmV0cmllcyBhdmFpbGFibGUsIGEgbmV3IHBhY2tldCBpcyBmb3JtZWQKKyAgICAgKiBmcm9tIHRoZSBwZHUgYW5kIGlzIHJlc2VudC4gIElmIHRoZXJlIGFyZSBubyBtb3JlIHJldHJpZXMgYXZhaWxhYmxlLCB0aGUKKyAgICAgKiBjYWxsYmFjayBmb3IgdGhlIHNlc3Npb24gaXMgdXNlZCB0byBhbGVydCB0aGUgdXNlciBvZiB0aGUgdGltZW91dC4KKyAgICAgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfdGltZW91dCh2b2lkKTsKKworICAgIC8qCisgICAgICogc2luZ2xlIHNlc3Npb24gQVBJLgorICAgICAqCisgICAgICogVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gc2ltaWxhciBhY3Rpb25zIGFzIHNubXBfWFggZnVuY3Rpb25zLAorICAgICAqIGJ1dCBvcGVyYXRlIG9uIGEgc2luZ2xlIHNlc3Npb24gb25seS4KKyAgICAgKgorICAgICAqIFN5bm9wc2lzOgorICAgICAKKyAgICAgdm9pZCAqIHNlc3NwOworICAgICBuZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOworICAgICBuZXRzbm1wX3BkdSAqcGR1LCAqcmVzcG9uc2U7CisgICAgIAorICAgICBzbm1wX3Nlc3NfaW5pdCgmc2Vzc2lvbik7CisgICAgIHNlc3Npb24ucmV0cmllcyA9IC4uLgorICAgICBzZXNzaW9uLnJlbW90ZV9wb3J0ID0gLi4uCisgICAgIHNlc3NwID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOworICAgICBzcyA9IHNubXBfc2Vzc19zZXNzaW9uKHNlc3NwKTsKKyAgICAgaWYgKHNzID09IE5VTEwpCisgICAgIGV4aXQoMSk7CisgICAgIC4uLgorICAgICBpZiAoc3MtPmNvbW11bml0eSkgZnJlZShzcy0+Y29tbXVuaXR5KTsKKyAgICAgc3MtPmNvbW11bml0eSA9IHN0cmR1cChnYXRld2F5KTsKKyAgICAgc3MtPmNvbW11bml0eV9sZW4gPSBzdHJsZW4oZ2F0ZXdheSk7CisgICAgIC4uLgorICAgICBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc2Vzc3AsIHBkdSwgJnJlc3BvbnNlKTsKKyAgICAgLi4uCisgICAgIHNubXBfc2Vzc19jbG9zZShzZXNzcCk7CisgICAgIAorICAgICAqIFNlZSBhbHNvOgorICAgICAqIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSwgaW4gc25tcF9jbGllbnQuaC4KKyAgICAgCisgICAgICogTm90ZXM6CisgICAgICogIDEuIEludm9rZSBzbm1wX3Nlc3Nfc2Vzc2lvbiBhZnRlciBzbm1wX3Nlc3Nfb3Blbi4KKyAgICAgKiAgMi4gc25tcF9zZXNzX3Nlc3Npb24gcmV0dXJuIHZhbHVlIGlzIGFuIG9wYXF1ZSBwb2ludGVyLgorICAgICAqICAzLiBEbyBOT1QgZnJlZSBtZW1vcnkgcmV0dXJuZWQgYnkgc25tcF9zZXNzX3Nlc3Npb24uCisgICAgICogIDQuIFJlcGxhY2Ugc25tcF9zZW5kKHNzLHBkdSkgd2l0aCBzbm1wX3Nlc3Nfc2VuZChzZXNzcCxwZHUpCisgICAgICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3Nfb3BlbihuZXRzbm1wX3Nlc3Npb24gKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAqc25tcF9zZXNzX3BvaW50ZXIobmV0c25tcF9zZXNzaW9uICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbih2b2lkICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAodm9pZCAqKTsKKworCisgICAgLyoKKyAgICAgKiB1c2UgcmV0dXJuIHZhbHVlIGZyb20gc25tcF9zZXNzX29wZW4gYXMgdm9pZCAqIHBhcmFtZXRlciAKKyAgICAgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZW5kKHZvaWQgKiwgbmV0c25tcF9wZHUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX2FzeW5jX3NlbmQodm9pZCAqLCBuZXRzbm1wX3BkdSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrLCB2b2lkICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICosIGludCAqLCBmZF9zZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yKHZvaWQgKiwgaW50ICosCisJCQkJCSAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICopOworICAgIC8qCisgICAgICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MsIC0xIGlmIGZhaWwuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3JlYWQodm9pZCAqLCBmZF9zZXQgKik7CisgICAgLyoKKyAgICAgKiBTaW1pbGFyIHRvIHNubXBfc2Vzc19yZWFkKCksIGJ1dCBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGxhcmdlIGZpbGUKKyAgICAgKiBkZXNjcmlwdG9yIHNldCBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0byBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3JlYWQyKHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc190aW1lb3V0KHZvaWQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHZvaWQgKik7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uodm9pZCAqLCBuZXRzbm1wX3BkdSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KKyAgICAgKgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L3Nlc3Npb25fYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgogICAgICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaAppbmRleCA0MzI3MmYxLi4wMmQ0OTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaApAQCAtMjIsMyArMjIsNiBAQAogCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKworLyogdGhlIGxlZ2FjeSBzeW1ib2wgTk9BQ0NFU1MgY2xhc2hlcyB3aXRoIHRoZSBzeXN0ZW0gaGVhZGVycy4gUmVtb3ZlIGl0LiAqLworI2RlZmluZSBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaAppbmRleCAxNGFlOGFlLi5hOWI3NmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaApAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4JLyogdWludDMyX3QgKi8KICNlbmRpZgogCi0jdW5kZWYgSEFWRV9XSU5TT0NLX0gKICN1bmRlZiBic2RsaWtlCiAjdW5kZWYgTUJTVEFUX1NZTUJPTAogI3VuZGVmIFRPVEFMX01FTU9SWV9TWU1CT0wKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgKaW5kZXggNjc1MGNmMS4uNWEwNjViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgKQEAgLTUsMyArNSw0IEBACiAgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgogICovCiAjdW5kZWYgSEFWRV9GU1RBQl9ICisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzczMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogV2hpbGUgRGFyd2luIDEwIChha2EsIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkKSBpcyAiQlNELWxpa2UiLCBpdCBkaWZmZXJzCisgKiBzdWJzdGFudGlhbGx5IGVub3VnaCB0byBub3Qgd2FycmFudCBwcmV0ZW5kaW5nIGl0IGlzIGEgQlNEIGZsYXZvci4KKyAqIFRoaXMgZmlyc3Qgc2VjdGlvbiBhcmUgdGhlIHZlc3RpZ2FsIEJTRCByZW1uYW50cy4KKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKy8qCisgKiBCU0Qgc3lzdGVtcyB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGxvb2tpbmcgdXAgc29ja2FkZHJfaW4gdmFsdWVzIAorICovCisvKiAjZGVmaW5lIE5FRURfS0xHRVRTQSAxICovCisKKy8qCisgKiBBUlBfU2Nhbl9OZXh0IG5lZWRzIGEgNHRoIGlmSW5kZXggYXJndW1lbnQgCisgKi8KKyNkZWZpbmUgQVJQX1NDQU5fRk9VUl9BUkdVTUVOVFMgMQorCisjZGVmaW5lIENIRUNLX1JUX0ZMQUdTIDEKKworLyoKKyAqIHRoaXMgaXMgbm90IGdvb2QgZW5vdWdoIGJlZm9yZSBmcmVlYnNkMyEgCisgKi8KKy8qICN1bmRlZiBIQVZFX05FVF9JRl9NSUJfSCAqLworCisvKgorICogVGhpcyBzZWN0aW9uIGFkZHMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZyb20gZ2VuZXJpYy5oCisgKiAoYSBmaWxlIHdlIGRvbid0IGluY2x1ZGUgaGVyZSkKKyAqLworCisvKgorICogdWRwX2lucGNiIGxpc3Qgc3ltYm9sLCBlLmcuIGZvciBtaWJJSS91ZHBUYWJsZS5jCisgKi8KKyNkZWZpbmUgSU5QX05FWFRfU1lNQk9MIGlucF9uZXh0CisKKy8qCisgKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBNYWMgT1MgWCAxMC41IChhbmQgbGF0ZXIpIHNwZWNpZmljIGFkZGl0aW9ucy4KKyAqLworI2RlZmluZSBkYXJ3aW4gMTAKKyNpZm5kZWYgZGFyd2luMTAKKyMgICBkZWZpbmUgZGFyd2luMTAgZGFyd2luCisjZW5kaWYKKworLyoKKyAqIE1hYyBPUyBYIHNob3VsZCBvbmx5IHVzZSB0aGUgbW9kZXJuIEFQSSBhbmQgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgMQorI2VuZGlmCisKKy8qCisgKiBsb29rcyBsaWtlIHRoZSBJRlRhYmxlIHN0dWZmIHdvcmtzIGJldHRlciB0aGFuIHRoZSBtaWJJSSB2ZXJzaW9ucworICovCisgCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCisKKy8qCisgKiB1c2UgbmV3IGhvc3QgcmVzb3VyY2VzIGZpbGVzIGFzIHdlbGwKKyAqLworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dJTlNUX1JFV1JJVEVTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1JFV1JJVEVTCisjdW5kZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTCAxCisKKy8qCisgKiBFbmFibGluZyB0aGlzIHJlc3RyaWN0cyB0aGUgY29tcGlsZXIgdG8gbW9zdGx5IHB1YmxpYyBBUElzLgorICovCisjaWZuZGVmIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRQorI2RlZmluZSBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UgMQorI2VuZGlmCisjaWZuZGVmIF9fQVBQTEVfQVBJX1VOU1RBQkxFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1VOU1RBQkxFIDEKKyNlbmRpZgorCisvKgorICogRGFyd2luJ3MgdG9vbHMgYXJlIGNhcGFibGUgb2YgYnVpbGRpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgcGFzcy4KKyAqIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybSBkZWZpbml0aW9ucyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgY29tcGlsZSB0aW1lLgorICovCisjaWZkZWYgQllURV9PUkRFUgorIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KKyAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCisgKi8KKyN1bmRlZiBIQVZFX0ZTVEFCX0gKKworI2RlZmluZSBTV0FQRklMRV9ESVIgIi9wcml2YXRlL3Zhci92bSIKKyNkZWZpbmUgU1dBUEZJTEVfUFJFRklYICJzd2FwZmlsZSIKKworLyoKKyAqIFRoZXNlIGFwcGFyZW50bHkgdXNlZCB0byBiZSBpbiBuZXRpbmV0L3RjcF90aW1lcnMuaCwgYnV0IHdlbnQgYXdheSBpbgorICogMTAuNC4yLiBEZWZpbmUgdGhlbSBoZXJlIHRpbCB3ZSBmaW5kIG91dCBhIHdheSB0byBnZXQgdGhlIHJlYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFRDUFRWX01JTiAgICAgICAoICAxKlBSX1NMT1dIWikgICAgICAgICAvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLworI2RlZmluZSBUQ1BUVl9SRVhNVE1BWCAgKCA2NCpQUl9TTE9XSFopICAgICAgICAgLyogbWF4IGFsbG93YWJsZSBSRVhNVCB2YWx1ZSAqLworCisvKgorICogQmVjYXVzZSBNYWMgT1MgWCBpcyBidWlsdCBvbiBNYWNoLCBpdCBkb2VzIG5vdCBwcm92aWRlIGEgQlNELWNvbXBhdGlibGUKKyAqIFZNIHN0YXRpc3RpY3MgQVBJLgorICovCisjZGVmaW5lIFVTRV9NQUNIX0hPU1RfU1RBVElTVElDUyAxCisKKy8qCisgKiBUaGlzIHRlbGxzIGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBJUHY2IHRoYXQgdGhlIHN0cnVjdHVyZXMgYXJlIHVuaWZpZWQsCisgKiBpLmUuLCBJUHY0IGFuZCBJUHY2IHVzZSB0aGUgc2FtZSBzdHJ1Y3RzLgorICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIGEgY29uZmlndXJlIGRpcmVjdGl2ZS4KKyAqLworLyogI2RlZmluZSBVU0VfVU5JRklFRF9JUFY2X1NUUlVDVFMgMSAqLworI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZworCisvKgorICogdXRpbGl0eSBtYWNybyB1c2VkIGluIHNldmVyYWwgZGFyd2luIHNwZWNpZmljIGZpbGVzCisgKi8KKyNkZWZpbmUgU05NUF9DRlJlbGVhc2UoeCkgZG8geyBpZiAoeCkgeyBDRlJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IH0gd2hpbGUoMCkKKworLyoKKyAqIE1hYyBPUyBYIHJ1bnMgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLAorICogICB3aGljaCBoYW5kbGUgdWRwVGFibGUgaW5kZXggdmFsdWVzIGRpZmZlcmVudGx5CisgKi8KKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KKyNpZmRlZiBUQVJHRVRfUlRfTElUVExFX0VORElBTgorI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjExLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMS5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogV2hpbGUgRGFyd2luIDEwIChha2EsIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkKSBpcyAiQlNELWxpa2UiLCBpdCBkaWZmZXJzCisgKiBzdWJzdGFudGlhbGx5IGVub3VnaCB0byBub3Qgd2FycmFudCBwcmV0ZW5kaW5nIGl0IGlzIGEgQlNEIGZsYXZvci4KKyAqIFRoaXMgZmlyc3Qgc2VjdGlvbiBhcmUgdGhlIHZlc3RpZ2FsIEJTRCByZW1uYW50cy4KKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKy8qCisgKiBCU0Qgc3lzdGVtcyB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGxvb2tpbmcgdXAgc29ja2FkZHJfaW4gdmFsdWVzIAorICovCisvKiAjZGVmaW5lIE5FRURfS0xHRVRTQSAxICovCisKKy8qCisgKiBBUlBfU2Nhbl9OZXh0IG5lZWRzIGEgNHRoIGlmSW5kZXggYXJndW1lbnQgCisgKi8KKyNkZWZpbmUgQVJQX1NDQU5fRk9VUl9BUkdVTUVOVFMgMQorCisjZGVmaW5lIENIRUNLX1JUX0ZMQUdTIDEKKworLyoKKyAqIHRoaXMgaXMgbm90IGdvb2QgZW5vdWdoIGJlZm9yZSBmcmVlYnNkMyEgCisgKi8KKy8qICN1bmRlZiBIQVZFX05FVF9JRl9NSUJfSCAqLworCisvKgorICogVGhpcyBzZWN0aW9uIGFkZHMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZyb20gZ2VuZXJpYy5oCisgKiAoYSBmaWxlIHdlIGRvbid0IGluY2x1ZGUgaGVyZSkKKyAqLworCisvKgorICogdWRwX2lucGNiIGxpc3Qgc3ltYm9sLCBlLmcuIGZvciBtaWJJSS91ZHBUYWJsZS5jCisgKi8KKyNkZWZpbmUgSU5QX05FWFRfU1lNQk9MIGlucF9uZXh0CisKKy8qCisgKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBNYWMgT1MgWCAxMC41IChhbmQgbGF0ZXIpIHNwZWNpZmljIGFkZGl0aW9ucy4KKyAqLworI2RlZmluZSBkYXJ3aW4gMTEKKyNpZm5kZWYgZGFyd2luMTEKKyMgICBkZWZpbmUgZGFyd2luMTEgZGFyd2luCisjZW5kaWYKKworLyoKKyAqIE1hYyBPUyBYIHNob3VsZCBvbmx5IHVzZSB0aGUgbW9kZXJuIEFQSSBhbmQgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgMQorI2VuZGlmCisKKy8qCisgKiBsb29rcyBsaWtlIHRoZSBJRlRhYmxlIHN0dWZmIHdvcmtzIGJldHRlciB0aGFuIHRoZSBtaWJJSSB2ZXJzaW9ucworICovCisgCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCisKKy8qCisgKiB1c2UgbmV3IGhvc3QgcmVzb3VyY2VzIGZpbGVzIGFzIHdlbGwKKyAqLworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dJTlNUX1JFV1JJVEVTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1JFV1JJVEVTCisjdW5kZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTCAxCisKKy8qCisgKiBFbmFibGluZyB0aGlzIHJlc3RyaWN0cyB0aGUgY29tcGlsZXIgdG8gbW9zdGx5IHB1YmxpYyBBUElzLgorICovCisjaWZuZGVmIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRQorI2RlZmluZSBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UgMQorI2VuZGlmCisjaWZuZGVmIF9fQVBQTEVfQVBJX1VOU1RBQkxFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1VOU1RBQkxFIDEKKyNlbmRpZgorCisvKgorICogRGFyd2luJ3MgdG9vbHMgYXJlIGNhcGFibGUgb2YgYnVpbGRpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgcGFzcy4KKyAqIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybSBkZWZpbml0aW9ucyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgY29tcGlsZSB0aW1lLgorICovCisjaWZkZWYgQllURV9PUkRFUgorIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KKyAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCisgKi8KKyN1bmRlZiBIQVZFX0ZTVEFCX0gKKworI2RlZmluZSBTV0FQRklMRV9ESVIgIi9wcml2YXRlL3Zhci92bSIKKyNkZWZpbmUgU1dBUEZJTEVfUFJFRklYICJzd2FwZmlsZSIKKworLyoKKyAqIFRoZXNlIGFwcGFyZW50bHkgdXNlZCB0byBiZSBpbiBuZXRpbmV0L3RjcF90aW1lcnMuaCwgYnV0IHdlbnQgYXdheSBpbgorICogMTAuNC4yLiBEZWZpbmUgdGhlbSBoZXJlIHRpbCB3ZSBmaW5kIG91dCBhIHdheSB0byBnZXQgdGhlIHJlYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFRDUFRWX01JTiAgICAgICAoICAxKlBSX1NMT1dIWikgICAgICAgICAvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLworI2RlZmluZSBUQ1BUVl9SRVhNVE1BWCAgKCA2NCpQUl9TTE9XSFopICAgICAgICAgLyogbWF4IGFsbG93YWJsZSBSRVhNVCB2YWx1ZSAqLworCisvKgorICogQmVjYXVzZSBNYWMgT1MgWCBpcyBidWlsdCBvbiBNYWNoLCBpdCBkb2VzIG5vdCBwcm92aWRlIGEgQlNELWNvbXBhdGlibGUKKyAqIFZNIHN0YXRpc3RpY3MgQVBJLgorICovCisjZGVmaW5lIFVTRV9NQUNIX0hPU1RfU1RBVElTVElDUyAxCisKKy8qCisgKiBUaGlzIHRlbGxzIGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBJUHY2IHRoYXQgdGhlIHN0cnVjdHVyZXMgYXJlIHVuaWZpZWQsCisgKiBpLmUuLCBJUHY0IGFuZCBJUHY2IHVzZSB0aGUgc2FtZSBzdHJ1Y3RzLgorICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIGEgY29uZmlndXJlIGRpcmVjdGl2ZS4KKyAqLworLyogI2RlZmluZSBVU0VfVU5JRklFRF9JUFY2X1NUUlVDVFMgMSAqLworI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZworCisvKgorICogdXRpbGl0eSBtYWNybyB1c2VkIGluIHNldmVyYWwgZGFyd2luIHNwZWNpZmljIGZpbGVzCisgKi8KKyNkZWZpbmUgU05NUF9DRlJlbGVhc2UoeCkgZG8geyBpZiAoeCkgeyBDRlJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IH0gd2hpbGUoMCkKKworLyoKKyAqIE1hYyBPUyBYIHJ1bnMgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLAorICogICB3aGljaCBoYW5kbGUgdWRwVGFibGUgaW5kZXggdmFsdWVzIGRpZmZlcmVudGx5CisgKi8KKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KKyNpZmRlZiBUQVJHRVRfUlRfTElUVExFX0VORElBTgorI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQorI2VuZGlmCisKKy8qCisgKiBhcyBvZiA3LzIwMTAsIG9wZW5zc2wgb24gZGFyd2luIGRvZXMgbm90IGhhdmUgc2hhMjU2CisgKi8KKyNkZWZpbmUgT1BFTlNTTF9OT19TSEEyNTYgMQorI2RlZmluZSBPUEVOU1NMX05PX1NIQTUxMiAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMi5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDMxZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTIuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIFdoaWxlIERhcndpbiAxMCAoYWthLCBNYWMgT1MgWCAxMC42IFNub3cgTGVvcGFyZCkgaXMgIkJTRC1saWtlIiwgaXQgZGlmZmVycworICogc3Vic3RhbnRpYWxseSBlbm91Z2ggdG8gbm90IHdhcnJhbnQgcHJldGVuZGluZyBpdCBpcyBhIEJTRCBmbGF2b3IuCisgKiBUaGlzIGZpcnN0IHNlY3Rpb24gYXJlIHRoZSB2ZXN0aWdhbCBCU0QgcmVtbmFudHMuCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisvKgorICogQlNEIHN5c3RlbXMgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBvZiBsb29raW5nIHVwIHNvY2thZGRyX2luIHZhbHVlcyAKKyAqLworLyogI2RlZmluZSBORUVEX0tMR0VUU0EgMSAqLworCisvKgorICogQVJQX1NjYW5fTmV4dCBuZWVkcyBhIDR0aCBpZkluZGV4IGFyZ3VtZW50IAorICovCisjZGVmaW5lIEFSUF9TQ0FOX0ZPVVJfQVJHVU1FTlRTIDEKKworI2RlZmluZSBDSEVDS19SVF9GTEFHUyAxCisKKy8qCisgKiB0aGlzIGlzIG5vdCBnb29kIGVub3VnaCBiZWZvcmUgZnJlZWJzZDMhIAorICovCisvKiAjdW5kZWYgSEFWRV9ORVRfSUZfTUlCX0ggKi8KKworLyoKKyAqIFRoaXMgc2VjdGlvbiBhZGRzIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmcm9tIGdlbmVyaWMuaAorICogKGEgZmlsZSB3ZSBkb24ndCBpbmNsdWRlIGhlcmUpCisgKi8KKworLyoKKyAqIHVkcF9pbnBjYiBsaXN0IHN5bWJvbCwgZS5nLiBmb3IgbWliSUkvdWRwVGFibGUuYworICovCisjZGVmaW5lIElOUF9ORVhUX1NZTUJPTCBpbnBfbmV4dAorCisvKgorICogVGhpcyBzZWN0aW9uIGRlZmluZXMgTWFjIE9TIFggMTAuNSAoYW5kIGxhdGVyKSBzcGVjaWZpYyBhZGRpdGlvbnMuCisgKi8KKyNkZWZpbmUgZGFyd2luIDEyCisjaWZuZGVmIGRhcndpbjEyCisjICAgZGVmaW5lIGRhcndpbjEyIGRhcndpbgorI2VuZGlmCisKKy8qCisgKiBNYWMgT1MgWCBzaG91bGQgb25seSB1c2UgdGhlIG1vZGVybiBBUEkgYW5kIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIDEKKyNlbmRpZgorCisvKgorICogbG9va3MgbGlrZSB0aGUgSUZUYWJsZSBzdHVmZiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgbWliSUkgdmVyc2lvbnMKKyAqLworIAorI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUworCisvKgorICogdXNlIG5ldyBob3N0IHJlc291cmNlcyBmaWxlcyBhcyB3ZWxsCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXSU5TVF9SRVdSSVRFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9SRVdSSVRFUworI3VuZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwgMQorCisvKgorICogRW5hYmxpbmcgdGhpcyByZXN0cmljdHMgdGhlIGNvbXBpbGVyIHRvIG1vc3RseSBwdWJsaWMgQVBJcy4KKyAqLworI2lmbmRlZiBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UKKyNkZWZpbmUgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFIDEKKyNlbmRpZgorI2lmbmRlZiBfX0FQUExFX0FQSV9VTlNUQUJMRQorI2RlZmluZSBfX0FQUExFX0FQSV9VTlNUQUJMRSAxCisjZW5kaWYKKworLyoKKyAqIERhcndpbidzIHRvb2xzIGFyZSBjYXBhYmxlIG9mIGJ1aWxkaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgaW4gb25lIHBhc3MuCisgKiBBcyBhIHJlc3VsdCwgcGxhdGZvcm0gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIGNvbXBpbGUgdGltZS4KKyAqLworI2lmZGVmIEJZVEVfT1JERVIKKyMgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCisgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgorICovCisjdW5kZWYgSEFWRV9GU1RBQl9ICisKKyNkZWZpbmUgU1dBUEZJTEVfRElSICIvcHJpdmF0ZS92YXIvdm0iCisjZGVmaW5lIFNXQVBGSUxFX1BSRUZJWCAic3dhcGZpbGUiCisKKy8qCisgKiBUaGVzZSBhcHBhcmVudGx5IHVzZWQgdG8gYmUgaW4gbmV0aW5ldC90Y3BfdGltZXJzLmgsIGJ1dCB3ZW50IGF3YXkgaW4KKyAqIDEwLjQuMi4gRGVmaW5lIHRoZW0gaGVyZSB0aWwgd2UgZmluZCBvdXQgYSB3YXkgdG8gZ2V0IHRoZSByZWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBUQ1BUVl9NSU4gICAgICAgKCAgMSpQUl9TTE9XSFopICAgICAgICAgLyogbWluaW11bSBhbGxvd2FibGUgdmFsdWUgKi8KKyNkZWZpbmUgVENQVFZfUkVYTVRNQVggICggNjQqUFJfU0xPV0haKSAgICAgICAgIC8qIG1heCBhbGxvd2FibGUgUkVYTVQgdmFsdWUgKi8KKworLyoKKyAqIEJlY2F1c2UgTWFjIE9TIFggaXMgYnVpbHQgb24gTWFjaCwgaXQgZG9lcyBub3QgcHJvdmlkZSBhIEJTRC1jb21wYXRpYmxlCisgKiBWTSBzdGF0aXN0aWNzIEFQSS4KKyAqLworI2RlZmluZSBVU0VfTUFDSF9IT1NUX1NUQVRJU1RJQ1MgMQorCisvKgorICogVGhpcyB0ZWxscyBjb2RlIHRoYXQgbWFuaXB1bGF0ZXMgSVB2NiB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1bmlmaWVkLAorICogaS5lLiwgSVB2NCBhbmQgSVB2NiB1c2UgdGhlIHNhbWUgc3RydWN0cy4KKyAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgd2l0aCBhIGNvbmZpZ3VyZSBkaXJlY3RpdmUuCisgKi8KKy8qICNkZWZpbmUgVVNFX1VOSUZJRURfSVBWNl9TVFJVQ1RTIDEgKi8KKyN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKKworLyoKKyAqIHV0aWxpdHkgbWFjcm8gdXNlZCBpbiBzZXZlcmFsIGRhcndpbiBzcGVjaWZpYyBmaWxlcworICovCisjZGVmaW5lIFNOTVBfQ0ZSZWxlYXNlKHgpIGRvIHsgaWYgKHgpIHsgQ0ZSZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCisKKy8qCisgKiBNYWMgT1MgWCBydW5zIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZSwKKyAqICAgd2hpY2ggaGFuZGxlIHVkcFRhYmxlIGluZGV4IHZhbHVlcyBkaWZmZXJlbnRseQorICovCisjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjaWZkZWYgVEFSR0VUX1JUX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKKyNlbmRpZgorCisvKgorICogYXMgb2YgNy8yMDEwLCBvcGVuc3NsIG9uIGRhcndpbiBkb2VzIG5vdCBoYXZlIHNoYTI1NgorICovCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBMjU2IDEKKyNkZWZpbmUgT1BFTlNTTF9OT19TSEE1MTIgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTMuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxODcwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEzLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBXaGlsZSBEYXJ3aW4gMTAgKGFrYSwgTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmQpIGlzICJCU0QtbGlrZSIsIGl0IGRpZmZlcnMKKyAqIHN1YnN0YW50aWFsbHkgZW5vdWdoIHRvIG5vdCB3YXJyYW50IHByZXRlbmRpbmcgaXQgaXMgYSBCU0QgZmxhdm9yLgorICogVGhpcyBmaXJzdCBzZWN0aW9uIGFyZSB0aGUgdmVzdGlnYWwgQlNEIHJlbW5hbnRzLgorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworLyoKKyAqIEJTRCBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBtZXRob2Qgb2YgbG9va2luZyB1cCBzb2NrYWRkcl9pbiB2YWx1ZXMgCisgKi8KKy8qICNkZWZpbmUgTkVFRF9LTEdFVFNBIDEgKi8KKworLyoKKyAqIEFSUF9TY2FuX05leHQgbmVlZHMgYSA0dGggaWZJbmRleCBhcmd1bWVudCAKKyAqLworI2RlZmluZSBBUlBfU0NBTl9GT1VSX0FSR1VNRU5UUyAxCisKKyNkZWZpbmUgQ0hFQ0tfUlRfRkxBR1MgMQorCisvKgorICogdGhpcyBpcyBub3QgZ29vZCBlbm91Z2ggYmVmb3JlIGZyZWVic2QzISAKKyAqLworLyogI3VuZGVmIEhBVkVfTkVUX0lGX01JQl9IICovCisKKy8qCisgKiBUaGlzIHNlY3Rpb24gYWRkcyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgZnJvbSBnZW5lcmljLmgKKyAqIChhIGZpbGUgd2UgZG9uJ3QgaW5jbHVkZSBoZXJlKQorICovCisKKy8qCisgKiB1ZHBfaW5wY2IgbGlzdCBzeW1ib2wsIGUuZy4gZm9yIG1pYklJL3VkcFRhYmxlLmMKKyAqLworI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wgaW5wX25leHQKKworLyoKKyAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIE1hYyBPUyBYIDEwLjUgKGFuZCBsYXRlcikgc3BlY2lmaWMgYWRkaXRpb25zLgorICovCisjZGVmaW5lIGRhcndpbiAxMworI2lmbmRlZiBkYXJ3aW4xMworIyAgIGRlZmluZSBkYXJ3aW4xMyBkYXJ3aW4KKyNlbmRpZgorCisvKgorICogTWFjIE9TIFggc2hvdWxkIG9ubHkgdXNlIHRoZSBtb2Rlcm4gQVBJIGFuZCBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyAxCisjZW5kaWYKKworLyoKKyAqIGxvb2tzIGxpa2UgdGhlIElGVGFibGUgc3R1ZmYgd29ya3MgYmV0dGVyIHRoYW4gdGhlIG1pYklJIHZlcnNpb25zCisgKi8KKyAKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKKworLyoKKyAqIHVzZSBuZXcgaG9zdCByZXNvdXJjZXMgZmlsZXMgYXMgd2VsbAorICovCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV0lOU1RfUkVXUklURVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fUkVXUklURVMKKyN1bmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjZGVmaW5lIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMIDEKKworLyoKKyAqIEVuYWJsaW5nIHRoaXMgcmVzdHJpY3RzIHRoZSBjb21waWxlciB0byBtb3N0bHkgcHVibGljIEFQSXMuCisgKi8KKyNpZm5kZWYgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRSAxCisjZW5kaWYKKyNpZm5kZWYgX19BUFBMRV9BUElfVU5TVEFCTEUKKyNkZWZpbmUgX19BUFBMRV9BUElfVU5TVEFCTEUgMQorI2VuZGlmCisKKy8qCisgKiBEYXJ3aW4ncyB0b29scyBhcmUgY2FwYWJsZSBvZiBidWlsZGluZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGluIG9uZSBwYXNzLgorICogQXMgYSByZXN1bHQsIHBsYXRmb3JtIGRlZmluaXRpb25zIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCBjb21waWxlIHRpbWUuCisgKi8KKyNpZmRlZiBCWVRFX09SREVSCisjIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgorICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KKyAqLworI3VuZGVmIEhBVkVfRlNUQUJfSAorCisjZGVmaW5lIFNXQVBGSUxFX0RJUiAiL3ByaXZhdGUvdmFyL3ZtIgorI2RlZmluZSBTV0FQRklMRV9QUkVGSVggInN3YXBmaWxlIgorCisvKgorICogVGhlc2UgYXBwYXJlbnRseSB1c2VkIHRvIGJlIGluIG5ldGluZXQvdGNwX3RpbWVycy5oLCBidXQgd2VudCBhd2F5IGluCisgKiAxMC40LjIuIERlZmluZSB0aGVtIGhlcmUgdGlsIHdlIGZpbmQgb3V0IGEgd2F5IHRvIGdldCB0aGUgcmVhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVENQVFZfTUlOICAgICAgICggIDEqUFJfU0xPV0haKSAgICAgICAgIC8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZGVmaW5lIFRDUFRWX1JFWE1UTUFYICAoIDY0KlBSX1NMT1dIWikgICAgICAgICAvKiBtYXggYWxsb3dhYmxlIFJFWE1UIHZhbHVlICovCisKKy8qCisgKiBCZWNhdXNlIE1hYyBPUyBYIGlzIGJ1aWx0IG9uIE1hY2gsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSBCU0QtY29tcGF0aWJsZQorICogVk0gc3RhdGlzdGljcyBBUEkuCisgKi8KKyNkZWZpbmUgVVNFX01BQ0hfSE9TVF9TVEFUSVNUSUNTIDEKKworLyoKKyAqIFRoaXMgdGVsbHMgY29kZSB0aGF0IG1hbmlwdWxhdGVzIElQdjYgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgdW5pZmllZCwKKyAqIGkuZS4sIElQdjQgYW5kIElQdjYgdXNlIHRoZSBzYW1lIHN0cnVjdHMuCisgKiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggYSBjb25maWd1cmUgZGlyZWN0aXZlLgorICovCisvKiAjZGVmaW5lIFVTRV9VTklGSUVEX0lQVjZfU1RSVUNUUyAxICovCisjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCisKKy8qCisgKiB1dGlsaXR5IG1hY3JvIHVzZWQgaW4gc2V2ZXJhbCBkYXJ3aW4gc3BlY2lmaWMgZmlsZXMKKyAqLworI2RlZmluZSBTTk1QX0NGUmVsZWFzZSh4KSBkbyB7IGlmICh4KSB7IENGUmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQorCisvKgorICogTWFjIE9TIFggcnVucyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUsCisgKiAgIHdoaWNoIGhhbmRsZSB1ZHBUYWJsZSBpbmRleCB2YWx1ZXMgZGlmZmVyZW50bHkKKyAqLworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorI2lmZGVmIFRBUkdFVF9SVF9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCisjZW5kaWYKKworLyoKKyAqIGFzIG9mIDcvMjAxMCwgb3BlbnNzbCBvbiBkYXJ3aW4gZG9lcyBub3QgaGF2ZSBzaGEyNTYKKyAqLworI2RlZmluZSBPUEVOU1NMX05PX1NIQTI1NiAxCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBNTEyIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaAppbmRleCBiMTU1M2RlLi44ZDQ1NTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oCkBAIC0xMiwzICsxMiw0IEBACiAKICNkZWZpbmUgU1dBUEZJTEVfRElSICIvcHJpdmF0ZS92YXIvdm0iCiAjZGVmaW5lIFNXQVBGSUxFX1BSRUZJWCAic3dhcGZpbGUiCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaAppbmRleCAxNzRmYTc4Li4xZTZkN2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oCkBAIC02MywxNCArNjMsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGEga3ZtLmggZmlsZSwga3ZtX29wZW5maWxlcyBldGMuIGFsd2F5cwotICogcmV0dXJuIG51bGwgYmVjYXVzZSAvZGV2L2ttZW0gd2FzIHJlbW92ZWQgaW4gT1MgWCAxMC40IGZvciBJbnRlbC4KLSAqLwotI3VuZGVmIEhBVkVfS1ZNX0gKLSN1bmRlZiBIQVZFX0tWTV9HRVRQUk9DUwotI3VuZGVmIEhBVkVfS1ZNX09QRU5GSUxFUwotCi0vKgogICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KICAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCiAgKi8KQEAgLTk5LDMgKzkxLDQgQEAKICAqLwogLyogI2RlZmluZSBVU0VfVU5JRklFRF9JUFY2X1NUUlVDVFMgMSAqLwogI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmgKaW5kZXggNjJkOGQzMC4uYmYzZDJkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaApAQCAtMyw2ICszLDE2IEBACiAgKiBzdWJzdGFudGlhbGx5IGVub3VnaCB0byBub3Qgd2FycmFudCBwcmV0ZW5kaW5nIGl0IGlzIGEgQlNEIGZsYXZvci4KICAqIFRoaXMgZmlyc3Qgc2VjdGlvbiBhcmUgdGhlIHZlc3RpZ2FsIEJTRCByZW1uYW50cy4KICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKIC8qCiAgKiBCU0Qgc3lzdGVtcyB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGxvb2tpbmcgdXAgc29ja2FkZHJfaW4gdmFsdWVzIApAQCAtMzUsNiArNDUsOSBAQAogICogVGhpcyBzZWN0aW9uIGRlZmluZXMgTWFjIE9TIFggMTAuNSAoYW5kIGxhdGVyKSBzcGVjaWZpYyBhZGRpdGlvbnMuCiAgKi8KICNkZWZpbmUgZGFyd2luIDkKKyNpZm5kZWYgZGFyd2luOQorIyAgIGRlZmluZSBkYXJ3aW45IGRhcndpbgorI2VuZGlmCiAKIC8qCiAgKiBNYWMgT1MgWCBzaG91bGQgb25seSB1c2UgdGhlIG1vZGVybiBBUEkgYW5kIGRlZmluaXRpb25zLgpAQCAtNTAsNiArNjMsMTQgQEAKICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKIAogLyoKKyAqIHVzZSBuZXcgaG9zdCByZXNvdXJjZXMgZmlsZXMgYXMgd2VsbAorICovCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXSU5TVF9SRVdSSVRFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9SRVdSSVRFUworI3VuZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwgMQorCisvKgogICogRW5hYmxpbmcgdGhpcyByZXN0cmljdHMgdGhlIGNvbXBpbGVyIHRvIG1vc3RseSBwdWJsaWMgQVBJcy4KICAqLwogI2lmbmRlZiBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UKQEAgLTcxLDI1ICs5Miw2IEBACiAjZW5kaWYKIAogLyoKLSAqIERhcndpbidzIHRvb2xzIGFyZSBjYXBhYmxlIG9mIGJ1aWxkaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgaW4gb25lIHBhc3MuCi0gKiBBcyBhIHJlc3VsdCwgcGxhdGZvcm0gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIGNvbXBpbGUgdGltZS4KLSAqLwotI2lmZGVmIEJZVEVfT1JERVIKLSMgdW5kZWYgV09SRFNfQklHRU5ESUFOCi0jIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCi0jIGVuZGlmCi0jZW5kaWYKLQotLyoKLSAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYSBrdm0uaCBmaWxlLCBrdm1fb3BlbmZpbGVzIGV0Yy4gYWx3YXlzCi0gKiByZXR1cm4gbnVsbCBiZWNhdXNlIC9kZXYva21lbSB3YXMgcmVtb3ZlZCBjb21wbGV0ZWx5IGluIE9TIFggMTAuNS4KLSAqLwotI3VuZGVmIEhBVkVfS1ZNX0gKLSN1bmRlZiBIQVZFX0tWTV9HRVRQUk9DUwotI3VuZGVmIEhBVkVfS1ZNX09QRU5GSUxFUwotCi0vKgogICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KICAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCiAgKi8KQEAgLTEyMCw2ICsxMjIsMTEgQEAKICN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKIAogLyoKKyAqIHV0aWxpdHkgbWFjcm8gdXNlZCBpbiBzZXZlcmFsIGRhcndpbiBzcGVjaWZpYyBmaWxlcworICovCisjZGVmaW5lIFNOTVBfQ0ZSZWxlYXNlKHgpIGRvIHsgaWYgKHgpIHsgQ0ZSZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCisKKy8qCiAgKiBNYWMgT1MgWCBydW5zIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZSwKICAqICAgd2hpY2ggaGFuZGxlIHVkcFRhYmxlIGluZGV4IHZhbHVlcyBkaWZmZXJlbnRseQogICovCkBAIC0xMjcsMyArMTM0LDQgQEAKICNpZmRlZiBUQVJHRVRfUlRfTElUVExFX0VORElBTgogI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQogI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaAppbmRleCA0MTA4NDI5Li5hMzA2ODNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oCkBAIC0yNCw2ICsyNCw0IEBACiAKIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUwotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUwotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaAppbmRleCBlZmJjNWIzLi4zNjljMWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmgKQEAgLTQsNSArNCw1IEBACiAKIC8qIGRvbid0IGRlZmluZSBfS0VSTkVMIG9uIEZyZWVCU0QgNS4zIGV2ZW4gaWYgY29uZmlndXJlIHRoaW5rcyB3ZSBuZWVkIGl0ICovCiAjaWZkZWYgZnJlZWJzZDUKLSN1bmRlZiBJRk5FVF9ORUVEU19LRVJORUwKKyN1bmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4LmgKaW5kZXggMGI2MjdlOS4uNTdjZWE0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaApAQCAtODAsNSArODAsMTUgQEAKICMgIGRlZmluZSBORVRTTk1QX0VOQUJMRV9JTkxJTkUgMAogI2VuZGlmCiAKKy8qCisgKiBwcmV2ZW50IHNpZ2FjdGlvbiBiZWluZyByZWRlZmluZWQgdG8gY21hX3NpZ2FjdGlvbgorICogKGNhdXNpbmcgYnVpbGQgZXJyb3JzIG9uIEhQLVVYIDEwLjIwLCBhdCBsZWFzdCkKKyAqLworI2lmZGVmIGhwdXgxMAorI2lmbmRlZiBfQ01BX05PV1JBUFBFUlNfCisjICBkZWZpbmUgX0NNQV9OT1dSQVBQRVJTXyAxCisjZW5kaWYKKyNlbmRpZgorCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaAppbmRleCA3OWQ0MWE4Li45MzNmZTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oCkBAIC0yMyw3ICsyMyw3IEBACiAvKgogICogZG9uJ3QgZGVmaW5lIF9LRVJORUwgYmVmb3JlIGluY2x1ZGluZyBzeXMvdW5pc3RkLmggCiAgKi8KLSNkZWZpbmUgSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUgIDEKKyNkZWZpbmUgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfTEFURSAgMQogCiAjZGVmaW5lIFNUUkVBTV9ORUVEU19LRVJORUxfSVNMQU5EUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9rZnJlZWJzZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0va2ZyZWVic2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmY3MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0va2ZyZWVic2QuaApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlICJmcmVlYnNkNi5oIgorI2RlZmluZSBmcmVlYnNkNiBmcmVlYnNkNgorCisjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CisjZGVmaW5lIF9fRnJlZUJTRF92ZXJzaW9uIF9fRnJlZUJTRF9rZXJuZWxfdmVyc2lvbgorCisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgKaW5kZXggMjlkMDlhNC4uNjhhM2E3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaApAQCAtMTYsNiArMTYsMTUgQEAKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgogIAogICovCisKKy8qCisgKiBNYWtlIHRoZSBnZXRuYW1laW5mbygpIGZ1bmN0aW9uIGF2YWlsYWJsZS4KKyAqIE5vdGU6IGFjY29yZGluZyB0byBNU0ROIGdldG5hbWVpbmZvKCkgaXMgYXZhaWxhYmxlIGluIHdzMl8zMiBvbiBXaW5kb3dzIDIwMDAKKyAqIGFuZCBhYm92ZS4gTWluR1cgb25seSBtYWtlcyBnZXRuYW1laW5mbygpIHZpc2libGUgd2hlbiBzZXR0aW5nIF9XSU4zMl9XSU5OVAorICogdG8gMHgwNTAxIChXaW5kb3dzIFhQKSBvciBoaWdoZXIsIHdoaWNoIGlzIGEgYnVnIGluIHRoZSBNaW5HVyA1LjEuNiBoZWFkZXJzLgorICovCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDEKKwogI2luY2x1ZGUgPG5ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmg+CiAKICNpZmRlZiBIQVZFX1NURElOVF9ICkBAIC0zMCwxMCArMzksNyBAQAogI3VuZGVmIEhBVkVfU0lHTkFMCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0dGltZW9mZGF5IGZ1bmN0aW9uLiAgKi8KLS8qIE9ubHkgd2hlbiBjb21waWxpbmcgUGVybCBtb2R1bGUgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBNSU5HV19QRVJMCiAjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKLSNlbmRpZgogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICAqLwogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQpAQCAtNDQsNiArNTAsOSBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJhaXNlKCkgaW5zdGVhZCBvZiBhbGFybSgpICovCiAjZGVmaW5lIEhBVkVfUkFJU0UgMQogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU09DS0VUIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBleGVjdicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9FWEVDVgogCkBAIC03MiwxNSArODEsMTMgQEAKICNkZWZpbmUJRl9TRVRGTAkJNAogI2RlZmluZQlPX05PTkJMT0NLCTB4NDAwMCAgLyogbm9uIGJsb2NraW5nIEkvTyAoUE9TSVggc3R5bGUpICovCiAKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfVElNRVpPTkVfVFpfRFNUVElNRQogLyoKLSAqIEkgZHVubm8gd2h5LiBJdCdzIGp1c3Qgbm90IHRoZXJlLiBEZWZpbmUgc3RydWN0IHRpbWV6b25lLgotICogSWYgb3RoZXIgc3lzdGVtcyBuZWVkIHRoaXMgaXQgY291bGQgYmUgbW92ZWQgdG8gc3lzdGVtLmgKLSAqIGFuZCB0aGUgcHJvcGVyIGNoZWNraW5nIGRvbmUgYXQgY29uZmlnIHRpbWUuIFJpZ2h0IG5vdyBJIGhhdmUKLSAqIGp1c3QgcHV0IGl0IGhlcmUgdG8ga2VlcCB0aGUgTWluR1cgb3V0IG9mIHRoZSBtYWluIHRyZWUgYXMgbXVjaAotICogYXMgcG9zc2libGUuCisgKiBPbGRlciBNaW5HVyB2ZXJzaW9ucyBkbyBub3QgaGF2ZSBzdHJ1Y3QgdGltZXpvbmUsIHNvIGRlZmluZSBpdCBoZXJlLgogICovCiBzdHJ1Y3QgdGltZXpvbmUgewogCWludCB0el9taW51dGVzd2VzdDsKIAlpbnQgdHpfZHN0dGltZTsKIH07CisjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaAppbmRleCAxM2FkN2VhLi4xZjIyYTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaApAQCAtMzQsOCArMzQsMzYgQEAKIAogI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQogCisjaWZkZWYgbmV0YnNkZWxmNgorI2RlZmluZSBuZXRic2Q2CisjZGVmaW5lIG5ldGJzZGVsZjUKKyNlbmRpZgorI2lmZGVmIG5ldGJzZGVsZjUKKyNkZWZpbmUgbmV0YnNkNQorI2RlZmluZSBuZXRic2RlbGY0CisjZW5kaWYKKyNpZmRlZiBuZXRic2RlbGY0CisjZGVmaW5lIG5ldGJzZDQKKyNkZWZpbmUgbmV0YnNkZWxmMworI2VuZGlmCisjaWZkZWYgbmV0YnNkZWxmMworI2RlZmluZSBuZXRic2QzCisjZW5kaWYKKworI2lmIGRlZmluZWQobmV0YnNkNikgJiYgIWRlZmluZWQobmV0YnNkNSkKKyNkZWZpbmUgbmV0YnNkNSBuZXRic2Q1CisjZW5kaWYKKyNpZiBkZWZpbmVkKG5ldGJzZDUpICYmICFkZWZpbmVkKG5ldGJzZDQpCisjZGVmaW5lIG5ldGJzZDQgbmV0YnNkNAorI2VuZGlmCisjaWYgZGVmaW5lZChuZXRic2Q0KSAmJiAhZGVmaW5lZChuZXRic2QzKQorI2RlZmluZSBuZXRic2QzIG5ldGJzZDMKKyNlbmRpZgorI2lmIGRlZmluZWQobmV0YnNkMykgJiYgIWRlZmluZWQobmV0YnNkMikKKyNkZWZpbmUgbmV0YnNkMiBuZXRic2QyCisjZW5kaWYKICNpZm5kZWYgbmV0YnNkMQotIyBkZWZpbmUgbmV0YnNkMSBuZXRic2QxCisjZGVmaW5lIG5ldGJzZDEgbmV0YnNkMQogI2VuZGlmCiAKICNpZiBfX05ldEJTRF9WZXJzaW9uX18gPj0gNDk5MDA1ODAwCkBAIC00NCwzICs3Miw0IEBACiAKIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NTExMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2LmgKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgImJzZC5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKyNkZWZpbmUgUENCX1RBQkxFIDEKKyN1bmRlZiBUQ1BfU1lNQk9MCisjZGVmaW5lIFRDUF9TWU1CT0wgInRjYnRhYmxlIgorI3VuZGVmIFRDUF9UVExfU1lNQk9MCisjZGVmaW5lIFRDUF9UVExfU1lNQk9MICJpcF9kZWZ0dGwiCisjdW5kZWYgVURCX1NZTUJPTAorI2RlZmluZSBVREJfU1lNQk9MICJ1ZGJ0YWJsZSIKKyN1bmRlZiBOUFJPQ19TWU1CT0wKKyN1bmRlZiBQUk9DX1NZTUJPTAorCisjZGVmaW5lIE1CUE9PTF9TWU1CT0wJIm1icG9vbCIKKyNkZWZpbmUgTUNMUE9PTF9TWU1CT0wJIm1jbHBvb2wiCisKKy8qCisgKiBpbnBfbmV4dCBzeW1ib2wgCisgKi8KKyN1bmRlZiBJTlBfTkVYVF9TWU1CT0wKKyNkZWZpbmUgSU5QX05FWFRfU1lNQk9MIGlucF9xdWV1ZS5jcWVfbmV4dAorI3VuZGVmIElOUF9QUkVWX1NZTUJPTAorI2RlZmluZSBJTlBfUFJFVl9TWU1CT0wgaW5wX3F1ZXVlLmNxZV9wcmV2CisjZGVmaW5lIEhBVkVfSU5QQ0JUQUJMRSAxCisKKyN1bmRlZiBJRkFERFJfU1lNQk9MCisjZGVmaW5lIElGQUREUl9TWU1CT0wgImluX2lmYWRkcmhlYWQiCisKKyNkZWZpbmUgVVRNUF9GSUxFIF9QQVRIX1VUTVAKKworI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQorCisvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLworLyogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaAppbmRleCA3MTY3OTRjLi44ZGIwZWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oCkBAIC0xNSw2ICsxNSw0IEBACiAKIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUwotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUwotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmgKaW5kZXggZDNkY2I3Mi4uZWM2MWMzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaApAQCAtMjUsMTQgKzI1LDkgQEAKICNkZWZpbmUgVURQX1BPUlRTX0lOX0hPU1RfT1JERVIgMQogI2RlZmluZSBUQ1BfUE9SVFNfSU5fSE9TVF9PUkRFUiAxCiAKLS8qIGdldCBzb21lIHJlcXVpcmVkIHByb3RvdHlwZXMgKHN0cnRva19yKSBmcm9tIGluY2x1ZGUgZmlsZXMgKi8KLSNkZWZpbmUgX19FWFRFTlNJT05TX18KLQogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCi0jaWZkZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCi0jZW5kaWYKIAogLyogU29sYXJpcyAyLjYrICovCiAjZGVmaW5lIF9TTEFTSF9QUk9DX01FVEhPRF8gMQpAQCAtNDMsNiArMzgsNiBAQAogLyoKICAqIE5FV19NSUJfQ09NUExJQU5UIGlzIGEgZGVmaW5lIHVzZWQgaW4gU29sYXJpcyAxMFU0KyB0byBlbmFibGUgYWRkaXRpb25hbAogICogTUlCIGluZm9ybWF0aW9uIChpdCBhZmZlY3RzIHRoZSBzdHJ1Y3RzIGluIDxpbmV0L21pYjIuaD4pCi0gKi8KLQorICovIAorIAogI2RlZmluZSBORVdfTUlCX0NPTVBMSUFOVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oCmluZGV4IGM0YTlmOWEuLjAxN2M3YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmgKQEAgLTcsMTggKzcsMTIgQEAKIC8qCiAgKiB1c2luZyBDQ1MgImNjIiwgImNvbmZpZ3VyZSIgZG9lcyBub3QgZmluZCB0aGlzIGl0ZW0gCiAgKi8KLSNkZWZpbmUgSEFWRV9NRU1DUFkgMQotLyoKLSAqIHNvLCB1bmRvIHRoZSBkYW1hZ2UgZG9uZSBlYXJsaWVyIGluIGNvbmZpZy5oIAotICovCi0jdW5kZWYgbWVtY3B5Ci0jdW5kZWYgbWVtbW92ZQogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQogCiAvKgogICogbGllIGFib3V0IHRoaXMgbmV4dCBkZWZpbmUgdG8gYXZvaWQgc2FfbGVuIGFuZCBzYV9mYW1pbHkgTUFDUk9TICEhIAogICovCi0jZGVmaW5lIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyIDEKIAogLyoKICAqIHRoaXMgaGVhZGVyIHJlcXVpcmVzIHF1ZXVlX3QsIG5vdCBlYXNpbHkgZG9uZSB3aXRob3V0IGtlcm5lbCBoZWFkZXJzIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oIGIvaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCmluZGV4IGQ5MGRmMDc1Li41ZTgwYTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCkBAIC0xNSwxMSArMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICogRm9yICd0aW1ldmFsJyAKICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTgsMjYgKzU0LDI5IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKGN5Z3dpbikKK3R5cGVkZWYgSEFORExFIG5ldHNubXBfcGlkX3Q7CisjZGVmaW5lIE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTIElOVkFMSURfSEFORExFX1ZBTFVFCisjZWxzZQorLyoKKyAqIE5vdGU6IG9uIFBPU0lYLWNvbXBsaWFudCBzeXN0ZW1zLCBwaWRfdCBpcyBkZWZpbmVkIGluIDxzeXMvdHlwZXMuaD4uCisgKiBBbmQgaWYgcGlkX3QgaGFzIG5vdCBiZWVuIGRlZmluZWQgaW4gPHN5cy90eXBlcy5oPiwgQUNfVFlQRV9QSURfVCBlbnN1cmVzCisgKiB0aGF0IGEgcGlkX3QgZGVmaW5pdGlvbiBpcyBwcmVzZW50IGluIG5ldC1zbm1wLWNvbmZpZy5oLgorICovCit0eXBlZGVmIHBpZF90IG5ldHNubXBfcGlkX3Q7CisjZGVmaW5lIE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTIC0xCisjZW5kaWYKKwogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogRm9yIGRlZmluaXRpb24gb2YgaW5fYWRkcl90ICovCiAjZW5kaWYKIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb2lkLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmbmRlZiBNQVhfU1VCSUQgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgLSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBwcm90ZWN0aW9uICovCi0jaWZuZGVmIEVJR0hUQklUX1NVQklEUwotdHlwZWRlZiB1X2xvbmcgIG9pZDsKLSNkZWZpbmUgTUFYX1NVQklEICAgMHhGRkZGRkZGRlVMCi0jZGVmaW5lIE5FVFNOTVBfUFJJbyAibCIKLSNlbHNlCi10eXBlZGVmIHVfY2hhciAgb2lkOwotI2RlZmluZSBNQVhfU1VCSUQgICAweEZGCi0jZGVmaW5lIE5FVFNOTVBfUFJJbyAiIgotI2VuZGlmCi0jZW5kaWYKLQogI2lmbmRlZiBIQVZFX1NPQ0tMRU5fVAogdHlwZWRlZiB1X2ludCBzb2NrbGVuX3Q7CiAjZW5kaWYKQEAgLTk4LDE0MiArOTcsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKLSAgICAvKgotICAgICAqIFRyeSB0byBlbnN1cmUgd2UgaGF2ZSAzMi1iaXQgKGFuZCBob3BlZnVsbHkgNjQtYml0KQotICAgICAqICAgIGludGVnZXIgdHlwZXMgYXZhaWxhYmxlLgotICAgICAqLwotCi0jaWZuZGVmIEhBVkVfSU5UOF9UCi10eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKLSNlbmRpZiAvKiAhSEFWRV9JTlQ4X1QgKi8KLQotI2lmbmRlZiBIQVZFX1VJTlQ4X1QKLSNpZmRlZiBIQVZFX1VfSU5UOF9UCi10eXBlZGVmIHVfaW50OF90ICAgICAgdWludDhfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLSNlbmRpZgotI2VuZGlmIC8qICFIQVZFX1VJTlQ4X1QgKi8KLQotI2lmbmRlZiBIQVZFX0lOVDE2X1QKLSNpZiAgIFNJWkVPRl9JTlQgPT0gMgotI2RlZmluZSBJTlQxNl9UIGludAotI2VsaWYgU0laRU9GX1NIT1JUID09IDIKLSNkZWZpbmUgSU5UMTZfVCBzaG9ydAotI2Vsc2UKLSNkZWZpbmUgX0lOVDE2X0lTX05PVF8xNkJJVAotI2RlZmluZSBJTlQxNl9UIHNob3J0Ci0jZW5kaWYKLXR5cGVkZWYgSU5UMTZfVCBpbnQxNl90OwotI2VuZGlmIC8qICFIQVZFX0lOVDE2X1QgKi8KLQotI2lmbmRlZiBIQVZFX1VJTlQxNl9UCi0jaWZkZWYgSEFWRV9VX0lOVDE2X1QKLXR5cGVkZWYgdV9pbnQxNl90ICAgICAgICB1aW50MTZfdDsKLSNlbHNlCi0jaWZkZWYgSU5UMTZfVAotdHlwZWRlZiB1bnNpZ25lZCBJTlQxNl9UIHVpbnQxNl90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICB1aW50MTZfdDsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfVUlOVDE2X1QgKi8KLQotI2lmbmRlZiBIQVZFX0lOVDMyX1QKLSNpZiAgIFNJWkVPRl9JTlQgPT0gNAotI2RlZmluZSBJTlQzMl9UIGludCAKLSNlbGlmIFNJWkVPRl9MT05HID09IDQKLSNkZWZpbmUgSU5UMzJfVCBsb25nIAotI2VsaWYgU0laRU9GX1NIT1JUID09IDQKLSNkZWZpbmUgSU5UMzJfVCBzaG9ydCAKLSNlbHNlCi0jZGVmaW5lIF9JTlQzMl9JU19OT1RfMzJCSVQKLSNkZWZpbmUgSU5UMzJfVCBpbnQgCi0jZW5kaWYKLXR5cGVkZWYgSU5UMzJfVCBpbnQzMl90OwotI2VuZGlmIC8qICFIQVZFX0lOVDMyX1QgKi8KLQotI2lmbmRlZiBIQVZFX1VJTlQzMl9UCi0jaWZkZWYgSEFWRV9VX0lOVDMyX1QKLXR5cGVkZWYgdV9pbnQzMl90ICAgICAgICB1aW50MzJfdDsKLSNlbHNlCi0jaWZkZWYgSU5UMzJfVAotdHlwZWRlZiB1bnNpZ25lZCBJTlQzMl9UIHVpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICB1aW50MzJfdDsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfVUlOVDMyX1QgKi8KLQotI2lmbmRlZiBIQVZFX0lOVDY0X1QKLSNpZiBTSVpFT0ZfTE9ORyA9PSA4Ci0jZGVmaW5lIElOVDY0X1QgbG9uZyAKLSNlbGlmIFNJWkVPRl9MT05HX0xPTkcgPT0gOAotI2RlZmluZSBJTlQ2NF9UIGxvbmcgbG9uZwotI2VsaWYgICBTSVpFT0ZfSU5UID09IDgKLSNkZWZpbmUgSU5UNjRfVCBpbnQgCi0jZWxpZiBTSVpFT0ZfTE9ORyA+PSA4Ci0jZGVmaW5lIElOVDY0X1QgbG9uZyAKLSNkZWZpbmUgX0lOVDY0X0lTX05PVF82NEJJVAotI2VuZGlmCi0jaWZkZWYgSU5UNjRfVAotdHlwZWRlZiBJTlQ2NF9UIGludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UNjRfVCAxCi0jZW5kaWYKLSNlbmRpZiAvKiAhSEFWRV9JTlQ2NF9UICovCi0KLSNpZm5kZWYgSEFWRV9VSU5UNjRfVAotI2lmZGVmIEhBVkVfVV9JTlQ2NF9UCi10eXBlZGVmIHVfaW50NjRfdCAgICAgICAgdWludDY0X3Q7Ci0jZWxpZiBkZWZpbmVkKElOVDY0X1QpCi10eXBlZGVmIHVuc2lnbmVkIElOVDY0X1QgdWludDY0X3Q7Ci0jZW5kaWYKLSNkZWZpbmUgSEFWRV9VSU5UNjRfVCAxCisjaWZuZGVmIEhBVkVfTkZEU19UCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IG5mZHNfdDsKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfSU5UTUFYX1QKLSNpZmRlZiBTSVpFT0ZfTE9OR19MT05HCi10eXBlZGVmIGxvbmcgbG9uZyBpbnRtYXhfdDsKLSNkZWZpbmUgU0laRU9GX0lOVE1BWF9UIFNJWkVPRl9MT05HX0xPTkcKLSNlbGlmIGRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiAhZGVmaW5lZChfSU5UNjRfSVNfTk9UXzY0QklUKQotdHlwZWRlZiBpbnQ2NF90ICAgaW50bWF4X3Q7Ci0jZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCA4Ci0jZWxzZQotdHlwZWRlZiBsb25nICAgICAgaW50bWF4X3Q7Ci0jZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCBTSVpFT0ZfTE9ORwotI2VuZGlmCi0jZGVmaW5lIEhBVkVfSU5UTUFYX1QgMQotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9VSU5UTUFYX1QKLSNpZmRlZiBTSVpFT0ZfTE9OR19MT05HCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50bWF4X3Q7Ci0jZWxpZiBkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmICFkZWZpbmVkKF9JTlQ2NF9JU19OT1RfNjRCSVQpCi10eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICB1aW50bWF4X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgdWludG1heF90OwotI2VuZGlmCi0jZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfVUlOVFBUUl9UCi0jaWYgU0laRU9GX0xPTkcgPT0gOAotLyogbGlrZWx5IDY0Yml0IG1hY2hpbmUgd2l0aCA2NGJpdCBhZGRyZXNzaW5nPyAqLwotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50cHRyX3Q7Ci0jZWxzZQotICAgIHR5cGVkZWYgdW5zaWduZWQgdWludHB0cl90OwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOVFBUUl9UCi0jaWYgU0laRU9GX0xPTkcgPT0gOAotLyogbGlrZWx5IDY0Yml0IG1hY2hpbmUgd2l0aCA2NGJpdCBhZGRyZXNzaW5nPyAqLwotICAgIHR5cGVkZWYgbG9uZyBpbnRwdHJfdDsKLSNlbHNlCi0gICAgdHlwZWRlZiBpbnQgaW50cHRyX3Q7Ci0jZW5kaWYKLSNlbmRpZgotICAgIAogICAgIC8qCiAgICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKICAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KQEAgLTI0NCw2OSArMTExLDMxNCBAQAogICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCiAgICAgICovCiAKK3R5cGVkZWYgdW5pb24geworICAgbG9uZyAgICAgICAgICAgKmludGVnZXI7CisgICB1X2NoYXIgICAgICAgICAqc3RyaW5nOworICAgb2lkICAgICAgICAgICAgKm9iamlkOworICAgdV9jaGFyICAgICAgICAgKmJpdHN0cmluZzsKKyAgIHN0cnVjdCBjb3VudGVyNjQgKmNvdW50ZXI2NDsKKyNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKyAgIGZsb2F0ICAgICAgICAgICpmbG9hdFZhbDsKKyAgIGRvdWJsZSAgICAgICAgICpkb3VibGVWYWw7CisgICAvKgorICAgICogdF91bmlvbiAqdW5pb25WYWw7IAorICAgICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUyAqLworfSBuZXRzbm1wX3ZhcmRhdGE7CiAKLSNpbmNsdWRlIDxuZXQtc25tcC9kZWZpbml0aW9ucy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KLS8qCi0gKiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmg+IAorCisjZGVmaW5lIE1BWF9PSURfTEVOCSAgICAxMjggLyogbWF4IHN1YmlkJ3MgaW4gYW4gb2lkICovCisKKy8qKiBAdHlwZWRlZiBzdHJ1Y3QgdmFyaWFibGVfbGlzdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QKKyAqIFR5cGVkZWZzIHRoZSB2YXJpYWJsZV9saXN0IHN0cnVjdCBpbnRvIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLworLyoqIEBzdHJ1Y3QgdmFyaWFibGVfbGlzdAorICogVGhlIG5ldHNubXAgdmFyaWFibGUgbGlzdCBiaW5kaW5nIHN0cnVjdHVyZSwgaXQncyB0eXBlZGVmJ2QgdG8KKyAqIG5ldHNubXBfdmFyaWFibGVfbGlzdC4KICAqLwotCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9pbmRleF9zIHsKLSAgICAgICBzaXplX3QgICAgICBsZW47Ci0gICAgICAgb2lkICAgICAgICAgKm9pZHM7Ci0gICAgfSBuZXRzbm1wX2luZGV4OwordHlwZWRlZiBzdHJ1Y3QgdmFyaWFibGVfbGlzdCB7CisgICAvKiogTlVMTCBmb3IgbGFzdCB2YXJpYWJsZSAqLworICAgc3RydWN0IHZhcmlhYmxlX2xpc3QgKm5leHRfdmFyaWFibGU7ICAgIAorICAgLyoqIE9iamVjdCBpZGVudGlmaWVyIG9mIHZhcmlhYmxlICovCisgICBvaWQgICAgICAgICAgICAqbmFtZTsgICAKKyAgIC8qKiBudW1iZXIgb2Ygc3ViaWQncyBpbiBuYW1lICovCisgICBzaXplX3QgICAgICAgICAgbmFtZV9sZW5ndGg7ICAgIAorICAgLyoqIEFTTiB0eXBlIG9mIHZhcmlhYmxlICovCisgICB1X2NoYXIgICAgICAgICAgdHlwZTsgICAKKyAgIC8qKiB2YWx1ZSBvZiB2YXJpYWJsZSAqLworICAgIG5ldHNubXBfdmFyZGF0YSB2YWw7CisgICAvKiogdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgdG8gYmUgY29waWVkIGludG8gYnVmICovCisgICBzaXplX3QgICAgICAgICAgdmFsX2xlbjsKKyAgIC8qKiBidWZmZXIgdG8gaG9sZCB0aGUgT0lEICovCisgICBvaWQgICAgICAgICAgICAgbmFtZV9sb2NbTUFYX09JRF9MRU5dOyAgCisgICAvKiogOTAgcGVyY2VudGlsZSA8IDQwLiAqLworICAgdV9jaGFyICAgICAgICAgIGJ1Zls0MF07CisgICAvKiogKE9wYXF1ZSkgaG9vayBmb3IgYWRkaXRpb25hbCBkYXRhICovCisgICB2b2lkICAgICAgICAgICAqZGF0YTsKKyAgIC8qKiBjYWxsYmFjayB0byBmcmVlIGFib3ZlICovCisgICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spKHZvaWQgKik7ICAgIAorICAgaW50ICAgICAgICAgICAgIGluZGV4OworfSBuZXRzbm1wX3ZhcmlhYmxlX2xpc3Q7CiAKIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfdm9pZF9hcnJheV9zIHsKLSAgICAgICBzaXplX3QgIHNpemU7Ci0gICAgICAgdm9pZCAqICphcnJheTsKLSAgICB9IG5ldHNubXBfdm9pZF9hcnJheTsKKy8qKiBAdHlwZWRlZiBzdHJ1Y3Qgc25tcF9wZHUgdG8gbmV0c25tcF9wZHUKKyAqIFR5cGVkZWZzIHRoZSBzbm1wX3BkdSBzdHJ1Y3QgaW50byBuZXRzbm1wX3BkdSAqLworLyoqIEBzdHJ1Y3Qgc25tcF9wZHUKKyAqIFRoZSBzbm1wIHByb3RvY29sIGRhdGEgdW5pdC4KKyAqLwkKK3R5cGVkZWYgc3RydWN0IHNubXBfcGR1IHsKKworI2RlZmluZSBub25fcmVwZWF0ZXJzCWVycnN0YXQKKyNkZWZpbmUgbWF4X3JlcGV0aXRpb25zIGVycmluZGV4CiAKICAgICAvKgotICAgICAqIHJlZmVyZW5jZXMgdG8gdmFyaW91cyB0eXBlcworICAgICAqIFByb3RvY29sLXZlcnNpb24gaW5kZXBlbmRlbnQgZmllbGRzCiAgICAgICovCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfdm9pZCB7Ci0gICAgICAgdm9pZCAqIHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX3ZvaWQ7CisgICAgLyoqIHNubXAgdmVyc2lvbiAqLworICAgIGxvbmcgICAgICAgICAgICB2ZXJzaW9uOworICAgIC8qKiBUeXBlIG9mIHRoaXMgUERVICovCQorICAgIGludCAgICAgICAgICAgICBjb21tYW5kOworICAgIC8qKiBSZXF1ZXN0IGlkIC0gbm90ZTogbm90IGluY3JlbWVudGVkIG9uIHJldHJpZXMgKi8KKyAgICBsb25nICAgICAgICAgICAgcmVxaWQ7ICAKKyAgICAvKiogTWVzc2FnZSBpZCBmb3IgVjMgbWVzc2FnZXMgbm90ZTogaW5jcmVtZW50ZWQgZm9yIGVhY2ggcmV0cnkgKi8KKyAgICBsb25nICAgICAgICAgICAgbXNnaWQ7CisgICAgLyoqIFVuaXF1ZSBJRCBmb3IgaW5jb21pbmcgdHJhbnNhY3Rpb25zICovCisgICAgbG9uZyAgICAgICAgICAgIHRyYW5zaWQ7CisgICAgLyoqIFNlc3Npb24gaWQgZm9yIEFnZW50WCBtZXNzYWdlcyAqLworICAgIGxvbmcgICAgICAgICAgICBzZXNzaWQ7CisgICAgLyoqIEVycm9yIHN0YXR1cyAobm9uX3JlcGVhdGVycyBpbiBHZXRCdWxrKSAqLworICAgIGxvbmcgICAgICAgICAgICBlcnJzdGF0OworICAgIC8qKiBFcnJvciBpbmRleCAobWF4X3JlcGV0aXRpb25zIGluIEdldEJ1bGspICovCisgICAgbG9uZyAgICAgICAgICAgIGVycmluZGV4OyAgICAgICAKKyAgICAvKiogVXB0aW1lICovCisgICAgdV9sb25nICAgICAgICAgIHRpbWU7ICAgCisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOwogCi0gICAgdHlwZWRlZiB1bmlvbiB7Ci0gICAgICAgIHVfbG9uZyAgdWw7Ci0gICAgICAgIHVfaW50ICAgdWk7Ci0gICAgICAgIHVfc2hvcnQgdXM7Ci0gICAgICAgIHVfY2hhciAgdWM7Ci0gICAgICAgIGxvbmcgICAgc2w7Ci0gICAgICAgIGludCAgICAgc2k7Ci0gICAgICAgIHNob3J0ICAgc3M7Ci0gICAgICAgIGNoYXIgICAgc2M7Ci0gICAgICAgIGNoYXIgKiAgY3A7Ci0gICAgICAgIHZvaWQgKiAgdnA7Ci0gICAgfSBuZXRzbm1wX2N2YWx1ZTsKKyAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlNb2RlbDsKKyAgICAvKiogbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAqLworICAgIGludCAgICAgICAgICAgICBzZWN1cml0eUxldmVsOyAgCisgICAgaW50ICAgICAgICAgICAgIG1zZ1BhcnNlTW9kZWw7CiAKLSNpZiAwCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfdV9jaGFyIHsKLSAgICAgICB1X2NoYXIgKiB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl9VX2NoYXI7CisgICAgLyoqCisgICAgICogVHJhbnNwb3J0LXNwZWNpZmljIG9wYXF1ZSBkYXRhLiAgVGhpcyByZXBsYWNlcyB0aGUgSVAtY2VudHJpYyBhZGRyZXNzCisgICAgICogZmllbGQuICAKKyAgICAgKi8KKyAgICAKKyAgICB2b2lkICAgICAgICAgICAqdHJhbnNwb3J0X2RhdGE7CisgICAgaW50ICAgICAgICAgICAgIHRyYW5zcG9ydF9kYXRhX2xlbmd0aDsKIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX2NoYXIgewotICAgICAgIGNoYXIgKiB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl92b2lkOworICAgIC8qKgorICAgICAqIFRoZSBhY3R1YWwgdHJhbnNwb3J0IGRvbWFpbi4gIFRoaXMgU0hPVUxEIE5PVCBCRSBGUkVFKClELiAgCisgICAgICovCiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl9pbnRfcyB7Ci0gICAgICAgaW50IHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX2ludDsKKyAgICBjb25zdCBvaWQgICAgICAqdERvbWFpbjsKKyAgICBzaXplX3QgICAgICAgICAgdERvbWFpbkxlbjsKIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3VfaW50X3MgewotICAgICAgIHVfaW50IHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX2ludDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcmlhYmxlczsKIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3VfbG9uZ19zIHsKLSAgICAgICB1X2xvbmcgdmFsOwotICAgIH0gbmV0c25tcF9yZWZfdV9sb25nOwotI2VuZGlmCiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl9zaXplX3RfcyB7Ci0gICAgICAgc2l6ZV90IHZhbDsKLSAgICB9ICogbmV0c25tcF9yZWZfc2l6ZV90OworICAgIC8qCisgICAgICogU05NUHYxICYgU05NUHYyYyBmaWVsZHMKKyAgICAgKi8KKyAgICAvKiogY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gKi8KKyAgICB1X2NoYXIgICAgICAgICAqY29tbXVuaXR5OworICAgIC8qKiBsZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbW11bml0eV9sZW47ICAKKworICAgIC8qCisgICAgICogVHJhcCBpbmZvcm1hdGlvbgorICAgICAqLworICAgIC8qKiBTeXN0ZW0gT0lEICovCisgICAgb2lkICAgICAgICAgICAgKmVudGVycHJpc2U7ICAgICAKKyAgICBzaXplX3QgICAgICAgICAgZW50ZXJwcmlzZV9sZW5ndGg7CisgICAgLyoqIHRyYXAgdHlwZSAqLworICAgIGxvbmcgICAgICAgICAgICB0cmFwX3R5cGU7CisgICAgLyoqIHNwZWNpZmljIHR5cGUgKi8KKyAgICBsb25nICAgICAgICAgICAgc3BlY2lmaWNfdHlwZTsKKyAgICAvKiogVGhpcyBpcyBPTkxZIHVzZWQgZm9yIHYxIFRSQVBzICAqLworICAgIHVuc2lnbmVkIGNoYXIgICBhZ2VudF9hZGRyWzRdOyAgCisKKyAgICAvKgorICAgICAqICBTTk1QdjMgZmllbGRzCisgICAgICovCisgICAgLyoqIGNvbnRleHQgc25tcEVuZ2luZUlEICovCisgICAgdV9jaGFyICAgICAgICAgKmNvbnRleHRFbmdpbmVJRDsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLworICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0RW5naW5lSURMZW47ICAgICAKKyAgICAvKiogYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAqLworICAgIGNoYXIgICAgICAgICAgICpjb250ZXh0TmFtZTsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHROYW1lICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOworICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBmb3Igc2VjdXJpdHkgKi8KKyAgICB1X2NoYXIgICAgICAgICAqc2VjdXJpdHlFbmdpbmVJRDsKKyAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5RW5naW5lSUQgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlFbmdpbmVJRExlbjsgICAgCisgICAgLyoqIG9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAqLworICAgIGNoYXIgICAgICAgICAgICpzZWN1cml0eU5hbWU7CisgICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eU5hbWUuICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5TmFtZUxlbjsgICAgICAgIAorICAgIAorICAgIC8qCisgICAgICogQWdlbnRYIGZpZWxkcworICAgICAqICAgICAgKGFsc28gdXNlcyBTTk1QdjEgY29tbXVuaXR5IGZpZWxkKQorICAgICAqLworICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKKyAgICBpbnQgICAgICAgICAgICAgcmFuZ2Vfc3ViaWQ7CisgICAgCisgICAgdm9pZCAgICAgICAgICAgKnNlY3VyaXR5U3RhdGVSZWY7Cit9IG5ldHNubXBfcGR1OworCisKKy8qKiBAdHlwZWRlZiBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG5ldHNubXBfc2Vzc2lvbgorICogVHlwZWRlZnMgdGhlIHNubXBfc2Vzc2lvbiBzdHJ1Y3QgaW50b25ldHNubXBfc2Vzc2lvbiAqLworICAgICAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uOwordHlwZWRlZiBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG5ldHNubXBfc2Vzc2lvbjsKKworI2RlZmluZSBVU01fQVVUSF9LVV9MRU4gICAgIDMyCisjZGVmaW5lIFVTTV9QUklWX0tVX0xFTiAgICAgMzIKKwordHlwZWRlZiBpbnQgICAgICAgICgqc25tcF9jYWxsYmFjaykgKGludCwgbmV0c25tcF9zZXNzaW9uICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHZvaWQgKik7Cit0eXBlZGVmIGludCAgICAgKCpuZXRzbm1wX2NhbGxiYWNrKSAoaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdm9pZCAqKTsKKworc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3M7CisKKy8qKiBAc3RydWN0IHNubXBfc2Vzc2lvbgorICogVGhlIHNubXAgc2Vzc2lvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzbm1wX3Nlc3Npb24geworICAgIC8qCisgICAgICogUHJvdG9jb2wtdmVyc2lvbiBpbmRlcGVuZGVudCBmaWVsZHMKKyAgICAgKi8KKyAgICAvKiogc25tcCB2ZXJzaW9uICovCisgICAgbG9uZyAgICAgICAgICAgIHZlcnNpb247CisgICAgLyoqIE51bWJlciBvZiByZXRyaWVzIGJlZm9yZSB0aW1lb3V0LiAqLworICAgIGludCAgICAgICAgICAgICByZXRyaWVzOworICAgIC8qKiBOdW1iZXIgb2YgdVMgdW50aWwgZmlyc3QgdGltZW91dCwgdGhlbiBleHBvbmVudGlhbCBiYWNrb2ZmICovCisgICAgbG9uZyAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAKKyAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7CisgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc3Vic2Vzc2lvbjsKKyAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpuZXh0OworCisgICAgLyoqIG5hbWUgb3IgYWRkcmVzcyBvZiBkZWZhdWx0IHBlZXIgKG1heSBpbmNsdWRlIHRyYW5zcG9ydCBzcGVjaWZpZXIgYW5kL29yIHBvcnQgbnVtYmVyKSAqLworICAgIGNoYXIgICAgICAgICAgICpwZWVybmFtZTsKKyAgICAvKiogVURQIHBvcnQgbnVtYmVyIG9mIHBlZXIuIChOTyBMT05HRVIgVVNFRCAtIFVTRSBwZWVybmFtZSBJTlNURUFEKSAqLworICAgIHVfc2hvcnQgICAgICAgICByZW1vdGVfcG9ydDsKKyAgICAvKiogTXkgRG9tYWluIG5hbWUgb3IgZG90dGVkIElQIGFkZHJlc3MsIDAgZm9yIGRlZmF1bHQgKi8KKyAgICBjaGFyICAgICAgICAgICAqbG9jYWxuYW1lOworICAgIC8qKiBNeSBVRFAgcG9ydCBudW1iZXIsIDAgZm9yIGRlZmF1bHQsIHBpY2tlZCByYW5kb21seSAqLworICAgIHVfc2hvcnQgICAgICAgICBsb2NhbF9wb3J0OyAgICAgCisgICAgLyoqCisgICAgICogQXV0aGVudGljYXRpb24gZnVuY3Rpb24gb3IgTlVMTCBpZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQgCisgICAgICovCisgICAgdV9jaGFyICAgICAgICAgKigqYXV0aGVudGljYXRvcikgKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIHNpemVfdCk7CisgICAgLyoqIEZ1bmN0aW9uIHRvIGludGVycHJldCBpbmNvbWluZyBkYXRhICovCisgICAgbmV0c25tcF9jYWxsYmFjayBjYWxsYmFjazsgICAgICAKKyAgICAvKioKKyAgICAgKiBQb2ludGVyIHRvIGRhdGEgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IGNvbnNpZGVyIGltcG9ydGFudCAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAqY2FsbGJhY2tfbWFnaWM7CisgICAgLyoqIGNvcHkgb2Ygc3lzdGVtIGVycm5vICovCisgICAgaW50ICAgICAgICAgICAgIHNfZXJybm87CisgICAgLyoqIGNvcHkgb2YgbGlicmFyeSBlcnJubyAqLworICAgIGludCAgICAgICAgICAgICBzX3NubXBfZXJybm87ICAgCisgICAgLyoqIFNlc3Npb24gaWQgLSBBZ2VudFggb25seSAqLworICAgIGxvbmcgICAgICAgICAgICBzZXNzaWQ7IAorCisgICAgLyoKKyAgICAgKiBTTk1QdjEgJiBTTk1QdjJjIGZpZWxkcworICAgICAqLworICAgIC8qKiBjb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAqLworICAgIHVfY2hhciAgICAgICAgICpjb21tdW5pdHk7CisgICAgLyoqIExlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gKi8KKyAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5X2xlbjsgIAorICAgIC8qKiAgTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byByZWNlaXZlLiAgKi8KKyAgICBzaXplX3QgICAgICAgICAgcmN2TXNnTWF4U2l6ZTsKKyAgICAvKiogIExhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gc2VuZC4gICovCisgICAgc2l6ZV90ICAgICAgICAgIHNuZE1zZ01heFNpemU7ICAKKworICAgIC8qCisgICAgICogU05NUHYzIGZpZWxkcworICAgICAqLworICAgIC8qKiBhcmUgd2UgdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lPyAqLworICAgIHVfY2hhciAgICAgICAgICBpc0F1dGhvcml0YXRpdmU7CisgICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEICovCisgICAgdV9jaGFyICAgICAgICAgKmNvbnRleHRFbmdpbmVJRDsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLworICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0RW5naW5lSURMZW47ICAgICAKKyAgICAvKiogaW5pdGlhbCBlbmdpbmVCb290cyBmb3IgcmVtb3RlIGVuZ2luZSAqLworICAgIHVfaW50ICAgICAgICAgICBlbmdpbmVCb290czsKKyAgICAvKiogaW5pdGlhbCBlbmdpbmVUaW1lIGZvciByZW1vdGUgZW5naW5lICovCisgICAgdV9pbnQgICAgICAgICAgIGVuZ2luZVRpbWU7CisgICAgLyoqIGF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgKi8KKyAgICBjaGFyICAgICAgICAgICAqY29udGV4dE5hbWU7CisgICAgLyoqIExlbmd0aCBvZiBjb250ZXh0TmFtZSAqLworICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0TmFtZUxlbjsKKyAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgKi8KKyAgICB1X2NoYXIgICAgICAgICAqc2VjdXJpdHlFbmdpbmVJRDsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUVuZ2luZUlETGVuOyAgICAKKyAgICAvKiogb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsICovCisgICAgY2hhciAgICAgICAgICAgKnNlY3VyaXR5TmFtZTsKKyAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlOYW1lTGVuOworCisgICAgLyoqIGF1dGggcHJvdG9jb2wgb2lkICovCisgICAgb2lkICAgICAgICAgICAgKnNlY3VyaXR5QXV0aFByb3RvOworICAgIC8qKiBMZW5ndGggb2YgYXV0aCBwcm90b2NvbCBvaWQgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoUHJvdG9MZW47CisgICAgLyoqIEt1IGZvciBhdXRoIHByb3RvY29sIFhYWCAqLworICAgIHVfY2hhciAgICAgICAgICBzZWN1cml0eUF1dGhLZXlbVVNNX0FVVEhfS1VfTEVOXTsgICAgICAgCisgICAgLyoqIExlbmd0aCBvZiBLdSBmb3IgYXV0aCBwcm90b2NvbCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhLZXlMZW47CisgICAgLyoqIEt1bCBmb3IgYXV0aCBwcm90b2NvbCAqLworICAgIHVfY2hhciAgICAgICAgICAqc2VjdXJpdHlBdXRoTG9jYWxLZXk7ICAgICAgIAorICAgIC8qKiBMZW5ndGggb2YgS3VsIGZvciBhdXRoIHByb3RvY29sIFhYWCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhMb2NhbEtleUxlbjsgICAgICAgCisKKyAgICAvKiogcHJpdiBwcm90b2NvbCBvaWQgKi8KKyAgICBvaWQgICAgICAgICAgICAqc2VjdXJpdHlQcml2UHJvdG87CisgICAgLyoqIExlbmd0aCBvZiBwcml2IHByb3RvY29sIG9pZCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZQcm90b0xlbjsKKyAgICAvKiogS3UgZm9yIHByaXZhY3kgcHJvdG9jb2wgWFhYICovCisgICAgdV9jaGFyICAgICAgICAgIHNlY3VyaXR5UHJpdktleVtVU01fUFJJVl9LVV9MRU5dOyAgICAgICAKKyAgICAvKiogTGVuZ3RoIG9mIEt1IGZvciBwcml2IHByb3RvY29sICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdktleUxlbjsKKyAgICAvKiogS3VsIGZvciBwcml2IHByb3RvY29sICovCisgICAgdV9jaGFyICAgICAgICAgICpzZWN1cml0eVByaXZMb2NhbEtleTsgICAgICAgCisgICAgLyoqIExlbmd0aCBvZiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgWFhYICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuOyAgICAgICAKKworICAgIC8qKiBzbm1wIHNlY3VyaXR5IG1vZGVsLCB2MSwgdjJjLCB1c20gKi8KKyAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlNb2RlbDsKKyAgICAvKiogbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAqLworICAgIGludCAgICAgICAgICAgICBzZWN1cml0eUxldmVsOyAgCisgICAgLyoqIHRhcmdldCBwYXJhbSBuYW1lICovCisgICAgY2hhciAgICAgICAgICAgKnBhcmFtTmFtZTsKKworICAgIC8qKgorICAgICAqIHNlY3VyaXR5IG1vZHVsZSBzcGVjaWZpYyAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAqc2VjdXJpdHlJbmZvOworCisgICAgLyoqCisgICAgICogdHJhbnNwb3J0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gCisgICAgICovCisgICBzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyAqdHJhbnNwb3J0X2NvbmZpZ3VyYXRpb247CisKKyAgICAvKioKKyAgICAgKiB1c2UgYXMgeW91IHdhbnQgZGF0YSAKKyAgICAgKgorICAgICAqICAgICB1c2VkIGJ5ICdTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0snIGhhbmRsaW5nIGluIHRoZSBhZ2VudAorICAgICAqIFhYWDogb3Igc2hvdWxkIHdlIGFkZCBhIG5ldyBmaWVsZCBpbnRvIHRoaXMgc3RydWN0dXJlPworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICpteXZvaWQ7Cit9OworCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGVmaW5pdGlvbnMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCmluZGV4IGVkNTc0OGIuLjdmNDg1MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKQEAgLTcsMTYgKzcsOTcgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKLSAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgotICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgotICAgICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgogCisgICAgLyogQ3JlYXRpb24gKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCisgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKG5ldHNubXBfcGR1ICpwZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUobmV0c25tcF92YXJpYWJsZV9saXN0ICoqIHZhcmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorICAgICAgIHNubXBfYWRkX251bGxfdmFyKG5ldHNubXBfcGR1ICpwZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKKyAgICAgICBzbm1wX2Nsb25lX3ZhcmJpbmQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFybGlzdCk7CisKKyAgICAvKiBTZXR0aW5nIFZhbHVlcyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl92YWx1ZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGxvbmcgdmFsKTsKKworICAgICAvKiBPdXRwdXQgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBwcmludF92YXJpYWJsZShjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICBmcHJpbnRfdmFyaWFibGUoRklMRSAqIGZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgIHNucHJpbnRfdmFyaWFibGUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgIHByaW50X3ZhbHVlKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgZnByaW50X3ZhbHVlKEZJTEUgKiBmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICBzbnByaW50X3ZhbHVlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworCisgICAgICAgICAgIC8qIFNlZSBtaWJfYXBpLmggZm9yIHssZixzbn1wcmludF9vYmppZCAqLworCisgICAgLyogRGVsZXRpb24gKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyKCAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7ICAgICAvKiBmcmVlcyBqdXN0IHRoaXMgb25lICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQobmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJsaXN0KTsgLyogZnJlZXMgYWxsIGluIGxpc3QgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworICAgIC8qCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgorICAgICAqCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvdmFyYmluZF9hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CisgICAgICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggYi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAppbmRleCAxN2IyZTQ1Li4xYzM2ZmZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaApAQCAtOSw2ICs5LDcgQEAKICAgICBleHRlcm4gY29uc3QgY2hhciAqTmV0U25tcFZlcnNpb25JbmZvOwogI2VuZGlmCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpuZXRzbm1wX2dldF92ZXJzaW9uKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luc3RhbGwtc2ggYi9pbnN0YWxsLXNoCmluZGV4IDJjMjEyY2MuLjNmODNjZTkgMTAwNzU1Ci0tLSBhL2luc3RhbGwtc2gKKysrIGIvaW5zdGFsbC1zaApAQCAtMSwxOSArMSwzOCBAQAotIyEgL2Jpbi9zaAotIworIyEvYmluL3NoCiAjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQotIyBUaGlzIGNvbWVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCkuCisKK3NjcmlwdHZlcnNpb249MjAxMC0wMi0wNi4xODsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgogIwotIyBDb3B5cmlnaHQgMTk5MSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCiAjCi0jIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAotIyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKLSMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwotIyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSMgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAotIyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQotIyBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKLSMgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAjCiAjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CiAjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CkBAIC0yMSwyMzAgKzQwLDQ4NSBAQAogIwogIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCiAjIGZyb20gc2NyYXRjaC4KLSMKIAorbmw9JworJworSUZTPSIgIiIJJG5sIgogCiAjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKIAogIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgotZG9pdD0iJHtET0lUUFJPRy19IgotCi0KLSMgcHV0IGluIGFic29sdXRlIHBhdGhzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOyBvciB1c2UgZW52LiB2YXJzLgotCi1tdnByb2c9IiR7TVZQUk9HLW12fSIKLWNwcHJvZz0iJHtDUFBST0ctY3B9IgotY2htb2Rwcm9nPSIke0NITU9EUFJPRy1jaG1vZH0iCi1jaG93bnByb2c9IiR7Q0hPV05QUk9HLWNob3dufSIKLWNoZ3JwcHJvZz0iJHtDSEdSUFBST0ctY2hncnB9Igotc3RyaXBwcm9nPSIke1NUUklQUFJPRy1zdHJpcH0iCi1ybXByb2c9IiR7Uk1QUk9HLXJtfSIKLW1rZGlycHJvZz0iJHtNS0RJUlBST0ctbWtkaXJ9IgotCi10cmFuc2Zvcm1iYXNlbmFtZT0iIgotdHJhbnNmb3JtX2FyZz0iIgotaW5zdGNtZD0iJG12cHJvZyIKLWNobW9kY21kPSIkY2htb2Rwcm9nIDA3NTUiCi1jaG93bmNtZD0iIgotY2hncnBjbWQ9IiIKLXN0cmlwY21kPSIiCi1ybWNtZD0iJHJtcHJvZyAtZiIKLW12Y21kPSIkbXZwcm9nIgotc3JjPSIiCi1kc3Q9IiIKLWRpcl9hcmc9IiIKLQotd2hpbGUgWyB4IiQxIiAhPSB4IF07IGRvCi0gICAgY2FzZSAkMSBpbgotCS1jKSBpbnN0Y21kPSIkY3Bwcm9nIgotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktZCkgZGlyX2FyZz10cnVlCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgotCSAgICBzaGlmdAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1zKSBzdHJpcGNtZD0iJHN0cmlwcHJvZyIKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLXQ9KikgdHJhbnNmb3JtYXJnPWBlY2hvICQxIHwgc2VkICdzLy10PS8vJ2AKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWI9KikgdHJhbnNmb3JtYmFzZW5hbWU9YGVjaG8gJDEgfCBzZWQgJ3MvLWI9Ly8nYAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQkqKSAgaWYgWyB4IiRzcmMiID0geCBdCi0JICAgIHRoZW4KLQkJc3JjPSQxCi0JICAgIGVsc2UKLQkJIyB0aGlzIGNvbG9uIGlzIHRvIHdvcmsgYXJvdW5kIGEgMzg2QlNEIC9iaW4vc2ggYnVnCi0JCToKLQkJZHN0PSQxCi0JICAgIGZpCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLSAgICBlc2FjCi1kb25lCi0KLWlmIFsgeCIkc3JjIiA9IHggXQotdGhlbgotCWVjaG8gImluc3RhbGw6CW5vIGlucHV0IGZpbGUgc3BlY2lmaWVkIgotCWV4aXQgMQorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYwogZWxzZQotCXRydWUKKyAgZG9pdF9leGVjPSRkb2l0CiBmaQogCi1pZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgotCWRzdD0kc3JjCi0Jc3JjPSIiCi0JCi0JaWYgWyAtZCAkZHN0IF07IHRoZW4KLQkJaW5zdGNtZD06Ci0JZWxzZQotCQlpbnN0Y21kPW1rZGlyCi0JZmkKLWVsc2UKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgogCi0jIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQKLSMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQgCi0jIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KIAotCWlmIFsgLWYgJHNyYyAtbyAtZCAkc3JjIF0KLQl0aGVuCi0JCXRydWUKLQllbHNlCi0JCWVjaG8gImluc3RhbGw6ICAkc3JjIGRvZXMgbm90IGV4aXN0IgotCQlleGl0IDEKLQlmaQotCQotCWlmIFsgeCIkZHN0IiA9IHggXQotCXRoZW4KLQkJZWNobyAiaW5zdGFsbDoJbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkIgotCQlleGl0IDEKLQllbHNlCi0JCXRydWUKLQlmaQotCi0jIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQotIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCi0KLQlpZiBbIC1kICRkc3QgXQotCXRoZW4KLQkJZHN0PSIkZHN0Ii9gYmFzZW5hbWUgJHNyY2AKLQllbHNlCi0JCXRydWUKLQlmaQotZmkKLQotIyMgdGhpcyBzZWQgY29tbWFuZCBlbXVsYXRlcyB0aGUgZGlybmFtZSBjb21tYW5kCi1kc3RkaXI9YGVjaG8gJGRzdCB8IHNlZCAtZSAncyxbXi9dKiQsLDtzLC8kLCw7cyxeJCwuLCdgCi0KLSMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuCi0jICB0aGlzIHBhcnQgaXMgdGFrZW4gZnJvbSBOb2FoIEZyaWVkbWFuJ3MgbWtpbnN0YWxsZGlycyBzY3JpcHQKLQotIyBTa2lwIGxvdHMgb2Ygc3RhdCBjYWxscyBpbiB0aGUgdXN1YWwgY2FzZS4KLWlmIFsgISAtZCAiJGRzdGRpciIgXTsgdGhlbgotZGVmYXVsdElGUz0nCQorcG9zaXhfZ2xvYj0nPycKK2luaXRpYWxpemVfcG9zaXhfZ2xvYj0nCisgIHRlc3QgIiRwb3NpeF9nbG9iIiAhPSAiPyIgfHwgeworICAgIGlmIChzZXQgLWYpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICBwb3NpeF9nbG9iPQorICAgIGVsc2UKKyAgICAgIHBvc2l4X2dsb2I9OgorICAgIGZpCisgIH0KICcKLUlGUz0iJHtJRlMtJHtkZWZhdWx0SUZTfX0iCiAKLW9JRlM9IiR7SUZTfSIKLSMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCi1JRlM9JyUnCi1zZXQgLSBgZWNobyAke2RzdGRpcn0gfCBzZWQgLWUgJ3NAL0AlQGcnIC1lICdzQF4lQC9AJ2AKLUlGUz0iJHtvSUZTfSIKK3Bvc2l4X21rZGlyPQogCi1wYXRoY29tcD0nJworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKIAotd2hpbGUgWyAkIyAtbmUgMCBdIDsgZG8KLQlwYXRoY29tcD0iJHtwYXRoY29tcH0kezF9IgotCXNoaWZ0CitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KIAotCWlmIFsgISAtZCAiJHtwYXRoY29tcH0iIF0gOwotICAgICAgICB0aGVuCi0JCSRta2RpcnByb2cgIiR7cGF0aGNvbXB9IgotCWVsc2UKLQkJdHJ1ZQotCWZpCitzcmM9Citkc3Q9CitkaXJfYXJnPQorZHN0X2FyZz0KIAotCXBhdGhjb21wPSIke3BhdGhjb21wfS8iCitjb3B5X29uX2NoYW5nZT1mYWxzZQorbm9fdGFyZ2V0X2RpcmVjdG9yeT0KKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKKworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CisKKyAgICAtdCkgZHN0X2FyZz0kMgorCXNoaWZ0OzsKKworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworCisgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworCisgICAgLS0pCXNoaWZ0CisJYnJlYWs7OworCisgICAgLSopCWVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorCWV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0CiBkb25lCisKK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICBkb25lCiBmaQogCi1pZiBbIHgiJGRpcl9hcmciICE9IHggXQotdGhlbgotCSRkb2l0ICRpbnN0Y21kICRkc3QgJiYKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCiAKLQlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCi0JaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpCi1lbHNlCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQogCi0jIElmIHdlJ3JlIGdvaW5nIHRvIHJlbmFtZSB0aGUgZmluYWwgZXhlY3V0YWJsZSwgZGV0ZXJtaW5lIHRoZSBuYW1lIG5vdy4KKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CiAKLQlpZiBbIHgiJHRyYW5zZm9ybWFyZyIgPSB4IF0gCi0JdGhlbgotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorICAgICpbMC03XSkKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICBjYXNlICRzcmMgaW4KKyAgICAtKikgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBkc3Q9JGRzdF9hcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICAgY2FzZSAkZHN0IGluCisgICAgICAtKikgZHN0PS4vJGRzdDs7CisgICAgZXNhYworCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWV4aXQgMQorICAgICAgZmkKKyAgICAgIGRzdGRpcj0kZHN0CisgICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAorICAgICAgZHN0ZGlyX3N0YXR1cz0wCisgICAgZWxzZQorICAgICAgIyBQcmVmZXIgZGlybmFtZSwgYnV0IGZhbGwgYmFjayBvbiBhIHN1YnN0aXR1dGUgaWYgZGlybmFtZSBmYWlscy4KKyAgICAgIGRzdGRpcj1gCisJKGRpcm5hbWUgIiRkc3QiKSAyPi9kZXYvbnVsbCB8fAorCWV4cHIgWCIkZHN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKwllY2hvIFgiJGRzdCIgfAorCSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXClbXi9dLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXCkkL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cKS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIHMvLiovLi87IHEnCisgICAgICBgCisKKyAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgICBkc3RkaXJfc3RhdHVzPSQ/CisgICAgZmkKKyAgZmkKKworICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCisKKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworCSAgKlswLTddKQorCSAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisJICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKwkgICAgICAtICR1bWFzayAlIDEwICUgNCArICR1bWFzayAlIDIKKwkgICAgYDs7CisJICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisJZXNhYworCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKIAllbHNlCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3QgJHRyYW5zZm9ybWJhc2VuYW1lIHwgCi0JCQlzZWQgJHRyYW5zZm9ybWFyZ2AkdHJhbnNmb3JtYmFzZW5hbWUKKwkgIG1rZGlyX21vZGU9CiAJZmkKIAotIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAogCi0JaWYgWyB4IiRkc3RmaWxlIiA9IHggXSAKLQl0aGVuCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCisJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCisJCSAgICAgZD8/Pz8tP3ItKikgZGlmZmVyZW50X21vZGU9NzAwOzsKKwkJICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworCQkgICAgICopIGZhbHNlOzsKKwkJICAgZXNhYyAmJgorCQkgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisJCSAgICAgbHNfbGRfdG1wZGlyXzE9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgorCQkgICB9CisJCSB9CisJICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisJICAgICAgZmkKKwkgICAgICBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIKKwkgICAgZWxzZQorCSAgICAgICMgUmVtb3ZlIGFueSBkaXJzIGxlZnQgYmVoaW5kIGJ5IGFuY2llbnQgbWtkaXIgaW1wbGVtZW50YXRpb25zLgorCSAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tIDI+L2Rldi9udWxsCisJICAgIGZpCisJICAgIHRyYXAgJycgMDs7CisJZXNhYzs7CisgICAgZXNhYworCisgICAgaWYKKyAgICAgICRwb3NpeF9ta2RpciAmJiAoCisJdW1hc2sgJG1rZGlyX3VtYXNrICYmCisJJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgorICAgICAgKQorICAgIHRoZW4gOgorICAgIGVsc2UKKworICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisJLyopIHByZWZpeD0nLyc7OworCS0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQogCWVsc2UKLQkJdHJ1ZQorCSAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisJICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKwkgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCisJICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisJICBlbHNlCisJICAgIGNhc2UgJHByZWZpeCBpbgorCSAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKwkgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OworCSAgICBlc2FjCisJICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKwkgIGZpCiAJZmkKKwlwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKIAotIyBNYWtlIGEgdGVtcCBmaWxlIG5hbWUgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisgICAgICBpZiB0ZXN0IC1uICIkcHJlZml4ZXMiOyB0aGVuCisJIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkgZXZhbCAiXCRkb2l0X2V4ZWMgXCRta2RpcnByb2cgJHByZWZpeGVzIikgfHwKKwkgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQorCW9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQorICAgICAgZmkKKyAgICBmaQorICBmaQogCi0JZHN0dG1wPSRkc3RkaXIvI2luc3QuJCQjCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8CisgICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCisgIGVsc2UKIAotIyBNb3ZlIG9yIGNvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KIAotCSRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCAmJgorICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCiAKLQl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCiAKLSMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKIAotIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bwotIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCi0jIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCiAKLQlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCi0JaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorICAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mICYmCisgICAgICAgc2V0IFggJG9sZCAmJiBvbGQ9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgc2V0IFggJG5ldyAmJiBuZXc9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmICYmCiAKLSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgorICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgcm0gLWYgIiRkc3R0bXAiCisgICAgZWxzZQorICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAogCi0JJGRvaXQgJHJtY21kIC1mICRkc3RkaXIvJGRzdGZpbGUgJiYKLQkkZG9pdCAkbXZjbWQgJGRzdHRtcCAkZHN0ZGlyLyRkc3RmaWxlIAorICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICMgc3VwcG9ydCAtZi4KKyAgICAgIHsKKwkjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisJIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKwkjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCisJIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisJIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKwl7CisJICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisJICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisJICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKKwkgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKwkgIH0gfHwKKwkgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgorCSAgICAoZXhpdCAxKTsgZXhpdCAxCisJICB9CisJfSAmJgogCi1maSAmJgorCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQogCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCiAKLWV4aXQgMAorIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbG9jYWwvTWFrZWZpbGUuaW4gYi9sb2NhbC9NYWtlZmlsZS5pbgppbmRleCA4MjNiNjZjLi5jYjg0YWZjIDEwMDY0NAotLS0gYS9sb2NhbC9NYWtlZmlsZS5pbgorKysgYi9sb2NhbC9NYWtlZmlsZS5pbgpAQCAtMTYsMTAgKzE2LDExIEBACiAjCiBTTk1QQ09ORlBBVEg9QFNOTVBDT05GUEFUSEAKIFBFUlNJU1RFTlRfRElSRUNUT1JZPUBQRVJTSVNURU5UX0RJUkVDVE9SWUAKLVBFUkxTQ1JJUFRTPXNubXBjaGVjayB0a21pYiBtaWIyYyBmaXhwcm9jIGlwZi1tb2QucGwgc25tcGNvbmYgdHJhcHRvZW1haWwKK1BFUkxTQ1JJUFRTPXNubXBjaGVjayB0a21pYiBtaWIyYyBmaXhwcm9jIGlwZi1tb2QucGwgc25tcGNvbmYgdHJhcHRvZW1haWwgc25tcC1icmlkZ2UtbWliIG5ldC1zbm1wLWNlcnQKIFNIRUxMU0NSSVBUUz1taWIyYy11cGRhdGUKIFNDUklQVFNNQURFRk9SUEVSTD1zbm1wY2hlY2subWFkZSB0a21pYi5tYWRlIG1pYjJjLm1hZGUgZml4cHJvYy5tYWRlIFwKLQlpcGYtbW9kLnBsLm1hZGUgc25tcGNvbmYubWFkZSB0cmFwdG9lbWFpbC5tYWRlCisJaXBmLW1vZC5wbC5tYWRlIHNubXBjb25mLm1hZGUgdHJhcHRvZW1haWwubWFkZSBzbm1wLWJyaWRnZS1taWIubWFkZSBcCisJbmV0LXNubXAtY2VydC5tYWRlCiBEQVRBU1JDUz1taWIyYy5jb25mIG1pYjJjLml0ZXJhdGUuY29uZiBtaWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mIFwKIAltaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mIG1pYjJjLm1mZC5jb25mIFwKIAltaWIyYy5hcnJheS11c2VyLmNvbmYgbWliMmMuY29sdW1uX2VudW1zLmNvbmYgXApAQCAtMjgsNyArMjksOCBAQAogCW1pYjJjLmNoZWNrX3ZhbHVlcy5jb25mIG1pYjJjLmNoZWNrX3ZhbHVlc19sb2NhbC5jb25mIFwKIAltaWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYgbWliMmMubm90aWZ5LmNvbmYgXAogCW1pYjJjLmludF93YXRjaC5jb25mIG1pYjJjLmdlbmh0bWwuY29uZiBcCi0JbWliMmMudGFibGVfZGF0YS5jb25mIG1pYjJjLmNvbnRhaW5lci5jb25mIG1pYjJjLnBlcmwuY29uZgorCW1pYjJjLnJhdy10YWJsZS5jb25mIG1pYjJjLnRhYmxlX2RhdGEuY29uZiBcCisJbWliMmMuY29udGFpbmVyLmNvbmYgbWliMmMucGVybC5jb25mCiBNSUIyQ0lOU1RBTExESVI9JChzbm1wbGliZGlyKS9taWIyYy1kYXRhCiBNSUIyQ0RBVEFTUkM9bWliMmMtY29uZi5kCiBNSUIyQ0ZJTEVTPWRlZmF1bHQtbWZkLXRvcC5tMmMgZGV0YWlscy1lbnVtcy5tMmkgZGV0YWlscy1ub2RlLm0yaSBcCkBAIC0xMDYsNiArMTA4LDEzIEBACiAJICB0b3VjaCBtaWIyYy5tYWRlOyBcCiAgICAgICAgIGZpCiAKK25ldC1zbm1wLWNlcnQubWFkZTogJChzcmNkaXIpL25ldC1zbm1wLWNlcnQKKwlpZiB0ZXN0ICJ4JChQRVJMKSIgIT0gIngiIDsgdGhlbiBcCisJICAkKFBFUkwpIC1wIC1lICdzJV4jIS4qL3BlcmwuKiUjISQoUEVSTCklO3MjL3Vzci9sb2NhbC9zaGFyZS9zbm1wIyQoc25tcGxpYmRpcikjOycgJHtzcmNkaXJ9L25ldC1zbm1wLWNlcnQgPiBuZXQtc25tcC1jZXJ0Lm1hZGU7IFwKKwllbHNlIFwKKwkgIHRvdWNoIG5ldC1zbm1wLWNlcnQubWFkZTsgXAorICAgICAgICBmaQorCiAKIGlwZi1tb2QucGwubWFkZTogJChzcmNkaXIpL2lwZi1tb2QucGwKIAlpZiB0ZXN0ICJ4JChQRVJMKSIgIT0gIngiIDsgdGhlbiBcCkBAIC0xMjEsOSArMTMwLDkgQEAKIAkgIHRvdWNoIGZpeHByb2MubWFkZTsgXAogICAgICAgICBmaQogCi1zbm1wY29uZi5tYWRlOiAkKHNyY2Rpcikvc25tcGNvbmYKK3NubXBjb25mLm1hZGU6IHNubXBjb25mCiAJaWYgdGVzdCAieCQoUEVSTCkiICE9ICJ4IiA7IHRoZW4gXAotCSAgJChQRVJMKSAtcCAtZSAncyVeIyEuKi9wZXJsLiolIyEkKFBFUkwpJTsgcyMvdXNyL2xvY2FsL3NoYXJlIyQoZGF0YWRpcikjZzsgcyMvdXNyL2xvY2FsL2V0Yy9zbm1wIyQoU05NUENPTkZQQVRIKSNnOyBzIy92YXIvbmV0LXNubXAjJChQRVJTSVNURU5UX0RJUkVDVE9SWSkjZycgJHtzcmNkaXJ9L3NubXBjb25mID4gc25tcGNvbmYubWFkZTsgXAorCSAgJChQRVJMKSAtcCAtZSAncyVeIyEuKi9wZXJsLiolIyEkKFBFUkwpJTsgcyMvdXNyL2xvY2FsL3NoYXJlIyQoZGF0YWRpcikjZzsgcyMvdXNyL2xvY2FsL2V0Yy9zbm1wIyQoU05NUENPTkZQQVRIKSNnOyBzIy92YXIvbmV0LXNubXAjJChQRVJTSVNURU5UX0RJUkVDVE9SWSkjZycgc25tcGNvbmYgPiBzbm1wY29uZi5tYWRlOyBcCiAJZWxzZSBcCiAJICB0b3VjaCBzbm1wY29uZi5tYWRlOyBcCiAgICAgICAgIGZpCkBAIC0xMzUsNiArMTQ0LDEzIEBACiAJICB0b3VjaCB0cmFwdG9lbWFpbC5tYWRlOyBcCiAgICAgICAgIGZpCiAKK3NubXAtYnJpZGdlLW1pYi5tYWRlOiAkKHNyY2Rpcikvc25tcC1icmlkZ2UtbWliCisJaWYgdGVzdCAieCQoUEVSTCkiICE9ICJ4IiA7IHRoZW4gXAorCSAgJChQRVJMKSAtcCAtZSAncyVeIyEuKi9wZXJsLiolIyEkKFBFUkwpJScgJHtzcmNkaXJ9L3NubXAtYnJpZGdlLW1pYiA+IHNubXAtYnJpZGdlLW1pYi5tYWRlOyBcCisJZWxzZSBcCisJICB0b3VjaCBzbm1wLWJyaWRnZS1taWIubWFkZTsgXAorICAgICAgICBmaQorCiBsb2NhbGluc3RhbGw6ICQoU0NSSVBUU01BREVGT1JQRVJMKQogCUBpZiB0ZXN0ICJ4JChQRVJMKSIgIT0gIngiIDsgdGhlbiBcCiAJICBmb3IgaSBpbiAkKFBFUkxTQ1JJUFRTKSA7IGRvICQoSU5TVEFMTCkgJCRpLm1hZGUgJChJTlNUQUxMX1BSRUZJWCkkKGJpbmRpcikvJCRpIDsgZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKGJpbmRpcikiIDsgZG9uZSA7IFwKZGlmZiAtLWdpdCBhL2xvY2FsL1ZlcnNpb24tTXVuZ2UucGwgYi9sb2NhbC9WZXJzaW9uLU11bmdlLnBsCmluZGV4IGZkZTU5MzkuLjdmNmYyOWMgMTAwNzU1Ci0tLSBhL2xvY2FsL1ZlcnNpb24tTXVuZ2UucGwKKysrIGIvbG9jYWwvVmVyc2lvbi1NdW5nZS5wbApAQCAtMzMsMTIgKzMzLDYgQEAKIH0KIAogbXkgQGV4cHJzID0gKAotCSAgICAgIyBjIGZpbGVzIHdpdGggYSBlcXVhbCBzaWduIGFuZCBhIHNwZWNpZmljIHZhcmlhYmxlCi0JICAgICB7IHR5cGUgPT4gJ2MnLAotCSAgICAgICBleHByID0+ICdWZXJzaW9uSW5mbyhccyo9XHMqW14iXSopIiguKikiJywKLQkgICAgICAgcmVwbCA9PiAnVmVyc2lvbkluZm8kMSIkVkVSU0lPTiInLCAKLQkgICAgICAgZmlsZXMgPT4gW3F3KHNubXBsaWIvc25tcF92ZXJzaW9uLmMpXX0sCi0KIAkgICAgICMgZG9jdW1lbnRhdGlvbiBmaWxlcwogCSAgICAgeyB0eXBlID0+ICdkb2NzJywKIAkgICAgICAgZXhwciA9PiAnVmVyc2lvbjogW1wuMC05YS16QS1aXSsnLApAQCAtNDcsMTIgKzQxLDYgQEAKIAkgICAgICAgbm90X3JlcXVpcmVkID0+IHsnZGlzdC9uZXQtc25tcC5zcGVjJyA9PiAxfQogCSAgICAgfSwKIAotCSAgICAgIyBzZWQgZmlsZXMKLQkgICAgIHsgdHlwZSA9PiAnc2VkJywKLQkgICAgICAgZXhwciA9PiAnXnNcL1ZFUlNJT05JTkZPXC9bXlwvXSonLAotCSAgICAgICByZXBsID0+ICdzXC9WRVJTSU9OSU5GT1wvJFZFUlNJT04nLAotCSAgICAgICBmaWxlcyA9PiBbcXcoc2Vkc2NyaXB0LmluKV19LAotCiAJICAgICAjIE1ha2VmaWxlcwogCSAgICAgeyB0eXBlID0+ICdNYWtlZmlsZScsCiAJICAgICAgIGV4cHIgPT4gJ1ZFUlNJT04gPSBbXC4wLTlhLXpBLVpdKycsCkBAIC02MSwxMyArNDksNiBAQAogCSAgICAgICBub3RfcmVxdWlyZWQgPT4geydkaXN0L01ha2VmaWxlJyA9PiAxfQogCSAgICAgfSwKIAotCSAgICAgIyBEb3h5Z2VuIGNvbmZpZwotCSAgICAgeyB0eXBlID0+ICdkb3h5Z2VuJywKLQkgICAgICAgZXhwciA9PiAnUFJPSkVDVF9OVU1CRVIoXHMrKT0oXHMrKVwnKC4qKVwnJywKLQkgICAgICAgcmVwbCA9PiAnUFJPSkVDVF9OVU1CRVIkMT0kMlwnJFZFUlNJT05cJycsCi0JICAgICAgIGZpbGVzID0+IFtxdyhkb3h5Z2VuLmNvbmYpXQotCSAgICAgfSwKLQogCSAgICAgIyBwZXJsIGZpbGVzCiAJICAgICB7IHR5cGUgPT4gJ3BlcmwnLAogCSAgICAgICBleHByID0+ICdWRVJTSU9OID0gXCcoLiopXCcnLApAQCAtOTAsMTcgKzcxLDExIEBACiAJICAgICB7IHR5cGUgPT4gJ2NvbmZpZ3VyZScsCiAJICAgICAgIGV4cHIgPT4gJ0FDX0lOSVRcXChcXFtOZXQtU05NUFxcXSwgXFxbKFteXFxdXSspXFxdJywKIAkgICAgICAgcmVwbCA9PiAnQUNfSU5JVChbTmV0LVNOTVBdLCBbJFZFUlNJT05dJywKLQkgICAgICAgZmlsZXMgPT4gW3F3KGNvbmZpZ3VyZS5pbildLAorCSAgICAgICBmaWxlcyA9PiBbcXcoY29uZmlndXJlLmFjKV0sCiAJICAgICAgIGV4ZWMgPT4gJ2F1dG9jb25mJywKIAkgICAgICAgZXhmaWxlcyA9PiBbcXcoY29uZmlndXJlKV0sCiAJICAgICB9LAogCi0JICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgZmlsZXMKLQkgICAgIHsgdHlwZSA9PiAnZG94eWdlbicsCi0JICAgICAgIGV4cHIgPT4gJ1BST0pFQ1RfTlVNQkVSXHMqPSAoLiopJywKLQkgICAgICAgcmVwbCA9PiAnUFJPSkVDVF9OVU1CRVIgICAgICAgICA9ICRWRVJTSU9OJywKLQkgICAgICAgZmlsZXMgPT4gW3F3KGRveHlnZW4uY29uZildLAotCSAgICAgfSwKIAkgICAgKTsKIAogIwpkaWZmIC0tZ2l0IGEvbG9jYWwvY2VydGdlbi10ZXN0LnBsIGIvbG9jYWwvY2VydGdlbi10ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzU0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9jZXJ0Z2VuLXRlc3QucGwKQEAgLTAsMCArMSw2NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3N5c3RlbSgicm0gLXJmIC90bXAvLnNubXAxIik7CitzeXN0ZW0oInJtIC1yZiAvdG1wLy5zbm1wMiIpOworCitzeXN0ZW0oImNwIG5ldC1zbm1wLWNlcnQgfi9iaW4iKTsKKworJHN0ciA9ICJcbmdlbmNhIChpbiAtQyAvdG1wLy5zbm1wMSkgOiBjYS1zbm1wXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2EgLUkgLUMgL3RtcC8uc25tcDEgLS1jbiBjYS1zbm1wIC0tZW1haWwgY2FcQGNhLmNvbSAtLWhvc3QgaG9zdC5hLmIuY29tICAtLXNhbiBETlM6Y2EuYS5iLmNvbSAtLXNhbiBFTUFJTDpjYVxAY2EuY29tIik7CisKK3ByaW50ICJcbnVzaW5nIC1DIC90bXAvLnNubXAyIGZvciBhbGwgZm9sbG93aW5nIHRlc3RzXG4iOworJHN0ciA9ICJcbmdlbmNhOiBjYS1zbm1wXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2EgLUkgLUMgL3RtcC8uc25tcDIgLS1jbiBjYS1zbm1wIC0tZW1haWwgY2FcQGNhLmNvbSAtLWhvc3QgaG9zdC5hLmIuY29tICAtLXNhbiBETlM6Y2EuYS5iLmNvbSAtLXNhbiBFTUFJTDpjYVxAY2EuY29tIik7CisKKyRzdHIgPSAiXG5nZW5jYTogY2Etc25tcC0yIChzaWduZWQgdy8gY2Etc25tcClcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jYSAtSSAtQyAvdG1wLy5zbm1wMiAtLXdpdGgtY2EgY2Etc25tcCAtLWNuIGNhLXNubXAtMiAtLWVtYWlsIGNhMlxAY2EuY29tIC0taG9zdCBob3N0Mi5hLmIuY29tICAtLXNhbiBETlM6Y2EyLmEuYi5jb20gLS1zYW4gRU1BSUw6Y2EyXEBjYS5jb20iKTsKKworJHN0ciA9ICJcbmdlbmNzcjogc25tcGFwcFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNzciAtSSAtQyAvdG1wLy5zbm1wMiAtdCBzbm1wYXBwIC0tY24gJ2FkbWluJyAtLWVtYWlsIGFkbWluQG5ldC1zbm1wLm9yZyAtLWhvc3QgYWRtaW4taG9zdC5uZXQtc25tcC5vcmcgIC0tc2FuIEVNQUlMOmFcQGIuY29tIC0tc2FuIElQOjEuMi4zLjQgLS1zYW4gRE5TOmFkbWluLmEuYi5vcmciKTsKKworJHN0ciA9ICJcbnNpZ25jc3I6IHNubXBhcHAgdy9jYS1zbm1wXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCJkaWVkOiAkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgc2lnbmNzciAtSSAtQyAvdG1wLy5zbm1wMiAtLXdpdGgtY2EgY2Etc25tcCAtLWNzciBzbm1wYXBwICAtLWluc3RhbGwiKTsKKworJHN0ciA9ICJcbnNpZ25jc3I6IHNubXBhcHAgdy9jYS1zbm1wLTJcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBzaWduY3NyIC1JIC1DIC90bXAvLnNubXAyIC0td2l0aC1jYSBjYS1zbm1wLTIgLS1jc3Igc25tcGFwcCAtLXNhbiBFTUFJTDpub2luc3RhbGxcQGIuY29tIC0tc2FuIElQOjUuNi43LjgiKTsKKworJHN0ciA9ICJcbmdlbmNlcnQ6IHNubXB0cmFwZCAoc2VsZi1zaWduZWQpXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtSSAtQyAvdG1wLy5zbm1wMiAtdCBzbm1wdHJhcGQgLS1jbiAnTk9DJyAtLWVtYWlsICdub2NcQG5ldC1zbm1wLm9yZycgLS1ob3N0IG5vYy1ob3N0Lm5ldC1zbm1wLm9yZyAgLS1zYW4gRE5TOm5vYy5hLmIub3JnIC0tc2FuICdFTUFJTDpub2NcQG5ldC1zbm1wLm9yZyciKTsKKworJHN0ciA9ICJcbmdlbmNlcnQ6IHNubXBkIChzaWduZWQgdy8gY2Etc25tcC0yKVxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLUkgLUMgL3RtcC8uc25tcDIgLXQgc25tcGQgLS13aXRoLWNhIGNhLXNubXAtMiAtLWVtYWlsIHNubXBkXEBuZXQtc25tcC5vcmcgLS1ob3N0IHNubXBkLWhvc3QubmV0LXNubXAub3JnICAtLXNhbiBETlM6c25tcGQuYS5iLm9yZyAtLXNhbiBFTUFJTDpzbm1wZFxAbmV0LXNubXAub3JnIik7CisKK3N5c3RlbSgiY3AgbmV0LXNubXAtY2VydC5jb25mIC90bXAvLnNubXAyIik7CisKKyRzdHIgPSAiXG5nZW5jYSAoaW4gLUMgL3RtcC8uc25tcDIgLWkgQ0EtaWRlbnRpdHkpXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2EgLUkgLUMgL3RtcC8uc25tcDIgLWkgQ0EtaWRlbnRpdHkiKTsKKworJHN0ciA9ICJcbmdlbmNlcnQgKGluIC1DIC90bXAvLnNubXAyIC1pIG5vY2FkbSAtdCBzbm1wLWlkZW50aXR5KVxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLUkgLUMgL3RtcC8uc25tcDIgLXQgc25tcC1pZGVudGl0eSAtaSBub2NhZG0gLS13aXRoLWNhIENBLWlkZW50aXR5Iik7CisKKworJHN0ciA9ICJcbnNob3cgQ0FzXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgLUMgL3RtcC8uc25tcDIgc2hvd2NhIC0taXNzdWVyIC0tc3ViamVjdCIpOworCiskc3RyID0gInNob3cgQ2VydHNcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCAtQyAvdG1wLy5zbm1wMiBzaG93Y2VydCAtLWlzc3VlciAtLXN1YmplY3QiKTsKKworJHN0ciA9ICJzaG93IENBcyBmaW5nZXJwcmludFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IC1DIC90bXAvLnNubXAyIHNob3djYSAtLWZpbmdlcnByaW50IC0tYnJpZWYiKTsKKworJHN0ciA9ICJcbnNob3cgQ2VydHMgZmluZ2VycHJpbnRcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCAtQyAvdG1wLy5zbm1wMiBzaG93Y2VydCAtLWZpbmdlcnByaW50IC0tYnJpZWYiKTsKZGlmZiAtLWdpdCBhL2xvY2FsL2h0bWwtYWRkLWhlYWRlci1mb290ZXIucGwgYi9sb2NhbC9odG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsCmluZGV4IDk2ZTQ2YTUuLmMzY2I5MDIgMTAwNzU1Ci0tLSBhL2xvY2FsL2h0bWwtYWRkLWhlYWRlci1mb290ZXIucGwKKysrIGIvbG9jYWwvaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbApAQCAtMjEsNyArMjEsNyBAQAogdXNlIEZpbGU6OnN0YXQ7CiB1c2UgR2V0b3B0OjpMb25nOwogCi1teSAkdGlkeV9vcHRpb25zID0gJy1mIC9kZXYvbnVsbCAtbSAtaSAtYXN4aHRtbCAtd3JhcCAxMzAgLXF1aWV0JzsKK215ICR0aWR5X29wdGlvbnMgPSAnLWYgL2Rldi9udWxsIC1tIC1pIC1hc3hodG1sIC13cmFwIDEzMCAtcXVpZXQgLS1xdW90ZS1uYnNwIG4nOwogCiBteSAkcGF0dGVybiA9ICcnOwogbXkgJHNlY3Rpb24gPSAnJzsKZGlmZiAtLWdpdCBhL2xvY2FsL2h0bWwtdGV4dGZpbGUtZml4LnBsIGIvbG9jYWwvaHRtbC10ZXh0ZmlsZS1maXgucGwKaW5kZXggZjk0MTE5Ny4uYjcyMDc1YiAxMDA3NTUKLS0tIGEvbG9jYWwvaHRtbC10ZXh0ZmlsZS1maXgucGwKKysrIGIvbG9jYWwvaHRtbC10ZXh0ZmlsZS1maXgucGwKQEAgLTgsNiArOCw3IEBACiAjIERhdGU6ICAgICAgICAgICBEZWNlbWJlciAyOXRoLCAyMDA1CiAjIAogQGZpbGVzID0gcXciCitDSEFOR0VTCiBFUlJBVEEKIElOU1RBTEwKIE5FV1MKQEAgLTE3LDYgKzE4LDcgQEAKIFJFQURNRS5hZ2VudHgKIFJFQURNRS5haXgKIFJFQURNRS5ocHV4MTEKK1JFQURNRS5pcml4CiBSRUFETUUua3JiNQogUkVBRE1FLm1pYjJjCiBSRUFETUUubWlicwpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMgYi9sb2NhbC9taWIyYwppbmRleCA1ZmE1Y2M5Li4yMDE2ZjA2IDEwMDc1NQotLS0gYS9sb2NhbC9taWIyYworKysgYi9sb2NhbC9taWIyYwpAQCAtNTEsNiArNTEsNyBAQAogJHF1aWV0PTA7CiAkc3RyaWN0X3Vua190b2tlbiA9IDA7CiAkbm9pbmRlbnQgPSAwOworJG5vc2VkID0gMDsKICRjdXJyZW50bGluZSA9IDA7CiAkY3VycmVudGxldmVsID0gLTE7CiAlYXNzaWdubWVudHM7CkBAIC03Myw2ICs3NCw3IEBACiAgICAgcHJpbnQgIiAgLWRcdFx0ZGVidWdnaW5nIG91dHB1dCAoZG9uJ3QgZG8gaXQuICB0cnVzdCBtZS4pXG5cbiI7CiAgICAgcHJpbnQgIiAgLVMgVkFSPVZBTFx0U2V0IFwkVkFSIHZhcmlhYmxlIHRvIFwkVkFMXG5cbiI7CiAgICAgcHJpbnQgIiAgLWlcdFx0RG9uJ3QgcnVuIGluZGVudCBvbiB0aGUgcmVzdWx0aW5nIGNvZGVcblxuIjsKKyAgICBwcmludCAiICAtc1x0XHREb24ndCBsb29rIGZvciBtaWJOb2RlLnNlZCBhbmQgcnVuIHNlZCBvbiB0aGUgcmVzdWx0aW5nIGNvZGVcblxuIjsKICAgICBwcmludCAiICBtaWJOb2RlXHRUaGUgbmFtZSBvZiB0aGUgdG9wIGxldmVsIG1pYiBub2RlIHlvdSB3YW50IHRvXG5cdFx0Z2VuZXJhdGUgY29kZSBmb3IuICBCeSBkZWZhdWx0LCB0aGUgY29kZSB3aWxsIGJlIHN0b3JlZCBpblxuXHRcdG1pYk5vZGUuYyBhbmQgbWliTm9kZS5oICh1c2UgdGhlIC1mIGZsYWcgdG8gY2hhbmdlIHRoaXMpXG5cbiI7CiAgICAgMTsKIH0JCkBAIC05OSw2ICsxMDEsOCBAQAogICAgICAgICAkcXVpZXQgPSAxOwogICAgICAgfSBlbHNpZiAoL14taS8pIHsKICAgICAgICAgJG5vaW5kZW50ID0gMTsKKyAgICAgIH0gZWxzaWYgKC9eLXMvKSB7CisgICAgICAgICRub3NlZCA9IDE7CiAgICAgICB9IGVsc2lmICgvXi1oLykgewogICAgICAgICB1c2FnZSAmJiBleGl0KDEpOwogICAgICAgfSBlbHNpZiAoL14tZi8pIHsKQEAgLTIzMSw2ICsyMzUsMTUgQEAKIHByb2Nlc3MoIi1iYWxhbmNlZCIpOwogJGZoLT5jbG9zZTsKIAoraWYgKC1mICIkb3V0cHV0TmFtZS5zZWQiICYmICEkbm9zZWQpIHsKKyAgZm9yZWFjaCAkaSAoa2V5cygld3JpdHRlbikpIHsKKyAgICBuZXh0IGlmICgkaSBlcSAiLSIpOworICAgIG5leHQgaWYgKCEoJGkgPX4gL1wuW2NoXSQvKSk7CisgICAgcHJpbnQgU1RERVJSICJydW5uaW5nIHNlZCAtLWluLXBsYWNlPS5vcmlnIC0tZmlsZT0kb3V0cHV0TmFtZS5zZWQgJGlcbiIgaWYgKCEkcXVpZXQpOworICAgIHN5c3RlbSgic2VkIC0taW4tcGxhY2U9Lm9yaWcgLS1maWxlPSRvdXRwdXROYW1lLnNlZCAkaSIpOworICB9Cit9CisKIGlmICghJG5vaW5kZW50KSB7CiAgIGZvcmVhY2ggJGkgKGtleXMoJXdyaXR0ZW4pKSB7CiAgICAgbmV4dCBpZiAoJGkgZXEgIi0iKTsKQEAgLTI5MCw5ICszMDMsMTEgQEAKICMgICAkdmFyLmNyZWF0YWJsZSAgICAgLS0gMSBpZiBhIGNvbHVtbiBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgYXMgcGFydCBvZiBhIG5ldyByb3csIDAgaWYgbm90CiAjICAgJHZhci5ub2FjY2VzcyAgICAgIC0tIDEgaWYgbm90LWFjY2Vzc2libGUsIDAgaWYgbm90CiAjICAgJHZhci5hY2Nlc3NpYmxlICAgIC0tIDEgaWYgYWNjZXNzaWJsZSwgMCBpZiBub3QKKyMgICAkdmFyLnN0b3JhZ2V0eXBlICAgLS0gMSBpZiBhbiBvYmplY3QgaXMgYSBTdG9yYWdlVHlwZSBvYmplY3QsIDAgaWYgbm90CiAjICAgJHZhci5yb3dzdGF0dXMgICAgIC0tIDEgaWYgYW4gb2JqZWN0IGlzIGEgUm93U3RhdHVzIG9iamVjdCwgMCBpZiBub3QKLSMgICAgICdzZXR0YWJsZScsICdjcmVhdGFibGUnIGFuZCAncm93c3RhdHVzJyBjYW4gYWxzbyBiZSB1c2VkIHdpdGggdGFibGUgdmFyaWFibGVzCi0jICAgICB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGNvbnRhaW5zIHdyaXRhYmxlLCBjcmVhdGFibGUgb3IgUm93U3RhdHVzIGNvbHVtbiBvYmplY3RzCisjICAgICAnc2V0dGFibGUnLCAnY3JlYXRhYmxlJywgJ2xhc3RjaGFuZ2UnLCAnc3RvcmFnZXR5cGUnIGFuZCAncm93c3RhdHVzJyBjYW4KKyMgICAgIGFsc28gYmUgdXNlZCB3aXRoIHRhYmxlIHZhcmlhYmxlcyB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGNvbnRhaW5zCisjICAgICB3cml0YWJsZSwgY3JlYXRhYmxlLCBMYXN0Q2hhbmdlLCBTdG9yYWdlVHlwZSBvciBSb3dTdGF0dXMgY29sdW1uIG9iamVjdHMKICMKICMgICAkdmFyLmhhc2RlZnZhbCAgICAgLS0gcmV0dXJucyAxIGlmIHZhciBoYXMgYSBERUZWQUwgY2xhdXNlCiAjICAgJHZhci5kZWZ2YWwgICAgICAgIC0tIG5vZGUncyBERUZWQUwKQEAgLTM0Nyw2ICszNjIsNyBAQAogICAgICRpdCA9fiBzL1wkKFx3KylcLihlbnVtcykvKCV7JFNOTVA6Ok1JQnskdmFyc3skMX19eydlbnVtcyd9fSA9PSAwKSA/IDAgOiAxL2VnOwogICAgICRpdCA9fiBzL1wkKFx3KylcLihlbnVtcmFuZ2UpLyV7JFNOTVA6Ok1JQnskdmFyc3skMX19eydlbnVtcyd9fS9lZzsKICAgICAkaXQgPX4gcy9cJChcdyspXC4ocm93c3RhdHVzKS8oKCRTTk1QOjpNSUJ7JHZhcnN7JDF9fXtzeW50YXh9ID1+IFwvKFJvd1N0YXR1cylcLyk/MTowKS9lZzsKKyAgICAkaXQgPX4gcy9cJChcdyspXC4oc3RvcmFnZXR5cGUpLygoJFNOTVA6Ok1JQnskdmFyc3skMX19e3N5bnRheH0gPX4gXC8oU3RvcmFnZVR5cGUpXC8pPzE6MCkvZWc7CiAgICAgaWYgKCAkaXQgPX4gL1wkKFx3KylcLihcdyspLyApIHsKICAgICAgIHdhcm4gIlBvc3NpYmxlIHVua25vd24gdmFyaWFibGUgYXR0cmlidXRlIFwkJDEuJDIgYXQgJGN1cnJlbnRmaWxlOiRjdXJyZW50bGluZVxuIjsKICAgICB9CmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpIGIvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaQppbmRleCBiMmI0MjVlLi45MzQxY2Y5IDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmkKQEAgLTEwLDYgKzEwLDcgQEAKICMjCiAvKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmkgYi9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmkKaW5kZXggYjJhYTA3Ny4uYzE3ZGU0YyAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaQpAQCAtMjQsMTEgKzI0LDEwIEBACiBAICAgICAgICBpbmNsdWRlIG0yY19zZXR1cF9ub2RlLm0yaUAKICAgICAgICAgLyogJG0yY19ub2RlX3N1bW1hcnkgKi8KIEAgICAgICAgIGlmICRtMmNfbm9kZV9uZWVkbGVuZ3RoID09IDFACi0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfJG5vZGUsICh1X2NoYXIqKSZtaWJfaWR4LT4kbm9kZSwKKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl8kbm9kZSwgJm1pYl9pZHgtPiRub2RlLAogICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4LT4ke25vZGV9X2xlbiAqIHNpemVvZihtaWJfaWR4LT4ke25vZGV9WzBdKSk7CiBAICAgICAgICBlbHNlQAotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyXyRub2RlLCAodV9jaGFyKikmbWliX2lkeC0+JG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT4kbm9kZSkpOworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyXyRub2RlLCAmbWliX2lkeC0+JG5vZGUsIHNpemVvZihtaWJfaWR4LT4kbm9kZSkpOwogQCAgICAgICAgZW5kQAogCiBAICAgIGVuZEAgIyBmb3IgZWFjaCBjb2x1bW4KZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYyBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYwppbmRleCA3ZWNhMzA4Li5kNjY2YzlhIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjCkBAIC0xMTgsNiArMTE4LDEwIEBACiAKICNpbmNsdWRlICIke25hbWV9X2ludGVyZmFjZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogQGV2YWwgJG0yY19wcm9jZXNzaW5nX3R5cGUgPSAnaSdACkBAIC0yMTUsMTQgKzIxOSw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF8ke2NvbnRleHR9X2NoZWNrX2RlcGVuZGVuY2llczsKIEAgICAgICBlbmRACiAKLU5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQgXyR7Y29udGV4dH1fdW5kb19jb2x1bW4oICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgY29sdW1uICk7Ci0KIEAgICBlbmRAICMgd3JpdGFibGUKLUBpZiAoJG0yY190YWJsZV9wZXJzaXN0ZW50ID09IDEpIHx8ICgkbTJjX3RhYmxlX3Jvd19jcmVhdGlvbiA9PSAxKUAKLU5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQgXyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcygke2NvbnRleHR9X3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKLQotQGVuZEAKIEAgICBpZiAoIiRtMmNfZGF0YV9jb250ZXh0IiBlcSAiZ2VuZXJhdGVkIikgJiYgKCgkbTJjX3VuZG9fZW1iZWQgPT0gMCkgfHwgKCRtMmNfZGF0YV9hbGxvY2F0ZSA9PSAxKSlACiAke2NvbnRleHR9X2RhdGEgKiR7Y29udGV4dH1fYWxsb2NhdGVfZGF0YSh2b2lkKTsKIApAQCAtMjU5LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogCiAgICAgLyogIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICAgIG9wdGltaXplcyByZXRyaXZhbC4gKi8KKyAgICAgICAgb3B0aW1pemVzIHJldHJpZXZhbC4gKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9ICRjb250ZXh0LnVjX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSAkY29udGV4dC51Y19NQVhfQ09MOwogCkBAIC0zMzUsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZXh0fV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGV4dH1fb2lkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUCB8Ci0jaWZkZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQogI2Vsc2UKIEBpZiAkbTJjX3RhYmxlX3NldHRhYmxlID09IDFACkBAIC0zNDMsNyArMzQwLDcgQEAKIEBlbHNlQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQogQGVuZEAKLSNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgaWYoTlVMTCA9PSByZWdpbmZvKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlICR7Y29udGV4dH1cbiIpOwpAQCAtMzYyLDcgKzM1OSw3IEBACiAgICAgaWYoIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ICkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAgICAgCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICBpZiggYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzICkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmKCBhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQgKQpAQCAtMzg1LDcgKzM4Miw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmKCBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0ICkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KICAgICAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTYxMiw3ICs2MDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCByYywgcGFja2V0X3JjOwogCkBAIC02NjEsNiArNjU4LDUxIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjCiBAaWYgKCRtMmNfdGFibGVfcm93X2NyZWF0aW9uID09IDEpIHx8ICgkbTJjX3RhYmxlX3BlcnNpc3RlbnQgPT0gMSlACitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfJHtjb250ZXh0fV9jaGVja19pbmRleGVzKCR7Y29udGV4dH1fcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMiLCJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyMjCitAaWYgJG0yY190YWJsZV9leHRlcm5hbF9pbmRleGVzICE9IDBACisgICAgLyoKKyAgICAgKiBjaGVjayB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIEVYVEVSTkFMIHJvdyBleGlzdHMKKyAgICAgKi8KK0AgICBmb3JlYWNoICRub2RlIGV4dGVybmFsaW5kZXhACitAICAgICAgaW5jbHVkZSBtMmNfc2V0dXBfbm9kZS5tMmlACisKKyAgICAvKiAoSU5ERVgpICRtMmNfbm9kZV9zdW1tYXJ5ICovCisgICAgcmMgPSAke2NvbnRleHR9XyR7bm9kZX1fY2hlY2tfaW5kZXgoIHJvd3JlcV9jdHggKTsKKyAgICBpZihNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CitAICAgZW5kQCAjIGZvciBlYWNoIG5vbmluZGV4CisKK0BlbmRAICMgZXh0ZXJuYWwgaW5kZXgKK0AgICBmb3JlYWNoICRub2RlIGludGVybmFsaW5kZXhACitAICAgICAgaW5jbHVkZSBtMmNfc2V0dXBfbm9kZS5tMmlACisKKyAgICAvKiAoSU5ERVgpICRtMmNfbm9kZV9zdW1tYXJ5ICovCitAICAgZXZhbCAkbTJjX252X3ZhbCA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiRub2RlIkAKK0AgICBldmFsICRtMmNfbnZfbGVuID0gInJvd3JlcV9jdHgtPnRibF9pZHguJHtub2RlfV9sZW4iQAorQCAgIGV2YWwgJG0yY19udl9zdHIgPSAicm93cmVxX2N0eC0+dGJsX2lkeC4kbm9kZSJACitAICAgaW5jbHVkZSBub2RlLXZhbGlkYXRlLm0yaUAKKyAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICByYyA9ICR7bm9kZX1fY2hlY2tfaW5kZXgoIHJvd3JlcV9jdHggKTsKKyAgICAgICBpZihNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CitAICAgZW5kQCAjIGZvciBlYWNoIGludGVybmFsaW5kZXgKKworICAgIC8qCisgICAgICogaWYgaW5kaXZpZHVhbCBwYXJ0cyBsb29rIG9rLCBjaGVjayB0aGVtIGFzIGEgd2hvbGUKKyAgICAgKi8KKyAgICByZXR1cm4gJHtjb250ZXh0fV92YWxpZGF0ZV9pbmRleCggJHtjb250ZXh0fV9pZl9jdHgudXNlcl9jdHgsIHJvd3JlcV9jdHggKTsKK30gLyogXyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcyAqLworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvKioKICAqIEBpbnRlcm5hbAogICogd3JhcHBlcgpAQCAtNzQxLDcgKzc4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X29iamVjdF9sb29rdXAiLCJjYWxsZWRcbiIpKTsKQEAgLTkwNiw3ICs5NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqIHRyaTsKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAqIG9sZF9zdHJpbmc7CkBAIC05NzUsNTQgKzEwMTcsNiBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAvKiBfbWZkXyR7Y29udGV4dH1fZ2V0X3ZhbHVlcyAqLwogCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUBpZiAoJG0yY190YWJsZV9yb3dfY3JlYXRpb24gPT0gMSkgfHwgKCRtMmNfdGFibGVfcGVyc2lzdGVudCA9PSAxKUAKLU5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKLV8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMoJHtjb250ZXh0fV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOwotCi0gICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06XyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcyIsImNhbGxlZFxuIikpOwotCi0gICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKLQotIyMKLUBpZiAkbTJjX3RhYmxlX2V4dGVybmFsX2luZGV4ZXMgIT0gMEAKLSAgICAvKgotICAgICAqIGNoZWNrIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgRVhURVJOQUwgcm93IGV4aXN0cwotICAgICAqLwotQCAgIGZvcmVhY2ggJG5vZGUgZXh0ZXJuYWxpbmRleEAKLUAgICAgICBpbmNsdWRlIG0yY19zZXR1cF9ub2RlLm0yaUAKLQotICAgIC8qIChJTkRFWCkgJG0yY19ub2RlX3N1bW1hcnkgKi8KLSAgICByYyA9ICR7Y29udGV4dH1fJHtub2RlfV9jaGVja19pbmRleCggcm93cmVxX2N0eCApOwotICAgIGlmKE1GRF9TVUNDRVNTICE9IHJjKQotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKLUAgICBlbmRAICMgZm9yIGVhY2ggbm9uaW5kZXgKLQotQGVuZEAgIyBleHRlcm5hbCBpbmRleAotQCAgIGZvcmVhY2ggJG5vZGUgaW50ZXJuYWxpbmRleEAKLUAgICAgICBpbmNsdWRlIG0yY19zZXR1cF9ub2RlLm0yaUAKLQotICAgIC8qIChJTkRFWCkgJG0yY19ub2RlX3N1bW1hcnkgKi8KLUAgICBldmFsICRtMmNfbnZfdmFsID0gInJvd3JlcV9jdHgtPnRibF9pZHguJG5vZGUiQAotQCAgIGV2YWwgJG0yY19udl9sZW4gPSAicm93cmVxX2N0eC0+dGJsX2lkeC4ke25vZGV9X2xlbiJACi1AICAgZXZhbCAkbTJjX252X3N0ciA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiRub2RlIkAKLUAgICBpbmNsdWRlIG5vZGUtdmFsaWRhdGUubTJpQAotICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKLSAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIHJjID0gJHtub2RlfV9jaGVja19pbmRleCggcm93cmVxX2N0eCApOwotICAgICAgIGlmKE1GRF9TVUNDRVNTICE9IHJjKQotICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKLUAgICBlbmRAICMgZm9yIGVhY2ggaW50ZXJuYWxpbmRleAotCi0gICAgLyoKLSAgICAgKiBpZiBpbmRpdmlkdWFsIHBhcnRzIGxvb2sgb2ssIGNoZWNrIHRoZW0gYXMgYSB3aG9sZQotICAgICAqLwotICAgIHJldHVybiAke2NvbnRleHR9X3ZhbGlkYXRlX2luZGV4KCAke2NvbnRleHR9X2lmX2N0eC51c2VyX2N0eCwgcm93cmVxX2N0eCApOwotfSAvKiBfJHtjb250ZXh0fV9jaGVja19pbmRleGVzICovCi1AZW5kQCAjICRtMmNfdGFibGVfcm93X2NyZWF0aW9uCi0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTExMCw3ICsxMTA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKiB0cmk7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICByYzsKQEAgLTExNTcsNyArMTE1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1fY2hlY2tfZGVwZW5kZW5jaWVzIiwiY2FsbGVkXG4iKSk7CiAKQEAgLTEyMjcsNyArMTIyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV91bmRvX3NldHVwIiwiY2FsbGVkXG4iKSk7CkBAIC0xMjkxLDcgKzEyODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCByYzsKIApAQCAtMTM3OSw3ICsxMzczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKiB0cmk7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNDI1LDcgKzE0MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1fY29tbWl0IiwiY2FsbGVkXG4iKSk7CkBAIC0xNDU4LDcgKzE0NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1fdW5kb19jb21taXQiLCJjYWxsZWRcbiIpKTsKQEAgLTE1MzksNyArMTUzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqIHRyaTsKIApAQCAtMTU5Niw3ICsxNTkwLDcgQEAKIEAgICBpZiAkbTJjX2lycmV2ZXJzaWJsZV9jb21taXQgPT0gMUAKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwogQCAgIGVuZEAKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV9pcnJldmVyc2libGU6Y29tbWl0IiwiY2FsbGVkXG4iKSk7CkBAIC0xNjc3LDcgKzE2NzEsNyBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0gQ09OVEFJTkVSX0ZJTkQoJHtjb250ZXh0fV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisgICAgcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSU5EKCR7Y29udGV4dH1faWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaSBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpCmluZGV4IGM5YjE1MmYuLjc3OTZjZjIgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgKiBiZSB0cmVhdGVkIGEgbGl0dGxlIGRpZmZlcmVudGx5LiBTcGVjaWZpY2FsbHksIHlvdSB3aWxsIG5lZWQKICAgICAgKiAoNCAqIGxlbikgKyA0IFszIEFTQ0lJIGNoYXJzIHBlciBieXRlICsgMSBmb3IgLiwgKyA0IGZvciBsZW5dLgogICAgICAqCi0gICAgICogMykgQWxzbywgcmVtZWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBlcmF0b3IKKyAgICAgKiAzKSBBbHNvLCByZW1lbWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBhcmF0b3IKICAgICAgKiBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgZWFjaCBjb2x1bW4gaXMgcHJlZml4ZWQgYnkgdGhlCiAgICAgICogY29sdW1uIG51bWJlciBhbmQgYSBzZW1pY29sb24uIFRvIGFsbG93IGZvciB0aGUgbWF4aW11bQogICAgICAqIGNvbHVtbiB2YWx1ZXMsIDEyIGJ5dGVzIFsxMSBmb3Igb2lkICsgMSBmb3IgJzonXSBwZXIKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYyBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYwppbmRleCAxMmNmOWRkLi5kYjBmMzk4IDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjCkBAIC0yNTIsOCArMjUyLDggQEAKIGludCAke2NvbnRleHR9X3Jvd19yZWZfZGVjcmVtZW50KCR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCk7CiAKIEAgICBlbmRACi1leHRlcm4gb2lkICR7Y29udGV4dH1fb2lkW107Ci1leHRlcm4gaW50ICR7Y29udGV4dH1fb2lkX3NpemU7CitleHRlcm4gY29uc3Qgb2lkICR7Y29udGV4dH1fb2lkW107CitleHRlcm4gY29uc3QgaW50ICR7Y29udGV4dH1fb2lkX3NpemU7CiAKIEBlbmRAICMgZm9yIGVhY2gKIApAQCAtMzA5LDggKzMwOSw4IEBACiAKIEBmb3JlYWNoICR0YWJsZSB0YWJsZUAKIEAgICAgaW5jbHVkZSBtMmNfc2V0dXBfdGFibGUubTJpQAotb2lkICR7Y29udGV4dH1fb2lkW10gPSB7ICRjb250ZXh0LnVjX09JRCB9OwotaW50ICR7Y29udGV4dH1fb2lkX3NpemUgPSBPSURfTEVOR1RIKCR7Y29udGV4dH1fb2lkKTsKK2NvbnN0IG9pZCAke2NvbnRleHR9X29pZFtdID0geyAkY29udGV4dC51Y19PSUQgfTsKK2NvbnN0IGludCAke2NvbnRleHR9X29pZF9zaXplID0gT0lEX0xFTkdUSCgke2NvbnRleHR9X29pZCk7CiAKIEAgICAgaWYgIngkbTJjX2NvbnRleHRfcmVnIiBuZSAieCJACiAgICAgJHtjb250ZXh0fV9yZWdpc3RyYXRpb24gICR7Y29udGV4dH1fdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYyBiL2xvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMKaW5kZXggNTJhODI1OC4uNjFmYzI2ZCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYworKysgYi9sb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjCkBAIC0yNyw2ICsyNywxOCBAQAogQGluY2x1ZGUgZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogCisvKgorICogSWYgY29tcGlsaW5nIHdpdGhpbiB0aGUgbmV0LXNubXAgc291cmNlIGNvZGUsIHRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBmZWF0dXJlCisgKiBkZXRlY3Rpb24gbWVjaGFuc2ltIHRvIGVuc3VyZSB0aGUgYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoKSBmdW5jdGlvbgorICogaXMgbGVmdCBhdmFpbGFibGUgZXZlbiBpZiAtLWVuYWJsZS1taW5pbWlhbGlzdCBpcyB0dXJuZWQgb24uICBJZiB5b3UKKyAqIGhhdmUgY29uZmlndXJlZCBuZXQtc25tcCB1c2luZyAtLWVuYWJsZS1taW5pbWlhbGlzdCBhbmQgd2FudCB0byBjb21waWxlCisgKiB0aGlzIGNvZGUgZXh0ZXJuYWxseSB0byB0aGUgTmV0LVNOTVAgY29kZSBiYXNlLCB0aGVuIHBsZWFzZSBhZGQKKyAqIC0td2l0aC1mZWF0dXJlcz0iYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MgZW5hYmxlX3N0ZGVycmxvZyIgdG8geW91cgorICogY29uZmlndXJlIGxpbmUuCisgKi8KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZW5hYmxlX3N0ZGVycmxvZykKKwogc3RhdGljIGludCBrZWVwX3J1bm5pbmc7CiAKIHN0YXRpYyBSRVRTSUdUWVBFCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy11cGRhdGUgYi9sb2NhbC9taWIyYy11cGRhdGUKaW5kZXggNjY5YTc0NS4uNDIwMTdlNSAxMDA3NTUKLS0tIGEvbG9jYWwvbWliMmMtdXBkYXRlCisrKyBiL2xvY2FsL21pYjJjLXVwZGF0ZQpAQCAtMSw0ICsxLDQgQEAKLSMhL2Jpbi9iYXNoCisjIS9iaW4vc2gKICMKICMgJElkJAogIwpAQCAtMzksNyArMzksNyBAQAogCiBlcnJvcigpCiB7Ci0gICAgZWNobyAiRVJST1I6ICRAIiA+IC9kZXYvc3RkZXJyCisgICAgZWNobyAiRVJST1I6ICRAIiA+JjIKIH0KIAogZGllKCkKQEAgLTMwOCw4ICszMDgsMTYgQEAKICAgICAuICRIT01FLy5taWIyYy11cGRhdGVyYwogZmkKIAotaWYgWyAtZiAubWliMmMtdXBkYXRlcmMgXTsgdGhlbgotICAgIC4gLm1pYjJjLXVwZGF0ZXJjCitpZiBbIC1mICRQV0QvLm1pYjJjLXVwZGF0ZXJjIF07IHRoZW4KKyAgICAuICRQV0QvLm1pYjJjLXVwZGF0ZXJjCitlbHNlCisgICBlY2hvICJjcmVhdGluZyBleGFtcGxlIC5taWIyYy11ZHBhdGVyYy4gZWRpdCBhcyBuZWVkZWQgYW5kIHJlLXJ1biAiCisgICBlY2hvICJtaWIyYy11cGRhdGUuIgorICAgCisgICBlY2hvICJVUERBVEVfT0lEPWlwQWRkcmVzc1RhYmxlIiA+PiAubWliMmMtdXBkYXRlcmMKKyAgIGVjaG8gIlVQREFURV9DT05GPW1pYjJjLm1mZC5jb25mIiA+PiAubWliMmMtdXBkYXRlcmMKKyAgIGVjaG8gIlVQREFURV9NSUIyQ19PUFRTPSIgPj4gLm1pYjJjLXVwZGF0ZXJjCisgICBlY2hvICIjVVBEQVRFX05PUFJPQkU9MSIgPj4gLm1pYjJjLXVwZGF0ZXJjCiBmaQogCiBjaGVja19zZXR1cApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mIGIvbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mCmluZGV4IDgzM2E4NTcuLjlkNTRmMTQgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZgorKysgYi9sb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYKQEAgLTc5LDcgKzc5LDcgQEAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7CiAgICAgCiAgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKLSAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwgKHVfY2hhciAqKSAvKiogWFhYOiAkaWR4IGRhdGEgKi8sIC8qKiBYWFg6IGxlbmd0aCBvZiAkaWR4IGRhdGEgKi8pOworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAvKiogWFhYOiAkaWR4IGRhdGEgKi8sIC8qKiBYWFg6IGxlbmd0aCBvZiAkaWR4IGRhdGEgKi8pOwogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwogICAgIEBlbmRACiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIHZwdHIgPSBwdXRfaW5kZXhfZGF0YTsKICAgICAKICAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIC8qKiBYWFg6ICRpZHggZGF0YSAqLywgLyoqIFhYWDogbGVuZ3RoIG9mICRpZHggZGF0YSAqLyk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIC8qKiBYWFg6ICRpZHggZGF0YSAqLywgLyoqIFhYWDogbGVuZ3RoIG9mICRpZHggZGF0YSAqLyk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7CiAgICAgQGVuZEAKIApAQCAtMTE2LDcgKzExNiw3IEBACiAKIC8qKiBDcmVhdGUgYSBkYXRhX2NvbnRleHQgZm9yIG5vbi1leGlzdGVudCByb3dzIHRoYXQgU0VUcyBhcmUgcGVyZm9ybWVkIG9uLgogICogIHJldHVybiBhIHZvaWQgKiBwb2ludGVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHN1YnNlcXVlbnQgZ2V0X1hYWAotICogIGFuZCBzZXRfWFhYIGZ1bmN0aW9ucyBmb3IgZGF0YSByZXRyaXZhbCBhbmQgbW9kaWZpY2F0aW9uIGR1cmluZworICogIGFuZCBzZXRfWFhYIGZ1bmN0aW9ucyBmb3IgZGF0YSByZXRyaWV2YWwgYW5kIG1vZGlmaWNhdGlvbiBkdXJpbmcKICAqICB0aGlzIFNFVCByZXF1ZXN0LgogICoKICAqICBUaGUgaW5kZXhlcyBhcmUgZW5jb2RlZCAoaW4gb3JkZXIpIGludG8gdGhlIGluZGV4X2RhdGEgcG9pbnRlciwKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZiBiL2xvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZgppbmRleCBkM2UwMjZlLi4zMTU1OWFjIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mCkBAIC0xMzYsOCArMTM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBvaWQgZGVjbGFyYXRpb25zCiAgKi8KLWV4dGVybiBvaWQgJHtpfV9vaWRbXTsKLWV4dGVybiBzaXplX3QgJHtpfV9vaWRfbGVuOworZXh0ZXJuIGNvbnN0IG9pZCAke2l9X29pZFtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCAke2l9X29pZF9sZW47CiAKICNkZWZpbmUgJHtpfV9UQUJMRV9PSUQgJGkuY29tbWFvaWQKICAgICAKQEAgLTI2MSw4ICsyNjEsOCBAQAogc3RhdGljICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteV9oYW5kbGVyID0gTlVMTDsKIHN0YXRpYyAgICAgbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3MgY2I7CiAKLW9pZCAke2l9X29pZFtdID0geyAke2l9X1RBQkxFX09JRCB9Owotc2l6ZV90ICR7aX1fb2lkX2xlbiA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7ICR7aX1fVEFCTEVfT0lEIH07Citjb25zdCBzaXplX3QgJHtpfV9vaWRfbGVuID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CiAKIAogI2lmZGVmICR7aX1fQ1VTVE9NX1NPUlQKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmNvbmYgYi9sb2NhbC9taWIyYy5jb25mCmluZGV4IDMyOWU3MWUuLmM3MTk2OGMgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuY29uZgpAQCAtNSwxMiArNSwxMiBAQAogWW91IHJlcXVlc3RlZCBtaWIyYyB0byBiZSBydW4gb24gdGhlIGZvbGxvd2luZyBwYXJ0IG9mIHRoZSBNSUIgdHJlZToKICAgT0lEOiAgICAgICAgICAgICAgICAgICAgICAgCSAgICAkbmFtZQogICBudW1lcmljIHRyYW5zbGF0aW9uOiAgICAgICAJICAgICRuYW1lLm9iamVjdElECi1AZXZhbCAkbnVtID0gY291bnRfc2NhbGFyc0AKLSAgbnVtYmVyIG9mIHNjYWxhcnMgd2l0aGluOiAgICAgICAgICRudW0KLUBldmFsICRudW0gPSBjb3VudF90YWJsZXNACi0gIG51bWJlciBvZiB0YWJsZXMgd2l0aGluOiAgICAgICAgICAkbnVtCi1AZXZhbCAkbnVtID0gY291bnRfbm90aWZpY2F0aW9uc0AKLSAgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgd2l0aGluOiAgICRudW0KK0BldmFsICRudW1TID0gY291bnRfc2NhbGFyc0AKKyAgbnVtYmVyIG9mIHNjYWxhcnMgd2l0aGluOiAgICAgICAgICRudW1TCitAZXZhbCAkbnVtVCA9IGNvdW50X3RhYmxlc0AKKyAgbnVtYmVyIG9mIHRhYmxlcyB3aXRoaW46ICAgICAgICAgICRudW1UCitAZXZhbCAkbnVtTiA9IGNvdW50X25vdGlmaWNhdGlvbnNACisgIG51bWJlciBvZiBub3RpZmljYXRpb25zIHdpdGhpbjogICAkbnVtTgogCiBGaXJzdCwgZG8geW91IHdhbnQgdG8gZ2VuZXJhdGUgY29kZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKIHVjZC1zbm1wIDQuWCBsaW5lIG9mIGNvZGUsIG9yIGNvZGUgZm9yIHRoZSBuZXdlciBOZXQtU05NUCA1LlggY29kZQpAQCAtMzEsNyArMzEsMzIgQEAKIEBlbHNpZiAkYW5zICE9IDJACiBJbnZhbGlkIGFuc3dlci4KIEBlbHNlQAotQGlmIGNvdW50X3NjYWxhcnMoKSA+IDBACisgIEBpZiAkbnVtUyA+IDAgJiYgJG51bVQgPiAwQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkgTUlYRUQgTUlCIFRFTVBMQVRFCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitUaGUgcG9ydGlvbiBvZiB0aGUgTUlCIHRyZWUgdGhhdCB5b3UgaGF2ZSBzZWxlY3RlZCBjb250YWlucyBib3RoCitzY2FsYXIgb2JqZWN0cyBhbmQgTUlCIHRhYmxlcy4gIFRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBOZXQtU05NUAorc3R5bGUgY29kZSBjYW5ub3QgaGFuZGxlIGJvdGggb2YgdGhlc2Ugc2ltdWx0YW5lb3VzbHkgKHRob3VnaCB5b3UKK2NvdWxkIGdlbmVyYXRlIHRoZSB0d28gZmlsZXMgc2VwYXJhdGVseSwgYW5kIHRoZW4gbWVyZ2UgdGhlIHR3bykuCisKK1doaWNoIGNvZGUgZG8geW91IHdhbnQgdG8gZ2VuZXJhdGU6CisKKyAgMSkgU2NhbGFyIG9iamVjdHMKKyAgMikgTUlCIHRhYmxlcworCisgICAgQHByb21wdCAkYW5zIFNlbGVjdCB5b3VyIGNob2ljZSA6IEAKKyAgICBAaWYgJGFucyA9PSAxIEAKKyAgICAgIEBldmFsICRudW1UID0gMEAKKyAgICBAZWxzaWYgJGFucyA9PSAyQAorICAgICAgQGV2YWwgJG51bVMgPSAwQAorICAgIEBlbHNlQAorSW52YWxpZCBhbnN3ZXIKKyAgICAgIEBldmFsICRudW1TID0gMEAKKyAgICAgIEBldmFsICRudW1UID0gMEAKKyAgICBAZW5kQAorICBAZW5kQAorQGlmICRudW1TID4gMEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkgR0VORVJBVElORyBDT0RFIEZPUiBTQ0FMQVIgT0JKRUNUUzoKQEAgLTYzLDE5MSArODgsMTkwIEBACiAgIEBlbmRACiBAZW5kQCAjIHNjYWxhcnMKIAotQGlmIGNvdW50X3RhYmxlcygpID4gMEAKK0BpZiAkbnVtVCA+IDBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCSAgICAgR0VORVJBVElORyBDT0RFIEZPUiBUQUJMRVM6CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLSAgWW91ciB0YWJsZXMgd2lsbCBsaWtlbHkgZWl0aGVyIGZhbGwgaW50byBvbmUgb2YgdHdvIGNhdGVnb3JpZXM6CisgIFRoZSBOZXQtU05NUCBhZ2VudCBBUEkgaXMgZXh0cmVtZWx5IGV4dGVuc2l2ZSBhbmQsIGluIGZhY3QsIGxldHMKKyAgZWFjaCBwcm9ncmFtbWVyIHdyaXRlIGFnZW50IGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBzdHlsZSB0aGF0IHdvcmtzCisgIGJlc3QgZm9yIHRoZW0gYmFzZWQgb24gdGhlaXIgZXhwZXJpZW5jZSBhbmQgdGhlaXIgcHJlZmVyZW5jZS4gIFdlJ3JlCisgIGdvaW5nIHRvIGFzayB5b3UgYSBzZXJpb3VzIG9mIHF1ZXN0aW9ucyB0aGF0IHdpbGwgaGVscCBtaWIyYworICBnZW5lcmF0ZSBjb2RlIHRoYXQgYmVzdCBzdWl0cyAqeW91ciogbmVlZHMsIGFzIHRoZSBwcm9ncmFtbWVyIHRoYXQKKyAgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIHRoZSBjb2RlIGFuZCBmdXJ0aGVyIHJlZmluaW5nIGl0LiAgSWYKKyAgeW91IGRvbid0IGxpa2UgaG93IHRoZSByZXN1bHRzIGxvb2ssIHlvdSBhcmUgYWx3YXlzIHdlbGNvbWUgdG8KKyAgcmUtcnVuIG1pYjJjIGFuZCBzZWxlY3QgYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMuCiAKLSAgICAxKSB0YWJsZXMgd2hlcmUgdGhlIGxpc3Qgb2Ygcm93cyBpcyBleHRlcm5hbCB0byB0aGUgYWdlbnQuCi0gICAgICAgVGhpcyBpcyBzdWl0ZWQgdG8gTUlCcyB3aGljaCBtb25pdG9yIG9yIG1hbmlwdWxhdGUgZXh0ZXJuYWwKLSAgICAgICBkYXRhIChwZXJoYXBzIGV4dHJhY3RlZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAotICAgICAgIG9yIG90aGVyIHN5c3RlbSBpbnRlcmZhY2VzKSwgYW5kIHdoZXJlIHJvd3MgYXJlIHR5cGljYWxseQotICAgICAgIGNyZWF0ZWQgb3IgZGVzdHJveWVkIGluZGVwZW5kZW50bHkgb2YgdGhlIFNOTVAgYWdlbnQuCisgICAgVGhlcmUgYXJlIGVzc2VudGlhbGx5IHR3byB0YXNrcyBpbnZvbHZlZCBpbiBwcm9jZXNzaW5nIHJlcXVlc3RzCisgIGZvciBPSURzIHdpdGhpbiBhIE1JQiB0YWJsZSAtIGZpcnN0bHkgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IHJvdworICBvZiB0aGUgdGFibGUgZm9yIGEgZ2l2ZW4gcmVxdWVzdCwgYW5kIHRoZW4gcmV0dXJuaW5nIChvciB1cGRhdGluZykKKyAgdGhlIGFwcHJvcHJpYXRlIGNvbHVtbiB2YWx1ZSB3aXRoaW4gdGhhdCByb3cuICBNYW55IE1JQiB0YWJsZXMgbW9kZWwKKyAgdGhlIHN0YXRlIG9mIHNvbWUgZXh0ZXJuYWwgc3lzdGVtICh0aGUga2VybmVsLCBhIGRldmljZSwgcHJvY2Vzc2VzLAorICBldGMpLCBhbmQgdGhlIE1JQiBpbXBsZW1lbnRhdGlvbiBtb2R1bGUgKHRoZSBjb2RlIHdlJ3JlIGFib3V0IHRvCisgIHByb2R1Y2UgYSB0ZW1wbGF0ZSBmb3IpIGFjdHMgYXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhpcyB1bmRlcmx5aW5nCisgIHN5c3RlbSBhbmQgdGhlIFNOTVAgc2lkZS4gIE90aGVyIHRhYmxlcyBob2xkIGRhdGEgaW50ZXJuYWxseSB0aGF0IGlzCisgIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmLCBvciBhdCBsZWFzdCB0aGUgbWFzdGVyIGNvcHkKKyAgb2YgdGhlIGRhdGEgaXMgaGVsZCB3aXRoaW4gdGhlIGFnZW50LgogCi0gICAgMikgdGFibGVzIHdoZXJlIHRoZSBsaXN0IG9mIHJvd3MgaXMgaGVsZCBieSB0aGUgYWdlbnQgaXRzZWxmLgotICAgICAgIFRoaXMgaXMgcGFydGljdWxhcmx5IHN1aXRlZCB0byB0YWJsZXMgdGhhdCBhcmUgcHJpbWFyaWx5Ci0gICAgICAgbWFuaXB1bGF0ZWQgdmlhIFNOTVAsIG9yIHdoZXJlIHRoZSByb3dzIG9mIHRoZSB0YWJsZSBhcmUKLSAgICAgICByZWxhdGl2ZWx5IHN0YXRpYy4KKyAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IGNvZGUgdGVtcGxhdGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8KKyAgaW1wbGVtZW50IE1JQiB0YWJsZXMsIHVzaW5nIHZhcmlvdXMgYXBwcm9hY2hlcyB0byB0aGVzZSB0d28gdGFza3MuCiAKLSAgICAzKSBEbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgdGhlIHRhYmxlcy4KKyAgVGhlcmUgYXJlIHRocmVlIGJhc2ljIGFwcHJvYWNoZXMgdG8gaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IHJvdzoKIAotICBAcHJvbXB0ICRhbnMgU2VsZWN0IHRoZSBvcHRpb24gdGhhdCBiZXN0IGZpdHMgeW91OiBACi0gIEBpZiAkYW5zICE9IDNACi0gICAgQGlmICRhbnMgPT0gMUAKKyAgICAxKSBQYXNzIHRoZSByZXF1ZXN0IHRocm91Z2ggdG8gdGhlIHRhYmxlLXNwZWNpZmljIGNvZGUsIGFuZAorICAgICAgIGlkZW50aWZ5IHRoZSByZXF1ZXN0ZWQgcm93IHRoZXJlIChmb3IgYm90aCBHRVQgYW5kIEdFVE5FWFQKKyAgICAgICByZXF1ZXN0cykuICBUaGlzIGlzIHR5cGljYWxseSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGdldAorICAgICAgIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24sIGJ1dCByZWxpZXMgb24gc3VpdGFibGUKKyAgICAgICAocHJvZ3JhbW1lci1wcm92aWRlZCkgY29kZSB3aXRoaW4gdGhlIE1JQiBoYW5kbGVyLgorICAgICAgIE1vc3QgaW1wb3J0YW50bHksIHlvdSBzaG91bGQgYmUgYW4gZXhwZXJ0IHRvIHVzZSB0aGlzIGNob2ljZS4KIAotICAgICAgVGhpcyBzdHlsZSBvZiB0YWJsZSB0ZW5kcyB0byB1c2UgdGhlIGl0ZXJhdG9yIGhlbHBlciB0byBpbnN0cnVtZW50Ci0gICAgICB0aGUgZXh0ZXJuYWwgZGF0YSwgc28gaXQgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGFuIFNOTVAgdGFibGUuCi0gICAgICBUaGUgbWFpbiBjaGFyYWN0ZXJpc3RpYyBvZiB0aGlzIGhlbHBlciBpcyB0aGUgdXNlIG9mIGEgcGFpcgotICAgICAgb2YgIml0ZXJhdGlvbiBob29rIiByb3V0aW5lcyB0byBsb29wIHRocm91Z2ggdGhlIHJvd3MgaW4gdHVybgotICAgICAgKGluIHRoZSBtb3N0IG5hdHVyYWwgb3JkZXIgZm9yIHRoZSB1bmRlcmx5aW5nIGRhdGEpLgotICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgZGlmZmVyZW50IHRlbXBsYXRlIGNvbmZpZ3VyYXRpb25zIHRoYXQKLSAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZnJhbWV3b3JrIGZvciB0aGlzOgorICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlIHRhYmxlX2RhdGFzZXQgaGFuZGxlci4KIAotICAgICAgMSkgT25lIGJhc2VkIGFyb3VuZCBhIHNpbmdsZSBoYW5kbGVyLCB0aGF0IGluY2x1ZGVzIGNvZGUgdG8gaGFuZGxlCi0gICAgICAgICBib3RoIEdFVCBhbmQgU0VUIHJlcXVlc3RzLCBhcyB3ZWxsIGFzIHJvdyBjcmVhdGlvbiBhbmQgZGVsZXRpb24uCi0gICAgICAgICBUaGlzIHRlbXBsYXRlIGRlZmluZXMgYSBzdWl0YWJsZSBkYXRhIHN0cnVjdHVyZSwgYW5kIGltcGxlbWVudHMKLSAgICAgICAgIHRoZSB0YWJsZSBhcyBhbiBpbnRlcm5hbGx5LWhlbGQgbGlua2VkIGxpc3QsIGJ1dCBib3RoIG9mIHRoZXNlCi0gICAgICAgICBhcmUgbWFpbmx5IGZvciBpbGx1c3RyYXRpb24sIGFuZCBjb3VsZCByZWFzb25hYmx5IGJlIHJlcGxhY2VkIGJ5Ci0gICAgICAgICBjb2RlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSB0YWJsZSBiZWluZyBpbXBsZW1lbnRlZC4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGUgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy5pdGVyYXRlLmNvbmYgJG5hbWUKLSAKLSAgICAgIDIpIEFuIGFsdGVybmF0aXZlIGZyYW1ld29yaywgZGVzaWduZWQgYXMgYW4gQVBJIHdyYXBwZXIgb24gdG9wIG9mCi0gICAgICAgICB0aGUgYmFzaWMgaXRlcmF0b3IgaGVscGVyLCB0aGF0IHNlZWtzIHRvIHNlcGFyYXRlIHRoZSBzdGFuZGFyZAotICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGUgc3ludGF4IG9mIGEgTUlCIHRhYmxlICh3aGljaCBjYW4gYmUgZ2VuZXJhdGVkCi0gICAgICAgICBhdXRvbWF0aWNhbGwpLCBmcm9tIHRoZSBzZW1hbnRpY3Mgb2YgYSBnaXZlbiB0YWJsZSAod2hpY2ggY2Fubm90KS4KLSAgICAgICAgICAgSXQgZ2VuZXJhdGVzIGEgbnVtYmVyIG9mIHNlcGFyYXRlIGNvZGUgZmlsZXMsIGJ1dCB0eXBpY2FsbHkKLSAgICAgICAgIG9ubHkgb25lIG9yIHR3byBvZiB0aGVzZSB3aWxsIG5lZWQgdG8gYmUgZWRpdGVkLiAgVGhlc2UgY29udGFpbgotICAgICAgICAgc2VwYXJhdGUgJ2dldF9jb2x1bW4oKScgYW5kICdzZXRfY29sdW1uKCknIGZ1bmN0aW9ucyBmb3IgZWFjaAotICAgICAgICAgY29sdW1uIGluIHRoZSB0YWJsZSwgcGx1cyBzb21lIG90aGVyIHJvdXRpbmVzIGZvciBtYW5pcHVsYXRpbmcKLSAgICAgICAgIHJvd3MgKHBsdXMgdGhlIHN0YW5kYXJkIGl0ZXJhdG9yIGhvb2sgcm91dGluZXMpLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZXMgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mICRuYW1lCi0gICAgICAgICAoU2VlIHRoZSBhZ2VudC9taWJncm91cC9leGFtcGxlL25ldFNubXBIb3N0c1RhYmxlLmMgZmlsZSBmb3IgZXhhbXBsZSkKKyAgICAyKSBIYXZlIHRhYmxlLXNwZWNpZmljIGNvZGUgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaAorICAgICAgIHJvd3MgZXhpc3QgaW4gdGhlIHRhYmxlIChieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGVtIGluIHR1cm4pLAorICAgICAgIGJ1dCB1dGlsaXNlIHN0YW5kYXJkIGhlbHBlciBjb2RlIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICByb3cgZm9yIGEgZ2l2ZW4gcmVxdWVzdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHN1aXRhYmxlIGZvcgorICAgICAgIHRhYmxlcyB3aGVyZSB0aGUgZGF0YSBpcyBuYXR1cmFsbHkgc3RvcmVkIGluIGEgInJhbmRvbSIgb3JkZXIKKyAgICAgICAob3IgZGlmZmVyZW50bHkgdG8gdGhlIE1JQiB0YWJsZSBpbmRleCksIG9yIHdoZXJlIHJvd3MgYXJlCisgICAgICAgZnJlcXVlbnRseSBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHRhYmxlLgogCi0gICAgICAzKSBBbiBBUEkgbGF5ZXIgKG5vdCBiYXNlZCBvbiB0aGUgaXRlcmF0b3IgaGVscGVyKSB0aGF0IGF0dGVtcHRzCi0gICAgICAgICB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBTTk1QIHNwZWNpZmljIGtub3dsZWRnZSByZXF1aXJlZCB0bwotICAgICAgICAgaW1wbGVtZW50IGEgbW9kdWxlLiBJdCBwcm92aWRlcyBtb3JlIEFQSXMgdGhhbiAyLCB3aGljaCBhcmUKLSAgICAgICAgIChob3BlZnVsbHkpIHNtYWxsZXIgYW5kIG1vcmUgc3BlY2lmaWMsIHdpdGggbGVzcyBTTk1QIHRlcm1pbm9sb2d5LgotICAgICAgICAgICBUaGlzIEFQSSBpcyBhbHNvIGtub3duIGFzICJNSUJzIGZvciBEdW1taWVzIi4gIE51bWVyb3VzIHRhYmxlcwotICAgICAgICAgaW4gdGhlIE5ldC1TTk1QIGFnZW50IGhhdmUgYmVlbiByZS13cml0dGVuIHRvIHVzZSB0aGlzIEFQSS4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMubWZkLmNvbmYgJG5hbWUKLSAgICAgICAgIChTZWUgdGhlIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUqLmMgZmlsZXMgZm9yIGV4YW1wbGVzKQorICAgICAgICAgSG93ZXZlciBzZWFyY2hpbmcgZm9yIHRoZSByZXF1ZXN0ZWQgcm93IGlzIG5vdCB2ZXJ5IGVmZmljaWVudCwKKyAgICAgICBhbmQgcGVyZm9ybWFuY2UgY2FuIGJlIHNsb3cgLSBwYXJ0aWN1bGFybHkgZm9yIGxhcmdlIHRhYmxlcyB3aXRoCisgICAgICAgbWFueSByb3dzLgogCi0gICAgICA0KSBEbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgdGhlIHRhYmxlcy4KKyAgICAzKSBIb2xkIGEgbG9jYWxseSBjYWNoZWQgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIChvciBhdAorICAgICAgIGxlYXN0IGEgY2FjaGUgb2Ygd2hpY2ggcm93cyBhcmUgdmFsaWQpLCBhbmQgdXRpbGlzZSBzdGFuZGFyZAorICAgICAgIGhlbHBlciBjb2RlIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgcm93LiAgVGhpcyBpcworICAgICAgIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yLWJhc2VkIGFwcHJvYWNoLCBidXQKKyAgICAgICBjYWNoZWQgZGF0YSBpcyBpbmV2aXRhYmx5IHNsaWdodGx5ICJzdGFsZSIgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgICAgIGRhdGEgZnJvbSB0aGUgdW5kZXJseWluZyBzeXN0ZW0gYmVpbmcgbWFuYWdlZC4gIFRoaXMgYXBwcm9hY2gsCisgICAgICAgc2luY2UgaXQgcmVsaWVzIG9uIGNhY2hpbmcgb2YgZGF0YSwgaXMgYWxzbyByZXN1bHRzIGluIGEgbGFyZ2VyCisgICAgICAgbWVtb3J5IGZvb3RwcmludC4gIEl0IGlzIGxlc3MgYXBwcm9wcmlhdGUgZm9yIHRhYmxlcyB3aGVyZSByb3dzCisgICAgICAgYXJlIGZyZXF1ZW50bHkgYWRkZWQgb3IgcmVtb3ZlZCBleHRlcm5hbGx5IHRvIHRoZSBhZ2VudCAoaS5lLiwKKyAgICAgICBub3QgdmlhIFNOTVAgcmVxdWVzdHMpLgogCi0gICAgICBJZiB5b3UgYXJlIHVuc3VyZSB3aGljaCBvcHRpb24gdG8gcGljaywgY2hvaWNlcyAyKSBvciAzKSBhcmUgcGVyaGFwcwotICAgICAgbW9yZSBzdWl0ZWQgZm9yIHRob3NlIGxlc3MgZmFtaWxpYXIgd2l0aCB0aGUgY29uY2VwdHMgYmVoaW5kIHRoZSBTTk1QCi0gICAgICBwcm90b2NvbCBvcGVyYXRpb25zLCB3aGlsZSBjaG9pY2UgMSkgZ2l2ZXMgbW9yZSBjb250cm9sIG92ZXIgZXhhY3RseQotICAgICAgd2hhdCBpcyBkb25lLgorICAgICAgIFRoaXMgYXBwcm9hY2ggY2FuIGFsc28gYmUgdXNlZCB3aGVyZSBfYWxsXyB1c2Ugb2YgdGhlIHRhYmxlIGlzCisgICAgICAgdmlhIFNOTVAsIGFuZCB0aGVyZSBpcyBubyBleHRlcm5hbCAidW5kZXJseWluZyBzeXN0ZW0iLiAgSW4KKyAgICAgICB0aGlzIGNhc2UsIHRoZSBsb2NhbCBjYWNoZSBpcyB0aGUgY2Fub25pY2FsIHZlcnNpb24gb2YgdGhlCisgICAgICAgdGFibGUuCiAKLSAgICAgQHByb21wdCAkYW5zIFNlbGVjdCB0aGUgQVBJIHN0eWxlIHlvdSB3aXNoIHRvIHVzZTogQAotICAgICBAaWYgJGFucyAhPSA1QAotICAgICAgIEBpZiAkYW5zID09IDFACi0gICAgICAgICB1c2luZyB0aGUgbWliMmMuaXRlcmF0ZS5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICBAcnVuIG1pYjJjLml0ZXJhdGUuY29uZkAKLSAgICAgICBAZWxzaWYgJGFucyA9PSAyQAotICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvCi0gICAgICAgICBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICBAcnVuIG1pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmZACi0gICAgICAgQGVsc2lmICRhbnMgPT0gM0AKLSAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5tZmQuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8KLSAgICAgICAgIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgIEBydW4gbWliMmMubWZkLmNvbmZACi0gICAgICAgQGVsc2VACi0gICAgICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCi0gICAgICAgQGVuZEAKLSAgICAgQGVuZEAKKyAgICA0KSBEbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgdGhlIHRhYmxlcy4KKworICBAcHJvbXB0ICRhbnMxIFNlbGVjdCB0aGUgb3B0aW9uIHRoYXQgYmVzdCBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzOiBACisKKyAgQGlmICgkYW5zMSA9PSAyKSB8fCAoJGFuczEgPT0gMylACisKKyAgSGF2aW5nIGlkZW50aWZpZWQgdGhlIGFwcHJvcHJpYXRlIHJvdyBmb3IgYSBnaXZlbiByZXF1ZXN0LCB0aGVyZSBhcmUKKyAgdGhyZWUgYmFzaWMgc3R5bGVzIG9mIGNvZGUgZm9yIHJldHVybmluZyAob3IgdXBkYXRpbmcpIHRoZSByZXF1ZXN0ZWQKKyAgY29sdW1uIHZhbHVlIGZyb20gd2l0aGluIHRoaXMgcm93OgorCisgICAgMSkgQSBzaW5nbGUgaGFuZGxlciByb3V0aW5lLCB3aGljaCBjb250YWlucyBhbGwgdGhlIGNvZGUgbmVlZGVkIHRvCisgICAgICAgaGFuZGxlIEdFVCBhbmQgU0VUIHJlcXVlc3RzIGZvciBlYWNoIG9mIHRoZSBjb2x1bW4gb2JqZWN0cy4KKworQGlmICRhbnMxID09IDJACisgICAgICAgVGhlIGNvZGUgdHlwaWNhbGx5IGxvb2tzIGxpa2UgYSBzaW5nbGUgZnVuY3Rpb24gd2l0aCBhIGxhcmdlICdjYXNlJworICAgICAgIHN0YXRlbWVudCBjb3ZlcmluZyBlYWNoIG9mIHRoZSBjb2x1bW5zLgorCisgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgJ2l0ZXJhdG9yJyBoZXBsZXIuCitAZW5kQAorCisgICAgMikgQSBzZXQgb2YgaW5kaXZpZHVhbCByb3V0aW5lcywgZWFjaCBvZiB3aGljaCBpcyBjb25jZXJuZWQKKyAgICAgICB3aXRoIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4KKyAgICBAaWYgJGFuczEgPT0gMiBACisgICAgICAgRWFjaCBjb2x1bW4gb2JqZWN0IHdpdGhpbiB0aGUgdGFibGUgaGFzIG9uZSByb3V0aW5lIGZvcgorICAgICAgIHJldHJpZXZpbmcgdGhlIGN1cnJlbnQgdmFsdWUsIGFuZCBhbm90aGVyIGZvciBzZXR0aW5nIGEgbmV3IG9uZS4KKworICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlICdpdGVyYXRlX2FjY2VzcycgaGVwbGVyLgogICAgIEBlbHNlQAotICAgICAgQGlmICRhbnMgPT0gMkAKLSAgICAgIFRoaXMgc3R5bGUgb2YgdGFibGUgaG9sZHMgYSBsaXN0IG9mIHRoZSB0YWJsZSByb3dzIGludGVybmFsbHkKLSAgICAgIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmLiAgVHlwaWNhbGx5IHRoaXMgd2lsbCB0ZW5kIHRvIGluY2x1ZGUKLSAgICAgIHRoZSBjb2x1bW4gdmFsdWVzIGZvciBlYWNoIHBhcnRpY3VsYXIgcm93LCBhbmQgdGhhdCBpcyB0aGUKLSAgICAgIG1vZGVsIHVzZWQgYnkgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBjb2RlLiAgQnV0IGl0IHNob3VsZCB1c3VhbGx5Ci0gICAgICBiZSBwb3NzaWJsZSB0byByZWFkIGluIHNvbWUgb3IgYWxsIG9mIHRoZSBjb2x1bW4gdmFsdWVzIGZyb20gYW4KLSAgICAgIGV4dGVybmFsIHNvdXJjZSwgc2hvdWxkIHRoaXMgYmUgbmVjZXNzYXJ5IGZvciBhIHBhcnRpY3VsYXIgTUlCIHRhYmxlLgotICAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IHRlbXBsYXRlIGNvbmZpZ3VyYXRpb25zIHRoYXQKLSAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZnJhbWV3b3JrIGZvciB0aGlzOgotICAgICAgCi0KLSAgICAgIDEpIGRhdGFzZXQgc3RvcmFnZTogVGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBpcyBzdG9yZWQgY29tcGxldGVseQotICAgICAgICAgd2l0aGluIHRoZSBhZ2VudCwgYW5kIHRoZSB1c2VyLXZpc2libGUgY29kZSBkb2VzIG5vdCBuZWVkIHRvCi0gICAgICAgICBiZSBjb25jZXJuZWQgd2l0aCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW5kaXZpZHVhbAotICAgICAgICAgcm93LiAgVGhpcyBpcyBtb3N0IHN1aXRlZCB0byBNSUIgdGFibGVzIHRoYXQgYXJlIHB1cmVseSBpbnRlcm5hbAotICAgICAgICAgdG8gdGhlIGFnZW50LCByYXRoZXIgdGhhbiBtb2RlbGxpbmcgZXh0ZXJuYWwgZGF0YSwgb3IgdXNpbmcKLSAgICAgICAgIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGUgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mICRuYW1lCi0KLSAgICAgIDIpIHJvdy1kYXRhIHN0b3JhZ2U6IFRoZSBkYXRhIGZvciB0aGUgdGFibGUgaXMgaGVsZCBieSB0aGUgYWdlbnQsCi0gICAgICAgICBidXQgdXNpbmcgYW4gYXJiaXRyYXJ5ICh1c2VyLXByb3ZpZGVkKSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlCi0gICAgICAgICByZXByZXNlbnRhdGlvbiBvZiBhbiBpbmRpdmlkdWFsIHJvdy4gVGhpcyBpcyBzdWl0ZWQgZm9yIE1JQgotICAgICAgICAgdGFibGVzIHdoZXJlIHRoZXJlIGlzIGEgbmF0dXJhbCBleGlzdGluZyBkYXRhIHN0cnVjdHVyZSwKLSAgICAgICAgIG9yIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgbWF5IG5lZWQgdG8gYmUgaW50ZXJwcmV0ZWQKLSAgICAgICAgIGZvciBzb21lIGFkZGl0aW9uYWwgcHVycG9zZSwgb3RoZXIgdGhhbiBzaW1wbHkgaW1wbGVtZW50aW5nCi0gICAgICAgICB0aGUgdGFibGUgZm9yIFNOTVAgcmVxdWVzdHMuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMudGFibGVfZGF0YS5jb25mICRuYW1lCi0KLSAgICAgIDMpIGNvbnRhaW5lciBzdG9yYWdlOiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgcm93LWRhdGEKLSAgICAgICAgIG1lY2hhbmlzbSwgYnV0IHVzZXMgYSBkaWZmZXJlbnQgKGFuZCBzbGlnaHRseSBtb3JlIGVmZmljaWVudCkKLSAgICAgICAgIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiAgVGhlIG1haW4gcHJhY3RpY2FsIGVmZmVjdCBpcyB0bwotICAgICAgICAgaW50cm9kdWNlIGEgc2xpZ2h0IGNvbnN0cmFpbnQgb24gdGhlIGZvcm0gb2YgdGhlIHBlci1yb3cgZGF0YQotICAgICAgICAgc3RydWN0dXJlLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLmNvbnRhaW5lci5jb25mICRuYW1lCi0KLSAgICAgIEFsbCB0aHJlZSBvZiB0aGVzZSB0ZW1wbGF0ZXMgZ2VuZXJhdGUgYSBzaW5nbGUgY29kZSBmaWxlLCBhbmQKLSAgICAgIHVzZSBhICJzaW5nbGUgaGFuZGxlciIgZm9ybWF0IGZvciB0aGUgZHJpdmluZyBjb2RlLgotCi0gICAgICA0KSBzb3J0ZWQgYXJyYXk6ICBUaGUgZGF0YSBmb3IgdGhlIHRhYmxlIGlzIHN0b3JlZCBpbiBhIHNvcnRlZAotICAgICAgICAgYXJyYXkuCi0gICAgICAgICAobWFudWFsbHkgbWliMmMgLWMgbWliMmMuYXJyYXktdXNlci5jb25mICR7bmFtZX0pCi0KLSAgICAgIDUpIE5ldC1TTk1QIGNvbnRhaW5lcjogKEFsc28ga25vd24gYXMgIk1JQnMgZm9yIER1bW1pZXMiLCBvciBNRkQuKQotICAgICAgICAgVGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBpcyBzdG9yZWQgdmlhIGEKLSAgICAgICAgIGdlbmVyaWMgaW50ZXJmYWNlLiBWYXJpb3VzIHR5cGVzIG9mIGNvbnRhaW5lcnMgbWF5IGJlCi0gICAgICAgICBzZWxlY3RlZCwgaW5jbHVkaW5nIGxpbmtlZCBsaXN0cyBvciBiaW5hcnkgYXJyYXlzLgotICAgICAgICAgKG1hbnVhbGx5IG1pYjJjIC1jIG1pYjJjLm1mZC5jb25mICR7bmFtZX0pCi0KLSAgICAgIDYpIERvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGFibGVzLgotCi0gICAgICBBbGwgQVBJcyBhcmUgZnVsbHkgZnVuY3Rpb25hbCB3aXRoIGxpdHRsZS10by1ubyByZXF1aXJlZCBjb2RlCi0gICAgICB0byBtYWtlIHRoZSB0YWJsZSBvcGVyYXRpb25hbCBvbiB5b3VyIGVuZCBvbmNlIHRoZSB0ZW1wbGF0ZQotICAgICAgY29kZSBpcyBwcm9kdWNlZC4gIFRoZSBNRkQgYW5kIGRhdGFzZXQgQVBJcyBhcmUgYSBiaXQgYmV0dGVyCi0gICAgICBkb2N1bWVudGVkLCBidXQgdGhlIHNvcnRlZCBhcnJheSBpcyBwcm9iYWJseSBiZXR0ZXIgdGVzdGVkCi0gICAgICBhcyBpdCB3YXMgdXNlZCBoZWF2aWx5IGluIHRoZSBuZXQtcG9saWN5IHNvdXJjZWZvcmdlIHByb2plY3QuCi0gICAgICBUaGUgTUZEIEFQSSBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZSBhcnJheS11c2VyIEFQSSwgYW5kIHNldmVyYWwKLSAgICAgIHRhYmxlcyBpbiB0aGUgTmV0LVNOTVAgYWdlbnQgaGF2ZSBiZWVuIHJlLXdyaXR0ZW4gdG8gdXNlIGl0LgotICAgICAgVGhlIGRhdGFzZXQgQVBJIGlzIHVzZWQgaW5zaWRlIHRoZSBzbm1wdHJhcGQgYXBwbGljYXRpb24gZm9yCi0gICAgICBsb2dnaW5nIGluY29taW5nIHRyYXBzLgotCi0gICAgICBAcHJvbXB0ICRhbnMgU2VsZWN0IHRoZSBBUEkgc3R5bGUgeW91IHdpc2ggdG8gdXNlOiBACi0gICAgICBAaWYgJGFucyAhPSA2QAotICAgICAgICBAaWYgJGFucyA9PSAxQAotICAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZQotICAgICAgICAgIHRvIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgICBAcnVuIG1pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmZACi0gICAgICAgIEBlbHNpZiAkYW5zID09IDJACi0gICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLnRhYmxlX2RhdGEuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8KLSAgICAgICAgICBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICAgQHJ1biBtaWIyYy50YWJsZV9kYXRhLmNvbmZACi0gICAgICAgIEBlbHNpZiAkYW5zID09IDNACi0gICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLmNvbnRhaW5lci5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0bwotICAgICAgICAgIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgICBAcnVuIG1pYjJjLmNvbnRhaW5lci5jb25mQAotICAgICAgICBAZWxzaWYgJGFucyA9PSA0QAotICAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5hcnJheS11c2VyLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvCi0gICAgICAgICAgZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgIEBydW4gbWliMmMuYXJyYXktdXNlci5jb25mQAotICAgICAgICBAZWxzaWYgJGFucyA9PSA1QAotICAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5tZmQuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8gZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgIEBydW4gbWliMmMubWZkLmNvbmZACi0gICAgICAgIEBlbHNlQAotICAgICAgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KLSAgICAgICAgQGVuZEAKLSAgICAgIEBlbHNlQAotICAgICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCi0gICAgICBAZW5kQAorICAgICAgIFRoZXJlIGlzIG9uZSByb3V0aW5lIGZvciByZXBvcnRpbmcgdmFsdWVzIGZvciBHRVQgcmVxdWVzdHMsCisgICAgICAgYW5kIG9uZSByb3V0aW5lIGZvciBlYWNoIHN0YWdlIG9mIHByb2Nlc3NpbmcgYSBTRVQgcmVxdWVzdC4KICAgICBAZW5kQAorCisgICAgMykgQSAoZGlmZmVyZW50KSBzZXQgb2YgaW5kaXZpZHVhbCByb3V0aW5lcywgZWFjaCBvZiB3aGljaCBpcworICAgICAgIHNtYWxsZXIgYW5kIG1vcmUgdGlnaHRseSBmb2N1c2VkIHRoYW4gdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5CisgICAgICAgc3R5bGUgMi4gIFRoZSBhaW0gaGVyZSBpcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBTTk1QIHNwZWNpZmljCisgICAgICAga25vd2xlZGdlIHJlcXVpcmVkIHRvIGltcGxlbWVudCBhIG1vZHVsZSwgYW5kIGhpZGUgbXVjaCBvZiB0aGUKKyAgICAgICBTTk1QIHRlcm1pbm9sb2d5IGFuZCBwcm9jZXNzaW5nIHdpdGhpbiBzdGFuZGFyZCBnZW5lcmF0ZWQgY29kZQorICAgICAgICh3aGljaCBjYW4gc2ltcGx5IGJlIHVzZWQgc2lnaHQgdW5zZWVuKS4KK0BpZiAkbmFtZSAhfiAvVGFibGUkL2lACisgICAgICAgICBIb3dldmVyIHRoaXMgc3R5bGUgb2YgY29kZSBjYW4gb25seSBiZSBnZW5lcmF0ZWQgd2hlbiBtaWIyYworICAgICAgIGlzIHJ1biBvbiBhbiBpbmRpdmlkdWFsIE1JQiB0YWJsZS4gIFRvIHVzZSB0aGlzIGFwcHJvYWNoLCB5b3UKKyAgICAgICB3aWxsIG5lZWQgdG8gcmUtaW52b2tlIG1pYjJjIHdpdGggdGhlIG5hbWUgb2YgYSBzaW5nbGUgTUlCIHRhYmxlLgorQGVuZEAKKworICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlICdtZmQnIGhlcGxlciAoJ01JQiBmb3IgRHVtbWllcycpLgorCisgICAgNCkgRG8gbm90IGdlbmVyYXRlIGNvZGUgZm9yIHRoZSB0YWJsZXMuCisKKyAgIChJbiBhbGwgY2FzZXMsIEdFVE5FWFQgcmVxdWVzdHMgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkCisgICAgaW50byB0aGUgZXF1aXZhbGVudCBHRVQgcmVxdWVzdCwgc28gdGhlIE1JQiBzcGVjaWZpYyBjb2RlCisgICAgbmVlZCBvbmx5IGJlIGNvbmNlcm5lZCB3aXRoIEdFVCBhbmQgU0VUIHJlcXVlc3RzLikuCisgICAgICAgCisgIEBwcm9tcHQgJGFuczIgU2VsZWN0IHRoZSBjb2RlIHN0eWxlIHlvdSB3aXNoIHRvIHVzZTogQAogICBAZW5kQAotIEBlbmRAICMgIT0gMworCisgIEBldmFsICR0ZW1wbGF0ZSA9IE5PTkVACisgIEBpZiAkYW5zMSA9PSAxQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSAiY3JlYXRlLWRhdGFzZXQiQAorCisgIEBlbHNpZiAkYW5zMSA9PSAyQAorICAgQGlmICRhbnMyID09IDFACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9IGl0ZXJhdGVACisgICBAZWxzaWYgJGFuczIgPT0gMkAKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gaXRlcmF0ZV9hY2Nlc3NACisgICBAZWxzaWYgJGFuczIgPT0gM0AKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gbWZkQAorICAgQGVsc2lmICRhbnMyICE9IDRACisgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KKyAgIEBlbmRACisKKyAgQGVsc2lmICRhbnMxID09IDNACisgICBAaWYgJGFuczIgPT0gMUAKKyAgICAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byBhbHRlcm5hdGl2ZSB0ZW1wbGF0ZXMgdGhhdCB1c2UgdGhpcworICAgICBzdHlsZSBvZiBjb2RlIC0gZGlmZmVyaW5nIHByaW1hcmlseSBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgdXNlZCBmb3IgcmVwcmVzZW50aW5nIGEgcm93IG9mIHRoZSB0YWJsZQorCisgICAgICAxKSBUaGUgZmlyc3QgaXMgd2VsbCBzdWl0ZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlcmUgaXMgYQorICAgICAgICAgbmF0dXJhbCBleGlzdGluZyBkYXRhIHN0cnVjdHVyZSwgb3Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICB0aGUgdGFibGUgbWF5IG5lZWQgdG8gYmUgaW50ZXJwcmV0ZWQgZm9yIHNvbWUgYWRkaXRpb25hbAorICAgICAgICAgcHVycG9zZSwgb3RoZXIgdGhhbiBzaW1wbHkgaW1wbGVtZW50aW5nIHRoZSB0YWJsZSBpbiBTTk1QLgorCisgICAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSAndGFibGVfZGF0YScgaGVwbGVyLgorCisgICAgICAyKSBUaGUgc2Vjb25kIGlzIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50LCBidXQgaW50cm9kdWNlcyBzb21lCisgICAgICAgICBtaW5vciBjb25zdHJhaW50cyBvbiB0aGUgZm9ybSBvZiB0aGUgcGVyLXJvdyBkYXRhIHN0cnVjdHVyZS4KKworICAgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgJ2NvbnRhaW5lcicgaGVwbGVyLgorCisgICAgICBAcHJvbXB0ICRhbnMzIFNlbGVjdCB0aGUgcm93IHJlcHJlc2VudGF0aW9uIHlvdSB3aXNoIHRvIHVzZTogQAorCisgICAgICBAaWYgJGFuczMgPT0gMUAKKyAgICAgICBAZXZhbCAkdGVtcGxhdGUgPSB0YWJsZV9kYXRhQAorICAgICAgQGVsc2lmICRhbnMzID09IDJACisgICAgICAgQGV2YWwgJHRlbXBsYXRlID0gY29udGFpbmVyQAorICAgICAgQGVsc2VACisgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KKyAgICAgIEBlbmRACisgICBAZWxzaWYgJGFuczIgPT0gMkAKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gImFycmF5LXVzZXIiQAorICAgQGVsc2lmICRhbnMyID09IDNACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9IG1mZEAKKyAgIEBlbHNlQAorICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCisgICBAZW5kQAorCisgIEBlbHNpZiAkYW5zMSAhPSA0QAorICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCisgIEBlbmRACisKKyAgQGlmICR0ZW1wbGF0ZSBuZSBOT05FQAorICAgICBUaGUgc2FtZSB0ZW1wbGF0ZSBjb2RlIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMuJHt0ZW1wbGF0ZX0uY29uZiAkbmFtZQorICAgICBAcnVuIG1pYjJjLiR7dGVtcGxhdGV9LmNvbmZACisgIEBlbmRACiBAZW5kQCAjIHRhYmxlcwogCi1AaWYgY291bnRfbm90aWZpY2F0aW9ucygpID4gMEAKK0BpZiAkbnVtTiA+IDBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCSBHRU5FUkFUSU5HIENPREUgRk9SIE5PVElGSUNBVElPTlM6CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5jb250YWluZXIuY29uZiBiL2xvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mCmluZGV4IDI2NmYwMDcuLmU3NjYyMWYgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mCisrKyBiL2xvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mCkBAIC0xLDQgKzEsNyBAQAogIyMgLSotIGMgLSotCisjIyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXIgQ29weXJpZ2h0IChDKSBBcHBsZSwgSW5jLgorIyMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorIyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIERvIHRoZSAuaCBmaWxlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zNiw4ICszOSwxNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgogI2luY2x1ZGUgIiR7bmFtZX0uaCIKIAorI2lmZGVmICR7aS51Y31fVVNFX0NBQ0hFCitzdGF0aWMgdm9pZCBfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKK3N0YXRpYyBpbnQgX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpOworI2VuZGlmCisKIC8qKiBJbml0aWFsaXplcyB0aGUgJG5hbWUgbW9kdWxlICovCiB2b2lkCiBpbml0XyRuYW1lKHZvaWQpCkBAIC00Nyw5ICs1Nyw5IEBACiAgICAgaW5pdGlhbGl6ZV90YWJsZV8kaSgpOwogICBAZW5kQAogfQotCisjIwogQGZvcmVhY2ggJGkgdGFibGVACi0gICMgRGV0ZXJtaW5lIHRoZSBmaXJzdC9sYXN0IGNvbHVtbiBuYW1lcworIyMgRGV0ZXJtaW5lIHRoZSBmaXJzdC9sYXN0IGNvbHVtbiBuYW1lcwogICBAZXZhbCAkZmlyc3RfY29sdW1uID0gIi0iQAogICBAZXZhbCAkbGFzdF9jb2x1bW4gPSAiLSJACiAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTY1LDEyICs3NSwxOCBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07Ci0gICAgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfY29udGFpbmVyICAgICAgICAgICAgICAgKmNvbnRhaW5lcjsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKKyAgICBjb25zdCBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWcgPSBOVUxMOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgICAgICAgICAgICAgKmhhbmRsZXIgPSBOVUxMOworICAgIG5ldHNubXBfY29udGFpbmVyICAgICAgICAgICAgICAgKmNvbnRhaW5lciA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CisjaWZkZWYgJHtpLnVjfV9VU0VfQ0FDSEUKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOworI2VuZGlmCiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSAkaVxuIikpOworICAgIAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAiJGkiLCAgICAgJHtpfV9oYW5kbGVyLAogICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuLApAQCAtODAsOSArOTYsMjYgQEAKICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKIEBlbmRACiAgICAgICAgICAgICAgICk7CisgICAgaWYgKE5VTEwgPT0gcmVnKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CitAaWYgJGkuc2V0dGFibGVACisgICAgLyoqIHNob3VsZCBhIHNldCBvbiBhIG5vbi1leGlzdGVudCByb3cgY3JlYXRlIGEgbmV3IG9uZT8gKi8KKyAgICAvKiogcmVnLT5tb2RlcyB8PSBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFOyAqLworQGVuZEAKIAotICAgIGNvbnRhaW5lciAgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCAidGFibGVfY29udGFpbmVyIiApOworICAgIGNvbnRhaW5lciAgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCAiJGk6dGFibGVfY29udGFpbmVyIiApOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKwogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCiAgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZHgudHlwZSwgIC8qIGluZGV4OiAkaWR4ICovCkBAIC05MSwxMyArMTI0LDkyIEBACiAgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl8kZmlyc3RfY29sdW1uLnVjOwogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fJGxhc3RfY29sdW1uLnVjOwogICAgIAotICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3JlZ2lzdGVyKCByZWcsIHRhYmxlX2luZm8sIGNvbnRhaW5lciwgMCApOworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YWJsZV9pbmZvLCBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjb250YWluZXJfdGFibGUgaGFuZGxlciBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0LCB3aWxsIHJldXNlIGJlbG93ICovCiAKLSAgICAvKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZSAqLworI2lmZGVmICR7aS51Y31fVVNFX0NBQ0hFCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjYWNoZSBoZWxwZXIKKyAgICAgKi8KKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4pOworCisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgY2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworICAgIGNhY2hlLT5tYWdpYyA9IGNvbnRhaW5lcjsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY2FjaGUgaGFuZGxlciBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0Ki8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiByZWdpc3RlciB0aGUgdGFibGUKKyAgICAgKi8KKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciAkaVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZQorICAgICAqLworCisgICAgCisgICAgcmV0dXJuOyAvKiBvayAqLworCisgICAgLyoKKyAgICAgKiBTb21lIGVycm9yIG9jY3VycmVkIGR1cmluZyByZWdpc3RyYXRpb24uIENsZWFuIHVwIGFuZCBiYWlsLgorICAgICAqLworICBiYWlsOiAvKiBub3Qgb2sgKi8KKyAgICAKKyAgICBpZiAoaGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CisKKyNpZmRlZiAke2kudWN9X1VTRV9DQUNIRQorICAgIGlmIChjYWNoZSkKKyAgICAgICAgbmV0c25tcF9jYWNoZV9mcmVlKGNhY2hlKTsKKyNlbmRpZgorICAgIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKKyAgICBpZiAoY29udGFpbmVyKQorICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworCisgICAgaWYgKHJlZykgCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCi0gICAgLyogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgKi8KLXN0cnVjdCAke2l9X2VudHJ5IHsKKy8qKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAqLwordHlwZWRlZiBzdHJ1Y3QgJHtpfV9lbnRyeV9zIHsKICAgICBuZXRzbm1wX2luZGV4IG9pZF9pbmRleDsKIAogICAgIC8qIEluZGV4IHZhbHVlcyAqLwpAQCAtMTMzLDEwICsyNDUsMTAgQEAKICAgICBAZW5kQAogCiAgICAgaW50ICAgdmFsaWQ7Ci19OworfSAke2l9X2VudHJ5OwogCi0vKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAqLwotc3RydWN0ICR7aX1fZW50cnkgKgorLyoqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlICovCiske2l9X2VudHJ5ICoKICR7aX1fY3JlYXRlRW50cnkobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgCiAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKQEAgLTE0Nyw5ICsyNTksOSBAQAogICAgIEBlbmRACiAgIEBlbmRACiAgICAgICAgICAgICAgICAgKSB7Ci0gICAgc3RydWN0ICR7aX1fZW50cnkgKmVudHJ5OworICAgICR7aX1fZW50cnkgKmVudHJ5OwogCi0gICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHN0cnVjdCAke2l9X2VudHJ5KTsKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoJHtpfV9lbnRyeSk7CiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE2NywxMCArMjc5LDEwIEBACiAgICAgcmV0dXJuIGVudHJ5OwogfQogCi0vKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KKy8qKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KIHZvaWQKICR7aX1fcmVtb3ZlRW50cnkobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgCi0gICAgICAgICAgICAgICAgIHN0cnVjdCAke2l9X2VudHJ5ICplbnRyeSkgeworICAgICAgICAgICAgICAgICAke2l9X2VudHJ5ICplbnRyeSkgewogCiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuOyAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLwpAQCAtMTc5LDYgKzI5MSwxNSBAQAogICAgICAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCiB9CiAKKy8qKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KK3ZvaWQKKyR7aX1fZnJlZUVudHJ5KCR7aX1fZW50cnkgKmVudHJ5KSB7CisKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlICRpIHRhYmxlICovCiBpbnQKICR7aX1faGFuZGxlcigKQEAgLTE4OSwxMCArMzEwLDEzIEBACiAKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKLSAgICBuZXRzbm1wX3RhYmxlX2RhdGEgICAgICAgICAqdGFibGVfZGF0YTsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAgICAgICAqY29udGFpbmVyOwotICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKKyAgICAke2l9X2VudHJ5ICAgICAgICAgICAgICAgICAqdGFibGVfZW50cnk7CitAaWYgJGkuc2V0dGFibGVACiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKK0BlbmRACisKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAoJWQpXG4iLCByZXFpbmZvLT5tb2RlKSk7CiAKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgLyoKQEAgLTIwMCw5ICszMjQsMTggQEAKICAgICAgICAgICovCiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiAgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC0yMTUsNyArMzQ4LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKXRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLApAQCAtMjM4LDkgKzM3MSwxOCBAQAogICAgICAgICAgKi8KICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKICAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTI1MSw3ICszOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IFJTX0FDVElWRSA6IFJTX05PTkVYSVNURU5UICkpOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKLQkgICAgICAgIC8qIG9yIHBvc3NpYmxjICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCisJICAgICAgICAvKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLwogICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOwogICAgICAgICAgICAgQGVsc2VACkBAIC0yNzcsMTAgKzQxOSwxOCBAQAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiBAaWYgJGkuY3JlYXRhYmxlQAogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiBAaWYgJGkucm93c3RhdHVzQApAQCAtMjkwLDYgKzQ0MCwxNCBAQAogICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgogICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAke2l9X2NyZWF0ZUVudHJ5KGNvbnRhaW5lcgogICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACkBAIC0zMTcsNiArNDc1LDE0IEBACiAgICAgICAgICAgICBAZW5kQAogICAgICAgICAgICAgQGVuZEAKICAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAke2l9X2NyZWF0ZUVudHJ5KGNvbnRhaW5lcgogICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACkBAIC0zNDUsMTAgKzUxMSwyNiBAQAogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKIEBpZiAkaS5jcmVhdGFibGVACiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOwotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiBAaWYgJGkucm93c3RhdHVzQApAQCAtMzgyLDkgKzU2NCwxOCBAQAogCiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtNDE3LDkgKzYwOCwxOCBAQAogQGlmICRpLnJvd3N0YXR1c0AKICAgICAgICAgLyogQ2hlY2sgdGhlIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIGFuIGFjdGl2ZSByb3cgKi8KICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiAgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC00NDMsMTAgKzY0MywyNiBAQAogCiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtNTE4LDEwICs3MzQsMTggQEAKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKIEBpZiAkaS5jcmVhdGFibGVACiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOwotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKIEBpZiAkaS5yb3dzdGF0dXNACkBAIC01NDQsNiArNzY4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSU19ERVNUUk9ZOgorICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KGNvbnRhaW5lciwgdGFibGVfZW50cnkgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAZW5kQApAQCAtNTY2LDQgKzc5OCw2NyBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2lmZGVmICR7aS51Y31fVVNFX0NBQ0hFCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIAorICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2l9Ol9jYWNoZV9sb2FkIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNhY2hlIGZvciAke2l9X2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKWNhY2hlLT5tYWdpYzsKKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogbG9hZCBjYWNoZSBoZXJlIChvciBjYWxsIGZ1bmN0aW9uIHRvIGRvIGl0KQorICAgICAqLworICAgIC8qKiBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcmVjb3JkKTsgKi8KKworICAgIHJldHVybiAwOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfbG9hZCAqLworCisvKioKKyAqIEBJbnRlcm5hbAorICovCisvKiogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCitzdGF0aWMgdm9pZAorJHtpfV9mcmVlRW50cnlfY2IoJHtpfV9lbnRyeSAqZW50cnksIHZvaWQgKm1hZ2ljKSB7CisKKyAgICAke2l9X2ZyZWVFbnRyeShlbnRyeSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtpfTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiAke2l9X2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICAvKgorICAgICAqIGVtcHR5IChidXQgZG9uJ3QgZnJlZSkgY2FjaGUgaGVyZQorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopJHtpfV9mcmVlRW50cnlfY2IsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfZnJlZSAqLworI2VuZGlmIC8qICR7aS51Y31fVVNFX0NBQ0hFICovCiBAZW5kQApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiBiL2xvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYKaW5kZXggMTFmZDVkMi4uOWNmNzVmZCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZgorKysgYi9sb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mCkBAIC00Myw4ICs0Myw3IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKLSAgICBzaXplX3QgJHtpfV9vaWRfbGVuID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldDsKIAogICAgIC8qIGNyZWF0ZSB0aGUgdGFibGUgc3RydWN0dXJlIGl0c2VsZiAqLwpAQCAtNzgsNyArNzcsNyBAQAogICAgICAgIG9mIHRoZSByZXF1ZXN0LCBjaGFuZ2UgJHtpfV9oYW5kbGVyIHRvICJOVUxMIiAqLwogICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YV9zZXQobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIiRpIiwgJHtpfV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKCR7aX1fb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9zZXQsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYgYi9sb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZgppbmRleCA3Nzg3YTJmLi5lY2M1ZDEwIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZgorKysgYi9sb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZgpAQCAtNTAsMTIgKzUwLDEyIEBACiBpbml0XyR7bmFtZX0odm9pZCkKIHsKICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOwotICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3aW5mbzsKIAogICBAZm9yZWFjaCAkaSBzY2FsYXJACiAgICAgQGlmICEkaS5uZWVkbGVuZ3RoQAotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKICAgICBAZW5kQAorICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gJHtpfV93aW5mbzsKICAgQGVuZEAKIAogICAvKgpAQCAtOTIsMTAgKzkyLDkgQEAKICAgICBAZWxzZUAKICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOwogICAgIEBlbmRACi0gICAgd2luZm8gPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgJiRpLCBzaXplb2YoJGkuZGVjbCksCi0gICAgICAgICAgICAgICAgICRpLnR5cGUsIFdBVENIRVJfRklYRURfU0laRSk7Ci0gICAgaWYgKG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoIHJlZywgd2luZm8gKSA8IDAgKSB7CisgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygmJHtpfV93aW5mbywgJiRpLCBzaXplb2YoJGkuZGVjbCksCisJCQkgICAgICAkaS50eXBlLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOworaWYgKG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoIHJlZywgJiR7aX1fd2luZm8gKSA8IDAgKSB7CiAgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHdhdGNoZWQgJGkiICk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYgYi9sb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYKaW5kZXggM2E1NWQyMy4uM2EyYjVmNyAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mCisrKyBiL2xvY2FsL21pYjJjLml0ZXJhdGUuY29uZgpAQCAtMSw0ICsxLDM4IEBACiAjIyAtKi0gYyAtKi0KKyMKK0BpZiAiJGNhY2hlIiBlcSAiIiBACitAb3BlbiAtQAorVGhpcyBmcmFtZXdvcmsgY2FuIHdvcmsgaW4gb25lIG9mIHR3byB3YXlzOgorCisgIDEpICBIb2xkIGEgbG9jYWwgY2FjaGVkIGNvcHkgb2Ygc29tZSBleHRlcm5hbCBkYXRhCisgICAgICB3aGljaCBpcyB0aGVuIHVzZWQgdG8gc2VydmljZSBpbmNvbWluZyByZXF1ZXN0cy4KKworICAyKSAgUXVlcnkgdGhlIGV4dGVybmFsIGRhdGEgZGlyZWN0bHkgZm9yIGVhY2ggcmVxdWVzdC4KKworVGhlIGZpcnN0IGlzIHR5cGljYWxseSBtb3JlIGVmZmljaWVudCwgYnV0IHJlc3VsdHMgaW4KK3NsaWdodGx5ICJzdGFsZSIgZGF0YSAoZGVwZW5kaW5nIG9uIHRoZSBleHBpcmF0aW9uIHRpbWVvdXQKK2ZvciB0aGUgY2FjaGUpIGFuZCBncmVhdGVyIG1lbW9yeSB1c2FnZS4gIFRoZSBzZWNvbmQgY2FuCitwcm92aWRlIG1vcmUgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiwgYnV0IGF0IHRoZSBjb3N0IG9mCitoaWdoZXIgcHJvY2Vzc2luZyBvdmVyaGVhZHMuCisKK1doaWNoIGlzIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHlvdXIgbmVlZHM/CisgICAgQHByb21wdCAkYW5zIFNlbGVjdCB5b3VyIGNob2ljZSA6IEAKKyAgICBAaWYgJGFucyA9PSAxIEAKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVsc2lmICRhbnMgPT0gMkAKKyAgICAgIEBldmFsICRjYWNoZSA9IDBACisgICAgQGVsc2VACitJbnZhbGlkIGFuc3dlciAtIGdlbmVyYXRpbmcgY2FjaGluZyBjb2RlCisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbmRACitAZWxzZUAgICAgICAgIyAgLVMgY2FjaGU9e3NvbWV0aGluZ30KKyAgICBAaWYgIiRjYWNoZSIgbmUgIjEiICYmICIkY2FjaGUiIG5lICIwIiBACitAb3BlbiAtQAorSW52YWxpZCB2YWx1ZSBmb3IgJ2NhY2hlJyAoJGNhY2hlKSAtIGdlbmVyYXRpbmcgY2FjaGluZyBjb2RlCisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbmRACitAZW5kQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBEbyB0aGUgLmggZmlsZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTcsNyArNTEsNyBAQAogTmV0c25tcF9Ob2RlX0hhbmRsZXIgJHtpfV9oYW5kbGVyOwogTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICAke2l9X2dldF9maXJzdF9kYXRhX3BvaW50OwogTmV0c25tcF9OZXh0X0RhdGFfUG9pbnQgICAke2l9X2dldF9uZXh0X2RhdGFfcG9pbnQ7Ci1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogTmV0c25tcENhY2hlTG9hZCAke2l9X2xvYWQ7CiBOZXRzbm1wQ2FjaGVGcmVlICR7aX1fZnJlZTsKICNkZWZpbmUgJGkudWNfVElNRU9VVCAgNjAKQEAgLTcyLDEyICsxMDYsMTQgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwotICAgIHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKKyAgICBjb25zdCBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlICRpXG4iKSk7CisKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgIiRpIiwgICAgICR7aX1faGFuZGxlciwKICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbiwKQEAgLTEwMyw3ICsxMzksNyBAQAogICAgIGlpbmZvLT50YWJsZV9yZWdpbmZvICAgICAgICA9IHRhYmxlX2luZm87CiAgICAgCiAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvciggcmVnLCBpaW5mbyApOwotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCAKICAgICAgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcigkaS51Y19USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fbG9hZCwgJHtpfV9mcmVlLApAQCAtMjExLDcgKzI0Nyw3IEBACiAgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLwogfQogCi1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogLyogRXhhbXBsZSBjYWNoZSBoYW5kbGluZyAtIHNldCB1cCBsaW5rZWQgbGlzdCBmcm9tIGEgc3VpdGFibGUgZmlsZSAqLwogaW50CiAke2l9X2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMgKSB7CkBAIC0zMDcsNiArMzQzLDggQEAKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKICAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAoJWQpXG4iLCByZXFpbmZvLT5tb2RlKSk7CisKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgLyoKICAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQpAQCAtMzI4LDcgKzM2Niw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKil0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKQEAgLTM2NCw3ICs0MDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IFJTX0FDVElWRSA6IFJTX05PTkVYSVNURU5UICkpOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKLQkgICAgICAgIC8qIG9yIHBvc3NpYmxjICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCisJICAgICAgICAvKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLwogICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOwogICAgICAgICAgICAgQGVsc2VACmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mIGIvbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZgppbmRleCBkYzdlYWUzLi5hMzhhYzIwIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mCisrKyBiL2xvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYKQEAgLTc3LDExICs3NywxMyBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlfaGFuZGxlcjsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvOwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgJGlcbiIpKTsKKwogICAgIC8qKiBjcmVhdGUgdGhlIHRhYmxlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzICovCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgaWluZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaXRlcmF0b3JfaW5mbyk7CkBAIC0xMTIsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAKICAgICAvKiogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgICAgb3B0aW1pemVzIHJldHJpdmFsLiAqLworICAgICAgICBvcHRpbWl6ZXMgcmV0cmlldmFsLiAqLwogICAgIEBldmFsICRtaW52ID0gMHhmZmZmZmZmZkAKICAgICBAZXZhbCAkbWF4diA9IDBACiAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtMTc3LDE0ICsxNzksMTQgQEAKIAogICAgIHZvaWQgKmRhdGFfY29udGV4dCA9IE5VTEw7CiAKLSAgICBvaWQgKnN1ZmZpeDsKLSAgICBzaXplX3Qgc3VmZml4X2xlbjsKLQogICAgIC8qKiBjb2x1bW4gYW5kIHJvdyBpbmRleCBlbmNvZGVkIHBvcnRpb24gKi8KLSAgICBzdWZmaXggPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lICsgcmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxOwotICAgIHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCisgICAgY29uc3Qgb2lkICogY29uc3Qgc3VmZml4ID0KKyAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKKyAgICBjb25zdCBzaXplX3Qgc3VmZml4X2xlbiA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0KICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMSk7CiAgICAgCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKCVkKVxuIiwgcmVxaW5mby0+bW9kZSkpOworCiAgICAgZm9yKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgdmFyID0gcmVxdWVzdC0+cmVxdWVzdHZiOwogICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkICE9IDApCkBAIC0yNDIsOCArMjQ0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZ2V0XyRjKGRhdGFfY29udGV4dCwgJnJldHZhbF9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHZhciwgJGMudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIgKikgcmV0dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbF9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5ub3RpZnkuY29uZiBiL2xvY2FsL21pYjJjLm5vdGlmeS5jb25mCmluZGV4IGQyMTE2MTkuLjc3ZjMzMzAgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLm5vdGlmeS5jb25mCisrKyBiL2xvY2FsL21pYjJjLm5vdGlmeS5jb25mCkBAIC0zMCwyMCArMzAsMjEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIiR7bmFtZX0uaCIKIAotc3RhdGljIG9pZCBzbm1wdHJhcF9vaWRbXSA9IHsxLCAzLCA2LCAxLCA2LCAzLCAxLCAxLCA0LCAxLCAwfTsKK2V4dGVybiBjb25zdCBvaWQgc25tcHRyYXBfb2lkW107CitleHRlcm4gY29uc3Qgc2l6ZV90IHNubXB0cmFwX29pZF9sZW47CiAKIEBmb3JlYWNoICRpIG5vdGlmaWNhdGlvbnNACiBpbnQKIHNlbmRfJHtpfV90cmFwKCB2b2lkICkKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICp2YXJfbGlzdCA9IE5VTEw7Ci0gICAgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CiAgICAgQGZvcmVhY2ggJHYgdmFyYmluZHNACiAgICAgQGlmICR2Lmlzc2NhbGFyQAotICAgIG9pZCAke3Z9X29pZFtdID0geyAkdi5jb21tYW9pZCwgMCB9OworICAgIGNvbnN0IG9pZCAke3Z9X29pZFtdID0geyAkdi5jb21tYW9pZCwgMCB9OwogICAgIEBlbmRACiAgICAgQGlmICEkdi5pc3NjYWxhckAKLSAgICBvaWQgJHt2fV9vaWRbXSA9IHsgJHYuY29tbWFvaWQsIC8qIGluc2VydCBpbmRleCBoZXJlICovIH07CisgICAgY29uc3Qgb2lkICR7dn1fb2lkW10gPSB7ICR2LmNvbW1hb2lkLCAvKiBpbnNlcnQgaW5kZXggaGVyZSAqLyB9OwogICAgIEBlbmRACiAgICAgQGVuZEAKIApAQCAtNTEsNyArNTIsNyBAQAogICAgICAqIFNldCB0aGUgc25tcFRyYXBPaWQuMCB2YWx1ZQogICAgICAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcl9saXN0LAotICAgICAgICBzbm1wdHJhcF9vaWQsIE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKSwKKyAgICAgICAgc25tcHRyYXBfb2lkLCBzbm1wdHJhcF9vaWRfbGVuLAogICAgICAgICBBU05fT0JKRUNUX0lELAogICAgICAgICAke2l9X29pZCwgc2l6ZW9mKCR7aX1fb2lkKSk7CiAgICAgCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYgYi9sb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYKaW5kZXggOGRhZjhmMS4uOGZhMjcwYiAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMub2xkLWFwaS5jb25mCisrKyBiL2xvY2FsL21pYjJjLm9sZC1hcGkuY29uZgpAQCAtNjksMTAgKzY5LDEyIEBACiAgICAgQGV2YWwgJHN1ZmZpeGxlbiA9ICRpLm9pZGxlbmd0aCAtICRuYW1lLm9pZGxlbmd0aEAKICNkZWZpbmUgJGkudWMJCSRtYWdpYwogICAgIEBpZiAkaS5zZXR0YWJsZUAKLXskaS51YywgICRpLnR5cGUsICBSV1JJVEUsICB2YXJfJHtuYW1lfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCB9fSwKK3skaS51YywgICRpLnR5cGUsICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgdmFyXyR7bmFtZX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggfX0sCiAgICAgQGVuZEAKICAgICBAaWYgISRpLnNldHRhYmxlQAoteyRpLnVjLCAgJGkudHlwZSwgIFJPTkxZICwgIHZhcl8ke25hbWV9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4IH19LAoreyRpLnVjLCAgJGkudHlwZSwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorIHZhcl8ke25hbWV9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4IH19LAogICAgIEBlbmRACiBAZW5kQAogCkBAIC05MSwxMCArOTMsMTIgQEAKICAgICBAZXZhbCAkbWFnaWMgPSAkbWFnaWMgKyAxQAogI2RlZmluZSAkYy51YwkJJG1hZ2ljCiAgICAgQGlmICRjLnNldHRhYmxlQAoteyRjLnVjLCAgJGMudHlwZSwgIFJXUklURSwgIHZhcl8ke2l9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4ICRjdG1wIDEsICRjLnN1YmlkIH19LAoreyRjLnVjLCAgJGMudHlwZSwgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyB2YXJfJHtpfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCAkY3RtcCAxLCAkYy5zdWJpZCB9fSwKICAgICBAZW5kQAogICAgIEBpZiAhJGMuc2V0dGFibGVACi17JGMudWMsICAkYy50eXBlLCAgUk9OTFksICAgdmFyXyR7aX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggJGN0bXAgMSwgJGMuc3ViaWQgfX0sCit7JGMudWMsICAkYy50eXBlLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgdmFyXyR7aX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggJGN0bXAgMSwgJGMuc3ViaWQgfX0sCiAgICAgQGVuZEAKICBAZW5kQAogQGVuZEAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mIGIvbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4OGZkYgotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mCkBAIC0wLDAgKzEsNjEyIEBACisjIyAtKi0gYyAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIERvIHRoZSAuaCBmaWxlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAb3BlbiAke25hbWV9LmhACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkSWQ6IG1pYjJjLnJhdy10YWJsZS5jb25mIDE3NDM2IDIwMDktMDMtMzEgMTU6MTI6MTlaIGR0czEyICQKKyAqLworI2lmbmRlZiAkbmFtZS51Y19ICisjZGVmaW5lICRuYW1lLnVjX0gKKwordm9pZCBpbml0XyRuYW1lKHZvaWQpOworCisjZW5kaWYgLyogJG5hbWUudWNfSCAqLworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgRG8gdGhlIC5jIGZpbGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BvcGVuICR7bmFtZX0uY0AKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICRJZDogbWliMmMucmF3LXRhYmxlLmNvbmYgMTc0MzYgMjAwOS0wMy0zMSAxNToxMjoxOVogZHRzMTIgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSAiJHtuYW1lfS5oIgorCitAZm9yZWFjaCAkaSB0YWJsZUAKKyAgIyMgRGV0ZXJtaW5lIHRoZSBmaXJzdC9sYXN0IGNvbHVtbiBuYW1lcworICBAZXZhbCAkZmlyc3RfY29sdW1uID0gIi0iQAorICBAZXZhbCAkbGFzdF9jb2x1bW4gPSAiLSJACisgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICBAaWYgJGMucmVhZGFibGVACisgICAgICBAaWYgIiRmaXJzdF9jb2x1bW4iIGVxICItIkAKKyAgICAgICAgQGV2YWwgJGZpcnN0X2NvbHVtbiA9ICRjQAorICAgICAgQGVuZEAKKyAgICAgIEBldmFsICRsYXN0X2NvbHVtbiA9ICRjQAorICAgIEBlbmRACisgIEBlbmRACisKKy8qIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlICRpICovCisgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyNkZWZpbmUgQ09MVU1OXyRjLnVjCQkkYy5zdWJpZAorICBAZW5kQAorCisgICAgLyogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgKi8KK3N0cnVjdCAke2l9X2VudHJ5IHsKKyAgICAvKiBJbmRleCB2YWx1ZXMgKi8KKyAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAorICAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAorICAgICRpZHguZGVjbCAkaWR4W05OTl07CisgICAgc2l6ZV90ICR7aWR4fV9sZW47CisgICAgIEBlbHNlQAorICAgICRpZHguZGVjbCAkaWR4OworICAgICBAZW5kQAorICAgIEBlbmRACisKKyAgICAvKiBDb2x1bW4gdmFsdWVzICovCisgICAgQGZvcmVhY2ggJGMgbm9uaW5kZXhACisgICAgQGlmICRjLnJlYWRhYmxlQAorICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAkYy5kZWNsICRjW05OTl07CisgICAgc2l6ZV90ICR7Y31fbGVuOworICAgICBAZWxzZUAKKyAgICAkYy5kZWNsICRjOworICAgICBAZW5kQAorICAgICBAaWYgJGMuc2V0dGFibGVACisgICAgICBAaWYgISRjLnJvd3N0YXR1c0AKKyAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAkYy5kZWNsIG9sZF8kY1tOTk5dOworICAgIHNpemVfdCBvbGRfJHtjfV9sZW47CisgICAgICAgQGVsc2VACisgICAgJGMuZGVjbCBvbGRfJGM7CisgICAgICAgQGVuZEAKKyAgICAgIEBlbmRACisgICAgIEBlbmRACisgICAgQGVuZEAKKyAgICBAZW5kQAorCisgICAgaW50ICAgdmFsaWQ7Cit9OworCisvKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAqLworc3RhdGljIHN0cnVjdCAke2l9X2VudHJ5ICoKKyR7aX1fY3JlYXRlRW50cnkoIGludCBkdW1teQorICBAZm9yZWFjaCAkaWR4IGluZGV4QAorICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgICwgJGlkeC5kZWNsKiAkaWR4CisgICAgICAgICAgICAgICAgICwgc2l6ZV90ICR7aWR4fV9sZW4KKyAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICAgLCAkaWR4LmRlY2wgICRpZHgKKyAgICBAZW5kQAorICBAZW5kQAorICAgICAgICAgICAgICAgICkgeworICAgIHN0cnVjdCAke2l9X2VudHJ5ICplbnRyeTsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzdHJ1Y3QgJHtpfV9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBYWFggLSBpbnNlcnQgZW50cnkgaW50byBsb2NhbCBkYXRhIHN0cnVjdHVyZSAqLworICAgIHJldHVybiBlbnRyeTsKK30KKworLyogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCitzdGF0aWMgdm9pZAorJHtpfV9yZW1vdmVFbnRyeShzdHJ1Y3QgJHtpfV9lbnRyeSAqZW50cnkpIHsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisKKyAgICAvKiBYWFggLSByZW1vdmUgZW50cnkgZnJvbSBsb2NhbCBkYXRhIHN0cnVjdHVyZSAqLworCisgICAgaWYgKGVudHJ5KQorICAgICAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCit9CisKKworLyoqIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgcm93IGZvciBhbiBleGFjdCByZXF1ZXN0ICovCitzdGF0aWMgc3RydWN0ICR7aX1fZW50cnkgKgorJHtpfV9nZXRfZW50cnkoIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXhlcyApIHsKKyAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAqcm93ID0gTlVMTDsKKworICAgIC8qIFhYWCAtIFVzZSB0aGUgJ2luZGV4ZXMnIHBhcmFtZXRlciB0byByZXRyaWV2ZSB0aGUgZGF0YQorICAgICAgIHN0cnVjdHVyZSBmb3IgdGhlIHJlcXVlc3RlZCByb3csIGFuZCByZXR1cm4gdGhpcy4gKi8KKyAgICByZXR1cm4gcm93OworfQorCisvKiogZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSByb3cgZm9yIGFuIGZ1enp5IHJlcXVlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgJHtpfV9lbnRyeSAqCiske2l9X2dldF9uZXh0X2VudHJ5KCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgICAgICAgKmluZGV4ZXMgKSB7CisgICAgc3RydWN0ICR7aX1fZW50cnkgKnJvdyA9IE5VTEw7CisgICAgb2lkICAgICAgICAgICAgIGJ1aWxkX3NwYWNlW01BWF9PSURfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgYnVpbGRfc3BhY2VfbGVuID0gMDsKKyAgICBzaXplX3QgICAgICAgICAgaW5kZXhfb2lkX2xlbiA9IDA7CisKKyAgICAvKiBYWFggLSBVc2UgdGhlICdpbmRleGVzJyBwYXJhbWV0ZXIgdG8gaWRlbnRpZnkgdGhlCisgICAgICAgICAgICAgbmV4dCByb3cgaW4gdGhlIHRhYmxlLi4uLiAqLworCisgICAgLyogWFhYICAgLi4uLiB1cGRhdGUgdGhlICdpbmRleGVzJyBwYXJhbWV0ZXIgd2l0aCB0aGUKKyAgICAgICAgICAgICBhcHByb3ByaWF0ZSBpbmRleCB2YWx1ZXMgLi4uICovCisKKyAgICAvKiAuLi4gYW5kIHVwZGF0ZSB0aGUgcmVxdWVzdGVkIE9JRCB0byBtYXRjaCB0aGlzIGluc3RhbmNlICovCisgICAgbWVtY3B5KGJ1aWxkX3NwYWNlLCByZWdpbmZvLT5yb290b2lkLCAgIC8qIHJlZ2lzdGVyZWQgb2lkICovCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICBidWlsZF9zcGFjZV9sZW4gPSByZWdpbmZvLT5yb290b2lkX2xlbjsKKyAgICBidWlsZF9zcGFjZVtidWlsZF9zcGFjZV9sZW4rK10gPSAxOyAgLyogZW50cnkgKi8KKyAgICBidWlsZF9zcGFjZVtidWlsZF9zcGFjZV9sZW4rK10gPSBjb2x1bW47IC8qIGNvbHVtbiAqLworICAgIGJ1aWxkX29pZF9ub2FsbG9jKGJ1aWxkX3NwYWNlICsgYnVpbGRfc3BhY2VfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIE1BWF9PSURfTEVOIC0gYnVpbGRfc3BhY2VfbGVuLCAmaW5kZXhfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBpbmRleGVzKTsKKyAgICBzbm1wX3NldF92YXJfb2JqaWQocmVxdWVzdC0+cmVxdWVzdHZiLCBidWlsZF9zcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc3BhY2VfbGVuICsgaW5kZXhfb2lkX2xlbik7CisKKyAgICAvKiAgRmluYWxseSwgcmV0dXJuIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhpcyByb3cgKi8KKyAgICByZXR1cm4gcm93OworfQorCisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgJGkgdGFibGUgKi8KK3N0YXRpYyBpbnQKKyR7aX1faGFuZGxlcigKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICAgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWdpbmZvLAorICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgICAgICAqcmVxaW5mbywKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICAgICAgKnJlcXVlc3RzKSB7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CisgICAgQGlmICRpLnNldHRhYmxlQAorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisgICAgQGVuZEAKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJlYWRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOworICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjKTsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9uZXh0X2VudHJ5KCByZWdpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5jb2xudW0sIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucmVhZGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CisgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMpOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKK0BpZiAkaS5zZXR0YWJsZUAKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuc2V0dGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXMocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IFJTX0FDVElWRSA6IFJTX05PTkVYSVNURU5UICkpOworICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKwkgICAgICAgIC8qIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLCBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICAvKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQoIHJlcXVlc3QtPnJlcXVlc3R2YiApOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwgcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorQGlmICRpLmNyZWF0YWJsZUAKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKK0BpZiAkaS5yb3dzdGF0dXNACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICR7aX1fY3JlYXRlRW50cnkoIDAKKyAgQGZvcmVhY2ggJGlkeCBpbmRleEAKKyAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgICAgICAgICAgLCAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLnN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgLCAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsX2xlbgorICAgIEBlbHNlQAorICAgICAgICAgICAgICAgICAgICAgICAgLCAqdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLmludGVnZXIKKyAgICBAZW5kQAorICBAZW5kQAorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKK0BlbHNlQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLmNyZWF0YWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gJHtpfV9jcmVhdGVFbnRyeSggMAorICBAZm9yZWFjaCAkaWR4IGluZGV4QAorICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgICAgICAgICAsICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAsICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWxfbGVuCisgICAgQGVsc2VACisgICAgICAgICAgICAgICAgICAgICAgICAsICp0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuaW50ZWdlcgorICAgIEBlbmRACisgIEBlbmRACisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKK0BlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KK0BlbmRACisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorQGlmICRpLmNyZWF0YWJsZUAKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworQGlmICRpLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorQGVsc2VACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuY3JlYXRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBpZiAoIHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQgKSB7CisgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKK0BlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KK0BlbmRACisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5zZXR0YWJsZUAKKyAgICAgICAgICAgIEBpZiAhJGMucm93c3RhdHVzQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+b2xkXyRjLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJHtjfV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuOworICAgICAgICAgICAgICAgIG1lbXNldCggdGFibGVfZW50cnktPiRjLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuOworICAgICAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMgPSB0YWJsZV9lbnRyeS0+JGM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjICAgICA9ICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KK0BpZiAkaS5yb3dzdGF0dXNACisgICAgICAgIC8qIENoZWNrIHRoZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBhbiBhY3RpdmUgcm93ICovCisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKC8qIFhYWCAqLykgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CitAZW5kQAorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnNldHRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CitAaWYgJGkucm93c3RhdHVzQAorICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICBAZWxzZUAKKyAgICAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KCB0YWJsZV9lbnRyeS0+b2xkXyRjLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyR7Y31fbGVuOworICAgICAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyAgICAgPSB0YWJsZV9lbnRyeS0+b2xkXyRjOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMgPSAwOworICAgICAgICAgICAgICAgIEBlbmRACisgIEBlbmRACitAZWxzZUAKKyAgQGlmICRjLmNyZWF0YWJsZUAKKyAgICAgICAgICAgICAgICBpZiAoIHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQgKSB7CisgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCB0YWJsZV9lbnRyeS0+b2xkXyRjLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyR7Y31fbGVuOworICAgICAgICAgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjICAgICA9IHRhYmxlX2VudHJ5LT5vbGRfJGM7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMgPSAwOworICAgICAgICAgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIH0KKyAgQGVsc2VACisgICAgICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIG1lbXNldCggdGFibGVfZW50cnktPm9sZF8kYywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8ke2N9X2xlbjsKKyAgICAgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgICAgID0gdGFibGVfZW50cnktPm9sZF8kYzsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjID0gMDsKKyAgICAgICAgICAgICAgICBAZW5kQAorICBAZW5kQAorQGVuZEAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CitAaWYgJGkuY3JlYXRhYmxlQAorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oICAgIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CitAaWYgJGkucm93c3RhdHVzQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dmFsaWQgPSAxOworICAgICAgICAgICAgICAgICAgICAvKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjID0gUlNfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnZhbGlkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19OT1RJTlNFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0RFU1RST1k6CisgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorQGVsc2VACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuY3JlYXRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBpZiAoIHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgfQorQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorQGVuZEAKKyAgICAgICAgYnJlYWs7CitAZW5kQAorICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqIEluaXRpYWxpemUgdGhlICRpIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLworc3RhdGljIHZvaWQKK2luaXRpYWxpemVfdGFibGVfJGkodm9pZCkKK3sKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgIiRpIiwgICAgICR7aX1faGFuZGxlciwKKyAgICAgICAgICAgICAgJHtpfV9vaWQsIE9JRF9MRU5HVEgoJHtpfV9vaWQpLAorQGlmICRpLnNldHRhYmxlQAorICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUKK0BlbHNlQAorICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQorQGVuZEAKKyAgICAgICAgICAgICAgKTsKKworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICk7CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKKyAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkeC50eXBlLCAgLyogaW5kZXg6ICRpZHggKi8KKyAgICBAZW5kQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OXyRmaXJzdF9jb2x1bW4udWM7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl8kbGFzdF9jb2x1bW4udWM7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKCByZWcsIHRhYmxlX2luZm8gKTsKKworICAgIC8qIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlICovCit9CisKK0BlbmRACisvKiogSW5pdGlhbGl6ZXMgdGhlICRuYW1lIG1vZHVsZSAqLwordm9pZAoraW5pdF8kbmFtZSh2b2lkKQoreworICAvKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAqLworICBAZm9yZWFjaCAkaSB0YWJsZUAKKyAgICBpbml0aWFsaXplX3RhYmxlXyRpKCk7CisgIEBlbmRACit9CmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5yb3cuY29uZiBiL2xvY2FsL21pYjJjLnJvdy5jb25mCmluZGV4IDQ2NjE1YzAuLmY3MzZiYWEgMTAwNzU1Ci0tLSBhL2xvY2FsL21pYjJjLnJvdy5jb25mCisrKyBiL2xvY2FsL21pYjJjLnJvdy5jb25mCkBAIC0xMTcsMTYgKzExNywxNyBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07Ci0gICAgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKICAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAgICAgICpyb3c7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICAgICAgICAgICAqaWR4czsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgJGlcbiIpKTsKKwogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAiJGkiLCAgICAgJHtpfV9oYW5kbGVyLAotICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuLAorICAgICAgICAgICAgICAke2l9X29pZCwgT0lEX0xFTkdUSCgke2l9X29pZCksCiBAaWYgJGkuc2V0dGFibGVACiAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURQogQGVsc2VACkBAIC0yMTIsMTAgKzIxMyw5IEBACiAgICAgdjIgPSB2Mi0+bmV4dF92YXJpYWJsZTsKICAgIEBlbmRACiAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAotICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggdjIsICRpZHgudHlwZSwgKHVfY2hhciopcm93LT4kaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT4ke2lkeH1fbGVuKTsKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHYyLCAkaWR4LnR5cGUsIHJvdy0+JGlkeCwgcm93LT4ke2lkeH1fbGVuKTsKICAgIEBlbHNlQAotICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCB2MiwgJGlkeC50eXBlLCAodV9jaGFyKilyb3ctPiRpZHgpOworICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCB2MiwgJGlkeC50eXBlLCByb3ctPiRpZHgpOwogICAgQGVuZEAKICAgIEBldmFsICRmaXJzdD0wQAogICBAZW5kQApAQCAtMjM3LDYgKzIzNyw4IEBACiAgICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAoJWQpXG4iLCByZXFpbmZvLT5tb2RlKSk7CisKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgLyoKICAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQpAQCAtMjUyLDcgKzI1NCw3IEBACiAgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciopdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5zY2FsYXIuY29uZiBiL2xvY2FsL21pYjJjLnNjYWxhci5jb25mCmluZGV4IDQzODM2MWIuLjMwMjRmYTQgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLnNjYWxhci5jb25mCisrKyBiL2xvY2FsL21pYjJjLnNjYWxhci5jb25mCkBAIC0zNiw3ICszNiw3IEBACiBpbml0XyRuYW1lKHZvaWQpCiB7CiAgIEBmb3JlYWNoICRpIHNjYWxhckAKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CiAgIEBlbmRACiAKICAgREVCVUdNU0dUTCgoIiRuYW1lIiwgIkluaXRpYWxpemluZ1xuIikpOwpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgJGkudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIC8qIFhYWDogYSBwb2ludGVyIHRvIHRoZSBzY2FsYXIncyBkYXRhICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogYSBwb2ludGVyIHRvIHRoZSBzY2FsYXIncyBkYXRhICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBpbiBieXRlcyAqLyk7CiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mIGIvbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mCmluZGV4IGVkZmYwNmMuLjJjYzY2NWMgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZgorKysgYi9sb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmYKQEAgLTEsNCArMSwzMiBAQAogIyMgLSotIGMgLSotCisjCitAaWYgIiRjYWNoZSIgZXEgIiIgQAorQG9wZW4gLUAKK1RoaXMgZnJhbWV3b3JrIGNhbiB3b3JrIGluIG9uZSBvZiB0d28gd2F5czoKKworICAxKSAgSG9sZCBhIGxvY2FsIGNhY2hlZCBjb3B5IG9mIHNvbWUgZXh0ZXJuYWwgZGF0YQorICAgICAgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIHNlcnZpY2UgaW5jb21pbmcgcmVxdWVzdHMuCisKKyAgMikgIEhvbGQgdGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBzb2xlbHkgd2l0aGluIHRoZSBhZ2VudAorCitXaGljaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGZvciB5b3VyIG5lZWRzPworICAgIEBwcm9tcHQgJGFucyBTZWxlY3QgeW91ciBjaG9pY2UgOiBACisgICAgQGlmICRhbnMgPT0gMSBACisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbHNpZiAkYW5zID09IDJACisgICAgICBAZXZhbCAkY2FjaGUgPSAwQAorICAgIEBlbHNlQAorSW52YWxpZCBhbnN3ZXIgLSBnZW5lcmF0aW5nIGNhY2hpbmcgY29kZQorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZW5kQAorQGVsc2VAICAgICAgICMgIC1TIGNhY2hlPXtzb21ldGhpbmd9CisgICAgQGlmICIkY2FjaGUiIG5lICIxIiAmJiAiJGNhY2hlIiBuZSAiMCIgQAorQG9wZW4gLUAKK0ludmFsaWQgdmFsdWUgZm9yICdjYWNoZScgKCRjYWNoZSkgLSBnZW5lcmF0aW5nIGNhY2hpbmcgY29kZQorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZW5kQAorQGVuZEAKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgRG8gdGhlIC5oIGZpbGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE1LDcgKzQzLDcgQEAKIEBmb3JlYWNoICRpIHRhYmxlQAogdm9pZCBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgJHtpfV9oYW5kbGVyOwotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKIE5ldHNubXBDYWNoZUxvYWQgJHtpfV9sb2FkOwogTmV0c25tcENhY2hlRnJlZSAke2l9X2ZyZWU7CiAjZGVmaW5lICRpLnVjX1RJTUVPVVQgIDYwCkBAIC03MCwxNSArOTgsMTcgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwotICAgIHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKKyAgICBjb25zdCBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgbmV0c25tcF90ZGF0YSAgICAgICAgICAgICAgICAgICAqdGFibGVfZGF0YTsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKICAgICBuZXRzbm1wX2NhY2hlICAgICAgICAgICAgICAgICAgICpjYWNoZTsKIEBlbmRACiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSAkaVxuIikpOworCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICIkaSIsICAgICAke2l9X2hhbmRsZXIsCiAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4sCkBAIC05MCw3ICsxMjAsMjUgQEAKICAgICAgICAgICAgICAgKTsKIAogICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSggIiRpIiwgMCApOworICAgIGlmIChOVUxMID09IHRhYmxlX2RhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgdGRhdGEgdGFibGUgZm9yICRpXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK0BpZiAiJGNhY2hlIiA9PSAxIEAKKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCRpLnVjX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9sb2FkLCAke2l9X2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yICRpXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBjYWNoZS0+bWFnaWMgPSAodm9pZCAqKXRhYmxlX2RhdGE7CitAZW5kQAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyB0YWJsZSBpbmZvIGZvciAkaVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKICAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkeC50eXBlLCAgLyogaW5kZXg6ICRpZHggKi8KQEAgLTEwMSwxMiArMTQ5LDEwIEBACiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl8kbGFzdF9jb2x1bW4udWM7CiAgICAgCiAgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlciggcmVnLCB0YWJsZV9kYXRhLCB0YWJsZV9pbmZvICk7Ci1AaWYgIiRjYWNoZSIgbmUgIiIgQAotICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoJGkudWNfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X2xvYWQsICR7aX1fZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuKTsKLSAgICBjYWNoZS0+bWFnaWMgPSAodm9pZCAqKXRhYmxlX2RhdGE7Ci0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX0dFVChjYWNoZSksIFRBQkxFX1REQVRBX05BTUUpOworQGlmICIkY2FjaGUiID09IDEgQAorICAgIGlmIChjYWNoZSkgCisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9HRVQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVERBVEFfTkFNRSk7CiBAZW5kQAogCiAgICAgLyogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUgKi8KQEAgLTE3NCw2ICsyMjAsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcm93LT5kYXRhID0gZW50cnk7CisKKyAgICBERUJVR01TR1QoKCIke2l9OmVudHJ5OmNyZWF0ZSIsICJyb3cgMHgleFxuIiwgKHVpbnRwdHJfdClyb3cpKTsKICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACiAgICAgbWVtY3B5KGVudHJ5LT4kaWR4LCAkaWR4LCAke2lkeH1fbGVuKTsKQEAgLTE4Nyw3ICsyMzUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT4kaWR4KSk7CiAgICBAZW5kQAogICBAZW5kQAotICAgIG5ldHNubXBfdGRhdGFfYWRkX3JvdyggdGFibGVfZGF0YSwgcm93ICk7CisgICAgaWYgKHRhYmxlX2RhdGEpCisgICAgICAgIG5ldHNubXBfdGRhdGFfYWRkX3JvdyggdGFibGVfZGF0YSwgcm93ICk7CiAgICAgcmV0dXJuIHJvdzsKIH0KIApAQCAtMTk5LDEzICsyNDgsMTkgQEAKIAogICAgIGlmICghcm93KQogICAgICAgICByZXR1cm47ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCi0gICAgZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKworICAgIERFQlVHTVNHVCgoIiR7aX06ZW50cnk6cmVtb3ZlIiwgInJvdyAweCV4XG4iLCAodWludHB0cl90KXJvdykpOworCisgICAgZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKilyb3ctPmRhdGE7CisgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLworCisgICAgaWYgKHRhYmxlX2RhdGEpCiAgICAgICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93KCB0YWJsZV9kYXRhLCByb3cgKTsKLSAgICBpZiAoZW50cnkpCi0gICAgICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3Jvdyggcm93ICk7ICAgIAogfQogCi1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogLyogRXhhbXBsZSBjYWNoZSBoYW5kbGluZyAtIHNldCB1cCB0YWJsZV9kYXRhIGxpc3QgZnJvbSBhIHN1aXRhYmxlIGZpbGUgKi8KIGludAogJHtpfV9sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljICkgewpAQCAtMjg1LDYgKzM0MCw4IEBACiAgICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAoJWQpXG4iLCByZXFpbmZvLT5tb2RlKSk7CisKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgLyoKICAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQpAQCAtMzA5LDcgKzM2Niw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKil0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKQEAgLTM0OCw3ICs0MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IFJTX0FDVElWRSA6IFJTX05PTkVYSVNURU5UICkpOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKLQkgICAgICAgIC8qIG9yIHBvc3NpYmxjICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCisJICAgICAgICAvKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLwogICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOwogICAgICAgICAgICAgQGVsc2VACmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2sgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2sKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE0OTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjawpAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKKyMKKyMgZmVhdHVyZS1jaGVjazogVGhpcyBzY3JpcHQgbG9va3MgZm9yIGZlYXR1cmUgc3RhdGVtZW50cyBpbiBhIGZpbGUgYnkKKyMgZXhlY3V0aW5nIGEgY29tcGlsZXIgdW5kZXIgQ1BQIGFuZCBleHRyYWN0aW5nIGxpbmVzIG9mIHRoZSBmb2xsb3dpbmcKKyMgZm9ybToKKyMKKyMgbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGVzKGZvbyk6IHVzZWQgdG8gaW5kaWNhdGUgaXQgcHJvdmlkZXMgZmVhdHVyZSAiZm9vIgorIyBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYXIpOiB1c2VkIHRvIGluZGljYXRlIGl0IHJlcXVpcmVzIGZlYXR1cmUgImJhciIKKyMgbmV0c25tcF9mZWF0dXJlX3dhbnQoYmFyKTogdXNlZCB0byBpbmRpY2F0ZSBpdCB3YW50cyBmZWF0dXJlICJiYXIiCisjICAgICAgICAgICAgICAgICAgICAoYnV0IGNhbiBsaXZlIHdpdGhvdXQgaXQpCisjCisjIFVzaW5nIHRoZXNlIGxpbmVzIGl0IHRoZW4gZ2VuZXJhdGVzIGEgbGlzdCBvZiBmZWF0dXJlIHJlcXVpcmVtZW50CisjIGRlZmluZXMgaW4gImluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaCIgd2hpY2ggY2FuIHRoZW4gYmUKKyMgbG9hZGVkIGluIGxhdGVyIHBhc3NlcyBhdCBjb21waWxlIHRpbWUuCisjCisjIERlZmluZXMgcHJvZHVjZWQgd2hlbiBuZXRzbm1wX2ZlYXRyZV9yZXF1aXJlKGJhcikgaXMgcHJlc2VudDoKKyMgICAjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0JBUiAxCisjCisjIERlZmluZXMgcHJvZHVjZWQgd2hlbiBuZXRzbm1wX2ZlYXR1cmVfd2FudChiYXIpIGlzIHByZXNlbnQ6CisjICAgI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfV0FOVF9CQVIgMQorIworIyBBbmQgd2hlbiBhbGwgdGhlIGZlYXR1cmVzIGhhdmUgYmVlbiBjb2xsZWN0ZWQsIHRoZXkgYXJlIGFsc28gaW52ZXJ0ZWQgdmlhCisjIHRoZSBmZWF0dXJlLXBvc3QtY2hlY2sgc2NyaXB0OgorIworIyAgICNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9CQVJYIDEgIC8qIG5ldmVyIHJlcXVpcmVkICovCisjICAgI3VuZGVmICBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0JBUiAgICAgIC8qIHJlcXVpcmVkICovCisKKyMgVXNhZ2U6CisKKyMgZmVhdHVyZS1jaGVjayBOT1JNQUwtQ09NUElMRS1MSU5FCisKK1NFRD1zZWQKK0dSRVA9Z3JlcAorQ0M9Z2NjCitSTT1ybQorCitpZiB0ZXN0ICJ4JDEiID0gIngtLWZlYXR1cmUtZ2xvYmFsIiA7IHRoZW4KKyAgICAjIGEgZ2xvYmFsIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkCisgICAgc2hpZnQKKyAgICBnbG9iYWw9JDEKKyAgICBzaGlmdAorZmkKKworc291cmNlZGlyPSQxCitzaGlmdAorCitzb3VyY2U9JDEKK3NoaWZ0CisKK2Rlc3RpbmF0aW9uPSQxCitzaGlmdAorCit0bXBmPSIkZGVzdGluYXRpb24uMSIKKworY29tcGlsZWxpbmU9IiRAIgorJGNvbXBpbGVsaW5lICctRE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORz0xJyBcCisgICAgICAgICAgICAgJy1ETkVUU05NUF9NSU5JTUFMX0NPREU9MScgXAorICAgICAgICAgICAgICctRG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKFgpPVggTlNGX1JSJyBcCisgICAgICAgICAgICAgJy1EbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoWCk9WCBOU0ZfUFAnIFwKKyAgICAgICAgICAgICAnLURuZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoWCxZKT1YLFkgTlNGX0NPJyBcCisgICAgICAgICAgICAgJy1EbmV0c25tcF9mZWF0dXJlX3dhbnQoWCk9WCBOU0ZfV1cnICRzb3VyY2UgfCBcCisgICAgJEdSRVAgTlNGXyB8ICRHUkVQIC12ICdeI2RlZmluZScgPiAkdG1wZgorCiskUk0gLWYgJGRlc3RpbmF0aW9uOwordG91Y2ggJGRlc3RpbmF0aW9uOworCisjIHByb2Nlc3MgcmVxdWlyZXMKK2ZpcnN0cmVxdWlyZT0xCitmb3IgaSBpbiBgZ3JlcCBOU0ZfUlIgJHRtcGYgfCBzZWQgJ3MvIE5TRl9SUi8vJ2AgOyBkbworICAgIGlmIHRlc3QgJGZpcnN0cmVxdWlyZSA9IDEgOyB0aGVuCisJZWNobyAiIiA+PiAkZGVzdGluYXRpb24KKwllY2hvICIvKiByZXF1aXJlZCBieSAkc291cmNlZGlyLyRzb3VyY2UgKi8iID4+ICRkZXN0aW5hdGlvbgorCWZpcnN0cmVxdWlyZT0wCisgICAgZmkKKyAgICB1cHBlcj1gZWNobyAkaSB8IHRyIGEteiBBLVpgCisgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV8kdXBwZXIgMSIgPj4gJGRlc3RpbmF0aW9uCitkb25lCisKKyMgcHJvY2VzcyBwcm92aWRlcworZmlyc3RmZWF0dXJlPTEKK2ZvciBpIGluIGBncmVwIE5TRl9QUCAkdG1wZiB8IHNlZCAncy8gTlNGX1BQLy8nYCA7IGRvCisgICAgaWYgdGVzdCAkZmlyc3RmZWF0dXJlID0gMSA7IHRoZW4KKwllY2hvICIiID4+ICRkZXN0aW5hdGlvbgorCWVjaG8gIi8qIGZlYXR1cmVzIHByb3ZpZGVkIGJ5ICRzb3VyY2VkaXIvJHNvdXJjZSAqLyIgPj4gJGRlc3RpbmF0aW9uCisJZmlyc3RmZWF0dXJlPTAKKyAgICBmaQorICAgIHVwcGVyPWBlY2hvICRpIHwgdHIgYS16IEEtWmAKKyAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9QUk9WSURFXyR1cHBlciAxIiA+PiAkZGVzdGluYXRpb24KK2RvbmUKKworIyBwcm9jZXNzIGNoaWxkcmVuCitmaXJzdGZlYXR1cmU9MQorZm9yIGkgaW4gYGdyZXAgTlNGX0NPICR0bXBmIHwgc2VkICdzLyBOU0ZfQ08vLydgIDsgZG8KKyAgICBwYXJlbnQ9YGVjaG8gJGkgfCBzZWQgJ3MvLiosLy8nYAorICAgIGNoaWxkPWBlY2hvICRpIHwgc2VkICdzLywuKi8vJ2AKKyAgICBpZiB0ZXN0ICRmaXJzdGZlYXR1cmUgPSAxIDsgdGhlbgorCWVjaG8gIiIgPj4gJGRlc3RpbmF0aW9uCisJZWNobyAiLyogZmVhdHVyZXMgcHJvdmlkZWQgYnkgJHNvdXJjZWRpci8kc291cmNlICovIiA+PiAkZGVzdGluYXRpb24KKwlmaXJzdGZlYXR1cmU9MAorICAgIGZpCisgICAgdXBwZXJjaGlsZD1gZWNobyAkY2hpbGQgfCB0ciBhLXogQS1aYAorICAgIHVwcGVycGFyZW50PWBlY2hvICRwYXJlbnQgfCB0ciBhLXogQS1aYAorICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFXyR7dXBwZXJjaGlsZH1fQ0hJTERfT0ZfJHt1cHBlcnBhcmVudH0gMSIgPj4gJGRlc3RpbmF0aW9uCisgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUFJPVklERV8kdXBwZXJjaGlsZCAxIiA+PiAkZGVzdGluYXRpb24KK2RvbmUKKworIyBwcm9jZXNzIHdhbnRzCitmaXJzdGZlYXR1cmU9MQorZm9yIGkgaW4gYGdyZXAgTlNGX1dXICR0bXBmIHwgc2VkICdzLyBOU0ZfV1cvLydgIDsgZG8KKyAgICBpZiB0ZXN0ICRmaXJzdGZlYXR1cmUgPSAxIDsgdGhlbgorCWVjaG8gIiIgPj4gJGRlc3RpbmF0aW9uCisJZWNobyAiLyogZmVhdHVyZXMgd2FudGVkIGJ5ICRzb3VyY2VkaXIvJHNvdXJjZSAqLyIgPj4gJGRlc3RpbmF0aW9uCisJZmlyc3RmZWF0dXJlPTAKKyAgICBmaQorICAgIHVwcGVyPWBlY2hvICRpIHwgdHIgYS16IEEtWmAKKyAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9XQU5UXyR1cHBlciAxIiA+PiAkZGVzdGluYXRpb24KK2RvbmUKKworaWYgdGVzdCAieCRnbG9iYWwiICE9ICJ4IiA7IHRoZW4KKyAgICBjYXQgJGRlc3RpbmF0aW9uID4+ICRnbG9iYWwKK2ZpCisKKworIyBjbGVhbiB1cAorIyRSTSAtZiAkdG1wZgpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjAxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3MKQEAgLTAsMCArMSwyMjEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIElPOjpGaWxlOwordXNlIEdldG9wdDo6U3RkOworb3VyICVvcHRzID0gKFcgPT4gMik7CisKK2dldG9wdHMoJ29od1c6JywgXCVvcHRzKSB8fCB1c2FnZSgpOworCit1c2FnZSgpIGlmICgkb3B0c3snaCd9KTsKKwordXNhZ2UoKSBpZiAoJCNBUkdWICE9IDEpOworCisjIHNob3VsZCBiZSB0aGUgZmVhdHVyZS1kZXRhaWxzLmggZmlsZQorbXkgJGlucHV0ZmlsZSA9IHNoaWZ0IEBBUkdWOworbXkgJG91dHB1dGZpbGUgPSBzaGlmdCBAQVJHVjsKKworbXkgJWZlYXR1cmVzOworbXkgJXRvcDsKK215ICVmaWxlczsKK215ICRyZXFmaWxlOworCitnYXRoZXJfZGF0YSgkaW5wdXRmaWxlKTsKK2lmICgkb3B0c3sndyd9KSB7CisgICAgcHJpbnRfd2lraV9tb2RlKCRvdXRwdXRmaWxlKTsKK30gZWxzZSB7CisgICAgcHJpbnRfb3JnX21vZGUoJG91dHB1dGZpbGUpOworfQorCitzdWIgZ2F0aGVyX2RhdGEgeworICAgIG15ICgkaW5wdXRmaWxlKSA9IEBfOworCisgICAgb3BlbihJLCAkaW5wdXRmaWxlKTsKKyAgICB3aGlsZSg8ST4pIHsKKwlpZiAoLyhyZXF1aXJlZHxwcm92aWRlZHx3YW50ZWQpIGJ5ICguKikgXCovKSB7CisJICAgICRyZXFmaWxlID0gJDI7CisJfSBlbHNpZiAoL2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUFJPVklERV8oLiopIDEvKSB7CisJICAgIG15ICRsYyA9IGxjKCQxKTsKKwkgICAgZGllICJubyByZXFmaWxlIGN1cnJlbnRseSBzZXQ7IGJ1ZyEiIGlmICghZGVmaW5lZCgkcmVxZmlsZSkpOworCisJICAgIGFkZCgkbGMpOworCisJICAgIHB1c2ggQHskZmlsZXN7JHJlcWZpbGV9eydwcm92aWRlcyd9fSwgJGxjOworCSAgICBwdXNoIEB7JGZlYXR1cmVzeyRsY317J3Byb3ZpZGVkYnknfX0sICRyZXFmaWxlOworCisJfSBlbHNpZiAoL2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV8oLiopIDEvKSB7CisJICAgIG15ICRsYyA9IGxjKCQxKTsKKwkgICAgZGllICJubyByZXFmaWxlIGN1cnJlbnRseSBzZXQ7IGJ1ZyEiIGlmICghZGVmaW5lZCgkcmVxZmlsZSkpOworCisJICAgIGFkZCgkbGMpOworCisJICAgIHB1c2ggQHskZmlsZXN7JHJlcWZpbGV9eydyZXF1aXJlcyd9fSwgJGxjOworCSAgICBwdXNoIEB7JGZlYXR1cmVzeyRsY317J3JlcXVpcmVkYnknfX0sICRyZXFmaWxlOworCisJfSBlbHNpZiAoL2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfV0FOVF8oLiopIDEvKSB7CisJICAgIG15ICRsYyA9IGxjKCQxKTsKKwkgICAgZGllICJubyByZXFmaWxlIGN1cnJlbnRseSBzZXQ7IGJ1ZyEiIGlmICghZGVmaW5lZCgkcmVxZmlsZSkpOworCisJICAgIGFkZCgkbGMpOworCisJICAgIHB1c2ggQHskZmlsZXN7JHJlcWZpbGV9eyd3YW50cyd9fSwgJGxjOworCSAgICBwdXNoIEB7JGZlYXR1cmVzeyRsY317J3dhbnRlZGJ5J319LCAkcmVxZmlsZTsKKwl9IGVsc2lmICgvZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV8oLiopX0NISUxEX09GXyguKikgMS8pIHsKKwkgICAgbXkgJGNoaWxkID0gbGMoJDEpOworCSAgICBteSAkcGFyZW50ID0gbGMoJDIpOworCisJICAgIGFkZF9jaGlsZCgkY2hpbGQsICRwYXJlbnQpOworCX0KKyAgICB9Cit9CisKK3N1YiBhZGQgeworICAgIG15ICgkbmFtZSkgPSBAXzsKKyAgICBpZiAoIWV4aXN0cygkZmVhdHVyZXN7JG5hbWV9KSkgeworCSMgbmV3IGZlYXR1cmUgZW50aXJlbHksIG1hcmsgaXQgYXMgYSB0b3Agbm9kZQorCSR0b3B7JG5hbWV9ID0gMTsKKyAgICB9Cit9CisKK3N1YiBhZGRfY2hpbGQgeworICAgIG15ICgkY2hpbGQsICRwYXJlbnQpID0gQF87CisKKyAgICBhZGQoJHBhcmVudCk7CisKKyAgICBpZiAoZXhpc3RzKCR0b3B7JGNoaWxkfSkpIHsKKwkjIGl0J3Mgbm8gbG9uZ2VyIGEgdG9wIG5vZGUgaWYgaXQncyBhIGNoaWxkIG9mIHNvbWV0aGluZyBlbHNlCisJZGVsZXRlICR0b3B7JGNoaWxkfTsKKyAgICB9CisgICAgJGZlYXR1cmVzeyRwYXJlbnR9eydjaGlsZHJlbid9eyRjaGlsZH0rKzsKKworICAgICRmZWF0dXJlc3skY2hpbGR9eydwcm92aWRlZGJ5J30sICRyZXFmaWxlOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG9yZy1tb2RlIG91dHB1dAorIworc3ViIHByaW50X29yZ19tb2RlIHsKKyAgICBteSAoJG91dHB1dGZpbGUpID0gQF87CisKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGU7CisKKyAgICBpZiAoISRmaC0+b3BlbigiPiAkb3V0cHV0ZmlsZSIpKSB7CisJZGllICJlcnJvciFcbiI7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkbm9kZSAoc29ydCBrZXlzKCV0b3ApKSB7CisJcHJpbnRfb3JnX25vZGUoJGZoLCAkbm9kZSwgIioiKTsKKyAgICB9Cit9CisKK3N1YiBwcmludF9vcmdfbm9kZSB7CisgICAgbXkgKCRmaCwgJG5vZGUsICRwcmVmaXgpID0gQF87CisKKyAgICBteSAkc3BhY2VzID0gJHByZWZpeDsKKyAgICAkc3BhY2VzID1+IHMvLi8gL2c7CisKKyAgICBwcmludCAkZmggIiRwcmVmaXggJG5vZGVcbiI7CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydwcm92aWRlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkc3BhY2VzICsgcHJvdmlkZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgb3JnX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eydwcm92aWRlZGJ5J319KSkgLiAiXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3JlcXVpcmVkYnknfSkpIHsKKwlwcmludCAkZmggIiRzcGFjZXMgKyByZXF1aXJlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCBvcmdfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3JlcXVpcmVkYnknfX0pKSAuICJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsnd2FudGVkYnknfSkpIHsKKwlwcmludCAkZmggIiRzcGFjZXMgKyB3YW50ZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgb3JnX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eyd3YW50ZWRieSd9fSkpIC4gIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydjaGlsZHJlbid9KSkgeworCWZvcmVhY2ggbXkgJGNoaWxkIChzb3J0IGtleXMoJXskZmVhdHVyZXN7JG5vZGV9eydjaGlsZHJlbid9fSkpIHsKKwkgICAgcHJpbnRfb3JnX25vZGUoJGZoLCAkY2hpbGQsICRwcmVmaXggLiAiKiIpOworCX0KKyAgICB9Cit9CisKK3N1YiBvcmdfbGlua19maWxlcyB7CisgICAgbXkgQGZpbGVzID0gQF87CisgICAgbWFwIHsgJF8gPSAiW1tmaWxlOiRfXVskX11dIjsgfSBAZmlsZXM7CisgICAgcmV0dXJuIEBmaWxlczsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB3aWtpIG91dHB1dAorIworc3ViIHByaW50X3dpa2lfbW9kZSB7CisgICAgbXkgKCRvdXRwdXRmaWxlKSA9IEBfOworCisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlOworICAgIG15ICRkZXB0aCA9IDA7CisKKyAgICBpZiAoISRmaC0+b3BlbigiPiAkb3V0cHV0ZmlsZSIpKSB7CisJZGllICJlcnJvciFcbiI7CisgICAgfQorCisgICAgcHJpbnQgJGZoICInJydUaGUgY29udGVudHMgb2YgdGhpcyBwYWdlIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOyBkbyBub3QgZWRpdCBieSBoYW5kIChjaGFuZ2VzIHdpbGwgYmUgbG9zdCknJydcblxuIjsKKyAgICBwcmludCAkZmggIkRldGFpbHMgb2YgdGhlIGZlYXR1cmUgbWFya2luZyBzeXN0ZW0gYW5kIGhvdyBpdCBpcyB1c2VkIGNhbiBiZSBmb3VuZCBhdCBbW0ZlYXR1cmUgTWFya2luZyBhbmQgU2VsZWN0aW9uXV1cblxuIjsKKworICAgIGZvcmVhY2ggbXkgJG5vZGUgKHNvcnQga2V5cygldG9wKSkgeworCXByaW50X3dpa2lfbm9kZSgkZmgsICRub2RlLCAkZGVwdGgrMSk7CisgICAgfQorfQorCitzdWIgcHJpbnRfd2lraV9ub2RlIHsKKyAgICBteSAoJGZoLCAkbm9kZSwgJGRlcHRoKSA9IEBfOworCisgICAgbXkgJGRhdGFoZWFkZXI7CisgICAgbXkgJGRlcHRoaW5jcmVhc2UgPSAxOworCisgICAgaWYgKCRkZXB0aCA+ICRvcHRzeydXJ30pIHsKKwlwcmludCAkZmggIioiIHggKCRkZXB0aCAtICRvcHRzeydXJ30gKyAxKSAuICIgJG5vZGVcbiI7CisJJGRhdGFoZWFkZXIgPSAiKiIgeCAoJGRlcHRoIC0gJG9wdHN7J1cnfSArIDIpOworCSRkZXB0aGluY3JlYXNlKys7CisgICAgfSBlbHNlIHsKKwlwcmludCAkZmggIj0iIHggJGRlcHRoIC4gIiAkbm9kZSAiIC4gIj0iIHggJGRlcHRoIC4gIlxuIjsKKwkkZGF0YWhlYWRlciA9ICIqIjsKKyAgICB9CisKKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3Byb3ZpZGVkYnknfSkpIHsKKwlwcmludCAkZmggIiRkYXRhaGVhZGVyIHByb3ZpZGVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIHdpa2lfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3Byb3ZpZGVkYnknfX0pKSAuIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydyZXF1aXJlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkZGF0YWhlYWRlciByZXF1aXJlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCB3aWtpX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eydyZXF1aXJlZGJ5J319KSkgLiJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsnd2FudGVkYnknfSkpIHsKKwlwcmludCAkZmggIiRkYXRhaGVhZGVyIHdhbnRlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCB3aWtpX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eyd3YW50ZWRieSd9fSkpIC4gIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydjaGlsZHJlbid9KSkgeworCWlmICgkZGVwdGggPj0gJG9wdHN7J1cnfSkgeworCSAgICBwcmludCAkZmggIiRkYXRhaGVhZGVyIENoaWxkcmVuOlxuIjsKKwl9CisJZm9yZWFjaCBteSAkY2hpbGQgKHNvcnQga2V5cygleyRmZWF0dXJlc3skbm9kZX17J2NoaWxkcmVuJ319KSkgeworCSAgICBwcmludF93aWtpX25vZGUoJGZoLCAkY2hpbGQsICRkZXB0aCArICRkZXB0aGluY3JlYXNlKTsKKwl9CisgICAgfQorfQorCitzdWIgd2lraV9saW5rX2ZpbGVzIHsKKyAgICBteSBAZmlsZXMgPSBAXzsKKyAgICBtYXAgeyAkXyA9ICJbaHR0cDovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvdmlld3ZjL25ldC1zbm1wL3RydW5rL25ldC1zbm1wLyRfP3ZpZXc9bWFya3VwICRfXSI7IH0gQGZpbGVzOworICAgIHJldHVybiBAZmlsZXM7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaGVscCBvdXRwdXQKKyMKK3N1YiB1c2FnZSB7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBbRkxBR1NdIElOUFVURklMRSBPVVRQVVRGSUxFXG5cbiI7CisgICAgcHJpbnQgIkZMQUdTOlxuIjsKKyAgICBwcmludCAiXHQtaFx0aGVscFxuIjsKKyAgICBwcmludCAiXHQtb1x0T3V0cHV0IHN0eWxlOiBPcmctTW9kZSBbZGVmYXVsdF1cbiI7CisgICAgcHJpbnQgIlx0LXdcdE91dHB1dCBzdHlsZTogd2lraVxuIjsKKyAgICBwcmludCAiXHQtVyBERVBUSFx0V2lraSBoZWFkZXIgdG8gYnVsbGV0IGxpc3QgZGVwdGggKGRlZmF1bHQgMilcbiI7CisgICAgcHJpbnQgIlxuSU5QVVQvT1VUUFVUXG4iOworICAgIHByaW50ICJcdElOUFVURklMRTpcdGxvY2F0aW9uIG9mIHRoZSBpbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oIGZpbGVcbiI7CisgICAgcHJpbnQgIlx0T1VUUFVURklMRTpcdHRoZSBmaWxlIHRvIHdyaXRlIHRoZSByZXN1bHRzIHRvXG4iOworICAgIGV4aXQ7Cit9CmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYWUzNDBkCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZQpAQCAtMCwwICsxLDEyOCBAQAorIyEvYmluL3NoCisKKyMKKyMgZmVhdHVyZS1yZW1vdmU6IHJlbW92ZXMgZmVhdHVyZXMgYnkgZGVmaW5pbmcgc3BlY2lhbCB2YXJpYWJsZXMKKyMgaW5kaWNhdGluZyBwYXJ0aWN1bGFyIGNvZGUgc2VnbWVudHMgYXJlIHVubmVlZGVkLiAgVGhpcyBpcyBkb25lIGJ5CisjIGV4YW1pbmluZyB0aGUgbGlzdCBvZiBwcm92aWRlZCBmZWF0dXJlcyBhbmQgZGVmaW5pbmcgYSBSRU1PVkUKKyMgZXF1aXZhbGVudCBpZiBubyBvdGhlciBtb2R1bGUgcmVxdWlyZWQgaXQuCisjCisjIEFyZ3VtZW50czoKKyMgICBmZWF0dXJlLXJlbW92ZSBtYWluaGVhZGVyLmggZ2xvYmFsaGVhZGVyLmggVEhFUkVTVAorIworIyBXaGVyZSBUSEVSRVNUIGFyZSBhIGxpc3Qgb2YgZmVhdHVyZXMgdG8gcmVtb3ZlIChkZWZhdWx0KSBvciBhZGQuCisjCisjICAgLS1hZGQgc3dpdGNoZXMgdG8gImFkZGluZyIgYW5kIC0tcmVtb3ZlIHN3aXRjaGVzIGJhY2suCisjCisjIEUuRy4KKyMgICBmZWF0dXJlLXJlbW92ZSBtYWluaGVhZGVyLmggZ2xvYmFsaGVhZGVyLmggb2lkX3N0YXNoIC0tYWRkIGNvbnRhaW5lcl9udWxsCisjCitDUD1jcAorCitmZWF0dXJlaGVhZGVyPSIkMSIKK2ZlYXR1cmVoZWFkZXJpbj0iJDEuaW4iCitmZWF0dXJlaGVhZGVyZ2xvYmFsPSIkMiIKK3NoaWZ0CitzaGlmdAorCithcmd1bWVudHR5cGU9Ii0tcmVtb3ZlIgorcmVtb3ZldGhlc2U9IiIKK2FkZHRoZXNlPSIiCisKK3doaWxlIHRlc3QgIngkMSIgIT0gIngiIDsgZG8KKyAgICB1Yz1gZWNobyAkMSB8IHRyIGEteiBBLVpgCisgICAgY2FzZSAkMSBpbgorCS0tKikKKwkgICAgYXJndW1lbnR0eXBlPSIkMSIKKwkgICAgOzsKKworCSopCisJICAgIGlmIHRlc3QgIngkYXJndW1lbnR0eXBlIiA9ICJ4LS1yZW1vdmUiIDsgdGhlbgorCQlyZW1vdmV0aGVzZT0iJHJlbW92ZXRoZXNlICR1YyIKKwkgICAgZWxzZQorCQlhZGR0aGVzZT0iJGFkZHRoZXNlICR1YyIKKwkgICAgZmkKKwkgICAgOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworZWNobyAiIiA+ICRmZWF0dXJlaGVhZGVyCitlY2hvICIvKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgZmVhdHVyZXMgdGhhdCBOZXQtU05NUCBIQVMgb3IgaGFzIFJFTU9WRWQgKi8iID4+ICRmZWF0dXJlaGVhZGVyCisKK2hhc2xpc3Q9IiAiCisKK2ZvciBpIGluIGBncmVwIE5FVFNOTVBfRkVBVFVSRV9QUk9WSURFXyAkZmVhdHVyZWhlYWRlcmluIHwgc2VkICdzLy4qRkVBVFVSRV9QUk9WSURFXy8vO3MvIC4qLy8nYCA7IGRvCisgICAgIworICAgICMgSWYgd2Ugd2VyZSBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gaW5jbHVkZSBpdCwgdGhlbiBkbyBzbworICAgICMKKyAgICBpZiBlY2hvICIgJGFkZHRoZXNlICIgfCBncmVwICIgJHtpfSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgICMgVGhlIHVzZXIgcmVxdWlyZWQgaXQgOyByZXBvcnQgd2UncmUgdXNpbmcgaXQKKwllY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9IQVNfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKwloYXNsaXN0PSIke2hhc2xpc3R9JHtpfSAiCisKKyAgICAjCisgICAgIyBjaGVjayB0byBzZWUgaWYgc29tZXRoaW5nIHJlcXVyaWVkIGl0CisgICAgIworICAgIGVsaWYgZ3JlcCAiTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfJHtpfSAiICRmZWF0dXJlaGVhZGVyZ2xvYmFsID4gL2Rldi9udWxsIDsgdGhlbgorCSMgaWYgc28sIG1ha2Ugc3VyZSB3ZSB3ZXJlbid0IGFza2VkIHRvIHJlbW92ZSBpdAorICAgICAgIAlpZiBlY2hvICAiICRyZW1vdmV0aGVzZSAifCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAJICAgIyBVaCBvaDsgdGhleSBzcGVjaWZpY2FsbHkgd2FudGVkIGl0IHJlbW92ZWQgYnV0IGl0IHdhcyByZXF1aXJlZAorCSAgIGVjaG8gIkZlYXR1cmUgRXJyb3I6IgorICAgICAgIAkgICBlY2hvICIgRmVhdHVyZSAnJGknIHdhcyBhc2tlZCB0byBiZSByZW1vdmVkIGJ1dCBzb21ldGhpbmcgcmVxdWlyZWQgaXQiCisgICAgICAgCSAgIGVjaG8gIiBTZWUgdGhlICRmZWF0dXJlaGVhZGVyZ2xvYmFsIGZpbGUgZm9yIGRlcGVuZGVuY3kgZGV0YWlscyIKKwkgICBlY2hvICIiCisgICAgICAgICAgIHJtIC1mICRmZWF0dXJlaGVhZGVyCisgICAgICAgCSAgIGV4aXQgMQorICAgICAgIAlmaQorCisgICAgICAgCSMgc29tZXRoaW5nIHJlcXVpcmVkIGl0IDsgcmVwb3J0IHdlJ3JlIHVzaW5nIGl0CisgICAgICAgCWVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX0hBU18kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorCWhhc2xpc3Q9IiR7aGFzbGlzdH0ke2l9ICIKKworICAgICMKKyAgICAjIGNoZWNrIHRvIHNlZSBpZiBzb21ldGhpbmcgIndhbnRlZCIgaXQKKyAgICAjCisgICAgZWxpZiBncmVwICJORVRTTk1QX0ZFQVRVUkVfV0FOVF8ke2l9ICIgJGZlYXR1cmVoZWFkZXJnbG9iYWwgPiAvZGV2L251bGwgOyB0aGVuCisJICAgIyBub3RoaW5nIHJlcXVpcmVkIGl0LCBidXQgc29tZXRoaW5nICJ3YW50ZWQiIGl0CisKKwkgICAjIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSB3ZXJlbid0IGFza2VkIHRvIGV4Y2x1ZGUgaXQKKyAgICAgICAgICAgaWYgZWNobyAiICRyZW1vdmV0aGVzZSAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgICAgICAjIHdlIHdlcmUgc3BlY2lmaWNhbGx5IGFza2VkICpub3QqIHRvIHVzZSB0aGlzIGZlYXR1cmUKKyAgICAgICAgICAgICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV8kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorICAgICAgICAgICBlbHNlCisJICAgICAgICMgc29tZXRoaW5nIHdhbnRlZCBpdCwgc28gd2UnbGwgaW5jbHVkZSBpdAorCSAgICAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9IQVNfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKwkgICAgICAgaGFzbGlzdD0iJHtoYXNsaXN0fSR7aX0gIgorICAgICAgICAgICBmaQorCisKKyAgICAjCisgICAgIyBjaGVjayB0byBzZWUgaWYgc29tZXRoaW5nIHJlcXVpcmVkIGEgcGFyZW50CisgICAgIworICAgIGVsaWYgZWdyZXAgTkVUU05NUF9GRUFUVVJFXyR7aX1fQ0hJTERfT0YgJGZlYXR1cmVoZWFkZXJnbG9iYWwgPiAvZGV2L251bGwgOyB0aGVuCisJcGFyZW50bmFtZXM9YGVncmVwIE5FVFNOTVBfRkVBVFVSRV8ke2l9X0NISUxEX09GICRmZWF0dXJlaGVhZGVyZ2xvYmFsIHwgc2VkICdzLy4qQ0hJTERfT0ZfLy87cy8gLiovLzsnYAorCisJZm91bmRvbmU9MAorCWZvciBwYXJlbnRuYW1lIGluICRwYXJlbnRuYW1lcyA7IGRvCisgICAJICAgICMgaWYgdGhlIHBhcmVudCB3YXMgZGVzaXJlZCwgdGhlbiB3ZSBhcmUgdG9vOgorCSAgICAKKwkgICAgaWYgdGVzdCAkZm91bmRvbmUgPSAwIDsgdGhlbgorCQlpZiBlZ3JlcCAiTkVUU05NUF9GRUFUVVJFX0hBU18ke3BhcmVudG5hbWV9ICIgJGZlYXR1cmVoZWFkZXIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgCQkgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfSEFTXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisJCSAgICBoYXNsaXN0PSIke2hhc2xpc3R9JHtpfSAiCisJCSAgICBmb3VuZG9uZT0xCisJCWZpCisJICAgIGZpCisgICAgICAgIGRvbmUKKwlpZiB0ZXN0ICRmb3VuZG9uZSA9IDAgOyB0aGVuCisgICAgCSAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKwlmaQorCisgICAgIworICAgICMgbm8gb25lIHJlcXVpcmVkIG9yIHdhbnRlZCBpdCAtLSBpdCBpcyBzYWZlIHRvIHJlbW92ZSBpdAorICAgICMKKyAgICBlbHNlCisgICAgCSBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKyAgICBmaQorZG9uZQorCmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUgYi9sb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODllM2M4YwotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZQpAQCAtMCwwICsxLDExNyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgc2VhcmNoZXMgZm9yIC5vIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgZXhhbWluZXMgZWFjaCBmb3IKKyMgZGVmaW5lZCBmdW5jdGlvbnMgKFQpIGFuZCB1bmRlZmluZWQgcmVmZXJlbmNlcyAoVSkgYW5kIGxpc3RzCisjIGFueXRoaW5nIHRoYXQgaXNuJ3QgcmVxdWlyZWQgYnkgc29tZXRoaW5nIGVsc2Ugb3IgaXRzZWxmCisKKyMgdXNlZnVsIGNhbGxpbmcgc29ydGVkIGJ5IGZpbGU6CisjICAgcGVybCBtaW5pbWFsL2ZpbmQtdW51c2VkLWNvZGUgfCBzb3J0IAorCit1c2UgRmlsZTo6RmluZDsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6R1VJOjpMb25nOworCitteSAlb3B0czsKKworTG9jYWxHZXRPcHRpb25zKFwlb3B0cywKKwkJWydnfGdyZXAnLCAgICAgICJydW4gZmluZC9ncmVwIHRvIGxvb2sgZm9yIHN0cmluZyB1c2FnZXMiXSwKKyAgICApOworCitteSAoQGZpbGVzLCAlZGVmaW5lZCwgJWxvb2tpbmdmb3IpOworCitmaW5kKFwmZG90X29zLCAiLiIpOworCitmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKyAgICBjb2xsZWN0X2Zyb21fZmlsZSgkZmlsZSk7Cit9CisKKworaWYgKCQjQVJHViA+IC0xKSB7CisgICAgcHJpbnQgIkR1bXBpbmcgZm91bmQgc3ltYm9sIHVzYWdlczpcblxuIjsKKyAgICBmb3JlYWNoIG15ICRhcmcgKEBBUkdWKSB7CisJcHJpbnQgIiRhcmc6XG4iOworCXByaW50ICIgICIsIGpvaW4oIlxuICAiLCBAeyRkZWZpbmVkeyRhcmd9eyd1c2FnZXMnfX0pLCJcblxuIjsKKyAgICB9CisgICAgZXhpdDsKK30KKworZm9yZWFjaCBteSAkZnVuY3Rpb24gKHNvcnQgeyAkZGVmaW5lZHskYX17J3NvdXJjZSd9IGNtcCAkZGVmaW5lZHskYn17J3NvdXJjZSd9IH0ga2V5cyglZGVmaW5lZCkpIHsKKyAgICBpZiAoZXhpc3RzKCRkZWZpbmVkeyRmdW5jdGlvbn17J3NvdXJjZSd9KSAmJgorCSFleGlzdHMoJGRlZmluZWR7JGZ1bmN0aW9ufXsndXNhZ2VzJ30pKSB7CisJaWYgKGNoZWNrX2Zvcl9vbmNlX29ubHkoJGRlZmluZWR7JGZ1bmN0aW9ufXsnc291cmNlJ30sICRmdW5jdGlvbikpIHsKKwkgICAgcHJpbnRmKCIlLTM4cyAlLTM4c1xuIiwgJGRlZmluZWR7JGZ1bmN0aW9ufXsnc291cmNlJ30sICRmdW5jdGlvbik7CisJICAgIGlmICgkb3B0c3snZyd9KSB7CisJCW9wZW4oUCwiZmluZCAuIC1yZWdleCAnLiouXFwoY1xcfHhzXFwpJyB8IHhhcmdzIGdyZXAgLW4gJGZ1bmN0aW9ufCIpOworCQl3aGlsZSg8UD4pIHsKKwkJICAgIHByaW50ICIgICRfIjsKKwkJfQorCQljbG9zZShQKTsKKwkJcHJpbnQgIlxuIjsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N1YiBkb3Rfb3MgeworICAgIHJldHVybiBpZiAoIS9cLm8kLyk7CisgICAgcmV0dXJuIGlmICgkRmlsZTo6RmluZDo6bmFtZSA9fiAvXC8ubGlic1wvLyk7CisjICAgIHJldHVybiBpZiAoJEZpbGU6OkZpbmQ6Om5hbWUgPX4gL1wvKHBlcmx8cHl0aG9uKVwvLyk7CisgICAgcHVzaCBAZmlsZXMsICRGaWxlOjpGaW5kOjpuYW1lOworfQorCitzdWIgY29sbGVjdF9mcm9tX2ZpbGUgeworICAgIG15ICRmaWxlID0gc2hpZnQ7CisjICAgIHByaW50ICJzZWFyY2hpbmcgJGZpbGVcbiI7CisgICAgb3BlbihJLCJubSAkZmlsZXwiKTsKKyAgICB3aGlsZSg8ST4pIHsKKwkkZGVmaW5lZHskMX17J3NvdXJjZSd9ID0gJGZpbGUgaWYgKC8gVCAoLiopLyk7CisJcHVzaCBAeyRkZWZpbmVkeyQxfXsndXNhZ2VzJ319LCAkZmlsZSBpZiAoLyBVICguKikvKTsKKyAgICB9CisgICAgY2xvc2UoSSk7Cit9CisJCitzdWIgY2hlY2tfZm9yX29uY2Vfb25seSB7CisgICAgbXkgKCRmaWxlLCAkZnVuY3Rpb24pID0gQF87CisgICAgJGZpbGUgPX4gcy9cLm8vLmMvOworICAgIG9wZW4oSSwgJGZpbGUpOworICAgIG15ICR1c2FnZXMgPSAwOworICAgIHdoaWxlKDxJPikgeworCWlmICgvJGZ1bmN0aW9uLykgeworCSAgICAkdXNhZ2VzKys7CisJfQorCWlmICgkdXNhZ2VzID4gMSkgeworCSAgICBjbG9zZShJKTsKKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworCitzdWIgTG9jYWxHZXRPcHRpb25zIHsKKyAgICBpZiAoZXZhbCB7cmVxdWlyZSBHZXRvcHQ6OkdVSTo6TG9uZzt9KSB7CisgICAgICAgIGltcG9ydCBHZXRvcHQ6OkdVSTo6TG9uZzsKKyAgICAgICAgIyBvcHRpb25hbCBjb25maWd1cmUgY2FsbAorICAgICAgICBHZXRvcHQ6OkdVSTo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSBjYXB0dXJlX291dHB1dCBub19ndWkgYWxsb3dfemVybykpOworICAgICAgICByZXR1cm4gR2V0T3B0aW9ucyhAXyk7CisgICAgfQorICAgIHJlcXVpcmUgR2V0b3B0OjpMb25nOworICAgIGltcG9ydCBHZXRvcHQ6Okxvbmc7CisgICAgIyBvcHRpb25hbCBjb25maWd1cmUgY2FsbAorICAgIEdldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSBjYXB0dXJlX291dHB1dCkpOworICAgIEdldE9wdGlvbnMoTG9jYWxPcHRpb25zTWFwKEBfKSk7Cit9CisKK3N1YiBMb2NhbE9wdGlvbnNNYXAgeworICAgIG15ICgkc3QsICRjYiwgQG9wdHMpID0gKChyZWYoJF9bMF0pIGVxICdIQVNIJykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoMSwgMSwgJF9bMF0pIDogKDAsIDIpKTsKKyAgICBmb3IgKG15ICRpID0gJHN0OyAkaSA8PSAkI187ICRpICs9ICRjYikgeworICAgICAgICBpZiAoJF9bJGldKSB7CisgICAgICAgICAgICBuZXh0IGlmIChyZWYoJF9bJGldKSBlcSAnQVJSQVknICYmICRfWyRpXVswXSA9fiAvXkdVSTovKTsKKyAgICAgICAgICAgIHB1c2ggQG9wdHMsICgocmVmKCRfWyRpXSkgZXEgJ0FSUkFZJykgPyAkX1skaV1bMF0gOiAkX1skaV0pOworICAgICAgICAgICAgcHVzaCBAb3B0cywgJF9bJGkrMV0gaWYgKCRjYiA9PSAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQG9wdHM7Cit9CmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L2lnbm9yZS5yZWdleHAgYi9sb2NhbC9taW5pbWFsaXN0L2lnbm9yZS5yZWdleHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5Yjk5YwotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvaWdub3JlLnJlZ2V4cApAQCAtMCwwICsxLDQgQEAKK34kCisjJAorXC8uIworXC8uc3ZuXC8KZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXMgYi9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkNDU5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzCkBAIC0wLDAgKzEsMTMwIEBACisjIS9iaW4vcGVybAorCisjIHN0ZXBzOgorIyAxKSBydW4gY29uZmlndXJlCisjIDIpIHBlcmwgbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlcworIyAzKSBtYWtlIGRlcGVuZAorIyA0KSBtYWtlCisKK3VzZSBGaWxlOjpGaW5kOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBzdHJpY3Q7CisKK215ICVleGNlcHRpb25zID0gcXcoCisgICBhZ2VudC9taWJncm91cC9taWJkZWZzLmggICAgICAgICAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmggICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5oIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbmNsdWRlcy5oICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luaXRzLmggICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfZG90X2NvbmYuaCAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9zaHV0ZG93bi5oICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbml0cy5oICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfc2h1dGRvd24uaAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuYyAgICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaCAgICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmggICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9ocl9maWxlc3lzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGVmcy5oICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvaWZUYWJsZV9kZWZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21udHR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAxCispOworCitteSAlb3B0czsKKworTG9jYWxHZXRPcHRpb25zKFwlb3B0cywKKwkJWydufGRyeS1ydW4nLCAgICAgICJEcnktcnVuLCBqdXN0IHNheSB3aGF0IHlvdSB3b3VsZCBkbyJdLAorCQlbJ3Z8dmVyYm9zZScsICAgICAgIlNob3cgd2hhdCBmaWxlcyBhcmUgYmVpbmcgbGVmdCB0b28iXSwKKyAgICApOworCitteSAkaW5wdXRNYWtlZmlsZSA9ICRBUkdWWzBdIHx8ICJhZ2VudC9taWJncm91cC9NYWtlZmlsZSI7CitteSAkaW5wdXREaXIgPSAkQVJHVlsxXSB8fCAiYWdlbnQvbWliZ3JvdXAiOworCitteSAkY29sbGVjdGluZyA9IDA7CitteSAoJWZpbGVzLCBAZmlsZXMpOworCitvcGVuKEksICRpbnB1dE1ha2VmaWxlKTsKK3doaWxlKDxJPikgeworICAgIGlmICgvbWliX21vZHVsZV9saXN0X2M9LykgeworCSRjb2xsZWN0aW5nID0gMTsKKyAgICB9IGVsc2lmICgkY29sbGVjdGluZykgeworCWlmICghIC9cXFxzKiQvKSB7CisJICAgICRjb2xsZWN0aW5nID0gMDsKKwl9CisJY2hvbXAoKTsKKwlzL1xcLy87CisJcy9ccyovL2c7CisJcy9cLmMvLzsKKwlwdXNoIEBmaWxlcywgImFnZW50L21pYmdyb3VwLyRfIjsKKwkkZmlsZXN7ImFnZW50L21pYmdyb3VwLyRfLmMifSA9IDE7CisJJGZpbGVzeyJhZ2VudC9taWJncm91cC8kXy5oIn0gPSAxOworICAgIH0KK30KKworZmluZChcJnJlbW92ZV9maWxlcywgJGlucHV0RGlyKTsKKworc3ViIHJlbW92ZV9maWxlcyB7CisgICAgcmV0dXJuIGlmICghL1wuW2NoXSQvKTsKKyAgICByZXR1cm4gaWYgKC9cLmgkLyk7ICMgWFhYOiB3ZSBuZWVkIHRvIGRlbGV0ZSBoZWFkZXJzIGV2ZW50dWFsbHkgdG9vCisgICAgcmV0dXJuIGlmICgvX2NvbnN0YW50cy5oLyk7CisgICAgcmV0dXJuIGlmIChleGlzdHMoJGV4Y2VwdGlvbnN7JEZpbGU6OkZpbmQ6Om5hbWV9KSk7CisKKyAgICBpZiAoIWV4aXN0cygkZmlsZXN7JEZpbGU6OkZpbmQ6Om5hbWV9KSkgeworCVVubGluaygkXywgJEZpbGU6OkZpbmQ6Om5hbWUpOworICAgIH0gZWxzaWYgKCRvcHRzeyd2J30pIHsKKwlwcmludCAiTGVhdmluZyAkRmlsZTo6RmluZDo6bmFtZVxuIjsKKyAgICB9Cit9CisKK3N1YiBVbmxpbmsgeworICAgIG15ICgkZmlsZSwgJGZ1bGxmaWxlKSA9IEBfOworICAgIHByaW50ICJSZW1vdmluZyAkZnVsbGZpbGVcbiI7CisgICAgaWYgKCEkb3B0c3snbid9KSB7CisJdW5saW5rKCRmaWxlKTsKKwlpZiAoLWYgIiRmaWxlIikgeworCSAgICBwcmludCAiKioqIEZBSUxFRCB0byByZW1vdmUgJGZpbGVcbiI7IAorCX0KKyAgICB9Cit9CisKKworc3ViIExvY2FsR2V0T3B0aW9ucyB7CisgICAgaWYgKGV2YWwge3JlcXVpcmUgR2V0b3B0OjpHVUk6Okxvbmc7fSkgeworICAgICAgICBpbXBvcnQgR2V0b3B0OjpHVUk6Okxvbmc7CisgICAgICAgICMgb3B0aW9uYWwgY29uZmlndXJlIGNhbGwKKwlteSBAZ29wdHMgPSBxdyhub19pZ25vcmVfY2FzZSBub19ndWkgYWxsb3dfemVybyk7CisJaWYgKCRHZXRvcHQ6OkdVSTo6TG9uZzo6VkVSU0lPTiA+IDAuMikgeworCSAgICBwdXNoIEBnb3B0cywgcXcoZGlzcGxheV9oZWxwIGNhcHR1cmVfb3V0cHV0KTsKKwl9CisgICAgICAgIEdldG9wdDo6R1VJOjpMb25nOjpDb25maWd1cmUoQGdvcHRzKTsKKyAgICAgICAgcmV0dXJuIEdldE9wdGlvbnMoQF8pOworICAgIH0KKyAgICByZXF1aXJlIEdldG9wdDo6TG9uZzsKKyAgICBpbXBvcnQgR2V0b3B0OjpMb25nOworICAgICMgb3B0aW9uYWwgY29uZmlndXJlIGNhbGwKKyAgICBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZShxdyhkaXNwbGF5X2hlbHAgbm9faWdub3JlX2Nhc2UgY2FwdHVyZV9vdXRwdXQpKTsKKyAgICBHZXRPcHRpb25zKExvY2FsT3B0aW9uc01hcChAXykpOworfQorCitzdWIgTG9jYWxPcHRpb25zTWFwIHsKKyAgICBteSAoJHN0LCAkY2IsIEBvcHRzKSA9ICgocmVmKCRfWzBdKSBlcSAnSEFTSCcpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKDEsIDEsICRfWzBdKSA6ICgwLCAyKSk7CisgICAgZm9yIChteSAkaSA9ICRzdDsgJGkgPD0gJCNfOyAkaSArPSAkY2IpIHsKKyAgICAgICAgaWYgKCRfWyRpXSkgeworICAgICAgICAgICAgbmV4dCBpZiAocmVmKCRfWyRpXSkgZXEgJ0FSUkFZJyAmJiAkX1skaV1bMF0gPX4gL15HVUk6Lyk7CisgICAgICAgICAgICBwdXNoIEBvcHRzLCAoKHJlZigkX1skaV0pIGVxICdBUlJBWScpID8gJF9bJGldWzBdIDogJF9bJGldKTsKKyAgICAgICAgICAgIHB1c2ggQG9wdHMsICRfWyRpKzFdIGlmICgkY2IgPT0gMik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEBvcHRzOworfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGwgYi9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YTY0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGwKQEAgLTAsMCArMSwzMzMgQEAKKyMhIC91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpDb3B5OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIElPOjpGaWxlOwordXNlIEdldG9wdDo6U3RkOworCitteSAkSURfTk9SRUFEICA9ICJORVRTTk1QX05PX1JFQURfU1VQUE9SVCI7CitteSAkSURfTk9XUklURSA9ICJORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQiOworIyBteSAkSURfTUlOICAgICA9ICJORVRTTk1QX01JTklNQUxfQ09ERSI7CisKK215KCRTVF9PRkYsICRTVF9JRiwgJFNUX0VMU0UsICRTVF9JRk4sICRTVF9FTFNFTikgPQorICAoIm9mZiIsICJpZiIsICJlbHNlIiwgImlmbm90IiwgImVsc2Vub3QiKTsKKworbXkgJW9wdHMgICAgPSAoKTsKK215ICV0aGFzaCAgID0gKCk7CitteSAkY2Fud3JpdGUgPSAxOyAjIGN1cnJlbnQgd3JpdGUgc3RhdGUKKworbXkoJGFwcG5hbWUsJGFwcHBhdGgpID0gZmlsZXBhcnNlKCQwKTsKKworbXkgJG1pbmltYWxfaW5jbHVkZV9wYXRoID0gImluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaCI7CisKKworaWYgKCAoIWdldG9wdHMoInJ3bWk6diIsXCVvcHRzKSkgfHwgKDEgIT0gJCNBUkdWKSApIHsKKyAgcHJpbnQgIiRhcHBuYW1lIFtvcHRpb25zXSBmcm9tLWRpcmVjdG9yeSB0by1kaXJlcGN0b3J5XG4iOworICBwcmludCAiLXIgICAgIHBhcnNlIG91dCBjb2RlIHVubmVlZGVkIGJ5ICRJRF9OT1JFQUQgaWZkZWZcbiI7CisgIHByaW50ICItdyAgICAgcGFyc2Ugb3V0IGNvZGUgdW5uZWVkZWQgYnkgJElEX05PV1JJVEUgaWZkZWYgKERFRkFVTFQpXG4iOworICBwcmludCAiLW0gICAgIHBhcnNlIG91dCBjb2RlIHVubmVlZGVkIGFjY29yZGluZyBtaW5pbWFsaXN0IGlmZGVmc1xuIjsKKyAgcHJpbnQgIiAgICAgICByZXF1aXJlcyBmcm9tLWRpcmVjdG9yeSB0byBiZSB0aGUgdG9wIG9mIHRoZSBuZXQtc25tcCB0cmVlXG4iOworICBwcmludCAiICAgICAgIChUaGlzIGlzIG11bHRpcGxlIGlmZGVmcyBhdXRvIHNlbGVjdGVkIGRlcGVuZGluZ1xuIjsKKyAgcHJpbnQgIiAgICAgICAgb24gdGhlIG5ldC1zbm1wIHNvdXJjZSBjb25maWd1cmF0aW9uKVxuXG4iOworICBwcmludCAiLWkgJ2lnbm9yZS1maWxlJyAgZmlsZSBvZiBmaWxlcyB0byBpZ25vcmUgKG5vdCBjb3B5KVxuIjsKKyAgcHJpbnQgIi12ICAgICBwcmludCB2ZXJib3NlIGluZm8gdG8gc3RhbmRhcmQgb3V0XG4iOworICBkaWUgIkVycm9yOiB0d28gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyByZXF1aXJlZFxuIjsKK30KKworI2RlZmF1bHQgdG8gZXZlcnl0aGluZworaWYgKCAoIWV4aXN0cyAkb3B0c3tyfSkgJiYgKCFleGlzdHMgJG9wdHN7d30pICYmICghZXhpc3RzICRvcHRze219KSApIHsKKyAgJHRoYXNoeyIkSURfTk9XUklURSJ9ID0gIiRTVF9PRkYiOworfQorZWxzZSB7CisgICR0aGFzaHsiJElEX05PUkVBRCJ9ICA9ICIkU1RfT0ZGIiBpZiAoIGV4aXN0cyAkb3B0c3tyfSApOworICAkdGhhc2h7IiRJRF9OT1dSSVRFIn0gPSAiJFNUX09GRiIgaWYgKCBleGlzdHMgJG9wdHN7d30gKTsKK30KKworbXkgJGZyb21kaXIgPSAkQVJHVlswXTsKK215ICR0b2RpciAgID0gJEFSR1ZbMV07CisKK2lmICggISgtZSAkZnJvbWRpcikgKSB7CisgIGRpZSAiRXJyb3I6ICRhcHBuYW1lOiBmcm9tIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJyRmcm9tZGlyJ1xuIjsKK30KK2lmICggISgtZCAkZnJvbWRpcikgKSB7CisgICAgZGllICJFcnJvcjogJGFwcG5hbWU6IGZyb20gZGlyZWN0b3J5LCAnJGZyb21kaXInLCBtdXN0IGJlIGEgZGlyZWN0b3J5XG4iOworfQorCitpZiAoIGV4aXN0cyAkb3B0c3ttfSApIHsKKyAgICBsb2FkX21pbmFtYWxfaWZkZWZzKCk7Cit9CisKKyMgY3JlYXRlIHNlYXJjaCBzdHJpbmcgZnJvbSB0YWdzCisjIG1pbmltYWwgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGlzCitteSAkc2VhcmNoID0gam9pbiAifCIsIChrZXlzICV0aGFzaCk7CisKKworIyBjaGVjayBmb3IgYW5kIGxvYWQgaWdub3JlIGZpbGUKK215ICRpZ3N0cmluZyA9ICIiOworaWYgKCBleGlzdHMgJG9wdHN7aX0gKSB7CisgIG9wZW4gbXkoJElIKSwgIjwgJG9wdHN7aX0iIG9yCisgICAgZGllICJDb3VsZCBub3Qgb3BlbiBpZ25vcmUtZmlsZSAnJG9wdHN7aX0nOiAkISI7CisgIG15IEBpZ2xpc3QgPSA8JElIPjsKKyAgJElILT5jbG9zZSgpOworICBjaG9tcCBAaWdsaXN0OworICAkaWdzdHJpbmcgPSBqb2luICJ8IiwgQGlnbGlzdDsKKyAgJGlnc3RyaW5nID0gIigiIC4gJGlnc3RyaW5nIC4gIikiOworICBwcmludCAiaWdub3JlIHN0cmluZzogXCckaWdzdHJpbmdcJ1xuIiBpZiAoZXhpc3RzICRvcHRze3Z9KTsKK30KKworCisKK2lmICggLWUgJHRvZGlyICkgeworICBpZiAoICgoLWQgJGZyb21kaXIpICYmICEoLWQgJHRvZGlyKSkgfHwKKwkgICAoISgtZCAkZnJvbWRpcikgJiYgKC1kICR0b2RpcikpICkgeworCWRpZSAiRXJyb3I6ICRhcHBuYW1lOiBmcm9tLWRpcmVjdG9yeSBhbmQgdG8tZGlyZWN0b3J5IG11c3QgYm90aCBlaXRoZXIgYmUgYSBmaWxlIG9yIGJvdGggYmUgYSBkaXJlY3RvcnlcbiI7CisgIH0KK30KK2Vsc2UgeworICBpZiAoLWQgJGZyb21kaXIpIHsKKwlwcmludCAiV2FybmluZzogJGFwcG5hbWU6ICckdG9kaXInIGRvZXMgbm90IGV4aXN0LCBjcmVhdGluZ1xuIjsKKwlta2RpciAiJHRvZGlyIiBvcgorICAgICAgZGllICJFcnJvcjogJGFwcG5hbWU6IFVuYWJsZSB0byBjcmVhdGUgdG8tZGlyZWN0b3J5ICckdG9kaXInOiAkIVxuIjsKKyAgfQorfQorCitpZiAoLWQgJGZyb21kaXIpIHsKKyAgcGFyc2VkaXJlY3RvcnkoJGZyb21kaXIsICR0b2Rpcik7Cit9CitlbHNlIHsKKyAgcGFyc2VmaWxlKCRmcm9tZGlyLCAkdG9kaXIpOworfQorCisKKworZXhpdCgwKTsKKworCisjIFBST0NFRFVSRVMgIFBST0NFRFVSRVMgIFBST0NFRFVSRVMgIFBST0NFRFVSRVMgIFBST0NFRFVSRVMKKworCitzdWIgcGFyc2VkaXJlY3RvcnkgeworICBteSgkZmRpciwgJHRkaXIpID0gQF87CisKKyAgbXkgQGxkaXJzID0gKCk7CisgIG15ICRESDsKKyAgb3BlbmRpciBteSgkREgpLCAkZmRpciBvciBkaWUgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJGZkaXInOiAkISI7CisgIGlmICggISgtZSAkdGRpcikgfHwgISgtZCAkdGRpcikgKSB7CisgICAgbWtkaXIgJHRkaXIgb3IgZGllICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJHRkaXInOiAkISI7CisgIH0KKyAgbXkgQGZsaXN0ID0gcmVhZGRpciAkREg7CisgIGNsb3NlZGlyICRESDsKKyAgIyByZW1vdmUgLiBhbmQgLi4KKyAgQGZsaXN0ID0gZ3JlcCAoISAvKF5cLiR8XlwuXC4kKS8gLCBAZmxpc3QpOworCisgIHdoaWxlIChteSAkbmFtZSA9IHNoaWZ0IEBmbGlzdCkgeworICAgIGlmICgtZCAiJGZkaXIvJG5hbWUiKSB7CisgICAgICBwdXNoIEBsZGlycywgIiRuYW1lIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwYXJzZWZpbGUoIiRmZGlyLyRuYW1lIiwgIiR0ZGlyLyRuYW1lIik7CisgICAgfQorICB9CisKKyAgd2hpbGUgKG15ICRuYW1lID0gc2hpZnQgQGxkaXJzKSB7CisgICAgcGFyc2VkaXJlY3RvcnkoIiRmZGlyLyRuYW1lIiwgIiR0ZGlyLyRuYW1lIikKKyAgfQorCit9ICMgcGFyc2VkaXJlY3RvcnkKKworCisjIHJldHVybnMgMSBpZiBjdXJyZW50IHN0YXRlIGZvciB0YWcgaXMgd3JpdGUsIDAgb3RoZXJ3aXNlCitzdWIgaXN3cml0ZXN0YXRlIHsKKyAgbXkgJHRhZyA9ICIiOworCisgIGZvcmVhY2ggJHRhZyAoa2V5cyAldGhhc2gpIHsKKwlpZiAoICgkdGhhc2h7JHRhZ30gZXEgIiRTVF9FTFNFIikgfHwKKwkJICgkdGhhc2h7JHRhZ30gZXEgIiRTVF9JRk4iKSApIHsKKwkgIHJldHVybigwKTsKKyAgICB9CisgIH0KKworICByZXR1cm4oMSk7Cit9ICMgaXN3cml0ZXN0YXRlCisKKworIyBDaGVjayAkbGluZSBmb3IgaWZkZWYgc3RhdGUgY2hhbmdlcyBmb3IgYWxsIG9mIHRoZSB0YWdzIGFuZCBjaGFuZ2UKKyMgc3RhdGUuCisjIElmIHRoZXJlIGlzIGEgc3RhdGUgY2hhbmdlIGVycm9yIHJldHVybiAwLCBvdGhlcndpc2UgcmV0dXJuIDE7CisKK3N1YiBjaGVja2lmZGVmIHsKKyAgbXkoJFRGLCAkbGluZSwgJGZyb21maWxlbmFtZSkgPSBAXzsKKworICBpZiAoICRsaW5lID1+IC8oI2lmZGVmfCNpZm5kZWZ8I2Vsc2V8I2VuZGlmKS4qKCRzZWFyY2gpKFxzfCR8XCopLyApIHsKKyAgICBteSAkY29wdCA9ICQxOworICAgIG15ICR0YWcgID0gJDI7CisKKwlpZiAoICRjb3B0IGVxICIjaWZkZWYiICkgeworICAgICAgaWYgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfT0ZGIikgeworICAgICAgICAkdGhhc2h7IiR0YWcifSA9ICIkU1RfSUYiOworICAgICAgICBwcmludCAic3RhdGUgY2hhbmdlICR0YWc6ICRTVF9PRkYgLT4gJFNUX0lGXG4iIGlmIChleGlzdHMgJG9wdHN7dn0pOworICAgICAgICAkY2Fud3JpdGUgPSBpc3dyaXRlc3RhdGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCAiRXJyb3I6ICRmcm9tZmlsZW5hbWU6IEZvdW5kICcjaWZkZWYgJHRhZycgd2l0aCBzdGF0ZSAkdGhhc2h7JHRhZ31cbiI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNpZiAoICRjb3B0IGVxICIjaWZuZGVmIiApIHsKKyAgICAgIGlmICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX09GRiIpIHsKKyAgICAgICAgIyBiZWZvcmUgY2hhbmdpbmcgdG8gYSBub24td3JpdGUgc3RhdGUgKGlmbikgcHJpbnQgI0lGTkRFRgorICAgICAgICAjIGxpbmUsIGlmIGN1cnJlbnQgc3RhdGUgaXMgYSB3cml0ZSBzdGF0ZS4KKyAgICAgICAgcHJpbnQgJFRGICIkbGluZSIgIGlmICggJGNhbndyaXRlICk7CisgICAgICAgICR0aGFzaHsiJHRhZyJ9ID0gIiRTVF9JRk4iOworICAgICAgICBwcmludCAic3RhdGUgY2hhbmdlICR0YWc6ICRTVF9PRkYgLT4gJFNUX0lGTlxuIiBpZiAoZXhpc3RzICRvcHRze3Z9KTsKKyAgICAgICAgJGNhbndyaXRlID0gaXN3cml0ZXN0YXRlKCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIkVycm9yOiAkZnJvbWZpbGVuYW1lOiBGb3VuZCAnI2lmbmRlZiAkdGFnJyB3aXRoIHN0YXRlICR0aGFzaHskdGFnfVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2lmICggJGNvcHQgZXEgIiNlbHNlIiApIHsKKyAgICAgIGlmICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0lGIikgeworICAgICAgICAjIGJlZm9yZSBjaGFuZ2luZyB0byBhIG5vbi13cml0ZSBzdGF0ZSAoZWxzZSkgcHJpbnQgI2Vsc2UKKyAgICAgICAgIyBsaW5lLCBpZiBjdXJyZW50IHN0YXRlIGlzIGEgd3JpdGUgc3RhdGUuCisgICAgICAgIHByaW50ICRURiAiJGxpbmUiICBpZiAoICRjYW53cml0ZSApOworICAgICAgICAkdGhhc2h7IiR0YWcifSA9ICIkU1RfRUxTRSI7CisgICAgICAgIHByaW50ICJzdGF0ZSBjaGFuZ2UgJHRhZzogJFNUX0lGIC0+ICRTVF9FTFNFXG4iIGlmIChleGlzdHMgJG9wdHN7dn0pOworICAgICAgICAkY2Fud3JpdGUgPSBpc3dyaXRlc3RhdGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2lmICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0lGTiIpIHsKKyAgICAgICAgJHRoYXNoeyIkdGFnIn0gPSAiJFNUX0VMU0VOIjsKKyAgICAgICAgcHJpbnQgInN0YXRlIGNoYW5nZSAkdGFnOiAkU1RfSUZOIC0+ICRTVF9FTFNFTlxuIiBpZiAoZXhpc3RzICRvcHRze3Z9KTsKKyAgICAgICAgJGNhbndyaXRlID0gaXN3cml0ZXN0YXRlKCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIkVycm9yOiAkZnJvbWZpbGVuYW1lOiBGb3VuZCAnI2Vsc2UgKC4uLikgJHRhZycgd2l0aCBzdGF0ZSAkdGhhc2h7JHRhZ31cbiI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNpZiAoICRjb3B0IGVxICIjZW5kaWYiICkgeworICAgICAgaWYgKCgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0VMU0UiKSAgfHwgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfSUYiKSB8fAorICAgICAgICAgICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0VMU0VOIikgfHwgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfSUZOIikpCisgICAgICB7CisgICAgICAgIHByaW50ICJzdGF0ZSBjaGFuZ2UgJHRhZzogJHRoYXNoeyR0YWd9IC0+ICRTVF9PRkZcbiIKKyAgICAgICAgICBpZiAoZXhpc3RzICRvcHRze3Z9KTsKKyAgICAgICAgJHRoYXNoeyIkdGFnIn0gPSAiJFNUX09GRiI7CisgICAgICAgICRjYW53cml0ZSA9IGlzd3JpdGVzdGF0ZSgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHByaW50ICJFcnJvcjogRm91bmQgJyNlbmRpZiAoLi4uKSAkdGFnJyB3aXRoIHN0YXRlICR0aGFzaHskdGFnfVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgIH0gIyBmb3JlYWNoIHRhZworCisgIHJldHVybiAxOworfSAjIGNoZWNraWZkZWYKKworCitzdWIgcGFyc2VmaWxlIHsKKyAgbXkoJGZuYW1lLCAkdG5hbWUpID0gQF87CisgIG15ICRGRjsgbXkgJFRGOworICBteSBAZnJvbWZpbGUgPSAoKTsKKyAgJGNhbndyaXRlID0gMTsKKworICAjIGlnbm9yZSBmaWxlIGZvciBmaWxlIG5hbWVzCisgIGlmICggKGV4aXN0cyAkb3B0c3tpfSkgJiYgKCIkZm5hbWUiID1+ICAvJGlnc3RyaW5nLykgKSB7CisgICAgcHJpbnQgIklHTk9SSU5HICRmbmFtZVxuIiAgaWYgKCBleGlzdHMgJG9wdHN7dn0gKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHByaW50ICJJbmZvOiBPcGVuaW5nICckZm5hbWUnXG4iIGlmICggZXhpc3RzICRvcHRze3Z9ICk7CisgIGlmICggIShvcGVuKCRGRiwgIjwgJGZuYW1lIikpICkgeworCXByaW50ICJXYXJuaW5nOiB1bmFibGUgdG8gb3BlbiBpbnB1dCBmaWxlLCBza2lwcGluZzogJyRmbmFtZSc6ICQhXG4iOworCXJldHVybiAwOworICB9CisKKyAgbXkgQGZyb21maWxlID0gPCRGRj47CisgICRGRi0+Y2xvc2UoKTsKKworICBpZiAoICEob3BlbigkVEYsICI+ICR0bmFtZSIpKSApIHsKKwlwcmludCAiV2FybmluZzogdW5hYmxlIHRvIG9wZW4gb3V0cHV0IGZpbGUsIHNraXBwaW5nOiAnJHRuYW1lJzogJCFcbiI7CisJcmV0dXJuIDA7CisgIH0KKyAgbXkgJG1vZGUgPSAoc3RhdCgiJGZuYW1lIikpWzJdOworICBpZiAoJG1vZGUpIHsgbXkgJHJlc3AgPSBjaG1vZCAkbW9kZSwgIiR0bmFtZSI7IH0KKworICBteSAkbGluZSAgID0gIiI7CisgIG15IEB0b3V0ICA9ICgpOworICBteSAkcmV0dmFsID0gMTsKKworICB3aGlsZSAoICRsaW5lID0gc2hpZnQgQGZyb21maWxlICkgeworICAgICMgY2hlY2sgZm9yIGFueSBpZmRlZiBzdGF0ZSBjaGFuZ2VzCisJaWYgKCAhIGNoZWNraWZkZWYoJFRGLCAkbGluZSwgJGZuYW1lKSApIHsKKyAgICAgICRGRi0+Y2xvc2UoKTsKKyAgICAgICRURi0+Y2xvc2UoKTsKKyAgICAgIGRpZSAiRXJyb3I6IHRhZyBlcnJvciBpbiBmaWxlIFwnJGZuYW1lXCcsIGV4aXRpbmdcbiI7CisgICAgfQorCisgICAgaWYgKCAkY2Fud3JpdGUgKSB7CisJICBwcmludCAkVEYgIiRsaW5lIjsKKwl9CisJZWxzZSB7CisJICBwcmludCAiSW5mbzogbm90IGNvcHlpbmc6ICRmbmFtZTogJGxpbmUiIGlmICggZXhpc3RzICRvcHRze3Z9ICk7CisgICAgfQorCisgIH0KKworICBpZiAoISAkY2Fud3JpdGUpIHsKKyAgICAgIHByaW50ICJFbmQgb2YgJGZuYW1lIHJlYWNoZWQgYW5kIHdlJ3JlIG5vdCByZXNldCBpbnRvICdjYW53cml0ZScgc3RhdGVcbiI7CisgIH0KKyAgJFRGLT5jbG9zZSgpOworCisgIHJldHVybiAkcmV0dmFsOworfSAjIHBhcnNlZmlsZQorCisKKyMgbm90ZSwgZnJvbWRpciBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCB0byBleGlzdCBhbmQgYmUgYQorIyBkaXJlY3RvcnkKK3N1YiBsb2FkX21pbmFtYWxfaWZkZWZzIHsKKyAgICBteSBAZmlsZWxpc3QgPSAoKTsKKyAgICBteSAkTUY7CisgICAgCisgICAgaWYgKCAhKG9wZW4oJE1GLCAiPCAkZnJvbWRpci8kbWluaW1hbF9pbmNsdWRlX3BhdGgiKSkgKSB7CisgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gbWFpbiBtaW5pbWFsIGZlYXR1cmUgZmlsZTogJyRmcm9tZGlyLyRtaW5pbWFsX2luY2x1ZGVfcGF0aCdcbiI7CisgICAgfQorICAgIG15ICRsaW5lOworICAgICMgc2tpcCBwcmVjZWRpbmcgbGluZXMKKyAgICB3aGlsZSAoICgkbGluZSA9IDwkTUY+KSAmJgorICAgICAgICAgICAgKCRsaW5lICF+IC9eI2Vsc2UuKk5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORy8gKSApIHsKKyAgICB9CisgICAgIyBncmFiIHRoZSBmZXRhdXJlIC5oIGZpbGVzCisgICAgd2hpbGUgKCAoJGxpbmUgPSA8JE1GPikgJiYKKyAgICAgICAgICAgICgkbGluZSAhfiAvXiNlbmRpZi4qTkVUX1NOTVBfRkVBVFVSRV9DSEVDS0lORy8pICkgeworICAgICAgICBpZiAoJGxpbmUgPX4gL2luY2x1ZGUuKjwoLiouaCk+LykgeworICAgICAgICAgICAgcHVzaCBAZmlsZWxpc3QsICQxOworICAgICAgICB9CisgICAgfQorCisgICAgY2xvc2UoJE1GKTsKKworICAgIHdoaWxlIChteSAkZm5hbWUgPSBzaGlmdCBAZmlsZWxpc3QpIHsKKyAgICAgICAgaWYgKCAhKCAtZSAiJGZyb21kaXIvaW5jbHVkZS8kZm5hbWUiICkgKSAgeworICAgICAgICAgICAgcHJpbnQgIldhcm46IGZlYXR1cmUgZmlsZSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmc6ICckZnJvbWRpci9pbmNsdWRlLyRmbmFtZSciOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoICEob3BlbigkTUYsICI8ICRmcm9tZGlyL2luY2x1ZGUvJGZuYW1lIikpICkgeworICAgICAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBtaW5pbWFsIGZlYXR1cmUgZmlsZTogJyRmcm9tZGlyL2luY2x1ZGUvJGZuYW1lJ1xuIjsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoICgkbGluZSA9IDwkTUY+KSApIHsKKyAgICAgICAgICAgIGlmICggJGxpbmUgPX4gL14jZGVmaW5lLiooTkVUU05NUF9GRUFUVVJFX1JFTU9WRVteIF0rKSAvICkgeworICAgICAgICAgICAgICAgICR0aGFzaHsiJDEifSA9ICRTVF9PRkY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoJE1GKTsKKyAgICB9CisgICAgICAgIAorfSAjIGxvYWRfbWluYW1hbF9pZmRlZnMKKworCisKKwpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMgYi9sb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNkNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMKQEAgLTAsMCArMSwzNTkgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBJTzo6RmlsZTsKK291ciAlb3B0cyA9IChkID0+ICdzaXplLXRlc3RzJyk7CisKKyMgZGVmYXVsdCBhcmd1bWVudHMgZ28gaGVyZQorbXkgQHNldHMgPQorICAgICh7CisJIndpdGgtZGVmYXVsdHMiID0+ICcnLAorICAgICB9KTsKKworbXkgJWJhc2VfYXJncyA9ICV7JHNldHNbMF19OworbXkgKCRiYXNlbmFtZSwgJGJhc2VudW0pOworCitnZXRvcHRzKCd0OmhsY0Q6bmo6bzplYjpUJywgXCVvcHRzKSB8fCB1c2FnZSgpOworCiskb3B0c3snaid9ID0gIi1qJG9wdHN7an0iIGlmIChleGlzdHMoJG9wdHN7J2onfSkpOworCit1c2FnZSgpIGlmICgkb3B0c3snaCd9KTsKKworbXkgQGFyZ3VtZW50c2V0cyA9CisgICAgKAorICAgICB7CisJIHRpdGxlID0+ICdzZWN1cml0eS10eXBlcycsCisJIGFyZ3VtZW50cyA9PgorCSB7CisJICAgICB1c20gPT4geworCQkgJ3dpdGgtc2VjdXJpdHktbW9kdWxlcycgPT4gJ3VzbScsCisJICAgICB9LAorCSAgICAgZHRsc2FuZHRscyA9PiB7CisJCSAnd2l0aC1zZWN1cml0eS1tb2R1bGVzJyAgICAgPT4gJ3RzbScsCisJCSAnd2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcycgPT4gJ3VzbScsCisJCSAnd2l0aC10cmFuc3BvcnRzJyAgICAgICAgICAgPT4gJ0RUTFNVRFAgVExTVENQJywKKwkJICd3aXRoLW1pYi1tb2R1bGVzJyAgICAgICAgICA9PiAndGxzdG0tbWliIHRzbS1taWInCisJICAgICB9LAorCSAgICAgdXNtYW5kZHRsc2FuZHRscyA9PiB7CisJCSAnd2l0aC1zZWN1cml0eS1tb2R1bGVzJyAgICAgPT4gJ3RzbSB1c20nLAorCQkgJ3dpdGgtdHJhbnNwb3J0cycgICAgICAgICAgID0+ICdEVExTVURQIFRMU1RDUCcsCisJCSAnd2l0aC1taWItbW9kdWxlcycgICAgICAgICAgPT4gJ3Rsc3RtLW1pYiB0c20tbWliJworCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ21pbmltYWxpc3QnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgIG1pbmltYWwgPT4geworCQkgJ2VuYWJsZS1taW5pbWFsaXN0JyAgICA9PiAnJywKKwkgICAgIH0sCisJICAgICAnbm90LW1pbmltYWwnID0+IHsKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdtaWItbG9hZGluZycsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgJ3dpdGhvdXQtbWliLWxvYWRpbmcnID0+IHsKKwkJICdkaXNhYmxlLW1pYi1sb2FkaW5nJyAgICA9PiAnJywKKwkgICAgIH0sCisJICAgICAnd2l0aC1taWItbG9hZGluZycgPT4geworCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ2RlYnVnZ2luZycsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgJ3dpdGhvdXQtZGVidWdnaW5nJyA9PiB7CisJCSAnZGlzYWJsZS1kZWJ1Z2dpbmcnICAgID0+ICcnLAorCSAgICAgfSwKKwkgICAgICd3aXRoLWRlYnVnZ2luZycgPT4geworCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ2xvZ2dpbmcnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgICd3aXRob3V0LWxvZ2dpbmcnID0+IHsKKwkJICd3aXRoLW91dC1mZWF0dXJlcycgICAgPT4gJ2xvZ2dpbmcnLAorCSAgICAgfSwKKwkgICAgICd3aXRoLWxvZ2dpbmcnID0+IHsKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdhZ2VudC1taWJzJywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICAnZnVsbC1hZ2VudCcgPT4geworCSAgICAgfSwKKwkgICAgICdtaW5pLWFnZW50JyA9PiB7CisJCSAnZW5hYmxlLW1pbmktYWdlbnQnID0+ICcnLAorCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ3Byb3RvY29sLXN1cHBvcnQnLAorCSBhcmd1bWVudHMgPT4KKwkgeworCSAgICAgJ2V2ZXJ5dGhpbmcnID0+IHsKKwkgICAgIH0sCisJICAgICAncmVhZC1vbmx5JyA9PiB7CisJCSAnZW5hYmxlLXJlYWQtb25seScgPT4gJycsCisJICAgICB9LAorCSAgICAgJ25vdGlmeS1vbmx5JyA9PiB7CisJCSAnZW5hYmxlLW5vdGlmeS1vbmx5JyA9PiAnJywKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdwZXJsJywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICAnd2l0aG91dC1wZXJsLW1vZHVsZXMnID0+IHsKKwkJICd3aXRob3V0LXBlcmwtbW9kdWxlcycgICAgPT4gJycsCisJCSAnZGlzYWJsZS1lbWJlZGRlZC1wZXJsJyA9PiAnJywKKwkgICAgIH0sCisJICAgICAnd2l0aC1wZXJsLW5vLWVtYmVkZGluZycgPT4geworCQkgJ3dpdGgtcGVybC1tb2R1bGVzJyAgICA9PiAnJywKKwkJICdkaXNhYmxlLWVtYmVkZGVkLXBlcmwnID0+ICcnLAorCSAgICAgfSwKKwkgICAgICd3aXRoLXBlcmwtYW5kLWVtYmVkZGluZycgPT4geworCQkgJ3dpdGgtcGVybC1tb2R1bGVzJyAgICA9PiAnJywKKwkJICdlbmFibGUtZW1iZWRkZWQtcGVybCcgPT4gJycsCisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICApOworCisjIG1hcCB0aGVzZSB0byBhIHJlZmVyZW5jYWJsZSBsb29rdXAgaGFzaAorbXkgJWFyZ3VtZW50c2V0czsKK2ZvcmVhY2ggbXkgJHNldCAoQGFyZ3VtZW50c2V0cykgeworICAgICRhcmd1bWVudHNldHN7JHNldC0+eyd0aXRsZSd9fSA9ICRzZXQ7Cit9CisKK2lmICgkb3B0c3snbCd9KSB7CisgICAgcHJpbnQgIlR5cGVzIGF2YWlsYWJsZTpcbiI7CisgICAgcHJpbnRmKCIgICUtNDAuNDBzICVzXG4iLCAiVGVzdCBUaXRsZSIsICJOdW1iZXIgb2Ygc3VidGVzdHMiKTsKKyAgICBwcmludGYoIiAgJS00MC40MHMgJXNcbiIsICItIiB4IDM5LCAiLSIgeCBsZW5ndGgoIk51bWJlciBvZiBzdWJ0ZXN0cyIpKTsKKyAgICBmb3JlYWNoIG15ICR0eXBlIChAYXJndW1lbnRzZXRzKSB7CisJbXkgQGtleXMgPSBrZXlzKCV7JHR5cGUtPnsnYXJndW1lbnRzJ319KTsKKwlwcmludGYoIiAgJS00MC40MHMgJXNcbiIsICR0eXBlLT57J3RpdGxlJ30sICQja2V5cysxKTsKKyAgICB9CisgICAgZXhpdDsKK30KKworbXkgJXR5cGVzOworaWYgKCRvcHRzeyd0J30pIHsKKyAgICBteSBAdHlwZXMgPSBzcGxpdCgvLFxzKi8sICRvcHRzeyd0J30pOworICAgIGZvcmVhY2ggbXkgJHR5cGUgKEB0eXBlcykgeworCSR0eXBlc3skdHlwZX0gPSAxOworICAgIH0KK30KKworaWYgKCRvcHRzeydiJ30pIHsKKyAgICAjIHVzZSB0aGlzIHNldCBhcyB0aGUgYmFzZSBkZWZhdWx0IHNldCBvZiBhcmd1bWVudHMKKyAgICAoJGJhc2VuYW1lLCAkYmFzZW51bSkgPSAoJG9wdHN7J2InfSA9fiAvKC4qKTooXGQrKS8pOworICAgIGlmICghZXhpc3RzKCRhcmd1bWVudHNldHN7JGJhc2VuYW1lfSkpIHsKKwlwcmludGYgU1RERVJSICJmYWlsZWQgdG8gZmluZCBzZXQgZm9yIC1iIGFyZ3VtZW50OiAlc1xuIiwgJGJhc2VuYW1lOworCWV4aXQoMSk7CisgICAgfQorICAgIEBzZXRzID0gYWRkX2luX2ZsYWdzKCRhcmd1bWVudHNldHN7JGJhc2VuYW1lfSwgXCViYXNlX2FyZ3MsICgpKTsKKyAgICBAc2V0cyA9IEBzZXRzWyRiYXNlbnVtXTsKKyAgICAlYmFzZV9hcmdzID0gJXskc2V0c1swXX07Cit9CisKK2ZvcmVhY2ggbXkgJHNldCAoQGFyZ3VtZW50c2V0cykgeworICAgIGlmICghJG9wdHN7J3QnfSB8fCBleGlzdHMoJHR5cGVzeyRzZXQtPnsndGl0bGUnfX0pKSB7CisgICAgICAgIGlmICgkYmFzZW5hbWUgJiYgJHNldC0+eyd0aXRsZSd9IGVxICRiYXNlbmFtZSkgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCUBzZXRzID0gYWRkX2luX2ZsYWdzKCRzZXQsIFwlYmFzZV9hcmdzLCBAc2V0cyk7CisgICAgfQorfQorCitpZiAoJG9wdHN7J2MnfSkgeworICAgICMgcHJpbnQgdGhlIGNvbmZpZ3VyZSBmbGFncworICAgIGZvcmVhY2ggbXkgJHNldCAoQHNldHMpIHsKKwlwcmludCAiJHNldC0+eyd0aXRsZSd9OlxuIjsKKwlwcmludCAiICIsIGdlbmVyYXRlX2NvbmZpZ3VyZV9mbGFncygkc2V0KSwgIlxuIjsKKyAgICB9CisgICAgZXhpdDsKK30KKworbXkgJHN1bW1hcnlmaWxlOworaWYgKCRvcHRzeydvJ30gJiYgISRvcHRzeyduJ30pIHsKKyAgICAkc3VtbWFyeWZpbGUgPSBuZXcgSU86OkZpbGU7CisgICAgJHN1bW1hcnlmaWxlLT5vcGVuKCI+JG9wdHN7b30iKTsKK30KKworbXkgJGNvdW50ID0gMDsKK2ZvcmVhY2ggbXkgJHNldCAoQHNldHMpIHsKKyAgICAkY291bnQrKzsKKyAgICBidWlsZF9zZXQoJGNvdW50LCAkc2V0KTsKK30KKworc3ViIGFkZF9pbl9mbGFncyB7CisgICAgbXkgKCRhcmd1bWVudHNldCwgJGJhc2VfZmxhZ3MsIEBjdXJyZW50X2ZsYWdzKSA9IEBfOworCisgICAgbXkgQG5ld19mbGFnczsKKworICAgICMgZG8gYSBsaW5lYXIgc2VhcmNoIG9mIHRoZSBvcHRpb25zCisgICAgaWYgKCEgJG9wdHN7J2UnfSkgeworCUBuZXdfZmxhZ3MgPSBAY3VycmVudF9mbGFnczsKKwlmb3JlYWNoIG15ICRuZXdhcmdzIChrZXlzKCV7JGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9fSkpIHsKKwkgICAgbXkgJWZsYWdzID0gJSRiYXNlX2ZsYWdzOworCisJICAgICRmbGFnc3sndGl0bGUnfSA9ICIkZmxhZ3N7J3RpdGxlJ306JG5ld2FyZ3MiOworCisJICAgIGZvcmVhY2ggbXkgJG5ld2ZsYWcgKGtleXMoJXskYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ317JG5ld2FyZ3N9fSkpIHsKKworCQkkZmxhZ3N7JG5ld2ZsYWd9IC49ICIgJGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9eyRuZXdhcmdzfXskbmV3ZmxhZ30iOworCSAgICB9CisJICAgIHB1c2ggQG5ld19mbGFncywgXCVmbGFnczsKKwl9CisJcmV0dXJuIEBuZXdfZmxhZ3M7CisgICAgfQorCisgICAgIyBvciBhbiBleHBvbmVudGlhbCBzZWFyY2gKKyAgICBmb3JlYWNoIG15ICRmbGFncyAoQGN1cnJlbnRfZmxhZ3MpIHsKKwlmb3JlYWNoIG15ICRuZXdhcmdzIChrZXlzKCV7JGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9fSkpIHsKKwkgICAgbXkgJWZsYWdzID0gJXskZmxhZ3N9OyAgIyBjb3B5IHRoZSBleGlzdGluZyBoYXNoLXNldCBvZiBmbGFncworCSAgICAKKwkgICAgaWYgKGV4aXN0cygkZmxhZ3N7J3RpdGxlJ30pKSB7CisJCSRmbGFnc3sndGl0bGUnfSAuPSAiLCAkbmV3YXJncyI7CisJICAgIH0gZWxzZSB7CisJCSRmbGFnc3sndGl0bGUnfSAuPSAiJG5ld2FyZ3MiOworCSAgICB9CisJICAgIGZvcmVhY2ggbXkgJG5ld2ZsYWcgKGtleXMoJXskYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ317JG5ld2FyZ3N9fSkpIHsKKworCQkkZmxhZ3N7JG5ld2ZsYWd9IC49ICIgJGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9eyRuZXdhcmdzfXskbmV3ZmxhZ30iOworCSAgICB9CisKKwkgICAgcHVzaCBAbmV3X2ZsYWdzLCBcJWZsYWdzOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gQG5ld19mbGFnczsKK30KKworc3ViIGdlbmVyYXRlX2NvbmZpZ3VyZV9mbGFncyB7CisgICAgbXkgKCRhcmd1bWVudHMpID0gQF87CisgICAgbXkgJGxpbmUgPSAiIjsKKyAgICBmb3JlYWNoIG15ICRhcmcgKGtleXMoJSRhcmd1bWVudHMpKSB7CisJbmV4dCBpZiAoJGFyZyBlcSAndGl0bGUnKTsKKwlpZiAoJGFyZ3VtZW50cy0+eyRhcmd9ID1+IC9eXHMqJC8pIHsKKwkgICAgJGxpbmUgLj0gIiAtLSRhcmciOworCX0gZWxzZSB7CisJICAgICRsaW5lIC49ICIgLS0kYXJnPVwiJGFyZ3VtZW50cy0+eyRhcmd9XCIiOworCX0KKyAgICB9CisgICAgcmV0dXJuICRsaW5lOworfQorCitzdWIgYnVpbGRfc2V0IHsKKyAgICBteSAoJG51bSwgJGFyZ3VtZW50cykgPSBAXzsKKworICAgICRudW0gPSBzcHJpbnRmKCIlMDNkIiwgJG51bSk7CisKKyAgICBteSAkZmlsZTsKKworICAgIGlmICghJG9wdHN7J24nfSkgeworCW1rZGlyICRvcHRzeydkJ30gaWYgKCEgLWQgJG9wdHN7J2QnfSk7CisJZGllICJmYWlsZWQgdG8gY3JlYXRlIHRoZSAkb3B0c3snZCd9IGRpcmVjdG9yeSIgaWYgKCEgLWQgJG9wdHN7J2QnfSk7CisKKwkkZmlsZSA9IG5ldyBJTzo6RmlsZTsKKwkkZmlsZS0+b3BlbigiPiRvcHRzeydkJ30vJG51bS0wLWNtZC1zdW1tYXJ5Iik7CisJJGZpbGUtPnByaW50KCJDcmVhdGluZyBvdXRwdXQgZm9yOiAkYXJndW1lbnRzLT57J3RpdGxlJ31cbiIpOworICAgIH0KKworICAgIHByaW50ICI9PT09PT09PT09PT09PT09PT09PSAkYXJndW1lbnRzLT57J3RpdGxlJ31cbiI7CisKKworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICIxLWRpc3RjbGVhbiIsICJtYWtlIGRpc3RjbGVhbiIpOworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICIyLWNvbmZpZ3VyZSIsCisJICAgICIuL2NvbmZpZ3VyZSAiIC4gZ2VuZXJhdGVfY29uZmlndXJlX2ZsYWdzKCRhcmd1bWVudHMpKTsKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiMy1mZWF0dXJlcyIsICJtYWtlIGZlYXR1cmVzIik7CisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjQtbWFrZSIsICJtYWtlICRvcHRzeydqJ30iKTsKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiNS11bnVzZWQtY29kZSIsICJwZXJsIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZSAtZyIpOworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICI2LXRlc3RpbmciLCAibWFrZSAtQyB0ZXN0aW5nIHRlc3QiKSBpZiAoJG9wdHN7J1QnfSk7CisKKyAgICBpZiAoISRvcHRzeyduJ30pIHsKKwlhbmFseXplX3NpemUoJGFyZ3VtZW50cy0+eyd0aXRsZSd9LCAiJG9wdHN7J2QnfS8kbnVtLTktcmVzdWx0cyIpOworICAgIH0KK30KKworc3ViIGFuYWx5emVfc2l6ZSB7CisgICAgbXkgKCR0aXRsZSwgJGZpbGVuYW1lKSA9IEBfOworCisgICAgbXkgJG91dGZpbGUgPSBuZXcgSU86OkZpbGU7CisgICAgJG91dGZpbGUtPm9wZW4oIj4kZmlsZW5hbWUiKTsKKworICAgIHByaW50ICJSZXN1bHRzIGZvcjogJHRpdGxlXG4iOworICAgIHByaW50ZiAkb3V0ZmlsZSAiUmVzdWx0cyBmb3I6ICR0aXRsZVxuIjsKKyAgICBwcmludGYgKCIlLTUwLjUwcyAlMTBzXG4iLCAiLSIgeCA0OSwgIi0iIHggMTApOworICAgIHByaW50ZiAkb3V0ZmlsZSAoIiUtNTAuNTBzICUxMHNcbiIsICItIiB4IDQ5LCAiLSIgeCAxMCk7CisKKyAgICBteSAkdG90YWxzaXplID0gMDsKKyAgICBmb3JlYWNoIG15ICRidWlsZGZpbGUgKGdsb2IoInNubXBsaWIvLmxpYnMvbGliKi5zby4qLjAuMCIpLAorCQkJICAgZ2xvYigiYWdlbnQvLmxpYnMvbGliKi5zby4qLjAuMCIpLAorCQkJICAgImFnZW50Ly5saWJzL3NubXBkIikgeworCisJbXkgQGluZm8gPSBzdGF0KCRidWlsZGZpbGUpOworCXByaW50ZiAkb3V0ZmlsZSAoIiUtNTAuNTBzICUxMHNcbiIsICRidWlsZGZpbGUsICRpbmZvWzddKTsKKwlwcmludGYoIiUtNTAuNTBzICUxMHNcbiIsICRidWlsZGZpbGUsICRpbmZvWzddKTsKKwkkdG90YWxzaXplICs9ICRpbmZvWzddOworICAgIH0KKyAgICBwcmludGYgJG91dGZpbGUgKCIlLTUwLjUwcyAlMTBzXG4iLCAiLSIgeCA0OSwgIi0iIHggMTApOworICAgIHByaW50ZiAkb3V0ZmlsZSAoIiUtNTAuNTBzICUxMHMgYnl0ZXNcbiIsICJUT1RBTCIsICR0b3RhbHNpemUpOworCisgICAgcHJpbnRmKCIlLTUwLjUwcyAlMTBzXG4iLCAiLSIgeCA0OSwgIi0iIHggMTApOworICAgIHByaW50ZigiJS01MC41MHMgJTEwcyBieXRlc1xuIiwgIlRPVEFMIiwgJHRvdGFsc2l6ZSk7CisKKyAgICBpZiAoZGVmaW5lZCgkc3VtbWFyeWZpbGUpKSB7CisJbXkgJHJlc3RyaWN0ZWRfdGl0bGUgPSAkdGl0bGU7CisJJHJlc3RyaWN0ZWRfdGl0bGUgPX4gcy9bXmEtekEtWl0vXy9nOworCXByaW50ZiAkc3VtbWFyeWZpbGUgIiUxMHMgJXMgXG4iLCAkdG90YWxzaXplLCAkdGl0bGU7CisgICAgfQorCisgICAgcmV0dXJuICR0b3RhbHNpemU7Cit9CisKK3N1YiB1c2FnZSB7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBbRkxBR1NdXG5cbiI7CisgICAgcHJpbnQgIkZMQUdTOlxuIjsKKyAgICBwcmludCAiICAtaFx0XHRoZWxwXG4iOworICAgIHByaW50ICIgIC10IFRZUEVTXHRTZWxlY3QgdHlwZXMgdG8gYW5hbHl6ZSAoZGVmYXVsdCA9IGFsbClcbiI7CisgICAgcHJpbnQgIiAgLWxcdFx0TGlzdCBhdmFpbGFibGUgdHlwZXNcbiI7CisgICAgcHJpbnQgIiAgLWNcdFx0UHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkXG4iOworICAgIHByaW50ICIgIC1EIERJUlx0U2F2ZSBkYXRhIHJlc3VsdHMgdG8gdGhpcyBkaXJlY3RvcnlcbiI7CisgICAgcHJpbnQgIiAgLW8gRklMRVx0U2F2ZSBhIGNvbXBsZXRlIHN1bW1hcnkgY2hhcnQgdG8gRklMRVxuIjsgCisgICAgcHJpbnQgIiAgLW5cdFx0RHJ5IHJ1biAtLSBvbmx5IHNob3cgdGhlIGNvbW1hbmRzIHRvIGV4ZWN1dGVcbiI7CisgICAgcHJpbnQgIiAgLWogTlVNXHRFeGVjdXRlIG1ha2Ugd2l0aCBwYXJhbGxlbCBidWlsZGluZyAoLWpOVU0pXG4iOworICAgIHByaW50ICIgIC1lXHRcdFVzZSBleHBvbmVudGlhbCBleHBhbnNpb24gKGFsbCBjb21ib3MpIG9mIHRoZSByZXF1ZXN0ZWQgb3B0aW9uc1xuIjsKKyAgICBwcmludCAiICAtYiBOQU1FOk5VTVx0VXNlIE5BTUUgYW5kIHRoZSBOVU0ndGggc2V0IGFzIHRoZSBiYXNlIGFyZ3VtZW50cyB0byBzdGFydCBmcm9tXG4iOworICAgIHByaW50ICIgIC1UXHRcdFJ1biAnbWFrZSB0ZXN0JyBhdCBlYWNoIHN0ZXAgYXMgd2VsbFxuIjsKKyAgICBleGl0OworfQorCitzdWIgU3lzdGVtIHsKKyAgICBteSAkZmlsZSAgPSBzaGlmdDsKKyAgICBteSAkbnVtICAgPSBzaGlmdDsKKyAgICBteSAkdGl0bGUgPSBzaGlmdDsKKyAgICBteSAkcGlwZSA9ICIgMj4mMSB8IHRlZSAkb3B0c3snZCd9LyRudW0tJHRpdGxlLm91dFxuIjsKKworICAgIHByaW50ICIjIyMgIiwgam9pbigiICIsIEBfKSwgJHBpcGU7CisgICAgaWYgKCEkb3B0c3snbid9ICYmICRmaWxlKSB7CisJcHJpbnQgJGZpbGUgIiMjIyAiLCBqb2luKCIgIiwgQF8pLCAiXG4iOworICAgIH0KKworICAgIGlmICghJG9wdHN7J24nfSkgeworCXN5c3RlbShqb2luKCIgIiwgQF8pIC4gJHBpcGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xvY2FsL25ldC1zbm1wLWNlcnQgYi9sb2NhbC9uZXQtc25tcC1jZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0NWRjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9uZXQtc25tcC1jZXJ0CkBAIC0wLDAgKzEsMjY5MCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2UgNS44LjA7CisKK3VzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBnbnVfZ2V0b3B0IG5vX2lnbm9yZV9jYXNlIHBhc3NfdGhyb3VnaCk7Cit1c2UgQ3dkIHF3KGdldGN3ZCByZWFscGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6Q29weTsKK3VzZSBGaWxlOjpQYXRoOwordXNlIFN5czo6SG9zdG5hbWU7Cit1c2UgQ2FycDsKKworb3VyIEBDQyA9ICgKK1siQUYiLCJBRkdIQU5JU1RBTiJdLAorWyJBWCIsIsOFTEFORCBJU0xBTkRTIl0sCitbIkFMIiwiQUxCQU5JQSJdLAorWyJEWiIsIkFMR0VSSUEiXSwKK1siQVMiLCJBTUVSSUNBTiBTQU1PQSJdLAorWyJBRCIsIkFORE9SUkEiXSwKK1siQU8iLCJBTkdPTEEiXSwKK1siQUkiLCJBTkdVSUxMQSJdLAorWyJBUSIsIkFOVEFSQ1RJQ0EiXSwKK1siQUciLCJBTlRJR1VBIEFORCBCQVJCVURBIl0sCitbIkFSIiwiQVJHRU5USU5BIl0sCitbIkFNIiwiQVJNRU5JQSJdLAorWyJBVyIsIkFSVUJBIl0sCitbIkFVIiwiQVVTVFJBTElBIl0sCitbIkFUIiwiQVVTVFJJQSJdLAorWyJBWiIsIkFaRVJCQUlKQU4iXSwKK1siQlMiLCJCQUhBTUFTIl0sCitbIkJIIiwiQkFIUkFJTiJdLAorWyJCRCIsIkJBTkdMQURFU0giXSwKK1siQkIiLCJCQVJCQURPUyJdLAorWyJCWSIsIkJFTEFSVVMiXSwKK1siQkUiLCJCRUxHSVVNIl0sCitbIkJaIiwiQkVMSVpFIl0sCitbIkJKIiwiQkVOSU4iXSwKK1siQk0iLCJCRVJNVURBIl0sCitbIkJUIiwiQkhVVEFOIl0sCitbIkJPIiwiQk9MSVZJQSwgUExVUklOQVRJT05BTCBTVEFURSBPRiJdLAorWyJCQSIsIkJPU05JQSBBTkQgSEVSWkVHT1ZJTkEiXSwKK1siQlciLCJCT1RTV0FOQSJdLAorWyJCViIsIkJPVVZFVCBJU0xBTkQiXSwKK1siQlIiLCJCUkFaSUwiXSwKK1siSU8iLCJCUklUSVNIIElORElBTiBPQ0VBTiBURVJSSVRPUlkiXSwKK1siQk4iLCJCUlVORUkgREFSVVNTQUxBTSJdLAorWyJCRyIsIkJVTEdBUklBIl0sCitbIkJGIiwiQlVSS0lOQSBGQVNPIl0sCitbIkJJIiwiQlVSVU5ESSJdLAorWyJLSCIsIkNBTUJPRElBIl0sCitbIkNNIiwiQ0FNRVJPT04iXSwKK1siQ0EiLCJDQU5BREEiXSwKK1siQ1YiLCJDQVBFIFZFUkRFIl0sCitbIktZIiwiQ0FZTUFOIElTTEFORFMiXSwKK1siQ0YiLCJDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUMiXSwKK1siVEQiLCJDSEFEIl0sCitbIkNMIiwiQ0hJTEUiXSwKK1siQ04iLCJDSElOQSJdLAorWyJDWCIsIkNIUklTVE1BUyBJU0xBTkQiXSwKK1siQ0MiLCJDT0NPUyAoS0VFTElORykgSVNMQU5EUyJdLAorWyJDTyIsIkNPTE9NQklBIl0sCitbIktNIiwiQ09NT1JPUyJdLAorWyJDRyIsIkNPTkdPIl0sCitbIkNEIiwiQ09OR08sIFRIRSBERU1PQ1JBVElDIFJFUFVCTElDIE9GIFRIRSJdLAorWyJDSyIsIkNPT0sgSVNMQU5EUyJdLAorWyJDUiIsIkNPU1RBIFJJQ0EiXSwKK1siQ0kiLCJDw5RURSBEJ0lWT0lSRSJdLAorWyJIUiIsIkNST0FUSUEiXSwKK1siQ1UiLCJDVUJBIl0sCitbIkNZIiwiQ1lQUlVTIl0sCitbIkNaIiwiQ1pFQ0ggUkVQVUJMSUMiXSwKK1siREsiLCJERU5NQVJLIl0sCitbIkRKIiwiREpJQk9VVEkiXSwKK1siRE0iLCJET01JTklDQSJdLAorWyJETyIsIkRPTUlOSUNBTiBSRVBVQkxJQyJdLAorWyJFQyIsIkVDVUFET1IiXSwKK1siRUciLCJFR1lQVCJdLAorWyJTViIsIkVMIFNBTFZBRE9SIl0sCitbIkdRIiwiRVFVQVRPUklBTCBHVUlORUEiXSwKK1siRVIiLCJFUklUUkVBIl0sCitbIkVFIiwiRVNUT05JQSJdLAorWyJFVCIsIkVUSElPUElBIl0sCitbIkZLIiwiRkFMS0xBTkQgSVNMQU5EUyAoTUFMVklOQVMpIl0sCitbIkZPIiwiRkFST0UgSVNMQU5EUyJdLAorWyJGSiIsIkZJSkkiXSwKK1siRkkiLCJGSU5MQU5EIl0sCitbIkZSIiwiRlJBTkNFIl0sCitbIkdGIiwiRlJFTkNIIEdVSUFOQSJdLAorWyJQRiIsIkZSRU5DSCBQT0xZTkVTSUEiXSwKK1siVEYiLCJGUkVOQ0ggU09VVEhFUk4gVEVSUklUT1JJRVMiXSwKK1siR0EiLCJHQUJPTiJdLAorWyJHTSIsIkdBTUJJQSJdLAorWyJHRSIsIkdFT1JHSUEiXSwKK1siREUiLCJHRVJNQU5ZIl0sCitbIkdIIiwiR0hBTkEiXSwKK1siR0kiLCJHSUJSQUxUQVIiXSwKK1siR1IiLCJHUkVFQ0UiXSwKK1siR0wiLCJHUkVFTkxBTkQiXSwKK1siR0QiLCJHUkVOQURBIl0sCitbIkdQIiwiR1VBREVMT1VQRSJdLAorWyJHVSIsIkdVQU0iXSwKK1siR1QiLCJHVUFURU1BTEEiXSwKK1siR0ciLCJHVUVSTlNFWSJdLAorWyJHTiIsIkdVSU5FQSJdLAorWyJHVyIsIkdVSU5FQS1CSVNTQVUiXSwKK1siR1kiLCJHVVlBTkEiXSwKK1siSFQiLCJIQUlUSSJdLAorWyJITSIsIkhFQVJEIElTTEFORCBBTkQgTUNET05BTEQgSVNMQU5EUyJdLAorWyJWQSIsIkhPTFkgU0VFIChWQVRJQ0FOIENJVFkgU1RBVEUpIl0sCitbIkhOIiwiSE9ORFVSQVMiXSwKK1siSEsiLCJIT05HIEtPTkciXSwKK1siSFUiLCJIVU5HQVJZIl0sCitbIklTIiwiSUNFTEFORCJdLAorWyJJTiIsIklORElBIl0sCitbIklEIiwiSU5ET05FU0lBIl0sCitbIklSIiwiSVJBTiwgSVNMQU1JQyBSRVBVQkxJQyBPRiJdLAorWyJJUSIsIklSQVEiXSwKK1siSUUiLCJJUkVMQU5EIl0sCitbIklNIiwiSVNMRSBPRiBNQU4iXSwKK1siSUwiLCJJU1JBRUwiXSwKK1siSVQiLCJJVEFMWSJdLAorWyJKTSIsIkpBTUFJQ0EiXSwKK1siSlAiLCJKQVBBTiJdLAorWyJKRSIsIkpFUlNFWSJdLAorWyJKTyIsIkpPUkRBTiJdLAorWyJLWiIsIktBWkFLSFNUQU4iXSwKK1siS0UiLCJLRU5ZQSJdLAorWyJLSSIsIktJUklCQVRJIl0sCitbIktQIiwiS09SRUEsIERFTU9DUkFUSUMgUEVPUExFJ1MgUkVQVUJMSUMgT0YiXSwKK1siS1IiLCJLT1JFQSwgUkVQVUJMSUMgT0YiXSwKK1siS1ciLCJLVVdBSVQiXSwKK1siS0ciLCJLWVJHWVpTVEFOIl0sCitbIkxBIiwiTEFPIFBFT1BMRSdTIERFTU9DUkFUSUMgUkVQVUJMSUMiXSwKK1siTFYiLCJMQVRWSUEiXSwKK1siTEIiLCJMRUJBTk9OIl0sCitbIkxTIiwiTEVTT1RITyJdLAorWyJMUiIsIkxJQkVSSUEiXSwKK1siTFkiLCJMSUJZQU4gQVJBQiBKQU1BSElSSVlBIl0sCitbIkxJIiwiTElFQ0hURU5TVEVJTiJdLAorWyJMVCIsIkxJVEhVQU5JQSJdLAorWyJMVSIsIkxVWEVNQk9VUkciXSwKK1siTU8iLCJNQUNBTyJdLAorWyJNSyIsIk1BQ0VET05JQSwgVEhFIEZPUk1FUiBZVUdPU0xBViBSRVBVQkxJQyBPRiJdLAorWyJNRyIsIk1BREFHQVNDQVIiXSwKK1siTVciLCJNQUxBV0kiXSwKK1siTVkiLCJNQUxBWVNJQSJdLAorWyJNViIsIk1BTERJVkVTIl0sCitbIk1MIiwiTUFMSSJdLAorWyJNVCIsIk1BTFRBIl0sCitbIk1IIiwiTUFSU0hBTEwgSVNMQU5EUyJdLAorWyJNUSIsIk1BUlRJTklRVUUiXSwKK1siTVIiLCJNQVVSSVRBTklBIl0sCitbIk1VIiwiTUFVUklUSVVTIl0sCitbIllUIiwiTUFZT1RURSJdLAorWyJNWCIsIk1FWElDTyJdLAorWyJGTSIsIk1JQ1JPTkVTSUEsIEZFREVSQVRFRCBTVEFURVMgT0YiXSwKK1siTUQiLCJNT0xET1ZBLCBSRVBVQkxJQyBPRiJdLAorWyJNQyIsIk1PTkFDTyJdLAorWyJNTiIsIk1PTkdPTElBIl0sCitbIk1FIiwiTU9OVEVORUdSTyJdLAorWyJNUyIsIk1PTlRTRVJSQVQiXSwKK1siTUEiLCJNT1JPQ0NPIl0sCitbIk1aIiwiTU9aQU1CSVFVRSJdLAorWyJNTSIsIk1ZQU5NQVIiXSwKK1siTkEiLCJOQU1JQklBIl0sCitbIk5SIiwiTkFVUlUiXSwKK1siTlAiLCJORVBBTCJdLAorWyJOTCIsIk5FVEhFUkxBTkRTIl0sCitbIkFOIiwiTkVUSEVSTEFORFMgQU5USUxMRVMiXSwKK1siTkMiLCJORVcgQ0FMRURPTklBIl0sCitbIk5aIiwiTkVXIFpFQUxBTkQiXSwKK1siTkkiLCJOSUNBUkFHVUEiXSwKK1siTkUiLCJOSUdFUiJdLAorWyJORyIsIk5JR0VSSUEiXSwKK1siTlUiLCJOSVVFIl0sCitbIk5GIiwiTk9SRk9MSyBJU0xBTkQiXSwKK1siTVAiLCJOT1JUSEVSTiBNQVJJQU5BIElTTEFORFMiXSwKK1siTk8iLCJOT1JXQVkiXSwKK1siT00iLCJPTUFOIl0sCitbIlBLIiwiUEFLSVNUQU4iXSwKK1siUFciLCJQQUxBVSJdLAorWyJQUyIsIlBBTEVTVElOSUFOIFRFUlJJVE9SWSwgT0NDVVBJRUQiXSwKK1siUEEiLCJQQU5BTUEiXSwKK1siUEciLCJQQVBVQSBORVcgR1VJTkVBIl0sCitbIlBZIiwiUEFSQUdVQVkiXSwKK1siUEUiLCJQRVJVIl0sCitbIlBIIiwiUEhJTElQUElORVMiXSwKK1siUE4iLCJQSVRDQUlSTiJdLAorWyJQTCIsIlBPTEFORCJdLAorWyJQVCIsIlBPUlRVR0FMIl0sCitbIlBSIiwiUFVFUlRPIFJJQ08iXSwKK1siUUEiLCJRQVRBUiJdLAorWyJSRSIsIlLDiVVOSU9OIl0sCitbIlJPIiwiUk9NQU5JQSJdLAorWyJSVSIsIlJVU1NJQU4gRkVERVJBVElPTiJdLAorWyJSVyIsIlJXQU5EQSJdLAorWyJCTCIsIlNBSU5UIEJBUlRIw4lMRU1ZIl0sCitbIlNIIiwiU0FJTlQgSEVMRU5BLCBBU0NFTlNJT04gQU5EIFRSSVNUQU4gREEgQ1VOSEEiXSwKK1siS04iLCJTQUlOVCBLSVRUUyBBTkQgTkVWSVMiXSwKK1siTEMiLCJTQUlOVCBMVUNJQSJdLAorWyJNRiIsIlNBSU5UIE1BUlRJTiJdLAorWyJQTSIsIlNBSU5UIFBJRVJSRSBBTkQgTUlRVUVMT04iXSwKK1siVkMiLCJTQUlOVCBWSU5DRU5UIEFORCBUSEUgR1JFTkFESU5FUyJdLAorWyJXUyIsIlNBTU9BIl0sCitbIlNNIiwiU0FOIE1BUklOTyJdLAorWyJTVCIsIlNBTyBUT01FIEFORCBQUklOQ0lQRSJdLAorWyJTQSIsIlNBVURJIEFSQUJJQSJdLAorWyJTTiIsIlNFTkVHQUwiXSwKK1siUlMiLCJTRVJCSUEiXSwKK1siU0MiLCJTRVlDSEVMTEVTIl0sCitbIlNMIiwiU0lFUlJBIExFT05FIl0sCitbIlNHIiwiU0lOR0FQT1JFIl0sCitbIlNLIiwiU0xPVkFLSUEiXSwKK1siU0kiLCJTTE9WRU5JQSJdLAorWyJTQiIsIlNPTE9NT04gSVNMQU5EUyJdLAorWyJTTyIsIlNPTUFMSUEiXSwKK1siWkEiLCJTT1VUSCBBRlJJQ0EiXSwKK1siR1MiLCJTT1VUSCBHRU9SR0lBIEFORCBUSEUgU09VVEggU0FORFdJQ0ggSVNMQU5EUyJdLAorWyJFUyIsIlNQQUlOIl0sCitbIkxLIiwiU1JJIExBTktBIl0sCitbIlNEIiwiU1VEQU4iXSwKK1siU1IiLCJTVVJJTkFNRSJdLAorWyJTSiIsIlNWQUxCQVJEIEFORCBKQU4gTUFZRU4iXSwKK1siU1oiLCJTV0FaSUxBTkQiXSwKK1siU0UiLCJTV0VERU4iXSwKK1siQ0giLCJTV0lUWkVSTEFORCJdLAorWyJTWSIsIlNZUklBTiBBUkFCIFJFUFVCTElDIl0sCitbIlRXIiwiVEFJV0FOLCBQUk9WSU5DRSBPRiBDSElOQSJdLAorWyJUSiIsIlRBSklLSVNUQU4iXSwKK1siVFoiLCJUQU5aQU5JQSwgVU5JVEVEIFJFUFVCTElDIE9GIl0sCitbIlRIIiwiVEhBSUxBTkQiXSwKK1siVEwiLCJUSU1PUi1MRVNURSJdLAorWyJURyIsIlRPR08iXSwKK1siVEsiLCJUT0tFTEFVIl0sCitbIlRPIiwiVE9OR0EiXSwKK1siVFQiLCJUUklOSURBRCBBTkQgVE9CQUdPIl0sCitbIlROIiwiVFVOSVNJQSJdLAorWyJUUiIsIlRVUktFWSJdLAorWyJUTSIsIlRVUktNRU5JU1RBTiJdLAorWyJUQyIsIlRVUktTIEFORCBDQUlDT1MgSVNMQU5EUyJdLAorWyJUViIsIlRVVkFMVSJdLAorWyJVRyIsIlVHQU5EQSJdLAorWyJVQSIsIlVLUkFJTkUiXSwKK1siQUUiLCJVTklURUQgQVJBQiBFTUlSQVRFUyJdLAorWyJHQiIsIlVOSVRFRCBLSU5HRE9NIl0sCitbIlVTIiwiVU5JVEVEIFNUQVRFUyJdLAorWyJVTSIsIlVOSVRFRCBTVEFURVMgTUlOT1IgT1VUTFlJTkcgSVNMQU5EUyJdLAorWyJVWSIsIlVSVUdVQVkiXSwKK1siVVoiLCJVWkJFS0lTVEFOIl0sCitbIlZVIiwiVkFOVUFUVSJdLAorWyJWRSIsIlZFTkVaVUVMQSwgQk9MSVZBUklBTiBSRVBVQkxJQyBPRiJdLAorWyJWTiIsIlZJRVQgTkFNIl0sCitbIlZHIiwiVklSR0lOIElTTEFORFMsIEJSSVRJU0giXSwKK1siVkkiLCJWSVJHSU4gSVNMQU5EUywgVS5TLiJdLAorWyJXRiIsIldBTExJUyBBTkQgRlVUVU5BIl0sCitbIkVIIiwiV0VTVEVSTiBTQUhBUkEiXSwKK1siWUUiLCJZRU1FTiJdLAorWyJaTSIsIlpBTUJJQSJdLAorWyJaVyIsIlpJTUJBQldFIl0sCispOworCitwYWNrYWdlIE5ldFNOTVA6OlRlcm07CisjIGdyYXRlZnVsbHkgdGFrZW4gZnJvbSBXYXluZSBUaG9tcHNvbidzIFRlcm06OkNvbXBsZXRlCisjIGlmIG5ld2VyIENPUkUgbW9kdWxlcyBjb3VsZCBiZSB1c2VkIHRoaXMgY291bGQgYmUgcmVtb3ZlZAorb3VyKCRjb21wbGV0ZSwgJGV4aXQsICRkb25lLCAka2lsbCwgJGVyYXNlMSwgJGVyYXNlMiwgJHR0eV9yYXdfbm9lY2hvLCAkdHR5X3Jlc3RvcmUsICRzdHR5LCAkdHR5X3NhZmVfcmVzdG9yZSk7CitvdXIoJHR0eV9zYXZlZF9zdGF0ZSkgPSAnJzsKK0NPTkZJRzogeworICAkZXhpdCAgID0gIlwwMDMiOworICAkZG9uZSAgID0gIlwwMDQiOworICAka2lsbCAgID0gIlwwMjUiOworICAkZXJhc2UxID0gICAiXDE3NyI7CisgICRlcmFzZTIgPSAgICJcMDEwIjsKKyAgZm9yZWFjaCBteSAkcyAocXcoL2Jpbi9zdHR5IC91c3IvYmluL3N0dHkpKSB7CisgICAgaWYgKC14ICRzKSB7CisgICAgICAkdHR5X3Jhd19ub2VjaG8gPSAiJHMgcmF3IC1lY2hvIjsKKyAgICAgICR0dHlfcmVzdG9yZSAgICA9ICIkcyAtcmF3IGVjaG8iOworICAgICAgJHR0eV9zYWZlX3Jlc3RvcmUgPSAkdHR5X3Jlc3RvcmU7CisgICAgICAkc3R0eSA9ICRzOworICAgICAgbGFzdDsKKyAgICB9CisgIH0KK30KKworc3ViIENvbXBsZXRlIHsKKyAgbXkoJHByb21wdCwgJGRmbHQsICRoZWxwLCAkbWF0Y2gsIEBjbXBfbHN0KTsKKyAgbXkgKCVoZWxwLCAkY21wLCAkdGVzdCwgJGwsIEBtYXRjaCk7CisgIG15ICgkcmV0dXJuLCAkciwgJGV4aXR0aW5nKSA9ICgiIiwgMCwgMCk7CisgIG15ICR0YWI7CisKKyAgJHByb21wdCA9IHNoaWZ0OworICAkZGZsdCA9IHNoaWZ0OworICAkaGVscCA9IHNoaWZ0OworICAkbWF0Y2ggPSBzaGlmdDsKKworICBpZiAocmVmICRfWzBdIGFuZCByZWYoJF9bMF1bMF0pKSB7CisgICAgQGNtcF9sc3QgPSBAeyRfWzBdfTsKKyAgfSBlbHNlIHsKKyAgICBAY21wX2xzdCA9IEBfOworICB9CisgIEBjbXBfbHN0ID0gbWFwIHtpZiAocmVmKCRfKSkgeyAkaGVscHskXy0+WzBdfT0kXy0+WzFdOyAkXy0+WzBdfSBlbHNlIHskXzt9fSBAY21wX2xzdDsKKworICAjIEF0dGVtcHQgdG8gc2F2ZSB0aGUgY3VycmVudCBzdHR5IHN0YXRlLCB0byBiZSByZXN0b3JlZCBsYXRlcgorICBpZiAoZGVmaW5lZCAkc3R0eSAmJiBkZWZpbmVkICR0dHlfc2F2ZWRfc3RhdGUgJiYgJHR0eV9zYXZlZF9zdGF0ZSBlcSAnJykgeworICAgICR0dHlfc2F2ZWRfc3RhdGUgPSBxeCgkc3R0eSAtZyAyPi9kZXYvbnVsbCk7CisgICAgaWYgKCQ/KSB7CisgICAgICAjIHN0dHkgLWcgbm90IHN1cHBvcnRlZAorICAgICAgJHR0eV9zYXZlZF9zdGF0ZSA9IHVuZGVmOworICAgIH0gZWxzZSB7CisgICAgICAkdHR5X3NhdmVkX3N0YXRlID1+IHMvXHMrJC8vZzsKKyAgICAgICR0dHlfcmVzdG9yZSA9IHFxKCRzdHR5ICIkdHR5X3NhdmVkX3N0YXRlIiAyPi9kZXYvbnVsbCk7CisgICAgfQorICB9CisgIHN5c3RlbSAkdHR5X3Jhd19ub2VjaG8gaWYgZGVmaW5lZCAkdHR5X3Jhd19ub2VjaG87CisgTE9PUDogeworICAgIGxvY2FsICRfOworICAgIHByaW50KCRwcm9tcHQsICRyZXR1cm4pOworICAgIHdoaWxlICgoJF8gPSBnZXRjKFNURElOKSkgbmUgIlxyIikgeworICAgIENBU0U6IHsKKwkjIChUQUIpIGF0dGVtcHQgY29tcGxldGlvbgorCSRfIGVxICJcdCIgJiYgZG8geworCSAgaWYgKCR0YWIpIHsKKwkgICAgcHJpbnQoam9pbigiXHJcbiIsICcnLCBtYXAge2V4aXN0cyAkaGVscHskX30gPyBzcHJpbnRmKCJcdCUtMTAuMTBzIC0gJXMiLCAkXywgJGhlbHB7JF99KSA6CisJCQkJCSAgIlx0JF8ifSBncmVwKC9eXFEkcmV0dXJuLywgQGNtcF9sc3QpKSwgIlxyXG4iKTsKKwkgICAgJHRhYi0tOworCSAgICByZWRvIExPT1A7CisJICB9CisJICBAbWF0Y2ggPSBncmVwKC9eXFEkcmV0dXJuLywgQGNtcF9sc3QpOworCSAgdW5sZXNzICgkI21hdGNoIDwgMCkgeworCSAgICAkbCA9IGxlbmd0aCgkdGVzdCA9IHNoaWZ0KEBtYXRjaCkpOworCSAgICBmb3JlYWNoICRjbXAgKEBtYXRjaCkgeworCSAgICAgIHVudGlsIChzdWJzdHIoJGNtcCwgMCwgJGwpIGVxIHN1YnN0cigkdGVzdCwgMCwgJGwpKSB7CisJCSRsLS07CisJICAgICAgfQorCSAgICB9CisJICAgIHByaW50KCJcYSIpOworCSAgICBwcmludCgkdGVzdCA9IHN1YnN0cigkdGVzdCwgJHIsICRsIC0gJHIpKTsKKwkgICAgJHIgPSBsZW5ndGgoJHJldHVybiAuPSAkdGVzdCk7CisJICB9CisJICAkdGFiKys7CisJICBsYXN0IENBU0U7CisJfTsKKworCSMgKF5DKSBleGl0CisJJF8gZXEgJGV4aXQgJiYgZG8geworCSAgcHJpbnQoIlxyXG5hYm9ydGluZyBhcHBsaWNhdGlvbi4uLlxyXG4iKTsKKwkgICRleGl0dGluZysrOworCSAgdW5kZWYgJHJldHVybjsKKwkgIGxhc3QgTE9PUDsKKwl9OworCisJIyAoXkQpIGRvbmUKKwkkXyBlcSAkZG9uZSAmJiBkbyB7CisJICB1bmRlZiAkcmV0dXJuOworCSAgbGFzdCBMT09QOworCX07CisKKwkjICg/KSBzaG93IGhlbHAgaWYgYXZhaWxhYmxlCisJJF8gZXEgJz8nICYmIGRvIHsKKwkgIHByaW50KCJcclxuJGhlbHBcclxuIik7CisJICBpZiAoZXhpc3RzICRoZWxweyRyZXR1cm59KSB7CisJICAgIHByaW50KCJcdCRyZXR1cm4gLSAkaGVscHskcmV0dXJufVxyXG4iKTsKKwkgIH0gZWxzZSB7CisJICAgIHByaW50KGpvaW4oIlxyXG4iLCBtYXAge2V4aXN0cyAkaGVscHskX30gPyAiXHQkXyAtICRoZWxweyRffSIgOgorCQkJCSAgICAgICJcdCRfIn0gZ3JlcCgvXlxRJHJldHVybi8sIEBjbXBfbHN0KSksICJcclxuIik7CisJICB9CisJICByZWRvIExPT1A7CisJfTsKKworCSMgKF5VKSBraWxsCisJJF8gZXEgJGtpbGwgJiYgZG8geworCSAgaWYgKCRyKSB7CisJICAgICRyCT0gMDsKKwkgICAgJHJldHVybgk9ICIiOworCSAgICBwcmludCgiXHJcbiIpOworCSAgICByZWRvIExPT1A7CisJICB9CisJICBsYXN0IENBU0U7CisJfTsKKworCSMgKERFTCkgfHwgKEJTKSBlcmFzZQorCSgkXyBlcSAkZXJhc2UxIHx8ICRfIGVxICRlcmFzZTIpICYmIGRvIHsKKwkgIGlmICgkcikgeworCSAgICBwcmludCgiXGIgXGIiKTsKKwkgICAgY2hvcCgkcmV0dXJuKTsKKwkgICAgJHItLTsKKwkgIH0KKwkgIGxhc3QgQ0FTRTsKKwl9OworCisJIyBwcmludGFibGUgY2hhcgorCW9yZCA+PSAzMiAmJiBkbyB7CisJICAkcmV0dXJuIC49ICRfOworCSAgJHIrKzsKKwkgIHByaW50OworCSAgbGFzdCBDQVNFOworCX07CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJHJldHVybikgeworICAgICAgaWYgKGxlbmd0aCgkcmV0dXJuKSA9PSAwIG9yICRyZXR1cm4gZXEgJGRmbHQpIHsKKwkkcmV0dXJuID0gJGRmbHQ7CisgICAgICB9IGVsc2lmICgkbWF0Y2ggPT0gJE5ldFNOTVA6OkNlcnQ6Ok1BVENIIGFuZCBzY2FsYXIoZ3JlcCB7L14kcmV0dXJuJC99IEBjbXBfbHN0KSAhPSAxIG9yCisJICAgICAgICRtYXRjaCA9PSAkTmV0U05NUDo6Q2VydDo6UFJFTUFUQ0ggYW5kIHNjYWxhcihncmVwIHskcmV0dXJuPX4vJF8vfSBAY21wX2xzdCkgIT0gMSkgeworCSRyCT0gMDsKKwkkcmV0dXJuCT0gIiI7CisJcHJpbnQoIlxyXG5DaG9vc2UgYSB2YWxpZCBvcHRpb24sIG9yIF5EIHRvIGV4aXRcclxuIik7CisJcmVkbyBMT09QOworICAgICAgfQorICAgIH0KKyAgfQorIERPTkU6CisgICMgc3lzdGVtICR0dHlfcmVzdG9yZSBpZiBkZWZpbmVkICR0dHlfcmVzdG9yZTsKKyAgaWYgKGRlZmluZWQgJHR0eV9zYXZlZF9zdGF0ZSAmJiBkZWZpbmVkICR0dHlfcmVzdG9yZSAmJiBkZWZpbmVkICR0dHlfc2FmZV9yZXN0b3JlKSB7CisgICAgc3lzdGVtICR0dHlfcmVzdG9yZTsKKyAgICBpZiAoJD8pIHsKKyAgICAgICMgdHR5X3Jlc3RvcmUgY2F1c2VkIGVycm9yCisgICAgICBzeXN0ZW0gJHR0eV9zYWZlX3Jlc3RvcmU7CisgICAgfQorICB9CisKKyAgZXhpdCgxKSBpZiAkZXhpdHRpbmc7CisgIHByaW50KCJcbiIpOworICByZXR1cm4gJHJldHVybjsKK30KKworcGFja2FnZSBOZXRTTk1QOjpDZXJ0OworCitvdXIgJFZFUlNJT04gICAgICA9ICcwLjIuOSc7CisKK291ciAkUFJPRyAgICAgICAgID0gOjpiYXNlbmFtZSgkMCk7CitvdXIgJERFQlVHICAgICAgICA9IDA7CitvdXIgJE9LICAgICAgICAgICA9IDA7CitvdXIgJEVSUiAgICAgICAgICA9IC0xOworCisjIHVzZXIgaW5wdXQgcGFyYW0KK291ciAkTUFUQ0ggICAgICAgID0gMTsKK291ciAkUFJFTUFUQ0ggICAgID0gMjsKKworIyBMb2FkIExXUCBpZiBwb3NzaWJsZSB0byBpbXBvcnQgY2VydCBmcm9tIFVSTAorZXZhbCgndXNlIExXUDo6VXNlckFnZW50OycpOworb3VyICRoYXZlVXNlckFnZW50ID0gKCRAID8gMCA6IDEpOworCisjIHJlcXVpcmVkIGV4ZWN1dGFibGVzCitvdXIgJE9QRU5TU0wgICAgID0gJEVOVntORVRfU05NUF9DUlRfT1BFTlNTTH0gIHx8ICdvcGVuc3NsJzsKK291ciAkQ0ZHVE9PTCAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9DRkdUT09MfSAgfHwgJ25ldC1zbm1wLWNvbmZpZyc7CisKKyMgZGVmYXVsdCBhcHAgY29uZmlnIGZpbGUKK291ciAkQ0ZHRklMRSAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9DRkdGSUxFfSAgfHwgJ25ldC1zbm1wLWNlcnQuY29uZic7CisKKyMgZGVmYXVsdCBPcGVuU1NMIGNvbmZpZyBmaWxlcworb3VyICRTU0xDRkdJTiAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1NTTENGR0lOfSB8fCAnb3BlbnNzbC5pbic7CitvdXIgJFNTTENGR09VVCAgID0gJEVOVntORVRfU05NUF9DUlRfU1NMQ0ZHSU59IHx8ICcub3BlbnNzbC5jb25mJzsKK291ciAkU1NMQ0ZHICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9TU0xDRkd9OworCisjIGRlZmF1bHQgY21kIGxvZ3MKK291ciAkT1VUTE9HICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9PVVRMT0d9ICAgfHwgJy5jbWQub3V0LmxvZyc7CitvdXIgJEVSUkxPRyAgICAgID0gJEVOVntORVRfU05NUF9DUlRfRVJSTE9HfSAgIHx8ICcuY21kLmVyci5sb2cnOworCisjIGRlZmF1bHQgY2VydCBkaXJzCitvdXIgJFRMU0RJUiAgICAgID0gJEVOVntORVRfU05NUF9DUlRfVExTRElSfSAgIHx8ICd0bHMnOworb3VyICRDUlRESVIgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0NSVERJUn0gICB8fCAnY2VydHMnOworb3VyICRORVdDUlRESVIgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX05FV0NSVERJUn18fCAnbmV3Y2VydHMnOworb3VyICRDQURJUiAgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0NBRElSfSAgICB8fCAnY2EtY2VydHMnOworb3VyICRQUklWRElSICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1BSSVZESVJ9ICB8fCAncHJpdmF0ZSc7CisKK291ciAkU0VSSUFMICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9TRVJJQUx9ICAgfHwgJy5zZXJpYWwnOworb3VyICRJTkRFWCAgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0lOREVYfSAgICB8fCAnLmluZGV4JzsKKworb3VyICRERUZDQURBWVMgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0RFRkNBREFZU30gfHwgMTgyNTsKK291ciAkREVGQ1JUREFZUyAgPSAkRU5We05FVF9TTk1QX0NSVF9ERUZDUlREQVlTfXx8IDM2NTsKKworb3VyIEBUTFNESVJTICAgICA9ICgkQ1JURElSLCAkTkVXQ1JURElSLCAkQ0FESVIsICRQUklWRElSKTsKKworb3VyIEBDUlRTVUZGSVhFUyA9IHF3KC5wZW0gLmNzciAuZGVyIC5jcnQpOworCitvdXIgQFg1MDlGTVRTID0gcXcodGV4dCBtb2R1bHVzIHNlcmlhbCBzdWJqZWN0X2hhc2ggaXNzdWVyX2hhc2ggaGFzaCBzdWJqZWN0CisJCSAgICBwdXJwb3NlIGlzc3VlciBzdGFydGRhdGUgZW5kZGF0ZSBkYXRlcyBmaW5nZXJwcmludCBDKTsKKworc3ViIGRwcmludCB7CisgIG15ICRzdHIgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGRsZXZlbCA9IHNoaWZ0IHx8IDE7CisgIG15ICRmbGFnID0gKGRlZmluZWQgJG9wdHMgPyBpbnQoJG9wdHMtPnsnZGVidWcnfSA+PSAkZGxldmVsKSA6IDEpOworICBteSAoJHBrZywgJGZpbGUsICRsaW5lLCAkc3ViKSA9IGNhbGxlcigxKTsKKyAgbXkgKCRwa2cwLCAkZmlsZTAsICRsaW5lMCkgPSBjYWxsZXIoMCk7CisgIHByaW50KCIke3N1Yn0oKTokbGluZTA6ICRzdHIiKSBpZiAkZmxhZzsKK30KKworc3ViIGR3YXJuIHsKKyAgbXkgJHN0ciA9IHNoaWZ0OworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZGxldmVsID0gc2hpZnQgfHwgMTsKKyAgbXkgJGZsYWcgPSAoZGVmaW5lZCAkb3B0cyA/ICRvcHRzLT57J2RlYnVnJ30gPj0gJGRsZXZlbCA6IDEpOworICBteSAoJHBrZywgJGZpbGUsICRsaW5lLCAkc3ViKSA9IGNhbGxlcigxKTsKKyAgbXkgKCRwa2cwLCAkZmlsZTAsICRsaW5lMCkgPSBjYWxsZXIoMCk7CisgIHdhcm4oIiR7c3VifSgpOiRsaW5lMDogJHN0ciIpIGlmICRmbGFnOworfQorCitzdWIgdnByaW50IHsKKyAgbXkgJHN0ciA9IHNoaWZ0OworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZmxhZyA9IChkZWZpbmVkICRvcHRzID8gJG9wdHMtPnsndmVyYm9zZSd9IDogMSk7CisgIG15ICRkZWJ1ZyA9IChkZWZpbmVkICRvcHRzID8gJG9wdHMtPnsnZGVidWcnfSA6IDEpOworICBteSAoJHBrZywgJGZpbGUsICRsaW5lLCAkc3ViKSA9IGNhbGxlcigxKTsKKyAgbXkgKCRwa2cwLCAkZmlsZTAsICRsaW5lMCkgPSBjYWxsZXIoMCk7CisgICRzdHIgPSAoJGRlYnVnID8gIiR7c3VifSgpOiRsaW5lMDogJHN0ciIgOiAiJHN0ciIpOworICBwcmludCgiJHN0ciIpIGlmICRmbGFnOworfQorCitzdWIgdndhcm4geworICBteSAkc3RyID0gc2hpZnQ7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRmbGFnID0gKGRlZmluZWQgJG9wdHMgPyAkb3B0cy0+eyd2ZXJib3NlJ30gOiAxKTsKKyAgbXkgKCRwa2csICRmaWxlLCAkbGluZSwgJHN1YikgPSBjYWxsZXIoMSk7CisgIG15ICgkcGtnMCwgJGZpbGUwLCAkbGluZTApID0gY2FsbGVyKDApOworICB3YXJuKCIke3N1Yn0oKTokbGluZTA6ICRzdHIiKSBpZiAkZmxhZzsKK30KKworc3ViIHJzeXN0ZW0geworICBteSAkY21kID0gc2hpZnQ7CisgIG15ICRmbGFnID0gc2hpZnQ7CisKKyAgIyBpZiBub3QgcnVubmluZyBhcyByb290IHRyeSB0byB1c2Ugc3VkbworICBpZiAoJD4pIHsKKyAgICAkY21kID0gInN1ZG8gJGZsYWcgJGNtZCI7CisgIH0gZWxzZSB7CisgICAgaWYgKCRmbGFnID1+IC8tYi8pIHsKKyAgICAgICRjbWQgPSAiJGNtZCBcJiI7CisgICAgfQorICB9CisgIGRpZSgiY21kIGZhaWxlZCgkISk6ICRjbWRcbiIpIGlmIHN5c3RlbSgiJGNtZCIpOworfQorCitzdWIgdXN5c3RlbSB7CisgIG15ICRjbWQgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJHJldDsKKworICB1bmxpbmsgJE5ldFNOTVA6OkNlcnQ6Ok9VVExPRyBpZiAtZSAkTmV0U05NUDo6Q2VydDo6T1VUTE9HOworICB1bmxpbmsgJE5ldFNOTVA6OkNlcnQ6OkVSUkxPRyBpZiAtZSAkTmV0U05NUDo6Q2VydDo6RVJSTE9HOworCisgICRyZXQgPSBzeXN0ZW0oIiRjbWQiKTsKKworICBpZiAoJHJldCkgeworICAgIGlmICgkb3B0cy0+eyd2ZXJib3NlJ30pIHsKKyAgICAgIHN5c3RlbSgiY2F0ICROZXRTTk1QOjpDZXJ0OjpPVVRMT0ciKSBpZiAtciAkTmV0U05NUDo6Q2VydDo6T1VUTE9HOworICAgICAgc3lzdGVtKCJjYXQgJE5ldFNOTVA6OkNlcnQ6OkVSUkxPRyIpIGlmIC1yICROZXRTTk1QOjpDZXJ0OjpFUlJMT0c7CisgICAgfQorICAgIGRpZSgiY21kIGZhaWxlZCgkISk6ICRjbWRcbiIpOworICB9Cit9CisKK3N1YiBob21lX2RpciB7CisgIG15ICRjZGlyID0gOjpnZXRjd2QoKTsKKworICBjaGRpcigifiIpOworICBteSAkZGlyID0gOjpnZXRjd2QoKTsKKyAgY2hkaXIoJGNkaXIpOworCisgIHJldHVybiAkZGlyOworfQorCitzdWIgZmluZF9iaW5fZGlyIHsKKyAgIyBUaGlzIGNvZGUgZmluZHMgdGhlIHBhdGggdG8gdGhlIGN1cnJlbnRseSBpbnZva2VkIHByb2dyYW0gYW5kCisgIG15ICRkaXI7CisKKyAgJDAgPX4gbSVeKChbXi9dKikoLiopLykoW14vXSspJCU7CisgIGlmICgkMSkgeworICAgIGlmICgkMikgeworICAgICAgIyBJbnZva2VkIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4gIENEIHRoZXJlIGFuZCB1c2UgcHdkLgorICAgICAgJGRpciA9IGBjZCAkMSAmJiBwd2RgOworICAgICAgY2hvbXAgJGRpcjsKKyAgICB9IGVsc2UgeworICAgICAgIyBJbnZva2VkIHVzaW5nIGFuIGFic29sdXRlIHBhdGg7IHRoYXQncyBpdCEKKyAgICAgICRkaXIgPSAkMzsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgIyBObyBwYXRoLiAgTG9vayBpbiBQQVRIIGZvciB0aGUgZmlyc3QgaW5zdGFuY2UuCisgICAgZm9yZWFjaCBteSAkcCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KSB7CisgICAgICAkcCB8fD0gJy4nOworICAgICAgLXggIiRwLyQ0IiBvciBuZXh0OworICAgICAgJGRpciA9ICRwOworICAgIH0KKyAgfQorICAkZGlyIG9yIGRpZSAiQ2Fubm90IGxvY2F0ZSBwcm9ncmFtICckMCchIjsKK30KKworc3ViIGZxX3JlbF9wYXRoIHsKKyAgbXkgJHBhdGggPSBzaGlmdDsKKyAgbXkgJGN3ZCA9IDo6Z2V0Y3dkKCk7CisgIG15ICRyZGlyID0gc2hpZnQgfHwgJGN3ZDsKKworICBjaGRpcigkcmRpcikgb3IgZGllKCJjYW4ndCBjaGFuZ2UgZGlyZWN0b3J5OiAkcmRpciIpOworICAjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aAorICBpZiAoJHBhdGggIX4gbXxeL3wpIHsKKyAgICBteSAkcHdkID0gYHB3ZGA7IGNob21wICRwd2Q7CisgICAgJHBhdGggPSAiJHB3ZC8kcGF0aCI7CisgICAgJHBhdGggPSA6OnJlYWxwYXRoKCRwYXRoKSBpZiAtZSAkcGF0aDsKKyAgfQorICBjaGRpcigkY3dkKSBvciBkaWUoImNhbid0IGNoYW5nZSBkaXJlY3Rvcnk6ICRjd2QiKTsKKworICByZXR1cm4gJHBhdGg7Cit9CisKK3N1YiBkaXJfZW1wdHkKKyAgeworICAgIG15ICRwYXRoID0gc2hpZnQ7CisgICAgb3BlbmRpcihESVIsICRwYXRoKTsKKyAgICBmb3JlYWNoIChyZWFkZGlyKERJUikpIHsKKyAgICAgIG5leHQgaWYgL15cLlwuPyQvOworICAgICAgY2xvc2VkaXIoRElSKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjbG9zZWRpcihESVIpOworICAgIHJldHVybiAxOworICB9CisKK3N1YiBtYWtlX2RpcnMgeworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZGlyID0gc2hpZnQ7CisgIG15ICRtb2RlID0gc2hpZnQ7CisgIG15IEBkaXJzID0gQF87CisKKyAgbXkgJHdkID0gOjpnZXRjd2QoKTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIm1ha2UgZGlycyBbJGRpcjpAZGlyc10gZnJvbSAkd2RcbiIsICRvcHRzKTsKKworICA6Om1rcGF0aCgkZGlyLCAkb3B0cy0+eydkZWJ1Zyd9LCAkbW9kZSkgb3IgZGllKCJlcnJvciAtIGNhbid0IG1ha2UgJGRpciIpCisgICAgaWYgZGVmaW5lZCAkZGlyIGFuZCBub3QgLWQgJGRpcjsKKworICBmb3JlYWNoIG15ICRzdWJkaXIgKEBkaXJzKSB7CisgICAgbXkgJGQgPSAiJHN1YmRpciI7CisgICAgJGQgPSAiJGRpci8kZCIgaWYgZGVmaW5lZCAkZGlyOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgibWFraW5nIGRpcmVjdG9yeTogJGRcbiIsICRvcHRzKSB1bmxlc3MgLWQgJGQ7CisgICAgbWtkaXIoJGQsICRtb2RlKSBvciBkaWUoImVycm9yIC0gY2FuJ3QgbWFrZSAkZCIpIHVubGVzcyAtZCAkZDsKKyAgfQorfQorCitzdWIgaXNfdXJsIHsKKyAgbXkgJHVybCA9IHNoaWZ0OworCisgIHJldHVybiAkdXJsID1+IC9eKD8jUHJvdG9jb2wpKD86KD86aHR8Zil0cCg/OnM/KVw6XC9cL3x+XC98XC8pPyg/I1VzZXJuYW1lOlBhc3N3b3JkKSg/Olx3KzpcdytAKT8oPyNTdWJkb21haW5zKSg/Oig/OlstXHddK1wuKSsoPyNUb3BMZXZlbCBEb21haW5zKSg/OmNvbXxvcmd8bmV0fGdvdnxtaWx8Yml6fGluZm98bW9iaXxuYW1lfGFlcm98am9ic3xtdXNldW18dHJhdmVsfFthLXpdezJ9KSkoPyNQb3J0KSg/OjpbXGRdezEsNX0pPyg/I0RpcmVjdG9yaWVzKSg/Oig/Oig/OlwvKD86Wy1cd34hJCt8Liw9XXwlW2EtZlxkXXsyfSkrKSt8XC8pK3xcP3wjKT8oPyNRdWVyeSkoPzooPzpcPyg/OlstXHd+ISQrfC4sKjpdfCVbYS1mXGR7Mn1dKSs9Pyg/OlstXHd+ISQrfC4sKjo9XXwlW2EtZlxkXXsyfSkqKSg/OiYoPzpbLVx3fiEkK3wuLCo6XXwlW2EtZlxkezJ9XSkrPT8oPzpbLVx3fiEkK3wuLCo6PV18JVthLWZcZF17Mn0pKikqKSooPyNBbmNob3IpKD86Iyg/OlstXHd+ISQrfC4sKjo9XXwlW2EtZlxkXXsyfSkqKT8kLzsKK30KKworc3ViIGluX3NldCB7CisgIG15ICRlbGVtID0gc2hpZnQ7CisgIG15ICRzZXQgPSBzaGlmdDsKKyAgZm9yIG15ICRlIChldmFsKCRzZXQpKSB7CisgICAgcmV0dXJuIDEgaWYgJGUgPT0gJGVsZW07CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N1YiBpbl9hcnIgeworICBteSAkZWxlbSA9IHNoaWZ0OworICBteSAkYXJyID0gc2hpZnQ7CisgIGZvciBteSAkZSAoQHskYXJyfSkgeworICAgIHJldHVybiAxIGlmICRlIGVxICRlbGVtOworICB9CisgIHJldHVybiAwOworfQorCitzdWIgbWFwX2Jvb2wgeworICBteSAkdmFsID0gc2hpZnQ7CisKKyAgcmV0dXJuIDEgaWYgJHZhbCA9fiAvXnRydWUkL2k7CisgIHJldHVybiAwIGlmICR2YWwgPX4gL15mYWxzZSQvaTsKKyAgcmV0dXJuICR2YWw7Cit9CisKK3N1YiB2ZXJzaW9uIHsKKyAgbXkgJHJldCA9IChAXyA/IHNoaWZ0IDogMSk7CisgIHByaW50ICIkTmV0U05NUDo6Q2VydDo6UFJPRzogJE5ldFNOTVA6OkNlcnQ6OlZFUlNJT05cbiI7CisgIGV4aXQoJHJldCk7Cit9CisKK3N1YiBHZXRPcHRzRnJvbUFycmF5IHsKKyAgbXkgJGFyZ3MgPSBzaGlmdDsKKyAgbG9jYWwgKkFSR1Y7CisgIEBBUkdWID0gQCRhcmdzOworICBteSAkcmV0ID0gOjpHZXRPcHRpb25zKEBfKTsKKyAgQCRhcmdzID0gQEFSR1Y7ICMgR2V0T3B0aW9ucyBzdHJpcHMgb3V0IHRoZSBvbmVzIGl0IGhhbmRsZXMgYW5kIGxlYXZlcyBvdGhlcnMKKyAgcmV0dXJuICRyZXQ7Cit9CitzdWIgcHVsbF9jbWQgeworICBteSAkYXJncyA9IHNoaWZ0OworICBteSAkY21kOworCisgIGZvcmVhY2ggKEB7JGFyZ3N9KSB7CisgICAgaWYgKC9eKGdlbmNlP3J0fGdlbmNhfGdlbmNzcnxzaWduY3NyfHNob3djYXM/fHNob3djZT9ydHM/fGltcG9ydCkkLykgeworICAgICAgJGNtZCA9ICQxOworICAgIH0KKyAgfQorCisgIEB7JGFyZ3N9ID0gZ3JlcCB7IS9eJGNtZCQvfSBAeyRhcmdzfTsKKworICByZXR1cm4gJGNtZDsKK30KKworCitzdWIgdXNhZ2UgeworICBteSAkcmV0ID0gKEBfID8gc2hpZnQgOiAxKTsKKyAgbXkgJGFyZyA9IHNoaWZ0OworCisgIHByaW50ICJDb21tYW5kIG5vdCBpbXBsbWVuZXRlZCB5ZXQ6ICRhcmdcbiIgaWYgJHJldCA9PSAyOworICBwcmludCAiVW5rbm93bjogJGFyZ1xuIiBpZiAkcmV0ID09IDM7CisgIHByaW50ICJcbiAgIE5BTUU6XG4iOworICBwcmludCAiICAgICAkTmV0U05NUDo6Q2VydDo6UFJPRzogWyROZXRTTk1QOjpDZXJ0OjpWRVJTSU9OXSAtICI7CisgIHByaW50ICJOZXQtU05NUCBDZXJ0aWZpY2F0ZSBNYW5hZ2VtZW50IFRvb2xcbiI7CisgIHByaW50ICJcbiAgIERFU0NSSVBUSU9OOlxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBjcmVhdGVzLCBzaWducywgaW5zdGFsbHMgYW5kIGRpc3BsYXlzIFguNTA5XG4iOworICBwcmludCAiICAgICBjZXJ0aWZpY2F0ZXMgdXNlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIE5ldC1TTk1QLyhEKVRMUy5cbiI7CisgIHByaW50ICJcbiAgIFNZTk9QU0lTOlxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBbLS1oZWxwfC0/XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBbLS12ZXJzaW9ufC1WXVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jYSAgICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0td2l0aC1jYSA8Y2E+XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jZXJ0ICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0td2l0aC1jYSA8Y2E+XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jc3IgICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0tZnJvbS1jcnQgPGNydD5dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNpZ25jc3IgIFs8ZmxhZ3M+XSBbLS1pbnN0YWxsXSAtLWNzciA8Y3NyPiAtLXdpdGgtY2EgPGNhPlxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaG93Y2EgICBbPGZsYWdzPl0gWzxmb3JtYXQtb3B0cz5dIFs8ZmlsZT58PHNlYXJjaC10YWc+XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaG93Y2VydCBbPGZsYWdzPl0gWzxmb3JtYXQtb3B0cz5dIFs8ZmlsZT58PHNlYXJjaC10YWc+XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBpbXBvcnQgICBbPGZsYWdzPl0gPGZpbGV8dXJsPiBbPGtleT5dXG4iOworICBwcmludCAiXG4gICBDT01NQU5EUzpcbiI7CisgIHByaW50ICIgICAgIGdlbmNhICAgIC0tIGdlbmVyYXRlIGEgc2lnbmVkIENBIGNlcnRpZmljYXRlIHN1aXRhYmxlIGZvciBzaWduaW5nIG90aGVyXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuIGRlZmF1bHQ6IHNlbGYtc2lnbmVkIHVubGVzcyAtLXdpdGgtY2EgPGNhPiBzdXBwbGllZFxuXG4iOworICBwcmludCAiICAgICBnZW5jZXJ0ICAtLSBnZW5lcmF0ZSBhIHNpZ25lZCBjZXJ0aWZpY2F0ZSBzdWl0YWJsZSBmb3IgaWRlbnRpZmljYXRpb24sIG9yXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLiBkZWZhdWx0OiBzZWxmLXNpZ25lZCB1bmxlc3MgLS13aXRoLWNhIDxjYT4gc3VwcGxpZWRcblxuIjsKKyAgcHJpbnQgIiAgICAgZ2VuY3NyICAgLS0gZ2VuZXJhdGUgYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3QuIHdpbGwgY3JlYXRlIGEgbmV3XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBrZXkgYW5kIGNlcnRpZmljYXRlIHVubGVzcyAtLWZyb20tY3J0IDxjcnQ+IHN1cHBsaWVkXG5cbiI7CisgIHByaW50ICIgICAgIHNpZ25jc3IgIC0tIHNpZ24gYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3Qgc3BlY2lmaWVkIGJ5IC0tY3NyIDxjc3I+XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQgYnkgLS13aXRoLWNhIDxjYT5cbiI7CisgIHByaW50ICIgICAgIGltcG9ydCAgIC0tIGltcG9ydCBhbiBpZGVudGl0eSBvciBDQSBjZXJ0aWZpY2F0ZSwgb3B0aW9uYWxseSBpbXBvcnQgPGtleT5cbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIGlmIGFuIFVSTCBpcyBwYXNzZWQsIHdpbGwgYXR0ZW1wdCB0byBpbXBvcnQgY2VydGlmaWNhdGUgZnJvbSBzaXRlXG4iOworICBwcmludCAiICAgICBzaG93Y2EsXG4iOworICBwcmludCAiICAgICBzaG93Y2VydCAtLSBzaG93IENBIG9yIGlkZW50aXR5IGNlcnRpZmljYXRlKHMpLiBtYXkgcGFzcyBmdWxseSBxdWFsaWZpZWRcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUsIG9yIGEgc2VhcmNoLXRhZyB3aGljaCBwcmVmaXggbWF0Y2hlc1xuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIENBIG9yIGlkZW50aXR5IGNlcnRpZmljYXRlIGZpbGUgbmFtZShzKVxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgc2VlIEZPUk1BVCBPUFRJT05TIHRvIHNwZWNpZnkgb3V0cHV0IGZvcm1hdFxuXG4iOworICBwcmludCAiXG4gICBGTEFHUzpcbiI7CisgIHByaW50ICIgICAgIC0/LCAtLWhlbHAgICAgICAgICAgICAtLSBzaG93IHRoaXMgdGV4dCBhbmQgZXhpdFxuIjsKKyAgcHJpbnQgIiAgICAgLVYsIC0tdmVyc2lvbiAgICAgICAgIC0tIHNob3cgdmVyc2lvbiBzdHJpbmcgYW5kIGV4aXRcbiI7CisgIHByaW50ICIgICAgIC1ELCAtLWRlYnVnICAgICAgICAgICAtLSByYWlzZSBkZWJ1ZyBsZXZlbCAoLUQgLUQgZm9yIGhpZ2hlciBsZXZlbClcbiI7CisgIHByaW50ICIgICAgIC1GLCAtLWZvcmNlICAgICAgICAgICAtLSBmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3Rpbmcgb3V0cHV0IGZpbGVzXG4iOworICBwcmludCAiICAgICAtSSwgLS1ub2ludGVyYWN0aXZlICAgLS0gbm9uLWludGVyYWN0aXZlIHJ1biAoZGVmYXVsdCBpbnRlcmFjdGl2ZSlcbiI7CisgIHByaW50ICIgICAgIC1RLCAtLW5vdmVyYm9zZSAgICAgICAtLSBub24tdmVyYm9zZSBvdXRwdXQgKGRlZmF1bHQgdmVyYm9zZSlcbiI7CisgIHByaW50ICIgICAgIC1DLCAtLWNmZ2RpciAgIDxkaXI+ICAtLSBjb25maWd1cmF0aW9uIGRpciAoc2VlIG1hbig1KSBzbm1wX2NvbmZpZylcbiI7CisgIHByaW50ICIgICAgIC1ULCAtLXRsc2RpciAgIDxkaXI+ICAtLSByb290IGZvciBjZXJ0IHN0b3JhZ2UgKGRlZmF1bHQgPGNmZ2Rpcj4vdGxzKVxuIjsKKyAgcHJpbnQgIiAgICAgLWYsIC0tY2ZnZmlsZSAgPGZpbGU+IC0tIGNvbmZpZyAoZGVmYXVsdCA8Y2ZnZGlyPi9uZXQtc25tcC1jZXJ0LmNvbmYpXG4iOworICBwcmludCAiICAgICAtaSwgLS1pZGVudGl0eSA8aWQ+ICAgLS0gaWRlbnRpdHkgdG8gdXNlIGZyb20gY29uZmlnXG4iOworICBwcmludCAiICAgICAtdCwgLS10YWcgICAgICA8dGFnPiAgLS0gYXBwbGljYXRpb24gdGFnIChkZWZhdWx0ICdzbm1wJylcbiI7CisgIHByaW50ICIgICAgIC0tPGNmZy1wYXJhbT5bPTx2YWw+XSAtLSBhZGRpdGlvbmFsIGNvbmZpZyBwYXJhbXNcbiI7ICAKKyAgcHJpbnQgIlxuICAgQ0VSVElGSUNBVEUgT1BUSU9OUyAoPGNlcnQtb3B0cz4pOlxuIjsKKyAgcHJpbnQgIiAgICAgLWEsIC0td2l0aC1jYSA8Y2E+ICAgIC0tIENBIGNlcnRpZmljYXRlIHVzZWQgdG8gc2lnbiByZXF1ZXN0XG4iOworICBwcmludCAiICAgICAtQSwgLS1jYSA8Y2E+ICAgICAgICAgLS0gZXhwbGljaXQgb3V0cHV0IENBIGNlcnRpZmljYXRlXG4iOworICBwcmludCAiICAgICAtciwgLS1jc3IgPGNzcj4gICAgICAgLS0gY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0XG4iOworICBwcmludCAiICAgICAteCwgLS1mcm9tLWNydCA8Y3J0PiAgLS0gaW5wdXQgY2VydGlmaWNhdGUgZm9yIGN1cnJlbnQgb3BlcmF0aW9uXG4iOworICBwcmludCAiICAgICAtWCwgLS1jcnQgPGNydD4gICAgICAgLS0gZXhwbGljaXQgb3V0cHV0IGNlcnRpZmljYXRlXG4iOworICBwcmludCAiICAgICAteSwgLS1pbnN0YWxsICAgICAgICAgLS0gaW5zdGFsbCByZXN1bHQgaW4gbG9jYWwgcmVwb3NpdG9yeVxuIjsKKyAgcHJpbnQgIlxuICAgRElTVElOR1VJU0hFRCBOQU1FIE9QVElPTlMgKDxkbi1vcHRzPik6XG4iOworICBwcmludCAiICAgICAtZSwgLS1lbWFpbCA8ZW1haWw+ICAgICAgIC0tIGVtYWlsIG5hbWVcbiI7CisgIHByaW50ICIgICAgIC1oLCAtLWhvc3QgPGhvc3Q+ICAgICAgICAgLS0gRE5TIGhvc3QgbmFtZSwgb3IgSVAgYWRkcmVzc1xuIjsKKyAgcHJpbnQgIiAgICAgLWQsIC0tZGF5cyA8ZGF5cz4gICAgICAgICAtLSBudW1iZXIgb2YgZGF5cyBjZXJ0aWZpY2F0ZSBpcyB2YWxpZFxuIjsKKyAgcHJpbnQgIiAgICAgLW4sIC0tY24gPGNuPiAgICAgICAgICAgICAtLSBjb21tb24gbmFtZSAoQ04pXG4iOworICBwcmludCAiICAgICAtbywgLS1vcmcgPG9yZz4gICAgICAgICAgIC0tIG9yZ2FuaXp0aW9uIG5hbWVcbiI7CisgIHByaW50ICIgICAgIC11LCAtLXVuaXQgPHVuaXQ+ICAgICAgICAgLS0gb3JnYW5penRpb24gdW5pdCBuYW1lXG4iOworICBwcmludCAiICAgICAtYywgLS1jb3VudHJ5IDxjb3VudHJ5PiAgIC0tIGNvdW50cnkgY29kZSAoZS5nLiwgVVMpXG4iOworICBwcmludCAiICAgICAtcCwgLS1wcm92aW5jZSA8cHJvdmluY2U+IC0tIHByb3ZpbmNlIG5hbWUgKHN5bm9teW5vdXMgdy8gc3RhdGUpXG4iOworICBwcmludCAiICAgICAtcCwgLS1zdGF0ZSA8c3RhdGU+ICAgICAgIC0tIHN0YXRlIG5hbWUgKHN5bm9teW5vdXMgdy8gcHJvdmluY2UpXG4iOworICBwcmludCAiICAgICAtbCwgLS1sb2NhbGl0eSA8bG9jYWxpdHk+IC0tIGxvY2FsaXR5IG5hbWUgKGUuZywgdG93bilcbiI7CisgIHByaW50ICIgICAgIC1zLCAtLXNhbiA8c2FuPiAgICAgICAgICAgLS0gc3ViamVjdEFsdE5hbWUsIHJlcGVhdCBmb3IgZWFjaCA8c2FuPlxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSA8c2FuPiB2YWx1ZSBmb3JtYXQgKDxGTVQ+OjxWQUw+KTpcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBkaXJOYW1lOi91c3Ivc2hhcmUvc25tcC90bHNcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBETlM6bmV0LXNubXAub3JnXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgZW1haWw6YWRtaW5cQG5ldC1zbm1wLm9yZ1xuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIElQOjE5Mi4xNjguMS4xXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgUklEOjEuMS4zLjZcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBVUkk6aHR0cDovL25ldC1zbm1wLm9yZ1xuIjsKKyAgcHJpbnQgIlxuICAgRk9STUFUIE9QVElPTlMgKDxmb3JtYXQtb3B0cz4pOiBcbiI7CisgIHByaW50ICIgICAgIC0tYnJpZWYgICAgICAgIC0tIG1pbmltaXplZCBvdXRwdXQgKHZhbHVlcyBvbmx5IHdoZXJlIGFwcGxpY2FibGUpXG4iOworICBwcmludCAiICAgICAtLXRleHQgICAgICAgICAtLSBmdWxsIHRleHQgZGVzY3JpcHRpb25cbiI7CisgIHByaW50ICIgICAgIC0tc3ViamVjdCAgICAgIC0tIHN1YmplY3QgZGVzY3JpcHRpb25cbiI7CisgIHByaW50ICIgICAgIC0tc3ViamVjdF9oYXNoIC0tIGhhc2ggb2Ygc3ViamVjdCBmb3IgaW5kZXhpbmdcbiI7CisgIHByaW50ICIgICAgIC0taXNzdWVyICAgICAgIC0tIGlzc3VlciBkZXNjcmlwdGlvblxuIjsKKyAgcHJpbnQgIiAgICAgLS1pc3N1ZXJfaGFzaCAgLS0gaGFzaCBvZiBpc3N1ZXIgZm9yIGluZGV4aW5nXG4iOworICBwcmludCAiICAgICAtLWZpbmdlcnByaW50ICAtLSBTSEExIGRpZ2VzdCBvZiBERVJcbiI7CisgIHByaW50ICIgICAgIC0tc2VyaWFsICAgICAgIC0tIHNlcmlhbCBudW1iZXJcbiI7CisgIHByaW50ICIgICAgIC0tbW9kdWx1cyAgICAgIC0tIG1vZHVsdXMgb2YgdGhlIHB1YmxpYyBrZXlcbiI7CisgIHByaW50ICIgICAgIC0tZGF0ZXMgICAgICAgIC0tIHN0YXJ0IGFuZCBlbmQgZGF0ZXNcbiI7CisgIHByaW50ICIgICAgIC0tcHVycG9zZSAgICAgIC0tIGRpc3BsYXlzIGFsbG93ZWQgdXNlc1xuIjsKKyAgcHJpbnQgIiAgICAgLS1DICAgICAgICAgICAgLS0gQyBjb2RlIGRlc2NyaXB0aW9uXG4iOworICBwcmludCAiXG4gICBFWEFNUExFUzogXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnIC0tZGF5cyAxMDAwXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNhIC1mIC5zbm1wL25ldC1zbm1wLWNlcnQuY29uZiAtaSBub2NhZG0gLUlcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtdCBzbm1wZCAtLWNuIGhvc3QubmV0LXNubXAub3JnXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNzciAtdCBzbm1wYXBwXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNpZ25jc3IgLS1jc3Igc25tcGFwcCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNob3djZXJ0cyAtLXN1YmplY3QgLS1pc3N1ZXIgLS1kYXRlcyBzbm1wYXBwXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNob3djYXMgLS1maW5nZXJwcmludCBjYS1uZXQtc25tcC5vcmcgLS1icmllZlxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBpbXBvcnQgY2EtdGhpcmQtcGFydHkuY3J0XG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGltcG9ydCBzaWduZWQtcmVxdWVzdC5jcnQgc2lnbmVkLXJlcXVlc3Qua2V5XG5cbiI7CisKKyAgZXhpdCAkcmV0OworfQorCitzdWIgc2V0X2RlZmF1bHQgeworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkY29uZmlnID0gc2hpZnQ7CisgIG15ICRmaWVsZCA9IHNoaWZ0OworICBteSAkdmFsID0gc2hpZnQ7CisKKyAgaWYgKG5vdCBkZWZpbmVkICRvcHRzLT57JGZpZWxkfSkgeworICAgIG15ICRjdmFsID0gJGNvbmZpZy0+aW5oZXJpdCgkZmllbGQpOworICAgICRvcHRzLT57JGZpZWxkfSA9IChkZWZpbmVkICRjdmFsID8gJGN2YWwgOiAkdmFsKTsKKyAgfQorfQorCitzdWIgY2ZnX3BhdGggeworICBteSAkcGF0aDsKKworICAkcGF0aCA9IGAkTmV0U05NUDo6Q2VydDo6Q0ZHVE9PTCAtLXNubXBjb25mcGF0aGA7CisgIGNob21wICRwYXRoOworICByZXR1cm4gKHdhbnRhcnJheSA/IHNwbGl0KCc6JywgJHBhdGgpIDogJHBhdGgpOworfQorCitzdWIgZmluZF9jZmdmaWxlIHsKKyAgbXkgJGRpciA9IHNoaWZ0OworICBteSAkZmlsZSA9IHNoaWZ0OworCisgIGlmIChkZWZpbmVkICRkaXIgYW5kIC1kICRkaXIgYW5kIAorICAgICAgZGVmaW5lZCAkZmlsZSBhbmQgJGZpbGUgIX4gL15bXC5cL10vKSB7CisgICAgcmV0dXJuIGZxX3JlbF9wYXRoKCIkZGlyLyRmaWxlIikgaWYgLWYgIiRkaXIvJGZpbGUiOworICB9CisKKyAgaWYgKGRlZmluZWQgJGZpbGUpIHsKKyAgICBpZiAoLWYgJGZpbGUpIHsKKyAgICAgIHJldHVybiBmcV9yZWxfcGF0aCgkZmlsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAkZmlsZTsgIyBmaWxlIGlzIG5vdCBmb3VuZCwgY29tcGxhaW4gbGF0ZXIKKyAgICB9CisgIH0KKworICBteSBAcGF0aCA9IGNmZ19wYXRoKCk7CisgIHVuc2hpZnQoQHBhdGgsICRkaXIpIGlmIGRlZmluZWQgJGRpcjsKKyAgd2hpbGUgKEBwYXRoKSB7CisgICAgbXkgJHAgPSBwb3AoQHBhdGgpOworICAgIG5leHQgaWYgJHAgZXEgJy92YXIvbGliL3NubXAnOworICAgIGlmICgtciAiJHAvJE5ldFNOTVA6OkNlcnQ6OkNGR0ZJTEUiKSB7CisgICAgICByZXR1cm4gZnFfcmVsX3BhdGgoIiRwLyROZXRTTk1QOjpDZXJ0OjpDRkdGSUxFIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuICRmaWxlOworfQorCitzdWIgZmluZF9jZmdkaXIgeworICBteSAkZGlyID0gc2hpZnQ7CisgIG15ICRmaWxlID0gc2hpZnQ7CisKKyAgaWYgKGRlZmluZWQgJGRpcikgeworICAgICRkaXIgPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkZGlyKTsKKyAgICByZXR1cm4gJGRpcjsKKyAgfQorCisgIGlmIChkZWZpbmVkICRmaWxlIGFuZCAtZiAkZmlsZSkgeworICAgICRkaXIgPSA6OmRpcm5hbWUoJGZpbGUpOworICAgIHJldHVybiBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkZGlyKTsKKyAgfSBlbHNlIHsKKyAgICBteSBAcGF0aCA9IGNmZ19wYXRoKCk7CisgICAgIyBzZWFyY2ggZmlyc3QgZm9yIHdyaXRlYWJsZSB0bHMgZGlyCisgICAgIyBmb3Igcm9vdCBzZWFyY2ggdG9wIGRvd24sIGZvciB1c2VyIGJvdHRvbSB1cAorICAgIHdoaWxlIChAcGF0aCkgeworICAgICAgJGRpciA9ICgkPiA/IHBvcChAcGF0aCk6IHNoaWZ0KEBwYXRoKSk7CisgICAgICBuZXh0IGlmICRkaXIgZXEgJy92YXIvbGliL3NubXAnOworICAgICAgcmV0dXJuICRkaXIgaWYgLWQgIiRkaXIvJE5ldFNOTVA6OkNlcnQ6OlRMU0RJUiIgYW5kIC13ICIkZGlyLyROZXRTTk1QOjpDZXJ0OjpUTFNESVIiOworICAgIH0KKyAgICBAcGF0aCA9IGNmZ19wYXRoKCk7CisgICAgIyBpZiBubyB0bHMgZGlyIGZvdW5kLCBwaWNrIGZpcnN0IHdyaXRhYmxlIGNvbmZpZyBkaXIKKyAgICAjIGZvciByb290IHNlYXJjaCB0b3AgZG93biwgZm9yIHVzZXIgYm90dG9tIHVwCisgICAgd2hpbGUgKEBwYXRoKSB7CisgICAgICAkZGlyID0gKCQ+ID8gcG9wKEBwYXRoKTogc2hpZnQoQHBhdGgpKTsKKyAgICAgIG5leHQgaWYgJGRpciBlcSAnL3Zhci9saWIvc25tcCc7CisgICAgICByZXR1cm4gJGRpciBpZiAtZCAkZGlyIGFuZCAtdyAkZGlyOworICAgIH0KKyAgICBteSAkaG9tZSA9ICRFTlZ7SE9NRX0gfHwgZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIGhvbWUgZGlyZWN0b3J5OiBzZXQgXCRIT01FXG4iOworICAgIHJldHVybiAoJD4gPyAiJGhvbWUvLnNubXAiIDogIi91c3Ivc2hhcmUvc25tcCIpOyAjIFhYWCBoYWNrIC0gbm8gZGlycyBleGlzdGVkIG9yIHdlcmUgd3JpdGFibGUKKyAgfQorICAjIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgorICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBmaW5kX2NlcnRzIHsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGRpciA9IHNoaWZ0IHx8ICdjZXJ0cyc7CisgIG15ICR0YXJnID0gc2hpZnQ7CisgIG15ICRzdWZmaXhfcmVnZXg7CisgIG15ICRjd2QgPSA6OmdldGN3ZCgpOworCisgIGlmICgkZGlyIGVxICdjc3JzJykgeworICAgICRkaXIgPSAkTmV0U05NUDo6Q2VydDo6TkVXQ1JURElSOworICAgICRzdWZmaXhfcmVnZXggPSAnXC5jc3J8XC5wZW0nOworICB9IGVsc2UgeworICAgICRzdWZmaXhfcmVnZXggPSAnXC5jcnR8XC5wZW0nOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmaW5kX2NlcnRzKDE6JGN3ZCk6JGRpcjokdGFyZzokc3VmZml4X3JlZ2V4XG4iLCAkb3B0cyk7CisKKyAgaWYgKCR0YXJnID1+IC9cLj9cLy8pIHsKKyAgICAjIHNlZSBpZiB0YXJnIGNvdWxkIGJlIGZpbGUgLSBjYWxjIG9yaWcuIHJlbC4gcGF0aAorICAgIG15ICRhcmcgPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkdGFyZywgJG9wdHMtPnsncmRpcid9KTsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZpbmRfY2VydHMoMik6JGRpcjokdGFyZzokYXJnXG4iLCAkb3B0cyk7CisgICAgIyB0YXJnIGlzIGEgZmlsZSBuYW1lIC0gdXNlIGl0CisgICAgcmV0dXJuICh3YW50YXJyYXkgPyAoJGFyZykgOiAkYXJnKSBpZiAtZiAkYXJnOworICAgICMgZWxzZSBtYXJrIGFzIGRpciBpZiBpdCBpcworICAgICR0YXJnID0gIiRhcmciIGlmIC1kICRhcmc7CisgIH0KKworICAkdGFyZyA9fiBzL1wvKiQvXC8vIGlmIC1kICR0YXJnOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZmluZF9jZXJ0cygzKTokZGlyOiR0YXJnXG4iLCAkb3B0cyk7CisKKyAgIyBmaW5kIGNlcnRzIGluIHRhcmcgaWYgYSBkaXIgKGluIHRsc2Rpciwgb3IgcmVsYXRpdmUpCisgICRkaXIgPSAkMSBpZiAkdGFyZyA9fiBzL14oXFMrKVwvKFteXC9cc10qKSQvJDIvIGFuZCAtZCAkMTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZpbmRfY2VydHMoNCk6JHtkaXJ9OiR0YXJnOiRjd2RcbiIsICRvcHRzKTsKKworICBteSBAY2VydHM7CisgIG15ICRnbG9iID0gIiRkaXIvJHRhcmciOworICBmb3JlYWNoICg8JGRpci8qPikgeworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY2hlY2tpbmcoJGRpcjokdGFyZyk6ICRfXG4iLCAkb3B0cyk7CisgICAgbmV4dCB1bmxlc3MgL14kZGlyXC8kdGFyZyguKiRzdWZmaXhfcmVnZXgpPyQvOworICAgICMgcmV0dXJuIGV4YWN0IG1hdGNoIGlmIG5vdCB3YW50YXJyYXkoKQorICAgIHJldHVybiAkXyBpZiAobm90IHdhbnRhcnJheSgpKSBhbmQgL14kZGlyXC8kdGFyZygkc3VmZml4X3JlZ2V4KT8kLzsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInB1c2hpbmc6ICRfXG4iLCAkb3B0cyk7CisgICAgcHVzaChAY2VydHMsICRfKTsKKyAgfQorCisgIHJldHVybiAod2FudGFycmF5ID8gQGNlcnRzIDogJGNlcnRzWzBdKTsKK30KKworc3ViIGNoZWNrX291dHB1dF9maWxlIHsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGZpbGUgPSBzaGlmdDsKKyAgbXkgJGludGVyYWN0aXZlID0gc2hpZnQ7CisgIG15ICRmb3JjZSA9IHNoaWZ0OworICBteSAkY29udGludWUgPSAxOworCisgIGlmICgtdyAkZmlsZSkgeworICAgIGlmICgkaW50ZXJhY3RpdmUgYW5kIG5vdCAkZm9yY2UpIHsKKyAgICAgIHByaW50ICJPdXRwdXQgZmlsZSAoJGZpbGUpIGV4aXN0czsgd2lsbCBiZSBvdmVyd3JpdHRlblxuQ29udGludWUgW3kvTl06ICI7CisgICAgICAkY29udGludWUgPSA8U1RESU4+OyBjaG9tcCAkY29udGludWU7CisgICAgICAkY29udGludWUgPSAwIGlmICRjb250aW51ZSA9fiAvXlxzKiR8Xm5vP1xzKiQvaTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCRmb3JjZSkgeworCU5ldFNOTVA6OkNlcnQ6OnZwcmludCgiT3V0cHV0IGZpbGUgKCRmaWxlKSBleGlzdHM7IG92ZXJ3cml0aW5nLi4uXG4iLCAkb3B0cyk7CisgICAgICB9IGVsc2UgeworCU5ldFNOTVA6OkNlcnQ6OnZwcmludCgiT3V0cHV0IGZpbGUgKCRmaWxlKSBleGlzdHM7IGV4aXRpbmcuLi5cbiIsICRvcHRzKTsKKwkkY29udGludWUgPSAwOworICAgICAgfQorICAgIH0KKyAgfSBlbHNpZiAoLWUgJGZpbGUpIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIk91dHB1dCBmaWxlICgkZmlsZSkgbm90IHdyaXRhYmxlOyBleGl0aW5nLi4uXG4iLCAkb3B0cyk7CisgICAgJGNvbnRpbnVlID0gMDsKKyAgfQorICBleGl0KDEpIHVubGVzcyAkY29udGludWU7Cit9CisKK3N1YiBpc19zZXJ2ZXIgeworICBteSAkdGFnID0gc2hpZnQ7CisgIHJldHVybiAxIGlmICR0YWcgZXEgJ3NubXBkJyBvciAkdGFnIGVxICdzbm1wdHJhcGQnOworICByZXR1cm4gMDsKK30KKworc3ViIGlzX2NhX2NlcnQgeworICBteSAkY3J0ID0gc2hpZnQ7CisgIG15ICRvdXRwdXQgPSBgb3BlbnNzbCB4NTA5IC1pbiAnJGNydCcgLXRleHQgLW5vb3V0YDsKKyAgcmV0dXJuICgkb3V0cHV0ID1+IC9eXHMqQ0E6VFJVRVxzKiQvbSA/IDEgOiAwKTsKK30KKworc3ViIHg1MDlfZm9ybWF0IHsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGZtdDsKKworICBmb3JlYWNoIG15ICRmIChATmV0U05NUDo6Q2VydDo6WDUwOUZNVFMpIHsKKyAgICAkZm10IC49ICIgLSRmIiBpZiBkZWZpbmVkICRvcHRzLT57JGZ9OworICB9CisKKyAgcmV0dXJuICRmbXQ7Cit9CisKK3N1YiBtYWtlX29wZW5zc2xfY29uZiB7CisgIG15ICRmaWxlID0gc2hpZnQ7CisgIHJldHVybiBpZiAtciAkZmlsZTsKKworICBvcGVuKEYsICI+JGZpbGUiKSBvciBkaWUoImNvdWxkIG5vdCBvcGVuICRmaWxlIik7CisKKyAgcHJpbnQgRiA8PCdFTkQnOworIworIyBOZXQtU05NUCAoRClUTFMgT3BlblNTTCBjb25maWd1cmF0aW9uIGZpbGUuCisjCisKK3JkaXIgICAgICAgICAgICA9IC4KK2RpcgkJPSAkRU5WOjpESVIKK1JBTkRGSUxFCT0gJHJkaXIvLnJhbmQKK01ECQk9IHNoYTEKK0tTSVpFCQk9IDIwNDgKK0NOCQk9IG5ldC1zbm1wLm9yZworRU1BSUwJCT0gYWRtaW5AbmV0LXNubXAub3JnCitDT1VOVFJZCSAgICAgICAgPSBVUworU1RBVEUJCT0gQ0EKK0xPQ0FMSVRZCT0gRGF2aXMKK09SRwkJPSBOZXQtU05NUAorT1JHX1VOSVQJPSBEZXZlbG9wbWVudAorU0FOICAgICAgICAgICAgID0gZW1haWw6Y29weQorREFZUyAgICAgICAgICAgID0gMzY1CitDUkxEQVlTICAgICAgICAgPSAzMAorCitkZWZhdWx0X2RheXMJPSAkRU5WOjpEQVlTCQkjIGhvdyBsb25nIHRvIGNlcnRpZnkgZm9yCitkZWZhdWx0X2NybF9kYXlzPSAkRU5WOjpDUkxEQVlTCQkjIGhvdyBsb25nIGJlZm9yZSBuZXh0IENSTAorZGVmYXVsdF9tZAk9ICRFTlY6Ok1ECQkjIHdoaWNoIG1kIHRvIHVzZS4KKworZGF0YWJhc2UJPSAkZGlyLy5pbmRleAkJIyBkYXRhYmFzZSBpbmRleCBmaWxlLgorc2VyaWFsCQk9ICRkaXIvLnNlcmlhbCAJCSMgVGhlIGN1cnJlbnQgc2VyaWFsIG51bWJlcgorY2VydHMJCT0gJHJkaXIvY2VydHMJCSMgaWRlbnRpdHkgY2VydHMKK25ld19jZXJ0c19kaXIJPSAkZGlyL25ld2NlcnRzCSMgZGVmYXVsdCBwbGFjZSBmb3IgbmV3IGNlcnRzLgorY2FfY2VydHNfZGlyCT0gJHJkaXIvY2EtY2VydHMJIyBkZWZhdWx0IHBsYWNlIGZvciBuZXcgY2VydHMuCitrZXlfZGlyCQk9ICRyZGlyL3ByaXZhdGUKKworY3JsX2RpcgkJPSAkZGlyL2NybAkJIyBjcmwncworY3JsbnVtYmVyCT0gJGRpci8uY3JsbnVtYmVyCSMgdGhlIGN1cnJlbnQgY3JsIG51bWJlcgorCQkJCQkjIG11c3QgYmUgY29tbWVudGVkIG91dCB0byBsZWF2ZSBWMSBDUkwKK2NybAkJPSAkY3JsX2Rpci9jcmwucGVtCSMgVGhlIGN1cnJlbnQgQ1JMCisKK3ByZXNlcnZlCT0gbm8JCQkjIGtlZXAgcGFzc2VkIEROIG9yZGVyaW5nCit1bmlxdWVfc3ViamVjdAk9IHllcwkJCSMgU2V0IHRvICdubycgdG8gYWxsb3cgY3JlYXRpb24gb2YKKwkJCQkJIyBjZXJ0aWZpY2F0ZXMgd2l0aCBzYW1lIHN1YmplY3QuCisjIEV4dHJhIE9CSkVDVCBJREVOVElGSUVSIGluZm86CitvaWRfc2VjdGlvbgkJPSBuZXdfb2lkcworCitbIG5ld19vaWRzIF0KKworIyBBZGQgbmV3IE9JRHMgaW4gaGVyZSBmb3IgdXNlIGJ5ICdjYScgYW5kICdyZXEnLgorIyBBZGQgYSBzaW1wbGUgT0lEIGxpa2UgdGhpczoKKyMgdGVzdG9pZDE9MS4yLjMuNAorIyBVc2UgY29uZmlnIGZpbGUgc3Vic3RpdHV0aW9uIGxpa2UgdGhpczoKKyMgdGVzdG9pZDI9JHt0ZXN0b2lkMX0uNS42CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbIGNhIF0KK2RlZmF1bHRfY2EJPSBDQV9kZWZhdWx0CQkjIFRoZSBkZWZhdWx0IGNhIHNlY3Rpb24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1sgQ0FfZGVmYXVsdCBdCisjIGNlcnRpZmljYXRlCT0gJGNhX2NlcnRzX2Rpci8kRU5WOjpUQUcuY3J0IAkjIENBIGNlcnRpZmljYXRlIHNvIHNpZ24gd2l0aAorbmFtZV9vcHQgCT0gY2FfZGVmYXVsdAkJIyBTdWJqZWN0IE5hbWUgb3B0aW9ucworY2VydF9vcHQgCT0gY2FfZGVmYXVsdAkJIyBDZXJ0aWZpY2F0ZSBmaWVsZCBvcHRpb25zCitwb2xpY3kJCT0gcG9saWN5X21hdGNoCitjb3B5X2V4dGVuc2lvbnMgPSBjb3B5ICAgICAgICAgICAgICAgICAgIyBjb3B5IHYzIGV4dGVuc2lvbnMgKHN1YmplY3RBbHROYW1lKQorc3ViamVjdEFsdE5hbWUgID0gY29weQorCisjIEZvciB0aGUgQ0EgcG9saWN5CitbIHBvbGljeV9tYXRjaCBdCitjb3VudHJ5TmFtZQkJPSBtYXRjaAorc3RhdGVPclByb3ZpbmNlTmFtZQk9IG1hdGNoCitvcmdhbml6YXRpb25OYW1lCT0gbWF0Y2gKK29yZ2FuaXphdGlvbmFsVW5pdE5hbWUJPSBvcHRpb25hbAorY29tbW9uTmFtZQkJPSBzdXBwbGllZAorZW1haWxBZGRyZXNzCQk9IG9wdGlvbmFsCisKKyMgRm9yIHRoZSAnYW55dGhpbmcnIHBvbGljeQorIyBBdCB0aGlzIHBvaW50IGluIHRpbWUsIHlvdSBtdXN0IGxpc3QgYWxsIGFjY2VwdGFibGUgJ29iamVjdCcKKyMgdHlwZXMuCitbIHBvbGljeV9hbnl0aGluZyBdCitjb3VudHJ5TmFtZQkJPSBvcHRpb25hbAorc3RhdGVPclByb3ZpbmNlTmFtZQk9IG9wdGlvbmFsCitsb2NhbGl0eU5hbWUJCT0gb3B0aW9uYWwKK29yZ2FuaXphdGlvbk5hbWUJPSBvcHRpb25hbAorb3JnYW5pemF0aW9uYWxVbml0TmFtZQk9IG9wdGlvbmFsCitjb21tb25OYW1lCQk9IHN1cHBsaWVkCitlbWFpbEFkZHJlc3MJCT0gb3B0aW9uYWwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1sgcmVxIF0KK2RlZmF1bHRfYml0cwkJPSAkRU5WOjpLU0laRQorZGVmYXVsdF9tZAkJPSAkRU5WOjpNRAorZGlzdGluZ3Vpc2hlZF9uYW1lCT0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQorc3RyaW5nX21hc2sgCQk9IE1BU0s6MHgyMDAyCityZXFfZXh0ZW5zaW9ucyAgICAgICAgICA9IHYzX3JlcQoreDUwOV9leHRlbnNpb25zICAgICAgICAgPSB2M191c2VyX2NyZWF0ZQorCitbIHJlcV9kaXN0aW5ndWlzaGVkX25hbWUgXQorY291bnRyeU5hbWUJCQk9IENvdW50cnkgTmFtZSAoMiBsZXR0ZXIgY29kZSkKK2NvdW50cnlOYW1lX2RlZmF1bHQJCT0gJEVOVjo6Q09VTlRSWQorY291bnRyeU5hbWVfbWluCQkJPSAyCitjb3VudHJ5TmFtZV9tYXgJCQk9IDIKKworc3RhdGVPclByb3ZpbmNlTmFtZQkJPSBTdGF0ZSBvciBQcm92aW5jZSBOYW1lIChmdWxsIG5hbWUpCitzdGF0ZU9yUHJvdmluY2VOYW1lX2RlZmF1bHQJPSAkRU5WOjpTVEFURQorCitsb2NhbGl0eU5hbWUJCQk9IExvY2FsaXR5IE5hbWUgKGVnLCBjaXR5KQorbG9jYWxpdHlOYW1lX2RlZmF1bHQJCT0gJEVOVjo6TE9DQUxJVFkKKworMC5vcmdhbml6YXRpb25OYW1lCQk9IE9yZ2FuaXphdGlvbiBOYW1lIChlZywgY29tcGFueSkKKzAub3JnYW5pemF0aW9uTmFtZV9kZWZhdWx0CT0gJEVOVjo6T1JHCisKK29yZ2FuaXphdGlvbmFsVW5pdE5hbWUJCT0gT3JnYW5pemF0aW9uYWwgVW5pdCBOYW1lIChlZywgc2VjdGlvbikKK29yZ2FuaXphdGlvbmFsVW5pdE5hbWVfZGVmYXVsdAk9ICRFTlY6Ok9SR19VTklUCisKK2NvbW1vbk5hbWUJCQk9IENvbW1vbiBOYW1lIChlZywgeW91ciBuYW1lIG9yIHlvdXIgc2VydmVyXCdzIGhvc3RuYW1lKQorY29tbW9uTmFtZV9tYXgJCQk9IDY0Citjb21tb25OYW1lX2RlZmF1bHQgICAgICAgICAgICAgID0gJEVOVjo6Q04KKworZW1haWxBZGRyZXNzCQkJPSBFbWFpbCBBZGRyZXNzCitlbWFpbEFkZHJlc3NfbWF4CQk9IDY0CitlbWFpbEFkZHJlc3NfZGVmYXVsdCAgICAgICAgICAgID0gJEVOVjo6RU1BSUwKKworWyB2M19yZXEgXQorCisjIEV4dGVuc2lvbnMgdG8gYWRkIHRvIGEgY2VydGlmaWNhdGUgcmVxdWVzdAorYmFzaWNDb25zdHJhaW50cyA9IENBOkZBTFNFCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBhZGRyZXNzIGFuZC9vciBzcGVjaWZpZWQgU0FOcy4KKyVbc3ViamVjdEFsdE5hbWUgPSAkRU5WOjpTQU5dCisKK1sgdjNfdXNlcl9jcmVhdGUgXQorCisjIEV4dGVuc2lvbnMgdG8gYWRkIHRvIGEgY2VydGlmaWNhdGUgcmVxdWVzdAorYmFzaWNDb25zdHJhaW50cyA9IENBOkZBTFNFCisja2V5VXNhZ2UgPSBub25SZXB1ZGlhdGlvbiwgZGlnaXRhbFNpZ25hdHVyZSwga2V5RW5jaXBoZXJtZW50CisKKyMgUEtJWCByZWNvbW1lbmRhdGlvbi4KK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkOmFsd2F5cyxpc3N1ZXI6YWx3YXlzCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBhZGRyZXNzIGFuZC9vciBzcGVjaWZpZWQgU0FOcy4KKyVbc3ViamVjdEFsdE5hbWUgPSAkRU5WOjpTQU5dCisKK1sgdjNfY2FfY3JlYXRlIF0KKyMgRXh0ZW5zaW9ucyB0byBhZGQgdG8gYSBDQSBjZXJ0aWZpY2F0ZQorYmFzaWNDb25zdHJhaW50cyA9IENBOlRSVUUKKyMgVGhpcyB3aWxsIGJlIGRpc3BsYXllZCBpbiBOZXRzY2FwZSdzIGNvbW1lbnQgbGlzdGJveC4KK25zQ29tbWVudCA9ICJPcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZSAobmV0LXNubXApIgorCisjIFBLSVggcmVjb21tZW5kYXRpb24uCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZDphbHdheXMsaXNzdWVyOmFsd2F5cworCisjIEltcG9ydCB0aGUgZW1haWwgYWRkcmVzcyBhbmQvb3Igc3BlY2lmaWVkIFNBTnMuCislW3N1YmplY3RBbHROYW1lID0gJEVOVjo6U0FOXQorCitbIHYzX2NhX3NpZ24gXQorIyBFeHRlbnNpb25zIHRvIGFkZCB3aGVuICdjYScgc2lnbnMgYSByZXF1ZXN0LgorYmFzaWNDb25zdHJhaW50cyA9IENBOkZBTFNFCisjIFRoaXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gTmV0c2NhcGUncyBjb21tZW50IGxpc3Rib3guCituc0NvbW1lbnQgPSAiT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgKG5ldC1zbm1wKSIKKwora2V5VXNhZ2UgPSBub25SZXB1ZGlhdGlvbiwgZGlnaXRhbFNpZ25hdHVyZSwga2V5RW5jaXBoZXJtZW50CisKKyMgUEtJWCByZWNvbW1lbmRhdGlvbnMgaGFybWxlc3MgaWYgaW5jbHVkZWQgaW4gYWxsIGNlcnRpZmljYXRlcy4KK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkOmFsd2F5cyxpc3N1ZXI6YWx3YXlzCisKK1sgdjNfY2Ffc2lnbl9jYSBdCisjIEV4dGVuc2lvbnMgdG8gYWRkIHdoZW4gJ2NhJyBzaWducyBhIGNhIHJlcXVlc3QuCitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6VFJVRQorCisjIFRoaXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gTmV0c2NhcGUncyBjb21tZW50IGxpc3Rib3guCituc0NvbW1lbnQgPSAiT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgKG5ldC1zbm1wKSIKKworIyBQS0lYIHJlY29tbWVuZGF0aW9ucyBoYXJtbGVzcyBpZiBpbmNsdWRlZCBpbiBhbGwgY2VydGlmaWNhdGVzLgorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKKworRU5ECisKK30KKworCitwYWNrYWdlIE5ldFNOTVA6OkNlcnQ6Ok9iajsKKworc3ViIG5ldyB7CisgIG15ICRjbGFzcyA9IHNoaWZ0OworICBteSAkY2ZpZWxkID0gc2hpZnQ7CisgIG15ICRwYXJlbnQgPSBzaGlmdDsKKyAgbXkgJGluZCA9IHNoaWZ0OworICBteSAkdGhpcyA9IHt9OworICBibGVzcygkdGhpcywgJGNsYXNzKTsKKworICAjIGluaXRpYWxpemUgaGFzaCBvZiBrZXlzIHdoaWNoIGFyZSBkeW5hbWljYWxseSBjcmVhdGVkIG9yIGludGVybmFsCisgICR0aGlzLT57J0FVVE9LRVlTJ317J0FVVE9LRVlTJ30rKzsKKworICAjIHN0b3JlIGEgcmVmZXJlbmNlIHRvIG91cnNlbHZlcyBzbyBvdXIgY2hpbGRyZW4gY2FuIGZpbmQgdXMKKyAgJHRoaXMtPmF1dG9TZXQoJ0NGSUVMRCcsICRjZmllbGQpOworICAkdGhpcy0+YXV0b1NldCgkY2ZpZWxkICwgJHRoaXMpOworICAkdGhpcy0+YXV0b1NldCgnQ0hJTERSRU4nLCBbXSk7CisgICR0aGlzLT5hdXRvU2V0KCdJTkRFWCcsICRpbmQpIGlmIGRlZmluZWQgJGluZDsKKworICBpZiAoZGVmaW5lZCAkcGFyZW50KSB7CisgICAgIyBjYWNoZSAnQVBQJyBpbiBhbGwgb2JqcyBmb3IgZWFzeSByZWZlcmVuY2UKKyAgICAkdGhpcy0+YXV0b1NldCgnQVBQJywgJHBhcmVudC0+aW5oZXJpdCgnQVBQJykpOworICAgIG15ICRhcHAgPSAkdGhpcy0+eydBUFAnfTsKKworICAgIGRpZSgibmV0LXNubXAtY2VydDogZXJyb3I6IG5vIE5ldFNOTVA6OkNlcnQ6OkFwcCBjb250ZXh0IHByb3ZpZGVkIikKKyAgICAgIGlmIG5vdCBkZWZpbmVkICRhcHAgb3Igbm90IHJlZiAkYXBwIGVxICdOZXRTTk1QOjpDZXJ0OjpBcHAnOworICAgICMgc2F2ZSBjaGlsZHJlbiBmb3IgbGlzdCB0cmF2ZXJzYWwKKyAgICBwdXNoKEB7JHBhcmVudC0+eydDSElMRFJFTid9fSwgJHRoaXMpIHVubGVzcyAkcGFyZW50IGVxICR0aGlzOworICB9IGVsc2UgeworICAgICMgd2UgYXJlIHRoZSB0b3Agb2YgdGhlIGxpc3QKKyAgICAkcGFyZW50ID0gJHRoaXM7CisgIH0KKyAgJHRoaXMtPmF1dG9TZXQoJ1BBUkVOVCcgLCAkcGFyZW50KTsKKworICByZXR1cm4gJHRoaXM7Cit9CisKK3N1YiBhdXRvU2V0IHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgbXkgJGtleSA9IHNoaWZ0OworICBpZiAoQF8pIHsKKyAgICBteSAkdmFsID0gc2hpZnQ7CisgICAgJHRoaXMtPnsnQVVUT0tFWVMnfXska2V5fSsrOworICAgICR0aGlzLT57JGtleX0gPSAkdmFsOworICB9CisgIHJldHVybiBleGlzdHMgJHRoaXMtPnsnQVVUT0tFWVMnfXska2V5fTsKK30KKworc3ViIGluaGVyaXQgeworICBteSAkdGhpcyA9IHNoaWZ0OworICBteSAkZmllbGQgPSBzaGlmdDsKKyAgbXkgJGlkOworCisgICMgY21kIG9wdHMgb3ZlcnJpZGUgY29uZmlnIHNldHRpbmdzCisgIGlmIChleGlzdHMgJHRoaXMtPnsnQVBQJ30gYW5kIGV4aXN0cyAkdGhpcy0+eydBUFAnfXsnT1BUUyd9KSB7CisgICAgbXkgJG9wdHMgPSAkdGhpcy0+eydBUFAnfXsnT1BUUyd9OworICAgICRpZCA9ICRvcHRzLT57J2lkZW50aXR5J307CisgICAgcmV0dXJuICRvcHRzLT57JGZpZWxkfSBpZiBkZWZpbmVkICRvcHRzLT57JGZpZWxkfTsKKyAgfQorCisgIGlmIChkZWZpbmVkICRpZCBhbmQgZXhpc3RzICR0aGlzLT57J2lkZW50aXR5J30gYW5kCisgICAgICBleGlzdHMgJHRoaXMtPnsnaWRlbnRpdHknfXskaWR9IGFuZAorICAgICAgZXhpc3RzICR0aGlzLT57J2lkZW50aXR5J317JGlkfXskZmllbGR9KSB7CisgICAgcmV0dXJuICR0aGlzLT57J2lkZW50aXR5J317JGlkfXskZmllbGR9OworICB9CisKKyAgIyByZXR1cm4gb3VyIGZpZWxkIGlmIHdlIGhhdmUgaXQKKyAgcmV0dXJuICR0aGlzLT57JGZpZWxkfSBpZiBkZWZpbmVkICR0aGlzLT57JGZpZWxkfTsKKworICAjIHRlcm1pbmF0ZSByZWN1cnNpb24gYXQgdG9wIGFuZCByZXR1cm4gdW5kZWYgaWYgbm90IGZvdW5kCisgIHJldHVybiB1bmRlZiBpZiBub3QgZGVmaW5lZCAkdGhpcy0+eydQQVJFTlQnfSBvciAkdGhpcy0+eydQQVJFTlQnfSBlcSAkdGhpczsKKworICAjIHJlY3Vyc2UgdG8gcGFyZW50CisgICR0aGlzLT57J1BBUkVOVCd9LT5pbmhlcml0KCRmaWVsZCk7Cit9CisKK3N1YiByZXNvbHZlIHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkdGhpcy0+aW5oZXJpdCgnT1BUUycpOworICBteSAkdmFsID0gc2hpZnQ7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJyZXNvbHZpbmc6ICR2YWxcbiIsICRvcHRzKTsKKworICAkdmFsID1+IHMvKFwkKFx3KykpLyR0aGlzLT5pbmhlcml0KCQyKSBvciBkaWUoInVucmVzb2x2ZWQgcmVmZXJlbmNlIGluIGNvbmZpZzogJDEiKS9nZTsKKyAgJHZhbCA9fiBzLyhcJlx7KC4qPylcfSkvJDIvZ2VlOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgicmVzb2x2ZWQ6ICR2YWxcbiIsICRvcHRzKTsKKworICByZXR1cm4gJHZhbAorfQorCitzdWIgZGVsZXRlIHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkdGhpcy0+aW5oZXJpdCgnT1BUUycpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiT2JqOjpkZWxldGU6ICgkdGhpcykgWyR0aGlzLT57Q0ZJRUxEfV1cbiIsICRvcHRzKTsKKworICBteSAkcGFyZW50ID0gJHRoaXMtPnsnUEFSRU5UJ307CisgIG15IEBjaGlsZHJlbiA9IEB7JHRoaXMtPnsnQ0hJTERSRU4nfX07CisKKyAgZm9yZWFjaCBteSAkY2hpbGQgKEBjaGlsZHJlbikgeworICAgICRjaGlsZC0+ZGVsZXRlKCk7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0Ojpkd2FybigiT2JqOiBjaGlsZHJlbiBub3QgZnJlZWRcbiIsICRvcHRzKSBpZiBAeyR0aGlzLT57J0NISUxEUkVOJ319OworCisgICMgZGVsZXRlIGFsbCBvdXIgc2VsZi1yZWZlcmVuY2VzCisgIGRlbGV0ZSgkdGhpcy0+eyR0aGlzLT57J0NGSUVMRCd9fSkgaWYgZXhpc3RzICR0aGlzLT57J0NGSUVMRCd9OworICBkZWxldGUoJHRoaXMtPnsnUEFSRU5UJ30pOworICBkZWxldGUoJHRoaXMtPnsnQ0hJTERSRU4nfSk7CisKKyAgJHBhcmVudC0+ZGlzb3duKCR0aGlzKSBpZiBkZWZpbmVkICRwYXJlbnQgYW5kIHJlZigkcGFyZW50KSA9fiAvTmV0U05NUDo6Q2VydC87Cit9CisKK3N1YiBkaXNvd24geworICBteSAkdGhpcyA9IHNoaWZ0OworICBteSAkdGhlY2hpbGQgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkdGhpcy0+aW5oZXJpdCgnT1BUUycpOworICBteSAkaW5kID0gMDsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIk9iajo6ZGlzb3duOiAoJHRoaXMpIFskdGhpcy0+e0NGSUVMRH1dIGRpc293bmluZyAoJHRoZWNoaWxkKSBbJHRoZWNoaWxkLT57Q0ZJRUxEfV1cbiIsICRvcHRzKTsKKworICBmb3JlYWNoIG15ICRjaGlsZCAoQHskdGhpcy0+eydDSElMRFJFTid9fSkgeworICAgIGxhc3QgaWYgJGNoaWxkIGVxICR0aGVjaGlsZDsKKyAgICAkaW5kKys7CisgIH0KKyAgaWYgKCRpbmQgPCBAeyR0aGlzLT57J0NISUxEUkVOJ319KSB7CisgICAgc3BsaWNlKEB7JHRoaXMtPnsnQ0hJTERSRU4nfX0sICRpbmQsIDEpOworICB9IGVsc2UgeworICAgIE5ldFNOTVA6OkNlcnQ6OmR3YXJuKCJDaGlsZCAoJHRoZWNoaWxkKSBub3QgZm91bmQgaW4gb2JqZWN0ICgkdGhpcylcbiIsICRvcHRzKTsKKyAgfQorfQorCitzdWIgZGlzYWJsZWQgeworICBteSAkdGhpcyA9IHNoaWZ0OworICByZXR1cm4gKGV4aXN0cyAkdGhpcy0+eydkaXNhYmxlJ30gPyAkdGhpcy0+eydkaXNhYmxlJ30gOiAwKTsKK30KKworbXkgJWNmZyA9ICgKKwkgICAnbmFtZScgPT4gMSwKKwkgICAndHlwZScgPT4gMiwKKwkgICAnaWQnID0+IDYsCisJICApOworCitzdWIgY2Znc29ydCB7CisgIG15ICRzZWxmID0gc2hpZnQ7CisgIG15ICRhID0gc2hpZnQ7CisgIG15ICRiID0gc2hpZnQ7CisgIHJldHVybiAtMSBpZiBleGlzdHMgJGNmZ3skYX0gYW5kIG5vdCBleGlzdHMgJGNmZ3skYn07CisgIHJldHVybiAxIGlmIGV4aXN0cyAkY2ZneyRifSBhbmQgbm90IGV4aXN0cyAkY2ZneyRhfTsKKyAgcmV0dXJuICRjZmd7JGF9IDw9PiAkY2ZneyRifSBpZiBleGlzdHMgJGNmZ3skYX0gYW5kIGV4aXN0cyAkY2ZneyRifTsKKyAgcmV0dXJuIC0xIGlmICFyZWYoJHNlbGYtPnskYX0pIGFuZCByZWYoJHNlbGYtPnskYn0pOworICByZXR1cm4gMSBpZiAhcmVmKCRzZWxmLT57JGJ9KSBhbmQgcmVmKCRzZWxmLT57JGF9KTsKKyAgcmV0dXJuIC0xIGlmIHJlZigkc2VsZi0+eyRhfSkgPX4gL05ldFNOTVA6OkNlcnQvIGFuZCByZWYoJHNlbGYtPnskYn0pICF+IC9OZXRTTk1QOjpDZXJ0LzsKKyAgcmV0dXJuIDEgaWYgcmVmKCRzZWxmLT57JGJ9KSA9fiAvTmV0U05NUDo6Q2VydC8gYW5kIHJlZigkc2VsZi0+eyRhfSkgIX4gL05ldFNOTVA6OkNlcnQvOworICByZXR1cm4gMDsKK30KKworc3ViIGR1bXAgeworICBteSAkc2VsZiA9IHNoaWZ0OworICBteSAkaW5kZW50ID0gc2hpZnQ7CisgIG15ICRzZWxmX3N0ciA9ICRzZWxmLT57J0NGSUVMRCd9OworICBteSBAZGF0YV9rZXlzID0gIGdyZXAgeyEkc2VsZi0+YXV0b1NldCgkXyl9IGtleXMgJSRzZWxmOworICBteSBAbGluZXM7CisKKyAgcHVzaChAbGluZXMsICJcbiIgLiAnICcgeCAkaW5kZW50IC4gIiRzZWxmX3N0ciA9IHtcbiIpIGlmIGRlZmluZWQgJGluZGVudDsKKworICB7CisgICAgbXkgJGluZGVudCA9IChkZWZpbmVkICRpbmRlbnQgPyAkaW5kZW50ICsgMyA6IDApOworICAgIGZvcmVhY2ggbXkgJGtleSAoc29ydCB7Y2Znc29ydCgkc2VsZiwkTmV0U05NUDo6Q2VydDo6T2JqOjphLAorCQkJCSAgICROZXRTTk1QOjpDZXJ0OjpPYmo6OmIpfSAoc29ydCBAZGF0YV9rZXlzKSkgeworICAgICAgaWYgKHJlZigkc2VsZi0+eyRrZXl9KSA9fiAvTmV0U05NUDo6Q2VydC8pIHsKKwlwdXNoKEBsaW5lcywgJHNlbGYtPnska2V5fS0+ZHVtcCgkaW5kZW50KSk7CisgICAgICB9IGVsc2lmIChyZWYoJHNlbGYtPnska2V5fSkgPX4gL0FSUkFZLykgeworCXB1c2goQGxpbmVzLCAiXG4iKSBpZiByZWYoJHskc2VsZi0+eyRrZXl9fVswXSkgIX4gL05ldFNOTVA6OkNlcnQvOworCWZvcmVhY2ggbXkgJGVsZW0gKEB7JHNlbGYtPnska2V5fX0pIHsKKwkgIGlmIChyZWYoJGVsZW0pID1+IC9OZXRTTk1QOjpDZXJ0LykgeworCSAgICBwdXNoKEBsaW5lcywgJGVsZW0tPmR1bXAoJGluZGVudCkpOworCSAgfSBlbHNlIHsKKwkgICAgcHVzaChAbGluZXMsICcgJyB4ICRpbmRlbnQgLiAiJGtleSA9ICRlbGVtXG4iKTsKKwkgIH0KKwl9CisgICAgICB9IGVsc2UgeworCW15ICRzdHIgPSAka2V5IC4gKGRlZmluZWQgJHNlbGYtPnska2V5fSA/ICIgPSAkc2VsZi0+eyRrZXl9XG4iIDogIlxuIik7CisJcHVzaChAbGluZXMsICcgJyB4ICRpbmRlbnQgLiAkc3RyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdXNoKEBsaW5lcywgJyAnIHggJGluZGVudCAuICJ9OyAjIGVuZCAkc2VsZl9zdHJcbiIpIGlmIGRlZmluZWQgJGluZGVudDsKKyAgcmV0dXJuIEBsaW5lczsKK30KKworc3ViIERFU1RST1kgeworICBteSAkdGhpcyA9IHNoaWZ0OworCisgIHByaW50KCJPYmo6OkRFU1RST1kgJHRoaXMgWyIsIHJlZiAkdGhpcywgIl1cbiIpIGlmICROZXRTTk1QOjpDZXJ0OjpERUJVRyA+PSAzOworfQorCitwYWNrYWdlIE5ldFNOTVA6OkNlcnQ6OkFwcDsKK3VzZSB2YXJzIHF3KEBJU0EpOworCitASVNBID0gcXcoTmV0U05NUDo6Q2VydDo6T2JqKTsKKworc3ViIG5ldyB7CisgIG15ICRjbGFzcyA9IHNoaWZ0OworCisgICMgdGhlIGFwcCBpcyBnb2QsIGl0IGlzIGl0cyBvd24gcGFyZW50CisgIG15ICR0aGlzID0gJGNsYXNzLT5TVVBFUjo6bmV3KCdBUFAnKTsKKworICBibGVzcygkdGhpcywgJGNsYXNzKTsKKworICAjIHZlcmlmeSByZXF1aXJlZCB0b29scyBvciBkaWUKKyAgJHRoaXMtPmNoZWNrUmVxcygpOworCisgICMgaW50ZXJuYWwgaW50aXRpYWxpemF0aW9uCisgICR0aGlzLT5pbml0T3B0cygpOworCisgICMgbWFrZSBhIG5ldyBlbXB0eSBjb25maWcgYW5kIGluaXQgKG5vdCBwYXJzZWQpCisgICR0aGlzLT57J2NvbmZpZyd9ID0gbmV3IE5ldFNOTVA6OkNlcnQ6OkNvbmZpZygkdGhpcyk7CisKKyAgcmV0dXJuICR0aGlzOworfQorCitzdWIgY2hlY2tSZXFzIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworCisgIGRpZSgiJE5ldFNOTVA6OkNlcnQ6Ok9QRU5TU0wgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGV4ZWN1dGFibGUiKQorICAgIGlmIHN5c3RlbSgiJE5ldFNOTVA6OkNlcnQ6Ok9QRU5TU0wgdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxIik7CisKKyAgbXkgJG9zc2xfdmVyID0gYCROZXRTTk1QOjpDZXJ0OjpPUEVOU1NMIHZlcnNpb25gOyBjaG9tcCAkb3NzbF92ZXI7CisgICRvc3NsX3ZlciA9fiBzL15PcGVuU1NMXHMrKFtcZFwuXSspLiokLyQxLzsKKyAgbXkgJG9zc2xfbWluX3ZlciA9ICROZXRTTk1QOjpDZXJ0OjpPUEVOU1NMX01JTl9WRVI7CisKKyAgZGllKCIkTmV0U05NUDo6Q2VydDo6T1BFTlNTTCAodiRvc3NsX3Zlcik6IG11c3QgYmUgJG9zc2xfbWluX3ZlciBvciBsYXRlciIpCisgICAgaWYgKCRvc3NsX3ZlciBjbXAgJG9zc2xfbWluX3ZlcikgPCAwOworCisgIGRpZSgiJE5ldFNOTVA6OkNlcnQ6OkNGR1RPT0wgbm90IGZvdW5kOiBwbGVhc2UgaW5zdGFsbCIpCisgICAgaWYgc3lzdGVtKCIkTmV0U05NUDo6Q2VydDo6Q0ZHVE9PTCA+IC9kZXYvbnVsbCAyPiYxIik7Cit9CisKK3N1YiBpbml0T3B0cyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSB7fTsKKyAgJGFwcC0+YXV0b1NldCgnT1BUUycsICRvcHRzKTsKKworICAjIERlZmluZSBkaXJlY3RvcmllcyB3ZSBuZWVkLgorICAkb3B0cy0+eydiaW5kaXInfSA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfYmluX2RpcigpOworCisgICRvcHRzLT57J291dCd9ID0gIj4gJE5ldFNOTVA6OkNlcnQ6Ok9VVExPRyI7CisgICRvcHRzLT57J2Vycid9ID0gIjI+ICROZXRTTk1QOjpDZXJ0OjpFUlJMT0ciOworCisgICMgc2V0IHVwIHBhdGhzIGZvciBhcHAgaW5zdGFsbCBhbmQgcnVudGltZSBlbnYKKyAgJEVOVntQQVRIfSA9ICIvc2JpbjovdXNyL3NiaW46JEVOVntQQVRIfSI7CisgICRFTlZ7UEFUSH0gPSAiJG9wdHMtPnsnYmluZGlyJ306JEVOVntQQVRIfSI7CisKKyAgIyBkZWZhdWx0IGFsbCBwcml2cyB0byAtcnctLS0tLS0tCisgIHVtYXNrKDA3Nyk7Cit9CisKK3N1YiBpbml0IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgQGFyZ3MgPSBAXzsgICAjIHBhc3MgZXh0ZXJuYWwgYXJncyAodHlwaWNhbGx5IEFSR1YpCisKKyAgIyBwYXJzZSBjb21tYW5kIGxpbmUKKyAgJGFwcC0+cGFyc2VBcmdzKEBhcmdzKTsKKworICAjIGxhenkgY29uZmlnIHBhcnNpbmcgcG9zdHBvbmVkIHVudGlsIGhlcmUsIHdpbGwgbm90IHJlcGFyc2UKKyAgJGNvbmZpZy0+cGFyc2UoKTsKKworICAjIHNldCBkZWZhdWx0cyBoZXJlIGlmIG5vdCBhbHJlYWR5IHNldCBpbiBjbWRsaW5lIG9yIGNvbmZpZworICAjIGd1aWRlZCBpbnRlcmFjdGl2ZSBtb2RlIGJ5IGRlZmF1bHQKKyAgTmV0U05NUDo6Q2VydDo6c2V0X2RlZmF1bHQoJG9wdHMsICRjb25maWcsICdpbnRlcmFjdGl2ZScsIDEpOworICAjIHZlcmJvc2Ugb3V0cHV0CisgIE5ldFNOTVA6OkNlcnQ6OnNldF9kZWZhdWx0KCRvcHRzLCAkY29uZmlnLCAndmVyYm9zZScsIDEpOworCisgICMgZmluZCB0bHNkaXIvc3ViZGlycyBvciBtYWtlIGl0CisgICRvcHRzLT57J3Rsc2Rpcid9ID0gJGFwcC0+Y3JlYXRlVGxzRGlyKCk7Cit9CisKK3N1YiBwYXJzZUFyZ3MgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15IEBhcmdzID0gQF87CisKKyAgTmV0U05NUDo6Q2VydDo6R2V0T3B0c0Zyb21BcnJheShcQGFyZ3MsICRvcHRzLCAnaGVscHw/JywgJ3ZlcnNpb258VicsCisJCSAgICAgICdpbnRlcmFjdGl2ZSEnLCAnSScsICd2ZXJib3NlIScsICdRJywgJ2ZvcmNlfEYnLAorCQkgICAgICAnY2ZnZmlsZXxmPXMnLCAnY2ZnZGlyfEM9cycsICd0bHNkaXJ8dGxzRGlyfFQ9cycsCisJCSAgICAgICd0YWd8dD1zJywgJ2lkZW50aXR5fGk9cycsICdkZWJ1Z3xEKycsKTsKKworICBOZXRTTk1QOjpDZXJ0Ojp2ZXJzaW9uKDApIGlmICRvcHRzLT57J3ZlcnNpb24nfTsKKworICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgwKSBpZiAkb3B0cy0+eydoZWxwJ307CisKKyAgIyBwdWxsIG91dCB0aGUgY21kIC0gZ2V0T3B0cyBzaG91bGQgbGVhdmUgaXQgdW50b3VjaGVkIGZvciB1cworICAkb3B0cy0+eydjbWQnfSA9IE5ldFNOTVA6OkNlcnQ6OnB1bGxfY21kKFxAYXJncyk7CisKKyAgIyBzYXZlIGV4dHJhIGFyZ3MgZm9yIGNvbW1hbmQgc3BlY2lmaWMgcHJvY2Vzc2luZworICAkb3B0cy0+eydjbWRhcmdzJ30gPSBbQGFyZ3NdOworCisgICMgQ2hlY2sgZGVidWcgb3B0aW9uIGZpcnN0CisgICROZXRTTk1QOjpDZXJ0OjpERUJVRyA9ICRvcHRzLT57J2RlYnVnJ307CisgICRvcHRzLT57J2Vycid9ID0gJG9wdHMtPnsnb3V0J30gPSAiIiBpZiAkb3B0cy0+eydkZWJ1Zyd9OworICAkb3B0cy0+eydpbnRlcmFjdGl2ZSd9ID0gbm90ICRvcHRzLT57J0knfSBpZiBkZWZpbmVkICRvcHRzLT57J0knfTsKKyAgJG9wdHMtPnsndmVyYm9zZSd9ID0gbm90ICRvcHRzLT57J1EnfSBpZiBkZWZpbmVkICRvcHRzLT57J1EnfTsKKworICAjIHNlYXJjaCBmb3IgY2ZnZGlyIGFuZCBjZmdmaWxlIGJhc2VkIG9uIG9wdHMgYW5kIGNvbmZwYXRoCisgICRvcHRzLT57J2NmZ2Rpcid9ID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZmdkaXIoJG9wdHMtPnsnY2ZnZGlyJ30sCisJCQkJCQkgJG9wdHMtPnsnY2ZnZmlsZSd9KTsKKyAgJG9wdHMtPnsnY2ZnZmlsZSd9ID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZmdmaWxlKCRvcHRzLT57J2NmZ2Rpcid9LAorCQkJCQkJICAgJG9wdHMtPnsnY2ZnZmlsZSd9KTsKK30KKworc3ViIGNyZWF0ZVRsc0RpciB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRkaXI7CisgIG15ICRmaWxlOworICBteSAkY21kOworCisgICRkaXIgPSAkY29uZmlnLT5pbmhlcml0KCd0bHNEaXInKTsKKworICBpZiAobm90IGRlZmluZWQgJGRpcikgeworICAgIG15ICRjZmdkaXIgPSAkb3B0cy0+eydjZmdkaXInfTsKKyAgICBkaWUoInVuZGVmaW5lZCBjZmdkaXI6IHVuYWJsZSB0byBjcmVhdCB0bHNkaXI6IGV4aXRpbmcuLi5cbiIpIHVubGVzcyBkZWZpbmVkICRjZmdkaXI7CisgICAgJGRpciA9ICIkY2ZnZGlyLyROZXRTTk1QOjpDZXJ0OjpUTFNESVIiOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJ0bHNEaXIgaXM6ICRkaXJcbiIsICRvcHRzKTsKKyAgJGRpciA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCRkaXIpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInRsc0RpciBpczogJGRpclxuIiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgidGxzRGlyIG5vdCBmb3VuZCwgY3JlYXRpbmdcbiIsICRvcHRzKSB1bmxlc3MgLWQgJGRpcjsKKyAgTmV0U05NUDo6Q2VydDo6bWFrZV9kaXJzKCRvcHRzLCAkZGlyLCAwNzAwLCBATmV0U05NUDo6Q2VydDo6VExTRElSUyk7CisKKyAgbXkgJHNzbF9jZmdfaW4gPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHSU4sJGRpcik7CisKKyAgIyBFeGlzdGluZyBvcGVuc3NsLmNvbmYgdG1wbCB3aWxsIGJlIHByZXNlcnZlZAorICBpZiAoLWYgJHNzbF9jZmdfaW4pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojpkd2FybigiT3BlblNTTCB0ZW1wbGF0ZSBleGlzdHMgKCRzc2xfY2ZnX2luKTogcHJlc2VydmluZy4uLiIsICRvcHRzKTsKKyAgfQorCisgIGlmIChub3QgLWYgJHNzbF9jZmdfaW4pIHsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIm1ha2Vfb3BlbnNzbF9jb25mKCRzc2xfY2ZnX2luKSIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0OjptYWtlX29wZW5zc2xfY29uZigkc3NsX2NmZ19pbik7CisgICAgY2htb2QoMDYwMCwgJHNzbF9jZmdfaW4pOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjcmVhdGVUbHNEaXI6IGRvbmVcbiIsICRvcHRzKTsKKyAgcmV0dXJuICRkaXI7Cit9CisKK215IEBpbnRlcmFjdGl2ZV9vcHMgPSAoWydnZW5jZXJ0JywgIkdlbmVyYXRlIGEgc2lnbmVkIGNlcnRpZmljYXRlIl0sCisJICAgWydnZW5jYScsICJHZW5lcmF0ZSBhIENBIGNlcnRpZmljYXRlIl0sCisJICAgWydnZW5jc3InLCAiR2VuZXJhdGUgYSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QiXSwKKwkgICBbJ3NpZ25jc3InLCAiU2lnbiBhIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCJdLAorCSAgKTsKKworc3ViIHJ1biB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGNtZCA9ICRvcHRzLT57J2NtZCd9OworCisgICMgbXVzdCBoYXZlIGEgY29tbWFuZCBpbiBub24tSW50ZXJhY3RpdmUgbW9kZQorICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgzKSBpZiAhJG9wdHMtPnsnaW50ZXJhY3RpdmUnfSBhbmQgISRvcHRzLT57J2NtZCd9OworCisgICMgIGNoYW5nZSBkaXIgdGxzIGRpciAtIHRoZSBjd2QgZm9yIGFsbCBjb21tYW5kcyAtIHNhdmUgY3dkIGZpcnN0CisgICRvcHRzLT57J3JkaXInfSA9IDo6Z2V0Y3dkKCk7CisgIGNoZGlyKCRvcHRzLT57J3Rsc2Rpcid9KSBvciBkaWUoImNvdWxkJ250IGNoYW5nZSBkaXJlY3Rvcnk6ICRvcHRzLT57dGxzZGlyfSIpOworICAjIGRpc3BsYXkgY29udGV4dAorICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIlBBVEg6ICRFTlZ7UEFUSH1cblxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNvbmZpZyBmaWxlOiAkb3B0cy0+e2NmZ2ZpbGV9XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY29uZmlnIGRpcjogICRvcHRzLT57Y2ZnZGlyfVxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInRscyBkaXI6ICAgICAkb3B0cy0+e3Rsc2Rpcn1cbiIsICRvcHRzKTsKKworICBteSAkY21kc3RyID0gam9pbignICcsICRjbWQsIEB7JG9wdHMtPnsnY21kYXJncyd9fSk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY29tbWFuZDogICAgICRjbWRzdHJcbiIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0OjpHZXRPcHRzRnJvbUFycmF5KFxAeyRvcHRzLT57J2NtZGFyZ3MnfX0sICRvcHRzLAorCQkJCSAgJ3dpdGgtY2F8YT1zJywgJ2NhfEE9cycsJ2NzcnxyPXMnLAorCQkJCSAgJ2Zyb20tY3J0fHg9cycsICdjcnR8WD1zJywgJ2RheXN8ZD1zJywKKwkJCQkgICdjbnxuPXMnLCAnZW1haWx8ZT1zJywgJ2hvc3R8aD1zJywKKwkJCQkgICdzYW58cz1zQCcsICdvcmd8bz1zJywgJ3VuaXR8dT1zJywKKwkJCQkgICdjb3VudHJ5fGM9cycsICdzdGF0ZXxwcm92aW5jZXxwPXMnLAorCQkJCSAgJ2xvY2FsaXR5fGw9cycsICdicmllZnxiJywKKwkJCQkgIEBOZXRTTk1QOjpDZXJ0OjpYNTA5Rk1UUyk7CisKKyAgIyBwcm9jZXNzIGV4dHJhIGFyZ3M7IC0tPGNmZy1uYW1lPls9PHZhbD5dCisgICRhcHAtPnByb2Nlc3NFeHRyYUFyZ3MoKTsKKworICAjIElmIGluIGludGVyYWN0aXZlIG1vZGUgLSBmaWxsIG1pc3NpbmcgaW5mbyBieSBpbnRlcnZpZXdpbmcgdXNlcgorICBpZiAobm90IGRlZmluZWQgJGNtZCBvciBncmVwIHsvJGNtZC99IG1hcCB7JF8tPlswXX0gQGludGVyYWN0aXZlX29wcykgeworICAgICRhcHAtPnVzZXJJbnB1dCgpIGlmICRvcHRzLT57aW50ZXJhY3RpdmV9OworICAgICRjbWQgPSAkb3B0cy0+eydjbWQnfTsgIyBtYXkgaGF2ZSBjaGFuZ2VkCisgIH0KKworICAjIHJlc29sdmUgaW5wdXQgYXJncyB0byBmaWxlbmFtZXMKKyAgJGFwcC0+cmVzb2x2ZUNydEFyZ3MoKTsKKworICAjIHVzZSBlbnYuIG9yIG1lcmdlIHRlbXBsYXRlIGZvciBPcGVuU1NMIGNvbmZpZworICAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIHx8PSAkYXBwLT5vcGVuc3NsQ2ZnKCk7CisKKyAgaWYgKCRjbWQgPX4gL15nZW5jYSQvKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMSkgaWYgZGVmaW5lZCAkb3B0cy0+eydmcm9tLWNydCd9IG9yIGRlZmluZWQgJG9wdHMtPnsnY3NyJ307CisgICAgJGFwcC0+Z2VuQ2EoJG9wdHMtPnsnd2l0aC1jYSd9KTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXmdlbmNlP3J0JC8pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgxKSBpZiBkZWZpbmVkICRvcHRzLT57J2Zyb20tY3J0J30gb3IgZGVmaW5lZCAkb3B0cy0+eydjc3InfTsKKyAgICAkYXBwLT5nZW5DZXJ0KCRvcHRzLT57J3dpdGgtY2EnfSk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15nZW5jc3IkLykgeworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDEpIGlmIGRlZmluZWQgJG9wdHMtPnsnd2l0aC1jYSd9IG9yIGRlZmluZWQgJG9wdHMtPnsnY3J0J307CisgICAgJGFwcC0+Z2VuQ3NyKCk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15zaWduY3NyJC8pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgxKSB1bmxlc3MgZGVmaW5lZCAkb3B0cy0+eyd3aXRoLWNhJ30gYW5kIGRlZmluZWQgJG9wdHMtPnsnY3NyJ307CisgICAgJGFwcC0+c2lnbkNzcigpOworICB9IGVsc2lmICgkY21kID1+IC9ec2hvdyhjZT9ydHM/KT8kLykgeworICAgICRhcHAtPnNob3coJ2NlcnRzJyk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15zaG93Y2FzPyQvKSB7CisgICAgJGFwcC0+c2hvdygnY2EtY2VydHMnKTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXmltcG9ydCQvKSB7CisgICAgJGFwcC0+aW1wb3J0KCk7CisgIH0gZWxzZSB7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoKTsKKyAgfQorfQorCitzdWIgcHJvY2Vzc0V4dHJhQXJncyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgQGFyZ3M7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJwcm9jZXNzaW5nIGV4dHJhIGFyZ3MuLi5cbiIsICRvcHRzKTsKKworICB3aGlsZSAoQHskb3B0cy0+eydjbWRhcmdzJ319KSB7CisgICAgbXkgJGFyZyA9IHNoaWZ0KEB7JG9wdHMtPnsnY21kYXJncyd9fSk7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmb3VuZDogYXJnIC0tPiAkYXJnXG4iLCAkb3B0cyk7CisgICAgaWYgKCRhcmcgPX4gL14tKyhcdyspKD86PSguKj8pKT9ccyokLykgeworICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmb3VuZDogYXJnKCQxKSB2YWwoJDIpXG4iLCAkb3B0cyk7CisgICAgICBpZiAoZXhpc3RzICRvcHRzLT57JDF9KSB7CisgICAJTmV0U05NUDo6Q2VydDo6dndhcm4oIm9wdGlvbiAoJDEpIGFscmVhZHkgc2V0OiBvdmVyd3JpdGluZ1xuIiwgJG9wdHMpOworICAgICAgfSAKKyAgICAgICRvcHRzLT57JDF9ID0gKGRlZmluZWQgJDIgPyAkMiA6IDEpOworICAgIH0gZWxzZSB7CisgICAgICBwdXNoKEBhcmdzLCAkYXJnKTsKKyAgICB9CisgIH0KKyAgQHskb3B0cy0+eydjbWRhcmdzJ319ID0gQGFyZ3M7Cit9CisKK3N1YiByZXNvbHZlQ3J0QXJncyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKworICAjIGZpbmQgY2EsIGNydCwgY3NyIGFyZ3MgaWYgcHJlc2VudCBhbmQgcmV0dXJuIGZ1bGx5IHF1YWxpZmllZCBwYXRoCisgIGlmIChkZWZpbmVkICRvcHRzLT57J3dpdGgtY2EnfSkgeworICAgIG15ICRjYTsKKyAgICAkY2EgPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NlcnRzKCRvcHRzLCAnY2EtY2VydHMnLCAkb3B0cy0+eyd3aXRoLWNhJ30pOworICAgIGRpZSgidW5hYmxlIHRvIGxvY2F0ZSBDQSBjZXJ0aWZpY2F0ZSAoJG9wdHMtPnsnd2l0aC1jYSd9KVxuIikgdW5sZXNzIC1lICRjYTsKKyAgICBkaWUoInVuYWJsZSByZWFkIENBIGNlcnRpZmljYXRlICgkb3B0cy0+eyd3aXRoLWNhJ30pXG4iKSB1bmxlc3MgLXIgJGNhOworICAgICRvcHRzLT57J3dpdGgtY2EnfSA9ICRjYTsKKyAgfQorCisgIGlmIChkZWZpbmVkICRvcHRzLT57J2Zyb20tY3J0J30pIHsKKyAgICBteSAkY3J0OworICAgICRjcnQgPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NlcnRzKCRvcHRzLCAnY2VydHMnLCAkb3B0cy0+eydmcm9tLWNydCd9KTsKKyAgICBkaWUoInVuYWJsZSB0byBsb2NhdGUgY2VydGlmaWNhdGUgKCRvcHRzLT57J2Zyb20tY3J0J30pXG4iKSB1bmxlc3MgLWUgJGNydDsKKyAgICBkaWUoInVuYWJsZSByZWFkIGNlcnRpZmljYXRlICgkb3B0cy0+eydmcm9tLWNydCd9KVxuIikgdW5sZXNzIC1yICRjcnQ7CisgICAgJG9wdHMtPnsnZnJvbS1jcnQnfSA9ICRjcnQ7CisgIH0KKworICBpZiAoZGVmaW5lZCAkb3B0cy0+eydjc3InfSkgeworICAgIG15ICRjc3I7CisgICAgJGNzciA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2VydHMoJG9wdHMsICdjc3JzJywgJG9wdHMtPnsnY3NyJ30pOworICAgIGRpZSgidW5hYmxlIHRvIGxvY2F0ZSBDU1IgY2VydGlmaWNhdGUgKCRvcHRzLT57Y3NyfSlcbiIpIHVubGVzcyAtZSAkY3NyOworICAgIGRpZSgidW5hYmxlIHJlYWQgQ1NSIGNlcnRpZmljYXRlICgkb3B0cy0+e2Nzcn0pXG4iKSB1bmxlc3MgLXIgJGNzcjsKKyAgICAkb3B0cy0+eydjc3InfSA9ICRjc3I7CisgIH0KK30KKworc3ViIG9wZW5zc2xDZmcgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkc2FuID0gJGNvbmZpZy0+aW5oZXJpdCgnc2FuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnc3ViamVjdEFsdE5hbWUnKTsKKyAgbXkgJHNzbF9jZmdfaW4gPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHSU4pOworICBteSAkc3NsX2NmZ19vdXQgPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHT1VUKTsKKworICBpZiAobm90IC1mICRzc2xfY2ZnX2luKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dndhcm4oIk9wZW5TU0wgdGVtcGxhdGUgbm90IGZvdW5kOiAkc3NsX2NmZ19pblxuIiwgJG9wdHMpOworICAgIGRpZSgibm8gT3BlblNTTCB0ZW1wbGF0ZSIpOworICB9CisKKyAgb3BlbihJTiwgJHNzbF9jZmdfaW4pIG9yIGRpZSgidW5hYmxlIHRvIG9wZW4gT3BlblNTTCB0ZW1wbGF0ZTogJHNzbF9jZmdfaW5cbiIpOworICBvcGVuKE9VVCwgIj4kc3NsX2NmZ19vdXQiKSBvciBkaWUoInVuYWJsZSB0byBvcGVuIE9wZW5TU0wgY29uZmlnOiAkc3NsX2NmZ19vdXRcbiIpOworCisgIHByaW50IE9VVCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKKyAgcHJpbnQgT1VUICIjIyMjIyAgICBXYXJuaW5nOiBEbyBOb3QgRWRpdCAtIEdlbmVyYXRlZCBGaWxlICAgICMjIyMjXG4iOworICBwcmludCBPVVQgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7CisgIHdoaWxlICg8SU4+KSB7CisgICAgaWYgKCRzYW4pIHsKKyAgICAgIHMvXCVcWyhbXlxdXSo/KVxdLyQxLzsKKyAgICB9IGVsc2UgeworICAgICAgcy9cJVxbKFteXF1dKj8pXF0vLzsKKyAgICB9CisgICAgcHJpbnQgT1VUICRfOworICB9CisgIGNsb3NlKElOKTsKKyAgY2xvc2UoT1VUKTsKKworICByZXR1cm4gJHNzbF9jZmdfb3V0OworfQorCitzdWIgb3BlbnNzbEVudiB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisKKyAgbXkgJGNuID0gc2hpZnQ7CisgIG15ICRkYXlzID0gc2hpZnQ7CisgIG15ICRkaXIgPSBzaGlmdCB8fCAiLiI7CisgICMgWFhYIC0gbmVlZCB0byBoYW5kbGUgY29uZmlnJ2QgaWRlbnRpdHkgaGVyZQorICBteSAkbmFtZSA9ICRjb25maWctPmluaGVyaXQoIm5hbWUiKTsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCJob3N0Iik7CisgIG15ICRlbWFpbCA9ICRjb25maWctPmluaGVyaXQoImVtYWlsIik7CisgIG15ICRjb3VudHJ5ID0gJGNvbmZpZy0+aW5oZXJpdCgiY291bnRyeSIpOworICBteSAkc3RhdGUgPSAkY29uZmlnLT5pbmhlcml0KCJzdGF0ZSIpOworICBteSAkbG9jYWxpdHkgPSAkY29uZmlnLT5pbmhlcml0KCJsb2NhbGl0eSIpOworICBteSAkb3JnID0gJGNvbmZpZy0+aW5oZXJpdCgib3JnIik7CisgIG15ICRvcmdfdW5pdCA9ICRjb25maWctPmluaGVyaXQoInVuaXQiKSB8fCAkY29uZmlnLT5pbmhlcml0KCJvcmdVbml0Iik7CisgIG15ICRzYW47CisgIG15ICRzYW5fYXJyX3JlZjsKKyAgbXkgJG1kID0gJGNvbmZpZy0+aW5oZXJpdCgibXNnRGlnZXN0Iik7CisgIG15ICRrc2l6ZSA9ICRjb25maWctPmluaGVyaXQoImtleVNpemUiKTsKKworICBteSAkZW52OworCisgICRlbnYgLj0gIiBLU0laRT0ka3NpemUiIGlmIGRlZmluZWQgJGtzaXplOworICAkZW52IC49ICIgREFZUz0kZGF5cyIgaWYgZGVmaW5lZCAkZGF5czsKKyAgJGVudiAuPSAiIE1EPSRtZCIgaWYgZGVmaW5lZCAkbWQ7CisKKyAgJGVudiAuPSAiIERJUj0nJGRpciciIGlmIGRlZmluZWQgJGRpcjsKKworICAkZW52IC49ICIgRU1BSUw9JGVtYWlsIiBpZiBkZWZpbmVkICRlbWFpbDsKKyAgJGVudiAuPSAiIENOPSckY24nIiBpZiBkZWZpbmVkICRjbjsKKyAgJGVudiAuPSAiIE9SRz0nJG9yZyciIGlmIGRlZmluZWQgJG9yZzsKKyAgJGVudiAuPSAiIE9SR19VTklUPSckb3JnX3VuaXQnIiBpZiBkZWZpbmVkICRvcmdfdW5pdDsKKyAgJGVudiAuPSAiIENPVU5UUlk9JGNvdW50cnkiIGlmIGRlZmluZWQgJGNvdW50cnk7CisgICRlbnYgLj0gIiBTVEFURT0kc3RhdGUiIGlmIGRlZmluZWQgJHN0YXRlOworICAkZW52IC49ICIgTE9DQUxJVFk9JGxvY2FsaXR5IiBpZiBkZWZpbmVkICRsb2NhbGl0eTsKKworICAkc2FuX2Fycl9yZWYgPSAkY29uZmlnLT5pbmhlcml0KCdzdWJqZWN0QWx0TmFtZScpOworICAkc2FuID0gam9pbignXCxcICcsIEB7JHNhbl9hcnJfcmVmfSkgaWYgcmVmICRzYW5fYXJyX3JlZjsKKyAgJHNhbl9hcnJfcmVmID0gJGNvbmZpZy0+aW5oZXJpdCgnc2FuJyk7CisgICRzYW4gLj0gam9pbignXCxcICcsIEB7JHNhbl9hcnJfcmVmfSkgaWYgcmVmICRzYW5fYXJyX3JlZjsKKyAgJHNhbiA9fiBzL0VNQUlMOi9lbWFpbDovZzsKKyAgJGVudiAuPSAiIFNBTj0kc2FuIiBpZiBkZWZpbmVkICRzYW47CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJvcGVuc3NsRW52OiAkZW52XG4iLCAkb3B0cyk7CisKKyAgcmV0dXJuICRlbnY7Cit9CitvdXIgQHNhbl9wcmVmaXggPSAoWydkaXJOYW1lOicsICJlLmcuLCBkaXJOYW1lOi91c3Ivc2hhcmUvc25tcC90bHMiXSwKKwkJICAgWydETlM6JywgImUuZy4sIEROUzp0ZXN0Lm5ldC1zbm1wLm9yZykiXSwKKwkJICAgWydlbWFpbDonLCAiZS5nLiwgZW1haWw6YWRtaW5cQG5ldC1zbm1wLm9yZyJdLAorCQkgICBbJ0lQOicsICJlLmcuLCBJUDoxOTIuMTY4LjEuMSJdLAorCQkgICBbJ1JJRDonLCAiZS5nLiwgUklEOjEuMS4zLjYuMjAiXSwKKwkJICAgWydVUkk6JywgImUuZy4sIFVSSTpodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZyJdKTsKKworc3ViIHVzZXJJbnB1dEROIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJHByb21wdDsKKyAgbXkgJHJldDsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCJob3N0IikgfHwgOjpob3N0bmFtZSgpOworICBteSAkZW1haWwgPSAkY29uZmlnLT5pbmhlcml0KCdlbWFpbCcpIHx8IGdldGxvZ2luKCkgLiAiXEAkaG9zdCI7CisKKyAjIGdldCBFTUFJTAorICAkcHJvbXB0ID0gIkVudGVyIEVtYWlsIjsKKyAgJHJldCA9ICRlbWFpbDsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJcdEVtYWlsIEFkZHJlc3MgLSAoZS5nLiwgPG5hbWU+QDxkb21haW4+KSIpOworICAkZW1haWwgPSAkb3B0cy0+eydlbWFpbCd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IENOCisgICRwcm9tcHQgPSAiRW50ZXIgQ29tbW9uIE5hbWUiOworICAkcmV0ID0gKCRvcHRzLT57J2NtZCd9IGVxICdnZW5jYScgPyAiY2EtJGhvc3QiIDogJGVtYWlsKTsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ2NuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY29tbW9uTmFtZScpIHx8ICRyZXQ7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiXHRDb21tb24gTmFtZSAtIChlLmcuLCBuZXQtc25tcC5vcmcpIik7CisgICRvcHRzLT57J2NuJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgT1JHCisgICRwcm9tcHQgPSAiRW50ZXIgT3JnYW5pemF0aW9uIjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ29yZycpIHx8ICdOZXQtU05NUCc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiXHRPcmdhbml6YXRpb24gLSAoZS5nLiwgTmV0LVNOTVApIik7CisgICRvcHRzLT57J29yZyd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IE9SR19VTklUCisgICRwcm9tcHQgPSAiRW50ZXIgT3JnYW5pemF0aW9uYWwgVW5pdCI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCd1bml0JykgfHwgJ0RldmVsb3BtZW50JzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJcdE9yZ2FuaXphdGlvbmFsIFVuaXQgLSAoZS5nLiwgRGV2ZWxvcG1lbnQpIik7CisgICRvcHRzLT57J3VuaXQnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBDT1VOVFJZCisgICRwcm9tcHQgPSAiRW50ZXIgQ291bnRyeSBDb2RlIjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ2NvdW50cnknKSB8fCAnVVMnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIkNvdW50cnkgQ29kZSwgMiBsZXR0ZXJzICg8dGFiPiBmb3Igb3B0aW9ucykiLAorCQkJCSAkTmV0U05NUDo6Q2VydDo6TUFUQ0gsIFxAQ0MpOworICAkb3B0cy0+eydjb3VudHJ5J30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgU1RBVEUoUHJvdmluY2UpCisgICRwcm9tcHQgPSAiRW50ZXIgU3RhdGUgb3IgUHJvdmluY2UiOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnc3RhdGUnKSB8fCAnQ0EnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIlx0U3RhdGUgb3IgUHJvdmluY2UgLSAoZS5nLiwgQ0EpIik7CisgICRvcHRzLT57J3N0YXRlJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgTE9DQUxJVFkKKyAgJHByb21wdCA9ICJFbnRlciBMb2NhbGl0eSI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdsb2NhbGl0eScpIHx8ICdEYXZpcyc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LCAiXHRMb2NhbGl0eSAtIChlLmcuLCBEYXZpcykiKTsKKyAgJG9wdHMtPnsnbG9jYWxpdHknfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBTQU4gKGxvb3ApCisgIGlmICghJGNvbmZpZy0+eydicmllZid9KSB7CisgICAgICBwcmludCAiRW50ZXIgU3ViamVjdCBBbHQgTmFtZXMuICBFeGFtcGxlczpcbiI7CisgICAgICBmb3JlYWNoIG15ICRwYWlyIChAc2FuX3ByZWZpeCkgeworCSAgcHJpbnRmKCJcdCUtMTAuMTBzICVzXG4iLCAkcGFpci0+WzBdLCAkcGFpci0+WzFdKTsKKyAgICAgIH0KKyAgfQorICBkbyB7CisgICAgJHJldCA9ICdkb25lJzsKKyAgICAkcHJvbXB0ID0gIkVudGVyIFN1YmplY3QgQWx0IE5hbWUgKGVudGVyICdkb25lJyB3aGVuIGZpbmlzaGVkKSBbJHJldF06ICI7CisgICAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlICgkcHJvbXB0LCAkcmV0LAorCQkJICAgICJcdFN1YmplY3QgQWx0IE5hbWUgLSAoPHR5cGU+Ojx2YWw+KSIsCisJCQkgICAgICROZXRTTk1QOjpDZXJ0OjpQUkVNQVRDSCwgXEBzYW5fcHJlZml4KTsKKyAgICBwdXNoKEB7JG9wdHMtPnsnc2FuJ319LCAkcmV0KSBpZiBkZWZpbmVkICRyZXQgYW5kICRyZXQgbmUgJ2RvbmUnOworICB9IHdoaWxlIChkZWZpbmVkICRyZXQgYW5kICRyZXQgbmUgJ2RvbmUnKTsKK30KKworb3VyIEBzbm1wX2FwcHMgPSAoWydzbm1wJywgJ0dlbmVyaWMgQ2VydGlmaWNhdGUnXSwKKwkJICBbJ3NubXBhcHAnLCdDbGllbnQgQ2VydGlmaWNhdGUnXSwKKwkJICBbJ3NubXBkJywnQWdlbnQgQ2VydGlmaWNhdGUnXSwKKwkJICBbJ3NubXB0cmFwZCcsJ1RyYXAtYWdlbnQgQ2VydGlmaWNhdGUnXSk7CisKK3N1YiB1c2VySW5wdXRUYWcgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkcmV0OworICBteSAkcHJvbXB0OworCisgIHByaW50ICJBcHBsaWNhdGlvbiBUYWc6XG5cdHVzZWQgdG8gbmFtZSB0aGUgY2VydGlmaWNhdGUgYW5kIGRpY3RhdGUgaXRzIGZpbGVuYW1lXG4iOworICBwcmludCAiXHRJdCBtYXkgYWxzbyBhc3NvY2lhdGUgaXQgd2l0aCBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gKGVnIFwic25tcGRcIilcbiI7CisgIHByaW50ICJcdGlmICdub25lJywgYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gb3RoZXIgcGFyYW1ldGVyc1xuIjsKKyAgcHJpbnQgIlx0ZW50ZXIgPHRhYj48dGFiPiBmb3IgdHlwaWNhbCBvcHRpb25zLCBvciBlbnRlciBuZXcgbmFtZVxuIjsKKyAgJHByb21wdCA9ICJFbnRlciBBcHBsaWNhdGlvbiBUYWciOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgndGFnJykgfHwgJ25vbmUnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIkFwcGxpY2F0aW9uIFRhZyBhc3NvY2FpYXRlZCB3aXRoIGNlcnRpZmljYXRlIiwKKwkJCQkgKG5vdCAkTmV0U05NUDo6Q2VydDo6TUFUQ0gpLCBcQHNubXBfYXBwcyk7CisgICRvcHRzLT57J3RhZyd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQgYW5kICRyZXQgbmUgJ25vbmUnOworfQorCitzdWIgdXNlcklucHV0IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJHByb21wdDsKKyAgbXkgJHJldDsKKworICBwcmludCAiQ2hvb3NlIGFuIG9wZXJhdGlvbjpcbiI7CisgIGZvcmVhY2ggbXkgJG9wIChAaW50ZXJhY3RpdmVfb3BzKSB7CisgICAgcHJpbnQgIlx0JG9wLT5bMF1cdC0gICRvcC0+WzFdXG4iOworICB9CisKKyAgJHByb21wdCA9ICJPcGVyYXRpb24iOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnY21kJykgfHwgJGludGVyYWN0aXZlX29wc1swXVswXTsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJDZXJ0aWZjaWF0ZSBPcGVyYXRpb24gdG8gcGVyZm9ybSIsCisJCQkJICROZXRTTk1QOjpDZXJ0OjpNQVRDSCwgXEBpbnRlcmFjdGl2ZV9vcHMpOworCisgICRvcHRzLT57J2NtZCd9ID0gJHJldDsKKworICBpZiAoJHJldCA9fiAvXmdlbmNlcnQkLykgeworICAgICMgZ2V0IHRhZworICAgICRhcHAtPnVzZXJJbnB1dFRhZygpOworICAgICMgZ2V0IEROCisgICAgJGFwcC0+dXNlcklucHV0RE4oKTsKKyAgICAjIHNlbGYtc2lnbmVkL0NBLXNpZ25lZChjYS1jZXJ0KQorICB9IGVsc2lmICgkcmV0ID1+IC9eZ2VuY2EkLykgeworICAgICMgZ2V0IEROCisgICAgJGFwcC0+dXNlcklucHV0RE4oKTsKKyAgfSBlbHNpZiAoJHJldCA9fiAvXmdlbmNzciQvKSB7CisgICAgIyBnZXQgdGFnCisgICAgJGFwcC0+dXNlcklucHV0VGFnKCk7CisgICAgIyBnZXQgRE4KKyAgICAkYXBwLT51c2VySW5wdXRETigpOworICB9IGVsc2lmICgkcmV0ID1+IC9ec2lnbmNzciQvKSB7CisgICAgIyBnZXQgY3NyCisgICAgJHByb21wdCA9ICJDaG9vc2UgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IjsKKyAgICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnY3NyJyk7CisgICAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCk7CisgICAgJG9wdHMtPnsnY3NyJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgICAjIGdldCBjYQorICAgICRwcm9tcHQgPSAiQ2hvb3NlIENBIENlcnRpZmljYXRlIjsKKyAgICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnd2l0aC1jYScpOworICAgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQpOworICAgICRvcHRzLT57J3dpdGgtY2EnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICB9IGVsc2UgeworICAgIE5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJhYm9ydGluZyBvcGVyYXRpb246IGV4aXRpbmcuLi5cbiIsICRvcHRzKTsKKyAgICBleGl0KDEpOworICB9Cit9CisKK3N1YiBjcmVhdGVDYURpciB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGRpciA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGZpbGU7CisgIG15ICRjbWQ7CisKKyAgTmV0U05NUDo6Q2VydDo6bWFrZV9kaXJzKCRvcHRzLCAkZGlyLCAwNzAwLCduZXdjZXJ0cycsJ3ByaXZhdGUnKTsKKworICAkZmlsZSA9ICIkZGlyLyROZXRTTk1QOjpDZXJ0OjpTRVJJQUwiOworICBpZiAobm90IC1mICRmaWxlKSB7CisgICAgJGNtZCA9ICJlY2hvICcwMScgPiAnJGZpbGUnIjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIiRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCRjbWQsICRvcHRzKTsKKyAgICBjaG1vZCgwNjAwLCAkZmlsZSk7CisgIH0KKworICAkZmlsZSA9ICIkZGlyLyROZXRTTk1QOjpDZXJ0OjpJTkRFWCI7CisgIGlmIChub3QgLWYgJGZpbGUpIHsKKyAgICAkY21kID0gInRvdWNoICckZmlsZSciOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oJGNtZCwgJG9wdHMpOworICAgIGNobW9kKDA2MDAsICRmaWxlKTsKKyAgfQorfQorCitzdWIgZ2VuQ2EgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoJ2hvc3QnKSB8fCA6Omhvc3RuYW1lKCk7CisgIG15ICRkYXlzID0gJGNvbmZpZy0+aW5oZXJpdCgnZGF5cycpIHx8ICRjb25maWctPmluaGVyaXQoJ2NhRGF5cycpIHx8IAorICAgICAgICAgICAgICROZXRTTk1QOjpDZXJ0OjpERUZDQURBWVM7CisgIG15ICRjbiA9ICRjb25maWctPmluaGVyaXQoJ2NuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY29tbW9uTmFtZScpIHx8CisgICAgICAgICAgICJjYS0kaG9zdCI7CisgIG15ICRjYSA9ICRjb25maWctPmluaGVyaXQoJ3dpdGgtY2EnKTsKKyAgbXkgJHRhZyA9ICRjb25maWctPmluaGVyaXQoJ3RhZycpIHx8ICRjbjsKKworICAjIGNyZWF0ZSBDQSBkaXIKKyAgbXkgJGRpciA9ICIuY2EvJHRhZyI7CisgICRhcHAtPmNyZWF0ZUNhRGlyKCRkaXIpOworCisgIG15ICRvdXRDcnQgPSAiJE5ldFNOTVA6OkNlcnQ6OkNBRElSLyR0YWcuY3J0IjsKKyAgbXkgJG91dEtleSA9ICIkTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kdGFnLmtleSI7CisKKyAgIyBzZXQgY29tbWFuZCBlbnYKKyAgbXkgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDcnQsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRLZXksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKworICBteSAkY21kID0gIiRlbnYgb3BlbnNzbCByZXEgLWV4dGVuc2lvbnMgdjNfY2FfY3JlYXRlIC1uZXcgLWRheXMgJGRheXMgLWJhdGNoIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyAta2V5b3V0ICckb3V0S2V5JyI7CisgICRjbWQgLj0gIiAtbm9kZXMiOworCisgIGlmIChkZWZpbmVkICRjYSkgeworICAgICMgd2UgaGF2ZSB0byBnZW4gYSBjc3IgYW5kIHRoZW4gc2lnbiBpdCwgbXVzdCBwcmVzZXJ2ZSBDQTpUUlVFCisgICAgbXkgJG91dENzciA9ICIkTmV0U05NUDo6Q2VydDo6TkVXQ1JURElSLyR0YWcuY3NyIjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENzciwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworICAgICRjbWQgLj0gIiAtb3V0ICckb3V0Q3NyJyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNhIChnZW5jc3IpOiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworCisgICAgbXkgJGNhX2Jhc2UgPSA6OmJhc2VuYW1lKCRjYSwgQE5ldFNOTVA6OkNlcnQ6OkNSVFNVRkZJWEVTKTsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNhX2Jhc2U6ICRjYV9iYXNlXG4iLCAkb3B0cyk7CisKKyAgICAjIHNldCBjb21tYW5kIGVudgorICAgICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMsICIuY2EvJGNhX2Jhc2UiKTsKKworICAgICRjbWQgPSAiJGVudiBvcGVuc3NsIGNhIC1leHRlbnNpb25zIHYzX2NhX3NpZ25fY2EgLWRheXMgJGRheXMgLWNlcnQgJyRjYScgLWtleWZpbGUgJyROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyRjYV9iYXNlLmtleScgLWluICckb3V0Q3NyJyAtYmF0Y2ggLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIC1vdXQgJyRvdXRDcnQnIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ2EgKHNpZ25jc3IpOiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworICB9IGVsc2UgeworICAgICRjbWQgLj0gIiAteDUwOSAtb3V0ICckb3V0Q3J0JyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNhOiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJDQSBHZW5lcmF0ZWQ6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0Q3J0XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0S2V5XG4iLCAkb3B0cyk7Cit9CisKK3N1YiBnZW5DZXJ0IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCJob3N0IikgfHwgOjpob3N0bmFtZSgpOworICBteSAkZW1haWwgPSAkY29uZmlnLT5pbmhlcml0KCJlbWFpbCIpIHx8IGdldGxvZ2luKCkgLiAiXEAkaG9zdCI7CisgIG15ICRkYXlzID0gJGNvbmZpZy0+aW5oZXJpdCgnZGF5cycpIHx8ICRjb25maWctPmluaGVyaXQoJ2NydERheXMnKSB8fCAkTmV0U05NUDo6Q2VydDo6REVGQ1JUREFZUzsKKyAgbXkgJGNuID0gJGNvbmZpZy0+aW5oZXJpdCgnY24nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjb21tb25OYW1lJyk7CisgIG15ICRjYSA9ICRjb25maWctPmluaGVyaXQoJ3dpdGgtY2EnKTsKKyAgbXkgJGNtZDsKKworICBteSAkdGFnID0gJG9wdHMtPnsndGFnJ30gfHwgJ3NubXAnOworICAkY24gfHw9IChOZXRTTk1QOjpDZXJ0Ojppc19zZXJ2ZXIoJHRhZykgPyAkaG9zdCA6ICRlbWFpbCk7CisKKyAgbXkgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cyk7CisKKyAgbXkgJG91dENydCA9ICIkTmV0U05NUDo6Q2VydDo6Q1JURElSLyR0YWcuY3J0IjsKKyAgbXkgJG91dEtleSA9ICIkTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kdGFnLmtleSI7CisKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDcnQsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRLZXksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKworICAkY21kID0gIiRlbnYgb3BlbnNzbCByZXEgLWV4dGVuc2lvbnMgdjNfdXNlcl9jcmVhdGUgLW5ldyAtZGF5cyAkZGF5cyAta2V5b3V0ICckb3V0S2V5JyAtYmF0Y2ggLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIjsKKyAgJGNtZCAuPSAiIC1ub2RlcyI7CisKKyAgaWYgKGRlZmluZWQgJGNhKSB7CisgICAgbXkgJG91dENzciA9ICIkTmV0U05NUDo6Q2VydDo6TkVXQ1JURElSLyR0YWcuY3NyIjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENzciwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworICAgICRjbWQgLj0gIiAtb3V0ICckb3V0Q3NyJyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNlcnQgKGdlbmNzcik6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisKKyAgICAjIFhYWCBjbGVhbnVwIHRoaXMgdGVtcCBDU1IKKyAgICBteSAkY2FfYmFzZSA9IDo6YmFzZW5hbWUoJGNhLCBATmV0U05NUDo6Q2VydDo6Q1JUU1VGRklYRVMpOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY2FfYmFzZTogJGNhX2Jhc2VcbiIsICRvcHRzKTsKKworICAgICMgc2V0IGNvbW1hbmQgZW52CisgICAgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cywgIi5jYS8kY2FfYmFzZSIpOworCisgICAgJGNtZCA9ICIkZW52IG9wZW5zc2wgY2EgLWV4dGVuc2lvbnMgdjNfY2Ffc2lnbiAtZGF5cyAkZGF5cyAtY2VydCAnJGNhJyAta2V5ZmlsZSAnJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJGNhX2Jhc2Uua2V5JyAtaW4gJyRvdXRDc3InIC1iYXRjaCAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkcgLW91dCAnJG91dENydCciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5jZXJ0IChzaWduY3NyKTogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKyAgfSBlbHNlIHsKKyAgICAkY21kIC49ICIgLXg1MDkgLW91dCAnJG91dENydCciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5DZXJ0OiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJDZXJ0aWZpY2F0ZSBHZW5lcmF0ZWQ6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0Q3J0XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0S2V5XG4iLCAkb3B0cyk7Cit9CisKK3N1YiBnZW5Dc3IgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRpc0NhID0gc2hpZnQ7ICMgWFhYIC0gbm90IGltcGxlbWVudGVkIHlldAorICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCJob3N0IikgfHwgOjpob3N0bmFtZSgpOworICBteSAkZW1haWwgPSAkY29uZmlnLT5pbmhlcml0KCJlbWFpbCIpIHx8IGdldGxvZ2luKCkgLiAiXEAkaG9zdCI7CisgIG15ICRkYXlzID0gJGNvbmZpZy0+aW5oZXJpdCgnZGF5cycpIHx8ICRjb25maWctPmluaGVyaXQoJ2NydERheXMnKSB8fCAkTmV0U05NUDo6Q2VydDo6REVGQ1JUREFZUzsKKyAgbXkgJGNuID0gJGNvbmZpZy0+aW5oZXJpdCgnY24nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjb21tb25OYW1lJyk7CisgIG15ICR0YWcgPSAkY29uZmlnLT5pbmhlcml0KCd0YWcnKTsKKyAgbXkgJGluQ3J0ID0gJGNvbmZpZy0+aW5oZXJpdCgnZnJvbS1jcnQnKSB8fCAkY29uZmlnLT5pbmhlcml0KCdmcm9tQ2VydCcpOworICBteSAkb3V0Q3NyOworICBteSAkY3NyS2V5OworCisgIGlmIChkZWZpbmVkICRpbkNydCkgeworICAgICRpbkNydCA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2VydHMoJG9wdHMsICdjZXJ0cycsICRpbkNydCk7CisgICAgbXkgJGNydCA9IDo6YmFzZW5hbWUoJGluQ3J0LCBATmV0U05NUDo6Q2VydDo6Q1JUU1VGRklYRVMpOworICAgICRjc3JLZXkgPSAiJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJGNydC5rZXkiOworICAgICR0YWcgfHw9ICRjcnQ7CisgIH0gZWxzZSB7CisgICAgJHRhZyB8fD0gJ3NubXAnOworICAgICRjc3JLZXkgfHw9ICIkTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kdGFnLmtleSI7CisgIH0KKworICAkb3V0Q3NyID0gIiROZXRTTk1QOjpDZXJ0OjpORVdDUlRESVIvJHRhZy5jc3IiOworCisgICRjbiB8fD0gKE5ldFNOTVA6OkNlcnQ6OmlzX3NlcnZlcigkdGFnKSA/ICRob3N0IDogJGVtYWlsKTsKKworICBteSAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzKTsKKworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENzciwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJGNzcktleSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworCisgIG15ICRjbWQgPSAoZGVmaW5lZCAkaW5DcnQgPworICAiJGVudiBvcGVuc3NsIHg1MDkgLXg1MDl0b3JlcSAtaW4gJGluQ3J0IC1vdXQgJyRvdXRDc3InIC1zaWdua2V5ICckY3NyS2V5JyAtbm9kZXMgLWRheXMgJGRheXMgLWJhdGNoIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyIgOgorICAiJGVudiBvcGVuc3NsIHJlcSAtbmV3IC1ub2RlcyAtZGF5cyAkZGF5cyAtYmF0Y2ggLWtleW91dCAnJGNzcktleScgLW91dCAnJG91dENzcicgLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIik7CisKKyAgJGNtZCAuPSAoJGlzQ2EgPyAiIC1leHRlbnNpb25zIHYzX2NhX2NyZWF0ZSIgOiAiIC1leHRlbnNpb25zIHYzX3VzZXJfY3JlYXRlIik7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5Dc3I6ICRjbWRcbiIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgR2VuZXJhdGVkOlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dENzclxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJGNzcktleVxuIiwgJG9wdHMpOworfQorCitzdWIgc2lnbkNzciB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGlzQ2EgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgiaG9zdCIpIHx8IDo6aG9zdG5hbWUoKTsKKyAgbXkgJGVtYWlsID0gJGNvbmZpZy0+aW5oZXJpdCgiZW1haWwiKSB8fCBnZXRsb2dpbigpIC4gIlxAJGhvc3QiOworICBteSAkZGF5cyA9ICRjb25maWctPmluaGVyaXQoJ2RheXMnKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjcnREYXlzJykgfHwgJE5ldFNOTVA6OkNlcnQ6OkRFRkNSVERBWVM7CisgIG15ICRjbiA9ICRjb25maWctPmluaGVyaXQoJ2NuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY29tbW9uTmFtZScpOworICBteSAkdGFnID0gJGNvbmZpZy0+aW5oZXJpdCgndGFnJykgfHwgJ3NubXAnOworICBteSAkaW5zdGFsbCA9ICRjb25maWctPmluaGVyaXQoJ2luc3RhbGwnKTsKKworICAkY24gPSAoTmV0U05NUDo6Q2VydDo6aXNfc2VydmVyKCR0YWcpID8gJGhvc3QgOiAkZW1haWwpOworCisgIG15ICRjYSA9ICRvcHRzLT57J3dpdGgtY2EnfTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjYTogJGNhXG4iLCAkb3B0cyk7CisgIG15ICRjYV9iYXNlID0gOjpiYXNlbmFtZSgkY2EsIEBOZXRTTk1QOjpDZXJ0OjpDUlRTVUZGSVhFUyk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY2FfYmFzZTogJGNhX2Jhc2VcbiIsICRvcHRzKTsKKyAgbXkgJGNhX2tleSA9ICIkTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kY2FfYmFzZS5rZXkiOyAKKworICBteSAkY3NyID0gJG9wdHMtPnsnY3NyJ307CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY3NyOiAkY3NyXG4iLCAkb3B0cyk7CisgIG15ICRjc3JfYmFzZSA9IDo6YmFzZW5hbWUoJGNzciwgQE5ldFNOTVA6OkNlcnQ6OkNSVFNVRkZJWEVTKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjc3JfYmFzZTogJGNzcl9iYXNlXG4iLCAkb3B0cyk7CisgIG15ICRvdXRkaXIgPSAoJGluc3RhbGwgPyAkTmV0U05NUDo6Q2VydDo6Q1JURElSIDogJE5ldFNOTVA6OkNlcnQ6Ok5FV0NSVERJUik7CisgIG15ICRvdXRDcnQgPSAiJG91dGRpci8kY3NyX2Jhc2UuY3J0IjsKKworICBteSAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzLCAiLmNhLyRjYV9iYXNlIik7CisKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDcnQsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKworICAjIFhYWCAtIGhhbmRsZSBrZXlmaWxlIHNlYXJjaD8/CisgIG15ICRjbWQgPSAiJGVudiBvcGVuc3NsIGNhIC1iYXRjaCAtZGF5cyAkZGF5cyAtZXh0ZW5zaW9ucyB2M19jYV9zaWduIC1jZXJ0ICckY2EnIC1rZXlmaWxlICckY2Ffa2V5JyAtaW4gJyRjc3InIC1vdXQgJyRvdXRDcnQnIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyI7CisKKyAgIyAkY21kIC49ICgkaXNDYSA/ICIgLWV4dGVuc2lvbnMgdjNfY2Ffc2lnbl9jYSIgOiAiIC1leHRlbnNpb25zIHYzX2NhX3NpZ24iKTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInNpZ25Dc3I6ICRjbWRcbiIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJTaWduZWQgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0OlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJGNzclxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIndpdGggQ0E6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkY2FcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRjYV9rZXlcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJHZW5lcmF0ZWQgQ2VydGlmaWNhdGU6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0Q3J0XG4iLCAkb3B0cyk7Cit9CisKK3N1YiBzaG93IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkdHlwZSA9IHNoaWZ0IHx8ICdjZXJ0cyc7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkc3RhZyA9IHNoaWZ0KEB7JG9wdHMtPnsnY21kYXJncyd9fSk7CisgIG15ICRmbXQgPSBOZXRTTk1QOjpDZXJ0Ojp4NTA5X2Zvcm1hdCgkb3B0cykgfHwgJy1zdWJqZWN0JzsKKyAgbXkgJGJyaWVmID0gJGNvbmZpZy0+aW5oZXJpdCgnYnJpZWYnKTsKKyAgbXkgJG91dHB1dDsKKyAgbXkgJGNtZDsKKworICBteSAkY3dkID0gOjpnZXRjd2QoKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJzaG93ICgkY3dkKTokdHlwZTokc3RhZzokZm10XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiJG9wdHMtPnsndGxzZGlyJ306XG4iLCAkb3B0cykgdW5sZXNzICRicmllZjsKKworICBmb3JlYWNoIG15ICRjIChOZXRTTk1QOjpDZXJ0OjpmaW5kX2NlcnRzKCRvcHRzLCAkdHlwZSwgJHN0YWcpKSB7CisgICAgcHJpbnQgIlxuJGM6XG4iIHVubGVzcyAkYnJpZWY7CisgICAgJGNtZCA9ICJvcGVuc3NsIHg1MDkgLWluICckYycgLW5vb3V0ICRmbXQiOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgic2hvdzogJGNtZFxuIiwgJG9wdHMpOworCisgICAgJG91dHB1dCA9IGAkY21kYDsgY2hvbXAgJG91dHB1dDsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp2d2Fybigic2hvdy0kdHlwZSBmYWlsZWQgKCQ/KTogJG91dHB1dFxuIiwgJG9wdHMpIGlmICQ/OworCisgICAgJG91dHB1dCA9fiBzL15bXlxuPV0rPS8vIGlmICRicmllZjsKKworICAgIHByaW50ICIkb3V0cHV0XG4iOworICAgIHByaW50ICJcbiIgdW5sZXNzICRicmllZjsKKyAgfQorfQorCitzdWIgaW1wb3J0X2ZpbGUgeworICBteSAoJGZpbGUsICRzdWZmaXgsICR0YXJnLCAkcmRpciwgJHRhZykgPSBAXzsKKworICBpZiAoTmV0U05NUDo6Q2VydDo6aXNfdXJsKCRmaWxlKSkgeworICAgIGlmICgkTmV0U05NUDo6Q2VydDo6aGF2ZVVzZXJBZ2VudCkgeworCisgICAgICByZXF1aXJlIEZpbGU6OlRlbXA7CisgICAgICBpbXBvcnQgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSk7CisKKyAgICAgIG15ICgkZmgsICRuZXdmaWxlbmFtZSkgPSB0ZW1wZmlsZShTVUZGSVggPT4gJHN1ZmZpeCk7CisgICAgICByZXR1cm4gaWYgKCEkZmggfHwgISRuZXdmaWxlbmFtZSk7CisgICAgICBteSAkdWEgPSBMV1A6OlVzZXJBZ2VudC0+bmV3OworICAgICAgbXkgJHJlc3BvbnNlID0gJHVhLT5nZXQoJGZpbGUpOworICAgICAgaWYgKCRyZXNwb25zZS0+aXNfc3VjY2VzcykgeworCXByaW50ICRmaCAkcmVzcG9uc2UtPmRlY29kZWRfY29udGVudCgpOworICAgICAgfSBlbHNlIHsKKwlOZXRTTk1QOjpDZXJ0Ojp2d2FybigiZmFpbGVkIHRvIGRvd25sb2FkIGEgY2VydGlmaWNhdGUgZnJvbSAkZmlsZSIpOworCXJldHVybjsKKyAgICAgIH0KKyAgICAgICRmaC0+Y2xvc2U7CisgICAgICAkZmlsZSA9ICRuZXdmaWxlbmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgTmV0U05NUDo6Q2VydDo6dndhcm4oIkxXUDo6VXNlckFnZW50IG5vdCBpbnN0YWxsZWQ6IHVuYWJsZSB0byBpbXBvcnQgY2VydGlmaWNhdGUiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICAkZmlsZSA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCRmaWxlLCAkcmRpcik7CisgIGRpZSgiZmlsZSB1bnJlYWRhYmxlOiAkZmlsZVxuIikgdW5sZXNzIC1yICRmaWxlOworCisKKyAgaWYgKCEgJHRhcmcpIHsKKyAgICAkdGFyZyA9IChOZXRTTk1QOjpDZXJ0Ojppc19jYV9jZXJ0KCRmaWxlKSA/ICROZXRTTk1QOjpDZXJ0OjpDQURJUiA6ICROZXRTTk1QOjpDZXJ0OjpDUlRESVIpOworICB9CisKKyAgJHRhcmcgLj0gIi8iIC4gJHRhZyAuICRzdWZmaXggaWYgKCR0YWcpOworICA6OmNvcHkoJGZpbGUsICR0YXJnKTsKK30KKworCitzdWIgaW1wb3J0IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGNhcmcgPSBzaGlmdChAeyRvcHRzLT57J2NtZGFyZ3MnfX0pOworICBteSAka2FyZyA9IHNoaWZ0KEB7JG9wdHMtPnsnY21kYXJncyd9fSk7CisgIG15ICR0YXJnOworCisgIGlmIChub3QgZGVmaW5lZCAkY2FyZykgeworICAgIE5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJpbXBvcnQ6IG5vIGNlcnRpZmljYXRlIHN1cHBsaWVkXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMSk7CisgIH0KKworICBpbXBvcnRfZmlsZSgkY2FyZywgJy5jcnQnLCAnJywsCisJICAgICAgJG9wdHMtPnsncmRpcid9LCAkb3B0cy0+eyd0YWcnfSk7CisKKyAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRrYXJnOworCisgIGltcG9ydF9maWxlKCRrYXJnLCAnLmtleScsICdwcml2YXRlJywsCisJICAgICAgJG9wdHMtPnsncmRpcid9LCAkb3B0cy0+eyd0YWcnfSk7Cit9CisKKworcGFja2FnZSBOZXRTTk1QOjpDZXJ0OjpDb25maWc7Cit1c2UgdmFycyBxdyhASVNBKTsKK0BJU0EgPSBxdyhOZXRTTk1QOjpDZXJ0OjpPYmopOworCitzdWIgbmV3IHsKKyAgbXkgJGNsYXNzID0gc2hpZnQ7CisgIG15ICRwYXJlbnQgPSBzaGlmdDsKKyAgbXkgJHRoaXMgPSAkY2xhc3MtPlNVUEVSOjpuZXcoJ2NvbmZpZycsICRwYXJlbnQpOworCisgIGJsZXNzKCR0aGlzLCAkY2xhc3MpOworfQorCitzdWIgcGFyc2UgeworICBteSAkY29uZmlnID0gc2hpZnQ7CisgIG15ICRhcHAgPSAkY29uZmlnLT57J0FQUCd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkY2ZnZmlsZSA9IHNoaWZ0OworICAkY2ZnZmlsZSB8fD0gJG9wdHMtPnsnY2ZnZmlsZSd9OworCisgIHJldHVybiAnMCBidXQgdHJ1ZScgaWYgJGNvbmZpZy0+eydQQVJTRUQnfTsKKyAgcmV0dXJuICcwIGJ1dCB0cnVlJyB1bmxlc3MgZGVmaW5lZCAkY2ZnZmlsZTsKKworICBvcGVuKCBDT05GSUcsICI8JGNmZ2ZpbGUiICkKKyAgICBvciBkaWUgImVycm9yIC0gY291bGQgbm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlOiAkY2ZnZmlsZSI7CisKKyAgd2hpbGUgKDxDT05GSUc+KSB7CisgICAgbmV4dCBpZiAvXlxzKiMvIG9yIC9eXHMqJC87CisKKyAgICBpZiAoL15ccyooXHcrKSg/OlwoKFtcKVwoXGRcLFwuXSspXCkpP1xzKj1ccyp7LykgeworICAgICAgbXkgJG9iaiA9ICQxOworCisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIm9iamVjdDogJG9iaiAoJDIpID0ge1xuIiwgJG9wdHMpOworICAgICAgZGllICJlcnJvciAtIGlkZW50aXR5OiBpbmRpY2VzIG5vdCBzdXBwb3J0ZWQ6ICQyIiBpZiBkZWZpbmVkICQyOworCisgICAgICAjIEZvdW5kIGFuIG9iamVjdC4KKyAgICAgIGlmICggJG9iaiBlcSAnaWRlbnRpdHknICkgeworCW15ICRpZGVudGl0eSA9IE5ldFNOTVA6OkNlcnQ6OklkZW50aXR5OjpwYXJzZSgqQ09ORklHLCAkY29uZmlnKTsKKwlteSAkaWQgPSAkaWRlbnRpdHktPnsnaWQnfTsKKwlkaWUgImVycm9yIC0gaWRlbnRpdHk6ICdpZCcgbm90IGRlZmluZWQiIHVubGVzcyBkZWZpbmVkICRpZDsKKwlkaWUgImVycm9yIC0gaWRlbnRpdHk6IGR1cGxpY2F0ZSAnJGlkJyIgaWYgZXhpc3RzICRjb25maWctPnskb2JqfXskaWR9OworCSRjb25maWctPnskb2JqfXskaWR9ID0gJGlkZW50aXR5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGllICJlcnJvciAtIHVucmVjb2duaXplZCBvYmplY3QgKCQxKSBhdCBzY29wZSAoY29uZmlnKSI7CisgICAgICB9CisgICAgfSBlbHNpZiAoL15ccyooXHcrKVxzKj0/XHMqKC4qPylccyokLykgeworICAgICAgbXkgJGtleSA9ICQxOworICAgICAgbXkgJHZhbCA9ICQyOworCisgICAgICAkdmFsID0gJGNvbmZpZy0+cmVzb2x2ZSgkdmFsKSBpZiAkdmFsID1+IC9cJFx3K3xcJlx7Lio/XH0vOworICAgICAgIyBGb3VuZCBhIHN5bWJvbC4KKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiICAka2V5ID0gJHZhbFxuIiwgJG9wdHMpOworICAgICAgaWYgKCRrZXkgZXEgJ3N1YmplY3RBbHROYW1lJyBvciAka2V5IGVxICdzYW4nKSB7CisJcHVzaChAeyRjb25maWctPnska2V5fX0sICR2YWwpOworICAgICAgfSBlbHNpZiAoIGRlZmluZWQgJGNvbmZpZy0+eyRrZXl9ICkgeworICAgICAgICBkaWUgImVycm9yIC0gZHVwbGljYXRlIHN5bWJvbCAka2V5IjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRjb25maWctPnska2V5fSA9IChkZWZpbmVkICR2YWwgPyBOZXRTTk1QOjpDZXJ0OjptYXBfYm9vbCgkdmFsKSA6IDEgKTsKKyAgICAgIH0KKyAgICB9IGVsc2lmICgvXlxzKmVudlxzKihcdys9XFMrKVxzKiQvKSB7CisgICAgICAjIEZvdW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCIkJlxuIiwgJG9wdHMpOworICAgICAgcHVzaChAeyRjb25maWctPnsnZW52J319LCAkMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGRpZSgiZXJyb3IgaW4gY29uZmlnIGZpbGUgWyRjZmdmaWxlOmxpbmUgJC5dIik7CisgICAgfQorICB9CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJlbmQgcGFyc2UgY29uZmlnXG4iLCAkb3B0cyk7CisgIGNsb3NlKENPTkZJRyk7CisKKyAgIyBhdWdtZW50IHdpdGggYW55IGNvbmZpZyBkaXJlY3RpdmVzIHN1cHBsaWVkIGluIG9wdHMKKyAgZm9yZWFjaCBteSAkY2ZnIChAeyRvcHRzLT57J2NvbmZpZyd9fSkgeworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiYXVnbWVudGluZyBjb25maWc6ICRjZmdcbiIsICRvcHRzKTsKKworICAgICRjb25maWctPmF1dG9TZXQoJDEsIChkZWZpbmVkKCQyKSA/ICQyIDogMSApKQorICAgICAgaWYgJGNmZyA9fiAvXlxzKihcdyspXHMqPT9ccyooLio/KVxzKiQvOworICB9CisgICRjb25maWctPmF1dG9TZXQoJ1BBUlNFRCcsIDEpOworICByZXR1cm4gJGNvbmZpZy0+eydQQVJTRUQnfTsKK30KKworcGFja2FnZSBOZXRTTk1QOjpDZXJ0OjpJZGVudGl0eTsKK3VzZSB2YXJzIHF3KEBJU0EpOworQElTQSA9IHF3KE5ldFNOTVA6OkNlcnQ6Ok9iaik7CisKK3N1YiBuZXcgeworICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgbXkgJHRoaXMgPSBzaGlmdCB8fCAkY2xhc3MtPlNVUEVSOjpuZXcoJ2lkZW50aXR5JywgQF8pOworICBteSAkaW5kID0gJHRoaXMtPnsnSU5ERVgnfSB8fCAxOworCisgICR0aGlzLT5hdXRvU2V0KCduYW1lJywgIiR0aGlzLT57dHlwZX0uJGluZCIpIHVubGVzcyBleGlzdHMgJHRoaXMtPnsnbmFtZSd9OworCisgICR0aGlzLT5hdXRvU2V0KCdMT0cnLCcnKSB1bmxlc3MgZXhpc3RzICR0aGlzLT57J0xPRyd9OworICAkdGhpcy0+YXV0b1NldCgnVFRZX0xPRycsJycpIHVubGVzcyBleGlzdHMgJHRoaXMtPntUVFlfTE9HfTsKKworICBibGVzcygkdGhpcywgJGNsYXNzKTsKK30KKworCitzdWIgcGFyc2UgeworICBteSAkRklMRSA9IHNoaWZ0OworICBteSAkcGFyZW50ID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJHBhcmVudC0+aW5oZXJpdCgnT1BUUycpOworICBteSAkaWRlbnRpdHkgPSBuZXcgTmV0U05NUDo6Q2VydDo6T2JqKCdpZGVudGl0eScsICRwYXJlbnQpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgicGFyc2UgaWRlbnRpdHlcbiIsICRvcHRzKTsKKworICB3aGlsZSAoPCRGSUxFPikgeworICAgIG5leHQgaWYgL15ccyojLyBvciAvXlxzKiQvOworCisgICAgaWYgKC9eXHMqKFx3Kylccyo9XHMqey8pIHsKKyAgICAgICMgRm91bmQgYW4gb2JqZWN0LgorICAgICAgZGllICJlcnJvciAtIGNhbid0IGhhdmUgbmVzdGVkICQxIjsKKyAgICB9IGVsc2lmICgvXlxzKihcdyspXHMqPT9ccyooLio/KVxzKiQvKSB7CisgICAgICBteSAka2V5ID0gJDE7CisgICAgICBteSAkdmFsID0gJDI7CisKKyAgICAgICMgRm91bmQgYSBzeW1ib2wuCisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIiAgJGtleSA9ICR2YWxcbiIsICRvcHRzKTsKKworICAgICAgJHZhbCA9ICRpZGVudGl0eS0+cmVzb2x2ZSgkdmFsKSBpZiAkdmFsID1+IC9cJFx3K3xcJlx7Lio/XH0vOworCisgICAgICBpZiAoICRrZXkgZXEgJ3N1YmplY3RBbHROYW1lJyBvciAka2V5IGVxICdzYW4nKSB7CisJcHVzaChAeyRpZGVudGl0eS0+eyRrZXl9fSwgJHZhbCk7CisgICAgICB9IGVsc2lmICggZGVmaW5lZCAkaWRlbnRpdHktPnska2V5fSApIHsKKyAgICAgICAgZGllICJlcnJvciAtIGR1cGxpY2F0ZSBzeW1ib2wgJGtleSI7CisgICAgICB9IGVsc2UgeworICAgICAgICAkaWRlbnRpdHktPnska2V5fSA9IChkZWZpbmVkICR2YWwgPyBOZXRTTk1QOjpDZXJ0OjptYXBfYm9vbCgkdmFsKSA6IDEgKTsKKyAgICAgIH0KKyAgICB9IGVsc2lmICgvXHMqXH1ccypcOy8pIHsKKyAgICAgICMgRW5kIG9mIGRlZmluaXRpb24uCisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImVuZCBwYXJzZSBpZGVudGl0eVxuIiwgJG9wdHMpOworICAgICAgcmV0dXJuIG5ldyBOZXRTTk1QOjpDZXJ0OjpJZGVudGl0eSgkaWRlbnRpdHkpOworICAgIH0gZWxzZSB7CisgICAgICBkaWUoImVycm9yIGluIGNvbmZpZyBmaWxlIFskb3B0cy0+e2NmZ2ZpbGV9OmxpbmUgJC5dIik7CisgICAgfQorICB9CisgIGRpZSAiZXJyb3IgLSB1bmV4cGVjdGVkIGVuZCBvZiBjb25mIGZpbGUiOworfQorCitwYWNrYWdlIG1haW47CisKK215ICRhcHAgPSBuZXcgTmV0U05NUDo6Q2VydDo6QXBwKCk7CiskYXBwLT5pbml0KEBBUkdWKTsKKyRhcHAtPnJ1bigpOworCitfX0VORF9fCis9cG9kCisKKz1oZWFkMSAgIE5BTUUKKworbmV0LXNubXAtY2VydCAtIE5ldC1TTk1QIENlcnRpZmljYXRlIE1hbmFnZW1lbnQgVG9vbAorCis9aGVhZDEgICBTWU5PUFNJUworCis9b3ZlcgorCis9aXRlbSAkIG5ldC1zbm1wLWNlcnQgZ2VuY2EgLUkgLS1jbiBjYS1OZXQtU05NUAorCis9aXRlbSAkIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtSSAtdCBzbm1wYXBwIC0td2l0aC1jYSBjYS1OZXQtU05NUAorCis9aXRlbSAkIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtSSAtdCBzbm1wZCAtLWNuIG5ldC1zbm1wLm9yZworCis9aXRlbSAkIG5ldC1zbm1wLWNlcnQgc2hvd2NhcworCis9aXRlbSAkIG5ldC1zbm1wLWNlcnQgc2hvd2NlcnRzCisKKz1iYWNrCisKKz1oZWFkMSAgIERFU0NSSVBUSU9OCisKK25ldC1zbm1wLWNlcnQgY3JlYXRlcywgc2lnbnMsIGluc3RhbGxzIGFuZCBkaXNwbGF5cyBYLjUwOQorY2VydGlmaWNhdGVzIHVzZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiBOZXQtU05NUC8oRClUTFMuCisKKz1oZWFkMSAgIFNZTlRBWAorCis9b3ZlcgorCis9aXRlbSBuZXQtc25tcC1jZXJ0IFstLWhlbHB8LT9dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgWy0tdmVyc2lvbnwtVl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jYSAgICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0td2l0aC1jYSA8Y2E+XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS13aXRoLWNhIDxjYT5dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY3NyICAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLWZyb20tY3J0IDxjcnQ+XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNpZ25jc3IgIFs8ZmxhZ3M+XSBbLS1pbnN0YWxsXSAtLWNzciA8Y3NyPiAtLXdpdGgtY2EgPGNhPgorCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNob3djYSAgIFs8ZmxhZ3M+XSBbPGZvcm1hdC1vcHRzPl0gWzxmaWxlPnw8c2VhcmNoLXRhZz5dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2hvd2NlcnQgWzxmbGFncz5dIFs8Zm9ybWF0LW9wdHM+XSBbPGZpbGU+fDxzZWFyY2gtdGFnPl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBpbXBvcnQgICBbPGZsYWdzPl0gPGZpbGV8dXJsPiBbPGtleT5dCisKKz1iYWNrCisKKz1oZWFkMSAgIENPTU1BTkRTCisKKz1vdmVyCisKKz1pdGVtIGdlbmNhCisKK2dlbmVyYXRlIGEgc2lnbmVkIENBIGNlcnRpZmljYXRlIHN1aXRhYmxlIGZvciBzaWduaW5nIG90aGVyCitjZXJ0aWZpY2F0ZXMuIGRlZmF1bHQ6IHNlbGYtc2lnbmVkIHVubGVzcyAtLXdpdGgtY2EgPGNhPiBzdXBwbGllZAorCis9aXRlbSBnZW5jZXJ0CisKK2dlbmVyYXRlIGEgc2lnbmVkIGNlcnRpZmljYXRlIHN1aXRhYmxlIGZvciBpZGVudGlmaWNhdGlvbiwgb3IKK3ZhbGlkYXRpb24uIGRlZmF1bHQ6IHNlbGYtc2lnbmVkIHVubGVzcyAtLXdpdGgtY2EgPGNhPiBzdXBwbGllZAorCis9aXRlbSBnZW5jc3IKKworZ2VuZXJhdGUgYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3QuIHdpbGwgY3JlYXRlIGEgbmV3CitrZXkgYW5kIGNlcnRpZmljYXRlIHVubGVzcyAtLWZyb20tY3J0IDxjcnQ+IHN1cHBsaWVkCisKKz1pdGVtIHNpZ25jc3IKKworc2lnbiBhIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdCBzcGVjaWZpZWQgYnkgLS1jc3IgPGNzcj4KK3dpdGggdGhlIENBIGNlcnRpZmljYXRlIHNwZWNpZmllZCBieSAtLXdpdGgtY2EgPGNhPgorCis9aXRlbSBpbXBvcnQKKworaW1wb3J0IGFuIGlkZW50aXR5IG9yIENBIGNlcnRpZmljYXRlLCBvcHRpb25hbGx5IGltcG9ydCA8a2V5PgoraWYgYW4gVVJMIGlzIHBhc3NlZCwgd2lsbCBhdHRlbXB0IHRvIGltcG9ydCBjZXJ0aWZpY2F0ZSBmcm9tIHNpdGUKKworPWl0ZW0gc2hvd2NhLCBzaG93Y2VydAorCitzaG93IENBIG9yIGlkZW50aXR5IGNlcnRpZmljYXRlKHMpLiBtYXkgcGFzcyBmdWxseSBxdWFsaWZpZWQKK2ZpbGUgb3IgZGlyZWN0b3J5IG5hbWUsIG9yIGEgc2VhcmNoLXRhZyB3aGljaCBwcmVmaXggbWF0Y2hlcworaW5zdGFsbGVkIENBIG9yIGlkZW50aXR5IGNlcnRpZmljYXRlIGZpbGUgbmFtZShzKQorc2VlIEZPUk1BVCBPUFRJT05TIHRvIHNwZWNpZnkgb3V0cHV0IGZvcm1hdAorCisKKz1iYWNrCisKKz1oZWFkMSAgIEZMQUdTCisKKz1vdmVyCisKKz1pdGVtIC0/LCAtLWhlbHAgICAgICAgICAgICAtLSBzaG93IHRoaXMgdGV4dCBhbmQgZXhpdAorCis9aXRlbSAtViwgLS12ZXJzaW9uICAgICAgICAgLS0gc2hvdyB2ZXJzaW9uIHN0cmluZyBhbmQgZXhpdAorCis9aXRlbSAtRCwgLS1kZWJ1ZyAgICAgICAgICAgLS0gcmFpc2UgZGVidWcgbGV2ZWwgKC1EIC1EIGZvciBoaWdoZXIgbGV2ZWwpCisKKz1pdGVtIC1GLCAtLWZvcmNlICAgICAgICAgICAtLSBmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3Rpbmcgb3V0cHV0IGZpbGVzCisKKz1pdGVtIC1JLCAtLW5vaW50ZXJhY3RpdmUgICAtLSBub24taW50ZXJhY3RpdmUgcnVuIChkZWZhdWx0IGludGVyYWN0aXZlKQorCis9aXRlbSAtUSwgLS1ub3ZlcmJvc2UgICAgICAgLS0gbm9uLXZlcmJvc2Ugb3V0cHV0IChkZWZhdWx0IHZlcmJvc2UpCisKKz1pdGVtIC1DLCAtLWNmZ2RpciAgIDxkaXI+ICAtLSBjb25maWd1cmF0aW9uIGRpciAoc2VlIG1hbig1KSBzbm1wX2NvbmZpZykKKworPWl0ZW0gLVQsIC0tdGxzZGlyICAgPGRpcj4gIC0tIHJvb3QgZm9yIGNlcnQgc3RvcmFnZSAoZGVmYXVsdCA8Y2ZnZGlyPi90bHMpCisKKz1pdGVtIC1mLCAtLWNmZ2ZpbGUgIDxmaWxlPiAtLSBjb25maWcgKGRlZmF1bHQgPGNmZ2Rpcj4vbmV0LXNubXAtY2VydC5jb25mKQorCis9aXRlbSAtaSwgLS1pZGVudGl0eSA8aWQ+ICAgLS0gaWRlbnRpdHkgdG8gdXNlIGZyb20gY29uZmlnCisKKz1pdGVtIC10LCAtLXRhZyAgICAgIDx0YWc+ICAtLSBhcHBsaWNhdGlvbiB0YWcgKGRlZmF1bHQgJ3NubXAnKQorCis9aXRlbSAtLTxjZmctcGFyYW0+Wz08dmFsPl0gLS0gYWRkaXRpb25hbCBjb25maWcgcGFyYW1zCisKKz1iYWNrCisKKz1oZWFkMSAgIENFUlRJRklDQVRFIE9QVElPTlMgKDxjZXJ0LW9wdHM+KQorCis9b3ZlcgorCis9aXRlbSAtYSwgLS13aXRoLWNhIDxjYT4gICAgLS0gQ0EgY2VydGlmaWNhdGUgdXNlZCB0byBzaWduIHJlcXVlc3QKKworPWl0ZW0gLUEsIC0tY2EgPGNhPiAgICAgICAgIC0tIGV4cGxpY2l0IG91dHB1dCBDQSBjZXJ0aWZpY2F0ZQorCis9aXRlbSAtciwgLS1jc3IgPGNzcj4gICAgICAgLS0gY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0CisKKz1pdGVtIC14LCAtLWZyb20tY3J0IDxjcnQ+ICAtLSBpbnB1dCBjZXJ0aWZpY2F0ZSBmb3IgY3VycmVudCBvcGVyYXRpb24KKworPWl0ZW0gLVgsIC0tY3J0IDxjcnQ+ICAgICAgIC0tIGV4cGxpY2l0IG91dHB1dCBjZXJ0aWZpY2F0ZQorCis9aXRlbSAteSwgLS1pbnN0YWxsICAgICAgICAgLS0gaW5zdGFsbCByZXN1bHQgaW4gbG9jYWwgcmVwb3NpdG9yeQorCis9YmFjaworCis9aGVhZDEgICBESVNUSU5HVUlTSEVEIE5BTUUgT1BUSU9OUyAoPGRuLW9wdHM+KQorCis9b3ZlcgorCis9aXRlbSAtZSwgLS1lbWFpbCA8ZW1haWw+ICAgICAgIC0tIGVtYWlsIG5hbWUKKworPWl0ZW0gLWgsIC0taG9zdCA8aG9zdD4gICAgICAgICAtLSBETlMgaG9zdCBuYW1lLCBvciBJUCBhZGRyZXNzCisKKz1pdGVtIC1kLCAtLWRheXMgPGRheXM+ICAgICAgICAgLS0gbnVtYmVyIG9mIGRheXMgY2VydGlmaWNhdGUgaXMgdmFsaWQKKworPWl0ZW0gLW4sIC0tY24gPGNuPiAgICAgICAgICAgICAtLSBjb21tb24gbmFtZSAoQ04pCisKKz1pdGVtIC1vLCAtLW9yZyA8b3JnPiAgICAgICAgICAgLS0gb3JnYW5penRpb24gbmFtZQorCis9aXRlbSAtdSwgLS11bml0IDx1bml0PiAgICAgICAgIC0tIG9yZ2FuaXp0aW9uIHVuaXQgbmFtZQorCis9aXRlbSAtYywgLS1jb3VudHJ5IDxjb3VudHJ5PiAgIC0tIGNvdW50cnkgY29kZSAoZS5nLiwgVVMpCisKKz1pdGVtIC1wLCAtLXByb3ZpbmNlIDxwcm92aW5jZT4gLS0gcHJvdmluY2UgbmFtZSAoc3lub215bm91cyB3LyBzdGF0ZSkKKworPWl0ZW0gLXAsIC0tc3RhdGUgPHN0YXRlPiAgICAgICAtLSBzdGF0ZSBuYW1lIChzeW5vbXlub3VzIHcvIHByb3ZpbmNlKQorCis9aXRlbSAtbCwgLS1sb2NhbGl0eSA8bG9jYWxpdHk+IC0tIGxvY2FsaXR5IG5hbWUgKGUuZywgdG93bikKKworPWl0ZW0gLXMsIC0tc2FuIDxzYW4+ICAgICAgICAgICAtLSBzdWJqZWN0QWx0TmFtZSwgcmVwZWF0IGZvciBlYWNoIDxzYW4+CisKKz1vdmVyIDIKKworPWl0ZW0gICAgPHNhbj4gdmFsdWUgZm9ybWF0ICg8Rk1UPjo8VkFMPik6CisKKz1vdmVyIDMKKworPWl0ZW0gICAgICAgZGlyTmFtZTovdXNyL3NoYXJlL3NubXAvdGxzCisKKz1pdGVtICAgICAgIEROUzpuZXQtc25tcC5vcmcKKworPWl0ZW0gICAgICAgZW1haWw6YWRtaW5AbmV0LXNubXAub3JnCisKKz1pdGVtICAgICAgIElQOjE5Mi4xNjguMS4xCisKKz1pdGVtICAgICAgIFJJRDoxLjEuMy42CisKKz1pdGVtICAgICAgIFVSSTpodHRwOi8vbmV0LXNubXAub3JnCisKKz1iYWNrCisKKz1iYWNrCisKKz1iYWNrCisKKz1oZWFkMSAgIEZPUk1BVCBPUFRJT05TICg8Zm9ybWF0LW9wdHM+KQorCis9b3ZlcgorCis9aXRlbSAtLWJyaWVmICAgICAgICAtLSBtaW5pbWl6ZWQgb3V0cHV0ICh2YWx1ZXMgb25seSB3aGVyZSBhcHBsaWNhYmxlKQorCis9aXRlbSAtLXRleHQgICAgICAgICAtLSBmdWxsIHRleHQgZGVzY3JpcHRpb24KKworPWl0ZW0gLS1zdWJqZWN0ICAgICAgLS0gc3ViamVjdCBkZXNjcmlwdGlvbgorCis9aXRlbSAtLXN1YmplY3RfaGFzaCAtLSBoYXNoIG9mIHN1YmplY3QgZm9yIGluZGV4aW5nCisKKz1pdGVtIC0taXNzdWVyICAgICAgIC0tIGlzc3VlciBkZXNjcmlwdGlvbgorCis9aXRlbSAtLWlzc3Vlcl9oYXNoICAtLSBoYXNoIG9mIGlzc3VlciBmb3IgaW5kZXhpbmcKKworPWl0ZW0gLS1maW5nZXJwcmludCAgLS0gU0hBMSBkaWdlc3Qgb2YgREVSCisKKz1pdGVtIC0tc2VyaWFsICAgICAgIC0tIHNlcmlhbCBudW1iZXIKKworPWl0ZW0gLS1tb2R1bHVzICAgICAgLS0gbW9kdWx1cyBvZiB0aGUgcHVibGljIGtleQorCis9aXRlbSAtLWRhdGVzICAgICAgICAtLSBzdGFydCBhbmQgZW5kIGRhdGVzCisKKz1pdGVtIC0tcHVycG9zZSAgICAgIC0tIGRpc3BsYXlzIGFsbG93ZWQgdXNlcworCis9aXRlbSAtLUMgICAgICAgICAgICAtLSBDIGNvZGUgZGVzY3JpcHRpb24KKworPWJhY2sKKworPWhlYWQxICAgT1BFUkFUSU9OQUwgTk9URVMKKworCis9aGVhZDIgICBJbnRlcmFjdGl2ZSBNb2RlCisKK1RoZSBhcHBsaWNhdGlvbiBvcGVyYXRlcyBpbiBpbnRlcmFjdGl2ZSBtb2RlIGJ5IGRlZmF1bHQuIEluIHRoaXMgbW9kZQorYmFzaWMgb3BlcmF0aW9ucyBvZiBvZmZlcmVkIGFuZCByZXF1aXJlZCBpbnB1dCBpcyBxdWVyaWVkIHRocm91Z2ggdGhlCitjb21tYW5kIGxpbmUuIAorCitUeXBpY2FsIDx0YWI+IGNvbXBsZXRpb24gaXMgcHJvdmlkZWQgd2hlbiBwb3NzaWJsZSBhbmQgZmllbGQgc3BlY2lmaWMKK2hlbHAgbWF5IGJlIG9idGFpbmVkIGJ5IGVudGVyaW5nICc/Jy4KKworVG8gdHVybiBvZmYgaW50ZXJhY3RpdmUgbW9kZSwgc3VwcGx5ICctLW5vaW50ZXJhY3RpdmUnIG9yICctSScgb24gdGhlCitpbml0aWFsIGNvbW1hbmQgbGluZS4gRXF1aXZhbGFudGx5LCAnaW50ZXJhY3RpdmUgPSBmYWxzZScgbWF5YmUgcGxhY2VkCitpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIChzZWUgYmVsb3cpLgorCis9aGVhZDIgICBDb25maWd1cmF0aW9uCisKK0EgY29uZmlndXJhdGlvbiBmaWxlIG1heSBiZSBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGZvdW5kIGluIGEKK2RlZmF1bHQgbG9jYXRpb24gKDxzbm1wY29uZnBhdGg+L25ldC1zbm1wLWNlcnQuY29uZikuIFRoaXMgZmlsZSBtYXkKK2NvbnRhaW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGVxdWl2YWxlbnQgdG8gdGhvc2Ugc3VwcGxpZWQgb24gdGhlCitjb21tYW5kIGxpbmUgYW5kIGVmZmVjdGl2ZWx5IHByb3ZpZGVzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGVzZQordmFsdWVzLiBJZiBhIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQgaXQgd2lsbCBvdmVycmlkZSB0aGUKK3ZhbHVlIGluIHRoZSBjb25maWcgZmlsZS4gSWYgbmVpdGhlciBpcyBwcmVzZW50IHRoZW4gYW4gYXBwbGljYXRpb24KK3ZhbHVlIHdpbGwgYmUgdXNlZC4KKworPWhlYWQyICAgQ2VydGlmaWNhdGUgTmFtaW5nCisKK0ZpbGVuYW1lcyBvZiBjcmVhdGVkIGNlcnRpZmljYXRlcywgYXMgc3RvcmVkIGluIHRoZSBjb25maWd1cmF0aW9uCitkaXJlY3RvcnksIGFyZSBjaG9zZW4gaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIElmIGFuZCBhcHBsaWNhdGlvbiB0YWcKK2lzIHN1cHBsaWVkLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2VuYW1lIGZvciB0aGUgY2VydGlmaWNhdGUgYW5kCitrZXkgZ2VuZXJhdGVkLiBPdGhlcndpc2UsIGZvciBDQSBjZXJ0aWZpY2F0ZXMsIHRoZSBiYXNlbmFtZSB3aWxsIGJlCitkZXJpdmVkIGZyb20gdGhlIENvbW1vbiBOYW1lLiBGb3Igbm9uLUNBIGNlcnRpZmljYXRlcyB0aGUgYXBwbGljYXRpb24KK3RhZyBkZWZhdWx0cyB0byAnc25tcCcgd2hpY2ggd2lsbCB0aGVuIGJlIHVzZWQgYXMgdGhlIGJhc2VuYW1lIG9mIHRoZQorY2VydGlmaWNhdGUgYW5kIGtleS4KKworPWhlYWQxICAgRVhBTVBMRVMKKworPW92ZXIKKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAtLWRheXMgMTAwMAorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNhIC1mIC5zbm1wL25ldC1zbm1wLWNlcnQuY29uZiAtaSBub2NhZG0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jZXJ0IC10IHNubXBkIC0tY24gaG9zdC5uZXQtc25tcC5vcmcKKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jc3IgLXQgc25tcGFwcAorCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNpZ25jc3IgLS1jc3Igc25tcGFwcCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2hvd2NlcnRzIC0tc3ViamVjdCAtLWlzc3VlciAtLWRhdGVzIHNubXBhcHAKKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgY2EtbmV0LXNubXAub3JnIC0tYnJpZWYKKworPWl0ZW0gbmV0LXNubXAtY2VydCBpbXBvcnQgY2EtdGhpcmQtcGFydHkuY3J0CisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgaW1wb3J0IHNpZ25lZC1yZXF1ZXN0LmNydCBzaWduZWQtcmVxdWVzdC5rZXkKKworPWJhY2sKKworPWhlYWQxIENPUFlSSUdIVAorCitDb3B5cmlnaHQgKGMpIDIwMTAgQ29iaGFtIEFuYWx5dGljIFNvbHV0aW9ucyAtIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMTAgRy4gUy4gTWFyem90IC0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKz1oZWFkMSAgIEFVVEhPUgorCitHLiBTLiBNYXJ6b3QgKG1hcnpAdXNlcnMuc291cmNlZm9yZ2UubmV0KQorCis9Y3V0CisKZGlmZiAtLWdpdCBhL2xvY2FsL25ldC1zbm1wLWNlcnQuY29uZiBiL2xvY2FsL25ldC1zbm1wLWNlcnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVmMWNjCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbmV0LXNubXAtY2VydC5jb25mCkBAIC0wLDAgKzEsNzIgQEAKKyMKKyMgTmV0LVNOTVAgQ2VydGlmaWNhdGUgR2VuZXJhdGlvbiBhbmQgTWFuYWdlbWVudCBUb29sIENvbmZpZ3VyYXRpb24KKyMKKworIyBkZWZhdWx0IG1vZGUgdG8gbm9uLWludGVyYWN0aXZlCisjIGludGVyYWN0aXZlID0gZmFsc2UKKworIyBsb2NhdGlvbiBvZiAndGxzJyBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gY29uZmlndXJhdGlvbiBkaXIKKyMgdGxzRGlyID0gLi90bHMKKworIyBlbmNyeXB0Q0EgPSBmYWxzZSAtIFhYWCBub3QtaW1wbGVtZW50ZWQKKyMgZW5jcnlwdENydCA9IGZhbHNlIC0gWFhYIG5vdC1pbXBsZW1lbnRlZAorCisjIGRlZmF1bHQgdmFsaWQgbGlmZXRpbWUgZHVyYXRpb24gZm9yIENBIGNlcnRpZmljYXRlcworIyBjYURheXMgPSAxODI1CisKKyMgZGVmYXVsdCB2YWxpZCBsaWZldGltZSBkdXJhdGlvbiBmb3IgY2VydGlmaWNhdGVzCisjIGNydERheXMgPSAzNjUKKworIyBkZWZhdWx0IGtleSB0eXBlcyBnZW5lcmF0ZWQKKyMga2V5VHlwZSA9IHJzYQorCisjIGRlZmF1bHQga2V5IHNpemUgZ2VuZXJhdGVkCisjIGtleVNpemUgPSAyMDQ4CisKKyMgZGVmYXVsdCB0eXBlIG9mIG1lc3NhZ2UgZGlnZXN0IHVzZWQKKyMgbXNnRGlnZXN0ID0gc2hhMQorCisjIHRvIHNldCBpbmRpdmlkdWFsIGRlZmF1bHRzLCBhIHNwZWNpZmljIGlkZW50aXR5IG1heSBiZSBpbmRpY2F0ZWQKKyMgb24gdGhlIG5ldC1zbm1wLWNlcnQgY29tbWFuZCBsaW5lOiAnLS1pZGVudGl0eSA8aWQ+JyBvciAnLWkgPGlkPicKKyMgdmFsdWVzIGRlZmluZWQgYXQgdGhlIGdsb2JhbC9maWxlIGxldmVsIHdpbGwgYmUgdXNlZCB1bmxlc3MKKyMgb3ZlcnJpZGVuIGJ5IHZhbHVlcyBzdXBwbGllZCBpbiB0aGUgc3BlY2lmaWVkIGlkZW50aXR5LgorIAoraWRlbnRpdHkgPSB7CisgICBpZCA9IG5vY2FkbQorICAgaG9zdCA9IG5ldC1zbm1wLm9yZworICAgY24gPSBDbGllbnQtaWRlbnRpdHkKKyAgIGVtYWlsID0gYWRtaW5AbmV0LXNubXAub3JnCisgICBvcmcgPSBOZXQtU05NUCBEZXZlbG9wZXJzCisgICBvcmdVbml0ID0gU05NUC1EVExTCisgICBjb3VudHJ5ID0gVVMKKyAgIHN0YXRlID0gTUEKKyAgIGxvY2FsaXR5ID0gQm9zdG9uCisKKyAgICMgMTAgeWVhcnMKKyAgIGNhRGF5cyA9IDM2NTQKKyAgICMgMiB5ZWFycworICAgY3J0RGF5cyA9IDczMAorCisgICBzdWJqZWN0QWx0TmFtZSA9IGVtYWlsOmNsaWVudEBuZXQtc25tcC5vcmcKKyAgIHN1YmplY3RBbHROYW1lID0gVVJJOmh0dHA6Ly9uZXQtc25tcC5vcmcKK307CisKK2lkZW50aXR5ID0geworICAgaWQgPSBDQS1pZGVudGl0eQorICAgaG9zdCA9IG5ldC1zbm1wLm9yZworICAgY24gPSBDQS1pZGVudGl0eQorICAgZW1haWwgPSBjYS1hZG1pbkBuZXQtc25tcC5vcmcKKyAgIG9yZyA9IE5ldC1TTk1QIERldmVsb3BlcnMKKyAgIG9yZ1VuaXQgPSBTTk1QLURUTFMKKyAgIGNvdW50cnkgPSBVUworICAgc3RhdGUgPSBNQQorICAgbG9jYWxpdHkgPSBCb3N0b24KKworICAgIyAxMCB5ZWFycworICAgY2FEYXlzID0gMTAwMAorICAgIyAyIHllYXJzCisgICBjcnREYXlzID0gNTAwCisKKyAgIHN1YmplY3RBbHROYW1lID0gRE5TOnRlc3QubmV0LXNubXAub3JnCit9OworCmRpZmYgLS1naXQgYS9sb2NhbC9zbm1wLWJyaWRnZS1taWIgYi9sb2NhbC9zbm1wLWJyaWRnZS1taWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwZWE2YgotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL3NubXAtYnJpZGdlLW1pYgpAQCAtMCwwICsxLDExNzAgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKGMpIElCTSBDb3JwLiAyMDA5LCAyMDEwLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIEF1dGhvcihzKToJVmFzaWxlaW9zIFBhcHBhcyA8dnBhcHBhc0B1cy5pYm0uY29tPgorIwkJSmVucyBPc3RlcmthbXAgPGplbnNAbGludXgudm5ldC5pYm0uY29tPgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworIyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKwordXNlIE5ldFNOTVA6Ok9JRCAoJzphbGwnKTsKK3VzZSBOZXRTTk1QOjpBU04gKCc6YWxsJyk7Cit1c2UgTmV0U05NUDo6YWdlbnQgKCc6YWxsJyk7CisKK3N1YiBTVFBfUFJPUF9WQUxVRSgpIHsgMHgwMX0KK3N1YiBTVFBfUFJPUF9GSUxFKCkgeyAweDAyfQorc3ViIFNUUF9QUk9QX0RFQygpIHsgMHgwNH0KK3N1YiBTVFBfUFJPUF9IRVgoKSB7IDB4MDh9CisKK3N1YiBGREJfU1RBVFVTX09USEVSIHsgMSB9CitzdWIgRkRCX1NUQVRVU19JTlZBTElEIHsgMiB9CitzdWIgRkRCX1NUQVRVU19MRUFSTkVEIHsgMyB9CitzdWIgRkRCX1NUQVRVU19TRUxGIHsgNCB9CitzdWIgRkRCX1NUQVRVU19NR01UIHsgNSB9CisKK215ICVvaWRfdmFsdWU7CitteSAlb2lkX3R5cGU7CitteSAlb2lkX25leHQ7CitteSAoJWluZGV4ZXMsICVpbnRlcmZhY2VzLCAlbWFjcywgJWFnZXMsICVsb2NhbHMsICV2bGFucywgJXRhZ2dlZCk7CitteSAkb2lkOworCiskc3ViYWdlbnQ9MDsKK215ICRuZXRkaXI9Ii9zeXMvY2xhc3MvbmV0LyI7CitteSAkdGFyZ2V0YnJpZGdlOworCiskY2FjaGVfdGltb3V0PTYwOworJGxhc3RfcG9wdWxhdGVkPTA7CisKK215ICRyZWdvaWQgPSAiLjEuMy42LjEuMi4xLjE3IjsKKyMgYXJlIHdlIHJ1bm5pbmcgZW1iZWRkZWQgPyBJZiBub3QsIHJlZ2lzdGVyIGFzIHN1YmFnZW50CitpZiAoISRhZ2VudCkgeworICAgICRhZ2VudCA9IG5ldyBOZXRTTk1QOjphZ2VudCgnTmFtZScgPT4gJ2RvdDFxYnJpZGdlJywKKwkJCQknQWdlbnRYJyA9PiAxKTsKKyAgICAkc3ViYWdlbnQgPSAxOworICAgIGlmICggJCNBUkdWICE9IDApIHsKKwl1c2FnZSgkMCk7CisJZXhpdCgpOworICAgIH0KKyAgICAkdGFyZ2V0YnJpZGdlID0gJEFSR1ZbMF07Cit9IGVsc2UgeworICAgIGlmICghZGVmaW5lZCgkYnJpZGdlKSkgeworCXVzYWdlKCQwKTsKKwlleGl0KCk7CisgICAgfQorICAgICR0YXJnZXRicmlkZ2UgPSAkYnJpZGdlOworfQorCiskYWdlbnQtPnJlZ2lzdGVyKCJkb3QxcWJyaWRnZSIsICIuMS4zLjYuMS4yLjEuMTciLCBcJnJlcXVlc3RfaGFuZGxlcikgb3IgZGllICJyZWdpc3RyYXRpb24gb2YgaGFuZGxlciBmYWlsZWQgIVxuIjsKKworaWYgKCRzdWJhZ2VudCkgeworCSMgcmVnaXN0ZXIgaGFuZGxlciBmb3IgZ3JhY2VmdWwgc2h1dGRvd24KKwkkU0lHeydJTlQnfSA9IFwmc2h1dGRvd247CisJJFNJR3snUVVJVCd9ID0gXCZzaHV0ZG93bjsKKwkkcnVubmluZyA9IDE7CisKKwl3aGlsZSgkcnVubmluZykgeworCQkkYWdlbnQtPmFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDEpOworCX0KKworCSRhZ2VudC0+c2h1dGRvd24oKTsKK30KKworc3ViIHVzYWdlIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCWlmICgkc3ViYWdlbnQpIHsKKwkJcHJpbnQgJG5hbWUuIlxuXG4iOworCQlwcmludCAidXNhZ2U6IFx0JG5hbWUgPGJyaWRnZT4Jc3RhcnQgc25tcCBicmlkZ2UgbW9kdWxlIi4KKwkJCSIgZm9yIGJyaWRnZSA8YnJpZGdlPlxuXG4iOworCQlwcmludCAiYXJndW1lbnRzOglicmlkZ2UJCW5hbWUgb2YgdGhlIExpbnV4IGJyaWRnZSIuCisJCQkiIHdoaWNoIHlvdSB3YW50IHRvIHByb3ZpZGUgaW5mbyB2aWEgc25tcCBmb3IuXG5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgJ3VzYWdlIGluIHNubXBkLmNvbmY6IHBlcmwgJGJyaWRnZT0iYnIwIjsgcGVybCBkbyA8cGF0aCB0byAkbmFtZT5cbic7CisJfQorCXByaW50ICJudW1iZXIgb2YgYXJndW1lbnRzIGdpdmVuICQjQVJHVlxuXG4iOworfQorCitzdWIgcmVxdWVzdF9oYW5kbGVyIHsKKwlteSAoJGhhbmRsZXIsICRyZWdpc3RyYXRpb25faW5mbywgJHJlcXVlc3RfaW5mbywgJHJlcXVlc3RzKT1AXzsKKwlteSAkcmVxdWVzdDsKKworCXBvcHVsYXRlX21pYigkdGFyZ2V0YnJpZGdlKTsKKworCWZvcigkcmVxdWVzdCA9ICRyZXF1ZXN0czsgJHJlcXVlc3Q7ICRyZXF1ZXN0ID0gJHJlcXVlc3QtPm5leHQoKSkgeworCQlpZigkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVQpIHsKKwkJCW1vZGVfZ2V0KCRyZXF1ZXN0KTsKKwkJfSBlbHNpZigkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVRORVhUKSB7CisJCQltb2RlX2dldF9uZXh0KCRyZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAibW9kZSBub3QgaW1wbGVtZW50ZWQuXG4iOworCQl9CisJfQorfQorCitzdWIgbW9kZV9nZXR7CisJbXkgKCRyZXF1ZXN0KT1AXzsKKwlteSAkb2lkPSRyZXF1ZXN0LT5nZXRPSUQoKTsKKworCSRTTk1QOjp1c2VfbnVtZXJpYyA9IDE7CisJbXkgJG5vaWQ9U05NUDo6dHJhbnNsYXRlT2JqKCRvaWQpOworCisJcmVwbHkoJHJlcXVlc3QsICRub2lkKSBpZiAoZXhpc3RzICRvaWRfdmFsdWV7JG5vaWR9KTsKK30KKworc3ViIGZpbmRfbmV4dHsKKwlteSAoJG5vaWQpID0gQF87CisJbXkgJG5leHRvaWQgPSAkb2lkX25leHR7JG5vaWR9OworCWlmKCFkZWZpbmVkKCRuZXh0b2lkKSB8fCAhZGVmaW5lZCgkb2lkX3ZhbHVleyRuZXh0b2lkfSkpIHsKKwkJIyBmaW5kIHRoZSBsb3dlc3QgT0lEIHdoaXMgaXMgaGlnaGVyIHRoYW4gJG5vaWQKKwkJJHByZXYgPSAiLjEuMy42LjEuMi4xLjE4IjsKKwkJJHByZXZfb2lkID0gbmV3IE5ldFNOTVA6Ok9JRCgkcHJldik7CisJCSRub2lkX29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoJG5vaWQpOworCQkjcHJpbnQgImxvb2tpbmcgZm9yIG5leHQgb2YgJG5vaWRcbiI7CisJCWZvciBteSAkY2FuZGlkYXRlIChrZXlzICVvaWRfdmFsdWUpIHsKKwkJCSNwcmludCAiZXZhbHVhdGluZyAkY2FuZGlkYXRlXG4iOworCQkJJGNhbmRpZGF0ZV9vaWQgPSBuZXcgTmV0U05NUDo6T0lEKCRjYW5kaWRhdGUpOworCQkJaWYgKCRub2lkX29pZCA8ICRjYW5kaWRhdGVfb2lkICYmICRwcmV2X29pZCA+ICRjYW5kaWRhdGVfb2lkKSB7CisJCQkJI3ByaW50ICJmb3VuZCBjYW5kaWRhdGUgJGNhbmRpZGF0ZVxuIjsKKwkJCQkkcHJldiA9ICRjYW5kaWRhdGU7CisJCQkJJHByZXZfb2lkID0gJGNhbmRpZGF0ZV9vaWQ7CisJCQl9CisJCX0KKwkJaWYgKCRwcmV2IGVxICIuMS4zLjYuMS4yLjEuMTgiKSB7CisJCQlyZXR1cm47ICMgbm8gT0lEIGhpZ2hlciB0aGFuICRub2lkIGZvdW5kCisJCX0KKwkJJG5leHRvaWQgPSAkcHJldjsKKwl9CisJcmV0dXJuICRuZXh0b2lkOworfQorCitzdWIgbW9kZV9nZXRfbmV4dHsKKwlteSAoJHJlcXVlc3QpPUBfOworCW15ICRvaWQ9JHJlcXVlc3QtPmdldE9JRCgpOworCSRTTk1QOjp1c2VfbnVtZXJpYyA9IDE7CisJbXkgJG5vaWQ9U05NUDo6dHJhbnNsYXRlT2JqKCRvaWQpOworCW15ICRuZXh0b2lkID0gZmluZF9uZXh0KCRub2lkKTsKKwkjcHJpbnQgImZvdW5kICRuZXh0b2lkXG4iOworCWlmKGRlZmluZWQoJG5leHRvaWQpKSB7CisJCW15ICR0eXBlID0gJG9pZF90eXBleyRuZXh0b2lkfTsKKwkJbXkgJHZhbHVlID0gJG9pZF92YWx1ZXskbmV4dG9pZH07CisJCWlmIChkZWZpbmVkKCR0eXBlKSBhbmQgZGVmaW5lZCgkdmFsdWUpKSB7CisJCQlyZXBseSgkcmVxdWVzdCwJJG5leHRvaWQpOworCQl9CisJfQorfQorCitzdWIgcmVwbHl7CisJbXkgKCRyZXF1ZXN0LCAkb2lkKT1AXzsKKworCW15ICR0eXBlPSRvaWRfdHlwZXskb2lkfTsKKwlteSAkdmFsdWU9JG9pZF92YWx1ZXskb2lkfTsKKworCSRyZXF1ZXN0LT5zZXRPSUQobmV3IE5ldFNOTVA6Ok9JRCgkb2lkKSk7CisJJHJlcXVlc3QtPnNldFZhbHVlKCR0eXBlLCAkdmFsdWUpOworfQorCisjIFBvcHVsYXRlZCBNSUIgT0lECisjCisjIyBkb3QxZEJhc2VQb3J0OgkxLjMuNi4xLjIuMS4xNy4xLjQuMS4xLjxkb3QxZEJhc2VQb3J0PgorIwkJCUlOVEVHRVIzMgorIworIyBkb3QxZEJhc2VQb3J0SWZJbmRleDoJMS4zLjYuMS4yLjEuMTcuMS40LjEuMi48ZG90MWRCYXNlUG9ydD4KKyMJCQlJTlRFR0VSMzIKKyMKKyMgZG90MWRTdHAqOgkJMS4zLjYuMS4yLjEuMTcuMi48MS0xND4KKyMJCQlJTlRFR0VSLCBPQ1RFVCBTVFJJTkcKKyMKKyMgZG90MWRUcEZkYkFkZHJlc3M6CTEuMy42LjEuMi4xLjE3LjQuMy4xLjEuPGRvdDFkVHBGZGJBZGRyZXNzPgorIwkJCU9DVEVUIFNUUklORyAoU0laRSAoNikpCisjCisjIGRvdDFkVHBGZGJQb3J0OgkxLjMuNi4xLjIuMS4xNy40LjMuMS4yLjxkb3QxZFRwRmRiQWRkcmVzcz4KKyMJCQlJTlRFR0VSMzIKKyMKKyMgZG90MWRUcEZkYlN0YXR1czoJMS4zLjYuMS4yLjEuMTcuNC4zLjEuMy48ZG90MWRUcEZkYkFkZHJlc3M+CisjCQkJSU5URUdFUgorIwkJCTEgOiBvdGhlcgorIwkJCTIgOiBpbnZhbGlkCisjCQkJMyA6IGxlYXJuZWQKKyMJCQk0IDogc2VsZgorIwkJCTUgOiBtZ210CisjCisKK3N1YiBwb3B1bGF0ZV9taWIgeworCW15ICRub3c7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICRzZWNvbmRzX3Bhc3NlZDsKKwkkcG9ydHM9MDsKKwkkb2lkPSIiOworCisgICAgICAgICRub3c9dGltZSgpOworCSRzZWNvbmRzX3Bhc3NlZD0kbm93LSRsYXN0X3BvcHVsYXRlZDsKKyAgICAgICAgcmV0dXJuIGlmKCRzZWNvbmRzX3Bhc3NlZCA8PSAkY2FjaGVfdGltb3V0KTsKKyAgICAgICAgJGxhc3RfcG9wdWxhdGVkPSRub3c7CisKKwklb2lkX3ZhbHVlPSgpOworCSVvaWRfdHlwZT0oKTsKKwklb2lkX25leHQ9KCk7CisJJWluZGV4ZXM9KCk7CisJJWludGVyZmFjZXM9KCk7CisJJW1hY3M9KCk7CisJJWFnZXM9KCk7CisJJWxvY2Fscz0oKTsKKwkldmxhbnM9KCk7CisJJXRhZ2dlZD0oKTsKKworCSMgZmlyc3QgcG9wdWxhdGVkIG9pZAorCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3In09Ii4xLjMuNi4xLjIuMS4xNy4xLjEiOworCisJY3JlYXRlYmFzZWluZm8oJGJyaWRnZSk7CisKKwlyZWFkaW5kZXhlcygkYnJpZGdlKTsKKwlyZWFkZm9yd2FyZHMoJGJyaWRnZSk7CisJcmVhZHZsYW5zKCRicmlkZ2UpOworCisJY3JlYXRlcG9ydHMoJGJyaWRnZSk7CisKKwlzdHBwcm9wZXJ0aWVzKCRicmlkZ2UpOworCisJc3RwcG9ydHByb3BlcnRpZXMoJGJyaWRnZSk7CisKKwlkb3QxZFRwcHJvcGVydGllcygpOworCisJbXkgJHByZXZvaWQgPSAkb2lkOworCW15ICRjdXJyb2lkID0gY3JlYXRlbWFjcygkYnJpZGdlKTsKKwkkb2lkX25leHR7JHByZXZvaWR9ID0gJGN1cnJvaWQ7CisKKwlwb3J0cHJvcGVydGllcygkYnJpZGdlKTsKKworCisJZG90MXFiYXNlKCRicmlkZ2UpOworCisJZG90MXFmZGIoJGJyaWRnZSk7CisKKwlkb3QxcWN1cnJlbnR2bGFucygkYnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdWIgZmluZGJyaWRnZXMoKQoreworCW15IEBicmlkZ2VzOworCisJb3BlbmRpcihESVIsICRuZXRkaXIpIG9yIGRpZSAidW5hYmxlIHRvIG9wZW4gJG5ldGRpciAhXG4iOworCisJd2hpbGUobXkgJGJyPXJlYWRkaXIoRElSKSl7CisJCW5leHQgaWYgJGJyIGVxICIuIjsKKwkJbmV4dCBpZiAkYnIgZXEgIi4uIjsKKwkJbmV4dCB1bmxlc3MgLWQgJG5ldGRpci4kYnIuIi9icmlkZ2UiOworCQlwdXNoIEBicmlkZ2VzLCAkYnI7CisJfQorCisJY2xvc2UoRElSKTsKKworCXJldHVybiBAYnJpZGdlczsKK30KKworc3ViIGNyZWF0ZWJhc2VpbmZvKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisKKwkkb2lkPSIuMS4zLjYuMS4yLjEuMTcuMS4xIjsKKwkkb2lkX3ZhbHVleyRvaWR9PW1hYzJoZXgocmVhZGZpbGUoJG5ldGRpci4kYnJpZGdlLiIvYWRkcmVzcyIsIDApKTsKKwkkb2lkX3R5cGV7JG9pZH09QVNOX09DVEVUX1NUUjsKKwkkb2lkX25leHR7JG9pZH09Ii4xLjMuNi4xLjIuMS4xNy4xLjIiOworCisJb3BlbmRpcihESVIsICRuZXRkaXIuJGJyaWRnZS4iL2JyaWYvIikgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAiLiRuZXRkaXIuJGJyaWRnZS4iYnJpZiAhXG4iOworCisJZm9yZWFjaCAkZW50cnkgKHJlYWRkaXIoRElSKSkgeworCQluZXh0IGlmICRlbnRyeSBlcSAiLiI7CisJCW5leHQgaWYgJGVudHJ5IGVxICIuLiI7CisJCSMgb25seSBjb3VudCBub24tdmxhbiBpbnRlcmZhY2VzCisJCW5leHQgaWYgJGVudHJ5ID1+IC9cLlswLTldKi87CisJCSRwb3J0cysrOworCX0KKworCWNsb3NlZGlyKERJUik7CisKKwkkb2lkPSIuMS4zLjYuMS4yLjEuMTcuMS4yIjsKKwkkb2lkX3ZhbHVleyRvaWR9PSRwb3J0czsKKwkkb2lkX3R5cGV7JG9pZH09QVNOX0lOVEVHRVI7CisJJG9pZF9uZXh0eyRvaWR9PSIuMS4zLjYuMS4yLjEuMTcuMS4zIjsKKworCSRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy4xLjMiOworCSRvaWRfdmFsdWV7JG9pZH09IjIiOwkjIHRyYW5zcGFyZW50IG9ubHkKKwkkb2lkX3R5cGV7JG9pZH09QVNOX0lOVEVHRVI7CisJJG9pZF9uZXh0eyRvaWR9PSIuMS4zLjYuMS4yLjEuMTcuMS40LjEuMS4xIjsKKworfQorCitzdWIgY3JlYXRlbWFjcygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworICAgICAgICBteSAkc3RhcnRfb2lkID0gJG9pZCA9ICIuMS4zLjYuMS4yLjEuMTcuNC4zLjEiOworCisJZm9yZWFjaCBteSAkbWFjIChzb3J0IHskYSBjbXAgJGJ9IGtleXMgJW1hY3MpIHsKKwkJbXkgJG1hY19vaWQ9bWFjMm9pZCgkbWFjKTsKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X21hY19vaWQpKXsKKwkJCSRmaXJzdF9tYWNfb2lkPSRtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEiLiRtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIiLiRtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4zIn09JG9pZC4iLjMiLiRtYWNfb2lkOworCQl9CisJCW15ICRwb3J0PSRtYWNzeyRtYWN9eyRicmlkZ2V9OworCQlteSAkYmFzZXBvcnQ9JGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH07CisJCW15ICRzdGF0dXM9JGxvY2Fsc3skbWFjfXskYnJpZGdlfTsKKwkJbXkgJGFnZT0kYWdlc3skbWFjfXskYnJpZGdlfTsKKworCQkkb2lkX3ZhbHVleyRvaWQuIi4xIi4kbWFjX29pZH09bWFjMmhleCgkbWFjKTsKKwkJJG9pZF90eXBleyRvaWQuIi4xIi4kbWFjX29pZH09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X21hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSIuJHBydl9tYWNfb2lkfT0KKwkJCQkkb2lkLiIuMSIuJG1hY19vaWQ7CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yIi4kbWFjX29pZH09JGJhc2Vwb3J0OworCQkkb2lkX3R5cGV7JG9pZC4iLjIiLiRtYWNfb2lkfT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X21hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiIuJHBydl9tYWNfb2lkfT0KKwkJCQkkb2lkLiIuMiIuJG1hY19vaWQ7CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4zIi4kbWFjX29pZH09JHN0YXR1czsKKwkJJG9pZF90eXBleyRvaWQuIi4zIi4kbWFjX29pZH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl9tYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjMiLiRwcnZfbWFjX29pZH09CisJCQkJJG9pZC4iLjMiLiRtYWNfb2lkOworCQl9CisKKwkJJHBydl9tYWNfb2lkPSRtYWNfb2lkOworCX0KKworCWlmICgkcHJ2X21hY19vaWQgYW5kICRmaXJzdF9tYWNfb2lkKSB7CisJCSRvaWRfbmV4dHskb2lkLiIuMSIuJHBydl9tYWNfb2lkfT0kb2lkLiIuMiIuJGZpcnN0X21hY19vaWQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMiIuJHBydl9tYWNfb2lkfT0kb2lkLiIuMyIuJGZpcnN0X21hY19vaWQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMyIuJHBydl9tYWNfb2lkfT0iLjEuMy42LjEuMi4xLjE3LjQuNC4xLjEuMSI7CisJfQorCisJdW5kZWYgJHBydl9tYWNfb2lkOworCXVuZGVmICRmaXJzdF9tYWNfb2lkOworCisJcmV0dXJuICRzdGFydF9vaWQuIi4xIi4kZmlyc3RfbWFjX29pZDsKK30KKworIyBUT0RPOiBpcyB0aGlzIHNlcXVlbmNlIGNvbXBsZXRlID8KK3N1YiBjcmVhdGVwb3J0cygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICgkYmFzZXBvcnQsICRwcmV2X2Jhc2Vwb3J0LCAkZmlyc3RfYmFzZXBvcnQpOworCSRiYXNlcG9ydD0xOworCW15ICRvaWQ9ICcuMS4zLjYuMS4yLjEuMTcuMS40LjEnOworCisJZm9yZWFjaCBteSAkcG9ydCAoa2V5cyAleyRpbnRlcmZhY2VzeyRicmlkZ2V9fSkgeworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfYmFzZXBvcnQpKXsKKwkJCSRmaXJzdF9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisJCW15ICRpbmRleD0kaW5kZXhlc3skYnJpZGdlfXskcG9ydH07CisJCSRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9PSRiYXNlcG9ydDsKKworCQkkb2lkX3ZhbHVleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT0kYmFzZXBvcnQ7CisJCSRvaWRfdHlwZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHBydl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT0kaW5kZXg7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHBydl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkkcHJ2X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwkJJGJhc2Vwb3J0Kys7CisJfQorCisJaWYgKCAkcHJ2X2Jhc2Vwb3J0IGFuZCAkZmlyc3RfYmFzZXBvcnQgKSB7CisJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcnZfYmFzZXBvcnR9PSRvaWQuIi4yLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJ2X2Jhc2Vwb3J0fT0iLjEuMy42LjEuMi4xLjE3LjIuMSI7CisJfQorCisJdW5kZWYgJHBydl9iYXNlcG9ydDsKKwl1bmRlZiAkZmlyc3RfYmFzZXBvcnQ7CisKK30KKworc3ViIHN0cHByb3BlcnRpZXMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAkZGlyID0gJG5ldGRpci4kYnJpZGdlLiIvYnJpZGdlLyI7CisKKwlAc3RwcHJvcHMgPSAoIHsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX1ZBTFVFLAorCQkJdmFsdWUgPT4gIjMiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjIiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMiIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4icHJpb3JpdHkiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjMiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMyIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4idG9wb2xvZ3lfY2hhbmdlX3RpbWVyIiwKKwkJCXR5cGUgPT4gQVNOX1RJTUVUSUNLUywKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjQiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNCIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4idG9wb2xvZ3lfY2hhbmdlIiwKKwkJCXR5cGUgPT4gQVNOX0NPVU5URVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi41IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjUiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInJvb3RfaWQiLAorCQkJdHlwZSA9PiBBU05fT0NURVRfU1RSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNiIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi42IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJyb290X3BhdGhfY29zdCIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNyIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi43IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJyb290X3BvcnQiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjgiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuOCIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4ibWF4X2FnZSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuOSIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi45IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJoZWxsb190aW1lIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMSIgfSwKKwkJCSMgVE9ETyAuLi4xNy4yLjEwCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTEiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuImZvcndhcmRfZGVsYXkiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjEyIiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjEyIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJtYXhfYWdlIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMyIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMyIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4iaGVsbG9fdGltZSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTQiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTQiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuImZvcndhcmRfZGVsYXkiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjE1LjEuMS4xIiB9LAorCQkJKTsKKworCWZvciAoJGk9MDsgJGkgPD0gJCNzdHBwcm9wczsgJGkrKykgeworCQlteSAlcHJvcHMgPSAleyRzdHBwcm9wc1skaV19OworCQkkb2lkID0gJHByb3BzeydvaWQnfTsKKwkJaWYgKCAkcHJvcHN7J2ZsYWdzJ30gJiBTVFBfUFJPUF9WQUxVRSwpIHsKKwkJCSRvaWRfdmFsdWV7JG9pZH0gPSAkcHJvcHN7J3ZhbHVlJ307CisJCX0KKwkJaWYgKCAkcHJvcHN7J2ZsYWdzJ30gJiBTVFBfUFJPUF9GSUxFLCkgeworCQkJJG9pZF92YWx1ZXskb2lkfSA9CisJCQlyZWFkZmlsZSgkcHJvcHN7J3ZhbHVlJ30sCisJCQkkcHJvcHN7J2ZsYWdzJ30pOworCQl9CisJCSRvaWRfdHlwZXskb2lkfSA9ICRwcm9wc3sndHlwZSd9OworCQkkb2lkX25leHR7JG9pZH0gPSAkcHJvcHN7J25leHRvaWQnfTsKKwl9Cit9CisKK3N1YiBzdHBwb3J0cHJvcGVydGllcworeworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAkYnJpZmRpciA9ICRuZXRkaXIuJGJyaWRnZS4iL2JyaWYvIjsKKwlteSAoJGJhc2Vwb3J0LCAkZmlyc3RfYmFzZXBvcnQsICRwcmV2X2Jhc2Vwb3J0KTsKKworCSRvaWQ9Jy4xLjMuNi4xLjIuMS4xNy4yLjE1LjEnOworCisJZm9yZWFjaCBteSAkcG9ydCAoa2V5cyAleyRpbnRlcmZhY2VzeyRicmlkZ2V9fSkgeworCQkkYmFzZXBvcnQgPSAkYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fTsKKworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfYmFzZXBvcnQpKXsKKwkJCSRmaXJzdF9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJbXkgJGludGVyZmFjZSA9ICRpbnRlcmZhY2VzeyRicmlkZ2V9eyRwb3J0fTsKKwkJbXkgJGlmZGlyID0gJGJyaWZkaXIuJGludGVyZmFjZTsKKworCQkjIGRvdDFkU3RwUG9ydAorCQkkb2lkX3ZhbHVleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT0kYmFzZXBvcnQ7CisJCSRvaWRfdHlwZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0UHJpb3JpdHkKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvcHJpb3JpdHkiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnRTdGF0ZQorCQlteSBAdHJhbnNsYXRpb24gPSAoMSwgMywgNCwgNSwgMik7CisJCW15ICRzdGF0ZSA9IHJlYWRmaWxlKCRpZmRpci4iL3N0YXRlIiwgMCk7CisJCSRvaWRfdmFsdWV7JG9pZC4iLjMuIi4kYmFzZXBvcnR9PSR0cmFuc2xhdGlvblskc3RhdGVdOworCQkkb2lkX3R5cGV7JG9pZC4iLjMuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjMuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjMuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydEVuYWJsZQorCQlAdHJhbnNsYXRpb24gPSAoMiwgMSwgMSwgMSwgMSk7CisJCSRvaWRfdmFsdWV7JG9pZC4iLjQuIi4kYmFzZXBvcnR9PSR0cmFuc2xhdGlvblskc3RhdGVdOworCQkkb2lkX3R5cGV7JG9pZC4iLjQuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjQuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjQuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydFBhdGhDb3N0CisJCSRvaWRfdmFsdWV7JG9pZC4iLjUuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3BhdGhfY29zdCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjUuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjUuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjUuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290CisJCSRvaWRfdmFsdWV7JG9pZC4iLjYuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL2Rlc2lnbmF0ZWRfcm9vdCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjYuIi4kYmFzZXBvcnR9PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNi4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3QKKwkJJG9pZF92YWx1ZXskb2lkLiIuNy4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvZGVzaWduYXRlZF9jb3N0IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuNy4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNy4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNy4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZQorCQkkb2lkX3ZhbHVleyRvaWQuIi44LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9kZXNpZ25hdGVkX2JyaWRnZSIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjguIi4kYmFzZXBvcnR9PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuOC4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuOC4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnQKKwkJJG9pZF92YWx1ZXskb2lkLiIuOS4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvZGVzaWduYXRlZF9wb3J0IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuOS4iLiRiYXNlcG9ydH09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi45LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi45LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnRGb3J3YXJkVHJhbnNpdGlvbnMgKG5vIHZhbHVlIGluIGJyaWRnZSBtb2R1bGUpCisKKwkJIyBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyCisJCSRvaWRfdmFsdWV7JG9pZC4iLjExLiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9wYXRoX2Nvc3QiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi4xMS4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMTEuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjExLiIuJGJhc2Vwb3J0OworCQl9CisKKworCQkkcHJldl9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJfQorCisJaWYgKCAkcHJldl9iYXNlcG9ydCBhbmQgJGZpcnN0X2Jhc2Vwb3J0ICkgeworCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjIuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuMy4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4zLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi40LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjQuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjUuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNS4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNi4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi42LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi43LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjcuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjguIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuOC4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuOS4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi45LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi4xMS4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xMS4iLiRwcmV2X2Jhc2Vwb3J0fT0iLjEuMy42LjEuMi4xLjE3LjQuMSI7CisJfQorCisJJG9pZCA9ICRvaWQuIi4xMS4iLiRwcmV2X2Jhc2Vwb3J0OworCisJdW5kZWYgJHByZXZfYmFzZXBvcnQ7CisJdW5kZWYgJGZpcnN0X2Jhc2Vwb3J0OworCit9CisKK3N1YiBkb3QxZFRwcHJvcGVydGllcygpCit7CisJQHN0cHByb3BzID0gKCB7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjQuMSIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9WQUxVRSwKKwkJCXZhbHVlID0+ICIwIiwKKwkJCXR5cGUgPT4gQVNOX0NPVU5URVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuNC4yIiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy40LjIiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfVkFMVUUsCisJCQl2YWx1ZSA9PiAiMzAwIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuNC4zIiB9LAorCQkJKTsKKworCWZvciAoJGk9MDsgJGkgPD0gJCNzdHBwcm9wczsgJGkrKykgeworCQlteSAlcHJvcHMgPSAleyRzdHBwcm9wc1skaV19OworCQkkb2lkID0gJHByb3BzeydvaWQnfTsKKwkJaWYgKCAkcHJvcHN7J2ZsYWdzJ30gJiBTVFBfUFJPUF9WQUxVRSwpIHsKKwkJCSRvaWRfdmFsdWV7JG9pZH0gPSAkcHJvcHN7J3ZhbHVlJ307CisJCX0KKwkJaWYgKCAkcHJvcHN7J2ZsYWdzJ30gJiBTVFBfUFJPUF9GSUxFLCkgeworCQkJJG9pZF92YWx1ZXskb2lkfSA9CisJCQlyZWFkZmlsZSgkcHJvcHN7J3ZhbHVlJ30sCisJCQkkcHJvcHN7J2ZsYWdzJ30pOworCQl9CisJCSRvaWRfdHlwZXskb2lkfSA9ICRwcm9wc3sndHlwZSd9OworCQkkb2lkX25leHR7JG9pZH0gPSAkcHJvcHN7J25leHRvaWQnfTsKKwl9Cit9CisKK3N1YiBwb3J0cHJvcGVydGllcworeworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAoJGJhc2Vwb3J0LCAkZmlyc3RfYmFzZXBvcnQsICRwcmV2X2Jhc2Vwb3J0KTsKKworCSRvaWQ9Jy4xLjMuNi4xLjIuMS4xNy40LjQuMSc7CisKKwlmb3JlYWNoIG15ICRwb3J0IChrZXlzICV7JGludGVyZmFjZXN7JGJyaWRnZX19KSB7CisJCSRiYXNlcG9ydCA9ICRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9OworCisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF9iYXNlcG9ydCkpeworCQkJJGZpcnN0X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKworCQlteSAkaW50ZXJmYWNlID0gJGludGVyZmFjZXN7JGJyaWRnZX17JHBvcnR9OworCQlteSAkaWZkaXIgPSAkbmV0ZGlyLiRpbnRlcmZhY2U7CisKKwkJIyBkb3QxZFRwUG9ydAorCQkkb2lkX3ZhbHVleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT0kYmFzZXBvcnQ7CisJCSRvaWRfdHlwZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRUcFBvcnRNYXhJbmZvCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL210dSIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkVHBQb3J0SW5GcmFtZXMKKwkJJG9pZF92YWx1ZXskb2lkLiIuMy4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvc3RhdGlzdGljcy9yeF9wYWNrZXRzIiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuMy4iLiRiYXNlcG9ydH09QVNOX0NPVU5URVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMy4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMy4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRUcFBvcnRPdXRGcmFtZXMKKwkJJG9pZF92YWx1ZXskb2lkLiIuNC4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvc3RhdGlzdGljcy90eF9wYWNrZXRzIiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuNC4iLiRiYXNlcG9ydH09QVNOX0NPVU5URVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNC4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNC4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRUcFBvcnRJbkRpc2NhcmRzCisJCSRvaWRfdmFsdWV7JG9pZC4iLjUuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3N0YXRpc3RpY3MvcnhfZHJvcHBlZCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjUuIi4kYmFzZXBvcnR9PUFTTl9DT1VOVEVSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjUuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjUuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkkcHJldl9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJfQorCisJaWYgKCAkcHJldl9iYXNlcG9ydCBhbmQgJGZpcnN0X2Jhc2Vwb3J0ICkgeworCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjIuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuMy4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4zLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi40LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjQuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjUuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNS4iLiRwcmV2X2Jhc2Vwb3J0fT0iLjEuMy42LjEuMi4xLjE3LjUuMSI7CisJfQorCisJJG9pZCA9ICRvaWQuIi41LiIuJHByZXZfYmFzZXBvcnQ7CisKKwl1bmRlZiAkcHJldl9iYXNlcG9ydDsKKwl1bmRlZiAkZmlyc3RfYmFzZXBvcnQ7Cit9CisKK3N1YiBkb3QxcWJhc2UoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKworCW15ICRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy43LjEuMSI7CisJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcuNyJ9PSRvaWQuIi4xIjsKKwkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNy43LjEifT0kb2lkLiIuMSI7CisKKwkkb2lkX3ZhbHVleyRvaWQuIi4xIn09MTsKKwkkb2lkX3R5cGV7JG9pZC4iLjEifT1BU05fSU5URUdFUjsKKwkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMiI7CisKKwkkb2lkX3ZhbHVleyRvaWQuIi4yIn09NDA5NDsKKwkkb2lkX3R5cGV7JG9pZC4iLjIifT1BU05fVU5TSUdORUQ7CisJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjMiOworCisJJG9pZF92YWx1ZXskb2lkLiIuMyJ9PTQwOTQ7CisJJG9pZF90eXBleyRvaWQuIi4zIn09QVNOX1VOU0lHTkVEOworCSRvaWRfbmV4dHskb2lkLiIuMyJ9PSRvaWQuIi40IjsKKworCSRvaWRfdmFsdWV7JG9pZC4iLjQifT0wOyAjIGZpbGxlZCBpbiBieSBjdXJyZW50dmxhbnMKKwkkb2lkX3R5cGV7JG9pZC4iLjQifT1BU05fVU5TSUdORUQ7CisJJG9pZF9uZXh0eyRvaWQuIi40In09JG9pZC4iLjUiOworCisJJG9pZF92YWx1ZXskb2lkLiIuNSJ9PTI7CisJJG9pZF90eXBleyRvaWQuIi41In09QVNOX0lOVEVHRVI7CisJJG9pZF9uZXh0eyRvaWQuIi41In09MDsgICMgZmlsbGVkIGluIGJ5IGRvdDFxZmRiCisKK30KKworc3ViIGRvdDFxZmRiKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisKKwlteSAkb2lkPSIuMS4zLjYuMS4yLjEuMTcuNy4xLjIiOworCWZvcmVhY2ggbXkgJHZsYW4gKHNvcnQgeyRhPD0+JGJ9IGtleXMgJXZsYW5zKXsKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X3ZsYW4pKXsKKwkJCSRmaXJzdF92bGFuPSR2bGFuOworCQkJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcuNy4xLjEuNSJ9PSRvaWQuIi4xLjEuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkfT0kb2lkLiIuMS4xLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMS4xLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMSJ9PSRvaWQuIi4xLjEuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4yIn09JG9pZC4iLjEuMi4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4xLiIuJHZsYW59PSR2bGFuOworCQkkb2lkX3R5cGV7JG9pZC4iLjEuMS4iLiR2bGFufT1BU05fVU5TSUdORUQ7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMS4iLiRwcnZfdmxhbn09JG9pZC4iLjEuMS4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4yLiIuJHZsYW59PTA7ICMgdG8gYmUgZmlsbGVkIGxhdGVyCisJCSRvaWRfdHlwZXskb2lkLiIuMS4yLiIuJHZsYW59PUFTTl9DT1VOVEVSOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjIuIi4kcHJ2X3ZsYW59PSRvaWQuIi4xLjIuIi4kdmxhbjsKKwkJfQorCisJCSRwcnZfdmxhbj0kdmxhbjsKKwl9CisJaWYoJHBydl92bGFuIGFuZCAkZmlyc3Rfdmxhbil7CisJCSRvaWRfbmV4dHskb2lkLiIuMS4xLiIuJHBydl92bGFufT0kb2lkLiIuMS4yLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuMS4yLiIuJHBydl92bGFufT0wOyAjIHRvIGJlIGZpbGxlZCBsYXRlcgorCX0KKworCW15ICVtYWN2bGFuPSgpOworCW15ICV2bGFubWFjPSgpOworCisJZm9yZWFjaCBteSAkdmxhbiAoc29ydCB7JGE8PT4kYn0ga2V5cyAldmxhbnMpeworCQlteSAkY291bnQ9MDsKKwkJZm9yZWFjaCBteSAkbWFjIChzb3J0IHskYSBjbXAgJGJ9IGtleXMgJW1hY3MpIHsKKwkJCW15ICR2YnJpZGdlPSRicmlkZ2UuIl92bGFuIi4kdmxhbjsKKwkJCW5leHQgdW5sZXNzKGRlZmluZWQoJG1hY3N7JG1hY317JHZicmlkZ2V9KSk7CisJCQkkY291bnQrKzsKKwkJCW15ICRtYWNfb2lkPW1hYzJvaWQoJG1hYyk7CisJCQkkbWFjdmxhbnskdmxhbi4kbWFjX29pZH09JG1hYzsKKwkJCSR2bGFubWFjeyR2bGFuLiRtYWNfb2lkfT0kdmxhbjsKKwkJfQorCQkkb2lkX3ZhbHVleyRvaWQuIi4xLjIuIi4kdmxhbn09JGNvdW50OworCX0KKworCWZvcmVhY2ggbXkgJHZtYWNfb2lkIChzb3J0IHskYSBjbXAgJGJ9IGtleXMgJXZsYW5tYWMpeworCQlteSAkbWFjPSRtYWN2bGFueyR2bWFjX29pZH07CisJCW15ICR2bGFuPSR2bGFubWFjeyR2bWFjX29pZH07CisKKwkJI3ByaW50ICJWTUFDOiAkdm1hY19vaWQgKCR2bGFuOiRtYWMpXG4iOworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3Rfdm1hY19vaWQpKXsKKwkJCSRmaXJzdF92bWFjX29pZD0kdm1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMi4iLiRwcnZfdmxhbn09JG9pZC4iLjIuMS4iLiR2bWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yLjEuIi4kdm1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMSJ9PSRvaWQuIi4yLjEuIi4kdm1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMiJ9PSRvaWQuIi4yLjIuIi4kdm1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMyJ9PSRvaWQuIi4yLjMuIi4kdm1hY19vaWQ7CisJCX0KKworCQlteSAkcG9ydD0kbWFjc3skbWFjfXskYnJpZGdlfTsKKwkJbXkgJGJhc2Vwb3J0PSRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9OworCQlteSAkc3RhdHVzPSRsb2NhbHN7JG1hY317JGJyaWRnZX07CisJCW15ICRhZ2U9JGFnZXN7JG1hY317JGJyaWRnZX07CisKKwkJcHJpbnQgIlZMQU4gJHZsYW46ICRtYWMgLT4gJHBvcnQ6JGJhc2Vwb3J0ICgkc3RhdHVzLCAkYWdlKVxuIjsgCisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4xLiIuJHZtYWNfb2lkfT1tYWMyaGV4KCRtYWMpOworCQkkb2lkX3R5cGV7JG9pZC4iLjIuMS4iLiR2bWFjX29pZH09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZtYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMS4iLiRwcnZfdm1hY19vaWR9PSRvaWQuIi4yLjEuIi4kdm1hY19vaWQ7CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLjIuIi4kdm1hY19vaWR9PSRiYXNlcG9ydDsKKwkJJG9pZF90eXBleyRvaWQuIi4yLjIuIi4kdm1hY19vaWR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfdm1hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4yLiIuJHBydl92bWFjX29pZH09JG9pZC4iLjIuMi4iLiR2bWFjX29pZDsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuMy4iLiR2bWFjX29pZH09JHN0YXR1czsKKwkJJG9pZF90eXBleyRvaWQuIi4yLjMuIi4kdm1hY19vaWR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfdm1hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4zLiIuJHBydl92bWFjX29pZH09JG9pZC4iLjIuMy4iLiR2bWFjX29pZDsKKwkJfQorCQkkcHJ2X3ZtYWNfb2lkPSR2bWFjX29pZDsKKwl9CisKKwlpZiAoJHBydl92bWFjX29pZCBhbmQgJGZpcnN0X3ZtYWNfb2lkKSB7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4xLiIuJHBydl92bWFjX29pZH09JG9pZC4iLjIuMi4iLiRmaXJzdF92bWFjX29pZDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLjIuIi4kcHJ2X3ZtYWNfb2lkfT0kb2lkLiIuMi4zLiIuJGZpcnN0X3ZtYWNfb2lkOworCQkkb2lkX25leHR7JG9pZC4iLjIuMy4iLiRwcnZfdm1hY19vaWR9PSIuMS4zLjYuMS4yLjEuMTcuNy4xLjQuMSI7CisJfQorCisJdW5kZWYgJGZpcnN0X3ZtYWNfb2lkOworCXVuZGVmICRwcnZfdm1hY19vaWQ7CisKKwl1bmRlZiAkZmlyc3RfdmxhbjsKKwl1bmRlZiAkcHJ2X3ZsYW47Cit9CisKK3N1YiBkb3QxcWN1cnJlbnR2bGFucygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCisKKwlteSAkb2lkPSIuMS4zLjYuMS4yLjEuMTcuNy4xLjQuMSI7CisJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcuNy4xLjQifT0kb2lkOworCisJJG9pZF92YWx1ZXskb2lkfT0wOwkjIGNhbid0IGtlZXAgdHJhY2sgb2YgdGhpcyBpbmZvCisJJG9pZF90eXBleyRvaWR9PUFTTl9DT1VOVEVSOworCisJbXkgJGNvdW50PTA7CisJJG9pZD0iLjEuMy42LjEuMi4xLjE3LjcuMS40LjIiOworCWZvcmVhY2ggbXkgJHZsYW4gKHNvcnQgeyRhPD0+JGJ9IGtleXMgJXZsYW5zKXsKKwkJJGNvdW50Kys7CisJCW15IEBhbGxwb3J0cz0oKTsKKwkJbXkgQHVudGFnZ2VkcG9ydHM9KCk7CisJCWZvcmVhY2ggbXkgJHBvcnQgKGtleXMgJXskdmxhbnN7JHZsYW59fSl7CisJCQkkYmFzZXBvcnQ9JGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH07CisJCQlwdXNoIEBhbGxwb3J0cywgJGJhc2Vwb3J0OworCQkJcHVzaCBAdW50YWdnZWRwb3J0cywgJGJhc2Vwb3J0CisJCQkJdW5sZXNzKCR0YWdnZWR7JHZsYW59eyRwb3J0fSk7CisJCX0KKwkJI3ByaW50ICJBRERJTkc6IHZsYW4gJHZsYW4gKEBhbGxwb3J0cywgQHVudGFnZ2VkcG9ydHMpXG4iOworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfdmxhbikpeworCQkJJGZpcnN0X3ZsYW49JHZsYW47CisJCQkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNy43LjEuNC4xIn09JG9pZC4iLjEuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWR9PSRvaWQuIi4xLjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xLjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yLjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMyJ9PSRvaWQuIi4zLjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNCJ9PSRvaWQuIi40LjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNSJ9PSRvaWQuIi41LjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNiJ9PSRvaWQuIi42LjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNyJ9PSRvaWQuIi43LjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuMC4iLiR2bGFufT0wOyAjIGNhbid0IGtlZXAgdHJhY2sgb2YgdGhpcworCQkkb2lkX3R5cGV7JG9pZC4iLjEuMC4iLiR2bGFufT1BU05fVElNRVRJQ0tTOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi4xLjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuMC4iLiR2bGFufT0kdmxhbjsKKwkJJG9pZF90eXBleyRvaWQuIi4yLjAuIi4kdmxhbn09QVNOX1VOU0lHTkVEOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi4yLjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjMuMC4iLiR2bGFufT0kdmxhbjsgCisJCSRvaWRfdHlwZXskb2lkLiIuMy4wLiIuJHZsYW59PUFTTl9VTlNJR05FRDsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMy4wLiIuJHBydl92bGFufT0kb2lkLiIuMy4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi40LjAuIi4kdmxhbn09Z2V0cG9ydGxpc3QoQGFsbHBvcnRzKTsKKwkJJG9pZF90eXBleyRvaWQuIi40LjAuIi4kdmxhbn09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNC4wLiIuJHBydl92bGFufT0kb2lkLiIuNC4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi41LjAuIi4kdmxhbn09Z2V0cG9ydGxpc3QoQHVudGFnZ2VkcG9ydHMpOworCQkkb2lkX3R5cGV7JG9pZC4iLjUuMC4iLiR2bGFufT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi41LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi41LjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjYuMC4iLiR2bGFufT0xOworCQkkb2lkX3R5cGV7JG9pZC4iLjYuMC4iLiR2bGFufT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNi4wLiIuJHBydl92bGFufT0kb2lkLiIuNi4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi43LjAuIi4kdmxhbn09MDsKKwkJJG9pZF90eXBleyRvaWQuIi43LjAuIi4kdmxhbn09QVNOX1RJTUVUSUNLUzsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNy4wLiIuJHBydl92bGFufT0kb2lkLiIuNy4wLiIuJHZsYW47CisJCX0KKwkJJHBydl92bGFuPSR2bGFuOworCX0KKworCSRvaWRfdmFsdWV7Ii4xLjMuNi4xLjIuMS4xNy43LjEuMS40In09JGNvdW50OworCWlmKCRwcnZfdmxhbiBhbmQgJGZpcnN0X3ZsYW4peworCQkkb2lkX25leHR7JG9pZC4iLjEuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjIuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjIuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjMuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjMuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjQuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjQuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjUuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjUuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjYuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjYuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjcuMC4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjcuMC4iLiRwcnZfdmxhbn09Ii4xLjMuNi4xLjIuMS4xNy43LjEuNC4zIjsKKwl9CisKKwl1bmRlZiAkcHJ2X3ZsYW47CisJdW5kZWYgJGZpcnN0X3ZsYW47CisKK30KKworc3ViIHJlYWRmb3J3YXJkcygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICRmZGI9JG5ldGRpci4kYnJpZGdlLiIvYnJmb3J3YXJkIjsKKworCW9wZW4oRldELCAkZmRiKSBvciByZXR1cm4gLTE7CisJd2hpbGUoc3lzcmVhZChGV0QsICRkYXRhLCAyMCkpeworCQlteSAkbWFjOworCQlteSAoJGIxLCRiMiwkYjMsJGI0LCRiNSwkYjYsJHBvcnQsJGxvY2FsLCRhZ2UsJGhpKT0KKwkJdW5wYWNrKCJDNiBDIEMgTCBDIHgzIiwgJGRhdGEpOworCQkkbWFjPXNwcmludGYoIiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4IiwKKwkJCQkJJGIxLCRiMiwkYjMsJGI0LCRiNSwkYjYpOworCQkkYWdlPSRhZ2UvMTAwOworCQkkbWFjc3skbWFjfXskYnJpZGdlfT0kcG9ydDsKKwkJJGFnZXN7JG1hY317JGJyaWRnZX09JGFnZTsKKwkJJGxvY2Fsc3skbWFjfXskYnJpZGdlfT1GREJfU1RBVFVTX0xFQVJORUQ7CisJCW5leHQgaWYgKCRsb2NhbCk7CisJCSRtYWNzeyRtYWN9eyRicmlkZ2V9PSRicmlkZ2U7CisJCSRsb2NhbHN7JG1hY317JGJyaWRnZX09RkRCX1NUQVRVU19TRUxGOworCX0KKwljbG9zZShGV0QpOworfQorCitzdWIgcmVhZGluZGV4ZXMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKworCW15ICRicmlmZGlyPSRuZXRkaXIuJGJyaWRnZS4iL2JyaWYvIjsKKworCW9wZW5kaXIoRElSLCAkYnJpZmRpcikgb3IgcmV0dXJuIC0xOworCW15IEBpbnRlcmZhY2VzID0gcmVhZGRpcihESVIpOworCW5leHQgaWYgKCQjaW50ZXJmYWNlcyBsdCAyKTsKKwlmb3JlYWNoIG15ICRpZiAoQGludGVyZmFjZXMpIHsKKwkJbmV4dCBpZiAkaWYgZXEgIi4iOworCQluZXh0IGlmICAkaWYgZXEgIi4uIjsKKworCQlteSAkcG9ydD1oZXgocmVhZGZpbGUoJGJyaWZkaXIuJGlmLiIvcG9ydF9ubyIsIDApKTsKKwkJbXkgJGluZGV4PXJlYWRmaWxlKCRuZXRkaXIuJGlmLiIvaWZpbmRleCIsIDApOworCisJCSRpbmRleGVzeyRicmlkZ2V9eyRwb3J0fT0kaW5kZXg7CisJCSRpbnRlcmZhY2VzeyRicmlkZ2V9eyRwb3J0fT0kaWY7CisJfQorCisJJGluZGV4ZXN7JGJyaWRnZX17JGJyaWRnZX09cmVhZGZpbGUoJG5ldGRpci4kYnJpZGdlLiIvaWZpbmRleCIsIDApOworCisJY2xvc2UoRElSKTsKK30KKworc3ViIHJlYWR2bGFucygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICRicmlmZGlyID0gJG5ldGRpci4kYnJpZGdlLiIvYnJpZi8iOworCW15ICVpZnM7CisKKwlvcGVuZGlyKERJUiwgJGJyaWZkaXIpIG9yIHJldHVybiAtMTsKKwlteSBAaW50ZXJmYWNlcyA9IHJlYWRkaXIoRElSKTsKKwlyZXR1cm4gaWYgKCQjaW50ZXJmYWNlcyA8IDIpOworCWZvcmVhY2ggbXkgJGlmIChAaW50ZXJmYWNlcykgeworCQluZXh0IGlmICRpZiBlcSAiLiI7CisJCW5leHQgaWYgICRpZiBlcSAiLi4iOworCQkkaWZzeyRpZn09MTsKKwl9CisJY2xvc2UoRElSKTsKKworCW9wZW5kaXIoRElSLCAkbmV0ZGlyKSBvciByZXR1cm4gLTE7CisJQGludGVyZmFjZXMgPSByZWFkZGlyKERJUik7CisJcmV0dXJuIDAgaWYgKCQjaW50ZXJmYWNlcyA8IDIpOworCWZvcmVhY2ggbXkgJGlmIChAaW50ZXJmYWNlcykgeworCQluZXh0IGlmICRpZiBlcSAiLiI7CisJCW5leHQgaWYgICRpZiBlcSAiLi4iOworCQluZXh0IHVubGVzcygkaWY9fi9eKC4qKVwuKFxkKykkLyk7CisJCW15ICRwaWY9JDE7CisJCW15ICR2bGFuPSQyOworCQluZXh0IHVubGVzcyhkZWZpbmVkKCRpZnN7JHBpZn0pKTsKKwkJdHJhY2V2bGFuKCR2bGFuLCAkaWYsICRicmlkZ2UpOworCX0KKwljbG9zZShESVIpOworfQorCitzdWIgdHJhY2V2bGFueworCW15ICgkdmxhbiwgJGludGVyZmFjZSwgJGJyaWRnZSk9QF87CisKKwlteSAkYnJpZmRpcj0kbmV0ZGlyLiRpbnRlcmZhY2UuIi9icnBvcnQvYnJpZGdlL2JyaWYvIjsKKworCW9wZW5kaXIoRElSLCAkYnJpZmRpcikgb3IgcmV0dXJuIC0xOworCW15IEBpbnRlcmZhY2VzID0gcmVhZGRpcihESVIpOworCXJldHVybiBpZiAoJCNpbnRlcmZhY2VzIDwgMik7CisJZm9yZWFjaCBteSAkaWYgKEBpbnRlcmZhY2VzKSB7CisJCW5leHQgaWYgJGlmIGVxICIuIjsKKwkJbmV4dCBpZiAgJGlmIGVxICIuLiI7CisJCW15ICRwb3J0OworCQlteSAkaW5kZXg7CisJCWlmKCRpZj1+L14oLiopXC4oXGQrKSQvKXsKKwkJCW15ICRwaWY9JDE7CisJCQkkYnJpZmRpcj0kbmV0ZGlyLiRwaWYuIi9icnBvcnQvYnJpZGdlL2JyaWYvIjsKKwkJCSRwb3J0PWhleChyZWFkZmlsZSgkYnJpZmRpci4kcGlmLiIvcG9ydF9ubyIsIDApKTsKKwkJCSRpbmRleD1yZWFkZmlsZSgkbmV0ZGlyLiRwaWYuIi9pZmluZGV4IiwgMCk7CisJCQkjJGluZGV4ZXN7JGJyaWRnZX17JHBvcnR9PSRpbmRleDsKKwkJCSMkaW50ZXJmYWNlc3skYnJpZGdlfXskcG9ydH09JGlmOworCQkJJHRhZ2dlZHskdmxhbn17JHBvcnR9PTE7CisJCX1lbHNleworCQkJbXkgJGJyaWQ9cmVhZGZpbGUoJG5ldGRpci4kaWYuIi9icnBvcnQvYnJpZGdlL2lmaW5kZXgiLAkwKTsKKwkJCSRicmlmZGlyPSRuZXRkaXIuJGlmLiIvYnJwb3J0L2JyaWRnZS9icmlmLyI7CisJCQkkcG9ydD1oZXgocmVhZGZpbGUoJGJyaWZkaXIuJGlmLiIvcG9ydF9ubyIsIDApKTsKKwkJCSRwb3J0PSRicmlkKjEwMDArJHBvcnQ7ICNjcmVhdGUgYSB1bmlxdWUgcG9ydCBudW1iZXIKKwkJCSRpbmRleD1yZWFkZmlsZSgkbmV0ZGlyLiRpZi4iL2lmaW5kZXgiLCAwKTsKKwkJCSRpbmRleGVzeyRicmlkZ2V9eyRwb3J0fT0kaW5kZXg7CisJCQkkaW50ZXJmYWNlc3skYnJpZGdlfXskcG9ydH09JGlmOworCQkJJHRhZ2dlZHskdmxhbn17JHBvcnR9PTA7CisJCX0KKwkJJHZsYW5zeyR2bGFufXskcG9ydH09MTsKKwkJI3ByaW50ICJWTEFOOiAkdmxhbiAtPiAkaWYgKCRwb3J0IDwtPiAkaW5kZXgpXG4iOworCX0KKwljbG9zZShESVIpOworCisJbXkgJGJyaWQ9cmVhZGZpbGUoJG5ldGRpci4kaW50ZXJmYWNlLiIvYnJwb3J0L2JyaWRnZS9pZmluZGV4IiwgMCk7CisJbXkgJGZkYj0kbmV0ZGlyLiRpbnRlcmZhY2UuIi9icnBvcnQvYnJpZGdlL2JyZm9yd2FyZCI7CisKKwlteSAkdmJyaWRnZT0kYnJpZGdlLiJfdmxhbiIuJHZsYW47CisJb3BlbihGV0QsICRmZGIpIG9yIHJldHVybiAtMTsKKwl3aGlsZShzeXNyZWFkKEZXRCwgJGRhdGEsIDIwKSl7CisJCW15ICRtYWM7CisJCW15ICgkYjEsJGIyLCRiMywkYjQsJGI1LCRiNiwkcG9ydCwkbG9jYWwsJGFnZSwkaGkpPQorCQl1bnBhY2soIkM2IEMgQyBMIEMgeDMiLCAkZGF0YSk7CisJCSAkbWFjPXNwcmludGYoIiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4IiwKKwkJCQkJJGIxLCRiMiwkYjMsJGI0LCRiNSwkYjYpOworCQkgJHBvcnQ9JGJyaWQqMTAwMCskcG9ydCB1bmxlc3MoZGVmaW5lZCgkaW5kZXhlc3skYnJpZGdlfXskcG9ydH0pKTsgICNjcmVhdGUgYSB1bmlxdWUgcG9ydCBudW1iZXIKKwkJICRhZ2U9JGFnZS8xMDA7CisJCSAjJG1hY3N7JG1hY317JGJyaWRnZX09JHBvcnQ7CisJCSAkbWFjc3skbWFjfXskdmJyaWRnZX09JHBvcnQ7CisJCSAjJGFnZXN7JG1hY317JGJyaWRnZX09JGFnZTsKKwkJICRhZ2VzeyRtYWN9eyR2YnJpZGdlfT0kYWdlOworCQkgIyRsb2NhbHN7JG1hY317JGJyaWRnZX09RkRCX1NUQVRVU19MRUFSTkVEOworCQkgJGxvY2Fsc3skbWFjfXskdmJyaWRnZX09RkRCX1NUQVRVU19MRUFSTkVEOworCQkgbmV4dCBpZiAoJGxvY2FsKTsKKwkJICMkbWFjc3skbWFjfXskYnJpZGdlfT0kYnJpZGdlOworCQkgJG1hY3N7JG1hY317JHZicmlkZ2V9PSRicmlkZ2U7CisJCSAjJGxvY2Fsc3skbWFjfXskYnJpZGdlfT1GREJfU1RBVFVTX1NFTEY7CisJCSAkbG9jYWxzeyRtYWN9eyR2YnJpZGdlfT1GREJfU1RBVFVTX1NFTEY7CisJfQorCWNsb3NlKEZXRCk7Cit9CisKK3N1YiByZWFkZmlsZSgpCit7CisJbXkgJGZpbGUgPSBzaGlmdDsKKwlteSAkZmxhZ3MgPSBzaGlmdDsKKworCW9wZW4oRklMRSwgJGZpbGUpIG9yIHByaW50ICJDb3VsZCBub3Qgb3BlbiBmaWxlICRmaWxlICFcbiI7CisJbXkgJHZhbHVlPTxGSUxFPjsKKwljaG9tcCAkdmFsdWU7CisJY2xvc2UoRklMRSk7CisKKwlpZiAoJGZsYWdzICYgU1RQX1BST1BfSEVYKSB7CisJCXJldHVybiBoZXgoJHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gJHZhbHVlOworfQorCitzdWIgZ2V0cG9ydGxpc3R7CisJbXkgQHBvcnRzPUBfOworCW15ICRwb3J0bGlzdD0iIjsKKworCUBwb3J0cz1zb3J0IHskYSA8PT4gJGJ9IEBwb3J0czsKKwlteSAkbGFzdD0xOworCWZvcmVhY2ggbXkgJHBvcnQgKEBwb3J0cyl7CisJCWZvcihteSAkaT0kbGFzdDsgJGk8JHBvcnQ7ICRpKyspeworCQkJJHBvcnRsaXN0PSRwb3J0bGlzdC4iMCI7CisJCX0KKwkJJHBvcnRsaXN0PSRwb3J0bGlzdC4iMSI7CisJCSRsYXN0PSRwb3J0KzE7CisJfQorCXJldHVybiBwYWNrKCdCKicsJHBvcnRsaXN0KTsgCit9CisKK3N1YiBtYWMyb2lkeworCW15ICgkbWFjKT1AXzsKKwlteSBAb2N0ZXRzPXNwbGl0KC86LywkbWFjKTsKKworCSRtYWM9IiI7CisJZm9yZWFjaCBteSAkb2N0ZXQgKEBvY3RldHMpeworCQkkbWFjPSRtYWMuIi4iLmhleCgkb2N0ZXQpOworCX0KKwlyZXR1cm4gJG1hYzsKK30KKworc3ViIG1hYzJoZXh7CisgICAgICAgIG15ICgkbWFjKT1AXzsKKwlteSBAZGVjaW1hbHM7CisJbXkgQG9jdGV0cz1zcGxpdCgvOi8sJG1hYyk7CisKKwlmb3JlYWNoIG15ICRvY3RldCAoQG9jdGV0cyl7CisJCXB1c2ggQGRlY2ltYWxzLCBoZXgoJG9jdGV0KTsKKwl9CisJcmV0dXJuIHBhY2soIkNDQ0NDQyIsIEBkZWNpbWFscyk7Cit9CisKK3N1YiBzaHV0ZG93biB7CisJJHJ1bm5pbmcgPSAwOworfQpkaWZmIC0tZ2l0IGEvbG9jYWwvc25tcGNoZWNrLmRlZiBiL2xvY2FsL3NubXBjaGVjay5kZWYKaW5kZXggODQ5OTdlZi4uYWQzOTJlZSAxMDA3NTUKLS0tIGEvbG9jYWwvc25tcGNoZWNrLmRlZgorKysgYi9sb2NhbC9zbm1wY2hlY2suZGVmCkBAIC0zMiw3ICszMiw3IEBACiAkYW5kbG9nPTA7CiAkc25tcHBhdGg9IkJJTkRJUiI7CiAkZXJhc2VsaW5lPSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcciI7Ci0kZml4aXQ9MDsgICMgdGhpcyBzaG91bGQgYmUgMCBub3QgLTEsIGJ1dCBpcyBuZWNpc3NhcnkgdGlsbCBnZXRjKFNURElOKSB3b3JrcworJGZpeGl0PTA7ICAjIHRoaXMgc2hvdWxkIGJlIDAgbm90IC0xLCBidXQgaXMgbmVjZXNzYXJ5IHRpbGwgZ2V0YyhTVERJTikgd29ya3MKICRyZXNjYW5XaGVuID0gMzAwOwogJGRpc3BsYXkgPSAkRU5WeydESVNQTEFZJ307CiAkaGlkZGVuID0gMDsKZGlmZiAtLWdpdCBhL2xvY2FsL3NubXBjb25mIGIvbG9jYWwvc25tcGNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM3YTUxMzYuLjAwMDAwMDAKLS0tIGEvbG9jYWwvc25tcGNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSw5MzMgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsIC13Ci0KLSMKLSMgQSBzaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGJ1aWxkZXIgYmFzZWQgb24gcXVlc3Rpb25zIGxpc3RlZCBpbgotIyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEl0IHdvdWxkIGNlcnRhaW5seSBiZSBlYXN5IHRvIHVzZSB0aGlzCi0jIGZvciBvdGhlciAobm9uLXNubXApIHByb2dyYW1zIGFzIHdlbGwuCi0jCi0KLXVzZSBHZXRvcHQ6OlN0ZDsKLXVzZSBUZXJtOjpSZWFkTGluZTsKLXVzZSBJTzo6RmlsZTsKLXVzZSBEYXRhOjpEdW1wZXI7Ci11c2UgRmlsZTo6Q29weTsKLWlmICgkXk8gZXEgJ01TV2luMzInKSB7Ci0gIGV2YWwgJ3JlcXVpcmUgV2luMzI6OlJlZ2lzdHJ5Oyc7Ci0gIGlmICgkQCkgewotICAgIHByaW50ICJcbldhcm5pbmc6IFBlcmwgbW9kdWxlIFdpbjMyOjpSZWdpc3RyeSBpcyBub3QgaW5zdGFsbGVkLiAgVGhpcyBtb2R1bGUgaXNcbiI7Ci0gICAgcHJpbnQgIiAgICAgICAgIHJlcXVpcmVkIHRvIHJlYWQgdGhlIFNOTVBTSEFSRVBBVEggYW5kIFNOTVBDT05GUEFUSCB2YWx1ZXMgZnJvbSBcbiI7Ci0gICAgcHJpbnQgIiAgICAgICAgIHRoZSByZWdpc3RyeS4gIFRvIHVzZSBzbm1wY29uZiB3aXRob3V0IHRoZSBtb2R1bGUgeW91IG5lZWQgdG9cbiI7Ci0gICAgcHJpbnQgIiAgICAgICAgIGRlZmluZSBTTk1QU0hBUkVQQVRIIGFuZCBTTk1QQ09ORlBBVEggYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4iOwotICAgIHByaW50ICIgICAgICAgICBvciB1c2UgdGhlIC1jIGFuZCAtSSBjb21tYW5kIGxpbmUgb3B0aW9ucy5cbiI7Ci0gIH0KLX0KLQotIyBnbG9iYWxzCi0ldG9rZW5pdGVtcz1xdyhsaW5lIDEgaW5mbyAxIGNvbW1lbnQgMSk7Ci0lYXJyYXlpdGVtcz1xdyhxdWVzdGlvbiAxIHZhbGlkYW5zd2VyIDEpOwotCi0jIGRlZmF1bHQgZm9sZGVyIGZvciBzbm1wY29uZi1kYXRhCi1pZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIikpKSB7Ci0gICRvcHRzeydjJ30gPSAmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIikgLiAiL3NubXBjb25mLWRhdGEiOwotfQotZWxzZSB7Ci0gICRvcHRzeydjJ30gPSAiL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBjb25mLWRhdGEiOwotfQotIAotIyBkZWZhdWx0IGNvbmZpZyBmaWxlIHBhdGgKLWlmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBDT05GUEFUSCIpKSkgewotICAkY29uZnBhdGggPSAmbXlfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKTsKLX0KLWVsc2UgewotICAkY29uZnBhdGggPSAiL3Vzci9sb2NhbC9zaGFyZS9zbm1wIjsKLX0KLQotIyBob21lIGVudmlyb25tZW50IHZhcmlhYmxlCi1pZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJIT01FIikpKSB7Ci0gICRob21lID0gJm15X2dldGVudigiSE9NRSIpIC4gIi8uc25tcCI7Ci19Ci1lbHNlIHsKLSAgJGhvbWUgPSAiKEhPTUUgZGlyIC0gbi9hKSI7Ci19Ci0KLSMgcmVhZCB0aGUgYXJndW1lbnQgc3RyaW5nCi1nZXRvcHRzKCJxYWRoZmM6cGlJOnI6UjpnOkciLCBcJW9wdHMpOwotCi0jIGRpc3BsYXkgaGVscAotaWYgKCRvcHRzeydoJ30pIHsKLSAgICBwcmludCAiJDAgW29wdGlvbnNdIFtGSUxFVE9DUkVBVEUuLi5dXG4iOwotICAgIHByaW50ICJvcHRpb25zOlxuIjsKLSAgICBwcmludCAiICAtZiAgICAgICAgICAgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzIHdpdGhvdXQgcHJvbXB0aW5nXG4iOwotICAgIHByaW50ICIgIC1pICAgICAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byAkY29uZnBhdGguXG4iOwotICAgIHByaW50ICIgIC1wICAgICAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byAkaG9tZS5cbiI7Ci0gICAgcHJpbnQgIiAgLUkgRElSICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvIERJUi5cbiI7Ci0gICAgcHJpbnQgIiAgLWEgICAgICAgICAgIERvbid0IGFzayBhbnkgcXVlc3Rpb25zLCBqdXN0IHJlYWQgaW4gY3VycmVudFxuIjsKLSAgICBwcmludCAiICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgLmNvbmYgZmlsZXMgYW5kIGNvbW1lbnQgdGhlbVxuIjsKLSAgICBwcmludCAiICAtciBhbGx8bm9uZSAgUmVhZCBpbiBhbGwgb3Igbm9uZSBvZiB0aGUgLmNvbmYgZmlsZXMgZm91bmQuXG4iOwotICAgIHByaW50ICIgIC1SIGZpbGUsLi4uICBSZWFkIGluIGEgcGFydGljdWxhciBsaXN0IG9mIC5jb25mIGZpbGVzLlxuIjsKLSAgICBwcmludCAiICAtZyBHUk9VUCAgICAgQXNrIGEgc2VyaWVzIG9mIEdST1VQZWQgcXVlc3Rpb25zLlxuIjsKLSAgICBwcmludCAiICAtRyAgICAgICAgICAgTGlzdCBrbm93biBHUk9VUHMuXG4iOwotICAgIHByaW50ICIgIC1jIGNvbmZfZGlyICB1c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LlxuIjsKLSAgICBwcmludCAiICAtcSAgICAgICAgICAgcnVuIG1vcmUgcXVpZXRseSB3aXRoIGxlc3MgYWR2aWNlLlxuIjsKLSAgICBwcmludCAiICAtZCAgICAgICAgICAgdHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0LlxuIjsKLSAgICBwcmludCAiICAtRCAgICAgICAgICAgdHVybiBvbiBkZWJ1Z2dpbmcgZHVtcGVyIG91dHB1dC5cbiI7Ci0gICAgZXhpdDsKLX0KLQotIyBzZXR1cCB0ZXJtaW5hbCBpbnRlcmZhY2UuCi0kRU5WeydQRVJMX1JMJ309J289MCcgaWYgKCFleGlzdHMoJEVOVnsnUEVSTF9STCd9KSk7Ci0kdGVybSA9IG5ldyBUZXJtOjpSZWFkTGluZSAnc25tcGNvbmYnOwotCi0jIHJlYWQgaW4gY29uZmlndXJhdGlvbiBmaWxlIHNldAotcmVhZF9jb25maWdfZmlsZXMoJG9wdHN7J2MnfSwgXCVmaWxldHlwZXMpOwotZGVidWcobXlfRHVtcGVyKFwlZmlsZXR5cGVzKSk7Ci0KLWlmICgkb3B0c3snRyd9KSB7Ci0gICAgUHJpbnQoIlxuS25vd24gR1JPVVBzIG9mIHRva2VuczpcblxuIik7Ci0gICAgZm9yZWFjaCBteSAkZ3JvdXAgKGtleXMoJWdyb3VwcykpIHsKLQlwcmludCAiICAkZ3JvdXBcbiI7Ci0gICAgfQotICAgIFByaW50KCJcbiIpOwotICAgIGV4aXQ7Ci19Ci0KLSMKLSMgRXhwYW5kIHRoZSBzZWFyY2ggcGF0aCBpbiBjYXNlIGl0IGNvbnRhaW5zIG11bHRpcGxlIGRpcmVjdG9yaWVzCi0jIHNlcGFyYXRlZCBieSA6IChVbml4KSBvciA7IChXaW4zMikKLSMKLW15ICRFTlZfU0VQQVJBVE9SID0gJzonOwotaWYgKCReTyBlcSAnTVNXaW4zMicpIHsKLSAgJEVOVl9TRVBBUkFUT1IgPSAnOyc7Ci19Ci1teSBAc2VhcmNocGF0aCA9IHNwbGl0KC8kRU5WX1NFUEFSQVRPUi8sICRjb25mcGF0aCk7Ci1wdXNoIEBzZWFyY2hwYXRoLCAiL3Vzci9sb2NhbC9ldGMvc25tcCI7Ci1wdXNoIEBzZWFyY2hwYXRoLCAiLiI7Ci1wdXNoIEBzZWFyY2hwYXRoLCAiJGhvbWUiOwotCi0jIFJlbW92ZSB0cmFpbGluZyAvJ3Mgb3IgXCdzCi1mb3IgKG15ICRpPTA7ICRpIDw9ICQjc2VhcmNocGF0aDsgJGkrKykgewotICAkc2VhcmNocGF0aFskaV0gPX4gLyguKj8pKFtcL1xcXSkqJC87Ci0gICRzZWFyY2hwYXRoWyRpXSA9ICQxOwotfQotCi0jIERldGVybWluZSBwZXJzaXN0ZW50IGRpcmVjdG9yeS4gIE9yZGVyIG9mIHByZWZlcmVuY2U6Ci0jIAotIyBmaWxlIGluIFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlCi0jIGRpcmVjdG9yeSBkZWZpbmVkIGJ5IHBlcnNpc3RlbnREaXIgc25tcC5jb25mIHZhcmlhYmxlCi0jIGRpcmVjdG9yeSBpbiBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlCi0jIGRlZmF1bHQgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgZGlyZWN0b3J5Ci1teSAkcGVyc2lzdGVudERpciA9ICIiOwotbXkgJHBlcnNpc3RlbnRGaWxlID0gIiI7Ci0KLSMgU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUKLWlmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIikpKSB7Ci0gICRwZXJzaXN0ZW50RmlsZSA9ICZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIik7Ci0gIGRlYnVnICgicGVyc2lzdGVudCBmaWxlOiBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRcbiIpOwotfQotCi0jIHNubXAuY29uZiBwZXJzaXN0ZW50RGlyCi1pZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7Ci0gIGZvcmVhY2ggbXkgJGkgKEBzZWFyY2hwYXRoKSB7Ci0gICAgZGVidWcgKCJTZWFyY2hpbmcgZmlsZSAkaS9zbm1wLmNvbmYgZm9yIHBlcnNpc3RlbnREaXJcbiIpOwotICAgIG15ICR0ZW1wID0gZ2V0X3BlcnNpc3RlbnREaXIoIiRpL3NubXAuY29uZiIpOwotICAgIGlmICgkdGVtcCkgewotICAgICAgZGVidWcoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBzZXQgdG8gJHRlbXAgaW4gJGkvc25tcC5jb25mXG4iKTsKLSAgICAgICRwZXJzaXN0ZW50RGlyID0gJHRlbXA7Ci0gICAgICBsYXN0OwotICAgIH0KLSAgfQotfQotCi0jIFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUKLWlmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKLSAgaWYgKCZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9ESVIiKSkgewotICAgICRwZXJzaXN0ZW50RGlyID0gJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0RJUiIpOwotICAgIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6IFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0XG4iKTsKLSAgfQotfQotCi0jIFBFUlNJU1RFTlRfRElSRUNUT1JZIGRlZmF1bHQgdmFyaWFibGUKLWlmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKLSAgJHBlcnNpc3RlbnREaXIgPSAiL3Zhci9uZXQtc25tcCI7Ci0gIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6IFVzaW5nIGRlZmF1bHQgdmFsdWVcbiIpOwotfQotCi0jIFJlYnVpbGQgc2VhcmNoIHBhdGggd2l0aG91dCBwZXJzaXN0ZW50IGZvbGRlcgotIyBOb3RlOiAgcGVyc2lzdGVudCBmaWxlIGhhbmRsZWQgaW4gRmluZCBleGlzdGluZyAKLSMgZmlsZXMgdG8gcG9zc2libHkgcmVhZCBpbiBzZWN0aW9uCi1pZiAoJHBlcnNpc3RlbnREaXIpIHsKLSAgIyBSZW1vdmUgdHJhaWxpbmcgLydzIG9yIFwncwotICAkcGVyc2lzdGVudERpciA9fiAvKC4qPykoW1wvXFxdKSokLzsKLSAgJHBlcnNpc3RlbnREaXIgPSAkMTsKLSAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogJHBlcnNpc3RlbnREaXJcbiIpOwotCi0gIG15IEBzZWFyY2hwYXRoX29sZCA9IEBzZWFyY2hwYXRoOwotICBAc2VhcmNocGF0aCA9ICgpOwotICBmb3JlYWNoIG15ICRwYXRoX3RlbXAgKEBzZWFyY2hwYXRoX29sZCkgewotICAgIGlmICgkcGF0aF90ZW1wIGVxICRwZXJzaXN0ZW50RGlyKSB7Ci0gICAgICBkZWJ1Zygic2tpcHBpbmcgcGVyc2lzdGVudCBkaXJlY3RvcnkgJHBhdGhfdGVtcFxuIik7Ci0gICAgICBuZXh0OwotICAgIH0KLSAgICBwdXNoIEBzZWFyY2hwYXRoLCAkcGF0aF90ZW1wOwotICB9Ci19Ci0KLSMgUmVzZXQgJGNvbmZwYXRoIHRvIHRoZSBmaXJzdCBwYXRoCi0kY29uZnBhdGggPSAkc2VhcmNocGF0aFswXTsKLQotIwotIyBGaW5kIGV4aXN0aW5nIGZpbGVzIHRvIHBvc3NpYmx5IHJlYWQgaW4uCi0jCi1wdXNoIEBzZWFyY2hwYXRoLCAkb3B0c3tJfSBpZiAoJG9wdHN7SX0pOwotZm9yZWFjaCBteSAkaSAoQHNlYXJjaHBhdGgpIHsKLSAgICBkZWJ1Zygic2VhcmNoaW5nICRpXG4iKTsKLSAgICBmb3JlYWNoIG15ICRmdCAoa2V5cyglZmlsZXR5cGVzKSkgewotICAgICAgICBpZiAoIiRpLyRmdCIgZXEgJHBlcnNpc3RlbnRGaWxlKSB7Ci0gICAgICAgICAgZGVidWcoInNraXBwaW5nIHBlcnNpc3RlbnQgZmlsZSAkaS8kZnRcbiIpOwotICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQlkZWJ1Zygic2VhcmNoaW5nIGZvciAkaS8kZnRcbiIpOwotCSRrbm93bmZpbGVzeyIkaS8kZnQifSA9ICRmdCBpZiAoLWYgIiRpLyRmdCIpOwotCW15ICRsb2NhbGZ0ID0gJGZ0OwotCSRsb2NhbGZ0ID1+IHMvLmNvbmYvLmxvY2FsLmNvbmYvOwotCSRrbm93bmZpbGVzeyIkaS8kbG9jYWxmdCJ9ID0gJGZ0IGlmICgtZiAiJGkvJGxvY2FsZnQiKTsKLSAgICB9Ci19Ci0KLSMKLSMgQXNrIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0aGVtIHRvIGJlIHJlYWQgaW4gYW5kIHJlYWQgdGhlbQotIwotaWYgKGtleXMoJWtub3duZmlsZXMpKSB7Ci0gICAgbXkgQGZpbGVzOwotICAgIGlmIChkZWZpbmVkKCRvcHRzeydyJ30pKSB7Ci0JaWYgKCRvcHRzeydyJ30gZXEgImFsbCIgfHwgJG9wdHN7J3InfSBlcSAiYSIpIHsKLQkgICAgQGZpbGVzID0ga2V5cygla25vd25maWxlcyk7Ci0JfSBlbHNpZiAoJG9wdHN7J3InfSBuZSAibm9uZSIgJiYgJG9wdHN7J3InfSBuZSAibiIpIHsKLQkgICAgcHJpbnQgInVua25vd24gYXJndW1lbnQgdG8gLXI6ICRvcHRzeydyJ31cbiI7Ci0JICAgIGV4aXQoMSk7Ci0JfQotICAgIH0gZWxzaWYoZGVmaW5lZCgkb3B0c3snUid9KSkgewotCUBmaWxlcyA9IHNwbGl0KC9ccyosXHMqLywkb3B0c3snUid9KTsKLQlmb3JlYWNoIG15ICRpIChAZmlsZXMpIHsKLQkgICAgbXkgJHggPSAkaTsKLQkgICAgJHggPX4gcy8uKlwvKFteXC9dKykkLyQxLzsKLQkgICAgJGtub3duZmlsZXN7JGl9ID0gJHg7Ci0JfQotCVByaW50KCJyZWFkaW5nOiAiLCBqb2luKCIsIixAZmlsZXMpLCJcbiIpOwotICAgIH0gZWxzZSB7Ci0JQGZpbGVzID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJUaGUgZm9sbG93aW5nIGluc3RhbGxlZCBjb25maWd1cmF0aW9uIGZpbGVzIHdlcmUgZm91bmQ6XG4iLAotCQkJICAgICAgLXRhaWwgPT4gIldvdWxkIHlvdSBsaWtlIG1lIHRvIHJlYWQgdGhlbSBpbj8gIFRoZWlyIGNvbnRlbnQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGVcbm91dHB1dCBmaWxlcyBjcmVhdGVkIGJ5IHRoaXMgc2Vzc2lvbi5cblxuVmFsaWQgYW5zd2VyIGV4YW1wbGVzOiBcImFsbFwiLCBcIm5vbmVcIixcIjNcIixcIjEsMiw1XCJcbiIsCi0JCQkgICAgICAtbXVsdGlwbGUgPT4gMSwKLQkJCSAgICAgIC1xdWVzdGlvbiA9PiAnUmVhZCBpbiB3aGljaCcsCi0JCQkgICAgICAtZGVmYXVsdHZhbHVlID0+ICdhbGwnLAotCQkJICAgICAgc29ydCBrZXlzKCVrbm93bmZpbGVzKSk7Ci0gICAgfQotICAgIGZvcmVhY2ggbXkgJGkgKEBmaWxlcykgewotCWRlYnVnKCJyZWFkaW5nICRpXG4iKTsKLQlyZWFkX2NvbmZpZygkaSwgJGtub3duZmlsZXN7JGl9KTsKLSAgICB9Ci19Ci0KLWlmICgkb3B0c3snZyd9KSB7Ci0gICAgbXkgQGdyb3VwcyA9IHNwbGl0KC8sOlxzLywkb3B0c3snZyd9KTsKLSAgICBmb3JlYWNoIG15ICRncm91cCAoQGdyb3VwcykgewotCWRvX2dyb3VwKCRncm91cCk7Ci0gICAgfQotfSBlbHNpZiAoJCNBUkdWID49IDApIHsKLSAgICAjCi0gICAgIyBsb29wIHRocm91Z2ggcmVxdWVzdGVkIGZpbGVzLgotICAgICMKLSAgICBmb3JlYWNoIG15ICRpIChAQVJHVikgewotCWlmICghZGVmaW5lZCgkZmlsZXR5cGVzeyRpfSkpIHsKLQkgICAgd2FybiAiaW52YWxpZCBmaWxlOiAkaVxuIjsKLQl9IGVsc2UgewotCSAgICBpZiAoJG9wdHN7J2EnfSkgewotCQkkZGlkZmlsZXskaX0gPSAxOwotCSAgICB9IGVsc2UgewotCQlidWlsZF9maWxlKCR0ZXJtLCAkaSwgJGZpbGV0eXBlc3skaX0pOwotCSAgICB9Ci0JfQotICAgIH0KLX0gZWxzZSB7Ci0gICAgIwotICAgICMgYXNrIHVzZXIgdG8gc2VsZWN0IGZpbGUgdHlwZSB0byBvcGVyYXRlIG9uLgotICAgICMKLSAgICB3aGlsZSgxKSB7Ci0JbXkgJGxpbmUgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIkkgY2FuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHlvdS5cblNlbGVjdCB0aGUgZmlsZSB0eXBlIHlvdSB3aXNoIHRvIGNyZWF0ZTpcbih5b3UgY2FuIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGFzIHlvdSBydW4gdGhpcyBwcm9ncmFtKVxuIiwKLQkJCQktcXVlc3Rpb24gPT4gJ1NlbGVjdCBGaWxlJywKLQkJCQktb3RoZXJhbnN3ZXJzID0+IFsncXVpdCddLAotCQkJCS1tYXBhbnN3ZXJzID0+IHsgJ3EnID0+ICdxdWl0JyB9LAotCQkJCWtleXMoJWZpbGV0eXBlcykpOwotCWxhc3QgaWYgKCRsaW5lIGVxICJxdWl0Iik7Ci0JZGVidWcoImZpbGUgc2VsZWN0ZWQ6ICRsaW5lXG4iKTsKLQlidWlsZF9maWxlKCR0ZXJtLCAkbGluZSwgJGZpbGV0eXBlc3skbGluZX0pOwotICAgIH0KLX0KLQotIwotIyBXcml0ZSBvdXQgdGhlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBmaWxlcy4KLSMKLW91dHB1dF9maWxlcyhcJWZpbGV0eXBlcywgJHRlcm0pOwotCi0KLSMKLSMgRGlzcGxheSB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgdGhlIHVzZXIuCi0jCi1QcmludCgiXG5cblRoZSBmb2xsb3dpbmcgZmlsZXMgd2VyZSBjcmVhdGVkOlxuXG4iKTsKLUBkaWRmaWxlcyA9IGtleXMoJWRpZGZpbGUpOwotZm9yZWFjaCBteSAkaSAoQGRpZGZpbGVzKSB7Ci0gICAgaWYgKCRkaWRmaWxleyRpfSBuZSAiMSIpIHsKLQlpZiAoJG9wdHN7J2knfSB8fCAkb3B0c3snSSd9KSB7Ci0gICAgICAgICAgJG9wdHN7J0knfSA9ICIkY29uZnBhdGgiIGlmICghJG9wdHN7J0knfSk7Ci0KLSAgICAgICAgICBpZiAoISAoLWQgIiRvcHRzeydJJ30iKSAmJiAhIChta2RpciAoIiRvcHRzeydJJ30iLCAwNzU1KSkpIHsKLQkgICAgcHJpbnQgIlxuQ291bGQgbm90IGNyZWF0ZSAkb3B0c3snSSd9IGRpcmVjdG9yeTogJCFcbiI7Ci0JICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7Ci0JICB9Ci0JICBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUgKCIkb3B0c3snSSd9LyRpIiwgIiRvcHRzeydJJ30vJGkuYmFrIikgaWYgKC1mICIkb3B0c3snSSd9LyRpIik7Ci0gICAgICAgICAgICBpZiAobW92ZSAoIiRkaWRmaWxleyRpfSIsICIkb3B0c3snSSd9IikpIHsKLSAgICAgICAgICAgICAgcHJpbnQoIiAgJGRpZGZpbGV7JGl9IGluc3RhbGxlZCBpbiAkb3B0c3snSSd9XG4iKTsJICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIHByaW50ICJcbkNvdWxkIG5vdCBtb3ZlIGZpbGUgJGRpZGZpbGV7JGl9IHRvICRvcHRzeydJJ30vJGk6ICQhXG4iOwotICAgICAgICAgICAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQl9IGVsc2lmICgkb3B0c3sncCd9KSB7Ci0JICBpZiAoISAoLWQgIiRob21lIikgJiYgISAobWtkaXIgKCIkaG9tZSIsIDA3NTUpKSkgewotCSAgICBwcmludCAiXG5Db3VsZCBub3QgY3JlYXRlICRob21lIGRpcmVjdG9yeTogJCFcbiI7Ci0JICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7Ci0JICB9Ci0JICBlbHNlIHsJICAgIAotCSAgICBtb3ZlICgiJGhvbWUvJGkiLCAiJGhvbWUvJGkuYmFrIikgaWYgKC1mICIkaG9tZS8kaSIpOwotCSAgICBpZiAobW92ZSAoIiRkaWRmaWxleyRpfSIsICIkaG9tZSIpKSB7Ci0JICAgICAgcHJpbnQoIiAgJGRpZGZpbGV7JGl9IGluc3RhbGxlZCBpbiAkaG9tZVxuIik7Ci0JICAgIH0KLQkgICAgZWxzZSB7Ci0JICAgICAgcHJpbnQgIlxuQ291bGQgbm90IG1vdmUgZmlsZSAkZGlkZmlsZXskaX0gdG8gJGhvbWU6ICQhXG4iOwotCSAgICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7Ci0gIAkgICAgfQotCSAgfQotICAJfSBlbHNlIHsKLQkgICAgUHJpbnQoIiAgJGRpZGZpbGV7JGl9ICIsCi0JICAgICgkaSBuZSAkZGlkZmlsZXskaX0pPyJbIGZyb20gJGkgc3BlY2lmaWNhdGlvbnNdIjoiICIsIlxuIik7Ci0JICAgIGlmICgkb3B0c3snZCd9KSB7Ci0JCW9wZW4oSSwkZGlkZmlsZXskaX0pOwotCQlkZWJ1ZygiICAgICIgLiBqb2luKCIgICAgIiw8ST4pIC4gIlxuIik7Ci0JCWNsb3NlKEkpOwotCSAgICB9Ci0JfQotICAgIH0KLX0KLQotaWYgKCEkb3B0c3sncCd9ICYmICEkb3B0c3snaSd9ICYmICEkb3B0c3snSSd9KSB7Ci0gICAgUHJpbnQoIlxuVGhlc2UgZmlsZXMgc2hvdWxkIGJlIG1vdmVkIHRvICRjb25mcGF0aCBpZiB5b3UKLXdhbnQgdGhlbSB1c2VkIGJ5IGV2ZXJ5b25lIG9uIHRoZSBzeXN0ZW0uICBJbiB0aGUgZnV0dXJlLCBpZiB5b3UgYWRkIAotdGhlIC1pIG9wdGlvbiB0byB0aGUgY29tbWFuZCBsaW5lIEknbGwgY29weSB0aGVtIHRoZXJlIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4KLQotT3IsIGlmIHlvdSB3YW50IHRoZW0gZm9yIHlvdXIgcGVyc29uYWwgdXNlIG9ubHksIGNvcHkgdGhlbSB0bwotJGhvbWUgLiAgSW4gdGhlIGZ1dHVyZSwgaWYgeW91IGFkZCB0aGUgLXAgb3B0aW9uIHRvIHRoZQotY29tbWFuZCBsaW5lIEknbGwgY29weSB0aGVtIHRoZXJlIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4KLQotIik7Ci19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBGdW5jdGlvbnMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1zdWIgUHJpbnQgewotICAgIHByaW50IEBfIGlmICghJG9wdHN7J3EnfSk7Ci19Ci0jCi0jIGhhbmRsZSBhIGdyb3VwIG9mIHF1ZXN0aW9ucwotIwotc3ViIGdldF95bl9tYXliZSB7Ci0gICAgbXkgJHF1ZXN0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJGFucyA9ICJ5IjsKLSAgICBpZiAoJHF1ZXN0aW9uIG5lICIiKSB7Ci0JJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sICRxdWVzdGlvbiwKLQkJCSAgdmFsaWRfYW5zd2Vycyhxdyh5ZXMgeSBubyBuKSksICd5Jyk7Ci0gICAgfQotICAgIHJldHVybiAoJGFucyA9fiAvXnkvKT8xOjA7Ci19Ci0KLXN1YiBkb19ncm91cCB7Ci0gICAgbXkgJGdyb3VwID0gc2hpZnQ7Ci0gICAgZGllICJubyBzdWNoIGdyb3VwICRncm91cFxuIiBpZiAoISRncm91cHN7JGdyb3VwfSk7Ci0gICAgZm9yZWFjaCBteSAkdG9rZW4gKEB7JGdyb3Vwc3skZ3JvdXB9fSkgewotCWlmICgkdG9rZW4tPlswXSBlcSAibWVzc2FnZSIpIHsKLQkgICAgUHJpbnQgKCIkdG9rZW4tPlsxXSAkdG9rZW4tPlsyXVxuIik7Ci0JfSBlbHNpZiAoJHRva2VuLT5bMF0gZXEgInN1Ymdyb3VwIikgewotCSAgICBkb19ncm91cCgkdG9rZW4tPlsxXSkgaWYgKGdldF95bl9tYXliZSgkdG9rZW4tPlsyXSkpOwotCX0gZWxzaWYgKGRlZmluZWQoJHRva2VubWFweyR0b2tlbi0+WzFdfSkpIHsKLQkgICAgaWYgKGdldF95bl9tYXliZSgkdG9rZW4tPlsyXSkpIHsKLQkJZG8gewotCQkgICAgZG9fbGluZSgkdG9rZW4tPlsxXSwgJHRva2VubWFweyR0b2tlbi0+WzFdfSk7Ci0JCX0gdW50aWwgKCR0b2tlbi0+WzBdIG5lICJtdWx0aXBsZSIgfHwKLQkJCSBnZXRfYW5zd2VyKCR0ZXJtLCAiRG8gYW5vdGhlciAkdG9rZW4tPlsxXSBsaW5lPyIsCi0JCQkJICAgIHZhbGlkX2Fuc3dlcnMocXcoeWVzIHkgbm8gbikpLCAneScpCi0JCQkgPX4gL24vKTsKLQkgICAgfQotCX0gZWxzaWYgKGRlZmluZWQoJGZpbGV0eXBlc3skdG9rZW4tPlsxXX0pKSB7Ci0JICAgICRkaWRmaWxleyR0b2tlbi0+WzFdfSA9IDE7Ci0JfSBlbHNlIHsKLQkgICAgZGllICJpbnZhbGlkIG1lbWJlciAkdG9rZW4tPlsxXSBvZiBncm91cCAkZ3JvdXBcbiI7Ci0JfQotICAgIH0KLX0KLQotIwotIyBidWlsZCBhIHBhcnRpY3VsYXIgdHlwZSBvZiBmaWxlIGJ5IG9wZXJhdGluZyBvbiBzZWN0aW9ucwotIwotc3ViIGJ1aWxkX2ZpbGUgewotICAgIG15ICgkdGVybSwgJGZpbGVuYW1lLCAkZmlsZWNvbmYpID0gQF87Ci0gICAgJGRpZGZpbGV7JGZpbGVuYW1lfSA9IDE7Ci0gICAgbXkgKEBsaW5lcyk7Ci0gICAgd2hpbGUoMSkgewotCW15ICRsaW5lID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgcHV0IGludG8gJGZpbGVuYW1lIGlzIGRpdmlkZWRcbmludG8gc2VjdGlvbnMuICBTZWxlY3QgYSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yICRmaWxlbmFtZVxudGhhdCB5b3Ugd2lzaCB0byBjcmVhdGU6XG4iLAotCQkJCS1vdGhlcmFuc3dlcnMgPT4gWydmaW5pc2hlZCddLAotCQkJCS1tYXBhbnN3ZXJzID0+IHsgJ2YnID0+ICdmaW5pc2hlZCcgfSwKLQkJCQktcXVlc3Rpb24gPT4gIlNlbGVjdCBzZWN0aW9uIiwKLQkJCQktbnVtZXJpYyA9PiAxLAotCQkJCW1hcCB7ICRfLT57J3RpdGxlJ31bMF0gfSBAJGZpbGVjb25mKTsKLQotCXJldHVybiBAbGluZXMgaWYgKCRsaW5lIGVxICJmaW5pc2hlZCIpOwotCWRvX3NlY3Rpb24oJGZpbGVjb25mLT5bJGxpbmUtMV0pOwotICAgIH0KLX0KLQotIwotIyBjb25maWd1cmUgYSBwYXJ0aWN1bGFyIHNlY3Rpb24gYnkgb3BlcmF0aW5nIG9uIHRva2VuIHR5cGVzCi0jCi1zdWIgZG9fc2VjdGlvbiB7Ci0gICAgbXkgJGNvbmZzZWN0ID0gc2hpZnQ7Ci0gICAgbXkgQGxpbmVzOwotICAgIHdoaWxlKDEpIHsKLQlQcmludCAoIlxuU2VjdGlvbjogJGNvbmZzZWN0LT57J3RpdGxlJ31bMF1cbiIpOwotCVByaW50ICgiRGVzY3JpcHRpb246XG4iKTsKLQlQcmludCAoIiAgIiwgam9pbigiXG4gICIsQHskY29uZnNlY3QtPnsnZGVzY3JpcHRpb24nfX0pLCJcbiIpOwotCW15ICRsaW5lID0KLQkgICAgZGlzcGxheV9tZW51KC1oZWFkID0+ICJTZWxlY3QgZnJvbTpcbiIsCi0JCQkgLW90aGVyYW5zd2VycyA9PiBbJ2ZpbmlzaGVkJywnbGlzdCddLAotCQkJIC1tYXBhbnN3ZXJzID0+IHsgJ2YnID0+ICdmaW5pc2hlZCcsCi0JCQkJCSAgJ2wnID0+ICdsaXN0JyB9LAotCQkJIC1xdWVzdGlvbiA9PiAnU2VsZWN0IHNlY3Rpb24nLAotCQkJIC1kZXNjcmlwdGlvbnMgPT4gW21hcCB7ICRjb25mc2VjdC0+eyRffXtpbmZvfVswXSB9IAotCQkJCQkgICBAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX1dLAotCQkJIEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fSk7Ci0JcmV0dXJuIEBsaW5lcyBpZiAoJGxpbmUgZXEgImZpbmlzaGVkIik7Ci0JaWYgKCRsaW5lIGVxICJsaXN0IikgewotCSAgICBwcmludCAiTGluZXMgZGVmaW5lZCBmb3Igc2VjdGlvbiBcIiRjb25mc2VjdC0+e3RpdGxlfVswXVwiIHNvIGZhcjpcbiI7Ci0JICAgIGZvcmVhY2ggbXkgJGkgKEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fSkgewotCQlpZiAoJCN7JGNvbmZzZWN0LT57JGl9eydyZXN1bHRzJ319ID49IDApIHsKLQkJICAgIHByaW50ICIgICIsam9pbigiXG4gICIsQHskY29uZnNlY3QtPnskaX17J3Jlc3VsdHMnfX0pLCJcbiI7Ci0JCX0KLQkgICAgfQotCSAgICBuZXh0OwotCX0KLQlkb19saW5lKCRsaW5lLCAkY29uZnNlY3QtPnskbGluZX0pOwotICAgIH0KLSAgICByZXR1cm47Ci19Ci0KLSMKLSMgQXNrIGFsbCB0aGUgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGxpbmUgdHlwZQotIwotc3ViIGRvX2xpbmUgewotICAgIG15ICR0b2tlbiA9IHNoaWZ0OwotICAgIG15ICRjb25mbGluZSA9IHNoaWZ0OwotICAgIG15IChAYW5zd2VycywgJGNvdW50ZXIsICRpKTsKLSMgICAgZGVidWcobXlfRHVtcGVyKCRjb25mbGluZSkpOwotICAgIFByaW50ICgiXG5Db25maWd1cmluZzogJHRva2VuXG4iKTsKLSAgICBQcmludCAoIkRlc2NyaXB0aW9uOlxuICAiLGpvaW4oIlxuICAgICIsQHskY29uZmxpbmUtPnsnaW5mbyd9fSksIlxuXG4iKTsKLSAgICBmb3IoJGk9MDsgJGkgPD0gJCN7JGNvbmZsaW5lLT57J3F1ZXN0aW9uJ319OyAkaSsrKSB7Ci0JaWYgKGRlZmluZWQoJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldKSAmJgotCSAgICAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0gbmUgIiIpIHsKLQkgICAgbXkgJHEgPSAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV07Ci0JICAgICRxID1+IHMvXCQoXGQrKS8kYW5zd2Vyc1skMV0vZzsKLQkgICAgZGVidWcoImFmdGVyOiAkdGVybSwgJHEsICIsJGNvbmZsaW5lLT57J3ZhbGlkYW5zd2VyJ31bJGldLCJcbiIpOwotCSAgICAkYW5zd2Vyc1skaV0gPSBnZXRfYW5zd2VyKCR0ZXJtLCAkcSwKLQkJCQkgICAgICAkY29uZmxpbmUtPnsndmFsaWRhbnN3ZXInfVskaV0pOwotCSAgICAkYW5zd2Vyc1skaV0gPX4gcy9cIi9cXFwiL2c7Ci0JICAgICRhbnN3ZXJzWyRpXSA9ICciJyAuICRhbnN3ZXJzWyRpXSAuICciJyBpZiAoJGFuc3dlcnNbJGldID1+IC9ccy8pOwotCX0KLSAgICB9Ci0gICAgaWYgKCQjeyRjb25mbGluZS0+eydsaW5lJ319ID09IC0xKSB7Ci0JbXkgKCRpLCRsaW5lKTsKLQlmb3IoJGk9MDsgJGkgPD0gJCN7JGNvbmZsaW5lLT57J3F1ZXN0aW9uJ319OyAkaSsrKSB7Ci0JICAgIG5leHQgaWYgKCFkZWZpbmVkKCRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSkgfHwKLQkJICAgICAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0gZXEgIiIpOwotCSAgICAkbGluZSAuPSAiIFwkIiAuICRpOwotCX0KLQlwdXNoIEB7JGNvbmZsaW5lLT57J2xpbmUnfX0sICRsaW5lOwotICAgIH0KLQotICAgIGZvcmVhY2ggbXkgJGxpbmUgKEB7JGNvbmZsaW5lLT57J2xpbmUnfX0pIHsKLQlteSAkZmluaXNoZWQgPSAkbGluZTsKLQlkZWJ1ZygicHJlbGluZTogJGZpbmlzaGVkXG4iKTsKLQlkZWJ1ZygiYW5zd2VyczogIixteV9EdW1wZXIoXEBhbnN3ZXJzKSk7Ci0JJGZpbmlzaGVkID1+IHMvXCQoXGQrKS8kYW5zd2Vyc1skMV0vZzsKLQlpZiAoJGxpbmUgPX4gcy9eZXZhbFxzKy8vKSB7Ci0JICAgIGRlYnVnKCJldmFsOiAkZmluaXNoZWRcbiIpOwotCSAgICAkZmluaXNoZWQgPSBldmFsICRmaW5pc2hlZDsKLQkgICAgZGVidWcoImV2YWwgcmVzdWx0czogJGZpbmlzaGVkXG4iKTsKLQl9Ci0JJGZpbmlzaGVkID0gJHRva2VuIC4gIiAiIC4gJGZpbmlzaGVkOwotCVByaW50ICgiXG5GaW5pc2hlZCBPdXRwdXQ6ICRmaW5pc2hlZFxuIik7Ci0JcHVzaCBAeyRjb25mbGluZS0+eydyZXN1bHRzJ319LCRmaW5pc2hlZDsKLSAgICB9Ci19Ci0KLSMKLSMgcmVhZCBhbGwgc2V0cyBvZiBjb25maWcgZmlsZXMgaW4gdGhlIHZhcmlvdXMgc3ViZGlyZWN0b3JpZXMuCi0jCi1zdWIgcmVhZF9jb25maWdfZmlsZXMgewotICAgIG15ICRyZWFkZGlyID0gc2hpZnQ7Ci0gICAgbXkgJGZpbGV0eXBlcyA9IHNoaWZ0OwotICAgIG9wZW5kaXIoREgsICRyZWFkZGlyKSB8fCBkaWUgIm5vIHN1Y2ggZGlyZWN0b3J5ICRyZWFkZGlyLCBkaWQgeW91IHJ1biBtYWtlIGluc3RhbGw/XG4iOwotICAgIG15ICRkaXI7Ci0gICAgbXkgJGNvbmZpZ2ZpbGVuYW1lPSJzbm1wY29uZi1jb25maWciOwotCi0gICAgd2hpbGUoZGVmaW5lZCgkZGlyID0gcmVhZGRpcihESCkpKSB7Ci0JbmV4dCBpZiAoJGRpciA9fiAvXlwuLyk7Ci0JbmV4dCBpZiAoJGRpciA9fiAvQ1ZTLyk7Ci0JZGVidWcoImRpciBlbnRyeTogJGRpclxuIik7Ci0JaWYgKC1kICIkcmVhZGRpci8kZGlyIiAmJiAtZiAiJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWUiKSB7Ci0KLQkgICAgbXkgJGNvbmZmaWxlOwotCi0JICAgICMgcmVhZCB0aGUgdG9wIGxldmVsIGNvbmZpZ3VyYXRpb24gaW5mb3JhbWF0aW9uIGFib3V0IHRoZSBkaXJlY290cnkuCi0JICAgIG9wZW4oSSwgIiRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lIik7Ci0JICAgIHdoaWxlKDxJPikgewotCQkkY29uZmZpbGUgPSAkMSBpZiAoL2ZvcmNvbmZmaWxlOiAoLiopLyk7Ci0JICAgIH0KLQkgICAgY2xvc2UoSSk7Ci0KLQkgICAgIyBubyBSRUFETUUgaW5mb3JtYXRpbm8uCi0JICAgIGlmICgkY29uZmZpbGUgZXEgIiIpIHsKLQkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBObyAnZm9yY29uZmZpbGUnIGluZm9ybWF0aW9uIGluICRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lXG4iOwotCQluZXh0OwotCSAgICB9Ci0KLQkgICAgIyByZWFkIGFsbCB0aGUgZGFhdCBpbiB0aGUgZGlyZWN0b3J5Ci0JICAgICRmaWxldHlwZXMtPnskY29uZmZpbGV9ID0gcmVhZF9jb25maWdfaXRlbXMoIiRyZWFkZGlyLyRkaXIiLCAkY29uZmZpbGUpOwotCX0gZWxzZSB7Ci0JICAgICMgbm8gUkVBRE1FIGluZm9ybWF0aW5vLgotCSAgICBwcmludCBTVERFUlIgIldhcm5pbmc6IE5vICRjb25maWdmaWxlbmFtZSBmaWxlIGZvdW5kIGluICRyZWFkZGlyLyRkaXJcbiI7Ci0JfQotICAgIH0KLSAgICBjbG9zZWRpciBESDsKLX0KLQotIwotIyByZWFkIGVhY2ggY29uZmlndXJhdGlvbiBmaWxlIGluIGEgZGlyZWN0b3J5Ci0jCi1zdWIgcmVhZF9jb25maWdfaXRlbXMgewotICAgIG15ICRpdGVtZGlyID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBvcGVuZGlyKElURU1TLCAkaXRlbWRpcik7Ci0gICAgbXkgJGZpbGU7Ci0gICAgbXkgQHJlc3VsdHM7Ci0gICAgd2hpbGUoZGVmaW5lZCgkZmlsZSA9IHJlYWRkaXIoSVRFTVMpKSkgewotCW5leHQgaWYgKCRmaWxlID1+IC9+JC8pOwotCW5leHQgaWYgKCRmaWxlID1+IC9ec25tcGNvbmYtY29uZmlnJC8pOwotCWlmICgtZiAiJGl0ZW1kaXIvJGZpbGUiKSB7Ci0JICAgIG15ICRyZXMgPSByZWFkX2NvbmZpZ19pdGVtKCIkaXRlbWRpci8kZmlsZSIsICR0eXBlKTsKLQkgICAgaWYgKHNjYWxhcihrZXlzKCUkcmVzKSkgPiAwKSB7Ci0JCXB1c2ggQHJlc3VsdHMsICRyZXM7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGNsb3NlZGlyKElURU1TKTsKLSAgICByZXR1cm4gXEByZXN1bHRzOwotfQotCi0jCi0jIG1hcmsgYSBsaXN0IG9mIHRva2VucyBhcyBhIHNwZWNpYWwgImdyb3VwIgotIwotc3ViIHJlYWRfY29uZmlnX2dyb3VwIHsKLSAgICBteSAoJGZoLCAkZ3JvdXAsICR0eXBlKSA9IEBfOwotICAgIG15ICRsaW5lOwotICAgIGRlYnVnKCJoYW5kbGluZyBncm91cCAkZ3JvdXBcbiIpOwotICAgIHB1c2ggKEB7JGdyb3Vwc3skZ3JvdXB9fSxbJ2ZpbGV0eXBlJywgJHR5cGVdKTsKLSAgICB3aGlsZSgkbGluZSA9IDwkZmg+KSB7Ci0JY2hvbXAoJGxpbmUpOwotCW5leHQgaWYgKCRsaW5lID1+IC9eXHMqJC8pOwotCW5leHQgaWYgKCRsaW5lID1+IC9eXCMvKTsKLQlyZXR1cm4gJGxpbmUgaWYgKCRsaW5lICF+IC9eKHNpbmdsZXxtdWx0aXBsZXxtZXNzYWdlfGZpbGV0eXBlfHN1Ymdyb3VwKS8pOwotCW15ICgkdHlwZSwgJHRva2VuLCAkcmVzdCkgPSAoJGxpbmUgPX4gL14oXHcrKVxzKyhbXlxzXSspXHMqKC4qKS8pOwotCWRlYnVnICgicmVhZGluZyBncm91cCAkZ3JvdXAgOiAkdHlwZSAtPiAkdG9rZW4gLT4gJHJlc3RcbiIpOwotCXB1c2ggKEB7JGdyb3Vwc3skZ3JvdXB9fSwgWyR0eXBlLCAkdG9rZW4sICRyZXN0XSk7Ci0gICAgfQotICAgIHJldHVybjsKLX0KLQkKLQotIwotIyBQYXJzZSBvbmUgZmlsZQotIwotc3ViIHJlYWRfY29uZmlnX2l0ZW0gewotICAgIG15ICRpdGVtZmlsZSA9IHNoaWZ0OwotICAgIG15ICRpdGVtY291bnQ7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkZmggPSBuZXcgSU86OkZpbGUoJGl0ZW1maWxlKTsKLSAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRmaCkpOwotICAgIG15ICglcmVzdWx0cywgJGN1cnRva2VuKTsKLSAgICBkZWJ1ZygidG9rZW5pdGVtczogICIsIG15X0R1bXBlcihcJXRva2VuaXRlbXMpKTsKLSAgdG9wd2hpbGU6Ci0gICAgd2hpbGUoJGxpbmUgPSA8JGZoPikgewotCW5leHQgaWYgKCRsaW5lID1+IC9eXHMqXCMvKTsKLQlteSAoJHRva2VuLCAkcmVzdCkgPSAoJGxpbmUgPX4gL14oXHcrKVxzKyguKikvKTsKLQluZXh0IGlmICghZGVmaW5lZCgkdG9rZW4pIHx8ICFkZWZpbmVkKCRyZXN0KSk7Ci0Jd2hpbGUgKCR0b2tlbiBlcSAnZ3JvdXAnKSB7Ci0JICAgICMgaGFuZGxlIHNwZWNpYWwgZ3JvdXAgbGlzdAotCSAgICBteSAkbmV4dCA9IHJlYWRfY29uZmlnX2dyb3VwKCRmaCwgJHJlc3QsJHR5cGUpOwotCSAgICBpZiAoJG5leHQpIHsKLQkJKCR0b2tlbiwgJHJlc3QpID0gKCRuZXh0ID1+IC9eKFx3KylccysoLiopLyk7Ci0JICAgIH0gZWxzZSB7Ci0JCW5leHQgdG9wd2hpbGU7Ci0JICAgIH0KLQl9Ci0JZGVidWcoInRva2VuOiAkdG9rZW4gPT4gJHJlc3RcbiIpOwotCWlmICgkdG9rZW4gZXEgJ3N0ZWFsJykgewotCSAgICBmb3JlYWNoIG15ICRzdGVhbGZyb20gKGtleXMoJXskcmVzdWx0c3skcmVzdH19KSkgewotCQlpZiAoIWRlZmluZWQoJHJlc3VsdHN7JGN1cnRva2VufXskc3RlYWxmcm9tfSkpIHsKLQkJICAgIEB7JHJlc3VsdHN7JGN1cnRva2VufXskc3RlYWxmcm9tfX0gPSAKLQkJCUB7JHJlc3VsdHN7JHJlc3R9eyRzdGVhbGZyb219fTsKLQkJfQotCSAgICB9Ci0JfSBlbHNpZiAoZGVmaW5lZCgkdG9rZW5pdGVtc3skdG9rZW59KSkgewotCSAgICBpZiAoIWRlZmluZWQoJGN1cnRva2VuKSkgewotCQlkaWUgImVycm9yIGluIGNvbmZpZ3VyYXRpb24gZmlsZSAkaXRlbWZpbGUsIG5vIHRva2VuIHNldFxuIjsKLQkgICAgfQotCSAgICAkcmVzdCA9fiBzL15cIy8vOwotCSAgICBwdXNoIEB7JHJlc3VsdHN7JGN1cnRva2VufXskdG9rZW59fSwkcmVzdDsKLQl9IGVsc2lmIChkZWZpbmVkKCRhcnJheWl0ZW1zeyR0b2tlbn0pKSB7Ci0JICAgIGlmICghZGVmaW5lZCgkY3VydG9rZW4pKSB7Ci0JCWRpZSAiZXJyb3IgaW4gY29uZmlndXJhdGlvbiBmaWxlICRpdGVtZmlsZSwgbm8gdG9rZW4gc2V0XG4iOwotCSAgICB9Ci0JICAgIG15ICgkbnVtLCAkbmV3cmVzdCkgPSAoJHJlc3QgPX4gL14oXGQrKVxzKyguKikvKTsKLQkgICAgaWYgKCFkZWZpbmVkKCRudW0pIHx8ICFkZWZpbmVkKCRuZXdyZXN0KSkgewotCQl3YXJuICJpbnZhbGlkIGNvbmZpZyBsaW5lOiAkbGluZVxuIjsKLQkgICAgfSBlbHNlIHsKLQkJJHJlc3VsdHN7JGN1cnRva2VufXskdG9rZW59WyRudW1dID0gJG5ld3Jlc3Q7Ci0JICAgIH0KLQl9IGVsc2lmICgkdG9rZW4gPX4gL150b2tlblxzKiQvKSB7Ci0JICAgICRyZXN0ID0gbGMoJHJlc3QpOwotCSAgICAkY3VydG9rZW4gPSAkcmVzdDsKLQkgICAgaWYgKCEgZXhpc3RzICRyZXN1bHRzeyRjdXJ0b2tlbn17J2RlZmluZWQnfSkgewotCQlwdXNoIEB7JHJlc3VsdHN7J3RoZXRva2Vucyd9fSwgJGN1cnRva2VuOwotCQkkcmVzdWx0c3skY3VydG9rZW59eydkZWZpbmVkJ30gPSAxOwotCSAgICB9Ci0JICAgICR0b2tlbm1hcHskY3VydG9rZW59ID0gJHJlc3VsdHN7JGN1cnRva2VufTsKLQkgICAgZGVidWcoImN1cnJlbnQgdG9rZW4gc2V0IHRvICR0b2tlblxuIik7Ci0JfSBlbHNlIHsKLQkgICAgcHVzaCBAeyRyZXN1bHRzeyR0b2tlbn19LCRyZXN0OwotCX0KLSAgICB9Ci0gICAgcmV0dXJuIFwlcmVzdWx0czsKLX0KLQotc3ViIGRlYnVnIHsKLSAgICBwcmludCBAXyBpZiAoJG9wdHN7J2QnfSk7Ci19Ci0KLXN1YiBvdXRwdXRfZmlsZXMgewotICAgIG15ICRmaWxldHlwZXMgPSBzaGlmdDsKLSAgICBteSAkdGVybSA9IHNoaWZ0OwotICAgIGZvcmVhY2ggbXkgJGZ0IChrZXlzKCUkZmlsZXR5cGVzKSkgewotCW5leHQgaWYgKCEkZGlkZmlsZXskZnR9KTsKLQlteSAkb3V0cHV0ZiA9ICRmdDsKLQlpZiAoLWYgJG91dHB1dGYgJiYgISRvcHRzeydmJ30pIHsKLQkgICAgcHJpbnQgIlxuRXJyb3I6IEFuICRvdXRwdXRmIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBkaXJlY3RvcnkuXG5cbiI7Ci0JICAgIG15ICRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCInb3ZlcndyaXRlJywgJ3NraXAnLCAncmVuYW1lJyBvciAnYXBwZW5kJz8gIix2YWxpZF9hbnN3ZXJzKHF3KG8gb3ZlcndyaXRlIHIgcmVuYW1lIHMgc2tpcCBhIGFwcGVuZCkpKTsKLQkgICAgbmV4dCBpZiAoJGFucyA9fiAvXihzfHNraXApJC9pKTsKLQkgICAgaWYgKCRhbnMgPX4gL14oYXxhcHBlbmQpLykgewotCQkkb3V0cHV0ZiA9ICI+JG91dHB1dGYiOwotCSAgICB9IGVsc2lmICgkYW5zID1+IC9eKHJ8cmVuYW1lKSQvaSkgewotCQkjIGRlZmF1bHQgdG8gcmVuYW1lIGZvciBlcnJvciBjb25kaXRpb25zCi0JCSRvdXRwdXRmID0gJHRlcm0tPnJlYWRsaW5lKCJTYXZlIHRvIHdoYXQgbmV3IGZpbGUgbmFtZSBpbnN0ZWFkIChvciAnc2tpcCcpPyAiKTsKLQkgICAgfQotCX0KLQkkZGlkZmlsZXskZnR9ID0gJG91dHB1dGY7Ci0Jb3BlbihPLCI+JG91dHB1dGYiKSB8fCB3YXJuICJjb3VsZG4ndCB3cml0ZSB0byAkb3V0cHV0ZlxuIjsKLQlwcmludCBPICIjIiB4IDc1LCJcbiI7Ci0JcHJpbnQgTyAiI1xuIyAkZnRcbiI7Ci0JcHJpbnQgTyAiI1xuIyAgIC0gY3JlYXRlZCBieSB0aGUgc25tcGNvbmYgY29uZmlndXJhdGlvbiBwcm9ncmFtXG4jXG4iOwotCWZvcmVhY2ggbXkgJHNlY3QgKEB7JGZpbGV0eXBlcy0+eyRmdH19KSB7Ci0JICAgIG15ICRzZWN0aGVscCA9IDA7Ci0JICAgIGZvcmVhY2ggbXkgJHRva2VuIChAeyRzZWN0LT57J3RoZXRva2Vucyd9fSkgewotCQlpZiAoJCN7JHNlY3QtPnskdG9rZW59eydyZXN1bHRzJ319ID49IDApIHsKLQkJICAgIGlmICgkc2VjdGhlbHArKyA9PSAwKSB7Ci0JCQlwcmludCBPICIjIiB4IDc1LCJcbiMgU0VDVElPTjogIiwKLQkJCWpvaW4oIlxuIyAgICAgICAgICAiLCBAeyRzZWN0LT57dGl0bGV9fSksICJcbiNcbiI7Ci0JCQlwcmludCBPICIjICAgIiwgam9pbigiXG4jICAgIixAeyRzZWN0LT57ZGVzY3JpcHRpb259fSksCi0JCQkiXG4iOwotCQkgICAgfQotCQkgICAgcHJpbnQgTyAiXG4jICR0b2tlbjogIiwKLQkJICAgIGpvaW4oIlxuIyAgICIsQHskc2VjdC0+eyR0b2tlbn17aW5mb319KSwgIlxuXG4iOwotCQkgICAgZm9yZWFjaCBteSAkcmVzdWx0IChAeyRzZWN0LT57JHRva2VufXsncmVzdWx0cyd9fSkgewotCQkJcHJpbnQgTyAiJHJlc3VsdFxuIjsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIHByaW50IE8gIlxuXG5cbiI7Ci0JfQotCWlmICgkI3skdW5rbm93bnskZnR9fSA+IC0xKSB7Ci0JICAgIHByaW50IE8gIiNcbiMgVW5rbm93biBkaXJlY3RpdmVzIHJlYWQgaW4gZnJvbSBvdGhlciBmaWxlcyBieSBzbm1wY29uZlxuI1xuIjsKLQkgICAgZm9yZWFjaCBteSAkdW5rbm93biAoQHskdW5rbm93bnskZnR9fSkgewotCQlwcmludCBPICR1bmtub3duLCJcbiI7Ci0JICAgIH0KLQl9Ci0JY2xvc2UoTyk7Ci0gICAgfQotfQotCi1zdWIgZ2V0X2Fuc3dlciB7Ci0gICAgbXkgKCR0ZXJtLCAkcXVlc3Rpb24sICRyZWdleHAsICRkZWZhdWx0dmFsKSA9IEBfOwotICAgICRxdWVzdGlvbiAuPSAiIChkZWZhdWx0ID0gJGRlZmF1bHR2YWwpIiBpZiAoZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgJGRlZmF1bHR2YWwgbmUgIiIpOwotICAgICRxdWVzdGlvbiAuPSAiOiAiOwotICAgIG15ICRhbnMgPSAkdGVybS0+cmVhZGxpbmUoJHF1ZXN0aW9uKTsKLSAgICByZXR1cm4gJGRlZmF1bHR2YWwgaWYgKCRhbnMgZXEgIiIgJiYgZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgCi0JCQkgICAkZGVmYXVsdHZhbCBuZSAiIik7Ci0gICAgd2hpbGUgKCEoIWRlZmluZWQoJHJlZ2V4cCkgfHwKLQkgICAgICRyZWdleHAgZXEgIiIgfHwKLQkgICAgICRhbnMgPX4gLyRyZWdleHAvKSkgewotCXByaW50ICJpbnZhbGlkIGFuc3dlciEgIEl0IG11c3QgbWF0Y2ggdGhpcyByZWd1bGFyIGV4cHJlc3Npb246ICRyZWdleHBcbiI7Ci0JJGFucyA9ICR0ZXJtLT5yZWFkbGluZSgkcXVlc3Rpb24pOwotICAgIH0KLSAgICByZXR1cm4gJGRlZmF1bHR2YWwgaWYgKCRhbnMgZXEgIiIgJiYgZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgCi0JCQkgICAkZGVmYXVsdHZhbCBuZSAiIik7Ci0gICAgcmV0dXJuICRhbnM7Ci19Ci0gICAgCi1zdWIgdmFsaWRfYW5zd2VycyB7Ci0gICAgbXkgQGxpc3Q7Ci0gICAgZm9yZWFjaCAkaSAoQF8pIHsKLQlwdXNoIEBsaXN0LCAkaSBpZiAoJGkpOwotICAgIH0KLSAgICByZXR1cm4gIl4oIiAuIGpvaW4oInwiLEBsaXN0KSAuICIpXCQiOwotfQotCi1zdWIgcmVhZF9jb25maWcgewotICAgIG15ICRmaWxlID0gc2hpZnQ7Ci0gICAgbXkgJGZpbGV0eXBlID0gc2hpZnQ7Ci0gICAgcmV0dXJuIGlmICghZGVmaW5lZCgkZmlsZXR5cGVzeyRmaWxldHlwZX0pKTsKLSAgICBpZiAoISAtZiAkZmlsZSkgewotCXdhcm4gIiRmaWxlIGRvZXMgbm90IGV4aXN0XG4iOwotCXJldHVybjsKLSAgICB9Ci0gICAgb3BlbihJLCRmaWxlKTsKLSAgICB3aGlsZSg8ST4pIHsKLQluZXh0IGlmICgvXlxzKlwjLyk7Ci0JbmV4dCBpZiAoL15ccyokLyk7Ci0JY2hvbXA7Ci0JbXkgKCR0b2tlbiwgJHJlc3QpID0gL15ccyooXHcrKVxzKyguKikvOwotCSR0b2tlbiA9IGxjKCR0b2tlbik7Ci0JbmV4dCBpZiAoZGVmaW5lZCgkYWxsbGluZXN7JF99KSk7ICMgZHJvcCBkdXBsaWNhdGUgbGluZXMKLQlpZiAoZGVmaW5lZCgkdG9rZW5tYXB7JHRva2VufSkpIHsKLQkgICAgcHVzaCBAeyR0b2tlbm1hcHskdG9rZW59eydyZXN1bHRzJ319LCRfOwotCX0gZWxzZSB7Ci0JICAgIHB1c2ggQHskdW5rbm93bnskZmlsZXR5cGV9fSwkXzsKLQl9Ci0JJGFsbGxpbmVzeyRffSsrOwotICAgIH0KLSAgICBjbG9zZShJKTsKLX0KLQotc3ViIGRpc3BsYXlfbWVudSB7Ci0gICAgbXkgJWNvbmZpZzsKLQotICAgIHdoaWxlICgkI18gPiAtMSAmJiAkX1swXSA9fiAvXi0vKSB7Ci0JbXkgJGtleSA9IHNoaWZ0OwotCSRjb25maWd7JGtleX0gPSBzaGlmdDsKLSAgICB9Ci0KLSAgICBteSAkY291bnQ9MTsKLSAgICBwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOwotICAgIGlmICgkY29uZmlneyctaGVhZCd9KSB7Ci0JcHJpbnQgJGNvbmZpZ3snLWhlYWQnfTsKLQlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOwotICAgIH0KLSAgICBteSBAYW5zd2VycyA9IEBfOwotICAgIG15IEBsaXN0OwotICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfSkgJiYgCi0JcmVmKCRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfSkgZXEgIkFSUkFZIikgewotCUBsaXN0ID0gQHskY29uZmlneyctZGVzY3JpcHRpb25zJ319Ci0gICAgfSBlbHNlIHsKLQlAbGlzdCA9IEBfOwotICAgIH0KLSAgICBmb3JlYWNoIG15ICRpIChAbGlzdCkgewotCXByaW50ZiAiICAlMmQ6ICAkaVxuIiwgJGNvdW50KysgaWYgKCRpKTsKLSAgICB9Ci0gICAgcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKLSAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctb3RoZXJhbnN3ZXJzJ30pKSB7Ci0JaWYgKHJlZigkY29uZmlneyctb3RoZXJhbnN3ZXJzJ30pIGVxICdBUlJBWScpIHsKLQkgICAgcHJpbnQgIk90aGVyIG9wdGlvbnM6ICIsIGpvaW4oIiwgIiwKLQkJCQkJICBAeyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pLCAiXG4iOwotCSAgICBwdXNoIEBhbnN3ZXJzLCBAeyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX07Ci0JICAgIHB1c2ggQGFuc3dlcnMsIGtleXMoJXskY29uZmlneyctbWFwYW5zd2Vycyd9fSk7Ci0JfSBlbHNlIHsKLQkgICAgbXkgJG1heGxlbiA9IDA7Ci0JICAgIHB1c2ggQGFuc3dlcnMsa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pOwotCSAgICBmb3JlYWNoIG15ICRpIChrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSkpIHsKLQkJJG1heGxlbiA9IGxlbmd0aCgkaSkgaWYgKGxlbmd0aCgkaSkgPiAkbWF4bGVuKTsKLQkgICAgfQotCSAgICBmb3JlYWNoIG15ICRpIChrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSkpIHsKLQkJcHJpbnRmKCIgICUtIiAuICRtYXhsZW4gLiAiczogJXNcbiIsICRpLCAKLQkJICAgICAgICRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfXskaX0pOwotCSAgICB9Ci0JfQotCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7Ci0gICAgfQotICAgIGlmICgkY29uZmlneyctdGFpbCd9KSB7Ci0JcHJpbnQgJGNvbmZpZ3snLXRhaWwnfTsKLQlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOwotICAgIH0KLQotICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1xdWVzdGlvbid9KSkgewotCXdoaWxlKDEpIHsKLQkgICAgbXkgJG51bWV4cHI7Ci0JICAgIGlmICgkY29uZmlneyctbXVsdGlwbGUnfSkgewotCQkkbnVtZXhwciA9ICdbXGRccyxdK3xhbGx8YXxub25lfG4nOwotCSAgICB9IGVsc2UgewotCQkkbnVtZXhwciA9ICdcZCsnOwotCSAgICB9Ci0JICAgIHB1c2ggQGFuc3dlcnMsIiIgaWYgKCRjb25maWd7Jy1kZWZhdWx0dmFsdWUnfSk7Ci0JICAgICRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCAkY29uZmlneyctcXVlc3Rpb24nfSwKLQkJCSAgICAgIHZhbGlkX2Fuc3dlcnMoJG51bWV4cHIsQGFuc3dlcnMpLAotCQkJICAgICAgJGNvbmZpZ3snLWRlZmF1bHR2YWx1ZSd9KTsKLQkgICAgaWYgKCRjb25maWd7Jy1tYXBhbnN3ZXJzJ317JGFuc30pIHsKLQkJJGFucyA9ICRjb25maWd7Jy1tYXBhbnN3ZXJzJ317JGFuc307Ci0JICAgIH0KLQotCSAgICBpZiAoJGFucyA9fiAvXiRudW1leHByJC8pIHsKLQkJaWYgKCRjb25maWd7Jy1tdWx0aXBsZSd9KSB7Ci0JCSAgICBteSBAbGlzdCA9IHNwbGl0KC9ccyosXHMqLywkYW5zKTsKLQkJICAgIG15IEByZXQ7Ci0JCSAgICAkY291bnQgPSAwOwotCQkgICAgZm9yZWFjaCBteSAkaSAoQF8pIHsKLQkJCSRjb3VudCsrOwotCQkJaWYgKCRhbnMgZXEgImFsbCIgfHwgJGFucyBlcSAiYSIgCi0JCQkgICAgfHwgZ3JlcCgvXiRjb3VudCQvLEBsaXN0KSkgewotCQkJICAgIHB1c2ggQHJldCwgJGk7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgICByZXR1cm4gQHJldDsKLQkJfSBlbHNlIHsKLQkJICAgIGlmICgkYW5zIDw9IDAgfHwgJGFucyA+ICQjXysxKSB7Ci0JCQl3YXJuICJpbnZhbGlkIHNlbGVjdGlvbjogJGFucyBbbXVzdCBiZSAxLSIgLgotCQkJICAgICgkI18rMSkgLiAiXVxuIjsKLQkJICAgIH0gZWxzZSB7Ci0JCQlyZXR1cm4gJGFucyBpZiAoJGNvbmZpZ3snLW51bWVyaWMnfSk7Ci0JCQkkY291bnQgPSAwOwotCQkJZm9yZWFjaCBteSAkaSAoQF8pIHsKLQkJCSAgICAkY291bnQrKzsKLQkJCSAgICBpZiAoJGFucyBlcSAkY291bnQpIHsKLQkJCQlyZXR1cm4gJGk7Ci0JCQkgICAgfQotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCXJldHVybiAkYW5zOwotCSAgICB9Ci0JfQotICAgIH0KLX0KLQotc3ViIG15X0R1bXBlciB7Ci0gICAgaWYgKCRvcHRzeydEJ30pIHsKLQlyZXR1cm4gRHVtcGVyKEBfKTsKLSAgICB9IGVsc2UgewotCXJldHVybiAiXG4iOwotICAgIH0KLX0KLQotc3ViIGdldF9wZXJzaXN0ZW50RGlyIHsKLSAgICBteSAkZmlsZSA9IHNoaWZ0OwotICAgIG15ICRyZXN1bHQgPSAwOwotICAgIGlmICghIC1mICRmaWxlKSB7Ci0JcmV0dXJuIDA7Ci0gICAgfQotICAgIG9wZW4oSSwkZmlsZSk7Ci0gICAgd2hpbGUoPEk+KSB7Ci0JbmV4dCBpZiAoL15ccypcIy8pOwotCW5leHQgaWYgKC9eXHMqJC8pOwotCWNob21wOwotCW15ICgkdG9rZW4sICRyZXN0KSA9IC9eXHMqKFx3KylccysoLiopLzsKLSAgICAgICAgaWYgKGxjKCR0b2tlbikgZXEgInBlcnNpc3RlbnRkaXIiKSB7Ci0gICAgICAgICAgJHJlc3VsdCA9ICRyZXN0OwotICAgICAgICB9Ci0gICAgICAgIG5leHQ7Ci0gICAgfQotICAgIGNsb3NlKEkpOwotICAgIHJldHVybiAkcmVzdWx0OwotfQotCi0jIFVzYWdlOiAgICZ3aW4zMl9yZWdfcmVhZCgia2V5IiwgInZhbHVlIikKLSMgRXhhbXBsZTogJndpbjMyX3JlZ19yZWFkKCJTT0ZUV0FSRVxcTmV0LVNOTVAiLCJTTk1QU0hBUkVQQVRIIik7Ci0jIFJldHVybnM6IFZhbHVlIGlmIGZvdW5kIGluIEhLQ1Ugb3IgSENMTS4gIE90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcuCi1zdWIgd2luMzJfcmVnX3JlYWQgewotICBteSAkc3ViX2tleSA9IHNoaWZ0OwotICBteSAkdmFsdWUgPSBzaGlmdDsKLQotICByZXF1aXJlIFdpbjMyOjpSZWdpc3RyeTsKLSAgIAotICBteSAoJGhrZXksICVrZXlfdmFsdWVzLCAkdGVtcCwgJG5vX3dhcm4pOwotIAotICAjIFRyeSBIS0NVIGZpcnN0Ci0gICRub193YXJuID0gJEhLRVlfQ1VSUkVOVF9VU0VSOwotICBpZiAoJEhLRVlfQ1VSUkVOVF9VU0VSLT5PcGVuKCRzdWJfa2V5LCAkaGtleSkpCi0gIHsKLSAgICAkaGtleS0+R2V0VmFsdWVzKFwla2V5X3ZhbHVlcyk7ICAgCi0gICAgZm9yZWFjaCAkdGVtcCAoc29ydCBrZXlzICVrZXlfdmFsdWVzKSB7Ci0gICAgICBpZiAoJHRlbXAgZXEgJHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAka2V5X3ZhbHVlc3skdGVtcH1bMl07Ci0gICAgICB9Ci0gICAgfQotICAgICRoa2V5LT5DbG9zZSgpOyAKLSAgfQotCi0gICMgVHJ5IEhLTE0gc2Vjb25kCi0gICRub193YXJuID0gJEhLRVlfTE9DQUxfTUFDSElORTsKLSAgaWYgKCRIS0VZX0xPQ0FMX01BQ0hJTkUtPk9wZW4oJHN1Yl9rZXksICRoa2V5KSkKLSAgewotICAgICRoa2V5LT5HZXRWYWx1ZXMoXCVrZXlfdmFsdWVzKTsKLSAgICBmb3JlYWNoICR0ZW1wIChzb3J0IGtleXMgJWtleV92YWx1ZXMpIHsKLSAgICAgIGlmICgkdGVtcCBlcSAkdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICRrZXlfdmFsdWVzeyR0ZW1wfVsyXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJGhrZXktPkNsb3NlKCk7IAotICB9Ci0gIHJldHVybiAiIjsKLX0KLQotIyBVc2FnZTogICAmbXlfZ2V0ZW52KCJrZXkiKQotIyBFeGFtcGxlOiAmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIik7Ci0jIFJldHVybnM6IFVuaXg6ICBFbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSAodW5kZWYgaWYgbm90IGRlZmluZWQpCi0jICAgICAgICAgIFdpbjMyOiBIS0NVXFNvZnR3YXJlXE5ldC1TTk1QXChrZXkpIG9yCi0jICAgICAgICAgIFdpbjMyOiBIS0xNXFNvZnR3YXJlXE5ldC1TTk1QXChrZXkpIG9yCi0jICAgICAgICAgIFdpbjMyOiBFbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSAodW5kZWYgaWYgbm90IGRlZmluZWQpCi1zdWIgbXlfZ2V0ZW52IHsKLSAgbXkgJGtleSA9IHNoaWZ0OwotICAKLSAgIyBVbml4Ci0gIGlmICgkXk8gbmUgJ01TV2luMzInKSB7Ci0gICAgcmV0dXJuICRFTlZ7JGtleX07Ci0gIH0KLSAgIyBXaW5kb3dzCi0gIGVsc2UgewotICAgIG15ICR0ZW1wID0gJndpbjMyX3JlZ19yZWFkKCJTT0ZUV0FSRVxcTmV0LVNOTVAiLCIka2V5Iik7Ci0gICAgaWYgKCR0ZW1wIG5lICIiKSB7Ci0gICAgICByZXR1cm4gJHRlbXA7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcmV0dXJuICRFTlZ7JGtleX07Ci0gICAgfQotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2xvY2FsL3NubXBjb25mLmluIGIvbG9jYWwvc25tcGNvbmYuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmZmODAyNQotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL3NubXBjb25mLmluCkBAIC0wLDAgKzEsOTI5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKworIworIyBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgYnVpbGRlciBiYXNlZCBvbiBxdWVzdGlvbnMgbGlzdGVkIGluCisjIGl0cyBvd24gY29uZmlndXJhdGlvbiBmaWxlLiAgSXQgd291bGQgY2VydGFpbmx5IGJlIGVhc3kgdG8gdXNlIHRoaXMKKyMgZm9yIG90aGVyIChub24tc25tcCkgcHJvZ3JhbXMgYXMgd2VsbC4KKyMKKwordXNlIEdldG9wdDo6U3RkOwordXNlIFRlcm06OlJlYWRMaW5lOwordXNlIElPOjpGaWxlOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBGaWxlOjpDb3B5OworaWYgKCReTyBlcSAnTVNXaW4zMicpIHsKKyAgZXZhbCAncmVxdWlyZSBXaW4zMjo6UmVnaXN0cnk7JzsKKyAgaWYgKCRAKSB7CisgICAgcHJpbnQgIlxuV2FybmluZzogUGVybCBtb2R1bGUgV2luMzI6OlJlZ2lzdHJ5IGlzIG5vdCBpbnN0YWxsZWQuICBUaGlzIG1vZHVsZSBpc1xuIjsKKyAgICBwcmludCAiICAgICAgICAgcmVxdWlyZWQgdG8gcmVhZCB0aGUgU05NUFNIQVJFUEFUSCBhbmQgU05NUENPTkZQQVRIIHZhbHVlcyBmcm9tIFxuIjsKKyAgICBwcmludCAiICAgICAgICAgdGhlIHJlZ2lzdHJ5LiAgVG8gdXNlIHNubXBjb25mIHdpdGhvdXQgdGhlIG1vZHVsZSB5b3UgbmVlZCB0b1xuIjsKKyAgICBwcmludCAiICAgICAgICAgZGVmaW5lIFNOTVBTSEFSRVBBVEggYW5kIFNOTVBDT05GUEFUSCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiI7CisgICAgcHJpbnQgIiAgICAgICAgIG9yIHVzZSB0aGUgLWMgYW5kIC1JIGNvbW1hbmQgbGluZSBvcHRpb25zLlxuIjsKKyAgfQorfQorCisjIGdsb2JhbHMKKyV0b2tlbml0ZW1zPXF3KGxpbmUgMSBpbmZvIDEgY29tbWVudCAxKTsKKyVhcnJheWl0ZW1zPXF3KHF1ZXN0aW9uIDEgdmFsaWRhbnN3ZXIgMSk7CisKKyMgZGVmYXVsdCBmb2xkZXIgZm9yIHNubXBjb25mLWRhdGEKK2lmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKSkpIHsKKyAgJG9wdHN7J2MnfSA9ICZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKSAuICIvc25tcGNvbmYtZGF0YSI7Cit9CitlbHNlIHsKKyAgJG9wdHN7J2MnfSA9ICIvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcGNvbmYtZGF0YSI7Cit9CisgCisjIGRlZmF1bHQgY29uZmlnIGZpbGUgcGF0aAoraWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUENPTkZQQVRIIikpKSB7CisgICRjb25mcGF0aCA9ICZteV9nZXRlbnYoIlNOTVBDT05GUEFUSCIpOworfQorZWxzZSB7CisgICRjb25mcGF0aCA9ICIvdXNyL2xvY2FsL3NoYXJlL3NubXAiOworfQorCisjIGhvbWUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2lmIChkZWZpbmVkKCZteV9nZXRlbnYoIkhPTUUiKSkpIHsKKyAgJGhvbWUgPSAmbXlfZ2V0ZW52KCJIT01FIikgLiAiLy5zbm1wIjsKK30KK2Vsc2UgeworICAkaG9tZSA9ICIoSE9NRSBkaXIgLSBuL2EpIjsKK30KKworIyByZWFkIHRoZSBhcmd1bWVudCBzdHJpbmcKK2dldG9wdHMoInFhZGhmYzpwaUk6cjpSOmc6RyIsIFwlb3B0cyk7CisKKyMgZGlzcGxheSBoZWxwCitpZiAoJG9wdHN7J2gnfSkgeworICAgIHByaW50ICIkMCBbb3B0aW9uc10gW0ZJTEVUT0NSRUFURS4uLl1cbiI7CisgICAgcHJpbnQgIm9wdGlvbnM6XG4iOworICAgIHByaW50ICIgIC1mICAgICAgICAgICBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgd2l0aG91dCBwcm9tcHRpbmdcbiI7CisgICAgcHJpbnQgIiAgLWkgICAgICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvICRjb25mcGF0aC5cbiI7CisgICAgcHJpbnQgIiAgLXAgICAgICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvICRob21lLlxuIjsKKyAgICBwcmludCAiICAtSSBESVIgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gRElSLlxuIjsKKyAgICBwcmludCAiICAtYSAgICAgICAgICAgRG9uJ3QgYXNrIGFueSBxdWVzdGlvbnMsIGp1c3QgcmVhZCBpbiBjdXJyZW50XG4iOworICAgIHByaW50ICIgICAgICAgICAgICAgICAgICAgY3VycmVudCAuY29uZiBmaWxlcyBhbmQgY29tbWVudCB0aGVtXG4iOworICAgIHByaW50ICIgIC1yIGFsbHxub25lICBSZWFkIGluIGFsbCBvciBub25lIG9mIHRoZSAuY29uZiBmaWxlcyBmb3VuZC5cbiI7CisgICAgcHJpbnQgIiAgLVIgZmlsZSwuLi4gIFJlYWQgaW4gYSBwYXJ0aWN1bGFyIGxpc3Qgb2YgLmNvbmYgZmlsZXMuXG4iOworICAgIHByaW50ICIgIC1nIEdST1VQICAgICBBc2sgYSBzZXJpZXMgb2YgR1JPVVBlZCBxdWVzdGlvbnMuXG4iOworICAgIHByaW50ICIgIC1HICAgICAgICAgICBMaXN0IGtub3duIEdST1VQcy5cbiI7CisgICAgcHJpbnQgIiAgLWMgY29uZl9kaXIgIHVzZSBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuXG4iOworICAgIHByaW50ICIgIC1xICAgICAgICAgICBydW4gbW9yZSBxdWlldGx5IHdpdGggbGVzcyBhZHZpY2UuXG4iOworICAgIHByaW50ICIgIC1kICAgICAgICAgICB0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQuXG4iOworICAgIHByaW50ICIgIC1EICAgICAgICAgICB0dXJuIG9uIGRlYnVnZ2luZyBkdW1wZXIgb3V0cHV0LlxuIjsKKyAgICBleGl0OworfQorCisjIHNldHVwIHRlcm1pbmFsIGludGVyZmFjZS4KKyRFTlZ7J1BFUkxfUkwnfT0nbz0wJyBpZiAoIWV4aXN0cygkRU5WeydQRVJMX1JMJ30pKTsKKyR0ZXJtID0gbmV3IFRlcm06OlJlYWRMaW5lICdzbm1wY29uZic7CisKKyMgcmVhZCBpbiBjb25maWd1cmF0aW9uIGZpbGUgc2V0CityZWFkX2NvbmZpZ19maWxlcygkb3B0c3snYyd9LCBcJWZpbGV0eXBlcyk7CitkZWJ1ZyhteV9EdW1wZXIoXCVmaWxldHlwZXMpKTsKKworaWYgKCRvcHRzeydHJ30pIHsKKyAgICBQcmludCgiXG5Lbm93biBHUk9VUHMgb2YgdG9rZW5zOlxuXG4iKTsKKyAgICBmb3JlYWNoIG15ICRncm91cCAoa2V5cyglZ3JvdXBzKSkgeworCXByaW50ICIgICRncm91cFxuIjsKKyAgICB9CisgICAgUHJpbnQoIlxuIik7CisgICAgZXhpdDsKK30KKworIworIyBFeHBhbmQgdGhlIHNlYXJjaCBwYXRoIGluIGNhc2UgaXQgY29udGFpbnMgbXVsdGlwbGUgZGlyZWN0b3JpZXMuCisjCitteSAkRU5WX1NFUEFSQVRPUiA9ICdARU5WX1NFUEFSQVRPUkAnOworbXkgQHNlYXJjaHBhdGggPSBzcGxpdCgvJEVOVl9TRVBBUkFUT1IvLCAkY29uZnBhdGgpOworcHVzaCBAc2VhcmNocGF0aCwgIi91c3IvbG9jYWwvZXRjL3NubXAiOworcHVzaCBAc2VhcmNocGF0aCwgIi4iOworcHVzaCBAc2VhcmNocGF0aCwgIiRob21lIjsKKworIyBSZW1vdmUgdHJhaWxpbmcgLydzIG9yIFwncworZm9yIChteSAkaT0wOyAkaSA8PSAkI3NlYXJjaHBhdGg7ICRpKyspIHsKKyAgJHNlYXJjaHBhdGhbJGldID1+IC8oLio/KShbXC9cXF0pKiQvOworICAkc2VhcmNocGF0aFskaV0gPSAkMTsKK30KKworIyBEZXRlcm1pbmUgcGVyc2lzdGVudCBkaXJlY3RvcnkuICBPcmRlciBvZiBwcmVmZXJlbmNlOgorIyAKKyMgZmlsZSBpbiBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBkaXJlY3RvcnkgZGVmaW5lZCBieSBwZXJzaXN0ZW50RGlyIHNubXAuY29uZiB2YXJpYWJsZQorIyBkaXJlY3RvcnkgaW4gU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBkZWZhdWx0IFBFUlNJU1RFTlRfRElSRUNUT1JZIGRpcmVjdG9yeQorbXkgJHBlcnNpc3RlbnREaXIgPSAiIjsKK215ICRwZXJzaXN0ZW50RmlsZSA9ICIiOworCisjIFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlCitpZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIpKSkgeworICAkcGVyc2lzdGVudEZpbGUgPSAmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIpOworICBkZWJ1ZyAoInBlcnNpc3RlbnQgZmlsZTogU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0XG4iKTsKK30KKworIyBzbm1wLmNvbmYgcGVyc2lzdGVudERpcgoraWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgeworICBmb3JlYWNoIG15ICRpIChAc2VhcmNocGF0aCkgeworICAgIGRlYnVnICgiU2VhcmNoaW5nIGZpbGUgJGkvc25tcC5jb25mIGZvciBwZXJzaXN0ZW50RGlyXG4iKTsKKyAgICBteSAkdGVtcCA9IGdldF9wZXJzaXN0ZW50RGlyKCIkaS9zbm1wLmNvbmYiKTsKKyAgICBpZiAoJHRlbXApIHsKKyAgICAgIGRlYnVnKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogc2V0IHRvICR0ZW1wIGluICRpL3NubXAuY29uZlxuIik7CisgICAgICAkcGVyc2lzdGVudERpciA9ICR0ZW1wOworICAgICAgbGFzdDsKKyAgICB9CisgIH0KK30KKworIyBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlCitpZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7CisgIGlmICgmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRElSIikpIHsKKyAgICAkcGVyc2lzdGVudERpciA9ICZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9ESVIiKTsKKyAgICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIHNldFxuIik7CisgIH0KK30KKworIyBQRVJTSVNURU5UX0RJUkVDVE9SWSBkZWZhdWx0IHZhcmlhYmxlCitpZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7CisgICRwZXJzaXN0ZW50RGlyID0gIi92YXIvbmV0LXNubXAiOworICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBVc2luZyBkZWZhdWx0IHZhbHVlXG4iKTsKK30KKworIyBSZWJ1aWxkIHNlYXJjaCBwYXRoIHdpdGhvdXQgcGVyc2lzdGVudCBmb2xkZXIKKyMgTm90ZTogIHBlcnNpc3RlbnQgZmlsZSBoYW5kbGVkIGluIEZpbmQgZXhpc3RpbmcgCisjIGZpbGVzIHRvIHBvc3NpYmx5IHJlYWQgaW4gc2VjdGlvbgoraWYgKCRwZXJzaXN0ZW50RGlyKSB7CisgICMgUmVtb3ZlIHRyYWlsaW5nIC8ncyBvciBcJ3MKKyAgJHBlcnNpc3RlbnREaXIgPX4gLyguKj8pKFtcL1xcXSkqJC87CisgICRwZXJzaXN0ZW50RGlyID0gJDE7CisgIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6ICRwZXJzaXN0ZW50RGlyXG4iKTsKKworICBteSBAc2VhcmNocGF0aF9vbGQgPSBAc2VhcmNocGF0aDsKKyAgQHNlYXJjaHBhdGggPSAoKTsKKyAgZm9yZWFjaCBteSAkcGF0aF90ZW1wIChAc2VhcmNocGF0aF9vbGQpIHsKKyAgICBpZiAoJHBhdGhfdGVtcCBlcSAkcGVyc2lzdGVudERpcikgeworICAgICAgZGVidWcoInNraXBwaW5nIHBlcnNpc3RlbnQgZGlyZWN0b3J5ICRwYXRoX3RlbXBcbiIpOworICAgICAgbmV4dDsKKyAgICB9CisgICAgcHVzaCBAc2VhcmNocGF0aCwgJHBhdGhfdGVtcDsKKyAgfQorfQorCisjIFJlc2V0ICRjb25mcGF0aCB0byB0aGUgZmlyc3QgcGF0aAorJGNvbmZwYXRoID0gJHNlYXJjaHBhdGhbMF07CisKKyMKKyMgRmluZCBleGlzdGluZyBmaWxlcyB0byBwb3NzaWJseSByZWFkIGluLgorIworcHVzaCBAc2VhcmNocGF0aCwgJG9wdHN7SX0gaWYgKCRvcHRze0l9KTsKK2ZvcmVhY2ggbXkgJGkgKEBzZWFyY2hwYXRoKSB7CisgICAgZGVidWcoInNlYXJjaGluZyAkaVxuIik7CisgICAgZm9yZWFjaCBteSAkZnQgKGtleXMoJWZpbGV0eXBlcykpIHsKKyAgICAgICAgaWYgKCIkaS8kZnQiIGVxICRwZXJzaXN0ZW50RmlsZSkgeworICAgICAgICAgIGRlYnVnKCJza2lwcGluZyBwZXJzaXN0ZW50IGZpbGUgJGkvJGZ0XG4iKTsKKyAgICAgICAgICBuZXh0OworICAgICAgICB9CisJZGVidWcoInNlYXJjaGluZyBmb3IgJGkvJGZ0XG4iKTsKKwkka25vd25maWxlc3siJGkvJGZ0In0gPSAkZnQgaWYgKC1mICIkaS8kZnQiKTsKKwlteSAkbG9jYWxmdCA9ICRmdDsKKwkkbG9jYWxmdCA9fiBzLy5jb25mLy5sb2NhbC5jb25mLzsKKwkka25vd25maWxlc3siJGkvJGxvY2FsZnQifSA9ICRmdCBpZiAoLWYgIiRpLyRsb2NhbGZ0Iik7CisgICAgfQorfQorCisjCisjIEFzayB0aGUgdXNlciBpZiB0aGV5IHdhbnQgdGhlbSB0byBiZSByZWFkIGluIGFuZCByZWFkIHRoZW0KKyMKK2lmIChrZXlzKCVrbm93bmZpbGVzKSkgeworICAgIG15IEBmaWxlczsKKyAgICBpZiAoZGVmaW5lZCgkb3B0c3sncid9KSkgeworCWlmICgkb3B0c3sncid9IGVxICJhbGwiIHx8ICRvcHRzeydyJ30gZXEgImEiKSB7CisJICAgIEBmaWxlcyA9IGtleXMoJWtub3duZmlsZXMpOworCX0gZWxzaWYgKCRvcHRzeydyJ30gbmUgIm5vbmUiICYmICRvcHRzeydyJ30gbmUgIm4iKSB7CisJICAgIHByaW50ICJ1bmtub3duIGFyZ3VtZW50IHRvIC1yOiAkb3B0c3sncid9XG4iOworCSAgICBleGl0KDEpOworCX0KKyAgICB9IGVsc2lmKGRlZmluZWQoJG9wdHN7J1InfSkpIHsKKwlAZmlsZXMgPSBzcGxpdCgvXHMqLFxzKi8sJG9wdHN7J1InfSk7CisJZm9yZWFjaCBteSAkaSAoQGZpbGVzKSB7CisJICAgIG15ICR4ID0gJGk7CisJICAgICR4ID1+IHMvLipcLyhbXlwvXSspJC8kMS87CisJICAgICRrbm93bmZpbGVzeyRpfSA9ICR4OworCX0KKwlQcmludCgicmVhZGluZzogIiwgam9pbigiLCIsQGZpbGVzKSwiXG4iKTsKKyAgICB9IGVsc2UgeworCUBmaWxlcyA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiVGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgY29uZmlndXJhdGlvbiBmaWxlcyB3ZXJlIGZvdW5kOlxuIiwKKwkJCSAgICAgIC10YWlsID0+ICJXb3VsZCB5b3UgbGlrZSBtZSB0byByZWFkIHRoZW0gaW4/ICBUaGVpciBjb250ZW50IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlXG5vdXRwdXQgZmlsZXMgY3JlYXRlZCBieSB0aGlzIHNlc3Npb24uXG5cblZhbGlkIGFuc3dlciBleGFtcGxlczogXCJhbGxcIiwgXCJub25lXCIsXCIzXCIsXCIxLDIsNVwiXG4iLAorCQkJICAgICAgLW11bHRpcGxlID0+IDEsCisJCQkgICAgICAtcXVlc3Rpb24gPT4gJ1JlYWQgaW4gd2hpY2gnLAorCQkJICAgICAgLWRlZmF1bHR2YWx1ZSA9PiAnYWxsJywKKwkJCSAgICAgIHNvcnQga2V5cygla25vd25maWxlcykpOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRpIChAZmlsZXMpIHsKKwlkZWJ1ZygicmVhZGluZyAkaVxuIik7CisJcmVhZF9jb25maWcoJGksICRrbm93bmZpbGVzeyRpfSk7CisgICAgfQorfQorCitpZiAoJG9wdHN7J2cnfSkgeworICAgIG15IEBncm91cHMgPSBzcGxpdCgvLDpccy8sJG9wdHN7J2cnfSk7CisgICAgZm9yZWFjaCBteSAkZ3JvdXAgKEBncm91cHMpIHsKKwlkb19ncm91cCgkZ3JvdXApOworICAgIH0KK30gZWxzaWYgKCQjQVJHViA+PSAwKSB7CisgICAgIworICAgICMgbG9vcCB0aHJvdWdoIHJlcXVlc3RlZCBmaWxlcy4KKyAgICAjCisgICAgZm9yZWFjaCBteSAkaSAoQEFSR1YpIHsKKwlpZiAoIWRlZmluZWQoJGZpbGV0eXBlc3skaX0pKSB7CisJICAgIHdhcm4gImludmFsaWQgZmlsZTogJGlcbiI7CisJfSBlbHNlIHsKKwkgICAgaWYgKCRvcHRzeydhJ30pIHsKKwkJJGRpZGZpbGV7JGl9ID0gMTsKKwkgICAgfSBlbHNlIHsKKwkJYnVpbGRfZmlsZSgkdGVybSwgJGksICRmaWxldHlwZXN7JGl9KTsKKwkgICAgfQorCX0KKyAgICB9Cit9IGVsc2UgeworICAgICMKKyAgICAjIGFzayB1c2VyIHRvIHNlbGVjdCBmaWxlIHR5cGUgdG8gb3BlcmF0ZSBvbi4KKyAgICAjCisgICAgd2hpbGUoMSkgeworCW15ICRsaW5lID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJJIGNhbiBjcmVhdGUgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB5b3UuXG5TZWxlY3QgdGhlIGZpbGUgdHlwZSB5b3Ugd2lzaCB0byBjcmVhdGU6XG4oeW91IGNhbiBjcmVhdGUgbW9yZSB0aGFuIG9uZSBhcyB5b3UgcnVuIHRoaXMgcHJvZ3JhbSlcbiIsCisJCQkJLXF1ZXN0aW9uID0+ICdTZWxlY3QgRmlsZScsCisJCQkJLW90aGVyYW5zd2VycyA9PiBbJ3F1aXQnXSwKKwkJCQktbWFwYW5zd2VycyA9PiB7ICdxJyA9PiAncXVpdCcgfSwKKwkJCQlrZXlzKCVmaWxldHlwZXMpKTsKKwlsYXN0IGlmICgkbGluZSBlcSAicXVpdCIpOworCWRlYnVnKCJmaWxlIHNlbGVjdGVkOiAkbGluZVxuIik7CisJYnVpbGRfZmlsZSgkdGVybSwgJGxpbmUsICRmaWxldHlwZXN7JGxpbmV9KTsKKyAgICB9Cit9CisKKyMKKyMgV3JpdGUgb3V0IHRoZSByZXN1bHRzIHRvIHRoZSBvdXRwdXQgZmlsZXMuCisjCitvdXRwdXRfZmlsZXMoXCVmaWxldHlwZXMsICR0ZXJtKTsKKworCisjCisjIERpc3BsYXkgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHRoZSB1c2VyLgorIworUHJpbnQoIlxuXG5UaGUgZm9sbG93aW5nIGZpbGVzIHdlcmUgY3JlYXRlZDpcblxuIik7CitAZGlkZmlsZXMgPSBrZXlzKCVkaWRmaWxlKTsKK2ZvcmVhY2ggbXkgJGkgKEBkaWRmaWxlcykgeworICAgIGlmICgkZGlkZmlsZXskaX0gbmUgIjEiKSB7CisJaWYgKCRvcHRzeydpJ30gfHwgJG9wdHN7J0knfSkgeworICAgICAgICAgICRvcHRzeydJJ30gPSAiJGNvbmZwYXRoIiBpZiAoISRvcHRzeydJJ30pOworCisgICAgICAgICAgaWYgKCEgKC1kICIkb3B0c3snSSd9IikgJiYgISAobWtkaXIgKCIkb3B0c3snSSd9IiwgMDc1NSkpKSB7CisJICAgIHByaW50ICJcbkNvdWxkIG5vdCBjcmVhdGUgJG9wdHN7J0knfSBkaXJlY3Rvcnk6ICQhXG4iOworCSAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOworCSAgfQorCSAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlICgiJG9wdHN7J0knfS8kaSIsICIkb3B0c3snSSd9LyRpLmJhayIpIGlmICgtZiAiJG9wdHN7J0knfS8kaSIpOworICAgICAgICAgICAgaWYgKG1vdmUgKCIkZGlkZmlsZXskaX0iLCAiJG9wdHN7J0knfSIpKSB7CisgICAgICAgICAgICAgIHByaW50KCIgICRkaWRmaWxleyRpfSBpbnN0YWxsZWQgaW4gJG9wdHN7J0knfVxuIik7CSAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBwcmludCAiXG5Db3VsZCBub3QgbW92ZSBmaWxlICRkaWRmaWxleyRpfSB0byAkb3B0c3snSSd9LyRpOiAkIVxuIjsKKyAgICAgICAgICAgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisJfSBlbHNpZiAoJG9wdHN7J3AnfSkgeworCSAgaWYgKCEgKC1kICIkaG9tZSIpICYmICEgKG1rZGlyICgiJGhvbWUiLCAwNzU1KSkpIHsKKwkgICAgcHJpbnQgIlxuQ291bGQgbm90IGNyZWF0ZSAkaG9tZSBkaXJlY3Rvcnk6ICQhXG4iOworCSAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOworCSAgfQorCSAgZWxzZSB7CSAgICAKKwkgICAgbW92ZSAoIiRob21lLyRpIiwgIiRob21lLyRpLmJhayIpIGlmICgtZiAiJGhvbWUvJGkiKTsKKwkgICAgaWYgKG1vdmUgKCIkZGlkZmlsZXskaX0iLCAiJGhvbWUiKSkgeworCSAgICAgIHByaW50KCIgICRkaWRmaWxleyRpfSBpbnN0YWxsZWQgaW4gJGhvbWVcbiIpOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHByaW50ICJcbkNvdWxkIG5vdCBtb3ZlIGZpbGUgJGRpZGZpbGV7JGl9IHRvICRob21lOiAkIVxuIjsKKwkgICAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOworICAJICAgIH0KKwkgIH0KKyAgCX0gZWxzZSB7CisJICAgIFByaW50KCIgICRkaWRmaWxleyRpfSAiLAorCSAgICAoJGkgbmUgJGRpZGZpbGV7JGl9KT8iWyBmcm9tICRpIHNwZWNpZmljYXRpb25zXSI6IiAiLCJcbiIpOworCSAgICBpZiAoJG9wdHN7J2QnfSkgeworCQlvcGVuKEksJGRpZGZpbGV7JGl9KTsKKwkJZGVidWcoIiAgICAiIC4gam9pbigiICAgICIsPEk+KSAuICJcbiIpOworCQljbG9zZShJKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK2lmICghJG9wdHN7J3AnfSAmJiAhJG9wdHN7J2knfSAmJiAhJG9wdHN7J0knfSkgeworICAgIFByaW50KCJcblRoZXNlIGZpbGVzIHNob3VsZCBiZSBtb3ZlZCB0byAkY29uZnBhdGggaWYgeW91Cit3YW50IHRoZW0gdXNlZCBieSBldmVyeW9uZSBvbiB0aGUgc3lzdGVtLiAgSW4gdGhlIGZ1dHVyZSwgaWYgeW91IGFkZCAKK3RoZSAtaSBvcHRpb24gdG8gdGhlIGNvbW1hbmQgbGluZSBJJ2xsIGNvcHkgdGhlbSB0aGVyZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCisKK09yLCBpZiB5b3Ugd2FudCB0aGVtIGZvciB5b3VyIHBlcnNvbmFsIHVzZSBvbmx5LCBjb3B5IHRoZW0gdG8KKyRob21lIC4gIEluIHRoZSBmdXR1cmUsIGlmIHlvdSBhZGQgdGhlIC1wIG9wdGlvbiB0byB0aGUKK2NvbW1hbmQgbGluZSBJJ2xsIGNvcHkgdGhlbSB0aGVyZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCisKKyIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRnVuY3Rpb25zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIFByaW50IHsKKyAgICBwcmludCBAXyBpZiAoISRvcHRzeydxJ30pOworfQorIworIyBoYW5kbGUgYSBncm91cCBvZiBxdWVzdGlvbnMKKyMKK3N1YiBnZXRfeW5fbWF5YmUgeworICAgIG15ICRxdWVzdGlvbiA9IHNoaWZ0OworICAgIG15ICRhbnMgPSAieSI7CisgICAgaWYgKCRxdWVzdGlvbiBuZSAiIikgeworCSRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCAkcXVlc3Rpb24sCisJCQkgIHZhbGlkX2Fuc3dlcnMocXcoeWVzIHkgbm8gbikpLCAneScpOworICAgIH0KKyAgICByZXR1cm4gKCRhbnMgPX4gL155Lyk/MTowOworfQorCitzdWIgZG9fZ3JvdXAgeworICAgIG15ICRncm91cCA9IHNoaWZ0OworICAgIGRpZSAibm8gc3VjaCBncm91cCAkZ3JvdXBcbiIgaWYgKCEkZ3JvdXBzeyRncm91cH0pOworICAgIGZvcmVhY2ggbXkgJHRva2VuIChAeyRncm91cHN7JGdyb3VwfX0pIHsKKwlpZiAoJHRva2VuLT5bMF0gZXEgIm1lc3NhZ2UiKSB7CisJICAgIFByaW50ICgiJHRva2VuLT5bMV0gJHRva2VuLT5bMl1cbiIpOworCX0gZWxzaWYgKCR0b2tlbi0+WzBdIGVxICJzdWJncm91cCIpIHsKKwkgICAgZG9fZ3JvdXAoJHRva2VuLT5bMV0pIGlmIChnZXRfeW5fbWF5YmUoJHRva2VuLT5bMl0pKTsKKwl9IGVsc2lmIChkZWZpbmVkKCR0b2tlbm1hcHskdG9rZW4tPlsxXX0pKSB7CisJICAgIGlmIChnZXRfeW5fbWF5YmUoJHRva2VuLT5bMl0pKSB7CisJCWRvIHsKKwkJICAgIGRvX2xpbmUoJHRva2VuLT5bMV0sICR0b2tlbm1hcHskdG9rZW4tPlsxXX0pOworCQl9IHVudGlsICgkdG9rZW4tPlswXSBuZSAibXVsdGlwbGUiIHx8CisJCQkgZ2V0X2Fuc3dlcigkdGVybSwgIkRvIGFub3RoZXIgJHRva2VuLT5bMV0gbGluZT8iLAorCQkJCSAgICB2YWxpZF9hbnN3ZXJzKHF3KHllcyB5IG5vIG4pKSwgJ3knKQorCQkJID1+IC9uLyk7CisJICAgIH0KKwl9IGVsc2lmIChkZWZpbmVkKCRmaWxldHlwZXN7JHRva2VuLT5bMV19KSkgeworCSAgICAkZGlkZmlsZXskdG9rZW4tPlsxXX0gPSAxOworCX0gZWxzZSB7CisJICAgIGRpZSAiaW52YWxpZCBtZW1iZXIgJHRva2VuLT5bMV0gb2YgZ3JvdXAgJGdyb3VwXG4iOworCX0KKyAgICB9Cit9CisKKyMKKyMgYnVpbGQgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZmlsZSBieSBvcGVyYXRpbmcgb24gc2VjdGlvbnMKKyMKK3N1YiBidWlsZF9maWxlIHsKKyAgICBteSAoJHRlcm0sICRmaWxlbmFtZSwgJGZpbGVjb25mKSA9IEBfOworICAgICRkaWRmaWxleyRmaWxlbmFtZX0gPSAxOworICAgIG15IChAbGluZXMpOworICAgIHdoaWxlKDEpIHsKKwlteSAkbGluZSA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiVGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHB1dCBpbnRvICRmaWxlbmFtZSBpcyBkaXZpZGVkXG5pbnRvIHNlY3Rpb25zLiAgU2VsZWN0IGEgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciAkZmlsZW5hbWVcbnRoYXQgeW91IHdpc2ggdG8gY3JlYXRlOlxuIiwKKwkJCQktb3RoZXJhbnN3ZXJzID0+IFsnZmluaXNoZWQnXSwKKwkJCQktbWFwYW5zd2VycyA9PiB7ICdmJyA9PiAnZmluaXNoZWQnIH0sCisJCQkJLXF1ZXN0aW9uID0+ICJTZWxlY3Qgc2VjdGlvbiIsCisJCQkJLW51bWVyaWMgPT4gMSwKKwkJCQltYXAgeyAkXy0+eyd0aXRsZSd9WzBdIH0gQCRmaWxlY29uZik7CisKKwlyZXR1cm4gQGxpbmVzIGlmICgkbGluZSBlcSAiZmluaXNoZWQiKTsKKwlkb19zZWN0aW9uKCRmaWxlY29uZi0+WyRsaW5lLTFdKTsKKyAgICB9Cit9CisKKyMKKyMgY29uZmlndXJlIGEgcGFydGljdWxhciBzZWN0aW9uIGJ5IG9wZXJhdGluZyBvbiB0b2tlbiB0eXBlcworIworc3ViIGRvX3NlY3Rpb24geworICAgIG15ICRjb25mc2VjdCA9IHNoaWZ0OworICAgIG15IEBsaW5lczsKKyAgICB3aGlsZSgxKSB7CisJUHJpbnQgKCJcblNlY3Rpb246ICRjb25mc2VjdC0+eyd0aXRsZSd9WzBdXG4iKTsKKwlQcmludCAoIkRlc2NyaXB0aW9uOlxuIik7CisJUHJpbnQgKCIgICIsIGpvaW4oIlxuICAiLEB7JGNvbmZzZWN0LT57J2Rlc2NyaXB0aW9uJ319KSwiXG4iKTsKKwlteSAkbGluZSA9CisJICAgIGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiU2VsZWN0IGZyb206XG4iLAorCQkJIC1vdGhlcmFuc3dlcnMgPT4gWydmaW5pc2hlZCcsJ2xpc3QnXSwKKwkJCSAtbWFwYW5zd2VycyA9PiB7ICdmJyA9PiAnZmluaXNoZWQnLAorCQkJCQkgICdsJyA9PiAnbGlzdCcgfSwKKwkJCSAtcXVlc3Rpb24gPT4gJ1NlbGVjdCBzZWN0aW9uJywKKwkJCSAtZGVzY3JpcHRpb25zID0+IFttYXAgeyAkY29uZnNlY3QtPnskX317aW5mb31bMF0gfSAKKwkJCQkJICAgQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319XSwKKwkJCSBAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX0pOworCXJldHVybiBAbGluZXMgaWYgKCRsaW5lIGVxICJmaW5pc2hlZCIpOworCWlmICgkbGluZSBlcSAibGlzdCIpIHsKKwkgICAgcHJpbnQgIkxpbmVzIGRlZmluZWQgZm9yIHNlY3Rpb24gXCIkY29uZnNlY3QtPnt0aXRsZX1bMF1cIiBzbyBmYXI6XG4iOworCSAgICBmb3JlYWNoIG15ICRpIChAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX0pIHsKKwkJaWYgKCQjeyRjb25mc2VjdC0+eyRpfXsncmVzdWx0cyd9fSA+PSAwKSB7CisJCSAgICBwcmludCAiICAiLGpvaW4oIlxuICAiLEB7JGNvbmZzZWN0LT57JGl9eydyZXN1bHRzJ319KSwiXG4iOworCQl9CisJICAgIH0KKwkgICAgbmV4dDsKKwl9CisJZG9fbGluZSgkbGluZSwgJGNvbmZzZWN0LT57JGxpbmV9KTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisjCisjIEFzayBhbGwgdGhlIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBsaW5lIHR5cGUKKyMKK3N1YiBkb19saW5lIHsKKyAgICBteSAkdG9rZW4gPSBzaGlmdDsKKyAgICBteSAkY29uZmxpbmUgPSBzaGlmdDsKKyAgICBteSAoQGFuc3dlcnMsICRjb3VudGVyLCAkaSk7CisjICAgIGRlYnVnKG15X0R1bXBlcigkY29uZmxpbmUpKTsKKyAgICBQcmludCAoIlxuQ29uZmlndXJpbmc6ICR0b2tlblxuIik7CisgICAgUHJpbnQgKCJEZXNjcmlwdGlvbjpcbiAgIixqb2luKCJcbiAgICAiLEB7JGNvbmZsaW5lLT57J2luZm8nfX0pLCJcblxuIik7CisgICAgZm9yKCRpPTA7ICRpIDw9ICQjeyRjb25mbGluZS0+eydxdWVzdGlvbid9fTsgJGkrKykgeworCWlmIChkZWZpbmVkKCRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSkgJiYKKwkgICAgJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldIG5lICIiKSB7CisJICAgIG15ICRxID0gJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldOworCSAgICAkcSA9fiBzL1wkKFxkKykvJGFuc3dlcnNbJDFdL2c7CisJICAgIGRlYnVnKCJhZnRlcjogJHRlcm0sICRxLCAiLCRjb25mbGluZS0+eyd2YWxpZGFuc3dlcid9WyRpXSwiXG4iKTsKKwkgICAgJGFuc3dlcnNbJGldID0gZ2V0X2Fuc3dlcigkdGVybSwgJHEsCisJCQkJICAgICAgJGNvbmZsaW5lLT57J3ZhbGlkYW5zd2VyJ31bJGldKTsKKwkgICAgJGFuc3dlcnNbJGldID1+IHMvXCIvXFxcIi9nOworCSAgICAkYW5zd2Vyc1skaV0gPSAnIicgLiAkYW5zd2Vyc1skaV0gLiAnIicgaWYgKCRhbnN3ZXJzWyRpXSA9fiAvXHMvKTsKKwl9CisgICAgfQorICAgIGlmICgkI3skY29uZmxpbmUtPnsnbGluZSd9fSA9PSAtMSkgeworCW15ICgkaSwkbGluZSk7CisJZm9yKCRpPTA7ICRpIDw9ICQjeyRjb25mbGluZS0+eydxdWVzdGlvbid9fTsgJGkrKykgeworCSAgICBuZXh0IGlmICghZGVmaW5lZCgkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0pIHx8CisJCSAgICAgJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldIGVxICIiKTsKKwkgICAgJGxpbmUgLj0gIiBcJCIgLiAkaTsKKwl9CisJcHVzaCBAeyRjb25mbGluZS0+eydsaW5lJ319LCAkbGluZTsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRsaW5lIChAeyRjb25mbGluZS0+eydsaW5lJ319KSB7CisJbXkgJGZpbmlzaGVkID0gJGxpbmU7CisJZGVidWcoInByZWxpbmU6ICRmaW5pc2hlZFxuIik7CisJZGVidWcoImFuc3dlcnM6ICIsbXlfRHVtcGVyKFxAYW5zd2VycykpOworCSRmaW5pc2hlZCA9fiBzL1wkKFxkKykvJGFuc3dlcnNbJDFdL2c7CisJaWYgKCRsaW5lID1+IHMvXmV2YWxccysvLykgeworCSAgICBkZWJ1ZygiZXZhbDogJGZpbmlzaGVkXG4iKTsKKwkgICAgJGZpbmlzaGVkID0gZXZhbCAkZmluaXNoZWQ7CisJICAgIGRlYnVnKCJldmFsIHJlc3VsdHM6ICRmaW5pc2hlZFxuIik7CisJfQorCSRmaW5pc2hlZCA9ICR0b2tlbiAuICIgIiAuICRmaW5pc2hlZDsKKwlQcmludCAoIlxuRmluaXNoZWQgT3V0cHV0OiAkZmluaXNoZWRcbiIpOworCXB1c2ggQHskY29uZmxpbmUtPnsncmVzdWx0cyd9fSwkZmluaXNoZWQ7CisgICAgfQorfQorCisjCisjIHJlYWQgYWxsIHNldHMgb2YgY29uZmlnIGZpbGVzIGluIHRoZSB2YXJpb3VzIHN1YmRpcmVjdG9yaWVzLgorIworc3ViIHJlYWRfY29uZmlnX2ZpbGVzIHsKKyAgICBteSAkcmVhZGRpciA9IHNoaWZ0OworICAgIG15ICRmaWxldHlwZXMgPSBzaGlmdDsKKyAgICBvcGVuZGlyKERILCAkcmVhZGRpcikgfHwgZGllICJubyBzdWNoIGRpcmVjdG9yeSAkcmVhZGRpciwgZGlkIHlvdSBydW4gbWFrZSBpbnN0YWxsP1xuIjsKKyAgICBteSAkZGlyOworICAgIG15ICRjb25maWdmaWxlbmFtZT0ic25tcGNvbmYtY29uZmlnIjsKKworICAgIHdoaWxlKGRlZmluZWQoJGRpciA9IHJlYWRkaXIoREgpKSkgeworCW5leHQgaWYgKCRkaXIgPX4gL15cLi8pOworCW5leHQgaWYgKCRkaXIgPX4gL0NWUy8pOworCWRlYnVnKCJkaXIgZW50cnk6ICRkaXJcbiIpOworCWlmICgtZCAiJHJlYWRkaXIvJGRpciIgJiYgLWYgIiRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lIikgeworCisJICAgIG15ICRjb25mZmlsZTsKKworCSAgICAjIHJlYWQgdGhlIHRvcCBsZXZlbCBjb25maWd1cmF0aW9uIGluZm9yYW1hdGlvbiBhYm91dCB0aGUgZGlyZWNvdHJ5LgorCSAgICBvcGVuKEksICIkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZSIpOworCSAgICB3aGlsZSg8ST4pIHsKKwkJJGNvbmZmaWxlID0gJDEgaWYgKC9mb3Jjb25mZmlsZTogKC4qKS8pOworCSAgICB9CisJICAgIGNsb3NlKEkpOworCisJICAgICMgbm8gUkVBRE1FIGluZm9ybWF0aW5vLgorCSAgICBpZiAoJGNvbmZmaWxlIGVxICIiKSB7CisJCXByaW50IFNUREVSUiAiV2FybmluZzogTm8gJ2ZvcmNvbmZmaWxlJyBpbmZvcm1hdGlvbiBpbiAkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZVxuIjsKKwkJbmV4dDsKKwkgICAgfQorCisJICAgICMgcmVhZCBhbGwgdGhlIGRhYXQgaW4gdGhlIGRpcmVjdG9yeQorCSAgICAkZmlsZXR5cGVzLT57JGNvbmZmaWxlfSA9IHJlYWRfY29uZmlnX2l0ZW1zKCIkcmVhZGRpci8kZGlyIiwgJGNvbmZmaWxlKTsKKwl9IGVsc2UgeworCSAgICAjIG5vIFJFQURNRSBpbmZvcm1hdGluby4KKwkgICAgcHJpbnQgU1RERVJSICJXYXJuaW5nOiBObyAkY29uZmlnZmlsZW5hbWUgZmlsZSBmb3VuZCBpbiAkcmVhZGRpci8kZGlyXG4iOworCX0KKyAgICB9CisgICAgY2xvc2VkaXIgREg7Cit9CisKKyMKKyMgcmVhZCBlYWNoIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBhIGRpcmVjdG9yeQorIworc3ViIHJlYWRfY29uZmlnX2l0ZW1zIHsKKyAgICBteSAkaXRlbWRpciA9IHNoaWZ0OworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgb3BlbmRpcihJVEVNUywgJGl0ZW1kaXIpOworICAgIG15ICRmaWxlOworICAgIG15IEByZXN1bHRzOworICAgIHdoaWxlKGRlZmluZWQoJGZpbGUgPSByZWFkZGlyKElURU1TKSkpIHsKKwluZXh0IGlmICgkZmlsZSA9fiAvfiQvKTsKKwluZXh0IGlmICgkZmlsZSA9fiAvXnNubXBjb25mLWNvbmZpZyQvKTsKKwlpZiAoLWYgIiRpdGVtZGlyLyRmaWxlIikgeworCSAgICBteSAkcmVzID0gcmVhZF9jb25maWdfaXRlbSgiJGl0ZW1kaXIvJGZpbGUiLCAkdHlwZSk7CisJICAgIGlmIChzY2FsYXIoa2V5cyglJHJlcykpID4gMCkgeworCQlwdXNoIEByZXN1bHRzLCAkcmVzOworCSAgICB9CisJfQorICAgIH0KKyAgICBjbG9zZWRpcihJVEVNUyk7CisgICAgcmV0dXJuIFxAcmVzdWx0czsKK30KKworIworIyBtYXJrIGEgbGlzdCBvZiB0b2tlbnMgYXMgYSBzcGVjaWFsICJncm91cCIKKyMKK3N1YiByZWFkX2NvbmZpZ19ncm91cCB7CisgICAgbXkgKCRmaCwgJGdyb3VwLCAkdHlwZSkgPSBAXzsKKyAgICBteSAkbGluZTsKKyAgICBkZWJ1ZygiaGFuZGxpbmcgZ3JvdXAgJGdyb3VwXG4iKTsKKyAgICBwdXNoIChAeyRncm91cHN7JGdyb3VwfX0sWydmaWxldHlwZScsICR0eXBlXSk7CisgICAgd2hpbGUoJGxpbmUgPSA8JGZoPikgeworCWNob21wKCRsaW5lKTsKKwluZXh0IGlmICgkbGluZSA9fiAvXlxzKiQvKTsKKwluZXh0IGlmICgkbGluZSA9fiAvXlwjLyk7CisJcmV0dXJuICRsaW5lIGlmICgkbGluZSAhfiAvXihzaW5nbGV8bXVsdGlwbGV8bWVzc2FnZXxmaWxldHlwZXxzdWJncm91cCkvKTsKKwlteSAoJHR5cGUsICR0b2tlbiwgJHJlc3QpID0gKCRsaW5lID1+IC9eKFx3KylccysoW15cc10rKVxzKiguKikvKTsKKwlkZWJ1ZyAoInJlYWRpbmcgZ3JvdXAgJGdyb3VwIDogJHR5cGUgLT4gJHRva2VuIC0+ICRyZXN0XG4iKTsKKwlwdXNoIChAeyRncm91cHN7JGdyb3VwfX0sIFskdHlwZSwgJHRva2VuLCAkcmVzdF0pOworICAgIH0KKyAgICByZXR1cm47Cit9CisJCisKKyMKKyMgUGFyc2Ugb25lIGZpbGUKKyMKK3N1YiByZWFkX2NvbmZpZ19pdGVtIHsKKyAgICBteSAkaXRlbWZpbGUgPSBzaGlmdDsKKyAgICBteSAkaXRlbWNvdW50OworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlKCRpdGVtZmlsZSk7CisgICAgcmV0dXJuIGlmICghZGVmaW5lZCgkZmgpKTsKKyAgICBteSAoJXJlc3VsdHMsICRjdXJ0b2tlbik7CisgICAgZGVidWcoInRva2VuaXRlbXM6ICAiLCBteV9EdW1wZXIoXCV0b2tlbml0ZW1zKSk7CisgIHRvcHdoaWxlOgorICAgIHdoaWxlKCRsaW5lID0gPCRmaD4pIHsKKwluZXh0IGlmICgkbGluZSA9fiAvXlxzKlwjLyk7CisJbXkgKCR0b2tlbiwgJHJlc3QpID0gKCRsaW5lID1+IC9eKFx3KylccysoLiopLyk7CisJbmV4dCBpZiAoIWRlZmluZWQoJHRva2VuKSB8fCAhZGVmaW5lZCgkcmVzdCkpOworCXdoaWxlICgkdG9rZW4gZXEgJ2dyb3VwJykgeworCSAgICAjIGhhbmRsZSBzcGVjaWFsIGdyb3VwIGxpc3QKKwkgICAgbXkgJG5leHQgPSByZWFkX2NvbmZpZ19ncm91cCgkZmgsICRyZXN0LCR0eXBlKTsKKwkgICAgaWYgKCRuZXh0KSB7CisJCSgkdG9rZW4sICRyZXN0KSA9ICgkbmV4dCA9fiAvXihcdyspXHMrKC4qKS8pOworCSAgICB9IGVsc2UgeworCQluZXh0IHRvcHdoaWxlOworCSAgICB9CisJfQorCWRlYnVnKCJ0b2tlbjogJHRva2VuID0+ICRyZXN0XG4iKTsKKwlpZiAoJHRva2VuIGVxICdzdGVhbCcpIHsKKwkgICAgZm9yZWFjaCBteSAkc3RlYWxmcm9tIChrZXlzKCV7JHJlc3VsdHN7JHJlc3R9fSkpIHsKKwkJaWYgKCFkZWZpbmVkKCRyZXN1bHRzeyRjdXJ0b2tlbn17JHN0ZWFsZnJvbX0pKSB7CisJCSAgICBAeyRyZXN1bHRzeyRjdXJ0b2tlbn17JHN0ZWFsZnJvbX19ID0gCisJCQlAeyRyZXN1bHRzeyRyZXN0fXskc3RlYWxmcm9tfX07CisJCX0KKwkgICAgfQorCX0gZWxzaWYgKGRlZmluZWQoJHRva2VuaXRlbXN7JHRva2VufSkpIHsKKwkgICAgaWYgKCFkZWZpbmVkKCRjdXJ0b2tlbikpIHsKKwkJZGllICJlcnJvciBpbiBjb25maWd1cmF0aW9uIGZpbGUgJGl0ZW1maWxlLCBubyB0b2tlbiBzZXRcbiI7CisJICAgIH0KKwkgICAgJHJlc3QgPX4gcy9eXCMvLzsKKwkgICAgcHVzaCBAeyRyZXN1bHRzeyRjdXJ0b2tlbn17JHRva2VufX0sJHJlc3Q7CisJfSBlbHNpZiAoZGVmaW5lZCgkYXJyYXlpdGVtc3skdG9rZW59KSkgeworCSAgICBpZiAoIWRlZmluZWQoJGN1cnRva2VuKSkgeworCQlkaWUgImVycm9yIGluIGNvbmZpZ3VyYXRpb24gZmlsZSAkaXRlbWZpbGUsIG5vIHRva2VuIHNldFxuIjsKKwkgICAgfQorCSAgICBteSAoJG51bSwgJG5ld3Jlc3QpID0gKCRyZXN0ID1+IC9eKFxkKylccysoLiopLyk7CisJICAgIGlmICghZGVmaW5lZCgkbnVtKSB8fCAhZGVmaW5lZCgkbmV3cmVzdCkpIHsKKwkJd2FybiAiaW52YWxpZCBjb25maWcgbGluZTogJGxpbmVcbiI7CisJICAgIH0gZWxzZSB7CisJCSRyZXN1bHRzeyRjdXJ0b2tlbn17JHRva2VufVskbnVtXSA9ICRuZXdyZXN0OworCSAgICB9CisJfSBlbHNpZiAoJHRva2VuID1+IC9edG9rZW5ccyokLykgeworCSAgICAkcmVzdCA9IGxjKCRyZXN0KTsKKwkgICAgJGN1cnRva2VuID0gJHJlc3Q7CisJICAgIGlmICghIGV4aXN0cyAkcmVzdWx0c3skY3VydG9rZW59eydkZWZpbmVkJ30pIHsKKwkJcHVzaCBAeyRyZXN1bHRzeyd0aGV0b2tlbnMnfX0sICRjdXJ0b2tlbjsKKwkJJHJlc3VsdHN7JGN1cnRva2VufXsnZGVmaW5lZCd9ID0gMTsKKwkgICAgfQorCSAgICAkdG9rZW5tYXB7JGN1cnRva2VufSA9ICRyZXN1bHRzeyRjdXJ0b2tlbn07CisJICAgIGRlYnVnKCJjdXJyZW50IHRva2VuIHNldCB0byAkdG9rZW5cbiIpOworCX0gZWxzZSB7CisJICAgIHB1c2ggQHskcmVzdWx0c3skdG9rZW59fSwkcmVzdDsKKwl9CisgICAgfQorICAgIHJldHVybiBcJXJlc3VsdHM7Cit9CisKK3N1YiBkZWJ1ZyB7CisgICAgcHJpbnQgQF8gaWYgKCRvcHRzeydkJ30pOworfQorCitzdWIgb3V0cHV0X2ZpbGVzIHsKKyAgICBteSAkZmlsZXR5cGVzID0gc2hpZnQ7CisgICAgbXkgJHRlcm0gPSBzaGlmdDsKKyAgICBmb3JlYWNoIG15ICRmdCAoa2V5cyglJGZpbGV0eXBlcykpIHsKKwluZXh0IGlmICghJGRpZGZpbGV7JGZ0fSk7CisJbXkgJG91dHB1dGYgPSAkZnQ7CisJaWYgKC1mICRvdXRwdXRmICYmICEkb3B0c3snZid9KSB7CisJICAgIHByaW50ICJcbkVycm9yOiBBbiAkb3V0cHV0ZiBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgZGlyZWN0b3J5LlxuXG4iOworCSAgICBteSAkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwiJ292ZXJ3cml0ZScsICdza2lwJywgJ3JlbmFtZScgb3IgJ2FwcGVuZCc/ICIsdmFsaWRfYW5zd2VycyhxdyhvIG92ZXJ3cml0ZSByIHJlbmFtZSBzIHNraXAgYSBhcHBlbmQpKSk7CisJICAgIG5leHQgaWYgKCRhbnMgPX4gL14oc3xza2lwKSQvaSk7CisJICAgIGlmICgkYW5zID1+IC9eKGF8YXBwZW5kKS8pIHsKKwkJJG91dHB1dGYgPSAiPiRvdXRwdXRmIjsKKwkgICAgfSBlbHNpZiAoJGFucyA9fiAvXihyfHJlbmFtZSkkL2kpIHsKKwkJIyBkZWZhdWx0IHRvIHJlbmFtZSBmb3IgZXJyb3IgY29uZGl0aW9ucworCQkkb3V0cHV0ZiA9ICR0ZXJtLT5yZWFkbGluZSgiU2F2ZSB0byB3aGF0IG5ldyBmaWxlIG5hbWUgaW5zdGVhZCAob3IgJ3NraXAnKT8gIik7CisJICAgIH0KKwl9CisJJGRpZGZpbGV7JGZ0fSA9ICRvdXRwdXRmOworCW9wZW4oTywiPiRvdXRwdXRmIikgfHwgd2FybiAiY291bGRuJ3Qgd3JpdGUgdG8gJG91dHB1dGZcbiI7CisJcHJpbnQgTyAiIyIgeCA3NSwiXG4iOworCXByaW50IE8gIiNcbiMgJGZ0XG4iOworCXByaW50IE8gIiNcbiMgICAtIGNyZWF0ZWQgYnkgdGhlIHNubXBjb25mIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbVxuI1xuIjsKKwlmb3JlYWNoIG15ICRzZWN0IChAeyRmaWxldHlwZXMtPnskZnR9fSkgeworCSAgICBteSAkc2VjdGhlbHAgPSAwOworCSAgICBmb3JlYWNoIG15ICR0b2tlbiAoQHskc2VjdC0+eyd0aGV0b2tlbnMnfX0pIHsKKwkJaWYgKCQjeyRzZWN0LT57JHRva2VufXsncmVzdWx0cyd9fSA+PSAwKSB7CisJCSAgICBpZiAoJHNlY3RoZWxwKysgPT0gMCkgeworCQkJcHJpbnQgTyAiIyIgeCA3NSwiXG4jIFNFQ1RJT046ICIsCisJCQlqb2luKCJcbiMgICAgICAgICAgIiwgQHskc2VjdC0+e3RpdGxlfX0pLCAiXG4jXG4iOworCQkJcHJpbnQgTyAiIyAgICIsIGpvaW4oIlxuIyAgICIsQHskc2VjdC0+e2Rlc2NyaXB0aW9ufX0pLAorCQkJIlxuIjsKKwkJICAgIH0KKwkJICAgIHByaW50IE8gIlxuIyAkdG9rZW46ICIsCisJCSAgICBqb2luKCJcbiMgICAiLEB7JHNlY3QtPnskdG9rZW59e2luZm99fSksICJcblxuIjsKKwkJICAgIGZvcmVhY2ggbXkgJHJlc3VsdCAoQHskc2VjdC0+eyR0b2tlbn17J3Jlc3VsdHMnfX0pIHsKKwkJCXByaW50IE8gIiRyZXN1bHRcbiI7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBwcmludCBPICJcblxuXG4iOworCX0KKwlpZiAoJCN7JHVua25vd257JGZ0fX0gPiAtMSkgeworCSAgICBwcmludCBPICIjXG4jIFVua25vd24gZGlyZWN0aXZlcyByZWFkIGluIGZyb20gb3RoZXIgZmlsZXMgYnkgc25tcGNvbmZcbiNcbiI7CisJICAgIGZvcmVhY2ggbXkgJHVua25vd24gKEB7JHVua25vd257JGZ0fX0pIHsKKwkJcHJpbnQgTyAkdW5rbm93biwiXG4iOworCSAgICB9CisJfQorCWNsb3NlKE8pOworICAgIH0KK30KKworc3ViIGdldF9hbnN3ZXIgeworICAgIG15ICgkdGVybSwgJHF1ZXN0aW9uLCAkcmVnZXhwLCAkZGVmYXVsdHZhbCkgPSBAXzsKKyAgICAkcXVlc3Rpb24gLj0gIiAoZGVmYXVsdCA9ICRkZWZhdWx0dmFsKSIgaWYgKGRlZmluZWQoJGRlZmF1bHR2YWwpICYmICRkZWZhdWx0dmFsIG5lICIiKTsKKyAgICAkcXVlc3Rpb24gLj0gIjogIjsKKyAgICBteSAkYW5zID0gJHRlcm0tPnJlYWRsaW5lKCRxdWVzdGlvbik7CisgICAgcmV0dXJuICRkZWZhdWx0dmFsIGlmICgkYW5zIGVxICIiICYmIGRlZmluZWQoJGRlZmF1bHR2YWwpICYmIAorCQkJICAgJGRlZmF1bHR2YWwgbmUgIiIpOworICAgIHdoaWxlICghKCFkZWZpbmVkKCRyZWdleHApIHx8CisJICAgICAkcmVnZXhwIGVxICIiIHx8CisJICAgICAkYW5zID1+IC8kcmVnZXhwLykpIHsKKwlwcmludCAiaW52YWxpZCBhbnN3ZXIhICBJdCBtdXN0IG1hdGNoIHRoaXMgcmVndWxhciBleHByZXNzaW9uOiAkcmVnZXhwXG4iOworCSRhbnMgPSAkdGVybS0+cmVhZGxpbmUoJHF1ZXN0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuICRkZWZhdWx0dmFsIGlmICgkYW5zIGVxICIiICYmIGRlZmluZWQoJGRlZmF1bHR2YWwpICYmIAorCQkJICAgJGRlZmF1bHR2YWwgbmUgIiIpOworICAgIHJldHVybiAkYW5zOworfQorICAgIAorc3ViIHZhbGlkX2Fuc3dlcnMgeworICAgIG15IEBsaXN0OworICAgIGZvcmVhY2ggJGkgKEBfKSB7CisJcHVzaCBAbGlzdCwgJGkgaWYgKCRpKTsKKyAgICB9CisgICAgcmV0dXJuICJeKCIgLiBqb2luKCJ8IixAbGlzdCkgLiAiKVwkIjsKK30KKworc3ViIHJlYWRfY29uZmlnIHsKKyAgICBteSAkZmlsZSA9IHNoaWZ0OworICAgIG15ICRmaWxldHlwZSA9IHNoaWZ0OworICAgIHJldHVybiBpZiAoIWRlZmluZWQoJGZpbGV0eXBlc3skZmlsZXR5cGV9KSk7CisgICAgaWYgKCEgLWYgJGZpbGUpIHsKKwl3YXJuICIkZmlsZSBkb2VzIG5vdCBleGlzdFxuIjsKKwlyZXR1cm47CisgICAgfQorICAgIG9wZW4oSSwkZmlsZSk7CisgICAgd2hpbGUoPEk+KSB7CisJbmV4dCBpZiAoL15ccypcIy8pOworCW5leHQgaWYgKC9eXHMqJC8pOworCWNob21wOworCW15ICgkdG9rZW4sICRyZXN0KSA9IC9eXHMqKFx3KylccysoLiopLzsKKwkkdG9rZW4gPSBsYygkdG9rZW4pOworCW5leHQgaWYgKGRlZmluZWQoJGFsbGxpbmVzeyRffSkpOyAjIGRyb3AgZHVwbGljYXRlIGxpbmVzCisJaWYgKGRlZmluZWQoJHRva2VubWFweyR0b2tlbn0pKSB7CisJICAgIHB1c2ggQHskdG9rZW5tYXB7JHRva2VufXsncmVzdWx0cyd9fSwkXzsKKwl9IGVsc2UgeworCSAgICBwdXNoIEB7JHVua25vd257JGZpbGV0eXBlfX0sJF87CisJfQorCSRhbGxsaW5lc3skX30rKzsKKyAgICB9CisgICAgY2xvc2UoSSk7Cit9CisKK3N1YiBkaXNwbGF5X21lbnUgeworICAgIG15ICVjb25maWc7CisKKyAgICB3aGlsZSAoJCNfID4gLTEgJiYgJF9bMF0gPX4gL14tLykgeworCW15ICRrZXkgPSBzaGlmdDsKKwkkY29uZmlneyRrZXl9ID0gc2hpZnQ7CisgICAgfQorCisgICAgbXkgJGNvdW50PTE7CisgICAgcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKKyAgICBpZiAoJGNvbmZpZ3snLWhlYWQnfSkgeworCXByaW50ICRjb25maWd7Jy1oZWFkJ307CisJcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKKyAgICB9CisgICAgbXkgQGFuc3dlcnMgPSBAXzsKKyAgICBteSBAbGlzdDsKKyAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctZGVzY3JpcHRpb25zJ30pICYmIAorCXJlZigkY29uZmlneyctZGVzY3JpcHRpb25zJ30pIGVxICJBUlJBWSIpIHsKKwlAbGlzdCA9IEB7JGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9fQorICAgIH0gZWxzZSB7CisJQGxpc3QgPSBAXzsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkaSAoQGxpc3QpIHsKKwlwcmludGYgIiAgJTJkOiAgJGlcbiIsICRjb3VudCsrIGlmICgkaSk7CisgICAgfQorICAgIHByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7CisgICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9KSkgeworCWlmIChyZWYoJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9KSBlcSAnQVJSQVknKSB7CisJICAgIHByaW50ICJPdGhlciBvcHRpb25zOiAiLCBqb2luKCIsICIsCisJCQkJCSAgQHskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSwgIlxuIjsKKwkgICAgcHVzaCBAYW5zd2VycywgQHskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319OworCSAgICBwdXNoIEBhbnN3ZXJzLCBrZXlzKCV7JGNvbmZpZ3snLW1hcGFuc3dlcnMnfX0pOworCX0gZWxzZSB7CisJICAgIG15ICRtYXhsZW4gPSAwOworCSAgICBwdXNoIEBhbnN3ZXJzLGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KTsKKwkgICAgZm9yZWFjaCBteSAkaSAoa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pKSB7CisJCSRtYXhsZW4gPSBsZW5ndGgoJGkpIGlmIChsZW5ndGgoJGkpID4gJG1heGxlbik7CisJICAgIH0KKwkgICAgZm9yZWFjaCBteSAkaSAoa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pKSB7CisJCXByaW50ZigiICAlLSIgLiAkbWF4bGVuIC4gInM6ICVzXG4iLCAkaSwgCisJCSAgICAgICAkY29uZmlneyctb3RoZXJhbnN3ZXJzJ317JGl9KTsKKwkgICAgfQorCX0KKwlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOworICAgIH0KKyAgICBpZiAoJGNvbmZpZ3snLXRhaWwnfSkgeworCXByaW50ICRjb25maWd7Jy10YWlsJ307CisJcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctcXVlc3Rpb24nfSkpIHsKKwl3aGlsZSgxKSB7CisJICAgIG15ICRudW1leHByOworCSAgICBpZiAoJGNvbmZpZ3snLW11bHRpcGxlJ30pIHsKKwkJJG51bWV4cHIgPSAnW1xkXHMsXSt8YWxsfGF8bm9uZXxuJzsKKwkgICAgfSBlbHNlIHsKKwkJJG51bWV4cHIgPSAnXGQrJzsKKwkgICAgfQorCSAgICBwdXNoIEBhbnN3ZXJzLCIiIGlmICgkY29uZmlneyctZGVmYXVsdHZhbHVlJ30pOworCSAgICAkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwgJGNvbmZpZ3snLXF1ZXN0aW9uJ30sCisJCQkgICAgICB2YWxpZF9hbnN3ZXJzKCRudW1leHByLEBhbnN3ZXJzKSwKKwkJCSAgICAgICRjb25maWd7Jy1kZWZhdWx0dmFsdWUnfSk7CisJICAgIGlmICgkY29uZmlneyctbWFwYW5zd2Vycyd9eyRhbnN9KSB7CisJCSRhbnMgPSAkY29uZmlneyctbWFwYW5zd2Vycyd9eyRhbnN9OworCSAgICB9CisKKwkgICAgaWYgKCRhbnMgPX4gL14kbnVtZXhwciQvKSB7CisJCWlmICgkY29uZmlneyctbXVsdGlwbGUnfSkgeworCQkgICAgbXkgQGxpc3QgPSBzcGxpdCgvXHMqLFxzKi8sJGFucyk7CisJCSAgICBteSBAcmV0OworCQkgICAgJGNvdW50ID0gMDsKKwkJICAgIGZvcmVhY2ggbXkgJGkgKEBfKSB7CisJCQkkY291bnQrKzsKKwkJCWlmICgkYW5zIGVxICJhbGwiIHx8ICRhbnMgZXEgImEiIAorCQkJICAgIHx8IGdyZXAoL14kY291bnQkLyxAbGlzdCkpIHsKKwkJCSAgICBwdXNoIEByZXQsICRpOworCQkJfQorCQkgICAgfQorCQkgICAgcmV0dXJuIEByZXQ7CisJCX0gZWxzZSB7CisJCSAgICBpZiAoJGFucyA8PSAwIHx8ICRhbnMgPiAkI18rMSkgeworCQkJd2FybiAiaW52YWxpZCBzZWxlY3Rpb246ICRhbnMgW211c3QgYmUgMS0iIC4KKwkJCSAgICAoJCNfKzEpIC4gIl1cbiI7CisJCSAgICB9IGVsc2UgeworCQkJcmV0dXJuICRhbnMgaWYgKCRjb25maWd7Jy1udW1lcmljJ30pOworCQkJJGNvdW50ID0gMDsKKwkJCWZvcmVhY2ggbXkgJGkgKEBfKSB7CisJCQkgICAgJGNvdW50Kys7CisJCQkgICAgaWYgKCRhbnMgZXEgJGNvdW50KSB7CisJCQkJcmV0dXJuICRpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworCQlyZXR1cm4gJGFuczsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N1YiBteV9EdW1wZXIgeworICAgIGlmICgkb3B0c3snRCd9KSB7CisJcmV0dXJuIER1bXBlcihAXyk7CisgICAgfSBlbHNlIHsKKwlyZXR1cm4gIlxuIjsKKyAgICB9Cit9CisKK3N1YiBnZXRfcGVyc2lzdGVudERpciB7CisgICAgbXkgJGZpbGUgPSBzaGlmdDsKKyAgICBteSAkcmVzdWx0ID0gMDsKKyAgICBpZiAoISAtZiAkZmlsZSkgeworCXJldHVybiAwOworICAgIH0KKyAgICBvcGVuKEksJGZpbGUpOworICAgIHdoaWxlKDxJPikgeworCW5leHQgaWYgKC9eXHMqXCMvKTsKKwluZXh0IGlmICgvXlxzKiQvKTsKKwljaG9tcDsKKwlteSAoJHRva2VuLCAkcmVzdCkgPSAvXlxzKihcdyspXHMrKC4qKS87CisgICAgICAgIGlmIChsYygkdG9rZW4pIGVxICJwZXJzaXN0ZW50ZGlyIikgeworICAgICAgICAgICRyZXN1bHQgPSAkcmVzdDsKKyAgICAgICAgfQorICAgICAgICBuZXh0OworICAgIH0KKyAgICBjbG9zZShJKTsKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworIyBVc2FnZTogICAmd2luMzJfcmVnX3JlYWQoImtleSIsICJ2YWx1ZSIpCisjIEV4YW1wbGU6ICZ3aW4zMl9yZWdfcmVhZCgiU09GVFdBUkVcXE5ldC1TTk1QIiwiU05NUFNIQVJFUEFUSCIpOworIyBSZXR1cm5zOiBWYWx1ZSBpZiBmb3VuZCBpbiBIS0NVIG9yIEhDTE0uICBPdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nLgorc3ViIHdpbjMyX3JlZ19yZWFkIHsKKyAgbXkgJHN1Yl9rZXkgPSBzaGlmdDsKKyAgbXkgJHZhbHVlID0gc2hpZnQ7CisKKyAgcmVxdWlyZSBXaW4zMjo6UmVnaXN0cnk7CisgICAKKyAgbXkgKCRoa2V5LCAla2V5X3ZhbHVlcywgJHRlbXAsICRub193YXJuKTsKKyAKKyAgIyBUcnkgSEtDVSBmaXJzdAorICAkbm9fd2FybiA9ICRIS0VZX0NVUlJFTlRfVVNFUjsKKyAgaWYgKCRIS0VZX0NVUlJFTlRfVVNFUi0+T3Blbigkc3ViX2tleSwgJGhrZXkpKQorICB7CisgICAgJGhrZXktPkdldFZhbHVlcyhcJWtleV92YWx1ZXMpOyAgIAorICAgIGZvcmVhY2ggJHRlbXAgKHNvcnQga2V5cyAla2V5X3ZhbHVlcykgeworICAgICAgaWYgKCR0ZW1wIGVxICR2YWx1ZSkgeworICAgICAgICByZXR1cm4gJGtleV92YWx1ZXN7JHRlbXB9WzJdOworICAgICAgfQorICAgIH0KKyAgICAkaGtleS0+Q2xvc2UoKTsgCisgIH0KKworICAjIFRyeSBIS0xNIHNlY29uZAorICAkbm9fd2FybiA9ICRIS0VZX0xPQ0FMX01BQ0hJTkU7CisgIGlmICgkSEtFWV9MT0NBTF9NQUNISU5FLT5PcGVuKCRzdWJfa2V5LCAkaGtleSkpCisgIHsKKyAgICAkaGtleS0+R2V0VmFsdWVzKFwla2V5X3ZhbHVlcyk7CisgICAgZm9yZWFjaCAkdGVtcCAoc29ydCBrZXlzICVrZXlfdmFsdWVzKSB7CisgICAgICBpZiAoJHRlbXAgZXEgJHZhbHVlKSB7CisgICAgICAgIHJldHVybiAka2V5X3ZhbHVlc3skdGVtcH1bMl07CisgICAgICB9CisgICAgfQorICAgICRoa2V5LT5DbG9zZSgpOyAKKyAgfQorICByZXR1cm4gIiI7Cit9CisKKyMgVXNhZ2U6ICAgJm15X2dldGVudigia2V5IikKKyMgRXhhbXBsZTogJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpOworIyBSZXR1cm5zOiBVbml4OiAgRW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgKHVuZGVmIGlmIG5vdCBkZWZpbmVkKQorIyAgICAgICAgICBXaW4zMjogSEtDVVxTb2Z0d2FyZVxOZXQtU05NUFwoa2V5KSBvcgorIyAgICAgICAgICBXaW4zMjogSEtMTVxTb2Z0d2FyZVxOZXQtU05NUFwoa2V5KSBvcgorIyAgICAgICAgICBXaW4zMjogRW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgKHVuZGVmIGlmIG5vdCBkZWZpbmVkKQorc3ViIG15X2dldGVudiB7CisgIG15ICRrZXkgPSBzaGlmdDsKKyAgCisgICMgVW5peAorICBpZiAoJF5PIG5lICdNU1dpbjMyJykgeworICAgIHJldHVybiAkRU5WeyRrZXl9OworICB9CisgICMgV2luZG93cworICBlbHNlIHsKKyAgICBteSAkdGVtcCA9ICZ3aW4zMl9yZWdfcmVhZCgiU09GVFdBUkVcXE5ldC1TTk1QIiwiJGtleSIpOworICAgIGlmICgkdGVtcCBuZSAiIikgeworICAgICAgcmV0dXJuICR0ZW1wOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJldHVybiAkRU5WeyRrZXl9OworICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyN2Q0OThhLi5lZDE4MTRmCi0tLSBhL2x0bWFpbi5zaAorKysgYi9sdG1haW4uc2gKQEAgLTEsNTIgKzEsODkgQEAKLSMgbHRtYWluLnNoIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIE5PVEU6IENoYW5naW5nIHRoaXMgZmlsZSB3aWxsIG5vdCBhZmZlY3QgYW55dGhpbmcgdW50aWwgeW91IHJlcnVuIGNvbmZpZ3VyZS4KLSMKKworIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40CisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAotIyAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KICMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisjICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKKyMgICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAorIyAgICAgICAtLW5vLXZlcmJvc2UgICAgICAgICBkb24ndCBwcmludCB0aGUgZXh0cmEgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisjICAgLWgsIC0taGVscCwgLS1oZWxwLWFsbCAgIHByaW50IHNob3J0LCBsb25nLCBvciBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UKKyMKKyMgTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgIGNsZWFuICAgICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisjICAgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgICBleGVjdXRlICAgICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyMgICAgICAgICBmaW5pc2ggICAgICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworIyAgICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICAgIGxpbmsgICAgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyMgICAgICAgICB1bmluc3RhbGwgICAgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKyMKKyMgTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorIyBgLS1tb2RlPU1PREUnIG1heSBiZSBhYmJyZXZpYXRlZCBhcyBgTU9ERScgb3IgYSB1bmlxdWUgYWJicmV2aWF0aW9uIG9mIHRoYXQuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKyMgICAgICAgICBzaGVsbDoJCSRTSEVMTAorIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCisjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNAorIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisjIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCisjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgogCi1iYXNlbmFtZT0icyxeLiovLCxnIgotCi0jIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKLSMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCi0jIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAotIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCi0jIGZ1bmN0aW9uLgotcHJvZ3BhdGg9IiQwIgotCi0jIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKLXByb2duYW1lPWBlY2hvICIkcHJvZ3BhdGgiIHwgJFNFRCAkYmFzZW5hbWVgCi1tb2RlbmFtZT0iJHByb2duYW1lIgotCi0jIEdsb2JhbCB2YXJpYWJsZXM6Ci1FWElUX1NVQ0NFU1M9MAotRVhJVF9GQUlMVVJFPTEKLQotUFJPR1JBTT1sdG1haW4uc2gKK1BST0dSQU09bGlidG9vbAogUEFDS0FHRT1saWJ0b29sCi1WRVJTSU9OPTEuNS4yNgotVElNRVNUQU1QPSIgKDEuMTIyMC4yLjQ5MiAyMDA4LzAxLzMwIDA2OjQwOjU2KSIKK1ZFUlNJT049Mi40CitUSU1FU1RBTVA9IiIKK3BhY2thZ2VfcmV2aXNpb249MS4zMjkzCiAKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUgKHRha2VuIGZyb20gQXV0b2NvbmY6X0FTX0JPVVJORV9DT01QQVRJQkxFKS4KKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgpAQCAtNjAsMTA0ICs5Nyw0NjIgQEAKIEJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CiBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCiAKLSMgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgd29ya2luZyAkZWNoby4KLWlmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KLSAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCi0gIHNoaWZ0Ci1lbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKLSAgOgotZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQotICA6Ci1lbHNlCi0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJGVjaG8gd2lsbCB3b3JrLgotICBleGVjICRTSEVMTCAiJHByb2dwYXRoIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLWZpCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KIAotaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KLSAgc2hpZnQKLSAgY2F0IDw8RU9GCi0kKgotRU9GCi0gIGV4aXQgJEVYSVRfU1VDQ0VTUwotZmkKLQotZGVmYXVsdF9tb2RlPQotaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgotbWtkaXI9Im1rZGlyIgotbXY9Im12IC1mIgotcm09InJtIC1mIgotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXGBcXCIkXFxcXF1cKS9cXFwxL2cnCi0jIHRlc3QgRUJDRElDIG9yIEFTQ0lJCi1jYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCi0gQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KLSAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCi0gIFNQMk5MPSd0ciBcMDQwIFwwMTInCi0gIE5MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKLSAgOzsKLSAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KLSAgU1AyTkw9J3RyIFwxMDAgXG4nCi0gIE5MMlNQPSd0ciBcclxuIFwxMDBcMTAwJwotICA7OwotZXNhYwotCi0jIE5MUyBudWlzYW5jZXMuCi0jIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgotIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKLSMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KLSMgV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCi1sdF9lbnY9CisjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorbHRfdXNlcl9sb2NhbGU9CitsdF9zYWZlX2xvY2FsZT0KIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwogZG8KICAgZXZhbCAiaWYgdGVzdCBcIlwkeyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCi0JICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCi0JICBsdF9lbnY9XCIkbHRfdmFyPVwkJGx0X3ZhciBcJGx0X2VudlwiCi0JICAkbHRfdmFyPUMKKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCiAJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKIAlmaSIKIGRvbmUKK0xDX0FMTD1DCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UgTENfQUxMCiAKLWlmIHRlc3QgLW4gIiRsdF9lbnYiOyB0aGVuCi0gIGx0X2Vudj0iZW52ICRsdF9lbnYiCi1maQorJGx0X3Vuc2V0IENEUEFUSAorCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKworCis6ICR7Q1A9ImNwIC1mIn0KK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorOiAke0VHUkVQPSJncmVwIC1FIn0KKzogJHtGR1JFUD0iZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iZ3JlcCJ9Cis6ICR7TE5fUz0ibG4gLXMifQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NFRD0ic2VkIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKIAogIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKIGx0X25sPScKICcKIElGUz0iIAkkbHRfbmwiCiAKLWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgotICAkZWNobyAiJG1vZGVuYW1lOiBub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IiAxPiYyCi0gICRlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgotICBleGl0ICRFWElUX0ZBSUxVUkUKLWZpCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKIAotIyBHbG9iYWwgdmFyaWFibGVzLgotbW9kZT0kZGVmYXVsdF9tb2RlCi1ub25vcHQ9Ci1wcmV2PQotcHJldm9wdD0KLXJ1bj0KLXNob3c9IiRlY2hvIgotc2hvd19oZWxwPQotZXhlY3V0ZV9kbGZpbGVzPQotZHVwbGljYXRlX2RlcHM9bm8KLXByZXNlcnZlX2FyZ3M9Ci1sbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCi1vMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCi1leHRyYWN0ZWRfYXJjaGl2ZXM9Ci1leHRyYWN0ZWRfc2VyaWFsPTAKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCit9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zOgotIyBUaGlzIHNlZW1zIHRvIGJlIHRoZSBiZXN0IHBsYWNlIGZvciB0aGVtCisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICAgY2FzZSAkezJ9IGluCisgICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICAgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCitwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKK3BhdGhjZHI9J3MsXi9bXi9dKiwsJworcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzQC9cLi9AL0BnCisJCXQgZG90c2wKKwkJcywvXC4kLC8sJworY29sbGFwc2VzbGFzaGVzPSdzQC9cezEsXH1AL0BnJworZmluYWxzbGFzaD0ncywvKiQsLywnCisKKyMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQorICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KKyAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICIiKQorICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICByZXR1cm4KKyAgICA7OworICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQorICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgorICAgIC8vLyopCisgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgLy8qKQorICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCisgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCisgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCisgICAgOzsKKyAgICAvKikKKyAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgICopCisgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKKyAgICA7OworICBlc2FjCisgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQorICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcmVtb3ZlZG90cGFydHMiIC1lICIkY29sbGFwc2VzbGFzaGVzIiAtZSAiJGZpbmFsc2xhc2giYAorICB3aGlsZSA6OyBkbworICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgaWYgdGVzdCAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiID0gLyA7IHRoZW4KKyAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjYXIiYAorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2RyImAKKyAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAiIikKKyAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgorICAgICAgOzsKKyAgICAgIC4uKQorICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICA7OworICAgICAgKikKKyAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0LyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKK30KKworIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgorIyBnZW5lcmF0ZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUiwgd2l0aCBhIHRyYWlsaW5nCisjIHNsYXNoIGlmIG5vbi1lbXB0eSwgc3VpdGFibGUgZm9yIGltbWVkaWF0ZWx5IGFwcGVuZGluZyBhIGZpbGVuYW1lCisjIHdpdGhvdXQgbmVlZGluZyB0byBhcHBlbmQgYSBzZXBhcmF0b3IuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKworICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICB3aGlsZSA6OyBkbworICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKKyAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQorICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAorICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgorICAgICAgICBmaQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0ke2Z1bmNfZGlybmFtZV9yZXN1bHR9CisgICAgICAgIGlmIHRlc3QgIngkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiID0geCA7IHRoZW4KKyAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgaWYgdGVzdCAieCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiICE9IHggOyB0aGVuCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0ke2Z1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHR9LyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fQorICBmaQorCisgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuIGVtcHR5IHN0cmluZywKKyAgIyBlbHNlIHJlbGF0aXZlIHBhdGggZW5kaW5nIHdpdGggYSBzbGFzaDsgZWl0aGVyIHdheSwgdGFyZ2V0CisgICMgZmlsZSBuYW1lIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZC4KKyAgaWYgdGVzdCAhIC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8iCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZpCit9CisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworICAqKQorICAgICBzYXZlX0lGUz0iJElGUyIKKyAgICAgSUZTPToKKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQorIyBzdHJpbmcgbGl0ZXJhbGx5Lgorc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0kKiIKK30KKworIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorCisgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCisgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisgICAgOgorfQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisjIGZ1bmNfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKK30KKworIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKwogCiAjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCiAjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCkBAIC0xNjcsNyArNTYyLDcgQEAKIHsKICAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCiAKLSAgICBpZiB0ZXN0ICIkcnVuIiA9ICI6IjsgdGhlbgorICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KICAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCiAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgogICAgIGVsc2UKQEAgLTE3Niw3MiArNTcxLDgwMCBAQAogICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKIAogICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgotCSMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQotCW15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKIAotCXNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKLQl1bWFzayAwMDc3Ci0JJG1rZGlyICIkbXlfdG1wZGlyIgotCXVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgorICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKICAgICAgIGZpCiAKICAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQotICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgewotICAgICAgICAkZWNobyAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciIDE+JjIKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIH0KKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCiAgICAgZmkKIAotICAgICRlY2hvICJYJG15X3RtcGRpciIgfCAkWHNlZAorICAgICRFQ0hPICIkbXlfdG1wZGlyIgogfQogCiAKLSMgZnVuY193aW4zMl9saWJpZCBhcmcKLSMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJwotIwotIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCi0jIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAotIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCi1mdW5jX3dpbjMyX2xpYmlkICgpCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCiB7Ci0gIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCi0gIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCi0gIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KLSAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0Ci0gICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgotICAgIDs7Ci0gICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKLSAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8IFwKLSAgICAgICRFR1JFUCAtZSAnZmlsZSBmb3JtYXQgcGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JyA+L2Rldi9udWxsIDsgdGhlbgotICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwgXAotCSRTRUQgLW4gLWUgJzEsMTAwewotCQkvIEkgL3sKLQkJCXMsLiosaW1wb3J0LAotCQkJcAotCQkJcQotCQkJfQotCQl9J2AKLSAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCi0gICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7Ci0gICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICAqRExMKikKLSAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgotICAgIDs7Ci0gICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgotICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KLSAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCi0gICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgotICAgICAgOzsKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKICAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisjIGZ1bmNfdHJfc2gKKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICBjYXNlICQxIGluCisgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKyAgICA7OworICAqICkKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQogICAgIDs7CiAgIGVzYWMKLSAgJGVjaG8gJHdpbjMyX2xpYmlkX3R5cGUKIH0KIAogCisjIGZ1bmNfdmVyc2lvbgorIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3ZlcnNpb24gKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisJOm1vcmUKKwkvXC4vIXsKKwkgIE4KKwkgIHMvXG4jIC8gLworCSAgYiBtb3JlCisJfQorCTpnbworCS9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKyAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLworICAgICAgICBwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAgZXhpdCAkPworfQorCisjIGZ1bmNfdXNhZ2UKKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisJcAorICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICBlY2hvCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwIFtOT0VYSVRdCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LAorIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorZnVuY19oZWxwICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKwk6cHJpbnQKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYChhdXRvbWFrZSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKwlkCisgICAgIH0KKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorICAgICAvXiMgR2VuZXJhbCBoZWxwIHVzaW5nL2IgcHJpbnQKKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICBleGl0ICRyZXQKKyAgICBmaQorfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRvcHRfZGVidWcKKworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKKworIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQoreworICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCisgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCit9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKK3sKKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKK30gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCitleGl0X2NtZD06CisKKworCisKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KK25vbm9wdD0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCit9ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKyMgYnkgYSBzcGFjZS4KK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQoreworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAorfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCit9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCit9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgIGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZmkKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgdGFnbmFtZT0iJDEiCisKKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKworICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgIDs7CisgIGVzYWMKKworICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgIENDKSA7OworICAgICopCisgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCWV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CitjYXNlICQxIGluCitjbGVhbnxjbGVhfGNsZXxjbCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICA7OworY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2ZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICA7OworaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgIDs7CitsaW5rfGxpbnxsaXxsKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK3VuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXNhYworCisKKworIyBPcHRpb24gZGVmYXVsdHM6CitvcHRfZGVidWc9Ogorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9jb25maWc9ZmFsc2UKK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorb3B0X2ZlYXR1cmVzPWZhbHNlCitvcHRfZmluaXNoPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X2hlbHBfYWxsPWZhbHNlCitvcHRfc2lsZW50PToKK29wdF92ZXJib3NlPToKK29wdF9zaWxlbnQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCisKKworIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCisjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KK3sKKyAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgIG9wdD0iJDEiCisgICAgc2hpZnQKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJJG9wdF9kZWJ1ZworCQkJOzsKKyAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKwkJCW9wdF9kcnlfcnVuPToKKwkJCTs7CisgICAgICAtLWNvbmZpZykKKwkJCW9wdF9jb25maWc9OgorZnVuY19jb25maWcKKwkJCTs7CisgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorfSRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKyAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorCQkJOzsKKyAgICAgIC0tZmVhdHVyZXMpCisJCQlvcHRfZmVhdHVyZXM9OgorZnVuY19mZWF0dXJlcworCQkJOzsKKyAgICAgIC0tZmluaXNoKQorCQkJb3B0X2ZpbmlzaD06CitzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisJCQk7OworICAgICAgLS1oZWxwKQorCQkJb3B0X2hlbHA9OgorCQkJOzsKKyAgICAgIC0taGVscC1hbGwpCisJCQlvcHRfaGVscF9hbGw9Ogorb3B0X2hlbHA9JzogaGVscC1hbGwnCisJCQk7OworICAgICAgLS1tb2RlKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X21vZGU9IiRvcHRhcmciCitjYXNlICRvcHRhcmcgaW4KKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKworICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKyAgICAgZXhpdF9jbWQ9ZXhpdAorICAgICBicmVhaworICAgICA7OworZXNhYworCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorCQkJb3B0X3NpbGVudD1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1uby12ZXJib3NlKQorCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisJCQlvcHRfc2lsZW50PToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorCQkJOzsKKyAgICAgIC0tdmVyYm9zZXwtdikKKwkJCW9wdF92ZXJib3NlPToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0Igorb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKyAgICAgIC0tdGFnKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X3RhZz0iJG9wdGFyZyIKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCitmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQk7OworICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLS0qPSopCisJCQlmdW5jX3NwbGl0X2xvbmdfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorICAgICAgLVw/KnwtaCp8LW4qfC12KikKKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLSkJCWJyZWFrCQkJCQk7OworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKyAgICAgICopCQlzZXQgZHVtbXkgIiRvcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgVmFsaWRhdGUgb3B0aW9uczoKKworICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKyAgICBub25vcHQ9IiRvcHQiCisgICAgc2hpZnQKKyAgZmkKKworICAjIHByZXNlcnZlIC0tZGVidWcKKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgOzsKKyAgICAqKQorICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICA7OworICBlc2FjCisKKyAgJG9wdF9oZWxwIHx8IHsKKyAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICBmaQorCisgICAgIyBEYXJ3aW4gc3Vja3MKKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCisgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgfQorCisKKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAorICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorfQorCisKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgZnVuY19sYWxpYl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2xhbGliX3AgKCkKK3sKKyAgICB0ZXN0IC1mICIkMSIgJiYKKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisgICAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgZnVuY19sYWxpYl9wICIkMSIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkMSBpbgorICAgICovKiB8ICpcXCopCS4gIiQxIiA7OworICAgICopCQkuICIuLyQxIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKK3sKKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisgIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgorICA9KikKKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisjIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAorIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgorZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKK3sKKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisgID8qOiIkbHRfc3lzcm9vdCIqKQorICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgOzsKKyAgKikKKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKwogIyBmdW5jX2luZmVyX3RhZyBhcmcKICMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAogIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KQEAgLTI1MCwzOSArMTM3MywzNiBAQAogIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKIGZ1bmNfaW5mZXJfdGFnICgpCiB7CisgICAgJG9wdF9kZWJ1ZwogICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCiAgICAgICBDQ19xdW90ZWQ9CiAgICAgICBmb3IgYXJnIGluICRDQzsgZG8KLQljYXNlICRhcmcgaW4KLQkgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgYXJnPSJcIiRhcmdcIiIKLQkgIDs7Ci0JZXNhYwotCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkYXJnIgorCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCiAgICAgICBkb25lCisgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKICAgICAgIGNhc2UgJEAgaW4KICAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCiAgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KLSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRlY2hvICRDQ2AgIiogfCAiYCRlY2hvICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJGVjaG8gJENDX3F1b3RlZGAgIiogfCAiYCRlY2hvICRDQ19xdW90ZWRgICIqKSA7OworICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OwogICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKICAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KICAgICAgICopCiAJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbwotCSAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCiAJICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCiAJICAgIENDX3F1b3RlZD0KIAkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCi0JICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLQkgICAgY2FzZSAkYXJnIGluCi0JICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICAgICAgYXJnPSJcIiRhcmdcIiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkYXJnIgotCSAgZG9uZQorCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorCSAgICBkb25lCisJICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKwkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCiAJICAgIGNhc2UgIiRAICIgaW4KLQkgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkZWNobyAkQ0NgICIqIHwgImAkZWNobyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRlY2hvICRDQ19xdW90ZWRgICIqIHwgImAkZWNobyAkQ0NfcXVvdGVkYCAiKikKKwkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorCSAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopCiAJICAgICAgIyBUaGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZSBjb21tYW5kIG1hdGNoZXMKIAkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgogCSAgICAgICMgQXNzdW1lIHRoaXMgaXMgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uIHdlIHdhbnQuCkBAIC0yOTYsMTEgKzE0MTYsMTAgQEAKIAkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCiAJIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCiAJaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCi0JICAkZWNobyAiJG1vZGVuYW1lOiBzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotIyAgICAgICAgZWxzZQotIyAgICAgICAgICAkZWNobyAiJG1vZGVuYW1lOiB1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKIAlmaQogCTs7CiAgICAgICBlc2FjCkBAIC0zMDgsMzU0ICsxNDI3LDUyOCBAQAogfQogCiAKLSMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgotZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKIHsKLSAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAotICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKLQotICAgICRzaG93ICIoY2QgJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4ICRmX2V4X2FuX2FyX29sZGxpYikiCi0gICAgJHJ1biBldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcJGZfZXhfYW5fYXJfb2xkbGliKSIgfHwgZXhpdCAkPwotICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCi0gICAgIDoKLSAgICBlbHNlCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiBFUlJPUjogb2JqZWN0IG5hbWUgY29uZmxpY3RzOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotfQotCi0jIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgotZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCi17Ci0gICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0Ci0gICAgbXlfb2xkbGlicz0kezErIiRAIn0KLSAgICBteV9vbGRvYmpzPSIiCi0gICAgbXlfeGxpYj0iIgotICAgIG15X3hhYnM9IiIKLSAgICBteV94ZGlyPSIiCi0gICAgbXlfc3RhdHVzPSIiCi0KLSAgICAkc2hvdyAiJHtybX1yICRteV9nZW50b3AiCi0gICAgJHJ1biAke3JtfXIgIiRteV9nZW50b3AiCi0gICAgJHNob3cgIiRta2RpciAkbXlfZ2VudG9wIgotICAgICRydW4gJG1rZGlyICIkbXlfZ2VudG9wIgotICAgIG15X3N0YXR1cz0kPwotICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG15X2dlbnRvcCI7IHRoZW4KLSAgICAgIGV4aXQgJG15X3N0YXR1cwotICAgIGZpCi0KLSAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KLSAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KLSAgICAgIGNhc2UgJG15X3hsaWIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OwotCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OwotICAgICAgZXNhYwotICAgICAgbXlfeGxpYj1gJGVjaG8gIlgkbXlfeGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotICAgICAgbXlfeGxpYl91PSRteV94bGliCi0gICAgICB3aGlsZSA6OyBkbwotICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCi0JKiIgJG15X3hsaWJfdSAiKikKLQkgIGV4dHJhY3RlZF9zZXJpYWw9YGV4cHIgJGV4dHJhY3RlZF9zZXJpYWwgKyAxYAotCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKLQkqKSBicmVhayA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgotICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgotCi0gICAgICAkc2hvdyAiJHtybX1yICRteV94ZGlyIgotICAgICAgJHJ1biAke3JtfXIgIiRteV94ZGlyIgotICAgICAgJHNob3cgIiRta2RpciAkbXlfeGRpciIKLSAgICAgICRydW4gJG1rZGlyICIkbXlfeGRpciIKLSAgICAgIGV4aXRfc3RhdHVzPSQ/Ci0gICAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG15X3hkaXIiOyB0aGVuCi0JZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgIGZpCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAqLWRhcndpbiopCi0JJHNob3cgIkV4dHJhY3RpbmcgJG15X3hhYnMiCi0JIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCi0JaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAotCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPwotCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKLQkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKLQkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YCRlY2hvICJYJGRhcndpbl9hcmNoaXZlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICBkYXJ3aW5fYXJjaGVzPWBsaXBvIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEVHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGxgCi0JICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4gCi0JICAgIGRhcndpbl9hcmNoZXM9YGVjaG8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAotCSAgICBkYXJ3aW5fYXJjaD0KLQkgICAgJHNob3cgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgotCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KLQkgICAgICBta2RpciAtcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKLQkgICAgICBsaXBvIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKLQkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKLQkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgotCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKLQkgICAgICAkcm0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKLQkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCi0gICAgICAjIyBPa2F5IG5vdyB3ZSBoYXZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQotCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnR8IHhhcmdzIGJhc2VuYW1lIHwgc29ydCAtdSB8ICROTDJTUGAKLQkgICAgZGFyd2luX2ZpbGU9Ci0JICAgIGRhcndpbl9maWxlcz0KLQkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCi0JICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCi0JICAgICAgbGlwbyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcwotCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAotCSAgICAke3JtfXIgdW5mYXQtJCQKLQkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCi0JICBlbHNlCi0JICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgotIAkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCi0JICBmaSAjICRkYXJ3aW5fYXJjaGVzCi0JZmkgIyAkcnVuCi0JOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgotICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKLSAgICBkb25lCi0gICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCi19Ci0jIEVuZCBvZiBTaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9ucwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIERhcndpbiBzdWNrcwotZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKLQotZGlzYWJsZV9saWJzPW5vCi0KLSMgUGFyc2Ugb3VyIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuCi13aGlsZSB0ZXN0ICIkIyIgLWd0IDAKLWRvCi0gIGFyZz0iJDEiCi0gIHNoaWZ0Ci0KLSAgY2FzZSAkYXJnIGluCi0gIC0qPSopIG9wdGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKLSAgKikgb3B0YXJnPSA7OwotICBlc2FjCi0KLSAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCi0gIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotICAgIGNhc2UgJHByZXYgaW4KLSAgICBleGVjdXRlX2RsZmlsZXMpCi0gICAgICBleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJGFyZyIKLSAgICAgIDs7Ci0gICAgdGFnKQotICAgICAgdGFnbmFtZT0iJGFyZyIKLSAgICAgIHByZXNlcnZlX2FyZ3M9IiR7cHJlc2VydmVfYXJnc309JGFyZyIKLQotICAgICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICAqWyEtX0EtWmEtejAtOSwvXSopCi0JJGVjaG8gIiRwcm9nbmFtZTogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiIDE+JjIKLQlleGl0ICRFWElUX0ZBSUxVUkUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDQykKLQkjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3csIGl0J3MgdGhlcmUsIGJ1dAotCSMgbm90IHNwZWNpYWxseSBtYXJrZWQuCi0JOzsKLSAgICAgICopCi0JaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCi0JICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKLQkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCi0JICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvcCcgPCAkcHJvZ3BhdGhgIgotCWVsc2UKLQkgICRlY2hvICIkcHJvZ25hbWU6IGlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIiAxPiYyCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAiJHByZXY9XCRhcmciCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIHByZXY9Ci0gICAgcHJldm9wdD0KLSAgICBjb250aW51ZQotICBmaQotCi0gICMgSGF2ZSB3ZSBzZWVuIGEgbm9uLW9wdGlvbmFsIGFyZ3VtZW50IHlldD8KLSAgY2FzZSAkYXJnIGluCi0gIC0taGVscCkKLSAgICBzaG93X2hlbHA9eWVzCi0gICAgOzsKLQotICAtLXZlcnNpb24pCi0gICAgZWNobyAiXAotJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04kVElNRVNUQU1QCi0KLUNvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgotICAgIGV4aXQgJD8KLSAgICA7OwotCi0gIC0tY29uZmlnKQotICAgICR7U0VEfSAtZSAnMSwvXiMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHL2QnIC1lICcvXiMgIyMjIEVORCBMSUJUT09MIENPTkZJRy8sJGQnICRwcm9ncGF0aAotICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCi0gICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCi0gICAgICAke1NFRH0gLW4gLWUgIi9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkL3AiIDwgIiRwcm9ncGF0aCIKLSAgICBkb25lCi0gICAgZXhpdCAkPwotICAgIDs7Ci0KLSAgLS1kZWJ1ZykKLSAgICAkZWNobyAiJHByb2duYW1lOiBlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgotICAgIHNldCAteAotICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRhcmciCi0gICAgOzsKLQotICAtLWRyeS1ydW4gfCAtbikKLSAgICBydW49OgotICAgIDs7Ci0KLSAgLS1mZWF0dXJlcykKLSAgICAkZWNobyAiaG9zdDogJGhvc3QiCisgICAgd3JpdGVfbGlib2JqPSR7MX0KICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotICAgICAgJGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJwogICAgIGVsc2UKLSAgICAgICRlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgICB3cml0ZV9sb2JqPW5vbmUKICAgICBmaQorCiAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgJGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgICAgd3JpdGVfb2xkb2JqPVwnJHszfVwnCiAgICAgZWxzZQotICAgICAgJGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCiAgICAgZmkKLSAgICBleGl0ICQ/Ci0gICAgOzsKIAotICAtLWZpbmlzaCkgbW9kZT0iZmluaXNoIiA7OworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgogCi0gIC0tbW9kZSkgcHJldm9wdD0iLS1tb2RlIiBwcmV2PW1vZGUgOzsKLSAgLS1tb2RlPSopIG1vZGU9IiRvcHRhcmciIDs7CisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCiAKLSAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykgZHVwbGljYXRlX2RlcHM9InllcyIgOzsKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKIAotICAtLXF1aWV0IHwgLS1zaWxlbnQpCi0gICAgc2hvdz06Ci0gICAgcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJGFyZyIKLSAgICA7OworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQogCi0gIC0tdGFnKQotICAgIHByZXZvcHQ9Ii0tdGFnIgotICAgIHByZXY9dGFnCi0gICAgcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgLS10YWciCi0gICAgOzsKLSAgLS10YWc9KikKLSAgICBzZXQgdGFnICIkb3B0YXJnIiAkezErIiRAIn0KLSAgICBzaGlmdAotICAgIHByZXY9dGFnCi0gICAgcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgLS10YWciCi0gICAgOzsKIAotICAtZGxvcGVuKQotICAgIHByZXZvcHQ9Ii1kbG9wZW4iCi0gICAgcHJldj1leGVjdXRlX2RsZmlsZXMKLSAgICA7OworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0gIC0qKQotICAgICRlY2hvICIkbW9kZW5hbWU6IHVucmVjb2duaXplZCBvcHRpb24gXGAkYXJnJyIgMT4mMgotICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIDs7CisjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCisjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCisjIGluICRidWlsZCdzICRQQVRILgorIworIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCitmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCisgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgorICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKKyAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgIGVsc2UKKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQorICAgIGZpCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgogCi0gICopCi0gICAgbm9ub3B0PSIkYXJnIgotICAgIGJyZWFrCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKKyMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQorIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCisjICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgorIworIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KKyMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCisjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KK2Z1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCisgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIG9sZElGUz0kSUZTCisgICAgSUZTPToKKyAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbworICAgICAgSUZTPSRvbGRJRlMKKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCisgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSRvbGRJRlMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgorIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCisjIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQorIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKKyMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKKyMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAorIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQorIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KKyMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgorIworIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCisjIGJlIGNvbnZlcnRlZC4KKyMKKyMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKKyMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCitmdW5jX2N5Z3BhdGggKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQorICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmaQorICBlbHNlCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCisgIGZpCit9CisjZW5kOiBmdW5jX2N5Z3BhdGgKKworCisjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCit9CisjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCisjIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCitmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjazoKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICBcYCQzJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCisgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorICAgIGVsc2UKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCisgICAgZmkKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKKyMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKKyMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgorZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCit7CisgICRvcHRfZGVidWcKKyAgY2FzZSAkNCBpbgorICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgIDs7CiAgIGVzYWMKLWRvbmUKKyAgY2FzZSAkNCBpbgorICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCisgICAgOzsKKyAgZXNhYworfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCiAKLWlmIHRlc3QgLW4gIiRwcmV2b3B0IjsgdGhlbgotICAkZWNobyAiJG1vZGVuYW1lOiBvcHRpb24gXGAkcHJldm9wdCcgcmVxdWlyZXMgYW4gYXJndW1lbnQiIDE+JjIKLSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gIGV4aXQgJEVYSVRfRkFJTFVSRQotZmkKIAotY2FzZSAkZGlzYWJsZV9saWJzIGluCi1ubykgCi0gIDs7Ci1zaGFyZWQpCi0gIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICBidWlsZF9vbGRfbGlicz15ZXMKLSAgOzsKLXN0YXRpYykKLSAgYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCi0gIDs7Ci1lc2FjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogCi0jIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKLSMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZwotIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgotZXhlY19jbWQ9CiAKLWlmIHRlc3QgLXogIiRzaG93X2hlbHAiOyB0aGVuCisjIGZ1bmNfdG9faG9zdF9maWxlIEFSRworIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9maWxlICgpCit7CisgICRvcHRfZGVidWcKKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorfQorIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKIAotICAjIEluZmVyIHRoZSBvcGVyYXRpb24gbW9kZS4KLSAgaWYgdGVzdCAteiAiJG1vZGUiOyB0aGVuCi0gICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbmZlcnJpbmcgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIGRlcHJlY2F0ZWQuIiAxPiYyCi0gICAgJGVjaG8gIioqKiBGdXR1cmUgdmVyc2lvbnMgb2YgTGlidG9vbCB3aWxsIHJlcXVpcmUgLS1tb2RlPU1PREUgYmUgc3BlY2lmaWVkLiIgMT4mMgotICAgIGNhc2UgJG5vbm9wdCBpbgotICAgICpjYyB8IGNjKiB8ICorKyB8IGdjYyogfCAqLWdjYyogfCBnKysqIHwgeGxjKikKLSAgICAgIG1vZGU9bGluawotICAgICAgZm9yIGFyZwotICAgICAgZG8KLQljYXNlICRhcmcgaW4KLQktYykKLQkgICBtb2RlPWNvbXBpbGUKLQkgICBicmVhawotCSAgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgOzsKLSAgICAqZGIgfCAqZGJ4IHwgKnN0cmFjZSB8ICp0cnVzcykKLSAgICAgIG1vZGU9ZXhlY3V0ZQotICAgICAgOzsKLSAgICAqaW5zdGFsbCp8Y3B8bXYpCi0gICAgICBtb2RlPWluc3RhbGwKLSAgICAgIDs7Ci0gICAgKnJtKQotICAgICAgbW9kZT11bmluc3RhbGwKKworIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorZnVuY190b190b29sX2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICwkMiwgaW4KKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQogICAgICAgOzsKICAgICAqKQotICAgICAgIyBJZiB3ZSBoYXZlIG5vIG1vZGUsIGJ1dCBkbGZpbGVzIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGRvIGV4ZWN1dGUgbW9kZS4KLSAgICAgIHRlc3QgLW4gIiRleGVjdXRlX2RsZmlsZXMiICYmIG1vZGU9ZXhlY3V0ZQotCi0gICAgICAjIEp1c3QgdXNlIHRoZSBkZWZhdWx0IG9wZXJhdGlvbiBtb2RlLgotICAgICAgaWYgdGVzdCAteiAiJG1vZGUiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJG5vbm9wdCI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBpbmZlciBvcGVyYXRpb24gbW9kZSBmcm9tIFxgJG5vbm9wdCciIDE+JjIKLQllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgaW5mZXIgb3BlcmF0aW9uIG1vZGUgd2l0aG91dCBNT0RFLUFSR1MiIDE+JjIKLQlmaQotICAgICAgZmkKKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CiAgICAgICA7OwotICAgIGVzYWMKKyAgZXNhYworfQorIyBlbmQgZnVuY190b190b29sX2ZpbGUKKworCisjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgogICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKIAotICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgotICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgotICAgICRlY2hvICIkbW9kZW5hbWU6IHVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIgMT4mMgotICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCisjIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCisgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKICAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKIAotICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCi0gIGdlbmVyaWNfaGVscD0iJGhlbHAiCi0gIGhlbHA9IlRyeSBcYCRtb2RlbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCiAKLSAgIyBUaGVzZSBtb2RlcyBhcmUgaW4gb3JkZXIgb2YgZXhlY3V0aW9uIGZyZXF1ZW5jeSBzbyB0aGF0IHRoZXkgcnVuIHF1aWNrbHkuCi0gIGNhc2UgJG1vZGUgaW4KLSAgIyBsaWJ0b29sIGNvbXBpbGUgbW9kZQotICBjb21waWxlKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGNvbXBpbGUiCisjIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAorIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKyMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKKyMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0CisjIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KKyMKKyMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKKyMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQorIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCisjIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCisjIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAorIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyB3aWxsIGJyZWFrLgorCisKKyMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCisjIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCit0b19ob3N0X3BhdGhfY21kPQorZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCisgICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorICBmaQorfQorCisKKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRoICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgorfQorIyBlbmQgZnVuY190b19ob3N0X3BhdGgKKworCisjIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCisjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKyMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisKKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJG9wdF9kZWJ1ZwogICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCiAgICAgYmFzZV9jb21waWxlPQogICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKQEAgLTY2NCw2ICsxOTU3LDcgQEAKICAgICBhcmdfbW9kZT1ub3JtYWwKICAgICBsaWJvYmo9CiAgICAgbGF0ZXI9CisgICAgcGllX2ZsYWc9CiAKICAgICBmb3IgYXJnCiAgICAgZG8KQEAgLTY4NCwxNiArMTk3OCwxOSBAQAogCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KIAljYXNlICRhcmcgaW4KIAktbykKLQkgIGlmIHRlc3QgLW4gIiRsaWJvYmoiIDsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQorCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiCiAJICBhcmdfbW9kZT10YXJnZXQKIAkgIGNvbnRpbnVlCiAJICA7OwogCi0JLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQotCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwogCkBAIC03MDgsMzEgKzIwMDUsMjQgQEAKIAkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCiAKIAktV2MsKikKLQkgIGFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eLVdjLC8vImAKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgbGFzdGFyZz0KIAkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwotIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisJICBmb3IgYXJnIGluICRhcmdzOyBkbwogCSAgICBJRlM9IiRzYXZlX2lmcyIKLQotCSAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCi0JICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5Ci0JICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0JICAgIGNhc2UgJGFyZyBpbgotCSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgICAgIGFyZz0iXCIkYXJnXCIiCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICBsYXN0YXJnPSIkbGFzdGFyZyAkYXJnIgorCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKIAkgIGRvbmUKIAkgIElGUz0iJHNhdmVfaWZzIgotCSAgbGFzdGFyZz1gJGVjaG8gIlgkbGFzdGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAogCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCi0JICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwogCi0JKiApCisJKikKIAkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KIAkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgogCSAgIwpAQCAtNzQ0LDY2ICsyMDM0LDQxIEBACiAgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCiAKICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCi0gICAgICBsYXN0YXJnPWAkZWNobyAiWCRsYXN0YXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQotICAgICAgY2FzZSAkbGFzdGFyZyBpbgotICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLSAgICAgICMgaW4gc2NhbiBzZXRzLCBhbmQgc29tZSBTdW5PUyBrc2ggbWlzdHJlYXQgYmFja3NsYXNoLWVzY2FwaW5nCi0gICAgICAjIGluIHNjYW4gc2V0cyAod29ya2VkIGFyb3VuZCB3aXRoIHZhcmlhYmxlIGV4cGFuc2lvbiksCi0gICAgICAjIGFuZCBmdXJ0aGVybW9yZSBjYW5ub3QgaGFuZGxlICd8JyAnJicgJygnICcpJyBpbiBzY2FuIHNldHMgCi0gICAgICAjIGF0IGFsbCwgc28gd2Ugc3BlY2lmeSB0aGVtIHNlcGFyYXRlbHkuCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQlsYXN0YXJnPSJcIiRsYXN0YXJnXCIiCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGJhc2VfY29tcGlsZSAiJGxhc3RhcmciCiAgICAgZG9uZSAjIGZvciBhcmcKIAogICAgIGNhc2UgJGFyZ19tb2RlIGluCiAgICAgYXJnKQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCiAgICAgICA7OwogICAgIHRhcmdldCkKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCiAgICAgICA7OwogICAgICopCiAgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCi0gICAgICBbIC16ICIkbGlib2JqIiBdICYmIGxpYm9iaj1gJGVjaG8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgfQogICAgICAgOzsKICAgICBlc2FjCiAKICAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgogICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCi0gICAgeGZvcm09J1tjQ0ZTaWZtc29dJwogICAgIGNhc2UgJGxpYm9iaiBpbgotICAgICouYWRhKSB4Zm9ybT1hZGEgOzsKLSAgICAqLmFkYikgeGZvcm09YWRiIDs7Ci0gICAgKi5hZHMpIHhmb3JtPWFkcyA7OwotICAgICouYXNtKSB4Zm9ybT1hc20gOzsKLSAgICAqLmMrKykgeGZvcm09YysrIDs7Ci0gICAgKi5jYykgeGZvcm09Y2MgOzsKLSAgICAqLmlpKSB4Zm9ybT1paSA7OwotICAgICouY2xhc3MpIHhmb3JtPWNsYXNzIDs7Ci0gICAgKi5jcHApIHhmb3JtPWNwcCA7OwotICAgICouY3h4KSB4Zm9ybT1jeHggOzsKLSAgICAqLltmRl1bMDldPykgeGZvcm09W2ZGXVswOV0uIDs7Ci0gICAgKi5mb3IpIHhmb3JtPWZvciA7OwotICAgICouamF2YSkgeGZvcm09amF2YSA7OwotICAgICoub2JqKSB4Zm9ybT1vYmogOzsKLSAgICAqLnN4KSB4Zm9ybT1zeCA7OworICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLm9iaiB8ICouc3ggfCAqLmN1IHwgKi5jdXApCisgICAgICBmdW5jX3hmb3JtICIkbGlib2JqIgorICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAorICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBsaWJvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAicy9cLiR4Zm9ybSQvLmxvLyJgCi0KICAgICBjYXNlICRsaWJvYmogaW4KLSAgICAqLmxvKSBvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAiJGxvMm8iYCA7OworICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OwogICAgICopCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCiAgICAgICA7OwogICAgIGVzYWMKIApAQCAtODExLDcgKzIwNzYsMTUgQEAKIAogICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbwogICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKwogICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KIAlidWlsZF9vbGRfbGlicz15ZXMKIAljb250aW51ZQogCTs7CkBAIC04MjgsMjggKzIxMDEsMTcgQEAKICAgICAgIGVzYWMKICAgICBkb25lCiAKLSAgICBxbGlib2JqPWAkZWNobyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgIGNhc2UgJHFsaWJvYmogaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCXFsaWJvYmo9IlwiJHFsaWJvYmpcIiIgOzsKLSAgICBlc2FjCi0gICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJHFsaWJvYmoiIFwKLQkmJiAkZWNobyAiWCRsaWJvYmoiIHwgZ3JlcCAnW11+I14qe307PD4/IiciJyInIAkmKCl8YCRbXScgXAotCSYmICRlY2hvICIkbW9kZW5hbWU6IGxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCi0gICAgb2JqbmFtZT1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0gICAgeGRpcj1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0gICAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJG9iaiI7IHRoZW4KLSAgICAgIHhkaXI9Ci0gICAgZWxzZQotICAgICAgeGRpcj0keGRpci8KLSAgICBmaQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQogCi0gICAgaWYgdGVzdCAteiAiJGJhc2VfY29tcGlsZSI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKIAogICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCiAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgpAQCAtODU4LDEyICsyMTIwLDkgQEAKICAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKICAgICBmaQogCi0gICAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKLSAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQogICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKICAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgcGljX21vZGU9ZGVmYXVsdAogICAgICAgOzsKICAgICBlc2FjCkBAIC04NzUsMTAgKzIxMzQsOCBAQAogICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCiAgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCiAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgotICAgICAgb3V0cHV0X29iaj1gJGVjaG8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CiAgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKLSAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRvdXRwdXRfb2JqICRsb2NrZmlsZSIKLSAgICAgIHRyYXAgIiRydW4gJHJtICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQogICAgIGVsc2UKICAgICAgIG91dHB1dF9vYmo9CiAgICAgICBuZWVkX2xvY2tzPW5vCkBAIC04ODgsMTMgKzIxNDUsMTMgQEAKICAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAogICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB5ZXM7IHRoZW4KLSAgICAgIHVudGlsICRydW4gbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCi0JJHNob3cgIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCiAJc2xlZXAgMgogICAgICAgZG9uZQogICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgogICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgotCSRlY2hvICJcCisJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CiBgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKIApAQCAtOTA1LDM0ICsyMTYyLDIxIEBACiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgogCi0JJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CiAJZXhpdCAkRVhJVF9GQUlMVVJFCiAgICAgICBmaQotICAgICAgJGVjaG8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKICAgICBmaQogCi0gICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCi0gICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCi0gICAgZmkKLSAgICBxc3JjZmlsZT1gJGVjaG8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgY2FzZSAkcXNyY2ZpbGUgaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgcXNyY2ZpbGU9IlwiJHFzcmNmaWxlXCIiIDs7Ci0gICAgZXNhYworICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CiAKLSAgICAkcnVuICRybSAiJGxpYm9iaiIgIiR7bGlib2JqfVQiCi0KLSAgICAjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAotICAgICMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCi0gICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4gJHtsaWJvYmp9VCA8PEVPRgotIyAkbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKLSMKLSMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQotIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCi0KLSMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KLUVPRgorICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICBzcmNmaWxlPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIAogICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgogICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCkBAIC05NDYsMzIgKzIxOTAsMTkgQEAKIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgISAtZCAiJHt4ZGlyfSRvYmpkaXIiOyB0aGVuCi0JJHNob3cgIiRta2RpciAke3hkaXJ9JG9iamRpciIKLQkkcnVuICRta2RpciAke3hkaXJ9JG9iamRpcgotCWV4aXRfc3RhdHVzPSQ/Ci0JaWYgdGVzdCAiJGV4aXRfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiR7eGRpcn0kb2JqZGlyIjsgdGhlbgotCSAgZXhpdCAkZXhpdF9zdGF0dXMKLQlmaQotICAgICAgZmkKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgogCiAgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KIAkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKLQljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCiAgICAgICBmaQogCi0gICAgICAkcnVuICRybSAiJGxvYmoiICIkb3V0cHV0X29iaiIKLQotICAgICAgJHNob3cgIiRjb21tYW5kIgotICAgICAgaWYgJHJ1biBldmFsICRsdF9lbnYgIiRjb21tYW5kIjsgdGhlbiA6Ci0gICAgICBlbHNlCi0JdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRydW4gJHJtICRyZW1vdmVsaXN0Ci0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCiAKICAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKIAkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KLQkkZWNobyAiXAorCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKIGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAogCkBAIC05ODUsNjUgKzIyMTYsNDIgQEAKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCiAKLQkkcnVuICRybSAkcmVtb3ZlbGlzdAorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKIAlleGl0ICRFWElUX0ZBSUxVUkUKICAgICAgIGZpCiAKICAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCiAgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgotCSRzaG93ICIkbXYgJG91dHB1dF9vYmogJGxvYmoiCi0JaWYgJHJ1biAkbXYgJG91dHB1dF9vYmogJGxvYmo7IHRoZW4gOgotCWVsc2UKLQkgIGVycm9yPSQ/Ci0JICAkcnVuICRybSAkcmVtb3ZlbGlzdAotCSAgZXhpdCAkZXJyb3IKLQlmaQorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJwogICAgICAgZmkKIAotICAgICAgIyBBcHBlbmQgdGhlIG5hbWUgb2YgdGhlIFBJQyBvYmplY3QgdG8gdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUuCi0gICAgICB0ZXN0IC16ICIkcnVuIiAmJiBjYXQgPj4gJHtsaWJvYmp9VCA8PEVPRgotcGljX29iamVjdD0nJG9iamRpci8kb2JqbmFtZScKLQotRU9GCi0KICAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KICAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCi0gICAgICAgIHN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCiAgICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgTm8gUElDIG9iamVjdCBzbyBpbmRpY2F0ZSBpdCBkb2Vzbid0IGV4aXN0IGluIHRoZSBsaWJ0b29sCi0gICAgICAjIG9iamVjdCBmaWxlLgotICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKLXBpY19vYmplY3Q9bm9uZQotCi1FT0YKICAgICBmaQogCiAgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgogICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KICAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCiAJIyBEb24ndCBidWlsZCBQSUMgY29kZQotCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgogICAgICAgZWxzZQogCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgotCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRvYmoiCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCiAgICAgICBmaQogCiAgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KLSAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKLSAgICAgICRydW4gJHJtICIkb2JqIiAiJG91dHB1dF9vYmoiCi0gICAgICAkc2hvdyAiJGNvbW1hbmQiCi0gICAgICBpZiAkcnVuIGV2YWwgJGx0X2VudiAiJGNvbW1hbmQiOyB0aGVuIDoKLSAgICAgIGVsc2UKLQkkcnVuICRybSAkcmVtb3ZlbGlzdAotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbW1hbmQgIiRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCiAKICAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKIAkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KLQkkZWNobyAiXAorCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKIGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAogCkBAIC0xMDU3LDUzICsyMjY1LDI4MjQgQEAKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCiAKLQkkcnVuICRybSAkcmVtb3ZlbGlzdAorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKIAlleGl0ICRFWElUX0ZBSUxVUkUKICAgICAgIGZpCiAKICAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCiAgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCi0JJHNob3cgIiRtdiAkb3V0cHV0X29iaiAkb2JqIgotCWlmICRydW4gJG12ICRvdXRwdXRfb2JqICRvYmo7IHRoZW4gOgotCWVsc2UKLQkgIGVycm9yPSQ/Ci0JICAkcnVuICRybSAkcmVtb3ZlbGlzdAotCSAgZXhpdCAkZXJyb3IKLQlmaQorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCiAgICAgICBmaQotCi0gICAgICAjIEFwcGVuZCB0aGUgbmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUuCi0gICAgICAjIE9ubHkgYXBwZW5kIGlmIHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlIGV4aXN0cy4KLSAgICAgIHRlc3QgLXogIiRydW4iICYmIGNhdCA+PiAke2xpYm9ian1UIDw8RU9GCi0jIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Lgotbm9uX3BpY19vYmplY3Q9JyRvYmpuYW1lJwotCi1FT0YKLSAgICBlbHNlCi0gICAgICAjIEFwcGVuZCB0aGUgbmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUuCi0gICAgICAjIE9ubHkgYXBwZW5kIGlmIHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlIGV4aXN0cy4KLSAgICAgIHRlc3QgLXogIiRydW4iICYmIGNhdCA+PiAke2xpYm9ian1UIDw8RU9GCi0jIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Lgotbm9uX3BpY19vYmplY3Q9bm9uZQotCi1FT0YKICAgICBmaQogCi0gICAgJHJ1biAkbXYgIiR7bGlib2JqfVQiICIke2xpYm9ian0iCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCiAKLSAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCi0gICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICAgICAkcnVuICRybSAiJGxvY2tmaWxlIgotICAgIGZpCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQogCiAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7CisgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG9wdF9tb2RlIGluCisgICAgICAiIikKKyAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKyAgICAgICAgZnVuY19oZWxwCisgICAgICAgIDs7CisKKyAgICAgIGNsZWFuKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKKyAgICAgICAgOzsKKworICAgICAgaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCisKK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorCitJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXgtZGlyIFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCisgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scworICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCisgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cworICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cworICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAorICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgorICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCisgIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAtc3RhdGljLWxpYnRvb2wtbGlicworICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorICAtV2MsRkxBRworICAtWGNvbXBpbGVyIEZMQUcgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorICAtV2wsRkxBRworICAtWGxpbmtlciBGTEFHICAgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIKKyAgLVhDQ2xpbmtlciBGTEFHICAgcGFzcyBsaW5rLXNwZWNpZmljIEZMQUcgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciAoQ0MpCisKK0FsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCisKK0V2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiBcYC5sYScgYXJlCit0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorb2JqZWN0IGZpbGVzLgorCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKK29ubHkgbGlicmFyeSBvYmplY3RzIChcYC5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCBcYC1ycGF0aCcgaXMKK3JlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAuYScgb3IgXGAubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAordXNpbmcgXGBhcicgYW5kIFxgcmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyBcYGxpYicuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubG8nIG9yIFxgLiR7b2JqZXh0fScsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorICAgICAgICA7OworCisgICAgICB1bmluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCitPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZWNobworICAgICRFQ0hPICJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCit9CisKKyMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQoraWYgJG9wdF9oZWxwOyB0aGVuCisgIGlmIHRlc3QgIiRvcHRfaGVscCIgPSA6OyB0aGVuCisgICAgZnVuY19tb2RlX2hlbHAKKyAgZWxzZQorICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZWNobworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8CisgICAgc2VkICcxZAorICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQveworCUgKKwlkCisgICAgICB9CisgICAgICAkeAorICAgICAgL2luZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzL2QKKyAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCisgICAgICBzL15Vc2FnZTouKi0tbW9kZT1cKFteIF0qXCkgLiovRGVzY3JpcHRpb24gb2YgXDEgbW9kZTovJworICBmaQorICBleGl0ICQ/CitmaQorCisKKyMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCitmdW5jX21vZGVfZXhlY3V0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgIGNtZD0iJG5vbm9wdCIKKyAgICB0ZXN0IC16ICIkY21kIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorCisgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwk7OworCisgICAgICAqKQorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCisJY29udGludWUKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCisgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisKKyAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCisgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgIGVsc2UKKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCisgICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSogfCAqLmxhIHwgKi5sbyApIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAiJGZpbGUiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGlicz0KKyAgICBsaWJkaXJzPQorICAgIGFkbWluY21kcz0KKworICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorCisgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgorCWVsc2UKKwkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJZmkKKworICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgXGAkb3B0JyIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKyAgICAgICAgc3lzcm9vdF9yZWdleD1gJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzcm9vdF9jbWQ9CisgICAgICBmaQorCisgICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kIFxgPScgcHJlZml4ZXMgZnJvbSAkbGliIgorICAgICAgICBkb25lCisgICAgICBlbHNlCisgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisJICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisJICAgID4gJHRtcGRpci90bXAtbGEKKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKKwlkb25lCisgICAgICAgICR7Uk19ciAiJHRtcGRpciIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBmdW5jX2FwcGVuZCBhZG1pbmNtZHMgIgorICAgICAgICRjbWRzIgorCWZpCisgICAgICBkb25lCisgICAgZmkKKworICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCSRFQ0hPICIgICAkbGliZGlyIgorICAgICAgZG9uZQorICAgICAgZWNobworICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwlsaWJkaXI9TElCRElSCisJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisJJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorICAgICAgZmkKKyAgICAgIGVjaG8KKworICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgICBjYXNlICRob3N0IGluCisJc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJICBlY2hvICJwYWdlcy4iCisJICA7OworCSopCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKwkgIDs7CisgICAgICBlc2FjCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGZpCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX2luc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgorICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgorICAgICAgYXJnPSQxCisgICAgICBzaGlmdAorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcHJvZz0KKyAgICAgIGFyZz0kbm9ub3B0CisgICAgZmkKKworICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKKyAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisgICAgICAqW1xcXCAvXWNwXCAqKSBpbnN0YWxsX2NwPTogOzsKKyAgICAgICopIGluc3RhbGxfY3A9ZmFsc2UgOzsKKyAgICBlc2FjCisKKyAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisgICAgZGVzdD0KKyAgICBmaWxlcz0KKyAgICBvcHRzPQorICAgIHByZXY9CisgICAgaW5zdGFsbF90eXBlPQorICAgIGlzZGlyPW5vCisgICAgc3RyaXBtZT0KKyAgICBub19tb2RlPToKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGFyZzI9CisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorCWlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwkgIHByZXY9JGFyZworCWZpCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIGlmIHRlc3QgIngkcHJldiIgPSB4LW0gJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KKwkgICAgYXJnMj0kaW5zdGFsbF9vdmVycmlkZV9tb2RlCisJICAgIG5vX21vZGU9ZmFsc2UKKwkgIGZpCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCisgICAgICBpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKKwlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisJZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCisgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisJOzsKKworICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKworCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCisJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0iJDEiCisJICBzaGlmdAorCisJICBzcmNuYW1lPSIkcmVhbG5hbWUiCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqLmRsbC5hKQorCSAgICAgIHRzdHJpcG1lPSIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAorCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisJICAgIGZvciBsaW5rbmFtZQorCSAgICBkbworCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0KKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PSIiCisJY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyopCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZpCisJICAgIDs7CisJKikKKwkgICAgd3JhcHBlcj0kZmlsZQorCSAgICA7OworCWVzYWMKKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJHdyYXBwZXIiOyB0aGVuCisJICBub3RpbnN0X2RlcGxpYnM9CisJICByZWxpbmtfY29tbWFuZD0KKworCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KKwkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgorCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisJCSAgY29udGludWUKKwkgICAgICAgIGZpCisJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgZmkKKwkgICAgfQorCSAgZWxzZQorCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisJICAgIGZpbGU9YCRFQ0hPICIkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFNFRCAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheQorCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKKwkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCisJICAqLmV4ZToqLmV4ZSkKKwkgICAgIyB0aGlzIGlzIG9rCisJICAgIDs7CisJICAqLmV4ZToqKQorCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCisJICAgIDs7CisJICAqOiouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKKwkgICAgZGVzdGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JworCSRvcHRfZHJ5X3J1biB8fCBpZiB0ZXN0IC1uICIkb3V0cHV0bmFtZSI7IHRoZW4KKwkgICR7Uk19ciAiJHRtcGRpciIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKKworCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgICAgICBjYXNlICRob3N0IGluCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSIgOyB0aGVuCisJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisJICAgICAgICAgIGZpCisJICAgICAgICBmaQorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZpCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKwkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKikKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICB9CisJICAgIDs7CisgICAgICAgICAgZXNhYworCWRvbmUKKworCSRvcHRfZHJ5X3J1biB8fCB7CisJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisJICBmaQorCisJICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8CisJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXNvcnQgLWsgMworCSAgICAgIGVsc2UKKwkJc29ydCArMgorCSAgICAgIGZpIHwKKwkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgZmkKKworCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisJICBlbHNlCisJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CitleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CitMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7XAorICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworIworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQoreworICAkb3B0X2RlYnVnCisgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCisjCisjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKyMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCisjCisjIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZworIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgorIworIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKyAgICAgIHAKKyAgICAgIGQKKyAgICB9CisgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKyAgICAvXj09PT1NQVJLPT09PS9wCisgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKyAgICAvXi5cezQzXH0vIWQKKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworICAgIHMvXi5cezQzXH0vLycgfAorICAgICRTRUQgLW4gJworICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorICAgICAgSAorICAgICAgJCBiIHBhcmEKKyAgICAgIGIKKyAgICAgIDpwYXJhCisgICAgICB4CisgICAgICBzL1xuLy9nCisgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisgICAgICBzL149PT09TUFSSz09PT0vLworICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorICAgICAgcy9bXC4gXHRdKiQvLworICAgICAgIyBQcmludAorICAgICAgLy4vcCcgfAorICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKyAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgorICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisgICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQorICAgICMgYSAnLicuCisgICAgIworICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCisgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKK30KKworIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMKKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisgIGVsc2UKKyAgICAjIHVua25vd24KKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZmkKKyAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCisJCSAgICdzdGF0PSQ/OyBybSAtZiAiJGxvY2tmaWxlIjsgZXhpdCAkc3RhdCcKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCisgICAgZmkKKyAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICA6CisgICAgZWxzZQorICAgICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCisgICAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAorICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9CisgICAgbXlfb2xkb2Jqcz0iIgorICAgIG15X3hsaWI9IiIKKyAgICBteV94YWJzPSIiCisgICAgbXlfeGRpcj0iIgorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKwkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorICAgICAgbXlfeGxpYj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbXlfeGxpYl91PSRteV94bGliCisgICAgICB3aGlsZSA6OyBkbworICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCisJKiIgJG15X3hsaWJfdSAiKikKKwkgIGZ1bmNfYXJpdGggJGV4dHJhY3RlZF9zZXJpYWwgKyAxCisJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKKwkqKSBicmVhayA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWBiYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlImAKKwkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAorCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisJICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKKwkgICAgZGFyd2luX2FyY2g9CisJICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCisJICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCisJICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCisJICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcworICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCisJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRiYXNlbmFtZSIgfCBzb3J0IC11YAorCSAgICBkYXJ3aW5fZmlsZT0KKwkgICAgZGFyd2luX2ZpbGVzPQorCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgICAgZG9uZQorCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIGZpbGU9XCJcJDBcIiIKKworICAgIHFFQ0hPPWAkRUNITyAiJEVDSE8iIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgJEVDSE8gIlwKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorICAgIEVDSE89XCIkcUVDSE9cIgorICBmaQorCisjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCisjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB3aGljaCBtYXRjaAorIyB0aGlzIHBhdHRlcm4pLgorIworIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorbHRfb3B0aW9uX2RlYnVnPQorZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCit7CisgIGx0X3NjcmlwdF9hcmcwPVwkMAorICBzaGlmdAorICBmb3IgbHRfb3B0CisgIGRvCisgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworICAgIC0tbHQtZHVtcC1zY3JpcHQpCisgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKyAgICAgICAgZXhpdCAwCisgICAgICA7OworICAgIC0tbHQtKikKKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICBlY2hvIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlwiIDE+JjIKKyAgZmkKK30KKworIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0CisjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKK2Z1bmNfbHRfZHVtcF9hcmdzICgpCit7CisgIGx0X2R1bXBfYXJnc19OPTE7CisgIGZvciBsdF9hcmcKKyAgZG8KKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisgICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKKyAgZG9uZQorfQorCisjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCitmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCit7CisiCisgIGNhc2UgJGhvc3QgaW4KKyAgIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgogICAgIDs7CiAKLSAgIyBsaWJ0b29sIGxpbmsgbW9kZQotICBsaW5rIHwgcmVsaW5rKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGxpbmsiCisgICopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorfQorCisjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorZnVuY19leGVjX3Byb2dyYW0gKCkKK3sKKyAgZm9yIGx0X3dyX2FyZworICBkbworICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKyAgICAtLWx0LSopIDs7CisgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKyAgICBlc2FjCisgICAgc2hpZnQKKyAgZG9uZQorICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KK30KKworICAjIFBhcnNlIG9wdGlvbnMKKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCSMKKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpZmRlZiBfTVNDX1ZFUgorIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2ludCBfcHV0ZW52IChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjIGVuZGlmCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBpbnRwdHJfdCBpbnQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisvKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAwOworI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKwordm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7CitjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cit2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKK3ZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCit2b2xhdGlsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludHB0cl90IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKyAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQorICAgKi8KKyAgbmV3YXJnYz0wOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKwl7CisgICAgICAgICAgbHRfZGVidWcgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisgICAgICAgICAgICovCisgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKK0VPRgorCSAgICBjYXQgPDxFT0YKKyAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworRU9GCisJICAgIGNhdCA8PCJFT0YiCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisKKyAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICB0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorCQkgIHRhcmdldF9uYW1lKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworRU9GCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisgICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQorICAgc3BlY2lhbCB3YXk6CisgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisgICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KKyAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCisgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKyAgICAgY2hhcmFjdGVycy4KKyAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgorICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisgICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6CisgICAgICAgXCIgLT4gIgorICAgICAgIFxcXCIgLT4gXCIKKyAgICAgICBcXFxcXCIgLT4gXFwiCisgKi8KKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCitjaGFyICoqCitwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKK3sKKyAgc2l6ZV90IGFyZ2M7CisgIGNoYXIgKipuZXdfYXJndjsKKyAgc2l6ZV90IGk7CisKKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQorICAgIDsKKworICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisJbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOworICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQorCXsKKwkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7CisJICBzaXplX3QgbGVuZ3RoOworCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworCSAgY29uc3QgY2hhciAqczsKKwkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7CisJICBjaGFyICpwOworCisJICBsZW5ndGggPSAwOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoKys7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKwkgICAgICBsZW5ndGgrKzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCisJICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7CisKKwkgIHAgPSBxdW90ZWRfc3RyaW5nOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgKnArKyA9ICciJzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQl7CisJCSAgdW5zaWduZWQgaW50IGo7CisJCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQorCQkgICAgKnArKyA9ICdcXCc7CisJCX0KKwkgICAgICAqcCsrID0gYzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGo7CisJICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisJCSpwKysgPSAnXFwnOworCSAgICAgICpwKysgPSAnIic7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKworCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworCX0KKyAgICAgIGVsc2UKKwluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKKyAgICB9CisgIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKKworICByZXR1cm4gbmV3X2FyZ3Y7Cit9CitFT0YKKwkJOzsKKwkgICAgZXNhYworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKK3sKK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorICAgICAgICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgIC1lICdzL14vICBmcHV0cyAoIi8nIC1lICdzLyQvXFxuIiwgZik7LycKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK30KK0VPRgorfQorIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKworIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKKyMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAorZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICppbXBvcnQqKSA6IDs7CisgICAgKikgZmFsc2UgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKICAgICBjYXNlICRob3N0IGluCi0gICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKICAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKICAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKICAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKQEAgLTExMjEsMTAgKzUxMDAsMTAgQEAKICAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKICAgICAgIDs7CiAgICAgZXNhYwotICAgIGxpYnRvb2xfYXJncz0iJG5vbm9wdCIKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAogICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKLSAgICBjb21waWxlX2NvbW1hbmQ9IiRub25vcHQiCi0gICAgZmluYWxpemVfY29tbWFuZD0iJG5vbm9wdCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAogCiAgICAgY29tcGlsZV9ycGF0aD0KICAgICBmaW5hbGl6ZV9ycGF0aD0KQEAgLTExMzksOCArNTExOCwxMCBAQAogICAgIGRsbHNlYXJjaHBhdGg9CiAgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCiAgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQogCiAgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGJpbmRpcj0KICAgICBkbGZpbGVzPQogICAgIGRscHJlZmlsZXM9CiAgICAgZGxzZWxmPW5vCkBAIC0xMTU0LDcgKzUxMzUsNiBAQAogICAgIG5vX2luc3RhbGw9bm8KICAgICBvYmpzPQogICAgIG5vbl9waWNfb2JqZWN0cz0KLSAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKICAgICBwcmVjaW91c19maWxlc19yZWdleD0KICAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KICAgICBwcmVsb2FkPW5vCkBAIC0xMTY4LDE5ICs1MTQ4LDI1IEBACiAgICAgdGhyZWFkX3NhZmU9bm8KICAgICB2aW5mbz0KICAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CiAgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKLQogICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKIAogICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KICAgICBmb3IgYXJnCiAgICAgZG8KICAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CiAgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKIAljYXNlICRhcmcgaW4KIAktYWxsLXN0YXRpYykKIAkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIgMT4mMgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgogCSAgZmkKIAkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgogCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCkBAIC0xMjE0LDI5ICs1MjAwLDMwIEBACiAgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbwogICAgICAgYXJnPSIkMSIKICAgICAgIHNoaWZ0Ci0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCXFhcmc9XCJgJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImBcIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKLQk7OwotICAgICAgKikgcWFyZz0kYXJnIDs7Ci0gICAgICBlc2FjCi0gICAgICBsaWJ0b29sX2FyZ3M9IiRsaWJ0b29sX2FyZ3MgJHFhcmciCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAogICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCiAgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KIAljYXNlICRwcmV2IGluCiAJb3V0cHV0KQotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBPVVRQVVRAIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKIAkgIDs7CiAJZXNhYwogCiAJY2FzZSAkcHJldiBpbgorCWJpbmRpcikKKwkgIGJpbmRpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKIAlkbGZpbGVzfGRscHJlZmlsZXMpCiAJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgogCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgotCSAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgQFNZTUZJTEVAIgotCSAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKIAkgICAgcHJlbG9hZD15ZXMKIAkgIGZpCiAJICBjYXNlICRhcmcgaW4KQEAgLTEyNjMsOSArNTI1MCw5IEBACiAJICAgIDs7CiAJICAqKQogCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCi0JICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKIAkgICAgZWxzZQotCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCiAJICAgIGZpCiAJICAgIHByZXY9CiAJICAgIGNvbnRpbnVlCkBAIC0xMjc0LDEwICs1MjYxLDggQEAKIAkgIDs7CiAJZXhwc3ltcykKIAkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgotCSAgaWYgdGVzdCAhIC1mICIkYXJnIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CkBAIC0xMjg2LDExICs1MjcxLDEyMCBAQAogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKIAlpbnN0X3ByZWZpeCkKIAkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCWZpCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CiAJcHJlY2lvdXNfcmVnZXgpCiAJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKIAkgIHByZXY9CkBAIC0xMzAxLDE3NCArNTM5NSw1OSBAQAogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwotCW9iamVjdGxpc3QpCi0JICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgotCSAgICBzYXZlX2FyZz0kYXJnCi0JICAgIG1vcmVhcmdzPQotCSAgICBmb3IgZmlsIGluIGBjYXQgJHNhdmVfYXJnYAotCSAgICBkbwotIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCi0JICAgICAgYXJnPSRmaWwKLQkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KLQotCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KLQkgICAgICBpZiAoJHtTRUR9IC1lICcycScgJGFyZyB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCXBpY19vYmplY3Q9Ci0JCW5vbl9waWNfb2JqZWN0PQotCi0JCSMgUmVhZCB0aGUgLmxvIGZpbGUKLQkJIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JCWNhc2UgJGFyZyBpbgotCQkqLyogfCAqXFwqKSAuICRhcmcgOzsKLQkJKikgLiAuLyRhcmcgOzsKLQkJZXNhYwotCi0JCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCBcCi0JCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJiBcCi0JCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCi0JCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciIDE+JjIKLQkJICBleGl0ICRFWElUX0ZBSUxVUkUKLQkJZmkKLQotCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCQl4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkJaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KLQkJICB4ZGlyPQotCQllbHNlCi0JCSAgeGRpcj0iJHhkaXIvIgotCQlmaQotCi0JCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgotCi0JCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgotCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKLQkJICAgICAgcHJldj0KLQkJICAgICAgY29udGludWUKLQkJICAgIGVsc2UKLQkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KLQkJICAgICAgcHJldj1kbHByZWZpbGVzCi0JCSAgICBmaQotCQkgIGZpCi0KLQkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KLQkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KLQkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgotCQkgICAgcHJldj0KLQkJICBmaQotCi0JCSAgIyBBIFBJQyBvYmplY3QuCi0JCSAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCi0JCSAgYXJnPSIkcGljX29iamVjdCIKLQkJZmkKLQotCQkjIE5vbi1QSUMgb2JqZWN0LgotCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKLQotCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAotCQkgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCi0JCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCi0JCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKLQkJICBmaQotCQllbHNlCi0JCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgotCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCi0JCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKLQkJZmkKLQkgICAgICBlbHNlCi0JCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgotCQlpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotCQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiIDE+JjIKLQkJICBleGl0ICRFWElUX0ZBSUxVUkUKLQkJZWxzZQotCQkgICMgRHJ5LXJ1biBjYXNlLgotCi0JCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkJICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkJICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgotCQkgICAgeGRpcj0KLQkJICBlbHNlCi0JCSAgICB4ZGlyPSIkeGRpci8iCi0JCSAgZmkKLQotCQkgIHBpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7b2JqZGlyfS8ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKLQkJICBub25fcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCi0JCSAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCi0JCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKLQkJZmkKLQkgICAgICBmaQotCSAgICBkb25lCi0JICBlbHNlCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGxpbmsgaW5wdXQgZmlsZSBcYCRzYXZlX2FyZycgZG9lcyBub3QgZXhpc3QiCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKLQkgIGFyZz0kc2F2ZV9hcmcKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKIAlycGF0aCB8IHhycGF0aCkKIAkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCSAgY2FzZSAkYXJnIGluCiAJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CiAJICAqKQotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCiAJICAgIDs7CiAJICBlc2FjCiAJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgogCSAgICBjYXNlICIkcnBhdGggIiBpbgogCSAgICAqIiAkYXJnICIqKSA7OwotCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKIAkgICAgZXNhYwogCSAgZWxzZQogCSAgICBjYXNlICIkeHJwYXRoICIgaW4KIAkgICAgKiIgJGFyZyAiKikgOzsKLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CiAJICAgIGVzYWMKIAkgIGZpCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7Ci0JeGNvbXBpbGVyKQotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKIAkgIHByZXY9Ci0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHFhcmciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkcWFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwotCXhsaW5rZXIpCi0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorCXdlYWspCisJICBmdW5jX2FwcGVuZCB3ZWFrX2xpYnMgIiAkYXJnIgogCSAgcHJldj0KLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkd2wkcWFyZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR3bCRxYXJnIgogCSAgY29udGludWUKIAkgIDs7CiAJeGNjbGlua2VyKQotCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKIAkgIHByZXY9Ci0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHFhcmciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgogCSAgY29udGludWUKIAkgIDs7Ci0Jc2hyZXh0KQotICAJICBzaHJleHRfY21kcz0iJGFyZyIKKwl4Y29tcGlsZXIpCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgogCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgogCSAgY29udGludWUKIAkgIDs7Ci0JZGFyd2luX2ZyYW1ld29ya3xkYXJ3aW5fZnJhbWV3b3JrX3NraXApCi0JICB0ZXN0ICIkcHJldiIgPSAiZGFyd2luX2ZyYW1ld29yayIgJiYgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCXhsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCiAJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCiAJICBjb250aW51ZQogCSAgOzsKIAkqKQpAQCAtMTQ4NCwxNiArNTQ2MywxNiBAQAogICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtYWxsLXN0YXRpYykKIAlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkbGlua19zdGF0aWNfZmxhZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRsaW5rX3N0YXRpY19mbGFnIgorCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCiAJZmkKIAljb250aW51ZQogCTs7CiAKICAgICAgIC1hbGxvdy11bmRlZmluZWQpCiAJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgotCSRlY2hvICIkbW9kZW5hbWU6IFxgLWFsbG93LXVuZGVmaW5lZCcgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IiAxPiYyCi0JY29udGludWUKKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKIAk7OwogCiAgICAgICAtYXZvaWQtdmVyc2lvbikKQEAgLTE1MDEsNiArNTQ4MCwxMSBAQAogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKwogICAgICAgLWRsb3BlbikKIAlwcmV2PWRsZmlsZXMKIAljb250aW51ZQpAQCAtMTUxOCw4ICs1NTAyLDcgQEAKIAogICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQogCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogbW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKIAlmaQogCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgogCSAgcHJldj1leHBzeW1zCkBAIC0xNTI5LDE1ICs1NTEyLDggQEAKIAljb250aW51ZQogCTs7CiAKLSAgICAgIC1mcmFtZXdvcmt8LWFyY2h8LWlzeXNyb290KQotCWNhc2UgIiAkQ0MgIiBpbgotCSAgKiIgJHthcmd9ICR7MX0gIiogfCAqIiAke2FyZ30JJHsxfSAiKikgCi0JCXByZXY9ZGFyd2luX2ZyYW1ld29ya19za2lwIDs7Ci0JICAqKSBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCi0JICAgICBwcmV2PWRhcndpbl9mcmFtZXdvcmsgOzsKLQllc2FjCi0JY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKIAljb250aW51ZQogCTs7CiAKQEAgLTE1NTEsNDUgKzU1MjcsNTkgQEAKICAgICAgIC1MW0EtWl1bQS1aXSo6KikKIAljYXNlICR3aXRoX2djYy8kaG9zdCBpbgogCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCi0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAJICA7OwogCWVzYWMKIAljb250aW51ZQogCTs7CiAKICAgICAgIC1MKikKLQlkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CiAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJY2FzZSAkZGlyIGluCiAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwogCSopCiAJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0JICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciIDE+JjIKLQkgICAgYWJzZGlyPSIkZGlyIgotCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGRpciIKLQkgIGZpCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKIAkgIGRpcj0iJGFic2RpciIKIAkgIDs7CiAJZXNhYwogCWNhc2UgIiRkZXBsaWJzICIgaW4KLQkqIiAtTCRkaXIgIiopIDs7CisJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKwkgIDs7CiAJKikKLQkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKLQkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworCSAgY2FzZSAkZGlyIGluCisJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCiAJICA7OwogCWVzYWMKIAljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCi0JICB0ZXN0YmluZGlyPWAkZWNobyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgogCSAgKiI6JGRpcjoiKikgOzsKLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKIAkgIGVzYWMKIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgogCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7Ci0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CiAJICBlc2FjCiAJICA7OwogCWVzYWMKQEAgLTE1OTksNyArNTU4OSw3IEBACiAgICAgICAtbCopCiAJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgogCSAgY2FzZSAkaG9zdCBpbgotCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqKQorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQogCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQogCSAgICBjb250aW51ZQogCSAgICA7OwpAQCAtMTYxMyw3ICs1NjAzLDcgQEAKIAkgICAgOzsKIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKIAkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgLWZyYW1ld29yayBTeXN0ZW0iCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CiAJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCkBAIC0xNjMzLDI5ICs1NjIzLDcgQEAKIAkgICA7OwogCSBlc2FjCiAJZmkKLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKwotICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgotICAgICAgLW1vZGVsKQotCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLQlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgotCXByZXY9eGNvbXBpbGVyCi0JY29udGludWUKLQk7OwotCi0gICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCi0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbXVsdGlfbW9kdWxlKQotCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKIAljb250aW51ZQogCTs7CiAKQEAgLTE2NjQsMzYgKzU2MzIsMzAgQEAKIAljb250aW51ZQogCTs7CiAKLSAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC1yWzAtOV1bMC05XSogc3BlY2lmaWVzIHRoZSBwcm9jZXNzb3Igb24gdGhlIFNHSSBjb21waWxlcgotICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgotICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKLSAgICAgICMgLXEqIHBhc3MgdGhyb3VnaCBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCi0gICAgICAjIC1tKiBwYXNzIHRocm91Z2ggYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQwotICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBwYXNzIHRocm91Z2ggYXJjaGl0ZWN0dXJlLXNwZWNpZmljCi0gICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQwotICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiBwYXNzIHRocm91Z2ggcHJvZmlsaW5nIGZsYWcgZm9yIEdDQwotICAgICAgIyAtRi9wYXRoIGdpdmVzIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgotICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKLSAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAotICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqKQorICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OwogCi0JIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCi0JIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KLQlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JY2FzZSAkYXJnIGluCi0JKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICBhcmc9IlwiJGFyZ1wiIgotCSAgOzsKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKIAllc2FjCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgotICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDs7CisJY29udGludWUKKwk7OwogCi0gICAgICAtc2hyZXh0KQotCXByZXY9c2hyZXh0CisgICAgICAtbXVsdGlfbW9kdWxlKQorCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKIAljb250aW51ZQogCTs7CiAKQEAgLTE3MDQsMTEgKzU2NjYsMTEgQEAKIAogICAgICAgLW5vLWluc3RhbGwpCiAJY2FzZSAkaG9zdCBpbgotCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiopCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQogCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCiAJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IiAxPiYyCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiIDE+JjIKKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKIAkgIGZhc3RfaW5zdGFsbD1ubwogCSAgOzsKIAkqKSBub19pbnN0YWxsPXllcyA7OwpAQCAtMTc0OSwyMiArNTcxMSwzNiBAQAogCTs7CiAKICAgICAgIC1SKikKLQlkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCWNhc2UgJGRpciBpbgogCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwk9KikKKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIDs7CiAJKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IG9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgogCSAgOzsKIAllc2FjCiAJY2FzZSAiJHhycGF0aCAiIGluCiAJKiIgJGRpciAiKikgOzsKLQkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OwogCWVzYWMKIAljb250aW51ZQogCTs7CiAKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKICAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKIAkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgogCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdApAQCAtMTc4Myw0NyArNTc1OSw0OSBAQAogCXByZXY9dmluZm8KIAljb250aW51ZQogCTs7CisKICAgICAgIC12ZXJzaW9uLW51bWJlcikKIAlwcmV2PXZpbmZvCiAJdmluZm9fbnVtYmVyPXllcwogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKwogICAgICAgLVdjLCopCi0JYXJncz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiAtZSAncy9eLVdjLC8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJYXJnPQogCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwogCWZvciBmbGFnIGluICRhcmdzOyBkbwogCSAgSUZTPSIkc2F2ZV9pZnMiCi0JICBjYXNlICRmbGFnIGluCi0JICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgICBmbGFnPSJcIiRmbGFnXCIiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBhcmc9IiRhcmcgJHdsJGZsYWciCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmbGFnIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJZG9uZQogCUlGUz0iJHNhdmVfaWZzIgotCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICJzL14gLy8iYAorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCTs7CiAKICAgICAgIC1XbCwqKQotCWFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgLWUgJ3MvXi1XbCwvLydgCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWFyZz0KIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KIAkgIElGUz0iJHNhdmVfaWZzIgotCSAgY2FzZSAkZmxhZyBpbgotCSAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgICAgZmxhZz0iXCIkZmxhZ1wiIgotCSAgICA7OwotCSAgZXNhYwotCSAgYXJnPSIkYXJnICR3bCRmbGFnIgotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZmxhZyIKLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCWRvbmUKIAlJRlM9IiRzYXZlX2lmcyIKLQlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAk7OwogCiAgICAgICAtWGNvbXBpbGVyKQpAQCAtMTg0MSw1MyArNTgxOSw2OSBAQAogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgorICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtZnN0YWNrLXByb3RlY3RvciogICBzdGFjayBwcm90ZWN0b3IgZmxhZ3MgZm9yIEdDQworICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisgICAgICAjIC1PKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbnwtZnN0YWNrLXByb3RlY3RvciopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKICAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgogICAgICAgLSogfCArKikKLQkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKLQkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgotCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQljYXNlICRhcmcgaW4KLQkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgIGFyZz0iXCIkYXJnXCIiCi0JICA7OwotCWVzYWMKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAk7OwogCiAgICAgICAqLiRvYmpleHQpCiAJIyBBIHN0YW5kYXJkIG9iamVjdC4KLQlvYmpzPSIkb2JqcyAkYXJnIgorCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgogCTs7CiAKICAgICAgICoubG8pCiAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCiAKIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRhcmcgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCiAJICBwaWNfb2JqZWN0PQogCSAgbm9uX3BpY19vYmplY3Q9CiAKIAkgICMgUmVhZCB0aGUgLmxvIGZpbGUKLQkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgY2FzZSAkYXJnIGluCi0JICAqLyogfCAqXFwqKSAuICRhcmcgOzsKLQkgICopIC4gLi8kYXJnIDs7Ci0JICBlc2FjCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKIAotCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IFwKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAogCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAotCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJiBcCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCiAJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCiAJICBmaQogCiAJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCSAgeGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgotCSAgICB4ZGlyPQotIAkgIGVsc2UKLQkgICAgeGRpcj0iJHhkaXIvIgotCSAgZmkKKwkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKIAogCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KIAkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KQEAgLTE4OTUsNyArNTg4OSw3IEBACiAKIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgogCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KLQkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKIAkJcHJldj0KIAkJY29udGludWUKIAkgICAgICBlbHNlCkBAIC0xOTA3LDEyICs1OTAxLDEyIEBACiAJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCiAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgogCSAgICAgIHByZXY9CiAJICAgIGZpCiAKIAkgICAgIyBBIFBJQyBvYmplY3QuCi0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCiAJICAgIGFyZz0iJHBpY19vYmplY3QiCiAJICBmaQogCkBAIC0xOTIyLDcgKzU5MTYsNyBAQAogCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCiAKIAkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0Ci0JICAgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCiAJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCiAJICAgIGZpCkBAIC0xOTMwLDUyICs1OTI0LDQ3IEBACiAJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KIAkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgogCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCi0JICAgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkgIGZpCiAJZWxzZQogCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCi0JICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZWxzZQotCSAgICAjIERyeS1ydW4gY2FzZS4KLQorCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCiAJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JICAgIHhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCSAgICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgotCSAgICAgIHhkaXI9Ci0JICAgIGVsc2UKLQkgICAgICB4ZGlyPSIkeGRpci8iCi0JICAgIGZpCisJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogCi0JICAgIHBpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7b2JqZGlyfS8ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKLQkgICAgbm9uX3BpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKLQkgICAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgogCSAgZmkKIAlmaQogCTs7CiAKICAgICAgICouJGxpYmV4dCkKIAkjIEFuIGFyY2hpdmUuCi0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKLQlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgogCWNvbnRpbnVlCiAJOzsKIAogICAgICAgKi5sYSkKIAkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCiAKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKIAlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCiAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KLQkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIHByZXY9CiAJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCiAJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgotCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgcHJldj0KIAllbHNlCi0JICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJZmkKIAljb250aW51ZQogCTs7CkBAIC0xOTg0LDcwICs1OTczLDUzIEBACiAgICAgICAqKQogCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAogCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCi0JYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCWNhc2UgJGFyZyBpbgotCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgYXJnPSJcIiRhcmdcIiIKLQkgIDs7Ci0JZXNhYworCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJOzsKICAgICAgIGVzYWMgIyBhcmcKIAogICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCiAgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgotCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKICAgICAgIGZpCiAgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAogCi0gICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKIAogICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KICAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCi0gICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAgICAgZmkKIAogICAgIG9sZGxpYnM9CiAgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQotICAgIG91dHB1dG5hbWU9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisgICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgogICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCiAKICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KICAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKLSAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJGVjaG8gXCJYXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRYc2VkIC1lIFwncy86LyAvZ1wnXGAKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCiAgICAgZWxzZQogICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CiAgICAgZmkKICAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKICAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCiAKLSAgICBvdXRwdXRfb2JqZGlyPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLSAgICBpZiB0ZXN0ICJYJG91dHB1dF9vYmpkaXIiID0gIlgkb3V0cHV0IjsgdGhlbgotICAgICAgb3V0cHV0X29iamRpcj0iJG9iamRpciIKLSAgICBlbHNlCi0gICAgICBvdXRwdXRfb2JqZGlyPSIkb3V0cHV0X29iamRpci8kb2JqZGlyIgotICAgIGZpCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAogICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgotICAgIGlmIHRlc3QgISAtZCAiJG91dHB1dF9vYmpkaXIiOyB0aGVuCi0gICAgICAkc2hvdyAiJG1rZGlyICRvdXRwdXRfb2JqZGlyIgotICAgICAgJHJ1biAkbWtkaXIgJG91dHB1dF9vYmpkaXIKLSAgICAgIGV4aXRfc3RhdHVzPSQ/Ci0gICAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG91dHB1dF9vYmpkaXIiOyB0aGVuCi0JZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgIGZpCi0gICAgZmkKKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgogCiAgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CiAgICAgY2FzZSAkb3V0cHV0IGluCiAgICAgIiIpCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgogICAgICAgOzsKICAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OwogICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OwpAQCAtMjA1NSwyNyArNjAyNywxOCBAQAogICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCiAgICAgZXNhYwogCi0gICAgY2FzZSAkaG9zdCBpbgotICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKikKLSAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCi0gICAgICBkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9eWVzCi0gICAgICA7OwotICAgICopCi0gICAgICBkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JGR1cGxpY2F0ZV9kZXBzCi0gICAgICA7OwotICAgIGVzYWMKICAgICBzcGVjaWFsZGVwbGlicz0KIAogICAgIGxpYnM9CiAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCiAgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCiAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KLSAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KIAljYXNlICIkbGlicyAiIGluCi0JKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCiAgICAgICBmaQotICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgogICAgIGRvbmUKIAogICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KQEAgLTIwODUsMTIgKzYwNDgsMTIgQEAKICAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKICAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgogICAgICAgcHJlX3Bvc3RfZGVwcz0KLSAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCiAJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCiAJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCi0JICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKIAkgIGVzYWMKLQkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKIAlkb25lCiAgICAgICBmaQogICAgICAgcHJlX3Bvc3RfZGVwcz0KQEAgLTIxMDEsMTUgKzYwNjQsMTYgQEAKICAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CiAgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCiAgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKwogICAgIGNhc2UgJGxpbmttb2RlIGluCiAgICAgbGliKQotCXBhc3Nlcz0iY29udiBsaW5rIgorCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKIAlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KIAkgIGNhc2UgJGZpbGUgaW4KIAkgICoubGEpIDs7CiAJICAqKQotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgogCSAgICA7OwogCSAgZXNhYwogCWRvbmUKQEAgLTIxMjUsNyArNjA4OSwyMCBAQAogICAgICopICBwYXNzZXM9ImNvbnYiCiAJOzsKICAgICBlc2FjCisKICAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKwogICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKIAkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCiAJbGlicz0iJGRlcGxpYnMiCkBAIC0yMTM4LDExICs2MTE1LDM1IEBACiAJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CiAJZXNhYwogICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorCSAgY2FzZSAkbGliIGluCisJICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKwkgIGVzYWMKKworCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5CisJICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKyAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlkb25lCisJbGlicz0iJGRscHJlZmlsZXMiCisgICAgICBmaQogICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCiAJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcwogCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCiAJZGVwbGlicz0KICAgICAgIGZpCisKICAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCiAJbGliPQogCWZvdW5kPW5vCkBAIC0yMTUyLDE2ICs2MTUzLDIzIEBACiAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZWxzZQotCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGRlcGxpYiIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCiAJICBmaQogCSAgY29udGludWUKIAkgIDs7CiAJLWwqKQogCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiIDE+JjIKKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgogCSAgICBjb250aW51ZQogCSAgZmkKLQkgIG5hbWU9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLWwvLydgCisJICBmdW5jX3N0cmlwbmFtZSAnLWwnICcnICIkZGVwbGliIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCiAJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKIAkgIGVsc2UKQEAgLTIxOTcsMjEgKzYyMDUsMTcgQEAKIAkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopCi0JCWlmICgke1NFRH0gLWUgJzJxJyAkbGliIHwKLSAgICAgICAgICAgICAgICAgICAgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgogCQkgIGxpYnJhcnlfbmFtZXM9CiAJCSAgb2xkX2xpYnJhcnk9Ci0JCSAgY2FzZSAkbGliIGluCi0JCSAgKi8qIHwgKlxcKikgLiAkbGliIDs7Ci0JCSAgKikgLiAuLyRsaWIgOzsKLQkJICBlc2FjCisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCiAJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwogCQkgICAgbGw9IiRsIgogCQkgIGRvbmUKIAkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQogCQkgICAgZm91bmQ9bm8KLQkJICAgIGxhZGlyPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkJICAgIHRlc3QgIlgkbGFkaXIiID0gIlgkbGliIiAmJiBsYWRpcj0iLiIKKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQogCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCiAJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgpAQCAtMjIyMywxOSArNjIyNywzNiBAQAogCQkgICAgY29udGludWUKIAkJICBmaQogCQlmaQotCSAgICAgICAgOzsKKwkJOzsKIAkgICAgICAqKSA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIAkgIGZpCiAJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CiAJLUwqKQogCSAgY2FzZSAkbGlua21vZGUgaW4KIAkgIGxpYikKIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQogCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICJgJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tTC8vJ2AKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICAgIDs7CiAJICBwcm9nKQogCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCkBAIC0yMjQ4LDI3ICs2MjY5LDM0IEBACiAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgICAgZmkKLQkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICJgJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tTC8vJ2AKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICAgIDs7CiAJICAqKQotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIiAxPiYyCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKIAkgICAgOzsKIAkgIGVzYWMgIyBsaW5rbW9kZQogCSAgY29udGludWUKIAkgIDs7ICMgLUwKIAktUiopCiAJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCi0JICAgIGRpcj1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CiAJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCiAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgogCSAgICAqIiAkZGlyICIqKSA7OwotCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKIAkgICAgZXNhYwogCSAgZmkKIAkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICBjb250aW51ZQogCSAgOzsKLQkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisJKi5sYSkKKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKwkgIDs7CiAJKi4kbGliZXh0KQogCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgpAQCAtMjI3NiwzNSArNjMwNCw0MSBAQAogCSAgZmkKIAkgIGNhc2UgJGxpbmttb2RlIGluCiAJICBsaWIpCi0JICAgIHZhbGlkX2FfbGliPW5vCi0JICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JICAgICAgbWF0Y2hfcGF0dGVybiopCi0JCXNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2QKLQkgICAgICAgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDIgXCguKlwpImAKLQkJaWYgZXZhbCAkZWNobyBcIiRkZXBsaWJcIiAyPi9kZXYvbnVsbCBcCi0JCSAgICB8ICRTRUQgMTBxIFwKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKIAkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPXllcworCQkgIGZpCisJCTs7CisJCXBhc3NfYWxsKQogCQkgIHZhbGlkX2FfbGliPXllcwotCQlmaQogCQk7OwotCSAgICAgIHBhc3NfYWxsKQotCQl2YWxpZF9hX2xpYj15ZXMKLQkJOzsKLSAgICAgICAgICAgIGVzYWMKLQkgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KLQkgICAgICAkZWNobwotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCi0JICAgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JICAgICAgJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JICAgICAgJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkgICAgICAkZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCi0JICAgICAgJGVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2VkIGhlcmUuIgotCSAgICBlbHNlCi0JICAgICAgJGVjaG8KLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCi0JICAgICAgJGVjaG8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgZmkKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQllY2hvICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgorCSAgICAgIGVsc2UKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisJCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorCQlkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgZXNhYwogCSAgICBjb250aW51ZQogCSAgICA7OwogCSAgcHJvZykKQEAgLTIzMjUsMTEgKzYzNTksMTEgQEAKIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KIAkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKIAkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgogCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICAgIGVsc2UKLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkZGVwbGliIgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgogCSAgICBmaQogCSAgZmkKIAkgIGNvbnRpbnVlCkBAIC0yMzM5LDIxICs2MzczLDE4IEBACiAJICBjb250aW51ZQogCSAgOzsKIAllc2FjICMgY2FzZSAkZGVwbGliCisKIAlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKIAllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCiAJZmkKIAogCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRsaWIgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0JZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAKLQlsYWRpcj1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JdGVzdCAiWCRsYWRpciIgPSAiWCRsaWIiICYmIGxhZGlyPSIuIgorCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogCiAJZGxuYW1lPQogCWRsb3Blbj0KQEAgLTIzNjEsNiArNjM5Miw3IEBACiAJbGliZGlyPQogCWxpYnJhcnlfbmFtZXM9CiAJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KIAkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAogCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluawogCWluc3RhbGxlZD15ZXMKQEAgLTIzNjksMTYgKzY0MDEsMjQgQEAKIAogCiAJIyBSZWFkIHRoZSAubGEgZmlsZQotCWNhc2UgJGxpYiBpbgotCSovKiB8ICpcXCopIC4gJGxpYiA7OwotCSopIC4gLi8kbGliIDs7Ci0JZXNhYworCWZ1bmNfc291cmNlICIkbGliIgogCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAogCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAogCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCi0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgotCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgorCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCiAJZmkKIAogCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KQEAgLTIzODYsNDUgKzY0MjYsNDcgQEAKIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCiAJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciIDE+JjIKLQkgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKIAkgICAgZmkKIAkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgotCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgdG1wX2xpYnM9Ci0JICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KLQkgICAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0JICAgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7Ci0JICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGZpCi0JICAgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgotCSAgICBkb25lCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCiAJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKIAkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKwkgIGRvbmUKIAkgIGNvbnRpbnVlCiAJZmkgIyAkcGFzcyA9IGNvbnYKIAogCiAJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgogCWxpbmtsaWI9Ci0JZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgbGlua2xpYj0iJGwiCi0JZG9uZQorCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKwkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0geWVzIHx8CisJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKwllbHNlCisJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIGxpbmtsaWI9IiRsIgorCSAgZG9uZQorCWZpCiAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKIAlmaQogCiAJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCiAJaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCiAJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKIAkgIGZpCiAJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAogCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKQEAgLTI0MzMsOSArNjQ3NSw5IEBACiAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CiAJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CiAJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KLQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgogCSAgZWxzZQotCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorCSAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIKIAkgIGZpCiAJICBjb250aW51ZQogCWZpICMgJHBhc3MgPSBkbG9wZW4KQEAgLTI0NDYsMjQgKzY0ODgsMjUgQEAKIAkqKQogCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCiAJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIgMT4mMgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIiAxPiYyCisJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKIAkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCiAJICBmaQogCSAgOzsKIAllc2FjCi0JbGFuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgogCiAJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCiAJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgotCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIgMT4mMgorCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCiAJICAgIGRpcj0iJGxhZGlyIgogCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCiAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKIAkgIGVsc2UKLQkgICAgZGlyPSIkbGliZGlyIgotCSAgICBhYnNkaXI9IiRsaWJkaXIiCisJICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKIAkgIGZpCiAJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcwogCWVsc2UKQEAgLTI0NzEsMzIgKzY1MTQsNjIgQEAKIAkgICAgZGlyPSIkbGFkaXIiCiAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgotCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKIAkgIGVsc2UKIAkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCiAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCiAJICBmaQogCWZpICMgJGluc3RhbGxlZCA9IHllcwotCW5hbWU9YCRlY2hvICJYJGxhbmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJyAtZSAncy9ebGliLy8nYAorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCiAJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCiAJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCi0JICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCiAJICBmaQotCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCi0JICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KLQkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCi0JICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgotCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCi0JICBlbHNlCi0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCi0JICBmaQorCSAgY2FzZSAiJGhvc3QiIGluCisJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKwkgICAgICAjIHN5bWJvbHMgZnJvbSB0aGUgaW1wb3J0IGxpYnJhcnkgaWYgYSBzaGFyZWQgbGlicmFyeSBpcyBwcmVzZW50CisJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKwkgICAgICAjIFdlIHJlY292ZXIgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSBieSAnc2F2aW5nJyB0aGUgbGEgZmlsZQorCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgIGZpCisJICAgIDs7CisJICAgICogKQorCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIDs7CisJICBlc2FjCiAJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgogCiAJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KQEAgLTI1MTQsNyArNjU4Nyw3IEBACiAKIAogCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCi0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxhZGlyIgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgogCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKIAogCSAgbGlua2FsbGRlcGxpYnM9bm8KQEAgLTI1MjYsNyArNjU5OSwxMCBAQAogCSAgdG1wX2xpYnM9CiAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgOzsgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCQkgOzsKIAkgICAgZXNhYwogCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CiAJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KQEAgLTI1MzYsMTIgKzY2MTIsMTIgQEAKIAkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcwogCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgICBmaQotCSAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQotCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKIAkgIGRvbmUgIyBmb3IgZGVwbGliCiAJICBjb250aW51ZQogCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgpAQCAtMjU0OSwxNSArNjYyNSwxNCBAQAogCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCiAJICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAotCQkgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CiAJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KIAkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKIAkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCiAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoICIgaW4KLQkgICAgICAqIiAkZGlyICIqKSA7OwotCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGggJGFic2RpciIgOzsKKwkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIApAQCAtMjU2OSw3ICs2NjQ0LDcgQEAKIAkgICAgKikKIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCiAJICAgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICA7OwogCSAgICBlc2FjCkBAIC0yNTc4LDcgKzY2NTMsNyBAQAogCSAgICAqKQogCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCiAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICA7OwogCSAgICBlc2FjCkBAIC0yNTk1LDI3ICs2NjcwLDQzIEBACiAKIAlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5CiAJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKLQlpZiB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IGJ1aWx0ICYmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzIDsgdGhlbgorCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KIAkgIHVzZV9zdGF0aWNfbGlicz1ubwogCWZpCiAJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCiAJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KLQkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KLQkgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCi0JICAgIG5lZWRfcmVsaW5rPXllcwotCSAgZmkKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPXllcworCSAgICBmaQorCSAgICA7OworCSAgZXNhYwogCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKIAotCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uCi0JICAjIHNvbWUgc3lzdGVtcyAoZGFyd2luKQotCSAgaWYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbmsgOyB0aGVuCi0JICAgICRlY2hvCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgotCSAgICBlbHNlCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhawogCSAgICBmaQotCSAgICAkZWNobyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgogCSAgZmkKIAkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKIAkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCkBAIC0yNjI3LDcgKzY3MTgsNyBAQAogCSAgICAqKQogCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIDs7CiAJICAgIGVzYWMKQEAgLTI2MzYsNyArNjcyNyw3IEBACiAJICAgICopCiAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KIAkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIDs7CiAJICAgIGVzYWMKQEAgLTI2NDUsMTcgKzY3MzYsMTkgQEAKIAkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KIAkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKIAkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0JICAgIHJlYWxuYW1lPSIkMiIKLQkgICAgc2hpZnQ7IHNoaWZ0Ci0JICAgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9IiQxIgorCSAgICBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CiAJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCiAJICAgICAgc29uYW1lPSIkZGxuYW1lIgogCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KIAkgICAgICAjIGJsZWggd2luZG93cwogCSAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICAqY3lnd2luKiB8IG1pbmd3KikKLQkJbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAogCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCiAJCTs7CiAJICAgICAgZXNhYwpAQCAtMjY2Niw0MyArNjc1OSwyOSBAQAogCiAJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCiAJICAgIHNvcm9vdD0iJHNvbmFtZSIKLQkgICAgc29uYW1lPWAkZWNobyAkc29yb290IHwgJHtTRUR9IC1lICdzL14uKlwvLy8nYAotCSAgICBuZXdsaWI9ImxpYmltcC1gJGVjaG8gJHNvbmFtZSB8ICR7U0VEfSAncy9ebGliLy87cy9cLmRsbCQvLydgLmEiCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCisJICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCiAKIAkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKIAkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKIAkgICAgZWxzZQotCSAgICAgICRzaG93ICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKLQkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgICBjbWRzPSRleHRyYWN0X2V4cHN5bXNfY21kcwotCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JCUlGUz0iJHNhdmVfaWZzIgotCQlldmFsIGNtZD1cIiRjbWRcIgotCQkkc2hvdyAiJGNtZCIKLQkJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0JICAgICAgZG9uZQotCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCiAJICAgIGZpCiAKIAkgICAgIyBDcmVhdGUgJG5ld2xpYgogCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCi0JICAgICAgJHNob3cgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCi0JICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICAgICAgY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKLQkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCQlJRlM9IiRzYXZlX2lmcyIKLQkJZXZhbCBjbWQ9XCIkY21kXCIKLQkJJHNob3cgIiRjbWQiCi0JCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotCSAgICAgIGRvbmUKLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCiAJICAgIGZpCiAJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CiAJICAgIGRpcj0kb3V0cHV0X29iamRpcgogCSAgICBsaW5rbGliPSRuZXdsaWIKIAkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgogCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgogCSAgICBhZGRfc2hsaWJwYXRoPQogCSAgICBhZGRfZGlyPQogCSAgICBhZGQ9CkBAIC0yNzE3LDE3ICs2Nzk2LDIxIEBACiAJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCiAJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OwogCQkgICotKi1kYXJ3aW4qICkKLQkJICAgICMgaWYgdGhlIGxpYiBpcyBhIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QgbGluayBhZ2FpbnN0Ci0JCSAgICAjIGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBuZXcgd2FybmluZ3MgSSBhZGRlZAorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKIAkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAotICAgICAgICAgICAgICAgICAgICAgICRFR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCi0JCSAgICAgICRlY2hvICIqKiBXYXJuaW5nLCBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgotCQkgICAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgotCQkgICAgICAgICRlY2hvCi0JCSAgICAgICAgJGVjaG8gIioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCi0JCSAgICAgICAgJGVjaG8gIioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCi0JCSAgICAgIGVsc2UKLQkJICAgICAgICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgIGVjaG8KKwkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgogCQkgICAgICBmaQogCQkgICAgZmkKIAkJZXNhYwpAQCAtMjc0NSw3ICs2ODI4LDggQEAKIAkgICAgICBmaQogCSAgICAgIDs7CiAJICAgIHJlbGluaykKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgogCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCiAJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KIAkJYWRkX2Rpcj0iLUwkZGlyIgpAQCAtMjc1Myw3ICs2ODM3LDcgQEAKIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KIAkJICBjYXNlICRsaWJkaXIgaW4KIAkJICAgIFtcXC9dKikKLQkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCiAJCSAgICAgIDs7CiAJCSAgZXNhYwogCQlmaQpAQCAtMjc2OSwxNCArNjg1MywxMyBAQAogCSAgICBlc2FjCiAKIAkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgotCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNvbmZpZ3VyYXRpb24gZXJyb3I6IHVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCi0JICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgogCSAgICBmaQogCiAJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgogCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KIAkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKLQkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgpAQCAtMjc4NSwyMyArNjg2OCwyNCBAQAogCSAgICBlbHNlCiAJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgogCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCi0JICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmIFwKLQkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYgXAorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgogCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCiAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCiAJCSoiOiRsaWJkaXI6IiopIDs7Ci0JCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwogCQllc2FjCiAJICAgICAgZmkKIAkgICAgZmkKIAkgIGZpCiAKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgogCSAgICBhZGRfc2hsaWJwYXRoPQogCSAgICBhZGRfZGlyPQogCSAgICBhZGQ9CiAJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCi0JICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KIAkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCiAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCiAJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgpAQCAtMjgwOSwxNSArNjg5MywxNSBAQAogCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgogCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCiAJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKLQkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwogCSAgICAgIGVzYWMKIAkgICAgICBhZGQ9Ii1sJG5hbWUiCiAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgogCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgotCSAgICAgICAgYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKIAkgICAgICBlbHNlCi0JICAgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKIAkgICAgICBmaQogCSAgICBlbHNlCiAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KQEAgLTI4MjYsNyArNjkxMCw3IEBACiAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KIAkJY2FzZSAkbGliZGlyIGluCiAJCSAgW1xcL10qKQotCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgogCQkgICAgOzsKIAkJZXNhYwogCSAgICAgIGZpCkBAIC0yODYxLDIxICs2OTQ1LDIxIEBACiAKIAkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbwogCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KLQkgICAgJGVjaG8KLQkgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgotCSAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkgICAgJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBlY2hvCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKIAkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KLQkgICAgICAkZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgotCSAgICAgICRlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKLQkgICAgICAkZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCiAJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQkJJGVjaG8KLQkJJGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgotCQkkZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKLQkJJGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkJJGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCQllY2hvCisJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCWVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgogCSAgICAgIGZpCiAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCiAJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKQEAgLTI4OTksMTI2ICs2OTgzLDExMyBAQAogCSAgICB0ZW1wX2RlcGxpYnM9CiAJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgICBjYXNlICRsaWJkaXIgaW4KLQkgICAgICAtUiopIHRlbXBfeHJwYXRoPWAkZWNobyAiWCRsaWJkaXIiIHwgJFhzZWQgLWUgJ3MvXi1SLy8nYAorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkJICAgY2FzZSAiICR4cnBhdGggIiBpbgogCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7Ci0JCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CiAJCSAgIGVzYWM7OwotCSAgICAgICopIHRlbXBfZGVwbGlicz0iJHRlbXBfZGVwbGlicyAkbGliZGlyIjs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCiAJICBmaQogCi0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCiAJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKIAkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKIAkgIHRtcF9saWJzPQogCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGNhc2UgJGRlcGxpYiBpbgorICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKyAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CisgICAgICAgICAgICBlc2FjCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCiAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKyAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQotCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIGRvbmUKIAogCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCiAJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCiAJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBwYXRoPQogCSAgICAgIGNhc2UgJGRlcGxpYiBpbgogCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKIAkgICAgICAqLmxhKQotCQlkaXI9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCQl0ZXN0ICJYJGRpciIgPSAiWCRkZXBsaWIiICYmIGRpcj0iLiIKKwkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAkJY2FzZSAkZGlyIGluCiAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OwogCQkqKQogCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKIAkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgotCQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKIAkJICAgIGFic2Rpcj0iJGRpciIKIAkJICBmaQogCQkgIDs7CiAJCWVzYWMKLQkJaWYgZ3JlcCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgIHBhdGg9IiRhYnNkaXIvJG9iamRpciIKLQkJZWxzZQotCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkJICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkJICBmaQotCQkgIGlmIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIjsgdGhlbgotCQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIgMT4mMgotCQkgIGZpCi0JCSAgcGF0aD0iJGFic2RpciIKLQkJZmkKLQkJZGVwZGVwbD0KKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KIAkJY2FzZSAkaG9zdCBpbgogCQkqLSotZGFyd2luKikKLQkJICAjIHdlIGRvIG5vdCB3YW50IHRvIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicywKLQkJICAjIGJ1dCBuZWVkIHRvIGxpbmsgYWdhaW5zdCBzaGFyZWQKKwkJICBkZXBkZXBsPQogCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICBldmFsIGRlcGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAogCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KIAkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbwogCQkgICAgICBkZXBkZXBsPSR0bXAKIAkJICAgIGRvbmUKLQkJICAgIGlmIHRlc3QgLWYgIiRkZXBsaWJkaXIvJGRlcGRlcGwiIDsgdGhlbgotCQkgICAgICBkZXBkZXBsPSIkZGVwbGliZGlyLyRkZXBkZXBsIgotCSAgICAgIAkgICAgZWxpZiB0ZXN0IC1mICIkcGF0aC8kZGVwZGVwbCIgOyB0aGVuCi0JCSAgICAgIGRlcGRlcGw9IiRwYXRoLyRkZXBkZXBsIgotCQkgICAgZWxzZQotCQkgICAgICAjIENhbid0IGZpbmQgaXQsIG9oIHdlbGwuLi4KLQkJICAgICAgZGVwZGVwbD0KKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBwYXRoPQogCQkgICAgZmkKLQkJICAgICMgZG8gbm90IGFkZCBwYXRocyB3aGljaCBhcmUgYWxyZWFkeSB0aGVyZQotCQkgICAgY2FzZSAiICRuZXdsaWJfc2VhcmNoX3BhdGggIiBpbgotCQkgICAgKiIgJHBhdGggIiopIDs7Ci0JCSAgICAqKSBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJHBhdGgiOzsKLQkJICAgIGVzYWMKIAkJICBmaQotCQkgIHBhdGg9IiIKIAkJICA7OwogCQkqKQotCQkgIHBhdGg9Ii1MJHBhdGgiCisJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCiAJCSAgOzsKIAkJZXNhYworCQllbHNlCisJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0iLUwkYWJzZGlyIgorCQlmaQogCQk7OwotCSAgICAgIC1sKikKLQkJY2FzZSAkaG9zdCBpbgotCQkqLSotZGFyd2luKikKLQkJICAjIEFnYWluLCB3ZSBvbmx5IHdhbnQgdG8gbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJpZXMKLQkJICBldmFsIHRtcF9saWJzPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgInMsXlwtbCwsImAKLQkJICBmb3IgdG1wIGluICRuZXdsaWJfc2VhcmNoX3BhdGggOyBkbwotCQkgICAgaWYgdGVzdCAtZiAiJHRtcC9saWIkdG1wX2xpYnMuZHlsaWIiIDsgdGhlbgotCQkgICAgICBldmFsIGRlcGRlcGw9IiR0bXAvbGliJHRtcF9saWJzLmR5bGliIgotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICBkb25lCi0JCSAgcGF0aD0iIgotCQkgIDs7Ci0JCSopIGNvbnRpbnVlIDs7Ci0JCWVzYWMKLQkJOzsKLQkgICAgICAqKSBjb250aW51ZSA7OwogCSAgICAgIGVzYWMKIAkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgogCSAgICAgICoiICRwYXRoICIqKSA7OwogCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OwogCSAgICAgIGVzYWMKLQkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgotCSAgICAgICoiICRkZXBkZXBsICIqKSA7OwotCSAgICAgICopIGRlcGxpYnM9IiRkZXBkZXBsICRkZXBsaWJzIiA7OwotCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCiAJZmkgIyBsaW5rbW9kZSA9IGxpYgogICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCisJICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgorCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQogICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgogICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCiAJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcwpAQCAtMzAzMyw3ICs3MTA0LDcgQEAKIAkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KIAkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCiAJICAgICoiICRkaXIgIiopIDs7Ci0JICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OwogCSAgICBlc2FjCiAJICBkb25lCiAJICBuZXdsaWJfc2VhcmNoX3BhdGg9CkBAIC0zMDkxLDEwICs3MTYyLDEwIEBACiAJICAgIC1MKikKIAkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KIAkgICAgICAqIiAkZGVwbGliICIqKSA7OwotCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIDs7Ci0JICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OwogCSAgICBlc2FjCiAJICBkb25lCiAJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgpAQCAtMzExMCw5OSArNzE4MSw5NiBAQAogCSAgOzsKIAllc2FjCiAJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgotCSAgdG1wX2xpYnM9IiR0bXBfbGlicyAkaSIKKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCiAJZmkKICAgICAgIGRvbmUKICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKICAgICBkb25lICMgZm9yIHBhc3MKICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgogICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCiAgICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKICAgICBmaQogCiAgICAgY2FzZSAkbGlua21vZGUgaW4KICAgICBvbGRsaWIpCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKICAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KICAgICAgICpcIC1sKiB8ICpcIC1MKikKLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyIDs7CisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OwogICAgICAgZXNhYwogCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgogICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCiAgICAgICBvbGRsaWJzPSIkb3V0cHV0IgotICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCiAgICAgICA7OwogCiAgICAgbGliKQogICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgogICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgogICAgICAgbGliKikKLQluYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nIC1lICdzL15saWIvLydgCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCiAJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCiAJOzsKICAgICAgICopCi0JaWYgdGVzdCAiJG1vZHVsZSIgPSBubzsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQorCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIgorCiAJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KIAkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKLQkgIG5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLydgCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCiAJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKIAllbHNlCi0JICBsaWJuYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nYAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJZmkKIAk7OwogICAgICAgZXNhYwogCiAgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KIAlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIgMj4mMQotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKIAllbHNlCi0JICAkZWNobwotCSAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgotCSAgJGVjaG8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCi0JICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgogCWZpCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKIAogICAgICAgc2V0IGR1bW15ICRycGF0aAotICAgICAgaWYgdGVzdCAiJCMiIC1ndCAyOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiIDE+JjIKLSAgICAgIGZpCi0gICAgICBpbnN0YWxsX2xpYmRpcj0iJDIiCisgICAgICBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorCisgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCiAKICAgICAgIG9sZGxpYnM9CiAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCkBAIC0zMjE2LDI1ICs3Mjg0LDIxIEBACiAJICBidWlsZF9vbGRfbGlicz15ZXMKIAlmaQogCi0JaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIiAxPiYyCi0JZmkKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgogCi0JaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiIDE+JjIKLQlmaQorCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKICAgICAgIGVsc2UKIAogCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCiAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCiAJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CiAJSUZTPSIkc2F2ZV9pZnMiCiAKLQlpZiB0ZXN0IC1uICIkOCI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQorCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKIAogCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCiAJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKQEAgLTMyNDIsOSArNzMwNiw5IEBACiAKIAljYXNlICR2aW5mb19udW1iZXIgaW4KIAl5ZXMpCi0JICBudW1iZXJfbWFqb3I9IiQyIgotCSAgbnVtYmVyX21pbm9yPSIkMyIKLQkgIG51bWJlcl9yZXZpc2lvbj0iJDQiCisJICBudW1iZXJfbWFqb3I9IiQxIgorCSAgbnVtYmVyX21pbm9yPSIkMiIKKwkgIG51bWJlcl9yZXZpc2lvbj0iJDMiCiAJICAjCiAJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAogCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KQEAgLTMyNTQsMTcgKzczMTgsMTkgQEAKIAkgICMKIAkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgogCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCi0JICAgIGN1cnJlbnQ9YGV4cHIgJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3JgCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgogCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKIAkgICAgOzsKLQkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxxbnh8c3Vub3MpCiAJICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCiAJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgogCSAgICBhZ2U9IjAiCiAJICAgIDs7CiAJICBpcml4fG5vbnN0b3B1eCkKLQkgICAgY3VycmVudD1gZXhwciAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcmAKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCiAJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgogCSAgICBsdF9pcml4X2luY3JlbWVudD1ubwpAQCAtMzI3Miw5ICs3MzM4LDkgQEAKIAkgIGVzYWMKIAkgIDs7CiAJbm8pCi0JICBjdXJyZW50PSIkMiIKLQkgIHJldmlzaW9uPSIkMyIKLQkgIGFnZT0iJDQiCisJICBjdXJyZW50PSIkMSIKKwkgIHJldmlzaW9uPSIkMiIKKwkgIGFnZT0iJDMiCiAJICA7OwogCWVzYWMKIApAQCAtMzI4MiwzNCArNzM0OCwzMCBAQAogCWNhc2UgJGN1cnJlbnQgaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IENVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiIDE+JjIKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAljYXNlICRyZXZpc2lvbiBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19lcnJvciAiUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAljYXNlICRhZ2UgaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIgMT4mMgotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCWZpCiAKIAkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCkBAIC0zMzIyLDEwICs3Mzg0LDEyIEBACiAJZGFyd2luKQogCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgogCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgotCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CiAJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKIAkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCi0JICBtaW5vcl9jdXJyZW50PWBleHByICRjdXJyZW50ICsgMWAKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCiAJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCiAJICA7OwpAQCAtMzMzNywxNSArNzQwMSwxNyBAQAogCiAJZnJlZWJzZC1lbGYpCiAJICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiOworCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCiAJICA7OwogCiAJaXJpeCB8IG5vbnN0b3B1eCkKIAkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KLQkgICAgbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgZWxzZQotCSAgICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2UgKyAxYAorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKIAkgIGZpCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwogCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCiAJICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKIAkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwpAQCAtMzM1NSw4ICs3NDIxLDEwIEBACiAJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgogCSAgbG9vcD0kcmV2aXNpb24KIAkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KLQkgICAgaWZhY2U9YGV4cHIgJHJldmlzaW9uIC0gJGxvb3BgCi0JICAgIGxvb3A9YGV4cHIgJGxvb3AgLSAxYAorCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgogCSAgZG9uZQogCkBAIC0zMzY2LDI1ICs3NDM0LDM0IEBACiAJICA7OwogCiAJbGludXgpCi0JICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKIAkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgogCSAgOzsKIAogCW9zZikKLQkgIG1ham9yPS5gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCiAJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgogCiAJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgogCSAgbG9vcD0kYWdlCiAJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCi0JICAgIGlmYWNlPWBleHByICRjdXJyZW50IC0gJGxvb3BgCi0JICAgIGxvb3A9YGV4cHIgJGxvb3AgLSAxYAorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgogCSAgZG9uZQogCiAJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCi0JICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorCSAgOzsKKworCXFueCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKIAkgIDs7CiAKIAlzdW5vcykKQEAgLTMzOTUsMTQgKzc0NzIsMTMgQEAKIAl3aW5kb3dzKQogCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQogCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KLQkgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKIAkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKIAkgIDs7CiAKIAkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIiAxPiYyCi0JICAkZWNobyAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4gIFNlZSB0aGUgJFBBQ0tBR0UgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCiAJICA7OwogCWVzYWMKIApAQCAtMzQzNiw3ICs3NTEyLDcgQEAKIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCiAJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KIAkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiB1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCisJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKIAkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCiAJICAgIGJ1aWxkX29sZF9saWJzPXllcwogCSAgZmkKQEAgLTM0NDQsNTggKzc1MjAsNjIgQEAKIAkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgogCWZpCisKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgorICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KIAkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQogCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgogCXJlbW92ZWxpc3Q9Ci0JdGVtcHJlbW92ZWxpc3Q9YCRlY2hvICIkb3V0cHV0X29iamRpci8qImAKKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAogCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KIAkgIGNhc2UgJHAgaW4KLQkgICAgKi4kb2JqZXh0KQorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCiAJICAgICAgIDs7CiAJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCiAJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgotCSAgICAgICAgIGlmIGVjaG8gJHAgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCi0JICAgICAgICAgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KIAkJICAgY29udGludWUKIAkJIGZpCiAJICAgICAgIGZpCi0JICAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRwIgorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCiAJICAgICAgIDs7CiAJICAgICopIDs7CiAJICBlc2FjCiAJZG9uZQotCWlmIHRlc3QgLW4gIiRyZW1vdmVsaXN0IjsgdGhlbgotCSAgJHNob3cgIiR7cm19ciAkcmVtb3ZlbGlzdCIKLQkgICRydW4gJHtybX1yICRyZW1vdmVsaXN0Ci0JZmkKKwl0ZXN0IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciBcJHJlbW92ZWxpc3QiCiAgICAgICBmaQogCiAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCi0Jb2xkbGlicz0iJG9sZGxpYnMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKIAogCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KLQlvbGRvYmpzPSIkb2JqcyAiYCRlY2hvICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0nJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAogICAgICAgZmkKIAogICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KICAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbwotICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRlY2hvICIkbGliX3NlYXJjaF9wYXRoICIgfCAke1NFRH0gLWUgInMlICRwYXRoICUgJWciYAotICAgICAgIwlkZXBsaWJzPWAkZWNobyAiJGRlcGxpYnMgIiB8ICR7U0VEfSAtZSAicyUgLUwkcGF0aCAlICVnImAKLSAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkZWNobyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJHtTRUR9IC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAogICAgICAgI2RvbmUKIAogICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCiAJdGVtcF94cnBhdGg9CiAJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbwotCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKwkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgogCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KIAkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICBlc2FjCiAJZG9uZQogCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCkBAIC0zNTA5LDcgKzc1ODksNyBAQAogICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCiAJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KIAkqIiAkbGliICIqKSA7OwotCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJKikgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQogCkBAIC0zNTE5LDE5ICs3NTk5LDE5IEBACiAgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KIAljYXNlICIkZGxwcmVmaWxlcyAiIGluCiAJKiIgJGxpYiAiKikgOzsKLQkqKSBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliIiA7OworCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKIAogICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KIAlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCiAJICBjYXNlICRob3N0IGluCi0JICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKikKKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQogCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCiAJICAgIDs7CiAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCiAJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1mcmFtZXdvcmsgU3lzdGVtIgorCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgogCSAgICA7OwogCSAgKi0qLW5ldGJzZCopCiAJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgpAQCAtMzU0NSwxMCArNzYyNSwxMCBAQAogCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQogCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCiAJICAgIDs7Ci0gCSAgKikKKwkgICopCiAJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCiAJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KLQkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisJICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKIAkgICAgZmkKIAkgICAgOzsKIAkgIGVzYWMKQEAgLTM1ODIsMTIwICs3NjYyLDEzOSBAQAogCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKIAkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCiAJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KLQkgICRybSBjb25mdGVzdC5jCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKIAkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKIAkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQogRU9GCi0JICAkcm0gY29uZnRlc3QKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKIAkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCiAJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKIAkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCi0JICAgICAgbmFtZT1gZXhwciAkaSA6ICctbFwoLipcKSdgCi0JICAgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiAhPSAiIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkgICoiICRpICIqKQotCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgICBpPSIiCiAJCSAgICA7OwogCQkgIGVzYWMKLQkgICAgICAgIGZpCisJCWZpCiAJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLQkJICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCi0JCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgXFwkZWNobyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcImAKLQkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzCi0JCSAgZGVwbGliX21hdGNoPSQyCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCiAJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgotCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgZWxzZQogCQkgICAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgICAkZWNobwotCQkgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgotCQkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCi0JCSAgICAkZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgotCQkgICAgJGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGVjaG8KKwkJICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBJIGJlbGlldmUgeW91IGRvIG5vdCBoYXZlIgorCQkgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgICAgZWNobyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgogCQkgIGZpCiAJCWZpCi0JICAgICAgZWxzZQotCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKLQkgICAgICBmaQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJOzsKKwkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgIGVsc2UKIAkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCiAJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KIAkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCi0JICAgICAgbmFtZT1gZXhwciAkaSA6ICctbFwoLipcKSdgCi0JICAgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiAhPSAiIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCi0JCSRybSBjb25mdGVzdAorCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKIAkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KIAkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCiAJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSAgICAqIiAkaSAiKikKLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICAgICAgaT0iIgogCQkgICAgICA7OwogCQkgICAgZXNhYwogCQkgIGZpCiAJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgotCQkgICAgbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAotCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgXFwkZWNobyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcImAKLQkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXMKLQkJICAgIGRlcGxpYl9tYXRjaD0kMgorCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgICAgZGVwbGliX21hdGNoPSQxCiAJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCi0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgICBlbHNlCiAJCSAgICAgIGRyb3BwZWRkZXBzPXllcwotCQkgICAgICAkZWNobwotCQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCi0JCSAgICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkgICAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJICAgICAgJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJICAgICAgJGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgotCQkgICAgICAkZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgICBlY2hvCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgogCQkgICAgZmkKIAkJICBmaQogCQllbHNlCiAJCSAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgJGVjaG8KLQkJICAkZWNobyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgotCQkgICRlY2hvICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCi0JCSAgJGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCi0JCSAgJGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCSAgZWNobworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKIAkJZmkKLQkgICAgICBlbHNlCi0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgotCSAgICAgIGZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgZmkKIAkgIDs7CiAJZmlsZV9tYWdpYyopCi0JICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAogCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbwotCSAgICBuYW1lPWBleHByICRhX2RlcGxpYiA6ICctbFwoLipcKSdgCi0JICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgotICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSoiICRhX2RlcGxpYiAiKikKLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKIAkJICBhX2RlcGxpYj0iIgogCQkgIDs7CiAJCWVzYWMKIAkgICAgICBmaQogCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCi0JCWxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCisJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKwkJZWxzZQorCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCisJCWZpCisJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCiAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwotCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisJCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgICAkbm9jYXNlZ2xvYgorCQkgIGVsc2UKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmaQogCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KIAkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KLQkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIFwKLQkJCSB8IGdyZXAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgogCQkJY29udGludWUKIAkJICAgICAgZmkKIAkJICAgICAgIyBUaGUgc3RhdGVtZW50IGFib3ZlIHRyaWVzIHRvIGF2b2lkIGVudGVyaW5nIGFuCkBAIC0zNzA4LDEzICs3ODA3LDEzIEBACiAJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCiAJCQljYXNlICRwb3RsaWJsaW5rIGluCiAJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKLQkJCSopIHBvdGxpYj1gJGVjaG8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CiAJCQllc2FjCiAJCSAgICAgIGRvbmUKLQkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIFwKLQkJCSB8ICR7U0VEfSAxMHEgXAotCQkJIHwgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKwkJCSAkU0VEIC1lIDEwcSB8CisJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCiAJCQlhX2RlcGxpYj0iIgogCQkJYnJlYWsgMgogCQkgICAgICBmaQpAQCAtMzcyMyw1MCArNzgyMiw1MiBAQAogCSAgICAgIGZpCiAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KIAkJZHJvcHBlZGRlcHM9eWVzCi0JCSRlY2hvCi0JCSRlY2hvICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKLQkJJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQkkZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKIAkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCi0JCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgogCQllbHNlCi0JCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCi0JCSAgJGVjaG8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKIAkJZmkKIAkgICAgICBmaQotCSAgICBlbHNlCisJICAgICAgOzsKKwkgICAgKikKIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgotCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKLQkgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCiAJICA7OwogCW1hdGNoX3BhdHRlcm4qKQotCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZAotCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMiBcKC4qXCkiYAorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKIAkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgICAgbmFtZT1gZXhwciAkYV9kZXBsaWIgOiAnLWxcKC4qXCknYAotCSAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KLQkgICAgaWYgdGVzdCAtbiAiJG5hbWUiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJKiIgJGFfZGVwbGliICIqKQotCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgogCQkgIGFfZGVwbGliPSIiCiAJCSAgOzsKIAkJZXNhYwogCSAgICAgIGZpCiAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KLQkJbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCiAJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCiAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwogCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKLQkJICAgIGlmIGV2YWwgJGVjaG8gXCIkcG90ZW50X2xpYlwiIDI+L2Rldi9udWxsIFwKLQkJICAgICAgICB8ICR7U0VEfSAxMHEgXAotCQkgICAgICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCiAJCSAgICAgIGFfZGVwbGliPSIiCiAJCSAgICAgIGJyZWFrIDIKIAkJICAgIGZpCkBAIC0zNzc1LDQ2ICs3ODc2LDQ4IEBACiAJICAgICAgZmkKIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgogCQlkcm9wcGVkZGVwcz15ZXMKLQkJJGVjaG8KLQkJJGVjaG8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgotCQkkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCSRlY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgogCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KLQkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCiAJCWVsc2UKLQkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKLQkJICAkZWNobyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgogCQlmaQogCSAgICAgIGZpCi0JICAgIGVsc2UKKwkgICAgICA7OworCSAgICAqKQogCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCi0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgotCSAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYwogCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KIAkgIDs7CiAJbm9uZSB8IHVua25vd24gfCAqKQogCSAgbmV3ZGVwbGlicz0iIgotCSAgdG1wX2RlcGxpYnM9YCRlY2hvICJYICRkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMkLy8nIFwKLQkgICAgLWUgJ3MvIC1bTFJdW14gXSovL2cnYAorCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKIAkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KIAkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCi0JICAgICAgdG1wX2RlcGxpYnM9YCRlY2hvICJYICR0bXBfZGVwbGlicyIgfCAke1NFRH0gLWUgIjFzLF5YLCwiIC1lICJzLCRpLCwiYAorCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAogCSAgICBkb25lCiAJICBmaQotCSAgaWYgJGVjaG8gIlggJHRtcF9kZXBsaWJzIiB8ICRYc2VkIC1lICdzL1sgCV0vL2cnIFwKLQkgICAgfCBncmVwIC4gPi9kZXYvbnVsbDsgdGhlbgotCSAgICAkZWNobworCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobwogCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKIAkgICAgZWxzZQotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCiAJICAgIGZpCi0JICAgICRlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCiAJICAgIGRyb3BwZWRkZXBzPXllcwotCSAgZmkKKwkgICAgOzsKKwkgIGVzYWMKIAkgIDs7CiAJZXNhYwogCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKQEAgLTM4MjUsMjQgKzc5MjgsMjQgQEAKIAogCWNhc2UgJGhvc3QgaW4KIAkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCi0JICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgbmV3ZGVwbGlicz1gJGVjaG8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCiAJICA7OwogCWVzYWMKIAogCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KIAkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCi0JICAgICRlY2hvCi0JICAgICRlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKLQkgICAgJGVjaG8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgotCSAgICAkZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCi0JICAgICRlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGVjaG8KKwkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKIAkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQkgICAgICAkZWNobwotCSAgICAgICRlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKLQkgICAgICAkZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKLQkgICAgICAkZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCSAgICAgICRlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCiAJICAgIGZpCiAJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgogCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCkBAIC0zODUyLDE2ICs3OTU1LDE2IEBACiAJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCiAJICAgIGZpCiAJICBlbHNlCi0JICAgICRlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgotCSAgICAkZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKLQkgICAgJGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKwkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgogCiAJICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KLQkgICAgICAkZWNobwotCSAgICAgICRlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgotCSAgICAgICRlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKLQkgICAgICAkZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgotCSAgICAgICRlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgorCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorCSAgICAgIGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICBlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgogCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgogCQlvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgogCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCkBAIC0zODc1LDcgKzc5NzgsMTQgQEAKIAkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKIAlkZXBsaWJzPSRuZXdkZXBsaWJzCiAgICAgICBmaQotCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCiAKICAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAogICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKQEAgLTM4ODYsNyArNzk5Niw3IEBACiAJKikKIAkgIGNhc2UgIiAkZGVwbGlicyAiIGluCiAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCi0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKIAkgIGVzYWMKIAkgIDs7CiAJZXNhYwpAQCAtMzg5NiwxNSArODAwNiwxNCBAQAogCS1MKikKIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgogCSAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAkgIGVzYWMKIAkgIDs7Ci0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCiAgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCiAKLQogICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgogICAgICAgbGlicmFyeV9uYW1lcz0KICAgICAgIG9sZF9saWJyYXJ5PQpAQCAtMzkxNywxMCArODAyNiwxMiBAQAogCSAgaGFyZGNvZGVfbGliZGlycz0KIAkgIGRlcF9ycGF0aD0KIAkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCi0JICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwogCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CiAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgogCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCiAJCWVsc2UKQEAgLTM5MjksMTggKzgwNDAsMTggQEAKIAkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCiAJCSAgICA7OwogCQkgICopCi0JCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKIAkJICAgIDs7CiAJCSAgZXNhYwogCQlmaQogCSAgICAgIGVsc2UKIAkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgogCSAgICAgIGZpCiAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgogCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KIAkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCSAgZG9uZQpAQCAtMzk0OSwxMCArODA2MCw3IEBACiAJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KIAkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCi0JICAgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCi0JICAgICAgKlwkTEQqKSBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIgOzsKLQkgICAgICAqKSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiA7OwotCSAgICAgIGVzYWMKKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIKIAkgICAgZWxzZQogCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogCSAgICBmaQpAQCAtMzk2MSw3ICs4MDY5LDcgQEAKIAkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KIAkgICAgcnBhdGg9CiAJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCi0JICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKIAkgICAgZG9uZQogCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKIAkgIGZpCkBAIC0zOTY5LDcgKzgwNzcsNyBAQAogCWZpCiAKIAlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCi0JdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgogCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCiAJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCiAJZmkKQEAgLTM5NzgsOCArODA4Niw5IEBACiAJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKIAlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKLQlyZWFsbmFtZT0iJDIiCi0Jc2hpZnQ7IHNoaWZ0CisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKIAogCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KIAkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKQEAgLTM5OTQsODMgKzgxMDMsMTY2IEBACiAJbGlua25hbWVzPQogCWZvciBsaW5rCiAJZG8KLQkgIGxpbmtuYW1lcz0iJGxpbmtuYW1lcyAkbGluayIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgogCWRvbmUKIAogCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCi0JdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgorCWZpCisKKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorCWNhc2UgJGhvc3Rfb3MgaW4KKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQorCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKwkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZworCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQorCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIGZpCisJICBmaQorCSAgOzsKKwllc2FjCiAKIAkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwogCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KIAkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgogCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgotCSAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKIAkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcwogCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCiAJICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICAgICBpZiBsZW49YGV4cHIgIlgkY21kIiA6ICIuKiJgICYmCi0JICAgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgotCSAgICAgICAgJHNob3cgIiRjbWQiCi0JICAgICAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLQkgICAgICAgIHNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKwkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgorCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisJCSAgZXZhbCBjbWQ9XCIkY21kMVwiCisJCSAgZnVuY19sZW4gIiAkY21kIgorCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJCSAgOzsKKwkJKikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworCQkgIDs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAorCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorCSAgICAgIHRoZW4KKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworCQlzYXZlX291dHB1dD0kb3V0cHV0CisJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCisJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJCWRvbmUgPiAiJG91dHB1dCIKKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJb3V0cHV0PSRzYXZlX291dHB1dAorCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKIAkgICAgICBlbHNlCi0JICAgICAgICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KLQkgICAgICAgICRzaG93ICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKLQkgICAgICAgIHNraXBwZWRfZXhwb3J0PToKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKIAkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKIAkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCiAJCWJyZWFrCiAJICAgICAgZmkKIAkgICAgZG9uZQogCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgICAgICRzaG93ICIkRUdSRVAgLWUgXCIkZXhwb3J0X3N5bWJvbHNfcmVnZXhcIiBcIiRleHBvcnRfc3ltYm9sc1wiID4gXCIke2V4cG9ydF9zeW1ib2xzfVRcIiIKLQkgICAgICAkcnVuIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJwotCSAgICAgICRzaG93ICIkbXYgXCIke2V4cG9ydF9zeW1ib2xzfVRcIiBcIiRleHBvcnRfc3ltYm9sc1wiIgotCSAgICAgICRydW4gZXZhbCAnJG12ICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKIAkgICAgZmkKIAkgIGZpCiAJZmkKIAogCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICRydW4gZXZhbCAnJGVjaG8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKIAlmaQogCiAJdG1wX2RlcGxpYnM9CiAJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbwotCQljYXNlICIgJGNvbnZlbmllbmNlICIgaW4KLQkJKiIgJHRlc3RfZGVwbGliICIqKSA7OwotCQkqKQotCQkJdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCi0JCQk7OwotCQllc2FjCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYwogCWRvbmUKIAlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCiAKIAlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQogCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgogCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKIAkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CiAJICBlbHNlCiAJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0JICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQotCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQogCSAgZmkKIAlmaQotCQorCiAJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgogCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCi0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKIAlmaQogCiAJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCi0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCi0JICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1VICYmICRtdiAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KIAlmaQogCiAJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgpAQCAtNDA4MywyMiArODI3NSwyNCBAQAogCSAgICBjbWRzPSRtb2R1bGVfY21kcwogCSAgZmkKIAllbHNlCi0JaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KLQkgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgotCSAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcwotCWVsc2UKLQkgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCi0JICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcwogCSAgZmkKIAlmaQogCiAJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgotCSAgIGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KIAkgIDoKIAllbHNlCi0JICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UuCi0JICAkZWNobyAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCiAKIAkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCiAJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKQEAgLTQxMTIsNzcgKzgzMDYsMTcxIEBACiAJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcwogCSAgZmkKIAkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKLQkgIG91dHB1dF9sYT1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAogCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKIAkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KIAkgIHRlc3RfY21kcz0KIAkgIGNvbmNhdF9jbWRzPQogCSAgb2JqbGlzdD0KLQkgIGRlbGZpbGVzPQogCSAgbGFzdF9yb2JqPQogCSAgaz0xCi0JICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKLQkgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgotCSAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCi0JICBkbwotCSAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKLQkgICAgaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKLQkgICAgICAgeyBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCi0JCSB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiI7IH07IHRoZW4KLQkgICAgICBvYmpsaXN0PSIkb2JqbGlzdCAkb2JqIgotCSAgICBlbHNlCi0JICAgICAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKLQkgICAgICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgotCSAgICAgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KLQkJIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KLQkJZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKLQkgICAgICBlbHNlCi0JCSMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCi0JCSMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0JCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKLQkgICAgICBmaQotCSAgICAgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAotCSAgICAgIGs9YGV4cHIgJGsgKyAxYAotCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAotCSAgICAgIG9iamxpc3Q9JG9iagotCSAgICAgIGxlbj0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZWNobyAnKScgPj4gJG91dHB1dAorCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJICAgIDogPiAkb3V0cHV0CisJICAgIHNldCB4ICRzYXZlX2xpYm9ianMKKwkgICAgc2hpZnQKKwkgICAgZmlyc3RvYmo9CisJICAgIGlmIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzOyB0aGVuCisJICAgICAgZmlyc3RvYmo9IiQxICIKKwkgICAgICBzaGlmdAogCSAgICBmaQotCSAgZG9uZQotCSAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0Ci0JICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAotCSAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0JICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KLQkgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgICAgICBsZW49JGxlbjAKIAotCSAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KLQkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgotCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgotCSAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgbGlib2Jqcz0kb3V0cHV0Ci0JICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCi0JICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRleHBvcnRfc3ltYm9sc19jbWRzXCIKLSAgICAgICAgICBmaQorCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgorCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICAgIGRvCisJCWZ1bmNfbGVuICIgJG9iaiIKKwkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8CisJCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCQllbHNlCisJCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKKwkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgorCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKwkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJCSAgZWxzZQorCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCQkgIGZpCisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgZnVuY19hcml0aCAkayArIDEKKwkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIG9iamxpc3Q9IiAkb2JqIgorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgogCi0JICAjIFNldCB1cCBhIGNvbW1hbmQgdG8gcmVtb3ZlIHRoZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcwotCSAgIyBhZnRlciB0aGV5IGFyZSB1c2VkLgotCSAgaT0wCi0JICB3aGlsZSB0ZXN0ICIkaSIgLWx0ICIkayIKLQkgIGRvCi0JICAgIGk9YGV4cHIgJGkgKyAxYAotCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtpfS4kb2JqZXh0IgotCSAgZG9uZQorCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQogCi0JICAkZWNobyAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKwkgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBsaWJvYmpzPSRvdXRwdXQKKwkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgZmkKIAotCSAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgotCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCiAJICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICAkc2hvdyAiJGNtZCIKLQkgICAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0JICBkb25lCi0JICBJRlM9IiRzYXZlX2lmcyIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICBmaQogCiAJICBsaWJvYmpzPSRvdXRwdXQKIAkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgpAQCAtNDE5MCw2ICs4NDc4LDcgQEAKIAogCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCiAJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQogCSAgZmkKIAkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCiAJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KQEAgLTQyMDIsMjggKzg0OTEsNDUgQEAKIAkgICAgICBjbWRzPSRtb2R1bGVfY21kcwogCSAgICBmaQogCSAgZWxzZQotCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KLQkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcwotCSAgZWxzZQotCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKIAkgICAgZmkKIAkgIGZpCi0KLQkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0aGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMKLQkgICMgdG8gdGhlIGp1c3QtcmVzZXQgJGNtZHMuCi0JICBldmFsIGNtZHM9XCJcJGNtZHN+XCRybSAkZGVsZmlsZXNcIgogCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKwogCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwogCWZvciBjbWQgaW4gJGNtZHM7IGRvCiAJICBJRlM9IiRzYXZlX2lmcyIKIAkgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAkc2hvdyAiJGNtZCIKLQkgICRydW4gZXZhbCAiJGNtZCIgfHwgeworCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CiAJICAgIGx0X2V4aXQ9JD8KIAogCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQkgICAgaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCi0JICAgICAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICR7cmVhbG5hbWV9VCAmJiAkbXYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknCisJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKIAkgICAgZmkKIAogCSAgICBleGl0ICRsdF9leGl0CkBAIC00MjMyLDEzICs4NTM4LDEyIEBACiAJSUZTPSIkc2F2ZV9pZnMiCiAKIAkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJG12ICIkcmVhbG5hbWUiVSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPwogCiAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgICAkc2hvdyAiJHtybX1yICRnZW50b3AiCi0JICAgICAgJHJ1biAke3JtfXIgIiRnZW50b3AiCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCiAJICAgIGZpCiAJICBmaQogCkBAIC00MjQ4LDggKzg1NTMsNyBAQAogCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCiAJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCiAJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCi0JICAgICRzaG93ICIoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lKSIKLQkgICAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lKScgfHwgZXhpdCAkPworCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCiAJICBmaQogCWRvbmUKIApAQCAtNDI2MiwzOSArODU2NiwzNSBAQAogICAgICAgOzsKIAogICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCiAgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCiAgICAgICAqXCAtbCogfCAqXCAtTCopCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyIDs7CisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CiAgICAgICBlc2FjCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAogICAgICAgY2FzZSAkb3V0cHV0IGluCiAgICAgICAqLmxvKQotCWlmIHRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQotCWxpYm9iaj0iJG91dHB1dCIKLQlvYmo9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKIAk7OwogICAgICAgKikKIAlsaWJvYmo9CkBAIC00MzAzLDcgKzg2MDMsNyBAQAogICAgICAgZXNhYwogCiAgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCi0gICAgICAkcnVuICRybSAkb2JqICRsaWJvYmoKKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCiAKICAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcwogICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKQEAgLTQzMTksMzUgKzg2MTksMjkgQEAKICAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KIAlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCiAJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKLQkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJGVjaG8gIlgkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFhzZWQgLWUgJ3N8LHwgfGcnYAorCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAogCWVsc2UKIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCiAJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCiAJZmkKICAgICAgIGZpCiAKKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKwogICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0gICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JCcvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAogCiAgICAgICBvdXRwdXQ9IiRvYmoiCi0gICAgICBjbWRzPSRyZWxvYWRfY21kcwotICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0gICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCUlGUz0iJHNhdmVfaWZzIgotCWV2YWwgY21kPVwiJGNtZFwiCi0JJHNob3cgIiRjbWQiCi0JJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0gICAgICBkb25lCi0gICAgICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwogCiAgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KICAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCiAJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKLQkgICRydW4gJHtybX1yICRnZW50b3AKKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwogCWZpCiAKIAlleGl0ICRFWElUX1NVQ0NFU1MKQEAgLTQzNTUsMTQgKzg2NDksMTMgQEAKIAogICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCiAJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKLQkgICRydW4gJHtybX1yICRnZW50b3AKKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwogCWZpCiAKIAkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAogCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCiAJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgotCSMgJHJ1biBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KIAlleGl0ICRFWElUX1NVQ0NFU1MKICAgICAgIGZpCiAKQEAgLTQzNzAsMjAgKzg2NjMsMTEgQEAKIAkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgogCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKIAlvdXRwdXQ9IiRsaWJvYmoiCi0JY21kcz0kcmVsb2FkX2NtZHMKLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQlmb3IgY21kIGluICRjbWRzOyBkbwotCSAgSUZTPSIkc2F2ZV9pZnMiCi0JICBldmFsIGNtZD1cIiRjbWRcIgotCSAgJHNob3cgIiRjbWQiCi0JICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLQlkb25lCi0JSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCiAgICAgICBmaQogCiAgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgotCSRzaG93ICIke3JtfXIgJGdlbnRvcCIKLQkkcnVuICR7cm19ciAkZ2VudG9wCisJZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCiAgICAgICBmaQogCiAgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKQEAgLTQzOTEsMzkgKzg2NzUsNDUgQEAKIAogICAgIHByb2cpCiAgICAgICBjYXNlICRob3N0IGluCi0JKmN5Z3dpbiopIG91dHB1dD1gJGVjaG8gJG91dHB1dCB8ICR7U0VEfSAtZSAncywuZXhlJCwsO3MsJCwuZXhlLCdgIDs7CisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKICAgICAgIGVzYWMKLSAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgogCi0gICAgICBpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKIAotICAgICAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzOyB0aGVuCi0JaWYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gJiYKLQkgICB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd247IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgQUNfTElCVE9PTF9ETE9QRU4nIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCi0JZmkKLSAgICAgIGZpCisgICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAorICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCiAKICAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKIAkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yawotCWNvbXBpbGVfZGVwbGlicz1gJGVjaG8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCi0JZmluYWxpemVfZGVwbGlicz1gJGVjaG8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKIAk7OwogICAgICAgZXNhYwogCiAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAqZGFyd2luKikKLSAgICAgICAgIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycwotICAgICAgICBpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCi0gICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKLSAgICAgICAgZmkKLSAgICAgICAgOzsKKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICA7OworCSAgZXNhYworCWZpCisJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CiAgICAgICBlc2FjCiAKIApAQCAtNDQzNiw3ICs4NzI2LDcgQEAKIAkqKQogCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgogCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQotCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CiAJICBlc2FjCiAJICA7OwogCWVzYWMKQEAgLTQ0NDYsMTcgKzg3MzYsMTcgQEAKIAktTCopCiAJICBjYXNlICIgJG5ld19saWJzICIgaW4KIAkgICoiICRkZXBsaWIgIiopIDs7Ci0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJICBlc2FjCiAJICA7OwotCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQogICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCiAKIAotICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCi0gICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCiAKICAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCiAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgpAQCAtNDQ2NCw3ICs4NzU0LDcgQEAKIAkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCiAJICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwogCSAgZXNhYwogCWRvbmUKICAgICAgIGZpCkBAIC00NDgzLDMwICs4NzczLDMyIEBACiAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQogCQk7OwogCSAgICAgICopCi0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCiAJCTs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCSAgZWxzZQogCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCiAJICBmaQogCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgogCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgogCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgIGVzYWMKIAlmaQogCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKLQkgIHRlc3RiaW5kaXI9YCRlY2hvICJYJGxpYmRpciIgfCAkWHNlZCAtZSAncyovbGliJCovYmluKidgCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCR7RUNIT30gIiRsaWJkaXIiIHwgJHtTRUR9IC1lICdzKi9saWIkKi9iaW4qJ2AKIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgogCSAgKiI6JGxpYmRpcjoiKikgOzsKLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKIAkgIGVzYWMKIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgogCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7Ci0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CiAJICBlc2FjCiAJICA7OwogCWVzYWMKQEAgLTQ1MzIsMTggKzg4MjQsMTggQEAKIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCiAJCTs7CiAJICAgICAgKikKLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKIAkJOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAJICBlbHNlCiAJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKIAkgIGZpCiAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCiAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCiAJICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZmluYWxpemVfcGVybV9ycGF0aD0iJGZpbmFsaXplX3Blcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OwogCSAgZXNhYwogCWZpCiAgICAgICBkb25lCkBAIC00NTU3LDI4MSArODg0OSw1NyBAQAogCiAgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgogCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KLQljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAotCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAogICAgICAgZmkKIAotICAgICAgZGxzeW1zPQotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQlpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JICBkbHN5bXM9IiR7b3V0cHV0bmFtZX1TLmMiCi0JZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogbm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIiAxPiYyCi0JZmkKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgIm5vIgorCisgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkZGxzeW1zIjsgdGhlbgotCWNhc2UgJGRsc3ltcyBpbgotCSIiKSA7OwotCSouYykKLQkgICMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCi0JICBubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5ubSIKLQotCSAgJHNob3cgIiRybSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKLQkgICRydW4gJHJtICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCi0KLQkgICMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCi0JICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKLQotCSAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gPiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLS8qICRkbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLwotLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiBcIkNcIiB7Ci0jZW5kaWYKLQotLyogUHJldmVudCB0aGUgb25seSBraW5kIG9mIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3ZSBjYW4gbWFrZS4gKi8KLSNkZWZpbmUgbHRfcHJlbG9hZGVkX3N5bWJvbHMgc29tZV9vdGhlcl9zeW1ib2wKLQotLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKLSIKLQotCSAgaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KLQkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCi0KLQkgICAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgotCi0JICAgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KLQkgICAgcHJvZ2ZpbGVzPWAkZWNobyAiWCRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCi0JICAgIGZvciBhcmcgaW4gJHByb2dmaWxlczsgZG8KLQkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKLQkgICAgICAkcnVuIGV2YWwgIiROTSAkYXJnIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgICAgZG9uZQotCi0JICAgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAgICAgJHJ1biBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLQkgICAgICAkcnVuIGV2YWwgJyRtdiAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgICAgICRydW4gZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgICRydW4gZXZhbCAnJG12ICIkbmxpc3QiVCAiJG5saXN0IicKLQkgICAgZmkKLQotCSAgICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwotCSAgICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKLQkgICAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgICAkcnVuIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJwotICAgICAgICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0JICAgICAgICAkcnVuIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JCSRydW4gZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLQkgICAgZWxzZQotCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCi0JICAgICAgJHJ1biBldmFsICdncmVwIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0JICAgICAgJHJ1biBldmFsICdtdiAiJG5saXN0IlQgIiRubGlzdCInCi0gICAgICAgICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLQkgICAgICAgICRydW4gZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLQkJJHJ1biBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZXNhYwotCSAgICBmaQotCSAgZmkKLQotCSAgZm9yIGFyZyBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgJHNob3cgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGFyZyciCi0JICAgIG5hbWU9YCRlY2hvICIkYXJnIiB8ICR7U0VEfSAtZSAncyVeLiovJSUnYAotCSAgICAkcnVuIGV2YWwgJyRlY2hvICI6ICRuYW1lICIgPj4gIiRubGlzdCInCi0JICAgICRydW4gZXZhbCAiJE5NICRhcmcgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgZG9uZQotCi0JICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotCSAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCi0JICAgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCi0KLQkgICAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAotCSAgICAgICRtdiAiJG5saXN0IlQgIiRubGlzdCIKLQkgICAgZmkKLQotCSAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotCSAgICBpZiBncmVwIC12ICJeOiAiIDwgIiRubGlzdCIgfAotCQlpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJICBzb3J0IC1rIDMKLQkJZWxzZQotCQkgIHNvcnQgKzIKLQkJZmkgfAotCQl1bmlxID4gIiRubGlzdCJTOyB0aGVuCi0JICAgICAgOgotCSAgICBlbHNlCi0JICAgICAgZ3JlcCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KLQkgICAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIicKLQkgICAgZWxzZQotCSAgICAgICRlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKLQkgICAgZmkKLQotCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLQotI3VuZGVmIGx0X3ByZWxvYWRlZF9zeW1ib2xzCi0KLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIGx0X3B0ciB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHIgY2hhciAqCi0jIGRlZmluZSBjb25zdAotI2VuZGlmCi0KLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLwotIgotCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLQkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZQotICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KLSAgIG9uIHBzZXVkby1yZWxvY3MgKi8KLXN0cnVjdCB7Ci0iCi0JICAgICAgOzsKLQkgICAgKiApCi0JICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLWNvbnN0IHN0cnVjdCB7Ci0iCi0JICAgICAgOzsKLQkgICAgZXNhYwotCi0KLQkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHIgYWRkcmVzczsKLX0KLWx0X3ByZWxvYWRlZF9zeW1ib2xzW10gPQote1wKLSIKLQotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKLQotCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLSAgezAsIChsdF9wdHIpIDB9Ci19OwotCi0vKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KLSNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKLXN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gIHJldHVybiBsdF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZlwKLSIKLQkgIGZpCi0KLQkgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAotCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCi0JICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCi0JICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KLQkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCi0JICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCi0JICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgotCSAgICAqIiAtc3RhdGljICIqKSA7OwotCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiOzsKLQkgICAgZXNhYzs7Ci0JICAqLSotaHB1eCopCi0JICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgotCSAgICAqIiAtc3RhdGljICIqKSA7OwotCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciOzsKLQkgICAgZXNhYwotCSAgZXNhYwotCi0JICAjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgotCSAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyAgJExUQ0ZMQUdTIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgXCIkZGxzeW1zXCIpIgotCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0MgICRMVENGTEFHUyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkZGxzeW1zIiknIHx8IGV4aXQgJD8KLQotCSAgIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgotCSAgJHNob3cgIiRybSAkb3V0cHV0X29iamRpci8kZGxzeW1zICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgotCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCi0KLQkgICMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCi0gICAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0gICAgICAgICAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiIgOyB0aGVuCi0gICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiAkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5kZWYgJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKiApCi0gICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhYwotCSAgOzsKLQkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBzdWZmaXggZm9yIFxgJGRsc3ltcyciIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KLQkjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCi0JIyByZWFsbHkgd2FzIHJlcXVpcmVkLgotCi0JIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KLQljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiIHwgJE5MMlNQYAotCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlIiB8ICROTDJTUGAKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICA7OworICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCiAJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIHwgJE5MMlNQYAorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKIAlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKIAogCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgotCSRzaG93ICIkbGlua19jb21tYW5kIgotCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIKLQlleGl0X3N0YXR1cz0kPworCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKIAogCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JaWYgdGVzdCAtbiAiJGRsc3ltcyI7IHRoZW4KLQkgICRzaG93ICIkcm0gJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IgotCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSIKKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJwogCWZpCiAKIAlleGl0ICRleGl0X3N0YXR1cwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JIyBXZSBzaG91bGQgc2V0IHRoZSBzaGxpYnBhdGhfdmFyCi0JcnBhdGg9Ci0JZm9yIGRpciBpbiAkdGVtcF9ycGF0aDsgZG8KLQkgIGNhc2UgJGRpciBpbgotCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKQotCSAgICAjIEFic29sdXRlIHBhdGguCi0JICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKLQkgICAgOzsKLQkgICopCi0JICAgICMgUmVsYXRpdmUgcGF0aDogYWRkIGEgdGhpc2RpciBlbnRyeS4KLQkgICAgcnBhdGg9IiRycGF0aFwkdGhpc2Rpci8kZGlyOiIKLQkgICAgOzsKLQkgIGVzYWMKLQlkb25lCi0JdGVtcF9ycGF0aD0iJHJwYXRoIgotICAgICAgZmkKLQogICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KIAljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgogICAgICAgZmkKQEAgLTQ4NDYsNyArODkxNCw3IEBACiAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgogCSAgcnBhdGg9CiAJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwotCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKIAkgIGRvbmUKIAkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKIAlmaQpAQCAtNDg1NCw3ICs4OTIyLDcgQEAKIAkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCiAJICBycGF0aD0KIAkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCi0JICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgogCSAgZG9uZQogCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKIAlmaQpAQCAtNDg2NCwxMiArODkzMiwxOCBAQAogCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KIAlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKIAkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0JbGlua19jb21tYW5kPWAkZWNobyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAogCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCi0JJHJ1biAkcm0gJG91dHB1dAorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAogCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAotCSRzaG93ICIkbGlua19jb21tYW5kIgotCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworCWZpCisKIAlleGl0ICRFWElUX1NVQ0NFU1MKICAgICAgIGZpCiAKQEAgLTQ4NzgsMTMgKzg5NTIsMTMgQEAKIAlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKIAlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgogCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiIDE+JjIKLQkkZWNobyAiJG1vZGVuYW1lOiBcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIgMT4mMgorCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKICAgICAgIGVsc2UKIAlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgogCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKIAkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnIHwgJE5MMlNQYAorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCiAJICBlbHNlCiAJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcwogCSAgICByZWxpbmtfY29tbWFuZD0KQEAgLTQ4OTYsNjA4ICs4OTcwLDk4IEBACiAgICAgICBmaQogCiAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0gICAgICBsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisgICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAogCiAgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KLSAgICAgICRydW4gJHJtICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQogCi0gICAgICAkc2hvdyAiJGxpbmtfY29tbWFuZCIKLSAgICAgICRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKIAogICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KLSAgICAgICRzaG93ICJjcmVhdGluZyAkb3V0cHV0IgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgogCiAgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCiAgICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCiAJIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgogCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbwogCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8IHVuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCiAJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KIAkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgogCSAgZWxzZQotCSAgICB2YXJfdmFsdWU9YCRlY2hvICJYJHZhcl92YWx1ZSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JICAgIHJlbGlua19jb21tYW5kPSIkdmFyPVwiJHZhcl92YWx1ZVwiOyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCiAJICBmaQogCWRvbmUKIAlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgotCXJlbGlua19jb21tYW5kPWAkZWNobyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgfCAkTkwyU1BgCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCiAgICAgICBmaQogCi0gICAgICAjIFF1b3RlICRlY2hvIGZvciBzaGlwcGluZy4KLSAgICAgIGlmIHRlc3QgIlgkZWNobyIgPSAiWCRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjsgdGhlbgotCWNhc2UgJHByb2dwYXRoIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBxZWNobz0iJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKLQkqKSBxZWNobz0iJFNIRUxMIGBwd2RgLyRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKLQllc2FjCi0JcWVjaG89YCRlY2hvICJYJHFlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGVsc2UKLQlxZWNobz1gJGVjaG8gIlgkZWNobyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBmaQotCi0gICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG91ciBydW4gY29tbWFuZCBpcyBub24tbnVsbC4KLSAgICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgewogCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcwogCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCiAJY2FzZSAkb3V0cHV0IGluCi0JICAqLmV4ZSkgb3V0cHV0PWAkZWNobyAkb3V0cHV0fCR7U0VEfSAncywuZXhlJCwsJ2AgOzsKKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKIAllc2FjCiAJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCiAJY2FzZSAkaG9zdCBpbgogCSAgKmN5Z3dpbiopCiAJICAgIGV4ZWV4dD0uZXhlCi0JICAgIG91dHB1dG5hbWU9YCRlY2hvICRvdXRwdXRuYW1lfCR7U0VEfSAncywuZXhlJCwsJ2AgOzsKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKKwkgICAgb3V0cHV0bmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CiAJICAqKSBleGVleHQ9IDs7CiAJZXNhYwogCWNhc2UgJGhvc3QgaW4KIAkgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0gICAgICAgICAgICBvdXRwdXRfbmFtZT1gYmFzZW5hbWUgJG91dHB1dGAKLSAgICAgICAgICAgIG91dHB1dF9wYXRoPWBkaXJuYW1lICRvdXRwdXRgCi0gICAgICAgICAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCi0gICAgICAgICAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCi0gICAgICAgICAgICAkcm0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgotICAgICAgICAgICAgdHJhcCAiJHJtICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgorCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgorCSAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQogCi0JICAgIGNhdCA+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgorCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCiAKLS8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKLSAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CiAKLSAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAotICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgotCi0gICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCi0KLSAgIEN1cnJlbnRseSwgaXQgc2ltcGx5IGV4ZWNzIHRoZSB3cmFwcGVyICpzY3JpcHQqICIvYmluL3NoICRvdXRwdXQiLAotICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAotICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgotKi8KLUVPRgotCSAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlPDwiRU9GIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jaWYgZGVmaW5lZChQQVRIX01BWCkKLSMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKLSNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKLSMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgotI2Vsc2UKLSMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAotI2VuZGlmCi0KLSNpZm5kZWYgRElSX1NFUEFSQVRPUgotIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKLSMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCi0gIGRlZmluZWQgKF9fT1MyX18pCi0jIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKLSMgZW5kaWYKLSMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKLSMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQotI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCi0gICAgICAgICgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQotI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLwotCi0jaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKLSMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKLSNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KLSMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQotI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KLQotI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQotI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCi0gIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCi19IHdoaWxlICgwKQotCi0vKiAtRERFQlVHIGlzIGZhaXJseSBjb21tb24gaW4gQ0ZMQUdTLiAgKi8KLSN1bmRlZiBERUJVRwotI2lmIGRlZmluZWQgREVCVUdXUkFQUEVSCi0jIGRlZmluZSBERUJVRyhmb3JtYXQsIC4uLikgZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgX19WQV9BUkdTX18pCi0jZWxzZQotIyBkZWZpbmUgREVCVUcoZm9ybWF0LCAuLi4pCi0jZW5kaWYKLQotY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gTlVMTDsKLQotdm9pZCAqIHhtYWxsb2MgKHNpemVfdCBudW0pOwotY2hhciAqIHhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Ci1jb25zdCBjaGFyICogYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKLWNoYXIgKiBmaW5kX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqd3JhcHBlcik7Ci1pbnQgICAgY2hlY2tfZXhlY3V0YWJsZShjb25zdCBjaGFyICpwYXRoKTsKLWNoYXIgKiBzdHJlbmR6YXAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwotdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBjaGFyICoqbmV3YXJnejsKLSAgaW50IGk7Ci0KLSAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7Ci0gIERFQlVHKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsYXJndlswXSk7Ci0gIERFQlVHKCIobWFpbikgcHJvZ3JhbV9uYW1lIDogJXNcbiIscHJvZ3JhbV9uYW1lKTsKLSAgbmV3YXJneiA9IFhNQUxMT0MoY2hhciAqLCBhcmdjKzIpOwotRU9GCi0KLSAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKLSAgbmV3YXJnelswXSA9IChjaGFyICopIHhzdHJkdXAoIiRTSEVMTCIpOwotRU9GCi0KLSAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDwiRU9GIgotICBuZXdhcmd6WzFdID0gZmluZF9leGVjdXRhYmxlKGFyZ3ZbMF0pOwotICBpZiAobmV3YXJnelsxXSA9PSBOVUxMKQotICAgIGx0X2ZhdGFsKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7Ci0gIERFQlVHKCIobWFpbikgZm91bmQgZXhlIGF0IDogJXNcbiIsbmV3YXJnelsxXSk7Ci0gIC8qIHdlIGtub3cgdGhlIHNjcmlwdCBoYXMgdGhlIHNhbWUgbmFtZSwgd2l0aG91dCB0aGUgLmV4ZSAqLwotICAvKiBzbyBtYWtlIHN1cmUgbmV3YXJnelsxXSBkb2Vzbid0IGVuZCBpbiAuZXhlICovCi0gIHN0cmVuZHphcChuZXdhcmd6WzFdLCIuZXhlIik7Ci0gIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0gICAgbmV3YXJneltpKzFdID0geHN0cmR1cChhcmd2W2ldKTsKLSAgbmV3YXJnelthcmdjKzFdID0gTlVMTDsKLQotICBmb3IgKGk9MDsgaTxhcmdjKzE7IGkrKykKLSAgewotICAgIERFQlVHKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLGksbmV3YXJneltpXSk7Ci0gICAgOwotICB9Ci0KLUVPRgotCi0gICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgIG1pbmd3KikKLSAgICAgICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCi0gIGV4ZWN2KCIkU0hFTEwiLChjaGFyIGNvbnN0ICoqKW5ld2FyZ3opOwotRU9GCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgotICBleGVjdigiJFNIRUxMIixuZXdhcmd6KTsKLUVPRgotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhYwotCi0gICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8IkVPRiIKLSAgcmV0dXJuIDEyNzsKLX0KLQotdm9pZCAqCi14bWFsbG9jIChzaXplX3QgbnVtKQotewotICB2b2lkICogcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKLSAgaWYgKCFwKQotICAgIGx0X2ZhdGFsICgiTWVtb3J5IGV4aGF1c3RlZCIpOwotCi0gIHJldHVybiBwOwotfQotCi1jaGFyICoKLXhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksIHN0cmluZykgOiBOVUxMCi07Ci19Ci0KLWNvbnN0IGNoYXIgKgotYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQotewotICBjb25zdCBjaGFyICpiYXNlOwotCi0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCi0gIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KLSAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKW5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQotICAgIG5hbWUgKz0gMjsKLSNlbmRpZgotCi0gIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCi0gICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKLSAgICAgIGJhc2UgPSBuYW1lICsgMTsKLSAgcmV0dXJuIGJhc2U7Ci19Ci0KLWludAotY2hlY2tfZXhlY3V0YWJsZShjb25zdCBjaGFyICogcGF0aCkKLXsKLSAgc3RydWN0IHN0YXQgc3Q7Ci0KLSAgREVCVUcoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKLSAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApICYmCi0gICAgICAoCi0gICAgICAgIC8qIE1pbkdXICYgbmF0aXZlIFdJTjMyIGRvIG5vdCBzdXBwb3J0IFNfSVhPVEggb3IgU19JWEdSUCAqLwotI2lmIGRlZmluZWQgKFNfSVhPVEgpCi0gICAgICAgKChzdC5zdF9tb2RlICYgU19JWE9USCkgPT0gU19JWE9USCkgfHwKLSNlbmRpZgotI2lmIGRlZmluZWQgKFNfSVhHUlApCi0gICAgICAgKChzdC5zdF9tb2RlICYgU19JWEdSUCkgPT0gU19JWEdSUCkgfHwKLSNlbmRpZgotICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhVU1IpID09IFNfSVhVU1IpKQotICAgICAgKQotICAgIHJldHVybiAxOwotICBlbHNlCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucwotICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZSAqLwotY2hhciAqCi1maW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIqIHdyYXBwZXIpCi17Ci0gIGludCBoYXNfc2xhc2ggPSAwOwotICBjb25zdCBjaGFyKiBwOwotICBjb25zdCBjaGFyKiBwX25leHQ7Ci0gIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLwotICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07Ci0gIGludCB0bXBfbGVuOwotICBjaGFyKiBjb25jYXRfbmFtZTsKLQotICBERUJVRygiKGZpbmRfZXhlY3V0YWJsZSkgIDogJXNcbiIsIHdyYXBwZXIgPyAoKndyYXBwZXIgPyB3cmFwcGVyIDogIkVNUFRZISIpIDogIk5VTEwhIik7Ci0KLSAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICAvKiBBYnNvbHV0ZSBwYXRoPyAqLwotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQotICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCi0gIHsKLSAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOwotICAgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKLSAgICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgICBYRlJFRShjb25jYXRfbmFtZSk7Ci0gIH0KLSAgZWxzZQotICB7Ci0jZW5kaWYKLSAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCi0gICAgewotICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKLSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKLSAgICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOwotICAgICAgWEZSRUUoY29uY2F0X25hbWUpOwotICAgIH0KLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKLSAgfQotI2VuZGlmCi0KLSAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKLSAgICBpZiAoKnAgPT0gJy8nKQotICAgIHsKLSAgICAgIGhhc19zbGFzaCA9IDE7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIGlmICghaGFzX3NsYXNoKQotICB7Ci0gICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KLSAgICBjb25zdCBjaGFyKiBwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOwotICAgIGlmIChwYXRoICE9IE5VTEwpCi0gICAgewotICAgICAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCi0gICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHE7Ci0gICAgICAgIHNpemVfdCBwX2xlbjsKLSAgICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKLSAgICAgICAgICBpZiAoSVNfUEFUSF9TRVBBUkFUT1IoKnEpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBfbGVuID0gcSAtIHA7Ci0gICAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKLSAgICAgICAgaWYgKHBfbGVuID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAgICAgICAgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKLSAgICAgICAgICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOwotICAgICAgICAgIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKLSAgICAgICAgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4od3JhcHBlcikgKyAxKTsKLSAgICAgICAgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwotICAgICAgICAgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOwotICAgICAgICAgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOwotICAgICAgICAgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKLSAgICAgICAgICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7Ci0gICAgICAgICAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQotICAgICAgICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgICAgICAgWEZSRUUoY29uY2F0X25hbWUpOwotICAgICAgfQotICAgIH0KLSAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLwotICB9Ci0gIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KLSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOwotICB0bXBfbGVuID0gc3RybGVuKHRtcCk7Ci0gIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOwotICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwotICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKLSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQotICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCi0gICAgcmV0dXJuIGNvbmNhdF9uYW1lOwotICBYRlJFRShjb25jYXRfbmFtZSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1jaGFyICoKLXN0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKLXsKLSAgc2l6ZV90IGxlbiwgcGF0bGVuOwotCi0gIGFzc2VydChzdHIgIT0gTlVMTCk7Ci0gIGFzc2VydChwYXQgIT0gTlVMTCk7Ci0KLSAgbGVuID0gc3RybGVuKHN0cik7Ci0gIHBhdGxlbiA9IHN0cmxlbihwYXQpOwotCi0gIGlmIChwYXRsZW4gPD0gbGVuKQotICB7Ci0gICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKLSAgICBpZiAoc3RyY21wKHN0ciwgcGF0KSA9PSAwKQotICAgICAgKnN0ciA9ICdcMCc7Ci0gIH0KLSAgcmV0dXJuIHN0cjsKLX0KLQotc3RhdGljIHZvaWQKLWx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqIG1vZGUsCi0gICAgICAgICAgY29uc3QgY2hhciAqIG1lc3NhZ2UsIHZhX2xpc3QgYXApCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKLSAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOwotICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKLQotICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKLSAgICBleGl0IChleGl0X3N0YXR1cyk7Ci19Ci0KLXZvaWQKLWx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCi17Ci0gIHZhX2xpc3QgYXA7Ci0gIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7Ci0gIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOwotICB2YV9lbmQgKGFwKTsKLX0KLUVPRgotICAgICAgICAgICMgd2Ugc2hvdWxkIHJlYWxseSB1c2UgYSBidWlsZC1wbGF0Zm9ybSBzcGVjaWZpYyBjb21waWxlcgotICAgICAgICAgICMgaGVyZSwgYnV0IE9UT0gsIHRoZSB3cmFwcGVycyAoc2hlbGwgc2NyaXB0IGFuZCB0aGlzIEMgb25lKQotICAgICAgICAgICMgYXJlIG9ubHkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4ZWN1dGUgdGhlICJyZWFsIiBiaW5hcnkuCi0gICAgICAgICAgIyBTaW5jZSB0aGUgInJlYWwiIGJpbmFyeSBpcyBidWlsdCBmb3IgJGhvc3QsIHRoZW4gdGhpcwotICAgICAgICAgICMgd3JhcHBlciBtaWdodCBhcyB3ZWxsIGJlIGJ1aWx0IGZvciAkaG9zdCwgdG9vLgotICAgICAgICAgICRydW4gJExUQ0MgJExUQ0ZMQUdTIC1zIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKLSAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgICRybSAkb3V0cHV0Ci0gICAgICAgIHRyYXAgIiRybSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQotCi0JJGVjaG8gPiAkb3V0cHV0ICJcCi0jISAkU0hFTEwKLQotIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKLSMKLSMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCi0jIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KLSMKLSMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0jIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9JyR7U0VEfSAtZSAxcy9eWC8vJwotc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlICh0YWtlbiBmcm9tIEF1dG9jb25mOl9BU19CT1VSTkVfQ09NUEFUSUJMRSkuCi1pZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCi1maQotQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgotCi0jIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCi1pZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZToKLSAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJwotZWxzZQotICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkZWNobyBhcmUgYWxyZWFkeSBzZXQuCi0gIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgICBlY2hvPVwiJHFlY2hvXCIKLSAgICBmaWxlPVwiXCQwXCIKLSAgICAjIE1ha2Ugc3VyZSBlY2hvIHdvcmtzLgotICAgIGlmIHRlc3QgXCJYXCQxXCIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KLSAgICAgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgotICAgICAgc2hpZnQKLSAgICBlbGlmIHRlc3QgXCJYXGAoXCRlY2hvICdcdCcpIDI+L2Rldi9udWxsXGBcIiA9ICdYXHQnOyB0aGVuCi0gICAgICAjIFlpcHBlZSwgXCRlY2hvIHdvcmtzIQotICAgICAgOgotICAgIGVsc2UKLSAgICAgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgXCRlY2hvIHdpbGwgd29yay4KLSAgICAgIGV4ZWMgJFNIRUxMIFwiXCQwXCIgLS1uby1yZWV4ZWMgXCR7MStcIlwkQFwifQotICAgIGZpCi0gIGZpXAotIgotCSRlY2hvID4+ICRvdXRwdXQgIlwKLQotICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgotICB0aGlzZGlyPVxgXCRlY2hvIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAotICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCi0KLSAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCi0gIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAotICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCi0gICAgZGVzdGRpcj1cYFwkZWNobyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSpcJCUlJ1xgCi0KLSAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCi0gICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgotICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCi0gICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKLSAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotCi0gICAgZmlsZT1cYFwkZWNobyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKLSAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCi0gIGRvbmUKLQotICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgotICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCi0gIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCi0iCi0KLQlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0Ci0gIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCi0KLSAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8IFxcCi0gICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKLSAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgotCi0gICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKLQotICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCi0gICAgICAkbWtkaXIgXCJcJHByb2dkaXJcIgotICAgIGVsc2UKLSAgICAgICRybSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICAgIGZpIgotCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0KLSAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQotICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KLSAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgotICAgICAgZWxzZQotCSRlY2hvIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKLQkkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICRtdiBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAotICAgIHsgJHJtIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOwotICAgICAgJG12IFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9Ci0gICAgJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0gIGZpIgotCWVsc2UKLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCi0gIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCi0iCi0JZmkKLQotCSRlY2hvID4+ICRvdXRwdXQgIlwKLQotICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgotCi0JIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCi0JaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCi0gICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgotCi0gICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCi0gICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKLSAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkZWNobyBcIlhcJCRzaGxpYnBhdGhfdmFyXCIgfCBcJFhzZWQgLWUgJ3MvOjoqXCQvLydcYAotCi0gICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCi0iCi0JZmkKLQotCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCi0JaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKLSAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAotIgotCWZpCi0KLQkkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgotICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KLSIKLQljYXNlICRob3N0IGluCi0JIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCi0JKi0qLW1pbmd3IHwgKi0qLW9zMiopCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KLSIKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CiAJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQogCi0JKikKLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotIgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKKwkgICAgY2htb2QgK3ggJG91dHB1dAogCSAgOzsKIAllc2FjCi0JJGVjaG8gPj4gJG91dHB1dCAiXAotICAgICAgXCRlY2hvIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCi0gICAgXCRlY2hvIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgotICAgIFwkZWNobyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgotICAgICRlY2hvIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgZmkKLWZpXAotIgotCWNobW9kICt4ICRvdXRwdXQKLSAgICAgIGZpCisgICAgICB9CiAgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKICAgICAgIDs7CiAgICAgZXNhYwpAQCAtNTUwNiw3ICs5MDcwLDcgQEAKICAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbwogCiAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCi0Jb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgogCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKIAlidWlsZF9saWJ0b29sX2xpYnM9bm8KICAgICAgIGVsc2UKQEAgLTU1MTUsMjIgKzkwNzksMzUgQEAKIAkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwogCWVsc2UKIAkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCisJICBmaQogCWZpCiAJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKICAgICAgIGZpCiAKICAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgogCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0JZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCi0Jb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgogICAgICAgZmkKIAogICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCiAgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgICBjbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwogICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCiAJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCiAJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKIAkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQpAQCAtNTUzOSwzMiArOTExNiwyMiBAQAogCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KIAlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcwogCSAgICBkbwotCSAgICAgICRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnCisJICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgogCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KIAkgIDoKIAllbHNlCi0JICAkZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgotCi0JICBpZiB0ZXN0IC16ICIkZ2VudG9wIjsgdGhlbgotCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKLQotCSAgICAkc2hvdyAiJHtybX1yICRnZW50b3AiCi0JICAgICRydW4gJHtybX1yICIkZ2VudG9wIgotCSAgICAkc2hvdyAiJG1rZGlyICRnZW50b3AiCi0JICAgICRydW4gJG1rZGlyICIkZ2VudG9wIgotCSAgICBleGl0X3N0YXR1cz0kPwotCSAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJGdlbnRvcCI7IHRoZW4KLQkgICAgICBleGl0ICRleGl0X3N0YXR1cwotCSAgICBmaQotCSAgZmkKLQorCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCiAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKIAkgIG9sZG9ianM9CiAJICBjb3VudGVyPTEKIAkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwogCSAgZG8KLQkgICAgb2JqYmFzZT1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKIAkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KIAkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKIAkgICAgKltcIC9dIiRvYmpiYXNlICIqKQpAQCAtNTU3Miw1OCArOTEzOSw3MiBAQAogCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbwogCQkjIG92ZXJsYXBzLgogCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQotCQljb3VudGVyPWBleHByICRjb3VudGVyICsgMWAKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKIAkJY2FzZSAiICRvbGRvYmpzICIgaW4KIAkJKltcIC9dIiRuZXdvYmogIiopIDs7CiAJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKIAkJZXNhYwogCSAgICAgIGRvbmUKLQkgICAgICAkc2hvdyAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCi0JICAgICAgJHJ1biBsbiAiJG9iaiIgIiRnZW50b3AvJG5ld29iaiIgfHwKLQkgICAgICAkcnVuIGNwICIkb2JqIiAiJGdlbnRvcC8kbmV3b2JqIgotCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKIAkgICAgICA7OwotCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKIAkgICAgZXNhYwogCSAgZG9uZQogCWZpCi0KIAlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCiAKLQlpZiBsZW49YGV4cHIgIlgkY21kcyIgOiAiLioiYCAmJgotCSAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgY29tbWFuZCBmaWxlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQiCisJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCiAJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCiAJZWxzZQogCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKLQkgICRlY2hvICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgogCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgogCSAgUkFOTElCPToKIAkgIG9iamxpc3Q9CiAJICBjb25jYXRfY21kcz0KIAkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwotCisJICBvbGRvYmpzPQogCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CiAJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKIAkgIGRvCiAJICAgIGxhc3Rfb2xkb2JqPSRvYmoKIAkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKIAkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwogCSAgZG8KLQkgICAgb2xkb2Jqcz0iJG9iamxpc3QgJG9iaiIKLQkgICAgb2JqbGlzdD0iJG9iamxpc3QgJG9iaiIKLQkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCi0JICAgIGlmIGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKLQkgICAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KIAkgICAgICA6CiAJICAgIGVsc2UKIAkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCiAJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAogCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCi0JICAgICAgICBSQU5MSUI9JHNhdmVfUkFOTElCCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKIAkgICAgICBmaQogCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgogCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCiAJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKIAkgICAgZmkKIAkgIGRvbmUKIAkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKQEAgLTU2MzUsNDkgKzkyMTYsMzkgQEAKIAkgIGZpCiAJZmkKICAgICAgIGZpCi0gICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0gICAgICAgIGV2YWwgY21kPVwiJGNtZFwiCi0JSUZTPSIkc2F2ZV9pZnMiCi0JJHNob3cgIiRjbWQiCi0JJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0gICAgICBkb25lCi0gICAgICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkY21kcyIgJ2V4aXQgJD8nCiAgICAgZG9uZQogCi0gICAgaWYgdGVzdCAtbiAiJGdlbmVyYXRlZCI7IHRoZW4KLSAgICAgICRzaG93ICIke3JtfXIkZ2VuZXJhdGVkIgotICAgICAgJHJ1biAke3JtfXIkZ2VuZXJhdGVkCi0gICAgZmkKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKIAogICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgogICAgIGNhc2UgJG91dHB1dCBpbgogICAgICoubGEpCiAgICAgICBvbGRfbGlicmFyeT0KICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCi0gICAgICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKIAogICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgogICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCiAJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KLQkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCB1bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKIAllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KIAkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKIAllbHNlCi0JICB2YXJfdmFsdWU9YCRlY2hvICJYJHZhcl92YWx1ZSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JICByZWxpbmtfY29tbWFuZD0iJHZhcj1cIiR2YXJfdmFsdWVcIjsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCiAJZmkKICAgICAgIGRvbmUKICAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCiAgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCi0gICAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIHwgJE5MMlNQYAorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCiAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KIAlyZWxpbmtfY29tbWFuZD0KICAgICAgIGZpCiAKLQogICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCi0gICAgICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKIAlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KIAkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KQEAgLTU2ODksMzggKzkyNjAsNTkgQEAKIAkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICAgIGNhc2UgJGRlcGxpYiBpbgogCSAgICAgICoubGEpCi0JCW5hbWU9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiAJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkJICBleGl0ICRFWElUX0ZBSUxVUkUKLQkJZmkKLQkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCiAJCTs7Ci0JICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisJICAgICAgLUwqKQorCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAtUiopCisJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCiAJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICAgbmV3ZGxmaWxlcz0KKwogCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwotCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCi0JICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkJZXhpdCAkRVhJVF9GQUlMVVJFCi0JICAgICAgZmkKLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OworCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKIAkgICAgbmV3ZGxwcmVmaWxlcz0KIAkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgICBuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgICAgICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAotCSAgICAgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JCSRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JCWV4aXQgJEVYSVRfRkFJTFVSRQotCSAgICAgIGZpCi0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgZXNhYwogCSAgICBkb25lCiAJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgogCSAgZWxzZQpAQCAtNTczMCw3ICs5MzIyLDcgQEAKIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CiAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKIAkgICAgICBlc2FjCi0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGFicyIKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKIAkgICAgZG9uZQogCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKIAkgICAgbmV3ZGxwcmVmaWxlcz0KQEAgLTU3MzksMTkgKzkzMzEsMzcgQEAKIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CiAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKIAkgICAgICBlc2FjCi0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKIAkgICAgZG9uZQogCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKIAkgIGZpCi0JICAkcm0gJG91dHB1dAorCSAgJFJNICRvdXRwdXQKIAkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKwkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKKwkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCisJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAorCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQorCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KIAkgIHRkbG5hbWU9JGRsbmFtZQogCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCi0JICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCkgdGRsbmFtZT0uLi9iaW4vJGRsbmFtZSA7OworCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQorCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KKwkgICAgICBpZiB0ZXN0ICJ4JGJpbmRpciIgIT0geCA7CisJICAgICAgdGhlbgorCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCisJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQkZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OwogCSAgZXNhYwotCSAgJGVjaG8gPiAkb3V0cHV0ICJcCisJICAkRUNITyA+ICRvdXRwdXQgIlwKICMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgogIwogIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCiAjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KQEAgLTU3NjUsOSArOTM3NSwxNSBAQAogIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCiBvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JwogCisjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgoraW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJworCiAjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KIGRlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKIAorIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQord2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJworCiAjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgogY3VycmVudD0kY3VycmVudAogYWdlPSRhZ2UKQEAgLTU3ODYsNzQ4ICs5NDAyLDI5IEBACiAjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CiBsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCiAJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KLQkgICAgJGVjaG8gPj4gJG91dHB1dCAiXAorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCiByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgogCSAgZmkKIAlkb25lCi0gICAgICBmaQorICAgICAgfQogCiAgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCiAgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgotICAgICAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJG91dHB1dG5hbWUgJiYgJExOX1MgLi4vJG91dHB1dG5hbWUgJG91dHB1dG5hbWUpIgotICAgICAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICRvdXRwdXRuYW1lICYmICRMTl9TIC4uLyRvdXRwdXRuYW1lICRvdXRwdXRuYW1lKScgfHwgZXhpdCAkPworICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCiAgICAgICA7OwogICAgIGVzYWMKICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICA7OworfQogCi0gICMgbGlidG9vbCBpbnN0YWxsIG1vZGUKLSAgaW5zdGFsbCkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBpbnN0YWxsIgoreyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CiAKLSAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCi0gICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCi0gICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKLSAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KLSAgICAgICAkZWNobyAiWCRub25vcHQiIHwgZ3JlcCBzaHRvb2wgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KLSAgICAgIGFyZz1gJGVjaG8gIlgkbm9ub3B0IiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JYXJnPSJcIiRhcmdcIiIKLQk7OwotICAgICAgZXNhYwotICAgICAgaW5zdGFsbF9wcm9nPSIkYXJnICIKLSAgICAgIGFyZz0iJDEiCi0gICAgICBzaGlmdAotICAgIGVsc2UKLSAgICAgIGluc3RhbGxfcHJvZz0KLSAgICAgIGFyZz0kbm9ub3B0Ci0gICAgZmkKIAotICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KLSAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCi0gICAgYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgIGNhc2UgJGFyZyBpbgotICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgYXJnPSJcIiRhcmdcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRhcmciCi0KLSAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCi0gICAgZGVzdD0KLSAgICBmaWxlcz0KLSAgICBvcHRzPQotICAgIHByZXY9Ci0gICAgaW5zdGFsbF90eXBlPQotICAgIGlzZGlyPW5vCi0gICAgc3RyaXBtZT0KLSAgICBmb3IgYXJnCi0gICAgZG8KLSAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgotCWZpbGVzPSIkZmlsZXMgJGRlc3QiCi0JZGVzdD0kYXJnCi0JY29udGludWUKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWQpIGlzZGlyPXllcyA7OwotICAgICAgLWYpIAotICAgICAgCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KLQkqW1xcXCAvXWNwXCAqKSA7OwotCSopIHByZXY9JGFyZyA7OwotCWVzYWMKLQk7OwotICAgICAgLWcgfCAtbSB8IC1vKSBwcmV2PSRhcmcgOzsKLSAgICAgIC1zKQotCXN0cmlwbWU9IiAtcyIKLQljb250aW51ZQotCTs7Ci0gICAgICAtKikKLQk7OwotICAgICAgKikKLQkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCi0JaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0JICBwcmV2PQotCWVsc2UKLQkgIGRlc3Q9JGFyZwotCSAgY29udGludWUKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCi0gICAgICBhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCWFyZz0iXCIkYXJnXCIiCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkYXJnIgotICAgIGRvbmUKLQotICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiBubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIgMT4mMgotICAgICAgZWxzZQotCSRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIgMT4mMgotICAgICAgZmkKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLQotICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgotICAgIGRlc3Q9YCRlY2hvICJYJGRlc3QiIHwgJFhzZWQgLWUgJ3MlLyQlJSdgCi0KLSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KLSAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCi0gICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgotICAgICAgZGVzdGRpcj0iJGRlc3QiCi0gICAgICBkZXN0bmFtZT0KLSAgICBlbHNlCi0gICAgICBkZXN0ZGlyPWAkZWNobyAiWCRkZXN0IiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0gICAgICB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkZGVzdCIgJiYgZGVzdGRpcj0uCi0gICAgICBkZXN0bmFtZT1gJGVjaG8gIlgkZGVzdCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCi0gICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCi0gICAgICBzZXQgZHVtbXkgJGZpbGVzCi0gICAgICBpZiB0ZXN0ICIkIyIgLWd0IDI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiIDE+JjIKLQkkZWNobyAiJGhlbHAiIDE+JjIKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0gICAgZmkKLSAgICBjYXNlICRkZXN0ZGlyIGluCi0gICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotICAgICopCi0gICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0JY2FzZSAkZmlsZSBpbgotCSoubG8pIDs7Ci0JKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCi0gICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCi0KLSAgICBzdGF0aWNsaWJzPQotICAgIGZ1dHVyZV9saWJkaXJzPQotICAgIGN1cnJlbnRfbGliZGlycz0KLSAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0KLSAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCi0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAqLiRsaWJleHQpCi0JIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KLQlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKLQk7OwotCi0gICAgICAqLmxhKQotCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQotCi0JbGlicmFyeV9uYW1lcz0KLQlvbGRfbGlicmFyeT0KLQlyZWxpbmtfY29tbWFuZD0KLQkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQljYXNlICRmaWxlIGluCi0JKi8qIHwgKlxcKikgLiAkZmlsZSA7OwotCSopIC4gLi8kZmlsZSA7OwotCWVzYWMKLQotCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KLQlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgotCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZWxzZQotCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgotCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLQotCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYC8KLQl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlLyIgJiYgZGlyPQotCWRpcj0iJGRpciRvYmpkaXIiCi0KLQlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgotCSAgaW5zdF9wcmVmaXhfZGlyPWAkZWNobyAiJGRlc3RkaXIiIHwgJFNFRCAicyUkbGliZGlyXCQlJSJgCi0KLQkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKLQkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKLQkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCi0JICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAotCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQotCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCi0JICBpZiB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCi0KLQkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCi0JICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlIiB8ICROTDJTUGAKLQkgIGVsc2UKLQkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlIiB8ICROTDJTUGAKLQkgIGZpCi0KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHJlbGlua2luZyBcYCRmaWxlJyIgMT4mMgotCSAgJHNob3cgIiRyZWxpbmtfY29tbWFuZCIKLQkgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6Ci0JICBlbHNlCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCi0JZmkKLQotCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCi0Jc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0JaWYgdGVzdCAtbiAiJDIiOyB0aGVuCi0JICByZWFsbmFtZT0iJDIiCi0JICBzaGlmdAotCSAgc2hpZnQKLQotCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgotCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAotCi0JICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCi0JICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIKLQkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPwotCSAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KLQkgICAgJHNob3cgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiCi0JICAgICRydW4gZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPwotCSAgZmkKLQotCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0JICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCi0JICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KLQkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCi0JICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KLQkgICAgZm9yIGxpbmtuYW1lCi0JICAgIGRvCi0JICAgICAgaWYgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIjsgdGhlbgotICAgICAgICAgICAgICAgICRzaG93ICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKLSAgICAgICAgICAgICAgICAkcnVuIGV2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgotCSAgICAgIGZpCi0JICAgIGRvbmUKLQkgIGZpCi0KLQkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLQkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgotCSAgY21kcz0kcG9zdGluc3RhbGxfY21kcwotCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICBmb3IgY21kIGluICRjbWRzOyBkbwotCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICAgJHNob3cgIiRjbWQiCi0JICAgICRydW4gZXZhbCAiJGNtZCIgfHwgewotCSAgICAgIGx0X2V4aXQ9JD8KLQotCSAgICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotCQkkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScKLQkgICAgICBmaQotCi0JICAgICAgZXhpdCAkbHRfZXhpdAotCSAgICB9Ci0JICBkb25lCi0JICBJRlM9IiRzYXZlX2lmcyIKLQlmaQotCi0JIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCi0JbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKLQkkc2hvdyAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiCi0JJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgfHwgZXhpdCAkPwotCi0JIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgotCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KLQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgotCWVsc2UKLQkgIGRlc3RmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgotCWZpCi0KLQkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgotCWNhc2UgJGRlc3RmaWxlIGluCi0JKi5sbykKLQkgIHN0YXRpY2Rlc3Q9YCRlY2hvICJYJGRlc3RmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCi0JICA7OwotCSouJG9iamV4dCkKLQkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKLQkgIGRlc3RmaWxlPQotCSAgOzsKLQkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICA7OwotCWVzYWMKLQotCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgotCWlmIHRlc3QgLW4gIiRkZXN0ZmlsZSI7IHRoZW4KLQkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIKLQkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiIHx8IGV4aXQgJD8KLQlmaQotCi0JIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCi0JaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLQkgIHN0YXRpY29iaj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCi0JICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkc3RhdGljb2JqICRzdGF0aWNkZXN0IgotCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgfHwgZXhpdCAkPwotCWZpCi0JZXhpdCAkRVhJVF9TVUNDRVNTCi0JOzsKLQotICAgICAgKikKLQkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCi0JaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKLQllbHNlCi0JICBkZXN0ZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKLQlmaQotCi0JIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0Ci0JIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bwotCSMgaW5zdGFsbAotCXN0cmlwcGVkX2V4dD0iIgotCWNhc2UgJGZpbGUgaW4KLQkgICouZXhlKQotCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgotCSAgICAgIGZpbGU9YCRlY2hvICRmaWxlfCR7U0VEfSAncywuZXhlJCwsJ2AKLQkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCi0JICAgIGZpCi0JICAgIDs7Ci0JZXNhYwotCi0JIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotCWNhc2UgJGhvc3QgaW4KLQkqY3lnd2luKnwqbWluZ3cqKQotCSAgICB3cmFwcGVyPWAkZWNobyAkZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKLQkgICAgOzsKLQkqKQotCSAgICB3cmFwcGVyPSRmaWxlCi0JICAgIDs7Ci0JZXNhYwotCWlmICgke1NFRH0gLWUgJzRxJyAkd3JhcHBlciB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIik+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIG5vdGluc3RfZGVwbGlicz0KLQkgIHJlbGlua19jb21tYW5kPQotCi0JICAjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KLQkgICMgZm9vIGV2ZW4gaWYgYm90aCBmb28gYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKLQkgICMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZwotCSAgIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgotCSAgIwotCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JICBjYXNlICR3cmFwcGVyIGluCi0JICAqLyogfCAqXFwqKSAuICR7d3JhcHBlcn0gOzsKLQkgICopIC4gLi8ke3dyYXBwZXJ9IDs7Ci0JICBlc2FjCi0KLQkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgotCSAgaWYgdGVzdCAteiAiJG5vdGluc3RfZGVwbGlicyI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKLQotCSAgZmluYWxpemU9eWVzCi0JICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCi0JICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KLQkgICAgbGliZGlyPQotCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgICAgIGNhc2UgJGxpYiBpbgotCSAgICAgICovKiB8ICpcXCopIC4gJGxpYiA7OwotCSAgICAgICopIC4gLi8kbGliIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKLQkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KLQkgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIgMT4mMgotCSAgICAgIGZpbmFsaXplPW5vCi0JICAgIGZpCi0JICBkb25lCi0KLQkgIHJlbGlua19jb21tYW5kPQotCSAgIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCi0JICAjIGZvbyBldmVuIGlmIGJvdGggZm9vIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCi0JICAjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKLQkgICMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KLQkgICMKLQkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgY2FzZSAkd3JhcHBlciBpbgotCSAgKi8qIHwgKlxcKikgLiAke3dyYXBwZXJ9IDs7Ci0JICAqKSAuIC4vJHt3cmFwcGVyfSA7OwotCSAgZXNhYwotCi0JICBvdXRwdXRuYW1lPQotCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXMgJiYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAotCSAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKLQkgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0JICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJyB8ICROTDJTUGAKLQotCSAgICAgICRzaG93ICIkcmVsaW5rX2NvbW1hbmQiCi0JICAgICAgaWYgJHJ1biBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKLQkgICAgICBlbHNlCi0JCSRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgotCQkke3JtfXIgIiR0bXBkaXIiCi0JCWNvbnRpbnVlCi0JICAgICAgZmkKLQkgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKLQkgICAgZWxzZQotCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCByZWxpbmsgXGAkZmlsZSciIDE+JjIKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgotCSAgICBmaWxlPWAkZWNobyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKLQkgIGZpCi0JZmkKLQotCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgotCSMgb25lIGFueXdheSAKLQljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KLQkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCi0JICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgotCSAgKi5leGU6Ki5leGUpCi0JICAgICMgdGhpcyBpcyBvawotCSAgICA7OwotCSAgKi5leGU6KikKLQkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQotCSAgICA7OwotCSAgKjoqLmV4ZSkKLQkgICAgZGVzdGZpbGU9YCRlY2hvICRkZXN0ZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotCSRzaG93ICIkaW5zdGFsbF9wcm9nJHN0cmlwbWUgJGZpbGUgJGRlc3RmaWxlIgotCSRydW4gZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgfHwgZXhpdCAkPwotCXRlc3QgLW4gIiRvdXRwdXRuYW1lIiAmJiAke3JtfXIgIiR0bXBkaXIiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KLSAgICAgIG5hbWU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQotICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgotICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKLQotICAgICAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJG9sZGxpYiIKLSAgICAgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiIHx8IGV4aXQgJD8KLQotICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCi0JJHNob3cgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIKLQkkcnVuIGV2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgfHwgZXhpdCAkPwotICAgICAgZmkKLQotICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotICAgICAgY21kcz0kb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQlJRlM9IiRzYXZlX2lmcyIKLQlldmFsIGNtZD1cIiRjbWRcIgotCSRzaG93ICIkY21kIgotCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotICAgICAgZG9uZQotICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgZG9uZQotCi0gICAgaWYgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogcmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIgMT4mMgotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgotICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KLSAgICAgIHRlc3QgLW4gIiRydW4iICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKLSAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKLSAgICBlbHNlCi0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICBmaQotICAgIDs7Ci0KLSAgIyBsaWJ0b29sIGZpbmlzaCBtb2RlCi0gIGZpbmlzaCkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBmaW5pc2giCi0gICAgbGliZGlycz0iJG5vbm9wdCIKLSAgICBhZG1pbmNtZHM9Ci0KLSAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgotICAgICAgZm9yIGRpcgotICAgICAgZG8KLQlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgotICAgICAgZG9uZQotCi0gICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwotCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KLQkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCi0JICBjbWRzPSRmaW5pc2hfY21kcwotCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICBmb3IgY21kIGluICRjbWRzOyBkbwotCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICAgJHNob3cgIiRjbWQiCi0JICAgICRydW4gZXZhbCAiJGNtZCIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCi0gICAgICAgJGNtZCIKLQkgIGRvbmUKLQkgIElGUz0iJHNhdmVfaWZzIgotCWZpCi0JaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgotCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgotCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKLQkgICRydW4gZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcwotICAgICAgICRjbWRzIgotCWZpCi0gICAgICBkb25lCi0gICAgZmkKLQotICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgotICAgIHRlc3QgIiRzaG93IiA9IDogJiYgZXhpdCAkRVhJVF9TVUNDRVNTCi0KLSAgICAkZWNobyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKLSAgICAkZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgotICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0gICAgICAkZWNobyAiICAgJGxpYmRpciIKLSAgICBkb25lCi0gICAgJGVjaG8KLSAgICAkZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCi0gICAgJGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgotICAgICRlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgotICAgICRlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCi0gICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0gICAgICAkZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLSAgICAgICRlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0gICAgICAkZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCi0gICAgICAkZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKLSAgICBmaQotICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotICAgICAgbGliZGlyPUxJQkRJUgotICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCi0gICAgICAkZWNobyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgotICAgIGZpCi0gICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KLSAgICAgICRlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKLSAgICBmaQotICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgICAkZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCi0gICAgZmkKLSAgICAkZWNobwotICAgICRlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKLSAgICAkZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCi0gICAgJGVjaG8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCi0gICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgOzsKLQotICAjIGxpYnRvb2wgZXhlY3V0ZSBtb2RlCi0gIGV4ZWN1dGUpCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogZXhlY3V0ZSIKLQotICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCi0gICAgY21kPSIkbm9ub3B0IgotICAgIGlmIHRlc3QgLXogIiRjbWQiOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLQotICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCi0gICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KLSAgICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogXGAkZmlsZScgaXMgbm90IGEgZmlsZSIgMT4mMgotCSRlY2hvICIkaGVscCIgMT4mMgotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLQotICAgICAgZGlyPQotICAgICAgY2FzZSAkZmlsZSBpbgotICAgICAgKi5sYSkKLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLQllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQotCi0JIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCi0JZGxuYW1lPQotCWxpYnJhcnlfbmFtZXM9Ci0KLQkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQljYXNlICRmaWxlIGluCi0JKi8qIHwgKlxcKikgLiAkZmlsZSA7OwotCSopIC4gLi8kZmlsZSA7OwotCWVzYWMKLQotCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgotCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCi0JICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCi0JICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCi0JICBjb250aW51ZQotCWZpCi0KLQlkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlIiAmJiBkaXI9LgotCi0JaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCi0JICBkaXI9IiRkaXIvJG9iamRpciIKLQllbHNlCi0JICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqLmxvKQotCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KLQlkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlIiAmJiBkaXI9LgotCTs7Ci0KLSAgICAgICopCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZyBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIgMT4mMgotCWNvbnRpbnVlCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgotICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAotICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgotCi0gICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgotICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KLQlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCi0gICAgICBlbHNlCi0JZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCi0gICAgICBmaQotICAgIGRvbmUKLQotICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgotICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKLQotICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KLSAgICBhcmdzPQotICAgIGZvciBmaWxlCi0gICAgZG8KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgIC0qKSA7OwotICAgICAgKikKLQkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCi0JaWYgKCR7U0VEfSAtZSAnNHEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgY2FzZSAkZmlsZSBpbgotCSAgKi8qIHwgKlxcKikgLiAkZmlsZSA7OwotCSAgKikgLiAuLyRmaWxlIDs7Ci0JICBlc2FjCi0KLQkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCi0JICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgotICAgICAgZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBhcmdzPSIkYXJncyBcIiRmaWxlXCIiCi0gICAgZG9uZQotCi0gICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgotCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLSAgICAgIGZpCi0KLSAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwotICAgICAgZG8KLQlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgotCQkkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgotCSAgICAgIGZpIgotICAgICAgZG9uZQotCi0gICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCi0gICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKLSAgICBlbHNlCi0gICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JZXZhbCAiXCRlY2hvIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKLQkkZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotICAgICAgZmkKLSAgICAgICRlY2hvICIkY21kJGFyZ3MiCi0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICBmaQotICAgIDs7Ci0KLSAgIyBsaWJ0b29sIGNsZWFuIGFuZCB1bmluc3RhbGwgbW9kZQotICBjbGVhbiB8IHVuaW5zdGFsbCkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiAkbW9kZSIKLSAgICBybT0iJG5vbm9wdCIKKyMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV91bmluc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgUk09IiRub25vcHQiCiAgICAgZmlsZXM9CiAgICAgcm1mb3JjZT0KICAgICBleGl0X3N0YXR1cz0wCkBAIC02NTM5LDQ0ICs5NDM2LDQxIEBACiAgICAgZm9yIGFyZwogICAgIGRvCiAgICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1mKSBybT0iJHJtICRhcmciOyBybWZvcmNlPXllcyA7OwotICAgICAgLSopIHJtPSIkcm0gJGFyZyIgOzsKLSAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKICAgICAgIGVzYWMKICAgICBkb25lCiAKLSAgICBpZiB0ZXN0IC16ICIkcm0iOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgogCiAgICAgcm1kaXJzPQogCi0gICAgb3JpZ29iamRpcj0iJG9iamRpciIKICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0gICAgICBkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLSAgICAgIGlmIHRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiOyB0aGVuCi0JZGlyPS4KLQlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKwlvZGlyPSIkb2JqZGlyIgogICAgICAgZWxzZQotCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKwlvZGlyPSIkZGlyLyRvYmpkaXIiCiAgICAgICBmaQotICAgICAgbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgogCi0gICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCi0gICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgogCWNhc2UgIiAkcm1kaXJzICIgaW4KLQkgICoiICRvYmpkaXIgIiopIDs7Ci0JICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKwkgICoiICRvZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CiAJZXNhYwogICAgICAgZmkKIAogICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KLSAgICAgIGlmICh0ZXN0IC1MICIkZmlsZSIpID4vZGV2L251bGwgMj4mMSBcCi0JfHwgKHRlc3QgLWggIiRmaWxlIikgPi9kZXYvbnVsbCAyPiYxIFwKLQl8fCB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCiAJOgogICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KIAlleGl0X3N0YXR1cz0xCkBAIC02NTkwLDU1ICs5NDg0LDMyIEBACiAgICAgICBjYXNlICRuYW1lIGluCiAgICAgICAqLmxhKQogCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KLQlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgLiAkZGlyLyRuYW1lCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKIAogCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KIAkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCiAJICBkb25lCi0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgogCi0JICBjYXNlICIkbW9kZSIgaW4KKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KIAkgIGNsZWFuKQotCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KLQkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgIGNhc2UgIiAkbGlicmFyeV9uYW1lcyAiIGluCiAJICAgICoiICRkbG5hbWUgIiopIDs7Ci0JICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CiAJICAgIGVzYWMKLQkgICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgogCSAgICA7OwogCSAgdW5pbnN0YWxsKQogCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KIAkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KLQkgICAgICBjbWRzPSRwb3N0dW5pbnN0YWxsX2NtZHMKLQkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCQlJRlM9IiRzYXZlX2lmcyIKLQkJZXZhbCBjbWQ9XCIkY21kXCIKLQkJJHNob3cgIiRjbWQiCi0JCSRydW4gZXZhbCAiJGNtZCIKLQkJaWYgdGVzdCAiJD8iIC1uZSAwICYmIHRlc3QgIiRybWZvcmNlIiAhPSB5ZXM7IHRoZW4KLQkJICBleGl0X3N0YXR1cz0xCi0JCWZpCi0JICAgICAgZG9uZQotCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCiAJICAgIGZpCiAKIAkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgogCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KLQkgICAgICBjbWRzPSRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0JICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkJSUZTPSIkc2F2ZV9pZnMiCi0JCWV2YWwgY21kPVwiJGNtZFwiCi0JCSRzaG93ICIkY21kIgotCQkkcnVuIGV2YWwgIiRjbWQiCi0JCWlmIHRlc3QgIiQ/IiAtbmUgMCAmJiB0ZXN0ICIkcm1mb3JjZSIgIT0geWVzOyB0aGVuCi0JCSAgZXhpdF9zdGF0dXM9MQotCQlmaQotCSAgICAgIGRvbmUKLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKIAkgICAgZmkKIAkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCiAJICAgIDs7CkBAIC02NjQ4LDI4OCArOTUxOSw5NSBAQAogCiAgICAgICAqLmxvKQogCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgotCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KIAogCSAgIyBSZWFkIHRoZSAubG8gZmlsZQotCSAgLiAkZGlyLyRuYW1lCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCiAKIAkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiIFwKLQkgICAgICYmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgogCSAgZmkKIAogCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiBcCi0JICAgICAmJiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgogCSAgZmkKIAlmaQogCTs7CiAKICAgICAgICopCi0JaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuIDsgdGhlbgogCSAgbm9leGVuYW1lPSRuYW1lCiAJICBjYXNlICRmaWxlIGluCiAJICAqLmV4ZSkKLQkgICAgZmlsZT1gJGVjaG8gJGZpbGV8JHtTRUR9ICdzLC5leGUkLCwnYAotCSAgICBub2V4ZW5hbWU9YCRlY2hvICRuYW1lfCR7U0VEfSAncywuZXhlJCwsJ2AKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKIAkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCi0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCiAJICAgIDs7CiAJICBlc2FjCiAJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KLQkgIGlmICgke1NFRH0gLWUgJzRxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPQotCSAgICAuICRkaXIvJG5vZXhlbmFtZQorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQogCiAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CiAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCi0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCiAJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKIAkgICAgZmkKIAkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgotCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgogCSAgICBmaQogCSAgZmkKIAlmaQogCTs7CiAgICAgICBlc2FjCi0gICAgICAkc2hvdyAiJHJtICRybWZpbGVzIgotICAgICAgJHJ1biAkcm0gJHJtZmlsZXMgfHwgZXhpdF9zdGF0dXM9MQorICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCiAgICAgZG9uZQotICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCiAKICAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCiAgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgotCSRzaG93ICJybWRpciAkZGlyIgotCSRydW4gcm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEKKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCiAgICAgICBmaQogICAgIGRvbmUKIAogICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gICAgOzsKK30KIAotICAiIikKLSAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIgMT4mMgotICAgICRlY2hvICIkZ2VuZXJpY19oZWxwIiAxPiYyCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgOzsKLSAgZXNhYworeyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CiAKLSAgaWYgdGVzdCAteiAiJGV4ZWNfY21kIjsgdGhlbgotICAgICRlY2hvICIkbW9kZW5hbWU6IGludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciIDE+JjIKLSAgICAkZWNobyAiJGdlbmVyaWNfaGVscCIgMT4mMgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICBmaQotZmkgIyB0ZXN0IC16ICIkc2hvd19oZWxwIgordGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgogCiBpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCi0gIGV2YWwgZXhlYyAkZXhlY19jbWQKKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCiAgIGV4aXQgJEVYSVRfRkFJTFVSRQogZmkKIAotIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCi1jYXNlICRtb2RlIGluCi0iIikgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorZXhpdCAkZXhpdF9zdGF0dXMKIAotUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0KLSAgICAtLWNvbmZpZyAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotICAgIC0tZGVidWcgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKLS1uLCAtLWRyeS1ydW4gICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcwotICAgIC0tZmVhdHVyZXMgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAgIC0tZmluaXNoICAgICAgICAgIHNhbWUgYXMgXGAtLW1vZGU9ZmluaXNoJwotICAgIC0taGVscCAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSAgICAtLW1vZGU9TU9ERSAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERSBbZGVmYXVsdD1pbmZlcnJlZCBmcm9tIE1PREUtQVJHU10KLSAgICAtLXF1aWV0ICAgICAgICAgICBzYW1lIGFzIFxgLS1zaWxlbnQnCi0gICAgLS1zaWxlbnQgICAgICAgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwotICAgIC0tdGFnPVRBRyAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKLSAgICAtLXZlcnNpb24gICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCi0KLU1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgICAgY2xlYW4gICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKLSAgICAgIGNvbXBpbGUgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0Ci0gICAgICBleGVjdXRlICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KLSAgICAgIGZpbmlzaCAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0gICAgICBpbnN0YWxsICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKLSAgICAgIGxpbmsgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKLSAgICAgIHVuaW5zdGFsbCAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQotCi1NT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBUcnkgXGAkbW9kZW5hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IKLWEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgotCi1SZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgotICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgOzsKLQotY2xlYW4pCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCi0KLVJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0KLVJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAotdG8gUk0uCi0KLUlmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKLXdpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgOzsKLQotY29tcGlsZSkKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKLQotQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgotCi1UaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKLQotICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKLSAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKLSAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkaW5nIG5vbi1QSUMgb2JqZWN0cyBvbmx5Ci0gIC1zdGF0aWMgICAgICAgICAgIGFsd2F5cyBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0KLUNPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCi1mcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgotCi1UaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KLVNPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQotbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgotICA7OwotCi1leGVjdXRlKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgotCi1BdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KLQotVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6Ci0KLSAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKLQotVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJwotZmxhZ3MuCi0KLUlmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKLWludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQotZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCi0KLVRoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgotICA7OwotCi1maW5pc2gpCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KLQotQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KLQotRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KLQotVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCi10aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKLSAgOzsKLQotaW5zdGFsbCkKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCi0KLUluc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgotCi1JTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKLWVpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgotCi1UaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQotQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCi0gIDs7Ci0KLWxpbmspCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgotCi1MaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCi1jcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgotCi1MSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKLWEgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgotCi1UaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKLQotICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKLSAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCi0gIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQotICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scwotICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQotICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQotICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKLSAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCi0gICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAotICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCi0gIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCi0gIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAotICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQotICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKLSAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCi0gIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cwotICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cwotICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKLSAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAotICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgotICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCi0gIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCi0gIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCi0gIC1zdGF0aWMtbGlidG9vbC1saWJzCi0gICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0gIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KLQotQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KLQotRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKLXRyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5Ci1vYmplY3QgZmlsZXMuCi0KLUlmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAotb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcwotcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCi11c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKLWlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCi0gIDs7Ci0KLXVuaW5zdGFsbCkKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCi0KLVJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotCi1STSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKLXRvIFJNLgotCi1JZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KLU90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgOzsKLQotKikKLSAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIgMT4mMgotICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gIDs7Ci1lc2FjCi0KLSRlY2hvCi0kZWNobyAiVHJ5IFxgJG1vZGVuYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgotCi1leGl0ICQ/CiAKICMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCiAjIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZwpAQCAtNjk0MywxNCArOTYyMSwxNyBAQAogIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCiAKICMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKLWRpc2FibGVfbGlicz1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCiAjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAogCiAjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCi1kaXNhYmxlX2xpYnM9c3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKICMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCiAKICMgTG9jYWwgVmFyaWFibGVzOgogIyBtb2RlOnNoZWxsLXNjcmlwdAogIyBzaC1pbmRlbnRhdGlvbjoyCiAjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9tNC9hY19hZGRfc2VhcmNoX3BhdGgubTQgYi9tNC9hY19hZGRfc2VhcmNoX3BhdGgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwYTgxOQotLS0gL2Rldi9udWxsCisrKyBiL200L2FjX2FkZF9zZWFyY2hfcGF0aC5tNApAQCAtMCwwICsxLDEzIEBACitkbmwKK2RubCBBZGQgYSBzZWFyY2ggcGF0aCB0byB0aGUgTElCUyBhbmQgQ1BQRkxBR1MgdmFyaWFibGVzCitkbmwKK0FDX0RFRlVOKFtBQ19BRERfU0VBUkNIX1BBVEhdLFsKKyAgaWYgdGVzdCAieCQxIiAhPSB4IC1hIC1kICQxOyB0aGVuCisgICAgIGlmIHRlc3QgLWQgJDEvbGliOyB0aGVuCisgICAgICAgTERGTEFHUz0iLUwkMS9saWIgJExERkxBR1MiCisgICAgIGZpCisgICAgIGlmIHRlc3QgLWQgJDEvaW5jbHVkZTsgdGhlbgorCUNQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgorICAgICBmaQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2FjX21zZ19jYWNoZS5tNCBiL200L2FjX21zZ19jYWNoZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Q3Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYWNfbXNnX2NhY2hlLm00CkBAIC0wLDAgKzEsMjQgQEAKK2RubAorZG5sIFN0b3JlIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIGxhdGVyLgorZG5sCitBQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0lOSVRdLFsKKyAgcm0gLWYgY29uZmlndXJlLXN1bW1hcnkKK10pCisKK0FDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfQUREXSxbCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgJDEKK0VPRgorXSkKKworQUNfREVGVU4oW0FDX01TR19DQUNIRV9ESVNQTEFZXSxbCisgIGVjaG8gIiIKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIgICAgICAgICAgICBOZXQtU05NUCBjb25maWd1cmF0aW9uIHN1bW1hcnk6IgorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiIKKyAgY2F0IGNvbmZpZ3VyZS1zdW1tYXJ5CisgIGVjaG8gIiIKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIiCitdKQpkaWZmIC0tZ2l0IGEvbTQvYWNfbXNnX21vZHVsZV9kYmcubTQgYi9tNC9hY19tc2dfbW9kdWxlX2RiZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNiMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvYWNfbXNnX21vZHVsZV9kYmcubTQKQEAgLTAsMCArMSw3IEBACitBQ19ERUZVTihbQUNfTVNHX01PRFVMRV9EQkddLAorWworICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCisgICAgZWNobyAkMSAkMiAkMyAkNAorICBmaQorXQorKQpkaWZmIC0tZ2l0IGEvbTQvYWNfcHJvbXB0X3VzZXIubTQgYi9tNC9hY19wcm9tcHRfdXNlci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJkZDlhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYWNfcHJvbXB0X3VzZXIubTQKQEAgLTAsMCArMSw1MiBAQAorZG5sIEBzeW5vcHNpcyBBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSkKK2RubAorZG5sIEFza3MgYSBRVUVTVElPTiBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbiBWQVJJQUJMRU5BTUUgd2l0aCBhbiBvcHRpb25hbAorZG5sIERFRkFVTFQgdmFsdWUgaWYgdGhlIHVzZXIgbWVyZWx5IGhpdHMgcmV0dXJuLgorZG5sCitkbmwgQHZlcnNpb24gMS4xNQorZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitkbmwKK0FDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkVdLAorWworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIkMiAoJDMpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JkFTX09SSUdJTkFMX1NURElOX0ZECitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiQzIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iJDMiCitmaQorZXZhbCAkMT1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iJDMiCitldmFsICQxPVwiJHRtcGlucHV0XCIKK2ZpCitdKSBkbmwgZG9uZSBBQ19QUk9NUFRfVVNFUgorCitkbmwgQHN5bm9wc2lzIEFDX1BST01QVF9VU0VSKFZBUklBQkxFTkFNRSxRVUVTVElPTixbREVGQVVMVF0sUVVPVEVEKQorZG5sCitkbmwgQXNrcyBhIFFVRVNUSU9OIGFuZCBwdXRzIHRoZSByZXN1bHRzIGluIFZBUklBQkxFTkFNRSB3aXRoIGFuIG9wdGlvbmFsCitkbmwgREVGQVVMVCB2YWx1ZSBpZiB0aGUgdXNlciBtZXJlbHkgaGl0cyByZXR1cm4uICBBbHNvIGNhbGxzCitkbmwgQUNfREVGSU5FX1VOUVVPVEVEKCkgb24gdGhlIFZBUklBQkxFTkFNRSBmb3IgVkFSSUFCTEVOQU1FcyB0aGF0IHNob3VsZAorZG5sIGJlIGVudGVyZWQgaW50byB0aGUgY29uZmlnLmggZmlsZSBhcyB3ZWxsLiAgSWYgUVVPVEVEIGlzICJxdW90ZWQiIHRoZW4KK2RubCB0aGUgcmVzdWx0IHdpbGwgYmUgZGVmaW5lZCB3aXRoaW4gcXVvdGVzLgorZG5sCitkbmwgQHZlcnNpb24gMS4xNQorZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitkbmwKK0FDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl0sCitbCitNU0dfQ0hFQ0s9InBhdHN1YnN0KFskMl0sIFsuKgorXSwgW10pIgorQUNfQ0FDSEVfQ0hFQ0soJE1TR19DSEVDSywgYWNfY3ZfdXNlcl9wcm9tcHRfJDEsCitbZWNobyAiIiA+JkFTX01FU1NBR0VfRkQKK0FDX1BST01QVF9VU0VSX05PX0RFRklORSgkMSxbJDJdLCQzKQorZXZhbCBhY19jdl91c2VyX3Byb21wdF8kMT1cJCQxCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiZBU19NRVNTQUdFX0ZECitdKQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieCQ0IiA9ICJ4cXVvdGVkIiAtbyAieCQ0IiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIikKKyAgZWxzZQorICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwkYWNfY3ZfdXNlcl9wcm9tcHRfJDEpCisgIGZpCitmaQorXSkgZG5sCmRpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODEyNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbGlidG9vbC5tNApAQCAtMCwwICsxLDc4MzEgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgICAgICAgICAgICAgICBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgICAgICAgICAgICAgICBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorXSkKKworIyBzZXJpYWwgNTcgTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX0xBTkddKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX0JVSUxERElSXSlkbmwKKworZG5sIEF1dG9jb25mIGRvZXNuJ3QgY2F0Y2ggdW5leHBhbmRlZCBMVF8gbWFjcm9zIGJ5IGRlZmF1bHQ6CittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/TFRfW0EtWl9dKyRdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorZG5sIGFjbG9jYWwgZG9lc24ndCBwdWxsIGx0b3B0aW9ucy5tNCwgbHRzdWdhci5tNCwgb3IgbHR2ZXJzaW9uLm00CitkbmwgdW5sZXNzIHdlIHJlcXVpcmUgYW4gQUNfREVGVU5lZCBtYWNybzoKK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUU1VHQVJfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFZFUlNJT05fVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfTFRNQUlOXSlkbmwKKworX0xUX1NIRUxMX0lOSVQoW1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9XSkKKworZG5sIFBhcnNlIE9QVElPTlMKK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX0NDX0JBU0VOQU1FKENDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK200X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAorW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorXSkKKworCisjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAorWzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KK10pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisKKworIyBfTFRfU0VUVVAKKyMgLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1NFVFVQXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfUkVRVUlSRShbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworX0xUX0NIRUNLX09CSkRJUgorCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgZmV3IHNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwIHVzIGRvIHJvYnVzdCBxdW90aW5nLgorbTRfZGVmdW4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwKK1sjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworXSkKKworIyBfTFRfUFJPR19MVE1BSU4KKyMgLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSBgY29uZmlndXJlJywgYW5kIGBjb25maWcuc3RhdHVzJworIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorIyBgY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCittNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKK1ttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorXSkjIF9MVF9QUk9HX0xUTUFJTgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEFjY3VtdWxhdGUgY29kZSBmb3IgY3JlYXRpbmcgbGlidG9vbC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKKyMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKKyMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSBgbGlidG9vbCcKKyMgbGFiZWwuCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbSU5JVC1DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgSU5JVC1DT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xfSU5JVF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKKworCisjIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10pCisKKworIyBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoW0NPTU1BTkRTXSwgW0lOSVRfQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCitbX0xUX0NPTkZJR19MSUJUT09MKFskMV0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbJDJdKQorXSkKKworCisjIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBsZWFkaW5nIGNvbW1lbnQgbWFya3MgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSwgYW5kIGEgdHJhaWxpbmcKKyMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgorbTRfZGVmaW5lKFtfTFRfRk9STUFUX0NPTU1FTlRdLAorW200X2lmdmFsKFskMV0sIFsKK200X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCisgICAgICAgICAgICAgIFtbJ2AkXF1dLCBbXFxcJl0pXW00X2JtYXRjaChbJDFdLCBbWyE/Ll0kXSwgW10sIFsuXSkKKyldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGSVhNRTogRWxpbWluYXRlIFZBUk5BTUUgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgX0xUX0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSwgW0lTLVRBR0dFRD9dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENPTkZJR05BTUUgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHZhbHVlIGluIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyMgVkFSTkFNRSBpcyB0aGUgKGJhc2UpIG5hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCisjIFZBUk5BTUUuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgorbTRfZGVmaW5lKFtfTFRfREVDTF0sCitbbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAorICAgIFtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtsaWJ0b29sX25hbWVdLAorCVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQorICAgIG00X2lmdmFsKFskNF0sCisJW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2Rlc2NyaXB0aW9uXSwgWyQ0XSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKKwlbdGFnZ2VkP10sIFttNF9pZnZhbChbJDVdLCBbeWVzXSwgW25vXSldKV0pCitdKQorCisKKyMgX0xUX1RBR0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR0RFQ0xdLCBbX0xUX0RFQ0woWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgW3llc10pXSkKKworCisjIGx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFt5ZXNdLCAkQCldKQorCisKKyMgX2x0X2RlY2xfZmlsdGVyKFNVQktFWSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAorW200X2Nhc2UoWyQjXSwKKyAgWzBdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCisgIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgWzJdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFszXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbJDNdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAorXSkKKworCisjIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMV0sICRAKV0pCisKKworIyBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzJdLCAkQCldKQorCisKKyMgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfYXNzZXJ0KFskIyA8PSAyXSlkbmwKK18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKKyAgICBtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfcXVvdGUoX0xUX1RBR1MpKSwgWyBdKSldKQorbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQorCisKKyMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2FsbF92YXJuYW1lc10sCitbXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgIG00X2lmKFskMl0sIFtdLAorCSAgIG00X3F1b3RlKGx0X2RlY2xfdmFybmFtZXMpLAorCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCitdKQorbTRfZGVmaW5lKFtfbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCisJCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAorXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gYGNvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCisjIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBgY29uZmlndXJlJy4gIFZBUk5BTUUKKyMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKK1skMT0nYCRFQ0hPICIkXVskMSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCisjIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAorIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKKyMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86CisjCisjICAgIDx2YXI+PSdgJEVDSE8gIiQ8dmFyPiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAorbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKK2F2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCisjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorIworIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCisjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCittNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKKyAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCittNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKyAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKKyAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKK200X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCisjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sCisgICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCisKKworIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorCisKKyMgX0xUX0NPTkZJR19DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgorIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKyMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCisjIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgorbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCisJZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAorCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6CisgICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKyAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAorICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgorICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQorXSkjX0xUX0NPTkZJR19DT01NQU5EUworCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorWworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCRbXTEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworX0xUX09VVFBVVF9MSUJUT09MX0lOSVQKK10pCisKKyMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoRklMRSwgW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KKyMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQorIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKKyMgYCMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcworIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKKyMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQorIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgorbTRfaWZkZWYoW0FTX0lOSVRfR0VORVJBVEVEXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLFtBU19JTklUX0dFTkVSQVRFRCgkQCldKV0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSwKK1ttNF9yZXF1aXJlKFtBU19QUkVQQVJFXSldZG5sCitbbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKK1tsdF93cml0ZV9mYWlsPTAKK2NhdCA+JDEgPDxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyQyCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiQxIDw8XF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKK0FTX1NIRUxMX1NBTklUSVpFCitfQVNfUFJFUEFSRQorZXhlYyBBU19NRVNTQUdFX0ZEPiYxCitfQVNFT0YKK3Rlc3QgJGx0X3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICQxW11kbmwKK200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pXSkjIF9MVF9HRU5FUkFURURfRklMRV9JTklUCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoWyIkQ09ORklHX0xUIl0sCitbIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5dKQorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitsdF9jbF9zaWxlbnQ9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCitnZW5lcmF0ZWQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OU11dCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKworbHRfY2xfdmVyc2lvbj0iXAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKK2NvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCit3aGlsZSB0ZXN0ICRbI10gIT0gMAorZG8KKyAgY2FzZSAkWzFdIGluCisgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKKyAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgIGVjaG8gIiRsdF9jbF9oZWxwIjsgZXhpdCAwIDs7CisgICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgICBkZWJ1Zz06IDs7CisgICAgLS1xdWlldCB8IC0tcSogfCAtLXNpbGVudCB8IC0tcyogfCAtcSApCisgICAgICBsdF9jbF9zaWxlbnQ9OiA7OworCisgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgorbHRfY2xfc3VjY2Vzcz06Cit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKK19MVF9MSUJUT09MX0NPTkZJR19WQVJTCitfTFRfTElCVE9PTF9UQUdfVkFSUworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUworXSkjIF9MVF9DT05GSUcKKworCisjIExUX1NVUFBPUlRFRF9UQUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAorIyAtLXRhZyBvcHRpb24sIHVzaW5nOgorIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKKworCisjIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93CittNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQorbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorCisKKyMgTFRfTEFORyhMQU5HKQorIyAtLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgorQUNfREVGVU4oW0xUX0xBTkddLAorW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK200X2Nhc2UoWyQxXSwKKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisgIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAorICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisgIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKyAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCisgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisgIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorICAgIFtfTFRfTEFORygkMSldLAorICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCitdKSMgTFRfTEFORworCisKKyMgX0xUX0xBTkcoTEFOR05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HXSwKK1ttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCisgIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCisgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKyAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKyAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCitdKSMgX0xUX0xBTkcKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtMVF9MQU5HKFdpbmRvd3MgUmVzb3VyY2UpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnXSxbbHRfY3ZfbGRfZm9yY2VfbG9hZF0sCisgICAgICBbbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0IDI+JjEgPi9kZXYvbnVsbDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgZWxzZQorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBmaQorICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH1dJworICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpXSxbXSkKKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPSIvdXNyL2xpYjovbGliIgorICBmaQorICBdKQorICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKK2ZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQorXSldKSMgX0xUX1NIRUxMX0lOSVQKKworCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KKyMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0CisjIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgorIyBwcmludGYgKHdoaWNoIHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnQgc3RyaW5nc10pCisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskW10xCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIiAKK30KKworY2FzZSAiJEVDSE8iIGluCisgIHByaW50ZiopIEFDX01TR19SRVNVTFQoW3ByaW50Zl0pIDs7CisgIHByaW50KikgQUNfTVNHX1JFU1VMVChbcHJpbnQgLXJdKSA7OworICAqKSBBQ19NU0dfUkVTVUxUKFtjYXRdKSA7OworZXNhYworCittNF9pZmRlZihbX0FTX0RFVEVDVF9TVUdHRVNURURdLAorW19BU19ERVRFQ1RfU1VHR0VTVEVEKFsKKyAgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9JHtCQVNIX1ZFUlNJT04rc2V0fSIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCAiWGBwcmludGYgJXMgJEVDSE9gIiA9ICJYJEVDSE8iIFwKKyAgICAgIHx8IHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE9gIiA9ICJYJEVDSE8iICldKV0pCisKK19MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKK19MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCisKKyMgX0xUX1dJVEhfU1lTUk9PVAorIyAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCitBQ19BUkdfV0lUSChbc3lzcm9vdF0sCitbICAtLXdpdGgtc3lzcm9vdFs9RElSXSBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKK1tdLCBbd2l0aF9zeXNyb290PW5vXSkKKworZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCitsdF9zeXNyb290PQorY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKKyB5ZXMpCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgZmkKKyAgIDs7ICMoCisgLyopCisgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICA7OyAjKAorIG5vfCcnKQorICAgOzsgIygKKyAqKQorICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX3N5c3Jvb3R9XSkKKyAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisgICA7OworZXNhYworCisgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCitbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCisKKyMgX0xUX0VOQUJMRV9MT0NLCisjIC0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKyAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK10pIyBfTFRfRU5BQkxFX0xPQ0sKKworCisjIF9MVF9QUk9HX0FSCisjIC0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorW0FDX0NIRUNLX1RPT0xTKEFSLCBbYXJdLCBmYWxzZSkKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CitfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0sIFtGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydF0sIFtsdF9jdl9hcl9hdF9maWxlXSwKKyAgW2x0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorICAgICBdKQorICBdKQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisgIFtIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXJdKQorXSkjIF9MVF9QUk9HX0FSCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tfTFRfUFJPR19BUgorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAorICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGZ1bmNfZmFsbGJhY2tfZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vbmUpCitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKyAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCitdKSMgTFRfQ01EX01BWF9MRU4KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCisKKworIyBfTFRfSEVBREVSX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKK1tBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCitdKSMgX0xUX0hFQURFUl9ETEZDTgorCisKKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9XQorX0xUX0VPRgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorCisKKyMgTFRfU1lTX0RMT1BFTl9TRUxGCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgXSkKKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKwkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAorCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisJCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCisJICAgICAgXSkKKwkgICAgXSkKKwkgIF0pCisJXSkKKyAgICAgIF0pCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKyAgICBdKQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKyAgICAgIF0pCisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorXSkjIExUX1NZU19ETE9QRU5fU0VMRgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCitdKQorX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCitdKSMgX0xUX0NPTVBJTEVSX0NfTworCisKKyMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT01QSUxFUl9DX08oWyQxXSkKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCitdKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKworCisjIF9MVF9DSEVDS19PQkpESVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorXSkjIF9MVF9DSEVDS19PQkpESVIKKworCisjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAorW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCitfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQoraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAorICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKyAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2FjdGlvbl0sIFswXSwKKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorCisKKyMgX0xUX0NNRF9TVFJJUExJQgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCitdKSMgX0xUX0NNRF9TVFJJUExJQgorCisKKyMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtbQS1aYS16XV06XCksXDEsZyIgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3MsL1woW1tBLVphLXpdXTpcKSxcMSxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKK200X2lmKFskMV0sIFtdLFsKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiXSkKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKK200X2lmKFskMV0sIFtdLFsKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBBQ19DQUNIRV9WQUwoW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sCisgICAgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAgICBdKQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW2luc3RhbGxfb3ZlcnJpZGVfbW9kZV0sIFsxXSwKKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW1J1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhY10pCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CittNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAorW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCisgIGVsc2UKKyAgICBNQUdJQ19DTUQ9OgorICBmaQorZmkKK10pIyBfTFRfUEFUSF9NQUdJQworCisKKyMgTFRfUEFUSF9MRAorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKK0FDX0RFRlVOKFtMVF9QQVRIX0xEXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitBQ19BUkdfV0lUSChbZ251LWxkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAorICAgIFt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXNdLAorICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK19MVF9QQVRIX0xEX0dOVQorQUNfU1VCU1QoW0xEXSkKKworX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorXSkjIExUX1BBVEhfTEQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK0FVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKworCisjIF9MVF9QQVRIX0xEX0dOVQorIy0gLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUEFUSF9MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKK10pIyBfTFRfUEFUSF9MRF9HTlUKKworCisjIF9MVF9DTURfUkVMT0FECisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorIyAgIC0tIFBPUlRNRSBTb21lIGxpbmtlcnMgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCittNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz1mYWxzZQorICAgIGZpCisgICAgOzsKKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCitfTFRfVEFHREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCitfTFRfVEFHREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAorXSkjIF9MVF9DTURfUkVMT0FECisKKworIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcworIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKK1tsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbWzQtOV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KKyAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXVwuW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKKworZmlsZV9tYWdpY19nbG9iPQord2FudF9ub2Nhc2VnbG9iPW5vCitpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG1pbmd3KiB8IHB3MzIqKQorICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKyAgICBlbHNlCisgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKyAgICBbSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFt3YW50X25vY2FzZWdsb2JdLCBbMV0sCisgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorCisKKyMgTFRfUEFUSF9OTQorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCitBQ19ERUZVTihbTFRfUEFUSF9OTV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgICpDT0ZGKikKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgRFVNUEJJTj06CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIDs7Citlc2FjCitdKQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisKKworIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCittNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CitBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisgIE1BTklGRVNUX1RPT0w9OgorZmkKK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jZWdjYyogfCAqLSotY3lnd2luKiB8ICotKi1oYWlrdSogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisgIDs7CisqKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVhsaW5rZXIgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctWGNvbXBpbGVyIC1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisgICAgIyBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICA7OworICBlc2FjCitdLCBbCisgIHJ1bnBhdGhfdmFyPQorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuW1syLTldXSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgW1szLTldXSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4W1s0LTldXSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKwkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSIiCisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorCSMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbAorCSMgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBlbHNlCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVtbNDVdXSopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjbCopCisJIyBOYXRpdmUgTVNWQworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCV9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGVsc2UKKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGZpfgorCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0sCisJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisJWyRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJICBwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKwkgIHRoZW4KKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBmaQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisJXSkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF0sIFsxXSwKKyAgICBbW0lmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeQorICAgIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisgICAgImFic29sdXRlIiwgaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX3NobGlicGF0aF92YXJdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2F1dG9tYXRpY10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyAgICBhZ2FpbnN0IGl0XSkKK19MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKKyAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2V4Y2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQorXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisKKworIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbHRfc2F2ZV9DQz0iJENDIgorQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKyAgTFRfU1lTX0RMT1BFTl9TRUxGCisgIF9MVF9DTURfU1RSSVBMSUIKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4W1s0LTldXSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0NfQ09ORklHCisKKworIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAoraWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKyAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKyAgQUNfUFJPR19DWFhDUFAKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCitBQ19MQU5HX1BVU0goQysrKQorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPScke3dsfScKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisJLGNsKiB8IG5vLGNsKikKKwkgICMgTmF0aXZlIE1TVkMKKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJICBsaWJleHQ9bGliCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZWxzZQorCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBmaX4KKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAgICouZXhlfCouRVhFKSA7OworCSAgICAgICopCisJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkJOzsKKwkgICAgZXNhY34KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBlbHNlCisJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZml+CisJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2RbWzEyXV0qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisJICAgICAgZmkKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKKwkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisJCSRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QyKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBvcGVuYnNkKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCisJICAgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KKwkgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKworCisjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIworIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisjIGV4Y2VwdCB0aGlzIG9uZSBjYW4gYmUgdXNlZCBieSBtNCBjb2RlIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIGJ5IGNvbmZpZ3VyZSwKKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKK0FDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCitmdW5jX3N0cmlwbmFtZV9jbmYgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKworIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAorIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK19MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9CisKK2RubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAorZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKK2RubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKK2RubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCitkbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KK200X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2ludCBhOwordm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KK19MVF9FT0YKK10sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKK10sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyKjQgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlciBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbR0NKXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwdWJsaWMgY2xhc3MgZm9vIHsKKyAgcHJpdmF0ZSBpbnQgYTsKKyAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7CisgICAgYSA9IDA7CisgIH0KK307CitfTFRfRU9GCitdKQorCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKK2VzYWMKKworZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorICAgICAgICAgY2FzZSAkcCBpbgorICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgZXNhYworICAgICAgIGZpCisgICAgICAgY2FzZSAkcCBpbgorICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHtwcmV2fSBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKiB8IHN1bkNDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKyAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisgICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisgICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisgICAgYSBzaGFyZWQgbGlicmFyeV0pCitdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworCisKKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQoraWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIENGTEFHUz0kRkZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSIkbHRfc2F2ZV9DQyIKKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKKworCisjIF9MVF9MQU5HX0ZDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRkNfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbikKKworaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0ZDPXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGZjIHRlc3Qgc291cmNlcy4KK2FjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZmMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorQ0ZMQUdTPSRHQ0pGTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgICAgIEFDX1NVQlNUKEdDSkZMQUdTKV0pXSlbXWRubAorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX0dDSl0sIFtMVF9QUk9HX0dDSl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwgW10pCisKKworIyBMVF9QUk9HX1JDCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCkKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sIFtdKQorCisKKyMgX0xUX0RFQ0xfRUdSRVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19GR1JFUF0pZG5sCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitfTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCitfTFRfREVDTChbXSwgW0VHUkVQXSwgWzFdLCBbQW4gRVJFIG1hdGNoZXJdKQorX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCitkbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworQUNfU1VCU1QoW0dSRVBdKQorXSkKKworCisjIF9MVF9ERUNMX09CSkRVTVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IG9iamR1bXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfT0JKRFVNUF0sCitbQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKK0FDX1NVQlNUKFtPQkpEVU1QXSkKK10pCisKKyMgX0xUX0RFQ0xfRExMVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSBETExUT09MIHZhcmlhYmxlIGlzIHNldC4KK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorQUNfU1VCU1QoW0RMTFRPT0xdKQorXSkKKworIyBfTFRfREVDTF9TRUQKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCittNF9kZWZ1bihbX0xUX0RFQ0xfU0VEXSwKK1tBQ19QUk9HX1NFRAordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorICAgIFtTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbl0pCitdKSMgX0xUX0RFQ0xfU0VECisKK200X2lmbmRlZihbQUNfUFJPR19TRURdLCBbCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK200X2RlZnVuKFtBQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorXSkKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKK0FDX1NVQlNUKFtTRURdKQorQUNfTVNHX1JFU1VMVChbJFNFRF0pCitdKSNBQ19QUk9HX1NFRAorXSkjbTRfaWZuZGVmCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQorCisKKyMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCisjIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0c10pCisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLGIvYywgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCitBQ19NU0dfUkVTVUxUKFskeHNpX3NoZWxsXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAiKz0iXSkKK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK0FDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCddKQorCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCitfTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCitfTFRfREVDTChbU1AyTkxdLCBbbHRfU1AyTkxdLCBbMV0sIFt0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzXSlkbmwKK19MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworCisKKyMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAorIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgorbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAorW2RubCB7CitzZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKKyQxICgpXAore1wKK200X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQorfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitdKQorCisKKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlcGxhY2UgZXhpc3RpbmcgcG9ydGFibGUgaW1wbGVtZW50YXRpb25zIG9mIHNldmVyYWwgc2hlbGwgZnVuY3Rpb25zIHdpdGgKKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCittNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCitbaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICAgIGVzYWNdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgICAgZXNhYworICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAorICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfQorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICAgIGVzYWNdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xlbl0sIFsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XSkKK2ZpCisKK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCisgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQorCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitlbHNlCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitmaQorCitpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCitmaQorXSkKKworIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKyMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgorbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCitbY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCitdKQordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKK1sjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworXSkKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pZG5sCitdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKZGlmZiAtLWdpdCBhL200L2x0b3B0aW9ucy5tNCBiL200L2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2NmZDUxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbHRvcHRpb25zLm00CkBAIC0wLDAgKzEsMzY5IEBACisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDcgbHRvcHRpb25zLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKKworIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKK1tbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworCisjIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKyMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKKyMgc2F2ZWQgYXMgYSBmbGFnLgorbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAorbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorXSkKKworCisjIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCittNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisKKworIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorIyBhcmUgc2V0LgorbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAorW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisJCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKK200X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworXSlbXWRubAorXSkKKworCisjIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisjIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCisjIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCittNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKK1sjIFNldCBvcHRpb25zCittNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKyAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQorCittNF9pZihbJDFdLFtMVF9JTklUXSxbCisgIGRubAorICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKyAgZG5sIHNwZWNpZmllZDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCisgIF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworICBdKQorICBkbmwKKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKyAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKKyAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKKyAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBdKQorXSkjIF9MVF9TRVRfT1BUSU9OUworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKK1tbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorCisKKyMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKK10pIyBMVF9PUFRJT05fREVGSU5FCisKKworIyBkbG9wZW4KKyMgLS0tLS0tCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworXSkKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQorCisKKyMgd2luMzItZGxsCisjIC0tLS0tLS0tLQorIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCitbZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKKyAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQorICA7OworZXNhYworCit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCitfTFRfREVDTChbXSwgW0FTXSwgICAgICBbMV0sIFtBc3NlbWJsZXIgcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbT2JqZWN0IGR1bXBlciBwcm9ncmFtXSlkbmwKK10pIyB3aW4zMi1kbGwKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHdpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sIFtdKQorCisKKyMgX0xUX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgYHNoYXJlZCcgYW5kCisjIGBkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzaGFyZWRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHNoYXJlZCBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TSEFSRUQKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgc3RhdGljJyBhbmQKKyMgYGRpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zdGF0aWM9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfb2xkX2xpYnNdLCBbZW5hYmxlX3N0YXRpY10sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TVEFUSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3N0YXRpY10pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtBQ19ESVNBQkxFX1NUQVRJQygkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgZmFzdC1pbnN0YWxsJworIyBhbmQgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKyAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFQpCisKK19MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKKwkgW1doZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbl0pZG5sCitdKSMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FVX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitBVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCisKKworIyBfTFRfV0lUSF9QSUMoW01PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBwaWMtb25seScgYW5kIGBuby1waWMnCisjIExUX0lOSVQgb3B0aW9ucy4KKyMgTU9ERSBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBib3RoJy4KK200X2RlZmluZShbX0xUX1dJVEhfUElDXSwKK1tBQ19BUkdfV0lUSChbcGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNdLAorCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisgICAgW3BpY19tb2RlPSIkd2l0aHZhbCJdLAorICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvbTQvbHRzdWdhci5tNCBiL200L2x0c3VnYXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwMGEwNQotLS0gL2Rldi9udWxsCisrKyBiL200L2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjMgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS9tNC9sdHZlcnNpb24ubTQgYi9tNC9sdHZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3YjVkNAotLS0gL2Rldi9udWxsCisrKyBiL200L2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBzZXJpYWwgMzI5MyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40XSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMyOTNdKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuNCcKK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvbTQvbHR+b2Jzb2xldGUubTQgYi9tNC9sdH5vYnNvbGV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTczZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5OCBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCittNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS9tNC9uZXRzbm1wX2FyZy5tNCBiL200L25ldHNubXBfYXJnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjMzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9uZXRzbm1wX2FyZy5tNApAQCAtMCwwICsxLDI3IEBACitkbmwgUmVwb3J0cyBhbiBpbnZhbGlkIG9wdGlvbiBhbmQgc3VnZ2VzdHMgLS1lbmFibGUtPEFSR1VNRU5UIDE+IGluc3RlYWQKK0FDX0RFRlVOKFtORVRTTk1QX0lOVkFMSURfRU5BQkxFXSwKKyAgW0FDX01TR19FUlJPUihbSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS0kMS8tLWRpc2FibGUtJDEgaW5zdGVhZF0pXSkKKworZG5sIFJlcG9ydHMgYW4gaW52YWxpZCBvcHRpb24gYW5kIHN1Z2dlc3RzIC0td2l0aC08QVJHVU1FTlQgMT4gaW5zdGVhZAorQUNfREVGVU4oW05FVFNOTVBfSU5WQUxJRF9XSVRIXSwKKyAgW0FDX01TR19FUlJPUihbSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtJDEvLS13aXRob3V0LSQxIGluc3RlYWRdKV0pCisKK2RubCBTaW1pbGFyIHRvIEFDX0FSR19FTkFCTEUgYnV0IGFsc28gZGVmaW5lcyBhIG1hdGNoaW5nIFdJVEggb3B0aW9uIHRoYXQKK2RubCBzdWdnZXN0cyB0aGUgdXNlIG9mIHRoZSBFTkFCTEUgb3B0aW9uIGlmIGNhbGxlZAorQUNfREVGVU4oW05FVFNOTVBfQVJHX0VOQUJMRV0sCisgIFtBQ19BUkdfRU5BQkxFKFskMV0sWyQyXWRubAorICAgICBtNF9pZihtNF9ldmFsKCQjIDwgMyksMSxbXSxbLFskM11dKWRubAorICAgICBtNF9pZihtNF9ldmFsKCQjIDwgNCksMSxbXSxbLFskNF1dKSkKKyAgIEFDX0FSR19XSVRIKAorICAgICBbJDFdLCwKKyAgICAgW05FVFNOTVBfSU5WQUxJRF9FTkFCTEUoWyQxXSldKV0pCisKK2RubCBTaW1pbGFyIHRvIEFDX0FSR19XSVRIIGJ1dCBhbHNvIGRlZmluZXMgYSBtYXRjaGluZyBFTkFCTEUgb3B0aW9uIHRoYXQKK2RubCBzdWdnZXN0cyB0aGUgdXNlIG9mIHRoZSBXSVRIIG9wdGlvbiBpZiBjYWxsZWQKK0FDX0RFRlVOKFtORVRTTk1QX0FSR19XSVRIXSwKKyAgW0FDX0FSR19XSVRIKFskMV0sWyQyXWRubAorICAgICBtNF9pZihtNF9ldmFsKCQjIDwgMyksMSxbXSxbLFskM11dKWRubAorICAgICBtNF9pZihtNF9ldmFsKCQjIDwgNCksMSxbXSxbLFskNF1dKSkKKyAgIEFDX0FSR19FTkFCTEUoCisgICAgIFskMV0sLAorICAgICBbTkVUU05NUF9JTlZBTElEX1dJVEgoWyQxXSldKV0pCmRpZmYgLS1naXQgYS9tNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00IGIvbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ4YTEyCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNApAQCAtMCwwICsxLDM1IEBACitkbmwgQHN5bm9wc2lzIE5FVFNOTVBfU0VBUkNIX0xJQlMoRlVOQ1RJT04sIFNFQVJDSC1MSUJTLCBbQUNUSU9OLUlGLUZPVU5EXSwKK2RubCAgICAgICAgICAgICBbQUNUSU9OLUlGLU5PVC1GT1VORF0sIFtPVEhFUi1MSUJSQVJJRVNdLCBbVEFSR0VULVZBUklBQkxFXSkKK2RubCBTaW1pbGFyIHRvIEFDX1NFQVJDSF9MSUJTIGJ1dCBjaGFuZ2VzIFRBUkdFVC1WQVJJQUJMRSBpbnN0ZWFkIG9mIExJQlMKK2RubCBJZiBUQVJHRVQtVkFSSUFCTEUgaXMgdW5zZXQgdGhlbiBMSUJTIGlzIHVzZWQKK0FDX0RFRlVOKFtORVRTTk1QX1NFQVJDSF9MSUJTXSwKK1ttNF9wdXNoZGVmKFtuZXRzbm1wX3RhcmdldF0sbTRfaWZ2YWwoWyQ2XSxbJDZdLFtMSUJTXSkpCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgJDFdLAorICAgIFtuZXRzbm1wX2N2X2Z1bmNfJDFfXW5ldHNubXBfdGFyZ2V0LAorICAgIFtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG00X2lmKG5ldHNubXBfdGFyZ2V0LCBbTElCU10sCisgICAgICAgICBbbmV0c25tcF90YXJnZXRfdmFsPSIkTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJDUgJHtMSUJTfSJdLAorICAgICAgICAgW25ldHNubXBfdGFyZ2V0X3ZhbD0iJG5ldHNubXBfdGFyZ2V0IgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gJDUgJHtMSUJTfSJdKQorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSxbJDFdKV0sCisgICAgICAgICBbbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiXSwKKyAgICAgICAgIFtmb3IgbmV0c25tcF9jdXJfbGliIGluICQyIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX0NBTEwoW10sWyQxXSldLAorICAgICAgICAgICAgICAgICAgW25ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWtdKQorICAgICAgICAgIGRvbmVdKQorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgW25ldHNubXBfY3ZfZnVuY18kMV9dbmV0c25tcF90YXJnZXQ9IiR7bmV0c25tcF9yZXN1bHR9Il0pCisgaWYgdGVzdCAiJHtbbmV0c25tcF9jdl9mdW5jXyQxX11uZXRzbm1wX3RhcmdldH0iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtbbmV0c25tcF9jdl9mdW5jXyQxX11uZXRzbm1wX3RhcmdldH0iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBuZXRzbm1wX3RhcmdldD0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisgICAgJDMKKyBtNF9pZnZhbChbJDRdLCBbZWxzZQorICAgICQ0XSkKKyBmaQorIG00X3BvcGRlZihbbmV0c25tcF90YXJnZXRdKV0pCmRpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUuaW4gYi9tYW4vTWFrZWZpbGUuaW4KaW5kZXggYWIxODM3NS4uMDFmZTg1MiAxMDA2NDQKLS0tIGEvbWFuL01ha2VmaWxlLmluCisrKyBiL21hbi9NYWtlZmlsZS5pbgpAQCAtMTQsNzAgKzE0LDY4IEBACiAjIGxvY2FsIHN0dWZmCiAjCiAKLU1BTjEgID0gc25tcGluZm9ybS4xCi1NQU4xRyA9IHNubXBidWxrZ2V0LjEgc25tcGNtZC4xIHNubXBnZXQuMSBzbm1wc2V0LjEgc25tcHdhbGsuMSBcCitNQU4xICA9IHNubXBpbmZvcm0uMSBzbm1wLWJyaWRnZS1taWIuMQorCitATkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUVAQUdFTlRYVFJBUCA9IGFnZW50eHRyYXAuMQorQE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRUBBR0VOVFhUUkFQID0KKworTUFOMUcgPSAkKEFHRU5UWFRSQVApIHNubXBidWxrZ2V0LjEgc25tcGNtZC4xIHNubXBnZXQuMSBzbm1wc2V0LjEgc25tcHdhbGsuMSBcCiAJc25tcGJ1bGt3YWxrLjEgc25tcGdldG5leHQuMSBzbm1wdGVzdC4xIHNubXB0cmFuc2xhdGUuMSBzbm1wdHJhcC4xIFwKIAlzbm1wdXNtLjEgc25tcHZhY20uMSBzbm1wdGFibGUuMSBzbm1wc3RhdHVzLjEgc25tcGNvbmYuMSBtaWIyYy4xIFwKIAlzbm1wbmV0c3RhdC4xIHNubXBkZWx0YS4xIHNubXBkZi4xIGVuY29kZV9rZXljaGFuZ2UuMSBmaXhwcm9jLjEgXAotCW5ldC1zbm1wLWNvbmZpZy4xIG1pYjJjLXVwZGF0ZS4xIHRrbWliLjEgdHJhcHRvZW1haWwuMQorCW5ldC1zbm1wLWNvbmZpZy4xIG1pYjJjLXVwZGF0ZS4xIHRrbWliLjEgdHJhcHRvZW1haWwuMSBcCisJbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMQogCi1NQU4zICA9IHNubXBfY2xvc2UuMyBzbm1wX2ZyZWVfcGR1LjMgc25tcF9vcGVuLjMgc25tcF9yZWFkLjMgXAotCXNubXBfc2VsZWN0X2luZm8uMyBzbm1wX3NlbmQuMyBzbm1wX3RpbWVvdXQuMwkJCSAgICAgICBcCi0Jc25tcF9zZXNzX2FzeW5jX3NlbmQuMyBzbm1wX3Nlc3NfY2xvc2UuMyBzbm1wX3Nlc3NfZXJyb3IuMyAgICAgXAotCXNubXBfc2Vzc19pbml0LjMgc25tcF9zZXNzX29wZW4uMyBzbm1wX3Nlc3NfcmVhZC4zCSAgICAgICBcCi0Jc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMgc25tcF9zZXNzX3NlbmQuMyBzbm1wX3Nlc3NfdGltZW91dC4zICAgXAotCXNubXBfc2Vzc19zZXNzaW9uLjMgc25tcF9wZXJyb3IuMyBzbm1wX3Nlc3NfcGVycm9yLjMJICAgICAgIFwKLQlzbm1wX2Vycm9yLjMgc25tcF9hcGlfZXJyc3RyaW5nLjMgaW5pdF9taWIuMyBhZGRfbWliZGlyLjMgICAgICBcCi0JaW5pdF9taWJfaW50ZXJuYWxzLjMgc25tcF9zZXRfbWliX3dhcm5pbmdzLjMgcmVhZF9tb2R1bGUuMyAgICAgXAotCXJlYWRfYWxsX21pYnMuMyByZWFkX21pYi4zIHJlYWRfbW9kdWxlX25vZGUuMyByZWFkX29iamlkLjMgICAgIFwKLQlhZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMgc2h1dGRvd25fbWliLjMgcHJpbnRfbWliLjMJICAgICAgIFwKLQlwcmludF92YXJpYWJsZS4zIHByaW50X3ZhbHVlLjMgcHJpbnRfb2JqaWQuMwkJICAgICAgIFwKLQlwcmludF9kZXNjcmlwdGlvbi4zIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMJICAgICAgIFwKLQlnZXRfbW9kdWxlX25vZGUuMyBuZXRzbm1wX2FnZW50LjMgbmV0c25tcF9idWxrX3RvX25leHQuMyAgICAgICBcCi0JbmV0c25tcF9kZWJ1Zy4zIG5ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMgbmV0c25tcF9oYW5kbGVyLjMgXAotCW5ldHNubXBfaW5zdGFuY2UuMyBuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMwkgICAgICAgXAotCW5ldHNubXBfbXVsdGlwbGV4ZXIuMyBuZXRzbm1wX29sZF9hcGkuMyBuZXRzbm1wX3JlYWRfb25seS4zICAgIFwKLQluZXRzbm1wX3NlcmlhbGl6ZS4zIG5ldHNubXBfdGFibGUuMyBuZXRzbm1wX3RhYmxlX2FycmF5LjMgICAgICBcCi0JbmV0c25tcF90YWJsZV9kYXRhLjMgbmV0c25tcF90YWJsZV9kYXRhc2V0LjMJCSAgICAgICBcCi0JbmV0c25tcF90YWJsZV9pdGVyYXRvci4zIG5ldHNubXBfc2NhbGFyLjMgICAgICAgXAotCW5ldHNubXBfd2F0Y2hlci4zIG5ldHNubXBfbW9kZV9lbmRfY2FsbC4zIG5ldHNubXBfbGlicmFyeS4zICAgIFwKLQluZXRzbm1wX21pYl91dGlsaXRpZXMuMwkJCQkJICAgICAgIFwKLQluZXRzbm1wX2JhYnlfc3RlcHMuMyBuZXRzbm1wX2NhY2hlX2hhbmRsZXIuMwkJICAgICAgIFwKLQluZXRzbm1wX2NvbnRhaW5lci4zIG5ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMgbmV0c25tcF9sZWFmLjMgICBcCi0JbmV0c25tcF9yb3dfbWVyZ2UuMwkJICAgICAgIFwKLQluZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zIG5ldHNubXBfc3Rhc2hfY2FjaGUuMwkgICAgICAgXAotCW5ldHNubXBfdXRpbGl0aWVzLjMKLQotTUFOM0cgPSBkZWZhdWx0X3N0b3JlLjMgbWliX2FwaS4zIHJlYWRfY29uZmlnLjMgc25tcF9hZ2VudF9hcGkuMyBzbm1wX2FsYXJtLjMgXAotCXNubXBfYXBpLjMgc25tcF9zZXNzX2FwaS4zIHNubXBfdHJhcF9hcGkuMworIyBJZiBNQU4zIGlzIHBvcHVsYXRlZCBhZ2FpbiwgdGhlbiByZW1lbWJlciB0byByZS1lbmFibGUgdGhlIGNvcnJlc3BvbmRpbmcKKyMgYWN0aW9uIGxpbmUgd2l0aGluIHRoZSAnbWFuaW5zdGFsbCcgdGFyZ2V0CitNQU4zICA9IAorTUFOM19BUEkgPSBuZXRzbm1wX21pYl9hcGkuMyBuZXRzbm1wX2NvbmZpZ19hcGkuMyBzbm1wX2FsYXJtLjMgXAorCW5ldHNubXBfc2Vzc2lvbl9hcGkuMyBuZXRzbm1wX3Nlc3NfYXBpLjMgbmV0c25tcF90cmFwX2FwaS4zIG5ldHNubXBfdmFyYmluZF9hcGkuMyBuZXRzbm1wX3BkdV9hcGkuMyAKK01BTjNHID0gZGVmYXVsdF9zdG9yZS4zIG5ldHNubXBfYWdlbnRfYXBpLjMgJChNQU4zX0FQSSkKIE1BTjVHID0gc25tcGQuY29uZi41IHNubXB0cmFwZC5jb25mLjUgc25tcC5jb25mLjUgc25tcF9jb25maWcuNSB2YXJpYWJsZXMuNSBcCiAgICAgICAgIG1pYjJjLmNvbmYuNSBzbm1wZC5leGFtcGxlcy41IHNubXBkLmludGVybmFsLjUKIE1BTjhHID0gc25tcHRyYXBkLjggc25tcGQuOAogCi1ERUZBVUxUX1NUT1JFX0FMSUFTRVMgPSBuZXRzbm1wX2RzX2dldF9ib29sZWFuLjMgbmV0c25tcF9kc19nZXRfaW50LjMJXAotCW5ldHNubXBfZHNfZ2V0X3N0cmluZy4zIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnLjMJCVwKLQluZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYi4zIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4uMyAJCVwKLQluZXRzbm1wX2RzX3NldF9pbnQuMwkJCQkJCVwKLQluZXRzbm1wX2RzX3NldF9zdHJpbmcuMyBuZXRzbm1wX2RzX3NodXRkb3duLjMKLVJFQURfQ09ORklHX0FMSUFTRVMgPSBjb25maWdfcGVycm9yLjMgY29uZmlnX3B3YXJuLjMJCQlcCi0JcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UuMyByZWFkX2NvbmZpZ3MuMyByZWFkX3ByZW1pYl9jb25maWdzLjMJXAotCXJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlci4zIHJlZ2lzdGVyX2FwcF9wcmVtaWJfaGFuZGxlci4zCVwKLQlyZWdpc3Rlcl9jb25maWdfaGFuZGxlci4zIHJlZ2lzdGVyX21pYl9oYW5kbGVycy4zIAkJXAotCXJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyLjMgCQkJCQlcCitNSUJfQUxJQVNFUyAgICAgPSBhZGRfbWliZGlyLjMgYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zCQlcCisJZnByaW50X2Rlc2NyaXB0aW9uLjMgZnByaW50X29iamlkLjMgZ2V0X21vZHVsZV9ub2RlLjMJXAorCW5ldHNubXBfaW5pdF9taWIuMyBuZXRzbm1wX3JlYWRfbW9kdWxlLjMJCVwKKwlwcmludF9kZXNjcmlwdGlvbi4zIHByaW50X21pYi4zIHByaW50X29iamlkLjMJCVwKKwlyZWFkX2FsbF9taWJzLjMgcmVhZF9taWIuMyByZWFkX29iamlkLjMJCQlcCisJc2h1dGRvd25fbWliLjMgc25tcF9wYXJzZV9vaWQuMyBzbm1wX3NldF9taWJfZXJyb3JzLjMJXAorCXNubXBfc2V0X21pYl93YXJuaW5ncy4zIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMJXAorCXNucHJpbnRfZGVzY3JpcHRpb24uMyBzbnByaW50X29iamlkLjMKK0NPTkZJR19BTElBU0VTICA9IGNvbmZpZ19wZXJyb3IuMyBjb25maWdfcHdhcm4uMwkJCSAgICBcCisJcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UuMyByZWFkX2NvbmZpZ3MuMyByZWFkX3ByZW1pYl9jb25maWdzLjMJICAgIFwKKwlyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIuMyByZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlci4zIFwKKwlyZWdpc3Rlcl9jb25maWdfaGFuZGxlci4zIHJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyLjMJICAgIFwKKwlyZWdpc3Rlcl9taWJfaGFuZGxlcnMuMyByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyLjMJICAgIFwKKwl1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMuMwkJCSAJICAgIFwKIAl1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlci4zIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIuMwotU05NUF9BTEFSTV9BTElBU0VTID0gc25tcF9hbGFybV9yZWdpc3Rlci4zIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIuMyAJXAotCXNubXBfYWxhcm1fdW5yZWdpc3Rlci4zCi1TTk1QX1NFVF9TQVZFX0RFU0NSSVBUSU9OU19BTElBU0VTID0gZnByaW50X2Rlc2NyaXB0aW9uLjMgZnByaW50X29iamlkLjMgXAotCWZwcmludF92YWx1ZS4zIGZwcmludF92YXJpYWJsZS4zIHNucHJpbnRfb2JqaWQuMyBzbnByaW50X3ZhbHVlLjMgXAotCXNucHJpbnRfdmFyaWFibGUuMyBzcHJpbnRfcmVhbGxvY19vYmppZC4zIHNwcmludF9yZWFsbG9jX3ZhbHVlLjMgXAotCXNwcmludF9yZWFsbG9jX3ZhcmlhYmxlLjMKLVNOTVBfVFJBUF9BUElfQUxJQVNFUyA9IHNlbmRfZWFzeV90cmFwLjMgc2VuZF90cmFwX3ZhcnMuMyBzZW5kX3YydHJhcC4zCitBTEFSTV9BTElBU0VTICAgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyLjMgc25tcF9hbGFybV9yZWdpc3Rlcl9oci4zIHNubXBfYWxhcm1fdW5yZWdpc3Rlci4zCitTRVNTSU9OX0FMSUFTRVMgPSBzbm1wX2FwaV9lcnJzdHJpbmcuMyBzbm1wX2Nsb3NlLjMgc25tcF9lcnJvci4zICAgIFwKKwlzbm1wX29wZW4uMyBzbm1wX3BlcnJvci4zIHNubXBfcmVhZC4zIHNubXBfc2VsZWN0X2luZm8uMyAgICBcCisJc25tcF9zZW5kLjMgc25tcF9zZXNzX3BlcnJvci4zIHNubXBfdGltZW91dC4zICAgICAgICAgICAgICAgXAorCXNubXBfYXN5bmNfc2VuZC4zIHNubXBfc3luY2hfcmVzcG9uc2UuMworU1NFU1NfQUxJQVNFUyAgID0gc25tcF9zZXNzX2FzeW5jX3NlbmQuMyBzbm1wX3Nlc3NfY2xvc2UuMyBzbm1wX3Nlc3NfZXJyb3IuMyBcCisJc25tcF9zZXNzX2luaXQuMyBzbm1wX3Nlc3Nfb3Blbi4zIHNubXBfc2Vzc19yZWFkLjMJCSAgICAgXAorCXNubXBfc2Vzc19zZWxlY3RfaW5mby4zIHNubXBfc2Vzc19zZW5kLjMJCQkgICAgIFwKKwlzbm1wX3Nlc3Nfc2Vzc2lvbi4zIHNubXBfc2Vzc190aW1lb3V0LjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlLjMKK1RSQVBfQUxJQVNFUyAgICA9IHNlbmRfZWFzeV90cmFwLjMgc2VuZF90cmFwX3ZhcnMuMyBzZW5kX3YydHJhcC4zIAorVkFSQklORF9BTElBU0VTID0gZnByaW50X3ZhbHVlLjMgZnByaW50X3ZhcmlhYmxlLjMJXAorCXByaW50X3ZhbHVlLjMgcHJpbnRfdmFyaWFibGUuMwkJCVwKKwlzbm1wX2FkZF9udWxsX3Zhci4zIHNubXBfY2xvbmVfdmFyYmluZC4zCVwKKwlzbm1wX2ZyZWVfdmFyLjMgc25tcF9mcmVlX3ZhcmJpbmQuMwkJXAorCXNubXBfcGR1X2FkZF92YXJpYWJsZS4zCQkJCVwKKwlzbm1wX3NldF92YXJfb2JqaWQuMyBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlci4zIFwKKwlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUuMyBzbm1wX3NldF92YXJfdmFsdWUuMyAgIFwKKwlzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlLjMgc25wcmludF92YWx1ZS4zIHNucHJpbnRfdmFyaWFibGUuMworUERVX0FMSUFTRVMgICAgID0gc25tcF9jbG9uZV9wZHUuMyBzbm1wX2ZpeF9wZHUuMyBzbm1wX2ZyZWVfcGR1LjMgc25tcF9wZHVfY3JlYXRlLjMKIAogCiAKLU1BTkFMSUFTRVM9JChERUZBVUxUX1NUT1JFX0FMSUFTRVMpICQoUkVBRF9DT05GSUdfQUxJQVNFUykgCQlcCi0JJChTTk1QX0FMQVJNX0FMSUFTRVMpICQoU05NUF9TRVRfU0FWRV9ERVNDUklQVElPTlNfQUxJQVNFUykgCVwKLQkkKFNOTVBfVFJBUF9BUElfQUxJQVNFUykKK01BTkFMSUFTRVM9JChNSUJfQUxJQVNFUykgJChDT05GSUdfQUxJQVNFUykgJChBTEFSTV9BTElBU0VTKSAkKFNFU1NJT05fQUxJQVNFUykgXAorCSQoU1NFU1NfQUxJQVNFUykgJChUUkFQX0FMSUFTRVMpICQoVkFSQklORF9BTElBU0VTKSAkKFBEVV9BTElBU0VTKQogTUFOQUxMID0gJChNQU4xKSAkKE1BTjFHKSAkKE1BTjMpICQoTUFOM0cpICQoTUFONUcpICQoTUFOOEcpICQoTUFOQUxJQVNFUykKIAogVEFSR0VUUyA9ICQoTUFONUcpICQoTUFOMUcpICQoTUFOM0cpICQoTUFOOEcpCkBAIC04NSwyOCArODMsMjkgQEAKIAogYWxsOiAkKFRBUkdFVFMpIHN0YW5kYXJkYWxsIG1hbmFsaWFzZXMKIAotbWFuYWxpYXNlczogTWFrZWZpbGUKK21hbmFsaWFzZXM6IE1ha2VmaWxlICQoTUFOM19BUEkpCiAJdG91Y2ggbWFuYWxpYXNlcwotCUBmb3IgaSBpbiAkKERFRkFVTFRfU1RPUkVfQUxJQVNFUykgOyBkbwkJCQlcCi0JCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGkgLT4gZGVmYXVsdF9zdG9yZSBBUElzIiA7IFwKLQkJZWNobyAiLnNvIG1hbjMvZGVmYXVsdF9zdG9yZS4zIiA+ICQkaSA7IAkJXAotCWRvbmUKLQlAZm9yIGkgaW4gJChSRUFEX0NPTkZJR19BTElBU0VTKSA7IGRvCQkJCVwKLQkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaSAtPiByZWFkX2NvbmZpZyBBUElzIiA7CVwKLQkJZWNobyAiLnNvIG1hbjMvcmVhZF9jb25maWcuMyIgPiAkJGkgOyAJCQlcCi0JZG9uZQotCUBmb3IgaSBpbiAkKFNOTVBfQUxBUk1fQUxJQVNFUykgOyBkbwkJCQlcCi0JCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGkgLT4gc25tcF9hbGFybSBBUElzIiA7CVwKLQkJZWNobyAiLnNvIG1hbjMvc25tcF9hbGFybS4zIiA+ICQkaSA7IAkJCVwKLQlkb25lCi0JQGZvciBpIGluICQoU05NUF9TRVRfU0FWRV9ERVNDUklQVElPTlNfQUxJQVNFUykgOyBkbwkJXAotCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRpIC0+IHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zIEFQSXMiIDsgXAotCQllY2hvICIuc28gbWFuMy9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zIiA+ICQkaSA7IAlcCi0JZG9uZQotCUBmb3IgaSBpbiAkKFNOTVBfVFJBUF9BUElfQUxJQVNFUykgOyBkbwkJCQlcCi0JCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGkgLT4gc25tcF90cmFwIEFQSXMiIDsJXAotCQllY2hvICIuc28gbWFuMy9zbm1wX3RyYXBfYXBpLjMiID4gJCRpIDsJCQlcCi0JZG9uZQorCUByZXN1bHQ9MCA7IFwKKyAgICAgICAgZm9yIGkgaW4gJChNQU4zX0FQSSkgOyBkbwkJCQkgIFwKKyAgICAgICAgICAgIGZvciBqIGluIGAkKFNFRCkgLW4gJy9eLlNIIE5BTUUvLC9eLlNIIFNZTk9QU0lTL3AnICQkaSAgfCAkKFNFRCkgLWUgJ3MvLi0gLiovLycgfCAkKFNFRCkgJ3MvLC4qLy8nICB8ICQoRUdSRVApIC12ICdeLlNIICcgYDsgZG8gXAorCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRqIC0+ICQkaSBBUElzIiA7ICAgIFwKKwkJZWNobyAiLnNvIG1hbjMvJCRpIiA+ICQkai4zIDsgCQkgIFwKKwkJaWYgZXhwciAiJChNQU5BTElBU0VTKSIgOiAiLiokJGpcXC4zIiA+IC9kZXYvbnVsbCA7IFwKKwkJdGhlbiBcCisJCSAgOiA7IFwKKwkJZWxzZSBcCisJCSAgICB2YXI9YGVjaG8gJCRpIHwgJChTRUQpIC1lICdzL15uZXRzbm1wXy8vJyAtZSAncy9fYXBpLjMvLycgfCB0ciAnW2Etel0nICdbQS1aXSdgIDsgXAorCQkgICAgZWNobyAiWW91IG11c3QgYWRkICQkai4zIHRvIHRoZSAkJHt2YXJ9X0FMSUFTRVMgdmFyaWFibGUgaW4gdGhlIE1ha2VmaWxlLmluIiA7IFwKKwkJICAgIHJlc3VsdD0xIDsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvbmUgOyBcCisJZXhpdCAkJHJlc3VsdAorCiskKE1BTkFMSUFTRVMpOiBtYW5hbGlhc2VzCisKK2FnZW50eHRyYXAuMTogJChzcmNkaXIpL2FnZW50eHRyYXAuMS5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9hZ2VudHh0cmFwLjEuZGVmID4gYWdlbnR4dHJhcC4xCiAKIHNubXBidWxrZ2V0LjE6ICQoc3JjZGlyKS9zbm1wYnVsa2dldC4xLmRlZiAuLi9zZWRzY3JpcHQKIAkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBidWxrZ2V0LjEuZGVmID4gc25tcGJ1bGtnZXQuMQpAQCAtMTgwLDU2ICsxNzksNjUgQEAKIG5ldC1zbm1wLWNvbmZpZy4xOiAkKHNyY2RpcikvbmV0LXNubXAtY29uZmlnLjEuZGVmIC4uL3NlZHNjcmlwdAogCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0LXNubXAtY29uZmlnLjEuZGVmID4gbmV0LXNubXAtY29uZmlnLjEKIAorbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMTogJChzcmNkaXIpL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYgPiBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xCisKIHRrbWliLjE6ICQoc3JjZGlyKS90a21pYi4xLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3RrbWliLjEuZGVmID4gdGttaWIuMQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdGttaWIuMS5kZWYgPiAkQAogCiB0cmFwdG9lbWFpbC4xOiAkKHNyY2RpcikvdHJhcHRvZW1haWwuMS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS90cmFwdG9lbWFpbC4xLmRlZiA+IHRyYXB0b2VtYWlsLjEKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3RyYXB0b2VtYWlsLjEuZGVmID4gJEAKIAotbWliX2FwaS4zOiAkKHNyY2RpcikvbWliX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL21pYl9hcGkuMy5kZWYgPiBtaWJfYXBpLjMKK25ldHNubXBfdmFyYmluZF9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmID4gJEAKIAotcmVhZF9jb25maWcuMzogJChzcmNkaXIpL3JlYWRfY29uZmlnLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvcmVhZF9jb25maWcuMy5kZWYgPiByZWFkX2NvbmZpZy4zCituZXRzbm1wX3BkdV9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfcGR1X2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfcGR1X2FwaS4zLmRlZiA+ICRACiAKLXNubXBfYWdlbnRfYXBpLjM6ICQoc3JjZGlyKS9zbm1wX2FnZW50X2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfYWdlbnRfYXBpLjMuZGVmID4gc25tcF9hZ2VudF9hcGkuMworbmV0c25tcF9zZXNzaW9uX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYgPiAkQAorCituZXRzbm1wX21pYl9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfbWliX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfbWliX2FwaS4zLmRlZiA+ICRACisKK25ldHNubXBfY29uZmlnX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9jb25maWdfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9jb25maWdfYXBpLjMuZGVmID4gJEAKIAogc25tcF9hbGFybS4zOiAkKHNyY2Rpcikvc25tcF9hbGFybS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfYWxhcm0uMy5kZWYgPiBzbm1wX2FsYXJtLjMKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfYWxhcm0uMy5kZWYgPiAkQAogCi1zbm1wX2FwaS4zOiAkKHNyY2Rpcikvc25tcF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2FwaS4zLmRlZiA+IHNubXBfYXBpLjMKK25ldHNubXBfc2Vzc19hcGkuMzogJChzcmNkaXIpL25ldHNubXBfc2Vzc19hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmID4gJEAKIAotc25tcF9zZXNzX2FwaS4zOiAkKHNyY2Rpcikvc25tcF9zZXNzX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfc2Vzc19hcGkuMy5kZWYgPiBzbm1wX3Nlc3NfYXBpLjMKK25ldHNubXBfYWdlbnRfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmID4gJEAKIAotc25tcF90cmFwX2FwaS4zOiAkKHNyY2Rpcikvc25tcF90cmFwX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfdHJhcF9hcGkuMy5kZWYgPiBzbm1wX3RyYXBfYXBpLjMKK25ldHNubXBfdHJhcF9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfdHJhcF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmID4gJEAKIAogc25tcC5jb25mLjU6ICQoc3JjZGlyKS9zbm1wLmNvbmYuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wLmNvbmYuNS5kZWYgPiBzbm1wLmNvbmYuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcC5jb25mLjUuZGVmID4gJEAKIAogc25tcF9jb25maWcuNTogJChzcmNkaXIpL3NubXBfY29uZmlnLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9jb25maWcuNS5kZWYgPiBzbm1wX2NvbmZpZy41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2NvbmZpZy41LmRlZiA+ICRACiAKIHNubXBkLmNvbmYuNTogJChzcmNkaXIpL3NubXBkLmNvbmYuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5jb25mLjUuZGVmID4gc25tcGQuY29uZi41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5jb25mLjUuZGVmID4gJEAKIAogc25tcGQuZXhhbXBsZXMuNTogJChzcmNkaXIpL3NubXBkLmV4YW1wbGVzLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuZXhhbXBsZXMuNS5kZWYgPiBzbm1wZC5leGFtcGxlcy41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5leGFtcGxlcy41LmRlZiA+ICRACiAKIHNubXBkLmludGVybmFsLjU6ICQoc3JjZGlyKS9zbm1wZC5pbnRlcm5hbC41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmludGVybmFsLjUuZGVmID4gc25tcGQuaW50ZXJuYWwuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuaW50ZXJuYWwuNS5kZWYgPiAkQAogCiBzbm1wdHJhcGQuY29uZi41OiAkKHNyY2Rpcikvc25tcHRyYXBkLmNvbmYuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wdHJhcGQuY29uZi41LmRlZiA+IHNubXB0cmFwZC5jb25mLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXB0cmFwZC5jb25mLjUuZGVmID4gJEAKIAogdmFyaWFibGVzLjU6ICQoc3JjZGlyKS92YXJpYWJsZXMuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS92YXJpYWJsZXMuNS5kZWYgPiB2YXJpYWJsZXMuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdmFyaWFibGVzLjUuZGVmID4gJEAKIAogc25tcHRyYXBkLjg6ICQoc3JjZGlyKS9zbm1wdHJhcGQuOC5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wdHJhcGQuOC5kZWYgPiBzbm1wdHJhcGQuOAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcHRyYXBkLjguZGVmID4gJEAKIAogZGVmYXVsdF9zdG9yZS4zLmg6ICQoc3JjZGlyKS8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAJYXdrICd7IGlmICgkJDAgPT0gIiAgICAgKiBiZWdpbiBzdG9yYWdlIGRlZmluaXRpb25zICIpIHsgcCA9IDEgfSBlbHNlIGlmICgkJDAgPT0gIiAgICAgKiBlbmQgc3RvcmFnZSBkZWZpbml0aW9ucyAiKSB7IHAgPSAwIH0gZWxzZSBpZiAocCkgeyBwcmludCAkJDB9fScgPCAkKHNyY2RpcikvLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCA+IGRlZmF1bHRfc3RvcmUuMy5oCkBAIC0yNDUsMTEgKzI1MywxMSBAQAogCSAgdG91Y2ggbWliMmMuY29uZi41IDsgXAogCWZpCiAKLW1hbmluc3RhbGw6ICBtYW5pbnN0YWxsZGlycyAkKE1BTjEpICQoTUFOMUcpICQoTUFOMykgJChNQU41RykgJChNQU44KSAkKE1BTkFMSUFTRVMpCittYW5pbnN0YWxsOiAgbWFuaW5zdGFsbGRpcnMgJChNQU4xKSAkKE1BTjFHKSAkKE1BTjMpICQoTUFOM19BUEkpICQoTUFOM0cpICQoTUFONUcpICQoTUFOOEcpICQoTUFOQUxJQVNFUykKIAlAZm9yIGkgaW4gJChNQU4xKSA7IGRvICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvYGJhc2VuYW1lICQkaWAgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjFkaXIpIDsgZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKG1hbjFkaXIpIiA7IGRvbmUKIAlAJChJTlNUQUxMX0RBVEEpICQoTUFOMUcpICQoSU5TVEFMTF9QUkVGSVgpJChtYW4xZGlyKQogCUBmb3IgaSBpbiAkKE1BTjFHKSA7IGRvIGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChtYW4xZGlyKSIgOyBkb25lCi0JQGZvciBpIGluICQoTUFOMykgOyBkbyAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikgOyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikiIDsgZG9uZQorCSNFTVBUWSBMSVNUI0Bmb3IgaSBpbiAkKE1BTjMpIDsgZG8gJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpIDsgZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpIiA7IGRvbmUKIAlAJChJTlNUQUxMX0RBVEEpICQoTUFOM0cpICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKQogCUBmb3IgaSBpbiAkKE1BTjNHKSA7IGRvIGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKSIgOyBkb25lCiAJQCQoSU5TVEFMTF9EQVRBKSAkKE1BTkFMSUFTRVMpICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKQpAQCAtMjc0LDExICsyODIsMTEgQEAKICMKIGh0bWw6ICQoTUFOQUxMKQogCWZvciBpIGluICQoTUFOQUxMKTsgZG8gXAotCSAgIGlmIHRlc3QgYHdjIC1sICQkaSB8IGF3ayAne3ByaW50ICQkMX0nYCAhPSAxIDsgdGhlbiBcCisjCSAgIGlmIHRlc3QgYHdjIC1sICQkaSB8IGF3ayAne3ByaW50ICQkMX0nYCAhPSAxIDsgdGhlbiBcCiAJCSAgIGJhc2U9YGVjaG8gJCRpIHwgc2VkICdzLy5bMC05XSQkLy87J2AgOyBcCiAJCSAgIGVjaG8gIjxIVE1MPjxCT0RZIGJnY29sb3I9XCIjZmZmZmZmXCIgYmFja2dyb3VuZD1cIi4uL3VjZC1zbm1wLWJnMy5naWZcIj48UFJFPiIgPiAkJGJhc2UuaHRtbDsgXAogCQkgICBtYW4yaHRtbCAtciAuLyQkaSB8ICQoUEVSTCkgLXAgLWUgJ3MvSFJFRj1cIi4uXC9tYW4uXC8vSFJFRj1cIi9nO3MvXC5bMS05XVwuaHRtbC8uaHRtbC9nOycgfCBncmVwIC12ICdDb250ZW50LXR5cGU6JyA+PiAkJGJhc2UuaHRtbDsgXAogCQkgICBhPSIkJGEgJCRpIjsgXAotCSAgIGZpIDsgXAorIwkgICBmaSA7IFwKIAlkb25lIDtcCiAJJChQRVJMKSBtYWtlX2luZGV4LnBsIG1hbl9zZWN0aW9ucy50eHQgJCRhID4gaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvbWFuL2FkZF9taWJkaXIuMyBiL21hbi9hZGRfbWliZGlyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL2FkZF9taWJkaXIuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMyBiL21hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL2FnZW50eHRyYXAuMS5kZWYgYi9tYW4vYWdlbnR4dHJhcC4xLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzEzMjVmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2FnZW50eHRyYXAuMS5kZWYKQEAgLTAsMCArMSwxMTAgQEAKKy5USCBBR0VOVFhUUkFQIDEgIjIwIERlYyAyMDA5IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK2FnZW50eHRyYXAgLSBzZW5kIGFuIEFnZW50WCBOb3RpZnlQRFUgdG8gYW4gQWdlbnRYIG1hc3RlciBhZ2VudAorLlNIIFNZTk9QU0lTCisuQiBhZ2VudHh0cmFwCisuUkkgWyBPUFRJT05TIF0gIiB0cmFwLW9pZCAiIFsgIk9JRCBUWVBFIFZBTFVFIiAuLi5dCisuU0ggREVTQ1JJUFRJT04KKy5CIGFnZW50eHRyYXAKK2lzc3VlcyBhbiBBZ2VudFggTm90aWZ5UERVIHRvIGEgbWFzdGVyIGFnZW50LiBPbmUgb3IgbW9yZSBvYmplY3QKK2lkZW50aWZpZXJzIChPSURzKSBjYW4gYmUgZ2l2ZW4gYXMgYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuCitBIHR5cGUgYW5kIGEgdmFsdWUgbXVzdCBhY2NvbXBhbnkgZWFjaCBvYmplY3QgaWRlbnRpZmllci4KK0VhY2ggdmFyaWFibGUgbmFtZSBpcyBnaXZlbiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbgorLklSIHZhcmlhYmxlcyg1KSAuCisuUFAKKy5TSCBPUFRJT05TCisuUEQgMAorLlRQIDYKKy5CSSBcLWMgIlx8IGNvbnRleHROYW1lXF4iCitpZiB0aGUKKy5CIFwtYworb3B0aW9uIGlzIHByZXNlbnQgdGhlbiB0aGUgbm90aWZpY2F0aW9uIGlzIHNlbnQgaW4gdGhlIG5vbmRlZmF1bHQgbmFtZSBjb250ZXh0LgorLlRQCisuQkkgXC1VICJcfCB1cHRpbWVcXiIKK2lmIHRoZQorLkIgXC1VCitvcHRpb24gaXMgcHJlc2VudCB0aGVuIHRoYXQgdmFsdWUsIHBhcnNlZCBhcyBjZW50aXNlY29uZHMsIGlzIHRha2VuIHRvIGJlIHRoZQorc3lzVXBUaW1lIGZpZWxkIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy5UUAorLkJJIFwteCAiXHwgQUREUkVTU1xeIgoraWYgdGhlCisuQiBcLXgKK29wdGlvbiBpcyBwcmVzZW50IHRoZW4gY29udGFjdCB0aGUgQWdlbnRYIG1hc3RlciBhdCBBRERSRVNTIGFuZCBub3QgdGhlIGRlZmF1bHQKK29uZS4KKy5QRAorLlBQCitBZGRpdGlvbmFsbHkgYWxsIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBpbgorLklSIHNubXBjbWQoMSkKK3VuZGVyIHRoZQorLkJSICJNSUIgUEFSU0lORyBPUFRJT05TIiAiLCAiICJMT0dHSU5HIE9QVElPTlMiICIgYW5kICIgIklOUFVUIE9QVElPTlMiCitoZWFkZXJzIGFzIHdlbGwgYXMgdGhlCisuQlIgLWQgIiwgIiAtRCAiLCAiIC1tICIgYW5kICIgLU0KK29wdGlvbnMgYXJlIHN1cHBvcnRlZC4KKy5QUAorSW4KKy5JIE9JRCBUWVBFIFZBTFVFCit0aGUgcGFyc2luZyBvZiB0aGUKKy5JIFZBTFVFCitmaWVsZCBpcyBjb250cm9sbGVkIGJ5IHRoZQorLkkgVFlQRQorZmllbGQuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZQorLkkgVFlQRQorZmllbGQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczoKKy5SUworLlBEIDAKKy5UUCAzCisuQiA9CitMZXQKKy5JIE9JRAorZGVjaWRlIGhvdworLkkgVkFMVUUKK3Nob3VsZCBiZSBpbnRlcnByZXRlZAorLlRQCisuQiBpCitJTlRFR0VSCisuVFAKKy5CIHUKK1Vuc2lnbmVkCisuVFAKKy5CIGMKK0NvdW50ZXIzMgorLlRQCisuQiBzCitPQ1RFVCBTVFJJTkcgb2YgY2hhYWN0ZXJzCisuVFAKKy5CIHgKK09DVEVUIFNUUklORywgZW50ZXJlZCBhcyBhIHNlcXVlbmNlIG9mIG9wdGlvbmFsbHkgc3BhY2Ugc2VwYXJhdGVkIGhleGFkZWNpbWFsCitkaWdpdCBwYWlycworLlRQCisuQiBkCitPQ1RFVCBTVFJJTkcsIGVudGVyZWQgYXMgYSBzZXF1ZW5jZSBvZiBzcGFjZSBzZXBhcmF0ZWQgZGVjaW1hbCBkaWdpdHMgaW4gdGhlCityYW5nZSAwIC0gMjU1CisuVFAKKy5CIG4KK05VTEwKKy5UUAorLkIgbworT0JKRUNUIElERU5USUZJRVIKKy5UUAorLkIgdAorVGltZVRpY2tzCisuVFAKKy5CIGEKK0lwQWRkcmVzcworLlRQCisuQiBiCitCSVRTCisuUEQKKy5SRQord2hpY2ggYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZQorLkIgc25tcHNldAorY29tbWFuZC4KKy5QUAorLlNIIEVYQU1QTEVTCitUbyBzZW5kIGEgZ2VuZXJpYyBsaW5rVXAgdHJhcCB0byB0aGUgbWFuYWdlciBmb3IgaW50ZXJmYWNlIDEgdGhlIGZvbGxvd2luZworY29tbWFuZCBjYW4gYmUgdXNlZDoKKy5QUAorYWdlbnR4dHJhcCBuZXRTbm1wLjAuMyBpZmluZGV4LjEgaSAxCisuUFAKKy5TSCBTRUUgQUxTTworc25tcGNtZCgxKSwgc25tcHNldCgxKSwgdmFyaWFibGVzKDUpLCBSRkMgMjc0MQpkaWZmIC0tZ2l0IGEvbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QgYi9tYW4vZGVmYXVsdF9zdG9yZS4zLmJvdAppbmRleCA1NmEzNjc4Li5lYmQyYmY2IDEwMDY0NAotLS0gYS9tYW4vZGVmYXVsdF9zdG9yZS4zLmJvdAorKysgYi9tYW4vZGVmYXVsdF9zdG9yZS4zLmJvdApAQCAtMTExLDEwICsxMTEsMTAgQEAKIGFsbG9jYXRpb24gZmFpbHVyZSkuCiAuVFAKIC5CSSAiaW50IG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKHVfY2hhciAiIHR5cGUgIiwgY29uc3QgY2hhciAqIiBmdHlwZSAiLCBjb25zdCBjaGFyICoiIHRva2VuICIsIGludCAiIHN0b3JlICIsIGludCAiIHdoaWNoICIpOyIKLUFuYWxvZ291cyB0byB0aGUgcHJlY2VlZGluZyBmdW5jdGlvbiwgYnV0IHRoZQorQW5hbG9nb3VzIHRvIHRoZSBwcmVjZWRpbmcgZnVuY3Rpb24sIGJ1dCB0aGUKIC5JIHRva2VuCiBpcyBwcm9jZXNzZWQgYmVmb3JlIE1JQnMgYXJlIHJlYWQgKHRoaXMgaXMgdGhlcmVmb3JlIHVzZWZ1bCBmb3IgY29udHJvbGxpbmcKIE1JQiBwcm9jZXNzaW5nIG9wdGlvbnMpLgogLlNIICJTRUUgQUxTTyIKLS5CUiBzbm1wX2NvbmZpZyAiKDUpLCAiIHJlYWRfY29uZmlnICIoMykiCisuQlIgc25tcF9jb25maWcgIig1KSwgIiBuZXRzbm1wX2NvbmZpZ19hcGkgIigzKSIKIApkaWZmIC0tZ2l0IGEvbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AgYi9tYW4vZGVmYXVsdF9zdG9yZS4zLnRvcAppbmRleCBlYzUyNmJiLi5jYzA0ODIyIDEwMDY0NAotLS0gYS9tYW4vZGVmYXVsdF9zdG9yZS4zLnRvcAorKysgYi9tYW4vZGVmYXVsdF9zdG9yZS4zLnRvcApAQCAtMSw1ICsxLDQgQEAKIC5USCBERUZBVUxUX1NUT1JFIDMgIjI1IEp1biAyMDAyIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlVDIDUKIC5TSCBOQU1FCiBkZWZhdWx0X3N0b3JlIFwtIGdlbmVyaWMgc3RvcmFnZSBvZiBnbG9iYWwgZGF0YS4KIC5TSCBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYgYi9tYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZgppbmRleCA3NDE1NjE3Li4yMGY1Y2MzIDEwMDY0NAotLS0gYS9tYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZgorKysgYi9tYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZgpAQCAtMywxMyArMywxMyBAQAogZW5jb2RlX2tleWNoYW5nZSAtIHByb2R1Y2UgdGhlIEtleUNoYW5nZSBzdHJpbmcgZm9yIFNOTVB2MwogLlNIIFNZTk9QU0lTCiAuQiBlbmNvZGVfa2V5Y2hhbmdlIAotLXQgbWQ1fHNoYTEKK1wtdCBtZDV8c2hhMQogW1xmSU9QVElPTlNcZlJdCiAuU0ggREVTQ1JJUFRJT04KIC5CIGVuY29kZV9rZXljaGFuZ2UKIHByb2R1Y2VzIGEgS2V5Q2hhbmdlIHN0cmluZyB1c2luZyB0aGUgb2xkIGFuZCBuZXcgcGFzc3BocmFzZXMgCiBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA1IG9mIFJGQyAyMjc0ICJVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsIChVU00pIGZvciAKLXZlcnNpb24gMyBvZiB0aGUgU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbCAoU05NUHYzKSIuIFxmQi10XGZSCit2ZXJzaW9uIDMgb2YgdGhlIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgKFNOTVB2MykiLiBcZkJcLXRcZlIKIG9wdGlvbiBpcyBtYW5kYXRvcnkgYW5kIHNwZWNpZmllcyB0aGUgaGFzaCB0cmFuc2Zvcm0gdHlwZSB0byB1c2UuCiAKIFRoZSB0cmFuc2Zvcm0gaXMgdXNlZCB0byBjb252ZXJ0IHBhc3NwaHJhc2UgdG8gbWFzdGVyIGtleSBmb3IgYSBnaXZlbgpAQCAtMjAsOSArMjAsOSBAQAogKGluIG9yZGVyIGxpc3RlZCk6CiAuSVAKIGNvbW1hbmQgbGluZSBvcHRpb25zIChzZWUgCi0uQiAtTgorLkIgXC1OCiBhbmQKLS5CIC1PCisuQiBcLU8KIG9wdGlvbnMgYmVsb3cpOwogLklQCiB0aGUgZmlsZSAKQEAgLTM1LDcgKzM1LDcgQEAKIC5TSCBPUFRJT05TCiAuVFAKIFxmQlwtRVxmUiBbMHhdPFxmSWVuZ2luZUlEXGZSPiBFbmdpbmVJRCB1c2VkIGZvciBLdWwgZ2VuZXJhdGlvbi4KLTxcZkllbmdpbmVJRFxmUj4gaXMgaW50ZXByZXRlZCBhcyBhIGhleCBzdHJpbmcgd2hlbiBwcmVjZWVkZWQgYnkgMHgsCis8XGZJZW5naW5lSURcZlI+IGlzIGludGVwcmV0ZWQgYXMgYSBoZXggc3RyaW5nIHdoZW4gcHJlY2VkZWQgYnkgMHgsCiBvdGhlcndpc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHRleHQgc3RyaW5nLiBJZiBubyA8XGZJZW5naW5lSURcZlI+IGlzCiBzcGVjaWZpZWQsIGl0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZpcnN0IElQIGFkZHJlc3MgZm9yIHRoZSBsb2NhbAogaG9zdC4KZGlmZiAtLWdpdCBhL21hbi9maXhwcm9jLjEuZGVmIGIvbWFuL2ZpeHByb2MuMS5kZWYKaW5kZXggZWY5MDAzNi4uYWU4OGEzZCAxMDA2NDQKLS0tIGEvbWFuL2ZpeHByb2MuMS5kZWYKKysrIGIvbWFuL2ZpeHByb2MuMS5kZWYKQEAgLTI3LDEwICsyNywxMCBAQAogY2hlY2sgcHJvY2VzcyBhZ2FpbnN0IGRhdGFiYXNlIC9sb2NhbC9ldGMvZml4cHJvYy5jb25mLgogLlRQCiAuQiBcLWtpbGwKLWtpbGwgcHJvY2Vzcywgd2FpdCA1IHNlY29uZHMsIGtpbGwgLTkgaWYgc3RpbGwgZXhpc3QKK2tpbGwgcHJvY2Vzcywgd2FpdCA1IHNlY29uZHMsIGtpbGwgXC05IGlmIHN0aWxsIGV4aXN0CiAuVFAKIC5CIFwtcmVzdGFydAota2lsbCBwcm9jZXNzLCB3YWl0IDUgc2Vjb25kcywga2lsbCAtOSBpZiBzdGlsbCBleGlzdCwgdGhlbiBzdGFydCBhZ2Fpbgora2lsbCBwcm9jZXNzLCB3YWl0IDUgc2Vjb25kcywga2lsbCBcLTkgaWYgc3RpbGwgZXhpc3QsIHRoZW4gc3RhcnQgYWdhaW4KIC5UUAogLkIgXC1leGlzdAogY2hlY2tzIGlmIHByb2MgZXhpc3RzIGluIHBzICYmIChtaW4gPD0gbnVtLiBvZiBwcm9jZXNzZXMgPD0gbWF4KQpkaWZmIC0tZ2l0IGEvbWFuL2dldF9tb2R1bGVfbm9kZS4zIGIvbWFuL2dldF9tb2R1bGVfbm9kZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9nZXRfbW9kdWxlX25vZGUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL2luaXRfbWliLjMgYi9tYW4vaW5pdF9taWIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vaW5pdF9taWIuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL2luaXRfbWliX2ludGVybmFscy4zIGIvbWFuL2luaXRfbWliX2ludGVybmFscy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9pbml0X21pYl9pbnRlcm5hbHMuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL21ha2VfaW5kZXgucGwgYi9tYW4vbWFrZV9pbmRleC5wbAppbmRleCA3YWIxZGQyLi4zNzU2NmJhIDEwMDY0NAotLS0gYS9tYW4vbWFrZV9pbmRleC5wbAorKysgYi9tYW4vbWFrZV9pbmRleC5wbApAQCAtMjUsNiArMjUsNyBAQAogCWNob21wKCRuYW1lKTsKIAlpZiAoIWV4aXN0cygkcGFnZXN7JG5hbWV9KSkgewogCSAgICBwcmludCBTVERFUlIgIiRuYW1lIGlzIGluICRpbmZpbGUsIGJ1dCBub3QgaW4gdGhlIHJlc3Qgb2YgdGhlIGFyZ3MuXG4iOworCSAgICBwcmludCBTVERFUlIgIk1ha2Ugc3VyZSBpdCdzIG5vdCBsaXN0ZWQgdHdpY2UgaW4gJGluZmlsZSFcbiI7CiAJfQogCW9wZW4oSCwiJG5hbWUuaHRtbCIpOwogCXdoaWxlICg8SD4pIHsKZGlmZiAtLWdpdCBhL21hbi9tYW5fc2VjdGlvbnMudHh0IGIvbWFuL21hbl9zZWN0aW9ucy50eHQKaW5kZXggYjgxOGIwZC4uZmNjZThmOSAxMDA2NDQKLS0tIGEvbWFuL21hbl9zZWN0aW9ucy50eHQKKysrIGIvbWFuL21hbl9zZWN0aW9ucy50eHQKQEAgLTEsNCArMSw1IEBACiAjIFNOTVAgYmFzaWMgYXBwbGljYXRpb25zCitlbmNvZGVfa2V5Y2hhbmdlCiBzbm1wY21kCiBzbm1wdHJhbnNsYXRlCiBzbm1wZ2V0CkBAIC04LDYgKzksNyBAQAogc25tcGJ1bGt3YWxrCiBzbm1wc2V0CiBzbm1wdGVzdAordGttaWIKICMgU05NUCAic2Vjb25kLWxldmVsIiBhcHBsaWNhdGlvbnMKIHNubXB0YWJsZQogc25tcGRlbHRhCkBAIC0xNywxOCArMTksMjUgQEAKIHNubXBuZXRzdGF0CiBzbm1wZGYKICMgTm90aWZpY2F0aW9uIG1hbnVhbCBwYWdlcworc25tcGluZm9ybQogc25tcHRyYXAKIHNubXB0cmFwZAogc25tcHRyYXBkLmNvbmYKK3RyYXB0b2VtYWlsCiAjIFNOTVAgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBtYW51YWwgcGFnZXMKK25ldC1zbm1wLWNvbmZpZwogc25tcGNvbmYKIHNubXBfY29uZmlnCiBzbm1wLmNvbmYKICMgQWdlbnQgbWFudWFsIHBhZ2VzCitmaXhwcm9jCiBzbm1wZAogc25tcGQuY29uZgorc25tcGQuZXhhbXBsZXMKK3NubXBkLmludGVybmFsCiBtaWIyYwogbWliMmMuY29uZgorbWliMmMtdXBkYXRlCiAjIFNOTVAgYmFzZSBsaWJyYXJ5IEFQSXMKIG5ldHNubXBfbGlicmFyeQogcmVhZF9jb25maWcKQEAgLTQxLDMzICs1MCwxMDkgQEAKIG5ldHNubXBfbWliX3V0aWxpdGllcwogbmV0c25tcF9kZWJ1ZwogIyBBZ2VudCBBUEkgbWFudWFscworYWRkX21pYmRpcgorYWRkX21vZHVsZV9yZXBsYWNlbWVudAorY29uZmlnX3BlcnJvcgorY29uZmlnX3B3YXJuCitmcHJpbnRfZGVzY3JpcHRpb24KK2ZwcmludF9vYmppZAorZnByaW50X3ZhbHVlCitmcHJpbnRfdmFyaWFibGUKK2dldF9tb2R1bGVfbm9kZQoraW5pdF9taWIKK2luaXRfbWliX2ludGVybmFscwogbmV0c25tcF9hZ2VudAotc25tcF9hZ2VudF9hcGkKLXNubXBfdHJhcF9hcGkKLW5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcwotbmV0c25tcF91dGlsaXRpZXMKLW5ldHNubXBfaGFuZGxlcgotbmV0c25tcF9zY2FsYXIKIG5ldHNubXBfYmFieV9zdGVwcwogbmV0c25tcF9idWxrX3RvX25leHQKLW5ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwCi1uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludAotbmV0c25tcF90YWJsZV9kYXRhc2V0Ci1uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcwotbmV0c25tcF9vbGRfYXBpCi1uZXRzbm1wX3dhdGNoZXIKLW5ldHNubXBfdGFibGVfYXJyYXkKLW5ldHNubXBfbXVsdGlwbGV4ZXIKLW5ldHNubXBfc2VyaWFsaXplCiBuZXRzbm1wX2NhY2hlX2hhbmRsZXIKLW5ldHNubXBfQ29udGFpbmVyX2l0ZXJhdG9yCi1uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yCi1uZXRzbm1wX3RhYmxlCi1uZXRzbm1wX3RhYmxlX2RhdGEKLW5ldHNubXBfc3Rhc2hfY2FjaGUKLW5ldHNubXBfcm93X21lcmdlCi1uZXRzbm1wX3JlYWRfb25seQotbmV0c25tcF9sZWFmCi1uZXRzbm1wX2luc3RhbmNlCiBuZXRzbm1wX2NvbnRhaW5lcgorbmV0c25tcF9Db250YWluZXJfaXRlcmF0b3IKK25ldHNubXBfZHNfZ2V0X2Jvb2xlYW4KK25ldHNubXBfZHNfZ2V0X2ludAorbmV0c25tcF9kc19nZXRfc3RyaW5nCituZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZworbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIKK25ldHNubXBfZHNfc2V0X2Jvb2xlYW4KK25ldHNubXBfZHNfc2V0X2ludAorbmV0c25tcF9kc19zZXRfc3RyaW5nCituZXRzbm1wX2RzX3NodXRkb3duCituZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludAorbmV0c25tcF9oYW5kbGVyCituZXRzbm1wX2luc3RhbmNlCituZXRzbm1wX2l0ZXJhdG9yX2luZm9fcworbmV0c25tcF9sZWFmCituZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMKIG5ldHNubXBfbW9kZV9lbmRfY2FsbAorbmV0c25tcF9tdWx0aXBsZXhlcgorbmV0c25tcF9vbGRfYXBpCituZXRzbm1wX3JlYWRfb25seQorbmV0c25tcF9yb3dfbWVyZ2UKK25ldHNubXBfc2NhbGFyCituZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cAorbmV0c25tcF9zZXJpYWxpemUKK25ldHNubXBfc3Rhc2hfY2FjaGUKK25ldHNubXBfdGFibGUKK25ldHNubXBfdGFibGVfYXJyYXkKK25ldHNubXBfdGFibGVfZGF0YQorbmV0c25tcF90YWJsZV9kYXRhc2V0CituZXRzbm1wX3RhYmxlX2l0ZXJhdG9yCituZXRzbm1wX3V0aWxpdGllcworbmV0c25tcF93YXRjaGVyCitwcmludF9kZXNjcmlwdGlvbgorcHJpbnRfbWliCitwcmludF9vYmppZAorcHJpbnRfdmFsdWUKK3ByaW50X3ZhcmlhYmxlCityZWFkX2FsbF9taWJzCityZWFkX2NvbmZpZ19wcmludF91c2FnZQorcmVhZF9jb25maWdzCityZWFkX21pYgorcmVhZF9tb2R1bGUKK3JlYWRfbW9kdWxlX25vZGUKK3JlYWRfb2JqaWQKK3JlYWRfcHJlbWliX2NvbmZpZ3MKK3JlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgorcmVnaXN0ZXJfYXBwX3ByZW1pYl9oYW5kbGVyCityZWdpc3Rlcl9jb25maWdfaGFuZGxlcgorcmVnaXN0ZXJfbWliX2hhbmRsZXJzCityZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcgorc2VuZF9lYXN5X3RyYXAKK3NlbmRfdHJhcF92YXJzCitzZW5kX3YydHJhcAorc2h1dGRvd25fbWliCitzbm1wX2FnZW50X2FwaQorc25tcF9hbGFybV9yZWdpc3Rlcgorc25tcF9hbGFybV9yZWdpc3Rlcl9ocgorc25tcF9hbGFybV91bnJlZ2lzdGVyCitzbm1wX2FwaV9lcnJzdHJpbmcKK3NubXBfY2xvc2UKK3NubXBfZXJyb3IKK3NubXBfZnJlZV9wZHUKK3NubXBfb3Blbgorc25tcF9wZXJyb3IKK3NubXBfcmVhZAorc25tcF9zZWxlY3RfaW5mbworc25tcF9zZW5kCitzbm1wX3Nlc3NfYXN5bmNfc2VuZAorc25tcF9zZXNzX2Nsb3NlCitzbm1wX3Nlc3NfZXJyb3IKK3NubXBfc2Vzc19pbml0Citzbm1wX3Nlc3Nfb3Blbgorc25tcF9zZXNzX3BlcnJvcgorc25tcF9zZXNzX3JlYWQKK3NubXBfc2Vzc19zZWxlY3RfaW5mbworc25tcF9zZXNzX3NlbmQKK3NubXBfc2Vzc19zZXNzaW9uCitzbm1wX3Nlc3NfdGltZW91dAorc25tcF9zZXRfbWliX3dhcm5pbmdzCitzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucworc25tcF90aW1lb3V0Citzbm1wX3RyYXBfYXBpCitzbnByaW50X29iamlkCitzbnByaW50X3ZhbHVlCitzbnByaW50X3ZhcmlhYmxlCitzcHJpbnRfcmVhbGxvY19vYmppZAorc3ByaW50X3JlYWxsb2NfdmFsdWUKK3NwcmludF9yZWFsbG9jX3ZhcmlhYmxlCit1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgordW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hbi9taWIyYy11cGRhdGUuMS5kZWYgYi9tYW4vbWliMmMtdXBkYXRlLjEuZGVmCmluZGV4IGJkOWFkOTMuLjUyZWNlOGEgMTAwNjQ0Ci0tLSBhL21hbi9taWIyYy11cGRhdGUuMS5kZWYKKysrIGIvbWFuL21pYjJjLXVwZGF0ZS4xLmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBtaWIyYy11cGRhdGUgIjEiICIxNiBOb3YgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBtaWIyYy11cGRhdGUgMSAiMDcgQXByIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogbWliMmMtdXBkYXRlIC0gc2NyaXB0IHRvIG1lcmdlIGN1c3RvbSBjb2RlIGludG8gdXBkYXRlZCBtaWIyYyBjb2RlCiAuU0ggU1lOT1BTSVMKQEAgLTYsNCArNiwyMyBAQAogLkIgbWliMmMtdXBkYXRlCiAuU0ggREVTQ1JJUFRJT04KIC5QUAotbWVyZ2VzIGN1c3RvbSBjb2RlIGludG8gdXBkYXRlZCBtaWIyYyBjb2RlCitVc2UgbWliMmMtdXBkYXRlIHRvIGdlbmVyYXRlIHlvdXIgbWliMmMgY29kZSB0ZW1wbGF0ZXMsIGFuZCBpdCB3aWxsIHRyYWNrCit0aGUgb3JpZ2luYWwgY29kZSBhbmQgdGhlIGNoYW5nZXMgeW91IG1ha2UgdG8gdGhlIGNvZGUuIElmIHRoZSBtaWIyYwordGVtcGxhdGUgY2hhbmdlcyAoYnVnIGZpeGVzLCBlbmhhbmNlcyBpbiBsYXRlciByZWxlYXNlcyksIHJlLXJ1bm5pbmcKK21pYjJjIHdpbGwgdXBkYXRlIHRoZSB0ZW1wbGF0ZSBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlLWFwcGx5IHlvdXIKK2NoYW5nZXMuCisuUFAKK1RoaXMgY2FuIGJlIGV4dHJlbWVseSB1c2VmdWwgd2hlbiBkZXZlbG9waW5nIHlvdXIgb3duIG1pYjJjIHRlbXBsYXRlcy4KKy5QUAorV2hlbiB5b3UgZmlyc3QgcnVuIG1pYjJjLXVwZGF0ZSwgaXQgd2lsbCBjcmVhdGUgc2V2ZXJhbCBoaWRkZW4KK2RpcmVjdG9yaWVzIGFuZCBhIC5taWIyYy11cGRhdGVyYyBmaWxlLiBZb3UgbXVzdCBlZGl0IHRoZSAubWliMmMtdWRwYXRlcmMKK2ZpbGUgdG8gc3BlY2lmeSB0d28gdmFsdWVzLiBUaGUgZmlyc3QsIFVQREFURV9PSUQsIGlzIHRoZSB0YWJsZSBuYW1lCit0byBzcGVjaWZ5IHdoZW4gcnVubmluZyBtaWIyYy4gVGhlIHNlY29uZCwgVVBEQVRFX0NPTkYsIGlzIHRoZSBtaWIyYworY29uZmlndXJhdGlvbiBmaWxlIHRvIHNwZWNpZnkgd2hlbiBydW5uaW5nIG1pYjJjLgorLlBQCitBZGRpdGlvbmFsIG1pYjJjIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBpbiBVUERBVEVfTUlCMkNfT1BUUy4KKy5QUAorLlNIIEJVR1MKKy5QUAorbWliMmMtdXBkYXRlIGhhcyBvbmx5IGJlZW4gdGVzdGVkIG9uIGluZGl2aWR1YWwgdGFibGVzLiBTcGVjaWZ5aW5nCithIHNjYWxhciBvciBhbmQgZW50aXJlIE1JQiBtaWdodCBub3Qgd29yay4KZGlmZiAtLWdpdCBhL21hbi9taWIyYy4xLmRlZiBiL21hbi9taWIyYy4xLmRlZgppbmRleCAwYjhjOTg5Li5iOWMxMTM0IDEwMDY0NAotLS0gYS9tYW4vbWliMmMuMS5kZWYKKysrIGIvbWFuL21pYjJjLjEuZGVmCkBAIC03LDEyICs3LDEyIEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIE1JQjJDIDEgIjEgU2VwIDIwMDQiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggTUlCMkMgMSAiMDUgQXByIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogbWliMmMgLS0gZ2VuZXJhdGUgdGVtcGxhdGUgY29kZSBmb3IgZXh0ZW5kaW5nIHRoZSBhZ2VudAogLlNIIFNZTk9QU0lTCiAuQiBtaWIyYwotWy1oXSAtYyBDT05GSUdGSUxFIFstSSBQQVRIXSBbLWYgT1VUTkFNRV0gWy1pXVtxXVstUyBWQVI9VkFMXSBNSUJOT0RFCitbLWhdIC1jIENPTkZJR0ZJTEUgWy1JIFBBVEhdIFstZiBPVVROQU1FXSBbLWldWy1zXVstcV1bLVMgVkFSPVZBTF0gTUlCTk9ERQogLlNIIERFU0NSSVBUSU9OCiBUaGUgbWliMmMgdG9vbCBpcyBkZXNpZ25lZCB0byB0YWtlIGEgcG9ydGlvbiBvZiB0aGUgTUlCIHRyZWUgKGFzIGRlZmluZWQKIGJ5IGEgTUlCIGZpbGUpIGFuZCBnZW5lcmF0ZSB0aGUgdGVtcGxhdGUgQyBjb2RlIG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQKQEAgLTE3NSw2ICsxNzUsMTAgQEAKIC5CSSAtaQogRG8gbm90IHJ1biBpbmRlbnQgb24gdGhlIHJlc3VsdGluZyBjb2RlLgogLlRQCisuQkkgLXMKK0RvIG5vdCBsb29rIGZvciBNSUJOT0RFLnNlZCBhbmQgcnVuIHNlZCBvbiB0aGUgcmVzdWx0aW5nIGNvZGUuIFRoaXMKK2lzIHVzZWZ1bCB0byBzaG9ydGVuIGxvbmcgbWliIHZhcmlhYmxlIG5hbWVzIGluIHRoZSBjb2RlLgorLlRQCiAuQkkgLXEKIFJ1biBpbiAicXVpZXQiIG1vZGUsIHdoaWNoIG1pbmltaXplcyB0aGUgc3RhdHVzIG1lc3NhZ2VzCiBtaWIyYyBnZW5lcmF0ZXMuCmRpZmYgLS1naXQgYS9tYW4vbWliMmMuY29uZi41LmluIGIvbWFuL21pYjJjLmNvbmYuNS5pbgppbmRleCA5YmVmODc1Li4zNjkyYTY1IDEwMDY0NAotLS0gYS9tYW4vbWliMmMuY29uZi41LmluCisrKyBiL21hbi9taWIyYy5jb25mLjUuaW4KQEAgLTEsNyArMSw2IEBACi0uVEggTUlCMkMuQ09ORiA1ICIyOCBBcHIgMjAwNCIgVjUuMiAiTmV0LVNOTVAiCi0uVUMgNAorLlRIIE1JQjJDLkNPTkYgNSAiMjggQXByIDIwMDQiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQotbWliMmMuY29uZiAtLSBIb3cgdG8gd3JpdGUgbWliMmMuY29uZiBmaWxlcyB0byBkbyBBTllUSElORyBiYXNlZCBvbiBNSUIgaW5wdXQuCittaWIyYy5jb25mIFxbZW1dIEhvdyB0byB3cml0ZSBtaWIyYy5jb25mIGZpbGVzIHRvIGRvIEFOWVRISU5HIGJhc2VkIG9uIE1JQiBpbnB1dC4KIC5TSCBTWU5PUFNJUwogJSBjYXQgPiBtaWIyYy50ZXN0LmNvbmYgIDw8IEVPRgogQGZvcmVhY2ggJHQgdGFibGVACkBAIC0xMyw3ICsxMiw3IEBACiBAZW5kQAogRU9GCiAKLSUgbWliMmMgLWMgbWliMmMudGVzdC5jb25mIGludGVybmV0CislIG1pYjJjIFwtYyBtaWIyYy50ZXN0LmNvbmYgaW50ZXJuZXQKIC5TSCBERVNDUklQVElPTgogVGhlIG1pYjJjLmNvbmYgc2NyaXB0IGxhbmd1YWdlIGlzIGEgTUlCLXBhcnRpY3VsYXIgbGFuZ3VhZ2UgZGVzaWduZWQKIHRvIGVhc2lseSBwcm9jZXNzIE1JQiBub2RlcyBpbiB3YXlzIHRoYXQgeW91IHdhbnQuICBtaWIyYyBpcyBhCmRpZmYgLS1naXQgYS9tYW4vbWliX2FwaS4zLmRlZiBiL21hbi9taWJfYXBpLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjZkMWIwLi4wMDAwMDAwCi0tLSBhL21hbi9taWJfYXBpLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS5USCBNSUJfQVBJIDMgIjIyIEFwciAyMDA5IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlNIIE5BTUUKLWluaXRfbWliLCBhZGRfbWliZGlyLCBpbml0X21pYl9pbnRlcm5hbHMsCi1hZGRfbW9kdWxlX3JlcGxhY2VtZW50LAotcmVhZF9tb2R1bGUsIHJlYWRfbWliLCByZWFkX2FsbF9taWJzLAotcmVhZF9vYmppZCwgcmVhZF9tb2R1bGVfbm9kZSwgZ2V0X21vZHVsZV9ub2RlLAotc25tcF9zZXRfbWliX3dhcm5pbmdzLCBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucywKLXNodXRkb3duX21pYiwKLXByaW50X21pYiwKLXByaW50X3ZhcmlhYmxlLCBmcHJpbnRfdmFyaWFibGUsIHNucHJpbnRfdmFyaWFibGUsIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlLAotcHJpbnRfdmFsdWUsIGZwcmludF92YWx1ZSwgc25wcmludF92YWx1ZSwgc3ByaW50X3JlYWxsb2NfdmFsdWUsCi1wcmludF9vYmppZCwgZnByaW50X29iamlkLCBzbnByaW50X29iamlkLCBzcHJpbnRfcmVhbGxvY19vYmppZCwKLXByaW50X2Rlc2NyaXB0aW9uLCBmcHJpbnRfZGVzY3JpcHRpb24gLSBtaWJfYXBpIGZ1bmN0aW9ucwotLlNIIFNZTk9QU0lTCi0uQiAjaW5jbHVkZSA8bmV0LXNubXAvbWliX2FwaS5oPgotLlBQCi0uQiAidm9pZCBpbml0X21pYih2b2lkKTsKLS5icgotLkJJICJpbnQgYWRkX21pYmRpcihjb25zdCBjaGFyICoiICJkaXJuYW1lIiApOwotLmJyCi0uQkkgImludCBhZGRfbW9kdWxlX3JlcGxhY2VtZW50KGNvbnN0IGNoYXIgKiIgIm9sZF9tb2R1bGUiICIsIGNvbnN0IGNoYXIgKiIgIm5ld19tb2R1bGUiICIsIGNvbnN0IGNoYXIgKiIgInRhZyIgIiwgaW50ICIgImxlbiIgKTsKLS5icgotLkIgInZvaWQgaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpOwotLmJyCi0uQkkgInN0cnVjdCB0cmVlICpyZWFkX21vZHVsZShjb25zdCBjaGFyICoiICJuYW1lIiApOwotLmJyCi0uQkkgInN0cnVjdCB0cmVlICpyZWFkX21pYihjb25zdCBjaGFyICoiICJmaWxlbmFtZSIgKTsKLS5icgotLkIgInN0cnVjdCB0cmVlICpyZWFkX2FsbF9taWJzKHZvaWQpOwotLlBQCi0uQiAidm9pZCBzaHV0ZG93bl9taWIodm9pZCk7Ci0uUFAKLS5CSSAidm9pZCBwcmludF9taWIoRklMRSAqIiAiZnAiICk7Ci0uUFAKLS5CSSAiaW50IHJlYWRfb2JqaWQoY29uc3QgY2hhciAqIiAiaW5wdXQiICIsIG9pZCAqIiAib3V0cHV0IiAiLCBzaXplX3QgKiIgIm91dF9sZW4iICk7Ci0uYnIKLS5CSSAiaW50IGdldF9tb2R1bGVfbm9kZShjb25zdCBjaGFyICoiICJuYW1lIiAiLCBjb25zdCBjaGFyICoiICJtb2R1bGUiICIsIG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAqIiAib2JqaWRsZW4iICk7Ci0uUFAKLS5CSSAidm9pZCBwcmludF92YXJpYWJsZShjb25zdCBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgIiAib2JqaWRsZW4iICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiAidmFyaWFibGUiICk7Ci0uYnIKLS5CSSAidm9pZCBmcHJpbnRfdmFyaWFibGUoRklMRSAqIiBmcCAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICk7Ci0uYnIKLS5CSSAiaW50IHNucHJpbnRfdmFyaWFibGUoY2hhciAqIiAiYnVmIiAiLCBzaXplX3QgIiAibGVuIiAiLCBjb25zdCBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgIiAib2JqaWRsZW4iICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiAidmFyaWFibGUiICk7Ci0uYnIKLS5CSSAiaW50IHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlKHVfY2hhciAqKiIgYnVmICIsIHNpemVfdCAqIiBidWZfbGVuICIsIHNpemVfdCAqIiBvdXRfbGVuICIsIGludCAiIGFsbG93X3JlYWxsb2MgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSApOwotLlBQCi0uQkkgInZvaWQgcHJpbnRfdmFsdWUob2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcmlhYmxlKQotLmJyCi0uQkkgInZvaWQgZnByaW50X3ZhbHVlKEZJTEUgKiIgZnAgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSApOwotLmJyCi0uQkkgImludCBzbnByaW50X3ZhbHVlKGNoYXIgKiIgYnVmICIsIHNpemVfdCAiICJsZW4iICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgKTsKLS5icgotLkJJICJpbnQgc3ByaW50X3JlYWxsb2NfdmFsdWUodV9jaGFyICoqIiBidWYgIiwgc2l6ZV90ICoiIGJ1Zl9sZW4gIiwgc2l6ZV90ICoiIG91dF9sZW4gIiwgaW50ICIgYWxsb3dfcmVhbGxvYyAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICk7Ci0uUFAKLS5CSSAidm9pZCBwcmludF9vYmppZChjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gKTsKLS5icgotLkJJICJ2b2lkIGZwcmludF9vYmppZChGSUxFICoiIGZwICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiApOwotLmJyCi0uQkkgImludCBzbnByaW50X29iamlkKGNoYXIgKiIgYnVmICIsIHNpemVfdCAiICJsZW4iICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiApOwotLmJyCi0uQkkgImludCBzcHJpbnRfcmVhbGxvY19vYmppZCh1X2NoYXIgKioiIGJ1ZiAiLCBzaXplX3QgKiIgYnVmX2xlbiAiLCBzaXplX3QgKiIgb3V0X2xlbiAiLCBpbnQgImFsbG93X3JlYWxsb2MgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICk7Ci0uUFAKLS5CSSAidm9pZCBwcmludF9kZXNjcmlwdGlvbihvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgaW50ICIgd2lkdGggKTsKLS5icgotLkJJICJ2b2lkIGZwcmludF9kZXNjcmlwdGlvbihGSUxFICoiIGZwICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBpbnQgIiB3aWR0aCApOwotLlBQCi0uQkkgInZvaWQgc25tcF9zZXRfbWliX3dhcm5pbmdzKGludCAiIGxldmVsICk7Ci0uYnIKLS5CSSAidm9pZCBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyhpbnQgIiBzYXZlICIpOyIKLS5QUAotLlNIIERFU0NSSVBUSU9OCi1UaGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBNSUIgbW9kdWxlcyBmYWxsIGludG8gZm91ciBncm91cHMuICBUaG9zZQotZGVhbGluZyB3aXRoIGluaXRpYWxpc2F0aW9uIGFuZCBzaHV0ZG93biwgdGhvc2UgdGhhdCByZWFkIGluIGFuZAotcGFyc2UgTUlCIGZpbGVzLCB0aG9zZSB0aGF0IHNlYXJjaCB0aGUgTUlCIHRyZWUsIGFuZCB2YXJpb3VzIG91dHB1dAotcm91dGluZXMuCi0uU1MgSW5pdGlhbGlzYXRpb24gYW5kIFNodXRkb3duCi0uQiBpbml0X21pYgotaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIGNhbGxzIHRvCi0uQlIgYWRkX21pYmRpciAiLCAiIHJlYWRfbW9kdWxlICIgYW5kICIgcmVhZF9taWIKLWZvciBzdGFuZGFyZCBhcHBsaWNhdGlvbnMuICBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIKLXJvdXRpbmUgdGhhdCBtYW5pcHVsYXRlcyBvciBhY2Nlc3NlcyB0aGUgTUlCIHRyZWUuICBUaGlzIHJvdXRpbmUgc2V0cwotdXAgdmFyaW91cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLCBhcyB3ZWxsIGFzIHJlYWRpbmcgaW4gdGhlIGRlZmF1bHQgTUlCCi1tb2R1bGVzLCBhcyBkZXRhaWxlZCBiZWxvdy4KLS5QUAotLkIgYWRkX21pYmRpcgotaXMgdXNlZCB0byBkZWZpbmUgdGhlIHJhbmdlIG9mIGRpcmVjdG9yeSBsb2NhdGlvbnMgd2hpY2ggYXJlIHNlYXJjaGVkCi1mb3IgZmlsZXMgY29udGFpbmluZyBNSUIgbW9kdWxlcyAob25lIG1vZHVsZSBwZXIgZmlsZSkuICBCeSBkZWZhdWx0LAotdGhpcyB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5Ci0uSSBEQVRBRElSL21pYnMKLWJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCi0uSSBNSUJESVJTCi10byBhIChjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoLgotTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgbG9hZCB0aGUgTUlCIG1vZHVsZXMgbG9jYXRlZAotaW4gdGhhdCBkaXJlY3RvcnksIGJ1dCBpcyBhbiBpbml0aWFsaXNhdGlvbiBzdGVwIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUuCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb3VudCBvZiBmaWxlcyBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5LCBvciBhIC0xCi1pZiB0aGVyZSBpcyBhbiBlcnJvci4gIAotLlBQCi0uQiBpbml0X21pYl9pbnRlcm5hbHMKLXNldHMgdXAgdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIHByZXBhcmF0b3J5IHRvIHJlYWRpbmcgaW4gTUlCCi1tb2R1bGVzLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhbGwgY2FsbHMgdG8KLS5CUiBhZGRfbWliZGlyICwKLWFuZCBiZWZvcmUgYW5kIGNhbGxzIHRvCi0uQlIgcmVhZF9tb2R1bGUgLgotVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBpZgotLkIgaW5pdF9taWIKLWlzIHVzZWQuCi0uUFAKLS5CIHNodXRkb3duX21pYgotd2lsbCBjbGVhciB0aGUgaW5mb3JtYXRpb24gdGhhdCB3YXMgZ2F0aGVyZWQgYnkgCi0uQlIgcmVhZF9tb2R1bGUgIiwgIiBhZGRfbWliZGlyICIgYW5kICIgYWRkX21vZHVsZV9yZXBsYWNlbWVudCAuCi1JdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IG9uZSBkb2VzIG5vdCBpbnZva2UKLS5CUiBzaHV0ZG93bl9taWIKLXdoaWxlIHRoZXJlIGFyZSBTTk1QIHNlc3Npb25zIGJlaW5nIGFjdGl2ZWx5IG1hbmFnZWQuCi0uU1MgUmVhZGluZyBhbmQgUGFyc2luZyBNSUJzCi0uQiBhZGRfbW9kdWxlX3JlcGxhY2VtZW50Ci1jYW4gYmUgdXNlZCB0byBhbGxvdyBuZXcgTUlCIG1vZHVsZXMgdG8gb2Jzb2xldGUgb2xkZXIgb25lcywgd2l0aG91dAotbmVlZGluZyB0byBhbWVuZCB0aGUgaW1wb3J0cyBjbGF1c2VzIG9mIG90aGVyIG1vZHVsZXMuICBJdCB0YWtlcyB0aGUKLW5hbWVzIG9mIHRoZSBvbGQgYW5kIG5ldyBtb2R1bGVzLCB0b2dldGhlciB3aXRoIGFuIGluZGljYXRpb24gb2Ygd2hpY2gKLXBvcnRpb25zIG9mIHRoZSBvbGQgbW9kdWxlIGFyZSBhZmZlY3RlZC4KLS5SUwotLlRTCi10YWIoKyk7Ci1sYiBsYiBsYgotbCAgbCAgbC4KLXRhZyArIGxlbiArIGxvYWQgdGhlIG5ldyBtb2R1bGUgd2hlbjoKLU5VTEwgKyAwICsgYWx3YXlzICh0aGUgb2xkIG1vZHVsZSBpcyBhIHN0cmljdCBzdWJzZXQgb2YKLSArICsgdGhlIG5ldykKLW5hbWUgKyAwICsgZm9yIHRoZSBnaXZlbiB0YWcgb25seQotbmFtZSArIG5vbi0wICsgZm9yIGFueSBpZGVudGlmaWVyIHdpdGggdGhpcyBwcmVmaXgKLS5URQotLlJFCi1JdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIG1vZHVsZSBpZGVudGlmaWVycyB1c2VkCi1pbiBNSUIgaW1wb3J0IGNsYXVzZXMgKHN1Y2ggYXMgcmVmZXJyaW5nIHRvCi0uSSBSRkMxMjEzCi1pbnN0ZWFkIG9mCi0uSVIgUkZDMTIxMy1NSUIgKS4KLS5QUAotLkIgcmVhZF9tb2R1bGUKLWxvY2F0ZXMgYW5kIHBhcnNlcyB0aGUgbW9kdWxlIHNwZWNpZmllZCwgdG9nZXRoZXIgd2l0aCBhbnkgbW9kdWxlcwotdGhhdCBpdCBpbXBvcnRzIGZyb20sIGFuZCBhZGRzIHRoZSBjb250ZW50cyBvZiB0aGVzZSBtb2R1bGVzIHRvIHRoZQotYWN0aXZlIE1JQiB0cmVlLiAgTm90ZSB0aGF0Ci0uQiBhZGRfbWliZGlyCi1tdXN0IGZpcnN0IGJlIGNhbGxlZCB0byBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlIHdpdGggdGhlCi1tb2R1bGUgZGVmaW5pdGlvbiwgaWYgdGhpcyBpcyBub3QgaW4gdGhlIHN0YW5kYXJkIHBhdGguCi0uYnIKLUJ5IGRlZmF1bHQsIHRoZSBmb2xsb3dpbmcgTUlCIG1vZHVsZXMgd2lsbCBiZSBsb2FkZWQ6ICBJUC1NSUIsIElGLU1JQiwKLVRDUC1NSUIsIFVEUC1NSUIsIFNOTVB2Mi1NSUIsIFJGQzEyMTMtTUlCLCBVQ0QtU05NUC1NSUIuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCi0uSSBNSUJTCi10byBhIChjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgbW9kdWxlcyB0byBsb2FkLgotSWYgdGhpcyB2YXJpYWJsZSBzdGFydHMgd2l0aCBhIHBsdXMgY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgbW9kdWxlcwotYXJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IGxpc3QuICBPdGhlcndpc2Ugb25seSB0aG9zZSBtb2R1bGVzIGxpc3RlZCBhcmUKLWxvYWRlZCAodG9nZXRoZXIgd2l0aCBhbnkgb3RoZXJzIHRoZXkgaW1wb3J0IGZyb20pLgotSWYKLS5JIE1JQlMKLWlzIHNldCB0bwotLklSIEFMTCAsCi0uQiByZWFkX2FsbF9taWJzCi1pcyBjYWxsZWQgdG8gbG9hZCBhbGwgdGhlIE1JQiBmaWxlcyBmb3VuZCBpbiBhbGwgdGhlIHNwZWNpZmllZAotLklSIE1JQkRJUlMgLgotLlBQCi0uQiByZWFkX21pYgotcGFyc2VzIHRoZSBmaWxlIHNwZWNpZmllZCwgdG9nZXRoZXIgd2l0aCBhbnkgbW9kdWxlcyB0aGF0IGl0IGltcG9ydHMKLWZyb20sIGFuZCBhZGRzIHRoZSBjb250ZW50cyB0byB0aGUgYWN0aXZlIE1JQiB0cmVlLiAgU3VjaCBhIGZpbGUgY2FuCi1jb250YWluIG1vcmUgdGhlbiBvbmUgbW9kdWxlLCB0aG91Z2ggY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQgYW55Ci1pbXBvcnRzIG9jY3VyIGVhcmxpZXIgaW4gdGhlIGZpbGUsIGlmIHRoZXkgYXJlIG5vdCB0byBiZSByZWFkIGZyb20gdGhlCi1pbnN0YWxsZWQgbW9kdWxlcy4gIE5vdGUgdGhhdCB0aGUgZmlsZSBzcGVjaWZpZWQgZG9lcyBub3QgbmVlZCB0byBiZQotaW4gYW55IG9mIHRoZSBkaXJlY3RvcmllcyBpbml0aWFsaXNlZCBieQotLkIgYWRkX21pYmRpcgotKG9yIHRoZSBkZWZhdWx0IHNldHVwKSwgdGhvdWdoIGFueSBpbXBvcnRlZCBtb2R1bGVzIGRvLgotLmJyCi1UaGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLS5JIE1JQkZJTEVTCi1jYW4gYmUgc2V0IHRvIGEgKGNvbG9uLXNlcGFyYXRlZCkgbGlzdCBvZiBmaWxlcyBjb250YWluaW5nIE1JQnMgdG8gbG9hZC4KLS5QUAotLkIgcmVhZF9vYmppZAotdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHRleHR1YWwgdmVyc2lvbiBvZiBhbiBvYmplY3QgaWRlbnRpZmllcgotKGluIGVpdGhlciBudW1lcmljIG9yIGRlc2NyaXB0b3IgZm9ybSksIGFuZCB0cmFuc2Zvcm1zIHRoaXMgaW50byB0aGUKLWNvcnJlc3BvbmRpbmcgbGlzdCBvZiBzdWItaWRlbnRpZmllcnMuICBUaGlzIGlzIHJldHVybmVkIGluIHRoZQotLkkgb3V0cHV0Ci1wYXJhbWV0ZXIsIHdpdGggdGhlIG51bWJlciBvZiBzdWItaWRlbnRpZmllcnMgcmV0dXJuZWQgdmlhCi0uSVIgb3V0X2xlbiAuCi1XaGVuIGNhbGxlZCwgCi0uSSBvdXRfbGVuCi1tdXN0IGhvbGQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZQotLkkgb3V0cHV0Ci1hcnJheS4KLUlmIG11bHRpcGxlIG9iamVjdCBpZGVudGlmaWVycyBhcmUgYmVpbmcgcHJvY2Vzc2VkLCB0aGVuIHRoaXMKLWxlbmd0aCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIGVhY2ggY2FsbC4KLVRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIG9mIDEgaWYgaXQgc3VjY2VlZHMgaW4gcGFyc2luZyB0aGUgc3RyaW5nCi1hbmQgMCBvdGhlcndpc2UuCi0uU1MgU2VhcmNoaW5nIHRoZSBNSUIgVHJlZQotLkIgZ2V0X21vZHVsZV9ub2RlCi10YWtlcyBhIGRlc2NyaXB0b3IgYW5kIHRoZSBuYW1lIG9mIGEgbW9kdWxlLCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZwotb2lkIGxpc3QsIGluIHRoZSBzYW1lIHdheSBhcwotLkIgcmVhZF9vYmppZAotYWJvdmUuCi0uYnIKLUlmIHRoZSBtb2R1bGUgbmFtZSBpcyBzcGVjaWZpZWQgYXMgIkFOWSIsIHRoZW4gdGhpcyByb3V0aW5lIHdpbGwKLWFzc3VtZSB0aGF0IHRoZSBkZXNjcmlwdG9yIGdpdmVuIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHRyZWUsIGFuZCB3aWxsCi1yZXR1cm4gdGhlIG1hdGNoaW5nIGVudHJ5LiAgSWYgdGhpcyBhc3N1bXB0aW9uIGlzIGludmFsaWQsIHRoZW4gdGhlCi1iZWhhdmlvdXIgYXMgdG8gd2hpY2ggdmFyaWFibGUgaXMgcmV0dXJuZWQgaXMgaW1wbGVtZW50YXRpb24KLWRlcGVuZGVudC4KLS5TUyBPdXRwdXQKLS5CIHByaW50X21pYgotd2lsbCBwcmludCBvdXQgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBNSUIgdHJlZSB0bwotdGhlIHNwZWNpZmllZCBGSUxFIHBvaW50ZXIuCi0uUFAKLS5CIHByaW50X3ZhcmlhYmxlCi13aWxsIHRha2UgYW4gb2JqZWN0IGlkZW50aWZpZXIgKGFzIHJldHVybmVkIGJ5Ci0uQiByZWFkX29iamlkCi1vcgotLkJSIGdldF9tb2R1bGVfbm9kZSApCi1hbmQgYW4gaW5zdGFuY2Ugb2Ygc3VjaCBhIHZhcmlhYmxlLCBhbmQgcHJpbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQKLXRoZSB0ZXh0dWFsIGZvcm0gb2YgdGhlIG9iamVjdCBpZGVudGlmaWVyIHRvZ2V0aGVyIHdpdGggdGhlIHZhbHVlCi1vZiB0aGUgdmFyaWFibGUuCi0uQiBmcHJpbnRfdmFyaWFibGUKLWRvZXMgdGhlIHNhbWUsIGJ1dCBwcmludHMgdG8gdGhlIEZJTEUgcG9pbnRlciBzcGVjaWZpZWQgYnkgdGhlIGluaXRpYWwKLXBhcmFtZXRlci4KLS5icgotLkIgc25wcmludF92YXJpYWJsZQotcHJpbnRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5Ci0uSSBidWYKLXdoaWNoIGlzIG9mIGxlbmd0aAotLklSIGxlbiAKLWFuZCByZXR1cm5zIGVpdGhlciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZCwgb3IgLTEgaWYgdGhlCi1idWZmZXIgd2FzIG5vdCBsYXJnZSBlbm91Z2guICBJbiB0aGUgbGF0dGVyIGNhc2UsCi0uSSBidWYKLXdpbGwgdHlwaWNhbGx5IGNvbnRhaW5lZCBhIHRydW5jYXRlZCB2ZXJzaW9uIG9mIHRoZSBpbmZvcm1hdGlvbiAoYnV0Ci10aGlzIGJlaGF2aW91ciBpcyBub3QgZ3VhcmFudGVlZCkuICBUaGlzIGZ1bmN0aW9uIHJlcGxhY2VzIHRoZQotb2Jzb2xldGUgZnVuY3Rpb24KLS5CUiBzcHJpbnRfdmFyaWFibGUgLgotLmJyCi0uQiBzcHJpbnRfcmVhbGxvY192YXJpYWJsZQotaXMgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbiB1c2VkIHRvIGltcGxlbWVudCBhbGwgdGhlc2UgZnVuY3Rpb25zLiAgSXQKLXByaW50cyB0byBhIHNwZWNpZmllZCBvZmZzZXQgaW4gYSBzdHJpbmcgYnVmZmVyLiAgVGhlCi0uSSBidWYKLXBhcmFtZXRlciBwb2ludHMgdG8gYSBwb2ludGVyIHRvIHRoYXQgYnVmZmVyOwotLkkgYnVmX2xlbgotcG9pbnRzIHRvIGEgdmFyaWFibGUgaG9sZGluZyB0aGUgY3VycmVudCBzaXplIG9mIHRoYXQgYnVmZmVyLCBhbmQKLS5JIG91dF9sZW4KLXBvaW50cyB0byBhIHZhcmlhYmxlIGhvbGRpbmcgdGhlIG9mZnNldCB0byB3aGljaCB0byBwcmludC4KLS5JIG91dF9sZW4KLXdpbGwgYmUgdXBkYXRlZCB0byBob2xkIHRoZSBvZmZzZXQgb2YgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3QKLW9uZSBhZGRlZCB0byB0aGUgYnVmZmVyLiAgSWYKLS5JIGFsbG93X3JlYWxsb2MKLWlzIDEsIHRoZSBidWZmZXIgd2lsbCBiZSBkeW5hbWljYWxseSBleHBhbmRlZCwgYXMgbmVjZXNzYXJ5LCB0byBob2xkCi10aGUgb3V0cHV0OyB0aGUgdmFyaWFibGVzIHBvaW50ZWQgdG8gYnkKLS5JIGJ1ZgotYW5kCi0uSSBidWZfbGVuCi13aWxsIGJlIHVwZGF0ZWQuICBJZgotLkkgYWxsb3dfcmVhbGxvYwotaXMgMCwgdGhlIGJ1ZmZlciB3aWxsIG5vdCBiZSBkeW5hbWljYWxseSBleHBhbmRlZC4KLS5CIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlCi1yZXR1cm5zIDAgaWYKLS5JIGFsbG93X3JlYWxsb2MKLWlzIDEgYW5kIGFuIGF0dGVtcHQgdG8gYWxsb2NhdGUgbWVtb3J5IHRvIGV4cGFuZCB0aGUgYnVmZmVyIGZhaWxzLCBvcgotaWYKLS5JIGFsbG93X3JlYWxsb2MKLWlzIDAgYW5kIHRoZSBvdXRwdXQgd291bGRuJ3QgZml0IGluIHRoZSBidWZmZXIuICBPdGhlcndpc2UgaXQgcmV0dXJucwotMS4gIFdoZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgdG8gY2FsbAotLkJSIGZyZWUgKDMpCi1vbgotLkkgKmJ1Zgotd2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB3aXRoIGl0LgotLlBQCi0uQlIgcHJpbnRfdmFsdWUgLAotLkJSIGZwcmludF92YWx1ZSAsCi0uQlIgc25wcmludF92YWx1ZQotYW5kCi0uQiBzcHJpbnRfcmVhbGxvY192YWx1ZQotZG8gdGhlIHNhbWUgYXMgdGhlIGVxdWl2YWxlbnQKLS5CIHByaW50X3ZhcmlhYmxlCi1yb3V0aW5lcywgYnV0IG9ubHkgZGlzcGxheWluZyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCB3aXRob3V0IHRoZQotY29ycmVzcG9uZGluZyBvYmplY3QgaWRlbnRpZmllci4KLS5QUAotLkJSIHByaW50X29iamlkICwKLS5CUiBmcHJpbnRfb2JqaWQgLAotLkJSIHNucHJpbnRfb2JqaWQgLAotYW5kCi0uQiBzcHJpbnRfcmVhbGxvY19vYmppZAotdGFrZSBhbiBvYmplY3QgaWRlbnRpZmllciAod2l0aG91dCBhbiBhY2NvbXBhbnlpbmcgdmFyaWFibGUgaW5zdGFuY2UpCi1hbmQgcHJpbnQgb3V0IHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uLgotLlBQCi0uQkkgcHJpbnRfZGVzY3JpcHRpb24gLAotLkJJIGZwcmludF9kZXNjcmlwdGlvbiAsCi0uQkkgc25wcmludF9kZXNjcmlwdGlvbiAsCi1hbmQKLS5CIHNwcmludF9yZWFsbG9jX2Rlc2NyaXB0aW9uCi10YWtlIGFuIG9iamVjdCBpZGVudGlmaWVyIChhcyBmb3IKLS5CIHByaW50X29iamlkCi1hYm92ZSkgYW5kIHByaW50IG91dCBhIHZlcnNpb24gb2YgdGhlIE1JQiBkZWZpbml0aW9uIGZvciB0aGF0IG9iamVjdCwKLXRvZ2V0aGVyIHdpdGggdGhlIGZ1bGwgT0lELiBUaGUKLS5JIHdpZHRoCi1hcmd1bWVudCBjb250cm9scyBob3cgdGhlIE9JRCBpcyBsYXllZCBvdXQuCi0uUFAKLUJ5IGRlZmF1bHQgdGhlIHBhcnNlciBkb2VzIG5vdCBzYXZlIGRlc2NyaXB0aW9ucyBzaW5jZSB0aGV5IG1heSBiZQotaHVnZS4gIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcHJpbnQgdGhlbSwgeW91IG11c3QgY2FsbAotLkJSIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKDEpIC4KLS5QUAotSW4gZ2VuZXJhbCB0aGUgcGFyc2VyIGlzIHNpbGVudCBhYm91dCB3aGF0IHN0cmFuZ2VuZXNzZXMgaXQgc2VlcyBpbgotdGhlIE1JQiBmaWxlcy4gVG8gZ2V0IHdhcm5pbmdzIHJlcG9ydGVkLCBjYWxsCi0uQiBzbm1wX3NldF9taWJfd2FybmluZ3MKLXdpdGggYQotLkkgbGV2ZWwKLW9mIDEgKG9yIDIgZm9yIGV2ZW4gbW9yZSB3YXJuaW5ncykuCi0uU0ggIkVOVklST05NRU5UIFZBUklBQkxFUyIKLS5UUCAxMAotTUlCRElSUwotQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQiBtb2R1bGVzLgotRGVmYXVsdDogREFUQURJUi9zbm1wL21pYnMKLS5UUCAxMAotTUlCRklMRVMKLUEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8gbG9hZC4KLURlZmF1bHQ6IChub25lKQotLlRQIDEwCi1NSUJTCi1BIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIHRvIGxvYWQuCi1EZWZhdWx0OiBJUC1NSUI6SUYtTUlCOlRDUC1NSUI6VURQLU1JQjpTTk1QdjItTUlCOiBSRkMxMjEzLU1JQjpVQ0QtU05NUC1NSUIuCi0uU0ggIlNFRSBBTFNPIgotLkJSIHNubXBfYXBpICIoMykiCmRpZmYgLS1naXQgYS9tYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmIGIvbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZgppbmRleCA2NTIxYzllLi4zYTBmYTJiIDEwMDY0NAotLS0gYS9tYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmCisrKyBiL21hbi9uZXQtc25tcC1jb25maWcuMS5kZWYKQEAgLTEsMTcgKzEsMTcgQEAKIC5USCBuZXQtc25tcC1jb25maWcgMSAiMTYgTm92IDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQotbmV0LXNubXAtY29uZmlnIFwtIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgaW5zdGFsbGVkIG5ldC1zbm1wIGxpYnJhcmllcyBhbmQgYmluYXJpZXMgCituZXRcLXNubXBcLWNvbmZpZyAtIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgaW5zdGFsbGVkIG5ldC1zbm1wIGxpYnJhcmllcyBhbmQgYmluYXJpZXMgCiAuU0ggU1lOT1BTSVMKIC5QUAotLkIgbmV0LXNubXAtY29uZmlnCisuQiBuZXRcLXNubXBcLWNvbmZpZwogW09QVElPTlNdCiAuU0ggREVTQ1JJUFRJT04KIC5QUAotVGhlIFxmSW5ldC1zbm1wLWNvbmZpZ1xmUCBzaGVsbCBzY3JpcHQgaXMgZGVzaWduZWQgdG8gcmV0cmlldmUgdGhlCitUaGUgXGZJbmV0XC1zbm1wXC1jb25maWdcZlAgc2hlbGwgc2NyaXB0IGlzIGRlc2lnbmVkIHRvIHJldHJpZXZlIHRoZQogY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlicmFyaWVzIGFuZCBiaW5hcmllcyBkZWFsaW5nIHdpdGgKIHRoZSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIChTTk1QKSwgYnVpbHQgZnJvbSB0aGUgCiAuQiBuZXQtc25tcCAKLXNvdXJjZSBwYWNrYWdlLiBUaGUgaW5mb3JtYXRpb24gaXMgcGFydGljdWxhcmlseSB1c2VmdWwgZm9yCitzb3VyY2UgcGFja2FnZS4gVGhlIGluZm9ybWF0aW9uIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCiBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGxpbmsgYWdhaW5zdCB0aGUgU05NUCBsaWJyYXJpZXMgYW5kIGhlbmNlCiBtdXN0IGtub3cgYWJvdXQgYW55IG90aGVyIGxpYnJhcmllcyB0aGF0IG11c3QgYmUgbGlua2VkIGluIGFzIHdlbGwuCiAKQEAgLTI5LDggKzI5LDggQEAKIC5QUAogU05NUCBTZXR1cCBjb21tYW5kczoKIC5UUAotXGZCXC1cLWNyZWF0ZVwtc25tcHYzXC11c2VyXGZSIFstcm9dIFstYSBhdXRocGFzc10gWy14IHByaXZwYXNzXSBbLVggREVTfEFFU10KLVstQSBNRDV8U0hBXSBbdXNlcm5hbWVdCitcZkJcLVwtY3JlYXRlXC1zbm1wdjNcLXVzZXJcZlIgW1wtcm9dIFtcLWEgYXV0aHBhc3NdIFtcLXggcHJpdnBhc3NdCitbXC1YIERFU3xBRVNdIFtcLUEgTUQ1fFNIQV0gW3VzZXJuYW1lXQogLlBQCiBUaGVzZSBvcHRpb25zIHByb2R1Y2UgdGhlIHZhcmlvdXMgY29tcGlsYXRpb24gZmxhZ3MgbmVlZGVkIHdoZW4KIGJ1aWxkaW5nIGV4dGVybmFsIFNOTVAgYXBwbGljYXRpb25zOgpAQCAtNjMsOCArNjMsOCBAQAogQXV0b21hdGVkIHN1YmFnZW50IGJ1aWxkaW5nIChwcm9kdWNlcyBhbiBPVVRQVVROQU1FIGJpbmFyeSBmaWxlKToKIFtUaGlzIGZlYXR1cmUgaGFzIG5vdCBiZWVuIGV4dGVuc2l2ZWx5IHRlc3RlZCwgIHVzZSBhdCB5b3VyIG93biByaXNrLl0KIC5UUAotXGZCXC1cLWNvbXBpbGVcLXN1YmFnZW50XGZSIE9VVFBVVE5BTUUgWy0tbm9ybV0gWy0tY2ZsYWdzIGZsYWdzXQotWy0tbGRmbGFncyBmbGFnc10gbWlibW9kdWxlMS5jIFsuLi5dXQorXGZCXC1cLWNvbXBpbGVcLXN1YmFnZW50XGZSIE9VVFBVVE5BTUUgW1wtXC1ub3JtXSBbXC1cLWNmbGFncyBmbGFnc10KK1tcLVwtbGRmbGFncyBmbGFnc10gbWlibW9kdWxlMS5jIFsuLi5dXQogLlRQCiBcZkJcLVwtbm9ybVxmUgogbGVhdmUgdGhlIGdlbmVyYXRlZCAuYyBmaWxlIGFyb3VuZCB0byByZWFkLgpkaWZmIC0tZ2l0IGEvbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmIGIvbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjk0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYKQEAgLTAsMCArMSwyOCBAQAorLlRIIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIDEgIjE3IFNlcCAyMDA4IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK25ldC1zbm1wLWNyZWF0ZS12My11c2VyIFwtIGNyZWF0ZSBhIFNOTVB2MyB1c2VyIGluIG5ldC1zbm1wIGNvbmZpZ3VyYXRpb24gZmlsZQorLlNIIFNZTk9QU0lTCisuUFAKKy5CIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIFstcm9dIFstYSBhdXRocGFzc10gWy14IHByaXZwYXNzXSBbLVggREVTfEFFU10KKy5CIFt1c2VybmFtZV0KKy5TSCBERVNDUklQVElPTgorLlBQCitUaGUgXGZJbmV0LXNubXAtY3JlYXRlLXYzLXVzZXJcZlAgc2hlbGwgc2NyaXB0IGlzIGRlc2lnbmVkIHRvIGNyZWF0ZSBhCituZXcgdXNlciBpbiBuZXQtc25tcCBjb25maWd1cmF0aW9uIGZpbGUgKC92YXIvbmV0LXNubXAvc25tcGQuY29uZiBieSBkZWZhdWx0KS4KKworLlNIIE9QVElPTlMKKy5UUAorXGZCXC1cLXZlcnNpb25cZlIKK2Rpc3BsYXlzIHRoZSBuZXQtc25tcCB2ZXJzaW9uIG51bWJlcgorLlRQCitcZkJcLXJvXGZSCitjcmVhdGUgYW4gdXNlciB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9ucworLlRQCitcZkJcLWEgYXV0aHBhc3NcZlIKK3NwZWNpZnkgYXV0aGVudGljYXRpb24gcGFzc3dvcmQKKy5UUAorXGZCXC14IHByaXZwYXNzXGZSCitzcGVjaWZ5IGVuY3J5cHRpb24gcGFzc3dvcmQKKy5UUAorXGZCXC1YIERFU3xBRVNcZlIKK3NwZWNpZnkgZW5jcnlwdGlvbiBhbGdvcml0aG0KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2FnZW50LjMgYi9tYW4vbmV0c25tcF9hZ2VudC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2M3ZGQ1Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2FnZW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0uVEggIlRoZSBOZXQtU05NUCBhZ2VudCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLVRoZSBOZXQtU05NUCBhZ2VudCBcLSAKLS5QUAotVGhlIHNubXAgYWdlbnQgcmVzcG9uZHMgdG8gU05NUCBxdWVyaWVzIGZyb20gbWFuYWdlbWVudCBzdGF0aW9ucy4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCTmV0LVNOTVAgQWdlbnQgaGFuZGxlciBhbmQgZXh0ZW5zaWJpbGl0eSBBUElcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVRoZSBiYXNpYyB0aGVvcnkgZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlzOiBJbiB0aGUgcGFzdCwgd2l0aCB0aGUgb3JpZ2luYWwgbWliIFxmQm1vZHVsZVxmUCBhcGkgKHdoaWNoIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgQ01VIFNOTVAgY29kZSkgdGhlIHVuZGVybHlpbmcgbWliIG1vZHVsZXMgd2VyZSBwYXNzZWQgdmVyeSBsaXR0bGUgaW5mb3JtYXRpb24gKG9ubHkgdGhlIHRydWx5IG1vc3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgYSByZXF1ZXN0KS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBtaWJtb2R1bGUsIHNlc3Npb25zLCBldGNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCVHJhcCBnZW5lcmF0aW9uIHJvdXRpbmVzIGZvciBtaWIgbW9kdWxlcyB0byB1c2VcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0LXNubXAgYWdlbnQgcmVsYXRlZCBwcm9jZXNzaW5nXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHNubXAgYWdlbnQgcmVzcG9uZHMgdG8gU05NUCBxdWVyaWVzIGZyb20gbWFuYWdlbWVudCBzdGF0aW9ucy4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZWZkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYKQEAgLTAsMCArMSwxMzIgQEAKKy5USCBORVRTTk1QX0FHRU5UX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCituZXRzbm1wX2FnZW50X2FwaSAtIGVtYmVkZGluZyBhbiBhZ2VudCBpbnRvIGEgZXh0ZXJuYWwgYXBwbGljYXRpb24KKy5TSCBTWU5PUFNJUworLm5mCisjaW5jbHVkZSA8bmV0XC1zbm1wL25ldFwtc25tcFwtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0XC1zbm1wL25ldFwtc25tcFwtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXRcLXNubXAvYWdlbnQvbmV0XC1zbm1wXC1hZ2VudFwtaW5jbHVkZXMuaD4KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgYWdlbnR4X3N1YmFnZW50ID0gMTsgIC8qIENoYW5nZSB0aGlzIGlmIHlvdSdyZSBhIG1hc3RlciBhZ2VudC4gICovCisKKyAgc25tcF9lbmFibGVfc3RkZXJybG9nKCk7CisKKyAgLyogIElmIHdlJ3JlIGFuIEFnZW50WCBzdWJhZ2VudC4uLiAgKi8KKyAgaWYgKGFnZW50eF9zdWJhZ2VudCkgeworICAgICAgLyogLi4ubWFrZSB1cyBhbiBBZ2VudFggY2xpZW50LiAgKi8KKyAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ST0xFLCAxKTsKKyAgfQorCisgIGluaXRfYWdlbnQoInlvdXJhcHBuYW1lIik7CisKKyAgLyogIEluaXRpYWxpemUgeW91ciBNSUIgY29kZSBoZXJlLiAgKi8KKyAgaW5pdF9teV9taWJfY29kZSgpOworCisgIC8qICBgeW91cmFwcG5hbWUnIHdpbGwgYmUgdXNlZCB0byByZWFkIHlvdXJhcHBuYW1lLmNvbmYgZmlsZXMuICAqLworICBpbml0X3NubXAoInlvdXJhcHBuYW1lIik7CisKKyAgLyogIElmIHdlJ3JlIGdvaW5nIHRvIGJlIGEgU05NUCBtYXN0ZXIgYWdlbnQuLi4gICovCisgIGlmICghYWdlbnR4X3N1YmFnZW50KQorICAgICAgaW5pdF9tYXN0ZXJfYWdlbnQoKTsgIC8qICBMaXN0ZW4gb24gZGVmYXVsdCBwb3J0ICgxNjEpLiAgKi8KKworICAvKiAgWW91ciBtYWluIGxvb3AgaGVyZS4uLiAgKi8KKyAgd2hpbGUgKHdoYXRldmVyKSB7CisgICAgICAvKiBpZiB5b3UgdXNlIHNlbGVjdCgpLCBzZWUgc25tcF9hcGkoMykgKi8KKyAgICAgIC8qICAgICAtLS0gT1IgLS0tICAqLworICAgICAgYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMCk7IC8qIDAgPT0gZG9uJ3QgYmxvY2sgKi8KKyAgfQorCisgIC8qICBBdCBzaHV0ZG93biB0aW1lOiAgKi8KKyAgc25tcF9zaHV0ZG93bigieW91cmFwcG5hbWUiKTsKK30KKworVGhlbjoKKyQoQ0MpIC4uLiBgbmV0XC1zbm1wXC1jb25maWcgXC1cLWFnZW50XC1saWJzYAorCisuZmkKKy5TSCBERVNDUklQVElPTgorLlBQCitPdXIgZ29hbCBpcyB0byBjcmVhdGUgYSBlYXN5IHRvIHVzZSBpbnRlcmZhY2UgdG8gdGhlIE5ldC1TTk1QIHBhY2thZ2UKK3N1Y2ggdGhhdCB5b3UgY2FuIHRha2UgY29kZSB0aGF0IHlvdSBoYXZlIHdyaXR0ZW4gdGhhdCBoYXMgYmVlbgorZGVzaWduZWQgdG8gYmUgYSBOZXQtU05NUCBNSUIgbW9kdWxlIGFuZCBlbWJlZCBpdCBpbnRvIGFuIGV4dGVybmFsCithcHBsaWNhdGlvbiB3aGVyZSB5b3UgY2FuIGVpdGhlciBjaG9zZSB0byBiZSBhIFNOTVAgbWFzdGVyIGFnZW50IG9yIGFuCitBZ2VudFggc3ViLWFnZW50IHVzaW5nIHRoZSBzYW1lIE1JQiBtb2R1bGUgY29kZS4gIE91ciBzdWdnZXN0aW9uIGlzCit0aGF0IHlvdSB1c2Ugb3VyIChvciBhbm90aGVyKSBTTk1QIGFnZW50IGFzIHRoZSBBZ2VudFggbWFzdGVyIGFnZW50CithbmQgY2hvc2UgdG8gYmVjb21lIGFuIEFnZW50WCBzdWJhZ2VudCB3aGljaCB0aGVuIGF0dGFjaGVzIHRvIHRoZQorbWFzdGVyLgorLlBQCitUaGUgTmV0LVNOTVAgcGFja2FnZSBwcm92aWRlcyBhIHBhaXIgb2YgbGlicmFyaWVzIHRoYXQgZW5hYmxlcyBlYXN5CitlbWJlZGRpbmcgb2YgYW4gU05NUCBvciBBZ2VudFggYWdlbnQgaW50byBhbiBleHRlcm5hbCBzb2Z0d2FyZQorcGFja2FnZS4gQWdlbnRYIGlzIGFuIGV4dGVuc2libGUgcHJvdG9jb2wgZGVzaWduZWQgdG8gYWxsb3cgbXVsdGlwbGUKK1NOTVAgc3ViLWFnZW50cyBhbGwgcnVuIG9uIG9uZSBtYWNoaW5lIHVuZGVyIGEgc2luZ2xlIFNOTVAgbWFzdGVyCithZ2VudC4gIEl0IGlzIGRlZmluZWQgaW4gUkZDIDI3NDEuCisuUFAKK1lvdSB3aWxsIG5lZWQgdG8gcGVyZm9ybSBhIGZldyB0YXNrcyBpbiBvcmRlciB0byBhY2NvbXBsaXNoCit0aGlzLiBGaXJzdCBvZmYsIHlvdSB3aWxsIG5lZWQgdG8gaW5pdGlhbGl6ZSBib3RoIHRoZSBTTk1QIGxpYnJhcnkgYW5kCit0aGUgU05NUCBhZ2VudCBsaWJyYXJ5LiBBcyBpbmRpY2F0ZWQgYWJvdmUsIHRoaXMgaXMgZG9uZSBzbGlnaHRseQorZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBhcyBhCittYXN0ZXIgYWdlbnQgb3IgYW4gQWdlbnRYIHN1Yi1hZ2VudC4KKy5TSCBDT05GSUdVUkFUSU9OCisuUFAKK0lmIHlvdSBpbnRlbmQgdG8gb3BlcmF0ZSBhcyBhbiBBZ2VudFggc3ViLWFnZW50LCB5b3Ugd2lsbCBoYXZlIHRvCitjb25maWd1cmVkIHRoZSBOZXQtU05NUCBwYWNrYWdlIHdpdGggYWdlbnR4IHN1cHBvcnQgKHdoaWNoIGlzIHR1cm5lZAorb24gYnkgZGVmYXVsdCwgc28ganVzdCBkb24ndCB0dXJuIGl0IG9mZikKKy5QUAorQWRkaXRpb25hbGx5LCB5b3Ugd2lsbCBuZWVkIHRvIGxpbmsgYWdhaW5zdCB0aGUgTmV0LVNOTVAgbGlicmFyaWVzCisodXNlIHRoZSBvdXRwdXQgb2YgIm5ldFwtc25tcFwtY29uZmlnIFwtXC1hZ2VudFwtbGlicyIgdG8gZ2V0IGEgbGlicmFyeQorbGlzdCkgYW5kIGNhbGwgc3ViYWdlbnRfcHJlX2luaXQoKSBhcyBpbmRpY2F0ZWQgYWJvdmUuCisuU0ggQ09NUElMSU5HCisuUFAKK0luIG9yZGVyIHRvIG1ha2UgdXNlIG9mIGFueSBvZiB0aGUgYWJvdmUgQVBJLCB5b3Ugd2lsbCBuZWVkIHRvIGxpbmsKK2FnYWluc3QgYXQgbGVhc3QgdGhlIGZvdXIgbGlicmFyaWVzIGxpc3RlZCBhYm92ZS4KKy5TSCBGVU5DVElPTlMKKy5QUCBUaGlzIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgYWJvdmUgYW5kCit3aGVyZSB0byBmaW5kIG91dCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW0uICBJdCBpcyBjZXJ0YWlubHkgbm90IGEKK2NvbXBsZXRlIGxpc3Qgb2Ygd2hhdCBpcyBhdmFpbGFibGUgd2l0aGluIGFsbCB0aGUgTmV0LVNOTVAgbGlicmFyaWVzLiAKKy5JUCAic25tcF9lbmFibGVfc3RkZXJybG9nKCkiCitMb2dzIGVycm9yIG91dHB1dCBmcm9tIHRoZSBTTk1QIGFnZW50IHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisuSVAgIm5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oKSIKK1BsZWFzZSBzZWUgdGhlCisuSVIgZGVmYXVsdF9zdG9yZSgzKQorbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24KK2Fib3V0IHRoaXMgQVBJLgorLklQICJpbml0X2FnZW50KGNoYXIgKm5hbWUpIgorSW5pdGlhbGl6ZXMgdGhlIGVtYmVkZGVkIGFnZW50LiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKy5CUiAiaW5pdF9zbm1wKCkiCitjYWxsLiAgCisuSSBuYW1lCitpcyB1c2VkIHRvIGRpY3RhdGUgd2hhdCAuY29uZiBmaWxlIHRvIHJlYWQgd2hlbgorLkJSICJpbml0X3NubXAoKSIKK2lzIGNhbGxlZCBsYXRlci4KKy5JUCAiaW5pdF9zbm1wKGNoYXIgKm5hbWUpIgorSW5pdGlhbGl6ZXMgdGhlIFNOTVAgbGlicmFyeS4gIE5vdGUgdGhhdCBvbmUgb2YgdGhlIHRoaW5ncyB0aGlzIHdpbGwKK2RvIHdpbGwgYmUgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZpbGVzIGluIGFuIGVmZm9ydCB0byBjb25maWd1cmUgeW91cgorYXBwbGljYXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG5hbWVkIGJ5Cit0aGUKKy5JIG5hbWUKK3N0cmluZyB0aGF0IHlvdSBwYXNzZWQgaW4uICBJdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgYWNjZXNzCitjb250cm9sLCBmb3IgaW5zdGFuY2UuICAgUGxlYXNlIHNlZSB0aGUKKy5JUiBuZXRzbm1wX2NvbmZpZ19hcGkoMykgIiwgIiBzbm1wX2NvbmZpZyg1KSAiLCBhbmQgIiBzbm1wZC5jb25mKDUpCittYW51YWwgcGFnZXMgZm9yIGZ1cnRoZXIgZGV0YWlscyBvbiB0aGlzIHN1YmplY3QuCisuSVAgImluaXRfbWFzdGVyX2FnZW50KHZvaWQpIgorSW5pdGlhbGl6ZXMgdGhlIG1hc3RlciBhZ2VudCBhbmQgY2F1c2VzIGl0IHRvIGxpc3RlbiBmb3IgU05NUCByZXF1ZXN0cyAKK29uIGl0cyBkZWZhdWx0IFVEUCBwb3J0IG9mIDE2MS4KKy5JUCAiYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoaW50IGJsb2NrKSIKK1RoaXMgY2hlY2tzIGZvciBwYWNrZXRzIGFycml2aW5nIG9uIHRoZSBTTk1QIHBvcnQgYW5kIHByb2Nlc3NlcyB0aGVtCitpZiBzb21lIGFyZSBmb3VuZC4gIElmIAorLkkgYmxvY2sKK2lzIG5vbi16ZXJvLCB0aGUgZnVuY3Rpb24gY2FsbCB3aWxsIGJsb2NrIHVudGlsIGEgcGFja2V0IGFycml2ZXMgb3IgYW4gCithbGFybSBtdXN0IGJlIHJ1biAoc2VlCisuSVIgc25tcF9hbGFybSgzKSApLgorVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHBhY2tldHMKK3dlcmUgcHJvY2Vzc2VkLCB6ZXJvIGlmIGFuIGFsYXJtIG9jY3VycmVkIGFuZCBcLTEgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKy5JUCAic25tcF9zaHV0ZG93bihjaGFyICpuYW1lKTsiCitUaGlzIHNodXRzIGRvd24gdGhlIGFnZW50LCBzYXZpbmcgYW55IG5lZWRlZCBwZXJzaXN0ZW50IHN0b3JhZ2UsIGV0Yy4KKy5TSCAiU0VFIEFMU08iCitodHRwOi8vd3d3Lm5ldFwtc25tcC5vcmcvdHV0b3JpYWxcLTUvdG9vbGtpdC8gc2VsZWN0KDIpLCBzbm1wX2FwaSgzKSwKK2RlZmF1bHRfc3RvcmUoMyksIHNubXBfYWxhcm0oMyksIG5ldHNubXBfY29uZmlnX2FwaSgzKSwgc25tcF9jb25maWcoNSksCitzbm1wZC5jb25mKDUpCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zIGIvbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiYTJmMi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLS5USCAiTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIHRvZ2V0aGVyIHdpdGggcmVsYXRlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgbWlibW9kdWxlLCBzZXNzaW9ucywgZXRjIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIHRvZ2V0aGVyIHdpdGggcmVsYXRlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgbWlibW9kdWxlLCBzZXNzaW9ucywgZXRjIFwtIAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmxvb2t1cF9jYWNoZV9zXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJsb29rdXBfY2FjaGVfY29udGV4dF9zXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJJTl9TTk1QX1ZBUlNfQ1xmUCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFXGZQICAgOCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNVQlRSRUVfTUFYX0NBQ0hFX1NJWkVcZlAgICAzMiIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJsb29rdXBfY2FjaGVfc1xmUCBcZkJsb29rdXBfY2FjaGVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbG9va3VwX2NhY2hlX2NvbnRleHRfc1xmUCBcZkJsb29rdXBfY2FjaGVfY29udGV4dFxmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCaW52YWxpZGF0ZV9sb29rdXBfY2FjaGVcZlAgKGNvbnN0IGNoYXIgKmNvbnRleHQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemVcZlAgKGludCBuZXdzaXplKSIKLS5icgotLlJJICJcZklzZXQgdGhlIGxvb2t1cCBjYWNoZSBzaXplIGZvciBvcHRpbWl6ZWQgYWdlbnQgcmVnaXN0cmF0aW9uIHBlcmZvcm1hbmNlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZVxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zdWJ0cmVlX2ZyZWVcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqYSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX2RlZXBjb3B5XGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKmEpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQnN1YnRyZWVfY29udGV4dF9jYWNoZVxmUCAqIFxmQmdldF90b3BfY29udGV4dF9jYWNoZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3RcZlAgKGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCYWRkX3N1YnRyZWVcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX3JlcGxhY2VfZmlyc3RcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3N1YnRyZWVfY2hhbmdlX25leHRcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcHRyLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnRoZW5leHQpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9zdWJ0cmVlX2NoYW5nZV9wcmV2XGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnB0ciwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICp0aGVwcmV2KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zdWJ0cmVlX2NvbXBhcmVcZlAgKGNvbnN0IFxmQm5ldHNubXBfc3VidHJlZVxmUCAqYXAsIGNvbnN0IFxmQm5ldHNubXBfc3VidHJlZVxmUCAqYnApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zdWJ0cmVlX2pvaW5cZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcm9vdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX3NwbGl0XGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKmN1cnJlbnQsIG9pZCBuYW1lW10sIGludCBuYW1lX2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3VidHJlZV9sb2FkXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKm5ld19zdWIsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbWliXGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIGludCBwZXJmb3JtX2NhbGxiYWNrKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlZ2lzdGVyX21pYl9yZWF0dGFjaFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWdpc3Rlcl9taWJfZGV0YWNoXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfbWliX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgY29uc3QgY2hhciAqY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX21pYl9yYW5nZVxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfbWliX3ByaW9yaXR5XGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfbWliXGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3N1YnRyZWVfdW5sb2FkXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnN1YiwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpwcmV2LCBjb25zdCBjaGFyICpjb250ZXh0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdW5yZWdpc3Rlcl9taWJfY29udGV4dFxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgY29uc3QgY2hhciAqY29udGV4dCkiCi0uYnIKLS5SSSAiXGZJVW5yZWdpc3RlcnMgYW4gT0lEIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgY29udGV4dCBuYW1lIHZhbHVlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3VucmVnaXN0ZXJfbWliX3RhYmxlX3Jvd1xmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksIGludCB2YXJfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIGNvbnN0IGNoYXIgKmNvbnRleHQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ1bnJlZ2lzdGVyX21pYl9yYW5nZVxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVucmVnaXN0ZXJfbWliX3ByaW9yaXR5XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVucmVnaXN0ZXJfbWliXGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCdW5yZWdpc3Rlcl9taWJzX2J5X3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJpbl9hX3ZpZXdcZlAgKG9pZCAqbmFtZSwgc2l6ZV90ICpuYW1lbGVuLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBpbnQgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNoZWNrX2FjY2Vzc1xmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWNtX2NoZWNrX3N1YnRyZWVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pIgotLmJyCi0uUkkgIlxmSWNoZWNrcyB0byBzZWUgaWYgZXZlcnl0aGluZyB3aXRoaW4gYSBnaXZlbiBzdWJ0cmVlIGlzIGVpdGhlcjogaW4gdmlldywgbm90IGluIHZpZXcsIG9yIHBvc3NpYmx5IGJvdGguIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIFxmQmxvb2t1cF9jYWNoZV9jb250ZXh0XGZQICogXGZCZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlXGZQIChjb25zdCBjaGFyICpjb250ZXh0KSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJsb29rdXBfY2FjaGVfYWRkXGZQIChjb25zdCBjaGFyICpjb250ZXh0LCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKm5leHQsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcHJldmlvdXMpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQmxvb2t1cF9jYWNoZV9yZXBsYWNlXGZQIChcZkJsb29rdXBfY2FjaGVcZlAgKnB0ciwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpuZXh0LCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnByZXZpb3VzKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgXGZCbG9va3VwX2NhY2hlXGZQICogXGZCbG9va3VwX2NhY2hlX2ZpbmRcZlAgKGNvbnN0IGNoYXIgKmNvbnRleHQsIG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgKnJldGNtcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldlxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnN1YnRyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX2ZpbmRfbmV4dFxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnN1YnRyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCbmV0c25tcF9zdWJ0cmVlX2ZpbmRcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQmdldF9zZXNzaW9uX2Zvcl9vaWRcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNldHVwX3RyZWVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZW1vdmVfdHJlZV9lbnRyeVxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNodXRkb3duX3RyZWVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfc3VidHJlZVxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpzdWIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfbG9va3VwX2NhY2hlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX2NvbnRleHRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZHVtcF9pZHhfcmVnaXN0cnlcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZHVtcF9yZWdpc3RyeVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiUkVUU0lHVFlQRSBcZkJhZ2VudF9TSUdDSExEX2hhbmRsZXJcZlAgKGludCBzaWcpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9zaWduYWxcZlAgKGludCBzaWcsIHZvaWQoKmZ1bmMpKGludCkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ1bnJlZ2lzdGVyX3NpZ25hbFxmUCAoaW50IHNpZykiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQnN1YnRyZWVfY29udGV4dF9jYWNoZVxmUCAqIFxmQmNvbnRleHRfc3VidHJlZXNcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb29rdXBfY2FjaGVfc2l6ZVxmUCA9IDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmV4dGVybmFsX3NpZ25hbF9zY2hlZHVsZWRcZlAgW05VTV9FWFRFUk5BTF9TSUdTXSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkKCogXGZCZXh0ZXJuYWxfc2lnbmFsX2hhbmRsZXJcZlAgW05VTV9FWFRFUk5BTF9TSUdTXSkoaW50KSIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9hY21fY2hlY2tfc3VidHJlZSAoXGZCbmV0c25tcF9wZHVcZlAgKiBwZHUsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lbGVuKSIKLS5QUAotY2hlY2tzIHRvIHNlZSBpZiBldmVyeXRoaW5nIHdpdGhpbiBhIGdpdmVuIHN1YnRyZWUgaXMgZWl0aGVyOiBpbiB2aWV3LCBub3QgaW4gdmlldywgb3IgcG9zc2libHkgYm90aC4gSWYgdGhlIGVudGlyZSBzdWJ0cmVlIGlzIG5vdC1pbi12aWV3IHdlIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBza2lwIGNhbGxpbmcgdGhlIHN1Yi1oYW5kbGVycyBlbnRpcmVseS4gCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBpZiBlbnRpcmUgc3VidHJlZSBpcyBhY2Nlc3NpYmxlLCA1IGlmIG5vdCBhbmQgNyBpZiBwb3J0aW9ucyBhcmUgYm90aC4gMSBvbiBlcnJvciAoaWxsZWdhbCBwZHUgdmVyc2lvbikuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTMyMyBvZiBmaWxlIGFnZW50X3JlZ2lzdHJ5LmMuCi0uU1MgImludCBuZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZSAodm9pZCkiCi0uUFAKLXJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9va3VwIGNhY2hlIHNpemUgXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci10aGUgY3VycmVudCBsb29rdXAgY2FjaGUgc2l6ZSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzOTYgb2YgZmlsZSBhZ2VudF9yZWdpc3RyeS5jLgotLlNTICJ2b2lkIG5ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplIChpbnQgbmV3c2l6ZSkiCi0uUFAKLXNldCB0aGUgbG9va3VwIGNhY2hlIHNpemUgZm9yIG9wdGltaXplZCBhZ2VudCByZWdpc3RyYXRpb24gcGVyZm9ybWFuY2UuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmV3c2l6ZVxmUCBzZXQgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhIGNhY2hlIGZvciBhIGdpdmVuIGNvbnRleHQuIFNldCB0byAwIHRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBvciB0byAtMSB0byBzZXQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgc2l6ZSAoOCksIG9yIHRvIGEgbnVtYmVyIG9mIHlvdXIgY2hvc2luZy4gVGhlIHJvdWdoIGd1aWRlIGlzIHRoYXQgaXQgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmlvdXMgbWFuYWdlcnMgeW91IGV4cGVjdCB0byB0YWxrIHRvIHRoZSBhZ2VudCAoTSkgdGltZXMgODAlIChvciBzbywgaGUgc2F5cyByYW5kb21seSkgdGhlIGF2ZXJhZ2UgbnVtYmVyIChOKSBvZiB2YXJiaW5kcyB5b3UgZXhwZWN0IHRvIHJlY2VpdmUgaW4gYSBnaXZlbiByZXF1ZXN0IGZvciBhIG1hbmFnZXIuIGllLCBNIHRpbWVzIE4uIEJpZ2dlciBkb2VzIE5PVCBuZWNlc3NhcmlseSBtZWFuIGJldHRlci4gQ2VydGFpbmx5IDE2IHNob3VsZCBiZSBhbiB1cHBlciBsaW1pdC4gMzIgaXMgdGhlIGhhcmQgY29kZWQgbGltaXQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM4MyBvZiBmaWxlIGFnZW50X3JlZ2lzdHJ5LmMuCi0uU1MgImludCB1bnJlZ2lzdGVyX21pYl9jb250ZXh0IChvaWQgKiBuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgY29uc3QgY2hhciAqIGNvbnRleHQpIgotLlBQCi1VbnJlZ2lzdGVycyBhbiBPSUQgdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBjb250ZXh0IG5hbWUgdmFsdWUuIFR5cGljYWxseSB1c2VkIHdoZW4gYSBcZkJtb2R1bGVcZlAgaGFzIG11bHRpcGxlIGNvbnRleHRzIGRlZmluZWQuIFRoZSBwYXJhbWV0ZXJzIHByaW9yaXR5LCByYW5nZV9zdWJpZCwgYW5kIHJhbmdlX3Vib3VuZCBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFnZW50eCwgc2VlIFJGQyAyNzQxLCBvdGhlcndpc2UgdGhlc2UgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgMC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluYW1lXGZQIHRoZSBzcGVjaWZpYyBPSUQgdG8gdW5yZWdpc3RlciBpZiBpdCBjb25hdGlucyB0aGUgYXNzb2NpYXRlZCBjb250ZXh0LgotLmJyCi1cZklsZW5cZlAgdGhlIGxlbmd0aCBvZiB0aGUgT0lELCB1c2UgT0lEX0xFTkdUSCBtYWNyby4KLS5icgotXGZJcHJpb3JpdHlcZlAgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDI1NSwgdXNlZCB0byBhY2hpZXZlIGEgZGVzaXJlZCBjb25maWd1cmF0aW9uIHdoZW4gZGlmZmVyZW50IHNlc3Npb25zIHJlZ2lzdGVyIGlkZW50aWNhbCBvciBvdmVybGFwcGluZyByZWdpb25zLiBTdWJhZ2VudHMgd2l0aCBubyBwYXJ0aWN1bGFyIGtub3dsZWRnZSBvZiBwcmlvcml0eSBzaG91bGQgcmVnaXN0ZXIgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAxMjcuCi0uYnIKLVxmSXJhbmdlX3N1YmlkXGZQIHBlcm1pdHMgc3BlY2lmeWluZyBhIHJhbmdlIGluIHBsYWNlIG9mIG9uZSBvZiBhIHN1YnRyZWUgc3ViLWlkZW50aWZpZXJzLiBXaGVuIHRoaXMgdmFsdWUgaXMgemVybywgbm8gcmFuZ2UgaXMgYmVpbmcgc3BlY2lmaWVkLgotLmJyCi1cZklyYW5nZV91Ym91bmRcZlAgdGhlIHVwcGVyIGJvdW5kIG9mIGEgc3ViLWlkZW50aWZpZXIncyByYW5nZS4gVGhpcyBmaWVsZCBpcyBwcmVzZW50IG9ubHkgaWYgcmFuZ2Vfc3ViaWQgaXMgbm90IDAuCi0uYnIKLVxmSWNvbnRleHRcZlAgYSBjb250ZXh0IG5hbWUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5Njkgb2YgZmlsZSBhZ2VudF9yZWdpc3RyeS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2FnZW50X3RyYXAuMyBiL21hbi9uZXRzbm1wX2FnZW50X3RyYXAuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI1MTcxZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9hZ2VudF90cmFwLjMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLlRIICJUcmFwIGdlbmVyYXRpb24gcm91dGluZXMgZm9yIG1pYiBtb2R1bGVzIHRvIHVzZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLVRyYXAgZ2VuZXJhdGlvbiByb3V0aW5lcyBmb3IgbWliIG1vZHVsZXMgdG8gdXNlIFwtIAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyYXBfc2lua1xmUCIKLS5icgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUFYyX1RSQVBTX1BSRUZJWFxmUCAgIFNOTVBfT0lEX1NOTVBNT0RVTEVTLDEsMSw1IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUFYyX1RSQVBfT0JKU19QUkVGSVhcZlAgICBTTk1QX09JRF9TTk1QTU9EVUxFUywxLDEsNCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBWMl9DT01NX09CSlNfUFJFRklYXGZQICAgU05NUF9PSURfU05NUE1PRFVMRVMsMTgsMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfQVVUSEVOVElDQVRFRF9UUkFQU19FTkFCTEVEXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfQVVUSEVOVElDQVRFRF9UUkFQU19ESVNBQkxFRFxmUCAgIDIiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNQVhfQVJHU1xmUCAgIDEyOCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X3RyYXBzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYWRkX3RyYXBfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgaW50IHBkdXR5cGUsIGludCBjb25maXJtLCBpbnQgdmVyc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlbW92ZV90cmFwX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjcmVhdGVfdHJhcF9zZXNzaW9uXGZQIChjaGFyICpzaW5rLCB1X3Nob3J0IHNpbmtwb3J0LCBjaGFyICpjb20sIGludCB2ZXJzaW9uLCBpbnQgcGR1dHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9mcmVlX3RyYXBzaW5rc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJjb252ZXJ0X3YycGR1X3RvX3YxXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqdGVtcGxhdGVfdjJwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCY29udmVydF92MXBkdV90b192MlxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnRlbXBsYXRlX3YxcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZW5kX3RyYXBzXGZQIChpbnQgdHJhcCwgaW50IHNwZWNpZmljLCBvaWQgKmVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJzLCBjaGFyICpjb250ZXh0LCBpbnQgZmxhZ3MpIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBnZW5lcmljIHRyYXBzIGZyb20gZGlmZmVyZW50IGNsYXNzZXMgb2YgZXF1aXBtZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFyc1xmUCAoaW50IHRyYXAsIGludCBzcGVjaWZpYywgb2lkICplbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFycykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9pbmZvcm1fcmVzcG9uc2VcZlAgKGludCBvcCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBpbnQgcmVxaWQsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHZvaWQgKm1hZ2ljKSIKLS5icgotLlJJICJcZklDYXB0dXJlcyByZXNwb25zZXMgb3IgdGhlIGxhY2sgdGhlcmUgb2YgZnJvbSBJTkZPUk1zIHRoYXQgd2VyZSBzZW50IDEpIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSBhbiBJTkZPUk0gMikgb25lIGlzbid0IHJlY2VpdmVkIGFuZCB0aGUgcmV0cmllcy90aW1lb3V0cyBoYXZlIGZhaWxlZC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfdHJhcF90b19zZXNzXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3MsIFxmQm5ldHNubXBfcGR1XGZQICp0ZW1wbGF0ZV9wZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF90cmFwX3ZhcnNcZlAgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFycykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX2Vhc3lfdHJhcFxmUCAoaW50IHRyYXAsIGludCBzcGVjaWZpYykiCi0uYnIKLS5SSSAiXGZJU2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YgY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgJ3NpbmtzJyksIHVzaW5nIHRoZSBwcm92aWRlZCB2YWx1ZXMgZm9yIHRoZSBnZW5lcmljIHRyYXAgdHlwZSBhbmQgc3BlY2lmaWMgdHJhcCB2YWx1ZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfdjJ0cmFwXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcnMpIgotLmJyCi0uUkkgIlxmSVVzZXMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcCwgd2hpY2ggaXMgc2VudCB0byBTTk1QdjItY2FwYWJsZSBzaW5rcyBvbiB0aGUgY29uZmlndXJlZCBsaXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF90cmFwX3BkdVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfYXV0aHRyYXBcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ190cmFwc2lua1xmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX3RyYXAyc2lua1xmUCAoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfaW5mb3Jtc2lua1xmUCAoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNlc3NcZlAgKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX3RyYXBjb21tdW5pdHlcZlAgKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfZnJlZV90cmFwY29tbXVuaXR5XGZQICh2b2lkKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyYXBfc2lua1xmUCAqIFxmQnNpbmtzXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJzdGFydHRpbWVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQm9iamlkX2VudGVycHJpc2V0cmFwXGZQIFtdID0geyBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCdHJhcF92ZXJzaW9uX2lkXGZQIFtdID0geyBORVRTTk1QX1NZU1RFTV9NSUIgfSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZW50ZXJwcmlzZXRyYXBfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ0cmFwX3ZlcnNpb25faWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJ0cmFwX3ByZWZpeFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJjb2xkX3N0YXJ0X29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMSB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJ3YXJtX3N0YXJ0X29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMiB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJsaW5rX2Rvd25fb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAzIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmxpbmtfdXBfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCA0IH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmF1dGhfZmFpbF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDUgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCZWdwX3h4eF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDk5IH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnNubXB0cmFwX29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDEsIDAgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCc25tcHRyYXBlbnRlcnByaXNlX29pZFxmUCBbXSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCc3lzdXB0aW1lX29pZFxmUCBbXSA9IHsgU05NUF9PSURfTUlCMiwgMSwgMywgMCB9IgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzbm1wdHJhcF9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc3lzdXB0aW1lX29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmFnZW50YWRkcl9vaWRcZlAgW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCAzLCAwIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmFnZW50YWRkcl9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJjb21tdW5pdHlfb2lkXGZQIFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgNCwgMCB9IgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb21tdW5pdHlfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc25tcF90cmFwY29tbXVuaXR5XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9lbmFibGVhdXRoZW50cmFwc1xmUCA9IFNOTVBfQVVUSEVOVElDQVRFRF9UUkFQU19ESVNBQkxFRCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9lbmFibGVhdXRoZW50cmFwc3NldFxmUCA9IDAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IGhhbmRsZV9pbmZvcm1fcmVzcG9uc2UgKGludCBvcCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICogc2Vzc2lvbiwgaW50IHJlcWlkLCBcZkJuZXRzbm1wX3BkdVxmUCAqIHBkdSwgdm9pZCAqIG1hZ2ljKSIKLS5QUAotQ2FwdHVyZXMgcmVzcG9uc2VzIG9yIHRoZSBsYWNrIHRoZXJlIG9mIGZyb20gSU5GT1JNcyB0aGF0IHdlcmUgc2VudCAxKSBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gYW4gSU5GT1JNIDIpIG9uZSBpc24ndCByZWNlaXZlZCBhbmQgdGhlIHJldHJpZXMvdGltZW91dHMgaGF2ZSBmYWlsZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUwIG9mIGZpbGUgYWdlbnRfdHJhcC5jLgotLlNTICJpbnQgbmV0c25tcF9zZW5kX3RyYXBzIChpbnQgdHJhcCwgaW50IHNwZWNpZmljLCBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcnMsIGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gZ2VuZXJpYyB0cmFwcyBmcm9tIGRpZmZlcmVudCBjbGFzc2VzIG9mIGVxdWlwbWVudC4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2FudCB0byBoYW5kbGUgYSBTTk1QX1RSQVBfTElOS0RPV04gdHJhcCBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSBpbiBhIGRpZmZlcmVudCBtYW5uZXIgdG8gYSBnZW5lcmljIHN5c3RlbSBTTk1QX1RSQVBfTElOS0RPV04gdHJhcC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0cmFwXGZQIGlzIHRoZSBnZW5lcmljIHRyYXAgdHlwZS4gVGhlIHRyYXAgdHlwZXMgYXJlOgotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfQ09MRFNUQVJUOiBjb2xkIHN0YXJ0Ci0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9XQVJNU1RBUlQ6IHdhcm0gc3RhcnQKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0xJTktET1dOOiBsaW5rIGRvd24KLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0xJTktVUDogbGluayB1cAotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfQVVUSEZBSUw6IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0VHUE5FSUdIQk9STE9TUzogZWdwIG5laWdoYm9yIGxvc3MKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQzogZW50ZXJwcmlzZSBzcGVjaWZpYwotLlBQCi0uYnIKLVxmSXNwZWNpZmljXGZQIGlzIHRoZSBzcGVjaWZpYyB0cmFwIHZhbHVlLgotLmJyCi1cZkllbnRlcnByaXNlXGZQIGlzIGFuIGVudGVycHJpc2Ugb2lkIGluIHdoaWNoIHlvdSB3YW50IHRvIHNlbmQgc3BlY2lmaWMgdHJhcHMgZnJvbS4KLS5icgotXGZJZW50ZXJwcmlzZV9sZW5ndGhcZlAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZW50ZXJwcmlzZSBvaWQsIHVzZSBtYWNybywgT0lEX0xFTkdUSCwgdG8gY29tcHV0ZSBsZW5ndGguCi0uYnIKLVxmSXZhcnNcZlAgaXMgdXNlZCB0byBzdXBwbHkgbGlzdCBvZiBcZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLgotLmJyCi1cZkljb250ZXh0XGZQIGN1cnJlbnRseSB1bnVzZWQKLS5icgotXGZJZmxhZ3NcZlAgY3VycmVudGx5IHVudXNlZAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNlbmRfZWFzeV90cmFwXGZQIAotLlBQCi1cZkJzZW5kX3YydHJhcFxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYyOSBvZiBmaWxlIGFnZW50X3RyYXAuYy4KLS5TUyAidm9pZCBzZW5kX2Vhc3lfdHJhcCAoaW50IHRyYXAsIGludCBzcGVjaWZpYykiCi0uUFAKLVNlbmRzIGFuIFNOTVB2MSB0cmFwIChvciB0aGUgU05NUHYyIGVxdWl2YWxlbnQpIHRvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyZWQgdHJhcCBkZXN0aW5hdGlvbnMgKG9yICdzaW5rcycpLCB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzIGZvciB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUgYW5kIHNwZWNpZmljIHRyYXAgdmFsdWUuIFRoaXMgZnVuY3Rpb24gZXZlbnR1YWxseSBjYWxscyBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzLiBJZiB0aGUgdHJhcCB0eXBlIGlzIG5vdCBzZXQgdG8gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQyB0aGUgZW50ZXJwcmlzZSBhbmQgZW50ZXJwcmlzZV9sZW5ndGggcGFyYW1hdGVyIGlzIHNldCB0byB0aGUgcHJlIGRlZmluZWQgTkVUU05NUF9TWVNURU1fTUlCIG9pZCBhbmQgbGVuZ3RoIHJlc3BlY3RpdmVseS4gSWYgdGhlIHRyYXAgdHlwZSBpcyBzZXQgdG8gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQyB0aGUgZW50ZXJwcmlzZSBhbmQgZW50ZXJwcmlzZV9sZW5ndGggcGFyYW1ldGVycyBhcmUgc2V0IHRvIHRoZSBwcmUtZGVmaW5lZCBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgb2lkIGFuZCBsZW5ndGggcmVzcGVjdGl2ZWx5LgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXRyYXBcZlAgaXMgdGhlIGdlbmVyaWMgdHJhcCB0eXBlLgotLmJyCi1cZklzcGVjaWZpY1xmUCBpcyB0aGUgc3BlY2lmaWMgdHJhcCB2YWx1ZS4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1zZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIAotLlBQCi1cZkJzZW5kX3YydHJhcFxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk3OCBvZiBmaWxlIGFnZW50X3RyYXAuYy4KLS5TUyAidm9pZCBzZW5kX3YydHJhcCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFycykiCi0uUFAKLVVzZXMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcCwgd2hpY2ggaXMgc2VudCB0byBTTk1QdjItY2FwYWJsZSBzaW5rcyBvbiB0aGUgY29uZmlndXJlZCBsaXN0LiBBbiBlcXVpdmFsZW50IElORk9STSBpcyBzZW50IHRvIHRoZSBjb25maWd1cmVkIGxpc3Qgb2YgaW5mb3JtIHNpbmtzLiBTaW5rcyB0aGF0IGNhbiBvbmx5IGhhbmRsZSBTTk1QdjEgdHJhcHMgYXJlIHNraXBwZWQuCi0uUFAKLVRoaXMgZnVuY3Rpb24gZXZlbnR1YWxseSBjYWxscyBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzLiBJZiB0aGUgdHJhcCB0eXBlIGlzIG5vdCBzZXQgdG8gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQyB0aGUgZW50ZXJwcmlzZSBhbmQgZW50ZXJwcmlzZV9sZW5ndGggcGFyYW1hdGVyIGlzIHNldCB0byB0aGUgcHJlIGRlZmluZWQgTkVUU05NUF9TWVNURU1fTUlCIG9pZCBhbmQgbGVuZ3RoIHJlc3BlY3RpdmVseS4gSWYgdGhlIHRyYXAgdHlwZSBpcyBzZXQgdG8gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQyB0aGUgZW50ZXJwcmlzZSBhbmQgZW50ZXJwcmlzZV9sZW5ndGggcGFyYW1ldGVycyBhcmUgc2V0IHRvIHRoZSBwcmUtZGVmaW5lZCBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgb2lkIGFuZCBsZW5ndGggcmVzcGVjdGl2ZWx5LgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXZhcnNcZlAgaXMgdXNlZCB0byBzdXBwbHkgbGlzdCBvZiBcZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNlbmRfZWFzeV90cmFwXGZQIAotLlBQCi1zZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJub3RpZmljYXRpb24uY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMDcgb2YgZmlsZSBhZ2VudF90cmFwLmMuCi0uU0ggIlZhcmlhYmxlIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIm9pZCBzbm1wdHJhcGVudGVycHJpc2Vfb2lkW10iXGZCSW5pdGlhbCB2YWx1ZTpcZlAKLS5QUAotLm5mCi0KLSAgICB7IFNOTVBWMl9UUkFQX09CSlNfUFJFRklYLCAzLCAwIH0KLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTkgb2YgZmlsZSBhZ2VudF90cmFwLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMyBiL21hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MmQ1YjAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMworKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0uVEggImFzbjEgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWFzbjEgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBcLSAKLS5QUAotTm90ZSBvbi4gIAotCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJOVUxMXGZQICAgMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQklOVDMyX01BWFxmUCAgIDIxNDc0ODM2NDciCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJJTlQzMl9NSU5cZlAgICAoMCAtIElOVDMyX01BWCAtIDEpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0hFQ0tfT1ZFUkZMT1dfU1xmUCh4LCB5KSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNIRUNLX09WRVJGTE9XX1VcZlAoeCwgeSkiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fY2hlY2tfcGFja2V0XGZQICh1X2NoYXIgKnBrdCwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX2ludFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV91bnNpZ25lZF9pbnRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIHVfbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9pbnRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF91bnNpZ25lZF9pbnRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9sb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX3N0cmluZ1xmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgdV9jaGFyICpzdHIsIHNpemVfdCAqc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfc3RyaW5nXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqc3RyLCBzaXplX3Qgc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfaGVhZGVyXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2Vfc2VxdWVuY2VcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIHVfY2hhciBleHBlY3RlZF90eXBlLCBjb25zdCBjaGFyICplc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfaGVhZGVyXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9zZXF1ZW5jZVxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfbGVuZ3RoXGZQICh1X2NoYXIgKmRhdGEsIHVfbG9uZyAqbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfbGVuZ3RoXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX29iamlkXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCBvaWQgKm9iamlkLCBzaXplX3QgKm9iamlkbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfb2JqaWRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfbnVsbFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX251bGxcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX2JpdHN0cmluZ1xmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgdV9jaGFyICpzdHIsIHNpemVfdCAqc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfYml0c3RyaW5nXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqc3RyLCBzaXplX3Qgc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfdW5zaWduZWRfaW50NjRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIHN0cnVjdCBcZkJjb3VudGVyNjRcZlAgKmNwLCBzaXplX3QgY291bnRlcnNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCBzdHJ1Y3QgXGZCY291bnRlcjY0XGZQICpjcCwgc2l6ZV90IGNvdW50ZXJzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX2xlbmd0aFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9oZWFkZXJcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX2ludFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IGxvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX3N0cmluZ1xmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqc3RyLCBzaXplX3Qgc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfc2VxdWVuY2VcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX29iamlkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX251bGxcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX2JpdHN0cmluZ1xmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqc3RyLCBzaXplX3Qgc3RybGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0XGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3Qgc3RydWN0IFxmQmNvdW50ZXI2NFxmUCAqY3AsIHNpemVfdCBjb3VudGVyc2l6ZSkiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Ob3RlIG9uLiAKLQotUmUtYWxsb2NhdGluZyByZXZlcnNlIEFTTi4xIGVuY29kZXIgZnVuY3Rpb25zLiBTeW5vcHNpczoKLS5QUAotLlBQCi0ubmYKLSB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIqKW1hbGxvYygxMDApOwotIHVfY2hhciB0eXBlID0gKEFTTl9VTklWRVJTQUwgfCBBU05fUFJJTUlUSVZFIHwgQVNOX0lOVEVHRVIpOwotIHNpemVfdCBidWZfbGVuID0gMTAwLCBvZmZzZXQgPSAwOwotIGxvbmcgZGF0YSA9IDEyMzQ1OwotIGludCBhbGxvd19yZWFsbG9jID0gMTsKLSAKLSBpZiAoYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmYnVmLCAmYnVmX2xlbiwgJm9mZnNldCwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmZGF0YSwgc2l6ZW9mKGxvbmcpKSA9PSAwKSB7Ci0gICAgIGVycm9yOwotIH0KLS5maQotLlBQCi0uUFAKLU5PVEUgV0VMTDogYWZ0ZXIgY2FsbGluZyBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGggYWxsb3dfcmVhbGxvYyBub24temVybywgYnVmIG1pZ2h0IGhhdmUgbW92ZWQsIGJ1Zl9sZW4gbWlnaHQgaGF2ZSBncm93biBhbmQgb2Zmc2V0IHdpbGwgaGF2ZSBpbmNyZWFzZWQgYnkgdGhlIHNpemUgb2YgdGhlIGVuY29kZWQgZGF0YS4gWW91IHNob3VsZCAqKk5FVkVSKiogZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKLS5QUAotLlBQCi0ubmYKLSB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKiltYWxsb2MoMTAwKSwgKnB0cjsKLSB1X2NoYXIgdHlwZSA9IChBU05fVU5JVkVSU0FMIHwgQVNOX1BSSU1JVElWRSB8IEFTTl9JTlRFR0VSKTsKLSBzaXplX3QgYnVmX2xlbiA9IDEwMCwgb2Zmc2V0ID0gMDsKLSBsb25nIGRhdGExID0gMTIzNCwgZGF0YTIgPSA1Njc4OwotIGludCByYyA9IDAsIGFsbG93X3JlYWxsb2MgPSAxOwotIAotIHJjICA9IGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJmJ1ZiwgJmJ1Zl9sZW4sICZvZmZzZXQsIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZkYXRhMSwgc2l6ZW9mKGxvbmcpKTsKLSBwdHIgPSBidWZbYnVmX2xlbiAtIG9mZnNldF07ICAgLyAqIHBvaW50cyBhdCBlbmNvZGluZyBvZiBkYXRhMSAqIC8KLSBpZiAocmMgPT0gMCkgewotICAgICAgZXJyb3I7Ci0gfQotIHJjICA9IGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJmJ1ZiwgJmJ1Zl9sZW4sICZvZmZzZXQsIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmZGF0YTIsIHNpemVvZihsb25nKSk7Ci0gbWFrZSB1c2Ugb2YgcHRyIGhlcmU7Ci0uZmkKLS5QUAotLlBQCi1wdHIgaXMgKipJTlZBTElEKiogYXQgdGhpcyBwb2ludC4gSW4gZ2VuZXJhbCwgeW91IHNob3VsZCBzdG9yZSB0aGUgb2Zmc2V0IHZhbHVlIGFuZCBjb21wdXRlIHBvaW50ZXJzIHdoZW4geW91IG5lZWQgdGhlbToKLS5QUAotLlBQCi0ubmYKLSB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKiltYWxsb2MoMTAwKSwgKnB0cjsKLSB1X2NoYXIgdHlwZSA9IChBU05fVU5JVkVSU0FMIHwgQVNOX1BSSU1JVElWRSB8IEFTTl9JTlRFR0VSKTsKLSBzaXplX3QgYnVmX2xlbiA9IDEwMCwgb2Zmc2V0ID0gMCwgcHRyX29mZnNldDsKLSBsb25nIGRhdGExID0gMTIzNCwgZGF0YTIgPSA1Njc4OwotIGludCByYyA9IDAsIGFsbG93X3JlYWxsb2MgPSAxOwotIAotIHJjICA9IGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJmJ1ZiwgJmJ1Zl9sZW4sICZvZmZzZXQsIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmZGF0YTEsIHNpemVvZihsb25nKSk7Ci0gcHRyX29mZnNldCA9IG9mZnNldDsKLSBpZiAocmMgPT0gMCkgewotICAgICAgZXJyb3I7Ci0gfQotIHJjICA9IGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJmJ1ZiwgJmJ1Zl9sZW4sICZvZmZzZXQsIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmZGF0YTIsIHNpemVvZihsb25nKSk7Ci0gcHRyID0gYnVmICsgYnVmX2xlbiAtIHB0cl9vZmZzZXQKLSBtYWtlIHVzZSBvZiBwdHIgaGVyZTsKLS5maQotLlBQCi0uUFAKLUhlcmUsIHlvdSBjYW4gc2VlIHRoYXQgcHRyIHdpbGwgYmUgYSB2YWxpZCBwb2ludGVyIGV2ZW4gaWYgdGhlIGJsb2NrIG9mIG1lbW9yeSBoYXMgYmVlbiBtb3ZlZCwgYXMgaXQgbWF5IHdlbGwgaGF2ZSBiZWVuLiBQbGVudHkgb2YgZXhhbXBsZXMgb2YgdXNhZ2UgYWxsIG92ZXIgXGZCYXNuMS5jXGZQLCBcZkJzbm1wX2FwaS5jXGZQLCBcZkJzbm1wdXNtLmNcZlAuCi0uUFAKLVRoZSBvdGhlciB0aGluZyB5b3Ugc2hvdWxkICoqTkVWRVIqKiBkbyBpcyB0byBwYXNzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvbiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHdoZW4gYWxsb3dfcmVhbGxvYyBpcyBub24temVybywgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgYW5kIHlvdXIgbWFjaGluZS9jb21waWxlciBhbGxvd3MgeW91IHRvIGZyZWUgbm9uLWhlYXAgbWVtb3J5LiBUaGVyZSBhcmUgcnVtb3VycyB0aGF0IHN1Y2ggdGhpbmdzIGV4aXN0LCBidXQgbWFueSBjb25zaWRlciB0aGVtIG5vIG1vcmUgdGhhbiB0aGUgd2lsZCB0YWxlcyBvZiBhIGZvb2wuCi0uUFAKLU9mIGNvdXJzZSwgeW91IGNhbiBwYXNzIGFsbG93X3JlYWxsb2MgYXMgemVybywgdG8gaW5kaWNhdGUgdGhhdCB5b3UgZG8gbm90IHdpc2ggdGhlIHBhY2tldCBidWZmZXIgdG8gYmUgcmVhbGxvY2F0ZWQgZm9yIHNvbWUgcmVhc29uOyBwZXJoYXBzIGJlY2F1c2UgaXQgaXMgb24gdGhlIHN0YWNrLiBUaGlzIG1heSBiZSB1c2VmdWwgdG8gZW11bGF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb2xkIEFQSToKLS5QUAotLlBQCi0ubmYKLSB1X2NoYXIgbXlfc3RhdGljX2J1ZmZlclsxMDBdLCAqY3AgPSBOVUxMOwotIHNpemVfdCBteV9zdGF0aWNfYnVmZmVyX2xlbiA9IDEwMDsKLSBmbG9hdCBteV9waSA9IChmbG9hdCkyMi8oZmxvYXQpNzsKLSAKLSBjcCA9IGFzbl9yYnVpbGRfZmxvYXQobXlfc3RhdGljX2J1ZmZlciwgJm15X3N0YXRpY19idWZmZXJfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBBU05fT1BBUVVFX0ZMT0FULCAmbXlfcGksIHNpemVvZihmbG9hdCkpOwotIGlmIChjcCA9PSBOVUxMKSB7Ci0gZXJyb3I7Ci0gfQotLmZpCi0uUFAKLS5QUAotSVMgRVFVSVZBTEVOVCBUTzoKLS5QUAotLlBQCi0ubmYKLSB1X2NoYXIgbXlfc3RhdGljX2J1ZmZlclsxMDBdOwotIHNpemVfdCBteV9zdGF0aWNfYnVmZmVyX2xlbiA9IDEwMCwgbXlfb2Zmc2V0ID0gMDsKLSBmbG9hdCBteV9waSA9IChmbG9hdCkyMi8oZmxvYXQpNzsKLSBpbnQgcmMgPSAwOwotIAotIHJjID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2Zsb2F0KCZteV9zdGF0aWNfYnVmZmVyLCAmbXlfc3RhdGljX2J1ZmZlcl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X29mZnNldCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT1BBUVVFX0ZMT0FULCAmbXlfcGksIHNpemVvZihmbG9hdCkpOwotIGlmIChyYyA9PSAwKSB7Ci0gICBlcnJvcjsKLSB9Ci0uZmkKLS5QUAotIAotLlNIICJEZWZpbmUgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiI2RlZmluZSBDSEVDS19PVkVSRkxPV19TKHgsIHkpIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh4ID4gSU5UMzJfTUFYKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBERUJVR01TRygoJ2FzbicsJ3RydW5jYXRpbmcgc2lnbmVkIHZhbHVlICVsZCB0byAzMiBiaXRzICglZClcbicsKGxvbmcpKHgpLHkpKTsgXAotICAgICAgICAgICAgeCAmPSAweGZmZmZmZmZmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgaWYgKHggPCBJTlQzMl9NSU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgREVCVUdNU0coKCdhc24nLCd0cnVuY2F0aW5nIHNpZ25lZCB2YWx1ZSAlbGQgdG8gMzIgYml0cyAoJWQpXG4nLChsb25nKSh4KSx5KSk7IFwKLSAgICAgICAgICAgIHggPSAwIC0gKHggJiAweGZmZmZmZmZmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIxNCBvZiBmaWxlIGFzbjEuYy4KLS5TUyAiI2RlZmluZSBDSEVDS19PVkVSRkxPV19VKHgsIHkpIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh4ID4gVUlOVDMyX01BWCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB4ICY9IDB4ZmZmZmZmZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBERUJVR01TRygoJ2FzbicsJ3RydW5jYXRpbmcgdW5zaWduZWQgdmFsdWUgdG8gMzIgYml0cyAoJWQpXG4nLHkpKTsgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI0IG9mIGZpbGUgYXNuMS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMyBiL21hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4NzRiYi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0uVEggImJhYnlfc3RlcHMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1iYWJ5X3N0ZXBzIFwtIAotLlBQCi1DYWxscyB5b3VyIGhhbmRsZXIgaW4gYmFieV9zdGVwcyBmb3Igc2V0IHByb2Nlc3NpbmcuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQmJhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyOiBjYWxscyBpbmRpdmlkdWFsIGFjY2VzcyBtZXRob2RzIGJhc2VkIG9uIGJhYnlfc3RlcCBtb2RlLlxmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldFxmUCAodV9sb25nIG1vZGVzKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgYmFieV9zdGVwcyBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfaW5pdFxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIGJhYnlfc3RlcHMgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYmFieV9zdGVwcyBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ2FsbHMgeW91ciBoYW5kbGVyIGluIGJhYnlfc3RlcHMgZm9yIHNldCBwcm9jZXNzaW5nLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0ICh1X2xvbmcgbW9kZXMpIgotLlBQCi1yZXR1cm5zIGEgYmFieV9zdGVwcyBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU4IG9mIGZpbGUgYmFieV9zdGVwcy5jLgotLlNTICJ2b2lkIG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2luaXQgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgYmFieV9zdGVwcyBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBiYWJ5X3N0ZXBzIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzE5IG9mIGZpbGUgYmFieV9zdGVwcy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zIGIvbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMjgyMjAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0uVEggImJ1bGtfdG9fbmV4dCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWJ1bGtfdG9fbmV4dCBcLSAKLS5QUAotQ29udmVydCBHRVRCVUxLIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X2J1bGtfdG9fbmV4dF9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgYnVsa190b19uZXh0IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2J1bGtfdG9fbmV4dF9maXhfcmVxdWVzdHNcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJdGFrZXMgYW5zd2VyZWQgcmVxdWVzdHMgYW5kIGRlY3JlbWVudHMgdGhlIHJlcGVhdCBjb3VudCBhbmQgdXBkYXRlcyB0aGUgcmVxdWVzdHMgdG8gdGhlIG5leHQgdG8tZG8gdmFyYmluZCBpbiB0aGUgbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2J1bGtfdG9fbmV4dF9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBidWxrX3RvX25leHQgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYnVsa190b19uZXh0IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Db252ZXJ0IEdFVEJVTEsgcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gCi0KLVRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIGNvbnZlcnQgYSBHRVRCVUxLIHJlcXVlc3QgdG8gYSBHRVRORVhUIHJlcXVlc3QuIEl0IGlzIGluc2VydGVkIGludG8gaGFuZGxlciBjaGFpbnMgd2hlcmUgdGhlIGhhbmRsZXIgaGFzIG5vdCBzZXQgdGhlIEhBTkRMRVJfQ0FOX0dFVEJVTEsgZmxhZy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQgbmV0c25tcF9idWxrX3RvX25leHRfZml4X3JlcXVlc3RzIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotdGFrZXMgYW5zd2VyZWQgcmVxdWVzdHMgYW5kIGRlY3JlbWVudHMgdGhlIHJlcGVhdCBjb3VudCBhbmQgdXBkYXRlcyB0aGUgcmVxdWVzdHMgdG8gdGhlIG5leHQgdG8tZG8gdmFyYmluZCBpbiB0aGUgbGlzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyIG9mIGZpbGUgYnVsa190b19uZXh0LmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X2J1bGtfdG9fbmV4dF9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3IG9mIGZpbGUgYnVsa190b19uZXh0LmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgYnVsa190b19uZXh0IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzOSBvZiBmaWxlIGJ1bGtfdG9fbmV4dC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMyBiL21hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzYmI4MS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLlRIICJjYWNoZV9oYW5kbGVyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotY2FjaGVfaGFuZGxlciBcLSAKLS5QUAotTWFpbnRhaW5zIGEgY2FjaGUgb2YgZGF0YSBmb3IgdXNlIGJ5IGxvd2VyIGxldmVsIGhhbmRsZXJzLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2NhY2hlX2dldF9oZWFkXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklnZXQgY2FjaGUgaGVhZCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2NhY2hlX2ZpbmRfYnlfb2lkXGZQIChvaWQgKnJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJZmluZCBleGlzdGluZyBjYWNoZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2NhY2hlX2NyZWF0ZVxmUCAoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKmxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqZnJlZV9ob29rLCBvaWQgKnJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGNhY2hlIFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfY2FjaGVfdGltZXJfc3RhcnRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklzdGFydHMgdGhlIHJlY3VycmluZyBjYWNoZV9sb2FkIGNhbGxiYWNrIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NhY2hlX3RpbWVyX3N0b3BcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklzdG9wcyB0aGUgcmVjdXJyaW5nIGNhY2hlX2xvYWQgY2FsbGJhY2sgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyXGZQIChpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICpmcmVlX2hvb2ssIG9pZCAqcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWNoZV9oYW5kbGVyX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICpsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKmZyZWVfaG9vaykiCi0uYnIKLS5SSSAiXGZJZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSBjaGFyICogXGZCX2J1aWxkX2NhY2hlX25hbWVcZlAgKGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jYWNoZV9yZXFpbmZvX2luc2VydFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUsIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklJbnNlcnQgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfY2FjaGVfcmVxaW5mb19leHRyYWN0XGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlXGZQICogXGZCbmV0c25tcF9leHRyYWN0X2NhY2hlX2luZm9cZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvKSIKLS5icgotLlJJICJcZklFeHRyYWN0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhY2hlX2NoZWNrX2V4cGlyZWRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklDaGVjayBpZiB0aGUgY2FjaGUgdGltZW91dCBoYXMgcGFzc2VkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklSZWxvYWQgdGhlIGNhY2hlIGlmIHJlcXVpcmVkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaXNfY2FjaGVfdmFsaWRcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvKSIKLS5icgotLlJJICJcZklJcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGEgZ2l2ZW4gcmVxdWVzdD8gZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhY2hlX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklJbXBsZW1lbnRzIHRoZSBjYWNoZSBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVsZWFzZV9jYWNoZWRfcmVzb3VyY2VzXGZQICh1bnNpZ25lZCBpbnQgcmVnTm8sIHZvaWQgKmNsaWVudGFyZ3MpIgotLmJyCi0uUkkgIlxmSXJ1biByZWd1bGFybHkgdG8gYXV0b21hdGljYWxseSByZWxlYXNlIGNhY2hlZCByZXNvdXJjZXMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1NYWludGFpbnMgYSBjYWNoZSBvZiBkYXRhIGZvciB1c2UgYnkgbG93ZXIgbGV2ZWwgaGFuZGxlcnMuIAotCi1UaGlzIGhlbHBlciBjaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIGRhdGEgaGFzIGJlZW4gbG9hZGVkICdyZWNlbnRseScgKGFjY29yZGluZyB0byB0aGUgdGltZW91dCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNhY2hlKSBhbmQgY2FsbHMgdGhlIHJlZ2lzdGVyZWQgJ2xvYWRfY2FjaGUnIHJvdXRpbmUgaWYgbmVjZXNzYXJ5LiBUaGUgbG93ZXIgaGFuZGxlcnMgY2FuIHRoZW4gd29yayB3aXRoIHRoaXMgbG9jYWwgY2FjaGVkIGRhdGEuCi0uUFAKLUEgdGltZW91dCB2YWx1ZSBvZiAtMSB3aWxsIGNhdXNlIFxmQm5ldHNubXBfY2FjaGVfY2hlY2tfZXhwaXJlZCgpXGZQIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZSwgYW5kIHRodXMgdGhlIGNhY2hlIHdpbGwgYmUgcmVsb2FkZWQgZm9yIGV2ZXJ5IHJlcXVlc3QuCi0uUFAKLVRvIG1pbmltemUgcmVzb3VyY2UgdXNlIGJ5IHRoZSBhZ2VudCwgYSBwZXJpb2RpYyBjYWxsYmFjayBjaGVja3MgZm9yIGV4cGlyZWQgY2FjaGVzLCBhbmQgd2lsbCBjYWxsIHRoZSBmcmVlX2NhY2hlIGZ1bmN0aW9uIGZvciBhbnkgZXhwaXJlZCBjYWNoZS4KLS5QUAotVGhlIGxvYWRfY2FjaGUgcm91dGUgc2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGUgY2FjaGUgd2FzIG5vdCBzdWNjZXNzZnVsbHkgbG9hZGVkLiAwIG9yIGFueSBwb3NpdGl2ZSBudW1iZXIgaW5kaWNhdGVzIHN1Y2Nlc3NzLgotLlBQCi1TZXZlcmFsIGZsYWdzIGNhbiBiZSBzZXQgdG8gYWZmZWN0IHRoZSBvcGVyYXRpb25zIG9uIHRoZSBjYWNoZS4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUIGlzIHNldCwgdGhlIGZyZWVfY2FjaGUgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCBhZnRlciBhIHNldCByZXF1ZXN0IGhhcyBwcm9jZXNzZWQuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbG93ZXIgbWliIGhhbmRsZXIgdXNpbmcgdGhlIGNhY2hlIGhhcyBtYWludGFpbmVkIGNhY2hlIGNvbnNpc3RlbmN5LgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRCBpcyBzZXQsIHRoZSBmcmVlX2NhY2hlIG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsb2FkX2NhY2hlIG1ldGhvZCBpcyBjYWxsZWQuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbG9hZF9jYWNoZSByb3V0aW5lIHdpbGwgcHJvcGVybHkgZGVhbCB3aXRoIGJlaW5nIGNhbGxlZCB3aXRoIGEgdmFsaWQgY2FjaGUuCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQgaXMgc2V0LCB0aGUgZnJlZV9jYWNoZSBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGNhY2hlIGV4cGlyZXMuIFRoZSBleHBpcmVkIGZsYWcgd2lsbCBiZSBzZXQsIGJ1dCB0aGUgdmFsaWQgZmxhZyB3aWxsIG5vdCBiZSBjbGVhcmVkLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxvYWRfY2FjaGUgcm91dGluZSB3aWxsIHByb3Blcmx5IGRlYWwgd2l0aCBiZWluZyBjYWxsZWQgd2l0aCBhIHZhbGlkIGNhY2hlLgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX1BSRUxPQUQgaXMgc2V0IHdoZW4gYSB0aGUgY2FjaGUgaGFuZGxlciBpcyBjcmVhdGVkLCB0aGUgY2FjaGUgbG9hZCByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5LgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFIGlzIHNldCwgdGhlIHBlcmlvZGljIGNhbGxiYWNrIHRoYXQgY2hlY2tzIGZvciBleHBpcmVkIGNhY2hlcyB3aWxsIHNraXAgdGhlIGNhY2hlLiBUaGUgY2FjaGUgd2lsbCBvbmx5IGJlIGNoZWNrZWQgZm9yIGV4cGlyYXRpb24gd2hlbiBhIHJlcXVlc3QgdHJpZ2dlcnMgdGhlIGNhY2hlIGhhbmRsZXIuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBjYWNoZSBoYXMgaXQncyBvd24gcGVyaW9kaWMgY2FsbGJhY2sgdG8ga2VlcCB0aGUgY2FjaGUgZnJlc2guCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQgaXMgc2V0LCBhIHRpbWVyIHdpbGwgYmUgc2V0IHVwIHRvIHJlbG9hZCB0aGUgY2FjaGUgd2hlbiBpdCBleHBpcmVzLiBUaGlzIGlzIHVzZWZ1bCBmb3Iga2VlcGluZyB0aGUgY2FjaGUgZnJlc2gsIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgaW5jb21pbmcgc25tcCByZXF1ZXN0cy4KLS5QUAotSGVyZSBhcmUgc29tZSBzdWdnZXN0aW9ucyBmb3Igc29tZSBjb21tb24gc2l0dWF0aW9ucy4KLS5QUAotQ2FjaGVkIEZpbGU6IElmIHlvdXIgdGFibGUgaXMgYmFzZWQgb24gYSBmaWxlIHRoYXQgbWF5IHBlcmlvZGljYWxseSBjaGFuZ2UsIHlvdSBjYW4gdGVzdCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgdG8gc2VlIGlmIHRoZSBmaWxlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNhY2hlIGxvYWQuIFRvIGdldCB0aGUgY2FjaGUgaGVscGVyIHRvIGNhbGwgdGhlIGxvYWQgZnVuY3Rpb24gZm9yIGV2ZXJ5IHJlcXVlc3QsIHNldCB0aGUgdGltZW91dCB0byAtMSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgY2FjaGUgdG8gYWx3YXlzIHJlcG9ydCB0aGF0IGl0IGlzIGV4cGlyZWQuIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIHByZXZlbnQgdGhlIGFnZW50IGZyb20gZmx1c2hpbmcgdGhlIGNhY2hlIHdoZW4gaXQgaGFzIGV4cGlyZWQsIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIGZsdXNoIGl0IG1hbnVhbGx5IGlmIHlvdSBkZXRlY3QgdGhhdCB0aGUgZmlsZSBoYXMgY2hhbmdlZC4gVG8gYWNjb21wbGlzaCB0aGlzLCBzZXQgdGhlIGZvbGxvd2luZyBmbGFnczoKLS5QUAotTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfRVhQSVJFRCBORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFCi0uUFAKLUNvbnN0YW50IChwZXJpb2RpYykgcmVsb2FkOiBJZiB5b3Ugd2FudCB0aGUgY2FjaGUga2VwdCB1cCB0byBkYXRlIHJlZ3VsYXJseSwgZXZlbiBpZiBubyByZXF1ZXN0cyBmb3IgdGhlIHRhYmxlIGFyZSByZWNlaXZlZCwgeW91IGNhbiBoYXZlIHlvdXIgY2FjaGUgbG9hZCByb3V0aW5lIGNhbGxlZCBwZXJpb2RpY2FsbHkuIFRoaXMgaXMgdmVyeSB1c2VmdWwgaWYgeW91IG5lZWQgdG8gbW9uaXRvciB0aGUgZGF0YSBmb3IgY2hhbmdlcyAoZWcgYSBcZklMYXN0Q2hhbmdlZFxmUCBvYmplY3QpLiBZb3Ugd2lsbCBuZWVkIHRvIHByZXZlbnQgdGhlIGFnZW50IGZyb20gZmx1c2hpbmcgdGhlIGNhY2hlIHdoZW4gaXQgZXhwaXJlcy4gU2V0IHRoZSBjYWNoZSB0aW1lb3V0IHRvIHRoZSBmcmVxdWVuY3ksIGluIHNlY29uZHMsIHRoYXQgeW91IHdpc2ggdG8gcmVsb2FkIHlvdXIgY2FjaGUsIGFuZCBzZXQgdGhlIGZvbGxvd2luZyBmbGFnczoKLS5QUAotTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfRVhQSVJFRCBORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQgCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2NhY2hlX2NoZWNrX2FuZF9yZWxvYWQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLVJlbG9hZCB0aGUgY2FjaGUgaWYgcmVxdWlyZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzg1IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9jYWNoZV9jaGVja19leHBpcmVkIChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1DaGVjayBpZiB0aGUgY2FjaGUgdGltZW91dCBoYXMgcGFzc2VkLiBTZXRzIGFuZCByZXR1cm4gdGhlIGV4cGlyZWQgZmxhZy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzAgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfY2FjaGVcZlAqIG5ldHNubXBfY2FjaGVfY3JlYXRlIChpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5QUAotcmV0dXJucyBhIGNhY2hlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM2IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX2NhY2hlXGZQKiBuZXRzbm1wX2NhY2hlX2ZpbmRfYnlfb2lkIChvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLlBQCi1maW5kIGV4aXN0aW5nIGNhY2hlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTIwIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX2NhY2hlXGZQKiBuZXRzbm1wX2NhY2hlX2dldF9oZWFkICh2b2lkKSIKLS5QUAotZ2V0IGNhY2hlIGhlYWQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTIgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLXJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0NyBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTUgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX2NhY2hlX2hlbHBlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLUltcGxlbWVudHMgdGhlIGNhY2hlIGhhbmRsZXIuIAotLlBQCi1uZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJwotLlBQCi1uZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJwotLlBQCi1uZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyMCBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfY2FjaGVfaXNfdmFsaWQgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1JcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGEgZ2l2ZW4gcmVxdWVzdD8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MDIgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfY2FjaGVcZlAqIG5ldHNubXBfY2FjaGVfcmVxaW5mb19leHRyYWN0IChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTAgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgInZvaWQgbmV0c25tcF9jYWNoZV9yZXFpbmZvX2luc2VydCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotSW5zZXJ0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzMyBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAidW5zaWduZWQgaW50IG5ldHNubXBfY2FjaGVfdGltZXJfc3RhcnQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLXN0YXJ0cyB0aGUgcmVjdXJyaW5nIGNhY2hlX2xvYWQgY2FsbGJhY2sgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTEgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgInZvaWQgbmV0c25tcF9jYWNoZV90aW1lcl9zdG9wIChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1zdG9wcyB0aGUgcmVjdXJyaW5nIGNhY2hlX2xvYWQgY2FsbGJhY2sgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjYgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfY2FjaGVcZlAqIG5ldHNubXBfZXh0cmFjdF9jYWNoZV9pbmZvIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8pIgotLlBQCi1FeHRyYWN0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2MiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlciAoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2ssIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uUFAKLXJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfaXNfY2FjaGVfdmFsaWQgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbykiCi0uUFAKLUlzIHRoZSBjYWNoZSB2YWxpZCBmb3IgYSBnaXZlbiByZXF1ZXN0PyBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuIGZvciBiYWNrd2FyZHMgY29tcGF0Ci0uUFAKLVxmQm5ldHNubXBfY2FjaGVfaXNfdmFsaWQoKVxmUCBpcyBwcmVmZXJyZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDEzIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9jYWNoZV9oYW5kbGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2spIgotLlBQCi1mdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgY2FjaGUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzA4IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJ2b2lkIHJlbGVhc2VfY2FjaGVkX3Jlc291cmNlcyAodW5zaWduZWQgaW50IHJlZ05vLCB2b2lkICogY2xpZW50YXJncykiCi0uUFAKLXJ1biByZWd1bGFybHkgdG8gYXV0b21hdGljYWxseSByZWxlYXNlIGNhY2hlZCByZXNvdXJjZXMuIHh4eCAtIG1ldGhvZCB0byBwcmV2ZW50IGNhY2hlIGZyb20gZXhwaXJpbmcgd2hpbGUgYSByZXF1ZXN0IGlzIGJlaW5nIHByb2Nlc3NlZCAoZS5nLiBkZWxlZ2F0ZWQgcmVxdWVzdCkuIHByb3Bvc2FsOiBzZXQgYSBmbGFnLCB3aGljaCB3b3VsZCBiZSBjbGVhcmVkIHdoZW4gcmVxdWVzdCBmaW5pc2hlZCAod2hpY2ggY291bGQgYmUgYWNvbXBsaXNoZWQgYnkgYSBkdW1teSBkYXRhIGxpc3QgaXRlbSBpbiBhZ2VudCByZXEgaW5mbyAmIGN1c3RvbSBmcmVlIGZ1bmN0aW9uKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1ODEgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfY2FsbGJhY2suMyBiL21hbi9uZXRzbm1wX2NhbGxiYWNrLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZWVjODkuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfY2FsbGJhY2suMworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0uVEggIkEgZ2VuZXJpYyBjYWxsYmFjayBtZWNoYW5pc20iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1BIGdlbmVyaWMgY2FsbGJhY2sgbWVjaGFuaXNtIFwtIAotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0FMTEJBQ0tfTkFNRV9MT0dHSU5HXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkxPQ0tfUEVSX0NBTExCQUNLX1NVQklEXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNBTExCQUNLX0xPQ0tcZlAobWFqLCBtaW4pICAgKytfbG9ja3NbbWFqXVttaW5dIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0FMTEJBQ0tfVU5MT0NLXGZQKG1haiwgbWluKSAgIC0tX2xvY2tzW21hal1bbWluXSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNBTExCQUNLX0xPQ0tfQ09VTlRcZlAobWFqLCBtaW4pICAgX2xvY2tzW21hal1bbWluXSIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludCBcZkJfY2FsbGJhY2tfbG9ja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIGNvbnN0IGNoYXIgKndhcm4sIGludCBhc3NlcnQpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQl9jYWxsYmFja191bmxvY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfY2FsbGJhY2tzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9yZWdpc3Rlcl9jYWxsYmFja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqbmV3X2NhbGxiYWNrLCB2b2lkICphcmcpIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgZ2VuZXJpYyBjYWxsYmFjayBmdW5jdGlvbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9jYWxsYmFja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqbmV3X2NhbGxiYWNrLCB2b2lkICphcmcsIGludCBwcmlvcml0eSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2FsbF9jYWxsYmFja3NcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICpjYWxsZXJfYXJnKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIGNhbGxiYWNrIG9mIHR5cGUgbWFqb3IgYW5kIG1pbm9yLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2NvdW50X2NhbGxiYWNrc1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2NhbGxiYWNrX2F2YWlsYWJsZVxmUCAoaW50IG1ham9yLCBpbnQgbWlub3IpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKnRhcmdldCwgdm9pZCAqYXJnLCBpbnQgbWF0Y2hhcmdzKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIGEgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIGdpdmVuIGEgbWFqb3IgYW5kIG1pbm9yIHR5cGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FsbGJhY2tfY2xlYXJfY2xpZW50X2FyZ1xmUCAodm9pZCAqcHRyLCBpbnQgaSwgaW50IGopIgotLmJyCi0uUkkgIlxmSWZpbmQgYW5kIGNsZWFyIGNsaWVudCBhcmdzIHRoYXQgbWF0Y2ggcHRyIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl9jYWxsYmFja1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNubXBfZ2VuX2NhbGxiYWNrXGZQICogXGZCc25tcF9jYWxsYmFja19saXN0XGZQIChpbnQgbWFqb3IsIGludCBtaW5vcikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfY2FsbGJhY2tfY2xlYXJfY2xpZW50X2FyZyAodm9pZCAqIHB0ciwgaW50IGksIGludCBqKSIKLS5QUAotZmluZCBhbmQgY2xlYXIgY2xpZW50IGFyZ3MgdGhhdCBtYXRjaCBwdHIgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklwdHJcZlAgcG9pbnRlciB0byBzZWFyY2ggZm9yIAotLmJyCi1cZklpXGZQIGNhbGxiYWNrIGlkIHRvIHN0YXJ0IGF0IAotLmJyCi1cZklqXGZQIGNhbGxiYWNrIHN1YmlkIHRvIHN0YXJ0IGF0IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDc3IG9mIGZpbGUgY2FsbGJhY2suYy4KLS5TUyAiaW50IHNubXBfY2FsbF9jYWxsYmFja3MgKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICogY2FsbGVyX2FyZykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lzdGVyZWQgY2FsbGJhY2sgb2YgdHlwZSBtYWpvciBhbmQgbWlub3IuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbWFqb3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWFqb3IgdHlwZSB1c2VkCi0uYnIKLVxmSW1pbm9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1pbm9yIHR5cGUgdXNlZAotLmJyCi1cZkljYWxsZXJfYXJnXGZQIGlzIGEgdm9pZCBwb2ludGVyIHdoaWNoIGlzIHNlbnQgaW4gYXMgdGhlIGNhbGxiYWNrJ3Mgc2VydmVyYXJnIHBhcmFtZXRlciwgaWYgbmVlZGVkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBTTk1QRVJSX0dFTkVSUiBpZiBtYWpvciBpcyA+PSBNQVhfQ0FMTEJBQ0tfSURTIG9yIG1pbm9yIGlzID49IE1BWF9DQUxMQkFDS19TVUJJRFMsIG90aGVyd2lzZSBTTk1QRVJSX1NVQ0NFU1MgaXMgcmV0dXJuZWQuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc25tcF9yZWdpc3Rlcl9jYWxsYmFja1xmUCAKLS5QUAotXGZCc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzAxIG9mIGZpbGUgY2FsbGJhY2suYy4KLS5TUyAiaW50IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2sgKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKiBuZXdfY2FsbGJhY2ssIHZvaWQgKiBhcmcpIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGdlbmVyaWMgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBtYWpvciBhbmQgbWlub3IgdmFsdWVzIGFyZSB1c2VkIHRvIHNldCB0aGUgbmV3X2NhbGxiYWNrIGZ1bmN0aW9uIGludG8gYSBnbG9iYWwgc3RhdGljIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IG9mIHR5cGUgc3RydWN0IFxmQnNubXBfZ2VuX2NhbGxiYWNrXGZQLiBUaGUgZnVuY3Rpb24gbWFrZXMgc3VyZSB0byBhcHBlbmQgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rIGxpc3QsIHNubXBfZ2VuX2NhbGxiYWNrLT5uZXh0LgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1ham9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1ham9yIHR5cGUgdXNlZAotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX0xJQlJBUlkKLS5QUAotLlJFCi0uUFAKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTgotLlBQCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbWlub3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWlub3IgdHlwZSB1c2VkCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfUE9TVF9SRUFEX0NPTkZJRwotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19TSFVURE9XTgotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX1BPU1RfUFJFTUlCX1JFQURfQ09ORklHCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfTE9HR0lORwotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX1NFU1NJT05fSU5JVAotLlBQCi0uYnIKLVxmSW5ld19jYWxsYmFja1xmUCBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyByZWdpc3RlcmVkLgotLmJyCi1cZklhcmdcZlAgd2hlbiBub3QgTlVMTCBpcyBhIHZvaWQgcG9pbnRlciB1c2VkIHdoZW5ldmVyIG5ld19jYWxsYmFjayBmdW5jdGlvbiBpcyBleGVyY2lzZWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIFNOTVBFUlJfR0VORVJSIGlmIG1ham9yIGlzID49IE1BWF9DQUxMQkFDS19JRFMgb3IgbWlub3IgaXMgPj0gTUFYX0NBTExCQUNLX1NVQklEUyBvciBhIFxmQnNubXBfZ2VuX2NhbGxiYWNrXGZQIHBvaW50ZXIgY291bGQgbm90IGJlIGFsbG9jYXRlZCwgb3RoZXJ3aXNlIFNOTVBFUlJfU1VDQ0VTUyBpcyByZXR1cm5lZC4KLS5JUCAiXChidSIgMgotI2RlZmluZSBNQVhfQ0FMTEJBQ0tfSURTIDIKLS5JUCAiXChidSIgMgotI2RlZmluZSBNQVhfQ0FMTEJBQ0tfU1VCSURTIDE2Ci0uUFAKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzbm1wX2NhbGxfY2FsbGJhY2tzXGZQIAotLlBQCi1cZkJzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2tcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzMgb2YgZmlsZSBjYWxsYmFjay5jLgotLlNTICJpbnQgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrIChpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICogdGFyZ2V0LCB2b2lkICogYXJnLCBpbnQgbWF0Y2hhcmdzKSIKLS5QUAotVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyBhIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBnaXZlbiBhIG1ham9yIGFuZCBtaW5vciB0eXBlLiBOb3RlOiBubyBib3VuZCBjaGVja2luZyBvbiBtYWpvciBhbmQgbWlub3IuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbWFqb3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWFqb3IgdHlwZSB1c2VkCi0uYnIKLVxmSW1pbm9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1pbm9yIHR5cGUgdXNlZAotLmJyCi1cZkl0YXJnZXRcZlAgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1bnJlZ2lzdGVyZWQuCi0uYnIKLVxmSWFyZ1xmUCBpcyBhIHZvaWQgcG9pbnRlciB1c2VkIGZvciBjb21wYXJpc29uIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sncyBzY19jbGllbnRfYXJnIFxmQnZhcmlhYmxlXGZQLgotLmJyCi1cZkltYXRjaGFyZ3NcZlAgaXMgYW4gaW50ZWdlciB1c2VkIHRvIGJ5cGFzcyB0aGUgY29tcGFyaXNvbiBvZiBhcmcgYW5kIHRoZSBjYWxsYmFjaydzIHNjX2NsaWVudF9hcmcgXGZCdmFyaWFibGVcZlAgb25seSB3aGVuIG1hdGNoYXJncyBpcyBzZXQgdG8gMC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgdGhhdCB3ZXJlIHVucmVnaXN0ZXJlZC4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrXGZQIAotLlBQCi1cZkJzbm1wX2NhbGxfY2FsbGJhY2tzXGZQIAotLlJFCi0uUFAKLQotLlBQCi1zZXQgY2xlYW51cCBmbGFnPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyMSBvZiBmaWxlIGNhbGxiYWNrLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwOWZjNQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYKQEAgLTAsMCArMSwzNzMgQEAKKy5USCBORVRTTk1QX0NPTkZJR19BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsCityZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlciwKK3JlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIsCit1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLAorcmVnaXN0ZXJfbWliX2hhbmRsZXJzLAordW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzLAorcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLAorcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIsCit1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlciwKK3JlYWRfY29uZmlncywKK3JlYWRfcHJlbWliX2NvbmZpZ3MsCityZWFkX2NvbmZpZ19wcmludF91c2FnZSwKK2NvbmZpZ19wZXJyb3IsCitjb25maWdfcHdhcm4gLSBuZXRzbm1wX2NvbmZpZ19hcGkgZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisuYnIKKy5TUyBDb25maWcgSGFuZGxlcnMKKy5QUAorLkIgc3RydWN0IGNvbmZpZ19saW5lICoKKy5icgorLkJJICIgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoidXNhZ2VMaW5lICIpOyIKKy5QUAorLkIgc3RydWN0IGNvbmZpZ19saW5lICoKKy5icgorLkJJICIgIHJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLCAKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB1c2FnZUxpbmUgIik7IgorLlBQCisuUFAKKy5CIHN0cnVjdCBjb25maWdfbGluZSAqCisuYnIKKy5CSSAiICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLCAKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB1c2FnZUxpbmUgIik7IgorLlBQCisuQkkgInZvaWQgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAiKTsiCisuUFAKKy5cIiBEZWZpbmVkIGluIG1pYi5jLCByYXRoZXIgdGhhbiByZWFkX2NvbmZpZy5jCisuQiAgInZvaWQgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKHZvaWQpOyIKKy5icgorLkIgICJ2b2lkIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyh2b2lkKTsiCisuYnIKKy5TUyBBcHBsaWNhdGlvbiBIYW5kbGVycworLlBQCisuQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgorLmJyCisuQkkgIiAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoidXNhZ2VMaW5lICIpOyIKKy5QUAorLkIgc3RydWN0IGNvbmZpZ19saW5lICoKKy5icgorLkJJICIgIHJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHVzYWdlTGluZSAiKTsiCisuUFAKKy5CSSAidm9pZCB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICIpOyIKKy5icgorLlNTIFJlYWRpbmcgQ29uZmlndXJhdGlvbiBGaWxlcworLlBQCisuQiAidm9pZCByZWFkX3ByZW1pYl9jb25maWdzKHZvaWQpOyIKKy5icgorLkIgInZvaWQgcmVhZF9jb25maWdzKHZvaWQpOyIKKy5icgorLlNTIEhlbHAgU3RyaW5ncyBhbmQgRXJyb3JzCisuUFAKKy5CSSAidm9pZCByZWFkX2NvbmZpZ19wcmludF91c2FnZShjaGFyICoiIGxlYWQgIik7IgorLmJyCisuQkkgInZvaWQgY29uZmlnX3B3YXJuKGNvbnN0IGNoYXIgKiIgc3RyaW5nICIpOyIKKy5icgorLkJJICJ2b2lkIGNvbmZpZ19wZXJyb3IoY29uc3QgY2hhciAqIiBzdHJpbmcgIik7IgorCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbnMgYXJlIGEgZmFpcmx5IGV4dGVuc2libGUgc3lzdGVtIG9mIHBhcnNpbmcgdmFyaW91cworY29uZmlndXJhdGlvbiBmaWxlcyBhdCB0aGUgcnVuIHRpbWUgb2YgYW4gYXBwbGljYXRpb24uICBUaGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBmbG93IGlzIGJyb2tlbiBpbnRvIHRoZSBmb2xsb3dpbmcgcGhhc2VzOgorLlJTIDQKKy5UUCA0CisxLgorUmVnaXN0cmF0aW9uIG9mIGhhbmRsZXJzLgorLlRQCisyLgorUmVhZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgcHJlLU1JQiBwYXJzaW5nIHJlcXVpcmVtZW50cy4KKy5UUAorMy4KK1JlYWRpbmcgYW5kIHBhcnNpbmcgb2YgdGhlIHRleHR1YWwgTUlCIGZpbGVzLgorLlRQCis0LgorUmVhZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLgorLlRQCis1LgorT3B0aW9uYWxseSByZS1yZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGF0IGEgZnV0dXJlIGRhdGUuCisuUkUKKy5QUAorVGhlIGlkZWEgaXMgdGhhdCB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBpcyBhYmxlIHRvIHJlZ2lzdGVyCisuSSBoYW5kbGVycworZm9yIGNlcnRhaW4KKy5JIHRva2Vucworc3BlY2lmaWVkIGluIGNlcnRhaW4gbmFtZWQKKy5JICJjb25maWd1cmF0aW9uIGZpbGVzLiIKK1RoZSAKKy5CIHJlYWRfY29uZmlncygpCitmdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgdG8gbG9vayBmb3IgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMsCittYXRjaCB0aGUgZmlyc3Qgd29yZCBvbiBlYWNoIGxpbmUgYWdhaW5zdCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIHRva2VucworYW5kIHBhc3MgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB0byB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJlZCBoYW5kbGVyLgorLlNIIFJFR0lTVEVSSU5HIEEgSEFORExFUgorLlRQCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCitSZWdpc3RlcnMgYSBjb25maWd1cmF0aW9uIGhhbmRsZXIgcm91dGluZSwgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZAordG8gcHJvY2VzcyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgc3RhcnRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHRva2VuLgorRm9yIGV4YW1wbGU6CisuUFAKKy5SUworLlJTCityZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJleGFtcGxlVG9rZW4iLCBleGFtcGxlX2hhbmRsZXIsIE5VTEwsICJBUkcxIFtBUkcyXSIpOworLlJFCisuUkUKKy5JUAord291bGQgcmVnaXN0ZXIgdGhlCisuQiBleGFtcGxlX2hhbmRsZXIoKQorZnVuY3Rpb24gc28gdGhhdCBpdCB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZmlyc3Qgd29yZCBvZiBhCitsaW5lIGluIHRoZSAKKy5JIHNubXAuY29uZgorY29uZmlndXJhdGlvbiBmaWxlKHMpIG1hdGNoZXMgImV4YW1wbGVUb2tlbiIuCisuYnIKK0NhbGxpbmcgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzIHRvIHByb2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzCitpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgCisuQiByZWFkX2NvbmZpZ3MoKSAKKyhzZWUgYmVsb3cpLgorLlRQCisuQiByZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigpCitTaW1pbGFyIHRvIHRoZQorLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorZnVuY3Rpb24sIGJ1dCB0aGUgcGFyc2VyIHJvdXRpbmUgaXMgZXhwbGljaXRseSBjb25zdHJhaW5lZAordG8gbm90IG1vZGlmeSB0aGUgc3RyaW5nIGJlaW5nIHBhcnNlZC4KKy5UUAorLkIgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpCitTaW1pbGFyIHRvIHRoZQorLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorZnVuY3Rpb24sIGJ1dCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQKK1xmSWJlZm9yZVxmUCB0aGUgdGV4dHVhbCBNSUJzIGFyZSByZWFkIGluLgorVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgdG9rZW5zIHRoYXQgd2lsbCBhZmZlY3QgdGhlIGNvbmZpZ3VyYXRpb24gb2YKK3RoZSBNSUIgcGFyc2VyLCBhbmQgd2lsbCBub3JtYWxseSBvbmx5IGJlIHVzZWQgd2l0aGluIHRoZSBTTk1QIGxpYnJhcnkgaXRzZWxmLgorLlRQCisuQiByZWdpc3Rlcl9taWJfaGFuZGxlcnMoKQorSW5pdGlhbGlzYXRpb24gcm91dGluZSB0byByZWdpc3RlciB0aGUgaW50ZXJuYWwgU05NUCBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gaGFuZGxlcnMuCisuVFAKKy5CIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBjb25maWd1cmF0aW9uIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQKKy5JIGZpbGVQcmVmaXgKK2FuZAorLklSIHRva2VuIC4KKy5UUAorLkIgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCkKK1JlbW92ZXMgYWxsIHJlZ2lzdGVyZWQgY29uZmlndXJhdGlvbiBoYW5kbGVycy4KKworLlNTIFRva2VuIEhhbmRsZXJzCisuUFAKK0hhbmRsZXIgZnVuY3Rpb25zIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgorLlBQCisuUlMKKy5CSSAidm9pZCBoYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gIiwgY2hhciAqIiBsaW5lICIpOyIKKy5icgorb3IKKy5icgorLkJJICJ2b2lkIGhhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAiLCBjb25zdCBjaGFyICoiIGxpbmUgIik7IgorYnIKKyhpZiByZWdpc3RlcmVkIHVzaW5nIFxmSXJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyXGZQKQorLlJFCisuUFAKK1RoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBiZWluZyB0aGUKK3Rva2VuIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gKGkuZS4gdGhlIHRva2VuIHVzZWQKK3doZW4gcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXIpLCBhbmQgdGhlIHNlY29uZAorYmVpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGxpbmUgKGkuZS4gZXZlcnl0aGluZworZm9sbG93aW5nIHRoZSB3aGl0ZSBzcGFjZSBmb2xsb3dpbmcgdGhlIG1hdGNoZWQgdG9rZW4pLgorCisuU1MgRnJlZWluZyBIYW5kbGVycworLlBQCitJZiB0aGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbiBkeW5hbWljYWxseSBhbGxvY2F0ZXMgcmVzb3VyY2VzIHdoZW4KK3Byb2Nlc3NpbmcgYSBjb25maWd1cmF0aW9uIGVudHJ5LCB0aGVuIHRoZXNlIG1heSBuZWVkIHRvIGJlIHJlbGVhc2VkCitiZWZvcmUgcmUtcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KK0lmIHRoZSBmb3VydGggcGFyYW1ldGVyICgKKy5JIHJlbGVhc2VyCispIHBhc3NlZCB0bworLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKK2lzIG5vbi1OVUxMLCB0aGVuIHRoaXMgc3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZQorcmUtcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZyZWUgYW55CityZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uIGFuZCByZXNldCBpdHMgbm90aW9uCitvZiB0aGUgY29uZmlndXJhdGlvbiB0byBpdHMgZGVmYXVsdC4gIFRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uIGNhbgordGhlbiBzYWZlbHkgYmUgY2FsbGVkIGFnYWluLgorTm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIHJlc291cmNlIGZyZWVpbmcgaGFuZGxlci4KKy5icgorTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBoYW5kbGVyIGlzCit1bnJlZ2lzdGVyZWQgaW5kaXZpZHVhbGx5IChidXQgXGZJaXNcZlAgY2FsbGVkIGFzIHBhcnQgb2YKKy5CIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpCispLgorCisuU1MgQXBwbGljYXRpb24gSGFuZGxlcnMKKy5UUAorLkIgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCkKKy5UUAorLkIgcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKQorLlRQCisuQiB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigpCitUaGVzZSBmdW5jdGlvbnMgYXJlIGFuYWxhZ291cyB0byAKKy5CUiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpICIsICIgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpICIgYW5kICIKKy5CIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorYnV0IGRvIG5vdCByZXF1aXJlIHRoZSBmaWxlIHR5cGUgYXJndW1lbnQgKHdoaWNoIGlzIGZpbGxlZCBpbiBieSB0aGUKK2FwcGxpY2F0aW9uKS4gIEl0IGlzIGludGVuZGVkIHRoYXQgTUlCIG1vZHVsZXMgd3JpdHRlbiBmb3IgdGhlIGFnZW50Cit1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIGFsbG93IHRoZSBhZ2VudCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHdoaWNoCitjb25maWd1cmF0aW9uIGZpbGVzIGFyZSByZWFkICh0eXBpY2FsbHkgdGhlCisuSSBzbm1wZC5jb25mCitmaWxlcykuCisuU0ggUkVBRElORyBDT05GSUdVUkFUSU9OIEZJTEVTCisuVFAKKy5CIHJlYWRfcHJlbWliX2NvbmZpZ3MoKQorLlRQCisuQiByZWFkX2NvbmZpZ3MoKQorVGhlc2Ugcm91dGluZXMgcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3VuZCBpbiB0aGUKK2NvbmZpZ3VyYXRpb24gc2VhcmNoIHBhdGggKHNlZSBiZWxvdykuICBGb3IgZWFjaCBlbnRyeSwgdGhlCitoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIHRoYXQgY29uZmlndXJhdGlvbiB0b2tlbiBpcyBjYWxsZWQuCisuUFAKKy5CIHJlYWRfcHJlbWliX2NvbmZpZ3MoKQoraXMgcnVuIGJlZm9yZSB0aGUgTUlCIGZpbGVzIGFyZSByZWFkIGluLCBhbmQgcHJvY2Vzc2VzIHRob3NlCitjb25maWd1cmF0aW9uIHRva2VucyByZWdpc3RlcmVkIHVzaW5nCisuQiByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCkKKyhvcgorLkIgcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKQorKS4KK0FsbCBvdGhlciBlbnRyaWVzIGFyZSBpZ25vcmVkLgorLlBQCisuQiByZWFkX2NvbmZpZ3MoKQoraXMgcnVuIGFmdGVyIHRoZSBNSUIgZmlsZXMgaGF2ZSBiZWVuIHJlYWQgaW4sIGFuZCBwcm9jZXNzZXMgdGhvc2UKK2NvbmZpZ3VyYXRpb24gdG9rZW5zIHJlZ2lzdGVyZWQgdXNpbmcKKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKKyhvcgorLkIgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCkKKykuCitJZiBpdCBlbmNvdW50ZXJzIGEgY29uZmlndXJhdGlvbiB0b2tlbiBmb3Igd2hpY2ggbm8gaGFuZGxlciBoYXMKK2JlZW4gcmVnaXN0ZXJlZCAoZWl0aGVyIHByZS0gb3IgcG9zdC1taWIpLCB0aGVuIGl0IHdpbGwgZGlzcGxheQorYSB3YXJuaW5nIG1lc3NhZ2UsIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhlIG5leHQgbGluZQorb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5TUyBDb25maWd1cmF0aW9uIFNlYXJjaCBQYXRoCisuUFAKK1RoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGJlIHJlYWQgYXJlIGZvdW5kIGJ5IHNlYXJjaGluZyBhIGxpc3QKK29mIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgZm9yIGFwcHJvcHJpYXRlbHkgbmFtZWQgZmlsZXMuCitJbiBlYWNoIHN1Y2ggZGlyZWN0b3J5LCB0aGUgbGlicmFyeSB3aWxsIGxvb2sgZm9yIGZpbGVzIG5hbWVkCitcZkMgc25tcC5jb25mXGZQLAorXGZDIHNubXAubG9jYWwuY29uZlxmUCwKK1xmSSBhcHBcZlBcZkMuY29uZlxmUCwKK1xmSSBhcHBcZlBcZkMubG9jYWwuY29uZlxmUCwKKy5icgorKHdoZXJlIFxmSWFwcFxmUCBpcyB0aGUgYXBwaWNhdGlvbi1zcGVjaWZpYyBmaWxlUHJlZml4IHVzZWQgdG8KK3JlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gaGFuZGxlcnMpLgorSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYW55IG9yIGFsbCBvZiB0aGVzZSBmaWxlcyB0byBiZSBwcmVzZW50CitpbiBlYWNoIGRpcmVjdG9yeS4gIE1pc3NpbmcgZmlsZXMgd2lsbCBiZSBzaWxlbnRseSBza2lwcGVkLgorLmJyCitUaGUgaWRlYSBiZWhpbmQgdGhlIHR3byBkaWZmZXJlbnQgc3VmZml4ZXMgaXMgdGhhdCB0aGUgZmlyc3QgZmlsZSBjYW4KK2JlIHNoYXJlZCAodmlhIHJkaXN0IG9yIGFuIE5GUyBtb3VudCkgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mCittYWNoaW5lcyBhbmQgdGhlIHNlY29uZCBmaWxlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBsb2NhbCBzZXR0aW5ncworZm9yIG9uZSBwYXJ0aWN1bGFyIG1hY2hpbmUuCisuUFAKK1RoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGlzIFxmQyBTWVNDT05GRElSL3NubXBcZlAsCitmb2xsb3dlZCBieSBcZkMgREFUQURJUi9zbm1wXGZQLAorZm9sbG93ZWQgYnkgXGZDIExJQkRJUi9zbm1wXGZQLAorZm9sbG93ZWQgYnkgXGZDICRIT01FLy5zbm1wXGZQLgorVGhpcyBsaXN0IGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUKKy5JIFNOTVBDT05GUEFUSAordG8gYmUgYSAoY29sb24gc2VwYXJhdGVkKSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaC4KKy5icgorLlNTIGluaXRfc25tcCgpCisuUFAKK1RoZSBub3JtYWwgbW9kZSBvZiBvcGVyYXRpb24gd291bGQgYmUgdG8gcmVnaXN0ZXIgdGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljCitjb25maWd1cmF0aW9uIGhhbmRsZXJzLCBhbmQgdGhlbiBpbnZva2UKKy5CUiBpbml0X3NubXAoKSAiLiIKK1RoaXMgd291bGQgY2FsbCB0aGUgcm91dGluZXMgbGlzdGVkIGFib3ZlIHRvIHJlZ2lzdGVyIHRoZSBpbnRlcm5hbCBsaWJyYXJ5Citjb25maWd1cmF0aW9uIGhhbmRsZXJzLCBwcm9jZXNzIGFueSBjb25maWd1cmF0aW9uIHRva2VucyByZWdpc3RlcmVkIHdpdGgKKy5CIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKSwKK3JlYWQgaW4gdGhlIHRleHR1YWwgTUlCIGZpbGVzIHVzaW5nCisuQiBpbml0X21pYigpLAorYW5kIGZpbmFsbHkgcGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0b2tlbnMgcmVnaXN0ZXJlZCB3aXRoIAorLkJSIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkgLgorLlBQCitJZiB0aGUgCisuQiBpbml0X3NubXAoKQorZnVuY3Rpb24gaXMgdXNlZCwgbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZSBleHBsaWNpdGx5CitjYWxsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorLlNIIEhFTFAgU1RSSU5HUyBBTkQgRVJST1JTCisuUFAKK1RoZQorLkkgdXNhZ2VMaW5lCitwYXJhbWV0ZXIgcGFzc2VkIHRvCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCithbmQgc2ltaWxhciBjYWxscywgaXMgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gd2hlbiB0aGUKKy5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKK2Z1bmN0aW9uIGlzIGNhbGxlZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhbGwgb2YgdGhlIGFwcGxpY2F0aW9ucword2hlbiB0aGUgCisuQiAtSAorZmxhZyBpcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEl0IHByaW50cyBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZQorY29uZmlndXJhdGlvbiBmaWxlIGxpbmVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgZmlsZXMsIHRoYXQgdGhlCitjb25maWd1cmF0aW9uIHN5c3RlbSB1bmRlcnN0YW5kcy4gIFRoZQorLkkgdXNhZ2VMaW5lCitwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgbGlzdCBvZiBhcmd1bWVudHMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIHRva2VuLCBhbmQKK25vdCBhIGxlbmd0aHkgZGVzY3JpcHRpb24gKHdoaWNoIHNob3VsZCBnbyBpbnRvIGEgbWFudWFsIHBhZ2UKK2luc3RlYWQpLiAgVGhlCisuSSBsZWFkCitwcmVmaXggd2lsbCBiZSBwcmVwZW5kZWQgdG8gZWFjaCBsaW5lIHRoYXQgdGhlIGZ1bmN0aW9uIHByaW50cyB0bworc3RkZXJyLCB3aGVyZSBpdCBkaXNwbGF5cyBpdHMgb3V0cHV0LgorLlBQCitUaGUKKy5CIGluaXRfc25tcCgpCitmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKy5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKK2Z1bmN0aW9uIGlzIGNhbGxlZCwgc28gdGhhdCB0aGUgbGlicmFyeSBjYW4gcmVnaXN0ZXIgaXRzIGNvbmZpZ3VyYXRpb24gCitmaWxlIGRpcmVjdGl2ZXMgYXMgd2VsbCBmb3IgdGhlIAorLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQorZnVuY3Rpb24gdG8gZGlzcGxheS4KKy5TUyBFcnJvciBIYW5kbGluZyBGdW5jdGlvbnMKKy5QUAorVGhlIHR3byBmdW5jdGlvbnMKKy5CIGNvbmZpZ19wd2FybigpCithbmQKKy5CIGNvbmZpZ19wZXJyb3IoKQorYm90aCB0YWtlIGFuIGVycm9yIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcHJpbnQgaXQgdG8gc3RkZXJyIGFsb25nCit3aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciB0aGF0IGNhdXNlZCB0aGUgZXJyb3IuICBBIGNhbGwgdG8gdGhlCitzZWNvbmQgZnVuY3Rpb24gd2lsbCBhbHNvIGZvcmNlIAorLkIgcmVhZF9jb25maWdzKCkgCit0byBldmVudHVhbGx5IHJldHVybiB3aXRoIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyB0byBpdCdzIGNhbGxpbmcKK2Z1bmN0aW9uIHRoYXQgaXQgc2hvdWxkIGFib3J0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgorLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCisuVFAgMTAKK1NOTVBDT05GUEFUSAorQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24KK2ZpbGVzIGluLgorRGVmYXVsdDogU1lTQ09ORkRJUi9zbm1wOkRBVEFESVIvc25tcDpMSUJESVIvc25tcDokSE9NRS8uc25tcAorLlNIICJTRUUgQUxTTyIKK25ldHNubXBfbWliX2FwaSgzKSwgc25tcF9hcGkoMykKKy5cIiBMb2NhbCBWYXJpYWJsZXM6CisuXCIgIG1vZGU6IG5yb2ZmCisuXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfY29udGFpbmVyLjMgYi9tYW4vbmV0c25tcF9jb250YWluZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJmNDE0ZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9jb250YWluZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS5USCAiY29udGFpbmVyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotY29udGFpbmVyIFwtIAotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm51bGxfY29udGFpbmVyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IHNwZWNpYWxpemVkIGNvbnRhaW5lcnMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9kYXRhX2xpc3QuMyBiL21hbi9uZXRzbm1wX2RhdGFfbGlzdC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWNjYWZlLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2RhdGFfbGlzdC4zCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS5USCAiZ2VuZXJpYyBsaW5rZWQtbGlzdCBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdHJpbmcgYXMgYSBrZXkuIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotZ2VuZXJpYyBsaW5rZWQtbGlzdCBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdHJpbmcgYXMgYSBrZXkuIFwtIAotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqXGZCbm9kZVxmUCkiCi0uYnIKLS5SSSAiXGZJZnJlZXMgdGhlIGRhdGEgYW5kIGEgbmFtZSBhdCBhIGdpdmVuIGRhdGFfbGlzdCBcZkJub2RlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpoZWFkKSIKLS5icgotLlJJICJcZklmcmVlcyBhbGwgZGF0YSBhbmQgbm9kZXMgaW4gYSBsaXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogXGZCbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0XGZQIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICpiZWVyKSIKLS5icgotLlJJICJcZklhZGRzIGNyZWF0ZXMgYSBkYXRhX2xpc3QgXGZCbm9kZVxmUCBnaXZlbiBhIG5hbWUsIGRhdGEgYW5kIGEgZnJlZSBmdW5jdGlvbiBwdHIuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2FkZF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqaGVhZCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKlxmQm5vZGVcZlApIgotLmJyCi0uUkkgIlxmSWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKipoZWFkLCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqXGZCbm9kZVxmUCkiCi0uYnIKLS5SSSAiXGZJYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIFxmQm5ldHNubXBfZGF0YV9saXN0X2FkZF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKmJlZXIpIgotLmJyCi0uUkkgIlxmSWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCAqIFxmQm5ldHNubXBfZ2V0X2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBkYXRhX2xpc3Qgbm9kZSdzIGRhdGEgZm9yIGEgZ2l2ZW4gbmFtZSB3aXRoaW4gYSBkYXRhX2xpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIFxmQm5ldHNubXBfZ2V0X2xpc3Rfbm9kZVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBkYXRhX2xpc3QgXGZCbm9kZVxmUCBmb3IgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGRhdGFfbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlbW92ZV9saXN0X25vZGVcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqcmVhbGhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSVJlbW92ZXMgYSBuYW1lZCBcZkJub2RlXGZQIGZyb20gYSBkYXRhX2xpc3QgKGFuZCBmcmVlcyBpdCkuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3NhdmVfbGlzdFxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKipkYXRhbGlzdCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIE5ldHNubXBfU2F2ZV9MaXN0X0RhdGEgKmRhdGFfbGlzdF9zYXZlX3B0ciwgTmV0c25tcF9SZWFkX0xpc3RfRGF0YSAqZGF0YV9saXN0X3JlYWRfcHRyLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICpkYXRhX2xpc3RfZnJlZV9wdHIpIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyB0byBzdG9yZSBhIGRhdGFfbGlzdCBzZXQgb2YgZGF0YSBhdCBwZXJzaXN0ZW50IHN0b3JhZ2UgdGltZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NhdmVfYWxsX2RhdGFfY2FsbGJhY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykiCi0uYnIKLS5SSSAiXGZJaW50ZW5kZWQgdG8gYmUgcmVnaXN0ZXJkIGFzIGEgY2FsbGJhY2sgb3BlcmF0aW9uLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NhdmVfYWxsX2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpoZWFkLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgTmV0c25tcF9TYXZlX0xpc3RfRGF0YSAqZGF0YV9saXN0X3NhdmVfcHRyKSIKLS5icgotLlJJICJcZklpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXMgYSBjYWxsYmFjayBkdXJpbmcgcGVyc2lzdGVudCBzYXZlIG9wZXJhdGlvbnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3JlYWRfZGF0YV9jYWxsYmFja1xmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIgotLmJyCi0uUkkgIlxmSWludGVuZGVkIHRvIGJlIHJlZ2lzdGVyZCBhcyBhIC5jb25mIHBhcnNlciBJdCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB1c2luZzogXGZQIgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfYWRkX2xpc3RfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiogaGVhZCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBub2RlKSIKLS5QUAotYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgZGVwcmVjaWF0ZWQ6IHVzZSBcZkJuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSgpXGZQCi0uUFAKLVxmQk5vdGU6XGZQCi0uUlMgNAotbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUgaXMgcHJlZmVycmVkIAotLlJFCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJXGZCbm9kZVxmUFxmUCBhIFxmQm5vZGVcZlAgdG8gc3Rhc2ggaW4gdGhlIGRhdGFfbGlzdCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQKiBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QgKGNvbnN0IGNoYXIgKiBuYW1lLCB2b2lkICogZGF0YSwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIGJlZXIpIgotLlBQCi1hZGRzIGNyZWF0ZXMgYSBkYXRhX2xpc3QgXGZCbm9kZVxmUCBnaXZlbiBhIG5hbWUsIGRhdGEgYW5kIGEgZnJlZSBmdW5jdGlvbiBwdHIuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmFtZVxmUCB0aGUgbmFtZSBvZiB0aGUgXGZCbm9kZVxmUCB0byBjYWNoZSB0aGUgZGF0YS4gCi0uYnIKLVxmSWRhdGFcZlAgdGhlIGRhdGEgdG8gYmUgc3RvcmVkIHVuZGVyIHRoYXQgbmFtZSAKLS5icgotXGZJYmVlclxmUCBBIGZ1bmN0aW9uIHRoYXQgY2FuIGZyZWUgdGhlIGRhdGEgcG9pbnRlciAoaW4gdGhlIGZ1dHVyZSkgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIG5ld2x5IGNyZWF0ZWQgZGF0YV9saXN0IFxmQm5vZGVcZlAgd2hpY2ggY2FuIGJlIGdpdmVuIHRvIHRoZSBuZXRzbm1wX2FkZF9saXN0X2RhdGEgZnVuY3Rpb24uIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MCBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCogbmV0c25tcF9kYXRhX2xpc3RfYWRkX2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqIGhlYWQsIGNvbnN0IGNoYXIgKiBuYW1lLCB2b2lkICogZGF0YSwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIGJlZXIpIgotLlBQCi1hZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgYSBwb2ludGVyIHRvIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSW5hbWVcZlAgdGhlIG5hbWUgb2YgdGhlIFxmQm5vZGVcZlAgdG8gY2FjaGUgdGhlIGRhdGEuIAotLmJyCi1cZklkYXRhXGZQIHRoZSBkYXRhIHRvIGJlIHN0b3JlZCB1bmRlciB0aGF0IG5hbWUgCi0uYnIKLVxmSWJlZXJcZlAgQSBmdW5jdGlvbiB0aGF0IGNhbiBmcmVlIHRoZSBkYXRhIHBvaW50ZXIgKGluIHRoZSBmdXR1cmUpIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBuZXdseSBjcmVhdGVkIGRhdGFfbGlzdCBcZkJub2RlXGZQIHdoaWNoIHdhcyBpbnNlcnRlZCBpbiB0aGUgbGlzdCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0MSBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKiBoZWFkLCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIG5vZGUpIgotLlBQCi1hZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgYSBwb2ludGVyIHRvIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSVxmQm5vZGVcZlBcZlAgYSBcZkJub2RlXGZQIHRvIHN0YXNoIGluIHRoZSBkYXRhX2xpc3QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NyBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIGhlYWQpIgotLlBQCi1mcmVlcyBhbGwgZGF0YSBhbmQgbm9kZXMgaW4gYSBsaXN0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgdGhlIHRvcCBcZkJub2RlXGZQIG9mIHRoZSBsaXN0IHRvIGJlIGZyZWVkLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyIG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9mcmVlX2xpc3RfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBub2RlKSIKLS5QUAotZnJlZXMgdGhlIGRhdGEgYW5kIGEgbmFtZSBhdCBhIGdpdmVuIGRhdGFfbGlzdCBcZkJub2RlXGZQLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGZyZWUgdGhlIFxmQm5vZGVcZlAgaXRzZWxmLiAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklcZkJub2RlXGZQXGZQIHRoZSBcZkJub2RlXGZQIGZvciB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgZnJlZWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNiBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkKiBuZXRzbm1wX2dldF9saXN0X2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogaGVhZCwgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1yZXR1cm5zIGEgZGF0YV9saXN0IG5vZGUncyBkYXRhIGZvciBhIGdpdmVuIG5hbWUgd2l0aGluIGEgZGF0YV9saXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZkluYW1lXGZQIHRoZSBuYW1lIHRvIGZpbmQgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIHBvaW50ZXIgdG8gdGhlIGRhdGEgY2FjaGVkIGF0IHRoYXQgXGZCbm9kZVxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2NiBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCogbmV0c25tcF9nZXRfbGlzdF9ub2RlIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIGhlYWQsIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotcmV0dXJucyBhIGRhdGFfbGlzdCBcZkJub2RlXGZQIGZvciBhIGdpdmVuIG5hbWUgd2l0aGluIGEgZGF0YV9saXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZkluYW1lXGZQIHRoZSBuYW1lIHRvIGZpbmQgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIHBvaW50ZXIgdG8gdGhlIGRhdGFfbGlzdCBcZkJub2RlXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg0IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgInZvaWQgbmV0c25tcF9yZWFkX2RhdGFfY2FsbGJhY2sgKGNvbnN0IGNoYXIgKiB0b2tlbiwgY2hhciAqIGxpbmUpIgotLlBQCi1pbnRlbmRlZCB0byBiZSByZWdpc3RlcmQgYXMgYSAuY29uZiBwYXJzZXIgSXQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmc6IHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigndG9rZW4nLCBuZXRzbm1wX3JlYWRfZGF0YV9jYWxsYmFjaywgWFhYKQotLlBQCi13aGVyZSBJTkZPX1BPSU5URVIgaXMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9kYXRhX2xpc3Rfc2F2ZWluZm8gb2JqZWN0IGNvbnRhaW5pbmcgYXBwb3JwcmlhdGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIAotLlBQCi1cZkJUb2RvXGZQCi0uUlMgNAotbWFrZSBuZXRzbm1wX3JlYWRfZGF0YV9jYWxsYmFjayBkZWFsIHdpdGggYSBmcmVlIHJvdXRpbmUgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzcgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3JlZ2lzdGVyX3NhdmVfbGlzdCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiogZGF0YWxpc3QsIGNvbnN0IGNoYXIgKiB0eXBlLCBjb25zdCBjaGFyICogdG9rZW4sIE5ldHNubXBfU2F2ZV9MaXN0X0RhdGEgKiBkYXRhX2xpc3Rfc2F2ZV9wdHIsIE5ldHNubXBfUmVhZF9MaXN0X0RhdGEgKiBkYXRhX2xpc3RfcmVhZF9wdHIsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBkYXRhX2xpc3RfZnJlZV9wdHIpIgotLlBQCi1yZWdpc3RlcnMgdG8gc3RvcmUgYSBkYXRhX2xpc3Qgc2V0IG9mIGRhdGEgYXQgcGVyc2lzdGVudCBzdG9yYWdlIHRpbWUgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklkYXRhbGlzdFxmUCB0aGUgZGF0YSB0byBiZSBzYXZlZCAKLS5icgotXGZJdHlwZVxmUCB0aGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdG8gc2F2ZSB0aGUgZGF0YSBhcy4gSWYgbGVmdCBOVUxMIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIG5hbWUgdGhhdCB3YXMgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRfc25tcCBjYWxsIHdpbGwgYmUgdXNlZCAocmVjb21tZW5kZWQpLiAKLS5icgotXGZJdG9rZW5cZlAgdGhlIHVuaXF1ZSB0b2tlbiBpZGVudGlmaWVyIHN0cmluZyB0byB1c2UgYXMgdGhlIGZpcnN0IHdvcmQgaW4gdGhlIHBlcnNpc3RlbnQgZmlsZSBsaW5lLiAKLS5icgotXGZJZGF0YV9saXN0X3NhdmVfcHRyXGZQIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCB3aWxsIGJlIGNhbGxlZCB0byBzYXZlIHRoZSByZXN0IG9mIHRoZSBkYXRhIHRvIGEgYnVmZmVyLiAKLS5icgotXGZJZGF0YV9saXN0X3JlYWRfcHRyXGZQIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCBjYW4gcmVhZCB0aGUgcmVtYWluZGVyIG9mIGEgc2F2ZWQgbGluZSBhbmQgcmV0dXJuIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyB2b2lkICogcG9pbnRlci4gCi0uYnIKLVxmSWRhdGFfbGlzdF9mcmVlX3B0clxmUCBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGRhdGEgXGZCbm9kZVxmUCBmb3IgZnJlZWluZyBpdCBpbiB0aGUgZnV0dXJlIHdoZW4vaWYgdGhlIGxpc3Qvbm9kZSBpcyBjbGVhbmVkIHVwIG9yIGRlc3Ryb3llZC4gCi0uUkUKLS5QUAotCi0uUFAKLVxmQlRvZG9cZlAKLS5SUyA0Ci1uZXRzbm1wX3JlZ2lzdGVyX3NhdmVfbGlzdCBzaG91bGQgaGFuZGxlIHRoZSBzYW1lIHRva2VuIG5hbWUgYmVpbmcgc2F2ZWQgZnJvbSBkaWZmZXJlbnQgdHlwZXM/IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM1IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgImludCBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqIHJlYWxoZWFkLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLVJlbW92ZXMgYSBuYW1lZCBcZkJub2RlXGZQIGZyb20gYSBkYXRhX2xpc3QgKGFuZCBmcmVlcyBpdCkuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVhbGhlYWRcZlAgYSBwb2ludGVyIHRvIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSW5hbWVcZlAgdGhlIG5hbWUgdG8gZmluZCBhbmQgcmVtb3ZlIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBvbiBzdWNjZXNzZnVsIGZpbmQtYW5kLWRlbGV0ZSwgMSBvdGhlcndpc2UuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjAyIG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgImludCBuZXRzbm1wX3NhdmVfYWxsX2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogaGVhZCwgY29uc3QgY2hhciAqIHR5cGUsIGNvbnN0IGNoYXIgKiB0b2tlbiwgTmV0c25tcF9TYXZlX0xpc3RfRGF0YSAqIGRhdGFfbGlzdF9zYXZlX3B0cikiCi0uUFAKLWludGVuZGVkIHRvIGJlIGNhbGxlZCBhcyBhIGNhbGxiYWNrIGR1cmluZyBwZXJzaXN0ZW50IHNhdmUgb3BlcmF0aW9ucy4gU2VlIHRoZSBuZXRzbm1wX3NhdmVfYWxsX2RhdGFfY2FsbGJhY2sgZm9yIHdoZXJlIHRoaXMgaXMgdHlwaWNhbGx5IHVzZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzAxIG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgImludCBuZXRzbm1wX3NhdmVfYWxsX2RhdGFfY2FsbGJhY2sgKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICogc2VydmVyYXJnLCB2b2lkICogY2xpZW50YXJnKSIKLS5QUAotaW50ZW5kZWQgdG8gYmUgcmVnaXN0ZXJkIGFzIGEgY2FsbGJhY2sgb3BlcmF0aW9uLiBJdCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB1c2luZzoKLS5QUAotc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwgbmV0c25tcF9zYXZlX2FsbF9kYXRhX2NhbGxiYWNrLCBJTkZPX1BPSU5URVIpOwotLlBQCi13aGVyZSBJTkZPX1BPSU5URVIgaXMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9kYXRhX2xpc3Rfc2F2ZWluZm8gb2JqZWN0IGNvbnRhaW5pbmcgYXBwb3JwcmlhdGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg0IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfZGVidWcuMyBiL21hbi9uZXRzbm1wX2RlYnVnLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYThiODkuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfZGVidWcuMworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0uVEggImRlYnVnIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotZGVidWcgXC0gCi0uUFAKLVByaW50IG91dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhbmRsZXIgY2hhaW4gYmVpbmcgY2FsbGVkLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9kZWJ1Z19oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgZGVidWcgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmRlYnVnX3ByaW50X3JlcXVlc3RzXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RlYnVnX2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfZGVidWdfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgZGVidWcgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgZGVidWcgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNTICJoYW5kbGVyIgotIAotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9zZXJpYWxpemVcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBzZXJpYWxpemUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfcmVhZF9vbmx5X2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9idWxrX3RvX25leHRfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgYnVsa190b19uZXh0IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3RhYmxlX2RhdGFzZXRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHN0YXNoX2NhY2hlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfaGVscGVyc1xmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGFsbCBoYW5kbGVycyB3aXRoIGluaXRfIHJvdXRpbmVzLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUHJpbnQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFuZGxlciBjaGFpbiBiZWluZyBjYWxsZWQuIAotCi1UaGlzIGlzIGEgdXNlZnVsIFxmQm1vZHVsZVxmUCBmb3IgcnVuLXRpbWUgZGVidWdnaW5nIG9mIHJlcXVlc3RzIGFzIHRoZSBwYXNzIHRoaXMgaGFuZGxlciBpbiBhIGNhbGxpbmcgY2hhaW4uIEFsbCBkZWJ1Z2dpbmcgb3V0cHV0IGlzIGRvbmUgdmlhIHRoZSBzdGFuZGFyZCBkZWJ1Z2dpbmcgcm91dGluZXMgd2l0aCBhIHRva2VuIG5hbWUgb2YgJ2hlbHBlcjpkZWJ1ZycsIHNvIHVzZSB0aGUgLURoZWxwZXI6ZGVidWcgY29tbWFuZCBsaW5lIGZsYWcgdG8gc2VlIHRoZSBvdXRwdXQgd2hlbiBydW5uaW5nIHRoZSBzbm1wZCBkZW1vbi4gSXQncyBub3QgcmVjb21tZW5kZWQgeW91IGNvbXBpbGUgdGhpcyBpbnRvIGEgaGFuZGxlciBjaGFpbiBkdXJpbmcgY29tcGlsZSB0aW1lLCBidXQgaW5zdGVhZCB1c2UgdGhlICdpbmplY3RIYW5kbGVyJyB0b2tlbiBpbiB0aGUgc25tcGQuY29uZiBmaWxlIChvciBzaW1pbGFyKSB0byBhZGQgaXQgdG8gdGhlIGNoYWluIGxhdGVyOgotLlBQCi1pbmplY3RIYW5kbGVyIGRlYnVnIG15X21vZHVsZV9uYW1lCi0uUFAKLXRvIHNlZSBhbiBleGFtcGxlIG91dHB1dCwgdHJ5OgotLlBQCi1pbmplY3RIYW5kbGVyIGRlYnVnIG1pYklJL3N5c3RlbQotLlBQCi1hbmQgdGhlbiBydW4gc25tcHdhbGsgb24gdGhlICdzeXN0ZW0nIGdyb3VwLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfZGVidWdfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBkZWJ1ZyBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUxIG9mIGZpbGUgZGVidWdfaGFuZGxlci5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9idWxrX3RvX25leHRfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIGJ1bGtfdG9fbmV4dCBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBidWxrX3RvX25leHQgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzkgb2YgZmlsZSBidWxrX3RvX25leHQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfZGVidWdfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIGRlYnVnIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGRlYnVnIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU1IG9mIGZpbGUgZGVidWdfaGFuZGxlci5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9oZWxwZXJzICh2b2lkKSIKLS5QUAotY2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGFsbCBoYW5kbGVycyB3aXRoIGluaXRfIHJvdXRpbmVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2IG9mIGZpbGUgYWxsX2hlbHBlcnMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfcmVhZF9vbmx5X2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSByZWFkX29ubHkgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcmVhZF9vbmx5IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODEgb2YgZmlsZSByZWFkX29ubHkuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfc2VyaWFsaXplICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzZXJpYWxpemUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MyBvZiBmaWxlIHNlcmlhbGl6ZS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgc3Rhc2hfY2FjaGUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzggb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMyBiL21hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzMjg3Yi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotLlRIICJzdG9yYWdlIHNwYWNlIGZvciBkZWZhdWx0cyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXN0b3JhZ2Ugc3BhY2UgZm9yIGRlZmF1bHRzIFwtIAotLlBQCi1UaGUgcHVycG9zZSBvZiB0aGUgZGVmYXVsdCBzdG9yYWdlIGlzIHRocmVlLWZvbGQ6LiAgCi0KLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2RzX3JlYWRfY29uZmlnX3NcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9kc19yZWFkX2NvbmZpZ19zXGZQIFxmQm5ldHNubXBfZHNfcmVhZF9jb25maWdcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kc19oYW5kbGVfY29uZmlnXGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfc2V0X2Jvb2xlYW5cZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSkiCi0uYnIKLS5SSSAiXGZJU3RvcmVzICd0cnVlJyBvciAnZmFsc2UnIGdpdmVuIGFuIGludCB2YWx1ZSBmb3IgdmFsdWUgaW50byBuZXRzbm1wX2RzX2Jvb2xlYW5zW3N0b3JlXVt3aGljaF0gc2xvdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc190b2dnbGVfYm9vbGVhblxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfZ2V0X2Jvb2xlYW5cZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3NldF9pbnRcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfZ2V0X2ludFxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfc2V0X3N0cmluZ1xmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCwgY29uc3QgY2hhciAqdmFsdWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJuZXRzbm1wX2RzX2dldF9zdHJpbmdcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3NldF92b2lkXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCB2b2lkICp2YWx1ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZHNfZ2V0X3ZvaWRcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW5cZlAgKGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZ1xmUCAodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliXGZQICh1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZHNfc2h1dGRvd25cZlAgKCkiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgcHVycG9zZSBvZiB0aGUgZGVmYXVsdCBzdG9yYWdlIGlzIHRocmVlLWZvbGQ6LiAKLQotMSkgVG8gY3JlYXRlIGEgZ2xvYmFsIHN0b3JhZ2Ugc3BhY2Ugd2l0aG91dCBjcmVhdGluZyBhIHdob2xlIGJ1bmNoIG9mIGdsb2JhbGx5IGFjY2Vzc2libGUgdmFyaWFibGVzIG9yIGEgd2hvbGUgYnVuY2ggb2YgYWNjZXNzIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggbW9yZSBwcml2YXRlbHkgcmVzdHJpY3RlZCB2YXJpYWJsZXMuCi0uUFAKLTIpIFRvIHByb3ZpZGUgYSBzaW5nbGUgbG9jYXRpb24gd2hlcmUgdGhlIHRocmVhZCBsb2NrLSBpbmcgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgaG93ZXZlciwgdGhyZWFkIGxvY2tpbmcgaXMgbm90IHlldCBpbiBwbGFjZS4KLS5QUAotMykgVG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY3Jvc3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gY29kZSBwaWVjZXMgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBsaW5rZWQgdG9nZXRoZXIgaW4gdGhlIGxvbmcgcnVuLiBUaGlzIHByb3ZpZGVzIGZvciBhIHNpbmdsZSBsb2NhLSB0aW9uIGluIHdoaWNoIGNvbmZpZ3VyYXRpb24gZGF0YSwgZm9yIGV4YW1wbGUsIGNhbiBiZSBzdG9yZWQgZm9yIGEgc2VwYXJhdGUgc2VjdGlvbiBvZiBjb2RlIHRoYXQgbWF5IG5vdCBiZSBsaW5rZWQgaW4gdG8gdGhlIGFwcGxpY2F0aW9uIGluIHF1ZXN0aW9uLgotLlBQCi1UaGUgZnVuY3Rpb25zIGRlZmluZWQgaGVyZSBpbXBsZW1lbnQgdGhlc2UgZ29hbHMuCi0uUFAKLUN1cnJlbnRseSwgdGhyZWUgZGF0YSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBib29sZWFucywgaW50ZS0gZ2VycywgYW5kIHN0cmluZ3MuIEVhY2ggb2YgdGhlc2UgZGF0YSB0eXBlcyBoYXZlIHNlcGFyYXRlIHN0b3JhZ2Ugc3BhY2VzLiBJbiBhZGRpdGlvbiwgdGhlIHN0b3JhZ2Ugc3BhY2UgZm9yIGVhY2ggZGF0YSB0eXBlIGlzIGRpdmlkZWQgZnVydGhlciBieSB0aGUgYXBwbGljYXRpb24gbGV2ZWwuIEN1cnJlbnRseSwgdGhlcmUgYXJlIHR3byBzdG9yYWdlIHNwYWNlcy4gVGhlIGZpcnN0IGlzIHJlc2VydmVkIGZvciB0aGUgU05NUCBsaWJyYXJ5IGl0c2VsZi4gVGhlIHNlY29uZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGFwcGxpY2F0aW9ucyBhbmQgaXMgbm90IG1vZGlmaWVkIG9yIGNoZWNrZWQgYnkgdGhlIGxpYnJhcnksIGFuZCwgdGhlcmVmb3JlLCB0aGlzIGlzIHRoZSBzcGFjZSB1c2FibGUgYnkgeW91LgotLlBQCi1UaGVzZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kIHdpdGggdGhlICdzdG9yaWQnIGFyZ3VtZW50IHRvIHRoZSBBUEkKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQlJBUllfSUQgMAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQgMQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfVE9LRU5fSUQgMgotLlBQCi0uUFAKLVRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgJ3doaWNoJyBhcmd1bWVudCB0byB0aGUgQVBJLCB3aGVuIHRoZSBzdG9yZWlkIGFyZ3VtZW50IGlzIE5FVFNOTVBfRFNfTElCUkFSWV9JRAotLlBQCi1saWJyYXJ5IGJvb2xlYW5zCi0uUFAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfRVJST1JTIDAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TQVZFX01JQl9ERVNDUlMgMQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9DT01NRU5UX1RFUk0gMgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9QQVJTRV9MQUJFTCAzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQgNAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0xPR19USU1FU1RBTVAgNQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfUkVBRF9DT05GSUdTIDYKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfUkVQTEFDRSA3IHJlcGxhY2Ugb2JqZWN0cyBmcm9tIGxhdGVzdCBcZkJtb2R1bGVcZlAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9OVU1FUklDX0VOVU0gOCBwcmludCBvbmx5IG51bWVyaWMgZW51bSB2YWx1ZXMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9OVU1FUklDX09JRFMgOSBwcmludCBvbmx5IG51bWVyaWMgZW51bSB2YWx1ZXMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX0JSRUFLRE9XTl9PSURTIDEwIGRvbnQgcHJpbnQgb2lkIGluZGV4ZXMgc3BlY2lhbGx5Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIDExIGRvbid0IHVzZSB0aGUgYWxhcm0oKSBzaWduYWwKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9GVUxMX09JRCAxMiBwcmludCBmdWxseSBxdWFsaWZpZWQgb2lkcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UIDEzIHByaW50IHZlcnkgYnJpZWYgb3V0cHV0IGZvciBwYXJzaW5nCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkFORE9NX0FDQ0VTUyAxNCByYW5kb20gYWNjZXNzIHRvIG9pZCBsYWJlbHMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRUdFWF9BQ0NFU1MgMTUgcmVnZXggbWF0Y2hpbmcgdG8gb2lkIGxhYmVscwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfQ0hFQ0tfUkFOR0UgMTYgZG9uJ3QgY2hlY2sgdmFsdWVzIGZvciByYW5nZXMgb24gc2VuZAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX05PX1RPS0VOX1dBUk5JTkdTIDE3IG5vIHdhcm4gYWJvdXQgdW5rbm93biBjb25maWcgdG9rZW5zCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTlVNRVJJQ19USU1FVElDS1MgMTggcHJpbnQgdGltZXRpY2tzIGFzIGEgbnVtYmVyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVNDQVBFX1FVT1RFUyAxOSBzaGVsbCBlc2NhcGUgcXVvdGUgbWFya3MgaW4gb2lkcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JFVkVSU0VfRU5DT0RFIDIwIGVuY29kZSBwYWNrZXRzIGZyb20gYmFjayB0byBmcm9udAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0JBUkVfVkFMVUUgMjEganVzdCBwcmludCB2YWx1ZSAobm90IE9JRCA9IHZhbHVlKQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0VYVEVOREVEX0lOREVYIDIyIHByaW50IGV4dGVuZGVkIGluZGV4IGZvcm1hdCBbeDFdW3gyXQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0hFWF9URVhUIDIzIHByaW50IEFTQ0lJIHRleHQgYWxvbmcgd2l0aCBoZXggc3RyaW5ncwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX1VDRF9TVFlMRV9PSUQgMjQgcHJpbnQgT0lEJ3MgdXNpbmcgdGhlIFVDRC1zdHlsZSBwcmVmaXggc3VwcHJlc3Npb24KLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRUFEX1VDRF9TVFlMRV9PSUQgMjUgcmVxdWlyZSB0b3AtbGV2ZWwgT0lEcyB0byBiZSBwcmVmaXhlZCB3aXRoIGEgZG90Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEFWRV9SRUFEX1BSRU1JQl9DT05GSUcgMjYgaGF2ZSB0aGUgcHJlLW1pYiBwYXJzaW5nIGNvbmZpZyB0b2tlbnMgYmVlbiBwcm9jZXNzZWQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IQVZFX1JFQURfQ09ORklHIDI3IGhhdmUgdGhlIGNvbmZpZyB0b2tlbnMgYmVlbiBwcm9jZXNzZWQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9RVUlDS0VfUFJJTlQgMjgKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX1BSSU5UX1VOSVRTIDI5IGRvbid0IHByaW50IFVOSVRTIHN1ZmZpeAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX05PX0RJU1BMQVlfSElOVCAzMCBkb24ndCBhcHBseSBESVNQTEFZLUhJTlRzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfMTZCSVRfSURTIDMxIHJlc3RyaWN0IHJlcXVlc3RJRHMsIGV0YyB0byAxNi1iaXQgdmFsdWVzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9QRVJTSVNUX1NUQVRFIDMyIGRvbid0IHNhdmUvbG9hZCBhbnkgcGVyc2lzdGFudCBzdGF0ZQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCXzJESUdJVF9IRVhfT1VUUFVUIDMzIHByaW50IGEgbGVhZGluZyAwIG9uIGhleCB2YWx1ZXMgPD0gJ2YnCi0uUFAKLS5QUAotbGlicmFyeSBpbnRlZ2VycwotLlBQCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1dBUk5JTkdTIDAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCAxCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04gMgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCAzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQgNAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NUUklOR19PVVRQVVRfRk9STUFUIDUKLS5QUAotLlBQCi1saWJyYXJ5IHN0cmluZ3MKLS5QUAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ05BTUUgMAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTlRFWFQgMQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UgMgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFIDMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSA0Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfT1BUSU9OQUxDT05GSUcgNQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUgNgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTU1VTklUWSA3Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUEVSU0lTVEVOVF9ESVIgOAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTkZJR1VSQVRJT05fRElSIDkKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNNT0RFTCAxMAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQkRJUlMgMTEKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURTVUZGSVggMTIKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURQUkVGSVggMTMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUiAxNAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RFTVBfRklMRV9QQVRURVJOIDE1Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVVUSE1BU1RFUktFWSAxNgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZNQVNURVJLRVkgMTcKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BVVRITE9DQUxJWkVES0VZIDE4Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJVkxPQ0FMSVpFREtFWSAxOSAKLS5QUAotCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2RzX3NldF9ib29sZWFuIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpIgotLlBQCi1TdG9yZXMgJ3RydWUnIG9yICdmYWxzZScgZ2l2ZW4gYW4gaW50IHZhbHVlIGZvciB2YWx1ZSBpbnRvIG5ldHNubXBfZHNfYm9vbGVhbnNbc3RvcmVdW3doaWNoXSBzbG90LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXN0b3JlaWRcZlAgYW4gaW5kZXggdG8gdGhlIGJvb2xlYW4gc3RvcmFnZSBjb250YWluZXIncyBmaXJzdCBpbmRleChzdG9yZSkKLS5icgotXGZJd2hpY2hcZlAgYW4gaW5kZXggdG8gdGhlIGJvb2xlYW4gc3RvcmFnZSBjb250YWluZXIncyBzZWNvbmQgaW5kZXgod2hpY2gpCi0uYnIKLVxmSXZhbHVlXGZQIGlmID4gMCwgJ3RydWUnIGlzIHNldCBpbnRvIHRoZSBzbG90IG90aGVyd2lzZSAnZmFsc2UnCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIFNOTVBQRVJSX0dFTkVSUiBpZiB0aGUgc3RvcmVpZCBhbmQgd2hpY2ggcGFyYW1ldGVycyBkbyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIHNsb3QsIG9yIFNOTVBFUlJfU1VDQ0VTUyBvdGhlcndpc2UuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjAwIG9mIGZpbGUgZGVmYXVsdF9zdG9yZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zIGIvbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGEyM2IuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0uVEggImV4YW1wbGVfc2NhbGFyX2ludDogaW5zdGFudGlhdGVzIGEgZmV3IGV4YW1wbGUgc2NhbGFycy4iIDMgIjYgTWFyIDIwMDIiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWV4YW1wbGVfc2NhbGFyX2ludCBcLSBUaGlzIGV4YW1wbGUgbWVyZWx5IGNyZWF0ZXMgc29tZSBzY2FsYXIgcmVnaXN0cmF0aW9ucyB0aGF0IGFsbG93cyBzb21lIHNpbXBsZSB2YXJpYWJsZXMgdG8gYmUgYWNjZXNzZWQgdmlhIFNOTVAuCi1Nb3JlLi4uCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfc2NhbGFyX2ludFxmUCAodm9pZCkiCi0uYnIKLS5pbiAtMWMKLS5TSCAiREVUQUlMRUQgREVTQ1JJUFRJT04iCi0uUFAgCi1UaGlzIGV4YW1wbGUgbWVyZWx5IGNyZWF0ZXMgc29tZSBzY2FsYXIgcmVnaXN0cmF0aW9ucyB0aGF0IGFsbG93cyBzb21lIHNpbXBsZSB2YXJpYWJsZXMgdG8gYmUgYWNjZXNzZWQgdmlhIFNOTVAuCi0uUFAKLUluIGEgbW9yZSByZWFsaXN0aWMgZXhhbXBsZSwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlc2UgdmFyaWFibGVzIHdvdWxkIGFsc28gYmUgbWFuaXB1bGF0ZWQgaW4gb3RoZXIgd2F5cyBvdXRzaWRlIG9mIFNOTVAgZ2V0cy9zZXRzLgotLlBQCi1JZiB0aGlzIG1vZHVsZSBpcyBjb21waWxlZCBpbnRvIGFuIGFnZW50LCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gaXNzdWUgc25tcCBjb21tYW5kcyB0aGF0IGxvb2sgc29tZXRoaW5nIGxpa2UgKGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIG5vdCBzaG93biBpbiB0aGVzZSBjb21tYW5kcyk6Ci0uUFAKLXNubXBnZXQgbG9jYWxob3N0IG5ldFNubXBFeGFtcGxlSW50ZWdlci4wIG5ldFNubXBFeGFtcGxlU2NhbGFycyA9IDQyCi0uUFAKLXNubXBzZXQgbG9jYWxob3N0IG5ldFNubXBFeGFtcGxlSW50ZWdlci4wID0gMTIzNCBuZXRTbm1wRXhhbXBsZVNjYWxhcnMgPSAxMjM0Ci0uUFAKLXNubXBnZXQgbG9jYWxob3N0IG5ldFNubXBFeGFtcGxlSW50ZWdlci4wIG5ldFNubXBFeGFtcGxlU2NhbGFycyA9IDEyMzQKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2hhbmRsZXIuMyBiL21hbi9uZXRzbm1wX2hhbmRsZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFjYTNhMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9oYW5kbGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTUgKzAsMCBAQAotLlRIICJOZXQtU05NUCBBZ2VudCBoYW5kbGVyIGFuZCBleHRlbnNpYmlsaXR5IEFQSSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLU5ldC1TTk1QIEFnZW50IGhhbmRsZXIgYW5kIGV4dGVuc2liaWxpdHkgQVBJIFwtIAotLlBQCi1UaGUgYmFzaWMgdGhlb3J5IGdvZXMgc29tZXRoaW5nIGxpa2UgdGhpczogSW4gdGhlIHBhc3QsIHdpdGggdGhlIG9yaWdpbmFsIG1pYiBcZkJtb2R1bGVcZlAgYXBpICh3aGljaCBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIENNVSBTTk1QIGNvZGUpIHRoZSB1bmRlcmx5aW5nIG1pYiBtb2R1bGVzIHdlcmUgcGFzc2VkIHZlcnkgbGl0dGxlIGluZm9ybWF0aW9uIChvbmx5IHRoZSB0cnVseSBtb3N0IGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGEgcmVxdWVzdCkuICAKLQotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCIKLS5icgotLlJJICJcZkl0aGUgbWliIGhhbmRsZXIgc3RydWN0dXJlIHRvIGJlIHJlZ2lzdGVyZWQgXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQIgotLmJyCi0uUkkgIlxmSVJvb3QgcmVnaXN0cmF0aW9uIGluZm8uIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9hcmdzX3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlX3NcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJ1dGlsaXR5X2hhbmRsZXJzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklTaW1wbGlmeSByZXF1ZXN0IHByb2Nlc3NpbmcgQSBncm91cCBvZiBoYW5kbGVycyBpbnRlbmRlZCB0byBzaW1wbGlmeSBjZXJ0YWluIGFzcGVjdHMgb2YgcHJvY2Vzc2luZyBhIHJlcXVlc3QgZm9yIGEgTUlCIG9iamVjdC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJsZWFmX2hhbmRsZXJzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklQcm9jZXNzIGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIEEgZ3JvdXAgb2YgaGFuZGxlcnMgdG8gaW1wbGVtZW50IGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIGFuZCBpbnN0YW5jZXMgKGJvdGggc2NhbGFyIG9iamVjdHMsIGFuZCBpbmRpdmlkdWFsIG9iamVjdHMgYW5kIGluc3RhbmNlcyB3aXRoaW4gYSB0YWJsZSkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCYmFieV9zdGVwc1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ2FsbHMgeW91ciBoYW5kbGVyIGluIGJhYnlfc3RlcHMgZm9yIHNldCBwcm9jZXNzaW5nLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm9sZF9hcGlcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNhbGxzIG1pYiBcZkJtb2R1bGVcZlAgY29kZSB3cml0dGVuIGluIHRoZSBvbGQgc3R5bGUgb2YgY29kZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJzdGFzaF9jYWNoZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQXV0b21hdGljYWxseSBjYWNoZXMgZGF0YSBmb3IgY2VydGFpbiBoYW5kbGVycy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9BVVRPX05FWFRcZlAgICAweDAwMDAwMDAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0VcZlAgICAweDAwMDAwMDAyIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfSU5TVEFOQ0VcZlAgICAweDAwMDAwMDA0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQ1VTVE9NNFxmUCAgIDB4MTAwMDAwMDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9DVVNUT00zXGZQICAgMHgyMDAwMDAwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0NVU1RPTTJcZlAgICAweDQwMDAwMDAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQ1VTVE9NMVxmUCAgIDB4ODAwMDAwMDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUXGZQICAgMHgwMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX1NFVFxmUCAgIDB4MDIiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9HRVRCVUxLXGZQICAgMHgwNCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX05PVF9DUkVBVEVcZlAgICAweDA4IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fQkFCWV9TVEVQXGZQICAgMHgxMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX1NUQVNIXGZQICAgMHgyMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX1JPTkxZXGZQICAgKEhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFQpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fUldSSVRFXGZQICAgKEhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFQgfCBIQU5ETEVSX0NBTl9TRVQpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fU0VUX09OTFlcZlAgICAoSEFORExFUl9DQU5fU0VUIHwgSEFORExFUl9DQU5fTk9UX0NSRUFURSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9ERUZBVUxUXGZQICAgKEhBTkRMRVJfQ0FOX1JPTkxZIHwgSEFORExFUl9DQU5fTk9UX0NSRUFURSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJSRVFVRVNUX0lTX0RFTEVHQVRFRFxmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJSRVFVRVNUX0lTX05PVF9ERUxFR0FURURcZlAgICAwIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQIgotLmJyCi0uUkkgIlxmSVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9taWJfaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCIKLS5icgotLlJJICJcZklUeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24uIFxmUCIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBpbnQoIFxmQk5ldHNubXBfTm9kZV9IYW5kbGVyXGZQICkoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX2FyZ3Nfc1xmUCBcZkJuZXRzbm1wX2hhbmRsZXJfYXJnc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZV9zXGZQIFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9jcmVhdGVfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqbmFtZSwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKmhhbmRsZXJfYWNjZXNzX21ldGhvZCkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0dXJlIGdpdmVuIGEgbmFtZSBhbmQgYSBhY2Nlc3MgbWV0aG9kLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCBtb2RlcykiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBnaXZlbiBhIG5hbWUsIGEgYWNjZXNzX21ldGhvZCBmdW5jdGlvbiwgYSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkIGFuZCB0aGUgbW9kZXMgdGhlIGhhbmRsZXIgc3VwcG9ydHMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQIChjb25zdCBjaGFyICpuYW1lLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50IG1vZGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSXVucmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ub2NhbGxiYWNrXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmJlZm9yZV93aGF0KSIKLS5icgotLlJJICJcZklpbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5qZWN0X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSWluamVjdCBhIG5ldyBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXJzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9jYWxsX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKm5leHRfaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJY2FsbHMgYSBoYW5kbGVyIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nIG9mIGFyZ3VtZW50cywgZXRjLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhbGxfaGFuZGxlcnNcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpjdXJyZW50LCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZkljYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcl9vbmVfcmVxdWVzdFxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqY3VycmVudCwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJY2FsbHMgdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2hhbmRsZXJfZnJlZVxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJZnJlZXMgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoYW5kbGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfaGFuZGxlcl9kdXBcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSWR1cGxpY2F0ZXMgYSBoYW5kbGVyIGFuZCBhbGwgc3Vic2VxdWVudCBoYW5kbGVycyBzZWUgYWxzbyBfY2xvbmVfaGFuZGxlciBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZHVwXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklkdXBsaWNhdGVzIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZVxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cywgdm9pZCAqbG9jYWxpbmZvKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgY2FjaGUgb2YgaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHNhdmVkIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogXGZCbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlXGZQIChcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqZGNhY2hlKSIKLS5icgotLlJJICJcZkljaGVjaydzIGEgZ2l2ZW4gY2FjaGUgYW5kIHJldHVybnMgaXQgaWYgaXQgaXMgc3RpbGwgdmFsaWQgKGllLCB0aGUgYWdlbnQgc3RpbGwgY29uc2lkZXJzIGl0IHRvIGJlIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfZGVsZWdhdGVkX2NhY2hlXGZQIChcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqZGNhY2hlKSIKLS5icgotLlJJICJcZklmcmVlcyBhIGNhY2hlIG9uY2UgeW91J3JlIGZpbmlzaGVkIHVzaW5nIGl0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cywgaW50IGlzZGVsZWdhdGVkKSIKLS5icgotLlJJICJcZkltYXJrcyBhIGxpc3Qgb2YgcmVxdWVzdHMgYXMgZGVsZWdhdGVkIChvciBub3QgaWYgaXNkZWxlZ2FkZWQgPSAwKSBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqXGZCbm9kZVxmUCkiCi0uYnIKLS5SSSAiXGZJYWRkIGRhdGEgdG8gYSByZXF1ZXN0IHRoYXQgY2FuIGJlIGV4dHJhY3RlZCBsYXRlciBieSBzdWJtb2R1bGVzIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlIGRhdGEgZnJvbSBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklleHRyYWN0IGRhdGEgZnJvbSBhIHJlcXVlc3QgdGhhdCB3YXMgYWRkZWQgcHJldmlvdXNseSBieSBhIHBhcmVudCBcZkJtb2R1bGVcZlAgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSByZXF1ZXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSBidW5jaCBvZiByZXF1ZXN0cyAoYWxsIGRhdGEgaW4gdGhlIGNoYWluKS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9maW5kX2hhbmRsZXJfYnlfbmFtZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyBhIGhhbmRsZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgYSBoYW5kbGVyJ3Mgdm9pZCAqIHBvaW50ZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaGFuZGxlcl9mcmVlX2NhbGxiYWNrXGZQICh2b2lkICpoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lXGZQIChjb25zdCBjaGFyICpuYW1lLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSBnaXZlbiBoYW5kbGVyIGJ5IG5hbWUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3RcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNsZWFycyB0aGUgZW50aXJlIGhhbmRsZXItcmVnaXN0cmF0aW9uIGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5qZWN0X2hhbmRsZXJfaW50b19zdWJ0cmVlXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnRwLCBjb25zdCBjaGFyICpuYW1lLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBjb25zdCBjaGFyICpiZWZvcmVfd2hhdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwYXJzZV9pbmplY3RIYW5kbGVyX2NvbmZcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9oYW5kbGVyX2NvbmZcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2hhbmRsZXJfZ2V0X3BhcmVudF9kYXRhXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqLCBjb25zdCBjaGFyICopIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIGJhc2ljIHRoZW9yeSBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6IEluIHRoZSBwYXN0LCB3aXRoIHRoZSBvcmlnaW5hbCBtaWIgXGZCbW9kdWxlXGZQIGFwaSAod2hpY2ggZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBDTVUgU05NUCBjb2RlKSB0aGUgdW5kZXJseWluZyBtaWIgbW9kdWxlcyB3ZXJlIHBhc3NlZCB2ZXJ5IGxpdHRsZSBpbmZvcm1hdGlvbiAob25seSB0aGUgdHJ1bHkgbW9zdCBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCBhIHJlcXVlc3QpLiAKLQotVGhpcyB3b3JrZWQgd2VsbCBhdCB0aGUgdGltZSBidXQgaW4gdG9kYXlzIHdvcmxkIG9mIHN1YmFnZW50cywgZGV2aWNlIGluc3RydW1lbnRhdGlvbiwgbG93IHJlc291cmNlIGNvbnN1bXB0aW9uLCBldGMsIGl0IGp1c3QgaXNuJ3QgZmxleGlibGUgZW5vdWdoLiAnaGFuZGxlcnMnIGFyZSBoZXJlIHRvIGZpeCBhbGwgdGhhdC4KLS5QUAotV2l0aCB0aGUgcmV3cml0ZSBvZiB0aGUgYWdlbnQgaW50ZXJuYWxzIGZvciB0aGUgbmV0LXNubXAgNS4wIHJlbGVhc2UsIHdlIGludHJvZHVjZSBhIG1vZHVsYXIgY2FsbGluZyBzY2hlbWUgdGhhdCBhbGxvd3MgYWdlbnQgbW9kdWxlcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBmbGV4aWJsZSBtYW5uZXIsIGFuZCBtb3JlIGltcG9ydGFudGx5IGFsbG93cyByZXVzZSBvZiBjb2RlIGluIGEgZGVjZW50IHdheSAoYW5kIHdpdGhvdXQgdGhlIG1lbW9yeSBhbmQgc3BlZWQgb3ZlcmhlYWRzIG9mIE9PIGxhbmd1YWdlcyBsaWtlIEMrKykuCi0uUFAKLUZ1bmN0aW9uYWxseSwgdGhlIG5vdGlvbiBvZiB3aGF0IGEgaGFuZGxlciBkb2VzIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGRlciBhcGk6IEEgaGFuZGxlciBpcyBcZkJjcmVhdGVkXGZQIGFuZCB0aGVuIFxmQnJlZ2lzdGVyZWRcZlAgd2l0aCB0aGUgbWFpbiBhZ2VudCBhdCBhIGdpdmVuIE9JRCBpbiB0aGUgT0lEIFxmQnRyZWVcZlAgYW5kIGdldHMgY2FsbGVkIGFueSB0aW1lIGEgcmVxdWVzdCBpcyBtYWRlIHRoYXQgaXQgc2hvdWxkIHJlc3BvbmQgdG8uIFlvdSBwcm9iYWJseSBzaG91bGQgdXNlIG9uZSBvZiB0aGUgY29udmVuaWVuY2UgaGVscGVycyBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2UgeW91cnNlbGYgdGhvdWdoOgotLlBQCi1Nb3N0IGltcG9ydGFudGx5LCB0aG91Z2gsIGlzIHRoYXQgdGhlIGhhbmRsZXJzIGFyZSBidWlsdCBvbiB0aGUgbm90aW9uIG9mIG1vZHVsYXJpdHkgYW5kIHJldXNlLiBTcGVjaWZpY2FsbHksIHJhdGhlciB0aGFuIGRvIGFsbCB0aGUgcmVhbGx5IGhhcmQgd29yayAobGlrZSBwYXJzaW5nIHRhYmxlIGluZGV4ZXMgb3V0IG9mIGFuIGluY29taW5nIG9pZCByZXF1ZXN0KSBpbiBlYWNoIFxmQm1vZHVsZVxmUCwgdGhlIEFQSSBpcyBkZXNpZ25lZCB0byBtYWtlIGl0IGVhc3kgdG8gd3JpdGUgJ2hlbHBlcicgaGFuZGxlcnMgdGhhdCBtZXJlbHkgcHJvY2VzcyBzb21lIGFzcGVjdCBvZiB0aGUgcmVxdWVzdCBiZWZvcmUgcGFzc2luZyBpdCBhbG9uZyB0byB0aGUgZmluYWwgaGFuZGxlciB0aGF0IHJldHVybnMgdGhlIHJlYWwgYW5zd2VyLiBNb3N0IHBlb3BsZSB3aWxsIHdhbnQgdG8gbWFrZSB1c2Ugb2YgdGhlIFxmQmluc3RhbmNlXGZQLCBcZkJ0YWJsZVxmUCwgXGZCdGFibGVfaXRlcmF0b3JcZlAsIFxmQnRhYmxlX2RhdGFcZlAsIG9yIFxmQnRhYmxlX2RhdGFzZXRcZlAgaGVscGVycyB0byBtYWtlIHRoZWlyIGxpZmUgZWFzaWVyLiBUaGVzZSAnaGVscGVycycgaW50ZXJwZXJ0IGltcG9ydGFudCBhc3BlY3RzIG9mIHRoZSByZXF1ZXN0IGFuZCBwYXNzIHRoZW0gb24gdG8geW91LgotLlBQCi1Gb3IgaW5zdGFuY2UsIHRoZSBcZkJ0YWJsZVxmUCBoZWxwZXIgaXMgZGVzaWduZWQgdG8gaGFuZCB5b3UgYSBsaXN0IG9mIGV4dHJhY3RlZCBpbmRleCB2YWx1ZXMgZnJvbSBhbiBpbmNvbWluZyByZXF1ZXN0LiBUSGUgXGZCdGFibGVfaXRlcmF0b3JcZlAgaGVscGVyIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUgdGFibGUgaGVscGVyLCBhbmQgaXMgZGVzaWduZWQgdG8gaGVscCB5b3UgaXRlcmF0ZSB0aHJvdWdoIGRhdGEgc3RvcmVkIGVsc2V3aGVyZSAobGlrZSBpbiBhIGtlcm5lbCkgdGhhdCBpcyBub3QgaW4gT0lEIGxleG9ncmFwaGljYWwgb3JkZXIgKGllLCBkb24ndCB3cml0ZSB5b3VyIG93biBpbmRleC9vaWQgc29ydGluZyByb3V0aW5lLCB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZCkuIFRoZSBiZWF1dHkgb2YgdGhlIFxmQnRhYmxlX2l0ZXJhdG9yIGhlbHBlclxmUCwgYXMgd2VsbCBhcyB0aGUgXGZCaW5zdGFuY2VcZlAgaGVscGVyIGlzIHRoYXQgdGhleSB0YWtlIGNhcmUgb2YgdGhlIGNvbXBsZXggR0VUTkVYVCBwcm9jZXNzaW5nIGVudGlyZWx5IGZvciB5b3UgYW5kIGhhbmQgeW91IGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gbWVyZWx5IHJldHVybiB0aGUgZGF0YSBhcyBpZiBpdCB3YXMgYSBHRVQgcmVxdWVzdC4gTXVjaCBsZXNzIGNvZGUgYW5kIGhhaXIgcHVsbGluZy4gSSd2ZSBwdWxsZWQgYWxsIG15IGhhaXIgb3V0IHRvIGhlbHAgeW91IHNvIHRoYXQgb25seSBvbmUgb2YgdXMgaGFzIHRvIGJlIGJhbGQuIAotLlNIICJUeXBlZGVmIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCIKLS5QUAotVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiAKLS5TUyAic3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQIgotLlBQCi1UeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfbWliX2hhbmRsZXIuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9jYWxsX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBuZXh0X2hhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1jYWxscyBhIGhhbmRsZXIgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcgb2YgYXJndW1lbnRzLCBldGMuIAotLlNTICJpbnQgbmV0c25tcF9jYWxsX25leHRfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGN1cnJlbnQsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1jYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gCi0uU1MgImludCBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyX29uZV9yZXF1ZXN0IChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogY3VycmVudCwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZywgZXRjLiAKLS5TUyAidm9pZCBuZXRzbm1wX2NsZWFyX2hhbmRsZXJfbGlzdCAodm9pZCkiCi0uUFAKLWNsZWFycyB0aGUgZW50aXJlIGhhbmRsZXItcmVnaXN0cmF0aW9uIGxpc3QgCi0uU1MgIlxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cywgdm9pZCAqIGxvY2FsaW5mbykiCi0uUFAKLWNyZWF0ZXMgYSBjYWNoZSBvZiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgc2F2ZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuIFVzZSBcZkJuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGUoKVxmUCBsYXRlciB0byBtYWtlIHN1cmUgaXQncyBzdGlsbCB2YWxpZCBiZWZvcmUgcmVmZXJlbmNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgKGNvbnN0IGNoYXIgKiBuYW1lLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIGhhbmRsZXJfYWNjZXNzX21ldGhvZCkiCi0uUFAKLWNyZWF0ZXMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdHVyZSBnaXZlbiBhIG5hbWUgYW5kIGEgYWNjZXNzIG1ldGhvZC4gVGhlIHJldHVybmVkIGhhbmRsZXIgc2hvdWxkIHRoZW4gYmUgXGZCcmVnaXN0ZXJlZC5cZlAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluYW1lXGZQIGlzIHRoZSBoYW5kbGVyIG5hbWUgYW5kIGlzIGNvcGllZCB0aGVuIGFzc2lnbmVkIHRvIG5ldHNubXBfbWliX2hhbmRsZXItPmhhbmRsZXJfbmFtZQotLmJyCi1cZkloYW5kbGVyX2FjY2Vzc19tZXRob2RcZlAgaXMgYSBmdW5jdGlvbiBwb2ludGVyIHVzZWQgYXMgdGhlIGFjY2VzcyBtZXRob2QgZm9yIHRoaXMgaGFuZGxlciByZWdpc3RyYXRpb24gaW5zdGFuY2UgZm9yIHdoYXRldmVyIHJlcXVpcmVkIG5lZWRzLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBwb2ludGVyIHRvIGEgcG9wdWxhdGVkIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0IHRvIGJlIHJlZ2lzdGVyZWQKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1uZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpIAotLlBQCi1cZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCAKLS5SRQotLlBQCi0KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIG5ldHNubXBfZmluZF9oYW5kbGVyX2J5X25hbWUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLVJldHVybnMgYSBoYW5kbGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4gCi0uU1MgInZvaWQgKiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLVJldHVybnMgYSBoYW5kbGVyJ3Mgdm9pZCAqIHBvaW50ZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmFsIHB1YmxpYyBhcyB0aGUgdm9pZCAqIGRhdGEgbWF5IGNoYW5nZSBhcyBhIGhhbmRsZXIgZXZvbHZlcy4gSGFuZGxlcnMgc2hvdWxkIHJlYWxseSBhZHZlcnRpc2Ugc29tZSBmdW5jdGlvbiBmb3IgeW91IHRvIHVzZSBpbnN0ZWFkLiAKLS5TUyAidm9pZCBuZXRzbm1wX2ZyZWVfZGVsZWdhdGVkX2NhY2hlIChcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIGRjYWNoZSkiCi0uUFAKLWZyZWVzIGEgY2FjaGUgb25jZSB5b3UncmUgZmluaXNoZWQgdXNpbmcgaXQgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5TUyAidm9pZCBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSByZXF1ZXN0LiAKLS5TUyAidm9pZCBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldHMgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLUZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgYnVuY2ggb2YgcmVxdWVzdHMgKGFsbCBkYXRhIGluIHRoZSBjaGFpbikuIAotLlNTICJcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSAoXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBkY2FjaGUpIgotLlBQCi1jaGVjaydzIGEgZ2l2ZW4gY2FjaGUgYW5kIHJldHVybnMgaXQgaWYgaXQgaXMgc3RpbGwgdmFsaWQgKGllLCB0aGUgYWdlbnQgc3RpbGwgY29uc2lkZXJzIGl0IHRvIGJlIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QuIFJldHVybnMgTlVMTCBpZiBpdCdzIG5vIGxvbmdlciB2YWxpZC4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIG5ldHNubXBfaGFuZGxlcl9kdXAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyKSIKLS5QUAotZHVwbGljYXRlcyBhIGhhbmRsZXIgYW5kIGFsbCBzdWJzZXF1ZW50IGhhbmRsZXJzIHNlZSBhbHNvIF9jbG9uZV9oYW5kbGVyIAotLlNTICJ2b2lkIG5ldHNubXBfaGFuZGxlcl9mcmVlIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlcikiCi0uUFAKLWZyZWVzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaGFuZGxlciAKLS5QUAotbWFrZSBzdXJlIHdlIGFyZW4ndCBwb2ludGluZyB0byBvdXJzZWx2ZXMuIAotLlNTICJ2b2lkIG5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cywgaW50IGlzZGVsZWdhdGVkKSIKLS5QUAotbWFya3MgYSBsaXN0IG9mIHJlcXVlc3RzIGFzIGRlbGVnYXRlZCAob3Igbm90IGlmIGlzZGVsZWdhZGVkID0gMCkgCi0uU1MgIlxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSAoY29uc3QgY2hhciAqIG5hbWUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCBtb2RlcykiCi0uUFAKLWNyZWF0ZXMgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lLCBhIGFjY2Vzc19tZXRob2QgZnVuY3Rpb24sIGEgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZCBhbmQgdGhlIG1vZGVzIHRoZSBoYW5kbGVyIHN1cHBvcnRzLiBJZiBtb2RlcyA9PSAwLCB0aGVuIG1vZGVzIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgb2Ygb25seSBIQU5ETEVSX0NBTl9ERUZBVUxULCB3aGljaCBpcyBieSBkZWZhdWx0IHJlYWQtb25seSBHRVQgYW5kIEdFVE5FWFQgcmVxdWVzdHMuIEEgaGFuZGVyIHdoaWNoIHN1cHBvcnRzIHNldHMgYnV0IG5vdCByb3cgY3JlYXRpb24gc2hvdWxkIHNldCB1cyBhIG1vZGUgb2YgSEFORExFUl9DQU5fU0VUX09OTFkuIAotLlBQCi1cZkJOb3RlOlxmUAotLlJTIDQKLVRoaXMgZW5kcyB1cCBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKSAKLS5SRQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5hbWVcZlAgaXMgdGhlIGhhbmRsZXIgbmFtZSBhbmQgaXMgY29waWVkIHRoZW4gYXNzaWduZWQgdG8gbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbi0+aGFuZGxlck5hbWUuCi0uYnIKLVxmSWhhbmRsZXJcZlAgaXMgYSBmdW5jdGlvbiBwb2ludGVyIHVzZWQgYXMgdGhlIGFjY2VzcyBtZXRob2QgZm9yIHRoaXMgaGFuZGxlciByZWdpc3RyYXRpb24gaW5zdGFuY2UgZm9yIHdoYXRldmVyIHJlcXVpcmVkIG5lZWRzLgotLmJyCi1cZklyZWdfb2lkXGZQIGlzIHRoZSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkLgotLmJyCi1cZklyZWdfb2lkX2xlblxmUCBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQsIGNhbiB1c2UgdGhlIG1hY3JvLCBPSURfTEVOR1RICi0uYnIKLVxmSW1vZGVzXGZQIGlzIHVzZWQgdG8gY29uZmlndXJlIHJlYWQvd3JpdGUgYWNjZXNzLiBJZiBtb2RlcyA9PSAwLCB0aGVuIG1vZGVzIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgb2Ygb25seSBIQU5ETEVSX0NBTl9ERUZBVUxULCB3aGljaCBpcyBieSBkZWZhdWx0IHJlYWQtb25seSBHRVQgYW5kIEdFVE5FWFQgcmVxdWVzdHMuIFRoZSBvdGhlciB0d28gbW9kZSBvcHRpb25zIGFyZSByZWFkIG9ubHksIEhBTkRMRVJfQ0FOX1JPTkxZLCBhbmQgcmVhZC93cml0ZSwgSEFORExFUl9DQU5fUldSSVRFLgotLlJFCi0uUFAKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVAotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9TRVQKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fR0VUQlVMSwotLlBQCi0uUFAKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fUk9OTFkgKEhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFQpCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX1JXUklURSAoSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVCB8IEhBTkRMRVJfQ0FOX1NFVCkKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fREVGQVVMVCBIQU5ETEVSX0NBTl9ST05MWQotLlBQCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4gTlVMTCBpcyByZXR1cm5lZCBvbmx5IHdoZW4gbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKClcZlAgCi0uUFAKLVxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIAotLlJFCi0uUFAKLQotLlNTICJcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9kdXAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZHVwbGljYXRlcyB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IAotLlNTICJ2b2lkIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1mcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IAotLlNTICJpbnQgbmV0c25tcF9pbmplY3RfaGFuZGxlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyKSIKLS5QUAotaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBUaGUgbmV3IGhhbmRsZXIgaXMgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZpcnN0LiAKLS5TUyAiaW50IG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIGNvbnN0IGNoYXIgKiBiZWZvcmVfd2hhdCkiCi0uUFAKLWluamVjdCBhIG5ldyBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXJzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gVGhlIG5ldyBoYW5kbGVyIGlzIGluamVjdGVkIGFmdGVyIHRoZSBiZWZvcmVfd2hhdCBoYW5kbGVyLCBvciBpZiBOVUxMIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIG5ldyBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmaXJzdC4gCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotcmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIAotLlNTICJ2b2lkIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lIChjb25zdCBjaGFyICogbmFtZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIpIgotLlBQCi1yZWdpc3RlcnMgYSBnaXZlbiBoYW5kbGVyIGJ5IG5hbWUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLiAKLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ub2NhbGxiYWNrIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLXJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAKLS5TUyAidm9pZCBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIG5vZGUpIgotLlBQCi1hZGQgZGF0YSB0byBhIHJlcXVlc3QgdGhhdCBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIGJ5IHN1Ym1vZHVsZXMgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKLS5icgotXGZJXGZCbm9kZVxmUFxmUCB0aGlzIGlzIHRoZSBkYXRhIHRvIGJlIGFkZGVkIHRvIHRoZSBsaW5rZWQgbGlzdCByZXF1ZXN0LT5wYXJlbnRfZGF0YQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZCAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlNTICJ2b2lkICogbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1leHRyYWN0IGRhdGEgZnJvbSBhIHJlcXVlc3QgdGhhdCB3YXMgYWRkZWQgcHJldmlvdXNseSBieSBhIHBhcmVudCBcZkJtb2R1bGVcZlAgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBmdW5jdGlvbgotLmJyCi1cZkluYW1lXGZQIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSByZXF1ZXN0LT5wYXJlbnRfZGF0YS0+bmFtZSB2YWx1ZSwgaWYgYSBtYXRjaCBpcyBmb3VuZCByZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSBpcyByZXR1cm5lZAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSB2b2lkIHBvaW50ZXIocmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEpLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZCBpZiByZXF1ZXN0IGlzIE5VTEwgb3IgcmVxdWVzdC0+cGFyZW50X2RhdGEgaXMgTlVMTCBvciByZXF1ZXN0LT5wYXJlbnRfZGF0YSBvYmplY3QgaXMgbm90IGZvdW5kLiAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlNTICJpbnQgbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1yZW1vdmUgZGF0YSBmcm9tIGEgcmVxdWVzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZQotLmJyCi1cZkluYW1lXGZQIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHByZXZpb3VzbHkgYWRkZWQgZGF0YQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBvbiBzdWNjZXNzZnVsIGZpbmQtYW5kLWRlbGV0ZSwgMSBvdGhlcndpc2UuIAotLlJFCi0uUFAKLQotLlNTICJpbnQgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotdW5yZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfaW5zdGFuY2UuMyBiL21hbi9uZXRzbm1wX2luc3RhbmNlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODc3MjUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfaW5zdGFuY2UuMworKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0uVEggImluc3RhbmNlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotaW5zdGFuY2UgXC0gCi0uUFAKLVByb2Nlc3MgaW5kaXZpZHVhbCBNSUIgaW5zdGFuY2VzIGVhc2lseS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlciwgY2FsbHMgbmV0c25tcF9jcmVhdGVfaGFuZGxlciwgd2hpY2ggdGhlbiBjb3VsZCBiZSByZWdpc3RlcmVkLCB1c2luZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW4gaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIsIHdoaWNoIGlzIGEgd2F5IG9mIHJlZ2lzdGVyaW5nIGFuIGV4YWN0IE9JRCBzdWNoIHRoYXQgR0VORVhUIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGVudGlyZWx5IGJ5IHRoZSBoZWxwZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGluamVjdHMgYSAncmVhZCBvbmx5JyBoYW5kbGVyIGludG8gdGhlIGhhbmRsZXIgY2hhaW4gcHJpb3IgdG8gc2VyaWFsaXppbmcvcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91aW50X2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdW5zaWduZWQgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3VpbnRfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1bnNpZ25lZCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbnVtX2ZpbGVfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBjaGFyICpmaWxlX25hbWUsIGludCBhc25fdHlwZSwgaW50IG1vZGUsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGFuIGludCBoZWxwZXIgaGFuZGxlciB0byBhIHNwZWNpZmllZCBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUHJvY2VzcyBpbmRpdmlkdWFsIE1JQiBpbnN0YW5jZXMgZWFzaWx5LiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlciAodm9pZCkiCi0uUFAKLUNyZWF0ZXMgYW4gaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIsIGNhbGxzIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIsIHdoaWNoIHRoZW4gY291bGQgYmUgcmVnaXN0ZXJlZCwgdXNpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAuIFxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgaGFuZGxlcidzIG5hbWUgYW5kIHRoZSBhY2Nlc3MgbWV0aG9kIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDggb2YgZmlsZSBpbnN0YW5jZS5jLgotLlNTICJpbnQgbmV0c25tcF9pbnN0YW5jZV9udW1fZmlsZV9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWZhbGwgdGhyb3VnaCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc0MiBvZiBmaWxlIGluc3RhbmNlLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCB3aGljaCBpcyBhIHdheSBvZiByZWdpc3RlcmluZyBhbiBleGFjdCBPSUQgc3VjaCB0aGF0IEdFTkVYVCByZXF1ZXN0cyBhcmUgaGFuZGxlZCBlbnRpcmVseSBieSB0aGUgaGVscGVyLiBGaXJzdCBuZWVkIHRvIGluamVjdCBpdCBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVyIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0LCByZWdpbmZvLiBUaGUgbmV3IGhhbmRsZXIgaXMgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZpcnN0LiBUaGlzIGZ1bmN0aW9uIGFsc28gaW5qZWN0cyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGJlZm9yZSBhY3R1YWxseSBjYWxsaW5nIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlLCByZWdpc3RlcmluZyByZWdpbmZvLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlZ2luZm9cZlAgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgd2hpY2ggY291bGQgZ2V0IGNyZWF0ZWQgdXNpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24uIFVzZWQgdG8gcmVnaXN0ZXIgYW4gaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRCBhbmQgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MyBvZiBmaWxlIGluc3RhbmNlLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZSAoY29uc3QgY2hhciAqIG5hbWUsIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICogaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikiCi0uUFAKLVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGFuIGludCBoZWxwZXIgaGFuZGxlciB0byBhIHNwZWNpZmllZCBPSUQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmFtZVxmUCB0aGUgbmFtZSB1c2VkIGZvciByZWdpc3RyYXRpb24gcHJ1cG9zZXMuCi0uYnIKLVxmSXJlZ19vaWRcZlAgdGhlIE9JRCB3aGVyZSB5b3Ugd2FudCB0byByZWdpc3RlciB5b3VyIGludGVnZXIgYXQKLS5icgotXGZJcmVnX29pZF9sZW5cZlAgdGhlIGxlbmd0aCBvZiB0aGUgT0lECi0uYnIKLVxmSWl0XGZQIHRoZSBpbnRlZ2VyIHZhbHVlIHRvIGJlIHJlZ2lzdGVyZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uCi0uYnIKLVxmSXN1YmhhbmRsZXJcZlAgYSBoYW5kbGVyIHRvIGRvIHdoYXRldmVyIHlvdSB3YW50IHRvIGRvLCBvdGhlcndpc2UgdXNlIE5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0IGludCBoYW5kbGVyLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQgYW5kIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ2MSBvZiBmaWxlIGluc3RhbmNlLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGluamVjdHMgYSAncmVhZCBvbmx5JyBoYW5kbGVyIGludG8gdGhlIGhhbmRsZXIgY2hhaW4gcHJpb3IgdG8gc2VyaWFsaXppbmcvcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXIuIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcyAncmVhZCBvbmx5JyBoYW5kbGVyIGlzIHRvIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBmb3IgYW55IHJlcXVlc3RzIHBhc3NlZCB0byBpdCBpbiBhIFNFVCBtb2RlLiBJbnNlcnRpbmcgaXQgaW50byB5b3VyIGhhbmRsZXIgY2hhaW4gd2lsbCBlbnN1cmUgeW91J3JlIG5ldmVyIGFza2VkIHRvIHBlcmZvcm0gYSBTRVQgcmVxdWVzdCBzbyB5b3UgY2FuIGlnbm9yZSB0aG9zZSBlcnJvciBjb25kaXRpb25zLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlZ2luZm9cZlAgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgd2hpY2ggY291bGQgZ2V0IGNyZWF0ZWQgdXNpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24uIFVzZWQgdG8gcmVnaXN0ZXIgYSByZWFkIG9ubHkgaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRCBhbmQgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAwIG9mIGZpbGUgaW5zdGFuY2UuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzBiY2MwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLlRIICJpdGVyYXRvcl9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1pdGVyYXRvcl9pbmZvX3MgXC0gCi0uUFAKLUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQIFxmQmNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9Mb29wX0tleSAqIFxmQmdldF9maXJzdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0xvb3BfS2V5ICogXGZCZ2V0X25leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9Mb29wX0RhdGEgKiBcZkJnZXRfZGF0YVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0RhdGEgKiBcZkJmcmVlX3VzZXJfY3R4XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfQ3R4ICogXGZCaW5pdF9sb29wX2N0eFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0N0eCAqIFxmQmNsZWFudXBfbG9vcF9jdHhcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9DdHhfRHVwICogXGZCc2F2ZV9wb3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9EYXRhICogXGZCcmVsZWFzZV9kYXRhXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfRGF0YSAqIFxmQmluc2VydF9kYXRhXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfRGF0YSAqIFxmQnJlbW92ZV9kYXRhXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfT3AgKiBcZkJnZXRfc2l6ZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc29ydGVkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJ1c2VyX2N0eFxmUCIKLS5icgotLlJJICJcZklUaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBoYW5kbGVycyB0byBzdG9yZSBhbnkgaW5mb3JtYXRpb24gdGhleSBuZWVkLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiAKLQotVGhlIGl0ZXJhdG9yX2luZm8gdHlwZWRlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgdGhpcyBzdHJ1Y3QgaWYgeW91IHdvdWxkIHByZWZlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzOSBvZiBmaWxlIGNvbnRhaW5lcl9pdGVyYXRvci5jLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkKiBcZkJpdGVyYXRvcl9pbmZvX3M6OnVzZXJfY3R4XGZQIgotLlBQCi1UaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBoYW5kbGVycyB0byBzdG9yZSBhbnkgaW5mb3JtYXRpb24gdGhleSBuZWVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY5IG9mIGZpbGUgY29udGFpbmVyX2l0ZXJhdG9yLmMuCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9sZWFmLjMgYi9tYW4vbmV0c25tcF9sZWFmLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YjY5YTAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbGVhZi4zCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLlRIICJsZWFmX2hhbmRsZXJzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbGVhZl9oYW5kbGVycyBcLSAKLS5QUAotUHJvY2VzcyBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBBIGdyb3VwIG9mIGhhbmRsZXJzIHRvIGltcGxlbWVudCBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIChib3RoIHNjYWxhciBvYmplY3RzLCBhbmQgaW5kaXZpZHVhbCBvYmplY3RzIGFuZCBpbnN0YW5jZXMgd2l0aGluIGEgdGFibGUpLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJpbnN0YW5jZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUHJvY2VzcyBpbmRpdmlkdWFsIE1JQiBpbnN0YW5jZXMgZWFzaWx5LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnNjYWxhclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUHJvY2VzcyBzY2FsYXJzIGVhc2lseS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJzY2FsYXJfZ3JvdXBcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVByb2Nlc3MgZ3JvdXBzIG9mIHNjYWxhcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCd2F0Y2hlclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJV2F0Y2ggYSBzcGVjaWZpZWQgXGZCdmFyaWFibGVcZlAgYW5kIHByb2Nlc3MgaXQgYXMgYW4gaW5zdGFuY2Ugb3Igc2NhbGFyIG9iamVjdC4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVByb2Nlc3MgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgQSBncm91cCBvZiBoYW5kbGVycyB0byBpbXBsZW1lbnQgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgYW5kIGluc3RhbmNlcyAoYm90aCBzY2FsYXIgb2JqZWN0cywgYW5kIGluZGl2aWR1YWwgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIHdpdGhpbiBhIHRhYmxlKS4gCi0KLVRoZXNlIGhhbmRsZXJzIHdpbGwgdHlwaWNhbGx5IGFsbG93IGNvbnRyb2wgdG8gYmUgcGFzc2VkIGRvd24gdG8gYSBsb3dlciBsZXZlbCwgdXNlci1wcm92aWRlZCBoYW5kbGVyLCBidXQgdGhpcyBpcyAodXN1YWxseSkgb3B0aW9uYWwuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2xpYnJhcnkuMyBiL21hbi9uZXRzbm1wX2xpYnJhcnkuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA5NmQzOC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9saWJyYXJ5LjMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzAgKzAsMCBAQAotLlRIICJUaGUgTmV0LVNOTVAgbGlicmFyeSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLVRoZSBOZXQtU05NUCBsaWJyYXJ5IFwtIAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNubXBfaW50ZXJuYWxfc2Vzc2lvblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc2Vzc2lvbl9saXN0XGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCYXNuMSBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklOb3RlIG9uLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQkEgZ2VuZXJpYyBjYWxsYmFjayBtZWNoYW5pc21cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCZ2VuZXJpYyBsaW5rZWQtbGlzdCBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdHJpbmcgYXMgYSBrZXkuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQnN0b3JhZ2Ugc3BhY2UgZm9yIGRlZmF1bHRzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklUaGUgcHVycG9zZSBvZiB0aGUgZGVmYXVsdCBzdG9yYWdlIGlzIHRocmVlLWZvbGQ6LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm1pYiBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQlN0b3JlIGFuZCByZXRyaWV2ZSBkYXRhIHJlZmVyZW5jZWQgYnkgYW4gT0lELlxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJVGhpcyBpcyBlc3NlbnRpYWxseSBhIHdheSBvZiBzdG9yaW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHJ1biB0aW1lXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklUaGUgcmVhZF9jb25maWcgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGEgZmFpcmx5IGV4dGVuc2libGUgc3lzdGVtIG9mIHBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBydW4gdGltZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJnZW5lcmljIGxpYnJhcnkgYmFzZWQgYWxhcm0gdGltZXJzIGZvciB2YXJpb3VzIHBhcnRzIG9mIGFuIGFwcGxpY2F0aW9uXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQnZhcmlvdXMgUERVIHByb2Nlc3Npbmcgcm91dGluZXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCZ2VuZXJpYyBsb2dnaW5nIGZvciBuZXQtc25tcFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJNZW1vcnkgVXRpbGl0eSBSb3V0aW5lc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlOXGZQKGEsIGIpICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9DTElFTlRTX0FSRV9FVklMXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQl9pbml0X2FnZW50X2NhbGxiYWNrX3RyYW5zcG9ydFxmUCgpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9ORUVEX1JFUVVFU1RfTElTVFxmUCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQnRpbWVyY21wXGZQKHR2cCwgdXZwLCBjbXApIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCdGltZXJjbGVhclxmUCh0dnApICAgKHR2cCktPnR2X3NlYyA9ICh0dnApLT50dl91c2VjID0gMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1BWF9QQUNLRVRfTEVOR1RIXGZQICAgKDB4N2ZmZmZmZmYpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOXGZQICAgNSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkJTRDRfMlxmUCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfQ09NTVVOSVRZXGZQICAgJ3B1YmxpYyciCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX1JFVFJJRVNcZlAgICA1IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9USU1FT1VUXGZQICAgMTAwMDAwMEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX1JFTVBPUlRcZlAgICBTTk1QX1BPUlQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX0VOVEVSUFJJU0VcZlAgICBkZWZhdWx0X2VudGVycHJpc2UiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX1RJTUVcZlAgICAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUFYSU1VTV9QQUNLRVRfU0laRVxmUCAgIDB4N2ZmZmZmZmYiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUJVR1BSSU5UUERVVFlQRVxmUCh0b2tlbiwgdHlwZSkgICBERUJVR0RVTVBTRUNUSU9OKHRva2VuLCBzbm1wX3BkdV90eXBlKHR5cGUpKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkVSUk9SX1NUQVRfTEVOR1RIXGZQICAgMTEiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJpbml0X2FnZW50XGZQIChjb25zdCBjaGFyICphcHApIgotLmJyCi0uUkkgIlxmSUluaXRpYWxpemUgdGhlIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2h1dGRvd25fYWdlbnRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCYWRkX3RvX2luaXRfbGlzdFxmUCAoY2hhciAqbW9kdWxlX2xpc3QpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzaG91bGRfaW5pdFxmUCAoY29uc3QgY2hhciAqbW9kdWxlX25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2J1aWxkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqcHNzLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9nZXRfZXJybm9cZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zeW5jaF9yZXNldFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpub3R1c2VkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc3luY2hfc2V0dXBcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqbm90dXNlZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQnN0cmVycm9yXGZQIChpbnQgZXJyKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCc25tcF9wZHVfdHlwZVxmUCAoaW50IHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc25tcF9nZXRfbmV4dF9yZXFpZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzbm1wX2dldF9uZXh0X21zZ2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNubXBfZ2V0X25leHRfc2Vzc2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNubXBfZ2V0X25leHRfdHJhbnNpZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3BlcnJvclxmUCAoY29uc3QgY2hhciAqcHJvZ19zdHJpbmcpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXRfZGV0YWlsXGZQIChjb25zdCBjaGFyICpkZXRhaWxfc3RyaW5nKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCc25tcF9hcGlfZXJyc3RyaW5nXGZQIChpbnQgc25tcF9lcnJudW1iZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lcnJvclxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpwc2VzcywgaW50ICpwX2Vycm5vLCBpbnQgKnBfc25tcF9lcnJubywgY2hhciAqKnBfc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2Vzc19lcnJvclxmUCAodm9pZCAqc2Vzc3AsIGludCAqcF9lcnJubywgaW50ICpwX3NubXBfZXJybm8sIGNoYXIgKipwX3N0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yXGZQIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2Vzc19wZXJyb3JcZlAgKGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2Vzc19pbml0XGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF9zbm1wXGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLlJJICJcZklDYWxscyB0aGUgZnVuY3Rpb25zIHRvIGRvIGNvbmZpZyBmaWxlIGxvYWRpbmcgYW5kIG1pYiBcZkJtb2R1bGVcZlAgcGFyc2luZyBpbiB0aGUgY29ycmVjdCBvcmRlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc3RvcmVcZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zaHV0ZG93blxmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS5SSSAiXGZJU2h1dHMgZG93biB0aGUgYXBwbGljYXRpb24sIHNhdmluZyBhbnkgbmVlZGVkIHBlcnNpc3RlbnQgc3RvcmFnZSwgYW5kIGFwcHJvcHJpYXRlIGNsZWFuIHVwLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfb3BlblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX29wZW5fZXhcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgaW50KCpmcHJlX3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBpbnQpLCBpbnQoKmZwYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QpLCBpbnQoKmZwb3N0X3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSwgaW50KCpmYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90ICopLCBpbnQoKmZyYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiosIHNpemVfdCAqLCBzaXplX3QgKiksIGludCgqZmNoZWNrKSh1X2NoYXIgKiwgc2l6ZV90KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19lbmdpbmVJRF9wcm9iZVxmUCAoc3RydWN0IFxmQnNlc3Npb25fbGlzdFxmUCAqc2xwLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKmluX3Nlc3Npb24pIgotLmJyCi0uUkkgIlxmSXByb2JlIGZvciBwZWVyIGVuZ2luZUlEIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9hZGRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqaW5fc2Vzc2lvbiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnRyYW5zcG9ydCwgaW50KCpmcHJlX3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBpbnQpLCBpbnQoKmZwb3N0X3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9hZGRfZnVsbFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICppbl9zZXNzaW9uLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdHJhbnNwb3J0LCBpbnQoKmZwcmVfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIGludCksIGludCgqZnBhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCksIGludCgqZnBvc3RfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpLCBpbnQoKmZidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QgKiksIGludCgqZnJidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqKiwgc2l6ZV90ICosIHNpemVfdCAqKSwgaW50KCpmY2hlY2spKHVfY2hhciAqLCBzaXplX3QpLCBcZkJuZXRzbm1wX3BkdVxmUCAqKCpmY3JlYXRlX3BkdSkoXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBzaXplX3QpKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc25tcF9zZXNzX2FkZF9leFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICppbl9zZXNzaW9uLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdHJhbnNwb3J0LCBpbnQoKmZwcmVfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIGludCksIGludCgqZnBhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCksIGludCgqZnBvc3RfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpLCBpbnQoKmZidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QgKiksIGludCgqZnJidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqKiwgc2l6ZV90ICosIHNpemVfdCAqKSwgaW50KCpmY2hlY2spKHVfY2hhciAqLCBzaXplX3QpLCBcZkJuZXRzbm1wX3BkdVxmUCAqKCpmY3JlYXRlX3BkdSkoXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBzaXplX3QpKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc25tcF9zZXNzX2FkZFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICppbl9zZXNzaW9uLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdHJhbnNwb3J0LCBpbnQoKmZwcmVfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIGludCksIGludCgqZnBvc3RfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc25tcF9zZXNzX29wZW5cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqcHNzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3NfY2xvc2VcZlAgKHZvaWQgKnNlc3NwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jbG9zZVxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jbG9zZV9zZXNzaW9uc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19oZWFkZXJfcmVhbGxvY19yYnVpbGRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX3Njb3BlZFBEVV9oZWFkZXJfcmVhbGxvY19yYnVpbGRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgc2l6ZV90IGJvZHlfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX3BhY2tldF9yZWFsbG9jX3JidWlsZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqcGR1X2RhdGEsIHNpemVfdCBwZHVfZGF0YV9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfcGFja2V0X2J1aWxkXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqcGFja2V0LCBzaXplX3QgKm91dF9sZW5ndGgsIHVfY2hhciAqcGR1X2RhdGEsIHNpemVfdCBwZHVfZGF0YV9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNubXBfcGR1X2J1aWxkXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKmNwLCBzaXplX3QgKm91dF9sZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3BkdV9yZWFsbG9jX3JidWlsZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX3BhcnNlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKmRhdGEsIHNpemVfdCAqbGVuZ3RoLCB1X2NoYXIgKiphZnRlcl9oZWFkZXIsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2VzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19tYWtlX3JlcG9ydFxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgaW50IGVycm9yKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX2dldF9yZXBvcnRfdHlwZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfcGR1X3BhcnNlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKmRhdGEsIHNpemVfdCAqbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzbm1wdjNfc2NvcGVkUERVX3BhcnNlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKmNwLCBzaXplX3QgKmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2VuZFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX3NlbmRcZlAgKHZvaWQgKnNlc3NwLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9hc3luY19zZW5kXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHNubXBfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNiX2RhdGEpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3NfYXN5bmNfc2VuZFxmUCAodm9pZCAqc2Vzc3AsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHNubXBfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNiX2RhdGEpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9mcmVlX3ZhclxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9mcmVlX3ZhcmJpbmRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZnJlZV9wZHVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCc25tcF9jcmVhdGVfc2Vzc19wZHVcZlAgKFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0cmFuc3BvcnQsIHZvaWQgKm9wYXF1ZSwgc2l6ZV90IG9sZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9yZWFkXGZQIChmZF9zZXQgKmZkc2V0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCX3Nlc3NfcmVhZFxmUCAodm9pZCAqc2Vzc3AsIGZkX3NldCAqZmRzZXQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3NfcmVhZFxmUCAodm9pZCAqc2Vzc3AsIGZkX3NldCAqZmRzZXQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NlbGVjdF9pbmZvXGZQIChpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3Nfc2VsZWN0X2luZm9cZlAgKHZvaWQgKnNlc3NwLCBpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF90aW1lb3V0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2Vzc190aW1lb3V0XGZQICh2b2lkICpzZXNzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfb2lkX25jb21wYXJlXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIsIHNpemVfdCBtYXhfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9vaWRfY29tcGFyZVxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLlJJICJcZklsZXhpY29ncmFwaGljYWwgY29tcGFyZSB0d28gb2JqZWN0IGlkZW50aWZpZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9jb21wYXJlX2xsXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIsIHNpemVfdCAqb2ZmcHQpIgotLmJyCi0uUkkgIlxmSWxleGljb2dyYXBoaWNhbCBjb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllcnMgYW5kIHJldHVybiB0aGUgcG9pbnQgd2hlcmUgdGhleSBkaWZmZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9vaWR0cmVlX2NvbXBhcmVcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS5SSSAiXGZJQ29tcGFyZXMgMiBPSURzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVhbCB1cCB1bnRpbCB0aGUgc2hvcnRlc3QgbGVuZ3RoLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX29pZHN1YnRyZWVfY29tcGFyZVxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfZXF1YWxzXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0uUkkgIlxmSUNvbXBhcmVzIDIgT0lEcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXhhY3RseSBlcXVhbC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfaXNfc3VidHJlZVxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLlJJICJcZklJZGVudGljYWwgdG8gbmV0c25tcF9vaWRfZXF1YWxzLCBleGNlcHQgb25seSB0aGUgbGVuZ3RoIHVwIHRvIGxlbjEgaXMgY29tcGFyZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX2ZpbmRfcHJlZml4XGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0uUkkgIlxmSUdpdmVuIHR3byBPSURzLCBkZXRlcm1pbmUgdGhlIGNvbW1vbiBwcmVmaXggdG8gdGhlbSBib3RoLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnNubXBfcGR1X2FkZF92YXJpYWJsZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnZhbHVlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKip2YXJsaXN0LCBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2FkZF92YXJcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLCBjaGFyIHR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc25tcF9zZXNzX3BvaW50ZXJcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9zZXNzX3Nlc3Npb25cZlAgKHZvaWQgKnNlc3NwKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXBcZlAgKHZvaWQgKnNlc3NwKSIKLS5icgotLlJJICJcZklMb29rIHVwIGEgc2Vzc2lvbiB0aGF0IGFscmVhZHkgbWF5IGhhdmUgYmVlbiBjbG9zZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiBcZkJzbm1wX3Nlc3NfdHJhbnNwb3J0XGZQICh2b2lkICpzZXNzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Nlc3NfdHJhbnNwb3J0X3NldFxmUCAodm9pZCAqc3AsIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0KSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJzbm1wX2R1cGxpY2F0ZV9vYmppZFxmUCAoY29uc3Qgb2lkICpvYmpUb0NvcHksIHNpemVfdCBvYmpUb0NvcHlMZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQnNubXBfaW5jcmVtZW50X3N0YXRpc3RpY1xmUCAoaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnlcZlAgKGludCB3aGljaCwgaW50IGNvdW50KSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJzbm1wX2dldF9zdGF0aXN0aWNcZlAgKGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2luaXRfc3RhdGlzdGljc1xmUCAodm9pZCkiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJtb2R1bGVfaW5pdF9saXN0XGZQICogXGZCaW5pdGxpc3RcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJtb2R1bGVfaW5pdF9saXN0XGZQICogXGZCbm9pbml0bGlzdFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogXGZCc3VidHJlZXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJsb25nX3JldHVyblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCcmV0dXJuX2J1ZlxmUCBbMjU4XSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJzdGFydHRpbWVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNhbGxiYWNrX21hc3Rlcl9udW1cZlAgPSAtMSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCbnVsbE9pZFxmUCBbXSA9IHsgMCwgMCB9IgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJudWxsT2lkTGVuXGZQID0gc2l6ZW9mKG51bGxPaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzZXNzaW9uX2xpc3RcZlAgKiBcZkJTZXNzaW9uc1xmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZXJybm9cZlAgPSAwIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRlZmluZSBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICIjZGVmaW5lIHRpbWVyY21wKHR2cCwgdXZwLCBjbXApIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLS8qIENTVFlMRUQgKi8gXAotICAgICAgICAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3NlYyB8fCBcCi0gICAgICAgICgodHZwKS0+dHZfc2VjID09ICh1dnApLT50dl9zZWMgJiYgXAotICAgICAgICAvKiBDU1RZTEVEICovIFwKLSAgICAgICAgKHR2cCktPnR2X3VzZWMgY21wICh1dnApLT50dl91c2VjKSkKLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQ4IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IF9zZXNzX3JlYWQgKHZvaWQgKiBzZXNzcCwgZmRfc2V0ICogZmRzZXQpIgotLlBQCi1YWFgtcmtzOiB3aHkgbm8gU05NUF9GUkVFKGlzcC0+cGFja2V0KTsgPz8KLS5QUAotWFhYLXJrczogd2h5IG5vIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7ID8/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQ0OCBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBpbml0X2FnZW50IChjb25zdCBjaGFyICogYXBwKSIKLS5QUAotSW5pdGlhbGl6ZSB0aGUgYWdlbnQuIENhbGxzIGludG8gaW5pdF9hZ2VudF9yZWFkX2NvbmZpZyB0byBzZXQgdGhhIGFwcCdzIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgYXBwcm9wcmlhdGUgZGVmYXVsdCBzdG9yYWdlIHNwYWNlLCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFLiBOZWVkIHRvIGNhbGwgaW5pdF9hZ2VudCBiZWZvcmUgY2FsbGluZyBpbml0X3NubXAuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYXBwXGZQIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gYmUgcmVhZCBpbiwgZ2V0cyBzdG9yZWQgaW4gZGVmYXVsdCBzdG9yYWdlCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIG5vbi16ZXJvIG9uIGZhaWx1cmUgYW5kIHplcm8gb24gc3VjY2Vzcy4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJpbml0X3NubXBcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzAgb2YgZmlsZSBzbm1wX3ZhcnMuYy4KLS5TUyAidm9pZCBpbml0X3NubXAgKGNvbnN0IGNoYXIgKiB0eXBlKSIKLS5QUAotQ2FsbHMgdGhlIGZ1bmN0aW9ucyB0byBkbyBjb25maWcgZmlsZSBsb2FkaW5nIGFuZCBtaWIgXGZCbW9kdWxlXGZQIHBhcnNpbmcgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCBsYWJlbCBmb3IgdGhlIGNvbmZpZyBmaWxlICd0eXBlJwotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQmluaXRfYWdlbnRcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3ODcgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9vaWRfY29tcGFyZV9sbCAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIsIHNpemVfdCAqIG9mZnB0KSIKLS5QUAotbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVycyBhbmQgcmV0dXJuIHRoZSBwb2ludCB3aGVyZSB0aGV5IGRpZmZlciBDYXV0aW9uOiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb2Z0ZW4gYnkgY29tbWFuZCByZXNwb25kZXIgYXBwbGljYXRpb25zIChpZSwgYWdlbnQpLgotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLS0xIGlmIG5hbWUxIDwgbmFtZTIsIDAgaWYgbmFtZTEgPSBuYW1lMiwgMSBpZiBuYW1lMSA+IG5hbWUyIGFuZCBvZmZwdCA9IGxlbiB3aGVyZSBuYW1lMSAhPSBuYW1lMiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYzODYgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9vaWRfZXF1YWxzIChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uUFAKLUNvbXBhcmVzIDIgT0lEcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXhhY3RseSBlcXVhbC4gVGhpcyBzaG91bGQgYmUgZmFzdGVyIHRoYW4gZG9pbmcgYSBzbm1wX29pZF9jb21wYXJlIGZvciBkaWZmZXJlbnQgbGVuZ3RoIE9JRHMsIHNpbmNlIHRoZSBsZW5ndGggaXMgY2hlY2tlZCBmaXJzdCBhbmQgaWYgIT0gcmV0dXJucyBpbW1lZGlhdGVseS4gTWlnaHQgYmUgdmVyeSBzbGlnaGx5IGZhc3RlciBpZiBsZW5ndGhzIGFyZSA9PS4gCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaW5fbmFtZTFcZlAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuIAotLmJyCi1cZklsZW4xXGZQIGxlbmd0aCBvZiB0aGUgZmlyc3QgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5icgotXGZJaW5fbmFtZTJcZlAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgb2lkLiAKLS5icgotXGZJbGVuMlxmUCBsZW5ndGggb2YgdGhlIHNlY29uZCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBpZiB0aGV5IGFyZSBlcXVhbCwgMSBpZiB0aGV5IGFyZSBub3QuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjQ2NyBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX29pZF9maW5kX3ByZWZpeCAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLlBQCi1HaXZlbiB0d28gT0lEcywgZGV0ZXJtaW5lIHRoZSBjb21tb24gcHJlZml4IHRvIHRoZW0gYm90aC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklpbl9uYW1lMVxmUCBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4gCi0uYnIKLVxmSWxlbjFcZlAgTGVuZ3RoIG9mIHRoZSBmaXJzdCBvaWQuIAotLmJyCi1cZklpbl9uYW1lMlxmUCBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBvaWQuIAotLmJyCi1cZklsZW4yXGZQIExlbmd0aCBvZiB0aGUgc2Vjb25kIG9pZC4gCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1sZW5ndGggb2YgY29tbW9uIHByZWZpeCAwIGlmIG5vIGNvbW1vbiBwcmVmaXgsIC0xIG9uIGVycm9yLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY1MzEgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9vaWRfaXNfc3VidHJlZSAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLlBQCi1JZGVudGljYWwgdG8gbmV0c25tcF9vaWRfZXF1YWxzLCBleGNlcHQgb25seSB0aGUgbGVuZ3RoIHVwIHRvIGxlbjEgaXMgY29tcGFyZWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBkZXRlcm1pbmVzIGlmIGluX25hbWUyIGlzIGVxdWFsIG9yIGEgc3VidHJlZSBvZiBpbl9uYW1lMSAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklpbl9uYW1lMVxmUCBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4gCi0uYnIKLVxmSWxlbjFcZlAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLmJyCi1cZklpbl9uYW1lMlxmUCBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBvaWQuIAotLmJyCi1cZklsZW4yXGZQIGxlbmd0aCBvZiB0aGUgc2Vjb25kIE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIGlmIG9uZSBpcyBhIGNvbW1vbiBwcmVmaXggb2YgdGhlIG90aGVyLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY1MTAgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgc25tcF9vaWRfY29tcGFyZSAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLlBQCi1sZXhpY29ncmFwaGljYWwgY29tcGFyZSB0d28gb2JqZWN0IGlkZW50aWZpZXJzLiBDYXV0aW9uOiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb2Z0ZW4gYnkgY29tbWFuZCByZXNwb25kZXIgYXBwbGljYXRpb25zIChpZSwgYWdlbnQpLgotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLS0xIGlmIG5hbWUxIDwgbmFtZTIsIDAgaWYgbmFtZTEgPSBuYW1lMiwgMSBpZiBuYW1lMSA+IG5hbWUyIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjMzNyBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBzbm1wX29pZHRyZWVfY29tcGFyZSAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLlBQCi1Db21wYXJlcyAyIE9JRHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWFsIHVwIHVudGlsIHRoZSBzaG9ydGVzdCBsZW5ndGguIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaW5fbmFtZTFcZlAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuIAotLmJyCi1cZklsZW4xXGZQIGxlbmd0aCBvZiB0aGUgZmlyc3QgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5icgotXGZJaW5fbmFtZTJcZlAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgb2lkLiAKLS5icgotXGZJbGVuMlxmUCBsZW5ndGggb2YgdGhlIHNlY29uZCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBpZiB0aGV5IGFyZSBlcXVhbCwgMSBpZiBpbl9uYW1lMSBpcyA+IGluX25hbWUyLCBvciAtMSBpZiA8LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY0Mzkgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAqIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCAodm9pZCAqIHNlc3NwKSIKLS5QUAotTG9vayB1cCBhIHNlc3Npb24gdGhhdCBhbHJlYWR5IG1heSBoYXZlIGJlZW4gY2xvc2VkLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXNlc3NwXGZQIE9wYXF1ZSBwb2ludGVyLCByZXR1cm5lZCBieSBzbm1wX3Nlc3Nfb3Blbi4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVBvaW50ZXIgdG8gc2Vzc2lvbiB1cG9uIHN1Y2Nlc3Mgb3IgTlVMTCB1cG9uIGZhaWx1cmUuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotc25tcF9zZXNzX3Nlc3Npb24oKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcxOTcgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJ2b2lkIHNubXBfc2h1dGRvd24gKGNvbnN0IGNoYXIgKiB0eXBlKSIKLS5QUAotU2h1dHMgZG93biB0aGUgYXBwbGljYXRpb24sIHNhdmluZyBhbnkgbmVlZGVkIHBlcnNpc3RlbnQgc3RvcmFnZSwgYW5kIGFwcHJvcHJpYXRlIGNsZWFuIHVwLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgTGFiZWwgZm9yIHRoZSBjb25maWcgZmlsZSAndHlwZScgdXNlZAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1MyBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBzbm1wdjNfZW5naW5lSURfcHJvYmUgKHN0cnVjdCBcZkJzZXNzaW9uX2xpc3RcZlAgKiBzbHAsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIGluX3Nlc3Npb24pIgotLlBQCi1wcm9iZSBmb3IgcGVlciBlbmdpbmVJRCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXNscFxmUCBzZXNzaW9uIGxpc3QgcG9pbnRlci4gCi0uYnIKLVxmSWluX3Nlc3Npb25cZlAgc2Vzc2lvbiBmb3IgZXJyb3JzCi0uUkUKLS5QUAotXGZCTm90ZTpcZlAKLS5SUyA0Ci0uSVAgIlwoYnUiIDIKLWNhbGxlZCBieSBfc2Vzc19vcGVuKCksIHNubXBfc2Vzc19hZGRfZXgoKQotLklQICJcKGJ1IiAyCi1pbl9zZXNzaW9uIGlzIHRoZSB1c2VyIHN1cHBsaWVkIHNlc3Npb24gcHJvdmlkZWQgdG8gdGhvc2UgZnVuY3Rpb25zLgotLklQICJcKGJ1IiAyCi10aGUgZmlyc3Qgc2Vzc2lvbiBpbiBzbHAgc2hvdWxkIHRoZSBpbnRlcm5hbCBhbGxvY2F0ZWQgY29weSBvZiBpbl9zZXNzaW9uCi0uUFAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgOiBlcnJvciAKLS5QUAotMSA6IG9rIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI3OCBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxZGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYKQEAgLTAsMCArMSwzMDkgQEAKKy5USCBORVRTTk1QX01JQl9BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorYWRkX21pYmRpciwKK25ldHNubXBfaW5pdF9taWIsCitzaHV0ZG93bl9taWIsCituZXRzbm1wX3JlYWRfbW9kdWxlLAorcmVhZF9taWIsCityZWFkX2FsbF9taWJzLAorYWRkX21vZHVsZV9yZXBsYWNlbWVudCwKK3NubXBfc2V0X21pYl9lcnJvcnMsCitzbm1wX3NldF9taWJfd2FybmluZ3MsCitzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucywKK3JlYWRfb2JqaWQsCitzbm1wX3BhcnNlX29pZCwKK2dldF9tb2R1bGVfbm9kZSwKK3ByaW50X21pYiwKK3ByaW50X29iamlkLAorZnByaW50X29iamlkLAorc25wcmludF9vYmppZCwKK3ByaW50X2Rlc2NyaXB0aW9uLAorZnByaW50X2Rlc2NyaXB0aW9uLAorc25wcmludF9kZXNjcmlwdGlvbiAtIG5ldHNubXBfbWliX2FwaSBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldFwtc25tcC9taWJfYXBpLmg+CisuUFAKKy5TUyBJbml0aWFsaXNhdGlvbiBhbmQgU2h1dGRvd24KKy5CSSAiaW50IGFkZF9taWJkaXIoY29uc3QgY2hhciAqIiAiZGlybmFtZSIgKTsKKy5QUAorLkIgInZvaWQgbmV0c25tcF9pbml0X21pYih2b2lkKTsKKy5cIi5icgorLlwiLkJJICJ2b2lkIGluaXRfbWliKHZvaWQpOyIgICIgICAgICAgICAgICAgICAgKGRlcHJlY2F0ZWQpIgorLlwiLmJyCisuXCIuQkkgInZvaWQgaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpOyIgICIgICAgICAgIChkZXByZWNhdGVkKSIKKy5icgorLkIgInZvaWQgc2h1dGRvd25fbWliKHZvaWQpOworLlNTIFJlYWRpbmcgYW5kIFBhcnNpbmcgTUlCcworLkJJICJzdHJ1Y3QgdHJlZSAqbmV0c25tcF9yZWFkX21vZHVsZShjb25zdCBjaGFyICoiICJuYW1lIiApOworLmJyCisuXCIuQkkgInN0cnVjdCB0cmVlICpyZWFkX21vZHVsZShjb25zdCBjaGFyICoiICJuYW1lIiAiKTsiICAiICAgICAgICAoZGVwcmVjYXRlZCkiCisuXCIuUFAKKy5CSSAic3RydWN0IHRyZWUgKnJlYWRfbWliKGNvbnN0IGNoYXIgKiIgImZpbGVuYW1lIiApOworLmJyCisuQiAic3RydWN0IHRyZWUgKnJlYWRfYWxsX21pYnModm9pZCk7CisuUFAKKy5CSSAiaW50IGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQoY29uc3QgY2hhciAqIiAib2xkX21vZHVsZSIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiAibmV3X21vZHVsZSIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiAidGFnIiAiLCBpbnQgIiAibGVuIiApOworLlBQCisuQkkgInZvaWQgc25tcF9zZXRfbWliX3dhcm5pbmdzKGludCAiIGxldmVsICk7CisuYnIKKy5CSSAidm9pZCBzbm1wX3NldF9taWJfZXJyb3JzKGludCAiIGxldmVsICk7CisuYnIKKy5CSSAidm9pZCBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyhpbnQgIiBzYXZlICIpOyIKKy5TUyBTZWFyY2hpbmcgdGhlIE1JQiBUcmVlCisuUFAKKy5CSSAiaW50ICByZWFkX29iamlkKGNvbnN0IGNoYXIgKiIgImlucHV0IiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICoiICJvYmppZGxlbiIgKTsKKy5icgorLkJJICJvaWQgKnNubXBfcGFyc2Vfb2lkKGNvbnN0IGNoYXIgKiIgImlucHV0IiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICoiICJvYmppZGxlbiIgKTsKKy5icgorLkJJICJpbnQgIGdldF9tb2R1bGVfbm9kZShjb25zdCBjaGFyICoiICJuYW1lIiAiLCBjb25zdCBjaGFyICoiICJtb2R1bGUiICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgKiIgIm9iamlkbGVuIiApOworLlNTIE91dHB1dAorLlBQCisuQkkgInZvaWQgIHByaW50X21pYihGSUxFICoiICJmcCIgKTsKKy5QUAorLkJJICJ2b2lkICBwcmludF9vYmppZChjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gKTsKKy5icgorLkJJICJ2b2lkIGZwcmludF9vYmppZChGSUxFICoiIGZwICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiKTsiCisuYnIKKy5CSSAiaW50IHNucHJpbnRfb2JqaWQoY2hhciAqIiBidWYgIiwgc2l6ZV90ICIgImxlbiIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIpOyIKKy5QUAorLkJJICJ2b2lkICBwcmludF9kZXNjcmlwdGlvbihjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgaW50ICIgd2lkdGggKTsKKy5icgorLkJJICJ2b2lkIGZwcmludF9kZXNjcmlwdGlvbihGSUxFICoiIGZwICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBpbnQgIiB3aWR0aCApOworLmJyCisuQkkgImludCBzbnByaW50X2Rlc2NyaXB0aW9uKGNoYXIgKiIgYnVmICIsIHNpemVfdCAiICJsZW4iICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBpbnQgIiB3aWR0aCApOworLmJyCisuUFAKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggTUlCIG1vZHVsZXMgZmFsbCBpbnRvIGZvdXIgZ3JvdXBzIC0gdGhvc2UKK2RlYWxpbmcgd2l0aCBpbml0aWFsaXNhdGlvbiBhbmQgc2h1dGRvd24sIHdpdGggcmVhZGluZyBpbiBhbmQgcGFyc2luZworTUlCIGZpbGVzLCB3aXRoIHNlYXJjaGluZyB0aGUgTUlCIHRyZWUsIGFuZCBvdXRwdXQgcm91dGluZXMuCisuU1MgSW5pdGlhbGlzYXRpb24gYW5kIFNodXRkb3duCisuUFAKKy5CIGFkZF9taWJkaXIKK2lzIHVzZWQgdG8gYWRkIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHRvIHRoZSBwYXRoIG9mIGxvY2F0aW9ucyB3aGljaCBhcmUKK3NlYXJjaGVkIGZvciBmaWxlcyBjb250YWluaW5nIE1JQiBtb2R1bGVzLgorTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgbG9hZCB0aGUgTUlCIG1vZHVsZXMgbG9jYXRlZAoraW4gdGhhdCBkaXJlY3RvcnksIGJ1dCBpcyBzaW1wbHkgYW4gaW5pdGlhbGlzYXRpb24gc3RlcCB0byBtYWtlCit0aGVtIGF2YWlsYWJsZSB0bworLkJSIG5ldHNubXBfcmVhZF9tb2R1bGUgLgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY291bnQgb2YgZmlsZXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSwgb3IgYSBcLTEKK2lmIHRoZXJlIGlzIGFuIGVycm9yLiAgCitJdCBzaG91bGQgYmUgY2FsbGVkIFxmSWJlZm9yZVxmUCBpbnZva2luZyBcZkJuZXRzbm1wX2luaXRfbWliXGZQLgorLlBQCisuXCIuQiBpbml0X21pYl9pbnRlcm5hbHMKKy5cInNldHMgdXAgdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIHByZXBhcmF0b3J5IHRvIHJlYWRpbmcgaW4gTUlCCisuXCJtb2R1bGVzLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBcZklhZnRlclxmUCBhbGwgY2FsbHMgdG8KKy5cIi5CUiBhZGRfbWliZGlyICwKKy5cImFuZCBiZWZvcmUgYW55IGNhbGxzIHRvCisuXCIuQlIgbmV0c25tcF9yZWFkX21vZHVsZSAuCisuXCIuUFAKKy5CIG5ldHNubXBfaW5pdF9taWIKK2NvbmZpZ3VyZXMgdGhlIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIHBhdGggKHVzaW5nCisuQiBhZGRfbWliZGlyCispLCBzZXRzIHVwIHRoZSBpbnRlcm5hbCBNSUIgZnJhbWV3b3JrLAorYW5kIHRoZW4gbG9hZHMgdGhlIGFwcHJvcHJpYXRlIE1JQiBtb2R1bGVzICh1c2luZworLkJSIG5ldHNubXBfcmVhZF9tb2R1bGUgIiBhbmQgIiByZWFkX21pYiAiKS4iCitTZWUgdGhlIEVOVklST05NRU5UQUwgVkFSSUFCTEVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCisuYnIKK0l0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlcgorcm91dGluZSB0aGF0IG1hbmlwdWxhdGVzIG9yIGFjY2Vzc2VzIHRoZSBNSUIgdHJlZQorKGJ1dCBhZnRlciBhbnkgYWRkaXRpb25hbAorLkIgYWRkX21pYmRpcgorY2FsbHMpLgorLlBQCisuQiBzaHV0ZG93bl9taWIKK3dpbGwgY2xlYXIgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2FzIGdhdGhlcmVkIGJ5IAorLkJSIG5ldHNubXBfcmVhZF9tb2R1bGUgIiwgIiBhZGRfbWliZGlyICIgYW5kICIgYWRkX21vZHVsZV9yZXBsYWNlbWVudCAuCitJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IG9uZSBkb2VzIG5vdCBpbnZva2UKKy5CUiBzaHV0ZG93bl9taWIKK3doaWxlIHRoZXJlIGFyZSBTTk1QIHNlc3Npb25zIGJlaW5nIGFjdGl2ZWx5IG1hbmFnZWQuCisuU1MgUmVhZGluZyBhbmQgUGFyc2luZyBNSUJzCisuUFAKKy5CIG5ldHNubXBfcmVhZF9tb2R1bGUKK3Rha2VzIHRoZSBuYW1lIG9mIGEgTUlCIG1vZHVsZSAod2hpY2ggbmVlZCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCituYW1lIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZSksIGxvY2F0ZXMgdGhpcyB3aXRoaW4gdGhlCitjb25maWd1cmVkIGxpc3Qgb2YgTUlCIGRpcmVjdG9yaWVzLCBhbmQgbG9hZHMgdGhlIGRlZmluaXRpb25zIGZyb20KK3RoZSBtb2R1bGUgaW50byB0aGUgYWN0aXZlIE1JQiB0cmVlLgorSXQgYWxzbyBsb2FkcyBhbnkgTUlCIG1vZHVsZXMgbGlzdGVkIGluIHRoZSBJTVBPUlRTIGNsYXVzZSBvZiB0aGlzIG1vZHVsZS4KKy5QUAorLkIgcmVhZF9taWIKK2lzIHNpbWlsYXIsIGJ1dCB0YWtlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBNSUIgbW9kdWxlLgorTm90ZSB0aGF0IHRoaXMgZmlsZSBuZWVkIG5vdCBiZSBsb2NhdGVkIHdpdGhpbiB0aGUgTUlCIGRpcmVjdG9yeQorc2VhcmNoIGxpc3QgKGFsdGhvdWdoIGFueSBtb2R1bGVzIGxpc3RlZCBpbiB0aGUgSU1QT1JUUyBjbGF1c2UgZG8pLgorLlBQCisuQiByZWFkX2FsbF9taWJzCit3aWxsIHJlYWQgaW4gYWxsIHRoZSBNSUIgbW9kdWxlcyBmb3VuZCBvbiB0aGUgTUlCIGRpcmVjdG9yeSBzZWFyY2ggbGlzdC4KKy5QUAorSW4gZ2VuZXJhbCB0aGUgcGFyc2VyIGlzIHNpbGVudCBhYm91dCB3aGF0IHN0cmFuZ2VuZXNzZXMgaXQgc2VlcyBpbgordGhlIE1JQiBmaWxlcy4gVG8gZ2V0IHdhcm5pbmdzIHJlcG9ydGVkLCBjYWxsCisuQiBzbm1wX3NldF9taWJfd2FybmluZ3MKK3dpdGggYQorLkkgbGV2ZWwKK29mIDEgKG9yIDIgZm9yIGV2ZW4gbW9yZSB3YXJuaW5ncykuCisuUFAKKy5CIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQKK2NhbiBiZSB1c2VkIHRvIGFsbG93IG5ldyBNSUIgbW9kdWxlcyB0byBvYnNvbGV0ZSBvbGRlciBvbmVzLCB3aXRob3V0CituZWVkaW5nIHRvIGFtZW5kIHRoZSBJTVBPUlRTIGNsYXVzZXMgb2Ygb3RoZXIgbW9kdWxlcy4gIEl0IHRha2VzIHRoZQorbmFtZXMgb2YgdGhlIG9sZCBhbmQgbmV3IG1vZHVsZXMsIHRvZ2V0aGVyIHdpdGggYW4gaW5kaWNhdGlvbiBvZiB3aGljaAorcG9ydGlvbnMgb2YgdGhlIG9sZCBtb2R1bGUgYXJlIGFmZmVjdGVkLgorLlJTCisuVFMKK3RhYigrKTsKK2xiIGxiIGxiCitsICBsICBsLgordGFnICsgbGVuICsgbG9hZCB0aGUgbmV3IG1vZHVsZSB3aGVuOgorTlVMTCArIDAgKyBhbHdheXMgKHRoZSBvbGQgbW9kdWxlIGlzIGEgc3RyaWN0IHN1YnNldCBvZgorICsgKyB0aGUgbmV3KQorbmFtZSArIDAgKyBmb3IgdGhlIGdpdmVuIHRhZyBvbmx5CituYW1lICsgbm9uLTAgKyBmb3IgYW55IGlkZW50aWZpZXIgd2l0aCB0aGlzIHByZWZpeAorLlRFCisuUkUKK0l0IGNhbiBhbHNvIGJlIHVzZWQgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGUgbW9kdWxlIGlkZW50aWZpZXJzIHVzZWQKK2luIE1JQiBJTVBPUlRTIGNsYXVzZXMgKHN1Y2ggYXMgcmVmZXJyaW5nIHRvCisuSSBSRkMxMjEzCitpbnN0ZWFkIG9mCisuSVIgUkZDMTIxM1wtTUlCICkuCisuU1MgU2VhcmNoaW5nIHRoZSBNSUIgVHJlZQorLlBQCisuQiByZWFkX29iamlkCit0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgdGV4dHVhbCB2ZXJzaW9uIG9mIGFuIG9iamVjdCBpZGVudGlmaWVyCisoaW4gZWl0aGVyIG51bWVyaWMgb3IgZGVzY3JpcHRvciBmb3JtKSwgYW5kIHRyYW5zZm9ybXMgdGhpcyBpbnRvIHRoZQorY29ycmVzcG9uZGluZyBsaXN0IG9mIHN1Yi1pZGVudGlmaWVycy4gIFRoaXMgaXMgcmV0dXJuZWQgaW4gdGhlCisuSSBvdXRwdXQKK3BhcmFtZXRlciwgd2l0aCB0aGUgbnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyByZXR1cm5lZCB2aWEKKy5JUiBvdXRfbGVuIC4KK1doZW4gY2FsbGVkLCAKKy5JIG91dF9sZW4KK211c3QgaG9sZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlCisuSSBvdXRwdXQKK2FycmF5LgorSWYgbXVsdGlwbGUgb2JqZWN0IGlkZW50aWZpZXJzIGFyZSBiZWluZyBwcm9jZXNzZWQsIHRoZW4gdGhpcworbGVuZ3RoIHNob3VsZCBiZSByZXNldCBiZWZvcmUgZWFjaCBjYWxsLgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgMSBpZiBpdCBzdWNjZWVkcyBpbiBwYXJzaW5nIHRoZSBzdHJpbmcKK2FuZCAwIG90aGVyd2lzZS4KKy5QUAorLkIgc25tcF9wYXJzZV9vaWQKK2lzIHNpbWlsYXIsIGJ1dCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFyc2VkIE9JRCBidWZmZXIgKG9yIE5VTEwpLgorLlBQCisuQiBnZXRfbW9kdWxlX25vZGUKK3Rha2VzIGEgZGVzY3JpcHRvciBhbmQgdGhlIG5hbWUgb2YgYSBtb2R1bGUsIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nCitvaWQgbGlzdCwgaW4gdGhlIHNhbWUgd2F5IGFzCisuQiByZWFkX29iamlkCithYm92ZS4KKy5icgorSWYgdGhlIG1vZHVsZSBuYW1lIGlzIHNwZWNpZmllZCBhcyAiQU5ZIiwgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbAorYXNzdW1lIHRoYXQgdGhlIGRlc2NyaXB0b3IgZ2l2ZW4gaXMgdW5pcXVlIHdpdGhpbiB0aGUgdHJlZSwgYW5kIHdpbGwKK3JldHVybiB0aGUgbWF0Y2hpbmcgZW50cnkuICBJZiB0aGlzIGFzc3VtcHRpb24gaXMgaW52YWxpZCwgdGhlbiB0aGUKK2JlaGF2aW91ciBhcyB0byB3aGljaCB2YXJpYWJsZSBpcyByZXR1cm5lZCBpcyBpbXBsZW1lbnRhdGlvbgorZGVwZW5kZW50LgorLmJyCisuU1MgT3V0cHV0CisuQiBwcmludF9taWIKK3dpbGwgcHJpbnQgb3V0IGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgTUlCIHRyZWUgdG8KK3RoZSBzcGVjaWZpZWQgRklMRSBwb2ludGVyLgorLlBQCisuQiBwcmludF9vYmppZAord2lsbCB0YWtlIGFuIG9iamVjdCBpZGVudGlmaWVyIChhcyByZXR1cm5lZCBieQorLkJSIHJlYWRfb2JqaWQgIiwgIiBzbm1wX3BhcnNlX29pZCAiIG9yICIgZ2V0X21vZHVsZV9ub2RlICIpLCIKK2FuZCBwcmludHMgdGhlIHRleHR1YWwgZm9ybSBvZiB0aGlzIE9JRCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorLlBQCisuQiBmcHJpbnRfb2JqaWQKK2RvZXMgdGhlIHNhbWUsIGJ1dCBwcmludHMgdG8gdGhlIEZJTEUgcG9pbnRlciBzcGVjaWZpZWQgYnkgdGhlIGluaXRpYWwKK3BhcmFtZXRlci4KKy5QUAorLkIgc25wcmludF9vYmppZAorcHJpbnRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5CisuSSBidWYKK3doaWNoIGlzIG9mIGxlbmd0aAorLklSIGxlbiAuCitJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLCBvciBcLTEgaWYgdGhlCitidWZmZXIgd2FzIG5vdCBsYXJnZSBlbm91Z2guICBJbiB0aGUgbGF0dGVyIGNhc2UsCisuSSBidWYKK3dpbGwgdHlwaWNhbGx5IGNvbnRhaW4gYSB0cnVuY2F0ZWQgdmVyc2lvbiBvZiB0aGUgaW5mb3JtYXRpb24gKGJ1dAordGhpcyBiZWhhdmlvdXIgaXMgbm90IGd1YXJhbnRlZWQpLgorLlBQCisuQlIgcHJpbnRfZGVzY3JpcHRpb24gLAorLkJSIGZwcmludF9kZXNjcmlwdGlvbiAsCithbmQKKy5CIHNucHJpbnRfZGVzY3JpcHRpb24KK3Rha2UgYSBzaW1pbGFyIG9iamVjdCBpZGVudGlmaWVyCithbmQgcHJpbnQgb3V0IGEgdmVyc2lvbiBvZiB0aGUgTUlCIGRlZmluaXRpb24gZm9yIHRoYXQgb2JqZWN0LAordG9nZXRoZXIgd2l0aCB0aGUgZnVsbCBPSUQuIFRoZQorLkkgd2lkdGgKK2FyZ3VtZW50IGNvbnRyb2xzIGhvdyB0aGUgT0lEIGlzIGxheWVkIG91dC4KKy5QUAorQnkgZGVmYXVsdCB0aGUgcGFyc2VyIGRvZXMgbm90IHNhdmUgZGVzY3JpcHRpb25zIHNpbmNlIHRoZXkgbWF5IGJlCitodWdlLiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwcmludCB0aGVtLCBpdCBpcyBuZWNlc3NhcnkgdG8gaW52b2tlCisuQkkgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoMSkgYmVmb3JlCitjYWxsaW5nCisuQiBpbml0X21pYgorKG9yIHNpbWlsYXIpLgorLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCisuUFAKK1RoZSBtYWluIHVzZSBvZiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aXRoIHJlc3BlY3QgdG8gdGhlc2UgQVBJIGNhbGxzCitpcyB0byBjb25maWd1cmUgd2hpY2ggTUlCIG1vZHVsZXMgc2hvdWxkIGJlIGxvYWRlZCwgYW5kIHdoZXJlIHRoZXkgYXJlCitsb2NhdGVkLgorLlRQIDEwCitNSUJESVJTCitBIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCIG1vZHVsZXMuCisuYnIKK0RlZmF1bHQ6IERBVEFESVIvc25tcC9taWJzCisuYnIKK1VzZWQgYnkKKy5CUiBpbml0X21pYiAiLCAiIG5ldHNubXBfcmVhZF9tb2R1bGUgIiwgIiByZWFkX2FsbF9taWJzCithbmQgKGltcGxpY2l0bHkpIGJ5CisuQlIgcmVhZF9taWIgLgorLlRQIDEwCitNSUJTCitBIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIHRvIGxvYWQuCisuYnIKK1RoZSBkZWZhdWx0IGxpc3Qgb2YgbW9kdWxlcyB3aWxsIGRlcGVuZCBvbiBob3cgdGhlIE5ldC1TTk1QIHNvZnR3YXJlCit3YXMgb3JpZ2luYWxseSBjb21waWxlZCwgYnV0IGlzIHR5cGljYWxseToKK0lQXC1NSUI6SUZcLU1JQjpUQ1BcLU1JQjpVRFBcLU1JQjpTTk1QdjJcLU1JQjpSRkMxMjEzXC1NSUI6IFVDRFwtU05NUFwtTUlCOkhPU1RcLVJFU09VUkNFU1wtTUlCCisuSVAKK0lmIHRoZSB2YWx1ZSBvZiB0aGUKKy5CIE1JQlMKK2Vudmlyb25tZW50YWwgdmFyaWFibGUgc3RhcnRzIHdpdGggYSAnKycgY2hhcmFjdGVyLAordGhlbiB0aGVzZSBNSUIgbW9kdWxlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IGxpc3QuCitPdGhlcndpc2UgdGhlc2UgbW9kdWxlcyAocGx1cyBhbnkgdGhhdCB0aGV5IElNUE9SVCBmcm9tKSB3aWxsIGJlIGxvYWRlZAorLkkgaW5zdGVhZAorb2YgdGhlIGRlZmF1bHQgbGlzdC4KKy5JUAorSWYgdGhlIAorLkIgTUlCUworZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBoYXMgdGhlIHZhbHVlCisuQlIgQUxMICIgdGhlbiAiIHJlYWRfYWxsX21pYnMKK3dpbGwgYmUgY2FsbGVkIHRvIGxvYWQgdGhlIGZ1bGwgY29sbGVjdGlvbiBvZiBhbGwgYXZhaWxhYmxlIE1JQiBtb2R1bGVzLgorLklQCitVc2VkIGJ5CisuQiBpbml0X21pYgorb25seS4KKy5UUCAxMAorTUlCRklMRVMKK0EgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8gbG9hZC4KKy5icgorRGVmYXVsdDogKG5vbmUpCisuYnIKK1VzZWQgYnkKKy5CIGluaXRfbWliCitvbmx5LgorLlNIICJTRUUgQUxTTyIKK25ldHNubXBfc2Vzc2lvbl9hcGkoMyksIG5ldHNubXBfcGR1X2FwaSgzKSwgbmV0c25tcF92YXJiaW5kX2FwaSgzKQpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zIGIvbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQ3ZGNjLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS5USCAibWliX2hhbmRsZXJfbWV0aG9kcyIgMyAiMjMgRGVjIDIwMDEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW1pYl9oYW5kbGVyX21ldGhvZHMgXC0gRGVmaW5lcyB0aGUgc3ViaGFuZGxlcnMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBtdWx0aXBsZXhlciBoZWxwZXIuIAotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotXGZDI2luY2x1ZGUgPG11bHRpcGxleGVyLmg+XGZQCi0uUFAKLS5TSCAiREVUQUlMRUQgREVTQ1JJUFRJT04iCi0uUFAgCi1EZWZpbmVzIHRoZSBzdWJoYW5kbGVycyB0byBiZSBjYWxsZWQgYnkgdGhlIG11bHRpcGxleGVyIGhlbHBlci4KLS5QUAotCi0KLS5TSCAiQVVUSE9SIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMgYi9tYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViMzkxNi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS5USCAibWliX21haW50ZW5hbmNlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbWliX21haW50ZW5hbmNlIFwtIAotLlBQCi1Sb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgYSBNSUIgdGFibGUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2VuZXJpY19nZXRfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfZ2VuZXJpY19mcmVlX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSUZyZWUgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUsIHJlbGVhc2luZyBhbnkgcmVsYXRlZCByZXNvdXJjZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgdm9pZCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSVJlZ2lzdGVyIGEgTUlCIHRhYmxlIHdpdGggdGhlIFNOTVAgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY191bnJlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklVbnJlZ2lzdGVyIGEgTUlCIHRhYmxlIGZyb20gdGhlIFNOTVAgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfZXh0cmFjdF90YWJsZVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSUV4dHJhY3QgdGhlIHRhYmxlIHJlbGF0aW5nIHRvIGEgcmVxdWVzdGVkIHZhcmJpbmQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfZXh0cmFjdF9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklFeHRyYWN0IHRoZSByb3cgcmVsYXRpbmcgdG8gYSByZXF1ZXN0ZWQgdmFyYmluZC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19pbnNlcnRfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklBc3NvY2lhdGUgYSAobmV3KSByb3cgd2l0aCB0aGUgcmVxdWVzdGVkIHZhcmJpbmQuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Sb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgYSBNSUIgdGFibGUuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19leHRyYWN0X3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotRXh0cmFjdCB0aGUgcm93IHJlbGF0aW5nIHRvIGEgcmVxdWVzdGVkIHZhcmJpbmQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk1IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19leHRyYWN0X3RhYmxlIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1FeHRyYWN0IHRoZSB0YWJsZSByZWxhdGluZyB0byBhIHJlcXVlc3RlZCB2YXJiaW5kLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4OSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAibmV0c25tcF9nZW5lcmljX2ZyZWVfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIpIgotLlBQCi1GcmVlIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLCByZWxlYXNpbmcgYW55IHJlbGF0ZWQgcmVzb3VyY2VzLiBQb3NzaWJseSBjYWxsZWQgYXV0b21hdGljYWxseSBieSAnbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXInID8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjUgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2VuZXJpY19nZXRfaGFuZGxlciAodm9pZCkiCi0uUFAKLUNyZWF0ZSBhIE1JQiBoYW5kbGVyIHN0cnVjdHVyZS4gVGhpcyB3aWxsIHR5cGljYWxseSBiZSBpbnZva2VkIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyAnbmV0c25tcF9nZW5lcmljX3JlZ2lzdGVyJyByb3V0aW5lIChvciB0aGUgcmVnaXN0cmF0aW9uIGNvZGUgb2YgYSBzdWItaGVscGVyIGJhc2VkIG9uIHRoaXMgaGVscGVyKS4KLS5QUAotQWx0ZXJuYXRpdmVseSwgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gdGhlIGluaXRpYWxpc2F0aW9uIGNvZGUgb2YgYSBwYXJ0aWN1bGFyIE1JQiB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTggb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX2luc2VydF9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgdm9pZCAqIHJvdykiCi0uUFAKLUFzc29jaWF0ZSBhIChuZXcpIHJvdyB3aXRoIHRoZSByZXF1ZXN0ZWQgdmFyYmluZC4gVGhlIHJvdyBzaG91bGQgYWxzbyBiZSBhc3NvY2lhdGVkIHdpdGggYW55IG90aGVyIHZhcmJpbmRzIHRoYXQgcmVmZXIgdG8gdGhlIHNhbWUgaW5kZXggdmFsdWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwMyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIHZvaWQgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1SZWdpc3RlciBhIE1JQiB0YWJsZSB3aXRoIHRoZSBTTk1QIGFnZW50LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE3MiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY191bnJlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLVVucmVnaXN0ZXIgYSBNSUIgdGFibGUgZnJvbSB0aGUgU05NUCBhZ2VudC4gVGhpcyBzaG91bGQgYWxzbyByZWxlYXNlIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFibGUuID8/IElzIGEgdGFibGUtc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIG5lZWRlZCwgb3Igd291bGQgJ25ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyJyArICduZXRzbm1wX2dlbmVyaWNfZnJlZV9oYW5kbGVyJyBkbz8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODMgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zIGIvbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzcyN2JkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMworKysgL2Rldi9udWxsCkBAIC0xLDEyODMgKzAsMCBAQAotLlRIICJtaWIgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW1pYiBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuIFwtIAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQl9QcmVmaXhMaXN0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJwYXJzZV9oaW50c1xmUCIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJfUHJlZml4TGlzdFxmUCAqIFxmQlByZWZpeExpc3RQdHJcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCX1ByZWZpeExpc3RcZlAgXGZCUHJlZml4TGlzdFxmUCIKLS5icgotLmluIC0xYwotLlNTICJFbnVtZXJhdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiZW51bSBcZkJpbmV0X2FkZHJlc3NfdHlwZVxmUCB7IFxmQklQVjRcZlAgPSAgMSwgXGZCSVBWNlxmUCA9ICAyLCBcZkJJUFY0WlxmUCA9ICAzLCBcZkJJUFY2WlxmUCA9ICA0LCBcZkJETlNcZlAgPSAgMTYgfSIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQl9zcHJpbnRfaGV4c3RyaW5nX2xpbmVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKmNwLCBzaXplX3QgbGluZV9sZW4pIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIGhleGFkZWNpbWFsIHN0cmluZyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19oZXhzdHJpbmdcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKmNwLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfYXNjaWlzdHJpbmdcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKmNwLCBzaXplX3QgbGVuKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gYXNjaWkgc3RyaW5nIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX29jdGV0X3N0cmluZ1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBvY3RldCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfY291bnRlcjY0XGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgY291bnRlciBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19vcGFxdWVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2Nfb2JqZWN0X2lkZW50aWZpZXJcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfdGltZXRpY2tzXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgdGltZXRpY2sgXGZCdmFyaWFibGVcZlAgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfaGludGVkX2ludGVnZXJcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBsb25nIHZhbCwgY29uc3QgY2hhciBkZWNpbWFsdHlwZSwgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBpbnRlZ2VyIGFjY29yZGluZyB0byB0aGUgaGludCBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19pbnRlZ2VyXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIGludGVnZXIgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfdWludGVnZXJcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gdW5zaWduZWQgaW50ZWdlciBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19nYXVnZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIGdhdWdlIHZhbHVlIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2NvdW50ZXJcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBjb3VudGVyIHZhbHVlIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX25ldHdvcmthZGRyZXNzXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgbmV0d29yayBhZGRyZXNzIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2lwYWRkcmVzc1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBpcC1hZGRyZXNzIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX251bGxcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBudWxsIHZhbHVlIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2JpdHN0cmluZ1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIGJpdCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfbnNhcGFkZHJlc3NcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfYmFkdHlwZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSUZhbGxiYWNrIHJvdXRpbmUgZm9yIGEgYmFkIHR5cGUsIHByaW50cyAnVmFyaWFibGUgaGFzIGJhZCB0eXBlJyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19ieV90eXBlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJVW5pdmVyc2FsIHByaW50IHJvdXRpbmUsIHByaW50cyBhIFxmQnZhcmlhYmxlXGZQIGludG8gYSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBcZkJ2YXJpYWJsZVxmUCB0eXBlLiBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmVlXGZQICogXGZCZ2V0X3RyZWVfaGVhZFxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmVzIHRoZSBcZkJ0cmVlXGZQIGhlYWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNubXBfb3V0X3RvZ2dsZV9vcHRpb25zXGZQIChjaGFyICpvcHRpb25zKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfb3V0X3RvZ2dsZV9vcHRpb25zX3VzYWdlXGZQIChjb25zdCBjaGFyICpsZWFkLCBGSUxFICpvdXRmKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc25tcF9pbl9vcHRpb25zXGZQIChjaGFyICpvcHRhcmcsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNubXBfaW5fdG9nZ2xlX29wdGlvbnNcZlAgKGNoYXIgKm9wdGlvbnMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9pbl90b2dnbGVfb3B0aW9uc191c2FnZVxmUCAoY29uc3QgY2hhciAqbGVhZCwgRklMRSAqb3V0ZikiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIG91dCBhIGhlbHAgdXNhZ2UgZm9yIHRoZSBpbiogdG9nZ2xlIG9wdGlvbnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWdpc3Rlcl9taWJfaGFuZGxlcnNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zZXRfbWliX2RpcmVjdG9yeVxmUCAoY29uc3QgY2hhciAqZGlyKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2ZpeHVwX21pYl9kaXJlY3RvcnlcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X21pYlxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJSW5pdGlhbGlzZXMgdGhlIG1pYiByZWFkZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X21pYlxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzaHV0ZG93bl9taWJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSVVubG9hZHMgYWxsIG1pYnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9taWJcZlAgKEZJTEUgKmZwKSIKLS5icgotLlJJICJcZklQcmludHMgdGhlIE1JQnMgdG8gdGhlIGZpbGUgZnAuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9hc2NpaV9kdW1wXGZQIChGSUxFICpmcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZXRfZnVuY3Rpb25cZlAgKHN0cnVjdCBcZkJ0cmVlXGZQICpzdWJ0cmVlKSIKLS5icgotLlJJICJcZklTZXQncyB0aGUgcHJpbnRpbmcgZnVuY3Rpb24gcHJpbnRvbWF0IGluIGEgc3VidHJlZSBhY2NvcmRpbmcgaXQncyB0eXBlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWFkX29iamlkXGZQIChjb25zdCBjaGFyICppbnB1dCwgb2lkICpvdXRwdXQsIHNpemVfdCAqb3V0X2xlbikiCi0uYnIKLS5SSSAiXGZJUmVhZHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgZnJvbSBhbiBpbnB1dCBzdHJpbmcgaW50byBpbnRlcm5hbCBPSUQgZm9ybS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBpbnQgKmJ1Zl9vdmVyZmxvdywgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJlZVxmUCAqIFxmQm5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGludCAqYnVmX292ZXJmbG93LCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19vYmppZFxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfb2JqaWRcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vYmppZFxmUCAoY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gb2lkIHRvIHN0ZG91dC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZwcmludF9vYmppZFxmUCAoRklMRSAqZiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gb2lkIHRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY192YXJpYWJsZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfdmFyaWFibGVcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF92YXJpYWJsZVxmUCAoY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLlJJICJcZklQcmludHMgYSBcZkJ2YXJpYWJsZVxmUCB0byBzdGRvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcHJpbnRfdmFyaWFibGVcZlAgKEZJTEUgKmYsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgdG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX3ZhbHVlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF92YWx1ZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X3ZhbHVlXGZQIChjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnByaW50X3ZhbHVlXGZQIChGSUxFICpmLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJidWlsZF9vaWRfc2VnbWVudFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIpIgotLmJyCi0uUkkgIlxmSVRha2VzIHRoZSB2YWx1ZSBpbiBWQVIgYW5kIHR1cm5zIGl0IGludG8gYW4gT0lEIHNlZ21lbnQgaW4gdmFyLT5uYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJidWlsZF9vaWRfbm9hbGxvY1xmUCAob2lkICppbiwgc2l6ZV90IGluX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBvaWQgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmJ1aWxkX29pZFxmUCAob2lkICoqb3V0LCBzaXplX3QgKm91dF9sZW4sIG9pZCAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcGFyc2Vfb2lkX2luZGV4ZXNcZlAgKG9pZCAqb2lkSW5kZXgsIHNpemVfdCBvaWRMZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqZGF0YSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnBhcnNlX29uZV9vaWRfaW5kZXhcZlAgKG9pZCAqKm9pZFN0YXJ0LCBzaXplX3QgKm9pZExlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpkYXRhLCBpbnQgY29tcGxldGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJkdW1wX3JlYWxsb2Nfb2lkX3RvX2luZXRhZGRyZXNzXGZQIChjb25zdCBpbnQgYWRkcl90eXBlLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjaGFyIHF1b3RlY2hhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmR1bXBfcmVhbGxvY19vaWRfdG9fc3RyaW5nXGZQIChjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjaGFyIHF1b3RlY2hhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyZWVcZlAgKiBcZkJnZXRfdHJlZVxmUCAoY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBzdHJ1Y3QgXGZCdHJlZVxmUCAqc3VidHJlZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9kZXNjcmlwdGlvblxmUCAob2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLmJyCi0uUkkgIlxmSVByaW50cyBvbiBvaWQgZGVzY3JpcHRpb24gb24gc3Rkb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnByaW50X2Rlc2NyaXB0aW9uXGZQIChGSUxFICpmLCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIG9uIG9pZCBkZXNjcmlwdGlvbiBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2Rlc2NyaXB0aW9uXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2Rlc2NyaXB0aW9uXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnZXRfbW9kdWxlX25vZGVcZlAgKGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpcZkJtb2R1bGVcZlAsIG9pZCAqb2JqaWQsIHNpemVfdCAqb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnZXRfd2lsZF9ub2RlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKm9iamlkLCBzaXplX3QgKm9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2V0X25vZGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqb2JqaWQsIHNpemVfdCAqb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfdHJlZV9mbGFnc1xmUCAocmVnaXN0ZXIgc3RydWN0IFxmQnRyZWVcZlAgKnRwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRcZlAgKEZJTEUgKmZwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRfZW5hYmxlX2xhYmVsZWRvaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfb2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N1ZmZpeFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zeW1ib2xpY1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9taWJjaGlsZG9pZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnVwdGltZV9zdHJpbmdcZlAgKHVfbG9uZyB0aW1ldGlja3MsIGNoYXIgKmJ1ZikiCi0uYnIKLS5SSSAiXGZJQ29udmVydHMgdGltZXRpY2tzIHRvIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIHN0cmluZy4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCdXB0aW1lX3N0cmluZ19uXGZQICh1X2xvbmcgdGltZXRpY2tzLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnNubXBfcGFyc2Vfb2lkXGZQIChjb25zdCBjaGFyICphcmd2LCBvaWQgKnJvb3QsIHNpemVfdCAqcm9vdGxlbikiCi0uYnIKLS5SSSAiXGZJR2l2ZW4gYSBzdHJpbmcsIHBhcnNlcyBhbiBvaWQgb3V0IG9mIGl0IChpZiBwb3NzaWJsZSkuIFxmUCIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQnBhcnNlX29jdGV0X2hpbnRcZlAgKGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBjaGFyICoqbmV3X3ZhbCwgaW50ICpuZXdfdmFsX2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQm1pYl90b19hc25fdHlwZVxmUCAoaW50IG1pYl90eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zdHIyb2lkXGZQIChjb25zdCBjaGFyICpTLCBvaWQgKk8sIGludCBMKSIKLS5icgotLlJJICJcZklDb252ZXJ0cyBhIHN0cmluZyB0byBpdHMgT0lEIGZvcm0uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkMmNoYXJzXGZQIChjaGFyICpDLCBpbnQgTCwgY29uc3Qgb2lkICpPKSIKLS5icgotLlJJICJcZklDb252ZXJ0cyBhbiBPSUQgdG8gaXRzIGNoYXJhY3RlciBmb3JtLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZDJzdHJcZlAgKGNoYXIgKlMsIGludCBMLCBvaWQgKk8pIgotLmJyCi0uUkkgIlxmSUNvbnZlcnRzIGFuIE9JRCB0byBpdHMgc3RyaW5nIGZvcm0uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfYnlfdHlwZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfaGV4c3RyaW5nXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCB1X2NoYXIgKmNwLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9hc2NpaXN0cmluZ1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgdV9jaGFyICpjcCwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfb2N0ZXRfc3RyaW5nXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9vcGFxdWVcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X29iamVjdF9pZGVudGlmaWVyXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF90aW1ldGlja3NcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2hpbnRlZF9pbnRlZ2VyXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBsb25nIHZhbCwgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2ludGVnZXJcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X3VpbnRlZ2VyXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9nYXVnZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfY291bnRlclxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfbmV0d29ya2FkZHJlc3NcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2lwYWRkcmVzc1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfbnVsbFxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfYml0c3RyaW5nXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9uc2FwYWRkcmVzc1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfY291bnRlcjY0XGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9iYWR0eXBlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyZWVcZlAgKiBcZkJ0cmVlX2hlYWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyZWVcZlAgKiBcZkJNaWJcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQlJGQzEyMTNfTUlCXGZQIFtdID0geyAxLCAzLCA2LCAxLCAyLCAxIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCUHJlZml4TGlzdFxmUCBcZkJtaWJfcHJlZml4ZXNcZlAgW10iCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IF9zcHJpbnRfaGV4c3RyaW5nX2xpbmUgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKiBjcCwgc2l6ZV90IGxpbmVfbGVuKSIKLS5QUAotUHJpbnRzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIGludG8gYSBidWZmZXIuIFRoZSBjaGFyYWN0ZXJzIHBvaW50ZWQgYnkgKmNwIGFyZSBlbmNvZGVkIGFzIGhleGFkZWNpbWFsIHN0cmluZy4KLS5QUAotSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIGFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgaW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJY3BcZlAgdGhlIGFycmF5IG9mIGNoYXJhY3RlcnMgdG8gZW5jb2RlLiAKLS5icgotXGZJbGluZV9sZW5cZlAgdGhlIGFycmF5IGxlbmd0aCBvZiBjcC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzQgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IGJ1aWxkX29pZCAob2lkICoqIG91dCwgc2l6ZV90ICogb3V0X2xlbiwgb2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLXh4eC1ya3M6IHNob3VsZCBmcmVlIHByZXZpb3VzIHZhbHVlPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1ODIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IGJ1aWxkX29pZF9zZWdtZW50IChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIpIgotLlBQCi1UYWtlcyB0aGUgdmFsdWUgaW4gVkFSIGFuZCB0dXJucyBpdCBpbnRvIGFuIE9JRCBzZWdtZW50IGluIHZhci0+bmFtZS4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBFUlJfR0VORVJSIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzQ0OCBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIGZwcmludF9kZXNjcmlwdGlvbiAoRklMRSAqIGYsIG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uUFAKLVByaW50cyBvbiBvaWQgZGVzY3JpcHRpb24gaW50byBhIGZpbGUgZGVzY3JpcHRvci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklmXGZQIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklvYmppZFxmUCBUaGUgb2JqZWN0IGlkZW50aWZpZXIuIAotLmJyCi1cZklvYmppZGxlblxmUCBUaGUgb2JqZWN0IGlkIGxlbmd0aC4gCi0uYnIKLVxmSXdpZHRoXGZQIE51bWJlciBvZiBzdWJpZGVudGlmaWVycy4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NDUyIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgZnByaW50X29iamlkIChGSUxFICogZiwgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uUFAKLVByaW50cyBhbiBvaWQgdG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZlxmUCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHByaW50IHRvLiAKLS5icgotXGZJb2JqaWRcZlAgVGhlIG9pZCB0byBwcmludCAKLS5icgotXGZJb2JqaWRsZW5cZlAgVGhlIGxlbmd0aCBvZiBvaWRpZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTY3IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgZnByaW50X3ZhcmlhYmxlIChGSUxFICogZiwgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyaWFibGUpIgotLlBQCi1QcmludHMgYSBcZkJ2YXJpYWJsZVxmUCB0byBhIGZpbGUgZGVzY3JpcHRvci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklmXGZQIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklvYmppZFxmUCBUaGUgb2JqZWN0IGlkLiAKLS5icgotXGZJb2JqaWRsZW5cZlAgVGhlIGxlbmd0aCBvZiB0ZWggb2JqZWN0IGlkLiAKLS5icgotXGZJXGZCdmFyaWFibGVcZlBcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIHByaW50LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzMjEgb2YgZmlsZSBtaWIuYy4KLS5TUyAic3RydWN0IFxmQnRyZWVcZlAqIGdldF90cmVlX2hlYWQgKHZvaWQpXGZDIFtyZWFkXVxmUCIKLS5QUAotUmV0cmlldmVzIHRoZSBcZkJ0cmVlXGZQIGhlYWQuIFxmQlJldHVybnM6XGZQCi0uUlMgNAotdGhlIFxmQnRyZWVcZlAgaGVhZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDIwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBnZXRfd2lsZF9ub2RlIChjb25zdCBjaGFyICogbmFtZSwgb2lkICogb2JqaWQsIHNpemVfdCAqIG9iamlkbGVuKSJcZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1jb21tZW50cyBvbiBmaW5kX2Jlc3RfdHJlZV9ub2RlIGZvciB1c2FnZSBhZnRlciBmaXJzdCB0aW1lLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0OTEgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2ZpeHVwX21pYl9kaXJlY3RvcnkgKHZvaWQpIgotLlBQCi1zd2FwIGluIHRoZSBuZXcgdmFsdWUgYW5kIHJlcGVhdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0ODMgb2YgZmlsZSBtaWIuYy4KLS5TUyAiY2hhciogbmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeSAodm9pZCkiCi0uUFAKLUNoZWNrIGlmIHRoZSBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBpcyBzZXQKLS5QUAotTm90IHNldCB1c2UgaGFyZCBjb2RlZCBwYXRoIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQzNiBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9taWIgKHZvaWQpIgotLlBQCi1Jbml0aWFsaXNlcyB0aGUgbWliIHJlYWRlci4gUmVhZHMgaW4gYWxsIHNldHRpbmdzIGZyb20gdGhlIGVudmlyb25tZW50LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1MzAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkMmNoYXJzIChjaGFyICogQywgaW50IEwsIGNvbnN0IG9pZCAqIE8pIgotLlBQCi1Db252ZXJ0cyBhbiBPSUQgdG8gaXRzIGNoYXJhY3RlciBmb3JtLiBpbiBleGFtcGxlIDUgLiAxIC4gMiAuIDMgLiA0IC4gNSA9IDEyMzQ1Ci0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJQ1xmUCBUaGUgY2hhcmFjdGVyIGJ1ZmZlci4gCi0uYnIKLVxmSUxcZlAgVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAKLS5icgotXGZJT1xmUCBUaGUgb2lkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBvbiBTdWNlc3MsIDEgb24gZmFpbHVyZS4gCi0uUkUKLS5QUAotCi0uUFAKLWxlbmd0aCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYyNzggb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkMnN0ciAoY2hhciAqIFMsIGludCBMLCBvaWQgKiBPKSIKLS5QUAotQ29udmVydHMgYW4gT0lEIHRvIGl0cyBzdHJpbmcgZm9ybS4gaW4gZXhhbXBsZSA1IC4gJ2gnIC4gJ2UnIC4gJ2wnIC4gJ2wnIC4gJ28nID0gJ2hlbGxvXFwwJyAobnVsbCB0ZXJtaW5hdGVkKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSVNcZlAgVGhlIGNoYXJhY3RlciBzdHJpbmcgYnVmZmVyLiAKLS5icgotXGZJTFxmUCBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYnVmZmVyLiAKLS5icgotXGZJT1xmUCBUaGUgb2lkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBvbiBTdWNlc3MsIDEgb24gZmFpbHVyZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MzA2IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgbmV0c25tcF9zZXRfbWliX2RpcmVjdG9yeSAoY29uc3QgY2hhciAqIGRpcikiCi0uUFAKLU5ldyBkaXIgc3RhcnRzIHdpdGggJysnLCB0aHVzIHdlIGFkZCBpdC4KLS5QUAotSWYgZGlyIHN0YXJ0cyB3aXRoICcrJyBza2lwICcrJyBpdC4KLS5QUAotc2V0X3N0cmluZyBjYWxscyBzdHJkdXAsIHNvIGlmIHdlIGFsbG9jYXRlZCBtZW1vcnksIGZyZWUgaXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzgxIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBuZXRzbm1wX3N0cjJvaWQgKGNvbnN0IGNoYXIgKiBTLCBvaWQgKiBPLCBpbnQgTCkiCi0uUFAKLUNvbnZlcnRzIGEgc3RyaW5nIHRvIGl0cyBPSUQgZm9ybS4gaW4gZXhhbXBsZSAnaGVsbG8nID0gNSAuICdoJyAuICdlJyAuICdsJyAuICdsJyAuICdvJwotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSVNcZlAgVGhlIHN0cmluZy4gCi0uYnIKLVxmSU9cZlAgVGhlIG9pZC4gCi0uYnIKLVxmSUxcZlAgVGhlIGxlbmd0aCBvZiB0aGUgb2lkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBvbiBTdWNlc3MsIDEgb24gZmFpbHVyZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MjQzIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgcHJpbnRfZGVzY3JpcHRpb24gKG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uUFAKLVByaW50cyBvbiBvaWQgZGVzY3JpcHRpb24gb24gc3Rkb3V0LiBcZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJmcHJpbnRfZGVzY3JpcHRpb25cZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NDM2IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgcHJpbnRfbWliIChGSUxFICogZnApIgotLlBQCi1QcmludHMgdGhlIE1JQnMgdG8gdGhlIGZpbGUgZnAuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZnBcZlAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byBwcmludCB0by4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzQ1IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgcHJpbnRfb2JqaWQgKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLlBQCi1QcmludHMgYW4gb2lkIHRvIHN0ZG91dC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklvYmppZFxmUCBUaGUgb2lkIHRvIHByaW50IAotLmJyCi1cZklvYmppZGxlblxmUCBUaGUgbGVuZ3RoIG9mIG9pZGlkLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxNTMgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBwcmludF92YXJpYWJsZSAoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyaWFibGUpIgotLlBQCi1QcmludHMgYSBcZkJ2YXJpYWJsZVxmUCB0byBzdGRvdXQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJb2JqaWRcZlAgVGhlIG9iamVjdCBpZC4gCi0uYnIKLVxmSW9iamlkbGVuXGZQIFRoZSBsZW5ndGggb2YgdGVoIG9iamVjdCBpZC4gCi0uYnIKLVxmSVxmQnZhcmlhYmxlXGZQXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBwcmludC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzA1IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCByZWFkX29iamlkIChjb25zdCBjaGFyICogaW5wdXQsIG9pZCAqIG91dHB1dCwgc2l6ZV90ICogb3V0X2xlbikiCi0uUFAKLVJlYWRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGZyb20gYW4gaW5wdXQgc3RyaW5nIGludG8gaW50ZXJuYWwgT0lEIGZvcm0uIFdoZW4gY2FsbGVkLCBvdXRfbGVuIG11c3QgaG9sZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIG91dHB1dCBhcnJheS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklpbnB1dFxmUCB0aGUgaW5wdXQgc3RyaW5nLiAKLS5icgotXGZJb3V0cHV0XGZQIHRoZSBvaWQgd2lydGUuIAotLmJyCi1cZklvdXRfbGVuXGZQIG51bWJlciBvZiBzdWJpZCdzIGluIG91dHB1dC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgaWYgc3VjY2Vzc2Z1bC4KLS5SRQotLlBQCi1JZiBhbiBlcnJvciBvY2N1cnMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGFuZCBNQVkgc2V0IHNubXBfZXJybm8uIHNubXBfZXJybm8gaXMgTk9UIHNldCBpZiBTRVRfU05NUF9FUlJPUiBldmFsdWF0ZXMgdG8gbm90aGluZy4gVGhpcyBjYW4gbWFrZSBtdWx0aS10aHJlYWRlZCB1c2UgYSB0aW55IGJpdCBtb3JlIHJvYnVzdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODQzIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgc2V0X2Z1bmN0aW9uIChzdHJ1Y3QgXGZCdHJlZVxmUCAqIHN1YnRyZWUpIgotLlBQCi1TZXQncyB0aGUgcHJpbnRpbmcgZnVuY3Rpb24gcHJpbnRvbWF0IGluIGEgc3VidHJlZSBhY2NvcmRpbmcgaXQncyB0eXBlLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXN1YnRyZWVcZlAgVGhlIHN1YnRyZWUgdG8gc2V0LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NjYgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBzaHV0ZG93bl9taWIgKHZvaWQpIgotLlBQCi1VbmxvYWRzIGFsbCBtaWJzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MjAgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBzbm1wX2luX3RvZ2dsZV9vcHRpb25zX3VzYWdlIChjb25zdCBjaGFyICogbGVhZCwgRklMRSAqIG91dGYpIgotLlBQCi1QcmludHMgb3V0IGEgaGVscCB1c2FnZSBmb3IgdGhlIGluKiB0b2dnbGUgb3B0aW9ucy4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklsZWFkXGZQIFRoZSBsZWFkIHRvIHByaW50IGZvciBldmVyeSBsaW5lLiAKLS5icgotXGZJb3V0ZlxmUCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRvLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyOTMgb2YgZmlsZSBtaWIuYy4KLS5TUyAib2lkKiBzbm1wX3BhcnNlX29pZCAoY29uc3QgY2hhciAqIGFyZ3YsIG9pZCAqIHJvb3QsIHNpemVfdCAqIHJvb3RsZW4pIgotLlBQCi1HaXZlbiBhIHN0cmluZywgcGFyc2VzIGFuIG9pZCBvdXQgb2YgaXQgKGlmIHBvc3NpYmxlKS4gSXQgd2lsbCB0cnkgdG8gcGFyc2UgaXQgYmFzZWQgb24gcHJlZGV0ZXJtaW5lZCBjb25maWd1cmF0aW9uIGlmIHByZXNlbnQgb3IgYnkgZXZlcnkgbWV0aG9kIHBvc3NpYmxlIG90aGVyd2lzZS4gSWYgYSBzdWZmaXggaGFzIGJlZW4gcmVnaXN0ZXJlZCB1c2luZyBORVRTTk1QX0RTX0xJQl9PSURTVUZGSVgsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGlucHV0IHN0cmluZyBiZWZvcmUgcHJvY2Vzc2luZy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklhcmd2XGZQIFRoZSBPSUQgdG8gc3RyaW5nIHBhcnNlIAotLmJyCi1cZklyb290XGZQIEFuIE9JRCBhcnJheSB3aGVyZSB0aGUgcmVzdWx0cyBhcmUgc3RvcmVkLiAKLS5icgotXGZJcm9vdGxlblxmUCBUaGUgbWF4IGxlbmd0aCBvZiB0aGUgYXJyYXkgZ29pbmcgaW4gYW5kIHRoZSBkYXRhIGxlbmd0aCBjb21pbmcgb3V0LgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotVGhlIHJvb3Qgb2lkIHBvaW50ZXIgaWYgc3VjY2Vzc2Z1bCwgb3IgTlVMTCBvdGhlcndpc2UuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTg0OSBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfYXNjaWlzdHJpbmcgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKiBjcCwgc2l6ZV90IGxlbikiCi0uUFAKLVByaW50cyBhbiBhc2NpaSBzdHJpbmcgaW50byBhIGJ1ZmZlci4gVGhlIGNoYXJhY3RlcnMgcG9pbnRlZCBieSAqY3AgYXJlIGVuY29kZWQgYXMgYW4gYXNjaWkgc3RyaW5nLgotLlBQCi1JZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgYWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBpbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkljcFxmUCB0aGUgYXJyYXkgb2YgY2hhcmFjdGVycyB0byBlbmNvZGUuIAotLmJyCi1cZklsZW5cZlAgdGhlIGFycmF5IGxlbmd0aCBvZiBjcC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2JhZHR5cGUgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLUZhbGxiYWNrIHJvdXRpbmUgZm9yIGEgYmFkIHR5cGUsIHByaW50cyAnVmFyaWFibGUgaGFzIGJhZCB0eXBlJyBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTA1IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19iaXRzdHJpbmcgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIGJpdCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTc2NiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfYnlfdHlwZSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotVW5pdmVyc2FsIHByaW50IHJvdXRpbmUsIHByaW50cyBhIFxmQnZhcmlhYmxlXGZQIGludG8gYSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBcZkJ2YXJpYWJsZVxmUCB0eXBlLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTQwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19jb3VudGVyICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBjb3VudGVyIHZhbHVlIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MzMgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2NvdW50ZXI2NCAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgY291bnRlciBpbnRvIGEgYnVmZmVyLiBUaGUgXGZCdmFyaWFibGVcZlAgdmFyIGlzIGVuY29kZWQgYXMgYSBjb3VudGVyIHZhbHVlLgotLlBQCi1JZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NDkgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2dhdWdlICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBnYXVnZSB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDYwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19oaW50ZWRfaW50ZWdlciAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGxvbmcgdmFsLCBjb25zdCBjaGFyIGRlY2ltYWx0eXBlLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBoaW50IGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhbFxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZGVjaW1hbHR5cGVcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IF9OT1RfIGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExODYgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2ludGVnZXIgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBpbnRlZ2VyIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNjAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2lwYWRkcmVzcyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIGlwLWFkZHJlc3MgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTY2MiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfbmV0d29ya2FkZHJlc3MgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIG5ldHdvcmsgYWRkcmVzcyBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTk2IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19udWxsICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBudWxsIHZhbHVlIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE3MjIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX29iamVjdF9pZGVudGlmaWVyICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA0MiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2Nfb2N0ZXRfc3RyaW5nICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gb2N0ZXQgc3RyaW5nIGludG8gYSBidWZmZXIuIFRoZSBcZkJ2YXJpYWJsZVxmUCB2YXIgaXMgZW5jb2RlZCBhcyBvY3RldCBzdHJpbmcuCi0uUFAKLUlmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQzMCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2Nfb3BhcXVlICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTUyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY190aW1ldGlja3MgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIHRpbWV0aWNrIFxmQnZhcmlhYmxlXGZQIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMTIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX3VpbnRlZ2VyICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gdW5zaWduZWQgaW50ZWdlciBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzYzIG9mIGZpbGUgbWliLmMuCi0uU1MgImNoYXIqIHVwdGltZV9zdHJpbmcgKHVfbG9uZyB0aW1ldGlja3MsIGNoYXIgKiBidWYpIgotLlBQCi1Db252ZXJ0cyB0aW1ldGlja3MgdG8gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgc3RyaW5nLiBDTVUgY29tcGF0aWJsZSBkb2VzIG5vdCBzaG93IGNlbnRpc2Vjb25kcy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0aW1ldGlja3NcZlAgVGhlIHRpbWV0aWNrcyB0byBjb252ZXJ0LiAKLS5icgotXGZJYnVmXGZQIEJ1ZmZlciB0byB3cml0ZSB0bywgaGFzIHRvIGJlIGF0IGxlYXN0IDQwIEJ5dGVzIGxhcmdlLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotVGhlIGJ1ZmZlcgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLXVwdGltZVN0cmluZyAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU4MTQgb2YgZmlsZSBtaWIuYy4KLS5TSCAiVmFyaWFibGUgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCUHJlZml4TGlzdFxmUCBtaWJfcHJlZml4ZXNbXSJcZkJJbml0aWFsIHZhbHVlOlxmUAotLlBQCi0ubmYKLSB7Ci0gICAgeyZTdGFuZGFyZF9QcmVmaXhbMF19LCAgICAgIAotICAgIHsnLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTInfSwKLSAgICB7Jy5pc28ub3JnLmRvZC5pbnRlcm5ldC5leHBlcmltZW50YWwnfSwKLSAgICB7Jy5pc28ub3JnLmRvZC5pbnRlcm5ldC5wcml2YXRlJ30sCi0gICAgeycuaXNvLm9yZy5kb2QuaW50ZXJuZXQuc25tcFBhcnRpZXMnfSwKLSAgICB7Jy5pc28ub3JnLmRvZC5pbnRlcm5ldC5zbm1wU2VjcmV0cyd9LAotICAgIHtOVUxMLCAwfSAgICAgICAgICAgICAgICAgICAKLX0KLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTYzIG9mIGZpbGUgbWliLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zIGIvbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTQxYjA5Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS5USCAibW9kZV9lbmRfY2FsbCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW1vZGVfZW5kX2NhbGwgXC0gCi0uUFAKLUF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGNhbGwgYW5vdGhlciBoYW5kbGVyIGhvb2suICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X21vZGVfZW5kX2NhbGxfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCAqZW5kbGlzdCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG1vZGVfZW5kX2NhbGwgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQICogXGZCbmV0c25tcF9tb2RlX2VuZF9jYWxsX2FkZF9tb2RlX2NhbGxiYWNrXGZQIChcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQICplbmRsaXN0LCBpbnQgbW9kZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqY2FsbGJhY2toKSIKLS5icgotLlJJICJcZklhZGRzIGEgbW9kZSBzcGVjaWZpYyBjYWxsYmFjayB0byB0aGUgY2FsbGJhY2sgbGlzdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9tb2RlX2VuZF9jYWxsX2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1BdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHJlcXVlc3RzLCBjYWxsIGFub3RoZXIgaGFuZGxlciBob29rLiAKLQotSGFuZGxlcnMgdGhhdCB3YW50IHRvIGxvb3AgdGhyb3VnaCBhIHNlcmllcyBvZiByZXF1ZXN0cyBhbmQgdGhlbiByZWNlaXZlIGEgY2FsbGJhY2sgYXQgdGhlIGVuZCBvZiBhIHBhcnRpY3VsYXIgTU9ERSBjYW4gdXNlIHRoaXMgaGVscGVyIHRvIG1ha2UgdGhpcyBwb3NzaWJsZS4gRm9yIG1vc3QgbW9kdWxlcywgdGhpcyBpcyBub3QgbmVlZGVkIGFzIHRoZSBoYW5kbGVyIGl0c2VsZiBjb3VsZCBwZXJmb3JtIGEgZm9yKCkgbG9vcCBhcm91bmQgdGhlIHJlcXVlc3QgbGlzdCBhbmQgdGhlbiBwZXJmb3JtIGl0cyBhY3Rpb25zIGFmdGVyd2FyZHMuIEhvd2V2ZXIsIGlmIHNvbWV0aGluZyBsaWtlIHRoZSBzZXJpYWxpemUgaGVscGVyIGlzIGluIHVzZSB0aGlzIGlzbid0IHBvc3NpYmxlIGJlY2F1c2Ugbm90IGFsbCB0aGUgcmVxdWVzdHMgZm9yIGEgZ2l2ZW4gaGFuZGxlciBhcmUgYmVpbmcgcGFzc2VkIGRvd253YXJkIGluIGEgc2luZ2xlIGdyb3VwLiBUaHVzLCB0aGlzIGhlbHBlciAqbXVzdCogYmUgYWRkZWQgYWJvdmUgb3RoZXIgaGVscGVycyBsaWtlIHRoZSBzZXJpYWxpemUgaGVscGVyIHRvIGJlIHVzZWZ1bC4KLS5QUAotTXVsdGlwbGUgbW9kZSBzcGVjaWZpYyBoYW5kbGVycyBjYW4gYmUgcmVnaXN0ZXJlZCBhbmQgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSByZWdlc3RlcmVkIGluLiBDYWxsYmFja3MgcmVnZXN0ZXJkIHdpdGggYSBtb2RlIG9mIE5FVFNOTVBfTU9ERV9FTkRfQUxMX01PREVTIHdpbGwgYmUgY2FsbGVkIGZvciBhbGwgbW9kZXMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9tb2RlX2VuZF9jYWxsX2hhbmRsZXIgKFxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAgKiBlbmRsaXN0KSIKLS5QUAotcmV0dXJucyBhIG1vZGVfZW5kX2NhbGwgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkllbmRsaXN0XGZQIFRoZSBjYWxsYmFjayBsaXN0IGZvciB0aGUgaGFuZGxlciB0byBtYWtlIHVzZSBvZi4gCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1BbiBpbmplY3RhYmxlIE5ldC1TTk1QIGhhbmRsZXIuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDUgb2YgZmlsZSBtb2RlX2VuZF9jYWxsLmMuCi0uU1MgIlxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAqIG5ldHNubXBfbW9kZV9lbmRfY2FsbF9hZGRfbW9kZV9jYWxsYmFjayAoXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCAqIGVuZGxpc3QsIGludCBtb2RlLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogY2FsbGJhY2toKSIKLS5QUAotYWRkcyBhIG1vZGUgc3BlY2lmaWMgY2FsbGJhY2sgdG8gdGhlIGNhbGxiYWNrIGxpc3QuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZW5kbGlzdFxmUCB0aGUgaW5mb3JtYXRpb24gc3RydWN0dXJlIGZvciB0aGUgbW9kZV9lbmRfY2FsbCBoZWxwZXIuIENhbiBiZSBOVUxMIHRvIGNyZWF0ZSBhIG5ldyBsaXN0LiAKLS5icgotXGZJbW9kZVxmUCB0aGUgbW9kZSB0byBiZSBjYWxsZWQgdXBvbi4gQSBtb2RlIG9mIE5FVFNOTVBfTU9ERV9FTkRfQUxMX01PREVTID0gYWxsIG1vZGVzLiAKLS5icgotXGZJY2FsbGJhY2toXGZQIHRoZSBuZXRzbm1wX21pYl9oYW5kbGVyIGNhbGxiYWNrIHRvIGNhbGwuIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gbGlzdCB1cG9uIHN1Y2Nlc3MuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjUgb2YgZmlsZSBtb2RlX2VuZF9jYWxsLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMyBiL21hbi9uZXRzbm1wX211bHRpcGxleGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjJjNGQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS5USCAibXVsdGlwbGV4ZXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1tdWx0aXBsZXhlciBcLSAKLS5QUAotU3BsaXRzIG1vZGUgcmVxdWVzdHMgaW50byBjYWxscyB0byBkaWZmZXJlbnQgaGFuZGxlcnMuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X211bHRpcGxleGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCAqcmVxKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbXVsdGlwbGl4ZXIgaGFuZGxlciBnaXZlbiBhIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCBzdHJ1Y3R1cmUgb2Ygc3ViaGFuZGxlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfbXVsdGlwbGV4ZXJfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWltcGxlbWVudHMgdGhlIG11bHRpcGxleGVyIGhlbHBlciBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotU3BsaXRzIG1vZGUgcmVxdWVzdHMgaW50byBjYWxscyB0byBkaWZmZXJlbnQgaGFuZGxlcnMuIAotCi1UaGUgbXVsdGlwbGV4ZXIgaGVscGVyIGxldHMgeW91IHNwbGl0IHRoZSBjYWxsaW5nIGNoYWluIGRlcGVuZGluZyBvbiB0aGUgY2FsbGluZyBtb2RlIChnZXQgdnMgZ2V0bmV4dCB2cyBzZXQpLiBVc2VmdWwgaWYgeW91IHdhbnQgZGlmZmVyZW50IHJvdXRpbmVzIHRvIGhhbmRsZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiBTTk1QIHJlcXVlc3RzLCB3aGljaCBpcyB2ZXJ5IGNvbW1vbiBmb3IgR0VUIHZzIFNFVCB0eXBlIGFjdGlvbnMuCi0uUFAKLUZ1bmN0aW9uYWxseToKLS5QUAotLklQICIxLiIgNAotR0VUIHJlcXVlc3RzIGNhbGwgdGhlIGdldF9tZXRob2QKLS5JUCAiMi4iIDQKLUdFVE5FWFQgcmVxdWVzdHMgY2FsbCB0aGUgZ2V0bmV4dF9tZXRob2QsIG9yIGlmIG5vdCBwcmVzZW50LCB0aGUgZ2V0X21ldGhvZC4KLS5JUCAiMy4iIDQKLUdFVEJVTEsgcmVxdWVzdHMgY2FsbCB0aGUgZ2V0YnVsa19tZXRob2QsIG9yIGlmIG5vdCBwcmVzZW50LCB0aGUgZ2V0bmV4dF9tZXRob2QsIG9yIGlmIGV2ZW4gdGhhdCBpc24ndCBwcmVzZW50IHRoZSBnZXRfbWV0aG9kLgotLklQICI0LiIgNAotU0VUIHJlcXVlc3RzIGNhbGwgdGhlIHNldF9tZXRob2QsIG9yIGlmIG5vdCBwcmVzZW50IHJldHVybiBhIFNOTVBfRVJSX05PVFdSSVRBQkxFIGVycm9yLiAKLS5QUAotCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X211bHRpcGxleGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCAqIHJlcSkiCi0uUFAKLXJldHVybnMgYSBtdWx0aXBsaXhlciBoYW5kbGVyIGdpdmVuIGEgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQIHN0cnVjdHVyZSBvZiBzdWJoYW5kbGVycy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMyBvZiBmaWxlIG11bHRpcGxleGVyLmMuCi0uU1MgImludCBuZXRzbm1wX211bHRpcGxleGVyX2hlbHBlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWltcGxlbWVudHMgdGhlIG11bHRpcGxleGVyIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0IG9mIGZpbGUgbXVsdGlwbGV4ZXIuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTZmZTQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLlRIICJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcyBcLSAKLS5QUAotVGhlIGFnZW50IHRyYW5zYWN0aW9uIHJlcXVlc3Qgc3RydWN0dXJlLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHNubXBfYWdlbnQuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQm1vZGVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvbl9zXGZQICogXGZCYXNwXGZQIgotLmJyCi0uUkkgIlxmSXBkdSBjb250YWlucyBhdXRoaW5mbywgZWcgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIFxmQmFnZW50X2RhdGFcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgYWdlbnQgdHJhbnNhY3Rpb24gcmVxdWVzdCBzdHJ1Y3R1cmUuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi0uUFAKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1OCBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAic3RydWN0IFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvbl9zXGZQKiBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zOjphc3BcZlBcZkMgW3JlYWRdXGZQIgotLlBQCi1wZHUgY29udGFpbnMgYXV0aGluZm8sIGVnIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTYyIG9mIGZpbGUgc25tcF9hZ2VudC5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4NTJiYy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS5USCAibmV0c25tcF9jb2x1bW5faW5mb190IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9jb2x1bW5faW5mb190IFwtIAotLlBQCi1jb2x1bW4gaW5mbyBzdHJ1Y3QuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8dGFibGUuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiY2hhciBcZkJpc1JhbmdlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgXGZCbGlzdF9jb3VudFxmUCIKLS5icgotLlJJICJcZklvbmx5IHVzZWZ1bCBpZiBpc1JhbmdlID09IDAgXGZQIgotLnRpIC0xYwotLlJJICJ1bmlvbiB7IgotLmJyCi0udGkgLTFjCi0uUkkgIiAgIHVuc2lnbmVkIGludCBcZkJyYW5nZVxmUCBbMl0iCi0uYnIKLS50aSAtMWMKLS5SSSAiICAgdW5zaWduZWQgaW50ICogXGZCbGlzdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ9IFxmQmRldGFpbHNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfY29sdW1uX2luZm9fdFxmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1jb2x1bW4gaW5mbyBzdHJ1Y3QuIAotCi1PVkVSTEFQUElORyBSQU5HRVMgQVJFIE5PVCBTVVBQT1JURUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTIgb2YgZmlsZSB0YWJsZS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJjaGFyIFxmQm5ldHNubXBfY29sdW1uX2luZm9fdDo6bGlzdF9jb3VudFxmUCIKLS5QUAotb25seSB1c2VmdWwgaWYgaXNSYW5nZSA9PSAwIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTUgb2YgZmlsZSB0YWJsZS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTU3OWE4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS5USCAibmV0c25tcF9kYXRhX2xpc3RfcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfZGF0YV9saXN0X3MgXC0gCi0uUFAKLXVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGxpc3RzIG9mIGRhdGEgIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxkYXRhX2xpc3QuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfZGF0YV9saXN0X3NcZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJuYW1lXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJkYXRhXGZQIgotLmJyCi0uUkkgIlxmSVRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHBhc3NlZCBvbi4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogXGZCZnJlZV9mdW5jXGZQIgotLmJyCi0uUkkgIlxmSW11c3Qga25vdyBob3cgdG8gZnJlZSBuZXRzbm1wX2RhdGFfbGlzdC0+ZGF0YSBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggbGlzdHMgb2YgZGF0YSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQxIG9mIGZpbGUgZGF0YV9saXN0LmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQqIFxmQm5ldHNubXBfZGF0YV9saXN0X3M6OmRhdGFcZlAiCi0uUFAKLVRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHBhc3NlZCBvbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NSBvZiBmaWxlIGRhdGFfbGlzdC5oLgotLlNTICJOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhKiBcZkJuZXRzbm1wX2RhdGFfbGlzdF9zOjpmcmVlX2Z1bmNcZlAiCi0uUFAKLW11c3Qga25vdyBob3cgdG8gZnJlZSBuZXRzbm1wX2RhdGFfbGlzdC0+ZGF0YSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ3IG9mIGZpbGUgZGF0YV9saXN0LmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMxYWQyLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS5USCAibmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zIFwtIAotLlBQCi1Sb290IHJlZ2lzdHJhdGlvbiBpbmZvLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPGFnZW50X2hhbmRsZXIuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmhhbmRsZXJOYW1lXGZQIgotLmJyCi0uUkkgIlxmSWZvciBtclRhYmxlIGxpc3RpbmdzLCBhbmQgb3RoZXIgdXNlcyBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJjb250ZXh0TmFtZVxmUCIKLS5icgotLlJJICJcZklOVUxMID0gZGVmYXVsdCBjb250ZXh0LiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnJvb3RvaWRcZlAiCi0uYnIKLS5SSSAiXGZJd2hlcmUgYXJlIHdlIHJlZ2lzdGVyZWQgYXQ/IFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnJvb3RvaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJoYW5kbGVyXGZQIgotLmJyCi0uUkkgIlxmSWhhbmRsZXIgZGV0YWlscyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJtb2Rlc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcHJpb3JpdHlcZlAiCi0uYnIKLS5SSSAiXGZJbW9yZSBvcHRpb25hbCBzdHVmZiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJyYW5nZV9zdWJpZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCcmFuZ2VfdWJvdW5kXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ0aW1lb3V0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnbG9iYWxfY2FjaGVpZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbXlfcmVnX3ZvaWRcZlAiCi0uYnIKLS5SSSAiXGZJdm9pZCBwdHIgZm9yIHJlZ2lzdGVyZWUgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVJvb3QgcmVnaXN0cmF0aW9uIGluZm8uIAotCi1UaGUgdmFyaWFibGVzIGhhbmRsZXJOYW1lLCBjb250ZXh0TmFtZSwgYW5kIHJvb3RvaWQgbmVlZCB0byBiZSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIHdoZW4gdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgaXMgdW5yZWdpc3RlcmVkIHVzaW5nIFxmQnVucmVnaXN0ZXJfbWliX2NvbnRleHQoKVxmUCB0aGUgY29kZSBhdHRlbXB0cyB0byBmcmVlIHRoZW0uIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi0uUFAKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUCwgYW5kIFxmQndhdGNoZWQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk1IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJjaGFyKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6OmNvbnRleHROYW1lXGZQIgotLlBQCi1OVUxMID0gZGVmYXVsdCBjb250ZXh0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMCBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpoYW5kbGVyXGZQIgotLlBQCi1oYW5kbGVyIGRldGFpbHMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTEgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgImNoYXIqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6aGFuZGxlck5hbWVcZlAiCi0uUFAKLWZvciBtclRhYmxlIGxpc3RpbmdzLCBhbmQgb3RoZXIgdXNlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk4IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJ2b2lkKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6Om15X3JlZ192b2lkXGZQIgotLlBQCi12b2lkIHB0ciBmb3IgcmVnaXN0ZXJlZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNiBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAiaW50IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6cHJpb3JpdHlcZlAiCi0uUFAKLW1vcmUgb3B0aW9uYWwgc3R1ZmYgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTcgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgIm9pZCogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpyb290b2lkXGZQIgotLlBQCi13aGVyZSBhcmUgd2UgcmVnaXN0ZXJlZCBhdD8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDUgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5Zjc4OC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS5USCAibmV0c25tcF9pdGVyYXRvcl9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcyBcLSAKLS5QUAotSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHRhYmxlX2l0ZXJhdG9yLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAqIFxmQmdldF9maXJzdF9kYXRhX3BvaW50XGZQIgotLmJyCi0uUkkgIlxmSVJlc3BvbnNpYmxlIGZvcjogcmV0dXJuaW5nIHRoZSBmaXJzdCBzZXQgb2YgJ2luZGV4JyBkYXRhLCBhIGxvb3AtY29udGV4dCBwb2ludGVyLCBhbmQgb3B0aW9uYWxseSBhIGRhdGEgY29udGV4dCBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfTmV4dF9EYXRhX1BvaW50ICogXGZCZ2V0X25leHRfZGF0YV9wb2ludFxmUCIKLS5icgotLlJJICJcZklHaXZlbiB0aGUgcHJldmlvdXMgbG9vcCBjb250ZXh0LCB0aGlzIHNob3VsZCByZXR1cm4gdGhlIG5leHQgbG9vcCBjb250ZXh0LCBhc3NvY2lhdGVkIGluZGV4IHNldCBhbmQgb3B0aW9uYWxseSBhIGRhdGEgY29udGV4dC4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX01ha2VfRGF0YV9Db250ZXh0ICogXGZCbWFrZV9kYXRhX2NvbnRleHRcZlAiCi0uYnIKLS5SSSAiXGZJSWYgYSBkYXRhIGNvbnRleHQgd2Fzbid0IHN1cHBsaWVkIGJ5IHRoZSBnZXRfZmlyc3RfZGF0YV9wb2ludCBvciBnZXRfbmV4dF9kYXRhX3BvaW50IGZ1bmN0aW9ucyBhbmQgdGhlIG1ha2VfZGF0YV9jb250ZXh0IHBvaW50ZXIgaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBhIGxvb3AgY29udGV4dCBpbnRvIGEgZGF0YSBjb250ZXh0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHQgKiBcZkJmcmVlX2xvb3BfY29udGV4dFxmUCIKLS5icgotLlJJICJcZklBIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBmcmVlIHRoZSBsb29wIGNvbnRleHQuIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GcmVlX0RhdGFfQ29udGV4dCAqIFxmQmZyZWVfZGF0YV9jb250ZXh0XGZQIgotLmJyCi0uUkkgIlxmSUZyZWVzIGEgZGF0YSBjb250ZXh0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHQgKiBcZkJmcmVlX2xvb3BfY29udGV4dF9hdF9lbmRcZlAiCi0uYnIKLS5SSSAiXGZJRnJlZXMgYSBsb29wIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGl0ZXJhdGlvbiBzZXF1ZW5jZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbXl2b2lkXGZQIgotLmJyCi0uUkkgIlxmSVRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGhhbmRsZXJzIHRvIHN0b3JlIGFueSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmZsYWdzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiBcZkJ0YWJsZV9yZWdpbmZvXGZQIgotLmJyCi0uUkkgIlxmSUEgcG9pbnRlciB0byB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QgdGhpcyBpdGVyYXRvciBpcyByZWdpc3RlcmVkIGFsb25nIHdpdGguIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICogXGZCZ2V0X3Jvd19pbmRleGVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQmluZGV4ZXNcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Ib2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuIAotCi1UaGUgbmV0c25tcF9pdGVyYXRvcl9pbmZvIHR5cGVkZWYgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIHRoaXMgc3RydWN0IGlmIHlvdSB3b3VsZCBwcmVmZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJOZXRzbm1wX0ZyZWVfRGF0YV9Db250ZXh0KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6ZnJlZV9kYXRhX2NvbnRleHRcZlAiCi0uUFAKLUZyZWVzIGEgZGF0YSBjb250ZXh0LiBUaGlzIHdpbGwgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGEgZGF0YSBjb250ZXh0IG5lZWRzIHRvIGJlIGZyZWVkLiBUaGlzIG1heSBiZSBhdCB0aGUgc2FtZSB0aW1lIGFzIGEgY29ycmVzcG9uZG5nIGxvb3AgY29udGV4dCBpcyBmcmVlZCwgb3IgbXVjaCBtdWNoIGxhdGVyLiBNdWx0aXBsZSBkYXRhIGNvbnRleHRzIG1heSBiZSBrZXB0IGluIGV4aXN0ZW5jZSBhdCBhbnkgdGltZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MiBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpmcmVlX2xvb3BfY29udGV4dFxmUCIKLS5QUAotQSBmdW5jdGlvbiB3aGljaCBzaG91bGQgZnJlZSB0aGUgbG9vcCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCAqZWFjaCogaXRlcmF0aW9uIHN0ZXAsIHdoaWNoIGlzIG5vdC1vcHRpbWFsIGZvciBzcGVlZCBwdXJwb3Nlcy4gVGhlIHVzZSBvZiBmcmVlX2xvb3BfY29udGV4dF9hdF9lbmQgaW5zdGVhZCBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkLiBUaGlzIGNhbiBiZSBzZXQgdG8gTlVMTCB0byBhdm9pZCBpdHMgdXNhZ2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzUgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6ZnJlZV9sb29wX2NvbnRleHRfYXRfZW5kXGZQIgotLlBQCi1GcmVlcyBhIGxvb3AgY29udGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgaXRlcmF0aW9uIHNlcXVlbmNlLiBHZW5lcmFsbHksIHRoaXMgd291bGQgZnJlZSB0aGUgbG9vcCBjb250ZXh0IGFsbG9jYXRlZCBieSB0aGUgZ2V0X2ZpcnN0X2RhdGFfcG9pbnQgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIHRoZW4gYmUgdXBkYXRlZCBieSBlYWNoIGNhbGwgdG8gdGhlIGdldF9uZXh0X2RhdGFfcG9pbnQgZnVuY3Rpb24pLiBJdCBpcyBub3QgY2FsbGVkIHVudGlsIHRoZSBnZXRfbmV4dF9kYXRhX3BvaW50IGZ1bmN0aW9uIHJldHVybnMgYSBOVUxMIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTAgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpnZXRfZmlyc3RfZGF0YV9wb2ludFxmUCIKLS5QUAotUmVzcG9uc2libGUgZm9yOiByZXR1cm5pbmcgdGhlIGZpcnN0IHNldCBvZiAnaW5kZXgnIGRhdGEsIGEgbG9vcC1jb250ZXh0IHBvaW50ZXIsIGFuZCBvcHRpb25hbGx5IGEgZGF0YSBjb250ZXh0IHBvaW50ZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTcgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJOZXRzbm1wX05leHRfRGF0YV9Qb2ludCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OmdldF9uZXh0X2RhdGFfcG9pbnRcZlAiCi0uUFAKLUdpdmVuIHRoZSBwcmV2aW91cyBsb29wIGNvbnRleHQsIHRoaXMgc2hvdWxkIHJldHVybiB0aGUgbmV4dCBsb29wIGNvbnRleHQsIGFzc29jaWF0ZWQgaW5kZXggc2V0IGFuZCBvcHRpb25hbGx5IGEgZGF0YSBjb250ZXh0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYyIG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiTmV0c25tcF9NYWtlX0RhdGFfQ29udGV4dCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6Om1ha2VfZGF0YV9jb250ZXh0XGZQIgotLlBQCi1JZiBhIGRhdGEgY29udGV4dCB3YXNuJ3Qgc3VwcGxpZWQgYnkgdGhlIGdldF9maXJzdF9kYXRhX3BvaW50IG9yIGdldF9uZXh0X2RhdGFfcG9pbnQgZnVuY3Rpb25zIGFuZCB0aGUgbWFrZV9kYXRhX2NvbnRleHQgcG9pbnRlciBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGEgbG9vcCBjb250ZXh0IGludG8gYSBkYXRhIGNvbnRleHQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjggb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJ2b2lkKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6bXl2b2lkXGZQIgotLlBQCi1UaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBoYW5kbGVycyB0byBzdG9yZSBhbnkgaW5mb3JtYXRpb24gdGhleSBuZWVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk0IG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OnRhYmxlX3JlZ2luZm9cZlAiCi0uUFAKLUEgcG9pbnRlciB0byB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QgdGhpcyBpdGVyYXRvciBpcyByZWdpc3RlcmVkIGFsb25nIHdpdGguIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAwIG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3OTFiMS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0uVEggIm5ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzIFwtIAotLlBQCi1EZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kcyB0byBiZSBjYWxsZWQgYnkgdGhlIGFjY2Vzc19tdWx0aXBsZXhlciBoZWxwZXIuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8YmFieV9zdGVwcy5oPlxmUAotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLURlZmluZXMgdGhlIGFjY2VzcyBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSB0aGUgYWNjZXNzX211bHRpcGxleGVyIGhlbHBlci4gCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzRhZTA5Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLlRIICJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMgXC0gCi0uUFAKLURlZmluZXMgdGhlIHN1YmhhbmRsZXJzIHRvIGJlIGNhbGxlZCBieSB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPG11bHRpcGxleGVyLmg+XGZQCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotRGVmaW5lcyB0aGUgc3ViaGFuZGxlcnMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBtdWx0aXBsZXhlciBoZWxwZXIuIAotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmYjNjYS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS5USCAibmV0c25tcF9taWJfaGFuZGxlcl9zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9taWJfaGFuZGxlcl9zIFwtIAotLlBQCi10aGUgbWliIGhhbmRsZXIgc3RydWN0dXJlIHRvIGJlIHJlZ2lzdGVyZWQgIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxhZ2VudF9oYW5kbGVyLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJoYW5kbGVyX25hbWVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm15dm9pZFxmUCIKLS5icgotLlJJICJcZklmb3IgaGFuZGxlcidzIGludGVybmFsIHVzZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJmbGFnc1xmUCIKLS5icgotLlJJICJcZklmb3IgYWdlbnRfaGFuZGxlcidzIGludGVybmFsIHVzZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCgqIFxmQmFjY2Vzc19tZXRob2RcZlAgKShzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3NcZlAgKikiCi0uYnIKLS5SSSAiXGZJaWYgeW91IGFkZCBtb3JlIG1lbWJlcnMsIHlvdSBwcm9iYWJseSBhbHNvIHdhbnQgdG8gdXBkYXRlIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCgqIFxmQmRhdGFfZnJlZVxmUCApKHZvaWQgKlxmQm15dm9pZFxmUCkiCi0uYnIKLS5SSSAiXGZJZGF0YSBmcmVlIGhvb2sgZm9yIG15dm9pZCBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgKiBcZkJwcmV2XGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotdGhlIG1pYiBoYW5kbGVyIHN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi0uUFAKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQoKiBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3M6OmFjY2Vzc19tZXRob2RcZlApKHN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fc1xmUCAqKSIKLS5QUAotaWYgeW91IGFkZCBtb3JlIG1lbWJlcnMsIHlvdSBwcm9iYWJseSBhbHNvIHdhbnQgdG8gdXBkYXRlIF9jbG9uZV9oYW5kbGVyIGluIFxmQmFnZW50X2hhbmRsZXIuY1xmUC4gCi0uU1MgInZvaWQoKiBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3M6OmRhdGFfZnJlZVxmUCkodm9pZCAqXGZCbXl2b2lkXGZQKSIKLS5QUAotZGF0YSBmcmVlIGhvb2sgZm9yIG15dm9pZCAKLS5TUyAiaW50IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfczo6ZmxhZ3NcZlAiCi0uUFAKLWZvciBhZ2VudF9oYW5kbGVyJ3MgaW50ZXJuYWwgdXNlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgInZvaWQqIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfczo6bXl2b2lkXGZQIgotLlBQCi1mb3IgaGFuZGxlcidzIGludGVybmFsIHVzZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUxIG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJkMTY4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0uVEggIm5ldHNubXBfcmVxdWVzdF9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX3JlcXVlc3RfaW5mb19zIFwtIAotLlBQCi1UaGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHNubXBfYWdlbnQuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCcmVxdWVzdHZiXGZQIgotLmJyCi0uUkkgIlxmSVxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBcZkJwYXJlbnRfZGF0YVxmUCIKLS5icgotLlJJICJcZkljYW4gYmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgZnJvbSBhIGhlbHBlciB0byB0aGUgbGF0ZXIgaGFuZGxlcnMgXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fc1xmUCAqIFxmQmFnZW50X3JlcV9pbmZvXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnJhbmdlX2VuZFxmUCIKLS5icgotLlJJICJcZklkb24ndCBmcmVlLCByZWZlcmVuY2UgdG8gKHN0cnVjdCBcZkJ0cmVlXGZQKS0+ZW5kIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnJhbmdlX2VuZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmRlbGVnYXRlZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcHJvY2Vzc2VkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJpbmNsdXNpdmVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnN0YXR1c1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5kZXhcZlAiCi0uYnIKLS5SSSAiXGZJaW5kZXggaW4gb3JpZ2luYWwgcGR1IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlcGVhdFxmUCIKLS5icgotLlJJICJcZklnZXQtYnVsayBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJvcmlnX3JlcGVhdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJyZXF1ZXN0dmJfc3RhcnRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3NcZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zXGZQICogXGZCcHJldlxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9zdWJ0cmVlX3NcZlAgKiBcZkJzdWJ0cmVlXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZS4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLS5QUAotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zOjppbmRleFxmUCIKLS5QUAotaW5kZXggaW4gb3JpZ2luYWwgcGR1IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU1MgIlxmQm5ldHNubXBfZGF0YV9saXN0XGZQKiBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zOjpwYXJlbnRfZGF0YVxmUCIKLS5QUAotY2FuIGJlIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGZyb20gYSBoZWxwZXIgdG8gdGhlIGxhdGVyIGhhbmRsZXJzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjQgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU1MgIm9pZCogXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fczo6cmFuZ2VfZW5kXGZQIgotLlBQCi1kb24ndCBmcmVlLCByZWZlcmVuY2UgdG8gKHN0cnVjdCBcZkJ0cmVlXGZQKS0+ZW5kIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzIgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU1MgImludCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zOjpyZXBlYXRcZlAiCi0uUFAKLWdldC1idWxrIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODcgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU1MgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCogXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fczo6cmVxdWVzdHZiXGZQIgotLlBQCi1cZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTggb2YgZmlsZSBzbm1wX2FnZW50LmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWM1ZTliLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLlRIICJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MgXC0gCi0uUFAKLVRhYmxlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8dGFibGUuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCaW5kZXhlc1xmUCIKLS5icgotLlJJICJcZklsaXN0IG9mIHZhcmJpbmRzIHdpdGggb25seSAndHlwZScgc2V0IFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQm51bWJlcl9pbmRleGVzXGZQIgotLmJyCi0uUkkgIlxmSWNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJtaW5fY29sdW1uXGZQIgotLmJyCi0uUkkgIlxmSXRoZSBtaW5pbXVtIGNvbHVtbnMgbnVtYmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJtYXhfY29sdW1uXGZQIgotLmJyCi0uUkkgIlxmSXRoZSBtYXhpbXVtIGNvbHVtbnMgbnVtYmVyIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jb2x1bW5faW5mb1xmUCAqIFxmQnZhbGlkX2NvbHVtbnNcZlAiCi0uYnIKLS5SSSAiXGZJbW9yZSBkZXRhaWxzIG9uIGNvbHVtbnMgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRhYmxlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzQgb2YgZmlsZSB0YWJsZS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAqIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fczo6aW5kZXhlc1xmUCIKLS5QUAotbGlzdCBvZiB2YXJiaW5kcyB3aXRoIG9ubHkgJ3R5cGUnIHNldCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc2IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fczo6bWF4X2NvbHVtblxmUCIKLS5QUAotdGhlIG1heGltdW0gY29sdW1ucyBudW1iZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NyBvZiBmaWxlIHRhYmxlLmguCi0uU1MgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3M6Om1pbl9jb2x1bW5cZlAiCi0uUFAKLXRoZSBtaW5pbXVtIGNvbHVtbnMgbnVtYmVyLiBJZiB0aGVyZSBhcmUgY29sdW1ucyBpbi1iZXR3ZWVuIHdoaWNoIGFyZSBub3QgdmFsaWQsIHVzZSB2YWxpZF9jb2x1bW5zIHRvIGdldCBhdXRvbWF0aWMgY29sdW1uIHJhbmdlIGNoZWNraW5nLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fczo6bnVtYmVyX2luZGV4ZXNcZlAiCi0uUFAKLWNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc4IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAiXGZCbmV0c25tcF9jb2x1bW5faW5mb1xmUCogXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zOjp2YWxpZF9jb2x1bW5zXGZQIgotLlBQCi1tb3JlIGRldGFpbHMgb24gY29sdW1ucyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkwIG9mIGZpbGUgdGFibGUuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2Yzg2OS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0uVEggIm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zIFwtIAotLlBQCi1UaGUgdGFibGUgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZS4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDx0YWJsZS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCY29sbnVtXGZQIgotLmJyCi0uUkkgIlxmSTAgaWYgT0lEIG5vdCBsb25nIGVub3VnaCBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJudW1iZXJfaW5kZXhlc1xmUCIKLS5icgotLlJJICJcZkkwIGlmIGZhaWx1cmUgdG8gcGFyc2UgYW55IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCaW5kZXhlc1xmUCIKLS5icgotLlJJICJcZkljb250ZW50cyBmcmVlZCBieSBoZWxwZXIgdXBvbiBleGl0IFxmUCIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmluZGV4X29pZFxmUCBbTUFYX09JRF9MRU5dIgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJpbmRleF9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiBcZkJyZWdfaW5mb1xmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSB0YWJsZSByZXF1ZXN0IGluZm8gc3RydWN0dXJlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMiBvZiBmaWxlIHRhYmxlLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zOjpjb2xudW1cZlAiCi0uUFAKLTAgaWYgT0lEIG5vdCBsb25nIGVub3VnaCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNCBvZiBmaWxlIHRhYmxlLmguCi0uU1MgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCogXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fczo6aW5kZXhlc1xmUCIKLS5QUAotY29udGVudHMgZnJlZWQgYnkgaGVscGVyIHVwb24gZXhpdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwOCBvZiBmaWxlIHRhYmxlLmguCi0uU1MgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zOjpudW1iZXJfaW5kZXhlc1xmUCIKLS5QUAotMCBpZiBmYWlsdXJlIHRvIHBhcnNlIGFueSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNiBvZiBmaWxlIHRhYmxlLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9vaWRfc3Rhc2guMyBiL21hbi9uZXRzbm1wX29pZF9zdGFzaC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWIwMzRiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX29pZF9zdGFzaC4zCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS5USCAiU3RvcmUgYW5kIHJldHJpZXZlIGRhdGEgcmVmZXJlbmNlZCBieSBhbiBPSUQuIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotU3RvcmUgYW5kIHJldHJpZXZlIGRhdGEgcmVmZXJlbmNlZCBieSBhbiBPSUQuIFwtIAotLlBQCi1UaGlzIGlzIGVzc2VudGlhbGx5IGEgd2F5IG9mIHN0b3JpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIFxmQm5ldHNubXBfb2lkX3N0YXNoX2NyZWF0ZV9zaXplZF9ub2RlXGZQIChzaXplX3QgbXlzaXplKSIKLS5icgotLlJJICJcZklDcmVhdGUgYW4gbmV0c25tcF9vaWRfc3Rhc2ggXGZCbm9kZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogXGZCbmV0c25tcF9vaWRfc3Rhc2hfY3JlYXRlX25vZGVcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYSBuZXRzbm1wX29pZF9zdGFzaF9ub2RlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9zdGFzaF9hZGRfZGF0YVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqKnJvb3QsIG9pZCAqbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbiwgdm9pZCAqbXlkYXRhKSIKLS5icgotLlJJICJcZklhZGRzIGRhdGEgdG8gdGhlIHN0YXNoIGF0IGEgZ2l2ZW4gb2lkLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiBcZkJuZXRzbm1wX29pZF9zdGFzaF9nZXRfbm9kZVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqcm9vdCwgb2lkICpsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgXGZCbm9kZVxmUCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIFxmQm5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqcm9vdCwgb2lkICpsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBuZXh0IFxmQm5vZGVcZlAgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqcm9vdCwgb2lkICpsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgZGF0YSBwb2ludGVyIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmVfYWxsXGZQIChpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKSIKLS5icgotLlJJICJcZklhIHdyYXBwZXIgYXJvdW5kIG5ldHNubXBfb2lkX3N0YXNoX3N0b3JlIGZvciB1c2Ugd2l0aCBhIFxmQnNubXBfYWxhcm1cZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX29pZF9zdGFzaF9zdG9yZVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqcm9vdCwgY29uc3QgY2hhciAqdG9rZW5uYW1lLCBOZXRTTk1QU3Rhc2hEdW1wICpkdW1wZm4sIG9pZCAqY3Vyb2lkLCBzaXplX3QgY3Vyb2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJc3RvcmVzIGRhdGEgaW4gYSBzdGFyc2ggXGZCdHJlZVxmUCB0byBwZXJpc3RlbnQgc3RvcmFnZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm9pZF9zdGFzaF9kdW1wXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICpyb290LCBjaGFyICpwcmVmaXgpIgotLmJyCi0uUkkgIlxmSUZvciBkZWJ1Z2dpbmc6IGR1bXAgdGhlIG5ldHNubXBfb2lkX3N0YXNoIFxmQnRyZWVcZlAgdG8gc3Rkb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9vaWRfc3Rhc2hfZnJlZVxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqKnJvb3QsIE5ldFNOTVBTdGFzaEZyZWVOb2RlICpmcmVlZm4pIgotLmJyCi0uUkkgIlxmSUZyZWVzIHRoZSBjb250ZW50cyBvZiBhIG5ldHNubXBfb2lkX3N0YXNoIFxmQnRyZWVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX29pZF9zdGFzaF9ub19mcmVlXGZQICh2b2lkICpib2d1cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGlzIGlzIGVzc2VudGlhbGx5IGEgd2F5IG9mIHN0b3JpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIAotCi1JdCBzdG9yZXMgYSBidW5jaCBvZiBkYXRhIHBvaW50ZXJzIHdpdGhpbiBhIG1lbW9yeSBcZkJ0cmVlXGZQIHRoYXQgYWxsb3dzIGZhaXJseSBlZmZpY2llbnQgbG9va3VwcyB3aXRoIGEgaGVhdmlseSBwb3B1bGF0ZWQgXGZCdHJlZVxmUC4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX29pZF9zdGFzaF9hZGRfZGF0YSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqKiByb290LCBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuLCB2b2lkICogbXlkYXRhKSIKLS5QUAotYWRkcyBkYXRhIHRvIHRoZSBzdGFzaCBhdCBhIGdpdmVuIG9pZC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIHRoZSB0b3Agb2YgdGhlIHN0YXNoIFxmQnRyZWVcZlAgCi0uYnIKLVxmSWxvb2t1cFxmUCB0aGUgb2lkIGluZGV4IHRvIHN0b3JlIHRoZSBkYXRhIGF0LiAKLS5icgotXGZJbG9va3VwX2xlblxmUCB0aGUgbGVuZ3RoIG9mIHRoZSBsb29rdXAgb2lkLiAKLS5icgotXGZJbXlkYXRhXGZQIHRoZSBkYXRhIHRvIHN0b3JlCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1TTk1QRVJSX1NVQ0NFU1Mgb24gc3VjY2VzcywgU05NUEVSUl9HRU5FUlIgaWYgZGF0YSBpcyBhbHJlYWR5IHRoZXJlLCBTTk1QRVJSX01BTExPQyBvbiBtYWxsb2MgZmFpbHVyZXMgb3IgaWYgYXJndW1lbnRzIHBhc3NlZCBpbiB3aXRoIE5VTEwgdmFsdWVzLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgzIG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAqIG5ldHNubXBfb2lkX3N0YXNoX2NyZWF0ZV9ub2RlICh2b2lkKSIKLS5QUAotQ3JlYXRlcyBhIG5ldHNubXBfb2lkX3N0YXNoX25vZGUuIEFzc3VtZXMgeW91IHdhbnQgdGhlIGRlZmF1bHQgT0lEX1NUQVNIX0NISUxEUkVOX1NJWkUgaGFzaCBzaXplIGZvciB0aGUgXGZCbm9kZVxmUC4gCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTlVMTCBvbiBlcnJvciwgb3RoZXJ3aXNlIHRoZSBuZXdseSBhbGxvY2F0ZWQgXGZCbm9kZVxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY2IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAqIG5ldHNubXBfb2lkX3N0YXNoX2NyZWF0ZV9zaXplZF9ub2RlIChzaXplX3QgbXlzaXplKSIKLS5QUAotQ3JlYXRlIGFuIG5ldHNubXBfb2lkX3N0YXNoIFxmQm5vZGVcZlAuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbXlzaXplXGZQIHRoZSBzaXplIG9mIHRoZSBjaGlsZCBwb2ludGVyIGFycmF5Ci0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1OVUxMIG9uIGVycm9yLCBvdGhlcndpc2UgdGhlIG5ld2x5IGFsbG9jYXRlZCBcZkJub2RlXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDYgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAidm9pZCBuZXRzbm1wX29pZF9zdGFzaF9mcmVlIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICoqIHJvb3QsIE5ldFNOTVBTdGFzaEZyZWVOb2RlICogZnJlZWZuKSIKLS5QUAotRnJlZXMgdGhlIGNvbnRlbnRzIG9mIGEgbmV0c25tcF9vaWRfc3Rhc2ggXGZCdHJlZVxmUC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIHRoZSB0b3Agb2YgdGhlIFxmQnRyZWVcZlAgKG9yIGJyYW5jaCB0byBiZSBmcmVlZCkgCi0uYnIKLVxmSWZyZWVmblxmUCBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGVhY2ggZGF0YSAodm9pZCAqKSBwb2ludGVyLiBJZiBsZWZ0IE5VTEwgdGhlIHN5c3RlbSBmcmVlKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MDEgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAidm9pZCogbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiByb290LCBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5QUAotcmV0dXJucyBhIGRhdGEgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFRoaXMgaXMgZXF1aXZlbGVudCB0byBuZXRzbm1wX29pZF9zdGFzaF9nZXRfbm9kZSwgYnV0IHJldHVybnMgb25seSB0aGUgZGF0YSBub3QgdGhlIGVudGlyZSBcZkJub2RlXGZQLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggCi0uYnIKLVxmSWxvb2t1cFxmUCB0aGUgb2lkIHRvIHNlYXJjaCBmb3IgCi0uYnIKLVxmSWxvb2t1cF9sZW5cZlAgdGhlIGxlbmd0aCBvZiB0aGUgc2VhcmNoIG9pZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODIgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCogbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X25vZGUgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiByb290LCBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5QUAotcmV0dXJucyBhIFxmQm5vZGVcZlAgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggXGZCdHJlZVxmUCAKLS5icgotXGZJbG9va3VwXGZQIHRoZSBvaWQgdG8gbG9vayB1cCBhIFxmQm5vZGVcZlAgZm9yLiAKLS5icgotXGZJbG9va3VwX2xlblxmUCB0aGUgbGVuZ3RoIG9mIHRoZSBsb29rdXAgb2lkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU0IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAqIG5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIHJvb3QsIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLlBQCi1yZXR1cm5zIHRoZSBuZXh0IFxmQm5vZGVcZlAgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBJTkNPTVBMRVRFLiBUaGlzIGlzIGVxdWl2ZWxlbnQgdG8gYSBHRVRORVhUIG9wZXJhdGlvbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTEgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAidm9pZCBuZXRzbm1wX29pZF9zdGFzaF9zdG9yZSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIHJvb3QsIGNvbnN0IGNoYXIgKiB0b2tlbm5hbWUsIE5ldFNOTVBTdGFzaER1bXAgKiBkdW1wZm4sIG9pZCAqIGN1cm9pZCwgc2l6ZV90IGN1cm9pZF9sZW4pIgotLlBQCi1zdG9yZXMgZGF0YSBpbiBhIHN0YXJzaCBcZkJ0cmVlXGZQIHRvIHBlcmlzdGVudCBzdG9yYWdlLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gc2F2ZSBhbGwgZGF0YSBpbiBhIHN0YXNoIFxmQnRyZWVcZlAgdG8gTmV0LVNOTVAncyBwZXJjZW50IHN0b3JhZ2UuIE1ha2Ugc3VyZSB5b3UgcmVnaXN0ZXIgYSBwYXJzaW5nIGZ1bmN0aW9uIHdpdGggdGhlIHJlYWRfY29uZmlnIHN5c3RlbSB0byByZS1pbmNvcnBlcmF0ZSB5b3VyIHNhdmVkIGRhdGEgaW50byBmdXR1cmUgdHJlZXMuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCB0aGUgdG9wIG9mIHRoZSBzdGFzaCB0byBzdG9yZS4gCi0uYnIKLVxmSXRva2VubmFtZVxmUCB0aGUgZmlsZSB0b2tlbiBuYW1lIHRvIHNhdmUgaW4gKHBhc3NpbmcgJ3NubXBkJyB3aWxsIHNhdmUgdGhpbmdzIGludG8gc25tcGQuY29uZikuIAotLmJyCi1cZklkdW1wZm5cZlAgQSBmdW5jdGlvbiB3aGljaCBjYW4gZHVtcCB0aGUgZGF0YSBzdG9yZWQgYXQgYSBwYXJ0aWN1bGFyIFxmQm5vZGVcZlAgaW50byBhIGNoYXIgYnVmZmVyLiAKLS5icgotXGZJY3Vyb2lkXGZQIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgT0lEIGFycmF5IG9mIGxlbmd0aCBNQVhfT0lEX0xFTi4gCi0uYnIKLVxmSWN1cm9pZF9sZW5cZlAgbXVzdCBiZSAwIGZvciB0aGUgdG9wIGxldmVsIGNhbGwuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzM0IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgImludCBuZXRzbm1wX29pZF9zdGFzaF9zdG9yZV9hbGwgKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqIHNlcnZlcmFyZywgdm9pZCAqIGNsaWVudGFyZykiCi0uUFAKLWEgd3JhcHBlciBhcm91bmQgbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmUgZm9yIHVzZSB3aXRoIGEgXGZCc25tcF9hbGFybVxmUC4gd2hlbiBjYWxsaW5nIFxmQnNubXBfYWxhcm1cZlAsIHlvdSBjYW4gbGlzdCB0aGlzIGFzIGEgY2FsbGJhY2suIFRoZSBjbGllbnRhcmcgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBhIG5ldHNubXBfb2lkX3N0YXNoX3NhdmVfaW5mbyBwb2ludGVyLiBJdCBjYW4gYWxzbyBiZSBjYWxsZWQgZGlyZWN0bHksIG9mIGNvdXJzZS4gVGhlIGxhc3QgYXJndW1lbnQgKGNsaWVudGFyZykgaXMgdGhlIG9ubHkgb25lIHRoYXQgaXMgdXNlZC4gVGhlIHJlc3QgYXJlIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uLiAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltYWpvcklEXGZQIAotLmJyCi1cZkltaW5vcklEXGZQIAotLmJyCi1cZklzZXJ2ZXJhcmdcZlAgCi0uYnIKLVxmSWNsaWVudGFyZ1xmUCBBIHBvaW50ZXIgdG8gYSBuZXRzbm1wX29pZF9zdGFzaF9zYXZlX2luZm8gc3RydWN0dXJlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwNCBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJ2b2lkIG9pZF9zdGFzaF9kdW1wIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogcm9vdCwgY2hhciAqIHByZWZpeCkiCi0uUFAKLUZvciBkZWJ1Z2dpbmc6IGR1bXAgdGhlIG5ldHNubXBfb2lkX3N0YXNoIFxmQnRyZWVcZlAgdG8gc3Rkb3V0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgVGhlIHRvcCBvZiB0aGUgXGZCdHJlZVxmUCAKLS5icgotXGZJcHJlZml4XGZQIGEgY2hhcmFjdGVyIHN0cmluZyBwcmVmaXggcHJpbnRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzQgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9vbGRfYXBpLjMgYi9tYW4vbmV0c25tcF9vbGRfYXBpLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNmNjNzUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfb2xkX2FwaS4zCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLlRIICJvbGRfYXBpIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotb2xkX2FwaSBcLSAKLS5QUAotQ2FsbHMgbWliIFxmQm1vZHVsZVxmUCBjb2RlIHdyaXR0ZW4gaW4gdGhlIG9sZCBzdHlsZSBvZiBjb2RlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJnZXRfb2xkX2FwaV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgb2xkX2FwaSBoYW5kbGVyIHRoYXQgc2hvdWxkIGJlIHRoZSBmaW5hbCBjYWxsaW5nIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaVxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBjb25zdCBjaGFyICpjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzKSIKLS5icgotLlJJICJcZklSZWdpc3RlcnMgYW4gb2xkIEFQSSBzZXQgaW50byB0aGUgbWliIFxmQnRyZWVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3Jvd1xmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHZhcl9zdWJpZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgY29uc3QgY2hhciAqY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgcm93IHdpdGhpbiBhIG1pYiB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29sZF9hcGlfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklpbXBsZW1lbnRzIHRoZSBvbGRfYXBpIGhhbmRsZXIgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNhbGxzIG1pYiBcZkJtb2R1bGVcZlAgY29kZSB3cml0dGVuIGluIHRoZSBvbGQgc3R5bGUgb2YgY29kZS4gCi0KLVRoaXMgaXMgYSBiYWNrd2FyZHMgY29tcGF0aWxpYml0eSBcZkJtb2R1bGVcZlAgdGhhdCBhbGxvd3MgY29kZSB3cml0dGVuIGluIHRoZSBvbGQgQVBJIHRvIGJlIHJ1biB1bmRlciB0aGUgbmV3IGhhbmRsZXIgYmFzZWQgYXJjaGl0ZWN0dXJlLiBVc2UgaXQgYnkgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKVxmUC4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIGdldF9vbGRfYXBpX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgb2xkX2FwaSBoYW5kbGVyIHRoYXQgc2hvdWxkIGJlIHRoZSBmaW5hbCBjYWxsaW5nIGhhbmRsZXIuIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uLiBVc2UgdGhlIFxmQm5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpXGZQIGZ1bmN0aW9uIGluc3RlYWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcgb2YgZmlsZSBvbGRfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX29sZF9hcGlfaGVscGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWltcGxlbWVudHMgdGhlIG9sZF9hcGkgaGFuZGxlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyNiBvZiBmaWxlIG9sZF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3JvdyAoY29uc3QgY2hhciAqIG1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqIHZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKiBtaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHZhcl9zdWJpZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICogc3MsIGNvbnN0IGNoYXIgKiBjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzKSIKLS5QUAotcmVnaXN0ZXJzIGEgcm93IHdpdGhpbiBhIG1pYiB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNyBvZiBmaWxlIG9sZF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSAoY29uc3QgY2hhciAqIG1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqIHZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKiBtaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBzcywgY29uc3QgY2hhciAqIGNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MpIgotLlBQCi1SZWdpc3RlcnMgYW4gb2xkIEFQSSBzZXQgaW50byB0aGUgbWliIFxmQnRyZWVcZlAuIEZ1bmN0aW9uYWxseSB0aGlzIG1pbWljcyB0aGUgb2xkIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkgZnVuY3Rpb24gKGFuZCBpbiBmYWN0IHRoZSBuZXcgcmVnaXN0ZXJfbWliX2NvbnRleHQoKSBmdW5jdGlvbiBtZXJlbHkgY2FsbHMgdGhpcyBuZXcgb2xkX2FwaSBvbmUpLiAKLS5QUAotbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZ2luZm8pOyBhbHJlYWR5IGZyZWVkIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDggb2YgZmlsZSBvbGRfYXBpLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmMWFhMQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYKQEAgLTAsMCArMSwyOSBAQAorLlRIIE5FVFNOTVBfUERVX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCitzbm1wX3BkdV9jcmVhdGUsCitzbm1wX2Nsb25lX3BkdSwKK3NubXBfZml4X3BkdSwKK3NubXBfZnJlZV9wZHUgLSBuZXRzbm1wX3BkdV9hcGkgZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+CisuUFAKKy5CSSAibmV0c25tcF9wZHUgKnNubXBfcGR1X2NyZWF0ZSggaW50IiAidHlwZSIgIik7IgorLlBQCisuQkkgIm5ldHNubXBfcGR1ICpzbm1wX2Nsb25lX3BkdSggbmV0c25tcF9wZHUqIiAicGR1IiAiKTsiCisuUFAKKy5CSSAibmV0c25tcF9wZHUgKnNubXBfZml4X3BkdSggbmV0c25tcF9wZHUqIiAicGR1IiAiLCBpbnQgIiAiaWR4IiAiKTsiCisuUFAKKy5CSSAibmV0c25tcF9wZHUgKnNubXBfZnJlZV9wZHUoIG5ldHNubXBfcGR1KiIgInBkdSIgIik7IgorLlBQCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggU05NUCByZXF1ZXN0IHN0cnVjdHVyZXMuCisuUFAKKy5CIHNubXBfcGR1X2NyZWF0ZQorLlBQCisuQiBzbm1wX2Nsb25lX3BkdQorLlBQCisuQiBzbm1wX2ZpeF9wZHUKKy5QUAorLkIgc25tcF9mcmVlX3BkdQorLlNIICJTRUUgQUxTTyIKK25ldHNubXBfdmFyYmluZF9hcGkoMyksIG5ldHNubXBfc2Vzc2lvbl9hcGkoMykKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMgYi9tYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQwZTFiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotLlRIICJwYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBydW4gdGltZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHJ1biB0aW1lIFwtIAotLlBQCi1UaGUgcmVhZF9jb25maWcgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGEgZmFpcmx5IGV4dGVuc2libGUgc3lzdGVtIG9mIHBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBydW4gdGltZS4gIAotCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0NPTkZJR19ERUxJTUVURVJTXGZQICAgJyBcXHQ9JyIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIHZvaWQoKnBhcnNlcikoY29uc3QgY2hhciAqLCBjaGFyICopLCB2b2lkKCpyZWxlYXNlcikodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbiwgdm9pZCgqcGFyc2VyKShjb25zdCBjaGFyICosIGNoYXIgKiksIHZvaWQoKnJlbGVhc2VyKSh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCB2b2lkKCpwYXJzZXIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwgdm9pZCgqcmVsZWFzZXIpKHZvaWQpLCBjb25zdCBjaGFyICpoZWxwKSIKLS5icgotLlJJICJcZklyZWdpc3Rlcl9jb25maWdfaGFuZGxlciByZWdpc3RlcnMgaGFuZGxlcnMgZm9yIGNlcnRhaW4gdG9rZW5zIHNwZWNpZmllZCBpbiBjZXJ0YWluIHR5cGVzIG9mIGZpbGVzLiBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4sIHZvaWQoKnBhcnNlcikoY29uc3QgY2hhciAqLCBjaGFyICopLCB2b2lkKCpyZWxlYXNlcikodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdHlwZV9wYXJhbSwgY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0uUkkgIlxmSXVyZWdpc3Rlcl9jb25maWdfaGFuZGxlciB1bi1yZWdpc3RlcnMgaGFuZGxlcnMgZ2l2ZW4gYSBzcGVjaWZpYyB0eXBlX3BhcmFtIGFuZCB0b2tlbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJ1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnNcZlAgKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzXGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuXGZQIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdHlwZSwgaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdfd2l0aF90eXBlXGZQIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVhZF9jb25maWdfZmluZF9oYW5kbGVyXGZQIChzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKmxpbmVfaGFuZGxlcnMsIGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcnVuX2NvbmZpZ19oYW5kbGVyXGZQIChzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKmxwdHIsIGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyLCBpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY29uZmlnX3doZW5cZlAgKGNoYXIgKmxpbmUsIGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jb25maWdcZlAgKGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcmVtZW1iZXJfaW5fbGlzdFxmUCAoY2hhciAqbGluZSwgc3RydWN0IFxmQnJlYWRfY29uZmlnX21lbW9yeVxmUCAqKm1lbSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcl9mcmVlX2xpc3RcZlAgKHN0cnVjdCBcZkJyZWFkX2NvbmZpZ19tZW1vcnlcZlAgKiptZW0pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcnlfbGlzdFxmUCAoc3RydWN0IFxmQnJlYWRfY29uZmlnX21lbW9yeVxmUCAqKm1lbXAsIGludCB3aGVuLCBpbnQgY2xlYXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcmVtZW1iZXJcZlAgKGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcmllc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yaWVzX3doZW5cZlAgKGludCB3aGVuLCBpbnQgY2xlYXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdcZlAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKmxpbmVfaGFuZGxlciwgaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnJlZV9jb25maWdcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdzX29wdGlvbmFsXGZQIChjb25zdCBjaGFyICpvcHRpb25hbF9jb25maWcsIGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX3ByZW1pYl9jb25maWdzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeVxmUCAoY29uc3QgY2hhciAqZGlyKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5XGZQICgpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5XGZQIChjb25zdCBjaGFyICpkaXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnlcZlAgKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZXRfdGVtcF9maWxlX3BhdHRlcm5cZlAgKGNvbnN0IGNoYXIgKnBhdHRlcm4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJnZXRfdGVtcF9maWxlX3BhdHRlcm5cZlAgKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ19maWxlc1xmUCAoaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdfcHJpbnRfdXNhZ2VcZlAgKGNvbnN0IGNoYXIgKmxlYWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdfc3RvcmVcZlAgKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmxpbmUpIgotLmJyCi0uUkkgIlxmSXJlYWRfY29uZmlnX3N0b3JlIGludGVuZGVkIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHRvIHN0b3JlIHBlcm1lbmFudCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBieSBzZXRzIG9yIHBlcnNpc3RlbnQgY291bnRlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2FwcF9jb25maWdfc3RvcmVcZlAgKGNvbnN0IGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zYXZlX3BlcnNpc3RlbnRcZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9jbGVhbl9wZXJzaXN0ZW50XGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNvbmZpZ19wZXJyb3JcZlAgKGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjb25maWdfcHdhcm5cZlAgKGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNraXBfd2hpdGVcZlAgKGNoYXIgKnB0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNraXBfbm90X3doaXRlXGZQIChjaGFyICpwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJza2lwX3Rva2VuXGZQIChjaGFyICpwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJjb3B5X253b3JkXGZQIChjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmNvcHlfd29yZFxmUCAoY2hhciAqZnJvbSwgY2hhciAqdG8pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZ1xmUCAoY2hhciAqc2F2ZXRvLCB1X2NoYXIgKnN0ciwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nXGZQIChjaGFyICpyZWFkZnJvbSwgdV9jaGFyICoqc3RyLCBzaXplX3QgKmxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3NhdmVfb2JqaWRcZlAgKGNoYXIgKnNhdmV0bywgb2lkICpvYmppZCwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3JlYWRfb2JqaWRcZlAgKGNoYXIgKnJlYWRmcm9tLCBvaWQgKipvYmppZCwgc2l6ZV90ICpsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19yZWFkX2RhdGFcZlAgKGludCB0eXBlLCBjaGFyICpyZWFkZnJvbSwgdm9pZCAqZGF0YXB0ciwgc2l6ZV90ICpsZW4pIgotLmJyCi0uUkkgIlxmSXJlYWRfY29uZmlnX3JlYWRfZGF0YSByZWFkcyBkYXRhIG9mIGEgZ2l2ZW4gdHlwZSBmcm9tIGEgdG9rZW4ocykgb24gYSBjb25maWd1cmF0aW9uIGxpbmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3JlYWRfbWVtb3J5XGZQIChpbnQgdHlwZSwgY2hhciAqcmVhZGZyb20sIGNoYXIgKmRhdGFwdHIsIHNpemVfdCAqbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfc3RvcmVfZGF0YVxmUCAoaW50IHR5cGUsIGNoYXIgKnN0b3JldG8sIHZvaWQgKmRhdGFwdHIsIHNpemVfdCAqbGVuKSIKLS5icgotLlJJICJcZklyZWFkX2NvbmZpZ19zdG9yZV9kYXRhIHN0b3JlcyBkYXRhIG9mIGEgZ2l2ZW4gdHlwZSB0byBhIGNvbmZpZ3VyYXRpb24gbGluZSBpbnRvIHRoZSBzdG9yZXRvIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfc3RvcmVfZGF0YV9wcmVmaXhcZlAgKGNoYXIgcHJlZml4LCBpbnQgdHlwZSwgY2hhciAqc3RvcmV0bywgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IGxlbikiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfZmlsZXNcZlAgKiBcZkJjb25maWdfZmlsZXNcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsaW5lY291bnRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQmN1cmZpbGVuYW1lXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHJlYWRfY29uZmlnIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBhIGZhaXJseSBleHRlbnNpYmxlIHN5c3RlbSBvZiBwYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCB0aGUgcnVuIHRpbWUuIAotCi1UaGUgaWRlYSBpcyB0aGF0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGlzIGFibGUgdG8gcmVnaXN0ZXIgaGFuZGxlcnMgZm9yIGNlcnRhaW4gdG9rZW5zIHNwZWNpZmllZCBpbiBjZXJ0YWluIHR5cGVzIG9mIGZpbGVzLiBUaGUgcmVhZF9jb25maWdzIGZ1bmN0aW9uIGNhbiB0aGVuIGJlIGNhbGxlZCB0byBsb29rIGZvciBhbGwgdGhlIGZpbGVzIHRoYXQgaXQgaGFzIHJlZ2lzdHJhdGlvbnMgZm9yLCBmaW5kIHRoZSBmaXJzdCB3b3JkIG9uIGVhY2ggbGluZSwgYW5kIHBhc3MgdGhlIHJlbWFpbmRlciB0byB0aGUgYXBwcm9wcmlhdGVseSByZWdpc3RlcmVkIGhhbmRsZXIuCi0uUFAKLUZvciBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24gc3RvcmFnZSB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgcmVhZF9jb25maWdfcmVhZF9kYXRhLCByZWFkX2NvbmZpZ19zdG9yZSwgYW5kIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEgQVBJcyBpbiBjb25qdW5jdGlvbiB3aXRoIGZpcnN0IHJlZ2lzdGVyaW5nIGEgY2FsbGJhY2sgc28gd2hlbiB0aGUgYWdlbnQgc2h1dHNkb3duIGZvciB3aGF0ZXZlciByZWFzb24gZGF0YSBpcyB3cml0dGVuIHRvIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGZvbGxvd2luZyBleHBsYWlucyBpbiBtb3JlIGRldGFpbCB0aGUgc2VxdWVuY2UgdG8gbWFrZSB0aGlzIGhhcHBlbi4KLS5QUAotVGhpcyBpcyB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIEFQSSwgeW91IG5lZWQgdG8gY2FsbCB0aGlzIEFQSSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIGluIG9yZGVyIHRvIGNvbmZpZ3VyZSBwZXJzaXN0ZW50IHN0b3JhZ2UgbmVlZHMuCi0uUFAKLWludCBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKm5ld19jYWxsYmFjaywgdm9pZCAqYXJnKTsKLS5QUAotWW91IHdpbGwgbmVlZCB0byBzZXQgbWFqb3IgdG8gU05NUF9DQUxMQkFDS19MSUJSQVJZLCBtaW5vciB0byBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEuIGFyZyBpcyB3aGF0ZXZlciB5b3Ugd2FudC4KLS5QUAotWW91ciBjYWxsYmFjayBmdW5jdGlvbidzIHByb3RvdHlwZSBpczogaW50IChTTk1QQ2FsbGJhY2spIChpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKLS5QUAotVGhlIG1ham9ySUQsIG1pbm9ySUQgYW5kIGNsaWVudGFyZyBhcmUgd2hhdCB5b3UgcGFzc2VkIGluIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gYWJvdmUuIFdoZW4gdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB5b3UgaGF2ZSB0byBlc3NlbnRpYWxseSB0cmFuc2ZlciBhbGwgeW91ciBzdGF0ZSBmcm9tIG1lbW9yeSB0byBkaXNrLiBZb3UgZG8gdGhpcyBieSBnZW5lcmF0aW5nIGNvbmZpZ3VyYXRpb24gbGluZXMgaW50byBhIGJ1ZmZlci4gVGhlIGxpbmVzIGFyZSBvZiB0aGUgZm9ybSB0b2tlbiBmb2xsb3dlZCBieSB0b2tlbiBwYXJhbWV0ZXJzLgotLlBQCi1GaW5hbGx5IHN0b3JpbmcgaXMgZG9uZSB1c2luZyByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBidWZmZXIpOyB0eXBlIGlzIHRoZSBhcHBsaWNhdGlvbiBuYW1lIHRoaXMgY2FuIGJlIG9idGFpbmVkIGZyb206Ci0uUFAKLW5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwotLlBQCi1Ob3csIHJlYWRpbmcgYmFjayB0aGUgZGF0YTogVGhpcyBpcyBkb25lIGJ5IHJlZ2lzdGVyaW5nIGEgY29uZmlnIGhhbmRsZXIgZm9yIHlvdXIgdG9rZW4gdXNpbmcgdGhlIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIGZ1bmN0aW9uLiBZb3VyIGhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIGFuZCB5b3UgY2FuIHBhcnNlIGluIHRoZSBkYXRhIHVzaW5nIHRoZSByZWFkX2NvbmZpZ19yZWFkIEFQSXMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJjaGFyKiByZWFkX2NvbmZpZ19yZWFkX2RhdGEgKGludCB0eXBlLCBjaGFyICogcmVhZGZyb20sIHZvaWQgKiBkYXRhcHRyLCBzaXplX3QgKiBsZW4pIgotLlBQCi1yZWFkX2NvbmZpZ19yZWFkX2RhdGEgcmVhZHMgZGF0YSBvZiBhIGdpdmVuIHR5cGUgZnJvbSBhIHRva2VuKHMpIG9uIGEgY29uZmlndXJhdGlvbiBsaW5lLiBUaGUgc3VwcG9ydGVkIHR5cGVzIGFyZToKLS5QUAotLklQICJcKGJ1IiAyCi1BU05fSU5URUdFUgotLklQICJcKGJ1IiAyCi1BU05fVElNRVRJQ0tTCi0uSVAgIlwoYnUiIDIKLUFTTl9VTlNJR05FRAotLklQICJcKGJ1IiAyCi1BU05fT0NURVRfU1RSCi0uSVAgIlwoYnUiIDIKLUFTTl9CSVRfU1RSCi0uSVAgIlwoYnUiIDIKLUFTTl9PQkpFQ1RfSUQKLS5QUAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgdGhlIGFzbiBkYXRhIHR5cGUgdG8gYmUgcmVhZCBpbi4KLS5icgotXGZJcmVhZGZyb21cZlAgdGhlIGNvbmZpZ3VyYXRpb24gbGluZSBkYXRhIHRvIGJlIHJlYWQuCi0uYnIKLVxmSWRhdGFwdHJcZlAgYW4gYWxsb2NhdGVkIHBvaW50ZXIgZXhwZWN0ZWQgdG8gbWF0Y2ggdGhlIHR5cGUgYmVpbmcgcmVhZCAoaW50ICosIHVfaW50ICosIGNoYXIgKiosIG9pZCAqKikKLS5icgotXGZJbGVuXGZQIGlzIHRoZSBsZW5ndGggb2YgYW4gYXNuIG9pZCBvciBvY3RldC9iaXQgc3RyaW5nLCBub3QgcmVxdWlyZWQgZm9yIHRoZSBhc24gaW50ZWdlciwgdW5zaWduZWQgaW50ZWdlciwgYW5kIHRpbWV0aWNrcyB0eXBlcwotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdGhlIG5leHQgdG9rZW4gaW4gdGhlIGNvbmZpZ3VyYXRpb24gbGluZS4gTlVMTCBpZiBub25lIGxlZnQgb3IgaWYgYW4gdW5rbm93biB0eXBlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4MzYgb2YgZmlsZSByZWFkX2NvbmZpZy5jLgotLlNTICJ2b2lkIHJlYWRfY29uZmlnX3N0b3JlIChjb25zdCBjaGFyICogdHlwZSwgY29uc3QgY2hhciAqIGxpbmUpIgotLlBQCi1yZWFkX2NvbmZpZ19zdG9yZSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0byBzdG9yZSBwZXJtZW5hbnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkgc2V0cyBvciBwZXJzaXN0ZW50IGNvdW50ZXJzLiBBcHBlbmRzIGxpbmUgdG8gYSBmaWxlIG5hbWVkIGVpdGhlciBFTlYoU05NUF9QRVJTSVNURU5UX0ZJTEUpIG9yICc8TkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT4vPHR5cGU+LmNvbmYnLiBBZGRzIGEgdHJhaWxpbmcgbmV3bGluZSB0byB0aGUgc3RvcmVkIGZpbGUgaWYgbmVjZXNzYXJ5LgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgaXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUgCi0uYnIKLVxmSWxpbmVcZlAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gbGluZSB3cml0dGVuIHRvIHRoZSBhcHBsaWNhdGlvbiBuYW1lJ3MgY29uZmlndXJhdGlvbiBmaWxlCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI3MiBvZiBmaWxlIHJlYWRfY29uZmlnLmMuCi0uU1MgImNoYXIqIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEgKGludCB0eXBlLCBjaGFyICogc3RvcmV0bywgdm9pZCAqIGRhdGFwdHIsIHNpemVfdCAqIGxlbikiCi0uUFAKLXJlYWRfY29uZmlnX3N0b3JlX2RhdGEgc3RvcmVzIGRhdGEgb2YgYSBnaXZlbiB0eXBlIHRvIGEgY29uZmlndXJhdGlvbiBsaW5lIGludG8gdGhlIHN0b3JldG8gYnVmZmVyLiBDYWxscyByZWFkX2NvbmZpZ19zdG9yZV9kYXRhX3ByZWZpeCB3aXRoIHRoZSBwcmVmaXggcGFyYW1ldGVyIHNldCB0byBhIGNoYXIgc3BhY2UuIFRoZSBzdXBwb3J0ZWQgdHlwZXMgYXJlOgotLlBQCi0uSVAgIlwoYnUiIDIKLUFTTl9JTlRFR0VSCi0uSVAgIlwoYnUiIDIKLUFTTl9USU1FVElDS1MKLS5JUCAiXChidSIgMgotQVNOX1VOU0lHTkVECi0uSVAgIlwoYnUiIDIKLUFTTl9PQ1RFVF9TVFIKLS5JUCAiXChidSIgMgotQVNOX0JJVF9TVFIKLS5JUCAiXChidSIgMgotQVNOX09CSkVDVF9JRAotLlBQCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCB0aGUgYXNuIGRhdGEgdHlwZSB0byBiZSBzdG9yZWQKLS5icgotXGZJc3RvcmV0b1xmUCBhIHByZS1hbGxvY2F0ZWQgY2hhciBidWZmZXIgd2hpY2ggd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIGJlIHN0b3JlZAotLmJyCi1cZklkYXRhcHRyXGZQIGNvbnRhaW5zIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQsIHRoZSBzdXBwb3J0ZWQgcG9pbnRlcnM6IChpbnQgKiwgdV9pbnQgKiwgY2hhciAqKiwgb2lkICoqKQotLmJyCi1cZklsZW5cZlAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgdG8gYmUgc3RvcmVkIChub3QgcmVxdWlyZWQgZm9yIHRoZSBhc24gaW50ZWdlciwgdW5zaWduZWQgaW50ZWdlciwgYW5kIHRpbWV0aWNrcyB0eXBlcykKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWNoYXJhY3RlciBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIE5VTEwgaWYgYW4gdW5rbm93biB0eXBlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5OTUgb2YgZmlsZSByZWFkX2NvbmZpZy5jLgotLlNTICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAqIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIChjb25zdCBjaGFyICogdHlwZSwgY29uc3QgY2hhciAqIHRva2VuLCB2b2lkKCopKGNvbnN0IGNoYXIgKiwgY2hhciAqKSBwYXJzZXIsIHZvaWQoKikodm9pZCkgcmVsZWFzZXIsIGNvbnN0IGNoYXIgKiBoZWxwKVxmQyBbcmVhZF1cZlAiCi0uUFAKLXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgY2VydGFpbiB0b2tlbnMgc3BlY2lmaWVkIGluIGNlcnRhaW4gdHlwZXMgb2YgZmlsZXMuIEFsbG93cyBhIFxmQm1vZHVsZVxmUCB3cml0ZXIgdXNlL3JlZ2lzdGVyIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb2ZmIG9mIHRoZSB0eXBlIHBhcmFtZXRlci4gQSBcZkJtb2R1bGVcZlAgd3JpdGVyIG1heSB3YW50IHRvIHNldCB1cCBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHNlcGFyYXRlIG91dCByZWxhdGVkIHRhc2tzL3ZhcmlhYmxlcyBvciBqdXN0IGZvciBtYW5hZ2VtZW50IG9mIHdoZXJlIHRvIHB1dCB0b2tlbnMgYXMgdGhlIFxmQm1vZHVsZVxmUCBvciBtb2R1bGVzIGdldCBtb3JlIGNvbXBsZXggaW4gcmVnYXJkIHRvIGhhbmRsaW5nIHRva2VuIHJlZ2lzdHJhdGlvbnMuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHVzZWQsIGUuZy4sIGlmIHNubXAuY29uZiBpcyB0aGUgZmlsZSB3aGVyZSB0aGUgdG9rZW4gaXMgbG9jYXRlZCB1c2UgJ3NubXAnIGhlcmUuIE11bHRpcGxlIGNvbG9uIHNlcGFyYXRlZCB0b2tlbnMgbWlnaHQgYmUgdXNlZC4gSWYgTlVMTCBvciAnJyB0aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCB3aWxsIGJlIDxhcHBsaWNhdGlvbj4uY29uZi4KLS5icgotXGZJdG9rZW5cZlAgdGhlIHRva2VuIGJlaW5nIHBhcnNlZCBmcm9tIHRoZSBmaWxlLiBNdXN0IGJlIG5vbi1OVUxMLgotLmJyCi1cZklwYXJzZXJcZlAgdGhlIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlciB0aGF0IHVzZSB0aGUgc3BlY2lmaWVkIHRva2VuIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byBkbyB3aGF0ZXZlciBpcyByZXF1aXJlZCBTaG91bGQgYmUgbm9uLU5VTEwgaW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhpcyBBUEkuCi0uYnIKLVxmSXJlbGVhc2VyXGZQIGlmIG5vbi1OVUxMLCB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGlzIGNhbGxlZCBpZiBhbmQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmUtcmVhZC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbi4KLS5icgotXGZJaGVscFxmUCBpZiBub24tTlVMTCwgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gb24gdGhlIGV4cGVjdGVkIGFyZ3VtZW50cyBhZnRlciB0aGUgdG9rZW4uCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1Qb2ludGVyIHRvIGEgbmV3IGNvbmZpZyBsaW5lIGVudHJ5IG9yIE5VTEwgb24gZXJyb3IuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg0IG9mIGZpbGUgcmVhZF9jb25maWcuYy4KLS5TUyAidm9pZCB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIChjb25zdCBjaGFyICogdHlwZV9wYXJhbSwgY29uc3QgY2hhciAqIHRva2VuKSIKLS5QUAotdXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHVuLXJlZ2lzdGVycyBoYW5kbGVycyBnaXZlbiBhIHNwZWNpZmljIHR5cGVfcGFyYW0gYW5kIHRva2VuLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVfcGFyYW1cZlAgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkIHdoZXJlIHRoZSB0b2tlbiBpcyBsb2NhdGVkLiBVc2VkIHRvIGxvb2t1cCB0aGUgY29uZmlnIGZpbGUgZW50cnkKLS5icgotXGZJdG9rZW5cZlAgdGhlIHRva2VuIHRoYXQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzE1IG9mIGZpbGUgcmVhZF9jb25maWcuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9yZWFkX29ubHkuMyBiL21hbi9uZXRzbm1wX3JlYWRfb25seS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2E0MGZkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3JlYWRfb25seS4zCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLlRIICJyZWFkX29ubHkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1yZWFkX29ubHkgXC0gCi0uUFAKLU1ha2UgeW91ciBoYW5kbGVyIHJlYWRfb25seSBhdXRvbWF0aWNhbGx5IFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBmb3IgYW55IHJlcXVlc3RzIHBhc3NlZCB0byBpdCBpbiBhIFNFVCBtb2RlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9yZWFkX29ubHlfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHJlYWRfb25seSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlYWRfb25seV9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSByZWFkX29ubHkgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcmVhZF9vbmx5IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1NYWtlIHlvdXIgaGFuZGxlciByZWFkX29ubHkgYXV0b21hdGljYWxseSBUaGUgb25seSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXJyb3IgZm9yIGFueSByZXF1ZXN0cyBwYXNzZWQgdG8gaXQgaW4gYSBTRVQgbW9kZS4gCi0KLUluc2VydGluZyBpdCBpbnRvIHlvdXIgaGFuZGxlciBjaGFpbiB3aWxsIGVuc3VyZSB5b3UncmUgbmV2ZXIgYXNrZWQgdG8gcGVyZm9ybSBhIFNFVCByZXF1ZXN0IHNvIHlvdSBjYW4gaWdub3JlIHRob3NlIGVycm9yIGNvbmRpdGlvbnMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9yZWFkX29ubHlfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSByZWFkX29ubHkgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOSBvZiBmaWxlIHJlYWRfb25seS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MSBvZiBmaWxlIHJlYWRfb25seS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3Jvd19tZXJnZS4zIGIvbWFuL25ldHNubXBfcm93X21lcmdlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzYyZDIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfcm93X21lcmdlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLlRIICJyb3dfbWVyZ2UiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1yb3dfbWVyZ2UgXC0gCi0uUFAKLUNhbGxzIHN1YiBoYW5kbGVycyB3aXRoIHJlcXVlc3QgZm9yIG9uZSByb3cgYXQgYSB0aW1lLiAgCi0KLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJPV19NRVJHRV9XQUlUSU5HXGZQICAgMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJPV19NRVJHRV9BQ1RJVkVcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUk9XX01FUkdFX0RPTkVcZlAgICAyIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUk9XX01FUkdFX0hFQURcZlAgICAzIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXJcZlAgKGludCBwcmVmaXhfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgcm93X21lcmdlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcm93X21lcmdlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgcm93X21lcmdlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcm93X21lcmdlX3N0YXR1c1xmUCAqIFxmQm5ldHNubXBfcm93X21lcmdlX3N0YXR1c19nZXRcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBpbnQgY3JlYXRlX21pc3NpbmcpIgotLmJyCi0uUkkgIlxmSXJldHJpZXZlIHJvd19tZXJnZV9zdGF0dXMgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbykiCi0uYnIKLS5SSSAiXGZJRGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3RcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvKSIKLS5icgotLlJJICJcZklEZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcm93X21lcmdlX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklJbXBsZW1lbnRzIHRoZSByb3dfbWVyZ2UgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9yb3dfbWVyZ2VcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSByb3dfbWVyZ2UgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcm93X21lcmdlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1DYWxscyBzdWIgaGFuZGxlcnMgd2l0aCByZXF1ZXN0IGZvciBvbmUgcm93IGF0IGEgdGltZS4gCi0KLVRoaXMgaGVscGVyIHNwbGl0cyBhIHdob2xlIGJ1bmNoIG9mIHJlcXVlc3RzIGludG8gY2h1bmtzIGJhc2VkIG9uIHRoZSByb3cgaW5kZXggdGhhdCB0aGV5IHJlZmVyIHRvLCBhbmQgcGFzc2VzIGFsbCByZXF1ZXN0cyBmb3IgYSBnaXZlbiByb3cgdG8gdGhlIGxvd2VyIGhhbmRsZXJzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaGFuZGxlcnMgdGhhdCBkb24ndCB3YW50IHRvIHByb2Nlc3MgbXVsdGlwbGUgcm93cyBhdCB0aGUgc2FtZSB0aW1lLCBidXQgYXJlIGhhcHB5IHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcmVxdWVzdCBsaXN0IGZvciBhIHNpbmdsZSByb3cuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlciAoaW50IHByZWZpeF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgcm93X21lcmdlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjggb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfcm93X21lcmdlICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHJvd19tZXJnZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByb3dfbWVyZ2UgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNjAgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfcm93X21lcmdlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSByb3dfbWVyZ2UgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDIgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcm93X21lcmdlX2hlbHBlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLUltcGxlbWVudHMgdGhlIHJvd19tZXJnZSBoYW5kbGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NCBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJpbnQgbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvKSIKLS5QUAotRGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHJvdy4gcmV0dXJucyAxIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHJvdyBmb3IgdGhpcyBwYXNzIG9mIHRoZSBoYW5kbGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMCBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJcZkJuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNcZlAqIG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19nZXQgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIGludCBjcmVhdGVfbWlzc2luZykiCi0uUFAKLXJldHJpZXZlIHJvd19tZXJnZV9zdGF0dXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NyBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJpbnQgbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3QgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8pIgotLlBQCi1EZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCByb3cuIHJldHVybnMgMSBpZiB0aGlzIGlzIHRoZSBsYXN0IHJvdyBmb3IgdGhpcyBwYXNzIG9mIHRoZSBoYW5kbGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzMCBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NjYWxhci4zIGIvbWFuL25ldHNubXBfc2NhbGFyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZWQ0Y2MuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc2NhbGFyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLlRIICJzY2FsYXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zY2FsYXIgXC0gCi0uUFAKLVByb2Nlc3Mgc2NhbGFycyBlYXNpbHkuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGEgc2NhbGFyIGhhbmRsZXIgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIHdpdGggYSBoYW5kbGVyIG5hbWUgZGVmYXVsdGVkIHRvICdzY2FsYXInIGFuZCBhY2Nlc3MgbWV0aG9kLCBuZXRzbm1wX3NjYWxhcl9oZWxwZXJfaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgc2NhbGFyIGhlbHBlciBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9zY2FsYXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgcmVhZCBvbmx5IHNjYWxhciBoZWxwZXIgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zY2FsYXJfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUHJvY2VzcyBzY2FsYXJzIGVhc2lseS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyICh2b2lkKSIKLS5QUAotQ3JlYXRlcyBhIHNjYWxhciBoYW5kbGVyIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlciB3aXRoIGEgaGFuZGxlciBuYW1lIGRlZmF1bHRlZCB0byAnc2NhbGFyJyBhbmQgYWNjZXNzIG1ldGhvZCwgbmV0c25tcF9zY2FsYXJfaGVscGVyX2hhbmRsZXIuIFxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgaGFuZGxlcidzIG5hbWUgYW5kIHRoZSBhY2Nlc3MgbWV0aG9kCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXJcZlAgCi0uUFAKLVxmQm5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDYgb2YgZmlsZSBzY2FsYXIuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3NjYWxhciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIHJlYWQgb25seSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuIFRoaXMgZnVuY3Rpb24gaXMgdmVyeSBzaW1pbGFyIHRvIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyIHRoZSBvbmx5IGFkZGl0aW9uIGlzIHRoYXQgdGhlICdyZWFkX29ubHknIGhhbmRsZXIgaXMgaW5qZWN0ZWQgaW50byB0aGUgaGFuZGxlciBjaGFpbiBwcmlvciB0byBpbmplY3RpbmcgdGhlIHNlcmlhbGl6ZSBoYW5kbGVyIGFuZCByZWdpc3RlcmluZyByZWdpbmZvLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlZ2luZm9cZlAgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgd2hpY2ggY291bGQgZ2V0IGNyZWF0ZWQgdXNpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24uIFVzZWQgdG8gcmVnaXN0ZXIgYSByZWFkIG9ubHkgc2NhbGFyIGhlbHBlciBoYW5kbGVyLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMVVJFIGFuZCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhclxmUCAKLS5QUAotXGZCbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXJcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDkgb2YgZmlsZSBzY2FsYXIuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgc2NhbGFyIGhlbHBlciBoYW5kbGVyLiBUaGUgcmVnaXN0ZXJlZCBPSUQsIHJlZ2luZm8tPnJvb3RvaWQsIHNwYWNlIGlzIGV4dGVuZGVkIGZvciB0aGUgaW5zdGFuY2Ugc3ViaWQgdXNpbmcgcmVhbGxvYygpIGJ1dCB0aGUgcmVnaW5mby0+cm9vdG9pZF9sZW4gbGVuZ3RoIGlzIG5vdCBleHRlbmRlZCBqdXN0IHlldC4gLlRoaXMgZnVuY3Rpb24gc3Vic2VxdWVudGx5IGluamVjdHMgdGhlIGluc3RhbmNlLCBzY2FsYXIsIGFuZCBzZXJpYWxpemUgaGVscGVyIGhhbmRsZXJzIGJlZm9yZSBhY3R1YWxseSByZWdpc3RlcmluZyByZWdpbmZvLgotLlBQCi1FYWNoIGhhbmRsZXIgaXMgaW5qZWN0ZWQvcHVzaGVkIHRvIHRoZSB0b3Agb2YgdGhlIGhhbmRsZXIgY2hhaW4gbGlzdCBhbmQgd2lsbCBiZSBwcm9jZXNzZWQgbGFzdCBpbiBmaXJzdCBvdXQsIExJRk8uCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVnaW5mb1xmUCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSB3aGljaCBjb3VsZCBnZXQgY3JlYXRlZCB1c2luZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gVXNlZCB0byByZWdpc3RlciBhIHNjYWxhciBoZWxwZXIgaGFuZGxlci4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTFVSRSBhbmQgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfc2NhbGFyXGZQIAotLlBQCi1cZkJuZXRzbm1wX2dldF9zY2FsYXJfaGFuZGxlclxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc0IG9mIGZpbGUgc2NhbGFyLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMgYi9tYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiYTliMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS5USCAic2NhbGFyX2dyb3VwIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc2NhbGFyX2dyb3VwIFwtIAotLlBQCi1Qcm9jZXNzIGdyb3VwcyBvZiBzY2FsYXJzLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9zY2FsYXJfZ3JvdXBfaGFuZGxlclxmUCAob2lkIGZpcnN0LCBvaWQgbGFzdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBvaWQgZmlyc3QsIG9pZCBsYXN0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zY2FsYXJfZ3JvdXBfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUHJvY2VzcyBncm91cHMgb2Ygc2NhbGFycy4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2VyaWFsaXplLjMgYi9tYW4vbmV0c25tcF9zZXJpYWxpemUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3NGYzZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zZXJpYWxpemUuMworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS5USCAic2VyaWFsaXplIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc2VyaWFsaXplIFwtIAotLlBQCi1DYWxscyBzdWIgaGFuZGxlcnMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9zZXJpYWxpemVfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHNlcmlhbGl6ZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3NlcmlhbGl6ZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZXJpYWxpemVfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSUltcGxlbWVudHMgdGhlIHNlcmlhbCBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3NlcmlhbGl6ZVxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzZXJpYWxpemUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNhbGxzIHN1YiBoYW5kbGVycyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuIAotCi1UaGlzIGZ1bmN0aW9uYWxseSBwYXNzZXMgaW4gb25lIHJlcXVlc3QgYXQgYSB0aW1lIGludG8gbG93ZXIgaGFuZGxlcnMgcmF0aGVyIHRoYW4gYSB3aG9sZSBidW5jaCBvZiByZXF1ZXN0cyBhdCBvbmNlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaGFuZGxlcnMgdGhhdCBkb24ndCB3YW50IHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcmVxdWVzdCBsaXN0cyB0aGVtc2VsdmVzLiBHZW5lcmFsbHksIHRoaXMgaXMgcHJvYmFibHkgbGVzcyBlZmZpY2llbnQgc28gdXNlIHdpdGggY2F1dGlvbi4gVGhlIHNlcmlhbGl6ZSBoYW5kbGVyIG1pZ2h0IGJlIHVzZWFibGUgdG8gZHluYW1pY2FsbHkgZml4IGhhbmRsZXJzIHdpdGggYnJva2VuIGxvb3BpbmcgY29kZSwgaG93ZXZlci4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3NlcmlhbGl6ZV9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIHNlcmlhbGl6ZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxIG9mIGZpbGUgc2VyaWFsaXplLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3NlcmlhbGl6ZSAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBzZXJpYWxpemUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTMgb2YgZmlsZSBzZXJpYWxpemUuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfc2VyaWFsaXplIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBzZXJpYWxpemUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDAgb2YgZmlsZSBzZXJpYWxpemUuYy4KLS5TUyAiaW50IG5ldHNubXBfc2VyaWFsaXplX2hlbHBlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLUltcGxlbWVudHMgdGhlIHNlcmlhbCBoYW5kbGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4IG9mIGZpbGUgc2VyaWFsaXplLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAzNTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYKQEAgLTAsMCArMSwyMzYgQEAKKy5USCBORVRTTk1QX1NFU1NfQVBJIDMgIjE5IE1heSAyMDExIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3NubXBfc2Vzc19pbml0LAorc25tcF9zZXNzX29wZW4sCitzbm1wX3Nlc3Nfc2Vzc2lvbiwKK3NubXBfc2Vzc19zZW5kLAorc25tcF9zZXNzX2FzeW5jX3NlbmQsCitzbm1wX3Nlc3Nfc2VsZWN0X2luZm8sCitzbm1wX3Nlc3NfcmVhZCwKK3NubXBfc2Vzc190aW1lb3V0LAorc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlLAorc25tcF9zZXNzX2Nsb3NlLAorc25tcF9zZXNzX2Vycm9yIC0gc2Vzc2lvbiBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CisuUFAKKy5CSSAidm9pZCBzbm1wX3Nlc3NfaW5pdChzdHJ1Y3Qgc25tcF9zZXNzaW9uICoiIHNlc3Npb24gIik7IgorLlBQCisuQkkgInZvaWQgKnNubXBfc2Vzc19vcGVuKHN0cnVjdCBzbm1wX3Nlc3Npb24gKiIgc2Vzc2lvbiAiKTsiCisuUFAKKy5CSSAic3RydWN0IHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb24odm9pZCAqIiBoYW5kbGUgIik7IgorLlBQCisuQkkgImludCBzbm1wX3Nlc3Nfc2VuZCh2b2lkICoiIGhhbmRsZSAiLCBzdHJ1Y3Qgc25tcF9wZHUgKiIgcGR1ICIpOyIKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX2FzeW5jX3NlbmQodm9pZCAqIiBoYW5kbGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqIiBwZHUgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2NhbGxiYWNrICIgY2FsbGJhY2sgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoiIGNhbGxiYWNrRGF0YSAiKTsiCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICoiIGhhbmRsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIiBudW1mZHMgIiwgZmRfc2V0ICoiIGZkc2V0ICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICoiIHRpbWVvdXQgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICoiIGJsb2NrICIpOyIKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX3JlYWQodm9pZCAqIiBoYW5kbGUgIiwgZmRfc2V0ICoiIGZkc2V0ICIpOyIKKy5QUAorLkJJICJ2b2lkIHNubXBfc2Vzc190aW1lb3V0KHZvaWQgKiIgaGFuZGxlICIpOyIKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlICggdm9pZCAqIiAiaGFuZGxlLCIKKy5SUworLkJJICJuZXRzbm1wX3BkdSAqIiAicGR1IiAiLCAiCisuYnIKKy5CSSAibmV0c25tcF9wZHUgKioiICJyZXNwb25zZSIgKTsKKy5SRQorLlBQCisuQkkgImludCBzbm1wX3Nlc3NfY2xvc2Uodm9pZCAqIiBoYW5kbGUgIik7IgorLlBQCisuQkkgInZvaWQgc25tcF9zZXNzX2Vycm9yKHZvaWQgKiIgaGFuZGxlICIsIGludCAqIiBwY2xpYmVyciAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICBpbnQgKiIgcHNubXBlcnIgIiwgY2hhciAqKiIgcHBlcnJzdHJpbmcgIik7IgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgZGVmaW5lIGEgc3Vic2V0IG9mIHRoZSBBUEkgdGhhdCBjYW4gYmUgdXNlZAordG8gbWFuYWdlIHNpbmdsZSBTTk1QIHNlc3Npb25zIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24uCitFeGNlcHQgZm9yCisuQlIgc25tcF9zZXNzX3Nlc3Npb24oKSAsCit0aGVzZSBmdW5jdGlvbnMgYXJlIHNpbmdsZSBzZXNzaW9uIHZlcnNpb25zIG9mIHRoZSB0cmFkaXRpb25hbAorU05NUCBsaWJyYXJ5IEFQSS4KKy5QUAorTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB1c2UgYW4gb3BhcXVlIHBvaW50ZXIKKy5SSSAoIGhhbmRsZQoraW4gdGhlIGFib3ZlIHByb3RvdHlwZXMpIHRvIGlkZW50aWZ5IGEgc2luZ2xlIHNlc3Npb24gaW4gbGlldSBvZiBhCisuSSBzZXNzaW9uCitwb2ludGVyIChhcyBpbiB0aGUgdHJhZGl0aW9uYWwgQVBJKS4KKy5QUAorLkIgc25tcF9zZXNzX2luaXQoKQorcHJlcGFyZXMgYSBzdHJ1Y3Qgc25tcF9zZXNzaW9uIHRoYXQgc291cmNlcyB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzCithbmQgY29tbW9uIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhIHNldCBvZiBTTk1QIHRyYW5zYWN0aW9ucy4KK0FmdGVyIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0bworLkIgc25tcF9zZXNzX29wZW4oKQordG8gY3JlYXRlIGFuIFNOTVAgc2Vzc2lvbiwgdGhlIHN0cnVjdHVyZSBpcyBubyBsb25nZXIgdXNlZC4gIEluc3RlYWQKK3RoZSBvcGFxdWUgcG9pbnRlciByZXR1cm5lZCBieQorLkIgc25tcF9zZXNzX29wZW4oKQoraXMgdXNlZCB0byByZWZlciB0byB0aGF0IHNlc3Npb24gaGVuY2Vmb3J0aC4KKy5QUAorU05NUCBzZXNzaW9ucyB0aGF0IGFyZSBjcmVhdGVkIHdpdGgKKy5CIHNubXBfc2Vzc19vcGVuKCkKK2FyZSBub3QgYWZmZWN0ZWQgYnksIGFuZCBTSE9VTEQgTk9UIEJFIFVTRUQgV0lUSCwKKy5CUiBzbm1wX3NlbGVjdF9pbmZvKCkgIiwgIiBzbm1wX3JlYWQoKSAiLCAiIHNubXBfdGltZW91dCgpICIgbm9yIgorLkJSIHNubXBfY2xvc2UoKSAuCitSYXRoZXIgdGhlIGVxdWl2YWxlbnQgc2luZ2xlIHNlc3Npb24gZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIHNob3VsZAorYmUgdXNlZC4KKy5QUAorLkIgc25tcF9zZXNzX2luaXQoKQorYW5kCisuQiBzbm1wX3Nlc3Nfb3BlbigpCitlYWNoIHRha2UgYXMgaW5wdXQgYSBwb2ludGVyIHRvIGEgc3RydWN0IHNubXBfc2Vzc2lvbiBvYmplY3QuCitUaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgYSBzZXQgb2YgdHJhbnNhY3Rpb25zIHRoYXQKK3dpbGwgc2hhcmUgc2ltaWxhciB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzLgorLkIgc25tcF9zZXNzX3Nlc3Npb24oKQordGFrZXMgdGhlIG9wYXF1ZSBzZXNzaW9uIGhhbmRsZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8KK2l0cyBhc3NvY2lhdGVkIHN0cnVjdCBzbm1wX3Nlc3Npb24uCisuUFAKKy5CIHNubXBfc2Vzc19zZW5kKCkKK2FuZAorLkIgc25tcF9zZXNzX2FzeW5jX3NlbmQoKQorZWFjaCB0YWtlIGEKKy5JIHBkdQorcGFyYW1ldGVyLCB3aGljaCBwb2ludHMgdG8gYSBzdHJ1Y3Qgc25tcF9wZHUgb2JqZWN0IGNvbnRhaW5pbmcKK2luZm9ybWF0aW9uIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvdmVyCithbiBvcGVuIHNlc3Npb24uCisuUFAKK0NvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIHN0cnVjdHVyZXMuCisuUFAKK1dpdGggdGhlCisuSSBzbm1wX3Nlc3NfYXN5bmNfc2VuZCgpCitjYWxsLAorLkkgc25tcF9zZXNzX3JlYWQKK3dpbGwgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisuUFAKKy5CUiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKSAiLCAiIHNubXBfc2Vzc19yZWFkKCkgIiBhbmQgIiBzbm1wX3Nlc3NfdGltZW91dCgpCitwcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlIHVzZSBvZiB0aGUKKy5CUiBzZWxlY3QgKDIpCitzeXN0ZW0gY2FsbCBzbyB0aGF0IFNOTVAgdHJhbnNhY3Rpb25zIGZvciBhIHNpbmdsZSBzZXNzaW9uIGNhbiBvY2N1cgorYXN5bmNocm9ub3VzbHkuCisuUFAKKy5CIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpCitpcyBwYXNzZWQgdGhlIGluZm9ybWF0aW9uIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBhc3NlZCB0bworLkJSIHNlbGVjdCAoMikKK2luIHRoZSBhYnNlbmNlIG9mIFNOTVAuICBGb3IgZXhhbXBsZSwgdGhpcyBtaWdodCBpbmNsdWRlIGZpbGUKK2Rlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBsb29wIG9mIGEgZ3JhcGhpY2FsCithcHBsaWNhdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBpcyBtb2RpZmllZCBzbyB0aGF0IFNOTVAgd2lsbCBnZXQgdGhlCitzZXJ2aWNlIGl0IHJlcXVpcmVzIGZyb20gdGhlIGNhbGwgdG8KKy5CUiBzZWxlY3QgKDIpLgorSW4gdGhpcyBjYXNlLAorLklSIG51bWZkcyAiLCAiIGZkc2V0ICIgYW5kICIgdGltZW91dAorY29ycmVzcG9uZCB0byB0aGUKKy5JUiBuZmRzICIsICIgcmVhZGZkcyAiIGFuZCAiIHRpbWVvdXQKK2FyZ3VtZW50cyB0bworLkJSIHNlbGVjdCAoMikKK3Jlc3BlY3RpdmVseS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRpbWVvdXQgbXVzdCBBTFdBWVMgcG9pbnQgdG8KK2FuIGFsbG9jYXRlZCAoYnV0IHBlcmhhcHMgdW5pbml0aWFsaXplZCkKKy5JIHN0cnVjdCB0aW1ldmFsCisoaXQgY2Fubm90IGJlIE5VTEwgYXMgZm9yCisuQlIgc2VsZWN0ICgyKSkuCitJZgorLkkgdGltZW91dAord291bGQgaGF2ZSBiZWVuIHBhc3NlZCBhcyBOVUxMLAorLkkgYmxvY2sKK2lzIGluc3RlYWQgc2V0IHRvIHRydWUsIGFuZAorLkkgdGltZW91dAoraXMgdHJlYXRlZCBhcyB1bmRlZmluZWQuICBUaGlzIHNhbWUgcnVsZSBhcHBsaWVzIHVwb24gcmV0dXJuIGZyb20KKy5CUiBzbm1wX3NlbGVjdF9pbmZvKCkgLgorLlBQCitBZnRlciBjYWxsaW5nCisuQiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKSAsCisuQlIgc2VsZWN0ICgyKQorc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSByZXR1cm5lZCBkYXRhLiAgV2hlbiBpdCByZXR1cm5zLAorLkIgc25tcF9zZXNzX3JlYWQoKQorc2hvdWxkIHRoZW4gYmUgY2FsbGVkIHdpdGggdGhlCisuSSBmZF9zZXQKK3JldHVybmVkIGZyb20KKy5CUiBzZWxlY3QgKDIpLgorVGhpcyB3aWxsIHJlYWQgYW55IGlucHV0IGZyb20gdGhpcyBzZXNzaW9uJ3MgU05NUCBzb2NrZXQuICBJZgorLkJSIHNlbGVjdCAoMikKK3RpbWVzIG91dCAodGhhdCBpcywgaXQgcmV0dXJucyB6ZXJvKSwKKy5CIHNubXBfc2Vzc190aW1lb3V0KCkKK3Nob3VsZCBiZSBjYWxsZWQgdG8gc2VlIGlmIGEgdGltZW91dCBoYXMgb2NjdXJyZWQgb24gdGhlIFNOTVAKK3Nlc3Npb24uCisuUFAKKy5JIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZQoraXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRoYXQgd2lsbCBzZW5kIHRoZSByZXF1ZXN0LAord2FpdCBmb3IgdGhlIHJlc3BvbnNlIGFuZCBwcm9jZXNzIGl0IGJlZm9yZSByZXR1cm5pbmcuCitTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZgorLkkgInNubXBfc2Vzc19zZW5kIiAiLCAiICJzbm1wX3Nlc3NfcmVhZCIKK2V0YyBmb3IgZGV0YWlscy4KKy5TSCBESUFHTk9TVElDUworLlBQCitFcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCisuQiBzbm1wX3Nlc3Nfb3BlbigpCitpcyBpbmRpY2F0ZWQgYnkgcmV0dXJuIG9mIGEgTlVMTCBwb2ludGVyLgorRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAorLkIgc25tcF9zZXNzX2Nsb3NlKCkKK2FuZAorLkIgc25tcF9zZXNzX3NlbmQoKQoraXMgaW5kaWNhdGVkIGJ5IGEgcmV0dXJuIHZhbHVlIG9mIDAuICBBIHN1Y2Nlc3NmdWwgc3RhdHVzIHdpbGwgcmV0dXJuCisxLgorLlBQCitGdXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSB1c2luZworLkIgc25tcF9zZXNzX2Vycm9yKCkKK3RvIHNlZSB3aGF0IHR5cGUgb2YgZXJyb3IgaGFzIG9jY3VycmVkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQorU05NUAorLkkgc25tcF9lcnJubwordmFyaWFibGUsIHRoZSB2YWx1ZSBvZiB0aGUgc3lzdGVtCisuSSBlcnJubwordmFyaWFibGUsIGFuZCBhIHN0cmluZyBpbnRlcnByZXRhdGlvbiBvZiBib3RoIHZhcmlhYmxlcy4gIFRoZSBzdHJpbmcKK211c3QgYmUgZnJlZWQgYWZ0ZXIgdXNlIGJ5IHRoZSBjYWxsZXIuCisuUFAKK0ZvciBlcnJvcnMgcmV0dXJuZWQgYnkKKy5CUiBzbm1wX3Nlc3Nfb3BlbigpICwKK3VzZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbgorLkIgc25tcF9lcnJvcigpCitpbnN0ZWFkIG9mCisuQlIgc25tcF9zZXNzX2Vycm9yKCkgLgorLlBQCitDb25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBjb21wbGV0ZSBzZXQgb2YgU05NUCBsaWJyYXJ5CitlcnJvciB2YWx1ZXMuCitUaGUgU05NUCBsaWJyYXJ5IGVycm9yIHZhbHVlCisuSVIgc25tcGVycgorY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5SUyAybgorLklQIFNOTVBFUlJfR0VORVJSIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK0EgZ2VuZXJpYyBlcnJvciBvY2N1cnJlZC4KKy5JUCBTTk1QRVJSX0JBRF9MT0NQT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBsb2NhbCBwb3J0IHdhcyBiYWQgYmVjYXVzZSBpdCBoYWQgYWxyZWFkeSBiZWVuCithbGxvY2F0ZWQgb3IgcGVybWlzc2lvbiB3YXMgZGVuaWVkLgorLklQIFNOTVBFUlJfQkFEX0FERFJFU1MgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIGhvc3QgbmFtZSBvciBhZGRyZXNzIGdpdmVuIHdhcyBub3QgdXNlYWJsZS4KKy5JUCBTTk1QRVJSX0JBRF9TRVNTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBzcGVjaWZpZWQgc2Vzc2lvbiB3YXMgbm90IG9wZW4uCisuSVAgU05NUEVSUl9UT09fTE9ORyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9OT19TT0NLRVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVjJfSU5fVjEgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVjFfSU5fVjIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1JFUEVBVEVSUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUkVQRVRJVElPTlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX0FTTjFfQlVJTEQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1NFTkRUTyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUkNWRlJPTSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUEFSU0UgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1ZFUlNJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX0NPTU1VTklUWSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9OT0FVVEhfREVTUFJJViBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9BQk9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9VTktOT1dOX1BEVSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9USU1FT1VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5SRQorLlBQCisuU0ggIlNFRSBBTFNPIgorc2VsZWN0KDIpLCBuZXRzbm1wX3Nlc3Npb25fYXBpKDMpLCBuZXRzbm1wX3BkdV9hcGkoMyksCituZXRzbm1wX3ZhcmJpbmRfYXBpKDMpLCBuZXRzbm1wX21pYl9hcGkoMyksIHNubXBfYXBpLmgKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4OTFhMQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmCkBAIC0wLDAgKzEsMjgyIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgorLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIAlDb3B5cmlnaHQgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorLlwiIAorLlwiICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCisuXCIgCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIAorLlwiIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgCisuXCIgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorLlwiIGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiAKKy5cIiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIENNVSBub3QgYmUKKy5cIiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICAKKy5cIiAKKy5cIiBDTVUgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORworLlwiIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTAorLlwiIENNVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IKKy5cIiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCisuXCIgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorLlwiIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKy5cIiBTT0ZUV0FSRS4KKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisuVEggTkVUU05NUF9TRVNTSU9OX0FQSSAzICIxOSBNYXkgMjAxMSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCitzbm1wX3Nlc3NfaW5pdCwKK3NubXBfb3BlbiwKK3NubXBfc2VuZCwKK3NubXBfYXN5bmNfc2VuZCwKK3NubXBfc2VsZWN0X2luZm8sCitzbm1wX3JlYWQsCitzbm1wX3RpbWVvdXQsCitzbm1wX3N5bmNoX3Jlc3BvbnNlLAorc25tcF9jbG9zZSwKK3NubXBfcGVycm9yLAorc25tcF9zZXNzX3BlcnJvciwKK3NubXBfZXJyb3IsCitzbm1wX2FwaV9lcnJzdHJpbmcgXC0gbmV0c25tcF9zZXNzaW9uX2FwaSBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CisuUFAKKy5CSSAidm9pZCBzbm1wX3Nlc3NfaW5pdCAoIG5ldHNubXBfc2Vzc2lvbioiICJzZXNzIiApOworLlBQCisuQkkgIm5ldHNubXBfc2Vzc2lvbiogc25tcF9vcGVuICggbmV0c25tcF9zZXNzaW9uICoiICJzZXNzIik7CisuUlMKKy5JIC8qIElucHV0IHBhcmFtZXRlciBub3QgdXNlZCBpbiBhY3RpdmUgc2Vzc2lvbnMgKi8KKy5SRQorLlBQCisuQkkgImludCBzbm1wX3NlbmQgKCBuZXRzbm1wX3Nlc3Npb24gKiIgInNlc3Npb24sIgorLlJTCisuQkkgIm5ldHNubXBfcGR1ICoiICJwZHUiICk7CisuUkUKKy5QUAorLkJJICJpbnQgc25tcF9hc3luY19zZW5kICggbmV0c25tcF9zZXNzaW9uICoiICJzZXNzaW9uLCIKKy5SUworLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiIgcGR1ICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9jYWxsYmFjayAiIGNhbGxiYWNrICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIiBjYWxsYmFja0RhdGEgIik7IgorLlJFCisuUFAKKy5CSSAiaW50IHNubXBfc2VsZWN0X2luZm8gKCBpbnQgKiAiIG51bWZkcywgImZkX3NldCAqIiBmZHNldCwKKy5SUworLkJJICJzdHJ1Y3QgdGltZXZhbCAqIiB0aW1lb3V0LCAiaW50ICoiIGJsb2NrICk7CisuUkUKKy5QUAorLkJJICJ2b2lkIHNubXBfcmVhZCAoIGZkX3NldCAqIiBmZHNldCApOworLlBQCisuQiAgdm9pZCBzbm1wX3RpbWVvdXQgKCB2b2lkICk7CisuUFAKKy5CSSAiaW50IHNubXBfc3luY2hfcmVzcG9uc2UgKCBuZXRzbm1wX3Nlc3Npb24gKiIgInNlc3Npb24sIgorLlJTCisuQkkgIm5ldHNubXBfcGR1ICoiICJwZHUiICIsICIKKy5icgorLkJJICJuZXRzbm1wX3BkdSAqKiIgInJlc3BvbnNlIiApOworLlJFCisuUFAKKy5CSSAiaW50IHNubXBfY2xvc2UgKCBuZXRzbm1wX3Nlc3Npb24gKiIgc2Vzc2lvbiApOworLmJyCisuQiAgImludCBzbm1wX2Nsb3NlX3Nlc3Npb25zICggdm9pZCApOworLlBQCisuU1MgRXJyb3IgUmVwb3J0aW5nCisuSSAoTW92ZSB0byBvdXRwdXRfYXBpKDMpKQorLmJyCisuQkkgInZvaWQgc25tcF9lcnJvciAoIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKKy5SUworLkJJICJpbnQgKiIgcGNsaWJlcnIsICJpbnQgKiIgcHNubXBlcnIsICJjaGFyICoqIiBwcGVycnN0cmluZyApOworLlJFCisuUFAKKy5CSSAiY2hhciAqc25tcF9hcGlfZXJyc3RyaW5nICggaW50IiBzbm1wZXJyICk7CisuUFAKKy5CSSAidm9pZCBzbm1wX3BlcnJvciAoIGNoYXIgKiIgbXNnICk7CisuUlMKKy5JIC8qIGZvciBwYXJzaW5nIGVycm9ycyBvbmx5ICovCisuUkUKKy5QUAorLkJJICJ2b2lkIHNubXBfc2Vzc19wZXJyb3IgKGNoYXIgKiIgbXNnLCAibmV0c25tcF9zZXNzaW9uICoiIHNlc3MgKTsKKy5SUworLkkgLyogYWxsIG90aGVyIFNOTVAgbGlicmFyeSBlcnJvcnMgKi8KKy5SRQorLlBQCisuU0ggREVTQ1JJUFRJT04KKy5JIFNubXBfc2Vzc19pbml0CitwcmVwYXJlcyBhIG5ldHNubXBfc2Vzc2lvbiB0aGF0IHNvdXJjZXMgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcworYW5kIGNvbW1vbiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSBzZXQgb2YgU05NUCB0cmFuc2FjdGlvbnMuCitBZnRlciB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8KKy5JIHNubXBfb3BlbgordG8gY3JlYXRlIGFuIFNOTVAgc2Vzc2lvbiwgdGhlIHN0cnVjdHVyZSBpcyBub3QgdXNlZC4KKy5QUAorLkkgU25tcF9vcGVuCityZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5LWZvcm1lZAorLkkgbmV0c25tcF9zZXNzaW9uCitvYmplY3QsIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHVzZSB0byByZWZlcmVuY2UgdGhlCithY3RpdmUgU05NUCBzZXNzaW9uLgorLlBQCisuSSBzbm1wX3NlbmQKK2FuZAorLkkgc25tcF9hc3luY19zZW5kKCkKK2VhY2ggdGFrZSBhcyBpbnB1dCBhIHBvaW50ZXIgdG8gYQorLkkgbmV0c25tcF9wZHUKK29iamVjdC4KK1RoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNhY3Rpb24KK3RoYXQgd2lsbCBiZSBwZXJmb3JtZWQgb3ZlciBhbiBvcGVuIHNlc3Npb24uCisuUFAKK0NvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIHN0cnVjdHVyZXMuCisuUFAKK1dpdGggdGhlCisuSSBzbm1wX2FzeW5jX3NlbmQoKQorY2FsbCwKKy5JIHNubXBfcmVhZAord2lsbCBpbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayB3aGVuIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZC4KKy5QUAorLkkgU25tcF9yZWFkLCBzbm1wX3NlbGVjdF9pbmZvLAorYW5kCisuSSBzbm1wX3RpbWVvdXQKK3Byb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciB0aGUgdXNlIG9mIHRoZQorLklSIHNlbGVjdCgyKQorc3lzdGVtIGNhbGwgc28gdGhhdCBTTk1QIHRyYW5zYWN0aW9ucyBjYW4gb2NjdXIgYXN5bmNocm9ub3VzbHkuCisuUFAKKy5JIFNubXBfc2VsZWN0X2luZm8KK2lzIGdpdmVuIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgdG8KKy5JIHNlbGVjdAoraW4gdGhlIGFic2VuY2Ugb2YgU05NUC4gIEZvciBleGFtcGxlLCB0aGlzIG1pZ2h0IGluY2x1ZGUgd2luZG93IHVwZGF0ZSBpbmZvcm1hdGlvbi4KK1RoaXMgaW5mb3JtYXRpb24gaXMgbW9kaWZpZWQgc28gdGhhdCBTTk1QIHdpbGwgZ2V0IHRoZSBzZXJ2aWNlIGl0IHJlcXVpcmVzIGZyb20gdGhlCitjYWxsIHRvCisuSSBzZWxlY3QuCitJbiB0aGlzIGNhc2UsCisuSSBudW1mZHMsIGZkc2V0LAorYW5kCisuSSB0aW1lb3V0Citjb3JyZXNwb25kIHRvIHRoZQorLkkgbmZkcywgcmVhZGZkcywKK2FuZAorLkkgdGltZW91dAorYXJndW1lbnRzIHRvCisuSSBzZWxlY3QsCityZXNwZWN0aXZlbHkuICBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aW1lb3V0IG11c3QgYWx3YXlzIHBvaW50IHRvIGFuIGFsbG9jYXRlZCAoYnV0IHBlcmhhcHMgdW5pbml0aWFsaXplZCkKKy5JIHN0cnVjdCB0aW1ldmFsLgorSWYKKy5JIHRpbWVvdXQKK3dvdWxkIGhhdmUgYmVlbiBwYXNzZWQgYXMgTlVMTCwKKy5JIGJsb2NrCitpcyBzZXQgdG8gdHJ1ZSwgYW5kCisuSSB0aW1lb3V0CitpcyB0cmVhdGVkIGFzIHVuZGVmaW5lZC4gIFRoaXMgc2FtZSBydWxlIGFwcGxpZXMgdXBvbiByZXR1cm4gZnJvbQorLkkgc25tcF9zZWxlY3RfaW5mby4KKy5QUAorQWZ0ZXIgY2FsbGluZworLkkgc25tcF9zZWxlY3RfaW5mbywgc2VsZWN0CitpcyBjYWxsZWQgd2l0aCB0aGUgcmV0dXJuZWQgZGF0YS4gIFdoZW4gc2VsZWN0IHJldHVybnMsCisuSSBzbm1wX3JlYWQKK3Nob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUKKy5JIGZkX3NldAorcmV0dXJuZWQgZnJvbQorLkkgc2VsZWN0Cit0byByZWFkIGVhY2ggU05NUCBzb2NrZXQgdGhhdCBoYXMgaW5wdXQuCitJZgorLkkgc2VsZWN0Cit0aW1lcyBvdXQsCisuSSBzbm1wX3RpbWVvdXQKK3Nob3VsZCBiZSBjYWxsZWQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IHdhcyBpbnRlbmRlZCBmb3IgU05NUC4KKy5QUAorLkkgc25tcF9zeW5jaF9yZXNwb25zZQoraXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRoYXQgd2lsbCBzZW5kIHRoZSByZXF1ZXN0LAord2FpdCBmb3IgdGhlIHJlc3BvbnNlIGFuZCBwcm9jZXNzIGl0IGJlZm9yZSByZXR1cm5pbmcuCitTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZgorLkkgInNubXBfc2VuZCIgIiwgIiAic25tcF9yZWFkIgorZXRjIGZvciBkZXRhaWxzLgorLlNIIERJQUdOT1NUSUNTCisuUFAKK1ByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IHVzZWQKKy5JUiBzbm1wX2dldF9lcnJubwordG8gcmVhZCB0aGUgZ2xvYmFsIHZhcmlhYmxlCisuSSBzbm1wX2Vycm5vCit3aGljaCBtYXkgaGF2ZSBoZWxkIHRoZSBlcnJvciBzdGF0dXMgd2l0aGluIHRoZSBTTk1QIGxpYnJhcnkuCitUaGUgZXhpc3RpbmcgbWV0aG9kCisuSSBzbm1wX3BlcnJvcgorc2hvdWxkIGJlIHVzZWQgdG8gbG9nIEFTTi4xIGNvZGluZyBlcnJvcnMgb25seS4KKy5QUAorVGhlIG5ldyBtZXRob2QKKy5JIHNubXBfc2Vzc19wZXJyb3IKK2lzIHByb3ZpZGVkIHRvIGNhcHR1cmUgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nCitvZiBhIHBhcnRpY3VsYXIgU05NUCBzZXNzaW9uLgorLkkgU25tcF9zZXNzX3BlcnJvcgorY2FsbHMKKy5JUiBzbm1wX2Vycm9yCitmdW5jdGlvbiB0byBvYnRhaW4gdGhlICJDIiBsaWJyYXJ5IGVycm9yCisuSSBlcnJubworLCB0aGUgU05NUCBsaWJyYXJ5IGVycm9yCisuSSBzbm1wZXJyCissIGFuZCB0aGUgU05NUCBsaWJyYXJ5IGRldGFpbGVkIGVycm9yIG1lc3NhZ2UKK3RoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIGEgZ2l2ZW4gc2Vzc2lvbi4KKy5QUAorTm90ZSB0aGF0IGluIGFsbCBjYXNlcyBleGNlcHQgb25lLAorLklSIHNubXBfc2Vzc19wZXJyb3IKK3Nob3VsZCBiZSBoYW5kZWQgdGhlCisuSSBuZXRzbm1wX3Nlc3Npb24gKgorcG9pbnRlciByZXR1cm5lZCBmcm9tCisuSVIgc25tcF9vcGVuLgorSWYKKy5JUiBzbm1wX29wZW4KK3JldHVybnMgYSBudWxsIHBvaW50ZXIsIHBhc3MgdGhlIElOUFVUCisuSSBuZXRzbm1wX3Nlc3Npb24gKgorcG9pbnRlciB1c2VkIHRvIGNhbGwKKy5JUiBzbm1wX29wZW4uCisuUFAKK0Vycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKKy5JIHNubXBfY2xvc2UKK2FuZAorLkkgc25tcF9zZW5kCitpcyBpbmRpY2F0ZWQgYnkgcmV0dXJuIG9mIDAuICBBIHN1Y2Nlc3NmdWwgc3RhdHVzIHdpbGwgcmV0dXJuIGEgMSBmb3IKKy5JIHNubXBfY2xvc2UKK2FuZCB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgcGFja2V0IGZvcgorLkkgc25tcF9zZW5kLgorVXBvbiBzdWNjZXNzZnVsIHJldHVybiBmcm9tCisuSSBzbm1wX3NlbmQKK3RoZSBwZHUgd2lsbCBiZSBmcmVlZCBieSB0aGUgbGlicmFyeS4KKy5QUAorQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgY29tcGxldGUgc2V0IG9mIFNOTVAgbGlicmFyeQorZXJyb3IgdmFsdWVzLgorVGhlIFNOTVAgbGlicmFyeSBlcnJvciB2YWx1ZQorLklSIHNubXBlcnIKK2NhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuUlMgMm4KKy5JUCBTTk1QRVJSX0dFTkVSUiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitBIGdlbmVyaWMgZXJyb3Igb2NjdXJyZWQuCisuSVAgU05NUEVSUl9CQURfTE9DUE9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgbG9jYWwgcG9ydCB3YXMgYmFkIGJlY2F1c2UgaXQgaGFkIGFscmVhZHkgYmVlbgorYWxsb2NhdGVkIG9yIHBlcm1pc3Npb24gd2FzIGRlbmllZC4KKy5JUCBTTk1QRVJSX0JBRF9BRERSRVNTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBnaXZlbiB3YXMgbm90IHVzZWFibGUuCisuSVAgU05NUEVSUl9CQURfU0VTU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgc3BlY2lmaWVkIHNlc3Npb24gd2FzIG5vdCBvcGVuLgorLklQIFNOTVBFUlJfVE9PX0xPTkcgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfTk9fU09DS0VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1YyX0lOX1YxIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1YxX0lOX1YyIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9SRVBFQVRFUlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9BU04xX0JVSUxEIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9TRU5EVE8gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1BBUlNFIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9WRVJTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX05PQVVUSF9ERVNQUklWIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0FCT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1VOS05PV05fUERVIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1RJTUVPVVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLlJFCisuUFAKK0Egc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBjb2RlIGNhbiBiZSBvYnRhaW5lZCB3aXRoCisuSVIgc25tcF9hcGlfZXJyc3RyaW5nICwKK2FuZCBhIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgbWF5IGJlIHByaW50ZWQgdXNpbmcKKy5JIHNubXBfcGVycm9yCit0aGF0IGZ1bmN0aW9ucyBsaWtlIHRoZQorLkkgcGVycm9yCitzdGFuZGFyZCByb3V0aW5lLgorLlNIICJTRUUgQUxTTyIKK3NlbGVjdCgyKSwgbmV0c25tcF9zZXNzX2FwaSgzKSwgbmV0c25tcF9taWJfYXBpKDMpLCBuZXRzbm1wX3BkdV9hcGkoMyksCituZXRzbm1wX3ZhcmJpbmRfYXBpKDMpLCBzbm1wX2FwaS5oCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zZXRfZGF0YS4zIGIvbWFuL25ldHNubXBfc2V0X2RhdGEuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFiNDJhNC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zZXRfZGF0YS4zCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLlRIICJzZXRfZGF0YTogaGVscHMgc3RvcmluZyBhbmQgcmV0cml2aW5nIG9mIGRhdGEgZHVyaW5nIHNldCB0cmFuc2FjdGlvbnMiIDMgIjE3IE9jdCAyMDAzIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zZXRfZGF0YTogaGVscHMgc3RvcmluZyBhbmQgcmV0cml2aW5nIG9mIGRhdGEgZHVyaW5nIHNldCB0cmFuc2FjdGlvbnMgXC0gVGhlIHNldF9kYXRhIGhlbHBlci4gCi1Nb3JlLi4uCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9zZXRfZGF0YV9tYXN0ZXJfc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9zZXRfZGF0YV9zdG9yZV9zXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc2V0X2RhdGFfY2FjaGVcZlAgKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LCB1bnNpZ25lZCBpbnQgbWFnaWNfbnVtLCB2b2lkICpuZXdfZGF0YSwgc2l6ZV90IG5ld19kYXRhX2xlbiwgdm9pZCAqb2xkX2RhdGEsIHNpemVfdCBvbGRfZGF0YV9sZW4pIgotLmJyCi0uUkkgIlxmSXN0b3JlcyBuZXcgYW5kIG9sZCBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgbWFnaWMgbnVtYmVyLlxmUCIKLS50aSAtMWMKLS5SSSAibmV0c25tcF9zZXRfZGF0YV8gbmV0c25tcF9taWJfaGFuZGxlciAqIFxmQm5ldHNubXBfZ2V0X211bHRpcGxleGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCAqcmVxKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbXVsdGlwbGl4ZXIgaGFuZGxlciBnaXZlbiBhIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCBzdHJ1Y3R1cmUgb2Ygc3ViaGFuZGxlcnMuXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9tdWx0aXBsZXhlcl9oZWxwZXJfaGFuZGxlclxmUCAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJaW1wbGVtZW50cyB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyXGZQIgotLmluIC0xYwotLlNIICJERVRBSUxFRCBERVNDUklQVElPTiIKLS5QUCAKLVRoZSBzZXRfZGF0YSBoZWxwZXIuCi0uUFAKLS5TSCAiRlVOQ1RJT04gRE9DVU1FTlRBVElPTiIKLS5QUCAKLS5TUyAibmV0c25tcF9zZXRfZGF0YV8gbmV0c25tcF9taWJfaGFuZGxlciogbmV0c25tcF9nZXRfbXVsdGlwbGV4ZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQICogcmVxKSIKLS5QUAotcmV0dXJucyBhIG11bHRpcGxpeGVyIGhhbmRsZXIgZ2l2ZW4gYSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgc3RydWN0dXJlIG9mIHN1YmhhbmRsZXJzLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQgb2YgZmlsZSBzZXRfZGF0YS5jLgotLlBQCi1SZWZlcmVuY2VzIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKSwgYW5kIG5ldHNubXBfbXVsdGlwbGV4ZXJfaGVscGVyX2hhbmRsZXIoKS4KLS5TUyAiaW50IG5ldHNubXBfbXVsdGlwbGV4ZXJfaGVscGVyX2hhbmRsZXIgKG5ldHNubXBfbWliX2hhbmRsZXIgKiBoYW5kbGVyLCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICogcmVnaW5mbywgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKiByZXFpbmZvLCBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqIHJlcXVlc3RzKSIKLS5QUAotaW1wbGVtZW50cyB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDUgb2YgZmlsZSBzZXRfZGF0YS5jLgotLlBQCi1SZWZlcmVuY2VzIG5ldHNubXBfY2FsbF9oYW5kbGVyKCksIGFuZCBuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dCgpLgotLlBQCi1SZWZlcmVuY2VkIGJ5IG5ldHNubXBfZ2V0X211bHRpcGxleGVyX2hhbmRsZXIoKS4KLS5TUyAidm9pZCBuZXRzbm1wX3NldF9kYXRhX2NhY2hlIChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqIHJlcXVlc3QsIHVuc2lnbmVkIGludCBtYWdpY19udW0sIHZvaWQgKiBuZXdfZGF0YSwgc2l6ZV90IG5ld19kYXRhX2xlbiwgdm9pZCAqIG9sZF9kYXRhLCBzaXplX3Qgb2xkX2RhdGFfbGVuKSIKLS5QUAotc3RvcmVzIG5ldyBhbmQgb2xkIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBtYWdpYyBudW1iZXIuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NSBvZiBmaWxlIHNldF9kYXRhLmMuCi0uUFAKLVJlZmVyZW5jZXMgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KCksIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCksIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKCksIGFuZCBTTk1QX01JTi4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfYWdlbnQuMyBiL21hbi9uZXRzbm1wX3NubXBfYWdlbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyMWRhZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX2FnZW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzEgKzAsMCBAQAotLlRIICJuZXQtc25tcCBhZ2VudCByZWxhdGVkIHByb2Nlc3NpbmciIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXQtc25tcCBhZ2VudCByZWxhdGVkIHByb2Nlc3NpbmcgXC0gCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCYWRkckNhY2hlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJfYWdlbnRfbnNhcFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCYWdlbnRfc2V0X2NhY2hlX3NcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTkVFRF9SRVFVRVNUX0xJU1RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0FERFJDQUNIRV9TSVpFXGZQICAgMTAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0FERFJDQUNIRV9NQVhBR0VcZlAgICAzMDAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCX2FnZW50X25zYXBcZlAgXGZCYWdlbnRfbnNhcFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJhZ2VudF9zZXRfY2FjaGVfc1xmUCBcZkJhZ2VudF9zZXRfY2FjaGVcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRW51bWVyYXRpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImVudW0geyBcZkJTTk1QX0FERFJDQUNIRV9VTlVTRURcZlAgPSAgMCwgXGZCU05NUF9BRERSQ0FDSEVfVVNFRFxmUCA9ICAxIH0iCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FnZW50X2NoZWNrX3BhY2tldFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX3RyYW5zcG9ydF9zXGZQICosIHZvaWQgKiwgaW50KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZ2VudF9jaGVja19wYXJzZVxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkZWxldGVfc3VibmV0c25tcF90cmVlX2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9wZHVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGNhbGxzIGludG8gbmV0c25tcF9zZXRfbW9kZV9yZXF1ZXN0X2Vycm9yLCBzZXRzIGVycm9yX3ZhbHVlIGdpdmVuIGEgcmVxaW5mby0+bW9kZSB2YWx1ZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9oYW5kbGVfcmVxdWVzdFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIGludCBzdGF0dXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3dyYXBfdXBfcmVxdWVzdFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIGludCBzdGF0dXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjaGVja19kZWxheWVkX3JlcXVlc3RcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX2dldG5leHRfbG9vcFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0uUkkgIlxmSXJlcGVhdGVkbHkgY2FsbHMgZ2V0bmV4dCBoYW5kbGVycyBsb29raW5nIGZvciBhbiBhbnN3ZXIgdGlsbCBhbGwgcmVxdWVzdHMgYXJlIHNhdGlzaWZpZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9zZXRfbG9vcFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX3F1ZXVlZF9jaGFpbl9mb3JcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZGRfcXVldWVkXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVtb3ZlX2Zyb21fZGVsZWdhdGVkXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWxsb2NhdGVfZ2xvYmFsY2FjaGVpZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2V0X2xvY2FsX2NhY2hpZFxmUCAoXGZCbmV0c25tcF9jYWNoZW1hcFxmUCAqY2FjaGVfc3RvcmUsIGludCBnbG9iYWxpZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZW1hcFxmUCAqIFxmQm5ldHNubXBfZ2V0X29yX2FkZF9sb2NhbF9jYWNoaWRcZlAgKFxmQm5ldHNubXBfY2FjaGVtYXBcZlAgKipjYWNoZV9zdG9yZSwgaW50IGdsb2JhbGlkLCBpbnQgbG9jYWxpZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2ZyZWVfY2FjaGVtYXBcZlAgKFxmQm5ldHNubXBfY2FjaGVtYXBcZlAgKmNhY2hlX3N0b3JlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJhZ2VudF9zZXRfY2FjaGVcZlAgKiBcZkJzYXZlX3NldF9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnZXRfc2V0X2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCX3Jlb3JkZXJfZ2V0YnVsa1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQl9maXhfZW5kb2ZtaWJ2aWV3XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdldE5leHRTZXNzSURcZlAgKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFnZW50X2NoZWNrX2FuZF9wcm9jZXNzXGZQIChpbnQgYmxvY2spIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwYWNrZXRzIGFycml2aW5nIG9uIHRoZSBTTk1QIHBvcnQgYW5kIHByb2Nlc3NlcyB0aGVtKHNubXBfcmVhZCkgaWYgc29tZSBhcmUgZm91bmQsIHVzaW5nIHRoZSBzZWxlY3QoKS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfYWRkcmNhY2hlX2luaXRpYWxpc2VcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9hZGRyY2FjaGVfZGVzdHJveVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWRkcmNhY2hlX2FkZFxmUCAoY29uc3QgY2hhciAqYWRkcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2FkZHJjYWNoZV9hZ2VcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2FnZW50X25zYXBcZlAgKFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZGVyZWdpc3Rlcl9hZ2VudF9uc2FwXGZQIChpbnQgaGFuZGxlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5pdF9tYXN0ZXJfYWdlbnRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfbnNhcF9saXN0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNodXRkb3duX21hc3Rlcl9hZ2VudFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogXGZCaW5pdF9hZ2VudF9zbm1wX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcmVlX2FnZW50X3NubXBfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2Zvcl9kZWxlZ2F0ZWRcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19kZWxlZ2F0ZWRfY2hhaW5fZm9yXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfZm9yX2RlbGVnYXRlZF9hbmRfYWRkXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVtb3ZlX2RlbGVnYXRlZF9yZXF1ZXN0c19mb3Jfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmR1bXBfc2Vzc19saXN0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcmVtb3ZlX2FuZF9mcmVlX2FnZW50X3NubXBfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9mcmVlX2FnZW50X3NubXBfc2Vzc2lvbl9ieV9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3MsIHZvaWQoKmZyZWVfcmVxdWVzdCkoXGZCbmV0c25tcF9yZXF1ZXN0X2xpc3RcZlAgKikpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfc25tcF9wYWNrZXRcZlAgKGludCBvcCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBpbnQgcmVxaWQsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHZvaWQgKm1hZ2ljKSIKLS5icgotLlJJICJcZkloYW5kbGVzIGFuIGluY29taW5nIFNOTVAgcGFja2V0IGludG8gdGhlIGFnZW50IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiBcZkJuZXRzbm1wX2FkZF92YXJiaW5kX3RvX2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgaW50IHZiY291bnQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyYmluZF9wdHIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqdHApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjaGVja19hY21cZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY3JlYXRlX3N1YnRyZWVfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWFzc2lnbl9yZXF1ZXN0c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kZWxldGVfcmVxdWVzdF9pbmZvc1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcWxpc3QpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kZWxldGVfc3VidHJlZV9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19lcnJvclxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIGludCBsb29rX2Zvcl9zcGVjaWZpYykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfcmVxdWVzdHNfZXJyb3JcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfcmVxdWVzdHNfc3RhdHVzXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzLCBpbnQgbG9va19mb3Jfc3BlY2lmaWMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19zdGF0dXNcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBpbnQgbG9va19mb3Jfc3BlY2lmaWMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfdmFyX3JlcXVlc3RzXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NoZWNrX291dHN0YW5kaW5nX2FnZW50X3JlcXVlc3RzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja190cmFuc2FjdGlvbl9pZFxmUCAoaW50IHRyYW5zYWN0aW9uX2lkKSIKLS5icgotLlJJICJcZklEZWNpZGUgaWYgdGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlvbl9pZCBpcyBzdGlsbCBiZWluZyBwcm9jZXNzZWQgd2l0aGluIHRoZSBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCY2hlY2tfZ2V0bmV4dF9yZXN1bHRzXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB2YWxpZCBHRVRORVhUIHJlcXVlc3RzIGxlZnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9zZXRcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50IFxmQl9yZXF1ZXN0X3NldF9lcnJvclxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGludCBtb2RlLCBpbnQgZXJyb3JfdmFsdWUpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfaWR4XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlLCBpbnQgaWR4KSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCB3aXRoaW4gYSByZXF1ZXN0IGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGxcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cywgaW50IGVycm9yKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGFsbCByZXF1ZXN0cyBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJuZXRzbm1wX21hcmtlcl91cHRpbWVcZlAgKG1hcmtlcl90IHBtKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCbmV0c25tcF90aW1ldmFsX3VwdGltZVxmUCAoc3RydWN0IHRpbWV2YWwgKnR2KSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfYWdlbnRfYWRkX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKlxmQm5vZGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX2FnZW50X3JlbW92ZV9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmksIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgKiBcZkJuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmksIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0XGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldHNcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmkpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3JcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NldF9tb2RlX3JlcXVlc3RfZXJyb3JcZlAgKGludCBtb2RlLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NldF9hbGxfcmVxdWVzdHNfZXJyb3JcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMsIGludCBlcnJvcl92YWx1ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhbGwgcmVxdWVzdCBcZlAiCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJvaWQgXGZCdmVyc2lvbl9zeXNvaWRcZlAgW10gPSB7IE5FVFNOTVBfU1lTVEVNX01JQiB9IgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ2ZXJzaW9uX3N5c29pZF9sZW5cZlAgPSBPSURfTEVOR1RIKHZlcnNpb25fc3lzb2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2FkZHJlc3Nlc1xmUCA9IDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogXGZCbmV0c25tcF9wcm9jZXNzaW5nX3NldFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogXGZCYWdlbnRfZGVsZWdhdGVkX2xpc3RcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIFxmQm5ldHNubXBfYWdlbnRfcXVldWVkX2xpc3RcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3J1bm5pbmdcZlAgPSAxIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQm1haW5fc2Vzc2lvblxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCc3RhcnR0aW1lXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIk5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQgX3JlcXVlc3Rfc2V0X2Vycm9yIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGludCBtb2RlLCBpbnQgZXJyb3JfdmFsdWUpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM0MTcgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBhZ2VudF9jaGVja19hbmRfcHJvY2VzcyAoaW50IGJsb2NrKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHBhY2tldHMgYXJyaXZpbmcgb24gdGhlIFNOTVAgcG9ydCBhbmQgcHJvY2Vzc2VzIHRoZW0oc25tcF9yZWFkKSBpZiBzb21lIGFyZSBmb3VuZCwgdXNpbmcgdGhlIHNlbGVjdCgpLiBJZiBibG9jayBpcyBub24gemVybywgdGhlIGZ1bmN0aW9uIGNhbGwgYmxvY2tzIHVudGlsIGEgcGFja2V0IGFycml2ZXMKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklibG9ja1xmUCB1c2VkIHRvIGNvbnRyb2wgYmxvY2tpbmcgaW4gdGhlIHNlbGVjdCgpIGZ1bmN0aW9uLCAxID0gYmxvY2sgZm9yZXZlciwgYW5kIDAgPSBkb24ndCBibG9jawotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBhIHBvc2l0aXZlIGludGVnZXIgaWYgcGFja2V0cyB3ZXJlIHByb2Nlc3NlZCwgYW5kIC0xIGlmIGFuIGVycm9yIHdhcyBmb3VuZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NjYgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBjaGVja19nZXRuZXh0X3Jlc3VsdHMgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIGFzcCkiCi0uUFAKLXJldHVybnMgMSBpZiB0aGVyZSBhcmUgdmFsaWQgR0VUTkVYVCByZXF1ZXN0cyBsZWZ0LiBSZXR1cm5zIDAgaWYgbm90LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4MTggb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBoYW5kbGVfZ2V0bmV4dF9sb29wIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBhc3ApIgotLlBQCi1yZXBlYXRlZGx5IGNhbGxzIGdldG5leHQgaGFuZGxlcnMgbG9va2luZyBmb3IgYW4gYW5zd2VyIHRpbGwgYWxsIHJlcXVlc3RzIGFyZSBzYXRpc2lmaWVkLiBJdCdzIGV4cGVjdGVkIHRoYXQgb25lIHBhc3MgaGFzIGJlZW4gbWFkZSBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5MzUgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBoYW5kbGVfcGR1IChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBhc3ApIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGNhbGxzIGludG8gbmV0c25tcF9zZXRfbW9kZV9yZXF1ZXN0X2Vycm9yLCBzZXRzIGVycm9yX3ZhbHVlIGdpdmVuIGEgcmVxaW5mby0+bW9kZSB2YWx1ZS4gSXQncyB1c2VkIHRvIHNlbmQgc3BlY2lmaWMgZXJyb3JzIGJhY2sgdG8gdGhlIGFnZW50IHRvIHByb2Nlc3MgYWNjb3JkaW5nbHkuCi0uUFAKLUlmIGVycm9yX3ZhbHVlIGlzIHNldCB0byBTTk1QX05PU1VDSE9CSkVDVCwgU05NUF9OT1NVQ0hJTlNUQU5DRSwgb3IgU05NUF9FTkRPRk1JQlZJRVcgdGhlIGZvbGxvd2luZyBpcyBhcHBsaWNhYmxlOiBTZXRzIHRoZSBlcnJvcl92YWx1ZSB0byByZXF1ZXN0LT5yZXF1ZXN0dmItPnR5cGUgaWYgcmVxaW5mby0+bW9kZSB2YWx1ZSBpcyBzZXQgdG8gTU9ERV9HRVQuIElmIHRoZSByZXFpbmZvLT5tb2RlIHZhbHVlIGlzIHNldCB0byBNT0RFX0dFVE5FWFQgb3IgTU9ERV9HRVRCVUxLIHRoZSBjb2RlIGNhbGxzIHNubXBfbG9nIGxvZ2dpbmcgYW4gZXJyb3IgbWVzc2FnZS4KLS5QUAotT3RoZXJ3aXNlLCB0aGUgcmVxdWVzdC0+c3RhdHVzIHZhbHVlIGlzIGNoZWNrZWQsIGlmIGl0J3MgPCAwIHNubXBfbG9nIGlzIGNhbGxlZCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgYW5kIFNOTVBfRVJSX0dFTkVSUiBpcyBhc3NpZ25lZCB0byByZXF1ZXN0LT5zdGF0dXMuIElmIHRoZSByZXF1ZXN0LT5zdGF0dXMgdmFsdWUgaXMgPj0gMCB0aGUgZXJyb3JfdmFsdWUgaXMgc2V0IHRvIHJlcXVlc3QtPnN0YXR1cy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXFpbmZvXGZQIGlzIGEgcG9pbnRlciB0byB0aGUgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gc3RydWN0LiBJdCBjb250YWlucyB0aGUgcmVxaW5mby0+bW9kZSB3aGljaCBpcyByZXF1aXJlZCB0byBzZXQgZXJyb3JfdmFsdWUgb3IgbG9nIGVycm9yIG1lc3NhZ2VzLgotLmJyCi1cZklyZXF1ZXN0XGZQIGlzIGEgcG9pbnRlciB0byB0aGUgbmV0c25tcF9yZXF1ZXN0X2luZm8gc3RydWN0LiBUaGUgZXJyb3JfdmFsdWUgaXMgc2V0IHRvIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dHlwZQotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBpcyB0aGUgZXhjZXB0aW9uIHZhbHVlIHlvdSB3YW50IHRvIHNldCwgYmVsb3cgYXJlIHBvc3NpYmxlIHZhbHVlcy4KLS5JUCAiXChidSIgMgotU05NUF9OT1NVQ0hPQkpFQ1QKLS5JUCAiXChidSIgMgotU05NUF9OT1NVQ0hJTlNUQU5DRQotLklQICJcKGJ1IiAyCi1TTk1QX0VORE9GTUlCVklFVwotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9OT0VSUk9SCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1RPT0JJRwotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9OT1NVQ0hOQU1FCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0JBRFZBTFVFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1JFQURPTkxZCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0dFTkVSUgotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9OT0FDQ0VTUwotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9XUk9OR1RZUEUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfV1JPTkdMRU5HVEgKLS5JUCAiXChidSIgMgotU05NUF9FUlJfV1JPTkdFTkNPRElORwotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9XUk9OR1ZBTFVFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX05PQ1JFQVRJT04KLS5JUCAiXChidSIgMgotU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9DT01NSVRGQUlMRUQKLS5JUCAiXChidSIgMgotU05NUF9FUlJfVU5ET0ZBSUxFRAotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9BVVRIT1JJWkFUSU9ORVJST1IKLS5JUCAiXChidSIgMgotU05NUF9FUlJfTk9UV1JJVEFCTEUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRQotLlBQCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGVycm9yX3ZhbHVlIHVuZGVyIGFsbCBjb25kaXRpb25zLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMyMjkgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBoYW5kbGVfc25tcF9wYWNrZXQgKGludCBvcCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICogc2Vzc2lvbiwgaW50IHJlcWlkLCBcZkJuZXRzbm1wX3BkdVxmUCAqIHBkdSwgdm9pZCAqIG1hZ2ljKSIKLS5QUAotaGFuZGxlcyBhbiBpbmNvbWluZyBTTk1QIHBhY2tldCBpbnRvIHRoZSBhZ2VudCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE3NzQgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgIlxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQKiBuZXRzbm1wX2FkZF92YXJiaW5kX3RvX2NhY2hlIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBhc3AsIGludCB2YmNvdW50LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJiaW5kX3B0ciwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICogdHApIgotLlBQCi1cZkJUb2RvXGZQCi0uUlMgNAotbWFrZSB0aGlzIGJlIG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgcmFuZ2VzLiBSaWdodCBub3cgd2UgbWVyZWx5IHRha2UgdGhlIGhpZ2hlc3QgbGV2ZWwgY29tbW9uYWxpdHkgb2YgYSByZWdpc3RyYXRpb24gcmFuZ2UgYW5kIHVzZSB0aGF0LiBBdCB0aW1lcyB3ZSBtaWdodCBiZSBhYmxlIHRvIGJlIHNtYXJ0ZXIgYWJvdXQgY2hlY2tpbmcgdGhlIHJhbmdlIGl0c2VsZiBhcyBvcHBvc2VkIHRvIHRoZSBcZkJub2RlXGZQIGFib3ZlIHdoZXJlIHRoZSByYW5nZSBleGlzdHMsIGJ1dCBJIGRvdWJ0IHRoaXMgd2lsbCBjb21lIHVwIGFsbCB0aGF0IGZyZXF1ZW50bHkuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg4MyBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfY2hlY2tfdHJhbnNhY3Rpb25faWQgKGludCB0cmFuc2FjdGlvbl9pZCkiCi0uUFAKLURlY2lkZSBpZiB0aGUgcmVxdWVzdGVkIHRyYW5zYWN0aW9uX2lkIGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGFnZW50LiBUaGlzIGlzIHVzZWQgdG8gdmFsaWRhdGUgd2hldGhlciBhIGRlbGF5ZWQgY2FjaGUgKGNvbnRhaW5pbmcgcG9zc2libHkgZnJlZWQgcG9pbnRlcnMpIGlzIHN0aWxsIHVzYWJsZS4KLS5QUAotcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1MgaWYgaXQncyBzdGlsbCB2YWxpZCwgb3IgU05NUEVSUl9HRU5FUlIgaWYgbm90LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MjEgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uUFAKLXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCByZXF1ZXN0IHdoaWNoIGhhcyBlcnJvciAKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNDg1IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJORVRTTk1QX0lOTElORSBpbnQgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMsIGludCBlcnJvcikiCi0uUFAKLXNldCBlcnJvciBmb3IgYWxsIHJlcXVlc3RzIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdHNcZlAgcmVxdWVzdCBsaXN0IAotLmJyCi1cZkllcnJvclxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdHMgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1TTk1QRVJSX1NVQ0NFU1MsIG9yIGFuIGVycm9yIGNvZGUgCi0uUkUKLS5QUAotCi0uUFAKLXBhcmFub2lkIHNhbml0eSBjaGVja3MgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTI4IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9pZHggKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlLCBpbnQgaWR4KSIKLS5QUAotc2V0IGVycm9yIGZvciBhIHJlcXVlc3Qgd2l0aGluIGEgcmVxdWVzdCBsaXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCBoZWFkIG9mIHRoZSByZXF1ZXN0IGxpc3QgCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0IAotLmJyCi1cZklpZHhcZlAgaW5kZXggb2YgdGhlIHJlcXVlc3Qgd2hpY2ggaGFzIHRoZSBlcnJvciAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1MDAgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3NldF9hbGxfcmVxdWVzdHNfZXJyb3IgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cywgaW50IGVycm9yX3ZhbHVlKSIKLS5QUAotc2V0IGVycm9yIGZvciBhbGwgcmVxdWVzdCBcZkJEZXByZWNhdGVkXGZQCi0uUlMgNAotdXNlIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsIAotLlJFCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxaW5mb1xmUCBhZ2VudF9yZXF1ZXN0X2luZm8gcG9pbnRlciBmb3IgcmVxdWVzdHMgCi0uYnIKLVxmSXJlcXVlc3RzXGZQIHJlcXVlc3QgbGlzdCAKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3RzIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotZXJyb3JfdmFsdWUgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzAyIG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9zZXRfbW9kZV9yZXF1ZXN0X2Vycm9yIChpbnQgbW9kZSwgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBkZXByZWNhdGVkLCB1c2UgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvciBpbnN0ZWFkCi0uUFAKLVxmQkRlcHJlY2F0ZWRcZlAKLS5SUyA0Ci0sIHVzZSBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yIGluc3RlYWQgCi0uUkUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltb2RlXGZQIE5ldC1TTk1QIGFnZW50IHByb2Nlc3NpbmcgbW9kZSAKLS5icgotXGZJcmVxdWVzdFxmUCByZXF1ZXN0X2luZm8gcG9pbnRlciAKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3RzIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotZXJyb3JfdmFsdWUgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNjg2IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uUFAKLXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IGRlcHJlY2F0ZWQsIHVzZSBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yIGluc3RlYWQKLS5QUAotXGZCRGVwcmVjYXRlZFxmUAotLlJTIDQKLSwgdXNlIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IgaW5zdGVhZCAKLS5SRQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcWluZm9cZlAgYWdlbnRfcmVxdWVzdF9pbmZvIHBvaW50ZXIgZm9yIHJlcXVlc3QgCi0uYnIKLVxmSXJlcXVlc3RcZlAgcmVxdWVzdF9pbmZvIHBvaW50ZXIgCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0cyAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWVycm9yX3ZhbHVlIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNjY3IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF93cmFwX3VwX3JlcXVlc3QgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIGFzcCwgaW50IHN0YXR1cykiCi0uUFAKLWlmIGFzcC0+cGR1IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUyMCBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMgYi9tYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODNkNTguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9hbGFybS4zCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLlRIICJzbm1wX2FsYXJtIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc25tcF9hbGFybSBcLSAKLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCZmxhZ3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQmNsaWVudHJlZ1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJ0X2xhc3RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCdF9uZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJjbGllbnRhcmdcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiU05NUEFsYXJtQ2FsbGJhY2sgKiBcZkJ0aGVjYWxsYmFja1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc25tcF9hbGFybVxmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1EZWZpbml0aW9uIGF0IGxpbmUgMTYgb2YgZmlsZSBzbm1wX2FsYXJtLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zIGIvbWFuL25ldHNubXBfc25tcF9jbGllbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZmZjFjNS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS5USCAidmFyaW91cyBQRFUgcHJvY2Vzc2luZyByb3V0aW5lcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXZhcmlvdXMgUERVIHByb2Nlc3Npbmcgcm91dGluZXMgXC0gCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQnNubXBfcGR1X2NyZWF0ZVxmUCAoaW50IGNvbW1hbmQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnNubXBfYWRkX251bGxfdmFyXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2xvbmVfdmFyXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpuZXd2YXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2Nsb25lX21lbVxmUCAodm9pZCAqKmRzdFB0ciwgdm9pZCAqc3JjUHRyLCB1bnNpZ25lZCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9yZXNldF92YXJfYnVmZmVyc1xmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnNubXBfY2xvbmVfdmFyYmluZFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJsaXN0KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQnNubXBfY2xvbmVfcGR1XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQnNubXBfc3BsaXRfcGR1XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBpbnQgc2tpcF9jb3VudCwgaW50IGNvcHlfY291bnQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCc25tcF9maXhfcGR1XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBpbnQgY29tbWFuZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgbG9uZyBcZkJzbm1wX3ZhcmJpbmRfbGVuXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXRfdmFyX29iamlkXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZwLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3QgbmFtZV9sZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NldF92YXJfdHlwZWRfdmFsdWVcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbmV3dmFyLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICp2YWxfc3RyLCBzaXplX3QgdmFsX2xlbikiCi0uYnIKLS5SSSAiXGZJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlIGlzIHVzZWQgdG8gc2V0IGRhdGEgaW50byB0aGUgbmV0c25tcF92YXJpYWJsZV9saXN0IHN0cnVjdHVyZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXJcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbmV3dmFyLCB1X2NoYXIgdHlwZSwgbG9uZyB2YWwpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjb3VudF92YXJiaW5kc1xmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJfcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY291bnRfdmFyYmluZHNfb2ZfdHlwZVxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJfcHRyLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCZmluZF92YXJiaW5kX29mX3R5cGVcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyX3B0ciwgdV9jaGFyIHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQmZpbmRfdmFyYmluZF9pbl9saXN0XGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZibGlzdCwgb2lkICpuYW1lLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXRfdmFyX3ZhbHVlXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcnMsIGNvbnN0IHVfY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9yZXBsYWNlX3Zhcl90eXBlc1xmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YmwsIHVfY2hhciBvbGRfdHlwZSwgdV9jaGFyIG5ld190eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfcmVzZXRfdmFyX3R5cGVzXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZibCwgdV9jaGFyIG5ld190eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zeW5jaF9yZXNwb25zZV9jYlxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgXGZCbmV0c25tcF9wZHVcZlAgKipyZXNwb25zZSwgc25tcF9jYWxsYmFjayBwY2IpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3N5bmNoX3Jlc3BvbnNlXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBcZkJuZXRzbm1wX3BkdVxmUCAqKnJlc3BvbnNlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlXGZQICh2b2lkICpzZXNzcCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgXGZCbmV0c25tcF9wZHVcZlAgKipyZXNwb25zZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQnNubXBfZXJyc3RyaW5nXGZQIChpbnQgZXJyc3RhdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2VzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9xdWVyeV9nZXRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbGlzdCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9xdWVyeV9nZXRuZXh0XGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmxpc3QsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcXVlcnlfc2V0XGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmxpc3QsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcXVlcnlfd2Fsa1xmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpsaXN0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIG5ld3ZhciwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqIHZhbF9zdHIsIHNpemVfdCB2YWxfbGVuKSIKLS5QUAotc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlIGlzIHVzZWQgdG8gc2V0IGRhdGEgaW50byB0aGUgbmV0c25tcF92YXJpYWJsZV9saXN0IHN0cnVjdHVyZS4gVXNlZCB0byByZXR1cm4gZGF0YSB0byB0aGUgc25tcCByZXF1ZXN0IHZpYSB0aGUgbmV0c25tcF9yZXF1ZXN0X2luZm8gc3RydWN0dXJlJ3MgcmVxdWVzdHZiIHBvaW50ZXIuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmV3dmFyXGZQIHRoZSBzdHJ1Y3R1cmUgZ2V0cyBwb3B1bGF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGF0YSwgdHlwZSwgdmFsX3N0ciwgYW5kIHZhbF9sZW4uIAotLmJyCi1cZkl0eXBlXGZQIGlzIHRoZSBhc24gZGF0YSB0eXBlIHRvIGJlIGNvcGllZCAKLS5icgotXGZJdmFsX3N0clxmUCBpcyBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBjb3BpZWQgaW50byB0aGUgbmV3dmFyIHN0cnVjdHVyZS4gCi0uYnIKLVxmSXZhbF9sZW5cZlAgdGhlIGxlbmd0aCBvZiB2YWxfc3RyCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1yZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgMSBvbiBhIG1hbGxvYyBlcnJvciAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjg3IG9mIGZpbGUgc25tcF9jbGllbnQuYy4KLS5TUyAiaW50IHNubXBfc2V0X3Zhcl92YWx1ZSAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFycywgY29uc3QgdV9jaGFyICogdmFsdWUsIHNpemVfdCBsZW4pIgotLlBQCi1GQUxMIFRIUk9VR0ggCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NTQgb2YgZmlsZSBzbm1wX2NsaWVudC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zIGIvbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZmNmYmEuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLlRIICJnZW5lcmljIGxvZ2dpbmcgZm9yIG5ldC1zbm1wIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotZ2VuZXJpYyBsb2dnaW5nIGZvciBuZXQtc25tcCBcLSAKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkxPR0xFTkdUSFxmUCAgIDEwMjQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJ2YV9jb3B5XGZQKGRlc3QsIHNyYykgICBtZW1jcHkgKCZkZXN0LCAmc3JjLCBzaXplb2YgKHZhX2xpc3QpKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkxPR19VU0VSXGZQICAgMCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2VuYWJsZV9maWxlbG9nXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgZG9udF96ZXJvX2xvZykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnZzbnByaW50ZlxmUCAoY2hhciAqc3RyLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmcpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF9zbm1wX2xvZ2dpbmdcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2h1dGRvd25fc25tcF9sb2dnaW5nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZGVjb2RlX3ByaW9yaXR5XGZQIChjaGFyICoqb3B0YXJnLCBpbnQgKnByaV9tYXgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJkZWNvZGVfZmFjaWxpdHlcZlAgKGNoYXIgKm9wdGFyZykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfbG9nX29wdGlvbnNcZlAgKGNoYXIgKm9wdGFyZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc25tcF9sb2dfc3lzbG9nbmFtZVxmUCAoY29uc3QgY2hhciAqcHN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2xvZ19vcHRpb25zX3VzYWdlXGZQIChjb25zdCBjaGFyICpsZWFkLCBGSUxFICpvdXRmKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9nZXRfZG9fbG9nZ2luZ1xmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJSXMgbG9nZ2luZyBkb25lPyBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX3N5c2xvZ19lbnRyeVxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfc3lzbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9maWxlbG9nX2VudHJ5XGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9maWxlbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zdGRlcnJsb2dfc3RhdHVzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9zdGRlcnJsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX2NhbGxsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX2xvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2VuYWJsZV9zeXNsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lbmFibGVfc3lzbG9nX2lkZW50XGZQIChjb25zdCBjaGFyICppZGVudCwgY29uc3QgaW50IGZhY2lsaXR5KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZW5hYmxlX2ZpbGVsb2dcZlAgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLCBpbnQgZG9udF96ZXJvX2xvZykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2VuYWJsZV9zdGRlcnJsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lbmFibGVfY2FsbGxvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZmluZF9sb2doYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWRkX2xvZ2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXJcZlAgKGludCB0eXBlLCBpbnQgcHJpb3JpdHkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2VuYWJsZV9sb2doYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZGlzYWJsZV9sb2doYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVtb3ZlX2xvZ2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfaGFuZGxlcl9zdGRvdXRlcnJcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19oYW5kbGVyX3N5c2xvZ1xmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2hhbmRsZXJfZmlsZVxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2hhbmRsZXJfY2FsbGJhY2tcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19oYW5kbGVyX251bGxcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2xvZ19zdHJpbmdcZlAgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF92bG9nXGZQIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkiCi0uYnIKLS5SSSAiXGZJVGhpcyBzbm1wIGxvZ2dpbmcgZnVuY3Rpb24gYWxsb3dzIFxmQnZhcmlhYmxlXGZQIGFyZ3VtZW50IGxpc3QgZ2l2ZW4gdGhlIHNwZWNpZmllZCBwcmlvcml0eSwgZm9ybWF0IGFuZCBhIHBvcHVsYXRlZCB2YV9saXN0IHN0cnVjdHVyZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9sb2dcZlAgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LC4uLikiCi0uYnIKLS5SSSAiXGZJVGhpcyBzbm1wIGxvZ2dpbmcgZnVuY3Rpb24gYWxsb3dzIFxmQnZhcmlhYmxlXGZQIGFyZ3VtZW50IGxpc3QgZ2l2ZW4gdGhlIHNwZWNpZmllZCBmb3JtYXQgYW5kIHByaW9yaXR5LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9sb2dfcGVycm9yXGZQIChjb25zdCBjaGFyICpzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICogXGZCZ2V0X2xvZ2hfaGVhZFxmUCAodm9pZCkiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKiBcZkJsb2doX2hlYWRcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKiBcZkJsb2doX3ByaW9yaXRpZXNcZlAgW0xPR19ERUJVRysxXSIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0ICh2b2lkKSIKLS5QUAotaG1tLCBkb24ndCB6ZXJvIHN0YXR1cyBpc24ndCBzYXZlZC4uIGkgdGhpbmsgaXQncyBzYWZlciBub3QgdG8gb3ZlcndyaXRlLCBpbiBjYXNlIGEgaHVwIGlzIGp1c3QgdG8gcmUtcmVhZCBjb25maWcgZmlsZXMuLi4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYzOSBvZiBmaWxlIHNubXBfbG9nZ2luZy5jLgotLlNTICJpbnQgc25tcF9nZXRfZG9fbG9nZ2luZyAodm9pZCkiCi0uUFAKLUlzIGxvZ2dpbmcgZG9uZT8gXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIDAgaWYgbG9nZ2luZyBpcyBvZmYsIDEgd2hlbiBpdCBpcyBkb25lLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ5NiBvZiBmaWxlIHNubXBfbG9nZ2luZy5jLgotLlNTICJpbnQgc25tcF9sb2cgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqIGZvcm1hdCwgIC4uLikiCi0uUFAKLVRoaXMgc25tcCBsb2dnaW5nIGZ1bmN0aW9uIGFsbG93cyBcZkJ2YXJpYWJsZVxmUCBhcmd1bWVudCBsaXN0IGdpdmVuIHRoZSBzcGVjaWZpZWQgZm9ybWF0IGFuZCBwcmlvcml0eS4gQ2FsbHMgdGhlIHNubXBfdmxvZyBmdW5jdGlvbi4gVGhlIGRlZmF1bHQgbG9nZmlsZSB0aGlzIGZ1bmN0aW9uIHdyaXRlcyB0byBpcyAvdmFyL2xvZy9zbm1wZC5sb2cuCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNubXBfdmxvZ1xmUCAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI3OCBvZiBmaWxlIHNubXBfbG9nZ2luZy5jLgotLlNTICJpbnQgc25tcF92bG9nIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXApIgotLlBQCi1UaGlzIHNubXAgbG9nZ2luZyBmdW5jdGlvbiBhbGxvd3MgXGZCdmFyaWFibGVcZlAgYXJndW1lbnQgbGlzdCBnaXZlbiB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LCBmb3JtYXQgYW5kIGEgcG9wdWxhdGVkIHZhX2xpc3Qgc3RydWN0dXJlLiBUaGUgZGVmYXVsdCBsb2dmaWxlIHRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGlzIC92YXIvbG9nL3NubXBkLmxvZy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklwcmlvcml0eVxmUCBpcyBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBtZXNzYWdlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNubXAgbG9nIGZpbGUuIFRoZSB0eXBlcyBhcmUgZXJyb3JzLCB3YXJuaW5nLCBhbmQgaW5mb3JtYXRpb24uCi0uSVAgIlwoYnUiIDIKLVRoZSBlcnJvciB0eXBlcyBhcmU6Ci0uSVAgIiAgXChidSIgNAotTE9HX0VNRVJHIHN5c3RlbSBpcyB1bnVzYWJsZQotLklQICIgIFwoYnUiIDQKLUxPR19BTEVSVCBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQotLklQICIgIFwoYnUiIDQKLUxPR19DUklUIGNyaXRpY2FsIGNvbmRpdGlvbnMKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfRVJSIGVycm9yIGNvbmRpdGlvbnMKLS5QUAotCi0uSVAgIlwoYnUiIDIKLVRoZSB3YXJuaW5nIHR5cGUgaXM6Ci0uSVAgIiAgXChidSIgNAotTE9HX1dBUk5JTkcgd2FybmluZyBjb25kaXRpb25zCi0uUFAKLQotLklQICJcKGJ1IiAyCi1UaGUgaW5mb3JtYXRpb24gdHlwZXMgYXJlOgotLklQICIgIFwoYnUiIDQKLUxPR19OT1RJQ0Ugbm9ybWFsIGJ1dCBzaWduaWZpY2FudCBjb25kaXRpb24KLS5JUCAiICBcKGJ1IiA0Ci1MT0dfSU5GTyBpbmZvcm1hdGlvbmFsCi0uSVAgIiAgXChidSIgNAotTE9HX0RFQlVHIGRlYnVnLWxldmVsIG1lc3NhZ2VzCi0uUFAKLQotLlBQCi0uYnIKLVxmSWZvcm1hdFxmUCBpcyBhIHBvaW50ZXIgdG8gYSBjaGFyIHJlcHJlc2VudGluZyB0aGUgXGZCdmFyaWFibGVcZlAgYXJndW1lbnQgbGlzdCBmb3JtYXQgdXNlZC4KLS5icgotXGZJYXBcZlAgaXMgYSB2YV9saXN0IHR5cGUgdXNlZCB0byB0cmF2ZXJzZSB0aGUgbGlzdCBvZiBhcmd1bWVudHMuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgd2hlbiB0aGUgY29kZSBjb3VsZCBub3QgZm9ybWF0IHRoZSBsb2ctIHN0cmluZywgLTIgd2hlbiBkeW5hbWljIG1lbW9yeSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIGlmIHRoZSBsZW5ndGggb2YgdGhlIGxvZyBidWZmZXIgaXMgZ3JlYXRlciB0aGVuIDEwMjQgYnl0ZXMuIEZvciBlYWNoIG9mIHRoZXNlIGVycm9ycyBhIExPR19FUlIgbWVzc2dhZSBpcyB3cml0dGVuIHRvIHRoZSBsb2dmaWxlLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNubXBfbG9nXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTIxNyBvZiBmaWxlIHNubXBfbG9nZ2luZy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfcGR1LjMgYi9tYW4vbmV0c25tcF9zbm1wX3BkdS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY0ODI3Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfcGR1LjMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLlRIICJzbm1wX3BkdSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNubXBfcGR1IFwtIAotLlBQCi1UaGUgc25tcCBwcm90b2NvbCBkYXRhIHVuaXQuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8c25tcF9hcGkuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJ2ZXJzaW9uXGZQIgotLmJyCi0uUkkgIlxmSXNubXAgdmVyc2lvbiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJjb21tYW5kXGZQIgotLmJyCi0uUkkgIlxmSVR5cGUgb2YgdGhpcyBQRFUuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJyZXFpZFxmUCIKLS5icgotLlJJICJcZklSZXF1ZXN0IGlkIC0gbm90ZTogbm90IGluY3JlbWVudGVkIG9uIHJldHJpZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJtc2dpZFxmUCIKLS5icgotLlJJICJcZklNZXNzYWdlIGlkIGZvciBWMyBtZXNzYWdlcyBub3RlOiBpbmNyZW1lbnRlZCBmb3IgZWFjaCByZXRyeS4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnRyYW5zaWRcZlAiCi0uYnIKLS5SSSAiXGZJVW5pcXVlIElEIGZvciBpbmNvbWluZyB0cmFuc2FjdGlvbnMuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzZXNzaWRcZlAiCi0uYnIKLS5SSSAiXGZJU2Vzc2lvbiBpZCBmb3IgQWdlbnRYIG1lc3NhZ2VzLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCZXJyc3RhdFxmUCIKLS5icgotLlJJICJcZklFcnJvciBzdGF0dXMgKG5vbl9yZXBlYXRlcnMgaW4gR2V0QnVsaykuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJlcnJpbmRleFxmUCIKLS5icgotLlJJICJcZklFcnJvciBpbmRleCAobWF4X3JlcGV0aXRpb25zIGluIEdldEJ1bGspLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJ0aW1lXGZQIgotLmJyCi0uUkkgIlxmSVVwdGltZS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCZmxhZ3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNlY3VyaXR5TW9kZWxcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNlY3VyaXR5TGV2ZWxcZlAiCi0uYnIKLS5SSSAiXGZJbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJtc2dQYXJzZU1vZGVsXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJ0cmFuc3BvcnRfZGF0YVxmUCIKLS5icgotLlJJICJcZklUcmFuc3BvcnQtc3BlY2lmaWMgb3BhcXVlIGRhdGEuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnRyYW5zcG9ydF9kYXRhX2xlbmd0aFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBvaWQgKiBcZkJ0RG9tYWluXGZQIgotLmJyCi0uUkkgIlxmSVRoZSBhY3R1YWwgdHJhbnNwb3J0IGRvbWFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCdERvbWFpbkxlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJ2YXJpYWJsZXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCY29tbXVuaXR5XGZQIgotLmJyCi0uUkkgIlxmSWNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbW11bml0eV9sZW5cZlAiCi0uYnIKLS5SSSAiXGZJbGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQmVudGVycHJpc2VcZlAiCi0uYnIKLS5SSSAiXGZJU3lzdGVtIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCZW50ZXJwcmlzZV9sZW5ndGhcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJ0cmFwX3R5cGVcZlAiCi0uYnIKLS5SSSAiXGZJdHJhcCB0eXBlIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzcGVjaWZpY190eXBlXGZQIgotLmJyCi0uUkkgIlxmSXNwZWNpZmljIHR5cGUgXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBjaGFyIFxmQmFnZW50X2FkZHJcZlAgWzRdIgotLmJyCi0uUkkgIlxmSVRoaXMgaXMgT05MWSB1c2VkIGZvciB2MSBUUkFQcy4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJjb250ZXh0RW5naW5lSURcZlAiCi0uYnIKLS5SSSAiXGZJY29udGV4dCBzbm1wRW5naW5lSUQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29udGV4dEVuZ2luZUlETGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmNvbnRleHROYW1lXGZQIgotLmJyCi0uUkkgIlxmSWF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29udGV4dE5hbWVMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbnRleHROYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNlY3VyaXR5RW5naW5lSURcZlAiCi0uYnIKLS5SSSAiXGZJYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgZm9yIHNlY3VyaXR5IFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5RW5naW5lSURMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIHNlY3VyaXR5RW5naW5lSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNlY3VyaXR5TmFtZVxmUCIKLS5icgotLlJJICJcZklvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlOYW1lTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBzZWN1cml0eU5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnByaW9yaXR5XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyYW5nZV9zdWJpZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc2VjdXJpdHlTdGF0ZVJlZlxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBzbm1wIHByb3RvY29sIGRhdGEgdW5pdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInVuc2lnbmVkIGNoYXIgXGZCc25tcF9wZHU6OmFnZW50X2FkZHJcZlBbNF0iCi0uUFAKLVRoaXMgaXMgT05MWSB1c2VkIGZvciB2MSBUUkFQcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9wZHU6OmNvbW1hbmRcZlAiCi0uUFAKLVR5cGUgb2YgdGhpcyBQRFUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfcGR1Ojpjb21tdW5pdHlcZlAiCi0uUFAKLWNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfcGR1Ojpjb21tdW5pdHlfbGVuXGZQIgotLlBQCi1sZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI5IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3BkdTo6Y29udGV4dEVuZ2luZUlEXGZQIgotLlBQCi1jb250ZXh0IHNubXBFbmdpbmVJRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3BkdTo6Y29udGV4dEVuZ2luZUlETGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfcGR1Ojpjb250ZXh0TmFtZVxmUCIKLS5QUAotYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3BkdTo6Y29udGV4dE5hbWVMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb250ZXh0TmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJvaWQqIFxmQnNubXBfcGR1OjplbnRlcnByaXNlXGZQIgotLlBQCi1TeXN0ZW0gT0lELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzNSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OmVycmluZGV4XGZQIgotLlBQCi1FcnJvciBpbmRleCAobWF4X3JlcGV0aXRpb25zIGluIEdldEJ1bGspLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6ZXJyc3RhdFxmUCIKLS5QUAotRXJyb3Igc3RhdHVzIChub25fcmVwZWF0ZXJzIGluIEdldEJ1bGspLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkzIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6bXNnaWRcZlAiCi0uUFAKLU1lc3NhZ2UgaWQgZm9yIFYzIG1lc3NhZ2VzIG5vdGU6IGluY3JlbWVudGVkIGZvciBlYWNoIHJldHJ5LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6cmVxaWRcZlAiCi0uUFAKLVJlcXVlc3QgaWQgLSBub3RlOiBub3QgaW5jcmVtZW50ZWQgb24gcmV0cmllcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9wZHU6OnNlY3VyaXR5RW5naW5lSURcZlAiCi0uUFAKLWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIGZvciBzZWN1cml0eSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3BkdTo6c2VjdXJpdHlFbmdpbmVJRExlblxmUCIKLS5QUAotTGVuZ3RoIG9mIHNlY3VyaXR5RW5naW5lSUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfcGR1OjpzZWN1cml0eUxldmVsXGZQIgotLlBQCi1ub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9wZHU6OnNlY3VyaXR5TmFtZVxmUCIKLS5QUAotb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTYwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfcGR1OjpzZWN1cml0eU5hbWVMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBzZWN1cml0eU5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTYyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6c2Vzc2lkXGZQIgotLlBQCi1TZXNzaW9uIGlkIGZvciBBZ2VudFggbWVzc2FnZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTEgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1OjpzcGVjaWZpY190eXBlXGZQIgotLlBQCi1zcGVjaWZpYyB0eXBlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY29uc3Qgb2lkKiBcZkJzbm1wX3BkdTo6dERvbWFpblxmUCIKLS5QUAotVGhlIGFjdHVhbCB0cmFuc3BvcnQgZG9tYWluLiBUaGlzIFNIT1VMRCBOT1QgQkUgRlJFRSgpRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2xvbmcgXGZCc25tcF9wZHU6OnRpbWVcZlAiCi0uUFAKLVVwdGltZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnRyYW5zaWRcZlAiCi0uUFAKLVVuaXF1ZSBJRCBmb3IgaW5jb21pbmcgdHJhbnNhY3Rpb25zLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg5IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCogXGZCc25tcF9wZHU6OnRyYW5zcG9ydF9kYXRhXGZQIgotLlBQCi1UcmFuc3BvcnQtc3BlY2lmaWMgb3BhcXVlIGRhdGEuIFRoaXMgcmVwbGFjZXMgdGhlIElQLWNlbnRyaWMgYWRkcmVzcyBmaWVsZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1Ojp0cmFwX3R5cGVcZlAiCi0uUFAKLXRyYXAgdHlwZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzOCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnZlcnNpb25cZlAiCi0uUFAKLXNubXAgdmVyc2lvbiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgxIG9mIGZpbGUgc25tcF9hcGkuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zIGIvbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZTM4M2YuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLlRIICJzbm1wX3Nlc3Npb24iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zbm1wX3Nlc3Npb24gXC0gCi0uUFAKLVRoZSBzbm1wIHNlc3Npb24gc3RydWN0dXJlLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHNubXBfYXBpLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCdmVyc2lvblxmUCIKLS5icgotLlJJICJcZklzbm1wIHZlcnNpb24gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmV0cmllc1xmUCIKLS5icgotLlJJICJcZklOdW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgdGltZW91dC4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnRpbWVvdXRcZlAiCi0uYnIKLS5SSSAiXGZJTnVtYmVyIG9mIHVTIHVudGlsIGZpcnN0IHRpbWVvdXQsIHRoZW4gZXhwb25lbnRpYWwgYmFja29mZi4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCZmxhZ3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNubXBfc2Vzc2lvblxmUCAqIFxmQnN1YnNlc3Npb25cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNubXBfc2Vzc2lvblxmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnBlZXJuYW1lXGZQIgotLmJyCi0uUkkgIlxmSW5hbWUgb3IgYWRkcmVzcyBvZiBkZWZhdWx0IHBlZXIgKG1heSBpbmNsdWRlIHRyYW5zcG9ydCBzcGVjaWZpZXIgYW5kL29yIHBvcnQgbnVtYmVyKSBcZlAiCi0udGkgLTFjCi0uUkkgInVfc2hvcnQgXGZCcmVtb3RlX3BvcnRcZlAiCi0uYnIKLS5SSSAiXGZJVURQIHBvcnQgbnVtYmVyIG9mIHBlZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmxvY2FsbmFtZVxmUCIKLS5icgotLlJJICJcZklNeSBEb21haW4gbmFtZSBvciBkb3R0ZWQgSVAgYWRkcmVzcywgMCBmb3IgZGVmYXVsdC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X3Nob3J0IFxmQmxvY2FsX3BvcnRcZlAiCi0uYnIKLS5SSSAiXGZJTXkgVURQIHBvcnQgbnVtYmVyLCAwIGZvciBkZWZhdWx0LCBwaWNrZWQgcmFuZG9tbHkuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICooKiBcZkJhdXRoZW50aWNhdG9yXGZQICkodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgc2l6ZV90KSIKLS5icgotLlJJICJcZklBdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBvciBOVUxMIGlmIG51bGwgYXV0aGVudGljYXRpb24gaXMgdXNlZC4gXGZQIgotLnRpIC0xYwotLlJJICJuZXRzbm1wX2NhbGxiYWNrIFxmQmNhbGxiYWNrXGZQIgotLmJyCi0uUkkgIlxmSUZ1bmN0aW9uIHRvIGludGVycHJldCBpbmNvbWluZyBkYXRhLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJjYWxsYmFja19tYWdpY1xmUCIKLS5icgotLlJJICJcZklQb2ludGVyIHRvIGRhdGEgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IGNvbnNpZGVyIGltcG9ydGFudC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc19lcnJub1xmUCIKLS5icgotLlJJICJcZkljb3B5IG9mIHN5c3RlbSBlcnJubyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzX3NubXBfZXJybm9cZlAiCi0uYnIKLS5SSSAiXGZJY29weSBvZiBsaWJyYXJ5IGVycm5vIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzZXNzaWRcZlAiCi0uYnIKLS5SSSAiXGZJU2Vzc2lvbiBpZCAtIEFnZW50WCBvbmx5LiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmNvbW11bml0eVxmUCIKLS5icgotLlJJICJcZkljb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb21tdW5pdHlfbGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCcmN2TXNnTWF4U2l6ZVxmUCIKLS5icgotLlJJICJcZklMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHJlY2VpdmUuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNuZE1zZ01heFNpemVcZlAiCi0uYnIKLS5SSSAiXGZJTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byBzZW5kLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJpc0F1dGhvcml0YXRpdmVcZlAiCi0uYnIKLS5SSSAiXGZJYXJlIHdlIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZT8gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJjb250ZXh0RW5naW5lSURcZlAiCi0uYnIKLS5SSSAiXGZJYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29udGV4dEVuZ2luZUlETGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCZW5naW5lQm9vdHNcZlAiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbCBlbmdpbmVCb290cyBmb3IgcmVtb3RlIGVuZ2luZSBcZlAiCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQmVuZ2luZVRpbWVcZlAiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbCBlbmdpbmVUaW1lIGZvciByZW1vdGUgZW5naW5lIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmNvbnRleHROYW1lXGZQIgotLmJyCi0uUkkgIlxmSWF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29udGV4dE5hbWVMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbnRleHROYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNlY3VyaXR5RW5naW5lSURcZlAiCi0uYnIKLS5SSSAiXGZJYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlFbmdpbmVJRExlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzZWN1cml0eU5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5TmFtZUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnNlY3VyaXR5QXV0aFByb3RvXGZQIgotLmJyCi0uUkkgIlxmSWF1dGggcHJvdG9jb2wgb2lkIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5QXV0aFByb3RvTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBhdXRoIHByb3RvY29sIG9pZC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCc2VjdXJpdHlBdXRoS2V5XGZQIFtVU01fQVVUSF9LVV9MRU5dIgotLmJyCi0uUkkgIlxmSUt1IGZvciBhdXRoIHByb3RvY29sIFhYWC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlBdXRoS2V5TGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBLdSBmb3IgYXV0aCBwcm90b2NvbC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzZWN1cml0eUF1dGhMb2NhbEtleVxmUCIKLS5icgotLlJJICJcZklLdWwgZm9yIGF1dGggcHJvdG9jb2wuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgWFhYLiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnNlY3VyaXR5UHJpdlByb3RvXGZQIgotLmJyCi0uUkkgIlxmSXByaXYgcHJvdG9jb2wgb2lkIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5UHJpdlByb3RvTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBwcml2IHByb3RvY29sIG9pZC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCc2VjdXJpdHlQcml2S2V5XGZQIFtVU01fUFJJVl9LVV9MRU5dIgotLmJyCi0uUkkgIlxmSUt1IGZvciBwcml2YWN5IHByb3RvY29sIFhYWC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlQcml2S2V5TGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBLdSBmb3IgcHJpdiBwcm90b2NvbC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzZWN1cml0eVByaXZMb2NhbEtleVxmUCIKLS5icgotLlJJICJcZklLdWwgZm9yIHByaXYgcHJvdG9jb2wuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgWFhYLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzZWN1cml0eU1vZGVsXGZQIgotLmJyCi0uUkkgIlxmSXNubXAgc2VjdXJpdHkgbW9kZWwsIHYxLCB2MmMsIHVzbSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzZWN1cml0eUxldmVsXGZQIgotLmJyCi0uUkkgIlxmSW5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcGFyYW1OYW1lXGZQIgotLmJyCi0uUkkgIlxmSXRhcmdldCBwYXJhbSBuYW1lIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNlY3VyaXR5SW5mb1xmUCIKLS5icgotLlJJICJcZklzZWN1cml0eSBcZkJtb2R1bGVcZlAgc3BlY2lmaWMgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbXl2b2lkXGZQIgotLmJyCi0uUkkgIlxmSXVzZSBhcyB5b3Ugd2FudCBkYXRhIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgc25tcCBzZXNzaW9uIHN0cnVjdHVyZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ1X2NoYXIqKCogXGZCc25tcF9zZXNzaW9uOjphdXRoZW50aWNhdG9yXGZQKSh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBzaXplX3QpIgotLlBQCi1BdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBvciBOVUxMIGlmIG51bGwgYXV0aGVudGljYXRpb24gaXMgdXNlZC4gCi0uU1MgIm5ldHNubXBfY2FsbGJhY2sgXGZCc25tcF9zZXNzaW9uOjpjYWxsYmFja1xmUCIKLS5QUAotRnVuY3Rpb24gdG8gaW50ZXJwcmV0IGluY29taW5nIGRhdGEuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjE0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCogXGZCc25tcF9zZXNzaW9uOjpjYWxsYmFja19tYWdpY1xmUCIKLS5QUAotUG9pbnRlciB0byBkYXRhIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSBjb25zaWRlciBpbXBvcnRhbnQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjE4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3Nlc3Npb246OmNvbW11bml0eVxmUCIKLS5QUAotY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpjb21tdW5pdHlfbGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjMyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3Nlc3Npb246OmNvbnRleHRFbmdpbmVJRFxmUCIKLS5QUAotYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpjb250ZXh0RW5naW5lSURMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9zZXNzaW9uOjpjb250ZXh0TmFtZVxmUCIKLS5QUAotYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OmNvbnRleHROYW1lTGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29udGV4dE5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9pbnQgXGZCc25tcF9zZXNzaW9uOjplbmdpbmVCb290c1xmUCIKLS5QUAotaW5pdGlhbCBlbmdpbmVCb290cyBmb3IgcmVtb3RlIGVuZ2luZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfaW50IFxmQnNubXBfc2Vzc2lvbjo6ZW5naW5lVGltZVxmUCIKLS5QUAotaW5pdGlhbCBlbmdpbmVUaW1lIGZvciByZW1vdGUgZW5naW5lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjUwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyIFxmQnNubXBfc2Vzc2lvbjo6aXNBdXRob3JpdGF0aXZlXGZQIgotLlBQCi1hcmUgd2UgdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfc2hvcnQgXGZCc25tcF9zZXNzaW9uOjpsb2NhbF9wb3J0XGZQIgotLlBQCi1NeSBVRFAgcG9ydCBudW1iZXIsIDAgZm9yIGRlZmF1bHQsIHBpY2tlZCByYW5kb21seS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3Nlc3Npb246OmxvY2FsbmFtZVxmUCIKLS5QUAotTXkgRG9tYWluIG5hbWUgb3IgZG90dGVkIElQIGFkZHJlc3MsIDAgZm9yIGRlZmF1bHQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjA2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCogXGZCc25tcF9zZXNzaW9uOjpteXZvaWRcZlAiCi0uUFAKLXVzZSBhcyB5b3Ugd2FudCBkYXRhIHVzZWQgYnkgJ1NOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSycgaGFuZGxpbmcgaW4gdGhlIGFnZW50IFhYWDogb3Igc2hvdWxkIHdlIGFkZCBhIG5ldyBmaWVsZCBpbnRvIHRoaXMgc3RydWN0dXJlPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwOCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfc2Vzc2lvbjo6cGFyYW1OYW1lXGZQIgotLlBQCi10YXJnZXQgcGFyYW0gbmFtZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfc2Vzc2lvbjo6cGVlcm5hbWVcZlAiCi0uUFAKLW5hbWUgb3IgYWRkcmVzcyBvZiBkZWZhdWx0IHBlZXIgKG1heSBpbmNsdWRlIHRyYW5zcG9ydCBzcGVjaWZpZXIgYW5kL29yIHBvcnQgbnVtYmVyKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwMiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnJjdk1zZ01heFNpemVcZlAiCi0uUFAKLUxhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gcmVjZWl2ZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X3Nob3J0IFxmQnNubXBfc2Vzc2lvbjo6cmVtb3RlX3BvcnRcZlAiCi0uUFAKLVVEUCBwb3J0IG51bWJlciBvZiBwZWVyLiAoTk8gTE9OR0VSIFVTRUQgLSBVU0UgcGVlcm5hbWUgSU5TVEVBRCkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9zZXNzaW9uOjpyZXRyaWVzXGZQIgotLlBQCi1OdW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgdGltZW91dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9zZXNzaW9uOjpzX2Vycm5vXGZQIgotLlBQCi1jb3B5IG9mIHN5c3RlbSBlcnJubyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyMCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3Nlc3Npb246OnNfc25tcF9lcnJub1xmUCIKLS5QUAotY29weSBvZiBsaWJyYXJ5IGVycm5vIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjIyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoS2V5XGZQW1VTTV9BVVRIX0tVX0xFTl0iCi0uUFAKLUt1IGZvciBhdXRoIHByb3RvY29sIFhYWC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjkgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhLZXlMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBLdSBmb3IgYXV0aCBwcm90b2NvbC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzEgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoTG9jYWxLZXlcZlAiCi0uUFAKLUt1bCBmb3IgYXV0aCBwcm90b2NvbC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhMb2NhbEtleUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIEt1bCBmb3IgYXV0aCBwcm90b2NvbCBYWFguIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAib2lkKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aFByb3RvXGZQIgotLlBQCi1hdXRoIHByb3RvY29sIG9pZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aFByb3RvTGVuXGZQIgotLlBQCi1MZW5ndGggb2YgYXV0aCBwcm90b2NvbCBvaWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjY3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5RW5naW5lSURcZlAiCi0uUFAKLWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlFbmdpbmVJRExlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5SW5mb1xmUCIKLS5QUAotc2VjdXJpdHkgXGZCbW9kdWxlXGZQIHNwZWNpZmljIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzAwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlMZXZlbFxmUCIKLS5QUAotbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5MyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5TW9kZWxcZlAiCi0uUFAKLXNubXAgc2VjdXJpdHkgbW9kZWwsIHYxLCB2MmMsIHVzbSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5MSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlOYW1lXGZQIgotLlBQCi1vbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eU5hbWVMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBzZWN1cml0eU5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjYyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2S2V5XGZQW1VTTV9QUklWX0tVX0xFTl0iCi0uUFAKLUt1IGZvciBwcml2YWN5IHByb3RvY29sIFhYWC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZLZXlMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBLdSBmb3IgcHJpdiBwcm90b2NvbC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2TG9jYWxLZXlcZlAiCi0uUFAKLUt1bCBmb3IgcHJpdiBwcm90b2NvbC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZMb2NhbEtleUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIEt1bCBmb3IgcHJpdiBwcm90b2NvbCBYWFguIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAib2lkKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdlByb3RvXGZQIgotLlBQCi1wcml2IHByb3RvY29sIG9pZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdlByb3RvTGVuXGZQIgotLlBQCi1MZW5ndGggb2YgcHJpdiBwcm90b2NvbCBvaWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjgwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3Nlc3Npb246OnNlc3NpZFxmUCIKLS5QUAotU2Vzc2lvbiBpZCAtIEFnZW50WCBvbmx5LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyNCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNuZE1zZ01heFNpemVcZlAiCi0uUFAKLUxhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gc2VuZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfc2Vzc2lvbjo6dGltZW91dFxmUCIKLS5QUAotTnVtYmVyIG9mIHVTIHVudGlsIGZpcnN0IHRpbWVvdXQsIHRoZW4gZXhwb25lbnRpYWwgYmFja29mZi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfc2Vzc2lvbjo6dmVyc2lvblxmUCIKLS5QUAotc25tcCB2ZXJzaW9uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTkyIG9mIGZpbGUgc25tcF9hcGkuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMgYi9tYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjNhNDc0Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0uVEggInN0YXNoX2NhY2hlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc3Rhc2hfY2FjaGUgXC0gCi0uUFAKLUF1dG9tYXRpY2FsbHkgY2FjaGVzIGRhdGEgZm9yIGNlcnRhaW4gaGFuZGxlcnMuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zdGFzaF9jYWNoZV9pbmZvXGZQICogXGZCbmV0c25tcF9nZXRfbmV3X3N0YXNoX2NhY2hlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGltZWRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyXGZQIChpbnQgdGltZW91dCwgb2lkICpyb290b2lkLCBzaXplX3Qgcm9vdG9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluICh3aXRoIHRoZSBzcGVjaWZpZWQgdGltZW91dCBhbmQgcm9vdCBPSUQgdmFsdWVzKSwgYnV0ICpvbmx5KiBpZiB0aGF0IGhhbmRsZXIgY2hhaW4gZXhwbGljaXRseSBzdXBwb3J0cyBzdGFzaCBjYWNoZSBwcm9jZXNzaW5nLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzaW5nbGUgc3Rhc2hfY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbiAod2l0aCBhIGZpeGVkIHRpbWVvdXQpLCBidXQgKm9ubHkqIGlmIHRoYXQgaGFuZGxlciBjaGFpbiBleHBsaWNpdGx5IHN1cHBvcnRzIHN0YXNoIGNhY2hlIHByb2Nlc3NpbmcuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3N0YXNoX2NhY2hlX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHN1Yi1jaGFpbiB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gKGFyYml0cmFyeSkgaGFuZGxlciBjaGFpbiwgdXNpbmcgYSBmaXhlZCBjYWNoZSB0aW1lb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90aW1lZF9zdGFzaF9jYWNoZV9oYW5kbGVyXGZQIChpbnQgdGltZW91dCwgb2lkICpyb290b2lkLCBzaXplX3Qgcm9vdG9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHN1Yi1jaGFpbiB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gKGFyYml0cmFyeSkgaGFuZGxlciBjaGFpbiwgdXNpbmcgYSBjb25maWd1cmFibGUgY2FjaGUgdGltZW91dC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICoqIFxmQm5ldHNubXBfZXh0cmFjdF9zdGFzaF9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8pIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIGEgcG9pbnRlciB0byB0aGUgc3Rhc2hfY2FjaGUgaW5mbyBmcm9tIHRoZSByZXFpbmZvIHN0cnVjdHVyZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zdGFzaF9jYWNoZV9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJfbmV0c25tcF9zdGFzaF9jYWNoZV9sb2FkXGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSwgdm9pZCAqbWFnaWMpIgotLmJyCi0uUkkgIlxmSXVwZGF0ZXMgYSBnaXZlbiBjYWNoZSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBuZWVkcyB0byBvciBub3QuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJfbmV0c25tcF9zdGFzaF9jYWNoZV9mcmVlXGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSwgdm9pZCAqbWFnaWMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHN0YXNoX2NhY2hlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1BdXRvbWF0aWNhbGx5IGNhY2hlcyBkYXRhIGZvciBjZXJ0YWluIGhhbmRsZXJzLiAKLQotVGhpcyBoYW5kbGVyIGNhY2hlcyBkYXRhIGluIGFuIG9wdGltaXplZCB3YXkgd2hpY2ggbWF5IGFsbGV2aWF0ZSB0aGUgbmVlZCBmb3IgdGhlIGxvd2VyIGxldmVsIGhhbmRsZXJzIHRvIHBlcmZvcm0gYXMgbXVjaCBvcHRpbWl6YXRpb24uIFNwZWNpZmljYWxseSwgc29tZXdoZXJlIGluIHRoZSBsb3dlciBsZXZlbCBoYW5kbGVycyBtdXN0IGJlIGEgaGFuZGxlciB0aGF0IHN1cHBvcnRzIHRoZSBNT0RFX0dFVF9TVEFTSCBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyIHN1cHBvcnRzIHRoaXMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgX25ldHNubXBfc3Rhc2hfY2FjaGVfbG9hZCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlLCB2b2lkICogbWFnaWMpIgotLlBQCi11cGRhdGVzIGEgZ2l2ZW4gY2FjaGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgbmVlZHMgdG8gb3Igbm90LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NSBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAqKiBuZXRzbm1wX2V4dHJhY3Rfc3Rhc2hfY2FjaGUgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbykiCi0uUFAKLWV4dHJhY3RzIGEgcG9pbnRlciB0byB0aGUgc3Rhc2hfY2FjaGUgaW5mbyBmcm9tIHRoZSByZXFpbmZvIHN0cnVjdHVyZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTMgb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgc2luZ2xlIHN0YXNoX2NhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4gKHdpdGggYSBmaXhlZCB0aW1lb3V0KSwgYnV0ICpvbmx5KiBpZiB0aGF0IGhhbmRsZXIgY2hhaW4gZXhwbGljaXRseSBzdXBwb3J0cyBzdGFzaCBjYWNoZSBwcm9jZXNzaW5nLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc5IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfc3Rhc2hfY2FjaGVfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHN1Yi1jaGFpbiB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gKGFyYml0cmFyeSkgaGFuZGxlciBjaGFpbiwgdXNpbmcgYSBmaXhlZCBjYWNoZSB0aW1lb3V0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg4IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGltZWRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyIChpbnQgdGltZW91dCwgb2lkICogcm9vdG9pZCwgc2l6ZV90IHJvb3RvaWRfbGVuKSIKLS5QUAotcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4gKHdpdGggdGhlIHNwZWNpZmllZCB0aW1lb3V0IGFuZCByb290IE9JRCB2YWx1ZXMpLCBidXQgKm9ubHkqIGlmIHRoYXQgaGFuZGxlciBjaGFpbiBleHBsaWNpdGx5IHN1cHBvcnRzIHN0YXNoIGNhY2hlIHByb2Nlc3NpbmcuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDQgb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90aW1lZF9zdGFzaF9jYWNoZV9oYW5kbGVyIChpbnQgdGltZW91dCwgb2lkICogcm9vdG9pZCwgc2l6ZV90IHJvb3RvaWRfbGVuKSIKLS5QUAotcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgc3ViLWNoYWluIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiAoYXJiaXRyYXJ5KSBoYW5kbGVyIGNoYWluLCB1c2luZyBhIGNvbmZpZ3VyYWJsZSBjYWNoZSB0aW1lb3V0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMSBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBzdGFzaF9jYWNoZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzOCBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zIGIvbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzgyMjBlLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS5USCAic3Rhc2hfdG9fbmV4dCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXN0YXNoX3RvX25leHQgXC0gCi0uUFAKLUNvbnZlcnQgR0VUX1NUQVNIIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3N0YXNoX3RvX25leHRfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHN0YXNoX3RvX25leHQgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zdGFzaF90b19uZXh0X2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Db252ZXJ0IEdFVF9TVEFTSCByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiAKLQotVGhlIHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIGNvbnZlcnQgYSBHRVRfU1RBU0ggYXV0by1jYWNoZSByZXF1ZXN0IHRvIGEgc2VyaWVzIG9mIEdFVE5FWFQgcmVxdWVzdHMuIEl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIGEgaGFuZGxlciBjaGFpbiB3aGVyZSB0aGUgbG93ZXItbGV2ZWwgaGFuZGxlcnMgZG9uJ3QgcHJvY2VzcyBzdWNoIHJlcXVlc3RzIHRoZW1zZWx2ZXMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9zdGFzaF90b19uZXh0X2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgc3Rhc2hfdG9fbmV4dCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4IG9mIGZpbGUgc3Rhc2hfdG9fbmV4dC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlLjMgYi9tYW4vbmV0c25tcF90YWJsZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWU1NTE1Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLlRIICJ0YWJsZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlIFwtIAotLlBQCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2FycmF5XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBzdG9yZWQgbG9jYWxseS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9jb250YWluZXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIGZvdW5kIHZpYSBhIG5ldHNubXBfY29udGFpbmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2RhdGFcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJnZW5lcmljX3RhYmxlX0FQSVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJR2VuZXJhbCByZXF1aXJlbWVudHMgZm9yIGEgdGFibGUgaGVscGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2l0ZXJhdG9yXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklUaGUgdGFibGUgaXRlcmF0b3IgaGVscGVyIGlzIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRoZSB0YXNrIG9mIHdyaXRpbmcgYSB0YWJsZSBoYW5kbGVyIGZvciB0aGUgbmV0LXNubXAgYWdlbnQgd2hlbiB0aGUgZGF0YSBiZWluZyBhY2Nlc3NlZCBpcyBub3QgaW4gYW4gb2lkIHNvcnRlZCBmb3JtIGFuZCBtdXN0IGJlIGFjY2Vzc2VkIGV4dGVybmFsbHkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfcm93XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgc2hhcmVkIGFjcm9zcyB0d28gb3IgbW9yZSBzdWJhZ2VudHMsIG9yIG90aGVyd2lzZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcm93IHNsaWNlcy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0ZGF0YVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuIFxmUCIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNQQVJTRV9UQUJMRV9IQU5ETEVSX05BTUVcZlAgICAnc3BhcnNlX3RhYmxlJyIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlcSkiCi0uYnIKLS5SSSAiXGZJR2l2ZW4gYSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlcSkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBpbnNlcnRzIGl0IGludG8gdGhlIHJlcXVlc3QgY2hhaW4gYW5kIHRoZW4gY2FsbHMgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgdG8gcmVnaXN0ZXIgdGhlIHRhYmxlIGludG8gdGhlIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm9cZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklFeHRyYWN0cyB0aGUgcHJvY2Vzc2VkIHRhYmxlIGluZm9ybWF0aW9uIGZyb20gYSBnaXZlbiByZXF1ZXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiBcZkJuZXRzbm1wX2ZpbmRfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSByZWdpc3RlcmVkIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0IGZyb20gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJ0YWJsZV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJaW1wbGVtZW50cyB0aGUgdGFibGUgaGVscGVyIGhhbmRsZXIgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9zcGFyc2VfdGFibGVfaGFuZGxlcl9nZXRcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZSBzcGFyc2UgdGFibGUgaGFuZGxlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NwYXJzZV90YWJsZV9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVxKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgdGFibGUgaGFuZGxlciBnaXZlbiB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCB0byByZWdpc3RlciB0aGUgdGFibGUgaW50byB0aGUgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfYnVpbGRfcmVzdWx0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRhYmxlX2luZm8sIHVfY2hhciB0eXBlLCB1X2NoYXIgKnJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW4pIgotLmJyCi0uUkkgIlxmSUJ1aWxkcyB0aGUgcmVzdWx0IHRvIGJlIHJldHVybmVkIHRvIHRoZSBhZ2VudCBnaXZlbiB0aGUgdGFibGUgaW5mb3JtYXRpb24uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfYnVpbGRfb2lkXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSWdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUgaW5mbyBvYmplY3QgaXQgYnVpbGRzIHRoZSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgb2lkIGZyb20gdGhlIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvIG9iamVjdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9idWlsZF9vaWRfZnJvbV9pbmRleFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklnaXZlbiBhIHJlZ2lzdHJhdGlvbiBpbmZvIG9iamVjdCwgYSByZXF1ZXN0IG9iamVjdCBhbmQgdGhlIHRhYmxlIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdGFibGVfaW5mbyBvYmplY3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdXBkYXRlX3ZhcmlhYmxlX2xpc3RfZnJvbV9pbmRleFxmUCAoXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRyaSkiCi0uYnIKLS5SSSAiXGZJcGFyc2VzIGFuIE9JRCBpbnRvIHRhYmxlIGluZGV4c2VzIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdXBkYXRlX2luZGV4ZXNfZnJvbV92YXJpYWJsZV9saXN0XGZQIChcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdHJpKSIKLS5icgotLlJJICJcZklidWlsZHMgYW4gb2lkIGdpdmVuIGEgc2V0IG9mIGluZGV4ZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfZ2V0bmV4dF9yZXBseVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIG9pZCAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpuZXd2YXIsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKm91dHZhcikiCi0uYnIKLS5SSSAiXGZJY2hlY2tzIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGFnYWluc3QgdGhlIGN1cnJlbnQgZGF0YSBiZWluZyBwYXNzZWQgaW4gaWYgaXRzIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdCBvaWQgYnV0IGxlc3MgdGhhbiB0aGUgY3VycmVudCB2YWxpZCByZXR1cm4sIHNldCB0aGUgY3VycmVudCB2YWxpZCByZXR1cm4gdG8gdGhlIG5ldyB2YWx1ZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZS4gCi0KLVRoaXMgaGFuZGxlciBoZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgYnkgZG9pbmcgc29tZSBvZiB0aGUgcHJvY2Vzc2luZyBmb3IgeW91LgotLlBQCi1UaGlzIGhhbmRsZXIgdHJ1bHkgc2hvd3MgdGhlIHBvd2VyIG9mIHRoZSBuZXcgaGFuZGxlciBtZWNoYW5pc20uIEJ5IGNyZWF0aW5nIGEgdGFibGUgaGFuZGxlciBhbmQgaW5qZWN0aW5nIGl0IGludG8geW91ciBjYWxsaW5nIGNoYWluLCBvciBieSB1c2luZyB0aGUgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZSgpXGZQIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHlvdXIgdGFibGUsIHlvdSBnZXQgYWNjZXNzIHRvIHNvbWUgcHJlLXBhcnNlZCBpbmZvcm1hdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgdGFibGUgaGFuZGxlciBwdWxscyBvdXQgdGhlIGNvbHVtbiBudW1iZXIgYW5kIGluZGV4ZXMgZnJvbSB0aGUgcmVxdWVzdCBvaWQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGUgY29tcGxleCB3b3JrIHRvIGRvIHRoYXQgcGFyc2luZyB3aXRoaW4geW91ciBvd24gY29kZS4KLS5QUAotVG8gZG8gdGhpcywgdGhlIHRhYmxlIGhhbmRsZXIgbmVlZHMgdG8ga25vdyB1cCBmcm9udCBob3cgeW91ciB0YWJsZSBpcyBzdHJ1Y3R1cmVkLiBUbyBpbmZvcm0gaXQgYWJvdXQgdGhpcywgeW91IGZpbGwgaW4gYSB0YWJsZV9yZWdpc3RlcmF0aW9uX2luZm8gc3RydWN0dXJlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB0YWJsZSBoYW5kbGVyLiBJdCBjb250YWlucyB0aGUgYXNuIGluZGV4IHR5cGVzIGZvciB0aGUgdGFibGUgYXMgd2VsbCBhcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBjb2x1bW4gdGhhdCBzaG91bGQgYmUgdXNlZC4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2NoZWNrX2dldG5leHRfcmVwbHkgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgb2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogbmV3dmFyLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiogb3V0dmFyKSIKLS5QUAotY2hlY2tzIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGFnYWluc3QgdGhlIGN1cnJlbnQgZGF0YSBiZWluZyBwYXNzZWQgaW4gaWYgaXRzIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdCBvaWQgYnV0IGxlc3MgdGhhbiB0aGUgY3VycmVudCB2YWxpZCByZXR1cm4sIHNldCB0aGUgY3VycmVudCB2YWxpZCByZXR1cm4gdG8gdGhlIG5ldyB2YWx1ZS4gcmV0dXJucyAxIGlmIG91dHZhciB3YXMgcmVwbGFjZWQgd2l0aCB0aGUgb2lkIGZyb20gbmV3dmFyIChzdWNjZXNzKS4gcmV0dXJucyAwIGlmIG5vdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4ODEgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCogbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8gKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLUV4dHJhY3RzIHRoZSBwcm9jZXNzZWQgdGFibGUgaW5mb3JtYXRpb24gZnJvbSBhIGdpdmVuIHJlcXVlc3QuIENhbGwgdGhpcyBmcm9tIHN1YmhhbmRsZXJzIG9uIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBwcm9jZXNzZWQgbmV0c25tcF9yZXF1ZXN0X2luZm8gaW5mb3JtYXRpb24uIFRoZSByZXN1bHRpbmcgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIGluZGV4IHZhbHVlcyBhbmQgdGhlIGNvbHVtbiBudW1iZXIuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCBwb3B1bGF0ZWQgbmV0c25tcCByZXF1ZXN0IHN0cnVjdHVyZQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotcG9wdWxhdGVkIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNSBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAqIG5ldHNubXBfZmluZF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1leHRyYWN0cyB0aGUgcmVnaXN0ZXJlZCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCBmcm9tIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzQgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyIChcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFicmVxKSIKLS5QUAotR2l2ZW4gYSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIuIFlvdSBjYW4gdXNlIHRoaXMgdGFibGUgaGFuZGxlciBieSBpbmplY3RpbmcgaXQgaW50byBhIGNhbGxpbmcgY2hhaW4uIFdoZW4gdGhlIGhhbmRsZXIgZ2V0cyBjYWxsZWQsIGl0J2xsIGRvIHByb2Nlc3NpbmcgYW5kIHN0b3JlIGl0J3MgaW5mb3JtYXRpb24gaW50byB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEgc3RydWN0dXJlLgotLlBQCi1UaGUgdGFibGUgaGVscGVyIGhhbmRsZXIgcHVsbHMgb3V0IHRoZSBjb2x1bW4gbnVtYmVyIGFuZCBpbmRleGVzIGZyb20gdGhlIHJlcXVlc3Qgb2lkIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZG8gdGhlIGNvbXBsZXggd29yayBvZiBwYXJzaW5nIHdpdGhpbiB5b3VyIG93biBjb2RlLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXRhYnJlcVxmUCBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHN0cnVjdC4gVGhlIHRhYmxlIGhhbmRsZXIgbmVlZHMgdG8ga25vdyB1cCBmcm9udCBob3cgeW91ciB0YWJsZSBpcyBzdHJ1Y3R1cmVkLiBBIG5ldHNubXBfdGFibGVfcmVnaXN0ZXJhdGlvbl9pbmZvIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgdGFibGUgaGFuZGxlciBzaG91bGQgY29udGFpbiB0aGUgYXNuIGluZGV4IHR5cGVzIGZvciB0aGUgdGFibGUgYXMgd2VsbCBhcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBjb2x1bW4gdGhhdCBzaG91bGQgYmUgdXNlZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIGhhbmRsZXIncyBuYW1lIGFuZCB0aGUgYWNjZXNzIG1ldGhvZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFicmVxKSIKLS5QUAotY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBpbnNlcnRzIGl0IGludG8gdGhlIHJlcXVlc3QgY2hhaW4gYW5kIHRoZW4gY2FsbHMgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgdG8gcmVnaXN0ZXIgdGhlIHRhYmxlIGludG8gdGhlIGFnZW50LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwOCBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfc3BhcnNlX3RhYmxlX2hhbmRsZXJfZ2V0ICh2b2lkKSIKLS5QUAotY3JlYXRlIHNwYXJzZSB0YWJsZSBoYW5kbGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzIyIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfc3BhcnNlX3RhYmxlX3JlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYnJlcSkiCi0uUFAKLWNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyIGdpdmVuIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgaW5zZXJ0cyBpdCBpbnRvIHRoZSByZXF1ZXN0IGNoYWluIGFuZCB0aGVuIGNhbGxzIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSBpbnRvIHRoZSBhZ2VudC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MzMgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9idWlsZF9vaWQgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLWdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUgaW5mbyBvYmplY3QgaXQgYnVpbGRzIHRoZSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgb2lkIGZyb20gdGhlIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvIG9iamVjdC4gSW5kZXggdmFsdWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGFibGVfaW5mbyB2YXJiaW5kcy4gCi0uUFAKLS5FbnRyeQotLlBQCi0uY29sdW1uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzg0IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfYnVpbGRfb2lkX2Zyb21faW5kZXggKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLWdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUgaW5mbyBvYmplY3QgaXQgYnVpbGRzIHRoZSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgb2lkIGZyb20gdGhlIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvIG9iamVjdC4gSW5kZXggdmFsdWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGFibGVfaW5mbyBpbmRleCBvaWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODIxIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfYnVpbGRfcmVzdWx0IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRhYmxlX2luZm8sIHVfY2hhciB0eXBlLCB1X2NoYXIgKiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuKSIKLS5QUAotQnVpbGRzIHRoZSByZXN1bHQgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGFnZW50IGdpdmVuIHRoZSB0YWJsZSBpbmZvcm1hdGlvbi4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHJlc3VsdHMgZnJvbSBsb3dlbCBsZXZlbCBoYW5kbGVycyB0byB0aGUgYWdlbnQuIEl0IHRha2VzIGNhcmUgb2YgYnVpbGRpbmcgdGhlIHByb3BlciByZXN1bHRpbmcgb2lkIChjb250YWluaW5nIHByb3BlciBpbmRleGluZykgYW5kIGluc2VydHMgdGhlIHJlc3VsdCB2YWx1ZSBpbnRvIHRoZSByZXR1cm5pbmcgdmFyYmluZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NTEgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF91cGRhdGVfaW5kZXhlc19mcm9tX3ZhcmlhYmxlX2xpc3QgKFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdHJpKSIKLS5QUAotYnVpbGRzIGFuIG9pZCBnaXZlbiBhIHNldCBvZiBpbmRleGVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg2MyBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3VwZGF0ZV92YXJpYWJsZV9saXN0X2Zyb21faW5kZXggKFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdHJpKSIKLS5QUAotcGFyc2VzIGFuIE9JRCBpbnRvIHRhYmxlIGluZGV4c2VzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQ3IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IHRhYmxlX2hlbHBlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWltcGxlbWVudHMgdGhlIHRhYmxlIGhlbHBlciBoYW5kbGVyIAotLlBQCi1YWFgtcmtzOiBtZW1vcnkgbGVhay4gYWRkIGNsZWFudXAgaGFuZGxlcj8KLS5QUAotbm9uZSBhdmFpbGFibGUKLS5QUAotZ290IG9uZSBvawotLlBQCi1mb3IgbG9vcCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0MiBvZiBmaWxlIHRhYmxlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZWI0MDQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS5USCAidGFibGVfYXJyYXkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9hcnJheSBcLSAKLS5QUAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgc3RvcmVkIGxvY2FsbHkuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfY29udGFpbmVyX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZWcsIFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzXGZQICpjYiwgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmNvbnRhaW5lciwgaW50IGdyb3VwX3Jvd3MpIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVyIHNwZWNpZmllZCBjYWxsYmFja3MgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUvb2lkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2FycmF5X3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZWcsIFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzXGZQICpjYiwgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmNvbnRhaW5lciwgaW50IGdyb3VwX3Jvd3MpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2ZpbmRfdGFibGVfYXJyYXlfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZmluZCB0aGUgaGFuZGxlciBmb3IgdGhlIHRhYmxlX2FycmF5IGhlbHBlci4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF9hcnJheV9jb250ZXh0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZmluZCB0aGUgY29udGV4dCBkYXRhIHVzZWQgYnkgdGhlIHRhYmxlX2FycmF5IGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NoZWNrX3Jvd19zdGF0dXNcZlAgKFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzXGZQICpjYiwgXGZCbmV0c25tcF9yZXF1ZXN0X2dyb3VwXGZQICphZywgbG9uZyAqcnNfbmV3LCBsb25nICpyc19vbGQpIgotLmJyCi0uUkkgIlxmSXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyB0cmFuc2l0aW9ucy4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIHN0b3JlZCBsb2NhbGx5LiAKLQotVGhlIGRhdGEgaXMgc3RvcmVkIGluIGEgc29ydGVkIGFycmF5LCB1c2luZyBhIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cHMuCi0uUFAKLVRoZSB0YWJsZV9hcnJheSBoYW5kbGVyIGlzIHVzZWQgKGF1dG9tYXRpY2FsbHkpIGluIGNvbmp1bnRpb24gd2l0aCB0aGUgXGZCdGFibGVcZlAgaGFuZGxlci4gSXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgbWliMmMgY29uZmlndXJhdGlvbiBmaWxlIG1pYjJjLmFycmF5LXVzZXIuY29uZi4KLS5QUAotVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IG1pYjJjIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIGNvbnRyb2wgb2YgdGhlIGRhdGEgZm9yIGVhY2ggcm93LiBJZiB5b3UgY2Fubm90IGNvbnRyb2wgd2hlbiByb3dzIGFyZSBhZGRlZCBhbmQgZGVsZXRlZCAob3IgYXQgbGVhc3QgYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB0byByb3cgZGF0YSksIHRoZW4gdGhpcyBoYW5kbGVyIGlzIHByb2JhYmx5IG5vdCBmb3IgeW91LgotLlBQCi1UaGlzIGhhbmRsZXIgbWFrZXMgdXNlIG9mIGNhbGxiYWNrcyAoZnVuY3Rpb24gcG9pbnRlcnMpIHRvIGhhbmRsZSB2YXJpb3VzIHRhc2tzLiBDb2RlIGlzIGdlbmVyYXRlZCBmb3IgZWFjaCBjYWxsYmFjaywgYnV0IHdpbGwgbmVlZCB0byBiZSByZXZpZXdlZCBhbmQgZmx1c2hlZCBvdXQgYnkgdGhlIHVzZXIuCi0uUFAKLU5PVEUgTk9URSBOT1RFOiBPbmNlIHBsYWNlIHdoZXJlIG1pYjJjIGlzIHNvbWV3aGF0IGxhY2tpbmcgaXMgd2l0aCByZWdhcmRzIHRvIHRhYmxlcyB3aXRoIGV4dGVybmFsIGluZGljZXMuIElmIHlvdXIgdGFibGUgbWFrZXMgdXNlIG9mIG9uZSBvciBtb3JlIGV4dGVybmFsIGluZGljZXMsIHBsZWFzZSByZXZpZXcgdGhlIGdlbmVyYXRlZCBjb2RlIHZlcnkgY2FyZWZ1bGx5IGZvciBjb21tZW50cyByZWdhcmRpbmcgZXh0ZXJuYWwgaW5kaWNlcy4KLS5QUAotTk9URSBOT1RFIE5PVEU6IFRoaXMgaGVscGVyLCB0aGUgQVBJIGFuZCBjYWxsYmFja3MgYXJlIHN0aWxsIGJlaW5nIHRlc3RlZCBhbmQgbWF5IGNoYW5nZS4KLS5QUAotVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgZGVmaW5lIGEgc3RydWN0dXJlIGZvciBzdG9yYWdlIG9mIHRhYmxlIHJlbGF0ZWQgZGF0YS4gVGhpcyBzdHJ1Y3R1cmUgbXVzdCBiZSB1c2VkLCBhcyBpdCBjb250YWlucyB0aGUgaW5kZXggT0lEIGZvciB0aGUgcm93LCB3aGljaCBpcyB1c2VkIGZvciBrZWVwaW5nIHRoZSBhcnJheSBzb3J0ZWQuIFlvdSBjYW4gYWRkIGFkZGl0aW9uIGZpZWxkcyBvciBkYXRhIHRvIHRoZSBzdHJ1Y3R1cmUgZm9yIHlvdXIgb3duIHVzZS4KLS5QUAotVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYWxzbyBoYXZlIGNvZGUgdG8gaGFuZGxlIFNOTVAtU0VUIHByb2Nlc3NpbmcuIElmIHlvdXIgdGFibGUgZG9lcyBub3Qgc3VwcG9ydCBhbnkgU0VUIG9wZXJhdGlvbnMsIHNpbXBseSBjb21tZW50IG91dCB0aGUgI2RlZmluZSA8UFJFRklYPl9TRVRfSEFORExJTkcgKHdoZXJlIDxQUkVGSVg+IGlzIHlvdXIgdGFibGUgbmFtZSkgaW4gdGhlIGhlYWRlciBmaWxlLgotLlBQCi1TRVQgcHJvY2Vzc2luZyBtb2RpZmllcyB0aGUgcm93IGluLXBsYWNlLiBUaGUgZHVwbGljYXRlX3JvdyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB0byBzYXZlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgcm93LiBJbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIGJlZm9yZSB0aGUgY29tbWl0ZSBwaGFzZSwgdGhlIHJvd19jb3B5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvdyBmcm9tIHRoZSBjb3B5LgotLlBQCi1Db2RlIHdpbGwgYmUgZ2VuZXJhdGVkIHRvIGhhbmRsZSByb3cgY3JlYXRpb24uIFRoaXMgY29kZSBtYXkgYmUgZGlzYWJsZWQgYnkgY29tbWVudGluZyBvdXQgdGhlICNkZWZpbmUgPFBSRUZJWD5fUk9XX0NSRUFUSU9OIGluIHRoZSBoZWFkZXIgZmlsZS4KLS5QUAotSWYgeW91ciB0YWJsZSBjb250YWlucyBhIFJvd1N0YXR1cyBvYmplY3QsIGJ5IGRlZmF1bHQgdGhlIGNvZGUgd2lsbCBub3QgYWxsb3cgb2JqZWN0IGluIGFuIGFjdGl2ZSByb3cgdG8gYmUgbW9kaWZpZWQuIFRvIGFsbG93IGFjdGl2ZSByb3dzIHRvIGJlIG1vZGlmaWVkLCByZW1vdmUgdGhlIGNvbW1lbnQgYmxvY2sgYXJvdW5kIHRoZSAjZGVmaW5lIDxQUkVGSVg+X0NBTl9NT0RJRllfQUNUSVZFX1JPVyBpbiB0aGUgaGVhZGVyIGZpbGUuCi0uUFAKLUNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gbWFpbnRhaW4gYSBzZWNvbmRhcnkgaW5kZXggZm9yIGFsbCByb3dzLCBzdG9yZWQgaW4gYSBiaW5hcnkgXGZCdHJlZVxmUC4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZmluZGluZyByb3dzIGJ5IGEga2V5IG90aGVyIHRoYW4gdGhlIE9JRCBpbmRleC4gQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9ucyBmb3IgbWFpbnRhaW5pbmcgdGhpcyBcZkJ0cmVlXGZQIHdpbGwgYmUgYmFzZWQgb24gYSBjaGFyYWN0ZXIgc3RyaW5nLiBOT1RFOiB0aGlzIHdpbGwgbGlrZWx5IGJlIG1hZGUgaW50byBhIG1vcmUgZ2VuZXJpYyBtZWNoYW5pc20sIHVzaW5nIG5ldyBjYWxsYmFjayBtZXRob2RzLCBpbiB0aGUgbmVhciBmdXR1cmUuCi0uUFAKLVRoZSBnZW5lcmF0ZWQgY29kZSBjb250YWlucyBtYW55IFRPRE8gY29tbWVudHMuIE1ha2Ugc3VyZSB5b3UgY2hlY2sgZWFjaCBvbmUgdG8gc2VlIGlmIGl0IGFwcGxpZXMgdG8geW91ciBjb2RlLiBFeGFtcGxlcyBpbmNsdWRlIGNoZWNraW5nIGluZGljZXMgZm9yIHN5bnRheCAocmFuZ2VzLCBldGMpLCBpbml0aWFsaXppbmcgZGVmYXVsdCB2YWx1ZXMgaW4gbmV3bHkgY3JlYXRlZCByb3dzLCBjaGVja2luZyBmb3Igcm93IGFjdGl2YXRpb24gYW5kIGRlYWN0aXZhdGlvbiByZXF1aXJlbWVudHMsIGV0Yy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQKiBuZXRzbm1wX2V4dHJhY3RfYXJyYXlfY29udGV4dCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZmluZCB0aGUgY29udGV4dCBkYXRhIHVzZWQgYnkgdGhlIHRhYmxlX2FycmF5IGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyOSBvZiBmaWxlIHRhYmxlX2FycmF5LmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWZpbmQgdGhlIGhhbmRsZXIgZm9yIHRoZSB0YWJsZV9hcnJheSBoZWxwZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjEyIG9mIGZpbGUgdGFibGVfYXJyYXkuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfYXJyYXlfY2hlY2tfcm93X3N0YXR1cyAoXGZCbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3NcZlAgKiBjYiwgXGZCbmV0c25tcF9yZXF1ZXN0X2dyb3VwXGZQICogYWcsIGxvbmcgKiByc19uZXcsIGxvbmcgKiByc19vbGQpIgotLlBQCi10aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB2YWxpZGF0ZSBSb3dTdGF0dXMgdHJhbnNpdGlvbnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM2IG9mIGZpbGUgdGFibGVfYXJyYXkuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfY29udGFpbmVyX3JlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYnJlZywgXGZCbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3NcZlAgKiBjYiwgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBjb250YWluZXIsIGludCBncm91cF9yb3dzKSIKLS5QUAotcmVnaXN0ZXIgc3BlY2lmaWVkIGNhbGxiYWNrcyBmb3IgdGhlIHNwZWNpZmllZCB0YWJsZS9vaWQuIElmIHRoZSBncm91cF9yb3dzIHBhcmFtZXRlciBpcyBzZXQsIHRoZSByb3cgcmVsYXRlZCBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCB1bmlxdWUgcm93IGluZGV4LiBPdGhlcndpc2UsIGVhY2ggY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlLCBmb3IgYWxsIG9iamVjdHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQ5IG9mIGZpbGUgdGFibGVfYXJyYXkuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg3MjU4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS5USCAidGFibGVfY29udGFpbmVyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfY29udGFpbmVyIFwtIAotLlBQCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBmb3VuZCB2aWEgYSBuZXRzbm1wX2NvbnRhaW5lci4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJjb250YWluZXJfdGFibGVfZGF0YVxmUCAqIFxmQm5ldHNubXBfdGNvbnRhaW5lcl9jcmVhdGVfdGFibGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjb250YWluZXIsIGxvbmcgZmxhZ3MpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90Y29udGFpbmVyX2RlbGV0ZV90YWJsZVxmUCAoXGZCY29udGFpbmVyX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90Y29udGFpbmVyX2FkZF9yb3dcZlAgKFxmQmNvbnRhaW5lcl90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF9pbmRleFxmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2luZGV4XGZQICogXGZCbmV0c25tcF90Y29udGFpbmVyX3JlbW92ZV9yb3dcZlAgKFxmQmNvbnRhaW5lcl90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF9pbmRleFxmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90Y29udGFpbmVyX3JlcGxhY2Vfcm93XGZQIChcZkJjb250YWluZXJfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfaW5kZXhcZlAgKm9sZF9yb3csIFxmQm5ldHNubXBfaW5kZXhcZlAgKm5ld19yb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldFxmUCAoXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVnLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqY29udGFpbmVyLCBjaGFyIGtleV90eXBlKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY29udGFpbmVyX3RhYmxlX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZWcsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjb250YWluZXIsIGNoYXIga2V5X3R5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQICogXGZCbmV0c25tcF9jb250YWluZXJfdGFibGVfY29udGFpbmVyX2V4dHJhY3RcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklyZXRyaWV2ZSB0aGUgY29udGFpbmVyIHVzZWQgYnkgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBcZkJuZXRzbm1wX2luZGV4XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBpbnRvIGEgcmVxdWVzdCBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9pbmRleFxmUCAqIFxmQm5ldHNubXBfdGFibGVfaW5kZXhfZmluZF9uZXh0X3Jvd1xmUCAoXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmMsIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0YmxyZXEpIgotLmJyCi0uUkkgIlxmSWRlcHJlY2F0ZWQsIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IG9ubHkgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIGZvdW5kIHZpYSBhIG5ldHNubXBfY29udGFpbmVyLiAKLQotVGhlIHRhYmxlX2NvbnRhaW5lciBoYW5kbGVyIGlzIHVzZWQgKGF1dG9tYXRpY2FsbHkpIGluIGNvbmp1bnRpb24gd2l0aCB0aGUgXGZCdGFibGVcZlAgaGFuZGxlci4KLS5QUAotVGhpcyBoYW5kbGVyIHdpbGwgdXNlIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgXGZCdGFibGVcZlAgaGFuZGxlciB0byBmaW5kIHRoZSByb3cgbmVlZGVkIHRvIHByb2Nlc3MgdGhlIHJlcXVlc3QuCi0uUFAKLVRoZSBjb250YWluZXIgbXVzdCB1c2Ugb25lIG9mIDMga2V5IHR5cGVzLiBJdCBpcyB0aGUgc3ViLWhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGFpbmVyIGFuZCBrZXkgdHlwZSBtYXRjaCAodW5sZXNzIG5laXRoZXIgaXMgc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGEgZGVmYXVsdCB3aWxsIGJlIHVzZWQuKQotLlBQCi1UaGUgY3VycmVudCBrZXkgdHlwZXMgYXJlOgotLlBQCi1UQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVggVGhlIGNvbnRhaW5lciBzaG91bGQgZG8gY29tcGFyaXNvbnMgYmFzZWQgb24gYSBrZXkgdGhhdCBtYXkgYmUgY2FzdCB0byBhIG5ldHNubXAgaW5kZXggKG5ldHNubXBfaW5kZXggKikuIFRoaXMgaW5kZXggY29udGFpbnMgb25seSB0aGUgaW5kZXggcG9ydGlvbiBvZiB0aGUgT0lELCBub3QgdGhlIGVudGlyZSBPSUQuCi0uUFAKLVRBQkxFX0NPTlRBSU5FUl9LRVlfVkFSQklORF9JTkRFWCBUaGUgY29udGFpbmVyIHNob3VsZCBkbyBjb21wYXJpc29ucyBiYXNlZCBvbiBhIGtleSB0aGF0IG1heSBiZSBjYXN0IHRvIGEgbmV0c25tcCBcZkJ2YXJpYWJsZVxmUCBsaXN0IChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKikuIFRoaXMgXGZCdmFyaWFibGVcZlAgbGlzdCB3aWxsIGNvbnRhaW4gb25lIHZhcmJpbmQgZm9yIGVhY2ggaW5kZXggY29tcG9uZW50LgotLlBQCi1UQUJMRV9DT05UQUlORVJfS0VZX1ZBUkJJTkRfUkFXIChOT1RFOiB1bmltcGxlbWVudGVkKSBXaGlsZSBub3QgeWV0IGltcGxlbWVudGVkLCBmdXR1cmUgcGxhbnMgaW5jbHVkZSBwYXNzaW5nIHRoZSByZXF1ZXN0IHZhcmJpbmQgd2l0aCB0aGUgZnVsbCBPSUQgdG8gYSBjb250YWluZXIuCi0uUFAKLUlmIGEga2V5IHR5cGUgaXMgbm90IHNwZWNpZmllZCBhdCByZWdpc3RyYXRpb24gdGltZSwgdGhlIGRlZmF1bHQga2V5IHR5cGUgb2YgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYIHdpbGwgYmUgdXNlZC4gSWYgYSBjb250YWluZXIgaXMgcHJvdmlkZWQsIG9yIHRoZSBoYW5kbGVyIG5hbWUgaXMgYWxpYXNlZCB0byBhIGNvbnRhaW5lciB0eXBlLCB0aGUgY29udGFpbmVyIG11c3QgdXNlIGEgbmV0c25tcCBpbmRleC4KLS5QUAotSWYgbm8gY29udGFpbmVyIGlzIHByb3ZpZGVkLCBhIGxvb2t1cCB3aWxsIGJlIG1hZGUgYmFzZWQgb24gdGhlIHN1Yi1oYW5kbGVyJ3MgbmFtZSwgb3IgaWYgdGhhdCBpc24ndCBmb3VuZCwgJ3RhYmxlX2NvbnRhaW5lcicuIFRoZSB0YWJsZV9jb250YWluZXIga2V5IHR5cGUgd2lsbCBiZSBuZXRzbm1wX2luZGV4LgotLlBQCi1UaGUgY29udGFpbmVyIG11c3QsIGF0IGEgbWluaW11bSwgaW1wbGVtZW50IGZpbmQgYW5kIGZpbmRfbmV4dC4gSWYgYSBOVUxMIGtleSBpcyBwYXNzZWQgdG8gdGhlIGNvbnRhaW5lciwgaXQgbXVzdCByZXR1cm4gdGhlIGZpcnN0IGl0ZW0sIGlmIGFueS4gQWxsIGNvbnRhaW5lcnMgcHJvdmlkZWQgYnkgbmV0LXNubXAgZnVsZmlsIHRoaXMgcmVxdWlyZW1lbnQuCi0uUFAKLVRoaXMgaGFuZGxlciB3aWxsIG9ubHkgcmVnaXN0ZXIgdG8gcHJvY2VzcyAnZGF0YSBsb29rdXAnIG1vZGVzLiBJbiB0cmFkaXRpb25hbCBuZXQtc25tcCBtb2RlcywgdGhhdCBpcyBhbnkgR0VULWxpa2UgbW9kZSAoR0VULCBHRVQtTkVYVCwgR0VULUJVTEspIG9yIHRoZSBmaXJzdCBwaGFzZSBvZiBhIFNFVCAoUkVTRVJWRTEpLiBJbiB0aGUgbmV3IGJhYnktc3RlcHMgbW9kZSwgREFUQV9MT09LVVAgaXMgaXQncyBvd24gbW9kZSwgYW5kIGlzIGEgcHJlLWN1cnNvciB0byBvdGhlciBtb2Rlcy4KLS5QUAotV2hlbiBjYWxsZWQsIHRoZSBoYW5kbGVyIHdpbGwgY2FsbCB0aGUgYXBwcm9wcmlhdGUgY29udGFpbmVyIG1ldGhvZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXkgdHlwZS4gSWYgYSByb3cgd2FzIG5vdCBmb3VuZCwgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBtb2RlLgotLlBQCi1HRVQgUHJvY2Vzc2luZyBBbiBleGFjdCBtYXRjaCBtdXN0IGJlIGZvdW5kLiBJZiBvbmUgaXMgbm90LCB0aGUgZXJyb3IgTk9TVUNISU5TVEFOQ0UgaXMgc2V0LgotLlBQCi1HRVQtTkVYVCAvIEdFVC1CVUxLIElmIG5vIHJvdyBpcyBmb3VuZCwgdGhlIGNvbHVtbiBudW1iZXIgd2lsbCBiZSBpbmNyZWFzZWQgKHVzaW5nIGFueSB2YWxpZF9jb2x1bW5zIHN0cnVjdHVyZSB0aGF0IG1heSBoYXZlIGJlZW4gcHJvdmlkZWQpLCBhbmQgdGhlIGZpcnN0IHJvdyB3aWxsIGJlIHJldHJpZXZlZC4gSWYgbm8gZmlyc3Qgcm93IGlzIGZvdW5kLCB0aGUgcHJvY2Vzc2VkIGZsYWcgd2lsbCBiZSBzZXQsIHNvIHRoYXQgdGhlIHN1Yi1oYW5kbGVyIGNhbiBza2lwIGFueSBwcm9jZXNzaW5nIHJlbGF0ZWQgdG8gdGhlIHJlcXVlc3QuIFRoZSBhZ2VudCB3aWxsIG5vdGljZSB0aGlzIHVuc2F0aXNmaWVkIHJlcXVlc3QsIGFuZCBhdHRlbXB0IHRvIHBhc3MgaXQgdG8gdGhlIG5leHQgYXBwcm9wcmlhdGUgaGFuZGxlci4KLS5QUAotU0VUIElmIHRoZSBoYW5kZXIgZGlkIG5vdCByZWdpc3RlciB3aXRoIHRoZSBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFIGZsYWcgc2V0IGluIHRoZSByZWdpc3RyYXRpb24gbW9kZXMsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGlzIGEgcm93IGNyZWF0aW9uIHJlcXVlc3QgYW5kIGEgTlVMTCByb3cgaXMgYWRkZWQgdG8gdGhlIHJlcXVlc3QncyBkYXRhIGxpc3QuIFRoZSBzdWItaGFuZGxlciBpcyByZXNwb25zYmlsZSBmb3IgZGVhbGluZyB3aXRoIGFueSByb3cgY3JlYXRpb24gY29udHJhaW50cyBhbmQgaW5zZXJ0aW5nIGFueSBuZXdseSBjcmVhdGVkIHJvd3MgaW50byB0aGUgY29udGFpbmVyIGFuZCB0aGUgcmVxdWVzdCdzIGRhdGEgbGlzdC4KLS5QUAotSWYgYSByb3cgaXMgZm91bmQsIGl0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgcmVxdWVzdCdzIGRhdGEgbGlzdC4gVGhlIHN1Yi1oYW5kbGVyIG1heSByZXRyaWV2ZSBpdCBieSBjYWxsaW5nIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsgKiBOT1RFIE5PVEUgTk9URToKLS5QUAotVGhpcyBoZWxwZXIgYW5kIGl0J3MgQVBJIGFyZSBzdGlsbCBiZWluZyB0ZXN0ZWQgYW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQKiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9jb250YWluZXJfZXh0cmFjdCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotcmV0cmlldmUgdGhlIGNvbnRhaW5lciB1c2VkIGJ5IHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzIwIG9mIGZpbGUgdGFibGVfY29udGFpbmVyLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0IChcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFicmVnLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIGNvbnRhaW5lciwgY2hhciBrZXlfdHlwZSkiCi0uUFAKLXJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTQgb2YgZmlsZSB0YWJsZV9jb250YWluZXIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIFxmQm5ldHNubXBfaW5kZXhcZlAgKiByb3cpIgotLlBQCi1pbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0YWJsZV9jb250YWluZXIgZW50cnkgaW50byBhIHJlcXVlc3QgbGlzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1MSBvZiBmaWxlIHRhYmxlX2NvbnRhaW5lci5jLgotLlNTICJcZkJuZXRzbm1wX2luZGV4XGZQKiBuZXRzbm1wX3RhYmxlX2luZGV4X2ZpbmRfbmV4dF9yb3cgKFxmQm5ldHNubXBfY29udGFpbmVyXGZQICogYywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0YmxyZXEpIgotLlBQCi1kZXByZWNhdGVkLCBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSBvbmx5IGV4cGVjdGVkIGltcGFjdCB0byByZW1vdmU6IG5vbmUKLS5JUCAiXChidSIgMgotdXNlZCBiZXR3ZWVuIGhlbHBlcnMsIHNob3VsZG4ndCBoYXZlIGJlZW4gdXNlZCBieSBlbmQgdXNlcnMKLS5QUAotLlBQCi1yZXBsYWNlbWVudDogbm9uZQotLklQICJcKGJ1IiAyCi1uZXZlciBzaG91bGQgaGF2ZSBiZWVuIGEgcHVibGljIG1ldGhvZCBpbiB0aGUgZmlyc3QgcGxhY2UgCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzIxIG9mIGZpbGUgdGFibGVfY29udGFpbmVyLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfZGF0YS4zIGIvbWFuL25ldHNubXBfdGFibGVfZGF0YS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzMyOTBiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMworKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0uVEggInRhYmxlX2RhdGEiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9kYXRhIFwtIAotLlBQCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2RhdGFzZXRcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGF1dG9tYXR0ZWQgc3RvcmFnZS4gXGZQIgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZ2VuZXJhdGVfaW5kZXhfb2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhXGZQIChjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0YWJsZSBkYXRhIHNldCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9yb3dcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRhYmxlIGRhdGEgc2V0IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZkljbG9uZXMgYSBkYXRhIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWRlbGV0ZXMgYSByb3cncyBtZW1vcnkuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9hZGRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklBZGRzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSAoc3RvcmVkIGluIHByb3BlciBsZXhvZ3JhcGhpY2FsIG9yZGVyKS4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yZXBsYWNlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm9yaWdyb3csIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpuZXdyb3cpIgotLmJyCi0uUkkgIlxmSXN3YXBzIG91dCBvcmlncm93IHdpdGggbmV3cm93LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGFuZCBmcmVlcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgdGhlIHZvaWQgKiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfdGFibGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIGxvbmcgZmxhZ3MpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZVxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfY3JlYXRlX3Jvd1xmUCAodm9pZCAqZW50cnkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfY29weV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpvbGRfcm93LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqbmV3X3JvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RhYmxlX2RhdGFfaGFuZGxlclxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhIHRhYmxlX2RhdGEgaGFuZGxlciBhbmQgcmV0dXJucyBpdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSBoYW5kbGVyIGFzIGEgZGF0YSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdGFibGVfZGF0YVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIHJlYWQtb25seSBkYXRhIHRhYmxlIElmIHRhYmxlX2luZm8gIT0gTlVMTCwgaXQgcmVnaXN0ZXJzIGl0IGFzIGEgbm9ybWFsIHRhYmxlIHRvby4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGFibGUgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHJvdyBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlX3Jvd19kYXRhXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIGRhdGEgZnJvbSB0aGUgcm93IGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9pbnNlcnRfdGFibGVfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfZGF0YSByb3cgaW50byBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2J1aWxkX3Jlc3VsdFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93LCBpbnQgY29sdW1uLCB1X2NoYXIgdHlwZSwgdV9jaGFyICpyZXN1bHRfZGF0YSwgc2l6ZV90IHJlc3VsdF9kYXRhX2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X2ZpcnN0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2dldF9uZXh0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSWZpbmRzIHRoZSBkYXRhIGluICdkYXRhbGlzdCcgc3RvcmVkIGF0ICdpbmRleGVzJyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2dldF9mcm9tX29pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgb2lkICpzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5icgotLlJJICJcZklmaW5kcyB0aGUgZGF0YSBpbiAnZGF0YWxpc3QnIHN0b3JlZCBhdCB0aGUgc2VhcmNoZm9yIG9pZCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfbnVtX3Jvd3NcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19maXJzdFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2dldFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X25leHRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19nZXRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfZ2V0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2NvdW50XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X2ZpcnN0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X2dldFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9uZXh0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X2dldF9ieWlkeFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X25leHRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9nZXRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfbmV4dF9ieW9pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuIAotCi1UaGlzIGhlbHBlciBpcyBvYnNvbGV0ZS4gSWYgeW91IGFyZSB3cml0aW5nIGEgbmV3IFxmQm1vZHVsZVxmUCwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSB0YWJsZV90ZGF0YSBoZWxwZXIgaW5zdGVhZC4KLS5QUAotVGhpcyBoZWxwZXIgaGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZXJlIGFsbCB0aGUgaW5kZXhlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgc3RvcmVkIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmIGFuZCBub3QgaW4gc29tZSBleHRlcm5hbCBzdG9yYWdlIGxvY2F0aW9uLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhIGxpc3Qgb2Ygcm93cywgd2hlcmUgYSByb3cgY29uc2lzdHMgb2YgdGhlIGluZGV4ZXMgdG8gdGhlIHRhYmxlIGFuZCBhIGdlbmVyaWMgZGF0YSBwb2ludGVyLiBZb3UgY2FuIHRoZW4gaW1wbGVtZW50IGEgc3ViaGFuZGxlciB3aGljaCBpcyBwYXNzZWQgdGhlIGV4YWN0IHJvdyBkZWZpbml0aW9uIGFuZCBkYXRhIGl0IG11c3QgcmV0dXJuIGRhdGEgZm9yIG9yIGFjY2VwdCBkYXRhIGZvci4gQ29tcGxleCBHRVRORVhUIGhhbmRsaW5nIGlzIGdyZWF0bHkgc2ltcGxpZmllZCBpbiB0aGlzIGNhc2UuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAqIG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGEgKGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGFibGUgZGF0YSBzZXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MiBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfcm93ICh2b2lkKSIKLS5QUAotY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGFibGUgZGF0YSBzZXQgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MiBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQKiBuZXRzbm1wX2V4dHJhY3RfdGFibGUgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSB0YWJsZSBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NTYgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgcm93IGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY2NCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF9leHRyYWN0X3RhYmxlX3Jvd19kYXRhIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgZGF0YSBmcm9tIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjczIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90YWJsZV9kYXRhX2hhbmRsZXIgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlKSIKLS5QUAotQ3JlYXRlcyBhIHRhYmxlX2RhdGEgaGFuZGxlciBhbmQgcmV0dXJucyBpdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzggb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9pbnNlcnRfdGFibGVfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfZGF0YSByb3cgaW50byBhIHJlcXVlc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2ODUgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV90YWJsZV9kYXRhIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIHJlYWQtb25seSBkYXRhIHRhYmxlIElmIHRhYmxlX2luZm8gIT0gTlVMTCwgaXQgcmVnaXN0ZXJzIGl0IGFzIGEgbm9ybWFsIHRhYmxlIHRvby4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MTIgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1yZWdpc3RlcnMgYSBoYW5kbGVyIGFzIGEgZGF0YSB0YWJsZS4gSWYgdGFibGVfaW5mbyAhPSBOVUxMLCBpdCByZWdpc3RlcnMgaXQgYXMgYSBub3JtYWwgdGFibGUgdG9vLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQwMSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfZGF0YV9hZGRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1BZGRzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSAoc3RvcmVkIGluIHByb3BlciBsZXhvZ3JhcGhpY2FsIG9yZGVyKS4gcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb24gc3VjY2Vzc2Z1bCBhZGRpdGlvbi4gb3IgU05NUEVSUl9HRU5FUlIgb24gZmFpbHVyZSAoRS5HLiwgaW5kZXhlcyBhbHJlYWR5IGV4aXN0ZWQpIAotLlBQCi14eHgtcmtzOiByZW1vdmUgaW52YWxpZCByb3c/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM0IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX2Nsb25lX3JvdyAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1jbG9uZXMgYSBkYXRhIHJvdy4gRE9FUyBOT1QgQ0xPTkUgVEhFIENPTlRBSU5FRCBEQVRBLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcwIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1kZWxldGVzIGEgcm93J3MgbWVtb3J5LiByZXR1cm5zIHRoZSB2b2lkIGRhdGEgdGhhdCBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlbGV0ZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDUgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLWZpbmRzIHRoZSBkYXRhIGluICdkYXRhbGlzdCcgc3RvcmVkIGF0ICdpbmRleGVzJyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgxMSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9nZXRfZmlyc3Rfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSkiCi0uUFAKLXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3OTIgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X2Zyb21fb2lkIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgb2lkICogc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uUFAKLWZpbmRzIHRoZSBkYXRhIGluICdkYXRhbGlzdCcgc3RvcmVkIGF0IHRoZSBzZWFyY2hmb3Igb2lkIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODI1IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX2dldF9uZXh0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODAxIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGFuZCBmcmVlcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgdGhlIHZvaWQgKiByZXR1cm5zIHRoZSB2b2lkICogZGF0YSBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uLiBvciBOVUxMIG9uIGZhaWx1cmUgKGJhZCBhcmd1bWVudHMpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc0IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKSByZXR1cm5zIHRoZSByb3cgcG9pbnRlciBpdHNlbGYgb24gc3VjY2Vzc2Z1bCByZW1vdmluZy4gb3IgTlVMTCBvbiBmYWlsdXJlIChiYWQgYXJndW1lbnRzKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0OCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFfcmVwbGFjZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIG9yaWdyb3csIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogbmV3cm93KSIKLS5QUAotc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuIFRoaXMgZG9lcyAqbm90KiBkZWxldGUvZnJlZSBhbnl0aGluZyEgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzMgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zIGIvbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTAxYzNjLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMworKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0uVEggInRhYmxlX2RhdGFzZXQiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9kYXRhc2V0IFwtIAotLlBQCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBhdXRvbWF0dGVkIHN0b3JhZ2UuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfdGFibGVfZGF0YXNldFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0XGZQIChjb25zdCBjaGFyICp0YWJsZV9uYW1lKSIKLS5icgotLlJJICJcZklDcmVhdGUgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHN0cnVjdHVyZSBnaXZlbiBhIHRhYmxlX2RhdGEgZGVmaW5pdGlvbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZV9zZXQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9jbG9uZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWNsb25lcyBhIGRhdGFzZXQgcm93LCBpbmNsdWRpbmcgYWxsIGRhdGEuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9kYXRhXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKmRhdGEpIgotLmJyCi0uUkkgIlxmSWRlbGV0ZXMgYSBzaW5nbGUgZGF0YXNldCB0YWJsZSBkYXRhLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9hbGxfZGF0YVxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICpkYXRhKSIKLS5icgotLlJJICJcZklkZWxldGVzIGFsbCB0aGUgZGF0YSBmcm9tIHRoaXMgXGZCbm9kZVxmUCBhbmQgYmV5b25kIGluIHRoZSBsaW5rZWQgbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWRlbGV0ZXMgYWxsIHRoZSBkYXRhIGZyb20gdGhpcyBcZkJub2RlXGZQIGFuZCBiZXlvbmQgaW4gdGhlIGxpbmtlZCBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWFkZHMgYSBuZXcgcm93IHRvIGEgZGF0YXNldCB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlcGxhY2Vfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm9yaWdyb3csIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpuZXdyb3cpIgotLmJyCi0uUkkgIlxmSWFkZHMgYSBuZXcgcm93IHRvIGEgZGF0YXNldCB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGEgcm93IGZyb20gdGhlIHRhYmxlLCBidXQgZG9lc24ndCBkZWxldGUvZnJlZSB0aGUgY29sdW1uIHZhbHVlcyBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9hbmRfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUgYW5kIHRoZW4gZGVsZXRlcyBpdCAoYW5kIGFsbCBpdHMgZGF0YSkgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKmRlZnJvdykiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIG5ldyByb3cgZnJvbSBhbiBleGlzdGluZyBkZWZpbmVkIGRlZmF1bHQgc2V0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGVfc2V0LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBpbnQgdHlwZSwgaW50IHdyaXRhYmxlLCB2b2lkICpkZWZhdWx0X3ZhbHVlLCBzaXplX3QgZGVmYXVsdF92YWx1ZV9sZW4pIgotLmJyCi0uUkkgIlxmSWFkZHMgYSBuZXcgZGVmYXVsdCByb3cgdG8gYSB0YWJsZV9zZXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRzZXQsLi4uKSIKLS5icgotLlJJICJcZklhZGRzIG11bHRpcGxlIGRhdGEgY29sdW1uIGRlZmluaXRpb25zIHRvIGVhY2ggcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90YWJsZV9kYXRhX3NldF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICpkYXRhX3NldCkiCi0uYnIKLS5SSSAiXGZJR2l2ZW4gYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IGRlZmluaXRpb24sIGNyZWF0ZSBhIGhhbmRsZXIgZm9yIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICpkYXRhX3NldCwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXIgYSBnaXZlbiBkYXRhX3NldCBhdCBhIGdpdmVuIG9pZCAoc3BlY2lmaWVkIGluIHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIpLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ld3Jvd19zdGFzaFxmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX25ld3Jvd3N0YXNoXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICpkYXRhdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBwb2ludGVyIGZyb20gYSBnaXZlbiByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0X2NvbHVtblxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIHVuc2lnbmVkIGludCBjb2x1bW4pIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBwb2ludGVyIGZyb20gYSBnaXZlbiByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZVxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGVfc2V0LCBjaGFyICpyZWdpc3RyYXRpb25fbmFtZSkiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgdGFibGVfZGF0YXNldCBzbyB0aGF0IHRoZSAnYWRkX3Jvdycgc25tcGQuY29uZiB0b2tlbiBjYW4gYmUgdXNlZCB0byBhZGQgZGF0YSB0byB0aGlzIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcGFyc2VfdGFibGVfc2V0XGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19wYXJzZV9hZGRfcm93XGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2dldF9maXJzdF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2dldF9uZXh0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX3NldF9udW1fcm93c1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfZmluZF9jb2x1bW5cZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqc3RhcnQsIHVuc2lnbmVkIGludCBjb2x1bW4pIgotLmJyCi0uUkkgIlxmSUZpbmRzIGEgY29sdW1uIHdpdGhpbiBhIGdpdmVuIHN0b3JhZ2Ugc2V0LCBnaXZlbiB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHN0b3JhZ2Ugc2V0IGxpc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfbWFya19yb3dfY29sdW1uX3dyaXRhYmxlXGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93LCBpbnQgY29sdW1uLCBpbnQgd3JpdGFibGUpIgotLmJyCi0uUkkgIlxmSW1hcmtzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IGFzIHdyaXRhYmxlIG9yIG5vdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZXRfcm93X2NvbHVtblxmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdywgdW5zaWduZWQgaW50IGNvbHVtbiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKSIKLS5icgotLlJJICJcZklzZXRzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IHdpdGggZGF0YSBnaXZlbiBhIHR5cGUsIHZhbHVlLCBhbmQgbGVuZ3RoLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9pbmRleFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIHVfY2hhciB0eXBlKSIKLS5icgotLlJJICJcZklhZGRzIGFuIGluZGV4IHRvIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGFibGVfc2V0X2FkZF9pbmRleGVzXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0c2V0LC4uLikiCi0uYnIKLS5SSSAiXGZJYWRkcyBtdWx0aXBsZSBpbmRleGVzIHRvIGEgdGFibGVfZGF0YXNldCBoZWxwZXIgb2JqZWN0LiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggYXV0b21hdHRlZCBzdG9yYWdlLiAKLQotVGhpcyBoYW5kbGVyIGhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVyZSBhbGwgdGhlIGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgc3RvcmVkIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmIGFuZCBub3QgaW4gc29tZSBleHRlcm5hbCBzdG9yYWdlIGxvY2F0aW9uLiBJdCBoYW5kbGVzIGFsbCBNSUIgcmVxdWVzdHMgaW5jbHVkaW5nIEdFVHMsIEdFVE5FWFRzIGFuZCBTRVRzLiBJdCdzIHBvc3NpYmxlIHRvIHNpbXBseSBjcmVhdGUgYSB0YWJsZSB3aXRob3V0IGFjdHVhbGx5IGV2ZXIgZGVmaW5pbmcgYSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIFNOTVAgcmVxdWVzdHMgY29tZSBpbi4gVG8gdXNlIHRoZSBkYXRhLCB5b3UgY2FuIGVpdGhlciBhdHRhY2ggYSBzdWItaGFuZGxlciB0aGF0IG1lcmVseSB1c2VzL21hbmlwdWxhdGVzIHRoZSBkYXRhIGZ1cnRoZXIgd2hlbiByZXF1ZXN0cyBjb21lIGluLCBvciB5b3UgY2FuIGxvb3AgdGhyb3VnaCBpdCBleHRlcm5hbGx5IHdoZW4gaXQncyBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaGFuZGxlciBpcyBtb3N0IHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSBhIHRhYmxlIGlzIGhvbGRpbmcgY29uZmlndXJhdGlvbiBkYXRhIGZvciBzb21ldGhpbmcgd2hpY2ggZ2V0cyB0cmlnZ2VyZWQgdmlhIGFub3RoZXIgZXZlbnQuCi0uUFAKLU5PVEUgTk9URSBOT1RFOiBUaGlzIGhlbHBlciBpc24ndCBjb21wbGV0ZSBhbmQgaXMgbGlrZWx5IHRvIGNoYW5nZSBzb21ld2hhdCBvdmVyIHRpbWUuIFNwZWNpZmljYWxseSwgdGhlIHdheSBpdCBzdG9yZXMgZGF0YSBpbnRlcm5hbGx5IG1heSBjaGFuZ2UgZHJhc3RpY2FsbHkuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQKiBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3NldCAoY29uc3QgY2hhciAqIHRhYmxlX25hbWUpIgotLlBQCi1DcmVhdGUgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHN0cnVjdHVyZSBnaXZlbiBhIHRhYmxlX2RhdGEgZGVmaW5pdGlvbi4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NyBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCogbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgzOCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQKiBuZXRzbm1wX2V4dHJhY3RfdGFibGVfZGF0YV9zZXRfY29sdW1uIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIHVuc2lnbmVkIGludCBjb2x1bW4pIgotLlBQCi1leHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0OCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGFibGVfZGF0YV9zZXRfaGFuZGxlciAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIGRhdGFfc2V0KSIKLS5QUAotR2l2ZW4gYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IGRlZmluaXRpb24sIGNyZWF0ZSBhIGhhbmRsZXIgZm9yIGl0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3MiBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiaW50IG5ldHNubXBfbWFya19yb3dfY29sdW1uX3dyaXRhYmxlIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdywgaW50IGNvbHVtbiwgaW50IHdyaXRhYmxlKSIKLS5QUAotbWFya3MgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgYXMgd3JpdGFibGUgb3Igbm90LiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyMTQgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgInZvaWQgbmV0c25tcF9yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZV9zZXQsIGNoYXIgKiByZWdpc3RyYXRpb25fbmFtZSkiCi0uUFAKLXJlZ2lzdGVycyBhIHRhYmxlX2RhdGFzZXQgc28gdGhhdCB0aGUgJ2FkZF9yb3cnIHNubXBkLmNvbmYgdG9rZW4gY2FuIGJlIHVzZWQgdG8gYWRkIGRhdGEgdG8gdGhpcyB0YWJsZS4gSWYgcmVnaXN0cmF0aW9uX25hbWUgaXMgTlVMTCB0aGVuIHRoZSBuYW1lIHVzZWQgd2hlbiB0aGUgdGFibGUgd2FzIGNyZWF0ZWQgd2lsbCBiZSB1c2VkIGluc3RlYWQuCi0uUFAKLVxmQlRvZG9cZlAKLS5SUyA0Ci1jcmVhdGUgYSBwcm9wZXJseSBmcmVlJ2luZyByZWdpc3RlcmF0aW9uIHBvaW50ZXIgZm9yIHRoZSBkYXRhbGlzdCwgYW5kIGdldCB0aGUgZGF0YWxpc3QgZnJlZWQgYXQgc2h1dGRvd24uIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODc1IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiBkYXRhX3NldCwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1yZWdpc3RlciBhIGdpdmVuIGRhdGFfc2V0IGF0IGEgZ2l2ZW4gb2lkIChzcGVjaWZpZWQgaW4gdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlcikuIFRoZSByZWdpbmZvLT5oYW5kbGVyLT5hY2Nlc3NfbWV0aG9kICptYXkqIGJlIG51bGwgaWYgdGhlIGNhbGwgZG9lc24ndCBldmVyIHdhbnQgdG8gYmUgY2FsbGVkIGZvciBTTk1QIG9wZXJhdGlvbnMuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzk4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJpbnQgbmV0c25tcF9zZXRfcm93X2NvbHVtbiAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3csIHVuc2lnbmVkIGludCBjb2x1bW4sIGludCB0eXBlLCBjb25zdCBjaGFyICogdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pIgotLlBQCi1zZXRzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IHdpdGggZGF0YSBnaXZlbiBhIHR5cGUsIHZhbHVlLCBhbmQgbGVuZ3RoLiBEYXRhIGlzIG1lbWR1cCdlZCBieSB0aGUgZnVuY3Rpb24uIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI0OSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93IChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWNsb25lcyBhIGRhdGFzZXQgcm93LCBpbmNsdWRpbmcgYWxsIGRhdGEuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX3NldF9jcmVhdGVfcm93X2Zyb21fZGVmYXVsdHMgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIGRlZnJvdykiCi0uUFAKLWNyZWF0ZXMgYSBuZXcgcm93IGZyb20gYW4gZXhpc3RpbmcgZGVmaW5lZCBkZWZhdWx0IHNldCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0MiBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2ZpbmRfY29sdW1uIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBzdGFydCwgdW5zaWduZWQgaW50IGNvbHVtbikiCi0uUFAKLUZpbmRzIGEgY29sdW1uIHdpdGhpbiBhIGdpdmVuIHN0b3JhZ2Ugc2V0LCBnaXZlbiB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHN0b3JhZ2Ugc2V0IGxpc3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTIwMiBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfZ2V0X2ZpcnN0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlKSIKLS5QUAotcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExNzEgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2dldF9uZXh0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExNzggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgInZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9pbmRleCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCB1X2NoYXIgdHlwZSkiCi0uUFAKLWFkZHMgYW4gaW5kZXggdG8gdGhlIHRhYmxlLiBDYWxsIHRoaXMgcmVwZWF0bHkgZm9yIGVhY2ggaW5kZXguIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTMwMyBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWFkZHMgYSBuZXcgcm93IHRvIGEgZGF0YXNldCB0YWJsZSAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4NyBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2FsbF9kYXRhIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBkYXRhKSIKLS5QUAotZGVsZXRlcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGlzIFxmQm5vZGVcZlAgYW5kIGJleW9uZCBpbiB0aGUgbGlua2VkIGxpc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjQgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCogbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9kYXRhIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBkYXRhKSIKLS5QUAotZGVsZXRlcyBhIHNpbmdsZSBkYXRhc2V0IHRhYmxlIGRhdGEuIHJldHVybnMgdGhlIChwb3NzaWJseSBzdGlsbCBnb29kKSBuZXh0IHBvaW50ZXIgb2YgdGhlIGRlbGV0ZWQgZGF0YSBvYmplY3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUxIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWRlbGV0ZXMgYWxsIHRoZSBkYXRhIGZyb20gdGhpcyBcZkJub2RlXGZQIGFuZCBiZXlvbmQgaW4gdGhlIGxpbmtlZCBsaXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTc0IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfYW5kX2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGEgcm93IGZyb20gdGhlIHRhYmxlIGFuZCB0aGVuIGRlbGV0ZXMgaXQgKGFuZCBhbGwgaXRzIGRhdGEpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjE5IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSwgYnV0IGRvZXNuJ3QgZGVsZXRlL2ZyZWUgdGhlIGNvbHVtbiB2YWx1ZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlcGxhY2Vfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogb3JpZ3JvdywgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBuZXdyb3cpIgotLlBQCi1hZGRzIGEgbmV3IHJvdyB0byBhIGRhdGFzZXQgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTcgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZV9zZXQsIHVuc2lnbmVkIGludCBjb2x1bW4sIGludCB0eXBlLCBpbnQgd3JpdGFibGUsIHZvaWQgKiBkZWZhdWx0X3ZhbHVlLCBzaXplX3QgZGVmYXVsdF92YWx1ZV9sZW4pIgotLlBQCi1hZGRzIGEgbmV3IGRlZmF1bHQgcm93IHRvIGEgdGFibGVfc2V0LiBBcmd1bWVudHMgc2hvdWxkIGJlIHRoZSB0YWJsZV9zZXQsIGNvbHVtbiBudW1iZXIsIFxmQnZhcmlhYmxlXGZQIHR5cGUgYW5kIGZpbmFsbHkgYSAxIGlmIGl0IGlzIGFsbG93ZWQgdG8gYmUgd3JpdGFibGUsIG9yIGEgMCBpZiBub3QuIElmIHRoZSBkZWZhdWx0X3ZhbHVlIGZpZWxkIGlzIG5vdCBOVUxMLCBpdCB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgbmV3IHZhbHVzZSBpbiB0aGF0IGNvbHVtbiBmcm8gbmV3bHkgY3JlYXRlZCByb3dzLiBJdCBpcyBjb3BpZWQgaW50byB0aGUgc3RvcmFnZSB0ZW1wbGF0ZSAoZnJlZSB5b3VyIGNhbGxpbmcgYXJndW1lbnQpLgotLlBQCi1yZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSX0ZBSUxVUkUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgInZvaWQgbmV0c25tcF90YWJsZV9zZXRfYWRkX2luZGV4ZXMgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0c2V0LCAgLi4uKSIKLS5QUAotYWRkcyBtdWx0aXBsZSBpbmRleGVzIHRvIGEgdGFibGVfZGF0YXNldCBoZWxwZXIgb2JqZWN0LiBUbyBlbmQgdGhlIGxpc3QsIHVzZSBhIDAgYWZ0ZXIgdGhlIGxpc3Qgb2YgQVNOIGluZGV4IHR5cGVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzMTQgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgInZvaWQgbmV0c25tcF90YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdHNldCwgIC4uLikiCi0uUFAKLWFkZHMgbXVsdGlwbGUgZGF0YSBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gZWFjaCByb3cuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93IHJlcGVhdGVkbHkgZm9yIHlvdS4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMjkgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zIGIvbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWJjODllLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS5USCAiZ2VuZXJpY190YWJsZV9BUEkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1nZW5lcmljX3RhYmxlX0FQSSBcLSAKLS5QUAotR2VuZXJhbCByZXF1aXJlbWVudHMgZm9yIGEgdGFibGUgaGVscGVyLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9tYWludGVuYW5jZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUm91dGluZXMgZm9yIG1haW50YWluaW5nIHRoZSBjb250ZW50cyBvZiBhIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm1pYl9tYWludGVuYW5jZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUm91dGluZXMgZm9yIG1haW50YWluaW5nIGEgTUlCIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX3Jvd3NcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggdGhlIHJvd3Mgb2YgYSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9pbmRleGVzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklSb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHJvdyBpbmRleGVzLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotR2VuZXJhbCByZXF1aXJlbWVudHMgZm9yIGEgdGFibGUgaGVscGVyLiAKLQotQSBnaXZlbiB0YWJsZSBoZWxwZXIgbmVlZCBub3QgaW1wbGVtZW50IHRoZSB3aG9sZSBvZiB0aGlzIEFQSSwgYW5kIG1heSBuZWVkIHRvIGFkanVzdCB0aGUgcHJvdG90eXBlIG9mIGNlcnRhaW4gcm91dGluZXMuIEJ1dCB0aGlzIGRlc2NyaXB0aW9uIHByb3ZpZGVzIGEgc3VpdGFibGUgc3RhbmRhcmQgZGVzaWduIGZyYW1ld29yay4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zIGIvbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTk0NjY3Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS5USCAidGFibGVfaW5kZXhlcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2luZGV4ZXMgXC0gCi0uUFAKLVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggcm93IGluZGV4ZXMuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCbmV0c25tcF9nZW5lcmljX2lkeFxmUCAodm9pZCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBpbmRleGluZyBzdHJ1Y3R1cmUgb2YgdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfaWR4XGZQICh2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSVJlcG9ydCB0aGUgaW5kZXggdmFsdWVzIGZvciBhIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCbmV0c25tcF9nZW5lcmljX3Jvd19vaWRcZlAgKHZvaWQgKnJvdywgb2lkICppbnN0YW5jZXMpIgotLmJyCi0uUkkgIlxmSVJlcG9ydCB0aGUgaW5zdGFuY2UgT0lEcyBmb3IgYSByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19jb21wYXJlX2lkeFxmUCAodm9pZCAqcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4KSIKLS5icgotLlJJICJcZklDb21wYXJlIGEgcm93IGFnYWluc3QgdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19jb21wYXJlX29pZFxmUCAodm9pZCAqcm93LCBvaWQgKmluc3RhbmNlcywgc2l6ZV90IGxlbikiCi0uYnIKLS5SSSAiXGZJQ29tcGFyZSBhIHJvdyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfc3VidHJlZV9pZHhcZlAgKHZvaWQgKnJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleCkiCi0uYnIKLS5SSSAiXGZJQ2hlY2sgaWYgYSByb3cgbGllcyB3aXRoaW4gYSBzdWJ0cmVlIG9mIGluZGV4IHZhbHVlcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfc3VidHJlZV9vaWRcZlAgKHZvaWQgKnJvdywgb2lkICppbnN0YW5jZXMsIHNpemVfdCBsZW4pIgotLmJyCi0uUkkgIlxmSUNoZWNrIGlmIGEgcm93IGxpZXMgd2l0aGluIGEgc3VidHJlZSBvZiBpbnN0YW5jZSBPSURzLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCByb3cgaW5kZXhlcy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9pZHggKHZvaWQgKiByb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4KSIKLS5QUAotQ29tcGFyZSBhIHJvdyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMyNSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19jb21wYXJlX29pZCAodm9pZCAqIHJvdywgb2lkICogaW5zdGFuY2VzLCBzaXplX3QgbGVuKSIKLS5QUAotQ29tcGFyZSBhIHJvdyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzEgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9zdWJ0cmVlX2lkeCAodm9pZCAqIHJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXgpIgotLlBQCi1DaGVjayBpZiBhIHJvdyBsaWVzIHdpdGhpbiBhIHN1YnRyZWUgb2YgaW5kZXggdmFsdWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzNyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19jb21wYXJlX3N1YnRyZWVfb2lkICh2b2lkICogcm93LCBvaWQgKiBpbnN0YW5jZXMsIHNpemVfdCBsZW4pIgotLlBQCi1DaGVjayBpZiBhIHJvdyBsaWVzIHdpdGhpbiBhIHN1YnRyZWUgb2YgaW5zdGFuY2UgT0lEcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNDMgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCogbmV0c25tcF9nZW5lcmljX2lkeCAodm9pZCAqIHRhYmxlKSIKLS5QUAotUmV0cmlldmUgdGhlIGluZGV4aW5nIHN0cnVjdHVyZSBvZiB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzA3IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAqIG5ldHNubXBfZ2VuZXJpY19yb3dfaWR4ICh2b2lkICogcm93KSIKLS5QUAotUmVwb3J0IHRoZSBpbmRleCB2YWx1ZXMgZm9yIGEgcm93LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxMyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAic2l6ZV90IG5ldHNubXBfZ2VuZXJpY19yb3dfb2lkICh2b2lkICogcm93LCBvaWQgKiBpbnN0YW5jZXMpIgotLlBQCi1SZXBvcnQgdGhlIGluc3RhbmNlIE9JRHMgZm9yIGEgcm93LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxOSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zIGIvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2NWFlYS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS5USCAidGFibGVfaXRlcmF0b3IiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9pdGVyYXRvciBcLSAKLS5QUAotVGhlIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBpcyBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgdGFzayBvZiB3cml0aW5nIGEgdGFibGUgaGFuZGxlciBmb3IgdGhlIG5ldC1zbm1wIGFnZW50IHdoZW4gdGhlIGRhdGEgYmVpbmcgYWNjZXNzZWQgaXMgbm90IGluIGFuIG9pZCBzb3J0ZWQgZm9ybSBhbmQgbXVzdCBiZSBhY2Nlc3NlZCBleHRlcm5hbGx5LiAgCi0KLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0aV9jYWNoZV9pbmZvX3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIgotLmJyCi0uUkkgIlxmSUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gXGZQIgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVElfUkVRVUVTVF9DQUNIRVxmUCAgICd0aV9jYWNoZSciCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUQUJMRV9JVEVSQVRPUl9OT1RBR0FJTlxmUCAgIDI1NSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRBQkxFX0lURVJBVE9SX05BTUVcZlAgICAndGFibGVfaXRlcmF0b3InIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQnRpX2NhY2hlX2luZm9fc1xmUCBcZkJ0aV9jYWNoZV9pbmZvXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICooIFxmQk5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludFxmUCApKHZvaWQgKipsb29wX2NvbnRleHQsIHZvaWQgKipkYXRhX2NvbnRleHQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiggXGZCTmV0c25tcF9OZXh0X0RhdGFfUG9pbnRcZlAgKSh2b2lkICoqbG9vcF9jb250ZXh0LCB2b2lkICoqZGF0YV9jb250ZXh0LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCAqKCBcZkJOZXRzbm1wX01ha2VfRGF0YV9Db250ZXh0XGZQICkodm9pZCAqbG9vcF9jb250ZXh0LCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkKCBcZkJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0XGZQICkodm9pZCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkKCBcZkJOZXRzbm1wX0ZyZWVfRGF0YV9Db250ZXh0XGZQICkodm9pZCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQIgotLmJyCi0uUkkgIlxmSVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX2l0ZXJhdG9yX2luZm8uIFxmUCIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqIFxmQm5ldHNubXBfaXRlcmF0b3JfY3JlYXRlX3RhYmxlXGZQIChOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQgKmZpcnN0RFAsIE5ldHNubXBfTmV4dF9EYXRhX1BvaW50ICpuZXh0RFAsIE5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAqZ2V0aWR4LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGVcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgdGFibGUgaXRlcmF0b3IgaGVscGVyIGhhbmRsZXIgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIHdpdGggYSBoYW5kbGVyIG5hbWUgc2V0IHRvIFRBQkxFX0lURVJBVE9SX05BTUUgYW5kIGFjY2VzcyBtZXRob2QsIG5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCAqIFxmQm5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZnJvbSBhIHJlcXVlc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2luc2VydF9pdGVyYXRvcl9jb250ZXh0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgdm9pZCAqZGF0YSkiCi0uYnIKLS5SSSAiXGZJaW5zZXJ0cyB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZvciBhIG5ld2x5IGNyZWF0ZWQgcm93IGludG8gYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19maXJzdFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgdm9pZCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgdm9pZCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0X2J5aWR4XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0X2J5aWR4XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRfYnlvaWRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0X2J5b2lkXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfY291bnRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJOZXRzbm1wX05vZGVfSGFuZGxlciBcZkJuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBpcyBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgdGFzayBvZiB3cml0aW5nIGEgdGFibGUgaGFuZGxlciBmb3IgdGhlIG5ldC1zbm1wIGFnZW50IHdoZW4gdGhlIGRhdGEgYmVpbmcgYWNjZXNzZWQgaXMgbm90IGluIGFuIG9pZCBzb3J0ZWQgZm9ybSBhbmQgbXVzdCBiZSBhY2Nlc3NlZCBleHRlcm5hbGx5LiAKLQotRnVuY3Rpb25hbGx5LCBpdCBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIG1vcmUgZ2VuZXJpYyB0YWJsZSBoZWxwZXIgYnV0IGVhc2llcyB0aGUgYnVyZGVuIG9mIEdFVE5FWFQgcHJvY2Vzc2luZyBieSBtYW51YWxseSBsb29waW5nIHRocm91Z2ggYWxsIHRoZSBkYXRhIGluZGV4ZXMgcmV0cmlldmVkIHRocm91Z2ggZnVuY3Rpb24gY2FsbHMgd2hpY2ggc2hvdWxkIGJlIHN1cHBsaWVkIGJ5IHRoZSBcZkJtb2R1bGVcZlAgdGhhdCB3aXNoZXMgaGVscC4gVGhlIFxmQm1vZHVsZVxmUCB0aGUgdGFibGVfaXRlcmF0b3IgaGVscHMgc2hvdWxkLCBhZnRlcndhcmRzLCBuZXZlciBiZSBjYWxsZWQgZm9yIHRoZSBjYXNlIG9mICdNT0RFX0dFVE5FWFQnIGFuZCBvbmx5IGZvciB0aGUgR0VUIGFuZCBTRVQgcmVsYXRlZCBtb2RlcyBpbnN0ZWFkLgotLlBQCi1UaGUgZnVuZGFtZW50YWwgbm90aW9uIGJldHdlZW4gdGhlIHRhYmxlIGl0ZXJhdG9yIGlzIHRoYXQgaXQgYWxsb3dzIHlvdXIgY29kZSB0byBpdGVyYXRlIG92ZXIgZWFjaCAncm93JyB3aXRoaW4geW91ciBkYXRhIHN0b3JhZ2UgbWVjaGFuaXNtLCB3aXRob3V0IHJlcXVpcmluZyB0aGF0IGl0IGJlIHNvcnRlZCBpbiBhIFNOTVAtaW5kZXgtY29tcGxpYW50IG1hbm5lci4gVGhyb3VnaCB0aGUgZ2V0X2ZpcnN0X2RhdGFfcG9pbnQgYW5kIGdldF9uZXh0X2RhdGFfcG9pbnQgaG9va3MsIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgd2lsbCByZXBlYXRlZGx5IGNhbGwgeW91ciBob29rcyB0byBmaW5kIHRoZSAncHJvcGVyJyByb3cgb2YgZGF0YSB0aGF0IG5lZWRzIHByb2Nlc3NpbmcuIFRoZSBmb2xsb3dpbmcgY29uY2VwdHMgYXJlIGltcG9ydGFudDoKLS5QUAotLklQICJcKGJ1IiAyCi1BIGxvb3AgY29udGV4dCBpcyBhIHBvaW50ZXIgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIGluIHRoZSBjdXJyZW50IHByb2Nlc3Npbmcgb2YgYSBzZXQgb2Ygcm93cyB5b3UgY3VycmVudGx5IGFyZS4gQWxsb3dzIHRoZSBnZXRfKl9kYXRhX3BvaW50IHJvdXRpbmVzIHRvIG1vdmUgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LCBvbmNlIHRoZSBpdGVyYXRvciBoYW5kbGVyIGhhcyBpZGVudGlmaWVkIHRoZSBhcHByb3ByaWF0ZSByb3cgZm9yIHRoaXMgcmVxdWVzdCwgdGhlIGpvYiBvZiB0aGUgbG9vcCBjb250ZXh0IGlzIGRvbmUuIFRoZSBtb3N0IHNpbXBsZSBleGFtcGxlIHdvdWxkIGJlIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHdoaWNoIHNpbXBseSBjb3VudHMgcm93cyBmcm9tIDEgdG8gWC4gTW9yZSBjb21tb25seSwgaXQgbWlnaHQgYmUgYSBwb2ludGVyIHRvIGEgbGlua2VkIGxpc3QgXGZCbm9kZVxmUCwgb3Igc29tZW90aGVyIGludGVybmFsIG9yIGV4dGVybmFsIHJlZmVyZW5jZSB0byBhIGRhdGEgc2V0IChmaWxlIHNlZWsgdmFsdWUsIGFycmF5IHBvaW50ZXIsIC4uLikuIElmIGFsbG9jYXRlZCBkdXJpbmcgaXRlcmF0aW9uLCBlaXRoZXIgdGhlIGZyZWVfbG9vcF9jb250ZXh0X2F0X2VuZCAocHJlZmVyYWJseSkgb3IgdGhlIGZyZWVfbG9vcF9jb250ZXh0IHBvaW50ZXJzIHNob3VsZCBiZSBzZXQuCi0uUFAKLS5QUAotLklQICJcKGJ1IiAyCi1BIGRhdGEgY29udGV4dCBpcyBzb21ldGhpbmcgdGhhdCB5b3VyIGhhbmRsZXIgY29kZSBjYW4gdXNlIGluIG9yZGVyIHRvIHJldHJpZXZlIHRoZSByZXN0IG9mIHRoZSBkYXRhIGZvciB0aGUgbmVlZGVkIHJvdy4gVGhpcyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBpbiB5b3VyIGhhbmRsZXIgdmlhIG5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0IGFwaSB3aXRoIHRoZSBuZXRzbm1wX3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUgdGhhdCdzIHBhc3NlZCBpbi4gVGhlIGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gYSBsb29wIGNvbnRleHQgYW5kIGEgZGF0YSBjb250ZXh0IGlzIHRoYXQgbXVsdGlwbGUgZGF0YSBjb250ZXh0cyBjYW4gYmUga2VwdCBieSB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyLCB3aGVyZSBhcyBvbmx5IG9uZSBsb29wIGNvbnRleHQgd2lsbCBldmVyIGJlIGhlbGQgYnkgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlci4gSWYgYWxsb2NhdGVkIGR1cmluZyBpdGVyYXRpb24gdGhlIGZyZWVfZGF0YV9jb250ZXh0IHBvaW50ZXIgc2hvdWxkIGJlIHNldCB0byBhbiBhcHByb3ByaWF0ZSBmdW5jdGlvbi4KLS5QUAotLlBQCi1UaGUgdGFibGUgaXRlcmF0b3Igb3BlcmF0ZXMgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBjYWxsIHlvdXIgY29kZSBob29rcyBmcm9tIHlvdXIgbmV0c25tcF9pdGVyYXRvcl9pbmZvIHJlZ2lzdHJhdGlvbiBwb2ludGVyLgotLlBQCi0uSVAgIlwoYnUiIDIKLXRoZSBnZXRfZmlyc3RfZGF0YV9wb2ludCBob29rIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHByb2Nlc3NpbmcuIEl0IHNob3VsZCBzZXQgdGhlIFxmQnZhcmlhYmxlXGZQIGxpc3QgdG8gYSBsaXN0IG9mIGluZGV4ZXMgZm9yIHRoZSBnaXZlbiB0YWJsZS4gSXQgc2hvdWxkIGFsc28gc2V0IHRoZSBsb29wX2NvbnRleHQgYW5kIG1heWJlIGEgZGF0YV9jb250ZXh0IHdoaWNoIHlvdSB3aWxsIGdldCBhIHBvaW50ZXIgYmFjayB0byB3aGVuIGl0IG5lZWRzIHRvIGNhbGwgeW91ciBjb2RlIHRvIHJldHJpZXZlIGFjdHVhbCBkYXRhIGxhdGVyLiBUaGUgbGlzdCBvZiBpbmRleGVzIHNob3VsZCBiZSByZXR1cm5lZCBhZnRlciBiZWluZyB1cGRhdGUuCi0uUFAKLS5QUAotLklQICJcKGJ1IiAyCi10aGUgZ2V0X25leHRfZGF0YV9wb2ludCBob29rIGlzIHRoZW4gY2FsbGVkIHJlcGVhdGVkbHkgYW5kIGlzIHBhc3NlZCB0aGUgbG9vcCBjb250ZXh0IGFuZCB0aGUgZGF0YSBjb250ZXh0IGZvciBpdCB0byB1cGRhdGUuIFRoZSBpbmRleGVzLCBsb29wIGNvbnRleHQgYW5kIGRhdGEgY29udGV4dCBzaG91bGQgYWxsIGJlIHVwZGF0ZWQgaWYgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRoZXkgc2hvdWxkIGJlIGxlZnQgYWxvbmUgYW5kIGEgTlVMTCBzaG91bGQgYmUgcmV0dXJuZWQuIElkZWFsbHksIGl0IHNob3VsZCB1cGRhdGUgdGhlIGxvb3AgY29udGV4dCB3aXRob3V0IHRoZSBuZWVkIHRvIHJlYWxsb2NhdGUgaXQuIElmIHJlYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkgZm9yIGV2ZXJ5IGl0ZXJhdGl2ZSBzdGVwLCB0aGVuIHRoZSBmcmVlX2xvb3BfY29udGV4dCBmdW5jdGlvbiBwb2ludGVyIHNob3VsZCBiZSBzZXQuIElmIG5vdCwgdGhlbiB0aGUgZnJlZV9sb29wX2NvbnRleHRfYXRfZW5kIHBvaW50ZXIgc2hvdWxkIGJlIHNldCwgd2hpY2ggaXMgbW9yZSBlZmZpY2llbnQgc2luY2UgYSBtYWxsb2MvZnJlZSB3aWxsIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UgZm9yIGV2ZXJ5IGl0ZXJhdGlvbi4gCi0uUFAKLQotLlNIICJUeXBlZGVmIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAiCi0uUFAKLVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX2l0ZXJhdG9yX2luZm8uIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkICogbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZyb20gYSByZXF1ZXN0LiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIHRoZSB0YWJsZSBpdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZyb20gYSBuZXRzbm1wX3JlcXVlc3RfaW5mbyBvYmplY3QuIENhbGxzIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhIHdpdGggcmVxdWVzdC0+cGFyZW50X2RhdGEgc2V0IHdpdGggZGF0YSBmcm9tIGEgcmVxdWVzdCB0aGF0IHdhcyBhZGRlZCBwcmV2aW91c2x5IGJ5IGEgXGZCbW9kdWxlXGZQIGFuZCBUQUJMRV9JVEVSQVRPUl9OQU1FIGhhbmRsZXIgbmFtZS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgdm9pZCBwb2ludGVyKHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhKSwgb3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQgaWYgcmVxdWVzdCBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIGlzIE5VTEwgb3IgcmVxdWVzdC0+cGFyZW50X2RhdGEgb2JqZWN0IGlzIG5vdCBmb3VuZC50aGUgbmV0IAotLlJFCi0uUFAKLQotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlciAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICogaWluZm8pIgotLlBQCi1yZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgCi0uU1MgInZvaWQgbmV0c25tcF9pbnNlcnRfaXRlcmF0b3JfY29udGV4dCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCB2b2lkICogZGF0YSkiCi0uUFAKLWluc2VydHMgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmb3IgYSBuZXdseSBjcmVhdGVkIHJvdyBpbnRvIGEgcmVxdWVzdCAKLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKiBpaW5mbykiCi0uUFAKLUNyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBoYW5kbGVyIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlciB3aXRoIGEgaGFuZGxlciBuYW1lIHNldCB0byBUQUJMRV9JVEVSQVRPUl9OQU1FIGFuZCBhY2Nlc3MgbWV0aG9kLCBuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyLiBJZiBOT1RfU0VSSUFMSVpFRCBpcyBub3QgZGVmaW5lZCB0aGUgZnVuY3Rpb24gaW5qZWN0cyB0aGUgc2VyaWFsaXplIGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBwcmlvciB0byBjYWxsaW5nIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVnaW5mb1xmUCBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdAotLmJyCi1cZklpaW5mb1xmUCBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gc3RydWN0Ci0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRCwgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uIElmIGlpbmZvIGlzIE5VTEwsIFNOTVBFUlJfR0VORVJSIGlzIHJldHVybmVkLiAKLS5SRQotLlBQCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMgYi9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDZkYjQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS5USCAidGFibGVfaXRlcmF0b3IuaCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2l0ZXJhdG9yLmggXC0gCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAiCi0uYnIKLS5SSSAiXGZJSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJORVRTTk1QX0lURVJBVE9SX0ZMQUdfU09SVEVEXGZQICAgMHgwMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRBQkxFX0lURVJBVE9SX05BTUVcZlAgICAndGFibGVfaXRlcmF0b3InIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICooIFxmQk5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludFxmUCApKHZvaWQgKipsb29wX2NvbnRleHQsIHZvaWQgKipkYXRhX2NvbnRleHQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiggXGZCTmV0c25tcF9OZXh0X0RhdGFfUG9pbnRcZlAgKSh2b2lkICoqbG9vcF9jb250ZXh0LCB2b2lkICoqZGF0YV9jb250ZXh0LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCAqKCBcZkJOZXRzbm1wX01ha2VfRGF0YV9Db250ZXh0XGZQICkodm9pZCAqbG9vcF9jb250ZXh0LCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkKCBcZkJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0XGZQICkodm9pZCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkKCBcZkJOZXRzbm1wX0ZyZWVfRGF0YV9Db250ZXh0XGZQICkodm9pZCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQIgotLmJyCi0uUkkgIlxmSVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX2l0ZXJhdG9yX2luZm8uIFxmUCIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgdGFibGUgaXRlcmF0b3IgaGVscGVyIGhhbmRsZXIgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIHdpdGggYSBoYW5kbGVyIG5hbWUgc2V0IHRvIFRBQkxFX0lURVJBVE9SX05BTUUgYW5kIGFjY2VzcyBtZXRob2QsIG5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZVxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCAqIFxmQm5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZnJvbSBhIHJlcXVlc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2luc2VydF9pdGVyYXRvcl9jb250ZXh0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgdm9pZCAqZGF0YSkiCi0uYnIKLS5SSSAiXGZJaW5zZXJ0cyB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZvciBhIG5ld2x5IGNyZWF0ZWQgcm93IGludG8gYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2ZpcnN0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCB2b2lkICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCB2b2lkICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRfYnlpZHhcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRfYnlpZHhcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldF9ieW9pZFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRfYnlvaWRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19jb3VudFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfTm9kZV9IYW5kbGVyIFxmQm5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXJcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi0KLS5QUAotRGVmaW5pdGlvbiBpbiBmaWxlIFxmQnRhYmxlX2l0ZXJhdG9yLmhcZlAuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMyBiL21hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NDYzYWYuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0uVEggInRhYmxlX21haW50ZW5hbmNlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfbWFpbnRlbmFuY2UgXC0gCi0uUFAKLVJvdXRpbmVzIGZvciBtYWludGFpbmluZyB0aGUgY29udGVudHMgb2YgYSB0YWJsZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX2NyZWF0ZV90YWJsZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKSIKLS5icgotLlJJICJcZklDcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19kZWxldGVfdGFibGVcZlAgKHZvaWQgKnRhYmxlKSIKLS5icgotLlJJICJcZklSZWxlYXNlIHRoZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19jcmVhdGVfcm93XGZQICh2b2lkKSIKLS5icgotLlJJICJcZklDcmVhdGUgYSBuZXcgcm93IHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgdGhpcyBzdHlsZSBvZiB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX2Nsb25lX3Jvd1xmUCAodm9pZCAqcm93KSIKLS5icgotLlJJICJcZklDcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgc3BlY2lmaWVkIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2NvcHlfcm93XGZQICh2b2lkICpkc3Rfcm93LCB2b2lkICpzcmNfcm93KSIKLS5icgotLlJJICJcZklDb3B5IHRoZSBjb250ZW50cyBvZiBvbmUgcm93IGludG8gYW5vdGhlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19kZWxldGVfcm93XGZQICh2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSURlbGV0ZSBhIHJvdyBkYXRhIHN0cnVjdHVyZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2FkZF9yb3dcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSUFkZCBhIHJvdyB0byB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19yZXBsYWNlX3Jvd1xmUCAodm9pZCAqdGFibGUsIHZvaWQgKm9sZF9yb3csIHZvaWQgKm5ld19yb3cpIgotLmJyCi0uUkkgIlxmSVJlcGxhY2Ugb25lIHJvdyB3aXRoIGFub3RoZXIgaW4gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcmVtb3ZlX3Jvd1xmUCAodm9pZCAqdGFibGUsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJUmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX3JlbW92ZV9kZWxldGVfcm93XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklSZW1vdmUgYW5kIGRlbGV0ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVJvdXRpbmVzIGZvciBtYWludGFpbmluZyB0aGUgY29udGVudHMgb2YgYSB0YWJsZS4gCi0KLVRoaXMgd291bGQgdHlwaWNhbGx5IGJlIHBhcnQgb2YgaW1wbGVtZW50aW5nIGFuIFNOTVAgTUlCLCBidXQgY291bGQgcG90ZW50aWFsbHkgYWxzbyBiZSB1c2VkIGZvciBhIHN0YW5kYWxvbmUgdGFibGUuCi0uUFAKLVRoaXMgc2VjdGlvbiBvZiB0aGUgZ2VuZXJpYyBBUEkgaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvIHRhYmxlIGhlbHBlcnMgd2hlcmUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWJsZSBpcyBjb25zdHJ1Y3RlZCBhbmQgbWFpbnRhaW5lZCB3aXRoaW4gdGhlIGhlbHBlciBpdHNlbGYuICdFeHRlcm5hbCcgdGFibGVzIHdpbGwgdHlwaWNhbGx5IGxvb2sgYWZ0ZXIgc3VjaCBhc3BlY3RzIGRpcmVjdGx5LCBhbHRob3VnaCB0aGlzIHNlY3Rpb24gb2YgdGhlIGFic3RyYWN0IEFQSSBmcmFtZXdvcmsgY291bGQgYWxzbyBoZWxwIGRpcmVjdCB0aGUgZGVzaWduIG9mIHN1Y2ggdGFibGUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19hZGRfcm93ICh2b2lkICogdGFibGUsIHZvaWQgKiByb3cpIgotLlBQCi1BZGQgYSByb3cgdG8gdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX2Nsb25lX3JvdyAodm9pZCAqIHJvdykiCi0uUFAKLUNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgcm93LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgyIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2NvcHlfcm93ICh2b2lkICogZHN0X3Jvdywgdm9pZCAqIHNyY19yb3cpIgotLlBQCi1Db3B5IHRoZSBjb250ZW50cyBvZiBvbmUgcm93IGludG8gYW5vdGhlci4gVGhlIGRlc3RpbmF0aW9uIHJvdyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIHRoaXMgcm91dGluZSBpcyBjYWxsZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTAgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19jcmVhdGVfcm93ICh2b2lkKSIKLS5QUAotQ3JlYXRlIGEgbmV3IHJvdyBzdHJ1Y3R1cmUgc3VpdGFibGUgZm9yIHRoaXMgc3R5bGUgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHR5cGljYWxseSBiZSBhICdzdGFuZGFsb25lJyByb3csIGFuZCB3b3VsZCBub3QgYXV0b21hdGljYWxseSBiZSBpbnNlcnRlZCBpbnRvIGFuIGFjdHVhbCB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX2NyZWF0ZV90YWJsZSAoY29uc3QgY2hhciAqIG5hbWUsIGludCBmbGFncykiCi0uUFAKLUNyZWF0ZSBhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIHRhYmxlLiBUaGlzIGNvdWxkIGJlIGFzIHNpbXBsZSBhcyB0aGUgaGVhZCBvZiBhIGxpbmtlZCBsaXN0LCBvciBhIG1vcmUgY29tcGxleCBjb250YWluZXIgc3RydWN0dXJlLiBUaGUgJ25hbWUnIGZpZWxkIHdvdWxkIHR5cGljYWxseSBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc2V2ZXJhbCB0YWJsZXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHNhbWUgdGFibGUgaGVscGVyLiBUaGUgJ2ZsYWdzJyBmaWVsZCB3b3VsZCBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyAoaGVscGVyLXNwZWNpZmljKSBhc3BlY3RzIG9mIHRhYmxlIGJlaGF2aW91ci4KLS5QUAotVGhlIHRhYmxlIHN0cnVjdHVyZSByZXR1cm5lZCBzaG91bGQgdHlwaWNhbGx5IGJlIHJlZ2FyZGVkIGFzIGFuIG9wYXF1ZSwgcHJpdmF0ZSBzdHJ1Y3R1cmUuIEFsbCBvcGVyYXRpb25zIG9uIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBzaG91bGQgaWRlYWxseSB1c2UgdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmVzIGZyb20gdGhpcyBBUEkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjAgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX2RlbGV0ZV9yb3cgKHZvaWQgKiByb3cpIgotLlBQCi1EZWxldGUgYSByb3cgZGF0YSBzdHJ1Y3R1cmUuIFRoZSByb3cgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBhbnkgcmVsZXZhbnQgdGFibGUocykgYmVmb3JlIHRoaXMgcm91dGluZSBpcyBjYWxsZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTggb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX2RlbGV0ZV90YWJsZSAodm9pZCAqIHRhYmxlKSIKLS5QUAotUmVsZWFzZSB0aGUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRhYmxlLiBBbnkgcm93cyBzdGlsbCBjb250YWluZWQgd2l0aGluIHRoZSB0YWJsZSBzaG91bGQgYWxzbyBiZSByZW1vdmVkIGFuZCBkZWxldGVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19yZW1vdmVfZGVsZXRlX3JvdyAodm9pZCAqIHRhYmxlLCB2b2lkICogcm93KSIKLS5QUAotUmVtb3ZlIGFuZCBkZWxldGUgYSByb3cgZnJvbSB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI3IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcmVtb3ZlX3JvdyAodm9pZCAqIHRhYmxlLCB2b2lkICogcm93KSIKLS5QUAotUmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlLiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSByb3cgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgYW5kIHdvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyByb3V0aW5lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyMSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19yZXBsYWNlX3JvdyAodm9pZCAqIHRhYmxlLCB2b2lkICogb2xkX3Jvdywgdm9pZCAqIG5ld19yb3cpIgotLlBQCi1SZXBsYWNlIG9uZSByb3cgd2l0aCBhbm90aGVyIGluIHRoZSB0YWJsZS4gVGhpcyB3aWxsIHR5cGljYWxseSAoYnV0IG5vdCBuZWNlc3NhcmlseSkgaW52b2x2ZSB0d28gcm93cyBzaGFyaW5nIHRoZSBzYW1lIGluZGV4IGluZm9ybWF0aW9uIChlLmcuIHRvIGltcGxlbWVudCB1cGRhdGUvcmVzdG9yZS1zdHlsZSBTRVQgYmVoYXZpb3VyKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTMgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfcm93cy4zIGIvbWFuL25ldHNubXBfdGFibGVfcm93cy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjM3YjJkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS5USCAidGFibGVfcm93cyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX3Jvd3MgXC0gCi0uUFAKLVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggdGhlIHJvd3Mgb2YgYSB0YWJsZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19maXJzdFxmUCAodm9pZCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBmaXJzdCByb3cgb2YgdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2dldFxmUCAodm9pZCAqdGFibGUsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIGdpdmVuIHJvdyBmcm9tIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgZm9sbG93aW5nIHJvdyBmcm9tIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19nZXRfYnlpZHhcZlAgKHZvaWQgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSByb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0X2J5aWR4XGZQICh2b2lkICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgbmV4dCByb3cgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0X2J5b2lkXGZQICh2b2lkICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIHJvdyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0X2J5b2lkXGZQICh2b2lkICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIG5leHQgcm93IGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX3Jvd19jb3VudFxmUCAodm9pZCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSVJlcG9ydCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgcm93cyBvZiBhIHRhYmxlLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19yb3dfY291bnQgKHZvaWQgKiB0YWJsZSkiCi0uUFAKLVJlcG9ydCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4MiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19maXJzdCAodm9pZCAqIHRhYmxlKSIKLS5QUAotUmV0cmlldmUgdGhlIGZpcnN0IHJvdyBvZiB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI4IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X2dldCAodm9pZCAqIHRhYmxlLCB2b2lkICogcm93KSIKLS5QUAotUmV0cmlldmUgdGhlIGdpdmVuIHJvdyBmcm9tIHRoZSB0YWJsZS4gVGhpcyBjb3VsZCBlaXRoZXIgYmUgdGhlIHNhbWUgZGF0YSBwb2ludGVyLCBwYXNzZWQgaW4sIG9yIGEgc2VwYXJhdGUgcm93IHN0cnVjdHVyZSBzaGFyaW5nIHRoZSBzYW1lIGluZGV4IHZhbHVlcyAob3IgTlVMTCkuCi0uUFAKLVRoaXMgcm91dGluZSBhbHNvIHByb3ZpZGVzIGEgbWVhbnMgdG8gdGVsbCB3aGV0aGVyIGEgZ2l2ZW4gcm93IGlzIHByZXNlbnQgaW4gdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0MCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19nZXRfYnlpZHggKHZvaWQgKiB0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLVJldHJpZXZlIHRoZSByb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTUgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0X2J5b2lkICh2b2lkICogdGFibGUsIG9pZCAqIGluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5QUAotUmV0cmlldmUgdGhlIHJvdyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzAgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dCAodm9pZCAqIHRhYmxlLCB2b2lkICogcm93KSIKLS5QUAotUmV0cmlldmUgdGhlIGZvbGxvd2luZyByb3cgZnJvbSB0aGUgdGFibGUuIElmIHRoZSBzcGVjaWZpZWQgcm93IGlzIG5vdCBwcmVzZW50LCB0aGlzIHJvdXRpbmUgc2hvdWxkIHJldHVybiB0aGUgZW50cnkgbmV4dCBhZnRlciB0aGUgcG9zaXRpb24gdGhpcyByb3cgd291bGQgaGF2ZSBvY2N1cGllZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDkgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dF9ieWlkeCAodm9pZCAqIHRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotUmV0cmlldmUgdGhlIG5leHQgcm93IGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2MiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0X2J5b2lkICh2b2lkICogdGFibGUsIG9pZCAqIGluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5QUAotUmV0cmlldmUgdGhlIG5leHQgcm93IGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgT0lEcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzYgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGRhdGEuMyBiL21hbi9uZXRzbm1wX3RkYXRhLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YmQ2YTIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGRhdGEuMworKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0uVEggInRkYXRhIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGRhdGEgXC0gCi0uUFAKLUltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCX25ldHNubXBfdGRhdGFfZ2VuZXJhdGVfaW5kZXhfb2lkXGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhXGZQICogXGZCbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIGxvbmcgZmxhZ3MpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYW5kIHJldHVybnMgYSAndGRhdGEnIHRhYmxlIGRhdGEgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZVxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYW5kIHJldHVybnMgYSAndGRhdGEnIHRhYmxlIGRhdGEgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3dcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG5ldyByb3cgZGF0YSBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfY2xvbmVfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZkljbG9uZXMgYSAndGRhdGEnIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9jb3B5X3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKmRzdF9yb3csIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpzcmNfcm93KSIKLS5icgotLlJJICJcZkljb3B5IHRoZSBjb250ZW50cyBvZiBhICd0ZGF0YScgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWRlbGV0ZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgcm93IHJldHVybnMgdGhlIHRhYmxlLXNwZWNpZmljIGVudHJ5IGRhdGEgKHRoYXQgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWxldGUpIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfYWRkX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSUFkZHMgYSByb3cgdG8gdGhlIGdpdmVuIHRhYmxlIChzdG9yZWQgaW4gcHJvcGVyIGxleG9ncmFwaGljYWwgb3JkZXIpLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90ZGF0YV9yZXBsYWNlX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpvcmlncm93LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqbmV3cm93KSIKLS5icgotLlJJICJcZklzd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcmVtb3ZlX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgaXQgKG5vIGZyZWUncyBjYWxsZWQpIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhbmQgZnJlZXMgYSByb3cgb2YgdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIHRoZSB0YWJsZS1zcGVjaWZpYyBlbnRyeSBkYXRhIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RkYXRhX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGEgdGRhdGEgaGFuZGxlciBhbmQgcmV0dXJucyBpdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCX25ldHNubXBfdGRhdGFfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgdGRhdGEtYmFzZWQgTUlCIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YVxmUCAqIFxmQm5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0ZGF0YSB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQICogXGZCbmV0c25tcF90ZGF0YV9leHRyYWN0X2NvbnRhaW5lclxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0ZGF0YSBjb250YWluZXIgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGRhdGEgcm93IGJlaW5nIGFjY2Vzc2VkIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSAodGFibGUtc3BlY2lmaWMpIGVudHJ5IGJlaW5nIGFjY2Vzc2VkIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2luc2VydF90ZGF0YV9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0ZGF0YSByb3cgaW50byBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90ZGF0YV9yb3dfZW50cnlcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlICh0YWJsZS1zcGVjaWZpYykgZW50cnkgZGF0YSBmb3IgYSBnaXZlbiByb3cgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X2ZpcnN0XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfZ2V0XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gYW5vdGhlciByb3cgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X25leHRcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X2dldF9ieWlkeFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IHZhbHVlcyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfZ2V0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgb2lkICpzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5icgotLlJJICJcZklmaW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggT0lEIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19uZXh0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZklmaW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCB2YWx1ZXMgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X25leHRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBvaWQgKnNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLmJyCi0uUkkgIlxmSWZpbmRzIHRoZSBsZXhpY2FsbHkgbmV4dCByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IE9JRCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX3Jvd19jb3VudFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2NvbXBhcmVfaWR4XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSWNvbXBhcmUgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggdmFsdWVzIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfY29tcGFyZV9vaWRcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3csIG9pZCAqY29tcGFyZXRvLCBzaXplX3QgY29tcGFyZXRvX2xlbikiCi0uYnIKLS5SSSAiXGZJY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCBPSUQgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9jb21wYXJlX3N1YnRyZWVfaWR4XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2NvbXBhcmVfc3VidHJlZV9vaWRcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3csIG9pZCAqY29tcGFyZXRvLCBzaXplX3QgY29tcGFyZXRvX2xlbikiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfTm9kZV9IYW5kbGVyIFxmQl9uZXRzbm1wX3RkYXRhX2hlbHBlcl9oYW5kbGVyXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuIAotCi1UaGlzIGhlbHBlciBoZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlcmUgYWxsIHRoZSByb3dzIGFyZSBleHBlY3RlZCB0byBiZSBzdG9yZWQgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYgYW5kIG5vdCBpbiBzb21lIGV4dGVybmFsIHN0b3JhZ2UgbG9jYXRpb24uIEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGEgbGlzdCBvZiByb3dzLCB3aGVyZSBhIHJvdyBjb25zaXN0cyBvZiB0aGUgaW5kZXhlcyB0byB0aGUgdGFibGUgYW5kIGEgZ2VuZXJpYyBkYXRhIHBvaW50ZXIuIFlvdSBjYW4gdGhlbiBpbXBsZW1lbnQgYSBzdWJoYW5kbGVyIHdoaWNoIGlzIHBhc3NlZCB0aGUgZXhhY3Qgcm93IGRlZmluaXRpb24gYW5kIGRhdGEgaXQgbXVzdCByZXR1cm4gZGF0YSBmb3Igb3IgYWNjZXB0IGRhdGEgZm9yLiBDb21wbGV4IEdFVE5FWFQgaGFuZGxpbmcgaXMgZ3JlYXRseSBzaW1wbGlmaWVkIGluIHRoaXMgY2FzZS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RkYXRhX2hhbmRsZXIgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSkiCi0uUFAKLUNyZWF0ZXMgYSB0ZGF0YSBoYW5kbGVyIGFuZCByZXR1cm5zIGl0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGRhdGEgcm93IGludG8gYSByZXF1ZXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzk5IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGRhdGFfYWRkX3JvdyAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLUFkZHMgYSByb3cgdG8gdGhlIGdpdmVuIHRhYmxlIChzdG9yZWQgaW4gcHJvcGVyIGxleG9ncmFwaGljYWwgb3JkZXIpLiByZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvbiBzdWNjZXNzZnVsIGFkZGl0aW9uLiBvciBTTk1QRVJSX0dFTkVSUiBvbiBmYWlsdXJlIChFLkcuLCBpbmRleGVzIGFscmVhZHkgZXhpc3RlZCkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODYgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9jbG9uZV9yb3cgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotY2xvbmVzIGEgJ3RkYXRhJyByb3cuIERPRVMgTk9UIENMT05FIFRIRSBUQUJMRS1TUEVDSUZJQyBFTlRSWSBEQVRBLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkyIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGRhdGFfY29tcGFyZV9pZHggKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCB2YWx1ZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MTggb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90ZGF0YV9jb21wYXJlX29pZCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3csIG9pZCAqIGNvbXBhcmV0bywgc2l6ZV90IGNvbXBhcmV0b19sZW4pIgotLlBQCi1jb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IE9JRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzMSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RkYXRhX2NvcHlfcm93IChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIGRzdF9yb3csIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogc3JjX3JvdykiCi0uUFAKLWNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgJ3RkYXRhJyByb3cuIERPRVMgTk9UIENPUFkgVEhFIFRBQkxFLVNQRUNJRklDIEVOVFJZIERBVEEuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI5IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdyAodm9pZCkiCi0uUFAKLWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG5ldyByb3cgZGF0YSBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFcZlAqIG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlIChjb25zdCBjaGFyICogbmFtZSwgbG9uZyBmbGFncykiCi0uUFAKLWNyZWF0ZXMgYW5kIHJldHVybnMgYSAndGRhdGEnIHRhYmxlIGRhdGEgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotZGVsZXRlcyB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIHNwZWNpZmllZCByb3cgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YSAodGhhdCBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlbGV0ZSkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTcgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlIChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUpIgotLlBQCi1jcmVhdGVzIGFuZCByZXR1cm5zIGEgJ3RkYXRhJyB0YWJsZSBkYXRhIHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF9jb250YWluZXJcZlAqIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9jb250YWluZXIgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSB0ZGF0YSBjb250YWluZXIgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzAgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSAodGFibGUtc3BlY2lmaWMpIGVudHJ5IGJlaW5nIGFjY2Vzc2VkIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzg3IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSB0ZGF0YSByb3cgYmVpbmcgYWNjZXNzZWQgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzkgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhXGZQKiBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSB0ZGF0YSB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2MiBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLXJlZ2lzdGVycyBhIHRkYXRhLWJhc2VkIE1JQiB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1MSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhbmQgZnJlZXMgYSByb3cgb2YgdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIHRoZSB0YWJsZS1zcGVjaWZpYyBlbnRyeSBkYXRhIHJldHVybnMgdGhlIHZvaWQgKiBwb2ludGVyIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uIG9yIE5VTEwgb24gZmFpbHVyZSAoYmFkIGFyZ3VtZW50cykgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjAgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yZW1vdmVfcm93IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyBpdCAobm8gZnJlZSdzIGNhbGxlZCkgcmV0dXJucyB0aGUgcm93IHBvaW50ZXIgaXRzZWxmIG9uIHN1Y2Nlc3NmdWwgcmVtb3ZpbmcuIG9yIE5VTEwgb24gZmFpbHVyZSAoYmFkIGFyZ3VtZW50cykgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDIgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkIG5ldHNubXBfdGRhdGFfcmVwbGFjZV9yb3cgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBvcmlncm93LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIG5ld3JvdykiCi0uUFAKLXN3YXBzIG91dCBvcmlncm93IHdpdGggbmV3cm93LiBUaGlzIGRvZXMgKm5vdCogZGVsZXRlL2ZyZWUgYW55dGhpbmchIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI3IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90ZGF0YV9yb3dfZW50cnkgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotcmV0dXJucyB0aGUgKHRhYmxlLXNwZWNpZmljKSBlbnRyeSBkYXRhIGZvciBhIGdpdmVuIHJvdyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQxNCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19maXJzdCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlKSIKLS5QUAotcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyNCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19nZXQgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1maW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiBhbm90aGVyIHJvdyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQzMSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19nZXRfYnlpZHggKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCB2YWx1ZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NDcgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfZ2V0X2J5b2lkIChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIG9pZCAqIHNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLlBQCi1maW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggT0lEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDYwIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X25leHQgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0Mzkgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfbmV4dF9ieWlkeCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotZmluZHMgdGhlIGxleGljYWxseSBuZXh0IHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggdmFsdWVzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDc1IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X25leHRfYnlvaWQgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgb2lkICogc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uUFAKLWZpbmRzIHRoZSBsZXhpY2FsbHkgbmV4dCByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IE9JRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4OSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRlYjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYKQEAgLTAsMCArMSw1OCBAQAorLlRIIE5FVFNOTVBfVFJBUF9BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorc2VuZF9lYXN5X3RyYXAsCitzZW5kX3RyYXBfdmFycywKK3NlbmRfdjJ0cmFwIC0gc2VuZCBUUkFQcyBvciBJTkZPUk1zIGZyb20gYSBOZXQtU05NUCBNSUIgbW9kdWxlCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg+CisuUFAKKy5CSSAidm9pZCBzZW5kX2Vhc3lfdHJhcChpbnQgIiB0cmFwICIsIGludCAiIHNwZWNpZmljICIpOyIKKy5QUAorLkJJICJ2b2lkIHNlbmRfdHJhcF92YXJzKGludCAiIHRyYXAgIiwgaW50ICIgc3BlY2lmaWMgIiwgc3RydWN0IHZhcmlhYmxlX2xpc3QgKiIgdmFycyAiKTsiCisuUFAKKy5CSSAidm9pZCBzZW5kX3YydHJhcChzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqIiB2YXJzICIpOyIKKy5TSCBERVNDUklQVElPTgorVGhlc2UgdGhyZWUgcm91dGluZXMgbWF5IGJlIHVzZWQgdG8gc2VuZCB0cmFwcyBmcm9tIGEgTUlCIG1vZHVsZQord2l0aGluIHRoZSBOZXQtU05NUCBhZ2VudCAoaW5jbHVkaW5nIGFuIEFnZW50WCBzdWJhZ2VudCkuCisuUFAKKy5CIHNlbmRfZWFzeV90cmFwKCkKK3NlbmRzIGFuIFNOTVB2MSB0cmFwIChvciB0aGUgU05NUHYyIGVxdWl2YWxlbnQpIHRvIHRoZSBsaXN0IG9mCitjb25maWd1cmVkIHRyYXAgZGVzdGluYXRpb25zIChvciAic2lua3MiKSwgdXNpbmcgdGhlIHByb3ZpZGVkIHZhbHVlcworZm9yIHRoZSBnZW5lcmljIHRyYXAgdHlwZSwgYW5kIHNwZWNpZmljIHRyYXAgdmFsdWUuCisuUFAKKy5CIHNlbmRfdHJhcF92YXJzKCkKK2lzIHNpbWlsYXIsIGJ1dCBhcHBlbmRzIHRoZSBzdXBwbGllZCBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIHRvIHRoZQordHJhcHMgdGhhdCBhcmUgc2VudC4KKy5QUAorLkIgc2VuZF92MnRyYXAoKQordXNlcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiB2YXJpYWJsZSBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLAord2hpY2ggaXMgc2VudCB0byBTTk1QdjItY2FwYWJsZSBzaW5rcyBvbiB0aGUgY29uZmlndXJlZCBsaXN0LiAgQW4KK2VxdWl2YWxlbnQgSU5GT1JNIGlzIHNlbnQgdG8gdGhlIGNvbmZpZ3VyZWRxIGxpc3Qgb2YgaW5mb3JtIHNpbmtzLgorU2lua3MgdGhhdCBjYW4gb25seSBoYW5kbGUgU05NUHYxIHRyYXBzIGFyZSBza2lwcGVkLgorLlBQCitUaGUgdmFyaW91cyAic2VuZF90cmFwKCkiIGNhbGxzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRyYXBzIGluIGRpZmZlcmVudAorZm9ybWF0cy4gIEFuZCB0aGUgdmFyaW91cyAidHJhcHNpbmsiIGRpcmVjdGl2ZXMgYWxsb3cgeW91IHRvIHNwZWNpZnkKK2Rlc3RpbmF0aW9ucyB0byByZWNlaXZlIGRpZmZlcmVudCBmb3JtYXRzLgorQnV0ICphbGwqIHRyYXBzIGFyZSBzZW50IHRvICphbGwqIGRlc3RpbmF0aW9ucywgcmVnYXJkbGVzcyBvZiBob3cgdGhleQord2VyZSBzcGVjaWZpZWQuCisubmYKK0kuZS4gaXQncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX18gIHRyYXBzaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworICAgIHNlbmRfZWFzeV90cmFwIFxfX18gIFsgIFRyYXAgICAgICBdIF9fX18gIHRyYXAyc2luaworICAgICAgICAgICAgICAgICAgICBfX18gIFsgR2VuZXJhdG9yICBdCisgICAgc2VuZF92MnRyYXAgICAgLyAgICAgWyAgICAgICAgICAgIF0gLS0tLS0gaW5mb3Jtc2luaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhcHNlc3MKKworKk5vdCoKKyAgICAgc2VuZF9lYXN5X3RyYXAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwc2luaworICAgICBzZW5kX3YydHJhcCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXAyc2luaworICAgICA/Pz8/ICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIGluZm9ybXNpbmsKKyAgICAgPz8/PyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwc2VzcworLmZpCisuU0ggV0FSTklOR1MKK1RoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNlbmQgdGhlIHRyYXBzIGltbWVkaWF0ZWx5IHRoZXkgYXJlIGNhbGxlZC4KK0ludm9raW5nIHRoZW0gYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgaXMgbGVmdCB0byB0aGUgTUlCIG1vZHVsZSBwcm9ncmFtbWVyLgorLlNIICJTRUUgQUxTTyIKKy5CUiBzbm1wZC5jb25mICIoNSksICIgc25tcHRyYXBkICIoOCkiCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF91dGlsLjMgYi9tYW4vbmV0c25tcF91dGlsLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDZkOTAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdXRpbC4zCisrKyAvZGV2L251bGwKQEAgLTEsNTAzICswLDAgQEAKLS5USCAiTWVtb3J5IFV0aWxpdHkgUm91dGluZXMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1NZW1vcnkgVXRpbGl0eSBSb3V0aW5lcyBcLSAKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYUEFUSFxmUCAgIFBBVEhfTUFYIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhCVUZcZlAgICAoMTAyNCAqIDQpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhCVUZfTUVESVVNXGZQICAgMTAyNCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYQlVGX1NNQUxMXGZQICAgNTEyIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhCVUZfTUVTU0FHRVxmUCAgIDE1MDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWE9JRFxmUCAgIDY0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhfQ01ETElORV9PSURTXGZQICAgMTI4IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9GSUxFTU9ERV9DTE9TRURcZlAgICAwNjAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9GSUxFTU9ERV9PUEVOXGZQICAgMDY0NCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkJZVEVTSVpFXGZQKGJpdHNpemUpICAgKChiaXRzaXplICsgNykgPj4gMykiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJST1VORFVQOFxmUCh4KSAgICggKCAoeCs3KSA+PiAzICkgKiA4ICkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX1NUUk9STlVMTFxmUCh4KSAgICggeCA/IHggOiAnKG51bGwpJykiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0ZSRUVcZlAocykgICBkbyB7IGlmIChzKSB7IGZyZWUoKHZvaWQgKilzKTsgcz1OVUxMOyB9IH0gd2hpbGUoMCkiCi0uYnIKLS5SSSAiXGZJRnJlZXMgYSBwb2ludGVyIG9ubHkgaWYgaXQgaXMgIU5VTEwgYW5kIHNldHMgaXRzIHZhbHVlIHRvIE5VTEwuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX1NXSVBFX01FTVxmUChuLCBzKSAgIGRvIHsgaWYgKG4pIGZyZWUoKHZvaWQgKiluKTsgbiA9IHM7IHM9TlVMTDsgfSB3aGlsZSgwKSIKLS5icgotLlJJICJcZklGcmVlcyBwb2ludGVyIG4gb25seSBpZiBpdCBpcyAhTlVMTCwgc2V0cyBuIHRvIHMgYW5kIHNldHMgcyB0byBOVUxMLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQUxMT0NfU1RSVUNUXGZQKHMpICAgKHN0cnVjdCBzICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHMpKSIKLS5icgotLlJJICJcZklNYWxsb2NzIG1lbW9yeSBvZiBzaXplb2Yoc3RydWN0IHMpLCB6ZXJvcyBpdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BTExPQ19UWVBFREVGXGZQKHRkKSAgICh0ZCAqKSBjYWxsb2MoMSwgc2l6ZW9mKHRkKSkiCi0uYnIKLS5SSSAiXGZJTWFsbG9jcyBtZW1vcnkgb2Ygc2l6ZW9mKHQpLCB6ZXJvcyBpdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX1pFUk9cZlAocywgbCkgICBkbyB7IGlmIChzKSBtZW1zZXQocywgMCwgbCk7IH0gd2hpbGUoMCkiCi0uYnIKLS5SSSAiXGZJWmVyb3MgbCBieXRlcyBvZiBtZW1vcnkgc3RhcnRpbmcgYXQgcy4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRPVVBQRVJcZlAoYykgICAoYyA+PSAnYScgJiYgYyA8PSAneicgPyBjIC0gKCdhJyAtICdBJykgOiBjKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRPTE9XRVJcZlAoYykgICAoYyA+PSAnQScgJiYgYyA8PSAnWicgPyBjICsgKCdhJyAtICdBJykgOiBjKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhFWDJWQUxcZlAocykgICAoKGlzYWxwaGEocykgPyAoVE9MT1dFUihzKS0nYScrMTApIDogKFRPTE9XRVIocyktJzAnKSkgJiAweGYpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVkFMMkhFWFxmUChzKSAgICggKHMpICsgKCgocykgPj0gMTApID8gKCdhJy0xMCkgOiAnMCcpICkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWFxmUChhLCBiKSAgICgoYSkgPiAoYikgPyAoYSkgOiAoYikpIgotLmJyCi0uUkkgIlxmSUNvbXB1dGVycyB0aGUgbWF4aW11bSBvZiBhIGFuZCBiLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NSU5cZlAoYSwgYikgICAoKGEpID4gKGIpID8gKGIpIDogKGEpKSIKLS5icgotLlJJICJcZklDb21wdXRlcnMgdGhlIG1pbmltdW0gb2YgYSBhbmQgYi4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFDUk9fVkFMX1RPX1NUUlxmUChzKSAgIFNOTVBfTUFDUk9fVkFMX1RPX1NUUl9QUklWKHMpIgotLmJyCi0uUkkgIlxmSUV4cGFuZHMgdG8gc3RyaW5nIHdpdGggdmFsdWUgb2YgdGhlIHMuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BQ1JPX1ZBTF9UT19TVFJfUFJJVlxmUChzKSAgICNzIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUVVJVEZVTlxmUChlLCBsKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRJRkZUSU1FVkFMXGZQKG5vdywgdGhlbiwgZGlmZikiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk1cZlAgICAxMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQklTVFJBTlNGT1JNXGZQKHR0eXBlLCB0b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkVOR0lORVRJTUVfTUFYXGZQICAgMjE0NzQ4MzY0NyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkVOR0lORUJPT1RfTUFYXGZQICAgMjE0NzQ4MzY0NyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQnNubXBfY3N0cmNhdFxmUChiLCBsLCBvLCBhLCBzKSAgIHNubXBfc3RyY2F0KGIsbCxvLGEsKGNvbnN0IHVfY2hhciAqKXMpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCAqIFxmQm1hcmtlcl90XGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9yZWFsbG9jXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbikiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYXQgYnkgKmJ1Ziwgd2hpY2ggaXMgaW5pdGlhbGx5IG9mIHNpemUgKmJ1Zl9sZW4uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcmVlX3plcm9cZlAgKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpIgotLmJyCi0uUkkgIlxmSXplcm9zIG1lbW9yeSBiZWZvcmUgZnJlZWluZyBpdC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJtYWxsb2NfcmFuZG9tXGZQIChzaXplX3QgKnNpemUpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgcG9pbnRlciB0byBhbGxvY2FlZCAmIHNldCBidWZmZXIgb24gc3VjY2Vzcywgc2l6ZSBjb250YWlucyBudW1iZXIgb2YgcmFuZG9tIGJ5dGVzIGZpbGxlZC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJtYWxsb2NfemVyb1xmUCAoc2l6ZV90IHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJtZW1kdXBcZlAgKHVfY2hhciAqKnRvLCBjb25zdCB1X2NoYXIgKmZyb20sIHNpemVfdCBzaXplKSIKLS5icgotLlJJICJcZklEdXBsaWNhdGVzIGEgbWVtb3J5IGJsb2NrLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQmJpbmFyeV90b19oZXhcZlAgKGNvbnN0IHVfY2hhciAqaW5wdXQsIHNpemVfdCBsZW4sIGNoYXIgKipvdXRwdXQpIgotLmJyCi0uUkkgIlxmSWNvbnZlcnRzIGJpbmFyeSB0byBoZXhpZGVjaW1hbCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2hleF90b19iaW5hcnlcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZGVsaW0pIgotLmJyCi0uUkkgIlxmSWNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyAod2l0aCBzcGVjaWZpZWQgZGVsaW1pdGVycykgdG8gYmluYXJ5IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfaGV4X3RvX2JpbmFyeVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqaGV4KSIKLS5icgotLlJJICJcZkljb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgdG8gYmluYXJ5IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhleF90b19iaW5hcnkyXGZQIChjb25zdCB1X2NoYXIgKmlucHV0LCBzaXplX3QgbGVuLCBjaGFyICoqb3V0cHV0KSIKLS5icgotLlJJICJcZkloZXhfdG9fYmluYXJ5MiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2RlY2ltYWxfdG9fYmluYXJ5XGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqZGVjaW1hbCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc3RyY2F0XGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICpzKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbmV0c25tcF9zdHJkdXBfYW5kX251bGxcZlAgKGNvbnN0IHVfY2hhciAqZnJvbSwgc2l6ZV90IGZyb21fbGVuKSIKLS5icgotLlJJICJcZkljb3BpZXMgYSAocG9zc2libGUpIHVudGVybWluYXRlZCBzdHJpbmcgb2YgYSBnaXZlbiBsZW5ndGggaW50byBhIG5ldyBidWZmZXIgYW5kIG51bGwgdGVybWluYXRlcyBpdCBhcyB3ZWxsIChuZXcgYnVmZmVyIE1BWSBiZSBvbmUgYnl0ZSBsb25nZXIgdG8gYWNjb3VudCBmb3IgdGhpcyBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZHVtcF9jaHVua1xmUCAoY29uc3QgY2hhciAqZGVidWd0b2tlbiwgY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgc2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmR1bXBfc25tcEVuZ2luZUlEXGZQIChjb25zdCB1X2NoYXIgKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIm1hcmtlcl90IFxmQmF0aW1lX25ld01hcmtlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlIGEgbmV3IHRpbWUgbWFya2VyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCYXRpbWVfc2V0TWFya2VyXGZQIChtYXJrZXJfdCBwbSkiCi0uYnIKLS5SSSAiXGZJc2V0IGEgdGltZSBtYXJrZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJhdGltZV9kaWZmXGZQIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5icgotLlJJICJcZklSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiBtc2VjKSBiZXR3ZWVuIHRoZSB0d28gbWFya2Vycy4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCdWF0aW1lX2RpZmZcZlAgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyBtc2VjKSBiZXR3ZWVuIHRoZSB0d28gbWFya2Vycy4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCdWF0aW1lX2hkaWZmXGZQIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5icgotLlJJICJcZklSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgMS8xMDB0aCBzZWNzKSBiZXR3ZWVuIHRoZSB0d28gbWFya2VycyAoZnVuY3Rpb25hbGx5IHRoaXMgaXMgd2hhdCBzeXNVcFRpbWUgbmVlZHMpLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJhdGltZV9yZWFkeVxmUCAobWFya2VyX3QgcG0sIGludCBkZWx0YVQpIgotLmJyCi0uUkkgIlxmSVRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lIChpbiBtc2VjKSA/IFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVhdGltZV9yZWFkeVxmUCAobWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YVQpIgotLmJyCi0uUkkgIlxmSVRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lIChpbiBtc2VjKSA/IFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm1hcmtlcl90dGlja3NcZlAgKG1hcmtlcl90IHBtKSIKLS5icgotLlJJICJcZklSZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lVGlja3Mgc2luY2UgdGhlIGdpdmVuIG1hcmtlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCdGltZXZhbF90dGlja3NcZlAgKHN0cnVjdCB0aW1ldmFsICp0dikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQm5ldHNubXBfZ2V0ZW52XGZQIChjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklOb24gV2luZG93czogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgb3IgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgZG9lcyBub3QgZXhpc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWRkcnN0cl9odG9uXGZQIChjaGFyICpwdHIsIHNpemVfdCBsZW4pIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRlZmluZSBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICIjZGVmaW5lIERJRkZUSU1FVkFMKG5vdywgdGhlbiwgZGlmZikiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG5vdy50dl9zZWMtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbm93LnR2X3VzZWMgKz0gMTAwMDAwMEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkaWZmLnR2X3NlYyAgPSBub3cudHZfc2VjICAtIHRoZW4udHZfc2VjOyAgICAgICBcCi0gICAgICAgIGRpZmYudHZfdXNlYyA9IG5vdy50dl91c2VjIC0gdGhlbi50dl91c2VjOyAgICAgIFwKLSAgICAgICAgaWYgKGRpZmYudHZfdXNlYyA+IDEwMDAwMDBMKXsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGRpZmYudHZfdXNlYyAtPSAxMDAwMDAwTDsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZGlmZi50dl9zZWMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzEgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIElTVFJBTlNGT1JNKHR0eXBlLCB0b2lkKSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi0hc25tcF9vaWRfY29tcGFyZSh0dHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB1c20gIyMgdG9pZCAjIyBQcm90b2NvbCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNKQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTAgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFFVSVRGVU4oZSwgbCkiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgotaWYgKCAoZSkgIT0gU05NUEVSUl9TVUNDRVNTKSB7ICAgXAotICAgICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX0dFTkVSUjsgIFwKLSAgICAgICAgICAgICAgICBnb3RvIGwgOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0KLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE4IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX0ZSRUUocykgICBkbyB7IGlmIChzKSB7IGZyZWUoKHZvaWQgKilzKTsgcz1OVUxMOyB9IH0gd2hpbGUoMCkiCi0uUFAKLUZyZWVzIGEgcG9pbnRlciBvbmx5IGlmIGl0IGlzICFOVUxMIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byBOVUxMLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzIG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX01BQ1JPX1ZBTF9UT19TVFIocykgICBTTk1QX01BQ1JPX1ZBTF9UT19TVFJfUFJJVihzKSIKLS5QUAotRXhwYW5kcyB0byBzdHJpbmcgd2l0aCB2YWx1ZSBvZiB0aGUgcy4gSWYgcyBpcyBtYWNybywgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgdmFsdWUgb2YgdGhlIG1hY3JvLiBFeGFtcGxlOiBkZWZpbmUgVEVTVCAxMjM0IFxmQlNOTVBfTUFDUk9fVkFMX1RPX1NUUihURVNUKVxmUCBleHBhbmRzIHRvICcxMjM0JyBTTk1QX01BQ1JPX1ZBTF9UT19TVFIoVEVTVCsxKSBleHBhbmRzIHRvICcxMjM0KzEnIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTkgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfTUFMTE9DX1NUUlVDVChzKSAgIChzdHJ1Y3QgcyAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzKSkiCi0uUFAKLU1hbGxvY3MgbWVtb3J5IG9mIHNpemVvZihzdHJ1Y3QgcyksIHplcm9zIGl0IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NCBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9NQUxMT0NfVFlQRURFRih0ZCkgICAodGQgKikgY2FsbG9jKDEsIHNpemVvZih0ZCkpIgotLlBQCi1NYWxsb2NzIG1lbW9yeSBvZiBzaXplb2YodCksIHplcm9zIGl0IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2OCBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9NQVgoYSwgYikgICAoKGEpID4gKGIpID8gKGEpIDogKGIpKSIKLS5QUAotQ29tcHV0ZXJzIHRoZSBtYXhpbXVtIG9mIGEgYW5kIGIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfTUlOKGEsIGIpICAgKChhKSA+IChiKSA/IChiKSA6IChhKSkiCi0uUFAKLUNvbXB1dGVycyB0aGUgbWluaW11bSBvZiBhIGFuZCBiLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg5IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX1NXSVBFX01FTShuLCBzKSAgIGRvIHsgaWYgKG4pIGZyZWUoKHZvaWQgKiluKTsgbiA9IHM7IHM9TlVMTDsgfSB3aGlsZSgwKSIKLS5QUAotRnJlZXMgcG9pbnRlciBuIG9ubHkgaWYgaXQgaXMgIU5VTEwsIHNldHMgbiB0byBzIGFuZCBzZXRzIHMgdG8gTlVMTC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NyBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9aRVJPKHMsIGwpICAgZG8geyBpZiAocykgbWVtc2V0KHMsIDAsIGwpOyB9IHdoaWxlKDApIgotLlBQCi1aZXJvcyBsIGJ5dGVzIG9mIG1lbW9yeSBzdGFydGluZyBhdCBzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcyIG9mIGZpbGUgdG9vbHMuaC4KLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAibG9uZyBhdGltZV9kaWZmIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5QUAotUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzk4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAibWFya2VyX3QgYXRpbWVfbmV3TWFya2VyICh2b2lkKSIKLS5QUAotY3JlYXRlIGEgbmV3IHRpbWUgbWFya2VyLiBOT1RFOiBDYWxsZXIgbXVzdCBmcmVlIHRpbWUgbWFya2VyIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NzQgb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgYXRpbWVfcmVhZHkgKG1hcmtlcl90IHBtLCBpbnQgZGVsdGFUKSIKLS5QUAotVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8gUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NTMgb2YgZmlsZSB0b29scy5jLgotLlNTICJ2b2lkIGF0aW1lX3NldE1hcmtlciAobWFya2VyX3QgcG0pIgotLlBQCi1zZXQgYSB0aW1lIG1hcmtlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3ODUgb2YgZmlsZSB0b29scy5jLgotLlNTICJ1X2ludCBiaW5hcnlfdG9faGV4IChjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKiBvdXRwdXQpIgotLlBQCi1jb252ZXJ0cyBiaW5hcnkgdG8gaGV4aWRlY2ltYWwgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkkqaW5wdXRcZlAgQmluYXJ5IGRhdGEuIAotLmJyCi1cZklsZW5cZlAgTGVuZ3RoIG9mIGJpbmFyeSBkYXRhLiAKLS5icgotXGZJKipvdXRwdXRcZlAgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyBlcXVpdmFsZW50IGluIGhleC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLW9sZW4gTGVuZ3RoIG9mIG91dHB1dCBzdHJpbmcgbm90IGluY2x1ZGluZyBOVUxMIHRlcm1pbmF0b3IuCi0uUkUKLS5QUAotRklYIElzIHRoZXJlIGFscmVhZHkgb25lIG9mIHRoZXNlIGluIHRoZSBVQ0QgU05NUCBjb2RlYmFzZT8gVGhlIG9sZCBvbmUgc2hvdWxkIGJlIHVzZWQsIG9yIHRoaXMgb25lIHNob3VsZCBiZSBtb3ZlZCB0byBcZkJzbm1wbGliL3NubXBfYXBpLmNcZlAuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjkwIG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidm9pZCBmcmVlX3plcm8gKHZvaWQgKiBidWYsIHNpemVfdCBzaXplKSIKLS5QUAotemVyb3MgbWVtb3J5IGJlZm9yZSBmcmVlaW5nIGl0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSSpidWZcZlAgUG9pbnRlciBhdCBieXRlcyB0byBmcmVlLiAKLS5icgotXGZJc2l6ZVxmUCBOdW1iZXIgb2YgYnl0ZXMgaW4gYnVmLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4OCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBoZXhfdG9fYmluYXJ5MiAoY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4sIGNoYXIgKiogb3V0cHV0KSIKLS5QUAotaGV4X3RvX2JpbmFyeTIgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkkqaW5wdXRcZlAgUHJpbnRhYmxlIGRhdGEgaW4gYmFzZTE2LiAKLS5icgotXGZJbGVuXGZQIExlbmd0aCBpbiBieXRlcyBvZiBkYXRhLiAKLS5icgotXGZJKipvdXRwdXRcZlAgQmluYXJ5IGRhdGEgZXF1aXZhbGVudCB0byBpbnB1dC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVNOTVBFUlJfR0VORVJSIG9uIGZhaWx1cmUsIG90aGVyd2lzZSBsZW5ndGggb2YgYWxsb2NhdGVkIHN0cmluZy4KLS5SRQotLlBQCi1JbnB1dCBvZiBhbiBvZGQgbGVuZ3RoIGlzIHJpZ2h0IGFsaWduZWQuCi0uUFAKLUZJWCBBbm90aGVyIHZlcnNpb24gb2YgJ2hleC10by1iaW5hcnknIHdoaWNoIHRha2VzIG9kZCBsZW5ndGggaW5wdXQgc3RyaW5ncy4gSXQgYWxzbyBhbGxvY2F0ZXMgdGhlIG1lbW9yeSB0byBob2xkIHRoZSBiaW5hcnkgZGF0YS4gU2hvdWxkIGJlIGludGVncmF0ZWQgd2l0aCB0aGUgb2ZmaWNpYWwgaGV4X3RvX2JpbmFyeSgpIGZ1bmN0aW9uLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMyNyBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInVfY2hhciogbWFsbG9jX3JhbmRvbSAoc2l6ZV90ICogc2l6ZSkiCi0uUFAKLVJldHVybnMgcG9pbnRlciB0byBhbGxvY2FlZCAmIHNldCBidWZmZXIgb24gc3VjY2Vzcywgc2l6ZSBjb250YWlucyBudW1iZXIgb2YgcmFuZG9tIGJ5dGVzIGZpbGxlZC4gYnVmIGlzIE5VTEwgYW5kICpzaXplIHNldCB0byBLTVQgZXJyb3IgdmFsdWUgdXBvbiBmYWlsdXJlLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXNpemVcZlAgTnVtYmVyIG9mIGJ5dGVzIHRvIG1hbGxvYygpIGFuZCBmaWxsIHdpdGggcmFuZG9tIGJ5dGVzLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBtYWxsb2NlZCBidWZmZXIgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDggb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgbWFya2VyX3R0aWNrcyAobWFya2VyX3QgcG0pIgotLlBQCi1SZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lVGlja3Mgc2luY2UgdGhlIGdpdmVuIG1hcmtlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MDEgb2YgZmlsZSB0b29scy5jLgotLlNTICJ2b2lkICogbmV0c25tcF9tZW1kdXAgKGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3Qgc2l6ZSkiCi0uUFAKLUR1cGxpY2F0ZXMgYSBtZW1vcnkgYmxvY2suIENvcGllcyBhIGV4aXN0aW5nIG1lbW9yeSBsb2NhdGlvbiBmcm9tIGEgcG9pbnRlciB0byBhbm90aGVyLCBuZXdseSBtYWxsb2NlZCwgcG9pbnRlci4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0b1xmUCBQb2ludGVyIHRvIGFsbG9jYXRlIGFuZCBjb3B5IG1lbW9yeSB0by4gCi0uYnIKLVxmSWZyb21cZlAgUG9pbnRlciB0byBjb3B5IG1lbW9yeSBmcm9tLiAKLS5icgotXGZJc2l6ZVxmUCBTaXplIG9mIHRoZSBkYXRhIHRvIGJlIGNvcGllZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVNOTVBFUlJfU1VDQ0VTUyBvbiBzdWNjZXNzLCBTTk1QRVJSX0dFTkVSUiBvbiBmYWlsdXJlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzOSBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImNoYXIqIG5ldHNubXBfZ2V0ZW52IChjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLU5vbiBXaW5kb3dzOiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBvciBOVUxMIGlmIHRoZSBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBkb2VzIG5vdCBleGlzdC4gV2luZG93czogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCwgdGhlIFxmQnZhcmlhYmxlXGZQIGlzIGxvb2tlZCB1cCBpbiB0aGUgcmVnaXN0cnkgaW4gSEtDVVxcTmV0LVNOTVAgb3IgSEtMTVxcTmV0LVNOTVAgKHdoaWNoZXZlciBpdCBmaW5kcyBmaXJzdCkgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUC4gSXQgdGhlbiByZXR1cm5zIGEgcG9pbnRlciB0byBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5Mjkgb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgbmV0c25tcF9oZXhfdG9fYmluYXJ5ICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBjaGFyICogaGV4LCBjb25zdCBjaGFyICogZGVsaW0pIgotLlBQCi1jb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgKHdpdGggc3BlY2lmaWVkIGRlbGltaXRlcnMpIHRvIGJpbmFyeSBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBhZGRyZXNzIG9mIGEgcG9pbnRlciAocG9pbnRlciB0byBwb2ludGVyKSBmb3IgdGhlIG91dHB1dCBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgc2V0LCB0aGUgYnVmZmVyIG1heSBiZSBncm93biB2aWEgc25tcF9yZWFsbG9jIHRvIGFjY29tb2RhdGUgdGhlIGRhdGEuCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgcG9pbnRlciB0byBhIHNpemVfdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNpemUgb2YgYnVmLgotLmJyCi1cZklvZmZzZXRcZlAgT24gaW5wdXQsIGEgcG9pbnRlciB0byBhIHNpemVfdCBpbmRpY2F0aW5nIGFuIG9mZnNldCBpbnRvIGJ1Zi4gVGhlIGJpbmFyeSBkYXRhIHdpbGwgYmUgc3RvcmVkIGF0IHRoaXMgb2Zmc2V0LiBPbiBvdXRwdXQsIHRoaXMgcG9pbnRlciB3aWxsIGhhdmUgdXBkYXRlZCB0aGUgb2Zmc2V0IHRvIGJlIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBjb252ZXJ0ZWQgZGF0YS4KLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBJZiB0cnVlLCB0aGUgYnVmZmVyIGNhbiBiZSByZWFsbG9jYXRlZC4gSWYgZmFsc2UsIGFuZCB0aGUgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgc3RyaW5nLCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgotLmJyCi1cZkloZXhcZlAgcG9pbnRlciB0byBoZXggc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC4gTWF5IGJlIHByZWZpeGVkIGJ5ICcweCcgb3IgJzBYJy4KLS5icgotXGZJZGVsaW1cZlAgcG9pbnQgdG8gYSBzdHJpbmcgb2YgYWxsb3dlZCBkZWxpbWl0ZXJzIGJldHdlZW4gYnl0ZXMuIElmIG5vdCBzcGVjaWZpZWQsIGFueSBub24taGV4IGNoYXJhY3RlcnMgd2lsbCBiZSBhbiBlcnJvci4KLS5SRQotLlBQCi1cZkJSZXR1cm4gdmFsdWVzOlxmUAotLlJTIDQKLVxmSTFcZlAgc3VjY2VzcyAKLS5icgotXGZJMFxmUCBlcnJvciAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyOCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImNoYXIqIG5ldHNubXBfc3RyZHVwX2FuZF9udWxsIChjb25zdCB1X2NoYXIgKiBmcm9tLCBzaXplX3QgZnJvbV9sZW4pIgotLlBQCi1jb3BpZXMgYSAocG9zc2libGUpIHVudGVybWluYXRlZCBzdHJpbmcgb2YgYSBnaXZlbiBsZW5ndGggaW50byBhIG5ldyBidWZmZXIgYW5kIG51bGwgdGVybWluYXRlcyBpdCBhcyB3ZWxsIChuZXcgYnVmZmVyIE1BWSBiZSBvbmUgYnl0ZSBsb25nZXIgdG8gYWNjb3VudCBmb3IgdGhpcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1OCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBzbm1wX2hleF90b19iaW5hcnkgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKiBoZXgpIgotLlBQCi1jb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgdG8gYmluYXJ5IFxmQk5vdGU6XGZQCi0uUlMgNAotVGhpcyBpcyBhIHdyYXBwZXIgd2hpY2ggY2FsbHMgbmV0c25tcF9oZXhfdG9fYmluYXJ5IHdpdGggYSBkZWxpbWl0ZXIgc3RyaW5nIG9mICcgJy4KLS5SRQotLlBQCi1TZWUgbmV0c25tcF9oZXhfdG9fYmluYXJ5IGZvciBwYXJhbWV0ZXIgZGVzY3JpcHRpb25zLgotLlBQCi1cZkJSZXR1cm4gdmFsdWVzOlxmUAotLlJTIDQKLVxmSTFcZlAgc3VjY2VzcyAKLS5icgotXGZJMFxmUCBlcnJvciAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4OCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBzbm1wX3JlYWxsb2MgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4pIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBhdCBieSAqYnVmLCB3aGljaCBpcyBpbml0aWFsbHkgb2Ygc2l6ZSAqYnVmX2xlbi4gQ29udGVudHMgYXJlIHByZXNlcnZlZCAqKkFUIFRIRSBCT1RUT00gRU5EIE9GIFRIRSBCVUZGRVIqKi4gSWYgbWVtb3J5IGNhbiBiZSAocmUtKWFsbG9jYXRlZCB0aGVuIGl0IHJldHVybnMgMSwgZWxzZSBpdCByZXR1cm5zIDAuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIHBvaW50ZXIgdG8gYSBidWZmZXIgcG9pbnRlciAKLS5icgotXGZJYnVmX2xlblxmUCBwb2ludGVyIHRvIGN1cnJlbnQgc2l6ZSBvZiBidWZmZXIgaW4gYnl0ZXMKLS5SRQotLlBQCi1cZkJOb3RlOlxmUAotLlJTIDQKLVRoZSBjdXJyZW50IHJlLWFsbG9jYXRpb24gYWxnb3JpdGhtIGlzIHRvIGluY3JlYXNlIHRoZSBidWZmZXIgc2l6ZSBieSB3aGljaGV2ZXIgaXMgdGhlIGdyZWF0ZXIgb2YgMjU2IGJ5dGVzIG9yIHRoZSBjdXJyZW50IGJ1ZmZlciBzaXplLCB1cCB0byBhIG1heGltdW0gaW5jcmVhc2Ugb2YgODE5MiBieXRlcy4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjQgb2YgZmlsZSB0b29scy5jLgotLlNTICJ1X2xvbmcgdWF0aW1lX2RpZmYgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLlBQCi1SZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODE1IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidV9sb25nIHVhdGltZV9oZGlmZiAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uUFAKLVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyAxLzEwMHRoIHNlY3MpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzIChmdW5jdGlvbmFsbHkgdGhpcyBpcyB3aGF0IHN5c1VwVGltZSBuZWVkcykuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODMzIG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IHVhdGltZV9yZWFkeSAobWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YVQpIgotLlBQCi1UZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPyBSZXR1cm5zIDAgaWYgdGVzdCBmYWlscyBvciBjYW5ub3QgYmUgdGVzdGVkIChubyBtYXJrZXIpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3NSBvZiBmaWxlIHRvb2xzLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdXRpbGl0aWVzLjMgYi9tYW4vbmV0c25tcF91dGlsaXRpZXMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiZjUzMy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF91dGlsaXRpZXMuMworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS5USCAidXRpbGl0eV9oYW5kbGVycyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXV0aWxpdHlfaGFuZGxlcnMgXC0gCi0uUFAKLVNpbXBsaWZ5IHJlcXVlc3QgcHJvY2Vzc2luZyBBIGdyb3VwIG9mIGhhbmRsZXJzIGludGVuZGVkIHRvIHNpbXBsaWZ5IGNlcnRhaW4gYXNwZWN0cyBvZiBwcm9jZXNzaW5nIGEgcmVxdWVzdCBmb3IgYSBNSUIgb2JqZWN0LiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJidWxrX3RvX25leHRcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNvbnZlcnQgR0VUQlVMSyByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmNhY2hlX2hhbmRsZXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSU1haW50YWlucyBhIGNhY2hlIG9mIGRhdGEgZm9yIHVzZSBieSBsb3dlciBsZXZlbCBoYW5kbGVycy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJkZWJ1Z1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUHJpbnQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFuZGxlciBjaGFpbiBiZWluZyBjYWxsZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbW9kZV9lbmRfY2FsbFxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiByZXF1ZXN0cywgY2FsbCBhbm90aGVyIGhhbmRsZXIgaG9vay4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJtdWx0aXBsZXhlclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJU3BsaXRzIG1vZGUgcmVxdWVzdHMgaW50byBjYWxscyB0byBkaWZmZXJlbnQgaGFuZGxlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCcmVhZF9vbmx5XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklNYWtlIHlvdXIgaGFuZGxlciByZWFkX29ubHkgYXV0b21hdGljYWxseSBUaGUgb25seSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXJyb3IgZm9yIGFueSByZXF1ZXN0cyBwYXNzZWQgdG8gaXQgaW4gYSBTRVQgbW9kZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJyb3dfbWVyZ2VcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNhbGxzIHN1YiBoYW5kbGVycyB3aXRoIHJlcXVlc3QgZm9yIG9uZSByb3cgYXQgYSB0aW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnNlcmlhbGl6ZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ2FsbHMgc3ViIGhhbmRsZXJzIG9uZSByZXF1ZXN0IGF0IGEgdGltZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJzdGFzaF90b19uZXh0XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDb252ZXJ0IEdFVF9TVEFTSCByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotU2ltcGxpZnkgcmVxdWVzdCBwcm9jZXNzaW5nIEEgZ3JvdXAgb2YgaGFuZGxlcnMgaW50ZW5kZWQgdG8gc2ltcGxpZnkgY2VydGFpbiBhc3BlY3RzIG9mIHByb2Nlc3NpbmcgYSByZXF1ZXN0IGZvciBhIE1JQiBvYmplY3QuIAotCi1UaGVzZSBoZWxwZXJzIGRvIG5vdCBpbXBsZW1lbnQgYW55IE1JQiBvYmplY3RzIHRoZW1zZWx2ZXMuIFJhdGhlciB0aGV5IGhhbmRsZSBzcGVjaWZpYyBnZW5lcmljIHNpdHVhdGlvbnMsIGVpdGhlciByZXR1cm5pbmcgYW4gZXJyb3IsIG9yIHBhc3NpbmcgYSAocG9zc2libHkgc2ltcGxlcikgcmVxdWVzdCBkb3duIHRvIGxvd2VyIGxldmVsIGhhbmRsZXJzLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDFmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZgpAQCAtMCwwICsxLDIxNiBAQAorLlRIIE5FVFNOTVBfVkFSQklORF9BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorc25tcF9wZHVfYWRkX3ZhcmlhYmxlLAorc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSwKK3NubXBfYWRkX251bGxfdmFyLAorc25tcF9jbG9uZV92YXJiaW5kLAorc25tcF9zZXRfdmFyX29iamlkLAorc25tcF9zZXRfdmFyX3ZhbHVlLAorc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlLAorc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIsCitwcmludF92YXJpYWJsZSwKK2ZwcmludF92YXJpYWJsZSwKK3NucHJpbnRfdmFyaWFibGUsCitwcmludF92YWx1ZSwKK2ZwcmludF92YWx1ZSwKK3NucHJpbnRfdmFsdWUsCitzbm1wX2ZyZWVfdmFyLAorc25tcF9mcmVlX3ZhcmJpbmQgLSBuZXRzbm1wX3ZhcmJpbmRfYXBpIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KKy5TUyBDcmVhdGlvbgorLlBQCisuQiAibmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX3BkdV9hZGRfdmFyaWFibGUoIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoiIHBkdSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICIgdHlwZSAiLCBjb25zdCB2b2lkICoiIHZhbHVlICIsIHNpemVfdCAiIGxlbiAiKTsiCisuYnIKKy5CICJuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJsaXN0ICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgIiB0eXBlICIsIGNvbnN0IHZvaWQgKiIgdmFsdWUgIiwgc2l6ZV90ICIgbGVuICIpOyIKKy5icgorLkIgIm5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9hZGRfbnVsbF92YXIoIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoiIHBkdSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIik7IgorLlBQCisuQiAibmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX2Nsb25lX3ZhcmJpbmQoIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJsaXN0ICIpOyIKKy5TUyBTZXR0aW5nIFZhbHVlcworLlBQCisuQkkgImludCAgc25tcF9zZXRfdmFyX29iamlkKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqICIgdmFyaWFibGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiKTsiCisuYnIKKy5CSSAiaW50ICBzbm1wX3NldF92YXJfdmFsdWUoIG5ldHNubXBfdmFyaWFibGVfbGlzdCogIiB2YXJpYWJsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogIiB2YWx1ZSAiLCBzaXplX3QgIiB2YWxsZW4gIik7IgorLmJyCisuQkkgImludCAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqICIgdmFyaWFibGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICIgdHlwZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogIiB2YWx1ZSAiLCBzaXplX3QgIiB2YWxsZW4gIik7IgorLmJyCisuQkkgImludCAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIG5ldHNubXBfdmFyaWFibGVfbGlzdCogIiB2YXJpYWJsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgIiB0eXBlICIsIGxvbmcgIiB2YWx1ZSAiKTsiCisuYnIKKy5TUyBPdXRwdXQKKy5QUAorLkJJICJ2b2lkICBwcmludF92YXJpYWJsZShjb25zdCBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgIiAib2JqaWRsZW4iICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5CSSAidm9pZCBmcHJpbnRfdmFyaWFibGUoRklMRSAqIiBmcCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLkJJICJpbnQgc25wcmludF92YXJpYWJsZShjaGFyICoiICJidWYiICIsIHNpemVfdCAiICJsZW4iICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLlBQCisuQkkgInZvaWQgIHByaW50X3ZhbHVlKGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuQkkgInZvaWQgZnByaW50X3ZhbHVlKEZJTEUgKiIgZnAgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5CSSAiaW50IHNucHJpbnRfdmFsdWUoY2hhciAqIiBidWYgIiwgc2l6ZV90ICIgImxlbiIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5icgorLlNTIERlbGV0aW9uCisuUFAKKy5CSSAidm9pZCBzbm1wX2ZyZWVfdmFyKCAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuQkkgInZvaWQgc25tcF9mcmVlX3ZhcmJpbmQoIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZXMgIik7IgorLmJyCisuUFAKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdmFyaWFibGUgYmluZGluZ3MgZmFsbCBpbnRvIGZvdXIgZ3JvdXBzIC0gCitkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uLCBzZXR0aW5nIG9mIHZhbHVlcywgb3V0cHV0IGFuZCBkZWxldGlvbiBvZiB2YXJiaW5kcy4KKy5TUyBDcmVhdGlvbgorLkIgc25tcF9wZHVfYWRkX3ZhcmlhYmxlCit3aWxsIGNyZWF0ZSBhIG5ldyB2YXJiaW5kIHN0cnVjdHVyZSwgaW5pdGlhbGlzZWQgd2l0aCB0aGUgbmFtZSAoCisuSVIgb2JqaWQgIiwgIiBvYmppZGxlbgorKSwgc3ludGF4ICgKKy5JIHR5cGUKKykgYW5kIHZhbHVlICgKKy5JIHZhbHVlICIsICIgbGVuCispIHByb3ZpZGVkLgorVGhpcyB2YXJiaW5kIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgdmFyYmluZCBsaXN0IGluCit0aGUgZ2l2ZW4gUERVLgorLlBQCisuQiBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlCitpcyBzaW1pbGFyLCBidXQgYXBwZW5kcyB0aGUgbmV3IHZhcmJpbmQgdG8gdGhlIGVuZCBvZiB0aGUKK3ZhcmJpbmQgbGlzdCBwcm92aWRlZC4KK1doZW4gYWRkaW5nIHRoZSBmaXJzdCB2YXJiaW5kIHRvIGFuIGVtcHR5IGxpc3QsIHNpbXBseQorcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgaGVhZCBvZiB0aGUgbGlzdDoKKy5JUAorICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZsID0gTlVMTDsKKyAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgKKyAgICAgICAgICAgICZ2bCwgbmFtZTEsIG5hbWUxX2xlbiwKKyAgICAgICAgICAgIEFTTl9cZklUWVBFXGZQLCAmdmFsMSwgdmFsMV9sZW4pOworICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKAorICAgICAgICAgICAgJnZsLCBuYW1lMiwgbmFtZTJfbGVuLAorICAgICAgICAgICAgQVNOX1xmSVRZUEVcZlAsICZ2YWwyLCB2YWwyX2xlbik7CisuUFAKK0luIGJvdGggY2FzZXMsIHRoZSByb3V0aW5lIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3Cit2YXJiaW5kIHN0cnVjdHVyZSAob3IgTlVMTCBpZiB0aGUgdmFyYmluZCBjcmVhdGlvbiBmYWlscykuCisuUFAKKy5CIHNubXBfYWRkX251bGxfdmFyCitpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFkZCBhbiBlbXB0eSB2YXJiaW5kIHRvIHRoZSBQRFUuCit3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSB0aGUgTlVMTCB2YWx1ZSBleHBsaWNpdGx5LgorVGhpcyBpcyB0aGUgbm9ybWFsIG1lY2hhbmlzbSBmb3IgY29uc3RydWN0aW5nIGEgR0VUIChvciBzaW1pbGFyKQoraW5mb3JtYXRpb24gcmV0cmlldmFsIHJlcXVlc3QuCisuYnIKK0FnYWluLCB0aGlzIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgdmFyYmluZCwgb3IgTlVMTC4KKy5QUAorLkIgc25tcF9jbG9uZV92YXJiaW5kCitjcmVhdGVzIGEgY29weSBvZiBlYWNoIHZhcmJpbmQgaW4gdGhlIHNwZWNpZmllZCBsaXN0LAorcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgbmV3IGxpc3QKKyhvciBOVUxMIGlmIHRoZSBjbG9uaW5nIGZhaWxzKS4KKy5icgorLlNTIFNldHRpbmcgb2YgdmFsdWVzCisuQiBzbm1wX3NldF92YXJfb2JqaWQKK3NldHMgdGhlIG5hbWUgb2YgdGhlIHZhcmJpbmQgc3RydWN0dXJlIHRvIHRoZSBzcGVjaWZpZWQgT0lELgorLmJyCisuQiBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUKK3NldHMgdGhlIHN5bnRheCB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUgdmFyYmluZCBzdHJ1Y3R1cmUuCisuYnIKKy5CIHNubXBfc2V0X3Zhcl92YWx1ZQorc2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmJpbmQgc3RydWN0dXJlLCBsZWF2aW5nIHRoZSBzeW50YXggdHlwZSB1bmNoYW5nZWQuCisuYnIKKy5CIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyCitpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3ludGF4IHR5cGUgYW5kIHZhbHVlIGZvcgorYSAzMi1iaXQgaW50ZWdlci1iYXNlZCB2YXJiaW5kLgorLlBQCitBbGwgZm91ciBvZiB0aGVzZSByZXR1cm4gMCBpZiB0aGUgYXNzaWdubWVudCBpcyBzdWNjZXNzZnVsLAorb3IgMSBpZiBpdCBpcyBub3QuCisuU1MgT3V0cHV0CisuQiBwcmludF92YXJpYWJsZQord2lsbCB0YWtlIGFuIG9iamVjdCBpZGVudGlmaWVyIChhcyByZXR1cm5lZCBieQorLkJSIHJlYWRfb2JqaWQgIiwgIiBzbm1wX3BhcnNlX29pZCAiIG9yICIgZ2V0X21vZHVsZV9ub2RlICkKK2FuZCBhbiBpbnN0YW5jZSBvZiBzdWNoIGEgdmFyaWFibGUsIGFuZCBwcmludHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dAordGhlIHRleHR1YWwgZm9ybSBvZiB0aGUgb2JqZWN0IGlkZW50aWZpZXIgdG9nZXRoZXIgd2l0aCB0aGUgdmFsdWUKK29mIHRoZSB2YXJpYWJsZS4KKy5QUAorLkIgZnByaW50X3ZhcmlhYmxlCitkb2VzIHRoZSBzYW1lLCBidXQgcHJpbnRzIHRvIHRoZSBGSUxFIHBvaW50ZXIgc3BlY2lmaWVkIGJ5IHRoZSBpbml0aWFsCitwYXJhbWV0ZXIuCisuUFAKKy5CIHNucHJpbnRfdmFyaWFibGUKK3ByaW50cyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieQorLkkgYnVmCit3aGljaCBpcyBvZiBsZW5ndGgKKy5JUiBsZW4gLgorSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZCwgb3IgLTEgaWYgdGhlCitidWZmZXIgd2FzIG5vdCBsYXJnZSBlbm91Z2guICBJbiB0aGUgbGF0dGVyIGNhc2UsCisuSSBidWYKK3dpbGwgdHlwaWNhbGx5IGNvbnRhaW5lZCBhIHRydW5jYXRlZCB2ZXJzaW9uIG9mIHRoZSBpbmZvcm1hdGlvbiAoYnV0Cit0aGlzIGJlaGF2aW91ciBpcyBub3QgZ3VhcmFudGVlZCkuICBUaGlzIGZ1bmN0aW9uIHJlcGxhY2VzIHRoZQorb2Jzb2xldGUgZnVuY3Rpb24KKy5CUiBzcHJpbnRfdmFyaWFibGUgLgorLlBQCisuQlIgcHJpbnRfdmFsdWUgLAorLkJSIGZwcmludF92YWx1ZSAsCithbmQKKy5CIHNucHJpbnRfdmFsdWUKK2RvIHRoZSBzYW1lIGFzIHRoZSBlcXVpdmFsZW50CisuQiBwcmludF92YXJpYWJsZQorcm91dGluZXMsIGJ1dCBvbmx5IGRpc3BsYXlpbmcgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgd2l0aG91dCB0aGUKK2NvcnJlc3BvbmRpbmcgb2JqZWN0IGlkZW50aWZpZXIuCisuUFAKK0ZvciBkaXNwbGF5aW5nIHRoZSBPSUQgb2YgYSB2YXJiaW5kLCBzZWUgXGZCbmV0c25tcF9taWJfYXBpXGZQKDMpLgorLmJyCisuU1MgRGVsZXRpb24KKy5CIHNubXBfZnJlZV92YXIKK3JlbGVhc2VzIGFsbCBtZW1vcnkgdXNlZCBieSB0aGUgZ2l2ZW4gdmFyYmluZCBzdHJ1Y3R1cmUuCisuYnIKKy5CIHNubXBfZnJlZV92YXJiaW5kCityZWxlYXNlcyBhbGwgbWVtb3J5IHVzZWQgYnkgZWFjaCB2YXJiaW5kIHN0cnVjdHVyZSBpbiB0aGUgdmFyYmluZCBsaXN0IHByb3ZpZGVkLgorLmJyCisuU0ggIlNFRSBBTFNPIgorLkJSIG5ldHNubXBfcGR1X2FwaSAiKDMpIgorLkJSIG5ldHNubXBfbWliX2FwaSAiKDMpIgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zIGIvbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODk3YzVlLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0uVEggInZhcmlhYmxlX2xpc3QiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi12YXJpYWJsZV9saXN0IFwtIAotLlBQCi1UaGUgbmV0c25tcCBcZkJ2YXJpYWJsZVxmUCBsaXN0IGJpbmRpbmcgc3RydWN0dXJlLCBpdCdzIHR5cGVkZWYnZCB0byBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8c25tcF9hcGkuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnZhcmlhYmxlX2xpc3RcZlAgKiBcZkJuZXh0X3ZhcmlhYmxlXGZQIgotLmJyCi0uUkkgIlxmSU5VTEwgZm9yIGxhc3QgXGZCdmFyaWFibGVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCbmFtZVxmUCIKLS5icgotLlJJICJcZklPYmplY3QgaWRlbnRpZmllciBvZiBcZkJ2YXJpYWJsZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCbmFtZV9sZW5ndGhcZlAiCi0uYnIKLS5SSSAiXGZJbnVtYmVyIG9mIHN1YmlkJ3MgaW4gbmFtZSBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJ0eXBlXGZQIgotLmJyCi0uUkkgIlxmSUFTTiB0eXBlIG9mIFxmQnZhcmlhYmxlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyZGF0YVxmUCBcZkJ2YWxcZlAiCi0uYnIKLS5SSSAiXGZJdmFsdWUgb2YgXGZCdmFyaWFibGVcZlAgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCdmFsX2xlblxmUCIKLS5icgotLlJJICJcZkl0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB0byBiZSBjb3BpZWQgaW50byBidWYgXGZQIgotLnRpIC0xYwotLlJJICJvaWQgXGZCbmFtZV9sb2NcZlAgW01BWF9PSURfTEVOXSIKLS5icgotLlJJICJcZklidWZmZXIgdG8gaG9sZCB0aGUgT0lEIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQmJ1ZlxmUCBbNDBdIgotLmJyCi0uUkkgIlxmSTkwIHBlcmNlbnRpbGUgPCA0MC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCZGF0YVxmUCIKLS5icgotLlJJICJcZkkoT3BhcXVlKSBob29rIGZvciBhZGRpdGlvbmFsIGRhdGEgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkKCogXGZCZGF0YUZyZWVIb29rXGZQICkodm9pZCAqKSIKLS5icgotLlJJICJcZkljYWxsYmFjayB0byBmcmVlIGFib3ZlIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluZGV4XGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIG5ldHNubXAgXGZCdmFyaWFibGVcZlAgbGlzdCBiaW5kaW5nIHN0cnVjdHVyZSwgaXQncyB0eXBlZGVmJ2QgdG8gbmV0c25tcF92YXJpYWJsZV9saXN0LiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotLlBQCi1cZkJub3RpZmljYXRpb24uY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUyOSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInVfY2hhciBcZkJ2YXJpYWJsZV9saXN0OjpidWZcZlBbNDBdIgotLlBQCi05MCBwZXJjZW50aWxlIDwgNDAuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQ1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCogXGZCdmFyaWFibGVfbGlzdDo6ZGF0YVxmUCIKLS5QUAotKE9wYXF1ZSkgaG9vayBmb3IgYWRkaXRpb25hbCBkYXRhIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQ3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCgqIFxmQnZhcmlhYmxlX2xpc3Q6OmRhdGFGcmVlSG9va1xmUCkodm9pZCAqKSIKLS5QUAotY2FsbGJhY2sgdG8gZnJlZSBhYm92ZSAKLS5TUyAib2lkKiBcZkJ2YXJpYWJsZV9saXN0OjpuYW1lXGZQIgotLlBQCi1PYmplY3QgaWRlbnRpZmllciBvZiBcZkJ2YXJpYWJsZVxmUC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MzMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCdmFyaWFibGVfbGlzdDo6bmFtZV9sZW5ndGhcZlAiCi0uUFAKLW51bWJlciBvZiBzdWJpZCdzIGluIG5hbWUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MzUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJvaWQgXGZCdmFyaWFibGVfbGlzdDo6bmFtZV9sb2NcZlBbTUFYX09JRF9MRU5dIgotLlBQCi1idWZmZXIgdG8gaG9sZCB0aGUgT0lEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQzIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic3RydWN0IFxmQnZhcmlhYmxlX2xpc3RcZlAqIFxmQnZhcmlhYmxlX2xpc3Q6Om5leHRfdmFyaWFibGVcZlBcZkMgW3JlYWRdXGZQIgotLlBQCi1OVUxMIGZvciBsYXN0IFxmQnZhcmlhYmxlXGZQLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzMSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciBcZkJ2YXJpYWJsZV9saXN0Ojp0eXBlXGZQIgotLlBQCi1BU04gdHlwZSBvZiBcZkJ2YXJpYWJsZVxmUC4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzNyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgIlxmQm5ldHNubXBfdmFyZGF0YVxmUCBcZkJ2YXJpYWJsZV9saXN0Ojp2YWxcZlAiCi0uUFAKLXZhbHVlIG9mIFxmQnZhcmlhYmxlXGZQIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1Mzkgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCdmFyaWFibGVfbGlzdDo6dmFsX2xlblxmUCIKLS5QUAotdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgdG8gYmUgY29waWVkIGludG8gYnVmIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQxIG9mIGZpbGUgc25tcF9hcGkuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3dhdGNoZXIuMyBiL21hbi9uZXRzbm1wX3dhdGNoZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4ZjRmNi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF93YXRjaGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0uVEggIndhdGNoZXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi13YXRjaGVyIFwtIAotLlBQCi1XYXRjaCBhIHNwZWNpZmllZCBcZkJ2YXJpYWJsZVxmUCBhbmQgcHJvY2VzcyBpdCBhcyBhbiBpbnN0YW5jZSBvciBzY2FsYXIgb2JqZWN0LiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF93YXRjaGVyX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfd2F0Y2hlcl9pbmZvXGZQICogXGZCbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvXGZQICh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgdV9jaGFyIHR5cGUsIGludCBmbGFncykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF93YXRjaGVyX2luZm9cZlAgKndhdGNoaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfd2F0Y2hlcl9pbmZvXGZQICp3YXRjaGluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3dhdGNoZXJfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF93YXRjaGVkX3RpbWVzdGFtcF9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF93YXRjaGVkX3RpbWVzdGFtcF9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqd2hhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIG1hcmtlcl90IHRpbWVzdGFtcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF90aW1lc3RhbXBcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIG1hcmtlcl90IHRpbWVzdGFtcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfd2F0Y2hlZF90aW1lc3RhbXBfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3dhdGNoZWRfc3BpbmxvY2tfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zcGlubG9ja1xmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgaW50ICpzcGlubG9jaykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfd2F0Y2hlZF9zcGlubG9ja19oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9sb25nX3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9pbnRfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotV2F0Y2ggYSBzcGVjaWZpZWQgXGZCdmFyaWFibGVcZlAgYW5kIHByb2Nlc3MgaXQgYXMgYW4gaW5zdGFuY2Ugb3Igc2NhbGFyIG9iamVjdC4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMgYi9tYW4vcHJpbnRfZGVzY3JpcHRpb24uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcHJpbnRfZGVzY3JpcHRpb24uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3ByaW50X21pYi4zIGIvbWFuL3ByaW50X21pYi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9wcmludF9taWIuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3ByaW50X29iamlkLjMgYi9tYW4vcHJpbnRfb2JqaWQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcHJpbnRfb2JqaWQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3ByaW50X3ZhbHVlLjMgYi9tYW4vcHJpbnRfdmFsdWUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcHJpbnRfdmFsdWUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3ByaW50X3ZhcmlhYmxlLjMgYi9tYW4vcHJpbnRfdmFyaWFibGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcHJpbnRfdmFyaWFibGUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfYWxsX21pYnMuMyBiL21hbi9yZWFkX2FsbF9taWJzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfYWxsX21pYnMuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfY29uZmlnLjMuZGVmIGIvbWFuL3JlYWRfY29uZmlnLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjgwZDIxLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX2NvbmZpZy4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi0uVEggUkVBRF9DT05GSUcgMyAiMjMgRmViIDIwMDMiICIiICJOZXQtU05NUCIKLS5TSCBOQU1FCi1yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIKLXVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsIHJlZ2lzdGVyX21pYl9oYW5kbGVycywgcmVhZF9jb25maWdzLAotcmVhZF9wcmVtaWJfY29uZmlncywgY29uZmlnX3BlcnJvciwgY29uZmlnX3B3YXJuIC0gcmVhZF9jb25maWcgZnVuY3Rpb25zCi0uU0ggU1lOT1BTSVMKLS5CICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0uUFAKLS5CIHN0cnVjdCBjb25maWdfbGluZSAqCi0uYnIKLS5CSSAiICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICwKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqInVzYWdlTGluZSAiKTsiCi0uUFAKLS5CIHN0cnVjdCBjb25maWdfbGluZSAqCi0uYnIKLS5CSSAiICByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwgCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAsCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdXNhZ2VMaW5lICIpOyIKLS5QUAotLkJJICJ2b2lkIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gIik7IgotLlBQCi0uQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgotLmJyCi0uQkkgIiAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gLAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoidXNhZ2VMaW5lICIpOyIKLS5QUAotLkIgc3RydWN0IGNvbmZpZ19saW5lICoKLS5icgotLkJJICIgIHJlZ2lzdGVyX2FwcF9wcmVtaWJfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICwKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB1c2FnZUxpbmUgIik7IgotLlBQCi0uQkkgInZvaWQgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAiKTsiCi0uUFAKLS5CSSAidm9pZCByZWFkX2NvbmZpZ19wcmludF91c2FnZShjaGFyICoiIGxlYWQgIik7IgotLlBQCi0uQiAidm9pZCByZWFkX2NvbmZpZ3Modm9pZCk7IgotLlBQCi0uQiAidm9pZCByZWFkX3ByZW1pYl9jb25maWdzKHZvaWQpOyIKLS5QUAotLkJJICJ2b2lkIGNvbmZpZ19wd2Fybihjb25zdCBjaGFyICoiIHN0cmluZyAiKTsiCi0uYnIKLS5CSSAidm9pZCBjb25maWdfcGVycm9yKGNvbnN0IGNoYXIgKiIgc3RyaW5nICIpOyIKLQotLlNIIERFU0NSSVBUSU9OCi1UaGUgZnVuY3Rpb25zIGFyZSBhIGZhaXJseSBleHRlbnNpYmxlIHN5c3RlbSBvZiBwYXJzaW5nIHZhcmlvdXMKLWNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgdGhlIHJ1biB0aW1lIG9mIGFuIGFwcGxpY2F0aW9uLiAgVGhlCi1jb25maWd1cmF0aW9uIGZpbGUgZmxvdyBpcyBicm9rZW4gaW50byB0aGUgZm9sbG93aW5nIHBoYXNlczoKLS5SUyA0Ci0uVFAgNAotMS4KLVJlZ2lzdHJhdGlvbiBvZiBoYW5kbGVycy4KLS5UUAotMi4KLVJlYWRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHByZS1NSUIgcGFyc2luZyByZXF1aXJlbWVudHMuCi0uVFAKLTMuCi1SZWFkaW5nIGFuZCBwYXJzaW5nIG9mIHRoZSB0ZXh0dWFsIE1JQiBmaWxlcy4KLS5UUAotNC4KLVJlYWRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcy4KLS5UUAotNS4KLU9wdGlvbmFsbHkgcmUtcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBhIGZ1dHVyZSBkYXRlLgotLlJFCi0uUFAKLVRoZSBpZGVhIGlzIHRoYXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gaXMgYWJsZSB0byByZWdpc3RlcgotLkkgaGFuZGxlcnMKLWZvciBjZXJ0YWluCi0uSSB0b2tlbnMKLXNwZWNpZmllZCBpbiBjZXJ0YWluIHR5cGVzIG9mCi0uSSBmaWxlcy4KLVRoZSAKLS5CIHJlYWRfY29uZmlncygpCi1mdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgdG8gbG9vayBmb3IgYWxsIHRoZSBmaWxlcyB0aGF0IGl0IGhhcwotcmVnaXN0cmF0aW9ucyBmb3IsIGZpbmQgdGhlIGZpcnN0IHdvcmQgb24gZWFjaCBsaW5lLCBhbmQgcGFzcyB0aGUKLXJlbWFpbmRlciB0byB0aGUgYXBwcm9wcmlhdGVseSByZWdpc3RlcmVkIGhhbmRsZXIuCi0uU0ggVE9LRU4gSEFORExFUlMKLS5QUAotSGFuZGxlciBmdW5jdGlvbnMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6Ci0uUFAKLS5SUwotLkJJICJ2b2lkIGhhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAiLCBjaGFyICoiIGxpbmUgIik7IgotLlJFCi0uUFAKLVRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBiZWluZyB0aGUKLXRva2VuIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG9uZSBvZgotdGhlIHRva2VucyB0aGF0IHRoZSBmdW5jdGlvbiBoYWQgYmVlbiByZWdpc3RlcmVkIGZvciksIGFuZCB0aGUgc2Vjb25kCi1iZWluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbGluZSBiZXlvbmQgdGhlIHdoaXRlCi1zcGFjZSBmb2xsb3dpbmcgdGhlIHRva2VuLgotLlNIIFJFU09VUkNFIEZSRUVJTkcgSEFORExFUlMKLS5QUAotSWYgdGhlIHBhcmFtZXRlcgotLkkgcmVsZWFzZXIKLXBhc3NlZCB0bwotLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKLWlzIG5vbi1OVUxMLCB0aGVuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgaXMgY2FsbGVkIGlmIGFuZCB3aGVuIHRoZQotY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmUtcmVhZC4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZyZWUgYW55Ci1yZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uIGFuZCByZXNldCBpdHMgbm90aW9uCi1vZiB0aGUgY29uZmlndXJhdGlvbiB0byBpdHMgZGVmYXVsdC4gIFRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwKLXRoZW4gYmUgY2FsbGVkIGFnYWluLiAgTm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIHJlc291cmNlIGZyZWVpbmcKLWhhbmRsZXIuCi0uU0ggUkVHSVNURVJJTkcgQSBIQU5ETEVSCi0uVFAKLS5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLVRoZQotLkIgaGFuZGxlcigpCi1mdW5jdGlvbiBhYm92ZSBjb3VsZCBiZSByZWdpc3RlcmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlCi0uSSBzbm1wLmNvbmYsCi13aXRoIHRoZSB0b2tlbgotLkkgZ2VuZXJpY1Rva2VuCi1hbmQgdGhlIGhlbHAgc3RyaW5nIChkaXNjdXNzZWQgbGF0ZXIpCi0uSSAiIiJBUkcxIFtBUkcyXSIiIgotdXNpbmcgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHRoZSAKLS5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLWZ1bmN0aW9uOgotLlBQCi0uUlMKLS5SUwotcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZ2VuZXJpY1Rva2VuIiwgaGFuZGxlciwgTlVMTCwgIkFSRzEgW0FSRzJdIik7Ci0uUkUKLS5SRQotLklQCi1UaGlzIHdvdWxkIHJlZ2lzdGVyIHRoZQotLkIgaGFuZGxlcigpCi1mdW5jdGlvbiBzbyB0aGF0IGl0IHdpbGwgZ2V0IGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmaXJzdCB3b3JkIG9mIGEKLWxpbmUgaW4gdGhlIAotLkkgc25tcC5jb25mCi1jb25maWd1cmF0aW9uIGZpbGUocykgbWF0Y2hlcyAiZ2VuZXJpY1Rva2VuIiAoc2VlIAotLkIgcmVhZF9jb25maWdzKCkgCi1iZWxvdykuCi0uVFAKLS5CIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyKCkKLVRoZSAKLS5CIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyKCkKLWZ1bmN0aW9uIHdvcmtzIGlkZW50aWNhbGx5IHRvIHRoZSAKLS5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLWZ1bmN0aW9uIGJ1dCBpcyBpbnRlbmRlZCBmb3IgY29uZmlnIGZpbGUgdG9rZW5zIHRoYXQgbmVlZCB0byBiZSByZWFkCi1pbiBiZWZvcmUgdGhlIHRleHR1YWwgTUlCcyBhcmUgcmVhZCBpbiwgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHdpbGwgYmUKLXVzZWQgdG8gY29uZmlndXJlIHRoZSBNSUIgcGFyc2VyLiAgSXQgaXMgcmFyZWx5IHRoZSBjYXNlIHRoYXQgYW55dGhpbmcgCi1idXQgdGhlIFNOTVAgbGlicmFyeSBpdHNlbGYgc2hvdWxkIG5lZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCi0uVFAKLS5CIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBjb25maWd1cmF0aW9uIGhhbmRsZXIgZm9yIHRoZQotLkkgZmlsZVByZWZpeAotYW5kCi0uSVIgdG9rZW4gLgotCi0uVFAKLS5CIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigpCi0uVFAKLS5CIHJlZ2lzdGVyX2FwcF9wcmVtaWJfaGFuZGxlcigpCi0uVFAKLS5CIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCkKLVRoZXNlIGZ1bmN0aW9ucyBhcmUgYW5hbGFnb3VzIHRvIAotLkJSIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkgIiwgIiByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcigpICIgYW5kICIKLS5CIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotYnV0IGRvbid0IHJlcXVpcmUgdGhlIGZpbGUgdHlwZSBhcmd1bWVudCAod2hpY2ggaXMgZmlsbGVkIGluIGJ5IHRoZQotYXBwbGljYXRpb24pLiAgSXQgaXMgaW50ZW5kZWQgdGhhdCBNSUIgbW9kdWxlcyB3cml0dGVuIGZvciB0aGUgYWdlbnQKLXVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gYWxsb3cgdGhlIGFnZW50IHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgd2hpY2gKLWNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlYWQgKHR5cGljYWxseSB0aGUKLS5JIHNubXBkLmNvbmYKLWZpbGVzKS4KLS5TSCBIRUxQIFNUUklOR1MKLS5QUAotVGhlCi0uSSB1c2FnZUxpbmUKLXBhcmFtZXRlciBwYXNzZWQgdG8KLS5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLWFuZCBzaW1pbGFyIGNhbGxzLCBpcyB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiB3aGVuIHRoZQotLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQotZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFsbCBvZiB0aGUgYXBwbGljYXRpb25zCi13aGVuIHRoZSAKLS5CIC1ICi1mbGFnIGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSXQgcHJpbnRzIGEgc3VtbWFyeSBvZiBhbGwgb2YgdGhlCi1jb25maWd1cmF0aW9uIGZpbGUgbGluZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaWxlcywgdGhhdCB0aGUKLWNvbmZpZ3VyYXRpb24gc3lzdGVtIHVuZGVyc3RhbmRzLiAgVGhlCi0uSSB1c2FnZUxpbmUKLXBhcmFtZXRlciBzaG91bGQgYmUgYSBsaXN0IG9mIGFyZ3VtZW50cyBleHBlY3RlZCBhZnRlciB0aGUgdG9rZW4sIGFuZAotbm90IGEgbGVuZ3RoeSBkZXNjcmlwdGlvbiAod2hpY2ggc2hvdWxkIGdvIGludG8gYSBtYW51YWwgcGFnZQotaW5zdGVhZCkuICBUaGUKLS5JIGxlYWQKLXByZWZpeCB3aWxsIGJlIHByZXBlbmRlZCB0byBlYWNoIGxpbmUgdGhhdCB0aGUgZnVuY3Rpb24gcHJpbnRzIHRvCi1zdGRlcnIsIHdoZXJlIGl0IGRpc3BsYXlzIGl0cyBvdXRwdXQuCi0uUFAKLVRoZQotLkIgaW5pdF9zbm1wKCkKLWZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZQotLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQotZnVuY3Rpb24gaXMgY2FsbGVkLCBzbyB0aGF0IHRoZSBsaWJyYXJ5IGNhbiByZWdpc3RlciBpdHMgY29uZmlndXJhdGlvbiAKLWZpbGUgZGlyZWN0aXZlcyBhcyB3ZWxsIGZvciB0aGUgCi0uQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCi1mdW5jdGlvbiB0byBkaXNwbGF5LgotLlNIIFJFQURJTkcgQ09ORklHVVJBVElPTiBGSUxFUwotLlRQCi0uQiBpbml0X3NubXAoKQotT25jZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiB0b2tlbiBwYXJzZXJzIGhhdmUgYmVlbiByZWdpc3RlcmVkLAotLkIgaW5pdF9zbm1wKCkKLXNob3VsZCBiZSBjYWxsZWQuICBJdCB3aWxsIHBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG9rZW5zCi1yZWdpc3RlcmVkIHdpdGgKLS5CIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyKCksCi1yZWFkIGluIHRoZSB0ZXh0dWFsIE1JQiBmaWxlcyB1c2luZwotLkIgaW5pdF9taWIoKSwKLWFuZCBmaW5hbGx5IHBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG9rZW5zIHJlZ2lzdGVyZWQgd2l0aCAKLS5CUiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpIC4KLS5QUAotSWYgdGhlIAotLkIgaW5pdF9zbm1wKCkKLWZ1bmN0aW9uIGlzIHVzZWQsIG5vbmUgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbmVlZCB0byBiZSBjYWxsZWQgYnkgCi10aGUgYXBwbGljYXRpb246Ci0uVFAKLS5CIHJlZ2lzdGVyX21pYl9oYW5kbGVycygpCi1UaGUgU05NUCBsaWJyYXJ5J3Mgcm91dGluZSB0byByZWdpc3RlciBpdHMgY29uZmlndXJhdGlvbiBmaWxlCi1oYW5kbGVycy4KLS5UUAotLkIgcmVhZF9wcmVtaWJfY29uZmlncygpCi1UaGUgcm91dGluZSB0aGF0IHBhcnNlcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdG9rZW5zIHJlZ2lzdGVyZWQKLXRvIGJlIGRlYWx0IHdpdGggYmVmb3JlIHRoZSB0ZXh0dWFsIE1JQnMgYXJlIHJlYWQgaW4uICBTZWUgCi0uQiByZWFkX2NvbmZpZ3MoKQotYmVsb3cuCi0uVFAKLS5CIHJlYWRfY29uZmlncygpCi1SZWFkcyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgaXQgY2FuIGZpbmQgaW4gdGhlIAotLkkgU05NUENPTkZQQVRICi1lbnZpcm9ubWVudCB2YXJpYWJsZSAob3IgaXRzIGRlZmF1bHQgdmFsdWUpIGZvciB0b2tlbnMgYW5kCi1hcHByb3ByaWF0ZWx5IGNhbGxzIHRoZSBoYW5kbGVycyByZWdpc3RlcmVkIHRvIGl0LCBvciBwcmludHMgYQotIlVua25vd24gdG9rZW4iIHdhcm5pbmcgbWVzc2FnZS4gIEl0IGxvb2tzIGZvciBhbnkgZmlsZSB0aGF0IGl0IGhhcwotcHJldmlvdXNseSByZWNlaXZlZCBhIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IGZvci4KLS5TSCBDT05GSUdVUkFUSU9OIEZJTEVTIFJFQUQKLS5QUAotVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgcmVhZCBhcmUgZm91bmQgYnkgdXNpbmcgdGhlIGNvbG9uIHNlcGFyYXRlZAotLkkgU05NUENPTkZQQVRICi1lbnZpcm9ubWVudCB2YXJpYWJsZSAob3IgaXRzIGRlZmF1bHQgdmFsdWUsIHdoaWNoIHdpbGwgYmUKLVNZU0NPTkZESVIvc25tcCwgZm9sbG93ZWQgYnkKLURBVEFESVIvc25tcCwgZm9sbG93ZWQgYnkgTElCRElSL3NubXAsIGZvbGxvd2VkIGJ5ICRIT01FLy5zbm1wKSBhbmQKLXJlYWRpbmcgaW4gdGhlIGZpbGVzIGZvdW5kIHRoYXQgbWF0Y2ggYm90aCB0aGUgcHJlZml4IHJlZ2lzdGVyZWQgYW5kCi10aGUgdHdvIHN1ZmZpeGVzCi0uSSAuY29uZgotYW5kCi0uSSAubG9jYWwuY29uZi4KLVRoZSBpZGVhIGJlaGluZCB0aGUgdHdvIGRpZmZlcmVudCBzdWZmaXhlcyBpcyB0aGF0IHRoZSBmaXJzdCBmaWxlIGNhbgotYmUgc2hhcmVkICh2aWEgcmRpc3Qgb3IgYW4gTkZTIG1vdW50KSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YKLW1hY2hpbmVzIGFuZCB0aGUgc2Vjb25kIGZpbGUgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGxvY2FsIHNldHRpbmdzCi1mb3Igb25lIHBhcnRpY3VsYXIgbWFjaGluZS4gIFRoZXkgZG8gbm90IG5lZWQgdG8gYmUgcHJlc2VudCwgYW5kIHdpbGwKLW9ubHkgYmUgcmVhZCBpZiBmb3VuZC4KLS5TSCBFUlJPUiBIQU5ETElORyBGVU5DVElPTlMKLS5QUAotVGhlIHR3byBmdW5jdGlvbnMKLS5CIGNvbmZpZ19wd2FybigpCi1hbmQKLS5CIGNvbmZpZ19wZXJyb3IoKQotYm90aCB0YWtlIGFuIGVycm9yIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcHJpbnQgaXQgdG8gc3RkZXJyIGFsb25nCi13aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciB0aGF0IGNhdXNlZCB0aGUgZXJyb3IuICBBIGNhbGwgdG8gdGhlCi1zZWNvbmQgZnVuY3Rpb24gd2lsbCBhbHNvIGZvcmNlIAotLkIgcmVhZF9jb25maWdzKCkgCi10byBldmVudHVhbGx5IHJldHVybiB3aXRoIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyB0byBpdCdzIGNhbGxpbmcKLWZ1bmN0aW9uIHRoYXQgaXQgc2hvdWxkIGFib3J0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgotLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCi0uVFAgMTAKLVNOTVBDT05GUEFUSAotQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24KLWZpbGVzIGluLgotRGVmYXVsdDogU1lTQ09ORkRJUi9zbm1wOkRBVEFESVIvc25tcDpMSUJESVIvc25tcDokSE9NRS8uc25tcAotLlNIICJTRUUgQUxTTyIKLS5CUiBtaWJfYXBpICIoMyksICIgc25tcF9hcGkgKDMpCi0uXCIgTG9jYWwgVmFyaWFibGVzOgotLlwiICBtb2RlOiBucm9mZgotLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9yZWFkX21pYi4zIGIvbWFuL3JlYWRfbWliLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfbWliLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9yZWFkX21vZHVsZS4zIGIvbWFuL3JlYWRfbW9kdWxlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfbW9kdWxlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9yZWFkX21vZHVsZV9ub2RlLjMgYi9tYW4vcmVhZF9tb2R1bGVfbm9kZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX21vZHVsZV9ub2RlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9yZWFkX29iamlkLjMgYi9tYW4vcmVhZF9vYmppZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX29iamlkLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zaHV0ZG93bl9taWIuMyBiL21hbi9zaHV0ZG93bl9taWIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vc2h1dGRvd25fbWliLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wLWJyaWRnZS1taWIuMSBiL21hbi9zbm1wLWJyaWRnZS1taWIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYyYjVlCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL3NubXAtYnJpZGdlLW1pYi4xCkBAIC0wLDAgKzEsMjA4IEBACisnXCIgdAorLlwiICAgICBUaXRsZTogc25tcC1icmlkZ2UtbWliCisuXCIgICAgQXV0aG9yOiBKZW5zIE9zdGVya2FtcCA8amVuc0BsaW51eC52bmV0LmlibS5jb20+CisuXCIgR2VuZXJhdG9yOiBEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyB2MS43NS4yIDxodHRwOi8vZG9jYm9vay5zZi5uZXQvPgorLlwiICAgICAgRGF0ZTogMDMvMjYvMjAxMAorLlwiICAgIE1hbnVhbDogTmV0LVNOTVAKKy5cIiAgICBTb3VyY2U6IGh0dHA6Ly93d3cuaWJtLmNvbS8gdjYKKy5cIiAgTGFuZ3VhZ2U6IEVuZ2xpc2gKKy5cIgorLlRIICJTTk1QXC1CUklER0VcLU1JQiIgMSAiMjYgTWFyIDIwMTAiICJodHRwOi8vd3d3XCYuaWJtXCYuY29tLyB2NiIgIk5ldFwtU05NUCIKKy5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLlwiICogc2V0IGRlZmF1bHQgZm9ybWF0dGluZworLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuXCIgZGlzYWJsZSBoeXBoZW5hdGlvbgorLm5oCisuXCIgZGlzYWJsZSBqdXN0aWZpY2F0aW9uIChhZGp1c3QgdGV4dCB0byBsZWZ0IG1hcmdpbiBvbmx5KQorLmFkIGwKKy5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLlwiICogTUFJTiBDT05URU5UIFNUQVJUUyBIRVJFICoKKy5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLlNIICJOQU1FIgorc25tcC1icmlkZ2UtbWliIFwtIHByb3ZpZGUgTGludXggYnJpZGdlIGluZm9ybWF0aW9uIHZpYSBTTk1QCisuU0ggIlNZTk9QU0lTIgorLkhQIFx3J1xmQnNubXBcLWJyaWRnZVwtbWliXGZSXCAndQorXGZCc25tcFwtYnJpZGdlXC1taWJcZlIge2JyaWRnZX0KKy5TSCAiQVJHVU1FTlRTIgorLlBQCitUaGUgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQ6CisuUFAKK1xmQmJyaWRnZVxmUgorLlJTIDQKK1RoZSBuYW1lIG9mIHRoZSBMaW51eCBicmlkZ2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gdmlhIFNOTVAsIGVcJi5nXCYuIGJyMFwmLgorLlJFCisuU0ggIkRFU0NSSVBUSU9OIgorLlBQCitUaGUgc25tcFwtYnJpZGdlXC1taWIgaXMgYW4gZXh0ZW5zaW9uIHRvIG5ldFwtc25tcFwmLiBJdCBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dCBhIGJyaWRnZSBpbiBhIExpbnV4IHN5c3RlbSBhbmQgZXhwb3J0cyB0aGVtIGZvciBxdWVyeSBmcm9tIG90aGVyIChyZW1vdGUpIHN5c3RlbXMgZm9yIG1hbmFnZW1lbnQgcHVycG9zZXNcJi4KKy5TSCAiQ09ORklHVVJBVElPTjoiCisuUFAKK1RoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIHNubXBcLWJyaWRnZVwtbWliIHRvIGF0dGFjaCB0byBuZXRcLXNubXAgaXMgYWdlbnR4XCYuIEZvciB0aGlzIHRvIHdvcmssIHlvdSB3aWxsIGhhdmUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL3NubXAvc25tcGRcJi5jb25mLAorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgIG1hc3RlciBhZ2VudHgKKyAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlBQCityZXN0YXJ0IHNubXBkIGFuZCBzdGFydCBzbm1wXC1icmlkZ2VcLW1pYlwmLiBzbm1wXC1icmlkZ2VcLW1pYiB3aWxsIHRoZW4gY29ubmVjdCB0byB0aGUgcnVubmluZyBzbm1wZCBkYWVtb25cJi4KKy5QUAorQW5vdGhlciB3YXkgb2YgYXR0YWNoaW5nIHNubXBcLWJyaWRnZVwtbWliIHRvIGlzIHRvIHJ1biBpdCBhcyBhbiBlbWJlZGRlZCBwZXJsIG1vZHVsZVwmLiBZb3UgaGF2ZSB0byBhZGQKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICBwZXJsIGRvICJwYXRoIHRvIGxvY2F0aW9uIG9mIHNubXBcLWJyaWRnZVwtbWliIgorICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuUFAKK2FuZCByZXN0YXJ0IHNubXBkXCYuCisuU0ggIkVYQU1QTEU6IgorLlBQCitGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGlzIG1hbnBhZ2UgYW5kIHR5cGUKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICBwZXJsIC91c3IvYmluL3NubXBcLWJyaWRnZVwtbWliIGJyMAorICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuUFAKK1lvdVwnbGwgZ2V0IHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgICByZWdpc3RlcmluZyBhdCBcJi4xXCYuM1wmLjZcJi4xXCYuMlwmLjFcJi4xNworICAgICBydW5uaW5nIGFzIGEgc3ViYWdlbnRcJi4KKyAgICAgZG90MXFicmlkZ2UgYWdlbnQgc3RhcnRlZFwmLgorICAgICBORVRcLVNOTVAgdmVyc2lvbiA1XCYuNFwmLjJcJi4xIEFnZW50WCBzdWJhZ2VudCBjb25uZWN0ZWQKKyAgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5QUAorTm93IGl0XCdzIHRpbWUgZm9yIGEgZmlyc3QgdGVzdDoKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICAkIGV4cG9ydCBNSUJTPStCUklER0VcLU1JQgorICAgICQgc25tcHdhbGsgbG9jYWxob3N0IFwmLjFcJi4zXCYuNlwmLjFcJi4yXCYuMVwmLjE3CisgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5QUAorVGhlIG91dHB1dCBwcm9kdWNlZCBzaG91bGQgbG9vayBsaWtlCisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwQnJpZGdlSGVsbG9UaW1lID0gSU5URUdFUjogMTk5IGNlbnRpXC1zZWNvbmRzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwQnJpZGdlRm9yd2FyZERlbGF5ID0gSU5URUdFUjogMTQ5OSBjZW50aVwtc2Vjb25kcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRcJi4xID0gSU5URUdFUjogMQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRcJi4zID0gSU5URUdFUjogMworICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQcmlvcml0eVwmLjEgPSBJTlRFR0VSOiAzMgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQcmlvcml0eVwmLjMgPSBJTlRFR0VSOiAzMgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRTdGF0ZVwmLjEgPSBJTlRFR0VSOiBkaXNhYmxlZCgxKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRTdGF0ZVwmLjMgPSBJTlRFR0VSOiBkaXNhYmxlZCgxKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRFbmFibGVcJi4xID0gSU5URUdFUjogZGlzYWJsZWQoMikKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RW5hYmxlXCYuMyA9IElOVEVHRVI6IGRpc2FibGVkKDIpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFBhdGhDb3N0XCYuMSA9IElOVEVHRVI6IDIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UGF0aENvc3RcJi4zID0gSU5URUdFUjogNAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdFwmLjEgPSBTVFJJTkc6ICI4MDAwXCYuMDAxMDE4MzgyYzc4IgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdFwmLjMgPSBTVFJJTkc6ICI4MDAwXCYuMDAxMDE4MzgyYzc4IgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdFwmLjEgPSBJTlRFR0VSOiAwCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0XCYuMyA9IElOVEVHRVI6IDAKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZVwmLjEgPSBTVFJJTkc6ICI4MDAwXCYuMDAxMDE4MzgyYzc4IgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlXCYuMyA9IFNUUklORzogIjgwMDBcJi4wMDEwMTgzODJjNzgiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0XCYuMSA9IFNUUklORzogIjMyNzY5IgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydFwmLjMgPSBTVFJJTkc6ICIzMjc3MCIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UGF0aENvc3QzMlwmLjEgPSBJTlRFR0VSOiAyCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFBhdGhDb3N0MzJcJi4zID0gSU5URUdFUjogNAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwTGVhcm5lZEVudHJ5RGlzY2FyZHMgPSBDb3VudGVyMzI6IDAKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEFnaW5nVGltZSA9IElOVEVHRVI6IDMwMCBzZWNvbmRzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJBZGRyZXNzXCYuXCdcJi5cJi5cJi44LHhcJyA9IFNUUklORzogMDoxMDoxODozODoyYzo3OAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiQWRkcmVzc1wmLlwnXCYuIV4vQnxcJyA9IFNUUklORzogMDoyMTo1ZToyZjo0Mjo3YworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiUG9ydFwmLlwnXCYuXCYuXCYuOCx4XCcgPSBJTlRFR0VSOiAxCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJQb3J0XCYuXCdcJi4hXi9CfFwnID0gSU5URUdFUjogMworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiU3RhdHVzXCYuXCdcJi5cJi5cJi44LHhcJyA9IElOVEVHRVI6IGxlYXJuZWQoMykKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYlN0YXR1c1wmLlwnXCYuIV4vQnxcJyA9IElOVEVHRVI6IGxlYXJuZWQoMykKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRcJi4xID0gSU5URUdFUjogMQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydFwmLjMgPSBJTlRFR0VSOiAzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0TWF4SW5mb1wmLjEgPSBJTlRFR0VSOiAxNTAwIGJ5dGVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0TWF4SW5mb1wmLjMgPSBJTlRFR0VSOiAxNTAwIGJ5dGVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0SW5GcmFtZXNcJi4xID0gQ291bnRlcjMyOiAxODA4MiBmcmFtZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRJbkZyYW1lc1wmLjMgPSBDb3VudGVyMzI6IDE1NDYwNzIgZnJhbWVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0T3V0RnJhbWVzXCYuMSA9IENvdW50ZXIzMjogMTE2MDEgZnJhbWVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0T3V0RnJhbWVzXCYuMyA9IENvdW50ZXIzMjogMTA5ODggZnJhbWVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0SW5EaXNjYXJkc1wmLjEgPSBDb3VudGVyMzI6IDAgZnJhbWVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0SW5EaXNjYXJkc1wmLjMgPSBDb3VudGVyMzI6IDAgZnJhbWVzCisgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5TSCAiQlVHUyIKKy5zcAorLlJTIDQKKy5pZSBuIFx7XAorXGgnLTA0JyAxLlxoJyswMSdcYworLlx9CisuZWwgXHtcCisuc3AgLTEKKy5JUCAiICAxLiIgNC4yCisuXH0KK3NubXBcLWJyaWRnZVwtbWliIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG9uZSBicmlkZ2Ugd2hpY2ggaGFzIHRvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmVcJi4KKy5SRQorLnNwCisuUlMgNAorLmllIG4gXHtcCitcaCctMDQnIDIuXGgnKzAxJ1xjCisuXH0KKy5lbCBce1wKKy5zcCAtMQorLklQICIgIDIuIiA0LjIKKy5cfQorTm90IGFsbCBlbGVtZW50cyBvZiBSRkMgNDE4OCBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBub3QgYXZhaWxhYmxlIGluIHN5c2ZzIG9yIGRpZmZpY3VsdCB0byBleHRyYWN0IGZyb20gdGhlIGV4aXN0aW5nIGRhdGFcJi4KKy5SRQorLlBQCisuU0ggIlNFRSBBTFNPIgorLlBQCitcZkJzbm1wZC5jb25mXGZSKDUpLAorXGZCTmV0OjpTTk1QXGZSKDMpCisuU0ggIkFVVEhPUiIKKy5QUAorXGZCSmVucyBPc3RlcmthbXBcZlIgPFwmamVuc0BsaW51eFwmLnZuZXRcJi5pYm1cJi5jb21cJj4KKy5SUyA0CitEZXZlbG9wZXIKKy5SRQorLlNIICJDT1BZUklHSFQiCisuYnIKK0NvcHlyaWdodCBcKGNvIDIwMDksIDIwMTAgSUJNIENvcnAuLCBBbGwgUmlnaHRzIFJlc2VydmVkCisuYnIKKy5QUAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisuUFAKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlXCYuCisuUFAKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UXCYuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFXCYuCisuc3AKZGlmZiAtLWdpdCBhL21hbi9zbm1wLmNvbmYuNS5kZWYgYi9tYW4vc25tcC5jb25mLjUuZGVmCmluZGV4IDQzMmUwNGIuLjQ2MjAzZDAgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wLmNvbmYuNS5kZWYKKysrIGIvbWFuL3NubXAuY29uZi41LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QLkNPTkYgNSAiMjEgRmViIDIwMDciIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUC5DT05GIDUgIjIxIEFwciAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXAuY29uZiAtIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMKIC5TSCBERVNDUklQVElPTgpAQCAtMTIsNiArMTIsMzIgQEAKIGNvbnRhaW5pbmcgdGhlIHNldHRpbmdzIHNoYXJlZCBieSBhbGwgdXNlcnMgb2YgdGhlIHN5c3RlbS4KIFxmQ34vLnNubXAvc25tcC5jb25mXGZSIGlzIGEgcGVyc29uYWwgZmlsZSwgd2l0aCB0aGUgc2V0dGluZ3MKIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB1c2VyLgorLlNIIEhPU1QtU1BFQ0lGSUMgRklMRVMKK0hvc3Qtc3BlY2lmaWMgZmlsZXMgbWF5IGFsc28gYmUgbG9hZGVkIGFuZCB3aWxsIGJlIHNlYXJjaGVkIGZvciBpZiBhCit0cmFuc3BvcnQgbmFtZSBpcyBzcGVjaWZpZWQgdGhhdCBtYXRjaGVzIGEgXGZJUEFUSC9ob3N0cy9IT1NULmNvbmZcZlIKK2ZpbGUuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCBhIHBhcnRpY3VsYXIgaG9zdCB0byB1c2UgU05NUHYyYyBieQorZGVmYXVsdCB5b3UgY291bGQgY3JlYXRlIGEgfi8uc25tcC9ob3N0cy9OQU1FLmNvbmYgZmlsZSBhbmQgaW4gaXQgcHV0OgorLlJTCisuUFAKK2RlZlZlcnNpb24gMmMKKy5SRQorLlBQCitBbnkgY29ubmVjdGlvbnMgc2V0IHRvIGNvbm5lY3QgdG8gdGhlIGhvc3RuYW1lIFxmSU5BTUVcZlIgd2lsbCB1c2UKK1NOTVB2MmMuICBBbHNvIHNlZSB0aGUgXGZJdHJhbnNwb3J0XGZSIHRva2VuIGJlbG93IGZvciBhZGRpdGlvbmFsCitob3N0LXNwZWNpZmljIGV4YW1wbGVzLgorLlBQCitIb3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGxvYWRlZCBhdCB0aGUgdGltZSB0aGUKK2Nvbm5lY3Rpb24gaXMgb3BlbmVkLiAgVGh1cyB0aGV5J3JlIGdlbmVyYWxseSBsb2FkZWQgYWZ0ZXIgYWxsIG90aGVyCitjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBzZXR0aW5ncyBmcm9tIHRoZQorZ2VuZXJpYyBmaWxlcy4KKy5QUAorVG8gYXZvaWQgbG9hZGluZyBhbnkgaG9zdC1zcGVjaWZpYyBjb25maWcgZmlsZXMgc2V0CisiZG9udExvYWRIb3N0Q29uZmlnIHRydWUiIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCisuU0ggQ09NTUFORC1MSU5FIE9QVElPTlMKK0FsbCBvZiB0aGUgdG9rZW5zIGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgY2FuIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQKK2xpbmUgb2YgTmV0LVNOTVAgYXBwbGljYXRpb25zIGFzIHdlbGwgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCAiXC1cLSIuCitFRywgc3BlY2lmeWluZyBcZklcLVwtZG9udExvYWRIb3N0Q29uZmlnPXRydWVcZlIgb24gdGhlIGNvbW1hbmQgbGluZSB3aWxsCit0dXJuIG9mIGxvYWRpbmcgb2YgdGhlIGhvc3Qgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcy4KIC5TSCBJTVBPUlRBTlQgTk9URQogU2V2ZXJhbCBvZiB0aGVzZSBkaXJlY3RpdmVzIG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgogKHN1Y2ggYXMgcGFzcyBwaHJhc2VzKS4gIENvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpbmNsdWRlIHN1Y2gKQEAgLTM4LDE3ICs2NCw0MCBAQAogU2VlIHRoZSBcZklzbm1wY21kKDEpXGZSIG1hbnVhbCBwYWdlIGZvciBtb3JlIGRldGFpbHMuCiAuSVAKIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHRva2VuIGlzIDE2MS4KKy5JUCAidHJhbnNwb3J0IEhPU1RTUEVDSUZJRVIiCitUaGlzIHNwZWNpYWwgdG9rZW4gc2hvdWxkIGdvIGludG8gYSBob3N0bmFtZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uCitmaWxlIGluIGEgXGZJaG9zdHNcZlIgc3ViLWRpcmVjdG9yeS4gIEZvciBleGFtcGxlIGlmIHRoZSBmaWxlCitcZklob3N0cy9mb28uY29uZlxmUiBleGlzdHMgaW4gdGhlIHNlYXJjaCBwYXRoIGl0IHdpbGwgYmUgbG9hZGVkIGlmIGEKK3RyYW5zcG9ydCBuYW1lIG9mIFxmSWZvb1xmUiB3YXMgdXNlZC4gIFdpdGhpbiB0aGUgZm9vLmNvbmYgZmlsZSB5b3UgbWF5CitwdXQgYm90aCBnZW5lcmFsIHNubXAuY29uZiBzZXR0aW5ncyBhcyB3ZWxsIGFzIGEgc3BlY2lhbAorXGZJdHJhbnNwb3J0XGZSIHN0cmluZyB0byBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiB0byBjb25uZWN0IHRvLiAgRm9yCitleGFtcGxlLCBwdXR0aW5nOgorLlJTCisuSVAKK3RyYW5zcG9ydCB0Y3A6Zm9vLmV4YW1wbGUuY29tOjk4NzYKKy5SRQorLklQCitpbiB0aGUgXGZJaG9zdHMvZm9vLmNvbmZcZlIgZmlsZSB3aWxsIG1ha2UgYXBwbGljYXRpb25zIHJlZmVyZW5jaW5nCit0aGUgXGZJZm9vXGZSIGhvc3RuYW1lIChlLmcuIFxmSXNubXBnZXRcZlIpIHRvIGFjdHVhbGx5IGNvbm5lY3QgdmlhCitUQ1AgdG8gXGZJZm9vLmV4bWFwbGUuY29tXGZSIG9uIHBvcnQgOTg3Ni4KIC5JUCAiZGVmVmVyc2lvbiAoMXwyY3wzKSIKIGRlZmluZXMgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZS4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi12XGZSIG9wdGlvbi4KK1RoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtdlxmUiBvcHRpb24uCiAuSVAgImRlZkNvbW11bml0eSBTVFJJTkciCiBkZWZpbmVzIHRoZSBkZWZhdWx0IGNvbW11bml0eSB0byB1c2UgZm9yIFNOTVB2MSBhbmQgU05NUHYyYyByZXF1ZXN0cy4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi1jXGZSIG9wdGlvbi4KK1RoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtY1xmUiBvcHRpb24uCiAuXCIuSVAgImR1bXBQYWNrZXQgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCisuSVAgImFsaWFzIE5BTUUgREVGSU5JVElPTiIKK0NyZWF0ZXMgYW4gYWxpYXNlZCB0aWVkIHRvIE5BTUUgZm9yIGEgZ2l2ZW4gdHJhbnNwb3J0IGRlZmluaXRpb24uICBUaGUKK2FsaWFzIGNhbiB0aGUgYmUgcmVmZXJyZWQgdG8gdXNpbmcgYW4gYWxpYXM6IHByZWZpeC4gIEVnLCBhIGxpbmUgb2YKKyJhbGlhcyBoZXJlIHVkcDoxMjcuMC4wLjE6NjE2MSIgd291bGQgYWxsb3cgeW91IHRvIHVzZSBhIGRlc3RpbmF0aW9uCitob3N0IG9mICJhbGlhczpoZXJlIiBpbnN0ZWFkIG9mICJ1ZHA6MTI3LjAuMC4xOjYxNjEiLiAgVGhpcyBiZWNvbWVzCittb3JlIHVzZWZ1bCB3aXRoIGNvbXBsZXggdHJhbnNwb3J0IGFkZHJlc3NlcyBpbnZvbHZpbmcgSVB2NiBhZGRyZXNzZXMsCitldGMuCiAuSVAgImR1bXBQYWNrZXQgeWVzIgogZGVmaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBoZXhhZGVjaW1hbCBkdW1wIG9mIHRoZSByYXcgU05NUCByZXF1ZXN0cwogc2VudCBhbmQgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgotVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkItZFxmUiBvcHRpb24uCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQlwtZFxmUiBvcHRpb24uCiAuSVAgImRvRGVidWdnaW5nICgxfDApIgogdHVybnMgb24gZGVidWdnaW5nIGZvciBhbGwgYXBwbGljYXRpb25zIHJ1biBpZiBzZXQgdG8gMS4KIC5cIgpAQCAtNTgsNyArMTA3LDcgQEAKIC5JUCAiZGVidWdUb2tlbnMgVE9LRU5bLFRPS0VOLi4uXSIKIGRlZmluZXMgdGhlIGRlYnVnZ2luZyB0b2tlbnMgdGhhdCBzaG91bGQgYmUgdHVybmVkIG9uIHdoZW4KIFxmSWRvRGVidWdnaW5nXGZSIGlzIHNldC4KLVRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCLURcZlIgb3B0aW9uLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkJcLURcZlIgb3B0aW9uLgogLlwiLklQICIxNmJpdElEcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIC5JUCAiMTZiaXRJRHMgeWVzIgogcmVzdHJpY3RzIHJlcXVlc3RJRHMsIGV0YyB0byAxNi1iaXQgdmFsdWVzLgpAQCAtOTQsNyArMTQzLDcgQEAKIC5JUCAibm9SYW5nZUNoZWNrIHllcyIKIGRpc2FibGVzIHRoZSB2YWxpZGF0aW9uIG9mIHZhcmJpbmQgdmFsdWVzIGFnYWluc3QgdGhlIE1JQiBkZWZpbml0aW9uCiBmb3IgdGhlIHJlbGV2YW50IE9JRC4KLVRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCLUlyXGZSIG9wdGlvbi4KK1RoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCXC1JclxmUiBvcHRpb24uCiAuSVAKIFRoaXMgZGlyZWN0aXZlIGlzIHByaW1hcmlseSByZWxldmFudCB0byB0aGUgXGZCc25tcHNldFxmUiBjb21tYW5kLAogYnV0IHdpbGwgYWxzbyBhcHBseSB0byBhbnkgYXBwbGljYXRpb24gdGhhdCBjYWxscyBcZklzbm1wX2FkZF92YXIoKVxmUgpAQCAtMTE3LDE2ICsxNjYsMjQgQEAKIHRoZSBlbmNvZGluZyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgaW4gZWl0aGVyIGNhc2UgLSBidXQgd29ya2luZwogYmFja3dhcmRzIHR5cGljYWxseSBwcm9kdWNlcyBhIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IGVuY29kaW5nLAogYW5kIGhlbmNlIGEgc21hbGxlciBuZXR3b3JrIGRhdGFncmFtLgorLklQICJkb250TG9hZEhvc3RDb25maWcgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCitTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUKK2xvYWRlZC4gIFNldCB0byAidHJ1ZSIgdG8gdHVybiBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGhvc3Qgc3BlY2lmaWMKK2NvbmZpZ3VyYXRpb24gZmlsZXMuCisuSVAgInJldHJpZXMgSU5URUdFUiIKK1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgdG8gYmUgdXNlZCBpbiB0aGUgcmVxdWVzdHMuCisuSVAgInRpbWVvdXQgSU5URUdFUiIKK1NwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcy4KIC5cIgogLlwiIFhYWCAtIEl0IGlzIHByb2JhYmx5IGFib3V0IHRpbWUgdG8gcmVtb3ZlIHRoaXMgY2hvaWNlIQogLlwiCiAuU0ggU05NUHYzIFNFVFRJTkdTCiAuSVAgImRlZlNlY3VyaXR5TmFtZSBTVFJJTkciCiBkZWZpbmVzIHRoZSBkZWZhdWx0IHNlY3VyaXR5IG5hbWUgdG8gdXNlIGZvciBTTk1QdjMgcmVxdWVzdHMuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItdVxmUiBvcHRpb24uCitUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLXVcZlIgb3B0aW9uLgogLklQICJkZWZTZWN1cml0eUxldmVsIG5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2IgogZGVmaW5lcyB0aGUgZGVmYXVsdCBzZWN1cml0eSBsZXZlbCB0byB1c2UgZm9yIFNOTVB2MyByZXF1ZXN0cy4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi1sXGZSIG9wdGlvbi4KK1RoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtbFxmUiBvcHRpb24uCiAuSVAKIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHRva2VuIGlzIFxmSW5vQXV0aE5vUHJpdlxmUi4KIC5cIgpAQCAtMTQyLDcgKzE5OSw3IEBACiAuSVAgImRlZlByaXZQYXNzcGhyYXNlIFNUUklORyIKIGRlZmluZSB0aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBhbmQgcHJpdmFjeSBwYXNzIHBocmFzZXMgdG8gdXNlCiBmb3IgU05NUHYzIHJlcXVlc3RzLgotVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi1BXGZSIGFuZCBcZkItWFxmUiBvcHRpb25zIHJlc3BlY3RpdmVseS4KK1RoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLUFcZlIgYW5kIFxmQlwtWFxmUiBvcHRpb25zIHJlc3BlY3RpdmVseS4KIC5JUAogVGhlIAogLkIgZGVmUGFzc3BocmFzZQpAQCAtMTUyLDcgKzIwOSw3IEBACiAuSVAgImRlZlByaXZUeXBlIERFU3xBRVMiCiBkZWZpbmUgdGhlIGRlZmF1bHQgYXV0aGVudGljYXRpb24gYW5kIHByaXZhY3kgcHJvdG9jb2xzIHRvIHVzZSBmb3IKIFNOTVB2MyByZXF1ZXN0cy4KLVRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItYVxmUiBhbmQgXGZCLXhcZlIgb3B0aW9ucyByZXNwZWN0aXZlbHkuCitUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC1hXGZSIGFuZCBcZkJcLXhcZlIgb3B0aW9ucyByZXNwZWN0aXZlbHkuCiAuSVAKIElmIG5vdCBzcGVjaWZpZWQsIFNOTVB2MyByZXF1ZXN0cyB3aWxsIGRlZmF1bHQgdG8gTUQ1IGF1dGhlbnRpY2F0aW9uCiBhbmQgREVTIGVuY3J5cHRpb24uCkBAIC0xNjQsNyArMjIxLDcgQEAKIC5SRQogLklQICJkZWZDb250ZXh0IFNUUklORyIKIGRlZmluZXMgdGhlIGRlZmF1bHQgY29udGV4dCB0byB1c2UgZm9yIFNOTVB2MyByZXF1ZXN0cy4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi1uXGZSIG9wdGlvbi4KK1RoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtblxmUiBvcHRpb24uCiAuSVAKIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHRva2VuIGlzIHRoZSBkZWZhdWx0IGNvbnRleHQKIChpLmUuIHRoZSBlbXB0eSBzdHJpbmcgIiIpLgpAQCAtMTgzLDcgKzI0MCw3IEBACiBub3JtYWxseSBoYXMgYmV0dGVyIGVudHJvcHkgdGhhbiBhIHBhc3N3b3JkIHVubGVzcyBpdCBpcwogYW1hemluZ2x5IGxvbmcpLgogVGhlIGRpcmVjdGl2ZXMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIHNob3J0LWZvcm0KLWNvbW1hbmQgbGluZSBvcHRpb25zIFxmQi0zbVxmUiwgXGZCLTNNXGZSLCBcZkItM2tcZlIsIGFuZCBcZkItM0tcZlIuCitjb21tYW5kIGxpbmUgb3B0aW9ucyBcZkJcLTNtXGZSLCBcZkJcLTNNXGZSLCBcZkJcLTNrXGZSLCBhbmQgXGZCXC0zS1xmUi4KIC5JUAogTG9jYWxpemVkIGtleXMgYXJlCiBtYXN0ZXIga2V5cyB3aGljaCBoYXZlIGJlZW4gY29udmVydGVkIHRvIGEgdW5pcXVlIGtleSB3aGljaCBpcyBvbmx5CkBAIC0xOTIsNiArMjQ5LDIzIEBACiBiZWluZyB1c2VkIChhdXRoIGtleXM6IE1ENT0xNiBieXRlcywgU0hBMT0yMCBieXRlczsKIHByaXYga2V5czogREVTPTE2IGJ5dGVzICg4CiBieXRlcyBvZiB3aGljaCBpcyB1c2VkIGFzIGFuIElWIGFuZCBub3QgYSBrZXkpLCBhbmQgQUVTPTE2IGJ5dGVzKS4KKy5JUCAic3NodG9zbm1wc29ja2V0IFBBVEgiCitTZXRzIHRoZSBwYXRoIG9mIHRoZSBcZkJzc2h0b3NubXBcZlIgc29ja2V0IGNyZWF0ZWQgYnkgYW4gYXBwbGljYXRpb24KKyhlLmcuIHNubXBkKSBsaXN0ZW5pbmcgZm9yIGluY29taW5nIHNzaCBjb25uZWN0aW9ucyB0aHJvdWdoIHRoZQorXGZCc3NodG9zbm1wXGZSIHVuaXggc29ja2V0LgorLklQICJzc2h0b3NubXBzb2NrZXRwZXJtcyBNT0RFIFtPV05FUiBbR1JPVVBdXSIKK1NldHMgdGhlIG1vZGUsIG93bmVyIGFuZCBncm91cCBvZiB0aGUgXGZCc3NodG9zbm1wXGZSIHNvY2tldCBjcmVhdGVkIGJ5CithbiBhcHBsaWNhdGlvbiAoZS5nLiBcZkJzbm1wZFxmUikgbGlzdGVuaW5nIGZvciBpbmNvbWluZyBzc2ggY29ubmVjdGlvbnMKK3Rocm91Z2ggdGhlIFxmQnNzaHRvc25tcFxmUiB1bml4IHNvY2tldC4gIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgcmVhZC93cml0ZQorcHJpdmlsZWdlZCBmb3IgU1NIIHVzZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgU05NUAorc2VydmljZSAoVkFDTSBhY2Nlc3Mgc3RpbGwgbmVlZHMgdG8gYmUgZ3JhbnRlZCBhcyB3ZWxsLCBtb3N0IGxpa2VseQordGhyb3VnaCB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsKS4KKy5JUCAic3NodXNlcm5hbWUgTkFNRSIKK1NldHMgdGhlIFNTSCB1c2VyIG5hbWUgZm9yIGxvZ2dpbmcgaW50byB0aGUgcmVtb3RlIHN5c3RlbS4KKy5JUCAic3NocHVia2V5IEZJTEUiCitTZXQgdGhlIHB1YmxpYyBrZXkgZmlsZSB0byB1c2Ugd2hlbiBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHN5c3RlbS4KKy5JUCAic3NocHJpdmtleSBGSUxFIgorU2V0IHRoZSBwcml2YXRlIGtleSBmaWxlIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUgc3lzdGVtLgogLlwiCiAuXCIgWFhYIC0gYXJlIHRoZXNlIGxlbmd0aHMgc3RpbGwgY29ycmVjdCA/CiAuXCIKQEAgLTIxNSw3ICsyODksNyBAQAogZm9yIGhhbmRsaW5nIGlucHV0IHRvIGFuZCBvdXRwdXQgZnJvbSBleHRlcm5hbCBzaGVsbCBjb21tYW5kcy4KIFVzZWQgYnkgdGhlIFxmSW1rc3RlbXAoKVxmUiBhbmQgXGZJbWt0ZW1wKClcZlIgZnVuY3Rpb25zLgogLklQCi1JZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBwYXR0ZXJuIGlzIFxmQy90bXAvc25tcGRYWFhYWFhcZlIuCitJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBwYXR0ZXJuIGlzIFxmQ05FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk5cZlIuCiAuSVAgInNlcnZlclJlY3ZCdWYgSU5URUdFUiIKIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgdXNlZCB3aGVuIHJlY2VpdmluZwogaW5jb21pbmcgU05NUCByZXF1ZXN0cy4KQEAgLTIzMiwxOCArMzA2LDE4IEBACiAuU0ggTUlCIEhBTkRMSU5HCiAuSVAgIm1pYmRpcnMgRElSTElTVCIKIHNwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUIgZmlsZXMuCi1UaGlzIG9wZXJhdGVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgXGZCLU1cZlIgb3B0aW9uIC0KK1RoaXMgb3BlcmF0ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBcZkJcLU1cZlIgb3B0aW9uIC0KIHNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogTm90ZSB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCiAuQiBNSUJESVJTCi1lbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIHRoZSBcZkItTVxmUiBvcHRpb24uCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIHRoZSBcZkJcLU1cZlIgb3B0aW9uLgogLklQICJtaWJzIE1JQkxJU1QiCiBzcGVjaWZpZXMgYSBsaXN0IG9mIE1JQiBtb2R1bGVzIChub3QgZmlsZXMpIHRoYXQgc2hvdWxkIGJlIGxvYWRlZC4KLVRoaXMgb3BlcmF0ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBcZkItbVxmUiBvcHRpb24gLQorVGhpcyBvcGVyYXRlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIFxmQlwtbVxmUiBvcHRpb24gLQogc2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiBOb3RlIHRoYXQgdGhpcyBsaXN0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQogLkIgTUlCUwotZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCB0aGUgXGZCLW1cZlIgb3B0aW9uLgorZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCB0aGUgXGZCXC1tXGZSIG9wdGlvbi4KIC5JUCAibWliZmlsZSBGSUxFIgogc3BlY2lmaWVzIGEgKHNpbmdsZSkgTUlCIGZpbGUgdG8gbG9hZCwgaW4gYWRkaXRpb24gdG8gdGhlCiBsaXN0IHJlYWQgZnJvbSB0aGUgXGZJbWlic1xmUiB0b2tlbiAob3IgZXF1aXZhbGVudCBjb25maWd1cmF0aW9uKS4KQEAgLTI1MiwxNCArMzI2LDE1IEBACiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIC5JUCAic2hvd01pYkVycm9ycyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIHdoZXRoZXIgdG8gZGlzcGxheSBNSUIgcGFyc2luZyBlcnJvcnMuCi0uSVAgInN0cmljdENvbW1lbnRUZXJtICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgorLklQICJjb21tZW50VG9FT0wgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiB3aGV0aGVyIE1JQiBwYXJzaW5nIHNob3VsZCBiZSBzdHJpY3QgYWJvdXQgY29tbWVudCB0ZXJtaW5hdGlvbi4KIE1hbnkgTUlCIHdyaXRlcnMgYXNzdW1lIHRoYXQgQVNOLjEgY29tbWVudHMgZXh0ZW5kIHRvIHRoZSBlbmQgb2YKLXRoZSB0ZXh0IGxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIHRlcm1pbmF0ZWQgYnkgdGhlIG5leHQgIi0tIiB0b2tlbi4KK3RoZSB0ZXh0IGxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIHRlcm1pbmF0ZWQgYnkgdGhlIG5leHQgIlwtXC0iIHRva2VuLgogVGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0byBhY2NlcHQgc3VjaCAoc3RyaWN0bHkgaW5jb3JyZWN0KSBNSUJzLgogLmJyCi1Ob3RlIHRoYXQgdGhpcyBkaXJlY3RpdmUgaXMgcG9vcmx5IG5hbWVkLCBzaW5jZSBhIHZhbHVlIG9mICJ0cnVlIgotd2lsbCB0dXJuIFxmSW9mZlxmUCB0aGUgc3RyaWN0IGludGVycHJldGF0aW9uIG9mIE1JQiBjb21tZW50cy4KK05vdGUgdGhhdCB0aGlzIGRpcmVjdGl2ZSB3YXMgcHJldmlvdXMgKG1pcy0pbmFtZWQgXGZJc3RyaWN0Q29tbWVudFRlcm1cZlIsCitidXQgd2l0aCB0aGUgcmV2ZXJzZSBiZWhhdmlvdXIgZnJvbSB0aGF0IGltcGxpZWQgYnkgdGhlIG5hbWUuCitUaGlzIGVhcmxpZXIgdG9rZW4gaXMgc3RpbGwgYWNjZXB0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogLklQICJtaWJBbGxvd1VuZGVybGluZSAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIHdoZXRoZXIgdG8gYWxsb3cgdW5kZXJsaW5lIGNoYXJhY3RlcnMgaW4gTUlCIG9iamVjdCBuYW1lcyBhbmQKIGVudW1lcmF0aW9uIHZhbHVlcy4KQEAgLTI3NSw1NiArMzUwLDY1IEBACiBiZWluZyBwYXNzZWQgdG8gdGhlIGxvZ2dpbmcgcm91dGluZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBmaWxlIGxvZ2dpbmcgaXMgYWN0aXZlLiAKIC5JUCAicHJpbnROdW1lcmljRW51bXMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9lIC4KKy5CUiBcLU9lIC4KIC5JUCAicHJpbnROdW1lcmljT2lkcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT24gLgorLkJSIFwtT24gLgogLklQICJkb250QnJlYWtkb3duT2lkcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT2IgLgorLkJSIFwtT2IgLgogLklQICJlc2NhcGVRdW90ZXMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9FIC4KKy5CUiBcLU9FIC4KIC5JUCAicXVpY2tQcmludGluZyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT3EgLgorLkJSIFwtT3EgLgogLklQICJwcmludFZhbHVlT25seSAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT3YgLgorLkJSIFwtT3YgLgogLklQICJkb250UHJpbnRVbml0cyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT1UgLgorLkJSIFwtT1UgLgogLklQICJudW1lcmljVGltZXRpY2tzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PdCAuCisuQlIgXC1PdCAuCiAuSVAgInByaW50SGV4VGV4dCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT1QgLgorLkJSIFwtT1QgLgogLklQICJoZXhPdXRwdXRMZW5ndGggaW50ZWdlciIKIFNwZWNpZmllcyB3aGVyZSB0byBicmVhayB1cCB0aGUgb3V0cHV0IG9mIGhleGFkZWNpbWFsIHN0cmluZ3MuICAKIFNldCB0byAwIHRvIGRpc2FibGUgbGluZSBicmVha3MuICBEZWZhdWx0cyB0byAxNi4KIC5JUCAic3VmZml4UHJpbnRpbmcgKDB8MXwyKSIKIFRoZSB2YWx1ZSAxIGlzIGVxdWl2YWxlbnQgdG8KLS5CIC1PcworLkIgXC1PcwogYW5kIHRoZSB2YWx1ZSAyIGlzIGVxdWl2YWxlbnQgdG8KLS5CUiAtT1MgLgorLkJSIFwtT1MgLgogLklQICJvaWRPdXRwdXRGb3JtYXQgKDF8MnwzfDR8NXw2KSIKLU1hcHMgLU8gb3B0aW9ucyBhcyBmb2xsb3c6IC1Pcz0xLCAtT1M9MiwgLU9mPTMsIC1Pbj00LCAtT3U9NS4KLVRoZSB2YWx1ZSA2IGhhcyBubyBtYXRjaGluZyAtTyBvcHRpb24uIEl0IHN1cHByZXNzZXMgb3V0cHV0LgorTWFwcyBcLU8gb3B0aW9ucyBhcyBmb2xsb3c6IFwtT3M9MSwgXC1PUz0yLCBcLU9mPTMsIFwtT249NCwgXC1PdT01LgorVGhlIHZhbHVlIDYgaGFzIG5vIG1hdGNoaW5nIFwtTyBvcHRpb24uIEl0IHN1cHByZXNzZXMgb3V0cHV0LgogLklQICJleHRlbmRlZEluZGV4ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PWCAuCisuQlIgXC1PWCAuCiAuSVAgIm5vRGlzcGxheUhpbnQgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBEaXNhYmxlcyB0aGUgdXNlIG9mIERJU1BMQVktSElOVCBpbmZvcm1hdGlvbiB3aGVuIHBhcnNpbmcgaW5kaWNlcyBhbmQKIHZhbHVlcyB0byBzZXQuIEVxdWl2YWxlbnQgdG8KLS5CUiAtSWggLgorLkJSIFwtSWggLgogLlNIIEZJTEVTCi1TWVNDT05GRElSL3NubXAvc25tcC5jb25mLAotU1lTQ09ORkRJUi9zbm1wL3NubXAubG9jYWwuY29uZiAtIGNvbW1vbiBjb25maWd1cmF0aW9uIHNldHRpbmdzCisuSVAgIlN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZXM6IgorU1lTQ09ORkRJUi9zbm1wL3NubXAuY29uZgogLmJyCi1+Ly5zbm1wL3NubXAuY29uZiAtIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncworU1lTQ09ORkRJUi9zbm1wL3NubXAubG9jYWwuY29uZgorLklQICJVc2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3M6IgorJEhPTUUvLnNubXAvc25tcC5jb25mCisuYnIKKyRIT01FLy5zbm1wL3NubXAubG9jYWwuY29uZgorLklQICJEZXN0aW5hdGlvbiBob3N0IHNwZWNpZmljIGZpbGVzOgorU1lTQ09ORkRJUi9zbm1wL2hvc3RzL0hPU1ROQU1FLmNvbmYKKy5icgorJEhPTUUvLnNubXAvaG9zdHMvSE9TVE5BTUUuY29uZgorCiAuU0ggIlNFRSBBTFNPIgotc25tcF9jb25maWcoNSksIHJlYWRfY29uZmlnKDMpLCBzbm1wY21kKDEpLgorc25tcF9jb25maWcoNSksIG5ldHNubXBfY29uZmlnX2FwaSgzKSwgc25tcGNtZCgxKS4KIC5cIiBMb2NhbCBWYXJpYWJsZXM6CiAuXCIgIG1vZGU6IG5yb2ZmCiAuXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmIGIvbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2U0MGRlLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2FnZW50X2FwaS4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0uVEggU05NUF9BR0VOVF9BUEkgMyAiMDEgQXVnIDIwMDIiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uU0ggTkFNRQotc25tcF9hZ2VudF9hcGkgXC0gZW1iZWRkaW5nIGFuIGFnZW50IGludG8gYSBleHRlcm5hbCBhcHBsaWNhdGlvbgotLlNIIFNZTk9QU0lTCi0ubmYKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgaW50IGFnZW50eF9zdWJhZ2VudCA9IDE7ICAvKiBDaGFuZ2UgdGhpcyBpZiB5b3UncmUgYSBtYXN0ZXIgYWdlbnQuICAqLwotCi0gIHNubXBfZW5hYmxlX3N0ZGVycmxvZygpOwotCi0gIC8qICBJZiB3ZSdyZSBhbiBBZ2VudFggc3ViYWdlbnQuLi4gICovCi0gIGlmIChhZ2VudHhfc3ViYWdlbnQpIHsKLSAgICAgIC8qIC4uLm1ha2UgdXMgYW4gQWdlbnRYIGNsaWVudC4gICovCi0gICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSwgMSk7Ci0gIH0KLQotICBpbml0X2FnZW50KCJ5b3VyYXBwbmFtZSIpOwotCi0gIC8qICBJbml0aWFsaXplIHlvdXIgTUlCIGNvZGUgaGVyZS4gICovCi0gIGluaXRfbXlfbWliX2NvZGUoKTsKLQotICAvKiAgYHlvdXJhcHBuYW1lJyB3aWxsIGJlIHVzZWQgdG8gcmVhZCB5b3VyYXBwbmFtZS5jb25mIGZpbGVzLiAgKi8KLSAgaW5pdF9zbm1wKCJ5b3VyYXBwbmFtZSIpOwotCi0gIC8qICBJZiB3ZSdyZSBnb2luZyB0byBiZSBhIFNOTVAgbWFzdGVyIGFnZW50Li4uICAqLwotICBpZiAoIWFnZW50eF9zdWJhZ2VudCkKLSAgICAgIGluaXRfbWFzdGVyX2FnZW50KCk7ICAvKiAgTGlzdGVuIG9uIGRlZmF1bHQgcG9ydCAoMTYxKS4gICovCi0KLSAgLyogIFlvdXIgbWFpbiBsb29wIGhlcmUuLi4gICovCi0gIHdoaWxlICh3aGF0ZXZlcikgewotICAgICAgLyogaWYgeW91IHVzZSBzZWxlY3QoKSwgc2VlIHNubXBfYXBpKDMpICovCi0gICAgICAvKiAgICAgLS0tIE9SIC0tLSAgKi8KLSAgICAgIGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDApOyAvKiAwID09IGRvbid0IGJsb2NrICovCi0gIH0KLQotICAvKiAgQXQgc2h1dGRvd24gdGltZTogICovCi0gIHNubXBfc2h1dGRvd24oInlvdXJhcHBuYW1lIik7Ci19Ci0KLVRoZW46Ci0kKENDKSAuLi4gYG5ldC1zbm1wLWNvbmZpZyAtLWFnZW50LWxpYnNgCi0KLS5maQotLlNIIERFU0NSSVBUSU9OCi0uUFAKLU91ciBnb2FsIGlzIHRvIGNyZWF0ZSBhIGVhc3kgdG8gdXNlIGludGVyZmFjZSB0byB0aGUgTmV0LVNOTVAgcGFja2FnZQotc3VjaCB0aGF0IHlvdSBjYW4gdGFrZSBjb2RlIHRoYXQgeW91IGhhdmUgd3JpdHRlbiB0aGF0IGhhcyBiZWVuCi1kZXNpZ25lZCB0byBiZSBhIE5ldC1TTk1QIE1JQiBtb2R1bGUgYW5kIGVtYmVkIGl0IGludG8gYW4gZXh0ZXJuYWwKLWFwcGxpY2F0aW9uIHdoZXJlIHlvdSBjYW4gZWl0aGVyIGNob3NlIHRvIGJlIGEgU05NUCBtYXN0ZXIgYWdlbnQgb3IgYW4KLUFnZW50WCBzdWItYWdlbnQgdXNpbmcgdGhlIHNhbWUgTUlCIG1vZHVsZSBjb2RlLiAgT3VyIHN1Z2dlc3Rpb24gaXMKLXRoYXQgeW91IHVzZSBvdXIgKG9yIGFub3RoZXIpIFNOTVAgYWdlbnQgYXMgdGhlIEFnZW50WCBtYXN0ZXIgYWdlbnQKLWFuZCBjaG9zZSB0byBiZWNvbWUgYW4gQWdlbnRYIHN1YmFnZW50IHdoaWNoIHRoZW4gYXR0YWNoZXMgdG8gdGhlCi1tYXN0ZXIuCi0uUFAKLVRoZSBOZXQtU05NUCBwYWNrYWdlIHByb3ZpZGVzIGEgcGFpciBvZiBsaWJyYXJpZXMgdGhhdCBlbmFibGVzIGVhc3kKLWVtYmVkZGluZyBvZiBhbiBTTk1QIG9yIEFnZW50WCBhZ2VudCBpbnRvIGFuIGV4dGVybmFsIHNvZnR3YXJlCi1wYWNrYWdlLiBBZ2VudFggaXMgYW4gZXh0ZW5zaWJsZSBwcm90b2NvbCBkZXNpZ25lZCB0byBhbGxvdyBtdWx0aXBsZQotU05NUCBzdWItYWdlbnRzIGFsbCBydW4gb24gb25lIG1hY2hpbmUgdW5kZXIgYSBzaW5nbGUgU05NUCBtYXN0ZXIKLWFnZW50LiAgSXQgaXMgZGVmaW5lZCBpbiBSRkMgMjc0MS4KLS5QUAotWW91IHdpbGwgbmVlZCB0byBwZXJmb3JtIGEgZmV3IHRhc2tzIGluIG9yZGVyIHRvIGFjY29tcGxpc2gKLXRoaXMuIEZpcnN0IG9mZiwgeW91IHdpbGwgbmVlZCB0byBpbml0aWFsaXplIGJvdGggdGhlIFNOTVAgbGlicmFyeSBhbmQKLXRoZSBTTk1QIGFnZW50IGxpYnJhcnkuIEFzIGluZGljYXRlZCBhYm92ZSwgdGhpcyBpcyBkb25lIHNsaWdodGx5Ci1kaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgeW91IGFyZSBnb2luZyB0byBwZXJmb3JtIGFzIGEKLW1hc3RlciBhZ2VudCBvciBhbiBBZ2VudFggc3ViLWFnZW50LgotLlNIIENPTkZJR1VSQVRJT04KLS5QUAotSWYgeW91IGludGVuZCB0byBvcGVyYXRlIGFzIGFuIEFnZW50WCBzdWItYWdlbnQsIHlvdSB3aWxsIGhhdmUgdG8KLWNvbmZpZ3VyZWQgdGhlIE5ldC1TTk1QIHBhY2thZ2Ugd2l0aCBhZ2VudHggc3VwcG9ydCAod2hpY2ggaXMgdHVybmVkCi1vbiBieSBkZWZhdWx0LCBzbyBqdXN0IGRvbid0IHR1cm4gaXQgb2ZmKQotLlBQCi1BZGRpdGlvbmFsbHksIHlvdSB3aWxsIG5lZWQgdG8gbGluayBhZ2FpbnN0IHRoZSBuZXQtc25tcCBsaWJyYXJpZXMKLSh1c2UgdGhlIG91dHB1dCBvZiAibmV0LXNubXAtY29uZmlnIC0tYWdlbnQtbGlicyIgdG8gZ2V0IGEgbGlicmFyeQotbGlzdCkgYW5kIGNhbGwgc3ViYWdlbnRfcHJlX2luaXQoKSBhcyBpbmRpY2F0ZWQgYWJvdmUuCi0uU0ggQ09NUElMSU5HCi0uUFAKLUluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIGFueSBvZiB0aGUgYWJvdmUgQVBJLCB5b3Ugd2lsbCBuZWVkIHRvIGxpbmsKLWFnYWluc3QgYXQgbGVhc3QgdGhlIGZvdXIgbGlicmFyaWVzIGxpc3RlZCBhYm92ZS4KLS5TSCBGVU5DVElPTlMKLS5QUCBUaGlzIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgYWJvdmUgYW5kCi13aGVyZSB0byBmaW5kIG91dCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW0uICBJdCBpcyBjZXJ0YWlubHkgbm90IGEKLWNvbXBsZXRlIGxpc3Qgb2Ygd2hhdCBpcyBhdmFpbGFibGUgd2l0aGluIGFsbCB0aGUgbmV0LXNubXAgbGlicmFyaWVzLiAKLS5JUCAic25tcF9lbmFibGVfc3RkZXJybG9nKCkiCi1Mb2dzIGVycm9yIG91dHB1dCBmcm9tIHRoZSBTTk1QIGFnZW50IHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCi0uSVAgIm5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oKSIKLVBsZWFzZSBzZWUgdGhlCi0uSVIgZGVmYXVsdF9zdG9yZSgzKQotbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24KLWFib3V0IHRoaXMgQVBJLgotLklQICJpbml0X2FnZW50KGNoYXIgKm5hbWUpIgotSW5pdGlhbGl6ZXMgdGhlIGVtYmVkZGVkIGFnZW50LiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUKLS5CUiAiaW5pdF9zbm1wKCkiCi1jYWxsLiAgCi0uSSBuYW1lCi1pcyB1c2VkIHRvIGRpY3RhdGUgd2hhdCAuY29uZiBmaWxlIHRvIHJlYWQgd2hlbgotLkJSICJpbml0X3NubXAoKSIKLWlzIGNhbGxlZCBsYXRlci4KLS5JUCAiaW5pdF9zbm1wKGNoYXIgKm5hbWUpIgotSW5pdGlhbGl6ZXMgdGhlIFNOTVAgbGlicmFyeS4gIE5vdGUgdGhhdCBvbmUgb2YgdGhlIHRoaW5ncyB0aGlzIHdpbGwKLWRvIHdpbGwgYmUgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZpbGVzIGluIGFuIGVmZm9ydCB0byBjb25maWd1cmUgeW91cgotYXBwbGljYXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG5hbWVkIGJ5Ci10aGUKLS5JIG5hbWUKLXN0cmluZyB0aGF0IHlvdSBwYXNzZWQgaW4uICBJdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgYWNjZXNzCi1jb250cm9sLCBmb3IgaW5zdGFuY2UuICAgUGxlYXNlIHNlZSB0aGUKLS5JUiByZWFkX2NvbmZpZygzKSAiLCAiIHNubXBfY29uZmlnKDUpICIsIGFuZCAiIHNubXBkLmNvbmYoNSkKLW1hbnVhbCBwYWdlcyBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHRoaXMgc3ViamVjdC4KLS5JUCAiaW5pdF9tYXN0ZXJfYWdlbnQodm9pZCkiCi1Jbml0aWFsaXplcyB0aGUgbWFzdGVyIGFnZW50IGFuZCBjYXVzZXMgaXQgdG8gbGlzdGVuIGZvciBTTk1QIHJlcXVlc3RzIAotb24gaXRzIGRlZmF1bHQgVURQIHBvcnQgb2YgMTYxLgotLklQICJhZ2VudF9jaGVja19hbmRfcHJvY2VzcyhpbnQgYmxvY2spIgotVGhpcyBjaGVja3MgZm9yIHBhY2tldHMgYXJyaXZpbmcgb24gdGhlIFNOTVAgcG9ydCBhbmQgcHJvY2Vzc2VzIHRoZW0KLWlmIHNvbWUgYXJlIGZvdW5kLiAgSWYgCi0uSSBibG9jawotaXMgbm9uLXplcm8sIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBwYWNrZXQgYXJyaXZlcyBvciBhbiAKLWFsYXJtIG11c3QgYmUgcnVuIChzZWUKLS5JUiBzbm1wX2FsYXJtKDMpICkuCi1UaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBpcyBhIHBvc2l0aXZlIGludGVnZXIgaWYgcGFja2V0cwotd2VyZSBwcm9jZXNzZWQsIHplcm8gaWYgYW4gYWxhcm0gb2NjdXJyZWQgYW5kIC0xIGlmIGFuIGVycm9yIG9jY3VyZWQuCi0uSVAgInNubXBfc2h1dGRvd24oY2hhciAqbmFtZSk7IgotVGhpcyBzaHV0cyBkb3duIHRoZSBhZ2VudCwgc2F2aW5nIGFueSBuZWVkZWQgcGVyc2lzdGVudCBzdG9yYWdlLCBldGMuCi0uU0ggIlNFRSBBTFNPIgotaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0Lywgc2VsZWN0KDIpLCBzbm1wX2FwaSgzKSwKLWRlZmF1bHRfc3RvcmUoMyksIHNubXBfYWxhcm0oMyksIHJlYWRfY29uZmlnKDMpLCBzbm1wX2NvbmZpZyg1KSwKLXNubXBkLmNvbmYoNSkKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2FsYXJtLjMuZGVmIGIvbWFuL3NubXBfYWxhcm0uMy5kZWYKaW5kZXggMDkxZjIyMC4uNmM3OWEyMCAxMDA2NDQKLS0tIGEvbWFuL3NubXBfYWxhcm0uMy5kZWYKKysrIGIvbWFuL3NubXBfYWxhcm0uMy5kZWYKQEAgLTEsNiArMSw4IEBACiAuVEggU05NUF9BTEFSTSAzICIwMSBBdWcgMjAwMiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCi1zbm1wX2FsYXJtX3JlZ2lzdGVyLCBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyLCBzbm1wX2FsYXJtX3VucmVnaXN0ZXIgLSBhbGFybSBmdW5jdGlvbnMKK3NubXBfYWxhcm1fcmVnaXN0ZXIsCitzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyLAorc25tcF9hbGFybV91bnJlZ2lzdGVyIC0gYWxhcm0gZnVuY3Rpb25zCiAuU0ggU1lOT1BTSVMKIC5CICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KIC5QUApAQCAtMTYxLDcgKzE2Myw3IEBACiBzeXN0ZW0gY2FsbCwgYWx0aG91Z2ggb3ZlcmFsbCBwcmVjaXNpb24gaXMgb2YgY291cnNlIHN0aWxsIGRldGVybWluZWQKIGJ5IHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uICBSZWNvbW1lbmRlZC4KIC5TSCAiU0VFIEFMU08iCi0uQlIgc25tcF9hcGkgIigzKSwgIiBkZWZhdWx0X3N0b3JlICIoMyksICIgc25tcF9zZWxlY3RfaW5mbyAiKDMpLCAiCisuQlIgbmV0c25tcF9zZXNzaW9uX2FwaSAiKDMpLCAiIGRlZmF1bHRfc3RvcmUgIigzKSwgIgogLkJSIGFsYXJtICIoMiksICIgc2V0aXRpbWVyICIoMiksICIgc2VsZWN0ICIoMikiCiAuXCIgTG9jYWwgVmFyaWFibGVzOgogLlwiICBtb2RlOiBucm9mZgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfYXBpLjMuZGVmIGIvbWFuL3NubXBfYXBpLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWNiOTkxLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2FwaS4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0uXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0uXCIgCUNvcHlyaWdodCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5Ci0uXCIgCi0uXCIgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLS5cIiAKLS5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgCi0uXCIgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCAKLS5cIiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci0uXCIgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIAotLlwiIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIG5vdCBiZQotLlwiIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQotLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIAotLlwiIAotLlwiIENNVSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HCi0uXCIgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMCi0uXCIgQ01VIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUgotLlwiIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKLS5cIiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCi0uXCIgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotLlwiIFNPRlRXQVJFLgotLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QX0FQSSAzICIxOSBNYXkgMjAxMSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5TSCBOQU1FCi1zbm1wX3Nlc3NfaW5pdCwgc25tcF9vcGVuLCBzbm1wX3NlbmQsIHNubXBfYXN5bmNfc2VuZCwgc25tcF9mcmVlX3BkdSwgc25tcF9zZWxlY3RfaW5mbywgc25tcF9yZWFkLCBzbm1wX3RpbWVvdXQsIHNubXBfc3luY2hfcmVzcG9uc2UsIHNubXBfY2xvc2UsIHNubXBfcGVycm9yLCBzbm1wX3Nlc3NfcGVycm9yLCBzbm1wX2Vycm9yLCBzbm1wX2FwaV9lcnJzdHJpbmcgXC0gc2VuZCBhbmQgcmVjZWl2ZSBTTk1QIG1lc3NhZ2VzCi0uU0ggU1lOT1BTSVMKLSNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgotLlBQCi12b2lkIHNubXBfc2Vzc19pbml0ICggc3RydWN0IHNubXBfc2Vzc2lvbiAqICk7Ci0uUFAKLXN0cnVjdCBzbm1wX3Nlc3Npb24gKiBzbm1wX29wZW4gKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICopOwotLlJTCi0uQiAvKiBJbnB1dCBwYXJhbWV0ZXIgbm90IHVzZWQgaW4gYWN0aXZlIHNlc3Npb25zICovCi0uUkUKLS5QUAotaW50IHNubXBfc2VuZCAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb24sCi0uUlMKLXN0cnVjdCBzbm1wX3BkdSAqcGR1ICk7Ci0uUkUKLS5QUAotaW50IHNubXBfYXN5bmNfc2VuZCAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb24sCi0uUlMKLXN0cnVjdCBzbm1wX3BkdSAqcGR1LAotc25tcF9jYWxsYmFjayBjYWxsYmFjaywKLXZvaWQgKmNhbGxiYWNrRGF0YSApOwotLlJFCi0uUFAKLWludCBzbm1wX3NlbGVjdF9pbmZvICggaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsCi0uUlMKLXN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrICk7Ci0uUkUKLS5QUAotdm9pZCBzbm1wX3JlYWQgKCBmZF9zZXQgKmZkc2V0ICk7Ci0uUFAKLXZvaWQgc25tcF90aW1lb3V0ICggdm9pZCApOwotLlBQCi1pbnQgc25tcF9zeW5jaF9yZXNwb25zZSAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb24sCi0uUlMKLXN0cnVjdCBzbm1wX3BkdSAqcGR1LAotc3RydWN0IHNubXBfcGR1ICoqcmVzcG9uc2UpOwotLlJFCi0uUFAKLWludCBzbm1wX2Nsb3NlICggc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiApOwotLlBQCi12b2lkIHNubXBfZnJlZV9wZHUgKAotc3RydWN0IHNubXBfcGR1ICpwZHUgKTsKLS5QUAotdm9pZCBzbm1wX2Vycm9yICgKLXN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb24sCi0uUlMKLWludCAqcGNsaWJlcnIsCi1pbnQgKnBzbm1wZXJyLAotY2hhciAqKnBwZXJyc3RyaW5nICk7Ci0uUkUKLS5QUAotY2hhciAqc25tcF9hcGlfZXJyc3RyaW5nICggaW50IHNubXBlcnIgKTsKLS5QUAotdm9pZCBzbm1wX3BlcnJvciAoIGNoYXIgKiBtc2cgKTsKLS5SUwotLkIgLyogZm9yIHBhcnNpbmcgZXJyb3JzIG9ubHkgKi8KLS5SRQotLlBQCi12b2lkIHNubXBfc2Vzc19wZXJyb3IgKGNoYXIgKiBtc2csIHN0cnVjdCBzbm1wX3Nlc3Npb24gKik7Ci0uUlMKLS5CIC8qIGFsbCBvdGhlciBTTk1QIGxpYnJhcnkgZXJyb3JzICovCi0uUkUKLS5QUAotLlNIIERFU0NSSVBUSU9OCi0uSSBTbm1wX3Nlc3NfaW5pdAotcHJlcGFyZXMgYSBzdHJ1Y3Qgc25tcF9zZXNzaW9uIHRoYXQgc291cmNlcyB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzCi1hbmQgY29tbW9uIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhIHNldCBvZiBTTk1QIHRyYW5zYWN0aW9ucy4KLUFmdGVyIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0bwotLkkgc25tcF9vcGVuCi10byBjcmVhdGUgYW4gU05NUCBzZXNzaW9uLCB0aGUgc3RydWN0dXJlIGlzIG5vdCB1c2VkLgotLlBQCi0uSSBTbm1wX29wZW4KLXJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHktZm9ybWVkCi0uSSBzdHJ1Y3Qgc25tcF9zZXNzaW9uCi1vYmplY3QsIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHVzZSB0byByZWZlcmVuY2UgdGhlCi1hY3RpdmUgU05NUCBzZXNzaW9uLgotLlBQCi0uSSBTbm1wX3NlbmQsIHNubXBfYXN5bmNfc2VuZAotYW5kCi0uSSBzbm1wX2ZyZWVfcGR1Ci1lYWNoIHRha2UgYXMgaW5wdXQgYSBwb2ludGVyIHRvIGEKLS5JIHN0cnVjdCBzbm1wX3BkdQotb2JqZWN0LgotVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgYSB0cmFuc2FjdGlvbgotdGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvdmVyIGFuIG9wZW4gc2Vzc2lvbi4KLS5QUAotQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2Ugc3RydWN0dXJlcy4KLS5QUAotV2l0aCB0aGUKLS5JIHNubXBfYXN5bmNfc2VuZCgpCi1jYWxsLAotLkkgc25tcF9yZWFkKCkKLXdpbGwgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCi0uUFAKLS5JIFNubXBfcmVhZCwgc25tcF9zZWxlY3RfaW5mbywKLWFuZAotLkkgc25tcF90aW1lb3V0Ci1wcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlIHVzZSBvZiB0aGUKLS5JUiBzZWxlY3QoMikKLXN5c3RlbSBjYWxsIHNvIHRoYXQgU05NUCB0cmFuc2FjdGlvbnMgY2FuIG9jY3VyIGFzeW5jaHJvbm91c2x5LgotLlBQCi0uSSBTbm1wX3NlbGVjdF9pbmZvCi1pcyBnaXZlbiB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIHRvCi0uSSBzZWxlY3QKLWluIHRoZSBhYnNlbmNlIG9mIFNOTVAuICBGb3IgZXhhbXBsZSwgdGhpcyBtaWdodCBpbmNsdWRlIHdpbmRvdyB1cGRhdGUgaW5mb3JtYXRpb24uCi1UaGlzIGluZm9ybWF0aW9uIGlzIG1vZGlmaWVkIHNvIHRoYXQgU05NUCB3aWxsIGdldCB0aGUgc2VydmljZSBpdCByZXF1aXJlcyBmcm9tIHRoZQotY2FsbCB0bwotLkkgc2VsZWN0LgotSW4gdGhpcyBjYXNlLAotLkkgbnVtZmRzLCBmZHNldCwKLWFuZAotLkkgdGltZW91dAotY29ycmVzcG9uZCB0byB0aGUKLS5JIG5mZHMsIHJlYWRmZHMsCi1hbmQKLS5JIHRpbWVvdXQKLWFyZ3VtZW50cyB0bwotLkkgc2VsZWN0LAotcmVzcGVjdGl2ZWx5LiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgdGltZW91dCBtdXN0IGFsd2F5cyBwb2ludCB0byBhbiBhbGxvY2F0ZWQgKGJ1dCBwZXJoYXBzIHVuaW5pdGlhbGl6ZWQpCi0uSSBzdHJ1Y3QgdGltZXZhbC4KLUlmCi0uSSB0aW1lb3V0Ci13b3VsZCBoYXZlIGJlZW4gcGFzc2VkIGFzIE5VTEwsCi0uSSBibG9jawotaXMgc2V0IHRvIHRydWUsIGFuZAotLkkgdGltZW91dAotaXMgdHJlYXRlZCBhcyB1bmRlZmluZWQuICBUaGlzIHNhbWUgcnVsZSBhcHBsaWVzIHVwb24gcmV0dXJuIGZyb20KLS5JIHNubXBfc2VsZWN0X2luZm8uCi0uUFAKLUFmdGVyIGNhbGxpbmcKLS5JIHNubXBfc2VsZWN0X2luZm8sIHNlbGVjdAotaXMgY2FsbGVkIHdpdGggdGhlIHJldHVybmVkIGRhdGEuICBXaGVuIHNlbGVjdCByZXR1cm5zLAotLkkgc25tcF9yZWFkCi1zaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlCi0uSSBmZF9zZXQKLXJldHVybmVkIGZyb20KLS5JIHNlbGVjdAotdG8gcmVhZCBlYWNoIFNOTVAgc29ja2V0IHRoYXQgaGFzIGlucHV0LgotSWYKLS5JIHNlbGVjdAotdGltZXMgb3V0LAotLkkgc25tcF90aW1lb3V0Ci1zaG91bGQgYmUgY2FsbGVkIHRvIHNlZSBpZiB0aGUgdGltZW91dCB3YXMgaW50ZW5kZWQgZm9yIFNOTVAuCi0uUFAKLS5JIHNubXBfc3luY2hfcmVzcG9uc2UKLWlzIGEgY29udmVuaWVuY2Ugcm91dGluZSB0aGF0IHdpbGwgc2VuZCB0aGUgcmVxdWVzdCwKLXdhaXQgZm9yIHRoZSByZXNwb25zZSBhbmQgcHJvY2VzcyBpdCBiZWZvcmUgcmV0dXJuaW5nLgotU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YKLS5JIHNubXBfc2VuZCwgc25tcF9yZWFkCi1ldGMgZm9yIGRldGFpbHMuCi0uU0ggRElBR05PU1RJQ1MKLS5QUAotUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgdXNlZAotLklSIHNubXBfZ2V0X2Vycm5vCi10byByZWFkIHRoZSBnbG9iYWwgdmFyaWFibGUKLS5JIHNubXBfZXJybm8KLXdoaWNoIG1heSBoYXZlIGhlbGQgdGhlIGVycm9yIHN0YXR1cyB3aXRoaW4gdGhlIFNOTVAgbGlicmFyeS4KLVRoZSBleGlzdGluZyBtZXRob2QKLS5JIHNubXBfcGVycm9yCi1zaG91bGQgYmUgdXNlZCB0byBsb2cgQVNOLjEgY29kaW5nIGVycm9ycyBvbmx5LgotLlBQCi1UaGUgbmV3IG1ldGhvZAotLkkgc25tcF9zZXNzX3BlcnJvcgotaXMgcHJvdmlkZWQgdG8gY2FwdHVyZSBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlIHByb2Nlc3NpbmcKLW9mIGEgcGFydGljdWxhciBTTk1QIHNlc3Npb24uCi0uSSBTbm1wX3Nlc3NfcGVycm9yCi1jYWxscwotLklSIHNubXBfZXJyb3IKLWZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgIkMiIGxpYnJhcnkgZXJyb3IKLS5JIGVycm5vCi0sIHRoZSBTTk1QIGxpYnJhcnkgZXJyb3IKLS5JIHNubXBlcnIKLSwgYW5kIHRoZSBTTk1QIGxpYnJhcnkgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZQotdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gZXJyb3IgdGhhdCBvY2N1cnJlZCBkdXJpbmcgYSBnaXZlbiBzZXNzaW9uLgotLlBQCi1Ob3RlIHRoYXQgaW4gYWxsIGNhc2VzIGV4Y2VwdCBvbmUsCi0uSVIgc25tcF9zZXNzX3BlcnJvcgotc2hvdWxkIGJlIGhhbmRlZCB0aGUKLS5JIHN0cnVjdCBzbm1wX3Nlc3Npb24gKgotcG9pbnRlciByZXR1cm5lZCBmcm9tCi0uSVIgc25tcF9vcGVuLgotSWYKLS5JUiBzbm1wX29wZW4KLXJldHVybnMgYSBudWxsIHBvaW50ZXIsIHBhc3MgdGhlIElOUFVUCi0uSSBzdHJ1Y3Qgc25tcF9zZXNzaW9uICoKLXBvaW50ZXIgdXNlZCB0byBjYWxsCi0uSVIgc25tcF9vcGVuLgotLlBQCi1FcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCi0uSSBzbm1wX2Nsb3NlCi1hbmQKLS5JIHNubXBfc2VuZAotaXMgaW5kaWNhdGVkIGJ5IHJldHVybiBvZiAwLiAgQSBzdWNjZXNzZnVsIHN0YXR1cyB3aWxsIHJldHVybiBhIDEgZm9yCi0uSSBzbm1wX2Nsb3NlCi1hbmQgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIHBhY2tldCBmb3IKLS5JIHNubXBfc2VuZC4KLVVwb24gc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbQotLkkgc25tcF9zZW5kCi10aGUgcGR1IHdpbGwgYmUgZnJlZWQgYnkgdGhlIGxpYnJhcnkuCi0uUFAKLUNvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGNvbXBsZXRlIHNldCBvZiBTTk1QIGxpYnJhcnkKLWVycm9yIHZhbHVlcy4KLVRoZSBTTk1QIGxpYnJhcnkgZXJyb3IgdmFsdWUKLS5JUiBzbm1wZXJyCi1jYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotLlJTIDJuCi0uSVAgU05NUEVSUl9HRU5FUlIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotQSBnZW5lcmljIGVycm9yIG9jY3VycmVkLgotLklQIFNOTVBFUlJfQkFEX0xPQ1BPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIGxvY2FsIHBvcnQgd2FzIGJhZCBiZWNhdXNlIGl0IGhhZCBhbHJlYWR5IGJlZW4KLWFsbG9jYXRlZCBvciBwZXJtaXNzaW9uIHdhcyBkZW5pZWQuCi0uSVAgU05NUEVSUl9CQURfQUREUkVTUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgZ2l2ZW4gd2FzIG5vdCB1c2VhYmxlLgotLklQIFNOTVBFUlJfQkFEX1NFU1NJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIHNwZWNpZmllZCBzZXNzaW9uIHdhcyBub3Qgb3Blbi4KLS5JUCBTTk1QRVJSX1RPT19MT05HIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX05PX1NPQ0tFVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9WMl9JTl9WMSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9WMV9JTl9WMiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUkVQRUFURVJTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfQVNOMV9CVUlMRCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfU0VORFRPIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9QQVJTRSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfVkVSU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9OT0FVVEhfREVTUFJJViBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9BQk9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9VTktOT1dOX1BEVSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9USU1FT1VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5SRQotLlBQCi1BIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgY29kZSBjYW4gYmUgb2J0YWluZWQgd2l0aAotLklSIHNubXBfYXBpX2VycnN0cmluZyAsCi1hbmQgYSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIG1heSBiZSBwcmludGVkIHVzaW5nCi0uSSBzbm1wX3BlcnJvcgotdGhhdCBmdW5jdGlvbnMgbGlrZSB0aGUKLS5JIHBlcnJvcgotc3RhbmRhcmQgcm91dGluZS4KLS5TSCAiU0VFIEFMU08iCi1zZWxlY3QoMiksIHNubXBfYXBpLmgKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMyBiL21hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9jbG9zZS4zIGIvbWFuL3NubXBfY2xvc2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9jbG9zZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfY29uZmlnLjUuZGVmIGIvbWFuL3NubXBfY29uZmlnLjUuZGVmCmluZGV4IGU3YWM0YTYuLmZkMzA4NzMgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wX2NvbmZpZy41LmRlZgorKysgYi9tYW4vc25tcF9jb25maWcuNS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUF9DT05GSUcgNSAiNSBNYXkgMjAwNSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QX0NPTkZJRyA1ICIwOCBNYXIgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wX2NvbmZpZyAtIGhhbmRsaW5nIG9mIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gZmlsZXMKIC5TSCBERVNDUklQVElPTgpAQCAtMTEsOSArMTEsMTAgQEAKIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIGZvbGxvd2luZyA0IGRpcmVjdG9yaWVzLCBpbiBvcmRlcjoKIFNZU0NPTkZESVIvc25tcCwKIERBVEFESVIvc25tcCwgTElCRElSL3NubXAsIGFuZCAkSE9NRS8uc25tcC4gIEluIGVhY2ggb2YgdGhlc2UKLWRpcmVjdG9yaWVzLCBpdCBsb29rcyBmb3IgZmlsZXMgd2l0aCB0aGUgZXh0ZW5zaW9uIG9mIGJvdGgKLS5JUiBjb25mICIgYW5kICIgbG9jYWwuY29uZgotKHJlYWRpbmcgdGhlIHNlY29uZCBvbmVzIGxhc3QpLiAgSW4gdGhpcyBtYW5uZXIsIHRoZXJlIGFyZQorZGlyZWN0b3JpZXMsIGl0IGxvb2tzIGZvciBmaWxlcyBzbm1wLmNvbmYsIHNubXBkLmNvbmYgYW5kL29yCitzbm1wdHJhcGQuY29uZiwgYXMgd2VsbCBhcyBzbm1wLmxvY2FsLmNvbmYsIHNubXBkLmxvY2FsLmNvbmYKK2FuZC9vciBzbm1wdHJhcGQubG9jYWwuY29uZi4gKi5sb2NhbC5jb25mIGFyZSBhbHdheXMKK3JlYWQgbGFzdC4gSW4gdGhpcyBtYW5uZXIsIHRoZXJlIGFyZQogOCBkZWZhdWx0IHBsYWNlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBjYW4gZXhpc3QgZm9yIGFueSBnaXZlbgogY29uZmlndXJhdGlvbiBmaWxlIHR5cGUuCiAuUFAKQEAgLTE3MSwxNSArMTcyLDQ0IEBACiAuUFAKIEFueSBsaW5lcyBiZWdpbm5pbmcgd2l0aCB0aGUgY2hhcmFjdGVyICcjJyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcwogYXJlIHRyZWF0ZWQgYXMgYSBjb21tZW50IGFuZCBhcmUgbm90IHBhcnNlZC4KKy5TSCAiSU5DTFVESU5HIE9USEVSIENPTkZJR1VSQVRJT04gRklMRVMiCitJdCBpcyBwb3NzaWJsZSB0byBpbmNsdWRlIG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHByb2Nlc3NpbmcKK2R1cmluZyBub3JtYWwgY29uZmlndXJhdGlvbiBmaWxlIHByb2Nlc3NpbmcuOgorLlBQCisuUlMKKy5uZgorIyBpbmNsdWRlIHNpdGUgc3BlY2lmaWMgY29uZmlnCitpbmNsdWRlRmlsZSBzaXRlLmNvbmYKKy5SRQorLlBQCitUaGlzIHdpbGwgbG9hZCB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlCitwYXRoIHRvIGZpbGUgbXVzdCBiZSBlaXRoZXIgYWJzb2x1dGUsIHN0YXJ0aW5nIHdpdGggJy8nLAorb3IgcmVsYXRpdmUuIFRoZSByZWxhdGl2ZSBwYXRoIGlzIHRoZW4gcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQord2hlcmUgdGhlIHBhcmVudCBmaWxlIHdpdGggJ2luY2x1ZGVGaWxlJyBkaXJlY3RpdmUgcmVzaWRlcy4KKy5QUAorVGhlIGluY2x1ZGVkIGZpbGUgbmFtZSBkb2VzIG5vdCBuZWVkIHRvIGhhdmUgJy5jb25mJyBzdWZmaXguCisuUFAKKy5SUworLm5mCisjIGluY2x1ZGUgYSBhbGwgKi5jb25mIGZpbGVzIGluIGEgZGlyZWN0b3J5CitpbmNsdWRlRGlyIC9ldGMvc25tcC9jb25maWcuZAorLlJFCisuUFAKK1RoaXMgd2lsbCBzZWFyY2ggc3BlY2lmaWVkIGRpcmVjdG9yeSBmb3IgYWxsIGZpbGVzIHdpdGggJy5jb25mJworc3VmZml4IGFuZCBwcm9jZXNzIHRoZW0gYXMgaWYgdGhleSB3ZXJlIGluY2x1ZGVkIHVzaW5nIGluY2x1ZGVGaWxlCitkaXJlY3RpdmUuIFRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBub3QgcHJvY2Vzc2VkIGluIGFueSBwYXJ0aWN1bGFyCitvcmRlci4KKy5QUAorVGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgbXVzdCBiZSBhYnNvbHV0ZSBkaXJlY3RvcnkgcGF0aC4KIC5TSCAiQVBJIElOVEVSRkFDRSIKIC5QUAogSW5mb3JtYXRpb24gYWJvdXQgd3JpdGluZyBDIGNvZGUgdGhhdCBtYWtlcyB1c2Ugb2YgdGhpcyBzeXN0ZW0gaW4KIGVpdGhlciB0aGUgYWdlbnQncyBNSUIgbW9kdWxlcyBvciBpbiBhcHBsaWNhdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZQotLkkgcmVhZF9jb25maWcoMykKKy5JIG5ldHNubXBfY29uZmlnX2FwaSgzKQogbWFudWFsIHBhZ2UuCiAuU0ggIlNFRSBBTFNPIgogc25tcGNvbmYoMSksCi1yZWFkX2NvbmZpZygzKSwKK25ldHNubXBfY29uZmlnX2FwaSgzKSwKIHNubXAuY29uZig1KSwKIHNubXBkLmNvbmYoNSkKIC5cIiBMb2NhbCBWYXJpYWJsZXM6CmRpZmYgLS1naXQgYS9tYW4vc25tcF9lcnJvci4zIGIvbWFuL3NubXBfZXJyb3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9lcnJvci4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfZnJlZV9wZHUuMyBiL21hbi9zbm1wX2ZyZWVfcGR1LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfZnJlZV9wZHUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX29wZW4uMyBiL21hbi9zbm1wX29wZW4uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9vcGVuLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9wZXJyb3IuMyBiL21hbi9zbm1wX3BlcnJvci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3BlcnJvci4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfcmVhZC4zIGIvbWFuL3NubXBfcmVhZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3JlYWQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3NlbGVjdF9pbmZvLjMgYi9tYW4vc25tcF9zZWxlY3RfaW5mby4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3NlbGVjdF9pbmZvLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZW5kLjMgYi9tYW4vc25tcF9zZW5kLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2VuZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYgYi9tYW4vc25tcF9zZXNzX2FwaS4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg0MTRmYy4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX2FwaS4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0uVEggU05NUF9TRVNTX0FQSSAzICIxOSBNYXkgMjAxMSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5TSCBOQU1FCi1zbm1wX3Nlc3NfaW5pdCwgc25tcF9zZXNzX29wZW4sIHNubXBfc2Vzc19zZXNzaW9uLAotc25tcF9zZXNzX3NlbmQsIHNubXBfc2Vzc19hc3luY19zZW5kLAotc25tcF9zZXNzX3NlbGVjdF9pbmZvLCBzbm1wX3Nlc3NfcmVhZCwKLXNubXBfc2Vzc190aW1lb3V0LCBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UsCi1zbm1wX3Nlc3NfY2xvc2UsIHNubXBfc2Vzc19lcnJvciAtIHNlc3Npb24gZnVuY3Rpb25zCi0uU0ggU1lOT1BTSVMKLS5CICNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgotLlBQCi0uQkkgInZvaWQgc25tcF9zZXNzX2luaXQoc3RydWN0IHNubXBfc2Vzc2lvbiAqIiBzZXNzaW9uICIpOyIKLS5QUAotLkJJICJ2b2lkICpzbm1wX3Nlc3Nfb3BlbihzdHJ1Y3Qgc25tcF9zZXNzaW9uICoiIHNlc3Npb24gIik7IgotLlBQCi0uQkkgInN0cnVjdCBzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uKHZvaWQgKiIgaGFuZGxlICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX3NlbmQodm9pZCAqIiBoYW5kbGUgIiwgc3RydWN0IHNubXBfcGR1ICoiIHBkdSAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19hc3luY19zZW5kKHZvaWQgKiIgaGFuZGxlICIsIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiIgcGR1ICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9jYWxsYmFjayAiIGNhbGxiYWNrICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIiBjYWxsYmFja0RhdGEgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqIiBoYW5kbGUgIiwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiIgbnVtZmRzICIsIGZkX3NldCAqIiBmZHNldCAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqIiB0aW1lb3V0ICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIiBibG9jayAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19yZWFkKHZvaWQgKiIgaGFuZGxlICIsIGZkX3NldCAqIiBmZHNldCAiKTsiCi0uUFAKLS5CSSAidm9pZCBzbm1wX3Nlc3NfdGltZW91dCh2b2lkICoiIGhhbmRsZSAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSh2b2lkICoiIGhhbmRsZSAiLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICoiIHBkdSAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqKiIgcmVzcG9uc2UgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3NfY2xvc2Uodm9pZCAqIiBoYW5kbGUgIik7IgotLlBQCi0uQkkgInZvaWQgc25tcF9zZXNzX2Vycm9yKHZvaWQgKiIgaGFuZGxlICIsIGludCAqIiBwY2xpYmVyciAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICBpbnQgKiIgcHNubXBlcnIgIiwgY2hhciAqKiIgcHBlcnJzdHJpbmcgIik7IgotLlNIIERFU0NSSVBUSU9OCi1UaGVzZSBmdW5jdGlvbnMgZGVmaW5lIGEgc3Vic2V0IG9mIHRoZSBBUEkgdGhhdCBjYW4gYmUgdXNlZAotdG8gbWFuYWdlIHNpbmdsZSBTTk1QIHNlc3Npb25zIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24uCi1FeGNlcHQgZm9yCi0uQlIgc25tcF9zZXNzX3Nlc3Npb24oKSAsCi10aGVzZSBmdW5jdGlvbnMgYXJlIHNpbmdsZSBzZXNzaW9uIHZlcnNpb25zIG9mIHRoZSB0cmFkaXRpb25hbAotU05NUCBsaWJyYXJ5IEFQSS4KLS5QUAotTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB1c2UgYW4gb3BhcXVlIHBvaW50ZXIKLS5SSSAoIGhhbmRsZQotaW4gdGhlIGFib3ZlIHByb3RvdHlwZXMpIHRvIGlkZW50aWZ5IGEgc2luZ2xlIHNlc3Npb24gaW4gbGlldSBvZiBhCi0uSSBzZXNzaW9uCi1wb2ludGVyIChhcyBpbiB0aGUgdHJhZGl0aW9uYWwgQVBJKS4KLS5QUAotLkIgc25tcF9zZXNzX2luaXQoKQotcHJlcGFyZXMgYSBzdHJ1Y3Qgc25tcF9zZXNzaW9uIHRoYXQgc291cmNlcyB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzCi1hbmQgY29tbW9uIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhIHNldCBvZiBTTk1QIHRyYW5zYWN0aW9ucy4KLUFmdGVyIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0bwotLkIgc25tcF9zZXNzX29wZW4oKQotdG8gY3JlYXRlIGFuIFNOTVAgc2Vzc2lvbiwgdGhlIHN0cnVjdHVyZSBpcyBubyBsb25nZXIgdXNlZC4gIEluc3RlYWQKLXRoZSBvcGFxdWUgcG9pbnRlciByZXR1cm5lZCBieQotLkIgc25tcF9zZXNzX29wZW4oKQotaXMgdXNlZCB0byByZWZlciB0byB0aGF0IHNlc3Npb24gaGVuY2Vmb3J0aC4KLS5QUAotU05NUCBzZXNzaW9ucyB0aGF0IGFyZSBjcmVhdGVkIHdpdGgKLS5CIHNubXBfc2Vzc19vcGVuKCkKLWFyZSBub3QgYWZmZWN0ZWQgYnksIGFuZCBTSE9VTEQgTk9UIEJFIFVTRUQgV0lUSCwKLS5CUiBzbm1wX3NlbGVjdF9pbmZvKCkgIiwgIiBzbm1wX3JlYWQoKSAiLCAiIHNubXBfdGltZW91dCgpICIgbm9yIgotLkJSIHNubXBfY2xvc2UoKSAuCi1SYXRoZXIgdGhlIGVxdWl2YWxlbnQgc2luZ2xlIHNlc3Npb24gZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIHNob3VsZAotYmUgdXNlZC4KLS5QUAotLkIgc25tcF9zZXNzX2luaXQoKQotYW5kCi0uQiBzbm1wX3Nlc3Nfb3BlbigpCi1lYWNoIHRha2UgYXMgaW5wdXQgYSBwb2ludGVyIHRvIGEgc3RydWN0IHNubXBfc2Vzc2lvbiBvYmplY3QuCi1UaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgYSBzZXQgb2YgdHJhbnNhY3Rpb25zIHRoYXQKLXdpbGwgc2hhcmUgc2ltaWxhciB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzLgotLkIgc25tcF9zZXNzX3Nlc3Npb24oKQotdGFrZXMgdGhlIG9wYXF1ZSBzZXNzaW9uIGhhbmRsZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8KLWl0cyBhc3NvY2lhdGVkIHN0cnVjdCBzbm1wX3Nlc3Npb24uCi0uUFAKLS5CIHNubXBfc2Vzc19zZW5kKCkKLWFuZAotLkIgc25tcF9zZXNzX2FzeW5jX3NlbmQoKQotZWFjaCB0YWtlIGEKLS5JIHBkdQotcGFyYW1ldGVyLCB3aGljaCBwb2ludHMgdG8gYSBzdHJ1Y3Qgc25tcF9wZHUgb2JqZWN0IGNvbnRhaW5pbmcKLWluZm9ybWF0aW9uIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvdmVyCi1hbiBvcGVuIHNlc3Npb24uCi0uUFAKLUNvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIHN0cnVjdHVyZXMuCi0uUFAKLVdpdGggdGhlCi0uSSBzbm1wX3Nlc3NfYXN5bmNfc2VuZCgpCi1jYWxsLAotLkkgc25tcF9zZXNzX3JlYWQoKQotd2lsbCBpbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayB3aGVuIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZC4KLS5QUAotLkJSIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpICIsICIgc25tcF9zZXNzX3JlYWQoKSAiIGFuZCAiIHNubXBfc2Vzc190aW1lb3V0KCkKLXByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciB0aGUgdXNlIG9mIHRoZQotLkJSIHNlbGVjdCAoMikKLXN5c3RlbSBjYWxsIHNvIHRoYXQgU05NUCB0cmFuc2FjdGlvbnMgZm9yIGEgc2luZ2xlIHNlc3Npb24gY2FuIG9jY3VyCi1hc3luY2hyb25vdXNseS4KLS5QUAotLkIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkKLWlzIHBhc3NlZCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIHRvCi0uQlIgc2VsZWN0ICgyKQotaW4gdGhlIGFic2VuY2Ugb2YgU05NUC4gIEZvciBleGFtcGxlLCB0aGlzIG1pZ2h0IGluY2x1ZGUgZmlsZQotZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGxvb3Agb2YgYSBncmFwaGljYWwKLWFwcGxpY2F0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIG1vZGlmaWVkIHNvIHRoYXQgU05NUCB3aWxsIGdldCB0aGUKLXNlcnZpY2UgaXQgcmVxdWlyZXMgZnJvbSB0aGUgY2FsbCB0bwotLkJSIHNlbGVjdCAoMikuCi1JbiB0aGlzIGNhc2UsCi0uSVIgbnVtZmRzICIsICIgZmRzZXQgIiBhbmQgIiB0aW1lb3V0Ci1jb3JyZXNwb25kIHRvIHRoZQotLklSIG5mZHMgIiwgIiByZWFkZmRzICIgYW5kICIgdGltZW91dAotYXJndW1lbnRzIHRvCi0uQlIgc2VsZWN0ICgyKQotcmVzcGVjdGl2ZWx5LiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgdGltZW91dCBtdXN0IEFMV0FZUyBwb2ludCB0bwotYW4gYWxsb2NhdGVkIChidXQgcGVyaGFwcyB1bmluaXRpYWxpemVkKQotLkkgc3RydWN0IHRpbWV2YWwKLShpdCBjYW5ub3QgYmUgTlVMTCBhcyBmb3IKLS5CUiBzZWxlY3QgKDIpKS4KLUlmCi0uSSB0aW1lb3V0Ci13b3VsZCBoYXZlIGJlZW4gcGFzc2VkIGFzIE5VTEwsCi0uSSBibG9jawotaXMgaW5zdGVhZCBzZXQgdG8gdHJ1ZSwgYW5kCi0uSSB0aW1lb3V0Ci1pcyB0cmVhdGVkIGFzIHVuZGVmaW5lZC4gIFRoaXMgc2FtZSBydWxlIGFwcGxpZXMgdXBvbiByZXR1cm4gZnJvbQotLkJSIHNubXBfc2VsZWN0X2luZm8oKSAuCi0uUFAKLUFmdGVyIGNhbGxpbmcKLS5CIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpICwKLS5CUiBzZWxlY3QgKDIpCi1zaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHJldHVybmVkIGRhdGEuICBXaGVuIGl0IHJldHVybnMsCi0uQiBzbm1wX3Nlc3NfcmVhZCgpCi1zaG91bGQgdGhlbiBiZSBjYWxsZWQgd2l0aCB0aGUKLS5JIGZkX3NldAotcmV0dXJuZWQgZnJvbQotLkJSIHNlbGVjdCAoMikuCi1UaGlzIHdpbGwgcmVhZCBhbnkgaW5wdXQgZnJvbSB0aGlzIHNlc3Npb24ncyBTTk1QIHNvY2tldC4gIElmCi0uQlIgc2VsZWN0ICgyKQotdGltZXMgb3V0ICh0aGF0IGlzLCBpdCByZXR1cm5zIHplcm8pLAotLkIgc25tcF9zZXNzX3RpbWVvdXQoKQotc2hvdWxkIGJlIGNhbGxlZCB0byBzZWUgaWYgYSB0aW1lb3V0IGhhcyBvY2N1cnJlZCBvbiB0aGUgU05NUAotc2Vzc2lvbi4KLS5QUAotLkkgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlCi1pcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgdGhhdCB3aWxsIHNlbmQgdGhlIHJlcXVlc3QsCi13YWl0IGZvciB0aGUgcmVzcG9uc2UgYW5kIHByb2Nlc3MgaXQgYmVmb3JlIHJldHVybmluZy4KLVNlZSB0aGUgZGVzY3JpcHRpb25zIG9mCi0uSSAic25tcF9zZXNzX3NlbmQiICIsICIgInNubXBfc2Vzc19yZWFkIgotZXRjIGZvciBkZXRhaWxzLgotLlNIIERJQUdOT1NUSUNTCi0uUFAKLUVycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKLS5CIHNubXBfc2Vzc19vcGVuKCkKLWlzIGluZGljYXRlZCBieSByZXR1cm4gb2YgYSBOVUxMIHBvaW50ZXIuCi1FcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCi0uQiBzbm1wX3Nlc3NfY2xvc2UoKQotYW5kCi0uQiBzbm1wX3Nlc3Nfc2VuZCgpCi1pcyBpbmRpY2F0ZWQgYnkgYSByZXR1cm4gdmFsdWUgb2YgMC4gIEEgc3VjY2Vzc2Z1bCBzdGF0dXMgd2lsbCByZXR1cm4KLTEuCi0uUFAKLUZ1cnRoZXIgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IHVzaW5nCi0uQiBzbm1wX3Nlc3NfZXJyb3IoKQotdG8gc2VlIHdoYXQgdHlwZSBvZiBlcnJvciBoYXMgb2NjdXJyZWQuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlCi1TTk1QCi0uSSBzbm1wX2Vycm5vCi12YXJpYWJsZSwgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0KLS5JIGVycm5vCi12YXJpYWJsZSwgYW5kIGEgc3RyaW5nIGludGVycHJldGF0aW9uIG9mIGJvdGggdmFyaWFibGVzLiAgVGhlIHN0cmluZwotbXVzdCBiZSBmcmVlZCBhZnRlciB1c2UgYnkgdGhlIGNhbGxlci4KLS5QUAotRm9yIGVycm9ycyByZXR1cm5lZCBieQotLkJSIHNubXBfc2Vzc19vcGVuKCkgLAotdXNlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uCi0uQiBzbm1wX2Vycm9yKCkKLWluc3RlYWQgb2YKLS5CUiBzbm1wX3Nlc3NfZXJyb3IoKSAuCi0uUFAKLUNvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGNvbXBsZXRlIHNldCBvZiBTTk1QIGxpYnJhcnkKLWVycm9yIHZhbHVlcy4KLVRoZSBTTk1QIGxpYnJhcnkgZXJyb3IgdmFsdWUKLS5JUiBzbm1wZXJyCi1jYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotLlJTIDJuCi0uSVAgU05NUEVSUl9HRU5FUlIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotQSBnZW5lcmljIGVycm9yIG9jY3VycmVkLgotLklQIFNOTVBFUlJfQkFEX0xPQ1BPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIGxvY2FsIHBvcnQgd2FzIGJhZCBiZWNhdXNlIGl0IGhhZCBhbHJlYWR5IGJlZW4KLWFsbG9jYXRlZCBvciBwZXJtaXNzaW9uIHdhcyBkZW5pZWQuCi0uSVAgU05NUEVSUl9CQURfQUREUkVTUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgZ2l2ZW4gd2FzIG5vdCB1c2VhYmxlLgotLklQIFNOTVBFUlJfQkFEX1NFU1NJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIHNwZWNpZmllZCBzZXNzaW9uIHdhcyBub3Qgb3Blbi4KLS5JUCBTTk1QRVJSX1RPT19MT05HIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX05PX1NPQ0tFVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9WMl9JTl9WMSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9WMV9JTl9WMiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUkVQRUFURVJTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfQVNOMV9CVUlMRCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfU0VORFRPIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9SQ1ZGUk9NIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9QQVJTRSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfVkVSU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfQ09NTVVOSVRZIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX05PQVVUSF9ERVNQUklWIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0FCT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1VOS05PV05fUERVIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1RJTUVPVVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLlJFCi0uUFAKLS5TSCAiU0VFIEFMU08iCi0uQlIgc2VsZWN0ICIoMiksICIgc25tcF9hcGkgIigzKSwgIiBzbm1wX2FwaS5oCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMyBiL21hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX2Nsb3NlLjMgYi9tYW4vc25tcF9zZXNzX2Nsb3NlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19jbG9zZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX2Vycm9yLjMgYi9tYW4vc25tcF9zZXNzX2Vycm9yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19lcnJvci4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX2luaXQuMyBiL21hbi9zbm1wX3Nlc3NfaW5pdC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfaW5pdC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX29wZW4uMyBiL21hbi9zbm1wX3Nlc3Nfb3Blbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3Nfb3Blbi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3BlcnJvci4zIGIvbWFuL3NubXBfc2Vzc19wZXJyb3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3BlcnJvci4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19yZWFkLjMgYi9tYW4vc25tcF9zZXNzX3JlYWQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3JlYWQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zIGIvbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19zZW5kLjMgYi9tYW4vc25tcF9zZXNzX3NlbmQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3NlbmQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMgYi9tYW4vc25tcF9zZXNzX3Nlc3Npb24uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3Nlc3Npb24uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc190aW1lb3V0LjMgYi9tYW4vc25tcF9zZXNzX3RpbWVvdXQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3RpbWVvdXQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zIGIvbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMgYi9tYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfdGltZW91dC4zIGIvbWFuL3NubXBfdGltZW91dC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3RpbWVvdXQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3RyYXBfYXBpLjMuZGVmIGIvbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxM2Q2NzcuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0uVEggU05NUF9UUkFQX0FQSSAzICIyOSBTZXAgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5TSCBOQU1FCi1zZW5kX2Vhc3lfdHJhcCwgc2VuZF90cmFwX3ZhcnMsIHNlbmRfdjJ0cmFwIC0gc2VuZCBUUkFQcyBvciBJTkZPUk1zIGZyb20gYSBOZXQtU05NUCBNSUIgbW9kdWxlCi0uU0ggU1lOT1BTSVMKLS5CICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg+Ci0uUFAKLS5CSSAidm9pZCBzZW5kX2Vhc3lfdHJhcChpbnQgIiB0cmFwICIsIGludCAiIHNwZWNpZmljICIpOyIKLS5QUAotLkJJICJ2b2lkIHNlbmRfdHJhcF92YXJzKGludCAiIHRyYXAgIiwgaW50ICIgc3BlY2lmaWMgIiwgc3RydWN0IHZhcmlhYmxlX2xpc3QgKiIgdmFycyAiKTsiCi0uUFAKLS5CSSAidm9pZCBzZW5kX3YydHJhcChzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqIiB2YXJzICIpOyIKLS5TSCBERVNDUklQVElPTgotVGhlc2UgdGhyZWUgcm91dGluZXMgbWF5IGJlIHVzZWQgdG8gc2VuZCB0cmFwcyBmcm9tIGEgTUlCIG1vZHVsZQotd2l0aGluIHRoZSBOZXQtU05NUCBhZ2VudCAoaW5jbHVkaW5nIGFuIEFnZW50WCBzdWJhZ2VudCkuCi0uUFAKLS5CIHNlbmRfZWFzeV90cmFwKCkKLXNlbmRzIGFuIFNOTVB2MSB0cmFwIChvciB0aGUgU05NUHYyIGVxdWl2YWxlbnQpIHRvIHRoZSBsaXN0IG9mCi1jb25maWd1cmVkIHRyYXAgZGVzdGluYXRpb25zIChvciAic2lua3MiKSwgdXNpbmcgdGhlIHByb3ZpZGVkIHZhbHVlcwotZm9yIHRoZSBnZW5lcmljIHRyYXAgdHlwZSwgYW5kIHNwZWNpZmljIHRyYXAgdmFsdWUuCi0uUFAKLS5CIHNlbmRfdHJhcF92YXJzKCkKLWlzIHNpbWlsYXIsIGJ1dCBhcHBlbmRzIHRoZSBzdXBwbGllZCBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIHRvIHRoZQotdHJhcHMgdGhhdCBhcmUgc2VudC4KLS5QUAotLkIgc2VuZF92MnRyYXAoKQotdXNlcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiB2YXJpYWJsZSBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLAotd2hpY2ggaXMgc2VudCB0byBTTk1QdjItY2FwYWJsZSBzaW5rcyBvbiB0aGUgY29uZmlndXJlZCBsaXN0LiAgQW4KLWVxdWl2YWxlbnQgSU5GT1JNIGlzIHNlbnQgdG8gdGhlIGNvbmZpZ3VyZWRxIGxpc3Qgb2YgaW5mb3JtIHNpbmtzLgotU2lua3MgdGhhdCBjYW4gb25seSBoYW5kbGUgU05NUHYxIHRyYXBzIGFyZSBza2lwcGVkLgotLlBQCi1UaGUgdmFyaW91cyAic2VuZF90cmFwKCkiIGNhbGxzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRyYXBzIGluIGRpZmZlcmVudAotZm9ybWF0cy4gIEFuZCB0aGUgdmFyaW91cyAidHJhcHNpbmsiIGRpcmVjdGl2ZXMgYWxsb3cgeW91IHRvIHNwZWNpZnkKLWRlc3RpbmF0aW9ucyB0byByZWNlaXZlIGRpZmZlcmVudCBmb3JtYXRzLgotQnV0ICphbGwqIHRyYXBzIGFyZSBzZW50IHRvICphbGwqIGRlc3RpbmF0aW9ucywgcmVnYXJkbGVzcyBvZiBob3cgdGhleQotd2VyZSBzcGVjaWZpZWQuCi0ubmYKLUkuZS4gaXQncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX18gIHRyYXBzaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLwotICAgIHNlbmRfZWFzeV90cmFwIFxfX18gIFsgIFRyYXAgICAgICBdIF9fX18gIHRyYXAyc2luawotICAgICAgICAgICAgICAgICAgICBfX18gIFsgR2VuZXJhdG9yICBdCi0gICAgc2VuZF92MnRyYXAgICAgLyAgICAgWyAgICAgICAgICAgIF0gLS0tLS0gaW5mb3Jtc2luawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX19fCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhcHNlc3MKLQotKk5vdCoKLSAgICAgc2VuZF9lYXN5X3RyYXAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwc2luawotICAgICBzZW5kX3YydHJhcCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXAyc2luawotICAgICA/Pz8/ICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIGluZm9ybXNpbmsKLSAgICAgPz8/PyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwc2VzcwotLmZpCi0uU0ggV0FSTklOR1MKLVRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNlbmQgdGhlIHRyYXBzIGltbWVkaWF0ZWx5IHRoZXkgYXJlIGNhbGxlZC4KLUludm9raW5nIHRoZW0gYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgaXMgbGVmdCB0byB0aGUgTUlCIG1vZHVsZSBwcm9ncmFtbWVyLgotLlNIICJTRUUgQUxTTyIKLS5CUiBzbm1wZC5jb25mICIoNSksICIgc25tcHRyYXBkICIoOCkiCmRpZmYgLS1naXQgYS9tYW4vc25tcGJ1bGtnZXQuMS5kZWYgYi9tYW4vc25tcGJ1bGtnZXQuMS5kZWYKaW5kZXggYjRlMDYyZC4uMjUyMTBmMyAxMDA2NDQKLS0tIGEvbWFuL3NubXBidWxrZ2V0LjEuZGVmCisrKyBiL21hbi9zbm1wYnVsa2dldC4xLmRlZgpAQCAtMTcsMTMgKzE3LDEzIEBACiBwaW5wb2ludCB3aHkgdGhlIHJlcXVlc3Qgd2FzIG1hbGZvcm1lZC4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkJJIC1DbiA8TlVNPgorLkJJIFwtQ24gPE5VTT4KIFNldCB0aGUKIC5JIG5vbi1yZXBlYXRlcnMKIGZpZWxkIGluIHRoZSBHRVRCVUxLIFBEVS4gIFRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWQKIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBub3QgYmUgaXRlcmF0ZWQgb3Zlci4gIFRoZSBkZWZhdWx0IGlzIDAuCiAuVFAKLS5CSSAtQ3IgPE5VTT4KKy5CSSBcLUNyIDxOVU0+CiBTZXQgdGhlCiAuSSBtYXgtcmVwZXRpdGlvbnMKIGZpZWxkIGluIHRoZSBHRVRCVUxLIFBEVS4gIFRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZgpAQCAtNDEsNyArNDEsNyBAQAogLlNIIEVYQU1QTEUKIFRoZSBjb21tYW5kOgogLlBQCi1zbm1wYnVsa2dldCAtdjJjIC1DbjEgLUNyNSAtT3MgLWMgcHVibGljIHpldXMgc3lzdGVtIGlmVGFibGUKK3NubXBidWxrZ2V0IFwtdjJjIFwtQ24xIFwtQ3I1IFwtT3MgXC1jIHB1YmxpYyB6ZXVzIHN5c3RlbSBpZlRhYmxlCiAuUFAKIHdpbGwgcmV0cmlldmUgdGhlIHZhcmlhYmxlIHN5c3RlbS5zeXNEZXNjci4wICh3aGljaCBpcyB0aGUKIGxleGljb2dyYXBoaWNhbGx5IG5leHQgb2JqZWN0IHRvIHN5c3RlbSkgYW5kIHRoZSBmaXJzdCA1IG9iamVjdHMgaW4KZGlmZiAtLWdpdCBhL21hbi9zbm1wYnVsa3dhbGsuMS5kZWYgYi9tYW4vc25tcGJ1bGt3YWxrLjEuZGVmCmluZGV4IGU2YzdhNjkuLmM1ZjRhMDYgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wYnVsa3dhbGsuMS5kZWYKKysrIGIvbWFuL3NubXBidWxrd2Fsay4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC00Miw3ICs0Miw3IEBACiAuSVIgdmFyaWFibGVzKDUpIC4KIElmIG5vIE9JRCBhcmd1bWVudCBpcyBwcmVzZW50LAogLkIgc25tcGJ1bGt3YWxrCi13aWxsIHNlYXJjaCBNSUItMi4KK3dpbGwgc2VhcmNoIE1JQlwtMi4KIC5QUAogSWYgdGhlIG5ldHdvcmsgZW50aXR5IGhhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0IHBhY2tldCwgYW4KIGVycm9yIHBhY2tldCB3aWxsIGJlIHJldHVybmVkIGFuZCBhIG1lc3NhZ2Ugd2lsbCBiZSBzaG93biwgaGVscGluZyB0bwpAQCAtNTIsNyArNTIsNyBAQAogTUlCLCB0aGUgbWVzc2FnZSAiRW5kIG9mIE1JQiIgd2lsbCBiZSBkaXNwbGF5ZWQuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CIC1DYworLkIgXC1DYwogRG8gbm90IGNoZWNrIHdoZXRoZXIgdGhlIHJldHVybmVkIE9JRHMgYXJlIGluY3JlYXNpbmcuICBTb21lIGFnZW50cwogKExhc2VySmV0cyBhcmUgYW4gZXhhbXBsZSkgcmV0dXJuIE9JRHMgb3V0IG9mIG9yZGVyLCBidXQgY2FuCiBjb21wbGV0ZSB0aGUgd2FsayBhbnl3YXkuICBPdGhlciBhZ2VudHMgcmV0dXJuIE9JRHMgdGhhdCBhcmUgb3V0IG9mCkBAIC02MiwxMCArNjIsMTAgQEAKIC5CIHNubXBidWxrd2FsawogdHJpZXMgdG8gZGV0ZWN0IHRoaXMgYmVoYXZpb3IgYW5kIHdhcm5zIHlvdSB3aGVuIGl0IGhpdHMgYW4gYWdlbnQKIGFjdGluZyBpbGxlZ2FsbHkuICBVc2UKLS5CIC1DYworLkIgXC1DYwogdG8gdHVybiBvZmYgdGhpcyBiZWhhdmlvdXIuCiAuVFAKLS5CIC1DaQorLkIgXC1DaQogSW5jbHVkZSB0aGUgZ2l2ZW4gT0lEIGluIHRoZSBzZWFyY2ggcmFuZ2UuICBOb3JtYWxseQogLkIgc25tcGJ1bGt3YWxrCiB1c2VzIEdFVEJVTEsgcmVxdWVzdHMgc3RhcnRpbmcgd2l0aCB0aGUgT0lEIHlvdSBzcGVjaWZpZWQgYW5kIHJldHVybnMKQEAgLTc0LDE2ICs3NCwxNiBAQAogcmVzdWx0cyBpZiBpdCBpcyBhIHZhbGlkIE9JRCBpbiB0aGUgdHJlZSBpdHNlbGYuICBUaGlzIG9wdGlvbiBsZXRzIHlvdQogZG8gdGhpcy4KIC5UUAotLkJJIC1DbiA8TlVNPgorLkJJIFwtQ24gPE5VTT4KIFNldCB0aGUKIC5JIG5vbi1yZXBlYXRlcnMKIGZpZWxkIGluIHRoZSBHRVRCVUxLIFBEVXMuICBUaGlzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHN1cHBsaWVkCiB2YXJpYWJsZXMgdGhhdCBzaG91bGQgbm90IGJlIGl0ZXJhdGVkIG92ZXIuICBUaGUgZGVmYXVsdCBpcyAwLgogLlRQCi0uQiAtQ3AKKy5CIFwtQ3AKIFVwb24gY29tcGxldGlvbiBvZiB0aGUgd2FsaywgcHJpbnQgdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgZm91bmQuCiAuVFAKLS5CSSAtQ3IgPE5VTT4KKy5CSSBcLUNyIDxOVU0+CiBTZXQgdGhlCiAuSSBtYXgtcmVwZXRpdGlvbnMKIGZpZWxkIGluIHRoZSBHRVRCVUxLIFBEVXMuICBUaGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKQEAgLTEwMSw3ICsxMDEsNyBAQAogLlNIIEVYQU1QTEUKIFRoZSBjb21tYW5kOgogLlBQCi1zbm1wYnVsa3dhbGsgLXYyYyAtT3MgLWMgcHVibGljIHpldXMgc3lzdGVtCitzbm1wYnVsa3dhbGsgXC12MmMgXC1PcyBcLWMgcHVibGljIHpldXMgc3lzdGVtCiAuUFAKIHdpbGwgcmV0cmlldmUgYWxsIG9mIHRoZSB2YXJpYWJsZXMgdW5kZXIgc3lzdGVtOgogLlBQCmRpZmYgLS1naXQgYS9tYW4vc25tcGNtZC4xLmRlZiBiL21hbi9zbm1wY21kLjEuZGVmCmluZGV4IDQ4NTNjYWYuLmU0ZGY4YjIgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wY21kLjEuZGVmCisrKyBiL21hbi9zbm1wY21kLjEuZGVmCkBAIC0xLDMgKzEsNCBAQAorLlwiIC0qLSBucm9mZiAtKi0KIC5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIC5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKIC5cIiB0aGF0IG1heSBhcHBseToKQEAgLTI3LDcgKzI4LDcgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUENNRCAxICIwMSBTZXAgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QQ01EIDEgIjIwIEp1bCAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBjbWQgLSBvcHRpb25zIGFuZCBiZWhhdmlvdXIgY29tbW9uIHRvIG1vc3Qgb2YgdGhlIE5ldC1TTk1QIGNvbW1hbmQtbGluZSB0b29scwogLlNIIFNZTk9QU0lTCkBAIC00NCw5MiArNDUsNTQgQEAKIGFwcGxpY2F0aW9ucyB0eXBpY2FsbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkpIHRha2UgYWRkaXRpb25hbAogcGFyYW1ldGVycyB0aGF0IGFyZSBnaXZlbiBhZnRlciB0aGUgYWdlbnQgc3BlY2lmaWNhdGlvbi4gIFRoZXNlCiBwYXJhbWV0ZXJzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBtYW51YWwgcGFnZXMgZm9yIGVhY2ggYXBwbGljYXRpb24uCi0KLS5TSCBPUFRJT05TCisuU0ggQ09NTUFORC1MSU5FIENPTkZJRyBPUFRJT05TCitJbiBhZGRpdGlvbiB0byB0aGUgb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhpcyBtYW51YWwgcGFnZSwgYWxsIG9mIHRoZQordG9rZW5zIGRlc2NyaWJlZCBpbiB0aGUgXGZJc25tcC5jb25mXGZSIGFuZCBvdGhlciAuY29uZiBtYW51YWwgcGFnZXMKK2NhbiBiZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgTmV0LVNOTVAgYXBwbGljYXRpb25zIGFzIHdlbGwgYnkKK3ByZWZpeGluZyB0aGVtIHdpdGggIlwtXC0iLiAgRUcsIHNwZWNpZnlpbmcKK1xmSVwtXC1kb250TG9hZEhvc3RDb25maWc9dHJ1ZVxmUiBvbiB0aGUgY29tbWFuZCBsaW5lIHdpbGwgdHVybiBvZgorbG9hZGluZyBvZiB0aGUgaG9zdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzLgorLlBQCitUaGUgc25tcC5jb25mIGZpbGUgc2V0dGluZ3MgYW5kIHRoZSBkb3VibGUtZGFzaCBhcmd1bWVudHMgb3Zlci1yaWRlCit0aGUgc2luZ2xlLWRhc2ggYXJndW1lbnRzLiAgU28gaXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGlmCitzaW5nbGUtZGFzaCBhcmd1bWVudHMgYXJlbid0IHdvcmtpbmcgYmVjYXVzZSB5b3UgaGF2ZSBzZXR0aW5ncyBpbiB0aGUKK1xmSXNubXAuY29uZlxmUiBmaWxlIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGVtIHRoZW4geW91J2xsIG5lZWQgdG8gdXNlCit0aGUgbG9uZ2VyLWZvcm0gZG91YmxlLWRhc2ggYXJndW1lbnRzIHRvIHN1Y2Nlc3NmdWxseSB0cnVtcCB0aGUKK1xmSXNubXAuY29uZlxmUiBmaWxlIHNldHRpbmdzLgorLlNIIEdlbmVyaWMgT3B0aW9ucworVGhlc2Ugb3B0aW9ucyBjb250cm9sIGhvdyB0aGUgTmV0LVNOTVAgY29tbWFuZHMgYmVoYXZlIHJlZ2FyZGxlc3Mgb2YKK3doYXQgdmVyc2lvbiBvZiBTTk1QIHlvdSBhcmUgdXNpbmcuICBTZWUgZnVydGhlciBiZWxvdyBmb3Igb3B0aW9ucwordGhhdCBjb250cm9sIHNwZWNpZmljIHZlcnNpb25zIG9yIHN1Yi1tb2R1bGVzIG9mIHRoZSBTTk1QIHByb3RvY29sLiAKIC5UUAotLkJJICItM1tNbUtrXSAgMHhIRVhLRVkiCi1TZXRzIHRoZSBrZXlzIHRvIGJlIHVzZWQgZm9yIFNOTVB2MyB0cmFuc2FjdGlvbnMuICBUaGVzZSBvcHRpb25zIGFsbG93Ci15b3UgdG8gc2V0IHRoZSBtYXN0ZXIgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24ga2V5cyAoLTNtIGFuZCAtM00KLXJlc3BlY3RpdmVseSkgb3Igc2V0IHRoZSBsb2NhbGl6ZWQgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24ga2V5cwotKC0zayBhbmQgLTNLIHJlc3BlY3RpdmVseSkuICBTTk1QdjMga2V5cyBjYW4gYmUgZWl0aGVyIHBhc3NlZCBpbiBieQotaGFuZCB1c2luZyB0aGVzZSBmbGFncywgb3IgYnkgdGhlIHVzZSBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHBhc3N3b3JkcwotdXNpbmcgdGhlIC1BIGFuZCAtWCBmbGFncyBkaXNjdXNzZWQgYmVsb3cuICBGb3IgZnVydGhlciBkZXRhaWxzIG9uCi1TTk1QdjMgYW5kIGl0cyB1c2FnZSBvZiBrZXlpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgTmV0LVNOTVAgdHV0b3JpYWwKLXdlYiBzaXRlICggaHR0cDovL3d3dy5OZXQtU05NUC5vcmcvdHV0b3JpYWwtNS9jb21tYW5kcy8gKS4gCi1PdmVycmlkZXMgdGhlIGRlZkF1dGhNYXN0ZXJLZXkgKC0zbSksIGRlZlByaXZNYXN0ZXJLZXkgKC0zTSksIAotZGVmQXV0aExvY2FsaXplZEtleSAoLTNrKSBvciBkZWZQcml2TG9jYWxpemVkS2V5ICgtM0spIHRva2VucywgcmVzcGVjdGl2ZWx5LCAKLWluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLCBzZWUKLS5JIHNubXAuY29uZig1KS4KLS5UUAotLkJJIC1hICIgYXV0aFByb3RvY29sIgotU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAoTUQ1IG9yIFNIQSkgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMKLW1lc3NhZ2VzLiBPdmVycmlkZXMgdGhlIFxmSWRlZkF1dGhUeXBlXGZSIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLgotLlRQCi0uQkkgLUEgIiBhdXRoUGFzc3dvcmQiCi1TZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzCi1tZXNzYWdlcy4gIE92ZXJyaWRlcyB0aGUgXGZJZGVmQXV0aFBhc3NwaHJhc2VcZlIgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuIEl0IGlzIGluc2VjdXJlIHRvIHNwZWNpZnkgcGFzcyBwaHJhc2VzIG9uIHRoZSBjb21tYW5kIGxpbmUsCi1zZWUKLS5JIHNubXAuY29uZig1KS4KLS5UUAotLkJJIC1jICIgY29tbXVuaXR5IgotU2V0IHRoZSBjb21tdW5pdHkgc3RyaW5nIGZvciBTTk1QdjEvdjJjIHRyYW5zYWN0aW9ucy4KLU92ZXJyaWRlcyB0aGUgXGZJZGVmQ29tbXVuaXR5XGZSIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLgotLlRQCi0uQiAtZAorLkIgXC1kCiBEdW1wIChpbiBoZXhhZGVjaW1hbCkgdGhlIHJhdyBTTk1QIHBhY2tldHMgc2VudCBhbmQgcmVjZWl2ZWQuCiAuVFAKLS5CIC1EXGZJW1RPS0VOWywuLi5dXQorLkIgXC1EXGZJW1RPS0VOWywuLi5dXQogVHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KIC5JUiAiVE9LRU4iICIocykuIgogVHJ5CiAuSVIgQUxMCiBmb3IgZXh0cmVtZWx5IHZlcmJvc2Ugb3V0cHV0LgogLlRQCi0uQkkgLWUgIiBlbmdpbmVJRCIKLVNldCB0aGUgYXV0aG9yaXRhdGl2ZSAoc2VjdXJpdHkpIGVuZ2luZUlEIHVzZWQgZm9yIFNOTVB2MyBSRVFVRVNUCi1tZXNzYWdlcywgZ2l2ZW4gYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgKG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgIjB4IikuCi1JdCBpcyB0eXBpY2FsbHkgbm90IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoaXMgZW5naW5lIElELCBhcyBpdCB3aWxsCi11c3VhbGx5IGJlIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseS4KIC5UUAotLkJJIC1FICIgZW5naW5lSUQiCi1TZXQgdGhlIGNvbnRleHQgZW5naW5lSUQgdXNlZCBmb3IgU05NUHYzIFJFUVVFU1QgbWVzc2FnZXMgc2NvcGVkUGR1LAotZ2l2ZW4gYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuCi1JZiBub3Qgc3BlY2lmaWVkLCB0aGlzIHdpbGwgZGVmYXVsdCB0byB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmVJRC4KLS5UUAotLkIgLWgsIC0taGVscAorLkIgXC1oLCBcLVwtaGVscAogRGlzcGxheSBhIGJyaWVmIHVzYWdlIG1lc3NhZ2UgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLUgKKy5CIFwtSAogRGlzcGxheSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZCBieSB0aGUKIGNvbW1hbmQgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkJJIC1JICIgW2JyUmh1XSIKKy5CSSBcLUkgIiBbYnJSaHVdIgogU3BlY2lmaWVzIGlucHV0IHBhcnNpbmcgb3B0aW9ucy4gU2VlIAogLkIgSU5QVVQgT1BUSU9OUyAKIGJlbG93LgogLlRQCi0uQkkgLWwgIiBzZWNMZXZlbCIKLVNldCB0aGUgc2VjdXJpdHlMZXZlbCB1c2VkIGZvciBTTk1QdjMgbWVzc2FnZXMKLShub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdikuICBBcHByb3ByaWF0ZSBwYXNzIHBocmFzZShzKSBtdXN0Ci1wcm92aWRlZCB3aGVuIHVzaW5nIGFueSBsZXZlbCBoaWdoZXIgdGhhbiBub0F1dGhOb1ByaXYuCi1PdmVycmlkZXMgdGhlIFxmSWRlZlNlY3VyaXR5TGV2ZWxcZlIgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuCi0uVFAKLS5CSSAtTCAiIFtlRWZGb09zU10iCisuQkkgXC1MICIgW2VFZkZvT3NTXSIKIFNwZWNpZmllcyBvdXRwdXQgbG9nZ2luZyBvcHRpb25zLiBTZWUgCiAuQiBMT0dHSU5HIE9QVElPTlMgCiBiZWxvdy4KIC5UUAotLkJJIC1tICIgTUlCTElTVCIKKy5CSSBcLW0gIiBNSUJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgKG5vdCBmaWxlcykgdG8gbG9hZCBmb3IKIHRoaXMgYXBwbGljYXRpb24uICBUaGlzIG92ZXJyaWRlcyAob3IgYXVnbWVudHMpIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQogTUlCUywgdGhlIFxmSXNubXAuY29uZlxmUiBkaXJlY3RpdmUgXGZJbWlic1xmUiwgYW5kIHRoZSBsaXN0IG9mIE1JQnMKQEAgLTEzNyw3ICsxMDAsNyBAQAogLklQCiBJZiAKIC5JIE1JQkxJU1QKLWhhcyBhIGxlYWRpbmcgJy0nIG9yICcrJyBjaGFyYWN0ZXIsIHRoZW4gdGhlIE1JQiBtb2R1bGVzIGxpc3RlZCBhcmUKK2hhcyBhIGxlYWRpbmcgJ1wtJyBvciAnKycgY2hhcmFjdGVyLCB0aGVuIHRoZSBNSUIgbW9kdWxlcyBsaXN0ZWQgYXJlCiBsb2FkZWQgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgbGlzdCwgY29taW5nIGJlZm9yZSBvciBhZnRlcgogdGhpcyBsaXN0IHJlc3BlY3RpdmVseS4KIE90aGVyd2lzZSwgdGhlIHNwZWNpZmllZCBNSUJzIGFyZSBsb2FkZWQgXGZJaW5zdGVhZFxmUiBvZiB0aGlzCkBAIC0xNDksNyArMTEyLDcgQEAKIEV2ZXJ5IGZpbGUgd2hvc2UgbmFtZSBkb2VzIG5vdCBiZWdpbiB3aXRoICIuIiB3aWxsIGJlIHBhcnNlZCBhcwogaWYgaXQgd2VyZSBhIE1JQiBmaWxlLgogLlRQCi0uQkkgLU0gIiBESVJMSVNUIgorLkJJIFwtTSAiIERJUkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQnMuCiBUaGlzIG92ZXJyaWRlcyAob3IgYXVnbWVudHMpIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJESVJTLAogdGhlIFxmSXNubXAuY29uZlxmUiBkaXJlY3RpdmUgXGZJbWliZGlyc1xmUiwgYW5kIHRoZSBkZWZhdWx0CkBAIC0xNTgsNyArMTIxLDcgQEAKIC5JUAogSWYgCiAuSSBESVJMSVNUCi1oYXMgYSBsZWFkaW5nICctJyBvciAnKycgY2hhcmFjdGVyLCB0aGVuIHRoZSBnaXZlbiBkaXJlY3RvcmllcyBhcmUKK2hhcyBhIGxlYWRpbmcgJ1wtJyBvciAnKycgY2hhcmFjdGVyLCB0aGVuIHRoZSBnaXZlbiBkaXJlY3RvcmllcyBhcmUKIGFkZGVkIHRvIHRoZSBkZWZhdWx0IGxpc3QsIGJlaW5nIHNlYXJjaGVkIGJlZm9yZSBvciBhZnRlciB0aGUKIGRpcmVjdG9yaWVzIG9uIHRoaXMgbGlzdCByZXNwZWN0aXZlbHkuCiBPdGhlcndpc2UsIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIFxmSWluc3RlYWRcZlIKQEAgLTE3Miw2MyArMTM1LDE4OCBAQAogVG8gYXZvaWQgc2VhcmNoaW5nIGFueSBNSUIgZGlyZWN0b3JpZXMsIHNldCB0aGUgTUlCRElSUwogZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGVtcHR5IHN0cmluZyAoIiIpLgogLlwiCi0uXCIgWFhYIC0gb3IgICAgIC1NICIiICAgID8/CisuXCIgWFhYIC0gb3IgICAgIFwtTSAiIiAgICA/PwogLlwiCiAKLU5vdGUgdGhhdCBNSUJzIHNwZWNpZmllZCB1c2luZyB0aGUgLW0gb3B0aW9uIG9yIHRoZSBcZkltaWJzXGZSCitOb3RlIHRoYXQgTUlCcyBzcGVjaWZpZWQgdXNpbmcgdGhlIFwtbSBvcHRpb24gb3IgdGhlIFxmSW1pYnNcZlIKIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIHdpbGwgYmUgbG9hZGVkIGZyb20gb25lIG9mIHRoZSBkaXJlY3RvcmllcwotbGlzdGVkIGJ5IHRoZSAtTSBvcHRpb24gKG9yIGVxdWl2YWxlbnRzKS4KK2xpc3RlZCBieSB0aGUgXC1NIG9wdGlvbiAob3IgZXF1aXZhbGVudHMpLgogVGhlIFxmSW1pYmZpbGVcZlIgZGlyZWN0aXZlIHRha2VzIGEgZnVsbCBwYXRoIHRvIHRoZSBzcGVjaWZpZWQgTUlCCiBmaWxlLCBzbyB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW4gdGhlIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIGxpc3QuCiAuVFAKLS5CSSAtbiAiIGNvbnRleHROYW1lIgotU2V0IHRoZSBjb250ZXh0TmFtZSB1c2VkIGZvciBTTk1QdjMgbWVzc2FnZXMuICBUaGUgZGVmYXVsdAotY29udGV4dE5hbWUgaXMgdGhlIGVtcHR5IHN0cmluZyAiIi4gIE92ZXJyaWRlcyB0aGUgXGZJZGVmQ29udGV4dFxmUiB0b2tlbgotaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuIAotLlRQCi0uQkkgLU8gIiBbYWJlRWZucVFzU3RUdVV2eFhdIgotU3BlY2lmaWVzIG91dHB1dCBwcmludGluZyBvcHRpb25zLiBTZWUgCi0uQiBPVVRQVVQgT1BUSU9OUwotYmVsb3cuCi0uVFAKLS5CSSAtUCAiIFtjZGVSdXdXXSIKLVNwZWNpZmllcyBNSUIgcGFyc2luZyBvcHRpb25zLiAgU2VlCi0uQiBNSUIgUEFSU0lORyBPUFRJT05TCi1iZWxvdy4KLS5UUAotLkJJIC1yICIgcmV0cmllcyIKLVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgdG8gYmUgdXNlZCBpbiB0aGUgcmVxdWVzdHMuIFRoZSBkZWZhdWx0Ci1pcyA1LgotLlRQCi0uQkkgLXQgIiB0aW1lb3V0IgotU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGluIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzLiBUaGUgZGVmYXVsdCBpcyAxLgotLlRQCi0uQkkgLXUgIiBzZWNOYW1lIgotU2V0IHRoZSBzZWN1cml0eU5hbWUgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMgbWVzc2FnZXMuCi1PdmVycmlkZXMgdGhlIFxmSWRlZlNlY3VyaXR5TmFtZVxmUiB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4KLS5UUAotLkIgLXYgXGZJMVxmUiB8IFxmSTJjXGZSIHwgXGZJMworLkIgXC12IFxmSTFcZlIgfCBcZkkyY1xmUiB8IFxmSTMKIFNwZWNpZmllcyB0aGUgcHJvdG9jb2wgdmVyc2lvbiB0byB1c2U6IDEgKFJGQ3MgMTE1NS0xMTU3KSwgMmMgKFJGQ3MgMTkwMS0xOTA4KSwKIG9yIDMgKFJGQ3MgMjU3MS0yNTc0KS4gIFRoZSBkZWZhdWx0IGlzIHR5cGljYWxseSB2ZXJzaW9uIDMuCiBPdmVycmlkZXMgdGhlIFxmSWRlZlZlcnNpb25cZlIgdG9rZW4gaW4gdGhlCiAuSSBzbm1wLmNvbmYKIGZpbGUuCisuQkkgXC1PICIgW2FiZUVmbnFRc1N0VHVVdnhYXSIKK1NwZWNpZmllcyBvdXRwdXQgcHJpbnRpbmcgb3B0aW9ucy4gU2VlIAorLkIgT1VUUFVUIE9QVElPTlMKK2JlbG93LgogLlRQCi0uQiAtViwgLS12ZXJzaW9uCisuQkkgXC1QICIgW2NkZVJ1d1ddIgorU3BlY2lmaWVzIE1JQiBwYXJzaW5nIG9wdGlvbnMuICBTZWUKKy5CIE1JQiBQQVJTSU5HIE9QVElPTlMKK2JlbG93LgorLlRQCisuQkkgXC1yICIgcmV0cmllcyIKK1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgdG8gYmUgdXNlZCBpbiB0aGUgcmVxdWVzdHMuIFRoZSBkZWZhdWx0CitpcyA1LgorLlRQCisuQkkgXC10ICIgdGltZW91dCIKK1NwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcy4gVGhlIGRlZmF1bHQgaXMgMS4KK0Zsb2F0aW5nIHBvaW50IG51bWJlcnMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmcmFjdGlvbnMgb2Ygc2Vjb25kcy4KKy5UUAorLkIgXC1WLCBcLVwtdmVyc2lvbgogRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gYW5kIHRoZW4gZXhpdC4KIC5UUAotLkJJIC14ICIgcHJpdlByb3RvY29sIgorLkJJIFwtWSAibmFtZSI9InZhbHVlIgorLlRQCisuQkkgXC1cLSAibmFtZSI9InZhbHVlIgorQWxsb3dzIG9uZSB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUgYW5kIHNldHMgaXRzIHZhbHVlIHRvICJ2YWx1ZSIuIE92ZXJyaWRlcyB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4gU2VlCisuSSBzbm1wLmNvbmYoNSkKK2ZvciB0aGUgZnVsbCBsaXN0IG9mIHRva2Vucy4KKworCisuU0ggU05NUHYzIE9wdGlvbnMKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZ2VuZXJpYyB0byBhbGwgZm9ybXMgb2YgU05NUHYzLCByZWdhcmRsZXNzCitvZiB3aGV0aGVyIGl0J3MgdGhlIG9yaWdpbmFsIFNOTVB2MyB3aXRoIFVTTSBvciB0aGUgbmV3ZXIgU05NUHYzIG92ZXIKKyhEKVRMUyBzdXBwb3J0LgorCisuVFAKKy5CSSBcLWwgIiBzZWNMZXZlbCIKK1NldCB0aGUgc2VjdXJpdHlMZXZlbCB1c2VkIGZvciBTTk1QdjMgbWVzc2FnZXMKKyhub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdikuICBBcHByb3ByaWF0ZSBwYXNzIHBocmFzZShzKSBtdXN0Citwcm92aWRlZCB3aGVuIHVzaW5nIGFueSBsZXZlbCBoaWdoZXIgdGhhbiBub0F1dGhOb1ByaXYuCitPdmVycmlkZXMgdGhlIFxmSWRlZlNlY3VyaXR5TGV2ZWxcZlIgdG9rZW4gaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuCisuVFAKKy5CSSBcLW4gIiBjb250ZXh0TmFtZSIKK1NldCB0aGUgY29udGV4dE5hbWUgdXNlZCBmb3IgU05NUHYzIG1lc3NhZ2VzLiAgVGhlIGRlZmF1bHQKK2NvbnRleHROYW1lIGlzIHRoZSBlbXB0eSBzdHJpbmcgIiIuICBPdmVycmlkZXMgdGhlIFxmSWRlZkNvbnRleHRcZlIgdG9rZW4KK2luIHRoZQorLkkgc25tcC5jb25mCitmaWxlLiAKKworLlNIIFNOTVB2MyBvdmVyIFRMUyBPcHRpb25zCitUaGVzZSBvcHRpb25zIHBhc3MgdHJhbnNwb3J0LXNwZWNpZmljIHBhcmFtZXRlcnMgdG8gdGhlIFRMUyBsYXllci4gIElmCit5b3UncmUgdXNpbmcgU05NUCBvdmVyIFRMUyBvciBEVExTIHlvdSdsbCBuZWVkIHRvIHBhc3MgYSBjb21iaW5hdGlvbgorb2YgdGhlc2UgZWl0aGVyIHRocm91Z2ggdGhlc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMgb3IgdGhyb3VnaAorc25tcC5jb25mIGNvbmZpZ3VyYXRpb24gdG9rZW5zLgorLlBQCitBIG5vdGUgYWJvdXQKKy5JICI8Y2VydGlmaWNhdGUtc3BlY2lmaWVyPnMiOgorTmV0LVNOTVAgbG9va3MgZm9yIFguNTA5IGNlcnRpZmljYXRlcyBpbiBlYWNoIG9mIHRoZSBub3JtYWwgU05NUAorY29uZmlndXJhdGlvbiBkaXJlY3Rvcnkgc2VhcmNoIHBhdGhzIHVuZGVyIGEgInRscyIgc3ViZGlyZWN0b3J5LiAgSUUsCitpdCB3aWxsIGxvb2sgaW4gfi8uc25tcC90bHMgYW5kIGluIC91c3IvbG9jYWwvc2hhcmUvc25tcC90bHMgZm9yCitjZXJ0aWZpY2F0ZXMuICBUaGUgY2VydGlmaWNhdGUgY29tcG9uZW50cyAoZWcsIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUKK2hhbHZlcykgYXJlIHN0b3JlZCBpbiBzdWItZGlyZWN0b3JpZXMgdW5kZXJuZWF0aCB0aGlzIHJvb3Qgc2V0IG9mCitkaXJlY3Rvcmllcy4gIFNlZSB0aGUgbmV0XC1zbm1wXC1jZXJ0IHRvb2wgZm9yIGhlbHAgaW4gaW1wb3J0aW5nLAorY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE5ldC1TTk1QIGNlcnRpZmljYXRlcy4KKy5JICI8Y2VydGlmaWNhdGUtc3BlY2lmaWVyPnMiCitjYW4gcmVmZXJlbmNlIGVpdGhlciBhIGZpbmdlcnByaW50IG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byB1c2UgKHRoZQorbmV0XC1zbm1wXC1jZXJ0IHRvb2wgY2FuIGhlbHAgeW91IGZpZ3VyZSBvdXQgdGhlIGNlcnRpZmljYXRlcykgb3IgdGhlCitmaWxlbmFtZSdzIHByZWZpeCBjYW4gYmUgdXNlZC4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgInNubXBkLmNydCIKK2NlcnRpZmljYXRlIGZpbGUgdGhlbiB5b3UgY291bGQgc2ltcGx5IHJlZmVyIHRvIHRoZSBjZXJ0aWZpY2F0ZSB2aWEKK3RoZSAic25tcGQiIHNwZWNpZmllci4KKy5UUAorLkJJICJcLVQgbG9jYWxDZXJ0PTxjZXJ0aWZpY2F0ZS1zcGVjaWZpZXI+IgorSW5kaWNhdGVzIHRvIHRoZSB0cmFuc3BvcnQgd2hpY2gga2V5IHNob3VsZCBiZSB1c2VkIHRvIGluaXRpYXRlIChEKVRMUworY2xpZW50IGNvbm5lY3Rpb25zLiAgVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgYSBjZXJ0aWZpY2F0ZSBmb3VuZCB1c2luZwordGhlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50LCB0aGUgYXBwbGljYXRpb24gbmFtZSAoZWcgc25tcGQsIHNubXB0cmFwZCwgcGVybCwgcHl0aG9uKSBvcgorZ2VuZXJpY2l6ZWQgbmFtZSAic25tcGFwcCIgaWYgdXNpbmcgb25lIG9mIHRoZSBnZW5lcmljIGFwcGxpY2F0aW9ucworKHNubXBnZXQsIHNubXB3YWxrLCBldGMpLiAgVGhpcyBjYW4gYWxzbyBiZSBzZXQgdXNpbmcgdGhlCitsb2NhbENlcnQgc3BlY2lmaWVyIGluIGEgc25tcC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5UUAorLkJJICJcLVQgcGVlckNlcnQ9PGNlcnRpZmljYXRlLXNwZWNpZmllcj4iCitJZiB5b3UgZXhwZWN0IGEgcGFydGljdWxhciBjZXJ0aWZpY2F0ZSB0byBiZSBwcmVzZW50ZWQgYnkgdGhlIG90aGVyCitzaWRlIHRoZW4geW91IGNhbiB1c2UgdGhpcyBzcGVjaWZpZXIgdG8gaW5kaWNhdGUgdGhlIGNlcnRpZmljYXRlIGl0CitzaG91bGQgcHJlc2VudC4gIElmIGl0IGZhaWxzIHRvIHByZXNlbnQgdGhlIGV4cGVjdGVkIGNlcnRpZmljYXRlIHRoZQorY2xpZW50IHdpbGwgcmVmdXNlIHRvIG9wZW4gdGhlIGNvbm5lY3Rpb24gKGJlY2F1c2UgZG9pbmcgb3RoZXJ3aXNlCitjb3VsZCBsZWFkIHRvIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MpLiAgVGhpcyBjYW4gYWxzbyBiZSBzZXQgdXNpbmcKK3RoZSBwZWVyQ2VydCBzcGVjaWZpZXIgaW4gYSBzbm1wLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQkkgIlwtVCB0cnVzdF9jZXJ0PTxjZXJ0aWZpY2F0ZS1zcGVjaWZpZXI+IgorSWYgeW91IGhhdmUgYSB0cnVzdGVkIENBIGNlcnRpZmljYXRlIHlvdSB3aXNoIHRvIGFuY2hvciB0cnVzdCB3aXRoLAoreW91IGNhbiB1c2UgdGhpcyBmbGFnIHRvIGxvYWQgYSBnaXZlbiBjZXJ0aWZpY2F0ZSBhcyBhIHRydXN0IGFuY2hvci4KK0EgY29weSBvZiB0aGUgY2VydGlmaWNhdGUgbXVzdCBleGlzdCB3aXRoaW4gdGhlIE5ldC1TTk1QIGNlcnRpZmljYXRlCitzdG9yYWdlIHN5c3RlbSBvciB0aGlzIG11c3QgcG9pbnQgdG8gYSBjb21wbGV0ZSBwYXRoIG5hbWUuICBBbHNvIHNlZQordGhlICJ0cnVzdENlcnQiIHNubXAuY29uZiBjb25maWd1cmF0aW9uIHRva2VuLgorLlRQCisuQkkgIlwtVCB0aGVpcl9ob3N0bmFtZT08bmFtZT4iCitJZiB0aGUgc2VydmVyJ3MgcHJlc2VudGVkIGNlcnRpZmljYXRlIGNhbiBiZSB2YWxpZGF0aW5nIHVzaW5nIGEgdHJ1c3QKK2FuY2hvciB0aGVuIHRoZWlyIGhvc3RuYW1lIHdpbGwgYmUgY2hlY2tlZCB0byBlbnN1cmUgdGhlaXIgcHJlc2VudGVkCitob3N0bmFtZSBtYXRjaGVzIG9uZSB0aGF0IGlzIGV4cGVjdGVkICh5b3UgZG9uJ3Qgd2FudCB0byBjb25uZWN0IHRvCitnb29kaG9zdC5leGFtcGxlLmNvbSBhbmQgYWNjZXB0IGEgY2VydGlmaWNhdGUgcHJlc2VudGVkIGJ5CitiYWRob3N0LmV4YW1wbGUuY29tIGRvIHlvdT8pLiAgVGhpcyB0b2tlbiBjYW4gc3BlY2lmeSB0aGUgZXhhY3QgaG9zdAorbmFtZSBleHBlY3RlZCB0byBiZSBwcmVzZW50ZWQgYnkgdGhlIHJlbW90ZSBzaWRlLCBlaXRoZXIgaW4gYQorc3ViamVjdEFsdE5hbWUgZmllbGQgb3IgaW4gdGhlIENvbW1vbk5hbWUgZmllbGQgb2YgdGhlIHNlcnZlcidzIFguNTA5CitjZXJ0aWZpY2F0ZS4KKy5TSCBTTk1QdjMgd2l0aCBVU00gT3B0aW9ucworVGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdXNpbmcgU05NUHYzIHdpdGggdGhlIG9yaWdpbmFsCitVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsIChVU00pLgorLlRQCisuQkkgIlwtM1tNbUtrXSAgMHhIRVhLRVkiCitTZXRzIHRoZSBrZXlzIHRvIGJlIHVzZWQgZm9yIFNOTVB2MyB0cmFuc2FjdGlvbnMuICBUaGVzZSBvcHRpb25zIGFsbG93Cit5b3UgdG8gc2V0IHRoZSBtYXN0ZXIgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24ga2V5cyAoXC0zbSBhbmQgXC0zTQorcmVzcGVjdGl2ZWx5KSBvciBzZXQgdGhlIGxvY2FsaXplZCBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBrZXlzCisoXC0zayBhbmQgXC0zSyByZXNwZWN0aXZlbHkpLiAgU05NUHYzIGtleXMgY2FuIGJlIGVpdGhlciBwYXNzZWQgaW4gYnkKK2hhbmQgdXNpbmcgdGhlc2UgZmxhZ3MsIG9yIGJ5IHRoZSB1c2Ugb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSBwYXNzd29yZHMKK3VzaW5nIHRoZSBcLUEgYW5kIFwtWCBmbGFncyBkaXNjdXNzZWQgYmVsb3cuICBGb3IgZnVydGhlciBkZXRhaWxzIG9uCitTTk1QdjMgYW5kIGl0cyB1c2FnZSBvZiBrZXlpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgTmV0LVNOTVAgdHV0b3JpYWwKK3dlYiBzaXRlICggaHR0cDovL3d3dy5OZXRcLVNOTVAub3JnL3R1dG9yaWFsXC01L2NvbW1hbmRzLyApLiAKK092ZXJyaWRlcyB0aGUgZGVmQXV0aE1hc3RlcktleSAoXC0zbSksIGRlZlByaXZNYXN0ZXJLZXkgKFwtM00pLCAKK2RlZkF1dGhMb2NhbGl6ZWRLZXkgKFwtM2spIG9yIGRlZlByaXZMb2NhbGl6ZWRLZXkgKFwtM0spIHRva2VucywgcmVzcGVjdGl2ZWx5LCAKK2luIHRoZQorLkkgc25tcC5jb25mCitmaWxlLCBzZWUKKy5JIHNubXAuY29uZig1KS4KKy5UUAorLkJJIFwtYSAiIGF1dGhQcm90b2NvbCIKK1NldCB0aGUgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKE1ENSBvciBTSEEpIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzCittZXNzYWdlcy4gT3ZlcnJpZGVzIHRoZSBcZklkZWZBdXRoVHlwZVxmUiB0b2tlbiBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4KKy5UUAorLkJJIFwtQSAiIGF1dGhQYXNzd29yZCIKK1NldCB0aGUgYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMKK21lc3NhZ2VzLiAgT3ZlcnJpZGVzIHRoZSBcZklkZWZBdXRoUGFzc3BocmFzZVxmUiB0b2tlbiBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4gSXQgaXMgaW5zZWN1cmUgdG8gc3BlY2lmeSBwYXNzIHBocmFzZXMgb24gdGhlIGNvbW1hbmQgbGluZSwKK3NlZQorLkkgc25tcC5jb25mKDUpLgorLlRQCisuQkkgXC1lICIgZW5naW5lSUQiCitTZXQgdGhlIGF1dGhvcml0YXRpdmUgKHNlY3VyaXR5KSBlbmdpbmVJRCB1c2VkIGZvciBTTk1QdjMgUkVRVUVTVAorbWVzc2FnZXMsIGdpdmVuIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIChvcHRpb25hbGx5IHByZWZpeGVkIGJ5ICIweCIpLgorSXQgaXMgdHlwaWNhbGx5IG5vdCBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGlzIGVuZ2luZSBJRCwgYXMgaXQgd2lsbAordXN1YWxseSBiZSBkaXNjb3ZlcmVkIGF1dG9tYXRpY2FsbHkuCisuVFAKKy5CSSBcLUUgIiBlbmdpbmVJRCIKK1NldCB0aGUgY29udGV4dCBlbmdpbmVJRCB1c2VkIGZvciBTTk1QdjMgUkVRVUVTVCBtZXNzYWdlcyBzY29wZWRQZHUsCitnaXZlbiBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4KK0lmIG5vdCBzcGVjaWZpZWQsIHRoaXMgd2lsbCBkZWZhdWx0IHRvIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZUlELgorLlRQCisuQkkgXC11ICIgc2VjTmFtZSIKK1NldCB0aGUgc2VjdXJpdHlOYW1lIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzIG1lc3NhZ2VzLgorT3ZlcnJpZGVzIHRoZSBcZklkZWZTZWN1cml0eU5hbWVcZlIgdG9rZW4gaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuCisuVFAKKy5CSSBcLXggIiBwcml2UHJvdG9jb2wiCiBTZXQgdGhlIHByaXZhY3kgcHJvdG9jb2wgKERFUyBvciBBRVMpIHVzZWQgZm9yIGVuY3J5cHRlZCBTTk1QdjMgbWVzc2FnZXMuIAogT3ZlcnJpZGVzIHRoZSBcZklkZWZQcml2VHlwZVxmUiB0b2tlbiBpbiB0aGUKIC5JIHNubXAuY29uZgogZmlsZS4gVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBpZiB0aGUgTmV0LVNOTVAgc29mdHdhcmUgd2FzIGJ1aWxkCiB0byB1c2UgT3BlblNTTC4KIC5UUAotLkJJIC1YICIgcHJpdlBhc3N3b3JkIgorLkJJIFwtWCAiIHByaXZQYXNzd29yZCIKIFNldCB0aGUgcHJpdmFjeSBwYXNzIHBocmFzZSB1c2VkIGZvciBlbmNyeXB0ZWQgU05NUHYzIG1lc3NhZ2VzLgogT3ZlcnJpZGVzIHRoZSBcZklkZWZQcml2UGFzc3BocmFzZVxmUiB0b2tlbiBpbiB0aGUKIC5JIHNubXAuY29uZgpAQCAtMjM2LDIzICszMjQsMjEgQEAKIEl0IGlzIGluc2VjdXJlIHRvIHNwZWNpZnkgcGFzcyBwaHJhc2VzIG9uIHRoZSBjb21tYW5kIGxpbmUsIHNlZQogLkkgc25tcC5jb25mKDUpLgogLlRQCi0uQkkgLVogIiBib290cyx0aW1lIgorLkJJIFwtWiAiIGJvb3RzLHRpbWUiCiBTZXQgdGhlIGVuZ2luZUJvb3RzIGFuZCBlbmdpbmVUaW1lIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzCiBtZXNzYWdlcy4gIFRoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBsb2NhbCBub3Rpb24gb2YgdGhlIGFnZW50cwogYm9vdHMvdGltZSB3aXRoIGFuIGF1dGhlbnRpY2F0ZWQgdmFsdWUgc3RvcmVkIGluIHRoZSBMQ0QuCiBJdCBpcyB0eXBpY2FsbHkgbm90IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoaXMgb3B0aW9uLCBhcyB0aGVzZSB2YWx1ZXMKIHdpbGwgdXN1YWxseSBiZSBkaXNjb3ZlcmVkIGF1dG9tYXRpY2FsbHkuCisKKworLlNIIFNOTVB2MSBhbmQgU05NUHYyYyBPcHRpb25zIAogLlRQCi0uQkkgLVkgIm5hbWUiPSJ2YWx1ZSIKLS5UUAotLkJJIC0tICJuYW1lIj0idmFsdWUiCi1BbGxvd3MgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQorLkJJIFwtYyAiIGNvbW11bml0eSIKK1NldCB0aGUgY29tbXVuaXR5IHN0cmluZyBmb3IgU05NUHYxL3YyYyB0cmFuc2FjdGlvbnMuCitPdmVycmlkZXMgdGhlIFxmSWRlZkNvbW11bml0eVxmUiB0b2tlbiBpbiB0aGUKIC5JIHNubXAuY29uZgotZmlsZSBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gInZhbHVlIi4gT3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLiBTZWUKLS5JIHNubXAuY29uZig1KQotZm9yIHRoZSBmdWxsIGxpc3Qgb2YgdG9rZW5zLgorZmlsZS4KIAogLlNIIEFHRU5UIFNQRUNJRklDQVRJT04KIC5QUApAQCAtMzI3LDQxICs0MTMsNiBAQAogb24gcG9ydAogLkkgMTE2MQogdXNpbmcgVENQL0lQdjQgYW5kIHBlcmZvcm0gcXVlcnkgb3ZlciB0aGF0IGNvbm5lY3Rpb24uCi0uVFAgMjQKLS5JUiAiaXB4OjowMEQwQjdBQUUzMDgiCi1wZXJmb3JtIHF1ZXJ5IHVzaW5nIElQWCBkYXRhZ3JhbXMgdG8gbm9kZSBudW1iZXIgCi0uSSAwMEQwQjdBQUUzMDgKLW9uIHRoZSBkZWZhdWx0IG5ldHdvcmssIGFuZCB1c2luZyB0aGUgZGVmYXVsdCBJUFggcG9ydCBvZiAzNjg3OSAoOTAwRgotaGV4YWRlY2ltYWwpLCBhcyBzdWdnZXN0ZWQgaW4gUkZDIDE5MDYuCi0uVFAgMjQKLS5JUiAiaXB4OjBBRTQzNDA5OjAwRDBCNzIxQzZDMC8xMTYxIgotcGVyZm9ybSBxdWVyeSB1c2luZyBJUFggZGF0YWdyYW1zIHRvIHBvcnQKLS5JIDExNjEKLW9uIG5vZGUgbnVtYmVyCi0uSSAwMEQwQjcyMUM2QzAKLW9uIG5ldHdvcmsgbnVtYmVyCi0uSVIgMEFFNDM0MDkgLgotLlRQIDI0Ci0uSVIgInVuaXg6L3RtcC9sb2NhbC1hZ2VudCIKLWNvbm5lY3QgdG8gdGhlIFVuaXggZG9tYWluIHNvY2tldCAKLS5JUiAvdG1wL2xvY2FsLWFnZW50ICwKLWFuZCBwZXJmb3JtIHRoZSBxdWVyeSBvdmVyIHRoYXQgY29ubmVjdGlvbi4KLS5UUCAyNAotLklSICIvdG1wL2xvY2FsLWFnZW50IgotaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9uLCBzaW5jZSB0aGUgVW5peCBkb21haW4gaXMgdGhlCi1kZWZhdWx0IHRyYW5zcG9ydCBpZmYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgPHRyYW5zcG9ydC1hZGRyZXNzPgotaXMgYSAnLycuCi0uVFAgMjQKLS5JUiAiQUFMNVBWQzoxMDAiCi1wZXJmb3JtIHRoZSBxdWVyeSB1c2luZyBBQUw1IFBEVXMgc2VudCBvbiB0aGUgcGVybWFuZW50IHZpcnR1YWwKLWNpcmN1aXQgd2l0aCBWUEk9MCBhbmQgVkNJPTEwMCAoZGVjaW1hbCkgb24gdGhlIGZpcnN0IEFUTSBhZGFwdGVyIGluIHRoZQotbWFjaGluZS4KLS5UUCAyNAotLklSICJQVkM6MS4xMC4zMiIKLXBlcmZvcm0gdGhlIHF1ZXJ5IHVzaW5nIEFBTDUgUERVcyBzZW50IG9uIHRoZSBwZXJtYW5lbnQgdmlydHVhbAotY2lyY3VpdCB3aXRoIFZQST0xMCAoZGVjaW1hbCkgYW5kIFZDST0zMiAoZGVjaW1hbCkgb24gdGhlIHNlY29uZCBBVE0KLWFkYXB0ZXIgaW4gdGhlIG1hY2hpbmUuICBOb3RlIHRoYXQgIlBWQyIgaXMgYSBzeW5vbnltIGZvciAiQUFMNVBWQyIuCi0uVFAgMjQKIC5JUiAidWRwNjpob3N0bmFtZToxMDE2MSIKIHBlcmZvcm0gdGhlIHF1ZXJ5IHVzaW5nIFVEUC9JUHY2IGRhdGFncmFtcyB0byBwb3J0CiAuSSAxMDE2MQpAQCAtMzc3LDYgKzQyOCw2NCBAQAogY29ubmVjdCB0byBwb3J0IDE2MTEgb24gdGhlIGxvY2FsIGhvc3QKIC5JUiAiIiAoIDo6MSAKIGluIElQdjYgcGFybGFuY2UpIHVzaW5nIFRDUC9JUHY2IGFuZCBwZXJmb3JtIHF1ZXJ5IG92ZXIgdGhhdCBjb25uZWN0aW9uLgorLlRQIDI0CisuSVIgInRsczpob3N0bmFtZToxMDE2MSIKKy5UUCAyNAorLklSICJkdGxzOmhvc3RuYW1lOjEwMTYxIgorQ29ubmVjdHMgdXNpbmcgU05NUCBvdmVyIERUTFMgb3IgVExTIGFzIGRvY3VtZW50ZWQgYnkgdGhlIElTTVMgd29ya2luZworZ3JvdXAgKFJGQ3Mgbm90IHlldCBwdWJsaXNoZWQgYXMgb2YgdGhpcyBkYXRlKS4gIFRoaXMgd2lsbCByZXF1aXJlCisoYW5kIGF1dG9tYXRpY2FsbHkgZW5zdXJlcykgdGhhdCB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsIGlzIGluIHVzZS4KK1lvdSdsbCBhbHNvIG5lZWQgdG8gc2V0IHVwIHRydXN0IHBhdGhzIGZvciB0aGUgY2VydGlmaWNhdGVzIHByZXNlbnRlZAorYnkgdGhlIHNlcnZlciAoc2VlIGFib3ZlIGZvciBkZXNjcmlwdGlvbnMgb2YgdGhpcykuCisuVFAgMjQKKy5JUiAic3NoOmhvc3RuYW1lOjIyIgorQ29ubmVjdHMgdXNpbmcgU05NUCBvdmVyIFNTSCBhcyBkb2N1bWVudGVkIGJ5IHRoZSBJU01TIHdvcmtpbmcgZ3JvdXAKKyhSRkNzIG5vdCB5ZXQgcHVibGlzaGVkIGFzIG9mIHRoaXMgZGF0ZSkuICBUaGlzIHdpbGwgcmVxdWlyZSB0aGF0IHRoZQorVFNNIHNlY3VyaXR5IG1vZGVsIGlzIGluIHVzZSAoXC1cLWRlZlNlY3VyaXR5TW9kZWw9dHNtKS4KKy5UUCAyNAorLklSICJpcHg6OjAwRDBCN0FBRTMwOCIKK3BlcmZvcm0gcXVlcnkgdXNpbmcgSVBYIGRhdGFncmFtcyB0byBub2RlIG51bWJlciAKKy5JIDAwRDBCN0FBRTMwOAorb24gdGhlIGRlZmF1bHQgbmV0d29yaywgYW5kIHVzaW5nIHRoZSBkZWZhdWx0IElQWCBwb3J0IG9mIDM2ODc5ICg5MDBGCitoZXhhZGVjaW1hbCksIGFzIHN1Z2dlc3RlZCBpbiBSRkMgMTkwNi4KKy5UUCAyNAorLklSICJpcHg6MEFFNDM0MDk6MDBEMEI3MjFDNkMwLzExNjEiCitwZXJmb3JtIHF1ZXJ5IHVzaW5nIElQWCBkYXRhZ3JhbXMgdG8gcG9ydAorLkkgMTE2MQorb24gbm9kZSBudW1iZXIKKy5JIDAwRDBCNzIxQzZDMAorb24gbmV0d29yayBudW1iZXIKKy5JUiAwQUU0MzQwOSAuCisuVFAgMjQKKy5JUiAidW5peDovdG1wL2xvY2FsXC1hZ2VudCIKK2Nvbm5lY3QgdG8gdGhlIFVuaXggZG9tYWluIHNvY2tldCAKKy5JUiAvdG1wL2xvY2FsXC1hZ2VudCAsCithbmQgcGVyZm9ybSB0aGUgcXVlcnkgb3ZlciB0aGF0IGNvbm5lY3Rpb24uCisuVFAgMjQKKy5JUiAiL3RtcC9sb2NhbFwtYWdlbnQiCitpZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb24sIHNpbmNlIHRoZSBVbml4IGRvbWFpbiBpcyB0aGUKK2RlZmF1bHQgdHJhbnNwb3J0IGlmZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSA8dHJhbnNwb3J0LWFkZHJlc3M+CitpcyBhICcvJy4KKy5UUCAyNAorLklSICJhbGlhczpteW5hbWUiCitwZXJmb3JtIGEgY29ubmVjdGlvbiB0byB0aGUKKy5JIG15bmFtZQorYWxpYXMgd2hpY2ggbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgc25tcC5jb25mIGZpbGUgdXNpbmcgYSBsaW5lCitsaWtlICIKKy5JICJhbGlhcyBteW5hbWUgdWRwOjEyNy4wLjAuMTo5MTYxIgorIi4gIEFueSB0eXBlIG9mIHRyYW5zcG9ydCBkZWZpbml0aW9uIGNhbiBiZSB1c2VkIGFzIHRoZSBhbGlhcyBleHBhbnNpb24KK3BhcmFtZXRlci4gIEFsaWFzZXMgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHVzaW5nIHJlcGVhdGVkIGNvbXBsZXgKK3RyYW5zcG9ydCBzdHJpbmdzLgorLlRQIDI0CisuSVIgIkFBTDVQVkM6MTAwIgorcGVyZm9ybSB0aGUgcXVlcnkgdXNpbmcgQUFMNSBQRFVzIHNlbnQgb24gdGhlIHBlcm1hbmVudCB2aXJ0dWFsCitjaXJjdWl0IHdpdGggVlBJPTAgYW5kIFZDST0xMDAgKGRlY2ltYWwpIG9uIHRoZSBmaXJzdCBBVE0gYWRhcHRlciBpbiB0aGUKK21hY2hpbmUuCisuVFAgMjQKKy5JUiAiUFZDOjEuMTAuMzIiCitwZXJmb3JtIHRoZSBxdWVyeSB1c2luZyBBQUw1IFBEVXMgc2VudCBvbiB0aGUgcGVybWFuZW50IHZpcnR1YWwKK2NpcmN1aXQgd2l0aCBWUEk9MTAgKGRlY2ltYWwpIGFuZCBWQ0k9MzIgKGRlY2ltYWwpIG9uIHRoZSBzZWNvbmQgQVRNCithZGFwdGVyIGluIHRoZSBtYWNoaW5lLiAgTm90ZSB0aGF0ICJQVkMiIGlzIGEgc3lub255bSBmb3IgIkFBTDVQVkMiLgogLlBQCiBOb3RlIHRoYXQgbm90IGFsbCB0aGUgdHJhbnNwb3J0IGRvbWFpbnMgbGlzdGVkIGFib3ZlIHdpbGwgYWx3YXlzIGJlCiBhdmFpbGFibGU7IGZvciBpbnN0YW5jZSwgaG9zdHMgd2l0aCBubyBJUHY2IHN1cHBvcnQgd2lsbCBub3QgYmUgYWJsZQpAQCAtMzg0LDMzICs0OTMsMzIgQEAKIHRoZSBlcnJvciAiVW5rbm93biBob3N0Ii4gIExpa2V3aXNlLCBzaW5jZSBBQUw1IFBWQyBzdXBwb3J0IGlzIG9ubHkKIGN1cnJlbnRseSBhdmFpbGFibGUgb24gTGludXgsIGl0IHdpbGwgZmFpbCB3aXRoIHRoZSBzYW1lIGVycm9yIG9uCiBvdGhlciBwbGF0Zm9ybXMuCi0KIC5TSCAiTUlCIFBBUlNJTkcgT1BUSU9OUyIKIFRoZSBOZXQtU05NUCBNSUIgcGFyc2VyIG1vc3RseSBhZGhlcmVzIHRvIHRoZSBTdHJ1Y3R1cmUgb2YgTWFuYWdlbWVudAogSW5mb3JtYXRpb24gKFNNSSkuICBBcyB0aGF0IHNwZWNpZmljYXRpb24gaGFzIGNoYW5nZWQgdGhyb3VnaCB0aW1lLCBhbmQKIGluIHJlY29nbml0aW9uIG9mIHRoZSAoYWhlbSkgZGl2ZXJzaXR5IGluIGNvbXBsaWFuY2UgZXhwcmVzc2VkIGluIE1JQgogZmlsZXMsIGFkZGl0aW9uYWwgb3B0aW9ucyBwcm92aWRlIG1vcmUgZmxleGliaWxpdHkgaW4gcmVhZGluZyBNSUIgZmlsZXMuCiAuVFAKLS5CICItUGMiCisuQiAiXC1QYyIKIFRvZ2dsZXMgd2hldGhlciBBU04uMSBjb21tZW50cyBzaG91bGQgZXh0ZW5kIHRvIHRoZSBlbmQgb2YgdGhlIE1JQgogc291cmNlIGxpbmUuCi1TdHJpY3RseSBzcGVha2luZywgYSBzZWNvbmQgYXBwZWFyYW5jZSBvZiAiLS0iIHNob3VsZCB0ZXJtaW5hdGUgdGhlCitTdHJpY3RseSBzcGVha2luZywgYSBzZWNvbmQgYXBwZWFyYW5jZSBvZiAiXC1cLSIgc2hvdWxkIHRlcm1pbmF0ZSB0aGUKIGNvbW1lbnQsIGJ1dCB0aGlzIGJyZWFrcyBzb21lIE1JQiBmaWxlcy4KIFRoZSBkZWZhdWx0IGJlaGF2aW91ciAodG8gaW50ZXJwcmV0IGNvbW1lbnRzIGNvcnJlY3RseSkgY2FuIGFsc28KLWJlIHNldCB3aXRoIHRoZSAobWlzbmFtZWQpIGNvbmZpZ3VyYXRpb24gdG9rZW4gXGZJc3RyaWN0Q29tbWVudFRlcm1cZlIuCitiZSBzZXQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiB0b2tlbiBcZkljb21tZW50VG9FT0xcZlIuCiAuVFAKLS5CICItUGQiCisuQiAiXC1QZCIKIERpc2FibGVzIHRoZSBsb2FkaW5nIG9mIE1JQiBvYmplY3QgREVTQ1JJUFRJT05zIHdoZW4gcGFyc2luZyBNSUIgZmlsZXMuCiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgcnVubmluZyBhcHBsaWNhdGlvbi4KIC5UUAotLkIgIi1QZSIKKy5CICJcLVBlIgogVG9nZ2xlcyB3aGV0aGVyIHRvIHNob3cgZXJyb3JzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyBNSUIgZmlsZXMuCiBUaGVzZSBpbmNsdWRlCiByZWZlcmVuY2VzIHRvIElNUE9SVGVkIG1vZHVsZXMgYW5kIE1JQiBvYmplY3RzIHRoYXQgY2Fubm90IGJlCiBsb2NhdGVkIGluIHRoZSBNSUIgZGlyZWN0b3J5IHNlYXJjaCBsaXN0LgogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHRva2VuIFxmSXNob3dNaWJFcnJvcnNcZlIuCiAuVFAKLS5CICItUFIiCisuQiAiXC1QUiIKIElmIHRoZSBzYW1lIE1JQiBvYmplY3QgKHBhcmVudCBuYW1lIGFuZCBzdWItaWRlbnRpZmllcikgYXBwZWFycyBtdWx0aXBsZQogdGltZXMgaW4gdGhlIGxpc3Qgb2YgTUlCIGRlZmluaXRpb25zIGxvYWRlZCwgdXNlIHRoZSBsYXN0IHZlcnNpb24gdG8gYmUKIHJlYWQgaW4uICBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgdmVyc2lvbiB3aWxsIGJlIHVzZWQsIGFuZCBhbnkgZHVwbGljYXRlcwpAQCAtNDI0LDIwICs1MzIsMjAgQEAKIC5cIiBTZXR0aW5nIHRoaXMgb3B0aW9uIG1heSByZXN1bHQgaW4gYW4gaW5jb3JyZWN0IGhpZXJhcmNoeS4KIC5cIiBYWFggLSBXaHk/CiAuVFAKLS5CICItUHUiCisuQiAiXC1QdSIKIFRvZ2dsZXMgd2hldGhlciB0byBhbGxvdyB0aGUgdW5kZXJsaW5lIGNoYXJhY3RlciBpbiBNSUIgb2JqZWN0IG5hbWVzCiBhbmQgb3RoZXIgc3ltYm9scy4KIFN0cmljdGx5IHNwZWFraW5nLCB0aGlzIGlzIG5vdCB2YWxpZCBTTUkgc3ludGF4LCBidXQgc29tZSB2ZW5kb3IgTUlCCiBmaWxlcyBkZWZpbmUgc3VjaCBuYW1lcy4KIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiB0b2tlbiBcZkltaWJBbGxvd1VuZGVybGluZVxmUi4KIC5UUAotLkIgIi1QdyIKKy5CICJcLVB3IgogU2hvdyB2YXJpb3VzIHdhcm5pbmcgbWVzc2FnZXMgaW4gcGFyc2luZyBNSUIgZmlsZXMgYW5kIGJ1aWxkaW5nCiB0aGUgb3ZlcmFsbCBPSUQgdHJlZS4KIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlCiBcZkltaWJXYXJuaW5nTGV2ZWwgMVxmUgogLlRQCi0uQiAiLVBXIgorLkIgIlwtUFciCiBTaG93IHNvbWUgYWRkaXRpb25hbCB3YXJuaW5nIG1lc3NhZ2VzLCBtb3N0bHkgcmVsYXRpbmcgdG8gcGFyc2luZwogaW5kaXZpZHVhbCBNSUIgb2JqZWN0cy4KIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlCkBAIC00NDUsMTA3ICs1NTMsMTA3IEBACiAKIC5TSCAiT1VUUFVUIE9QVElPTlMiCiBUaGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQgZnJvbSBTTk1QIGNvbW1hbmRzIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nCi12YXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIFxmQi1PXGZSIGZsYWcuCit2YXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIFxmQlwtT1xmUiBmbGFnLgogVGhlIGVmZmVjdHMgb2YgdGhlc2Ugc3ViLW9wdGlvbnMgY2FuIGJlIHNlZW4gYnkgY29tcGFyaXNvbiB3aXRoCiB0aGUgZm9sbG93aW5nIGRlZmF1bHQgb3V0cHV0ICh1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCk6CiAuUlMKIC5uZgotXGZDJCBzbm1wZ2V0IC1jIHB1YmxpYyAtdiAxIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAotU05NUHYyLU1JQjo6c3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCitcZkMkIHNubXBnZXQgXC1jIHB1YmxpYyBcLXYgMSBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKK1NOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5maQogLlJFCiAKIC5UUAotLkIgLU9hCisuQiBcLU9hCiBEaXNwbGF5IHN0cmluZyB2YWx1ZXMgYXMgQVNDSUkgc3RyaW5ncyAodW5sZXNzIHRoZXJlIGlzIGEgCi1cZkNESVNQTEFZLUhJTlRcZlIgZGVmaW5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCkuCitcZkNESVNQTEFZXC1ISU5UXGZSIGRlZmluZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QpLgogQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkgYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHZhbHVlIGlzCiBhIHByaW50YWJsZSBvciBiaW5hcnkgc3RyaW5nLCBhbmQgZGlzcGxheXMgaXQgYWNjb3JkaW5nbHkuCiAKIFRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCBvYmplY3RzIHRoYXQgXGZJZG9cZlIgaGF2ZSBhIERpc3BsYXkgSGludC4KIC5UUAotLkIgLU9iCisuQiBcLU9iCiBEaXNwbGF5IHRhYmxlIGluZGV4ZXMgbnVtZXJpY2FsbHksIHJhdGhlciB0aGFuIHRyeWluZyB0byBpbnRlcnByZXQKIHRoZSBpbnN0YW5jZSBzdWJpZGVudGlmaWVycyBhcyBzdHJpbmcgb3IgT0lEIHZhbHVlczoKIC5SUwogLm5mCi1cZkMgICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKLSAgICBTTk1QLVZJRVctQkFTRUQtQUNNLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4id2VzIiA9IHh4eAotICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgXGZCLU9iXGZQIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAotICAgIFNOTVAtVklFVy1CQVNFRC1BQ00tTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLjMuMTE5LjEwMS4xMTUgPSB4eHhcZlIKK1xmQyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCisgICAgU05NUFwtVklFV1wtQkFTRURcLUFDTVwtTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLiJ3ZXMiID0geHh4CisgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIFxmQlwtT2JcZlAgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCisgICAgU05NUFwtVklFV1wtQkFTRURcLUFDTVwtTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLjMuMTE5LjEwMS4xMTUgPSB4eHhcZlIKIC5maQogLlJFCiAuVFAKLS5CIC1PZQorLkIgXC1PZQogUmVtb3ZlcyB0aGUgc3ltYm9saWMgbGFiZWxzIGZyb20gZW51bWVyYXRpb24gdmFsdWVzOgogLlJTCiAubmYKLVxmQyAgICAkIHNubXBnZXQgLWMgcHVibGljIC12IDEgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCi0gICAgSVAtTUlCOjppcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IGZvcndhcmRpbmcoMSkKLVxmQyAgICAkIHNubXBnZXQgLWMgcHVibGljIC12IDEgXGZCLU9lXGZQIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAotICAgIElQLU1JQjo6aXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiAxXGZSCitcZkMgICAgJCBzbm1wZ2V0IFwtYyBwdWJsaWMgXC12IDEgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCisgICAgSVBcLU1JQjo6aXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiBmb3J3YXJkaW5nKDEpCitcZkMgICAgJCBzbm1wZ2V0IFwtYyBwdWJsaWMgXC12IDEgXGZCXC1PZVxmUCBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKKyAgICBJUFwtTUlCOjppcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IDFcZlIKIC5maQogLlJFCiAuVFAKLS5CIC1PRQorLkIgXC1PRQogTW9kaWZpZXMgaW5kZXggc3RyaW5ncyB0byBlc2NhcGUgdGhlIHF1b3RlIGNoYXJhY3RlcnM6CiAuUlMKIC5uZgotXGZDICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCi0gICAgU05NUC1WSUVXLUJBU0VELUFDTS1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuIndlcyIgPSB4eHgKLSAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIFxmQi1PRVxmUCBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKLSAgICBTTk1QLVZJRVctQkFTRUQtQUNNLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC5cXCJ3ZXNcXCIgPSB4eHhcZlIKK1xmQyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCisgICAgU05NUFwtVklFV1wtQkFTRURcLUFDTVwtTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLiJ3ZXMiID0geHh4CisgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIFxmQlwtT0VcZlAgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCisgICAgU05NUFwtVklFV1wtQkFTRURcLUFDTVwtTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLlxcIndlc1xcIiA9IHh4eFxmUgogLmZpCiAuUkUKIC5JUAogVGhpcyBhbGxvd3MgdGhlIG91dHB1dCB0byBiZSByZXVzZWQgaW4gc2hlbGwgY29tbWFuZHMuCiAuVFAKLS5CIC1PZgorLkIgXC1PZgogSW5jbHVkZSB0aGUgZnVsbCBsaXN0IG9mIE1JQiBvYmplY3RzIHdoZW4gZGlzcGxheWluZyBhbiBPSUQ6CiAuUlMKLVxmQyAgICAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzVXBUaW1lLjAgPVxmUgorXGZDICAgIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0uc3lzVXBUaW1lLjAgPVxmUgogLlJTCiBcZkMgICAgICAgIFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5SRQogLlJFCiAuVFAKLS5CIC1PbgorLkIgXC1PbgogRGlzcGxheXMgdGhlIE9JRCBudW1lcmljYWxseToKIC5icgogXGZDICAgIC4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5UUAotLkIgLU9xCisuQiBcLU9xCiBSZW1vdmVzIHRoZSBlcXVhbCBzaWduIGFuZCB0eXBlIGluZm9ybWF0aW9uIHdoZW4gZGlzcGxheWluZyB2YXJiaW5kIHZhbHVlczoKIC5icgotXGZDICAgIFNOTVB2Mi1NSUI6OnN5c1VwVGltZS4wIDE6MTU6MDk6MjcuNjNcZlIKK1xmQyAgICBTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjAgMToxNTowOToyNy42M1xmUgogLlRQCi0uQiAtT1EKKy5CIFwtT1EKIFJlbW92ZXMgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBkaXNwbGF5aW5nIHZhcmJpbmQgdmFsdWVzOgogLmJyCi1cZkMgICAgU05NUHYyLU1JQjo6c3lzVXBUaW1lLjAgPSAxOjE1OjA5OjI3LjYzXGZSCitcZkMgICAgU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wID0gMToxNTowOToyNy42M1xmUgogLlRQCi0uQiAtT3MKKy5CIFwtT3MKIERpc3BsYXkgdGhlIE1JQiBvYmplY3QgbmFtZSAocGx1cyBhbnkgaW5zdGFuY2Ugb3Igb3RoZXIgc3ViaWRlbnRpZmllcnMpOgogLmJyCiBcZkMgICAgc3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuVFAKLS5CIC1PUworLkIgXC1PUwogRGlzcGxheSB0aGUgbmFtZSBvZiB0aGUgTUlCLCBhcyB3ZWxsIGFzIHRoZSBvYmplY3QgbmFtZToKIC5icgotXGZDICAgIFNOTVB2Mi1NSUI6OnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgorXGZDICAgIFNOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5JUAogVGhpcyBpcyB0aGUgZGVmYXVsdCBPSUQgb3V0cHV0IGZvcm1hdC4KIC5UUAotLkIgLU90CisuQiBcLU90CiBEaXNwbGF5IFxmQ1RpbWVUaWNrc1xmUiB2YWx1ZXMgYXMgcmF3IG51bWJlcnM6CiAuYnIKLVxmQyAgICBTTk1QdjItTUlCOjpzeXNVcFRpbWUuMCA9IDE0MDk2NzYzXGZSCitcZkMgICAgU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wID0gMTQwOTY3NjNcZlIKIC5UUAotLkIgLU9UCisuQiBcLU9UCiBJZiB2YWx1ZXMgYXJlIHByaW50ZWQgYXMgSGV4IHN0cmluZ3MsCiBkaXNwbGF5IGEgcHJpbnRhYmxlIHZlcnNpb24gYXMgd2VsbC4KIC5UUAotLkIgLU91CisuQiBcLU91CiBEaXNwbGF5IHRoZSBPSUQgaW4gdGhlIHRyYWRpdGlvbmFsIFVDRC1zdHlsZSAoaW5oZXJpdGVkIGZyb20gdGhlIG9yaWdpbmFsCiBDTVUgY29kZSkuCiBUaGF0IG1lYW5zIHJlbW92aW5nIGEgc2VyaWVzIG9mICJzdGFuZGFyZCIgcHJlZml4ZXMgZnJvbSB0aGUgT0lELApAQCAtNTU0LDM1ICs2NjIsMzUgQEAKIC5icgogXGZDICAgIHN5c3RlbS5zeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5UUAotLkIgLU9VCisuQiBcLU9VCiBEbyBub3QgcHJpbnQgdGhlIFVOSVRTIHN1ZmZpeCBhdCB0aGUgZW5kIG9mIHRoZSB2YWx1ZS4KIC5UUAotLkIgLU92CisuQiBcLU92CiBEaXNwbGF5IHRoZSB2YXJiaW5kIHZhbHVlIG9ubHksIG5vdCB0aGUgT0lEOgogLlJTCiAubmYKLVxmQyAgICAkIHNubXBnZXQgLWMgcHVibGljIC12IDEgXGZCLU92XGZQIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAorXGZDICAgICQgc25tcGdldCBcLWMgcHVibGljIFwtdiAxIFxmQlwtT3ZcZlAgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCiAgICAgSU5URUdFUjogZm9yd2FyZGluZygxKVxmUgogLmZpCiAuUkUKIC5UUAotLkIgLU94CisuQiBcLU94CiBEaXNwbGF5IHN0cmluZyB2YWx1ZXMgYXMgSGV4IHN0cmluZ3MgKHVubGVzcyB0aGVyZSBpcyBhIAotXGZDRElTUExBWS1ISU5UXGZSIGRlZmluZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QpLgorXGZDRElTUExBWVwtSElOVFxmUiBkZWZpbmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0KS4KIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IGF0dGVtcHRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBpcwogYSBwcmludGFibGUgb3IgYmluYXJ5IHN0cmluZywgYW5kIGRpc3BsYXlzIGl0IGFjY29yZGluZ2x5LgogCiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3Qgb2JqZWN0cyB0aGF0IFxmSWRvXGZSIGhhdmUgYSBEaXNwbGF5IEhpbnQuCiAuVFAKLS5CIC1PWAorLkIgXC1PWAogRGlzcGxheSB0YWJsZSBpbmRleGVzIGluIGEgbW9yZSAicHJvZ3JhbSBsaWtlIiBvdXRwdXQsIGltaXRhdGluZwogYSB0cmFkaXRpb25hbCBhcnJheS1zdHlsZSBpbmRleCBmb3JtYXQ6CiAuUlMKIC5uZgotXGZDICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgbG9jYWxob3N0IGlwdjZSb3V0ZVRhYmxlCi0gICAgSVB2Ni1NSUI6OmlwdjZSb3V0ZUlmSW5kZXguNjMuMjU0LjEuMC4yNTUuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjY0LjEgPSBJTlRFR0VSOiAyCi0gICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBcZkItT1hcZlAgbG9jYWxob3N0IGlwdjZSb3V0ZVRhYmxlCi0gICAgSVB2Ni1NSUI6OmlwdjZSb3V0ZUlmSW5kZXhbM2ZmZToxMDA6ZmYwMDowOjA6MDowOjBdWzY0XVsxXSA9IElOVEVHRVI6IDIKK1xmQyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgbG9jYWxob3N0IGlwdjZSb3V0ZVRhYmxlCisgICAgSVB2NlwtTUlCOjppcHY2Um91dGVJZkluZGV4LjYzLjI1NC4xLjAuMjU1LjAuMC4wLjAuMC4wLjAuMC4wLjAuMC42NC4xID0gSU5URUdFUjogMgorICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBcZkJcLU9YXGZQIGxvY2FsaG9zdCBpcHY2Um91dGVUYWJsZQorICAgIElQdjZcLU1JQjo6aXB2NlJvdXRlSWZJbmRleFszZmZlOjEwMDpmZjAwOjA6MDowOjA6MF1bNjRdWzFdID0gSU5URUdFUjogMgogLmZpCiAuUkUKIC5QUApAQCAtNTk0LDE5ICs3MDIsMTkgQEAKIC5TSCAiTE9HR0lORyBPUFRJT05TIgogVGhlIG1lY2hhbmlzbSBhbmQgZGVzdGluYXRpb24gdG8gdXNlIGZvciBsb2dnaW5nIG9mIHdhcm5pbmcgYW5kIGVycm9yCiBtZXNzYWdlcyBjYW4gYmUgY29udHJvbGxlZCBieSBwYXNzaW5nIHZhcmlvdXMgcGFyYW1ldGVycyB0byB0aGUKLS5CIC1MCisuQiBcLUwKIGZsYWcuCiAuVFAKLS5CIC1MZQorLkIgXC1MZQogTG9nIG1lc3NhZ2VzIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCiAuVFAKLS5CIC1MZiBGSUxFCisuQiBcLUxmIEZJTEUKIExvZyBtZXNzYWdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUuCiAuVFAKLS5CIC1MbworLkIgXC1MbwogTG9nIG1lc3NhZ2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLgogLlRQCi0uQiAtTHMgRkFDSUxJVFkKKy5CIFwtTHMgRkFDSUxJVFkKIExvZyBtZXNzYWdlcyB2aWEgc3lzbG9nLCB1c2luZyB0aGUgc3BlY2lmaWVkIGZhY2lsaXR5CiAoJ2QnIGZvciBMT0dfREFFTU9OLCAndScgZm9yIExPR19VU0VSLAogb3IgJzAnLSc3JyBmb3IgTE9HX0xPQ0FMMCB0aHJvdWdoIExPR19MT0NBTDcpLgpAQCAtNjE2LDE3ICs3MjQsMTcgQEAKIGFsbG93IHRoZSBjb3JyZXNwb25kaW5nIGxvZ2dpbmcgbWVjaGFuaXNtIHRvIGJlIHJlc3RyaWN0ZWQgdG8gY2VydGFpbgogcHJpb3JpdGllcyBvZiBtZXNzYWdlLiAgVXNpbmcgc3RhbmRhcmQgZXJyb3IgbG9nZ2luZyBhcyBhbiBleGFtcGxlOgogLlRQCi0uQiAtTEUgcHJpCisuQiBcLUxFIHByaQogd2lsbCBsb2cgbWVzc2FnZXMgb2YgcHJpb3JpdHkgJ3ByaScgYW5kIGFib3ZlIHRvIHN0YW5kYXJkIGVycm9yLgogLlRQCi0uQiAtTEUgcDEtcDIKKy5CIFwtTEUgcDFcLXAyCiB3aWxsIGxvZyBtZXNzYWdlcyB3aXRoIHByaW9yaXR5IGJldHdlZW4gJ3AxJyBhbmQgJ3AyJyAoaW5jbHVzaXZlKSB0bwogc3RhbmRhcmQgZXJyb3IuCiAuUFAKIEZvcgotLkIgLUxGCisuQiBcLUxGCiBhbmQKLS5CIC1MUworLkIgXC1MUwogdGhlIHByaW9yaXR5IHNwZWNpZmljYXRpb24gY29tZXMgYmVmb3JlIHRoZSBmaWxlIG9yIGZhY2lsaXR5IHRva2VuLgogVGhlIHByaW9yaXRpZXMgcmVjb2duaXNlZCBhcmU6CiAuSVAKQEAgLTY3NSwxMCArNzgzLDEwIEBACiAKIC5TSCAiSU5QVVQgT1BUSU9OUyIKIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBpbnB1dCBvYmplY3QgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgdG8gYmUgYXNzaWduZWQKLWNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHZhcmlvdXMgcGFyYW1ldGVycyBvZiB0aGUgXGZCLUlcZlIgZmxhZy4KK2NhbiBiZSBjb250cm9sbGVkIHVzaW5nIHZhcmlvdXMgcGFyYW1ldGVycyBvZiB0aGUgXGZCXC1JXGZSIGZsYWcuCiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgd2lsbCBiZSBkZXNjcmliZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHNlY3Rpb24uCiAuVFAKLS5CIC1JYgorLkIgXC1JYgogc3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVuIG5hbWUgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLAogdG8gbWF0Y2ggKGNhc2UtaW5zZW5zaXRpdmVseSkgYWdhaW5zdCBvYmplY3QgbmFtZXMgaW4gdGhlIE1JQiB0cmVlLgogVGhlICJiZXN0IiBtYXRjaCB3aWxsIGJlIHVzZWQgLSBjYWxjdWxhdGVkIGFzIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHRoZQpAQCAtNjk5LDIzICs4MDcsMjMgQEAKIGluc3RhbmNlIFxmQ3N5c0NvbnRhY3QuMFxmUiAoYWx0aG91Z2ggXGZJc3lzKm9udGFjdFxmUiB3b3VsZCBtYXRjaAogXGZDc3lzQ29udGFjdFxmUikuCiBTaW1pbGFybHksIHNwZWNpZnlpbmcgYSBNSUIgbW9kdWxlIG5hbWUgd2lsbCBub3Qgc3VjY2VlZAotKHNvIFxmSVNOTVB2Mi1NSUI6OnN5cy4qb250YWN0XGZSIHdvdWxkIG5vdCBtYXRjaCBlaXRoZXIpLgorKHNvIFxmSVNOTVB2MlwtTUlCOjpzeXMuKm9udGFjdFxmUiB3b3VsZCBub3QgbWF0Y2ggZWl0aGVyKS4KIC5UUAotLkIgLUloCi1kaXNhYmxlcyB0aGUgdXNlIG9mIERJU1BMQVktSElOVCBpbmZvcm1hdGlvbiB3aGVuIGFzc2lnbmluZyB2YWx1ZXMuCisuQiBcLUloCitkaXNhYmxlcyB0aGUgdXNlIG9mIERJU1BMQVlcLUhJTlQgaW5mb3JtYXRpb24gd2hlbiBhc3NpZ25pbmcgdmFsdWVzLgogVGhpcyB3b3VsZCB0aGVuIHJlcXVpcmUgcHJvdmlkaW5nIHRoZSByYXcgdmFsdWU6CiAuYnIKLVxmQyAgICBzbm1wc2V0IC4uLiBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtRGF0ZS4wCitcZkMgICAgc25tcHNldCAuLi4gSE9TVFwtUkVTT1VSQ0VTXC1NSUI6OmhyU3lzdGVtRGF0ZS4wCiAuYnIKICAgICAgICAgICAgICAgICAgICAgeCAiMDcgRDIgMEMgMEEgMDIgMDQgMDYgMDgiXGZSCiAuYnIKIGluc3RlYWQgb2YgYSBmb3JtYXR0ZWQgdmVyc2lvbjoKIC5icgotXGZDICAgIHNubXBzZXQgLi4uIEhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJTeXN0ZW1EYXRlLjAKK1xmQyAgICBzbm1wc2V0IC4uLiBIT1NUXC1SRVNPVVJDRVNcLU1JQjo6aHJTeXN0ZW1EYXRlLjAKIC5icgotICAgICAgICAgICAgICAgICAgICA9IDIwMDItMTItMTAsMjo0OjYuOFxmUgorICAgICAgICAgICAgICAgICAgICA9IDIwMDJcLTEyXC0xMCwyOjQ6Ni44XGZSCiAuVFAKLS5CIC1JcgorLkIgXC1JcgogZGlzYWJsZXMgY2hlY2tpbmcgdGFibGUgaW5kZXhlcyBhbmQgdGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIGFnYWluc3QgdGhlCiByZWxldmFudCBNSUIgZGVmaW5pdGlvbnMuICBUaGlzIHdpbGwgKGhvcGVmdWxseSkgcmVzdWx0IGluIHRoZSByZW1vdGUKIGFnZW50IHJlcG9ydGluZyBhbiBpbnZhbGlkIHJlcXVlc3QsIHJhdGhlciB0aGFuIGNoZWNraW5nIChhbmQgcmVqZWN0aW5nKQpAQCAtNzI1LDEzICs4MzMsMTMgQEAKIHRlbmQgdG8gYmUgbW9yZSBwcmVjaXNlKSwgYnV0IGRpc2FibGluZyB0aGlzIGJlaGF2aW91ciBpcyBwYXJ0aWN1bGFybHkKIHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHJlbW90ZSBhZ2VudC4KIC5UUAotLkIgLUlSCisuQiBcLUlSCiBlbmFibGVzICJyYW5kb20gYWNjZXNzIiBsb29rdXAgb2YgTUlCIG5hbWVzLgogUmF0aGVyIHRoYW4gcHJvdmlkaW5nIGEgZnVsbCBPSUQgcGF0aCB0byB0aGUgZGVzaXJlZCBNSUIgb2JqZWN0CiAob3IgcXVhbGlmeWluZyB0aGlzIG9iamVjdCB3aXRoIGFuIGV4cGxpY2l0IE1JQiBtb2R1bGUgbmFtZSksCiB0aGUgTUlCIHRyZWUgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhlIG1hdGNoaW5nIG9iamVjdCBuYW1lLgotVGh1cyBcZkMuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWliLTIuc3lzdGVtLnN5c0Rlc2NyLjBcZlIKLShvciBcZkNTTk1QdjItTUlCOjpzeXNEZXNjci4wXGZSKSBjYW4gYmUgc3BlY2lmaWVkIHNpbXBseQorVGh1cyBcZkMuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWliXC0yLnN5c3RlbS5zeXNEZXNjci4wXGZSCisob3IgXGZDU05NUHYyXC1NSUI6OnN5c0Rlc2NyLjBcZlIpIGNhbiBiZSBzcGVjaWZpZWQgc2ltcGx5CiBhcyBcZkNzeXNEZXNjci4wXGZSLgogLlJTCiAuSVAgIldhcm5pbmc6IgpAQCAtNzQwLDI0ICs4NDgsMjQgQEAKIGhhdmUgYmVlbiBsb2FkZWQuCiAuUkUKIC5JUAotVGhlIFxmSU1JQi1NT0RVTEU6Om9iamVjdE5hbWVcZlIgc3ludGF4IGhhcworVGhlIFxmSU1JQlwtTU9EVUxFOjpvYmplY3ROYW1lXGZSIHN5bnRheCBoYXMKIHRoZSBhZHZhbnRhZ2Ugb2YgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBwYXJ0aWN1bGFyIE1JQiBvYmplY3QsCiBhcyB3ZWxsIGFzIGJlaW5nIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IChhbmQgYXV0b21hdGljYWxseQogbG9hZGluZyB0aGUgbmVjZXNzYXJ5IE1JQiBmaWxlIGlmIG5lY2Vzc2FyeSkuCiAuVFAKLS5CIC1JcyBTVUZGSVgKKy5CIFwtSXMgU1VGRklYCiBhZGRzIHRoZSBzcGVjaWZpZWQgc3VmZml4IHRvIGVhY2ggdGV4dHVhbCBPSUQgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgbXVsdGlwbGUgb2JqZWN0cyBmcm9tIHRoZSBzYW1lIHJvdyBvZgogYSB0YWJsZSwgYnkgc3BlY2lmeWluZyBhIGNvbW1vbiBpbmRleCB2YWx1ZS4KIC5UUAotLkIgLUlTIFBSRUZJWAorLkIgXC1JUyBQUkVGSVgKIGFkZHMgdGhlIHNwZWNpZmllZCBwcmVmaXggdG8gZWFjaCB0ZXh0dWFsIE9JRCBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgogVGhpcyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGV4cGxpY2l0IE1JQiBtb2R1bGUgbmFtZSBmb3IgYWxsIG9iamVjdHMKIGJlaW5nIHJldHJpZXZlZCAob3IgZm9yIGluY3VyYWJseSBsYXp5IHR5cGlzdHMpLgogLlRQCi0uQiAtSXUKKy5CIFwtSXUKIGVuYWJsZXMgdGhlIHRyYWRpdGlvbmFsIFVDRC1zdHlsZSBhcHByb2FjaCB0byBpbnRlcnByZXRpbmcgaW5wdXQgT0lEcy4KLVRoaXMgYXNzdW1lcyB0aGF0IE9JRHMgYXJlIHJvb3RlZCBhdCB0aGUgJ21pYi0yJyBwb2ludCBpbiB0aGUgdHJlZQorVGhpcyBhc3N1bWVzIHRoYXQgT0lEcyBhcmUgcm9vdGVkIGF0IHRoZSAnbWliXC0yJyBwb2ludCBpbiB0aGUgdHJlZQogKHVubGVzcyB0aGV5IHN0YXJ0IHdpdGggYW4gZXhwbGljaXQgJy4nIG9yIGluY2x1ZGUgYSBNSUIgbW9kdWxlIG5hbWUpLgogU28gdGhlIFxmQ3N5c0Rlc2NyXGZSIGluc3RhbmNlIGFib3ZlIHdvdWxkIGJlIHJlZmVyZW5jZWQgYXMKIFxmQ3N5c3RlbS5zeXNEZXNjci4wXGZSLiAKQEAgLTc2NiwyOCArODc0LDI4IEBACiBPYmplY3QgbmFtZXMgc3BlY2lmaWVkIHdpdGggYSBsZWFkaW5nICcuJyBhcmUgYWx3YXlzIGludGVycHJldGVkIGFzCiAiZnVsbHkgcXVhbGlmaWVkIiBPSURzLCBsaXN0aW5nIHRoZSBzZXF1ZW5jZSBvZiBNSUIgb2JqZWN0cyBmcm9tIHRoZQogcm9vdCBvZiB0aGUgTUlCIHRyZWUuICBTdWNoIG9iamVjdHMgYW5kIHRob3NlIHF1YWxpZmllZCBieSBhbiBleHBsaWNpdAotTUlCIG1vZHVsZSBuYW1lIGFyZSB1bmFmZmVjdGVkIGJ5IHRoZSBcZkItSWJcZlIsIFxmQi1JUlxmUiBhbmQgXGZCLUl1XGZSIGZsYWdzLgorTUlCIG1vZHVsZSBuYW1lIGFyZSB1bmFmZmVjdGVkIGJ5IHRoZSBcZkJcLUliXGZSLCBcZkJcLUlSXGZSIGFuZCBcZkJcLUl1XGZSIGZsYWdzLgogCiBPdGhlcndpc2UsIGlmIG5vbmUgb2YgdGhlIGFib3ZlIGlucHV0IG9wdGlvbnMgYXJlIHNwZWNpZmllZCwgdGhlCiBkZWZhdWx0IGJlaGF2aW91ciBmb3IgYSAicmVsYXRpdmUiIE9JRCBpcyB0byB0cnkgYW5kIGludGVycHJldCBpdAogYXMgYW4gKGltcGxpY2l0bHkpIGZ1bGx5IHF1YWxpZmllZCBPSUQsCi10aGVuIGFwcGx5ICJyYW5kb20gYWNjZXNzIiBsb29rdXAgKFxmQi1JUlxmUiksCi1mb2xsb3dlZCBieSAiYmVzdCBtYXRjaCIgcGF0dGVybiBtYXRjaGluZyAoXGZCLUliXGZSKS4KK3RoZW4gYXBwbHkgInJhbmRvbSBhY2Nlc3MiIGxvb2t1cCAoXGZCXC1JUlxmUiksCitmb2xsb3dlZCBieSAiYmVzdCBtYXRjaCIgcGF0dGVybiBtYXRjaGluZyAoXGZCXC1JYlxmUikuCiAKIC5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgogLklQIFBSRUZJWAogVGhlIHN0YW5kYXJkIHByZWZpeCBmb3Igb2JqZWN0IGlkZW50aWZpZXJzICh3aGVuIHVzaW5nIFVDRC1zdHlsZSBvdXRwdXQpLgotRGVmYXVsdHMgdG8gLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIKK0RlZmF1bHRzIHRvIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMgogLklQIE1JQlMKIFRoZSBsaXN0IG9mIE1JQnMgdG8gbG9hZC4gRGVmYXVsdHMgdG8KLVNOTVB2Mi1UQzpTTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCOlNOTVAtVkFDTS1NSUIuCitTTk1QdjJcLVRDOlNOTVB2MlwtTUlCOklGXC1NSUI6SVBcLU1JQjpUQ1BcLU1JQjpVRFBcLU1JQjpTTk1QXC1WQUNNXC1NSUIuCiBPdmVycmlkZGVuIGJ5IHRoZQotLkIgLW0KKy5CIFwtbQogb3B0aW9uLgogLklQIE1JQkRJUlMKIFRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCcy4gRGVmYXVsdHMgdG8gREFUQURJUi9zbm1wL21pYnMuCiBPdmVycmlkZGVuIGJ5IHRoZQotLkIgLU0KKy5CIFwtTQogb3B0aW9uLgogCiAuU0ggRklMRVMKZGlmZiAtLWdpdCBhL21hbi9zbm1wY29uZi4xLmRlZiBiL21hbi9zbm1wY29uZi4xLmRlZgppbmRleCA4NDg4YWE1Li5jZDBjMTA0IDEwMDY0NAotLS0gYS9tYW4vc25tcGNvbmYuMS5kZWYKKysrIGIvbWFuL3NubXBjb25mLjEuZGVmCkBAIC02LDcgKzYsNyBAQAogW09QVElPTlNdIFtmaWxlVG9DcmVhdGVdCiAuSVAgIlN0YXJ0IHdpdGg6IgogLkIgc25tcGNvbmYKLS1nIGJhc2ljX3NldHVwCitcLWcgYmFzaWNfc2V0dXAKIC5JUCAiT3IgZXZlbiBqdXN0OiIKIC5CIHNubXBjb25mCiAuU0ggREVTQ1JJUFRJT04KQEAgLTI3LDM1ICsyNywzNSBAQAogY29tbWVudGVkLgogLlBQCiBBIHBhcnRpY3VsYXJseSB1c2VmdWwgb3B0aW9uIGlzIHRoZQotLkIgLWcKKy5CIFwtZwogc3dpdGNoLCB3aGljaCB3YWxrcyBhIHVzZXIgdGhyb3VnaCBhIHNwZWNpZmljIHNldCBvZiBjb25maWd1cmF0aW9uCiBxdWVzdGlvbnMuICBSdW46CiAuUlMKIC5QUAotc25tcGNvbmYgLWcgYmFzaWNfc2V0dXAKK3NubXBjb25mIFwtZyBiYXNpY19zZXR1cAogLlJFCiAuUFAKIGZvciBhbiBleGFtcGxlLgogLlNIICJPUFRJT05TIgogLlRQIDgKLS5CIC1mCisuQiBcLWYKIEZvcmNlIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aXRob3V0CiBwcm9tcHRpbmcgdGhlIHVzZXIgaWYgdGhpcyBpcyBhIGRlc2lyZWQgdGhpbmcgdG8gZG8uCiAuVFAgCi0uQiAtaQorLkIgXC1pCiBXaGVuIGZpbmlzaGVkLCBpbnN0YWxsIHRoZSBmaWxlcyBpbnRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZ2xvYmFsCiBzeXN0ZW0gY29tbWFuZHMgZXhwZWN0IHRvIGZpbmQgdGhlbS4KIC5UUAotLkIgLXAKKy5CIFwtcAogV2hlbiBmaW5pc2hlZCwgaW5zdGFsbCB0aGUgZmlsZXMgaW50byB0aGUgdXNlcnMgaG9tZSBkaXJlY3RvcnkncyAuc25tcAogc3ViZGlyZWN0b3J5ICh3aGVyZSB0aGUgYXBwbGljYXRpb25zIHdpbGwgYWxzbyBzZWFyY2ggZm9yCiBjb25maWd1cmF0aW9uIGZpbGVzKS4KIC5UUAotLkJJIC1JICIgRElSRUNUT1JZIgorLkJJIFwtSSAiIERJUkVDVE9SWSIKIFdoZW4gZmluaXNoZWQsIGluc3RhbGwgdGhlIGZpbGVzIGludG8gdGhlIGRpcmVjdG9yeSAKIC5JUiBESVJFQ1RPUlkgLgogLlRQCi0uQiAtYQorLkIgXC1hCiBEb24ndCBhc2sgYW55IHF1ZXN0aW9ucy4gIFNpbXBseSByZWFkIGluIHRoZSB2YXJpb3VzIGtub3duCiBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB3cml0ZSB0aGVtIGJhY2sgb3V0IGFnYWluLiAgVGhpcyBoYXMgdGhlCiBlZmZlY3Qgb2YgImF1dG8tY29tbWVudGluZyIgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHlvdS4gIFNlZQpAQCAtNjMsMTcgKzYzLDE3IEBACiAuQiBORUFUIFRSSUNLUwogc2VjdGlvbiBiZWxvdy4KIC5UUAotLkJJIC1yIGFsbHxub25lCisuQkkgXC1yIGFsbHxub25lCiBSZWFkIGluIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZm91bmQgY29uZmlndXJhdGlvbiBmaWxlcy4gIE5vcm1hbGx5CiAuQiBzbm1wY29uZgogcHJvbXB0cyB5b3UgZm9yIHdoaWNoIGZpbGVzIHlvdSB3aXNoIHRvIHJlYWQgaW4uICBSZWFkaW5nIGluCiB0aGVzZSBjb25maWd1cmF0aW9uIGZpbGVzIHdpbGwgbWVyZ2UgdGhlc2UgZmlsZXMgd2l0aCB0aGUgcmVzdWx0cyBvZgogdGhlIHF1ZXN0aW9ucyB0aGF0IGl0IGFza3Mgb2YgeW91LgogLlRQCi0uQkkgLVIgIiBGSUxFLC4uLiIKKy5CSSBcLVIgIiBGSUxFLC4uLiIKIFJlYWQgaW4gYSBzcGVjaWZpYyBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAuVFAKLS5CSSAtZyAiIEdST1VQTkFNRSIKKy5CSSBcLWcgIiBHUk9VUE5BTUUiCiBHcm91cHMgb2YgY29uZmlndXJhdGlvbiBlbnRyaWVzIGNhbiBiZSBjcmVhdGVkIHRoYXQgY2FuIGJlIHVzZWQgdG8KIHdhbGsgYSB1c2VyIHRocm91Z2ggYSBzZXJpZXMgb2YgcXVlc3Rpb25zIHRvIGNyZWF0ZSBhbiBpbml0aWFsCiBjb25maWd1cmF0aW9uIGZpbGUuICBUaGVyZSBhcmUgbm8gbWVudXMgdG8gbmF2aWdhdGUsIGp1c3QgYSBsaXN0IG9mCkBAIC04MSw0NCArODEsNDQgQEAKIC5SUwogLlJTCiAuUFAKLXNubXBjb25mIC1nIGJhc2ljX3NldHVwCitzbm1wY29uZiBcLWcgYmFzaWNfc2V0dXAKIC5SRQogLlBQCiBmb3IgYSBnb29kIGV4YW1wbGUuCiAuUkUKIC5UUAotLkIgLUcKKy5CIFwtRwogTGlzdCBhbGwgdGhlIGtub3duIGdyb3Vwcy4KIC5UUAotLkJJIC1jICIgQ09ORklHRElSIgorLkJJIFwtYyAiIENPTkZJR0RJUiIKIC5CIHNubXBjb25mCiB1c2VzIGEgZGlyZWN0b3J5IG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdG8gbGVhcm4gYWJvdXQKIHRoZSBmaWxlcyBhbmQgcXVlc3Rpb25zIHRoYXQgaXQgc2hvdWxkIGJlIGFza2luZy4gIFRoaXMgb3B0aW9uIHRlbGxzCiAuQiBzbm1wY29uZgogdG8gdXNlIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciBjb25maWd1cmluZyBpdHNlbGYuCiAuVFAKLS5CIC1xCisuQiBcLXEKIFJ1biBzbGlnaHRseSBtb3JlIHF1aWV0bHkuICBTaW5jZSB0aGlzIGlzIGFuIGludGVyYWN0aXZlIHByb2dyYW0sIEkKIGRvbid0IHJlY29tbWVuZCB0aGlzIG9wdGlvbiBzaW5jZSBpdCBvbmx5IHJlbW92ZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUKIG91dHB1dCB0aGF0IGlzIGRlc2lnbmVkIHRvIGhlbHAgeW91LgogLlRQCi0uQiAtZAorLkIgXC1kCiBUdXJuIG9uIAogLkIgbG90cwogb2YgZGVidWdnaW5nIG91dHB1dC4KIC5UUAotLkIgLUQKKy5CIFwtRAogQWRkIAogLkIgZXZlbiBtb3JlCiBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBmb3JtIG9mIFBlcmwgdmFyaWFibGUgZHVtcHMuCiAuSVAKIC5TSCAiTkVBVCBUUklDS1MiCi0uSVAgInNubXBjb25mIC1nIGJhc2ljX3NldHVwIgorLklQICJzbm1wY29uZiBcLWcgYmFzaWNfc2V0dXAiCiBIYXZlIEkgbWVudGlvbmVkIHRoaXMgY29tbWFuZCBlbm91Z2ggeWV0PyAgSXQncyBkZXNpZ25lZCB0byB3YWxrCiBzb21lb25lIHRocm91Z2ggYW4gaW5pdGlhbCBzZXR1cCBmb3IgdGhlCiAuSSBzbm1wZCg4KQogZGFlbW9uLiAgUmVhbGx5LCB5b3Ugc2hvdWxkIHRyeSBpdC4KLS5JUCAic25tcGNvbmYgLVIgL3Vzci9sb2NhbC9zbm1wL3NubXBkLmNvbmYgLWEgLWYgc25tcGQuY29uZiIKKy5JUCAic25tcGNvbmYgXC1SIC91c3IvbG9jYWwvc25tcC9zbm1wZC5jb25mIFwtYSBcLWYgc25tcGQuY29uZiIKIEF1dG9tYXRpY2FsbHkgcmVhZHMgaW4gYW4gc25tcGQuY29uZiBmaWxlIChmb3IgZXhhbXBsZSkgYW5kIGFkZHMKIGNvbW1lbnRzIHRvIHRoZW0gZGVzY3JpYmluZyB3aGF0IGVhY2ggdG9rZW4gZG9lcy4gIFRyeSBpdC4gIEl0J3MgY29vbC4KIC5TSCAiTk9URVMiCmRpZmYgLS1naXQgYS9tYW4vc25tcGQuOC5kZWYgYi9tYW4vc25tcGQuOC5kZWYKaW5kZXggMmEyMDg2Zi4uZjE3MzM5NiAxMDA2NDQKLS0tIGEvbWFuL3NubXBkLjguZGVmCisrKyBiL21hbi9zbm1wZC44LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QRCA4ICIxMCBKYW4gMjAwNyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QRCA4ICIzMCBKdW4gMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wZCAtIGRhZW1vbiB0byByZXNwb25kIHRvIFNOTVAgcmVxdWVzdCBwYWNrZXRzLgogLlNIIFNZTk9QU0lTCkBAIC0xMiwxMyArMTIsMTMgQEAKIHJlcXVlc3RlZCBvcGVyYXRpb24ocykgYW5kIHJldHVybnMgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBzZW5kZXIuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CIC1hCisuQiBcLWEKIExvZyB0aGUgc291cmNlIGFkZHJlc3NlcyBvZiBpbmNvbWluZyByZXF1ZXN0cy4KIC5UUAotLkIgLUEKKy5CIFwtQQogQXBwZW5kIHRvIHRoZSBsb2cgZmlsZSByYXRoZXIgdGhhbiB0cnVuY2F0aW5nIGl0LgogLlRQCi0uQiAiLWMiIFxmSUZJTEUKKy5CICJcLWMiIFxmSUZJTEUKIFJlYWQgCiAuSSBGSUxFCiBhcyBhIGNvbmZpZ3VyYXRpb24gZmlsZQpAQCAtMjcsMjEgKzI3LDIxIEBACiBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGluIHRoZSBzbm1wX2NvbmZpZyBtYW4gcGFnZSB1bmRlcgogU1dJVENISU5HIENPTkZJR1VSQVRJT04gVFlQRVMgSU4gTUlELUZJTEUuCiAuVFAKLS5CIC1DCisuQiBcLUMKIERvIG5vdCByZWFkIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIGV4Y2VwdCB0aGUgb25lcyBvcHRpb25hbGx5IHNwZWNpZmllZCBieSB0aGUgCi0uQiAtYyAKKy5CIFwtYyAKIG9wdGlvbi4KIE5vdGUgdGhhdCB0aGlzIGJlaGF2aW91ciBhbHNvIGNvdmVycyB0aGUgcGVyc2lzdGVudCBjb25maWd1cmF0aW9uIGZpbGVzLgogVGhpcyBtYXkgcmVzdWx0IGluIGR5bmFtaWNhbGx5LWFzc2lnbmVkIHZhbHVlcyBiZWluZyByZXNldCBmb2xsb3dpbmcgYW4KIGFnZW50IHJlc3RhcnQsIHVubGVzcyB0aGUgcmVsZXZhbnQgcGVyc2lzdGVudCBjb25maWcgZmlsZXMgYXJlCiBleHBsaWNpdGx5IGxvYWRlZCB1c2luZyB0aGUKLS5CIC1jIAorLkIgXC1jIAogb3B0aW9uLgogLlRQCi0uQiAtZAorLkIgXC1kCiBEdW1wIChpbiBoZXhhZGVjaW1hbCkgdGhlIHNlbnQgYW5kIHJlY2VpdmVkIFNOTVAgcGFja2V0cy4KIC5UUAotLkIgLURcZklbVE9LRU5bLC4uLl1dCisuQiBcLURcZklbVE9LRU5bLC4uLl1dCiBUdXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbgogLklSICJUT0tFTiIgIihzKS4iCiBXaXRob3V0IGFueSB0b2tlbnMgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBwcmludGluZyBhbGwgdGhlIHRva2VucwpAQCAtNDksOTkgKzQ5LDk5IEBACiBZb3UgbWlnaHQgd2FudCB0byB0cnkKIC5JUiBBTEwKIGZvciBleHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQuICBOb3RlOiBZb3UgY2FuIG5vdCBwdXQgYSBzcGFjZSBiZXR3ZWVuCi10aGUgLUQgZmxhZyBhbmQgdGhlIGxpc3RlZCBUT0tFTnMuCit0aGUgXC1EIGZsYWcgYW5kIHRoZSBsaXN0ZWQgVE9LRU5zLgogLlRQCi0uQiAtZgorLkIgXC1mCiBEbyBub3QgZm9yaygpIGZyb20gdGhlIGNhbGxpbmcgc2hlbGwuCiAuVFAKLS5CIC1nIFxmSUdJRAorLkIgXC1nIFxmSUdJRAogQ2hhbmdlIHRvIHRoZSBudW1lcmljYWwgZ3JvdXAgSUQKIC5JIEdJRAogYWZ0ZXIgb3BlbmluZyBsaXN0ZW5pbmcgc29ja2V0cy4KIC5UUAotLkIgLWgsIC0taGVscAorLkIgXC1oLCBcLVwtaGVscAogRGlzcGxheSBhIGJyaWVmIHVzYWdlIG1lc3NhZ2UgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLUgKKy5CIFwtSAogRGlzcGxheSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZCBieSB0aGUKIGFnZW50IGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1JIFxmSVstXUlOSVRMSVNUCisuQiBcLUkgXGZJW1wtXUlOSVRMSVNUCiBTcGVjaWZpZXMgd2hpY2ggbW9kdWxlcyBzaG91bGQgKG9yIHNob3VsZCBub3QpIGJlIGluaXRpYWxpemVkCiB3aGVuIHRoZSBhZ2VudCBzdGFydHMgdXAuICBJZiB0aGUgY29tbWEtc2VwYXJhdGVkCiAuSSBJTklUTElTVAogaXMgcHJlY2VkZWQKLXdpdGggYSAnLScsIGl0IGlzIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBzaG91bGQgXGZJbm90XGZSIGJlIHN0YXJ0ZWQuCit3aXRoIGEgJ1wtJywgaXQgaXMgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHNob3VsZCBcZklub3RcZlIgYmUgc3RhcnRlZC4KIE90aGVyd2lzZSB0aGlzIGlzIHRoZSBsaXN0IG9mIHRoZSBcZklvbmx5XGZSIG1vZHVsZXMgdGhhdCBzaG91bGQgYmUgc3RhcnRlZC4KIAogVG8gZ2V0IGEgbGlzdCBvZiBjb21waWxlZCBtb2R1bGVzLCBydW4gdGhlIGFnZW50IHdpdGggdGhlIGFyZ3VtZW50cwotLkkgIi1EbWliX2luaXQgLUgiCisuSSAiXC1EbWliX2luaXQgXC1IIgogKGFzc3VtaW5nIGRlYnVnZ2luZyBzdXBwb3J0IGhhcyBiZWVuIGNvbXBpbGVkIGluKS4KIC5UUAotLkIgLUxbZWZvc10KKy5CIFwtTFtlZm9zXQogU3BlY2lmeSB3aGVyZSBsb2dnaW5nIG91dHB1dCBzaG91bGQgYmUgZGlyZWN0ZWQgKHN0YW5kYXJkIGVycm9yIG9yIG91dHB1dCwKIHRvIGEgZmlsZSBvciB2aWEgc3lzbG9nKS4gIFNlZSBMT0dHSU5HIE9QVElPTlMgaW4gc25tcGNtZCg1KSBmb3IgZGV0YWlscy4KIC5UUAotLkJSIC1tICIgXGZJTUlCTElTVCIKKy5CUiBcLW0gIiBcZklNSUJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgdG8gbG9hZCBmb3IgdGhpcwogYXBwbGljYXRpb24uICBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCUy4KIFNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogLlRQCi0uQlIgLU0gIiBcZklESVJMSVNUIgorLkJSIFwtTSAiIFxmSURJUkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQnMuCiBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCRElSUy4KIFNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogLlRQCi0uQiAtbiBcZklOQU1FCisuQiBcLW4gXGZJTkFNRQogU2V0IGFuIGFsdGVybmF0aXZlIGFwcGxpY2F0aW9uIG5hbWUgKHdoaWNoIHdpbGwgYWZmZWN0IHRoZQogY29uZmlndXJhdGlvbiBmaWxlcyBsb2FkZWQpLgogQnkgZGVmYXVsdCB0aGlzIHdpbGwgYmUgXGZJc25tcGRcZlIsIHJlZ2FyZGxlc3Mgb2YgdGhlIG5hbWUKIG9mIHRoZSBhY3R1YWwgYmluYXJ5LgogLlRQCi0uQiAtcCBcZklGSUxFCisuQiBcLXAgXGZJRklMRQogU2F2ZSB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgZGFlbW9uIGluCiAuSVIgRklMRSAiLiIKIC5UUCAKLS5CIC1xCisuQiBcLXEKIFByaW50IHNpbXBsZXIgb3V0cHV0IGZvciBlYXNpZXIgYXV0b21hdGVkIHBhcnNpbmcuCiAuVFAKLS5CIC1yCisuQiBcLXIKIERvIG5vdCByZXF1aXJlIHJvb3QgYWNjZXNzIHRvIHJ1biB0aGUgZGFlbW9uLiAgU3BlY2lmaWNhbGx5LCBkbyBub3QgZXhpdAogaWYgZmlsZXMgb25seSBhY2Nlc3NpYmxlIHRvIHJvb3QgKHN1Y2ggYXMgL2Rldi9rbWVtIGV0Yy4pIGNhbm5vdCBiZQogb3BlbmVkLgogLlRQCi0uQiAtdSBcZklVSUQKKy5CIFwtdSBcZklVSUQKIENoYW5nZSB0byB0aGUgdXNlciBJRAogLkkgVUlECiAod2hpY2ggY2FuIGJlIGdpdmVuIGluIG51bWVyaWNhbCBvciB0ZXh0dWFsIGZvcm0pIGFmdGVyIG9wZW5pbmcKIGxpc3RlbmluZyBzb2NrZXRzLgogLlRQCi0uQiAtVQorLkIgXC1VCiBJbnN0cnVjdHMgdGhlIGFnZW50IHRvIG5vdCByZW1vdmUgaXRzIHBpZCBmaWxlIChzZWUgdGhlCi0uQiAtcAorLkIgXC1wCiBvcHRpb24pIG9uIHNodXRkb3duLiBPdmVycmlkZXMgdGhlIGxlYXZlX3BpZGZpbGUgdG9rZW4gaW4gdGhlCiAuSSBzbm1wZC5jb25mCiBmaWxlLCBzZWUKIC5JIHNubXBkLmNvbmYoNSkuCiAuVFAKLS5CIC12LCAtLXZlcnNpb24KKy5CIFwtdiwgXC1cLXZlcnNpb24KIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBhZ2VudCBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtVgorLkIgXC1WCiBTeW1ib2xpY2FsbHkgZHVtcCBTTk1QIHRyYW5zYWN0aW9ucy4KIC5UUAotLkIgLXggXGZJQUREUkVTUworLkIgXC14IFxmSUFERFJFU1MKIExpc3RlbnMgZm9yIEFnZW50WCBjb25uZWN0aW9ucyBvbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IEFHRU5UWF9TT0NLRVQuCiBUaGUgYWRkcmVzcyBjYW4gZWl0aGVyIGJlIGEgVW5peCBkb21haW4gc29ja2V0IHBhdGgsCiBvciB0aGUgYWRkcmVzcyBvZiBhIG5ldHdvcmsgaW50ZXJmYWNlLiAgVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUKIGZvcm1hdCBvZiBsaXN0ZW5pbmcgYWRkcmVzc2VzIGRlc2NyaWJlZCBiZWxvdy4KIC5UUAotLkIgLVgKKy5CIFwtWAogUnVuIGFzIGFuIEFnZW50WCBzdWJhZ2VudCByYXRoZXIgdGhhbiBhcyBhbiBTTk1QIG1hc3RlciBhZ2VudC4KIC5UUAotLkJJIC0tICJuYW1lIj0idmFsdWUiCi1BbGxvd3MgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQorLkJJIFwtXC0gIm5hbWUiPSJ2YWx1ZSIKK0FsbG93cyBvbmUgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQogLkkgc25tcGQuY29uZgogZmlsZSBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gInZhbHVlIi4gT3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIHRva2VuIGluIHRoZQogLkkgc25tcGQuY29uZgpAQCAtMTkzLDYgKzE5MywxMiBAQAogaG9zdG5hbWVbOnBvcnRdCiAuSSBvcgogSVB2Ni1hZGRyZXNzWzpwb3J0XQorLlRQIDI4CisuSVIgIiIgInNzaCIKK2hvc3RuYW1lOnBvcnQKKy5UUCAyOAorLklSICIiICJkdGxzdWRwIgoraG9zdG5hbWU6cG9ydAogLlJFCiAuUFAKIE5vdGUgdGhhdCA8dHJhbnNwb3J0LXNwZWNpZmllcj4gc3RyaW5ncyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBzbyB0aGF0LApAQCAtMjEyLDEwICsyMTgsMTAgQEAKIC5JUiAiaXB4Oi80MDAwMCIKIGxpc3RlbiBvbiBJUFggcG9ydCA0MDAwMCBvbiBhbGwgSVBYIGludGVyZmFjZXMuCiAuVFAgMjQKLS5JUiAidW5peDovdG1wL2xvY2FsLWFnZW50IgotbGlzdGVuIG9uIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgXGZJL3RtcC9sb2NhbC1hZ2VudFxmUi4KKy5JUiAidW5peDovdG1wL2xvY2FsXC1hZ2VudCIKK2xpc3RlbiBvbiB0aGUgVW5peCBkb21haW4gc29ja2V0IFxmSS90bXAvbG9jYWxcLWFnZW50XGZSLgogLlRQIDI0Ci0uSVIgIi90bXAvbG9jYWwtYWdlbnQiCisuSVIgIi90bXAvbG9jYWxcLWFnZW50IgogaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9uLCBzaW5jZSB0aGUgVW5peCBkb21haW4gaXMKIGFzc3VtZWQgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgPHRyYW5zcG9ydC1hZGRyZXNzPiBpcyAnLycuCiAuVFAgMjQKQEAgLTIyNSw2ICsyMzEsMTYgQEAKIC5UUCAyNAogLklSICJ1ZHA2OjEwMTYxIgogbGlzdGVuIG9uIHBvcnQgMTAxNjEgb24gYWxsIElQdjYgaW50ZXJmYWNlcy4KKy5UUCAyNAorLklSICJzc2g6MTI3LjAuMC4xOjIyIgorQWxsb3dzIGNvbm5lY3Rpb25zIGZyb20gdGhlIHNubXAgc3Vic3lzdGVtIG9uIHRoZSBzc2ggc2VydmVyIG9uIHBvcnQKKzIyLiAgVGhlIGRldGFpbHMgb2YgdXNpbmcgU05NUCBvdmVyIFNTSCBhcmUgZGVmaW5lZCBiZWxvdy4KKy5UUCAyNAorLklSICJkdGxzdWRwOjEyNy4wLjAuMTo5MTYxIgorTGlzdGVuIGZvciBjb25uZWN0aW9ucyBvdmVyIERUTFMgb24gVURQIHBvcnQgOTE2MS4gIFRoZSBzbm1wLmNvbmYgZmlsZQorbXVzdCBoYXZlIHRoZQorLklSIHNlcnZlckNlcnQsCitjb25maWd1cmF0aW9uIHRva2VucyBkZWZpbmVkLgogLlBQCiBOb3RlIHRoYXQgbm90IGFsbCB0aGUgdHJhbnNwb3J0IGRvbWFpbnMgbGlzdGVkIGFib3ZlIHdpbGwgYWx3YXlzIGJlCiBhdmFpbGFibGU7IGZvciBpbnN0YW5jZSwgaG9zdHMgd2l0aCBubyBJUHY2IHN1cHBvcnQgd2lsbCBub3QgYmUgYWJsZQpAQCAtMjMyLDYgKzI0OCw3MSBAQAogdGhlIGVycm9yICJFcnJvciBvcGVuaW5nIHNwZWNpZmllZCBlbmRwb2ludCIuICBMaWtld2lzZSwgc2luY2UgQUFMNQogUFZDIHN1cHBvcnQgaXMgb25seSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIExpbnV4LCBpdCB3aWxsIGZhaWwgd2l0aAogdGhlIHNhbWUgZXJyb3Igb24gb3RoZXIgcGxhdGZvcm1zLgorLlNIIFRyYW5zcG9ydCBTcGVjaWZpYyBOb3RlcworLlJTIDAKKy5UUCA4Citzc2gKK1RoZSBTU0ggdHJhbnNwb3J0LCBvbiB0aGUgc2VydmVyIHNpZGUsIGlzIGFjdHVhbGx5IGp1c3QgYSB1bml4CituYW1lZCBwaXBlIHRoYXQgY2FuIGJlIGNvbm5lY3RlZCB0byB2aWEgYSBzc2ggc3Vic3lzdGVtIGNvbmZpZ3VyZWQgaW4KK3RoZSBtYWluIHNzaCBzZXJ2ZXIuICBUaGUgcGlwZSBsb2NhdGlvbiAoY29uZmlndXJhYmxlIHdpdGggdGhlCitzc2h0b3NubXBzb2NrZXQgdG9rZW4gaW4gc25tcC5jb25mKSBpcworLkkgL3Zhci9uZXRcLXNubXAvc3NodG9zbm1wLgorUGFja2V0cyBzaG91bGQgYmUgc3VibWl0dGVkIHRvIGl0IHZpYSB0aGUgc3NodG9zbm1wIGFwcGxpY2F0aW9uLCB3aGljaAorYWxzbyBzZW5kcyB0aGUgdXNlciBJRCBhcyB3ZWxsIHdoZW4gc3RhcnRpbmcgdGhlIGNvbm5lY3Rpb24uICBUaGUgVFNNCitzZWN1cml0eSBtb2RlbCBzaG91bGQgYmUgdXNlZCB3aGVuIHBhY2tldHMgc2hvdWxkIHByb2Nlc3MgaXQuCisuSVAKK1RoZQorLkkgc3NodG9zbm1wCitjb21tYW5kIGtub3dzIGhvdyB0byBjb25uZWN0IHRvIHRoaXMgcGlwZSBhbmQgdGFsayB0bworaXQuICBJdCBzaG91bGQgYmUgY29uZmlndXJlZCBpbiB0aGUKKy5JUiAiT3BlblNTSCBzc2hkIgorY29uZmlndXJhdGlvbiBmaWxlICh3aGljaCBpcyBub3JtYWxseQorLklSICIvZXRjL3NzaC9zc2hkX2NvbmZpZyIKK3VzaW5nIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBsaW5lOgorLlRQIDgKKy5JUAorU3Vic3lzdGVtIHNubXAgL3Vzci9sb2NhbC9iaW4vc3NodG9zbm1wCisuSVAKK1RoZQorLkkgc3NodG9zbm1wCitjb21tYW5kIHdpbGwgbmVlZCByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgCisuSSAvdmFyL25ldFwtc25tcC9zc2h0b3NubXAKK3BpcGUuICBBbHRob3VnaCBpdCBzaG91bGQgYmUgZmFpcmx5IHNhZmUgdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZQorYXZlcmFnZSB1c2VyIHNpbmNlIGl0IHN0aWxsIHJlcXVpcmVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFDTSBzZXR0aW5ncworYmVmb3JlIHRoZSB1c2VyIGNhbiBwZXJmb3JtIG9wZXJhdGlvbnMsIHBhcmFub2lkIGFkbWluaXN0cmF0b3JzIG1heQord2FudCB0byBtYWtlIHRoZSAvdmFyL25ldFwtc25tcCBkaXJlY3RvcnkgYWNjZXNzaWJsZSBvbmx5IGJ5IHVzZXJzIGluIGEKK3BhcnRpY3VsYXIgZ3JvdXAuICBVc2UgdGhlCisuSSBzc2h0b3NubXBzb2NrZXRwZXJtcworc25tcC5jb25mIGNvbmZpZ3VyZSBvcHRpb24gdG8gc2V0IHRoZSBwZXJtaXNzaW9ucywgb3duZXIgYW5kIGdyb3VwIG9mCit0aGUgY3JlYXRlZCBzb2NrZXQuCisuSVAKK0FjY2VzcyBjb250cm9sIGNhbiBiZSBncmFudGVkIHRvIHRoZSB1c2VyICJmb28iIHVzaW5nIHRoZSBmb2xsb3dpbmcKK3N0eWxlIG9mIHNpbXBsZSBzbm1wZC5jb25mIHNldHRpbmdzOgorLlRQIDgKKy5JUAorcm91c2VyIFwtcyB0c20gZm9vIGF1dGhwcml2CisuSVAKK05vdGUgdGhhdCAiYXV0aHByaXYiIGlzIGFjY2VwdGFibGUgYXNzdW1pbmcgYXMgU1NIIHByb3RlY3RzIGV2ZXJ5dGhpbmcKK3RoYXQgd2F5IChhc3N1bWluZyB5b3UgaGF2ZSBhIG5vbi1pbnNhbmUgc2V0dXApLgorc25tcGQgaGFzIG5vIG5vdGlvbiBvZiBob3cgU1NIIGhhcyBhY3R1YWxseSBwcm90ZWN0ZWQgYSBwYWNrZXQgYW5kCit0aHVzIHRoZSBzbm1wIGFnZW50IGFzc3VtZXMgYWxsIHBhY2tldHMgcGFzc2VkIHRocm91Z2ggdGhlIFNTSAordHJhbnNwb3J0IGhhdmUgYmVlbiBwcm90ZWN0ZWQgYXQgdGhlIGF1dGhwcml2IGxldmVsLgorLlRQIDgKK2R0bHN1ZHAKK1RoZSBEVExTIHByb3RvY29sLCB3aGljaCBpcyBiYXNlZCBvZmYgb2YgVExTLCByZXF1aXJlcyBib3RoIGNsaWVudCBhbmQKK3NlcnZlciBjZXJ0aWZpY2F0ZXMgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIGFuZCBhdXRoZW50aWNhdGUgYm90aAorc2lkZXMuICBJbiBvcmRlciB0byBkbyB0aGlzLCB0aGUgY2xpZW50IHdpbGwgbmVlZCB0byBjb25maWd1cmUgdGhlCitzbm1wLmNvbmYgZmlsZQord2l0aCB0aGUKKy5JUiBjbGllbnRDZXJ0Citjb25maWd1cmF0aW9uIHRva2Vucy4gIFRoZSBzZXJ2ZXIgd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgc25tcC5jb25mCitmaWxlIHdpdGggdGhlCisuSVIgc2VydmVyQ2VydAorY29uZmlndXJhdGlvbiB0b2tlbnMgZGVmaW5lZC4KKy5JUAorQWNjZXNzIGNvbnRyb2wgc2V0dXAgaXMgc2ltaWxhciB0byB0aGUgc3NoIHRyYW5zcG9ydCBhcyB0aGUgVFNNCitzZWN1cml0eSBtb2RlbCBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBwYWNrZXQuCisuUkUKIC5TSCBDT05GSUdVUkFUSU9OIEZJTEVTCiAuUFAKIC5CIHNubXBkCmRpZmYgLS1naXQgYS9tYW4vc25tcGQuY29uZi41LmRlZiBiL21hbi9zbm1wZC5jb25mLjUuZGVmCmluZGV4IDFlN2NiMmMuLjJhOGEzZDMgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZC5jb25mLjUuZGVmCisrKyBiL21hbi9zbm1wZC5jb25mLjUuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVBELkNPTkYgNSAiMDEgSnVuIDIwMDkiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUEQuQ09ORiA1ICIzMCBKdW4gMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wZC5jb25mIC0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgTmV0LVNOTVAgU05NUCBhZ2VudAogLlNIIERFU0NSSVBUSU9OCkBAIC0xOCw3ICsxOCw3IEBACiBtYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgb3IgdHJ5IHJ1bm5pbmcgdGhlCiBjb21tYW5kOgogLlJTCi0uSVAgInNubXBjb25mIC1nIGJhc2ljX3NldHVwIgorLklQICJzbm1wY29uZiBcLWcgYmFzaWNfc2V0dXAiCiAuUkUKIC5QUAogVGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIGRpcmVjdGl2ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLApAQCAtNDAsNyArNDAsNyBAQAogQSBmdWxsIGxpc3Qgb2YgcmVjb2duaXNlZCBkaXJlY3RpdmVzIGNhbiBiZSBvYnRhaW5lZCBieSBydW5uaW5nCiB0aGUgY29tbWFuZDoKIC5SUwotLklQICJzbm1wZCAtSCIKKy5JUCAic25tcGQgXC1IIgogLlJFCiAuU0ggQUdFTlQgQkVIQVZJT1VSCiBBbHRob3VnaCBtb3N0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyBhcmUgY29uY2VybmVkIHdpdGggdGhlIE1JQgpAQCAtNjksMTEgKzY5LDExIEBACiBzdGFydGluZyB3aXRoICcjJyAoI1VJRCkuCiAuSVAgImxlYXZlX3BpZGZpbGUgeWVzIgogaW5zdHJ1Y3RzIHRoZSBhZ2VudCB0byBub3QgcmVtb3ZlIGl0cyBwaWQgZmlsZSBvbiBzaHV0ZG93bi4gRXF1aXZhbGVudCB0bwotc3BlY2lmeWluZyAiLVUiIG9uIHRoZSBjb21tYW5kIGxpbmUuCitzcGVjaWZ5aW5nICJcLVUiIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAuSVAgIm1heEdldGJ1bGtSZXBlYXRzIE5VTSIKIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyBhbGxvd2VkIGZvciBhIHNpbmdsZSB2YXJpYWJsZSBpbgotYSBnZXRidWxrIHJlcXVlc3QuICBTZXQgdG8gMCB0byBlbmFibGUgdGhlIGRlZmF1bHQgYW5kIHNldCBpdCB0byAtMSB0bwotZW5hYmxlIHVubGltaXRlZC4gIEJlY2F1c2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBhaGVhZCBvZiB0aW1lLCBzaXR0aW5nCithIGdldGJ1bGsgcmVxdWVzdC4gIFNldCB0byAwIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCBhbmQgc2V0IGl0IHRvIFwtMSB0bworZW5hYmxlIHVubGltaXRlZC4gIEJlY2F1c2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBhaGVhZCBvZiB0aW1lLCBzZXR0aW5nCiB0aGlzIHRvIHVubGltaXRlZCBpcyBub3QgY29uc2lkZXJlZCBzYWZlIGlmIHlvdXIgdXNlciBwb3B1bGF0aW9uIGNhbgogbm90IGJlIHRydXN0ZWQuICBBIHJlcGVhdCBudW1iZXIgZ3JlYXRlciB0aGFuIHRoaXMgd2lsbCBiZSB0cnVuY2F0ZWQKIHRvIHRoaXMgdmFsdWUuCkBAIC04Miw4ICs4Miw4IEBACiAuSVAgIm1heEdldGJ1bGtSZXNwb25zZXMgTlVNIgogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzcG9uc2VzIGFsbG93ZWQgZm9yIGEgZ2V0YnVsayByZXF1ZXN0LgogVGhpcyBpcyBzZXQgYnkgZGVmYXVsdCB0byAxMDAuICBTZXQgdG8gMCB0byBlbmFibGUgdGhlIGRlZmF1bHQgYW5kIHNldAotaXQgdG8gLTEgdG8gZW5hYmxlIHVubGltaXRlZC4gIEJlY2F1c2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBhaGVhZCBvZgotdGltZSwgc2l0dGluZyB0aGlzIHRvIHVubGltaXRlZCBpcyBub3QgY29uc2lkZXJlZCBzYWZlIGlmIHlvdXIgdXNlcgoraXQgdG8gXC0xIHRvIGVuYWJsZSB1bmxpbWl0ZWQuICBCZWNhdXNlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYWhlYWQgb2YKK3RpbWUsIHNldHRpbmcgdGhpcyB0byB1bmxpbWl0ZWQgaXMgbm90IGNvbnNpZGVyZWQgc2FmZSBpZiB5b3VyIHVzZXIKIHBvcHVsYXRpb24gY2FuIG5vdCBiZSB0cnVzdGVkLgogLklQCiBJbiBnZW5lcmFsLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlc3BvbnNlcyB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvCkBAIC05MiwxMyArOTIsNDIgQEAKIHRoZSBjYWxjdWxhdGVkIG51bWJlciBvZiByZXBlYXRzIGFsbG93IHRvIGZpdCBiZWxvdyB0aGlzIG51bWJlci4KIC5JUAogQWxzbyBub3QgdGhhdCBwcm9jZXNzaW5nIG9mIG1heEdldGJ1bGtSZXBlYXRzIGlzIGhhbmRsZWQgZmlyc3QuCi0uU1MgU05NUHYzIENvbmZpZ3VyYXRpb24KLVNOTVB2MyByZXF1aXJlcyBhbiBTTk1QIGFnZW50IHRvIGRlZmluZSBhIHVuaXF1ZSAiZW5naW5lIElEIgotaW4gb3JkZXIgdG8gcmVzcG9uZCB0byBTTk1QdjMgcmVxdWVzdHMuCi1UaGlzIElEIHdpbGwgbm9ybWFsbHkgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LCB1c2luZyB0d28gcmVhc29uYWJseQotbm9uLXByZWRpY3RhYmxlIHZhbHVlcyAtIGEgKHBzZXVkby0pcmFuZG9tIG51bWJlciBhbmQgdGhlIGN1cnJlbnQKLXVwdGltZSBpbiBzZWNvbmRzLiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaC4gSG93ZXZlciB0aGUKLWNhcGFjaXR5IGV4aXN0cyB0byBkZWZpbmUgdGhlIGVuZ2luZUlEIGluIG90aGVyIHdheXM6CisuU1MgU05NUHYzIENvbmZpZ3VyYXRpb24gLSBSZWFsIFNlY3VyaXR5CitTTk1QdjMgaXMgYWRkZWQgZmxleGlibGUgc2VjdXJpdHkgbW9kZWxzIHRvIHRoZSBTTk1QIHBhY2tldCBzdHJ1Y3R1cmUKK3NvIHRoYXQgbXVsdGlwbGUgc2VjdXJpdHkgc29sdXRpb25zIGNvdWxkIGJlIHVzZWQuICBTTk1QdjMgd2FzCitvcmlnaW5hbCBkZWZpbmVkIHdpdGggYSAiVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbCIgKFVTTSkgW1JGQzM0MTRdCit0aGF0IHJlcXVpcmVkIG1haW50YWluaW5nIGEgU05NUC1zcGVjaWZpYyB1c2VyIGRhdGFiYXNlLiAgVGhpcyB3YXMKK2xhdGVyIGRldGVybWluZWQgdG8gYmUgdHJvdWJsZXNvbWUgdG8gbWFpbnRhaW4gYW5kIGhhZCBzb21lIG1pbm9yCitzZWN1cml0eSBpc3N1ZXMuICBUaGUgSUVURiBoYXMgc2luY2UgYWRkZWQgYWRkaXRpb25hbCBzZWN1cml0eSBtb2RlbHMKK3RvIHR1bm5lbCBTTk1QIG92ZXIgU1NIIFtSRkM1NTkyXSBhbmQgRFRMUy9UTFMgW1JGQy10by1iZV0uICBOZXQtU05NUAorY29udGFpbnMgcm9idXN0IHN1cHBvcnQgZm9yIFNOTVB2My9VU00sIFNOTVB2My9UTFMsIGFuZCBTTk1QdjMvRFRMUy4KK0l0IGNvbnRhaW5zIHBhcnRpYWwgc3VwcG9ydCBmb3IgU05NUHYzL1NTSCBhcyB3ZWxsIGJ1dCBoYXMgbm90IGJlZW4gYXMKK2V4dGVuc2l2ZWx5IHRlc3RlZC4gIEl0IGFsc28gY29udGFpbnMgY29kZSBmb3Igc3VwcG9ydCBmb3IgYW4KK2V4cGVyaW1lbnRhbCBLZXJiZXJvcyBiYXNlZCBTTk1QdjMgdGhhdCBuZXZlciBnb3Qgc3RhbmRhcmRpemVkLgorLlBQCitIb3BlZnVsbHkgbW9yZSBTTk1QIHNvZnR3YXJlIGFuZCBkZXZpY2VzIHdpbGwgZXZlbnR1YWxseSBzdXBwb3J0IFNOTVAKK292ZXIgKEQpVExTIG9yIFNTSCwgYnV0IGl0IGlzIGxpa2VseSB0aGF0IGRldmljZXMgd2l0aCBvcmlnaW5hbAorc3VwcG9ydCBmb3IgU05NUCB3aWxsIG9ubHkgY29udGFpbiBzdXBwb3J0IGZvciBVU00gdXNlcnMuICBJZiB5b3VyCituZXR3b3JrIG1hbmFnZXIgc3VwcG9ydHMgU05NUCBvdmVyIChEKVRMUyBvciBTTk1QIG92ZXIgU1NIIHdlIHN1Z2dlc3QKK3lvdSB1c2Ugb25lIG9mIHRoZXNlIG1lY2hhbmlzbXMgaW5zdGVhZCBvZiB1c2luZyBVU00sIGJ1dCBhcyBhbHdheXMKK3dpdGggTmV0LVNOTVAgd2UgZ2l2ZSB5b3UgdGhlIG9wdGlvbnMgdG8gcGljayBmcm9tIHNvIHlvdSBjYW4gbWFrZSB0aGUKK2Nob2ljZSB0aGF0IGlzIGJlc3QgZm9yIHlvdS4KKy5TUyBTTk1QdjMgZ2VuZXJpYyBwYXJhbWV0ZXJzCitUaGVzZSBwYXJhbWV0ZXJzIGFyZSBnZW5lcmljIHRvIGFsbCB0aGUgZm9ybXMgb2YgU05NUHYzLiAgVGhlIFNOTVB2MworcHJvdG9jb2wgZGVmaW5lcyAiZW5naW5lSURzIiB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGFuIGFnZW50LiAgVGhlCitzdHJpbmcgbXVzdCBiZSBjb25zaXN0ZW50IHRocm91Z2ggdGltZSBhbmQgc2hvdWxkIG5vdCBjaGFuZ2Ugb3IKK2NvbmZsaWN0IHdpdGggYW5vdGhlciBhZ2VudCdzIGVuZ2luZUlELiAgRXZlci4gIEludGVybmFsbHksIE5ldC1TTk1QCitieSBkZWZhdWx0IGNyZWF0ZXMgYSB1bmlxdWUgZW5naW5lSUQgdGhhdCBpcyBiYXNlZCBvZmYgb2YgdGhlIGN1cnJlbnQgc3lzdGVtCit0aW1lIGFuZCBhIHJhbmRvbSBudW1iZXIuICBUaGlzIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBtb3N0IHVzZXJzCit1bmxlc3MgeW91J3JlIGVtYmVkZGluZyBvdXIgYWdlbnQgaW4gYSBkZXZpY2Ugd2hlcmUgdGhlc2UgbnVtYmVycword29uJ3QgdmFyeSBiZXR3ZWVuIGJveGVzIG9uIHRoZSBkZXZpY2VzIGluaXRpYWwgYm9vdC4KKy5JUAorRW5naW5lSURzIGFyZSB1c2VkIGJvdGggYXMgYSAiY29udGV4dCIgZm9yIHNlbGVjdGluZyBpbmZvcm1hdGlvbiBmcm9tCit0aGUgZGV2aWNlIGFuZCBTTk1QdjMgd2l0aCBVU00gdXNlcyBpdCB0byBjcmVhdGUgdW5pcXVlIGVudHJpZXMgZm9yCit1c2VycyBpbiBpdHMgdXNlciB0YWJsZS4KKy5JUAorVGhlIE5ldC1TTk1QIGFnZW50IG9mZmVycyB0aGUgZm9sbG93aW5nIG1lY2hhbmlzbXMgZm9yIHNldHRpbmcgdGhlCitlbmdpbmVJRCwgYnV0IGFnYWluIHlvdSBzaG91bGQgb25seSB1c2UgdGhlbSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZzoKIC5JUCAiZW5naW5lSUQgU1RSSU5HIgogc3BlY2lmaWVzIHRoYXQgdGhlIGVuZ2luZUlEIHNob3VsZCBiZSBidWlsdCBmcm9tIHRoZSBnaXZlbiB0ZXh0IFNUUklORy4KIC5JUCAiZW5naW5lSURUeXBlIDF8MnwzIgpAQCAtMTE0LDE0ICsxNDMsMTI2IEBACiAuXCIKIC5cIiBXaGF0IGlmIHRoaXMgZG9lc24ndCBleGlzdCA/CiAuXCIKLS5TSCBBQ0NFU1MgQ09OVFJPTAotLkIgc25tcGQKLXN1cHBvcnRzIHRoZSBWaWV3LUJhc2VkIEFjY2VzcyBDb250cm9sIE1vZGVsIChWQUNNKSBhcyBkZWZpbmVkIGluIFJGQwotMjU3NSwgdG8gY29udHJvbCB3aG8gY2FuIHJldHJpZXZlIG9yIHVwZGF0ZSBpbmZvcm1hdGlvbi4gIFRvIHRoaXMgZW5kLAotaXQgcmVjb2duaXplcyB2YXJpb3VzIGRpcmVjdGl2ZXMgcmVsYXRpbmcgdG8gYWNjZXNzIGNvbnRyb2wuCi1UaGVzZSBmYWxsIGludG8gZm91ciBiYXNpYyBncm91cHMuCi0uU1MgU05NUHYzIFVzZXJzCi0uSVAgImNyZWF0ZVVzZXIgWy1lIEVOR0lORUlEXSB1c2VybmFtZSAoTUQ1fFNIQSkgYXV0aHBhc3NwaHJhc2UgW0RFU3xBRVNdIFtwcml2cGFzc3BocmFzZV0iCisuU1MgU05NUHYzIG92ZXIgVExTCitTTk1QdjMgbWF5IGJlIHR1bm5lbGVkIG92ZXIgVExTIGFuZCBEVExTLiAgVExTIHJ1bnMgb3ZlciBUQ1AgYW5kIERUTFMKK2lzIHRoZSBVRFAgZXF1aXZhbGVudC4gIFdlcyBIYXJkYWtlciAodGhlIGZvdW5kZXIgb2YgTmV0LVNOTVApCitwZXJmb3JtZWQgYSBzdHVkeSBhbmQgcHJlc2VudGVkIGl0IGF0IGFuIElFVEYgbWVldGluZyB0aGF0IHNob3dlZCB0aGF0CitUQ1AgYmFzZWQgcHJvdG9jb2xzIGFyZSBzdWZmaWNpZW50IGZvciBzdGFibGUgbmV0d29ya3MgYnV0IHF1aWNrbHkKK2JlY29tZXMgYSBwcm9ibGVtIGluIHVuc3RhYmxlIG5ldHdvcmtzIHdpdGggZXZlbiBtb2RlcmF0ZSBsZXZlbHMgb2YKK3BhY2tldCBsb3NzICh+IDIwLTMwJSkuICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSBUTFMgb3IgRFRMUywgeW91CitzaG91bGQgdXNlIHRoZSBvbmUgYXBwcm9wcmlhdGUgZm9yIHlvdXIgbmV0d29ya2luZyBlbnZpcm9ubWVudC4gIFlvdQorc2hvdWxkIHBvdGVudGlhbGx5IHR1cm4gdGhlbSBib3RoIG9uIHNvIHlvdXIgbWFuYWdlbWVudCBzeXN0ZW0gY2FuCithY2Nlc3MgZWl0aGVyIHRoZSBVRFAgb3IgdGhlIFRDUCBwb3J0IGFzIG5lZWRlZC4KKy5QUAorTWFueSBvZiB0aGUgY29uZmlndXJhdGlvbiB0b2tlbnMgZGVzY3JpYmVkIGJlbG93IGFyZSBwcmVmaXhlZCB3aXRoCithICdbc25tcF0nIHRhZy4gIElmIHlvdSBwbGFjZSB0aGVzZSB0b2tlbnMgaW4geW91ciBzbm1wZC5jb25mIGZpbGUsCit0aGlzIHRha2UgaXMgcmVxdWlyZWQuICBTZWUgdGhlIHNubXBfY29uZmlnKDUpIG1hbnVhbCBwYWdlIGZvciB0aGUKK21lYW5pbmcgb2YgdGhpcyBjb250ZXh0IHN3aXRjaC4KKy5JUCAiW3NubXBdIGxvY2FsQ2VydCA8c3BlY2lmaWVyPiIKK1RoaXMgdG9rZW4gZGVmaW5lcyB0aGUgZGVmYXVsdCBYLjUwOSBwdWJsaWMga2V5IHRvIHVzZSBhcyB0aGUgc2VydmVyJ3MKK2lkZW50aXR5LiAgSXQgc2hvdWxkIGVpdGhlciBiZSBhIGZpbmdlcnByaW50IG9yIGEgZmlsZW5hbWUuICBUbyBjcmVhdGUKK2EgcHVibGljIGtleSBmb3IgdXNlLCBwbGVhc2UgcnVuIHRoZSAibmV0XC1zbm1wXC1jZXJ0IiB1dGlsaXR5IHdoaWNoCit3aWxsIGhlbHAgeW91IGNyZWF0ZSB0aGUgcmVxdWlyZWQgY2VydGlmaWNhdGUuCisuSVAKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGlzIHRoZSBjZXJ0aWZpY2F0ZSBpbiB0aGUgInNubXBkIiBuYW1lZAorY2VydGlmaWNhdGUgZmlsZS4KKy5JUCAiW3NubXBdIHRsc0FsZ29yaXRobXMgPGFsZ29yaXRobXM+IgorVGhpcyBzdHJpbmcgd2lsbCBzZWxlY3QgdGhlIGFsZ29yaXRobXMgdG8gdXNlIHdoZW4gbmVnb3RpYXRpbmcKK3NlY3VyaXR5IGR1cmluZyAoRClUTFMgc2Vzc2lvbiBlc3RhYmxpc2htZW50LiAgU2VlIHRoZSBvcGVuc3NsIG1hbnVhbAorcGFnZSBjaXBoZXJzKDEpIGZvciBkZXRhaWxzIG9uIHRoZSBmb3JtYXQuICBFeGFtcGxlcyBzdHJpbmdzIGluY2x1ZGU6CisuUlMKKy5uZgorCitERUZBVUxUCitBTEwKK0hJR0gKK0hJR0g6IUFFUzEyOFwtU0hBCisuZmkKKy5SRQorLklQCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyB3aGF0ZXZlciBvcGVuc3NsIGl0c2VsZiB3YXMgY29uZmlndXJlZCB3aXRoLgorLklQICJbc25tcF0geDUwOUNSTEZpbGUiCitJZiB5b3UgYXJlIHVzaW5nIGEgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IChDQSkgdGhhdCBwdWJsaXNoZXMgYQorQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBMaXN0IChDUkwpIHRoZW4gdGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0bworc3BlY2lmeSB0aGUgbG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0gb2YgYSBjb3B5IG9mIHRoZSBDUkwgZmlsZS4KK05vdGUgdGhhdCBOZXQtU05NUCB3aWxsIG5vdCBwdWxsIGEgQ1JMIG92ZXIgaHR0cCBhbmQgdGhpcyBtdXN0IGJlIGEKK2ZpbGUsIG5vdCBhIFVSTC4gIEFkZGl0aW9uYWxseSwgT3BlblNTTCBkb2VzIG5vdCByZWxvYWQgYSBDUkwgZmlsZQord2hlbiBpdCBoYXMgY2hhbmdlZCBzbyBtb2RpZmljYXRpb25zIG9yIHVwZGF0ZXMgdG8gdGhlIGZpbGUgd2lsbCBvbmx5CitiZSBub3RpY2VkIHVwb24gYSByZXN0YXJ0IG9mIHRoZSBzbm1wZCBhZ2VudC4KKworLklQICJjZXJ0U2VjTmFtZSBQUklPUklUWSBGSU5HRVJQUklOVCBPUFRJT05TIgorT1BUSU9OUyBjYW4gYmUgb25lIG9mIDxcLVwtc24gU0VDTkFNRSB8IFwtXC1yZmM4MjIgfCBcLVwtZG5zIHwgXC1cLWlwIHwgXC1cLWNuIHwgXC1cLWFueT4uCisuSVAKK1RoZSBjZXJ0U2VjTmFtZSB0b2tlbiB3aWxsIHNwZWNpZnkgaG93IHRvIG1hcCBhIGNlcnRpZmljYXRlIGZpZWxkIGZyb20KK3RoZSBjbGllbnQncyBYLjUwOSBjZXJ0aWZpY2F0ZSB0byBhIFNOTVB2MyB1c2VybmFtZS4gIFVzZSB0aGUgXC1cLXNuCitTRUNOQU1FIGZsYWcgdG8gZGlyZWN0bHkgc3BlY2lmeSBhIHNlY3VyaXR5TmFtZSBmb3IgYSBnaXZlbgorY2VydGlmaWNhdGUuICBUaGUgb3RoZXIgZmxhZ3MgZXh0cmFjdCBhIHBhcnRpY3VsYXIgY29tcG9uZW50IG9mIHRoZQorY2VydGlmaWNhdGUgZm9yIHVzZSBhcyBhIHNubXB2MyBzZWN1cml0eU5hbWUuICBUaGVzZSBmaWVsZHMgYXJlIG9uZQorb2Y6IEEgU3ViamVjdEFsdE5hbWUgY29udGFpbmluZyBhbiByZmM4MjIgdmFsdWUgKGVnIGhhcmRha2VyQG5ldFwtc25tcC5vcmcpLAorQSBTdWJqZWN0QWx0TmFtZSBjb250YWluaW5nIGEgZG5zIG5hbWUgdmFsdWUgKGVnIGZvby5uZXRcLXNubXAub3JnKSwKK2FuIElQIGFkZHJlc3MgKGVnIDE5Mi4wLjIuMSkgb3IgYSBjb21tb24gbmFtZSAiV2VzIEhhcmRha2VyIi4gIFRoZQorXC1cLWFueSBmbGFnIHNwZWNpZmllcyB0aGF0IGFueSBvZiB0aGUgc3ViamVjQWx0TmFtZSBmaWVsZHMgbWF5IGJlCit1c2VkLiAgTWFrZSBzdXJlIG9uY2UgYSBzZWN1cml0eU5hbWUgaGFzIGJlZW4gc2VsZWN0ZWQgdGhhdCBpdCBpcworZ2l2ZW4gYXV0aG9yaXphdGlvbiB2aWEgdGhlIFZBQ00gY29udHJvbHMgZGlzY3Vzc2VkIGxhdGVyIGluIHRoaXMKK21hbnVhbCBwYWdlLgorLklQCitTZWUgdGhlIGh0dHA6Ly93d3cubmV0XC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9Vc2luZ19EVExTIHdlYiBwYWdlIGZvcgorbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMgZm9yIHNldHRpbmcgdXAgKEQpVExTLgorLklQICJ0cnVzdENlcnQgPHNwZWNpZmllcj4iCitGb3IgWDUwOSB0byBwcm9wZXJseSB2ZXJpZnkgYSBjZXJ0aWZpY2F0ZSwgaXQgc2hvdWxkIGJlIHZlcmlmaWFibGUgdXAKK3VudGlsIGEgdHJ1c3QgYW5jaG9yIGZvciBpdC4gIFRoaXMgdHJ1c3QgYW5jaG9yIGlzIHR5cGljYWxseSBhIENBCitjZXJ0aWZpY2F0ZSBidXQgaXQgY291bGQgYWxzbyBiZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLiAgVGhlCisidHJ1c3RDZXJ0IiB0b2tlbiBzaG91bGQgYmUgdXNlZCB0byBsb2FkIHNwZWNpZmljIHRydXN0IGFuY2hvcnMgaW50byB0aGUKK3ZlcmlmaWNhdGlvbiBlbmdpbmUuCisuUFAKK1NOTVAgb3ZlciAoRClUTFMgcmVxdWlyZXMgdGhlIHVzZSBvZiB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsCisoVFNNKSwgc28gcmVhZCB0aGUgc2VjdGlvbiBvbiB0aGUgdXNhZ2Ugb2YgdGhlIFRyYW5zcG9ydCBTZWN1cml0eQorTW9kZWwgYXMgd2VsbC4gIE1ha2Ugc3VyZSB3aGVuIHlvdSBjb25maWd1cmUgdGhlIFZBQ00gdG8gYWNjZXB0Citjb25uZWN0aW9ucyBmcm9tIChEKVRMUyB0aGF0IHlvdSB1c2UgdGhlICJ0c20iIHNlY3VyaXR5IG1vZGVsLiAgRS5HLjoKKy5maQorCityd3VzZXIgXC1zIHRzbSBoYXJkYWtlckBuZXRcLXNubXAub3JnCisuZmkKKy5TUyBTTk1QdjMgb3ZlciBTU0ggU3VwcG9ydAorVG8gdXNlIFNTSCwgeW91J2xsIG5lZWQgdG8gY29uZmlndXJlIHNzaGQgdG8gaW52b2tlIHRoZSBzc2h0b3NubXAKK3Byb2dyYW0gYXMgd2VsbCBhcyBjb25maWd1cmUgdGhlIGFjY2VzcyBjb250cm9sIHNldHRpbmdzIHRvIGFsbG93CithY2Nlc3MgdGhyb3VnaCB0aGUgdHNtIHNlY3VyaXR5IG1vZGVsIHVzaW5nIHRoZSB1c2VyIG5hbWUgcHJvdmlkZWQgdG8KK3NubXBkIGJ5IHRoZSBzc2ggdHJhbnNwb3J0LgorLlNTIFNOTVB2MyB3aXRoIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgKFRTTSkKK1RoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgW1JGQzU1OTFdIGRlZmluZXMgYSBTTk1QdjMgc2VjdXJpdHkKK3N5c3RlbSBmb3IgdXNlIHdpdGggInR1bm5lbGVkIiBzZWN1cml0eSBwcm90b2NvbHMgbGlrZSBUTFMsIERUTFMgYW5kCitTU0guICBJdCBpcyBhIHZlcnkgc2ltcGxlIHNlY3VyaXR5IG1vZGVsIHRoYXQgc2ltcGx5IGxldHMgcHJvcGVybHkKK3Byb3RlY3RlZCBwYWNrZXRzIHRvIHBhc3MgdGhyb3VnaCBpbnRvIHRoZSBzbm1wIGFwcGxpY2F0aW9uLiAgVGhlCit0cmFuc3BvcnQgaXMgcmVxdWlyZWQgdG8gcGFzcyBhIHNlY3VyaXR5TmFtZSB0byB1c2UgdG8gdGhlIFRTTSBhbmQgdGhlCitUU00gbWF5IG9wdGlvbmFsbHkgcHJlZml4IHRoaXMgd2l0aCBhIHRyYW5zcG9ydCBzdHJpbmcgKHNlZSBiZWxvdykuCisuSVAgInRzbVVzZVRyYW5zcG9ydFByZWZpeCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKK0lmIHNldCB0byB0cnVlLCB0aGUgVFNNIG1vZHVsZSB3aWxsIHRha2UgZXZlcnkgc2VjdXJpdHlOYW1lIHBhc3NlZCB0bworaXQgZnJvbSB0aGUgdHJhbnNwb3J0cyB1bmRlcm5lYXRoIGFuZCBwcmVmaXggaXQgd2l0aCBhIHN0cmluZyB0aGF0CitzcGVjaWZpY2FsbHkgaWRlbnRpdGllcyB0aGUgdHJhbnNwb3J0IGl0IGNhbWUgZnJvbS4gIFRoaXMgaXMgdXNlZnVsIHRvCithdm9pZCBzZWN1cml0eU5hbWUgY2xhc2hlcyB3aXRoIHRyYW5zcG9ydHMgdGhhdCBnZW5lcmF0ZSBpZGVudGljYWwKK3NlY3VyaXR5IG5hbWVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzc2ggc2VjdXJpdHkgdHJhbnNwb3J0IGRlbGl2ZXJlZAordGhlIHNlY3VyaXR5IG5hbWUgb2YgImhhcmRha2VyIiBmb3IgYSBTU0ggY29ubmVjdGlvbiBhbmQgdGhlIFRMUworc2VjdXJpdHkgdHJhbnNwb3J0IGFsc28gZGVsaXZlcmVkIHRoZSBzZWN1cml0eSBuYW1lIG9mICJoYXJkYWtlciIgZm9yCithIFRMUyBjb25uZWN0aW9uIHRoZW4gaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byBzZXBhcmF0ZSBvdXQgdGhlc2UgdHdvCit1c2VycyB0byBwcm92aWRlIHNlcGFyYXRlIGFjY2VzcyBjb250cm9sIHJpZ2h0cy4gIFdpdGggdGhlCit0c21Vc2VUcmFuc3BvcnRQcmVmaXggc2V0IHRvIHRydWUsIGhvd2V2ZXIsIHRoZSBzZWN1cml0eU5hbWVzIHdvdWxkIGJlCitwcmVmaXhlZCBhcHByb3ByaWF0ZWx5IHdpdGggb25lIG9mOiAidGxzOiIsICJkdGxzOiIgb3IgInNzaDoiLgorLlNTIFNOTVB2MyB3aXRoIHRoZSBVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsIChVU00pCitTTk1QdjMgd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCB1c2luZyB0aGUgVXNlci1CYXNlZCBTZWN1cml0eSBNb2RlbAorKFVTTSksIHdoaWNoIGNvbnRhaW5zIGEgcHJpdmF0ZSBsaXN0IG9mIHVzZXJzIGFuZCBrZXlzIHNwZWNpZmljIHRvIHRoZQorU05NUHYzIHByb3RvY29sLiAgVGhlIG9wZXJhdGlvbmFsIGNvbW11bml0eSwgaG93ZXZlciwgZGVjbGFyZWQgaXQgYQorcGFpbiB0byBtYW5pcHVsYXRlIHlldCBhbm90aGVyIGRhdGFiYXNlIGFuZCB3b3VsZCBwcmVmZXIgdG8gdXNlCitleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gIFRvIHRoYXQgZW5kIHRoZSBJRVRGIGNyZWF0ZWQgdGhlIElTTVMKK3dvcmtpbmcgZ3JvdXAgdG8gYmF0dGxlIHRoYXQgcHJvYmxlbSwgYW5kIHRoZSBJU01TIHdvcmtpbmcgZ3JvdXAKK2RlY2lkZWQgdG8gdHVubmVsIFNOTVAgb3ZlciBTU0ggYW5kIERUTFMgdG8gbWFrZSB1c2UgZXhpc3RpbmcgdXNlciBhbmQKK2F1dGhlbnRpY2F0aW9uIGluZnJhc3RydWN0dXJlcy4KKy5TUyBTTk1QdjMgVVNNIFVzZXJzCitUbyB1c2UgdGhlIFVTTSBiYXNlZCBTTk1QdjMtc3BlY2lmaWMgdXNlcnMsIHlvdSdsbCBuZWVkIHRvIGNyZWF0ZQordGhlbS4gIEl0IGlzIHJlY29tbWVuZGVkIHlvdQorLkIgInVzZSB0aGUgbmV0XC1zbm1wXC1jb25maWcgY29tbWFuZCIKK3RvIGRvIHRoaXMsIGJ1dCB5b3UgY2FuIGFsc28gZG8gaXQgYnkgZGlyZWN0bHkgc3BlY2lmeWluZyBjcmVhdGVVc2VyCitkaXJlY3RpdmVzIHlvdXJzZWxmIGluc3RlYWQ6CisuSVAgImNyZWF0ZVVzZXIgW1wtZSBFTkdJTkVJRF0gdXNlcm5hbWUgKE1ENXxTSEEpIGF1dGhwYXNzcGhyYXNlIFtERVN8QUVTXSBbcHJpdnBhc3NwaHJhc2VdIgogLklQCiBNRDUgYW5kIFNIQSBhcmUgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGVzIHRvIHVzZS4gIERFUyBhbmQgQUVTIGFyZSB0aGUKIHByaXZhY3kgcHJvdG9jb2xzIHRvIHVzZS4gIElmIHRoZSBwcml2YWN5CkBAIC0xNDEsNyArMjgyLDcgQEAKIGNvbW1hbmQuCiAuSVAKIEluc3RlYWQgb2YgZmlndXJpbmcgb3V0IGhvdyB0byB1c2UgdGhpcyBkaXJlY3RpdmUgYW5kIHdoZXJlIHRvIHB1dCBpdAotKHNlZSBiZWxvdyksIGp1c3QgcnVuICJuZXQtc25tcC1jb25maWcgLS1jcmVhdGUtc25tcHYzLXVzZXIiIGluc3RlYWQsCisoc2VlIGJlbG93KSwganVzdCBydW4gIm5ldFwtc25tcFwtY29uZmlnIFwtXC1jcmVhdGVcLXNubXB2M1wtdXNlciIgaW5zdGVhZCwKIHdoaWNoIHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBsaW5lcyB0byB0aGUgcmlnaHQgcGxhY2UuCiAuSVAKIFRoaXMgZGlyZWN0aXZlIHNob3VsZCBiZSBwbGFjZWQgaW50byB0aGUKQEAgLTE1NCwxMiArMjk1LDEyIEBACiBpdCBjYW4gYmUuCiAuSVAKIElmIHlvdSBuZWVkIHRvIGxvY2FsaXplIHRoZSB1c2VyIHRvIGEgcGFydGljdWxhciBFbmdpbmVJRCAodGhpcyBpcwotdXNlZnVsIG1vc3RseSBpbiB0aGUgc2ltaWxhciBzbm1wdHJhcGQuY29uZiBmaWxlKSwgeW91IGNhbiB1c2UgdGhlIC1lCit1c2VmdWwgbW9zdGx5IGluIHRoZSBzaW1pbGFyIHNubXB0cmFwZC5jb25mIGZpbGUpLCB5b3UgY2FuIHVzZSB0aGUgXC1lCiBhcmd1bWVudCB0byBzcGVjaWZ5IGFuIEVuZ2luZUlEIGFzIGEgaGV4IHZhbHVlIChFRywgIjB4MDEwMjAzMDQiKS4KIC5JUAogSWYgeW91IHdhbnQgdG8gZ2VuZXJhdGUgZWl0aGVyIHlvdXIgbWFzdGVyIG9yIGxvY2FsaXplZCBrZXlzIGRpcmVjdGx5LAotcmVwbGFjZSB0aGUgZ2l2ZW4gcGFzc3dvcmQgd2l0aCBhIGhleHN0cmluZyAocHJlY2VlZGVkIGJ5IGEgIjB4IikgYW5kCi1wcmVjZWRlIHRoZSBoZXggc3RyaW5nIGJ5IGEgLW0gb3IgLWwgdG9rZW4gKHJlc3BlY3RpdmVseSkuICBFR3M6CityZXBsYWNlIHRoZSBnaXZlbiBwYXNzd29yZCB3aXRoIGEgaGV4c3RyaW5nIChwcmVjZWRlZCBieSBhICIweCIpIGFuZAorcHJlY2VkZSB0aGUgaGV4IHN0cmluZyBieSBhIFwtbSBvciBcLWwgdG9rZW4gKHJlc3BlY3RpdmVseSkuICBFR3M6CiAuSVAKIC5SUwogLm5mCkBAIC0xNjcsOCArMzA4LDggQEAKIGNvdW50aW5nIHB1cnBvc2VzLiAgUGxlYXNlIGdlbmVyYXRlIHJhbmRvbSBrZXlzIGluc3RlYWQgb2YgdXNpbmcKIHRoZXNlIGV4YW1wbGVzXQogCi1jcmVhdGVVc2VyIG15dXNlciBTSEEgLWwgMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5IEFFUyAtbCAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1Ci1jcmVhdGVVc2VyIG15dXNlciBTSEEgLW0gMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5IEFFUyAtbSAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkKK2NyZWF0ZVVzZXIgbXl1c2VyIFNIQSBcLWwgMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5IEFFUyBcLWwgMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNQorY3JlYXRlVXNlciBteXVzZXIgU0hBIFwtbSAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkgQUVTIFwtbSAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkKIC5maQogLlJFCiAuSVAKQEAgLTE3NywxMiArMzE4LDE3IEBACiBzdXBwb3J0ZWQgYWxnb3JpdGhtcykuICBNYXN0ZXIgZW5jcnlwdGlvbiBrZXlzLCB0aG91Z2gsIG5lZWQgdG8gYmUgdGhlCiBsZW5ndGggcmVxdWlyZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBub3QgdGhlIGxlbmd0aAogcmVxdWlyZWQgYnkgdGhlIGVuY3J5cHRpbmcgYWxnb3JpdGhtIChNRDU6IDE2IGJ5dGVzLCBTSEE6IDIwIGJ5dGVzKS4KKy5TSCBBQ0NFU1MgQ09OVFJPTAorLkIgc25tcGQKK3N1cHBvcnRzIHRoZSBWaWV3LUJhc2VkIEFjY2VzcyBDb250cm9sIE1vZGVsIChWQUNNKSBhcyBkZWZpbmVkIGluIFJGQworMjU3NSwgdG8gY29udHJvbCB3aG8gY2FuIHJldHJpZXZlIG9yIHVwZGF0ZSBpbmZvcm1hdGlvbi4gIFRvIHRoaXMgZW5kLAoraXQgcmVjb2duaXplcyB2YXJpb3VzIGRpcmVjdGl2ZXMgcmVsYXRpbmcgdG8gYWNjZXNzIGNvbnRyb2wuCiAuU1MgVHJhZGl0aW9uYWwgQWNjZXNzIENvbnRyb2wKIE1vc3Qgc2ltcGxlIGFjY2VzcyBjb250cm9sIHJlcXVpcmVtZW50cyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQogZGlyZWN0aXZlcyBcZklyb3VzZXJcZlIvXGZJcnd1c2VyXGZSIChmb3IgU05NUHYzKSBvcgogXGZJcm9jb21tdW5pdHlcZlIvXGZJcndjb21tdW5pdHlcZlIgKGZvciBTTk1QdjEgb3IgU05NUHYyYykuCi0uSVAgInJvdXNlciBVU0VSIFtub2F1dGh8YXV0aHxwcml2IFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgotLklQICJyd3VzZXIgVVNFUiBbbm9hdXRofGF1dGh8cHJpdiBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAicm91c2VyIFtcLXMgU0VDTU9ERUxdIFVTRVIgW25vYXV0aHxhdXRofHByaXYgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJyd3VzZXIgW1wtcyBTRUNNT0RFTF0gIFVTRVIgW25vYXV0aHxhdXRofHByaXYgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogc3BlY2lmeSBhbiBTTk1QdjMgdXNlciB0aGF0IHdpbGwgYmUgYWxsb3dlZCByZWFkLW9ubHkgKEdFVCBhbmQgR0VUTkVYVCkKIG9yIHJlYWQtd3JpdGUgKEdFVCwgR0VUTkVYVCBhbmQgU0VUKSBhY2Nlc3MgcmVzcGVjdGl2ZWx5LgogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBmdWxsIE9JRCB0cmVlIGZvciBhdXRoZW50aWNhdGVkCkBAIC0xOTQsOCArMzQwLDE1IEBACiBBbiBvcHRpb25hbCBjb250ZXh0IGNhbiBhbHNvIGJlIHNwZWNpZmllZCwgb3IgImNvbnRleHQqIiB0byBkZW5vdGUgYSBjb250ZXh0CiBwcmVmaXguICBJZiBubyBjb250ZXh0IGZpZWxkIGlzIHNwZWNpZmllZCAob3IgdGhlIHRva2VuICIqIiBpcyB1c2VkKSwgdGhlCiBkaXJlY3RpdmUgd2lsbCBtYXRjaCBhbGwgcG9zc2libGUgY29udGV4dHMuCi0uSVAgInJvY29tbXVuaXR5IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgotLklQICJyd2NvbW11bml0eSBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUAorSWYgU0VDTU9ERUwgaXMgc3BlY2lmaWVkIHRoZW4gaXQgd2lsbCBiZSB0aGUgc2VjdXJpdHkgbW9kZWwgcmVxdWlyZWQKK2ZvciB0aGF0IHVzZXIgKG5vdGUgdGhhdCBpZGVudGljYWwgdXNlciBuYW1lcyBtYXkgY29tZSBpbiBvdmVyCitkaWZmZXJlbnQgc2VjdXJpdHkgbW9kZWxzIGFuZCB3aWxsIGJlIGFwcHJvcHJpYXRlbHkgc2VwYXJhdGVkIHZpYSB0aGUKK2FjY2VzcyBjb250cm9sIHNldHRpbmdzKS4gIFRoZSBkZWZhdWx0IHNlY3VyaXR5IG1vZGVsIGlzICJ1c20iIGFuZCB0aGUKK290aGVyIGNvbW1vbiBzZWN1cml0eSBtb2RlbHMgYXJlIGxpa2VseSAidHNtIiB3aGVuIHVzaW5nIChEKVRMUyBvciBTU0gKK3N1cHBvcnQgYW5kICJrc20iIGlmIHRoZSBLZXJiZXJvcyBzdXBwb3J0IGhhcyBiZWVuIGNvbXBpbGVkIGluLgorLklQICJyb2NvbW11bml0eSBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgInJ3Y29tbXVuaXR5IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIHNwZWNpZnkgYW4gU05NUHYxIG9yIFNOTVB2MmMgY29tbXVuaXR5IHRoYXQgd2lsbCBiZSBhbGxvd2VkIHJlYWQtb25seQogKEdFVCBhbmQgR0VUTkVYVCkgb3IgcmVhZC13cml0ZSAoR0VULCBHRVRORVhUIGFuZCBTRVQpIGFjY2VzcyByZXNwZWN0aXZlbHkuCiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgT0lEIHRyZWUgZm9yIHN1Y2ggcmVxdWVzdHMsCkBAIC0yMDUsOCArMzU4LDggQEAKIHRoYXQgY29tbXVuaXR5IHRvIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB0aGUgZ2l2ZW4gT0lELCBvciBuYW1lZCB2aWV3LgogQ29udGV4dHMgYXJlIHR5cGljYWxseSBsZXNzIHJlbGV2YW50IHRvIGNvbW11bml0eS1iYXNlZCBTTk1QIHZlcnNpb25zLAogYnV0IHRoZSBzYW1lIGJlaGF2aW91ciBhcHBsaWVzIGhlcmUuCi0uSVAgInJvY29tbXVuaXR5NiBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKLS5JUCAicndjb21tdW5pdHk2IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJyb2NvbW11bml0eTYgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJyd2NvbW11bml0eTYgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogYXJlIGRpcmVjdGl2ZXMgcmVsYXRpbmcgdG8gcmVxdWVzdHMgcmVjZWl2ZWQgdXNpbmcgSVB2NgogKGlmIHRoZSBhZ2VudCBzdXBwb3J0cyBzdWNoIHRyYW5zcG9ydCBkb21haW5zKS4KIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgU09VUkNFLCBPSUQsIFZJRVcgYW5kIENPTlRFWFQgdG9rZW5zIGFyZSBleGFjdGx5CkBAIC0yMjgsMTAgKzM4MSwxMCBAQAogY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLgogLlNTIFZBQ00gQ29uZmlndXJhdGlvbgogVGhlIGZ1bGwgZmxleGliaWxpdHkgb2YgdGhlIFZBQ00gaXMgYXZhaWxhYmxlIHVzaW5nIGZvdXIgY29uZmlndXJhdGlvbgotZGlyZWN0aXZlcyAtIFxmSWNvbTJzZWNcZlIsIFxmSWdyb3VwXGZSLCBcZkl2aWV3XGZSIGFuZCBcZklhY2Nlc3NcZlIuCitkaXJlY3RpdmVzIFwtIFxmSWNvbTJzZWNcZlIsIFxmSWdyb3VwXGZSLCBcZkl2aWV3XGZSIGFuZCBcZklhY2Nlc3NcZlIuCiBUaGVzZSBwcm92aWRlIGRpcmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIFZBQ00gdGFibGVzLgotLklQICJjb20yc2VjICBbLUNuIENPTlRFWFRdIFNFQ05BTUUgU09VUkNFIENPTU1VTklUWSIKLS5JUCAiY29tMnNlYzYgWy1DbiBDT05URVhUXSBTRUNOQU1FIFNPVVJDRSBDT01NVU5JVFkiCisuSVAgImNvbTJzZWMgIFtcLUNuIENPTlRFWFRdIFNFQ05BTUUgU09VUkNFIENPTU1VTklUWSIKKy5JUCAiY29tMnNlYzYgW1wtQ24gQ09OVEVYVF0gU0VDTkFNRSBTT1VSQ0UgQ09NTVVOSVRZIgogbWFwIGFuIFNOTVB2MSBvciBTTk1QdjJjIGNvbW11bml0eSBzdHJpbmcgdG8gYSBzZWN1cml0eSBuYW1lIC0gZWl0aGVyIGZyb20KIGEgcGFydGljdWxhciByYW5nZSBvZiBzb3VyY2UgYWRkcmVzc2VzLCBvciBnbG9iYWxseSAoXGZJImRlZmF1bHQiXGZSKS4KIEEgcmVzdHJpY3RlZCBzb3VyY2UgY2FuIGVpdGhlciBiZSBhIHNwZWNpZmljIGhvc3RuYW1lIChvciBhZGRyZXNzKSwgb3IKQEAgLTI0MywxMiArMzk2LDEyIEBACiBjb21iaW5hdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGluY29taW5nIHJlcXVlc3Qgd2lsbCBiZSBzZWxlY3RlZC4KIFZhcmlvdXMgc291cmNlL2NvbW11bml0eSBjb21iaW5hdGlvbnMgY2FuIGFsc28gbWFwIHRvIHRoZSBzYW1lIHNlY3VyaXR5IG5hbWUuCiAuSVAKLUlmIGEgQ09OVEVYVCBpcyBzcGVjaWZpZWQgKHVzaW5nIFxmSS1DblxmUiksIHRoZSBjb21tdW5pdHkgc3RyaW5nIHdpbGwgYmUKK0lmIGEgQ09OVEVYVCBpcyBzcGVjaWZpZWQgKHVzaW5nIFxmSVwtQ25cZlIpLCB0aGUgY29tbXVuaXR5IHN0cmluZyB3aWxsIGJlCiBtYXBwZWQgdG8gYSBzZWN1cml0eSBuYW1lIGluIHRoZSBuYW1lZCBTTk1QdjMgY29udGV4dC4gT3RoZXJ3aXNlIHRoZQogZGVmYXVsdCBjb250ZXh0ICgiIikgd2lsbCBiZSB1c2VkLgotLklQICJjb20yc2VjdW5peCBbLUNuIENPTlRFWFRdIFNFQ05BTUUgU09DS1BBVEggQ09NTVVOSVRZIgorLklQICJjb20yc2VjdW5peCBbXC1DbiBDT05URVhUXSBTRUNOQU1FIFNPQ0tQQVRIIENPTU1VTklUWSIKIGlzIHRoZSBVbml4IGRvbWFpbiBzb2NrZXRzIHZlcnNpb24gb2YgXGZJY29tMnNlY1xmUi4KLS5JUCAiZ3JvdXAgR1JPVVAge3YxfHYyY3x1c219IFNFQ05BTUUiCisuSVAgImdyb3VwIEdST1VQIHt2MXx2MmN8dXNtfHRzbXxrc219IFNFQ05BTUUiCiBtYXBzIGEgc2VjdXJpdHkgbmFtZSAoaW4gdGhlIHNwZWNpZmllZCBzZWN1cml0eSBtb2RlbCkgaW50bwogYSBuYW1lZCBncm91cC4gIFNldmVyYWwgXGZJZ3JvdXBcZlIgZGlyZWN0aXZlcyBjYW4gc3BlY2lmeSB0aGUKIHNhbWUgZ3JvdXAgbmFtZSwgYWxsb3dpbmcgYSBzaW5nbGUgYWNjZXNzIHNldHRpbmcgdG8gYXBwbHkgdG8gc2V2ZXJhbCAKQEAgLTI5Myw3ICs0NDYsNyBAQAogLklQCiBOb3RlIHRoYXQgYSBtYXNrIGxvbmdlciB0aGFuIDggYml0cyBtdXN0IHVzZSAnOicgdG8gc2VwYXJhdGUgdGhlIGluZGl2aWR1YWwKIG9jdGV0cy4KLS5JUCAiYWNjZXNzIEdST1VQIENPTlRFWFQge2FueXx2MXx2MmN8dXNtfSBMRVZFTCBQUkVGWCBSRUFEIFdSSVRFIE5PVElGWSIKKy5JUCAiYWNjZXNzIEdST1VQIENPTlRFWFQge2FueXx2MXx2MmN8dXNtfHRzbXxrc219IExFVkVMIFBSRUZYIFJFQUQgV1JJVEUgTk9USUZZIgogbWFwcyBmcm9tIGEgZ3JvdXAgb2YgdXNlcnMvY29tbXVuaXRpZXMgKHdpdGggYSBwYXJ0aWN1bGFyIHNlY3VyaXR5IG1vZGVsCiBhbmQgbWluaW11bSBzZWN1cml0eSBsZXZlbCwgYW5kIGluIGEgc3BlY2lmaWMgY29udGV4dCkgdG8gb25lIG9mIHRocmVlIHZpZXdzLAogZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZC4KQEAgLTMxMiw3ICs0NjUsNyBAQAogY29uY2VybmVkLCB0aGUgdHdvIG1haW4gdmlldyB0eXBlcyBhcmUgXGZJcmVhZFxmUiBhbmQgXGZJd3JpdGVcZlIsCiBjb3JyZXNwb25kaW5nIHRvIHRoZSBSRUFEIGFuZCBXUklURSB2aWV3cyBvZiB0aGUgbWFpbiBcZklhY2Nlc3NcZlIgZGlyZWN0aXZlLgogU2VlIHRoZSAnc25tcHRyYXBkLmNvbmYoNSknIG1hbiBwYWdlIGZvciBkaXNjdXNzaW9uIG9mIG90aGVyIHZpZXcgdHlwZXMuCi0uSVAgImF1dGhjb21tdW5pdHkgVFlQRVMgIENPTU1VTklUWSAgIFtTT1VSQ0UgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgImF1dGhjb21tdW5pdHkgVFlQRVMgIENPTU1VTklUWSAgIFtTT1VSQ0UgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIFxmSXJvY29tbXVuaXR5XGZSL1xmSXJ3Y29tbXVuaXR5XGZSIGRpcmVjdGl2ZXMuCiBUWVBFUyB3aWxsIHVzdWFsbHkgYmUgXGZJcmVhZFxmUiBvciBcZklyZWFkLHdyaXRlXGZSIHJlc3BlY3RpdmVseS4KIFRoZSB2aWV3IHNwZWNpZmljYXRpb24gY2FuIGVpdGhlciBiZSBhbiBPSUQgc3VidHJlZSAoYXMgYmVmb3JlKSwKQEAgLTMyMSwyMCArNDc0LDIwIEBACiB0aGVuIGFjY2VzcyB3aWxsIGJlIGFsbG93ZWQgdG8gdGhlIGZ1bGwgT0lEIHRyZWUuCiBJZiBDT05URVhUIGlzIHNwZWNpZmllZCwgYWNjZXNzIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgU05NUHYzIGNvbnRleHQuCiBPdGhlcndpc2UgdGhlIGRlZmF1bHQgY29udGV4dCAoIiIpIGlzIHVzZWQuCi0uSVAgImF1dGh1c2VyICAgVFlQRVMgWy1zIE1PREVMXSBVU0VSICBbTEVWRUwgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgImF1dGh1c2VyICAgVFlQRVMgW1wtcyBNT0RFTF0gVVNFUiAgW0xFVkVMIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBcZklyb3VzZXJcZlIvXGZJcnd1c2VyXGZSIGRpcmVjdGl2ZXMuCiBUaGUgZmllbGRzIFRZUEVTLCBPSUQsIFZJRVcgYW5kIENPTlRFWFQgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvcgogXGZJYXV0aGNvbW11bml0eVxmUi4KLS5JUCAiYXV0aGdyb3VwICBUWVBFUyBbLXMgTU9ERUxdIEdST1VQIFtMRVZFTCBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAiYXV0aGdyb3VwICBUWVBFUyBbXC1zIE1PREVMXSBHUk9VUCBbTEVWRUwgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogaXMgYSBjb21wYW5pb24gdG8gdGhlIFxmSWF1dGh1c2VyXGZSIGRpcmVjdGl2ZSwgc3BlY2lmeWluZyBhY2Nlc3MKIGZvciBhIHBhcnRpY3VsYXIgZ3JvdXAgKGRlZmluZWQgdXNpbmcgdGhlIFxmSWdyb3VwXGZSIGRpcmVjdGl2ZSBhcyB1c3VhbCkuCiBCb3RoIFxmSWF1dGh1c2VyXGZSIGFuZCBcZklhdXRoZ3JvdXBcZlIgZGVmYXVsdCB0byBhdXRoZW50aWNhdGVkIHJlcXVlc3RzIC0KIExFVkVMIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBcZklub2F1dGhcZlIgb3IgXGZJcHJpdlxmUiB0byBhbGxvdwogdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzLCBvciByZXF1aXJlIGVuY3J5cHRpb24gcmVzcGVjdGl2ZWx5LgogQm90aCBcZklhdXRodXNlclxmUiBhbmQgXGZJYXV0aGdyb3VwXGZSIGRpcmVjdGl2ZXMgYWxzbyBkZWZhdWx0IHRvIGNvbmZpZ3VyaW5nCi1hY2Nlc3MgZm9yIFNOTVB2My9VU00gcmVxdWVzdHMgLSB1c2UgdGhlICctcycgZmxhZyB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlCithY2Nlc3MgZm9yIFNOTVB2My9VU00gcmVxdWVzdHMgLSB1c2UgdGhlICdcLXMnIGZsYWcgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZQogc2VjdXJpdHkgbW9kZWwgKHVzaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyBmb3IgXGZJYWNjZXNzXGZSIGFib3ZlKS4KLS5JUCAiYXV0aGFjY2VzcyBUWVBFUyBbLXMgTU9ERUxdIEdST1VQIFZJRVcgW0xFVkVMIFtDT05URVhUXV0iCisuSVAgImF1dGhhY2Nlc3MgVFlQRVMgW1wtcyBNT0RFTF0gR1JPVVAgVklFVyBbTEVWRUwgW0NPTlRFWFRdXSIKIGFsc28gY29uZmlndXJlcyB0aGUgYWNjZXNzIGZvciBhIHBhcnRpY3VsYXIgZ3JvdXAsCiBzcGVjaWZ5aW5nIHRoZSBuYW1lIGFuZCB0eXBlIG9mIHZpZXcgdG8gYXBwbHkuIFRoZSBNT0RFTCBhbmQgTEVWRUwgZmllbGRzCiBhcmUgaW50ZXJwcmV0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBcZklhdXRoZ3JvdXBcZlIuCkBAIC0zNjAsNyArNTEzLDcgQEAKIC5JUCAic3lzTmFtZSBTVFJJTkciCiBzZXQgdGhlIHN5c3RlbSBsb2NhdGlvbiwgc3lzdGVtIGNvbnRhY3Qgb3Igc3lzdGVtIG5hbWUKIChcZkNzeXNMb2NhdGlvbi4wXGZSLCBcZkNzeXNDb250YWN0LjBcZlIgYW5kIFxmQ3N5c05hbWUuMFxmUikgZm9yIHRoZSBhZ2VudCByZXNwZWN0aXZlbHkuCi1PcmRpbmFyaWx5IHRoZXNlIG9iamVjdHMgYXJlIHdyaXRlYWJsZSB2aWEgc3VpdGFibHkgYXV0aG9yaXplZCBTTk1QIFNFVAorT3JkaW5hcmlseSB0aGVzZSBvYmplY3RzIGFyZSB3cml0YWJsZSB2aWEgc3VpdGFibHkgYXV0aG9yaXplZCBTTk1QIFNFVAogcmVxdWVzdHMuICBIb3dldmVyLCBzcGVjaWZ5aW5nIG9uZSBvZiB0aGVzZSBkaXJlY3RpdmVzIG1ha2VzIHRoZQogY29ycmVzcG9uZGluZyBvYmplY3QgcmVhZC1vbmx5LCBhbmQgYXR0ZW1wdHMgdG8gU0VUIGl0IHdpbGwgcmVzdWx0IGluCiBhIFxmSW5vdFdyaXRhYmxlXGZSIGVycm9yIHJlc3BvbnNlLgpAQCAtMzc4LDggKzUzMSwyMCBAQAogLklQICJpbnRlcmZhY2UgTkFNRSBUWVBFIFNQRUVEIgogY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhcHByb3ByaWF0ZSB0eXBlIGFuZCBzcGVlZCBzZXR0aW5ncyBmb3IKIGludGVyZmFjZXMgd2hlcmUgdGhlIGFnZW50IGZhaWxzIHRvIGRldGVybWluZSB0aGlzIGluZm9ybWF0aW9uIGNvcnJlY3RseS4KLVRZUEUgaXMgYSB0eXBlIHZhbHVlIGFzIGdpdmVuIGluIHRoZSBJQU5BaWZUeXBlLU1JQiwKK1RZUEUgaXMgYSB0eXBlIHZhbHVlIGFzIGdpdmVuIGluIHRoZSBJQU5BaWZUeXBlXC1NSUIsCiBhbmQgY2FuIGJlIHNwZWNpZmllZCBudW1lcmljYWxseSBvciBieSBuYW1lIChhc3N1bWluZyB0aGlzIE1JQiBpcyBsb2FkZWQpLgorLklQICJpbnRlcmZhY2VfZmFkZW91dCBUSU1FT1VUIgorc3BlY2lmaWVzLCBmb3IgaG93IGxvbmcgdGhlIGFnZW50IGtlZXBzIGVudHJpZXMgaW4gXGZDaWZUYWJsZVxmUiBhZnRlcgorYXBwcm9wcmlhdGUgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHN5c3RlbSAodHlwaWNhbGx5IHZhcmlvdXMgcHBwLAordGFwIG9yIHR1biBpbnRlcmZhY2VzKS4gVGltZW91dCB2YWx1ZSBpcyBpbiBzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIDMwMAorKD01IG1pbnV0ZXMpLgorLklQICJpbnRlcmZhY2VfcmVwbGFjZV9vbGQgeWVzIgorY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIGFscmVhZHkgZXhpc3RpbmcgZW50cmllcyBpbiBcZkNpZlRhYmxlXGZSIHdoZW4gYW4KK2ludGVyZmFjZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXBwZWFycyBvbiB0aGUgc3lzdGVtLiBFLmcuIHdoZW4gcHBwMCBpbnRlcmZhY2UKK2lzIHJlbW92ZWQsIGl0IGlzIHN0aWxsIGxpc3RlZCBpbiB0aGUgdGFibGUgZm9yIFxmSWludGVyZmFjZV9mYWRlb3V0XGZSCitzZWNvbmRzLiBUaGlzIG9wdGlvbiBlbnN1cmVzLCB0aGF0IHRoZSBvbGQgcHBwMCBpbnRlcmZhY2UgaXMgcmVtb3ZlZCBldmVuCitiZWZvcmUgdGhlIFxmSWludGVyZmFjZV9mYWRlb3V0XGZSIHRpbWVvdXIgd2hlbiBuZXcgcHBwMCAod2l0aCBkaWZmZXJlbnQKK1xmQ2lmSW5kZXhcZlIpIHNob3dzIHVwLgogLlNTIEhvc3QgUmVzb3VyY2VzIEdyb3VwCiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQogXGZJaG9zdFxmUiBtb2R1bGUgKHdoaWNoIGlzIG5vdyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkIApAQCAtNDE5LDEzICs1ODQsMzIgQEAKIGFzICdGaXhlZCBEaXNrcycsIGFuZCB0aGlzIGlzIHN0aWxsIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KIFNldHRpbmcgdGhpcyBkaXJlY3RpdmUgdG8gJzEnIHJlcG9ydHMgc3VjaCBmaWxlIHN5c3RlbXMgYXMKIFwnTmV0d29yayBEaXNrcycsIGFzIHJlcXVpcmVkIGJ5IHRoZSBIb3N0IFJlc291cmNlcyBNSUIuCisuSVAgInJlYWxTdG9yYWdlVW5pdHMiCitjb250cm9sbHMgaG93IHRoZSBhZ2VudCByZXBvcnRzIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cywgaHJTdG9yYWdlU2l6ZSBhbmQKK2hyU3RvcmFnZVVzZWQgaW4gaHJTdG9yYWdlVGFibGUuCitGb3IgYmlnIHN0b3JhZ2UgZHJpdmVzIHdpdGggc21hbGwgYWxsb2NhdGlvbiB1bml0cyB0aGUgYWdlbnQgcmUtY2FsY3VsYXRlcwordGhlc2UgdmFsdWVzIHNvIHRoZXkgYWxsIGZpdCBJbnRlZ2VyMzIgYW5kCitoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMgeCBoclN0b3JhZ2VTaXplCitnaXZlcyByZWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UuCisuUlMKKy5JUCAiRXhhbXBsZToiCitMaW51eCB4ZnMgMTZUQiBmaWxlc3lzdGVtIHdpdGggNDA5NiBieXRlcyBsYXJnZSBibG9ja3Mgd2lsbCBiZQorcmVwb3J0ZWQgYXMgIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyA9IDgxOTIgYW5kIGhyU3RvcmFnZVNpemUgPSAyMTQ3NDgzNjQ3LAorc28gODE5MiB4IDIxNDc0ODM2NDcgZ2l2ZXMgcmVhbCBzaXplIG9mIHRoZSBmaWxlc3lzdGVtICg9MTYgVEIpLgorLlJFCisuSVAKK1NldHRpbmcgdGhpcyBkaXJlY3RpdmUgdG8gJzEnIHR1cm5zIG9mZgordGhpcyBjYWxjdWxhdGlvbiBhbmQgdGhlIGFnZW50IHJlcG9ydHMgcmVhbCBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMsIGJ1dCBpdAorbWlnaHQgcmVwb3J0IHdyb25nIGhyU3RvcmFnZVNpemUgZm9yIGJpZyBkcml2ZXMgYmVjYXVzZSB0aGUgdmFsdWUgd29uJ3QgZml0IGludG8KK0ludGVnZXIzMi4gSW4gdGhpcyBjYXNlLCBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMgeCBoclN0b3JhZ2VTaXplIHdvbid0IGdpdmUKK3JlYWwgc2l6ZSBvZiB0aGUgc3RvcmFnZS4KIC5TUyBQcm9jZXNzIE1vbml0b3JpbmcgCiBUaGUgXGZDaHJTV1J1blxmUiBncm91cCBvZiB0aGUgSG9zdCBSZXNvdXJjZXMgTUlCIHByb3ZpZGVzCiBpbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBsb2NhbCBzeXN0ZW0uCi1UaGUgXGZDcHJUYWJsZVxmUiBvZiB0aGUgVUNELVNOTVAtTUlCIGNvbXBsZW1lbnRzIHRoaXMgYnkgcmVwb3J0aW5nCitUaGUgXGZDcHJUYWJsZVxmUiBvZiB0aGUgVUNEXC1TTk1QXC1NSUIgY29tcGxlbWVudHMgdGhpcyBieSByZXBvcnRpbmcKIG9uIHNlbGVjdGVkIHNlcnZpY2VzICh3aGljaCBtYXkgaW52b2x2ZSBtdWx0aXBsZSBwcm9jZXNzZXMpLgogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL3Byb2NcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQorXGZJdWNkXC1zbm1wL3Byb2NcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQogZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAicHJvYyBOQU1FIFtNQVggW01JTl1dIgogbW9uaXRvcnMgdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgY2FsbGVkIE5BTUUgKGFzIHJlcG9ydGVkIGJ5IFBTQ01EKQpAQCAtNDQxLDkgKzYyNSwxMiBAQAogdGhlIHByb2JsZW0gLSBzZWUgdGhlIERpc01hbiBFdmVudCBNSUIgc2VjdGlvbiBsYXRlci4KIC5SRQogLklQCi1JZiBuZWl0aGVyIE1BWCBub3IgTUlOIGFyZSBzcGVjaWZpZWQgKG9yIGFyZSBib3RoIDApLCB0aGV5IHdpbGwKK0lmIG5laXRoZXIgTUFYIG5vciBNSU4gYXJlIHNwZWNpZmllZCwgdGhleSB3aWxsCiBkZWZhdWx0IHRvIFxmQmluZmluaXR5XGZSIGFuZCAxIHJlc3BlY3RpdmVseSAoImF0IGxlYXN0IG9uZSIpLgogSWYgb25seSBNQVggaXMgc3BlY2lmaWVkLCBNSU4gd2lsbCBkZWZhdWx0IHRvIDAgKCJubyBtb3JlIHRoYW4gTUFYIikuCitJZiBNQVggaXMgMCAoYW5kIE1JTiBpcyBub3QpLCB0aGlzIGluZGljYXRlcyBpbmZpbml0eSAoImF0IGxlYXN0IE1JTiIpLgorSWYgYm90aCBNQVggYW5kIE1JTiBhcmUgMCwgdGhpcyBpbmRpY2F0ZXMgYSBwcm9jZXNzIHRoYXQgc2hvdWxkIFxmQm5vdFxmUAorYmUgcnVubmluZy4KIC5JUCAicHJvY2ZpeCBOQU1FIFBST0cgQVJHUyIKIHJlZ2lzdGVycyBhIGNvbW1hbmQgdGhhdCBjYW4gYmUgcnVuIHRvIGZpeCBlcnJvcnMgd2l0aCB0aGUgZ2l2ZW4KIHByb2Nlc3MgTkFNRS4gIFRoaXMgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKQEAgLTQ2MSw3ICs2NDgsNyBAQAogXGZDcHJUYWJsZVxmUiB3aWxsIGZhaWwgKFxmSW5vU3VjaE9iamVjdFxmSSkuCiAuU1MgRGlzayBVc2FnZSBNb25pdG9yaW5nCiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvZGlza1xmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCitcZkl1Y2RcLXNubXAvZGlza1xmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCiBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJkaXNrIFBBVEggWyBNSU5TUEFDRSB8IE1JTlBFUkNFTlQlIF0iCiBtb25pdG9ycyB0aGUgZGlzayBtb3VudGVkIGF0IFBBVEggZm9yIGF2YWlsYWJsZSBkaXNrIHNwYWNlLgpAQCAtNTA1LDkgKzY5MiwzMSBAQAogLlBQCiBJZiBuZWl0aGVyIGFueSBcZklkaXNrXGZSIGRpcmVjdGl2ZXMgb3IgXGZJaW5jbHVkZUFsbERpc2tzXGZSIGFyZSBkZWZpbmVkLAogdGhlbiB3YWxraW5nIHRoZSBcZkNkc2tUYWJsZVxmUiB3aWxsIGZhaWwgKFxmSW5vU3VjaE9iamVjdFxmSSkuCisuU1MgRGlzayBJL08gTW9uaXRvcmluZworVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKK1xmSXVjZFwtc25tcC9kaXNraW9cZlIgbW9kdWxlICh3aGljaCBpcyBub3QgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKK2RlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCisuUFAKK0J5IGRlZmF1bHQsIGFsbCBibG9jayBkZXZpY2VzIGtub3duIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFyZQoraW5jbHVkZWQgaW4gdGhlIGRpc2tJT1RhYmxlLiBPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBMaW51eCwgdGhpcyBtb2R1bGUKK2hhcyBubyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuCisuUFAKK09uIExpbnV4IHN5c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIGV4Y2x1ZGUgc2V2ZXJhbCBjbGFzc2VzIG9mIGJsb2NrCitkZXZpY2VzIGZyb20gdGhlIGRpc2tJT1RhYmxlIGluIG9yZGVyIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlIHRhYmxlIHdpdGgKK3VzZWxlc3MgemVybyBzdGF0aXN0aWNzIGZvciBwc2V1ZG8tZGV2aWNlcyB0aGF0IG9mdGVuIGFyZSBub3QgaW4gdXNlIGJ1dAorYXJlIGNvbmZpZ3VyZWQgYnkgZGVmYXVsdCB0byBleGlzdCBpbiBtb3N0IHJlY2VudCBMaW51eCBkaXN0cmlidXRpb25zLgorLklQICJkaXNraW9fZXhjbHVkZV9mZCB5ZXMiCitFeGNsdWRlcyBhbGwgTGludXggZmxvcHB5IGRpc2sgYmxvY2sgZGV2aWNlcywgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiZmQiLAorZS5nLiAiZmQwIgorLklQICJkaXNraW9fZXhjbHVkZV9sb29wIHllcyIKK0V4Y2x1ZGVzIGFsbCBMaW51eCBsb29wYmFjayBibG9jayBkZXZpY2VzLCB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJsb29wIiwKK2UuZy4gImxvb3AwIgorLklQICJkaXNraW9fZXhjbHVkZV9yYW0geWVzIgorRXhjbHVkZXMgYWxsIExJbnV4IHJhbWRpc2sgYmxvY2sgZGV2aWNlcywgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAicmFtIiwgZS5nLgorInJhbTAiCiAuU1MgU3lzdGVtIExvYWQgTW9uaXRvcmluZwogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBlaXRoZXIgdGhlCi1cZkl1Y2Qtc25tcC9sb2FkYXZlXGZSIG1vZHVsZSBvciB0aGUgXGZJdWNkLXNubXAvbWVtb3J5XGZSIG1vZHVsZQorXGZJdWNkXC1zbm1wL2xvYWRhdmVcZlIgbW9kdWxlIG9yIHRoZSBcZkl1Y2RcLXNubXAvbWVtb3J5XGZSIG1vZHVsZQogcmVzcGVjdGl2ZWx5IChib3RoIG9mIHdoaWNoIGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQogZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAibG9hZCBNQVgxIFtNQVg1IFtNQVgxNV1dIgpAQCAtNTM0LDcgKzc0Myw3IEBACiAuUFAKIFVubGlrZSB0aGUgXGZJcHJvY1xmUiBhbmQgXGZJZGlza1xmUiBkaXJlY3RpdmVzLCB3YWxraW5nIHRoZQogd2Fsa2luZyB0aGUgXGZDbGFUYWJsZVxmUiB3aWxsIHN1Y2NlZWQgKGFzc3VtaW5nIHRoZQotXGZJdWNkLXNubXAvbG9hZGF2ZVxmUiBtb2R1bGUgd2FzIGNvbmZpZ3VyZWQgaW50byB0aGUgYWdlbnQpLAorXGZJdWNkXC1zbm1wL2xvYWRhdmVcZlIgbW9kdWxlIHdhcyBjb25maWd1cmVkIGludG8gdGhlIGFnZW50KSwKIGV2ZW4gaWYgdGhlIFxmSWxvYWRcZlIgZGlyZWN0aXZlIGlzIG5vdCBwcmVzZW50LgogLklQICJzd2FwIE1JTiAiCiBtb25pdG9ycyB0aGUgYW1vdW50IG9mIHN3YXAgc3BhY2UgYXZhaWxhYmxlIG9uIHRoZSBsb2NhbCBzeXN0ZW0uCkBAIC01NDksNyArNzU4LDcgQEAKIElmIHRoaXMgZGlyZWN0aXZlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHRocmVzaG9sZCBpcyAxNiBNQi4KIC5TUyBMb2cgRmlsZSBNb25pdG9yaW5nCiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGVpdGhlciB0aGUKLVxmSXVjZC1zbm1wL2ZpbGVcZlIgb3IgXGZJdWNkLXNubXAvbG9nbWF0Y2hcZlIgbW9kdWxlcyByZXNwZWN0aXZlbHkKK1xmSXVjZFwtc25tcC9maWxlXGZSIG9yIFxmSXVjZFwtc25tcC9sb2dtYXRjaFxmUiBtb2R1bGVzIHJlc3BlY3RpdmVseQogKGJvdGggb2Ygd2hpY2ggYXJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCiBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJmaWxlIEZJTEUgW01BWFNJWkVdIgpAQCAtNTc2LDcgKzc4NSw3IEBACiAuUlMKIC5JUCBOQU1FCiBuYW1lIG9mIHRoZSBsb2dtYXRjaCBpbnN0YW5jZSAod2lsbCBhcHBlYXIgYXMgbG9nTWF0Y2hOYW1lIHVuZGVyCi1sb2dNYXRjaC9sb2dNYXRjaFRhYmxlL2xvZ01hdGNoRW50cnkvbG9nTWF0Y2hOYW1lIGluIHRoZSB1Y2Qtc25tcCBNSUIgdHJlZSkKK2xvZ01hdGNoL2xvZ01hdGNoVGFibGUvbG9nTWF0Y2hFbnRyeS9sb2dNYXRjaE5hbWUgaW4gdGhlIHVjZFwtc25tcCBNSUIgdHJlZSkKIC5JUCBGSUxFCiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsb2dmaWxlIHRvIGJlIG1vbml0b3JlZC4gTm90ZSB0aGF0IHRoaXMgcGF0aAogY2FuIGNvbnRhaW4gZGF0ZS90aW1lIGRpcmVjdGl2ZXMgKGxpa2UgaW4gdGhlIFVOSVggJ2RhdGUnIGNvbW1hbmQpLiBTZWUgdGhlCkBAIC01OTQsMTIgKzgwMywxMiBAQAogRXhhbXBsZToKIC5SUwogLklQCi1sb2dtYXRjaCBhcGFjaGUtR0VUcyAvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ctJVktJW0tJWQgNjAgR0VULipIVFRQLioKK2xvZ21hdGNoIGFwYWNoZVwtR0VUcyAvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2dcLSVZXC0lbVwtJWQgNjAgR0VULipIVFRQLioKIC5JUAotVGhpcyBsb2dtYXRjaCBpbnN0YW5jZSBpcyBuYW1lZCAnYXBhY2hlLUdFVHMnLCB1c2VzICdHRVQuKkhUVFAuKicgYXMgaXRzCitUaGlzIGxvZ21hdGNoIGluc3RhbmNlIGlzIG5hbWVkICdhcGFjaGVcLUdFVHMnLCB1c2VzICdHRVQuKkhUVFAuKicgYXMgaXRzCiByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGl0IHdpbGwgbW9uaXRvciB0aGUgZmlsZSBuYW1lZAotKGFzc3VtaW5nIHRvZGF5IGlzIE1heSA2dGggMjAwOSk6ICcvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ctMjAwOS0wNS0wNicsCi10b21vcnJvdyBpdCB3aWxsIGxvb2sgZm9yICdhY2Nlc3MubG9nLTIwMDktMDUtMDcnLiBUaGUgbG9nZmlsZSBpcyByZWFkIGV2ZXJ5IDYwCisoYXNzdW1pbmcgdG9kYXkgaXMgTWF5IDZ0aCAyMDA5KTogJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZ1wtMjAwOVwtMDVcLTA2JywKK3RvbW9ycm93IGl0IHdpbGwgbG9vayBmb3IgJ2FjY2Vzcy5sb2dcLTIwMDlcLTA1XC0wNycuIFRoZSBsb2dmaWxlIGlzIHJlYWQgZXZlcnkgNjAKIHNlY29uZHMuCiAuUkUKIC5JUApAQCAtNjU0LDEyICs4NjMsMTIgQEAKIC5JICJTTk1QQ01EX0FSR1MiCiBzaG91bGQgYmUgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHJlcXVpcmVkIGZvciBhbiBlcXVpdmFsZW50CiBcZklzbm1wdHJhcFxmUiAob3IgXGZJc25tcGluZm9ybVxmUikgY29tbWFuZCB0byBzZW5kIHRoZSBkZXNpcmVkIG5vdGlmaWNhdGlvbi4KLVRoZSBvcHRpb24gXGZJLUNpXGZSIGNhbiBiZSB1c2VkICh3aXRoIFxmSS12MmNcZlIgb3IgXGZJLXYzXGZSKSB0byBnZW5lcmF0ZQorVGhlIG9wdGlvbiBcZklcLUNpXGZSIGNhbiBiZSB1c2VkICh3aXRoIFxmSVwtdjJjXGZSIG9yIFxmSVwtdjNcZlIpIHRvIGdlbmVyYXRlCiBhbiBJTkZPUk0gbm90aWZpY2F0aW9uIHJhdGhlciB0aGFuIGFuIHVuYWNrbm93bGVkZ2VkIFRSQVAuCiAuSVAKIFRoaXMgaXMgdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGl2ZSBmb3IgZGVmaW5pbmcgU05NUHYzIHRyYXAgcmVjZWl2ZXJzLgogU2VlCi1odHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFwLXYzLmh0bWwKK2h0dHA6Ly93d3cubmV0XC1zbm1wLm9yZy90dXRvcmlhbC90dXRvcmlhbFwtNS9jb21tYW5kcy9zbm1wdHJhcFwtdjMuaHRtbAogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU05NUHYzIG5vdGlmaWNhdGlvbiBiZWhhdmlvdXIuCiAuSVAgImF1dGh0cmFwZW5hYmxlIHsxfDJ9IgogZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGdlbmVyYXRlIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgdHJhcHMKQEAgLTY2OCw2ICs4NzcsMTIgQEAKIG9iamVjdCAoXGZDc25tcEVuYWJsZUF1dGhlblRyYXBzLjBcZlIpIGlzIHJlYWQtd3JpdGUsIGJ1dCBzcGVjaWZ5aW5nCiB0aGlzIGRpcmVjdGl2ZSBtYWtlcyB0aGlzIG9iamVjdCByZWFkLW9ubHksIGFuZCBhdHRlbXB0cyB0byBzZXQgdGhlCiB2YWx1ZSB2aWEgU0VUIHJlcXVlc3RzIHdpbGwgcmVzdWx0IGluIGEgXGZJbm90V3JpdGFibGVcZlIgZXJyb3IgcmVzcG9uc2UuCisuUkUKKy5JUCAidjF0cmFwYWRkcmVzcyBIT1NUIgorZGVmaW5lcyB0aGUgYWdlbnQgYWRkcmVzcywgd2hpY2ggaXMgaW5zZXJ0ZWQgaW50byBTTk1QdjEgVFJBUHMuIEFyYml0cmFyeSBsb2NhbCAKK0lQdjQgYWRkcmVzcyBpcyBjaG9zZW4gaWYgdGhpcyBvcHRpb24gaXMgb21taXRlZC4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIG1haW5seSAKK3doZW4gdGhlIGFnZW50IGlzIHZpc2libGUgZnJvbSBvdXRzaWRlIHdvcmxkIGJ5IHNwZWNpZmljIGFkZHJlc3Mgb25seSAoZS5nLiAKK2JlY2F1c2Ugb2YgbmV0d29yayBhZGRyZXNzIHRyYW5zbGF0aW9uIG9yIGZpcmV3YWxsKS4KIC5TUyAiRGlzTWFuIEV2ZW50IE1JQiIKIFRoZSBwcmV2aW91cyBkaXJlY3RpdmVzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB3aGVyZSB0cmFwcyBzaG91bGQKIGJlIHNlbnQsIGJ1dCBhcmUgbm90IGNvbmNlcm5lZCB3aXRoIFxmSXdoZW5cZlIgdG8gc2VuZCBzdWNoIHRyYXBzCkBAIC03NTUsNDcgKzk3MCw0OSBAQAogVGhlcmUgYXJlIHZhcmlvdXMgb3B0aW9ucyB0byBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG1vbml0b3JlZAogZXhwcmVzc2lvbi4gIFRoZXNlIGluY2x1ZGU6CiAuUlMKLS5JUCAiLUQiCisuSVAgIlwtRCIKIGluZGljYXRlcyB0aGF0IHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBldmFsdWF0ZWQgdXNpbmcgZGVsdGEgZGlmZmVyZW5jZXMKIGJldHdlZW4gc2FtcGxlIHZhbHVlcyAocmF0aGVyIHRoYW4gdGhlIHZhbHVlcyB0aGVtc2VsdmVzKS4KLS5JUCAiLWQgT0lEIgotLklQICItZGkgT0lEIgorLklQICJcLWQgT0lEIgorLklQICJcLWRpIE9JRCIKIHNwZWNpZmllcyBhIGRpc2NvbnRpbnVpdHkgbWFya2VyIGZvciB2YWxpZGF0aW5nIGRlbHRhIGRpZmZlcmVuY2VzLgotQSBcZkktZGlcZlIgb2JqZWN0IGluc3RhbmNlIHdpbGwgYmUgdXNlZCBleGFjdGx5IGFzIGdpdmVuLgotQSBcZkktZFxmUiBvYmplY3Qgd2lsbCBoYXZlIHRoZSBpbnN0YW5jZSBzdWJpZGVudGlmaWVycyBmcm9tIHRoZQorQSBcZklcLWRpXGZSIG9iamVjdCBpbnN0YW5jZSB3aWxsIGJlIHVzZWQgZXhhY3RseSBhcyBnaXZlbi4KK0EgXGZJXC1kXGZSIG9iamVjdCB3aWxsIGhhdmUgdGhlIGluc3RhbmNlIHN1YmlkZW50aWZpZXJzIGZyb20gdGhlCiBjb3JyZXNwb25kaW5nICh3aWxkY2FyZGVkKSBleHByZXNzaW9uIG9iamVjdCBhcHBlbmRlZC4KLUlmIHRoZSBcZkktSVxmUiBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlCitJZiB0aGUgXGZJXC1JXGZSIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UKIGJldHdlZW4gdGhlc2UgdHdvIG9wdGlvbnMuCiAuSVAKLVRoaXMgb3B0aW9uIGFsc28gaW1wbGllcyBcZkktRFxmUi4KLS5JUCAiLWUgRVZFTlQiCitUaGlzIG9wdGlvbiBhbHNvIGltcGxpZXMgXGZJXC1EXGZSLgorLklQICJcLWUgRVZFTlQiCiBzcGVjaWZpZXMgdGhlIGV2ZW50IHRvIGJlIGludm9rZWQgd2hlbiB0aGlzIG1vbml0b3IgZW50cnkgaXMgdHJpZ2dlcmVkLgogSWYgdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCB0aGUgbW9uaXRvciBlbnRyeSB3aWxsIGdlbmVyYXRlIG9uZQotb2YgdGhlIHN0YW5kYXJkIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBpbiB0aGUgRElTTUFOLUVWRU5ULU1JQi4KLS5JUCAiLUkiCitvZiB0aGUgc3RhbmRhcmQgbm90aWZpY2F0aW9ucyBkZWZpbmVkIGluIHRoZSBESVNNQU5cLUVWRU5UXC1NSUIuCisuSVAgIlwtSSIKIGluZGljYXRlcyB0aGF0IHRoZSBtb25pdG9yZWQgZXhwcmVzc2lvbiBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUKIHNwZWNpZmllZCBPSUQgYXMgYSBzaW5nbGUgaW5zdGFuY2UuICBCeSBkZWZhdWx0LCB0aGUgT0lEIHdpbGwKIGJlIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZGVkIG9iamVjdCwgYW5kIHRoZSBtb25pdG9yIGV4cGFuZGVkCiB0byBjb3ZlciBhbGwgbWF0Y2hpbmcgaW5zdGFuY2VzLgotLklQICItaSBPSUQiCi0uSVAgIi1vIE9JRCIKKy5JUCAiXC1pIE9JRCIKKy5JUCAiXC1vIE9JRCIKIGRlZmluZSBhZGRpdGlvbmFsIHZhcmJpbmRzIHRvIGJlIGFkZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcGF5bG9hZAogd2hlbiB0aGlzIG1vbml0b3IgdHJpZ2dlciBmaXJlcy4KIEZvciBhIHdpbGRjYXJkZWQgZXhwcmVzc2lvbiwgdGhlIHN1ZmZpeCBvZiB0aGUgbWF0Y2hlZCBpbnN0YW5jZQotd2lsbCBiZSBhZGRlZCB0byBhbnkgT0lEcyBzcGVjaWZpZWQgdXNpbmcgXGZJLW9cZlIsIHdoaWxlIE9JRHMKLXNwZWNpZmllZCB1c2luZyBcZkktaVxmUiB3aWxsIGJlIHRyZWF0ZWQgYXMgZXhhY3QgaW5zdGFuY2VzLgotSWYgdGhlIFxmSS1JXGZSIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UKK3dpbGwgYmUgYWRkZWQgdG8gYW55IE9JRHMgc3BlY2lmaWVkIHVzaW5nIFxmSVwtb1xmUiwgd2hpbGUgT0lEcworc3BlY2lmaWVkIHVzaW5nIFxmSVwtaVxmUiB3aWxsIGJlIHRyZWF0ZWQgYXMgZXhhY3QgaW5zdGFuY2VzLgorSWYgdGhlIFxmSVwtSVxmUiBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlCiBiZXR3ZWVuIHRoZXNlIHR3byBvcHRpb25zLgogLklQCiBTZWUgXGZJc3RyaWN0RGlzbWFuXGZSIGZvciBkZXRhaWxzIG9mIHRoZSBvcmRlcmluZyBvZiBub3RpZmljYXRpb24gcGF5bG9hZHMuCi0uSVAgIi1yIEZSRVFVRU5DWSIKLW1vbml0b3JzIHRoZSBnaXZlbiBleHByZXNzaW9uIGV2ZXJ5IEZSRVFVRU5DWSBzZWNvbmRzLgotQnkgZGVmYXVsdCwgdGhlIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgZXZlcnkgNjAwcyAoMTAgbWludXRlcykuIAotLklQICItUyIKKy5JUCAiXC1yIEZSRVFVRU5DWSIKK21vbml0b3JzIHRoZSBnaXZlbiBleHByZXNzaW9uIGV2ZXJ5IEZSRVFVRU5DWSwgd2hlcmUgRlJFUVVFTkNZIGlzIGluCitzZWNvbmRzIG9yIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9mIHMgKGZvciBzZWNvbmRzKSwgbSAoZm9yCittaW51dGVzKSwgaCAoZm9yIGhvdXJzKSwgZCAoZm9yIGRheXMpLCBvciB3IChmb3Igd2Vla3MpLiAgQnkgZGVmYXVsdCwKK3RoZSBleHByZXNzaW9uIHdpbGwgYmUgZXZhbHVhdGVkIGV2ZXJ5IDYwMHMgKDEwIG1pbnV0ZXMpLgorLklQICJcLVMiCiBpbmRpY2F0ZXMgdGhhdCB0aGUgbW9uaXRvciBleHByZXNzaW9uIHNob3VsZCBcZklub3RcZlIgYmUgZXZhbHVhdGVkCiB3aGVuIHRoZSBhZ2VudCBmaXJzdCBzdGFydHMgdXAuICBUaGUgZmlyc3QgZXZhbHVhdGlvbiB3aWxsIGJlIGRvbmUKIG9uY2UgdGhlIGZpcnN0IHJlcGVhdCBpbnRlcnZhbCBoYXMgZXhwaXJlZC4KLS5JUCAiLXMiCisuSVAgIlwtcyIKIGluZGljYXRlcyB0aGF0IHRoZSBtb25pdG9yIGV4cHJlc3Npb24gXGZJc2hvdWxkXGZSIGJlIGV2YWx1YXRlZCB3aGVuIHRoZQogYWdlbnQgZmlyc3Qgc3RhcnRzIHVwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCiAuUlMKQEAgLTgwMywyMCArMTAyMCwyMCBAQAogTm90aWZpY2F0aW9ucyB0cmlnZ2VyZWQgYnkgdGhpcyBpbml0aWFsIGV2YWx1YXRpb24gd2lsbCBiZSBzZW50CiBcZkliZWZvcmVcZlIgdGhlIFxmQ2NvbGRTdGFydFxmUiB0cmFwLgogLlJFCi0uSVAgIi11IFNFQ05BTUUiCisuSVAgIlwtdSBTRUNOQU1FIgogc3BlY2lmaWVzIGEgc2VjdXJpdHkgbmFtZSB0byB1c2UgZm9yIHNjYW5uaW5nIHRoZSBsb2NhbCBob3N0LAogaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBcZklpcXVlcnlTZWNOYW1lXGZSLgogT25jZSBhZ2FpbiwgdGhpcyB1c2VyIG11c3QgYmUgZXhwbGljaXRseSBjcmVhdGVkIGFuZCBnaXZlbgogc3VpdGFibGUgYWNjZXNzIHJpZ2h0cy4KIC5SRQotLklQICJub3RpZmljYXRpb25FdmVudCBFTkFNRSBOT1RJRklDQVRJT04gWy1tXSBbLWkgT0lEIHwgLW8gT0lEIF0qIgorLklQICJub3RpZmljYXRpb25FdmVudCBFTkFNRSBOT1RJRklDQVRJT04gW1wtbV0gW1wtaSBPSUQgfCBcLW8gT0lEIF0qIgogZGVmaW5lcyBhIG5vdGlmaWNhdGlvbiBldmVudCBuYW1lZCBFTkFNRS4KIFRoaXMgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIGEgZ2l2ZW4gXGZJbW9uaXRvclxmUiBlbnRyeSBieSBzcGVjaWZ5aW5nCi10aGUgb3B0aW9uIFxmSS1lIEVOQU1FXGZSIChzZWUgYWJvdmUpLgotTk9USUZJQ0FUSU9OIHNob3VsZCBiZSB0aGUgT0lEIG9mIHRoZSBOT1RJRklDQVRJT04tVFlQRSBkZWZpbml0aW9uCit0aGUgb3B0aW9uIFxmSVwtZSBFTkFNRVxmUiAoc2VlIGFib3ZlKS4KK05PVElGSUNBVElPTiBzaG91bGQgYmUgdGhlIE9JRCBvZiB0aGUgTk9USUZJQ0FUSU9OXC1UWVBFIGRlZmluaXRpb24KIGZvciB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIGdlbmVyYXRlZC4KIC5JUAotSWYgdGhlIFxmSS1tXGZSIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkIHdpbGwKK0lmIHRoZSBcZklcLW1cZlIgb3B0aW9uIGlzIGdpdmVuLCB0aGUgbm90aWZpY2F0aW9uIHBheWxvYWQgd2lsbAogaW5jbHVkZSB0aGUgc3RhbmRhcmQgdmFyYmluZHMgYXMgc3BlY2lmaWVkIGluIHRoZSBPQkpFQ1RTIGNsYXVzZQogb2YgdGhlIG5vdGlmaWNhdGlvbiBNSUIgZGVmaW5pdGlvbi4KIFRoaXMgb3B0aW9uIG11c3QgY29tZSBcZkJhZnRlclxmUiB0aGUgTk9USUZJQ0FUSU9OIE9JRApAQCAtODI1LDI1ICsxMDQyLDI1IEBACiBiZSBsaXN0ZWQgZXhwbGljaXRseSAoZWl0aGVyIGhlcmUgb3IgaW4gdGhlIGNvcnJlc3BvbmRpbmcKIFxmSW1vbml0b3JcZlIgZGlyZWN0aXZlKS4KIC5JUAotVGhlIFxmSS1pIE9JRFxmUiBhbmQgXGZJLW8gT0lEXGZSIG9wdGlvbnMgc3BlY2lmeSBhZGRpdGlvbmFsCitUaGUgXGZJXC1pIE9JRFxmUiBhbmQgXGZJXC1vIE9JRFxmUiBvcHRpb25zIHNwZWNpZnkgYWRkaXRpb25hbAogdmFyYmluZHMgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkLCBhZnRlciB0aGUKIHN0YW5kYXJkIGxpc3QuCiBJZiB0aGUgbW9uaXRvciBlbnRyeSB0aGF0IHRyaWdnZXJlZCB0aGlzIGV2ZW50IGludm9sdmVkIGEKIHdpbGRjYXJkZWQgZXhwcmVzc2lvbiwgdGhlIHN1ZmZpeCBvZiB0aGUgbWF0Y2hlZCBpbnN0YW5jZQotd2lsbCBiZSBhZGRlZCB0byBhbnkgT0lEcyBzcGVjaWZpZWQgdXNpbmcgXGZJLW9cZlIsIHdoaWxlIE9JRHMKLXNwZWNpZmllZCB1c2luZyBcZkktaVxmUiB3aWxsIGJlIHRyZWF0ZWQgYXMgZXhhY3QgaW5zdGFuY2VzLgotSWYgdGhlIFxmSS1JXGZSIGZsYWcgd2FzIHNwZWNpZmllZCB0byB0aGUgXGZJbW9uaXRvclxmUiBkaXJlY3RpdmUsCit3aWxsIGJlIGFkZGVkIHRvIGFueSBPSURzIHNwZWNpZmllZCB1c2luZyBcZklcLW9cZlIsIHdoaWxlIE9JRHMKK3NwZWNpZmllZCB1c2luZyBcZklcLWlcZlIgd2lsbCBiZSB0cmVhdGVkIGFzIGV4YWN0IGluc3RhbmNlcy4KK0lmIHRoZSBcZklcLUlcZlIgZmxhZyB3YXMgc3BlY2lmaWVkIHRvIHRoZSBcZkltb25pdG9yXGZSIGRpcmVjdGl2ZSwKIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBvcHRpb25zLgotLklQICJzZXRFdmVudCBFTkFNRSBbLUldIE9JRCA9IFZBTFVFICIKKy5JUCAic2V0RXZlbnQgRU5BTUUgW1wtSV0gT0lEID0gVkFMVUUgIgogZGVmaW5lcyBhIHNldCBldmVudCBuYW1lZCBFTkFNRSwgYXNzaWduaW5nIHRoZSAoaW50ZWdlcikgVkFMVUUKIHRvIHRoZSBzcGVjaWZpZWQgT0lELgogVGhpcyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gYSBnaXZlbiBcZkltb25pdG9yXGZSIGVudHJ5IGJ5IHNwZWNpZnlpbmcKLXRoZSBvcHRpb24gXGZJLWUgRU5BTUVcZlIgKHNlZSBhYm92ZSkuCit0aGUgb3B0aW9uIFxmSVwtZSBFTkFNRVxmUiAoc2VlIGFib3ZlKS4KIC5JUAogSWYgdGhlIG1vbml0b3IgZW50cnkgdGhhdCB0cmlnZ2VyZWQgdGhpcyBldmVudCBpbnZvbHZlZCBhCiB3aWxkY2FyZGVkIGV4cHJlc3Npb24sIHRoZSBzdWZmaXggb2YgdGhlIG1hdGNoZWQgaW5zdGFuY2UKIHdpbGwgbm9ybWFsbHkgYmUgYWRkZWQgdG8gdGhlIE9JRC4KLUlmIHRoZSBcZkktSVxmUiBmbGFnIHdhcyBzcGVjaWZpZWQgdG8gZWl0aGVyIG9mIHRoZQorSWYgdGhlIFxmSVwtSVxmUiBmbGFnIHdhcyBzcGVjaWZpZWQgdG8gZWl0aGVyIG9mIHRoZQogXGZJbW9uaXRvclxmUiBvciBcZklzZXRFdmVudFxmUiBkaXJlY3RpdmVzLCB0aGUKIHNwZWNpZmllZCBPSUQgd2lsbCBiZSByZWdhcmRlZCBhcyBhbiBleGFjdCBzaW5nbGUgaW5zdGFuY2UuCiAuSVAgInN0cmljdERpc21hbiB5ZXMiCkBAIC04NjQsOCArMTA4MSw4IEBACiAuUlMKIC5JUCAiTm90ZToiCiBTdHJpY3QgRGlzTWFuIG9yZGVyaW5nIG1heSByZXN1bHQgaW4gZ2VuZXJhdGluZyBpbnZhbGlkIG5vdGlmaWNhdGlvbnMKLXBheWxvYWQgbGlzdHMgaWYgdGhlIFxmSW5vdGlmaWNhdGlvbkV2ZW50IC1uXGZSIGZsYWcgaXMgdXNlZCB0b2dldGhlcgotd2l0aCBcZkltb25pdG9yIC1vXGZSIChvciBcZkktaVxmUikgdmFyYmluZCBvcHRpb25zLgorcGF5bG9hZCBsaXN0cyBpZiB0aGUgXGZJbm90aWZpY2F0aW9uRXZlbnQgXC1uXGZSIGZsYWcgaXMgdXNlZCB0b2dldGhlcgord2l0aCBcZkltb25pdG9yIFwtb1xmUiAob3IgXGZJXC1pXGZSKSB2YXJiaW5kIG9wdGlvbnMuCiAuUkUKIC5JUAogSWYgbm8gXGZJbW9uaXRvclxmUiBlbnRyaWVzIHNwZWNpZnkgcGF5bG9hZCB2YXJiaW5kcywKQEAgLTg4MiwyNSArMTA5OSwyNSBAQAogbm90aWZpY2F0aW9uRXZlbnQgIGxpbmtVcFRyYXAgICAgbGlua1VwICAgaWZJbmRleCBpZkFkbWluU3RhdHVzIGlmT3BlclN0YXR1cwogbm90aWZpY2F0aW9uRXZlbnQgIGxpbmtEb3duVHJhcCAgbGlua0Rvd24gaWZJbmRleCBpZkFkbWluU3RhdHVzIGlmT3BlclN0YXR1cwogCi1tb25pdG9yICAtciA2MCAtZSBsaW5rVXBUcmFwICAgIkdlbmVyYXRlIGxpbmtVcCIgaWZPcGVyU3RhdHVzICE9IDIKLW1vbml0b3IgIC1yIDYwIC1lIGxpbmtEb3duVHJhcCAiR2VuZXJhdGUgbGlua0Rvd24iIGlmT3BlclN0YXR1cyA9PSAyCittb25pdG9yICBcLXIgNjAgXC1lIGxpbmtVcFRyYXAgICAiR2VuZXJhdGUgbGlua1VwIiBpZk9wZXJTdGF0dXMgIT0gMgorbW9uaXRvciAgXC1yIDYwIFwtZSBsaW5rRG93blRyYXAgIkdlbmVyYXRlIGxpbmtEb3duIiBpZk9wZXJTdGF0dXMgPT0gMgogLmZpCiAuUkUKIC5JUCAiZGVmYXVsdE1vbml0b3JzIHllcyIKIHdpbGwgY29uZmlndXJlIHRoZSBFdmVudCBNSUIgdGFibGVzIHRvIG1vbml0b3IgdGhlIHZhcmlvdXMKLVxmQ1VDRC1TTk1QLU1JQlxmUiB0YWJsZXMgZm9yIHByb2JsZW1zIChhcyBpbmRpY2F0ZWQgYnkKK1xmQ1VDRFwtU05NUFwtTUlCXGZSIHRhYmxlcyBmb3IgcHJvYmxlbXMgKGFzIGluZGljYXRlZCBieQogdGhlIGFwcHJvcHJpYXRlIFxmQ3h4RXJyRmxhZ1xmUiBjb2x1bW4gb2JqZWN0cykuCiAuSVAKIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBjb25maWd1cmF0aW9uOgogLlJTCiAuSVAKIC5uZgotbW9uaXRvcgktbyBwck5hbWVzIC1vIHByRXJyTWVzc2FnZSAicHJvY2VzcyB0YWJsZSIgcHJFcnJvckZsYWcgIT0gMAotbW9uaXRvcgktbyBtZW1FcnJvck5hbWUgLW8gbWVtU3dhcEVycm9yTXNnICJtZW1vcnkiIG1lbVN3YXBFcnJvciAhPSAwCi1tb25pdG9yCS1vIGV4dE5hbWVzIC1vIGV4dE91dHB1dCAiZXh0VGFibGUiIGV4dFJlc3VsdCAhPSAwCi1tb25pdG9yCS1vIGRza1BhdGggLW8gZHNrRXJyb3JNc2cgImRza1RhYmxlIiBkc2tFcnJvckZsYWcgIT0gMAotbW9uaXRvcgktbyBsYU5hbWVzIC1vIGxhRXJyTWVzc2FnZSAgImxhVGFibGUiIGxhRXJyb3JGbGFnICE9IDAKLW1vbml0b3IJLW8gZmlsZU5hbWUgLW8gZmlsZUVycm9yTXNnICAiZmlsZVRhYmxlIiBmaWxlRXJyb3JGbGFnICE9IDAKK21vbml0b3IJXC1vIHByTmFtZXMgXC1vIHByRXJyTWVzc2FnZSAicHJvY2VzcyB0YWJsZSIgcHJFcnJvckZsYWcgIT0gMAorbW9uaXRvcglcLW8gbWVtRXJyb3JOYW1lIFwtbyBtZW1Td2FwRXJyb3JNc2cgIm1lbW9yeSIgbWVtU3dhcEVycm9yICE9IDAKK21vbml0b3IJXC1vIGV4dE5hbWVzIFwtbyBleHRPdXRwdXQgImV4dFRhYmxlIiBleHRSZXN1bHQgIT0gMAorbW9uaXRvcglcLW8gZHNrUGF0aCBcLW8gZHNrRXJyb3JNc2cgImRza1RhYmxlIiBkc2tFcnJvckZsYWcgIT0gMAorbW9uaXRvcglcLW8gbGFOYW1lcyBcLW8gbGFFcnJNZXNzYWdlICAibGFUYWJsZSIgbGFFcnJvckZsYWcgIT0gMAorbW9uaXRvcglcLW8gZmlsZU5hbWUgXC1vIGZpbGVFcnJvck1zZyAgImZpbGVUYWJsZSIgZmlsZUVycm9yRmxhZyAhPSAwCiAuZmkKIC5SRQogLlBQCkBAIC05MTcsNyArMTEzNCw5IEBACiBUaGVyZSBhcmUgdGhyZWUgd2F5cyBvZiBzcGVjaWZ5aW5nIHRoZSBzY2hlZHVsZWQgYWN0aW9uOgogLklQICJyZXBlYXQgRlJFUVVFTkNZIE9JRCA9IFZBTFVFIgogY29uZmlndXJlcyBhIFNFVCBhc3NpZ25tZW50IG9mIHRoZSAoaW50ZWdlcikgVkFMVUUgdG8gdGhlIE1JQiBpbnN0YW5jZQotT0lELCB0byBiZSBydW4gZXZlcnkgRlJFUVVFTkNZIHNlY29uZHMuCitPSUQsIHRvIGJlIHJ1biBldmVyeSBGUkVRVUVOQ1kgc2Vjb25kcywgd2hlcmUgRlJFUVVFTkNZIGlzIGluCitzZWNvbmRzIG9yIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9mIHMgKGZvciBzZWNvbmRzKSwgbSAoZm9yCittaW51dGVzKSwgaCAoZm9yIGhvdXJzKSwgZCAoZm9yIGRheXMpLCBvciB3IChmb3Igd2Vla3MpLgogLklQICJjcm9uIE1JTlVURSBIT1VSIERBWSBNT05USCBXRUVLREFZICBPSUQgPSBWQUxVRSIKIGNvbmZpZ3VyZXMgYSBTRVQgYXNzaWdubWVudCBvZiB0aGUgKGludGVnZXIpIFZBTFVFIHRvIHRoZSBNSUIgaW5zdGFuY2UKIE9JRCwgdG8gYmUgcnVuIGF0IHRoZSB0aW1lcyBzcGVjaWZpZWQgYnkgdGhlIGZpZWxkcyBNSU5VVEUgdG8gV0VFS0RBWS4KQEAgLTkzNSw2ICsxMTU0LDcwIEBACiBjb25maWd1cmVzIGEgb25lLXNob3QgU0VUIGFzc2lnbm1lbnQsIHRvIGJlIHJ1biBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcKIHRpbWUgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZHMgTUlOVVRFIHRvIFdFRUtEQVkuICBUaGUgaW50ZXJwcmV0YXRpb24KIG9mIHRoZXNlIGZpZWxkcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGZvciB0aGUgXGZJY3JvblxmUiBkaXJlY3RpdmUuCisuU1MgIkRhdGEgRGVsaXZlcnkgdmlhIE5vdGZpaWNhdGlvbnMiCitOb3RlOiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlCitcZklkZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeVxmUiBtaWIgbW9kdWxlIHdhcyBjb21wbGllZCBpbiB0byB0aGUgYWdlbnQKKy5QUAorSW4gc29tZSBzaXR1YXRpb25zIGl0IG1heSBiZSBhZHZhbnRhZ2VvdXMgdG8gZGVsaXZlciBTTk1QIGRhdGEgb3ZlcgorU05NUCBOb3RpZmljYXRpb25zIChUUkFQcyBhbmQgSU5GT1JNcykgcmF0aGVyIHRoYW4gdGhlIHR5cGljYWwgcHJvY2Vzcworb2YgaGF2aW5nIHRoZSBtYW5hZ2VyIGlzc3VlIHJlcXVlc3RzIGZvciB0aGUgZGF0YSAodmlhIEdFVHMgYW5kCitHRVRORVhUcykuICBSZWFzb25zIGZvciBkb2luZyB0aGlzIGFyZSBudW1lcm91cywgYnV0IGZyZXF1ZW50bHkgY29ybmVyCitjYXNlcy4gIFRoZSBtb3N0IGNvbW1vbiByZWFzb24gZm9yIHdhbnRpbmcgdGhpcyBiZWhhdmlvdXIgbWlnaHQgYmUgdG8KK21vbml0b3IgZGV2aWNlcyB0aGF0IHJlc2lkZSBiZWhpbmQgTkFUcyBvciBGaXJld2FsbHMgdGhhdCBwcmV2ZW50CitpbmNvbWluZyBTTk1QIHRyYWZmaWMuCisuUFAKK0l0IHNob3VsZCBiZSBub3RlZCB0aGF0IGFsdGhvdWdoIG1vc3QgbWFuYWdlbWVudCBzb2Z0d2FyZSBpcyBjYXBhYmxlCitvZiBsb2dnaW5nIG5vdGlmaWNhdGlvbnMsIHZlcnkgbGl0dGxlIChpZiBhbnkpIG1hbmFnZW1lbnQgc29mdHdhcmUKK3dpbGwgdXBkYXRlZCB0aGVpciAia25vd2xlZGdlIGRhdGFiYXNlIiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgU05NUAorbm90aWZpY2F0aW9ucy4gIElFLCBpdCB3b24ndCAoZm9yIGV4YW1wbGUpIHVwZGF0ZSB0aGUgaW50ZXJmYWNlCit0cmFmZmljIGNvdW50ZXIgaGlzdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvZHVjZSBncmFwaHMuICBNb3N0IGxhcmdlcgorbmV0d29yayBtYW5hZ2VtZW50IHBhY2thZ2VzIGhhdmUgYSBzZXBhcmF0ZSBkYXRhYmFzZSBmb3Igc3RvcmluZyBkYXRhCityZWNlaXZlZCB2aWEgU05NUCByZXF1ZXN0cyAoR0VUcyBhbmQgR0VUTkVYVHMpIHZzIHRob3NlIHJlY2VpdmVkIGZyb20KK25vdGlmaWNhdGlvbnMuICBSZXNlYXJjaGluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIHlvdXIgbWFuYWdlbWVudAorc3RhdGlvbiBzb2Z0d2FyZSBpcyByZXF1aXJlZCBiZWZvcmUgYXNzdW1pbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwKK3NvbHZlIHlvdXIgZGF0YSBkZWxpdmVyeSByZXF1aXJlbWVudHMuCisuUFAKK05vdGlmaWNhdGlvbnMgZ2VuZXJhdGVkIHZpYSB0aGlzIG1lY2hhbmlzbSB3aWxsIGJlIHNlbnQgdG8gdGhlCitzdGFuZGFyZCBzZXQgb2YgY29uZmlndXJlZCBub3RpZmljYXRpb24gdGFyZ2V0cy4gIFNlZSB0aGUKKyJOb3RpZmljYXRpb24gSGFuZGxpbmciIHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudCBmb3IgZnVydGhlcgoraW5mb3JtYXRpb24uCisuSVAgImRlbGl2ZXJCeU5vdGlmeSBbXC1wXSBbXC1tXSBbXC1zIE1BWFNJWkVdIEZSRVFVRU5DWSBPSUQiCitUaGlzIGRpcmVjdGl2ZSB0ZWxscyB0aGUgU05NUCBhZ2VudCB0byBzZWxmLXdhbGsgdGhlIFxmSU9JRFxmUiwKK2NvbGxlY3QgYWxsIHRoZSBkYXRhIGFuZCBzZW5kIGl0IG91dCBldmVyeSBcZklGUkVRVUVOQ1lcZlIgc2Vjb25kcywKK3doZXJlIEZSRVFVRU5DWSBpcyBpbiBzZWNvbmRzIG9yIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9mIHMgKGZvcgorc2Vjb25kcyksIG0gKGZvciBtaW51dGVzKSwgaCAoZm9yIGhvdXJzKSwgZCAoZm9yIGRheXMpLCBvciB3IChmb3IKK3dlZWtzKS4gIEJ5IGRlZmF1bHQgc2NhbGFycyBhcmUgaW5jbHVkZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiB0aGF0CitzcGVjaWZ5IHRoZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQgKHVubGVzcyB0aGUKK1xmSVwtcFxmUiBvcHRpb24gaXMgc3BlY2lmaWVkKSBhbmQgd2hpY2ggbWVzc2FnZSBudW1iZXIgb2YgaG93IG1hbnkKK21lc3NhZ2VzIGEgcGFydGljdWxhciBub3RpZmljYXRpb24gaXMgKHVubGVzcyBcZklcLW1cZlIgaXMgc3BlY2lmaWVkKS4KK1RvIGJyZWFrIHRoZSBub3RpZmljYXRpb25zIGludG8gbWFuYWdlYWJsZSBwYWNrZXQgc2l6ZXMsIHVzZSB0aGUKK1xmSVwtc1xmUiBmbGFnIHRvIHNwZWNpZnkgdGhlIGFwcHJveGltYXRlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQKK2Egbm90aWZpY2F0aW9uIG1lc3NhZ2Ugc2hvdWxkIGJlIGxpbWl0ZWQgdG8uICBJZiBtb3JlIHRoYW4KK1xmSU1BWFNJWkVcZlIgb2YgYnl0ZXMgaXMgbmVlZGVkIHRoZW4gbXVsdGlwbGUgbm90aWZpY2F0aW9ucyB3aWxsIGJlCitzZW50IHRvIGRlbGl2ZXIgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhlIGNhbGN1bGF0aW9ucyBmb3IgZW5zdXJpbmcgdGhlCittYXhpbXVtIHNpemUgaXMgbWV0IGFyZSBhcHByb3hpbWF0aW9ucyBhbmQgdGh1cyBpdCBjYW4gYmUgYWJzb2x1dGVseQorZ3VhcmFudGVlZCB0aGV5J2xsIGJlIHVuZGVyIHRoYXQgc2l6ZSwgc28gbGVhdmUgYSBwYWRkaW5nIGJ1ZmZlciBpZiBpdAoraXMgY3JpdGljYWwgdGhhdCB5b3UgYXZvaWQgZnJhZ21lbnRhdGlvbi4gIEEgdmFsdWUgb2YgXC0xIGluZGljYXRlcworZm9yY2UgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIG1lc3NhZ2Ugbm8gbWF0dGVyIGhvdyBiaWcgaXQgaXMuCisuSVAKK0V4YW1wbGUgdXNhZ2U6IHRoZSBmb2xsb3dpbmcgd2lsbCBkZWxpdmVyIHRoZSBjb250ZW50cyBvZiB0aGUgaWZUYWJsZQorb25jZSBhbiBob3VyIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIHN5c3RlbSBncm91cCBvbmNlIGV2ZXJ5IDIgaG91cnM6CisuUlMKKy5uZgorCitkZWxpdmVyQnlOb3RpZnkgMzYwMCBpZlRhYmxlCitkZWxpdmVyQnlOb3RpZnkgNzIwMCBzeXN0ZW0KKy5maQorLlJFCisuSVAgImRlbGl2ZXJCeU5vdGlmeU1heFBhY2tldFNpemUgU0laRUlOQllURVMiCitTZXRzIHRoZSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBzaXplIGxpbWl0IChzZWUgdGhlIFxmSVwtc1xmUiBmbGFnIGFib3ZlKS4KKy5JUCAiZGVsaXZlckJ5Tm90aWZ5T2lkIE9JRCIKKy5JUCAiZGVsaXZlckJ5Tm90aWZ5RnJlcXVlbmN5T2lkIE9JRCIKKy5JUCAiZGVsaXZlckJ5Tm90aWZ5TWVzc2FnZU51bWJlck9pZCBPSUQiCisuSVAgImRlbGl2ZXJCeU5vdGlmeU1heE1lc3NhZ2VOdW1iZXJPaWQgT0lEIgorVGhlc2Ugc2V0IHRoZSBkYXRhIE9JRCB0aGF0IHRoZSBub3RpZmljYXRpb24gd2lsbCBiZSBzZW50IHVuZGVyLCB0aGUKK3NjYWxhciBPSUQsIHRoZSBtZXNzYWdlIG51bWJlciBPSUQsIGFuZCB0aGUgbWF4aW11bSBtZXNzYWdlIG51bWJlcgorT0lELiAgVGhlc2UgZGVmYXVsdCB0byBvYmplY3RzIGluIHRoZSBORVRcLVNOTVBcLVBFUklPRElDXC1OT1RJRllcLU1JQi4KIC5TSCAiRVhURU5ESU5HIEFHRU5UIEZVTkNUSU9OQUxJVFkiCiBPbmUgb2YgdGhlIGZpcnN0IGRpc3Rpbmd1aXNoaW5nIGZlYXR1cmVzIG9mIHRoZSBvcmlnaW5hbCBVQ0Qgc3VpdGUgd2FzCiB0aGUgYWJpbGl0eSB0byBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGFnZW50IC0gbm90IGp1c3QgYnkKQEAgLTk1Myw3ICsxMjM2LDcgQEAKIFNOTVAgb3BlcmF0aW9ucywgb3IgY29uZm9ybSB0byBhbnkgcGFydGljdWxhciBiZWhhdmlvdXIgLSB0aGUgTUlCCiBzdHJ1Y3R1cmVzIGFyZSBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSBhbnkgZm9ybSBvZiBjb21tYW5kIG91dHB1dC4KIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL2V4dGVuc2libGVcZlIgYW5kL29yIFxmSWFnZW50L2V4dGVuZFxmUiBtb2R1bGVzICh3aGljaAorXGZJdWNkXC1zbm1wL2V4dGVuc2libGVcZlIgYW5kL29yIFxmSWFnZW50L2V4dGVuZFxmUiBtb2R1bGVzICh3aGljaAogYXJlIGJvdGggaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAiZXhlYyBbTUlCT0lEXSBOQU1FIFBST0cgQVJHUyIKIC5JUCAic2ggW01JQk9JRF0gTkFNRSBQUk9HIEFSR1MiCkBAIC0xMDI3LDcgKzEzMTAsNyBAQAogXGZJZXh0ZW5kXGZSIGVudHJ5LCBhbmQgY2FuIGFwcGVhciBvbiBpdHMgb3duLgogLlBQCiBCb3RoIFxmSWV4dGVuZFxmUiBhbmQgXGZJZXh0ZW5kZml4XGZSIGRpcmVjdGl2ZXMgY2FuIGJlIGNvbmZpZ3VyZWQKLWR5bmFtaWNhbGx5LCB1c2luZyBTTk1QIFNFVCByZXF1ZXN0cyB0byB0aGUgTkVULVNOTVAtRVhURU5ELU1JQi4KK2R5bmFtaWNhbGx5LCB1c2luZyBTTk1QIFNFVCByZXF1ZXN0cyB0byB0aGUgTkVUXC1TTk1QXC1FWFRFTkRcLU1JQi4KIC5TUyAiTUlCLVNwZWNpZmljIEV4dGVuc2lvbiBDb21tYW5kcyIKIFRoZSBmaXJzdCBncm91cCBvZiBleHRlbnNpb24gZGlyZWN0aXZlcyBpbnZva2UgYXJiaXRyYXJ5IGNvbW1hbmRzLAogYW5kIHJlbHkgb24gdGhlIE1JQiBzdHJ1Y3R1cmUgKGFuZCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9ucykgaGF2aW5nCkBAIC0xMDM4LDE3ICsxMzIxLDE3IEBACiBUaGUgcmVtYWluaW5nIGV4dGVuc2lvbiBtZWNoYW5pc21zIGFyZSBhbGwgY29uY2VybmVkIHdpdGggc3VjaAogTUlCLXNwZWNpZmljIHNpdHVhdGlvbnMgLSBzdGFydGluZyB3aXRoICJwYXNzLXRocm91Z2giIHNjcmlwdHMuCiBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9wYXNzXGZSIGFuZCBcZkl1Y2Qtc25tcC9wYXNzX3BlcnNpc3RcZlIgbW9kdWxlcyAod2hpY2gKK1xmSXVjZFwtc25tcC9wYXNzXGZSIGFuZCBcZkl1Y2RcLXNubXAvcGFzc19wZXJzaXN0XGZSIG1vZHVsZXMgKHdoaWNoCiBhcmUgYm90aCBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgotLklQICJwYXNzIFstcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCisuSVAgInBhc3MgW1wtcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCiB3aWxsIHBhc3MgY29udHJvbCBvZiB0aGUgc3VidHJlZSByb290ZWQgYXQgTUlCT0lEIHRvIHRoZSBzcGVjaWZpZWQKIFBST0cgY29tbWFuZC4gIEdFVCBhbmQgR0VUTkVYVCByZXF1ZXN0cyBmb3IgT0lEcyB3aXRoaW4gdGhpcyB0cmVlIHdpbGwKIHRyaWdnZXIgdGhpcyBjb21tYW5kLCBjYWxsZWQgYXM6CiAuUlMKIC5JUAotUFJPRyAtZyBPSUQKK1BST0cgXC1nIE9JRAogLklQCi1QUk9HIC1uIE9JRAorUFJPRyBcLW4gT0lECiAuUkUKIC5JUAogcmVzcGVjdGl2ZWx5LCB3aGVyZSBPSUQgaXMgdGhlIHJlcXVlc3RlZCBPSUQuCkBAIC0xMDc2LDcgKzEzNTksNyBAQAogQSBTRVQgcmVxdWVzdCB3aWxsIHJlc3VsdCBpbiB0aGUgY29tbWFuZCBiZWluZyBjYWxsZWQgYXM6CiAuUlMKIC5JUAotUFJPRyAtcyBPSUQgVFlQRSBWQUxVRQorUFJPRyBcLXMgT0lEIFRZUEUgVkFMVUUKIC5SRQogLklQCiB3aGVyZSBUWVBFIGlzIG9uZSBvZiB0aGUgdG9rZW5zIGxpc3RlZCBhYm92ZSwgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiB0aGUKQEAgLTExMTAsOSArMTM5Myw5IEBACiBhIHNlcGFyYXRlIGludm9jYXRpb24gb2YgdGhlIGNvbW1hbmQuCiAuSVAKIFRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbiBwcmlvcml0eSBpcyAxMjcuICBUaGlzIGNhbiBiZQotY2hhbmdlZCBieSBzdXBwbHlpbmcgdGhlIG9wdGlvbmFsIC1wIGZsYWcsIHdpdGggbG93ZXIgcHJpb3JpdHkKK2NoYW5nZWQgYnkgc3VwcGx5aW5nIHRoZSBvcHRpb25hbCBcLXAgZmxhZywgd2l0aCBsb3dlciBwcmlvcml0eQogcmVnaXN0cmF0aW9ucyBiZWluZyB1c2VkIGluIHByZWZlcmVuY2UgdG8gaGlnaGVyIHByaW9yaXR5IHZhbHVlcy4KLS5JUCAicGFzc19wZXJzaXN0IFstcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCisuSVAgInBhc3NfcGVyc2lzdCBbXC1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKIHdpbGwgYWxzbyBwYXNzIGNvbnRyb2wgb2YgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IE1JQk9JRCB0byB0aGUgc3BlY2lmaWVkCiBQUk9HIGNvbW1hbmQuICBIb3dldmVyIHRoaXMgY29tbWFuZCB3aWxsIGNvbnRpbnVlIHRvIHJ1biBhZnRlciB0aGUgaW5pdGlhbAogcmVxdWVzdCBoYXMgYmVlbiBhbnN3ZXJlZCwgc28gc3Vic2VxdWVudCByZXF1ZXN0cyBjYW4gYmUgcHJvY2Vzc2VkIHdpdGhvdXQKQEAgLTExMzUsMTggKzE0MTgsMTggQEAKIElmIHRoZSBhc3NpZ25tZW50IGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb21tYW5kIHNob3VsZCBwcmludAogIkRPTkVcXG4iIHRvIHN0ZG91dC4KIEVycm9ycyBzaG91bGQgYmUgaW5kaWNhdGVkIGJ5IHdyaXRpbmcgb25lIG9mIHRoZSBzdHJpbmdzCi0uQiBub3Qtd3JpdGFibGUsIAotLkIgd3JvbmctdHlwZSwKLS5CIHdyb25nLWxlbmd0aCwKLS5CIHdyb25nLXZhbHVlCisuQiBub3RcLXdyaXRhYmxlLCAKKy5CIHdyb25nXC10eXBlLAorLkIgd3JvbmdcLWxlbmd0aCwKKy5CIHdyb25nXC12YWx1ZQogb3IKLS5CIGluY29uc2lzdGVudC12YWx1ZQorLkIgaW5jb25zaXN0ZW50XC12YWx1ZQogdG8gc3Rkb3V0LAogYW5kIHRoZSBhZ2VudCB3aWxsIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBlcnJvciByZXNwb25zZS4KIEluIGVpdGhlciBjYXNlLCB0aGUgY29tbWFuZCBzaG91bGQgY29udGludWUgcnVubmluZy4KIC5JUAogVGhlIHJlZ2lzdHJhdGlvbiBwcmlvcml0eSBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgb3B0aW9uYWwKLS1wIGZsYWcsIGp1c3QgYXMgZm9yIHRoZSBcZklwYXNzXGZSIGRpcmVjdGl2ZS4KK1wtcCBmbGFnLCBqdXN0IGFzIGZvciB0aGUgXGZJcGFzc1xmUiBkaXJlY3RpdmUuCiAuUFAKIFxmSXBhc3NcZlIgYW5kIFxmSXBhc3NfcGVyc2lzdFxmUiBleHRlbnNpb25zIGNhbiBvbmx5IGJlIGNvbmZpZ3VyZWQgdmlhIHRoZQogc25tcGQuY29uZiBmaWxlLiAgVGhleSBjYW5ub3QgYmUgc2V0IHVwIHZpYSBTTk1QIFNFVCByZXF1ZXN0cy4KQEAgLTExNjQsNyArMTQ0Nyw3IEBACiAuUFAKIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUgZW1iZWRkZWQKIHBlcmwgbWVjaGFuaXNtLCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBlbnZpcm9ubWVudC4gSXQKLW11c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnLS1lbmFibGUtZW1iZWRkZWQtcGVybCcKK211c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnXC1cLWVuYWJsZVwtZW1iZWRkZWRcLXBlcmwnCiBvcHRpb24gdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2hlbiB0aGUgcGFja2FnZSBpcyBmaXJzdCBidWlsdC4KIC5QUAogSWYgZW5hYmxlZCwgdGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIHdpbGwgYmUgcmVjb2duaXNlZDoKQEAgLTExODksNyArMTQ3Miw3IEBACiAubmYKIFxmQ3BlcmwgdXNlIERhdGE6OkR1bXBlcjsKIHBlcmwgc3ViIG15cm91dGluZSAgeyBwcmludCAiZ290IGNhbGxlZDogIixEdW1wZXIoQF8pLCJcXG4iOyB9Ci1wZXJsICRhZ2VudC0+cmVnaXN0ZXIoJ215bGluaycsICcuMS4zLjYuMS44NzY1JywgXFwmbXlyb3V0aW5lKTtcZlIKK3BlcmwgJGFnZW50XC0+cmVnaXN0ZXIoJ215bGluaycsICcuMS4zLjYuMS44NzY1JywgXFwmbXlyb3V0aW5lKTtcZlIKIC5maQogLlJFCiAuUkUKQEAgLTEyMTEsNyArMTQ5NCw3IEBACiB3aGVuIHRoZSBzdWl0ZSB3YXMgZmlyc3QgYnVpbHQuICBTdWNoIGltcGxlbWVudGF0aW9uIG1vZHVsZXMgY2FuIGFsc28gYmUKIGNvbXBpbGVkIGluZGVwZW5kZW50bHkgYW5kIGxvYWRlZCBpbnRvIHRoZSBydW5uaW5nIGFnZW50IG9uY2UgaXQgaGFzCiBzdGFydGVkLiAgVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvZGxtb2RcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBkZWZhdWx0CitcZkl1Y2RcLXNubXAvZGxtb2RcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBkZWZhdWx0CiBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAiZGxtb2QgTkFNRSBQQVRIIgogd2lsbCBsb2FkIHRoZSBzaGFyZWQgb2JqZWN0IG1vZHVsZSBmcm9tIHRoZSBmaWxlIFBBVEggKGFuIGFic29sdXRlCkBAIC0xMjI0LDcgKzE1MDcsNyBAQAogLlJFCiAuUFAKIFRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHVzaW5nIFNOTVAgU0VUIHJlcXVlc3RzCi10byB0aGUgVUNELURMTU9ELU1JQi4KK3RvIHRoZSBVQ0RcLURMTU9EXC1NSUIuCiAuU1MgIlByb3h5IFN1cHBvcnQiCiBBbm90aGVyIG1lY2hhbmlzbSBmb3IgZXh0ZW5kaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZ2VudAogaXMgdG8gcGFzcyBzZWxlY3RlZCByZXF1ZXN0cyAob3Igc2VsZWN0ZWQgdmFyYmluZHMpIHRvIGFub3RoZXIKQEAgLTEyMzMsOSArMTUxNiw5IEBACiBUaGlzIGNhbiBiZSB2aWV3ZWQgZWl0aGVyIGFzIHRoZSBtYWluIGFnZW50IGRlbGVnYXRpbmcgcmVxdWVzdHMgdG8KIHRoZSByZW1vdGUgb25lLCBvciBhY3RpbmcgYXMgYSBwcm94eSBmb3IgaXQuCiBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9wcm94eVxmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCitcZkl1Y2RcLXNubXAvcHJveHlcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQogZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KLS5JUCAicHJveHkgWy1DbiBDT05URVhUTkFNRV0gW1NOTVBDTURfQVJHU10gSE9TVCBPSUQgW1JFTU9URU9JRF0iCisuSVAgInByb3h5IFtcLUNuIENPTlRFWFROQU1FXSBbU05NUENNRF9BUkdTXSBIT1NUIE9JRCBbUkVNT1RFT0lEXSIKIHdpbGwgcGFzcyBhbnkgaW5jb21pbmcgcmVxdWVzdHMgdW5kZXIgT0lEIHRvIHRoZSBhZ2VudCBsaXN0ZW5pbmcKIG9uIHRoZSBwb3J0IHNwZWNpZmllZCBieSB0aGUgdHJhbnNwb3J0IGFkZHJlc3MgSE9TVC4KIFNlZSB0aGUgc2VjdGlvbiAKQEAgLTEyNzQsNyArMTU1Nyw3IEBACiB3aXRoIFNNVVgtYmFzZWQgc3ViYWdlbnRzIChzdWNoIGFzIFxmSWdhdGVkXGZSLCBcZkl6ZWJyYVxmUiBvciBcZklxdWFnZ2FcZlIpLgogVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQogXGZJc211eFxmUiBtb2R1bGUsIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGVudmlyb25tZW50LCBhbmQKLW11c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnLS13aXRoLW1pYi1tb2R1bGVzPXNtdXgnCittdXN0IGJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgYnkgc3BlY2lmeWluZyB0aGUgJ1wtXC13aXRoXC1taWJcLW1vZHVsZXM9c211eCcKIG9wdGlvbiB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB3aGVuIHRoZSBwYWNrYWdlIGlzIGZpcnN0IGJ1aWx0LgogLlJTCiAuSVAgIk5vdGU6IgpAQCAtMTMwMSw3ICsxNTg0LDcgQEAKIC5JUCAic211eHNvY2tldCA8SVB2NC1hZGRyZXNzPiIKIGRlZmluZXMgdGhlIElQdjQgYWRkcmVzcyBmb3IgU01VWCBwZWVycyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBOZXQtU05NUCBhZ2VudC4KIFRoZSBkZWZhdWx0IGlzIHRvIGxpc3RlbiBvbiBhbGwgSVB2NCBpbnRlcmZhY2VzICgiMC4wLjAuMCIpLCB1bmxlc3MgdGhlIAotcGFja2FnZSBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggIi0tZW5hYmxlLWxvY2FsLXNtdXgiIGF0IGJ1aWxkIHRpbWUsIHdoaWNoIAorcGFja2FnZSBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggIlwtXC1lbmFibGVcLWxvY2FsXC1zbXV4IiBhdCBidWlsZCB0aW1lLCB3aGljaCAKIGNhdXNlcyBpdCB0byBvbmx5IGxpc3RlbiBvbiAxMjcuMC4wLjEgYnkgZGVmYXVsdC4gU01VWCB1c2VzIHRoZSB3ZWxsLWtub3duCiBUQ1AgcG9ydCAxOTkuCiAuUFAKQEAgLTEzMjAsNyArMTYwMyw3IEBACiAuSVAgIm1hc3RlciBhZ2VudHgiCiB3aWxsIGVuYWJsZSB0aGUgQWdlbnRYIGZ1bmN0aW9uYWxpdHkgYW5kIGNhdXNlIHRoZSBhZ2VudCB0bwogc3RhcnQgbGlzdGVuaW5nIGZvciBpbmNvbWluZyBBZ2VudFggcmVnaXN0cmF0aW9ucy4KLVRoaXMgY2FuIGFsc28gYmUgYWN0aXZhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlICcteCcgY29tbWFuZC1saW5lCitUaGlzIGNhbiBhbHNvIGJlIGFjdGl2YXRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnXC14JyBjb21tYW5kLWxpbmUKIG9wdGlvbiAodG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBsaXN0ZW5pbmcgc29ja2V0KS4KIC5JUCAiYWdlbnRYUGVybXMgU09DS1BFUk1TIFtESVJQRVJNUyBbVVNFUnxVSUQgW0dST1VQfEdJRF1dXSIKIERlZmluZXMgdGhlIHBlcm1pc3Npb25zIGFuZCBvd25lcnNoaXAgb2YgdGhlIEFnZW50WCBVbml4IERvbWFpbiBzb2NrZXQsCkBAIC0xMzUxLDExICsxNjM0LDEzIEBACiAuUlMKIC5JUCAiTm90ZToiCiBTcGVjaWZ5aW5nIGFuIEFnZW50WCBzb2NrZXQgZG9lcyBcZkJub3RcZlIgYXV0b21hdGljYWxseSBlbmFibGUKLUFnZW50WCBmdW5jdGlvbmFsaXR5ICh1bmxpa2UgdGhlICcteCcgY29tbWFuZC1saW5lIG9wdGlvbikuCitBZ2VudFggZnVuY3Rpb25hbGl0eSAodW5saWtlIHRoZSAnXC14JyBjb21tYW5kLWxpbmUgb3B0aW9uKS4KIC5SRQogLklQICJhZ2VudFhUaW1lb3V0IE5VTSIKIGRlZmluZXMgdGhlIHRpbWVvdXQgcGVyaW9kIChOVU0gc2Vjb25kcykgZm9yIGFuIEFnZW50WCByZXF1ZXN0LgotRGVmYXVsdCBpcyAxIHNlY29uZC4KK0RlZmF1bHQgaXMgMSBzZWNvbmQuICBOVU0gYWxzbyBiZSBzcGVjaWZpZWQgd2l0aCBhIHN1ZmZpeCBvZiBvbmUgb2YgcworKGZvciBzZWNvbmRzKSwgbSAoZm9yIG1pbnV0ZXMpLCBoIChmb3IgaG91cnMpLCBkIChmb3IgZGF5cyksIG9yIHcgKGZvcgord2Vla3MpLgogLklQICJhZ2VudFhSZXRyaWVzIE5VTSIKIGRlZmluZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIGZvciBhbiBBZ2VudFggcmVxdWVzdC4KIERlZmF1bHQgaXMgNSByZXRyaWVzLgpAQCAtMTM2Myw5ICsxNjQ4LDkgQEAKIG5ldC1zbm1wIHNoaXBzIHdpdGggYm90aCBDIGFuZCBQZXJsIEFQSXMgdG8gZGV2ZWxvcCB5b3VyIG93biBBZ2VudFgKIHN1YmFnZW50LgogLlNIICJPVEhFUiBDT05GSUdVUkFUSU9OIgotLklQICJvdmVycmlkZSBbLXJ3XSBPSUQgVFlQRSBWQUxVRSIKKy5JUCAib3ZlcnJpZGUgW1wtcnddIE9JRCBUWVBFIFZBTFVFIgogVGhpcyBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBhIHBhcnRpY3VsYXIgT0lEIHdpdGggYQotZGlmZmVyZW50IHZhbHVlIChhbmQgcG9zc2libHkgYSBkaWZmZXJlbnQgdHlwZSBvZiB2YWx1ZSkuICBUaGUgLXJ3CitkaWZmZXJlbnQgdmFsdWUgKGFuZCBwb3NzaWJseSBhIGRpZmZlcmVudCB0eXBlIG9mIHZhbHVlKS4gIFRoZSBcLXJ3CiBmbGFnIHdpbGwgYWxsb3cgc25tcCBTRVRzIHRvIG1vZGlmeSBpdCdzIHZhbHVlIGFzIHdlbGwuIChub3RlIHRoYXQgaWYKIHlvdSdyZSBvdmVycmlkaW5nIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHksIHRoYXQgZnVuY3Rpb25hbGl0eSB3aWxsIGJlCiBlbnRpcmVseSBsb3N0LiAgVGh1cyBTRVRTIHdpbGwgZG8gbm90aGluZyBtb3JlIHRoYW4gbW9kaWZ5IHRoZQpAQCAtMTM5Nyw4ICsxNjgyLDggQEAKIElmIHlvdSdyZSB0cnlpbmcgdG8gZmlndXJlIG91dCBhc3BlY3RzIG9mIHRoZSB2YXJpb3VzIG1pYiBtb2R1bGVzCiAocG9zc2libHkgc29tZSB0aGF0IHlvdSd2ZSBhZGRlZCB5b3Vyc2VsZiksIHRoZSBmb2xsb3dpbmcgbWF5IGhlbHAgeW91CiBzcGl0IG91dCBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBGaXJzdCBvZmYsIHBsZWFzZSByZWFkCi10aGUgc25tcGQgbWFudWFsIHBhZ2Ugb24gdGhlIC1EIGZsYWcuICBUaGVuIHRoZSBmb2xsb3dpbmcKLWNvbmZpZ3VyYXRpb24gc25tcGQuY29uZiB0b2tlbiwgY29tYmluZWQgd2l0aCB0aGUgLUQgZmxhZywgY2FuIHByb2R1Y2UKK3RoZSBzbm1wZCBtYW51YWwgcGFnZSBvbiB0aGUgXC1EIGZsYWcuICBUaGVuIHRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gc25tcGQuY29uZiB0b2tlbiwgY29tYmluZWQgd2l0aCB0aGUgXC1EIGZsYWcsIGNhbiBwcm9kdWNlCiB1c2VmdWwgb3V0cHV0OgogLklQICJpbmplY3RIYW5kbGVyIEhBTkRMRVIgbW9kdWxlbmFtZSBbYmVmb3JlVGhpc10iCiBUaGlzIHdpbGwgaW5zZXJ0IG5ldyBoYW5kbGVycyBpbnRvIHRoZSBzZWN0aW9uIG9mIHRoZSBtaWIgdHJlZQpAQCAtMTQyNyw3ICsxNzEyLDcgQEAKIAogLklQIGRlYnVnCiBQcmludHMgb3V0IGxvdHMgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uIHdoZW4KLXRoZSAtRGhlbHBlcjpkZWJ1ZyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgc25tcGQKK3RoZSBcLURoZWxwZXI6ZGVidWcgZmxhZyBpcyBwYXNzZWQgdG8gdGhlIHNubXBkCiBhcHBsaWNhdGlvbi4KIAogLklQIHJlYWRfb25seQpAQCAtMTQ2Miw4ICsxNzQ3LDggQEAKIC5JUCBvCiBUaGUgTmV0LVNOTVAgYWdlbnQgY2FuIGJlIGluc3RydWN0ZWQgdG8gcmUtcmVhZCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzLAogZWl0aGVyIHZpYSBhbiBcZkJzbm1wc2V0XGZSIGFzc2lnbm1lbnQgb2YgaW50ZWdlcigxKSB0bwotXGZDVUNELVNOTVAtTUlCOjp2ZXJzaW9uVXBkYXRlQ29uZmlnLjBcZlIgKC4xLjMuNi4xLjQuMS4yMDIxLjEwMC4xMS4wKSwKLW9yIGJ5IHNlbmRpbmcgYSBcZkJraWxsIC1IVVBcZlIgc2lnbmFsIHRvIHRoZSBhZ2VudCBwcm9jZXNzLgorXGZDVUNEXC1TTk1QXC1NSUI6OnZlcnNpb25VcGRhdGVDb25maWcuMFxmUiAoLjEuMy42LjEuNC4xLjIwMjEuMTAwLjExLjApLAorb3IgYnkgc2VuZGluZyBhIFxmQmtpbGwgXC1IVVBcZlIgc2lnbmFsIHRvIHRoZSBhZ2VudCBwcm9jZXNzLgogLklQIG8KIEFsbCBkaXJlY3RpdmVzIGxpc3RlZCB3aXRoIGEgdmFsdWUgb2YgInllcyIgYWN0dWFsbHkgYWNjZXB0IGEgcmFuZ2UKIG9mIGJvb2xlYW4gdmFsdWVzLiAgVGhlc2Ugd2lsbCBhY2NlcHQgYW55IG9mIFxmSTFcZlIsIFxmSXllc1xmUiBvcgpAQCAtMTQ3OCw3ICsxNzYzLDcgQEAKIC5TSCAiRklMRVMiCiBTWVNDT05GRElSL3NubXAvc25tcGQuY29uZgogLlNIICJTRUUgQUxTTyIKLXNubXBjb25mKDEpLCBzbm1wdXNtKDEpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCByZWFkX2NvbmZpZygzKS4KK3NubXBjb25mKDEpLCBzbm1wdXNtKDEpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCBuZXRzbm1wX2NvbmZpZ19hcGkoMykuCiAuXCIgTG9jYWwgVmFyaWFibGVzOgogLlwiICBtb2RlOiBucm9mZgogLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9zbm1wZC5leGFtcGxlcy41LmRlZiBiL21hbi9zbm1wZC5leGFtcGxlcy41LmRlZgppbmRleCA2ODkwYjIwLi4zNjAyODY5IDEwMDY0NAotLS0gYS9tYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYKKysrIGIvbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmCkBAIC0xMDQsNyArMTA0LDcgQEAKIFBFUlNJU1RFTlRfRElSRUNUT1JZL3NubXBkLmNvbmYgZmlsZSwgcmF0aGVyIHRoYW4gdGhlIHVzdWFsIGxvY2F0aW9uLgogLlJFCiAuXCIKLS5cIiAgPz8/IElsbHVzdHJhdGUgIi1lIiwgIi1sIiBhbmQgIi1tIiBmb3JtcyA/PworLlwiICA/Pz8gSWxsdXN0cmF0ZSAiXC1lIiwgIlwtbCIgYW5kICJcLW0iIGZvcm1zID8/CiAuXCIKIC5TUyBUcmFkaXRpb25hbCBBY2Nlc3MgQ29udHJvbAogVGhlIFNOTVB2MyB1c2VycyBkZWZpbmVkIGFib3ZlIGNhbiBiZSBncmFudGVkIGFjY2VzcyB0byB0aGUgZnVsbApAQCAtMjE5LDcgKzIxOSw3IEBACiB2aWV3ICAgc3lzMlZpZXcgaW5jbHVkZWQgICAgc3lzdGVtCiB2aWV3ICAgc3lzMlZpZXcgaW5jbHVkZWQgICAgLjEuMy42LjEuMi4xLjI1LjEKIAotYXV0aGNvbW11bml0eSByZWFkICAgICAgIHB1YmxpYyAgZGVmYXVsdCAgICAgIC12IHN5czJWaWV3CithdXRoY29tbXVuaXR5IHJlYWQgICAgICAgcHVibGljICBkZWZhdWx0ICAgICAgXC12IHN5czJWaWV3CiBhdXRoY29tbXVuaXR5IHJlYWQsd3JpdGUgcHJpdmF0ZSAxMC4xMC4xMC4wLzgKIC5maQogLlJFCkBAIC0yMzgsMTIgKzIzOCwxMiBAQAogY2FuIGJlIGV4cGxpY2l0bHkgY29uZmlndXJlZCB1c2luZzoKIC5SUwogLm5mCi1cZkkjIE92ZXJyaWRlICd1bmFtZSAtYScgYW5kIGhhcmRjb2RlZCBzeXN0ZW0gT0lEIC0gaW5oZXJlbnRseSByZWFkLW9ubHkgdmFsdWVzXGZSCitcZkkjIE92ZXJyaWRlICd1bmFtZSBcLWEnIGFuZCBoYXJkY29kZWQgc3lzdGVtIE9JRCAtIGluaGVyZW50bHkgcmVhZC1vbmx5IHZhbHVlc1xmUgogc3lzRGVzY3IgICAgIFVuaXZlcnNhbCBUdXJpbmcgTWFjaGluZSBtayBJCiBzeXNPYmplY3RJRCAgLjEuMy42LjEuNC4xLjgwNzIuMy4yLjEwNjYKIAogXGZJIyBPdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBmcm9tICdjb25maWd1cmUnIC0gbWFrZXMgdGhlc2Ugb2JqZWN0cyByZWFkLW9ubHlcZlIKLXN5c0NvbnRhY3QgICBBbGFuLlR1cmluZ0BwcmUtY3MubWFuLmFjLnVrCitzeXNDb250YWN0ICAgQWxhbi5UdXJpbmdAcHJlXC1jcy5tYW4uYWMudWsKIHN5c05hbWUgICAgICB0b3J0b2lzZS50dXJpbmcuY29tCiBzeXNMb2NhdGlvbiAgQW4gaWRlYSBpbiB0aGUgbWluZCBvZiBBVAogCkBAIC0yNjIsNyArMjYyLDcgQEAKIC5SUwogLm5mCiBpZ25vcmVkaXNrIC9kZXYvcmRzay9jMHRbITZdZDAKLWlnbm9yZWRpc2sgL2Rldi9yZHNrL2MwdFswLTU3LTlhLWZdZDAKK2lnbm9yZWRpc2sgL2Rldi9yZHNrL2MwdFswXC01N1wtOWFcLWZdZDAKIC5maQogLlJFCiBlaXRoZXIgb2Ygd2hpY2ggcHJldmVudHMgYWxsIGRldmljZXMgXGZJL2Rldi9yZHNrL2MwdFxmUlhcZklkMFxmUgpAQCAtMzg4LDcgKzM4OCw3IEBACiAuUFAKIEEgbW9yZSBkZXRhaWxlZCBtb25pdG9yIGV4YW1wbGUgaXMgZ2l2ZW4gYnk6CiAuUlMKLW1vbml0b3IgLXUgbWUgLW8gaHJTV1J1bk5hbWUgImhpZ2ggcHJvY2VzcyBtZW1vcnkiIGhyU1dSdW5QZXJmTWVtID4gMTAwMDAKK21vbml0b3IgXC11IG1lIFwtbyBoclNXUnVuTmFtZSAiaGlnaCBwcm9jZXNzIG1lbW9yeSIgaHJTV1J1blBlcmZNZW0gPiAxMDAwMAogLlJFCiAuUFAKIFRoaXMgZGVmaW5lcyBhbiBleHBsaWNpdCBib29sZWFuIG1vbml0b3IgZW50cnksIGxvb2tpbmcgZm9yIGFueSBwcm9jZXNzCkBAIC00MDIsNyArNDAyLDcgQEAKIE9iamVjdHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmbHVjdHVhdGUgYXJvdW5kIHRoZSBzcGVjaWZpZWQgbGV2ZWwKIGFyZSBiZXR0ZXIgbW9uaXRvcmVkIHVzaW5nIGEgdGhyZXNob2xkIG1vbml0b3IgZW50cnk6IAogLlJTCi1tb25pdG9yIC1EIC1yIDEwICJuZXR3b3JrIHRyYWZmaWMiIGlmSW5PY3RldHMgMTAwMDAwMCA1MDAwMDAwCittb25pdG9yIFwtRCBcLXIgMTAgIm5ldHdvcmsgdHJhZmZpYyIgaWZJbk9jdGV0cyAxMDAwMDAwIDUwMDAwMDAKIC5SRQogLlBQCiBUaGlzIHdpbGwgc2VuZCBhIFxmQ210ZVRyaWdnZXJSaXNpbmdcZlIgdHJhcCB3aGVuZXZlciB0aGUgaW5jb21pbmcKQEAgLTQxMCwxMSArNDEwLDExIEBACiBhbmQgYSBjb3JyZXNwb25kaW5nIFxmQ210ZVRyaWdnZXJGYWxsaW5nXGZSIHRyYXAgd2hlbiBpdCBmYWxscyBiZWxvdwogMTAwIGtCL3MgYWdhaW4uCiAuUFAKLU5vdGUgdGhhdCB0aGlzIG1vbml0b3JzIHRoZSBkZWx0YXMgYmV0d2VlbiBzdWNjZXNzaXZlIHNhbXBsZXMgKFxmSS1EXGZSKQorTm90ZSB0aGF0IHRoaXMgbW9uaXRvcnMgdGhlIGRlbHRhcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc2FtcGxlcyAoXGZJXC1EXGZSKQogcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBzYW1wbGUgdmFsdWVzIHRoZW1zZWx2ZXMuICBUaGUgc2FtZSBlZmZlY3QKIGNvdWxkIGJlIG9idGFpbmVkIHVzaW5nOgogLlJTCi1tb25pdG9yIC1yIDEwICJuZXR3b3JrIHRyYWZmaWMiIGlmSW5PY3RldHMgLSAtIDEwMDAwMDAgNTAwMDAwMAorbW9uaXRvciBcLXIgMTAgIm5ldHdvcmsgdHJhZmZpYyIgaWZJbk9jdGV0cyBcLSBcLSAxMDAwMDAwIDUwMDAwMDAKIC5SRQogLlBQCiBUaGUgXGZJbGlua1VwRG93bk5vdGlmaWNhdGlvbnNcZlIgZGlyZWN0aXZlIGFib3ZlIGlzIGJyb2FkbHkKQEAgLTQyNCw4ICs0MjQsOCBAQAogbm90aWZpY2F0aW9uRXZlbnQgIGxpbmtVcFRyYXAgICAgbGlua1VwICAgaWZJbmRleCBpZkFkbWluU3RhdHVzIGlmT3BlclN0YXR1cwogbm90aWZpY2F0aW9uRXZlbnQgIGxpbmtEb3duVHJhcCAgbGlua0Rvd24gaWZJbmRleCBpZkFkbWluU3RhdHVzIGlmT3BlclN0YXR1cwogCi1tb25pdG9yICAtciA2MCAtZSBsaW5rVXBUcmFwICAgIkdlbmVyYXRlIGxpbmtVcCIgICBpZk9wZXJTdGF0dXMgIT0gMgotbW9uaXRvciAgLXIgNjAgLWUgbGlua0Rvd25UcmFwICJHZW5lcmF0ZSBsaW5rRG93biIgaWZPcGVyU3RhdHVzID09IDIKK21vbml0b3IgIFwtciA2MCBcLWUgbGlua1VwVHJhcCAgICJHZW5lcmF0ZSBsaW5rVXAiICAgaWZPcGVyU3RhdHVzICE9IDIKK21vbml0b3IgIFwtciA2MCBcLWUgbGlua0Rvd25UcmFwICJHZW5lcmF0ZSBsaW5rRG93biIgaWZPcGVyU3RhdHVzID09IDIKIC5maQogLlJFCiAuUFAKQEAgLTQzNywxMiArNDM3LDEyIEBACiBvZiAoYm9vbGVhbikgbW9uaXRvciBlbnRyaWVzOgogLlJTCiAubmYKLW1vbml0b3IJLW8gcHJOYW1lcyAgICAgIC1vIHByRXJyTWVzc2FnZSAgInByb2NUYWJsZSIgcHJFcnJvckZsYWcgICAhPSAwCi1tb25pdG9yCS1vIG1lbUVycm9yTmFtZSAtbyBtZW1Td2FwRXJyb3JNc2cgIm1lbW9yeSIgIG1lbVN3YXBFcnJvciAgIT0gMAotbW9uaXRvcgktbyBleHROYW1lcyAgICAgLW8gZXh0T3V0cHV0ICAgICAiZXh0VGFibGUiICBleHRSZXN1bHQgICAgICE9IDAKLW1vbml0b3IJLW8gZHNrUGF0aCAgICAgIC1vIGRza0Vycm9yTXNnICAgImRza1RhYmxlIiAgZHNrRXJyb3JGbGFnICAhPSAwCi1tb25pdG9yCS1vIGxhTmFtZXMgICAgICAtbyBsYUVyck1lc3NhZ2UgICJsYVRhYmxlIiAgIGxhRXJyb3JGbGFnICAgIT0gMAotbW9uaXRvcgktbyBmaWxlTmFtZSAgICAgLW8gZmlsZUVycm9yTXNnICAiZmlsZVRhYmxlIiBmaWxlRXJyb3JGbGFnICE9IDAKK21vbml0b3IJXC1vIHByTmFtZXMgICAgICBcLW8gcHJFcnJNZXNzYWdlICAicHJvY1RhYmxlIiBwckVycm9yRmxhZyAgICE9IDAKK21vbml0b3IJXC1vIG1lbUVycm9yTmFtZSBcLW8gbWVtU3dhcEVycm9yTXNnICJtZW1vcnkiICBtZW1Td2FwRXJyb3IgICE9IDAKK21vbml0b3IJXC1vIGV4dE5hbWVzICAgICBcLW8gZXh0T3V0cHV0ICAgICAiZXh0VGFibGUiICBleHRSZXN1bHQgICAgICE9IDAKK21vbml0b3IJXC1vIGRza1BhdGggICAgICBcLW8gZHNrRXJyb3JNc2cgICAiZHNrVGFibGUiICBkc2tFcnJvckZsYWcgICE9IDAKK21vbml0b3IJXC1vIGxhTmFtZXMgICAgICBcLW8gbGFFcnJNZXNzYWdlICAibGFUYWJsZSIgICBsYUVycm9yRmxhZyAgICE9IDAKK21vbml0b3IJXC1vIGZpbGVOYW1lICAgICBcLW8gZmlsZUVycm9yTXNnICAiZmlsZVRhYmxlIiBmaWxlRXJyb3JGbGFnICE9IDAKIC5maQogLlJFCiBhbmQgd2lsbCBzZW5kIGEgdHJhcCB3aGVuZXZlciBhbnkgb2YgdGhlc2UgZW50cmllcyBpbmRpY2F0ZSBhIHByb2JsZW0uCkBAIC00NTIsNyArNDUyLDcgQEAKIC5SUwogLm5mCiBzZXRFdmVudCAgIHByRml4SXQgIHByRXJyRml4ID0gMQotbW9uaXRvciAtZSBwckZpeEl0ICJwcm9jVGFibGUiIHByRXJyb3JGbGFnICAgIT0gMAorbW9uaXRvciBcLWUgcHJGaXhJdCAicHJvY1RhYmxlIiBwckVycm9yRmxhZyAgICE9IDAKIC5maQogLlJFCiAoYW5kIHNpbWlsYXJseSBmb3IgYW55IG9mIHRoZSBvdGhlciBcZklkZWZhdWx0TW9uaXRvclxmUiBlbnRyaWVzKS4KQEAgLTQ5NCwxMiArNDk0LDEyIEBACiAuU1MgIk1JQi1TcGVjaWZpYyBFeHRlbnNpb24gQ29tbWFuZHMiCiAuSSBPbmUtU2hvdAogLlJTCi0icGFzcyBbLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgorInBhc3MgW1wtcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCiAuUkUKIC5JUAogLkkgUGVyc2lzdGVudAogLlJTCi0icGFzc19wZXJzaXN0IFstcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCisicGFzc19wZXJzaXN0IFtcLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgogLlJFCiAuU1MgIkVtYmVkZGVkIFBlcmwgU3VwcG9ydCIKIElmIGVtYmVkZGVkIHBlcmwgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBhZ2VudCwgdGhlIGRlZmF1bHQKQEAgLTUxNyw3ICs1MTcsNyBAQAogLm5mCiBwZXJsIHVzZSBEYXRhOjpEdW1wZXI7CiBwZXJsIHN1YiBteXJvdXRpbmUgIHsgcHJpbnQgImdvdCBjYWxsZWQ6ICIsRHVtcGVyKEBfKSwiXFxuIjsgfQotcGVybCAkYWdlbnQtPnJlZ2lzdGVyKCdteWxpbmsnLCAnLjEuMy42LjEuODc2NScsIFxcJm15cm91dGluZSk7CitwZXJsICRhZ2VudFwtPnJlZ2lzdGVyKCdteWxpbmsnLCAnLjEuMy42LjEuODc2NScsIFxcJm15cm91dGluZSk7CiAuZmkKIC5SRQogLlBQCkBAIC01NDgsMTEgKzU0OCwxMSBAQAogU05NUCBhZ2VudHMgKHJ1bm5pbmcgb24gcmVtb3RlIHN5c3RlbXMpIG1pZ2h0IGJlOgogLlJTCiAubmYKLWNvbTJzZWMgLUNuIHJlbTFjb250ZXh0ICByZW0xdXNlciBkZWZhdWx0ICByZW1vdGVob3N0MQotY29tMnNlYyAtQ24gcmVtMmNvbnRleHQgIHJlbTJ1c2VyIGRlZmF1bHQgIHJlbW90ZWhvc3QyCitjb20yc2VjIFwtQ24gcmVtMWNvbnRleHQgIHJlbTF1c2VyIGRlZmF1bHQgIHJlbW90ZWhvc3QxCitjb20yc2VjIFwtQ24gcmVtMmNvbnRleHQgIHJlbTJ1c2VyIGRlZmF1bHQgIHJlbW90ZWhvc3QyCiAKLXByb3h5IC1DbiByZW0xY29udGV4dCAgLXYgMSAtYyBwdWJsaWMgIHJlbW90ZWhvc3QxICAuMS4zCi1wcm94eSAtQ24gcmVtMmNvbnRleHQgIC12IDEgLWMgcHVibGljICByZW1vdGVob3N0MiAgLjEuMworcHJveHkgXC1DbiByZW0xY29udGV4dCAgXC12IDEgLWMgcHVibGljICByZW1vdGVob3N0MSAgLjEuMworcHJveHkgXC1DbiByZW0yY29udGV4dCAgXC12IDEgLWMgcHVibGljICByZW1vdGVob3N0MiAgLjEuMwogLmZpCiAuUkUKIChwbHVzIHN1aXRhYmxlIGFjY2VzcyBjb250cm9sIGVudHJpZXMpLgpAQCAtNTcyLDcgKzU3Miw3IEBACiBvciBsaXN0ZW5pbmcgb24gYSBkaWZmZXJlbnQgcG9ydCBvbiB0aGUgc2FtZSBzeXN0ZW0pLAogd2hpbGUgaGFuZGxpbmcgdGhlIHJlc3QgaW50ZXJuYWxseToKIC5SUwotcHJveHkgLXYgMSAtYyBwdWJsaWMgIGxvY2FsaG9zdDo2MTYxICAuMS4zLjYuMS40LjEuOTkKK3Byb3h5IFwtdiAxIFwtYyBwdWJsaWMgIGxvY2FsaG9zdDo2MTYxICAuMS4zLjYuMS40LjEuOTkKIC5SRQogVGhpcyBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gbGluayB0b2dldGhlciB0d28gc2VwYXJhdGUgU05NUCBhZ2VudHMuCiAuUFAKQEAgLTU4Miw3ICs1ODIsNyBAQAogLm5mCiBcZkkjIHVzZXMgU05NUHYzIHRvIGFjY2VzcyB0aGUgTUlCIHRyZWUgLjEuMy42LjEuMi4xLjEgb24gJ3JlbW90ZWhvc3QnCiAjIGFuZCBtYXBzIHRoaXMgdG8gdGhlIGxvY2FsIHRyZWUgLjEuMy42LjEuMy4xMFxmUgotcHJveHkgLXYgMyAtbCBub0F1dGhOb1ByaXYgLXUgdXNlciByZW1vdGVob3N0IC4xLjMuNi4xLjMuMTAgLjEuMy42LjEuMi4xLjEKK3Byb3h5IFwtdiAzIFwtbCBub0F1dGhOb1ByaXYgXC11IHVzZXIgcmVtb3RlaG9zdCAuMS4zLjYuMS4zLjEwIC4xLjMuNi4xLjIuMS4xCiAuZmkKIC5SRQogLlNTIFNNVVggU3ViLUFnZW50cwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAuU0ggIkZJTEVTIgogU1lTQ09ORkRJUi9zbm1wL3NubXBkLmNvbmYKIC5TSCAiU0VFIEFMU08iCi1zbm1wY29uZigxKSwgc25tcGQuY29uZig1KSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgcmVhZF9jb25maWcoMykuCitzbm1wY29uZigxKSwgc25tcGQuY29uZig1KSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgbmV0c25tcF9jb25maWdfYXBpKDMpLgogLlwiIExvY2FsIFZhcmlhYmxlczoKIC5cIiAgbW9kZTogbnJvZmYKIC5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYgYi9tYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYKaW5kZXggZDFkYThiMy4uODExNDdjNyAxMDA2NDQKLS0tIGEvbWFuL3NubXBkLmludGVybmFsLjUuZGVmCisrKyBiL21hbi9zbm1wZC5pbnRlcm5hbC41LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QRC5JTlRFUk5BTCA1ICIwNSBEZWMgMjAwNSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QRC5JTlRFUk5BTCA1ICIwNiBEZWMgMjAwNSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wZC5pbnRlcm5hbCAtIGludGVybmFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5ldC1TTk1QIGFnZW50CiAuU0ggREVTQ1JJUFRJT04KQEAgLTg2LDcgKzg2LDcgQEAKIC5TSCAiRklMRVMiCiBTWVNDT05GRElSL3NubXAvc25tcGQuY29uZgogLlNIICJTRUUgQUxTTyIKLXNubXBjb25mKDEpLCBzbm1wZC5jb25mKDUpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCByZWFkX2NvbmZpZygzKS4KK3NubXBjb25mKDEpLCBzbm1wZC5jb25mKDUpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCBuZXRzbm1wX2NvbmZpZ19hcGkoMykuCiAuXCIgTG9jYWwgVmFyaWFibGVzOgogLlwiICBtb2RlOiBucm9mZgogLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9zbm1wZGVsdGEuMS5kZWYgYi9tYW4vc25tcGRlbHRhLjEuZGVmCmluZGV4IDZmYjAzMjYuLmU5NWE2OWIgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZGVsdGEuMS5kZWYKKysrIGIvbWFuL3NubXBkZWx0YS4xLmRlZgpAQCAtMTIsNyArMTIsNyBAQAogc25tcGRlbHRhIFwtIE1vbml0b3IgZGVsdGEgZGlmZmVyZW5jZXMgaW4gU05NUCBDb3VudGVyIHZhbHVlcwogLlNIIFNZTk9QU0lTCiAuQiBzbm1wZGVsdGEKLVsgQ09NTU9OIE9QVElPTlMgXSBbLUNmXSBbIC1DdCBdIFsgLUNzIF0gWyAtQ1MgXSBbIC1DbSBdIFsgLUNGIGNvbmZpZ2ZpbGUgXSBbIC1DbCBdIFsgLUNwIHBlcmlvZCBdIFsgLUNQIFBlYWtzIF0gWyAtQ2sgXSBbIC1DVCBdIEFHRU5UIE9JRCBbIE9JRCAuLi4gXQorWyBDT01NT04gT1BUSU9OUyBdIFtcLUNmXSBbIFwtQ3QgXSBbIFwtQ3MgXSBbIFwtQ1MgXSBbIFwtQ20gXSBbIFwtQ0YgY29uZmlnZmlsZSBdIFsgXC1DbCBdIFsgXC1DcCBwZXJpb2QgXSBbIFwtQ1AgUGVha3MgXSBbIFwtQ2sgXSBbIFwtQ1QgXSBBR0VOVCBPSUQgWyBPSUQgLi4uIF0KIC5TSCAiREVTQ1JJUFRJT04iCiAuQiBzbm1wZGVsdGEKIHdpbGwgbW9uaXRvciB0aGUgc3BlY2lmaWVkIGludGVnZXIgdmFsdWVkIE9JRHMsIGFuZCByZXBvcnQgY2hhbmdlcwpAQCAtMzgsNTEgKzM4LDUxIEBACiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgQ09NTU9OIE9QVElPTlMKIGFzIHdlbGwgYXMgdGhlaXIgZGVzY3JpcHRpb25zLgogLlRQCi0uQiAtQ2YKKy5CIFwtQ2YKIERvbid0IGZpeCBlcnJvcnMgYW5kIHJldHJ5IHRoZSByZXF1ZXN0LgogV2l0aG91dCB0aGlzIG9wdGlvbiwgaWYgbXVsdGlwbGUgb2lkcyBoYXZlIGJlZW4gc3BlY2lmaWVkIGZvcgogYSBzaW5nbGUgcmVxdWVzdCBhbmQgaWYgdGhlIHJlcXVlc3QgZm9yIG9uZSBvciBtb3JlIG9mIHRoZQogb2lkcyBmYWlscywgc25tcGRlbHRhIHdpbGwgcmV0cnkgdGhlIHJlcXVlc3Qgc28gdGhhdCBkYXRhIGZvcgogb2lkcyBhcGFydCBmcm9tIHRoZSBvbmVzIHRoYXQgZmFpbGVkIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuIAotU3BlY2lmeWluZyAtQ2YgdGVsbHMKK1NwZWNpZnlpbmcgXC1DZiB0ZWxscwogLkkgIHNubXBkZWx0YQogbm90IHRvIHJldHJ5IGEgcmVxdWVzdCwgZXZlbgogaWYgdGhlcmUgYXJlIG11bHRpcGxlIG9pZHMgc3BlY2lmaWVkLgogLlRQCi0uQiAtQ3QKKy5CIFwtQ3QKIEZsYWcgd2lsbCBkZXRlcm1pbmUgdGltZSBpbnRlcnZhbCBmcm9tIHRoZSBtb25pdG9yZWQgZW50aXR5LgogLlRQCi0uQiAtQ3MKKy5CIFwtQ3MKIEZsYWcgd2lsbCBkaXNwbGF5IGEgdGltZXN0YW1wLgogLlRQCi0uQiAtQ1MKKy5CIFwtQ1MKIEdlbmVyYXRlcyBhICJzdW0gY291bnQiIGluIGFkZGl0aW9uIHRvIHRoZSBpbmRpdmlkdWFsIGluc3RhbmNlCiBjb3VudHMuICBUaGUgInN1bSBjb3VudCIgaXMgdGhlIHRvdGFsIG9mIGFsbCB0aGUgaW5kaXZpZHVhbAogZGVsdGFzIGZvciBlYWNoIHRpbWUgcGVyaW9kLgogLlRQCi0uQiAtQ20KKy5CIFwtQ20KIFByaW50cyB0aGUgbWF4IHZhbHVlIGV2ZXIgYXR0YWluZWQuCiAuVFAKLS5CIC1DRiBjb25maWdmaWxlCisuQiBcLUNGIGNvbmZpZ2ZpbGUKIFRlbGxzCiAuQiBzbm1wZGVsdGEKIHRvIHJlYWQgaXQncyBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlLgogVGhpcyBvcHRpb25zIGFsbG93cyB0aGUgaW5wdXQgdG8gYmUgc2V0IHVwIGluIGFkdmFuY2UgcmF0aGVyCiB0aGFuIGhhdmluZyB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KIC5UUAotLkIgLUNsCisuQiBcLUNsCiBUZWxscwogLkIgc25tcGRlbHRhCiB0byB3cml0ZSBpdCdzIGNvbmZpZ3VyYXRpb24gdG8gZmlsZXMgd2hvc2UgbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgTUlCCi1pbnN0YW5jZXMgbW9uaXRvcmVkLiAgRm9yIGV4YW1wbGUsIHNubXBkZWx0YSAtQ2wgbG9jYWxob3N0IGlmSW5PY3RldHMuMQotd2lsbCBjcmVhdGUgYSBmaWxlICJsb2NhbGhvc3QtaWZJbk9jdGV0cy4xIi4KK2luc3RhbmNlcyBtb25pdG9yZWQuICBGb3IgZXhhbXBsZSwgc25tcGRlbHRhIFwtQ2wgbG9jYWxob3N0IGlmSW5PY3RldHMuMQord2lsbCBjcmVhdGUgYSBmaWxlICJsb2NhbGhvc3RcLWlmSW5PY3RldHMuMSIuCiAuVFAKLS5CIC1DcAorLkIgXC1DcAogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHBvbGxpbmcgcGVyaW9kcy4KIFBvbGxpbmcgY29uc3RpdHV0ZXMgc2VuZGluZyBhIHJlcXVlc3QgdG8gdGhlIGFnZW50LiBUaGUKIGRlZmF1bHQgcG9sbGluZyBwZXJpb2QgaXMgb25lIHNlY29uZC4KIC5UUAotLkIgLUNQIHBlYWtzCisuQiBcLUNQIHBlYWtzCiBTcGVjaWZpZXMgdGhlIHJlcG9ydGluZyBwZXJpb2QgaW4gbnVtYmVyIG9mIHBvbGxpbmcgcGVyaW9kcy4KIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgc25tcGRlbHRhIHBvbGxzIHRoZSBhZ2VudAogLkkgcGVha3MKQEAgLTkxLDI0ICs5MSwyNCBAQAogdGhlIHJlcG9ydGluZyBwZXJpb2QuIEluIGFkZGl0aW9uLCB0aGUgaGlnaGVzdCBwb2xsZWQKIHZhbHVlIHdpdGhpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCBpcyBzaG93bi4KIC5UUAotLkIgLUNrCi1XaGVuIHRoZSBwb2xsaW5nIHBlcmlvZCAoLUNwKSBpcyBhbiBpbmNyZW1lbnQgb2YgNjAgc2Vjb25kcwotYW5kIHRoZSB0aW1lc3RhbXAgaXMgZGlzcGxheWVkIGluIHRoZSBvdXRwdXQgKC1DcyksIHRoZW4KKy5CIFwtQ2sKK1doZW4gdGhlIHBvbGxpbmcgcGVyaW9kIChcLUNwKSBpcyBhbiBpbmNyZW1lbnQgb2YgNjAgc2Vjb25kcworYW5kIHRoZSB0aW1lc3RhbXAgaXMgZGlzcGxheWVkIGluIHRoZSBvdXRwdXQgKFwtQ3MpLCB0aGVuCiB0aGUgZGVmYXVsdCBkaXNwbGF5IHNob3dzIHRoZSB0aW1lc3RhbXAgaW4gdGhlIGZvcm1hdAogaGg6bW0gbW0vZGQuIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgdGltZXN0YW1wIGZvcm1hdAogdG8gYmUgaGg6bW06c3MgbW0vZGQuCiAuVFAKLS5CIC1DVAorLkIgXC1DVAogTWFrZXMgCiAuQiBzbm1wZGVsdGEKIHByaW50IGl0cyBvdXRwdXQgaW4gdGFidWxhciBmb3JtLgogLlRQCi0uQiAtQ3YgdmFycy9wa3QKKy5CIFwtQ3YgdmFycy9wa3QKIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb2lkcyBhbGxvd2VkIHRvIGJlIHBhY2thZ2VkCiBpbiBhIHNpbmdsZSBQRFUuIE11bHRpcGxlIFBEVXMgY2FuIGJlIGNyZWF0ZWQgaW4gYSBzaW5nbGUKIHJlcXVlc3QuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHZhcmlhYmxlcyBwZXIgcGFja2V0IGlzIDYwLgogVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIGEgcmVxdWVzdCByZXNwb25zZSByZXN1bHRzIGluIGFuCi1lcnJvciBiZWNhdWVzIHRoZSBwYWNrZXQgaXMgdG9vIGJpZy4KK2Vycm9yIGJlY2F1c2UgdGhlIHBhY2tldCBpcyB0b28gYmlnLgogLlBQCiBOb3RlIHRoYXQKIC5CIHNubXBkZWx0YQpAQCAtMTE4LDcgKzExOCw3IEBACiBtYW51YWwgcGFnZS4KIC5TSCBFWEFNUExFUwogLm5mCi0kIHNubXBkZWx0YSAtYyBwdWJsaWMgLXYgMSAtQ3MgbG9jYWxob3N0IElGLU1JQjo6aWZJblVjYXN0UGt0cy4zIElGLU1JQjo6aWZPdXRVY2FzdFBrdHMuMworJCBzbm1wZGVsdGEgXC1jIHB1YmxpYyBcLXYgMSBcLUNzIGxvY2FsaG9zdCBJRlwtTUlCOjppZkluVWNhc3RQa3RzLjMgSUZcLU1JQjo6aWZPdXRVY2FzdFBrdHMuMwogWzIwOjE1OjQzIDYvMTRdIGlmSW5VY2FzdFBrdHMuMyAvMSBzZWM6IDE1OAogWzIwOjE1OjQzIDYvMTRdIGlmT3V0VWNhc3RQa3RzLjMgLzEgc2VjOiAxNTgKIFsyMDoxNTo0NCA2LzE0XSBpZkluVWNhc3RQa3RzLjMgLzEgc2VjOiAxODQKQEAgLTEzNCw3ICsxMzQsNyBAQAogWzIwOjE1OjQ5IDYvMTRdIGlmSW5VY2FzdFBrdHMuMyAvMSBzZWM6IDE1OAogWzIwOjE1OjQ5IDYvMTRdIGlmT3V0VWNhc3RQa3RzLjMgLzEgc2VjOiAxNTgKIF5DCi0kIHNubXBkZWx0YSAtYyBwdWJsaWMgLXYgMSAtQ3MgLUNUIGxvY2FsaG9zdCBJRi1NSUI6aWZJblVjYXN0UGt0cy4zIElGLU1JQjppZk91dGNhc3RQa3RzLjMKKyQgc25tcGRlbHRhIFwtYyBwdWJsaWMgXC12IDEgXC1DcyBcLUNUIGxvY2FsaG9zdCBJRlwtTUlCOmlmSW5VY2FzdFBrdHMuMyBJRlwtTUlCOmlmT3V0Y2FzdFBrdHMuMwogbG9jYWxob3N0CWlmSW5VY2FzdFBrdHMuMwlpZk91dFVjYXN0UGt0cy4zCiBbMjA6MTU6NTkgNi8xNF0JMTg0LjAwCTE4NC4wMAogWzIwOjE2OjAwIDYvMTRdCTE1OC4wMAkxNTguMDAKQEAgLTE1Myw4ICsxNTMsOCBAQAogc2NyZWVuLgogLlBQCiAubmYKLSQgc25tcGRlbHRhIC1jIHB1YmxpYyAtdiAxIC1DdCAtQ3MgLUNTIC1DbSAtQ2wgLUNwIDYwIC1DUCA2MAorJCBzbm1wZGVsdGEgXC1jIHB1YmxpYyBcLXYgMSBcLUN0IFwtQ3MgXC1DUyBcLUNtIFwtQ2wgXC1DcCA2MCBcLUNQIDYwCiAgIGludGVybGluay5zdy5uZXQuY211LmVkdSAuMS4zLjYuMS4yLjEuMi4yLjEuMTYuMyAuMS4zLjYuMS4yLjEuMi4yLjEuMTYuNAotZmkKKy5maQogLlNIICJTRUUgQUxTTyIKIHNubXBjbWQoMSksIHZhcmlhYmxlcyg1KS4KZGlmZiAtLWdpdCBhL21hbi9zbm1wZGYuMS5kZWYgYi9tYW4vc25tcGRmLjEuZGVmCmluZGV4IDc2NTMzNDcuLjQwNjg0NWEgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZGYuMS5kZWYKKysrIGIvbWFuL3NubXBkZi4xLmRlZgpAQCAtNywxOSArNywxOSBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QREYgMSAiMjUgSnVsIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUERGIDEgIjI4IEphbiAyMDEzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBkZiAtIGRpc3BsYXkgZGlzayBzcGFjZSB1c2FnZSBvbiBhIG5ldHdvcmsgZW50aXR5IHZpYSBTTk1QCiAuU0ggU1lOT1BTSVMKIC5CIHNubXBkZgotW0NPTU1PTiBPUFRJT05TXSBbLUN1XSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1DdV0gW1wtQ2hdIEFHRU5UCiAuU0ggREVTQ1JJUFRJT04KIC5CIHNubXBkZgotaXMgc2ltcGx5IGEgbmV0d29ya2VkIHZlcmlzb24gb2YgdGhlIHR5cGljYWwgZGYgY29tbWFuZC4gIEl0CitpcyBzaW1wbHkgYSBuZXR3b3JrZWQgdmVyc2lvbiBvZiB0aGUgdHlwaWNhbCBkZiBjb21tYW5kLiAgSXQKIGNoZWNrcyB0aGUgZGlzayBzcGFjZSBvbiB0aGUgcmVtb3RlIG1hY2hpbmUgYnkgZXhhbWluaW5nIHRoZQotSE9TVC1SRVNPVVJDRVMtTUlCJ3MgaHJTdG9yYWdlVGFibGUgb3IgdGhlIFVDRC1TTk1QLU1JQidzIGRza1RhYmxlLgorSE9TVFwtUkVTT1VSQ0VTXC1NSUIncyBoclN0b3JhZ2VUYWJsZSBvciB0aGUgVUNEXC1TTk1QXC1NSUIncyBkc2tUYWJsZS4KIEJ5IGRlZmF1bHQsIHRoZSBoclN0b3JhZ2VUYWJsZSBpcyBwcmVmZXJyZWQgYXMgaXQgdHlwaWNhbGx5IGNvbnRhaW5zCi1tb3JlIGluZm9ybWF0aW9uLiAgSG93ZXZlciwgdGhlIC1DdSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHNubXBkZgorbW9yZSBpbmZvcm1hdGlvbi4gIEhvd2V2ZXIsIHRoZSBcLUN1IGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gc25tcGRmCiB0byBmb3JjZSB0aGUgdXNhZ2Ugb2YgdGhlIGRza1RhYmxlLgogLlBQCiBBR0VOVCBpZGVudGlmaWVzIGEgdGFyZ2V0IFNOTVAgYWdlbnQsIHdoaWNoIGlzIGluc3RydW1lbnRlZApAQCAtNDQsMTYgKzQ0LDIyIEBACiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgQ09NTU9OIE9QVElPTlMKIGFzIHdlbGwgYXMgdGhlaXIgZGVzY3JpcHRpb25zLgogLlRQCi0uQiAtQ3UKKy5CIFwtQ3UKIEZvcmNlcyB0aGUgY29tbWFuZCB0byB1c2UgZHNrVGFibGUgaW4gbWliCi1VQ0QtU05NUC1NSUIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB0byBkZXRlcm1pbmUKK1VDRFwtU05NUFwtTUlCIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdG8gZGV0ZXJtaW5lCiB0aGUgc3RvcmFnZSBpbmZvcm1hdGlvbi4gR2VuZXJhbGx5LCB0aGUgZGVmYXVsdAotdXNlIG9mIGhyU3RvcmFnZVRhYmxlIGluIG1pYiBIT1NULVJFU09VUkNFUy1NSUIKK3VzZSBvZiBoclN0b3JhZ2VUYWJsZSBpbiBtaWIgSE9TVFwtUkVTT1VSQ0VTXC1NSUIKIGlzIHByZWZlcnJlZCBiZWNhdXNlIGl0IHR5cGljYWxseSBjb250YWlucwogbW9yZSBpbmZvcm1hdGlvbi4KKy5UUAorLkIgXC1DaAorUHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IChpLmUuIE1pQiwgR2lCLCBUaUIpCisuVFAKKy5CIFwtQ0gKK1ByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIFNJIGZvcm1hdCAoaS5lLiBNQiwgR0IsIFRCKQogLlNIICJFWEFNUExFUyIKIC5QUAotJSBzbm1wZGYgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdAorJSBzbm1wZGYgXC12IDJjIFwtYyBwdWJsaWMgbG9jYWxob3N0CiAuUFAKIC5uZgogRGVzY3JpcHRpb24gICAgICAgc2l6ZSAoa0IpICAgICAgICAgVXNlZCAgICBBdmFpbGFibGUgVXNlZCUKZGlmZiAtLWdpdCBhL21hbi9zbm1wZ2V0LjEuZGVmIGIvbWFuL3NubXBnZXQuMS5kZWYKaW5kZXggZWFiZTkwMi4uMGVjYWMxOSAxMDA2NDQKLS0tIGEvbWFuL3NubXBnZXQuMS5kZWYKKysrIGIvbWFuL3NubXBnZXQuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtMjgsNyArMjgsNyBAQAogc25tcGdldCAtIGNvbW11bmljYXRlcyB3aXRoIGEgbmV0d29yayBlbnRpdHkgdXNpbmcgU05NUCBHRVQgcmVxdWVzdHMKIC5TSCBTWU5PUFNJUwogLkIgc25tcGdldAotW0NPTU1PTiBPUFRJT05TXSBbLUNmXSBBR0VOVCBPSUQgW09JRF0uLi4KK1tDT01NT04gT1BUSU9OU10gW1wtQ2ZdIEFHRU5UIE9JRCBbT0lEXS4uLgogLlNIIERFU0NSSVBUSU9OCiAuQiBzbm1wZ2V0CiBpcyBhbiBTTk1QIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU05NUCBHRVQgcmVxdWVzdCB0byBxdWVyeSBmb3IKQEAgLTM4LDkgKzM4LDkgQEAKIC5JUiB2YXJpYWJsZXMoNSkgLgogLlNIICJPUFRJT05TIgogLlRQIDgKLS5CIC1DZgorLkIgXC1DZgogSWYKLS5CIC1DZgorLkIgXC1DZgogaXMKIC5JIG5vdAogc3BlY2lmaWVkLCBzb21lIGFwcGxpY2F0aW9ucwpAQCAtNTUsMTQgKzU1LDE0IEBACiB0YWtlcyB0aGUgY29tbW9uIG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZQogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UuICAKLU5vdGUgdGhhdAorTm90ZSB0aGF0IAogLkIgc25tcGdldAotUkVRVUlSRVMgIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIGFnZW50IHRvIHF1ZXJ5Ci1hbmQgYXQgbGVhc3Qgb25lIE9JRCBhcmd1bWVudCwgYXMgZGVzY3JpYmVkIHRoZXJlLgorUkVRVUlSRVMgYW4gYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgYWdlbnQgdG8gcXVlcnkKK2FuZCBhdCBsZWFzdCBvbmUgT0lEIGFyZ3VtZW50LCBhcyBkZXNjcmliZWQgdGhlcmUuIAogLlNIICJFWEFNUExFUyIKIFRoZSBjb21tYW5kOgogLlBQCi0gICAgc25tcGdldCAtYyBwdWJsaWMgemV1cyBzeXN0ZW0uc3lzRGVzY3IuMAorICAgIHNubXBnZXQgXC1jIHB1YmxpYyB6ZXVzIHN5c3RlbS5zeXNEZXNjci4wCiAuUFAKIHdpbGwgcmV0cmlldmUgdGhlIHZhcmlhYmxlIHN5c3RlbS5zeXNEZXNjci4wIGZyb20gdGhlIGhvc3QgCiAuQiB6ZXVzIApAQCAtNzgsMTMgKzc4LDEzIEBACiB2YXJpYWJsZXMgaW4gdGhlIHJlcXVlc3QsIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmVzZW50IHdpdGhvdXQgdGhlIGJhZAogdmFyaWFibGUuCiAuUFAKLUhlcmUgaXMgYW5vdGhlciBleGFtcGxlLiBUaGUgLWMgYW5kIC12IG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIAorSGVyZSBpcyBhbm90aGVyIGV4YW1wbGUuIFRoZSBcLWMgYW5kIFwtdiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSAKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlLiAoTm90ZSB0aGF0IHN5c3RlbS5zeXNVcFRpbWUgaXMgYW4gaW5jb21wbGV0ZQogT0lELCBhcyBpdCBuZWVkcyB0aGUgLjAgaW5kZXggYXBwZW5kZWQgdG8gaXQpOgogLlBQCiAubmYKLSAgICBzbm1wZ2V0IC12MSAtQ2YgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzVXBUaW1lIHN5c3RlbS5zeXNDb250YWN0LjAKKyAgICBzbm1wZ2V0IFwtdjEgXC1DZiBcLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzVXBUaW1lIHN5c3RlbS5zeXNDb250YWN0LjAKIC5maQogLlBQCiBUaGlzIGV4YW1wbGUgd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZzoKQEAgLTk3LDcgKzk3LDcgQEAKIC5QUAogU2ltaWxhcmx5LCB0aGUgY29tbWFuZDoKIC5uZgotICAgIHNubXBnZXQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c1VwVGltZSBzeXN0ZW0uc3lzQ29udGFjdC4wCisgICAgc25tcGdldCBcLXYxIFwtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNVcFRpbWUgc3lzdGVtLnN5c0NvbnRhY3QuMAogLmZpCiAuUFAKIFdpbGwgcmV0dXJuOgpAQCAtMTEyLDcgKzExMiw3IEBACiAuUFAKIFdpdGggdGhlCiAuQgotLUNmCitcLUNmCiBmbGFnIHNwZWNpZmllZCB0aGUgYXBwbGljYXRpb24gd2lsbCBub3QgdHJ5IHRvIGZpeCB0aGUgUERVIGZvciB5b3UuCiAuU0ggIlNFRSBBTFNPIgogc25tcGNtZCgxKSwgc25tcHdhbGsoMSksIHZhcmlhYmxlcyg1KS4KZGlmZiAtLWdpdCBhL21hbi9zbm1wZ2V0bmV4dC4xLmRlZiBiL21hbi9zbm1wZ2V0bmV4dC4xLmRlZgppbmRleCAzYjEzZDRkLi5lNmM2ZTYwIDEwMDY0NAotLS0gYS9tYW4vc25tcGdldG5leHQuMS5kZWYKKysrIGIvbWFuL3NubXBnZXRuZXh0LjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTI4LDkgKzI4LDkgQEAKIHNubXBnZXRuZXh0IC0gY29tbXVuaWNhdGVzIHdpdGggYSBuZXR3b3JrIGVudGl0eSB1c2luZyBTTk1QIEdFVE5FWFQgcmVxdWVzdHMKIC5TSCBTWU5PUFNJUwogLkIgc25tcGdldG5leHQKLVtDT01NT04gT1BUSU9OU10gWy1DZl0gQUdFTlQgT0lEIFtPSURdLi4uCitbQ09NTU9OIE9QVElPTlNdIFtcLUNmXSBBR0VOVCBPSUQgW09JRF0uLi4KIC5TSCBERVNDUklQVElPTgotLkIgc25tcGdldAorLkIgc25tcGdldG5leHQKIGlzIGFuIFNOTVAgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBTTk1QIEdFVE5FWFQgcmVxdWVzdCB0byBxdWVyeSBmb3IKIGluZm9ybWF0aW9uIG9uIGEgbmV0d29yayBlbnRpdHkuICBPbmUgb3IgbW9yZSBvYmplY3QgaWRlbnRpZmllcnMKIChPSURzKSBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuICBFYWNoIHZhcmlhYmxlCkBAIC00MSw3ICs0MSw3IEBACiAuUFAKIEZvciBleGFtcGxlOgogLlBQCi1zbm1wZ2V0bmV4dCAtYyBwdWJsaWMgemV1cyBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZlR5cGUuMQorc25tcGdldG5leHQgXC1jIHB1YmxpYyB6ZXVzIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmVHlwZS4xCiAuUFAKIHdpbGwgcmV0cmlldmUgdGhlIHZhcmlhYmxlIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmVHlwZS4yOgogLlBQCkBAIC01MCwxMSArNTAsMTEgQEAKIElmIHRoZSBuZXR3b3JrIGVudGl0eSBoYXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYWNrZXQsIGFuCiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgc2hvd24sIGhlbHBpbmcgdG8gcGlucG9pbnQgaW4gd2hhdCB3YXkgdGhlCiByZXF1ZXN0IHdhcyBtYWxmb3JtZWQuCi0uU0ggT1BUSU9OUworLlNIICJPUFRJT05TIgogLlRQIDgKLS5CIC1DZgorLkIgXC1DZgogSWYKLS5CIC1DZgorLkIgXC1DZgogaXMKIC5JIG5vdAogc3BlY2lmaWVkLCBzb21lIGFwcGxpY2F0aW9ucwpAQCAtNjksNyArNjksNyBAQAogdGFrZXMgdGhlIGNvbW1vbiBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlLgotTm90ZSB0aGF0CitOb3RlIHRoYXQgCiAuQiBzbm1wZ2V0bmV4dAogUkVRVUlSRVMgYW4gYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgYWdlbnQgdG8gcXVlcnkKIGFuZCBhdCBsZWFzdCBvbmUgT0lEIGFyZ3VtZW50LCBhcyBkZXNjcmliZWQgdGhlcmUuCmRpZmYgLS1naXQgYS9tYW4vc25tcG5ldHN0YXQuMS5kZWYgYi9tYW4vc25tcG5ldHN0YXQuMS5kZWYKaW5kZXggOGUxNDUwYS4uNDUwYWI3ZiAxMDA2NDQKLS0tIGEvbWFuL3NubXBuZXRzdGF0LjEuZGVmCisrKyBiL21hbi9zbm1wbmV0c3RhdC4xLmRlZgpAQCAtMTIsNyArMTIsNyBAQAogLlwiIGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiAKIC5cIiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIENNVSBub3QgYmUKIC5cIiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKLS5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICAKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCiAuXCIgCiAuXCIgQ01VIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKIC5cIiBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwKQEAgLTU4LDIxICs1OCwyMSBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QTkVUU1RBVCAxICIyMCBKYW4gMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QTkVUU1RBVCAxICIwNCBOb3YgMjAxMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wbmV0c3RhdCBcLSBkaXNwbGF5IG5ldHdvcmtpbmcgc3RhdHVzIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBuZXR3b3JrIGVudGl0eSB2aWEgU05NUAogLlNIIFNZTk9QU0lTCiAuQiBzbm1wbmV0c3RhdAotW0NPTU1PTiBPUFRJT05TXSBbLUNhXSBbLUNuXSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1DYV0gW1wtQ25dIFtcLUN2XSBbXC1DZiBhZGRyZXNzX2ZhbWlseV0gQUdFTlQKIC5icgogLkIgc25tcG5ldHN0YXQKLVtDT01NT04gT1BUSU9OU10gWy1DaV0gWy1Db10gWy1Dcl0gWy1Dbl0gWy1Dc10gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ3JdIFtcLUNuXSBbXC1Ddl0gW1wtQ2YgYWRkcmVzc19mYW1pbHldIEFHRU5UCiAuYnIKIC5CIHNubXBuZXRzdGF0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2ldIFstQ25dIFstQ0kgaW50ZXJmYWNlXSBBR0VOVCBbaW50ZXJ2YWxdCitbQ09NTU9OIE9QVElPTlNdIFtcLUNpXSBbXC1DIG8gfCBiIHwgZF0gW1wtQ25dIFtcLUN2XSBbXC1DSSBpbnRlcmZhY2VdIFtcLUN3IGludGVydmFsXSBBR0VOVAogLmJyCiAuQiBzbm1wbmV0c3RhdAotW0NPTU1PTiBPUFRJT05TXSBbLUNhXSBbLUNuXSBbLUNzXSBbLUNwIHByb3RvY29sXSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1Dc1tzXV0gW1wtQ3AgcHJvdG9jb2xdIEFHRU5UCiAuU0ggREVTQ1JJUFRJT04KIFRoZQogLkIgc25tcG5ldHN0YXQgCkBAIC05MSw2ICs5MSwxMiBAQAogdHJhZmZpYyBvbiB0aGUgY29uZmlndXJlZCBuZXR3b3JrIGludGVyZmFjZXMuCiBUaGUgZm91cnRoIGZvcm0gZGlzcGxheXMgc3RhdGlzdGljcyBhYm91dCB0aGUgbmFtZWQgcHJvdG9jb2wuCiAuUFAKKy5CIHNubXBuZXRzdGF0Cit3aWxsIGlzc3VlIEdFVEJVTEsgcmVxdWVzdHMgdG8gcXVlcnkgZm9yIGluZm9ybWF0aW9uCitpZiBhdCBsZWFzdCBwcm90b2NvbCB2ZXJzaW9uCisuSSB2MgoraXMgdXNlZC4KKy5QUAogQUdFTlQgaWRlbnRpZmllcyBhIHRhcmdldCBTTk1QIGFnZW50LCB3aGljaCBpcwogaW5zdHJ1bWVudGVkIHRvIG1vbml0b3IgdGhlIGdpdmVuIG9iamVjdHMuCiBBdCBpdHMgc2ltcGxlc3QsIHRoZSBBR0VOVCBzcGVjaWZpY2F0aW9uIHdpbGwKQEAgLTEwOSwxOCArMTE1LDMyIEBACiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgY29tbW9uIG9wdGlvbnMKIGFzIHdlbGwgYXMgdGhlaXIgZGVzY3JpcHRpb25zLgogLlBQCisuQiBcLUNMCit1c2UgdGhlIGxlZ2FjeSBTTk1QIE1JQiBlbGVtZW50cywgbm90IHRoZSBtb2Rlcm4gSVAgdmVyc2lvbiBhZ25vc3RpYwordGFibGVzLiBcZklzbm1wbmV0c3RhdFxmUiAgd2lsbCBhdXRvbWF0aWNhbGx5IGZhbGwgYmFjayB0byB0aGUgbGVnYWN5Cit0YWJsZXMgaWYgdGhlIG1vZGVybiBvbmVzIGFyZSBub3QgYXZhaWxhYmxlLgorLlBQCiAuQiBcLUNhCiBXaXRoIHRoZSBkZWZhdWx0IGRpc3BsYXksCiBzaG93IHRoZSBzdGF0ZSBvZiBhbGwgc29ja2V0czsgbm9ybWFsbHkgc29ja2V0cyB1c2VkIGJ5CiBzZXJ2ZXIgcHJvY2Vzc2VzIGFyZSBub3Qgc2hvd24uCiAuUFAKKy5CSSBcLUNmICIgYWRkcmVzc19mYW1pbHkiCitPbmx5IHNob3cgZW50cmllcyBmb3IgdGhlIHNlbGVjdGVkIGFkZHJlc3MgZmFtaWx5IChpbmV0LCBpbmV0NikKKy5QUAogLkIgXC1DaQogU2hvdyB0aGUgc3RhdGUgb2YgYWxsIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZXMuCi1UaGUgIGludGVyZmFjZSAgZGlzcGxheSAgcHJvdmlkZXMgIGEgIHRhYmxlICBvZiBjdW11bGF0aXZlCitUaGUgaW50ZXJmYWNlIGRpc3BsYXkgcHJvdmlkZXMgYSB0YWJsZSBvZiBjdW11bGF0aXZlCiBzdGF0aXN0aWNzIHJlZ2FyZGluZyBwYWNrZXRzIHRyYW5zZmVycmVkLCBlcnJvcnMsIGFuZCBjb2xsaXNpb25zLgotVGhlICBuZXR3b3JrIGFkZHJlc3NlcyBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgbWF4aW11bSB0cmFuc21pc3Npb24gCitUaGUgbmV0d29yayBhZGRyZXNzZXMgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIAogdW5pdCAoYGBtdHUnJykgYXJlIGFsc28gZGlzcGxheWVkLgogLlBQCisuQiBcLUNkCitBZGQgZHJvcHBlZCBwYWNrZXRzIHRvIHRoZSBpbnRlcmZhY2UgZGlzcGxheS4KKy5QUAorLkIgXC1DYgorU2hvdyBhbiBleHRlbmRlZCBpbnRlcmZhY2Ugc3RhdHVzLCBnaXZpbmcgb2N0ZXRzIGluIGFkZGl0aW9uIHRvIHBhY2tldHMuCisuUFAKIC5CIFwtQ28KIFNob3cgYW4gYWJicmV2aWF0ZWQgaW50ZXJmYWNlIHN0YXR1cywgZ2l2aW5nIG9jdGV0cyBpbiBwbGFjZSBvZiBwYWNrZXRzLgogVGhpcyBpcyB1c2VmdWwgd2hlbiBlbnF1aXJpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIEZyYW1lLVJlbGF5IGNpcmN1aXRzKQpAQCAtMTM5LDYgKzE1OSwxMCBAQAogc3ltYm9saWNhbGx5KS4KIFRoaXMgb3B0aW9uIG1heSBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBkaXNwbGF5IGZvcm1hdHMuCiAuUFAKKy5CIFwtQ3YKK0FsbG93IGxvbmcgaG9zdCBvciBzZXJ2aWNlIG5hbWVzIHRvIGJyZWFrIHRoZSBjb2x1bW5hciBvdXRwdXQuCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgZGlzcGxheSBmb3JtYXRzLgorLlBQCiAuQkkgXC1DcCAiIHByb3RvY29sIgogU2hvdyBzdGF0aXN0aWNzIGFib3V0IAogLklSIHByb3RvY29sLApAQCAtMTUyLDE5ICsxNzYsMjAgQEAKIGlzIHVua25vd24gb3IgaWYgdGhlcmUgaXMgbm8gc3RhdGlzdGljcyByb3V0aW5lIGZvciBpdC4KIC5QUAogLkIgXC1DcwotU2hvdyBwZXItcHJvdG9jb2wgc3RhdGlzdGljcy4gIFdoZW4gdXNlZCB3aXRoIHRoZQotLkIgXC1Dcgotb3B0aW9uLCBzaG93IHJvdXRpbmcgc3RhdGlzdGljcyBpbnN0ZWFkLgorU2hvdyBwZXItcHJvdG9jb2wgc3RhdGlzdGljcy4KK0lmIHRoaXMgaXMgZHVwbGljYXRlZCAoLUNzcykgc3RhdGlzdGljcyBlbnRyaWVzIHdoaWNoIGFyZSB6ZXJvIHdpbGwKK2JlIHN1cHByZXNzZWQuCiAuUFAKIC5CIFwtQ3IKIFNob3cgdGhlIHJvdXRpbmcgdGFibGVzLgotV2hlbgotLkIgXC1DcwotaXMgYWxzbyBwcmVzZW50LCBzaG93IHBlci1wcm90b2NvbCByb3V0aW5nIHN0YXRpc3RpY3MgaW5zdGVhZCBvZiAKLXRoZSByb3V0aW5nIHRhYmxlcy4KIC5QUAotV2hlbiAgc25tcG5ldHN0YXQgaXMgaW52b2tlZCB3aXRoIGFuIGludGVydmFsIGFyZ3VtZW50LCBpdAotZGlzcGxheXMgYSBydW5uaW5nIGNvdW50IG9mIHN0YXRpc3RpY3MgcmVsYXRlZCB0byAgbmV0d29yaworLkJJIFwtQ1IgIiByZXBlYXRlcnMiCitGb3IgR0VUQlVMSyByZXF1ZXN0cywKKy5JIHJlcGVhdGVycworc3BlY2lmaWVzIHRoZSBtYXgtcmVwZWF0ZXJzIHZhbHVlIHRvIHVzZS4KKy5QUAorV2hlbiBzbm1wbmV0c3RhdCBpcyBpbnZva2VkIHdpdGggYW4gaW50ZXJ2YWwgYXJndW1lbnQsIGl0CitkaXNwbGF5cyBhIHJ1bm5pbmcgY291bnQgb2Ygc3RhdGlzdGljcyByZWxhdGVkIHRvIG5ldHdvcmsKIGludGVyZmFjZXMuCiAuSSBpbnRlcnZhbAogaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4KQEAgLTE3Myw0MyArMTk4LDQzIEBACiAuSSBUaGUgQWN0aXZlIFNvY2tldHMgRGlzcGxheSAoZGVmYXVsdCkKIC5QUAogVGhlIGRlZmF1bHQgZGlzcGxheSwgZm9yIGFjdGl2ZSBzb2NrZXRzLCBzaG93cyB0aGUgbG9jYWwKLWFuZCByZW1vdGUgYWRkcmVzc2VzLCBwcm90b2NvbCwgYW5kIHRoZSBpbnRlcm5hbCBzdGF0ZSAgb2YKLXRoZSAgIHByb3RvY29sLiAgICBBZGRyZXNzICAgZm9ybWF0cyAgIGFyZSAgIG9mICB0aGUgIGZvcm0KLWBgaG9zdC5wb3J0Jycgb3IgYGBuZXR3b3JrLnBvcnQnJyBpZiAgYSAgc29ja2V0J3MgIGFkZHJlc3MKLXNwZWNpZmllcyAgYSAgbmV0d29yayAgYnV0IG5vIHNwZWNpZmljIGhvc3QgYWRkcmVzcy4gIFdoZW4KK2FuZCByZW1vdGUgYWRkcmVzc2VzLCBwcm90b2NvbCwgYW5kIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZgordGhlIHByb3RvY29sLiAgQWRkcmVzcyBmb3JtYXRzIGFyZSBvZiB0aGUgZm9ybQorYGBob3N0LnBvcnQnJyBvciBgYG5ldHdvcmsucG9ydCcnIGlmIGEgc29ja2V0J3MgYWRkcmVzcworc3BlY2lmaWVzIGEgbmV0d29yayBidXQgbm8gc3BlY2lmaWMgaG9zdCBhZGRyZXNzLiAgV2hlbgoga25vd24sIHRoZSBob3N0IGFuZCBuZXR3b3JrIGFkZHJlc3NlcyBhcmUgZGlzcGxheWVkIHN5bWJvbGljYWxseQotYWNjb3JkaW5nICAgdG8gIHRoZSAgZGF0YSAgYmFzZXMgCi0uSSAvZXRjL2hvc3RzICBhbmQKK2FjY29yZGluZyB0byB0aGUgZGF0YWJhc2VzIAorLkkgL2V0Yy9ob3N0cyBhbmQKIC5JUiAvZXRjL25ldHdvcmtzLAotcmVzcGVjdGl2ZWx5LiAgSWYgYSBzeW1ib2xpYyAgbmFtZSAgZm9yICBhbgotYWRkcmVzcyAgaXMgdW5rbm93biwgb3IgaWYgdGhlCityZXNwZWN0aXZlbHkuICBJZiBhIHN5bWJvbGljIG5hbWUgZm9yIGFuCithZGRyZXNzIGlzIHVua25vd24sIG9yIGlmIHRoZQogLkIgXC1Dbgogb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlCi1hZGRyZXNzIGlzIHByaW50ZWQgbnVtZXJpY2FsbHksIGFjY29yZGluZyB0byAgdGhlICBhZGRyZXNzCithZGRyZXNzIGlzIHByaW50ZWQgbnVtZXJpY2FsbHksIGFjY29yZGluZyB0byB0aGUgYWRkcmVzcwogZmFtaWx5LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBJbnRlcm5ldCBgYGRvdAotZm9ybWF0LCcnIHJlZmVyICB0bworZm9ybWF0LCcnIHJlZmVyIHRvCiAuSVIgaW5ldCgzTikuCi1VbnNwZWNpZmllZCwgIG9yICBgYHdpbGRjYXJkJycsIGFkZHJlc3NlcyBhbmQgcG9ydHMgYXBwZWFyIGFzIGBgKicnLgorVW5zcGVjaWZpZWQsIG9yIGBgd2lsZGNhcmQnJywgYWRkcmVzc2VzIGFuZCBwb3J0cyBhcHBlYXIgYXMgYGAqJycuCiAuUFAKIC5JIFRoZSBJbnRlcmZhY2UgRGlzcGxheQogLlBQCi1UaGUgIGludGVyZmFjZSAgZGlzcGxheSAgcHJvdmlkZXMgIGEgIHRhYmxlICBvZiBjdW11bGF0aXZlCitUaGUgaW50ZXJmYWNlIGRpc3BsYXkgcHJvdmlkZXMgYSB0YWJsZSBvZiBjdW11bGF0aXZlCiBzdGF0aXN0aWNzIHJlZ2FyZGluZyBwYWNrZXRzIHRyYW5zZmVycmVkLCBlcnJvcnMsIGFuZCBjb2wtCi1saXNpb25zLiAgIFRoZSAgbmV0d29yayBhZGRyZXNzZXMgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlCitsaXNpb25zLiAgVGhlIG5ldHdvcmsgYWRkcmVzc2VzIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZQogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAoYGBtdHUnJykgYXJlIGFsc28gZGlzcGxheWVkLgogLlBQCiAuSSBUaGUgUm91dGluZyBUYWJsZSBEaXNwbGF5CiAuUFAKLVRoZSByb3V0aW5nIHRhYmxlIGRpc3BsYXkgaW5kaWNhdGVzIHRoZSAgYXZhaWxhYmxlICByb3V0ZXMKLWFuZCAgdGhlaXIgIHN0YXR1cy4gICBFYWNoIHJvdXRlIGNvbnNpc3RzIG9mIGEgZGVzdGluYXRpb24KLWhvc3Qgb3IgbmV0d29yayBhbmQgYSBnYXRld2F5IHRvIHVzZSBpbiAgZm9yd2FyZGluZyAgcGFjay0KLWV0cy4gICBUaGUgZmxhZ3MgZmllbGQgc2hvd3MgdGhlIHN0YXRlIG9mIHRoZSByb3V0ZSAoYGBVJycKLWlmIGBgdXAnJyksIHdoZXRoZXIgdGhlIHJvdXRlIGlzICB0byAgYSAgZ2F0ZXdheSAgKGBgRycnKSwKLXdoZXRoZXIgIHRoZSAgcm91dGUgIHdhcyBjcmVhdGVkIGR5bmFtaWNhbGx5IGJ5IGEgcmVkaXJlY3QKLShgYEQnJyksIGFuZCB3aGV0aGVyIHRoZSByb3V0ZSAgaGFzICBiZWVuICBtb2RpZmllZCAgYnkgIGEKLXJlZGlyZWN0ICAoYGBNJycpLiAgIERpcmVjdCAgcm91dGVzICBhcmUgIGNyZWF0ZWQgZm9yIGVhY2gKLWludGVyZmFjZSBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaG9zdDsgIHRoZSAgZ2F0ZXdheSAgZmllbGQKLWZvciAgc3VjaCBlbnRyaWVzIHNob3dzIHRoZSBhZGRyZXNzIG9mIHRoZSBvdXRnb2luZyBpbnRlci0KK1RoZSByb3V0aW5nIHRhYmxlIGRpc3BsYXkgaW5kaWNhdGVzIHRoZSBhdmFpbGFibGUgcm91dGVzCithbmQgdGhlaXIgc3RhdHVzLiAgRWFjaCByb3V0ZSBjb25zaXN0cyBvZiBhIGRlc3RpbmF0aW9uCitob3N0IG9yIG5ldHdvcmsgYW5kIGEgZ2F0ZXdheSB0byB1c2UgaW4gZm9yd2FyZGluZyBwYWNrLQorZXRzLiAgVGhlIGZsYWdzIGZpZWxkIHNob3dzIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGUgKGBgVScnCitpZiBgYHVwJycpLCB3aGV0aGVyIHRoZSByb3V0ZSBpcyB0byBhIGdhdGV3YXkgKGBgRycnKSwKK3doZXRoZXIgdGhlIHJvdXRlIHdhcyBjcmVhdGVkIGR5bmFtaWNhbGx5IGJ5IGEgcmVkaXJlY3QKKyhgYEQnJyksIGFuZCB3aGV0aGVyIHRoZSByb3V0ZSBoYXMgYmVlbiBtb2RpZmllZCBieSBhCityZWRpcmVjdCAoYGBNJycpLiAgRGlyZWN0IHJvdXRlcyBhcmUgY3JlYXRlZCBmb3IgZWFjaAoraW50ZXJmYWNlIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBob3N0OyB0aGUgZ2F0ZXdheSBmaWVsZAorZm9yIHN1Y2ggZW50cmllcyBzaG93cyB0aGUgYWRkcmVzcyBvZiB0aGUgb3V0Z29pbmcgaW50ZXItCiBmYWNlLiAgVGhlIGludGVyZmFjZSBlbnRyeSBpbmRpY2F0ZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlCiB1dGlsaXplZCBmb3IgdGhlIHJvdXRlLgogLlBQCkBAIC0yMjAsMTAgKzI0NSwxMCBAQAogaXMgaW52b2tlZCB3aXRoIGFuCiAuSSBpbnRlcnZhbAogYXJndW1lbnQsIGl0Ci1kaXNwbGF5cyBhIHJ1bm5pbmcgY291bnQgb2Ygc3RhdGlzdGljcyByZWxhdGVkIHRvICBuZXR3b3JrCi1pbnRlcmZhY2VzLiAgIFRoaXMgIGRpc3BsYXkgIGNvbnNpc3RzICBvZiBhIGNvbHVtbiBmb3IgdGhlCitkaXNwbGF5cyBhIHJ1bm5pbmcgY291bnQgb2Ygc3RhdGlzdGljcyByZWxhdGVkIHRvIG5ldHdvcmsKK2ludGVyZmFjZXMuICBUaGlzIGRpc3BsYXkgY29uc2lzdHMgb2YgYSBjb2x1bW4gZm9yIHRoZQogcHJpbWFyeSBpbnRlcmZhY2UgYW5kIGEgY29sdW1uIHN1bW1hcml6aW5nIGluZm9ybWF0aW9uIGZvcgotYWxsICBpbnRlcmZhY2VzLiAgIFRoZSAgcHJpbWFyeSAgaW50ZXJmYWNlIG1heSBiZSByZXBsYWNlZAorYWxsIGludGVyZmFjZXMuICBUaGUgcHJpbWFyeSBpbnRlcmZhY2UgbWF5IGJlIHJlcGxhY2VkCiB3aXRoIGFub3RoZXIgaW50ZXJmYWNlIHdpdGggdGhlCiAuQiBcLUNJCiBvcHRpb24uICBUaGUgZmlyc3QgbGluZQpAQCAtMjQzLDcgKzI2OCw3IEBACiAuU0ggRVhBTVBMRVMKIEV4YW1wbGUgb2YgdXNpbmcgc25tcG5ldHN0YXQgdG8gZGlzcGxheSBhY3RpdmUgc29ja2V0cyAoZGVmYXVsdCk6CiAuUFAKLSUgc25tcG5ldHN0YXQgLXYgMmMgLWMgcHVibGljIC1DYSB0ZXN0aG9zdAorJSBzbm1wbmV0c3RhdCBcLXYgMmMgXC1jIHB1YmxpYyBcLUNhIHRlc3Rob3N0CiAuUFAKIC5uZgogQWN0aXZlIEludGVybmV0ICh0Y3ApIENvbm5lY3Rpb25zIChpbmNsdWRpbmcgc2VydmVycykKQEAgLTI2Nyw3ICsyOTIsNyBAQAogXCYuLi4KIC5maQogLlBQCi0lIHNubXBuZXRzdGF0IC12IDJjIC1jIHB1YmxpYyAtQ2kgdGVzdGhvc3QKKyUgc25tcG5ldHN0YXQgXC12IDJjIFwtYyBwdWJsaWMgXC1DaSB0ZXN0aG9zdAogLlBQCiAubmYKIE5hbWUgICAgIE10dSBOZXR3b3JrICAgIEFkZHJlc3MgICAgICAgICAgSXBrdHMgICBJZXJycyAgICBPcGt0cyBPZXJycyBRdWV1ZQpAQCAtMjc4LDcgKzMwMyw3IEBACiBFeGFtcGxlIG9mIHVzaW5nIHNubXBuZXRzdGF0IHRvIHNob3cgc3RhdGlzdGljcyBhYm91dCBhIHNwZWNpZmljIHByb3RvY29sOgogLlBQCiAubmYKLSUgc25tcG5ldHN0YXQgLXYgMmMgLWMgcHVibGljIC1DcCB0Y3AgdGVzdGhvc3QKKyUgc25tcG5ldHN0YXQgXC12IDJjIFwtYyBwdWJsaWMgXC1DcCB0Y3AgdGVzdGhvc3QKIAogQWN0aXZlIEludGVybmV0ICh0Y3ApIENvbm5lY3Rpb25zCiBQcm90byBMb2NhbCBBZGRyZXNzICAgICAgICAgICAgICAgIEZvcmVpZ24gQWRkcmVzcyAgICAgICAgICAgICAgICAgKHN0YXRlKQpkaWZmIC0tZ2l0IGEvbWFuL3NubXBzZXQuMS5kZWYgYi9tYW4vc25tcHNldC4xLmRlZgppbmRleCAzNDZhZTNhLi5iMGM0ZTA3IDEwMDY0NAotLS0gYS9tYW4vc25tcHNldC4xLmRlZgorKysgYi9tYW4vc25tcHNldC4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC04NiwxMyArODYsMTMgQEAKIC5QUAogRm9yIGV4YW1wbGU6CiAuUFAKLXNubXBzZXQgLWMgcHJpdmF0ZSAtdiAxIHRlc3QtaHViIHN5c3RlbS5zeXNDb250YWN0LjAgcyBkcHpAbm9jLnJ1dGdlcnMuZWR1IGlwLmlwZm9yd2FyZGluZy4wID0gMgorc25tcHNldCBcLWMgcHJpdmF0ZSBcLXYgMSB0ZXN0XC1odWIgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGRwekBub2MucnV0Z2Vycy5lZHUgaXAuaXBmb3J3YXJkaW5nLjAgPSAyCiAuUFAKIHdpbGwgc2V0IHRoZSB2YXJpYWJsZXMgc3lzQ29udGFjdC4wIGFuZCBpcEZvcndhcmRpbmcuMDoKIC5QUAogc3lzdGVtLnN5c0NvbnRhY3QuMCA9IFNUUklORzogImRwekBub2MucnV0Z2Vycy5lZHUiCiAuYnIKLWlwLmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogbm90LWZvcndhcmRpbmcoMikKK2lwLmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogbm90XC1mb3J3YXJkaW5nKDIpCiAuUFAKIElmIHRoZSBuZXR3b3JrIGVudGl0eSBoYXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYWNrZXQsIGFuCiBlcnJvciBwYWNrZXQgd2lsbCBiZSByZXR1cm5lZCBhbmQgYSBtZXNzYWdlIHdpbGwgYmUgc2hvd24sIGhlbHBpbmcgdG8KZGlmZiAtLWdpdCBhL21hbi9zbm1wc3RhdHVzLjEuZGVmIGIvbWFuL3NubXBzdGF0dXMuMS5kZWYKaW5kZXggYmJhNDhiMy4uMTEyNjE0NiAxMDA2NDQKLS0tIGEvbWFuL3NubXBzdGF0dXMuMS5kZWYKKysrIGIvbWFuL3NubXBzdGF0dXMuMS5kZWYKQEAgLTMyLDcgKzMyLDcgQEAKIHNubXBzdGF0dXMgLSByZXRyaWV2ZXMgYSBmaXhlZCBzZXQgb2YgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBmcm9tIGEgbmV0d29yayBlbnRpdHkKIC5TSCBTWU5PUFNJUwogLkIgc25tcHN0YXR1cwotW0NPTU1PTiBPUFRJT05TXSBbLUNmXSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1DZl0gQUdFTlQKIC5TSCBERVNDUklQVElPTgogLkIgc25tcHN0YXR1cwogaXMgYW4gU05NUCBhcHBsaWNhdGlvbiB0aGF0IHJldHJpZXZlcyBzZXZlcmFsIGltcG9ydGFudCBzdGF0aXN0aWNzCkBAIC02OCw3ICs2OCw3IEBACiAuUFAKIEZvciBleGFtcGxlOgogLlBQCi1zbm1wc3RhdHVzIC1jIHB1YmxpYyAtdiAxIG5ldGRldi1rYm94LmNjLmNtdS5lZHUKK3NubXBzdGF0dXMgXC1jIHB1YmxpYyBcLXYgMSBuZXRkZXZcLWtib3guY2MuY211LmVkdQogLlBQCiB3aWxsIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKIC5QUApAQCAtOTAsNyArOTAsNyBAQAogLkIgc25tcHN0YXR1cwogd2lsbCBhdHRlbXB0IHRvIHJlZm9ybSBpdHMgcmVxdWVzdCB0byBlbGltaW5hdGUgdGhlIG1hbGZvcm1lZAogdmFyaWFibGUgKHVubGVzcyB0aGUKLS5CIC1DZgorLkIgXC1DZgogb3B0aW9uIGlzIGdpdmVuLCBzZWUgYmVsb3cpLCBidXQgdGhpcyB2YXJpYWJsZSB3aWxsIHRoZW4gYmUgbWlzc2luZwogZnJvbSB0aGUgZGlzcGxheWVkIGRhdGEuCiAuUFAKQEAgLTEwMiwxMCArMTAyLDEwIEBACiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgQ09NTU9OIE9QVElPTlMKIGFzIHdlbGwgYXMgdGhlaXIgZGVzY3JpcHRpb25zLgogLlRQCi0uQiAtQ2YKKy5CIFwtQ2YKIEJ5IGRlZmF1bHQsIHNubXBzdGF0dXMgd2lsbCB0cnkgdG8gZml4IGVycm9ycyByZXR1cm5lZAogYnkgdGhlIGFnZW50IGFuZCByZXRyeSBhIHJlcXVlc3QuIEluIHRoaXMgc2l0dWF0aW9uLAotdGhlIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHRoZSBkYXRhIHRoYXQgaXQgY2FuLiBJZiB0aGUgLUNmIG9wdGlvbgordGhlIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHRoZSBkYXRhIHRoYXQgaXQgY2FuLiBJZiB0aGUgXC1DZiBvcHRpb24KIGlzIHNwZWNpZmllZCwgdGhlbiBzbm1wc3RhdHVzIHdpbGwgbm90IHRyeSB0byBmaXgKIGVycm9ycywgYW5kIHRoZSBlcnJvciB3aWxsIGNhdXNlIHRoZSBjb21tYW5kIHRvIHRlcm1pbmF0ZS4KIC5TSCAiU0VFIEFMU08iCmRpZmYgLS1naXQgYS9tYW4vc25tcHRhYmxlLjEuZGVmIGIvbWFuL3NubXB0YWJsZS4xLmRlZgppbmRleCA1NzViMDM0Li40ZTY1Y2I0IDEwMDY0NAotLS0gYS9tYW4vc25tcHRhYmxlLjEuZGVmCisrKyBiL21hbi9zbm1wdGFibGUuMS5kZWYKQEAgLTIwLDI4ICsyMCwyMSBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QVEFCTEUgMSAiMDYgU2VwIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFRBQkxFIDEgIjI1IEp1bCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB0YWJsZSAtIHJldHJpZXZlIGFuIFNOTVAgdGFibGUgYW5kIGRpc3BsYXkgaXQgaW4gdGFidWxhciBmb3JtCiAuU0ggU1lOT1BTSVMKIC5CIHNubXB0YWJsZQotW0NPTU1PTiBPUFRJT05TXSBbLUNiXSBbLUNCXSBbLUNoXSBbLUNIXSBbLUNpXSBbLUNmIFNUUklOR10gWy1DdyBXSURUSF0KLUFHRU5UIFRBQkxFLU9JRAorW0NPTU1PTiBPUFRJT05TXSBbXC1DYl0gW1wtQ0JdIFtcLUNoXSBbXC1DSF0gW1wtQ2ldIFtcLUNmIFNUUklOR10gW1wtQ3cgV0lEVEhdCitBR0VOVCBUQUJMRVwtT0lECiAuU0ggREVTQ1JJUFRJT04KIC5CIHNubXB0YWJsZQogaXMgYW4gU05NUCBhcHBsaWNhdGlvbiB0aGF0IHJlcGVhdGVkbHkgdXNlcyB0aGUgU05NUCBHRVRORVhUIG9yCiBHRVRCVUxLIHJlcXVlc3RzIHRvIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBvbiBhIG5ldHdvcmsgZW50aXR5LiAgVGhlCi1wYXJhbWV0ZXIKLS5JIFRBQkxFLU9JRAotbXVzdCBzcGVjaWZ5IGFuIFNOTVAgdGFibGUuCi0uUFAKLXNubXB0YWJsZSBpcyBhbiBTTk1QIGFwcGxpY2F0aW9uIHRoYXQgcmVwZWF0ZWRseSB1c2VzIHRoZQotU05NUCBHRVRORVhUIG9yIEdFVEJVTEsgcmVxdWVzdHMgdG8gcXVlcnkgZm9yICBpbmZvcm1hdGlvbgotb24gYSBuZXR3b3JrIGVudGl0eS4gIFRoZSBwYXJhbWV0ZXIgVEFCTEUtT0lEIG11c3Qgc3BlY2lmeQotYW4gU05NUCB0YWJsZS4KK3BhcmFtZXRlciBUQUJMRVwtT0lEIG11c3Qgc3BlY2lmeSBhbiBTTk1QIHRhYmxlLgogCiBBR0VOVCBpZGVudGlmaWVzIGEgdGFyZ2V0IFNOTVAgYWdlbnQsIHdoaWNoIGlzIGluc3RydW1lbnRlZAotdG8gbW9uaXRvciB0aGUgZ2lldm4gb2JqZWN0cy4gIEF0IGl0cyBzaW1wbGVzdCwgdGhlIEFHRU5UCit0byBtb25pdG9yIHRoZSBnaXZlbiBvYmplY3RzLiAgQXQgaXRzIHNpbXBsZXN0LCB0aGUgQUdFTlQKIHNwZWNpZmljYXRpb24gd2lsbCBjb25zaXN0IG9mIGEgaG9zdG5hbWUgb3IgYW4gSVB2NAogYWRkcmVzcy4gIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgY29tbWFuZCB3aWxsIGF0dGVtcHQKIGNvbW11bmljYXRpb24gd2l0aCB0aGUgYWdlbnQsIHVzaW5nIFVEUC9JUHY0IHRvIHBvcnQgMTYxCkBAIC01NywxOSArNTAsMTkgQEAKIGZvciBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBDT01NT04gT1BUSU9OUwogYXMgd2VsbCBhcyB0aGVpciBkZXNjcmlwdGlvbnMuCiAuVFAKLS5CIC1DYgorLkIgXC1DYgogRGlzcGxheSBvbmx5IGEgYnJpZWYgaGVhZGluZy4gQW55IGNvbW1vbiBwcmVmaXggb2YgdGhlIHRhYmxlIGZpZWxkCiBuYW1lcyB3aWxsIGJlIGRlbGV0ZWQuCiAuVFAgCi0uQiAtQ0IKKy5CIFwtQ0IKIERvIG5vdCB1c2UgR0VUQlVMSyByZXF1ZXN0cyB0byByZXRyaWV2ZSBkYXRhLCBvbmx5IEdFVE5FWFQuCiAuVFAgCi0uQkkgLUNjICIgQ0hBUlMiCisuQkkgXC1DYyAiIENIQVJTIgogUHJpbnQgdGFibGUgaW4gY29sdW1ucyBvZgogLkkgQ0hBUlMKIGNoYXJhY3RlcnMgd2lkdGguCiAuVFAKLS5CSSAtQ2YgIiBTVFJJTkciCisuQkkgXC1DZiAiIFNUUklORyIKIFRoZSBzdHJpbmcKIC5JIFNUUklORwogaXMgdXNlZCB0byBzZXBhcmF0ZSB0YWJsZSBjb2x1bW5zLiAgV2l0aCB0aGlzIG9wdGlvbiwgZWFjaCB0YWJsZSBlbnRyeQpAQCAtNzcsMjggKzcwLDI4IEBACiBzZXBhcmF0ZSB0aGUgY29sdW1ucyAodXNlZnVsIGlmIHlvdSB3YW50IHRvIGltcG9ydCBpdCBpbnRvIGEKIGRhdGFiYXNlKS4gIE90aGVyd2lzZSBpdCBpcyBwcmludGVkIGluIG5pY2VseSBhbGlnbmVkIGNvbHVtbnMuCiAuVFAKLS5CIC1DaAorLkIgXC1DaAogRGlzcGxheQogLkkgb25seQogdGhlIGNvbHVtbiBoZWFkaW5ncy4KIC5UUAotLkIgLUNICisuQiBcLUNICiBEbyBub3QgZGlzcGxheSB0aGUgY29sdW1uIGhlYWRpbmdzLgogLlRQCi0uQiAtQ2kKKy5CIFwtQ2kKIFRoaXMgb3B0aW9uIHByZXBlbmRzIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgdG8gYWxsIHByaW50ZWQgbGluZXMuCiAuVFAKLS5CIC1DbAorLkIgXC1DbAogTGVmdCBqdXN0aWZ5IHRoZSBkYXRhIGluIGVhY2ggY29sdW1uLgogLlRQIAotLkJJIC1DciAiIFJFUEVBVEVSUyIKKy5CSSBcLUNyICIgUkVQRUFURVJTIgogRm9yIEdFVEJVTEsgcmVxdWVzdHMsIAogLkkgUkVQRUFURVJTCiBzcGVjaWZpZXMgdGhlIG1heC1yZXBlYXRlcnMgdmFsdWUgdG8gdXNlLiAgRm9yIEdFVE5FWFQgcmVxdWVzdHMsCiAuSSBSRVBFQVRFUlMKIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gcmV0cmlldmUgYXQgYSB0aW1lLgogLlRQIAotLkJJIC1DdyAiIFdJRFRIIgorLkJJIFwtQ3cgIiBXSURUSCIKIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGxpbmVzIHdoZW4gdGhlIHRhYmxlIGlzIHByaW50ZWQuCiBJZiB0aGUgbGluZXMgd2lsbCBiZSBsb25nZXIsIHRoZSB0YWJsZSB3aWxsIGJlIHByaW50ZWQgaW4gc2VjdGlvbnMgb2YKIGF0IG1vc3QgCkBAIC0xMTUsMTQgKzEwOCwxNCBAQAogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UuICBUaGlzIE9JRCBcZkJtdXN0XGZQIGJlIHRoYXQgb2YgYSBNSUIgdGFibGUgb2JqZWN0LgogLlNIIEVYQU1QTEVTCi0kIHNubXB0YWJsZSAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0IGF0LmF0VGFibGUKKyQgc25tcHRhYmxlIFwtdiAyYyBcLWMgcHVibGljIGxvY2FsaG9zdCBhdC5hdFRhYmxlCiAKLVNOTVAgdGFibGU6IGF0LmF0VGFibGUgUkZDMTIxMy1NSUI6OmF0VGFibGUKK1NOTVAgdGFibGU6IGF0LmF0VGFibGUgUkZDMTIxM1wtTUlCOjphdFRhYmxlCiAKIGF0SWZJbmRleCAgIGF0UGh5c0FkZHJlc3MgICBhdE5ldEFkZHJlc3MKICAgICAgICAgMSAgODowOjIwOjIwOjA6YWIgMTMwLjIyNS4yNDMuMzMKIC5QUAotJCBzbm1wdGFibGUgLXYgMmMgLWMgcHVibGljIC1DZiArIGxvY2FsaG9zdCBhdC5hdFRhYmxlCiskIHNubXB0YWJsZSBcLXYgMmMgXC1jIHB1YmxpYyBcLUNmICsgbG9jYWxob3N0IGF0LmF0VGFibGUKIAogU05NUCB0YWJsZTogYXQuYXRUYWJsZQogCkBAIC0xMzAsNyArMTIzLDcgQEAKIDErODowOjIwOjIwOjA6YWIrMTMwLjIyNS4yNDMuMzMKIC5QUAogLm5mCi0kIHNubXB0YWJsZSBsb2NhbGhvc3QgLUNsIC1DQiAtQ2kgLU9YIC1DYiAtQ2MgMTYgLUN3IDY0IGlmVGFibGUKKyQgc25tcHRhYmxlIGxvY2FsaG9zdCBcLUNsIFwtQ0IgXC1DaSBcLU9YIFwtQ2IgXC1DYyAxNiBcLUN3IDY0IGlmVGFibGUKIAogU05NUCB0YWJsZTogaWZUYWJsZQogCkBAIC0xNTksNyArMTUyLDcgQEAKIC5QUAogLlNIICJCVUdTIgogVGhlIHRlc3QgZm9yCi0uSSBUQUJMRS1PSUQKKy5JIFRBQkxFXC1PSUQKIGFjdHVhbGx5IHNwZWNpZnlpbmcgYSB0YWJsZSBpcyByYXRoZXIgaGV1cmlzdGljLiAgTm90ZSBhbHNvIHRoYXQgdGhlCiB0ZXN0IHJlcXVpcmVzIHRoZSBkZWZpbmluZyBNSUIgZmlsZSB0byBiZSBsb2FkZWQuCiAuUFAKZGlmZiAtLWdpdCBhL21hbi9zbm1wdGVzdC4xLmRlZiBiL21hbi9zbm1wdGVzdC4xLmRlZgppbmRleCBjMWVkYjQ4Li5kZmRhZWQ4IDEwMDY0NAotLS0gYS9tYW4vc25tcHRlc3QuMS5kZWYKKysrIGIvbWFuL3NubXB0ZXN0LjEuZGVmCkBAIC0yNyw3ICsyNyw3IEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBURVNUIDEgIjA2IFNlcCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBURVNUIDEgIjI1IEp1bCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB0ZXN0IC0gY29tbXVuaWNhdGVzIHdpdGggYSBuZXR3b3JrIGVudGl0eSB1c2luZyBTTk1QIHJlcXVlc3RzCiAuU0ggU1lOT1BTSVMKQEAgLTYyLDcgKzYyLDcgQEAKIC5JUiB2YXJpYWJsZXMoNSkgLgogRm9yIGV4YW1wbGU6CiAuUFAKLXNubXB0ZXN0IC1jIHB1YmxpYyAtdiAxIHpldXMKK3NubXB0ZXN0IFwtYyBwdWJsaWMgXC12IDEgemV1cwogLmJyCiAuQlIgVmFyaWFibGU6ICIgc3lzdGVtLnN5c0Rlc2NyLjAiCiAuYnIKQEAgLTExNCw3ICsxMTQsNyBAQAogLlBQCiBHRVRORVhUIFJlcXVlc3Q6CiAuUFAKLVRoZSAiR0VUTkVYVCByZXF1ZXN0IiBtb2RlICgkTikgaXMgc2ltbGFyIHRvIHRoZSAiR2V0IHJlcXVlc3QiCitUaGUgIkdFVE5FWFQgcmVxdWVzdCIgbW9kZSAoJE4pIGlzIHNpbWlsYXIgdG8gdGhlICJHZXQgcmVxdWVzdCIKIG1vZGUsIGRlc2NyaWJlZCBhYm92ZS4KIC5QUAogU0VUIFJlcXVlc3Q6CkBAIC0xNzUsNyArMTc1LDcgQEAKIC5QUAogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHNlbmRpbmcgYSBHRVQgcmVxdWVzdCBmb3IgdHdvIE9JRHM6CiAuUFAKLSUgc25tcHRlc3QgLXYgMmMgLWMgcHVibGljIHRlc3Rob3N0Ojk5OTkKKyUgc25tcHRlc3QgXC12IDJjIFwtYyBwdWJsaWMgdGVzdGhvc3Q6OTk5OQogLlBQCiAubmYKIFZhcmlhYmxlOiBzeXN0ZW0uc3lzRGVzY3IuMApAQCAtMTgzLDE4ICsxODMsMTggQEAKIFZhcmlhYmxlOgogUmVjZWl2ZWQgR2V0IFJlc3BvbnNlIGZyb20gMTI4LjIuNTYuMjIwCiByZXF1ZXN0aWQgMHg3RDlGQ0Q2MyBlcnJzdGF0IDB4MCBlcnJpbmRleCAweDAKLVNOTVB2Mi1NSUI6OnN5c0Rlc2NyLjAgPSBTVFJJTkc6IFN1bk9TIHRlc3Rob3N0IDUuOSBHZW5lcmljXzExMjIzMy0wMiBzdW40dQotU05NUHYyLU1JQjo6c3lzQ29udGFjdC4wID0gU1RSSU5HOiB4MTExMQorU05NUHYyXC1NSUI6OnN5c0Rlc2NyLjAgPSBTVFJJTkc6IFN1bk9TIHRlc3Rob3N0IDUuOSBHZW5lcmljXzExMjIzM1wtMDIgc3VuNHUKK1NOTVB2MlwtTUlCOjpzeXNDb250YWN0LjAgPSBTVFJJTkc6IHgxMTExCiAuZmkKIC5QUAogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHNlbmRpbmcgYSBHRVRORVhUIHJlcXVlc3Q6CiAuUFAKIC5uZgotVmFyaWFibGU6IFNOTVB2Mi1NSUI6OnN5c09SVXBUaW1lCitWYXJpYWJsZTogU05NUHYyXC1NSUI6OnN5c09SVXBUaW1lCiBWYXJpYWJsZToKIFJlY2VpdmVkIEdldCBSZXNwb25zZSBmcm9tIDEyOC4yLjU2LjIyMAogcmVxdWVzdGlkIDB4N0Q5RkNENjQgZXJyc3RhdCAweDAgZXJyaW5kZXggMHgwCi1TTk1QdjItTUlCOjpzeXNPUlVwVGltZS4xID0gVGltZXRpY2tzOiAoNikgMDowMDowMC4wNgorU05NUHYyXC1NSUI6OnN5c09SVXBUaW1lLjEgPSBUaW1ldGlja3M6ICg2KSAwOjAwOjAwLjA2CiBWYXJpYWJsZToKIC5maQogLlBQCkBAIC0yMDksNyArMjA5LDcgQEAKIFZhcmlhYmxlOgogUmVjZWl2ZWQgR2V0IFJlc3BvbnNlIGZyb20gMTI4LjIuNTYuMjIwCiByZXF1ZXN0aWQgMHg3RDlGQ0Q2NSBlcnJzdGF0IDB4MCBlcnJpbmRleCAweDAKLVNOTVB2Mi1NSUI6OnN5c0xvY2F0aW9uLjAgPSBTVFJJTkc6IGJ1aWxkaW5nIEEKK1NOTVB2MlwtTUlCOjpzeXNMb2NhdGlvbi4wID0gU1RSSU5HOiBidWlsZGluZyBBCiBWYXJpYWJsZToKIC5maQogLlBQCkBAIC0yMjgsMTcgKzIyOCwxNyBAQAogV2hhdCByZXBlYXQgY291bnQ/IDIKIFJlY2VpdmVkIEdldCBSZXNwb25zZSBmcm9tIDEyOC4yLjU2LjIyMAogcmVxdWVzdGlkIDB4MkVBNzk0MkEgZXJyc3RhdCAweDAgZXJyaW5kZXggMHgwCi1TTk1QdjItTUlCOjpzeXNOYW1lLjAgPSBTVFJJTkc6IHRlc3Rob3N0Ci1TTk1QdjItTUlCOjpzeXNPUkxhc3RDaGFuZ2UuMCA9IFRpbWV0aWNrczogKDU4KSAwOjAwOjAwLjU4Ci1TTk1QdjItTUlCOjpzeXNMb2NhdGlvbi4wID0gU1RSSU5HOiBibGRnIEEKLVNOTVB2Mi1NSUI6OnN5c09SSUQuMSA9IE9JRDogSUYtTUlCOjppZk1JQgorU05NUHYyXC1NSUI6OnN5c05hbWUuMCA9IFNUUklORzogdGVzdGhvc3QKK1NOTVB2MlwtTUlCOjpzeXNPUkxhc3RDaGFuZ2UuMCA9IFRpbWV0aWNrczogKDU4KSAwOjAwOjAwLjU4CitTTk1QdjJcLU1JQjo6c3lzTG9jYXRpb24uMCA9IFNUUklORzogYmxkZyBBCitTTk1QdjJcLU1JQjo6c3lzT1JJRC4xID0gT0lEOiBJRlwtTUlCOjppZk1JQgogVmFyaWFibGU6CiAuZmkKIC5QUAogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHNlbmRpbmcgYW4gSW5mb3JtIHJlcXVlc3Q6CiAuUFAKIC5uZgotc25tcHRlc3QgLXYgMmMgLWMgcHVibGljIHNubXB0cmFwZF9ob3N0Citzbm1wdGVzdCBcLXYgMmMgXC1jIHB1YmxpYyBzbm1wdHJhcGRfaG9zdAogVmFyaWFibGU6ICRJCiBSZXF1ZXN0IHR5cGUgaXMgSW5mb3JtIFJlcXVlc3QKIChBcmUgeW91IHNlbmRpbmcgdG8gdGhlIHJpZ2h0IHBvcnQ/KQpAQCAtMjUyLDEzICsyNTIsMTMgQEAKIC5QUAogVGhlIHNubXB0cmFwZF9ob3N0IHdpbGwgc2hvdzoKIC5QUAotc25tcHRyYXBkX2hvc3QgWzxpcCBhZGRyZXNzPl06IFRyYXAgU05NUHYyLU1JQjo6c3lzQ29udGFjdC4wID0gU1RSSU5HOgorc25tcHRyYXBkX2hvc3QgWzxpcCBhZGRyZXNzPl06IFRyYXAgU05NUHYyXC1NSUI6OnN5c0NvbnRhY3QuMCA9IFNUUklORzoKIHgxMjM0NQogLlBQCiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2Ygc2VuZGluZyBhbiBTTk1QdjIgVHJhcCByZXF1ZXN0OgogLlBQCiAubmYKLXNubXB0ZXN0IC12IDJjIC1jIHB1YmxpYyBzbm1wdHJhcGRfaG9zdAorc25tcHRlc3QgXC12IDJjIFwtYyBwdWJsaWMgc25tcHRyYXBkX2hvc3QKIFZhcmlhYmxlOiAkVAogUmVxdWVzdCB0eXBlIGlzIFNOTVB2MiBUcmFwIFJlcXVlc3QKIChBcmUgeW91IHNlbmRpbmcgdG8gdGhlIHJpZ2h0IHBvcnQ/KQpAQCAtMjcxLDcgKzI3MSw3IEBACiBUaGUgc25tcHRyYXBkX2hvc3Qgd2lsbCBzaG93OgogLlBQCiAubmYKLXNubXB0cmFwZF9ob3N0IFs8aXAgYWRkcmVzcz5dOiBUcmFwIFNOTVB2Mi1NSUI6OnN5cy4wID0gU1RSSU5HOgorc25tcHRyYXBkX2hvc3QgWzxpcCBhZGRyZXNzPl06IFRyYXAgU05NUHYyXC1NSUI6OnN5cy4wID0gU1RSSU5HOgogYnVpbGRpbmcgYQogLmZpCiAuU0ggIlNFRSBBTFNPIgpkaWZmIC0tZ2l0IGEvbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYgYi9tYW4vc25tcHRyYW5zbGF0ZS4xLmRlZgppbmRleCAwZjMxYTU1Li43MjFhZjk5IDEwMDY0NAotLS0gYS9tYW4vc25tcHRyYW5zbGF0ZS4xLmRlZgorKysgYi9tYW4vc25tcHRyYW5zbGF0ZS4xLmRlZgpAQCAtMjcsNyArMjcsNyBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QVFJBTlNMQVRFIDEgIjIwIEp1bCAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBUUkFOU0xBVEUgMSAiMTMgTm92IDIwMTMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHRyYW5zbGF0ZSAtIHRyYW5zbGF0ZSBNSUIgT0lEIG5hbWVzIGJldHdlZW4gbnVtZXJpYyBhbmQgdGV4dHVhbCBmb3JtcwogLlNIIFNZTk9QU0lTCkBAIC00MiwxNyArNDIsMTcgQEAKIE9JRCBpcyBlaXRoZXIgYSBudW1lcmljIG9yIHRleHR1YWwgb2JqZWN0IGlkZW50aWZpZXIuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CIC1EXGZJW1RPS0VOWywuLi5dXQorLkIgXC1EXGZJW1RPS0VOWywuLi5dXQogVHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KIC5JUiAiVE9LRU4iICIocykuIgogVHJ5CiAuSVIgQUxMCiBmb3IgZXh0cmVtZWx5IHZlcmJvc2Ugb3V0cHV0LgogLlRQCi0uQiAtaAorLkIgXC1oCiBEaXNwbGF5IGEgYnJpZWYgdXNhZ2UgbWVzc2FnZSBhbmQgdGhlbiBleGl0LgogLlRQCi0uQkkgLW0gIiBNSUJMSVNUIgorLkJJIFwtbSAiIE1JQkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyB0byBsb2FkIGZvciB0aGlzCiBhcHBsaWNhdGlvbi4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJTLgogLklQCkBAIC02MiwxNyArNjIsMjAgQEAKIGZpbGVzLiAgRXZlcnkgZmlsZSB3aG9zZSBuYW1lIGRvZXMgbm90IGJlZ2luIHdpdGggIi4iIHdpbGwgYmUgcGFyc2VkIGFzCiBpZiBpdCB3ZXJlIGEgTUlCIGZpbGUuCiAuVFAKLS5CSSAtTSAiIERJUkxJU1QiCisuQkkgXC1NICIgRElSTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCcy4KIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJESVJTLgogLlRQCi0uQkkgLVQgIiBUUkFOU09QVFMiCisuQkkgXC1UICIgVFJBTlNPUFRTIgogUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgT0lEIHZhbHVlcy4gIFRoZQogZm9sbG93aW5nCiAuSSBUUkFOU09QVFMKIGFyZSBhdmFpbGFibGU6CiAuUlMKIC5UUCA2CisuQiBcLVRCCitQcmludCBhbGwgbWF0Y2hpbmcgb2JqZWN0cyBmb3IgYSByZWdleCBzZWFyY2guCisuVFAKIC5CIFwtVGQKIFByaW50IGZ1bGwgZGV0YWlscyBvZiB0aGUgc3BlY2lmaWVkIE9JRC4KIC5UUApAQCAtOTgsMjQgKzEwMSwyNCBAQAogRHVtcCBhIG51bWVyaWMgYW5kIGxhYmVsZWQgZm9ybSBvZiBhbGwgb2JqZWN0cyAoY29tcGF0aWJsZSB3aXRoIE1JQjJTQ0hFTUEgZm9ybWF0KS4KIC5SRQogLlRQCi0uQiAtVgorLkIgXC1WCiBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlbiBleGl0LgogLlRQCi0uQkkgLXcgIiBXSURUSCIKKy5CSSBcLXcgIiBXSURUSCIKIFNwZWNpZmllcyB0aGUgd2lkdGggb2YKLS5CIC1UcAorLkIgXC1UcAogYW5kCi0uQiAtVGQKKy5CIFwtVGQKIG91dHB1dC4gVGhlIGRlZmF1bHQgaXMgdmVyeSBsYXJnZS4KIC5QUAogSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIG9wdGlvbnMsIAogLkIgc25tcHRyYW5zbGF0ZQogdGFrZXMgdGhlIE9JRCBpbnB1dCAKLS5SQiAoIC1JICksCisuUkIgKCBcLUkgKSwKIE1JQiBwYXJzaW5nCi0uUkIgKCAtTSApCisuUkIgKCBcLU0gKQogYW5kIE9JRCBvdXRwdXQKLS5SQiAoIC1PICkKKy5SQiAoIFwtTyApCiBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgCiAuQlIgIklOUFVUIE9QVElPTlMiICIsICIgIk1JQiBQQVJTSU5HIE9QVElPTlMiICIgYW5kICIgIk9VVFBVVCBPUFRJT05TIgogc2VjdGlvbnMgb2YgdGhlCkBAIC0xMjMsNDAgKzEyNiw0MCBAQAogbWFudWFsIHBhZ2UuCiAuU0ggRVhBTVBMRVMKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLU9uIC1JUiBzeXNEZXNjcgorc25tcHRyYW5zbGF0ZSBcLU9uIFwtSVIgc3lzRGVzY3IKIC5icgogd2lsbCB0cmFuc2xhdGUgInN5c0Rlc2NyIiB0byBhIG1vcmUgcXVhbGlmaWVkIGZvcm06CiAuSVAKIHN5c3RlbS5zeXNEZXNjcgogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtT25mIC1JUiBzeXNEZXNjcgorc25tcHRyYW5zbGF0ZSBcLU9uZiBcLUlSIHN5c0Rlc2NyCiAuYnIKIHdpbGwgdHJhbnNsYXRlICJzeXNEZWNyIiB0bzoKIC5JUAotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNEZXNjcgorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0uc3lzRGVzY3IKIC5JUCBcKGJ1IDQgCi1zbm1wdHJhbnNsYXRlIC1UZCAtT1Mgc3lzdGVtLnN5c0Rlc2NyCitzbm1wdHJhbnNsYXRlIFwtVGQgXC1PUyBzeXN0ZW0uc3lzRGVzY3IKIC5icgogd2lsbCB0cmFuc2xhdGUgInN5c0RlY3IiIGludG86CiAuSVAKIC5uZgotU05NUHYyLU1JQjo6c3lzRGVzY3IKLXN5c0Rlc2NyIE9CSkVDVC1UWVBFCi0gIC0tIEZST00gU05NUHYyLU1JQgotICAtLSBURVhUVUFMIENPTlZFTlRJT04gRGlzcGxheVN0cmluZworU05NUHYyXC1NSUI6OnN5c0Rlc2NyCitzeXNEZXNjciBPQkpFQ1RcLVRZUEUKKyAgXC1cLSBGUk9NIFNOTVB2MlwtTUlCCisgIFwtXC0gVEVYVFVBTCBDT05WRU5USU9OIERpc3BsYXlTdHJpbmcKICAgU1lOVEFYIE9DVEVUIFNUUklORyAoMC4uMjU1KQotICBESVNQTEFZLUhJTlQgIjI1NWEiCi0gIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CisgIERJU1BMQVlcLUhJTlQgIjI1NWEiCisgIE1BWFwtQUNDRVNTIHJlYWRcLW9ubHkKICAgU1RBVFVTIGN1cnJlbnQKICAgREVTQ1JJUFRJT04gIkEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgZW50aXR5LiBUaGlzCiAgICAgICAgICAgICAgICB2YWx1ZSBzaG91bGQgaW5jbHVkZSB0aGUgZnVsbCBuYW1lIGFuZAogICAgICAgICAgICAgICAgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgc3lzdGVtJ3MKLSAgICAgICAgICAgICAgIGhhcmR3YXJlIHR5cGUsIHNvZnR3YXJlIG9wZXJhdGluZy1zeXN0ZW0sCisgICAgICAgICAgICAgICBoYXJkd2FyZSB0eXBlLCBzb2Z0d2FyZSBvcGVyYXRpbmdcLXN5c3RlbSwKICAgICAgICAgICAgICAgIGFuZCBuZXR3b3JraW5nIHNvZnR3YXJlLiIKLTo6PSB7IGlzbygxKSBvcmcoMykgZG9kKDYpIGludGVybmV0KDEpIG1nbXQoMikgbWliLTIoMSkgc3lzdGVtKDEpIDEgfQorOjo9IHsgaXNvKDEpIG9yZygzKSBkb2QoNikgaW50ZXJuZXQoMSkgbWdtdCgyKSBtaWJcLTIoMSkgc3lzdGVtKDEpIDEgfQogLmZpCiAuSVAgXChidSA0IAotc25tcHRyYW5zbGF0ZSAtVHAgLU9TIHN5c3RlbQorc25tcHRyYW5zbGF0ZSBcLVRwIFwtT1Mgc3lzdGVtCiAuYnIKIHdpbGwgcHJpbnQgdGhlIGZvbGxvd2luZyB0cmVlOgogLklQCkBAIC0xOTYsNyArMTk5LDcgQEAKIC5maQogLlBQCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1UYSB8IGhlYWQKK3NubXB0cmFuc2xhdGUgXC1UYSB8IGhlYWQKIC5icgogd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZHVtcDoKIC5JUApAQCAtMjE0LDcgKzIxNyw3IEBACiAuZmkKIC5QUAogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtVGwgfCBoZWFkCitzbm1wdHJhbnNsYXRlIFwtVGwgfCBoZWFkCiAuYnIKIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGR1bXA6CiAuSVAKQEAgLTIyNCwxNSArMjI3LDE1IEBACiAuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpCiAuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLmRpcmVjdG9yeSgxKQogLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpCi0uUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliLTIoMSkKLS5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWItMigxKS5zeXN0ZW0oMSkKLS5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWItMigxKS5zeXN0ZW0oMSkuc3lzRGVzY3IoMSkKLS5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWItMigxKS5zeXN0ZW0oMSkuc3lzT2JqZWN0SUQoMikKLS5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWItMigxKS5zeXN0ZW0oMSkuc3lzVXBUaW1lKDMpCisuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliXC0yKDEpCisuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliXC0yKDEpLnN5c3RlbSgxKQorLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYlwtMigxKS5zeXN0ZW0oMSkuc3lzRGVzY3IoMSkKKy5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWJcLTIoMSkuc3lzdGVtKDEpLnN5c09iamVjdElEKDIpCisuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliXC0yKDEpLnN5c3RlbSgxKS5zeXNVcFRpbWUoMykKIC5maQogLlBQCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1UbyB8IGhlYWQKK3NubXB0cmFuc2xhdGUgXC1UbyB8IGhlYWQKIC5icgogd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZHVtcAogLklQCkBAIC0yNTAsNyArMjUzLDcgQEAKIC5maQogLlBQCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1UcyB8IGhlYWQKK3NubXB0cmFuc2xhdGUgXC1UcyB8IGhlYWQKIC5icgogd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZHVtcAogLklQCkBAIC0yNjAsMTUgKzI2MywxNSBAQAogLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldAogLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5kaXJlY3RvcnkKIC5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdAotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yCi0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtCi0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c0Rlc2NyCi0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c09iamVjdElECi0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c1VwVGltZQorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMgorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0KKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtLnN5c0Rlc2NyCisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbS5zeXNPYmplY3RJRAorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0uc3lzVXBUaW1lCiAuZmkKIC5QUAogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtVHQgfCBoZWFkCitzbm1wdHJhbnNsYXRlIFwtVHQgfCBoZWFkCiAuYnIKIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGR1bXAKIC5JUApAQCAtMjc4LDcgKzI4MSw3IEBACiAgICAgICBpbnRlcm5ldCgxKSB0eXBlPTAKICAgICAgICAgZGlyZWN0b3J5KDEpIHR5cGU9MAogICAgICAgICBtZ210KDIpIHR5cGU9MAotICAgICAgICAgIG1pYi0yKDEpIHR5cGU9MAorICAgICAgICAgIG1pYlwtMigxKSB0eXBlPTAKICAgICAgICAgICAgIHN5c3RlbSgxKSB0eXBlPTAKICAgICAgICAgICAgICAgc3lzRGVzY3IoMSkgdHlwZT0yIHRjPTQgaGludD0yNTVhCiAgICAgICAgICAgICAgIHN5c09iamVjdElEKDIpIHR5cGU9MQpkaWZmIC0tZ2l0IGEvbWFuL3NubXB0cmFwLjEuZGVmIGIvbWFuL3NubXB0cmFwLjEuZGVmCmluZGV4IDA5YWVjNzkuLjU1YzE5ZDEgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdHJhcC4xLmRlZgorKysgYi9tYW4vc25tcHRyYXAuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtMjcsMTMgKzI3LDEzIEBACiAuU0ggTkFNRQogc25tcHRyYXAsIHNubXBpbmZvcm0gLSBzZW5kcyBhbiBTTk1QIG5vdGlmaWNhdGlvbiB0byBhIG1hbmFnZXIKIC5TSCBTWU5PUFNJUwotLkIgc25tcHRyYXAgLXYgMQorLkIgc25tcHRyYXAgXC12IDEKIFtDT01NT04gT1BUSU9OU10gQUdFTlQgZW50ZXJwcmlzZS1vaWQgYWdlbnQgZ2VuZXJpYy10cmFwIHNwZWNpZmljLXRyYXAgdXB0aW1lIFtPSUQgVFlQRSBWQUxVRV0uLi4KIC5QUAotLkIgc25tcHRyYXAgLXYgWzJjfDNdCi1bQ09NTU9OIE9QVElPTlNdIFstQ2ldIEFHRU5UIHVwdGltZSB0cmFwLW9pZCBbT0lEIFRZUEUgVkFMVUVdLi4uCisuQiBzbm1wdHJhcCBcLXYgWzJjfDNdCitbQ09NTU9OIE9QVElPTlNdIFtcLUNpXSBBR0VOVCB1cHRpbWUgdHJhcC1vaWQgW09JRCBUWVBFIFZBTFVFXS4uLgogLlBQCi0uQiBzbm1waW5mb3JtIC12IFsyY3wzXQorLkIgc25tcGluZm9ybSBcLXYgWzJjfDNdCiBbQ09NTU9OIE9QVElPTlNdIEFHRU5UIHVwdGltZSB0cmFwLW9pZCBbT0lEIFRZUEUgVkFMVUVdLi4uCiAuU0ggREVTQ1JJUFRJT04KIC5CIHNubXB0cmFwCkBAIC00Nyw3ICs0Nyw3IEBACiBXaGVuIGludm9rZWQgYXMKIC5CIHNubXBpbmZvcm0sCiBvciB3aGVuCi0uQiAtQ2kKKy5CIFwtQ2kKIGlzIGFkZGVkIHRvIHRoZSBjb21tYW5kIGxpbmUgZmxhZ3Mgb2Ygc25tcHRyYXAsIGl0IHNlbmRzIGFuCiBJTkZPUk0tUERVLCBleHBlY3RpbmcgYSByZXNwb25zZSBmcm9tIHRoZSB0cmFwIHJlY2VpdmVyLAogcmV0cmFuc21pdHRpbmcgaWYgcmVxdWlyZWQuICBPdGhlcndpc2UgaXQgc2VuZHMgYW4gVFJBUC1QRFUgb3IKQEAgLTExMSw3ICsxMTEsNyBAQAogLlBQCiBGb3IgZXhhbXBsZToKIC5QUAotc25tcHRyYXAgLXYgMSAtYyBwdWJsaWMgbWFuYWdlciBlbnRlcnByaXNlcy5zcGlkZXIgdGVzdC1odWIgMyAwICcnIGludGVyZmFjZXMuaWZ0YWJsZS5pZmVudHJ5LmlmaW5kZXguMSBpIDEKK3NubXB0cmFwIFwtdiAxIFwtYyBwdWJsaWMgbWFuYWdlciBlbnRlcnByaXNlcy5zcGlkZXIgdGVzdFwtaHViIDMgMCAnJyBpbnRlcmZhY2VzLmlmdGFibGUuaWZlbnRyeS5pZmluZGV4LjEgaSAxCiAuUFAKIHdpbGwgc2VuZCBhIGdlbmVyaWMgbGlua1VwIHRyYXAgdG8gbWFuYWdlciwgZm9yIGludGVyZmFjZSAxLgogLlNIIE9QVElPTlMKQEAgLTEyMCw3ICsxMjAsNyBAQAogLkkgc25tcGNtZCgxKSAKIG1hbnVhbCBwYWdlIGluCiBhZGRpdGlvbiB0byB0aGUgCi0uQiAtQ2kKKy5CIFwtQ2kKIG9wdGlvbiBkZXNjcmliZWQgYWJvdmUuCiBOb3RlIHRoYXQKIC5CIHNubXB0cmFwCmRpZmYgLS1naXQgYS9tYW4vc25tcHRyYXBkLjguZGVmIGIvbWFuL3NubXB0cmFwZC44LmRlZgppbmRleCAyOWQ1NjVhLi40NWJkMDM0IDEwMDY0NAotLS0gYS9tYW4vc25tcHRyYXBkLjguZGVmCisrKyBiL21hbi9zbm1wdHJhcGQuOC5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4KLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC0yMyw3ICsyMyw3IEBACiAuXCIgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwogLlwiIFNPRlRXQVJFLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QVFJBUEQgOCAiMzAgTWFyIDIwMTEiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFRSQVBEIDggIjI3IEFwciAyMDE0IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB0cmFwZCAtIFJlY2VpdmUgYW5kIGxvZyBTTk1QIHRyYXAgbWVzc2FnZXMuCiAuU0ggU1lOT1BTSVMKQEAgLTM5LDkyICszOSw4OCBAQAogbXVzdCB0eXBpY2FsbHkgYmUgcnVuIGFzIHJvb3QuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CIC1hCisuQiBcLWEKIElnbm9yZSBhdXRoZW50aWNhdGlvbkZhaWx1cmUgdHJhcHMuCiAuVFAKLS5CIC1BCisuQiBcLUEKIEFwcGVuZCB0byB0aGUgbG9nIGZpbGUgcmF0aGVyIHRoYW4gdHJ1bmNhdGluZyBpdC4KIAotTm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gY29tZSBcZkliZWZvcmVcZlAgYW55IC1MZiBvcHRpb25zCitOb3RlIHRoYXQgdGhpcyBuZWVkcyB0byBjb21lIFxmSWJlZm9yZVxmUCBhbnkgXC1MZiBvcHRpb25zCiB0aGF0IGl0IHNob3VsZCBhcHBseSB0by4KIC5UUAotLkJJICItYyIgIiBGSUxFIgorLkJJICJcLWMiICIgRklMRSIKIFJlYWQgCiAuSSBGSUxFCi1hcyBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KK2FzIGEgY29uZmlndXJhdGlvbiBmaWxlCisob3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzKS4KIC5UUAotLkIgLUMKKy5CIFwtQwogRG8gbm90IHJlYWQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgZXhjZXB0IHRoZSBvbmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgYnkgdGhlIAotLkIgLWMgCisuQiBcLWMgCiBvcHRpb24uCiAuVFAKLS5CIC1kCisuQiBcLWQKIER1bXAgKGluIGhleGFkZWNpbWFsKSB0aGUgc2VudCBhbmQgcmVjZWl2ZWQgU05NUCBwYWNrZXRzLgogLlRQCi0uQkkgLURbVE9LRU5bLC4uLl1dCisuQkkgXC1EW1RPS0VOWywuLi5dXQogVHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KIC5JUiAiVE9LRU4iICIocykuIgogVHJ5CiAuSVIgQUxMCiBmb3IgZXh0cmVtZWx5IHZlcmJvc2Ugb3V0cHV0LgogLlRQCi0uQiAtZQotUHJpbnQgZXZlbnQgbnVtYmVycyAocmlzaW5nL2ZhbGxpbmcgYWxhcm0gZXRjLikgZnJvbSB0aGUgKG9ic29sZXRlKSBNMk0tTUlCLgotLmJyCi1UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGR1ZSBjb3Vyc2UuCi0uVFAKLS5CIC1mCisuQiBcLWYKIERvIG5vdCBmb3JrKCkgZnJvbSB0aGUgY2FsbGluZyBzaGVsbC4KIC5UUAotLkJJIC1GICIgRk9STUFUIgorLkJJIFwtRiAiIEZPUk1BVCIKIFdoZW4gbG9nZ2luZyB0byBzdGFuZGFyZCBvdXRwdXQsIHVzZSB0aGUgZm9ybWF0IGluIHRoZSBzdHJpbmcKIC5JUiBGT1JNQVQgLgogU2VlIHRoZSBzZWN0aW9uCiAuQiBGT1JNQVQgU1BFQ0lGSUNBVElPTlMKIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCiAuVFAKLS5CIC1oLCAtLWhlbHAKKy5CIFwtaCwgXC1cLWhlbHAKIERpc3BsYXkgYSBicmllZiB1c2FnZSBtZXNzYWdlIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1ICisuQiBcLUgKIERpc3BsYXkgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIHVuZGVyc3Rvb2QgYnkgdGhlCiB0cmFwIGRhZW1vbiBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtSSBcZklbLV1JTklUTElTVAorLkIgXC1JIFxmSVtcLV1JTklUTElTVAogU3BlY2lmaWVzIHdoaWNoIG1vZHVsZXMgc2hvdWxkIChvciBzaG91bGQgbm90KSBiZSBpbml0aWFsaXplZAogd2hlbiBzbm1wdHJhcGQgc3RhcnRzIHVwLiAgSWYgdGhlIGNvbW1hLXNlcGFyYXRlZAogLkkgSU5JVExJU1QKIGlzIHByZWNlZGVkCi13aXRoIGEgJy0nLCBpdCBpcyB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIFxmSW5vdFxmUiBiZSBzdGFydGVkLgord2l0aCBhICdcLScsIGl0IGlzIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBzaG91bGQgXGZJbm90XGZSIGJlIHN0YXJ0ZWQuCiBPdGhlcndpc2UgdGhpcyBpcyB0aGUgbGlzdCBvZiB0aGUgXGZJb25seVxmUiBtb2R1bGVzIHRoYXQgc2hvdWxkIGJlIHN0YXJ0ZWQuCiAKIFRvIGdldCBhIGxpc3Qgb2YgY29tcGlsZWQgbW9kdWxlcywgcnVuIHNubXB0cmFwZCB3aXRoIHRoZSBhcmd1bWVudHMKLS5JICItRG1pYl9pbml0IC1IIgorLkkgIlwtRG1pYl9pbml0IFwtSCIKIChhc3N1bWluZyBkZWJ1Z2dpbmcgc3VwcG9ydCBoYXMgYmVlbiBjb21waWxlZCBpbikuCiAuVFAKLS5CIC1MW2Vmb3NdCisuQiBcLUxbZWZvc10KIFNwZWNpZnkgd2hlcmUgbG9nZ2luZyBvdXRwdXQgc2hvdWxkIGJlIGRpcmVjdGVkIChzdGFuZGFyZCBlcnJvciBvciBvdXRwdXQsCiB0byBhIGZpbGUgb3IgdmlhIHN5c2xvZykuICBTZWUgTE9HR0lORyBPUFRJT05TIGluIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiAuVFAKLS5CUiAtbSAiIFxmSU1JQkxJU1QiCisuQlIgXC1tICIgXGZJTUlCTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIHRvIGxvYWQgZm9yIHRoaXMKIGFwcGxpY2F0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQlMuCiBTZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIC5UUAotLkJSIC1NICIgXGZJRElSTElTVCIKKy5CUiBcLU0gIiBcZklESVJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUJzLgogVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQkRJUlMuCiBTZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIC5UUAotLkJSIC1uCisuQlIgXC1uCiBEbyBub3QgYXR0ZW1wdCB0byB0cmFuc2xhdGUgc291cmNlIGFkZHJlc3NlcyBvZiBpbmNvbWluZyBwYWNrZXRzIGludG8KIGhvc3RuYW1lcy4KIC5UUAotLkJJIC1wICIgRklMRSIKKy5CSSBcLXAgIiBGSUxFIgogU2F2ZSB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgdHJhcCBkYWVtb24gaW4KIC5JUiBGSUxFICIuIgogLlRQCi0uQkkgLU8gIiBbYWJlRWZucVFzU3RUdVV2eFhdIgorLkJJIFwtTyAiIFthYmVFZm5xUXNTdFR1VXZ4WF0iCiBTcGVjaWZpZXMgaG93IE1JQiBvYmplY3RzIGFuZCBvdGhlciBvdXRwdXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KIFNlZSB0aGUgc2VjdGlvbgogLkIgT1VUUFVUIE9QVElPTlMKQEAgLTEzMiwyMiArMTI4LDI1IEBACiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KIC5UUAotLkJJIC10CisuQkkgXC10CiBEbyBub3QgbG9nIHRyYXBzIHRvIHN5c2xvZy4gIFRoaXMgZGlzYWJsZXMgbG9nZ2luZyB0byBzeXNsb2cuICBUaGlzIGlzCiB1c2VmdWwgaWYgeW91IHdhbnQgdGhlIHNubXB0cmFwZCBhcHBsaWNhdGlvbiB0bwogLkIgb25seQogcnVuIHRyYXBoYW5kbGUgaG9va3MgYW5kIG5vdCB0byBsb2cgYW55IHRyYXBzIHRvIGFueSBsb2NhdGlvbi4KIC5UUAotLkIgLXYsIC0tdmVyc2lvbgorLkIgXC12LCBcLVwtdmVyc2lvbgogUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHRyYXAgZGFlbW9uIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC14IFxmSUFERFJFU1MKKy5CIFwteCBcZklBRERSRVNTCiBDb25uZWN0IHRvIHRoZSBBZ2VudFggbWFzdGVyIGFnZW50IG9uIHRoZSBzcGVjaWZpZWQgYWRkcmVzcywKIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IEFHRU5UWF9TT0NLRVQuCiBTZWUgXGZJc25tcGQoOClcZlIgZm9yIGRldGFpbHMgb2YgdGhlIGZvcm1hdCBvZiBzdWNoIGFkZHJlc3Nlcy4KIC5UUAotLkJJIC0tICJuYW1lIj0idmFsdWUiCi1BbGxvd3MgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQorLkIgXC1YCitEbyBub3QgY29ubmVjdCB0byBhIEFnZW50WCBtYXN0ZXIgYWdlbnQKKy5UUAorLkJJIFwtXC0gIm5hbWUiPSJ2YWx1ZSIKK0FsbG93cyBvbmUgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQogLkkgc25tcHRyYXBkLmNvbmYKIGZpbGUgYW5kIHNldHMgaXRzIHZhbHVlIHRvICJ2YWx1ZSIuIE92ZXJyaWRlcyB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBpbiB0aGUKIC5JIHNubXB0cmFwZC5jb25mCkBAIC0xNjYsMjEgKzE2NSwyNiBAQAogYSBsaXRlcmFsICUKIC5UUAogLkIgJWEKLXRoZSBjb250ZW50cyBvZiB0aGUgYWdlbnQtYWRkciBmaWVsZCBvZiB0aGUgUERVICh2MSBUUkFQcyBvbmx5KQordGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudFwtYWRkciBmaWVsZCBvZiB0aGUgUERVICh2MSBUUkFQcyBvbmx5KQogLlRQCiAuQiAlQQotdGhlIGhvc3RuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudC1hZGRyIGZpZWxkIG9mCi10aGUgUERVLCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0aGUgY29udGVudHMgb2YgdGhlIGFnZW50LWFkZHIgZmllbGQKK3RoZSBob3N0bmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgYWdlbnRcLWFkZHIgZmllbGQgb2YKK3RoZSBQRFUsIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYWdlbnRcLWFkZHIgZmllbGQKIG9mIHRoZSBQRFUgKHYxIFRSQVBzIG9ubHkpLgogLlRQCiAuQiAlYgotUERVIHNvdXJjZSBhZGRyZXNzIChOb3RlOiB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJUHY0Ci1hZGRyZXNzKQorUERVIHRyYW5zcG9ydCBhZGRyZXNzIChOb3RlOiB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJUHY0CithZGRyZXNzKS4KKy5icgorU29tZXRoaW5nIGxpa2UgIltVRFA6IFsxNzIuMTYuMTAuMTJdOjIzNDU2LT5bMTAuMTUwLjAuOF1dIgogLlRQCiAuQiAlQgogUERVIHNvdXJjZSBob3N0bmFtZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBQRFUgc291cmNlIGFkZHJlc3MgKHNlZQogbm90ZSBhYm92ZSkgCiAuVFAKKy5CICVFCitTTk1QdjMgY29udGV4dCBlbmdpbmUgaWQKKy5UUAogLkIgJWgKIGN1cnJlbnQgaG91ciBvbiB0aGUgbG9jYWwgc3lzdGVtCiAuVFAKQEAgLTIxNCwxMyArMjE4LDE5IEBACiAuQiAlTgogZW50ZXJwcmlzZSBzdHJpbmcKIC5UUAotLkIgJXEKLXRyYXAgc3ViLXR5cGUgKG51bWVyaWMsIGluIGRlY2ltYWwpCi0uVFAKIC5CICVQCiBzZWN1cml0eSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQRFUgKGNvbW11bml0eSBuYW1lIGZvciB2MS92MmMsCiB1c2VyIGFuZCBjb250ZXh0IGZvciB2MykKIC5UUAorLkIgJXEKK3RyYXAgc3ViLXR5cGUgKG51bWVyaWMsIGluIGRlY2ltYWwpCisuVFAKKy5CICVzCitTTk1QIHZlcnNpb24gbnVtYmVyICgwOiB2MSwgMTogdjJjLCAyOiB2MykKKy5UUAorLkIgJVMKK1NOTVB2MyBzZWN1cml0eSBtb2RlbCB2ZXJzaW9uIG51bWJlcgorLlRQCiAuQiAldAogZGVjaW1hbCBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBlcG9jaCAoYXMKIHJldHVybmVkIGJ5CkBAIC0yMjksNiArMjM5LDkgQEAKIC5CICVUCiB0aGUgdmFsdWUgb2YgdGhlIFxmQ3N5c1VwVGltZS4wXGZSIHZhcmJpbmQgaW4gc2Vjb25kcwogLlRQCisuQiAldQorU05NUHYzIHNlY3VyaXR5IG5hbWUsIG9yIHYxL3YyYyBjb21tdW5pdHkgbmFtZQorLlRQCiAuQiAldgogbGlzdCBvZiB2YXJpYWJsZS1iaW5kaW5ncyBmcm9tIHRoZSBub3RpZmljYXRpb24gcGF5bG9hZC4KIFRoZXNlIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGEgdGFiLCAKQEAgLTI1OCw3ICsyNzEsNyBAQAogYW5kIGEgZmxhZyB2YWx1ZS4gVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgc3VwcG9ydGVkOgogLlJTIDQgCiAuVFAgNAotLkIgLQorLkIgXC0KIGxlZnQganVzdGlmeQogLlRQCiAuQiAwCkBAIC0yODMsNyArMjk2LDcgQEAKIC5QUAogLlJTCiAubmYKLXNubXB0cmFwZCAtUCAtRiAiJTAyLjJoOiUwMi4yaiBUUkFQJXcuJXEgZnJvbSAlQVxlbiIKK3NubXB0cmFwZCBcLVAgXC1GICIlMDIuMmg6JTAyLjJqIFRSQVAldy4lcSBmcm9tICVBXGVuIgogLmZpCiAuUkUKIC5QUApAQCAtMjkxLDcgKzMwNCw3IEBACiAuUFAKIC5SUwogLm5mCi1zbm1wdHJhcGQgLVAgLUYgIiUjMDIuMmg6JSMwMi4yaiBUUkFQJXcuJXEgZnJvbSAlQVxlbiIKK3NubXB0cmFwZCBcLVAgXC1GICIlIzAyLjJoOiUjMDIuMmogVFJBUCV3LiVxIGZyb20gJUFcZW4iCiAuZmkKIC5SRQogLlNIIExJU1RFTklORyBBRERSRVNTRVMKQEAgLTMwNSwyMCArMzE4LDIwIEBACiAuSSBzbm1wZCg4KQogbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBsaXN0ZW5pbmcKIGFkZHJlc3Nlcy4KLS5TSCBOT1RJRklDQVRJT04tTE9HLU1JQiBTVVBQT1JUCisuU0ggTk9USUZJQ0FUSU9OXC1MT0dcLU1JQiBTVVBQT1JUCiBBcyBvZiBuZXQtc25tcCA1LjAsIHRoZSBzbm1wdHJhcGQgYXBwbGljYXRpb24gc3VwcG9ydHMgdGhlCi1OT1RJRklDQVRJT04tTE9HLU1JQi4gIEl0IGRvZXMgdGhpcyBieSBvcGVuaW5nIGFuIEFnZW50WCBzdWJhZ2VudAorTk9USUZJQ0FUSU9OXC1MT0dcLU1JQi4gIEl0IGRvZXMgdGhpcyBieSBvcGVuaW5nIGFuIEFnZW50WCBzdWJhZ2VudAogY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyIHNubXBkIGFnZW50IGFuZCByZWdpc3RlcmluZyB0aGUgbm90aWZpY2F0aW9uCiBsb2cgdGFibGVzLiAgQXMgbG9uZyBhcyB0aGUgc25tcGQgYXBwbGljYXRpb24gaXMgc3RhcnRlZCBmaXJzdCwgaXQKIHdpbGwgYXR0YWNoIGl0c2VsZiB0byBpdCBhbmQgdGh1cyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdmlldyB0aGUgbGFzdAogcmVjb3JkZWQgbm90aWZpY2F0aW9ucyB2aWEgdGhlIG5sbUxvZ1RhYmxlIGFuZCBubG1Mb2dWYXJpYWJsZVRhYmxlLgogU2VlIHRoZSBzbm1wdHJhcGQuY29uZiBmaWxlIGFuZCB0aGUgImRvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncyIgdG9rZW4KIGZvciB0dXJuaW5nCi1vZmYgdGhpcyBzdXBwb3J0LiAgU2VlIHRoZSBOT1RJRklDQVRJT04tTE9HLU1JQiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0CitvZmYgdGhpcyBzdXBwb3J0LiAgU2VlIHRoZSBOT1RJRklDQVRJT05cLUxPR1wtTUlCIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKIHRoZSBNSUIgaXRzZWxmLgogLlNIIEVYVEVOU0lCSUxJVFkgQU5EIENPTkZJR1VSQVRJT04KIFNlZSB0aGUKIC5JIHNubXB0cmFwZC5jb25mKDUpCiBtYW51YWwgcGFnZS4KIC5TSCAiU0VFIEFMU08iCi1zbm1wY21kKDEpLCBzbm1wZCg4KSwgcHJpbnRmKDMpLCBzbm1wdHJhcGQuY29uZig1KSwgc3lzbG9nKDgpLCB2YXJpYWJsZXMoNSkKK3NubXBjbWQoMSksIHNubXBkKDgpLCBwcmludGYoMyksIHNubXB0cmFwZC5jb25mKDUpLCBzeXNsb2coOCksIHRyYXB0b2VtYWlsKDEpLCB2YXJpYWJsZXMoNSkKZGlmZiAtLWdpdCBhL21hbi9zbm1wdHJhcGQuY29uZi41LmRlZiBiL21hbi9zbm1wdHJhcGQuY29uZi41LmRlZgppbmRleCAzMmUzYWY1Li4xYmJiZmJiIDEwMDY0NAotLS0gYS9tYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYKKysrIGIvbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVBUUkFQRC5DT05GIDUgIjI1IFNlcCAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBUUkFQRC5DT05GIDUgIjEzIE1hciAyMDE0IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB0cmFwZC5jb25mIC0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgTmV0LVNOTVAgbm90aWZpY2F0aW9uIHJlY2VpdmVyCiAuU0ggREVTQ1JJUFRJT04KQEAgLTcsNyArNyw3IEBACiAoYW5kIElORk9STSByZXF1ZXN0cykgc2hvdWxkIGJlIHByb2Nlc3NlZC4KIFRoaXMgZmlsZSAoXGZCc25tcHRyYXBkLmNvbmZcZlIpIGNhbiBiZSBsb2NhdGVkIGluCiBvbmUgb2Ygc2V2ZXJhbCBsb2NhdGlvbnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUKLS5JIHNubXBfY29uZmlnKDUpCisuSVIgc25tcF9jb25maWcgKDUpCiBtYW51YWwgcGFnZS4KIC5TSCBJTVBPUlRBTlQKIFByZXZpb3VzbHksCkBAIC0zMiwyMiArMzIsMjIgQEAKIFNlZSB0aGUgc2VjdGlvbiAKIC5CIExJU1RFTklORyBBRERSRVNTRVMKIGluIHRoZQotLkkgc25tcGQoOCkKKy5JUiBzbm1wZCAoOCkKIG1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgb2YgbGlzdGVuaW5nCiBhZGRyZXNzZXMuCiAuSVAKIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB0bwogbGlzdGVuIG9uIFVEUCBwb3J0IDE2MiBvbiBhbGwgSVB2NCBpbnRlcmZhY2VzLgogLklQICJkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MgeWVzIgotZGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE5PVElGSUNBVElPTi1MT0ctTUlCLgorZGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE5PVElGSUNBVElPTlwtTE9HXC1NSUIuCiBOb3JtYWxseSB0aGUgc25tcHRyYXBkIHByb2dyYW0ga2VlcHMgYSByZWNvcmQgb2YgdGhlIHRyYXBzCiByZWNlaXZlZCwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCBieSBxdWVyeWluZwogdGhlIFxmQ25sbUxvZ1RhYmxlXGZSIGFuZCBcZkNubG1Mb2d2YXJpYWJsZVRhYmxlXGZSIHRhYmxlcy4gIAogVGhpcyBkaXJlY3RpdmUgY2FuIGJlIHVzZWQgdG8gc3VwcHJlc3MgdGhpcyBiZWhhdmlvdXIuCiAuSVAKIFNlZSB0aGUgCi0uSSBzbm1wdHJhcGQoOCkgCi1tYW51YWwgcGFnZSBhbmQgdGhlIE5PVElGSUNBVElPTi1MT0ctTUlCIGZvciBkZXRhaWxzLgorLklSIHNubXB0cmFwZCAoOCkgCittYW51YWwgcGFnZSBhbmQgdGhlIE5PVElGSUNBVElPTlwtTE9HXC1NSUIgZm9yIGRldGFpbHMuCiAuSVAgImRvTm90TG9nVHJhcHMgeWVzIgogZGlzYWJsZXMgdGhlIGxvZ2dpbmcgb2Ygbm90aWZpY2F0aW9ucyBhbHRvZ2V0aGVyLgogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIFxmQnNubXB0cmFwZFxmUiBhcHBsaWNhdGlvbiBzaG91bGQKQEAgLTgxLDE0ICs4MSwxNiBAQAogZm9yIGEgcGFydGljdWxhciBjYXRlZ29yeSBvZiBub3RpZmljYXRpb24uIEJ1dCBpdCBpcyBwZXJmZWN0bHkKIHBvc3NpYmxlIChldmVuIGRlc2lyYWJsZSkgdG8gbGltaXQgY2VydGFpbiBub3RpZmljYXRpb24gc291cmNlcyB0bwogc2VsZWN0ZWQgcHJvY2Vzc2luZyBvbmx5LgotLklQICJhdXRoQ29tbXVuaXR5ICAgVFlQRVMgQ09NTVVOSVRZICBbU09VUkNFIFtPSUQgfCAtdiBWSUVXIF1dIgorLklQICJhdXRoQ29tbXVuaXR5ICAgVFlQRVMgQ09NTVVOSVRZICBbU09VUkNFIFtPSUQgfCBcLXYgVklFVyBdXSIKIGF1dGhvcmlzZXMgdHJhcHMgKGFuZCBTTk1QdjJjIElORk9STSByZXF1ZXN0cykgd2l0aCB0aGUgc3BlY2lmaWVkCiBjb21tdW5pdHkgdG8gdHJpZ2dlciB0aGUgdHlwZXMgb2YgcHJvY2Vzc2luZyBsaXN0ZWQuCiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYWxsb3cgYW55IG5vdGlmaWNhdGlvbiB1c2luZyB0aGlzIGNvbW11bml0eQogdG8gYmUgcHJvY2Vzc2VkLiAgVGhlIFNPVVJDRSBmaWVsZCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoYXQgdGhlCiBjb25maWd1cmF0aW9uIHNob3VsZCBvbmx5IGFwcGx5IHRvIG5vdGlmaWNhdGlvbnMgcmVjZWl2ZWQgZnJvbQotcGFydGljdWxhciBzb3VyY2VzIC0gc2VlIFxmSXNubXBkLmNvbmYoNSlcZlIgZm9yIG1vcmUgZGV0YWlscy4KLS5JUCAiYXV0aFVzZXIgICBUWVBFUyBbLXMgTU9ERUxdIFVTRVIgIFtMRVZFTCBbT0lEIHwgLXYgVklFVyBdXSIKK3BhcnRpY3VsYXIgc291cmNlcyAtIHNlZQorLklSIHNubXBkLmNvbmYgKDUpCitmb3IgbW9yZSBkZXRhaWxzLgorLklQICJhdXRoVXNlciAgIFRZUEVTIFtcLXMgTU9ERUxdIFVTRVIgIFtMRVZFTCBbT0lEIHwgXC12IFZJRVcgXV0iCiBhdXRob3Jpc2VzIFNOTVB2MyBub3RpZmljYXRpb25zIHdpdGggdGhlIHNwZWNpZmllZAogdXNlciB0byB0cmlnZ2VyIHRoZSB0eXBlcyBvZiBwcm9jZXNzaW5nIGxpc3RlZC4KIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBhY2NlcHQgYXV0aGVudGljYXRlZCByZXF1ZXN0cy4KQEAgLTk2LDcgKzk4LDcgQEAKIGJlIHVzZWQgdG8gYWxsb3cgdW5hdXRoZW50aWNhdGVkIG5vdGlmaWNhdGlvbnMgKFxmSW5vYXV0aFxmUiksCiBvciB0byByZXF1aXJlIGVuY3J5cHRpb24gKFxmSXByaXZcZlIpLCBqdXN0IGFzIGZvciB0aGUgU05NUCBhZ2VudC4KIC5JUAotV2l0aCBib3RoIG9mIHRoZXNlIGRpcmVjdGl2ZXMsIHRoZSBPSUQgKG9yIFxmSS12IFZJRVdcZlIpIGZpZWxkCitXaXRoIGJvdGggb2YgdGhlc2UgZGlyZWN0aXZlcywgdGhlIE9JRCAob3IgXGZJXC12IFZJRVdcZlIpIGZpZWxkCiBjYW4gYmUgdXNlZCB0byByZXRyaWN0IHRoaXMgY29uZmlndXJhdGlvbiB0byB0aGUgcHJvY2Vzc2luZyBvZgogcGFydGljdWxhciBub3RpZmljYXRpb25zLgogLlJTCkBAIC0xMDYsMTYgKzEwOCwxOCBAQAogaW5jb21pbmcgbm90aWZpY2F0aW9uLiAgSXQgaXMgbm90IGFwcGxpZWQgdG8gdGhlIHBheWxvYWQgdmFyYmluZHMKIGhlbGQgd2l0aGluIHRoYXQgbm90aWZpY2F0aW9uLgogLlJFCi0uSVAgImF1dGhHcm91cCAgVFlQRVMgWy1zIE1PREVMXSBHUk9VUCAgW0xFVkVMIFtPSUQgfCAtdiBWSUVXIF1dIgotLklQICJhdXRoQWNjZXNzIFRZUEVTIFstcyBNT0RFTF0gR1JPVVAgVklFVyAgW0xFVkVMIFtDT05URVhUXV0iCisuSVAgImF1dGhHcm91cCAgVFlQRVMgW1wtcyBNT0RFTF0gR1JPVVAgIFtMRVZFTCBbT0lEIHwgXC12IFZJRVcgXV0iCisuSVAgImF1dGhBY2Nlc3MgVFlQRVMgW1wtcyBNT0RFTF0gR1JPVVAgVklFVyAgW0xFVkVMIFtDT05URVhUXV0iCiAuSVAgInNldEFjY2VzcyBHUk9VUCBDT05URVhUIE1PREVMIExFVkVMIFBSRUZJWCBWSUVXIFRZUEVTIgogYXV0aG9yaXNlIG5vdGlmaWNhdGlvbnMgaW4gdGhlIHNwZWNpZmllZCBHUk9VUAogKGNvbmZpZ3VyZWQgdXNpbmcgdGhlIFxmSWdyb3VwXGZSIGRpcmVjdGl2ZSkKIHRvIHRyaWdnZXIgdGhlIHR5cGVzIG9mIHByb2Nlc3NpbmcgbGlzdGVkLgotU2VlIFxmSXNubXBkLmNvbmYoNSlcZlIgZm9yIG1vcmUgZGV0YWlscy4KK1NlZQorLklSIHNubXBkLmNvbmYgKDUpCitmb3IgbW9yZSBkZXRhaWxzLgogLklQICJjcmVhdGVVc2VyIFstZSAgRU5HSU5FSURdIHVzZXJuYW1lIChNRDV8U0hBKSBhdXRocGFzc3BocmFzZSBbREVTfEFFU10iCiBTZWUgdGhlIAotLkkgc25tcGQuY29uZig1KQorLklSIHNubXBkLmNvbmYgKDUpCiBtYW51YWwgcGFnZSBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gY3JlYXRlIFNOTVB2MyB1c2Vycy4gIFRoaXMKIGlzIHJvdWdobHkgdGhlIHNhbWUsIGJ1dCB0aGUgZmlsZSBuYW1lIGNoYW5nZXMgdG8gc25tcHRyYXBkLmNvbmYgZnJvbQogc25tcGQuY29uZi4KQEAgLTEzMSw5ICsxMzUsMzggQEAKIHNwZWNpZnkgdGhlIGZvcm1hdCB1c2VkIHRvIGRpc3BsYXkgU05NUHYxIFRSQVBzIGFuZCBTTk1QdjIKIG5vdGlmaWNhdGlvbnMgcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IFNOTVB2MmMgYW5kIFNOTVB2MwogYm90aCB1c2UgdGhlIHNhbWUgU05NUHYyIFBEVSBmb3JtYXQuCisuSVAgImZvcm1hdCBERVNUSU5BVElPTiBGT1JNQVQiCitzcGVjaWZ5IHRoZSBmb3JtYXQgdXNlZCBmb3IgZGlmZmVyZW50IGRlc3RpbmF0aW9ucy4KK0RFU1RJTkFUSU9OIGlzIG9uZSBvZjoKKy5JUiBwcmludCAiLCAiIHByaW50MSAiLCAiIHByaW50MiAiLCAiIAorLklSIHN5c2xvZyAiLCAiIHN5c2xvZzEgIiwgIiBzeXNsb2cyICIsICIgCisuSVIgZXhlY3V0ZSAiLCAiIGV4ZWN1dGUxICIsICIgZXhlY3V0ZTIgLgorLkkgcHJpbnQxCitpcyB1c2VkIGZvciBwcmludGluZyBTTk1QdjEgdHJhcHMsCisuSSBwcmludDIKK2lzIGZvciBTTk1QdjIuCisuSSBwcmludAoraXMgdXNlZCBmb3IgYm90aCB2ZXJzaW9ucy4KKy5JIHN5c2xvZworaXMgc2ltaWxhcmx5IHVzZWQgd2hlbiBzZW5kaW5nIHRyYXBzIHRvIHN5c2xvZywgYW5kCisuSSBleGVjdXRlCit1c2VkIHdoZW4gc2VuZGluZyB0cmFwcyB0byBhIHByb2dyYW0gc3VjaCBhcworLklSIHRyYXB0b2VtYWlsICgxKS4KKy5JUAorVGhlIGRlZmF1bHQgZm9ybWF0cyBhcmUKKy5icgorLkkgZm9ybWF0IHByaW50MSAlLjR5LSUuMm0tJS4ybCAlLjJoOiUuMmo6JS4yayAlQiBbJWJdICh2aWEgJUEgWyVhXSk6ICVOXGVuXGV0JVcgVHJhcCAoJXEpIFVwdGltZTogJSNUXGVuJXZcZW4KKy5icgorLkkgZm9ybWF0IHByaW50MiAlLjR5LSUuMm0tJS4ybCAlLjJoOiUuMmo6JS4yayAlQiBbJWJdOlxlbiV2XGVuCisuYnIKKy5JIGZvcm1hdCBzeXNsb2cxICVhOiAlVyBUcmFwICglcSkgVXB0aW1lOiAlI1QlI3ZcZW4KKy5icgorLkkgZm9ybWF0IHN5c2xvZzIgJUIgWyViXTogVHJhcCAlI3ZcZW4KKy5icgorLkkgZm9ybWF0IGV4ZWN1dGUgJUJcZW4lYlxlbiVWXGVuJXZcZW4KIC5JUAogU2VlCi0uSVIgc25tcHRyYXBkKDgpCisuSVIgc25tcHRyYXBkICg4KQogZm9yIHRoZSBsYXlvdXQgY2hhcmFjdGVycyBhdmFpbGFibGUuCiAuSVAgImlnbm9yZUF1dGhGYWlsdXJlIHllcyIKIGluc3RydWN0cyB0aGUgcmVjZWl2ZXIgdG8gaWdub3JlIFxmSWF1dGhlbnRpY2F0aW9uRmFpbHVyZVxmUiB0cmFwcy4KQEAgLTE0OSwxOSArMTgyLDI2IEBACiBzcGVjaWZpZXMgd2hlcmUgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgbG9nZ2VkIC0gdG8gc3RhbmRhcmQKIG91dHB1dCwgc3RhbmRhcmQgZXJyb3IsIGEgc3BlY2lmaWVkIGZpbGUgb3IgdmlhIFxmSXN5c2xvZ1xmUi4KIFNlZSB0aGUgc2VjdGlvbiBMT0dHSU5HIE9QVElPTlMgaW4gdGhlCi1cZklzbm1wY21kKDEpXGZSIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLklSIHNubXBjbWQgKDEpCittYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KIC5JUCAib3V0cHV0T3B0aW9uIHN0cmluZyIKIHNwZWNpZmllcyB2YXJpb3VzIGNoYXJhY3RlcmlzdGljcyBvZiBob3cgT0lEcyBhbmQgb3RoZXIgdmFsdWVzCiBzaG91bGQgYmUgZGlzcGxheWVkLgogU2VlIHRoZSBzZWN0aW9uIE9VVFBVVCBPUFRJT05TIGluIHRoZQotXGZJc25tcGNtZCgxKVxmUiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KLS5JUCAicHJpbnRFdmVudE51bWJlcnMgeWVzIgotZW5hYmxlcyBzcGVjaWFsaXNlZCBsb2dnaW5nIG9mIGV2ZW50LXJlbGF0ZWQgbm90aWZpY2F0aW9ucyBmcm9tCi10aGUgKGxvbmcgb2Jzb2xldGUpIE0yTS1NSUIuCi0uXCIKLS5cIiBYWFggLSBDSEVDSyBFWEFDVExZIFdISUNIIFRSQVBTCi0uXCIgWFhYIC0gVEhJUyBGRUVMUyBPQlNPTEVURSBUTyBNRSEKLS5cIgorLklSIHNubXBjbWQgKDEpCittYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5TSCBNeVNRTCBMb2dnaW5nCitUaGVyZSBhcmUgdHdvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd29yayB0b2dldGhlciB0byBjb250cm9sCit3aGVuIHF1ZXVlZCB0cmFwcyBhcmUgbG9nZ2VkIHRvIHRoZSBNeVNRTCBkYXRhYmFzZS4gQSBub24temVybwordmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNxbFNhdmVJbnRlcnZhbCB0byBlbmFibGUgTXlTUUwgbG9nZ2luZy4KKy5SRQorLklQICJzcWxNYXhRdWV1ZSBtYXgiCitzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYXBzIHRvIHF1ZXVlIGJlZm9yZSBhIGZvcmNlZCBmbHVzaAordG8gdGhlIE15U1FMIGRhdGFiYXNlLgorLlJFCisuSVAgInNxbFNhdmVJbnRlcnZhbCBzZWNvbmRzIgorc3BlY2lmaWVkIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHBlcmlvZGljIHF1ZXVlIGZsdXNoZXMuCitBIHZhbHVlIG9mIDAgZm9yIHdpbGwgZGlzYWJsZSBNeVNRTCBsb2dnaW5nLgogLlNIIE5PVElGSUNBVElPTiBQUk9DRVNTSU5HCiBBcyB3ZWxsIGFzIGxvZ2dpbmcgaW5jb21pbmcgbm90aWZpY2F0aW9ucywgdGhleSBjYW4gYWxzbwogYmUgZm9yd2FyZGVkIG9uIHRvIGFub3RoZXIgbm90aWZpY2F0aW9uIHJlY2VpdmVyLCBvciBwYXNzZWQKQEAgLTE5NiwxNCArMjM2LDE3IEBACiBOb3RlIHRoYXQgdGhpcyB3aWxsIGFsd2F5cyB1c2UgdGhlIFNOTVB2Mi1zdHlsZSBub3RpZmljYXRpb24gZm9ybWF0LCB3aXRoCiBTTk1QdjEgdHJhcHMgYmVpbmcgY29udmVydGVkIGFzIHBlciBSRkMgMjU3NiwgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUKIHByb2dyYW0uCi1UaGUgaW5wdXQgZm9ybWF0IGlzIGFzIGZvbGxvd3MsIG9uZSBlbnRyeSBwZXIgbGluZToKK1RoZSBpbnB1dCBmb3JtYXQgaXMsIGlmIHlvdSB1c2UgdGhlIGRlZmF1bHQgc2V0IGJ5Cit0aGUgImZvcm1hdCBleGVjdXRlICVCXGVuJWJcZW4lVlxlbiV2XGVuIiwgb25lIGVudHJ5IHBlciBsaW5lOgogLlJTCiAuSVAgSE9TVE5BTUUKIFRoZSBuYW1lIG9mIHRoZSBob3N0IHRoYXQgc2VudCB0aGUgbm90aWZpY2F0aW9uLCBhcyBkZXRlcm1pbmVkIGJ5Ci0uSVIgZ2V0aG9zdGJ5YWRkcigzKSAuCisuSVIgZ2V0aG9zdGJ5YWRkciAoMykuCiAuYnIKLS5JUCBJUEFERFJFU1MKLVRoZSBJUCBhZGRyZXNzIG9mIHRoZSBob3N0IHRoYXQgc2VudCB0aGUgbm90aWZpY2F0aW9uLgorLklQIEFERFJFU1MKK1RoZSB0cmFuc3BvcnQgYWRkcmVzcywgbGlrZQorLmJyCisiW1VEUDogWzE3Mi4xNi4xMC4xMl06MjM0NTYtPlsxMC4xNTAuMC44XV0iCiAuXCIKIC5cIiBYWFggLSBXaGF0IGFib3V0IG5vbi1JUHY0IHRyYW5zcG9ydHM/CiAuXCIKQEAgLTIxNCwxMCArMjU3LDEwIEBACiBUaGUgZm9ybWF0IG9mIGJvdGggb2YgdGhlc2UgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIFxmSW91dHB1dE9wdGlvblxmUgogZGlyZWN0aXZlIChvciBzaW1pbGFyIGNvbmZpZ3VyYXRpb24pLgogLklQCi1UaGUgZmlyc3QgT0lEIHNob3VsZCBhbHdheXMgYmUgXGZDU05NUHYyLU1JQjo6c3lzVXBUaW1lLjBcZlIsCi1hbmQgdGhlIHNlY29uZCBzaG91bGQgYmUgXGZDU05NUHYyLU1JQjo6c25tcFRyYXBPSUQuMFxmUi4KK1RoZSBmaXJzdCBPSUQgc2hvdWxkIGFsd2F5cyBiZSBcZkNTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjBcZlIsCithbmQgdGhlIHNlY29uZCBzaG91bGQgYmUgXGZDU05NUHYyXC1NSUI6OnNubXBUcmFwT0lELjBcZlIuCiBUaGUgcmVtYWluaW5nIGxpbmVzIHdpbGwgY29udGFpbiB0aGUgcGF5bG9hZCB2YXJiaW5kIGxpc3QuCi1Gb3IgU05NUHYxIHRyYXBzLCB0aGUgZmluYWwgT0lEIHdpbGwgYmUgXGZDU05NUHYyLU1JQjo6c25tcFRyYXBFbnRlcnByaXNlLjBcZlIuCitGb3IgU05NUHYxIHRyYXBzLCB0aGUgZmluYWwgT0lEIHdpbGwgYmUgXGZDU05NUHYyXC1NSUI6OnNubXBUcmFwRW50ZXJwcmlzZS4wXGZSLgogLmJyCiAuSVAgRXhhbXBsZToKIEEgXGZCdHJhcHRvZW1haWxcZlIgc2NyaXB0IGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBOZXQtU05NUCBwYWNrYWdlIHRoYXQKQEAgLTIyNSw3ICsyNjgsNyBAQAogLmJyCiAuUlMKIC5QCi10cmFwaGFuZGxlIGRlZmF1bHQgL3Vzci9iaW4vcGVybCBCSU5ESVIvdHJhcHRvZW1haWwgLXMgbXlzbXRwLnNvbWV3aGVyZS5jb20gLWYgYWRtaW5Ac29tZXdoZXJlLmNvbSBtZUBzb21ld2hlcmUuY29tCit0cmFwaGFuZGxlIGRlZmF1bHQgL3Vzci9iaW4vcGVybCBCSU5ESVIvdHJhcHRvZW1haWwgXC1zIG15c210cC5zb21ld2hlcmUuY29tIFwtZiBhZG1pbkBzb21ld2hlcmUuY29tIG1lQHNvbWV3aGVyZS5jb20KIC5SRQogLlJFCiAuSVAgImZvcndhcmQgT0lEfGRlZmF1bHQgREVTVElOQVRJT04iCkBAIC0yMzcsNyArMjgwLDcgQEAKIFNlZSB0aGUgc2VjdGlvbiAKIC5CIExJU1RFTklORyBBRERSRVNTRVMKIGluIHRoZQotLkkgc25tcGQoOCkKKy5JUiBzbm1wZCAoOCkKIG1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgb2YgbGlzdGVuaW5nCiBhZGRyZXNzZXMuCiAuUkUKQEAgLTI1Nyw1ICszMDAsNSBAQAogLlNIIEZJTEVTCiBTWVNDT05GRElSL3NubXAvc25tcHRyYXBkLmNvbmYKIC5TSCAiU0VFIEFMU08iCi1zbm1wX2NvbmZpZyg1KSwgc25tcHRyYXBkKDgpLCBzeXNsb2coOCksIHZhcmlhYmxlcyg1KSwgc25tcGQuY29uZig1KSwgcmVhZF9jb25maWcoMykuCitzbm1wX2NvbmZpZyg1KSwgc25tcHRyYXBkKDgpLCBzeXNsb2coOCksIHRyYXB0b2VtYWlsKDEpLCB2YXJpYWJsZXMoNSksIG5ldHNubXBfY29uZmlnX2FwaSgzKS4KIApkaWZmIC0tZ2l0IGEvbWFuL3NubXB1c20uMS5kZWYgYi9tYW4vc25tcHVzbS4xLmRlZgppbmRleCA2MzUyNzNmLi45MDYxMjEzIDEwMDY0NAotLS0gYS9tYW4vc25tcHVzbS4xLmRlZgorKysgYi9tYW4vc25tcHVzbS4xLmRlZgpAQCAtMSw5ICsxLDkgQEAKLS5USCBTTk1QVVNNIDEgIjIwIEphbiAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBVU00gMSAiMTEgRGVjIDIwMDkiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHVzbSAtIGNyZWF0ZXMgYW5kIG1haW50YWlucyBTTk1QdjMgdXNlcnMgb24gYSBuZXR3b3JrIGVudGl0eQogLlNIIFNZTk9QU0lTCiAuQiBzbm1wdXNtCi1bQ09NTU9OIE9QVElPTlNdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUN3XSBBR0VOVAogLkIgY3JlYXRlCiBVU0VSIFtDTE9ORUZST00tVVNFUl0KIC5icgpAQCAtMTgsMTcgKzE4LDE3IEBACiBVU0VSIENMT05FRlJPTS1VU0VSCiAuYnIKIC5CIHNubXB1c20KLVtDT01NT04gT1BUSU9OU10gWy1DYV0gWy1DeF0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ2FdIFtcLUN4XSBBR0VOVAogLkIgcGFzc3dkCiBPTEQtUEFTU1BIUkFTRSBORVctUEFTU1BIUkFTRSBbVVNFUl0KIC5icgogLkIgc25tcHVzbQotW0NPTU1PTiBPUFRJT05TXSA8LUNhIHwgLUN4PiAtQ2sgQUdFTlQKK1tDT01NT04gT1BUSU9OU10gPFwtQ2EgfCBcLUN4PiBcLUNrIEFHRU5UCiAuQiBwYXNzd2QKIE9MRC1LRVktT1ItUEFTU1BIUkFTRSBORVctS0VZLU9SLVBBU1NQSFJBU0UgW1VTRVJdCiAuYnIKIC5CIHNubXB1c20KLVtDT01NT04gT1BUSU9OU10gWy1DYV0gWy1DeF0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ2FdIFtcLUN4XSBBR0VOVAogLkIgY2hhbmdla2V5CiBbVVNFUl0KIApAQCAtNDYsMTIgKzQ2LDEyIEBACiAuQiBzbm1wdXNtCiBjb21tYW5kczoKIC5UUAotLkJJIC1DRSAiIEVOR0lORS1JRCIKKy5CSSBcLUNFICIgRU5HSU5FLUlEIgogU2V0IHVzbVVzZXJFbmdpbmVJRCB0byBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIGluZGV4IG9mIHRoZSB1c21Vc2VyVGFibGUuCi1EZWZhdWx0IGlzIHRvIHVzZSB0aGUgY29udGV4dEVuZ2luZUlEIChzZXQgdmlhIC1FIG9yIHByb2JlZCkgYXMgdGhlIAorRGVmYXVsdCBpcyB0byB1c2UgdGhlIGNvbnRleHRFbmdpbmVJRCAoc2V0IHZpYSBcLUUgb3IgcHJvYmVkKSBhcyB0aGUgCiB1c21Vc2VyRW5naW5lSUQuCiAuVFAKLS5CSSAtQ3AgIiBTVFJJTkciCisuQkkgXC1DcCAiIFNUUklORyIKIFNldCB0aGUgdXNtVXNlclB1YmxpYyB2YWx1ZSBvZiB0aGUgKG5ldykgdXNlciB0byB0aGUgc3BlY2lmaWVkIFNUUklORy4KIC5QUAogT3B0aW9ucyBmb3IgdGhlCkBAIC02MCwxNSArNjAsMTUgQEAKIC5CIGNoYW5nZWtleQogY29tbWFuZHM6CiAuVFAKLS5CSSAtQ2EKKy5CSSBcLUNhCiBDaGFuZ2UgdGhlIGF1dGhlbnRpY2F0aW9uIGtleS4KIC5UUAotLkJJIC1DeAorLkJJIFwtQ3gKIENoYW5nZSB0aGUgcHJpdmFjeSBrZXkuCiAuVFAKLS5CSSAtQ2sKLUFsbG93cyB0byB1c2UgbG9jYWxpemVkIGtleSAobXVzdCBzdGFydCB3aXRoIDB4KSBpbnN0ZWFkIG9mIHBhc3NwaHJhc2UuCi1XaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIGVpdGhlciB0aGUgLUNhIG9yIC1DeCBvcHRpb24gKGJ1dCBub3QgYm90aCkgbXVzdCBhbHNvCisuQkkgXC1DaworQWxsb3dzIG9uZSB0byB1c2UgbG9jYWxpemVkIGtleSAobXVzdCBzdGFydCB3aXRoIDB4KSBpbnN0ZWFkIG9mIHBhc3NwaHJhc2UuCitXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIGVpdGhlciB0aGUgXC1DYSBvciBcLUN4IG9wdGlvbiAoYnV0IG5vdCBib3RoKSBtdXN0IGFsc28KIGJlIHVzZWQuCiAKIC5TSCBDUkVBVElORyBVU0VSUwpAQCAtNzYsMjAgKzc2LDIzIEBACiBBbiB1bmF1dGhlbnRpY2F0ZWQgU05NUHYzIHVzZXIgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIGNvbW1hbmQKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIEFHRU5UIGNyZWF0ZSBVU0VSCitbQ09NTU9OIE9QVElPTlNdIEFHRU5UIGNyZWF0ZSBVU0VSCiAuUFAKIFRoaXMgY29uc3RydWN0cyBhbiAoaW5hY3RpdmUpIGVudHJ5IGluIHRoZSB1c21Vc2VyVGFibGUsCiB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uIG9yIHByaXZhY3kgc2V0dGluZ3MuCiBJbiBwcmluY2lwbGUsIHRoaXMgdXNlciBzaG91bGQgYmUgdXNlYWJsZSBmb3IgJ25vQXV0aE5vUHJpdicgcmVxdWVzdHMsCiBidXQgaW4gcHJhY3Rpc2UgdGhlIE5ldC1TTk1QIGFnZW50IHdpbGwgbm90IGFsbG93IHN1Y2ggYW4gZW50cnkKLXRvIGJlIG1hZGUgYWN0aXZlLgordG8gYmUgbWFkZSBhY3RpdmUuICBUaGUgdXNlciBjYW4gYmUgY3JlYXRlZCB2aWEgdGhlIGNyZWF0ZUFuZFdhaXQKK29wZXJhdGlvbiBpbnN0ZWFkIGJ5IHVzaW5nIHRoZSBcLUNhIGZsYWcuICBUaGlzIHdpbGwgcHJldmVudCB0aGUgdXNlcgorZnJvbSBiZWluZyBtYXJrZWQgYXMgYWN0aXZlIGluIGFueSBhZ2VudCB1bnRpbCBleHBsaWNpdGx5IGFjdGl2YXRlZAorbGF0ZXIgdmlhIHRoZSBhY3RpdmF0ZSBjb21tYW5kLgogCiAuUFAKIEluIG9yZGVyIHRvIGFjdGl2YXRlIHRoaXMgZW50cnksIGl0IGlzIG5lY2Vzc2FyeSB0byAiY2xvbmUiIGFuIGV4aXN0aW5nCiB1c2VyLCB1c2luZyB0aGUgY29tbWFuZAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gQUdFTlQgY2xvbmVGcm9tIFVTRVIgQ0xPTkVGUk9NLVVTRVIKK1tDT01NT04gT1BUSU9OU10gQUdFTlQgY2xvbmVGcm9tIFVTRVIgQ0xPTkVGUk9NLVVTRVIKIC5QUAogVGhlIFVTRVIgZW50cnkgdGhlbiBpbmhlcml0cyB0aGUgc2FtZSBhdXRoZW50aWNhdGlvbiBhbmQgcHJpdmFjeQogc2V0dGluZ3MgKGluY2x1ZGluZyBwYXNzIHBocmFzZXMpIGFzIHRoZSBDTE9ORUZST00gdXNlci4KQEAgLTk4LDcgKzEwMSw3IEBACiBUaGVzZSB0d28gc3RlcHMgY2FuIGJlIGNvbWJpbmVkIGludG8gb25lLCBieSB1c2luZyB0aGUgY29tbWFuZAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gQUdFTlQgY3JlYXRlIFVTRVIgQ0xPTkVGUk9NLVVTRVIKK1tDT01NT04gT1BUSU9OU10gQUdFTlQgY3JlYXRlIFVTRVIgQ0xPTkVGUk9NLVVTRVIKIAogLlBQCiBUaGUgdHdvIGZvcm1zIG9mIHRoZQpAQCAtMTM0LDcgKzEzNyw3IEBACiBBIHVzZXIgY2FuIGJlIGRlbGV0ZWQgZnJvbSB0aGUgdXNtVXNlclRhYmxlIHVzaW5nIHRoZSBjb21tYW5kCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBBR0VOVCBkZWxldGUgVVNFUgorW0NPTU1PTiBPUFRJT05TXSBBR0VOVCBkZWxldGUgVVNFUgogCiAuU0ggQ0hBTkdJTkcgUEFTUyBQSFJBU0VTCiBVc2VyIHByb2ZpbGVzIGNvbnRhaW4gcHJpdmF0ZSBrZXlzIHRoYXQgYXJlIG5ldmVyCkBAIC0xNDUsNyArMTQ4LDcgQEAKIFRoaXMgdXNlcyB0aGUgY29tbWFuZAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gWy1DYV0gWy1DeF0gQUdFTlQgcGFzc3dkIE9MRC1QQVNTUEhSQVNFIE5FVy1QQVNTUEhSQVNFIFtVU0VSXQorW0NPTU1PTiBPUFRJT05TXSBbXC1DYV0gW1wtQ3hdIEFHRU5UIHBhc3N3ZCBPTEQtUEFTU1BIUkFTRSBORVctUEFTU1BIUkFTRSBbVVNFUl0KIAogLlBQCiBBZnRlciBjbG9uaW5nIGEgbmV3IHVzZXIgZW50cnkgZnJvbSB0aGUgYXBwcm9wcmlhdGUgdGVtcGxhdGUsCkBAIC0xNTMsMjEgKzE1NiwyMSBAQAogCiAuUFAKIElmIFVTRVIgaXMgbm90IHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSBwYXNzcGhyYXNlCi1vZiB0aGUgKFNOTVB2MykgdXNlciBpc3N1aW5nIHRoZSBjb21tYW5kLiAgSWYgdGhlIC1DYSBvciAtQ3ggb3B0aW9ucworb2YgdGhlIChTTk1QdjMpIHVzZXIgaXNzdWluZyB0aGUgY29tbWFuZC4gIElmIHRoZSBcLUNhIG9yIFwtQ3ggb3B0aW9ucwogYXJlIHNwZWNpZmllZCwgdGhlbiBvbmx5IHRoZSBhdXRoZW50aWNhdGlvbiBvciBwcml2YWN5IGtleXMgYXJlIGNoYW5nZWQuICBJZgogdGhlc2Ugb3B0aW9ucyBhcmUgbm90IHNwZWNpZmllZCwgdGhlbiBib3RoIHRoZSBhdXRoZW50aWNhdGlvbiBhbmQgcHJpdmFjeSBrZXlzCiBhcmUgY2hhbmdlZC4KIAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gWy1DYV0gWy1DeF0gQUdFTlQgY2hhbmdla2V5IFtVU0VSXQorW0NPTU1PTiBPUFRJT05TXSBbXC1DYV0gW1wtQ3hdIEFHRU5UIGNoYW5nZWtleSBbVVNFUl0KIAogLlBQCiBUaGlzIGNvbW1hbmQgY2hhbmdlcyB0aGUga2V5IGluIGEgcGVyZmVjdC1mb3J3YXJkLXNlY3JlY3kgY29tcGxpYW50CiB3YXkgdGhyb3VnaCBhIGRpZmZpZS1oZWxtYW4gZXhjaGFuZ2UuICBUaGUgcmVtb3RlIGFnZW50IG11c3Qgc3VwcG9ydAotdGhlIFNOTVAtVVNNLURILU9CSkVDVFMtTUlCIGZvciB0aGlzIGNvbW1hbmQgdG8gd29yay4gIFRoZSByZXN1bHRpbmcKK3RoZSBTTk1QXC1VU01cLURIXC1PQkpFQ1RTXC1NSUIgZm9yIHRoaXMgY29tbWFuZCB0byB3b3JrLiAgVGhlIHJlc3VsdGluZwoga2V5cyBhcmUgcHJpbnRlZCB0byB0aGUgY29uc29sZSBhbmQgbWF5IGJlIHRoZW4gc2V0IGluIGZ1dHVyZSBjb21tYW5kCi1pbnZvY2F0aW9ucyB1c2luZyB0aGUgLS1kZWZBdXRoTG9jYWxpemVkS2V5IGFuZCAtLWRlZlByaXZMb2NhbGl6ZWRLZXkKK2ludm9jYXRpb25zIHVzaW5nIHRoZSBcLVwtZGVmQXV0aExvY2FsaXplZEtleSBhbmQgXC1cLWRlZlByaXZMb2NhbGl6ZWRLZXkKIG9wdGlvbnMgb3IgaW4geW91ciBzbm1wLmNvbmYgZmlsZSB1c2luZyB0aGUgZGVmQXV0aExvY2FsaXplZEtleSBhbmQKIGRlZlByaXZMb2NhbGl6ZWRLZXkga2V5d29yZHMuCiAKQEAgLTE4NCwxMCArMTg3LDEwIEBACiAKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIDwtQ2EgfCAtQ3g+IC1DayBBR0VOVCBwYXNzd2QgT0xELUtFWS1PUi1QQVNTUEhSQVNFIE5FVy1LRVktT1ItUEFTU1BIUkFTRSBbVVNFUl0KK1tDT01NT04gT1BUSU9OU10gPFwtQ2EgfCBcLUN4PiBcLUNrIEFHRU5UIHBhc3N3ZCBPTEQtS0VZLU9SLVBBU1NQSFJBU0UgTkVXLUtFWS1PUi1QQVNTUEhSQVNFIFtVU0VSXQogCiAuUFAKLUVpdGhlciB0aGUgLUNhIG9yIHRoZSAtQ3ggb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhlIE9MRC1LRVktT1ItUEFTU1BIUkFTRQorRWl0aGVyIHRoZSBcLUNhIG9yIHRoZSBcLUN4IG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZC4gIFRoZSBPTEQtS0VZLU9SLVBBU1NQSFJBU0UKIGFuZC9vciBORVctS0VZLU9SLVBBU1NQSFJBU0UgYXJndW1lbnRzIGNhbiBlaXRoZXIgYmUgYSBwYXNzcGhyYXNlIG9yIGEKIGxvY2FsaXplZCBrZXkgc3RhcnRpbmcgd2l0aCAiMHgiLCBlLmcuIGFzIHByaW50ZWQgb3V0IGJ5IHRoZQogLkIgY2hhbmdla2V5CkBAIC0yMjYsNyArMjI5LDcgQEAKIGluIGxlbmd0aC4KIC5TUyBDcmVhdGUgYSBuZXcgdXNlcgogLlBQCi1zbm1wdXNtIC12MyAtdSBpbml0aWFsIC1uICIiIC1sIGF1dGhOb1ByaXYgLWEgTUQ1IC1BIHNldHVwX3Bhc3NwaHJhc2UKK3NubXB1c20gXC12MyBcLXUgaW5pdGlhbCBcLW4gIiIgXC1sIGF1dGhOb1ByaXYgXC1hIE1ENSBcLUEgc2V0dXBfcGFzc3BocmFzZQogbG9jYWxob3N0IGNyZWF0ZSB3ZXMgaW5pdGlhbAogLklQCiBDcmVhdGVzIGEgbmV3IHVzZXIsIGhlcmUgbmFtZWQgIndlcyIgdXNpbmcgdGhlIHVzZXIgImluaXRpYWwiIHRvIGRvCkBAIC0yMzQsNyArMjM3LDcgQEAKIHRoYXQgdXNlcidzIHBhc3NwaHJhc2UgKCJzZXR1cF9wYXNzcGhyYXNlIikuCiAuU1MgQ2hhbmdlIHRoZSB1c2VyJ3MgcGFzc3BocmFzZQogLlBQCi1zbm1wdXNtIC12IDMgLXUgd2VzIC1uICIiIC1sIGF1dGhOb1ByaXYgLWEgTUQ1IC1BIHNldHVwX3Bhc3NwaHJhc2UKK3NubXB1c20gXC12IDMgXC11IHdlcyBcLW4gIiIgXC1sIGF1dGhOb1ByaXYgXC1hIE1ENSBcLUEgc2V0dXBfcGFzc3BocmFzZQogbG9jYWxob3N0IHBhc3N3ZCBzZXR1cF9wYXNzcGhyYXNlIG5ld19wYXNzcGhyYXNlCiAuSVAKIEFmdGVyIGNyZWF0aW5nIHRoZSB1c2VyICJ3ZXMiIHdpdGggdGhlIHNhbWUgcGFzc3BocmFzZSBhcyB0aGUKQEAgLTI0Myw3ICsyNDYsNyBAQAogdGhlIGluaXRpYWwgdXNlciwgdG8gIm5ld19wYXNzcGhyYXNlIi4KIC5TUyBUZXN0IHRoZSBuZXcgdXNlcgogLlBQCi1zbm1wZ2V0IC12IDMgLXUgd2VzIC1uICIiIC1sIGF1dGhOb1ByaXYgLWEgTUQ1IC1BIG5ld19wYXNzcGhyYXNlCitzbm1wZ2V0IFwtdiAzIFwtdSB3ZXMgXC1uICIiIFwtbCBhdXRoTm9Qcml2IFwtYSBNRDUgXC1BIG5ld19wYXNzcGhyYXNlCiBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKIC5JUAogSWYgdGhlIGFib3ZlIGNvbW1hbmRzIHdlcmUgc3VjY2Vzc2Z1bCwgdGhpcyBjb21tYW5kIHNob3VsZCBoYXZlCmRpZmYgLS1naXQgYS9tYW4vc25tcHZhY20uMS5kZWYgYi9tYW4vc25tcHZhY20uMS5kZWYKaW5kZXggNmFlMWYwMy4uNzBiMDg5ZSAxMDA2NDQKLS0tIGEvbWFuL3NubXB2YWNtLjEuZGVmCisrKyBiL21hbi9zbm1wdmFjbS4xLmRlZgpAQCAtMTUsNyArMTUsNyBAQAogLkIgc25tcHZhY20KIFtDT01NT04gT1BUSU9OU10gQUdFTlQKIC5CIGNyZWF0ZVZpZXcKLVstQ2VdIE5BTUUgU1VCVFJFRSBNQVNLCitbXC1DZV0gTkFNRSBTVUJUUkVFIE1BU0sKIC5icgogLkIgc25tcHZhY20KIFtDT01NT04gT1BUSU9OU10gQUdFTlQKQEAgLTEwMiw3ICsxMDIsNyBAQAogLkIgY3JlYXRlU2VjMkdyb3VwCiBjb21tYW5kIChvciBlcXVpdmFsZW50KS4KIAotLlNTIGNyZWF0ZVZpZXcgXGZSWy1DZV0gTkFNRSBTVUJUUkVFIE1BU0tcZlAKKy5TUyBjcmVhdGVWaWV3IFxmUltcLUNlXSBOQU1FIFNVQlRSRUUgTUFTS1xmUAogLlBQCiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIFNOTVB2MyBNSUIgdmlldyB0YWJsZS4KIEEgTUlCIHZpZXcgY29uc2lzdHMgb2YgYSBmYW1pbHkgb2YgdmlldyBzdWJ0cmVlcyB3aGljaCBtYXkgYmUgaW5kaXZpZHVhbGx5CkBAIC0xMTAsNyArMTEwLDcgQEAKIGRlZmluZWQgYnkgYSBjb21iaW5hdGlvbiBvZiBhbiBPSUQgc3VidHJlZSB0b2dldGhlciB3aXRoIGEgYml0IHN0cmluZyBtYXNrLgogVGhlIHZpZXcgdGFibGUgaXMgaW5kZXhlZCBieSB0aGUgdmlldyBuYW1lIGFuZCBzdWJ0cmVlIE9JRCB2YWx1ZXMuCiAuUFAKLVstQ2VdCitbXC1DZV0KIC5JUAogQW4gb3B0aW9uYWwgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgdmlldyBzdWJ0cmVlIHNob3VsZCBiZSBleGNsdWRlZAogZnJvbSB0aGUgbmFtZWQgdmlldy4KQEAgLTMyNyw3ICszMjcsNyBAQAogLlBQCiBUaGlzIGNyZWF0ZXMgYSBuZXcgc2VjdXJpdHkgZ3JvdXAgbmFtZWQgIlJPR3JvdXAiIGNvbnRhaW5pbmcgdGhlIChwcmUtZXhpc3RpbmcpCiB1c2VyICJ3ZXMiLCBhIG5ldyB2aWV3ICJzeXNWaWV3IiBjb250YWluaW5nIGp1c3QgdGhlIE9JRCB0cmVlIGJhc2VkIG9uCi0uSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW5ldCgxKS5tZ210KDIpLm1pYi0yKDEpLnN5c3RlbSgxKQorLkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmluZXQoMSkubWdtdCgyKS5taWJcLTIoMSkuc3lzdGVtKDEpCiAsIGFuZCB0aGVuIGFsbG93cyB0aG9zZSB1c2VycyBpbiB0aGUgZ3JvdXAgIlJPR3JvdXAiIChpLmUuICJ3ZXMiKQogcmVhZC1hY2Nlc3MsIGJ1dCBub3Qgd3JpdGUtYWNjZXNzIHRvIHRoZSB2aWV3ICJzeXNWaWV3IiAoaS5lLiB0aGUgc3lzdGVtIGdyb3VwKS4KIApkaWZmIC0tZ2l0IGEvbWFuL3NubXB3YWxrLjEuZGVmIGIvbWFuL3NubXB3YWxrLjEuZGVmCmluZGV4IDBjNTVkNzIuLmQ5ZjNkNWMgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wd2Fsay4xLmRlZgorKysgYi9tYW4vc25tcHdhbGsuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtMjMsNyArMjMsNyBAQAogLlwiIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKIC5cIiBTT0ZUV0FSRS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUFdBTEsgMSAiMjMgQXVnIDIwMDQiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFdBTEsgMSAiMjggTWF5IDIwMDciIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHdhbGsgLSByZXRyaWV2ZSBhIHN1YnRyZWUgb2YgbWFuYWdlbWVudCB2YWx1ZXMgdXNpbmcgU05NUCBHRVRORVhUIHJlcXVlc3RzCiAuU0ggU1lOT1BTSVMKQEAgLTQzLDcgKzQzLDcgQEAKIC5QUAogSWYgbm8gT0lEIGFyZ3VtZW50IGlzIHByZXNlbnQsCiAuQiBzbm1wd2Fsawotd2lsbCBzZWFyY2ggdGhlIHN1YnRyZWUgcm9vdGVkIGF0IFNOTVB2Mi1TTUk6Om1pYi0yCit3aWxsIHNlYXJjaCB0aGUgc3VidHJlZSByb290ZWQgYXQgU05NUHYyXC1TTUk6Om1pYlwtMgogKGluY2x1ZGluZyBhbnkgTUlCIG9iamVjdCB2YWx1ZXMgZnJvbSBvdGhlciBNSUIgbW9kdWxlcywKIHRoYXQgYXJlIGRlZmluZWQgYXMgbHlpbmcgd2l0aGluIHRoaXMgc3VidHJlZSkuCiBJZiB0aGUgbmV0d29yayBlbnRpdHkgaGFzIGFuIGVycm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFja2V0LCBhbgpAQCAtNTQsNyArNTQsNyBAQAogTUlCLCB0aGUgbWVzc2FnZSAiRW5kIG9mIE1JQiIgd2lsbCBiZSBkaXNwbGF5ZWQuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CIC1DYworLkIgXC1DYwogRG8gbm90IGNoZWNrIHdoZXRoZXIgdGhlIHJldHVybmVkIE9JRHMgYXJlIGluY3JlYXNpbmcuICBTb21lIGFnZW50cwogKExhc2VySmV0cyBhcmUgYW4gZXhhbXBsZSkgcmV0dXJuIE9JRHMgb3V0IG9mIG9yZGVyLCBidXQgY2FuCiBjb21wbGV0ZSB0aGUgd2FsayBhbnl3YXkuICBPdGhlciBhZ2VudHMgcmV0dXJuIE9JRHMgdGhhdCBhcmUgb3V0IG9mCkBAIC02NCwxMCArNjQsMTUgQEAKIC5CIHNubXB3YWxrCiB0cmllcyB0byBkZXRlY3QgdGhpcyBiZWhhdmlvciBhbmQgd2FybnMgeW91IHdoZW4gaXQgaGl0cyBhbiBhZ2VudAogYWN0aW5nIGlsbGVnYWxseS4gIFVzZQotLkIgLUNjCisuQiBcLUNjCiB0byB0dXJuIG9mZiB0aGlzIGNoZWNrLgogLlRQCi0uQiAtQ2kKKy5CIFwtQ0Uge09JRH0KK0VuZCB0aGUgd2FsayBhdCB0aGUgc3BlY2lmaWVkIE9JRCwgcmF0aGVyIHRoYW4gYSBzaW1wbGUgc3VidHJlZS4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gd2FsayBhIHBhcnRpYWwgc3VidHJlZSwgc2VsZWN0ZWQgY29sdW1ucyBvZgorYSB0YWJsZSwgb3IgZXZlbiB0d28gb3IgbW9yZSB0YWJsZXMgd2l0aGluIGEgc2luZ2xlIGNvbW1hbmQuCisuVFAKKy5CIFwtQ2kKIEluY2x1ZGUgdGhlIGdpdmVuIE9JRCBpbiB0aGUgc2VhcmNoIHJhbmdlLiAgTm9ybWFsbHkKIC5CIHNubXB3YWxrCiB1c2VzIEdFVE5FWFQgcmVxdWVzdHMgc3RhcnRpbmcgd2l0aCB0aGUgT0lEIHlvdSBzcGVjaWZpZWQgYW5kIHJldHVybnMKQEAgLTc2LDcgKzgxLDcgQEAKIHJlc3VsdHMgaWYgaXQgaXMgYSB2YWxpZCBPSUQgaW4gdGhlIHRyZWUgaXRzZWxmLiAgVGhpcyBvcHRpb24gbGV0cyB5b3UKIGRvIHRoaXMgZXhwbGljaXRseS4KIC5UUAotLkIgLUNJCisuQiBcLUNJCiBJbiBmYWN0LCB0aGUgZ2l2ZW4gT0lEIHdpbGwgYmUgcmV0cmlldmVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIG1haW4KIHN1YnRyZWUgd2FsayByZXR1cm5zIG5vIHVzZWFibGUgdmFsdWVzLiAgVGhpcyBhbGxvd3MgYSB3YWxrIG9mIGEKIHNpbmdsZSBpbnN0YW5jZSB0byBiZWhhdmUgYXMgZ2VuZXJhbGx5IGV4cGVjdGVkLCBhbmQgcmV0dXJuIHRoZQpAQCAtODQsMTAgKzg5LDEwIEBACiBUaGlzIG9wdGlvbiB0dXJucyBvZmYgdGhpcyBmaW5hbCBHRVQgcmVxdWVzdCwgc28gYSB3YWxrIG9mIGEKIHNpbmdsZSBpbnN0YW5jZSB3aWxsIHJldHVybiBub3RoaW5nLgogLlRQCi0uQiAtQ3AKKy5CIFwtQ3AKIFVwb24gY29tcGxldGlvbiBvZiB0aGUgd2FsaywgcHJpbnQgdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgZm91bmQuCiAuVFAKLS5CIC1DdAorLkIgXC1DdAogVXBvbiBjb21wbGV0aW9uIG9mIHRoZSB3YWxrLCBwcmludCB0aGUgdG90YWwgd2FsbC1jbG9jayB0aW1lIGl0IHRvb2sKIHRvIGNvbGxlY3QgdGhlIGRhdGEgKGluIHNlY29uZHMpLiAgTm90ZSB0aGF0IHRoZSB0aW1lciBpcyBzdGFydGVkIGp1c3QKIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhIHJlcXVlc3Qgc2VyaWVzIGFuZCBzdG9wcGVkIGp1c3QgYWZ0ZXIKQEAgLTEwMCwxNSArMTA1LDE1IEBACiB0YWtlcyB0aGUgY29tbW9uIG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSAKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlLgorLlNIIEVYQU1QTEVTCiAuYnIKIE5vdGUgdGhhdAotLkIgc25tcGJ1bGtnZXQKKy5CIHNubXB3YWxrCiBSRVFVSVJFUyAgYW4gYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgYWdlbnQgdG8gcXVlcnkKIGFuZCBhdCBtb3N0IG9uZSBPSUQgYXJndW1lbnQsIGFzIGRlc2NyaWJlZCB0aGVyZS4KLS5TSCBFWEFNUExFCiBUaGUgY29tbWFuZDoKIC5QUAotc25tcHdhbGsgLU9zIC1jIHB1YmxpYyAtdiAxIHpldXMgc3lzdGVtCitzbm1wd2FsayBcLU9zIFwtYyBwdWJsaWMgXC12IDEgemV1cyBzeXN0ZW0KIC5QUAogd2lsbCByZXRyaWV2ZSBhbGwgb2YgdGhlIHZhcmlhYmxlcyB1bmRlciBzeXN0ZW06CiAuUFAKQEAgLTEyNSw1ICsxMzAsMTMgQEAKIHN5c0xvY2F0aW9uLjAgPSBTVFJJTkc6ICIiCiAuYnIKIHN5c1NlcnZpY2VzLjAgPSBJTlRFR0VSOiA3MgorLmJyCisocGx1cyB0aGUgY29udGVudHMgb2YgdGhlIHN5c09SVGFibGUpLgorCitUaGUgY29tbWFuZDoKKy5QUAorc25tcHdhbGsgXC1PcyBcLWMgcHVibGljIFwtdiAxIFwtQ0Ugc3lzT1JUYWJsZSB6ZXVzIHN5c3RlbQorLlBQCit3aWxsIHJldHJpZXZlIHRoZSBzY2FsYXIgdmFsdWVzLCBidXQgb21pdCB0aGUgc3lzT1JUYWJsZS4KIC5TSCAiU0VFIEFMU08iCiBzbm1wY21kKDEpLCBzbm1wYnVsa3dhbGsoMSksIHZhcmlhYmxlcyg1KS4KZGlmZiAtLWdpdCBhL21hbi90a21pYi4xLmRlZiBiL21hbi90a21pYi4xLmRlZgppbmRleCBmYTQ1ZGNlLi5mMDI1M2I5IDEwMDY0NAotLS0gYS9tYW4vdGttaWIuMS5kZWYKKysrIGIvbWFuL3RrbWliLjEuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIHRrbWliIDEgIjE2IE5vdiAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIHRrbWliICIxIiAiMTYgTm92IDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogdGttaWIgLSBhbiBpbnRlcmFjdGl2ZSBncmFwaGljYWwgTUlCIGJyb3dzZXIgZm9yIFNOTVAKIC5TSCBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvbWlicy9CUklER0UtTUlCLnR4dCBiL21pYnMvQlJJREdFLU1JQi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3N2ExOQotLS0gL2Rldi9udWxsCisrKyBiL21pYnMvQlJJREdFLU1JQi50eHQKQEAgLTAsMCArMSwxNDcyIEBACitCUklER0UtTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBNSUIgZm9yIElFRUUgODAyLjFEIGRldmljZXMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KK0lNUE9SVFMKKyAgICBNT0RVTEUtSURFTlRJVFksIE9CSkVDVC1UWVBFLCBOT1RJRklDQVRJT04tVFlQRSwKKyAgICBDb3VudGVyMzIsIEludGVnZXIzMiwgVGltZVRpY2tzLCBtaWItMgorICAgICAgICBGUk9NIFNOTVB2Mi1TTUkKKyAgICBURVhUVUFMLUNPTlZFTlRJT04sIE1hY0FkZHJlc3MKKyAgICAgICAgRlJPTSBTTk1QdjItVEMKKyAgICBNT0RVTEUtQ09NUExJQU5DRSwgT0JKRUNULUdST1VQLCBOT1RJRklDQVRJT04tR1JPVVAKKyAgICAgICAgRlJPTSBTTk1QdjItQ09ORgorICAgIEludGVyZmFjZUluZGV4IEZST00gSUYtTUlCCisgICAgOworCitkb3QxZEJyaWRnZSBNT0RVTEUtSURFTlRJVFkKKyAgICBMQVNULVVQREFURUQgIjIwMDUwOTE5MDAwMFoiCisgICAgT1JHQU5JWkFUSU9OICJJRVRGIEJyaWRnZSBNSUIgV29ya2luZyBHcm91cCIKKyAgICBDT05UQUNULUlORk8KKyAgICAgICAgIkVtYWlsOiBicmlkZ2UtbWliQGlldGYub3JnCisKKyAgICAgICAgICAgICAgICAgSy5DLiBOb3JzZXRoIChFZGl0b3IpCisgICAgICAgICAgICAgICAgIEwtMyBDb21tdW5pY2F0aW9ucworICAgICAgICAgICAgVGVsOiArMSA4MDEtNTk0LTI4MDkKKyAgICAgICAgICBFbWFpbDoga2VueW9uLmMubm9yc2V0aEBMLTNjb20uY29tCisgICAgICAgICBQb3N0YWw6IDY0MCBOLiAyMjAwIFdlc3QuCisgICAgICAgICAgICAgICAgIFNhbHQgTGFrZSBDaXR5LCBVdGFoIDg0MTE2LTA4NTAKKworICAgICAgICAgICAgICAgICBMZXMgQmVsbCAoRWRpdG9yKQorICAgICAgICAgICAgICAgICAzQ29tIEV1cm9wZSBMaW1pdGVkCisgICAgICAgICAgUGhvbmU6ICs0NCAxNDQyIDQzODAyNQorICAgICAgICAgIEVtYWlsOiBlbGJlbGxAbnRsd29ybGQuY29tCisgICAgICAgICBQb3N0YWw6IDNDb20gQ2VudHJlLCBCb3VuZGFyeSBXYXkKKyAgICAgICAgICAgICAgICAgSGVtZWwgSGVtcHN0ZWFkCisgICAgICAgICAgICAgICAgIEhlcnRzLiAgSFAyIDdZVQorICAgICAgICAgICAgICAgICBVSworCisgICAgICAgICBTZW5kIGNvbW1lbnRzIHRvIDxicmlkZ2UtbWliQGlldGYub3JnPiIKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIEJyaWRnZSBNSUIgbW9kdWxlIGZvciBtYW5hZ2luZyBkZXZpY2VzIHRoYXQgc3VwcG9ydAorICAgICAgICBJRUVFIDgwMi4xRC4KKworICAgICAgICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDA1KS4gIFRoaXMgdmVyc2lvbiBvZgorICAgICAgICB0aGlzIE1JQiBtb2R1bGUgaXMgcGFydCBvZiBSRkMgNDE4ODsgc2VlIHRoZSBSRkMgaXRzZWxmIGZvcgorICAgICAgICBmdWxsIGxlZ2FsIG5vdGljZXMuIgorICAgIFJFVklTSU9OICAgICAiMjAwNTA5MTkwMDAwWiIKKyAgICBERVNDUklQVElPTgorICAgICAgICAgIlRoaXJkIHJldmlzaW9uLCBwdWJsaXNoZWQgYXMgcGFydCBvZiBSRkMgNDE4OC4KKworICAgICAgICAgVGhlIE1JQiBtb2R1bGUgaGFzIGJlZW4gY29udmVydGVkIHRvIFNNSXYyIGZvcm1hdC4KKyAgICAgICAgIENvbmZvcm1hbmNlIHN0YXRlbWVudHMgaGF2ZSBiZWVuIGFkZGVkIGFuZCBzb21lCisgICAgICAgICBkZXNjcmlwdGlvbiBhbmQgcmVmZXJlbmNlIGNsYXVzZXMgaGF2ZSBiZWVuIHVwZGF0ZWQuCisKKyAgICAgICAgIFRoZSBvYmplY3QgZG90MWRTdHBQb3J0UGF0aENvc3QzMiB3YXMgYWRkZWQgdG8KKyAgICAgICAgIHN1cHBvcnQgSUVFRSA4MDIuMXQgYW5kIHRoZSBwZXJtaXNzaWJsZSB2YWx1ZXMgb2YKKyAgICAgICAgIGRvdDFkU3RwUHJpb3JpdHkgYW5kIGRvdDFkU3RwUG9ydFByaW9yaXR5IGhhdmUgYmVlbgorICAgICAgICAgY2xhcmlmaWVkIGZvciBicmlkZ2VzIHN1cHBvcnRpbmcgSUVFRSA4MDIuMXQgb3IKKyAgICAgICAgIElFRUUgODAyLjF3LgorCisgICAgICAgICBUaGUgaW50ZXJwcmV0YXRpb24gb2YgZG90MWRTdHBUaW1lU2luY2VUb3BvbG9neUNoYW5nZQorICAgICAgICAgaGFzIGJlZW4gY2xhcmlmaWVkIGZvciBicmlkZ2VzIHN1cHBvcnRpbmcgdGhlIFJhcGlkCisgICAgICAgICBTcGFubmluZyBUcmVlIFByb3RvY29sIChSU1RQKS4iCisgICAgUkVWSVNJT04gICAgICIxOTkzMDczMTAwMDBaIgorICAgIERFU0NSSVBUSU9OCisgICAgICAgICAiU2Vjb25kIHJldmlzaW9uLCBwdWJsaXNoZWQgYXMgcGFydCBvZiBSRkMgMTQ5My4iCisgICAgUkVWSVNJT04gICAgICIxOTkxMTIzMTAwMDBaIgorICAgIERFU0NSSVBUSU9OCisgICAgICAgICAiSW5pdGlhbCByZXZpc2lvbiwgcHVibGlzaGVkIGFzIHBhcnQgb2YgUkZDIDEyODYuIgorICAgIDo6PSB7IG1pYi0yIDE3IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gVGV4dHVhbCBDb252ZW50aW9ucworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitCcmlkZ2VJZCA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgQnJpZGdlLUlkZW50aWZpZXIsIGFzIHVzZWQgaW4gdGhlIFNwYW5uaW5nIFRyZWUKKyAgICAgICAgUHJvdG9jb2wsIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgYnJpZGdlLiAgSXRzIGZpcnN0IHR3bworICAgICAgICBvY3RldHMgKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikgY29udGFpbiBhIHByaW9yaXR5IHZhbHVlLAorICAgICAgICBhbmQgaXRzIGxhc3QgNiBvY3RldHMgY29udGFpbiB0aGUgTUFDIGFkZHJlc3MgdXNlZCB0bworICAgICAgICByZWZlciB0byBhIGJyaWRnZSBpbiBhIHVuaXF1ZSBmYXNoaW9uICh0eXBpY2FsbHksIHRoZQorICAgICAgICBudW1lcmljYWxseSBzbWFsbGVzdCBNQUMgYWRkcmVzcyBvZiBhbGwgcG9ydHMgb24gdGhlCisgICAgICAgIGJyaWRnZSkuIgorICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAoU0laRSAoOCkpCisKK1RpbWVvdXQgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgorICAgIERJU1BMQVktSElOVCAiZCIKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCAoU1RQKSB0aW1lciBpbiB1bml0cyBvZiAxLzEwMAorICAgICAgICBzZWNvbmRzLiAgU2V2ZXJhbCBvYmplY3RzIGluIHRoaXMgTUlCIG1vZHVsZSByZXByZXNlbnQKKyAgICAgICAgdmFsdWVzIG9mIHRpbWVycyB1c2VkIGJ5IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLgorICAgICAgICBJbiB0aGlzIE1JQiwgdGhlc2UgdGltZXJzIGhhdmUgdmFsdWVzIGluIHVuaXRzIG9mCisgICAgICAgIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQgKGkuZS4sIDEvMTAwIHNlY3MpLgorCisgICAgICAgIFRoZXNlIHRpbWVycywgd2hlbiBzdG9yZWQgaW4gYSBTcGFubmluZyBUcmVlIFByb3RvY29sJ3MKKyAgICAgICAgQlBEVSwgYXJlIGluIHVuaXRzIG9mIDEvMjU2IHNlY29uZHMuICBOb3RlLCBob3dldmVyLCB0aGF0CisgICAgICAgIDgwMi4xRC0xOTk4IHNwZWNpZmllcyBhIHNldHRhYmxlIGdyYW51bGFyaXR5IG9mIG5vIG1vcmUKKyAgICAgICAgdGhhbiBvbmUgc2Vjb25kIGZvciB0aGVzZSB0aW1lcnMuICBUbyBhdm9pZCBhbWJpZ3VpdHksCisgICAgICAgIGEgY29udmVyc2lvbiBhbGdvcml0aG0gaXMgZGVmaW5lZCBiZWxvdyBmb3IgY29udmVydGluZworICAgICAgICBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgdW5pdHMsIHdoaWNoIGVuc3VyZXMgYSB0aW1lcidzCisgICAgICAgIHZhbHVlIGlzIG5vdCBkaXN0b3J0ZWQgYnkgbXVsdGlwbGUgY29udmVyc2lvbnMuCisKKyAgICAgICAgVG8gY29udmVydCBhIFRpbWVvdXQgdmFsdWUgaW50byBhIHZhbHVlIGluIHVuaXRzIG9mCisgICAgICAgIDEvMjU2IHNlY29uZHMsIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIHNob3VsZCBiZSB1c2VkOgorCisgICAgICAgICAgICBiID0gZmxvb3IoIChuICogMjU2KSAvIDEwMCkKKworICAgICAgICB3aGVyZToKKyAgICAgICAgICAgIGZsb29yICAgPSAgcXVvdGllbnQgW2lnbm9yZSByZW1haW5kZXJdCisgICAgICAgICAgICBuIGlzIHRoZSB2YWx1ZSBpbiAxLzEwMCBzZWNvbmQgdW5pdHMKKyAgICAgICAgICAgIGIgaXMgdGhlIHZhbHVlIGluIDEvMjU2IHNlY29uZCB1bml0cworCisgICAgICAgIFRvIGNvbnZlcnQgdGhlIHZhbHVlIGZyb20gMS8yNTYgc2Vjb25kIHVuaXRzIGJhY2sgdG8KKyAgICAgICAgMS8xMDAgc2Vjb25kcywgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gc2hvdWxkIGJlIHVzZWQ6CisKKyAgICAgICAgICAgIG4gPSBjZWlsaW5nKCAoYiAqIDEwMCkgLyAyNTYpCisKKyAgICAgICAgd2hlcmU6CisgICAgICAgICAgICBjZWlsaW5nID0gcXVvdGllbnQgW2lmIHJlbWFpbmRlciBpcyAwXSwgb3IKKyAgICAgICAgICAgICAgICAgICAgICBxdW90aWVudCArIDEgW2lmIHJlbWFpbmRlciBpcyBub256ZXJvXQorICAgICAgICAgICAgbiBpcyB0aGUgdmFsdWUgaW4gMS8xMDAgc2Vjb25kIHVuaXRzCisKKyAgICAgICAgICAgIGIgaXMgdGhlIHZhbHVlIGluIDEvMjU2IHNlY29uZCB1bml0cworCisgICAgICAgIE5vdGU6IGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXJlCisgICAgICAgIGRvbmUgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCAoaS5lLiwgbXVsdGlwbHkgZmlyc3QsCisgICAgICAgIGRpdmlkZSBzZWNvbmQpLiIKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gc3VidHJlZXMgaW4gdGhlIEJyaWRnZSBNSUIKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWROb3RpZmljYXRpb25zICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSAwIH0KKworZG90MWRCYXNlICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSAxIH0KK2RvdDFkU3RwICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgMiB9CisKK2RvdDFkU3IgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgMyB9CistLSBkb2N1bWVudGVkIGluIFJGQyAxNTI1CisKK2RvdDFkVHAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgNCB9Citkb3QxZFN0YXRpYyAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDUgfQorCistLSBTdWJ0cmVlcyB1c2VkIGJ5IEJyaWRnZSBNSUIgRXh0ZW5zaW9uczoKKy0tICAgICAgcEJyaWRnZU1JQiAgTU9EVUxFLUlERU5USVRZICAgOjo9IHsgZG90MWRCcmlkZ2UgNiB9CistLSAgICAgIHFCcmlkZ2VNSUIgIE1PRFVMRS1JREVOVElUWSAgIDo6PSB7IGRvdDFkQnJpZGdlIDcgfQorLS0gTm90ZSB0aGF0IHRoZSBwcmFjdGljZSBvZiByZWdpc3RlcmluZyByZWxhdGVkIE1JQiBtb2R1bGVzCistLSBiZWxvdyBkb3QxZEJyaWRnZSBoYXMgYmVlbiBkaXNjb3VyYWdlZCBzaW5jZSB0aGVyZSBpcyBubworLS0gcm9idXN0IG1lY2hhbmlzbSB0byB0cmFjayBzdWNoIHJlZ2lzdHJhdGlvbnMuCisKK2RvdDFkQ29uZm9ybWFuY2UgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgOCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZEJhc2Ugc3VidHJlZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gSW1wbGVtZW50YXRpb24gb2YgdGhlIGRvdDFkQmFzZSBzdWJ0cmVlIGlzIG1hbmRhdG9yeSBmb3IgYWxsCistLSBicmlkZ2VzLgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZEJhc2VCcmlkZ2VBZGRyZXNzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgTWFjQWRkcmVzcworICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIE1BQyBhZGRyZXNzIHVzZWQgYnkgdGhpcyBicmlkZ2Ugd2hlbiBpdCBtdXN0IGJlCisgICAgICAgIHJlZmVycmVkIHRvIGluIGEgdW5pcXVlIGZhc2hpb24uICBJdCBpcyByZWNvbW1lbmRlZAorICAgICAgICB0aGF0IHRoaXMgYmUgdGhlIG51bWVyaWNhbGx5IHNtYWxsZXN0IE1BQyBhZGRyZXNzIG9mCisgICAgICAgIGFsbCBwb3J0cyB0aGF0IGJlbG9uZyB0byB0aGlzIGJyaWRnZS4gIEhvd2V2ZXIsIGl0IGlzIG9ubHkKKworICAgICAgICByZXF1aXJlZCB0byBiZSB1bmlxdWUuICBXaGVuIGNvbmNhdGVuYXRlZCB3aXRoCisgICAgICAgIGRvdDFkU3RwUHJpb3JpdHksIGEgdW5pcXVlIEJyaWRnZUlkZW50aWZpZXIgaXMgZm9ybWVkLAorICAgICAgICB3aGljaCBpcyB1c2VkIGluIHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZXMgMTQuNC4xLjEuMyBhbmQgNy4xMi41IgorICAgIDo6PSB7IGRvdDFkQmFzZSAxIH0KKworZG90MWRCYXNlTnVtUG9ydHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBVTklUUyAgICAgICAicG9ydHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHBvcnRzIGNvbnRyb2xsZWQgYnkgdGhpcyBicmlkZ2luZworICAgICAgICBlbnRpdHkuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjQuMS4xLjMiCisgICAgOjo9IHsgZG90MWRCYXNlIDIgfQorCitkb3QxZEJhc2VUeXBlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIHVua25vd24oMSksCisgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50LW9ubHkoMiksCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZXJvdXRlLW9ubHkoMyksCisgICAgICAgICAgICAgICAgICAgIHNydCg0KQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkluZGljYXRlcyB3aGF0IHR5cGUgb2YgYnJpZGdpbmcgdGhpcyBicmlkZ2UgY2FuCisgICAgICAgIHBlcmZvcm0uICBJZiBhIGJyaWRnZSBpcyBhY3R1YWxseSBwZXJmb3JtaW5nIGEKKyAgICAgICAgY2VydGFpbiB0eXBlIG9mIGJyaWRnaW5nLCB0aGlzIHdpbGwgYmUgaW5kaWNhdGVkIGJ5CisgICAgICAgIGVudHJpZXMgaW4gdGhlIHBvcnQgdGFibGUgZm9yIHRoZSBnaXZlbiB0eXBlLiIKKyAgICA6Oj0geyBkb3QxZEJhc2UgMyB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIFRoZSBHZW5lcmljIEJyaWRnZSBQb3J0IFRhYmxlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCitkb3QxZEJhc2VQb3J0VGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBEb3QxZEJhc2VQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0YWJsZSB0aGF0IGNvbnRhaW5zIGdlbmVyaWMgaW5mb3JtYXRpb24gYWJvdXQgZXZlcnkKKyAgICAgICAgcG9ydCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJyaWRnZS4gIFRyYW5zcGFyZW50LAorICAgICAgICBzb3VyY2Utcm91dGUsIGFuZCBzcnQgcG9ydHMgYXJlIGluY2x1ZGVkLiIKKyAgICA6Oj0geyBkb3QxZEJhc2UgNCB9CisKK2RvdDFkQmFzZVBvcnRFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIERvdDFkQmFzZVBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGxpc3Qgb2YgaW5mb3JtYXRpb24gZm9yIGVhY2ggcG9ydCBvZiB0aGUgYnJpZGdlLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC40LjIsIDE0LjYuMSIKKyAgICBJTkRFWCAgeyBkb3QxZEJhc2VQb3J0IH0KKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0VGFibGUgMSB9CisKK0RvdDFkQmFzZVBvcnRFbnRyeSA6Oj0KKyAgICBTRVFVRU5DRSB7CisgICAgICAgIGRvdDFkQmFzZVBvcnQKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRCYXNlUG9ydElmSW5kZXgKKyAgICAgICAgICAgIEludGVyZmFjZUluZGV4LAorICAgICAgICBkb3QxZEJhc2VQb3J0Q2lyY3VpdAorICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgICAgIGRvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHMKKyAgICAgICAgICAgIENvdW50ZXIzMiwKKyAgICAgICAgZG90MWRCYXNlUG9ydE10dUV4Y2VlZGVkRGlzY2FyZHMKKyAgICAgICAgICAgIENvdW50ZXIzMgorICAgIH0KKworZG90MWRCYXNlUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMS4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQgZm9yIHdoaWNoIHRoaXMgZW50cnkKKyAgICAgICAgY29udGFpbnMgYnJpZGdlIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24uIgorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRFbnRyeSAxIH0KKworZG90MWRCYXNlUG9ydElmSW5kZXggT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlcmZhY2VJbmRleAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBvZiB0aGUgaWZJbmRleCBvYmplY3QsCisgICAgICAgIGRlZmluZWQgaW4gSUYtTUlCLCBmb3IgdGhlIGludGVyZmFjZSBjb3JyZXNwb25kaW5nCisgICAgICAgIHRvIHRoaXMgcG9ydC4iCisgICAgOjo9IHsgZG90MWRCYXNlUG9ydEVudHJ5IDIgfQorCitkb3QxZEJhc2VQb3J0Q2lyY3VpdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE9CSkVDVCBJREVOVElGSUVSCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJGb3IgYSBwb3J0IHRoYXQgKHBvdGVudGlhbGx5KSBoYXMgdGhlIHNhbWUgdmFsdWUgb2YKKyAgICAgICAgZG90MWRCYXNlUG9ydElmSW5kZXggYXMgYW5vdGhlciBwb3J0IG9uIHRoZSBzYW1lIGJyaWRnZS4KKyAgICAgICAgVGhpcyBvYmplY3QgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4gb2JqZWN0IGluc3RhbmNlCisgICAgICAgIHVuaXF1ZSB0byB0aGlzIHBvcnQuICBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgcG9ydHMgY29ycmVzcG9uZCBvbmUtdG8tb25lIHdpdGggbXVsdGlwbGUgWC4yNQorICAgICAgICB2aXJ0dWFsIGNpcmN1aXRzLCB0aGlzIHZhbHVlIG1pZ2h0IGlkZW50aWZ5IGFuIChlLmcuLAorICAgICAgICB0aGUgZmlyc3QpIG9iamVjdCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIFguMjUKKyAgICAgICAgdmlydHVhbCBjaXJjdWl0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwb3J0LgorCisgICAgICAgIEZvciBhIHBvcnQgd2hpY2ggaGFzIGEgdW5pcXVlIHZhbHVlIG9mCisgICAgICAgIGRvdDFkQmFzZVBvcnRJZkluZGV4LCB0aGlzIG9iamVjdCBjYW4gaGF2ZSB0aGUgdmFsdWUKKyAgICAgICAgeyAwIDAgfS4iCisgICAgOjo9IHsgZG90MWRCYXNlUG9ydEVudHJ5IDMgfQorCitkb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhpcyBwb3J0IGR1ZQorICAgICAgICB0byBleGNlc3NpdmUgdHJhbnNpdCBkZWxheSB0aHJvdWdoIHRoZSBicmlkZ2UuICBJdAorICAgICAgICBpcyBpbmNyZW1lbnRlZCBieSBib3RoIHRyYW5zcGFyZW50IGFuZCBzb3VyY2UKKyAgICAgICAgcm91dGUgYnJpZGdlcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNi4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0RW50cnkgNCB9CisKK2RvdDFkQmFzZVBvcnRNdHVFeGNlZWRlZERpc2NhcmRzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhpcyBwb3J0IGR1ZQorICAgICAgICB0byBhbiBleGNlc3NpdmUgc2l6ZS4gIEl0IGlzIGluY3JlbWVudGVkIGJ5IGJvdGgKKyAgICAgICAgdHJhbnNwYXJlbnQgYW5kIHNvdXJjZSByb3V0ZSBicmlkZ2VzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC42LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRFbnRyeSA1IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkU3RwIHN1YnRyZWUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkb3QxZFN0cCBzdWJ0cmVlIGlzIG9wdGlvbmFsLiAgSXQgaXMKKy0tIGltcGxlbWVudGVkIGJ5IHRob3NlIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlCistLSBQcm90b2NvbC4KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRTdHBQcm90b2NvbFNwZWNpZmljYXRpb24gT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgdW5rbm93bigxKSwKKyAgICAgICAgICAgICAgICAgICAgZGVjTGIxMDAoMiksCisgICAgICAgICAgICAgICAgICAgIGllZWU4MDIxZCgzKQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkFuIGluZGljYXRpb24gb2Ygd2hhdCB2ZXJzaW9uIG9mIHRoZSBTcGFubmluZyBUcmVlCisgICAgICAgIFByb3RvY29sIGlzIGJlaW5nIHJ1bi4gIFRoZSB2YWx1ZSAnZGVjTGIxMDAoMiknCisgICAgICAgIGluZGljYXRlcyB0aGUgREVDIExBTmJyaWRnZSAxMDAgU3Bhbm5pbmcgVHJlZSBwcm90b2NvbC4KKyAgICAgICAgSUVFRSA4MDIuMUQgaW1wbGVtZW50YXRpb25zIHdpbGwgcmV0dXJuICdpZWVlODAyMWQoMyknLgorICAgICAgICBJZiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIElFRUUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbAorICAgICAgICB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uCisgICAgICAgIGFyZSByZWxlYXNlZCBhIG5ldyB2YWx1ZSB3aWxsIGJlIGRlZmluZWQuIgorICAgIDo6PSB7IGRvdDFkU3RwIDEgfQorCitkb3QxZFN0cFByaW9yaXR5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgwLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2YgdGhlIHdyaXRlLWFibGUgcG9ydGlvbiBvZiB0aGUgQnJpZGdlIElECisgICAgICAgIChpLmUuLCB0aGUgZmlyc3QgdHdvIG9jdGV0cyBvZiB0aGUgKDggb2N0ZXQgbG9uZykgQnJpZGdlCisgICAgICAgIElEKS4gIFRoZSBvdGhlciAobGFzdCkgNiBvY3RldHMgb2YgdGhlIEJyaWRnZSBJRCBhcmUKKyAgICAgICAgZ2l2ZW4gYnkgdGhlIHZhbHVlIG9mIGRvdDFkQmFzZUJyaWRnZUFkZHJlc3MuCisgICAgICAgIE9uIGJyaWRnZXMgc3VwcG9ydGluZyBJRUVFIDgwMi4xdCBvciBJRUVFIDgwMi4xdywKKyAgICAgICAgcGVybWlzc2libGUgdmFsdWVzIGFyZSAwLTYxNDQwLCBpbiBzdGVwcyBvZiA0MDk2LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTggY2xhdXNlIDguMTAuMiwgVGFibGUgOC00LAorICAgICAgICBJRUVFIDgwMi4xdCBjbGF1c2UgOC4xMC4yLCBUYWJsZSA4LTQsIGNsYXVzZSAxNC4zLiIKKyAgICA6Oj0geyBkb3QxZFN0cCAyIH0KKworZG90MWRTdHBUaW1lU2luY2VUb3BvbG9neUNoYW5nZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVUaWNrcworICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHRpbWUgKGluIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQpIHNpbmNlIHRoZQorICAgICAgICBsYXN0IHRpbWUgYSB0b3BvbG9neSBjaGFuZ2Ugd2FzIGRldGVjdGVkIGJ5IHRoZQorICAgICAgICBicmlkZ2UgZW50aXR5LgorICAgICAgICBGb3IgUlNUUCwgdGhpcyByZXBvcnRzIHRoZSB0aW1lIHNpbmNlIHRoZSB0Y1doaWxlCisgICAgICAgIHRpbWVyIGZvciBhbnkgcG9ydCBvbiB0aGlzIEJyaWRnZSB3YXMgbm9uemVyby4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4IGNsYXVzZSAxNC44LjEuMS4sCisgICAgICAgIElFRUUgODAyLjF3IGNsYXVzZSAxNC44LjEuMS4iCisgICAgOjo9IHsgZG90MWRTdHAgMyB9CisKK2RvdDFkU3RwVG9wQ2hhbmdlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiB0b3BvbG9neSBjaGFuZ2VzIGRldGVjdGVkIGJ5CisgICAgICAgIHRoaXMgYnJpZGdlIHNpbmNlIHRoZSBtYW5hZ2VtZW50IGVudGl0eSB3YXMgbGFzdAorICAgICAgICByZXNldCBvciBpbml0aWFsaXplZC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4IGNsYXVzZSAxNC44LjEuMS4iCisgICAgOjo9IHsgZG90MWRTdHAgNCB9CisKK2RvdDFkU3RwRGVzaWduYXRlZFJvb3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBCcmlkZ2VJZAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGJyaWRnZSBpZGVudGlmaWVyIG9mIHRoZSByb290IG9mIHRoZSBzcGFubmluZworICAgICAgICB0cmVlLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLAorICAgICAgICBhcyBleGVjdXRlZCBieSB0aGlzIG5vZGUuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMKKyAgICAgICAgdGhlIFJvb3QgSWRlbnRpZmllciBwYXJhbWV0ZXIgaW4gYWxsIENvbmZpZ3VyYXRpb24KKyAgICAgICAgQnJpZGdlIFBEVXMgb3JpZ2luYXRlZCBieSB0aGlzIG5vZGUuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjEiCisgICAgOjo9IHsgZG90MWRTdHAgNSB9CisKK2RvdDFkU3RwUm9vdENvc3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb3N0IG9mIHRoZSBwYXRoIHRvIHRoZSByb290IGFzIHNlZW4gZnJvbQorICAgICAgICB0aGlzIGJyaWRnZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuMiIKKyAgICA6Oj0geyBkb3QxZFN0cCA2IH0KKworZG90MWRTdHBSb290UG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0IHRoYXQgb2ZmZXJzIHRoZSBsb3dlc3QKKyAgICAgICAgY29zdCBwYXRoIGZyb20gdGhpcyBicmlkZ2UgdG8gdGhlIHJvb3QgYnJpZGdlLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy4zIgorICAgIDo6PSB7IGRvdDFkU3RwIDcgfQorCitkb3QxZFN0cE1heEFnZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBtYXhpbXVtIGFnZSBvZiBTcGFubmluZyBUcmVlIFByb3RvY29sIGluZm9ybWF0aW9uCisgICAgICAgIGxlYXJuZWQgZnJvbSB0aGUgbmV0d29yayBvbiBhbnkgcG9ydCBiZWZvcmUgaXQgaXMKKyAgICAgICAgZGlzY2FyZGVkLCBpbiB1bml0cyBvZiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLiAgVGhpcyBpcworICAgICAgICB0aGUgYWN0dWFsIHZhbHVlIHRoYXQgdGhpcyBicmlkZ2UgaXMgY3VycmVudGx5IHVzaW5nLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy40IgorICAgIDo6PSB7IGRvdDFkU3RwIDggfQorCitkb3QxZFN0cEhlbGxvVGltZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSB0cmFuc21pc3Npb24gb2YKKyAgICAgICAgQ29uZmlndXJhdGlvbiBicmlkZ2UgUERVcyBieSB0aGlzIG5vZGUgb24gYW55IHBvcnQgd2hlbgorICAgICAgICBpdCBpcyB0aGUgcm9vdCBvZiB0aGUgc3Bhbm5pbmcgdHJlZSwgb3IgdHJ5aW5nIHRvIGJlY29tZQorICAgICAgICBzbywgaW4gdW5pdHMgb2YgaHVuZHJlZHRocyBvZiBhIHNlY29uZC4gIFRoaXMgaXMgdGhlCisgICAgICAgIGFjdHVhbCB2YWx1ZSB0aGF0IHRoaXMgYnJpZGdlIGlzIGN1cnJlbnRseSB1c2luZy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuNSIKKyAgICA6Oj0geyBkb3QxZFN0cCA5IH0KKworZG90MWRTdHBIb2xkVGltZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyB0aW1lIHZhbHVlIGRldGVybWluZXMgdGhlIGludGVydmFsIGxlbmd0aAorICAgICAgICBkdXJpbmcgd2hpY2ggbm8gbW9yZSB0aGFuIHR3byBDb25maWd1cmF0aW9uIGJyaWRnZQorICAgICAgICBQRFVzIHNoYWxsIGJlIHRyYW5zbWl0dGVkIGJ5IHRoaXMgbm9kZSwgaW4gdW5pdHMKKyAgICAgICAgb2YgaHVuZHJlZHRocyBvZiBhIHNlY29uZC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuMTQiCisgICAgOjo9IHsgZG90MWRTdHAgMTAgfQorCitkb3QxZFN0cEZvcndhcmREZWxheSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgdGltZSB2YWx1ZSwgbWVhc3VyZWQgaW4gdW5pdHMgb2YgaHVuZHJlZHRocyBvZiBhCisgICAgICAgIHNlY29uZCwgY29udHJvbHMgaG93IGZhc3QgYSBwb3J0IGNoYW5nZXMgaXRzIHNwYW5uaW5nCisgICAgICAgIHN0YXRlIHdoZW4gbW92aW5nIHRvd2FyZHMgdGhlIEZvcndhcmRpbmcgc3RhdGUuICBUaGUKKyAgICAgICAgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbG9uZyB0aGUgcG9ydCBzdGF5cyBpbiBlYWNoIG9mIHRoZQorICAgICAgICBMaXN0ZW5pbmcgYW5kIExlYXJuaW5nIHN0YXRlcywgd2hpY2ggcHJlY2VkZSB0aGUKKyAgICAgICAgRm9yd2FyZGluZyBzdGF0ZS4gIFRoaXMgdmFsdWUgaXMgYWxzbyB1c2VkIHdoZW4gYQorICAgICAgICB0b3BvbG9neSBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGlzIHVuZGVyd2F5LCB0bworICAgICAgICBhZ2UgYWxsIGR5bmFtaWMgZW50cmllcyBpbiB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZS4KKyAgICAgICAgW05vdGUgdGhhdCB0aGlzIHZhbHVlIGlzIHRoZSBvbmUgdGhhdCB0aGlzIGJyaWRnZSBpcworICAgICAgICBjdXJyZW50bHkgdXNpbmcsIGluIGNvbnRyYXN0IHRvCisgICAgICAgIGRvdDFkU3RwQnJpZGdlRm9yd2FyZERlbGF5LCB3aGljaCBpcyB0aGUgdmFsdWUgdGhhdCB0aGlzCisgICAgICAgIGJyaWRnZSBhbmQgYWxsIG90aGVycyB3b3VsZCBzdGFydCB1c2luZyBpZi93aGVuIHRoaXMKKyAgICAgICAgYnJpZGdlIHdlcmUgdG8gYmVjb21lIHRoZSByb290Ll0iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuNiIKKyAgICA6Oj0geyBkb3QxZFN0cCAxMSB9CisKK2RvdDFkU3RwQnJpZGdlTWF4QWdlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dCAoNjAwLi40MDAwKQorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSB0aGF0IGFsbCBicmlkZ2VzIHVzZSBmb3IgTWF4QWdlIHdoZW4gdGhpcworICAgICAgICBicmlkZ2UgaXMgYWN0aW5nIGFzIHRoZSByb290LiAgTm90ZSB0aGF0IDgwMi4xRC0xOTk4CisgICAgICAgIHNwZWNpZmllcyB0aGF0IHRoZSByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgcmVsYXRlZAorICAgICAgICB0byB0aGUgdmFsdWUgb2YgZG90MWRTdHBCcmlkZ2VIZWxsb1RpbWUuICBUaGUKKyAgICAgICAgZ3JhbnVsYXJpdHkgb2YgdGhpcyB0aW1lciBpcyBzcGVjaWZpZWQgYnkgODAyLjFELTE5OTggdG8KKyAgICAgICAgYmUgMSBzZWNvbmQuICBBbiBhZ2VudCBtYXkgcmV0dXJuIGEgYmFkVmFsdWUgZXJyb3IgaWYgYQorICAgICAgICBzZXQgaXMgYXR0ZW1wdGVkIHRvIGEgdmFsdWUgdGhhdCBpcyBub3QgYSB3aG9sZSBudW1iZXIKKyAgICAgICAgb2Ygc2Vjb25kcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuOCIKKyAgICA6Oj0geyBkb3QxZFN0cCAxMiB9CisKK2RvdDFkU3RwQnJpZGdlSGVsbG9UaW1lIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dCAoMTAwLi4xMDAwKQorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSB0aGF0IGFsbCBicmlkZ2VzIHVzZSBmb3IgSGVsbG9UaW1lIHdoZW4gdGhpcworICAgICAgICBicmlkZ2UgaXMgYWN0aW5nIGFzIHRoZSByb290LiAgVGhlIGdyYW51bGFyaXR5IG9mIHRoaXMKKyAgICAgICAgdGltZXIgaXMgc3BlY2lmaWVkIGJ5IDgwMi4xRC0xOTk4IHRvIGJlIDEgc2Vjb25kLiAgQW4KKyAgICAgICAgYWdlbnQgbWF5IHJldHVybiBhIGJhZFZhbHVlIGVycm9yIGlmIGEgc2V0IGlzIGF0dGVtcHRlZAorCisgICAgICAgIHRvIGEgdmFsdWUgdGhhdCBpcyBub3QgYSB3aG9sZSBudW1iZXIgb2Ygc2Vjb25kcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuOSIKKyAgICA6Oj0geyBkb3QxZFN0cCAxMyB9CisKK2RvdDFkU3RwQnJpZGdlRm9yd2FyZERlbGF5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dCAoNDAwLi4zMDAwKQorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSB0aGF0IGFsbCBicmlkZ2VzIHVzZSBmb3IgRm9yd2FyZERlbGF5IHdoZW4KKyAgICAgICAgdGhpcyBicmlkZ2UgaXMgYWN0aW5nIGFzIHRoZSByb290LiAgTm90ZSB0aGF0CisgICAgICAgIDgwMi4xRC0xOTk4IHNwZWNpZmllcyB0aGF0IHRoZSByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgaXMgcmVsYXRlZCB0byB0aGUgdmFsdWUgb2YgZG90MWRTdHBCcmlkZ2VNYXhBZ2UuICBUaGUKKyAgICAgICAgZ3JhbnVsYXJpdHkgb2YgdGhpcyB0aW1lciBpcyBzcGVjaWZpZWQgYnkgODAyLjFELTE5OTggdG8KKyAgICAgICAgYmUgMSBzZWNvbmQuICBBbiBhZ2VudCBtYXkgcmV0dXJuIGEgYmFkVmFsdWUgZXJyb3IgaWYgYQorICAgICAgICBzZXQgaXMgYXR0ZW1wdGVkIHRvIGEgdmFsdWUgdGhhdCBpcyBub3QgYSB3aG9sZSBudW1iZXIKKyAgICAgICAgb2Ygc2Vjb25kcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuMTAiCisgICAgOjo9IHsgZG90MWRTdHAgMTQgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBUaGUgU3Bhbm5pbmcgVHJlZSBQb3J0IFRhYmxlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkU3RwUG9ydFRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRG90MWRTdHBQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0YWJsZSB0aGF0IGNvbnRhaW5zIHBvcnQtc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAgICAgICAgZm9yIHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKyAgICA6Oj0geyBkb3QxZFN0cCAxNSB9CisKK2RvdDFkU3RwUG9ydEVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgRG90MWRTdHBQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBsaXN0IG9mIGluZm9ybWF0aW9uIG1haW50YWluZWQgYnkgZXZlcnkgcG9ydCBhYm91dAorICAgICAgICB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCBzdGF0ZSBmb3IgdGhhdCBwb3J0LiIKKyAgICBJTkRFWCAgIHsgZG90MWRTdHBQb3J0IH0KKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRUYWJsZSAxIH0KKworRG90MWRTdHBQb3J0RW50cnkgOjo9CisgICAgU0VRVUVOQ0UgeworCisgICAgICAgIGRvdDFkU3RwUG9ydAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFN0cFBvcnRQcmlvcml0eQorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFN0cFBvcnRTdGF0ZQorICAgICAgICAgICAgSU5URUdFUiwKKyAgICAgICAgZG90MWRTdHBQb3J0RW5hYmxlCisgICAgICAgICAgICBJTlRFR0VSLAorICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdAorICAgICAgICAgICAgQnJpZGdlSWQsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2UKKyAgICAgICAgICAgIEJyaWRnZUlkLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydAorICAgICAgICAgICAgT0NURVQgU1RSSU5HLAorICAgICAgICBkb3QxZFN0cFBvcnRGb3J3YXJkVHJhbnNpdGlvbnMKKyAgICAgICAgICAgIENvdW50ZXIzMiwKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QzMgorICAgICAgICAgICAgSW50ZWdlcjMyCisgICAgfQorCitkb3QxZFN0cFBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0IGZvciB3aGljaCB0aGlzIGVudHJ5CisgICAgICAgIGNvbnRhaW5zIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgbWFuYWdlbWVudCBpbmZvcm1hdGlvbi4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuOC4yLjEuMiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSAxIH0KKworZG90MWRTdHBQb3J0UHJpb3JpdHkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDAuLjI1NSkKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2YgdGhlIHByaW9yaXR5IGZpZWxkIHRoYXQgaXMgY29udGFpbmVkIGluCisgICAgICAgIHRoZSBmaXJzdCAoaW4gbmV0d29yayBieXRlIG9yZGVyKSBvY3RldCBvZiB0aGUgKDIgb2N0ZXQKKyAgICAgICAgbG9uZykgUG9ydCBJRC4gIFRoZSBvdGhlciBvY3RldCBvZiB0aGUgUG9ydCBJRCBpcyBnaXZlbgorICAgICAgICBieSB0aGUgdmFsdWUgb2YgZG90MWRTdHBQb3J0LgorICAgICAgICBPbiBicmlkZ2VzIHN1cHBvcnRpbmcgSUVFRSA4MDIuMXQgb3IgSUVFRSA4MDIuMXcsCisgICAgICAgIHBlcm1pc3NpYmxlIHZhbHVlcyBhcmUgMC0yNDAsIGluIHN0ZXBzIG9mIDE2LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTggY2xhdXNlIDguMTAuMiwgVGFibGUgOC00LAorICAgICAgICBJRUVFIDgwMi4xdCBjbGF1c2UgOC4xMC4yLCBUYWJsZSA4LTQsIGNsYXVzZSAxNC4zLiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSAyIH0KKworZG90MWRTdHBQb3J0U3RhdGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQoMSksCisgICAgICAgICAgICAgICAgICAgIGJsb2NraW5nKDIpLAorICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcoMyksCisgICAgICAgICAgICAgICAgICAgIGxlYXJuaW5nKDQpLAorICAgICAgICAgICAgICAgICAgICBmb3J3YXJkaW5nKDUpLAorICAgICAgICAgICAgICAgICAgICBicm9rZW4oNikKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9ydCdzIGN1cnJlbnQgc3RhdGUsIGFzIGRlZmluZWQgYnkgYXBwbGljYXRpb24gb2YKKyAgICAgICAgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuICBUaGlzIHN0YXRlIGNvbnRyb2xzIHdoYXQKKyAgICAgICAgYWN0aW9uIGEgcG9ydCB0YWtlcyBvbiByZWNlcHRpb24gb2YgYSBmcmFtZS4gIElmIHRoZQorICAgICAgICBicmlkZ2UgaGFzIGRldGVjdGVkIGEgcG9ydCB0aGF0IGlzIG1hbGZ1bmN0aW9uaW5nLCBpdAorICAgICAgICB3aWxsIHBsYWNlIHRoYXQgcG9ydCBpbnRvIHRoZSBicm9rZW4oNikgc3RhdGUuICBGb3IKKyAgICAgICAgcG9ydHMgdGhhdCBhcmUgZGlzYWJsZWQgKHNlZSBkb3QxZFN0cFBvcnRFbmFibGUpLCB0aGlzCisgICAgICAgIG9iamVjdCB3aWxsIGhhdmUgYSB2YWx1ZSBvZiBkaXNhYmxlZCgxKS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuMiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSAzIH0KKworZG90MWRTdHBQb3J0RW5hYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQoMSksCisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkKDIpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBlbmFibGVkL2Rpc2FibGVkIHN0YXR1cyBvZiB0aGUgcG9ydC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuMiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA0IH0KKworZG90MWRTdHBQb3J0UGF0aENvc3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb250cmlidXRpb24gb2YgdGhpcyBwb3J0IHRvIHRoZSBwYXRoIGNvc3Qgb2YKKyAgICAgICAgcGF0aHMgdG93YXJkcyB0aGUgc3Bhbm5pbmcgdHJlZSByb290IHdoaWNoIGluY2x1ZGUKKyAgICAgICAgdGhpcyBwb3J0LiAgODAyLjFELTE5OTggcmVjb21tZW5kcyB0aGF0IHRoZSBkZWZhdWx0CisgICAgICAgIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGJlIGluIGludmVyc2UgcHJvcG9ydGlvbiB0bworCisgICAgICAgIHRoZSBzcGVlZCBvZiB0aGUgYXR0YWNoZWQgTEFOLgorCisgICAgICAgIE5ldyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN1cHBvcnQgZG90MWRTdHBQb3J0UGF0aENvc3QzMi4KKyAgICAgICAgSWYgdGhlIHBvcnQgcGF0aCBjb3N0cyBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoaXMKKyAgICAgICAgb2JqZWN0IHRoZW4gdGhpcyBvYmplY3Qgc2hvdWxkIHJlcG9ydCB0aGUgbWF4aW11bSB2YWx1ZSwKKyAgICAgICAgbmFtZWx5IDY1NTM1LiAgQXBwbGljYXRpb25zIHNob3VsZCB0cnkgdG8gcmVhZCB0aGUKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QzMiBvYmplY3QgaWYgdGhpcyBvYmplY3QgcmVwb3J0cworICAgICAgICB0aGUgbWF4aW11bSB2YWx1ZS4iCisgICAgUkVGRVJFTkNFICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuMyIKKyAgICAgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgNSB9CisKK2RvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQnJpZGdlSWQKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB1bmlxdWUgQnJpZGdlIElkZW50aWZpZXIgb2YgdGhlIEJyaWRnZQorICAgICAgICByZWNvcmRlZCBhcyB0aGUgUm9vdCBpbiB0aGUgQ29uZmlndXJhdGlvbiBCUERVcworICAgICAgICB0cmFuc21pdHRlZCBieSB0aGUgRGVzaWduYXRlZCBCcmlkZ2UgZm9yIHRoZQorICAgICAgICBzZWdtZW50IHRvIHdoaWNoIHRoZSBwb3J0IGlzIGF0dGFjaGVkLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS40IgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDYgfQorCitkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBhdGggY29zdCBvZiB0aGUgRGVzaWduYXRlZCBQb3J0IG9mIHRoZSBzZWdtZW50CisgICAgICAgIGNvbm5lY3RlZCB0byB0aGlzIHBvcnQuICBUaGlzIHZhbHVlIGlzIGNvbXBhcmVkIHRvIHRoZQorICAgICAgICBSb290IFBhdGggQ29zdCBmaWVsZCBpbiByZWNlaXZlZCBicmlkZ2UgUERVcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuNSIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA3IH0KKworZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEJyaWRnZUlkCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgQnJpZGdlIElkZW50aWZpZXIgb2YgdGhlIGJyaWRnZSB0aGF0IHRoaXMKKyAgICAgICAgcG9ydCBjb25zaWRlcnMgdG8gYmUgdGhlIERlc2lnbmF0ZWQgQnJpZGdlIGZvcgorICAgICAgICB0aGlzIHBvcnQncyBzZWdtZW50LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS42IgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDggfQorCitkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAoU0laRSAoMikpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgUG9ydCBJZGVudGlmaWVyIG9mIHRoZSBwb3J0IG9uIHRoZSBEZXNpZ25hdGVkCisgICAgICAgIEJyaWRnZSBmb3IgdGhpcyBwb3J0J3Mgc2VnbWVudC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuNyIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA5IH0KKworZG90MWRTdHBQb3J0Rm9yd2FyZFRyYW5zaXRpb25zIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgdHJhbnNpdGlvbmVkCisgICAgICAgIGZyb20gdGhlIExlYXJuaW5nIHN0YXRlIHRvIHRoZSBGb3J3YXJkaW5nIHN0YXRlLiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSAxMCB9CisKK2RvdDFkU3RwUG9ydFBhdGhDb3N0MzIgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEuLjIwMDAwMDAwMCkKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29udHJpYnV0aW9uIG9mIHRoaXMgcG9ydCB0byB0aGUgcGF0aCBjb3N0IG9mCisgICAgICAgIHBhdGhzIHRvd2FyZHMgdGhlIHNwYW5uaW5nIHRyZWUgcm9vdCB3aGljaCBpbmNsdWRlCisgICAgICAgIHRoaXMgcG9ydC4gIDgwMi4xRC0xOTk4IHJlY29tbWVuZHMgdGhhdCB0aGUgZGVmYXVsdAorICAgICAgICB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBiZSBpbiBpbnZlcnNlIHByb3BvcnRpb24gdG8KKyAgICAgICAgdGhlIHNwZWVkIG9mIHRoZSBhdHRhY2hlZCBMQU4uCisKKyAgICAgICAgVGhpcyBvYmplY3QgcmVwbGFjZXMgZG90MWRTdHBQb3J0UGF0aENvc3QgdG8gc3VwcG9ydAorICAgICAgICBJRUVFIDgwMi4xdC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xdCBjbGF1c2UgOC4xMC4yLCBUYWJsZSA4LTUuIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDExIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkVHAgc3VidHJlZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gSW1wbGVtZW50YXRpb24gb2YgdGhlIGRvdDFkVHAgc3VidHJlZSBpcyBvcHRpb25hbC4gIEl0IGlzCistLSBpbXBsZW1lbnRlZCBieSB0aG9zZSBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQKKy0tIGJyaWRnaW5nIG1vZGUuICBBIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQKKy0tIHRoaXMgc3VidHJlZS4KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRUcExlYXJuZWRFbnRyeURpc2NhcmRzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIEZvcndhcmRpbmcgRGF0YWJhc2UgZW50cmllcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBvciB3b3VsZCBoYXZlIGJlZW4gbGVhcm5lZCwgYnV0IGhhdmUgYmVlbgorICAgICAgICBkaXNjYXJkZWQgZHVlIHRvIGEgbGFjayBvZiBzdG9yYWdlIHNwYWNlIGluIHRoZQorICAgICAgICBGb3J3YXJkaW5nIERhdGFiYXNlLiAgSWYgdGhpcyBjb3VudGVyIGlzIGluY3JlYXNpbmcsIGl0CisgICAgICAgIGluZGljYXRlcyB0aGF0IHRoZSBGb3J3YXJkaW5nIERhdGFiYXNlIGlzIHJlZ3VsYXJseQorICAgICAgICBiZWNvbWluZyBmdWxsIChhIGNvbmRpdGlvbiB0aGF0IGhhcyB1bnBsZWFzYW50CisgICAgICAgIHBlcmZvcm1hbmNlIGVmZmVjdHMgb24gdGhlIHN1Ym5ldHdvcmspLiAgSWYgdGhpcyBjb3VudGVyCisgICAgICAgIGhhcyBhIHNpZ25pZmljYW50IHZhbHVlIGJ1dCBpcyBub3QgcHJlc2VudGx5IGluY3JlYXNpbmcsCisgICAgICAgIGl0IGluZGljYXRlcyB0aGF0IHRoZSBwcm9ibGVtIGhhcyBiZWVuIG9jY3VycmluZyBidXQgaXMKKyAgICAgICAgbm90IHBlcnNpc3RlbnQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjcuMS4xLjMiCisgICAgOjo9IHsgZG90MWRUcCAxIH0KKworZG90MWRUcEFnaW5nVGltZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMTAuLjEwMDAwMDApCisgICAgVU5JVFMgICAgICAgInNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dAorICAgICAgICBkeW5hbWljYWxseS1sZWFybmVkIGZvcndhcmRpbmcgaW5mb3JtYXRpb24uCisgICAgICAgIDgwMi4xRC0xOTk4IHJlY29tbWVuZHMgYSBkZWZhdWx0IG9mIDMwMCBzZWNvbmRzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC43LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkVHAgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tICBUaGUgRm9yd2FyZGluZyBEYXRhYmFzZSBmb3IgVHJhbnNwYXJlbnQgQnJpZGdlcworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFRwRmRiVGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBEb3QxZFRwRmRiRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0YWJsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHVuaWNhc3QKKyAgICAgICAgZW50cmllcyBmb3Igd2hpY2ggdGhlIGJyaWRnZSBoYXMgZm9yd2FyZGluZyBhbmQvb3IKKyAgICAgICAgZmlsdGVyaW5nIGluZm9ybWF0aW9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkCisgICAgICAgIGJ5IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZyBmdW5jdGlvbiBpbgorICAgICAgICBkZXRlcm1pbmluZyBob3cgdG8gcHJvcGFnYXRlIGEgcmVjZWl2ZWQgZnJhbWUuIgorICAgIDo6PSB7IGRvdDFkVHAgMyB9CisKK2RvdDFkVHBGZGJFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIERvdDFkVHBGZGJFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIHVuaWNhc3QgTUFDIGFkZHJlc3MKKyAgICAgICAgZm9yIHdoaWNoIHRoZSBicmlkZ2UgaGFzIHNvbWUgZm9yd2FyZGluZyBhbmQvb3IKKyAgICAgICAgZmlsdGVyaW5nIGluZm9ybWF0aW9uLiIKKyAgICBJTkRFWCAgIHsgZG90MWRUcEZkYkFkZHJlc3MgfQorICAgIDo6PSB7IGRvdDFkVHBGZGJUYWJsZSAxIH0KKworRG90MWRUcEZkYkVudHJ5IDo6PQorICAgIFNFUVVFTkNFIHsKKyAgICAgICAgZG90MWRUcEZkYkFkZHJlc3MKKyAgICAgICAgICAgIE1hY0FkZHJlc3MsCisgICAgICAgIGRvdDFkVHBGZGJQb3J0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkVHBGZGJTdGF0dXMKKyAgICAgICAgICAgIElOVEVHRVIKKyAgICB9CisKK2RvdDFkVHBGZGJBZGRyZXNzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgTWFjQWRkcmVzcworICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB1bmljYXN0IE1BQyBhZGRyZXNzIGZvciB3aGljaCB0aGUgYnJpZGdlIGhhcworICAgICAgICBmb3J3YXJkaW5nIGFuZC9vciBmaWx0ZXJpbmcgaW5mb3JtYXRpb24uIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDcuOS4xLCA3LjkuMiIKKyAgICA6Oj0geyBkb3QxZFRwRmRiRW50cnkgMSB9CisKK2RvdDFkVHBGZGJQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJFaXRoZXIgdGhlIHZhbHVlICcwJywgb3IgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0IG9uCisgICAgICAgIHdoaWNoIGEgZnJhbWUgaGF2aW5nIGEgc291cmNlIGFkZHJlc3MgZXF1YWwgdG8gdGhlIHZhbHVlCisgICAgICAgIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mIGRvdDFkVHBGZGJBZGRyZXNzIGhhcworICAgICAgICBiZWVuIHNlZW4uICBBIHZhbHVlIG9mICcwJyBpbmRpY2F0ZXMgdGhhdCB0aGUgcG9ydAorICAgICAgICBudW1iZXIgaGFzIG5vdCBiZWVuIGxlYXJuZWQsIGJ1dCB0aGF0IHRoZSBicmlkZ2UgZG9lcworICAgICAgICBoYXZlIHNvbWUgZm9yd2FyZGluZy9maWx0ZXJpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcworICAgICAgICBhZGRyZXNzIChlLmcuLCBpbiB0aGUgZG90MWRTdGF0aWNUYWJsZSkuICBJbXBsZW1lbnRvcnMKKyAgICAgICAgYXJlIGVuY291cmFnZWQgdG8gYXNzaWduIHRoZSBwb3J0IHZhbHVlIHRvIHRoaXMgb2JqZWN0CisgICAgICAgIHdoZW5ldmVyIGl0IGlzIGxlYXJuZWQsIGV2ZW4gZm9yIGFkZHJlc3NlcyBmb3Igd2hpY2ggdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2YgZG90MWRUcEZkYlN0YXR1cyBpcyBub3QKKyAgICAgICAgbGVhcm5lZCgzKS4iCisgICAgOjo9IHsgZG90MWRUcEZkYkVudHJ5IDIgfQorCitkb3QxZFRwRmRiU3RhdHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyKDEpLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkKDIpLAorICAgICAgICAgICAgICAgICAgICBsZWFybmVkKDMpLAorICAgICAgICAgICAgICAgICAgICBzZWxmKDQpLAorICAgICAgICAgICAgICAgICAgICBtZ210KDUpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0YXR1cyBvZiB0aGlzIGVudHJ5LiAgVGhlIG1lYW5pbmdzIG9mIHRoZQorICAgICAgICB2YWx1ZXMgYXJlOgorICAgICAgICAgICAgb3RoZXIoMSkgLSBub25lIG9mIHRoZSBmb2xsb3dpbmcuICBUaGlzIHdvdWxkCisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgY2FzZSB3aGVyZSBzb21lIG90aGVyIE1JQiBvYmplY3QKKyAgICAgICAgICAgICAgICAobm90IHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgZG90MWRUcEZkYlBvcnQsIG5vciBhbiBlbnRyeSBpbiB0aGUKKyAgICAgICAgICAgICAgICBkb3QxZFN0YXRpY1RhYmxlKSBpcyBiZWluZyB1c2VkIHRvIGRldGVybWluZSBpZgorICAgICAgICAgICAgICAgIGFuZCBob3cgZnJhbWVzIGFkZHJlc3NlZCB0byB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiBkb3QxZFRwRmRiQWRkcmVzcyBhcmUKKyAgICAgICAgICAgICAgICBiZWluZyBmb3J3YXJkZWQuCisgICAgICAgICAgICBpbnZhbGlkKDIpIC0gdGhpcyBlbnRyeSBpcyBubyBsb25nZXIgdmFsaWQgKGUuZy4sCisgICAgICAgICAgICAgICAgaXQgd2FzIGxlYXJuZWQgYnV0IGhhcyBzaW5jZSBhZ2VkIG91dCksIGJ1dCBoYXMKKyAgICAgICAgICAgICAgICBub3QgeWV0IGJlZW4gZmx1c2hlZCBmcm9tIHRoZSB0YWJsZS4KKyAgICAgICAgICAgIGxlYXJuZWQoMykgLSB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICBvZiBkb3QxZFRwRmRiUG9ydCB3YXMgbGVhcm5lZCwgYW5kIGlzIGJlaW5nCisgICAgICAgICAgICAgICAgdXNlZC4KKyAgICAgICAgICAgIHNlbGYoNCkgLSB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICBkb3QxZFRwRmRiQWRkcmVzcyByZXByZXNlbnRzIG9uZSBvZiB0aGUgYnJpZGdlJ3MKKyAgICAgICAgICAgICAgICBhZGRyZXNzZXMuICBUaGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgIGRvdDFkVHBGZGJQb3J0IGluZGljYXRlcyB3aGljaCBvZiB0aGUgYnJpZGdlJ3MKKyAgICAgICAgICAgICAgICBwb3J0cyBoYXMgdGhpcyBhZGRyZXNzLgorICAgICAgICAgICAgbWdtdCg1KSAtIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgIGRvdDFkVHBGZGJBZGRyZXNzIGlzIGFsc28gdGhlIHZhbHVlIG9mIGFuCisgICAgICAgICAgICAgICAgZXhpc3RpbmcgaW5zdGFuY2Ugb2YgZG90MWRTdGF0aWNBZGRyZXNzLiIKKyAgICA6Oj0geyBkb3QxZFRwRmRiRW50cnkgMyB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tICBQb3J0IFRhYmxlIGZvciBUcmFuc3BhcmVudCBCcmlkZ2VzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkVHBQb3J0VGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBEb3QxZFRwUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBldmVyeSBwb3J0IHRoYXQKKyAgICAgICAgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNwYXJlbnQgYnJpZGdlLiIKKyAgICA6Oj0geyBkb3QxZFRwIDQgfQorCitkb3QxZFRwUG9ydEVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgRG90MWRUcFBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGxpc3Qgb2YgaW5mb3JtYXRpb24gZm9yIGVhY2ggcG9ydCBvZiBhIHRyYW5zcGFyZW50CisgICAgICAgIGJyaWRnZS4iCisgICAgSU5ERVggICB7IGRvdDFkVHBQb3J0IH0KKyAgICA6Oj0geyBkb3QxZFRwUG9ydFRhYmxlIDEgfQorCitEb3QxZFRwUG9ydEVudHJ5IDo6PQorICAgIFNFUVVFTkNFIHsKKyAgICAgICAgZG90MWRUcFBvcnQKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRUcFBvcnRNYXhJbmZvCisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkVHBQb3J0SW5GcmFtZXMKKyAgICAgICAgICAgIENvdW50ZXIzMiwKKyAgICAgICAgZG90MWRUcFBvcnRPdXRGcmFtZXMKKyAgICAgICAgICAgIENvdW50ZXIzMiwKKyAgICAgICAgZG90MWRUcFBvcnRJbkRpc2NhcmRzCisgICAgICAgICAgICBDb3VudGVyMzIKKyAgICB9CisKK2RvdDFkVHBQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydCBmb3Igd2hpY2ggdGhpcyBlbnRyeQorICAgICAgICBjb250YWlucyBUcmFuc3BhcmVudCBicmlkZ2luZyBtYW5hZ2VtZW50IGluZm9ybWF0aW9uLiIKKyAgICA6Oj0geyBkb3QxZFRwUG9ydEVudHJ5IDEgfQorCistLSBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSBpZk10dSBhcyB0aGUgc2l6ZSBvZiB0aGUKKy0tIGxhcmdlc3QgSU5GTyBmaWVsZCwgYnV0IHdlIGNhbid0IGJlY2F1c2UgaWZNdHUgaXMgZGVmaW5lZAorLS0gdG8gYmUgdGhlIHNpemUgdGhhdCB0aGUgKGludGVyLSluZXR3b3JrIGxheWVyIGNhbiB1c2UsIHdoaWNoCistLSBjYW4gZGlmZmVyIGZyb20gdGhlIE1BQyBsYXllciAoZXNwZWNpYWxseSBpZiBzZXZlcmFsIGxheWVycworLS0gb2YgZW5jYXBzdWxhdGlvbiBhcmUgdXNlZCkuCisKK2RvdDFkVHBQb3J0TWF4SW5mbyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIFVOSVRTICAgICAgICJieXRlcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIElORk8gKG5vbi1NQUMpIGZpZWxkIHRoYXQKKworICAgICAgICB0aGlzIHBvcnQgd2lsbCByZWNlaXZlIG9yIHRyYW5zbWl0LiIKKyAgICA6Oj0geyBkb3QxZFRwUG9ydEVudHJ5IDIgfQorCitkb3QxZFRwUG9ydEluRnJhbWVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgVU5JVFMgICAgICAgImZyYW1lcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ5IHRoaXMKKyAgICAgICAgcG9ydCBmcm9tIGl0cyBzZWdtZW50LiAgTm90ZSB0aGF0IGEgZnJhbWUgcmVjZWl2ZWQgb24gdGhlCisgICAgICAgIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9ydCBpcyBvbmx5IGNvdW50ZWQgYnkKKyAgICAgICAgdGhpcyBvYmplY3QgaWYgYW5kIG9ubHkgaWYgaXQgaXMgZm9yIGEgcHJvdG9jb2wgYmVpbmcKKyAgICAgICAgcHJvY2Vzc2VkIGJ5IHRoZSBsb2NhbCBicmlkZ2luZyBmdW5jdGlvbiwgaW5jbHVkaW5nCisgICAgICAgIGJyaWRnZSBtYW5hZ2VtZW50IGZyYW1lcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNi4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZFRwUG9ydEVudHJ5IDMgfQorCitkb3QxZFRwUG9ydE91dEZyYW1lcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIFVOSVRTICAgICAgICJmcmFtZXMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCBieSB0aGlzCisgICAgICAgIHBvcnQgdG8gaXRzIHNlZ21lbnQuICBOb3RlIHRoYXQgYSBmcmFtZSB0cmFuc21pdHRlZCBvbgorICAgICAgICB0aGUgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwb3J0IGlzIG9ubHkgY291bnRlZAorICAgICAgICBieSB0aGlzIG9iamVjdCBpZiBhbmQgb25seSBpZiBpdCBpcyBmb3IgYSBwcm90b2NvbCBiZWluZworICAgICAgICBwcm9jZXNzZWQgYnkgdGhlIGxvY2FsIGJyaWRnaW5nIGZ1bmN0aW9uLCBpbmNsdWRpbmcKKyAgICAgICAgYnJpZGdlIG1hbmFnZW1lbnQgZnJhbWVzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC42LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkVHBQb3J0RW50cnkgNCB9CisKK2RvdDFkVHBQb3J0SW5EaXNjYXJkcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIFVOSVRTICAgICAgICJmcmFtZXMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJDb3VudCBvZiByZWNlaXZlZCB2YWxpZCBmcmFtZXMgdGhhdCB3ZXJlIGRpc2NhcmRlZAorICAgICAgICAoaS5lLiwgZmlsdGVyZWQpIGJ5IHRoZSBGb3J3YXJkaW5nIFByb2Nlc3MuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjYuMS4xLjMiCisgICAgOjo9IHsgZG90MWRUcFBvcnRFbnRyeSA1IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCistLSBUaGUgU3RhdGljIChEZXN0aW5hdGlvbi1BZGRyZXNzIEZpbHRlcmluZykgRGF0YWJhc2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgc3VidHJlZSBpcyBvcHRpb25hbC4KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRTdGF0aWNUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIERvdDFkU3RhdGljRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0YWJsZSBjb250YWluaW5nIGZpbHRlcmluZyBpbmZvcm1hdGlvbiBjb25maWd1cmVkCisgICAgICAgIGludG8gdGhlIGJyaWRnZSBieSAobG9jYWwgb3IgbmV0d29yaykgbWFuYWdlbWVudAorICAgICAgICBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgcG9ydHMgdG8gd2hpY2ggZnJhbWVzIHJlY2VpdmVkCisgICAgICAgIGZyb20gc3BlY2lmaWMgcG9ydHMgYW5kIGNvbnRhaW5pbmcgc3BlY2lmaWMgZGVzdGluYXRpb24KKyAgICAgICAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkIHRvIGJlIGZvcndhcmRlZC4gIFRoZSB2YWx1ZSBvZgorICAgICAgICB6ZXJvIGluIHRoaXMgdGFibGUsIGFzIHRoZSBwb3J0IG51bWJlciBmcm9tIHdoaWNoIGZyYW1lcworICAgICAgICB3aXRoIGEgc3BlY2lmaWMgZGVzdGluYXRpb24gYWRkcmVzcyBhcmUgcmVjZWl2ZWQsIGlzCisgICAgICAgIHVzZWQgdG8gc3BlY2lmeSBhbGwgcG9ydHMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIHNwZWNpZmljCisgICAgICAgIGVudHJ5IGluIHRoaXMgdGFibGUgZm9yIHRoYXQgcGFydGljdWxhciBkZXN0aW5hdGlvbgorICAgICAgICBhZGRyZXNzLiAgRW50cmllcyBhcmUgdmFsaWQgZm9yIHVuaWNhc3QgYW5kIGZvcgorICAgICAgICBncm91cC9icm9hZGNhc3QgYWRkcmVzc2VzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC43LjIiCisgICAgOjo9IHsgZG90MWRTdGF0aWMgMSB9CisKK2RvdDFkU3RhdGljRW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBEb3QxZFN0YXRpY0VudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkZpbHRlcmluZyBpbmZvcm1hdGlvbiBjb25maWd1cmVkIGludG8gdGhlIGJyaWRnZSBieQorICAgICAgICAobG9jYWwgb3IgbmV0d29yaykgbWFuYWdlbWVudCBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YKKyAgICAgICAgcG9ydHMgdG8gd2hpY2ggZnJhbWVzIHJlY2VpdmVkIGZyb20gYSBzcGVjaWZpYyBwb3J0IGFuZAorICAgICAgICBjb250YWluaW5nIGEgc3BlY2lmaWMgZGVzdGluYXRpb24gYWRkcmVzcyBhcmUgYWxsb3dlZCB0bworICAgICAgICBiZSBmb3J3YXJkZWQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjcuMiIKKyAgICBJTkRFWCAgIHsgZG90MWRTdGF0aWNBZGRyZXNzLCBkb3QxZFN0YXRpY1JlY2VpdmVQb3J0IH0KKyAgICA6Oj0geyBkb3QxZFN0YXRpY1RhYmxlIDEgfQorCitEb3QxZFN0YXRpY0VudHJ5IDo6PQorICAgIFNFUVVFTkNFIHsKKyAgICAgICAgZG90MWRTdGF0aWNBZGRyZXNzICAgICAgIE1hY0FkZHJlc3MsCisgICAgICAgIGRvdDFkU3RhdGljUmVjZWl2ZVBvcnQgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkU3RhdGljQWxsb3dlZFRvR29UbyBPQ1RFVCBTVFJJTkcsCisgICAgICAgIGRvdDFkU3RhdGljU3RhdHVzICAgICAgICBJTlRFR0VSCisgICAgfQorCitkb3QxZFN0YXRpY0FkZHJlc3MgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBNYWNBZGRyZXNzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyBpbiBhIGZyYW1lIHRvIHdoaWNoIHRoaXMKKyAgICAgICAgZW50cnkncyBmaWx0ZXJpbmcgaW5mb3JtYXRpb24gYXBwbGllcy4gIFRoaXMgb2JqZWN0IGNhbgorICAgICAgICB0YWtlIHRoZSB2YWx1ZSBvZiBhIHVuaWNhc3QgYWRkcmVzcywgYSBncm91cCBhZGRyZXNzLCBvcgorICAgICAgICB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDcuOS4xLCA3LjkuMiIKKyAgICA6Oj0geyBkb3QxZFN0YXRpY0VudHJ5IDEgfQorCitkb3QxZFN0YXRpY1JlY2VpdmVQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgwLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRWl0aGVyIHRoZSB2YWx1ZSAnMCcsIG9yIHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydAorICAgICAgICBmcm9tIHdoaWNoIGEgZnJhbWUgbXVzdCBiZSByZWNlaXZlZCBpbiBvcmRlciBmb3IgdGhpcworICAgICAgICBlbnRyeSdzIGZpbHRlcmluZyBpbmZvcm1hdGlvbiB0byBhcHBseS4gIEEgdmFsdWUgb2YgemVybworICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGlzIGVudHJ5IGFwcGxpZXMgb24gYWxsIHBvcnRzIG9mIHRoZQorICAgICAgICBicmlkZ2UgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIG90aGVyIGFwcGxpY2FibGUgZW50cnkuIgorICAgIDo6PSB7IGRvdDFkU3RhdGljRW50cnkgMiB9CisKK2RvdDFkU3RhdGljQWxsb3dlZFRvR29UbyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAoU0laRSAoMC4uNTEyKSkKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHNldCBvZiBwb3J0cyB0byB3aGljaCBmcmFtZXMgcmVjZWl2ZWQgZnJvbSBhCisgICAgICAgIHNwZWNpZmljIHBvcnQgYW5kIGRlc3RpbmVkIGZvciBhIHNwZWNpZmljIE1BQyBhZGRyZXNzLAorICAgICAgICBhcmUgYWxsb3dlZCB0byBiZSBmb3J3YXJkZWQuICBFYWNoIG9jdGV0IHdpdGhpbiB0aGUKKyAgICAgICAgdmFsdWUgb2YgdGhpcyBvYmplY3Qgc3BlY2lmaWVzIGEgc2V0IG9mIGVpZ2h0IHBvcnRzLAorICAgICAgICB3aXRoIHRoZSBmaXJzdCBvY3RldCBzcGVjaWZ5aW5nIHBvcnRzIDEgdGhyb3VnaCA4LCB0aGUKKyAgICAgICAgc2Vjb25kIG9jdGV0IHNwZWNpZnlpbmcgcG9ydHMgOSB0aHJvdWdoIDE2LCBldGMuICBXaXRoaW4KKyAgICAgICAgZWFjaCBvY3RldCwgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHJlcHJlc2VudHMgdGhlCisgICAgICAgIGxvd2VzdCBudW1iZXJlZCBwb3J0LCBhbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorICAgICAgICByZXByZXNlbnRzIHRoZSBoaWdoZXN0IG51bWJlcmVkIHBvcnQuICBUaHVzLCBlYWNoIHBvcnQKKyAgICAgICAgb2YgdGhlIGJyaWRnZSBpcyByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBiaXQgd2l0aGluIHRoZQorICAgICAgICB2YWx1ZSBvZiB0aGlzIG9iamVjdC4gIElmIHRoYXQgYml0IGhhcyBhIHZhbHVlIG9mICcxJywKKyAgICAgICAgdGhlbiB0aGF0IHBvcnQgaXMgaW5jbHVkZWQgaW4gdGhlIHNldCBvZiBwb3J0czsgdGhlIHBvcnQKKyAgICAgICAgaXMgbm90IGluY2x1ZGVkIGlmIGl0cyBiaXQgaGFzIGEgdmFsdWUgb2YgJzAnLiAgKE5vdGUKKyAgICAgICAgdGhhdCB0aGUgc2V0dGluZyBvZiB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBvcnQKKyAgICAgICAgZnJvbSB3aGljaCBhIGZyYW1lIGlzIHJlY2VpdmVkIGlzIGlycmVsZXZhbnQuKSAgVGhlCisgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBvYmplY3QgaXMgYSBzdHJpbmcgb2Ygb25lcyBvZgorICAgICAgICBhcHByb3ByaWF0ZSBsZW5ndGguCisKKyAgICAgICAgVGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IG1heSBleGNlZWQgdGhlIHJlcXVpcmVkIG1pbmltdW0KKyAgICAgICAgbWF4aW11bSBtZXNzYWdlIHNpemUgb2Ygc29tZSBTTk1QIHRyYW5zcG9ydCAoNDg0IGJ5dGVzLAorICAgICAgICBpbiB0aGUgY2FzZSBvZiBTTk1QIG92ZXIgVURQLCBzZWUgUkZDIDM0MTcsIHNlY3Rpb24gMy4yKS4KKyAgICAgICAgU05NUCBlbmdpbmVzIG9uIGJyaWRnZXMgc3VwcG9ydGluZyBhIGxhcmdlIG51bWJlciBvZgorICAgICAgICBwb3J0cyBtdXN0IHN1cHBvcnQgYXBwcm9wcmlhdGUgbWF4aW11bSBtZXNzYWdlIHNpemVzLiIKKyAgICA6Oj0geyBkb3QxZFN0YXRpY0VudHJ5IDMgfQorCitkb3QxZFN0YXRpY1N0YXR1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICBvdGhlcigxKSwKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZCgyKSwKKyAgICAgICAgICAgICAgICAgICAgcGVybWFuZW50KDMpLAorICAgICAgICAgICAgICAgICAgICBkZWxldGVPblJlc2V0KDQpLAorICAgICAgICAgICAgICAgICAgICBkZWxldGVPblRpbWVvdXQoNSkKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgb2JqZWN0IGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoaXMgZW50cnkuCisgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHBlcm1hbmVudCgzKS4KKyAgICAgICAgICAgIG90aGVyKDEpIC0gdGhpcyBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlIGJ1dCB0aGUKKyAgICAgICAgICAgICAgICBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IHdpbGwgcmVtYWluIHNvIGFyZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBmcm9tIGVhY2ggb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMuCisgICAgICAgICAgICBpbnZhbGlkKDIpIC0gd3JpdGluZyB0aGlzIHZhbHVlIHRvIHRoZSBvYmplY3QKKyAgICAgICAgICAgICAgICByZW1vdmVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5LgorICAgICAgICAgICAgcGVybWFuZW50KDMpIC0gdGhpcyBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlIGFuZAorICAgICAgICAgICAgICAgIHdpbGwgcmVtYWluIHNvIGFmdGVyIHRoZSBuZXh0IHJlc2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIGJyaWRnZS4KKyAgICAgICAgICAgIGRlbGV0ZU9uUmVzZXQoNCkgLSB0aGlzIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UKKyAgICAgICAgICAgICAgICBhbmQgd2lsbCByZW1haW4gc28gdW50aWwgdGhlIG5leHQgcmVzZXQgb2YgdGhlCisgICAgICAgICAgICAgICAgYnJpZGdlLgorICAgICAgICAgICAgZGVsZXRlT25UaW1lb3V0KDUpIC0gdGhpcyBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlCisgICAgICAgICAgICAgICAgYW5kIHdpbGwgcmVtYWluIHNvIHVudGlsIGl0IGlzIGFnZWQgb3V0LiIKKyAgICA6Oj0geyBkb3QxZFN0YXRpY0VudHJ5IDQgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBOb3RpZmljYXRpb25zIGZvciB1c2UgYnkgQnJpZGdlcworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gTm90aWZpY2F0aW9ucyBmb3IgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworbmV3Um9vdCBOT1RJRklDQVRJT04tVFlQRQorICAgIC0tIE9CSkVDVFMgICAgIHsgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG5ld1Jvb3QgdHJhcCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VuZGluZyBhZ2VudCBoYXMKKyAgICAgICAgYmVjb21lIHRoZSBuZXcgcm9vdCBvZiB0aGUgU3Bhbm5pbmcgVHJlZTsgdGhlIHRyYXAgaXMKKyAgICAgICAgc2VudCBieSBhIGJyaWRnZSBzb29uIGFmdGVyIGl0cyBlbGVjdGlvbiBhcyB0aGUgbmV3CisKKyAgICAgICAgcm9vdCwgZS5nLiwgdXBvbiBleHBpcmF0aW9uIG9mIHRoZSBUb3BvbG9neSBDaGFuZ2UgVGltZXIsCisgICAgICAgIGltbWVkaWF0ZWx5IHN1YnNlcXVlbnQgdG8gaXRzIGVsZWN0aW9uLiAgSW1wbGVtZW50YXRpb24KKyAgICAgICAgb2YgdGhpcyB0cmFwIGlzIG9wdGlvbmFsLiIKKyAgICA6Oj0geyBkb3QxZE5vdGlmaWNhdGlvbnMgMSB9CisKK3RvcG9sb2d5Q2hhbmdlIE5PVElGSUNBVElPTi1UWVBFCisgICAgLS0gT0JKRUNUUyAgICAgeyB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRvcG9sb2d5Q2hhbmdlIHRyYXAgaXMgc2VudCBieSBhIGJyaWRnZSB3aGVuIGFueSBvZgorICAgICAgICBpdHMgY29uZmlndXJlZCBwb3J0cyB0cmFuc2l0aW9ucyBmcm9tIHRoZSBMZWFybmluZyBzdGF0ZQorICAgICAgICB0byB0aGUgRm9yd2FyZGluZyBzdGF0ZSwgb3IgZnJvbSB0aGUgRm9yd2FyZGluZyBzdGF0ZSB0bworICAgICAgICB0aGUgQmxvY2tpbmcgc3RhdGUuICBUaGUgdHJhcCBpcyBub3Qgc2VudCBpZiBhIG5ld1Jvb3QKKyAgICAgICAgdHJhcCBpcyBzZW50IGZvciB0aGUgc2FtZSB0cmFuc2l0aW9uLiAgSW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhpcyB0cmFwIGlzIG9wdGlvbmFsLiIKKyAgICA6Oj0geyBkb3QxZE5vdGlmaWNhdGlvbnMgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIElFRUUgODAyLjFEIE1JQiAtIENvbmZvcm1hbmNlIEluZm9ybWF0aW9uCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkR3JvdXBzICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRDb25mb3JtYW5jZSAxIH0KK2RvdDFkQ29tcGxpYW5jZXMgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRDb25mb3JtYW5jZSAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdW5pdHMgb2YgY29uZm9ybWFuY2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkQmFzZSBncm91cAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZEJhc2VCcmlkZ2VHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRCYXNlQnJpZGdlQWRkcmVzcywKKyAgICAgICAgZG90MWRCYXNlTnVtUG9ydHMsCisgICAgICAgIGRvdDFkQmFzZVR5cGUKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJCcmlkZ2UgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoaXMgZGV2aWNlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyAxIH0KKworZG90MWRCYXNlUG9ydEdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZEJhc2VQb3J0LAorICAgICAgICBkb3QxZEJhc2VQb3J0SWZJbmRleCwKKyAgICAgICAgZG90MWRCYXNlUG9ydENpcmN1aXQsCisgICAgICAgIGRvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHMsCisgICAgICAgIGRvdDFkQmFzZVBvcnRNdHVFeGNlZWRlZERpc2NhcmRzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW5mb3JtYXRpb24gZm9yIGVhY2ggcG9ydCBvbiB0aGlzIGRldmljZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZFN0cCBncm91cAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFN0cEJyaWRnZUdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFN0cFByb3RvY29sU3BlY2lmaWNhdGlvbiwKKyAgICAgICAgZG90MWRTdHBQcmlvcml0eSwKKyAgICAgICAgZG90MWRTdHBUaW1lU2luY2VUb3BvbG9neUNoYW5nZSwKKyAgICAgICAgZG90MWRTdHBUb3BDaGFuZ2VzLAorICAgICAgICBkb3QxZFN0cERlc2lnbmF0ZWRSb290LAorICAgICAgICBkb3QxZFN0cFJvb3RDb3N0LAorICAgICAgICBkb3QxZFN0cFJvb3RQb3J0LAorICAgICAgICBkb3QxZFN0cE1heEFnZSwKKyAgICAgICAgZG90MWRTdHBIZWxsb1RpbWUsCisgICAgICAgIGRvdDFkU3RwSG9sZFRpbWUsCisgICAgICAgIGRvdDFkU3RwRm9yd2FyZERlbGF5LAorICAgICAgICBkb3QxZFN0cEJyaWRnZU1heEFnZSwKKyAgICAgICAgZG90MWRTdHBCcmlkZ2VIZWxsb1RpbWUsCisgICAgICAgIGRvdDFkU3RwQnJpZGdlRm9yd2FyZERlbGF5CisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQnJpZGdlIGxldmVsIFNwYW5uaW5nIFRyZWUgZGF0YSBmb3IgdGhpcyBkZXZpY2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDMgfQorCitkb3QxZFN0cFBvcnRHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRTdHBQb3J0LAorICAgICAgICBkb3QxZFN0cFBvcnRQcmlvcml0eSwKKyAgICAgICAgZG90MWRTdHBQb3J0U3RhdGUsCisgICAgICAgIGRvdDFkU3RwUG9ydEVuYWJsZSwKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290LAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZSwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnQsCisgICAgICAgIGRvdDFkU3RwUG9ydEZvcndhcmRUcmFuc2l0aW9ucworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlNwYW5uaW5nIFRyZWUgZGF0YSBmb3IgZWFjaCBwb3J0IG9uIHRoaXMgZGV2aWNlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA0IH0KKworZG90MWRTdHBQb3J0R3JvdXAyIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFN0cFBvcnQsCisgICAgICAgIGRvdDFkU3RwUG9ydFByaW9yaXR5LAorICAgICAgICBkb3QxZFN0cFBvcnRTdGF0ZSwKKyAgICAgICAgZG90MWRTdHBQb3J0RW5hYmxlLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3QsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2UsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0LAorICAgICAgICBkb3QxZFN0cFBvcnRGb3J3YXJkVHJhbnNpdGlvbnMsCisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJTcGFubmluZyBUcmVlIGRhdGEgZm9yIGVhY2ggcG9ydCBvbiB0aGlzIGRldmljZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgNSB9CisKK2RvdDFkU3RwUG9ydEdyb3VwMyBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QzMgorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlNwYW5uaW5nIFRyZWUgZGF0YSBmb3IgZGV2aWNlcyBzdXBwb3J0aW5nIDMyLWJpdAorICAgICAgICAgcGF0aCBjb3N0cy4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgNiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZFRwIGdyb3VwCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkVHBCcmlkZ2VHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRUcExlYXJuZWRFbnRyeURpc2NhcmRzLAorICAgICAgICBkb3QxZFRwQWdpbmdUaW1lCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQnJpZGdlIGxldmVsIFRyYW5zcGFyZW50IEJyaWRnaW5nIGRhdGEuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDcgfQorCitkb3QxZFRwRmRiR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisKKyAgICAgICAgZG90MWRUcEZkYkFkZHJlc3MsCisgICAgICAgIGRvdDFkVHBGZGJQb3J0LAorICAgICAgICBkb3QxZFRwRmRiU3RhdHVzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRmlsdGVyaW5nIERhdGFiYXNlIGluZm9ybWF0aW9uIGZvciB0aGUgQnJpZGdlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA4IH0KKworZG90MWRUcEdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFRwUG9ydCwKKyAgICAgICAgZG90MWRUcFBvcnRNYXhJbmZvLAorICAgICAgICBkb3QxZFRwUG9ydEluRnJhbWVzLAorICAgICAgICBkb3QxZFRwUG9ydE91dEZyYW1lcywKKyAgICAgICAgZG90MWRUcFBvcnRJbkRpc2NhcmRzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRHluYW1pYyBGaWx0ZXJpbmcgRGF0YWJhc2UgaW5mb3JtYXRpb24gZm9yIGVhY2ggcG9ydCBvZgorICAgICAgICB0aGUgQnJpZGdlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA5IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gVGhlIFN0YXRpYyAoRGVzdGluYXRpb24tQWRkcmVzcyBGaWx0ZXJpbmcpIERhdGFiYXNlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkU3RhdGljR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkU3RhdGljQWRkcmVzcywKKyAgICAgICAgZG90MWRTdGF0aWNSZWNlaXZlUG9ydCwKKyAgICAgICAgZG90MWRTdGF0aWNBbGxvd2VkVG9Hb1RvLAorICAgICAgICBkb3QxZFN0YXRpY1N0YXR1cworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlN0YXRpYyBGaWx0ZXJpbmcgRGF0YWJhc2UgaW5mb3JtYXRpb24gZm9yIGVhY2ggcG9ydCBvZgorICAgICAgICB0aGUgQnJpZGdlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyAxMCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIFRoZSBUcmFwIE5vdGlmaWNhdGlvbiBHcm91cAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZE5vdGlmaWNhdGlvbkdyb3VwIE5PVElGSUNBVElPTi1HUk9VUAorICAgIE5PVElGSUNBVElPTlMgeworICAgICAgICBuZXdSb290LAorICAgICAgICB0b3BvbG9neUNoYW5nZQorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkdyb3VwIG9mIG9iamVjdHMgZGVzY3JpYmluZyBub3RpZmljYXRpb25zICh0cmFwcykuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDExIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gY29tcGxpYW5jZSBzdGF0ZW1lbnRzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2JyaWRnZUNvbXBsaWFuY2UxNDkzIE1PRFVMRS1DT01QTElBTkNFCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIGRldmljZSBzdXBwb3J0IG9mIGJyaWRnaW5nCisgICAgICAgIHNlcnZpY2VzLCBhcyBwZXIgUkZDMTQ5My4iCisKKyAgICBNT0RVTEUKKyAgICAgICAgTUFOREFUT1JZLUdST1VQUyB7CisgICAgICAgICAgICBkb3QxZEJhc2VCcmlkZ2VHcm91cCwKKyAgICAgICAgICAgIGRvdDFkQmFzZVBvcnRHcm91cAorICAgICAgICB9CisKKyAgICBHUk9VUCAgIGRvdDFkU3RwQnJpZGdlR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKworICAgIEdST1VQICAgZG90MWRTdHBQb3J0R3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKworICAgIEdST1VQICAgZG90MWRUcEJyaWRnZUdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcgbW9kZS4gIEEKKyAgICAgICAgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudCB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRUcEZkYkdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcgbW9kZS4gIEEKKyAgICAgICAgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudCB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRUcEdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZyBtb2RlLiAgQQorICAgICAgICB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50IHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFN0YXRpY0dyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgb3B0aW9uYWwuIgorCisgICAgR1JPVVAgZG90MWROb3RpZmljYXRpb25Hcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG9wdGlvbmFsLiIKKyAgICA6Oj0geyBkb3QxZENvbXBsaWFuY2VzIDEgfQorCiticmlkZ2VDb21wbGlhbmNlNDE4OCBNT0RVTEUtQ09NUExJQU5DRQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBkZXZpY2Ugc3VwcG9ydCBvZiBicmlkZ2luZworICAgICAgICBzZXJ2aWNlcy4gIFRoaXMgc3VwcG9ydHMgMzItYml0IFBhdGggQ29zdCB2YWx1ZXMgYW5kIHRoZQorICAgICAgICBtb3JlIHJlc3RyaWN0ZWQgYnJpZGdlIGFuZCBwb3J0IHByaW9yaXRpZXMsIGFzIHBlciBJRUVFCisgICAgICAgIDgwMi4xdC4KKworICAgICAgICBGdWxsIHN1cHBvcnQgZm9yIHRoZSA4MDIuMUQgbWFuYWdlbWVudCBvYmplY3RzIHJlcXVpcmVzIHRoYXQKKyAgICAgICAgdGhlIFNOTVB2Mi1NSUIgW1JGQzM0MThdIG9iamVjdHMgc3lzRGVzY3IsIGFuZCBzeXNVcFRpbWUsIGFzCisgICAgICAgIHdlbGwgYXMgdGhlIElGLU1JQiBbUkZDMjg2M10gb2JqZWN0cyBpZkluZGV4LCBpZlR5cGUsCisgICAgICAgIGlmRGVzY3IsIGlmUGh5c0FkZHJlc3MsIGFuZCBpZkxhc3RDaGFuZ2UgYXJlIGltcGxlbWVudGVkLiIKKworICAgIE1PRFVMRQorICAgICAgICBNQU5EQVRPUlktR1JPVVBTIHsKKyAgICAgICAgICAgIGRvdDFkQmFzZUJyaWRnZUdyb3VwLAorICAgICAgICAgICAgZG90MWRCYXNlUG9ydEdyb3VwCisgICAgICAgIH0KKworICAgIEdST1VQICAgZG90MWRTdHBCcmlkZ2VHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IKKyAgICAgICAgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorCisgICAgT0JKRUNUIGRvdDFkU3RwUHJpb3JpdHkKKyAgICBTWU5UQVggSW50ZWdlcjMyICgwfDQwOTZ8ODE5MnwxMjI4OHwxNjM4NHwyMDQ4MHwyNDU3NgorICAgICAgICAgICAgICAgICAgICAgfDI4NjcyfDMyNzY4fDM2ODY0fDQwOTYwfDQ1MDU2fDQ5MTUyCisgICAgICAgICAgICAgICAgICAgICB8NTMyNDh8NTczNDR8NjE0NDApCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSBJRUVFIDgwMi4xdC4iCisKKyAgICBHUk9VUCAgIGRvdDFkU3RwUG9ydEdyb3VwMgorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IKKyAgICAgICAgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorCisgICAgR1JPVVAgICBkb3QxZFN0cFBvcnRHcm91cDMKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKyAgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCBhbmQgMzItYml0IHBhdGgKKyAgICAgICAgIGNvc3RzLiAgSW4gcGFydGljdWxhciwgdGhpcyBpbmNsdWRlcyBkZXZpY2VzIHN1cHBvcnRpbmcKKyAgICAgICAgIElFRUUgODAyLjF0IGFuZCBJRUVFIDgwMi4xdy4iCisKKyAgICBPQkpFQ1QgZG90MWRTdHBQb3J0UHJpb3JpdHkKKyAgICBTWU5UQVggSW50ZWdlcjMyICgwfDE2fDMyfDQ4fDY0fDgwfDk2fDExMnwxMjgKKyAgICAgICAgICAgICAgICAgICAgIHwxNDR8MTYwfDE3NnwxOTJ8MjA4fDIyNHwyNDApCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSBJRUVFIDgwMi4xdC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBCcmlkZ2VHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IKKyAgICAgICAgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nCisgICAgICAgIG1vZGUuICBBIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBGZGJHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IKKyAgICAgICAgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nCisgICAgICAgIG1vZGUuICBBIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IKKyAgICAgICAgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nCisgICAgICAgIG1vZGUuICBBIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkU3RhdGljR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBvcHRpb25hbC4iCisKKyAgICBHUk9VUCBkb3QxZE5vdGlmaWNhdGlvbkdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgb3B0aW9uYWwuIgorICAgIDo6PSB7IGRvdDFkQ29tcGxpYW5jZXMgMiB9CisKK0VORApkaWZmIC0tZ2l0IGEvbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dCBiL21pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQKaW5kZXggYmRlMWNkYi4uZjAwYzdjYyAxMDA2NDQKLS0tIGEvbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dAorKysgYi9taWJzL0RJU01BTi1FVkVOVC1NSUIudHh0CkBAIC04LDcgKzgsNiBAQAogICAgIFRFWFRVQUwtQ09OVkVOVElPTiwgUm93U3RhdHVzLAogICAgIFRydXRoVmFsdWUgICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItVEMKIAotCiAgICAgTU9EVUxFLUNPTVBMSUFOQ0UsIE9CSkVDVC1HUk9VUCwKICAgICBOT1RJRklDQVRJT04tR1JPVVAgICAgICAgICAgICAgRlJPTSBTTk1QdjItQ09ORgogICAgIHN5c1VwVGltZSAgICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItTUlCCkBAIC01OCw3ICs1Nyw2IEBACiAgICAgICAgIHBhcnRpY3VsYXIgZXJyb3IgY29kZSBoZXJlIGRvZXMgbm90IGltcGx5IHRoYXQgYWxsCiAgICAgICAgIGltcGxlbWVudGF0aW9ucyBhcmUgY2FwYWJsZSBvZiBzZW5zaW5nIHRoYXQgZXJyb3IgYW5kCiAKLQogICAgICAgICByZXR1cm5pbmcgdGhhdCBjb2RlLgogCiAgICAgICAgIFRoZSBzZWNvbmQgZ3JvdXAsIG51bWJlcmVkIGdyZWF0ZXIgdGhhbiAwLCBhcmUgY29waWVkCkBAIC03OCwxNiArNzYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgbm90IGFzIGV4cGVjdGVkCiAgICAgICAgIHNhbXBsZU92ZXJydW4gICAgICAgICAgIGFub3RoZXIgc2FtcGxlIGF0dGVtcHQgb2NjdXJyZWQgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmV2aW91cyBvbmUgY29tcGxldGVkIgotCiAgICAgU1lOVEFYICAgICAgSU5URUdFUiB7IGxvY2FsUmVzb3VyY2VMYWNrKC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkRGVzdGluYXRpb24oLTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblVucmVhY2hhYmxlKC0zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9SZXNwb25zZSgtNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZFR5cGUoLTUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVPdmVycnVuKC02KSwKLQogICAgICAgICAgICAgICAgICAgICAgICAgICBub0Vycm9yKDApLAotCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb0JpZygxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9TdWNoTmFtZSgyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkVmFsdWUoMyksCkBAIC0xMDgsNyArMTAzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb25zaXN0ZW50TmFtZSgxOCkgfQogLS0KIAotCiAtLSBSZXNvdXJjZSBDb250cm9sIFNlY3Rpb24KIC0tCiAKQEAgLTE1Nyw4ICsxNTEsNiBAQAogICAgICAgICBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgbm90IGVsaW1pbmF0ZSBvciBpbmhpYml0IGV4aXN0aW5nCiAgICAgICAgIHNhbXBsZSBzdGF0ZSBidXQgY291bGQgcHJldmVudCBhbGxvY2F0aW9uIG9mIGFkZGl0aW9uYWwgc3RhdGUKICAgICAgICAgaW5mb3JtYXRpb24uIgotCi0KICAgICA6Oj0geyBtdGVSZXNvdXJjZSAyIH0KIAogbXRlUmVzb3VyY2VTYW1wbGVJbnN0YW5jZXMgT0JKRUNULVRZUEUKQEAgLTIwOCw3ICsyMDAsNiBAQAogICAgICAgICBjb25kaXRpb24gaGFzIGZhaWxlZC4gIFRoaXMgY291bnRzIGluZGl2aWR1YWxseSBmb3IgZWFjaAogICAgICAgICBhdHRlbXB0IGluIGEgZ3JvdXAgb2YgdGFyZ2V0cyBvciBlYWNoIGF0dGVtcHQgZm9yIGEKIAotCiAgICAgICAgIHdpbGRjYXJkZWQgb2JqZWN0LiIKICAgICA6Oj0geyBtdGVUcmlnZ2VyIDEgfQogCkBAIC0yNTcsOCArMjQ4LDYgQEAKICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCiAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICBERVNDUklQVElPTgotCi0KICAgICAgICAgIlRoZSBvd25lciBvZiB0aGlzIGVudHJ5LiBUaGUgZXhhY3Qgc2VtYW50aWNzIG9mIHRoaXMKICAgICAgICAgc3RyaW5nIGFyZSBzdWJqZWN0IHRvIHRoZSBzZWN1cml0eSBwb2xpY3kgZGVmaW5lZCBieSB0aGUKICAgICAgICAgc2VjdXJpdHkgYWRtaW5pc3RyYXRvci4iCkBAIC0zMDgsNyArMjk3LDYgQEAKIAogICAgICAgICBGb3IgJ3RocmVzaG9sZCcgdGhlIHRlc3Qgd29ya3MgYXMgZGVzY3JpYmVkIGJlbG93IGZvcgogCi0KICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXAsIG10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmcsIGFuZAogICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZy4KIApAQCAtMzU4LDcgKzM0Niw2IEBACiAgICAgICAgIGluc3RhbmNlIHBvcnRpb24sIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIGlzIG9idGFpbmVkCiAgICAgICAgIGFzIGlmIHdpdGggYSBHZXROZXh0IGZ1bmN0aW9uLCBjaGVja2luZyBtdWx0aXBsZSB2YWx1ZXMKIAotCiAgICAgICAgIGlmIHRoZXkgZXhpc3QuICBJZiBzdWNoIHdpbGRjYXJkaW5nIGlzIGFwcGxpZWQsCiAgICAgICAgIG10ZVRyaWdnZXJWYWx1ZUlEV2lsZGNhcmQgbXVzdCBiZSAndHJ1ZScgYW5kIGlmIG5vdCBpdCBtdXN0CiAgICAgICAgIGJlICdmYWxzZScuCkBAIC00MDgsNyArMzk1LDYgQEAKIAogICAgICAgICBPdGhlcndpc2UgYWNjZXNzIHJpZ2h0cyBhcmUgY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHNlY3VyaXR5CiAKLQogICAgICAgICBwYXJhbWV0ZXJzIHJlc3VsdGluZyBmcm9tIHRoZSB0YWcuIgogICAgIERFRlZBTCB7ICcnSCB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlckVudHJ5IDggfQpAQCAtNDU3LDggKzQ0Myw2IEBACiAgICAgVU5JVFMgICAgICAgInNlY29uZHMiCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50Ci0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHRyaWdnZXIgc2FtcGxlcy4gIFRvCiAgICAgICAgIGVuY291cmFnZSBjb25zaXN0ZW5jeSBpbiBzYW1wbGluZywgdGhlIGludGVydmFsIGlzIG1lYXN1cmVkCkBAIC01MDcsOCArNDkxLDYgQEAKICAgICAgICAgQSBsaXN0IG9mIG9iamVjdHMgbWF5IGFsc28gYmUgYWRkZWQgYmFzZWQgb24gdGhlIGV2ZW50IG9yIG9uCiAgICAgICAgIHRoZSB2YWx1ZSBvZiBtdGVUcmlnZ2VyVGVzdC4KIAotCi0KICAgICAgICAgQSBsZW5ndGggb2YgMCBpbmRpY2F0ZXMgbm8gYWRkaXRpb25hbCBvYmplY3RzLiIKICAgICBERUZWQUwgeyAnJ0ggfQogICAgIDo6PSB7IG10ZVRyaWdnZXJFbnRyeSAxMyB9CkBAIC01NTcsOCArNTM5LDYgQEAKICAgICBJTkRFWCAgICAgICB7IG10ZU93bmVyLCBJTVBMSUVEIG10ZVRyaWdnZXJOYW1lIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyRGVsdGFUYWJsZSAxIH0KIAotCi0KIE10ZVRyaWdnZXJEZWx0YUVudHJ5IDo6PSBTRVFVRU5DRSB7CiAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEICAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAogICAgIG10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFdpbGRjYXJkICAgICAgICBUcnV0aFZhbHVlLApAQCAtNjA4LDcgKzU4OCw2IEBACiAgICAgICAgIGJlIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKICAgICAgICAgbXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nCiAKLQogICAgICAgICBtdGVUcmlnZ2VyU2FtcGxlVHlwZSBpcyAnZGVsdGFWYWx1ZScuIgogICAgIERFRlZBTCB7IGZhbHNlIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyRGVsdGFFbnRyeSAyIH0KQEAgLTY1OCw3ICs2MzcsNiBAQAogICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudCAgICAgICAgICAgICBTbm1wQWRtaW5TdHJpbmcKIH0KIAotCiBtdGVUcmlnZ2VyRXhpc3RlbmNlVGVzdCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIEJJVFMgeyBwcmVzZW50KDApLCBhYnNlbnQoMSksIGNoYW5nZWQoMikgfQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKQEAgLTcwNyw4ICs2ODUsNiBAQAogCiBtdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNubXBBZG1pblN0cmluZyAoU0laRSAoMC4uMzIpKQotCi0KICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC03NTgsNyArNzM0LDYgQEAKICAgICAgICAgdHJpZ2dlcnMuIgogICAgIDo6PSB7IG10ZVRyaWdnZXIgNSB9CiAKLQogbXRlVHJpZ2dlckJvb2xlYW5FbnRyeSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIE10ZVRyaWdnZXJCb29sZWFuRW50cnkKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQpAQCAtODA3LDggKzc4Miw2IEBACiAgICAgREVGVkFMIHsgMCB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlckJvb2xlYW5FbnRyeSAyIH0KIAotCi0KIG10ZVRyaWdnZXJCb29sZWFuU3RhcnR1cCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFRydXRoVmFsdWUKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCkBAIC04NTcsOCArODMwLDYgQEAKICAgICAgICAgIlRvIGdvIHdpdGggbXRlVHJpZ2dlckJvb2xlYW5FdmVudCwgdGhlIG10ZU93bmVyIG9mIGFuIGV2ZW50CiAgICAgICAgIGVudHJ5IGZyb20gbXRlRXZlbnRUYWJsZS4iCiAgICAgREVGVkFMIHsgJydIIH0KLQotCiAgICAgOjo9IHsgbXRlVHJpZ2dlckJvb2xlYW5FbnRyeSA2IH0KIAogbXRlVHJpZ2dlckJvb2xlYW5FdmVudCBPQkpFQ1QtVFlQRQpAQCAtOTA3LDggKzg3OCw2IEBACiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50T3duZXIgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50ICAgICAgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudE93bmVyICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCi0KLQogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nRXZlbnQgICAgICAgICAgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXIgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50ICAgICAgICAgU25tcEFkbWluU3RyaW5nLApAQCAtOTU3LDggKzkyNiw2IEBACiAgICAgICAgIHRyaWdnZXJlZCB1bnRpbCB0aGUgc2FtcGxlZCB2YWx1ZSBmYWxscyBiZWxvdyB0aGlzIHRocmVzaG9sZAogICAgICAgICBhbmQgcmVhY2hlcyBtdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZy4iCiAgICAgREVGVkFMIHsgMCB9Ci0KLQogICAgIDo6PSB7IG10ZVRyaWdnZXJUaHJlc2hvbGRFbnRyeSAyIH0KIAogbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmcgT0JKRUNULVRZUEUKQEAgLTEwMDcsOCArOTc0LDYgQEAKICAgICAgICAgdHJpZ2dlcmVkIHVudGlsIHRoZSBkZWx0YSB2YWx1ZSBmYWxscyBiZWxvdyB0aGlzIHRocmVzaG9sZCBhbmQKICAgICAgICAgcmVhY2hlcyBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nLiIKICAgICBERUZWQUwgeyAwIH0KLQotCiAgICAgOjo9IHsgbXRlVHJpZ2dlclRocmVzaG9sZEVudHJ5IDQgfQogCiBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nIE9CSkVDVC1UWVBFCkBAIC0xMDU4LDcgKzEwMjMsNiBAQAogCiAgICAgICAgIEEgbGlzdCBvZiBvYmplY3RzIG1heSBhbHNvIGJlIGFkZGVkIGJhc2VkIG9uIHRoZSBvdmVyYWxsCiAKLQogICAgICAgICB0cmlnZ2VyLCB0aGUgZXZlbnQgb3Igb3RoZXIgc2V0dGluZ3MgaW4gbXRlVHJpZ2dlclRlc3QuCiAKICAgICAgICAgQSBsZW5ndGggb2YgMCBpbmRpY2F0ZXMgbm8gYWRkaXRpb25hbCBvYmplY3RzLiIKQEAgLTExMDcsOCArMTA3MSw2IEBACiAgICAgREVGVkFMIHsgJydIIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyVGhyZXNob2xkRW50cnkgMTEgfQogCi0KLQogbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnRPd25lciBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNubXBBZG1pblN0cmluZyAoU0laRSAoMC4uMzIpKQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKQEAgLTExNTcsOCArMTExOSw2IEBACiAtLSBPYmplY3RzIFRhYmxlCiAtLQogCi0KLQogbXRlT2JqZWN0c1RhYmxlIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgTXRlT2JqZWN0c0VudHJ5CiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKQEAgLTEyMDgsNyArMTE2OCw2IEBACiAgICAgICAgICJBbiBhcmJpdHJhcnkgaW50ZWdlciBmb3IgdGhlIHB1cnBvc2Ugb2YgaWRlbnRpZnlpbmcKICAgICAgICAgaW5kaXZpZHVhbCBvYmplY3RzIHdpdGhpbiBhIG10ZU9iamVjdHNOYW1lIGdyb3VwLgogCi0KICAgICAgICAgT2JqZWN0cyB3aXRoaW4gYSBncm91cCBhcmUgcGxhY2VkIGluIHRoZSBub3RpZmljYXRpb24gaW4gdGhlCiAgICAgICAgIG51bWVyaWNhbCBvcmRlciBvZiB0aGlzIGluZGV4LgogCkBAIC0xMjU4LDcgKzEyMTcsNiBAQAogICAgIERFRlZBTCB7IGZhbHNlIH0KICAgICA6Oj0geyBtdGVPYmplY3RzRW50cnkgNCB9CiAKLQogbXRlT2JqZWN0c0VudHJ5U3RhdHVzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgUm93U3RhdHVzCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKQEAgLTEzMDgsNyArMTI2Niw2IEBACiAgICAgSU5ERVggICAgICAgeyBtdGVPd25lciwgSU1QTElFRCBtdGVFdmVudE5hbWUgfQogICAgIDo6PSB7IG10ZUV2ZW50VGFibGUgMSB9CiAKLQogTXRlRXZlbnRFbnRyeSA6Oj0gU0VRVUVOQ0UgewogICAgIG10ZUV2ZW50TmFtZSAgICAgICAgICAgICAgICAgICAgICAgIFNubXBBZG1pblN0cmluZywKICAgICBtdGVFdmVudENvbW1lbnQgICAgICAgICAgICAgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCkBAIC0xMzU4LDcgKzEzMTUsNiBAQAogICAgICAgICAiQSBjb250cm9sIHRvIGFsbG93IGFuIGV2ZW50IHRvIGJlIGNvbmZpZ3VyZWQgYnV0IG5vdCB1c2VkLgogICAgICAgICBXaGVuIHRoZSB2YWx1ZSBpcyAnZmFsc2UnIHRoZSBldmVudCBkb2VzIG5vdCBleGVjdXRlIGV2ZW4gaWYKIAotCiAgICAgICAgIHRyaWdnZXJlZC4iCiAgICAgREVGVkFMIHsgZmFsc2UgfQogICAgIDo6PSB7IG10ZUV2ZW50RW50cnkgNCB9CkBAIC0xNDA3LDggKzEzNjMsNiBAQAogICAgIFNZTlRBWCAgICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBvYmplY3QgaWRlbnRpZmllciBmcm9tIHRoZSBOT1RJRklDQVRJT04tVFlQRSBmb3IgdGhlCiAgICAgICAgIG5vdGlmaWNhdGlvbiB0byB1c2UgaWYgbWV0RXZlbnRBY3Rpb25zIGhhcyAnbm90aWZpY2F0aW9uJyBzZXQuIgpAQCAtMTQ1Nyw4ICsxNDExLDYgQEAKIG10ZUV2ZW50U2V0RW50cnkgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBNdGVFdmVudFNldEVudHJ5CiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKLQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBldmVudCdzIHNldCBvcHRpb24uICBFbnRyaWVzCkBAIC0xNTA4LDcgKzE0NjAsNiBAQAogICAgIERFRlZBTCB7IHplcm9Eb3RaZXJvIH0KICAgICA6Oj0geyBtdGVFdmVudFNldEVudHJ5IDEgfQogCi0KIG10ZUV2ZW50U2V0T2JqZWN0V2lsZGNhcmQgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBUcnV0aFZhbHVlCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQpAQCAtMTU1Nyw4ICsxNTA4LDYgQEAKIG10ZUV2ZW50U2V0Q29udGV4dE5hbWUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTbm1wQWRtaW5TdHJpbmcKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCi0KLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIG1hbmFnZW1lbnQgY29udGV4dCBpbiB3aGljaCB0byBzZXQgbXRlRXZlbnRPYmplY3RJRC4KQEAgLTE2MDcsOCArMTU1Niw2IEBACiAgICAgICAgICJUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBjYXVzaW5nIHRoZSBub3RpZmljYXRpb24uIgogICAgIDo6PSB7IGRpc21hbkV2ZW50TUlCTm90aWZpY2F0aW9uT2JqZWN0cyAxIH0KIAotCi0KIG10ZUhvdFRhcmdldE5hbWUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTbm1wQWRtaW5TdHJpbmcKICAgICBNQVgtQUNDRVNTICBhY2Nlc3NpYmxlLWZvci1ub3RpZnkKQEAgLTE2NTcsOCArMTYwNCw2IEBACiAgICAgU1lOVEFYICAgICAgRmFpbHVyZVJlYXNvbgogICAgIE1BWC1BQ0NFU1MgIGFjY2Vzc2libGUtZm9yLW5vdGlmeQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIG9mIGFuIGF0dGVtcHQgdG8gY2hlY2sgZm9yIGEKICAgICAgICAgdHJpZ2dlciBjb25kaXRpb24gb3Igc2V0IGFuIG9iamVjdCBpbiByZXNwb25zZSB0byBhbiBldmVudC4iCkBAIC0xNzA3LDggKzE2NTIsNiBAQAogCiBtdGVUcmlnZ2VyRmFpbHVyZSBOT1RJRklDQVRJT04tVFlQRQogICAgIE9CSkVDVFMgeyBtdGVIb3RUcmlnZ2VyLAotCi0KICAgICAgICAgICAgICAgbXRlSG90VGFyZ2V0TmFtZSwKICAgICAgICAgICAgICAgbXRlSG90Q29udGV4dE5hbWUsCiAgICAgICAgICAgICAgIG10ZUhvdE9JRCwKQEAgLTE3NTcsOCArMTcwMCw2IEBACiBkaXNtYW5FdmVudE1JQkNvbXBsaWFuY2UgTU9EVUxFLUNPTVBMSUFOQ0UKICAgICAgICAgU1RBVFVTIGN1cnJlbnQKICAgICAgICAgREVTQ1JJUFRJT04KLQotCiAgICAgICAgICAgICAgICAgIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgZW50aXRpZXMgd2hpY2ggaW1wbGVtZW50CiAgICAgICAgICAgICAgICAgdGhlIEV2ZW50IE1JQi4iCiAgICAgICAgIE1PRFVMRSAgLS0gdGhpcyBtb2R1bGUKQEAgLTE3OTcsNyArMTczOCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZCwgdGh1cyBhbGxvd2luZwogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSBub3QgdG8gaW1wbGVtZW50IHdpbGRjYXJkaW5nLiIKIAotCiAgICAgICAgICAgICAgICAgT0JKRUNUIG10ZU9iamVjdHNJRFdpbGRjYXJkCiAgICAgICAgICAgICAgICAgTUlOLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgICAgICAgICAgICAgREVTQ1JJUFRJT04KQEAgLTE4MDcsMTEgKzE3NDcsOCBAQAogICAgICAgICAgICAgICAgIE9CSkVDVCBtdGVFdmVudFNldENvbnRleHROYW1lV2lsZGNhcmQKICAgICAgICAgICAgICAgICBNSU4tQUNDRVNTICByZWFkLW9ubHkKICAgICAgICAgICAgICAgICBERVNDUklQVElPTgotCi0KICAgICAgICAgICAgICAgICAgICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLCB0aHVzIGFsbG93aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIG5vdCB0byBpbXBsZW1lbnQgd2lsZGNhcmRpbmcuIgotCiAgICAgICAgIDo6PSB7IGRpc21hbkV2ZW50TUlCQ29tcGxpYW5jZXMgMSB9CiAKIC0tIFVuaXRzIG9mIENvbmZvcm1hbmNlCkBAIC0xODMyLDcgKzE3NjksNiBAQAogZGlzbWFuRXZlbnRUcmlnZ2VyR3JvdXAgT0JKRUNULUdST1VQCiAgICAgICAgIE9CSkVDVFMgewogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJGYWlsdXJlcywKLQogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJDb21tZW50LAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUZXN0LAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJTYW1wbGVUeXBlLApAQCAtMTg0Niw3ICsxNzgyLDYgQEAKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyT2JqZWN0cywKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRW5hYmxlZCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRW50cnlTdGF0dXMsCi0KICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SUQsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEV2lsZGNhcmQsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZSwKQEAgLTE4NTYsOSArMTc5MSw2IEBACiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHMsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50T3duZXIsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50LAotCi0KLQogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuQ29tcGFyaXNvbiwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhblZhbHVlLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuU3RhcnR1cCwKQEAgLTE4NjYsNyArMTc5OCw2IEBACiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuRXZlbnRPd25lciwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhbkV2ZW50LAotCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXAsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZE9iamVjdHNPd25lciwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0cywKQEAgLTE5MDIsMTcgKzE4MzMsMTMgQEAKIGRpc21hbkV2ZW50RXZlbnRHcm91cCBPQkpFQ1QtR1JPVVAKICAgICAgICAgT0JKRUNUUyB7CiAgICAgICAgICAgICAgICAgbXRlRXZlbnRGYWlsdXJlcywKLQogICAgICAgICAgICAgICAgIG10ZUV2ZW50Q29tbWVudCwKICAgICAgICAgICAgICAgICBtdGVFdmVudEFjdGlvbnMsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRFbmFibGVkLAogICAgICAgICAgICAgICAgIG10ZUV2ZW50RW50cnlTdGF0dXMsCi0KLQogICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uLAogICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uT2JqZWN0c093bmVyLAogICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uT2JqZWN0cywKLQogICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0T2JqZWN0LAogICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0T2JqZWN0V2lsZGNhcmQsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRWYWx1ZSwKZGlmZiAtLWdpdCBhL21pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dCBiL21pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dAppbmRleCA0OTllZTg2Li5mNzNlNWJmIDEwMDY0NAotLS0gYS9taWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQKKysrIGIvbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0CkBAIC0yOSw3ICsyOSw2IEBACiAgICAgICAgICAgICAgICAgICAgIFB1Ymxpc2hlZCBhcyBSRkMgMjk4MiIKICAgICA6Oj0geyBtaWItMiA5MCB9CiAKLQogZGlzbWFuRXhwcmVzc2lvbk1JQk9iamVjdHMgT0JKRUNUIElERU5USUZJRVIgOjo9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGlzbWFuRXhwcmVzc2lvbk1JQiAxIH0KIApAQCAtNDEsNyArNDAsNiBAQAogLS0gUmVzb3VyY2UgQ29udHJvbAogLS0KIAotCiBleHBSZXNvdXJjZURlbHRhTWluaW11bSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoLTEgfCAxLi42MDApCiAgICAgVU5JVFMgICAgICAgInNlY29uZHMiCkBAIC05MCw3ICs4OCw2IEBACiAgICAgIFVubGVzcyBleHBsaWNpdGx5IHJlc291cmNlIGxpbWl0ZWQsIGEgc3lzdGVtJ3MgdmFsdWUgZm9yCiAgICAgIHRoaXMgb2JqZWN0IHNob3VsZCBiZSAwLgogCi0KICAgICAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBlbGltaW5hdGUgb3IgaW5oaWJpdCBleGlzdGluZyBkZWx0YQogICAgICB3aWxkY2FyZCBpbnN0YW5jZSBvYmplY3RzIGJ1dCB3aWxsIHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIG1vcmUKICAgICAgc3VjaCBvYmplY3RzLgpAQCAtMTM5LDcgKzEzNiw2IEBACiAtLQogCiBleHBFeHByZXNzaW9uVGFibGUgT0JKRUNULVRZUEUKLQogICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIEV4cEV4cHJlc3Npb25FbnRyeQogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICAgY3VycmVudApAQCAtMzM1LDcgKzMzMSw2IEBACiAKICAgICAgICAgICBJZiBlaXRoZXIgc2lkZSBpcyBJcEFkZHJlc3MsIHVzZSB0aGF0LgogCi0KICAgICAgICAgICBJZiBlaXRoZXIgc2lkZSBpcyBUaW1lVGlja3MsIHVzZSB0aGF0LgogCiAgICAgICAgICAgSWYgZWl0aGVyIHNpZGUgaXMgQ291bnRlcjMyLCB1c2UgdGhhdC4KQEAgLTM4NCw3ICszNzksNiBAQAogICAgICAgICAgIHN1bQogICAgICAgICAgIGV4aXN0cwogCi0KICAgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbmRpY2F0ZSB0aGVpciBwYXJhbWV0ZXJzIGJ5CiAgICAgIG5hbWluZyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIHBhcmFtZXRlcidzIHBvc2l0aW9uCiAgICAgIGluIHRoZSBwYXJhbWV0ZXIgbGlzdC4gIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0aGUgdHlwZSBpbmRpY2F0ZWQKQEAgLTQzMyw3ICs0MjcsNiBAQAogICAgICBleGlzdHMoYW55VHlwZU9iamVjdCkgLSB2ZXJpZmllcyB0aGUgb2JqZWN0IGluc3RhbmNlIGV4aXN0cy4gQQogICAgICByZXR1cm4gdmFsdWUgb2YgMCBpbmRpY2F0ZXMgTm9TdWNoSW5zdGFuY2UgKGkuZS4gYm9vbGVhbgogICAgICBmYWxzZSkuIgotCiAgICAgOjo9IHsgZXhwRXhwcmVzc2lvbkVudHJ5IDMgfQogCiBleHBFeHByZXNzaW9uVmFsdWVUeXBlIE9CSkVDVC1UWVBFCkBAIC01MzEsNyArNTI0LDYgQEAKICAgICA6Oj0geyBleHBFeHByZXNzaW9uRW50cnkgNyB9CiAKIGV4cEV4cHJlc3Npb25FcnJvcnMgT0JKRUNULVRZUEUKLQogICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKQEAgLTU4MCw3ICs1NzIsNiBAQAogICAgICBlcnJvciBmb3IgdGhhdCBleHByZXNzaW9uIGFzIHJlZmxlY3RlZCBieSB0aGUgZXJyb3IgY29kZXMKICAgICAgZGVmaW5lZCBmb3IgZXhwRXJyb3JDb2RlLiIKICAgICBJTkRFWCAgICAgICB7IGV4cEV4cHJlc3Npb25Pd25lciwgZXhwRXhwcmVzc2lvbk5hbWUgfQotCiAgICAgOjo9IHsgZXhwRXJyb3JUYWJsZSAxIH0KIAogRXhwRXJyb3JFbnRyeSA6Oj0gU0VRVUVOQ0UgewpAQCAtNjc4LDcgKzY2OSw2IEBACiBleHBFcnJvckluc3RhbmNlIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIGV4cFZhbHVlSW5zdGFuY2UgYmVpbmcgZXZhbHVhdGVkIHdoZW4gdGhlIGVycm9yCkBAIC03MjcsNyArNzE3LDYgQEAKICAgICBleHBPYmplY3RJbmRleCAgICAgICAgICAgICAgICAgICAgIFVuc2lnbmVkMzIsCiAgICAgZXhwT2JqZWN0SUQgICAgICAgICAgICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKICAgICBleHBPYmplY3RJRFdpbGRjYXJkICAgICAgICAgICAgICAgIFRydXRoVmFsdWUsCi0KICAgICBleHBPYmplY3RTYW1wbGVUeXBlICAgICAgICAgICAgICAgIElOVEVHRVIsCiAgICAgZXhwT2JqZWN0RGVsdGFEaXNjb250aW51aXR5SUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKICAgICBleHBPYmplY3REaXNjb250aW51aXR5SURXaWxkY2FyZCAgIFRydXRoVmFsdWUsCkBAIC03NzYsNyArNzY1LDYgQEAKICAgICAgICAgIkEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGV4cE9iamVjSUQgb2YgdGhpcyByb3cgaXMgYSB3aWxkY2FyZAogICAgICAgICBvYmplY3QuIEZhbHNlIGluZGljYXRlcyB0aGF0IGV4cE9iamVjdElEIGlzIGZ1bGx5IGluc3RhbmNlZC4KICAgICAgICAgSWYgYWxsIGV4cE9iamVjdFdpbGRjYXJkIHZhbHVlcyBmb3IgYSBnaXZlbiBleHByZXNzaW9uIGFyZSBGQUxTRSwKLQogICAgICAgICBleHBFeHByZXNzaW9uUHJlZml4IHdpbGwgcmVmbGVjdCBhIHNjYWxhciBvYmplY3QgKGkuZS4gd2lsbAogICAgICAgICBiZSAwLjApLgogCkBAIC04MjUsNyArODEzLDYgQEAKICAgICAgRGF0ZUFuZFRpbWUgb2JqZWN0IHRoYXQgaW5kaWNhdGVzIGEgZGlzY29udGludWl0eSBpbiB0aGUgdmFsdWUKICAgICAgYXQgZXhwT2JqZWN0SUQuCiAKLQogICAgICBUaGlzIG9iamVjdCBpcyBpbnN0YW50aWF0ZWQgb25seSBpZiBleHBPYmplY3RTYW1wbGVUeXBlIGlzCiAgICAgICdkZWx0YVZhbHVlJyBvciAnY2hhbmdlZFZhbHVlJy4KIApAQCAtODc0LDcgKzg2MSw2IEBACiAgICAgREVGVkFMICAgICAgeyB0aW1lVGlja3MgfQogICAgICA6Oj0geyBleHBPYmplY3RFbnRyeSA3IH0KIAotCiBleHBPYmplY3RDb25kaXRpb25hbCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKQEAgLTkxMCw3ICs4OTYsNiBAQAogICAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQogICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgIERFU0NSSVBUSU9OCi0KICAgICAgIkEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGV4cE9iamVjdENvbmRpdGlvbmFsIG9mIHRoaXMgcm93IGlzCiAgICAgIGEgd2lsZGNhcmQgb2JqZWN0LiBGYWxzZSBpbmRpY2F0ZXMgdGhhdCBleHBPYmplY3RDb25kaXRpb25hbCBpcwogICAgICBmdWxseSBpbnN0YW5jZWQuCkBAIC05MjMsNyArOTA4LDYgQEAKIGV4cE9iamVjdEVudHJ5U3RhdHVzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgUm93U3RhdHVzCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIGNvbnRyb2wgdGhhdCBhbGxvd3MgY3JlYXRpb24vZGVsZXRpb24gb2YgZW50cmllcy4KQEAgLTEwMjEsNyArMTAwNSw2IEBACiBleHBWYWx1ZUNvdW50ZXIzMlZhbCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgdmFsdWUgd2hlbiBleHBFeHByZXNzaW9uVmFsdWVUeXBlIGlzICdjb3VudGVyMzInLiIKQEAgLTEwNjAsNyArMTA0Myw3IEBACiAgICAgOjo9IHsgZXhwVmFsdWVFbnRyeSA2IH0KIAogZXhwVmFsdWVPY3RldFN0cmluZ1ZhbCBPQkpFQ1QtVFlQRQotICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAtLSAoU0laRSAoMC4uNjU1MzYpKQorICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAoU0laRSAoMC4uNjU1MzYpKQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMTA3MCw3ICsxMDUzLDYgQEAKIGV4cFZhbHVlT2lkVmFsIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIHZhbHVlIHdoZW4gZXhwRXhwcmVzc2lvblZhbHVlVHlwZSBpcyAnb2JqZWN0SWQnLiIKQEAgLTExMzYsNyArMTExOCw2IEBACiAgICAgIFdSSVRFLVNZTlRBWCAgIElOVEVHRVIgeyBmYWxzZSgyKSB9CiAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgIkltcGxlbWVudGF0aW9uIG5lZWQgbm90IGFsbG93IGRlbHRhcyB3aWxkY2FyZHMuIgotCiAgICAgIDo6PSB7IGRpc21hbkV4cHJlc3Npb25NSUJDb21wbGlhbmNlcyAxIH0KIAogLS0gVW5pdHMgb2YgQ29uZm9ybWFuY2UKQEAgLTExNjMsMTIgKzExNDQsMTAgQEAKICAgICAgICAgICBleHBFeHByZXNzaW9uUHJlZml4LAogICAgICAgICAgIGV4cEV4cHJlc3Npb25FcnJvcnMsCiAgICAgICAgICAgZXhwRXhwcmVzc2lvbkVudHJ5U3RhdHVzLAotCiAgICAgICAgICAgZXhwRXJyb3JUaW1lLAogICAgICAgICAgIGV4cEVycm9ySW5kZXgsCiAgICAgICAgICAgZXhwRXJyb3JDb2RlLAogICAgICAgICAgIGV4cEVycm9ySW5zdGFuY2UsCi0KICAgICAgICAgICBleHBPYmplY3RJRCwKICAgICAgICAgICBleHBPYmplY3RJRFdpbGRjYXJkLAogICAgICAgICAgIGV4cE9iamVjdFNhbXBsZVR5cGUsCkBAIC0xMjAxLDUgKzExODAsMyBAQAogICAgICA6Oj0geyBkaXNtYW5FeHByZXNzaW9uTUlCR3JvdXBzIDMgfQogCiBFTkQKLQotCmRpZmYgLS1naXQgYS9taWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0IGIvbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dAppbmRleCAxNjgwYWNlLi43OTk1ZmM0IDEwMDY0NAotLS0gYS9taWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0CisrKyBiL21pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQKQEAgLTYsMjQgKzYsMzcgQEAKICAgICAgIFRFWFRVQUwtQ09OVkVOVElPTiAgICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVRDOwogCiAgIGlhbmFBZGRyZXNzRmFtaWx5TnVtYmVycyBNT0RVTEUtSURFTlRJVFkKLSAgICAgIExBU1QtVVBEQVRFRCAiMjAwMjAzMTQwMDAwWiIgIC0tIE1hcmNoIDE0LCAyMDAyCisgICAgICBMQVNULVVQREFURUQgIjIwMTMwOTI1MDAwMFoiICAtLSBTZXB0ZW1iZXIgMjUsIDIwMTMKICAgICAgIE9SR0FOSVpBVElPTiAiSUFOQSIKICAgICAgIENPTlRBQ1QtSU5GTwogICAgICAgICAgICJQb3N0YWw6ICAgIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5CiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzCiAJCSAgICAgIGFuZCBOdW1iZXJzCi0gICAgICAgICAgICAgICAgICAgICAgNDY3NiBBZG1pcmFsdHkgV2F5LCBTdWl0ZSAzMzAKLSAgICAgICAgICAgICAgICAgICAgICBNYXJpbmEgZGVsIFJleSwgQ0EgOTAyOTItNjYwMQorICAgICAgICAgICAgICAgICAgICAgIDEyMDI1IFdhdGVyZnJvbnQgRHJpdmUsIFN1aXRlIDMwMAorICAgICAgICAgICAgICAgICAgICAgIExvcyBBbmdlbGVzLCBDQSA5MDA5NC0yNTM2CiAgICAgICAgICAgICAgICAgICAgICAgVVNBCiAKLSAgICAgICAgICBUZWw6ICAgICsxICAzMTAtODIzLTkzNTgKLSAgICAgICAgICBFLU1haWw6IGlhbmFAaWFuYS5vcmciCisgICAgICAgICAgVGVsOiAgICArMSAgMzEwLTMwMS01ODAwCisgICAgICAgICAgRS1NYWlsOiBpYW5hJmlhbmEub3JnIgogICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAiVGhlIE1JQiBtb2R1bGUgZGVmaW5lcyB0aGUgQWRkcmVzc0ZhbWlseU51bWJlcnMKICAgICAgICAgICB0ZXh0dWFsIGNvbnZlbnRpb24uIgogCiAgICAgICAtLSByZXZpc2lvbiBoaXN0b3J5CiAKKyAgICAgIFJFVklTSU9OICAgICAiMjAxMzA5MjUwMDAwWiIgIC0tIFNlcHRlbWJlciAyNSwgMjAxMworICAgICAgREVTQ1JJUFRJT04gICJGaXhlZCBsYWJlbHMgZm9yIDE2Mzg5LTE2MzkwLiIKKworICAgICAgUkVWSVNJT04gICAgICIyMDEzMDcxNjAwMDBaIiAgLS0gSnVseSAxNiwgMjAxMworICAgICAgREVTQ1JJUFRJT04gICJGaXhlZCBsYWJlbHMgZm9yIDE2Mzg5LTE2MzkwLiIKKworICAgICAgUkVWSVNJT04gICAgICIyMDEzMDYyNjAwMDBaIiAgLS0gSnVuZSAyNiwgMjAxMworICAgICAgREVTQ1JJUFRJT04gICJBZGRlZCBhc3NpZ25tZW50cyAyNi0yOC4iCisKKyAgICAgIFJFVklTSU9OICAgICAiMjAxMzA2MTgwMDAwWiIgIC0tIEp1bmUgMTgsIDIwMTMKKyAgICAgIERFU0NSSVBUSU9OICAiQWRkZWQgYXNzaWdubWVudHMgMTYzODQtMTYzOTAuIEFzc2lnbm1lbnQgCisgICAgICAgICAgICAgICAgICAgIDI1IGFkZGVkIGluIDIwMDcgcmV2aXNpb24uIgorCiAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIwMzE0MDAwMFoiICAtLSBNYXJjaCAxNCwgMjAwMgogICAgICAgREVTQ1JJUFRJT04gICJBZGRyZXNzRmFtaWx5TnVtYmVycyBhc3NpZ25tZW50IDIyIHRvIAogICAgICAgICAgICAgICAgICAgIGZpYnJlQ2hhbm5lbFdXUE4uIEFkZHJlc3NGYW1pbHlOdW1iZXJzIApAQCAtODYsMTAgKzk5LDI2IEBACiAgICAgICAgICAgZmlicmVDaGFubmVsV1dQTigyMiksICAtLSBGaWJyZSBDaGFubmVsIFdvcmxkLVdpZGUgUG9ydCBOYW1lIAogICAgICAgICAgIGZpYnJlQ2hhbm5lbFdXTk4oMjMpLCAgLS0gRmlicmUgQ2hhbm5lbCBXb3JsZC1XaWRlIE5vZGUgTmFtZQogICAgICAgICAgIGd3aWQoMjQpLCAgICAtLSBHYXRld2F5IElkZW50aWZpZXIgCisgICAgICAgICAgYWZpKDI1KSwgIC0tIEFGSSBmb3IgTDJWUE4gaW5mb3JtYXRpb24KKyAgICAgICAgICBtcGxzVHBTZWN0aW9uRW5kcG9pbnRJZGVudGlmaWVyKDI2KSwgIC0tIE1QTFMtVFAgU2VjdGlvbiBFbmRwb2ludCBJZGVudGlmaWVyCisgICAgICAgICAgbXBsc1RwTHNwRW5kcG9pbnRJZGVudGlmaWVyKDI3KSwgIC0tIE1QTFMtVFAgTFNQIEVuZHBvaW50IElkZW50aWZpZXIKKyAgICAgICAgICBtcGxzVHBQc2V1ZG93aXJlRW5kcG9pbnRJZGVudGlmaWVyKDI4KSwgIC0tIE1QTFMtVFAgUHNldWRvd2lyZSBFbmRwb2ludCBJZGVudGlmaWVyCisgICAgICAgICAgZWlncnBDb21tb25TZXJ2aWNlRmFtaWx5KDE2Mzg0KSwgIC0tIEVJR1JQIENvbW1vbiBTZXJ2aWNlIEZhbWlseQorICAgICAgICAgIGVpZ3JwSXB2NFNlcnZpY2VGYW1pbHkoMTYzODUpLCAgLS0gRUlHUlAgSVB2NCBTZXJ2aWNlIEZhbWlseQorICAgICAgICAgIGVpZ3JwSXB2NlNlcnZpY2VGYW1pbHkoMTYzODYpLCAgLS0gRUlHUlAgSVB2NiBTZXJ2aWNlIEZhbWlseQorICAgICAgICAgIGxpc3BDYW5vbmljYWxBZGRyZXNzRm9ybWF0KDE2Mzg3KSwgIC0tIExJU1AgQ2Fub25pY2FsIEFkZHJlc3MgRm9ybWF0IChMQ0FGKQorICAgICAgICAgIGJncExzKDE2Mzg4KSwgIC0tIEJHUC1MUworICAgICAgICAgIGZvcnR5ZWlnaHRCaXRNYWNCaXRNYWMoMTYzODkpLCAgLS0gNDgtYml0IE1BQworICAgICAgICAgIHNpeHR5Zm91ckJpdE1hYygxNjM5MCksICAtLSA2NC1iaXQgTUFDCisgICAgICAgICAgb3VpKDE2MzkxKSwgIC0tIE9VSQorICAgICAgICAgIG1hYzI0KDE2MzkyKSwgIC0tIE1BQy8yNAorICAgICAgICAgIG1hYzQwKDE2MzkzKSwgIC0tIE1BQy80MAorICAgICAgICAgIGlwdjY2NCgxNjM5NCksICAtLSBJUHY2LzY0CisgICAgICAgICAgckJyaWRnZVBvcnRJRCgxNjM5NSksICAtLSBSQnJpZGdlIFBvcnQgSUQKICAgICAgICAgICByZXNlcnZlZCg2NTUzNSkKIAogICAgICAgICAgIFJlcXVlc3RzIGZvciBuZXcgdmFsdWVzIHNob3VsZCBiZSBtYWRlIHRvIElBTkEgdmlhCi0gICAgICAgICAgZW1haWwgKGlhbmFAaWFuYS5vcmcpLiIKKyAgICAgICAgICBlbWFpbCAoaWFuYSZpYW5hLm9yZykuIgogICAgICAgU1lOVEFYICBJTlRFR0VSIHsKICAgICAgICAgICAgICAgICAgIG90aGVyKDApLAogICAgICAgICAgICAgICAgICAgaXBWNCgxKSwKQEAgLTExNiw2ICsxNDUsMjIgQEAKICAgICAgICAgICAgICAgICAgIGZpYnJlQ2hhbm5lbFdXUE4oMjIpLAogICAgICAgICAgICAgICAgICAgZmlicmVDaGFubmVsV1dOTigyMyksCiAgICAgICAgICAgICAgICAgICBnd2lkKDI0KSwKKyAgICAgICAgICAgICAgICAgIGFmaSgyNSksCisgICAgICAgICAgICAgICAgICBtcGxzVHBTZWN0aW9uRW5kcG9pbnRJZGVudGlmaWVyKDI2KSwKKyAgICAgICAgICAgICAgICAgIG1wbHNUcExzcEVuZHBvaW50SWRlbnRpZmllcigyNyksCisgICAgICAgICAgICAgICAgICBtcGxzVHBQc2V1ZG93aXJlRW5kcG9pbnRJZGVudGlmaWVyKDI4KSwKKyAgICAgICAgICAgICAgICAgIGVpZ3JwQ29tbW9uU2VydmljZUZhbWlseSgxNjM4NCksCisgICAgICAgICAgICAgICAgICBlaWdycElwdjRTZXJ2aWNlRmFtaWx5KDE2Mzg1KSwKKyAgICAgICAgICAgICAgICAgIGVpZ3JwSXB2NlNlcnZpY2VGYW1pbHkoMTYzODYpLAorICAgICAgICAgICAgICAgICAgbGlzcENhbm9uaWNhbEFkZHJlc3NGb3JtYXQoMTYzODcpLAorICAgICAgICAgICAgICAgICAgYmdwTHMoMTYzODgpLAorICAgICAgICAgICAgICAgICAgZm9ydHllaWdodEJpdE1hYygxNjM4OSksCisgICAgICAgICAgICAgICAgICBzaXh0eWZvdXJCaXRNYWMoMTYzOTApLAorICAgICAgICAgICAgICAgICAgb3VpKDE2MzkxKSwKKyAgICAgICAgICAgICAgICAgIG1hYzI0KDE2MzkyKSwKKyAgICAgICAgICAgICAgICAgIG1hYzQwKDE2MzkzKSwKKyAgICAgICAgICAgICAgICAgIGlwdjY2NCgxNjM5NCksCisgICAgICAgICAgICAgICAgICByQnJpZGdlUG9ydElEKDE2Mzk1KSwKICAgICAgICAgICAgICAgICAgIHJlc2VydmVkKDY1NTM1KQogICAgICAgICAgICAgICB9CiAgICAgICBFTkQKZGlmZiAtLWdpdCBhL21pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0IGIvbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQKaW5kZXggYjBhZDNlZC4uNGI5N2JkZCAxMDA2NDQKLS0tIGEvbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQKKysrIGIvbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQKQEAgLTUsMTcgKzUsMTcgQEAKICAgICAgICAgRlJPTSBTTk1QdjItU01JOwogCiBpYW5hTGFuZ3VhZ2VzIE1PRFVMRS1JREVOVElUWQotICAgIExBU1QtVVBEQVRFRCAiMjAwMDA1MTAwMDAwWiIgIC0tIE1heSAxMCwgMjAwMAorICAgIExBU1QtVVBEQVRFRCAiMjAxNDA1MjIwMDAwWiIgLS0gTWF5IDIyLCAyMDE0CiAgICAgT1JHQU5JWkFUSU9OICJJQU5BIgogICAgIENPTlRBQ1QtSU5GTwogICAgICAgICAiSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycyBBdXRob3JpdHkgKElBTkEpCiAKICAgICAgICAgIFBvc3RhbDogSUNBTk4KLSAgICAgICAgICAgICAgICAgNDY3NiBBZG1pcmFsdHkgV2F5LCBTdWl0ZSAzMzAKLSAgICAgICAgICAgICAgICAgTWFyaW5hIGRlbCBSZXksIENBIDkwMjkyCisgICAgICAgICAgICAgICAgIDEyMDI1IFdhdGVyZnJvbnQgRHJpdmUsIFN1aXRlIDMwMAorICAgICAgICAgICAgICAgICBMb3MgQW5nZWxlcywgQ0EgOTAwOTQtMjUzNgogCi0gICAgICAgICBUZWw6ICAgICsxIDMxMCA4MjMgOTM1OCB4MjAKLSAgICAgICAgIEUtTWFpbDogaWFuYUBpYW5hLm9yZyIKKyAgICAgICAgIFRlbDogICAgKzEgMzEwLTMwMS01ODAwCisgICAgICAgICBFLU1haWw6IGlhbmEmaWFuYS5vcmciCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBNSUIgbW9kdWxlIHJlZ2lzdGVycyBvYmplY3QgaWRlbnRpZmllciB2YWx1ZXMgZm9yCiAgICAgICAgICB3ZWxsLWtub3duIHByb2dyYW1taW5nIGFuZCBzY3JpcHRpbmcgbGFuZ3VhZ2VzLiBFdmVyeQpAQCAtMzksNiArMzksOSBAQAogCiAgLS0gUmV2aXNpb24gbG9nLCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKIAorICAgIFJFVklTSU9OICAgICIyMDE0MDUyMjAwMDBaIiAtLSBNYXkgMjIsIDIwMTQKKyAgICBERVNDUklQVElPTiAiVXBkYXRlZCBjb250YWN0IGluZm8uIgorCiAgICAgUkVWSVNJT04gICAgIjIwMDAwNTEwMDAwMFoiIC0tIE1heSAxMCwgMjAwMAogICAgIERFU0NSSVBUSU9OICJJbXBvcnQgbWliLTIgaW5zdGVhZCBvZiBleHBlcmltZW50YWwsIHNvIHRoYXQKICAgICAgICAgICAgICAgICAgdGhpcyBtb2R1bGUgY29tcGlsZXMiCmRpZmYgLS1naXQgYS9taWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0IGIvbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dAppbmRleCA1N2U3M2EyLi5mN2JjMWViIDEwMDY0NAotLS0gYS9taWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0CisrKyBiL21pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQKQEAgLTEsNCArMSwzIEBACi0KIElBTkEtUlRQUk9UTy1NSUIgREVGSU5JVElPTlMgOjo9IEJFR0lOCiAKIElNUE9SVFMKQEAgLTYsMTYgKzUsMTYgQEAKICAgICBURVhUVUFMLUNPTlZFTlRJT04gICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1UQzsKIAogaWFuYVJ0UHJvdG9NSUIgIE1PRFVMRS1JREVOVElUWQotICAgIExBU1QtVVBEQVRFRCAiMjAwMDA5MjYwMDAwWiIgLS0gU2VwdGVtYmVyIDI2LCAyMDAwCisgICAgTEFTVC1VUERBVEVEICIyMDEyMDgzMDAwMDBaIiAtLSBBdWd1c3QgMzAsIDIwMTIKICAgICBPUkdBTklaQVRJT04gIklBTkEiCiAgICAgQ09OVEFDVC1JTkZPCiAgICAgICAgICAgICAiIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5CiAgICAgICAgICAgICAgIEludGVybmV0IENvcnBvcmF0aW9uIGZvciBBc3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVycwotICAgICAgICAgICAgICA0Njc2IEFkbWlyYWx0eSBXYXksIFN1aXRlIDMzMAotICAgICAgICAgICAgICBNYXJpbmEgZGVsIFJleSwgQ0EgOTAyOTItNjYwMQorICAgICAgICAgICAgICAxMjAyNSBXYXRlcmZyb250IERyaXZlLCBTdWl0ZSAzMDAKKyAgICAgICAgICAgICAgTG9zIEFuZ2VsZXMsIENBIDkwMDk0LTI1MzYKIAotICAgICAgICAgICAgICBQaG9uZTogKzEgMzEwIDgyMyA5MzU4Ci0gICAgICAgICAgICAgIEVNYWlsOiBpYW5hQGlhbmEub3JnIgorICAgICAgICAgICAgICBQaG9uZTogKzEgMzEwIDMwMSA1ODAwCisgICAgICAgICAgICAgIEVNYWlsOiBpYW5hJmlhbmEub3JnIgogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiVGhpcyBNSUIgbW9kdWxlIGRlZmluZXMgdGhlIElBTkFpcFJvdXRlUHJvdG9jb2wgYW5kCiAgICAgICAgICAgICBJQU5BaXBNUm91dGVQcm90b2NvbCB0ZXh0dWFsIGNvbnZlbnRpb25zIGZvciB1c2UgaW4gTUlCcwpAQCAtMjksMTUgKzI4LDE5IEBACiAgICAgICAgICAgICB3aWxsIGJlIHNlbGVjdGVkIGJ5IHRoZSBJRVNHIEFyZWEgRGlyZWN0b3Iocykgb2YgdGhlIFJvdXRpbmcKICAgICAgICAgICAgIEFyZWEuIgogCisgICAgUkVWSVNJT04gICAgICIyMDEyMDgzMDAwMDBaIiAgLS0gQXVndXN0IDMwLCAyMDEyIAorICAgIERFU0NSSVBUSU9OICAiQWRkZWQgZGhjcCgxOSkuIgorCisgICAgUkVWSVNJT04gICAgICIyMDExMDcyMjAwMDBaIiAgLS0gSnVseSAyMiwgMjAxMSAKKyAgICBERVNDUklQVElPTiAgIkFkZGVkIHJwbCgxOCkgLiIKKwogICAgIFJFVklTSU9OICAgICAiMjAwMDA5MjYwMDAwWiIgIC0tIFNlcHRlbWJlciAyNiwgMjAwMCAKICAgICBERVNDUklQVElPTiAgIk9yaWdpbmFsIHZlcnNpb24sIHB1Ymxpc2hlZCBpbiBjb29yZGluYXRpb24KICAgICAgICAgICAgICAgICAgd2l0aCBSRkMgMjkzMi4iCi0KICAgICA6Oj0geyBtaWItMiA4NCB9CiAKIElBTkFpcFJvdXRlUHJvdG9jb2wgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgogICAgU1RBVFVTICAgICAgY3VycmVudAotCiAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIkEgbWVjaGFuaXNtIGZvciBsZWFybmluZyByb3V0ZXMuICBJbmNsdXNpb24gb2YgdmFsdWVzIGZvcgogICAgICAgICAgICAgcm91dGluZyBwcm90b2NvbHMgaXMgbm90IGludGVuZGVkIHRvIGltcGx5IHRoYXQgdGhvc2UKQEAgLTYzLDcgKzY2LDkgQEAKICAgICAgICAgICAgICAgICBiZ3AgICAgICAgICgxNCksIC0tIEJvcmRlciBHYXRld2F5IFByb3RvY29sCiAgICAgICAgICAgICAgICAgaWRwciAgICAgICAoMTUpLCAtLSBJbnRlckRvbWFpbiBQb2xpY3kgUm91dGluZwogICAgICAgICAgICAgICAgIGNpc2NvRWlncnAgKDE2KSwgLS0gQ2lzY28gRUlHUlAKLSAgICAgICAgICAgICAgICBkdm1ycCAgICAgICgxNykgIC0tIERWTVJQCisgICAgICAgICAgICAgICAgZHZtcnAgICAgICAoMTcpLCAtLSBEVk1SUAorICAgICAgICAgICAgICAgIHJwbCAgICAgICAgKDE4KSwgLS0gUlBMIFtSRkMtaWV0Zi1yb2xsLXJwbC0xOV0KKyAgICAgICAgICAgICAgICBkaGNwICAgICAgICgxOSkgIC0tIERIQ1AgW1JGQzIxMzJdCiAgICAgICAgICAgICAgICB9CiAKIElBTkFpcE1Sb3V0ZVByb3RvY29sIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KQEAgLTg4LDUgKzkzLDMgQEAKICAgICAgICAgICAgICAgIH0KIAogRU5ECi0KLQpkaWZmIC0tZ2l0IGEvbWlicy9JQU5BaWZUeXBlLU1JQi50eHQgYi9taWJzL0lBTkFpZlR5cGUtTUlCLnR4dAppbmRleCA1NDJlMjQ3Li4wMjdhMTUzIDEwMDY0NAotLS0gYS9taWJzL0lBTkFpZlR5cGUtTUlCLnR4dAorKysgYi9taWJzL0lBTkFpZlR5cGUtTUlCLnR4dApAQCAtNSwyMSArNSwxMjMgQEAKICAgICAgICBURVhUVUFMLUNPTlZFTlRJT04gICAgICAgICAgRlJPTSBTTk1QdjItVEM7CiAKICAgIGlhbmFpZlR5cGUgTU9EVUxFLUlERU5USVRZCi0gICAgICAgTEFTVC1VUERBVEVEICIyMDA1MTAxMDAwMDBaIiAgLS0gT2N0b2JlciAxMCwgMjAwNQorICAgICAgIExBU1QtVVBEQVRFRCAiMjAxNDA3MDMwMDAwWiIgLS0gSnVseSAzLCAyMDE0CiAgICAgICAgT1JHQU5JWkFUSU9OICJJQU5BIgogICAgICAgIENPTlRBQ1QtSU5GTyAiICAgICAgICBJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzIEF1dGhvcml0eQogCiAgICAgICAgICAgICAgICAgICAgICBQb3N0YWw6IElDQU5OCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2NzYgQWRtaXJhbHR5IFdheSwgU3VpdGUgMzMwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmluYSBkZWwgUmV5LCBDQSA5MDI5MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjAyNSBXYXRlcmZyb250IERyaXZlLCBTdWl0ZSAzMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9zIEFuZ2VsZXMsIENBIDkwMDk0LTI1MzYKIAotICAgICAgICAgICAgICAgICAgICAgVGVsOiAgICArMSAzMTAgODIzIDkzNTgKLSAgICAgICAgICAgICAgICAgICAgIEUtTWFpbDogaWFuYUBpYW5hLm9yZyIKLQorICAgICAgICAgICAgICAgICAgICAgVGVsOiAgICArMSAzMTAtMzAxLTU4MDAKKyAgICAgICAgICAgICAgICAgICAgIEUtTWFpbDogaWFuYSZpYW5hLm9yZyIKICAgICAgICBERVNDUklQVElPTiAgIlRoaXMgTUlCIG1vZHVsZSBkZWZpbmVzIHRoZSBJQU5BaWZUeXBlIFRleHR1YWwKICAgICAgICAgICAgICAgICAgICAgIENvbnZlbnRpb24sIGFuZCB0aHVzIHRoZSBlbnVtZXJhdGVkIHZhbHVlcyBvZgogICAgICAgICAgICAgICAgICAgICAgdGhlIGlmVHlwZSBvYmplY3QgZGVmaW5lZCBpbiBNSUItSUkncyBpZlRhYmxlLiIKIAorICAgICAgIFJFVklTSU9OICAgICAiMjAxNDA3MDMwMDAwWiIgIC0tIEp1bHkgMywgMjAxNAorCSAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNzctMjc4LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxNDA1MjIwMDAwWiIgLS0gTWF5IDIyLCAyMDE0CisgICAgICAgREVTQ1JJUFRJT04gICJVcGRhdGVkIGNvbnRhY3QgaW5mby4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTIwNTE3MDAwMFoiICAtLSBNYXkgMTcsIDIwMTIKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNzIuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEyMDExMTAwMDBaIiAgLS0gSmFudWFyeSAxMSwgMjAxMgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNjYtMjcxLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTEyMTgwMDAwWiIgIC0tIERlY2VtYmVyIDE4LCAyMDExCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI2My0yNjUuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMTAyNjAwMDBaIiAgLS0gT2N0b2JlciAyNiwgMjAxMQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI2Mi4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTEwOTA3MDAwMFoiICAtLSBTZXB0ZW1iZXIgNywgMjAxMQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNjAgYW5kIDI2MS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTEwNzIyMDAwMFoiICAtLSBKdWx5IDIyLCAyMDExCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjU5LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTA2MDMwMDAwWiIgIC0tIEp1bmUgMDMsIDIwMTEKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTguIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEwMDkyMTAwMDBaIiAgLS0gU2VwdGVtYmVyIDIxLCAyMDEwCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI1NiBhbmQgMjU3LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMDA3MjEwMDAwWiIgIC0tIEp1bHkgMjEsIDIwMTAKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTUuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEwMDIxMTAwMDBaIiAgLS0gRmVicnVhcnkgMTEsIDIwMTAKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTQuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEwMDIwODAwMDBaIiAgLS0gRmVicnVhcnkgMDgsIDIwMTAKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjUyIGFuZCAyNTMuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA5MDUwNjAwMDBaIiAgLS0gTWF5IDA2LCAyMDA5CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjUxLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwOTAyMDYwMDAwWiIgIC0tIEZlYnJ1YXJ5IDA2LCAyMDA5CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkF0dW5uZWxUeXBlIDE1LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwODEwMDkwMDAwWiIgIC0tIE9jdG9iZXIgMDksIDIwMDgKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTAuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA4MDgxMjAwMDBaIiAgLS0gQXVndXN0IDEyLCAyMDA4CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjQ5LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwODA3MjIwMDAwWiIgIC0tIEp1bHkgMjIsIDIwMDgKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjQ3IGFuZCAyNDguIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA4MDYyNDAwMDBaIiAgLS0gSnVuZSAyNCwgMjAwOAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI0Ni4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDgwNTI5MDAwMFoiICAtLSBNYXkgMjksIDIwMDgKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNDUuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA3MDkxMzAwMDBaIiAgLS0gU2VwdGVtYmVyIDEzLCAyMDA3CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI0MyBhbmQgMjQ0LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNzA1MjkwMDAwWiIgIC0tIE1heSAyOSwgMjAwNworICAgICAgIERFU0NSSVBUSU9OICAiQ2hhbmdlZCB0aGUgZGVzY3JpcHRpb24gZm9yIElBTkFpZlR5cGUgMjI4LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNzAzMDgwMDAwWiIgIC0tIE1hcmNoIDA4LCAyMDA3CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjQyLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNzAxMjMwMDAwWiIgIC0tIEphbnVhcnkgMjMsIDIwMDcKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjM5LCAyNDAsIGFuZCAyNDEuIiAKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjEwMTcwMDAwWiIgIC0tIE9jdG9iZXIgMTcsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIkRlcHJlY2F0ZWQvT2Jzb2xldGVkIElBTkFpZlR5cGUgMjMwLiAgUmVnaXN0cmF0aW9uIG9mIAorICAgICAgICAgICAgICAgICAgICAgSUFOQWlmVHlwZSAyMzguIiAKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjA5MjUwMDAwWiIgIC0tIFNlcHRlbWJlciAyNSwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiQ2hhbmdlZCB0aGUgZGVzY3JpcHRpb24gZm9yIElBTkEgaWZUeXBlIAorICAgICAgICAgICAgICAgICAgICAgMTg0IGFuZCBhZGRlZCBuZXcgSUFOQSBpZlR5cGUgMjM3LiIgIAorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDgxNzAwMDBaIiAgLS0gQXVndXN0IDE3LCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJDaGFuZ2VkIHRoZSBkZXNjcmlwdGlvbnMgZm9yIElBTkFpZlR5cGVzCisgICAgICAgICAgICAgICAgICAgICAyMCBhbmQgMjEuIiAgIAorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDgxMTAwMDBaIiAgLS0gQXVndXN0IDExLCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJDaGFuZ2VkIHRoZSBkZXNjcmlwdGlvbnMgZm9yIElBTkFpZlR5cGVzCisgICAgICAgICAgICAgICAgICAgICA3LCAxMSwgNjIsIDY5LCBhbmQgMTE3LiIgICAKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjA3MjUwMDAwWiIgIC0tIEp1bHkgMjUsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjM2LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjA2MTQwMDAwWiIgIC0tIEp1bmUgMTQsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjM1LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjAzMzEwMDAwWiIgIC0tIE1hcmNoIDMxLCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIzNC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwMzMwMDAwMFoiICAtLSBNYXJjaCAzMCwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMzMuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA1MTIyMjAwMDBaIiAgLS0gRGVjZW1iZXIgMjIsIDIwMDUKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGVzIDIzMSBhbmQgMjMyLiIKKwogICAgICAgIFJFVklTSU9OICAgICAiMjAwNTEwMTAwMDAwWiIgIC0tIE9jdG9iZXIgMTAsIDIwMDUKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjMwLiIKIApAQCAtMzEsMTEgKzEzMywxMCBAQAogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDA1MDMwMzAwMDBaIiAgLS0gTWFyY2ggMywgMjAwNQogICAgICAgIERFU0NSSVBUSU9OICAiQWRkZWQgdGhlIElBTkF0dW5uZWxUeXBlIFRDIGFuZCBkZXByZWNhdGVkCi0JICAgICAgICAgICAgICAgICBJQU5BaWZUeXBlIHNpeFRvRm91ciAoMjE1KSBwZXIgCi0JICAgICAgICAgICAgICAgICBSRkM0MDg3LiIKKwkgICAgICAgICAgICAgICAgIElBTkFpZlR5cGUgc2l4VG9Gb3VyICgyMTUpIHBlciBSRkM0MDg3LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwNDExMjIwMDAwWiIgIC0tIE5vdmVtYmVyIDIyLCAyMDA0Ci0gICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIyNy4iCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIyNyBwZXIgUkZDNDYzMS4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDQwNjE3MDAwMFoiICAtLSBKdW5lIDE3LCAyMDA0CiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIyNi4iCkBAIC01MCw5MiArMTUxLDkyIEBACiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDMwODI1MDAwMFoiICAtLSBBdWcgMjUsIDIwMDMKICAgICAgICBERVNDUklQVElPTiAgIkRlcHJlY2F0ZWQgSUFOQWlmVHlwZXMgNyBhbmQgMTEuIE9ic29sZXRlZAotICAgICAgICAgICAgICAgICAgICBJQU5BaWZUeXBlcyA2MiwgNjksIGFuZCAxMTcuICBldGhlcm5ldENzbWFjZCAoNikKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVzZSB2YWx1ZXMiCisgICAgICAgICAgICAgICAgICAgICBJQU5BaWZUeXBlcyA2MiwgNjksIGFuZCAxMTcuICBldGhlcm5ldENzbWFjZCAoNikKKyAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlc2UgdmFsdWVzIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAzMDgxODAwMDBaIiAgLS0gQXVnIDE4LCAyMDAzCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjI0LiIKKyAgICAgICAgICAgICAgICAgICAgIDIyNC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDMwODA3MDAwMFoiICAtLSBBdWcgNywgMjAwMwogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMjIgYW5kIDIyMy4iCisgICAgICAgICAgICAgICAgICAgICAyMjIgYW5kIDIyMy4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDMwMzE4MDAwMFoiICAtLSBNYXIgMTgsIDIwMDMKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMjEuIgorICAgICAgICAgICAgICAgICAgICAgMjIxLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMzAxMTMwMDAwWiIgIC0tIEphbiAxMywgMjAwMwogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIyMC4iCisgICAgICAgICAgICAgICAgICAgICAyMjAuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAyMTAxNzAwMDBaIiAgLS0gT2N0IDE3LCAyMDAyCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjE5LiIKKyAgICAgICAgICAgICAgICAgICAgIDIxOS4iCiAKLQkgICBSRVZJU0lPTiAgICAgIjIwMDIwNzE2MDAwMFoiICAtLSBKdWwgMTYsIDIwMDIKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIwNzE2MDAwMFoiICAtLSBKdWwgMTYsIDIwMDIKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjE3IGFuZCAyMTguIgorICAgICAgICAgICAgICAgICAgICAgMjE3IGFuZCAyMTguIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAyMDcxMDAwMDBaIiAgLS0gSnVsIDEwLCAyMDAyCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIxNSBhbmQgMjE2LiIKKyAgICAgICAgICAgICAgICAgICAgIDIxNSBhbmQgMjE2LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMjA2MTkwMDAwWiIgIC0tIEp1biAxOSwgMjAwMgogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIxNC4iCisgICAgICAgICAgICAgICAgICAgICAyMTQuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAyMDEwNDAwMDBaIiAgLS0gSmFuIDQsIDIwMDIKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjExLCAyMTIgYW5kIDIxMy4iCisgICAgICAgICAgICAgICAgICAgICAyMTEsIDIxMiBhbmQgMjEzLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTEyMjAwMDAwWiIgIC0tIERlYyAyMCwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMDkgYW5kIDIxMC4iCisgICAgICAgICAgICAgICAgICAgICAyMDkgYW5kIDIxMC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDExMTE1MDAwMFoiICAtLSBOb3YgMTUsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjA3IGFuZCAyMDguIgorICAgICAgICAgICAgICAgICAgICAgMjA3IGFuZCAyMDguIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMTEwNjAwMDBaIiAgLS0gTm92IDYsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMDYuIgorICAgICAgICAgICAgICAgICAgICAgMjA2LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTExMDIwMDAwWiIgIC0tIE5vdiAyLCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjA1LiIKKyAgICAgICAgICAgICAgICAgICAgIDIwNS4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDExMDE2MDAwMFoiICAtLSBPY3QgMTYsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIGFuZCAyMDQuIgorICAgICAgICAgICAgICAgICAgICAgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIGFuZCAyMDQuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMDkxOTAwMDBaIiAgLS0gU2VwdCAxOSwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDE5OC4iCisgICAgICAgICAgICAgICAgICAgICAxOTguIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMDUxMTAwMDBaIiAgLS0gTWF5IDExLCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMTk3LiIKKyAgICAgICAgICAgICAgICAgICAgIDE5Ny4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDEwMTEyMDAwMFoiICAtLSBKYW4gMTIsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMTk1IGFuZCAxOTYuIgorICAgICAgICAgICAgICAgICAgICAgMTk1IGFuZCAxOTYuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAwMTIxOTAwMDBaIiAgLS0gRGVjIDE5LCAyMDAwCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDE5MyBhbmQgMTk0LiIKKyAgICAgICAgICAgICAgICAgICAgIDE5MyBhbmQgMTk0LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMDEyMDcwMDAwWiIgIC0tIERlYyAwNywgMjAwMAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAxOTEgYW5kIDE5Mi4iCisgICAgICAgICAgICAgICAgICAgICAxOTEgYW5kIDE5Mi4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDAxMjA0MDAwMFoiICAtLSBEZWMgMDQsIDIwMDAKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAxOTAuIgorICAgICAgICAgICAgICAgICAgICAgMTkwLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMDEwMTcwMDAwWiIgIC0tIE9jdCAxNywgMjAwMAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAxODggYW5kIDE4OS4iICAKKyAgICAgICAgICAgICAgICAgICAgIDE4OCBhbmQgMTg5LiIgIAogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAwMTAwMjAwMDBaIiAgLS0gT2N0IDAyLCAyMDAwCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMTg3LiIgCkBAIC0xOTEsNyArMjkyLDcgQEAKICAgICAgICAgICAgICAgIElBTkEuKQogCiAgICAgICAgICAgICAgICBSZXF1ZXN0cyBmb3IgbmV3IHZhbHVlcyBzaG91bGQgYmUgbWFkZSB0byBJQU5BIHZpYQotICAgICAgICAgICAgICAgZW1haWwgKGlhbmFAaWFuYS5vcmcpLgorICAgICAgICAgICAgICAgZW1haWwgKGlhbmEmaWFuYS5vcmcpLgogCiAgICAgICAgICAgICAgICBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFzc2lnbm1lbnQgb2YgaWZUeXBlCiAgICAgICAgICAgICAgICB2YWx1ZXMgYW5kIG9mIE9JRHMgdG8gcGFydGljdWxhciBtZWRpYS1zcGVjaWZpYyBNSUJzCkBAIC0yMTEsMTEgKzMxMiwxMyBAQAogICAgICAgICAgICAgICAgICAgIHJmYzg3N3gyNSg1KSwKICAgICAgICAgICAgICAgICAgICBldGhlcm5ldENzbWFjZCg2KSwgLS0gZm9yIGFsbCBldGhlcm5ldC1saWtlIGludGVyZmFjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJlZ2FyZGxlc3Mgb2Ygc3BlZWQsIGFzIHBlciBSRkMzNjM1Ci0gICAgICAgICAgICAgICAgICAgaXNvODgwMjNDc21hY2QoNyksIC0tIERlcHJlY2F0ZWQgdmlhIFJGQy1kcmFmdC1pZXRmLWh1Ym1pYi1ldGhlcmlmLW1pYi12MyAgZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICBpc284ODAyM0NzbWFjZCg3KSwgLS0gRGVwcmVjYXRlZCB2aWEgUkZDMzYzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgIGlzbzg4MDI0VG9rZW5CdXMoOCksCiAgICAgICAgICAgICAgICAgICAgaXNvODgwMjVUb2tlblJpbmcoOSksCiAgICAgICAgICAgICAgICAgICAgaXNvODgwMjZNYW4oMTApLAotICAgICAgICAgICAgICAgICAgIHN0YXJMYW4oMTEpLCAtLSBEZXByZWNhdGVkIHZpYSBSRkMtZHJhZnQtaWV0Zi1odWJtaWItZXRoZXJpZi1taWItdjMgIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgc3RhckxhbigxMSksIC0tIERlcHJlY2F0ZWQgdmlhIFJGQzM2MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICBwcm90ZW9uMTBNYml0KDEyKSwKICAgICAgICAgICAgICAgICAgICBwcm90ZW9uODBNYml0KDEzKSwKICAgICAgICAgICAgICAgICAgICBoeXBlcmNoYW5uZWwoMTQpLApAQCAtMjI0LDggKzMyNywxMCBAQAogICAgICAgICAgICAgICAgICAgIHNkbGMoMTcpLAogICAgICAgICAgICAgICAgICAgIGRzMSgxOCksICAgICAgICAgICAgLS0gRFMxLU1JQgogICAgICAgICAgICAgICAgICAgIGUxKDE5KSwgICAgICAgICAgICAgLS0gT2Jzb2xldGUgc2VlIERTMS1NSUIKLSAgICAgICAgICAgICAgICAgICBiYXNpY0lTRE4oMjApLAotICAgICAgICAgICAgICAgICAgIHByaW1hcnlJU0ROKDIxKSwKKyAgICAgICAgICAgICAgICAgICBiYXNpY0lTRE4oMjApLCAgICAgICAgICAgICAgLS0gbm8gbG9uZ2VyIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gc2VlIGFsc28gUkZDMjEyNworICAgICAgICAgICAgICAgICAgIHByaW1hcnlJU0ROKDIxKSwgICAgICAgICAgICAtLSBubyBsb25nZXIgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBzZWUgYWxzbyBSRkMyMTI3CiAgICAgICAgICAgICAgICAgICAgcHJvcFBvaW50VG9Qb2ludFNlcmlhbCgyMiksIC0tIHByb3ByaWV0YXJ5IHNlcmlhbAogICAgICAgICAgICAgICAgICAgIHBwcCgyMyksCiAgICAgICAgICAgICAgICAgICAgc29mdHdhcmVMb29wYmFjaygyNCksCkBAIC0yNjIsMjMgKzM2NywyNSBAQAogICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMig1NSksICAgICAgLS0gMTAwQmFzZVZHCiAgICAgICAgICAgICAgICAgICAgZmlicmVDaGFubmVsKDU2KSwgICAtLSBGaWJyZSBDaGFubmVsCiAgICAgICAgICAgICAgICAgICAgaGlwcGlJbnRlcmZhY2UoNTcpLCAtLSBISVBQSSBpbnRlcmZhY2VzICAgICAKLSAgICAgICAgICAgICAgICAgICBmcmFtZVJlbGF5SW50ZXJjb25uZWN0KDU4KSwgLS0gT2Jzb2xldGUgdXNlIGVpdGhlcgorICAgICAgICAgICAgICAgICAgIGZyYW1lUmVsYXlJbnRlcmNvbm5lY3QoNTgpLCAtLSBPYnNvbGV0ZSwgdXNlIGVpdGhlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZnJhbWVSZWxheSgzMikgb3IgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBmcmFtZVJlbGF5U2VydmljZSg0NCkuCiAgICAgICAgICAgICAgICAgICAgYWZsYW5lODAyMyg1OSksICAgICAtLSBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuMwogICAgICAgICAgICAgICAgICAgIGFmbGFuZTgwMjUoNjApLCAgICAgLS0gQVRNIEVtdWxhdGVkIExBTiBmb3IgODAyLjUKICAgICAgICAgICAgICAgICAgICBjY3RFbXVsKDYxKSwgICAgICAgIC0tIEFUTSBFbXVsYXRlZCBjaXJjdWl0ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIGZhc3RFdGhlcig2MiksICAgICAgLS0gT2Jzb2xldGVkIHZpYSBSRkMtZHJhZnQtaWV0Zi1odWJtaWItZXRoZXJpZi1taWItdjMgIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgZmFzdEV0aGVyKDYyKSwgICAgICAtLSBPYnNvbGV0ZWQgdmlhIFJGQzM2MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgaXNkbig2MyksICAgICAgICAgICAtLSBJU0ROIGFuZCBYLjI1ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2MTEoNjQpLCAgICAgICAgICAgIC0tIENDSVRUIFYuMTEvWC4yMSAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2MzYoNjUpLCAgICAgICAgICAgIC0tIENDSVRUIFYuMzYgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBnNzAzYXQ2NGsoNjYpLCAgICAgIC0tIENDSVRUIEc3MDMgYXQgNjRLYnBzCiAgICAgICAgICAgICAgICAgICAgZzcwM2F0Mm1iKDY3KSwgICAgICAtLSBPYnNvbGV0ZSBzZWUgRFMxLU1JQgogICAgICAgICAgICAgICAgICAgIHFsbGMoNjgpLCAgICAgICAgICAgLS0gU05BIFFMTEMgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIGZhc3RFdGhlckZYKDY5KSwgICAgLS0gT2Jzb2xldGVkIHZpYSBSRkMtZHJhZnQtaWV0Zi1odWJtaWItZXRoZXJpZi1taWItdjMgIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgZmFzdEV0aGVyRlgoNjkpLCAgICAtLSBPYnNvbGV0ZWQgdmlhIFJGQzM2MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCg3MCksICAgICAgICAtLSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWVlZTgwMjExKDcxKSwgICAgICAtLSByYWRpbyBzcHJlYWQgc3BlY3RydW0gICAgICAgCi0JICAgICAgICAgICBpYm0zNzBwYXJDaGFuKDcyKSwgIC0tIElCTSBTeXN0ZW0gMzYwLzM3MCBPRU1JIENoYW5uZWwKKyAgICAgICAgICAgICAgICAgICBpYm0zNzBwYXJDaGFuKDcyKSwgIC0tIElCTSBTeXN0ZW0gMzYwLzM3MCBPRU1JIENoYW5uZWwKICAgICAgICAgICAgICAgICAgICBlc2Nvbig3MyksICAgICAgICAgIC0tIElCTSBFbnRlcnByaXNlIFN5c3RlbXMgQ29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgIGRsc3coNzQpLCAgICAgICAgICAgLS0gRGF0YSBMaW5rIFN3aXRjaGluZwogICAgICAgICAgICAgICAgICAgIGlzZG5zKDc1KSwgICAgICAgICAgLS0gSVNETiBTL1QgaW50ZXJmYWNlCkBAIC0zMTMsNjEgKzQyMCw2MiBAQAogICAgICAgICAgICAgICAgICAgIHZvaWNlT3ZlcklwKDEwNCksICAgLS0gdm9pY2Ugb3ZlciBJUCBlbmNhcHN1bGF0aW9uCiAgICAgICAgICAgICAgICAgICAgYXRtRHhpKDEwNSksICAgICAgICAtLSBBVE0gRFhJCiAgICAgICAgICAgICAgICAgICAgYXRtRnVuaSgxMDYpLCAgICAgICAtLSBBVE0gRlVOSQotCQkgICBhdG1JbWEgKDEwNyksICAgICAgIC0tIEFUTSBJTUEJCSAgIAorICAgICAgICAgICAgICAgICAgIGF0bUltYSAoMTA3KSwgICAgICAgLS0gQVRNIElNQQkJICAgCiAgICAgICAgICAgICAgICAgICAgcHBwTXVsdGlsaW5rQnVuZGxlKDEwOCksIC0tIFBQUCBNdWx0aWxpbmsgQnVuZGxlCiAgICAgICAgICAgICAgICAgICAgaXBPdmVyQ2RsYyAoMTA5KSwgICAtLSBJQk0gaXBPdmVyQ2RsYwotCQkgICBpcE92ZXJDbGF3ICgxMTApLCAgIC0tIElCTSBDb21tb24gTGluayBBY2Nlc3MgdG8gV29ya3N0bgorICAgICAgICAgICAgICAgICAgIGlwT3ZlckNsYXcgKDExMCksICAgLS0gSUJNIENvbW1vbiBMaW5rIEFjY2VzcyB0byBXb3Jrc3RuCiAgICAgICAgICAgICAgICAgICAgc3RhY2tUb1N0YWNrICgxMTEpLCAtLSBJQk0gc3RhY2tUb1N0YWNrCiAgICAgICAgICAgICAgICAgICAgdmlydHVhbElwQWRkcmVzcyAoMTEyKSwgLS0gSUJNIFZJUEEKLQkJICAgbXBjICgxMTMpLCAgICAgICAgICAtLSBJQk0gbXVsdGktcHJvdG9jb2wgY2hhbm5lbCBzdXBwb3J0Ci0JCSAgIGlwT3ZlckF0bSAoMTE0KSwgICAgLS0gSUJNIGlwT3ZlckF0bQotCQkgICBpc284ODAyNUZpYmVyICgxMTUpLCAtLSBJU08gODAyLjVqIEZpYmVyIFRva2VuIFJpbmcKLQkJICAgdGRsYyAoMTE2KSwJICAgICAgIC0tIElCTSB0d2luYXhpYWwgZGF0YSBsaW5rIGNvbnRyb2wKLQkJICAgZ2lnYWJpdEV0aGVybmV0ICgxMTcpLCAtLSBPYnNvbGV0ZWQgdmlhIFJGQy1kcmFmdC1pZXRmLWh1Ym1pYi1ldGhlcmlmLW1pYi12MyAgZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKLQkJICAgaGRsYyAoMTE4KSwgICAgICAgICAtLSBIRExDCi0JCSAgIGxhcGYgKDExOSksCSAgICAgICAtLSBMQVAgRgotCQkgICB2MzcgKDEyMCksCSAgICAgICAtLSBWLjM3Ci0JCSAgIHgyNW1scCAoMTIxKSwgICAgICAgLS0gTXVsdGktTGluayBQcm90b2NvbAotCQkgICB4MjVodW50R3JvdXAgKDEyMiksIC0tIFgyNSBIdW50IEdyb3VwCi0JCSAgIHRyYXNucEhkbGMgKDEyMyksICAgLS0gVHJhbnNwIEhETEMKLQkJICAgaW50ZXJsZWF2ZSAoMTI0KSwgICAtLSBJbnRlcmxlYXZlIGNoYW5uZWwKLQkJICAgZmFzdCAoMTI1KSwgICAgICAgICAtLSBGYXN0IGNoYW5uZWwKLQkJICAgaXAgKDEyNiksCSAgICAgICAtLSBJUCAoZm9yIEFQUE4gSFBSIGluIElQIG5ldHdvcmtzKQotCQkgICBkb2NzQ2FibGVNYWNsYXllciAoMTI3KSwgIC0tIENBVFYgTWFjIExheWVyCi0JCSAgIGRvY3NDYWJsZURvd25zdHJlYW0gKDEyOCksIC0tIENBVFYgRG93bnN0cmVhbSBpbnRlcmZhY2UKLQkJICAgZG9jc0NhYmxlVXBzdHJlYW0gKDEyOSksICAtLSBDQVRWIFVwc3RyZWFtIGludGVyZmFjZQotCQkgICBhMTJNcHBTd2l0Y2ggKDEzMCksIC0tIEF2YWxvbiBQYXJhbGxlbCBQcm9jZXNzb3IKLQkJICAgdHVubmVsICgxMzEpLCAgICAgICAtLSBFbmNhcHN1bGF0aW9uIGludGVyZmFjZQotCQkgICBjb2ZmZWUgKDEzMiksICAgICAgIC0tIGNvZmZlZSBwb3QKLQkJICAgY2VzICgxMzMpLCAgICAgICAgICAtLSBDaXJjdWl0IEVtdWxhdGlvbiBTZXJ2aWNlCi0JCSAgIGF0bVN1YkludGVyZmFjZSAoMTM0KSwgLS0gQVRNIFN1YiBJbnRlcmZhY2UKLQkJICAgbDJ2bGFuICgxMzUpLCAgICAgICAtLSBMYXllciAyIFZpcnR1YWwgTEFOIHVzaW5nIDgwMi4xUQotCQkgICBsM2lwdmxhbiAoMTM2KSwgICAgIC0tIExheWVyIDMgVmlydHVhbCBMQU4gdXNpbmcgSVAKLQkJICAgbDNpcHh2bGFuICgxMzcpLCAgICAtLSBMYXllciAzIFZpcnR1YWwgTEFOIHVzaW5nIElQWAotCQkgICBkaWdpdGFsUG93ZXJsaW5lICgxMzgpLCAtLSBJUCBvdmVyIFBvd2VyIExpbmVzCQotCQkgICBtZWRpYU1haWxPdmVySXAgKDEzOSksIC0tIE11bHRpbWVkaWEgTWFpbCBvdmVyIElQCi0JCSAgIGR0bSAoMTQwKSwgICAgICAgIC0tIER5bmFtaWMgc3luY3Jvbm91cyBUcmFuc2ZlciBNb2RlCi0JCSAgIGRjbiAoMTQxKSwgICAgLS0gRGF0YSBDb21tdW5pY2F0aW9ucyBOZXR3b3JrCi0JCSAgIGlwRm9yd2FyZCAoMTQyKSwgICAgLS0gSVAgRm9yd2FyZGluZyBJbnRlcmZhY2UKLQkJICAgbXNkc2wgKDE0MyksICAgICAgIC0tIE11bHRpLXJhdGUgU3ltbWV0cmljIERTTAotCQkgICBpZWVlMTM5NCAoMTQ0KSwgLS0gSUVFRTEzOTQgSGlnaCBQZXJmb3JtYW5jZSBTZXJpYWwgQnVzCi0JCSAgIGlmLWdzbiAoMTQ1KSwgICAgICAgLS0gICBISVBQSS02NDAwIAotCQkgICBkdmJSY2NNYWNMYXllciAoMTQ2KSwgLS0gRFZCLVJDQyBNQUMgTGF5ZXIKLQkJICAgZHZiUmNjRG93bnN0cmVhbSAoMTQ3KSwgIC0tIERWQi1SQ0MgRG93bnN0cmVhbSBDaGFubmVsCi0JCSAgIGR2YlJjY1Vwc3RyZWFtICgxNDgpLCAgLS0gRFZCLVJDQyBVcHN0cmVhbSBDaGFubmVsCi0JCSAgIGF0bVZpcnR1YWwgKDE0OSksICAgLS0gQVRNIFZpcnR1YWwgSW50ZXJmYWNlCi0JCSAgIG1wbHNUdW5uZWwgKDE1MCksICAgLS0gTVBMUyBUdW5uZWwgVmlydHVhbCBJbnRlcmZhY2UKLQkJICAgc3JwICgxNTEpLAktLSBTcGF0aWFsIFJldXNlIFByb3RvY29sCQotCQkgICB2b2ljZU92ZXJBdG0gKDE1MiksICAtLSBWb2ljZSBPdmVyIEFUTQotCQkgICB2b2ljZU92ZXJGcmFtZVJlbGF5ICgxNTMpLCAgIC0tIFZvaWNlIE92ZXIgRnJhbWUgUmVsYXkgCi0JCSAgIGlkc2wgKDE1NCksCQktLSBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCBvdmVyIElTRE4KLQkJICAgY29tcG9zaXRlTGluayAoMTU1KSwgIC0tIEF2aWNpIENvbXBvc2l0ZSBMaW5rIEludGVyZmFjZQotCQkgICBzczdTaWdMaW5rICgxNTYpLCAgICAgLS0gU1M3IFNpZ25hbGluZyBMaW5rIAotCQkgICBwcm9wV2lyZWxlc3NQMlAgKDE1NyksICAtLSAgUHJvcC4gUDJQIHdpcmVsZXNzIGludGVyZmFjZQotCQkgICBmckZvcndhcmQgKDE1OCksICAgIC0tIEZyYW1lIEZvcndhcmQgSW50ZXJmYWNlCi0JCSAgIHJmYzE0ODMgKDE1OSksCS0tIE11bHRpcHJvdG9jb2wgb3ZlciBBVE0gQUFMNQotCQkgICB1c2IgKDE2MCksCQktLSBVU0IgSW50ZXJmYWNlCi0JCSAgIGllZWU4MDIzYWRMYWcgKDE2MSksICAtLSBJRUVFIDgwMi4zYWQgTGluayBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICBtcGMgKDExMyksICAgICAgICAgIC0tIElCTSBtdWx0aS1wcm90b2NvbCBjaGFubmVsIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICBpcE92ZXJBdG0gKDExNCksICAgIC0tIElCTSBpcE92ZXJBdG0KKyAgICAgICAgICAgICAgICAgICBpc284ODAyNUZpYmVyICgxMTUpLCAtLSBJU08gODAyLjVqIEZpYmVyIFRva2VuIFJpbmcKKyAgICAgICAgICAgICAgICAgICB0ZGxjICgxMTYpLAkgICAgICAgLS0gSUJNIHR3aW5heGlhbCBkYXRhIGxpbmsgY29udHJvbAorICAgICAgICAgICAgICAgICAgIGdpZ2FiaXRFdGhlcm5ldCAoMTE3KSwgLS0gT2Jzb2xldGVkIHZpYSBSRkMzNjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgIGhkbGMgKDExOCksICAgICAgICAgLS0gSERMQworICAgICAgICAgICAgICAgICAgIGxhcGYgKDExOSksCSAgICAgICAtLSBMQVAgRgorICAgICAgICAgICAgICAgICAgIHYzNyAoMTIwKSwJICAgICAgIC0tIFYuMzcKKyAgICAgICAgICAgICAgICAgICB4MjVtbHAgKDEyMSksICAgICAgIC0tIE11bHRpLUxpbmsgUHJvdG9jb2wKKyAgICAgICAgICAgICAgICAgICB4MjVodW50R3JvdXAgKDEyMiksIC0tIFgyNSBIdW50IEdyb3VwCisgICAgICAgICAgICAgICAgICAgdHJhbnNwSGRsYyAoMTIzKSwgICAtLSBUcmFuc3AgSERMQworICAgICAgICAgICAgICAgICAgIGludGVybGVhdmUgKDEyNCksICAgLS0gSW50ZXJsZWF2ZSBjaGFubmVsCisgICAgICAgICAgICAgICAgICAgZmFzdCAoMTI1KSwgICAgICAgICAtLSBGYXN0IGNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICBpcCAoMTI2KSwJICAgICAgIC0tIElQIChmb3IgQVBQTiBIUFIgaW4gSVAgbmV0d29ya3MpCisgICAgICAgICAgICAgICAgICAgZG9jc0NhYmxlTWFjbGF5ZXIgKDEyNyksICAtLSBDQVRWIE1hYyBMYXllcgorICAgICAgICAgICAgICAgICAgIGRvY3NDYWJsZURvd25zdHJlYW0gKDEyOCksIC0tIENBVFYgRG93bnN0cmVhbSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBkb2NzQ2FibGVVcHN0cmVhbSAoMTI5KSwgIC0tIENBVFYgVXBzdHJlYW0gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgYTEyTXBwU3dpdGNoICgxMzApLCAtLSBBdmFsb24gUGFyYWxsZWwgUHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgdHVubmVsICgxMzEpLCAgICAgICAtLSBFbmNhcHN1bGF0aW9uIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGNvZmZlZSAoMTMyKSwgICAgICAgLS0gY29mZmVlIHBvdAorICAgICAgICAgICAgICAgICAgIGNlcyAoMTMzKSwgICAgICAgICAgLS0gQ2lyY3VpdCBFbXVsYXRpb24gU2VydmljZQorICAgICAgICAgICAgICAgICAgIGF0bVN1YkludGVyZmFjZSAoMTM0KSwgLS0gQVRNIFN1YiBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBsMnZsYW4gKDEzNSksICAgICAgIC0tIExheWVyIDIgVmlydHVhbCBMQU4gdXNpbmcgODAyLjFRCisgICAgICAgICAgICAgICAgICAgbDNpcHZsYW4gKDEzNiksICAgICAtLSBMYXllciAzIFZpcnR1YWwgTEFOIHVzaW5nIElQCisgICAgICAgICAgICAgICAgICAgbDNpcHh2bGFuICgxMzcpLCAgICAtLSBMYXllciAzIFZpcnR1YWwgTEFOIHVzaW5nIElQWAorICAgICAgICAgICAgICAgICAgIGRpZ2l0YWxQb3dlcmxpbmUgKDEzOCksIC0tIElQIG92ZXIgUG93ZXIgTGluZXMJCisgICAgICAgICAgICAgICAgICAgbWVkaWFNYWlsT3ZlcklwICgxMzkpLCAtLSBNdWx0aW1lZGlhIE1haWwgb3ZlciBJUAorICAgICAgICAgICAgICAgICAgIGR0bSAoMTQwKSwgICAgICAgIC0tIER5bmFtaWMgc3luY3Jvbm91cyBUcmFuc2ZlciBNb2RlCisgICAgICAgICAgICAgICAgICAgZGNuICgxNDEpLCAgICAtLSBEYXRhIENvbW11bmljYXRpb25zIE5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICBpcEZvcndhcmQgKDE0MiksICAgIC0tIElQIEZvcndhcmRpbmcgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgbXNkc2wgKDE0MyksICAgICAgIC0tIE11bHRpLXJhdGUgU3ltbWV0cmljIERTTAorICAgICAgICAgICAgICAgICAgIGllZWUxMzk0ICgxNDQpLCAtLSBJRUVFMTM5NCBIaWdoIFBlcmZvcm1hbmNlIFNlcmlhbCBCdXMKKyAgICAgICAgICAgICAgICAgICBpZi1nc24gKDE0NSksICAgICAgIC0tICAgSElQUEktNjQwMCAKKyAgICAgICAgICAgICAgICAgICBkdmJSY2NNYWNMYXllciAoMTQ2KSwgLS0gRFZCLVJDQyBNQUMgTGF5ZXIKKyAgICAgICAgICAgICAgICAgICBkdmJSY2NEb3duc3RyZWFtICgxNDcpLCAgLS0gRFZCLVJDQyBEb3duc3RyZWFtIENoYW5uZWwKKyAgICAgICAgICAgICAgICAgICBkdmJSY2NVcHN0cmVhbSAoMTQ4KSwgIC0tIERWQi1SQ0MgVXBzdHJlYW0gQ2hhbm5lbAorICAgICAgICAgICAgICAgICAgIGF0bVZpcnR1YWwgKDE0OSksICAgLS0gQVRNIFZpcnR1YWwgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgbXBsc1R1bm5lbCAoMTUwKSwgICAtLSBNUExTIFR1bm5lbCBWaXJ0dWFsIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIHNycCAoMTUxKSwJLS0gU3BhdGlhbCBSZXVzZSBQcm90b2NvbAkKKyAgICAgICAgICAgICAgICAgICB2b2ljZU92ZXJBdG0gKDE1MiksICAtLSBWb2ljZSBPdmVyIEFUTQorICAgICAgICAgICAgICAgICAgIHZvaWNlT3ZlckZyYW1lUmVsYXkgKDE1MyksICAgLS0gVm9pY2UgT3ZlciBGcmFtZSBSZWxheSAKKyAgICAgICAgICAgICAgICAgICBpZHNsICgxNTQpLAkJLS0gRGlnaXRhbCBTdWJzY3JpYmVyIExvb3Agb3ZlciBJU0ROCisgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlTGluayAoMTU1KSwgIC0tIEF2aWNpIENvbXBvc2l0ZSBMaW5rIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIHNzN1NpZ0xpbmsgKDE1NiksICAgICAtLSBTUzcgU2lnbmFsaW5nIExpbmsgCisgICAgICAgICAgICAgICAgICAgcHJvcFdpcmVsZXNzUDJQICgxNTcpLCAgLS0gIFByb3AuIFAyUCB3aXJlbGVzcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBmckZvcndhcmQgKDE1OCksICAgIC0tIEZyYW1lIEZvcndhcmQgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgcmZjMTQ4MyAoMTU5KSwJLS0gTXVsdGlwcm90b2NvbCBvdmVyIEFUTSBBQUw1CisgICAgICAgICAgICAgICAgICAgdXNiICgxNjApLAkJLS0gVVNCIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGllZWU4MDIzYWRMYWcgKDE2MSksICAtLSBJRUVFIDgwMi4zYWQgTGluayBBZ2dyZWdhdGUKICAgICAgICAgICAgICAgICAgICBiZ3Bwb2xpY3lhY2NvdW50aW5nICgxNjIpLCAtLSBCR1AgUG9saWN5IEFjY291bnRpbmcKICAgICAgICAgICAgICAgICAgICBmcmYxNk1mckJ1bmRsZSAoMTYzKSwgLS0gRlJGIC4xNiBNdWx0aWxpbmsgRnJhbWUgUmVsYXkgCiAgICAgICAgICAgICAgICAgICAgaDMyM0dhdGVrZWVwZXIgKDE2NCksIC0tIEgzMjMgR2F0ZWtlZXBlcgpAQCAtMzkxLDYgKzQ5OSw5IEBACiAgICAgICAgICAgICAgICAgICAgcHJvcERvY3NXaXJlbGVzc1Vwc3RyZWFtICgxODIpLCAtLSBDaXNjbyBwcm9wcmlldGFyeSBVcHN0cmVhbQogICAgICAgICAgICAgICAgICAgIGhpcGVybGFuMiAoMTgzKSwgLS0gSElQRVJMQU4gVHlwZSAyIFJhZGlvIEludGVyZmFjZQogICAgICAgICAgICAgICAgICAgIHByb3BCV0FwMk1wICgxODQpLCAtLSBQcm9wQnJvYWRiYW5kV2lyZWxlc3NBY2Nlc3NwdDJtdWx0aXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHVzZSBvZiB0aGlzIGlmdHlwZSBmb3IgSUVFRSA4MDIuMTYgV01BTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBpbnRlcmZhY2VzIGFzIHBlciBJRUVFIFN0ZCA4MDIuMTZmIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGRlcHJlY2F0ZWQgYW5kIGlmVHlwZSAyMzcgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KICAgICAgICAgICAgICAgICAgICBzb25ldE92ZXJoZWFkQ2hhbm5lbCAoMTg1KSwgLS0gU09ORVQgT3ZlcmhlYWQgQ2hhbm5lbAogICAgICAgICAgICAgICAgICAgIGRpZ2l0YWxXcmFwcGVyT3ZlcmhlYWRDaGFubmVsICgxODYpLCAtLSBEaWdpdGFsIFdyYXBwZXIKICAgICAgICAgICAgICAgICAgICBhYWwyICgxODcpLCAtLSBBVE0gYWRhcHRhdGlvbiBsYXllciAyCkBAIC00MTYsNyArNTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICBwb24xNTUgKDIwNyksIC0tIEZTQU4gMTU1TWIgU3ltZXRyaWNhbCBQT04gaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgcG9uNjIyICgyMDgpLCAtLSBGU0FONjIyTWIgU3ltZXRyaWNhbCBQT04gaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgYnJpZGdlICgyMDkpLCAtLSBUcmFuc3BhcmVudCBicmlkZ2UgaW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgICAgbGluZWdyb3VwICgyMTApLCAtLSBJbnRlcmZhY2UgY29tbW9uIHRvIG11bHRpcGxlIGxpbmVzCQkgICAKKyAgICAgICAgICAgICAgICAgICBsaW5lZ3JvdXAgKDIxMCksIC0tIEludGVyZmFjZSBjb21tb24gdG8gbXVsdGlwbGUgbGluZXMgICAKICAgICAgICAgICAgICAgICAgICB2b2ljZUVNRkdEICgyMTEpLCAtLSB2b2ljZSBFJk0gRmVhdHVyZSBHcm91cCBECiAgICAgICAgICAgICAgICAgICAgdm9pY2VGR0RFQU5BICgyMTIpLCAtLSB2b2ljZSBGR0QgRXhjaGFuZ2UgQWNjZXNzIE5vcnRoIEFtZXJpY2FuCiAgICAgICAgICAgICAgICAgICAgdm9pY2VESUQgKDIxMyksIC0tIHZvaWNlIERpcmVjdCBJbndhcmQgRGlhbGluZwpAQCAtNDI2LDcgKzUzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgcGRuRXRoZXJMb29wMSAoMjE3KSwgLS0gUGFyYWR5bmUgRXRoZXJMb29wIDEKICAgICAgICAgICAgICAgICAgICBwZG5FdGhlckxvb3AyICgyMTgpLCAtLSBQYXJhZHluZSBFdGhlckxvb3AgMgogICAgICAgICAgICAgICAgICAgIG9wdGljYWxDaGFubmVsR3JvdXAgKDIxOSksIC0tIE9wdGljYWwgQ2hhbm5lbCBHcm91cAotICAgICAgICAgICAgICAgICAgIGhvbWVwbmEgKDIyMCksIC0tIEhvbWVQTkEgSVRVLVQgRy45ODkJCQkJICAgCisgICAgICAgICAgICAgICAgICAgaG9tZXBuYSAoMjIwKSwgLS0gSG9tZVBOQSBJVFUtVCBHLjk4OQogICAgICAgICAgICAgICAgICAgIGdmcCAoMjIxKSwgLS0gR2VuZXJpYyBGcmFtaW5nIFByb2NlZHVyZSAoR0ZQKQogICAgICAgICAgICAgICAgICAgIGNpc2NvSVNMdmxhbiAoMjIyKSwgLS0gTGF5ZXIgMiBWaXJ0dWFsIExBTiB1c2luZyBDaXNjbyBJU0wKICAgICAgICAgICAgICAgICAgICBhY3RlbGlzTWV0YUxPT1AgKDIyMyksIC0tIEFjdGVsZWlzIHByb3ByaWV0YXJ5IE1ldGFMT09QIEhpZ2ggU3BlZWQgTGluayAKQEAgLTQzNCwxMCArNTQ1LDU3IEBACiAgICAgICAgICAgICAgICAgICAgcnByICgyMjUpLCAtLSBSZXNpbGllbnQgUGFja2V0IFJpbmcgSW50ZXJmYWNlIFR5cGUKICAgICAgICAgICAgICAgICAgICBxYW0gKDIyNiksIC0tIFJGIFFhbSBJbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICBsbXAgKDIyNyksIC0tIExpbmsgTWFuYWdlbWVudCBQcm90b2NvbAotICAgICAgICAgICAgICAgICAgIGNibFZlY3RhU3RhciAoMjI4KSwgLS0gQ2FtYnJpZGdlIEJyb2FkYmFuZCBMaW1pdGVkIFZlY3RhU3RhcgorICAgICAgICAgICAgICAgICAgIGNibFZlY3RhU3RhciAoMjI4KSwgLS0gQ2FtYnJpZGdlIEJyb2FkYmFuZCBOZXR3b3JrcyBMaW1pdGVkIFZlY3RhU3RhcgogICAgICAgICAgICAgICAgICAgIGRvY3NDYWJsZU1DbXRzRG93bnN0cmVhbSAoMjI5KSwgLS0gQ0FUViBNb2R1bGFyIENNVFMgRG93bnN0cmVhbSBJbnRlcmZhY2UKLSAgICAgICAgICAgICAgICAgICBhZHNsMiAoMjMwKSAtLSBBc3ltbWV0cmljIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIFZlcnNpb24gMgotICAgIAkJCSAgIH0KKyAgICAgICAgICAgICAgICAgICBhZHNsMiAoMjMwKSwgLS0gQXN5bW1ldHJpYyBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCBWZXJzaW9uIDIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIChERVBSRUNBVEVEL09CU09MRVRFRCAtIHBsZWFzZSB1c2UgYWRzbDJwbHVzIDIzOCBpbnN0ZWFkKQorICAgICAgICAgICAgICAgICAgIG1hY1NlY0NvbnRyb2xsZWRJRiAoMjMxKSwgLS0gTUFDU2VjQ29udHJvbGxlZCAKKyAgICAgICAgICAgICAgICAgICBtYWNTZWNVbmNvbnRyb2xsZWRJRiAoMjMyKSwgLS0gTUFDU2VjVW5jb250cm9sbGVkCisgICAgICAgICAgICAgICAgICAgYXZpY2lPcHRpY2FsRXRoZXIgKDIzMyksIC0tIEF2aWNpIE9wdGljYWwgRXRoZXJuZXQgQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgYXRtYm9uZCAoMjM0KSwgLS0gYXRtYm9uZAorICAgICAgICAgICAgICAgICAgIHZvaWNlRkdET1MgKDIzNSksIC0tIHZvaWNlIEZHRCBPcGVyYXRvciBTZXJ2aWNlcworICAgICAgICAgICAgICAgICAgIG1vY2FWZXJzaW9uMSAoMjM2KSwgLS0gTXVsdGlNZWRpYSBvdmVyIENvYXggQWxsaWFuY2UgKE1vQ0EpIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhcyBkb2N1bWVudGVkIGluIGluZm9ybWF0aW9uIHByb3ZpZGVkIHByaXZhdGVseSB0byBJQU5BCisgICAgICAgICAgICAgICAgICAgaWVlZTgwMjE2V01BTiAoMjM3KSwgLS0gSUVFRSA4MDIuMTYgV01BTiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBhZHNsMnBsdXMgKDIzOCksIC0tIEFzeW1tZXRyaWMgRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AgVmVyc2lvbiAyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gVmVyc2lvbiAyIFBsdXMgYW5kIGFsbCB2YXJpYW50cworICAgICAgICAgICAgICAgICAgIGR2YlJjc01hY0xheWVyICgyMzkpLCAtLSBEVkItUkNTIE1BQyBMYXllcgorICAgICAgICAgICAgICAgICAgIGR2YlRkbSAoMjQwKSwgLS0gRFZCIFNhdGVsbGl0ZSBURE0KKyAgICAgICAgICAgICAgICAgICBkdmJSY3NUZG1hICgyNDEpLCAtLSBEVkItUkNTIFRETUEKKyAgICAgICAgICAgICAgICAgICB4ODZMYXBzICgyNDIpLCAtLSBMQVBTIGJhc2VkIG9uIElUVS1UIFguODYvWS4xMzIzCisgICAgICAgICAgICAgICAgICAgd3dhblBQICgyNDMpLCAtLSAzR1BQIFdXQU4KKyAgICAgICAgICAgICAgICAgICB3d2FuUFAyICgyNDQpLCAtLSAzR1BQMiBXV0FOCisgICAgICAgICAgICAgICAgICAgdm9pY2VFQlMgKDI0NSksIC0tIHZvaWNlIFAtcGhvbmUgRUJTIHBoeXNpY2FsIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGlmUHdUeXBlICgyNDYpLCAtLSBQc2V1ZG93aXJlIGludGVyZmFjZSB0eXBlCisgICAgICAgICAgICAgICAgICAgaWxhbiAoMjQ3KSwgLS0gSW50ZXJuYWwgTEFOIG9uIGEgYnJpZGdlIHBlciBJRUVFIDgwMi4xYXAKKyAgICAgICAgICAgICAgICAgICBwaXAgKDI0OCksIC0tIFByb3ZpZGVyIEluc3RhbmNlIFBvcnQgb24gYSBicmlkZ2UgcGVyIElFRUUgODAyLjFhaCBQQkIKKyAgICAgICAgICAgICAgICAgICBhbHVFTFAgKDI0OSksIC0tIEFsY2F0ZWwtTHVjZW50IEV0aGVybmV0IExpbmsgUHJvdGVjdGlvbgorICAgICAgICAgICAgICAgICAgIGdwb24gKDI1MCksIC0tIEdpZ2FiaXQtY2FwYWJsZSBwYXNzaXZlIG9wdGljYWwgbmV0d29ya3MgKEctUE9OKSBhcyBwZXIgSVRVLVQgRy45NDgKKyAgICAgICAgICAgICAgICAgICB2ZHNsMiAoMjUxKSwgLS0gVmVyeSBoaWdoIHNwZWVkIGRpZ2l0YWwgc3Vic2NyaWJlciBsaW5lIFZlcnNpb24gMiAoYXMgcGVyIElUVS1UIFJlY29tbWVuZGF0aW9uIEcuOTkzLjIpCisgICAgICAgICAgICAgICAgICAgY2Fwd2FwRG90MTFQcm9maWxlICgyNTIpLCAtLSBXTEFOIFByb2ZpbGUgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgY2Fwd2FwRG90MTFCc3MgKDI1MyksIC0tIFdMQU4gQlNTIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGNhcHdhcFd0cFZpcnR1YWxSYWRpbyAoMjU0KSwgLS0gV1RQIFZpcnR1YWwgUmFkaW8gSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgYml0cyAoMjU1KSwgLS0gYml0c3BvcnQKKyAgICAgICAgICAgICAgICAgICBkb2NzQ2FibGVVcHN0cmVhbVJmUG9ydCAoMjU2KSwgLS0gRE9DU0lTIENBVFYgVXBzdHJlYW0gUkYgUG9ydAorICAgICAgICAgICAgICAgICAgIGNhYmxlRG93bnN0cmVhbVJmUG9ydCAoMjU3KSwgLS0gQ0FUViBkb3duc3RyZWFtIFJGIHBvcnQKKyAgICAgICAgICAgICAgICAgICB2bXdhcmVWaXJ0dWFsTmljICgyNTgpLCAtLSBWTXdhcmUgVmlydHVhbCBOZXR3b3JrIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGllZWU4MDIxNTQgKDI1OSksIC0tIElFRUUgODAyLjE1LjQgV1BBTiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBvdG5PZHUgKDI2MCksIC0tIE9UTiBPcHRpY2FsIERhdGEgVW5pdAorICAgICAgICAgICAgICAgICAgIG90bk90dSAoMjYxKSwgLS0gT1ROIE9wdGljYWwgY2hhbm5lbCBUcmFuc3BvcnQgVW5pdAorICAgICAgICAgICAgICAgICAgIGlmVmZpVHlwZSAoMjYyKSwgLS0gVlBMUyBGb3J3YXJkaW5nIEluc3RhbmNlIEludGVyZmFjZSBUeXBlCisgICAgICAgICAgICAgICAgICAgZzk5ODEgKDI2MyksIC0tIEcuOTk4LjEgYm9uZGVkIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGc5OTgyICgyNjQpLCAtLSBHLjk5OC4yIGJvbmRlZCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBnOTk4MyAoMjY1KSwgLS0gRy45OTguMyBib25kZWQgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgYWx1RXBvbiAoMjY2KSwgLS0gRXRoZXJuZXQgUGFzc2l2ZSBPcHRpY2FsIE5ldHdvcmtzIChFLVBPTikKKyAgICAgICAgICAgICAgICAgICBhbHVFcG9uT251ICgyNjcpLCAtLSBFUE9OIE9wdGljYWwgTmV0d29yayBVbml0CisgICAgICAgICAgICAgICAgICAgYWx1RXBvblBoeXNpY2FsVW5pICgyNjgpLCAtLSBFUE9OIHBoeXNpY2FsIFVzZXIgdG8gTmV0d29yayBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBhbHVFcG9uTG9naWNhbExpbmsgKDI2OSksIC0tIFRoZSBlbXVsYXRpb24gb2YgYSBwb2ludC10by1wb2ludCBsaW5rIG92ZXIgdGhlIEVQT04gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICBhbHVHcG9uT251ICgyNzApLCAtLSBHUE9OIE9wdGljYWwgTmV0d29yayBVbml0CisgICAgICAgICAgICAgICAgICAgYWx1R3BvblBoeXNpY2FsVW5pICgyNzEpLCAtLSBHUE9OIHBoeXNpY2FsIFVzZXIgdG8gTmV0d29yayBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICB2bXdhcmVOaWNUZWFtICgyNzIpLCAtLSBWTXdhcmUgTklDIFRlYW0KKyAgICAgICAgICAgICAgICAgICBkb2NzT2ZkbURvd25zdHJlYW0gKDI3NyksIC0tIENBVFYgRG93bnN0cmVhbSBPRkRNIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGRvY3NPZmRtYVVwc3RyZWFtICgyNzgpIC0tIENBVFYgVXBzdHJlYW0gT0ZETUEgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgfQogCiBJQU5BdHVubmVsVHlwZSA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC00ODEsNyArNjM5LDggQEAKICAgICAgICAgICAgICAgICAgICBzaXhUb0ZvdXIoMTEpLCAgIC0tIDZ0bzQgZW5jYXBzdWxhdGlvbgogICAgICAgICAgICAgICAgICAgIHNpeE92ZXJGb3VyKDEyKSwgLS0gNm92ZXI0IGVuY2Fwc3VsYXRpb24KICAgICAgICAgICAgICAgICAgICBpc2F0YXAoMTMpLCAgICAgIC0tIElTQVRBUCBlbmNhcHN1bGF0aW9uCi0gICAgICAgICAgICAgICAgICAgdGVyZWRvKDE0KSAgICAgICAtLSBUZXJlZG8gZW5jYXBzdWxhdGlvbgorICAgICAgICAgICAgICAgICAgIHRlcmVkbygxNCksICAgICAgLS0gVGVyZWRvIGVuY2Fwc3VsYXRpb24KKyAgICAgICAgICAgICAgICAgICBpcEh0dHBzKDE1KSAgICAgIC0tIElQSFRUUFMKICAgICAgICAgICAgICAgIH0KIAogICAgRU5ECmRpZmYgLS1naXQgYS9taWJzL0lQLUZPUldBUkQtTUlCLnR4dCBiL21pYnMvSVAtRk9SV0FSRC1NSUIudHh0CmluZGV4IDMwOTBmZjcuLjM0N2I1ZTAgMTAwNjQ0Ci0tLSBhL21pYnMvSVAtRk9SV0FSRC1NSUIudHh0CisrKyBiL21pYnMvSVAtRk9SV0FSRC1NSUIudHh0CkBAIC02LDggKzYsNiBAQAogICAgIENvdW50ZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItU01JCiAgICAgUm93U3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1UQwogCi0KLQogICAgIE1PRFVMRS1DT01QTElBTkNFLCBPQkpFQ1QtR1JPVVAgICAgRlJPTSBTTk1QdjItQ09ORgogICAgIEludGVyZmFjZUluZGV4T3JaZXJvICAgICAgICAgICAgICAgRlJPTSBJRi1NSUIKICAgICBpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gSVAtTUlCCkBAIC01Niw5ICs1NCw2IEBACiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVAgRm9yd2FyZGluZyBNSUIgaW4gYQogICAgICAgICAgICAgcmVhZC1vbmx5IG1vZGUuCiAKLQotCi0KICAgICAgICAgICAgIFRoZSBpbmV0Q2lkclJvdXRlVGFibGUgcmVwbGFjZXMgdGhlIElQdjQtc3BlY2lmaWMKICAgICAgICAgICAgIGlwQ2lkclJvdXRlVGFibGUsIGl0cyByZWxhdGVkIG9iamVjdHMsIGFuZCByZWxhdGVkCiAgICAgICAgICAgICBjb25mb3JtYW5jZSBzdGF0ZW1lbnRzLgpAQCAtMTA3LDkgKzEwMiw2IEBACiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGlzIGVudGl0eSdzIElQIFJvdXRpbmcgdGFibGUuIgogICAgIFJFRkVSRU5DRQogICAgICAgICAgICAiUkZDIDEyMTMgU2VjdGlvbiA2LjYsIFRoZSBJUCBHcm91cCIKQEAgLTE1OCw5ICsxNTAsNiBAQAogICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljMSAgICAgIEludGVnZXIzMiwKICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzIgICAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWMzICAgICAgSW50ZWdlcjMyLAotCi0KLQogICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljNCAgICAgIEludGVnZXIzMiwKICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzUgICAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGluZXRDaWRyUm91dGVTdGF0dXMgICAgICAgUm93U3RhdHVzCkBAIC0xOTgsNyArMTg3LDYgQEAKICAgICAgICAgICAgIGVxdWFsIHRvIHguICBJZiBub3QsIHRoZW4gdGhlIGluZGV4IHBhaXIgaXMgbm90CiAgICAgICAgICAgICBjb25zaXN0ZW50IGFuZCBhbiBpbmNvbnNpc3RlbnROYW1lIGVycm9yIG11c3QgYmUKICAgICAgICAgICAgIHJldHVybmVkIG9uIFNFVCBvciBDUkVBVEUgcmVxdWVzdHMuIgotCiAgICAgOjo9IHsgaW5ldENpZHJSb3V0ZUVudHJ5IDIgfQogCiBpbmV0Q2lkclJvdXRlUGZ4TGVuIE9CSkVDVC1UWVBFCkBAIC0yMTAsOCArMTk4LDYgQEAKICAgICAgICAgICAgIG1hc2sgdG8gYmUgbG9naWNhbC1BTkRlZCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCiAgICAgICAgICAgICBiZWZvcmUgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHZhbHVlIGluIHRoZQogCi0KLQogICAgICAgICAgICAgaW5ldENpZHJSb3V0ZURlc3QgZmllbGQuCiAKICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZm9yIHRoZSBpbmRleCBvYmplY3RzIGluZXRDaWRyUm91dGVEZXN0IGFuZApAQCAtMjIzLDcgKzIwOSw2IEBACiAgICAgICAgICAgICBlcXVhbCB0byB4LiAgSWYgbm90LCB0aGVuIHRoZSBpbmRleCBwYWlyIGlzIG5vdAogICAgICAgICAgICAgY29uc2lzdGVudCBhbmQgYW4gaW5jb25zaXN0ZW50TmFtZSBlcnJvciBtdXN0IGJlCiAgICAgICAgICAgICByZXR1cm5lZCBvbiBTRVQgb3IgQ1JFQVRFIHJlcXVlc3RzLiIKLQogICAgIDo6PSB7IGluZXRDaWRyUm91dGVFbnRyeSAzIH0KIAogaW5ldENpZHJSb3V0ZVBvbGljeSBPQkpFQ1QtVFlQRQpAQCAtMjYxLDggKzI0Niw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIk9uIHJlbW90ZSByb3V0ZXMsIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IHN5c3RlbSBlbgogCi0KLQogICAgICAgICAgICAgcm91dGUuICBGb3Igbm9uLXJlbW90ZSByb3V0ZXMsIGEgemVybyBsZW5ndGggc3RyaW5nLgogCiAgICAgICAgICAgICBUaGUgdHlwZSBvZiB0aGlzIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2YKQEAgLTMxMiw5ICsyOTUsNiBAQAogICAgICAgICAgICAgZGlzY2FyZHMgdGhlIG1lc3NhZ2Ugc2lsZW50bHkuIgogICAgIDo6PSB7IGluZXRDaWRyUm91dGVFbnRyeSA4IH0KIAotCi0KLQogaW5ldENpZHJSb3V0ZVByb3RvIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJQU5BaXBSb3V0ZVByb3RvY29sCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTM2Miw5ICszNDIsNiBAQAogICAgICAgICAgICAgdmFsdWUuICBJZiB0aGlzIG1ldHJpYyBpcyBub3QgdXNlZCwgaXRzIHZhbHVlIHNob3VsZCBiZQogICAgICAgICAgICAgc2V0IHRvIC0xLiIKICAgICBERUZWQUwgeyAtMSB9Ci0KLQotCiAgICAgOjo9IHsgaW5ldENpZHJSb3V0ZUVudHJ5IDEyIH0KIAogaW5ldENpZHJSb3V0ZU1ldHJpYzIgT0JKRUNULVRZUEUKQEAgLTQxNCw4ICszOTEsNiBAQAogICAgICAgICAgICAiQW4gYWx0ZXJuYXRlIHJvdXRpbmcgbWV0cmljIGZvciB0aGlzIHJvdXRlLiAgVGhlCiAgICAgICAgICAgICBzZW1hbnRpY3Mgb2YgdGhpcyBtZXRyaWMgYXJlIGRldGVybWluZWQgYnkgdGhlIHJvdXRpbmctCiAKLQotCiAgICAgICAgICAgICBwcm90b2NvbCBzcGVjaWZpZWQgaW4gdGhlIHJvdXRlJ3MgaW5ldENpZHJSb3V0ZVByb3RvCiAgICAgICAgICAgICB2YWx1ZS4gIElmIHRoaXMgbWV0cmljIGlzIG5vdCB1c2VkLCBpdHMgdmFsdWUgc2hvdWxkIGJlCiAgICAgICAgICAgICBzZXQgdG8gLTEuIgpAQCAtNDY1LDggKzQ0MCw2IEBACiAgICAgICAgICAgICAtLSAgICAgVGhpcyBNSUIgcmVxdWlyZXMgc3VwcG9ydCBmb3IgZ2xvYmFsIGFuZAogICAgICAgICAgICAgLS0gICAgIG5vbi1nbG9iYWwgaXB2NCBhbmQgaXB2NiBhZGRyZXNzZXMuCiAKLQotCiAgICAgICAgICAgICAtLQogICAgICAgICAgICAgLS0gT0JKRUNUICAgICAgaW5ldENpZHJSb3V0ZURlc3QKICAgICAgICAgICAgIC0tIFNZTlRBWCAgICAgIEluZXRBZGRyZXNzIChTSVpFICg0IHwgOCB8IDE2IHwgMjApKQpAQCAtNDk3LDcgKzQ3MCw2IEBACiAgICBXUklURS1TWU5UQVggIFJvd1N0YXR1cyB7IGFjdGl2ZSgxKSwgbm90SW5TZXJ2aWNlICgyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQW5kR28oNCksIGRlc3Ryb3koNikgfQogICAgREVTQ1JJUFRJT04gICJTdXBwb3J0IGZvciBjcmVhdGVBbmRXYWl0IGlzIG5vdCByZXF1aXJlZC4iCi0KICAgIDo6PSB7IGlwRm9yd2FyZENvbXBsaWFuY2VzIDMgfQogCiBpcEZvcndhcmRSZWFkT25seUNvbXBsaWFuY2UgTU9EVUxFLUNPTVBMSUFOQ0UKQEAgLTUxNSw5ICs0ODcsNiBAQAogICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuIgogCiAgICBPQkpFQ1QgICAgICBpbmV0Q2lkclJvdXRlVHlwZQotCi0KLQogICAgTUlOLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICBERVNDUklQVElPTgogICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuIgpAQCAtNTU3LDcgKzUyNiw2IEBACiAgICBNSU4tQUNDRVNTICByZWFkLW9ubHkKICAgIERFU0NSSVBUSU9OCiAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4iCi0KICAgIDo6PSB7IGlwRm9yd2FyZENvbXBsaWFuY2VzIDQgfQogCiAtLSB1bml0cyBvZiBjb25mb3JtYW5jZQpAQCAtNTY2LDkgKzUzNCw2IEBACiAgICAgT0JKRUNUUyB7IGluZXRDaWRyUm91dGVEaXNjYXJkcywKICAgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZUlmSW5kZXgsIGluZXRDaWRyUm91dGVUeXBlLAogICAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlUHJvdG8sIGluZXRDaWRyUm91dGVBZ2UsCi0KLQotCiAgICAgICAgICAgICAgIGluZXRDaWRyUm91dGVOZXh0SG9wQVMsIGluZXRDaWRyUm91dGVNZXRyaWMxLAogICAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljMiwgaW5ldENpZHJSb3V0ZU1ldHJpYzMsCiAgICAgICAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWM0LCBpbmV0Q2lkclJvdXRlTWV0cmljNSwKQEAgLTYxOCw4ICs1ODMsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBIHBhcnRpY3VsYXIgcm91dGUgdG8gYSBwYXJ0aWN1bGFyIGRlc3RpbmF0aW9uLCB1bmRlciBhCiAKLQotCiAgICAgICAgICAgICBwYXJ0aWN1bGFyIHBvbGljeS4iCiAgICAgSU5ERVggewogICAgICAgICBpcENpZHJSb3V0ZURlc3QsCkBAIC02NjgsOSArNjMxLDYgQEAKIGlwQ2lkclJvdXRlTWFzayBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSXBBZGRyZXNzCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKLQotCi0KICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiSW5kaWNhdGUgdGhlIG1hc2sgdG8gYmUgbG9naWNhbC1BTkRlZCB3aXRoIHRoZQpAQCAtNzIwLDggKzY4MCw2IEBACiAgICAgICAgICAgICAgICAxIDAgMCAwICA9PT4gIDE2ICAgICAgMSAwIDAgMSAgPT0+ICAxOAogICAgICAgICAgICAgICAgMSAwIDEgMCAgPT0+ICAyMCAgICAgIDEgMCAxIDEgID09PiAgMjIKIAotCi0KICAgICAgICAgICAgICAgIDEgMSAwIDAgID09PiAgMjQgICAgICAxIDEgMCAxICA9PT4gIDI2CiAgICAgICAgICAgICAgICAxIDEgMSAwICA9PT4gIDI4ICAgICAgMSAxIDEgMSAgPT0+ICAzMCIKICAgICA6Oj0geyBpcENpZHJSb3V0ZUVudHJ5IDMgfQpAQCAtNzcxLDkgKzcyOSw2IEBACiAgICAgICAgICAgICByb3V0ZXMuIgogICAgIDo6PSB7IGlwQ2lkclJvdXRlRW50cnkgNiB9CiAKLQotCi0KIGlwQ2lkclJvdXRlUHJvdG8gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElOVEVHRVIgewogICAgICAgICAgICAgICAgIG90aGVyICAgICAoMSksICAtLSBub3Qgc3BlY2lmaWVkCkBAIC04MjEsOSArNzc2LDYgQEAKIGlwQ2lkclJvdXRlSW5mbyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCi0KLQotCiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkEgcmVmZXJlbmNlIHRvIE1JQiBkZWZpbml0aW9ucyBzcGVjaWZpYyB0byB0aGUKQEAgLTg3Myw4ICs4MjUsNiBAQAogICAgICAgICAgICAgcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSByb3V0ZSdzIGlwQ2lkclJvdXRlUHJvdG8KICAgICAgICAgICAgIHZhbHVlLiAgSWYgdGhpcyBtZXRyaWMgaXMgbm90IHVzZWQsIGl0cyB2YWx1ZSBzaG91bGQgYmUKIAotCi0KICAgICAgICAgICAgIHNldCB0byAtMS4iCiAgICAgREVGVkFMIHsgLTEgfQogICAgIDo6PSB7IGlwQ2lkclJvdXRlRW50cnkgMTIgfQpAQCAtOTIzLDkgKzg3Myw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgcm93IHN0YXR1cyB2YXJpYWJsZSwgdXNlZCBhY2NvcmRpbmcgdG8gcm93CiAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYW5kIHJlbW92YWwgY29udmVudGlvbnMuIgogICAgIDo6PSB7IGlwQ2lkclJvdXRlRW50cnkgMTYgfQpAQCAtOTQ0LDcgKzg5MSw2IEBACiAKICAgIE1PRFVMRSAgLS0gdGhpcyBtb2R1bGUKICAgIE1BTkRBVE9SWS1HUk9VUFMgeyBpcEZvcndhcmRDaWRyUm91dGVHcm91cCB9Ci0KICAgIDo6PSB7IGlwRm9yd2FyZENvbXBsaWFuY2VzIDEgfQogCiAtLSB1bml0cyBvZiBjb25mb3JtYW5jZQpAQCAtOTc0LDkgKzkyMCw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIG9ic29sZXRlCiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSBudW1iZXIgb2YgY3VycmVudCBpcEZvcndhcmRUYWJsZSBlbnRyaWVzIHRoYXQgYXJlCiAgICAgICAgICAgICBub3QgaW52YWxpZC4iCiAgICAgOjo9IHsgaXBGb3J3YXJkIDEgfQpAQCAtMTAyNSw5ICs5NjgsNiBAQAogICAgICAgICBpcEZvcndhcmRJbmZvICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAogICAgICAgICBpcEZvcndhcmROZXh0SG9wQVMgIEludGVnZXIzMiwKICAgICAgICAgaXBGb3J3YXJkTWV0cmljMSAgICBJbnRlZ2VyMzIsCi0KLQotCiAgICAgICAgIGlwRm9yd2FyZE1ldHJpYzIgICAgSW50ZWdlcjMyLAogICAgICAgICBpcEZvcndhcmRNZXRyaWMzICAgIEludGVnZXIzMiwKICAgICAgICAgaXBGb3J3YXJkTWV0cmljNCAgICBJbnRlZ2VyMzIsCkBAIC0xMDc3LDggKzEwMTcsNiBAQAogLS0gYW5kIHRoZSBSb3V0ZXIgUmVxdWlyZW1lbnRzIGRvY3VtZW50cyBkaXNhZ3JlZSBvbiB0aGUgd2lkdGgKIC0tIG9mIHRoZSBUT1MgZmllbGQuICBUaGlzIG1hcHBpbmcgZGVzY3JpYmVzIHRoZSBSb3V0ZXIKIAotCi0KIC0tIFJlcXVpcmVtZW50cyBtYXBwaW5nLCBhbmQgbGVhdmVzIHJvb20gdG8gd2lkZW4gdGhlIFRPUyBmaWVsZAogLS0gd2l0aG91dCBpbXBhY3QgdG8gZmllbGRlZCBzeXN0ZW1zLgogCkBAIC0xMTA1LDggKzEwNDMsNiBAQAogICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAogICAgICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKwogCi0KLQogICAgICAgICAgICAgICAgICAgICAgICAgIElQIFRPUyAgICAgICAgICAgICAgICBJUCBUT1MKICAgICAgICAgICAgICAgIEZpZWxkICAgICBQb2xpY3kgICAgICBGaWVsZCAgICAgUG9saWN5CiAgICAgICAgICAgICAgICBDb250ZW50cyAgICBDb2RlICAgICAgQ29udGVudHMgICAgQ29kZQpAQCAtMTEyNyw5ICsxMDYzLDYgQEAKICAgICA6Oj0geyBpcEZvcndhcmRFbnRyeSAzIH0KIAogaXBGb3J3YXJkTmV4dEhvcCBPQkpFQ1QtVFlQRQotCi0KLQogICAgIFNZTlRBWCAgICAgSXBBZGRyZXNzCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIG9ic29sZXRlCkBAIC0xMTc5LDkgKzExMTIsNiBAQAogICAgIERFRlZBTCB7IGludmFsaWQgfQogICAgIDo6PSB7IGlwRm9yd2FyZEVudHJ5IDYgfQogCi0KLQotCiBpcEZvcndhcmRQcm90byBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSU5URUdFUiB7CiAgICAgICAgICAgICAgICAgb3RoZXIgICAgICgxKSwgIC0tIG5vdCBzcGVjaWZpZWQKQEAgLTEyMjksOSArMTE1OSw2IEBACiAgICAgU1lOVEFYICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgIG9ic29sZXRlCi0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkEgcmVmZXJlbmNlIHRvIE1JQiBkZWZpbml0aW9ucyBzcGVjaWZpYyB0byB0aGUKICAgICAgICAgICAgIHBhcnRpY3VsYXIgcm91dGluZyBwcm90b2NvbCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvcgpAQCAtMTI4MSw5ICsxMjA4LDYgQEAKICAgICBERUZWQUwgeyAtMSB9CiAgICAgOjo9IHsgaXBGb3J3YXJkRW50cnkgMTIgfQogCi0KLQotCiBpcEZvcndhcmRNZXRyaWMzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJbnRlZ2VyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCkBAIC0xMzMyLDEyICsxMjU2LDggQEAKICAgICAgICAgICAgIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgU05NUCBlbnRpdGllcyB0aGF0CiAgICAgICAgICAgICBpbXBsZW1lbnQgdGhlIGlwRm9yd2FyZCBNSUIuIgogCi0KLQotCiAgICBNT0RVTEUgIC0tIHRoaXMgbW9kdWxlCiAgICBNQU5EQVRPUlktR1JPVVBTIHsgaXBGb3J3YXJkTXVsdGlQYXRoR3JvdXAgfQotCiAgICA6Oj0geyBpcEZvcndhcmRDb21wbGlhbmNlcyAyIH0KIAogaXBGb3J3YXJkTXVsdGlQYXRoR3JvdXAgT0JKRUNULUdST1VQCmRpZmYgLS1naXQgYS9taWJzL0lQLU1JQi50eHQgYi9taWJzL0lQLU1JQi50eHQKaW5kZXggMGE5MzUwMS4uZmUyZGI1ZiAxMDA2NDQKLS0tIGEvbWlicy9JUC1NSUIudHh0CisrKyBiL21pYnMvSVAtTUlCLnR4dApAQCAtMjEsOCArMjEsNiBAQAogICAgIENPTlRBQ1QtSU5GTwogICAgICAgICAgICAiRWRpdG9yOgogCi0KLQogICAgICAgICAgICAgU2hhd24gQS4gUm91dGhpZXIKICAgICAgICAgICAgIEludGVyd29ya2luZyBMYWJzCiAgICAgICAgICAgICAxMDggV2hpc3BlcmluZyBQaW5lcyBEci4gU3VpdGUgMjM1CkBAIC03Miw4ICs3MCw2IEBACiAKICAgICAgICAgICAgIGxpbmtsYXllcig1KSBpbmRpY2F0ZXMgYW4gYWRkcmVzcyBjcmVhdGVkIGJ5IElQdjYgc3RhdGVsZXNzCiAKLQotCiAgICAgICAgICAgICBhdXRvLWNvbmZpZ3VyYXRpb24uCiAKICAgICAgICAgICAgIHJhbmRvbSg2KSBpbmRpY2F0ZXMgYW4gYWRkcmVzcyBjaG9zZW4gYnkgdGhlIHN5c3RlbSBhdApAQCAtMTIzLDggKzExOSw2IEBACiAgICAgICAgICAgICBUaGUgZHVwbGljYXRlKDcpIHN0YXRlIGluZGljYXRlcyB0aGUgYWRkcmVzcyBoYXMgYmVlbgogICAgICAgICAgICAgZGV0ZXJtaW5lZCB0byBiZSBub24tdW5pcXVlIG9uIHRoZSBsaW5rIGFuZCBzbyBtdXN0IG5vdCBiZQogCi0KLQogICAgICAgICAgICAgdXNlZC4KIAogICAgICAgICAgICAgVGhlIG9wdGltaXN0aWMoOCkgc3RhdGUgaW5kaWNhdGVzIHRoZSBhZGRyZXNzIGlzIGF2YWlsYWJsZQpAQCAtMTczLDkgKzE2Nyw2IEBACiAgICAgICAgIG1hbnVhbCgyKSwKICAgICAgICAgd2VsbGtub3duKDMpLAogICAgICAgICBkaGNwKDQpLAotCi0KLQogICAgICAgICByb3V0ZXJhZHYoNSkKICAgICB9CiAKQEAgLTIyNSw4ICsyMTYsNiBAQAogICAgICAgICAgICAgdGhlIElQdjQgaGVhZGVyIG9mIGRhdGFncmFtcyBvcmlnaW5hdGVkIGF0IHRoaXMgZW50aXR5LAogICAgICAgICAgICAgd2hlbmV2ZXIgYSBUVEwgdmFsdWUgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSB0cmFuc3BvcnQgbGF5ZXIKIAotCi0KICAgICAgICAgICAgIHByb3RvY29sLgogCiAgICAgICAgICAgICBXaGVuIHRoaXMgb2JqZWN0IGlzIHdyaXR0ZW4sIHRoZSBlbnRpdHkgc2hvdWxkIHNhdmUgdGhlCkBAIC0yNzUsOSArMjY0LDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtd3JpdGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIGRlZmF1bHQgdmFsdWUgaW5zZXJ0ZWQgaW50byB0aGUgSG9wIExpbWl0IGZpZWxkIG9mIHRoZQogICAgICAgICAgICAgSVB2NiBoZWFkZXIgb2YgZGF0YWdyYW1zIG9yaWdpbmF0ZWQgYXQgdGhpcyBlbnRpdHkgd2hlbmV2ZXIKICAgICAgICAgICAgIGEgSG9wIExpbWl0IHZhbHVlIGlzIG5vdCBzdXBwbGllZCBieSB0aGUgdHJhbnNwb3J0IGxheWVyCkBAIC0zMjYsOSArMzEyLDYgQEAKICAgICAgICAgICAgIkFuIGVudHJ5IGNvbnRhaW5pbmcgSVB2NC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYwogICAgICAgICAgICAgaW50ZXJmYWNlLiIKICAgICBJTkRFWCB7IGlwdjRJbnRlcmZhY2VJZkluZGV4IH0KLQotCi0KICAgICA6Oj0geyBpcHY0SW50ZXJmYWNlVGFibGUgMSB9CiAKIElwdjRJbnRlcmZhY2VFbnRyeSA6Oj0gU0VRVUVOQ0UgewpAQCAtMzc3LDkgKzM2MCw2IEBACiBpcHY0SW50ZXJmYWNlUmV0cmFuc21pdFRpbWUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIFVuc2lnbmVkMzIKICAgICBVTklUUyAgICAgICJtaWxsaXNlY29uZHMiCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtNDI4LDkgKzQwOCw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkFuIGVudHJ5IGNvbnRhaW5pbmcgSVB2Ni1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgogICAgICAgICAgICAgaW50ZXJmYWNlLiIKLQotCi0KICAgICBJTkRFWCB7IGlwdjZJbnRlcmZhY2VJZkluZGV4IH0KICAgICA6Oj0geyBpcHY2SW50ZXJmYWNlVGFibGUgMSB9CiAKQEAgLTQ3OSw5ICs0NTYsNiBAQAogICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGluayB0eXBlIHRvIHdoaWNoIHRoaXMKICAgICAgICAgICAgIGludGVyZmFjZSBpcyBhdHRhY2hlZC4KIAotCi0KLQogICAgICAgICAgICAgQSB6ZXJvIGxlbmd0aCBpZGVudGlmaWVyIG1heSBiZSB1c2VkIHdoZXJlIGFwcHJvcHJpYXRlLiAgT25lCiAgICAgICAgICAgICBwb3NzaWJsZSBleGFtcGxlIGlzIGEgbG9vcGJhY2sgaW50ZXJmYWNlLiIKICAgICA6Oj0geyBpcHY2SW50ZXJmYWNlRW50cnkgMyB9CkBAIC01MzAsOSArNTA0LDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgdGltZSBiZXR3ZWVuIHJldHJhbnNtaXNzaW9ucyBvZiBOZWlnaGJvciBTb2xpY2l0YXRpb24KICAgICAgICAgICAgIG1lc3NhZ2VzIHRvIGEgbmVpZ2hib3Igd2hlbiByZXNvbHZpbmcgdGhlIGFkZHJlc3Mgb3Igd2hlbgogICAgICAgICAgICAgcHJvYmluZyB0aGUgcmVhY2hhYmlsaXR5IG9mIGEgbmVpZ2hib3IuIgpAQCAtNTgyLDggKzU1Myw2IEBACiAtLQogLS0gTm90ZSB3ZWxsOiBCb3RoIG9mIHRoZXNlIHRhYmxlcyBjb250YWluIHNvbWUgaXRlbXMgdGhhdCBhcmUKIAotCi0KIC0tIHJlcHJlc2VudGVkIGJ5IHR3byBvYmplY3RzLCByZXByZXNlbnRpbmcgdGhlIHZhbHVlIGluIGVpdGhlciAzMgogLS0gb3IgNjQgYml0cy4gIEZvciB0aG9zZSBvYmplY3RzLCB0aGUgMzItYml0IHZhbHVlIE1VU1QgYmUgdGhlIGxvdwogLS0gb3JkZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHZhbHVlLiAgQWxzbyBub3RlIHRoYXQgdGhlIDMyLWJpdApAQCAtNjMyLDkgKzYwMSw2IEBACiAgICAgICAgIGlwU3lzdGVtU3RhdHNSZWFzbUZhaWxzICAgICAgICAgIENvdW50ZXIzMiwKICAgICAgICAgaXBTeXN0ZW1TdGF0c0luRGlzY2FyZHMgICAgICAgICAgQ291bnRlcjMyLAogICAgICAgICBpcFN5c3RlbVN0YXRzSW5EZWxpdmVycyAgICAgICAgICBDb3VudGVyMzIsCi0KLQotCiAgICAgICAgIGlwU3lzdGVtU3RhdHNIQ0luRGVsaXZlcnMgICAgICAgIENvdW50ZXI2NCwKICAgICAgICAgaXBTeXN0ZW1TdGF0c091dFJlcXVlc3RzICAgICAgICAgQ291bnRlcjMyLAogICAgICAgICBpcFN5c3RlbVN0YXRzSENPdXRSZXF1ZXN0cyAgICAgICBDb3VudGVyNjQsCkBAIC02ODMsOSArNjQ5LDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyByZWNlaXZlZCwgaW5jbHVkaW5nCiAgICAgICAgICAgICB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4KIApAQCAtNzM1LDggKzY5OCw2IEBACiAgICAgICAgICAgICBpbmNsdWRpbmcgdGhvc2UgcmVjZWl2ZWQgaW4gZXJyb3IuICBUaGlzIG9iamVjdCBjb3VudHMgdGhlCiAgICAgICAgICAgICBzYW1lIG9jdGV0cyBhcyBpcFN5c3RlbVN0YXRzSW5PY3RldHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlcgogCi0KLQogICAgICAgICAgICAgdmFsdWVzLgogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKQEAgLTc4Niw4ICs3NDcsNiBAQAogICAgICAgICAgICAgaW5jbHVkZXMgaW52YWxpZCBhZGRyZXNzZXMgKGUuZy4sIDo6MCkuICBGb3IgZW50aXRpZXMKICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBJUCByb3V0ZXJzIGFuZCB0aGVyZWZvcmUgZG8gbm90IGZvcndhcmQKIAotCi0KICAgICAgICAgICAgIGRhdGFncmFtcywgdGhpcyBjb3VudGVyIGluY2x1ZGVzIGRhdGFncmFtcyBkaXNjYXJkZWQKICAgICAgICAgICAgIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2FzIG5vdCBhIGxvY2FsIGFkZHJlc3MuCiAKQEAgLTgzNiw5ICs3OTUsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSBudW1iZXIgb2YgaW5wdXQgZGF0YWdyYW1zIGZvciB3aGljaCB0aGlzIGVudGl0eSB3YXMgbm90CiAgICAgICAgICAgICB0aGVpciBmaW5hbCBJUCBkZXN0aW5hdGlvbiBhbmQgZm9yIHdoaWNoIHRoaXMgZW50aXR5CiAgICAgICAgICAgICBhdHRlbXB0ZWQgdG8gZmluZCBhIHJvdXRlIHRvIGZvcndhcmQgdGhlbSB0byB0aGF0IGZpbmFsCkBAIC04ODgsOCArODQ0LDYgQEAKIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CiAKLQotCiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKQEAgLTkzOCw5ICs4OTIsNiBAQAogCiBpcFN5c3RlbVN0YXRzSW5EaXNjYXJkcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtOTg5LDkgKzk0MCw2IEBACiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKLQotCi0KICAgICA6Oj0geyBpcFN5c3RlbVN0YXRzRW50cnkgMTkgfQogCiBpcFN5c3RlbVN0YXRzT3V0UmVxdWVzdHMgT0JKRUNULVRZUEUKQEAgLTEwNDEsOCArOTg5LDYgQEAKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBTeXN0ZW1TdGF0c0VudHJ5IDIyIH0KIAotCi0KIGlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtMTA5Miw4ICsxMDM4LDYgQEAKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLCBidXQgd2VyZSBkaXNjYXJkZWQgKGUuZy4sIGZvciBsYWNrIG9mCiAgICAgICAgICAgICBidWZmZXIgc3BhY2UpLiAgTm90ZSB0aGF0IHRoaXMgY291bnRlciB3b3VsZCBpbmNsdWRlCiAKLQotCiAgICAgICAgICAgICBkYXRhZ3JhbXMgY291bnRlZCBpbiBpcFN5c3RlbVN0YXRzT3V0Rm9yd0RhdGFncmFtcyBpZiBhbnkKICAgICAgICAgICAgIHN1Y2ggZGF0YWdyYW1zIG1ldCB0aGlzIChkaXNjcmV0aW9uYXJ5KSBkaXNjYXJkIGNyaXRlcmlvbi4KIApAQCAtMTE0Miw5ICsxMDg2LDYgQEAKIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5Ci0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIHRoYXQgaGF2ZSBiZWVuIGRpc2NhcmRlZCBiZWNhdXNlCkBAIC0xMTk0LDggKzExMzUsNiBAQAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogCi0KLQogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcFN5c3RlbVN0YXRzRW50cnkgMzAgfQpAQCAtMTI0NSw4ICsxMTg0LDYgQEAKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAKLQotCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwU3lzdGVtU3RhdHNFbnRyeSAzMyB9CiAKQEAgLTEyOTUsOSArMTIzMiw2IEBACiAKIGlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXI2NAotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTEzNDcsOCArMTI4MSw2IEBACiAgICAgICAgICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCBpbiBJUCBtdWx0aWNhc3QKICAgICAgICAgICAgIGRhdGFncmFtcy4gIE9jdGV0cyBmcm9tIGRhdGFncmFtcyBjb3VudGVkIGluCiAKLQotCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzT3V0TWNhc3RQa3RzIE1VU1QgYmUgY291bnRlZCBoZXJlLgogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKQEAgLTEzOTgsOCArMTMzMCw2IEBACiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogCi0KLQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcFN5c3RlbVN0YXRzRW50cnkgNDMgfQogCkBAIC0xNDQ4LDkgKzEzNzgsNiBAQAogaXBTeXN0ZW1TdGF0c1JlZnJlc2hSYXRlIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBVbnNpZ25lZDMyCiAgICAgVU5JVFMgICAgICAibWlsbGktc2Vjb25kcyIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0xNDk5LDkgKzE0MjYsNiBAQAogSXBJZlN0YXRzRW50cnkgOjo9IFNFUVVFTkNFIHsKICAgICAgICAgaXBJZlN0YXRzSVBWZXJzaW9uICAgICAgICAgICBJbmV0VmVyc2lvbiwKICAgICAgICAgaXBJZlN0YXRzSWZJbmRleCAgICAgICAgICAgICBJbnRlcmZhY2VJbmRleCwKLQotCi0KICAgICAgICAgaXBJZlN0YXRzSW5SZWNlaXZlcyAgICAgICAgICBDb3VudGVyMzIsCiAgICAgICAgIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyAgICAgICAgQ291bnRlcjY0LAogICAgICAgICBpcElmU3RhdHNJbk9jdGV0cyAgICAgICAgICAgIENvdW50ZXIzMiwKQEAgLTE1NTAsOSArMTQ3NCw2IEBACiAKIGlwSWZTdGF0c0lQVmVyc2lvbiBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSW5ldFZlcnNpb24KLQotCi0KICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTE2MDEsOSArMTUyMiw2IEBACiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgNCB9CiAKIGlwSWZTdGF0c0luT2N0ZXRzIE9CSkVDVC1UWVBFCi0KLQotCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtMTY1Miw5ICsxNTcwLDYgQEAKIAogaXBJZlN0YXRzSW5Ob1JvdXRlcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMTcwNCw4ICsxNjE5LDYgQEAKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAKLQotCiAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgMTAgfQogCkBAIC0xNzU1LDggKzE2NjgsNiBAQAogICAgICAgICAgICAgYXR0ZW1wdGVkIHRvIGZpbmQgYSByb3V0ZSB0byBmb3J3YXJkIHRoZW0gdG8gdGhhdCBmaW5hbAogICAgICAgICAgICAgZGVzdGluYXRpb24uICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgcGFja2V0cyBhcwogCi0KLQogICAgICAgICAgICAgaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zLCBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKQEAgLTE4MDUsOSArMTcxNiw2IEBACiBpcElmU3RhdHNSZWFzbUZhaWxzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIGZhaWx1cmVzIGRldGVjdGVkIGJ5IHRoZSBJUCByZS1hc3NlbWJseQpAQCAtMTg1Nyw4ICsxNzY1LDYgQEAKICAgICAgICAgICAgIGludGVyZmFjZSB0byB3aGljaCB0aGVzZSBkYXRhZ3JhbXMgd2VyZSBhZGRyZXNzZWQgaXMKICAgICAgICAgICAgIGluY3JlbWVudGVkLiAgVGhpcyBpbnRlcmZhY2UgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQogCi0KLQogICAgICAgICAgICAgaW5wdXQgaW50ZXJmYWNlIGZvciBzb21lIG9mIHRoZSBkYXRhZ3JhbXMuCiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdApAQCAtMTkwOCw4ICsxODE0LDYgQEAKICAgICAgICAgICAgIHByb3RvY29scyAoaW5jbHVkaW5nIElDTVApIHN1cHBsaWVkIHRvIElQIGluIHJlcXVlc3RzIGZvcgogICAgICAgICAgICAgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIHBhY2tldHMgYXMKIAotCi0KICAgICAgICAgICAgIGlwSWZTdGF0c091dFJlcXVlc3RzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKQEAgLTE5NTksOCArMTg2Myw2IEBACiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogCi0KLQogICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDI0IH0KIApAQCAtMjAxMCw4ICsxOTEyLDYgQEAKIAogICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCiAKLQotCiAgICAgICAgICAgICBvdXRnb2luZyBpbnRlcmZhY2UgaXMgaW5jcmVtZW50ZWQgZm9yIGEgc3VjY2Vzc2Z1bGx5CiAgICAgICAgICAgICBmcmFnbWVudGVkIGRhdGFncmFtLgogCkBAIC0yMDYwLDkgKzE5NjAsNiBAQAogICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDI5IH0KIAotCi0KLQogaXBJZlN0YXRzT3V0VHJhbnNtaXRzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtMjExMSw5ICsyMDA4LDYgQEAKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSAzMiB9CiAKIGlwSWZTdGF0c0hDT3V0T2N0ZXRzIE9CSkVDVC1UWVBFCi0KLQotCiAgICAgU1lOVEFYICAgICBDb3VudGVyNjQKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtMjE2Myw4ICsyMDU3LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gSVAgbXVsdGljYXN0CiAKLQotCiAgICAgICAgICAgICBkYXRhZ3JhbXMuICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMgY291bnRlZCBpbgogICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCiAKQEAgLTIyMTQsOCArMjEwNiw2IEBACiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAKLQotCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgMzkgfQpAQCAtMjI2NCw5ICsyMTU0LDYgQEAKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSA0MiB9CiAKIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgT0JKRUNULVRZUEUKLQotCi0KICAgICBTWU5UQVggICAgIENvdW50ZXI2NAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC0yMzE2LDggKzIyMDMsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgdmFsdWUgb2Ygc3lzVXBUaW1lIG9uIHRoZSBtb3N0IHJlY2VudCBvY2Nhc2lvbiBhdCB3aGljaAogCi0KLQogICAgICAgICAgICAgYW55IG9uZSBvciBtb3JlIG9mIHRoaXMgZW50cnkncyBjb3VudGVycyBzdWZmZXJlZCBhCiAgICAgICAgICAgICBkaXNjb250aW51aXR5LgogCkBAIC0yMzY3LDggKzIyNTIsNiBAQAogICAgICAgICAgICAgdGFibGUgaW5kZXBlbmRlbnQgb2YgaG93IHRoZSBlbnRpdHkgbGVhcm5lZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgKFRoaXMgdGFibGUgaXNuJ3QgbGltaXRlZCB0byBwcmVmaXhlcyBsZWFybmVkIGZyb20gcm91dGVyCiAKLQotCiAgICAgICAgICAgICBhZHZlcnRpc2VtZW50cy4pIgogICAgIDo6PSB7IGlwIDMyIH0KIApAQCAtMjQxNyw5ICsyMzAwLDYgQEAKICAgICBTWU5UQVggICAgIEluZXRBZGRyZXNzCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgYWRkcmVzcyBwcmVmaXguICBUaGUgYWRkcmVzcyB0eXBlIG9mIHRoaXMgb2JqZWN0IGlzCiAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gaXBBZGRyZXNzUHJlZml4VHlwZS4gIFRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QKQEAgLTI0NjgsOSArMjM0OCw2IEBACiAKIGlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBUcnV0aFZhbHVlCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMjUxOSw5ICsyMzk2LDYgQEAKICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGdlbmVyYXRlZCBmcm9tIGFuIGludmFsaWRhdGVkIHByZWZpeCBzaG91bGQgbm90CiAgICAgICAgICAgICBhcHBlYXIgYXMgdGhlIGRlc3RpbmF0aW9uIG9yIHNvdXJjZSBhZGRyZXNzIG9mIGEgcGFja2V0LgogCi0KLQotCiAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgSVB2NCBwcmVmaXhlcyBpcyA0LDI5NCw5NjcsMjk1IChpbmZpbml0eSkuIgogICAgIFJFRkVSRU5DRSAiRm9yIElQdjYgUkZDIDI0NjEsIGVzcGVjaWFsbHkgc2VjdGlvbnMgMiBhbmQgNC42LjIgYW5kCiAgICAgICAgICAgICAgICBSRkMgMjQ2MiIKQEAgLTI1NzEsOCArMjQ0NSw2IEBACiAgICAgICAgICAgICBpbnRlbnRpb24gaW4gYWxsb3dpbmcgYSB1c2VyIHRvIHdyaXRlIHRvIHRoaXMgdGFibGUgaXMgdG8KICAgICAgICAgICAgIGFsbG93IHRoZW0gdG8gYWRkIG9yIHJlbW92ZSBhbnkgZW50cnkgdGhhdCBpc24ndAogCi0KLQogICAgICAgICAgICAgcGVybWFuZW50LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFsbG93ZWQgdG8gbW9kaWZ5IG9iamVjdHMKICAgICAgICAgICAgIGFuZCBlbnRyaWVzIHdoZW4gdGhhdCB3b3VsZCBub3QgY2F1c2UgaW5jb25zaXN0ZW5jaWVzCiAgICAgICAgICAgICB3aXRoaW4gdGhlIHRhYmxlLiAgQWxsb3dpbmcgd3JpdGUgYWNjZXNzIHRvIG9iamVjdHMsIHN1Y2gKQEAgLTI2MjIsOCArMjQ5NCw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBJUCBhZGRyZXNzIHRvIHdoaWNoIHRoaXMgZW50cnkncyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uCiAKLQotCiAgICAgICAgICAgICBwZXJ0YWlucy4gIFRoZSBhZGRyZXNzIHR5cGUgb2YgdGhpcyBvYmplY3QgaXMgc3BlY2lmaWVkIGluCiAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZS4KIApAQCAtMjY3Miw5ICsyNTQyLDYgQEAKICAgICBTWU5UQVggICAgIElwQWRkcmVzc09yaWdpblRDCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIG9yaWdpbiBvZiB0aGUgYWRkcmVzcy4iCiAgICAgOjo9IHsgaXBBZGRyZXNzRW50cnkgNiB9CkBAIC0yNzI0LDggKzI1OTEsNiBAQAogICAgICAgICAgICAgVGhlIFJvd1N0YXR1cyBUQyByZXF1aXJlcyB0aGF0IHRoaXMgREVTQ1JJUFRJT04gY2xhdXNlCiAgICAgICAgICAgICBzdGF0ZXMgdW5kZXIgd2hpY2ggY2lyY3Vtc3RhbmNlcyBvdGhlciBvYmplY3RzIGluIHRoaXMgcm93CiAKLQotCiAgICAgICAgICAgICBjYW4gYmUgbW9kaWZpZWQuICBUaGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbgogICAgICAgICAgICAgd2hldGhlciBvdGhlciBvYmplY3RzIGluIHRoaXMgY29uY2VwdHVhbCByb3cgY2FuIGJlCiAgICAgICAgICAgICBtb2RpZmllZC4KQEAgLTI3NzQsOSArMjYzOSw2IEBACiAgICAgU1lOVEFYICAgICBJcE5ldFRvUGh5c2ljYWxFbnRyeQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiRWFjaCBlbnRyeSBjb250YWlucyBvbmUgSVAgYWRkcmVzcyB0byBgcGh5c2ljYWwnIGFkZHJlc3MKICAgICAgICAgICAgIGVxdWl2YWxlbmNlLiIKQEAgLTI4MjYsOCArMjY4OCw2IEBACiAKICAgICAgICAgICAgIEltcGxlbWVudG9ycyBuZWVkIHRvIGJlIGF3YXJlIHRoYXQgaWYgdGhlIHNpemUgb2YKIAotCi0KICAgICAgICAgICAgIGlwTmV0VG9QaHlzaWNhbE5ldEFkZHJlc3MgZXhjZWVkcyAxMTUgb2N0ZXRzLCB0aGVuIE9JRFMgb2YKICAgICAgICAgICAgIGluc3RhbmNlcyBvZiBjb2x1bW5zIGluIHRoaXMgcm93IHdpbGwgaGF2ZSBtb3JlIHRoYW4gMTI4CiAgICAgICAgICAgICBzdWItaWRlbnRpZmllcnMgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCB1c2luZyBTTk1QdjEsCkBAIC0yODc3LDggKzI3MzcsNiBAQAogICAgICAgICAgICAgbWFwcGluZyBpZGVudGlmaWVkIHdpdGggc2FpZCBlbnRyeS4gIEl0IGlzIGFuCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBtYXR0ZXIgYXMgdG8gd2hldGhlciB0aGUgYWdlbnQKIAotCi0KICAgICAgICAgICAgIHJlbW92ZXMgYW4gaW52YWxpZGF0ZWQgZW50cnkgZnJvbSB0aGUgdGFibGUuICBBY2NvcmRpbmdseSwKICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbnMgbXVzdCBiZSBwcmVwYXJlZCB0byByZWNlaXZlIHRhYnVsYXIKICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZyb20gYWdlbnRzIHRoYXQgY29ycmVzcG9uZHMgdG8gZW50cmllcyBub3QKQEAgLTI5MjcsOSArMjc4NSw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIE5laWdoYm9yIFVucmVhY2hhYmlsaXR5IERldGVjdGlvbiBzdGF0ZSBmb3IgdGhlCiAgICAgICAgICAgICBpbnRlcmZhY2Ugd2hlbiB0aGUgYWRkcmVzcyBtYXBwaW5nIGluIHRoaXMgZW50cnkgaXMgdXNlZC4KICAgICAgICAgICAgIElmIE5laWdoYm9yIFVucmVhY2hhYmlsaXR5IERldGVjdGlvbiBpcyBub3QgaW4gdXNlIChlLmcuIGZvcgpAQCAtMjk3OCw5ICsyODMzLDYgQEAKIAogaXB2NlNjb3BlWm9uZUluZGV4RW50cnkgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElwdjZTY29wZVpvbmVJbmRleEVudHJ5Ci0KLQotCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0zMDI5LDkgKzI4ODEsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSB6b25lIGluZGV4IGZvciBzY29wZSAzIG9uIHRoaXMgaW50ZXJmYWNlLiIKICAgICA6Oj0geyBpcHY2U2NvcGVab25lSW5kZXhFbnRyeSAzIH0KIApAQCAtMzA4MCw5ICsyOTI5LDYgQEAKICAgICBTWU5UQVggICAgIEluZXRab25lSW5kZXgKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgOSBvbiB0aGlzIGludGVyZmFjZS4iCiAgICAgOjo9IHsgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkgOSB9CkBAIC0zMTMyLDggKzI5NzgsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgdGFibGUgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVmYXVsdCByb3V0ZXJzIGtub3duIHRvIHRoaXMKIAotCi0KICAgICAgICAgICAgIGVudGl0eS4iCiAgICAgOjo9IHsgaXAgMzcgfQogCkBAIC0zMTgyLDkgKzMwMjYsNiBAQAogCiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJbnRlcmZhY2VJbmRleAotCi0KLQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMzIzNCw4ICszMDc1LDYgQEAKICAgICBSRUZFUkVOQ0UgIlJGQyA0MjkxLCBzZWN0aW9uIDIuMSIKICAgICA6Oj0geyBpcERlZmF1bHRSb3V0ZXJFbnRyeSA1IH0KIAotCi0KIC0tCiAtLSBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBjb25zdHJ1Y3Rpbmcgcm91dGVyIGFkdmVydGlzZW1lbnRzCiAtLQpAQCAtMzI4NCw5ICszMTIzLDYgQEAKICAgICAgICAgICAgIG9iamVjdCBpcyB3cml0dGVuLCB0aGUgZW50aXR5IFNIT1VMRCBzYXZlIHRoZSBjaGFuZ2UgdG8KICAgICAgICAgICAgIG5vbi12b2xhdGlsZSBzdG9yYWdlLiIKICAgICBJTkRFWCB7IGlwdjZSb3V0ZXJBZHZlcnRJZkluZGV4IH0KLQotCi0KICAgICA6Oj0geyBpcHY2Um91dGVyQWR2ZXJ0VGFibGUgMSB9CiAKIElwdjZSb3V0ZXJBZHZlcnRFbnRyeSA6Oj0gU0VRVUVOQ0UgewpAQCAtMzMzNiw4ICszMTcyLDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIG1heGltdW0gdGltZSBhbGxvd2VkIGJldHdlZW4gc2VuZGluZyB1bnNvbGljaXRlZCByb3V0ZXIKIAotCi0KICAgICAgICAgICAgIGFkdmVydGlzZW1lbnRzIGZyb20gdGhpcyBpbnRlcmZhY2UuIgogICAgIFJFRkVSRU5DRSAiUkZDIDI0NjEgU2VjdGlvbiA2LjIuMSIKICAgICBERUZWQUwgeyA2MDAgfQpAQCAtMzM4Niw5ICszMjIwLDYgQEAKICAgICBTWU5UQVggICAgIFVuc2lnbmVkMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSB2YWx1ZSB0byBiZSBwbGFjZWQgaW4gTVRVIG9wdGlvbnMgc2VudCBieSB0aGUgcm91dGVyIG9uCiAgICAgICAgICAgICB0aGlzIGludGVyZmFjZS4KQEAgLTM0MzgsOCArMzI2OSw2IEBACiAgICAgICAgICAgICJUaGUgZGVmYXVsdCB2YWx1ZSB0byBiZSBwbGFjZWQgaW4gdGhlIGN1cnJlbnQgaG9wIGxpbWl0CiAgICAgICAgICAgICBmaWVsZCBpbiByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgc2VudCBmcm9tIHRoaXMgaW50ZXJmYWNlLgogCi0KLQogICAgICAgICAgICAgVGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgZGlhbWV0ZXIgb2YgdGhlCiAgICAgICAgICAgICBJbnRlcm5ldC4KIApAQCAtMzQ4OSw4ICszMzE4LDYgQEAKIAogLS0KIAotCi0KIC0tIElDTVAgc2VjdGlvbgogLS0KIApAQCAtMzUzOSw5ICszMzY2LDYgQEAKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIElQIHZlcnNpb24gb2YgdGhlIHN0YXRpc3RpY3MuIgotCi0KLQogICAgIDo6PSB7IGljbXBTdGF0c0VudHJ5IDEgfQogCiBpY21wU3RhdHNJbk1zZ3MgT0JKRUNULVRZUEUKQEAgLTM1OTEsOCArMzQxNSw2IEBACiAtLQogLS0gcGVyLXZlcnNpb24sIHBlci1tZXNzYWdlIHR5cGUgSUNNUCBjb3VudGVycwogCi0KLQogLS0KIAogaWNtcE1zZ1N0YXRzVGFibGUgT0JKRUNULVRZUEUKQEAgLTM2NDEsOSArMzQ2Myw2IEBACiBpY21wTXNnU3RhdHNUeXBlIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJbnRlZ2VyMzIgKDAuLjI1NSkKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCi0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBJQ01QIHR5cGUgZmllbGQgb2YgdGhlIG1lc3NhZ2UgdHlwZSBiZWluZyBjb3VudGVkIGJ5CkBAIC0zNjkyLDkgKzM1MTEsNiBAQAogICAgICAgICAgICAgZXhwcmVzc2VkIGluIE9CSkVDVCBjbGF1c2UgZm9ybSBpbiB0aGlzIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICBjbGF1c2U6CiAKLQotCi0KICAgICAgICAgICAgIC0tIE9CSkVDVCAgICAgICAgaXBTeXN0ZW1TdGF0c0lQVmVyc2lvbgogICAgICAgICAgICAgLS0gU1lOVEFYICAgICAgICBJbmV0VmVyc2lvbiB7aXB2NCgxKSwgaXB2NigyKX0KICAgICAgICAgICAgIC0tIERFU0NSSVBUSU9OCkBAIC0zNzQ0LDggKzM1NjAsNiBAQAogICAgICAgICAgICAgLS0gREVTQ1JJUFRJT04KICAgICAgICAgICAgIC0tICAgICBUaGlzIE1JQiByZXF1aXJlcyBzdXBwb3J0IGZvciBvbmx5IGdsb2JhbCBhbmQKIAotCi0KICAgICAgICAgICAgIC0tICAgICBub24tZ2xvYmFsIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFuZCBzbyB0aGUgc2l6ZQogICAgICAgICAgICAgLS0gICAgIGNhbiBiZSA0LCA4LCAxNiwgb3IgMjAgYnl0ZXMuCiAgICAgICAgICAgICAtLQpAQCAtMzc5NSw4ICszNjA5LDYgQEAKICAgICAgICAgICAgIlRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBzeXN0ZW1zIHRoYXQgaGF2ZSBhbiBhZ2dyZWdhdGUKICAgICAgICAgICAgIGJhbmR3aWR0aCBvZiBncmVhdGVyIHRoYW4gNjUwTUIuICBJbmNsdWRpbmcgdGhpcyBncm91cAogCi0KLQogICAgICAgICAgICAgZG9lcyBub3QgYWxsb3cgYW4gZW50aXR5IHRvIG5lZ2xlY3QgdGhlIDMyIGJpdCB2ZXJzaW9ucyBvZgogICAgICAgICAgICAgdGhlc2Ugb2JqZWN0cy4iCiAKQEAgLTM4NDYsOCArMzY1OCw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBhbGwgc3lzdGVtcyBzdXBwb3J0aW5nIElQdjQgYW5kCiAKLQotCiAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGlwSWZTdGF0c0hDUGFja2V0R3JvdXAuICBJbmNsdWRpbmcgdGhpcyBncm91cAogICAgICAgICAgICAgZG9lcyBub3QgYWxsb3cgYW4gZW50aXR5IHRvIG5lZ2xlY3QgdGhlIDMyIGJpdCB2ZXJzaW9ucyBvZgogICAgICAgICAgICAgdGhlc2Ugb2JqZWN0cy4iCkBAIC0zODk2LDkgKzM3MDYsNiBAQAogCiAgICAgT0JKRUNUICAgICBpcHY2SW50ZXJmYWNlRW5hYmxlU3RhdHVzCiAgICAgTUlOLUFDQ0VTUyByZWFkLW9ubHkKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQW4gYWdlbnQgaXMgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgd3JpdGUgYWNjZXNzIHRvIHRoaXMKICAgICAgICAgICAgIG9iamVjdC4iCkBAIC0zOTQ4LDggKzM3NTUsNiBAQAogICAgICAgICAgICAiQW4gYWdlbnQgaXMgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgd3JpdGUgb3IgY3JlYXRlIGFjY2VzcwogICAgICAgICAgICAgdG8gdGhpcyBvYmplY3QuCiAKLQotCiAgICAgICAgICAgICBJZiBhbiBhZ2VudCBhbGxvd3MgdGhpcyBvYmplY3QgdG8gYmUgd3JpdHRlbiBvciBjcmVhdGVkLCBpdAogICAgICAgICAgICAgaXMgbm90IHJlcXVpcmVkIHRvIGFsbG93IHRoaXMgb2JqZWN0IHRvIGJlIHNldCB0byByZWFkT25seSwKICAgICAgICAgICAgIHBlcm1hbmVudCwgb3Igbm9uVm9sYXRpbGUuIgpAQCAtMzk5OCw5ICszODAzLDYgQEAKICAgICAgICAgICAgIkFuIGFnZW50IGlzIG5vdCByZXF1aXJlZCB0byBwcm92aWRlIHdyaXRlIGFjY2VzcyB0byB0aGlzCiAgICAgICAgICAgICBvYmplY3QuIgogCi0KLQotCiAgICAgT0JKRUNUICAgICBpcHY2Um91dGVyQWR2ZXJ0T3RoZXJDb25maWdGbGFnCiAgICAgTUlOLUFDQ0VTUyByZWFkLW9ubHkKICAgICBERVNDUklQVElPTgpAQCAtNDA0MiwxNiArMzg0NCwxMiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBbiBhZ2VudCBpcyBub3QgcmVxdWlyZWQgdG8gcHJvdmlkZSB3cml0ZSBvciBjcmVhdGUgYWNjZXNzCiAgICAgICAgICAgICB0byB0aGlzIG9iamVjdC4iCi0KICAgICA6Oj0geyBpcE1JQkNvbXBsaWFuY2VzIDIgfQogCiAtLSB1bml0cyBvZiBjb25mb3JtYW5jZQogCiBpcHY0R2VuZXJhbEdyb3VwIE9CSkVDVC1HUk9VUAogICAgIE9CSkVDVFMgICB7IGlwRm9yd2FyZGluZywgaXBEZWZhdWx0VFRMLCBpcFJlYXNtVGltZW91dCB9Ci0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBncm91cCBvZiBJUHY0LXNwZWNpZmljIG9iamVjdHMgZm9yIGJhc2ljIG1hbmFnZW1lbnQgb2YKQEAgLTQxMDEsOCArMzg5OSw2IEBACiAgICAgICAgICAgICB2YWx1ZS4iCiAgICAgOjo9IHsgaXBNSUJHcm91cHMgNyB9CiAKLQotCiBpcFN5c3RlbVN0YXRzR3JvdXAgT0JKRUNULUdST1VQCiAgICAgT0JKRUNUUyAgIHsgaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXMsCiAgICAgICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0luT2N0ZXRzLApAQCAtNDE1MSw5ICszOTQ3LDYgQEAKICAgICAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNIQ091dE1jYXN0T2N0ZXRzCiB9Ci0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIklQIHN5c3RlbSB3aWRlIHN0YXRpc3RpY3MgZm9yIHN5c3RlbXMgdGhhdCBtYXkgb3ZlcmZsb3cgdGhlCkBAIC00MjAyLDkgKzM5OTUsNiBAQAogICAgICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLCBpcElmU3RhdHNSZWZyZXNoUmF0ZSB9CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIklQIHBlci1pbnRlcmZhY2Ugc3RhdGlzdGljcy4iCiAgICAgOjo9IHsgaXBNSUJHcm91cHMgMTMgfQogCkBAIC00MjUzLDkgKzQwNDMsNiBAQAogICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lLAogICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWUgfQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgZ3JvdXAgb2Ygb2JqZWN0cyBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IGFkZHJlc3MKICAgICAgICAgICAgIHByZWZpeGVzIHVzZWQgYnkgdGhpcyBub2RlLiIKQEAgLTQzMDQsOSArNDA5MSw2IEBACiAKIGlwRGVmYXVsdFJvdXRlckdyb3VwIE9CSkVDVC1HUk9VUAogICAgIE9CSkVDVFMgICB7IGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lLCBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlIH0KLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIGdyb3VwIG9mIG9iamVjdHMgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0CkBAIC00MzU2LDggKzQxNDAsNiBAQAogCiAgICAgICAgICAgICBUaGlzIG9iamVjdCBoYXMgYmVlbiBkZXByZWNhdGVkLCBhcyBhIG5ldyBJUCB2ZXJzaW9uLW5ldXRyYWwKIAotCi0KICAgICAgICAgICAgIHRhYmxlIGhhcyBiZWVuIGFkZGVkLiAgSXQgaXMgbG9vc2VseSByZXBsYWNlZCBieQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0luUmVjaWV2ZXMuIgogICAgIDo6PSB7IGlwIDMgfQpAQCAtNDQwNyw4ICs0MTg5LDYgQEAKICAgICAgICAgICAgIGZpbmFsIGRlc3RpbmF0aW9uLiAgSW4gZW50aXRpZXMgd2hpY2ggZG8gbm90IGFjdCBhcyBJUHY0CiAgICAgICAgICAgICByb3V0ZXJzLCB0aGlzIGNvdW50ZXIgd2lsbCBpbmNsdWRlIG9ubHkgdGhvc2UgcGFja2V0cyB3aGljaAogCi0KLQogICAgICAgICAgICAgd2VyZSBTb3VyY2UtUm91dGVkIHZpYSB0aGlzIGVudGl0eSwgYW5kIHRoZSBTb3VyY2UtUm91dGUKICAgICAgICAgICAgIG9wdGlvbiBwcm9jZXNzaW5nIHdhcyBzdWNjZXNzZnVsLgogCkBAIC00NDU4LDggKzQyMzgsNiBAQAogICAgICAgICAgICAgVGhpcyBvYmplY3QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBhIG5ldyBJUCB2ZXJzaW9uIG5ldXRyYWwKICAgICAgICAgICAgIHRhYmxlIGhhcyBiZWVuIGFkZGVkLiAgSXQgaXMgbG9vc2VseSByZXBsYWNlZCBieQogCi0KLQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0luZGVsaXZlcnMuIgogICAgIDo6PSB7IGlwIDkgfQogCkBAIC00NTA5LDggKzQyODcsNiBAQAogCiAgICAgICAgICAgICBUaGlzIG9iamVjdCBoYXMgYmVlbiBkZXByZWNhdGVkLCBhcyBhIG5ldyBJUCB2ZXJzaW9uLW5ldXRyYWwKIAotCi0KICAgICAgICAgICAgIHRhYmxlIGhhcyBiZWVuIGFkZGVkLiAgSXQgaXMgbG9vc2VseSByZXBsYWNlZCBieQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzLiIKICAgICA6Oj0geyBpcCAxMiB9CkBAIC00NTU5LDkgKzQzMzUsNiBAQAogCiBpcEZyYWdPS3MgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KQEAgLTQ2MTEsOCArNDM4NCw2IEBACiAgICAgICAgICAgICBmb3IgZGlzY2FyZGluZyBzdWNoIGFuIGVudHJ5IGNvdWxkIGJlIHRvIGZyZWUtdXAgYnVmZmVyCiAgICAgICAgICAgICBzcGFjZSBmb3Igb3RoZXIgcm91dGluZyBlbnRyaWVzLgogCi0KLQogICAgICAgICAgICAgVGhpcyBvYmplY3Qgd2FzIGRlZmluZWQgaW4gcHJlLUlQdjYgdmVyc2lvbnMgb2YgdGhlIElQIE1JQi4KICAgICAgICAgICAgIEl0IHdhcyBpbXBsaWNpdGx5IElQdjQgb25seSwgYnV0IHRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9ucwogICAgICAgICAgICAgZGlkIG5vdCBpbmRpY2F0ZSB0aGlzIHByb3RvY29sIHJlc3RyaWN0aW9uLiAgSW4gb3JkZXIgdG8KQEAgLTQ2NjEsOSArNDQzMiw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIElQdjQgYWRkcmVzcyB0byB3aGljaCB0aGlzIGVudHJ5J3MgYWRkcmVzc2luZwogICAgICAgICAgICAgaW5mb3JtYXRpb24gcGVydGFpbnMuIgogICAgIDo6PSB7IGlwQWRkckVudHJ5IDEgfQpAQCAtNDcxMyw4ICs0NDgxLDYgQEAKICAgICAgICAgICAgIG9uIHRoaXMgaW50ZXJmYWNlLiIKICAgICA6Oj0geyBpcEFkZHJFbnRyeSA1IH0KIAotCi0KIC0tIHRoZSBkZXByZWNhdGVkIElQdjQgQWRkcmVzcyBUcmFuc2xhdGlvbiB0YWJsZQogCiAtLSBUaGUgQWRkcmVzcyBUcmFuc2xhdGlvbiB0YWJsZXMgY29udGFpbiB0aGUgSXBBZGRyZXNzIHRvCkBAIC00NzY0LDggKzQ1MzAsNiBAQAogICAgICAgICAgICAgZWZmZWN0aXZlLiAgVGhlIGludGVyZmFjZSBpZGVudGlmaWVkIGJ5IGEgcGFydGljdWxhciB2YWx1ZQogICAgICAgICAgICAgb2YgdGhpcyBpbmRleCBpcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgaWRlbnRpZmllZCBieSB0aGUKIAotCi0KICAgICAgICAgICAgIHNhbWUgdmFsdWUgb2YgdGhlIElGLU1JQidzIGlmSW5kZXguCiAKICAgICAgICAgICAgIFRoaXMgb2JqZWN0IHByZWRhdGVzIHRoZSBydWxlIGxpbWl0aW5nIGluZGV4IG9iamVjdHMgdG8gYQpAQCAtNDgxNSw4ICs0NTc5LDYgQEAKIAogICAgICAgICAgICAgU2V0dGluZyB0aGlzIG9iamVjdCB0byB0aGUgdmFsdWUgaW52YWxpZCgyKSBoYXMgdGhlIGVmZmVjdAogCi0KLQogICAgICAgICAgICAgb2YgaW52YWxpZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZQogICAgICAgICAgICAgaXBOZXRUb01lZGlhVGFibGUuICBUaGF0IGlzLCBpdCBlZmZlY3RpdmVseSBkaXMtYXNzb2NpYXRlcwogICAgICAgICAgICAgdGhlIGludGVyZmFjZSBpZGVudGlmaWVkIHdpdGggc2FpZCBlbnRyeSBmcm9tIHRoZSBtYXBwaW5nCkBAIC00ODY1LDkgKzQ2MjcsNiBAQAogICAgICAgICAgICAgaWNtcFN0YXRzSW5FcnJvcnMuIgogICAgIDo6PSB7IGljbXAgMiB9CiAKLQotCi0KIGljbXBJbkRlc3RVbnJlYWNocyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTQ5MTcsOCArNDY3Niw2IEBACiAgICAgICAgICAgICB0aGUgaWNtcE1zZ1N0YXRzVGFibGUuIgogICAgIDo6PSB7IGljbXAgNiB9CiAKLQotCiBpY21wSW5SZWRpcmVjdHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC00OTY3LDkgKzQ3MjQsNiBAQAogICAgICAgICAgICAgdGhlIGljbXBNc2dTdGF0c1RhYmxlLiIKICAgICA6Oj0geyBpY21wIDEwIH0KIAotCi0KLQogaWNtcEluVGltZXN0YW1wUmVwcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTUwMTgsOSArNDc3Miw2IEBACiAgICAgICAgICAgICBUaGlzIG9iamVjdCBoYXMgYmVlbiBkZXByZWNhdGVkLCBhcyBhIG5ldyBJUCB2ZXJzaW9uLW5ldXRyYWwKICAgICAgICAgICAgIHRhYmxlIGhhcyBiZWVuIGFkZGVkLiAgSXQgaXMgbG9vc2VseSByZXBsYWNlZCBieQogICAgICAgICAgICAgaWNtcFN0YXRzT3V0TXNncy4iCi0KLQotCiAgICAgOjo9IHsgaWNtcCAxNCB9CiAKIGljbXBPdXRFcnJvcnMgT0JKRUNULVRZUEUKQEAgLTUwNjksOSArNDgyMCw2IEBACiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIElDTVAgUGFyYW1ldGVyIFByb2JsZW0gbWVzc2FnZXMgc2VudC4KIApAQCAtNTEyMCw5ICs0ODY4LDYgQEAKIAogaWNtcE91dEVjaG9SZXBzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCkBAIC01MTcxLDkgKzQ5MTYsNiBAQAogCiBpY21wT3V0QWRkck1hc2tSZXBzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCkBAIC01MjIyLDkgKzQ5NjQsNiBAQAogICAgICAgICAgICAiVGhlIGlwIGdyb3VwIG9mIG9iamVjdHMgcHJvdmlkaW5nIGZvciBiYXNpYyBtYW5hZ2VtZW50IG9mIElQCiAgICAgICAgICAgICBlbnRpdGllcywgZXhjbHVzaXZlIG9mIHRoZSBtYW5hZ2VtZW50IG9mIElQIHJvdXRlcy4KIAotCi0KLQogICAgICAgICAgICAgQXMgcGFydCBvZiB0aGUgdmVyc2lvbiBpbmRlcGVuZGVuY2UsIHRoaXMgZ3JvdXAgaGFzIGJlZW4KICAgICAgICAgICAgIGRlcHJlY2F0ZWQuICAiCiAgICAgOjo9IHsgaXBNSUJHcm91cHMgMSB9CmRpZmYgLS1naXQgYS9taWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0IGIvbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dAppbmRleCBmMzBmNGNhLi42ZmIzNjU5IDEwMDY0NAotLS0gYS9taWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0CisrKyBiL21pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQKQEAgLTE1LDEwICsxNSw2IEBACiAgICAgICAgICAgICAgICAgICAgMzQ2MSBHTCBMaW5zY2hvdGVuCiAgICAgICAgICAgICAgICAgICAgTmV0aGVybGFuZHMKIAotCi0KLQotCiAgICAgICAgICAgICAgICAgICAgUGhvbmU6ICszMSAzNDgtNDA3LTc3NQogICAgICAgICAgICAgICAgICAgIEVNYWlsOiBid2lqbmVuQGx1Y2VudC5jb20KIApAQCAtMzUsNyArMzEsNiBAQAogCiAgICAgUkVWSVNJT04gICAgICAiMjAwMzA4MjgwMDAwWiIgIC0tIDI4IEF1Z3VzdCAyMDAzCiAgICAgREVTQ1JJUFRJT04gICAiSW5pdGlhbCB2ZXJzaW9uLCBwdWJsaXNoZWQgYXMgUkZDIDM1OTUuIgotCiAgICAgOjo9IHsgbWliLTIgMTAzIH0KIAogSVB2NkZsb3dMYWJlbCAgICAgIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KZGlmZiAtLWdpdCBhL21pYnMvTWFrZWZpbGUuaW4gYi9taWJzL01ha2VmaWxlLmluCmluZGV4IGVhOTdlNjcuLmYxODUwMDIgMTAwNjQ0Ci0tLSBhL21pYnMvTWFrZWZpbGUuaW4KKysrIGIvbWlicy9NYWtlZmlsZS5pbgpAQCAtMzYsMTEgKzM2LDEyIEBACiAJSE9TVC1SRVNPVVJDRVMtTUlCLnR4dCBIT1NULVJFU09VUkNFUy1UWVBFUy50eHQgXAogCVJNT04tTUlCLnR4dCBcCiAJSVBWNi1UQy50eHQgSVBWNi1NSUIudHh0IElQVjYtSUNNUC1NSUIudHh0IElQVjYtVENQLU1JQi50eHQgXAotCUlQVjYtVURQLU1JQi50eHQgXAorCUlQVjYtVURQLU1JQi50eHQgSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQgVFVOTkVMLU1JQi50eHQgXAogCURJU01BTi1FVkVOVC1NSUIudHh0IERJU01BTi1TQ1JJUFQtTUlCLnR4dCBESVNNQU4tU0NIRURVTEUtTUlCLnR4dCBcCiAJTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0IFNOTVAtVVNNLUFFUy1NSUIudHh0IFwKIAlTTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQgXAotCVNDVFAtTUlCLnR4dAorCVNOTVAtVExTLVRNLU1JQi50eHQgU05NUC1UU00tTUlCLnR4dCBcCisJU0NUUC1NSUIudHh0IEJSSURHRS1NSUIudHh0CiAKIE5FVFNOTVBNSUJTID0gTkVULVNOTVAtVEMudHh0IE5FVC1TTk1QLU1JQi50eHQgTkVULVNOTVAtQUdFTlQtTUlCLnR4dCBcCiAJTkVULVNOTVAtRVhBTVBMRVMtTUlCLnR4dCBORVQtU05NUC1FWFRFTkQtTUlCLnR4dCBORVQtU05NUC1QQVNTLU1JQi50eHQKZGlmZiAtLWdpdCBhL21pYnMvTWFrZWZpbGUubWliIGIvbWlicy9NYWtlZmlsZS5taWIKaW5kZXggMTM2MTk5Yy4uNmQzMTI0MiAxMDA2NDQKLS0tIGEvbWlicy9NYWtlZmlsZS5taWIKKysrIGIvbWlicy9NYWtlZmlsZS5taWIKQEAgLTE0LDE5ICsxNCwyNiBAQAogCVNOTVAtRlJBTUVXT1JLLU1JQi50eHQgU05NUC1NUEQtTUlCLnR4dCBTTk1QLVVTRVItQkFTRUQtU00tTUlCLnR4dCBcCiAJU05NUC1WSUVXLUJBU0VELUFDTS1NSUIudHh0IFNOTVAtQ09NTVVOSVRZLU1JQi50eHQgXAogCVNOTVAtVEFSR0VULU1JQi50eHQgU05NUC1OT1RJRklDQVRJT04tTUlCLnR4dCBTTk1QLVBST1hZLU1JQi50eHQgXAorCVNOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCBTTk1QLVVTTS1BRVMtTUlCLnR4dCBcCisJU05NUC1UTFMtVE0tTUlCLnR4dCBcCiAJQUdFTlRYLU1JQi50eHQgU01VWC1NSUIudHh0IFwKLQlESVNNQU4tU0NSSVBULU1JQi50eHQgIERJU01BTi1TQ0hFRFVMRS1NSUIudHh0IFwKKwlESVNNQU4tU0NSSVBULU1JQi50eHQgRElTTUFOLVNDSEVEVUxFLU1JQi50eHQgXAorCURJU01BTi1QSU5HLU1JQi50eHQgRElTTUFOLVRSQUNFUk9VVEUtTUlCLnR4dCBcCisJRElTTUFOLU5TTE9PS1VQLU1JQi50eHQgRElTTUFOLUVWRU5ULU1JQi50eHQgXAorCURJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQgTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0IFwKIAlJQU5BLUxBTkdVQUdFLU1JQi50eHQgSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQgXAogCUlGLU1JQi50eHQgSUYtSU5WRVJURUQtU1RBQ0stTUlCLnR4dCBcCiAJSVAtTUlCLnR4dCBJUC1GT1JXQVJELU1JQi50eHQgVENQLU1JQi50eHQgVURQLU1JQi50eHQgXAotCUlBTkFpZlR5cGUtTUlCLnR4dCBFdGhlckxpa2UtTUlCLnR4dCBcCisJSUFOQWlmVHlwZS1NSUIudHh0IElBTkEtUlRQUk9UTy1NSUIudHh0IEV0aGVyTGlrZS1NSUIudHh0IFwKIAlJUFY2LVRDLnR4dCBJUFY2LU1JQi50eHQgSVBWNi1JQ01QLU1JQi50eHQgXAotCUlQVjYtVENQLU1JQi50eHQgSVBWNi1VRFAtTUlCLnR4dCBcCisJSVBWNi1UQ1AtTUlCLnR4dCBJUFY2LVVEUC1NSUIudHh0IElQVjYtRkxPVy1MQUJFTC1NSUIudHh0IFwKIAlIT1NULVJFU09VUkNFUy1NSUIudHh0IEhPU1QtUkVTT1VSQ0VTLVRZUEVTLnR4dCBcCiAJTkVUV09SSy1TRVJWSUNFUy1NSUIudHh0IE1UQS1NSUIudHh0IFwKIAlSTU9OLU1JQi50eHQgXAotCVJGQzExNTUtU01JLnR4dCBSRkMxMjEzLU1JQi50eHQgXAotCVNDVFAtTUlCLnR4dAorCVRVTk5FTC1NSUIudHh0IFwKKwlUUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0IFwKKwlSRkMxMTU1LVNNSS50eHQgUkZDMTIxMy1NSUIudHh0XAorCVNDVFAtTUlCLnR4dCBCUklER0UtTUlCLnR4dAogCiBNSUJERVBTID0gTWFrZWZpbGUubWliIG1pYmZldGNoIHNtaXN0cmlwCiAKQEAgLTY1LDYgKzcyLDE1IEBACiBTTk1QLUNPTU1VTklUWS1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNTc2CiAKK1NOTVAtVVNNLUFFUy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzODI2CisKK1NOTVAtVExTLVRNLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDYzNTMKKworU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNzg2CisKIFNOTVB2Mi1TTUkudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNTc4IFNOTVB2Mi1TTUkKIApAQCAtOTIsNiArMTA4LDE4IEBACiBESVNNQU4tU0NSSVBULU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDMxNjUKIAorRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjk4MgorCitESVNNQU4tRVZFTlQtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjk4MQorCitESVNNQU4tTlNMT09LVVAtTUlCLnR4dCBESVNNQU4tVFJBQ0VST1VURS1NSUIudHh0IERJU01BTi1QSU5HLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQ1NjAKKworTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzMDE0CisKIElGLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI4NjMKIApAQCAtMTEwLDYgKzEzOCw5IEBACiBJQU5BaWZUeXBlLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoIC14ICQoSUFOQUhPU1QpICQoSUFOQURJUikgaWFuYWlmdHlwZS1taWIKIAorSUFOQS1SVFBST1RPLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoIC14ICQoSUFOQUhPU1QpICQoSUFOQURJUikgaWFuYWlwcm91dGVwcm90b2NvbC1taWIKKwogSUFOQS1MQU5HVUFHRS1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAteCAkKElBTkFIT1NUKSAkKElBTkFESVIpIGlhbmFsYW5ndWFnZS1taWIKIApAQCAtMTE3LDE2ICsxNDgsMjIgQEAKIAkuL21pYmZldGNoIC14ICQoSUFOQUhPU1QpICQoSUFOQURJUikgaWFuYWFkZHJlc3NmYW1pbHludW1iZXJzLW1pYgogCiBJUC1NSUIudHh0OgkkKE1JQkRFUFMpCi0JLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyMDExCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MjkzCiAKIElQLUZPUldBUkQtTUlCLnR4dDoJJChNSUJERVBTKQotCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjA5NgorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDI5MgogCiBUQ1AtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDAyMgogCiBVRFAtTUlCLnR4dDoJJChNSUJERVBTKQotCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjAxMworCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDExMworCitUVU5ORUwtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDA4NworCitUUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzNDE5CiAKIElQVjYtVEMudHh0IElQVjYtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjQ2NQpAQCAtMTQwLDYgKzE3Nyw5IEBACiBJUFY2LVVEUC1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNDU0CiAKK0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzNTk1CisKIEhPU1QtUkVTT1VSQ0VTLU1JQi50eHQgSE9TVC1SRVNPVVJDRVMtVFlQRVMudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNzkwCiAKQEAgLTE1OCw5ICsxOTgsMTIgQEAKIFJGQzEyMTMtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMTIxMwogCi1TQ1RQLnR4dDoJJChNSUJERVBTKQorU0NUUC1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzODczCiAKK0JSSURHRS1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MTg4CisKIGlhbmFtaWJzOglpYW5hbGlzdAogCVsgLWQgJChBTExESVIpIF0gfHwgbWtkaXIgJChBTExESVIpCiAJY2F0IGlhbmFsaXN0IHwgd2hpbGUgcmVhZCBmaWxlIG1pYnM7IFwKZGlmZiAtLWdpdCBhL21pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQgYi9taWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZWFjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9taWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0CkBAIC0wLDAgKzEsODMgQEAKK05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIgREVGSU5JVElPTlMgOjo9IEJFR0lOCisKKy0tCistLSBPYmplY3RzIGZvciBwZXJpb2RpYyBub3RpZmljYXRpb25zIGNvbnRhaW5pbmcgZGF0YSBwYXlsb2FkcworLS0KKworSU1QT1JUUworICAgIG5ldFNubXBNb2R1bGVJRHMsIG5ldFNubXBPYmplY3RzLCBuZXRTbm1wTm90aWZpY2F0aW9ucyBGUk9NIE5FVC1TTk1QLU1JQgorCisgICAgT0JKRUNULVRZUEUsIE5PVElGSUNBVElPTi1UWVBFLCBNT0RVTEUtSURFTlRJVFksIEludGVnZXIzMiwgVW5zaWduZWQzMgorICAgICAgICBGUk9NIFNOTVB2Mi1TTUkKKworICAgIERpc3BsYXlTdHJpbmcgRlJPTSBTTk1QdjItVEM7CisKKworbmV0U25tcFBlcmlvZGljTm90aWZ5TWliIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAxMTA0MjAwMDAwWiIKKyAgICBPUkdBTklaQVRJT04gInd3dy5uZXQtc25tcC5vcmciCisgICAgQ09OVEFDVC1JTkZPICAgIAorCSAicG9zdGFsOiAgIFdlcyBIYXJkYWtlcgorICAgICAgICAgICAgICAgICAgICBQLk8uIEJveCAzODIKKyAgICAgICAgICAgICAgICAgICAgRGF2aXMgQ0EgIDk1NjE3CisKKyAgICAgICAgICBlbWFpbDogICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIKKyAgICBERVNDUklQVElPTgorCSJPYmplY3RzIGZvciBwZXJpb2RpYyBub3RpZmljYXRpb25zIGNvbnRhaW5pbmcgZGF0YSBwYXlsb2FkcyIKKyAgICBSRVZJU0lPTiAgICAgIjIwMTEwNDIwMDAwMFoiCisgICAgREVTQ1JJUFRJT04KKwkiRmlyc3QgcmV2aXNpb24uIgorICAgIDo6PSB7IG5ldFNubXBNb2R1bGVJRHMgNSB9CisKK25zUE5TY2FsYXJzICAgICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25ldFNubXBQZXJpb2RpY05vdGlmeU1pYiAxfQorbnNQTlRhYmxlcyAgICAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bmV0U25tcFBlcmlvZGljTm90aWZ5TWliIDJ9Cituc1BOb3RpZnlPYmplY3RzICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuZXRTbm1wUGVyaW9kaWNOb3RpZnlNaWIgM30KK25zUE5vdGlmaWNhdGlvblByZWZpeCAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25ldFNubXBQZXJpb2RpY05vdGlmeU1pYiA0fQorbnNQTm90aWZpY2F0aW9ucyAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bnNQTm90aWZpY2F0aW9uUHJlZml4IDB9Cituc1BOb3RpZmljYXRpb25PYmplY3RzICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuc1BOb3RpZmljYXRpb25QcmVmaXggMX0KKworLS0KKy0tIE5vdGlmaWNhdGlvbiBEZWZpbml0aW9ucworLS0KKworbnNOb3RpZnlQZXJpb2RpY05vdGlmaWNhdGlvbiAgICAgICAgTk9USUZJQ0FUSU9OLVRZUEUKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OCisJIkRhdGEgZGVsaXZlcnkgbm90aWZpY2F0aW9uIGZyb20gYSBjb25maWd1cmVkIGxpc3Qgb2YgcGVyaW9kaWMKKwlkYXRhIHNldHMgdG8gZGVsaXZlci4gIFNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZSBmb3IKKwlkZXRhaWxzIGFib3V0IGNvbmZpZ3VyaW5nIE5ldC1TTk1QIGFnZW50cyBmb3Igc2VuZGluZyB0aGVzZQorCW5vdGlmaWNhdGlvbnMgb3V0IG9uIGEgcmVndWxhciBiYXNpcy4iCisgICAgOjo9IHsgbnNQTm90aWZpY2F0aW9ucyAxIH0KKworLS0KKy0tIE9iamVjdHMgdGhhdCBjYW4gYmUgcHV0IGludG8gdGhlIG5vdGlmaWNhdGlvbnMKKy0tCisKK25zUE5QZXJpb2RpY1RpbWUgT0JKRUNULVRZUEUKKyAgICAgU1lOVEFYICAgICAgVW5zaWduZWQzMgorICAgICBNQVgtQUNDRVNTICBhY2Nlc3NpYmxlLWZvci1ub3RpZnkKKyAgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgICBERVNDUklQVElPTgorICAgICAgICAgIlRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIG5vdGlmaWNhdGlvbnMgY29udGFpbmluZyB0aGlzIGRhdGEgc2V0LiIKKyAgICAgOjo9IHsgbnNQTm90aWZ5T2JqZWN0cyAxIH0KKworbnNQTm90aWZ5TWVzc2FnZU51bWJlciBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTICBhY2Nlc3NpYmxlLWZvci1ub3RpZnkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkluZGljYXRlcyB0aGlzIGlzIHRoZSBOdGggbm90aWZpY2F0aW9uIGluIGEgbG9uZ2VyIHNlcXVlbmNlCisgICAgICAgIG9mIG5vdGlmaWNhdGlvbnMiCisgICAgOjo9IHsgbnNQTm90aWZ5T2JqZWN0cyAyIH0KKworbnNQTm90aWZ5TWF4TWVzc2FnZU51bWJlciBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTICBhY2Nlc3NpYmxlLWZvci1ub3RpZnkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0aGlzIG5vdGlmaWNhdGlvbiBzZXF1ZW5jZQorICAgICAgICB3aWxsIGNvbnRhaW4uIgorICAgIDo6PSB7IG5zUE5vdGlmeU9iamVjdHMgMyB9CisKKworRU5ECmRpZmYgLS1naXQgYS9taWJzL05FVC1TTk1QLVRDLnR4dCBiL21pYnMvTkVULVNOTVAtVEMudHh0CmluZGV4IGYzZmY1ZGYuLjQ2ZjczMDIgMTAwNjQ0Ci0tLSBhL21pYnMvTkVULVNOTVAtVEMudHh0CisrKyBiL21pYnMvTkVULVNOTVAtVEMudHh0CkBAIC0xMjAsNSArMTIwLDkgQEAKIG5ldFNubXBVRFBJUHY2RG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDQgfSAtLSBvYnNvbGV0ZQogbmV0U25tcFRDUElQdjZEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgNSB9IC0tIG9ic29sZXRlCiBuZXRTbm1wQ2FsbGJhY2tEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgNiB9CituZXRTbm1wQWxpYXNEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgNyB9CituZXRTbm1wRFRMU1VEUERvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA4IH0KK25ldFNubXBEVExTU0NUUERvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA5IH0KK25ldFNubXBUTFNUQ1BEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgMTAgfQogCiBFTkQKZGlmZiAtLWdpdCBhL21pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0IGIvbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQKaW5kZXggYzYwYjdkMi4uYzdkYTkzNCAxMDA2NDQKLS0tIGEvbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQKKysrIGIvbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQKQEAgLTIzLDcgKzIzLDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIGxvZ2dpbmcgU05NUCBOb3RpZmljYXRpb25zLCB0aGF0IGlzLCBUcmFwcwogCi0KICAgICAgYW5kIEluZm9ybXMuIgogLS0gUmV2aXNpb24gSGlzdG9yeQogCkBAIC0zMiw3ICszMSw2IEBACiAgICAgICAgICAgICAgICBQdWJsaXNoZWQgYXMgUkZDIDMwMTQiCiAgICAgOjo9IHsgbWliLTIgOTIgfQogCi0KIG5vdGlmaWNhdGlvbkxvZ01JQk9iamVjdHMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbm90aWZpY2F0aW9uTG9nTUlCIDEgfQogCiBubG1Db25maWcgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbm90aWZpY2F0aW9uTG9nTUlCT2JqZWN0cyAxIH0KQEAgLTcyLDggKzcwLDYgQEAKIAogbmxtQ29uZmlnR2xvYmFsQWdlT3V0IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgVW5zaWduZWQzMgotCi0KICAgICBVTklUUyAgICAgICAibWludXRlcyIKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCiAgICAgU1RBVFVTICAgICAgY3VycmVudApAQCAtOTMsNyArODksNiBAQAogICAgIERFRlZBTCB7IDE0NDAgfSAgLS0gMjQgaG91cnMKICAgICA6Oj0geyBubG1Db25maWcgMiB9CiAKLQogLS0KIC0tIEJhc2ljIExvZyBDb25maWd1cmF0aW9uIFRhYmxlCiAtLQpAQCAtMTIyLDggKzExNyw2IEBACiAgICAgbmxtQ29uZmlnTG9nRmlsdGVyTmFtZSAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbmxtQ29uZmlnTG9nRW50cnlMaW1pdCAgICBVbnNpZ25lZDMyLAogICAgIG5sbUNvbmZpZ0xvZ0FkbWluU3RhdHVzICAgSU5URUdFUiwKLQotCiAgICAgbmxtQ29uZmlnTG9nT3BlclN0YXR1cyAgICBJTlRFR0VSLAogICAgIG5sbUNvbmZpZ0xvZ1N0b3JhZ2VUeXBlICAgU3RvcmFnZVR5cGUsCiAgICAgbmxtQ29uZmlnTG9nRW50cnlTdGF0dXMgICBSb3dTdGF0dXMKQEAgLTE3Miw4ICsxNjUsNiBAQAogICAgICBOb3RpZmljYXRpb25zIGluIHRoZSBsb2csIHRoZSBvbGRlc3QgTm90aWZpY2F0aW9ucyBhcmUgZGlzY2FyZGVkCiAgICAgIHRvIGJyaW5nIHRoZSBsb2cgZG93biB0byB0aGUgbmV3IGxpbWl0LgogCi0KLQogICAgICBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIG5vIGxpbWl0LgogCiAgICAgIFBsZWFzZSBiZSBhd2FyZSB0aGF0IGNvbnRlbnRpb24gYmV0d2VlbiBtdWx0aXBsZSBtYW5hZ2VycwpAQCAtMjIyLDggKzIxMyw2IEBACiAgICAgOjo9IHsgbmxtQ29uZmlnTG9nRW50cnkgNiB9CiAKIG5sbUNvbmZpZ0xvZ0VudHJ5U3RhdHVzIE9CSkVDVC1UWVBFCi0KLQogICAgIFNZTlRBWCAgICAgUm93U3RhdHVzCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtMjcyLDggKzI2MSw2IEBACiBubG1TdGF0c0xvZ1RhYmxlIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgTmxtU3RhdHNMb2dFbnRyeQogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCi0KLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAiQSB0YWJsZSBvZiBOb3RpZmljYXRpb24gbG9nIHN0YXRpc3RpY3MgZW50cmllcy4iCkBAIC0zMTUsMTMgKzMwMiwxMyBAQAogICAgICBubG1Db25maWdHbG9iYWxBZ2VPdXQuIgogICAgIDo6PSB7IG5sbVN0YXRzTG9nRW50cnkgMiB9CiAKLQogLS0KIC0tIExvZyBTZWN0aW9uCiAtLQogCiAtLQogLS0gTG9nIFRhYmxlCisKIC0tCiAKIG5sbUxvZ1RhYmxlIE9CSkVDVC1UWVBFCkBAIC0zNzAsOCArMzU3LDYgQEAKICAgICBJTkRFWCAgICAgICB7IG5sbUxvZ05hbWUsIG5sbUxvZ0luZGV4IH0KICAgICA6Oj0geyBubG1Mb2dUYWJsZSAxIH0KIAotCi0KIE5sbUxvZ0VudHJ5IDo6PSBTRVFVRU5DRSB7CiAgICAgbmxtTG9nSW5kZXggICAgICAgICAgICAgICAgVW5zaWduZWQzMiwKICAgICBubG1Mb2dUaW1lICAgICAgICAgICAgICAgICBUaW1lU3RhbXAsCkBAIC00MjEsNyArNDA2LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBTTk1QIGVuZ2luZSBhdCB3aGljaCB0aGUgTm90aWZpY2F0aW9uCiAKLQogICAgICBvcmlnaW5hdGVkLgogCiAgICAgIElmIHRoZSBsb2cgY2FuIGNvbnRhaW4gTm90aWZpY2F0aW9ucyBmcm9tIG9ubHkgb25lIGVuZ2luZQpAQCAtNDcwLDggKzQ1NCw2IEBACiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQogICAgICAiSWYgdGhlIE5vdGlmaWNhdGlvbiB3YXMgcmVjZWl2ZWQgaW4gYSBwcm90b2NvbCB3aGljaCBoYXMgYQogICAgICAgY29udGV4dEVuZ2luZUlEIGVsZW1lbnQgbGlrZSBTTk1QdjMsIHRoaXMgb2JqZWN0IGhhcyB0aGF0IHZhbHVlLgogICAgICAgT3RoZXJ3aXNlIGl0cyB2YWx1ZSBpcyBhIHplcm8tbGVuZ3RoIHN0cmluZy4iCkBAIC01MjEsNyArNTAzLDYgQEAKIAogTmxtTG9nVmFyaWFibGVFbnRyeSA6Oj0gU0VRVUVOQ0UgewogCi0KICAgICBubG1Mb2dWYXJpYWJsZUluZGV4ICAgICAgICAgICAgICBVbnNpZ25lZDMyLAogICAgIG5sbUxvZ1ZhcmlhYmxlSUQgICAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAogICAgIG5sbUxvZ1ZhcmlhYmxlVmFsdWVUeXBlICAgICAgICAgIElOVEVHRVIsCkBAIC01NzAsOCArNTUxLDYgQEAKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCiAgICAgICJUaGUgdmFsdWUgd2hlbiBubG1Mb2dWYXJpYWJsZVR5cGUgaXMgJ2NvdW50ZXIzMicuIgogICAgIDo6PSB7IG5sbUxvZ1ZhcmlhYmxlRW50cnkgNCB9CiAKQEAgLTYyMSw3ICs2MDAsNiBAQAogICAgICBJUHY2IGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQgdXNpbmcgVEFkZHJlc3Mgb3IKICAgICAgSW5ldEFkZHJlc3MsIGFuZCBzbyB0aGUgdW5kZXJseWluZyBkYXRhdHlwZSBpcwogCi0KICAgICAgT0NURVQgU1RSSU5HLCBhbmQgdGhlaXIgdmFsdWUgd291bGQgYmUgc3RvcmVkIGluCiAgICAgIHRoZSBubG1Mb2dWYXJpYWJsZU9jdGV0U3RyaW5nVmFsIGNvbHVtbi4iCiAgICAgOjo9IHsgbmxtTG9nVmFyaWFibGVFbnRyeSA5IH0KQEAgLTY1MCw3ICs2MjgsNiBAQAogICAgICAiVGhlIHZhbHVlIHdoZW4gbmxtTG9nVmFyaWFibGVUeXBlIGlzICdvcGFxdWUnLiIKICAgICA6Oj0geyBubG1Mb2dWYXJpYWJsZUVudHJ5IDEyIH0KIAotCiAtLQogLS0gQ29uZm9ybWFuY2UKIC0tCkBAIC02NzEsNyArNjQ4LDYgQEAKICAgICAgICAgICB0aGUgTm90aWZpY2F0aW9uIExvZyBNSUIuIgogICAgICBNT0RVTEUgICAgLS0gdGhpcyBtb2R1bGUKIAotCiAgICAgICAgICAgTUFOREFUT1JZLUdST1VQUyB7CiAgICAgICAgICAgICAgICBub3RpZmljYXRpb25Mb2dDb25maWdHcm91cCwKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkxvZ1N0YXRzR3JvdXAsCkBAIC03MDQsNyArNjgwLDYgQEAKICAgICAgICAgICAiVGhpcyBncm91cCBpcyBtYW5kYXRvcnkgb24gc3lzdGVtcyB0aGF0IGtlZXAgd2FsbCBjbG9jawogICAgICAgICAgIGRhdGUgYW5kIHRpbWUgYW5kIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgb24gc3lzdGVtcyB0aGF0CiAgICAgICAgICAgZG8gbm90IGhhdmUgYSB3YWxsIGNsb2NrIGRhdGUuIgotCiAgICAgIDo6PSB7IG5vdGlmaWNhdGlvbkxvZ01JQkNvbXBsaWFuY2VzIDEgfQogCiAtLSBVbml0cyBvZiBDb25mb3JtYW5jZQpAQCAtNzIwLDggKzY5NSw2IEBACiAgICAgICAgICAgbmxtQ29uZmlnTG9nU3RvcmFnZVR5cGUsCiAgICAgICAgICAgbmxtQ29uZmlnTG9nRW50cnlTdGF0dXMKICAgICAgfQotCi0KICAgICAgU1RBVFVTIGN1cnJlbnQKICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAiTm90aWZpY2F0aW9uIGxvZyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuIgpAQCAtNzcwLDggKzc0Myw2IEBACiAgICAgICAgICAgbmxtTG9nRGF0ZUFuZFRpbWUKICAgICAgfQogICAgICBTVEFUVVMgY3VycmVudAotCi0KICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAiQ29uZGl0aW9uYWxseSBtYW5kYXRvcnkgbm90aWZpY2F0aW9uIGxvZyBkYXRhLgogICAgICAgICAgIFRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IG9uIHN5c3RlbXMgdGhhdCBrZWVwIHdhbGwKZGlmZiAtLWdpdCBhL21pYnMvU05NUC1UTFMtVE0tTUlCLnR4dCBiL21pYnMvU05NUC1UTFMtVE0tTUlCLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhkZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0CkBAIC0wLDAgKzEsMTA2NSBAQAorU05NUC1UTFMtVE0tTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCitJTVBPUlRTCisgICAgTU9EVUxFLUlERU5USVRZLCBPQkpFQ1QtVFlQRSwKKyAgICBPQkpFQ1QtSURFTlRJVFksIG1pYi0yLCBzbm1wRG9tYWlucywKKyAgICBDb3VudGVyMzIsIFVuc2lnbmVkMzIsIEdhdWdlMzIsIE5PVElGSUNBVElPTi1UWVBFCisgICAgICBGUk9NIFNOTVB2Mi1TTUkgICAgICAgICAgICAgICAgIC0tIFJGQyAyNTc4IG9yIGFueSB1cGRhdGUgdGhlcmVvZgorICAgIFRFWFRVQUwtQ09OVkVOVElPTiwgVGltZVN0YW1wLCBSb3dTdGF0dXMsIFN0b3JhZ2VUeXBlLAorICAgIEF1dG9ub21vdXNUeXBlCisgICAgICBGUk9NIFNOTVB2Mi1UQyAgICAgICAgICAgICAgICAgIC0tIFJGQyAyNTc5IG9yIGFueSB1cGRhdGUgdGhlcmVvZgorICAgIE1PRFVMRS1DT01QTElBTkNFLCBPQkpFQ1QtR1JPVVAsIE5PVElGSUNBVElPTi1HUk9VUAorICAgICAgRlJPTSBTTk1QdjItQ09ORiAgICAgICAgICAgICAgICAtLSBSRkMgMjU4MCBvciBhbnkgdXBkYXRlIHRoZXJlb2YKKyAgICBTbm1wQWRtaW5TdHJpbmcKKyAgICAgIEZST00gU05NUC1GUkFNRVdPUkstTUlCICAgICAgICAgLS0gUkZDIDM0MTEgb3IgYW55IHVwZGF0ZSB0aGVyZW9mCisgICAgc25tcFRhcmdldFBhcmFtc05hbWUsIHNubXBUYXJnZXRBZGRyTmFtZQorICAgICAgRlJPTSBTTk1QLVRBUkdFVC1NSUIgICAgICAgICAgICAtLSBSRkMgMzQxMyBvciBhbnkgdXBkYXRlIHRoZXJlb2YKKyAgICA7CisKK3NubXBUbHN0bU1JQiBNT0RVTEUtSURFTlRJVFkKKyAgICBMQVNULVVQREFURUQgIjIwMTEwNzE5MDAwMFoiCisKKyAgICBPUkdBTklaQVRJT04gIklTTVMgV29ya2luZyBHcm91cCIKKyAgICBDT05UQUNULUlORk8gIldHLUVNYWlsOiAgIGlzbXNAbGlzdHMuaWV0Zi5vcmcKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmliZTogIGlzbXMtcmVxdWVzdEBsaXN0cy5pZXRmLm9yZworCisgICAgICAgICAgICAgICAgICBDaGFpcnM6CisgICAgICAgICAgICAgICAgICAgICBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKKyAgICAgICAgICAgICAgICAgICAgIEphY29icyBVbml2ZXJzaXR5IEJyZW1lbgorICAgICAgICAgICAgICAgICAgICAgQ2FtcHVzIFJpbmcgMQorICAgICAgICAgICAgICAgICAgICAgMjg3MjUgQnJlbWVuCisgICAgICAgICAgICAgICAgICAgICBHZXJtYW55CisgICAgICAgICAgICAgICAgICAgICArNDkgNDIxIDIwMC0zNTg3CisgICAgICAgICAgICAgICAgICAgICBqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGUKKworICAgICAgICAgICAgICAgICAgICAgUnVzcyBNdW5keQorICAgICAgICAgICAgICAgICAgICAgU1BBUlRBLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICA3MTEwIFNhbXVlbCBNb3JzZSBEcml2ZQorICAgICAgICAgICAgICAgICAgICAgQ29sdW1iaWEsIE1EICAyMTA0NgorICAgICAgICAgICAgICAgICAgICAgVVNBCisKKyAgICAgICAgICAgICAgICAgIEVkaXRvcjoKKyAgICAgICAgICAgICAgICAgICAgIFdlcyBIYXJkYWtlcgorICAgICAgICAgICAgICAgICAgICAgU1BBUlRBLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICBQLk8uIEJveCAzODIKKyAgICAgICAgICAgICAgICAgICAgIERhdmlzLCBDQSAgOTU2MTcKKyAgICAgICAgICAgICAgICAgICAgIFVTQQorICAgICAgICAgICAgICAgICAgICAgaWV0ZkBoYXJkYWtlcnMubmV0CisgICAgICAgICAgICAgICAgICAiCisgICAgREVTQ1JJUFRJT04gICIKKyAgICAgICAgVGhlIFRMUyBUcmFuc3BvcnQgTW9kZWwgTUlCCisKKyAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZAorICAgICAgICBhcyBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgICAgICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sIGFuZCBzdWJqZWN0CisgICAgICAgIHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UKKyAgICAgICAgc2V0IGZvcnRoIGluIFNlY3Rpb24gNC5jIG9mIHRoZSBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucworICAgICAgICBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cworICAgICAgICAoaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTEwNzE5MDAwMFoiCisgICAgICAgREVTQ1JJUFRJT04gICJUaGlzIHZlcnNpb24gb2YgdGhpcyBNSUIgbW9kdWxlIGlzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgIFJGQyA2MzUzOyBzZWUgdGhlIFJGQyBpdHNlbGYgZm9yIGZ1bGwgbGVnYWwKKyAgICAgICAgICAgICAgICAgICAgIG5vdGljZXMuICBUaGUgb25seSBjaGFuZ2Ugd2FzIHRvIGludHJvZHVjZQorICAgICAgICAgICAgICAgICAgICAgbmV3IHdvcmRpbmcgdG8gcmVmbGVjdCByZXF1aXJlIGNoYW5nZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICBJRE5BIGFkZHJlc3NlcyBpbiB0aGUgU25tcFRMU0FkZHJlc3MgVEMuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEwMDUwNzAwMDBaIgorICAgICAgIERFU0NSSVBUSU9OICAiVGhpcyB2ZXJzaW9uIG9mIHRoaXMgTUlCIG1vZHVsZSBpcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgICBSRkMgNTk1Mzsgc2VlIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsCisgICAgICAgICAgICAgICAgICAgICBub3RpY2VzLiIKKyAgICA6Oj0geyBtaWItMiAxOTggfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tIHN1YnRyZWVzIG9mIHRoZSBTTk1QLVRMUy1UTS1NSUIKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzbm1wVGxzdG1Ob3RpZmljYXRpb25zIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU1JQiAwIH0KK3NubXBUbHN0bUlkZW50aXRpZXMgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtTUlCIDEgfQorc25tcFRsc3RtT2JqZWN0cyAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1NSUIgMiB9Citzbm1wVGxzdG1Db25mb3JtYW5jZSAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU1JQiAzIH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSBzbm1wVGxzdG1PYmplY3RzIC0gT2JqZWN0cworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NubXBUTFNUQ1BEb21haW4gT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgU05NUCBvdmVyIFRMUyB2aWEgVENQIHRyYW5zcG9ydCBkb21haW4uICBUaGUKKyAgICAgICAgY29ycmVzcG9uZGluZyB0cmFuc3BvcnQgYWRkcmVzcyBpcyBvZiB0eXBlIFNubXBUTFNBZGRyZXNzLgorCisgICAgICAgIFRoZSBzZWN1cml0eU5hbWUgcHJlZml4IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgc25tcFRMU1RDUERvbWFpbiBpcyAndGxzJy4gIFRoaXMgcHJlZml4IG1heSBiZSB1c2VkIGJ5CisgICAgICAgIHNlY3VyaXR5IG1vZGVscyBvciBvdGhlciBjb21wb25lbnRzIHRvIGlkZW50aWZ5IHdoaWNoIHNlY3VyZQorICAgICAgICB0cmFuc3BvcnQgaW5mcmFzdHJ1Y3R1cmUgYXV0aGVudGljYXRlZCBhIHNlY3VyaXR5TmFtZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAiUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIgorICAgIDo6PSB7IHNubXBEb21haW5zIDggfQorCitzbm1wRFRMU1VEUERvbWFpbiBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBTTk1QIG92ZXIgRFRMUyB2aWEgVURQIHRyYW5zcG9ydCBkb21haW4uICBUaGUKKyAgICAgICAgY29ycmVzcG9uZGluZyB0cmFuc3BvcnQgYWRkcmVzcyBpcyBvZiB0eXBlIFNubXBUTFNBZGRyZXNzLgorCisgICAgICAgIFRoZSBzZWN1cml0eU5hbWUgcHJlZml4IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgc25tcERUTFNVRFBEb21haW4gaXMgJ2R0bHMnLiAgVGhpcyBwcmVmaXggbWF5IGJlIHVzZWQgYnkKKyAgICAgICAgc2VjdXJpdHkgbW9kZWxzIG9yIG90aGVyIGNvbXBvbmVudHMgdG8gaWRlbnRpZnkgd2hpY2ggc2VjdXJlCisgICAgICAgIHRyYW5zcG9ydCBpbmZyYXN0cnVjdHVyZSBhdXRoZW50aWNhdGVkIGEgc2VjdXJpdHlOYW1lLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICJSRkMgMjU3OTogVGV4dHVhbCBDb252ZW50aW9ucyBmb3IgU01JdjIiCisgICAgOjo9IHsgc25tcERvbWFpbnMgOSB9CisKK1NubXBUTFNBZGRyZXNzIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KKyAgICBESVNQTEFZLUhJTlQgIjFhIgorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlJlcHJlc2VudHMgYW4gSVB2NCBhZGRyZXNzLCBhbiBJUHY2IGFkZHJlc3MsIG9yIGEKKyAgICAgICAgIFVTLUFTQ0lJLWVuY29kZWQgaG9zdG5hbWUgYW5kIHBvcnQgbnVtYmVyLgorCisgICAgICAgIEFuIElQdjQgYWRkcmVzcyBtdXN0IGJlIGluIGRvdHRlZCBkZWNpbWFsIGZvcm1hdCBmb2xsb3dlZCBieSBhCisgICAgICAgIGNvbG9uICc6JyAoVVMtQVNDSUkgY2hhcmFjdGVyIDB4M0EpIGFuZCBhIGRlY2ltYWwgcG9ydCBudW1iZXIKKyAgICAgICAgaW4gVVMtQVNDSUkuCisKKyAgICAgICAgQW4gSVB2NiBhZGRyZXNzIG11c3QgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgZm9ybWF0IChhcyBkZXNjcmliZWQKKyAgICAgICAgaW4gUkZDIDU5NTIpLCBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyAoJ1snLCBVUy1BU0NJSQorICAgICAgICBjaGFyYWN0ZXIgMHg1QiwgYW5kICddJywgVVMtQVNDSUkgY2hhcmFjdGVyIDB4NUQpLCBmb2xsb3dlZCBieQorICAgICAgICBhIGNvbG9uICc6JyAoVVMtQVNDSUkgY2hhcmFjdGVyIDB4M0EpIGFuZCBhIGRlY2ltYWwgcG9ydCBudW1iZXIKKyAgICAgICAgaW4gVVMtQVNDSUkuCisKKyAgICAgICAgQSBob3N0bmFtZSBpcyBhbHdheXMgaW4gVVMtQVNDSUkgKGFzIHBlciBSRkMgMTEyMyk7CisgICAgICAgIGludGVybmF0aW9uYWxpemVkIGhvc3RuYW1lcyBhcmUgZW5jb2RlZCBhcyBBLWxhYmVscyBhcyBzcGVjaWZpZWQKKyAgICAgICAgaW4gIFJGQyA1ODkwLiAgVGhlIGhvc3RuYW1lIGlzIGZvbGxvd2VkIGJ5IGEKKyAgICAgICAgY29sb24gJzonIChVUy1BU0NJSSBjaGFyYWN0ZXIgMHgzQSkgYW5kIGEgZGVjaW1hbCBwb3J0IG51bWJlcgorICAgICAgICBpbiBVUy1BU0NJSS4gIFRoZSBuYW1lIFNIT1VMRCBiZSBmdWxseSBxdWFsaWZpZWQgd2hlbmV2ZXIKKyAgICAgICAgcG9zc2libGUuCisKKyAgICAgICAgVmFsdWVzIG9mIHRoaXMgdGV4dHVhbCBjb252ZW50aW9uIG1heSBub3QgYmUgZGlyZWN0bHkgdXNhYmxlCisgICAgICAgIGFzIHRyYW5zcG9ydC1sYXllciBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLCBhbmQgbWF5IHJlcXVpcmUKKyAgICAgICAgcnVuLXRpbWUgcmVzb2x1dGlvbi4gIEFzIHN1Y2gsIGFwcGxpY2F0aW9ucyB0aGF0IHdyaXRlIHRoZW0KKyAgICAgICAgbXVzdCBiZSBwcmVwYXJlZCBmb3IgaGFuZGxpbmcgZXJyb3JzIGlmIHN1Y2ggdmFsdWVzIGFyZSBub3QKKyAgICAgICAgc3VwcG9ydGVkLCBvciBjYW5ub3QgYmUgcmVzb2x2ZWQgKGlmIHJlc29sdXRpb24gb2NjdXJzIGF0IHRoZQorICAgICAgICB0aW1lIG9mIHRoZSBtYW5hZ2VtZW50IG9wZXJhdGlvbikuCisKKyAgICAgICAgVGhlIERFU0NSSVBUSU9OIGNsYXVzZSBvZiBUcmFuc3BvcnRBZGRyZXNzIG9iamVjdHMgdGhhdCBtYXkKKyAgICAgICAgaGF2ZSBTbm1wVExTQWRkcmVzcyB2YWx1ZXMgbXVzdCBmdWxseSBkZXNjcmliZSBob3cgKGFuZAorICAgICAgICB3aGVuKSBzdWNoIG5hbWVzIGFyZSB0byBiZSByZXNvbHZlZCB0byBJUCBhZGRyZXNzZXMgYW5kIHZpY2UKKyAgICAgICAgdmVyc2EuCisKKyAgICAgICAgVGhpcyB0ZXh0dWFsIGNvbnZlbnRpb24gU0hPVUxEIE5PVCBiZSB1c2VkIGRpcmVjdGx5IGluIG9iamVjdAorICAgICAgICBkZWZpbml0aW9ucyBzaW5jZSBpdCByZXN0cmljdHMgYWRkcmVzc2VzIHRvIGEgc3BlY2lmaWMKKyAgICAgICAgZm9ybWF0LiAgSG93ZXZlciwgaWYgaXQgaXMgdXNlZCwgaXQgTUFZIGJlIHVzZWQgZWl0aGVyIG9uIGl0cworICAgICAgICBvd24gb3IgaW4gY29uanVuY3Rpb24gd2l0aCBUcmFuc3BvcnRBZGRyZXNzVHlwZSBvcgorICAgICAgICBUcmFuc3BvcnREb21haW4gYXMgYSBwYWlyLgorCisgICAgICAgIFdoZW4gdGhpcyB0ZXh0dWFsIGNvbnZlbnRpb24gaXMgdXNlZCBhcyBhIHN5bnRheCBvZiBhbiBpbmRleAorICAgICAgICBvYmplY3QsIHRoZXJlIG1heSBiZSBpc3N1ZXMgd2l0aCB0aGUgbGltaXQgb2YgMTI4CisgICAgICAgIHN1Yi1pZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gU01JdjIgKFNURCA1OCkuICBJdCBpcyBSRUNPTU1FTkRFRAorICAgICAgICB0aGF0IGFsbCBNSUIgZG9jdW1lbnRzIHVzaW5nIHRoaXMgdGV4dHVhbCBjb252ZW50aW9uIG1ha2UKKyAgICAgICAgZXhwbGljaXQgYW55IGxpbWl0YXRpb25zIG9uIGluZGV4IGNvbXBvbmVudCBsZW5ndGhzIHRoYXQKKyAgICAgICAgbWFuYWdlbWVudCBzb2Z0d2FyZSBtdXN0IG9ic2VydmUuICBUaGlzIG1heSBiZSBkb25lIGVpdGhlciBieQorCisgICAgICAgIGluY2x1ZGluZyBTSVpFIGNvbnN0cmFpbnRzIG9uIHRoZSBpbmRleCBjb21wb25lbnRzIG9yIGJ5CisgICAgICAgIHNwZWNpZnlpbmcgYXBwbGljYWJsZSBjb25zdHJhaW50cyBpbiB0aGUgY29uY2VwdHVhbCByb3cKKyAgICAgICAgREVTQ1JJUFRJT04gY2xhdXNlIG9yIGluIHRoZSBzdXJyb3VuZGluZyBkb2N1bWVudGF0aW9uLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICJSRkMgMTEyMzogUmVxdWlyZW1lbnRzIGZvciBJbnRlcm5ldCBIb3N0cyAtIEFwcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgICAgICBTdXBwb3J0CisgICAgICAgUkZDIDU4OTA6IEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBmb3IgQXBwbGljYXRpb25zIChJRE5BKToKKyAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbnMgYW5kIERvY3VtZW50IEZyYW1ld29yaworICAgICAgIFJGQyA1OTUyOiBBIFJlY29tbWVuZGF0aW9uIGZvciBJUHY2IEFkZHJlc3MgVGV4dCBSZXByZXNlbnRhdGlvbgorICAgICAgIgorICAgIFNZTlRBWCAgICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjI1NSkpCisKK1NubXBUTFNGaW5nZXJwcmludCA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCisgICAgRElTUExBWS1ISU5UICIxeDoxeCIKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgIkEgZmluZ2VycHJpbnQgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byB1bmlxdWVseSByZWZlcmVuY2UKKyAgICAgICBvdGhlciBkYXRhIG9mIHBvdGVudGlhbGx5IGFyYml0cmFyeSBsZW5ndGguCisKKyAgICAgICBBbiBTbm1wVExTRmluZ2VycHJpbnQgdmFsdWUgaXMgY29tcG9zZWQgb2YgYSAxLW9jdGV0IGhhc2hpbmcKKyAgICAgICBhbGdvcml0aG0gaWRlbnRpZmllciBmb2xsb3dlZCBieSB0aGUgZmluZ2VycHJpbnQgdmFsdWUuICBUaGUKKyAgICAgICBvY3RldCB2YWx1ZSBlbmNvZGVkIGlzIHRha2VuIGZyb20gdGhlIElBTkEgVExTIEhhc2hBbGdvcml0aG0KKyAgICAgICBSZWdpc3RyeSAoUkZDIDUyNDYpLiAgVGhlIHJlbWFpbmluZyBvY3RldHMgYXJlIGZpbGxlZCB1c2luZyB0aGUKKyAgICAgICByZXN1bHRzIG9mIHRoZSBoYXNoaW5nIGFsZ29yaXRobS4KKworICAgICAgIFRoaXMgVEVYVFVBTC1DT05WRU5USU9OIGFsbG93cyBmb3IgYSB6ZXJvLWxlbmd0aCAoYmxhbmspCisgICAgICAgU25tcFRMU0ZpbmdlcnByaW50IHZhbHVlIGZvciB1c2UgaW4gdGFibGVzIHdoZXJlIHRoZQorICAgICAgIGZpbmdlcnByaW50IHZhbHVlIG1heSBiZSBvcHRpb25hbC4gIE1JQiBkZWZpbml0aW9ucyBvcgorICAgICAgIGltcGxlbWVudGF0aW9ucyBtYXkgcmVmdXNlIHRvIGFjY2VwdCBhIHplcm8tbGVuZ3RoIHZhbHVlIGFzCisgICAgICAgYXBwcm9wcmlhdGUuIgorICAgICAgIFJFRkVSRU5DRSAiUkZDIDUyNDY6IFRoZSBUcmFuc3BvcnQgTGF5ZXIKKyAgICAgICAgICAgICAgICAgIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yCisgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzLworICAgICAgICIKKyAgICBTWU5UQVggT0NURVQgU1RSSU5HIChTSVpFICgwLi4yNTUpKQorCistLSBJZGVudGl0aWVzIGZvciB1c2UgaW4gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlCisKK3NubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIE9CSkVDVCBJREVOVElGSUVSCisgICAgOjo9IHsgc25tcFRsc3RtSWRlbnRpdGllcyAxIH0KKworc25tcFRsc3RtQ2VydFNwZWNpZmllZCBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIkRpcmVjdGx5IHNwZWNpZmllcyB0aGUgdG1TZWN1cml0eU5hbWUgdG8gYmUgdXNlZCBmb3IKKyAgICAgICAgICAgICAgICAgIHRoaXMgY2VydGlmaWNhdGUuICBUaGUgdmFsdWUgb2YgdGhlIHRtU2VjdXJpdHlOYW1lCisgICAgICAgICAgICAgICAgICB0byB1c2UgaXMgc3BlY2lmaWVkIGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhCisgICAgICAgICAgICAgICAgICBjb2x1bW4uICBUaGUgc25tcFRsc3RtQ2VydFRvVFNORGF0YSBjb2x1bW4gbXVzdAorICAgICAgICAgICAgICAgICAgY29udGFpbiBhIG5vbi16ZXJvIGxlbmd0aCBTbm1wQWRtaW5TdHJpbmcgY29tcGxpYW50CisKKyAgICAgICAgICAgICAgICAgIHZhbHVlIG9yIHRoZSBtYXBwaW5nIGRlc2NyaWJlZCBpbiB0aGlzIHJvdyBtdXN0IGJlCisgICAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGEgZmFpbHVyZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgMSB9CisKK3NubXBUbHN0bUNlcnRTQU5SRkM4MjJOYW1lIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgcmZjODIyTmFtZSB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSByZmM4MjJOYW1lIGlzCisgICAgICAgICAgICAgICAgICBwYXNzZWQgdW5hbHRlcmVkIGJ1dCB0aGUgaG9zdC1wYXJ0IG9mIHRoZSBuYW1lIG11c3QKKyAgICAgICAgICAgICAgICAgIGJlIHBhc3NlZCBpbiBsb3dlcmNhc2UuICBUaGlzIG1hcHBpbmcgcmVzdWx0cyBpbiBhCisgICAgICAgICAgICAgICAgICAxOjEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBlcXVpdmFsZW50IHN1YmplY3RBbHROYW1lCisgICAgICAgICAgICAgICAgICByZmM4MjJOYW1lIHZhbHVlcyBhbmQgdG1TZWN1cml0eU5hbWUgdmFsdWVzIGV4Y2VwdAorICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgaG9zdC1wYXJ0IG9mIHRoZSBuYW1lIE1VU1QgYmUgcGFzc2VkIGluCisgICAgICAgICAgICAgICAgICBsb3dlcmNhc2UuCisKKyAgICAgICAgICAgICAgICAgIEV4YW1wbGUgcmZjODIyTmFtZSBGaWVsZDogIEZvb0JhckBFeGFtcGxlLkNPTQorICAgICAgICAgICAgICAgICAgaXMgbWFwcGVkIHRvIHRtU2VjdXJpdHlOYW1lOiBGb29CYXJAZXhhbXBsZS5jb20uIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDIgfQorCitzbm1wVGxzdG1DZXJ0U0FORE5TTmFtZSBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIGROU05hbWUgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUgYWZ0ZXIgZmlyc3QgY29udmVydGluZyBpdCB0byBhbGwKKyAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZSAoUkZDIDUyODAgZG9lcyBub3Qgc3BlY2lmeSBjb252ZXJ0aW5nIHRvCisgICAgICAgICAgICAgICAgICBsb3dlcmNhc2Ugc28gdGhpcyBpbnZvbHZlcyBhbiBleHRyYSBzdGVwKS4gIFRoaXMKKyAgICAgICAgICAgICAgICAgIG1hcHBpbmcgcmVzdWx0cyBpbiBhIDE6MSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICBzdWJqZWN0QWx0TmFtZSBkTlNOYW1lIHZhbHVlcyBhbmQgdGhlIHRtU2VjdXJpdHlOYW1lCisgICAgICAgICAgICAgICAgICB2YWx1ZXMuIgorICAgIFJFRkVSRU5DRSAiUkZDIDUyODAgLSBJbnRlcm5ldCBYLjUwOSBQdWJsaWMgS2V5IEluZnJhc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2VydGlmaWNhdGUgYW5kIENlcnRpZmljYXRlIFJldm9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IChDUkwpIFByb2ZpbGUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDMgfQorCitzbm1wVGxzdG1DZXJ0U0FOSXBBZGRyZXNzIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgaVBBZGRyZXNzIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lIGJ5IHRyYW5zZm9ybWluZyB0aGUgYmluYXJ5IGVuY29kZWQKKyAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgICAgMSkgZm9yIElQdjQsIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgaW50byBhCisgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsLWRvdHRlZCBxdWFkIGFkZHJlc3MgKGUuZy4sICcxOTIuMC4yLjEnKS4KKworICAgICAgICAgICAgICAgICAgMikgZm9yIElQdjYgYWRkcmVzc2VzLCB0aGUgdmFsdWUgaXMgY29udmVydGVkIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgMzItY2hhcmFjdGVyIGFsbCBsb3dlcmNhc2UgaGV4YWRlY2ltYWwgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFueSBjb2xvbiBzZXBhcmF0b3JzLgorCisgICAgICAgICAgICAgICAgICBUaGlzIG1hcHBpbmcgcmVzdWx0cyBpbiBhIDE6MSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICBzdWJqZWN0QWx0TmFtZSBpUEFkZHJlc3MgdmFsdWVzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lIHZhbHVlcy4KKworICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBsZW5ndGggb2YgYW4gZW5jb2RlZCBJUHY2IGFkZHJlc3MgaXMKKyAgICAgICAgICAgICAgICAgIHRoZSBtYXhpbXVtIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlIFZpZXctQmFzZWQKKyAgICAgICAgICAgICAgICAgIEFjY2VzcyBDb250cm9sIE1vZGVsIChWQUNNKS4gIFVzaW5nIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwncyBzdXBwb3J0IGZvciB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgIHByZWZpeGVzIChzZWUgdGhlIFNOTVAtVFNNLU1JQidzCisgICAgICAgICAgICAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBvYmplY3QgZm9yIGRldGFpbHMpCisgICAgICAgICAgICAgICAgICB3aWxsIHJlc3VsdCBpbiBzZWN1cml0eU5hbWUgbGVuZ3RocyB0aGF0IGV4Y2VlZCB3aGF0CisgICAgICAgICAgICAgICAgICBWQUNNIGNhbiBoYW5kbGUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDQgfQorCitzbm1wVGxzdG1DZXJ0U0FOQW55IE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiTWFwcyBhbnkgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIG1hcHBpbmcgYWxnb3JpdGhtczoKKworICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgIHwgQWxnb3JpdGhtICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICAgICAgfCByZmM4MjJOYW1lIHwgc25tcFRsc3RtQ2VydFNBTlJGQzgyMk5hbWUgfAorICAgICAgICAgICAgICAgICAgfCBkTlNOYW1lICAgIHwgc25tcFRsc3RtQ2VydFNBTkROU05hbWUgICAgfAorICAgICAgICAgICAgICAgICAgfCBpUEFkZHJlc3MgIHwgc25tcFRsc3RtQ2VydFNBTklwQWRkcmVzcyAgfAorICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbWF0Y2hpbmcgc3ViamVjdEFsdE5hbWUgdmFsdWUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBvZiB0aGUgYWJvdmUgdHlwZXMgTVVTVCBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgIGRlcml2aW5nIHRoZSB0bVNlY3VyaXR5TmFtZS4gIFRoZSBtYXBwaW5nIGFsZ29yaXRobQorICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSAnQWxnb3JpdGhtJyBjb2x1bW4gTVVTVCBiZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgICBkZXJpdmUgdGhlIHRtU2VjdXJpdHlOYW1lLgorCisgICAgICAgICAgICAgICAgICBUaGlzIG1hcHBpbmcgcmVzdWx0cyBpbiBhIDE6MSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICBzdWJqZWN0QWx0TmFtZSB2YWx1ZXMgYW5kIHRtU2VjdXJpdHlOYW1lIHZhbHVlcy4gIFRoZQorICAgICAgICAgICAgICAgICAgdGhyZWUgc3ViLW1hcHBpbmcgYWxnb3JpdGhtcyBwcm9kdWNlZCBieSB0aGlzCisgICAgICAgICAgICAgICAgICBjb21iaW5lZCBhbGdvcml0aG0gY2Fubm90IHByb2R1Y2UgY29uZmxpY3RpbmcKKyAgICAgICAgICAgICAgICAgIHJlc3VsdHMgYmV0d2VlbiB0aGVtc2VsdmVzLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyA1IH0KKworc25tcFRsc3RtQ2VydENvbW1vbk5hbWUgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJNYXBzIGEgY2VydGlmaWNhdGUncyBDb21tb25OYW1lIHRvIGEgdG1TZWN1cml0eU5hbWUKKyAgICAgICAgICAgICAgICAgIGFmdGVyIGNvbnZlcnRpbmcgaXQgdG8gYSBVVEYtOCBlbmNvZGluZy4gIFRoZSB1c2FnZQorICAgICAgICAgICAgICAgICAgb2YgQ29tbW9uTmFtZXMgaXMgZGVwcmVjYXRlZCBhbmQgdXNlcnMgYXJlCisgICAgICAgICAgICAgICAgICBlbmNvdXJhZ2VkIHRvIHVzZSBzdWJqZWN0QWx0TmFtZSBtYXBwaW5nIG1ldGhvZHMKKyAgICAgICAgICAgICAgICAgIGluc3RlYWQuICBUaGlzIG1hcHBpbmcgcmVzdWx0cyBpbiBhIDE6MQorCisgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGNlcnRpZmljYXRlIENvbW1vbk5hbWUgdmFsdWVzCisgICAgICAgICAgICAgICAgICBhbmQgdG1TZWN1cml0eU5hbWUgdmFsdWVzLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyA2IH0KKworLS0gVGhlIHNubXBUbHN0bVNlc3Npb24gR3JvdXAKKworc25tcFRsc3RtU2Vzc2lvbiAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtT2JqZWN0cyAxIH0KKworc25tcFRsc3RtU2Vzc2lvbk9wZW5zICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIG9wZW5TZXNzaW9uKCkgcmVxdWVzdCBoYXMgYmVlbiBleGVjdXRlZAorICAgICAgIGFzIGEgKEQpVExTIGNsaWVudCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBvcgorICAgICAgIGZhaWxlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiAxIH0KKworc25tcFRsc3RtU2Vzc2lvbkNsaWVudENsb3NlcyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYSBjbG9zZVNlc3Npb24oKSByZXF1ZXN0IGhhcyBiZWVuCisgICAgICAgIGV4ZWN1dGVkIGFzIGEgKEQpVExTIGNsaWVudCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0CisgICAgICAgIHN1Y2NlZWRlZCBvciBmYWlsZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gMiB9CisKK3NubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBvcGVuU2Vzc2lvbigpIHJlcXVlc3QgZmFpbGVkIHRvIG9wZW4gYQorICAgICAgICBzZXNzaW9uIGFzIGEgKEQpVExTIGNsaWVudCwgZm9yIGFueSByZWFzb24uIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gMyB9CisKK3NubXBUbHN0bVNlc3Npb25BY2NlcHRzICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGEgKEQpVExTIHNlcnZlciBoYXMgYWNjZXB0ZWQgYSBuZXcKKyAgICAgICBjb25uZWN0aW9uIGZyb20gYSBjbGllbnQgYW5kIGhhcyByZWNlaXZlZCBhdCBsZWFzdCBvbmUgU05NUAorICAgICAgIG1lc3NhZ2UgdGhyb3VnaCBpdC4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA0IH0KKworc25tcFRsc3RtU2Vzc2lvblNlcnZlckNsb3NlcyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYSBjbG9zZVNlc3Npb24oKSByZXF1ZXN0IGhhcyBiZWVuCisgICAgICAgIGV4ZWN1dGVkIGFzIGEgKEQpVExTIHNlcnZlciwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0CisgICAgICAgIHN1Y2NlZWRlZCBvciBmYWlsZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gNSB9CisKK3NubXBUbHN0bVNlc3Npb25Ob1Nlc3Npb25zICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBvdXRnb2luZyBtZXNzYWdlIHdhcyBkcm9wcGVkIGJlY2F1c2UKKyAgICAgICAgdGhlIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgdG1TdGF0ZVJlZmVyZW5jZSB3YXMgbm8KKyAgICAgICAgbG9uZ2VyIChvciB3YXMgbmV2ZXIpIGF2YWlsYWJsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA2IH0KKworc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDbGllbnRDZXJ0aWZpY2F0ZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gaW5jb21pbmcgc2Vzc2lvbiB3YXMgbm90IGVzdGFibGlzaGVkCisgICAgICAgIG9uIGEgKEQpVExTIHNlcnZlciBiZWNhdXNlIHRoZSBwcmVzZW50ZWQgY2xpZW50IGNlcnRpZmljYXRlCisgICAgICAgIHdhcyBpbnZhbGlkLiAgUmVhc29ucyBmb3IgaW52YWxpZGF0aW9uIGluY2x1ZGUsIGJ1dCBhcmUgbm90CisgICAgICAgIGxpbWl0ZWQgdG8sIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBmYWlsdXJlcyBvciBsYWNrIG9mIGEKKyAgICAgICAgc3VpdGFibGUgbWFwcGluZyByb3cgaW4gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDcgfQorCitzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIG91dGdvaW5nIHNlc3Npb24gd2FzIG5vdCBlc3RhYmxpc2hlZAorICAgICAgICAgb24gYSAoRClUTFMgY2xpZW50IGJlY2F1c2UgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQKKyAgICAgICAgIGJ5IGFuIFNOTVAgb3ZlciAoRClUTFMgc2VydmVyIHdhcyBpbnZhbGlkIGJlY2F1c2Ugbm8KKyAgICAgICAgIGNvbmZpZ3VyZWQgZmluZ2VycHJpbnQgb3IgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKENBKSB3YXMKKyAgICAgICAgIGFjY2VwdGFibGUgdG8gdmFsaWRhdGUgaXQuCisgICAgICAgICBUaGlzIG1heSByZXN1bHQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gZW50cnkgaW4gdGhlCisgICAgICAgICBzbm1wVGxzdG1BZGRyVGFibGUgb3IgYmVjYXVzZSBubyBwYXRoIGNvdWxkIGJlIGZvdW5kIHRvIGEKKyAgICAgICAgIGtub3duIENBLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDggfQorCitzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBvdXRnb2luZyBzZXNzaW9uIHdhcyBub3QgZXN0YWJsaXNoZWQKKyAgICAgICAgIG9uIGEgKEQpVExTIGNsaWVudCBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgcHJlc2VudGVkCisgICAgICAgICBieSBhbiBTTk1QIG92ZXIgKEQpVExTIHNlcnZlciBjb3VsZCBub3QgYmUgdmFsaWRhdGVkIGV2ZW4gaWYKKyAgICAgICAgIHRoZSBmaW5nZXJwcmludCBvciBleHBlY3RlZCB2YWxpZGF0aW9uIHBhdGggd2FzIGtub3duLiAgVGhhdAorICAgICAgICAgaXMsIGEgY3J5cHRvZ3JhcGhpYyB2YWxpZGF0aW9uIGVycm9yIG9jY3VycmVkIGR1cmluZworICAgICAgICAgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBwcm9jZXNzaW5nLgorCisgICAgICAgIFJlYXNvbnMgZm9yIGludmFsaWRhdGlvbiBpbmNsdWRlLCBidXQgYXJlIG5vdAorICAgICAgICBsaW1pdGVkIHRvLCBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZmFpbHVyZXMuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gOSB9CisKK3NubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2FjaGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIG91dGdvaW5nIG1lc3NhZ2VzIGRyb3BwZWQgYmVjYXVzZSB0aGUKKyAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSByZWZlcnJlZCB0byBhbiBpbnZhbGlkIGNhY2hlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDEwIH0KKworLS0gQ29uZmlndXJhdGlvbiBPYmplY3RzCisKK3NubXBUbHN0bUNvbmZpZyAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1PYmplY3RzIDIgfQorCistLSBDZXJ0aWZpY2F0ZSBtYXBwaW5nCisKK3NubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1Db25maWcgMSB9CisKK3NubXBUbHN0bUNlcnRUb1RTTkNvdW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgR2F1Z2UzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgMSB9CisKK3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlTGFzdENoYW5nZWQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lU3RhbXAKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiBzeXNVcFRpbWUuMCB3aGVuIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSB3YXMKKyAgICAgICAgbGFzdCBtb2RpZmllZCB0aHJvdWdoIGFueSBtZWFucywgb3IgMCBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICAgICAgbW9kaWZpZWQgc2luY2UgdGhlIGNvbW1hbmQgcmVzcG9uZGVyIHdhcyBzdGFydGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgMiB9CisKK3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgU25tcFRsc3RtQ2VydFRvVFNORW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IGEgKEQpVExTIHNlcnZlciB0byBtYXAgdGhlIChEKVRMUworICAgICAgICBjbGllbnQncyBwcmVzZW50ZWQgWC41MDkgY2VydGlmaWNhdGUgdG8gYSB0bVNlY3VyaXR5TmFtZS4KKworICAgICAgICBPbiBhbiBpbmNvbWluZyAoRClUTFMvU05NUCBjb25uZWN0aW9uLCB0aGUgY2xpZW50J3MgcHJlc2VudGVkCisgICAgICAgIGNlcnRpZmljYXRlIG11c3QgZWl0aGVyIGJlIHZhbGlkYXRlZCBiYXNlZCBvbiBhbiBlc3RhYmxpc2hlZAorICAgICAgICB0cnVzdCBhbmNob3IsIG9yIGl0IG11c3QgZGlyZWN0bHkgbWF0Y2ggYSBmaW5nZXJwcmludCBpbiB0aGlzCisgICAgICAgIHRhYmxlLiAgVGhpcyB0YWJsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBtZWNoYW5pc21zIGZvcgorICAgICAgICBjb25maWd1cmluZyB0aGUgdHJ1c3QgYW5jaG9yczsgdGhlIHRyYW5zZmVyIG9mIGFueSBuZWVkZWQKKyAgICAgICAgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZm9yIHBhdGggdmFsaWRhdGlvbiBpcyBleHBlY3RlZCB0byBvY2N1cgorICAgICAgICB0aHJvdWdoIGFuIG91dC1vZi1iYW5kIHRyYW5zZmVyLgorCisgICAgICAgIE9uY2UgdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIGZvdW5kIGFjY2VwdGFibGUgKGVpdGhlciBieSBwYXRoCisgICAgICAgIHZhbGlkYXRpb24gb3IgZGlyZWN0bHkgbWF0Y2hpbmcgYSBmaW5nZXJwcmludCBpbiB0aGlzIHRhYmxlKSwKKyAgICAgICAgdGhpcyB0YWJsZSBpcyBjb25zdWx0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICB0bVNlY3VyaXR5TmFtZSB0byBpZGVudGlmeSB3aXRoIHRoZSByZW1vdGUgY29ubmVjdGlvbi4gIFRoaXMKKyAgICAgICAgaXMgZG9uZSBieSBjb25zaWRlcmluZyBlYWNoIGFjdGl2ZSByb3cgZnJvbSB0aGlzIHRhYmxlIGluCisgICAgICAgIHByaW9yaXRpemVkIG9yZGVyIGFjY29yZGluZyB0byBpdHMgc25tcFRsc3RtQ2VydFRvVFNOSUQgdmFsdWUuCisgICAgICAgIEVhY2ggcm93J3Mgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgdmFsdWUgZGV0ZXJtaW5lcworICAgICAgICB3aGV0aGVyIHRoZSByb3cgaXMgYSBtYXRjaCBmb3IgdGhlIGluY29taW5nIGNvbm5lY3Rpb246CisKKyAgICAgICAgICAgIDEpIElmIHRoZSByb3cncyBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCB2YWx1ZQorICAgICAgICAgICAgICAgaWRlbnRpZmllcyB0aGUgcHJlc2VudGVkIGNlcnRpZmljYXRlLCB0aGVuIGNvbnNpZGVyIHRoZQorICAgICAgICAgICAgICAgcm93IGFzIGEgc3VjY2Vzc2Z1bCBtYXRjaC4KKworICAgICAgICAgICAgMikgSWYgdGhlIHJvdydzIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50IHZhbHVlCisgICAgICAgICAgICAgICBpZGVudGlmaWVzIGEgbG9jYWxseSBoZWxkIGNvcHkgb2YgYSB0cnVzdGVkIENBCisgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBhbmQgdGhhdCBDQSBjZXJ0aWZpY2F0ZSB3YXMgdXNlZCB0bworICAgICAgICAgICAgICAgdmFsaWRhdGUgdGhlIHBhdGggdG8gdGhlIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSwgdGhlbgorICAgICAgICAgICAgICAgY29uc2lkZXIgdGhlIHJvdyBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2guCisKKyAgICAgICAgT25jZSBhIG1hdGNoaW5nIHJvdyBoYXMgYmVlbiBmb3VuZCwgdGhlCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUgdmFsdWUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdworICAgICAgICB0aGUgdG1TZWN1cml0eU5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlc3Npb24gc2hvdWxkIGJlCisgICAgICAgIGRldGVybWluZWQuICBTZWUgdGhlIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUgY29sdW1uJ3MKKyAgICAgICAgREVTQ1JJUFRJT04gZm9yIGRldGFpbHMgb24gZGV0ZXJtaW5pbmcgdGhlIHRtU2VjdXJpdHlOYW1lCisgICAgICAgIHZhbHVlLiAgSWYgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgYSB0bVNlY3VyaXR5TmFtZSBmcm9tCisgICAgICAgIHRoZSByb3cncyBkYXRhIGNvbWJpbmVkIHdpdGggdGhlIGRhdGEgcHJlc2VudGVkIGluIHRoZQorCisgICAgICAgIGNlcnRpZmljYXRlLCB0aGVuIGFkZGl0aW9uYWwgcm93cyBNVVNUIGJlIHNlYXJjaGVkIGxvb2tpbmcgZm9yCisgICAgICAgIGFub3RoZXIgcG90ZW50aWFsIG1hdGNoLiAgSWYgYSByZXN1bHRpbmcgdG1TZWN1cml0eU5hbWUgbWFwcGVkCisgICAgICAgIGZyb20gYSBnaXZlbiByb3cgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgbmVlZGVkCisgICAgICAgIHJlcXVpcmVtZW50cyBvZiBhIHRtU2VjdXJpdHlOYW1lIChlLmcuLCBWQUNNIGltcG9zZXMgYQorICAgICAgICAzMi1vY3RldC1tYXhpbXVtIGxlbmd0aCBhbmQgdGhlIGNlcnRpZmljYXRlIGRlcml2ZWQKKyAgICAgICAgc2VjdXJpdHlOYW1lIGNvdWxkIGJlIGxvbmdlciksIHRoZW4gaXQgbXVzdCBiZSBjb25zaWRlcmVkIGFuCisgICAgICAgIGludmFsaWQgbWF0Y2ggYW5kIGFkZGl0aW9uYWwgcm93cyBNVVNUIGJlIHNlYXJjaGVkIGxvb2tpbmcgZm9yCisgICAgICAgIGFub3RoZXIgcG90ZW50aWFsIG1hdGNoLgorCisgICAgICAgIElmIG5vIG1hdGNoaW5nIGFuZCB2YWxpZCByb3cgY2FuIGJlIGZvdW5kLCB0aGUgY29ubmVjdGlvbiBNVVNUCisgICAgICAgIGJlIGNsb3NlZCBhbmQgU05NUCBtZXNzYWdlcyBNVVNUIE5PVCBiZSBhY2NlcHRlZCBvdmVyIGl0LgorCisgICAgICAgIE1pc3NpbmcgdmFsdWVzIG9mIHNubXBUbHN0bUNlcnRUb1RTTklEIGFyZSBhY2NlcHRhYmxlIGFuZAorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGhpZ2hlc3QgbnVtYmVyZWQKKyAgICAgICAgcm93LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhZG1pbmlzdHJhdG9ycyBza2lwIGluZGV4IHZhbHVlcworICAgICAgICB0byBsZWF2ZSByb29tIGZvciB0aGUgaW5zZXJ0aW9uIG9mIGZ1dHVyZSByb3dzIChmb3IgZXhhbXBsZSwKKyAgICAgICAgdXNlIHZhbHVlcyBvZiAxMCBhbmQgMjAgd2hlbiBjcmVhdGluZyBpbml0aWFsIHJvd3MpLgorCisgICAgICAgIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIG1ha2UgdXNlIG9mIGNlcnRpZmljYXRlcyB3aXRoCisgICAgICAgIHN1YmplY3RBbHROYW1lIGZpZWxkcyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRtU2VjdXJpdHlOYW1lcyBzbworICAgICAgICB0aGF0IGEgc2luZ2xlIHJvb3QgQ0EgY2VydGlmaWNhdGUgY2FuIGFsbG93IGFsbCBjaGlsZAorICAgICAgICBjZXJ0aWZpY2F0ZSdzIHN1YmplY3RBbHROYW1lIHRvIG1hcCBkaXJlY3RseSB0byBhCisgICAgICAgIHRtU2VjdXJpdHlOYW1lIHZpYSBhIDE6MSB0cmFuc2Zvcm1hdGlvbi4gIEhvd2V2ZXIsIHRoaXMgdGFibGUKKyAgICAgICAgaXMgZmxleGlibGUgdG8gYWxsb3cgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZXhpc3RpbmcgZGVwbG95ZWQKKyAgICAgICAgY2VydGlmaWNhdGUgaW5mcmFzdHJ1Y3R1cmVzIGRvIG5vdCBwcm92aWRlIGFkZXF1YXRlCisgICAgICAgIHN1YmplY3RBbHROYW1lIHZhbHVlcyBmb3IgdXNlIGFzIHRtU2VjdXJpdHlOYW1lcy4KKyAgICAgICAgQ2VydGlmaWNhdGVzIG1heSBhbHNvIGJlIG1hcHBlZCB0byB0bVNlY3VyaXR5TmFtZXMgdXNpbmcgdGhlCisgICAgICAgIENvbW1vbk5hbWUgcG9ydGlvbiBvZiB0aGUgU3ViamVjdCBmaWVsZC4gIEhvd2V2ZXIsIHRoZSB1c2FnZQorICAgICAgICBvZiB0aGUgQ29tbW9uTmFtZSBmaWVsZCBpcyBkZXByZWNhdGVkIGFuZCB0aHVzIHRoaXMgdXNhZ2UgaXMKKyAgICAgICAgTk9UIFJFQ09NTUVOREVELiAgRGlyZWN0IG1hcHBpbmcgZnJvbSBlYWNoIGluZGl2aWR1YWwKKyAgICAgICAgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgdG8gYSB0bVNlY3VyaXR5TmFtZSBpcyBhbHNvIHBvc3NpYmxlCisgICAgICAgIGJ1dCByZXF1aXJlcyBvbmUgZW50cnkgaW4gdGhlIHRhYmxlIHBlciB0bVNlY3VyaXR5TmFtZSBhbmQKKyAgICAgICAgcmVxdWlyZXMgbW9yZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdG8gY29tcGxldGVseSBjb25maWd1cmUgYQorICAgICAgICBkZXZpY2UuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyAzIH0KKworc25tcFRsc3RtQ2VydFRvVFNORW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVGxzdG1DZXJ0VG9UU05FbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHJvdyBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgdGhhdCBzcGVjaWZpZXMgYSBtYXBwaW5nCisgICAgICAgIGZvciBhbiBpbmNvbWluZyAoRClUTFMgY2VydGlmaWNhdGUgdG8gYSB0bVNlY3VyaXR5TmFtZSB0byB1c2UKKyAgICAgICAgZm9yIGEgY29ubmVjdGlvbi4iCisgICAgSU5ERVggICB7IHNubXBUbHN0bUNlcnRUb1RTTklEIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSAxIH0KKworU25tcFRsc3RtQ2VydFRvVFNORW50cnkgOjo9IFNFUVVFTkNFIHsKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05JRCAgICAgICAgICAgVW5zaWduZWQzMiwKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCAgU25tcFRMU0ZpbmdlcnByaW50LAorICAgIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUgICAgICBBdXRvbm9tb3VzVHlwZSwKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhICAgICAgICAgT0NURVQgU1RSSU5HLAorICAgIHNubXBUbHN0bUNlcnRUb1RTTlN0b3JhZ2VUeXBlICBTdG9yYWdlVHlwZSwKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05Sb3dTdGF0dXMgICAgUm93U3RhdHVzCit9CisKK3NubXBUbHN0bUNlcnRUb1RTTklEIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVW5zaWduZWQzMiAoMS4uNDI5NDk2NzI5NSkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB1bmlxdWUsIHByaW9yaXRpemVkIGluZGV4IGZvciB0aGUgZ2l2ZW4gZW50cnkuICBMb3dlcgorICAgICAgICBudW1iZXJzIGluZGljYXRlIGEgaGlnaGVyIHByaW9yaXR5LiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSAxIH0KKworc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVExTRmluZ2VycHJpbnQgKFNJWkUoMS4uMjU1KSkKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjcnlwdG9ncmFwaGljIGhhc2ggb2YgYW4gWC41MDkgY2VydGlmaWNhdGUuICBUaGUgcmVzdWx0cyBvZgorICAgICAgICBhIHN1Y2Nlc3NmdWwgbWF0Y2hpbmcgZmluZ2VycHJpbnQgdG8gZWl0aGVyIHRoZSB0cnVzdGVkIENBIGluCisgICAgICAgIHRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHBhdGggb3IgdG8gdGhlIGNlcnRpZmljYXRlIGl0c2VsZgorICAgICAgICBpcyBkaWN0YXRlZCBieSB0aGUgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSBjb2x1bW4uIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDIgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQXV0b25vbW91c1R5cGUKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiU3BlY2lmaWVzIHRoZSBtYXBwaW5nIHR5cGUgZm9yIGRlcml2aW5nIGEgdG1TZWN1cml0eU5hbWUgZnJvbQorICAgICAgICBhIGNlcnRpZmljYXRlLiAgRGV0YWlscyBmb3IgbWFwcGluZyBvZiBhIHBhcnRpY3VsYXIgdHlwZSBTSEFMTAorICAgICAgICBiZSBzcGVjaWZpZWQgaW4gdGhlIERFU0NSSVBUSU9OIGNsYXVzZSBvZiB0aGUgT0JKRUNULUlERU5USVRZCisgICAgICAgIHRoYXQgZGVzY3JpYmVzIHRoZSBtYXBwaW5nLiAgSWYgYSBtYXBwaW5nIHN1Y2NlZWRzIGl0IHdpbGwKKyAgICAgICAgcmV0dXJuIGEgdG1TZWN1cml0eU5hbWUgZm9yIHVzZSBieSB0aGUgVExTVE0gbW9kZWwgYW5kCisgICAgICAgIHByb2Nlc3Npbmcgc3RvcHMuCisKKyAgICAgICAgSWYgdGhlIHJlc3VsdGluZyBtYXBwZWQgdmFsdWUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgbmVlZGVkIHJlcXVpcmVtZW50cyBvZiBhIHRtU2VjdXJpdHlOYW1lIChlLmcuLCBWQUNNIGltcG9zZXMgYQorICAgICAgICAzMi1vY3RldC1tYXhpbXVtIGxlbmd0aCBhbmQgdGhlIGNlcnRpZmljYXRlIGRlcml2ZWQKKyAgICAgICAgc2VjdXJpdHlOYW1lIGNvdWxkIGJlIGxvbmdlciksIHRoZW4gZnV0dXJlIHJvd3MgTVVTVCBiZQorICAgICAgICBzZWFyY2hlZCBmb3IgYWRkaXRpb25hbCBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCBtYXRjaGVzCisgICAgICAgIHRvIGxvb2sgZm9yIGEgbWFwcGluZyB0aGF0IHN1Y2NlZWRzLgorCisgICAgICAgIFN1aXRhYmxlIHZhbHVlcyBmb3IgYXNzaWduaW5nIHRvIHRoaXMgb2JqZWN0IHRoYXQgYXJlIGRlZmluZWQKKyAgICAgICAgd2l0aGluIHRoZSBTTk1QLVRMUy1UTS1NSUIgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyBwb3J0aW9uIG9mIHRoZSBNSUIgdHJlZS4iCisgICAgREVGVkFMIHsgc25tcFRsc3RtQ2VydFNwZWNpZmllZCB9CisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgMyB9CisKK3NubXBUbHN0bUNlcnRUb1RTTkRhdGEgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUoMC4uMTAyNCkpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkF1eGlsaWFyeSBkYXRhIHVzZWQgYXMgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgYSBnaXZlbiBtYXBwaW5nIHNwZWNpZmllZCBieSB0aGUgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZQorICAgICAgICBjb2x1bW4uICBPbmx5IHNvbWUgbWFwcGluZyBzeXN0ZW1zIHdpbGwgbWFrZSB1c2Ugb2YgdGhpcworICAgICAgICBjb2x1bW4uICBUaGUgdmFsdWUgaW4gdGhpcyBjb2x1bW4gTVVTVCBiZSBpZ25vcmVkIGZvciBhbnkKKyAgICAgICAgbWFwcGluZyB0eXBlIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBkYXRhIHByZXNlbnQgaW4gdGhpcworICAgICAgICBjb2x1bW4uIgorICAgIERFRlZBTCB7ICIiIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSA0IH0KKworc25tcFRsc3RtQ2VydFRvVFNOU3RvcmFnZVR5cGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgU3RvcmFnZVR5cGUKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RvcmFnZSB0eXBlIGZvciB0aGlzIGNvbmNlcHR1YWwgcm93LiAgQ29uY2VwdHVhbCByb3dzCisgICAgICAgIGhhdmluZyB0aGUgdmFsdWUgJ3Blcm1hbmVudCcgbmVlZCBub3QgYWxsb3cgd3JpdGUtYWNjZXNzIHRvCisgICAgICAgIGFueSBjb2x1bW5hciBvYmplY3RzIGluIHRoZSByb3cuIgorICAgIERFRlZBTCAgICAgIHsgbm9uVm9sYXRpbGUgfQorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDUgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05Sb3dTdGF0dXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBSb3dTdGF0dXMKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0YXR1cyBvZiB0aGlzIGNvbmNlcHR1YWwgcm93LiAgVGhpcyBvYmplY3QgbWF5IGJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9yIHJlbW92ZSByb3dzIGZyb20gdGhpcyB0YWJsZS4KKworICAgICAgICBUbyBjcmVhdGUgYSByb3cgaW4gdGhpcyB0YWJsZSwgYW4gYWRtaW5pc3RyYXRvciBtdXN0IHNldCB0aGlzCisgICAgICAgIG9iamVjdCB0byBlaXRoZXIgY3JlYXRlQW5kR28oNCkgb3IgY3JlYXRlQW5kV2FpdCg1KS4KKworICAgICAgICBVbnRpbCBpbnN0YW5jZXMgb2YgYWxsIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBhcmUgYXBwcm9wcmlhdGVseQorICAgICAgICBjb25maWd1cmVkLCB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YgdGhlCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyBjb2x1bW4gaXMgbm90UmVhZHkoMykuCisKKyAgICAgICAgSW4gcGFydGljdWxhciwgYSBuZXdseSBjcmVhdGVkIHJvdyBjYW5ub3QgYmUgbWFkZSBhY3RpdmUgdW50aWwKKyAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUsIGFuZCBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhIGNvbHVtbnMKKyAgICAgICAgaGF2ZSBiZWVuIHNldC4KKworICAgICAgICBUaGUgZm9sbG93aW5nIG9iamVjdHMgbWF5IG5vdCBiZSBtb2RpZmllZCB3aGlsZSB0aGUKKyAgICAgICAgdmFsdWUgb2YgdGhpcyBvYmplY3QgaXMgYWN0aXZlKDEpOgorICAgICAgICAgICAgLSBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludAorICAgICAgICAgICAgLSBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlCisgICAgICAgICAgICAtIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZXQgdGhlc2Ugb2JqZWN0cyB3aGlsZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIGlzIGFjdGl2ZSgxKSB3aWxsIHJlc3VsdCBpbgorICAgICAgICBhbiBpbmNvbnNpc3RlbnRWYWx1ZSBlcnJvci4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgNiB9CisKKy0tIE1hcHMgdG1TZWN1cml0eU5hbWVzIHRvIGNlcnRpZmljYXRlcyBmb3IgdXNlIGJ5IHRoZSBTTk1QLVRBUkdFVC1NSUIKKworc25tcFRsc3RtUGFyYW1zQ291bnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBHYXVnZTMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA0IH0KKworc25tcFRsc3RtUGFyYW1zVGFibGVMYXN0Q2hhbmdlZCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVTdGFtcAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHN5c1VwVGltZS4wIHdoZW4gdGhlIHNubXBUbHN0bVBhcmFtc1RhYmxlCisgICAgICAgIHdhcyBsYXN0IG1vZGlmaWVkIHRocm91Z2ggYW55IG1lYW5zLCBvciAwIGlmIGl0IGhhcyBub3QgYmVlbgorICAgICAgICBtb2RpZmllZCBzaW5jZSB0aGUgY29tbWFuZCByZXNwb25kZXIgd2FzIHN0YXJ0ZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA1IH0KKworc25tcFRsc3RtUGFyYW1zVGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBTbm1wVGxzdG1QYXJhbXNFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIHRhYmxlIGlzIHVzZWQgYnkgYSAoRClUTFMgY2xpZW50IHdoZW4gYSAoRClUTFMKKyAgICAgICAgY29ubmVjdGlvbiBpcyBiZWluZyBzZXQgdXAgdXNpbmcgYW4gZW50cnkgaW4gdGhlCisgICAgICAgIFNOTVAtVEFSR0VULU1JQi4gIEl0IGV4dGVuZHMgdGhlIFNOTVAtVEFSR0VULU1JQidzCisgICAgICAgIHNubXBUYXJnZXRQYXJhbXNUYWJsZSB3aXRoIGEgZmluZ2VycHJpbnQgb2YgYSBjZXJ0aWZpY2F0ZSB0bworICAgICAgICB1c2Ugd2hlbiBlc3RhYmxpc2hpbmcgc3VjaCBhIChEKVRMUyBjb25uZWN0aW9uLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgNiB9CisKK3NubXBUbHN0bVBhcmFtc0VudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRsc3RtUGFyYW1zRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb25jZXB0dWFsIHJvdyBjb250YWluaW5nIGEgZmluZ2VycHJpbnQgaGFzaCBvZiBhIGxvY2FsbHkKKyAgICAgICAgaGVsZCBjZXJ0aWZpY2F0ZSBmb3IgYSBnaXZlbiBzbm1wVGFyZ2V0UGFyYW1zRW50cnkuICBUaGUKKyAgICAgICAgdmFsdWVzIGluIHRoaXMgcm93IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBjb25uZWN0aW9uIHRoYXQKKyAgICAgICAgbmVlZHMgdG8gYmUgZXN0YWJsaXNoZWQsIGFzIGluZGljYXRlZCBieSB0aGUgU05NUC1UQVJHRVQtTUlCCisgICAgICAgIGluZnJhc3RydWN0dXJlLCBpcyBub3QgYSBjZXJ0aWZpY2F0ZSBhbmQgKEQpVExTIGJhc2VkCisgICAgICAgIGNvbm5lY3Rpb24uICBUaGUgY29ubmVjdGlvbiBTSE9VTEQgTk9UIGJlIGVzdGFibGlzaGVkIGlmIHRoZQorICAgICAgICBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCBzdG9yZWQgaW4gdGhpcyBlbnRyeSBkb2VzIG5vdCBwb2ludCB0bworICAgICAgICBhIHZhbGlkIGxvY2FsbHkgaGVsZCBjZXJ0aWZpY2F0ZSBvciBpZiBpdCBwb2ludHMgdG8gYW4KKyAgICAgICAgdW51c2FibGUgY2VydGlmaWNhdGUgKHN1Y2ggYXMgbWlnaHQgaGFwcGVuIHdoZW4gdGhlCisgICAgICAgIGNlcnRpZmljYXRlJ3MgZXhwaXJhdGlvbiBkYXRlIGhhcyBiZWVuIHJlYWNoZWQpLiIKKyAgICBJTkRFWCAgICB7IElNUExJRUQgc25tcFRhcmdldFBhcmFtc05hbWUgfQorICAgIDo6PSB7IHNubXBUbHN0bVBhcmFtc1RhYmxlIDEgfQorCitTbm1wVGxzdG1QYXJhbXNFbnRyeSA6Oj0gU0VRVUVOQ0UgeworICAgIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50IFNubXBUTFNGaW5nZXJwcmludCwKKyAgICBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSAgICAgICBTdG9yYWdlVHlwZSwKKyAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgICAgICAgICBSb3dTdGF0dXMKK30KKworc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVExTRmluZ2VycHJpbnQKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyBvYmplY3Qgc3RvcmVzIHRoZSBoYXNoIG9mIHRoZSBwdWJsaWMgcG9ydGlvbiBvZiBhCisgICAgICAgIGxvY2FsbHkgaGVsZCBYLjUwOSBjZXJ0aWZpY2F0ZS4gIFRoZSBYLjUwOSBjZXJ0aWZpY2F0ZSwgaXRzCisgICAgICAgIHB1YmxpYyBrZXksIGFuZCB0aGUgY29ycmVzcG9uZGluZyBwcml2YXRlIGtleSB3aWxsIGJlIHVzZWQKKyAgICAgICAgd2hlbiBpbml0aWF0aW5nIGEgKEQpVExTIGNvbm5lY3Rpb24gYXMgYSAoRClUTFMgY2xpZW50LiIKKyAgICA6Oj0geyBzbm1wVGxzdG1QYXJhbXNFbnRyeSAxIH0KKworc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgU3RvcmFnZVR5cGUKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RvcmFnZSB0eXBlIGZvciB0aGlzIGNvbmNlcHR1YWwgcm93LiAgQ29uY2VwdHVhbCByb3dzCisgICAgICAgIGhhdmluZyB0aGUgdmFsdWUgJ3Blcm1hbmVudCcgbmVlZCBub3QgYWxsb3cgd3JpdGUtYWNjZXNzIHRvCisgICAgICAgIGFueSBjb2x1bW5hciBvYmplY3RzIGluIHRoZSByb3cuIgorICAgIERFRlZBTCAgICAgIHsgbm9uVm9sYXRpbGUgfQorICAgIDo6PSB7IHNubXBUbHN0bVBhcmFtc0VudHJ5IDIgfQorCitzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBSb3dTdGF0dXMKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0YXR1cyBvZiB0aGlzIGNvbmNlcHR1YWwgcm93LiAgVGhpcyBvYmplY3QgbWF5IGJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9yIHJlbW92ZSByb3dzIGZyb20gdGhpcyB0YWJsZS4KKworICAgICAgICBUbyBjcmVhdGUgYSByb3cgaW4gdGhpcyB0YWJsZSwgYW4gYWRtaW5pc3RyYXRvciBtdXN0IHNldCB0aGlzCisgICAgICAgIG9iamVjdCB0byBlaXRoZXIgY3JlYXRlQW5kR28oNCkgb3IgY3JlYXRlQW5kV2FpdCg1KS4KKworICAgICAgICBVbnRpbCBpbnN0YW5jZXMgb2YgYWxsIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBhcmUgYXBwcm9wcmlhdGVseQorICAgICAgICBjb25maWd1cmVkLCB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YgdGhlCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyBjb2x1bW4gaXMgbm90UmVhZHkoMykuCisKKyAgICAgICAgSW4gcGFydGljdWxhciwgYSBuZXdseSBjcmVhdGVkIHJvdyBjYW5ub3QgYmUgbWFkZSBhY3RpdmUgdW50aWwKKyAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQgY29sdW1uIGhhcworICAgICAgICBiZWVuIHNldC4KKworICAgICAgICBUaGUgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQgb2JqZWN0IG1heSBub3QgYmUgbW9kaWZpZWQKKyAgICAgICAgd2hpbGUgdGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IGlzIGFjdGl2ZSgxKS4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNldCB0aGVzZSBvYmplY3RzIHdoaWxlIHRoZSB2YWx1ZSBvZgorICAgICAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgaXMgYWN0aXZlKDEpIHdpbGwgcmVzdWx0IGluCisgICAgICAgIGFuIGluY29uc2lzdGVudFZhbHVlIGVycm9yLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1QYXJhbXNFbnRyeSAzIH0KKworc25tcFRsc3RtQWRkckNvdW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgR2F1Z2UzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNubXBUbHN0bUFkZHJUYWJsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDcgfQorCitzbm1wVGxzdG1BZGRyVGFibGVMYXN0Q2hhbmdlZCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVTdGFtcAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHN5c1VwVGltZS4wIHdoZW4gdGhlIHNubXBUbHN0bUFkZHJUYWJsZQorICAgICAgICB3YXMgbGFzdCBtb2RpZmllZCB0aHJvdWdoIGFueSBtZWFucywgb3IgMCBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICAgICAgbW9kaWZpZWQgc2luY2UgdGhlIGNvbW1hbmQgcmVzcG9uZGVyIHdhcyBzdGFydGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgOCB9CisKK3NubXBUbHN0bUFkZHJUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIFNubXBUbHN0bUFkZHJFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIHRhYmxlIGlzIHVzZWQgYnkgYSAoRClUTFMgY2xpZW50IHdoZW4gYSAoRClUTFMKKyAgICAgICAgY29ubmVjdGlvbiBpcyBiZWluZyBzZXQgdXAgdXNpbmcgYW4gZW50cnkgaW4gdGhlCisgICAgICAgIFNOTVAtVEFSR0VULU1JQi4gIEl0IGV4dGVuZHMgdGhlIFNOTVAtVEFSR0VULU1JQidzCisKKyAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZSBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIHZlcmlmeSB0aGF0IHRoZQorICAgICAgICBjb3JyZWN0IHNlcnZlciBoYXMgYmVlbiByZWFjaGVkLiAgVGhpcyB2ZXJpZmljYXRpb24gY2FuIHVzZQorICAgICAgICBlaXRoZXIgYSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCwgb3IgYW4gaWRlbnRpdHkKKyAgICAgICAgYXV0aGVudGljYXRlZCB2aWEgY2VydGlmaWNhdGlvbiBwYXRoIHZhbGlkYXRpb24uCisKKyAgICAgICAgSWYgdGhlcmUgaXMgYW4gYWN0aXZlIHJvdyBpbiB0aGlzIHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICAgIGVudHJ5IGluIHRoZSBTTk1QLVRBUkdFVC1NSUIgdGhhdCB3YXMgdXNlZCB0byBlc3RhYmxpc2ggdGhlCisgICAgICAgIGNvbm5lY3Rpb24sIGFuZCB0aGUgcm93J3Mgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50CisgICAgICAgIGNvbHVtbiBoYXMgbm9uLWVtcHR5IHZhbHVlLCB0aGVuIHRoZSBzZXJ2ZXIncyBwcmVzZW50ZWQKKyAgICAgICAgY2VydGlmaWNhdGUgaXMgY29tcGFyZWQgd2l0aCB0aGUKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IHZhbHVlIChhbmQgdGhlCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSBjb2x1bW4gaXMgaWdub3JlZCkuICBJZiB0aGUKKyAgICAgICAgZmluZ2VycHJpbnQgbWF0Y2hlcywgdGhlIHZlcmlmaWNhdGlvbiBoYXMgc3VjY2VlZGVkLiAgSWYgdGhlCisgICAgICAgIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoLCB0aGVuIHRoZSBjb25uZWN0aW9uIE1VU1QgYmUKKyAgICAgICAgY2xvc2VkLgorCisgICAgICAgIElmIHRoZSBzZXJ2ZXIncyBwcmVzZW50ZWQgY2VydGlmaWNhdGUgaGFzIHBhc3NlZAorICAgICAgICBjZXJ0aWZpY2F0aW9uIHBhdGggdmFsaWRhdGlvbiBbUkZDNTI4MF0gdG8gYSBjb25maWd1cmVkCisgICAgICAgIHRydXN0IGFuY2hvciwgYW5kIGFuIGFjdGl2ZSByb3cgZXhpc3RzIHdpdGggYSB6ZXJvLWxlbmd0aAorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgdmFsdWUsIHRoZW4gdGhlCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSBjb2x1bW4gY29udGFpbnMgdGhlIGV4cGVjdGVkCisgICAgICAgIGhvc3QgbmFtZS4gIFRoaXMgZXhwZWN0ZWQgaG9zdCBuYW1lIGlzIHRoZW4gY29tcGFyZWQgYWdhaW5zdAorICAgICAgICB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgYXMgZm9sbG93czoKKworICAgICAgICAgIC0gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBtYXRjaGluZyB0aGUgZXhwZWN0ZWQgaG9zdAorICAgICAgICAgIG5hbWUgYWdhaW5zdCBhIGROU05hbWUgaW4gdGhlIHN1YmplY3RBbHROYW1lIGV4dGVuc2lvbgorICAgICAgICAgIGZpZWxkIGFuZCBNQVkgc3VwcG9ydCBjaGVja2luZyB0aGUgbmFtZSBhZ2FpbnN0IHRoZQorICAgICAgICAgIENvbW1vbk5hbWUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCBkaXN0aW5ndWlzaGVkIG5hbWUuCisKKyAgICAgICAgICAtIFRoZSAnKicgKEFTQ0lJIDB4MmEpIHdpbGRjYXJkIGNoYXJhY3RlciBpcyBhbGxvd2VkIGluIHRoZQorICAgICAgICAgIGROU05hbWUgb2YgdGhlIHN1YmplY3RBbHROYW1lIGV4dGVuc2lvbiAoYW5kIGluIGNvbW1vbgorICAgICAgICAgIG5hbWUsIGlmIHVzZWQgdG8gc3RvcmUgdGhlIGhvc3QgbmFtZSksIGJ1dCBvbmx5IGFzIHRoZQorICAgICAgICAgIGxlZnQtbW9zdCAobGVhc3Qgc2lnbmlmaWNhbnQpIEROUyBsYWJlbCBpbiB0aGF0IHZhbHVlLgorICAgICAgICAgIFRoaXMgd2lsZGNhcmQgbWF0Y2hlcyBhbnkgbGVmdC1tb3N0IEROUyBsYWJlbCBpbiB0aGUKKyAgICAgICAgICBzZXJ2ZXIgbmFtZS4gIFRoYXQgaXMsIHRoZSBzdWJqZWN0ICouZXhhbXBsZS5jb20gbWF0Y2hlcworICAgICAgICAgIHRoZSBzZXJ2ZXIgbmFtZXMgYS5leGFtcGxlLmNvbSBhbmQgYi5leGFtcGxlLmNvbSwgYnV0IGRvZXMKKyAgICAgICAgICBub3QgbWF0Y2ggZXhhbXBsZS5jb20gb3IgYS5iLmV4YW1wbGUuY29tLiAgSW1wbGVtZW50YXRpb25zCisgICAgICAgICAgTVVTVCBzdXBwb3J0IHdpbGRjYXJkcyBpbiBjZXJ0aWZpY2F0ZXMgYXMgc3BlY2lmaWVkIGFib3ZlLAorICAgICAgICAgIGJ1dCBNQVkgcHJvdmlkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRpc2FibGUgdGhlbS4KKworICAgICAgICAgIC0gSWYgdGhlIGxvY2FsbHkgY29uZmlndXJlZCBuYW1lIGlzIGFuIGludGVybmF0aW9uYWxpemVkCisgICAgICAgICAgZG9tYWluIG5hbWUsIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIE1VU1QgY29udmVydCBpdCB0bworICAgICAgICAgIHRoZSBBU0NJSSBDb21wYXRpYmxlIEVuY29kaW5nIChBQ0UpIGZvcm1hdCBmb3IgcGVyZm9ybWluZworICAgICAgICAgIGNvbXBhcmlzb25zLCBhcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiA3IG9mIFtSRkM1MjgwXS4KKworICAgICAgICBJZiB0aGUgZXhwZWN0ZWQgaG9zdCBuYW1lIGZhaWxzIHRoZXNlIGNvbmRpdGlvbnMgdGhlbiB0aGUKKyAgICAgICAgY29ubmVjdGlvbiBNVVNUIGJlIGNsb3NlZC4KKworICAgICAgICBJZiB0aGVyZSBpcyBubyByb3cgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnRyeQorICAgICAgICBpbiB0aGUgU05NUC1UQVJHRVQtTUlCIGFuZCB0aGUgc2VydmVyIGNhbiBiZSBhdXRob3JpemVkIGJ5CisgICAgICAgIGFub3RoZXIsIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBtZWFucywgdGhlbiB0aGUgY29ubmVjdGlvbgorICAgICAgICBNQVkgc3RpbGwgcHJvY2VlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDkgfQorCitzbm1wVGxzdG1BZGRyRW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVGxzdG1BZGRyRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb25jZXB0dWFsIHJvdyBjb250YWluaW5nIGEgY29weSBvZiBhIGNlcnRpZmljYXRlJ3MKKyAgICAgICAgZmluZ2VycHJpbnQgZm9yIGEgZ2l2ZW4gc25tcFRhcmdldEFkZHJFbnRyeS4gIFRoZSB2YWx1ZXMgaW4KKyAgICAgICAgdGhpcyByb3cgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGNvbm5lY3Rpb24gdGhhdCBuZWVkcyB0byBiZQorICAgICAgICBlc3RhYmxpc2hlZCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBTTk1QLVRBUkdFVC1NSUIKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUsIGlzIG5vdCBhIChEKVRMUyBiYXNlZCBjb25uZWN0aW9uLiAgSWYgYW4KKyAgICAgICAgc25tcFRsc3RtQWRkckVudHJ5IGV4aXN0cyBmb3IgYSBnaXZlbiBzbm1wVGFyZ2V0QWRkckVudHJ5LCB0aGVuCisgICAgICAgIHRoZSBwcmVzZW50ZWQgc2VydmVyIGNlcnRpZmljYXRlIE1VU1QgbWF0Y2ggb3IgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgTVVTVCBOT1QgYmUgZXN0YWJsaXNoZWQuICBJZiBhIHJvdyBpbiB0aGlzIHRhYmxlIGRvZXMgbm90CisgICAgICAgIGV4aXN0IHRvIG1hdGNoIGFuIHNubXBUYXJnZXRBZGRyRW50cnkgcm93LCB0aGVuIHRoZSBjb25uZWN0aW9uCisgICAgICAgIFNIT1VMRCBzdGlsbCBwcm9jZWVkIGlmIHNvbWUgb3RoZXIgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBwYXRoCisgICAgICAgIGFsZ29yaXRobSAoZS5nLiwgUkZDIDUyODApIGNhbiBiZSB1c2VkLiIKKyAgICBJTkRFWCAgICB7IElNUExJRUQgc25tcFRhcmdldEFkZHJOYW1lIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1BZGRyVGFibGUgMSB9CisKK1NubXBUbHN0bUFkZHJFbnRyeSA6Oj0gU0VRVUVOQ0UgeworICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCAgICBTbm1wVExTRmluZ2VycHJpbnQsCisgICAgc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5ICAgICAgIFNubXBBZG1pblN0cmluZywKKyAgICBzbm1wVGxzdG1BZGRyU3RvcmFnZVR5cGUgICAgICAgICAgU3RvcmFnZVR5cGUsCisgICAgc25tcFRsc3RtQWRkclJvd1N0YXR1cyAgICAgICAgICAgIFJvd1N0YXR1cworfQorCitzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVExTRmluZ2VycHJpbnQKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjcnlwdG9ncmFwaGljIGhhc2ggb2YgYSBwdWJsaWMgWC41MDkgY2VydGlmaWNhdGUuICBUaGlzCisgICAgICAgIG9iamVjdCBzaG91bGQgc3RvcmUgdGhlIGhhc2ggb2YgdGhlIHB1YmxpYyBYLjUwOSBjZXJ0aWZpY2F0ZQorICAgICAgICB0aGF0IHRoZSByZW1vdGUgc2VydmVyIHNob3VsZCBwcmVzZW50IGR1cmluZyB0aGUgKEQpVExTCisgICAgICAgIGNvbm5lY3Rpb24gc2V0dXAuICBUaGUgZmluZ2VycHJpbnQgb2YgdGhlIHByZXNlbnRlZAorICAgICAgICBjZXJ0aWZpY2F0ZSBhbmQgdGhpcyBoYXNoIHZhbHVlIE1VU1QgbWF0Y2ggZXhhY3RseSBvciB0aGUKKyAgICAgICAgY29ubmVjdGlvbiBNVVNUIE5PVCBiZSBlc3RhYmxpc2hlZC4iCisgICAgREVGVkFMIHsgIiIgfQorICAgIDo6PSB7IHNubXBUbHN0bUFkZHJFbnRyeSAxIH0KKworc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcEFkbWluU3RyaW5nCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSByZWZlcmVuY2UgaWRlbnRpdHkgdG8gY2hlY2sgYWdhaW5zdCB0aGUgaWRlbnRpdHkKKyAgICAgICAgcHJlc2VudGVkIGJ5IHRoZSByZW1vdGUgc3lzdGVtLiIKKyAgICBERUZWQUwgeyAiIiB9CisgICAgOjo9IHsgc25tcFRsc3RtQWRkckVudHJ5IDIgfQorCitzbm1wVGxzdG1BZGRyU3RvcmFnZVR5cGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgU3RvcmFnZVR5cGUKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RvcmFnZSB0eXBlIGZvciB0aGlzIGNvbmNlcHR1YWwgcm93LiAgQ29uY2VwdHVhbCByb3dzCisgICAgICAgIGhhdmluZyB0aGUgdmFsdWUgJ3Blcm1hbmVudCcgbmVlZCBub3QgYWxsb3cgd3JpdGUtYWNjZXNzIHRvCisgICAgICAgIGFueSBjb2x1bW5hciBvYmplY3RzIGluIHRoZSByb3cuIgorICAgIERFRlZBTCAgICAgIHsgbm9uVm9sYXRpbGUgfQorICAgIDo6PSB7IHNubXBUbHN0bUFkZHJFbnRyeSAzIH0KKworc25tcFRsc3RtQWRkclJvd1N0YXR1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFJvd1N0YXR1cworICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RhdHVzIG9mIHRoaXMgY29uY2VwdHVhbCByb3cuICBUaGlzIG9iamVjdCBtYXkgYmUgdXNlZAorICAgICAgICB0byBjcmVhdGUgb3IgcmVtb3ZlIHJvd3MgZnJvbSB0aGlzIHRhYmxlLgorCisgICAgICAgIFRvIGNyZWF0ZSBhIHJvdyBpbiB0aGlzIHRhYmxlLCBhbiBhZG1pbmlzdHJhdG9yIG11c3Qgc2V0IHRoaXMKKyAgICAgICAgb2JqZWN0IHRvIGVpdGhlciBjcmVhdGVBbmRHbyg0KSBvciBjcmVhdGVBbmRXYWl0KDUpLgorCisgICAgICAgIFVudGlsIGluc3RhbmNlcyBvZiBhbGwgY29ycmVzcG9uZGluZyBjb2x1bW5zIGFyZQorICAgICAgICBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQsIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiB0aGUgc25tcFRsc3RtQWRkclJvd1N0YXR1cworICAgICAgICBjb2x1bW4gaXMgbm90UmVhZHkoMykuCisKKyAgICAgICAgSW4gcGFydGljdWxhciwgYSBuZXdseSBjcmVhdGVkIHJvdyBjYW5ub3QgYmUgbWFkZSBhY3RpdmUgdW50aWwKKyAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IGNvbHVtbiBoYXMgYmVlbgorICAgICAgICBzZXQuCisKKyAgICAgICAgUm93cyBNVVNUIE5PVCBiZSBhY3RpdmUgaWYgdGhlIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludAorICAgICAgICBjb2x1bW4gaXMgYmxhbmsgYW5kIHRoZSBzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHkgaXMgc2V0IHRvCisgICAgICAgICcqJyBzaW5jZSB0aGlzIHdvdWxkIGluc2VjdXJlbHkgYWNjZXB0IGFueSBwcmVzZW50ZWQKKyAgICAgICAgY2VydGlmaWNhdGUuCisKKyAgICAgICAgVGhlIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCBvYmplY3QgbWF5IG5vdCBiZSBtb2RpZmllZAorICAgICAgICB3aGlsZSB0aGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgaXMgYWN0aXZlKDEpLgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2V0IHRoZXNlIG9iamVjdHMgd2hpbGUgdGhlIHZhbHVlIG9mCisgICAgICAgIHNubXBUbHN0bUFkZHJSb3dTdGF0dXMgaXMgYWN0aXZlKDEpIHdpbGwgcmVzdWx0IGluCisgICAgICAgIGFuIGluY29uc2lzdGVudFZhbHVlIGVycm9yLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1BZGRyRW50cnkgNCB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gIHNubXBUbHN0bU5vdGlmaWNhdGlvbnMgLSBOb3RpZmljYXRpb25zIEluZm9ybWF0aW9uCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc25tcFRsc3RtU2VydmVyQ2VydGlmaWNhdGVVbmtub3duIE5PVElGSUNBVElPTi1UWVBFCisgICAgT0JKRUNUUyB7IHNubXBUbHN0bVNlc3Npb25Vbmtub3duU2VydmVyQ2VydGlmaWNhdGUgfQorICAgIFNUQVRVUyAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJOb3RpZmljYXRpb24gdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHByZXNlbnRlZCBieSBhbiBTTk1QCisgICAgICAgICBvdmVyIChEKVRMUyBzZXJ2ZXIgd2FzIGludmFsaWQgYmVjYXVzZSBubyBjb25maWd1cmVkCisgICAgICAgICBmaW5nZXJwcmludCBvciBDQSB3YXMgYWNjZXB0YWJsZSB0byB2YWxpZGF0ZSBpdC4gIFRoaXMgbWF5IGJlCisgICAgICAgICBiZWNhdXNlIHRoZXJlIHdhcyBubyBlbnRyeSBpbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlIG9yCisgICAgICAgICBiZWNhdXNlIG5vIHBhdGggY291bGQgYmUgZm91bmQgdG8ga25vd24gQ2VydGlmaWNhdGlvbgorICAgICAgICAgQXV0aG9yaXR5LgorCisgICAgICAgICBUbyBhdm9pZCBub3RpZmljYXRpb24gbG9vcHMsIHRoaXMgbm90aWZpY2F0aW9uIE1VU1QgTk9UIGJlCisgICAgICAgICBzZW50IHRvIHNlcnZlcnMgdGhhdCB0aGVtc2VsdmVzIGhhdmUgdHJpZ2dlcmVkIHRoZQorICAgICAgICAgbm90aWZpY2F0aW9uLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1Ob3RpZmljYXRpb25zIDEgfQorCitzbm1wVGxzdG1TZXJ2ZXJJbnZhbGlkQ2VydGlmaWNhdGUgTk9USUZJQ0FUSU9OLVRZUEUKKyAgICBPQkpFQ1RTIHsgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlc30KKyAgICBTVEFUVVMgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiTm90aWZpY2F0aW9uIHRoYXQgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQgYnkgYW4gU05NUAorICAgICAgICAgb3ZlciAoRClUTFMgc2VydmVyIGNvdWxkIG5vdCBiZSB2YWxpZGF0ZWQgZXZlbiBpZiB0aGUKKyAgICAgICAgIGZpbmdlcnByaW50IG9yIGV4cGVjdGVkIHZhbGlkYXRpb24gcGF0aCB3YXMga25vd24uICBUaGF0IGlzLCBhCisgICAgICAgICBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNlcnRpZmljYXRlCisgICAgICAgICB2YWxpZGF0aW9uIHByb2Nlc3NpbmcuCisKKyAgICAgICAgIFRvIGF2b2lkIG5vdGlmaWNhdGlvbiBsb29wcywgdGhpcyBub3RpZmljYXRpb24gTVVTVCBOT1QgYmUKKyAgICAgICAgIHNlbnQgdG8gc2VydmVycyB0aGF0IHRoZW1zZWx2ZXMgaGF2ZSB0cmlnZ2VyZWQgdGhlCisgICAgICAgICBub3RpZmljYXRpb24uIgorICAgIDo6PSB7IHNubXBUbHN0bU5vdGlmaWNhdGlvbnMgMiB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gc25tcFRsc3RtQ29tcGxpYW5jZXMgLSBDb25mb3JtYW5jZSBJbmZvcm1hdGlvbgorLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NubXBUbHN0bUNvbXBsaWFuY2VzIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bUNvbmZvcm1hbmNlIDEgfQorCitzbm1wVGxzdG1Hcm91cHMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtQ29uZm9ybWFuY2UgMiB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gQ29tcGxpYW5jZSBzdGF0ZW1lbnRzCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc25tcFRsc3RtQ29tcGxpYW5jZSBNT0RVTEUtQ09NUExJQU5DRQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBTTk1QIGVuZ2luZXMgdGhhdCBzdXBwb3J0IHRoZQorICAgICAgICBTTk1QLVRMUy1UTS1NSUIiCisgICAgTU9EVUxFCisgICAgICAgIE1BTkRBVE9SWS1HUk9VUFMgeyBzbm1wVGxzdG1TdGF0c0dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtSW5jb21pbmdHcm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bU91dGdvaW5nR3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1Ob3RpZmljYXRpb25Hcm91cCB9CisgICAgOjo9IHsgc25tcFRsc3RtQ29tcGxpYW5jZXMgMSB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gVW5pdHMgb2YgY29uZm9ybWFuY2UKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc25tcFRsc3RtU3RhdHNHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk9wZW5zLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uQ2xpZW50Q2xvc2VzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkFjY2VwdHMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25TZXJ2ZXJDbG9zZXMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25Ob1Nlc3Npb25zLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENsaWVudENlcnRpZmljYXRlcywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSwKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRTZXJ2ZXJDZXJ0aWZpY2F0ZXMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2FjaGVzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9mIGFuIFNOTVAgZW5naW5lIHRoYXQKKyAgICAgICAgaW1wbGVtZW50cyB0aGUgU05NUCBUTFMgVHJhbnNwb3J0IE1vZGVsLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1Hcm91cHMgMSB9CisKK3NubXBUbHN0bUluY29taW5nR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTkNvdW50LAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZUxhc3RDaGFuZ2VkLAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNORGF0YSwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOU3RvcmFnZVR5cGUsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTlJvd1N0YXR1cworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY29sbGVjdGlvbiBvZiBvYmplY3RzIGZvciBtYWludGFpbmluZworICAgICAgICBpbmNvbWluZyBjb25uZWN0aW9uIGNlcnRpZmljYXRlIG1hcHBpbmdzIHRvCisgICAgICAgIHRtU2VjdXJpdHlOYW1lcyBvZiBhbiBTTk1QIGVuZ2luZSB0aGF0IGltcGxlbWVudHMgdGhlCisgICAgICAgIFNOTVAgVExTIFRyYW5zcG9ydCBNb2RlbC4iCisgICAgOjo9IHsgc25tcFRsc3RtR3JvdXBzIDIgfQorCitzbm1wVGxzdG1PdXRnb2luZ0dyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBzbm1wVGxzdG1QYXJhbXNDb3VudCwKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVMYXN0Q2hhbmdlZCwKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlLAorICAgICAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMsCisgICAgICAgIHNubXBUbHN0bUFkZHJDb3VudCwKKyAgICAgICAgc25tcFRsc3RtQWRkclRhYmxlTGFzdENoYW5nZWQsCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICBzbm1wVGxzdG1BZGRyU3RvcmFnZVR5cGUsCisgICAgICAgIHNubXBUbHN0bUFkZHJSb3dTdGF0dXMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgb3V0Z29pbmcgY29ubmVjdGlvbiBjZXJ0aWZpY2F0ZXMgdG8gdXNlIHdoZW4gb3BlbmluZworICAgICAgICBjb25uZWN0aW9ucyBhcyBhIHJlc3VsdCBvZiBTTk1QLVRBUkdFVC1NSUIgc2V0dGluZ3MuIgorICAgIDo6PSB7IHNubXBUbHN0bUdyb3VwcyAzIH0KKworc25tcFRsc3RtTm90aWZpY2F0aW9uR3JvdXAgTk9USUZJQ0FUSU9OLUdST1VQCisgICAgTk9USUZJQ0FUSU9OUyB7CisgICAgICAgIHNubXBUbHN0bVNlcnZlckNlcnRpZmljYXRlVW5rbm93biwKKyAgICAgICAgc25tcFRsc3RtU2VydmVySW52YWxpZENlcnRpZmljYXRlCisgICAgfQorICAgIFNUQVRVUyBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIk5vdGlmaWNhdGlvbnMiCisgICAgOjo9IHsgc25tcFRsc3RtR3JvdXBzIDQgfQorCitFTkQKZGlmZiAtLWdpdCBhL21pYnMvU05NUC1UU00tTUlCLnR4dCBiL21pYnMvU05NUC1UU00tTUlCLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NmMDliCi0tLSAvZGV2L251bGwKKysrIGIvbWlicy9TTk1QLVRTTS1NSUIudHh0CkBAIC0wLDAgKzEsMjM0IEBACitTTk1QLVRTTS1NSUIgREVGSU5JVElPTlMgOjo9IEJFR0lOCisKK0lNUE9SVFMKKyAgICBNT0RVTEUtSURFTlRJVFksIE9CSkVDVC1UWVBFLAorICAgIG1pYi0yLCBDb3VudGVyMzIKKyAgICAgIEZST00gU05NUHYyLVNNSSAtLSBSRkMyNTc4CisgICAgTU9EVUxFLUNPTVBMSUFOQ0UsIE9CSkVDVC1HUk9VUAorICAgICAgRlJPTSBTTk1QdjItQ09ORiAtLSBSRkMyNTgwCisgICAgVHJ1dGhWYWx1ZQorICAgICAgIEZST00gU05NUHYyLVRDIC0tIFJGQzI1NzkKKyAgICA7CisKK3NubXBUc21NSUIgTU9EVUxFLUlERU5USVRZCisgICAgTEFTVC1VUERBVEVEICIyMDA5MDYwOTAwMDBaIgorICAgIE9SR0FOSVpBVElPTiAiSVNNUyBXb3JraW5nIEdyb3VwIgorICAgIENPTlRBQ1QtSU5GTyAiV0ctRU1haWw6ICAgaXNtc0BsaXN0cy5pZXRmLm9yZworICAgICAgICAgICAgICAgICAgU3Vic2NyaWJlOiAgaXNtcy1yZXF1ZXN0QGxpc3RzLmlldGYub3JnCisKKyAgICAgICAgICAgICAgICAgIENoYWlyczoKKyAgICAgICAgICAgICAgICAgICAgSnVlcmdlbiBRdWl0dGVrCisgICAgICAgICAgICAgICAgICAgIE5FQyBFdXJvcGUgTHRkLgorICAgICAgICAgICAgICAgICAgICBOZXR3b3JrIExhYm9yYXRvcmllcworICAgICAgICAgICAgICAgICAgICBLdXJmdWVyc3Rlbi1BbmxhZ2UgMzYKKyAgICAgICAgICAgICAgICAgICAgNjkxMTUgSGVpZGVsYmVyZworICAgICAgICAgICAgICAgICAgICBHZXJtYW55CisgICAgICAgICAgICAgICAgICAgICs0OSA2MjIxIDkwNTExLTE1CisgICAgICAgICAgICAgICAgICAgIHF1aXR0ZWtAbmV0bGFiLm5lYy5kZQorCisgICAgICAgICAgICAgICAgICAgIEp1ZXJnZW4gU2Nob2Vud2FlbGRlcgorICAgICAgICAgICAgICAgICAgICBKYWNvYnMgVW5pdmVyc2l0eSBCcmVtZW4KKyAgICAgICAgICAgICAgICAgICAgQ2FtcHVzIFJpbmcgMQorICAgICAgICAgICAgICAgICAgICAyODcyNSBCcmVtZW4KKyAgICAgICAgICAgICAgICAgICAgR2VybWFueQorICAgICAgICAgICAgICAgICAgICArNDkgNDIxIDIwMC0zNTg3CisgICAgICAgICAgICAgICAgICAgIGouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZQorCisgICAgICAgICAgICAgICAgICBFZGl0b3I6CisgICAgICAgICAgICAgICAgICAgIERhdmlkIEhhcnJpbmd0b24KKyAgICAgICAgICAgICAgICAgICAgSHVhd2VpIFRlY2hub2xvZ2llcyBVU0EKKyAgICAgICAgICAgICAgICAgICAgMTcwMCBBbG1hIERyLgorICAgICAgICAgICAgICAgICAgICBQbGFubyBUWCA3NTA3NQorICAgICAgICAgICAgICAgICAgICBVU0EKKyAgICAgICAgICAgICAgICAgICAgKzEgNjAzLTQzNi04NjM0CisgICAgICAgICAgICAgICAgICAgIGlldGZkYmhAY29tY2FzdC5uZXQKKworICAgICAgICAgICAgICAgICAgICBXZXMgSGFyZGFrZXIKKyAgICAgICAgICAgICAgICAgICAgQ29iaGFtIEFuYWx5dGljIFNvbHV0aW9ucworICAgICAgICAgICAgICAgICAgICBQLk8uIEJveCAzODIKKyAgICAgICAgICAgICAgICAgICAgRGF2aXMsIENBICA5NTYxNworICAgICAgICAgICAgICAgICAgICBVU0EKKyAgICAgICAgICAgICAgICAgICAgKzEgNTMwIDc5MiAxOTEzCisgICAgICAgICAgICAgICAgICAgIGlldGZAaGFyZGFrZXJzLm5ldAorICAgICAgICAgICAgICAgICAiCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAiVGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCBNSUIuCisKKyAgICAgICAgSW4ga2VlcGluZyB3aXRoIHRoZSBSRkMgMzQxMSBkZXNpZ24gZGVjaXNpb25zIHRvIHVzZQorICAgICAgICBzZWxmLWNvbnRhaW5lZCBkb2N1bWVudHMsIHRoZSBSRkMgdGhhdCBjb250YWlucyB0aGUgZGVmaW5pdGlvbgorICAgICAgICBvZiB0aGlzIE1JQiBtb2R1bGUgYWxzbyBpbmNsdWRlcyB0aGUgZWxlbWVudHMgb2YgcHJvY2VkdXJlCisgICAgICAgIHRoYXQgYXJlIG5lZWRlZCBmb3IgcHJvY2Vzc2luZyB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsCisgICAgICAgIGZvciBTTk1QLiAgVGhlc2UgTUlCIG9iamVjdHMgU0hPVUxEIE5PVCBiZSBtb2RpZmllZCB2aWEgb3RoZXIKKyAgICAgICAgc3Vic3lzdGVtcyBvciBtb2RlbHMgZGVmaW5lZCBpbiBvdGhlciBkb2N1bWVudHMuICBUaGlzIGFsbG93cworICAgICAgICB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIGZvciBTTk1QIHRvIGJlIGRlc2lnbmVkIGFuZAorICAgICAgICBkb2N1bWVudGVkIGFzIGluZGVwZW5kZW50IGFuZCBzZWxmLWNvbnRhaW5lZCwgaGF2aW5nIG5vIGRpcmVjdAorICAgICAgICBpbXBhY3Qgb24gb3RoZXIgbW9kdWxlcywgYW5kIHRoaXMgYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlCisgICAgICAgIHVwZ3JhZGVkIGFuZCBzdXBwbGVtZW50ZWQgYXMgdGhlIG5lZWQgYXJpc2VzLCBhbmQgdG8gbW92ZQorICAgICAgICBhbG9uZyB0aGUgc3RhbmRhcmRzIHRyYWNrIG9uIGRpZmZlcmVudCB0aW1lLWxpbmVzIGZyb20gb3RoZXIKKyAgICAgICAgbW9kdWxlcy4KKworICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDkgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMKKyAgICAgICAgaWRlbnRpZmllZCBhcyBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgICAgICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCisgICAgICAgIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICAgICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZXJuZXQgU29jaWV0eSwgSUVURiBvciBJRVRGIFRydXN0LAorICAgICAgICAgIG5vciB0aGUgbmFtZXMgb2Ygc3BlY2lmaWMgY29udHJpYnV0b3JzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisgICAgICAgICAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICAgICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICAgICAgICBDT05UUklCVVRPUlMgJ0FTIElTJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgICAgICBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICAgICAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgICAgICBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgICAgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgICAgICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgICAgICAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgICAgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgICAgICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisgICAgICAgIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgICAgICAgIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgTUlCIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA1NTkxOworICAgICAgICBzZWUgdGhlIFJGQyBpdHNlbGYgZm9yIGZ1bGwgbGVnYWwgbm90aWNlcy4iCisKKyAgICBSRVZJU0lPTiAgICAiMjAwOTA2MDkwMDAwWiIKKyAgICBERVNDUklQVElPTiAiVGhlIGluaXRpYWwgdmVyc2lvbiwgcHVibGlzaGVkIGluIFJGQyA1NTkxLiIKKyAgICA6Oj0geyBtaWItMiAxOTAgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBzdWJ0cmVlcyBpbiB0aGUgU05NUC1UU00tTUlCCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK3NubXBUc21Ob3RpZmljYXRpb25zIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21NSUIgMCB9Citzbm1wVHNtTUlCT2JqZWN0cyAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtTUlCIDEgfQorc25tcFRzbUNvbmZvcm1hbmNlICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbU1JQiAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gT2JqZWN0cworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBTdGF0aXN0aWNzIGZvciB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsCisKK3NubXBUc21TdGF0cyAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21NSUJPYmplY3RzIDEgfQorCitzbm1wVHNtSW52YWxpZENhY2hlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiVGhlIG51bWJlciBvZiBpbmNvbWluZyBtZXNzYWdlcyBkcm9wcGVkIGJlY2F1c2UgdGhlCisKKyAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSByZWZlcnJlZCB0byBhbiBpbnZhbGlkIGNhY2hlLgorICAgICAgICAgICAgICAgICIKKyAgICA6Oj0geyBzbm1wVHNtU3RhdHMgMSB9CisKK3NubXBUc21JbmFkZXF1YXRlU2VjdXJpdHlMZXZlbHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIlRoZSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMgZHJvcHBlZCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIHRoZSBzZWN1cml0eUxldmVsIGFzc2VydGVkIGJ5IHRoZSBUcmFuc3BvcnQgTW9kZWwgd2FzCisgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgc2VjdXJpdHlMZXZlbCByZXF1ZXN0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICIKKyAgICA6Oj0geyBzbm1wVHNtU3RhdHMgMiB9CisKK3NubXBUc21Vbmtub3duUHJlZml4ZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIlRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZHJvcHBlZCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IHdhcyBzZXQgdG8gdHJ1ZSBhbmQKKyAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8ga25vd24gcHJlZml4IGZvciB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydAorICAgICAgICAgICAgICAgICBkb21haW4uCisgICAgICAgICAgICAgICAgIgorICAgIDo6PSB7IHNubXBUc21TdGF0cyAzIH0KKworc25tcFRzbUludmFsaWRQcmVmaXhlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiVGhlIG51bWJlciBvZiBtZXNzYWdlcyBkcm9wcGVkIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgdGhlIHNlY3VyaXR5TmFtZSBhc3NvY2lhdGVkIHdpdGggYW4gb3V0Z29pbmcgbWVzc2FnZQorICAgICAgICAgICAgICAgICBkaWQgbm90IGNvbnRhaW4gYSB2YWxpZCB0cmFuc3BvcnQgZG9tYWluIHByZWZpeC4KKyAgICAgICAgICAgICAgICAiCisgICAgOjo9IHsgc25tcFRzbVN0YXRzIDQgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb25maWd1cmF0aW9uCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwKKworc25tcFRzbUNvbmZpZ3VyYXRpb24gICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtTUlCT2JqZWN0cyAyIH0KKworc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUcnV0aFZhbHVlCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiSWYgdGhpcyBvYmplY3QgaXMgc2V0IHRvIHRydWUsIHRoZW4gc2VjdXJpdHlOYW1lcworICAgICAgICAgICAgICAgICBwYXNzaW5nIHRvIGFuZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBhcmUgZXhwZWN0ZWQgdG8KKyAgICAgICAgICAgICAgICAgY29udGFpbiBhIHRyYW5zcG9ydC1kb21haW4tc3BlY2lmaWMgcHJlZml4LiAgSWYgdGhpcworICAgICAgICAgICAgICAgICBvYmplY3QgaXMgc2V0IHRvIHRydWUsIHRoZW4gYSBkb21haW4tc3BlY2lmaWMgcHJlZml4CisgICAgICAgICAgICAgICAgIHdpbGwgYmUgYWRkZWQgYnkgdGhlIFRTTSB0byB0aGUgc2VjdXJpdHlOYW1lIGZvcgorICAgICAgICAgICAgICAgICBpbmNvbWluZyBtZXNzYWdlcyBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBzZWN1cml0eU5hbWUKKyAgICAgICAgICAgICAgICAgd2hlbiBwcm9jZXNzaW5nIG91dGdvaW5nIG1lc3NhZ2VzLiAgVHJhbnNwb3J0IGRvbWFpbnMKKyAgICAgICAgICAgICAgICAgYW5kIHByZWZpeGVzIGFyZSBtYWludGFpbmVkIGluIGEgcmVnaXN0cnkgYnkgSUFOQS4KKyAgICAgICAgICAgICAgICAgVGhpcyBvYmplY3QgU0hPVUxEIHBlcnNpc3QgYWNyb3NzIHN5c3RlbSByZWJvb3RzLgorICAgICAgICAgICAgICAgICIKKyAgICBERUZWQUwgeyBmYWxzZSB9CisgICAgOjo9IHsgc25tcFRzbUNvbmZpZ3VyYXRpb24gMSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNubXBUc21NSUIgLSBDb25mb3JtYW5jZSBJbmZvcm1hdGlvbgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzbm1wVHNtQ29tcGxpYW5jZXMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbUNvbmZvcm1hbmNlIDEgfQorCitzbm1wVHNtR3JvdXBzICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbUNvbmZvcm1hbmNlIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb21wbGlhbmNlIHN0YXRlbWVudHMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc25tcFRzbUNvbXBsaWFuY2UgTU9EVUxFLUNPTVBMSUFOQ0UKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgU05NUCBlbmdpbmVzIHRoYXQgc3VwcG9ydAorICAgICAgICAgICAgICAgICB0aGUgU05NUC1UU00tTUlCLgorICAgICAgICAgICAgICAgICIKKyAgICBNT0RVTEUKKyAgICAgICAgTUFOREFUT1JZLUdST1VQUyB7IHNubXBUc21Hcm91cCB9CisgICAgOjo9IHsgc25tcFRzbUNvbXBsaWFuY2VzIDEgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBVbml0cyBvZiBjb25mb3JtYW5jZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc25tcFRzbUdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBzbm1wVHNtSW52YWxpZENhY2hlcywKKyAgICAgICAgc25tcFRzbUluYWRlcXVhdGVTZWN1cml0eUxldmVscywKKyAgICAgICAgc25tcFRzbVVua25vd25QcmVmaXhlcywKKyAgICAgICAgc25tcFRzbUludmFsaWRQcmVmaXhlcywKKyAgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb2YgYW4gU05NUCBlbmdpbmUgdGhhdCBpbXBsZW1lbnRzCisKKyAgICAgICAgICAgICAgICAgdGhlIFNOTVAgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsLgorICAgICAgICAgICAgICAgICIKKyAgICA6Oj0geyBzbm1wVHNtR3JvdXBzIDIgfQorCitFTkQKZGlmZiAtLWdpdCBhL21pYnMvU05NUC1VU00tQUVTLU1JQi50eHQgYi9taWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0CmluZGV4IGU5ZTlmYjguLjRjMTczMDIgMTAwNjQ0Ci0tLSBhL21pYnMvU05NUC1VU00tQUVTLU1JQi50eHQKKysrIGIvbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dApAQCAtMzksOSArMzksOSBAQAogICAgICAgICAgICAgc2VlIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuCiAgICAgICAgICAgICBTdXBwbGVtZW50YXJ5IGluZm9ybWF0aW9uIG1heSBiZSBhdmFpbGFibGUgb24KICAgICAgICAgICAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvY29weXJpZ2h0cy9pYW5hbWliLmh0bWwuIgorCiAgICAgUkVWSVNJT04gICAgICIyMDA0MDYxNDAwMDBaIgogICAgIERFU0NSSVBUSU9OICAiSW5pdGlhbCB2ZXJzaW9uLCBwdWJsaXNoZWQgYXMgUkZDMzgyNiIKLQogICAgIDo6PSB7IHNubXBNb2R1bGVzIDIwIH0KIAogdXNtQWVzQ2ZiMTI4UHJvdG9jb2wgT0JKRUNULUlERU5USVRZCmRpZmYgLS1naXQgYS9taWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCBiL21pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0CmluZGV4IGVlMjA3NmEuLjczNzc0MjUgMTAwNjQ0Ci0tLSBhL21pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0CisrKyBiL21pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0CkBAIC0yMyw3ICsyMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZHdvb2QgQ2l0eSwgQ0EgOTQwNjMKICAgICAgICAgICAgICAgICAgIEVtYWlsOiAgc3Rqb2huc0Bjb3JwLmhvbWUubmV0CiAgICAgICAgICAgICAgICAgICBQaG9uZTogICsxLTY1MC01NTYtNTM2OCIKLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBkZWZpbml0aW9ucyBmb3IgcHJvdmlkaW5nIGZvcndhcmQKICAgICBzZWNyZWN5IGZvciBrZXkgY2hhbmdlcyBmb3IgdGhlIHVzbVVzZXJUYWJsZSwgYW5kIGZvciBwcm92aWRpbmcgYQpAQCAtMzMsOCArMzIsNiBAQAogICAgIFJFVklTSU9OICAgICAiMjAwMDAzMDYwMDAwWiIKICAgICBERVNDUklQVElPTgogICAgICAgICJJbml0aWFsIHZlcnNpb24gcHVibGlzaGVkIGFzIFJGQyAyNzg2LiIKLQotCiAgICAgOjo9IHsgZXhwZXJpbWVudGFsIDEwMSB9ICAtLSBJQU5BIERIS0VZLUNIQU5HRSAxMDEKIAogLS0gQWRtaW5pc3RyYXRpdmUgYXNzaWdubWVudHMKQEAgLTExMSw3ICsxMDgsNiBAQAogICAgICAgICAgICBiYXNlICAgIElOVEVHRVIsICAgLS0gZwogICAgICAgICAgICBwcml2YXRlVmFsdWVMZW5ndGggIElOVEVHRVIgT1BUSU9OQUwgfQogCi0KICAgICBJbXBsZW1lbnRvcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIGVpdGhlciB0aGUgdmFsdWVzIGZyb20KICAgICBPYWtsZXkgR3JvdXAgMSAgb3IgdGhlIHZhbHVlcyBvZiBmcm9tIE9ha2xleSBHcm91cCAyIGFzIHNwZWNpZmllZAogICAgIGluIFJGQy0yNDA5LCBUaGUgSW50ZXJuZXQgS2V5IEV4Y2hhbmdlLCBTZWN0aW9uIDYuMSwgNi4yIGFzIHRoZQpAQCAtMjM3LDYgKzIzMyw3IEBACiAgICAgYW4gaW1wbGVtZW50b3Igd2lsbCBzcGVjaWZ5IG9uZSBvciBtb3JlIHN0YW5kYXJkIHNlY3VyaXR5IG5hbWVzCiAgICAgYW5kIHdpbGwgcHJvdmlkZSBlbnRyaWVzIGluIHRoZSBWQUNNIHRhYmxlcyBncmFudGluZyB2YXJpb3VzCiAgICAgbGV2ZWxzIG9mIGFjY2VzcyB0byB0aG9zZSBuYW1lcy4gIFRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgVkFDTQorCiAgICAgdGFibGUgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIE1JQi4KIAogICAgIE5vdGU6IFRoaXMgdGFibGUgaXMgZXhwZWN0ZWQgdG8gYmUgcmVhZGFibGUgd2l0aG91dCBhdXRoZW50aWNhdGlvbgpAQCAtMjQ5LDcgKzI0Niw2IEBACiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQogICAgICAgICAiQW4gZW50cnkgaW4gdGhlIHVzbURIS2lja3N0YXJ0VGFibGUuICBUaGUgYWdlbnQgU0hPVUxEIGVpdGhlcgogICAgIGRlbGV0ZSB0aGlzIGVudHJ5IG9yIG1hcmsgaXQgYXMgaW5hY3RpdmUgdXBvbiBhIHN1Y2Nlc3NmdWwgU0VUIG9mCiAgICAgYW55IG9mIHRoZSBLZXlDaGFuZ2UtdHlwZWQgb2JqZWN0cyBpbiB0aGUgdXNtVXNlckVudHJ5IG9yIHVwb24gYQpAQCAtMjYwLDcgKzI1Niw2IEBACiAgICAgb25lIG9yIG1vcmUgb2YgdGhlIGtleXMgZm9yIGEgcm93IGluIHVzbVVzZXJUYWJsZSB3aXRoIGEKICAgICBwYXJ0aWN1bGFyIHNlY3VyaXR5IG5hbWUsIHRoZSByb3cgaW4gdGhpcyB0YWJsZSB3aXRoIHRoYXQgc2FtZQogICAgIHNlY3VyaXR5IG5hbWUgaXMgbm8gbG9uZ2VyIHVzZWZ1bCBvciBtZWFuaW5nZnVsLiIKLQogICAgIElOREVYICAgeyB1c21ESEtpY2tzdGFydEluZGV4IH0KICAgICA6Oj0ge3VzbURIS2lja3N0YXJ0VGFibGUgMSB9CiAKQEAgLTI4NSw2ICsyODAsNyBAQAogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIGFnZW50J3MgRGlmZmllLUhlbGxtYW4gcHVibGljIHZhbHVlIGZvciB0aGlzIHJvdy4gIEF0CisKICAgICBpbml0aWFsaXphdGlvbiwgdGhlIGFnZW50IGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgYW5kIGRlcml2ZXMKICAgICBpdHMgcHVibGljIHZhbHVlIGZyb20gdGhhdCBudW1iZXIuICBUaGlzIHB1YmxpYyB2YWx1ZSBpcyBwdWJsaXNoZWQKICAgICBoZXJlLiAgVGhpcyBwdWJsaWMgdmFsdWUgJ3knIGVxdWFscyBnXnIgTU9EIHAgd2hlcmUgZyBpcyB0aGUgZnJvbQpAQCAtMzAzLDcgKzI5OSw2IEBACiAgICAgICAgIHdoZXJlIFBWMSwuLi4sUFZrIGFyZSB0aGUgb2N0ZXRzIG9mIFBWIGZyb20gZmlyc3QgdG8gbGFzdCwgYW5kCiAgICAgICAgIHdoZXJlIFBWMSAhPSAwLgogCi0KICAgICBUaGUgZm9sbG93aW5nIERIIHBhcmFtZXRlcnMgKE9ha2xleSBncm91cCAjMiwgUkZDIDI0MDksIHNlYyA2LjEsCiAgICAgNi4yKSBhcmUgdXNlZCBmb3IgdGhpcyBvYmplY3Q6CiAKQEAgLTMyOCwxMCArMzIzLDEwIEBACiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KICAgICAgICAgIlRoZSBtYW5hZ2VyJ3MgRGlmZmllLUhlbGxtYW4gcHVibGljIHZhbHVlIGZvciB0aGlzIHJvdy4gIE5vdGUKICAgICB0aGF0IHRoaXMgdmFsdWUgaXMgbm90IHNldCB2aWEgdGhlIFNOTVAgYWdlbnQsIGJ1dCBtYXkgYmUgc2V0IHZpYQogICAgIHNvbWUgb3V0IG9mIGJhbmQgbWV0aG9kLCBzdWNoIGFzIHRoZSBkZXZpY2UncyBjb25maWd1cmF0aW9uIGZpbGUuCisKICAgICBUaGUgbWFuYWdlciBjYWxjdWxhdGVzIHRoaXMgdmFsdWUgaW4gdGhlIHNhbWUgbWFubmVyIGFuZCB1c2luZyB0aGUKICAgICBzYW1lIHBhcmFtZXRlciBzZXQgYXMgdGhlIGFnZW50IGRvZXMuICBFLmcuIGl0IHNlbGVjdHMgYSByYW5kb20KICAgICBudW1iZXIgJ3InLCBjYWxjdWxhdGVzIHkgPSBnXnIgbW9kIHAgYW5kIHByb3ZpZGVzICd5JyBhcyB0aGUKQEAgLTQyOCw2ICs0MjMsNyBAQAogICAgICAgICBpbXBsZW1lbnRzIHRoZSB1c21Vc2VyVGFibGUgYW5kIHdoaWNoIHdpc2hlcyB0aGUgYWJpbGl0eSB0bwogICAgICAgICBwb3B1bGF0ZSB0aGUgVVNNIHRhYmxlIGJhc2VkIG9uIG91dC1vZi1iYW5kIHByb3ZpZGVkIERICiAgICAgICAgIGlnbml0aW9uIHZhbHVlcy4KKwogICAgICAgICAgICAgIEFueSBhZ2VudCBpbXBsZW1lbnRpbmcgdGhpcyBncm91cCBpcyBleHBlY3RlZCB0byBwcm92aWRlCiAgICAgICAgIHByZWluc3RhbGxlZCBlbnRyaWVzIGluIHRoZSB2YWNtIHRhYmxlcyBhcyBmb2xsb3dzOgogCkBAIC00NzYsNiArNDcyLDcgQEAKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5Vmlld05hbWUgICAgICAnZGhLaWNrUmVzdHJpY3RlZCcKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5U3VidHJlZSAgICAgICAxLjMuNi4xLjIuMS4xICAoc3lzdGVtKQogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlNYXNrICAgICAgICAgICcnCisKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5VHlwZSAgICAgICAgICAxCiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseVN0b3JhZ2VUeXBlICAgcGVybWFuZW50CiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseVN0YXR1cyAgICAgICAgYWN0aXZlCkBAIC00OTMsNyArNDkwLDYgQEAKICAgICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJJdCBpcyBjb21wbGlhbnQgdG8gaW1wbGVtZW50IHRoaXMgb2JqZWN0IGFzIHJlYWQtb25seSBmb3IKICAgICAgICAgYW55IGRldmljZS4iCi0KICAgICA6Oj0geyB1c21ESEtleU1JQkNvbXBsaWFuY2VzIDEgfQogCiAtLSBVbml0cyBvZiBDb21wbGlhbmNlCkBAIC01MzMsNSArNTI5LDQgQEAKICAgICBub24tY29uZmlkZW50aWFsIGFjY2Vzcy4iCiAgICAgOjo9IHsgdXNtREhLZXlNSUJHcm91cHMgMyB9CiAKLQogRU5ECmRpZmYgLS1naXQgYS9taWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQgYi9taWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQKaW5kZXggN2Q0NTBmYi4uMjI3ODg2ZSAxMDA2NDQKLS0tIGEvbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0CisrKyBiL21pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dApAQCAtMTMsNiArMTMsNyBAQAogICAgICAgICAgVFUgQnJhdW5zY2h3ZWlnCiAgICAgICAgICBCdWVsdGVud2VnIDc0Lzc1CiAgICAgICAgICAzODEwNiBCcmF1bnNjaHdlaWcsIEdlcm1hbnkKKwogICAgICAgICAgUGhvbmU6ICs0OSA1MzEgMzkxLTMyODkKICAgICAgICAgIEVNYWlsOiBzY2hvZW53QGlici5jcy50dS1icy5kZQogCkBAIC0zMiw3ICszMyw2IEBACiAgICAgICAgICJJbml0aWFsIHZlcnNpb24sIHB1Ymxpc2hlZCBhcyBSRkMgMzQxOS4iCiAgICAgOjo9IHsgbWliLTIgMTAwIH0KIAotCiB0cmFuc3BvcnREb21haW5zIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHRyYW5zcG9ydEFkZHJlc3NNSUIgMSB9CiAKIHRyYW5zcG9ydERvbWFpblVkcElwdjQgT0JKRUNULUlERU5USVRZCkBAIC0yMDUsNiArMjA1LDcgQEAKICAgICAgICAgIHRjcElwdjQoNSkgICAgIHRyYW5zcG9ydERvbWFpblRjcElwdjQKICAgICAgICAgIHRjcElwdjYoNikgICAgIHRyYW5zcG9ydERvbWFpblRjcElwdjYKICAgICAgICAgIHRjcElwdjR6KDcpICAgIHRyYW5zcG9ydERvbWFpblRjcElwdjR6CisKICAgICAgICAgIHRjcElwdjZ6KDgpICAgIHRyYW5zcG9ydERvbWFpblRjcElwdjZ6CiAgICAgICAgICBzY3RwSXB2NCg5KSAgICB0cmFuc3BvcnREb21haW5TY3RwSXB2NAogICAgICAgICAgc2N0cElwdjYoMTApICAgdHJhbnNwb3J0RG9tYWluU2N0cElwdjYKQEAgLTI1Myw2ICsyNTQsNyBAQAogICAgICAgICAgQSBUcmFuc3BvcnRBZGRyZXNzIHZhbHVlIGlzIGFsd2F5cyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlCiAgICAgICAgICBjb250ZXh0IG9mIGEgVHJhbnNwb3J0QWRkcmVzc1R5cGUgb3IgVHJhbnNwb3J0RG9tYWluIHZhbHVlLgogICAgICAgICAgRXZlcnkgdXNhZ2Ugb2YgdGhlIFRyYW5zcG9ydEFkZHJlc3MgdGV4dHVhbCBjb252ZW50aW9uIE1VU1QKKwogICAgICAgICAgc3BlY2lmeSB0aGUgVHJhbnNwb3J0QWRkcmVzc1R5cGUgb3IgVHJhbnNwb3J0RG9tYWluIG9iamVjdAogICAgICAgICAgd2hpY2ggcHJvdmlkZXMgdGhlIGNvbnRleHQuIEZ1cnRoZXJtb3JlLCBNSUIgYXV0aG9ycyBTSE9VTEQKICAgICAgICAgIGRlZmluZSBhIHNlcGFyYXRlIFRyYW5zcG9ydEFkZHJlc3NUeXBlIG9yIFRyYW5zcG9ydERvbWFpbgpAQCAtMzQ5LDYgKzM1MSw3IEBACiAKICAgICAgICAgIFRoaXMgdGV4dHVhbCBjb252ZW50aW9uIFNIT1VMRCBOT1QgYmUgdXNlZCBkaXJlY3RseSBpbiBvYmplY3QKICAgICAgICAgIGRlZmluaXRpb25zIHNpbmNlIGl0IHJlc3RyaWN0cyBhZGRyZXNzZXMgdG8gYSBzcGVjaWZpYyBmb3JtYXQuCisKICAgICAgICAgIEhvd2V2ZXIsIGlmIGl0IGlzIHVzZWQsIGl0IE1BWSBiZSB1c2VkIGVpdGhlciBvbiBpdHMgb3duIG9yCiAgICAgICAgICBpbiBjb25qdW5jdGlvbiB3aXRoIFRyYW5zcG9ydEFkZHJlc3NUeXBlIG9yIFRyYW5zcG9ydERvbWFpbgogICAgICAgICAgYXMgYSBwYWlyLiIKQEAgLTM5Nyw2ICs0MDAsNyBAQAogICAgICAgICAgdGltZSBvZiB0aGUgbWFuYWdlbWVudCBvcGVyYXRpb24pLgogCiAgICAgICAgICBUaGUgREVTQ1JJUFRJT04gY2xhdXNlIG9mIFRyYW5zcG9ydEFkZHJlc3Mgb2JqZWN0cyB0aGF0IG1heQorCiAgICAgICAgICBoYXZlIFRyYW5zcG9ydEFkZHJlc3NEbnMgdmFsdWVzIG11c3QgZnVsbHkgZGVzY3JpYmUgaG93IChhbmQKICAgICAgICAgIHdoZW4pIHN1Y2ggbmFtZXMgYXJlIHRvIGJlIHJlc29sdmVkIHRvIElQIGFkZHJlc3NlcyBhbmQgdmljZQogICAgICAgICAgdmVyc2EuCmRpZmYgLS1naXQgYS9taWJzL1RVTk5FTC1NSUIudHh0IGIvbWlicy9UVU5ORUwtTUlCLnR4dAppbmRleCA2MTVmYWE2Li41Zjk1OTZiIDEwMDY0NAotLS0gYS9taWJzL1RVTk5FTC1NSUIudHh0CisrKyBiL21pYnMvVFVOTkVMLU1JQi50eHQKQEAgLTM3LDggKzM3LDYgQEAKICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhpcyBNSUIgbW9kdWxlIGlzIHBhcnQgb2YgUkZDIDQwODc7ICBzZWUKICAgICAgICAgICAgIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIgogCi0KLQogICAgIFJFVklTSU9OICAgICAiMjAwNTA1MTYwMDAwWiIgLS0gTWF5IDE2LCAyMDA1CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJJUHY0LXNwZWNpZmljIG9iamVjdHMgd2VyZSBkZXByZWNhdGVkLCBpbmNsdWRpbmcKQEAgLTg3LDkgKzg1LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIlRoZSAoY29uY2VwdHVhbCkgdGFibGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbgogICAgICAgICAgICAgY29uZmlndXJlZCB0dW5uZWxzLiIKLQotCi0KICAgICA6Oj0geyB0dW5uZWwgMSB9CiAKIHR1bm5lbElmRW50cnkgT0JKRUNULVRZUEUKQEAgLTEzOSw4ICsxMzQsNiBAQAogICAgICAgICAgICAgKGkuZS4sIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHVzZWQgaW4gdGhlIG91dGVyIElQCiAgICAgICAgICAgICBoZWFkZXIpLCBvciAwLjAuMC4wIGlmIHVua25vd24sIG9yIGFuIElQdjYgYWRkcmVzcywgb3IKIAotCi0KICAgICAgICAgICAgIHRoZSB0dW5uZWwgaXMgbm90IGEgcG9pbnQtdG8tcG9pbnQgbGluayAoZS5nLiwgaWYgaXQKICAgICAgICAgICAgIGlzIGEgNnRvNCB0dW5uZWwpLgogCkBAIC0xOTAsOCArMTgzLDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIlRoZSBtZXRob2QgdXNlZCB0byBzZXQgdGhlIGhpZ2ggNiBiaXRzICh0aGUKIAotCi0KICAgICAgICAgICAgIGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIGNvZGVwb2ludCkgb2YgdGhlIElQdjQgVE9TIG9yCiAgICAgICAgICAgICBJUHY2IFRyYWZmaWMgQ2xhc3MgaW4gdGhlIG91dGVyIElQIGhlYWRlci4gIEEgdmFsdWUgb2YKICAgICAgICAgICAgIC0xIGluZGljYXRlcyB0aGF0IHRoZSBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUKQEAgLTI0MSw4ICsyMzIsNiBAQAogICAgICAgICAgICAgKGkuZS4sIHRoZSBzb3VyY2UgYWRkcmVzcyB1c2VkIGluIHRoZSBvdXRlciBJUAogICAgICAgICAgICAgaGVhZGVyKS4gIElmIHRoZSBhZGRyZXNzIGlzIHVua25vd24sIHRoZSB2YWx1ZSBpcwogCi0KLQogICAgICAgICAgICAgMC4wLjAuMCBmb3IgSVB2NCBvciA6OiBmb3IgSVB2Ni4gIFRoZSB0eXBlIG9mIHRoaXMKICAgICAgICAgICAgIG9iamVjdCBpcyBnaXZlbiBieSB0dW5uZWxJZkFkZHJlc3NUeXBlLiIKICAgICA6Oj0geyB0dW5uZWxJZkVudHJ5IDkgfQpAQCAtMjkxLDkgKzI4MCw2IEBACiAgICAgICAgICAgICBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHR1bm5lbEluZXRDb25maWdUYWJsZS4iCiAgICAgOjo9IHsgdHVubmVsIDIgfQogCi0KLQotCiB0dW5uZWxDb25maWdFbnRyeSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgVHVubmVsQ29uZmlnRW50cnkKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCkBAIC0zNDMsOCArMzI5LDYgQEAKICAgICAgICAgICAgIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdHVubmVsSW5ldENvbmZpZ1JlbW90ZUFkZHJlc3MuIgogICAgIDo6PSB7IHR1bm5lbENvbmZpZ0VudHJ5IDIgfQogCi0KLQogdHVubmVsQ29uZmlnRW5jYXBzTWV0aG9kIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJQU5BdHVubmVsVHlwZQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKQEAgLTM5Myw5ICszNzcsNiBAQAogCiB0dW5uZWxDb25maWdTdGF0dXMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIFJvd1N0YXR1cwotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgpAQCAtNDQ0LDkgKzQyNSw2IEBACiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICAiVGhlIChjb25jZXB0dWFsKSB0YWJsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uCiAgICAgICAgICAgICBjb25maWd1cmVkIHR1bm5lbHMuICBUaGlzIHRhYmxlIGNhbiBiZSB1c2VkIHRvIG1hcCBhCiAgICAgICAgICAgICBzZXQgb2YgdHVubmVsIGVuZHBvaW50cyB0byB0aGUgYXNzb2NpYXRlZCBpZkluZGV4CkBAIC00OTUsOSArNDczLDYgQEAKIH0KIAogdHVubmVsSW5ldENvbmZpZ0FkZHJlc3NUeXBlIE9CSkVDVC1UWVBFCi0KLQotCiAgICAgU1lOVEFYICAgICBJbmV0QWRkcmVzc1R5cGUKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC01NDcsOCArNTIyLDYgQEAKICAgICAgICAgICAgIGFsbG93IG11bHRpcGxlIHBhcmFsbGVsIHR1bm5lbHMsIHRoZSBtYW5hZ2VyIGlzCiAgICAgICAgICAgICByZXNwb25zaWJsZSBmb3IgY2hvb3NpbmcgYW55IElEIHdoaWNoIGRvZXMgbm90CiAKLQotCiAgICAgICAgICAgICBjb25mbGljdCB3aXRoIGFuIGV4aXN0aW5nIHJvdywgc3VjaCBhcyBjaG9vc2luZyBhCiAgICAgICAgICAgICByYW5kb20gbnVtYmVyLiIKICAgICA6Oj0geyB0dW5uZWxJbmV0Q29uZmlnRW50cnkgNSB9CkBAIC01OTgsOCArNTcxLDYgQEAKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBtYW5uZXIsIGFuZCBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgICByb3dzIHdpbGwgYmUgaW5zdGFudGlhdGVkIGluIHRoZSBpZlRhYmxlIGFuZCB0aGUKIAotCi0KICAgICAgICAgICAgIHR1bm5lbElmVGFibGUuICBUaGUgc3RhdHVzIG9mIHRoaXMgcm93IHdpbGwgYmVjb21lCiAgICAgICAgICAgICBhY3RpdmUgYXMgc29vbiBhcyB0aGUgYWdlbnQgYXNzaWducyB0aGUgaW50ZXJmYWNlCiAgICAgICAgICAgICBpbmRleCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMKQEAgLTY0OCw5ICs2MTksNiBAQAogCiAgICAgICAgIE9CSkVDVCAgICAgIHR1bm5lbElmVE9TCiAgICAgICAgIE1JTi1BQ0NFU1MgIHJlYWQtb25seQotCi0KLQogICAgICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuIgogCkBAIC03MDAsOCArNjY4LDYgQEAKICAgICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLiIKIAotCi0KICAgICAgICAgT0JKRUNUICAgICAgdHVubmVsSWZBZGRyZXNzVHlwZQogICAgICAgICBTWU5UQVggICAgICBJbmV0QWRkcmVzc1R5cGUgeyBpcHY0KDEpLCBpcHY2KDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY0eigzKSwgaXB2NnooNCkgfQpAQCAtNzUxLDggKzcxNyw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyB0byBzdXBwb3J0IGJhc2ljIG1hbmFnZW1lbnQKIAotCi0KICAgICAgICAgICAgIG9mIElQdjQgVHVubmVscy4gIFNpbmNlIHRoaXMgZ3JvdXAgY2Fubm90IHN1cHBvcnQKICAgICAgICAgICAgIElQdjYsIGl0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKICAgICAgICAgICAgIHR1bm5lbE1JQkluZXRHcm91cC4iCmRpZmYgLS1naXQgYS9taWJzL1VDRC1TTk1QLU1JQi50eHQgYi9taWJzL1VDRC1TTk1QLU1JQi50eHQKaW5kZXggMWM2NThlMC4uZThhY2M4YyAxMDA2NDQKLS0tIGEvbWlicy9VQ0QtU05NUC1NSUIudHh0CisrKyBiL21pYnMvVUNELVNOTVAtTUlCLnR4dApAQCAtMzAsMTQgKzMwLDE0IEBACiAKIElNUE9SVFMKICAgICBPQkpFQ1QtVFlQRSwgTk9USUZJQ0FUSU9OLVRZUEUsIE1PRFVMRS1JREVOVElUWSwKLSAgICBJbnRlZ2VyMzIsIE9wYXF1ZSwgZW50ZXJwcmlzZXMsIENvdW50ZXIzMgorICAgIEludGVnZXIzMiwgT3BhcXVlLCBlbnRlcnByaXNlcywgQ291bnRlcjMyLCBVbnNpZ25lZDMyCiAgICAgICAgIEZST00gU05NUHYyLVNNSQogCiAgICAgVEVYVFVBTC1DT05WRU5USU9OLCBEaXNwbGF5U3RyaW5nLCBUcnV0aFZhbHVlCiAJRlJPTSBTTk1QdjItVEM7CiAKIHVjZGF2aXMgTU9EVUxFLUlERU5USVRZCi0gICAgTEFTVC1VUERBVEVEICIyMDA2MTEyMjAwMDBaIgorICAgIExBU1QtVVBEQVRFRCAiMjAxNDA3MzEwMDAwWiIKICAgICBPUkdBTklaQVRJT04gIlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgRGF2aXMiCiAgICAgQ09OVEFDVC1JTkZPICAgIAogCSJUaGlzIG1pYiBpcyBubyBsb25nZXIgYmVpbmcgbWFpbnRhaW5lZCBieSB0aGUgVW5pdmVyc2l0eSBvZgpAQCAtNTUsNiArNTUsMTcgQEAKICAgICBERVNDUklQVElPTgogCSJUaGlzIGZpbGUgZGVmaW5lcyB0aGUgcHJpdmF0ZSBVQ0QgU05NUCBNSUIgZXh0ZW5zaW9ucy4iCiAKKyAgICBSRVZJU0lPTiAgICAgIjIwMTQwNzMxMDAwMFoiCisgICAgREVTQ1JJUFRJT04KKwkiTmV3IG9iamVjdCBmb3IgbnVtYmVyIG9mIENQVXMgYXMgY291bnRlZCBieSB0aGUgYWdlbnQiCisgICAgUkVWSVNJT04JICIyMDExMDUxNDAwMDBaIgorICAgIERFU0NSSVBUSU9OCisJIk5ldyBvYmplY3RzIGZvciBtb25pdG9yaW5nIENQVSBTdGVhbCwgR3Vlc3QgYW5kIE5pY2UgdmFsdWVzIgorCisgICAgUkVWSVNJT04JICIyMDA5MDExOTAwMDBaIgorICAgIERFU0NSSVBUSU9OCisJIk5ldyA2NC1iaXQgb2JqZWN0cyBmb3IgbW9uaXRvcmluZyBsYXJnZSBkaXNrIHVzYWdlIgorCiAgICAgUkVWSVNJT04JICIyMDA2MTEyMjAwMDBaIgogICAgIERFU0NSSVBUSU9OCiAJIkNsYXJpZnkgYmVoYXZpb3VyIG9mIG9iamVjdHMgaW4gdGhlIG1lbW9yeSAmIHN5c3RlbVN0YXRzIGdyb3VwcwpAQCAtNjcyLDcgKzY4MywxMyBAQAogICAgIGRza1BlcmNlbnQJCUludGVnZXIzMiwKICAgICBkc2tQZXJjZW50Tm9kZQlJbnRlZ2VyMzIsCiAgICAgZHNrRXJyb3JGbGFnCVVDREVycm9yRmxhZywKLSAgICBkc2tFcnJvck1zZwkJRGlzcGxheVN0cmluZworICAgIGRza0Vycm9yTXNnCQlEaXNwbGF5U3RyaW5nLAorICAgIGRza1RvdGFsTG93CQlVbnNpZ25lZDMyLAorICAgIGRza1RvdGFsSGlnaAlVbnNpZ25lZDMyLAorICAgIGRza0F2YWlsTG93CQlVbnNpZ25lZDMyLAorICAgIGRza0F2YWlsSGlnaAlVbnNpZ25lZDMyLAorICAgIGRza1VzZWRMb3cJCVVuc2lnbmVkMzIsCisgICAgZHNrVXNlZEhpZ2gJCVVuc2lnbmVkMzIKIH0KIAogZHNrSW5kZXggT0JKRUNULVRZUEUKQEAgLTc2NSw2ICs3ODIsNjAgQEAKIAkiUGVyY2VudGFnZSBvZiBpbm9kZXMgdXNlZCBvbiBkaXNrIgogICAgIDo6PSB7IGRza0VudHJ5IDEwIH0gCiAKK2Rza1RvdGFsTG93IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJUb3RhbCBzaXplIG9mIHRoZSBkaXNrL3BhcnRpb24gKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tUb3RhbEhpZ2ggY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTEgfQorCitkc2tUb3RhbEhpZ2ggT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIlRvdGFsIHNpemUgb2YgdGhlIGRpc2svcGFydGlvbiAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza1RvdGFsTG93IGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDEyIH0KKworZHNrQXZhaWxMb3cgT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIkF2YWlsYWJsZSBzcGFjZSBvbiB0aGUgZGlzayAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza0F2YWlsSGlnaCBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxMyB9CisKK2Rza0F2YWlsSGlnaCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiQXZhaWxhYmxlIHNwYWNlIG9uIHRoZSBkaXNrIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrQXZhaWxMb3cgY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTQgfQorCitkc2tVc2VkTG93IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJVc2VkIHNwYWNlIG9uIHRoZSBkaXNrIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrVXNlZEhpZ2ggY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTUgfQorCitkc2tVc2VkSGlnaCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiVXNlZCBzcGFjZSBvbiB0aGUgZGlzayAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza1VzZWRMb3cgY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTYgfQorCiBkc2tFcnJvckZsYWcgT0JKRUNULVRZUEUKICAgICBTWU5UQVgJVUNERXJyb3JGbGFnCiAgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKQEAgLTgzNyw3ICs5MDgsNyBAQAogCiBsYUNvbmZpZyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWAlEaXNwbGF5U3RyaW5nCi0gICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBNQVgtQUNDRVNTCXJlYWQtd3JpdGUKICAgICBTVEFUVVMJY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAJIlRoZSB3YXRjaCBwb2ludCBmb3IgbG9hZC1hdmVyYWdlcyB0byBzaWduYWwgYW4KQEAgLTEzNjgsNiArMTQzOSw3NSBAQAogICAgICAgICAiTnVtYmVyIG9mIGJsb2NrcyBzd2FwcGVkIG91dCIKICAgICA6Oj0geyBzeXN0ZW1TdGF0cyA2MyB9CiAKK3NzQ3B1UmF3U3RlYWwgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgJ3RpY2tzJyAodHlwaWNhbGx5IDEvMTAwcykgc3BlbnQKKyAgICAgICAgIGJ5IHRoZSBoeXBlcnZpc29yIGNvZGUgdG8gcnVuIG90aGVyIFZNcyBldmVuCisgICAgICAgICB0aG91Z2ggdGhlIENQVSBpbiB0aGUgY3VycmVudCBWTSBoYWQgc29tZXRoaW5nIHJ1bm5hYmxlLgorCisgICAgICAgICBUaGlzIG9iamVjdCB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBvbiBob3N0cyB3aGVyZQorICAgICAgICAgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCBtZWFzdXJlCisgICAgICAgICB0aGlzIHBhcnRpY3VsYXIgQ1BVIG1ldHJpYy4KKworICAgICAgICAgT24gYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtLCB0aGUgJ3NzQ3B1UmF3KicKKyAgICAgICAgIGNvdW50ZXJzIGFyZSBjdW11bGF0aXZlIG92ZXIgYWxsIENQVXMsIHNvIHRoZWlyCisgICAgICAgICBzdW0gd2lsbCB0eXBpY2FsbHkgYmUgTioxMDAgKGZvciBOIHByb2Nlc3NvcnMpLiIKKyAgICA6Oj0geyBzeXN0ZW1TdGF0cyA2NCB9CisKK3NzQ3B1UmF3R3Vlc3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgJ3RpY2tzJyAodHlwaWNhbGx5IDEvMTAwcykgc3BlbnQKKyAgICAgICAgIGJ5IHRoZSBDUFUgdG8gcnVuIGEgdmlydHVhbCBDUFUgKGd1ZXN0KS4KKworICAgICAgICAgVGhpcyBvYmplY3Qgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgb24gaG9zdHMgd2hlcmUKKyAgICAgICAgIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgbWVhc3VyZQorICAgICAgICAgdGhpcyBwYXJ0aWN1bGFyIENQVSBtZXRyaWMuCisKKyAgICAgICAgIE9uIGEgbXVsdGktcHJvY2Vzc29yIHN5c3RlbSwgdGhlICdzc0NwdVJhdyonCisgICAgICAgICBjb3VudGVycyBhcmUgY3VtdWxhdGl2ZSBvdmVyIGFsbCBDUFVzLCBzbyB0aGVpcgorICAgICAgICAgc3VtIHdpbGwgdHlwaWNhbGx5IGJlIE4qMTAwIChmb3IgTiBwcm9jZXNzb3JzKS4iCisgICAgOjo9IHsgc3lzdGVtU3RhdHMgNjUgfQorCitzc0NwdVJhd0d1ZXN0TmljZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiAndGlja3MnICh0eXBpY2FsbHkgMS8xMDBzKSBzcGVudAorICAgICAgICAgYnkgdGhlIENQVSB0byBydW4gYSBuaWNlZCB2aXJ0dWFsIENQVSAoZ3Vlc3QpLgorCisgICAgICAgICBUaGlzIG9iamVjdCB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBvbiBob3N0cyB3aGVyZQorICAgICAgICAgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCBtZWFzdXJlCisgICAgICAgICB0aGlzIHBhcnRpY3VsYXIgQ1BVIG1ldHJpYy4KKworICAgICAgICAgT24gYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtLCB0aGUgJ3NzQ3B1UmF3KicKKyAgICAgICAgIGNvdW50ZXJzIGFyZSBjdW11bGF0aXZlIG92ZXIgYWxsIENQVXMsIHNvIHRoZWlyCisgICAgICAgICBzdW0gd2lsbCB0eXBpY2FsbHkgYmUgTioxMDAgKGZvciBOIHByb2Nlc3NvcnMpLiIKKyAgICA6Oj0geyBzeXN0ZW1TdGF0cyA2NiB9CisKK3NzQ3B1TnVtQ3B1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBwcm9jZXNzb3JzLCBhcyBjb3VudGVkIGJ5IHRoZSBhZ2VudC4KKyAgICAgICAgIFRoaXMgb2JqZWN0J3MgdmFsdWUgbWF5IGJlIHVzZWZ1bCBpbiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgb2YgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcyB3aGVyZSBub3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgIGxvYWQgYXZlcmFnZSBkbyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIG51bWJlciBvZgorICAgICAgICAgcHJvY2Vzc29ycyBpbiB0aGUgc3lzdGVtLgorCisgICAgICAgICBGb3Igb3RoZXIgb2JqZWN0cyBpbiB0aGUgc3lzdGVtU3RhdHMgZ3JvdXAgd2hvc2UKKyAgICAgICAgIGRlc2NyaXB0aW9ucyByZWZlciB0byAnTiBwcm9jZXNzb3JzJywgdGhpcyBvYmplY3QncworICAgICAgICAgdmFsdWUgaXMgTi4iCisgICAgOjo9IHsgc3lzdGVtU3RhdHMgNjcgfQorCisKIC0tIHBvc3NpYmx5IHVzZWQgaW4gdGhlIGZ1dHVyZToKIC0tCiAtLSBzc0Vycm9yRmxhZyBPQkpFQ1QtVFlQRQpkaWZmIC0tZ2l0IGEvbWlicy9pYW5hbGlzdCBiL21pYnMvaWFuYWxpc3QKaW5kZXggYzNmMDU3NS4uOGIzMWFkNiAxMDA2NDQKLS0tIGEvbWlicy9pYW5hbGlzdAorKysgYi9taWJzL2lhbmFsaXN0CkBAIC0xLDExICsxLDE3IEBACi0jIHVwZGF0ZWQgMjAwNS0wMS0wNgotaWFuYWlmdHlwZS1taWIJCQlJQU5BaWZUeXBlLU1JQgotaWFuYWxhbmd1YWdlLW1pYgkJSUFOQS1MQU5HVUFHRS1NSUIKKyMgdXBkYXRlZCAyMDE0LTA4LTE0CiBpYW5hYWRkcmVzc2ZhbWlseW51bWJlcnMtbWliCUlBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIKLWlhbmFpcHJvdXRlcHJvdG9jb2wtbWliCQlJQU5BLVJUUFJPVE8tTUlCCi1pYW5hdG4zMjcwZXRjLW1pYgkJSUFOQVRuMzI3MGVUQy1NSUIKLWlhbmFtYWxsb2MtbWliCQkJSUFOQS1NQUxMT0MtTUlCCitpYW5hYmZkdGNzdGQtbWliCQlJQU5BLUJGRC1UQy1TVEQtTUlCCiBpYW5hY2hhcnNldC1taWIJCQlJQU5BLUNIQVJTRVQtTUlCCi1pYW5hcHJpbnRlci1taWIJCQlJQU5BLVBSSU5URVItTUlCCitpYW5hZW50aXR5LW1pYgkJCUlBTkEtRU5USVRZLU1JQgogaWFuYWZpbmlzaGVyLW1pYgkJSUFOQS1GSU5JU0hFUi1NSUIKK2lhbmFnbXBsc3RjLW1pYgkJCUlBTkEtR01QTFMtVEMtTUlCCitpYW5haWZ0eXBlLW1pYgkJCUlBTkFpZlR5cGUtTUlCCitpYW5haXByb3V0ZXByb3RvY29sLW1pYgkJSUFOQS1SVFBST1RPLU1JQgoraWFuYWlwcG1tZXRyaWNzcmVnaXN0cnktbWliCUlBTkEtSVBQTS1NRVRSSUNTLVJFR0lTVFJZLU1JQgogaWFuYWl0dWFsYXJtdGMtbWliCQlJQU5BLUlUVS1BTEFSTS1UQy1NSUIKK2lhbmFsYW5ndWFnZS1taWIJCUlBTkEtTEFOR1VBR0UtTUlCCitpYW5hbWFsbG9jLW1pYgkJCUlBTkEtTUFMTE9DLU1JQgoraWFuYW1hdS1taWIJCQlJQU5BLU1BVS1NSUIKK2lhbmFvbHNydjJsaW5rbWV0cmljdHlwZS1taWIJSUFOQS1PTFNSdjItTElOSy1NRVRSSUMtVFlQRS1NSUIKK2lhbmFwcmludGVyLW1pYgkJCUlBTkEtUFJJTlRFUi1NSUIKK2lhbmF0bjMyNzBldGMtbWliCQlJQU5BVG4zMjcwZVRDLU1JQgpkaWZmIC0tZ2l0IGEvbWlicy9yZmNsaXN0IGIvbWlicy9yZmNsaXN0CmluZGV4IDRkMDM0MzQuLmUwZDNlZWYgMTAwNjQ0Ci0tLSBhL21pYnMvcmZjbGlzdAorKysgYi9taWJzL3JmY2xpc3QKQEAgLTEsNCArMSw0IEBACi0jIHVwZGF0ZWQgMjAwNS0wMy0xNAorIyB1cGRhdGVkIDIwMTQtMDgtMTUKIDExNTUJUkZDMTE1NS1TTUkKIDEyMTMJUkZDMTIxMy1NSUIKIDEyMjcJU01VWC1NSUIKQEAgLTE5LDcgKzE5LDYgQEAKIDE2MTEJRE5TLVNFUlZFUi1NSUIKIDE2MTIJRE5TLVJFU09MVkVSLU1JQgogMTYyOAlVUFMtTUlCCi0xNjU3CUJHUDQtTUlCCiAxNjU4CUNIQVJBQ1RFUi1NSUIKIDE2NTkJUlMtMjMyLU1JQgogMTY2MAlQQVJBTExFTC1NSUIKQEAgLTM2LDcgKzM1LDYgQEAKIDE4NTAJT1NQRi1NSUI6T1NQRi1UUkFQLU1JQgogMjAwNglNSVAtTUlCCiAyMDIwCURPVDEyLUlGLU1JQgotMjAyMQlSTU9OMi1NSUIKIDIwMjQJRExTVy1NSUIKIDIwNTEJQVBQQy1NSUIKIDIxMDgJU05NUC1SRVBFQVRFUi1NSUIKQEAgLTc3LDE1ICs3NSw4IEBACiAyNTk0CVdXVy1NSUIKIDI2MDUJRElSRUNUT1JZLVNFUlZFUi1NSUIKIDI2MTMJU01PTi1NSUIKLTI2MTgJUkFESVVTLUFVVEgtQ0xJRU5ULU1JQgotMjYxOQlSQURJVVMtQVVUSC1TRVJWRVItTUlCCi0yNjIwCVJBRElVUy1BQ0MtQ0xJRU5ULU1JQgotMjYyMQlSQURJVVMtQUNDLVNFUlZFUi1NSUIKIDI2NjIJQURTTC1UQy1NSUI6QURTTC1MSU5FLU1JQgogMjY2NglFVEhFUi1DSElQU0VULU1JQgotMjY2OQlET0NTLUNBQkxFLURFVklDRS1NSUIKLTI2NzAJRE9DUy1JRi1NSUIKLTI2NzQJUC1CUklER0UtTUlCOlEtQlJJREdFLU1JQgogMjY3NwlOSFJQLU1JQgogMjcwNwlKb2ItTW9uaXRvcmluZy1NSUIKIDI3MjAJRkxPVy1NRVRFUi1NSUIKQEAgLTEwMiw3ICs5Myw2IEBACiAyODYzCUlGLU1JQgogMjg2NAlJRi1JTlZFUlRFRC1TVEFDSy1NSUIKIDI5MjIJUFRPUE8tTUlCCi0yOTI1CURJU01BTi1QSU5HLU1JQjpESVNNQU4tVFJBQ0VST1VURS1NSUI6RElTTUFOLU5TTE9PS1VQLU1JQgogMjkzMglJUE1ST1VURS1TVEQtTUlCCiAyOTMzCUlHTVAtU1RELU1JQgogMjkzNAlQSU0tTUlCCkBAIC0xNDcsNyArMTM3LDYgQEAKIDM2MDYJQVRNMi1NSUIKIDM2MjEJUE9XRVItRVRIRVJORVQtTUlCCiAzNjM1CUV0aGVyTGlrZS1NSUIKLTM2MzYJTUFVLU1JQgogMzYzNwlFVEhFUi1XSVMKIDM3MDUJSEMtUGVyZkhpc3QtVEMtTUlCCiAzNzI4CVZEU0wtTElORS1NSUIKQEAgLTE3OCwxMSArMTY3LDExMyBAQAogNDA4NwlUVU5ORUwtTUlCCiA0MTEzCVVEUC1NSUIKIDQxMzEJRE9DUy1JRVRGLUJQSTItTUlCCi00MTMzCUVOVElUWS1NSUIKIDQxNDkJU1NQTS1NSUIKIDQxODgJQlJJREdFLU1JQgogNDIyMAlURS1MSU5LLVNURC1NSUIKIDQyNjUJVlBOLVRDLVNURC1NSUIKIDQyNjgJRU5USVRZLVNUQVRFLVRDLU1JQjpFTlRJVFktU1RBVEUtTUlCCis0MjczCUJHUDQtTUlCCiA0MjkyCUlQLUZPUldBUkQtTUlCCiA0MjkzCUlQLU1JQgorNDI5NQlNT0JJTEVJUFY2LU1JQgorNDMxOAlSU1RQLU1JQgorNDMxOQlIRFNMMi1TSERTTC1MSU5FLU1JQgorNDMyMwlET0NTLUlFVEYtUU9TLU1JQgorNDM2MwlQLUJSSURHRS1NSUI6US1CUklER0UtTUlCCis0MzY4CU1QTFMtTEMtQVRNLVNURC1NSUI6TVBMUy1MQy1GUi1TVEQtTUlCCis0MzgyCU1QTFMtTDNWUE4tU1RELU1JQgorNDQwNAlGQ0lQLU1HTVQtTUlCCis0NDM4CVQxMS1GQy1OQU1FLVNFUlZFUi1NSUIKKzQ0MzkJVDExLVRDLU1JQjpUMTEtRkMtRkFCUklDLUFERFItTUdSLU1JQgorNDQ0NAlJU0lTLU1JQgorNDQ1NQlTQ1NJLU1JQgorNDQ5OAlBR0dSRUdBVEUtTUlCOlRJTUUtQUdHUkVHQVRFLU1JQgorNDUwMglSTU9OMi1NSUIKKzQ1NDUJSVBTLUFVVEgtTUlCCis0NTQ2CURPQ1MtSUYtTUlCCis0NTQ3CURPQ1MtSUVURi1DQUJMRS1ERVZJQ0UtTk9USUZJQ0FUSU9OLU1JQgorNDU2MAlESVNNQU4tUElORy1NSUI6RElTTUFOLVRSQUNFUk9VVEUtTUlCOkRJU01BTi1OU0xPT0tVUC1NSUIKKzQ2MjQJTVNEUC1NSUIKKzQ2MjUJVDExLUZDLVJPVVRFLU1JQgorNDYyNglUMTEtRkMtRlNQRi1NSUIKKzQ2MzEJTE1QLU1JQgorNDYzOQlET0NTLUNBQkxFLURFVklDRS1NSUIKKzQ2NjgJUkFESVVTLUFVVEgtQ0xJRU5ULU1JQgorNDY2OQlSQURJVVMtQVVUSC1TRVJWRVItTUlCCis0NjcwCVJBRElVUy1BQ0MtQ0xJRU5ULU1JQgorNDY3MQlSQURJVVMtQUNDLVNFUlZFUi1NSUIKKzQ2NzIJUkFESVVTLURZTkFVVEgtQ0xJRU5ULU1JQgorNDY3MwlSQURJVVMtRFlOQVVUSC1TRVJWRVItTUlCCis0NjgyCVBLVEMtSUVURi1NVEEtTUlCCis0NzA2CUFEU0wyLUxJTkUtVEMtTUlCOkFEU0wyLUxJTkUtTUlCCis0NzExCVJBUU1PTi1NSUIKKzQ3NDcJVDExLUZDLVZJUlRVQUwtRkFCUklDLU1JQgorNDc4MAlTSVAtVEMtTUlCOlNJUC1DT01NT04tTUlCOlNJUC1VQS1NSUI6U0lQLVNFUlZFUi1NSUIKKzQ3ODkJU05NUC1JRUVFODAyLVRNLU1JQgorNDgwMQlHTVBMUy1UQy1TVEQtTUlCCis0ODAyCUdNUExTLVRFLVNURC1NSUIKKzQ4MDMJR01QTFMtTFNSLVNURC1NSUI6R01QTFMtTEFCRUwtU1RELU1JQgorNDgwNwlJUFNFQy1TUEQtTUlCCis0ODM2CU1BVS1NSUIKKzQ4MzcJRE9UMy1FUE9OLU1JQgorNDg3OAlET1QzLU9BTS1NSUIKKzQ4OTgJVENQLUVTVEFUUy1NSUIKKzQ5MzUJVDExLUZDLUZBQlJJQy1DT05GSUctU0VSVkVSLU1JQgorNDkzNglUMTEtRkMtRkFCUklDLUxPQ0stTUlCOlQxMS1GQy1aT05FLVNFUlZFUi1NSUIKKzQ5MzkJSVNOUy1NSUIKKzQ5ODMJVDExLUZDLVJTQ04tTUlCCis1MDE3CVVSSS1UQy1NSUIKKzUwNjAJUElNLVNURC1NSUIKKzUwNjYJSUYtQ0FQLVNUQUNLLU1JQjpFRk0tQ1UtTUlCCis1MDk3CVVEUExJVEUtTUlCCis1MDk4CVBLVEMtSUVURi1TSUctTUlCCis1MTMxCUxBTkdUQUctVEMtTUlCCis1MTMyCUlQTUNBU1QtTUlCCis1MTkwCU1JRENPTS1NSUIKKzUyNDAJUElNLUJTUi1NSUIKKzUzMjQJVDExLUZDLVNQLVRDLU1JQjpUMTEtRkMtU1AtQVVUSEVOVElDQVRJT04tTUlCOlQxMS1GQy1TUC1aT05JTkctTUlCOlQxMS1GQy1TUC1QT0xJQ1ktTUlCOlQxMS1GQy1TUC1TQS1NSUIKKzU0MjcJU1lTTE9HLVRDLU1JQgorNTQyOAlQS1RDLUlFVEYtRVZFTlQtTUlCCis1NDg4CU5FTU8tTUlCCis1NTE5CU1HTUQtU1RELU1JQgorNTUyNQlSU0VSUE9PTC1NSUIKKzU1NDIJUFctVEMtU1RELU1JQgorNTU5MSAgICBTTk1QLVRTTS1NSUIKKzU2MDEJUFctU1RELU1JQjpJQU5BLVBXRTMtTUlCCis1NjAyCVBXLU1QTFMtU1RELU1JQgorNTYwMwlQVy1FTkVULVNURC1NSUIKKzU2MDQJUFctVERNLU1JQgorNTYwNQlQVy1BVE0tTUlCCis1NjQzCU9TUEZWMy1NSUIKKzU2NTAJVkRTTDItTElORS1UQy1NSUI6VkRTTDItTElORS1NSUIKKzU2NzYJU1lTTE9HLU1TRy1NSUIKKzU3MjgJRFZCLVJDUy1NSUIKKzU4MTMJRk9SQ0VTLU1JQgorNTgzMwlDQVBXQVAtQkFTRS1NSUIKKzU4MzQJQ0FQV0FQLURPVDExLU1JQgorNTkwNwlOVFB2NC1NSUIKKzYwNjUJU05NUC1WQUNNLUFBQS1NSUIKKzYxNzMJSUZDUC1NR01ULU1JQgorNjI0MAlQVy1DRVAtU1RELU1JQgorNjM0MAlGTE9BVC1UQy1NSUIKKzYzNTMJU05NUC1UTFMtVE0tTUlCCis2NDQ1CU1QTFMtRlJSLUdFTkVSQUwtU1RELU1JQjpNUExTLUZSUi1PTkUyT05FLVNURC1NSUI6TVBMUy1GUlItRkFDSUxJVFktU1RELU1JQgorNjQ3NQlQTUlQVjYtVEMtTUlCOlBNSVBWNi1NSUIKKzY1MjcJVlJSUFYzLU1JQgorNjYxNQlJUEZJWC1NSUI6SVBGSVgtU0VMRUNUT1ItTUlCCis2NzI3CVBTQU1QLU1JQgorNjc2NQlHQk9ORC1NSUI6SUFOQS1HQk9ORC1UQy1NSUIKKzY3NjYJRzk5ODMtTUlCCis2NzY3CUc5OTgyLU1JQgorNjc2OAlHOTk4MS1NSUIKKzY3NzkJTkhEUC1NSUIKKzY4MjUJVEVELU1JQgorNjg1MAlSQlJJREdFLU1JQgorNjkzMwlFTlRJVFktTUlCOlVVSUQtVEMtTUlCCis2OTQ1CVJQS0ktUk9VVEVSLU1JQgorNzA1MglMSVNQLU1JQgorNzE0NwlJU0NTSS1NSUIKKzcxODQJT0xTUnYyLU1JQgorNzI1NwlWUExTLUdFTkVSSUMtTUlCOlZQTFMtTERQLU1JQjpWUExTLUJHUC1NSUIKKzczMzAJQkZELVRDLVNURC1NSUIKKzczMzEJQkZELVNURC1NSUIKZGlmZiAtLWdpdCBhL21pYnMvc21pc3RyaXAgYi9taWJzL3NtaXN0cmlwCmluZGV4IGY1ODk5NWMuLmI1ZmM4ZjIgMTAwNzU1Ci0tLSBhL21pYnMvc21pc3RyaXAKKysrIGIvbWlicy9zbWlzdHJpcApAQCAtNjYsNyArNjYsNyBAQAogICAgIH0KIAogICAgICMgc3RhcnQgb2YgbW9kdWxlCi0gICAgL15bIFx0XSpbQS1aYS16MC05LV0qICpERUZJTklUSU9OUyAqOjo9ICpCRUdJTi8geworICAgIC9eWyBcdF0qW0EtWmEtejAtOS1dKiAqREVGSU5JVElPTlMoICtJTVBMSUNJVCArVEFHUyk/ICo6Oj0gKkJFR0lOLyB7CiAJbW9kdWxlID0gJDEKIAljb2xsZWN0ID0gMQogCW1hY3JvID0gMApkaWZmIC0tZ2l0IGEvbmV0LXNubXAtY29uZmlnLmluIGIvbmV0LXNubXAtY29uZmlnLmluCmluZGV4IDMzMGY2NjAuLmQ1NTg3MmMgMTAwNjQ0Ci0tLSBhL25ldC1zbm1wLWNvbmZpZy5pbgorKysgYi9uZXQtc25tcC1jb25maWcuaW4KQEAgLTI3LDEwICsyNywyNSBAQAogICAgICAgZmkKIH0KIAorIyB1c2FnZTogaW5kZXggbiBhcmd1bWVudHMKKyMgZWZmZWN0OiByZXR1cm5zIHRoZSAobisxKXRoIGFyZ3VtZW50CitpbmRleCgpCit7CisgICAgZXZhbCBlY2hvIFwkYGV4cHIgJDEgKyAxYAorfQorCisjIHVzYWdlOiBjb3VudCBhcmd1bWVudHMKKyMgZWZmZWN0OiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCitjb3VudCgpCit7CisgICAgZWNobyAkIworfQorCiBwcmVmaXg9QHByZWZpeEAKIGV4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACiBsaWJkaXI9QGxpYmRpckAKK2RhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKIE5TQ19MREZMQUdTPSJATERGTEFHU0AiCiAKIE5TQ19MSUJTPSJATElCU0AiCkBAIC00Miw3ICs1Nyw3IEBACiBOU0NfTElCRElSPS1MJHtsaWJkaXJ9CiAKIE5TQ19TTk1QTElCUz0iLWxuZXRzbm1wICR7TlNDX0xORVRTTk1QTElCU30iCi1OU0NfU1VCQUdFTlRMSUJTPSItbG5ldHNubXBhZ2VudCAtbG5ldHNubXBoZWxwZXJzICR7TlNDX0xBR0VOVExJQlN9ICR7TlNDX1NOTVBMSUJTfSIKK05TQ19TVUJBR0VOVExJQlM9Ii1sbmV0c25tcGFnZW50ICR7TlNDX0xBR0VOVExJQlN9ICR7TlNDX1NOTVBMSUJTfSIKIE5TQ19BR0VOVExJQlM9Ii1sbmV0c25tcG1pYnMgJHtOU0NfTE1JQkxJQlN9ICR7TlNDX1NVQkFHRU5UTElCU30iCiAKIE5TQ19QUkVGSVg9JHByZWZpeApAQCAtNTEsMTEgKzY2LDExIEBACiBOU0NfSU5DRElSPSR7TlNDX1BSRUZJWH0vaW5jbHVkZQogCiBOU0NfQkFTRV9TTk1QX0xJQlM9Ii1sbmV0c25tcCIKLU5TQ19CQVNFX1NVQkFHRU5UX0xJQlM9Ii1sbmV0c25tcGFnZW50IC1sbmV0c25tcGhlbHBlcnMgJHtOU0NfQkFTRV9TTk1QX0xJQlN9IgorTlNDX0JBU0VfU1VCQUdFTlRfTElCUz0iLWxuZXRzbm1wYWdlbnQgJHtOU0NfQkFTRV9TTk1QX0xJQlN9IgogTlNDX0JBU0VfQUdFTlRfTElCUz0iLWxuZXRzbm1wbWlicyAke05TQ19CQVNFX1NVQkFHRU5UX0xJQlN9IgogCi1OU0NfU1JDX0xJQkRJUlM9ImFnZW50Ly5saWJzIHNubXBsaWIvLmxpYnMgYWdlbnQvaGVscGVycy8ubGlicyIKLU5TQ19TUkNfTElCREVQUz0iYWdlbnQvLmxpYnMvbGlibmV0c25tcG1pYnMuYSBhZ2VudC8ubGlicy9saWJuZXRzbm1wYWdlbnQuYSBhZ2VudC9oZWxwZXJzLy5saWJzL2xpYm5ldHNubXBoZWxwZXJzLmEgc25tcGxpYi8ubGlicy9saWJuZXRzbm1wLmEiCitOU0NfU1JDX0xJQkRJUlM9ImFnZW50Ly5saWJzIHNubXBsaWIvLmxpYnMiCitOU0NfU1JDX0xJQkRFUFM9ImFnZW50Ly5saWJzL2xpYm5ldHNubXBtaWJzLmEgYWdlbnQvLmxpYnMvbGlibmV0c25tcGFnZW50LmEgc25tcGxpYi8ubGlicy9saWJuZXRzbm1wLmEiCiAKIGlmIHRlc3QgIngkTlNDX1NSQ0RJUiIgPSAieC4iIDsgdGhlbgogICAgTlNDX1NSQ0RJUj0iTkVULVNOTVAtU09VUkNFLURJUiIKQEAgLTEwOSw2ICsxMjQsOSBAQAogICAgIC0tZW52LXNlcGFyYXRvcikKICAgICAgIGVjaG8gIkBFTlZfU0VQQVJBVE9SQCIKICAgICAgIDs7CisgICAgLS1leGVleHQpCisgICAgICBlY2hvICJARVhFRVhUQCIKKyAgICAgIDs7CiAgICAgLS1zbm1wY29uZnBhdGh8LS1TTk1QQ09ORlBBVEgpCiAgICAgICBlY2hvICJAU05NUENPTkZQQVRIQEBFTlZfU0VQQVJBVE9SQEBTTk1QU0hBUkVQQVRIQEBFTlZfU0VQQVJBVE9SQEBTTk1QTElCUEFUSEBARU5WX1NFUEFSQVRPUkAkSE9NRS8uc25tcEBFTlZfU0VQQVJBVE9SQEBQRVJTSVNURU5UX0RJUkVDVE9SWUAiCiAgICAgICA7OwpAQCAtMTY0LDE2ICsxODIsMTkgQEAKICAgICAgIGZpCiAgICAgICBlY2hvICRyZXN1bHQKICAgICAgIDs7CisgICAgLS1idWlsZC1jb21tYW5kKQorICAgICAgZWNobyAiQENDQCBAQ0ZMQUdTQCBAREVWRkxBR1NAIgorICAgICAgOzsKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGNsaWVudCBsaWIKICAgICAtLWxpYnMpCiAgICAgICAjIHVzZSB0aGlzIG9uZSA9PSAtLW5ldHNubXAtbGlicyArIC0tZXh0ZXJuYWwtbGlicwogICAgICAgZWNobyAkTlNDX0xERkxBR1MgJE5TQ19MSUJESVIgJE5TQ19TTk1QTElCUyAkTlNDX0xJQlMKICAgICAgIDs7CiAgICAgLS1uZXRzbm1wLWxpYnMpCi0gICAgICBlY2hvICROU0NfTElCRElSIC1sbmV0c25tcAorICAgICAgZWNobyAkTlNDX0xJQkRJUiAkTlNDX0JBU0VfU05NUF9MSUJTCiAgICAgICA7OwogICAgIC0tZXh0ZXJuYWwtbGlicykKLSAgICAgIGVjaG8gJE5TQ19MREZMQUdTICROU0NfTE5FVFNOTVBMSUJTICROU0NfTElCUworICAgICAgZWNobyAkTlNDX0xERkxBR1MgJE5TQ19MTkVUU05NUExJQlMgJE5TQ19MSUJTIEBQRVJMTERPUFRTX0ZPUl9BUFBTQAogICAgICAgOzsKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGFnZW50IGxpYgogICAgIC0tYmFzZS1hZ2VudC1saWJzKQpAQCAtMjA3LDEyNiArMjI4LDEwIEBACiAgICAgICA7OwogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAtLWNyZWF0ZS1zbm1wdjMtdXNlcikKLSAgICAgIGlmIEBQU0NNREAgfCBlZ3JlcCAnIHNubXBkICokJyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgotICAgICAgICAgZWNobyAiQXBwYXJlbnRseSBhdCBsZWFzdCBvbmUgc25tcGQgZGVtb24gaXMgYWxyZWFkeSBydW5uaW5nLiIKLSAgICAgICAgIGVjaG8gIllvdSBtdXN0IHN0b3AgdGhlbSBpbiBvcmRlciB0byB1c2UgdGhpcyBjb21tYW5kLiIKLSAgICAgICAgIGV4aXQgMQotICAgICAgZmkKLQotICAgICAgQWFsZ29yaXRobT0iTUQ1IgotICAgICAgWGFsZ29yaXRobT0iREVTIgotICAgICAgdG9rZW49cnd1c2VyCisgICAgICBkb25lPTEKICAgICAgIHNoaWZ0Ci0gICAgICBzaGlmdGVkPTEKLSAgICAgIHdoaWxlIHRlc3QgIngkZG9uZSIgPSAieCIgLWEgIngkMSIgIT0gIngiIDsgZG8KLQljYXNlICQxIGluCi0JICAgIC1BfC1hKQotCQlzaGlmdAotCQlpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgotCQkgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gb3IgcGFzcyBwaHJhc2UiCi0JCSAgICBleGl0IDEKLQkJZmkKLQkgICAgICAgIGNhc2UgJDEgaW4KLSAgICAgICAgICAgICAgICBNRDV8U0hBKQotCQkgICAgQWFsZ29yaXRobT0kMQotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0gICAgICAgICAgICAgICAgbWQ1fHNoYSkKLQkJICAgIEFhbGdvcml0aG09YGVjaG8gJDEgfCB0ciBhLXogQS1aYAotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0gICAgICAgICAgICAgICAgKikKLQkJICAgIGFwYXNzcGhyYXNlPSQxCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLQkJZXNhYwotCQk7OwotCSAgICAtWHwteCkKLQkJc2hpZnQKLQkJaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KLQkJICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gZW5jcnlwdGlvbiBhbGdvcml0aG0gb3IgcGFzcyBwaHJhc2UiCi0JCSAgICBleGl0IDEKLQkJZmkKLQkgICAgICAgIGNhc2UgJDEgaW4KLSAgICAgICAgICAgICAgICBERVN8QUVTfEFFUzEyOCkKLQkJICAgIFhhbGdvcml0aG09JDEKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotICAgICAgICAgICAgICAgIGRlc3xhZXN8YWVzMTI4KQotCQkgICAgWGFsZ29yaXRobT1gZWNobyAkMSB8IHRyIGEteiBBLVpgCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLSAgICAgICAgICAgICAgICAqKQotCQkgICAgeHBhc3NwaHJhc2U9JDEKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotCQllc2FjCi0JCTs7Ci0JICAgIC1ybykKLQkgICAgICAgIHRva2VuPSJyb3VzZXIiCi0JCXNoaWZ0Ci0JCTs7Ci0gCSAgICAtKikKLQkJZWNobyAidW5rbm93biBzdWJvcHRpb24gdG8gLS1jcmVhdGUtc25tcHYzLXVzZXI6ICQxIgotCQlleGl0IDEKLQkJOzsKLQkgICAgKikKLQkgICAgICAgIGRvbmU9MQotCQk7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIAotICAgICAgaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgICBwcm9tcHQ9eWVzCi0JICBlY2hvICJFbnRlciBhIFNOTVB2MyB1c2VyIG5hbWUgdG8gY3JlYXRlOiAiCi0JICByZWFkIHVzZXIKLSAgICAgIGVsc2UKLSAgICAgICAgICB1c2VyPSQxCi0gICAgICAgICAgc2hpZnQKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICJ4JHVzZXIiID0gIngiIDsgdGhlbgotICAgICAgICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYSB1c2VyIG5hbWUiCi0JICBleGl0IDEKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIngkYXBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgotICAgICAgICAgIHByb21wdD15ZXMKLQkgIGVjaG8gIkVudGVyIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlOiAiCi0JICByZWFkIGFwYXNzcGhyYXNlCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAieCRhcGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCi0gICAgICAgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZSIKLQkgIGV4aXQgMQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAieCRwcm9tcHQiID0gInh5ZXMiIC1hICJ4JHhwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KLQkgIGVjaG8gIkVudGVyIGVuY3J5cHRpb24gcGFzcy1waHJhc2U6ICIKLQkgIGVjaG8gIiAgW3ByZXNzIHJldHVybiB0byByZXVzZSB0aGUgYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2VdIgotCSAgcmVhZCB4cGFzc3BocmFzZQotICAgICAgZmkKLQotICAgICAgb3V0ZGlyPSJAUEVSU0lTVEVOVF9ESVJFQ1RPUllAIgotICAgICAgb3V0ZmlsZT0iJG91dGRpci9zbm1wZC5jb25mIgotICAgICAgbGluZT0iY3JlYXRlVXNlciAkdXNlciAkQWFsZ29yaXRobSBcIiRhcGFzc3BocmFzZVwiICRYYWxnb3JpdGhtICR4cGFzc3BocmFzZSIKLSAgICAgIGVjaG8gImFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8gJG91dGZpbGU6IgotICAgICAgZWNobyAiICAiICRsaW5lCi0gICAgICAjIGluIGNhc2UgaXQgaGFzbid0IGV2ZXIgYmVlbiBzdGFydGVkIHlldCwgc3RhcnQgaXQuCi0gICAgICBpZiB0ZXN0ICEgLWQgJG91dGRpciA7IHRoZW4KLSAgICAgICAgICBta2RpciAkb3V0ZGlyCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAhIC1kICRvdXRmaWxlIDsgdGhlbgotICAgICAgICAgIHRvdWNoICRvdXRmaWxlCi0gICAgICBmaQotICAgICAgZWNobyAkbGluZSA+PiAkb3V0ZmlsZQotCi0gICAgICBvdXRmaWxlPSJAZGF0YWRpckAvc25tcC9zbm1wZC5jb25mIgotICAgICAgbGluZT0iJHRva2VuICR1c2VyIgotICAgICAgZWNobyAiYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byAkb3V0ZmlsZToiCi0gICAgICBlY2hvICIgICIgJGxpbmUKLSAgICAgIGlmIHRlc3QgISAtZCAkb3V0ZmlsZSA7IHRoZW4KLSAgICAgICAgICB0b3VjaCAkb3V0ZmlsZQotICAgICAgZmkKLSAgICAgIGVjaG8gJGxpbmUgPj4gJG91dGZpbGUKKyAgICAgIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyICQqCisgICAgICBleGl0ICQ/CiAgICAgICA7OwogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMzc4LDcgKzI4Myw3IEBACiAJZWNobyAiQWNrLiAgQ2FuJ3QgY3JlYXRlICR0bXBmaWxlOiBhbHJlYWR5IGV4aXN0cyIKIAlleGl0IDEKICAgICAgIGZpCi0gICAgICBlY2hvICJnZW5lcmF0aW5nIHRoZSB0bXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgorICAgICAgZWNobyAiZ2VuZXJhdGluZyB0aGUgdGVtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCiAgICAgICBybSAtZiAkdG1wZmlsZQogICAgICAgY2F0ID4gJHRtcGZpbGUgPDxFT0YKIC8qIGdlbmVyYXRlZCBmcm9tIG5ldC1zbm1wLWNvbmZpZyAqLwpAQCAtNDI1LDYgKzMzMCw3IEBACiAKICAgICAgIGNhdCA+PiAkdG1wZmlsZSA8PEVPRgogY29uc3QgY2hhciAqYXBwX25hbWUgPSAiJG91dG5hbWUiOworc3RhdGljIGludCByZWNvbmZpZyA9IDA7CiAKIGV4dGVybiBpbnQgbmV0c25tcF9ydW5uaW5nOwogCkBAIC00MzksNiArMzQ1LDE1IEBACiAgICAgbmV0c25tcF9ydW5uaW5nID0gMDsKIH0KIAorI2lmZGVmIFNJR0hVUAorUkVUU0lHVFlQRQoraHVwX2hhbmRsZXIoaW50IHNpZykKK3sKKyAgICByZWNvbmZpZyA9IDE7CisgICAgc2lnbmFsKFNJR0hVUCwgaHVwX2hhbmRsZXIpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nKQogewpAQCAtNjE1LDEwICs1MzAsOSBAQAogICAgICAgaWYgZ3JlcCAiaW5pdF8kbmFtZSIgJGkgOyB0aGVuCiAgICAgICAgIGVjaG8gIiAgaW5pdF8ke25hbWV9KCk7IiA+PiAkdG1wZmlsZQogICAgICAgZmkKLSAgICAgIHNoaWZ0CiAgICAgZG9uZQogCi0gICAgIyBmaW5pc2ggZmlsZQorICAgICMgaGFuZGxlIHRoZSBtYWluIGxvb3AKICAgICBjYXQgPj4gJHRtcGZpbGUgPDxFT0YKIAogICAvKiAkb3V0bmFtZSB3aWxsIGJlIHVzZWQgdG8gcmVhZCAkb3V0bmFtZS5jb25mIGZpbGVzLiAqLwpAQCAtNjM4LDE4ICs1NTIsNDcgQEAKICNpZmRlZiBTSUdJTlQKICAgc2lnbmFsKFNJR0lOVCwgc3RvcF9zZXJ2ZXIpOwogI2VuZGlmCisjaWZkZWYgU0lHSFVQCisgIHNpZ25hbChTSUdIVVAsIGh1cF9oYW5kbGVyKTsKKyNlbmRpZgogCiAgIC8qIG1haW4gbG9vcCBoZXJlLi4uICovCiAgIHdoaWxlKG5ldHNubXBfcnVubmluZykgeworICAgIGlmIChyZWNvbmZpZykgeworICAgICAgZnJlZV9jb25maWcoKTsKKyAgICAgIHJlYWRfY29uZmlncygpOworICAgICAgcmVjb25maWcgPSAwOworICAgIH0KICAgICBhZ2VudF9jaGVja19hbmRfcHJvY2VzcygxKTsKICAgfQogCiAgIC8qIGF0IHNodXRkb3duIHRpbWUgKi8KICAgc25tcF9zaHV0ZG93bihhcHBfbmFtZSk7CisKKyAgLyogZGVpbml0aWFsaXplIHlvdXIgbWliIGNvZGUgaGVyZSAqLworRU9GCisKKyAgICAjIGFkZCBzaHV0ZG93biByb3V0aW5lcworCisgICAgaT1gY291bnQgJGNmaWxlc2AKKyAgICB3aGlsZSBbICRpIC1ndCAwIF0gOyBkbworICAgICAgZnVsbG5hbWU9YGluZGV4ICRpICRjZmlsZXNgCisgICAgICBuYW1lPWBiYXNlbmFtZSAkZnVsbG5hbWUgfCBzZWQgJ3MvXC5bY29dJC8vJ2AKKyAgICAgIGVjaG8gY2hlY2tpbmcgZm9yIHNodXRkb3duXyRuYW1lIGluICRmdWxsbmFtZQorICAgICAgaWYgZ3JlcCAic2h1dGRvd25fJG5hbWUiICRmdWxsbmFtZSA7IHRoZW4KKyAgICAgICAgZWNobyAiICBzaHV0ZG93bl8ke25hbWV9KCk7IiA+PiAkdG1wZmlsZQorICAgICAgZmkKKyAgICAgIGk9YGV4cHIgJGkgLSAxYAorICAgIGRvbmUKKworICAgICMgZmluaXNoIGZpbGUKKyAgICBjYXQgPj4gJHRtcGZpbGUgPDxFT0YKKworICAvKiBzaHV0ZG93biB0aGUgYWdlbnQgbGlicmFyeSAqLworICBzaHV0ZG93bl9hZ2VudCgpOwogICBTT0NLX0NMRUFOVVA7CiAgIGV4aXQoMCk7CiB9Ci0KIEVPRgogICAgICAgaWYgdGVzdCAiJD8iICE9IDAgLW8gISAtZiAiJHRtcGZpbGUiIDsgdGhlbgogICAgICAgICBlY2hvICJBY2suICBDYW4ndCBjcmVhdGUgJHRtcGZpbGUuIgpAQCAtNjU5LDEwICs2MDIsMTAgQEAKICAgICAgIGVjaG8gInJ1bm5pbmc6ICRjbWQiCiAgICAgICBgJGNtZGAKICAgICAgIGlmIHRlc3QgIngkbm9ybSIgIT0gIngxIiA7IHRoZW4KLSAgICAgICAgZWNobyAicmVtb3ZpbmcgdGhlIHRtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCisgICAgICAgIGVjaG8gInJlbW92aW5nIHRoZSB0ZW1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKICAgICAgICAgcm0gLWYgJHRtcGZpbGUKICAgICAgIGVsc2UKLSAgICAgICAgZWNobyAibGVhdmluZyB0aGUgdG1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKKyAgICAgICAgZWNobyAibGVhdmluZyB0aGUgdGVtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAtZiAkb3V0bmFtZSA7IHRoZW4KICAgICAgICAgZWNobyAic3ViYWdlbnQgcHJvZ3JhbSAkb3V0bmFtZSBjcmVhdGVkIgpAQCAtNjkzLDggKzYzNiw5IEBACiAgIGVjaG8gIiIKICAgZWNobyAiICBTTk1QIFNldHVwIGNvbW1hbmRzOiIKICAgZWNobyAiIgotICBlY2hvICIgICAgLS1jcmVhdGUtc25tcHYzLXVzZXIgWy1yb10gWy1BIGF1dGhwYXNzXSBbLVggcHJpdnBhc3NdIgotICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgWy1hIE1ENXxTSEFdIFsteCBERVN8QUVTXSBbdXNlcm5hbWVdIgorICBlY2hvICIgICAgLS1jcmVhdGUtc25tcHYzLXVzZXIgY3JlYXRlcyBhIFNOTVB2MyB1c2VyIGluIE5ldC1TTk1QIGNvbmZpZyBmaWxlLiIKKyAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciAtLWhlbHAgZm9yIGxpc3Qgb2YiCisgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZCBvcHRpb25zLiIKICAgZWNobyAiIgogICBlY2hvICIgIFRoZXNlIG9wdGlvbnMgcHJvZHVjZSB0aGUgdmFyaW91cyBjb21waWxhdGlvbiBmbGFncyBuZWVkZWQgd2hlbiIKICAgZWNobyAiICBidWlsZGluZyBleHRlcm5hbCBTTk1QIGFwcGxpY2F0aW9uczoiCkBAIC03MjksNiArNjczLDcgQEAKICAgZWNobyAiICAgIC0tYnVpbGQtaW5jbHVkZXMgICAgICBpbmNsdWRlIHBhdGggdG8gYnVpbGQvc291cmNlIGluY2x1ZGVzIgogICBlY2hvICIgICAgLS1idWlsZC1saWItZGlycyAgICAgIGxpbmsgcGF0aCB0byBsaWJyYXJpZXMiCiAgIGVjaG8gIiAgICAtLWJ1aWxkLWxpYi1kZXBzICAgICAgcGF0aCB0byBsaWJyYXJpZXMgZm9yIGRlcGVuZGVuY3kgdGFyZ2V0IgorICBlY2hvICIgICAgLS1idWlsZC1jb21tYW5kICAgICAgIGNvbW1hbmQgdG8gY29tcGlsZSBcJDMuLi4gdG8gXCQyIgogICBlY2hvICIiCiAgIGVjaG8gIiAgQXV0b21hdGVkIHN1YmFnZW50IGJ1aWxkaW5nIChwcm9kdWNlcyBhbiBPVVRQVVROQU1FIGJpbmFyeSBmaWxlKToiCiAgIGVjaG8gIiAgW3RoaXMgZmVhdHVyZSBoYXMgbm90IGJlZW4gdGVzdGVkIHZlcnkgd2VsbCB5ZXQuICB1c2UgYXQgeW91ciByaXNrLl0iCmRpZmYgLS1naXQgYS9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbiBiL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODhmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbgpAQCAtMCwwICsxLDE2OCBAQAorIyEvYmluL3NoCisjCisjICRJZCQKKyMKKyMgdGhpcyBzaGVsbCBzY3JpcHQgaXMgZGVzaWduZWQgdG8gYWRkIG5ldyBTTk1QdjMgdXNlcnMKKyMgdG8gTmV0LVNOTVAgY29uZmlnIGZpbGUuCisKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKK2xpYmRpcj1AbGliZGlyQAorZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorTlNDX0xERkxBR1M9IkBMREZMQUdTQCIKK05TQ19JTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK05TQ19MSUJESVI9LUwke2xpYmRpcn0KK05TQ19MSUJTPSJATElCU0AiCitOU0NfQUdFTlRMSUJTPSJAQUdFTlRMSUJTQCBAUEVSTExET1BUU19GT1JfQVBQU0AiCitOU0NfUFJFRklYPSRwcmVmaXgKK05TQ19FWEVDX1BSRUZJWD0kZXhlY19wcmVmaXgKK05TQ19TUkNESVI9QHNyY2RpckAKK05TQ19JTkNESVI9JHtOU0NfUFJFRklYfS9pbmNsdWRlCitOU0NfQkFTRV9TVUJBR0VOVF9MSUJTPSItbG5ldHNubXBhZ2VudCAtbG5ldHNubXAiCitOU0NfQkFTRV9BR0VOVF9MSUJTPSItbG5ldHNubXBhZ2VudCAtbG5ldHNubXBtaWJzIC1sbmV0c25tcCIKK05TQ19TUkNfTElCRElSUz0iYWdlbnQvLmxpYnMgc25tcGxpYi8ubGlicyIKK05TQ19TUkNfTElCREVQUz0iYWdlbnQvLmxpYnMvbGlibmV0c25tcG1pYnMuYSBhZ2VudC8ubGlicy9saWJuZXRzbm1wYWdlbnQuYSBzbm1wbGliLy5saWJzL2xpYm5ldHNubXAuYSIKKworaWYgdGVzdCAieCROU0NfU1JDRElSIiA9ICJ4LiIgOyB0aGVuCisgICBOU0NfU1JDRElSPSJORVQtU05NUC1TT1VSQ0UtRElSIgorZmkKKworaWYgQFBTQ01EQCB8IGVncmVwICcgc25tcGQgKiQnID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgZWNobyAiQXBwYXJlbnRseSBhdCBsZWFzdCBvbmUgc25tcGQgZGVtb24gaXMgYWxyZWFkeSBydW5uaW5nLiIKKyAgICBlY2hvICJZb3UgbXVzdCBzdG9wIHRoZW0gaW4gb3JkZXIgdG8gdXNlIHRoaXMgY29tbWFuZC4iCisgICAgZXhpdCAxCitmaQorCitBYWxnb3JpdGhtPSJNRDUiCitYYWxnb3JpdGhtPSJERVMiCit0b2tlbj1yd3VzZXIKKword2hpbGUgdGVzdCAieCRkb25lIiA9ICJ4IiAtYSAieCQxIiAhPSAieCIgLWEgIngkdXNhZ2UiICE9ICJ4eWVzIjsgZG8KK2Nhc2UgIiQxIiBpbgorICAgIC0qPSopIG9wdGFyZz1gZWNobyAiJDEiIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKyAgICAqKSBvcHRhcmc9IDs7Citlc2FjCisKK3Vuc2V0IHNoaWZ0ZWQKK2Nhc2UgJDEgaW4KKyAgICAtLXZlcnNpb258LS12ZXIqKQorICAgICAgZWNobyBAVkVSU0lPTkAKKyAgICAgIDs7CisgICAgLS1oZWxwKQorICAgICAgdXNhZ2U9InllcyIKKyAgICAgIDs7CisKKyAgICAtQXwtYSkKKwlzaGlmdAorCWlmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCisJICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIG9yIHBhc3MgcGhyYXNlIgorCSAgICBleGl0IDEKKwlmaQorICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICBNRDV8U0hBKQorCSAgICBBYWxnb3JpdGhtPSQxCisJICAgIHNoaWZ0CisJICAgIDs7CisgICAgICAgICAgICBtZDV8c2hhKQorCSAgICBBYWxnb3JpdGhtPWBlY2hvICQxIHwgdHIgYS16IEEtWmAKKwkgICAgc2hpZnQKKwkgICAgOzsKKyAgICAgICAgICAgICopCisJICAgIGFwYXNzcGhyYXNlPSQxCisJICAgIHNoaWZ0CisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICAtWHwteCkKKwlzaGlmdAorCWlmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCisJICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gZW5jcnlwdGlvbiBhbGdvcml0aG0gb3IgcGFzcyBwaHJhc2UiCisJICAgIGV4aXQgMQorCWZpCisgICAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgICAgIERFU3xBRVN8QUVTMTI4KQorCSAgICBYYWxnb3JpdGhtPSQxCisJICAgIHNoaWZ0CisJICAgIDs7CisgICAgICAgICAgICBkZXN8YWVzfGFlczEyOCkKKwkgICAgWGFsZ29yaXRobT1gZWNobyAkMSB8IHRyIGEteiBBLVpgCisJICAgIHNoaWZ0CisJICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICB4cGFzc3BocmFzZT0kMQorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgIC1ybykKKyAgICAgICAgdG9rZW49InJvdXNlciIKKwlzaGlmdAorCTs7CisgICAgLSopCisJZWNobyAidW5rbm93biBzdWJvcHRpb24gdG8gJDA6ICQxIgorCXVzYWdlPXllcworCWRvbmU9MQorCTs7CisgICAgKikKKyAgICAgICAgZG9uZT0xCisgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiB0ZXN0ICJ4JHVzYWdlIiA9ICJ4eWVzIjsgdGhlbgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJVc2FnZToiCisgICAgZWNobyAiICBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciBbLXJvXSBbLUEgYXV0aHBhc3NdIFstWCBwcml2cGFzc10iCisgICAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICBbLWEgTUQ1fFNIQV0gWy14IERFU3xBRVNdIFt1c2VybmFtZV0iCisgICAgZWNobyAiIgorICAgIGV4aXQKK2ZpCisKK2lmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCisgICAgcHJvbXB0PXllcworICAgIGVjaG8gIkVudGVyIGEgU05NUHYzIHVzZXIgbmFtZSB0byBjcmVhdGU6ICIKKyAgICByZWFkIHVzZXIKK2Vsc2UKKyAgICB1c2VyPSQxCisgICAgc2hpZnQKK2ZpCitpZiB0ZXN0ICJ4JHVzZXIiID0gIngiIDsgdGhlbgorICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYSB1c2VyIG5hbWUiCisgICAgZXhpdCAxCitmaQoraWYgdGVzdCAieCRhcGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCisgICAgcHJvbXB0PXllcworICAgIGVjaG8gIkVudGVyIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlOiAiCisgICAgcmVhZCBhcGFzc3BocmFzZQorZmkKK2lmIHRlc3QgIngkYXBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgorICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2UiCisgICAgZXhpdCAxCitmaQorICAgIGlmIHRlc3QgIngkcHJvbXB0IiA9ICJ4eWVzIiAtYSAieCR4cGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCisgICAgZWNobyAiRW50ZXIgZW5jcnlwdGlvbiBwYXNzLXBocmFzZTogIgorICAgIGVjaG8gIiAgW3ByZXNzIHJldHVybiB0byByZXVzZSB0aGUgYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2VdIgorICAgIHJlYWQgeHBhc3NwaHJhc2UKK2ZpCitvdXRkaXI9IkBQRVJTSVNURU5UX0RJUkVDVE9SWUAiCitvdXRmaWxlPSIkb3V0ZGlyL3NubXBkLmNvbmYiCitsaW5lPSJjcmVhdGVVc2VyICR1c2VyICRBYWxnb3JpdGhtIFwiJGFwYXNzcGhyYXNlXCIgJFhhbGdvcml0aG0gJHhwYXNzcGhyYXNlIgorZWNobyAiYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byAkb3V0ZmlsZToiCitlY2hvICIgICIgJGxpbmUKKyMgaW4gY2FzZSBpdCBoYXNuJ3QgZXZlciBiZWVuIHN0YXJ0ZWQgeWV0LCBzdGFydCBpdC4KK2lmIHRlc3QgISAtZCAkb3V0ZGlyIDsgdGhlbgorICAgIG1rZGlyICRvdXRkaXIKK2ZpCitpZiB0ZXN0ICEgLWQgJG91dGZpbGUgOyB0aGVuCisgICAgdG91Y2ggJG91dGZpbGUKK2ZpCitlY2hvICRsaW5lID4+ICRvdXRmaWxlCitvdXRmaWxlPSJAZGF0YWRpckAvc25tcC9zbm1wZC5jb25mIgorbGluZT0iJHRva2VuICR1c2VyIgorZWNobyAiYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byAkb3V0ZmlsZToiCitlY2hvICIgICIgJGxpbmUKK2lmIHRlc3QgISAtZCAkb3V0ZmlsZSA7IHRoZW4KKyAgICB0b3VjaCAkb3V0ZmlsZQorZmkKK2VjaG8gJGxpbmUgPj4gJG91dGZpbGUKZGlmZiAtLWdpdCBhL3BlcmwvQVNOL0FTTi5wbSBiL3BlcmwvQVNOL0FTTi5wbQppbmRleCA2NDMwZjdlLi4wMDhlOTdiIDEwMDY0NAotLS0gYS9wZXJsL0FTTi9BU04ucG0KKysrIGIvcGVybC9BU04vQVNOLnBtCkBAIC02Niw3ICs2Niw3IEBACiAJQVNOX1VOU0lHTkVECiAJQVNOX1VOU0lHTkVENjQKICk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogc3ViIEFVVE9MT0FEIHsKICAgICAjIFRoaXMgQVVUT0xPQUQgaXMgdXNlZCB0byAnYXV0b2xvYWQnIGNvbnN0YW50cyBmcm9tIHRoZSBjb25zdGFudCgpCmRpZmYgLS1naXQgYS9wZXJsL0FTTi9NYWtlZmlsZS5QTCBiL3BlcmwvQVNOL01ha2VmaWxlLlBMCmluZGV4IGY4OTVhNDEuLjQ1NzY3ODEgMTAwNjQ0Ci0tLSBhL3BlcmwvQVNOL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvQVNOL01ha2VmaWxlLlBMCkBAIC0yOCw5ICsyOCw5IEBACiAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL0FTTi9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0FTTi9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApkaWZmIC0tZ2l0IGEvcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSBiL3BlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0KaW5kZXggNjI0Nzk2My4uNjdjNzkxZiAxMDA2NDQKLS0tIGEvcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbQorKysgYi9wZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtCkBAIC02LDcgKzYsNyBAQAogIyMgICBzY2FsYXIgc2V0cz8KICMjICAgbXVsdGktaG9zdHMKIAotJEFueURhdGE6OlN0b3JhZ2U6OlZFUlNJT04gPSAnNS4wNDA0JzsKKyRBbnlEYXRhOjpTdG9yYWdlOjpWRVJTSU9OID0gJzUuMDcwMyc7CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogCmRpZmYgLS1naXQgYS9wZXJsL01ha2VmaWxlLlBMIGIvcGVybC9NYWtlZmlsZS5QTAppbmRleCBmNzBmOTkxLi4zMWZkYzQwIDEwMDY0NAotLS0gYS9wZXJsL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvTWFrZWZpbGUuUEwKQEAgLTExLDcgKzExLDcgQEAKICAgICAkbnNjb25maWc9Im5ldC1zbm1wLWNvbmZpZyI7ICMgaW4gcGF0aCBieSBkZWZhdWx0CiAgICAgbXkgJVBhcmFtcyA9ICgKIAkJICAnTkFNRScgPT4gJ0J1bmRsZTo6TmV0U05NUCcsCi0JCSAgJ0RJUicgPT4gW3F3KGRlZmF1bHRfc3RvcmUgQVNOIE9JRCBhZ2VudCBTTk1QIFRyYXBSZWNlaXZlcildCisJCSAgJ0RJUicgPT4gW3F3KGRlZmF1bHRfc3RvcmUgQVNOIE9JRCBhZ2VudCBTTk1QIFRyYXBSZWNlaXZlcildLAogCQkgICk7CiAKICAgICAjIGJvZ3VzLCBidXQgdGhlc2Ugb3B0aW9ucyBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgbG93ZXIgbGV2ZWxzCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xMTEsNyArMTExLDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5zdWJzLnBsIGIvcGVybC9NYWtlZmlsZS5zdWJzLnBsCmluZGV4IDgxN2ZiNTUuLmUzYzI1ZWYgMTAwNjQ0Ci0tLSBhL3BlcmwvTWFrZWZpbGUuc3Vicy5wbAorKysgYi9wZXJsL01ha2VmaWxlLnN1YnMucGwKQEAgLTQsNyArNCw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC04Nyw3ICs4Nyw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvT0lEL01ha2VmaWxlLlBMIGIvcGVybC9PSUQvTWFrZWZpbGUuUEwKaW5kZXggNWQ5NDMzOC4uNmJiMTYxNiAxMDA2NDQKLS0tIGEvcGVybC9PSUQvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9PSUQvTWFrZWZpbGUuUEwKQEAgLTI4LDkgKzI4LDkgQEAKICAgICB9CiAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xODUsNyArMTg1LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9PSUQvT0lELnBtIGIvcGVybC9PSUQvT0lELnBtCmluZGV4IDE1YjM3NzQuLmI3NWJmMWQgMTAwNjQ0Ci0tLSBhL3BlcmwvT0lEL09JRC5wbQorKysgYi9wZXJsL09JRC9PSUQucG0KQEAgLTkyLDcgKzkyLDcgQEAKIAlzbm1wX29pZF9jb21wYXJlCiAgICAgICAgIGNvbXBhcmUKICk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogc3ViIG5ldyB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL3BlcmwvT0lEL09JRC54cyBiL3BlcmwvT0lEL09JRC54cwppbmRleCA1ZDQxYzNhLi4xMDQ4NWY5IDEwMDY0NAotLS0gYS9wZXJsL09JRC9PSUQueHMKKysrIGIvcGVybC9PSUQvT0lELnhzCkBAIC0yOCw3ICsyOCw3IEBACiBuc29fbmV3YXJyYXlwdHIob2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pIAogewogICAgIG5ldHNubXBfb2lkICpSRVRWQUw7Ci0gICAgUkVUVkFMID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgUkVUVkFMID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgIFJFVFZBTC0+bmFtZSA9IFJFVFZBTC0+bmFtZWJ1ZjsKICAgICBSRVRWQUwtPmxlbiA9IG5hbWVfbGVuOwogICAgIG1lbWNweShSRVRWQUwtPm5hbWUsIG5hbWUsIG5hbWVfbGVuICogc2l6ZW9mKG9pZCkpOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICBpbnQgaTsKICAgIGJ1ZlswXSA9ICdcMCc7CiAgICBmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7Ci0Jc3ByaW50ZihidWYsIi4lbHUiLCpvYmppZCsrKTsKKwlzcHJpbnRmKGJ1ZiwiLiUiIE5FVFNOTVBfUFJJbyAidSIsKm9iamlkKyspOwogCWJ1ZiArPSBzdHJsZW4oYnVmKTsKICAgIH0KICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0xNjAsMTIgKzE2MCwxMyBAQAogICAgIENPREU6CiAgICAgICAgIGlmIChnZXRfdHJlZV9oZWFkKCkgPT0gTlVMTCkKICAgICAgICAgICAgIG5ldHNubXBfaW5pdF9taWIoKTsKLSAgICAgICAgUkVUVkFMID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgICAgIFJFVFZBTCA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICAgICAgUkVUVkFMLT5uYW1lID0gUkVUVkFMLT5uYW1lYnVmOwogICAgICAgICBSRVRWQUwtPmxlbiA9IHNpemVvZihSRVRWQUwtPm5hbWVidWYpL3NpemVvZihSRVRWQUwtPm5hbWVidWZbMF0pOwogICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGluaXRzdHJpbmcsIChvaWQgKikgUkVUVkFMLT5uYW1lLCAmUkVUVkFMLT5sZW4pKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2FuJ3QgcGFyc2U6ICVzXG4iLCBpbml0c3RyaW5nKTsKICAgICAgICAgICAgIFJFVFZBTC0+bGVuID0gMDsKKyAgICAgICAgICAgIGZyZWUoUkVUVkFMKTsKICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgIH0KICAgICBPVVRQVVQ6CkBAIC0yNjYsNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoKGJ1ZiA9ICh1X2NoYXIgKikgY2FsbG9jKGJ1Zl9sZW4sIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoKGJ1ZiA9IG5ldHNubXBfbWFsbG9jKGJ1Zl9sZW4pKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yODIsMTIgKzI4MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgc3RyY21wKHRwbm9kZS0+bGFiZWwgKyBzdHJsZW4odHBub2RlLT5sYWJlbCkgLSA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYWJsZSIpKSkgewogICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBub3Qgd2l0aGluIGEgdGFibGUuICBiYWQgbG9naWMsIGxpdHRsZSBjaG9pY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdHBlKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yOTgsNiArMzAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKE5VTEwgPT0KICAgICAgICAgICAgICAgICAgICAgICh0cGUgPSBnZXRfdHJlZShuYW1lLCBuYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdHJlZV9oZWFkKCkpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLyogWFhYOiBiZXR0ZXIgZXJyb3IgcmVjb3ZlcnkgbmVlZGVkPyAqLwogICAgICAgICAgICAgICAgIH0KQEAgLTMyMCwxMiArMzI0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIChOVUxMID09CiAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhub2RlID0gZ2V0X3RyZWUobmFtZSwgbmFtZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3RyZWVfaGVhZCgpKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgIC8qIHh4eCBtZW0gbGVhayAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YmRhdGEudHlwZSA9IG1pYl90b19hc25fdHlwZShpbmRleG5vZGUtPnR5cGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKHZiZGF0YS50eXBlID09ICh1X2NoYXIpIC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8qIFhYWDogbm90IGdvb2QuICBoYWxmIHBvcHVsYXRlZCBzdGFjaz8gKi8KICAgICAgICAgICAgICAgICB9CkBAIC0zNDcsOSArMzUzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8qIHBvc3NpYmxlIG1lbW9yeSBsZWFrOiB2YmRhdGEuZGF0YSBzaG91bGQgYmUgZnJlZWQgbGF0ZXIgKi8KICAgICAgICAgICAgICAgICBpZiAocGFyc2Vfb25lX29pZF9pbmRleCgmb2lkcCwgJm9pZHBfbGVuLCAmdmJkYXRhLCAwKQogICAgICAgICAgICAgICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zNjMsOSArMzY5LDEwIEBACiAgICAgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfdmFsdWUoJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIG5hbWUsIG5hbWVfbGVuLCAmdmJkYXRhKTsKICovCi0KKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyX2ludGVybmFscygmdmJkYXRhKTsKICAgICAgICAgICAgICAgICBhdl9wdXNoKG15cmV0LCBuZXdTVnB2KChjaGFyICopYnVmLCBvdXRfbGVuKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgIFJFVFZBTCA9IG5ld1JWKChTViAqKW15cmV0KTsKICAgICAgICAgfQogICAgIE9VVFBVVDoKZGlmZiAtLWdpdCBhL3BlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0Y2NkYgotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfb2JqaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X3ZhbHVlKQorCmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvTWFrZWZpbGUuUEwgYi9wZXJsL1NOTVAvTWFrZWZpbGUuUEwKaW5kZXggOTI4Y2I2Ny4uZTYxN2NiNyAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvU05NUC9NYWtlZmlsZS5QTApAQCAtMzIsOSArMzIsOSBAQAogICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICBteSAoJG1pYmRpciwgJHNubXBkLCAkc25tcHRyYXBkKTsKIAogICAgICAgICAjIFdpbmRvd3MKLSAgICAgICAgaWYgKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpIHsKKyAgICAgICAgaWYgKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykgewogICAgICAgICAgIGlmIChsYyAoJG9wdHMtPnsnaW5zb3VyY2UnfSkgZXEgInRydWUiKSB7CiAgICAgICAgICAgICAkbWliZGlyID0gIi4uLy4uL21pYnMiOwogICAgICAgICAgICAgaWYgKGxjKCRvcHRzLT57J2RlYnVnJ30pIGVxICJ0cnVlIikgewpAQCAtMTY5LDcgKzE2OSw3IEBACiAJICAgIHByb21wdCgiVW5hYmxlIHRvIGxvY2F0ZSBcInNubXB0cmFwZFwiLiBQbGVhc2UgZW50ZXIgdGhlIHBhdGg6ICIsCiAJCSAgICRzbm1wZF9wYXRoMSk7CiAKLSAgICAgICAgaWYgKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpIHsKKyAgICAgICAgaWYgKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykgewogICAgICAgICAgICRzbm1wZCA9ICRzbm1wZCAuICRzZXAgLiAic25tcGQuZXhlIjsKICAgICAgICAgICAkc25tcHRyYXBkID0gJHNubXB0cmFwZCAuICRzZXAgLiAic25tcHRyYXBkLmV4ZSI7CiAgICAgICAgIH0KQEAgLTIzMSw3ICsyMzEsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMzE0LDcgKzMxNCw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC9TTk1QLnBtIGIvcGVybC9TTk1QL1NOTVAucG0KaW5kZXggZTkxNGRjYy4uYTA1Y2QzOCAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL1NOTVAucG0KKysrIGIvcGVybC9TTk1QL1NOTVAucG0KQEAgLTcsNyArNyw3IEBACiAjICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCiAKIHBhY2thZ2UgU05NUDsKLSRWRVJTSU9OID0gJzUuMDQwNCc7ICAgIyBjdXJyZW50IHJlbGVhc2UgdmVyc2lvbiBudW1iZXIKKyRWRVJTSU9OID0gJzUuMDcwMyc7ICAgIyBjdXJyZW50IHJlbGVhc2UgdmVyc2lvbiBudW1iZXIKIAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKQEAgLTQ2LDYgKzQ2LDggQEAKICAgICAgICAgc25tcF9nZXRuZXh0CiAgICAgICAgIHNubXBfc2V0CiAgICAgICAgIHNubXBfdHJhcAorCVNOTVBfQVBJX1RSQURJVElPTkFMCisJU05NUF9BUElfU0lOR0xFCiApOwogCiBzdWIgQVVUT0xPQUQgewpAQCAtMzQ4LDEyICszNTAsMjQgQEAKICAgICAkc2Vzcy0+dHJhcChAXyk7CiB9CiAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisjIFByZXNlcnZlcyB0aGUgYWJpbGl0eSB0byBjYWxsIE1haW5Mb29wKCkgd2l0aCBubyBhcmdzIHNvIHdlIGRvbid0IAorIyBicmVhayBvbGQgY29kZQorIworIyBBbHRlcm5hdGVseSwgTWFpbkxvb3AoKSBjb3VsZCBiZSBjYWxsZWQgYXMgYW4gb2JqZWN0IG1ldGhvZCwgCisjICggJHNlc3MtPk1haW5Mb29wKCkgKSAsIHNvIHRoYXQgJHNlbGYgd2luZHMgdXAgaW4gQF8uICBUaGVuIGl0IHdvdWxkIAorIyBiZSBtb3JlIGxpa2UgOgorIyBteSAkc2VsZiA9IHNoaWZ0OworIyAuLi4uIAorIyBTTk1QOjpfbWFpbl9sb29wKC4uLi4uLiwgJHNlbGYtPntTZXNzUHRyfSk7CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogc3ViIE1haW5Mb29wIHsKKyAgICBteSAkc3MgPSBzaGlmdCBpZigmU05NUDo6X2FwaV9tb2RlKCkgPT0gU05NUDo6U05NUF9BUElfU0lOR0xFKCkpOwogICAgIG15ICR0aW1lID0gc2hpZnQ7CiAgICAgbXkgJGNhbGxiYWNrID0gc2hpZnQ7CiAgICAgbXkgJHRpbWVfc2VjID0gKCR0aW1lID8gaW50ICR0aW1lIDogMCk7CiAgICAgbXkgJHRpbWVfdXNlYyA9ICgkdGltZSA/IGludCgoJHRpbWUtJHRpbWVfc2VjKSoxMDAwMDAwKSA6IDApOwotICAgIFNOTVA6Ol9tYWluX2xvb3AoJHRpbWVfc2VjLCR0aW1lX3VzZWMsJGNhbGxiYWNrKTsKKyAgICBTTk1QOjpfbWFpbl9sb29wKCR0aW1lX3NlYywkdGltZV91c2VjLCRjYWxsYmFjaywoZGVmaW5lZCgkc3MpID8gJHNzLT57U2Vzc1B0cn0gOiAoKSkpOwogfQogCiBzdWIgZmluaXNoIHsKQEAgLTQ5MCw2ICs1MDQsMTEgQEAKICAgICAgICAkdGhpcy0+e0Rlc3RIb3N0fSA9ICR0aGlzLT57RGVzdEhvc3R9IC4gIjoiIC4gJHRoaXMtPntSZW1vdGVQb3J0fTsKICAgIH0KIAorICAgaWYgKCR0aGlzLT57RGVzdEhvc3R9ID1+IC9eKGR0bHN8dGxzfHNzaCkvKSB7CisgICAgICAgIyBvbmx5IHdvcmtzIHdpdGggdmVyc2lvbiAzCisgICAgICAgJHRoaXMtPntWZXJzaW9ufSA9IDM7CisgICB9CisKICAgIGlmICgkdGhpcy0+e1ZlcnNpb259IGVxICcxJyBvciAkdGhpcy0+e1ZlcnNpb259IGVxICcyJwogICAgICAgIG9yICR0aGlzLT57VmVyc2lvbn0gZXEgJzJjJykgewogICAgICAgICR0aGlzLT57U2Vzc1B0cn0gPSBTTk1QOjpfbmV3X3Nlc3Npb24oJHRoaXMtPntWZXJzaW9ufSwKQEAgLTUxNyw1MSArNTM2LDg0IEBACiAgICAgICAgJHRoaXMtPntDb250ZXh0fSB8fD0gCiAJICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKIAkJICAgICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfQ09OVEVYVCgpKSB8fCAnJzsKLSAgICAgICAkdGhpcy0+e0F1dGhQcm90b30gfHw9ICdERUZBVUxUJzsgIyBkZWZhdWx0cyB0byB0aGUgbGlicmFyeSdzIGRlZmF1bHQKLSAgICAgICAkdGhpcy0+e0F1dGhQYXNzfSB8fD0KLSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAotCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFKCkpIHx8Ci0gICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKLQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKCkpIHx8ICcnOwogCi0gICAgICAgJHRoaXMtPntBdXRoTWFzdGVyS2V5fSB8fD0gJyc7Ci0gICAgICAgJHRoaXMtPntQcml2TWFzdGVyS2V5fSB8fD0gJyc7Ci0gICAgICAgJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSB8fD0gJyc7Ci0gICAgICAgJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSB8fD0gJyc7CisgICAgICAgaWYgKCR0aGlzLT57RGVzdEhvc3R9ID1+IC9eKGR0bHN8dGxzfHNzaCkvKSB7CisJICAgIyB0aGlzIGlzIGEgdHVubmVsZWQgcHJvdG9jb2wKIAotICAgICAgICR0aGlzLT57UHJpdlByb3RvfSB8fD0gJ0RFRkFVTFQnOyAgIyBkZWZhdWx0cyB0byBodGUgbGlicmFyeSdzIGRlZmF1bHQKLSAgICAgICAkdGhpcy0+e1ByaXZQYXNzfSB8fD0KLSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAotCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFKCkpIHx8Ci0gICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKLQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKCkpIHx8ICcnOwotICAgICAgICR0aGlzLT57RW5naW5lQm9vdHN9ID0gMCBpZiBub3QgZGVmaW5lZCAkdGhpcy0+e0VuZ2luZUJvb3RzfTsKLSAgICAgICAkdGhpcy0+e0VuZ2luZVRpbWV9ID0gMCBpZiBub3QgZGVmaW5lZCAkdGhpcy0+e0VuZ2luZVRpbWV9OworCSAgICR0aGlzLT57J091cklkZW50aXR5J30gfHw9ICcnOworCSAgICR0aGlzLT57J1RoZWlySWRlbnRpdHknfSB8fD0gJyc7CisJICAgJHRoaXMtPnsnVGhlaXJIb3N0bmFtZSd9IHx8PSAnJzsKKwkgICAkdGhpcy0+eydUcnVzdENlcnQnfSB8fD0gJyc7CiAKLSAgICAgICAkdGhpcy0+e1Nlc3NQdHJ9ID0gU05NUDo6X25ld192M19zZXNzaW9uKCR0aGlzLT57VmVyc2lvbn0sCi0JCQkJCQkkdGhpcy0+e0Rlc3RIb3N0fSwKLQkJCQkJCSR0aGlzLT57UmV0cmllc30sCi0JCQkJCQkkdGhpcy0+e1RpbWVvdXR9LAotCQkJCQkJJHRoaXMtPntTZWNOYW1lfSwKLQkJCQkJCSR0aGlzLT57U2VjTGV2ZWx9LAotCQkJCQkJJHRoaXMtPntTZWNFbmdpbmVJZH0sCi0JCQkJCQkkdGhpcy0+e0NvbnRleHRFbmdpbmVJZH0sCi0JCQkJCQkkdGhpcy0+e0NvbnRleHR9LAotCQkJCQkJJHRoaXMtPntBdXRoUHJvdG99LAotCQkJCQkJJHRoaXMtPntBdXRoUGFzc30sCi0JCQkJCQkkdGhpcy0+e1ByaXZQcm90b30sCi0JCQkJCQkkdGhpcy0+e1ByaXZQYXNzfSwKLQkJCQkJCSR0aGlzLT57RW5naW5lQm9vdHN9LAotCQkJCQkJJHRoaXMtPntFbmdpbmVUaW1lfSwKLQkJCQkJCSR0aGlzLT57QXV0aE1hc3RlcktleX0sCi0JCQkJCQlsZW5ndGgoJHRoaXMtPntBdXRoTWFzdGVyS2V5fSksCi0JCQkJCQkkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9LAotCQkJCQkJbGVuZ3RoKCR0aGlzLT57UHJpdk1hc3RlcktleX0pLAotCQkJCQkJJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSwKLQkJCQkJCWxlbmd0aCgkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9KSwKLQkJCQkJCSR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0sCi0JCQkJCQlsZW5ndGgoJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSksCi0JCQkJCSAgICAgICApOworCSAgICR0aGlzLT57J1NlY0xldmVsJ30gPSAkU05NUDo6VjNfU0VDX0xFVkVMX01BUHsnYXV0aFByaXYnfTsKKworCSAgICR0aGlzLT57U2Vzc1B0cn0gPQorCSAgICAgU05NUDo6X25ld190dW5uZWxlZF9zZXNzaW9uKCR0aGlzLT57VmVyc2lvbn0sCisJCQkJCSAkdGhpcy0+e0Rlc3RIb3N0fSwKKwkJCQkJICR0aGlzLT57UmV0cmllc30sCisJCQkJCSAkdGhpcy0+e1RpbWVvdXR9LAorCQkJCQkgJHRoaXMtPntTZWNOYW1lfSwKKwkJCQkJICR0aGlzLT57U2VjTGV2ZWx9LAorCQkJCQkgJHRoaXMtPntDb250ZXh0RW5naW5lSWR9LAorCQkJCQkgJHRoaXMtPntDb250ZXh0fSwKKwkJCQkJICR0aGlzLT57J091cklkZW50aXR5J30sCisJCQkJCSAkdGhpcy0+eydUaGVpcklkZW50aXR5J30sCisJCQkJCSAkdGhpcy0+eydUaGVpckhvc3RuYW1lJ30sCisJCQkJCSAkdGhpcy0+eydUcnVzdENlcnQnfSwKKwkJCQkJKTsKKworCisgICAgICAgfSBlbHNlIHsKKwkgICAjIFVTTSBvciBzb21lIG90aGVyIGludGVybmFsIHNlY3VyaXR5IHByb3RvY29sCisKKwkgICAjIFVTTSBzcGVjaWZpYyBwYXJhbWV0ZXJzOgorCSAgICR0aGlzLT57QXV0aFByb3RvfSB8fD0gJ0RFRkFVTFQnOyAjIHVzZSB0aGUgbGlicmFyeSdzIGRlZmF1bHQKKwkgICAkdGhpcy0+e0F1dGhQYXNzfSB8fD0KKwkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCisJCQkJCQkJICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UoKSkgfHwKKwkJCQkJCQkgICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKKwkJCQkJCQkJCQkJCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UoKSkgfHwgJyc7CisKKwkgICAkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9IHx8PSAnJzsKKwkgICAkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9IHx8PSAnJzsKKwkgICAkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9IHx8PSAnJzsKKwkgICAkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9IHx8PSAnJzsKKworCSAgICR0aGlzLT57UHJpdlByb3RvfSB8fD0gJ0RFRkFVTFQnOyAjIHVzZSB0aGUgbGlicmFyeSdzIGRlZmF1bHQKKwkgICAkdGhpcy0+e1ByaXZQYXNzfSB8fD0KKwkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCisJCQkJCQkJICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUFJJVlBBU1NQSFJBU0UoKSkgfHwKKwkJCQkJCQkgICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKKwkJCQkJCQkJCQkJCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UoKSkgfHwgJyc7CisJICAgJHRoaXMtPntFbmdpbmVCb290c30gPSAwIGlmIG5vdCBkZWZpbmVkICR0aGlzLT57RW5naW5lQm9vdHN9OworCSAgICR0aGlzLT57RW5naW5lVGltZX0gPSAwIGlmIG5vdCBkZWZpbmVkICR0aGlzLT57RW5naW5lVGltZX07CisKKwkgICAkdGhpcy0+e1Nlc3NQdHJ9ID0KKwkgICAgIFNOTVA6Ol9uZXdfdjNfc2Vzc2lvbigkdGhpcy0+e1ZlcnNpb259LAorCQkJCSAgICR0aGlzLT57RGVzdEhvc3R9LAorCQkJCSAgICR0aGlzLT57UmV0cmllc30sCisJCQkJICAgJHRoaXMtPntUaW1lb3V0fSwKKwkJCQkgICAkdGhpcy0+e1NlY05hbWV9LAorCQkJCSAgICR0aGlzLT57U2VjTGV2ZWx9LAorCQkJCSAgICR0aGlzLT57U2VjRW5naW5lSWR9LAorCQkJCSAgICR0aGlzLT57Q29udGV4dEVuZ2luZUlkfSwKKwkJCQkgICAkdGhpcy0+e0NvbnRleHR9LAorCQkJCSAgICR0aGlzLT57QXV0aFByb3RvfSwKKwkJCQkgICAkdGhpcy0+e0F1dGhQYXNzfSwKKwkJCQkgICAkdGhpcy0+e1ByaXZQcm90b30sCisJCQkJICAgJHRoaXMtPntQcml2UGFzc30sCisJCQkJICAgJHRoaXMtPntFbmdpbmVCb290c30sCisJCQkJICAgJHRoaXMtPntFbmdpbmVUaW1lfSwKKwkJCQkgICAkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9LAorCQkJCSAgIGxlbmd0aCgkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9KSwKKwkJCQkgICAkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9LAorCQkJCSAgIGxlbmd0aCgkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9KSwKKwkJCQkgICAkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9LAorCQkJCSAgIGxlbmd0aCgkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9KSwKKwkJCQkgICAkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9LAorCQkJCSAgIGxlbmd0aCgkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9KSwKKwkJCQkgICk7CisgICAgICAgfQogICAgfQogICAgdW5sZXNzICgkdGhpcy0+e1Nlc3NQdHJ9KSB7CiAgICAgICAgd2FybigidW5hYmxlIHRvIGNyZWF0ZSBzZXNzaW9uIikgaWYgJFNOTVA6OnZlcmJvc2U7CkBAIC03MTQsNyArNzY2LDcgQEAKIAkgICAgaWYgKCRwYXJzZV9pbmRleGVzKSB7CiAJCSMgZ2V0IGluZGV4ZXMKIAkJbXkgQGluZGV4ZXMgPQotCQkgIEB7JFNOTVA6Ok1JQnskdGV4dG5vZGV9eydjaGlsZHJlbid9WzBdeydpbmRleGVzJ30gfHwgW10gfTsKKwkJICBAeyRTTk1QOjpNSUJ7JHRleHRub2RlfXsnY2hpbGRyZW4nfVswXXsnaW5kZXhlcyd9IHx8IFtdfTsKIAkJIyBxdWljayB0cmFuc2xhdGUgaW50byBhIGhhc2gKIAkJbWFwIHsgJGluZGV4ZXN7JF99ID0gMTsgfSBAaW5kZXhlczsKIAkgICAgfQpAQCAtMTM2Nyw2ICsxNDE5LDcgQEAKICAgICAgcGFyZW50ID0+IDAsICAgIyBwYXJlbnQgbm9kZQogICAgICBjaGlsZHJlbiA9PiAwLCAjIGFycmF5IHJlZmVyZW5jZSBvZiBjaGlsZHJlbiBub2RlcwogICAgICBpbmRleGVzID0+IDAsICAjIHJldHVybnMgYXJyYXkgb2YgY29sdW1uIGxhYmVscworICAgICBpbXBsaWVkID0+IDAsICAjIGJvb2xlYW46IGlzIHRoZSBsYXN0IGluZGV4IElNUExJRUQKICAgICAgdmFyYmluZHMgPT4gMCwgIyByZXR1cm5zIGFycmF5IG9mIHRyYXAvbm90aWZpY2F0aW9uIHZhcmJpbmRzCiAgICAgIG5leHROb2RlID0+IDAsICMgbmV4dCBsZXhpY28gbm9kZSAoQlVHISBkb2VzIG5vdCByZXR1cm4gaW4gbGV4aWNvIG9yZGVyKQogICAgICB0eXBlID0+IDAsICAgICAjIHJldHVybnMgc2ltcGxlIHR5cGUgKHNlZSBnZXRUeXBlIGZvciB2YWx1ZXMpCkBAIC0xNTA3LDc3ICsxNTYwLDE0OCBAQAogCiBUaGUgZm9sbG93aW5nIGFyZ3VtZW50cyBtYXkgYmUgcGFzc2VkIHRvIG5ldyBhcyBhIGhhc2guCiAKKz1oZWFkMiBCYXNpYyBPcHRpb25zCisKID1vdmVyIDQKIAogPWl0ZW0gRGVzdEhvc3QKIAotZGVmYXVsdCAnbG9jYWxob3N0JywgaG9zdG5hbWUgb3IgaXAgYWRkciBvZiBTTk1QIGFnZW50CitIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIHRoZSBTTk1QIGFnZW50IHlvdSB3YW50IHRvIHRhbGsgdG8uCitTcGVjaWZpZWQgaW4gTmV0LVNOTVAgZm9ybWF0dGVkIGFnZW50IGFkZHJlc3Nlcy4gIFRoZXNlIGFkZHJlc3NlcwordHlwaWNhbGx5IGxvb2sgbGlrZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAotPWl0ZW0gQ29tbXVuaXR5CisgIGxvY2FsaG9zdAorICB0Y3A6bG9jYWxob3N0CisgIHRsczpsb2NhbGhvc3QKKyAgdGxzOmxvY2FsaG9zdDo5ODc2CisgIHVkcDY6Wzo6MV06OTg3NgorICB1bml4Oi9zb21lL3BhdGgvdG8vZmlsZS9zb2NrZXQKIAotZGVmYXVsdCAncHVibGljJywgU05NUCBjb21tdW5pdHkgc3RyaW5nICh1c2VkIGZvciBib3RoIFIvVykKK0RlZmF1bHRzIHRvICdsb2NhbGhvc3QnLgogCiA9aXRlbSBWZXJzaW9uCiAKLWRlZmF1bHQgdGFrZW4gZnJvbSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gLSBwcm9iYWJseSAzIFsxLCAyIChzYW1lIGFzIDJjKSwgMmMsIDNdCitTTk1QIHZlcnNpb24gdG8gdXNlLgogCi09aXRlbSBSZW1vdGVQb3J0Ci0KLWRlZmF1bHQgJzE2MScsIGFsbG93IHJlbW90ZSBVRFAgcG9ydCB0byBiZSBvdmVycmlkZW4KK1RoZSBkZWZhdWx0IGlzIHRha2VuIGZyb20gbGlicmFyeSBjb25maWd1cmF0aW9uIC0gcHJvYmFibHkgMyBbMSwgMgorKHNhbWUgYXMgMmMpLCAyYywgM10uCiAKID1pdGVtIFRpbWVvdXQKIAotZGVmYXVsdCAnMTAwMDAwMCcsIG1pY3JvLXNlY29uZHMgYmVmb3JlIHJldHJ5CitUaGUgbnVtYmVyIG9mIG1pY3JvLXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzZW5kaW5nIGEgcmVxdWVzdC4KKworVGhlIGRlZmF1bHQgaXMgJzEwMDAwMDAnCiAKID1pdGVtIFJldHJpZXMKIAotZGVmYXVsdCAnNScsIHJldHJpZXMgYmVmb3JlIGZhaWx1cmUKK1RoZSBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYSByZXF1ZXN0LgorCitUaGUgZGVmYXVsdCBpcyAnNScKIAogPWl0ZW0gUmV0cnlOb1N1Y2gKIAotZGVmYXVsdCAnMCcsIGlmIGVuYWJsZWQgTk9TVUNIIGVycm9ycyBpbiAnZ2V0JyBwZHVzIHdpbGwKK0lmIGVuYWJsZWQgTk9TVUNIIGVycm9ycyBpbiAnZ2V0JyBwZHVzIHdpbGwKIGJlIHJlcGFpcmVkLCByZW1vdmluZyB0aGUgdmFyYmluZCBpbiBlcnJvciwgYW5kIHJlc2VudCAtCiB1bmRlZiB3aWxsIGJlIHJldHVybmVkIGZvciBhbGwgTk9TVUNIIHZhcmJpbmRzLCB3aGVuIHNldAogdG8gJzAnIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgdGhlIGVudGlyZSBnZXQgcmVxdWVzdAogd2lsbCBmYWlsIG9uIGFueSBOT1NVQ0ggZXJyb3IgKGFwcGxpZXMgdG8gdjEgb25seSkKIAorVGhlIGRlZmF1bHQgaXMgJzAnLgorCis9YmFjaworCis9aGVhZDIgU05NUHYzL1RMUyBPcHRpb25zCisKKz1vdmVyCisKKz1pdGVtIE91cklkZW50aXR5CisKK091ciBYLjUwOSBpZGVudGl0eSB0byB1c2UsIHdoaWNoIHNob3VsZCBlaXRoZXIgYmUgYSBmaW5nZXJwcmludCBvciB0aGUKK2ZpbGVuYW1lIHRoYXQgaG9sZHMgdGhlIGNlcnRpZmljYXRlLgorCis9aXRlbSBUaGVpcklkZW50aXR5CisKK1RoZSByZW1vdGUgc2VydmVyJ3MgaWRlbnRpdHkgdG8gY29ubmVjdCB0bywgc3BlY2lmaWVkIGFzIGVpaHRlciBhCitmaW5nZXJwcmludCBvciBhIGZpbGUgbmFtZS4gIEVpdGhlciB0aGlzIG11c3QgYmUgc3BlY2lmaWVkLCBvciB0aGUKK2hvc3RuYW1lIGJlbG93IGFsb25nIHdpdGggYSB0cnVzdCBhbmNob3IuCisKKz1pdGVtIFRoZWlySG9zdG5hbWUKKworVGhlIHJlbW90ZSBzZXJ2ZXIncyBob3N0bmFtZSB0aGF0IGlzIGV4cGVjdGVkLiAgSWYgdGhlaXIgY2VydGlmaWNhdGUKK3dhcyBzaWduZWQgYnkgYSBDQSB0aGVuIHRoZWlyIGhvc3RuYW1lIHByZXNlbnRlZCBpbiB0aGUgY2VydGlmaWNhdGUKK211c3QgbWF0Y2ggdGhpcyB2YWx1ZSBvciB0aGUgY29ubmVjdGlvbiBmYWlscyB0byBiZSBlc3RhYmxpc2hlZCAodG8KK2F2b2lkIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MpLgorCis9aXRlbSBUcnVzdENlcnQKKworQSB0cnVzdGVkIGNlcnRpZmljYXRlIHRvIHVzZSBhIHRydXN0IGFuY2hvciAobGlrZSBhIENBIGNlcnRpZmljYXRlKQorZm9yIHZlcmlmeWluZyBhIHJlbW90ZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4gIElmIGEgQ0EgY2VydGlmaWNhdGUgaXMKK3VzZWQgdG8gdmFsaWRhdGUgYSBjZXJ0aWZpY2F0ZSB0aGVuIHRoZSBUaGVpckhvc3RuYW1lIHBhcmFtZXRlciBtdXN0CithbHNvIGJlIHNwZWNpZmllZCB0byBlbnN1cmUgdGhlaXIgcHJlc2VudGUgaG9zdG5hbWUgaW4gdGhlIGNlcnRpZmljYXRlCittYXRjaGVzLgorCis9YmFjaworCis9aGVhZDIgU05NUHYzL1VTTSBPcHRpb25zCisKKz1vdmVyCisKID1pdGVtIFNlY05hbWUKIAotZGVmYXVsdCAnaW5pdGlhbCcsIHNlY3VyaXR5IG5hbWUgKHYzKQorVGhlIFNOTVB2MyBzZWN1cml0eSBuYW1lIHRvIHVzZSAobW9zdCBmb3IgU05NUHYzIHdpdGggVVNNKS4KKworVGhlIGRlZmF1bHQgaXMgJ2luaXRpYWwnLgogCiA9aXRlbSBTZWNMZXZlbAogCi1kZWZhdWx0ICdub0F1dGhOb1ByaXYnLCBzZWN1cml0eSBsZXZlbCBbbm9BdXRoTm9Qcml2LAotYXV0aE5vUHJpdiwgYXV0aFByaXZdICh2MykKK1RoZSBTTk1QdjMgc2VjdXJpdHkgbGV2ZWwgdG8gdXNlIFtub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2XSAodjMpCisKK1RoZSBkZWZhdWx0IGlzICdub0F1dGhOb1ByaXYnLgogCiA9aXRlbSBTZWNFbmdpbmVJZAogCi1kZWZhdWx0IDxub25lPiwgc2VjdXJpdHkgZW5naW5lSUQsIHdpbGwgYmUgcHJvYmVkIGlmIG5vdAorVGhlIFNOTVB2MyBzZWN1cml0eSBlbmdpbmVJRCB0byB1c2UgKGlmIHRoZSBzbm1wdjMgc2VjdXJpdHkgbW9kZWwKK25lZWRzIGl0OyBmb3IgZXhhbXBsZSBVU00pLgorCitUaGUgZGVmYXVsdCBpcyA8bm9uZT4sIHNlY3VyaXR5IGVuZ2luZUlEIGFuZCBpdCB3aWxsIGJlIHByb2JlZCBpZiBub3QKIHN1cHBsaWVkICh2MykKIAogPWl0ZW0gQ29udGV4dEVuZ2luZUlkCiAKLWRlZmF1bHQgPFNlY0VuZ2luZUlkPiwgY29udGV4dCBlbmdpbmVJRCwgd2lsbCBiZQotcHJvYmVkIGlmIG5vdCBzdXBwbGllZCAodjMpCitUaGUgU05NUHYzIGNvbnRleHQgZW5naW5lSUQgdG8gdXNlLgorCitUaGUgZGVmYXVsdCBpcyB0aGUgPG5vbmU+IGFuZCB3aWxsIGJlIHNldCBlaXRoZXIgdG8gdGhlIFNlY0VuZ2luZUlkCit2YWx1ZSBpZiBzZXQgb3IgZGlzY292ZXJlZCBvciB3aWxsIGJlIGRpc2NvdmVyZWQgaW4gb3RoZXIgd2F5cyBpZgordXNpbmcgVExTIChSRkM1MzQzIGJhc2VkIGRpc2NvdmVyeSkuCiAKID1pdGVtIENvbnRleHQKIAotZGVmYXVsdCAnJywgY29udGV4dCBuYW1lICh2MykKK1RoZSBTTk1QdjMgY29udGV4dCBuYW1lIHRvIHVzZS4KKworVGhlIGRlZmF1bHQgaXMgJycgKGFuIGVtcHR5IHN0cmluZykKIAogPWl0ZW0gQXV0aFByb3RvCiAKLWRlZmF1bHQgJ01ENScsIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIFtNRDUsIFNIQV0gKHYzKQorVGhlIFNOTVB2My9VU00gYXV0aGVudGljYXRpb24gcHJvdG9jb2wgdG8gdXNlIFtNRDUsIFNIQV0uCisKK1RoZSBkZWZhdWx0IGlzICdNRDUnLgogCiA9aXRlbSBBdXRoUGFzcwogCitUaGUgU05NUHYzL1VTTSBhdXRoZW50aWNhdGlvbiBwYXNzcGhyYXNlIHRvIHVzZS4KKwogZGVmYXVsdCA8bm9uZT4sIGF1dGhlbnRpY2F0aW9uIHBhc3NwaHJhc2UKIAogPWl0ZW0gUHJpdlByb3RvCiAKLWRlZmF1bHQgJ0RFUycsIHByaXZhY3kgcHJvdG9jb2wgW0RFUywgQUVTXSAodjMpCitUaGUgU05NUHYzL1VTTSBwcml2YWN5IHByb3RvY29sIHRvIHVzZSBbREVTLCBBRVNdLgorCitUaGUgZGVmYXVsdCBpcyAnREVTJy4KIAogPWl0ZW0gUHJpdlBhc3MKIAorVGhlIFNOTVB2My9VU00gcHJpdmFjeSBwYXNzcGhyYXNlIHRvIHVzZS4KKwogZGVmYXVsdCA8bm9uZT4sIHByaXZhY3kgcGFzc3BocmFzZSAodjMpCiAKID1pdGVtIEF1dGhNYXN0ZXJLZXkKQEAgLTE1OTEsNiArMTcxNSwyMCBAQAogRGlyZWN0bHkgc3BlY2lmaWVkIFNOTVB2MyBVU00gdXNlciBrZXlzICh1c2VkIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkKIHRoZSBrZXlzIGluc3RlYWQgb2YgZGVyaXZpbmcgdGhlbSBmcm9tIGEgcGFzc3dvcmQgYXMgYWJvdmUpLgogCis9YmFjaworCis9aGVhZDIgU05NUHYxIGFuZCBTTk1QdjJjIE9wdGlvbnMKKworPWl0ZW0gQ29tbXVuaXR5CisKK0ZvciBTTk1QdjEgYW5kIFNOTVB2MmMsIHRoZSBjbGVhci10ZXh0IGNvbW11bml0eSBuYW1lIHRvIHVzZS4KKworVGhlIGRlZmF1bHQgaXMgJ3B1YmxpYycuCisKKz1oZWFkMiBPdGhlciBDb25maWd1cmF0aW9uIE9wdGlvbnMKKworPW92ZXIKKwogPWl0ZW0gVmFyRm9ybWF0cwogCiBkZWZhdWx0ICd1bmRlZicsIHVzZWQgYnkgJ2ZnZXRbbmV4dF0nLCBob2xkcyBhbiBoYXNoCkBAIC0xNjg0LDYgKzE4MjIsMTEgQEAKIAogaW50ZXJuYWwgZmllbGQgdXNlZCB0byBjYWNoZSBhIGNyZWF0ZWQgc2Vzc2lvbiBzdHJ1Y3R1cmUKIAorPWl0ZW0gUmVtb3RlUG9ydAorCitPYnNvbGV0ZS4gIFBsZWFzZSB1c2UgdGhlIERlc3RIb3N0IHNwZWNpZmllciB0byBpbmRpY2F0ZSB0aGUgaG9zdG5hbWUKK2FuZCBwb3J0IGNvbWJpbmF0aW9uIGluc3RlYWQgb2YgdGhpcyBwYXJhbWV0LgorCiA9YmFjawogCiA9aGVhZDIgU05NUDo6U2Vzc2lvbiBtZXRob2RzCkBAIC0xODgyLDcgKzIwMjUsNyBAQAogCiBOb3RlIDI6IGNhbGxiYWNrIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgaW4gdGhlIFNOTVAgbW9kdWxlIHZlcnNpb24KIDUuMDQgYW5kIGFib3ZlLiAgVG8gdGVzdCBmb3IgdGhpcyBpbiBjb2RlIGludGVuZGluZyB0byBzdXBwb3J0IGJvdGgKLXZlcnNpb25zIHByaW9yIHRvIDUuMDQgYW5kIGFuZCA1LjA0IGFuZCB1cCwgdGhlIGZvbGxvd2luZyBzaG91bGQgd29yazoKK3ZlcnNpb25zIHByaW9yIHRvIDUuMDQgYW5kIDUuMDQgYW5kIHVwLCB0aGUgZm9sbG93aW5nIHNob3VsZCB3b3JrOgogCiAgIGlmICgkcmVzcG9uc2UgPSAkc2Vzcy0+Z2V0dGFibGUoJ2lmVGFibGUnLCBjYWxsYmFjayA9PiBcJm15X3N1YikpIHsKICAgICAgICMgZ290IGEgcmVzcG9uc2UsIGdldHRhYmxlIGRvZXNuJ3Qgc3VwcG9ydCBjYWxsYmFjawpAQCAtMjMxNSw2ICsyNDU4LDE0IEBACiAKIHJldHVybnMgdGhlIFJFRkVSRU5DRSBjbGF1c2UKIAorPWl0ZW0gaW5kZXhlcworCityZXR1cm5zIHRoZSBvYmplY3RzIGluIHRoZSBJTkRFWCBjbGF1c2UKKworPWl0ZW0gaW1wbGllZAorCityZXR1cm5zIHRydWUgaWYgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBJTkRFWCBpcyBJTVBMSUVECisKID1iYWNrCiAKID1oZWFkMSBNSUIgRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvU05NUC54cyBiL3BlcmwvU05NUC9TTk1QLnhzCmluZGV4IDkwMjQwYTEuLjJhNzM0ZTggMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC9TTk1QLnhzCisrKyBiL3BlcmwvU05NUC9TTk1QLnhzCkBAIC01OSwxNiArNTksNiBAQAogI2RlZmluZSBHX1ZPSUQgR19ESVNDQVJECiAjZW5kaWYKIAotI2lmZGVmIFdJTjMyCi0jZGVmaW5lIFNPQ0tfU1RBUlRVUCB3aW5zb2NrX3N0YXJ0dXAoKQotI2RlZmluZSBTT0NLX0NMRUFOVVAgd2luc29ja19jbGVhbnVwKCkKLSNkZWZpbmUgc3RyY2FzZWNtcCBfc3RyaWNtcAotI2RlZmluZSBzdHJuY2FzZWNtcCBfc3RybmljbXAKLSNlbHNlCi0jZGVmaW5lIFNPQ0tfU1RBUlRVUAotI2RlZmluZSBTT0NLX0NMRUFOVVAKLSNlbmRpZgotCiAjaW5jbHVkZSAicGVybHNubXAuaCIKIAogI2RlZmluZSBTVUNDRVNTIDEKQEAgLTc2LDYgKzY2LDkgQEAKIAogI2RlZmluZSBaRVJPX0JVVF9UUlVFICIwIGJ1dCB0cnVlIgogCisjZGVmaW5lIFNOTVBfQVBJX1RSQURJVElPTkFMIDAKKyNkZWZpbmUgU05NUF9BUElfU0lOR0xFIDEKKwogI2RlZmluZSBWQVJCSU5EX1RBR19GIDAKICNkZWZpbmUgVkFSQklORF9JSURfRiAxCiAjZGVmaW5lIFZBUkJJTkRfVkFMX0YgMgpAQCAtOTUsNiArODgsOSBAQAogLyogSW50ZXJuYWwgZmxhZyB0byBkZXRlcm1pbmUgc25tcF9tYWluX2xvb3AoKSBzaG91bGQgcmV0dXJuIGFmdGVyIGNhbGxiYWNrICovCiBzdGF0aWMgaW50IG1haW5sb29wX2ZpbmlzaCA9IDA7CiAKKy8qIEludGVybmFsIGZsYWcgdG8gZGV0ZXJtaW5lIHdoaWNoIEFQSSB3ZSdyZSB1c2luZyAqLworc3RhdGljIGludCBhcGlfbW9kZSA9IFNOTVBfQVBJX1RSQURJVElPTkFMOworCiAvKiB0aGVzZSBzaG91bGQgYmUgcGFydCBvZiB0cmFuc2Zvcm1fb2lkcy5oID8gKi8KICNkZWZpbmUgVVNNX0FVVEhfUFJPVE9fTUQ1X0xFTiAxMAogI2RlZmluZSBVU01fQVVUSF9QUk9UT19TSEFfTEVOIDEwCkBAIC0xMTIsNyArMTA4LDYgQEAKIAogc3RhdGljIHZvaWQgX19yZWNhbGNfdGltZW91dCBfKChzdHJ1Y3QgdGltZXZhbCosc3RydWN0IHRpbWV2YWwqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCosc3RydWN0IHRpbWV2YWwqLCBpbnQqICkpOwotc3RhdGljIGluX2FkZHJfdCBfX3BhcnNlX2FkZHJlc3MgXygoY2hhciopKTsKIHN0YXRpYyBpbnQgX19pc19udW1lcmljX29pZCBfKChjaGFyKikpOwogc3RhdGljIGludCBfX2lzX2xlYWYgXygoc3RydWN0IHRyZWUqKSk7CiBzdGF0aWMgaW50IF9fdHJhbnNsYXRlX2FwcGxfdHlwZSBfKChjaGFyKikpOwpAQCAtMTg2LDYgKzE4MSw5IEBACiBzdGF0aWMgaW50IF9idWxrd2Fsa19hc3luY19jYiBfKChpbnQgb3AsIFNubXBTZXNzaW9uICpzcywgaW50IHJlcWlkLAogCQkJCSAgICAgbmV0c25tcF9wZHUgKnBkdSwgdm9pZCAqY29udGV4dF9wdHIpKTsKIAorLyogUHJvdG90eXBlIGZvciBlcnJvciBoYW5kbGVyICovCit2b2lkIHNubXBfcmV0dXJuX2Vyciggc3RydWN0IHNubXBfc2Vzc2lvbiAqc3MsIFNWICplcnJfc3RyLCBTViAqZXJyX251bSwgU1YgKmVycl9pbmQgKTsKKwogLyogU3RydWN0dXJlIHRvIGhvbGQgdmFsaWQgY29udGV4dCBzZXNzaW9ucy4gKi8KIHN0cnVjdCB2YWxpZF9jb250ZXh0cyB7CiAgICB3YWxrX2NvbnRleHQJKip2YWxpZDsJLyogQXJyYXkgb2YgdmFsaWQgd2Fsa19jb250ZXh0IHBvaW50ZXJzLiAgICAqLwpAQCAtMjA5LDcgKzIwNyw2IEBACiAJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCiAKIGNoYXIJX2RlYnVneFsxMDI0XTsJLyogU3BhY2UgdG8gc3ByaW50ZigpIGludG8gLSB1c2VkIGJ5IHNwcmludF9vYmppZCgpLiAqLwotI2RlZmluZSBEQkRDTCh4KSB4CiAKIC8qIHdyYXBwZXIgYXJvdW5kIHNucHJpbnRfb2JqaWQgdG8gc25wcmludF9vYmppZCB0byByZXR1cm4gdGhlIHBvaW50ZXIgCiAgICBpbnN0ZWFkIG9mIGxlbmd0aCAqLwpAQCAtMjIwLDYgKzIxNyw3IEBACiAgIHJldHVybiBfZGVidWd4OwogfQogIAorI2RlZmluZSBEQkRDTCh4KSB4CiAjZWxzZQkvKiBERUJVR0dJTkcgKi8KICNkZWZpbmUgREJEQ0woeCkgCiAjZGVmaW5lIERCT1VUCkBAIC0yNDQsMTUgKzI0MiwxNiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBoYXZlX2luaXRlZCA9IDE7CiAKLSAgICAgICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoMSk7CisgICAgICAgIFNPQ0tfU1RBUlRVUDsKKworICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQsIDEpOwogICAgICAgICBpbml0X3NubXAoYXBwbmFtZSk7CiAgICAgCiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9ET05UX0JSRUFLRE9XTl9PSURTLCAxKTsKICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUFJJTlRfU1VGRklYX09OTFksIDEpOwogCW5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfT0lEX09VVFBVVF9TVUZGSVgpOwotICAgICAgICBTT0NLX1NUQVJUVVA7Ci0gICAgCiAgICAgfQogCiBzdGF0aWMgdm9pZApAQCAtMjk1LDI2ICsyOTQsNiBAQAogICAgfQogfQogCi1zdGF0aWMgaW5fYWRkcl90Ci1fX3BhcnNlX2FkZHJlc3MoYWRkcmVzcykKLWNoYXIgKmFkZHJlc3M7Ci17Ci0gICAgaW5fYWRkcl90IGFkZHI7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOwotICAgIHN0cnVjdCBob3N0ZW50ICpocDsKLQotICAgIGlmICgoYWRkciA9IGluZXRfYWRkcihhZGRyZXNzKSkgIT0gLTEpCi0JcmV0dXJuIGFkZHI7Ci0gICAgaHAgPSBnZXRob3N0YnluYW1lKGFkZHJlc3MpOwotICAgIGlmIChocCA9PSBOVUxMKXsKLSAgICAgICAgcmV0dXJuICgtMSk7IC8qIGVycm9yIHZhbHVlICovCi0gICAgfSBlbHNlIHsKLQltZW1jcHkoJnNhZGRyLnNpbl9hZGRyLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotCXJldHVybiBzYWRkci5zaW5fYWRkci5zX2FkZHI7Ci0gICAgfQotCi19Ci0KIHN0YXRpYyBpbnQKIF9faXNfbnVtZXJpY19vaWQgKG9pZHN0cikKIGNoYXIqIG9pZHN0cjsKQEAgLTU4NSw3ICs1NjQsNyBAQAogICAgaW50IGk7CiAgICBidWZbMF0gPSAnXDAnOwogICAgZm9yIChpPTA7IGkgPCBsZW47IGkrKykgewotCXNwcmludGYoYnVmLCIuJWx1Iiwqb2JqaWQrKyk7CisJc3ByaW50ZihidWYsIi4lIiBORVRTTk1QX1BSSW8gInUiLCpvYmppZCsrKTsKIAlidWYgKz0gc3RybGVuKGJ1Zik7CiAgICB9CiAgICByZXR1cm4gU1VDQ0VTUzsKQEAgLTYxOCw3ICs1OTcsNyBAQAogICAgY3AgPSBidWY7CiAgICB3aGlsZSAoKmJ1ZikgewogICAgICAgaWYgKCpidWYrKyA9PSAnLicpIHsKLSAgICAgICAgIHNzY2FuZihjcCwgIiVsdSIsIG9iamlkKyspOworICAgICAgICAgc3NjYW5mKGNwLCAiJSIgTkVUU05NUF9QUklvICJ1Iiwgb2JqaWQrKyk7CiAgICAgICAgICAvKiAqb2JqaWQrKyA9IGF0b2koY3ApOyAqLwogICAgICAgICAgKCpsZW4pKys7CiAgICAgICAgICBjcCA9IGJ1ZjsKQEAgLTYyOCw3ICs2MDcsNyBAQAogICAgICAgICAgfQogICAgICAgfQogICAgfQotICAgc3NjYW5mKGNwLCAiJWx1Iiwgb2JqaWQrKyk7CisgICBzc2NhbmYoY3AsICIlIiBORVRTTk1QX1BSSW8gInUiLCBvYmppZCsrKTsKICAgIC8qICpvYmppZCsrID0gYXRvaShjcCk7ICovCiAgICAoKmxlbikrKzsKICAgIHJldHVybiBTVUNDRVNTOwpAQCAtNzc5LDExICs3NTgsMTMgQEAKICAgICAgICAgICAgaWNwID0gbGNwOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZiAoIWZvdW5kX2xhYmVsICYmIGlzYWxwaGEoKGludCkqbGNwKSkgZm91bmRfbGFiZWwgPSAxOworICAgICAgaWYgKCFmb3VuZF9sYWJlbCAmJiBpc2FscGhhKCh1bnNpZ25lZCBjaGFyKSpsY3ApKSBmb3VuZF9sYWJlbCA9IDE7CiAgICAgICBsY3AtLTsKICAgIH0KIAotICAgaWYgKCFmb3VuZF9sYWJlbCB8fCAoIWlzZGlnaXQoKGludCkqKGljcCsxKSkgJiYgKGZsYWcgJiBGQUlMX09OX05VTExfSUlEKSkpCisgICBpZiAoIWZvdW5kX2xhYmVsCisgICAgICAgfHwgKChpY3AgKyAxID49IG5hbWUgKyBsZW4gfHwgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKihpY3ArMSkpKQorICAgICAgICAgICAmJiAoZmxhZyAmIEZBSUxfT05fTlVMTF9JSUQpKSkKICAgICAgIHJldHVybihGQUlMVVJFKTsKIAogICAgaWYgKGZsYWcgJiBOT05fTEVBRl9OQU1FKSB7IC8qIGRvbnQga25vdyB3aGVyZSB0byBzdGFydCBpbnN0YW5jZSBpZCAqLwpAQCAtOTYxLDE2ICs5NDIsMTYgQEAKIAogICAgaWYgKCFzb2lkX3N0ciB8fCAhKnNvaWRfc3RyKSByZXR1cm4gU1VDQ0VTUzsvKiBzdWNjZXNzZnVsbHkgYWRkZWQgbm90aGluZyAqLwogICAgaWYgKCpzb2lkX3N0ciA9PSAnLicpIHNvaWRfc3RyKys7Ci0gICBzb2lkX2J1ZiA9IHN0cmR1cChzb2lkX3N0cik7CisgICBzb2lkX2J1ZiA9IG5ldHNubXBfc3RyZHVwKHNvaWRfc3RyKTsKICAgIGlmICghc29pZF9idWYpCiAgICAgICAgcmV0dXJuIEZBSUxVUkU7CiAgICBjcCA9IHN0cnRva19yKHNvaWRfYnVmLCIuIiwmc3QpOwogICAgd2hpbGUgKGNwKSB7Ci0gICAgIHNzY2FuZihjcCwgIiVsdSIsICYoZG9pZF9hcnJbKCpkb2lkX2Fycl9sZW4pKytdKSk7CisgICAgIHNzY2FuZihjcCwgIiUiIE5FVFNOTVBfUFJJbyAidSIsICYoZG9pZF9hcnJbKCpkb2lkX2Fycl9sZW4pKytdKSk7CiAgICAgIC8qIGRvaWRfYXJyWygqZG9pZF9hcnJfbGVuKSsrXSA9ICBhdG9pKGNwKTsgKi8KICAgICAgY3AgPSBzdHJ0b2tfcihOVUxMLCIuIiwmc3QpOwogICAgfQotICAgZnJlZShzb2lkX2J1Zik7CisgICBuZXRzbm1wX2ZyZWUoc29pZF9idWYpOwogICAgcmV0dXJuKFNVQ0NFU1MpOwogfQogCkBAIC05OTEsMjcgKzk3MiwyNiBAQAogICAgIGludCByZXQgPSBTVUNDRVNTOwogCiAgICAgaWYgKHBkdS0+dmFyaWFibGVzID09IE5VTEwpewotCXBkdS0+dmFyaWFibGVzID0gdmFycyA9Ci0gICAgICAgICAgIChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiljYWxsb2MoMSxzaXplb2YobmV0c25tcF92YXJpYWJsZV9saXN0KSk7CisJcGR1LT52YXJpYWJsZXMgPSB2YXJzCisgICAgICAgICAgICA9IG5ldHNubXBfY2FsbG9jKDEsIHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKICAgICB9IGVsc2UgewogCWZvcih2YXJzID0gcGR1LT52YXJpYWJsZXM7CiAgICAgICAgICAgICB2YXJzLT5uZXh0X3ZhcmlhYmxlOwogICAgICAgICAgICAgdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGUpCiAJICAgIC8qRVhJVCovOwotCXZhcnMtPm5leHRfdmFyaWFibGUgPQotICAgICAgICAgICAobmV0c25tcF92YXJpYWJsZV9saXN0ICopY2FsbG9jKDEsc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOworCXZhcnMtPm5leHRfdmFyaWFibGUgPSBuZXRzbm1wX2NhbGxvYygxLCBzaXplb2YobmV0c25tcF92YXJpYWJsZV9saXN0KSk7CiAJdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGU7CiAgICAgfQogCiAgICAgdmFycy0+bmV4dF92YXJpYWJsZSA9IE5VTEw7Ci0gICAgdmFycy0+bmFtZSA9IChvaWQgKiltYWxsb2MobmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CisgICAgdmFycy0+bmFtZSA9IG5ldHNubXBfbWFsbG9jKG5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogICAgIG1lbWNweSgoY2hhciAqKXZhcnMtPm5hbWUsIChjaGFyICopbmFtZSwgbmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAgICAgdmFycy0+bmFtZV9sZW5ndGggPSBuYW1lX2xlbmd0aDsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgIGNhc2UgVFlQRV9JTlRFR0VSOgogICAgICAgY2FzZSBUWVBFX0lOVEVHRVIzMjoKICAgICAgICAgdmFycy0+dHlwZSA9IEFTTl9JTlRFR0VSOwotICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IChsb25nICopbWFsbG9jKHNpemVvZihsb25nKSk7CisgICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gbmV0c25tcF9tYWxsb2Moc2l6ZW9mKGxvbmcpKTsKICAgICAgICAgaWYgKHZhbCkKICAgICAgICAgICAgICoodmFycy0+dmFsLmludGVnZXIpID0gc3RydG9sKHZhbCxOVUxMLDApOwogICAgICAgICBlbHNlIHsKQEAgLTEwMzQsNyArMTAxNCw3IEBACiAgICAgICBjYXNlIFRZUEVfVUlOVEVHRVI6CiAgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fVUlOVEVHRVI7CiBhc191aW50OgotICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IChsb25nICopbWFsbG9jKHNpemVvZihsb25nKSk7CisgICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gbmV0c25tcF9tYWxsb2Moc2l6ZW9mKGxvbmcpKTsKICAgICAgICAgaWYgKHZhbCkKICAgICAgICAgICAgIHNzY2FuZih2YWwsIiVsdSIsdmFycy0+dmFsLmludGVnZXIpOwogICAgICAgICBlbHNlIHsKQEAgLTEwNTUsMjAgKzEwMzUsMjAgQEAKICAgICAgIGNhc2UgVFlQRV9PUEFRVUU6CiAgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fT0NURVRfU1RSOwogYXNfb2N0OgotICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gKHVfY2hhciAqKW1hbGxvYyhsZW4pOworICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gbmV0c25tcF9tYWxsb2MobGVuKTsKICAgICAgICAgdmFycy0+dmFsX2xlbiA9IGxlbjsKICAgICAgICAgaWYgKHZhbCAmJiBsZW4pCiAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKil2YXJzLT52YWwuc3RyaW5nLCB2YWwsIGxlbik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0ID0gRkFJTFVSRTsKLSAgICAgICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAodV9jaGFyKilzdHJkdXAoIiIpOworICAgICAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9ICh1X2NoYXIgKikgbmV0c25tcF9zdHJkdXAoIiIpOwogICAgICAgICAgICAgdmFycy0+dmFsX2xlbiA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgVFlQRV9JUEFERFI6CiAgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fSVBBRERSRVNTOwotICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IChsb25nICopbWFsbG9jKHNpemVvZihpbl9hZGRyX3QpKTsKKyAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSBuZXRzbm1wX21hbGxvYyhzaXplb2YoaW5fYWRkcl90KSk7CiAgICAgICAgIGlmICh2YWwpCiAgICAgICAgICAgICAqKChpbl9hZGRyX3QgKil2YXJzLT52YWwuaW50ZWdlcikgPSBpbmV0X2FkZHIodmFsKTsKICAgICAgICAgZWxzZSB7CkBAIC0xMDg4LDcgKzEwNjgsNyBAQAogCSAgICByZXQgPSBGQUlMVVJFOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdmFycy0+dmFsX2xlbiAqPSBzaXplb2Yob2lkKTsKLSAgICAgICAgICAgIHZhcnMtPnZhbC5vYmppZCA9IChvaWQgKiltYWxsb2ModmFycy0+dmFsX2xlbik7CisgICAgICAgICAgICB2YXJzLT52YWwub2JqaWQgPSBuZXRzbm1wX21hbGxvYyh2YXJzLT52YWxfbGVuKTsKICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKXZhcnMtPnZhbC5vYmppZCwgKGNoYXIgKilvaWRidWYsIHZhcnMtPnZhbF9sZW4pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTEyMCw4ICsxMTAwLDEyIEBACiAgICBsb25nIGNvbW1hbmQgPSBwZHUtPmNvbW1hbmQ7CiAgICAqcmVzcG9uc2UgPSBOVUxMOwogcmV0cnk6Ci0KLSAgIHN0YXR1cyA9IHNubXBfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgcmVzcG9uc2UpOworCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwl7CisJCXN0YXR1cyA9IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzcywgcGR1LCByZXNwb25zZSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gc25tcF9zeW5jaF9yZXNwb25zZShzcywgcGR1LCByZXNwb25zZSk7CisJfTsKIAogICAgaWYgKCgqcmVzcG9uc2UgPT0gTlVMTCkgJiYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpKSBzdGF0dXMgPSBTVEFUX0VSUk9SOwogCkBAIC0xMTU4LDEwICsxMTQyLDEwIEBACiAgICAgICAgICAgICAvKiBpbiBTTk1QdjJjLCBTTk1QdjJ1LCBTTk1QdjIqLCBhbmQgU05NUHYzIFBEVXMgKi8KICAgICAgICAgICAgIGNhc2UgU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRToKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICBzdl9jYXRwdihlcnJfc3RyX3N2LAotICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfZXJyc3RyaW5nKCgqcmVzcG9uc2UpLT5lcnJzdGF0KSk7Ci0gICAgICAgICAgICAgICBzdl9zZXRpdihlcnJfbnVtX3N2LCAoKnJlc3BvbnNlKS0+ZXJyc3RhdCk7Ci0JICAgICAgIHN2X3NldGl2KGVycl9pbmRfc3YsICgqcmVzcG9uc2UpLT5lcnJpbmRleCk7CisJCQkJc3ZfY2F0cHYoZXJyX3N0cl9zdiwKKwkJCQkJKGNoYXIqKXNubXBfZXJyc3RyaW5nKCgqcmVzcG9uc2UpLT5lcnJzdGF0KSk7CisJCQkJc3Zfc2V0aXYoZXJyX251bV9zdiwgKCpyZXNwb25zZSktPmVycnN0YXQpOworCQkJCXN2X3NldGl2KGVycl9pbmRfc3YsICgqcmVzcG9uc2UpLT5lcnJpbmRleCk7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKnJlc3BvbnNlKS0+ZXJyc3RhdDsKICAgICAgICAgICAgICAgIGJyZWFrOwogCSB9CkBAIC0xMTY5LDEzICsxMTUzLDEyIEBACiAKICAgICAgIGNhc2UgU1RBVF9USU1FT1VUOgogICAgICAgY2FzZSBTVEFUX0VSUk9SOgotICAgICAgICAgIHN2X2NhdHB2KGVycl9zdHJfc3YsIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgIHN2X3NldGl2KGVycl9udW1fc3YsIHNzLT5zX3NubXBfZXJybm8pOworCSAgICAgc25tcF9yZXR1cm5fZXJyKHNzLCBlcnJfc3RyX3N2LCBlcnJfbnVtX3N2LCBlcnJfaW5kX3N2KTsKICAgICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgorCSAgICAgc25tcF9yZXR1cm5fZXJyKHNzLCBlcnJfc3RyX3N2LCBlcnJfbnVtX3N2LCBlcnJfaW5kX3N2KTsKICAgICAgICAgIHN2X2NhdHB2KGVycl9zdHJfc3YsICJzZW5kX3N5bmNfcGR1OiB1bmtub3duIHN0YXR1cyIpOwotICAgICAgICAgc3Zfc2V0aXYoZXJyX251bV9zdiwgc3MtPnNfc25tcF9lcnJubyk7CiAgICAgICAgICBicmVhazsKICAgIH0KIApAQCAtMTI0OCw3ICsxMjMxLDEyIEBACiAgICAgICAgIHJlcGx5X3BkdS0+Y29tbWFuZCA9IFNOTVBfTVNHX1JFU1BPTlNFOwogICAgICAgICByZXBseV9wZHUtPnJlcWlkID0gcGR1LT5yZXFpZDsKICAgICAgICAgcmVwbHlfcGR1LT5lcnJzdGF0ID0gcmVwbHlfcGR1LT5lcnJpbmRleCA9IDA7Ci0gICAgICAgIHNubXBfc2VuZChzcywgcmVwbHlfcGR1KTsKKwlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJeworICAgICAgICAJc25tcF9zZXNzX3NlbmQoc3MsIHJlcGx5X3BkdSk7CisJfSBlbHNlIHsKKwkgICAgICAgIHNubXBfc2VuZChzcywgcmVwbHlfcGR1KTsKKwl9CiAgICAgICB9IGVsc2UgewogICAgICAgICB3YXJuKCJDb3VsZG4ndCBjbG9uZSBQRFUgZm9yIGluZm9ybSByZXNwb25zZSIpOwogICAgICAgfQpAQCAtMTI2Niw3ICsxMjU0LDcgQEAKIAljcCA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKIAkJCQkgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKIAlhdl9wdXNoKHRyYXBsaXN0LCBuZXdTVnB2KGNwLCBzdHJsZW4oY3ApKSk7Ci0JZnJlZShjcCk7CisJbmV0c25tcF9mcmVlKGNwKTsKICAgICAgIH0gZWxzZSB7CiAJLyogIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFwcGVuOyBldmVyeSBzZXNzaW9uIGhhcyBhIHRyYW5zcG9ydC4gICovCiAJYXZfcHVzaCh0cmFwbGlzdCwgbmV3U1ZwdigiIiwgMCkpOwpAQCAtMTgzMywxMyArMTgyMSwxNyBAQAogICAgKiogc25tcF9hc3luY19zZW5kKCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxaWQgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgogICAgKi8KICAgIGlmIChTdlRSVUUoY29udGV4dC0+cGVybF9jYikpIHsKLSAgICAgIHJlcWlkID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9idWxrd2Fsa19hc3luY19jYiwgKHZvaWQgKiljb250ZXh0KTsKKyAgICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisgICAgeworICAgICByZXFpZCA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9idWxrd2Fsa19hc3luY19jYiwgKHZvaWQgKiljb250ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICByZXFpZCA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfYnVsa3dhbGtfYXN5bmNfY2IsICh2b2lkICopY29udGV4dCk7CisgICAgfQogCiAgICAgICBEQlBSVCgyLChEQk9VVCAiYnVsa3dhbGtfc2VuZF9wZHUoKTogc25tcF9hc3luY19zZW5kID0+IDB4JTA4WFxuIiwgcmVxaWQpKTsKIAogICAgICAgaWYgKHJlcWlkID09IDApIHsKLQkgc3Zfc2V0cHYoKmVycl9zdHJfc3ZwLCAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLQkgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkgc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCwgKmVycl9zdHJfc3ZwKTsKIAkgZ290byBlcnI7CiAgICAgICB9CiAKQEAgLTI0NTcsNiArMjQ0OSw4IEBACiAJVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgU05NUF9ERUZBVUxUX1RJTUVPVVQpOwogCVRFU1RfQ09OU1RBTlQyKHZhbHVlLCBuYW1lLCBTTk1QX0RFRkFVTFRfVkVSU0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTik7CisJVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgU05NUF9BUElfU0lOR0xFKTsKKwlURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBTTk1QX0FQSV9UUkFESVRJT05BTCk7CiAJYnJlYWs7CiAgICAgY2FzZSAnWCc6CiAgICAgICAgICAgICBnb3RvIG5vdF90aGVyZTsKQEAgLTI0NzEsNiArMjQ2NSw0OSBAQAogICAgIHJldHVybiBFTk9FTlQ7CiB9CiAKKy8qIAorICBTaW5jZSBzX3NubXBfZXJybm8gY2FuJ3QgYmUgdHJ1c3RlZCB3aXRoIFNpbmdsZSBTZXNzaW9uLCB0aGlzIGNhbGxzIGVpdGhlcgorICBzbm1wX2Vycm9yIG9yIHNubXBfc2Vzc19lcnJvciB0byBwb3B1bGF0ZSBFcnJvclN0cixFcnJvck51bSwgYW5kIEVycm9ySW5kCisgIGluIFNOTVA6OlNlc3Npb24gb2JqZWN0cworKi8KK3ZvaWQgc25tcF9yZXR1cm5fZXJyKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzcywgU1YgKmVycl9zdHIsIFNWICplcnJfbnVtLCBTViAqZXJyX2luZCApCit7CisJaW50IGVycjsKKwlpbnQgbGliZXJyOworCWNoYXIgKmVycnN0cjsKKwlpZihzcyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCXsKKwkJc25tcF9zZXNzX2Vycm9yKHNzLCAmZXJyLCAmbGliZXJyLCAmZXJyc3RyKTsKKwl9IGVsc2UgeworCQlzbm1wX2Vycm9yKHNzLCAmZXJyLCAmbGliZXJyLCAmZXJyc3RyKTsKKwl9CisJc3ZfY2F0cHYoZXJyX3N0ciwgZXJyc3RyKTsKKwlzdl9zZXRpdihlcnJfbnVtLCBsaWJlcnIpOworCXN2X3NldGl2KGVycl9pbmQsIGVycik7CisJbmV0c25tcF9mcmVlKGVycnN0cik7Cit9CisKKworLyogCisgIGludCBzbm1wX2FwaV9tb2RlKCBpbnQgbW9kZSApIAorICBSZXR1cm5zIG9yIHNldHMgc3RhdGljIGludCBhcGlfbW9kZSBmb3IgcmVmZXJlbmNlIGJ5IGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUKKyAgd2hldGhlciB0byB1c2UgVHJhZGl0aW9uYWwgKG5vbi10aHJlYWRzYWZlKSBvciBTaW5nbGUtU2Vzc2lvbiAodGhyZWFkc2FmZSkKKyAgU05NUCBBUEkgY2FsbHMuCisgCisgIENhbGwgd2l0aCAoaW50KU5VTEwgdG8gcmV0dXJuIHRoZSBjdXJyZW50IG1vZGUsIG9yIHdpdGggU05NUF9BUElfVFJBRElUSU9OQUwKKyAgb3IgU05NUF9BUElfU0lOR0xFIHRvIHNldCB0aGUgY3VycmVudCBtb2RlLiAgKGRlZmluZWQgYWJvdmUpCisgCisgIHBtIHNpZGUgY2FsbCBkZWZhdWx0cyB0byAoaW50KU5VTEwKKyovCitpbnQgc25tcF9hcGlfbW9kZSggaW50IG1vZGUgKQoreworCWlmIChtb2RlID09IDApCisJCXJldHVybiBhcGlfbW9kZTsKKwlhcGlfbW9kZSA9IG1vZGU7CisJcmV0dXJuIGFwaV9tb2RlOworfQogCiBNT0RVTEUgPSBTTk1QCQlQQUNLQUdFID0gU05NUAkJUFJFRklYID0gc25tcAogCkBAIC0yNTAwLDYgKzI1MzcsMTMgQEAKICAgICBDT0RFOgogICAgICAgICBfX2xpYnJhcmllc19pbml0KGFwcG5hbWUpOwogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyMgUGVybCBjYWxsIGRlZmF1bHRzIHRvIChpbnQpTlVMTCB3aGVuIGdpdmVuIG5vIGFyZ3MsIHNvIGl0IHdpbGwgcmV0dXJuCisjIHRoZSBjdXJyZW50IGFwaV9tb2RlIHZhbHVlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCAKK3NubXBfYXBpX21vZGUobW9kZT0wKQorCWludCBtb2RlCiAKIFNubXBTZXNzaW9uICoKIHNubXBfbmV3X3Nlc3Npb24odmVyc2lvbiwgY29tbXVuaXR5LCBwZWVyLCBscG9ydCwgcmV0cmllcywgdGltZW91dCkKQEAgLTI1NDUsNyArMjU4OSwxMiBAQAogICAgICAgICAgICBzZXNzaW9uLnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLwogICAgICAgICAgICBzZXNzaW9uLmF1dGhlbnRpY2F0b3IgPSBOVUxMOwogCi0gICAgICAgICAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKwkgICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJICAgeworCSAgICAgICAgICAgc3MgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7CisJICAgfSBlbHNlIHsKKwkJICAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCSAgIH0KIAogICAgICAgICAgICBpZiAoc3MgPT0gTlVMTCkgewogCSAgICAgIGlmICh2ZXJib3NlKSB3YXJuKCJlcnJvcjpzbm1wX25ld19zZXNzaW9uOiBDb3VsZG4ndCBvcGVuIFNOTVAgc2Vzc2lvbiIpOwpAQCAtMjU5Nyw3ICsyNjQ2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKIAkgICB9CiAKLQkgICBzZXNzaW9uLnBlZXJuYW1lID0gc3RyZHVwKHBlZXIpOworCSAgIHNlc3Npb24ucGVlcm5hbWUgPSBwZWVyOwogICAgICAgICAgICBzZXNzaW9uLnJldHJpZXMgPSByZXRyaWVzOyAvKiA1ICovCiAgICAgICAgICAgIHNlc3Npb24udGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCiAgICAgICAgICAgIHNlc3Npb24uYXV0aGVudGljYXRvciA9IE5VTEw7CkBAIC0yNzE0LDE4ICsyNzYzLDExOCBAQAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKwkgICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJICAgeworCSAgICAgICAgICAgc3MgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7CisJICAgfSBlbHNlIHsKKwkJICAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCSAgIH0KIAogICAgICAgICAgICBpZiAoc3MgPT0gTlVMTCkgewogCSAgICAgIGlmICh2ZXJib3NlKSB3YXJuKCJlcnJvcjpzbm1wX25ld192M19zZXNzaW9uOkNvdWxkbid0IG9wZW4gU05NUCBzZXNzaW9uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgZW5kOgogICAgICAgICAgICBSRVRWQUwgPSBzczsKLQkgICBmcmVlIChzZXNzaW9uLmNvbnRleHRFbmdpbmVJRCk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlQcml2TG9jYWxLZXkpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5UHJpdlByb3RvKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUF1dGhMb2NhbEtleSk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlBdXRoUHJvdG8pOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLmNvbnRleHRFbmdpbmVJRCk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlFbmdpbmVJRCk7CiAJfQogICAgICAgICBPVVRQVVQ6CiAgICAgICAgIFJFVFZBTAogCitTbm1wU2Vzc2lvbiAqCitzbm1wX25ld190dW5uZWxlZF9zZXNzaW9uKHZlcnNpb24sIHBlZXIsIHJldHJpZXMsIHRpbWVvdXQsIHNlY19uYW1lLCBzZWNfbGV2ZWwsIGNvbnRleHRfZW5nX2lkLCBjb250ZXh0LCBvdXJfaWRlbnRpdHksIHRoZWlyX2lkZW50aXR5LCB0aGVpcl9ob3N0bmFtZSwgdHJ1c3RfY2VydCkKKyAgICAgICAgaW50CXZlcnNpb24KKyAgICAgICAgY2hhciAqCXBlZXIKKyAgICAgICAgaW50CXJldHJpZXMKKyAgICAgICAgaW50CXRpbWVvdXQKKyAgICAgICAgY2hhciAqICBzZWNfbmFtZQorICAgICAgICBpbnQgICAgIHNlY19sZXZlbAorICAgICAgICBjaGFyICogIGNvbnRleHRfZW5nX2lkCisgICAgICAgIGNoYXIgKiAgY29udGV4dAorICAgICAgICBjaGFyICogIG91cl9pZGVudGl0eQorICAgICAgICBjaGFyICogIHRoZWlyX2lkZW50aXR5CisgICAgICAgIGNoYXIgKiAgdGhlaXJfaG9zdG5hbWUKKyAgICAgICAgY2hhciAqICB0cnVzdF9jZXJ0CisJQ09ERToKKwl7CisJICAgU25tcFNlc3Npb24gc2Vzc2lvbiA9IHswfTsKKwkgICBTbm1wU2Vzc2lvbiAqc3MgPSBOVUxMOworICAgICAgICAgICBpbnQgdmVyYm9zZSA9IFN2SVYocGVybF9nZXRfc3YoIlNOTVA6OnZlcmJvc2UiLCAweDAxIHwgMHgwNCkpOworCisgICAgICAgICAgIF9fbGlicmFyaWVzX2luaXQoInBlcmwiKTsKKworICAgICAgICAgICBzZXNzaW9uLnZlcnNpb24gPSB2ZXJzaW9uOworCisJICAgc2Vzc2lvbi5wZWVybmFtZSA9IHBlZXI7CisgICAgICAgICAgIHNlc3Npb24ucmV0cmllcyA9IHJldHJpZXM7IC8qIDUgKi8KKyAgICAgICAgICAgc2Vzc2lvbi50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KKyAgICAgICAgICAgc2Vzc2lvbi5jb250ZXh0TmFtZUxlbiA9IHN0cmxlbihjb250ZXh0KTsKKyAgICAgICAgICAgc2Vzc2lvbi5jb250ZXh0TmFtZSA9IGNvbnRleHQ7CisgICAgICAgICAgIHNlc3Npb24uc2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKHNlY19uYW1lKTsKKyAgICAgICAgICAgc2Vzc2lvbi5zZWN1cml0eU5hbWUgPSBzZWNfbmFtZTsKKyAgICAgICAgICAgc2Vzc2lvbi5zZWN1cml0eUxldmVsID0gc2VjX2xldmVsOworICAgICAgICAgICBzZXNzaW9uLnNlY3VyaXR5TW9kZWwgPSBORVRTTk1QX1RTTV9TRUNVUklUWV9NT0RFTDsKKyAgICAgICAgICAgc2Vzc2lvbi5jb250ZXh0RW5naW5lSURMZW4gPQorICAgICAgICAgICAgICBoZXhfdG9fYmluYXJ5MigodV9jaGFyKiljb250ZXh0X2VuZ19pZCwgc3RybGVuKGNvbnRleHRfZW5nX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZzZXNzaW9uLmNvbnRleHRFbmdpbmVJRCk7CisKKyAgICAgICAgICAgLyogY3JlYXRlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBzdG9yZSAqLworICAgICAgICAgICBpZiAoIXNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCgpOworICAgICAgICAgICAgICAgc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgidHJhbnNwb3J0X2NvbmZpZ3VyYXRpb246ZmlmbyIpOworICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gY29udGFpbmVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOworICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbi0+Y29tcGFyZSA9CisgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKQorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19jb21wYXJlOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgKG91cl9pZGVudGl0eSAmJiBvdXJfaWRlbnRpdHlbMF0gIT0gJ1wwJykKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygib3VyX2lkZW50aXR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJfaWRlbnRpdHkpKTsKKworICAgICAgICAgICBpZiAodGhlaXJfaWRlbnRpdHkgJiYgdGhlaXJfaWRlbnRpdHlbMF0gIT0gJ1wwJykKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygidGhlaXJfaWRlbnRpdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX2lkZW50aXR5KSk7CisKKyAgICAgICAgICAgaWYgKHRoZWlyX2hvc3RuYW1lICYmIHRoZWlyX2hvc3RuYW1lWzBdICE9ICdcMCcpCisgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInRoZWlyX2hvc3RuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9ob3N0bmFtZSkpOworCisgICAgICAgICAgIGlmICh0cnVzdF9jZXJ0ICYmIHRydXN0X2NlcnRbMF0gIT0gJ1wwJykKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygidHJ1c3RfY2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3RfY2VydCkpOworICAgICAgICAgICAKKworICAgICAgICAgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisKKyAgICAgICAgICAgaWYgKHNzID09IE5VTEwpIHsKKwkgICAgICBpZiAodmVyYm9zZSkgd2FybigiZXJyb3I6c25tcF9uZXdfdjNfc2Vzc2lvbjpDb3VsZG4ndCBvcGVuIFNOTVAgc2Vzc2lvbiIpOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgUkVUVkFMID0gc3M7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlQcml2TG9jYWxLZXkpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5UHJpdlByb3RvKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUF1dGhMb2NhbEtleSk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlBdXRoUHJvdG8pOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLmNvbnRleHRFbmdpbmVJRCk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlFbmdpbmVJRCk7CisJfQorICAgICAgICBPVVRQVVQ6CisgICAgICAgIFJFVFZBTAogCiBTbm1wU2Vzc2lvbiAqCiBzbm1wX3VwZGF0ZV9zZXNzaW9uKHNlc3NfcmVmLCB2ZXJzaW9uLCBjb21tdW5pdHksIHBlZXIsIGxwb3J0LCByZXRyaWVzLCB0aW1lb3V0KQpAQCAtMjc2OCw4ICsyOTE3LDggQEAKIAkgICB9CiAgICAgICAgICAgIC8qIFdBUk5JTkcgTEVBS0FHRSBidXQgSSBjYW50IGZyZWUgbGliIG1lbW9yeSB1bmRlciB3aW4zMiAqLwogICAgICAgICAgICBzcy0+Y29tbXVuaXR5X2xlbiA9IHN0cmxlbigoY2hhciAqKWNvbW11bml0eSk7Ci0gICAgICAgICAgIHNzLT5jb21tdW5pdHkgPSAodV9jaGFyICopc3RyZHVwKGNvbW11bml0eSk7Ci0JICAgc3MtPnBlZXJuYW1lID0gc3RyZHVwKHBlZXIpOworICAgICAgICAgICBzcy0+Y29tbXVuaXR5ID0gKHVfY2hhciAqKW5ldHNubXBfc3RyZHVwKGNvbW11bml0eSk7CisJICAgc3MtPnBlZXJuYW1lID0gbmV0c25tcF9zdHJkdXAocGVlcik7CiAJICAgc3MtPmxvY2FsX3BvcnQgPSBscG9ydDsKICAgICAgICAgICAgc3MtPnJldHJpZXMgPSByZXRyaWVzOyAvKiA1ICovCiAgICAgICAgICAgIHNzLT50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KQEAgLTI5MjUsNiArMzA3NCw3IEBACiAgICAgICAgICAgIGludCB1c2VfZW51bXM7CiAgICAgICAgICAgIHN0cnVjdCBlbnVtX2xpc3QgKmVwOwogICAgICAgICAgICBpbnQgYmVzdF9ndWVzczsJICAgCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogCiAgICAgICAgICAgIE5ldyAoMCwgb2lkX2FyciwgTUFYX09JRF9MRU4sIG9pZCk7CiAKQEAgLTMwMTEsMTUgKzMxNjEsMTkgQEAKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybF9jYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnNlc3NfcmVmID0gbmV3UlZfaW5jKFN2UlYoc2Vzc19yZWYpKTsKIAorCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKyAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHN0YXR1cykpKTsgLyogcHVzaCB0aGUgcmVxaWQ/PyAqLwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X2NhdHB2KCplcnJfc3RyX3N2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJCQkJCXNubXBfcmV0dXJuX2VycihzcywgKmVycl9zdHJfc3ZwLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCk7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOwogICAgICAgICAgICAgICAgICB9CiAJCSBnb3RvIGRvbmU7CkBAIC0zMDQyLDYgKzMxOTYsOSBAQAogICAgICAgICAgICAgICAvKiBCVUchISEgbmVlZCB0byByZXR1cm4gYW4gZXJyb3IgdmFsdWUgKi8KICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7IC8qIG5vIG1lbSBvciBiYWQgYXJncyAqLwogICAgICAgICAgICB9CisjZWxzZSAgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICAgIHdhcm4oImVycm9yOiBOZXQtU05NUCB3YXMgY29tcGlsZWQgdXNpbmcgLS1lbmFibGUtcmVhZC1vbmx5LCBzZXQoKSBjYW4gbm90IGJlIHVzZWQuIik7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiBkb25lOgogICAgICAgICAgICBTYWZlZnJlZShvaWRfYXJyKTsKICAgICAgICAgfQpAQCAtMzE5NCwxNSArMzM1MSwxOSBAQAogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsX2NhbGxiYWNrKTsKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+c2Vzc19yZWYgPSBuZXdTVnN2KHNlc3NfcmVmKTsKIAorCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKwkJIHN0YXR1cyA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKKwkJCQkJICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoc3RhdHVzKSkpOyAvKiBwdXNoIHRoZSByZXFpZD8/ICovCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgICAgICAgc3ZfY2F0cHYoKmVycl9zdHJfc3ZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkgIAkgICAgc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCwgKmVycl9zdHJfc3ZwKTsgIAogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsKICAgICAgICAgICAgICAgICAgfQogCQkgZ290byBkb25lOwpAQCAtMzQzMSwxNSArMzU5MiwxOSBAQAogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsX2NhbGxiYWNrKTsKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+c2Vzc19yZWYgPSBuZXdTVnN2KHNlc3NfcmVmKTsKIAorCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKyAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHN0YXR1cykpKTsgLyogcHVzaCB0aGUgcmVxaWQ/PyAqLwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X2NhdHB2KCplcnJfc3RyX3N2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJCQkJCXNubXBfcmV0dXJuX2VycihzcywgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnAsICplcnJfc3RyX3N2cCk7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOwogICAgICAgICAgICAgICAgICB9CiAJCSBnb3RvIGRvbmU7CkBAIC0zNjY5LDE1ICszODM0LDE5IEBACiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxfY2FsbGJhY2spOwogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5zZXNzX3JlZiA9IG5ld1NWc3Yoc2Vzc19yZWYpOwogCisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoc3RhdHVzKSkpOyAvKiBwdXNoIHRoZSByZXFpZD8/ICovCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgICAgICAgc3ZfY2F0cHYoKmVycl9zdHJfc3ZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkJCQkJc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCwgKmVycl9zdHJfc3ZwKTsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7CiAgICAgICAgICAgICAgICAgIH0KIAkJIGdvdG8gZG9uZTsKQEAgLTQwMjgsNyArNDE5Nyw3IEBACiAJICAgICAgfQogCiAJICAgICAgLyogU2VudCBva2F5Li4uICBSZXR1cm4gdGhlIHJlcXVlc3QgSUQgaW4gJ3BkdScgYXMgYW4gU3ZJVi4gKi8KLQkgICAgICBEQlBSVCgxLChEQk9VVCAiT2theSwgcmVxdWVzdCBpZCBpcyAlcFxuIiwgcGR1KSk7CisJICAgICAgREJQUlQoMSwoREJPVVQgIk9rYXksIHJlcXVlc3QgaWQgaXMgJWxkXG4iLCAobG9uZykoaW50cHRyX3QpcGR1KSk7CiAvKgkgICAgICBYU1JFVFVSTl9JVigoaW50cHRyX3QpcGR1KTsgKi8KIAkgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KChJVilwZHUpKSk7CiAJICAgICAgWFNSRVRVUk4oMSk7CkBAIC00MjA4LDcgKzQzNzcsNyBAQAogICAgICAgICAgICAgICB9IC8qIGZvciBhbGwgdGhlIHZhcnMgKi8KICAgICAgICAgICAgICAgfQogCi0JICAgICAgcGR1LT5lbnRlcnByaXNlID0gKG9pZCAqKW1hbGxvYyggTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisJICAgICAgcGR1LT5lbnRlcnByaXNlID0gKG9pZCAqKW5ldHNubXBfbWFsbG9jKE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOwogICAgICAgICAgICAgICB0cCA9IF9fdGFnMm9pZChlbnRlcnByaXNlLE5VTEwsIHBkdS0+ZW50ZXJwcmlzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBkdS0+ZW50ZXJwcmlzZV9sZW5ndGgsIE5VTEwsIGJlc3RfZ3Vlc3MpOwogICAJICAgICAgaWYgKHBkdS0+ZW50ZXJwcmlzZV9sZW5ndGggPT0gMCkgewpAQCAtNDIxOSwxMiArNDM4OCwxMiBAQAogCQkgIGFnZW50LWFkZHJlc3MgZmllbGQgdG8gdGhhdC4gIE90aGVyd2lzZSBzZXQgaXQgdG8KIAkJICBvdXIgYWRkcmVzcy4gICovCiAgICAgICAgICAgICAgIGlmIChhZ2VudCAmJiBzdHJsZW4oYWdlbnQpKSB7Ci0gICAgICAgICAgICAgICAgIGlmIChfX3BhcnNlX2FkZHJlc3MoYWdlbnQpID09IC0xICYmIHZlcmJvc2UpIHsKLQkJICAgd2FybigiZXJyb3I6dHJhcDppbnZhbGlkIGFnZW50IGFkZHJlc3M6ICVzIiwgYWdlbnQpOwotCQkgICBnb3RvIGVycjsKLSAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJICAgKigoaW5fYWRkcl90ICopcGR1LT5hZ2VudF9hZGRyKSA9IF9fcGFyc2VfYWRkcmVzcyhhZ2VudCk7Ci0JCSB9CisgICAgICAgICAgICAgICAgIGlmICgwID4gbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KGFnZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5fYWRkcl90ICopcGR1LT5hZ2VudF9hZGRyKSl7CisgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKCJlcnJvcjp0cmFwOmludmFsaWQgYWdlbnQgYWRkcmVzczogJXMiLCBhZ2VudCk7CisgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgKigoaW5fYWRkcl90ICopcGR1LT5hZ2VudF9hZGRyKSA9IGdldF9teWFkZHIoKTsKICAgICAgICAgICAgICAgfQpAQCAtNDIzMiw5ICs0NDAxLDE0IEBACiAgICAgICAgICAgICAgIHBkdS0+c3BlY2lmaWNfdHlwZSA9IHNwZWNpZmljOwogICAgICAgICAgICAgICBwZHUtPnRpbWUgPSB1cHRpbWU7CiAKLSAgICAgICAgICAgICAgaWYgKHNubXBfc2VuZChzcywgcGR1KSA9PSAwKSB7CisJICAgICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJICAgICB7CisJCWlmKHNubXBfc2Vzc19zZW5kKHNzLHBkdSkgPT0gMCkKKwkJCXNubXBfZnJlZV9wZHUocGR1KTsKKwkgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChzbm1wX3NlbmQoc3MsIHBkdSkgPT0gMCkgCiAJICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KFpFUk9fQlVUX1RSVUUsMCkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKIGVycjoKQEAgLTQyNzcsNyArNDQ1MSw3IEBACiAJICAgCiAgICAgICAgICAgIE5ldyAoMCwgb2lkX2FyciwgTUFYX09JRF9MRU4sIG9pZCk7CiAKLSAgICAgICAgICAgaWYgKG9pZF9hcnIgJiYgU3ZST0soc2Vzc19yZWYpICYmIFN2Uk9LKHZhcmxpc3RfcmVmKSkgeworICAgICAgICAgICBpZiAob2lkX2FyciAmJiBTdlJPSyhzZXNzX3JlZikpIHsKIAogICAgICAgICAgICAgICBzZXNzX3B0cl9zdiA9IGh2X2ZldGNoKChIViopU3ZSVihzZXNzX3JlZiksICJTZXNzUHRyIiwgNywgMSk7CiAJICAgICAgc3MgPSAoU25tcFNlc3Npb24gKilTdklWKChTViopU3ZSVigqc2Vzc19wdHJfc3YpKTsKQEAgLTQyOTEsOCArNDQ2NSwxMyBAQAogCSAgICAgIAogICAgICAgICAgICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfVFJBUDIpOwogCi0gICAgICAgICAgICAgIHZhcmxpc3QgPSAoQVYqKSBTdlJWKHZhcmxpc3RfcmVmKTsKLSAgICAgICAgICAgICAgdmFybGlzdF9sZW4gPSBhdl9sZW4odmFybGlzdCk7CisgICAgICAgICAgICAgIGlmIChTdlJPSyh2YXJsaXN0X3JlZikpIHsKKyAgICAgICAgICAgICAgICAgIHZhcmxpc3QgPSAoQVYqKSBTdlJWKHZhcmxpc3RfcmVmKTsKKyAgICAgICAgICAgICAgICAgIHZhcmxpc3RfbGVuID0gYXZfbGVuKHZhcmxpc3QpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgdmFybGlzdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICB2YXJsaXN0X2xlbiA9IC0xOworICAgICAgICAgICAgICB9CiAJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgICAgICAgICAgcmVzID0gX19hZGRfdmFyX3ZhbF9zdHIocGR1LCBzeXNVcFRpbWUsIFNZU19VUFRJTUVfT0lEX0xFTiwKIAkJCQl1cHRpbWUsIHN0cmxlbih1cHRpbWUpLCBUWVBFX1RJTUVUSUNLUyk7CkBAIC00MzY1LDkgKzQ1NDQsMTQgQEAKICAgICAgICAgICAgICAgICAgfSAvKiBpZiB2YXJfcmVmIGlzIG9rICovCiAgICAgICAgICAgICAgIH0gLyogZm9yIGFsbCB0aGUgdmFycyAqLwogCi0gICAgICAgICAgICAgIGlmIChzbm1wX3NlbmQoc3MsIHBkdSkgPT0gMCkgeworCSAgICAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSAgICAgeworICAgICAgICAgICAgICBpZiAoc25tcF9zZXNzX3NlbmQoc3MsIHBkdSkgPT0gMCkKIAkgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgIH0KKwkgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChzbm1wX3NlbmQoc3MsIHBkdSkgPT0gMCkgCisJICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOworICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KFpFUk9fQlVUX1RSVUUsMCkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQ1MTEsMTUgKzQ2OTUsMTkgQEAKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybF9jYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnNlc3NfcmVmID0gbmV3UlZfaW5jKFN2UlYoc2Vzc19yZWYpKTsKIAorCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKyAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHN0YXR1cykpKTsgLyogcHVzaCB0aGUgcmVxaWQ/PyAqLwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X2NhdHB2KCplcnJfc3RyX3N2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJCQkJCXNubXBfcmV0dXJuX2VycihzcywgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnAsICplcnJfc3RyX3N2cCk7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOwogICAgICAgICAgICAgICAgICB9CiAJCSBnb3RvIGRvbmU7CkBAIC00NTcxLDcgKzQ3NTksOCBAQAogCWludAkJZmxhZwogCUNPREU6CiAJewotCSAgIHNubXBfc2V0X2R1bXBfcGFja2V0KGZsYWcpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCwgZmxhZyk7CiAJfQogCiAKQEAgLTQ3MTksNyArNDkwOCw4IEBACiAJaW50CXZhbAogCUNPREU6CiAJewotCSAgIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKHZhbCk7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NBVkVfTUlCX0RFU0NSUywgdmFsKTsKIAl9CiAKIHZvaWQKQEAgLTQ3NzUsMTEgKzQ5NjUsMTggQEAKIAl9CiAKIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE5vdGU6IHNzPShTbm1wU2Vzc2lvbiopTlVMTCBpcyBzbyAmU05NUDo6TWFpbkxvb3AoKSBjYW4gc3RpbGwgYmUgY2FsbGVkIAorIyB3aXRob3V0IGEgc2VzcyBoYW5kbGVyIGFyZ3VtZW50LCB0aGlzIHdheSBJJ20gbm90IGJyZWFraW5nIGFueW9uZSdzIG9sZCBjb2RlCisjCisjIHNlZSBNYWluTG9vcCgpIGluIFNOTVAucG0gZm9yIG1vcmUgZGV0YWlscworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkCi1zbm1wX21haW5fbG9vcCh0aW1lb3V0X3NlYyx0aW1lb3V0X3VzZWMscGVybF9jYWxsYmFjaykKK3NubXBfbWFpbl9sb29wKHRpbWVvdXRfc2VjLHRpbWVvdXRfdXNlYyxwZXJsX2NhbGxiYWNrLHNzPShTbm1wU2Vzc2lvbiopTlVMTCkKIAlpbnQgCXRpbWVvdXRfc2VjCiAJaW50IAl0aW1lb3V0X3VzZWMKIAlTViAqCXBlcmxfY2FsbGJhY2sKKwlTbm1wU2Vzc2lvbiAqc3MKIAlDT0RFOgogCXsKICAgICAgICAgaW50IG51bWZkcywgZmRfY291bnQ7CkBAIC00NzkxLDcgKzQ5ODgsNiBAQAogICAgICAgICBpbnQgYmxvY2s7CiAJU1YgKmNiOwogCi0KICAJbWFpbmxvb3BfZmluaXNoID0gMDsKIAogCWl0dnAgPSAmaW50ZXJ2YWw7CkBAIC00ODA5LDcgKzUwMDUsMTIgQEAKICAgICAgICAgICAgYmxvY2sgPSAxOwogICAgICAgICAgICB0dnAgPSAmdGltZV92YWw7CiAgICAgICAgICAgIHRpbWVyY2xlYXIodHZwKTsKKwkgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgIHsKKyAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHNzLCZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2spOworCSAgfSBlbHNlIHsKICAgICAgICAgICAgc25tcF9zZWxlY3RfaW5mbygmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrKTsKKwkgIH0KICAgICAgICAgICAgX19yZWNhbGNfdGltZW91dCh0dnAsY3R2cCxsdHZwLGl0dnAsJmJsb2NrKTsKICAgICAgICAgICAgIyBwcmludGYoInByZS1zZWxlY3Q6IG51bWZkcyA9ICVsZCwgYmxvY2sgPSAlbGRcbiIsIG51bWZkcywgYmxvY2spOwogICAgICAgICAgICBpZiAoYmxvY2sgPT0gMSkgdHZwID0gTlVMTDsgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCkBAIC00ODE4LDcgKzUwMTksMTIgQEAKICAgICAgICAgICAgaWYgKGZkX2NvdW50ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBFTlRFUjsKICAgICAgICAgICAgICAgICAgICAgICAgU0FWRVRNUFM7Ci0gICAgICAgICAgICAgIHNubXBfcmVhZCgmZmRzZXQpOworCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKwkJICBzbm1wX3Nlc3NfcmVhZChzcywgJmZkc2V0KTsKKwkJfSBlbHNlIHsKKyAgICAgICAgICAgICAgCSAgc25tcF9yZWFkKCZmZHNldCk7CisJCX0KICAgICAgICAgICAgICAgICAgICAgICAgRlJFRVRNUFM7CiAgICAgICAgICAgICAgICAgICAgICAgIExFQVZFOwogCkBAIC00ODI3LDcgKzUwMzMsMTIgQEAKIAkJIFNQQUdBSU47CiAJCSBFTlRFUjsKIAkJIFNBVkVUTVBTOworCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKwkJc25tcF9zZXNzX3RpbWVvdXQoIHNzICk7CisJCX0gZWxzZSB7IAogICAgICAgICAgICAgICAgICBzbm1wX3RpbWVvdXQoKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoIXRpbWVyaXNzZXQoY3R2cCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN2VFJVRShwZXJsX2NhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBzdl8ybW9ydGFsKHBlcmxfY2FsbGJhY2spOyAqLwpAQCAtNTA0NSw5ICs1MjU2LDcgQEAKIAkgICAgICAgICAgLyogd2UgbXVzdCBiZSBsb29raW5nIGF0IGRlc2NyaXB0aW9uICovCiAgICAgICAgICAgICAgICAgIHN2X3NldHB2KHJldCx0cC0+ZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnaSc6IC8qIGluZGV4ZXMgKi8KLSAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoImluZGV4ZXMiLCBrZXksIHN0cmxlbihrZXkpKSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgIGluZGV4X2F2ID0gbmV3QVYoKTsKKyAgICAgICAgICAgICAgY2FzZSAnaSc6IC8qIGluZGV4ZXMsIGltcGxpZWQgKi8KICAgICAgICAgICAgICAgICAgaWYgKHRwLT5hdWdtZW50cykgewogIAkgICAgICAgICAgICAgY2xlYXJfdHJlZV9mbGFncyhnZXRfdHJlZV9oZWFkKCkpOyAKICAgICAgICAgICAgICAgICAgICAgIHRwdG1wID0gZmluZF9iZXN0X3RyZWVfbm9kZSh0cC0+YXVnbWVudHMsIGdldF90cmVlX2hlYWQoKSwgTlVMTCk7CkBAIC01MDU3LDYgKzUyNjYsMTkgQEAKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHRwdG1wID0gdHA7CiAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCgiaW1wbGllZCIsIGtleSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgLyogb25seSB0aGUgbGFzdCBpbmRleCBjYW4gYmUgaW1wbGllZCAqLworICAgICAgICAgICAgICAgICAgICAgaW50IGlzaW1wbGllZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICBpZiAodHB0bXAgJiYgdHB0bXAtPmluZGV4ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaXA9dHB0bXAtPmluZGV4ZXM7IGlwLT5uZXh0OyBpcCA9IGlwLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW1wbGllZCA9IGlwLT5pc2ltcGxpZWQ7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdihyZXQsIGlzaW1wbGllZCk7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgiaW5kZXhlcyIsIGtleSwgc3RybGVuKGtleSkpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgaW5kZXhfYXYgPSBuZXdBVigpOwogICAgICAgICAgICAgICAgICBpZiAodHB0bXApCiAgICAgICAgICAgICAgICAgICAgICBmb3IoaXA9dHB0bXAtPmluZGV4ZXM7IGlwICE9IE5VTEw7IGlwID0gaXAtPm5leHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9wdXNoKGluZGV4X2F2LG5ld1NWcHYoKGlwLT5pbGFiZWwpLHN0cmxlbihpcC0+aWxhYmVsKSkpOwpAQCAtNTIzOCw2ICs1NDYwLDE0IEBACiAJU25tcFNlc3Npb24gKnNlc3NfcHRyCiAJQ09ERToKIAl7CisJaWYoc2Vzc19wdHIgIT0gTlVMTCkKKwl7CisgCSBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJIHsKKyAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKCBzZXNzX3B0ciApOworCSB9IGVsc2UgeyAKICAgICAgICAgICAgc25tcF9jbG9zZSggc2Vzc19wdHIgKTsKKwkgfQorCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM2NDJjCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfb2JqaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X3ZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmluZF9tb2R1bGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShnZXRfdGNfZGVzY3JpcHRpb24pCisKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC90L2FzeW5jLnQgYi9wZXJsL1NOTVAvdC9hc3luYy50CmluZGV4IGIxYzg2YzYuLmYzZmIzOGQgMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC90L2FzeW5jLnQKKysrIGIvcGVybC9TTk1QL3QvYXN5bmMudApAQCAtMTcsNyArMTcsNyBAQAogdXNlIHZhcnMgcXcoJGFnZW50X3BvcnQgJGNvbW0gJGFnZW50X2hvc3QpOwogCiBpZiAoJF5PID1+IC93aW4zMi9pKSB7Ci0gIHdhcm4gIldpbjMyIGRldGVjdGVkIC0gc2tpcHBpbmcgYXN5bmMgY2FsbHNcbiI7CisgIHdhcm4gIldpbjMyL1dpbjY0IGRldGVjdGVkIC0gc2tpcHBpbmcgYXN5bmMgY2FsbHNcbiI7CiAgIGV4aXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC90L2J1bGt3YWxrLnQgYi9wZXJsL1NOTVAvdC9idWxrd2Fsay50CmluZGV4IDYwZjEwYjUuLjJkMTNlN2IgMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC90L2J1bGt3YWxrLnQKKysrIGIvcGVybC9TTk1QL3QvYnVsa3dhbGsudApAQCAtMzI2LDcgKzMyNiw3IEBACiAJCQkgICAgWydpZlNwZWVkJ10sIFsnaWZEZXNjciddKTsJICMgUmVwZWF0ZWQgdmFyaWFibGVzLgogCiBpZiAoJF5PID1+IC93aW4zMi9pKSB7Ci0gIHdhcm4gIldpbjMyIGRldGVjdGVkIC0gc2tpcHBpbmcgYXN5bmMgY2FsbHNcbiI7CisgIHdhcm4gIldpbjMyL1dpbjY0IGRldGVjdGVkIC0gc2tpcHBpbmcgYXN5bmMgY2FsbHNcbiI7CiB9CiBlbHNlIHsKICAgQGxpc3QgPSAkczEtPmJ1bGt3YWxrKDIsIDE2LCAkdmFycywgWyBcJmFzeW5jX2NiMSwgJHZhcnMgXSApOwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL3Qvbm90aWZ5LnQgYi9wZXJsL1NOTVAvdC9ub3RpZnkudAppbmRleCA0MzQyMzdmLi43MjYwMGZhIDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvdC9ub3RpZnkudAorKysgYi9wZXJsL1NOTVAvdC9ub3RpZnkudApAQCAtMTAsNyArMTAsNyBAQAogICAgICRFTlZ7J01JQkRJUlMnfSA9ICcrJyAuIGFic19wYXRoKCIuLi8uLi9taWJzIik7CiB9CiB1c2UgVGVzdDsKLUJFR0lOIHsgJG4gPSAxMDsgcGxhbiB0ZXN0cyA9PiAkbiB9CitCRUdJTiB7ICRuID0gMTE7IHBsYW4gdGVzdHMgPT4gJG4gfQogdXNlIFNOTVA7CiB1c2UgdmFycyBxdygkYWdlbnRfcG9ydCAkY29tbSAkY29tbTIgJHRyYXBfcG9ydCAkYWdlbnRfaG9zdCAkc2VjX25hbWUgJHByaXZfcGFzcyAkYXV0aF9wYXNzICRiYWRfbmFtZSk7CiByZXF1aXJlICd0L3N0YXJ0YWdlbnQucGwnOwpAQCAtMjEsMjAgKzIxLDIwIEBACiBteSAkZ2VuZXJpYyA9ICdzcGVjaWZpYyc7CiAKICMgICAgICAgICAgICAgICAgICAgICAgICAgVjEgdHJhcCB0ZXN0aW5nCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAxICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAxICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEZpcmUgdXAgYSB0cmFwIHNlc3Npb24uCiBteSAkczEgPQogICAgIG5ldyBTTk1QOjpTZXNzaW9uIChEZXN0SG9zdD0+JGFnZW50X2hvc3QsVmVyc2lvbj0+MSxDb21tdW5pdHk9PiRjb21tLFJlbW90ZVBvcnQ9PiR0cmFwX3BvcnQpOwogb2soZGVmaW5lZCgkczEpKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDIgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAyICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHRlc3QgdjEgdHJhcAogaWYgKGRlZmluZWQoJHMxKSkgewogICAkcmVzID0gJHMxLT50cmFwKGVudGVycHJpc2UgPT4gJGVudGVycHJpc2UsIGFnZW50PT4kYWdlbnRfaG9zdCwgZ2VuZXJpYz0+JGdlbmVyaWMsW1tzeXNDb250YWN0LCAwLCAncm9vdEBsb2NhbGhvc3QnXSwgW3N5c0xvY2F0aW9uLCAwLCAnaGVyZSddXSApOwogfQogb2soJHJlcyA9fiAvXjAgYnV0IHRydWUvKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIDMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB0ZXN0IHdpdGggd3JvbmcgdmFyYmluZAogdW5kZWYgJHJlczsKIGlmIChkZWZpbmVkKCRzMSkpIHsKQEAgLTQ1LDEyICs0NSwxMiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgICAgICAgICAgICAgICAgICAgICAgVjIgdGVzdGluZwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgNCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDQgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRmlyZSB1cCBhIHYyIHRyYXAgc2Vzc2lvbi4KIG15ICRzMiA9CiAgICAgbmV3IFNOTVA6OlNlc3Npb24gKFZlcnNpb249PjIsIERlc3RIb3N0PT4kYWdlbnRfaG9zdCxDb21tdW5pdHk9PiRjb21tMixSZW1vdGVQb3J0PT4kdHJhcF9wb3J0KTsKIG9rKGRlZmluZWQoJHMyKSk7Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA1ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB0ZXN0IHYyIHRyYXAKIHVuZGVmICRyZXM7CiBpZiAoZGVmaW5lZCgkczIpKSB7CkBAIC01OCw3ICs1OCw3IEBACiAgICNwcmludCgicmVzIGlzICRyZXNcbiIpOwogfQogb2soJHJlcyA9fiAvXjAgYnV0IHRydWUvKTsKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA2ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA2ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIG5vIHRyYXBvaWQgYW5kIHVwdGltZSBnaXZlbi4gU2hvdWxkIHRha2UgZGVmYXVsdHMuLi4KIG15ICRyZXQ7CiBpZiAoZGVmaW5lZCgkczIpKSB7CkBAIC02NiwyNyArNjYsMzUgQEAKICAgI3ByaW50KCJyZXMgaXMgJHJldFxuIik7CiB9CiBvayhkZWZpbmVkKCRyZXQpKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBubyB2YXJiaW5kIGxpc3QgZ2l2ZW4uCit1bmRlZiAkcmVzOworaWYgKGRlZmluZWQoJHMyKSkgeworICAkcmVzID0gJHMyLT50cmFwKHRyYXBvaWQ9Pidjb2xkU3RhcnQnKTsKKyAgI3ByaW50KCJyZXMgaXMgJHJlc1xuIik7Cit9CitvayhkZWZpbmVkKCRyZXMpICYmICRyZXMgPX4gL14wIGJ1dCB0cnVlLyk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjICAgICAgICAgICAgICAgICAgICAgdjMgdGVzdGluZwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA3ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDggICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRmlyZSB1cCBhIHYzIHRyYXAgc2Vzc2lvbi4KIG15ICRzMyA9IG5ldyBTTk1QOjpTZXNzaW9uKFZlcnNpb249PjMsIERlc3RIb3N0PT4gJGFnZW50X2hvc3QsIFJlbW90ZVBvcnQ9PiR0cmFwX3BvcnQsIFNlY05hbWUgPT4gJHNlY19uYW1lKTsKIG9rKGRlZmluZWQoJHMzKSk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgOCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDkgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlmIChkZWZpbmVkKCRzMykpIHsKICAgJHJlcyA9ICRzMy0+aW5mb3JtKHVwdGltZT0+MTExLCB0cmFwb2lkPT4nY29sZFN0YXJ0JywgW1tzeXNDb250YWN0LCAwLCAncm9vdEBsb2NhbGhvc3QnXSwgW3N5c0xvY2F0aW9uLCAwLCAnaGVyZSddXSApOwogfQogb2soJHJlcyA9fiAvXjAgYnV0IHRydWUvKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMgOSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAxMCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGaXJlIHVwIGEgdjMgdHJhcCBzZXNzaW9uLgogJHMzID0gbmV3IFNOTVA6OlNlc3Npb24oVmVyc2lvbj0+MywgRGVzdEhvc3Q9PiAkYWdlbnRfaG9zdCwgUmVtb3RlUG9ydD0+JHRyYXBfcG9ydCwgU2VjTmFtZSA9PiAkc2VjX25hbWUsIFNlY0xldmVsID0+IGF1dGhQcml2LCBBdXRoUGFzcyA9PiAkYXV0aF9wYXNzLCBQcml2UGFzcyA9PiAkcHJpdl9wYXNzKTsKIG9rKGRlZmluZWQoJHMzKSk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMTAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIDExICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiB1bmRlZiAkcmVzOwogaWYgKGRlZmluZWQoJHMzKSkgewogICAgICRyZXMgPSAkczMtPmluZm9ybSh1cHRpbWU9PjExMSwgdHJhcG9pZD0+J2NvbGRTdGFydCcsIFtbc3lzQ29udGFjdCwgMCwgJ3Jvb3RAbG9jYWxob3N0J10sIFtzeXNMb2NhdGlvbiwgMCwgJ2hlcmUnXV0gKTsKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC90L3N0YXJ0YWdlbnQucGwgYi9wZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsCmluZGV4IDk1Y2QzOGUuLjNlOTJjMTIgMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC90L3N0YXJ0YWdlbnQucGwKKysrIGIvcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbApAQCAtMzksNDMgKzM5LDUwIEBACiAgIHJlcXVpcmUgV2luMzI6OlByb2Nlc3M7CiB9CiAKLXN1YiBzbm1wdGVzdF9jbGVhbnVwIHsKLSAgICBzbGVlcCAxOyAjIHN0cmFuZ2VseSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHBpZCBmaWxlcyB0byBhcHBlYXIgPz8KLSAgICBpZiAoKC1lICJ0L3NubXBkLnBpZCIpICYmICgtciAidC9zbm1wZC5waWQiKSkgewotICAgICAgICAjd2FybiAiXG5TdG9wcGluZyBhZ2VudHMgZm9yIHRlc3Qgc2NyaXB0ICQwXG4iOwotICAgICAgICAjIE1ha2luZyBzdXJlIHRoYXQgYW55IHJ1bm5pbmcgYWdlbnRzIGFyZSBraWxsZWQuCi0JIyB3YXJuICJraWxsaW5nIHNubXBkOiIsIGBjYXQgdC9zbm1wZC5waWRgLCAiXG4iOwotICAgICAgICBpZiAoJF5PICF+IC93aW4zMi9pKSB7Ci0gICAgICAgICAgc3lzdGVtICJraWxsIGBjYXQgdC9zbm1wZC5waWRgID4gL2Rldi9udWxsIDI+JjEiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIG9wZW4oSCwgIjx0L3NubXBkLnBpZCIpOwotICAgICAgICAgIG15ICRwaWQgPSAoPEg+KTsKLSAgICAgICAgICBjbG9zZSAoSCk7Ci0gICAgICAgICAgaWYgKCRwaWQgPiAwKSB7Ci0gICAgICAgICAgICBXaW4zMjo6UHJvY2Vzczo6S2lsbFByb2Nlc3MoJHBpZCwgMCkKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQl1bmxpbmsgInQvc25tcGQucGlkIjsKK3N1YiBydW5fYXN5bmMgeworICBteSAoJHBpZGZpbGUsICRjbWQsIEBhcmdzKSA9IEBfOworICBpZiAoLXIgIiRjbWQiIGFuZCAteCAiJGNtZCIpIHsKKyAgICBpZiAoJF5PID1+IC93aW4zMi9pKSB7CisgICAgICAkY21kID1+IHMvXC8vXFwvZzsKKyAgICAgIHN5c3RlbSAic3RhcnQgXCIkY21kXCIgL21pbiBjbWQgL2MgXCIkY21kIEBhcmdzIDI+JjFcIiI7CisgICAgfSBlbHNlIHsKKyAgICAgIHN5c3RlbSAiJGNtZCBAYXJncyAyPiYxIjsKICAgICB9Ci0gICAgaWYgKCgtZSAidC9zbm1wdHJhcGQucGlkIikgJiYgKC1yICJ0L3NubXB0cmFwZC5waWQiKSkgewotICAgICAgICAjIE1ha2luZyBzdXJlIHRoYXQgYW55IHJ1bm5pbmcgYWdlbnRzIGFyZSBraWxsZWQuCi0JIyB3YXJuICJraWxsaW5nIHNubXB0cmFwOiIsIGBjYXQgdC9zbm1wdHJhcGQucGlkYCwgIlxuIjsKLSAgICAgICAgaWYgKCReTyAhfiAvd2luMzIvaSkgewotICAgICAgICAgIHN5c3RlbSAia2lsbCBgY2F0IHQvc25tcHRyYXBkLnBpZGAgPiAvZGV2L251bGwgMj4mMSI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgb3BlbihILCAiPHQvc25tcHRyYXBkLnBpZCIpOwotICAgICAgICAgIG15ICRwaWQgPSAoPEg+KTsKLSAgICAgICAgICBjbG9zZSAoSCk7Ci0gICAgICAgICAgaWYgKCRwaWQgPiAwKSB7Ci0gICAgICAgICAgICBXaW4zMjo6UHJvY2Vzczo6S2lsbFByb2Nlc3MoJHBpZCwgMCkKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAKLQl1bmxpbmsgInQvc25tcHRyYXBkLnBpZCI7CisgICAgIyBXYWl0IGF0IG1vc3QgdGhyZWUgc2Vjb25kcyBmb3IgdGhlIHBpZCBmaWxlIHRvIGFwcGVhci4KKyAgICBmb3IgKCRpID0gMDsgKCRpIDwgMykgJiYgISAoLXIgIiRwaWRmaWxlIik7ICsrJGkpIHsKKyAgICAgIHNsZWVwIDE7CiAgICAgfQorICB9IGVsc2UgeworICAgIHdhcm4gIkNvdWxkbid0IHJ1biAkY21kXG4iOworICB9CiB9CisKK3N1YiBzbm1wdGVzdF9jbGVhbnVwIHsKKyAga2lsbF9ieV9waWRfZmlsZSgidC9zbm1wZC5waWQiKTsKKyAgdW5saW5rKCJ0L3NubXBkLnBpZCIpOworICBraWxsX2J5X3BpZF9maWxlKCJ0L3NubXB0cmFwZC5waWQiKTsKKyAgdW5saW5rKCJ0L3NubXB0cmFwZC5waWQiKTsKK30KKworc3ViIGtpbGxfYnlfcGlkX2ZpbGUgeworICBpZiAoKC1lICIkX1swXSIpICYmICgtciAiJF9bMF0iKSkgeworICAgIGlmICgkXk8gIX4gL3dpbjMyL2kpIHsKKyAgICAgICMgVW5peCBvciBXaW5kb3dzICsgQ3lnd2luLgorICAgICAgc3lzdGVtICJraWxsIGBjYXQgJF9bMF1gID4gL2Rldi9udWxsIDI+JjEiOworICAgIH0gZWxzZSB7CisgICAgICAjIFdpbmRvd3MgKyBNU1ZDIG9yIFdpbmRvd3MgKyBNaW5HVy4KKyAgICAgIG9wZW4oSCwgIjwkX1swXSIpOworICAgICAgbXkgJHBpZCA9ICg8SD4pOworICAgICAgY2xvc2UgKEgpOworICAgICAgaWYgKCRwaWQgPiAwKSB7CisgICAgICAgIFdpbjMyOjpQcm9jZXNzOjpLaWxsUHJvY2VzcygkcGlkLCAwKQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKyMgU3RvcCBhbnkgcHJvY2Vzc2VzIHN0YXJ0ZWQgZHVyaW5nIGEgcHJldmlvdXMgdGVzdC4KIHNubXB0ZXN0X2NsZWFudXAoKTsKIAogI09wZW4gdGhlIHNubXB0ZXN0LmNtZCBmaWxlIGFuZCBnZXQgdGhlIGluZm8KQEAgLTk4LDQ4ICsxMDUsMjEgQEAKICAgZGllICgiQ291bGQgbm90IHN0YXJ0IGFnZW50LiBDb3VsZG4ndCBmaW5kIHNubXB0ZXN0LmNtZCBmaWxlXG4iKTsKIH0KIAorIyBTdGFydCBzbm1wZCBhbmQgc25tcHRyYXBkLgorCiAjd2FybiAiXG5TdGFydGluZyBhZ2VudHMgZm9yIHRlc3Qgc2NyaXB0ICQwXG4iOwogCi1pZiAoJF5PICF+IC93aW4zMi9pKSB7Ci0gICMgVW5peAotICBpZiAoJHNubXBkX2NtZCkgewotICAgIGlmICgtciAkc25tcGRfY21kIGFuZCAteCAkc25tcGRfY21kKSB7Ci0gICAgICAkYmFzZWRpciA9IGBwd2RgOwotICAgICAgY2hvbXAgJGJhc2VkaXI7Ci0gICAgICBzeXN0ZW0gIiRzbm1wZF9jbWQgLXIgLUxmIHQvc25tcHRlc3QubG9nIC1NKyRtaWJkaXIgLUMgLWMgJGJhc2VkaXIvdC9zbm1wdGVzdC5jb25mIC1wICRiYXNlZGlyL3Qvc25tcGQucGlkICR7YWdlbnRfaG9zdH06JHthZ2VudF9wb3J0fSA+IC9kZXYvbnVsbCAyPiYxIjsKLSAgICB9IGVsc2UgewotICAgICAgd2FybigiQ291bGRuJ3QgcnVuIHNubXBkXG4iKTsKLSAgICB9Ci0gIH0KLSAgaWYgKCRzbm1wdHJhcGRfY21kKSB7Ci0gICAgaWYgKC1yICRzbm1wdHJhcGRfY21kIGFuZCAteCAkc25tcHRyYXBkX2NtZCkgewotICAgICAgc3lzdGVtICIkc25tcHRyYXBkX2NtZCAtcCB0L3NubXB0cmFwZC5waWQgLU0rJG1pYmRpciAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgLUMgJHthZ2VudF9ob3N0fToke3RyYXBfcG9ydH0gPiAvZGV2L251bGwgMj4mMSI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHdhcm4oIkNvdWxkbid0IHJ1biBzbm1wdHJhcGRcbiIpOwotICAgIH0KLSAgfQorbXkgJHNjcmlwdG5hbWUgPSAic25tcHRlc3QiOworaWYgKCQwID1+IC9edFtcL1xcXSguKilcLnQkLykgeworICAkc2NyaXB0bmFtZSA9ICQxOwogfQotZWxzZSB7Ci0gICMgV2luZG93cwotICBpZiAoJHNubXBkX2NtZCkgewotICAgICAgaWYgKC1yICRzbm1wZF9jbWQpIHsKLSAgICAgICAgI3ByaW50IFNUREVSUiAic3RhcnQgXCJTTk1QRFwiIC9taW4gXCIkc25tcGRfY21kXCIgLXIgLUxmIHQvc25tcHRlc3QubG9nIC1DIC1jIHQvc25tcHRlc3QuY29uZiAtcCB0L3NubXBkLnBpZCAkYWdlbnRfcG9ydCA+IG51bFxuIjsKLSAgICAgIHN5c3RlbSAic3RhcnQgXCJTTk1QRFwiIC9taW4gXCIkc25tcGRfY21kXCIgLXIgLUxmIHQvc25tcHRlc3QubG9nIC1DIC1jIHQvc25tcHRlc3QuY29uZiAtcCB0L3NubXBkLnBpZCAkYWdlbnRfcG9ydCA+IG51bCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHdhcm4oIkNvdWxkbid0IHJ1biBzbm1wZFxuIik7Ci0gICAgfQotICB9Ci0gIGlmICgkc25tcHRyYXBkX2NtZCkgewotICAgIGlmICgtciAkc25tcHRyYXBkX2NtZCkgewotICAgICAgI3ByaW50IFNUREVSUiAic3RhcnQgL21pbiBcIlNOTVBUUkFQRFwiIFwiJHNubXB0cmFwZF9jbWRcIiAtTGYgdC9zbm1wdHJhcGR0ZXN0LmxvZyAtcCB0L3NubXB0cmFwZC5waWQgLUMgLWMgdC9zbm1wdGVzdC5jb25mICR0cmFwX3BvcnQgPiBudWxcbiI7Ci0gICAgICBzeXN0ZW0gInN0YXJ0IC9taW4gXCJTTk1QVFJBUERcIiBcIiRzbm1wdHJhcGRfY21kXCIgLUxmIHQvc25tcHRyYXBkdGVzdC5sb2cgLXAgdC9zbm1wdHJhcGQucGlkIC1DIC1jIHQvc25tcHRlc3QuY29uZiAkdHJhcF9wb3J0ID4gbnVsIjsKLSAgICB9IGVsc2UgewotICAgICAgd2FybigiQ291bGRuJ3QgcnVuIHNubXB0cmFwZFxuIik7Ci0gICAgfQotICB9Ci0gIHNsZWVwIDI7ICMgR2l2ZSBwcm9ncmFtcyB0aW1lIHRvIHN0YXJ0CiAKLX0gCitpZiAoJHNubXBkX2NtZCkgeworICBydW5fYXN5bmMoInQvc25tcGQucGlkIiwgIiRzbm1wZF9jbWQiLCAiLXIgLWQgLUxmIHQvc25tcGQtJHNjcmlwdG5hbWUubG9nIC1NKyRtaWJkaXIgLUMgLWMgdC9zbm1wdGVzdC5jb25mIC1wIHQvc25tcGQucGlkICR7YWdlbnRfaG9zdH06JHthZ2VudF9wb3J0fSA+dC9zbm1wZC0kc2NyaXB0bmFtZS5zdGRlcnIiKTsKK30KK2lmICgkc25tcHRyYXBkX2NtZCkgeworICBydW5fYXN5bmMoInQvc25tcHRyYXBkLnBpZCIsICIkc25tcHRyYXBkX2NtZCIsICItZCAtTGYgdC9zbm1wdHJhcGQtJHNjcmlwdG5hbWUubG9nIC1wIHQvc25tcHRyYXBkLnBpZCAtTSskbWliZGlyIC1DIC1jIHQvc25tcHRlc3QuY29uZiAtQyAke2FnZW50X2hvc3R9OiR7dHJhcF9wb3J0fSA+dC9zbm1wdHJhcGQtJHNjcmlwdG5hbWUuc3RkZXJyIik7Cit9CiAKIDE7CiAKZGlmZiAtLWdpdCBhL3BlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMIGIvcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwKaW5kZXggNWM5NDYzYS4uODc0ZWUyMSAxMDA2NDQKLS0tIGEvcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwKQEAgLTU3LDE0ICs1NywxMyBAQAogICAgIH0KIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CiAgICAgICAkYWdlbnRfbGlua19saWIgPSAnbmV0c25tcGFnZW50JzsKLSAgICAgICRoZWxwZXJzX2xpbmtfbGliID0gJ25ldHNubXBoZWxwZXJzJzsKICAgICAgICRtaWJzX2xpbmtfbGliID0gJ25ldHNubXBtaWJzJzsKICAgICAgICR0cmFwZF9saW5rX2xpYiA9ICduZXRzbm1wdHJhcGQnOwogCkBAIC03Niw3ICs3NSw3IEBACiAgICAgICB9CiAgICAgCiAgICAgICBpZiAobGMoJG9wdHMtPnsnaW5zb3VyY2UnfSkgZXEgInRydWUiKSB7Ci0JJFBhcmFtc3snTElCUyd9ID0gIi1MJGJhc2VkaXJcXHdpbjMyXFwkbGliX2RpclxcIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkaGVscGVyc19saW5rX2xpYiAiIC4KKwkkUGFyYW1zeydMSUJTJ30gPSAiLUwkYmFzZWRpclxcd2luMzJcXCRsaWJfZGlyXFwgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAiIC4KICAgICAgICAgICAgICAgICAiLWwkbWlic19saW5rX2xpYiAtbCR0cmFwZF9saW5rX2xpYiAiOwogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC0xMDAsNyArOTksNyBAQAogCSAgICAkTGliRGlyc1swXSA9fiBzL1xcJC8vOwogCSAgfQogCX0KLQkkUGFyYW1ze0xJQlN9ID0gIi1MJExpYkRpciAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJGhlbHBlcnNfbGlua19saWIgLWwkbWlic19saW5rX2xpYiAtbCR0cmFwZF9saW5rX2xpYiAiOworCSRQYXJhbXN7TElCU30gPSAiLUwkTGliRGlyIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkbWlic19saW5rX2xpYiAtbCR0cmFwZF9saW5rX2xpYiAiOwogICAgICAgfQogCiAgICAgICAkUGFyYW1zeydJTkMnfSA9ICItSSRiYXNlZGlyXFxpbmNsdWRlXFwgLUkkYmFzZWRpclxcaW5jbHVkZVxcbmV0LXNubXBcXCAtSSRiYXNlZGlyXFx3aW4zMlxcICI7CkBAIC0xMDgsNyArMTA3LDcgQEAKICAgICBlbHNlIHsKIAkkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CiAJJFBhcmFtc3snTERETEZMQUdTJ30gPSAiJENvbmZpZ3tsZGRsZmxhZ3N9ICIgLiBgJG9wdHMtPnsnbnNjb25maWcnfSAtLWxkZmxhZ3NgOwotCSRQYXJhbXN7J0xJQlMnfSA9ICctbG5ldHNubXB0cmFwZCAtbG5ldHNubXBhZ2VudCAtbG5ldHNubXAnOworCSRQYXJhbXN7J0xJQlMnfSA9ICctbG5ldHNubXB0cmFwZCAnIC4gYCRvcHRzLT57J25zY29uZmlnJ30gLS1iYXNlLWFnZW50LWxpYnNgOwogCWNob21wKCRQYXJhbXN7J0xJQlMnfSk7CiAJaWYgKCEkRU5WeydORVRTTk1QX0NDRkxBR1MnfSkgewogCSAgICAkUGFyYW1zeydDQ0ZMQUdTJ30gPSBgJG9wdHMtPnsnbnNjb25maWcnfSAtLWNmbGFnc2A7CkBAIC0xMTksNyArMTE4LDcgQEAKIAl9CiAKIAlpZiAobGMoJG9wdHMtPnsnaW5zb3VyY2UnfSkgZXEgInRydWUiKSB7Ci0gICAgICAgICAgICAkUGFyYW1zeydMSUJTJ30gPSAiLUwuLi8uLi9hcHBzLy5saWJzIC1MLi4vLi4vYXBwcyAtTC4uLy4uL2FnZW50Ly5saWJzIC1MLi4vLi4vYWdlbnQgLUwuLi8uLi9hZ2VudC9oZWxwZXJzLy5saWJzIC1MLi4vLi4vYWdlbnQvaGVscGVycyAtTC4uLy4uL3NubXBsaWIvLmxpYnMgLUwuLi8uLi9zbm1wbGliICIgLiAkUGFyYW1zeydMSUJTJ307CisgICAgICAgICAgICAkUGFyYW1zeydMSUJTJ30gPSAiLUwuLi8uLi9hcHBzLy5saWJzIC1MLi4vLi4vYXBwcyAtTC4uLy4uL2FnZW50Ly5saWJzIC1MLi4vLi4vYWdlbnQgLUwuLi8uLi9zbm1wbGliLy5saWJzIC1MLi4vLi4vc25tcGxpYiAiIC4gJFBhcmFtc3snTElCUyd9OwogCSAgICAkUGFyYW1zeydDQ0ZMQUdTJ30gPSAiLUkuLi8uLi9pbmNsdWRlICIgLiAkUGFyYW1zeydDQ0ZMQUdTJ307CiAJfSBlbHNlIHsKICAgICAgICAgICAgICRQYXJhbXN7J0xJQlMnfSA9IGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tbGliZGlyYCAuICIgJFBhcmFtc3snTElCUyd9IjsKQEAgLTE0Miw3ICsxNDEsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMjI1LDcgKzIyNCw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSBiL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbQppbmRleCAzYTU0MjVkLi44NWEwNDFhIDEwMDY0NAotLS0gYS9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KKysrIGIvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtCkBAIC00Nyw3ICs0Nyw3IEBACiAJTkVUU05NUFRSQVBEX1BSRV9IQU5ETEVSCiApOwogCi0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogIyBzdWIgbmV3IHsKICMgICAgIG15ICR0eXBlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMgYi9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMKaW5kZXggODcxM2VmZC4uYTRmYzEzNiAxMDA2NDQKLS0tIGEvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzCisrKyBiL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICBjaGFyICp0c3RyID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwogICAgICAgICBTVE9SRVBEVXMoInJlY2VpdmVkZnJvbSIsIHRzdHIpOwotICAgICAgICBmcmVlKHRzdHIpOworICAgICAgICBuZXRzbm1wX2ZyZWUodHN0cik7CiAgICAgfQogCiAKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIGZvcih2YiA9IHBkdS0+dmFyaWFibGVzOyB2YjsgdmIgPSB2Yi0+bmV4dF92YXJpYWJsZSkgewogCiAgICAgICAgIC8qIGdldCB0aGUgb2lkICovCi0gICAgICAgIG8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICAgICAgbyA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICAgICAgby0+bmFtZSA9IG8tPm5hbWVidWY7CiAgICAgICAgIG8tPmxlbiA9IHZiLT5uYW1lX2xlbmd0aDsKICAgICAgICAgbWVtY3B5KG8tPm5hbWUsIHZiLT5uYW1lLCB2Yi0+bmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CkBAIC0xNzgsNyArMTc4LDcgQEAKIAogICAgICAgICBhdl9wdXNoKHZiYSx0bXBhcnJheVtpXSk7CiAgICAgICAgIGF2X3B1c2godmJhLG5ld1NWcHZuKChjaGFyICopIG91dGJ1Ziwgb29fbGVuKSk7Ci0gICAgICAgIGZyZWUob3V0YnVmKTsKKyAgICAgICAgbmV0c25tcF9mcmVlKG91dGJ1Zik7CiAgICAgICAgIGF2X3B1c2godmJhLG5ld1NWaXYodmItPnR5cGUpKTsKICAgICAgICAgYXZfcHVzaCh2YXJiaW5kcywgKFNWICopIG5ld1JWX25vaW5jKChTViAqKSB2YmEpKTsKICAgICB9CkBAIC0yMTQsNyArMjE0LDcgQEAKIAlTViAqcnYgPSBQT1BzOwogCiAJaWYgKFN2VFlQRShydikgIT0gU1Z0X0lWKSB7Ci0JICBzbm1wX2xvZyhMT0dfV0FSTklORywgIiBwZXJsIGNhbGxiYWNrIGZ1bmN0aW9uICVwIHJldHVybmVkIGEgc2NhbGFyIG9mIHR5cGUgJWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLCBhc3N1bWluZyAlZCAoTkVUU05NUFRSQVBEX0hBTkRMRVJfT0spXG4iLCBwY2FsbGJhY2ssIFN2VFlQRShydiksIE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LKTsKKwkgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiIHBlcmwgY2FsbGJhY2sgZnVuY3Rpb24gJXAgcmV0dXJuZWQgYSBzY2FsYXIgb2YgdHlwZSAlbHUgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLCBhc3N1bWluZyAlZCAoTkVUU05NUFRSQVBEX0hBTkRMRVJfT0spXG4iLCBwY2FsbGJhY2ssICh1bnNpZ25lZCBsb25nKVN2VFlQRShydiksIE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LKTsKIAl9CiAJZWxzZSB7CiAJICBpbnQgcnZpID0gKElWKVN2SVZ4KHJ2KTsKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgY2JfZGF0YSA9IFNOTVBfTUFMTE9DX1RZUEVERUYodHJhcGRfY2JfZGF0YSk7CisgICAgICAgICAgICAgICAgY2JfZGF0YSA9IG1hbGxvYyhzaXplb2YodHJhcGRfY2JfZGF0YSkpOwogICAgICAgICAgICAgICAgIGNiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxjYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgaGFuZGxlci0+aGFuZGxlcl9kYXRhID0gY2JfZGF0YTsKICAgICAgICAgICAgICAgICBoYW5kbGVyLT5hdXRodHlwZXMgPSAoMSA8PCBWQUNNX1ZJRVdfRVhFQ1VURSk7CmRpZmYgLS1naXQgYS9wZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzMxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobWVtb3J5X2ZyZWUpCisKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvTWFrZWZpbGUuUEwgYi9wZXJsL2FnZW50L01ha2VmaWxlLlBMCmluZGV4IGI0YjM1OGEuLjRmN2JlZTMgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9hZ2VudC9NYWtlZmlsZS5QTApAQCAtMzAsMTQgKzMwLDEzIEBACiAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwogICAgICAgJGFnZW50X2xpbmtfbGliID0gJ25ldHNubXBhZ2VudCc7Ci0gICAgICAkaGVscGVyc19saW5rX2xpYiA9ICduZXRzbm1waGVscGVycyc7CiAgICAgICAkbWlic19saW5rX2xpYiA9ICduZXRzbm1wbWlicyc7CiAKICAgICAgIGlmIChsYygkb3B0cy0+eydkZWJ1Zyd9KSBlcSAidHJ1ZSIpIHsKQEAgLTQ4LDcgKzQ3LDcgQEAKICAgICAgIH0KICAgICAKICAgICAgIGlmIChsYygkb3B0cy0+eydpbnNvdXJjZSd9KSBlcSAidHJ1ZSIpIHsKLQkkUGFyYW1zeydMSUJTJ30gPSAiLUwkYmFzZWRpclxcd2luMzJcXCRsaWJfZGlyXFwgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRoZWxwZXJzX2xpbmtfbGliICIgLgorCSRQYXJhbXN7J0xJQlMnfSA9ICItTCRiYXNlZGlyXFx3aW4zMlxcJGxpYl9kaXJcXCAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliICIgLgogICAgICAgICAgICAgICAgICItbCRtaWJzX2xpbmtfbGliIjsKICAgICAgIH0KICAgICAgIGVsc2UgewpAQCAtNzIsNyArNzEsNyBAQAogCSAgICAkTGliRGlyc1swXSA9fiBzL1xcJC8vOwogCSAgfQogCX0KLQkkUGFyYW1ze0xJQlN9ID0gIi1MJExpYkRpciAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJGhlbHBlcnNfbGlua19saWIgLWwkbWlic19saW5rX2xpYiI7CisJJFBhcmFtc3tMSUJTfSA9ICItTCRMaWJEaXIgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRtaWJzX2xpbmtfbGliIjsKICAgICAgIH0KIAogICAgICAgJFBhcmFtc3snSU5DJ30gPSAiLUkkYmFzZWRpclxcaW5jbHVkZVxcIC1JJGJhc2VkaXJcXGluY2x1ZGVcXG5ldC1zbm1wXFwgLUkkYmFzZWRpclxcd2luMzJcXCAiOwpAQCAtODcsNyArODYsNyBAQAogCSRQYXJhbXN7J0NDRkxBR1MnfSAuPSAiICIgLiAkQ29uZmlneydjY2ZsYWdzJ307CiAgICAgICAgICRsaWJfdmVyc2lvbiA9IGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tdmVyc2lvbmA7CiAJaWYgKGxjKCRvcHRzLT57J2luc291cmNlJ30pIGVxICJ0cnVlIikgewotCSAgICAkUGFyYW1zeydMSUJTJ30gPSAiLUwuLi8uLi9zbm1wbGliLy5saWJzIC1MLi4vLi4vc25tcGxpYi8gLUwuLi8uLi9hZ2VudC8ubGlicyAtTC4uLy4uL2FnZW50LyAtTC4uLy4uL2FnZW50L2hlbHBlcnMvLmxpYnMgLUwuLi8uLi9hZ2VudC9oZWxwZXJzLyAiIC4gJFBhcmFtc3snTElCUyd9OworCSAgICAkUGFyYW1zeydMSUJTJ30gPSAiLUwuLi8uLi9zbm1wbGliLy5saWJzIC1MLi4vLi4vc25tcGxpYi8gLUwuLi8uLi9hZ2VudC8ubGlicyAtTC4uLy4uL2FnZW50LyAiIC4gJFBhcmFtc3snTElCUyd9OwogCSAgICAkUGFyYW1zeydDQ0ZMQUdTJ30gPSAiLUkuLi8uLi9pbmNsdWRlICIgLiAkUGFyYW1zeydDQ0ZMQUdTJ307CiAjCX0gZWxzZSB7CiAJICAgICRQYXJhbXN7J0xJQlMnfSA9IGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tbGliZGlyYCAuICRQYXJhbXN7J0xJQlMnfTsKQEAgLTEwOSw3ICsxMDgsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTkyLDcgKzE5MSw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCBiL3BlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTAppbmRleCAzYTRmMjAwLi40ODgxNWI2IDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMCkBAIC0yOSw5ICsyOSw5IEBACiAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSBiL3BlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtCmluZGV4IGRhOGM3N2UuLjAzZjU0ZDkgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtCisrKyBiL3BlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtCkBAIC0yNiw3ICsyNiw3IEBACiBASVNBICAgICAgID0gcXcoRXhwb3J0ZXIgZ2V0TGVhZik7CiBARVhQT1JUICAgID0gcXcocmVnaXN0ZXJBZ2VudCBnZXRPaWRFbGVtZW50IHNldE9pZEVsZW1lbnQpOwogQEVYUE9SVF9PSyA9IHF3KCk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvYWdlbnQucG0gYi9wZXJsL2FnZW50L2FnZW50LnBtCmluZGV4IDYxOGEyYzYuLjQ2NTAwZmYgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvYWdlbnQucG0KKysrIGIvcGVybC9hZ2VudC9hZ2VudC5wbQpAQCAtODcsNyArODcsNyBAQAogCVNOTVBfRVJSX0FVVEhPUklaQVRJT05FUlJPUgogCVNOTVBfRVJSX05PVFdSSVRBQkxFCiApOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHN1YiBBVVRPTE9BRCB7CiAgICAgIyBUaGlzIEFVVE9MT0FEIGlzIHVzZWQgdG8gJ2F1dG9sb2FkJyBjb25zdGFudHMgZnJvbSB0aGUgY29uc3RhbnQoKQpAQCAtMTk5LDYgKzE5OSwxMiBAQAogICAgIF9fYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoJGJsb2NraW5nIHx8IDApOwogfQogCitzdWIgdXB0aW1lIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgICRzZWxmLT5tYXliZV9pbml0X2xpYigpOworICAgIHJldHVybiBfdXB0aW1lKCk7Cit9CisKIGJvb3RzdHJhcCBOZXRTTk1QOjphZ2VudCAkVkVSU0lPTjsKIAogIyBQcmVsb2FkZWQgbWV0aG9kcyBnbyBoZXJlLgpAQCAtNDkwLDYgKzQ5NiwyMCBAQAogCiAJJHJlcXVlc3QtPnNldFJlcGVhdCg1KTsKIAorICAgIGdldFNvdXJjZUlwICgpCisKKwlHZXRzIHRoZSBJUHY0IGFkZHJlc3Mgb2YgdGhlIGRldmljZSBtYWtpbmcgdGhlIHJlcXVlc3QgdG8gdGhlIGhhbmRsZXIuCisKKwl1c2UgU29ja2V0OworCXByaW50ICJTb3VyY2U6ICIsIGluZXRfbnRvYSgkcmVxdWVzdC0+Z2V0U291cmNlSXAoKSksICJcbiI7CisKKyAgICBnZXREZXN0SXAgKCkKKworCUdldHMgdGhlIElQdjQgYWRkcmVzcyBvZiB0aGUgZGVzdGluYXRpb24gdGhhdCB0aGUgcmVxdWVzdCB3YXMgc2VudCB0by4KKworCXVzZSBTb2NrZXQ7CisJcHJpbnQgIkRlc3RpbmF0aW9uOiAiLCBpbmV0X250b2EoJHJlcXVlc3QtPmdldERlc3RJcCgpKSwgIlxuIjsKKwogPWhlYWQxIE1PREVTCiAKIAlNT0RFX0dFVApkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9hZ2VudC54cyBiL3BlcmwvYWdlbnQvYWdlbnQueHMKaW5kZXggNTYwNmMzYy4uYzdiNWQ5YSAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9hZ2VudC54cworKysgYi9wZXJsL2FnZW50L2FnZW50LnhzCkBAIC0xOSw2ICsxOSwxMiBAQAogCiB0eXBlZGVmIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKk5ldFNOTVBfX2FnZW50X19uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uOwogCisvKgorICogbmVlZHMgdG8gYmUgaW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBzbm1wbGliL3NubXBVRFBEb21haW4uYworICogYW5kIHNubXBsaWIvc25tcFRDUERvbWFpbi5jCisgKi8KK3R5cGVkZWYgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciBuZXRzbm1wX3VkcF9hZGRyX3BhaXI7CisKIHR5cGVkZWYgc3RydWN0IGhhbmRsZXJfY2JfZGF0YV9zIHsKICAgIFNWICpwZXJsX2NiOwogfSBoYW5kbGVyX2NiX2RhdGE7CkBAIC01NCwxMiArNjAsMTQgQEAKIHN0YXRpYyBpbnQgY29uc3RhbnRfTU9ERV9TRVRfUihkb3VibGUgKnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBpbnQgbGVuKQogewogICAgIHN3aXRjaCAobGVuID49IDE2ID8gbmFtZVsxNl0gOiAtMSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlICcxJzoKIAlURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBNT0RFX1NFVF9SRVNFUlZFMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJzInOgogCVRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIE1PREVfU0VUX1JFU0VSVkUyKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBFSU5WQUw7CiB9CkBAIC0xMTUsNiArMTIzLDcgQEAKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKIAogICAgIHN3aXRjaCAobGVuID49IDkgPyBuYW1lWzldIDogLTEpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSAnQSc6CiAgICAgICAgIFRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIE1PREVfU0VUX0FDVElPTik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI3LDExICsxMzYsMTIgQEAKICAgICBjYXNlICdGJzoKICAgICAgICAgVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgTU9ERV9TRVRfRlJFRSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1InOgotICAgICAgICByZXR1cm4gY29uc3RhbnRfTU9ERV9TRVRfUih2YWx1ZSwgbmFtZSwgbGVuKTsKICAgICBjYXNlICdVJzoKICAgICAgICAgVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgTU9ERV9TRVRfVU5ETyk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIGNhc2UgJ1InOgorICAgICAgICByZXR1cm4gY29uc3RhbnRfTU9ERV9TRVRfUih2YWx1ZSwgbmFtZSwgbGVuKTsKICAgICB9CiAgICAgcmV0dXJuIEVJTlZBTDsKIH0KQEAgLTIyOCw2ICsyMzgsMTMgQEAKICAgICBPVVRQVVQ6CiAJUkVUVkFMCiAKK2ludAorX3VwdGltZSgpCisgICAgQ09ERToKKyAgICAgICAgUkVUVkFMID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisgICAgT1VUUFVUOgorCVJFVFZBTAorCiB2b2lkCiBpbml0X21pYigpCiAgICAgQ09ERToKQEAgLTIzOCw2ICsyNTUsMTEgQEAKIGludAogaW5pdF9hZ2VudChuYW1lKQogICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgIENPREU6CisgICAgICAgIFNPQ0tfU1RBUlRVUDsKKyAgICAgICAgUkVUVkFMID0gaW5pdF9hZ2VudChuYW1lKTsKKyAgICBPVVRQVVQ6CisgICAgICAgIFJFVFZBTAogCiB2b2lkCiBpbml0X3NubXAobmFtZSkKQEAgLTI3Myw3ICsyOTUsNyBAQAogICAgICAgICBpZiAoMCkKICAgICAgICAgICAgIHByaW50ZigibWUgPSAlcFxuIiwgbWUpOwogICAgICAgICBzdHJpbmdwdHIgPSBTdlBWKHZhbHVlLCBzdHJpbmdsZW4pOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBzdHJpbmdwdHIgKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIiwgc3RyaW5ncHRyICk7CiAgICAgfQogCiAKQEAgLTMxMyw3ICszMzUsMTQgQEAKIHZvaWQKIG5zYWhyX0RFU1RST1kocmVnaW5mbykKIAluZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvCisgICAgUFJFSU5JVDoKKyAgICAgICAgaGFuZGxlcl9jYl9kYXRhICpjYl9kYXRhOwogICAgIENPREU6CisgICAgICAgIGlmIChyZWdpbmZvICYmIHJlZ2luZm8tPmhhbmRsZXIgJiYgcmVnaW5mby0+aGFuZGxlci0+bXl2b2lkKSB7CisJICAgIGNiX2RhdGEgPSAoaGFuZGxlcl9jYl9kYXRhICopIChyZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQpOworCSAgICBTdlJFRkNOVF9kZWMoY2JfZGF0YS0+cGVybF9jYik7CisJICAgIGZyZWUoY2JfZGF0YSk7CisgICAgICAgIH0KIAluZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnaW5mbyk7CiAKIGludApAQCAtMzY0LDcgKzM5Myw3IEBACiAgICAgICAgIFBVU0hNQVJLKFNQKTsKICAgICAgICAgcmVnaW5mbyA9IChuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICopIFN2SVYoU3ZSVihtZSkpOwogCi0gICAgICAgIG8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICAgICAgbyA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICAgICAgby0+bmFtZSA9IG8tPm5hbWVidWY7CiAgICAgICAgIG8tPmxlbiA9IHJlZ2luZm8tPnJvb3RvaWRfbGVuOwogICAgICAgICBtZW1jcHkoby0+bmFtZSwgcmVnaW5mby0+cm9vdG9pZCwKQEAgLTQwMyw3ICs0MzIsNyBAQAogICAgICAgICBQVVNITUFSSyhTUCk7CiAgICAgICAgIHJlcXVlc3QgPSAobmV0c25tcF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7CiAKLSAgICAgICAgbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgICAgICBvID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgICAgICBvLT5uYW1lID0gby0+bmFtZWJ1ZjsKICAgICAgICAgby0+bGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aDsKICAgICAgICAgbWVtY3B5KG8tPm5hbWUsIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSwKQEAgLTQzMyw3ICs0NjIsNyBAQAogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKICAgICAgICAgQ09ERToKICAgICAgICAgcmVxdWVzdCA9IChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKLSAgICAgICAgUkVUVkFMID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgICAgIFJFVFZBTCA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICAgICAgUkVUVkFMLT5uYW1lID0gUkVUVkFMLT5uYW1lYnVmOwogICAgICAgICBSRVRWQUwtPmxlbiA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGg7CiAgICAgICAgIG1lbWNweShSRVRWQUwtPm5hbWUsIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSwKQEAgLTQ2MywxOSArNDkyLDE5IEBACiAgICAgICAgIHJlcXVlc3QgPSAobmV0c25tcF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7CiAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dHlwZT1uZXd2YWx1ZTsKIAotY2hhciAqCitTViAqCiBuYXJpX2dldFZhbHVlKG1lKQogICAgICAgICBTViAqbWU7CiAgICAgUFJFSU5JVDoKLSAgICAgICAgdV9jaGFyIGJ1ZlsxMDI0XSA7Ci0gICAgICAgIHVfY2hhciAqb2lkYnVmID0gYnVmIDsKLSAgICAgICAgc2l6ZV90IG9iX2xlbiA9IDEwMjQsIG9vX2xlbiA9IDA7CisgICAgICAgIGNoYXIgKm91dGJ1ZiA9IE5VTEw7CisgICAgICAgIHNpemVfdCBvYl9sZW4gPSAwLCBvb19sZW4gPSAwOwogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKICAgICBDT0RFOgogICAgICAgICByZXF1ZXN0ID0gKG5ldHNubXBfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOwotCXNwcmludF9yZWFsbG9jX2J5X3R5cGUoJm9pZGJ1ZiwgJm9iX2xlbiwgJm9vX2xlbiwgMCwKKwlzcHJpbnRfcmVhbGxvY19ieV90eXBlKCh1X2NoYXIgKiopICZvdXRidWYsICZvYl9sZW4sICZvb19sZW4sIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCAwLCAwLCAwKTsKLSAgICAgICAgUkVUVkFMID0gKGNoYXIgKikgb2lkYnVmOyAvKiBtZW0gbGVhayAqLworICAgICAgICBSRVRWQUwgPSBuZXdTVnB2KG91dGJ1ZiwgMCk7CisJbmV0c25tcF9mcmVlKG91dGJ1Zik7CiAgICAgT1VUUFVUOgogICAgICAgICBSRVRWQUwKIApAQCAtNjIwLDggKzY0OSw4IEBACiAJCSAgYnJlYWs7CiAJICAgICAgfQogCSAgICAgIGVsc2UgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lOVEVHRVI6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24taW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSU5URUdFUjogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTY1Niw4ICs2ODUsOCBAQAogCQkgIGJyZWFrOwogCSAgICAgIH0KIAkgICAgICBlbHNlIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi11bnNpZ25lZC1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9VTlNJR05FRC9BU05fQ09VTlRFUi9BU05fVElNRVRJQ0tTOiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXVuc2lnbmVkLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX1VOU0lHTkVEL0FTTl9DT1VOVEVSL0FTTl9USU1FVElDS1M6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwogCQlicmVhazsKIAkgICAgICB9CkBAIC02NjcsNDcgKzY5Niw0MCBAQAogCSAgICAgIGlmICgoU3ZUWVBFKHZhbHVlKSA9PSBTVnRfSVYpIHx8IChTdlRZUEUodmFsdWUpID09IFNWdF9QVk1HKSkgewogCQkgIC8qIEdvb2QgLSBnb3QgYSByZWFsIG9uZSAob3IgYSBibGVzc2VkIHNjYWxhciB3aGljaCB3ZSBoYXZlIHRvIGhvcGUgd2lsbCB0dXJuIG91dCBPSykgKi8KIAkJICB1bGx0bXAgPSBTdklWKHZhbHVlKTsKLQkJICBjNjQuaGlnaCA9ICh1aW50MzJfdCkodWxsdG1wID4+IDMyKTsKLQkJICBjNjQubG93ICA9ICh1aW50MzJfdCl1bGx0bXA7Ci0gICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCAodV9jaGFyKXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZjNjQsIHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KSk7CiAJCSAgUkVUVkFMID0gMTsKLQkJICBicmVhazsKIAkgICAgICB9CiAJICAgICAgZWxzZSBpZiAoU3ZQT0twKHZhbHVlKSkgewogCSAgICAgICAgICAvKiBNaWdodCBiZSBPSyAtIGdvdCBhIHN0cmluZywgc28gdHJ5IHRvIGNvbnZlcnQgaXQsIGFsbG93aW5nIGJhc2UgMTAsIG9jdGFsLCBhbmQgaGV4IGZvcm1zICovCiAJICAgICAgICAgIHN0cmluZ3B0ciA9IFN2UFYodmFsdWUsIHN0cmluZ2xlbik7Ci0jaWYgZGVmaW5lZChXSU4zMikKLQkJICB1bGx0bXAgPSBzdHJ0b3VsKCAgc3RyaW5ncHRyLCBOVUxMLCAwICk7Ci0jZWxzZQorCSAgICAgICAgICBlcnJubyA9IDA7CiAJCSAgdWxsdG1wID0gc3RydG91bGwoIHN0cmluZ3B0ciwgTlVMTCwgMCApOwotI2VuZGlmCi0JCSAgaWYgKGVycm5vID09IEVJTlZBTCkgewotCQkgIAlzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIG51bWJlciBpbiBzZXRWYWx1ZTogJyVzJyIsIHN0cmluZ3B0cik7Ci0JCQlSRVRWQUwgPSAwOwotCQkJYnJlYWs7Ci0JCSAgfQorCQkgIGlmIChlcnJubyAhPSAwKSB7CisJCSAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gbnVtYmVyIGluIHNldFZhbHVlOiAnJXMnIiwgc3RyaW5ncHRyKTsKKwkJICAgICAgUkVUVkFMID0gMDsKKwkJICB9IGVsc2UKIAotCQkgIGM2NC5oaWdoID0gKHVpbnQzMl90KSh1bGx0bXAgPj4gMzIpOwotCQkgIGM2NC5sb3cgID0gKHVpbnQzMl90KXVsbHRtcDsKLSAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsICh1X2NoYXIpdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJmM2NCwgc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpKTsKLQkJICBSRVRWQUwgPSAxOwotCQkgIGJyZWFrOworCQkgICAgICBSRVRWQUwgPSAxOwogCSAgICAgIH0KIAkgICAgICBlbHNlIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi11bnNpZ25lZC1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9DT1VOVEVSNjQ6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24tdW5zaWduZWQtaW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fQ09VTlRFUjY0OiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKLQkJYnJlYWs7CiAJICAgICAgfQorCSAgICAgIGlmIChSRVRWQUwpIHsKKwkJICBjNjQuaGlnaCA9ICh1aW50MzJfdCkodWxsdG1wID4+IDMyKTsKKwkJICBjNjQubG93ICA9ICh1aW50MzJfdCkodWxsdG1wID4+IDApOworCQkgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsICh1X2NoYXIpdHlwZSwKKwkJCQkgICAgICh1X2NoYXIgKikgJmM2NCwgc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpKTsKKwkgICAgICB9CisJICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlIEFTTl9PQ1RFVF9TVFI6CiAgICAgICAgICAgY2FzZSBBU05fQklUX1NUUjoKKyAgICAgICAgICBjYXNlIEFTTl9PUEFRVUU6CiAJICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGJlZW4gcGFzc2VkIHNvbWV0aGluZyB3aXRoIGEgc3RyaW5nIHZhbHVlIChvciBhIGJsZXNzZWQgc2NhbGFyKSAqLwogCSAgICAgIGlmICghU3ZQT0twKHZhbHVlKSAmJiAoU3ZUWVBFKHZhbHVlKSAhPSBTVnRfUFZNRykpIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX09DVEVUX1NUUi9BU05fQklUX1NUUjogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX09DVEVUX1NUUi9BU05fQklUX1NUUjogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTczMyw4ICs3NTUsOCBAQAogCiAJICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGJlZW4gcGFzc2VkIHNvbWV0aGluZyB3aXRoIGEgc3RyaW5nIHZhbHVlIChvciBhIGJsZXNzZWQgc2NhbGFyKSAqLwogCSAgICAgIGlmICghU3ZQT0twKHZhbHVlKSAmJiAoU3ZUWVBFKHZhbHVlKSAhPSBTVnRfUFZNRykpIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lQQUREUkVTUzogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lQQUREUkVTUzogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTc0Nyw3ICs3NjksNyBAQAogCiAJICAgICAgIyBTYW5pdHkgY2hlY2sgb24gYWRkcmVzcyBsZW5ndGgKIAkgICAgICBpZiAoKHN0cmluZ2xlbiAhPSA0KSAmJiAoc3RyaW5nbGVuICE9IDE2KSkgewotCSAgICAgIAkJc25tcF9sb2coTE9HX0VSUiwgIklQIGFkZHJlc3Mgb2YgJWQgYnl0ZXMgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lQQUREUkVTU1xuIiwgc3RyaW5nbGVuKTsKKwkgICAgICAJCXNubXBfbG9nKExPR19FUlIsICJJUCBhZGRyZXNzIG9mICUiIE5FVFNOTVBfUFJJeiAiZCBieXRlcyBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSVBBRERSRVNTXG4iLCBzdHJpbmdsZW4pOwogCQkJUkVUVkFMID0gMDsKIAkJCWJyZWFrOwogCSAgICAgIH0KQEAgLTc2MCw4ICs3ODIsOCBAQAogICAgICAgICAgIGNhc2UgQVNOX09CSkVDVF9JRDoKIAkgICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYmVlbiBwYXNzZWQgc29tZXRoaW5nIHdpdGggYSBzdHJpbmcgdmFsdWUgKG9yIGEgYmxlc3NlZCBzY2FsYXIpICovCiAJICAgICAgaWYgKCFTdlBPS3AodmFsdWUpICYmIChTdlRZUEUodmFsdWUpICE9IFNWdF9QVk1HKSkgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fT0JKRUNUX0lEOiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fT0JKRUNUX0lEOiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKIAkJYnJlYWs7CiAJICAgICAgfQpAQCAtODUxLDYgKzg3Myw0OCBAQAogCiBNT0RVTEUgPSBOZXRTTk1QOjphZ2VudCAgUEFDS0FHRSA9IE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyBQUkVGSVggPSBuYXJxaV8KIAorCitTViAqCituYXJxaV9nZXRTb3VyY2VJcChtZSkKKyAgICAgICAgU1YgKm1lOworICAgIFBSRUlOSVQ6CisgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvOworCW5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqZnJvbTsKKyAgICAgICAgU1YgKnJhcmc7CisKKyAgICBDT0RFOgorICAgICAgICByZXFpbmZvID0gKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOworCisgICAgICAgIC8qIFhYWDogdHJhbnNwb3J0LXNwZWNpZmljOiBVRFAvSVB2NCBvbmx5ISAqLworCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgKHJlcWluZm8tPmFzcC0+cGR1LT50cmFuc3BvcnRfZGF0YSk7CisJZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKKyAgICAgICAgcmFyZyA9IG5ld1NWcHYoKGNvbnN0IGNoYXIgKikoJmZyb20tPnNpbl9hZGRyLnNfYWRkciksIHNpemVvZihmcm9tLT5zaW5fYWRkci5zX2FkZHIpKTsKKyAgICAgICAgUkVUVkFMID0gcmFyZzsKKyAgICBPVVRQVVQ6CisgICAgICAgIFJFVFZBTAorCisKK1NWICoKK25hcnFpX2dldERlc3RJcChtZSkKKyAgICAgICAgU1YgKm1lOworICAgIFBSRUlOSVQ6CisgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvOworCW5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyOworCXN0cnVjdCBpbl9hZGRyICp0bzsKKyAgICAgICAgU1YgKnJhcmc7CisKKyAgICBDT0RFOgorICAgICAgICByZXFpbmZvID0gKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOworCisgICAgICAgIC8qIFhYWDogdHJhbnNwb3J0LXNwZWNpZmljOiBVRFAvSVB2NCBvbmx5ISAqLworCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgKHJlcWluZm8tPmFzcC0+cGR1LT50cmFuc3BvcnRfZGF0YSk7CisJdG8gPSAoc3RydWN0IGluX2FkZHIgKikgJihhZGRyX3BhaXItPmxvY2FsX2FkZHIpOworICAgICAgICByYXJnID0gbmV3U1ZwdigoY29uc3QgY2hhciAqKSgmdG8tPnNfYWRkciksIHNpemVvZih0by0+c19hZGRyKSk7CisgICAgICAgIFJFVFZBTCA9IHJhcmc7CisgICAgT1VUUFVUOgorICAgICAgICBSRVRWQUwKKwogaW50CiBuYXJxaV9nZXRNb2RlKG1lKQogICAgICAgICBTViAqbWU7CmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwgYi9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKaW5kZXggNjdkNWZmMC4uZWQ2NDgzYSAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTApAQCAtMjQsOSArMjQsOSBAQAogICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSBiL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCmluZGV4IGE3NmMzNmIuLmE4ODEyZWIgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCisrKyBiL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCkBAIC05Niw3ICs5Niw3IEBACiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9NQVhfR0VUQlVMS1JFUEVBVFMKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX01BWF9HRVRCVUxLUkVTUE9OU0VTCiApOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHN1YiBBVVRPTE9BRCB7CiAgICAgIyBUaGlzIEFVVE9MT0FEIGlzIHVzZWQgdG8gJ2F1dG9sb2FkJyBjb25zdGFudHMgZnJvbSB0aGUgY29uc3RhbnQoKQpAQCAtMjE5LDQzICsyMTksNiBAQAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQ0FDSEVfVElNRU9VVAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfVkVSU0lPTgogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfU0VDTEVWRUwKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX01BWF9HRVRCVUxLUkVQRUFUUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTUFYX0dFVEJVTEtSRVNQT05TRVMKLQotCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9WRVJCT1NFCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9ST0xFCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9OT19ST09UX0FDQ0VTUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX01BU1RFUgotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUVVJVF9JTU1FRElBVEVMWQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRElTQUJMRV9QRVJMCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9OT19DT05ORUNUSU9OX1dBUk5JTkdTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9MRUFWRV9QSURGSUxFCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9OT19DQUNISU5HCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9TVFJJQ1RfRElTTUFOCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9ET05UX1JFVEFJTl9OT1RJRklDQVRJT05TCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9ET05UX0xPR19UQ1BXUkFQUEVSU19DT05ORUNUUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUFJPR05BTUUKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VUCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9QT1JUUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfU0VDTkFNRQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUEVSTF9JTklUX0ZJTEUKLQkJCQkgICBORVRTTk1QX0RTX1NNVVhfU09DS0VUCi0JCQkJICAgTkVUU05NUF9EU19OT1RJRl9MT0dfQ1RYCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9GTEFHUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklECi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElECi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfUElOR19JTlRFUlZBTAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1RJTUVPVVQKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9SRVRSSUVTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfUEVSTQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfWF9ESVJfUEVSTQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX1VTRVIKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19HUk9VUAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQ0FDSEVfVElNRU9VVAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfVkVSU0lPTgotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfU0VDTEVWRUwKIAogCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9WRVJCT1NFCmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI2MzBlCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhZ2VudF9jaGVja19hbmRfcHJvY2VzcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXBfZW5hYmxlX3N0ZGVycmxvZykKKwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC90ZXN0LnBsIGIvcGVybC9hZ2VudC90ZXN0LnBsCmluZGV4IGE3YWM4ZjkuLjg4Y2JhNTYgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvdGVzdC5wbAorKysgYi9wZXJsL2FnZW50L3Rlc3QucGwKQEAgLTksNyArOSw3IEBACiBCRUdJTiB7ICR8ID0gMTsgCiAgICAgICAgICRFTlZ7J1NOTVBDT05GUEFUSCd9ID0gJ25vcGF0aCc7CiAgICAgICAgICRFTlZ7J01JQlMnfSA9ICcnOwotICAgICAgICBwcmludCAiMS4uNVxuIjsKKyAgICAgICAgcHJpbnQgIjEuLjZcbiI7CiAgICAgICB9CiBFTkQge3ByaW50ICJub3Qgb2sgMVxuIiB1bmxlc3MgJGxvYWRlZDt9CiB1c2UgTmV0U05NUDo6YWdlbnQgKCc6YWxsJyk7CkBAIC03Niw2ICs3NiwxMiBAQAogcHJpbnQgaXQoJHJlZ2l0ZW0sIDQpOwogI3ByaW50IFNUREVSUiAkcmVnaXRlbSwiOiIscmVmKCRyZWdpdGVtKSwiXG4iOwogcHJpbnQgaXQocmVmKCRyZWdpdGVtKSBlcSAiTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24iLCA1KTsKKworbXkgJHVwdGltZTEgPSAkYWdlbnQtPnVwdGltZSgpOworbXkgJHVwdGltZTIgPSAkYWdlbnQtPnVwdGltZSg2NjYpOworbXkgJHVwdGltZTMgPSAkYWdlbnQtPnVwdGltZSg1NTUsIDQ0NCk7CitwcmludCBpdCgkdXB0aW1lMSA8PSAkdXB0aW1lMiAmJiAkdXB0aW1lMiA8PSAkdXB0aW1lMywgNik7CisKIGV4aXQ7CiAKIHdoaWxlKDEpIHsKZGlmZiAtLWdpdCBhL3BlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCBiL3BlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTAppbmRleCA1NDk5NmFiLi43YzY3MWI4IDEwMDY0NAotLS0gYS9wZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCkBAIC0yMyw5ICsyMyw5IEBACiAgICAgfSAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTc4LDcgKzE3OCw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtIGIvcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KaW5kZXggODI4YmJkYi4uYjg5ODUwMSAxMDA2NDQKLS0tIGEvcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKysrIGIvcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KQEAgLTIwMCw3ICsyMDAsNyBAQAogCQkJCSAgIE5FVFNOTVBfRFNfTElCX0tTTV9TRVJWSUNFX05BTUUKIAkJCQkgICBORVRTTk1QX0RTX0xJQl9TQlNNX0xPQ0FMX1BXRAogKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiBzdWIgQVVUT0xPQUQgewogICAgICMgVGhpcyBBVVRPTE9BRCBpcyB1c2VkIHRvICdhdXRvbG9hZCcgY29uc3RhbnRzIGZyb20gdGhlIGNvbnN0YW50KCkKZGlmZiAtLWdpdCBhL3BlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCmRpZmYgLS1naXQgYS9wZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbCBiL3BlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsCmluZGV4IDkzMGNhOGMuLmI0MjljNmIgMTAwNjQ0Ci0tLSBhL3BlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsCisrKyBiL3BlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsCkBAIC0xMCw3ICsxMCw3IEBACiAKIAkldGVzdHMgPSAoIAogICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfTUFYX0lEUyIgICAgICAgICAgICAgICAgICAgICA9PiAzLAotICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfTUFYX1NVQklEUyIgICAgICAgICAgICAgICAgICA9PiA0MCwKKyAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX01BWF9TVUJJRFMiICAgICAgICAgICAgICAgICAgPT4gNDgsCiAgICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19MSUJSQVJZX0lEIiAgICAgICAgICAgICAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCIgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19UT0tFTl9JRCIgICAgICAgICAgICAgICAgICAgID0+IDIsCmRpZmYgLS1naXQgYS9weXRob24vTElDRU5TRSBiL3B5dGhvbi9MSUNFTlNFCmluZGV4IGViZWJmNGEuLjRjNzYzOGYgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9MSUNFTlNFCisrKyBiL3B5dGhvbi9MSUNFTlNFCkBAIC0xLDMgKzEsMzkgQEAKK1ZhcmlvdXMgY29weXJpZ2h0cyBhcHBseSB0byB0aGlzIHBhY2thZ2UsIGxpc3RlZCBpbiB2YXJpb3VzIHNlcGFyYXRlCitwYXJ0cyBiZWxvdy4gIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgcmVhZCBhbGwgdGhlIHBhcnRzLgorCistLS0tIFBhcnQgMTogU3BhcnRhLCBJbmMgKEJTRCkgLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAsIFNwYXJ0YSwgSW5jCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAKKyogIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisqICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAKKyogIE5laXRoZXIgdGhlIG5hbWUgb2YgU3BhcnRhLCBJbmMgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIAorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTCitJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tIFBhcnQgMjogU2NpZW5jZUxvZ2ljLCBMTEMgKEJTRCkgLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMDYsIFNjaWVuY2VMb2dpYywgTExDCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIApkaWZmIC0tZ2l0IGEvcHl0aG9uL1JFQURNRSBiL3B5dGhvbi9SRUFETUUKaW5kZXggZWY1YjQ3Ny4uZjk5OGY4YiAxMDA2NDQKLS0tIGEvcHl0aG9uL1JFQURNRQorKysgYi9weXRob24vUkVBRE1FCkBAIC04OSw3ICs4OSw2IEBACiAgICBuZXRzbm1wLlNlc3Npb24oPHRhZz49PHZhbHVlPiwgLi4uICkKIAogICAgIERlc3RIb3N0ICAgIC0gZGVmYXVsdCAnbG9jYWxob3N0JywgaG9zdG5hbWUgb3IgaXAgYWRkciBvZiBTTk1QIGFnZW50Ci0gICAgQ29tbXVuaXR5ICAgLSBkZWZhdWx0ICdwdWJsaWMnLCBTTk1QIGNvbW11bml0eSBzdHJpbmcgKHVzZWQgZm9yIGJvdGggUi9XKQogICAgIFZlcnNpb24gICAgIC0gZGVmYXVsdCAnMycsIFsxLCAyIChlcXVpdiB0byAyYyksIDNdCiAgICAgUmVtb3RlUG9ydCAgLSBkZWZhdWx0ICcxNjEnLCBhbGxvdyByZW1vdGUgVURQIHBvcnQgdG8gYmUgb3ZlcnJpZGRlbgogICAgIFRpbWVvdXQgICAgIC0gZGVmYXVsdCAnNTAwMDAwJywgbWljcm8tc2Vjb25kcyBiZWZvcmUgcmV0cnkKQEAgLTk5LDE4ICs5OCw2IEBACiAgICAgICAgICAgICAgICAgICB1bmRlZiB3aWxsIGJlIHJldHVybmVkIGZvciBhbGwgTk9TVUNIIHZhcmJpbmRzLCB3aGVuIHNldAogICAgICAgICAgICAgICAgICAgdG8gJzAnIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgdGhlIGVudGlyZSBnZXQgcmVxdWVzdAogICAgICAgICAgICAgICAgICAgd2lsbCBmYWlsIG9uIGFueSBOT1NVQ0ggZXJyb3IgKGFwcGxpZXMgdG8gdjEgb25seSkKLSAgICBTZWNOYW1lICAgICAtIGRlZmF1bHQgJ2luaXRpYWwnLCBzZWN1cml0eSBuYW1lICh2MykKLSAgICBTZWNMZXZlbCAgICAtIGRlZmF1bHQgJ25vQXV0aE5vUHJpdicsIHNlY3VyaXR5IGxldmVsIFtub0F1dGhOb1ByaXYsCi0gICAgICAgICAgICAgICAgICBhdXRoTm9Qcml2LCBhdXRoUHJpdl0gKHYzKQotICAgIFNlY0VuZ2luZUlkIC0gZGVmYXVsdCA8bm9uZT4sIHNlY3VyaXR5IGVuZ2luZUlELCB3aWxsIGJlIHByb2JlZCBpZiBub3QKLSAgICAgICAgICAgICAgICAgIHN1cHBsaWVkICh2MykKLSAgICBDb250ZXh0RW5naW5lSWQgLSBkZWZhdWx0IDxTZWNFbmdpbmVJZD4sIGNvbnRleHQgZW5naW5lSUQsIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgICBwcm9iZWQgaWYgbm90IHN1cHBsaWVkICh2MykKLSAgICBDb250ZXh0ICAgICAtIGRlZmF1bHQgJycsIGNvbnRleHQgbmFtZSAodjMpCi0gICAgQXV0aFByb3RvICAgLSBkZWZhdWx0ICdNRDUnLCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBbTUQ1LCBTSEFdICh2MykKLSAgICBBdXRoUGFzcyAgICAtIGRlZmF1bHQgPG5vbmU+LCBhdXRoZW50aWNhdGlvbiBwYXNzcGhyYXNlCi0gICAgUHJpdlByb3RvICAgLSBkZWZhdWx0ICdERVMnLCBwcml2YWN5IHByb3RvY29sIFtERVNdICh2MykKLSAgICBQcml2UGFzcyAgICAtIGRlZmF1bHQgPG5vbmU+LCBwcml2YWN5IHBhc3NwaHJhc2UgKHYzKQogICAgIFVzZUxvbmdOYW1lcyAtIHNldCB0byBub24temVybyB0byBoYXZlIDx0YWdzPiBmb3IgJ2dldG5leHQnIG1ldGhvZHMgCiAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgcHJlZmVycmluZyBsb25nZXIgTWliIG5hbWUgY29udmVudGlvbiAoZS5nLiwgCiAJCSAgc3lzdGVtLnN5c0Rlc2NyIHZzIGp1c3Qgc3lzRGVzY3IpCkBAIC0xMzYsOCArMTIzLDQwIEBACiAgICAgRXJyb3JOdW0gICAgLSByZWFkLW9ubHksIGhvbGRzIHRoZSBzbm1wX2VyciBvciBzdGF0dXMgb2YgbGFzdCByZXF1ZXN0CiAgICAgRXJyb3JJbmQgICAgLSByZWFkLW9ubHksIGhvbGRzIHRoZSBzbm1wX2Vycl9pbmRleCB3aGVuIGFwcHJvcHJpYXRlCiAKKyAgIFNOTVB2MS9TTk1QdjJjIG9wdGlvbnM6CisgICAgQ29tbXVuaXR5ICAgLSBkZWZhdWx0ICdwdWJsaWMnLCBTTk1QIGNvbW11bml0eSBzdHJpbmcgKHVzZWQgZm9yIGJvdGggUi9XKQorCisgICBTTk1QdjMgT3B0aW9uczoKKyAgICBTZWNOYW1lICAgICAtIGRlZmF1bHQgJ2luaXRpYWwnLCBzZWN1cml0eSBuYW1lICh2MykKKyAgICBTZWNMZXZlbCAgICAtIGRlZmF1bHQgJ25vQXV0aE5vUHJpdicsIHNlY3VyaXR5IGxldmVsIFtub0F1dGhOb1ByaXYsCisgICAgICAgICAgICAgICAgICBhdXRoTm9Qcml2LCBhdXRoUHJpdl0gKHYzKQorICAgIENvbnRleHRFbmdpbmVJZCAtIGRlZmF1bHQgPFNlY0VuZ2luZUlkPiwgY29udGV4dCBlbmdpbmVJRCwgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgIHByb2JlZCBpZiBub3Qgc3VwcGxpZWQgKHYzKQorICAgIENvbnRleHQgICAgIC0gZGVmYXVsdCAnJywgY29udGV4dCBuYW1lICh2MykKKworICAgU05NUHYzIG92ZXIgVExTIG9yIERUTFMgb3B0aW9uczoKKyAgICBPdXJJZGVudGl0eSAgIC0gVGhlIGZpbmdlcnByaW50IG9yIGZpbGUgbmFtZSBmb3IgdGhlIGxvY2FsIFguNTA5CisgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIHRvIHVzZSBmb3Igb3VyIGlkZW50aXR5LiAgUnVuCisgICAgICAgICAgICAgICAgICAgIG5ldC1zbm1wLWNlcnQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgY2VydGlmaWNhdGVzLgorICAgIFRoZWlySWRlbnRpdHkgLSBUaGUgZmluZ2VycHJpbnQgb3IgZmlsZSBuYW1lIGZvciB0aGUgbG9jYWwgWC41MDkKKyAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgdG8gdXNlIGZvciB0aGVpciBpZGVudGl0eS4gIAorICAgIFRydXN0Q2VydCAgICAgLSBBIHRydXN0ZWQgY2VydGlmaWNhdGUgdG8gdXNlIGZvciB2YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcy4gIFR5cGljYWxseSB0aGlzIHdvdWxkIGJlIGEgQ0EKKyAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUuCisgICAgVGhlaXJIb3N0bmFtZSAtIFRoZWlyIGhvc3RuYW1lIHRvIGV4cGVjdC4gIEVpdGhlciAiVGhlaXJJZGVudGl0eSIKKyAgICAJCSAgICBvciBhIHRydXN0ZWQgY2VydGlmaWNhdGUgcGx1cyBhIGhvc3RuYW1lIGlzIG5lZWRlZAorICAgIAkJICAgIHRvIHZhbGlkYXRlIHRoZSBzZXJ2ZXIgaXMgdGhlIHByb3BlciBzZXJ2ZXIuCisgICAgCisgICBTTk1QdjMgd2l0aCBVU00gc2VjdXJpdHkgT3B0aW9uczoKKyAgICBTZWNFbmdpbmVJZCAtIGRlZmF1bHQgPG5vbmU+LCBzZWN1cml0eSBlbmdpbmVJRCwgd2lsbCBiZSBwcm9iZWQgaWYgbm90CisgICAgICAgICAgICAgICAgICBzdXBwbGllZCAodjMpCisgICAgQXV0aFByb3RvICAgLSBkZWZhdWx0ICdNRDUnLCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBbTUQ1LCBTSEFdICh2MykKKyAgICBBdXRoUGFzcyAgICAtIGRlZmF1bHQgPG5vbmU+LCBhdXRoZW50aWNhdGlvbiBwYXNzcGhyYXNlCisgICAgUHJpdlByb3RvICAgLSBkZWZhdWx0ICdERVMnLCBwcml2YWN5IHByb3RvY29sIFtERVNdICh2MykKKyAgICBQcml2UGFzcyAgICAtIGRlZmF1bHQgPG5vbmU+LCBwcml2YWN5IHBhc3NwaHJhc2UgKHYzKQorCiAgICBwcml2YXRlOgotICAgIHNlc3NfcHRyICAgLSBpbnRlcm5hbCBmaWVsZCB1c2VkIHRvIGNhY2hlIGEgY3JlYXRlZCBzZXNzaW9uIHN0cnVjdHVyZQorICAgIHNlc3NfcHRyICAgIC0gaW50ZXJuYWwgZmllbGQgdXNlZCB0byBjYWNoZSBhIGNyZWF0ZWQgc2Vzc2lvbiBzdHJ1Y3R1cmUKIAogICAgbWV0aG9kczoKIApkaWZmIC0tZ2l0IGEvcHl0aG9uL25ldHNubXAvY2xpZW50LnB5IGIvcHl0aG9uL25ldHNubXAvY2xpZW50LnB5CmluZGV4IGFhMDQ3MmQuLjZmYzRiMmUgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9uZXRzbm1wL2NsaWVudC5weQorKysgYi9weXRob24vbmV0c25tcC9jbGllbnQucHkKQEAgLTMwLDYgKzMwLDEwIEBACiAgICAgICAgICdFbmdpbmVib290cyc6MCwKICAgICAgICAgJ0VuZ2luZXRpbWUnOjAsCiAgICAgICAgICdVc2VOdW1lcmljJzowLAorICAgICAgICAnT3VySWRlbnRpdHknOicnLAorICAgICAgICAnVGhlaXJJZGVudGl0eSc6JycsCisgICAgICAgICdUaGVpckhvc3RuYW1lJzonJywKKyAgICAgICAgJ1RydXN0Q2VydCc6JycKICAgICAgICAgfQogICAgIGtleXMgPSBrYXJncy5rZXlzKCkKICAgICBmb3Iga2V5IGluIGtleXM6CkBAIC0xMjYsNyArMTMwLDI4IEBACiAgICAgICAgIGZvciBrLHYgaW4gc2Vzc19hcmdzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLl9fZGljdF9fW2tdID0gdgogCi0gICAgICAgIGlmIHNlc3NfYXJnc1snVmVyc2lvbiddID09IDM6CisgICAgICAgICAgICAKKyAgICAgICAgIyBjaGVjayBmb3IgdHJhbnNwb3J0cyB0aGF0IG1heSBiZSB0dW5uZWxlZAorICAgICAgICB0cmFuc3BvcnRDaGVjayA9IHJlLmNvbXBpbGUoJ14odGxzfGR0bHN8c3NoKScpOworICAgICAgICBtYXRjaCA9IHRyYW5zcG9ydENoZWNrLm1hdGNoKHNlc3NfYXJnc1snRGVzdEhvc3QnXSkKKworICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHNlbGYuc2Vzc19wdHIgPSBjbGllbnRfaW50Zi5zZXNzaW9uX3R1bm5lbGVkKAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVmVyc2lvbiddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snRGVzdEhvc3QnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ0xvY2FsUG9ydCddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snUmV0cmllcyddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVGltZW91dCddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snU2VjTmFtZSddLAorICAgICAgICAgICAgICAgIHNlY0xldmVsTWFwW3Nlc3NfYXJnc1snU2VjTGV2ZWwnXV0sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydDb250ZXh0RW5naW5lSWQnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ0NvbnRleHQnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ091cklkZW50aXR5J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydUaGVpcklkZW50aXR5J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydUaGVpckhvc3RuYW1lJ10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydUcnVzdENlcnQnXSwKKyAgICAgICAgICAgICAgICApOworICAgICAgICBlbGlmIHNlc3NfYXJnc1snVmVyc2lvbiddID09IDM6CiAgICAgICAgICAgICBzZWxmLnNlc3NfcHRyID0gY2xpZW50X2ludGYuc2Vzc2lvbl92MygKICAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1ZlcnNpb24nXSwKICAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ0Rlc3RIb3N0J10sCmRpZmYgLS1naXQgYS9weXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jIGIvcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYwppbmRleCAzYTkwNGE2Li44Yjg4MDVkIDEwMDY0NAotLS0gYS9weXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jCisrKyBiL3B5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMKQEAgLTY1OCw2ICs2NTgsOSBAQAogCW5ld25hbWVfbGVuID0gTUFYX09JRF9MRU47CiAJaWYgKHJlYWRfb2JqaWQodGFnLCBuZXduYW1lLCAmbmV3bmFtZV9sZW4pKSB7CS8qIGxvbmcgbmFtZSAqLwogCSAgcnRwID0gdHAgPSBnZXRfdHJlZShuZXduYW1lLCBuZXduYW1lX2xlbiwgZ2V0X3RyZWVfaGVhZCgpKTsKKwl9IGVsc2UgeworCSAgLyogZmFpbGVkIHRvIHBhcnNlIHRoZSBPSUQgKi8KKwkgIG5ld25hbWVfbGVuID0gMDsKIAl9CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTc1OCw4ICs3NjEsNyBAQAogICAgIH0KIAogICAgIHZhcnMtPm5leHRfdmFyaWFibGUgPSBOVUxMOwotICAgIHZhcnMtPm5hbWUgPSAob2lkICopbWFsbG9jKG5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwotICAgIG1lbWNweSgoY2hhciAqKXZhcnMtPm5hbWUsIChjaGFyICopbmFtZSwgbmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CisgICAgdmFycy0+bmFtZSA9IHNubXBfZHVwbGljYXRlX29iamlkKG5hbWUsIG5hbWVfbGVuZ3RoKTsKICAgICB2YXJzLT5uYW1lX2xlbmd0aCA9IG5hbWVfbGVuZ3RoOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgY2FzZSBUWVBFX0lOVEVHRVI6CkBAIC04NDUsOSArODQ3LDggQEAKICAgICAgICAgICAgIHZhcnMtPnZhbC5vYmppZCA9IE5VTEw7CiAJICAgIHJldCA9IEZBSUxVUkU7CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXJzLT52YWwub2JqaWQgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZChvaWRidWYsIHZhcnMtPnZhbF9sZW4pOwogICAgICAgICAgICAgdmFycy0+dmFsX2xlbiAqPSBzaXplb2Yob2lkKTsKLSAgICAgICAgICAgIHZhcnMtPnZhbC5vYmppZCA9IChvaWQgKiltYWxsb2ModmFycy0+dmFsX2xlbik7Ci0gICAgICAgICAgICBtZW1jcHkoKGNoYXIgKil2YXJzLT52YWwub2JqaWQsIChjaGFyICopb2lkYnVmLCB2YXJzLT52YWxfbGVuKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtODgwLDEzICs4ODEsMTYgQEAKICAgIGlmIChzcyA9PSBOVUxMKSB7CiAgICAgICAgKmVycl9udW0gPSAwOwogICAgICAgICplcnJfaW5kID0gU05NUEVSUl9CQURfU0VTU0lPTjsKKyAgICAgICBzdGF0dXMgPSBTTk1QRVJSX0JBRF9TRVNTSU9OOwogICAgICAgIHN0cmxjcHkoZXJyX3N0ciwgc25tcF9hcGlfZXJyc3RyaW5nKCplcnJfaW5kKSwgU1RSX0JVRl9TSVpFKTsKICAgICAgICBnb3RvIGRvbmU7CiAgICB9CiAKIHJldHJ5OgogCi0gICBzdGF0dXMgPSBzbm1wX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsIHJlc3BvbnNlKTsKKyAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgIHN0YXR1cyA9IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzcywgcGR1LCByZXNwb25zZSk7CisgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICBpZiAoKCpyZXNwb25zZSA9PSBOVUxMKSAmJiAoc3RhdHVzID09IFNUQVRfU1VDQ0VTUykpIHN0YXR1cyA9IFNUQVRfRVJST1I7CiAKQEAgLTExMDQsNiArMTEwOCw4IEBACiAKICAgX19saWJyYXJpZXNfaW5pdCgicHl0aG9uIik7CiAKKyAgc25tcF9zZXNzX2luaXQoJnNlc3Npb24pOworCiAgIHNlc3Npb24udmVyc2lvbiA9IC0xOwogI2lmbmRlZiBESVNBQkxFX1NOTVBWMQogICBpZiAodmVyc2lvbiA9PSAxKSB7CkBAIC0xMTMyLDcgKzExMzgsNyBAQAogICBzZXNzaW9uLnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLwogICBzZXNzaW9uLmF1dGhlbnRpY2F0b3IgPSBOVUxMOwogCi0gIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKyAgc3MgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7CiAKICAgaWYgKHNzID09IE5VTEwpIHsKICAgICBpZiAodmVyYm9zZSkgCkBAIC0xMjkxLDYgKzEyOTcsOTkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK25ldHNubXBfY3JlYXRlX3Nlc3Npb25fdHVubmVsZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICBpbnQgdmVyc2lvbjsKKyAgY2hhciAqcGVlcjsKKyAgaW50ICBscG9ydDsKKyAgaW50ICByZXRyaWVzOworICBpbnQgIHRpbWVvdXQ7CisgIGNoYXIgKiAgc2VjX25hbWU7CisgIGludCAgICAgc2VjX2xldmVsOworICBjaGFyICogIGNvbnRleHRfZW5nX2lkOworICBjaGFyICogIGNvbnRleHQ7CisgIGNoYXIgKiAgb3VyX2lkZW50aXR5OworICBjaGFyICogIHRoZWlyX2lkZW50aXR5OworICBjaGFyICogIHRoZWlyX2hvc3RuYW1lOworICBjaGFyICogIHRydXN0X2NlcnQ7CisgIFNubXBTZXNzaW9uIHNlc3Npb24gPSB7MH07CisgIFNubXBTZXNzaW9uICpzcyA9IE5VTEw7CisgIGludCB2ZXJib3NlID0gcHlfbmV0c25tcF92ZXJib3NlKCk7CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpc2lpaXNpc3Nzc3NzIiwgJnZlcnNpb24sCisJCQkmcGVlciwgJmxwb3J0LCAmcmV0cmllcywgJnRpbWVvdXQsCisJCQkmc2VjX25hbWUsICZzZWNfbGV2ZWwsCisJCQkmY29udGV4dF9lbmdfaWQsICZjb250ZXh0LCAKKwkJCSZvdXJfaWRlbnRpdHksICZ0aGVpcl9pZGVudGl0eSwgCisJCQkmdGhlaXJfaG9zdG5hbWUsICZ0cnVzdF9jZXJ0KSkKKyAgICByZXR1cm4gTlVMTDsKKworICBfX2xpYnJhcmllc19pbml0KCJweXRob24iKTsKKyAgc25tcF9zZXNzX2luaXQoJnNlc3Npb24pOworCisgIGlmICh2ZXJzaW9uICE9IDMpIHsKKyAgICBzZXNzaW9uLnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMzsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnRmKCJVc2luZyB2ZXJzaW9uIDMgYXMgaXQncyB0aGUgb25seSB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgdHVubmVsaW5nXG4iKTsKKyAgfQorCisgIHNlc3Npb24ucGVlcm5hbWUgPSBwZWVyOworICBzZXNzaW9uLnJldHJpZXMgPSByZXRyaWVzOyAvKiA1ICovCisgIHNlc3Npb24udGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCisgIHNlc3Npb24uY29udGV4dE5hbWVMZW4gPSBTVFJMRU4oY29udGV4dCk7CisgIHNlc3Npb24uY29udGV4dE5hbWUgPSBjb250ZXh0OworICBzZXNzaW9uLnNlY3VyaXR5TmFtZUxlbiA9IFNUUkxFTihzZWNfbmFtZSk7CisgIHNlc3Npb24uc2VjdXJpdHlOYW1lID0gc2VjX25hbWU7CisgIHNlc3Npb24uc2VjdXJpdHlMZXZlbCA9IHNlY19sZXZlbDsKKyAgc2Vzc2lvbi5zZWN1cml0eU1vZGVsID0gTkVUU05NUF9UU01fU0VDVVJJVFlfTU9ERUw7CisKKyAgLyogY3JlYXRlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBzdG9yZSAqLworICBpZiAoIXNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCgpOworICAgICAgc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiA9CisgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgidHJhbnNwb3J0X2NvbmZpZ3VyYXRpb246ZmlmbyIpOworICAgICAgaWYgKCFzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gY29udGFpbmVyXG4iKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbi0+Y29tcGFyZSA9CisgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKQorICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19jb21wYXJlOworICB9CisKKyAgaWYgKG91cl9pZGVudGl0eSAmJiBvdXJfaWRlbnRpdHlbMF0gIT0gJ1wwJykKKyAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygibG9jYWxDZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJfaWRlbnRpdHkpKTsKKworICBpZiAodGhlaXJfaWRlbnRpdHkgJiYgdGhlaXJfaWRlbnRpdHlbMF0gIT0gJ1wwJykKKyAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygicGVlckNlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX2lkZW50aXR5KSk7CisKKyAgaWYgKHRoZWlyX2hvc3RuYW1lICYmIHRoZWlyX2hvc3RuYW1lWzBdICE9ICdcMCcpCisgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInRoZWlyX2hvc3RuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9ob3N0bmFtZSkpOworCisgIGlmICh0cnVzdF9jZXJ0ICYmIHRydXN0X2NlcnRbMF0gIT0gJ1wwJykKKyAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygidHJ1c3RfY2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3RfY2VydCkpOworICAKKyAgc3MgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7CisKKyAgaWYgKCFzcykKKyAgICAgIHJldHVybiBOVUxMOworICAvKgorICAgKiBOb3RlOiBvbiBhIDY0LWJpdCBzeXN0ZW0gdGhlIHN0YXRlbWVudCBiZWxvdyBkaXNjYXJkcyB0aGUgdXBwZXIgMzIgYml0cyBvZgorICAgKiAic3MiLCB3aGljaCBpcyBtb3N0IGxpa2VseSBhIGJ1Zy4KKyAgICovCisgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgKGludCkodWludHB0cl90KXNzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG5ldHNubXBfZGVsZXRlX3Nlc3Npb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICBQeU9iamVjdCAqc2Vzc2lvbjsKQEAgLTEzMDIsNyArMTQwMSw3IEBACiAKICAgc3MgPSAoU25tcFNlc3Npb24gKilweV9uZXRzbm1wX2F0dHJfdm9pZF9wdHIoc2Vzc2lvbiwgInNlc3NfcHRyIik7CiAKLSAgc25tcF9jbG9zZShzcyk7CisgIHNubXBfc2Vzc19jbG9zZShzcyk7CiAgIHJldHVybiAoUHlfQnVpbGRWYWx1ZSgiIikpOwogfQogCkBAIC0xNDkyLDEwICsxNTkxLDE2IEBACiAJcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInZhbCIsIChjaGFyICopIHN0cl9idWYsIGxlbik7CiAKIAkvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsICovCi0JUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsIAotCQkJKGxlbiA/IFB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSA6Ci0JCQkgUHlfQnVpbGRWYWx1ZSgiIikpKTsKLQorCWlmICgodHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykgfHwKKwkJCSh0eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUKSB8fAorCQkJKHR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkpIHsKKwkJLyogVHJhbnNsYXRlIGVycm9yIHRvIE5vbmUgKi8KKwkJUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsIAorCQkJUHlfQnVpbGRWYWx1ZSgiIikpOworCX0gZWxzZSB7CisJCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLAorCQkJUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pKTsKKwl9CiAJUHlfREVDUkVGKHZhcmJpbmQpOwogICAgICAgfSBlbHNlIHsKIAlwcmludGYoIm5ldHNubXBfZ2V0OiBiYWQgdmFyYmluZCAoJWQpXG4iLCB2YXJsaXN0X2luZCk7CkBAIC0xNzA2LDEwICsxODExLDE2IEBACiAJcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInZhbCIsIChjaGFyICopIHN0cl9idWYsIGxlbik7CiAKIAkvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsICovCi0JUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsIAotCQkJKGxlbiA/IFB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSA6Ci0JCQkgUHlfQnVpbGRWYWx1ZSgiIikpKTsKLQorCWlmICgodHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykgfHwKKwkJCSh0eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUKSB8fAorCQkJKHR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkpIHsKKwkJLyogVHJhbnNsYXRlIGVycm9yIHRvIE5vbmUgKi8KKwkJUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsIAorCQkJUHlfQnVpbGRWYWx1ZSgiIikpOworCX0gZWxzZSB7CisJCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLAorCQkJUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pKTsKKwl9CiAJUHlfREVDUkVGKHZhcmJpbmQpOwogICAgICAgfSBlbHNlIHsKIAlwcmludGYoIm5ldHNubXBfZ2V0bmV4dDogYmFkIHZhcmJpbmQgKCVkKVxuIiwgdmFybGlzdF9pbmQpOwpAQCAtMTc0MywxMSArMTg1NCwxNCBAQAogICBpbnQgdmFybGlzdF9pbmQ7CiAgIG5ldHNubXBfc2Vzc2lvbiAqc3M7CiAgIG5ldHNubXBfcGR1ICpwZHUsICpyZXNwb25zZTsKLSAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzOworICBuZXRzbm1wX3BkdSAqbmV3cGR1OworICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICpvbGR2YXJzOwogICBzdHJ1Y3QgdHJlZSAqdHA7CiAgIGludCBsZW47Ci0gIG9pZCAqb2lkX2FycjsKLSAgaW50IG9pZF9hcnJfbGVuOworICBvaWQgKipvaWRfYXJyID0gTlVMTDsKKyAgaW50ICpvaWRfYXJyX2xlbiA9IE5VTEw7CisgIG9pZCAqKm9pZF9hcnJfYnJva2VuX2NoZWNrID0gTlVMTDsKKyAgaW50ICpvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW4gPSBOVUxMOwogICBpbnQgdHlwZTsKICAgY2hhciB0eXBlX3N0cltNQVhfVFlQRV9OQU1FX0xFTl07CiAgIGludCBzdGF0dXM7CkBAIC0xNzcxLDkgKzE4ODUsNyBAQAogICBjaGFyICp0bXBzdHI7CiAgIFB5X3NzaXplX3QgdG1wbGVuOwogCSAgIAotICBvaWRfYXJyID0gY2FsbG9jKE1BWF9PSURfTEVOLCBzaXplb2Yob2lkKSk7Ci0KLSAgaWYgKG9pZF9hcnIgJiYgYXJncykgeworICBpZiAoYXJncykgewogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyIsICZzZXNzaW9uLCAmdmFybGlzdCkpIHsKICAgICAgIGdvdG8gZG9uZTsKQEAgLTE4MDYsMjcgKzE5MTgsNTIgQEAKICAgICBiZXN0X2d1ZXNzID0gcHlfbmV0c25tcF9hdHRyX2xvbmcoc2Vzc2lvbiwgIkJlc3RHdWVzcyIpOwogICAgIHJldHJ5X25vc3VjaCA9IHB5X25ldHNubXBfYXR0cl9sb25nKHNlc3Npb24sICJSZXRyeU5vU3VjaCIpOwogICAgICAgICAKLSAgICB2YXJsaXN0X2l0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKHZhcmxpc3QpOwotCiAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVE5FWFQpOwogICAgIAotICAgIC8qIGdldCB0aGUgaW5pdGlhbCBzdGFydGluZyBvaWRzKi8KKyAgICAvKiB3ZSBuZWVkIGFuIGluaXRpYWwgY291bnQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uICovCisgICAgdmFybGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlcih2YXJsaXN0KTsKKyAgICB2YXJsaXN0X2xlbiA9IDA7CiAgICAgd2hpbGUgKHZhcmxpc3RfaXRlciAmJiAodmFyYmluZCA9IFB5SXRlcl9OZXh0KHZhcmxpc3RfaXRlcikpKSB7CisgICAgICAgIHZhcmxpc3RfbGVuKys7CisgICAgfQorICAgIFB5X0RFQ1JFRih2YXJsaXN0X2l0ZXIpOworCisgICAgb2lkX2Fycl9sZW4gICAgICAgICAgICAgID0gY2FsbG9jKHZhcmxpc3RfbGVuLCBzaXplb2YoaW50KSk7CisgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuID0gY2FsbG9jKHZhcmxpc3RfbGVuLCBzaXplb2YoaW50KSk7CisKKyAgICBvaWRfYXJyICAgICAgICAgICAgICAgICAgPSBjYWxsb2ModmFybGlzdF9sZW4sIHNpemVvZihvaWQgKikpOworICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrICAgICA9IGNhbGxvYyh2YXJsaXN0X2xlbiwgc2l6ZW9mKG9pZCAqKSk7CisKKyAgICBmb3IodmFybGlzdF9pbmQgPSAwOyB2YXJsaXN0X2luZCA8IHZhcmxpc3RfbGVuOyB2YXJsaXN0X2luZCsrKSB7CisKKyAgICAgICAgb2lkX2Fyclt2YXJsaXN0X2luZF0gPSBjYWxsb2MoTUFYX09JRF9MRU4sIHNpemVvZihvaWQpKTsKKyAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdID0gY2FsbG9jKE1BWF9PSURfTEVOLCBzaXplb2Yob2lkKSk7CisKKyAgICAgICAgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdICAgICAgICAgICAgICA9IE1BWF9PSURfTEVOOworICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW5bdmFybGlzdF9pbmRdID0gTUFYX09JRF9MRU47CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBpbml0aWFsIHN0YXJ0aW5nIG9pZHMqLworICAgIHZhcmxpc3RfaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIodmFybGlzdCk7CisgICAgdmFybGlzdF9pbmQgPSAwOworICAgIHdoaWxlICh2YXJsaXN0X2l0ZXIgJiYgKHZhcmJpbmQgPSBQeUl0ZXJfTmV4dCh2YXJsaXN0X2l0ZXIpKSkgeworCiAgICAgICBpZiAocHlfbmV0c25tcF9hdHRyX3N0cmluZyh2YXJiaW5kLCAidGFnIiwgJnRhZywgTlVMTCkgPCAwIHx8CiAgICAgICAgICBweV9uZXRzbm1wX2F0dHJfc3RyaW5nKHZhcmJpbmQsICJpaWQiLCAmaWlkLCBOVUxMKSA8IDApCiAgICAgICB7Ci0gICAgICAgIG9pZF9hcnJfbGVuID0gMDsKKyAgICAgICAgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdID0gMDsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRwID0gX190YWcyb2lkKHRhZywgaWlkLCBvaWRfYXJyLCAmb2lkX2Fycl9sZW4sIE5VTEwsIGJlc3RfZ3Vlc3MpOworICAgICAgICB0cCA9IF9fdGFnMm9pZCh0YWcsIGlpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgb2lkX2Fyclt2YXJsaXN0X2luZF0sICZvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0sCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGJlc3RfZ3Vlc3MpOwogICAgICAgfQogCiAgICAgICBpZiAoX2RlYnVnX2xldmVsKSAKIAlwcmludGYoIm5ldHNubXBfd2FsazogZmlsbGluZyByZXF1ZXN0OiAlczolczolZDolZFxuIiwgCi0JICAgICAgIHRhZywgaWlkLCBvaWRfYXJyX2xlbixiZXN0X2d1ZXNzKTsKKwkgICAgICAgdGFnLCBpaWQsIG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSxiZXN0X2d1ZXNzKTsKIAotICAgICAgaWYgKG9pZF9hcnJfbGVuKSB7Ci0gICAgICAgIHNubXBfYWRkX251bGxfdmFyKHBkdSwgb2lkX2Fyciwgb2lkX2Fycl9sZW4pOwotICAgICAgICB2YXJsaXN0X2xlbisrOworICAgICAgaWYgKG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSkgeworICAgICAgICBzbm1wX2FkZF9udWxsX3ZhcihwZHUsIG9pZF9hcnJbdmFybGlzdF9pbmRdLCBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0pOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogd2FsazogdW5rbm93biBvYmplY3QgSUQgKCVzKSIsCkBAIC0xODM3LDYgKzE5NzQsNyBAQAogICAgICAgfQogICAgICAgLyogcmVsZWFzZSByZWZlcmVuY2Ugd2hlbiBkb25lICovCiAgICAgICBQeV9ERUNSRUYodmFyYmluZCk7CisgICAgICB2YXJsaXN0X2luZCsrOwogICAgIH0KIAogICAgIGlmICh2YXJsaXN0X2l0ZXIpCkBAIC0xOTAxLDYgKzIwMzksMTkgQEAKICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKKyAgICAvKiBzYXZlIHRoZSBzdGFydGluZyBPSUQgKi8KKworICAgIGZvcih2YXJzID0gcGR1LT52YXJpYWJsZXMsIHZhcmxpc3RfaW5kID0gMDsKKyAgICAgICAgdmFycyAhPSBOVUxMOworICAgICAgICB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSwgdmFybGlzdF9pbmQrKykgeworCisgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSA9IGNhbGxvYyhNQVhfT0lEX0xFTiwgc2l6ZW9mKG9pZCkpOworCisgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlblt2YXJsaXN0X2luZF0gPSB2YXJzLT5uYW1lX2xlbmd0aDsKKyAgICAgICAgbWVtY3B5KG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSwKKyAgICAgICAgICAgICAgIHZhcnMtPm5hbWUsIHZhcnMtPm5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOworICAgIH0KKwogICAgIHdoaWxlKG5vdGRvbmUpIHsKIAogICAgICAgc3RhdHVzID0gX19zZW5kX3N5bmNfcGR1KHNzLCBwZHUsICZyZXNwb25zZSwgcmV0cnlfbm9zdWNoLCAKQEAgLTE5MDgsODQgKzIwNTksMTEyIEBACiAgICAgICBfX3B5X25ldHNubXBfdXBkYXRlX3Nlc3Npb25fZXJyb3JzKHNlc3Npb24sIGVycl9zdHIsIGVycl9udW0sIGVycl9pbmQpOwogCiAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS0+dmFyaWFibGVzIHx8Ci0gICAgICAgICAgKHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoIDwgb2lkX2Fycl9sZW4pIHx8Ci0gICAgICAgICAgKG1lbWNtcChvaWRfYXJyLCByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lLAotICAgICAgICAgICAgICAgICAgb2lkX2Fycl9sZW4gKiBzaXplb2Yob2lkKSkpIHx8CiAgICAgICAgICAgc3RhdHVzICE9IFNUQVRfU1VDQ0VTUyB8fAogICAgICAgICAgIHJlc3BvbnNlLT5lcnJzdGF0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKICAgICAgICAgICBub3Rkb25lID0gMDsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvcih2YXJzID0gKHJlc3BvbnNlID8gcmVzcG9uc2UtPnZhcmlhYmxlcyA6IE5VTEwpLCB2YXJsaXN0X2luZCA9IDA7Ci0gICAgCXZhcnMgJiYgKHZhcmxpc3RfaW5kIDwgdmFybGlzdF9sZW4pOwotICAgIAl2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSwgdmFybGlzdF9pbmQrKykgeworICAgICAgICAgIG5ld3BkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVRORVhUKTsKIAotICAgICAgICAgIGlmICgodmFycy0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykgfHwKLSAgICAgICAgICAgICAgKHZhcnMtPnR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QpIHx8Ci0gICAgICAgICAgICAgICh2YXJzLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpKSB7Ci0gICAgICAgICAgICAgIG5vdGRvbmUgPSAwOwotICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBmb3IodmFycyA9IChyZXNwb25zZSA/IHJlc3BvbnNlLT52YXJpYWJsZXMgOiBOVUxMKSwKKyAgICAgICAgICAgICAgICAgIHZhcmxpc3RfaW5kID0gMCwKKyAgICAgICAgICAgICAgICAgIG9sZHZhcnMgPSAocGR1ID8gcGR1LT52YXJpYWJsZXMgOiBOVUxMKTsKKyAgICAgICAgICAgICAgdmFycyAmJiAodmFybGlzdF9pbmQgPCB2YXJsaXN0X2xlbik7CisgICAgICAgICAgICAgIHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlLCB2YXJsaXN0X2luZCsrLAorICAgICAgICAgICAgICAgICAgb2xkdmFycyA9IChvbGR2YXJzID8gb2xkdmFycy0+bmV4dF92YXJpYWJsZSA6IE5VTEwpKSB7CisKKyAgICAgICAgICAgICAgaWYgKCh2YXJzLT5uYW1lX2xlbmd0aCA8IG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSkgfHwKKyAgICAgICAgICAgICAgICAgIChtZW1jbXAob2lkX2Fyclt2YXJsaXN0X2luZF0sIHZhcnMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSAqIHNpemVvZihvaWQpKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgbm90ZG9uZSA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICgodmFycy0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykgfHwKKyAgICAgICAgICAgICAgICAgICh2YXJzLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUKSB8fAorICAgICAgICAgICAgICAgICAgKHZhcnMtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkpIHsKKyAgICAgICAgICAgICAgICAgIG5vdGRvbmUgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZSh2YXJzLT5uYW1lLCB2YXJzLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW5bdmFybGlzdF9pbmRdKSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAvKiBUaGUgYWdlbnQgcmVzcG9uZGVkIHdpdGggYW4gaWxsZWdhbCByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHJldHVybmluZyBPSUQgd2FzIGxleG9ncmFnaWNhbGx5IGxlc3MKKyAgICAgICAgICAgICAgICAgICAgIHRoZW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCBPSUQuLi4KKyAgICAgICAgICAgICAgICAgICAgIFdlIG5lZWQgdG8gZ2l2ZSB1cCBoZXJlIGJlY2F1c2UgYW4gaW5maXRlCisgICAgICAgICAgICAgICAgICAgICBsb29wIHdpbGwgcmVzdWx0IG90aGVyd2lzZS4KKworICAgICAgICAgICAgICAgICAgICAgWFhYOiB0aGlzIHJlYWxseSBzaG91bGQgYmUgYW4gb3B0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBsaWtlIHRoZSAtQ2Mgb3B0aW9uIHRvIHRoZSBzbm1wd2FsaworICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgbm90ZG9uZSA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHZhcmJpbmQgPSBweV9uZXRzbm1wX2NvbnN0cnVjdF92YXJiaW5kKCk7CisKKyAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcodmFyYmluZCwgInRhZyIpKSB7CisgICAgICAgICAgICAgICAgICBzdHJfYnVmWzBdID0gJy4nOworICAgICAgICAgICAgICAgICAgc3RyX2J1ZlsxXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBvdXRfbGVuID0gMDsKKyAgICAgICAgICAgICAgICAgIHRwID0gbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCZzdHJfYnVmcCwgJnN0cl9idWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9sZW4sIDAsICZidWZfb3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMtPm5hbWUsdmFycy0+bmFtZV9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgc3RyX2J1ZltzaXplb2Yoc3RyX2J1ZiktMV0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgICBpZiAoX19pc19sZWFmKHRwKSkgeworICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAodHAtPnR5cGUgPyB0cC0+dHlwZSA6IHRwLT5wYXJlbnQtPnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgIGdldGxhYmVsX2ZsYWcgJj0gfk5PTl9MRUFGX05BTUU7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGdldGxhYmVsX2ZsYWcgfD0gTk9OX0xFQUZfTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gX190cmFuc2xhdGVfYXNuX3R5cGUodmFycy0+dHlwZSk7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIF9fZ2V0X2xhYmVsX2lpZCgoY2hhciAqKSBzdHJfYnVmLCAmdGFnLCAmaWlkLCBnZXRsYWJlbF9mbGFnKTsKKworICAgICAgICAgICAgICAgICAgaWYgKF9kZWJ1Z19sZXZlbCkgcHJpbnRmKCJuZXRzbm1wX3dhbGs6IGZpbGxpbmcgcmVzcG9uc2U6ICVzOiVzXG4iLCB0YWcsIGlpZCk7CisKKyAgICAgICAgICAgICAgICAgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ0YWciLCB0YWcsIFNUUkxFTih0YWcpKTsKKyAgICAgICAgICAgICAgICAgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJpaWQiLCBpaWQsIFNUUkxFTihpaWQpKTsKKworICAgICAgICAgICAgICAgICAgX19nZXRfdHlwZV9zdHIodHlwZSwgdHlwZV9zdHIpOworCisgICAgICAgICAgICAgICAgICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidHlwZSIsIHR5cGVfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHR5cGVfc3RyKSk7CisKKyAgICAgICAgICAgICAgICAgIGxlbiA9IF9fc25wcmludF92YWx1ZSgoY2hhciAqKSBzdHJfYnVmLHNpemVvZihzdHJfYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLHRwLHR5cGUsc3ByaW50dmFsX2ZsYWcpOworICAgICAgICAgICAgICAgICAgc3RyX2J1ZltsZW5dID0gJ1wwJzsKKworICAgICAgICAgICAgICAgICAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInZhbCIsIChjaGFyICopIHN0cl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAvKiBwdXNoIHRoZSB2YXJiaW5kIG9udG8gdGhlIHJldHVybiB2YXJiaW5kcyAqLworICAgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZCh2YXJiaW5kcywgdmFyYmluZCk7CisKKyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgKi8KKyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgLSBzdGVhbHMgcmVmICovCisgICAgICAgICAgICAgICAgICBfUHlUdXBsZV9SZXNpemUoJnZhbF90dXBsZSwgcmVzdWx0X2NvdW50KzEpOworICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgcmVzdWx0X2NvdW50KyssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gTm9uZSBmb3IgdGhpcyB2YXJpYWJsZS4gKi8KKyAgICAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZSgmdmFsX3R1cGxlLCByZXN1bHRfY291bnQrMSk7CisgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCByZXN1bHRfY291bnQrKywgUHlfQnVpbGRWYWx1ZSgiIikpOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCJuZXRzbm1wX3dhbGs6IGJhZCB2YXJiaW5kICglZClcbiIsIHZhcmxpc3RfaW5kKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBQeV9YREVDUkVGKHZhcmJpbmQpOworCisgICAgICAgICAgICAgIG1lbWNweShvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0sIHZhcnMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSAqIHZhcnMtPm5hbWVfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuW3Zhcmxpc3RfaW5kXSA9IHZhcnMtPm5hbWVfbGVuZ3RoOworCisgICAgICAgICAgICAgIHNubXBfYWRkX251bGxfdmFyKG5ld3BkdSwgdmFycy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycy0+bmFtZV9sZW5ndGgpOwogICAgICAgICAgIH0KLQotICAgICAgICAgIHZhcmJpbmQgPSBweV9uZXRzbm1wX2NvbnN0cnVjdF92YXJiaW5kKCk7Ci0KLSAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyh2YXJiaW5kLCAidGFnIikpIHsKLSAgICAJICBzdHJfYnVmWzBdID0gJy4nOwotICAgIAkgIHN0cl9idWZbMV0gPSAnXDAnOwotICAgIAkgIG91dF9sZW4gPSAwOwotICAgIAkgIHRwID0gbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCZzdHJfYnVmcCwgJnN0cl9idWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9sZW4sIDAsICZidWZfb3ZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMtPm5hbWUsdmFycy0+bmFtZV9sZW5ndGgpOwotICAgIAkgIHN0cl9idWZbc2l6ZW9mKHN0cl9idWYpLTFdID0gJ1wwJzsKLQotICAgIAkgIGlmIChfX2lzX2xlYWYodHApKSB7Ci0JICAgIHR5cGUgPSAodHAtPnR5cGUgPyB0cC0+dHlwZSA6IHRwLT5wYXJlbnQtPnR5cGUpOwotICAgIAkgICAgZ2V0bGFiZWxfZmxhZyAmPSB+Tk9OX0xFQUZfTkFNRTsKLSAgICAJICB9IGVsc2UgewotICAgIAkgICAgZ2V0bGFiZWxfZmxhZyB8PSBOT05fTEVBRl9OQU1FOwotICAgIAkgICAgdHlwZSA9IF9fdHJhbnNsYXRlX2Fzbl90eXBlKHZhcnMtPnR5cGUpOwotICAgIAkgIH0KLQotICAgICAgICAgIF9fZ2V0X2xhYmVsX2lpZCgoY2hhciAqKSBzdHJfYnVmLCAmdGFnLCAmaWlkLCBnZXRsYWJlbF9mbGFnKTsKLQotICAgIAkgIGlmIChfZGVidWdfbGV2ZWwpIHByaW50ZigibmV0c25tcF93YWxrOiBmaWxsaW5nIHJlc3BvbnNlOiAlczolc1xuIiwgdGFnLCBpaWQpOwotCi0JICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidGFnIiwgdGFnLCBTVFJMRU4odGFnKSk7Ci0JICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAiaWlkIiwgaWlkLCBTVFJMRU4oaWlkKSk7Ci0KLSAgICAJICBfX2dldF90eXBlX3N0cih0eXBlLCB0eXBlX3N0cik7Ci0KLQkgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ0eXBlIiwgdHlwZV9zdHIsIAotCQkJCSAgICAgc3RybGVuKHR5cGVfc3RyKSk7Ci0KLSAgICAJICBsZW4gPSBfX3NucHJpbnRfdmFsdWUoKGNoYXIgKikgc3RyX2J1ZixzaXplb2Yoc3RyX2J1ZiksCi0JCQkJdmFycyx0cCx0eXBlLHNwcmludHZhbF9mbGFnKTsKLSAgICAJICBzdHJfYnVmW2xlbl0gPSAnXDAnOwotCi0JICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidmFsIiwgKGNoYXIgKikgc3RyX2J1ZiwgbGVuKTsKLSAgICAgICAgICAgIAotCSAgLyogcHVzaCB0aGUgdmFyYmluZCBvbnRvIHRoZSByZXR1cm4gdmFyYmluZHMgKi8KLQkgIFB5TGlzdF9BcHBlbmQodmFyYmluZHMsIHZhcmJpbmQpOwotCi0gICAgCSAgLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAqLwotCSAgLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAtIHN0ZWFscyByZWYgKi8KLQkgIF9QeVR1cGxlX1Jlc2l6ZSgmdmFsX3R1cGxlLCByZXN1bHRfY291bnQrMSk7Ci0JICBQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCByZXN1bHRfY291bnQrKywgCi0JCQkgIChsZW4gPyBQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikgOgotCQkJICAgUHlfQnVpbGRWYWx1ZSgiIikpKTsKLSAgICAgICAgICAgIAotCi0gICAgICAgICAgfSBlbHNlIHsKLQkgICAgLyogUmV0dXJuIE5vbmUgZm9yIHRoaXMgdmFyaWFibGUuICovCi0gICAgICAgICAgICBfUHlUdXBsZV9SZXNpemUoJnZhbF90dXBsZSwgcmVzdWx0X2NvdW50KzEpOwotCSAgICBQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCByZXN1bHRfY291bnQrKywgUHlfQnVpbGRWYWx1ZSgiIikpOwotCSAgICBwcmludGYoIm5ldHNubXBfd2FsazogYmFkIHZhcmJpbmQgKCVkKVxuIiwgdmFybGlzdF9pbmQpOwotICAgICAgICAgIH0JCi0gICAgICAgICAgUHlfWERFQ1JFRih2YXJiaW5kKTsKLSAgICAgICAgfQotICAgICAgICAvKiByZXVzZSB0aGUgcmVzcG9uc2UgYXMgdGhlIG5leHQgcGR1IHRvIHNlbmQgKi8KLSAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVE5FWFQpOwotICAgICAgICBzbm1wX2FkZF9udWxsX3ZhcihwZHUsIHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoKTsKKyAgICAgICAgICBwZHUgPSBuZXdwZHU7CiAgICAgICB9CiAgICAgICBpZiAocmVzcG9uc2UpCiAJc25tcF9mcmVlX3BkdShyZXNwb25zZSk7CkBAIC0yMDA3LDcgKzIxODYsMTQgQEAKIAogIGRvbmU6CiAgIFB5X1hERUNSRUYodmFyYmluZHMpOworICBTQUZFX0ZSRUUob2lkX2Fycl9sZW4pOworICBTQUZFX0ZSRUUob2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuKTsKKyAgZm9yKHZhcmxpc3RfaW5kID0gMDsgdmFybGlzdF9pbmQgPCB2YXJsaXN0X2xlbjsgdmFybGlzdF9pbmQgKyspIHsKKyAgICAgIFNBRkVfRlJFRShvaWRfYXJyW3Zhcmxpc3RfaW5kXSk7CisgICAgICBTQUZFX0ZSRUUob2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdKTsKKyAgfQogICBTQUZFX0ZSRUUob2lkX2Fycik7CisgIFNBRkVfRlJFRShvaWRfYXJyX2Jyb2tlbl9jaGVjayk7CiAgIHJldHVybiAodmFsX3R1cGxlID8gdmFsX3R1cGxlIDogUHlfQnVpbGRWYWx1ZSgiIikpOwogfQogCkBAIC0yMzQ1LDYgKzI1MzEsMTAgQEAKIAkgIHNubXBfZnJlZV9wZHUocGR1KTsKIAkgIGdvdG8gZG9uZTsKIAl9CisJbWVtc2V0KHRtcF92YWxfc3RyLCAwLCBzaXplb2YodG1wX3ZhbF9zdHIpKTsKKyAgICAgICAgaWYgKCB0bXBsZW4gPj0gc2l6ZW9mKHRtcF92YWxfc3RyKSkgeworICAgICAgICAgICAgdG1wbGVuID0gc2l6ZW9mKHRtcF92YWxfc3RyKS0xOworICAgICAgICB9CiAJbWVtY3B5KHRtcF92YWxfc3RyLCB2YWwsIHRtcGxlbik7CiAJaWYgKHR5cGU9PVRZUEVfSU5URUdFUiAmJiB1c2VfZW51bXMgJiYgdHAgJiYgdHAtPmVudW1zKSB7CiAJICBmb3IoZXAgPSB0cC0+ZW51bXM7IGVwOyBlcCA9IGVwLT5uZXh0KSB7CkBAIC0yNDAwLDYgKzI1OTAsOCBAQAogICAgImNyZWF0ZSBhIG5ldHNubXAgc2Vzc2lvbi4ifSwKICAgeyJzZXNzaW9uX3YzIiwgIG5ldHNubXBfY3JlYXRlX3Nlc3Npb25fdjMsIE1FVEhfVkFSQVJHUywKICAgICJjcmVhdGUgYSBuZXRzbm1wIHNlc3Npb24uIn0sCisgIHsic2Vzc2lvbl90dW5uZWxlZCIsICBuZXRzbm1wX2NyZWF0ZV9zZXNzaW9uX3R1bm5lbGVkLCBNRVRIX1ZBUkFSR1MsCisgICAiY3JlYXRlIGEgdHVubmVsZWQgbmV0c25tcCBzZXNzaW9uIG92ZXIgdGxzLCBkdGxzIG9yIHNzaC4ifSwKICAgeyJkZWxldGVfc2Vzc2lvbiIsICBuZXRzbm1wX2RlbGV0ZV9zZXNzaW9uLCBNRVRIX1ZBUkFSR1MsCiAgICAiY3JlYXRlIGEgbmV0c25tcCBzZXNzaW9uLiJ9LAogICB7ImdldCIsICBuZXRzbm1wX2dldCwgTUVUSF9WQVJBUkdTLApkaWZmIC0tZ2l0IGEvcHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9weXRob24vbmV0c25tcC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk0MTZhCi0tLSAvZGV2L251bGwKKysrIGIvcHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF92YWx1ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGVuYWJsZV9zdGRlcnJsb2cpCisKZGlmZiAtLWdpdCBhL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmYgYi9weXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mCmluZGV4IDE2YTBiZjIuLmI2MmU0YzcgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmYKKysrIGIvcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZgpAQCAtNDE4LDMgKzQxOCw4IEBACiAjICBTZWUgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UsIGFuZCB0aGUgb3V0cHV0IG9mICJzbm1wZCAtSCIuCiAjICBNVUNIIG1vcmUgY2FuIGJlIGRvbmUgd2l0aCB0aGUgc25tcGQuY29uZiB0aGFuIGlzIHNob3duIGFzIGFuCiAjICBleGFtcGxlIGhlcmUuCisKK2NlcnRTZWNOYW1lIDEwIEQwMjBBNzhFQUY5OUZDRTI3NkFBOUY0MzA2M0E2OTY5OEU0Rjc1RDEgLS1yZmM4MjIKK3J3dXNlciAtcyB0c20gaGFyZGFrZXJAd2poLmhhcmRha2Vycy5uZXQKKwordHJ1c3RDZXJ0IEQwMjBBNzhFQUY5OUZDRTI3NkFBOUY0MzA2M0E2OTY5OEU0Rjc1RDEKZGlmZiAtLWdpdCBhL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHkgYi9weXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5CmluZGV4IGEzMjMwYjIuLmUzOTgyZjQgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHkKKysrIGIvcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weQpAQCAtMTksNyArMTksNyBAQAogCiAgICAgICAgIHZhciA9IG5ldHNubXAuVmFyYmluZCgnLjEuMy42LjEuMi4xLjEuMScsJzAnKQogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSBHRVQgdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICByZXMgPSBuZXRzbm1wLnNubXBnZXQodmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SG9zdD0nbG9jYWxob3N0JywKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgICAgICBwcmludCAidjEgZ2V0IHZhcjogIiwgIHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIEdFVE5FWFQgdGVzdHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHJlcyA9IG5ldHNubXAuc25tcGdldG5leHQodmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RIb3N0PSdsb2NhbGhvc3QnLApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICBwcmludCAidjEgZ2V0bmV4dCB2YXI6ICIsICB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSBTRVQgdGVzdHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhciA9IG5ldHNubXAuVmFyYmluZCgnc3lzTG9jYXRpb24nLCcwJywgJ215IG5ldyBsb2NhdGlvbicpCiAgICAgICAgIHJlcyA9IG5ldHNubXAuc25tcHNldCh2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0gMSwKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBwcmludCAidjEgc2V0IHZhcjogIiwgIHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIHdhbGsgdGVzdHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXN0ZW0nKSkKIAogICAgICAgICBwcmludCAidjEgdmFybGlzdCB3YWxrIGluOiAiCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSB3YWxrIDItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgcHJpbnQgInYxIHZhcmJpbmQgd2FsayBpbjogIgogICAgICAgICB2YXIgPSBuZXRzbm1wLlZhcmJpbmQoJ3N5c3RlbScpCkBAIC03OSw3ICs3OSw3IEBACiAKICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgbXVsdGktdmFyYmluZCB0ZXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICBzZXNzID0gbmV0c25tcC5TZXNzaW9uKFZlcnNpb249MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SG9zdD0nbG9jYWxob3N0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tdW5pdHk9J3B1YmxpYycpCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgc2V0Mi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KAogICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNMb2NhdGlvbicsICcwJywgJ215IG5ld2VyIGxvY2F0aW9uJykpCiAgICAgICAgIHJlcyA9IHNlc3Muc2V0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MSBzZXNzLnNldCByZXN1bHQ6ICIsIHJlcywgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSB3YWxrMy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c3RlbScpKQogICAgICAgICAgICAgICAgIAogICAgICAgICB2YWxzID0gc2Vzcy53YWxrKHZhcnMpCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgZm9yIHZhciBpbiB2YXJzOgogICAgICAgICAgICAgcHJpbnQgIiAgIix2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjJjIGdldC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICBzZXNzID0gbmV0c25tcC5TZXNzaW9uKFZlcnNpb249MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SG9zdD0nbG9jYWxob3N0JywKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICB2YWxzID0gc2Vzcy5nZXQodmFycykKICAgICAgICAgcHJpbnQgInYyIHNlc3MuZ2V0IHJlc3VsdDogIiwgdmFscywgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MmMgZ2V0bmV4dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIHByaW50ICJcbiIKICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYyYyBnZXRidWxrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXNVcFRpbWUnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c09STGFzdENoYW5nZScpLApAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgcHJpbnQgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MmMgc2V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QoCiAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c0xvY2F0aW9uJywnMCcsJ215IGV2ZW4gbmV3ZXIgbG9jYXRpb24nKSkKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICByZXMgPSBzZXNzLnNldCh2YXJzKQogICAgICAgICBwcmludCAidjIgc2Vzcy5zZXQgcmVzdWx0OiAiLCByZXMsICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjJjIHdhbGstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXN0ZW0nKSkKICAgICAgICAgICAgICAgICAKICAgICAgICAgdmFscyA9IHNlc3Mud2Fsayh2YXJzKQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgICAgIGZvciB2YXIgaW4gdmFyczoKICAgICAgICAgICAgIHByaW50ICIgICIsdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYzIHNldHVwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICBzZXNzID0gbmV0c25tcC5TZXNzaW9uKFZlcnNpb249MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SG9zdD0nbG9jYWxob3N0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNMZXZlbD0nYXV0aFByaXYnLApAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXNVcFRpbWUnLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c0NvbnRhY3QnLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c0xvY2F0aW9uJywgMCkpCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MyBnZXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhbHMgPSBzZXNzLmdldCh2YXJzKQogICAgICAgICBwcmludCAidjMgc2Vzcy5nZXQgcmVzdWx0OiAiLCB2YWxzLCAiXG4iCiAgICAgICAgIApAQCAtMjA4LDcgKzIwOCw3IEBACiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgcHJpbnQgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MyBnZXRuZXh0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgIAogICAgICAgICB2YWxzID0gc2Vzcy5nZXRuZXh0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MyBzZXNzLmdldG5leHQgcmVzdWx0OiAiLCB2YWxzLCAiXG4iCkBAIC0yMzAsMTQgKzIzMCwxNCBAQAogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIHByaW50ICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjMgc2V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QoCiAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c0xvY2F0aW9uJywnMCcsICdteSBmaW5hbCBkZXN0aW5hdGlvbicpKQogICAgICAgICByZXMgPSBzZXNzLnNldCh2YXJzKQogICAgICAgICBwcmludCAidjMgc2Vzcy5zZXQgcmVzdWx0OiAiLCByZXMsICJcbiIKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MyB3YWxrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzdGVtJykpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHZhbHMgPSBzZXNzLndhbGsodmFycykKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAKICAgICAgICAgZm9yIHZhciBpbiB2YXJzOgogICAgICAgICAgICAgcHJpbnQgIiAgIix2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKLSAgICAgICAgICAgIAorCiAKIGNsYXNzIFNldFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdEZ1bmNzKHNlbGYpOiAgICAgICAgCmRpZmYgLS1naXQgYS9zZWRzY3JpcHQuaW4gYi9zZWRzY3JpcHQuaW4KaW5kZXggYWVkZjdiOC4uNzgxNGNlOSAxMDA2NDQKLS0tIGEvc2Vkc2NyaXB0LmluCisrKyBiL3NlZHNjcmlwdC5pbgpAQCAtMTA2LDQgKzEwNiw0IEBACiAKIHMjUFJFTU9WRU1FU0NNRCNQU0NNRCNnCiBzI0FSRU1PVkVNRUdFTlRYX1NPQ0tFVCNBR0VOVFhfU09DS0VUI2cKLXMvVkVSU0lPTklORk8vNS40LjMucHJlMS9nCitzI05SRU1PVkVNRUVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiNORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOI2cKZGlmZiAtLWdpdCBhL3NubXBsaWIvTWFrZWZpbGUuZGVwZW5kIGIvc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQKaW5kZXggY2FjNjUxMC4uZWUwNTFiMyAxMDA2NDQKLS0tIGEvc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQKKysrIGIvc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQKQEAgLTUsMTUgKzUsMzQgQEAKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCkBAIC0yMiw5ICs0MSw3IEBACiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTMzLDMyICs1MCw1MiBAQAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC02OCw2MyArMTA1LDExOSBAQAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTMzLDEzNCArMjI2LDEwMSBAQAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2NtdV9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY211X2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jbXVfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY211X2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NtdV9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjY5LDY0ICszMjksMTM0IEBACiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMzUsNjQgKzQ2NSw2NiBAQAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDAxLDY0ICs1MzMsNjYgQEAKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDY3LDYzICs2MDEsNjYgQEAKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MzIsMjMgKzY2OSw0MiBAQAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC01NjEsOSArNzE3LDcgQEAKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtNTczLDYzICs3MjcsMTMzIEBACiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjM4LDY0ICs4NjIsNjggQEAKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzA0LDczICs5MzIsMTg5IEBACiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaAorLi9nZXRvcHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vZ2V0b3B0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oIGluZXRfbnRvcC5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmggaW5ldF9wdG9uLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTc4MywzMSArMTEyNywxMTYgQEAKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTgxOCw1OSArMTI0NywxMDcgQEAKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtODgyLDkgKzEzNTksNyBAQAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC04OTMsNjkgKzEzNjgsNjYgQEAKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTk2NCwyMyArMTQzNiw3NCBAQAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTk5Myw5ICsxNTE2LDcgQEAKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTAwNCwyOSArMTUyNSw0MiBAQAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9wa2NzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3BrY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vcGtjcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3BrY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9wa2NzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTEwMzksOSArMTU3Myw3IEBACiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTEwNTEsMzMgKzE1ODMsNzkgQEAKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTA4OCwyODggKzE2NjYsNDQgQEAKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTM4Miw5ICsxNzE2LDcgQEAKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTM5NSwyMSArMTcyNywzOSBAQAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0xNDIyLDkgKzE3NzIsNyBAQAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xNDM0LDQyICsxNzgyLDU0IEBACiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKIC4vc25tcF9hcGkubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xNDc5LDQ1ICsxODM5LDExMyBAQAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTUzMCw5ICsxOTU4LDcgQEAKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTU0MiwxNiArMTk2OCwzNyBAQAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaApAQCAtMTU2MiwyNjIgKzIwMDksMzggQEAKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggc25tcHNtX2luaXQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCkBAIC0xODMyLDkgKzIwNTUsNyBAQAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xODQ5LDI0ICsyMDcwLDUxOSBAQAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBzbm1wc21faW5pdC5oCisuL3NubXBfc2VjbW9kLmxvOiBzbm1wc21fc2h1dGRvd24uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF90cmFuc3BvcnQubG86IHRyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0xODc5LDkgKzI1OTUsNyBAQAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xODk2LDI0ICsyNjEwLDM5IEBACiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTkyNiw5ICsyNjU1LDcgQEAKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTk0Myw4NSArMjY3MCwxOTAgQEAKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbnByaW50Zi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbnByaW50Zi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbnByaW50Zi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NucHJpbnRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N0cnRvbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJ0b2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zdHJ0b2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJ0b3VsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3N0cnRvdWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b3VsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMjAzMiwxMjggKzI4NjQsNjkgQEAKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCBpbmV0X250b3AuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjE2MiwzNCArMjkzNSw0OSBAQAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RleHRfdXRpbHMuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMjE5OCw1OSArMjk4Niw4NDkgQEAKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5sbzogb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUubG86IC4vb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jCisuL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5sbzogLi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9zcHIuaAorLi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYworLi9vcGVuc3NsL29wZW5zc2xfbWQ1LmxvOiAuL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgKKy4vb3BlbnNzbC9vcGVuc3NsX21kNS5sbzogLi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaAorLi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubG86IC4vb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfc2hhMS5sbzogb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9zaGExLmxvOiBvcGVuc3NsL29wZW5zc2xfc2hhLmgKKy4vb3BlbnNzbC9vcGVuc3NsX3NoYTEubG86IC4vb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IGluZXRfbnRvcC5oIGluZXRfcHRvbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCmRpZmYgLS1naXQgYS9zbm1wbGliL01ha2VmaWxlLmluIGIvc25tcGxpYi9NYWtlZmlsZS5pbgppbmRleCAzNGUzMGU2Li41MDZiOGQ0IDEwMDY0NAotLS0gYS9zbm1wbGliL01ha2VmaWxlLmluCisrKyBiL3NubXBsaWIvTWFrZWZpbGUuaW4KQEAgLTEzLDYgKzEzLDcgQEAKICMKIAogdG9wX2J1aWxkZGlyPS4uCitteXN1YmRpcj1zbm1wbGliCiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwogIyBWUEFUSCB3aWxsIHBpY2sgdXAgb2JqZWN0cyB0b28sIHdoaWNoIGlzIGJhZCBpZiB5b3UgYXJlIHNoYXJpbmcgYQpAQCAtNDcsNiArNDgsNyBAQAogSU5DTFVERVNVQkRJUkhFQURFUlM9UkVBRE1FIFwKIAlhc24xLmggXAogCWNhbGxiYWNrLmggXAorCWNlcnRfdXRpbC5oIFwKIAljb250YWluZXIuaCBcCiAJY29udGFpbmVyX2JpbmFyeV9hcnJheS5oIFwKIAljb250YWluZXJfbGlzdF9zc2xsLmggXApAQCAtNTUsNiArNTcsNyBAQAogCWZhY3RvcnkuaCBcCiAJZGF0YV9saXN0LmggXAogCWRlZmF1bHRfc3RvcmUuaCBcCisJZGlyX3V0aWxzLmggXAogCWZkX2V2ZW50X21hbmFnZXIuaCBcCiAJZmlsZV91dGlscy5oIFwKIAlpbnQ2NC5oIFwKQEAgLTY3LDYgKzcwLDcgQEAKIAlzbm1wLmggXAogCXNubXBfYWxhcm0uaCBcCiAJc25tcF9hcGkuaCBcCisJbGFyZ2VfZmRfc2V0LmggXAogCXNubXBfYXNzZXJ0LmggXAogCXNubXBfY2xpZW50LmggXAogCXNubXBfZGVidWcuaCBcCkBAIC04MCwxMCArODQsMTEgQEAKIAl0ZXh0X3V0aWxzLmggXAogCXRvb2xzLmggXAogCXRyYW5zZm9ybV9vaWRzLmggXAotICAgICAgICBjbXVfY29tcGF0LmggXAorCXR5cGVzLmggXAogICAgICAgICBnZXRvcHQuaCBcCiAgICAgICAgIGxjZF90aW1lLmggXAogICAgICAgICBtdF9zdXBwb3J0LmggXAorICAgICAgICBvaWQuaCBcCiAgICAgICAgIG9pZF9zdGFzaC5oIFwKICAgICAgICAgc25tcF9lbnVtLmggXAogICAgICAgICBzbm1wX3NlY21vZC5oIFwKQEAgLTExMSw2ICsxMTYsNyBAQAogCXNjYXBpLmgJCVwKIAlzbm1wX2FsYXJtLmgJXAogCXNubXBfYXBpLmgJXAorCWxhcmdlX2ZkX3NldC5oCVwKIAlzbm1wX2NsaWVudC5oCVwKIAlzbm1wX2RlYnVnLmgJXAogCXNubXAuaAkJXApAQCAtMTMyLDU1ICsxMzgsOTEgQEAKIAogIwogIyBUaGluZ3MgdG8gYnVpbGQKKyMgICAtIGZvciB0aGUgZmVhdHVyZSBjaGVja2luZyAvIHJlbW92YWwgLyBtaW5pbWlhbGlzdCBzdXBwb3J0IHRoZXNlCisjICAgICBtdXN0IGJlIGxpc3RlZCBzdWNoIHRoYXQgY29kZSByZXF1aXJpbmcgYSBmZWF0dXJlIG11c3QgYmUgbGlzdGVkCisjICAgICAqYmVmb3JlKiB0aGUgY29kZSBpbXBsZW1lbnRpbmcgdGhlIGZlYXR1cmUuCiAjCiBDU1JDUz0Jc25tcF9jbGllbnQuYyBtaWIuYyBwYXJzZS5jIHNubXBfYXBpLmMgc25tcC5jIAkJXAogCXNubXBfYXV0aC5jIGFzbjEuYyBtZDUuYyBzbm1wX3BhcnNlX2FyZ3MuYwkJXAogCXN5c3RlbS5jIHZhY20uYyBpbnQ2NC5jIHJlYWRfY29uZmlnLmMgcGtjcy5jCQlcCiAJc25tcF9kZWJ1Zy5jIHRvb2xzLmMgIHNubXBfbG9nZ2luZy5jIHRleHRfdXRpbHMuYwlcCi0Jc25tcHYzLmMgbGNkX3RpbWUuYyBrZXl0b29scy5jIGZpbGVfdXRpbHMuYwkJXAorCWxhcmdlX2ZkX3NldC5jIGNlcnRfdXRpbC5jIHNubXBfb3BlbnNzbC5jIAkJXAorCXNubXB2My5jIGxjZF90aW1lLmMga2V5dG9vbHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXNjYXBpLmMgY2FsbGJhY2suYyBkZWZhdWx0X3N0b3JlLmMgc25tcF9hbGFybS5jCQlcCiAJZGF0YV9saXN0LmMgb2lkX3N0YXNoLmMgZmRfZXZlbnRfbWFuYWdlci5jIAkJXAorCWNoZWNrX3ZhcmJpbmQuYyAJCQkJCVwKIAltdF9zdXBwb3J0LmMgc25tcF9lbnVtLmMgc25tcC10Yy5jIHNubXBfc2VydmljZS5jCVwKLQlzbnByaW50Zi5jIHN0cmxjYXQuYyBzdHJsY3B5LmMgc3RydG9sLmMgc3RydG91bC5jCVwKLQlzdHJ0b2tfci5jIHNubXBfdHJhbnNwb3J0LmMgQHRyYW5zcG9ydF9zcmNfbGlzdEAJXAorCXNucHJpbnRmLmMJCQkJCQlcCisJc25tcF90cmFuc3BvcnQuYyBAdHJhbnNwb3J0X3NyY19saXN0QAkJCVwKIAlzbm1wX3NlY21vZC5jIEBzZWN1cml0eV9zcmNfbGlzdEAgc25tcF92ZXJzaW9uLmMgICAgICAgIFwKLQljaGVja192YXJiaW5kLmMgY29udGFpbmVyLmMgY29udGFpbmVyX2JpbmFyeV9hcnJheS5jCVwKIAljb250YWluZXJfbnVsbC5jIGNvbnRhaW5lcl9saXN0X3NzbGwuYyBjb250YWluZXJfaXRlcmF0b3IuYyBcCi0JY211X2NvbXBhdC5jIHVjZF9jb21wYXQuYyBAb3RoZXJfc3JjX2xpc3RACisJdWNkX2NvbXBhdC5jCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlAb3RoZXJfc3JjX2xpc3RAIEBjcnlwdG9fZmlsZXNfY0AgICAgICAgIAkJXAorCWRpcl91dGlscy5jIGZpbGVfdXRpbHMuYyAJICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnRhaW5lci5jIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYwkKIAogT0JKUz0Jc25tcF9jbGllbnQubyBtaWIubyBwYXJzZS5vIHNubXBfYXBpLm8gc25tcC5vIAkJXAogCXNubXBfYXV0aC5vIGFzbjEubyBtZDUubyBzbm1wX3BhcnNlX2FyZ3MubwkJXAogCXN5c3RlbS5vIHZhY20ubyBpbnQ2NC5vIHJlYWRfY29uZmlnLm8gcGtjcy5vIAkJXAogCXNubXBfZGVidWcubyB0b29scy5vICBzbm1wX2xvZ2dpbmcubyB0ZXh0X3V0aWxzLm8JXAotCXNubXB2My5vIGxjZF90aW1lLm8ga2V5dG9vbHMubyBmaWxlX3V0aWxzLm8JCVwKKwlsYXJnZV9mZF9zZXQubyBjZXJ0X3V0aWwubyBzbm1wX29wZW5zc2wubyAJCVwKKwlzbm1wdjMubyBsY2RfdGltZS5vIGtleXRvb2xzLm8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlzY2FwaS5vIGNhbGxiYWNrLm8gZGVmYXVsdF9zdG9yZS5vIHNubXBfYWxhcm0ubwkJXAogCWRhdGFfbGlzdC5vIG9pZF9zdGFzaC5vIGZkX2V2ZW50X21hbmFnZXIubwkJXAorCWNoZWNrX3ZhcmJpbmQubyAJCQkJCVwKIAltdF9zdXBwb3J0Lm8gc25tcF9lbnVtLm8gc25tcC10Yy5vIHNubXBfc2VydmljZS5vCVwKLQlzbnByaW50Zi5vIHN0cmxjYXQubyBzdHJsY3B5Lm8gc3RydG9sLm8gc3RydG91bC5vCVwKLQlzdHJ0b2tfci5vIHNubXBfdHJhbnNwb3J0Lm8gQHRyYW5zcG9ydF9vYmpfbGlzdEAJXAorCXNucHJpbnRmLm8JCQkJCQlcCisJc25tcF90cmFuc3BvcnQubyBAdHJhbnNwb3J0X29ial9saXN0QCAgICAgICAgICAgICAgICAgICBcCiAJc25tcF9zZWNtb2QubyBAc2VjdXJpdHlfb2JqX2xpc3RAIHNubXBfdmVyc2lvbi5vICAgICAgICBcCi0JY2hlY2tfdmFyYmluZC5vIGNvbnRhaW5lci5vIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkubwlcCiAJY29udGFpbmVyX251bGwubyBjb250YWluZXJfbGlzdF9zc2xsLm8gY29udGFpbmVyX2l0ZXJhdG9yLm8gXAotCWNtdV9jb21wYXQubyB1Y2RfY29tcGF0Lm8gQG90aGVyX29ianNfbGlzdEAKKwl1Y2RfY29tcGF0Lm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlcCisgICAgICAgIEBjcnlwdG9fZmlsZXNfb0AgQG90aGVyX29ianNfbGlzdEAgQExJQk9CSlNAIAkJXAorCWRpcl91dGlscy5vIGZpbGVfdXRpbHMubyAJICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnRhaW5lci5vIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkubwkKIAogTE9CSlM9CXNubXBfY2xpZW50LmxvIG1pYi5sbyBwYXJzZS5sbyBzbm1wX2FwaS5sbyBzbm1wLmxvIAlcCiAJc25tcF9hdXRoLmxvIGFzbjEubG8gbWQ1LmxvIHNubXBfcGFyc2VfYXJncy5sbwkJXAogCXN5c3RlbS5sbyB2YWNtLmxvIGludDY0LmxvIHJlYWRfY29uZmlnLmxvIHBrY3MubG8JXAogCXNubXBfZGVidWcubG8gdG9vbHMubG8gIHNubXBfbG9nZ2luZy5sbwkgdGV4dF91dGlscy5sbwlcCi0Jc25tcHYzLmxvIGxjZF90aW1lLmxvIGtleXRvb2xzLmxvIGZpbGVfdXRpbHMubG8JCVwKLQlzY2FwaS5sbyBjYWxsYmFjay5sbyBkZWZhdWx0X3N0b3JlLmxvIHNubXBfYWxhcm0ubG8JCVwKKwlsYXJnZV9mZF9zZXQubG8gY2VydF91dGlsLmxvIHNubXBfb3BlbnNzbC5sbyAJCVwKKwlzbm1wdjMubG8gbGNkX3RpbWUubG8ga2V5dG9vbHMubG8gICAgICAgICAgICAgICAgICAgICAgIFwKKwlzY2FwaS5sbyBjYWxsYmFjay5sbyBkZWZhdWx0X3N0b3JlLmxvIHNubXBfYWxhcm0ubG8JXAogCWRhdGFfbGlzdC5sbyBvaWRfc3Rhc2gubG8gZmRfZXZlbnRfbWFuYWdlci5sbwkJXAorCWNoZWNrX3ZhcmJpbmQubG8gCQkJCQlcCiAJbXRfc3VwcG9ydC5sbyBzbm1wX2VudW0ubG8gc25tcC10Yy5sbyBzbm1wX3NlcnZpY2UubG8JXAotCXNucHJpbnRmLmxvIHN0cmxjYXQubG8gc3RybGNweS5sbyBzdHJ0b2wubG8gc3RydG91bC5sbwlcCi0Jc3RydG9rX3IubG8gc25tcF90cmFuc3BvcnQubG8gQHRyYW5zcG9ydF9sb2JqX2xpc3RACVwKLQlzbm1wX3NlY21vZC5sbyBAc2VjdXJpdHlfbG9ial9saXN0QCBzbm1wX3ZlcnNpb24ubG8gICAgICAgXAotCWNoZWNrX3ZhcmJpbmQubG8gY29udGFpbmVyLmxvIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG8JXAotCWNvbnRhaW5lcl9udWxsLmxvIGNvbnRhaW5lcl9saXN0X3NzbGwubG8gY29udGFpbmVyX2l0ZXJhdG9yLmxvIFwKLQljbXVfY29tcGF0LmxvIHVjZF9jb21wYXQubG8gQG90aGVyX2xvYmpzX2xpc3RACisJc25wcmludGYubG8JCQkJCQlcCisJc25tcF90cmFuc3BvcnQubG8gQHRyYW5zcG9ydF9sb2JqX2xpc3RAICAgICAgICAgICAgICAgICBcCisJc25tcF9zZWNtb2QubG8gQHNlY3VyaXR5X2xvYmpfbGlzdEAgc25tcF92ZXJzaW9uLmxvICAgICBcCisJY29udGFpbmVyLmxvIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG8JCQlcCisJdWNkX2NvbXBhdC5sbwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEBjcnlwdG9fZmlsZXNfbG9AIEBvdGhlcl9sb2Jqc19saXN0QCBATFRMSUJPQkpTQCAgICAgICAgXAorCWRpcl91dGlscy5sbyBmaWxlX3V0aWxzLmxvIAkgICAgICAgICAgICAgICAgICAgICAgICBcCisJY29udGFpbmVyX251bGwubG8gY29udGFpbmVyX2xpc3Rfc3NsbC5sbyBjb250YWluZXJfaXRlcmF0b3IubG8gCisKK0ZUT0JKUz0Jc25tcF9jbGllbnQuZnQgbWliLmZ0IHBhcnNlLmZ0IHNubXBfYXBpLmZ0IHNubXAuZnQgCVwKKwlzbm1wX2F1dGguZnQgYXNuMS5mdCBtZDUuZnQgc25tcF9wYXJzZV9hcmdzLmZ0CQlcCisJc3lzdGVtLmZ0IHZhY20uZnQgaW50NjQuZnQgcmVhZF9jb25maWcuZnQgcGtjcy5mdAlcCisJc25tcF9kZWJ1Zy5mdCB0b29scy5mdCAgc25tcF9sb2dnaW5nLmZ0CSB0ZXh0X3V0aWxzLmZ0CVwKKwlzbm1wdjMuZnQgbGNkX3RpbWUuZnQga2V5dG9vbHMuZnQgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzY2FwaS5mdCBjYWxsYmFjay5mdCBkZWZhdWx0X3N0b3JlLmZ0IHNubXBfYWxhcm0uZnQJXAorCWRhdGFfbGlzdC5mdCBvaWRfc3Rhc2guZnQgZmRfZXZlbnRfbWFuYWdlci5mdAkJXAorCWNoZWNrX3ZhcmJpbmQuZnQgCQkJCQlcCisJbXRfc3VwcG9ydC5mdCBzbm1wX2VudW0uZnQgc25tcC10Yy5mdCBzbm1wX3NlcnZpY2UuZnQJXAorCXNucHJpbnRmLmZ0CQkJCQkJXAorCXNubXBfdHJhbnNwb3J0LmZ0IEB0cmFuc3BvcnRfZnRvYmpfbGlzdEAgICAgICAgICAgICAgICAgXAorCXNubXBfc2VjbW9kLmZ0IEBzZWN1cml0eV9mdG9ial9saXN0QCBzbm1wX3ZlcnNpb24uZnQgICAgXAorCWNvbnRhaW5lci5mdCBjb250YWluZXJfYmluYXJ5X2FycmF5LmZ0CVwKKwl1Y2RfY29tcGF0LmZ0CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIEBvdGhlcl9mdG9ianNfbGlzdEAgICAgICAgICAgICAgICAgICAgICAJCVwKKwlsYXJnZV9mZF9zZXQuZnQgY2VydF91dGlsLmZ0IHNubXBfb3BlbnNzbC5mdCAJCVwKKwlkaXJfdXRpbHMuZnQgZmlsZV91dGlscy5mdCAJICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnRhaW5lcl9udWxsLmZ0IGNvbnRhaW5lcl9saXN0X3NzbGwuZnQgY29udGFpbmVyX2l0ZXJhdG9yLmZ0CiAKICMganVzdCBpbiBjYXNlIHNvbWVvbmUgd2FudHMgdG8gcmVtb3ZlIGxpYnRvb2wsIGNoYW5nZSB0aGlzIHRvIE9CSlMuCiBUT0JKUz0kKExPQkpTKQogCitGRUFUVVJFRklMRSAgICAgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZlYXR1cmVzLmgKKwogIyAKIENQUEZMQUdTID0gJChUT1BfSU5DTFVERVMpIC1JLiAJJChTTk1QTElCX0lOQ0xVREVTKSBAQ1BQRkxBR1NACiAKQEAgLTE4OCwxMSArMjMwLDExIEBACiAKICMgaG93IHRvIGJ1aWxkIHRoZSBsaWJyYXJpZXMuCiBsaWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChUT0JKUykKLQkkKExJQl9MRF9DTUQpICRAICQoVE9CSlMpICQoTERGTEFHUykgQExORVRTTk1QTElCU0AKKwkkKExJQl9MRF9DTUQpICRAICQoVE9CSlMpIEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgQExORVRTTk1QTElCU0AKIAkkKFJBTkxJQikgJEAKIAogbGlic25tcC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICAgICQoVE9CSlMpCi0JJChMSUJfTERfQ01EKSAkQCAkKFRPQkpTKSAkKExERkxBR1MpIEBMTkVUU05NUExJQlNACisJJChMSUJfTERfQ01EKSAkQCAkKFRPQkpTKSBATERfTk9fVU5ERUZJTkVEQCAkKExERkxBR1MpIEBMTkVUU05NUExJQlNACiAJJChSQU5MSUIpICRACiAKICMKQEAgLTIwMSw3ICsyNDMsMyBAQAogcGFyc2U6ICBtaWIubyBwYXJzZS5jCiAJJChDQykgJChDRkxBR1MpIC1EVEVTVCBwYXJzZS5jIC1vICRAIFwKIAkJYCQodG9wX3NyY2RpcikvbmV0LXNubXAtY29uZmlnIC0tbGlic2AKLQotdGVzdF9iaW5hcnlfYXJyYXk6IHRlc3RfYmluYXJ5X2FycmF5LmMKLQkkKENDKSAkKENGTEFHUykgdGVzdF9iaW5hcnlfYXJyYXkuYyAtbyAkQCBcCi0JCWAkKHRvcF9zcmNkaXIpL25ldC1zbm1wLWNvbmZpZyAtLWxpYnNgCmRpZmYgLS1naXQgYS9zbm1wbGliL2FzbjEuYyBiL3NubXBsaWIvYXNuMS5jCmluZGV4IDIzNDZlNmMuLmJlYThkMGIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvYXNuMS5jCisrKyBiL3NubXBsaWIvYXNuMS5jCkBAIC0xNzAsOSArMTcwLDYgQEAKICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC0yNTEsNiArMjQ4LDI0IEBACiB9CiAKIC8qKgorICogQGludGVybmFsCisgKiBvdXRwdXQgYW4gZXJyb3IgZm9yIGEgd3JvbmcgdHlwZQorICogCisgKiBAcGFyYW0gc3RyICAgICAgICBlcnJvciBzdHJpbmcKKyAqIEBwYXJhbSB3cm9uZ3R5cGUgIHdyb25nIHR5cGUKKyAqLworc3RhdGljCisgICAgdm9pZAorX2Fzbl90eXBlX2Vycihjb25zdCBjaGFyICpzdHIsIGludCB3cm9uZ3R5cGUpCit7CisgICAgY2hhciAgICAgICAgICAgIGVidWZbMTI4XTsKKworICAgIHNucHJpbnRmKGVidWYsIHNpemVvZihlYnVmKSwgIiVzIHR5cGUgJWQiLCBzdHIsIHdyb25ndHlwZSk7CisgICAgZWJ1Zlsgc2l6ZW9mKGVidWYpLTEgXSA9IDA7CisgICAgRVJST1JfTVNHKGVidWYpOworfQorCisvKioKICAqIEBpbnRlcm5hbCAKICAqIG91dHB1dCBhbiBlcnJvciBmb3IgYSB3cm9uZyBsZW5ndGgKICAqIApAQCAtNDgyLDEyICs0OTcsMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX0lOVEVHRVIpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjawogICAgICAgICAoZXJycHJlLCBidWZwLCBkYXRhLCBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKChzaXplX3QpIGFzbl9sZW5ndGggPiBpbnRzaXplKSB7CisgICAgaWYgKChzaXplX3QpIGFzbl9sZW5ndGggPiBpbnRzaXplIHx8IChpbnQpIGFzbl9sZW5ndGggPT0gMCkgewogICAgICAgICBfYXNuX2xlbmd0aF9lcnIoZXJycHJlLCAoc2l6ZV90KSBhc25fbGVuZ3RoLCBpbnRzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNTAzLDcgKzUyMyw3IEBACiAKICAgICBDSEVDS19PVkVSRkxPV19TKHZhbHVlLDEpOwogCi0gICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CisgICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJsWClcbiIsIHZhbHVlLCB2YWx1ZSkpOwogCiAgICAgKmludHAgPSB2YWx1ZTsKICAgICByZXR1cm4gYnVmcDsKQEAgLTU0OSwxMyArNTY5LDE4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9DT1VOVEVSICYmICp0eXBlICE9IEFTTl9HQVVHRSAmJiAqdHlwZSAhPSBBU05fVElNRVRJQ0tTCisgICAgICAgICAgICAmJiAqdHlwZSAhPSBBU05fVUlOVEVHRVIpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2sKICAgICAgICAgKGVycnByZSwgYnVmcCwgZGF0YSwgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgoKGludCkgYXNuX2xlbmd0aCA+IChpbnRzaXplICsgMSkpIHx8Ci0gICAgICAgICgoKGludCkgYXNuX2xlbmd0aCA9PSBpbnRzaXplICsgMSkgJiYgKmJ1ZnAgIT0gMHgwMCkpIHsKKyAgICBpZiAoKGFzbl9sZW5ndGggPiAoaW50c2l6ZSArIDEpKSB8fCAoKGludCkgYXNuX2xlbmd0aCA9PSAwKSB8fAorICAgICAgICAoKGFzbl9sZW5ndGggPT0gaW50c2l6ZSArIDEpICYmICpidWZwICE9IDB4MDApKSB7CiAgICAgICAgIF9hc25fbGVuZ3RoX2VycihlcnJwcmUsIChzaXplX3QpIGFzbl9sZW5ndGgsIGludHNpemUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC01NzAsNyArNTk1LDcgQEAKIAogICAgIENIRUNLX09WRVJGTE9XX1UodmFsdWUsMik7CiAKLSAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBVSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CisgICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgVUludGVnZXI6XHQlbGQgKDB4JS4ybFgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKIAogICAgICppbnRwID0gdmFsdWU7CiAgICAgcmV0dXJuIGJ1ZnA7CkBAIC02NDksNyArNjc0LDcgQEAKICAgICAgICAgaW50ZWdlciA8PD0gODsKICAgICB9CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCBpbml0ZGF0YXAsIGRhdGEgLSBpbml0ZGF0YXApOwotICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsICppbnRwLCAqaW50cCkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4ybFgpXG4iLCAqaW50cCwgKmludHApKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIApAQCAtNzQ1LDcgKzc3MCw3IEBACiAgICAgICAgIGludGVnZXIgPDw9IDg7CiAgICAgfQogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgaW5pdGRhdGFwLCBkYXRhIC0gaW5pdGRhdGFwKTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBVSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgKmludHAsICppbnRwKSk7CisgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgVUludGVnZXI6XHQlbGQgKDB4JS4ybFgpXG4iLCAqaW50cCwgKmludHApKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIApAQCAtNzg4LDEzICs4MTMsMTkgQEAKICAgICB1X2xvbmcgICAgICAgICAgYXNuX2xlbmd0aDsKIAogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX09DVEVUX1NUUiAmJiAqdHlwZSAhPSBBU05fSVBBRERSRVNTICYmICp0eXBlICE9IEFTTl9PUEFRVUUKKyAgICAgICAgICAgICYmICp0eXBlICE9IEFTTl9OU0FQKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2sKICAgICAgICAgKGVycnByZSwgYnVmcCwgZGF0YSwgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgoaW50KSBhc25fbGVuZ3RoID4gKnN0cmxlbmd0aCkgeworICAgIGlmIChhc25fbGVuZ3RoID4gKnN0cmxlbmd0aCkgewogICAgICAgICBfYXNuX2xlbmd0aF9lcnIoZXJycHJlLCAoc2l6ZV90KSBhc25fbGVuZ3RoLCAqc3RybGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtODAyLDEwICs4MzMsMTAgQEAKICAgICBERUJVR0RVTVBTRVRVUCgicmVjdiIsIGRhdGEsIGJ1ZnAgLSBkYXRhICsgYXNuX2xlbmd0aCk7CiAKICAgICBtZW1tb3ZlKHN0ciwgYnVmcCwgYXNuX2xlbmd0aCk7Ci0gICAgaWYgKCpzdHJsZW5ndGggPiAoaW50KSBhc25fbGVuZ3RoKQorICAgIGlmICgqc3RybGVuZ3RoID4gYXNuX2xlbmd0aCkKICAgICAgICAgc3RyW2Fzbl9sZW5ndGhdID0gMDsKLSAgICAqc3RybGVuZ3RoID0gKGludCkgYXNuX2xlbmd0aDsKLSAgICAqZGF0YWxlbmd0aCAtPSAoaW50KSBhc25fbGVuZ3RoICsgKGJ1ZnAgLSBkYXRhKTsKKyAgICAqc3RybGVuZ3RoID0gYXNuX2xlbmd0aDsKKyAgICAqZGF0YWxlbmd0aCAtPSBhc25fbGVuZ3RoICsgKGJ1ZnAgLSBkYXRhKTsKIAogICAgIERFQlVHSUYoImR1bXB2X3JlY3YiKSB7CiAgICAgICAgIHVfY2hhciAgICAgICAgICpidWYgPSAodV9jaGFyICopIG1hbGxvYygxICsgYXNuX2xlbmd0aCk7CkBAIC0xMjg2LDYgKzEzMTcsNyBAQAogICAgICAgICAgICAgICAgIHNpemVfdCAqIGRhdGFsZW5ndGgsCiAgICAgICAgICAgICAgICAgdV9jaGFyICogdHlwZSwgb2lkICogb2JqaWQsIHNpemVfdCAqIG9iamlkbGVuZ3RoKQogeworICAgIHN0YXRpYyBjb25zdCBjaGFyICplcnJwcmUgPSAicGFyc2Ugb2JqaWQiOwogICAgIC8qCiAgICAgICogQVNOLjEgb2JqaWQgOjo9IDB4MDYgYXNubGVuZ3RoIHN1YmlkZW50aWZpZXIge3N1YmlkZW50aWZpZXJ9KgogICAgICAqIHN1YmlkZW50aWZpZXIgOjo9IHtsZWFkaW5nYnl0ZX0qIGxhc3RieXRlCkBAIC0xMzAwLDYgKzEzMzIsMTAgQEAKICAgICBzaXplX3QgICAgICAgICAgb3JpZ2luYWxfbGVuZ3RoID0gKm9iamlkbGVuZ3RoOwogCiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fT0JKRUNUX0lEKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrKCJwYXJzZSBvYmppZCIsIGJ1ZnAsIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkKQEAgLTE2NjksNiArMTcwNSwxMCBAQAogICAgIHVfbG9uZyAgICAgICAgICBhc25fbGVuZ3RoOwogCiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fQklUX1NUUikgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjayhlcnJwcmUsIGJ1ZnAsIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkKQEAgLTE3ODksNiArMTgyOSwxNCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fQ09VTlRFUjY0CisjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisgICAgICAgICAgICAmJiAqdHlwZSAhPSBBU05fT1BBUVVFCisjZW5kaWYKKyAgICAgICAgICAgICkgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjawogICAgICAgICAoZXJycHJlLCBidWZwLCBkYXRhLCBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpCkBAIC0xOTg4LDcgKzIwMzYsNyBAQAogICAgIERFQlVHSUYoImR1bXB2X3NlbmQiKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBpNjRidWZbSTY0Q0hBUlNaICsgMV07CiAgICAgICAgIHByaW50VTY0KGk2NGJ1ZiwgY3ApOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCBpNjRidWYpKTsKKyAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiVzIiwgaTY0YnVmKSk7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQpAQCAtMjIyNCw2ICsyMjcyLDcgQEAKICAgICAgICAgICAgICAgICBzaXplX3QgKiBkYXRhbGVuZ3RoLAogICAgICAgICAgICAgICAgIHVfY2hhciAqIHR5cGUsIGZsb2F0ICpmbG9hdHAsIHNpemVfdCBmbG9hdHNpemUpCiB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmVycnByZSA9ICJwYXJzZSBmbG9hdCI7CiAgICAgcmVnaXN0ZXIgdV9jaGFyICpidWZwID0gZGF0YTsKICAgICB1X2xvbmcgICAgICAgICAgYXNuX2xlbmd0aDsKICAgICB1bmlvbiB7CkBAIC0yMjY0LDYgKzIzMTMsMTEgQEAKICAgICAgICAgKnR5cGUgPSBBU05fT1BBUVVFX0ZMT0FUOwogICAgIH0KIAorICAgIGlmICgqdHlwZSAhPSBBU05fT1BBUVVFX0ZMT0FUKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGlmIChhc25fbGVuZ3RoICE9IHNpemVvZihmbG9hdCkpIHsKICAgICAgICAgX2Fzbl9zaXplX2VycigicGFyc2Ugc2VxIGZsb2F0IiwgYXNuX2xlbmd0aCwgc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM4OSw2ICsyNDQzLDcgQEAKICAgICAgICAgICAgICAgICAgc2l6ZV90ICogZGF0YWxlbmd0aCwKICAgICAgICAgICAgICAgICAgdV9jaGFyICogdHlwZSwgZG91YmxlICpkb3VibGVwLCBzaXplX3QgZG91Ymxlc2l6ZSkKIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqZXJycHJlID0gInBhcnNlIGRvdWJsZSI7CiAgICAgcmVnaXN0ZXIgdV9jaGFyICpidWZwID0gZGF0YTsKICAgICB1X2xvbmcgICAgICAgICAgYXNuX2xlbmd0aDsKICAgICBsb25nICAgICAgICAgICAgdG1wOwpAQCAtMjQzMSw2ICsyNDg2LDExIEBACiAgICAgICAgICp0eXBlID0gQVNOX09QQVFVRV9ET1VCTEU7CiAgICAgfQogCisgICAgaWYgKCp0eXBlICE9IEFTTl9PUEFRVUVfRE9VQkxFKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGlmIChhc25fbGVuZ3RoICE9IHNpemVvZihkb3VibGUpKSB7CiAgICAgICAgIF9hc25fc2l6ZV9lcnIoInBhcnNlIHNlcSBkb3VibGUiLCBhc25fbGVuZ3RoLCBzaXplb2YoZG91YmxlKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjU1NywxNSArMjYxNywxNiBAQAogICAgIGlmIChwa3QgIT0gTlVMTCAmJiBwa3RfbGVuICE9IE5VTEwpIHsKICAgICAgICAgc2l6ZV90ICAgICAgICAgIG9sZF9wa3RfbGVuID0gKnBrdF9sZW47CiAKLSAgICAgICAgREVCVUdNU0dUTCgoImFzbl9yZWFsbG9jIiwgIiBvbGRfcGt0ICUwOHAsIG9sZF9wa3RfbGVuICUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICpwa3QsIG9sZF9wa3RfbGVuKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJhc25fcmVhbGxvYyIsICIgb2xkX3BrdCAlOHAsIG9sZF9wa3RfbGVuICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKnBrdCwgKHVuc2lnbmVkIGxvbmcpb2xkX3BrdF9sZW4pKTsKIAogICAgICAgICBpZiAoc25tcF9yZWFsbG9jKHBrdCwgcGt0X2xlbikpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhc25fcmVhbGxvYyIsICIgbmV3X3BrdCAlMDhwLCBuZXdfcGt0X2xlbiAlMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKnBrdCwgKnBrdF9sZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhc25fcmVhbGxvYyIsICIgbmV3X3BrdCAlOHAsIG5ld19wa3RfbGVuICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICpwa3QsICh1bnNpZ25lZCBsb25nKSpwa3RfbGVuKSk7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgiYXNuX3JlYWxsb2MiLAotICAgICAgICAgICAgICAgICAgICAgICAgIiBtZW1tb3ZlKCUwOHAgKyAlMDh4LCAlMDhwLCAlMDh4KVxuIiwgKnBrdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICgqcGt0X2xlbiAtIG9sZF9wa3RfbGVuKSwgKnBrdCwgb2xkX3BrdF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgbWVtbW92ZSglOHAgKyAlMDh4LCAlOHAsICUwOHgpXG4iLAorCQkJKnBrdCwgKHVuc2lnbmVkKSgqcGt0X2xlbiAtIG9sZF9wa3RfbGVuKSwKKwkJCSpwa3QsICh1bnNpZ25lZClvbGRfcGt0X2xlbikpOwogICAgICAgICAgICAgbWVtbW92ZSgqcGt0ICsgKCpwa3RfbGVuIC0gb2xkX3BrdF9sZW4pLCAqcGt0LCBvbGRfcGt0X2xlbik7CiAgICAgICAgICAgICBtZW1zZXQoKnBrdCwgKGludCkgJyAnLCAqcGt0X2xlbiAtIG9sZF9wa3RfbGVuKTsKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMjc1Niw3ICsyODE3LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpwa3QgKyAqcGt0X2xlbiAtICpvZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpvZmZzZXQgLSBzdGFydF9vZmZzZXQpKTsKLSAgICAgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsICppbnRwLAorICAgICAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJsWClcbiIsICppbnRwLAogICAgICAgICAgICAgICAgICAgICAgICppbnRwKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQpAQCAtMjkwOSw3ICsyOTcwLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgKCpwa3QgKyAqcGt0X2xlbiAtICpvZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpvZmZzZXQgLSBzdGFydF9vZmZzZXQpKTsKLSAgICAgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIFVJbnRlZ2VyOlx0JWx1ICgweCUuMlgpXG4iLCAqaW50cCwKKyAgICAgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIFVJbnRlZ2VyOlx0JWx1ICgweCUuMmxYKVxuIiwgKmludHAsCiAgICAgICAgICAgICAgICAgICAgICAgKmludHApKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zbm1wbGliL2NhbGxiYWNrLmMgYi9zbm1wbGliL2NhbGxiYWNrLmMKaW5kZXggZTQzNDA0Mi4uZGZlNTM3YSAxMDA2NDQKLS0tIGEvc25tcGxpYi9jYWxsYmFjay5jCisrKyBiL3NubXBsaWIvY2FsbGJhY2suYwpAQCAtMTcsMTQgKzE3LDEyIEBACiAgKiAgQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC01NSw2ICs1MywxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWxsYmFja3NfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FsbGJhY2tfY291bnQsIGNhbGxiYWNrc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FsbGJhY2tfbGlzdCwgY2FsbGJhY2tzX2FsbCkKKwogLyoKICAqIHRoZSBpbmxpbmUgY2FsbGJhY2sgbWV0aG9kcyB1c2UgbWFqb3IvbWlub3IgdG8gaW5kZXggaW50byBhcnJheXMuCiAgKiBhbGwgdXNlcnMgaW4gdGhpcyBmdW5jdGlvbiBkbyByYW5nZSBjaGVja2luZyBiZWZvcmUgY2FsbGluZyB0aGVzZQpAQCAtMTE1LDcgKzExOCw3IEBACiAjZW5kaWYKIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAotX2NhbGxiYWNrX2xvY2soaW50IG1ham9yLCBpbnQgbWlub3IsIGNvbnN0IGNoYXIqIHdhcm4sIGludCBhc3NlcnQpCitfY2FsbGJhY2tfbG9jayhpbnQgbWFqb3IsIGludCBtaW5vciwgY29uc3QgY2hhciogd2FybiwgaW50IGRvX2Fzc2VydCkKIHsKICAgICBpbnQgbG9ja19ob2xkZWQ9MDsKICAgICBzdHJ1Y3QgdGltZXZhbCBsb2NrX3RpbWUgPSB7IDAsIDEwMDAgfTsKQEAgLTEzOSw3ICsxNDIsNyBAQAogICAgICAgICBpZiAoTlVMTCAhPSB3YXJuKQogICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCiAgICAgICAgICAgICAgICAgICAgICAibG9jayBpbiBfY2FsbGJhY2tfbG9jayBzbGVlcHMgbW9yZSB0aGFuIDEwMCBtaWxsaXNlY29uZHMgaW4gJXNcbiIsIHdhcm4pOwotICAgICAgICBpZiAoYXNzZXJ0KQorICAgICAgICBpZiAoZG9fYXNzZXJ0KQogICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQobG9ja19ob2xkZWQgPCAxMDApOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yMTcsNyArMjIwLDkgQEAKICAqIEBwYXJhbSBuZXdfY2FsbGJhY2sgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgcmVnaXN0ZXJlZC4KICAqCiAgKiBAcGFyYW0gYXJnIHdoZW4gbm90IE5VTEwgaXMgYSB2b2lkIHBvaW50ZXIgdXNlZCB3aGVuZXZlciBuZXdfY2FsbGJhY2sgCi0gKglmdW5jdGlvbiBpcyBleGVyY2lzZWQuCisgKglmdW5jdGlvbiBpcyBleGVyY2lzZWQuIE93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgdHdvZGltZW5zaW9uYWwKKyAqICAgICAgdGhlY2FsbGJhY2tzW11bXSBhcnJheS4gVGhlIGZ1bmN0aW9uIGNsZWFyX2NhbGxiYWNrKCkgd2lsbCBkZWFsbG9jYXRlCisgKiAgICAgIHRoZSBtZW1vcnkgcG9pbnRlZCBhdCBieSBjYWxsaW5nIGZyZWUoKS4KICAqCiAgKiBAcmV0dXJuIAogICoJUmV0dXJucyBTTk1QRVJSX0dFTkVSUiBpZiBtYWpvciBpcyA+PSBNQVhfQ0FMTEJBQ0tfSURTIG9yIG1pbm9yIGlzID49CkBAIC0yMzcsNiArMjQyLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQ0FMTEJBQ0tfREVGQVVMVF9QUklPUklUWSk7CiB9CiAKKy8qKgorICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gbWFqb3IgICAgICAgIE1ham9yIGNhbGxiYWNrIGV2ZW50IHR5cGUuCisgKiBAcGFyYW0gbWlub3IgICAgICAgIE1pbm9yIGNhbGxiYWNrIGV2ZW50IHR5cGUuCisgKiBAcGFyYW0gbmV3X2NhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIGJlaW5nIHJlZ2lzdGVyZWQuCisgKiBAcGFyYW0gYXJnICAgICAgICAgIEFyZ3VtZW50IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtIHByaW9yaXR5ICAgICBIYW5kbGVyIGludm9jYXRpb24gcHJpb3JpdHkuIFdoZW4gbXVsdGlwbGUgaGFuZGxlcnMgaGF2ZQorICogICBiZWVuIHJlZ2lzdGVyZWQgZm9yIHRoZSBzYW1lIChtYWpvciwgbWlub3IpIGNhbGxiYWNrIGV2ZW50IHR5cGUsIGhhbmRsZXJzCisgKiAgIHdpdGggdGhlIG51bWVyaWNhbGx5IGxvd2VzdCBwcmlvcml0eSB3aWxsIGJlIGludm9rZWQgZmlyc3QuIEhhbmRsZXJzIHdpdGgKKyAqICAgaWRlbnRpY2FsIHByaW9yaXR5IGFyZSBpbnZva2VkIGluIHRoZSBvcmRlciB0aGV5IGhhdmUgYmVlbiByZWdpc3RlcmVkLgorICoKKyAqIEBzZWUgc25tcF9yZWdpc3Rlcl9jYWxsYmFjaworICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqIG5ld19jYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnLCBpbnQgcHJpb3JpdHkpCkBAIC0zNTQsNiArMzczLDcgQEAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMTEJBQ0tfQ09VTlQKIGludAogc25tcF9jb3VudF9jYWxsYmFja3MoaW50IG1ham9yLCBpbnQgbWlub3IpCiB7CkBAIC0zNzMsNiArMzkzLDcgQEAKIAogICAgIHJldHVybiBjb3VudDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTExCQUNLX0NPVU5UICovCiAKIGludAogc25tcF9jYWxsYmFja19hdmFpbGFibGUoaW50IG1ham9yLCBpbnQgbWlub3IpCkBAIC01NTEsNiArNTcyLDcgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxMQkFDS19MSVNUCiBzdHJ1Y3Qgc25tcF9nZW5fY2FsbGJhY2sgKgogc25tcF9jYWxsYmFja19saXN0KGludCBtYWpvciwgaW50IG1pbm9yKQogewpAQCAtNTU5LDQgKzU4MSw1IEBACiAKICAgICByZXR1cm4gKHRoZWNhbGxiYWNrc1ttYWpvcl1bbWlub3JdKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTExCQUNLX0xJU1QgKi8KIC8qKiAgQH0gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY2VydF91dGlsLmMgYi9zbm1wbGliL2NlcnRfdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmE2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2NlcnRfdXRpbC5jCkBAIC0wLDAgKzEsMzM2NyBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF91dGlsX2FsbCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X3V0aWwsIGNlcnRfdXRpbF9hbGwpCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ0VSVF9VVElMCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZGlyZWN0b3J5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZpZm8pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZHVwKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZyZWVfYWxsKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3ViY29udGFpbmVyX2ZpbmQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X21hcF9yZW1vdmUsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfbWFwX2ZpbmQsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtcGFyYW1zX2V4dGVybmFsLCBjZXJ0X3V0aWxfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtcGFyYW1zX2NvbnRhaW5lciwgdGxzdG1wYXJhbXNfZXh0ZXJuYWwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1wYXJhbXNfcmVtb3ZlLCB0bHN0bXBhcmFtc19leHRlcm5hbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bXBhcmFtc19maW5kLCB0bHN0bXBhcmFtc19leHRlcm5hbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bUFkZHJfcmVtb3ZlLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bWFkZHJfZXh0ZXJuYWwsIGNlcnRfdXRpbF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1hZGRyX2NvbnRhaW5lciwgdGxzdG1hZGRyX2V4dGVybmFsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtQWRkcl9nZXRfc2VydmVySWQsIHRsc3RtYWRkcl9leHRlcm5hbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfZmluZ2VycHJpbnRzLCBjZXJ0X3V0aWxfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc19maW5nZXJwcmludF9idWlsZCwgY2VydF91dGlsX2FsbCkKKworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NFUlRfVVRJTCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9VVElMCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjICAgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSBzdHJsZW4oKGRpcmVudCktPmRfbmFtZSkKKyNlbHNlCisjIGRlZmluZSBkaXJlbnQgZGlyZWN0CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSAoZGlyZW50KS0+ZF9uYW1sZW4KKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmg+CisKKyNpZm5kZWYgTkFNRV9NQVgKKyNkZWZpbmUgTkFNRV9NQVggMjU1CisjZW5kaWYKKworLyoKKyAqIGJ1bXAgdGhpcyB2YWx1ZSB3aGVuZXZlciBjZXJ0IGluZGV4IGZvcm1hdCBjaGFuZ2VzLCBzbyBpbmRleGVzCisgKiB3aWxsIGJlIHJlZ2VuZXJhdGVkIHdpdGggbmV3IGZvcm1hdC4KKyAqLworI2RlZmluZSBDRVJUX0lOREVYX0ZPUk1BVCAgMQorCitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl9jZXJ0cyA9IE5VTEw7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl9rZXlzID0gTlVMTDsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX21hcHMgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfdGxzdG1QYXJhbXMgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfdGxzdG1BZGRyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKl9jZXJ0aW5kZXhlcyA9IE5VTEw7CisKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX3RydXN0ZWRfY2VydHMgPSBOVUxMOworCitzdGF0aWMgdm9pZCBfc2V0dXBfY29udGFpbmVycyh2b2lkKTsKKworc3RhdGljIHZvaWQgX2NlcnRfaW5kZXhlc19sb2FkKHZvaWQpOworc3RhdGljIHZvaWQgX2NlcnRfZnJlZShuZXRzbm1wX2NlcnQgKmNlcnQsIHZvaWQgKmNvbnRleHQpOworc3RhdGljIHZvaWQgX2tleV9mcmVlKG5ldHNubXBfa2V5ICprZXksIHZvaWQgKmNvbnRleHQpOworc3RhdGljIGludCAgX2NlcnRfY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpOworc3RhdGljIGludCAgX2NlcnRfc25fY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpOworc3RhdGljIGludCAgX2NlcnRfc25fbmNvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKTsKK3N0YXRpYyBpbnQgIF9jZXJ0X2NuX2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKTsKK3N0YXRpYyBpbnQgIF9jZXJ0X2ZuX2NvbXBhcmUobmV0c25tcF9jZXJ0X2NvbW1vbiAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfY29tbW9uICpyaHMpOworc3RhdGljIGludCAgX2NlcnRfZm5fbmNvbXBhcmUobmV0c25tcF9jZXJ0X2NvbW1vbiAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiAqcmhzKTsKK3N0YXRpYyB2b2lkIF9maW5kX3BhcnRuZXIobmV0c25tcF9jZXJ0ICpjZXJ0LCBuZXRzbm1wX2tleSAqa2V5KTsKK3N0YXRpYyBuZXRzbm1wX2NlcnQgKl9maW5kX2lzc3VlcihuZXRzbm1wX2NlcnQgKmNlcnQpOworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqX2NlcnRfZmluZF9zdWJzZXRfZm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkpOworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqX2NlcnRfZmluZF9zdWJzZXRfc24oY29uc3QgY2hhciAqc3ViamVjdCk7CitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICpfa2V5X2ZpbmRfc3Vic2V0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBuZXRzbm1wX2NlcnQgKl9jZXJ0X2ZpbmRfZnAoY29uc3QgY2hhciAqZmluZ2VycHJpbnQpOworc3RhdGljIGNoYXIgKl9maW5kX3Rsc3RtUGFyYW1zX2ZpbmdlcnByaW50KGNvbnN0IGNoYXIgKnBhcmFtKTsKK3N0YXRpYyBjaGFyICpfZmluZF90bHN0bUFkZHJfZmluZ2VycHJpbnQoY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgY29uc3QgY2hhciAqX21vZGVfc3RyKHVfY2hhciBtb2RlKTsKK3N0YXRpYyBjb25zdCBjaGFyICpfd2hlcmVfc3RyKHVfaW50IHdoYXQpOwordm9pZCBuZXRzbm1wX2NlcnRfZHVtcF9hbGwodm9pZCk7CisKK2ludCBuZXRzbm1wX2NlcnRfbG9hZF94NTA5KG5ldHNubXBfY2VydCAqY2VydCk7CisKK3ZvaWQgbmV0c25tcF9jZXJ0X2ZyZWUobmV0c25tcF9jZXJ0ICpjZXJ0KTsKK3ZvaWQgbmV0c25tcF9rZXlfZnJlZShuZXRzbm1wX2tleSAqa2V5KTsKKworc3RhdGljIGludCBfY2VydGluZGV4X2FkZCggY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGkgKTsKKworc3RhdGljIGludCBfdGltZV9maWx0ZXIobmV0c25tcF9maWxlICpmLCBzdHJ1Y3Qgc3RhdCAqaWR4KTsKKworc3RhdGljIHZvaWQgX2luaXRfdGxzdG1DZXJ0VG9UU04odm9pZCk7CisjZGVmaW5lIFRSVVNUQ0VSVF9DT05GSUdfVE9LRU4gInRydXN0Q2VydCIKK3N0YXRpYyB2b2lkIF9wYXJzZV90cnVzdGNlcnQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworCitzdGF0aWMgdm9pZCBfaW5pdF90bHN0bVBhcmFtcyh2b2lkKTsKK3N0YXRpYyB2b2lkIF9pbml0X3Rsc3RtQWRkcih2b2lkKTsKKworLyoqIG1vZGUgZGVzY3JpcHRpb25zIHNob3VsZCBtYXRjaCB1cCB3aXRoIGhlYWRlciAqLworc3RhdGljIGNvbnN0IGNoYXIgX21vZGVzW11bMjU2XSA9CisgICAgICAgIHsKKyAgICAgICAgICAgICJub25lIiwKKyAgICAgICAgICAgICJpZGVudGl0eSIsCisgICAgICAgICAgICAicmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgImlkZW50aXR5K3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJyZXNlcnZlZDEiLAorICAgICAgICAgICAgInJlc2VydmVkMStpZGVudGl0eSIsCisgICAgICAgICAgICAicmVzZXJ2ZWQxK3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJyZXNlcnZlZDEraWRlbnRpdHkrcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgIkNBIiwKKyAgICAgICAgICAgICJDQStpZGVudGl0eSIsCisgICAgICAgICAgICAiQ0ErcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgIkNBK2lkZW50aXR5K3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJDQStyZXNlcnZlZDEiLAorICAgICAgICAgICAgIkNBK3Jlc2VydmVkMStpZGVudGl0eSIsCisgICAgICAgICAgICAiQ0ErcmVzZXJ2ZWQxK3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJDQStyZXNlcnZlZDEraWRlbnRpdHkrcmVtb3RlX3BlZXIiLAorICAgICAgICB9OworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBpbml0IGFuZCBzaHV0ZG93biBmdW5jdGlvbnMKKyAqCisgKi8KKwordm9pZAorX25ldHNubXBfcmVsZWFzZV90cnVzdGNlcnRzKHZvaWQpCit7CisgICAgaWYgKE5VTEwgIT0gX3RydXN0ZWRfY2VydHMpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKF90cnVzdGVkX2NlcnRzLCBOVUxMKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoX3RydXN0ZWRfY2VydHMpOworICAgICAgICBfdHJ1c3RlZF9jZXJ0cyA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitfc2V0dXBfdHJ1c3RlZF9jZXJ0cyh2b2lkKQoreworICAgIF90cnVzdGVkX2NlcnRzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgidHJ1c3RlZF9jZXJ0czpmaWZvIik7CisgICAgaWYgKE5VTEwgPT0gX3RydXN0ZWRfY2VydHMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgY29udGFpbmVyIGZvciB0cnVzdGVkIGNlcnRzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIF90cnVzdGVkX2NlcnRzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidHJ1c3RlZCBjZXJ0aWZpY2F0ZXMiKTsKKyAgICBfdHJ1c3RlZF9jZXJ0cy0+ZnJlZV9pdGVtID0gKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKikgZnJlZTsKKyAgICBfdHJ1c3RlZF9jZXJ0cy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikgc3RyY21wOworfQorCisvKgorICogc2VjbmFtZSBtYXBwaW5nIGZvciBzZXJ2ZXJzLgorICovCit2b2lkCituZXRzbm1wX2NlcnRzX2FnZW50X2luaXQodm9pZCkKK3sKKyAgICBfaW5pdF90bHN0bUNlcnRUb1RTTigpOworICAgIF9pbml0X3Rsc3RtUGFyYW1zKCk7CisgICAgX2luaXRfdGxzdG1BZGRyKCk7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydHNfaW5pdCh2b2lkKQoreworICAgIGNvbnN0IGNoYXIgKnRydXN0Q2VydF9oZWxwID0gVFJVU1RDRVJUX0NPTkZJR19UT0tFTgorICAgICAgICAiIEZJTkdFUlBSSU5UfEZJTEVOQU1FIjsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgVFJVU1RDRVJUX0NPTkZJR19UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFyc2VfdHJ1c3RjZXJ0LCBfbmV0c25tcF9yZWxlYXNlX3RydXN0Y2VydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3RDZXJ0X2hlbHApOworICAgIF9zZXR1cF9jb250YWluZXJzKCk7CisKKyAgICAvKiogYWRkIGNlcnRpZmljYXRlIHR5cGUgbWFwcGluZyAqLworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJwZW0iKSwgTlNfQ0VSVF9UWVBFX1BFTSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoImNydCIpLCBOU19DRVJUX1RZUEVfREVSKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgiY2VyIiksIE5TX0NFUlRfVFlQRV9ERVIpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJjZXJ0IiksIE5TX0NFUlRfVFlQRV9ERVIpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJkZXIiKSwgTlNfQ0VSVF9UWVBFX0RFUik7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoImtleSIpLCBOU19DRVJUX1RZUEVfS0VZKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgicHJpdmF0ZSIpLCBOU19DRVJUX1RZUEVfS0VZKTsKKworICAgIC8qKiBoYXNoIGFsZ3MgKi8KKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgic2hhMSIpLCBOU19IQVNIX1NIQTEpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJtZDUiKSwgTlNfSEFTSF9NRDUpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJzaGEyMjQiKSwgTlNfSEFTSF9TSEEyMjQpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJzaGEyNTYiKSwgTlNfSEFTSF9TSEEyNTYpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJzaGEzODQiKSwgTlNfSEFTSF9TSEEzODQpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJzaGE1MTIiKSwgTlNfSEFTSF9TSEE1MTIpOworCisgICAgLyoqIG1hcCB0eXBlcyAqLworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJjbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoImlwIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3MpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJyZmM4MjIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWUpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJkbnMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydFNBTkROU05hbWUpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJhbnkiKSwgVFNOTV90bHN0bUNlcnRTQU5BbnkpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJzbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkKTsKKworfQorCit2b2lkCituZXRzbm1wX2NlcnRzX3NodXRkb3duKHZvaWQpCit7CisgICAgREVCVUdNU0dUKCgiY2VydDp1dGlsOnNodXRkb3duIiwic2h1dGRvd25cbiIpKTsKKyAgICBpZiAoX21hcHMpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKF9tYXBzLCBOVUxMKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoX21hcHMpOworICAgICAgICBfbWFwcyA9IE5VTEw7CisgICAgfQorICAgIGlmIChOVUxMICE9IF9jZXJ0cykgeworICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoX2NlcnRzLCBOVUxMKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoX2NlcnRzKTsKKyAgICAgICAgX2NlcnRzID0gTlVMTDsKKyAgICB9CisgICAgaWYgKE5VTEwgIT0gX2tleXMpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKF9rZXlzLCBOVUxMKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoX2tleXMpOworICAgICAgICBfa2V5cyA9IE5VTEw7CisgICAgfQorICAgIF9uZXRzbm1wX3JlbGVhc2VfdHJ1c3RjZXJ0cygpOworfQorCit2b2lkCituZXRzbm1wX2NlcnRzX2xvYWQodm9pZCkKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRyOworICAgIG5ldHNubXBfa2V5ICAgICAgICAqa2V5OworICAgIG5ldHNubXBfY2VydCAgICAgICAqY2VydDsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6dXRpbDppbml0IiwiaW5pdFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gX2NlcnRzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW50IGxvYWQgY2VydHMgd2l0aG91dCBjb250YWluZXJcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKENPTlRBSU5FUl9TSVpFKF9jZXJ0cykgIT0gMCkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnV0aWw6aW5pdCIsICJpZ25vcmluZyBkdXBsaWNhdGUgaW5pdFxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbmV0c25tcF9pbml0X29wZW5zc2woKTsKKworICAgIC8qKiBzY2FuIGNvbmZpZyBkaXJzIGZvciBjZXJ0cyAqLworICAgIF9jZXJ0X2luZGV4ZXNfbG9hZCgpOworCisgICAgLyoqIG1hdGNoIHVwIGtleXMgdy9jZXJ0cyAqLworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihfa2V5cyk7CisgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciBrZXlzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGtleSA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7IGtleTsga2V5ID0gSVRFUkFUT1JfTkVYVChpdHIpKQorICAgICAgICBfZmluZF9wYXJ0bmVyKE5VTEwsIGtleSk7CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworCisgICAgREVCVUdJRigiY2VydDpkdW1wIikgeworICAgICAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoX2NlcnRzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgY2VydHNcbiIpOworICAgICAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNlcnQgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgICAgICBmb3IoIDsgY2VydDsgY2VydCA9IElURVJBVE9SX05FWFQoaXRyKSkgeworICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2xvYWRfeDUwOShjZXJ0KTsKKyAgICAgICAgfQorICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsCisgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tIENlcnRpZmljYXRlcyAtLS0tLS0tLS0tLS0tLS0tLVxuIikpOworICAgICAgICBuZXRzbm1wX2NlcnRfZHVtcF9hbGwoKTsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwKKyAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKSk7CisgICAgfQorfQorCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBjZXJ0IGNvbnRhaW5lciBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKgorX2dldF9jZXJ0X2NvbnRhaW5lcihjb25zdCBjaGFyICp1c2UpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmM7CisKKyAgICBjID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydHM6YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBjb250YWluZXIgZm9yICVzXG4iLCB1c2UpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAodXNlKTsKKyAgICBjLT5mcmVlX2l0ZW0gPSAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9jZXJ0X2ZyZWU7CisgICAgYy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9jb21wYXJlOworCisgICAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkCitfc2V0dXBfY29udGFpbmVycyh2b2lkKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICphZGRpdGlvbmFsX2tleXM7CisKKyAgICBfY2VydHMgPSBfZ2V0X2NlcnRfY29udGFpbmVyKCJuZXRzbm1wIGNlcnRpZmljYXRlcyIpOworICAgIGlmIChOVUxMID09IF9jZXJ0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoqIGFkZGl0aW9uYWwga2V5czogY29tbW9uIG5hbWUgKi8KKyAgICBhZGRpdGlvbmFsX2tleXMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0c19jbjpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRpdGlvbmFsX2tleXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgQ04gY29udGFpbmVyIGZvciBjZXJ0aWZpY2F0ZXNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY2VydHNfY24iKTsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmZyZWVfaXRlbSA9IE5VTEw7CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X2NuX2NvbXBhcmU7CisgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KF9jZXJ0cywgYWRkaXRpb25hbF9rZXlzKTsKKworICAgIC8qKiBhZGRpdGlvbmFsIGtleXM6IHN1YmplY3QgbmFtZSAqLworICAgIGFkZGl0aW9uYWxfa2V5cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRzX3NuOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGFkZGl0aW9uYWxfa2V5cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBTTiBjb250YWluZXIgZm9yIGNlcnRpZmljYXRlc1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjZXJ0c19zbiIpOworICAgIGFkZGl0aW9uYWxfa2V5cy0+ZnJlZV9pdGVtID0gTlVMTDsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfc25fY29tcGFyZTsKKyAgICBhZGRpdGlvbmFsX2tleXMtPm5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X3NuX25jb21wYXJlOworICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChfY2VydHMsIGFkZGl0aW9uYWxfa2V5cyk7CisKKyAgICAvKiogYWRkaXRpb25hbCBrZXlzOiBmaWxlIG5hbWUgKi8KKyAgICBhZGRpdGlvbmFsX2tleXMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0c19mbjpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRpdGlvbmFsX2tleXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgRk4gY29udGFpbmVyIGZvciBjZXJ0aWZpY2F0ZXNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY2VydHNfZm4iKTsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmZyZWVfaXRlbSA9IE5VTEw7CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X2ZuX2NvbXBhcmU7CisgICAgYWRkaXRpb25hbF9rZXlzLT5uY29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9mbl9uY29tcGFyZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgoX2NlcnRzLCBhZGRpdGlvbmFsX2tleXMpOworCisgICAgX2tleXMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0X2tleXM6YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gX2tleXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgY29udGFpbmVyIGZvciBjZXJ0aWZpY2F0ZSBrZXlzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9rZXlzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgibmV0c25tcCBjZXJ0aWZpY2F0ZSBrZXlzIik7CisgICAgX2tleXMtPmZyZWVfaXRlbSA9IChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX2tleV9mcmVlOworICAgIF9rZXlzLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X2ZuX2NvbXBhcmU7CisKKyAgICBfc2V0dXBfdHJ1c3RlZF9jZXJ0cygpOworfQorCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcih2b2lkKQoreworICAgIHJldHVybiBfbWFwczsKK30KKworc3RhdGljIG5ldHNubXBfY2VydCAqCitfbmV3X2NlcnQoY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjZXJ0VHlwZSwKKyAgICAgICAgICBpbnQgaGFzaFR5cGUsIGNvbnN0IGNoYXIgKmZpbmdlcnByaW50LCBjb25zdCBjaGFyICpjb21tb25fbmFtZSwKKyAgICAgICAgICBjb25zdCBjaGFyICpzdWJqZWN0KQoreworICAgIG5ldHNubXBfY2VydCAgICAqY2VydDsKKworICAgIGlmICgoTlVMTCA9PSBkaXJuYW1lKSB8fCAoTlVMTCA9PSBmaWxlbmFtZSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBwYXJhbWV0ZXJzIHRvIF9uZXdfY2VydFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNlcnQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2VydCk7CisgICAgaWYgKE5VTEwgPT0gY2VydCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjZXJ0aWZpY2F0ZSBhdCAlcy8lc1xuIiwKKyAgICAgICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3RydWN0Om5ldyIsIm5ldyBjZXJ0IDB4JSNseCBmb3IgJXNcbiIsICh1X2xvbmcpY2VydCwKKyAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisKKyAgICBjZXJ0LT5pbmZvLmRpciA9IHN0cmR1cChkaXJuYW1lKTsKKyAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKKyAgICBjZXJ0LT5pbmZvLmFsbG93ZWRfdXNlcyA9IE5TX0NFUlRfUkVNT1RFX1BFRVI7CisgICAgY2VydC0+aW5mby50eXBlID0gY2VydFR5cGU7CisgICAgaWYgKGZpbmdlcnByaW50KSB7CisgICAgICAgIGNlcnQtPmhhc2hfdHlwZSA9IGhhc2hUeXBlOworICAgICAgICBjZXJ0LT5maW5nZXJwcmludCA9IHN0cmR1cChmaW5nZXJwcmludCk7CisgICAgfQorICAgIGlmIChjb21tb25fbmFtZSkKKyAgICAgICAgY2VydC0+Y29tbW9uX25hbWUgPSBzdHJkdXAoY29tbW9uX25hbWUpOworICAgIGlmIChzdWJqZWN0KQorICAgICAgICBjZXJ0LT5zdWJqZWN0ID0gc3RyZHVwKHN1YmplY3QpOworCisgICAgcmV0dXJuIGNlcnQ7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2tleSAqCitfbmV3X2tleShjb25zdCBjaGFyICpkaXJuYW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBuZXRzbm1wX2tleSAgICAqa2V5OworICAgIHN0cnVjdCBzdGF0ICAgICBmc3RhdDsKKyAgICBjaGFyICAgICAgICAgICAgZm5bU05NUF9NQVhQQVRIXTsKKworICAgIGlmICgoTlVMTCA9PSBkaXJuYW1lKSB8fCAoTlVMTCA9PSBmaWxlbmFtZSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBwYXJhbWV0ZXJzIHRvIF9uZXdfa2V5XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoqIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMgKi8KKyAgICBzbnByaW50Zihmbiwgc2l6ZW9mKGZuKSwgIiVzLyVzIiwgZGlybmFtZSwgZmlsZW5hbWUpOworICAgIGlmIChzdGF0KGZuLCAmZnN0YXQpICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkICBub3Qgc3RhdCAlc1xuIiwgZm4pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKGZzdGF0LnN0X21vZGUgJiBTX0lST1RIKSB8fCAoZnN0YXQuc3RfbW9kZSAmIFNfSVJPVEgpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJyZWZ1c2luZyB0byByZWFkIHdvcmxkIHJlYWRhYmxlIG9yIHdyaXRhYmxlIGtleSAlc1xuIiwgZm4pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBrZXkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfa2V5KTsKKyAgICBpZiAoTlVMTCA9PSBrZXkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGtleSBhdCAlcy8lc1xuIiwKKyAgICAgICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmtleTpzdHJ1Y3Q6bmV3IiwibmV3IGtleSAweCUjbHggZm9yICVzXG4iLCAodV9sb25nKWtleSwKKyAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisKKyAgICBrZXktPmluZm8udHlwZSA9IE5TX0NFUlRfVFlQRV9LRVk7CisgICAga2V5LT5pbmZvLmRpciA9IHN0cmR1cChkaXJuYW1lKTsKKyAgICBrZXktPmluZm8uZmlsZW5hbWUgPSBzdHJkdXAoZmlsZW5hbWUpOworICAgIGtleS0+aW5mby5hbGxvd2VkX3VzZXMgPSBOU19DRVJUX0lERU5USVRZOworCisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0X2ZyZWUobmV0c25tcF9jZXJ0ICpjZXJ0KQoreworICAgIGlmIChOVUxMID09IGNlcnQpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdHJ1Y3Q6ZnJlZSIsImZyZWVpbmcgY2VydCAweCUjbHgsICVzIChmcCAlczsgQ04gJXMpXG4iLAorICAgICAgICAgICAgICAgKHVfbG9uZyljZXJ0LCBjZXJ0LT5pbmZvLmZpbGVuYW1lID8gY2VydC0+aW5mby5maWxlbmFtZSA6ICJVTksiLAorICAgICAgICAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQgPyBjZXJ0LT5maW5nZXJwcmludCA6ICJVTksiLAorICAgICAgICAgICAgICAgY2VydC0+Y29tbW9uX25hbWUgPyBjZXJ0LT5jb21tb25fbmFtZSA6ICJVTksiKSk7CisKKyAgICBTTk1QX0ZSRUUoY2VydC0+aW5mby5kaXIpOworICAgIFNOTVBfRlJFRShjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICBTTk1QX0ZSRUUoY2VydC0+c3ViamVjdCk7CisgICAgU05NUF9GUkVFKGNlcnQtPmlzc3Vlcik7CisgICAgU05NUF9GUkVFKGNlcnQtPmZpbmdlcnByaW50KTsKKyAgICBTTk1QX0ZSRUUoY2VydC0+Y29tbW9uX25hbWUpOworICAgIGlmIChjZXJ0LT5vY2VydCkKKyAgICAgICAgWDUwOV9mcmVlKGNlcnQtPm9jZXJ0KTsKKyAgICBpZiAoY2VydC0+a2V5ICYmIGNlcnQtPmtleS0+Y2VydCA9PSBjZXJ0KQorICAgICAgICBjZXJ0LT5rZXktPmNlcnQgPSBOVUxMOworCisgICAgZnJlZShjZXJ0KTsgLyogU05NUF9GUkVFIG5vdCBuZWVkZWQgb24gcGFyYW1ldGVycyAqLworfQorCit2b2lkCituZXRzbm1wX2tleV9mcmVlKG5ldHNubXBfa2V5ICprZXkpCit7CisgICAgaWYgKE5VTEwgPT0ga2V5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmtleTpzdHJ1Y3Q6ZnJlZSIsImZyZWVpbmcga2V5IDB4JSNseCwgJXNcbiIsCisgICAgICAgICAgICAgICAodV9sb25nKWtleSwga2V5LT5pbmZvLmZpbGVuYW1lID8ga2V5LT5pbmZvLmZpbGVuYW1lIDogIlVOSyIpKTsKKworICAgIFNOTVBfRlJFRShrZXktPmluZm8uZGlyKTsKKyAgICBTTk1QX0ZSRUUoa2V5LT5pbmZvLmZpbGVuYW1lKTsKKyAgICBFVlBfUEtFWV9mcmVlKGtleS0+b2tleSk7CisgICAgaWYgKGtleS0+Y2VydCAmJiBrZXktPmNlcnQtPmtleSA9PSBrZXkpCisgICAgICAgIGtleS0+Y2VydC0+a2V5ID0gTlVMTDsKKworICAgIGZyZWUoa2V5KTsgLyogU05NUF9GUkVFIG5vdCBuZWVkZWQgb24gcGFyYW1ldGVycyAqLworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfZnJlZShuZXRzbm1wX2NlcnQgKmNlcnQsIHZvaWQgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9jZXJ0X2ZyZWUoY2VydCk7Cit9CisKK3N0YXRpYyB2b2lkCitfa2V5X2ZyZWUobmV0c25tcF9rZXkgKmtleSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2tleV9mcmVlKGtleSk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocy0+ZmluZ2VycHJpbnQgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAgICAocmhzLT5maW5nZXJwcmludCAhPSBOVUxMKSk7CisKKyAgICAvKiogaWdub3JlIGhhc2ggdHlwZT8gKi8KKyAgICByZXR1cm4gc3RyY21wKGxocy0+ZmluZ2VycHJpbnQsIHJocy0+ZmluZ2VycHJpbnQpOworfQorCitzdGF0aWMgaW50CitfY2VydF9wYXRoX2NvbXBhcmUobmV0c25tcF9jZXJ0X2NvbW1vbiAqbGhzLCBuZXRzbm1wX2NlcnRfY29tbW9uICpyaHMpCit7CisgICAgaW50IHJjOworCisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKyAgICAKKyAgICAvKiogZGlyIG5hbWUgZmlyc3QgKi8KKyAgICByYyA9IHN0cmNtcChsaHMtPmRpciwgcmhzLT5kaXIpOworICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyoqIGZpbGVuYW1lICovCisgICAgcmV0dXJuIHN0cmNtcChsaHMtPmZpbGVuYW1lLCByaHMtPmZpbGVuYW1lKTsKK30KKworc3RhdGljIGludAorX2NlcnRfY25fY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpCit7CisgICAgaW50IHJjOworICAgIGNvbnN0IGNoYXIgKmxoY24sICpyaGNuOworCisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIGlmIChOVUxMID09IGxocy0+Y29tbW9uX25hbWUpCisgICAgICAgIGxoY24gPSAiIjsKKyAgICBlbHNlCisgICAgICAgIGxoY24gPSBsaHMtPmNvbW1vbl9uYW1lOworICAgIGlmIChOVUxMID09IHJocy0+Y29tbW9uX25hbWUpCisgICAgICAgIHJoY24gPSAiIjsKKyAgICBlbHNlCisgICAgICAgIHJoY24gPSByaHMtPmNvbW1vbl9uYW1lOworCisgICAgcmMgPSBzdHJjbXAobGhjbiwgcmhjbik7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiogaW4gY2FzZSBvZiBlcXVhbCBjb21tb24gbmFtZXMsIHN1Yi1zb3J0IGJ5IHBhdGggKi8KKyAgICByZXR1cm4gX2NlcnRfcGF0aF9jb21wYXJlKChuZXRzbm1wX2NlcnRfY29tbW9uKilsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jZXJ0X2NvbW1vbiopcmhzKTsKK30KKworc3RhdGljIGludAorX2NlcnRfc25fY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpCit7CisgICAgaW50IHJjOworICAgIGNvbnN0IGNoYXIgKmxoc24sICpyaHNuOworCisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIGlmIChOVUxMID09IGxocy0+c3ViamVjdCkKKyAgICAgICAgbGhzbiA9ICIiOworICAgIGVsc2UKKyAgICAgICAgbGhzbiA9IGxocy0+c3ViamVjdDsKKyAgICBpZiAoTlVMTCA9PSByaHMtPnN1YmplY3QpCisgICAgICAgIHJoc24gPSAiIjsKKyAgICBlbHNlCisgICAgICAgIHJoc24gPSByaHMtPnN1YmplY3Q7CisKKyAgICByYyA9IHN0cmNtcChsaHNuLCByaHNuKTsKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qKiBpbiBjYXNlIG9mIGVxdWFsIGNvbW1vbiBuYW1lcywgc3ViLXNvcnQgYnkgcGF0aCAqLworICAgIHJldHVybiBfY2VydF9wYXRoX2NvbXBhcmUoKG5ldHNubXBfY2VydF9jb21tb24qKWxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NlcnRfY29tbW9uKilyaHMpOworfQorCitzdGF0aWMgaW50CitfY2VydF9mbl9jb21wYXJlKG5ldHNubXBfY2VydF9jb21tb24gKmxocywgbmV0c25tcF9jZXJ0X2NvbW1vbiAqcmhzKQoreworICAgIGludCByYzsKKworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICByYyA9IHN0cmNtcChsaHMtPmZpbGVuYW1lLCByaHMtPmZpbGVuYW1lKTsKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qKiBpbiBjYXNlIG9mIGVxdWFsIGNvbW1vbiBuYW1lcywgc3ViLXNvcnQgYnkgZGlyICovCisgICAgcmV0dXJuIHN0cmNtcChsaHMtPmRpciwgcmhzLT5kaXIpOworfQorCitzdGF0aWMgaW50CitfY2VydF9mbl9uY29tcGFyZShuZXRzbm1wX2NlcnRfY29tbW9uICpsaHMsIG5ldHNubXBfY2VydF9jb21tb24gKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMtPmZpbGVuYW1lICE9IE5VTEwpICYmIChyaHMtPmZpbGVuYW1lICE9IE5VTEwpKTsKKworICAgIHJldHVybiBzdHJuY21wKGxocy0+ZmlsZW5hbWUsIHJocy0+ZmlsZW5hbWUsIHN0cmxlbihyaHMtPmZpbGVuYW1lKSk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X3NuX25jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMtPnN1YmplY3QgIT0gTlVMTCkgJiYgKHJocy0+c3ViamVjdCAhPSBOVUxMKSk7CisKKyAgICByZXR1cm4gc3RybmNtcChsaHMtPnN1YmplY3QsIHJocy0+c3ViamVjdCwgc3RybGVuKHJocy0+c3ViamVjdCkpOworfQorCitzdGF0aWMgaW50CitfY2VydF9leHRfdHlwZShjb25zdCBjaGFyICpleHQpCit7CisgICAgaW50IHJjID0gc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgiY2VydF90eXBlcyIsIGV4dCk7CisgICAgaWYgKFNFX0RORSA9PSByYykKKyAgICAgICAgcmV0dXJuIE5TX0NFUlRfVFlQRV9VTktOT1dOOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorX3R5cGVfZnJvbV9maWxlbmFtZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBjaGFyICAgICAqcG9zOworICAgIGludCAgICAgICB0eXBlOworCisgICAgaWYgKE5VTEwgPT0gZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBOU19DRVJUX1RZUEVfVU5LTk9XTjsKKworICAgIHBvcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisgICAgaWYgKE5VTEwgPT0gcG9zKQorICAgICAgICByZXR1cm4gTlNfQ0VSVF9UWVBFX1VOS05PV047CisKKyAgICB0eXBlID0gX2NlcnRfZXh0X3R5cGUoKytwb3MpOworICAgIHJldHVybiB0eXBlOworfQorCisvKgorICogZmlsdGVyIGZ1bmN0aW9uczsgcmV0dXJuIDEgdG8gaW5jbHVkZSBmaWxlLCAwIHRvIGV4Y2x1ZGUKKyAqLworc3RhdGljIGludAorX2NlcnRfY2VydF9maWx0ZXIoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgaW50ICBsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworICAgIGNvbnN0IGNoYXIgKnBvczsKKworICAgIGlmIChsZW4gPCA1KSAvKiBzaG9ydGVzdCBuYW1lOiB4LllZWSAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHBvcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisgICAgaWYgKE5VTEwgPT0gcG9zKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChfY2VydF9leHRfdHlwZSgrK3BvcykgIT0gTlNfQ0VSVF9UWVBFX1VOS05PV04pCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIGNlcnQgaW5kZXggZnVuY3Rpb25zCisgKgorICogVGhpcyBjb2RlIG1pbWljcyB3aGF0IHRoZSBtaWIgaW5kZXggY29kZSBkb2VzLiBUaGUgcGVyc2lzdGVudAorICogZGlyZWN0b3J5IHdpbGwgaGF2ZSBhIHN1YmRpcmVjdG9yeSBuYW1lZCAnY2VydF9pbmRleGVzJy4gSW5zaWRlCisgKiB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIHNvbWUgbnVtYmVyIG9mIGZpbGVzIHdpdGggYXNjaWkgbnVtZXJpYworICogbmFtZXMgKDAsIDEsIDIsIGV0YykuIEVhY2ggb2YgdGhlc2UgZmlsZXMgd2lsbCBzdGFydCB3aXRoIGEgbGluZQorICogd2l0aCB0aGUgdGV4dCAiRElSICIsIGZvbGxvd2VkIGJ5IGEgZGlyZWN0b3J5IG5hbWUuIFRoZSByZXN0IG9mIHRoZQorICogZmlsZSB3aWxsIGJlIGNlcnRpZmljYXRlIGZpZWxkcyBhbmQgdGhlIGNlcnRpZmljYXRlIGZpbGUgbmFtZSwgb25lCisgKiBjZXJ0aWZpY2F0ZSBwZXIgbGluZS4gVGhlIG51bWVyaWMgZmlsZSBuYW1lIGlzIHRoZSBpbnRlZ2VyICdkaXJlY3RvcnkKKyAqIGluZGV4Jy4KKyAqLworCisvKioKKyAqIF9jZXJ0aW5kZXhfYWRkCisgKgorICogYWRkIGEgZGlyZWN0b3J5IG5hbWUgdG8gdGhlIGluZGV4ZXMKKyAqLworc3RhdGljIGludAorX2NlcnRpbmRleF9hZGQoIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBpICkKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciAqZGlybmFtZV9jb3B5ID0gc3RyZHVwKGRpcm5hbWUpOworCisgICAgaWYgKCBpID09IC0xICkgeworICAgICAgICBpbnQgbWF4ID0gc2VfZmluZF9mcmVlX3ZhbHVlX2luX2xpc3QoX2NlcnRpbmRleGVzKTsKKyAgICAgICAgaWYgKFNFX0RORSA9PSBtYXgpCisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSA9IG1heDsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmFkZCIsImRpciAlcyBhdCBpbmRleCAlZFxuIiwgZGlybmFtZSwgaSApKTsKKyAgICByYyA9IHNlX2FkZF9wYWlyX3RvX2xpc3QoJl9jZXJ0aW5kZXhlcywgZGlybmFtZV9jb3B5LCBpKTsKKyAgICBpZiAoU0VfT0sgIT0gcmMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImFkZGluZyBjZXJ0aW5kZXggZGlybmFtZSBmYWlsZWQ7ICIKKyAgICAgICAgICAgICAgICAgIiVkICglcykgbm90IGFkZGVkXG4iLCBpLCBkaXJuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBpOworfQorCisvKioKKyAqIF9jZXJ0aW5kZXhfbG9hZAorICoKKyAqIHJlYWQgaW4gdGhlIGV4aXN0aW5nIGluZGV4ZXMKKyAqLworc3RhdGljIHZvaWQKK19jZXJ0aW5kZXhlc19sb2FkKCB2b2lkICkKK3sKKyAgICBESVIgKmRpcjsKKyAgICBzdHJ1Y3QgZGlyZW50ICpmaWxlOworICAgIEZJTEUgKmZwOworICAgIGNoYXIgZmlsZW5hbWVbU05NUF9NQVhQQVRIXSwgbGluZVszMDBdOworICAgIGludCAgaTsKKyAgICBjaGFyICpjcCwgKnBvczsKKworICAgIC8qCisgICAgICogT3BlbiB0aGUgQ0VSVCBpbmRleCBkaXJlY3RvcnksIG9yIGNyZWF0ZSBpdCAoZW1wdHkpCisgICAgICovCisgICAgc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvY2VydF9pbmRleGVzIiwKKyAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCkpOworICAgIGZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAwOworICAgIGRpciA9IG9wZW5kaXIoIGZpbGVuYW1lICk7CisgICAgaWYgKCBkaXIgPT0gTlVMTCApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpsb2FkIiwKKyAgICAgICAgICAgICAgICAgICAiY3JlYXRpbmcgbmV3IGNlcnRfaW5kZXhlcyBkaXJlY3RvcnlcbiIpKTsKKyAgICAgICAgbWtkaXJoaWVyKCBmaWxlbmFtZSwgTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIGxpc3Qgb2Ygd2hpY2ggZGlyZWN0b3J5IGVhY2ggZmlsZSByZWZlcnMgdG8KKyAgICAgKi8KKyAgICB3aGlsZSAoKGZpbGUgPSByZWFkZGlyKCBkaXIgKSkpIHsKKyAgICAgICAgaWYgKCAhaXNkaWdpdCgweEZGICYgZmlsZS0+ZF9uYW1lWzBdKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpID0gYXRvaSggZmlsZS0+ZF9uYW1lICk7CisKKyAgICAgICAgc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvY2VydF9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkgKTsKKyAgICAgICAgZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9IDA7CisgICAgICAgIGZwID0gZm9wZW4oIGZpbGVuYW1lLCAiciIgKTsKKyAgICAgICAgaWYgKCAhZnAgKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmxvYWQiLCAiZXJyb3Igb3BlbmluZyBpbmRleCAoJWQpXG4iLCBpKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjcCA9IGZnZXRzKCBsaW5lLCBzaXplb2YobGluZSksIGZwICk7CisgICAgICAgIGlmICggY3AgKSB7CisgICAgICAgICAgICBsaW5lW3N0cmxlbihsaW5lKS0xXSA9IDA7CisgICAgICAgICAgICBwb3MgPSBzdHJyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICAgICBpZiAocG9zKQorICAgICAgICAgICAgICAgICpwb3MgPSAnXDAnOworICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmluZGV4OmxvYWQiLCJhZGRpbmcgKCVkKSAlc1xuIiwgaSwgbGluZSkpOworICAgICAgICAgICAgKHZvaWQpX2NlcnRpbmRleF9hZGQoIGxpbmUrNCwgaSApOyAgLyogU2tpcCAnRElSICcgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6bG9hZCIsICJFbXB0eSBpbmRleCAoJWQpXG4iLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKCBmcCApOworICAgIH0KKyAgICBjbG9zZWRpciggZGlyICk7Cit9CisKKy8qKgorICogX2NlcnRpbmRleF9sb29rdXAKKyAqCisgKiBmaW5kIGluZGV4IGZvciBhIGRpcmVjdG9yeQorICovCitzdGF0aWMgY2hhciAqCitfY2VydGluZGV4X2xvb2t1cCggY29uc3QgY2hhciAqZGlybmFtZSApCit7CisgICAgaW50IGk7CisgICAgY2hhciBmaWxlbmFtZVtTTk1QX01BWFBBVEhdOworCisKKyAgICBpID0gc2VfZmluZF92YWx1ZV9pbl9saXN0KF9jZXJ0aW5kZXhlcywgZGlybmFtZSk7CisgICAgaWYgKFNFX0RORSA9PSBpKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDppbmRleDpsb29rdXAiLCIlcyA6IChub25lKVxuIiwgZGlybmFtZSkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL2NlcnRfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkpOworICAgIGZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAwOworICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6bG9va3VwIiwgIiVzICglZCkgJXNcbiIsIGRpcm5hbWUsIGksIGZpbGVuYW1lICkpOworICAgIHJldHVybiBzdHJkdXAoZmlsZW5hbWUpOworfQorCitzdGF0aWMgRklMRSAqCitfY2VydGluZGV4X25ldyggY29uc3QgY2hhciAqZGlybmFtZSApCit7CisgICAgRklMRSAqZnA7CisgICAgY2hhciAgZmlsZW5hbWVbU05NUF9NQVhQQVRIXSwgKmNwOworICAgIGludCAgIGk7CisKKyAgICBjcCA9IF9jZXJ0aW5kZXhfbG9va3VwKCBkaXJuYW1lICk7CisgICAgaWYgKCFjcCkgeworICAgICAgICBpICA9IF9jZXJ0aW5kZXhfYWRkKCBkaXJuYW1lLCAtMSApOworICAgICAgICBpZiAoLTEgPT0gaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKyAgICAgICAgc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvY2VydF9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpICk7CisgICAgICAgIGZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAwOworICAgICAgICBjcCA9IGZpbGVuYW1lOworICAgIH0KKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6aW5kZXg6bmV3IiwgIiVzICglcylcbiIsIGRpcm5hbWUsIGNwICkpOworICAgIGZwID0gZm9wZW4oIGNwLCAidyIgKTsKKyAgICBpZiAoZnApCisgICAgICAgIGZwcmludGYoIGZwLCAiRElSICVzICVkXG4iLCBkaXJuYW1lLCBDRVJUX0lOREVYX0ZPUk1BVCApOworICAgIGVsc2UKKyAgICAgICAgREVCVUdNU0dUTCgoImNlcnQ6aW5kZXgiLCAiZXJyb3Igb3BlbmluZyBuZXcgaW5kZXggZmlsZSAlc1xuIiwgZGlybmFtZSkpOworCisgICAgaWYgKGNwICE9IGZpbGVuYW1lKQorICAgICAgICBmcmVlKGNwKTsKKworICAgIHJldHVybiBmcDsKK30KKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogY2VydGlmaWNhdGUgdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKi8KK3N0YXRpYyBYNTA5ICoKK25ldHNubXBfb2NlcnRfZ2V0KG5ldHNubXBfY2VydCAqY2VydCkKK3sKKyAgICBCSU8gICAgICAgICAgICAqY2VydGJpbzsKKyAgICBYNTA5ICAgICAgICAgICAqb2NlcnQgPSBOVUxMOworICAgIEVWUF9QS0VZICAgICAgICpva2V5ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgZmlsZVtTTk1QX01BWFBBVEhdOworICAgIGludCAgICAgICAgICAgICBpc19jYTsKKworICAgIGlmIChOVUxMID09IGNlcnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGNlcnQtPm9jZXJ0KQorICAgICAgICByZXR1cm4gY2VydC0+b2NlcnQ7CisKKyAgICBpZiAoTlNfQ0VSVF9UWVBFX1VOS05PV04gPT0gY2VydC0+aW5mby50eXBlKSB7CisgICAgICAgIGNlcnQtPmluZm8udHlwZSA9IF90eXBlX2Zyb21fZmlsZW5hbWUoY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIGlmIChOU19DRVJUX1RZUEVfVU5LTk9XTiA9PSBjZXJ0LT5pbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIGNlcnRpZmljYXRlIHR5cGUgJWQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby50eXBlLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnJlYWQiLCAiQ2hlY2tpbmcgZmlsZSAlc1xuIiwgY2VydC0+aW5mby5maWxlbmFtZSkpOworCisgICAgY2VydGJpbyA9IEJJT19uZXcoQklPX3NfZmlsZSgpKTsKKyAgICBpZiAoTlVMTCA9PSBjZXJ0YmlvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBCSU9cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIiVzLyVzIiwgY2VydC0+aW5mby5kaXIsIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgIGlmIChCSU9fcmVhZF9maWxlbmFtZShjZXJ0YmlvLCBmaWxlKSA8PTApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlYWRpbmcgY2VydGlmaWNhdGUgJXMgaW50byBCSU9cbiIsIGZpbGUpOworICAgICAgICBCSU9fdmZyZWUoY2VydGJpbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChOU19DRVJUX1RZUEVfVU5LTk9XTiA9PSBjZXJ0LT5pbmZvLnR5cGUpIHsKKyAgICAgICAgY2hhciAqcG9zID0gc3RycmNocihjZXJ0LT5pbmZvLmZpbGVuYW1lLCAnLicpOworICAgICAgICBpZiAoTlVMTCA9PSBwb3MpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY2VydC0+aW5mby50eXBlID0gX2NlcnRfZXh0X3R5cGUoKytwb3MpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChjZXJ0LT5pbmZvLnR5cGUgIT0gTlNfQ0VSVF9UWVBFX1VOS05PV04pOworICAgIH0KKworICAgIHN3aXRjaCAoY2VydC0+aW5mby50eXBlKSB7CisKKyAgICAgICAgY2FzZSBOU19DRVJUX1RZUEVfREVSOgorICAgICAgICAgICAgb2NlcnQgPSBkMmlfWDUwOV9iaW8oY2VydGJpbyxOVUxMKTsgLyogREVSL0FTTjEgKi8KKyAgICAgICAgICAgIGlmIChOVUxMICE9IG9jZXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKHZvaWQpQklPX3Jlc2V0KGNlcnRiaW8pOworICAgICAgICAgICAgLyoqIEZBTExUSFJPVUdIOiBjaGVjayBmb3IgUEVNIGlmIERFUiBkaWRuJ3Qgd29yayAqLworCisgICAgICAgIGNhc2UgTlNfQ0VSVF9UWVBFX1BFTToKKyAgICAgICAgICAgIG9jZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDlfQVVYKGNlcnRiaW8sIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gb2NlcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTlNfQ0VSVF9UWVBFX0RFUiA9PSBjZXJ0LT5pbmZvLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6cmVhZCIsICJDaGFuZ2luZyB0eXBlIGZyb20gREVSIHRvIFBFTVxuIikpOworICAgICAgICAgICAgICAgIGNlcnQtPmluZm8udHlwZSA9IE5TX0NFUlRfVFlQRV9QRU07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiogY2hlY2sgZm9yIHByaXZhdGUga2V5IHRvbyAqLworICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2VydC0+a2V5KSB7CisgICAgICAgICAgICAgICAgKHZvaWQpQklPX3Jlc2V0KGNlcnRiaW8pOworICAgICAgICAgICAgICAgIG9rZXkgPSAgUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoY2VydGJpbywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgIT0gb2tleSkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2tleSAgKmtleTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpyZWFkOmtleSIsICJmb3VuZCBrZXkgd2l0aCBjZXJ0IGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gX25ld19rZXkoY2VydC0+aW5mby5kaXIsIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCAhPSBrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleS0+b2tleSA9IG9rZXk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT0gQ09OVEFJTkVSX0lOU0VSVChfa2V5cywga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cmVhZDprZXk6YWRkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBpbnNlcnRpbmcga2V5IGludG8gY29udGFpbmVyXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9rZXlfZnJlZShrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnJlYWQ6cGFydG5lciIsICIlcyBtYXRjaCBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LT5jZXJ0ID0gY2VydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5hbGxvd2VkX3VzZXMgfD0gTlNfQ0VSVF9JREVOVElUWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLyogbnVsbCByZXR1cm4gZnJvbSByZWFkICovCisgICAgICAgICAgICB9IC8qIG51bGwga2V5ICovCisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDRVJUX1BLQ1MxMl9TVVBQT1JUX01BWUJFX0xBVEVSCisgICAgICAgIGNhc2UgTlNfQ0VSVF9UWVBFX1BLQ1MxMjoKKyAgICAgICAgICAgICh2b2lkKUJJT19yZXNldChjZXJ0YmlvKTsKKyAgICAgICAgICAgIFBLQ1MxMiAqcDEyID0gZDJpX1BLQ1MxMl9iaW8oY2VydGJpbywgTlVMTCk7CisgICAgICAgICAgICBpZiAoIChOVUxMICE9IHAxMikgJiYgKFBLQ1MxMl92ZXJpZnlfbWFjKHAxMiwgIiIsIDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1MxMl92ZXJpZnlfbWFjKHAxMiwgTlVMTCwgMCkpKQorICAgICAgICAgICAgICAgIFBLQ1MxMl9wYXJzZShwMTIsICIiLCBOVUxMLCAmY2VydCwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gY2VydGlmaWNhdGUgdHlwZSAlZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLnR5cGUsIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgIH0KKworICAgIEJJT192ZnJlZShjZXJ0YmlvKTsKKworICAgIGlmIChOVUxMID09IG9jZXJ0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBwYXJzaW5nIGNlcnRpZmljYXRlIGZpbGUgJXNcbiIsCisgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjZXJ0LT5vY2VydCA9IG9jZXJ0OworICAgIC8qCisgICAgICogWDUwOV9jaGVja19jYSByZXR1cm4gY29kZXM6CisgICAgICogMCBub3QgYSBDQQorICAgICAqIDEgaXMgYSBDQQorICAgICAqIDIgYmFzaWNDb25zdHJhaW50cyBhYnNlbnQgc28gIm1heWJlIiBhIENBCisgICAgICogMyBiYXNpY0NvbnN0cmFpbnRzIGFic2VudCBidXQgc2VsZiBzaWduZWQgVjEuCisgICAgICogNCBiYXNpY0NvbnN0cmFpbnRzIGFic2VudCBidXQga2V5VXNhZ2UgcHJlc2VudCBhbmQga2V5Q2VydFNpZ24gYXNzZXJ0ZWQuCisgICAgICogNSBvdXRkYXRlZCBOZXRzY2FwZSBDZXJ0aWZpY2F0ZSBUeXBlIENBIGV4dGVuc2lvbi4KKyAgICAgKi8KKyAgICBpc19jYSA9IFg1MDlfY2hlY2tfY2Eob2NlcnQpOworICAgIGlmICgxID09IGlzX2NhKQorICAgICAgICBjZXJ0LT5pbmZvLmFsbG93ZWRfdXNlcyB8PSBOU19DRVJUX0NBOworCisgICAgaWYgKE5VTEwgPT0gY2VydC0+c3ViamVjdCkgeworICAgICAgICBjZXJ0LT5zdWJqZWN0ID0gWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKG9jZXJ0KSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6YWRkOnN1YmplY3QiLCAic3ViamVjdCBuYW1lOiAlc1xuIiwgY2VydC0+c3ViamVjdCkpOworICAgIH0KKworICAgIGlmIChOVUxMID09IGNlcnQtPmlzc3VlcikgeworICAgICAgICBjZXJ0LT5pc3N1ZXIgPSBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZShvY2VydCksIE5VTEwsIDApOworICAgICAgICBpZiAoc3RyY21wKGNlcnQtPnN1YmplY3QsIGNlcnQtPmlzc3VlcikgPT0gMCkgeworICAgICAgICAgICAgZnJlZShjZXJ0LT5pc3N1ZXIpOworICAgICAgICAgICAgY2VydC0+aXNzdWVyID0gc3RyZHVwKCJzZWxmLXNpZ25lZCIpOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDphZGQ6aXNzdWVyIiwgIkNBIGlzc3VlcjogJXNcbiIsIGNlcnQtPmlzc3VlcikpOworICAgIH0KKyAgICAKKyAgICBpZiAoTlVMTCA9PSBjZXJ0LT5maW5nZXJwcmludCkgeworICAgICAgICBjZXJ0LT5oYXNoX3R5cGUgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKG9jZXJ0KTsKKyAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQgPQorICAgICAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KG9jZXJ0LCBjZXJ0LT5oYXNoX3R5cGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoTlVMTCA9PSBjZXJ0LT5jb21tb25fbmFtZSkgeworICAgICAgICBjZXJ0LT5jb21tb25fbmFtZSA9bmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWUob2NlcnQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmFkZDpuYW1lIiwiJXNcbiIsIGNlcnQtPmNvbW1vbl9uYW1lKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9jZXJ0OworfQorCitFVlBfUEtFWSAqCituZXRzbm1wX29rZXlfZ2V0KG5ldHNubXBfa2V5ICAqa2V5KQoreworICAgIEJJTyAgICAgICAgICAgICprZXliaW87CisgICAgRVZQX1BLRVkgICAgICAgKm9rZXk7CisgICAgY2hhciAgICAgICAgICAgIGZpbGVbU05NUF9NQVhQQVRIXTsKKworICAgIGlmIChOVUxMID09IGtleSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoa2V5LT5va2V5KQorICAgICAgICByZXR1cm4ga2V5LT5va2V5OworCisgICAgc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCIlcy8lcyIsIGtleS0+aW5mby5kaXIsIGtleS0+aW5mby5maWxlbmFtZSk7CisgICAgREVCVUdNU0dUKCgiY2VydDprZXk6cmVhZCIsICJDaGVja2luZyBmaWxlICVzXG4iLCBrZXktPmluZm8uZmlsZW5hbWUpKTsKKworICAgIGtleWJpbyA9IEJJT19uZXcoQklPX3NfZmlsZSgpKTsKKyAgICBpZiAoTlVMTCA9PSBrZXliaW8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIEJJT1xuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChCSU9fcmVhZF9maWxlbmFtZShrZXliaW8sIGZpbGUpIDw9MCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVhZGluZyBjZXJ0aWZpY2F0ZSAlcyBpbnRvIEJJT1xuIiwKKyAgICAgICAgICAgICAgICAga2V5LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgQklPX3ZmcmVlKGtleWJpbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9rZXkgPSBQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShrZXliaW8sIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGlmIChOVUxMID09IG9rZXkpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBwYXJzaW5nIGNlcnRpZmljYXRlIGZpbGUgJXNcbiIsCisgICAgICAgICAgICAgICAgIGtleS0+aW5mby5maWxlbmFtZSk7CisgICAgZWxzZQorICAgICAgICBrZXktPm9rZXkgPSBva2V5OworCisgICAgQklPX3ZmcmVlKGtleWJpbyk7CisKKyAgICByZXR1cm4gb2tleTsKK30KKworc3RhdGljIG5ldHNubXBfY2VydCAqCitfZmluZF9pc3N1ZXIobmV0c25tcF9jZXJ0ICpjZXJ0KQoreworICAgIG5ldHNubXBfdm9pZF9hcnJheSAqbWF0Y2hpbmc7CisgICAgbmV0c25tcF9jZXJ0ICAgICAgICpjYW5kaWRhdGUsICppc3N1ZXIgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgaTsKKworICAgIGlmICgoTlVMTCA9PSBjZXJ0KSB8fCAoTlVMTCA9PSBjZXJ0LT5pc3N1ZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBmaW5kIG1hdGNoaW5nIHN1YmplY3QgbmFtZXMgKi8KKworICAgIG1hdGNoaW5nID0gX2NlcnRfZmluZF9zdWJzZXRfc24oY2VydC0+aXNzdWVyKTsKKyAgICBpZiAoTlVMTCA9PSBtYXRjaGluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogY2hlY2sgZWFjaCB0byBzZWUgaWYgaXQncyB0aGUgaXNzdWVyICovCisgICAgZm9yICggaT0wOyAoTlVMTCA9PSBpc3N1ZXIpICYmIChpIDwgbWF0Y2hpbmctPnNpemUpOyArK2kpIHsKKyAgICAgICAgLyoqIG1ha2Ugc3VyZSB3ZSBoYXZlIG9jZXJ0ICovCisgICAgICAgIGNhbmRpZGF0ZSA9IChuZXRzbm1wX2NlcnQqKW1hdGNoaW5nLT5hcnJheVtpXTsKKyAgICAgICAgaWYgKChOVUxMID09IGNhbmRpZGF0ZS0+b2NlcnQpICYmCisgICAgICAgICAgICAobmV0c25tcF9vY2VydF9nZXQoY2FuZGlkYXRlKSA9PSBOVUxMKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qKiBjb21wYXJlICoqLworICAgICAgICBpZiAobmV0c25tcF9vcGVuc3NsX2NlcnRfaXNzdWVkX2J5KGNhbmRpZGF0ZS0+b2NlcnQsIGNlcnQtPm9jZXJ0KSkKKyAgICAgICAgICAgIGlzc3VlciA9IGNhbmRpZGF0ZTsKKyAgICB9IC8qKiBjYW5kaWRhdGUgbG9vcCAqLworCisgICAgZnJlZShtYXRjaGluZy0+YXJyYXkpOworICAgIGZyZWUobWF0Y2hpbmcpOworCisgICAgcmV0dXJuIGlzc3VlcjsKK30KKworI2RlZmluZSBDRVJUX0xPQURfT0sgICAgICAgMAorI2RlZmluZSBDRVJUX0xPQURfRVJSICAgICAtMQorI2RlZmluZSBDRVJUX0xPQURfUEFSVElBTCAtMgoraW50CituZXRzbm1wX2NlcnRfbG9hZF94NTA5KG5ldHNubXBfY2VydCAqY2VydCkKK3sKKyAgICBpbnQgcmMgPSBDRVJUX0xPQURfT0s7CisKKyAgICAvKiogbG9hZCBvY2VydCAqLworICAgIGlmICgoTlVMTCA9PSBjZXJ0LT5vY2VydCkgJiYgKG5ldHNubXBfb2NlcnRfZ2V0KGNlcnQpID09IE5VTEwpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bG9hZDplcnIiLCAiY291bGRuJ3QgbG9hZCBjZXJ0IGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgIHJjID0gQ0VSVF9MT0FEX0VSUjsKKyAgICB9CisKKyAgICAvKiogbG9hZCBrZXkgKi8KKyAgICBpZiAoKE5VTEwgIT0gY2VydC0+a2V5KSAmJiAoTlVMTCA9PSBjZXJ0LT5rZXktPm9rZXkpICYmCisgICAgICAgIChuZXRzbm1wX29rZXlfZ2V0KGNlcnQtPmtleSkgPT0gTlVMTCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpsb2FkOmVyciIsICJjb3VsZG4ndCBsb2FkIGtleSBmb3IgY2VydCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgIHJjID0gQ0VSVF9MT0FEX0VSUjsKKyAgICB9CisKKyAgICAvKiogbWFrZSBzdXJlIHdlIGhhdmUgY2VydCBjaGFpbiAqLworICAgIGZvciAoOyBjZXJ0ICYmIGNlcnQtPmlzc3VlcjsgY2VydCA9IGNlcnQtPmlzc3Vlcl9jZXJ0KSB7CisgICAgICAgIC8qKiBza2lwIHNlbGYgc2lnbmVkICovCisgICAgICAgIGlmIChzdHJjbXAoY2VydC0+aXNzdWVyLCAic2VsZi1zaWduZWQiKSA9PSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChjZXJ0LT5pc3N1ZXJfY2VydCA9PSBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qKiBnZXQgaXNzdWVyIGNlcnQgKi8KKyAgICAgICAgaWYgKE5VTEwgPT0gY2VydC0+aXNzdWVyX2NlcnQpIHsKKyAgICAgICAgICAgIGNlcnQtPmlzc3Vlcl9jZXJ0ID0gIF9maW5kX2lzc3VlcihjZXJ0KTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGNlcnQtPmlzc3Vlcl9jZXJ0KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpsb2FkOndhcm4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGxvYWQgQ0EgY2hhaW4gZm9yIGNlcnQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAgcmMgPSBDRVJUX0xPQURfUEFSVElBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiogZ2V0IGlzc3VlciBvY2VydCAqLworICAgICAgICBpZiAoKE5VTEwgPT0gY2VydC0+aXNzdWVyX2NlcnQtPm9jZXJ0KSAmJgorICAgICAgICAgICAgKG5ldHNubXBfb2NlcnRfZ2V0KGNlcnQtPmlzc3Vlcl9jZXJ0KSA9PSBOVUxMKSkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpsb2FkOndhcm4iLCAiY291bGRuJ3QgbG9hZCBjZXJ0IGNoYWluIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgcmMgPSBDRVJUX0xPQURfUEFSVElBTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSAvKiBjZXJ0IENBIGZvciBsb29wICovCisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitfZmluZF9wYXJ0bmVyKG5ldHNubXBfY2VydCAqY2VydCwgbmV0c25tcF9rZXkgKmtleSkKK3sKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKm1hdGNoaW5nID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgICAgIGZpbGVuYW1lW05BTUVfTUFYXSwgKnBvczsKKworICAgIGlmICgoY2VydCAmJiBrZXkpIHx8ICghY2VydCAmJiAhIGtleSkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgImJhZCBwYXJhbWV0ZXJzIHNlYXJjaGluZyBmb3IgcGFydG5lclxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoa2V5KSB7CisgICAgICAgIGlmIChrZXktPmNlcnQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICJrZXkgYWxyZWFkeSBoYXMgcGFydG5lclxuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpwYXJ0bmVyIiwgIiVzIGxvb2tpbmcgZm9yIHBhcnRuZXIgbmVhciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBrZXktPmluZm8uZmlsZW5hbWUsIGtleS0+aW5mby5kaXIpKTsKKyAgICAgICAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcyIsIGtleS0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIHBvcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisgICAgICAgIGlmIChOVUxMID09IHBvcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgKnBvcyA9IDA7CisKKyAgICAgICAgbWF0Y2hpbmcgPSBfY2VydF9maW5kX3N1YnNldF9mbiggZmlsZW5hbWUsIGtleS0+aW5mby5kaXIgKTsKKyAgICAgICAgaWYgKCFtYXRjaGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKDEgPT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgICAgIGNlcnQgPSAobmV0c25tcF9jZXJ0KiltYXRjaGluZy0+YXJyYXlbMF07CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0LT5rZXkpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiJXMgbWF0Y2ggZm91bmQhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgICAgIGtleS0+Y2VydCA9IGNlcnQ7CisgICAgICAgICAgICAgICAgY2VydC0+a2V5ID0ga2V5OworICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uYWxsb3dlZF91c2VzIHw9IE5TX0NFUlRfSURFTlRJVFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjZXJ0LT5rZXkgIT0ga2V5KQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyBtYXRjaGluZyBjZXJ0IGFscmVhZHkgaGFzIHBhcnRuZXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgIiVzIG1hdGNoZXMgbXVsdGlwbGUgY2VydHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS0+aW5mby5maWxlbmFtZSkpOworICAgIH0KKyAgICBlbHNlIGlmKGNlcnQpIHsKKyAgICAgICAgaWYgKGNlcnQtPmtleSkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgImNlcnQgYWxyZWFkeSBoYXMgcGFydG5lclxuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpwYXJ0bmVyIiwgIiVzIGxvb2tpbmcgZm9yIHBhcnRuZXJcbiIsCisgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzIiwgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIHBvcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisgICAgICAgIGlmIChOVUxMID09IHBvcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgKnBvcyA9IDA7CisKKyAgICAgICAgbWF0Y2hpbmcgPSBfa2V5X2ZpbmRfc3Vic2V0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKCFtYXRjaGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKDEgPT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgICAgIGtleSA9IChuZXRzbm1wX2tleSopbWF0Y2hpbmctPmFycmF5WzBdOworICAgICAgICAgICAgaWYgKE5VTEwgPT0ga2V5LT5jZXJ0KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgIiVzIGZvdW5kIVxuIiwgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgICAgIGtleS0+Y2VydCA9IGNlcnQ7CisgICAgICAgICAgICAgICAgY2VydC0+a2V5ID0ga2V5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoa2V5LT5jZXJ0ICE9IGNlcnQpCisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIG1hdGNoaW5nIGtleSBhbHJlYWR5IGhhcyBwYXJ0bmVyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICIlcyBtYXRjaGVzIG11bHRpcGxlIGtleXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1hdGNoaW5nKSB7CisgICAgICAgIGZyZWUobWF0Y2hpbmctPmFycmF5KTsKKyAgICAgICAgZnJlZShtYXRjaGluZyk7CisgICAgfQorfQorCitzdGF0aWMgaW50CitfYWRkX2NlcnRmaWxlKGNvbnN0IGNoYXIqIGRpcm5hbWUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBGSUxFICppbmRleCkKK3sKKyAgICBYNTA5ICAgICAgICAgKm9jZXJ0OworICAgIEVWUF9QS0VZICAgICAqb2tleTsKKyAgICBuZXRzbm1wX2NlcnQgKmNlcnQgPSBOVUxMOworICAgIG5ldHNubXBfa2V5ICAqa2V5ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgIGNlcnRmaWxlW1NOTVBfTUFYUEFUSF07CisgICAgaW50ICAgICAgICAgICB0eXBlOworCisgICAgaWYgKCgoY29uc3Qgdm9pZCopTlVMTCA9PSBkaXJuYW1lKSB8fCAoTlVMTCA9PSBmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHR5cGUgPSBfdHlwZV9mcm9tX2ZpbGVuYW1lKGZpbGVuYW1lKTsKKyAgICBuZXRzbm1wX2Fzc2VydCh0eXBlICE9IE5TX0NFUlRfVFlQRV9VTktOT1dOKTsKKworICAgIHNucHJpbnRmKGNlcnRmaWxlLCBzaXplb2YoY2VydGZpbGUpLCIlcy8lcyIsIGRpcm5hbWUsIGZpbGVuYW1lKTsKKworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpmaWxlOmFkZCIsICJDaGVja2luZyBmaWxlOiAlcyAodHlwZSAlZClcbiIsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgdHlwZSkpOworCisgICAgaWYgKE5TX0NFUlRfVFlQRV9LRVkgPT0gdHlwZSkgeworICAgICAgICBrZXkgPSBfbmV3X2tleShkaXJuYW1lLCBmaWxlbmFtZSk7CisgICAgICAgIGlmIChOVUxMID09IGtleSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgb2tleSA9IG5ldHNubXBfb2tleV9nZXQoa2V5KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gb2tleSkgeworICAgICAgICAgICAgbmV0c25tcF9rZXlfZnJlZShrZXkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGtleS0+b2tleSA9IG9rZXk7CisgICAgICAgIGlmICgtMSA9PSBDT05UQUlORVJfSU5TRVJUKF9rZXlzLCBrZXkpKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmtleTpmaWxlOmFkZDplcnIiLAorICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW5zZXJ0aW5nIGtleSBpbnRvIGNvbnRhaW5lclxuIikpOworICAgICAgICAgICAgbmV0c25tcF9rZXlfZnJlZShrZXkpOworICAgICAgICAgICAga2V5ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgY2VydCA9IF9uZXdfY2VydChkaXJuYW1lLCBmaWxlbmFtZSwgdHlwZSwgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBvY2VydCA9IG5ldHNubXBfb2NlcnRfZ2V0KGNlcnQpOworICAgICAgICBpZiAoTlVMTCA9PSBvY2VydCkgeworICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZyZWUoY2VydCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgY2VydC0+b2NlcnQgPSBvY2VydDsKKyAgICAgICAgaWYgKC0xID09IENPTlRBSU5FUl9JTlNFUlQoX2NlcnRzLCBjZXJ0KSkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaWxlOmFkZDplcnIiLAorICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW5zZXJ0aW5nIGNlcnQgaW50byBjb250YWluZXJcbiIpKTsKKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9mcmVlKGNlcnQpOworICAgICAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChOVUxMID09IGNlcnQpICYmIChOVUxMID09IGtleSkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaWxlOmFkZDpmYWlsdXJlIiwgImZvciAlc1xuIiwgY2VydGZpbGUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmRleCkgeworICAgICAgICAvKiogZmlsZW5hbWUgPSBOQU1FX01BWCA9IDI1NSAqLworICAgICAgICAvKiogZmluZ2VycHJpbnQgPSA2MCAqLworICAgICAgICAvKiogY29tbW9uIG5hbWUgLyBDTiAgPSA2NCAqLworICAgICAgICBpZiAoY2VydCkKKyAgICAgICAgICAgIGZwcmludGYoaW5kZXgsICJjOiVzICVkICVkICVzICclcycgJyVzJ1xuIiwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8udHlwZSwgY2VydC0+aGFzaF90eXBlLCBjZXJ0LT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgY2VydC0+Y29tbW9uX25hbWUsIGNlcnQtPnN1YmplY3QpOworICAgICAgICBlbHNlIGlmIChrZXkpCisgICAgICAgICAgICBmcHJpbnRmKGluZGV4LCAiazolc1xuIiwgZmlsZW5hbWUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfY2VydF9yZWFkX2luZGV4KGNvbnN0IGNoYXIgKmRpcm5hbWUsIHN0cnVjdCBzdGF0ICpkaXJzdGF0KQoreworICAgIEZJTEUgICAgICAgICAgICppbmRleDsKKyAgICBjaGFyICAgICAgICAgICAqaWR4bmFtZSwgKnBvczsKKyAgICBzdHJ1Y3Qgc3RhdCAgICAgaWR4X3N0YXQ7CisgICAgY2hhciAgICAgICAgICAgIHRtcHN0cltTTk1QX01BWFBBVEggKyA1XSwgZmlsZW5hbWVbTkFNRV9NQVhdOworICAgIGNoYXIgICAgICAgICAgICBmaW5nZXJwcmludFs2MCsxXSwgY29tbW9uX25hbWVbNjQrMV0sIHR5cGVfc3RyWzE1XTsKKyAgICBjaGFyICAgICAgICAgICAgc3ViamVjdFtTTk1QX01BWEJVRl9TTUFMTF0sIGhhc2hfc3RyWzE1XTsKKyAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAwLCB0eXBlLCBoYXNoLCB2ZXJzaW9uOworICAgIG5ldHNubXBfY2VydCAgICAqY2VydDsKKyAgICBuZXRzbm1wX2tleSAgICAgKmtleTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV3ZXIsICpmb3VuZDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZGlybmFtZSk7CisKKyAgICBpZHhuYW1lID0gX2NlcnRpbmRleF9sb29rdXAoIGRpcm5hbWUgKTsKKyAgICBpZiAoTlVMTCA9PSBpZHhuYW1lKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCAibm8gaW5kZXggZm9yIGNlcnQgZGlyZWN0b3J5XG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHNlZSBpZiBkaXJlY3RvcnkgaGFzIGJlZW4gbW9kaWZpZWQgbW9yZSByZWNlbnRseSB0aGFuIHRoZSBpbmRleAorICAgICAqLworICAgIGlmIChzdGF0KGlkeG5hbWUsICZpZHhfc3RhdCkgIT0gMCkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwgImVycm9yIGdldHRpbmcgaW5kZXggZmlsZSBzdGF0c1xuIikpOworICAgICAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZiAoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChjeWd3aW4pKQorICAgIC8qIEZvciBXaW4zMiBwbGF0Zm9ybXMsIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgbWFpbnRhaW4gYSBsYXN0IG1vZGlmaWNhdGlvbgorICAgICAqIGRhdGUgdGhhdCB3ZSBjYW4gY29tcGFyZSB3aXRoIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgLmluZGV4IGZpbGUuCisgICAgICovCisjZWxzZQorICAgIGlmIChkaXJzdGF0LT5zdF9tdGltZSA+PSBpZHhfc3RhdC5zdF9tdGltZSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwgIkluZGV4IG91dGRhdGVkOyBkaXIgbW9kaWZpZWRcbiIpKTsKKyAgICAgICAgU05NUF9GUkVFKGlkeG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIGRpciBtdGltZSBkb2Vzbid0IGNoYW5nZSB3aGVuIGZpbGVzIGFyZSB0b3VjaGVkLCBzbyB3ZSBuZWVkIHRvIGNoZWNrCisgICAgICogZWFjaCBmaWxlIGFnYWluc3QgdGhlIGluZGV4IGluIGNhc2UgYSBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLgorICAgICAqLworICAgIG5ld2VyID0KKyAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWRfc29tZShOVUxMLCBkaXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2RpcmVjdG9yeV9maWx0ZXIqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aW1lX2ZpbHRlciwodm9pZCopJmlkeF9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRElSX05TRklMRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9ESVJfTlNGSUxFX1NUQVRTKTsKKyAgICBpZiAobmV3ZXIpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsICJJbmRleCBvdXRkYXRlZDsgZmlsZXMgbW9kaWZpZWRcbiIpKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKG5ld2VyLCBOVUxMKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUobmV3ZXIpOworICAgICAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwgIlRoZSBpbmRleCBmb3IgJXMgbG9va3MgZ29vZFxuIiwgZGlybmFtZSkpOworCisgICAgaW5kZXggPSBmb3BlbihpZHhuYW1lLCAiciIpOworICAgIGlmIChOVUxMID09IGluZGV4KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjZXJ0OmluZGV4OnBhcnNlIGNhbid0IG9wZW4gaW5kZXggZm9yICVzXG4iLAorICAgICAgICAgICAgZGlybmFtZSk7CisgICAgICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvdW5kID0gX2dldF9jZXJ0X2NvbnRhaW5lcihpZHhuYW1lKTsKKworICAgIC8qCisgICAgICogY2hlY2sgaW5kZXggZm9ybWF0IHZlcnNpb24KKyAgICAgKi8KKyAgICBmZ2V0cyh0bXBzdHIsIHNpemVvZih0bXBzdHIpLCBpbmRleCk7CisgICAgcG9zID0gc3RycmNocih0bXBzdHIsICcgJyk7CisgICAgaWYgKHBvcykgeworICAgICAgICArK3BvczsKKyAgICAgICAgdmVyc2lvbiA9IGF0b2kocG9zKTsKKyAgICB9CisgICAgaWYgKChOVUxMID09IHBvcykgfHwgKHZlcnNpb24gIT0gQ0VSVF9JTkRFWF9GT1JNQVQpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6YWRkIiwgIm1pc3Npbmcgb3Igd3JvbmcgaW5kZXggZm9ybWF0IVxuIikpOworICAgICAgICBmY2xvc2UoaW5kZXgpOworICAgICAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKE5VTEwgPT0gZmdldHModG1wc3RyLCBzaXplb2YodG1wc3RyKSwgaW5kZXgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCdjJyA9PSB0bXBzdHJbMF0pIHsKKyAgICAgICAgICAgIHBvcyA9ICZ0bXBzdHJbMl07CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gKHBvcz1jb3B5X253b3JkKHBvcywgZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSkpKSkgfHwKKyAgICAgICAgICAgICAgICAoTlVMTCA9PSAocG9zPWNvcHlfbndvcmQocG9zLCB0eXBlX3N0ciwgc2l6ZW9mKHR5cGVfc3RyKSkpKSB8fAorICAgICAgICAgICAgICAgIChOVUxMID09IChwb3M9Y29weV9ud29yZChwb3MsIGhhc2hfc3RyLCBzaXplb2YoaGFzaF9zdHIpKSkpIHx8CisgICAgICAgICAgICAgICAgKE5VTEwgPT0gKHBvcz1jb3B5X253b3JkKHBvcywgZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmaW5nZXJwcmludCkpKSkgfHwKKyAgICAgICAgICAgICAgICAoTlVMTCA9PSAocG9zPWNvcHlfbndvcmQocG9zLCBjb21tb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY29tbW9uX25hbWUpKSkpIHx8CisgICAgICAgICAgICAgICAgKE5VTEwgIT0gY29weV9ud29yZChwb3MsIHN1YmplY3QsIHNpemVvZihzdWJqZWN0KSkpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9jZXJ0X3JlYWRfaW5kZXg6IGVycm9yIHBhcnNpbmcgbGluZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHlwZSA9IGF0b2kodHlwZV9zdHIpOworICAgICAgICAgICAgaGFzaCA9IGF0b2koaGFzaF9zdHIpOworICAgICAgICAgICAgY2VydCA9ICh2b2lkKilfbmV3X2NlcnQoZGlybmFtZSwgZmlsZW5hbWUsIHR5cGUsIGhhc2gsIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX25hbWUsIHN1YmplY3QpOworICAgICAgICAgICAgaWYgKGNlcnQgJiYgMCA9PSBDT05UQUlORVJfSU5TRVJUKGZvdW5kLCBjZXJ0KSkKKyAgICAgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDphZGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluc2VydGluZyBjZXJ0IGludG8gY29udGFpbmVyXG4iKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZyZWUoY2VydCk7CisgICAgICAgICAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJ2snID09IHRtcHN0clswXSkgeworICAgICAgICAgICAgaWYgKE5VTEwgIT0gY29weV9ud29yZCgmdG1wc3RyWzJdLCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSkpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiX2NlcnRfcmVhZF9pbmRleDogZXJyb3IgcGFyc2luZyBsaW5lICVzXG4iLAorICAgICAgICAgICAgICAgICAgICB0bXBzdHIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2V5ID0gX25ld19rZXkoZGlybmFtZSwgZmlsZW5hbWUpOworICAgICAgICAgICAgaWYgKGtleSAmJiAwID09IENPTlRBSU5FUl9JTlNFUlQoX2tleXMsIGtleSkpCisgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6YWRkOmtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW5zZXJ0aW5nIGtleSBpbnRvIGNvbnRhaW5lclxuIikpOworICAgICAgICAgICAgICAgIG5ldHNubXBfa2V5X2ZyZWUoa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIGxpbmUgaW4gY2VydCBpbmRleCBmb3IgJXNcbiIsIGRpcm5hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9IC8qIHdoaWxlICovCisgICAgZmNsb3NlKGluZGV4KTsKKyAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisKKyAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIG5ldHNubXBfaXRlcmF0b3IgICppdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoZm91bmQpOworICAgICAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciBmb3VuZCBjZXJ0c1xuIik7CisgICAgICAgICAgICBjb3VudCA9IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2VydCA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgICAgICAgICBmb3IoIDsgY2VydDsgY2VydCA9IElURVJBVE9SX05FWFQoaXRyKSkKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKF9jZXJ0cywgY2VydCk7CisgICAgICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwiYWRkZWQgJWQgY2VydHMgZnJvbSBpbmRleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoZm91bmQsIE5VTEwpOworICAgIENPTlRBSU5FUl9GUkVFKGZvdW5kKTsKKworICAgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludAorX2FkZF9jZXJ0ZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisgICAgRklMRSAgICAgICAgICAgKmluZGV4OworICAgIGNoYXIgICAgICAgICAgICpmaWxlOworICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNlcnRfY29udGFpbmVyOworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdDsKKyAgICBzdHJ1Y3Qgc3RhdCAgICAgc3RhdGJ1ZjsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZGlybmFtZSk7CisKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZGlyOmFkZCIsICIgY29uZmlnIGRpcjogJXNcbiIsIGRpcm5hbWUgKSk7CisKKyAgICBpZiAoc3RhdChkaXJuYW1lLCAmc3RhdGJ1ZikgIT0gMCkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZGlyOmFkZCIsICIgZGlyIG5vdCBwcmVzZW50OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBkaXJuYW1lICkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2lmZGVmIFNfSVNESVIKKyAgICBpZiAoIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZGlyOmFkZCIsICIgbm90IGEgZGlyOiAlc1xuIiwgZGlybmFtZSApKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpkaXIiLCAiU2Nhbm5pbmcgZGlyZWN0b3J5ICVzXG4iLCBkaXJuYW1lKSk7CisKKyAgICAvKgorICAgICAqIGxvb2sgZm9yIGV4aXN0aW5nIGluZGV4CisgICAgICovCisgICAgY291bnQgPSBfY2VydF9yZWFkX2luZGV4KGRpcm5hbWUsICZzdGF0YnVmKTsKKyAgICBpZiAoY291bnQgPj0gMCkKKyAgICAgICAgcmV0dXJuIGNvdW50OworCisgICAgaW5kZXggPSBfY2VydGluZGV4X25ldyggZGlybmFtZSApOworICAgIGlmIChOVUxMID09IGluZGV4KSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDppbmRleDpkaXIiLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgY2VydCBkaXJlY3RvcnlcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImNlcnQ6aW5kZXgiLCAiY291bGQgbm90IG9wZW4gY2VydGlmaWNhdGUgaW5kZXggZmlsZVxuIikpOworICAgIH0KKworICAgIC8qCisgICAgICogaW5kZXggd2FzIG1pc3NpbmcsIG91dCBvZiBkYXRlIG9yIGJhZC4gcmVzY2FuIGRpcmVjdG9yeS4KKyAgICAgKi8KKyAgICBjZXJ0X2NvbnRhaW5lciA9CisgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkX3NvbWUoTlVMTCwgZGlybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9kaXJlY3RvcnlfZmlsdGVyKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX2NlcnRfY2VydF9maWx0ZXIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9ESVJfUkVMQVRJVkVfUEFUSCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9ESVJfRU1QVFlfT0sgKTsKKyAgICBpZiAoTlVMTCA9PSBjZXJ0X2NvbnRhaW5lcikgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmRpciIsCisgICAgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgZm9yIGNlcnQgZmlsZXNcbiIpKTsKKyAgICAgICAgZ290byBlcnJfaW5kZXg7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpdGVyYXRlIHRocm91Z2ggdGhlIGZvdW5kIGZpbGVzIGFuZCBhZGQgdGhlbSB0byBpbmRleAorICAgICAqLworICAgIGl0ID0gQ09OVEFJTkVSX0lURVJBVE9SKGNlcnRfY29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSBpdCkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmRpciIsCisgICAgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBpdGVyYXRvciBmb3IgY2VydCBmaWxlc1xuIikpOworICAgICAgICBnb3RvIGVycl9jb250YWluZXI7CisgICAgfQorCisgICAgZm9yIChmaWxlID0gSVRFUkFUT1JfRklSU1QoaXQpOyBmaWxlOyBmaWxlID0gSVRFUkFUT1JfTkVYVChpdCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpkaXIiLCAiYWRkaW5nICVzIHRvIGluZGV4XG4iLCBmaWxlKSk7CisgICAgICAgIGlmICggMCA9PSBfYWRkX2NlcnRmaWxlKCBkaXJuYW1lLCBmaWxlLCBpbmRleCApKQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpkaXIiLCAiZXJyb3IgYWRkaW5nICVzIHRvIGluZGV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSkpOworICAgIH0KKworICAgIC8qCisgICAgICogY2xlYW4gdXAgYW5kIHJldHVybgorICAgICAqLworICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworCisgIGVycl9jb250YWluZXI6CisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoY2VydF9jb250YWluZXIpOworCisgIGVycl9pbmRleDoKKyAgICBpZiAoaW5kZXgpCisgICAgICAgIGZjbG9zZShpbmRleCk7CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9pbmRleGVzX2xvYWQodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyICAgICAqY29uZnBhdGg7CisgICAgY2hhciAgICAgICAgICAgKmNvbmZwYXRoX2NvcHksICpkaXIsICpzdCA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgIGNlcnRkaXJbU05NUF9NQVhQQVRIXTsKKyAgICBjb25zdCBjaGFyICAgICAqc3ViZGlyc1tdID0geyBOVUxMLCAiY2EtY2VydHMiLCAiY2VydHMiLCAicHJpdmF0ZSIsIE5VTEwgfTsKKyAgICBpbnQgICAgICAgICAgICAgaSA9IDA7CisKKyAgICAvKgorICAgICAqIGxvYWQgaW5kZXhlcyBmcm9tIHBlcnNpc3RlbnQgZGlyCisgICAgICovCisgICAgX2NlcnRpbmRleGVzX2xvYWQoKTsKKworICAgIC8qCisgICAgICogZHVwbGljYXRlIHBhdGggYnVpbGRpbmcgZnJvbSByZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKCkgaW4KKyAgICAgKiByZWFkX2NvbmZpZy5jLiBUaGF0IGlzLCB1c2UgU05NUENPTkZQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmCisgICAgICogaXQgaXMgZGVmaW5lZCwgb3RoZXJ3aXNlIHVzZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeS4KKyAgICAgKi8KKyAgICBjb25mcGF0aCA9IG5ldHNubXBfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKTsKKyAgICBpZiAoTlVMTCA9PSBjb25mcGF0aCkKKyAgICAgICAgY29uZnBhdGggPSBnZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkoKTsKKworICAgIHN1YmRpcnNbMF0gPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIpOworICAgIGNvbmZwYXRoX2NvcHkgPSBzdHJkdXAoY29uZnBhdGgpOworICAgIGZvciAoIGRpciA9IHN0cnRva19yKGNvbmZwYXRoX2NvcHksIEVOVl9TRVBBUkFUT1IsICZzdCk7CisgICAgICAgICAgZGlyOyBkaXIgPSBzdHJ0b2tfcihOVUxMLCBFTlZfU0VQQVJBVE9SLCAmc3QpKSB7CisKKyAgICAgICAgaSA9IChOVUxMID09IHN1YmRpcnNbMF0pID8gMSA6IDA7CisgICAgICAgIGZvciAoIDsgc3ViZGlyc1tpXSA7ICsraSApIHsKKyAgICAgICAgICAgIC8qKiBjaGVjayB0bHMgc3ViZGlyICovCisgICAgICAgICAgICBzbnByaW50ZihjZXJ0ZGlyLCBzaXplb2YoY2VydGRpciksICIlcy90bHMvJXMiLCBkaXIsIHN1YmRpcnNbaV0pOworICAgICAgICAgICAgX2FkZF9jZXJ0ZGlyKGNlcnRkaXIpOworICAgICAgICB9IC8qIGZvciBzdWJkaXJzICovCisgICAgfSAvKiBmb3IgY29uZiBwYXRoIGRpcnMgKi8KKyAgICBTTk1QX0ZSRUUoY29uZnBhdGhfY29weSk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9wcmludChuZXRzbm1wX2NlcnQgKmMsIHZvaWQgKmNvbnRleHQpCit7CisgICAgaWYgKE5VTEwgPT0gYykKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwgImNlcnQgJXMgaW4gJXNcbiIsIGMtPmluZm8uZmlsZW5hbWUsIGMtPmluZm8uZGlyKSk7CisgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwgIiAgIHR5cGUgJWQgZmxhZ3MgMHgleCAoJXMpXG4iLAorICAgICAgICAgICAgIGMtPmluZm8udHlwZSwgYy0+aW5mby5hbGxvd2VkX3VzZXMsCisgICAgICAgICAgICAgIF9tb2RlX3N0cihjLT5pbmZvLmFsbG93ZWRfdXNlcykpKTsKKyAgICBERUJVR0lGKCI5OmNlcnQ6ZHVtcCIpIHsKKyAgICAgICAgaWYgKE5TX0NFUlRfVFlQRV9LRVkgIT0gYy0+aW5mby50eXBlKSB7CisgICAgICAgICAgICBpZihjLT5zdWJqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGMtPmluZm8uYWxsb3dlZF91c2VzICYgTlNfQ0VSVF9DQSkKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgQ0E6ICVzXG4iLCBjLT5zdWJqZWN0KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICBzdWJqZWN0OiAlc1xuIiwgYy0+c3ViamVjdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoYy0+aXNzdWVyKQorICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgIGlzc3VlcjogJXNcbiIsIGMtPmlzc3VlcikpOworICAgICAgICAgICAgaWYoYy0+ZmluZ2VycHJpbnQpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgZmluZ2VycHJpbnQ6ICVzKCVkKTolc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBjLT5oYXNoX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+aGFzaF90eXBlLCBjLT5maW5nZXJwcmludCkpOworICAgICAgICB9CisgICAgICAgIC8qIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNlcnRfdXRpbHNfZHVtcF9uYW1lcykgKi8KKyAgICAgICAgLyogbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9uYW1lcyhjLT5vY2VydCk7ICovCisgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhjLT5vY2VydCk7CisgICAgfQorICAgIAorfQorCitzdGF0aWMgdm9pZAorX2tleV9wcmludChuZXRzbm1wX2tleSAqaywgdm9pZCAqY29udGV4dCkKK3sKKyAgICBpZiAoTlVMTCA9PSBrKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLCAia2V5ICVzIGluICVzXG4iLCBrLT5pbmZvLmZpbGVuYW1lLCBrLT5pbmZvLmRpcikpOworICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsICIgICB0eXBlICVkIGZsYWdzIDB4JXggKCVzKVxuIiwgay0+aW5mby50eXBlLAorICAgICAgICAgICAgICBrLT5pbmZvLmFsbG93ZWRfdXNlcywgX21vZGVfc3RyKGstPmluZm8uYWxsb3dlZF91c2VzKSkpOworfQorCit2b2lkCituZXRzbm1wX2NlcnRfZHVtcF9hbGwodm9pZCkKK3sKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goX2NlcnRzLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9jZXJ0X3ByaW50LCBOVUxMKTsKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goX2tleXMsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX2tleV9wcmludCwgTlVMTCk7Cit9CisKKyNpZmRlZiBDRVJUX01BSU4KKy8qCisgKiBleHBvcnQgQkxEPX4vbmV0LXNubXAvYnVpbGQvIFNSQz1+L25ldC1zbm1wL3NyYyAKKyAqIGNjIC1EQ0VSVF9NQUlOIGAkQkxEL25ldC1zbm1wLWNvbmZpZyAtLWNmbGFnc2AgYCRCTEQvbmV0LXNubXAtY29uZmlnIC0tYnVpbGQtaW5jbHVkZXMgJEJMRC9gICAkU1JDL3NubXBsaWIvY2VydF91dGlsLmMgICAtbyBjZXJ0X3V0aWwgYCRCTEQvbmV0LXNubXAtY29uZmlnIC0tYnVpbGQtbGliLWRpcnMgJEJMRGAgYCRCTEQvbmV0LXNubXAtY29uZmlnIC0tbGlic2AgLWxjcnlwdG8gLWxzc2wKKyAqCisgKi8KK2ludAorbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgaW50ICAgICAgICAgIGNoOworICAgIGV4dGVybiBjaGFyICpvcHRhcmc7CisKKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJEOmZITE14OiIpKSAhPSBFT0YpCisgICAgICAgIHN3aXRjaChjaCkgeworICAgICAgICAgICAgY2FzZSAnRCc6CisgICAgICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5rbm93biBvcHRpb24gJWNcbiIsIGNoKTsKKyAgICAgICAgfQorCisgICAgaW5pdF9zbm1wKCJkdGxzYXBwIik7CisKKyAgICBuZXRzbm1wX2NlcnRfZHVtcF9hbGwoKTsKKworICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogQ0VSVF9NQUlOICovCisKK3N0YXRpYyBuZXRzbm1wX2NlcnQgKl9jZXJ0X2ZpbmRfZnAoY29uc3QgY2hhciAqZmluZ2VycHJpbnQpOworCit2b2lkCituZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oY2hhciAqZnApCit7CisgICAgY2hhciAqcG9zLCAqZGVzdD1OVUxMOworICAgIAorICAgIGlmKCFmcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoqIHNraXAgdG8gZmlyc3QgOiAqLworICAgIGZvciAocG9zID0gZnA7ICpwb3M7ICsrcG9zICkgeworICAgICAgICBpZiAoJzonID09ICpwb3MpIHsKKyAgICAgICAgICAgIGRlc3QgPSBwb3M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAqcG9zID0gaXNhbHBoYSgweEZGICYgKnBvcykgPyB0b2xvd2VyKDB4RkYgJiAqcG9zKSA6ICpwb3M7CisgICAgfQorICAgIGlmICghKnBvcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoqIGNvcHksIHNraXBwaW5nIGFueSAnOicgKi8KKyAgICBmb3IgKCsrcG9zOyAqcG9zOyArK3BvcykgeworICAgICAgICBpZiAoJzonID09ICpwb3MpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgKmRlc3QrKyA9IGlzYWxwaGEoMHhGRiAmICpwb3MpID8gdG9sb3dlcigweEZGICYgKnBvcykgOiAqcG9zOworICAgIH0KKyAgICAqZGVzdCA9ICpwb3M7IC8qIG51bCB0ZXJtaW5hdGlvbiAqLworfQorCituZXRzbm1wX2NlcnQgKgorbmV0c25tcF9jZXJ0X2ZpbmQoaW50IHdoYXQsIGludCB3aGVyZSwgdm9pZCAqaGludCkKK3sKKyAgICBuZXRzbm1wX2NlcnQgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICpmcCwgKmhpbnRfc3RyOworCisgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOnBhcmFtcyIsICJsb29raW5nIGZvciAlcyglZCkgaW4gJXMoMHgleCksIGhpbnQgJWx1XG4iLAorICAgICAgICAgICAgICAgX21vZGVfc3RyKHdoYXQpLCB3aGF0LCBfd2hlcmVfc3RyKHdoZXJlKSwgd2hlcmUsICh1X2xvbmcpaGludCkpOworCisgICAgaWYgKE5TX0NFUlRLRVlfREVGQVVMVCA9PSB3aGVyZSkgeworICAgICAgICAgICAgCisgICAgICAgIHN3aXRjaCAod2hhdCkgeworICAgICAgICAgICAgY2FzZSBOU19DRVJUX0lERU5USVRZOiAvKiB3YW50IG15IElEICovCisgICAgICAgICAgICAgICAgZnAgPQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVExTX0xPQ0FMX0NFUlQpOworICAgICAgICAgICAgICAgIC8qKiB0ZW1wIGJhY2t3YXJkcyBjb21wYWJpbGl0eTsgcmVtb3ZlIGluIDUuNyAqLworICAgICAgICAgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB0bXA7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IChwdHJkaWZmX3QpaGludDsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOnBhcmFtcyIsICIgaGludCA9ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA/ICJzZXJ2ZXIiIDogImNsaWVudCIpKTsKKyAgICAgICAgICAgICAgICAgICAgZnAgPQorICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgdG1wID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X1NFUlZFUl9QVUIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1g1MDlfQ0xJRU5UX1BVQiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEFzIGEgc3BlY2lhbCBjYXNlLCB1c2UgdGhlIGFwcGxpY2F0aW9uIHR5cGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGEgZmlsZSBuYW1lIHRvIHB1bGwgdGhlIGRlZmF1bHQgaWRlbnRpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgZnJvbS4gKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2VydF9maW5kKHdoYXQsIE5TX0NFUlRLRVlfRklMRSwgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTlNfQ0VSVF9SRU1PVEVfUEVFUjoKKyAgICAgICAgICAgICAgICBmcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVExTX1BFRVJfQ0VSVCk7CisgICAgICAgICAgICAgICAgLyoqIHRlbXAgYmFja3dhcmRzIGNvbXBhYmlsaXR5OyByZW1vdmUgaW4gNS43ICovCisgICAgICAgICAgICAgICAgaWYgKCFmcCkKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X1NFUlZFUl9QVUIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6ZXJyIiwgInVuaGFuZGxlZCB0eXBlICVkIGZvciAlcyglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0LCBfd2hlcmVfc3RyKHdoZXJlKSwgd2hlcmUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnApCisgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9jZXJ0X2ZpbmQod2hhdCwgTlNfQ0VSVEtFWV9NVUxUSVBMRSwgZnApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IC8qIHdoZXJlID0gZHMgc3RvcmUgKi8KKyAgICBlbHNlIGlmIChOU19DRVJUS0VZX01VTFRJUExFID09IHdoZXJlKSB7CisgICAgICAgIC8qIHRyaWVzIG11bHRpcGxlIHNvdXJjZXMgb2YgY2VydGlmaWNhdGVzIGJhc2VkIG9uIGFzY2lpIGxvb2t1cCBrZXlzICovCisKKyAgICAgICAgLyogVHJ5IGEgZmluZ2VycHJpbnQgbWF0Y2ggZmlyc3QsIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgZG9uZSBmaXJzdCAqLworICAgICAgICAvKiAodG8gYXZvaWQgcGVvcGxlIG5hbWluZyBmaWxlbmFtZXMgd2l0aCBjb25mbGljdGluZyBGUHMpICovCisgICAgICAgIHJlc3VsdCA9IG5ldHNubXBfY2VydF9maW5kKHdoYXQsIE5TX0NFUlRLRVlfRklOR0VSUFJJTlQsIGhpbnQpOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgLyogVGhlbiB0cnkgYSBmaWxlIG5hbWUgbG9va3VwICovCisgICAgICAgICAgICByZXN1bHQgPSBuZXRzbm1wX2NlcnRfZmluZCh3aGF0LCBOU19DRVJUS0VZX0ZJTEUsIGhpbnQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKE5TX0NFUlRLRVlfRklOR0VSUFJJTlQgPT0gd2hlcmUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOnBhcmFtcyIsICIgaGludCA9ICVzXG4iLCAoY2hhciAqKWhpbnQpKTsKKyAgICAgICAgcmVzdWx0ID0gX2NlcnRfZmluZF9mcCgoY2hhciAqKWhpbnQpOworICAgIH0KKyAgICBlbHNlIGlmIChOU19DRVJUS0VZX1RBUkdFVF9QQVJBTSA9PSB3aGVyZSkgeworICAgICAgICBpZiAod2hhdCAhPSBOU19DRVJUX0lERU5USVRZKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAib25seSBpZGVudGl0eSBpcyB2YWxpZCBmb3IgdGFyZ2V0IHBhcmFtc1xuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiogaGludCA9PSB0YXJnZXQgbWliIGRhdGEgKi8KKyAgICAgICAgaGludF9zdHIgPSAoY2hhciAqKWhpbnQ7CisgICAgICAgIGZwID0gX2ZpbmRfdGxzdG1QYXJhbXNfZmluZ2VycHJpbnQoaGludF9zdHIpOworICAgICAgICBpZiAoTlVMTCAhPSBmcCkKKyAgICAgICAgICAgIHJlc3VsdCA9IF9jZXJ0X2ZpbmRfZnAoZnApOworCisgICAgfQorICAgIGVsc2UgaWYgKE5TX0NFUlRLRVlfVEFSR0VUX0FERFIgPT0gd2hlcmUpIHsKKyAgICAgICAgCisgICAgICAgIC8qKiBoaW50ID09IHRhcmdldCBtaWIgZGF0YSAqLworICAgICAgICBpZiAod2hhdCAhPSBOU19DRVJUX1JFTU9URV9QRUVSKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAib25seSBwZWVyIGlzIHZhbGlkIGZvciB0YXJnZXQgYWRkclxuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiogaGludCA9PSB0YXJnZXQgbWliIGRhdGEgKi8KKyAgICAgICAgaGludF9zdHIgPSAoY2hhciAqKWhpbnQ7CisgICAgICAgIGZwID0gX2ZpbmRfdGxzdG1BZGRyX2ZpbmdlcnByaW50KGhpbnRfc3RyKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gZnApCisgICAgICAgICAgICByZXN1bHQgPSBfY2VydF9maW5kX2ZwKGZwKTsKKworICAgIH0KKyAgICBlbHNlIGlmIChOU19DRVJUS0VZX0ZJTEUgPT0gd2hlcmUpIHsKKyAgICAgICAgLyoqIGhpbnQgPT0gZmlsZW5hbWUgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IChjaGFyKiloaW50OworICAgICAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKm1hdGNoaW5nOworCisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDpwYXJhbXMiLCAiIGhpbnQgPSAlc1xuIiwgKGNoYXIgKiloaW50KSk7CisgICAgICAgIG1hdGNoaW5nID0gX2NlcnRfZmluZF9zdWJzZXRfZm4oIGZpbGVuYW1lLCBOVUxMICk7CisgICAgICAgIGlmICghbWF0Y2hpbmcpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKDEgPT0gbWF0Y2hpbmctPnNpemUpCisgICAgICAgICAgICByZXN1bHQgPSAobmV0c25tcF9jZXJ0KiltYXRjaGluZy0+YXJyYXlbMF07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOmVyciIsICIlcyBtYXRjaGVzIG11bHRpcGxlIGNlcnRzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkpOworICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBmcmVlKG1hdGNoaW5nLT5hcnJheSk7CisgICAgICAgIGZyZWUobWF0Y2hpbmcpOworICAgIH0gLyogd2hlcmUgPSBOU19DRVJUS0VZX0ZJTEUgKi8KKyAgICBlbHNlIHsgLyogdW5rbm93biBsb2NhdGlvbiAqLworICAgICAgICAKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOmVyciIsICJ1bmhhbmRsZWQgbG9jYXRpb24gJWQgZm9yICVkXG4iLCB3aGVyZSwKKyAgICAgICAgICAgICAgICAgICB3aGF0KSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICBpZiAoTlVMTCA9PSByZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIG1ha2Ugc3VyZSByZXN1bHQgZm91bmQgY2FuIGJlIHVzZWQgZm9yIHNwZWNpZmllZCB0eXBlICovCisgICAgaWYgKCEocmVzdWx0LT5pbmZvLmFsbG93ZWRfdXNlcyAmIHdoYXQpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDplcnIiLAorICAgICAgICAgICAgICAgICAgICJjZXJ0ICVzIC8gJXMgbm90IGFsbG93ZWQgZm9yICVzKCVkKSAodXNlcz0lcyAoJWQpKVxuIiwKKyAgICAgICAgICAgICAgICAgICByZXN1bHQtPmluZm8uZmlsZW5hbWUsIHJlc3VsdC0+ZmluZ2VycHJpbnQsIF9tb2RlX3N0cih3aGF0KSwKKyAgICAgICAgICAgICAgICAgICB3aGF0ICwgX21vZGVfc3RyKHJlc3VsdC0+aW5mby5hbGxvd2VkX3VzZXMpLAorICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+aW5mby5hbGxvd2VkX3VzZXMpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIC8qKiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY2VydCBkYXRhICovCisgICAgaWYgKG5ldHNubXBfY2VydF9sb2FkX3g1MDkocmVzdWx0KSA9PSBDRVJUX0xPQURfRVJSKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDpmb3VuZCIsCisgICAgICAgICAgICAgICAidXNpbmcgY2VydCAlcyAvICVzIGZvciAlcyglZCkgKHVzZXM9JXMgKCVkKSlcbiIsCisgICAgICAgICAgICAgICByZXN1bHQtPmluZm8uZmlsZW5hbWUsIHJlc3VsdC0+ZmluZ2VycHJpbnQsIF9tb2RlX3N0cih3aGF0KSwKKyAgICAgICAgICAgICAgIHdoYXQgLCBfbW9kZV9zdHIocmVzdWx0LT5pbmZvLmFsbG93ZWRfdXNlcyksCisgICAgICAgICAgICAgICByZXN1bHQtPmluZm8uYWxsb3dlZF91c2VzKSk7CisgICAgICAgICAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9GSU5HRVJQUklOVFMKK2ludAorbmV0c25tcF9jZXJ0X2NoZWNrX3ZiX2ZpbmdlcnByaW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQoreworICAgIGlmICghdmFyKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgaWYgKDAgPT0gdmFyLT52YWxfbGVuKSAvKiBlbXB0eSBhbGxvd2VkIGluIHNvbWUgY2FzZXMgKi8KKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBpZiAoISAoMHgwMSAmIHZhci0+dmFsX2xlbikpIHsgLyogb2RkIGxlbiAqLworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnZhcmJpbmQ6ZmluZ2VycHJpbnQiLAorICAgICAgICAgICAgICAgICAgICJleHBlY3Rpbmcgb2RkIGxlbmd0aCBmb3IgZmluZ2VycHJpbnRcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOworICAgIH0KKworICAgIGlmICh2YXItPnZhbC5zdHJpbmdbMF0gPiBOU19IQVNIX01BWCkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnZhcmJpbmQ6ZmluZ2VycHJpbnQiLCAiaGFzaHR5cGUgJWQgPiBtYXggJWRcbiIsCisgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuc3RyaW5nWzBdLCBOU19IQVNIX01BWCkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqCisgKiBicmVhayBhIFNubXBUTFNGaW5nZXJwcmludCBpbnRvIGFuIGludGVnZXIgaGFzaCB0eXBlICsgaGV4IHN0cmluZworICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIDogb24gc3VjY2VzcworICogQHJldHVybiBTTk1QRVJSX0dFTkVSUiAgOiBvbiBmYWlsdXJlCisgKi8KK2ludAorbmV0c25tcF90bHNfZmluZ2VycHJpbnRfcGFyc2UoY29uc3QgdV9jaGFyICpiaW5hcnlfZnAsIGludCBmcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZnBfc3RyX3B0ciwgdV9pbnQgKmZwX3N0cl9sZW4sIGludCByZWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICpoYXNoX3R5cGVfcHRyKQoreworICAgIGludCAgICAgbmVlZGVkOworICAgIHNpemVfdCAgZnBfc3RyX3NpemU7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaGFzaF90eXBlX3B0ciwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggZnBfc3RyX3B0ciwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggZnBfc3RyX2xlbiwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIC8qCisgICAgICogb3V0cHV0IHN0cmluZyBpcyBiaW5hcnkgZnAgbGVuZ3RoIChtaW51cyAxIGZvciBpbml0aWFsIGhhc2ggdHlwZSAKKyAgICAgKiBjaGFyKSAqIDIgZm9yIGJpbiB0byBoZXggY29udmVyc2lvbiwgKyAxIGZvciBudWxsIHRlcm1pbmF0aW9uLgorICAgICAqLworICAgIG5lZWRlZCA9ICgoZnBfbGVuIC0gMSkgKiAyKSArIDE7CisgICAgaWYgKCpmcF9zdHJfbGVuIDwgbmVlZGVkKSB7CisgICAgICAgIERFQlVHTVNHVCgoInRsczpmcDpwYXJzZSIsICJuZWVkICVkIGJ5dGVzIGZvciBvdXRwdXRcbiIsIG5lZWRlZCApKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogbWFrZSBzdXJlIGhhc2ggdHlwZSBpcyBpbiB2YWxpZCByYW5nZQorICAgICAqLworICAgIGlmICgoMCA9PSBiaW5hcnlfZnBbMF0pIHx8IChiaW5hcnlfZnBbMF0gPiBOU19IQVNIX01BWCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzOmZwOnBhcnNlIiwgImludmFsaWQgaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGJpbmFyeV9mcFswXSkpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBuZXRzbm1wX2JpbmFyeV90b19oZXggYWxsb2NhdGUgc3BhY2UgZm9yIHN0cmluZywgaWYgbmVlZGVkCisgICAgICovCisgICAgZnBfc3RyX3NpemUgPSAqZnBfc3RyX2xlbjsKKyAgICAqaGFzaF90eXBlX3B0ciA9IGJpbmFyeV9mcFswXTsKKyAgICBuZXRzbm1wX2JpbmFyeV90b19oZXgoKHVfY2hhcioqKWZwX3N0cl9wdHIsICZmcF9zdHJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbGxvYywgJmJpbmFyeV9mcFsxXSwgZnBfbGVuIC0gMSk7CisgICAgKmZwX3N0cl9sZW4gPSBmcF9zdHJfc2l6ZTsKKyAgICBpZiAoMCA9PSAqZnBfc3RyX2xlbikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfRklOR0VSUFJJTlRTICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNfRklOR0VSUFJJTlRfQlVJTEQKKy8qKgorICogY29tYmluZSBhIGhhc2ggdHlwZSBhbmQgaGV4IGZpbmdlcnByaW50IGludG8gYSBTbm1wVExTRmluZ2VycHJpbnQKKyAqCisgKiBPbiBlbnRyeSwgdGxzX2ZwX2xlbiBzaG91bGQgcG9pbnQgdG8gdGhlIHNpemUgb2YgdGhlIHRsc19mcCBidWZmZXIuCisgKiBPbiBhIHN1Y2Nlc3NmdWwgZXhpdCwgdGxzX2ZwX2xlbiB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAqIGZpbmdlcnByaW50IGJ1ZmZlci4KKyAqLworaW50CituZXRzbm1wX3Rsc19maW5nZXJwcmludF9idWlsZChpbnQgaGFzaF90eXBlLCBjb25zdCBjaGFyICpoZXhfZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnRsc19mcCwgc2l6ZV90ICp0bHNfZnBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVhbGxvYykKK3sKKyAgICBpbnQgICAgIGhleF9mcF9sZW4sIHJjOworICAgIHNpemVfdCAgdGxzX2ZwX3NpemU7CisgICAgc2l6ZV90ICBvZmZzZXQ7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaGV4X2ZwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCB0bHNfZnAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHRsc19mcF9sZW4sIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBoZXhfZnBfbGVuID0gc3RybGVuKGhleF9mcCk7CisgICAgaWYgKDAgPT0gaGV4X2ZwX2xlbikgeworICAgICAgICAqdGxzX2ZwX2xlbiA9IDA7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgfQorCisgICAgaWYgKChoYXNoX3R5cGUgPD0gTlNfSEFTSF9OT05FKSB8fCAoaGFzaF90eXBlID4gTlNfSEFTSF9NQVgpKSB7CisgICAgICAgIERFQlVHTVNHVCgoInRsczpmcDpidWlsZCIsICJpbnZhbGlkIGhhc2ggdHlwZSAlZFxuIiwgaGFzaF90eXBlICkpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IHRvIGJpbmFyeQorICAgICAqLworICAgIG9mZnNldCA9IDE7CisgICAgcmMgPSBuZXRzbm1wX2hleF90b19iaW5hcnkodGxzX2ZwLCAmdGxzX2ZwX3NpemUsICZvZmZzZXQsIHJlYWxsb2MsIGhleF9mcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiIpOworICAgICp0bHNfZnBfbGVuID0gdGxzX2ZwX3NpemU7CisgICAgaWYgKHJjICE9IDEpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAqdGxzX2ZwX2xlbiA9IG9mZnNldDsKKyAgICAoKnRsc19mcClbMF0gPSBoYXNoX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU19GSU5HRVJQUklOVF9CVUlMRCAqLworCisvKioKKyAqIFRydXN0cyBhIGdpdmVuIGNlcnRpZmljYXRlIGZvciB1c2UgaW4gVExTIHRyYW5zbGF0aW9ucy4KKyAqCisgKiBAcGFyYW0gY3R4IFRoZSBTU0wgY29udGV4dCB0byB0cnVzdCB0aGUgY2VydGlmaWNhdGUgaW4KKyAqIEBwYXJhbSB0aGlzY2VydCBUaGUgbmV0c25tcF9jZXJ0IGNlcnRpZmljYXRlIHRvIHRydXN0CisgKgorICogQHJldHVybiBTTk1QRVJSX1NVQ0NFU1MgOiBvbiBzdWNjZXNzCisgKiBAcmV0dXJuIFNOTVBFUlJfR0VORVJSICA6IG9uIGZhaWx1cmUKKyAqLworaW50CituZXRzbm1wX2NlcnRfdHJ1c3QoU1NMX0NUWCAqY3R4LCBuZXRzbm1wX2NlcnQgKnRoaXNjZXJ0KQoreworICAgIFg1MDlfU1RPUkUgICAgICpjZXJ0c3RvcmU7CisgICAgWDUwOSAgICAgICAgICAgKmNlcnQ7CisgICAgY2hhciAgICAgICAgICAgKmZpbmdlcnByaW50OworCisgICAgLyogZW5zdXJlIGFsbCBuZWVkZWQgcGllY2VzIGFyZSBwcmVzZW50ICovCisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gdGhpc2NlcnQsICJOVUxMIGNlcnRpZmljYXRlIHBhc3NlZCBpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSB0aGlzY2VydC0+aW5mby5kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIGNlcnRpZmljYXRlIGRpcmVjdG9yeSBuYW1lIHBhc3NlZCBpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSB0aGlzY2VydC0+aW5mby5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5VTEwgY2VydGlmaWNhdGUgZmlsZW5hbWUgbmFtZSBwYXNzZWQgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKiBnZXQgdGhlIHRydXN0ZWQgY2VydGlmaWNhdGUgc3RvcmUgYW5kIHRoZSBjZXJ0aWZpY2F0ZSB0byBsb2FkIGludG8gaXQgKi8KKyAgICBjZXJ0c3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKGN0eCk7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gY2VydHN0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGdldCBjZXJ0aWZpY2F0ZSB0cnVzdCBzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKyAgICBjZXJ0ID0gbmV0c25tcF9vY2VydF9nZXQodGhpc2NlcnQpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IGNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIGZyb20gbmV0c25tcF9jZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyogUHV0IHRoZSBjZXJ0aWZpY2F0ZSBpbnRvIHRoZSBzdG9yZSAqLworICAgIGZpbmdlcnByaW50ID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KGNlcnQsIC0xKTsKKyAgICBERUJVR01TR1RMKCgiY2VydDp0cnVzdCIsCisgICAgICAgICAgICAgICAgInB1dHRpbmcgdHJ1c3RlZCBjZXJ0ICVwID0gJXMgaW4gY2VydHN0b3JlICVwXG4iLCBjZXJ0LAorICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LCBjZXJ0c3RvcmUpKTsKKyAgICBTTk1QX0ZSRUUoZmluZ2VycHJpbnQpOworICAgIFg1MDlfU1RPUkVfYWRkX2NlcnQoY2VydHN0b3JlLCBjZXJ0KTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKgorICogVHJ1c3RzIGEgZ2l2ZW4gY2VydGlmaWNhdGUncyByb290IENBIGZvciB1c2UgaW4gVExTIHRyYW5zbGF0aW9ucy4KKyAqIElmIG5vIGlzc3VlciBpcyBmb3VuZCB0aGUgZXhpc3RpbmcgY2VydGlmaWNhdGUgd2lsbCBiZSB0cnVzdGVkIGluc3RlYWQuCisgKgorICogQHBhcmFtIGN0eCBUaGUgU1NMIGNvbnRleHQgdG8gdHJ1c3QgdGhlIGNlcnRpZmljYXRlIGluCisgKiBAcGFyYW0gdGhpc2NlcnQgVGhlIG5ldHNubXBfY2VydCBjZXJ0aWZpY2F0ZSAKKyAqCisgKiBAcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyA6IG9uIHN1Y2Nlc3MKKyAqIEByZXR1cm4gU05NUEVSUl9HRU5FUlIgIDogb24gZmFpbHVyZQorICovCitpbnQKK25ldHNubXBfY2VydF90cnVzdF9jYShTU0xfQ1RYICpjdHgsIG5ldHNubXBfY2VydCAqdGhpc2NlcnQpCit7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gdGhpc2NlcnQsICJOVUxMIGNlcnRpZmljYXRlIHBhc3NlZCBpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qIGZpbmQgdGhlIHJvb3QgQ0EgY2VydGlmaWNhdGUgaW4gdGhlIGNoYWluICovCisgICAgREVCVUdNU0dUTCgoImNlcnQ6dHJ1c3RfY2EiLCAiY2hlY2tpbmcgcm9vdHMgZm9yICVwIFxuIiwgdGhpc2NlcnQpKTsKKyAgICB3aGlsZSAodGhpc2NlcnQtPmlzc3Vlcl9jZXJ0KSB7CisgICAgICAgIHRoaXNjZXJ0ID0gdGhpc2NlcnQtPmlzc3Vlcl9jZXJ0OworICAgICAgICBERUJVR01TR1RMKCgiY2VydDp0cnVzdF9jYSIsICIgIHVwIG9uZSB0byAlcFxuIiwgdGhpc2NlcnQpKTsKKyAgICB9CisKKyAgICAvKiBBZGQgdGhlIGZvdW5kIHRvcCBsZXZlciBjZXJ0aWZpY2F0ZSB0byB0aGUgc3RvcmUgKi8KKyAgICByZXR1cm4gbmV0c25tcF9jZXJ0X3RydXN0KGN0eCwgdGhpc2NlcnQpOworfQorCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2NlcnRfZ2V0X3RydXN0bGlzdCh2b2lkKQoreworICAgIGlmICghX3RydXN0ZWRfY2VydHMpCisgICAgICAgIF9zZXR1cF90cnVzdGVkX2NlcnRzKCk7CisgICAgcmV0dXJuIF90cnVzdGVkX2NlcnRzOworfQorCitzdGF0aWMgdm9pZAorX3BhcnNlX3RydXN0Y2VydChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBpZiAoIV90cnVzdGVkX2NlcnRzKQorICAgICAgICBfc2V0dXBfdHJ1c3RlZF9jZXJ0cygpOworCisgICAgaWYgKCFfdHJ1c3RlZF9jZXJ0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09OVEFJTkVSX0lOU0VSVChfdHJ1c3RlZF9jZXJ0cywgc3RyZHVwKGxpbmUpKTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbW9kZSB0ZXh0IGZ1bmN0aW9ucworICoKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKl9tb2RlX3N0cih1X2NoYXIgbW9kZSkKK3sKKyAgICByZXR1cm4gX21vZGVzW21vZGVdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqX3doZXJlX3N0cih1X2ludCB3aGF0KQoreworICAgIHN3aXRjaCAod2hhdCkgeworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfREVGQVVMVDogcmV0dXJuICJERUZBVUxUIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX0ZJTEU6IHJldHVybiAiRklMRSI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9GSU5HRVJQUklOVDogcmV0dXJuICJGSU5HRVJQUklOVCI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9NVUxUSVBMRTogcmV0dXJuICJNVUxUSVBMRSI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9DQTogcmV0dXJuICJDQSI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9TQU5fUkZDODIyOiByZXR1cm4gIlNBTl9SRkM4MjIiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfU0FOX0ROUzogcmV0dXJuICJTQU5fRE5TIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX1NBTl9JUEFERFI6IHJldHVybiAiU0FOX0lQQUREUiI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9DT01NT05fTkFNRTogcmV0dXJuICJDT01NT05fTkFNRSI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9UQVJHRVRfUEFSQU06IHJldHVybiAiVEFSR0VUX1BBUkFNIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX1RBUkdFVF9BRERSOiByZXR1cm4gIlRBUkdFVF9BRERSIjsKKyAgICB9CisKKyAgICByZXR1cm4gIlVOS05PV04iOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmaW5kIGZ1bmN0aW9ucworICoKKyAqLworc3RhdGljIG5ldHNubXBfY2VydCAqCitfY2VydF9maW5kX2ZwKGNvbnN0IGNoYXIgKmZpbmdlcnByaW50KQoreworICAgIG5ldHNubXBfY2VydCBjZXJ0LCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgZnBbRVZQX01BWF9NRF9TSVpFXTsKKworICAgIGlmIChOVUxMID09IGZpbmdlcnByaW50KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0cmxjcHkoZnAsIGZpbmdlcnByaW50LCBzaXplb2YoZnApKTsKKyAgICBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oZnApOworCisgICAgLyoqIGNsZWFyIHNlYXJjaCBrZXkgKi8KKyAgICBtZW1zZXQoJmNlcnQsIDB4MDAsIHNpemVvZihjZXJ0KSk7CisKKyAgICBjZXJ0LmZpbmdlcnByaW50ID0gZnA7CisKKyAgICByZXN1bHQgPSBDT05UQUlORVJfRklORChfY2VydHMsJmNlcnQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiByZWR1Y2Ugc3Vic2V0IGJ5IGVsaW1pbmF0aW5nIGFueSBmaWxlbmFtZXMgdGhhdCBhcmUgbG9uZ2VyIHRoYW4KKyAqIHRoZSBzcGVjaWZpZWQgZmlsZSBuYW1lLiBlLmcuICdzbm1wJyB3b3VsZCBtYXRjaCAnc25tcC5rZXknIGFuZAorICogJ3NubXBkLmtleScuIFdlIG9ubHkgd2FudCAnc25tcC5YJywgd2hlcmUgWCBpcyBhIHZhbGlkIGV4dGVuc2lvbi4KKyAqLworc3RhdGljIHZvaWQKK19yZWR1Y2Vfc3Vic2V0KG5ldHNubXBfdm9pZF9hcnJheSAqbWF0Y2hpbmcsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIG5ldHNubXBfY2VydF9jb21tb24gKmNjOworICAgIGludCBpID0gMCwgaiwgbmV3c2l6ZSwgcG9zOworCisgICAgaWYgKChOVUxMID09IG1hdGNoaW5nKSB8fCAoTlVMTCA9PSBmaWxlbmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBvcyA9IHN0cmxlbihmaWxlbmFtZSk7CisgICAgbmV3c2l6ZSA9IG1hdGNoaW5nLT5zaXplOworCisgICAgZm9yKCA7IGkgPCBtYXRjaGluZy0+c2l6ZTsgKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHdlJ3ZlIHNoaWZ0ZWQgbWF0Y2hlcyBkb3duIHdlJ2xsIGhpdCBhIE5VTEwgZW50cnkgYmVmb3JlCisgICAgICAgICAqIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChOVUxMID09IG1hdGNoaW5nLT5hcnJheVtpXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKgorICAgICAgICAgKiBza2lwIG92ZXIgdmFsaWQgbWF0Y2hlcy4gTm90ZSB0aGF0IHdlIGRvIG5vdCB3YW50IHRvIHVzZQorICAgICAgICAgKiBfdHlwZV9mcm9tX2ZpbGVuYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgY2MgPSAobmV0c25tcF9jZXJ0X2NvbW1vbiopbWF0Y2hpbmctPmFycmF5W2ldOworICAgICAgICBpZiAoKCcuJyA9PSBjYy0+ZmlsZW5hbWVbcG9zXSkgJiYKKyAgICAgICAgICAgIChOU19DRVJUX1RZUEVfVU5LTk9XTiAhPSBfY2VydF9leHRfdHlwZSgmY2MtPmZpbGVuYW1lW3BvcysxXSkpKSB7CisgICAgICAgICAgICArK2k7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBzaHJpbmsgYXJyYXkgYnkgc2hpZnRpbmcgZXZlcnl0aGluZyBkb3duIGEgc3BvdC4gTWlnaHQgbm90IGJlCisgICAgICAgICAqIHRoZSBtb3N0IGVmZmljaWVudCBzb2xvdXRpb24sIGJ1dCB0aGlzIGlzIGp1c3QgaGFwcGVuaW5nIGF0CisgICAgICAgICAqIHN0YXJ0dXAgYW5kIGhvcGVmdWxseSBtb3N0IGNlcnRzIHdvbid0IGhhdmUgY29tbW9uIHByZWZpeGVzLgorICAgICAgICAgKi8KKyAgICAgICAgLS1uZXdzaXplOworICAgICAgICBmb3IgKCBqPWk7IGogPCBuZXdzaXplOyArK2ogKQorICAgICAgICAgICAgbWF0Y2hpbmctPmFycmF5W2pdID0gbWF0Y2hpbmctPmFycmF5W2orMV07CisgICAgICAgIG1hdGNoaW5nLT5hcnJheVtqXSA9IE5VTEw7CisgICAgICAgIC8qKiBubyArK2k7IGp1c3Qgc2hpZnRlZCBkb3duLCBuZWVkIHRvIGxvb2sgYXQgc2FtZSBwb3NpdGlvbiBhZ2FpbiAqLworICAgIH0KKyAgICAvKgorICAgICAqIGlmIHdlIHNoaWZ0ZWQsIHNldCB0aGUgbmV3IHNpemUKKyAgICAgKi8KKyAgICBpZiAobmV3c2l6ZSAhPSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3Vic2V0OnJlZHVjZSIsICJzaHJhbmsgZnJvbSAlIiBORVRTTk1QX1BSSXogImQgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmctPnNpemUsIG5ld3NpemUpKTsKKyAgICAgICAgbWF0Y2hpbmctPnNpemUgPSBuZXdzaXplOworICAgIH0KK30KKworLyoKKyAqIHJlZHVjZSBzdWJzZXQgYnkgZWxpbWluYXRpbmcgYW55IGZpbGVuYW1lcyB0aGF0IGFyZSBub3QgdW5kZXIgdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0b3J5IHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCitfcmVkdWNlX3N1YnNldF9kaXIobmV0c25tcF92b2lkX2FycmF5ICptYXRjaGluZywgY29uc3QgY2hhciAqZGlyZWN0b3J5KQoreworICAgIG5ldHNubXBfY2VydF9jb21tb24gKmNjOworICAgIGludCAgICAgICAgICAgICAgICAgIGkgPSAwLCBqLCBuZXdzaXplLCBkaXJfbGVuOworICAgIGNoYXIgICAgICAgICAgICAgICAgIGRpcltTTk1QX01BWFBBVEhdLCAqcG9zOworCisgICAgaWYgKChOVUxMID09IG1hdGNoaW5nKSB8fCAoTlVMTCA9PSBkaXJlY3RvcnkpKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXdzaXplID0gbWF0Y2hpbmctPnNpemU7CisKKyAgICAvKgorICAgICAqIGRpciBzdHJ1Y3Qgc2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlCisgICAgICogICAgICAgICAgL3Vzci9zaGFyZS9zbm1wL3Rscy9jZXJ0cworICAgICAqICAgICAgICAgIC91c3Ivc2hhcmUvc25tcC90bHMvcHJpdmF0ZQorICAgICAqCisgICAgICogc28gd2Ugd2FudCB0byBiYWNrdXAgdXAgb24gZGlyZWN0b3J5IGZvciBjb21wYXJlcy4uCisgICAgICovCisgICAgc3RybGNweShkaXIsIGRpcmVjdG9yeSwgc2l6ZW9mKGRpcikpOworICAgIHBvcyA9IHN0cnJjaHIoZGlyLCAnLycpOworICAgIGlmIChOVUxMID09IHBvcykgeworICAgICAgICBERUJVR01TR1RMKCgiY2VydDpzdWJzZXQ6ZGlyIiwgIm5vICcvJyBpbiBkaXJlY3RvcnkgJXNcbiIsIGRpcmVjdG9yeSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICpwb3MgPSAnXDAnOworICAgIGRpcl9sZW4gPSBzdHJsZW4oZGlyKTsKKworICAgIGZvciggOyBpIDwgbWF0Y2hpbmctPnNpemU7ICkgeworICAgICAgICAvKgorICAgICAgICAgKiBpZiB3ZSd2ZSBzaGlmdGVkIG1hdGNoZXMgZG93biB3ZSdsbCBoaXQgYSBOVUxMIGVudHJ5IGJlZm9yZQorICAgICAgICAgKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCisgICAgICAgICAqLworICAgICAgICBpZiAoTlVMTCA9PSBtYXRjaGluZy0+YXJyYXlbaV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2tpcCBvdmVyIHZhbGlkIG1hdGNoZXMuIAorICAgICAgICAgKi8KKyAgICAgICAgY2MgPSAobmV0c25tcF9jZXJ0X2NvbW1vbiopbWF0Y2hpbmctPmFycmF5W2ldOworICAgICAgICBpZiAoc3RybmNtcChkaXIsIGNjLT5kaXIsIGRpcl9sZW4pID09IDApIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIHNocmluayBhcnJheSBieSBzaGlmdGluZyBldmVyeXRoaW5nIGRvd24gYSBzcG90LiBNaWdodCBub3QgYmUKKyAgICAgICAgICogdGhlIG1vc3QgZWZmaWNpZW50IHNvbG91dGlvbiwgYnV0IHRoaXMgaXMganVzdCBoYXBwZW5pbmcgYXQKKyAgICAgICAgICogc3RhcnR1cCBhbmQgaG9wZWZ1bGx5IG1vc3QgY2VydHMgd29uJ3QgaGF2ZSBjb21tb24gcHJlZml4ZXMuCisgICAgICAgICAqLworICAgICAgICAtLW5ld3NpemU7CisgICAgICAgIGZvciAoIGo9aTsgaiA8IG5ld3NpemU7ICsraiApCisgICAgICAgICAgICBtYXRjaGluZy0+YXJyYXlbal0gPSBtYXRjaGluZy0+YXJyYXlbaisxXTsKKyAgICAgICAgbWF0Y2hpbmctPmFycmF5W2pdID0gTlVMTDsKKyAgICAgICAgLyoqIG5vICsraTsganVzdCBzaGlmdGVkIGRvd24sIG5lZWQgdG8gbG9vayBhdCBzYW1lIHBvc2l0aW9uIGFnYWluICovCisgICAgfQorICAgIC8qCisgICAgICogaWYgd2Ugc2hpZnRlZCwgc2V0IHRoZSBuZXcgc2l6ZQorICAgICAqLworICAgIGlmIChuZXdzaXplICE9IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdWJzZXQ6ZGlyIiwgInNocmFuayBmcm9tICUiIE5FVFNOTVBfUFJJeiAiZCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBtYXRjaGluZy0+c2l6ZSwgbmV3c2l6ZSkpOworICAgICAgICBtYXRjaGluZy0+c2l6ZSA9IG5ld3NpemU7CisgICAgfQorfQorCitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICoKK19jZXJ0X2ZpbmRfc3Vic2V0X2NvbW1vbihjb25zdCBjaGFyICpmaWxlbmFtZSwgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBuZXRzbm1wX2NlcnRfY29tbW9uICAgc2VhcmNoOworICAgIG5ldHNubXBfdm9pZF9hcnJheSAgICptYXRjaGluZzsKKworICAgIG5ldHNubXBfYXNzZXJ0KGZpbGVuYW1lICYmIGNvbnRhaW5lcik7CisKKyAgICBtZW1zZXQoJnNlYXJjaCwgMHgwMCwgc2l6ZW9mKHNlYXJjaCkpOyAgICAvKiBjbGVhciBzZWFyY2gga2V5ICovCisKKyAgICBzZWFyY2guZmlsZW5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKixmaWxlbmFtZSk7CisKKyAgICBtYXRjaGluZyA9IENPTlRBSU5FUl9HRVRfU1VCU0VUKGNvbnRhaW5lciwgJnNlYXJjaCk7CisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN1YnNldDpmb3VuZCIsICIlIiBORVRTTk1QX1BSSXogImQgbWF0Y2hlc1xuIiwgbWF0Y2hpbmcgPworICAgICAgICAgICAgICAgbWF0Y2hpbmctPnNpemUgOiAwKSk7CisgICAgaWYgKG1hdGNoaW5nICYmIG1hdGNoaW5nLT5zaXplID4gMSkgeworICAgICAgICBfcmVkdWNlX3N1YnNldChtYXRjaGluZywgZmlsZW5hbWUpOworICAgICAgICBpZiAoMCA9PSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICAgICAgZnJlZShtYXRjaGluZy0+YXJyYXkpOworICAgICAgICAgICAgU05NUF9GUkVFKG1hdGNoaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbWF0Y2hpbmc7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKgorX2NlcnRfZmluZF9zdWJzZXRfZm4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAqZm5fY29udGFpbmVyOworICAgIG5ldHNubXBfdm9pZF9hcnJheSAgICptYXRjaGluZzsKKworICAgIC8qKiBmaW5kIHN1YmNvbnRhaW5lciB3aXRoIGZpbGVuYW1lIGFzIGtleSAqLworICAgIGZuX2NvbnRhaW5lciA9IFNVQkNPTlRBSU5FUl9GSU5EKF9jZXJ0cywgImNlcnRzX2ZuIik7CisgICAgbmV0c25tcF9hc3NlcnQoZm5fY29udGFpbmVyKTsKKworICAgIG1hdGNoaW5nID0gX2NlcnRfZmluZF9zdWJzZXRfY29tbW9uKGZpbGVuYW1lLCBmbl9jb250YWluZXIpOworICAgIGlmIChtYXRjaGluZyAmJiAobWF0Y2hpbmctPnNpemUgPiAxKSAmJiBkaXJlY3RvcnkpIHsKKyAgICAgICAgX3JlZHVjZV9zdWJzZXRfZGlyKG1hdGNoaW5nLCBkaXJlY3RvcnkpOworICAgICAgICBpZiAoMCA9PSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICAgICAgZnJlZShtYXRjaGluZy0+YXJyYXkpOworICAgICAgICAgICAgU05NUF9GUkVFKG1hdGNoaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbWF0Y2hpbmc7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKgorX2NlcnRfZmluZF9zdWJzZXRfc24oY29uc3QgY2hhciAqc3ViamVjdCkKK3sKKyAgICBuZXRzbm1wX2NlcnQgICAgICAgICAgc2VhcmNoOworICAgIG5ldHNubXBfdm9pZF9hcnJheSAgICptYXRjaGluZzsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAqc25fY29udGFpbmVyOworCisgICAgLyoqIGZpbmQgc3ViY29udGFpbmVyIHdpdGggc3ViamVjdCBhcyBrZXkgKi8KKyAgICBzbl9jb250YWluZXIgPSBTVUJDT05UQUlORVJfRklORChfY2VydHMsICJjZXJ0c19zbiIpOworICAgIG5ldHNubXBfYXNzZXJ0KHNuX2NvbnRhaW5lcik7CisKKyAgICBtZW1zZXQoJnNlYXJjaCwgMHgwMCwgc2l6ZW9mKHNlYXJjaCkpOyAgICAvKiBjbGVhciBzZWFyY2gga2V5ICovCisKKyAgICBzZWFyY2guc3ViamVjdCA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLHN1YmplY3QpOworCisgICAgbWF0Y2hpbmcgPSBDT05UQUlORVJfR0VUX1NVQlNFVChzbl9jb250YWluZXIsICZzZWFyY2gpOworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdWJzZXQ6Zm91bmQiLCAiJSIgTkVUU05NUF9QUkl6ICJkIG1hdGNoZXNcbiIsIG1hdGNoaW5nID8KKyAgICAgICAgICAgICAgIG1hdGNoaW5nLT5zaXplIDogMCkpOworICAgIHJldHVybiBtYXRjaGluZzsKK30KKworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqCitfa2V5X2ZpbmRfc3Vic2V0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIHJldHVybiBfY2VydF9maW5kX3N1YnNldF9jb21tb24oZmlsZW5hbWUsIF9rZXlzKTsKK30KKworLyoqIGZpbmQgYWxsIGVudHJpZXMgbWF0Y2hpbmcgZ2l2ZW4gZmluZ2VycHJpbnQgKi8KK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKgorX2ZpbmRfc3Vic2V0X2ZwKG5ldHNubXBfY29udGFpbmVyICpjZXJ0cywgY29uc3QgY2hhciAqZnApCit7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgICBlbnRyeTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgKmZwX2NvbnRhaW5lcjsKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKnZhOworCisgICAgaWYgKChOVUxMID09IGNlcnRzKSB8fCAoTlVMTCA9PSBmcCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnBfY29udGFpbmVyID0gU1VCQ09OVEFJTkVSX0ZJTkQoY2VydHMsICJjZXJ0MnNuX2ZwIik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKGZwX2NvbnRhaW5lciwgImNlcnQyc25fZnAgY29udGFpbmVyIG1pc3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIG1lbXNldCgmZW50cnksIDB4MCwgc2l6ZW9mKGVudHJ5KSk7CisKKyAgICBlbnRyeS5maW5nZXJwcmludCA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLGZwKTsKKworICAgIHZhID0gQ09OVEFJTkVSX0dFVF9TVUJTRVQoZnBfY29udGFpbmVyLCAmZW50cnkpOworICAgIHJldHVybiB2YTsKK30KKworI2lmIDAgIC8qIG5vdCB1c2VkIHlldCAqLworc3RhdGljIG5ldHNubXBfa2V5ICoKK19rZXlfZmluZF9mbihjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBuZXRzbm1wX2tleSBrZXksICpyZXN1bHQgPSBOVUxMOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBmaWxlbmFtZSk7CisKKyAgICBtZW1zZXQoJmtleSwgMHgwMCwgc2l6ZW9mKGtleSkpOyAgICAvKiBjbGVhciBzZWFyY2gga2V5ICovCisgICAga2V5LmluZm8uZmlsZW5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKixmaWxlbmFtZSk7CisgICAgcmVzdWx0ID0gQ09OVEFJTkVSX0ZJTkQoX2tleXMsJmtleSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitfdGltZV9maWx0ZXIobmV0c25tcF9maWxlICpmLCBzdHJ1Y3Qgc3RhdCAqaWR4KQoreworICAgIC8qKiBpbmNsdWRlIGlmIG10aW1lIG9yIGN0aW1lIG5ld2VyIHRoYW4gaW5kZXggbXRpbWUgKi8KKyAgICBpZiAoZiAmJiBpZHggJiYgZi0+c3RhdHMgJiYKKyAgICAgICAgKChmLT5zdGF0cy0+c3RfbXRpbWUgPj0gaWR4LT5zdF9tdGltZSkgfHwKKyAgICAgICAgIChmLT5zdGF0cy0+c3RfY3RpbWUgPj0gaWR4LT5zdF9tdGltZSkpKQorICAgICAgICByZXR1cm4gTkVUU05NUF9ESVJfSU5DTFVERTsKKworICAgIHJldHVybiBORVRTTk1QX0RJUl9FWENMVURFOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCisgKiBjZXJ0IG1hcCBmdW5jdGlvbnMKKyAqCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1BUF9DT05GSUdfVE9LRU4gImNlcnRTZWNOYW1lIgorc3RhdGljIHZvaWQgX3BhcnNlX21hcChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CitzdGF0aWMgdm9pZCBfbWFwX2ZyZWUobmV0c25tcF9jZXJ0X21hcCogZW50cnksIHZvaWQgKmN0eCk7CitzdGF0aWMgdm9pZCBfcHVyZ2VfY29uZmlnX2VudHJpZXModm9pZCk7CisKK3N0YXRpYyB2b2lkCitfaW5pdF90bHN0bUNlcnRUb1RTTih2b2lkKQoreworICAgIGNvbnN0IGNoYXIgKmNlcnRTZWNOYW1lX2hlbHAgPSBNQVBfQ09ORklHX1RPS0VOICIgUFJJT1JJVFkgRklOR0VSUFJJTlQgIgorICAgICAgICAiWy0tc2hhTk58bWQ1XSA8LS1zbiBTRUNOQU1FIHwgLS1yZmM4MjIgfCAtLWRucyB8IC0taXAgfCAtLWNuIHwgLS1hbnk+IjsKKworICAgIC8qCisgICAgICogY29udGFpbmVyIGZvciBjZXJ0IHRvIGZpbmdlcnByaW50IG1hcHBpbmcsIHdpdGggZmluZ2VycHJpbnQga2V5CisgICAgICovCisgICAgX21hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9jcmVhdGUoMSk7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBNQVBfQ09ORklHX1RPS0VOLCBfcGFyc2VfbWFwLCBfcHVyZ2VfY29uZmlnX2VudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydFNlY05hbWVfaGVscCk7Cit9CisKK25ldHNubXBfY2VydF9tYXAgKgorbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhjaGFyICpmaW5nZXJwcmludCwgWDUwOSAqb2NlcnQpCit7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXAgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2VydF9tYXApOworICAgIGlmIChOVUxMID09IGNlcnRfbWFwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbmV0c25tcF9jZXJ0X21hcFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICBpZiAoZmluZ2VycHJpbnQpIHsKKyAgICAgICAgLyoqIE1JQiBsaW1pdHMgdG8gMjU1IGJ5dGVzOyAyeCBzaW5jZSB3ZSd2ZSBnb3QgYXNjaWkgKi8KKyAgICAgICAgaWYgKHN0cmxlbihmaW5nZXJwcmludCkgPiAoU05NUEFETUlOTEVOR1RIICogMikpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmaW5nZXJwcmludCAlcyBleGNlZWRzIG1heCBsZW5ndGggJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwgKFNOTVBBRE1JTkxFTkdUSCAqIDIpKTsKKyAgICAgICAgICAgIGZyZWUoY2VydF9tYXApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY2VydF9tYXAtPmZpbmdlcnByaW50ID0gc3RyZHVwKGZpbmdlcnByaW50KTsKKyAgICB9CisgICAgaWYgKG9jZXJ0KSB7CisgICAgICAgIGNlcnRfbWFwLT5oYXNoVHlwZSA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUob2NlcnQpOworICAgICAgICBjZXJ0X21hcC0+b2NlcnQgPSBvY2VydDsKKyAgICB9CisKKyAgICByZXR1cm4gY2VydF9tYXA7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydF9tYXBfZnJlZShuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCkKK3sKKyAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU05NUF9GUkVFKGNlcnRfbWFwLT5maW5nZXJwcmludCk7CisgICAgU05NUF9GUkVFKGNlcnRfbWFwLT5kYXRhKTsKKyAgICAvKiogeDUwOSBjZXJ0IGlzbid0IG91cnMgKi8KKyAgICBmcmVlKGNlcnRfbWFwKTsgLyogU05NUF9GUkVFIHdhc3RlZCBvbiBwYXJhbSAqLworfQorCitpbnQKK25ldHNubXBfY2VydF9tYXBfYWRkKG5ldHNubXBfY2VydF9tYXAgKm1hcCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgcmM7CisKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJjZXJ0Om1hcDphZGQiLCAicHJpICVkLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBtYXAtPnByaW9yaXR5LCBtYXAtPmZpbmdlcnByaW50KSk7CisKKyAgICBpZiAoKHJjID0gQ09OVEFJTkVSX0lOU0VSVChfbWFwcywgbWFwKSkgIT0gMCkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBpbnNlcnQgbmV3IGNlcnRpZmljYXRlIG1hcCIpOworCisgICAgcmV0dXJuIHJjOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9NQVBfUkVNT1ZFCitpbnQKK25ldHNubXBfY2VydF9tYXBfcmVtb3ZlKG5ldHNubXBfY2VydF9tYXAgKm1hcCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgcmM7CisKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJjZXJ0Om1hcDpyZW1vdmUiLCAicHJpICVkLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBtYXAtPnByaW9yaXR5LCBtYXAtPmZpbmdlcnByaW50KSk7CisKKyAgICBpZiAoKHJjID0gQ09OVEFJTkVSX1JFTU9WRShfbWFwcywgbWFwKSkgIT0gMCkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCByZW1vdmUgY2VydGlmaWNhdGUgbWFwIik7CisKKyAgICByZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX01BUF9SRU1PVkUgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfTUFQX0ZJTkQKK25ldHNubXBfY2VydF9tYXAgKgorbmV0c25tcF9jZXJ0X21hcF9maW5kKG5ldHNubXBfY2VydF9tYXAgKm1hcCkKK3sKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIENPTlRBSU5FUl9GSU5EKF9tYXBzLCBtYXApOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9NQVBfRklORCAqLworCitzdGF0aWMgdm9pZAorX21hcF9mcmVlKG5ldHNubXBfY2VydF9tYXAgKm1hcCwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKK30KKworc3RhdGljIGludAorX21hcF9jb21wYXJlKG5ldHNubXBfY2VydF9tYXAgKmxocywgbmV0c25tcF9jZXJ0X21hcCAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICBpZiAobGhzLT5wcmlvcml0eSA8IHJocy0+cHJpb3JpdHkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaHMtPnByaW9yaXR5ID4gcmhzLT5wcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gc3RyY21wKGxocy0+ZmluZ2VycHJpbnQsIHJocy0+ZmluZ2VycHJpbnQpOworfQorCitzdGF0aWMgaW50CitfbWFwX2ZwX2NvbXBhcmUobmV0c25tcF9jZXJ0X21hcCAqbGhzLCBuZXRzbm1wX2NlcnRfbWFwICpyaHMpCit7CisgICAgaW50IHJjOworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICBpZiAoKHJjID0gc3RyY21wKGxocy0+ZmluZ2VycHJpbnQsIHJocy0+ZmluZ2VycHJpbnQpKSAhPSAwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAobGhzLT5wcmlvcml0eSA8IHJocy0+cHJpb3JpdHkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaHMtPnByaW9yaXR5ID4gcmhzLT5wcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX21hcF9mcF9uY29tcGFyZShuZXRzbm1wX2NlcnRfbWFwICpsaHMsIG5ldHNubXBfY2VydF9tYXAgKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgcmV0dXJuIHN0cm5jbXAobGhzLT5maW5nZXJwcmludCwgcmhzLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICBzdHJsZW4ocmhzLT5maW5nZXJwcmludCkpOworfQorCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9jcmVhdGUoaW50IHdpdGhfZnApCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNoYWluX21hcCwgKmZwOworCisgICAgY2hhaW5fbWFwID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydF9tYXA6c3RhY2s6YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gY2hhaW5fbWFwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgY29udGFpbmVyIGZvciBjZXJ0X21hcFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNoYWluX21hcC0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNlcnRfbWFwIik7CisgICAgY2hhaW5fbWFwLT5mcmVlX2l0ZW0gPSAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9tYXBfZnJlZTsKKyAgICBjaGFpbl9tYXAtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX21hcF9jb21wYXJlOworCisgICAgaWYgKCF3aXRoX2ZwKQorICAgICAgICByZXR1cm4gY2hhaW5fbWFwOworCisgICAgLyoKKyAgICAgKiBhZGQgYSBzZWNvbmRhcnkgaW5kZXggdG8gdGhlIHRhYmxlIGNvbnRhaW5lcgorICAgICAqLworICAgIGZwID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydDJzbl9mcDpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBmcCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgc3ViLWNvbnRhaW5lciBmb3IgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIik7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNoYWluX21hcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmcC0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNlcnQyc25fZnAiKTsKKyAgICBmcC0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfbWFwX2ZwX2NvbXBhcmU7CisgICAgZnAtPm5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9tYXBfZnBfbmNvbXBhcmU7CisgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KGNoYWluX21hcCwgZnApOworCisgICAgcmV0dXJuIGNoYWluX21hcDsKK30KKworaW50CituZXRzbm1wX2NlcnRfcGFyc2VfaGFzaF90eXBlKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBpbnQgcmMgPSBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyKTsKKyAgICBpZiAoU0VfRE5FID09IHJjKQorICAgICAgICByZXR1cm4gTlNfSEFTSF9OT05FOworICAgIHJldHVybiByYzsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqYykKK3sKKyAgICBpZiAoTlVMTCA9PSBjKQorICAgICAgICByZXR1cm47CisKKyAgICBDT05UQUlORVJfRlJFRV9BTEwoYywgTlVMTCk7CisgICAgQ09OVEFJTkVSX0ZSRUUoYyk7Cit9CisKKy8qKiBjbGVhciBvdXQgY29uZmlnIHJvd3MKKyAqIGNhbGxlZCBkdXJpbmcgcmVjb25maWcgcHJvY2Vzc2luZyAoZS5nLiBTSUdIVVApCisqLworc3RhdGljIHZvaWQKK19wdXJnZV9jb25maWdfZW50cmllcyh2b2lkKQoreworICAgIC8qKgorICAgICAqKiBkdXAgY29udGFpbmVyCisgICAgICoqIGl0ZXJhdGUgbG9va2luZyBmb3IgTlNDTV9GUk9NX0NPTkZJRyBmbGFnCisgICAgICoqIGRlbGV0ZSBmcm9tIG9yaWdpbmFsCisgICAgICoqIGRlbGV0ZSBkdXAKKyAgICAgKiovCisgICAgbmV0c25tcF9pdGVyYXRvciAgICppdHI7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgICpjZXJ0X21hcDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgKmNlcnRfbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCk7CisgICAgbmV0c25tcF9jb250YWluZXIgICp0bXBfbWFwcyA9IE5VTEw7CisKKyAgICBpZiAoKE5VTEwgPT0gY2VydF9tYXBzKSB8fCAoQ09OVEFJTkVSX1NJWkUoY2VydF9tYXBzKSA9PSAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiY2VydDptYXA6cmVjb25maWciLCAicmVtb3ZpbmcgbG9jYWxseSBjb25maWd1cmVkIHJvd3NcbiIpKTsKKyAgICAKKyAgICAvKgorICAgICAqIGR1cGxpY2F0ZSBjZXJ0X21hcHMgYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoZSBjb3B5LiBUaGF0IHdheSB3ZSBjYW4KKyAgICAgKiBhZGQvcmVtb3ZlIHRvIGNlcnRfbWFwcyB3aXRob3V0IGRpc3RydWJpbmcgdGhlIGl0ZXJhdG9yLgoreHgKKyAgICAgKi8KKyAgICB0bXBfbWFwcyA9IENPTlRBSU5FUl9EVVAoY2VydF9tYXBzLCBOVUxMLCAwKTsKKyAgICBpZiAoTlVMTCA9PSB0bXBfbWFwcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGR1cGxpY2F0ZSBtYXBzIGZvciByZWNvbmZpZ1xuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IodG1wX21hcHMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgcmVjb25maWdcbiIpOworICAgICAgICBDT05UQUlORVJfRlJFRSh0bXBfbWFwcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2VydF9tYXAgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgIGZvciggOyBjZXJ0X21hcDsgY2VydF9tYXAgPSBJVEVSQVRPUl9ORVhUKGl0cikpIHsKKworICAgICAgICBpZiAoIShjZXJ0X21hcC0+ZmxhZ3MgJiBOU0NNX0ZST01fQ09ORklHKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKGNlcnRfbWFwcywgY2VydF9tYXApID09IDApCisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUoY2VydF9tYXApOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisgICAgQ09OVEFJTkVSX0ZSRUUodG1wX21hcHMpOworCisgICAgcmV0dXJuOworfQorCisvKgorICBjZXJ0U2VjTmFtZSBQUklPUklUWSBbLS1zaGFOTnxtZDVdIEZJTkdFUlBSSU5UIDwtLXNuIFNFQ05BTUUgfCAtLXJmYzgyMiB8IC0tZG5zIHwgLS1pcCB8IC0tY24gfCAtLWFueT4KKworICBjZXJ0U2VjTmFtZSAgMTAwICBmZjouLjExIC0tc24gV2VzCisgIGNlcnRTZWNOYW1lICAyMDAgIGVlOi4uOjIyIC0tc24gSm9obkRvZQorICBjZXJ0U2VjTmFtZSAgMzAwICBlZTouLjoyMiAtLXJmYzgyMgorKi8KK25ldHNubXBfY2VydF9tYXAgKgorbmV0c25tcF9jZXJ0VG9UU05fcGFyc2VfY29tbW9uKGNoYXIgKipsaW5lKQoreworICAgIG5ldHNubXBfY2VydF9tYXAgKm1hcDsKKyAgICBjaGFyICAgICAgICAgICAgICp0bXAsIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF07CisgICAgc2l6ZV90ICAgICAgICAgICAgbGVuOworICAgIG5ldHNubXBfY2VydCAgICAgKnRtcGNlcnQ7CisKKyAgICBpZiAoKE5VTEwgPT0gbGluZSkgfHwgKE5VTEwgPT0gKmxpbmUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBuZWVkIHNvbWV3aGVyZSB0byBzYXZlIHJvd3MgKi8KKyAgICBpZiAoTlVMTCA9PSBfbWFwcykgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJubyBjb250YWluZXIgZm9yIGNlcnRpZmljYXRlIG1hcHBpbmdzXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHTVNHVCgoImNlcnQ6dXRpbDpjb25maWciLCAicGFyc2luZyAlc1xuIiwgKmxpbmUpKTsKKworICAgIC8qIHJlYWQgdGhlIHByaW9yaXR5ICovCisgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdG1wID0gYnVmOworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgdG1wW2xlbl0gPSAwOworICAgIGlmICghaXNkaWdpdCgweEZGICYgdG1wWzBdKSkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiY291bGQgbm90IHBhcnNlIHByaW9yaXR5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKE5VTEwsIE5VTEwpOworICAgIGlmIChOVUxMID09IG1hcCkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNlcnQgbWFwIHN0cnVjdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWFwLT5mbGFncyB8PSBOU0NNX0ZST01fQ09ORklHOworICAgIG1hcC0+cHJpb3JpdHkgPSBhdG9pKGJ1Zik7CisKKyAgICAvKiByZWFkIHRoZSBmbGFnIG9yIHRoZSBmaW5nZXJwcmludCAqLworICAgIGxlbiA9IHNpemVvZihidWYpOworICAgIHRtcCA9IGJ1ZjsKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgIHRtcFtsZW5dID0gMDsKKyAgICBpZiAoKGJ1ZlswXSA9PSAnLScpICYmIChidWZbMV0gPT0gJy0nKSkgeworICAgICAgICBtYXAtPmhhc2hUeXBlID0gbmV0c25tcF9jZXJ0X3BhcnNlX2hhc2hfdHlwZSgmYnVmWzJdKTsKKyAgICAgICAgaWYgKE5TX0hBU0hfTk9ORSA9PSBtYXAtPmhhc2hUeXBlKSB7CisgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiaW52YWxpZCBoYXNoIHR5cGUiKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgLyoqIHNldCB1cCBmb3IgZmluZ2VycHJpbnQgKi8KKyAgICAgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHRtcCA9IGJ1ZjsKKyAgICAgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICAgICAgdG1wW2xlbl0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1hcC0+aGFzaFR5cGUgPSBOU19IQVNIX1NIQTE7CisKKyAgICAvKiBsb29rIHVwIHRoZSBmaW5nZXJwcmludCAqLworICAgIHRtcGNlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLCBOU19DRVJUS0VZX01VTFRJUExFLCBidWYpOworICAgIGlmIChOVUxMID09IHRtcGNlcnQpIHsKKyAgICAgICAgLyogYXNzdW1lIGl0J3MgYSByYXcgZmluZ2VycHJpbnQgd2UgZG9uJ3QgaGF2ZSAqLworICAgICAgICBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oYnVmKTsKKyAgICAgICAgbWFwLT5maW5nZXJwcmludCA9IHN0cmR1cChidWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1hcC0+ZmluZ2VycHJpbnQgPQorICAgICAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KHRtcGNlcnQtPm9jZXJ0LCAtMSk7CisgICAgfQorICAgIAorICAgIGlmIChOVUxMID09ICpsaW5lKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJtdXN0IHNwZWNpZnkgbWFwIHR5cGUiKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogcmVhZCB0aGUgbWFwcGluZyB0eXBlICovCisgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdG1wID0gYnVmOworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgdG1wW2xlbl0gPSAwOworICAgIGlmICgoYnVmWzBdICE9ICctJykgfHwgKGJ1ZlsxXSAhPSAnLScpKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJ1bmV4cGVjdGVkIGZyb21hdDogJXNcbiIsICpsaW5lKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGlmIChzdHJjbXAoJmJ1ZlsyXSwgInNuIikgPT0gMCkgeworICAgICAgICBpZiAoTlVMTCA9PSAqbGluZSkgeworICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm11c3Qgc3BlY2lmeSBzZWNOYW1lIGZvciAtLXNuIik7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICAgICAgdG1wID0gYnVmOworICAgICAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgICAgICBtYXAtPmRhdGEgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgaWYgKG1hcC0+ZGF0YSkKKyAgICAgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoJmJ1ZlsyXSwgImNuIikgPT0gMCkKKyAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRDb21tb25OYW1lOworICAgIGVsc2UgaWYgKHN0cmNtcCgmYnVmWzJdLCAiaXAiKSA9PSAwKQorICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzczsKKyAgICBlbHNlIGlmIChzdHJjbXAoJmJ1ZlsyXSwgInJmYzgyMiIpID09IDApCisgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZTsKKyAgICBlbHNlIGlmIChzdHJjbXAoJmJ1ZlsyXSwgImRucyIpID09IDApCisgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZTsKKyAgICBlbHNlIGlmIChzdHJjbXAoJmJ1ZlsyXSwgImFueSIpID09IDApCisgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U0FOQW55OworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoInVua25vd24gYXJndW1lbnQgJXNcbiIsIGJ1Zik7CisgICAgCisgIGVuZDoKKyAgICBpZiAoMCA9PSBtYXAtPm1hcFR5cGUpIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgICAgIG1hcCA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIHZvaWQKK19wYXJzZV9tYXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbWFwID0gbmV0c25tcF9jZXJ0VG9UU05fcGFyc2VfY29tbW9uKCZsaW5lKTsKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChuZXRzbm1wX2NlcnRfbWFwX2FkZChtYXApICE9IDApIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKE1BUF9DT05GSUdfVE9LRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogZHVwbGljYXRlIHByaW9yaXR5IGZvciBjZXJ0aWZpY2F0ZSBtYXAiKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19maWxsX2NlcnRfbWFwKG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwLCBuZXRzbm1wX2NlcnRfbWFwICplbnRyeSkKK3sKKyAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpzZWNuYW1lIiwgIm1hcDogcHJpICVkIHR5cGUgJWQgZGF0YSAlc1xuIiwKKyAgICAgICAgICAgICAgIGVudHJ5LT5wcmlvcml0eSwgZW50cnktPm1hcFR5cGUsIGVudHJ5LT5kYXRhKSk7CisgICAgY2VydF9tYXAtPnByaW9yaXR5ID0gZW50cnktPnByaW9yaXR5OworICAgIGNlcnRfbWFwLT5tYXBUeXBlID0gZW50cnktPm1hcFR5cGU7CisgICAgY2VydF9tYXAtPmhhc2hUeXBlID0gZW50cnktPmhhc2hUeXBlOworICAgIGlmIChlbnRyeS0+ZGF0YSkgeworICAgICAgICBjZXJ0X21hcC0+ZGF0YSA9IHN0cmR1cChlbnRyeS0+ZGF0YSk7CisgICAgICAgIGlmIChOVUxMID09IGNlcnRfbWFwLT5kYXRhICkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNlY25hbWUgbWFwIGRhdGEgZHVwIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGdldCBzZWNuYW1lIG1hcChzKSBmb3IgZmluZ2VycHJpbnRzCisgKi8KK2ludAorbmV0c25tcF9jZXJ0X2dldF9zZWNuYW1lX21hcHMobmV0c25tcF9jb250YWluZXIgKmNlcnRfbWFwcykKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKml0cjsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAgKmNlcnRfbWFwLCAqbmV3X2NlcnRfbWFwLCAqZW50cnk7CisgICAgbmV0c25tcF9jb250YWluZXIgICpuZXdfbWFwcyA9IE5VTEw7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICpyZXN1bHRzOworICAgIGludCAgICAgICAgICAgICAgICAgajsKKworICAgIGlmICgoTlVMTCA9PSBjZXJ0X21hcHMpIHx8IChDT05UQUlORVJfU0laRShjZXJ0X21hcHMpID09IDApKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpzZWNuYW1lIiwgImxvb2tpbmcgZm9yIG1hdGNoZXMgZm9yICUiIE5FVFNOTVBfUFJJeiAiZCBmaW5nZXJwcmludHNcbiIsCisgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjZXJ0X21hcHMpKSk7CisgICAgCisgICAgLyoKKyAgICAgKiBkdXBsaWNhdGUgY2VydF9tYXBzIGFuZCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGUgY29weS4gVGhhdCB3YXkgd2UgY2FuCisgICAgICogYWRkL3JlbW92ZSB0byBjZXJ0X21hcHMgd2l0aG91dCBkaXN0cnViaW5nIHRoZSBpdGVyYXRvci4KKyAgICAgKi8KKyAgICBuZXdfbWFwcyA9IENPTlRBSU5FUl9EVVAoY2VydF9tYXBzLCBOVUxMLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBuZXdfbWFwcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGR1cGxpY2F0ZSBtYXBzIGZvciBzZWNuYW1lIG1hcHBpbmdcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKG5ld19tYXBzKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHNlY25hbWUgbWFwcGluZ3NcbiIpOworICAgICAgICBDT05UQUlORVJfRlJFRShuZXdfbWFwcyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY2VydF9tYXAgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgIGZvciggOyBjZXJ0X21hcDsgY2VydF9tYXAgPSBJVEVSQVRPUl9ORVhUKGl0cikpIHsKKworICAgICAgICByZXN1bHRzID0gX2ZpbmRfc3Vic2V0X2ZwKCBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQgKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcmVzdWx0cykgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDptYXA6c2VjbmFtZSIsICJubyBtYXRjaCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUoY2VydF9tYXBzLCBjZXJ0X21hcCkgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpzZWNuYW1lIiwgIiUiIE5FVFNOTVBfUFJJeiAiZCBtYXRjaGVzIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZXN1bHRzLT5zaXplLCBjZXJ0X21hcC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogZmlyc3QgZW50cnkgaXMgYSBmcmVlYmllCisgICAgICAgICAqLworICAgICAgICBlbnRyeSA9IChuZXRzbm1wX2NlcnRfbWFwKilyZXN1bHRzLT5hcnJheVswXTsKKyAgICAgICAgaWYgKF9maWxsX2NlcnRfbWFwKGNlcnRfbWFwLCBlbnRyeSkgIT0gMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAvKgorICAgICAgICAgKiBhZGRpdGlvbmFsIGVudHJpZXMgbXVzdCBiZSBhbGxvY2F0ZWQvaW5zZXJ0ZWQKKyAgICAgICAgICovCisgICAgICAgIGlmIChyZXN1bHRzLT5zaXplID4gMSkgeworICAgICAgICAgICAgZm9yKGo9MTsgaiA8IHJlc3VsdHMtPnNpemU7ICsraikgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gKG5ldHNubXBfY2VydF9tYXAqKXJlc3VsdHMtPmFycmF5W2pdOworICAgICAgICAgICAgICAgIG5ld19jZXJ0X21hcCA9IG5ldHNubXBfY2VydF9tYXBfYWxsb2MoZW50cnktPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm9jZXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBuZXdfY2VydF9tYXApIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgY2VydCBtYXAgZW50cnlcbiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfZmlsbF9jZXJ0X21hcChuZXdfY2VydF9tYXAsIGVudHJ5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShuZXdfY2VydF9tYXApOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld19jZXJ0X21hcC0+b2NlcnQgPSBjZXJ0X21hcC0+b2NlcnQ7CisgICAgICAgICAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY2VydF9tYXBzLG5ld19jZXJ0X21hcCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobmV3X2NlcnRfbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogZm9yIHJlc3VsdHMgKi8KKyAgICAgICAgfSAvKiByZXN1bHRzIHNpemUgPiAxICovCisKKyAgICAgICAgZnJlZShyZXN1bHRzLT5hcnJheSk7CisgICAgICAgIFNOTVBfRlJFRShyZXN1bHRzKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworICAgIENPTlRBSU5FUl9GUkVFKG5ld19tYXBzKTsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnNlY25hbWUiLAorICAgICAgICAgICAgICAgImZvdW5kICUiIE5FVFNOTVBfUFJJeiAiZCBtYXRjaGVzIGZvciBmaW5nZXJwcmludHNcbiIsCisgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjZXJ0X21hcHMpKSk7CisgICAgcmV0dXJuIDA7CisKKyAgZmFpbDoKKyAgICBpZiAocmVzdWx0cykgeworICAgICAgICBmcmVlKHJlc3VsdHMtPmFycmF5KTsKKyAgICAgICAgZnJlZShyZXN1bHRzKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworICAgIENPTlRBSU5FUl9GUkVFKG5ld19tYXBzKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoKKyAqIHNubXBUbHN0bVBhcm1zVGFibGUgZGF0YQorICoKKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEFSQU1TX0NPTkZJR19UT0tFTiAic25tcFRsc3RtUGFyYW1zIgorc3RhdGljIHZvaWQgX3BhcnNlX3BhcmFtcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CisKK3N0YXRpYyB2b2lkCitfaW5pdF90bHN0bVBhcmFtcyh2b2lkKQoreworICAgIGNvbnN0IGNoYXIgKnBhcmFtc19oZWxwID0gCisgICAgICAgIFBBUkFNU19DT05GSUdfVE9LRU4gIiB0YXJnZXRQYXJhbXNOYW1lIGhhc2hUeXBlOmZpbmdlclByaW50IjsKKyAgICAKKyAgICAvKgorICAgICAqIGNvbnRhaW5lciBmb3Igc25tcFRsc3RtUGFyYW1zVGFibGUgZGF0YQorICAgICAqLworICAgIF90bHN0bVBhcmFtcyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRsc3RtUGFyYW1zOnN0cmluZyIpOworICAgIGlmIChOVUxMID09IF90bHN0bVBhcmFtcykKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIHN1Yi1jb250YWluZXIgZm9yIHRsc3RtUGFyYW1zVGFibGVcbiIpOworICAgIGVsc2UKKyAgICAgICAgX3Rsc3RtUGFyYW1zLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidGxzdG1QYXJhbXMiKTsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIFBBUkFNU19DT05GSUdfVE9LRU4sIF9wYXJzZV9wYXJhbXMsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc19oZWxwKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX0NPTlRBSU5FUgorbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF90bHN0bVBhcmFtc19jb250YWluZXIodm9pZCkKK3sKKyAgICByZXR1cm4gX3Rsc3RtUGFyYW1zOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfQ09OVEFJTkVSICovCisKK3NubXBUbHN0bVBhcmFtcyAqCituZXRzbm1wX3Rsc3RtUGFyYW1zX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaGFzaFR5cGUsIGNvbnN0IGNoYXIgKmZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZwX2xlbikKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgKnN0cCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc25tcFRsc3RtUGFyYW1zKTsKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5hbWUpCisgICAgICAgIHN0cC0+bmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICBzdHAtPmhhc2hUeXBlID0gaGFzaFR5cGU7CisgICAgaWYgKGZwKQorICAgICAgICBzdHAtPmZpbmdlcnByaW50ID0gc3RyZHVwKGZwKTsKKyAgICBERUJVR01TR1QoKCI5OnRsc3RtUGFyYW1zOmNyZWF0ZSIsICIweCVseDogJXNcbiIsICh1X2xvbmcpc3RwLAorICAgICAgICAgICAgICAgc3RwLT5uYW1lID8gc3RwLT5uYW1lIDogIm51bGwiKSk7CisKKyAgICByZXR1cm4gc3RwOworfQorCit2b2lkCituZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUoc25tcFRsc3RtUGFyYW1zICpzdHApCit7CisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCI5OnRsc3RtUGFyYW1zOnJlbGVhc2UiLCAiMHglbHggJXNcbiIsICh1X2xvbmcpc3RwLAorICAgICAgICAgICAgICAgc3RwLT5uYW1lID8gc3RwLT5uYW1lIDogIm51bGwiKSk7CisgICAgU05NUF9GUkVFKHN0cC0+bmFtZSk7CisgICAgU05NUF9GUkVFKHN0cC0+ZmluZ2VycHJpbnQpOworICAgIGZyZWUoc3RwKTsgLyogU05NUF9GUkVFIHBvaW50bGVzcyBvbiBwYXJhbWV0ZXIgKi8KK30KKworc25tcFRsc3RtUGFyYW1zICoKK25ldHNubXBfdGxzdG1QYXJhbXNfcmVzdG9yZV9jb21tb24oY2hhciAqKmxpbmUpCit7CisgICAgc25tcFRsc3RtUGFyYW1zICAqc3RwOworICAgIGNoYXIgICAgICAgICAgICAgKnRtcCwgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXTsKKyAgICBzaXplX3QgICAgICAgICAgICBsZW47CisKKyAgICBpZiAoKE5VTEwgPT0gbGluZSkgfHwgKE5VTEwgPT0gKmxpbmUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBuZWVkIHNvbWV3aGVyZSB0byBzYXZlIHJvd3MgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChfdGxzdG1QYXJhbXMpOworCisgICAgc3RwID0gbmV0c25tcF90bHN0bVBhcmFtc19jcmVhdGUoTlVMTCwgMCwgTlVMTCwgMCk7CisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBuYW1lICovCisgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdG1wID0gYnVmOworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgdG1wW2xlbl0gPSAwOworICAgIC8qKiB4eHgtcmtzOiB2YWxpZGF0ZSBzbm1wYWRtaW5zdHJpbmc/ICovCisgICAgaWYgKGxlbikKKyAgICAgICAgc3RwLT5uYW1lID0gc3RyZHVwKGJ1Zik7CisKKyAgICAvKiogZmluZ2VycHJpbnQgaGFzaCB0eXBlKi8KKyAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICB0bXAgPSBidWY7CisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICB0bXBbbGVuXSA9IDA7CisgICAgaWYgKChidWZbMF0gPT0gJy0nKSAmJiAoYnVmWzFdID09ICctJykpIHsKKyAgICAgICAgc3RwLT5oYXNoVHlwZSA9IG5ldHNubXBfY2VydF9wYXJzZV9oYXNoX3R5cGUoJmJ1ZlsyXSk7CisKKyAgICAgICAgLyoqIHNldCB1cCBmb3IgZmluZ2VycHJpbnQgKi8KKyAgICAgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHRtcCA9IGJ1ZjsKKyAgICAgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICAgICAgdG1wW2xlbl0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHN0cC0+aGFzaFR5cGUgPU5TX0hBU0hfU0hBMTsKKyAgICAKKyAgICBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oYnVmKTsKKyAgICBzdHAtPmZpbmdlcnByaW50ID0gc3RyZHVwKGJ1Zik7CisgICAgc3RwLT5maW5nZXJwcmludF9sZW4gPSBzdHJsZW4oYnVmKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtczpyZXN0b3JlOmNvbW1vbiIsICJuYW1lICclcydcbiIsIHN0cC0+bmFtZSkpOworCisgICAgcmV0dXJuIHN0cDsKK30KKworaW50CituZXRzbm1wX3Rsc3RtUGFyYW1zX2FkZChzbm1wVGxzdG1QYXJhbXMgKnN0cCkKK3sKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtczphZGQiLCAiYWRkaW5nIGVudHJ5IDB4JWx4ICVzXG4iLCAodV9sb25nKXN0cCwKKyAgICAgICAgICAgICAgICBzdHAtPm5hbWUpKTsKKworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKF90bHN0bVBhcmFtcywgc3RwKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBpbnNlcnRpbmcgdGxzdG1QYXJhbXMgJXMiLCBzdHAtPm5hbWUpOworICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUoc3RwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfUkVNT1ZFCitpbnQKK25ldHNubXBfdGxzdG1QYXJhbXNfcmVtb3ZlKHNubXBUbHN0bVBhcmFtcyAqc3RwKQoreworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zOnJlbW92ZSIsICJyZW1vdmluZyBlbnRyeSAweCVseCAlc1xuIiwgKHVfbG9uZylzdHAsCisgICAgICAgICAgICAgICAgc3RwLT5uYW1lKSk7CisKKyAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShfdGxzdG1QYXJhbXMsIHN0cCkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVtb3ZpbmcgdGxzdG1QYXJhbXMgJXMiLCBzdHAtPm5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19SRU1PVkUgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX0ZJTkQKK3NubXBUbHN0bVBhcmFtcyAqCituZXRzbm1wX3Rsc3RtUGFyYW1zX2ZpbmQoc25tcFRsc3RtUGFyYW1zICpzdHApCit7CisgICAgc25tcFRsc3RtUGFyYW1zICpmb3VuZDsKKworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3VuZCA9IENPTlRBSU5FUl9GSU5EKF90bHN0bVBhcmFtcywgc3RwKTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19GSU5EICovCisKK3N0YXRpYyB2b2lkCitfcGFyc2VfcGFyYW1zKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIHNubXBUbHN0bVBhcmFtcyAqc3RwID0gbmV0c25tcF90bHN0bVBhcmFtc19yZXN0b3JlX2NvbW1vbigmbGluZSk7CisKKyAgICBpZiAoIXN0cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RwLT5mbGFncyA9IFRMU1RNX1BBUkFNU19GUk9NX0NPTkZJRyB8IFRMU1RNX1BBUkFNU19OT05WT0xBVElMRTsKKworICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfYWRkKHN0cCk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19maW5kX3Rsc3RtUGFyYW1zX2ZpbmdlcnByaW50KGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc25tcFRsc3RtUGFyYW1zIGxvb2t1cF9rZXksICpyZXN1bHQ7CisKKyAgICBpZiAoTlVMTCA9PSBuYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxvb2t1cF9rZXkubmFtZSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLCBuYW1lKTsKKworICAgIHJlc3VsdCA9IENPTlRBSU5FUl9GSU5EKF90bHN0bVBhcmFtcywgJmxvb2t1cF9rZXkpOworICAgIGlmICgoTlVMTCA9PSByZXN1bHQpIHx8IChOVUxMID09IHJlc3VsdC0+ZmluZ2VycHJpbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBzdHJkdXAocmVzdWx0LT5maW5nZXJwcmludCk7Cit9CisvKgorICogRU5EIHNubXBUbHN0bVBhcm1zVGFibGUgZGF0YQorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCisgKiBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YQorICoKKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQUREUl9DT05GSUdfVE9LRU4gInNubXBUbHN0bUFkZHIiCitzdGF0aWMgdm9pZCBfcGFyc2VfYWRkcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CisKK3N0YXRpYyB2b2lkCitfaW5pdF90bHN0bUFkZHIodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyICphZGRyX2hlbHAgPSAKKyAgICAgICAgQUREUl9DT05GSUdfVE9LRU4gIiB0YXJnZXRBZGRyTmFtZSBoYXNoVHlwZTpmaW5nZXJwcmludCBzZXJ2ZXJJZGVudGl0eSI7CisgICAgCisgICAgLyoKKyAgICAgKiBjb250YWluZXIgZm9yIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhCisgICAgICovCisgICAgX3Rsc3RtQWRkciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRsc3RtQWRkcjpzdHJpbmciKTsKKyAgICBpZiAoTlVMTCA9PSBfdGxzdG1BZGRyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgc3ViLWNvbnRhaW5lciBmb3IgdGxzdG1BZGRyVGFibGVcbiIpOworICAgIGVsc2UKKyAgICAgICAgX3Rsc3RtQWRkci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInRsc3RtQWRkciIpOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgQUREUl9DT05GSUdfVE9LRU4sIF9wYXJzZV9hZGRyLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaGVscCk7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfQ09OVEFJTkVSCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIodm9pZCkKK3sKKyAgICByZXR1cm4gX3Rsc3RtQWRkcjsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9DT05UQUlORVIgKi8KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIAorICovCitzbm1wVGxzdG1BZGRyICoKK25ldHNubXBfdGxzdG1BZGRyX2NyZWF0ZShjaGFyICp0YXJnZXRBZGRyTmFtZSkKK3sKKyAgICBzbm1wVGxzdG1BZGRyICplbnRyeTsKKworICAgIGlmIChOVUxMID09IHRhcmdldEFkZHJOYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzbm1wVGxzdG1BZGRyKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIERFQlVHTVNHVCgoInRsc3RtQWRkcjplbnRyeTpjcmVhdGUiLCAiZW50cnkgJXAgJXNcbiIsIGVudHJ5LAorICAgICAgICAgICAgICAgdGFyZ2V0QWRkck5hbWUgPyB0YXJnZXRBZGRyTmFtZSA6ICJOVUxMIikpOworCisgICAgZW50cnktPm5hbWUgPSBzdHJkdXAodGFyZ2V0QWRkck5hbWUpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCit2b2lkCituZXRzbm1wX3Rsc3RtQWRkcl9mcmVlKHNubXBUbHN0bUFkZHIgKmVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIFNOTVBfRlJFRShlbnRyeS0+bmFtZSk7CisgICAgU05NUF9GUkVFKGVudHJ5LT5maW5nZXJwcmludCk7CisgICAgU05NUF9GUkVFKGVudHJ5LT5pZGVudGl0eSk7CisgICAgZnJlZShlbnRyeSk7Cit9CisKK2ludAorbmV0c25tcF90bHN0bUFkZHJfcmVzdG9yZV9jb21tb24oY2hhciAqKmxpbmUsIGNoYXIgKm5hbWUsIHNpemVfdCAqbmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppZCwgc2l6ZV90ICppZF9sZW4sIGNoYXIgKmZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpmcF9sZW4sIHVfY2hhciAqaHQpCit7CisgICAgc2l6ZV90IGZwX2xlbl9zYXZlID0gKmZwX2xlbjsKKworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJm5hbWUsIG5hbWVfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSAqbGluZSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbmNvbXBsZXRlIGxpbmUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBuYW1lWypuYW1lX2xlbl0gPSAwOworCisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmZnAsIGZwX2xlbik7CisgICAgaWYgKE5VTEwgPT0gKmxpbmUpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaW5jb21wbGV0ZSBsaW5lIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZnBbKmZwX2xlbl0gPSAwOworICAgIGlmICgoZnBbMF0gPT0gJy0nKSAmJiAoZnBbMV0gPT0gJy0nKSkgeworICAgICAgICAqaHQgPSBuZXRzbm1wX2NlcnRfcGFyc2VfaGFzaF90eXBlKCZmcFsyXSk7CisgICAgICAgIAorICAgICAgICAvKiogc2V0IHVwIGZvciBmaW5nZXJwcmludCAqLworICAgICAgICAqZnBfbGVuID0gZnBfbGVuX3NhdmU7CisgICAgICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJmZwLCBmcF9sZW4pOworICAgICAgICBmcFsqZnBfbGVuXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgKmh0ID0gTlNfSEFTSF9TSEExOworICAgIG5ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihmcCk7CisgICAgKmZwX2xlbiA9IHN0cmxlbihmcCk7CisgICAgCisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmaWQsIGlkX2xlbik7CisgICAgaWRbKmlkX2xlbl0gPSAwOworICAgIAorICAgIGlmICgqaHQgPD0gTlNfSEFTSF9OT05FIHx8ICpodCA+IE5TX0hBU0hfTUFYKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQgYWxnb3JpdGhtIGZvciBmaW5nZXJwcmludCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCgwID09ICpmcF9sZW4pICYmICgoMCA9PSAqaWRfbGVuIHx8ICgqaWRfbGVuID09IDEgJiYgaWRbMF0gPT0gJyonKSkpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGVtcHR5IGZpbmdlcnByaW50IG5vdCBhbGxvd2VkIHdpdGggJyonIGlkZW50aXR5CisgICAgICAgICAqLworICAgICAgICBjb25maWdfcGVycm9yKCJtdXN0IHNwZWNpZnkgZmluZ2VycHJpbnQgZm9yICcqJyBpZGVudGl0eSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbmV0c25tcF90bHN0bUFkZHJfYWRkKHNubXBUbHN0bUFkZHIgKmVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHI6YWRkIiwgImFkZGluZyBlbnRyeSAweCVseCAlcyAlc1xuIiwKKyAgICAgICAgICAgICAgICAodV9sb25nKWVudHJ5LCBlbnRyeS0+bmFtZSwgZW50cnktPmZpbmdlcnByaW50KSk7CisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoX3Rsc3RtQWRkciwgZW50cnkpICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBpbnNlcnQgYWRkciAlcyIsIGVudHJ5LT5uYW1lKTsKKyAgICAgICAgbmV0c25tcF90bHN0bUFkZHJfZnJlZShlbnRyeSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9SRU1PVkUKK2ludAorbmV0c25tcF90bHN0bUFkZHJfcmVtb3ZlKHNubXBUbHN0bUFkZHIgKmVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKF90bHN0bUFkZHIsIGVudHJ5KSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgcmVtb3ZlIGFkZHIgJXMiLCBlbnRyeS0+bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9SRU1PVkUgKi8KKworc3RhdGljIHZvaWQKK19wYXJzZV9hZGRyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIHNubXBUbHN0bUFkZHIgKmVudHJ5OworICAgIGNoYXIgICAgICAgICAgIG5hbWVbU05NUEFETUlOTEVOR1RIICArIDFdLCBpZFtTTk1QQURNSU5MRU5HVEggICsgMV0sCisgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnRbU05NUFRMU0ZJTkdFUlBSSU5UX01BWF9MRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICBuYW1lX2xlbiA9IHNpemVvZihuYW1lKSwgaWRfbGVuID0gc2l6ZW9mKGlkKSwKKyAgICAgICAgICAgICAgICAgICBmcF9sZW4gPSBzaXplb2YoZmluZ2VycHJpbnQpOworICAgIHVfY2hhciAgICAgICAgIGhhc2hUeXBlOworICAgIGludCAgICAgICAgICAgIHJjOworCisgICAgcmMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9yZXN0b3JlX2NvbW1vbigmbGluZSwgbmFtZSwgJm5hbWVfbGVuLCBpZCwgJmlkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LCAmZnBfbGVuLCAmaGFzaFR5cGUpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOVUxMICE9IGxpbmUpCisgICAgICAgIGNvbmZpZ19wd2FybigiaWdub3JlIGV4dHJhIHRva2VucyBvbiBsaW5lIik7CisKKyAgICBlbnRyeSA9IG5ldHNubXBfdGxzdG1BZGRyX2NyZWF0ZShuYW1lKTsKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZW50cnktPmZsYWdzIHw9IFRMU1RNX0FERFJfRlJPTV9DT05GSUc7CisgICAgZW50cnktPmhhc2hUeXBlID0gaGFzaFR5cGU7CisgICAgaWYgKGZwX2xlbikKKyAgICAgICAgZW50cnktPmZpbmdlcnByaW50ID0gc3RyZHVwKGZpbmdlcnByaW50KTsKKyAgICBpZiAoaWRfbGVuKQorICAgICAgICBlbnRyeS0+aWRlbnRpdHkgPSBzdHJkdXAoaWQpOworCisgICAgbmV0c25tcF90bHN0bUFkZHJfYWRkKGVudHJ5KTsKK30KKworc3RhdGljIGNoYXIgKgorX2ZpbmRfdGxzdG1BZGRyX2ZpbmdlcnByaW50KGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc25tcFRsc3RtQWRkciAgICBsb29rdXBfa2V5LCAqcmVzdWx0OworCisgICAgaWYgKE5VTEwgPT0gbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsb29rdXBfa2V5Lm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwgbmFtZSk7CisKKyAgICByZXN1bHQgPSBDT05UQUlORVJfRklORChfdGxzdG1BZGRyLCAmbG9va3VwX2tleSk7CisgICAgaWYgKE5VTEwgPT0gcmVzdWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiByZXN1bHQtPmZpbmdlcnByaW50OworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0dFVF9TRVJWRVJJRAorY2hhciAqCituZXRzbm1wX3Rsc3RtQWRkcl9nZXRfc2VydmVySWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzbm1wVGxzdG1BZGRyICAgIGxvb2t1cF9rZXksICpyZXN1bHQ7CisKKyAgICBpZiAoTlVMTCA9PSBuYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxvb2t1cF9rZXkubmFtZSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLCBuYW1lKTsKKworICAgIHJlc3VsdCA9IENPTlRBSU5FUl9GSU5EKF90bHN0bUFkZHIsICZsb29rdXBfa2V5KTsKKyAgICBpZiAoTlVMTCA9PSByZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHJlc3VsdC0+aWRlbnRpdHk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfR0VUX1NFUlZFUklEICovCisvKgorICogRU5EIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNlbHNlCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNlcnRfdXRpbCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX1VUSUwgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY2VydF91dGlsKTsKKyNlbmRpZiAvKiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2NoZWNrX3ZhcmJpbmQuYyBiL3NubXBsaWIvY2hlY2tfdmFyYmluZC5jCmluZGV4IGM2NmYwNzMuLjEyYjdhNTIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY2hlY2tfdmFyYmluZC5jCisrKyBiL3NubXBsaWIvY2hlY2tfdmFyYmluZC5jCkBAIC0xLDkgKzEsMjcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmFyYmluZF9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl9yYW5nZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfc2l6ZV9yYW5nZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfdWludCwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfc3RvcmFnZXR5cGUsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX29pZCwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfdHJ1dGh2YWx1ZSwgY2hlY2tfdmFyYmluZF9hbGwpCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DSEVDS19WQl9ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGVfdHJhbnNpdGlvbikKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRVNfQ0hFQ0tfVkJfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEUgKi8KKworCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfdHlwZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IHR5cGUgKQogewpAQCAtNDksNiArNjcsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1JBTkdFCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfcmFuZ2UoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3csIHNpemVfdCBoaWdoICkKQEAgLTU4LDEzICs3NywxNSBAQAogICAgIGlmIChOVUxMID09IHZhcikKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAKLSAgICBpZiAoKCp2YXItPnZhbC5pbnRlZ2VyIDwgbG93KSB8fCAoKnZhci0+dmFsLmludGVnZXIgPiBoaWdoKSkgeworICAgIGlmICgoKHNpemVfdCkqdmFyLT52YWwuaW50ZWdlciA8IGxvdykgfHwgKChzaXplX3QpKnZhci0+dmFsLmludGVnZXIgPiBoaWdoKSkgewogICAgICAgICByYyA9IFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgfQogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfUkFOR0UgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1NJWkVfUkFOR0UKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9zaXplX3JhbmdlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3csIHNpemVfdCBoaWdoICkKQEAgLTgwLDYgKzEwMSw3IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9TSVpFX1JBTkdFICovCiAKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLApAQCAtOTgsNiArMTIwLDcgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9UWVBFX0FORF9NQVhfU0laRQogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBzaXplX3Qgc2l6ZSkKQEAgLTExNCw3ICsxMzcsOSBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVFlQRV9BTkRfTUFYX1NJWkUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX09JRAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX29pZChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKIHsKQEAgLTEzMCw2ICsxNTUsNyBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfT0lEICovCiAKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9pbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCkBAIC0xNDAsNiArMTY2LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplKHZhciwgQVNOX0lOVEVHRVIsIHNpemVvZihsb25nKSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9VSU5UCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfdWludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKIHsKQEAgLTE0OCw2ICsxNzUsNyBAQAogICAgIAogICAgIHJldHVybiBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUodmFyLCBBU05fVU5TSUdORUQsIHNpemVvZihsb25nKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9VSU5UICovCiAKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBsb3csIGludCBoaWdoKQpAQCAtMTY3LDYgKzE5NSw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVFJVVEhWQUxVRQogaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3RydXRodmFsdWUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCiB7CkBAIC0xODAsNiArMjA5LDcgQEAKICAgICAKICAgICByZXR1cm4gbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UodmFyLCAxLCAyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1RSVVRIVkFMVUUgKi8KIAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c192YWx1ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKQEAgLTIxMyw2ICsyNDMsMjYgQEAKICAgICByZXR1cm4gY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24ob2xkX3ZhbHVlLCAqdmFyLT52YWwuaW50ZWdlcik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRQoraW50CituZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX3ZhbHVlLCBpbnQgb2xkX3N0b3JhZ2UpCit7CisgICAgcmVnaXN0ZXIgaW50IHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIGlmIChOVUxMID09IHZhcikKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGlmICgocmMgPSBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c192YWx1ZSh2YXIpKSkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIGNoZWNrX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlX3RyYW5zaXRpb24ob2xkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXItPnZhbC5pbnRlZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9zdG9yYWdlKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9TVE9SQUdFVFlQRQogaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3N0b3JhZ2V0eXBlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgb2xkX3ZhbHVlKQogewpAQCAtMjMwLDMgKzI4MCw0IEBACiAgICAgICAgIAogICAgIHJldHVybiBjaGVja19zdG9yYWdlX3RyYW5zaXRpb24ob2xkX3ZhbHVlLCAqdmFyLT52YWwuaW50ZWdlcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9TVE9SQUdFVFlQRSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jbG9zZWRpci5jIGIvc25tcGxpYi9jbG9zZWRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGM1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2Nsb3NlZGlyLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGNsb3NlZGlyKCkgcmVwbGFjZW1lbnQgZm9yIE1TVkMuCisgKi8KKworI2RlZmluZSBXSU4zMklPX0lTX1NURElPCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKKy8qCisgKiBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IG9wZW5kaXIgCisgKi8KK2ludAorY2xvc2VkaXIoRElSICogZGlycCkKK3sKKyAgICBmcmVlKGRpcnAtPnN0YXJ0KTsKKyAgICBmcmVlKGRpcnApOworICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jbXVfY29tcGF0LmMgYi9zbm1wbGliL2NtdV9jb21wYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0NWFiYS4uMDAwMDAwMAotLS0gYS9zbm1wbGliL2NtdV9jb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmZGVmIENNVV9DT01QQVRJQkxFCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9taWJfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+Ci0KLWludAotbWliX1R4dFRvT2lkKGNoYXIgKkJ1Ziwgb2lkICoqIE9pZFAsIHNpemVfdCAqIExlblApCi17Ci0gICAgcmV0dXJuIHJlYWRfb2JqaWQoQnVmLCAqT2lkUCwgTGVuUCk7Ci19Ci0KLWludAotbWliX09pZFRvVHh0KG9pZCAqIE8sIHNpemVfdCBPaWRMZW4sIGNoYXIgKkJ1Ziwgc2l6ZV90IEJ1ZkxlbikKLXsKLSAgICBfc3ByaW50X29iamlkKEJ1ZiwgTywgT2lkTGVuKTsKLSAgICByZXR1cm4gMTsKLX0KLQotCi0vKgotICogY211X3NubXBfcGFyc2UgLSBlbXVsYXRlIENNVSBsaWJyYXJ5J3Mgc25tcF9wYXJzZS4KLSAqCi0gKiBQYXJzZSBwYWNrZXQsIHN0b3JpbmcgcmVzdWx0cyBpbnRvIFBEVS4KLSAqIFJldHVybnMgY29tbXVuaXR5IHN0cmluZyBpZiBzdWNjZXNzLCBOVUxMIGlmIGZhaWwuCi0gKiBXQVJOSU5HOiBtYXkgcmV0dXJuIGEgemVybyBsZW5ndGggY29tbXVuaXR5IHN0cmluZy4KLSAqCi0gKiBOb3RlOgotICogU29tZSBDTVUtYXdhcmUgYXBwcyBjYWxsIGluaXRfbWliKCksIGJ1dCBkbyBub3QKLSAqIGluaXRpYWxpemUgYSBzZXNzaW9uLgotICogQ2hlY2sgUmVxaWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQuCi0gKi8KLQotdV9jaGFyICAgICAgICAgKgotY211X3NubXBfcGFyc2UobmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgdV9jaGFyICAgICAgICAgKmJ1ZnAgPSBOVUxMOwotCi0gICAgc25tcF9zZXNzX2luaXQoc2Vzc2lvbik7ICAgIC8qIGdpbW1lIGEgYnJlYWshICovCi0KLSAgICBzd2l0Y2ggKHBkdS0+dmVyc2lvbikgewotICAgIGNhc2UgU05NUF9WRVJTSU9OXzE6Ci0gICAgY2FzZSBTTk1QX1ZFUlNJT05fMmM6Ci0gICAgY2FzZSBTTk1QX0RFRkFVTFRfVkVSU0lPTjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotI2lmbmRlZiBOT19JTlRFUk5BTF9WQVJMSVNUCi0gICAgaWYgKHNubXBfcGFyc2UoMCwgc2Vzc2lvbiwgcGR1LCBkYXRhLCBsZW5ndGgpICE9IFNOTVBfRVJSX05PRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotI2Vsc2UKLSAgICAvKgotICAgICAqIHdoaWxlIHRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgdmFyaWFibGVfbGlzdDoKLSAgICAgKiB1c2UgYW4gaW50ZXJuYWwgdmFyaWFibGUgbGlzdCBmb3Igc25tcF9wYXJzZTsKLSAgICAgKiBjbG9uZSB0aGUgcmVzdWx0LgotICAgICAqLwotICAgIGlmICgxKSB7Ci0gICAgICAgIG5ldHNubXBfcGR1ICAgICpzbm1wX2Nsb25lX3BkdShuZXRzbm1wX3BkdSAqKTsKLSAgICAgICAgbmV0c25tcF9wZHUgICAgKnNubXBfMmNsb25lX3BkdShuZXRzbm1wX3BkdSAqZnJvbV9wZHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnRvX3BkdSk7Ci0KLSAgICAgICAgbmV0c25tcF9wZHUgICAgKmlwZHU7Ci0gICAgICAgIGlwZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwotICAgICAgICBpZiAoc25tcF9wYXJzZSgwLCBzZXNzaW9uLCBpcGR1LCBkYXRhLCBsZW5ndGgpICE9IFNOTVBfRVJSX05PRVJST1IpIHsKLSAgICAgICAgICAgIHNubXBfZnJlZV9pbnRlcm5hbF9wZHUoaXBkdSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBwZHUgPSBzbm1wXzJjbG9uZV9wZHUoaXBkdSwgcGR1KTsKLSAgICAgICAgc25tcF9mcmVlX2ludGVybmFsX3BkdShpcGR1KTsKLSAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PX0lOVEVSTkFMX1ZBUl9MSVNUICovCi0KLSAgICAvKgotICAgICAqIEFkZCBhIG51bGwgdG8gbWVldCB0aGUgY2FsbGVyJ3MgZXhwZWN0YXRpb25zLiAKLSAgICAgKi8KLQotICAgIGJ1ZnAgPSAodV9jaGFyICopIG1hbGxvYygxICsgcGR1LT5jb21tdW5pdHlfbGVuKTsKLSAgICBpZiAoYnVmcCAmJiBwZHUtPmNvbW11bml0eV9sZW4pIHsKLSAgICAgICAgbWVtY3B5KGJ1ZnAsIHBkdS0+Y29tbXVuaXR5LCBwZHUtPmNvbW11bml0eV9sZW4pOwotICAgICAgICBidWZwW3BkdS0+Y29tbXVuaXR5X2xlbl0gPSAnXDAnOwotICAgIH0KLSAgICByZXR1cm4gKGJ1ZnApOwotfQotCi0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ01VX0NPTVBBVElCTEUgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY29udGFpbmVyLmMgYi9zbm1wbGliL2NvbnRhaW5lci5jCmluZGV4IDA4YTRjNjMuLmIyYWM5N2UgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY29udGFpbmVyLmMKKysrIGIvc25tcGxpYi9jb250YWluZXIuYwpAQCAtMSwxMCArMSwzOSBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9mYWN0b3JpZXMsIGNvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX3R5cGVzLCBjb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlLCBjb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9kdXAsIGNvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2ZyZWVfYWxsLCBjb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN1YmNvbnRhaW5lcl9maW5kLCBjb250YWluZXJfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX25jb21wYXJlX2NzdHJpbmcsIGNvbnRhaW5lcl9jb21wYXJlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlX21lbSwgY29udGFpbmVyX2NvbXBhcmUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmVfbG9uZywgY29udGFpbmVyX2NvbXBhcmUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmVfdWxvbmcsIGNvbnRhaW5lcl9jb21wYXJlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlX2ludDMyLCBjb250YWluZXJfY29tcGFyZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZV91aW50MzIsIGNvbnRhaW5lcl9jb21wYXJlKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2ZpbmRfZmFjdG9yeSwgY29udGFpbmVyX2ZhY3RvcmllcykKKwogLyoqIEBkZWZncm91cCBjb250YWluZXIgY29udGFpbmVyCiAgKi8KIApAQCAtNTIsMjkgKzgxLDQxIEBACiAgICAgICovCiAgICAgY29udGFpbmVycyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKICAgICBjb250YWluZXJzLT5jb21wYXJlID0gbmV0c25tcF9jb21wYXJlX2NzdHJpbmc7CisgICAgY29udGFpbmVycy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNvbnRhaW5lciBsaXN0Iik7CiAKICAgICAvKgogICAgICAqIHJlZ2lzdGVyIGNvbnRhaW5lcnMKICAgICAgKi8KICAgICBuZXRzbm1wX2NvbnRhaW5lcl9iaW5hcnlfYXJyYXlfaW5pdCgpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVAogICAgIG5ldHNubXBfY29udGFpbmVyX3NzbGxfaW5pdCgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05VTEwKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9udWxsX2luaXQoKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OVUxMICovCiAKICAgICAvKgogICAgICAqIGRlZmF1bHQgYWxpYXNlcyBmb3Igc29tZSBjb250YWluZXJzCiAgICAgICovCiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXIoInRhYmxlX2NvbnRhaW5lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoImJpbmFyeV9hcnJheSIpKTsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVAogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyKCJsaW5rZWRfbGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoInNvcnRlZF9zaW5nbHlfbGlua2VkX2xpc3QiKSk7CiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXIoInNzbGxfY29udGFpbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgic29ydGVkX3NpbmdseV9saW5rZWRfbGlzdCIpKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVCAqLworCisgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXJfd2l0aF9jb21wYXJlCisgICAgICAgICgiY3N0cmluZyIsIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJiaW5hcnlfYXJyYXkiKSwKKyAgICAgICAgIG5ldHNubXBfY29tcGFyZV9kaXJlY3RfY3N0cmluZyk7CiAKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3Rlcl93aXRoX2NvbXBhcmUKICAgICAgICAgKCJzdHJpbmciLCBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgiYmluYXJ5X2FycmF5IiksCiAgICAgICAgICBuZXRzbm1wX2NvbXBhcmVfY3N0cmluZyk7CiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXJfd2l0aF9jb21wYXJlCi0gICAgICAgICgic3RyaW5nOmJpbmFyeV9hcnJheSIsIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJiaW5hcnlfYXJyYXkiKSwKKyAgICAgICAgKCJzdHJpbmdfYmluYXJ5X2FycmF5IiwgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoImJpbmFyeV9hcnJheSIpLAogICAgICAgICAgbmV0c25tcF9jb21wYXJlX2NzdHJpbmcpOwogCiB9CkBAIC0xNTEsNiArMTkyLDcgQEAKICAgICByZXR1cm4gZm91bmQgPyBmb3VuZC0+ZmFjdG9yeSA6IE5VTEw7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRklORF9GQUNUT1JZCiBuZXRzbm1wX2ZhY3RvcnkgKgogbmV0c25tcF9jb250YWluZXJfZmluZF9mYWN0b3J5KGNvbnN0IGNoYXIgKnR5cGVfbGlzdCkKIHsKQEAgLTE3Myw2ICsyMTUsNyBAQAogICAgIGZyZWUobGlzdCk7CiAgICAgcmV0dXJuIGY7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRklORF9GQUNUT1JZICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KQEAgLTI3MSw4ICszMTQsNiBAQAogICAgIG5ld19pbmRleC0+cHJldiA9IGN1cnI7CiB9CiAKLSNpZm5kZWYgTkVUU05NUF9VU0VfSU5MSU5FIC8qIGRlZmF1bHQgaXMgdG8gaW5saW5lICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGlubGluZSB2ZXJzaW9uIGluCiAgKiBjb250YWluZXIuaC4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCkBAIC0zMjMsNyArMzY0LDggQEAKICAgICAgICAgcmMyID0geC0+cmVtb3ZlKHgsayk7CiAgICAgICAgIC8qKiBpZ25vcmUgcmVtb3ZlIGVycm9ycyBpZiB0aGVyZSBpcyBhIGZpbHRlciBpbiBwbGFjZSAqLwogICAgICAgICBpZiAoKHJjMikgJiYgKE5VTEwgPT0geC0+aW5zZXJ0X2ZpbHRlcikpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciByZW1vdmUgKCVkKVxuIiwgcmMyKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciAnJXMnIHJlbW92ZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgeC0+Y29udGFpbmVyX25hbWUgPyB4LT5jb250YWluZXJfbmFtZSA6ICIiLCByYzIpOwogICAgICAgICAgICAgcmMgPSByYzI7CiAgICAgICAgIH0KICAgICAgICAgeCA9IHgtPnByZXY7CkBAIC0zMzMsNiArMzc1LDIyIEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KKyAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KKyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9EVVAKK25ldHNubXBfY29udGFpbmVyICpDT05UQUlORVJfRFVQKG5ldHNubXBfY29udGFpbmVyICp4LCB2b2lkICpjdHgsIHVfaW50IGZsYWdzKQoreworICAgIGlmIChOVUxMID09IHgtPmR1cGxpY2F0ZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY29udGFpbmVyICclcycgZG9lcyBub3Qgc3VwcG9ydCBkdXBsaWNhdGVcbiIsCisgICAgICAgICAgICAgICAgIHgtPmNvbnRhaW5lcl9uYW1lID8geC0+Y29udGFpbmVyX25hbWUgOiAiIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4geC0+ZHVwbGljYXRlKHgsIGN0eCwgZmxhZ3MpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0RVUCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBpbmxpbmUgdmVyc2lvbiBpbgogICogY29udGFpbmVyLmguIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgogICovCkBAIC0zNDUsMTQgKzQwMywxNyBAQAogICAgICAgICB4ID0geC0+bmV4dDsKICAgICB3aGlsZSh4KSB7CiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICp0bXA7CisgICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgIHRtcCA9IHgtPnByZXY7Ci0gICAgICAgIGlmIChOVUxMICE9IHgtPmNvbnRhaW5lcl9uYW1lKQotICAgICAgICAgICAgU05NUF9GUkVFKHgtPmNvbnRhaW5lcl9uYW1lKTsKKyAgICAgICAgbmFtZSA9IHgtPmNvbnRhaW5lcl9uYW1lOworICAgICAgICB4LT5jb250YWluZXJfbmFtZSA9IE5VTEw7CiAgICAgICAgIHJjMiA9IHgtPmNmcmVlKHgpOwogICAgICAgICBpZiAocmMyKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgY2ZyZWUgKCVkKVxuIiwgcmMyKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciAnJXMnIGNmcmVlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lID8gbmFtZSA6ICIiLCByYzIpOwogICAgICAgICAgICAgcmMgPSByYzI7CiAgICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG5hbWUpOwogICAgICAgICB4ID0gdG1wOwogICAgIH0KICAgICByZXR1cm4gcmM7CkBAIC0zODAsNiArNDQxLDE5IEBACiAgICAgeC0+Y2xlYXIoeCwgZiwgYyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRlJFRV9BTEwKKy8qCisgKiBjbGVhciBhbGwgY29udGFpbmVycy4gV2hlbiBjbGVhcmluZyB0aGUgKmZpcnN0KiBjb250YWluZXIsIGFuZAorICogKm9ubHkqIHRoZSBmaXJzdCBjb250YWluZXIsIGNhbGwgdGhlIGZyZWVfaXRlbSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBhbGwgY29udGFpbmVycyBzaG91bGQgYmUgZW1wdHkuCisgKi8KK3ZvaWQgQ09OVEFJTkVSX0ZSRUVfQUxMKG5ldHNubXBfY29udGFpbmVyICp4LCB2b2lkICpjKQoreworICAgIENPTlRBSU5FUl9DTEVBUih4LCB4LT5mcmVlX2l0ZW0sIGMpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0ZSRUVfQUxMICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVUJDT05UQUlORVJfRklORAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgogICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgpAQCAtNDAzLDcgKzQ3Nyw3IEBACiAgICAgfQogICAgIHJldHVybiB4OwogfQotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVUJDT05UQUlORVJfRklORCAqLwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MjgsNiArNTAyLDI2IEBACiAgICAgYy0+aW5zZXJ0ID0gaW5zOwogICAgIGMtPnJlbW92ZSA9IHJlbTsKICAgICBjLT5maW5kID0gZm5kOworICAgIGMtPmZyZWVfaXRlbSA9IG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlOworfQorCitpbnQKK25ldHNubXBfY29udGFpbmVyX2RhdGFfZHVwKG5ldHNubXBfY29udGFpbmVyICpkdXAsIG5ldHNubXBfY29udGFpbmVyICpjKQoreworICAgIGlmICghZHVwIHx8ICFjKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoYy0+Y29udGFpbmVyX25hbWUpCisgICAgICAgIGR1cC0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoYy0+Y29udGFpbmVyX25hbWUpOworICAgIGR1cC0+Y29tcGFyZSA9IGMtPmNvbXBhcmU7CisgICAgZHVwLT5uY29tcGFyZSA9IGMtPm5jb21wYXJlOworICAgIGR1cC0+cmVsZWFzZSA9IGMtPnJlbGVhc2U7CisgICAgZHVwLT5pbnNlcnRfZmlsdGVyID0gYy0+aW5zZXJ0X2ZpbHRlcjsKKyAgICBkdXAtPmZyZWVfaXRlbSA9IGMtPmZyZWVfaXRlbTsKKyAgICBkdXAtPnN5bmMgPSBjLT5zeW5jOworICAgIGR1cC0+ZmxhZ3MgPSBjLT5mbGFnczsKKworICAgIHJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg3LDYgKzU4MSw3IEBACiAgICAgICAgICAgICAgICAgICAoKGNvbnN0IGNvbnRhaW5lcl90eXBlKilyaHMpLT5uYW1lKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OQ09NUEFSRV9DU1RSSU5HCiBpbnQKIG5ldHNubXBfbmNvbXBhcmVfY3N0cmluZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQogewpAQCAtNDk0LDYgKzU4OSwxMyBAQAogICAgICAgICAgICAgICAgICAgICgoY29uc3QgY29udGFpbmVyX3R5cGUqKXJocyktPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgc3RybGVuKCgoY29uc3QgY29udGFpbmVyX3R5cGUqKXJocyktPm5hbWUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OQ09NUEFSRV9DU1RSSU5HICovCisKK2ludAorbmV0c25tcF9jb21wYXJlX2RpcmVjdF9jc3RyaW5nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCit7CisgICAgcmV0dXJuIHN0cmNtcCgoY29uc3QgY2hhciopbGhzLCAoY29uc3QgY2hhciopcmhzKTsKK30KIAogLyoKICAqIGNvbXBhcmUgdHdvIG1lbW9yeSBidWZmZXJzCkBAIC01MDIsNiArNjA0LDcgQEAKICAqIGNvbXBhcmUgdXAgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc21hbGxlciwgYW5kIHRoZW4gdXNlIGxlbmd0aCB0bwogICogYnJlYWsgYW55IHRpZXMuCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9NRU0KIGludAogbmV0c25tcF9jb21wYXJlX21lbShjb25zdCBjaGFyICogbGhzLCBzaXplX3QgbGhzX2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHJocywgc2l6ZV90IHJoc19sZW4pCkBAIC01MTgsNiArNjIxLDc5IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9NRU0gKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX0xPTkcKK2ludAorbmV0c25tcF9jb21wYXJlX2xvbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKK3sKKyAgICB0eXBlZGVmIHN0cnVjdCB7IGxvbmcgaW5kZXg7IH0gZHVtbXk7CisKKyAgICBjb25zdCBkdW1teSAqbGhkID0gKGNvbnN0IGR1bW15KilsaHM7CisgICAgY29uc3QgZHVtbXkgKnJoZCA9IChjb25zdCBkdW1teSopcmhzOworCisgICAgaWYgKGxoZC0+aW5kZXggPCByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhkLT5pbmRleCA+IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9MT05HICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9VTE9ORworaW50CituZXRzbm1wX2NvbXBhcmVfdWxvbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKK3sKKyAgICB0eXBlZGVmIHN0cnVjdCB7IHVfbG9uZyBpbmRleDsgfSBkdW1teTsKKworICAgIGNvbnN0IGR1bW15ICpsaGQgPSAoY29uc3QgZHVtbXkqKWxoczsKKyAgICBjb25zdCBkdW1teSAqcmhkID0gKGNvbnN0IGR1bW15KilyaHM7CisKKyAgICBpZiAobGhkLT5pbmRleCA8IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaGQtPmluZGV4ID4gcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX1VMT05HICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9JTlQzMgoraW50CituZXRzbm1wX2NvbXBhcmVfaW50MzIoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKK3sKKyAgICB0eXBlZGVmIHN0cnVjdCB7IGludDMyX3QgaW5kZXg7IH0gZHVtbXk7CisKKyAgICBjb25zdCBkdW1teSAqbGhkID0gKGNvbnN0IGR1bW15KilsaHM7CisgICAgY29uc3QgZHVtbXkgKnJoZCA9IChjb25zdCBkdW1teSopcmhzOworCisgICAgaWYgKGxoZC0+aW5kZXggPCByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhkLT5pbmRleCA+IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9JTlQzMiAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfVUlOVDMyCitpbnQKK25ldHNubXBfY29tcGFyZV91aW50MzIoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKK3sKKyAgICB0eXBlZGVmIHN0cnVjdCB7IHVpbnQzMl90IGluZGV4OyB9IGR1bW15OworCisgICAgY29uc3QgZHVtbXkgKmxoZCA9IChjb25zdCBkdW1teSopbGhzOworICAgIGNvbnN0IGR1bW15ICpyaGQgPSAoY29uc3QgZHVtbXkqKXJoczsKKworICAgIGlmIChsaGQtPmluZGV4IDwgcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxoZC0+aW5kZXggPiByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfVUlOVDMyICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMgYi9zbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYwppbmRleCA0M2VmYzRiLi4wZjVjZjYyIDEwMDY0NAotLS0gYS9zbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYworKysgYi9zbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYwpAQCAtMzYsOSArMzYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgYmluYXJ5X2FycmF5X3RhYmxlX3MgewogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIG1heF9zaXplOyAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgZGF0YSB0YWJsZSAqLwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIGNvdW50OyAgICAgIC8qIEluZGV4IG9mIHRoZSBuZXh0IGZyZWUgZW50cnkgKi8KLSAgICB1X2ludCAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAvKiBmbGFncyAqLwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5OwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZTsgIC8qIFNpemUgb2YgYW4gaW5kaXZpZHVhbCBlbnRyeSAqLwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAqKmRhdGE7ICAgICAgIC8qIFRoZSB0YWJsZSBpdHNlbGYgKi8KIH0gYmluYXJ5X2FycmF5X3RhYmxlOwogCkBAIC02Niw5ICs2NCw5IEBACiAgICAgbWlkID0gZGF0YVsoZmlyc3QrbGFzdCkvMl07CiAgICAgCiAgICAgZG8gewotICAgICAgICB3aGlsZSAoICgoKmYpKGRhdGFbaV0sIG1pZCkgPCAwKSAmJiAoaSA8IGxhc3QpKQorICAgICAgICB3aGlsZSAoaSA8IGxhc3QgJiYgKCpmKShkYXRhW2ldLCBtaWQpIDwgMCkKICAgICAgICAgICAgICsraTsKLSAgICAgICAgd2hpbGUgKCAoKCpmKShtaWQsIGRhdGFbal0pIDwgMCkgJiYgKGogPiBmaXJzdCkpCisgICAgICAgIHdoaWxlIChqID4gZmlyc3QgJiYgKCpmKShtaWQsIGRhdGFbal0pIDwgMCkKICAgICAgICAgICAgIC0tajsKIAogICAgICAgICBpZihpIDwgaikgewpAQCAtOTksNyArOTcsNyBAQAogICAgIG5ldHNubXBfYXNzZXJ0KHQhPU5VTEwpOwogICAgIG5ldHNubXBfYXNzZXJ0KGMtPmNvbXBhcmUhPU5VTEwpOwogCi0gICAgaWYgKHQtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9VTlNPUlRFRCkKKyAgICBpZiAoYy0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX1VOU09SVEVEKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICh0LT5kaXJ0eSkgewpAQCAtMTEwLDYgKzEwOCw5IEBACiAgICAgICAgICAgICBhcnJheV9xc29ydCh0LT5kYXRhLCAwLCB0LT5jb3VudCAtIDEsIGMtPmNvbXBhcmUpOwogICAgICAgICB0LT5kaXJ0eSA9IDA7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogbm8gd2F5IHRvIGtub3cgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4uLiBqdXN0IGFzc3VtZSBzby4KKyAgICAgICAgICovCiAgICAgICAgICsrYy0+c3luYzsKICAgICB9CiAKQEAgLTExNyw2ICsxMTgsMzIgQEAKIH0KIAogc3RhdGljIGludAorbGluZWFyX3NlYXJjaChjb25zdCB2b2lkICp2YWwsIG5ldHNubXBfY29udGFpbmVyICpjKQoreworICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOworICAgIHNpemVfdCAgICAgICAgICAgICBwb3MgPSAwOworCisgICAgaWYgKCF0LT5jb3VudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCEgKGMtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9VTlNPUlRFRCkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImxpbmVhciBzZWFyY2ggb24gc29ydGVkIGNvbnRhaW5lciAlcz8hP1xuIiwKKyAgICAgICAgICAgICAgICAgYy0+Y29udGFpbmVyX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yICg7IHBvcyA8IHQtPmNvdW50OyArK3BvcykgeworICAgICAgICBpZiAoYy0+Y29tcGFyZSh0LT5kYXRhW3Bvc10sIHZhbCkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChwb3MgPj0gdC0+Y291bnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQKIGJpbmFyeV9zZWFyY2goY29uc3Qgdm9pZCAqdmFsLCBuZXRzbm1wX2NvbnRhaW5lciAqYywgaW50IGV4YWN0KQogewogICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOwpAQCAtMTI5LDYgKzE1NiwxNSBAQAogICAgIGlmICghbGVuKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBpZiAoYy0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX1VOU09SVEVEKSB7CisgICAgICAgIGlmICghZXhhY3QpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJub24tZXhhY3Qgc2VhcmNoIG9uIHVuc29ydGVkIGNvbnRhaW5lciAlcz8hP1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGMtPmNvbnRhaW5lcl9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZWFyX3NlYXJjaCh2YWwsIGMpOworICAgIH0KKwogICAgIGlmICh0LT5kaXJ0eSkKICAgICAgICAgU29ydF9BcnJheShjKTsKIApAQCAtMTg0LDcgKzIyMCw2IEBACiAgICAgdC0+bWF4X3NpemUgPSAwOwogICAgIHQtPmNvdW50ID0gMDsKICAgICB0LT5kaXJ0eSA9IDA7Ci0gICAgdC0+ZGF0YV9zaXplID0gc2l6ZW9mKHZvaWQqKTsKICAgICB0LT5kYXRhID0gTlVMTDsKIAogICAgIHJldHVybiB0OwpAQCAtMTk0LDkgKzIyOSw3IEBACiBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZWxlYXNlKG5ldHNubXBfY29udGFpbmVyICpjKQogewogICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOwotICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKLQlTTk1QX0ZSRUUodC0+ZGF0YSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRSh0LT5kYXRhKTsKICAgICBTTk1QX0ZSRUUodCk7CiAgICAgU05NUF9GUkVFKGMpOwogfQpAQCAtMjA0LDExICsyMzcsMTYgQEAKIGludAogbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQobmV0c25tcF9jb250YWluZXIgKmMsIGludCBzZXQsIHVfaW50IGZsYWdzKQogewotICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOwotICAgIGlmIChzZXQpCi0gICAgICAgIHQtPmZsYWdzID0gZmxhZ3M7CisjZGVmaW5lIEJBX0ZMQUdTIChDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVN8Q09OVEFJTkVSX0tFWV9VTlNPUlRFRCkKKworICAgIGlmIChzZXQpIHsKKyAgICAgICAgaWYgKChmbGFncyAmIEJBX0ZMQUdTKSA9PSBmbGFncykKKyAgICAgICAgICAgIGMtPmZsYWdzID0gZmxhZ3M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZsYWdzID0gKHVfaW50KS0xOyAvKiB1bnN1cHBvcnRlZCBmbGFnICovCisgICAgfQogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICgodC0+ZmxhZ3MgJiBmbGFncykgPT0gZmxhZ3MpOworICAgICAgICByZXR1cm4gKChjLT5mbGFncyAmIGZsYWdzKSA9PSBmbGFncyk7CiAgICAgcmV0dXJuIGZsYWdzOwogfQogCkBAIC0yMzIsNyArMjcwLDcgQEAKICAgICAgKiBpZiB0aGVyZSBpcyBubyBkYXRhLCByZXR1cm4gTlVMTDsKICAgICAgKi8KICAgICBpZiAoIXQtPmNvdW50KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgogICAgICAqIGlmIHRoZSB0YWJsZSBpcyBkaXJ0eSwgc29ydCBpdC4KQEAgLTI0NSwxNyArMjgzLDcxIEBACiAgICAgICovCiAgICAgaWYgKGtleSkgewogICAgICAgICBpZiAoKGluZGV4ID0gYmluYXJ5X3NlYXJjaChrZXksIGMsIGV4YWN0KSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoIWV4YWN0ICYmCisgICAgICAgICAgICBjLT5mbGFncyAmIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUykgeworICAgICAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIGR1cGxpY2F0ZXMgYXJlIGFsbG93ZWQsIHdlIGhhdmUgdG8gYmUgZXh0cmEKKyAgICAgICAgICAgICAqIHN1cmUgdGhhdCB3ZSBkaWRuJ3QganVzdCBpbmNyZW1lbnQgdG8gYSBkdXBsaWNhdGUsCisgICAgICAgICAgICAgKiB0aHVzIGNhdXNpbmcgYSBnZXRuZXh0IGxvb3AuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IGMtPmNvbXBhcmUodC0+ZGF0YVtpbmRleF0sIGtleSk7CisgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IDApIHsKKwkJREVCVUdNU0dUTCgoImNvbnRhaW5lciIsInNraXBwaW5nIGR1cGxpY2F0ZSBrZXkgaW4gJXNcbiIsCisJCQkJCSAgICBjLT5jb250YWluZXJfbmFtZSkpOworICAgICAgICAgICAgICAgIGlmICgrK2luZGV4ID09IHQtPmNvdW50KQorICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGMtPmNvbXBhcmUodC0+ZGF0YVtpbmRleF0sIGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gdC0+ZGF0YVtpbmRleF07CiB9CiAKIGludAorbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVtb3ZlX2F0KG5ldHNubXBfY29udGFpbmVyICpjLCBzaXplX3QgaW5kZXgsIHZvaWQgKipzYXZlKQoreworICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOworCisgICAgaWYgKHNhdmUpCisgICAgICAgICpzYXZlID0gTlVMTDsKKyAgICAKKyAgICAvKgorICAgICAqIGlmIHRoZXJlIGlzIG5vIGRhdGEsIHJldHVybiBOVUxMOworICAgICAqLworICAgIGlmICghdC0+Y291bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBmaW5kIG9sZCBkYXRhIGFuZCBzYXZlIGl0LCBpZiBwdHIgcHJvdmlkZWQKKyAgICAgKi8KKyAgICBpZiAoc2F2ZSkKKyAgICAgICAgKnNhdmUgPSB0LT5kYXRhW2luZGV4XTsKKworICAgIC8qCisgICAgICogaWYgZW50cnkgd2FzIGxhc3QgaXRlbSwganVzdCBkZWNyZW1lbnQgY291bnQKKyAgICAgKi8KKyAgICAtLXQtPmNvdW50OworICAgIGlmIChpbmRleCAhPSB0LT5jb3VudCkgeworICAgICAgICAvKgorICAgICAgICAgKiBvdGhlcndpc2UsIHNoaWZ0IGFycmF5IGRvd24KKyAgICAgICAgICovCisgICAgICAgIG1lbW1vdmUoJnQtPmRhdGFbaW5kZXhdLCAmdC0+ZGF0YVtpbmRleCsxXSwKKyAgICAgICAgICAgICAgICBzaXplb2Yodm9pZCopICogKHQtPmNvdW50IC0gaW5kZXgpKTsKKworICAgICAgICArK2MtPnN5bmM7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CitpbnQKIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbW92ZShuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICoqc2F2ZSkKIHsKICAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKLSAgICBzaXplX3QgICAgICAgICAgICAgaW5kZXggPSAwOworICAgIGludCAgICAgICAgICAgICAgICBpbmRleCA9IDA7CiAKICAgICBpZiAoc2F2ZSkKICAgICAgICAgKnNhdmUgPSBOVUxMOwpAQCAtMjc4LDI0ICszNzAsNyBAQAogICAgIGlmICgoaW5kZXggPSBiaW5hcnlfc2VhcmNoKGtleSwgYywgMSkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAvKgotICAgICAqIGZpbmQgb2xkIGRhdGEgYW5kIHNhdmUgaXQsIGlmIHB0ciBwcm92aWRlZAotICAgICAqLwotICAgIGlmIChzYXZlKQotICAgICAgICAqc2F2ZSA9IHQtPmRhdGFbaW5kZXhdOwotCi0gICAgLyoKLSAgICAgKiBpZiBlbnRyeSB3YXMgbGFzdCBpdGVtLCBqdXN0IGRlY3JlbWVudCBjb3VudAotICAgICAqLwotICAgIC0tdC0+Y291bnQ7Ci0gICAgaWYgKGluZGV4ICE9IHQtPmNvdW50KSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG90aGVyd2lzZSwgc2hpZnQgYXJyYXkgZG93bgotICAgICAgICAgKi8KLSAgICAgICAgbWVtbW92ZSgmdC0+ZGF0YVtpbmRleF0sICZ0LT5kYXRhW2luZGV4KzFdLCB0LT5kYXRhX3NpemUgKiAodC0+Y291bnQgLSBpbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZW1vdmVfYXQoYywgKHNpemVfdClpbmRleCwgc2F2ZSk7CiB9CiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCkBAIC0zMzYsMTUgKzQxMSwxMyBAQAogbmV0c25tcF9iaW5hcnlfYXJyYXlfaW5zZXJ0KG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICplbnRyeSkKIHsKICAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKLSAgICBpbnQgICAgICAgICAgICAgbmV3X21heCwgbmV3X3NpemU7Ci0gICAgY2hhciAgICAgICAgICAgKm5ld19kYXRhOyAgIC8qIFVzZWQgZm9yICogYSkgZXh0ZW5kaW5nIHRoZSBkYXRhIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICogYikgdGhlIG5leHQgZW50cnkgdG8gdXNlICovCisgICAgaW50ICAgICAgICAgICAgIHdhc19kaXJ0eSA9IDA7CiAgICAgLyoKICAgICAgKiBjaGVjayBmb3IgZHVwbGljYXRlcwogICAgICAqLwotICAgIGlmICghICh0LT5mbGFncyAmIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUykpIHsKLSAgICAgICAgbmV3X2RhdGEgPSBuZXRzbm1wX2JpbmFyeV9hcnJheV9nZXQoYywgZW50cnksIDEpOwotICAgICAgICBpZiAoTlVMTCAhPSBuZXdfZGF0YSkgeworICAgIGlmICghIChjLT5mbGFncyAmIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUykpIHsKKyAgICAgICAgd2FzX2RpcnR5ID0gdC0+ZGlydHk7CisgICAgICAgIGlmIChOVUxMICE9IG5ldHNubXBfYmluYXJ5X2FycmF5X2dldChjLCBlbnRyeSwgMSkpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJjb250YWluZXIiLCJub3QgaW5zZXJ0aW5nIGR1cGxpY2F0ZSBrZXlcbiIpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtMzU1LDIyICs0MjgsMjAgQEAKICAgICAgKi8KICAgICBpZiAodC0+bWF4X3NpemUgPD0gdC0+Y291bnQpIHsKICAgICAgICAgLyoKLSAgICAgICAgICogVGFibGUgaXMgZnVsbCwgc28gZXh0ZW5kIGl0IHRvIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAgKiBUYWJsZSBpcyBmdWxsLCBzbyBleHRlbmQgaXQgdG8gZG91YmxlIHRoZSBzaXplLCBvciB1c2UgMTAgZWxlbWVudHMKKyAgICAgICAgICogaWYgaXQgaXMgZW1wdHkuCiAgICAgICAgICAqLwotICAgICAgICBuZXdfbWF4ID0gMiAqIHQtPm1heF9zaXplOwotICAgICAgICBpZiAobmV3X21heCA9PSAwKQotICAgICAgICAgICAgbmV3X21heCA9IDEwOyAgICAgICAvKiBTdGFydCB3aXRoIDEwIGVudHJpZXMgKi8KKyAgICAgICAgc2l6ZV90IGNvbnN0IG5ld19tYXggPSB0LT5tYXhfc2l6ZSA+IDAgPyAyICogdC0+bWF4X3NpemUgOiAxMDsKKyAgICAgICAgdm9pZCAqKiBjb25zdCBuZXdfZGF0YSA9CisgICAgICAgICAgICAodm9pZCoqKSByZWFsbG9jKHQtPmRhdGEsIG5ld19tYXggKiBzaXplb2Yodm9pZCopKTsKIAotICAgICAgICBuZXdfc2l6ZSA9IG5ld19tYXggKiB0LT5kYXRhX3NpemU7Ci0gICAgICAgIG5ld19kYXRhID0gKGNoYXIgKikgcmVhbGxvYyh0LT5kYXRhLCBuZXdfc2l6ZSk7CiAgICAgICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBvbGRfc2l6ZSA9IHQtPm1heF9zaXplICogdC0+ZGF0YV9zaXplOwotICAgICAgICAgICAgaW50IGNvdW50ID0gbmV3X3NpemUgLSBvbGRfc2l6ZTsKLSAgICAgICAgICAgIG1lbXNldCgmbmV3X2RhdGFbb2xkX3NpemVdLCAweDAsIGNvdW50KTsKLSAgICAgICAgfQotICAgICAgICB0LT5kYXRhID0gKHZvaWQqKiluZXdfZGF0YTsKKworICAgICAgICBtZW1zZXQobmV3X2RhdGEgKyB0LT5tYXhfc2l6ZSwgMHgwLAorICAgICAgICAgICAgICAgKG5ld19tYXggLSB0LT5tYXhfc2l6ZSkgKiBzaXplb2Yodm9pZCopKTsKKworICAgICAgICB0LT5kYXRhID0gbmV3X2RhdGE7CiAgICAgICAgIHQtPm1heF9zaXplID0gbmV3X21heDsKICAgICB9CiAKQEAgLTM3OSw2ICs0NTAsMTUgQEAKICAgICAgKi8KICAgICB0LT5kYXRhW3QtPmNvdW50KytdID0gTkVUU05NUF9SRU1PVkVfQ09OU1Qodm9pZCAqLCBlbnRyeSk7CiAgICAgdC0+ZGlydHkgPSAxOworCisgICAgLyoKKyAgICAgKiBpZiBhcnJheSB3YXMgZGlydHkgYmVmb3JlIHdlIGNhbGxlZCBnZXQsIHN5bmMgd2FzIGluY3JlbWVudGVkIHdoZW4KKyAgICAgKiBnZXQgY2FsbGVkIFNvcnRBcnJheS4gSWYgd2UgZGlkbid0IGNhbGwgZ2V0IG9yIHRoZSBhcnJheSB3YXNuJ3QgZGlydHksCisgICAgICogYnVtcCBzeW5jIG5vdy4KKyAgICAgKi8KKyAgICBpZiAoIXdhc19kaXJ0eSkKKyAgICAgICAgKytjLT5zeW5jOworCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQyNSw3ICs1MDUsNyBAQAogdm9pZCAgICAgICAgICAqKgogbmV0c25tcF9iaW5hcnlfYXJyYXlfZ2V0X3N1YnNldChuZXRzbm1wX2NvbnRhaW5lciAqYywgdm9pZCAqa2V5LCBpbnQgKmxlbikKIHsKLSAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKKyAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQ7CiAgICAgdm9pZCAgICAgICAgICAqKnN1YnNldDsKICAgICBpbnQgICAgICAgICAgICAgc3RhcnQsIGVuZDsKICAgICBzaXplX3QgICAgICAgICAgaTsKQEAgLTQzMyw4ICs1MTMsMTMgQEAKICAgICAvKgogICAgICAqIGlmIHRoZXJlIGlzIG5vIGRhdGEsIHJldHVybiBOVUxMOwogICAgICAqLwotICAgIGlmICghdC0+Y291bnQgfHwgIWtleSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjIHx8ICFrZXkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOworICAgIG5ldHNubXBfYXNzZXJ0KGMtPm5jb21wYXJlKTsKKyAgICBpZiAoIXQtPmNvdW50IHwgIWMtPm5jb21wYXJlKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCiAgICAgICogaWYgdGhlIHRhYmxlIGlzIGRpcnR5LCBzb3J0IGl0LgpAQCAtNDQ3LDcgKzUzMiw3IEBACiAgICAgICovCiAgICAgc3RhcnQgPSBlbmQgPSBiaW5hcnlfc2VhcmNoX2Zvcl9zdGFydCgobmV0c25tcF9pbmRleCAqKWtleSwgYyk7CiAgICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKGkgPSBzdGFydCArIDE7IGkgPCB0LT5jb3VudDsgKytpKSB7CiAgICAgICAgIGlmICgwICE9IGMtPm5jb21wYXJlKHQtPmRhdGFbaV0sIGtleSkpCkBAIC00NTYsOSArNTQxLDkgQEAKICAgICB9CiAKICAgICAqbGVuID0gZW5kIC0gc3RhcnQgKyAxOwotICAgIHN1YnNldCA9ICh2b2lkICoqKW1hbGxvYygoKmxlbikgKiB0LT5kYXRhX3NpemUpOworICAgIHN1YnNldCA9ICh2b2lkICoqKW1hbGxvYygoKmxlbikgKiBzaXplb2Yodm9pZCopKTsKICAgICBpZiAoc3Vic2V0KQotICAgICAgICBtZW1jcHkoc3Vic2V0LCAmdC0+ZGF0YVtzdGFydF0sIHQtPmRhdGFfc2l6ZSAqICgqbGVuKSk7CisgICAgICAgIG1lbWNweShzdWJzZXQsICZ0LT5kYXRhW3N0YXJ0XSwgc2l6ZW9mKHZvaWQqKSAqICgqbGVuKSk7CiAKICAgICByZXR1cm4gc3Vic2V0OwogfQpAQCAtNTQzLDYgKzYyOCw2MCBAQAogICAgIHJldHVybiB2YTsKIH0KIAorc3RhdGljIGludCBfYmFfb3B0aW9ucyhuZXRzbm1wX2NvbnRhaW5lciAqYywgaW50IHNldCwgdV9pbnQgZmxhZ3MpCit7CisgICAgcmV0dXJuIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGMsIHNldCwgZmxhZ3MpOworfQorCitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKgorX2JhX2R1cGxpY2F0ZShuZXRzbm1wX2NvbnRhaW5lciAqYywgdm9pZCAqY3R4LCB1X2ludCBmbGFncykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqZHVwOworICAgIGJpbmFyeV9hcnJheV90YWJsZSAqZHVwdCwgKnQ7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJpbmFyeSBhcnJ5IGR1cGxpY2F0ZSBkb2VzIG5vdCBzdXBwcnQgZmxhZ3MgeWV0XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZHVwID0gbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSgpOworICAgIGlmIChOVUxMID09IGR1cCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIgbm8gbWVtb3J5IGZvciBiaW5hcnkgYXJyYXkgZHVwbGljYXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qCisgICAgICogZGVhbCB3aXRoIGNvbnRhaW5lciBzdHVmZgorICAgICAqLworICAgIGlmIChuZXRzbm1wX2NvbnRhaW5lcl9kYXRhX2R1cChkdXAsIGMpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVsZWFzZShkdXApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGRlYWwgd2l0aCBkYXRhCisgICAgICovCisgICAgZHVwdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWR1cC0+Y29udGFpbmVyX2RhdGE7CisgICAgdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOworCisgICAgZHVwdC0+bWF4X3NpemUgPSB0LT5tYXhfc2l6ZTsKKyAgICBkdXB0LT5jb3VudCA9IHQtPmNvdW50OworICAgIGR1cHQtPmRpcnR5ID0gdC0+ZGlydHk7CisKKyAgICAvKgorICAgICAqIHNoYWxsb3cgY29weQorICAgICAqLworICAgIGR1cHQtPmRhdGEgPSAodm9pZCoqKSBtYWxsb2MoZHVwdC0+bWF4X3NpemUgKiBzaXplb2Yodm9pZCopKTsKKyAgICBpZiAoTlVMTCA9PSBkdXB0LT5kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBtZW1vcnkgZm9yIGJpbmFyeSBhcnJheSBkdXBsaWNhdGVcbiIpOworICAgICAgICBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZWxlYXNlKGR1cCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbWNweShkdXB0LT5kYXRhLCB0LT5kYXRhLCBkdXB0LT5tYXhfc2l6ZSAqIHNpemVvZih2b2lkKikpOworCisgICAgcmV0dXJuIGR1cDsKK30KKwogbmV0c25tcF9jb250YWluZXIgKgogbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSh2b2lkKQogewpAQCAtNTU2LDE4ICs2OTUsMTkgQEAKICAgICB9CiAKICAgICBjLT5jb250YWluZXJfZGF0YSA9IG5ldHNubXBfYmluYXJ5X2FycmF5X2luaXRpYWxpemUoKTsKLSAgICAgICAgCi0gICAgYy0+Z2V0X3NpemUgPSBfYmFfc2l6ZTsKLSAgICBjLT5pbml0ID0gTlVMTDsKLSAgICBjLT5jZnJlZSA9IF9iYV9mcmVlOwotICAgIGMtPmluc2VydCA9IF9iYV9pbnNlcnQ7Ci0gICAgYy0+cmVtb3ZlID0gX2JhX3JlbW92ZTsKLSAgICBjLT5maW5kID0gX2JhX2ZpbmQ7CisKKyAgICAvKgorICAgICAqIE5PVEU6IENIQU5HRVMgSEVSRSBNVVNUIEJFIERVUExJQ0FURUQgSU4gZHVwbGljYXRlIEFTIFdFTEwhIQorICAgICAqLworICAgIG5ldHNubXBfaW5pdF9jb250YWluZXIoYywgTlVMTCwgX2JhX2ZyZWUsIF9iYV9zaXplLCBOVUxMLCBfYmFfaW5zZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX2JhX3JlbW92ZSwgX2JhX2ZpbmQpOwogICAgIGMtPmZpbmRfbmV4dCA9IF9iYV9maW5kX25leHQ7CiAgICAgYy0+Z2V0X3N1YnNldCA9IF9iYV9nZXRfc3Vic2V0OwogICAgIGMtPmdldF9pdGVyYXRvciA9IF9iYV9pdGVyYXRvcl9nZXQ7CiAgICAgYy0+Zm9yX2VhY2ggPSBfYmFfZm9yX2VhY2g7CiAgICAgYy0+Y2xlYXIgPSBfYmFfY2xlYXI7CisgICAgYy0+b3B0aW9ucyA9IF9iYV9vcHRpb25zOworICAgIGMtPmR1cGxpY2F0ZSA9IF9iYV9kdXBsaWNhdGU7CiAgICAgICAgIAogICAgIHJldHVybiBjOwogfQpAQCAtNjgwLDYgKzgyMCwyNSBAQAogfQogCiBzdGF0aWMgaW50CitfYmFfaXRlcmF0b3JfcmVtb3ZlKGJpbmFyeV9hcnJheV9pdGVyYXRvciAqaXQpCit7CisgICAgYmluYXJ5X2FycmF5X3RhYmxlKiB0ID0gX2JhX2l0MmNvbnQoaXQpOworICAgIGlmKE5VTEwgPT0gdCkgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzaW5jZSB0aGlzIGl0ZXJhdG9yIHdhcyB1c2VkIGZvciB0aGUgcmVtb3ZlLCBrZWVwIGl0IGluIHN5bmMgd2l0aAorICAgICAqIHRoZSBjb250YWluZXIuIEFsc28sIGJhY2sgdXAgb25lIHNvIHRoYXQgbmV4dCB3aWxsIGJlIHRoZSBwb3NpdGlvbgorICAgICAqIHRoYXQgd2FzIGp1c3QgcmVtb3ZlZC4KKyAgICAgKi8KKyAgICArK2l0LT5iYXNlLnN5bmM7CisgICAgcmV0dXJuIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbW92ZV9hdChpdC0+YmFzZS5jb250YWluZXIsIGl0LT5wb3MtLSwgTlVMTCk7CisKK30KKworc3RhdGljIGludAogX2JhX2l0ZXJhdG9yX3Jlc2V0KGJpbmFyeV9hcnJheV9pdGVyYXRvciAqaXQpCiB7CiAgICAgYmluYXJ5X2FycmF5X3RhYmxlKiB0ID0gX2JhX2l0MmNvbnQoaXQpOwpAQCAtNzI4LDYgKzg4Nyw3IEBACiAgICAgaXQtPmJhc2UubmV4dCA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX2JhX2l0ZXJhdG9yX25leHQ7CiAgICAgaXQtPmJhc2UuY3VyciA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX2JhX2l0ZXJhdG9yX2N1cnI7CiAgICAgaXQtPmJhc2UubGFzdCA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX2JhX2l0ZXJhdG9yX2xhc3Q7CisgICAgaXQtPmJhc2UucmVtb3ZlID0gKG5ldHNubXBfaXRlcmF0b3JfcmMqKV9iYV9pdGVyYXRvcl9yZW1vdmU7CiAgICAgaXQtPmJhc2UucmVzZXQgPSAobmV0c25tcF9pdGVyYXRvcl9yYyopX2JhX2l0ZXJhdG9yX3Jlc2V0OwogICAgIGl0LT5iYXNlLnJlbGVhc2UgPSAobmV0c25tcF9pdGVyYXRvcl9yYyopX2JhX2l0ZXJhdG9yX3JlbGVhc2U7CiAKZGlmZiAtLWdpdCBhL3NubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMgYi9zbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jCmluZGV4IGUyNmQ5OWUuLjQxYjE0ZmYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMKKysrIGIvc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVERMSUJfSApAQCAtMjgsNiArMjksOSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9pdGVyYXRvciwgY29udGFpbmVyX3R5cGVzKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0lURVJBVE9SCiAvKioKICAqICBIb2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkCiAgKiAgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYQpAQCAtNTA0LDMgKzUwOCw2IEBACiAgICAgaWktPnJlbW92ZV9kYXRhID0gcmVtb3ZlX2RhdGE7CiAgICAgaWktPmdldF9zaXplID0gZ2V0X3NpemU7CiB9CisjZWxzZSAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfSVRFUkFUT1IgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY29udGFpbmVyX2l0ZXJhdG9yKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9JVEVSQVRPUiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMgYi9zbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYwppbmRleCA4NzgyZmQwLi43ZmYwMWM0IDEwMDY0NAotLS0gYS9zbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYworKysgYi9zbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYwpAQCAtNCw2ICs0LDcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NURExJQl9ICkBAIC0yOCw2ICsyOSwxOSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfbGlua2VkX2xpc3QsIGNvbnRhaW5lcl90eXBlcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZmlmbywgY29udGFpbmVyX3R5cGVzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9saWZvLCBjb250YWluZXJfdHlwZXMpCisKKy8qIHRoaXMgaXMgYSBmYW5jeSB3YXkgb2YgY2xlYW5pbmcgdXAgaWZkZWZzICovCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0ZJRk8KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saW5rZWRfbGlzdCkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfRklGTyAqLworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9MSUZPCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlua2VkX2xpc3QpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0xJRk8gKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVAogdHlwZWRlZiBzdHJ1Y3Qgc2xfbm9kZSB7CiAgICB2b2lkICAgICAgICAgICAqZGF0YTsKICAgIHN0cnVjdCBzbF9ub2RlICpuZXh0OwpAQCAtNDQsNiArNTgsMTUgQEAKIAogfSBzbF9jb250YWluZXI7CiAKK3R5cGVkZWYgc3RydWN0IHNzbGxfaXRlcmF0b3JfcyB7CisgICAgbmV0c25tcF9pdGVyYXRvciBiYXNlOworIAorICAgIHNsX25vZGUgICAgICAgICAqcG9zOworICAgIHNsX25vZGUgICAgICAgICAqbGFzdDsKK30gc3NsbF9pdGVyYXRvcjsKKworc3RhdGljIG5ldHNubXBfaXRlcmF0b3IgKl9zc2xsX2l0ZXJhdG9yX2dldChuZXRzbm1wX2NvbnRhaW5lciAqYyk7CisKIAogc3RhdGljIHZvaWQgKgogX2dldChuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqa2V5LCBpbnQgZXhhY3QpCkBAIC04NSwxMiArMTA4LDEzIEBACiAgKgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIF9zc2xsX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmMpCiB7CiAgICAgaWYoYykgewogICAgICAgICBmcmVlKGMpOwogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMTI1LDYgKzE0OSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBuZXdfbm9kZS0+ZGF0YSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKHZvaWQgKiwgZGF0YSk7CiAgICAgKytzbC0+Y291bnQ7CisgICAgKytjLT5zeW5jOwogCiAgICAgLyoKICAgICAgKiBmaXJzdCBub2RlPwpAQCAtMjIzLDYgKzI0OCw3IEBACiAgICAgICovCiAgICAgZnJlZShjdXJyKTsKICAgICAtLXNsLT5jb3VudDsKKyAgICArK2MtPnN5bmM7CiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNzgsNiArMzA0LDcgQEAKICAgICB9CiAgICAgc2wtPmhlYWQgPSBOVUxMOwogICAgIHNsLT5jb3VudCA9IDA7CisgICAgKytjLT5zeW5jOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjk3LDE2ICszMjQsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc2wtPmMuY2ZyZWUgPSAobmV0c25tcF9jb250YWluZXJfcmMqKV9zc2xsX2ZyZWU7Ci0gICAgICAgIAotICAgIHNsLT5jLmdldF9zaXplID0gX3NzbGxfc2l6ZTsKLSAgICBzbC0+Yy5pbml0ID0gTlVMTDsKLSAgICBzbC0+Yy5pbnNlcnQgPSBfc3NsbF9pbnNlcnQ7Ci0gICAgc2wtPmMucmVtb3ZlID0gX3NzbGxfcmVtb3ZlOwotICAgIHNsLT5jLmZpbmQgPSBfc3NsbF9maW5kOworICAgIG5ldHNubXBfaW5pdF9jb250YWluZXIoKG5ldHNubXBfY29udGFpbmVyICopc2wsIE5VTEwsIF9zc2xsX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3NsbF9zaXplLCBOVUxMLCBfc3NsbF9pbnNlcnQsIF9zc2xsX3JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zc2xsX2ZpbmQpOwogICAgIHNsLT5jLmZpbmRfbmV4dCA9IF9zc2xsX2ZpbmRfbmV4dDsKICAgICBzbC0+Yy5nZXRfc3Vic2V0ID0gTlVMTDsKLSAgICBzbC0+Yy5nZXRfaXRlcmF0b3IgPSBOVUxMOworICAgIHNsLT5jLmdldF9pdGVyYXRvciA9X3NzbGxfaXRlcmF0b3JfZ2V0OwogICAgIHNsLT5jLmZvcl9lYWNoID0gX3NzbGxfZm9yX2VhY2g7CiAgICAgc2wtPmMuY2xlYXIgPSBfc3NsbF9jbGVhcjsKIApAQCAtMzkxLDMgKzQxNCwxNTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmlmb19mYWN0b3J5KCkpOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaXRlcmF0b3IKKyAqCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBzbF9jb250YWluZXIgKgorX3NzbGxfaXQyY29udChzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBpZihOVUxMID09IGl0KSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZihOVUxMID09IGl0LT5iYXNlLmNvbnRhaW5lcikgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGl0LT5iYXNlLmNvbnRhaW5lcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmKGl0LT5iYXNlLmNvbnRhaW5lci0+c3luYyAhPSBpdC0+YmFzZS5zeW5jKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJjb250YWluZXI6aXRlcmF0b3IiLCAib3V0IG9mIHN5bmNcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIChzbF9jb250YWluZXIgKilpdC0+YmFzZS5jb250YWluZXI7Cit9CisKK3N0YXRpYyB2b2lkICoKK19zc2xsX2l0ZXJhdG9yX2N1cnIoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgc2xfY29udGFpbmVyICp0ID0gX3NzbGxfaXQyY29udChpdCk7CisgICAgaWYgKChOVUxMID09IHQpIHx8IChOVUxMID09IGl0LT5wb3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBpdC0+cG9zLT5kYXRhOworfQorCitzdGF0aWMgdm9pZCAqCitfc3NsbF9pdGVyYXRvcl9maXJzdChzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBzbF9jb250YWluZXIgKnQgPSBfc3NsbF9pdDJjb250KGl0KTsKKyAgICBpZiAoKE5VTEwgPT0gdCkgfHwgKE5VTEwgPT0gdC0+aGVhZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHQtPmhlYWQtPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkICoKK19zc2xsX2l0ZXJhdG9yX25leHQoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgc2xfY29udGFpbmVyICp0ID0gX3NzbGxfaXQyY29udChpdCk7CisgICAgaWYgKChOVUxMID09IHQpIHx8IChOVUxMID09IGl0LT5wb3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0LT5wb3MgPSBpdC0+cG9zLT5uZXh0OworICAgIGlmIChOVUxMID09IGl0LT5wb3MpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGl0LT5wb3MtPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkICoKK19zc2xsX2l0ZXJhdG9yX2xhc3Qoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgc2xfbm9kZSAgICAgICpuOworICAgIHNsX2NvbnRhaW5lciAqdCA9IF9zc2xsX2l0MmNvbnQoaXQpOworICAgIGlmKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgaWYgKGl0LT5sYXN0KQorICAgICAgICByZXR1cm4gaXQtPmxhc3Q7CisKKyAgICBuID0gaXQtPnBvcyA/IGl0LT5wb3MgOiB0LT5oZWFkOworICAgIGlmIChOVUxMID09IG4pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgd2hpbGUobi0+bmV4dCkKKyAgICAgICAgbiA9IG4tPm5leHQ7CisKKyAgICBpZiAoTlVMTCA9PSBuKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0LT5sYXN0ID0gbjsKKworICAgIHJldHVybiBpdC0+bGFzdC0+ZGF0YTsKK30KKworc3RhdGljIGludAorX3NzbGxfaXRlcmF0b3JfcmVzZXQoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgc2xfY29udGFpbmVyICp0OworCisgICAgLyoqIGNhbid0IHVzZSBpdDJjb25mIGN1eiB3ZSBtaWdodCBiZSBvdXQgb2Ygc3luYyAqLworICAgIGlmKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpdCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmKE5VTEwgPT0gaXQtPmJhc2UuY29udGFpbmVyKSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXQtPmJhc2UuY29udGFpbmVyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHQgPSAoc2xfY29udGFpbmVyICopaXQtPmJhc2UuY29udGFpbmVyOworICAgIGlmKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaXQtPmxhc3QgPSBOVUxMOworICAgIGl0LT5wb3MgPSB0LT5oZWFkOworCisgICAgLyoKKyAgICAgKiBzYXZlIHN5bmMgY291bnQsIHRvIG1ha2Ugc3VyZSBjb250YWluZXIgZG9lc24ndCBjaGFuZ2Ugd2hpbGUKKyAgICAgKiBpdGVyYXRvciBpcyBpbiB1c2UuCisgICAgICovCisgICAgaXQtPmJhc2Uuc3luYyA9IGl0LT5iYXNlLmNvbnRhaW5lci0+c3luYzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citfc3NsbF9pdGVyYXRvcl9yZWxlYXNlKG5ldHNubXBfaXRlcmF0b3IgKml0KQoreworICAgIGZyZWUoaXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2l0ZXJhdG9yICoKK19zc2xsX2l0ZXJhdG9yX2dldChuZXRzbm1wX2NvbnRhaW5lciAqYykKK3sKKyAgICBzc2xsX2l0ZXJhdG9yKiBpdDsKKworICAgIGlmKE5VTEwgPT0gYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3NsbF9pdGVyYXRvcik7CisgICAgaWYoTlVMTCA9PSBpdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpdC0+YmFzZS5jb250YWluZXIgPSBjOworICAgIAorICAgIGl0LT5iYXNlLmZpcnN0ID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfc3NsbF9pdGVyYXRvcl9maXJzdDsKKyAgICBpdC0+YmFzZS5uZXh0ID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfc3NsbF9pdGVyYXRvcl9uZXh0OworICAgIGl0LT5iYXNlLmN1cnIgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9zc2xsX2l0ZXJhdG9yX2N1cnI7CisgICAgaXQtPmJhc2UubGFzdCA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX3NzbGxfaXRlcmF0b3JfbGFzdDsKKyAgICBpdC0+YmFzZS5yZXNldCA9IChuZXRzbm1wX2l0ZXJhdG9yX3JjKilfc3NsbF9pdGVyYXRvcl9yZXNldDsKKyAgICBpdC0+YmFzZS5yZWxlYXNlID0gKG5ldHNubXBfaXRlcmF0b3JfcmMqKV9zc2xsX2l0ZXJhdG9yX3JlbGVhc2U7CisKKyAgICAodm9pZClfc3NsbF9pdGVyYXRvcl9yZXNldChpdCk7CisKKyAgICByZXR1cm4gKG5ldHNubXBfaXRlcmF0b3IgKilpdDsKK30KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNvbnRhaW5lcl9saW5rZWRfbGlzdCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY29udGFpbmVyX251bGwuYyBiL3NubXBsaWIvY29udGFpbmVyX251bGwuYwppbmRleCAxMDA4MmFmLi4xZjQ4NzBlIDEwMDY0NAotLS0gYS9zbm1wbGliL2NvbnRhaW5lcl9udWxsLmMKKysrIGIvc25tcGxpYi9jb250YWluZXJfbnVsbC5jCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KQEAgLTMzLDYgKzM0LDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX251bGwsIGNvbnRhaW5lcl90eXBlcykKKwogLyoqIEBkZWZncm91cCBudWxsX2NvbnRhaW5lciBudWxsX2NvbnRhaW5lcgogICogIEhlbHBzIHlvdSBpbXBsZW1lbnQgc3BlY2lhbGl6ZWQgY29udGFpbmVycy4KICAqICBAaW5ncm91cCBjb250YWluZXIKQEAgLTUwLDYgKzUzLDcgQEAKICAqICBAewogICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTlVMTAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBjb250YWluZXIKQEAgLTE1Niw3ICsxNjAsNyBAQAogICAgIGMtPmZpbmQgPSBfbnVsbF9maW5kOwogICAgIGMtPmZpbmRfbmV4dCA9IF9udWxsX2ZpbmRfbmV4dDsKICAgICBjLT5nZXRfc3Vic2V0ID0gX251bGxfZ2V0X3N1YnNldDsKLSAgICBjLT5nZXRfaXRlcmF0b3IgPSAwOyAvKiBfbnVsbF9pdGVyYXRvcjsgKi8KKyAgICBjLT5nZXRfaXRlcmF0b3IgPSBOVUxMOyAvKiBfbnVsbF9pdGVyYXRvcjsgKi8KICAgICBjLT5mb3JfZWFjaCA9IF9udWxsX2Zvcl9lYWNoOwogICAgIGMtPmNsZWFyID0gX251bGxfY2xlYXI7CiAgICAgICAgCkBAIC0xODAsNSArMTg0LDggQEAKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3RlcigibnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZ2V0X251bGxfZmFjdG9yeSgpKTsKIH0KKyNlbHNlICAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OVUxMICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNvbnRhaW5lcl9udWxsKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OVUxMICovCiAvKiogIEB9ICovCiAKZGlmZiAtLWdpdCBhL3NubXBsaWIvZGF0YV9saXN0LmMgYi9zbm1wbGliL2RhdGFfbGlzdC5jCmluZGV4IDAxYTdkMmMuLjUwNWQ0ZmMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvZGF0YV9saXN0LmMKKysrIGIvc25tcGxpYi9kYXRhX2xpc3QuYwpAQCAtNCwxNCArNCwxMyBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCi0vKgotICogcHJvdG90eXBlcwotICovCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKTsKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkYXRhX2xpc3RfYWxsLCBsaWJuZXRzbm1wKQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGF0YV9saXN0X2FkZF9kYXRhLCBkYXRhX2xpc3RfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRhdGFfbGlzdF9nZXRfbGlzdF9ub2RlLCBkYXRhX2xpc3RfYWxsKQogCiAvKiogQGRlZmdyb3VwIGRhdGFfbGlzdCBnZW5lcmljIGxpbmtlZC1saXN0IGRhdGEgaGFuZGxpbmcgd2l0aCBhIHN0cmluZyBhcyBhIGtleS4KICAqIEBpbmdyb3VwIGxpYnJhcnkKQEAgLTY5LDggKzY4LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbm9kZS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKICAgICBpZiAoIW5vZGUtPm5hbWUpIHsKLSAgICAgIGZyZWUobm9kZSk7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZnJlZShub2RlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG5vZGUtPmRhdGEgPSBkYXRhOwogICAgIG5vZGUtPmZyZWVfZnVuYyA9IGJlZXI7CkBAIC03OCwxOCArNzcsNiBAQAogfQogCiAvKiogYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QKLSAqIEBub3RlIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlIGlzIHByZWZlcnJlZAotICogQHBhcmFtIGhlYWQgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKLSAqIEBwYXJhbSBub2RlIGEgbm9kZSB0byBzdGFzaCBpbiB0aGUgZGF0YV9saXN0Ci0gKi8KLS8qKiAgKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfYWRkX2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKQotewotICAgIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKGhlYWQsIG5vZGUpOwotfQotCi0vKiogYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QKICAqIEBwYXJhbSBoZWFkIGEgcG9pbnRlciB0byB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0CiAgKiBAcGFyYW0gbm9kZSBhIG5vZGUgdG8gc3Rhc2ggaW4gdGhlIGRhdGFfbGlzdAogICovCkBAIC0xMDIsMTIgKzg5LDEzIEBACiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBub2RlKTsKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IG5vZGUtPm5hbWUpOwogCisgICAgREVCVUdNU0dUTCgoImRhdGFfbGlzdCIsImFkZGluZyBrZXkgJyVzJ1xuIiwgbm9kZS0+bmFtZSkpOworCiAgICAgaWYgKCEqaGVhZCkgewogICAgICAgICAqaGVhZCA9IG5vZGU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgiZGF0YV9saXN0IiwiYWRkaW5nIGtleSAnJXMnXG4iLCBub2RlLT5uYW1lKSk7CiAgICAgaWYgKDAgPT0gc3RyY21wKG5vZGUtPm5hbWUsICgqaGVhZCktPm5hbWUpKSB7CiAgICAgICAgIG5ldHNubXBfYXNzZXJ0KCEibGlzdCBrZXkgPT0gaXMgdW5pcXVlIik7IC8qIGFsd2F5cyBmYWlsICovCiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLApAQCAtMTMxLDEyICsxMTksMjUgQEAKIH0KIAogLyoqIGFkZHMgZGF0YSB0byBhIGRhdGFsaXN0CisgKiBAbm90ZSBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSBpcyBwcmVmZXJyZWQKKyAqIEBwYXJhbSBoZWFkIGEgcG9pbnRlciB0byB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0CisgKiBAcGFyYW0gbm9kZSBhIG5vZGUgdG8gc3Rhc2ggaW4gdGhlIGRhdGFfbGlzdAorICovCisvKiogICovCitORVRTTk1QX0lOTElORSB2b2lkCituZXRzbm1wX2FkZF9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLCBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSkKK3sKKyAgICBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZShoZWFkLCBub2RlKTsKK30KKworLyoqIGFkZHMgZGF0YSB0byBhIGRhdGFsaXN0CiAgKiBAcGFyYW0gaGVhZCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdAogICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIG5vZGUgdG8gY2FjaGUgdGhlIGRhdGEuCiAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0byBiZSBzdG9yZWQgdW5kZXIgdGhhdCBuYW1lCiAgKiBAcGFyYW0gYmVlciBBIGZ1bmN0aW9uIHRoYXQgY2FuIGZyZWUgdGhlIGRhdGEgcG9pbnRlciAoaW4gdGhlIGZ1dHVyZSkKICAqIEByZXR1cm4gYSBuZXdseSBjcmVhdGVkIGRhdGFfbGlzdCBub2RlIHdoaWNoIHdhcyBpbnNlcnRlZCBpbiB0aGUgbGlzdAogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFUQV9MSVNUX0FERF9EQVRBCiBORVRTTk1QX0lOTElORSBuZXRzbm1wX2RhdGFfbGlzdCAqCiBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogYmVlcikKQEAgLTE1Niw2ICsxNTcsNyBAQAogCiAgICAgcmV0dXJuIG5vZGU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRBX0xJU1RfQUREX0RBVEEgKi8KIAogLyoqIHJldHVybnMgYSBkYXRhX2xpc3Qgbm9kZSdzIGRhdGEgZm9yIGEgZ2l2ZW4gbmFtZSB3aXRoaW4gYSBkYXRhX2xpc3QKICAqIEBwYXJhbSBoZWFkIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKQEAgLTE4MCw2ICsxODIsNyBAQAogICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gZmluZAogICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGFfbGlzdCBub2RlCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRBX0xJU1RfR0VUX0xJU1RfTk9ERQogTkVUU05NUF9JTkxJTkUgbmV0c25tcF9kYXRhX2xpc3QgICAgKgogbmV0c25tcF9nZXRfbGlzdF9ub2RlKG5ldHNubXBfZGF0YV9saXN0ICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMTkyLDYgKzE5NSw3IEBACiAgICAgICAgIHJldHVybiBoZWFkOwogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFUQV9MSVNUX0dFVF9MSVNUX05PREUgKi8KIAogLyoqIFJlbW92ZXMgYSBuYW1lZCBub2RlIGZyb20gYSBkYXRhX2xpc3QgKGFuZCBmcmVlcyBpdCkKICAqIEBwYXJhbSByZWFsaGVhZCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdApkaWZmIC0tZ2l0IGEvc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMgYi9zbm1wbGliL2RlZmF1bHRfc3RvcmUuYwppbmRleCA4ZTk0MDU3Li44ZGJjOWJjIDEwMDY0NAotLS0gYS9zbm1wbGliL2RlZmF1bHRfc3RvcmUuYworKysgYi9zbm1wbGliL2RlZmF1bHRfc3RvcmUuYwpAQCAtMTI2LDYgKzEyNiw3IEBACiAgKiAgQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTQxLDkgKzE0Miw2IEBACiAjZWxzZQogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xNjAsNiArMTU4LDE0IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWZhdWx0X3N0b3JlX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRlZmF1bHRfc3RvcmVfdm9pZCwgZGVmYXVsdF9zdG9yZV9hbGwpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRCAqLworCisKIHN0YXRpYyBjb25zdCBjaGFyICogc3RvcmVzIFtORVRTTk1QX0RTX01BWF9JRFNdID0geyAiTElCIiwgIkFQUCIsICJUT0siIH07CiAKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfZHNfcmVhZF9jb25maWdfcyB7CkBAIC0xNzYsNyArMTgyLDkgQEAKIHN0YXRpYyBpbnQgICBuZXRzbm1wX2RzX2ludGVnZXJzW05FVFNOTVBfRFNfTUFYX0lEU11bTkVUU05NUF9EU19NQVhfU1VCSURTXTsKIHN0YXRpYyBjaGFyICBuZXRzbm1wX2RzX2Jvb2xlYW5zW05FVFNOTVBfRFNfTUFYX0lEU11bTkVUU05NUF9EU19NQVhfU1VCSURTLzhdOwogc3RhdGljIGNoYXIgKm5ldHNubXBfZHNfc3RyaW5nc1tORVRTTk1QX0RTX01BWF9JRFNdW05FVFNOTVBfRFNfTUFYX1NVQklEU107CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lECiBzdGF0aWMgdm9pZCAqbmV0c25tcF9kc192b2lkc1tORVRTTk1QX0RTX01BWF9JRFNdW05FVFNOTVBfRFNfTUFYX1NVQklEU107CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQgKi8KIAogLyoKICAqIFByb3RvdHlwZSBkZWZpbml0aW9ucyAKQEAgLTMxNiw2ICszMjQsNyBAQAogICAgIHJldHVybiBuZXRzbm1wX2RzX3N0cmluZ3Nbc3RvcmVpZF1bd2hpY2hdOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lECiBpbnQKIG5ldHNubXBfZHNfc2V0X3ZvaWQoaW50IHN0b3JlaWQsIGludCB3aGljaCwgdm9pZCAqdmFsdWUpCiB7CkBAIC0zMjQsNyArMzMzLDcgQEAKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIAotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2RzX3NldF92b2lkIiwgIlNldHRpbmcgJXM6JWQgPSAleFxuIiwKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9kc19zZXRfdm9pZCIsICJTZXR0aW5nICVzOiVkID0gJXBcbiIsCiAgICAgICAgICAgICAgICAgc3RvcmVzW3N0b3JlaWRdLCB3aGljaCwgdmFsdWUpKTsKIAogICAgIG5ldHNubXBfZHNfdm9pZHNbc3RvcmVpZF1bd2hpY2hdID0gdmFsdWU7CkBAIC0zNDIsNiArMzUxLDcgQEAKIAogICAgIHJldHVybiBuZXRzbm1wX2RzX3ZvaWRzW3N0b3JlaWRdW3doaWNoXTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRCAqLwogCiBpbnQKIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbihjaGFyICpsaW5lKQpAQCAtNDQyLDEwICs0NTIsMTQgQEAKIAogICAgIGlmIChuZXRzbm1wX2RzX2NvbmZpZ3MgPT0gTlVMTCkgewogICAgICAgICBuZXRzbm1wX2RzX2NvbmZpZ3MgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZHNfcmVhZF9jb25maWcpOworICAgICAgICBpZiAobmV0c25tcF9kc19jb25maWdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIGRyc3AgPSBuZXRzbm1wX2RzX2NvbmZpZ3M7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChkcnNwID0gbmV0c25tcF9kc19jb25maWdzOyBkcnNwLT5uZXh0ICE9IE5VTEw7IGRyc3AgPSBkcnNwLT5uZXh0KTsKICAgICAgICAgZHJzcC0+bmV4dCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9kc19yZWFkX2NvbmZpZyk7CisgICAgICAgIGlmIChkcnNwLT5uZXh0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIGRyc3AgPSBkcnNwLT5uZXh0OwogICAgIH0KIApAQCAtNDg4LDEwICs1MDIsMTQgQEAKIAogICAgIGlmIChuZXRzbm1wX2RzX2NvbmZpZ3MgPT0gTlVMTCkgewogICAgICAgICBuZXRzbm1wX2RzX2NvbmZpZ3MgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZHNfcmVhZF9jb25maWcpOworICAgICAgICBpZiAobmV0c25tcF9kc19jb25maWdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIGRyc3AgPSBuZXRzbm1wX2RzX2NvbmZpZ3M7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChkcnNwID0gbmV0c25tcF9kc19jb25maWdzOyBkcnNwLT5uZXh0ICE9IE5VTEw7IGRyc3AgPSBkcnNwLT5uZXh0KTsKICAgICAgICAgZHJzcC0+bmV4dCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9kc19yZWFkX2NvbmZpZyk7CisgICAgICAgIGlmIChkcnNwLT5uZXh0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIGRyc3AgPSBkcnNwLT5uZXh0OwogICAgIH0KIApAQCAtNTIyLDcgKzU0MCw3IEBACiB9CiAKIHZvaWQKLW5ldHNubXBfZHNfc2h1dGRvd24oKQorbmV0c25tcF9kc19zaHV0ZG93bih2b2lkKQogewogICAgIG5ldHNubXBfZHNfcmVhZF9jb25maWcgKmRyc3A7CiAgICAgaW50ICAgICAgICAgICAgIGksIGo7CmRpZmYgLS1naXQgYS9zbm1wbGliL2Rpcl91dGlscy5jIGIvc25tcGxpYi9kaXJfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzVlNzAwCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9kaXJfdXRpbHMuYwpAQCAtMCwwICsxLDI1OSBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmIEhBVkVfU1RETElCX0gKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyMgICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyMgICBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX0RNQUxMT0NfSAorIyAgaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9kaXJlY3RvcnksIGNvbnRhaW5lcl90eXBlcykKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfRElSRUNUT1JZCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmaWxlX3V0aWxzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZyZWVfYWxsKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9ESVJFQ1RPUlkgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9ESVJFQ1RPUlkKK3N0YXRpYyBpbnQKK19pbnNlcnRfbnNmaWxlKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0YXRzLAorICAgICAgICAgICAgICAgIHVfaW50IGZsYWdzKTsKKworLyoKKyAqIHJlYWQgZmlsZSBuYW1lcyBpbiBhIGRpcmVjdG9yeSwgd2l0aCBhbiBvcHRpb25hbCBmaWx0ZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWRfc29tZShuZXRzbm1wX2NvbnRhaW5lciAqdXNlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2ZpbHRlciAqZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWx0ZXJfY3R4LCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAqZGlyOworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSB1c2VyX2NvbnRhaW5lcjsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAqZmlsZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgcGF0aFtTTk1QX01BWFBBVEhdOworICAgIHNpemVfdCAgICAgICAgICAgICBkaXJuYW1lX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgcmM7CisgICAgc3RydWN0IHN0YXQgICAgICAgIHN0YXRidWY7CisgICAgbmV0c25tcF9maWxlICAgICAgIG5zX2ZpbGVfdG1wOworCisgICAgaWYgKChmbGFncyAmIE5FVFNOTVBfRElSX1JFTEFUSVZFX1BBVEgpICYmIChmbGFncyAmIE5FVFNOTVBfRElSX1JFQ1VSU0UpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIHN1cHBvcnQgZm9yIHJlbGF0aXZlIHBhdGggd2l0aCByZWN1cnNpb25cbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLCAicmVhZGluZyAlc1xuIiwgZGlybmFtZSkpOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lciwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIGlmIChmbGFncyAmIE5FVFNOTVBfRElSX05TRklMRSkgeworICAgICAgICAgICAgY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgibnNmaWxlX2RpcmVjdG9yeV9jb250YWluZXI6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluYXJ5X2FycmF5Iik7CisgICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZpbGVfY29tcGFyZV9uYW1lOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+ZnJlZV9pdGVtID0gKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZmlsZV9jb250YWluZXJfZnJlZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJkaXJlY3RvcnlfY29udGFpbmVyOmNzdHJpbmciKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoZGlybmFtZSk7CisgICAgICAgIC8qKiBkZWZhdWx0IHRvIHVuc29ydGVkICovCisgICAgICAgIGlmICghIChmbGFncyAmIE5FVFNOTVBfRElSX1NPUlRFRCkpCisgICAgICAgICAgICBDT05UQUlORVJfU0VUX09QVElPTlMoY29udGFpbmVyLCBDT05UQUlORVJfS0VZX1VOU09SVEVELCByYyk7CisgICAgfQorCisgICAgZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKyAgICBpZiAoTlVMTCA9PSBkaXIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLCAiICBub3QgYSBkaXJcbiIpKTsKKyAgICAgICAgaWYgKGNvbnRhaW5lciAhPSB1c2VyX2NvbnRhaW5lcikKKyAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qKiBjb3B5IGRpcm5hbWUgaW50byBwYXRoICovCisgICAgaWYgKGZsYWdzICYgTkVUU05NUF9ESVJfUkVMQVRJVkVfUEFUSCkKKyAgICAgICAgZGlybmFtZV9sZW4gPSAwOworICAgIGVsc2UgeworICAgICAgICBkaXJuYW1lX2xlbiA9IHN0cmxlbihkaXJuYW1lKTsKKyAgICAgICAgc3RybGNweShwYXRoLCBkaXJuYW1lLCBzaXplb2YocGF0aCkpOworICAgICAgICBpZiAoKGRpcm5hbWVfbGVuICsgMikgPiBzaXplb2YocGF0aCkpIHsKKyAgICAgICAgICAgIC8qKiBub3QgZW5vdWdoIHJvb20gZm9yIGZpbGVzICovCisgICAgICAgICAgICBjbG9zZWRpcihkaXIpOworICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSB1c2VyX2NvbnRhaW5lcikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcGF0aFtkaXJuYW1lX2xlbl0gPSAnLyc7CisgICAgICAgIHBhdGhbKytkaXJuYW1lX2xlbl0gPSAnXDAnOworICAgIH0KKworICAgIC8qKiBpdGVyYXRlIG92ZXIgZGlyICovCisgICAgd2hpbGUgKChmaWxlID0gcmVhZGRpcihkaXIpKSkgeworCisgICAgICAgIGlmICgoZmlsZS0+ZF9uYW1lID09IE5VTEwpIHx8IChmaWxlLT5kX25hbWVbMF0gPT0gMCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiogc2tpcCAnLicgYW5kICcuLicgKi8KKyAgICAgICAgaWYgKChmaWxlLT5kX25hbWVbMF0gPT0gJy4nKSAmJgorICAgICAgICAgICAgKChmaWxlLT5kX25hbWVbMV0gPT0gMCkgfHwKKyAgICAgICAgICAgICAoKGZpbGUtPmRfbmFtZVsxXSA9PSAnLicpICYmICgoZmlsZS0+ZF9uYW1lWzJdID09IDApKSkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3RybGNweSgmcGF0aFtkaXJuYW1lX2xlbl0sIGZpbGUtPmRfbmFtZSwgc2l6ZW9mKHBhdGgpIC0gZGlybmFtZV9sZW4pOworICAgICAgICBpZiAoTlVMTCAhPSBmaWx0ZXIpIHsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIE5FVFNOTVBfRElSX05TRklMRV9TVEFUUykgeworICAgICAgICAgICAgICAgIC8qKiB1c2UgbG9jYWwgdmFycyBmb3Igbm93ICovCisgICAgICAgICAgICAgICAgaWYgKHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBzdGF0ICVzXG4iLCBmaWxlLT5kX25hbWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbnNfZmlsZV90bXAuc3RhdHMgPSAmc3RhdGJ1ZjsKKyAgICAgICAgICAgICAgICBuc19maWxlX3RtcC5uYW1lID0gcGF0aDsKKyAgICAgICAgICAgICAgICByYyA9ICgqZmlsdGVyKSgmbnNfZmlsZV90bXAsIGZpbHRlcl9jdHgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gKCpmaWx0ZXIpKHBhdGgsIGZpbHRlcl9jdHgpOworICAgICAgICAgICAgaWYgKDAgPT0gcmMpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lcjpmaWx0ZXJlZCIsICIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5kX25hbWUpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyOmZvdW5kIiwgIiVzXG4iLCBwYXRoKSk7CisgICAgICAgIGlmICgoZmxhZ3MgJiBORVRTTk1QX0RJUl9SRUNVUlNFKSAKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX0RJUkVOVF9EX1RZUEUpICYmIGRlZmluZWQoRFRfRElSKQorICAgICAgICAgICAgJiYgKGZpbGUtPmRfdHlwZSA9PSBEVF9ESVIpCisjZWxpZiBkZWZpbmVkKFNfSVNESVIpCisgICAgICAgICAgICAmJiAoc3RhdChmaWxlLT5kX25hbWUsICZzdGF0YnVmKSAhPSAwKSAmJiAoU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQorI2VuZGlmCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIC8qKiB4eHggYWRkIHRoZSBkaXIgYXMgd2VsbD8gbm90IGZvciBub3cuLiBtYXliZSBhbm90aGVyIGZsYWc/ICovCisgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZChjb250YWluZXIsIHBhdGgsIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIE5FVFNOTVBfRElSX05TRklMRSkgeworICAgICAgICAgICAgaWYgKF9pbnNlcnRfbnNmaWxlKCBjb250YWluZXIsIGZpbGUtPmRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID8gJnN0YXRidWYgOiBOVUxMLCBmbGFncyApIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgKmR1cCA9IHN0cmR1cChwYXRoKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGR1cCkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmR1cCBmYWlsZWQgd2hpbGUgYnVpbGRpbmcgZGlyZWN0b3J5IGNvbnRhaW5lclxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBkdXApOworICAgICAgICAgICAgaWYgKC0xID09IHJjICkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwgIiAgZXJyIGFkZGluZyAlc1xuIiwgcGF0aCkpOworICAgICAgICAgICAgICAgIGZyZWUoZHVwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gLyogd2hpbGUgKi8KKworICAgIGNsb3NlZGlyKGRpcik7CisKKyAgICByYyA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcik7CisgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLCAiICBjb250YWluZXIgbm93IGhhcyAlZCBpdGVtc1xuIiwgcmMpKTsKKyAgICBpZiAoKDAgPT0gcmMpICYmICEoZmxhZ3MgJiBORVRTTk1QX0RJUl9FTVBUWV9PSykpIHsKKyAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3ZvaWQKK25ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKGNvbnRhaW5lciwgTlVMTCk7CisgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKK30KKworc3RhdGljIGludAorX2luc2VydF9uc2ZpbGUoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3RhdHMsCisgICAgICAgICAgICAgICAgdV9pbnQgZmxhZ3MpCit7CisgICAgaW50ICAgICAgICAgICByYzsKKyAgICBuZXRzbm1wX2ZpbGUgKm5zX2ZpbGUgPSBuZXRzbm1wX2ZpbGVfbmV3KG5hbWUsIDAsIDAsIDApOworICAgIGlmIChOVUxMID09IG5zX2ZpbGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIG5zX2ZpbGVcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgTkVUU05NUF9ESVJfTlNGSUxFX1NUQVRTKSB7CisgICAgICAgIG5zX2ZpbGUtPnN0YXRzID0gKHN0cnVjdCBzdGF0KiljYWxsb2MoMSxzaXplb2YoKihuc19maWxlLT5zdGF0cykpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gbnNfZmlsZS0+c3RhdHMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBzdGF0cyBmb3IgbnNfZmlsZVxuIik7CisgICAgICAgICAgICBuZXRzbm1wX2ZpbGVfcmVsZWFzZShuc19maWxlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiogdXNlIHN0YXRzIGZyb20gZWFybGllciBpZiB3ZSBoYXZlIHRoZW0gKi8KKyAgICAgICAgaWYgKHN0YXRzKSB7CisgICAgICAgICAgICBtZW1jcHkobnNfZmlsZS0+c3RhdHMsIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdChuc19maWxlLT5uYW1lLCBuc19maWxlLT5zdGF0cykgPCAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic3RhdCgpIGZhaWxlZCBmb3IgbnNfZmlsZVxuIik7CisgICAgICAgICAgICBuZXRzbm1wX2ZpbGVfcmVsZWFzZShuc19maWxlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjLCBuc19maWxlKTsKKyAgICBpZiAoLTEgPT0gcmMgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwgIiAgZXJyIGFkZGluZyAlc1xuIiwgbmFtZSkpOworICAgICAgICBuZXRzbm1wX2ZpbGVfcmVsZWFzZShuc19maWxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbHNlICAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9ESVJFQ1RPUlkgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY29udGFpbmVyX2RpcmVjdG9yeSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRElSRUNUT1JZICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYyBiL3NubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jCmluZGV4IGM4MWNmZGUuLmY5Y2YwOGUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jCisrKyBiL3NubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jCkBAIC00LDkgKzQsMTUgQEAKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZkX2V2ZW50X21hbmFnZXIsIGxpYm5ldHNubXApCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSCiBpbnQgICAgIGV4dGVybmFsX3JlYWRmZFtOVU1fRVhURVJOQUxfRkRTXSwgICBleHRlcm5hbF9yZWFkZmRsZW4gICA9IDA7CiBpbnQgICAgIGV4dGVybmFsX3dyaXRlZmRbTlVNX0VYVEVSTkFMX0ZEU10sICBleHRlcm5hbF93cml0ZWZkbGVuICA9IDA7CiBpbnQgICAgIGV4dGVybmFsX2V4Y2VwdGZkW05VTV9FWFRFUk5BTF9GRFNdLCBleHRlcm5hbF9leGNlcHRmZGxlbiA9IDA7CkBAIC0xNTksMjIgKzE2NSw1NSBAQAogICovCiB2b2lkIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbyhpbnQgKm51bWZkcywgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLCBmZF9zZXQgKmV4Y2VwdGZkcykKIHsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbHJlYWRmZHM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGx3cml0ZWZkczsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbGV4Y2VwdGZkczsKKworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZscmVhZGZkcywgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmx3cml0ZWZkcywgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxleGNlcHRmZHMsIEZEX1NFVFNJWkUpOworCisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZscmVhZGZkcywgcmVhZGZkcyk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsd3JpdGVmZHMsIHdyaXRlZmRzKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxleGNlcHRmZHMsIGV4Y2VwdGZkcyk7CisKKyAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvMihudW1mZHMsICZscmVhZGZkcywgJmx3cml0ZWZkcywgJmxleGNlcHRmZHMpOworCisgIGlmIChuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChyZWFkZmRzLCAmbHJlYWRmZHMpIDwgMAorICAgICAgfHwgbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQod3JpdGVmZHMsICZsd3JpdGVmZHMpIDwgMAorICAgICAgfHwgbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQoZXhjZXB0ZmRzLCAmbGV4Y2VwdGZkcykgPCAwKQorICB7CisgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgICJVc2UgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvMigpIGZvciBwcm9jZXNzaW5nIgorCSAgICAgIiBsYXJnZSBmaWxlIGRlc2NyaXB0b3JzXG4iKTsKKyAgfQorCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxyZWFkZmRzKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbHdyaXRlZmRzKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbGV4Y2VwdGZkcyk7Cit9CisKK3ZvaWQgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvMihpbnQgKm51bWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcykKK3sKICAgaW50IGk7CiAKICAgZXh0ZXJuYWxfZmRfdW5yZWdpc3RlcmVkID0gMDsKIAogICBmb3IgKGkgPSAwOyBpIDwgZXh0ZXJuYWxfcmVhZGZkbGVuOyBpKyspIHsKLSAgICBGRF9TRVQoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKTsKKyAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpOwogICAgIGlmIChleHRlcm5hbF9yZWFkZmRbaV0gPj0gKm51bWZkcykKICAgICAgICpudW1mZHMgPSBleHRlcm5hbF9yZWFkZmRbaV0gKyAxOwogICB9CiAgIGZvciAoaSA9IDA7IGkgPCBleHRlcm5hbF93cml0ZWZkbGVuOyBpKyspIHsKLSAgICBGRF9TRVQoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpOworICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKTsKICAgICBpZiAoZXh0ZXJuYWxfd3JpdGVmZFtpXSA+PSAqbnVtZmRzKQogICAgICAgKm51bWZkcyA9IGV4dGVybmFsX3dyaXRlZmRbaV0gKyAxOwogICB9CiAgIGZvciAoaSA9IDA7IGkgPCBleHRlcm5hbF9leGNlcHRmZGxlbjsgaSsrKSB7Ci0gICAgRkRfU0VUKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpOworICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpOwogICAgIGlmIChleHRlcm5hbF9leGNlcHRmZFtpXSA+PSAqbnVtZmRzKQogICAgICAgKm51bWZkcyA9IGV4dGVybmFsX2V4Y2VwdGZkW2ldICsgMTsKICAgfQpAQCAtMTg1LDM4ICsyMjQsNzQgQEAKICAqLwogdm9pZCBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cyhpbnQgKmNvdW50LCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsIGZkX3NldCAqZXhjZXB0ZmRzKQogeworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBscmVhZGZkczsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbHdyaXRlZmRzOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsZXhjZXB0ZmRzOworCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxyZWFkZmRzLCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbHdyaXRlZmRzLCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbGV4Y2VwdGZkcywgRkRfU0VUU0laRSk7CisKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxyZWFkZmRzLCByZWFkZmRzKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmx3cml0ZWZkcywgd3JpdGVmZHMpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbGV4Y2VwdGZkcywgZXhjZXB0ZmRzKTsKKworICBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50czIoY291bnQsICZscmVhZGZkcywgJmx3cml0ZWZkcywgJmxleGNlcHRmZHMpOworCisgIGlmIChuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChyZWFkZmRzLCAmbHJlYWRmZHMpIDwgMAorICAgICAgfHwgbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQod3JpdGVmZHMsICAmbHdyaXRlZmRzKSA8IDAKKyAgICAgIHx8IG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KGV4Y2VwdGZkcywgJmxleGNlcHRmZHMpIDwgMCkKKyAgeworICAgIHNubXBfbG9nKExPR19FUlIsCisJICAgICAiVXNlIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzMigpIGZvciBwcm9jZXNzaW5nIgorCSAgICAgIiBsYXJnZSBmaWxlIGRlc2NyaXB0b3JzXG4iKTsKKyAgfQorCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxyZWFkZmRzKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbHdyaXRlZmRzKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbGV4Y2VwdGZkcyk7Cit9CisKK3ZvaWQgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMyKGludCAqY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMpCit7CiAgIGludCBpOwogICBmb3IgKGkgPSAwOwogICAgICAgICpjb3VudCAmJiAoaSA8IGV4dGVybmFsX3JlYWRmZGxlbikgJiYgIWV4dGVybmFsX2ZkX3VucmVnaXN0ZXJlZDsgaSsrKSB7Ci0gICAgICBpZiAoRkRfSVNTRVQoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKSkgeworICAgICAgaWYgKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKSkgewogICAgICAgICAgIERFQlVHTVNHVEwoKCJmZF9ldmVudF9tYW5hZ2VyOm5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAicmVhZGZkWyVkXSA9ICVkXG4iLCBpLCBleHRlcm5hbF9yZWFkZmRbaV0pKTsKICAgICAgICAgICBleHRlcm5hbF9yZWFkZmRmdW5jW2ldIChleHRlcm5hbF9yZWFkZmRbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfcmVhZGZkX2RhdGFbaV0pOwotICAgICAgICAgIEZEX0NMUihleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpOworICAgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfQ0xSKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcyk7CiAgICAgICAgICAgKCpjb3VudCktLTsKICAgICAgIH0KICAgfQogICBmb3IgKGkgPSAwOwogICAgICAgICpjb3VudCAmJiAoaSA8IGV4dGVybmFsX3dyaXRlZmRsZW4pICYmICFleHRlcm5hbF9mZF91bnJlZ2lzdGVyZWQ7IGkrKykgewotICAgICAgaWYgKEZEX0lTU0VUKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKSkgeworICAgICAgaWYgKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpKSB7CiAgICAgICAgICAgREVCVUdNU0dUTCgoImZkX2V2ZW50X21hbmFnZXI6bmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMiLCAKICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZWZkWyVkXSA9ICVkXG4iLCBpLCBleHRlcm5hbF93cml0ZWZkW2ldKSk7CiAgICAgICAgICAgZXh0ZXJuYWxfd3JpdGVmZGZ1bmNbaV0gKGV4dGVybmFsX3dyaXRlZmRbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3dyaXRlZmRfZGF0YVtpXSk7Ci0gICAgICAgICAgRkRfQ0xSKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKTsKKyAgICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX0NMUihleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcyk7CiAgICAgICAgICAgKCpjb3VudCktLTsKICAgICAgIH0KICAgfQogICBmb3IgKGkgPSAwOwogICAgICAgICpjb3VudCAmJiAoaSA8IGV4dGVybmFsX2V4Y2VwdGZkbGVuKSAmJiAhZXh0ZXJuYWxfZmRfdW5yZWdpc3RlcmVkOyBpKyspIHsKLSAgICAgIGlmIChGRF9JU1NFVChleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKSkgeworICAgICAgaWYgKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcykpIHsKICAgICAgICAgICBERUJVR01TR1RMKCgiZmRfZXZlbnRfbWFuYWdlcjpuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGZkWyVkXSA9ICVkXG4iLCBpLCBleHRlcm5hbF9leGNlcHRmZFtpXSkpOwogICAgICAgICAgIGV4dGVybmFsX2V4Y2VwdGZkZnVuY1tpXSAoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9leGNlcHRmZF9kYXRhW2ldKTsKLSAgICAgICAgICBGRF9DTFIoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcyk7CisgICAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9DTFIoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcyk7CiAgICAgICAgICAgKCpjb3VudCktLTsKICAgICAgIH0KICAgfQogfQorI2Vsc2UgIC8qICAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGZkX2V2ZW50X21hbmFnZXIpOworI2VuZGlmIC8qICAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2ZpbGVfdXRpbHMuYyBiL3NubXBsaWIvZmlsZV91dGlscy5jCmluZGV4IDhmN2ZiNmEuLjUyNjE0MzEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvZmlsZV91dGlscy5jCisrKyBiL3NubXBsaWIvZmlsZV91dGlscy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0zNyw3ICszOCwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaWxlX3V0aWxzX2FsbCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaWxlX3V0aWxzLCBmaWxlX3V0aWxzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaWxlX2Nsb3NlLCBmaWxlX3V0aWxzX2FsbCkKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTEVfVVRJTFMKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogUHJvdG90eXBlcwpAQCAtNzcsNiArODIsMzEgQEAKIH0KIAogLyoqCisgKiBvcGVuIGZpbGUgYW5kIGdldCBzdGF0cworICovCituZXRzbm1wX2ZpbGUgKgorbmV0c25tcF9maWxlX25ldyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZnNfZmxhZ3MsIG1vZGVfdCBtb2RlLCB1X2ludCBuc19mbGFncykKK3sKKyAgICBuZXRzbm1wX2ZpbGUgKmZpbGVpID0gbmV0c25tcF9maWxlX2ZpbGwoTlVMTCwgbmFtZSwgZnNfZmxhZ3MsIG1vZGUsIDApOworICAgIGlmIChOVUxMID09IGZpbGVpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChuc19mbGFncyAmIE5FVFNOTVBfRklMRV9TVEFUUykgeworICAgICAgICBmaWxlaS0+c3RhdHMgPSAoc3RydWN0IHN0YXQqKWNhbGxvYygxLCBzaXplb2YoKihmaWxlaS0+c3RhdHMpKSk7CisgICAgICAgIGlmIChOVUxMID09IGZpbGVpLT5zdGF0cykKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIm5zZmlsZTpuZXciLCAibm8gbWVtb3J5IGZvciBzdGF0c1xuIikpOworICAgICAgICBlbHNlIGlmIChzdGF0KG5hbWUsIGZpbGVpLT5zdGF0cykgIT0gMCkKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIm5zZmlsZTpuZXciLCAiZXJyb3IgZ2V0dGluZyBzdGF0c1xuIikpOworICAgIH0KKworICAgIGlmIChuc19mbGFncyAmIE5FVFNOTVBfRklMRV9BVVRPX09QRU4pCisgICAgICAgIG5ldHNubXBfZmlsZV9vcGVuKGZpbGVpKTsKKworICAgIHJldHVybiBmaWxlaTsKK30KKworICAgICAgICAKKy8qKgogICogZmlsbCBjb3JlIG1lbWJlcnMgaW4gYSBuZXRzbm1wX2ZpbGUgc3RydWN0dXJlCiAgKgogICogQHBhcmFtIGZpbGVpICAgICAgc3RydWN0dXJlIHRvIGZpbGw7IGlmIE5VTEwsIGEgbmV3IG9uZSB3aWxsIGJlIGFsbG9jYXRlZApAQCAtMTAwLDYgKzEzMCw3IEBACiAKICAgICBmaWxlaS0+ZnNfZmxhZ3MgPSBmc19mbGFnczsKICAgICBmaWxlaS0+bnNfZmxhZ3MgPSBuc19mbGFnczsKKyAgICBmaWxlaS0+bW9kZSA9IG1vZGU7CiAKICAgICByZXR1cm4gZmlsZWk7CiB9CkBAIC0xMjYsNiArMTU3LDkgQEAKICAgICBpZiAoTlVMTCAhPSBmaWxlaS0+ZXh0cmFzKQogICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShmaWxlaS0+ZXh0cmFzKTsKIAorICAgIGlmIChOVUxMICE9IGZpbGVpLT5zdGF0cykKKyAgICAgICAgZnJlZShmaWxlaS0+c3RhdHMpOworCiAgICAgU05NUF9GUkVFKGZpbGVpKTsKIAogICAgIHJldHVybiByYzsKQEAgLTE2MSw3ICsxOTUsNyBAQAogICAgICAgICBmaWxlaS0+ZmQgPSBvcGVuKGZpbGVpLT5uYW1lLCBmaWxlaS0+ZnNfZmxhZ3MsIGZpbGVpLT5tb2RlKTsKIAogICAgIGlmIChmaWxlaS0+ZmQgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBvcGVuaW5nICVzICglZClcbiIsIGZpbGVpLT5uYW1lLCBlcnJubyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2ZpbGUiLCAiZXJyb3Igb3BlbmluZyAlcyAoJWQpXG4iLCBmaWxlaS0+bmFtZSwgZXJybm8pKTsKICAgICB9CiAKICAgICAvKgpAQCAtMTc3LDYgKzIxMSw3IEBACiAgKiBAcmV0dmFsICAwIDogc3VjY2VzcwogICogQHJldHZhbCAtMSA6IGVycm9yCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSUxFX0NMT1NFCiBpbnQKIG5ldHNubXBfZmlsZV9jbG9zZShuZXRzbm1wX2ZpbGUgKiBmaWxlaSkKIHsKQEAgLTIwMCwxMSArMjM1LDI5IEBACiAgICAgICovCiAgICAgcmMgPSBjbG9zZShmaWxlaS0+ZmQpOwogICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNsb3NpbmcgJXMgKCVkKVxuIiwgZmlsZWktPm5hbWUsIGVycm5vKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfZmlsZSIsICJlcnJvciBjbG9zaW5nICVzICglZClcbiIsIGZpbGVpLT5uYW1lLCBlcnJubykpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGZpbGVpLT5mZCA9IC0xOwogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklMRV9DTE9TRSAqLwogCit2b2lkCituZXRzbm1wX2ZpbGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9maWxlICpmaWxlLCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfZmlsZV9yZWxlYXNlKGZpbGUpOworfQorCitpbnQKK25ldHNubXBfZmlsZV9jb21wYXJlX25hbWUobmV0c25tcF9maWxlICpsaHMsIG5ldHNubXBfZmlsZSAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGxocykgJiYgKE5VTEwgIT0gcmhzKSk7CisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gbGhzLT5uYW1lKSAmJiAoTlVMTCAhPSByaHMtPm5hbWUpKTsKKworICAgIHJldHVybiBzdHJjbXAobGhzLT5uYW1lLCByaHMtPm5hbWUpOworfQorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSUxFX1VUSUxTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGZpbGVfdXRpbHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklMRV9VVElMUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9nZXRvcHQuYyBiL3NubXBsaWIvZ2V0b3B0LmMKaW5kZXggZDJiMjAzZS4uMWU4ZTljMyAxMDA2NDQKLS0tIGEvc25tcGxpYi9nZXRvcHQuYworKysgYi9zbm1wbGliL2dldG9wdC5jCkBAIC0zNSwxMCArMzUsMTQgQEAKICAgICAiJElkJCI7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0Lmg+CisKICNpZmRlZiBfQlNECiBleHRlcm4gY2hhciAgICAqX19wcm9nbmFtZTsKICNlbHNlCmRpZmYgLS1naXQgYS9zbm1wbGliL2dldHRpbWVvZmRheS5jIGIvc25tcGxpYi9nZXR0aW1lb2ZkYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVjMGEwCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9nZXR0aW1lb2ZkYXkuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogZ2V0dGltZW9mZGF5KCkgcmVwbGFjZW1lbnQgZm9yIE1TVkMuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKKyNpZmRlZiBIQVZFX1NZU19USU1FQl9ICisjIGluY2x1ZGUgPHN5cy90aW1lYi5oPiAvKiBfZnRpbWUoKSAqLworI2VuZGlmCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCitpbnQKK2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopCit7CisgICAgc3RydWN0IF90aW1lYiAgIHRpbWVidWZmZXI7CisKKyAgICBfZnRpbWUoJnRpbWVidWZmZXIpOworICAgIHR2LT50dl91c2VjID0gdGltZWJ1ZmZlci5taWxsaXRtICogMTAwMDsKKyAgICB0di0+dHZfc2VjID0gKGxvbmcpdGltZWJ1ZmZlci50aW1lOworICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL2luZXRfbnRvcC5jIGIvc25tcGxpYi9pbmV0X250b3AuYwppbmRleCBjMjZhZmM0Li4wNWJhZmJlIDEwMDY0NAotLS0gYS9zbm1wbGliL2luZXRfbnRvcC5jCisrKyBiL3NubXBsaWIvaW5ldF9udG9wLmMKQEAgLTE5LDE2ICsxOSwxMCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZm5kZWYgSEFWRV9JTkVUX05UT1AKLQogI2lmIEhBVkVfQVJQQV9OQU1FU0VSX0gKICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVFJJTkdfSApAQCAtMzksNiArMzMsOCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2luY2x1ZGUgImluZXRfbnRvcC5oIgorCiAjaWZuZGVmIEVBRk5PU1VQUE9SVAogI2RlZmluZSBFQUZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFQUZOT1NVUFBPUlQKICNlbmRpZgpAQCAtNzYsNyArNzIsNyBAQAogICoJUGF1bCBWaXhpZSwgMTk5Ni4KICAqLwogY29uc3QgY2hhciAqCi1pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCituZXRzbm1wX2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKIHsKIAogCXN3aXRjaCAoYWYpIHsKQEAgLTIxMiw1ICsyMDgsMyBAQAogCXJldHVybiAoZHN0KTsKIH0KICNlbmRpZgotCi0jZW5kaWYgLyogSEFWRV9JTkVUX05UT1AgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvaW5ldF9udG9wLmggYi9zbm1wbGliL2luZXRfbnRvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWQ4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2luZXRfbnRvcC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0lORVRfTlRPUF9ICisjZGVmaW5lIF9JTkVUX05UT1BfSAorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworI2lmbmRlZiBIQVZFX0lORVRfTlRPUAorY29uc3QgY2hhciAgICAgKm5ldHNubXBfaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgaW5ldF9udG9wIG5ldHNubXBfaW5ldF9udG9wCisjZW5kaWYgLypIQVZFX0lORVRfTlRPUCAqLworCisjZW5kaWYgLypfSU5FVF9OVE9QX0gqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9pbmV0X3B0b24uYyBiL3NubXBsaWIvaW5ldF9wdG9uLmMKaW5kZXggMGEwM2E4Zi4uNDdmZTNlYyAxMDA2NDQKLS0tIGEvc25tcGxpYi9pbmV0X3B0b24uYworKysgYi9zbm1wbGliL2luZXRfcHRvbi5jCkBAIC0xOSwxOCArMTksMTIgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWZuZGVmIEhBVkVfSU5FVF9QVE9OCi0KICNpbmNsdWRlIDxjdHlwZS5oPgogCiAjaWYgSEFWRV9BUlBBX05BTUVTRVJfSAogI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NUUklOR19ICkBAIC00MCw2ICszNCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCiAKICNpZm5kZWYgRUFGTk9TVVBQT1JUCiAjZGVmaW5lIEVBRk5PU1VQUE9SVCAgICAgICAgICAgIFdTQUVBRk5PU1VQUE9SVApAQCAtNTIsOSArNDcsNiBAQAogI2lmbmRlZiBJTlQxNlNaCiAjZGVmaW5lCUlOVDE2U1oJCTIKICNlbmRpZgotICAvKgotICAgKiBFbmQgb2YgTmV0LVNOTVAgV2luMzIgYWRkaXRpb25zCi0gICAqLwogCiAjaWZuZGVmIElOQUREUlNaCiAjZGVmaW5lCUlOQUREUlNaCTQKQEAgLTgyLDcgKzc0LDcgQEAKICAqCVBhdWwgVml4aWUsIDE5OTYuCiAgKi8KIGludAotaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCituZXRzbm1wX2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KQogewogCiAJc3dpdGNoIChhZikgewpAQCAtMzE3LDUgKzMwOSwzIEBACiAJcmV0dXJuICgxKTsKIH0KICNlbmRpZgotCi0jZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvaW5ldF9wdG9uLmggYi9zbm1wbGliL2luZXRfcHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTY2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2luZXRfcHRvbi5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0lORVRfUFRPTl9ICisjZGVmaW5lIF9JTkVUX1BUT05fSAorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworI2lmbmRlZiBIQVZFX0lORVRfUFRPTgoraW50ICAgICAgICAgICAgIG5ldHNubXBfaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpOworI2RlZmluZSBpbmV0X3B0b24gbmV0c25tcF9pbmV0X3B0b24KKyNlbmRpZiAvKkhBVkVfSU5FVF9QVE9OICovCisKKyNlbmRpZiAvKl9JTkVUX1BUT05fSCovCmRpZmYgLS1naXQgYS9zbm1wbGliL2ludDY0LmMgYi9zbm1wbGliL2ludDY0LmMKaW5kZXggZWE1NjY3My4uNTFmMWYzMiAxMDA2NDQKLS0tIGEvc25tcGxpYi9pbnQ2NC5jCisrKyBiL3NubXBsaWIvaW50NjQuYwpAQCAtMTYsOSArMTYsNiBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ludDY0Lmg+CkBAIC0yNiw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKIC8qKgogICogRGl2aWRlIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGJ5IDEwLgogICoKQEAgLTIwMCw2ICsxOTksOCBAQAogICAgIHU2NEluY3IocHU2NG91dCwgJnRtcCk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1NjRjb3B5LCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VNjRDT1BZCiAvKioKICAqIENvcHkgYSA2NC1iaXQgbnVtYmVyLgogICoKQEAgLTIxMSw2ICsyMTIsNyBAQAogewogICAgICpwdTY0b25lID0gKnB1NjR0d287CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VNjRDT1BZICovCiAKIC8qKgogICogU2V0IGFuIHVuc2lnbmVkIDY0LWJpdCBudW1iZXIgdG8gemVyby4KQEAgLTI2Niw3ICsyNjgsNyBAQAogICAgIGlmKCAoTlVMTCA9PSBvbGRfdmFsKSB8fCAoTlVMTCA9PSBuZXdfdmFsKSApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIERFQlVHTVNHVEwoKCI5OmM2NDpjaGVja193cmFwIiwgImNoZWNrIHdyYXAgMHglMHguMHglMHggMHglMHguMHglMHhcbiIsCisgICAgREVCVUdNU0dUTCgoIjk6YzY0OmNoZWNrX3dyYXAiLCAiY2hlY2sgd3JhcCAweCUwbHguMHglMGx4IDB4JTBseC4weCUwbHhcbiIsCiAgICAgICAgICAgICAgICAgb2xkX3ZhbC0+aGlnaCwgb2xkX3ZhbC0+bG93LCBuZXdfdmFsLT5oaWdoLCBuZXdfdmFsLT5sb3cpKTsKICAgICAKICAgICAvKgpAQCAtMzQ1LDcgKzM0Nyw3IEBACiAgICAgaWYgKChOVUxMID09IG5lZWRfd3JhcF9jaGVjaykgfHwgKDAgIT0gKm5lZWRfd3JhcF9jaGVjaykpIHsKICAgICAgICAgcmMgPSBuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcChvbGRfcHJldl92YWwsbmV3X3ZhbCwgMSk7CiAgICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImM2NCAzMiBiaXQgY2hlY2sgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJjNjQiLCIzMiBiaXQgY2hlY2sgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzUsNyArMzc3LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICgocHJldl92YWwtPmxvdyAhPSBuZXdfdmFsLT5sb3cpIHx8CiAgICAgICAgICAgICAocHJldl92YWwtPmhpZ2ggIT0gbmV3X3ZhbC0+aGlnaCkpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJsb29rcyBsaWtlIGEgNjRiaXQgd3JhcCwgYnV0IHByZXYhPW5ld1xuIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYzY0IiwgImxvb2tzIGxpa2UgYSA2NGJpdCB3cmFwLCBidXQgcHJldiE9bmV3XG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoTlVMTCAhPSBuZWVkX3dyYXBfY2hlY2spCkBAIC00NDIsNyArNDQ0LDcgQEAKICAgICAgICAgc3RyKys7CiAgICAgfQogCi0gICAgd2hpbGUgKCpzdHIgJiYgaXNkaWdpdCgqc3RyKSkgeworICAgIHdoaWxlICgqc3RyICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpzdHIpKSkgewogICAgICAgICBvayA9IDE7CiAgICAgICAgIHUgPSAqc3RyIC0gJzAnOwogICAgICAgICBtdWx0QnkxMCgqaTY0LCAmaTY0cCk7CmRpZmYgLS1naXQgYS9zbm1wbGliL2tleXRvb2xzLmMgYi9zbm1wbGliL2tleXRvb2xzLmMKaW5kZXggYWE2YTcxMi4uMGNjYjNhNiAxMDA2NDQKLS0tIGEvc25tcGxpYi9rZXl0b29scy5jCisrKyBiL3NubXBsaWIva2V5dG9vbHMuYwpAQCAtMTQsMTIgKzE0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTUxLDYgKzQ5LDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9tZDUuaD4KICNlbmRpZgogI2VuZGlmCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaD4KKyNlbmRpZgogCiAjaWZkZWYgTkVUU05NUF9VU0VfUEtDUzExCiAjaW5jbHVkZSA8c2VjdXJpdHkvY3J5cHRva2kuaD4KQEAgLTYxLDYgKzYzLDExIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fc3VwcG9ydCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fa2V5dG9vbHMsIHVzbV9zdXBwb3J0KQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX0tFWVRPT0xTCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBnZW5lcmF0ZV9LdQogICoKQEAgLTk2LDExICsxMDMsMTUgQEAKICAqLwogaW50CiBnZW5lcmF0ZV9LdShjb25zdCBvaWQgKiBoYXNodHlwZSwgdV9pbnQgaGFzaHR5cGVfbGVuLAotICAgICAgICAgICAgdV9jaGFyICogUCwgc2l6ZV90IHBwbGVuLCB1X2NoYXIgKiBLdSwgc2l6ZV90ICoga3VsZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkKKyAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIFAsIHNpemVfdCBwcGxlbiwgdV9jaGFyICogS3UsIHNpemVfdCAqIGt1bGVuKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAogICAgICAgICBuYnl0ZXMgPSBVU01fTEVOR1RIX0VYUEFOREVEX1BBU1NQSFJBU0U7CisjaWYgIWRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgXAorICAgIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworI2VuZGlmCiAKICAgICB1X2ludCAgICAgICAgICAgaSwgcGluZGV4ID0gMDsKIApAQCAtMTA4LDcgKzExOSwxMiBAQAogCiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTAogICAgIEVWUF9NRF9DVFggICAgICpjdHggPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAgICB0bXBfbGVuOworI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisgICAgU0hBX0NUWCBjc2hhMTsKKyAgICBNRDVfQ1RYIGNtZDU7CisgICAgY2hhciAgICBjcnlwdG90eXBlID0gMDsKKyNkZWZpbmUgVFlQRV9NRDUgIDEKKyNkZWZpbmUgVFlQRV9TSEExIDIKICNlbHNlCiAgICAgTURzdHJ1Y3QgICAgICAgIE1EOwogI2VuZGlmCkBAIC0xMzcsMTcgKzE1MywzNSBAQAogICAgIGN0eCA9IEVWUF9NRF9DVFhfY3JlYXRlKCk7CiAjZWxzZQogICAgIGN0eCA9IG1hbGxvYyhzaXplb2YoKmN0eCkpOwotICAgIEVWUF9NRF9DVFhfaW5pdChjdHgpOworICAgIGlmICghRVZQX01EX0NUWF9pbml0KGN0eCkpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICNlbmRpZgogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0gICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDTUQ1QXV0aCkpCi0gICAgICAgIEVWUF9EaWdlc3RJbml0KGN0eCwgRVZQX21kNSgpKTsKLSAgICBlbHNlCisgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDTUQ1QXV0aCkpIHsKKyAgICAgICAgaWYgKCFFVlBfRGlnZXN0SW5pdChjdHgsIEVWUF9tZDUoKSkpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDU0hBMUF1dGgpKQotICAgICAgICBFVlBfRGlnZXN0SW5pdChjdHgsIEVWUF9zaGExKCkpOwotICAgIGVsc2UKKyAgICAgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDU0hBMUF1dGgpKSB7CisgICAgICAgICAgICBpZiAoIUVWUF9EaWdlc3RJbml0KGN0eCwgRVZQX3NoYTEoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9IGVsc2UKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgZ2VuZXJhdGVfS3VfcXVpdCk7CisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQorICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ01ENUF1dGgpKSB7CisgICAgICAgIGlmICghTUQ1X0luaXQoJmNtZDUpKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICBjcnlwdG90eXBlID0gVFlQRV9NRDU7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDU0hBMUF1dGgpKSB7CisgICAgICAgIGlmICghU0hBMV9Jbml0KCZjc2hhMSkpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIGNyeXB0b3R5cGUgPSBUWVBFX1NIQTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7CisgICAgfQogI2Vsc2UKICAgICBNRGJlZ2luKCZNRCk7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfVVNFX09QRU5TU0wgKi8KQEAgLTE1OSwyOSArMTkzLDU0IEBACiAgICAgICAgIH0KICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCiAgICAgICAgIEVWUF9EaWdlc3RVcGRhdGUoY3R4LCBidWYsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworICAgICAgICBpZiAoVFlQRV9TSEExID09IGNyeXB0b3R5cGUpIHsKKyAgICAgICAgICAgIHJ2YWwgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBidWYsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ2YWwgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgYnVmLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ2YWwgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUjsKKyAgICAgICAgfQogI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CiAgICAgICAgIGlmIChNRHVwZGF0ZSgmTUQsIGJ1ZiwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0sgKiA4KSkgewogICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUjsKICAgICAgICAgICAgIGdvdG8gbWQ1X2ZpbjsKICAgICAgICAgfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1VTRV9PUEVOU1NMICovCi0KICAgICAgICAgbmJ5dGVzIC09IFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLOwogICAgIH0KIAogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKKyAgICB7CisgICAgdW5zaWduZWQgaW50ICAgIHRtcF9sZW47CisKICAgICB0bXBfbGVuID0gKmt1bGVuOwogICAgIEVWUF9EaWdlc3RGaW5hbChjdHgsICh1bnNpZ25lZCBjaGFyICopIEt1LCAmdG1wX2xlbik7CiAgICAgKmt1bGVuID0gdG1wX2xlbjsKICAgICAvKgogICAgICAqIHdoYXQgYWJvdXQgZnJlZSgpIAogICAgICAqLworICAgIH0KKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworICAgIGlmIChUWVBFX1NIQTEgPT0gY3J5cHRvdHlwZSkgeworICAgICAgICBTSEExX0ZpbmFsKEt1LCAmY3NoYTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1ENV9GaW5hbChLdSwgJmNtZDUpOworICAgIH0KKyAgICByZXQgPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZV9sZW4pOworICAgIGlmIChyZXQgPT0gU05NUEVSUl9HRU5FUlIpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAqa3VsZW4gPSByZXQ7CiAjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKICAgICBpZiAoTUR1cGRhdGUoJk1ELCBidWYsIDApKSB7CiAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1VTTV9FTkNSWVBUSU9ORVJST1I7CiAgICAgICAgIGdvdG8gbWQ1X2ZpbjsKICAgICB9Ci0gICAgKmt1bGVuID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVfbGVuKTsKKyAgICByZXQgPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZV9sZW4pOworICAgIGlmIChyZXQgPT0gU05NUEVSUl9HRU5FUlIpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAqa3VsZW4gPSByZXQ7CiAgICAgTURnZXQoJk1ELCBLdSwgKmt1bGVuKTsKICAgbWQ1X2ZpbjoKICAgICBtZW1zZXQoJk1ELCAwLCBzaXplb2YoTUQpKTsKQEAgLTI5MiwxMCArMzUxLDEwIEBACiAgKi8KIGludAogZ2VuZXJhdGVfa3VsKGNvbnN0IG9pZCAqIGhhc2h0eXBlLCB1X2ludCBoYXNodHlwZV9sZW4sCi0gICAgICAgICAgICAgdV9jaGFyICogZW5naW5lSUQsIHNpemVfdCBlbmdpbmVJRF9sZW4sCi0gICAgICAgICAgICAgdV9jaGFyICogS3UsIHNpemVfdCBrdV9sZW4sCisgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHNpemVfdCBlbmdpbmVJRF9sZW4sCisgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogS3UsIHNpemVfdCBrdV9sZW4sCiAgICAgICAgICAgICAgdV9jaGFyICogS3VsLCBzaXplX3QgKiBrdWxfbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICB1X2ludCAgICAgICAgICAgbmJ5dGVzID0gMDsKQEAgLTMyNCw3ICszODMsNyBAQAogCiAgICAgcHJvcGVybGVuZ3RoID0gKHNpemVfdCkgaXByb3Blcmxlbmd0aDsKIAotICAgIGlmICgoKGludCkgKmt1bF9sZW4gPCBwcm9wZXJsZW5ndGgpIHx8ICgoaW50KSBrdV9sZW4gPCBwcm9wZXJsZW5ndGgpKSB7CisgICAgaWYgKCgqa3VsX2xlbiA8IHByb3Blcmxlbmd0aCkgfHwgKGt1X2xlbiA8IHByb3Blcmxlbmd0aCkpIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgZ2VuZXJhdGVfa3VsX3F1aXQpOwogICAgIH0KIApAQCAtNDAzLDkgKzQ2MiwxMCBAQAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBvbGRrZXksIHNpemVfdCBvbGRrZXlfbGVuLAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBuZXdrZXksIHNpemVfdCBuZXdrZXlfbGVuLAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrY3N0cmluZywgc2l6ZV90ICoga2NzdHJpbmdfbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKKyAgICBpbnQgICAgICAgICAgICAgaXByb3Blcmxlbmd0aDsKICAgICBzaXplX3QgICAgICAgICAgcHJvcGVybGVuZ3RoOwogICAgIHNpemVfdCAgICAgICAgICBuYnl0ZXMgPSAwOwogCkBAIC00MjcsMTUgKzQ4NywxNSBAQAogICAgIC8qCiAgICAgICogU2V0dXAgZm9yIHRoZSB0cmFuc2Zvcm0gdHlwZS4KICAgICAgKi8KLSAgICBwcm9wZXJsZW5ndGggPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZV9sZW4pOwotICAgIGlmIChwcm9wZXJsZW5ndGggPT0gU05NUEVSUl9HRU5FUlIpCisgICAgaXByb3Blcmxlbmd0aCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlX2xlbik7CisgICAgaWYgKGlwcm9wZXJsZW5ndGggPT0gU05NUEVSUl9HRU5FUlIpCiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIGVuY29kZV9rZXljaGFuZ2VfcXVpdCk7CiAKICAgICBpZiAoKG9sZGtleV9sZW4gIT0gbmV3a2V5X2xlbikgfHwgKCprY3N0cmluZ19sZW4gPCAoMiAqIG9sZGtleV9sZW4pKSkgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBlbmNvZGVfa2V5Y2hhbmdlX3F1aXQpOwogICAgIH0KIAotICAgIHByb3Blcmxlbmd0aCA9IFNOTVBfTUlOKChpbnQpIG9sZGtleV9sZW4sIHByb3Blcmxlbmd0aCk7CisgICAgcHJvcGVybGVuZ3RoID0gU05NUF9NSU4ob2xka2V5X2xlbiwgKHNpemVfdClpcHJvcGVybGVuZ3RoKTsKIAogICAgIC8qCiAgICAgICogVXNlIHRoZSBvbGQga2V5IGFuZCBzb21lIHJhbmRvbSBieXRlcyB0byBlbmNvZGUgdGhlIG5ldyBrZXkKQEAgLTQ1Niw3ICs1MTYsNyBAQAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCiAgICAgcnZhbCA9IHNjX3JhbmRvbShrY3N0cmluZywgJm5ieXRlcyk7CiAgICAgUVVJVEZVTihydmFsLCBlbmNvZGVfa2V5Y2hhbmdlX3F1aXQpOwotICAgIGlmICgoaW50KSBuYnl0ZXMgIT0gcHJvcGVybGVuZ3RoKSB7CisgICAgaWYgKG5ieXRlcyAhPSBwcm9wZXJsZW5ndGgpIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgZW5jb2RlX2tleWNoYW5nZV9xdWl0KTsKICAgICB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KQEAgLTQ3Niw3ICs1MzYsNyBAQAogCiAgICAgICAgIGtjc3RyaW5nICs9IHByb3Blcmxlbmd0aDsKICAgICAgICAgbmJ5dGVzID0gMDsKLSAgICAgICAgd2hpbGUgKChpbnQpIChuYnl0ZXMrKykgPCBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgd2hpbGUgKChuYnl0ZXMrKykgPCBwcm9wZXJsZW5ndGgpIHsKICAgICAgICAgICAgICprY3N0cmluZysrIF49ICpuZXdrZXkrKzsKICAgICAgICAgfQogICAgIH0KQEAgLTUzMSw3ICs1OTEsNyBAQAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBvbGRrZXksIHNpemVfdCBvbGRrZXlfbGVuLAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrY3N0cmluZywgc2l6ZV90IGtjc3RyaW5nX2xlbiwKICAgICAgICAgICAgICAgICAgdV9jaGFyICogbmV3a2V5LCBzaXplX3QgKiBuZXdrZXlfbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICBzaXplX3QgICAgICAgICAgcHJvcGVybGVuZ3RoID0gMDsKQEAgLTU4OCw3ICs2NDgsNyBAQAogICAgICAgICBtZW1jcHkobmV3a2V5LCB0bXBfYnVmLCBwcm9wZXJsZW5ndGgpOwogICAgICAgICBidWZwID0ga2NzdHJpbmcgKyBwcm9wZXJsZW5ndGg7CiAgICAgICAgIG5ieXRlcyA9IDA7Ci0gICAgICAgIHdoaWxlICgoaW50KSAobmJ5dGVzKyspIDwgcHJvcGVybGVuZ3RoKSB7CisgICAgICAgIHdoaWxlICgobmJ5dGVzKyspIDwgcHJvcGVybGVuZ3RoKSB7CiAgICAgICAgICAgICAqbmV3a2V5KysgXj0gKmJ1ZnArKzsKICAgICAgICAgfQogICAgIH0KQEAgLTU5OSw4ICs2NTksNyBAQAogICAgICAgICAgICAgbWVtc2V0KG5ld2tleSwgMCwgcHJvcGVybGVuZ3RoKTsKICAgICB9CiAgICAgbWVtc2V0KHRtcF9idWYsIDAsIFNOTVBfTUFYQlVGKTsKLSAgICBpZiAodG1wYnVmICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRSh0bXBidWYpOworICAgIFNOTVBfRlJFRSh0bXBidWYpOwogCiAgICAgcmV0dXJuIHJ2YWw7CiAKQEAgLTYwOSwzICs2NjgsNCBAQAogI2Vsc2UKIF9LRVlUT09MU19OT1RfQVZBSUxBQkxFCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludGVybmFsIG9yIG9wZW5zc2wgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9LRVlUT09MUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9sYXJnZV9mZF9zZXQuYyBiL3NubXBsaWIvbGFyZ2VfZmRfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkZDQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvbGFyZ2VfZmRfc2V0LmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qKgorICogQGZpbGUgbGFyZ2VfZmRfc2V0LmMKKyAqCisgKiBAYnJpZWYgTWFjcm8ncyBhbmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpb24gb2YgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldHMuCisgKi8KKworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSwgd2hpY2ggaXMgaW52b2tlZCBieSBGRF9aRVJPKCkgKi8KKworI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaD4KKworCisjaWYgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorCisjZGVmaW5lIExGRF9TRVQobiwgcCkgICAgRkRfU0VUKG4sIHApCisjZGVmaW5lIExGRF9DTFIobiwgcCkgICAgRkRfQ0xSKG4sIHApCisjZGVmaW5lIExGRF9JU1NFVChuLCBwKSAgRkRfSVNTRVQobiwgcCkKKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9zZXRmZChTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgdW5zaWduZWQgICAgICAgIGk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChmZCAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgICBpZiAoZmRzZXQtPmxmc19zZXQuZmRfY291bnQgPT0gZmRzZXQtPmxmc19zZXRzaXplKQorICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZmRzZXQsIDIgKiAoZmRzZXQtPmxmc19zZXRzaXplICsgMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2ldID09IChTT0NLRVQpIChmZCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaSA9PSBmZHNldC0+bGZzX3NldC5mZF9jb3VudAorICAgICAgICAmJiBmZHNldC0+bGZzX3NldC5mZF9jb3VudCA8IGZkc2V0LT5sZnNfc2V0c2l6ZSkgeworICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9jb3VudCsrOworICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpXSA9IGZkOworICAgIH0KK30KKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9jbHIoU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIHVuc2lnbmVkICAgICAgICBpOworCisgICAgbmV0c25tcF9hc3NlcnQoZmQgIT0gSU5WQUxJRF9TT0NLRVQpOworCisgICAgZm9yIChpID0gMDsgaSA8IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2ldID09IGZkKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50IC0gMSkgeworICAgICAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2ldID0KKyAgICAgICAgICAgICAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaSArIDFdOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50LS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50CituZXRzbm1wX2xhcmdlX2ZkX2lzX3NldChTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgdW5zaWduZWQgaW50ICAgIGk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChmZCAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzZXQtPmxmc19zZXQuZmRfY291bnQ7IGkrKykgeworICAgICAgICBpZiAoZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaV0gPT0gZmQpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKy8qCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgZ2xpYmMgdHJpZ2dlciBhYm9ydCgpIGlmIEZEX1NFVCgpLCBGRF9DTFIoKSBvcgorICogRkRfSVNTRVQoKSBpcyBpbnZva2VkIHdpdGggbiA+PSBGRF9TRVRTSVpFLiBIZW5jZSB0aGVzZSByZXBsYWNlbWVudCBtYWNyb3MuCisgKi8KKyNkZWZpbmUgTEZEX1NFVChuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gfD0gICgxVUxMIDw8ICgobikgJSBORkRCSVRTKSkpCisjZGVmaW5lIExGRF9DTFIobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICY9IH4oMVVMTCA8PCAoKG4pICUgTkZEQklUUykpKQorI2RlZmluZSBMRkRfSVNTRVQobiwgcCkgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmICAgKDFVTEwgPDwgKChuKSAlIE5GREJJVFMpKSkKKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9zZXRmZChpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgbmV0c25tcF9hc3NlcnQoZmQgPj0gMCk7CisKKyAgICB3aGlsZSAoZmQgPj0gKGludClmZHNldC0+bGZzX3NldHNpemUpCisgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShmZHNldCwgMiAqIChmZHNldC0+bGZzX3NldHNpemUgKyAxKSk7CisKKyAgICBMRkRfU0VUKGZkLCBmZHNldC0+bGZzX3NldHB0cik7Cit9CisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfY2xyKGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChmZCA+PSAwKTsKKworICAgIGlmICgodW5zaWduZWQpZmQgPCBmZHNldC0+bGZzX3NldHNpemUpCisgICAgICAgIExGRF9DTFIoZmQsIGZkc2V0LT5sZnNfc2V0cHRyKTsKK30KKworaW50CituZXRzbm1wX2xhcmdlX2ZkX2lzX3NldChpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgbmV0c25tcF9hc3NlcnQoZmQgPj0gMCk7CisKKyAgICByZXR1cm4gKCh1bnNpZ25lZClmZCA8IGZkc2V0LT5sZnNfc2V0c2l6ZSAmJgorICAgICAgICAgICAgTEZEX0lTU0VUKGZkLCBmZHNldC0+bGZzX3NldHB0cikpOworfQorCisjZW5kaWYKKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdChuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0LCBpbnQgc2V0c2l6ZSkKK3sKKyAgICBmZHNldC0+bGZzX3NldHNpemUgPSAwOworICAgIGZkc2V0LT5sZnNfc2V0cHRyICA9IE5VTEw7CisjaWYgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorICAgIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50ID0gMDsKKyNlbmRpZgorICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShmZHNldCwgc2V0c2l6ZSk7Cit9CisKK2ludAorbmV0c25tcF9sYXJnZV9mZF9zZXRfc2VsZWN0KGludCBudW1mZHMsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcywKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0KQoreworI2lmIGRlZmluZWQoY3lnd2luKSB8fCAhZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKyAgICAvKiBCaXQtc2V0IHJlcHJlc2VudGF0aW9uOiBtYWtlIHN1cmUgYWxsIGZkcyBoYXZlIGF0IGxlYXN0IHNpemUgJ251bWZkcycuICovCisgICAgaWYgKHJlYWRmZHMgJiYgcmVhZGZkcy0+bGZzX3NldHNpemUgPCBudW1mZHMpCisgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShyZWFkZmRzLCBudW1mZHMpOworICAgIGlmICh3cml0ZWZkcyAmJiB3cml0ZWZkcy0+bGZzX3NldHNpemUgPCBudW1mZHMpCisgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSh3cml0ZWZkcywgbnVtZmRzKTsKKyAgICBpZiAoZXhjZXB0ZmRzICYmIGV4Y2VwdGZkcy0+bGZzX3NldHNpemUgPCBudW1mZHMpCisgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShleGNlcHRmZHMsIG51bWZkcyk7CisjZWxzZQorICAgIC8qIEFycmF5IHJlcHJlc2VudGF0aW9uOiBubyByZXNpemluZyBpcyBuZWNlc3NhcnkuICovCisjZW5kaWYKKworICAgIHJldHVybiBzZWxlY3QobnVtZmRzLAorICAgICAgICAgICAgcmVhZGZkcyA/IHJlYWRmZHMtPmxmc19zZXRwdHIgOiBOVUxMLAorICAgICAgICAgICAgd3JpdGVmZHMgPyB3cml0ZWZkcy0+bGZzX3NldHB0ciA6IE5VTEwsCisgICAgICAgICAgICBleGNlcHRmZHMgPyBleGNlcHRmZHMtPmxmc19zZXRwdHIgOiBOVUxMLAorICAgICAgICAgICAgdGltZW91dCk7Cit9CisKK2ludAorbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQsIGludCBzZXRzaXplKQoreworICAgIGludCAgICAgICAgICAgICBmZF9zZXRfYnl0ZXM7CisKKyAgICBpZiAoZmRzZXQtPmxmc19zZXRzaXplID09IHNldHNpemUpCisgICAgICAgIGdvdG8gc3VjY2VzczsKKworICAgIGlmIChzZXRzaXplID4gRkRfU0VUU0laRSkgeworICAgICAgICBmZF9zZXRfYnl0ZXMgPSBORVRTTk1QX0ZEX1NFVF9CWVRFUyhzZXRzaXplKTsKKyAgICAgICAgaWYgKGZkc2V0LT5sZnNfc2V0c2l6ZSA+IEZEX1NFVFNJWkUpIHsKKyAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0cHRyID0gcmVhbGxvYyhmZHNldC0+bGZzX3NldHB0ciwgZmRfc2V0X2J5dGVzKTsKKyAgICAgICAgICAgIGlmICghZmRzZXQtPmxmc19zZXRwdHIpCisgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmRzZXQtPmxmc19zZXRwdHIgPSBtYWxsb2MoZmRfc2V0X2J5dGVzKTsKKyAgICAgICAgICAgIGlmICghZmRzZXQtPmxmc19zZXRwdHIpCisgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtOworICAgICAgICAgICAgKmZkc2V0LT5sZnNfc2V0cHRyID0gZmRzZXQtPmxmc19zZXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmRzZXQtPmxmc19zZXRzaXplID4gRkRfU0VUU0laRSkgeworICAgICAgICAgICAgZmRzZXQtPmxmc19zZXQgPSAqZmRzZXQtPmxmc19zZXRwdHI7CisgICAgICAgICAgICBmcmVlKGZkc2V0LT5sZnNfc2V0cHRyKTsKKyAgICAgICAgfQorICAgICAgICBmZHNldC0+bGZzX3NldHB0ciA9ICZmZHNldC0+bGZzX3NldDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKGN5Z3dpbikgfHwgIWRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisgICAgLyoKKyAgICAgKiBVbml4OiB3aGVuIGVubGFyZ2luZywgY2xlYXIgdGhlIGZpbGUgZGVzY3JpcHRvcnMgZGVmaW5lZCBpbiB0aGUKKyAgICAgKiByZXNpemVkICpmZHNldCBidXQgdGhhdCB3ZXJlIG5vdCBkZWZpbmVkIGluIHRoZSBvcmlnaW5hbCAqZmRzZXQuCisgICAgICovCisgICAgaWYgKCBmZHNldC0+bGZzX3NldHNpemUgPT0gMCAmJiBzZXRzaXplID09IEZEX1NFVFNJWkUgKSB7CisgICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBjYW4gdXNlIHRoZSBPUydzIEZEX1pFUk8gKi8KKyAgICAgICAgRkRfWkVSTyhmZHNldC0+bGZzX3NldHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAgICAgZm9yIChpID0gZmRzZXQtPmxmc19zZXRzaXplOyBpIDwgc2V0c2l6ZTsgaSsrKQorICAgICAgICAgICAgTEZEX0NMUihpLCBmZHNldC0+bGZzX3NldHB0cik7CisgICAgfQorI2VuZGlmCisKKyAgICBmZHNldC0+bGZzX3NldHNpemUgPSBzZXRzaXplOworI2lmICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKyAgICBpZiAoc2V0c2l6ZSA8IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50KQorICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9jb3VudCA9IHNldHNpemU7CisjZW5kaWYKK3N1Y2Nlc3M6CisgICAgcmV0dXJuIDE7CisKK291dF9vZl9tZW06CisgICAgZmRzZXQtPmxmc19zZXRzaXplID0gMDsKKyNpZiAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisgICAgZmRzZXQtPmxmc19zZXQuZmRfY291bnQgPSAwOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAobmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZmRzZXQsIDApOworICAgIGZkc2V0LT5sZnNfc2V0c2l6ZSA9IDA7CisgICAgZmRzZXQtPmxmc19zZXRwdHIgID0gTlVMTDsKK30KKwordm9pZAorbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQobmV0c25tcF9sYXJnZV9mZF9zZXQgKiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZF9zZXQgKiBzcmMpCit7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGRzdCwgRkRfU0VUU0laRSk7CisgICAgKmRzdC0+bGZzX3NldHB0ciA9ICpzcmM7Cit9CisKK2ludAorbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQoZmRfc2V0ICogZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBzcmMpCit7CisgICAgLyogUmVwb3J0IGZhaWx1cmUgaWYgKnNyYyBpcyBsYXJnZXIgdGhhbiBGRF9TRVRTSVpFLiAqLworICAgIGlmIChzcmMtPmxmc19zZXRzaXplID4gRkRfU0VUU0laRSkgeworICAgICAgICBGRF9aRVJPKGRzdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqZHN0ID0gKnNyYy0+bGZzX3NldHB0cjsKKworI2lmICEoIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKSkKKyAgICB7CisgICAgICAgIGludCAgICAgICAgICAgICBpOworCisgICAgICAgIC8qIFVuaXg6IGNsZWFyIGFueSBmaWxlIGRlc2NyaXB0b3JzIGRlZmluZWQgaW4gKmRzdCBidXQgbm90IGluICpzcmMuICovCisgICAgICAgIGZvciAoaSA9IHNyYy0+bGZzX3NldHNpemU7IGkgPCBGRF9TRVRTSVpFOyArK2kpCisgICAgICAgICAgICBGRF9DTFIoaSwgZHN0KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9sY2RfdGltZS5jIGIvc25tcGxpYi9sY2RfdGltZS5jCmluZGV4IGEzMDU3ZGMuLjJiZmE1NDkgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvbGNkX3RpbWUuYworKysgYi9zbm1wbGliL2xjZF90aW1lLmMKQEAgLTYsMTEgKzYsOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTIxLDExICsxOSw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OSw2ICs1MywxMSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX3N1cHBvcnQsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX2xjZF90aW1lLCB1c21fc3VwcG9ydCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9MQ0RfVElNRQorCiAvKgogICogR2xvYmFsIHN0YXRpYyBoYXNobGlzdCB0byBjb250YWluIEVuZ2luZXRpbWUgZW50cmllcy4KICAqCkBAIC05NSwxMyArOTQsMTMgQEAKICAqICAgICAgICAgICAgdGhpcyBpcyBhbm90aGVyIG1hdHRlci4KICAqLwogaW50Ci1nZXRfZW5naW5ldGltZSh1X2NoYXIgKiBlbmdpbmVJRCwKK2dldF9lbmdpbmV0aW1lKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELAogICAgICAgICAgICAgICAgdV9pbnQgZW5naW5lSURfbGVuLAogICAgICAgICAgICAgICAgdV9pbnQgKiBlbmdpbmVib290LAogICAgICAgICAgICAgICAgdV9pbnQgKiBlbmdpbmVfdGltZSwgdV9pbnQgYXV0aGVudGljYXRlZCkKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKLSAgICB0aW1lX3QgICAgICAgICAgdGltZWRpZmYgPSAwOworICAgIGludCAgICAgICAgICAgICB0aW1lZGlmZiA9IDA7CiAgICAgRW5naW5ldGltZSAgICAgIGUgPSBOVUxMOwogCiAKQEAgLTEzMyw3ICsxMzIsNyBAQAogICAgICAgICAqZW5naW5lX3RpbWUgPSBlLT5lbmdpbmVUaW1lOwogICAgICAgICAqZW5naW5lYm9vdCA9IGUtPmVuZ2luZUJvb3Q7CiAKLSAgICAgICB0aW1lZGlmZiA9IHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpIC0gZS0+bGFzdFJlY2VpdmVkRW5naW5lVGltZTsKKyAgICAgICB0aW1lZGlmZiA9IChpbnQpIChzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKSAtIGUtPmxhc3RSZWNlaXZlZEVuZ2luZVRpbWUpOwogCiAjaWZkZWYgTENEX1RJTUVfU1lOQ19PUFQKICAgICB9CkBAIC0xOTcsNyArMTk2LDcgQEAKICAgICAgICAgICAgICAgICAgIHVfaW50ICogbGFzdF9lbmdpbmVfdGltZSwgdV9pbnQgYXV0aGVudGljYXRlZCkKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKLSAgICB0aW1lX3QgICAgICAgICAgdGltZWRpZmYgPSAwOworICAgIGludCAgICAgICAgICAgICB0aW1lZGlmZiA9IDA7CiAgICAgRW5naW5ldGltZSAgICAgIGUgPSBOVUxMOwogCiAKQEAgLTIyOSw3ICsyMjgsNyBAQAogICAgICAgICAqbGFzdF9lbmdpbmVfdGltZSA9ICplbmdpbmVfdGltZSA9IGUtPmVuZ2luZVRpbWU7CiAgICAgICAgICplbmdpbmVib290ID0gZS0+ZW5naW5lQm9vdDsKIAotICAgICAgIHRpbWVkaWZmID0gc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCkgLSBlLT5sYXN0UmVjZWl2ZWRFbmdpbmVUaW1lOworICAgICAgIHRpbWVkaWZmID0gKGludCkgKHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpIC0gZS0+bGFzdFJlY2VpdmVkRW5naW5lVGltZSk7CiAKICNpZmRlZiBMQ0RfVElNRV9TWU5DX09QVAogICAgIH0KQEAgLTI5OCwxNCArMjk3LDE0IEBACiB2b2lkIGZyZWVfZXRpbWVsaXN0KHZvaWQpCiB7CiAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgIEVuZ2luZXRpbWUgZSA9IDA7Ci0gICAgIEVuZ2luZXRpbWUgbmV4dEUgPSAwOworICAgICBFbmdpbmV0aW1lIGUgPSBOVUxMOworICAgICBFbmdpbmV0aW1lIG5leHRFID0gTlVMTDsKIAogICAgICBmb3IoIDsgaW5kZXggPCBFVElNRUxJU1RfU0laRTsgKytpbmRleCkKICAgICAgewogICAgICAgICAgICBlID0gZXRpbWVsaXN0W2luZGV4XTsKIAotICAgICAgICAgICB3aGlsZShlICE9IDApCisgICAgICAgICAgIHdoaWxlKGUgIT0gTlVMTCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuZXh0RSA9IGUtPm5leHQ7CiAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShlLT5lbmdpbmVJRCk7CkBAIC0zMTMsNyArMzEyLDcgQEAKICAgICAgICAgICAgICAgICAgZSA9IG5leHRFOwogICAgICAgICAgICB9CiAKLSAgICAgICAgICAgZXRpbWVsaXN0W2luZGV4XSA9IDA7CisgICAgICAgICAgIGV0aW1lbGlzdFtpbmRleF0gPSBOVUxMOwogICAgICB9CiAgICAgIHJldHVybjsKIH0KQEAgLTM0Miw3ICszNDEsNyBAQAogICogWFhYCSJDdXJyZW50IHRpbWUgd2l0aGluIHRoZSBsb2NhbCBlbmdpbmUiID09IHRpbWUoTlVMTCkuLi4KICAqLwogaW50Ci1zZXRfZW5naW5ldGltZSh1X2NoYXIgKiBlbmdpbmVJRCwKK3NldF9lbmdpbmV0aW1lKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELAogICAgICAgICAgICAgICAgdV9pbnQgZW5naW5lSURfbGVuLAogICAgICAgICAgICAgICAgdV9pbnQgZW5naW5lYm9vdCwgdV9pbnQgZW5naW5lX3RpbWUsIHVfaW50IGF1dGhlbnRpY2F0ZWQpCiB7CkBAIC00MjMsNyArNDIyLDcgQEAKICAqIEFTU1VNRVMgdGhhdCBubyBlbmdpbmVJRCB3aWxsIGhhdmUgbW9yZSB0aGFuIG9uZSByZWNvcmQgaW4gdGhlIGxpc3QuCiAgKi8KIEVuZ2luZXRpbWUKLXNlYXJjaF9lbmdpbmV0aW1lX2xpc3QodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbikKK3NlYXJjaF9lbmdpbmV0aW1lX2xpc3QoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbikKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICBFbmdpbmV0aW1lICAgICAgZSA9IE5VTEw7CkBAIC00ODEsNyArNDgwLDcgQEAKICAqCiAgKi8KIGludAotaGFzaF9lbmdpbmVJRCh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKQoraGFzaF9lbmdpbmVJRChjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9HRU5FUlI7CiAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSBTTk1QX01BWEJVRjsKQEAgLTUwNiw2ICs1MDUsMTIgQEAKICAgICBydmFsID0gc2NfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAogICAgICAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDTUQ1QXV0aFByb3RvY29sKSAvIHNpemVvZihvaWQpLAogICAgICAgICAgICAgICAgICAgIGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sIGJ1ZiwgJmJ1Zl9sZW4pOworICAgIGlmIChydmFsID09IFNOTVBFUlJfU0NfTk9UX0NPTkZJR1VSRUQpIHsKKyAgICAgICAgLyogZmFsbCBiYWNrIHRvIHNoYTEgKi8KKyAgICAgICAgcnZhbCA9IHNjX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSAvIHNpemVvZihvaWQpLAorICAgICAgICAgICAgICAgICAgIGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sIGJ1ZiwgJmJ1Zl9sZW4pOworICAgIH0KICNlbHNlCiAgICAgcnZhbCA9IHNjX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSAvIHNpemVvZihvaWQpLApAQCAtNTIxLDcgKzUyNiw3IEBACiAgICAgU05NUF9GUkVFKGNvbnRleHQpOwogICAgIG1lbXNldChidWYsIDAsIFNOTVBfTUFYQlVGKTsKIAotICAgIHJldHVybiAocnZhbCA8IDApID8gcnZhbCA6IChhZGRpdGl2ZSAlIEVUSU1FTElTVF9TSVpFKTsKKyAgICByZXR1cm4gKHJ2YWwgPCAwKSA/IHJ2YWwgOiAoaW50KShhZGRpdGl2ZSAlIEVUSU1FTElTVF9TSVpFKTsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgaGFzaF9lbmdpbmVJRCgpICovCiAKQEAgLTYwNiwzICs2MTEsNCBAQAogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBkdW1wX2V0aW1lbGlzdCgpICovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX0xDRF9USU1FICovCmRpZmYgLS1naXQgYS9zbm1wbGliL21kNS5jIGIvc25tcGxpYi9tZDUuYwppbmRleCBiMTI4Y2NhLi4xY2UwNzI3IDEwMDY0NAotLS0gYS9zbm1wbGliL21kNS5jCisrKyBiL3NubXBsaWIvbWQ1LmMKQEAgLTU1LDE0ICs1NSwxMiBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWQ1Lmg+CiAKQEAgLTExNCw3ICsxMTIsNyBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTVERDX0hFQURFUlMgKi8KIAogdm9pZCAgICAgICAgICAgIE1EcmV2ZXJzZSh1bnNpZ25lZCBpbnQgKik7Ci1zdGF0aWMgdm9pZCAgICAgTURibG9jayhNRHB0ciwgdW5zaWduZWQgaW50ICopOworc3RhdGljIHZvaWQgICAgIE1EYmxvY2soTURwdHIsIGNvbnN0IHVuc2lnbmVkIGludCAqKTsKIAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogLyoKQEAgLTE5Myw3ICsxOTEsNyBAQAogICogKiogVGhpcyByb3V0aW5lIGlzIG5vdCB1c2VyLWNhbGxhYmxlLiAKICAqLwogc3RhdGljIHZvaWQKLU1EYmxvY2soTURwdHIgTURwLCB1bnNpZ25lZCBpbnQgKlgpCitNRGJsb2NrKE1EcHRyIE1EcCwgY29uc3QgdW5zaWduZWQgaW50ICpYKQogewogICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAsIEEsIEIsIEMsIEQ7ICAgICAgLyogaHB1eCBzeXN2IHN1biAqLwogI2lmZGVmIFdPUkRTX0JJR0VORElBTgpAQCAtMjk5LDcgKzI5Nyw3IEBACiAgKiAqKiAgICAgICAgICAtMiBpZiBjb3VudCB3YXMgdG9vIGxhcmdlCiAgKi8KIGludAotTUR1cGRhdGUoTURwdHIgTURwLCB1bnNpZ25lZCBjaGFyICpYLCB1bnNpZ25lZCBpbnQgY291bnQpCitNRHVwZGF0ZShNRHB0ciBNRHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlgsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKICAgICB1bnNpZ25lZCBpbnQgICAgaSwgdG1wLCBiaXQsIGJ5dGUsIG1hc2s7CiAgICAgdW5zaWduZWQgY2hhciAgIFhYWzY0XTsKQEAgLTMzMyw3ICszMzEsNyBAQAogICAgICAqIFByb2Nlc3MgZGF0YSAKICAgICAgKi8KICAgICBpZiAoY291bnQgPT0gNTEyKSB7ICAgICAgICAgLyogRnVsbCBibG9jayBvZiBkYXRhIHRvIGhhbmRsZSAqLwotICAgICAgICBNRGJsb2NrKE1EcCwgKHVuc2lnbmVkIGludCAqKSBYKTsKKyAgICAgICAgTURibG9jayhNRHAsIChjb25zdCB1bnNpZ25lZCBpbnQgKikgWCk7CiAgICAgfSBlbHNlIGlmIChjb3VudCA+IDUxMikgICAgIC8qIENoZWNrIGZvciBjb3VudCB0b28gbGFyZ2UgKi8KICAgICAgICAgcmV0dXJuIC0yOwogICAgIC8qCkBAIC0zODksNyArMzg3LDcgQEAKICAqIE1EY2hlY2tzdW0oZGF0YSwgbGVuLCBNRDUpOiBkbyBhIGNoZWNrc3VtIG9uIGFuIGFyYmlydHJhcnkgYW1vdW50IG9mIGRhdGEgCiAgKi8KIGludAotTURjaGVja3N1bSh1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4pCitNRGNoZWNrc3VtKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbikKIHsKICAgICBNRHN0cnVjdCAgICAgICAgbWQ7CiAgICAgTURzdHJ1Y3QgICAgICAgKk1EID0gJm1kOwpAQCAtNDIzLDggKzQyMSw4IEBACiAgKiBvZiBkYXRhLCBhbmQgcHJlcGVuZGVkIHdpdGggYSBzZWNyZXQgaW4gdGhlIHN0YW5kYXJkIGZhc2hpb24gCiAgKi8KIGludAotTURzaWduKHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKLSAgICAgICB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCitNRHNpZ24oY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAorICAgICAgIGNvbnN0IHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbikKIHsKICNkZWZpbmUgSEFTSEtFWUxFTiA2NAogCkBAIC00MzQsNyArNDMyLDggQEAKICAgICB1X2NoYXIgICAgICAgICAgZXh0ZW5kZWRBdXRoS2V5W0hBU0hLRVlMRU5dOwogICAgIHVfY2hhciAgICAgICAgICBidWZbSEFTSEtFWUxFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIGk7Ci0gICAgdV9jaGFyICAgICAgICAgKmNwLCAqbmV3ZGF0YSA9IDA7CisgICAgY29uc3QgdV9jaGFyICAgKmNwOworICAgIHVfY2hhciAgICAgICAgICpuZXdkYXRhID0gTlVMTDsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL3NubXBsaWIvbWliLmMgYi9zbm1wbGliL21pYi5jCmluZGV4IDdkY2YzZDAuLmU3OTA4NzggMTAwNjQ0Ci0tLSBhL3NubXBsaWIvbWliLmMKKysrIGIvc25tcGxpYi9taWIuYwpAQCAtMzgsMTkgKzM4LDM0IEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSBzdHJsZW4oKGRpcmVudCktPmRfbmFtZSkKKyNlbHNlCisjIGRlZmluZSBkaXJlbnQgZGlyZWN0CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSAoZGlyZW50KS0+ZF9uYW1sZW4KKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzEsMTAgKzg2LDYgQEAKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKQEAgLTk0LDYgKzEwNSwxOSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvaW50NjQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfYXBpLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9zdHJpbmdzX2FsbCwgbWliX2FwaSkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9zbnByaW50LCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3NucHJpbnRfZGVzY3JpcHRpb24sIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfc25wcmludF92YXJpYWJsZSwgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9zdHJpbmdfY29udmVyc2lvbnMsIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwcmludF9taWIsIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbnByaW50X29iamlkLCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25wcmludF92YWx1ZSwgbWliX3N0cmluZ3NfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3RvX2Fzbl90eXBlLCBtaWJfYXBpKQorCiAvKiogQGRlZmdyb3VwIG1pYl91dGlsaXRpZXMgbWliIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KICAqICBAaW5ncm91cCBsaWJyYXJ5CiAgKgpAQCAtMTM2LDkgKzE2MCwxMCBAQAogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwotZXh0ZXJuIHN0cnVjdCB0cmVlICp0cmVlX2hlYWQ7CitORVRTTk1QX0lNUE9SVCBzdHJ1Y3QgdHJlZSAqdHJlZV9oZWFkOwogc3RhdGljIHN0cnVjdCB0cmVlICp0cmVlX3RvcDsKIAorTkVUU05NUF9JTVBPUlQgc3RydWN0IHRyZWUgKk1pYjsKIHN0cnVjdCB0cmVlICAgICpNaWI7ICAgICAgICAgICAgLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KIApAQCAtNDU2LDYgKzQ4MSw4IEBACiAgICAgICAgIGludCAgICAgICAgICAgICByZXBlYXQsIHdpZHRoID0gMTsKICAgICAgICAgbG9uZyAgICAgICAgICAgIHZhbHVlOwogICAgICAgICBjaGFyICAgICAgICAgICAgY29kZSA9ICdkJywgc2VwYXIgPSAwLCB0ZXJtID0gMCwgY2gsIGludGJ1ZlszMl07CisjZGVmaW5lIEhFWDJESUdJVF9ORUVEX0lOSVQgMworICAgICAgICBjaGFyICAgICAgICAgICAgaGV4MmRpZ2l0ID0gSEVYMkRJR0lUX05FRURfSU5JVDsKICAgICAgICAgdV9jaGFyICAgICAgICAgKmVjcDsKIAogICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCkpIHsKQEAgLTUwMiw5ICs1MjksMjIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2YWx1ZSA8IDE2KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChIRVgyRElHSVRfTkVFRF9JTklUID09IGhleDJkaWdpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhleDJkaWdpdCA9IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl8yRElHSVRfSEVYX09VVFBVVCk7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIGlmIHZhbHVlIGlzIDwgMTYsIGl0IHdpbGwgYmUgYSBzaW5nbGUgaGV4IGRpZ2l0LiBJZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICogd2lkdGggaXMgMSAod2UgYXJlIG91dHB1dHRpbmcgYSBieXRlIGF0IGEgdGltZSksIHBhdCBpdAorICAgICAgICAgICAgICAgICAgICAgKiB0byAyIGRpZ2l0cyBpZiBORVRTTk1QX0RTX0xJQl8yRElHSVRfSEVYX09VVFBVVCBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICogb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisgICAgICAgICAgICAgICAgICAgICAqICAtIHdlIGRvIG5vdCBoYXZlIGEgc2VwYXJhdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICogIC0gdGhlcmUgaXMgbm8gaGludCBsZWZ0IChvciB0aGVyZSBuZXZlciB3YXMgYSBoaW50KQorICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgKiBlLmcuIGZvciB0aGUgZGF0YSAweEFBMDFCQiwgd291bGQgYW55b25lIHJlYWxseSBldmVyCisgICAgICAgICAgICAgICAgICAgICAqIHdhbnQgdGhlIHN0cmluZyAiQUExQkIiPz8KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoKHZhbHVlIDwgMTYpICYmICgxID09IHdpZHRoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChoZXgyZGlnaXQgfHwgKCgwID09IHNlcGFyKSAmJiAoMCA9PSAqaGludCkpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIwJWx4IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHgiLCB2YWx1ZSk7CkBAIC0yMzQxLDcgKzIzODEsOSBAQAogCiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgInNob3dNaWJFcnJvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQl9FUlJPUlMpOwotICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJzdHJpY3RDb21tZW50VGVybSIsCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgImNvbW1lbnRUb0VPTCIsICAgICAvKiBEZXNjcmliZXMgYWN0dWFsIGJlaGF2aW91ciAqLworICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQl9DT01NRU5UX1RFUk0pOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJzdHJpY3RDb21tZW50VGVybSIsICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJfQ09NTUVOVF9URVJNKTsKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAibWliQWxsb3dVbmRlcmxpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQl9QQVJTRV9MQUJFTCk7CkBAIC0yNTU2LDYgKzI1OTgsNyBAQAogICAgICAqLwogICAgIG5ldHNubXBfZml4dXBfbWliX2RpcmVjdG9yeSgpOwogICAgIGVudl92YXIgPSBzdHJkdXAobmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeSgpKTsKKyAgICBuZXRzbm1wX21pYmluZGV4X2xvYWQoKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbml0X21pYiIsCiAgICAgICAgICAgICAgICAgIlNlZW4gTUlCRElSUzogTG9va2luZyBpbiAnJXMnIGZvciBtaWIgZGlycyAuLi5cbiIsCkBAIC0yNjIxLDcgKzI2NjQsNyBAQAogICAgIHdoaWxlIChlbnRyeSkgewogICAgICAgICBpZiAoc3RyY2FzZWNtcChlbnRyeSwgREVCVUdfQUxXQVlTX1RPS0VOKSA9PSAwKSB7CiAgICAgICAgICAgICByZWFkX2FsbF9taWJzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGVudHJ5LCAiLyIpICE9IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoZW50cnksICIvIikgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhZF9taWIoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbmV0c25tcF9yZWFkX21vZHVsZShlbnRyeSk7CkBAIC0yNjYyLDcgKzI3MDUsNyBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKGVudl92YXIgIT0gMCkgeworICAgIGlmIChlbnZfdmFyICE9IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImluaXRfbWliIiwKICAgICAgICAgICAgICAgICAgICAgIlNlZW4gTUlCRklMRVM6IExvb2tpbmcgaW4gJyVzJyBmb3IgbWliIGZpbGVzIC4uLlxuIiwKICAgICAgICAgICAgICAgICAgICAgZW52X3ZhcikpOwpAQCAtMjcxNyw3ICsyNzYwLDcgQEAKICAgICB9CiB9CiAKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKIHZvaWQKIGluaXRfbWliKHZvaWQpCiB7CkBAIC0yNzI2LDYgKzI3NjksMTM5IEBACiAjZW5kaWYKIAogCisvKgorICogSGFuZGxlIE1JQiBpbmRleGVzIGNlbnRyYWxseQorICovCitzdGF0aWMgaW50IF9taWJpbmRleCAgICAgPSAwOyAgIC8qIExhc3QgaW5kZXggaW4gdXNlICovCitzdGF0aWMgaW50IF9taWJpbmRleF9tYXggPSAwOyAgIC8qIFNpemUgb2YgaW5kZXggYXJyYXkgKi8KK2NoYXIgICAgICoqX21pYmluZGV4ZXMgICA9IE5VTEw7CisKK2ludCBfbWliaW5kZXhfYWRkKCBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgaSApOwordm9pZAorbmV0c25tcF9taWJpbmRleF9sb2FkKCB2b2lkICkKK3sKKyAgICBESVIgKmRpcjsKKyAgICBzdHJ1Y3QgZGlyZW50ICpmaWxlOworICAgIEZJTEUgKmZwOworICAgIGNoYXIgdG1wYnVmWyAzMDBdOworICAgIGNoYXIgdG1wYnVmMlszMDBdOworICAgIGludCAgaTsKKyAgICBjaGFyICpjcDsKKworICAgIC8qCisgICAgICogT3BlbiB0aGUgTUlCIGluZGV4IGRpcmVjdG9yeSwgb3IgY3JlYXRlIGl0IChlbXB0eSkKKyAgICAgKi8KKyAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIiVzL21pYl9pbmRleGVzIiwKKyAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCkpOworICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9IDA7CisgICAgZGlyID0gb3BlbmRpciggdG1wYnVmICk7CisgICAgaWYgKCBkaXIgPT0gTlVMTCApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImxvYWQ6IChuZXcpXG4iKSk7CisgICAgICAgIG1rZGlyaGllciggdG1wYnVmLCBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgbGlzdCBvZiB3aGljaCBkaXJlY3RvcnkgZWFjaCBmaWxlIHJlZmVycyB0bworICAgICAqLworICAgIHdoaWxlICgoZmlsZSA9IHJlYWRkaXIoIGRpciApKSkgeworICAgICAgICBpZiAoICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShmaWxlLT5kX25hbWVbMF0pKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpID0gYXRvaSggZmlsZS0+ZF9uYW1lICk7CisKKyAgICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICIlcy9taWJfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpICk7CisgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9IDA7CisgICAgICAgIGZwID0gZm9wZW4oIHRtcGJ1ZiwgInIiICk7CisgICAgICAgIGlmICghZnApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3AgPSBmZ2V0cyggdG1wYnVmMiwgc2l6ZW9mKHRtcGJ1ZjIpLCBmcCApOworICAgICAgICBpZiAoICFjcCApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJFbXB0eSBNSUIgaW5kZXggKCVkKVxuIiwgaSkpOworICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHRtcGJ1ZjJbc3RybGVuKHRtcGJ1ZjIpLTFdID0gMDsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImxvYWQ6ICglZCkgJXNcbiIsIGksIHRtcGJ1ZjIpKTsKKyAgICAgICAgKHZvaWQpX21pYmluZGV4X2FkZCggdG1wYnVmMis0LCBpICk7ICAvKiBTa2lwICdESVIgJyAqLworICAgICAgICBmY2xvc2UoIGZwICk7CisgICAgfQorICAgIGNsb3NlZGlyKCBkaXIgKTsKK30KKworY2hhciAqCituZXRzbm1wX21pYmluZGV4X2xvb2t1cCggY29uc3QgY2hhciAqZGlybmFtZSApCit7CisgICAgaW50IGk7CisgICAgc3RhdGljIGNoYXIgdG1wYnVmWzMwMF07CisKKyAgICBmb3IgKGk9MDsgaTxfbWliaW5kZXg7IGkrKykgeworICAgICAgICBpZiAoIF9taWJpbmRleGVzW2ldICYmCisgICAgICAgICAgICAgc3RyY21wKCBfbWliaW5kZXhlc1tpXSwgZGlybmFtZSApID09IDApIHsKKyAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiJXMvbWliX2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpKTsKKyAgICAgICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAwOworICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJsb29rdXA6ICVzICglZCkgJXNcbiIsIGRpcm5hbWUsIGksIHRtcGJ1ZiApKTsKKyAgICAgICAgICAgICByZXR1cm4gdG1wYnVmOworICAgICAgICB9CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJsb29rdXA6IChub25lKVxuIikpOworICAgIHJldHVybiBOVUxMOworfQorCitpbnQKK19taWJpbmRleF9hZGQoIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBpICkKK3sKKyAgICBjb25zdCBpbnQgb2xkX21pYmluZGV4X21heCA9IF9taWJpbmRleF9tYXg7CisKKyAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAiYWRkOiAlcyAoJWQpXG4iLCBkaXJuYW1lLCBpICkpOworICAgIGlmICggaSA9PSAtMSApCisgICAgICAgIGkgPSBfbWliaW5kZXgrKzsKKyAgICBpZiAoIGkgPj0gX21pYmluZGV4X21heCApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhlIGluZGV4IGFycmF5IGlzIGZ1bGwgKG9yIG5vbi1leGlzdGVudCkKKyAgICAgICAgICogICB0aGVuIGV4cGFuZCAob3IgY3JlYXRlKSBpdAorICAgICAgICAgKi8KKyAgICAgICAgX21pYmluZGV4X21heCA9IGkgKyAxMDsKKyAgICAgICAgX21pYmluZGV4ZXMgPSByZWFsbG9jKF9taWJpbmRleGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pYmluZGV4X21heCAqIHNpemVvZihfbWliaW5kZXhlc1swXSkpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChfbWliaW5kZXhlcyk7CisgICAgICAgIG1lbXNldChfbWliaW5kZXhlcyArIG9sZF9taWJpbmRleF9tYXgsIDAsCisgICAgICAgICAgICAgICAoX21pYmluZGV4X21heCAtIG9sZF9taWJpbmRleF9tYXgpICogc2l6ZW9mKF9taWJpbmRleGVzWzBdKSk7CisgICAgfQorCisgICAgX21pYmluZGV4ZXNbIGkgXSA9IHN0cmR1cCggZGlybmFtZSApOworICAgIGlmICggaSA+PSBfbWliaW5kZXggKQorICAgICAgICBfbWliaW5kZXggPSBpKzE7CisKKyAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAiYWRkOiAlZC8lZC8lZFxuIiwgaSwgX21pYmluZGV4LCBfbWliaW5kZXhfbWF4ICkpOworICAgIHJldHVybiBpOworfQorICAgIAorRklMRSAqCituZXRzbm1wX21pYmluZGV4X25ldyggY29uc3QgY2hhciAqZGlybmFtZSApCit7CisgICAgRklMRSAqZnA7CisgICAgY2hhciAgdG1wYnVmWzMwMF07CisgICAgY2hhciAqY3A7CisgICAgaW50ICAgaTsKKworICAgIGNwID0gbmV0c25tcF9taWJpbmRleF9sb29rdXAoIGRpcm5hbWUgKTsKKyAgICBpZiAoIWNwKSB7CisgICAgICAgIGkgID0gX21pYmluZGV4X2FkZCggZGlybmFtZSwgLTEgKTsKKyAgICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICIlcy9taWJfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSApOworICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAwOworICAgICAgICBjcCA9IHRtcGJ1ZjsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgIm5ldzogJXMgKCVzKVxuIiwgZGlybmFtZSwgY3AgKSk7CisgICAgZnAgPSBmb3BlbiggY3AsICJ3IiApOworICAgIGlmIChmcCkKKyAgICAgICAgZnByaW50ZiggZnAsICJESVIgJXNcbiIsIGRpcm5hbWUgKTsKKyAgICByZXR1cm4gZnA7Cit9CisKKwogLyoqCiAgKiBVbmxvYWRzIGFsbCBtaWJzLgogICovCkBAIC0yNzM3LDEwICsyOTEzLDE4IEBACiAgICAgICAgIGlmICh0cmVlX3RvcC0+bGFiZWwpCiAgICAgICAgICAgICBTTk1QX0ZSRUUodHJlZV90b3AtPmxhYmVsKTsKICAgICAgICAgU05NUF9GUkVFKHRyZWVfdG9wKTsKLSAgICAgICAgdHJlZV90b3AgPSBOVUxMOwogICAgIH0KICAgICB0cmVlX2hlYWQgPSBOVUxMOwogICAgIE1pYiA9IE5VTEw7CisgICAgaWYgKF9taWJpbmRleGVzKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX21pYmluZGV4OyArK2kpCisgICAgICAgICAgICBTTk1QX0ZSRUUoX21pYmluZGV4ZXNbaV0pOworICAgICAgICBmcmVlKF9taWJpbmRleGVzKTsKKyAgICAgICAgX21pYmluZGV4ID0gMDsKKyAgICAgICAgX21pYmluZGV4X21heCA9IDA7CisgICAgICAgIF9taWJpbmRleGVzID0gTlVMTDsKKyAgICB9CiAgICAgaWYgKFByZWZpeCAhPSBOVUxMICYmIFByZWZpeCAhPSAmU3RhbmRhcmRfUHJlZml4WzBdKQogICAgICAgICBTTk1QX0ZSRUUoUHJlZml4KTsKICAgICBpZiAoUHJlZml4KQpAQCAtMjc1NCwxMSArMjkzOCwxMyBAQAogICoKICAqIEBwYXJhbSBmcCAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcHJpbnQgdG8uCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QUklOVF9NSUIKIHZvaWQKIHByaW50X21pYihGSUxFICogZnApCiB7CiAgICAgcHJpbnRfc3VidHJlZShmcCwgdHJlZV9oZWFkLCAwKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BSSU5UX01JQiAqLwogCiB2b2lkCiBwcmludF9hc2NpaV9kdW1wKEZJTEUgKiBmcCkKQEAgLTMxMzksNiArMzMyNSw3IEBACiAgICAgcmV0dXJuICFidWZfb3ZlcmZsb3c7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TUFJJTlRfT0JKSUQKIGludAogc25wcmludF9vYmppZChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKQpAQCAtMzE1Miw2ICszMzM5LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NQUklOVF9PQkpJRCAqLwogCiAvKioKICAqIFByaW50cyBhbiBvaWQgdG8gc3Rkb3V0LgpAQCAtMzI4NSwxMCArMzQ3MywxMSBAQAogICAgICAgICAgKiBIYW5kbGUgcmFyZSBjYXNlIHdoZXJlIHRyZWUgaXMgZW1wdHkuICAKICAgICAgICAgICovCiAgICAgICAgIHJldHVybiBzcHJpbnRfcmVhbGxvY19ieV90eXBlKGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIDAsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05QUklOVF9WQVJBQkxFCiBpbnQKIHNucHJpbnRfdmFyaWFibGUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKQEAgLTMzMDMsNiArMzQ5Miw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTlBSSU5UX1ZBUkFCTEUgKi8KIAogLyoqCiAgKiBQcmludHMgYSB2YXJpYWJsZSB0byBzdGRvdXQuCkBAIC0zMzk3LDYgKzM1ODcsOCBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOUFJJTlRfVkFMVUUKKy8qIHVzZWQgaW4gdGhlIHBlcmwgbW9kdWxlICovCiBpbnQKIHNucHJpbnRfdmFsdWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKQEAgLTM0MTEsNiArMzYwMyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTlBSSU5UX1ZBTFVFICovCiAKIHZvaWQKIHByaW50X3ZhbHVlKGNvbnN0IG9pZCAqIG9iamlkLApAQCAtMzU0MSw4ICszNzM0LDggQEAKIAogICAgIGlmICh2YXItPm5hbWVfbGVuZ3RoID4gTUFYX09JRF9MRU4pIHsKICAgICAgICAgREVCVUdNU0dUTCgoImJ1aWxkX29pZF9zZWdtZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIlNvbWV0aGluZyB0ZXJyaWJseSB3cm9uZywgbmFtZWxlbiA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVfbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICJTb21ldGhpbmcgdGVycmlibHkgd3JvbmcsIG5hbWVsZW4gPSAlbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXZhci0+bmFtZV9sZW5ndGgpKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIApAQCAtMzY2MCwxMyArMzg1MywxMyBAQAogICAgICAgICBjYXNlIEFTTl9USU1FVElDS1M6CiAgICAgICAgICAgICBpZiAoKm9pZExlbikgewogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2YXIsICh1X2NoYXIgKikgb2lkSW5kZXgrKywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxvbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkpOwogICAgICAgICAgICAgICAgIC0tKCpvaWRMZW4pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUodmFyLCAodV9jaGFyICopIG9pZExlbiwgc2l6ZW9mKGxvbmcpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwYXJzZV9vaWRfaW5kZXhlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUGFyc2VkIGludCglZCk6ICVkXG4iLCB2YXItPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAiUGFyc2VkIGludCglZCk6ICVsZFxuIiwgdmFyLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgKnZhci0+dmFsLmludGVnZXIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zNjc3LDcgKzM4NzAsOCBAQAogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQgJiYgaSA8ICpvaWRMZW47ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChvaWRJbmRleFtpXSA+IDI1NSkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGFyc2Vfb2lkX2luZGV4ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWxsZWdhbCBvaWQgaW4gaW5kZXg6ICVkXG4iLCBvaWRJbmRleFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWxsZWdhbCBvaWQgaW4gaW5kZXg6ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkSW5kZXhbMF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsgIC8qIHN1Yi1pZGVudGlmaWVyIHRvbyBsYXJnZSAqLwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHVpdG1wID0gdWl0bXAgKyAob2lkSW5kZXhbaV0gPDwgKDgqKDMtaSkpKTsKQEAgLTQwMDYsNyArNDIwMCw3IEBACiAgICAgfQogCiAgICAgd2hpbGUgKG9iamlkbGVuLS0gPiAwKSB7ICAgIC8qIG91dHB1dCByZXN0IG9mIG5hbWUsIHVuaW50ZXJwcmV0ZWQgKi8KLSAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUuIiwgKm9iamlkKyspOworICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidS4iLCAqb2JqaWQrKyk7CiAgICAgICAgIGlmICghKmJ1Zl9vdmVyZmxvdyAmJiAhc25tcF9zdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKSBpbnRidWYpKSB7CkBAIC00Mjk0LDcgKzQ0ODgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKmJ1Zl9vdmVyZmxvdyA9IDE7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdSIsICpvYmppZCk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1IiwgKm9iamlkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEqYnVmX292ZXJmbG93CiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc25tcF9zdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3JlYWxsb2MsCkBAIC00MzAzLDcgKzQ0OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdSIsICpvYmppZCk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUiLCAqb2JqaWQpOwogICAgICAgICAgICAgICAgIGlmICghKmJ1Zl9vdmVyZmxvdyAmJiAhc25tcF9zdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIgKikKQEAgLTQzNzUsNyArNDU2OSw4IEBACiAgICAgICAgIGNhc2UgVFlQRV9JUEFERFI6CiAgICAgICAgICAgICBpZiAob2JqaWRsZW4gPCA0KQogICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoX2l0OwotICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUuJWx1LiVsdS4lbHUiLAorICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1LiIKKyAgICAgICAgICAgICAgICAgICAgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUiLAogICAgICAgICAgICAgICAgICAgICBvYmppZFswXSwgb2JqaWRbMV0sIG9iamlkWzJdLCBvYmppZFszXSk7CiAgICAgICAgICAgICBvYmppZCArPSA0OwogICAgICAgICAgICAgb2JqaWRsZW4gLT0gNDsKQEAgLTQzOTAsNyArNDU4NSw3IEBACiAgICAgICAgICAgICAgICAgb2lkICAgICAgICAgICAgIG50eXBlID0gKm9iamlkKys7CiAKICAgICAgICAgICAgICAgICBvYmppZGxlbi0tOwotICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1LiIsIG50eXBlKTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidS4iLCBudHlwZSk7CiAgICAgICAgICAgICAgICAgaWYgKCEqYnVmX292ZXJmbG93ICYmICFzbm1wX3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKQpAQCAtNDM5OSw3ICs0NTk0LDggQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobnR5cGUgPT0gMSAmJiBvYmppZGxlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1LiVsdS4lbHUuJWx1IiwKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgTkVUU05NUF9QUklvICJ1LiUiIE5FVFNOTVBfUFJJbyAidSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRbMF0sIG9iamlkWzFdLCBvYmppZFsyXSwgb2JqaWRbM10pOwogICAgICAgICAgICAgICAgICAgICBpZiAoISpidWZfb3ZlcmZsb3cKICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzbm1wX3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sCkBAIC00NTExLDYgKzQ3MDcsNyBAQAogICAgIFNOTVBfRlJFRShidWYpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NOUFJJTlRfREVTQ1JJUFRJT04KIGludAogc25wcmludF9kZXNjcmlwdGlvbihjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpCkBAIC00NTI0LDYgKzQ3MjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NOUFJJTlRfREVTQ1JJUFRJT04gKi8KIAogaW50CiBzcHJpbnRfcmVhbGxvY19kZXNjcmlwdGlvbih1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLApAQCAtNDYxMCw3ICs0ODA4LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB3aGlsZSAob2JqaWRsZW4gPiAxKSB7Ci0gICAgICAgIHNwcmludGYodG1wYnVmLCAiICVsdSIsICpvYmppZCk7CisgICAgICAgIHNwcmludGYodG1wYnVmLCAiICUiIE5FVFNOTVBfUFJJbyAidSIsICpvYmppZCk7CiAgICAgICAgIGxlbiA9IHN0cmxlbih0bXBidWYpOwogICAgICAgICBpZiAocG9zICsgbGVuICsgMiA+IHdpZHRoKSB7CiAgICAgICAgICAgICBpZiAoIXNubXBfY3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sIGFsbG93X3JlYWxsb2MsICJcbiAgICAgIikpCkBAIC00NjIzLDcgKzQ4MjEsNyBAQAogICAgICAgICBvYmppZCsrOwogICAgICAgICBvYmppZGxlbi0tOwogICAgIH0KLSAgICBzcHJpbnRmKHRtcGJ1ZiwgIiAlbHUgfSIsICpvYmppZCk7CisgICAgc3ByaW50Zih0bXBidWYsICIgJSIgTkVUU05NUF9QUklvICJ1IH0iLCAqb2JqaWQpOwogICAgIGxlbiA9IHN0cmxlbih0bXBidWYpOwogICAgIGlmIChwb3MgKyBsZW4gKyAyID4gd2lkdGgpIHsKICAgICAgICAgaWYgKCFzbm1wX2NzdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLCAiXG4gICAgICIpKQpAQCAtNTE1Nyw3ICs1MzU1LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogU2VhcmNoIGZvciB0aGUgYXBwcm9wcmlhdGUgY2hpbGQgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisgICAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkgewogICAgICAgICAgICAgc3ViaWQgPSBzdHJ0b3VsKGNwLCAmZWNwLCAwKTsKICAgICAgICAgICAgIGlmICgqZWNwKQogICAgICAgICAgICAgICAgIGdvdG8gYmFkX2lkOwpAQCAtNTIxNCw3ICs1NDEyLDcgQEAKICAgICAgICAgICAgIGNwMiA9IHN0cmNocihjcCwgJy4nKTsKICAgICAgICAgICAgIGlmIChjcDIpCiAgICAgICAgICAgICAgICAgKmNwMisrID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKyAgICAgICAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkgewogICAgICAgICAgICAgICAgIHN1YmlkID0gc3RydG91bChjcCwgJmVjcCwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKCplY3ApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkX2lkOwpAQCAtNTc4Niw3ICs1OTg0LDcgQEAKICAgICB3aGlsZSAoMSkgewogICAgICAgICByZWdpc3RlciBzdHJ1Y3QgdHJlZSAqbnRwOwogCi0gICAgICAgIHRwID0gMDsKKyAgICAgICAgdHAgPSBOVUxMOwogICAgICAgICBmb3IgKG50cCA9IHRyZWUtPmNoaWxkX2xpc3Q7IG50cDsgbnRwID0gbnRwLT5uZXh0X3BlZXIpIHsKICAgICAgICAgICAgIGlmIChudHAtPnJlcG9ydGVkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTgzOSw3ICs2MDM3LDYgQEAKIAogLyoqCiAgKiBDb252ZXJ0cyB0aW1ldGlja3MgdG8gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgc3RyaW5nLgotICogQ01VIGNvbXBhdGlibGUgZG9lcyBub3Qgc2hvdyBjZW50aXNlY29uZHMuCiAgKgogICogQHBhcmFtIHRpbWV0aWNrcyAgICBUaGUgdGltZXRpY2tzIHRvIGNvbnZlcnQuCiAgKiBAcGFyYW0gYnVmICAgICAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bywgaGFzIHRvIGJlIGF0IApAQCAtNTg1OSwxMyArNjA1Niw2IEBACiB1cHRpbWVfc3RyaW5nX24odV9sb25nIHRpbWV0aWNrcywgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQogewogICAgIHVwdGltZVN0cmluZyh0aW1ldGlja3MsIGJ1ZiwgYnVmbGVuKTsKLSNpZmRlZiBDTVVfQ09NUEFUSUJMRQotICAgIHsKLSAgICBjaGFyICpjcCA9IHN0cnJjaHIoYnVmLCAnLicpOwotICAgIGlmIChjcCkKLSAgICAgICAgKmNwID0gJ1wwJzsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gYnVmOwogfQogCkBAIC02MDk5LDcgKzYyODksNyBAQAogCSAgICBpZiAoJyonID09ICpoKSB7CiAJCXBoLnJlcGVhdCA9IDE7CiAJCXN0YXRlID0gSElOVF8yXzM7Ci0JICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgqaCkpIHsKKwkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqaCkpKSB7CiAJCXBhcnNlX2hpbnRzX2xlbmd0aF9hZGRfZGlnaXQoJnBoLCAqaCk7CiAJCXN0YXRlID0gSElOVF8yXzM7CiAJICAgIH0gZWxzZSB7CkBAIC02MTA4LDcgKzYyOTgsNyBAQAogCSAgICBicmVhazsKIAogCWNhc2UgSElOVF8yXzM6Ci0JICAgIGlmIChpc2RpZ2l0KCpoKSkgeworCSAgICBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmgpKSkgewogCQlwYXJzZV9oaW50c19sZW5ndGhfYWRkX2RpZ2l0KCZwaCwgKmgpOwogCQkvKiBzdGF0ZSA9IEhJTlRfMl8zICovCiAJICAgIH0gZWxzZSBpZiAoJ3gnID09ICpoIHx8ICdkJyA9PSAqaCB8fCAnbycgPT0gKmggfHwgJ2EnID09ICpoKSB7CkBAIC02MTI2LDcgKzYzMTYsNyBAQAogCQkKIAkJcGgucmVwZWF0ID0gMTsKIAkJc3RhdGUgPSBISU5UXzJfMzsKLQkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCpoKSkgeworCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpoKSkpIHsKIAkJcmV0dmFsID0gcGFyc2VfaGludHNfcGFyc2UoJnBoLCAmdik7CiAJCXBhcnNlX2hpbnRzX3Jlc2V0KCZwaCk7CiAJCQpAQCAtNjE0NSw3ICs2MzM1LDcgQEAKIAkJCiAJCXBoLnJlcGVhdCA9IDE7CiAJCXN0YXRlID0gSElOVF8yXzM7Ci0JICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgqaCkpIHsKKwkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqaCkpKSB7CiAJCXJldHZhbCA9IHBhcnNlX2hpbnRzX3BhcnNlKCZwaCwgJnYpOwogCQlwYXJzZV9oaW50c19yZXNldCgmcGgpOwogCQkKQEAgLTYyMTgsNiArNjQwOCw3IEBACiAKICNlbmRpZiAvKiB0ZXN0X2Rpc3BsYXlfaGludCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1RPX0FTTl9UWVBFCiB1X2NoYXIKIG1pYl90b19hc25fdHlwZShpbnQgbWliX3R5cGUpCiB7CkBAIC02MjY3LDYgKzY0NTgsNyBAQAogICAgIH0KICAgICByZXR1cm4gLTE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfVE9fQVNOX1RZUEUgKi8KIAogLyoqCiAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBpdHMgT0lEIGZvcm0uCkBAIC02Mjc4LDYgKzY0NzAsNyBAQAogICoKICAqIEByZXR1cm4gMCBvbiBTdWNlc3MsIDEgb24gZmFpbHVyZS4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TVFJJTkdfQ09OVkVSU0lPTlMKIGludAogbmV0c25tcF9zdHIyb2lkKGNvbnN0IGNoYXIgKlMsIG9pZCAqIE8sIGludCBMKQogewpAQCAtNjM1Nyw3ICs2NTUwLDEwIEBACiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TVFJJTkdfQ09OVkVSU0lPTlMgKi8KIAorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NOUFJJTlQKIGludAogc25wcmludF9ieV90eXBlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLApAQCAtNjYzNSw1ICs2ODMxLDYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogfQogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU05QUklOVCAqLwogLyoqIEB9ICovCiAKZGlmZiAtLWdpdCBhL3NubXBsaWIvb2lkX3N0YXNoLmMgYi9zbm1wbGliL29pZF9zdGFzaC5jCmluZGV4IGEwOWFkNTMuLjhhNzk4OTcgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvb2lkX3N0YXNoLmMKKysrIGIvc25tcGxpYi9vaWRfc3Rhc2guYwpAQCAtNSw4ICs1LDE1IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfYWxsLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaCwgb2lkX3N0YXNoX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfbm9fZnJlZSwgb2lkX3N0YXNoX2FsbCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSAorCiAvKiogQGRlZmdyb3VwIG9pZF9zdGFzaCBTdG9yZSBhbmQgcmV0cmlldmUgZGF0YSByZWZlcmVuY2VkIGJ5IGFuIE9JRC4KICAgICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgd2F5IG9mIHN0b3JpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgogICAgIE9JRC4gIEl0IHN0b3JlcyBhIGJ1bmNoIG9mIGRhdGEgcG9pbnRlcnMgd2l0aGluIGEgbWVtb3J5IHRyZWUgdGhhdApAQCAtNjgsNiArNzUsOCBAQAogICAgIHJldHVybiBuZXRzbm1wX29pZF9zdGFzaF9jcmVhdGVfc2l6ZWRfbm9kZShPSURfU1RBU0hfQ0hJTERSRU5fU0laRSk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfYWRkX2RhdGEsIG9pZF9zdGFzaF9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0FERF9EQVRBCiAvKiogYWRkcyBkYXRhIHRvIHRoZSBzdGFzaCBhdCBhIGdpdmVuIG9pZC4KIAogICogQHBhcmFtIHJvb3QgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggdHJlZQpAQCAtMTQ0LDYgKzE1Myw3IEBACiAgICAgdG1wcC0+dGhlZGF0YSA9IG15ZGF0YTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0FERF9EQVRBICovCiAKIC8qKiByZXR1cm5zIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuCiAgKiBAcGFyYW0gcm9vdCB0aGUgdG9wIG9mIHRoZSBzdGFzaCB0cmVlCkBAIC0xODcsNiArMTk3LDggQEAKICAqIEBwYXJhbSBsb29rdXAgdGhlIG9pZCB0byBsb29rIHVwIGEgbm9kZSBmb3IuCiAgKiBAcGFyYW0gbG9va3VwX2xlbiB0aGUgbGVuZ3RoIG9mIHRoZSBsb29rdXAgb2lkCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfaXRlcmF0ZSwgb2lkX3N0YXNoX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfSVRFUkFURQogbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqCiBuZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGUobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKQpAQCAtMjY4LDcgKzI4MCwxMCBAQAogICAgIC8qIGZlbGwgb2ZmIHRoZSB0b3AgKi8KICAgICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9JVEVSQVRFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfZ2V0X2RhdGEsIG9pZF9zdGFzaF9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0dFVF9EQVRBCiAvKiogcmV0dXJucyBhIGRhdGEgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuCiAKICAgICBUaGlzIGlzIGVxdWl2ZWxlbnQgdG8gbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X25vZGUsIGJ1dCByZXR1cm5zIG9ubHkKQEAgLTI4OCw3ICszMDMsMTAgQEAKICAgICAgICAgcmV0dXJuIHJldC0+dGhlZGF0YTsKICAgICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9HRVRfREFUQSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX3N0b3JlX2FsbCwgb2lkX3N0YXNoX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfU1RPUkVfQUxMCiAvKiogYSB3cmFwcGVyIGFyb3VuZCBuZXRzbm1wX29pZF9zdGFzaF9zdG9yZSBmb3IgdXNlIHdpdGggYSBzbm1wX2FsYXJtLgogICogd2hlbiBjYWxsaW5nIHNubXBfYWxhcm0sIHlvdSBjYW4gbGlzdCB0aGlzIGFzIGEgY2FsbGJhY2suICBUaGUKICAqIGNsaWVudGFyZyBzaG91bGQgYmUgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9vaWRfc3Rhc2hfc2F2ZV9pbmZvCkBAIC0zMTQsNiArMzMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRiYXNlLDApOwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX1NUT1JFX0FMTCAqLwogCiAvKiogc3RvcmVzIGRhdGEgaW4gYSBzdGFyc2ggdHJlZSB0byBwZXJpc3RlbnQgc3RvcmFnZS4KIApAQCAtMzg0LDcgKzQwMyw3IEBACiAgICAgZm9yIChpID0gMDsgaSA8IHJvb3QtPmNoaWxkcmVuX3NpemU7IGkrKykgewogICAgICAgICBpZiAocm9vdC0+Y2hpbGRyZW5baV0pIHsKICAgICAgICAgICAgIGZvciAodG1wcCA9IHJvb3QtPmNoaWxkcmVuW2ldOyB0bXBwOyB0bXBwID0gdG1wcC0+bmV4dF9zaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyVsZEAlZDogJXNcbiIsIHByZWZpeCwgdG1wcC0+dmFsdWUsIGksCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyUiIE5FVFNOTVBfUFJJbyAiZEAlZDogJXNcbiIsIHByZWZpeCwgdG1wcC0+dmFsdWUsIGksCiAgICAgICAgICAgICAgICAgICAgICAgICh0bXBwLT50aGVkYXRhKSA/ICJEQVRBIiA6ICIiKTsKICAgICAgICAgICAgICAgICBvaWRfc3Rhc2hfZHVtcCh0bXBwLCBteXByZWZpeCk7CiAgICAgICAgICAgICB9CkBAIC00MjcsMTAgKzQ0NiwxNiBAQAogICAgICpyb290ID0gTlVMTDsKIH0KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0ggKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQob2lkX3N0YXNoKTsKKyNlbmRpZi8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfTk9fRlJFRQogdm9pZAogbmV0c25tcF9vaWRfc3Rhc2hfbm9fZnJlZSh2b2lkICpib2d1cykKIHsKICAgICAvKiBub29wICovCiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfTk9fRlJFRSAqLwogCiAvKiogQH0gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbmRpci5jIGIvc25tcGxpYi9vcGVuZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiOGUwNgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbmRpci5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogb3BlbmRpcigpIHJlcGxhY2VtZW50IGZvciBNU1ZDLgorICovCisKKyNkZWZpbmUgV0lOMzJJT19JU19TVERJTworI2RlZmluZSBQQVRITEVOCTEwMjQKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGNoYXIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKworLyoKKyAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gcmVhZCBhbGwgdGhlIGRpcmVjdG9yeSBuYW1lcyBpbnRvIGEgc3RyaW5nIHRhYmxlCisgKiAqIChzZXBhcmF0ZWQgYnkgbnVsbHMpIGFuZCB3aGVuIG9uZSBvZiB0aGUgb3RoZXIgZGlyIGZ1bmN0aW9ucyBpcyBjYWxsZWQKKyAqICogcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KKyAqLworRElSICAgICAgICAgICAgKgorb3BlbmRpcihjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBESVIgICAgICAgICAgICAqcDsKKyAgICBsb25nICAgICAgICAgICAgbGVuOworICAgIGxvbmcgICAgICAgICAgICBpZHg7CisgICAgY2hhciAgICAgICAgICAgIHNjYW5uYW1lc3BjW1BBVEhMRU5dOworICAgIGNoYXIgICAgICAgICAgICpzY2FubmFtZSA9IHNjYW5uYW1lc3BjOworICAgIHN0cnVjdCBzdGF0ICAgICBzYnVmOworICAgIFdJTjMyX0ZJTkRfREFUQSBGaW5kRGF0YTsKKyAgICBIQU5ETEUgICAgICAgICAgZmg7CisKKyAgICAvKgorICAgICAqIGNoZWNrIHRvIHNlZSBpZiBmaWxlbmFtZSBpcyBhIGRpcmVjdG9yeSAKKyAgICAgKi8KKyAgICBpZiAoKHN0YXQoZmlsZW5hbWUsICZzYnVmKSA8IDApIHx8ICgoc2J1Zi5zdF9tb2RlICYgU19JRkRJUikgPT0gMCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZXQgdGhlIGZpbGUgc3lzdGVtIGNoYXJhY3RlcmlzdGljcyAKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlmKEdldEZ1bGxQYXRoTmFtZShmaWxlbmFtZSwgU05NUF9NQVhQQVRILCByb290LCAmZHVtbXkpKSB7CisgICAgICogKiAgICBpZihkdW1teSA9IHN0cmNocihyb290LCAnXFwnKSkKKyAgICAgKiAqICAgICAgICAqKytkdW1teSA9ICdcMCc7CisgICAgICogKiAgICBpZihHZXRWb2x1bWVJbmZvcm1hdGlvbihyb290LCB2b2xuYW1lLCBTTk1QX01BWFBBVEgsICZzZXJpYWwsCisgICAgICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4bmFtZSwgJmZsYWdzLCAwLCAwKSkgeworICAgICAqICogICAgICAgIGRvd25jYXNlID0gIShmbGFncyAmIEZTX0NBU0VfSVNfUFJFU0VSVkVEKTsKKyAgICAgKiAqICAgIH0KKyAgICAgKiAqICB9CisgICAgICogKiAgZWxzZSB7CisgICAgICogKiAgICBkb3duY2FzZSA9IFRSVUU7CisgICAgICogKiAgfQorICAgICAqLworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIHNlYXJjaCBwYXR0ZXJuIAorICAgICAqLworICAgIHN0cmNweShzY2FubmFtZSwgZmlsZW5hbWUpOworCisgICAgaWYgKHN0cmNocigiL1xcIiwgKihzY2FubmFtZSArIHN0cmxlbihzY2FubmFtZSkgLSAxKSkgPT0gTlVMTCkKKyAgICAgICAgc3RyY2F0KHNjYW5uYW1lLCAiLyoiKTsKKyAgICBlbHNlCisgICAgICAgIHN0cmNhdChzY2FubmFtZSwgIioiKTsKKworICAgIC8qCisgICAgICogZG8gdGhlIEZpbmRGaXJzdEZpbGUgY2FsbCAKKyAgICAgKi8KKyAgICBmaCA9IEZpbmRGaXJzdEZpbGUoc2Nhbm5hbWUsICZGaW5kRGF0YSk7CisgICAgaWYgKGZoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogR2V0IHVzIGEgRElSIHN0cnVjdHVyZSAKKyAgICAgKi8KKyAgICBwID0gKERJUiAqKSBtYWxsb2Moc2l6ZW9mKERJUikpOworICAgIC8qCisgICAgICogTmV3eigxMzAzLCBwLCAxLCBESVIpOyAKKyAgICAgKi8KKyAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogbm93IGFsbG9jYXRlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgdGFibGUgZm9yCisgICAgICogKiB0aGUgZmlsZW5hbWVzIHRoYXQgd2UgZmluZC4KKyAgICAgKi8KKyAgICBpZHggPSBzdHJsZW4oRmluZERhdGEuY0ZpbGVOYW1lKSArIDE7CisgICAgcC0+c3RhcnQgPSAoY2hhciAqKSBtYWxsb2MoaWR4KTsKKyAgICAvKgorICAgICAqIE5ldygxMzA0LCBwLT5zdGFydCwgaWR4LCBjaGFyKTsKKyAgICAgKi8KKyAgICBpZiAocC0+c3RhcnQgPT0gTlVMTCkgeworICAgICAgICBmcmVlKHApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3RyY3B5KHAtPnN0YXJ0LCBGaW5kRGF0YS5jRmlsZU5hbWUpOworICAgIC8qCisgICAgICogaWYoZG93bmNhc2UpCisgICAgICogKiAgICBzdHJsd3IocC0+c3RhcnQpOworICAgICAqLworICAgIHAtPm5maWxlcyA9IDA7CisKKyAgICAvKgorICAgICAqIGxvb3AgZmluZGluZyBhbGwgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHdpbGRjYXJkCisgICAgICogKiAod2hpY2ggc2hvdWxkIGJlIGFsbCBvZiB0aGVtIGluIHRoaXMgZGlyZWN0b3J5ISkuCisgICAgICogKiB0aGUgdmFyaWFibGUgaWR4IHNob3VsZCBwb2ludCBvbmUgcGFzdCB0aGUgbnVsbCB0ZXJtaW5hdG9yCisgICAgICogKiBvZiB0aGUgcHJldmlvdXMgc3RyaW5nIGZvdW5kLgorICAgICAqLworICAgIHdoaWxlIChGaW5kTmV4dEZpbGUoZmgsICZGaW5kRGF0YSkpIHsKKyAgICAgICAgbGVuID0gc3RybGVuKEZpbmREYXRhLmNGaWxlTmFtZSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGJ1bXAgdGhlIHN0cmluZyB0YWJsZSBzaXplIGJ5IGVub3VnaCBmb3IgdGhlCisgICAgICAgICAqICogbmV3IG5hbWUgYW5kIGl0J3MgbnVsbCB0ZXJtaW5hdG9yCisgICAgICAgICAqLworICAgICAgICBwLT5zdGFydCA9IChjaGFyICopIHJlYWxsb2MoKHZvaWQgKikgcC0+c3RhcnQsIGlkeCArIGxlbiArIDEpOworICAgICAgICAvKgorICAgICAgICAgKiBSZW5ldyhwLT5zdGFydCwgaWR4K2xlbisxLCBjaGFyKTsKKyAgICAgICAgICovCisgICAgICAgIGlmIChwLT5zdGFydCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RyY3B5KCZwLT5zdGFydFtpZHhdLCBGaW5kRGF0YS5jRmlsZU5hbWUpOworICAgICAgICAvKgorICAgICAgICAgKiBpZiAoZG93bmNhc2UpIAorICAgICAgICAgKiAqICAgICAgICBzdHJsd3IoJnAtPnN0YXJ0W2lkeF0pOworICAgICAgICAgKi8KKyAgICAgICAgcC0+bmZpbGVzKys7CisgICAgICAgIGlkeCArPSBsZW4gKyAxOworICAgIH0KKyAgICBGaW5kQ2xvc2UoZmgpOworICAgIHAtPnNpemUgPSBpZHg7CisgICAgcC0+Y3VyciA9IHAtPnN0YXJ0OworICAgIHJldHVybiBwOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL09QRU5TU0wtTElDRU5TRSBiL3NubXBsaWIvb3BlbnNzbC9PUEVOU1NMLUxJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjNGFkYwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9PUEVOU1NMLUxJQ0VOU0UKQEAgLTAsMCArMSwxMjcgQEAKKworICBMSUNFTlNFIElTU1VFUworICA9PT09PT09PT09PT09PQorCisgIFRoZSBPcGVuU1NMIHRvb2xraXQgc3RheXMgdW5kZXIgYSBkdWFsIGxpY2Vuc2UsIGkuZS4gYm90aCB0aGUgY29uZGl0aW9ucyBvZgorICB0aGUgT3BlblNTTCBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgU1NMZWF5IGxpY2Vuc2UgYXBwbHkgdG8gdGhlIHRvb2xraXQuCisgIFNlZSBiZWxvdyBmb3IgdGhlIGFjdHVhbCBsaWNlbnNlIHRleHRzLiBBY3R1YWxseSBib3RoIGxpY2Vuc2VzIGFyZSBCU0Qtc3R5bGUKKyAgT3BlbiBTb3VyY2UgbGljZW5zZXMuIEluIGNhc2Ugb2YgYW55IGxpY2Vuc2UgaXNzdWVzIHJlbGF0ZWQgdG8gT3BlblNTTAorICBwbGVhc2UgY29udGFjdCBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisKKyAgT3BlblNTTCBMaWNlbnNlCisgIC0tLS0tLS0tLS0tLS0tLQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvUkVBRE1FIGIvc25tcGxpYi9vcGVuc3NsL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQwODdiCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL1JFQURNRQpAQCAtMCwwICsxLDE5IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtb2RpZmllZCBjcnlwdG8gY29kZSBmcm9tIE9wZW5TU0wKKzEuMC4wLmJldGE1LiAgUGxlYXNlIHNlZSB0aGUgT3BlblNTTCBsaWNlbnNlIGZyb20gdGhhdCByZWxlYXNlIGluIHRoZQorT1BFTlNTTC1MSUNFTlNFIHdoaWNoIHdpbGwgYXBwbHkgaWYgdGhpcyBjb2RlIGlzIHNlbGVjdGVkLgorCitOZXQtU05NUCBtYXkgYmUgY29tcGlsZWQgd2l0aCB0aGlzIGNvZGUgdXNpbmcgdGhlCistLXdpdGgtb3BlbnNzbD1pbnRlcm5hbCBmbGFnIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgorCitOb3RlOiBJdCBpcyBnZW5lcmFsbHkgYSBiZXR0ZXIgaWRlYSB0byBsaW5rIHdpdGggdGhlIGxhdGVzdCBPcGVuU1NMCitsaWJyYXJ5IHJhdGhlciB0aGFuIHJlbHkgb24gdGhpcyBpbnRlcm5hbCBzdXBwb3J0LCBhcyB0aGUgbGF0ZXN0CitPcGVuU1NMIGNvZGUgbWF5IGNvbnRhaW4gaW1wb3J0YW50IHNlY3VyaXR5IG9yIG90aGVyIGZpeGVzIHRoYXQgbWF5Citub3QgaGF2ZSBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgc25hcHNob3QuICBTbWFsbCBkZXZpY2UgdmVuZG9ycywKK2hvd2V2ZXIsIGhhdmUgcmVxdWVzdGVkIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMCitjcnlwdG9ncmFwaHkgY29kZSBpbiBvcmRlciB0byBzaHJpbmsgdGhlaXIgbWVtb3J5IGZvb3RwcmludCBhbmQgdGhpcworZmVhdHVyZSBwcm92aWRlcyBzdWNoIHN1cHBvcnQuCisKK05vdGUgYWxzbyB0aGF0IHRoZSBuZXcgU05NUCBvdmVyIERUTFMsIFNOTVAgb3ZlciBUTFMgc3VwcG9ydCBhbHNvCithdmFpbGFibGUgaW4gTmV0LVNOTVAgNS42IGFuZCBiZXlvbmQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGludGVybmFsCit2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIHN1cHBvcnQgc2luY2UgU05NUCBvdmVyIChEKVRMUyByZXF1aXJlcyB0aGUKK2Z1bGwgVExTIHN1cHBvcnQgYXZhaWxhYmxlIGluIE9wZW5TU0wuCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5ZTVhNwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYwpAQCAtMCwwICsxLDgxIEBACisvKiBjcnlwdG8vYWVzL2Flc19jZmIuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oPgorI2luY2x1ZGUgIm9wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oIgorCisvKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBjZmIgbW9kZSBpcyBiZWluZworICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCisgKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOworICovCisKK3ZvaWQgQUVTX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKSB7CisKKwlDUllQVE9fY2ZiMTI4X2VuY3J5cHQoaW4sb3V0LGxlbmd0aCxrZXksaXZlYyxudW0sZW5jLChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKK30KKworLyogTi5CLiBUaGlzIGV4cGVjdHMgdGhlIGlucHV0IHRvIGJlIHBhY2tlZCwgTVMgYml0IGZpcnN0ICovCit2b2lkIEFFU19jZmIxX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkgICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYykKKyAgICB7CisgICAgQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQoaW4sb3V0LGxlbmd0aCxrZXksaXZlYyxudW0sZW5jLChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKyAgICB9CisKK3ZvaWQgQUVTX2NmYjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKQorICAgIHsKKyAgICBDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLG51bSxlbmMsKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworICAgIH0KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMDFiOQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMKQEAgLTAsMCArMSwxMzU4IEBACisvKiBjcnlwdG8vYWVzL2Flc19jb3JlLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KKy8qKgorICogcmlqbmRhZWwtYWxnLWZzdC5jCisgKgorICogQHZlcnNpb24gMy4wIChEZWNlbWJlciAyMDAwKQorICoKKyAqIE9wdGltaXNlZCBBTlNJIEMgY29kZSBmb3IgdGhlIFJpam5kYWVsIGNpcGhlciAobm93IEFFUykKKyAqCisgKiBAYXV0aG9yIFZpbmNlbnQgUmlqbWVuIDx2aW5jZW50LnJpam1lbkBlc2F0Lmt1bGV1dmVuLmFjLmJlPgorICogQGF1dGhvciBBbnRvb24gQm9zc2VsYWVycyA8YW50b29uLmJvc3NlbGFlcnNAZXNhdC5rdWxldXZlbi5hYy5iZT4KKyAqIEBhdXRob3IgUGF1bG8gQmFycmV0byA8cGF1bG8uYmFycmV0b0B0ZXJyYS5jb20uYnI+CisgKgorICogVGhpcyBjb2RlIGlzIGhlcmVieSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyAnJ0FTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogTm90ZTogcmV3cml0dGVuIGEgbGl0dGxlIGJpdCB0byBwcm92aWRlIGVycm9yIGNvbnRyb2wgYW5kIGFuIE9wZW5TU0wtCisgICBjb21wYXRpYmxlIEFQSSAqLworCisjaWZuZGVmIEFFU19ERUJVRworIyBpZm5kZWYgTkRFQlVHCisjICBkZWZpbmUgTkRFQlVHCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaD4KKyNpbmNsdWRlICJvcGVuc3NsX2Flc19sb2NhbC5oIgorCisjaWZuZGVmIEFFU19BU00KKy8qCitUZTBbeF0gPSBTIFt4XS5bMDIsIDAxLCAwMSwgMDNdOworVGUxW3hdID0gUyBbeF0uWzAzLCAwMiwgMDEsIDAxXTsKK1RlMlt4XSA9IFMgW3hdLlswMSwgMDMsIDAyLCAwMV07CitUZTNbeF0gPSBTIFt4XS5bMDEsIDAxLCAwMywgMDJdOworCitUZDBbeF0gPSBTaVt4XS5bMGUsIDA5LCAwZCwgMGJdOworVGQxW3hdID0gU2lbeF0uWzBiLCAwZSwgMDksIDBkXTsKK1RkMlt4XSA9IFNpW3hdLlswZCwgMGIsIDBlLCAwOV07CitUZDNbeF0gPSBTaVt4XS5bMDksIDBkLCAwYiwgMGVdOworVGQ0W3hdID0gU2lbeF0uWzAxXTsKKyovCisKK3N0YXRpYyBjb25zdCB1MzIgVGUwWzI1Nl0gPSB7CisgICAgMHhjNjYzNjNhNVUsIDB4Zjg3YzdjODRVLCAweGVlNzc3Nzk5VSwgMHhmNjdiN2I4ZFUsCisgICAgMHhmZmYyZjIwZFUsIDB4ZDY2YjZiYmRVLCAweGRlNmY2ZmIxVSwgMHg5MWM1YzU1NFUsCisgICAgMHg2MDMwMzA1MFUsIDB4MDIwMTAxMDNVLCAweGNlNjc2N2E5VSwgMHg1NjJiMmI3ZFUsCisgICAgMHhlN2ZlZmUxOVUsIDB4YjVkN2Q3NjJVLCAweDRkYWJhYmU2VSwgMHhlYzc2NzY5YVUsCisgICAgMHg4ZmNhY2E0NVUsIDB4MWY4MjgyOWRVLCAweDg5YzljOTQwVSwgMHhmYTdkN2Q4N1UsCisgICAgMHhlZmZhZmExNVUsIDB4YjI1OTU5ZWJVLCAweDhlNDc0N2M5VSwgMHhmYmYwZjAwYlUsCisgICAgMHg0MWFkYWRlY1UsIDB4YjNkNGQ0NjdVLCAweDVmYTJhMmZkVSwgMHg0NWFmYWZlYVUsCisgICAgMHgyMzljOWNiZlUsIDB4NTNhNGE0ZjdVLCAweGU0NzI3Mjk2VSwgMHg5YmMwYzA1YlUsCisgICAgMHg3NWI3YjdjMlUsIDB4ZTFmZGZkMWNVLCAweDNkOTM5M2FlVSwgMHg0YzI2MjY2YVUsCisgICAgMHg2YzM2MzY1YVUsIDB4N2UzZjNmNDFVLCAweGY1ZjdmNzAyVSwgMHg4M2NjY2M0ZlUsCisgICAgMHg2ODM0MzQ1Y1UsIDB4NTFhNWE1ZjRVLCAweGQxZTVlNTM0VSwgMHhmOWYxZjEwOFUsCisgICAgMHhlMjcxNzE5M1UsIDB4YWJkOGQ4NzNVLCAweDYyMzEzMTUzVSwgMHgyYTE1MTUzZlUsCisgICAgMHgwODA0MDQwY1UsIDB4OTVjN2M3NTJVLCAweDQ2MjMyMzY1VSwgMHg5ZGMzYzM1ZVUsCisgICAgMHgzMDE4MTgyOFUsIDB4Mzc5Njk2YTFVLCAweDBhMDUwNTBmVSwgMHgyZjlhOWFiNVUsCisgICAgMHgwZTA3MDcwOVUsIDB4MjQxMjEyMzZVLCAweDFiODA4MDliVSwgMHhkZmUyZTIzZFUsCisgICAgMHhjZGViZWIyNlUsIDB4NGUyNzI3NjlVLCAweDdmYjJiMmNkVSwgMHhlYTc1NzU5ZlUsCisgICAgMHgxMjA5MDkxYlUsIDB4MWQ4MzgzOWVVLCAweDU4MmMyYzc0VSwgMHgzNDFhMWEyZVUsCisgICAgMHgzNjFiMWIyZFUsIDB4ZGM2ZTZlYjJVLCAweGI0NWE1YWVlVSwgMHg1YmEwYTBmYlUsCisgICAgMHhhNDUyNTJmNlUsIDB4NzYzYjNiNGRVLCAweGI3ZDZkNjYxVSwgMHg3ZGIzYjNjZVUsCisgICAgMHg1MjI5Mjk3YlUsIDB4ZGRlM2UzM2VVLCAweDVlMmYyZjcxVSwgMHgxMzg0ODQ5N1UsCisgICAgMHhhNjUzNTNmNVUsIDB4YjlkMWQxNjhVLCAweDAwMDAwMDAwVSwgMHhjMWVkZWQyY1UsCisgICAgMHg0MDIwMjA2MFUsIDB4ZTNmY2ZjMWZVLCAweDc5YjFiMWM4VSwgMHhiNjViNWJlZFUsCisgICAgMHhkNDZhNmFiZVUsIDB4OGRjYmNiNDZVLCAweDY3YmViZWQ5VSwgMHg3MjM5Mzk0YlUsCisgICAgMHg5NDRhNGFkZVUsIDB4OTg0YzRjZDRVLCAweGIwNTg1OGU4VSwgMHg4NWNmY2Y0YVUsCisgICAgMHhiYmQwZDA2YlUsIDB4YzVlZmVmMmFVLCAweDRmYWFhYWU1VSwgMHhlZGZiZmIxNlUsCisgICAgMHg4NjQzNDNjNVUsIDB4OWE0ZDRkZDdVLCAweDY2MzMzMzU1VSwgMHgxMTg1ODU5NFUsCisgICAgMHg4YTQ1NDVjZlUsIDB4ZTlmOWY5MTBVLCAweDA0MDIwMjA2VSwgMHhmZTdmN2Y4MVUsCisgICAgMHhhMDUwNTBmMFUsIDB4NzgzYzNjNDRVLCAweDI1OWY5ZmJhVSwgMHg0YmE4YThlM1UsCisgICAgMHhhMjUxNTFmM1UsIDB4NWRhM2EzZmVVLCAweDgwNDA0MGMwVSwgMHgwNThmOGY4YVUsCisgICAgMHgzZjkyOTJhZFUsIDB4MjE5ZDlkYmNVLCAweDcwMzgzODQ4VSwgMHhmMWY1ZjUwNFUsCisgICAgMHg2M2JjYmNkZlUsIDB4NzdiNmI2YzFVLCAweGFmZGFkYTc1VSwgMHg0MjIxMjE2M1UsCisgICAgMHgyMDEwMTAzMFUsIDB4ZTVmZmZmMWFVLCAweGZkZjNmMzBlVSwgMHhiZmQyZDI2ZFUsCisgICAgMHg4MWNkY2Q0Y1UsIDB4MTgwYzBjMTRVLCAweDI2MTMxMzM1VSwgMHhjM2VjZWMyZlUsCisgICAgMHhiZTVmNWZlMVUsIDB4MzU5Nzk3YTJVLCAweDg4NDQ0NGNjVSwgMHgyZTE3MTczOVUsCisgICAgMHg5M2M0YzQ1N1UsIDB4NTVhN2E3ZjJVLCAweGZjN2U3ZTgyVSwgMHg3YTNkM2Q0N1UsCisgICAgMHhjODY0NjRhY1UsIDB4YmE1ZDVkZTdVLCAweDMyMTkxOTJiVSwgMHhlNjczNzM5NVUsCisgICAgMHhjMDYwNjBhMFUsIDB4MTk4MTgxOThVLCAweDllNGY0ZmQxVSwgMHhhM2RjZGM3ZlUsCisgICAgMHg0NDIyMjI2NlUsIDB4NTQyYTJhN2VVLCAweDNiOTA5MGFiVSwgMHgwYjg4ODg4M1UsCisgICAgMHg4YzQ2NDZjYVUsIDB4YzdlZWVlMjlVLCAweDZiYjhiOGQzVSwgMHgyODE0MTQzY1UsCisgICAgMHhhN2RlZGU3OVUsIDB4YmM1ZTVlZTJVLCAweDE2MGIwYjFkVSwgMHhhZGRiZGI3NlUsCisgICAgMHhkYmUwZTAzYlUsIDB4NjQzMjMyNTZVLCAweDc0M2EzYTRlVSwgMHgxNDBhMGExZVUsCisgICAgMHg5MjQ5NDlkYlUsIDB4MGMwNjA2MGFVLCAweDQ4MjQyNDZjVSwgMHhiODVjNWNlNFUsCisgICAgMHg5ZmMyYzI1ZFUsIDB4YmRkM2QzNmVVLCAweDQzYWNhY2VmVSwgMHhjNDYyNjJhNlUsCisgICAgMHgzOTkxOTFhOFUsIDB4MzE5NTk1YTRVLCAweGQzZTRlNDM3VSwgMHhmMjc5Nzk4YlUsCisgICAgMHhkNWU3ZTczMlUsIDB4OGJjOGM4NDNVLCAweDZlMzczNzU5VSwgMHhkYTZkNmRiN1UsCisgICAgMHgwMThkOGQ4Y1UsIDB4YjFkNWQ1NjRVLCAweDljNGU0ZWQyVSwgMHg0OWE5YTllMFUsCisgICAgMHhkODZjNmNiNFUsIDB4YWM1NjU2ZmFVLCAweGYzZjRmNDA3VSwgMHhjZmVhZWEyNVUsCisgICAgMHhjYTY1NjVhZlUsIDB4ZjQ3YTdhOGVVLCAweDQ3YWVhZWU5VSwgMHgxMDA4MDgxOFUsCisgICAgMHg2ZmJhYmFkNVUsIDB4ZjA3ODc4ODhVLCAweDRhMjUyNTZmVSwgMHg1YzJlMmU3MlUsCisgICAgMHgzODFjMWMyNFUsIDB4NTdhNmE2ZjFVLCAweDczYjRiNGM3VSwgMHg5N2M2YzY1MVUsCisgICAgMHhjYmU4ZTgyM1UsIDB4YTFkZGRkN2NVLCAweGU4NzQ3NDljVSwgMHgzZTFmMWYyMVUsCisgICAgMHg5NjRiNGJkZFUsIDB4NjFiZGJkZGNVLCAweDBkOGI4Yjg2VSwgMHgwZjhhOGE4NVUsCisgICAgMHhlMDcwNzA5MFUsIDB4N2MzZTNlNDJVLCAweDcxYjViNWM0VSwgMHhjYzY2NjZhYVUsCisgICAgMHg5MDQ4NDhkOFUsIDB4MDYwMzAzMDVVLCAweGY3ZjZmNjAxVSwgMHgxYzBlMGUxMlUsCisgICAgMHhjMjYxNjFhM1UsIDB4NmEzNTM1NWZVLCAweGFlNTc1N2Y5VSwgMHg2OWI5YjlkMFUsCisgICAgMHgxNzg2ODY5MVUsIDB4OTljMWMxNThVLCAweDNhMWQxZDI3VSwgMHgyNzllOWViOVUsCisgICAgMHhkOWUxZTEzOFUsIDB4ZWJmOGY4MTNVLCAweDJiOTg5OGIzVSwgMHgyMjExMTEzM1UsCisgICAgMHhkMjY5NjliYlUsIDB4YTlkOWQ5NzBVLCAweDA3OGU4ZTg5VSwgMHgzMzk0OTRhN1UsCisgICAgMHgyZDliOWJiNlUsIDB4M2MxZTFlMjJVLCAweDE1ODc4NzkyVSwgMHhjOWU5ZTkyMFUsCisgICAgMHg4N2NlY2U0OVUsIDB4YWE1NTU1ZmZVLCAweDUwMjgyODc4VSwgMHhhNWRmZGY3YVUsCisgICAgMHgwMzhjOGM4ZlUsIDB4NTlhMWExZjhVLCAweDA5ODk4OTgwVSwgMHgxYTBkMGQxN1UsCisgICAgMHg2NWJmYmZkYVUsIDB4ZDdlNmU2MzFVLCAweDg0NDI0MmM2VSwgMHhkMDY4NjhiOFUsCisgICAgMHg4MjQxNDFjM1UsIDB4Mjk5OTk5YjBVLCAweDVhMmQyZDc3VSwgMHgxZTBmMGYxMVUsCisgICAgMHg3YmIwYjBjYlUsIDB4YTg1NDU0ZmNVLCAweDZkYmJiYmQ2VSwgMHgyYzE2MTYzYVUsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZTFbMjU2XSA9IHsKKyAgICAweGE1YzY2MzYzVSwgMHg4NGY4N2M3Y1UsIDB4OTllZTc3NzdVLCAweDhkZjY3YjdiVSwKKyAgICAweDBkZmZmMmYyVSwgMHhiZGQ2NmI2YlUsIDB4YjFkZTZmNmZVLCAweDU0OTFjNWM1VSwKKyAgICAweDUwNjAzMDMwVSwgMHgwMzAyMDEwMVUsIDB4YTljZTY3NjdVLCAweDdkNTYyYjJiVSwKKyAgICAweDE5ZTdmZWZlVSwgMHg2MmI1ZDdkN1UsIDB4ZTY0ZGFiYWJVLCAweDlhZWM3Njc2VSwKKyAgICAweDQ1OGZjYWNhVSwgMHg5ZDFmODI4MlUsIDB4NDA4OWM5YzlVLCAweDg3ZmE3ZDdkVSwKKyAgICAweDE1ZWZmYWZhVSwgMHhlYmIyNTk1OVUsIDB4Yzk4ZTQ3NDdVLCAweDBiZmJmMGYwVSwKKyAgICAweGVjNDFhZGFkVSwgMHg2N2IzZDRkNFUsIDB4ZmQ1ZmEyYTJVLCAweGVhNDVhZmFmVSwKKyAgICAweGJmMjM5YzljVSwgMHhmNzUzYTRhNFUsIDB4OTZlNDcyNzJVLCAweDViOWJjMGMwVSwKKyAgICAweGMyNzViN2I3VSwgMHgxY2UxZmRmZFUsIDB4YWUzZDkzOTNVLCAweDZhNGMyNjI2VSwKKyAgICAweDVhNmMzNjM2VSwgMHg0MTdlM2YzZlUsIDB4MDJmNWY3ZjdVLCAweDRmODNjY2NjVSwKKyAgICAweDVjNjgzNDM0VSwgMHhmNDUxYTVhNVUsIDB4MzRkMWU1ZTVVLCAweDA4ZjlmMWYxVSwKKyAgICAweDkzZTI3MTcxVSwgMHg3M2FiZDhkOFUsIDB4NTM2MjMxMzFVLCAweDNmMmExNTE1VSwKKyAgICAweDBjMDgwNDA0VSwgMHg1Mjk1YzdjN1UsIDB4NjU0NjIzMjNVLCAweDVlOWRjM2MzVSwKKyAgICAweDI4MzAxODE4VSwgMHhhMTM3OTY5NlUsIDB4MGYwYTA1MDVVLCAweGI1MmY5YTlhVSwKKyAgICAweDA5MGUwNzA3VSwgMHgzNjI0MTIxMlUsIDB4OWIxYjgwODBVLCAweDNkZGZlMmUyVSwKKyAgICAweDI2Y2RlYmViVSwgMHg2OTRlMjcyN1UsIDB4Y2Q3ZmIyYjJVLCAweDlmZWE3NTc1VSwKKyAgICAweDFiMTIwOTA5VSwgMHg5ZTFkODM4M1UsIDB4NzQ1ODJjMmNVLCAweDJlMzQxYTFhVSwKKyAgICAweDJkMzYxYjFiVSwgMHhiMmRjNmU2ZVUsIDB4ZWViNDVhNWFVLCAweGZiNWJhMGEwVSwKKyAgICAweGY2YTQ1MjUyVSwgMHg0ZDc2M2IzYlUsIDB4NjFiN2Q2ZDZVLCAweGNlN2RiM2IzVSwKKyAgICAweDdiNTIyOTI5VSwgMHgzZWRkZTNlM1UsIDB4NzE1ZTJmMmZVLCAweDk3MTM4NDg0VSwKKyAgICAweGY1YTY1MzUzVSwgMHg2OGI5ZDFkMVUsIDB4MDAwMDAwMDBVLCAweDJjYzFlZGVkVSwKKyAgICAweDYwNDAyMDIwVSwgMHgxZmUzZmNmY1UsIDB4Yzg3OWIxYjFVLCAweGVkYjY1YjViVSwKKyAgICAweGJlZDQ2YTZhVSwgMHg0NjhkY2JjYlUsIDB4ZDk2N2JlYmVVLCAweDRiNzIzOTM5VSwKKyAgICAweGRlOTQ0YTRhVSwgMHhkNDk4NGM0Y1UsIDB4ZThiMDU4NThVLCAweDRhODVjZmNmVSwKKyAgICAweDZiYmJkMGQwVSwgMHgyYWM1ZWZlZlUsIDB4ZTU0ZmFhYWFVLCAweDE2ZWRmYmZiVSwKKyAgICAweGM1ODY0MzQzVSwgMHhkNzlhNGQ0ZFUsIDB4NTU2NjMzMzNVLCAweDk0MTE4NTg1VSwKKyAgICAweGNmOGE0NTQ1VSwgMHgxMGU5ZjlmOVUsIDB4MDYwNDAyMDJVLCAweDgxZmU3ZjdmVSwKKyAgICAweGYwYTA1MDUwVSwgMHg0NDc4M2MzY1UsIDB4YmEyNTlmOWZVLCAweGUzNGJhOGE4VSwKKyAgICAweGYzYTI1MTUxVSwgMHhmZTVkYTNhM1UsIDB4YzA4MDQwNDBVLCAweDhhMDU4ZjhmVSwKKyAgICAweGFkM2Y5MjkyVSwgMHhiYzIxOWQ5ZFUsIDB4NDg3MDM4MzhVLCAweDA0ZjFmNWY1VSwKKyAgICAweGRmNjNiY2JjVSwgMHhjMTc3YjZiNlUsIDB4NzVhZmRhZGFVLCAweDYzNDIyMTIxVSwKKyAgICAweDMwMjAxMDEwVSwgMHgxYWU1ZmZmZlUsIDB4MGVmZGYzZjNVLCAweDZkYmZkMmQyVSwKKyAgICAweDRjODFjZGNkVSwgMHgxNDE4MGMwY1UsIDB4MzUyNjEzMTNVLCAweDJmYzNlY2VjVSwKKyAgICAweGUxYmU1ZjVmVSwgMHhhMjM1OTc5N1UsIDB4Y2M4ODQ0NDRVLCAweDM5MmUxNzE3VSwKKyAgICAweDU3OTNjNGM0VSwgMHhmMjU1YTdhN1UsIDB4ODJmYzdlN2VVLCAweDQ3N2EzZDNkVSwKKyAgICAweGFjYzg2NDY0VSwgMHhlN2JhNWQ1ZFUsIDB4MmIzMjE5MTlVLCAweDk1ZTY3MzczVSwKKyAgICAweGEwYzA2MDYwVSwgMHg5ODE5ODE4MVUsIDB4ZDE5ZTRmNGZVLCAweDdmYTNkY2RjVSwKKyAgICAweDY2NDQyMjIyVSwgMHg3ZTU0MmEyYVUsIDB4YWIzYjkwOTBVLCAweDgzMGI4ODg4VSwKKyAgICAweGNhOGM0NjQ2VSwgMHgyOWM3ZWVlZVUsIDB4ZDM2YmI4YjhVLCAweDNjMjgxNDE0VSwKKyAgICAweDc5YTdkZWRlVSwgMHhlMmJjNWU1ZVUsIDB4MWQxNjBiMGJVLCAweDc2YWRkYmRiVSwKKyAgICAweDNiZGJlMGUwVSwgMHg1NjY0MzIzMlUsIDB4NGU3NDNhM2FVLCAweDFlMTQwYTBhVSwKKyAgICAweGRiOTI0OTQ5VSwgMHgwYTBjMDYwNlUsIDB4NmM0ODI0MjRVLCAweGU0Yjg1YzVjVSwKKyAgICAweDVkOWZjMmMyVSwgMHg2ZWJkZDNkM1UsIDB4ZWY0M2FjYWNVLCAweGE2YzQ2MjYyVSwKKyAgICAweGE4Mzk5MTkxVSwgMHhhNDMxOTU5NVUsIDB4MzdkM2U0ZTRVLCAweDhiZjI3OTc5VSwKKyAgICAweDMyZDVlN2U3VSwgMHg0MzhiYzhjOFUsIDB4NTk2ZTM3MzdVLCAweGI3ZGE2ZDZkVSwKKyAgICAweDhjMDE4ZDhkVSwgMHg2NGIxZDVkNVUsIDB4ZDI5YzRlNGVVLCAweGUwNDlhOWE5VSwKKyAgICAweGI0ZDg2YzZjVSwgMHhmYWFjNTY1NlUsIDB4MDdmM2Y0ZjRVLCAweDI1Y2ZlYWVhVSwKKyAgICAweGFmY2E2NTY1VSwgMHg4ZWY0N2E3YVUsIDB4ZTk0N2FlYWVVLCAweDE4MTAwODA4VSwKKyAgICAweGQ1NmZiYWJhVSwgMHg4OGYwNzg3OFUsIDB4NmY0YTI1MjVVLCAweDcyNWMyZTJlVSwKKyAgICAweDI0MzgxYzFjVSwgMHhmMTU3YTZhNlUsIDB4Yzc3M2I0YjRVLCAweDUxOTdjNmM2VSwKKyAgICAweDIzY2JlOGU4VSwgMHg3Y2ExZGRkZFUsIDB4OWNlODc0NzRVLCAweDIxM2UxZjFmVSwKKyAgICAweGRkOTY0YjRiVSwgMHhkYzYxYmRiZFUsIDB4ODYwZDhiOGJVLCAweDg1MGY4YThhVSwKKyAgICAweDkwZTA3MDcwVSwgMHg0MjdjM2UzZVUsIDB4YzQ3MWI1YjVVLCAweGFhY2M2NjY2VSwKKyAgICAweGQ4OTA0ODQ4VSwgMHgwNTA2MDMwM1UsIDB4MDFmN2Y2ZjZVLCAweDEyMWMwZTBlVSwKKyAgICAweGEzYzI2MTYxVSwgMHg1ZjZhMzUzNVUsIDB4ZjlhZTU3NTdVLCAweGQwNjliOWI5VSwKKyAgICAweDkxMTc4Njg2VSwgMHg1ODk5YzFjMVUsIDB4MjczYTFkMWRVLCAweGI5Mjc5ZTllVSwKKyAgICAweDM4ZDllMWUxVSwgMHgxM2ViZjhmOFUsIDB4YjMyYjk4OThVLCAweDMzMjIxMTExVSwKKyAgICAweGJiZDI2OTY5VSwgMHg3MGE5ZDlkOVUsIDB4ODkwNzhlOGVVLCAweGE3MzM5NDk0VSwKKyAgICAweGI2MmQ5YjliVSwgMHgyMjNjMWUxZVUsIDB4OTIxNTg3ODdVLCAweDIwYzllOWU5VSwKKyAgICAweDQ5ODdjZWNlVSwgMHhmZmFhNTU1NVUsIDB4Nzg1MDI4MjhVLCAweDdhYTVkZmRmVSwKKyAgICAweDhmMDM4YzhjVSwgMHhmODU5YTFhMVUsIDB4ODAwOTg5ODlVLCAweDE3MWEwZDBkVSwKKyAgICAweGRhNjViZmJmVSwgMHgzMWQ3ZTZlNlUsIDB4YzY4NDQyNDJVLCAweGI4ZDA2ODY4VSwKKyAgICAweGMzODI0MTQxVSwgMHhiMDI5OTk5OVUsIDB4Nzc1YTJkMmRVLCAweDExMWUwZjBmVSwKKyAgICAweGNiN2JiMGIwVSwgMHhmY2E4NTQ1NFUsIDB4ZDY2ZGJiYmJVLCAweDNhMmMxNjE2VSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRlMlsyNTZdID0geworICAgIDB4NjNhNWM2NjNVLCAweDdjODRmODdjVSwgMHg3Nzk5ZWU3N1UsIDB4N2I4ZGY2N2JVLAorICAgIDB4ZjIwZGZmZjJVLCAweDZiYmRkNjZiVSwgMHg2ZmIxZGU2ZlUsIDB4YzU1NDkxYzVVLAorICAgIDB4MzA1MDYwMzBVLCAweDAxMDMwMjAxVSwgMHg2N2E5Y2U2N1UsIDB4MmI3ZDU2MmJVLAorICAgIDB4ZmUxOWU3ZmVVLCAweGQ3NjJiNWQ3VSwgMHhhYmU2NGRhYlUsIDB4NzY5YWVjNzZVLAorICAgIDB4Y2E0NThmY2FVLCAweDgyOWQxZjgyVSwgMHhjOTQwODljOVUsIDB4N2Q4N2ZhN2RVLAorICAgIDB4ZmExNWVmZmFVLCAweDU5ZWJiMjU5VSwgMHg0N2M5OGU0N1UsIDB4ZjAwYmZiZjBVLAorICAgIDB4YWRlYzQxYWRVLCAweGQ0NjdiM2Q0VSwgMHhhMmZkNWZhMlUsIDB4YWZlYTQ1YWZVLAorICAgIDB4OWNiZjIzOWNVLCAweGE0Zjc1M2E0VSwgMHg3Mjk2ZTQ3MlUsIDB4YzA1YjliYzBVLAorICAgIDB4YjdjMjc1YjdVLCAweGZkMWNlMWZkVSwgMHg5M2FlM2Q5M1UsIDB4MjY2YTRjMjZVLAorICAgIDB4MzY1YTZjMzZVLCAweDNmNDE3ZTNmVSwgMHhmNzAyZjVmN1UsIDB4Y2M0ZjgzY2NVLAorICAgIDB4MzQ1YzY4MzRVLCAweGE1ZjQ1MWE1VSwgMHhlNTM0ZDFlNVUsIDB4ZjEwOGY5ZjFVLAorICAgIDB4NzE5M2UyNzFVLCAweGQ4NzNhYmQ4VSwgMHgzMTUzNjIzMVUsIDB4MTUzZjJhMTVVLAorICAgIDB4MDQwYzA4MDRVLCAweGM3NTI5NWM3VSwgMHgyMzY1NDYyM1UsIDB4YzM1ZTlkYzNVLAorICAgIDB4MTgyODMwMThVLCAweDk2YTEzNzk2VSwgMHgwNTBmMGEwNVUsIDB4OWFiNTJmOWFVLAorICAgIDB4MDcwOTBlMDdVLCAweDEyMzYyNDEyVSwgMHg4MDliMWI4MFUsIDB4ZTIzZGRmZTJVLAorICAgIDB4ZWIyNmNkZWJVLCAweDI3Njk0ZTI3VSwgMHhiMmNkN2ZiMlUsIDB4NzU5ZmVhNzVVLAorICAgIDB4MDkxYjEyMDlVLCAweDgzOWUxZDgzVSwgMHgyYzc0NTgyY1UsIDB4MWEyZTM0MWFVLAorICAgIDB4MWIyZDM2MWJVLCAweDZlYjJkYzZlVSwgMHg1YWVlYjQ1YVUsIDB4YTBmYjViYTBVLAorICAgIDB4NTJmNmE0NTJVLCAweDNiNGQ3NjNiVSwgMHhkNjYxYjdkNlUsIDB4YjNjZTdkYjNVLAorICAgIDB4Mjk3YjUyMjlVLCAweGUzM2VkZGUzVSwgMHgyZjcxNWUyZlUsIDB4ODQ5NzEzODRVLAorICAgIDB4NTNmNWE2NTNVLCAweGQxNjhiOWQxVSwgMHgwMDAwMDAwMFUsIDB4ZWQyY2MxZWRVLAorICAgIDB4MjA2MDQwMjBVLCAweGZjMWZlM2ZjVSwgMHhiMWM4NzliMVUsIDB4NWJlZGI2NWJVLAorICAgIDB4NmFiZWQ0NmFVLCAweGNiNDY4ZGNiVSwgMHhiZWQ5NjdiZVUsIDB4Mzk0YjcyMzlVLAorICAgIDB4NGFkZTk0NGFVLCAweDRjZDQ5ODRjVSwgMHg1OGU4YjA1OFUsIDB4Y2Y0YTg1Y2ZVLAorICAgIDB4ZDA2YmJiZDBVLCAweGVmMmFjNWVmVSwgMHhhYWU1NGZhYVUsIDB4ZmIxNmVkZmJVLAorICAgIDB4NDNjNTg2NDNVLCAweDRkZDc5YTRkVSwgMHgzMzU1NjYzM1UsIDB4ODU5NDExODVVLAorICAgIDB4NDVjZjhhNDVVLCAweGY5MTBlOWY5VSwgMHgwMjA2MDQwMlUsIDB4N2Y4MWZlN2ZVLAorICAgIDB4NTBmMGEwNTBVLCAweDNjNDQ3ODNjVSwgMHg5ZmJhMjU5ZlUsIDB4YThlMzRiYThVLAorICAgIDB4NTFmM2EyNTFVLCAweGEzZmU1ZGEzVSwgMHg0MGMwODA0MFUsIDB4OGY4YTA1OGZVLAorICAgIDB4OTJhZDNmOTJVLCAweDlkYmMyMTlkVSwgMHgzODQ4NzAzOFUsIDB4ZjUwNGYxZjVVLAorICAgIDB4YmNkZjYzYmNVLCAweGI2YzE3N2I2VSwgMHhkYTc1YWZkYVUsIDB4MjE2MzQyMjFVLAorICAgIDB4MTAzMDIwMTBVLCAweGZmMWFlNWZmVSwgMHhmMzBlZmRmM1UsIDB4ZDI2ZGJmZDJVLAorICAgIDB4Y2Q0YzgxY2RVLCAweDBjMTQxODBjVSwgMHgxMzM1MjYxM1UsIDB4ZWMyZmMzZWNVLAorICAgIDB4NWZlMWJlNWZVLCAweDk3YTIzNTk3VSwgMHg0NGNjODg0NFUsIDB4MTczOTJlMTdVLAorICAgIDB4YzQ1NzkzYzRVLCAweGE3ZjI1NWE3VSwgMHg3ZTgyZmM3ZVUsIDB4M2Q0NzdhM2RVLAorICAgIDB4NjRhY2M4NjRVLCAweDVkZTdiYTVkVSwgMHgxOTJiMzIxOVUsIDB4NzM5NWU2NzNVLAorICAgIDB4NjBhMGMwNjBVLCAweDgxOTgxOTgxVSwgMHg0ZmQxOWU0ZlUsIDB4ZGM3ZmEzZGNVLAorICAgIDB4MjI2NjQ0MjJVLCAweDJhN2U1NDJhVSwgMHg5MGFiM2I5MFUsIDB4ODg4MzBiODhVLAorICAgIDB4NDZjYThjNDZVLCAweGVlMjljN2VlVSwgMHhiOGQzNmJiOFUsIDB4MTQzYzI4MTRVLAorICAgIDB4ZGU3OWE3ZGVVLCAweDVlZTJiYzVlVSwgMHgwYjFkMTYwYlUsIDB4ZGI3NmFkZGJVLAorICAgIDB4ZTAzYmRiZTBVLCAweDMyNTY2NDMyVSwgMHgzYTRlNzQzYVUsIDB4MGExZTE0MGFVLAorICAgIDB4NDlkYjkyNDlVLCAweDA2MGEwYzA2VSwgMHgyNDZjNDgyNFUsIDB4NWNlNGI4NWNVLAorICAgIDB4YzI1ZDlmYzJVLCAweGQzNmViZGQzVSwgMHhhY2VmNDNhY1UsIDB4NjJhNmM0NjJVLAorICAgIDB4OTFhODM5OTFVLCAweDk1YTQzMTk1VSwgMHhlNDM3ZDNlNFUsIDB4Nzk4YmYyNzlVLAorICAgIDB4ZTczMmQ1ZTdVLCAweGM4NDM4YmM4VSwgMHgzNzU5NmUzN1UsIDB4NmRiN2RhNmRVLAorICAgIDB4OGQ4YzAxOGRVLCAweGQ1NjRiMWQ1VSwgMHg0ZWQyOWM0ZVUsIDB4YTllMDQ5YTlVLAorICAgIDB4NmNiNGQ4NmNVLCAweDU2ZmFhYzU2VSwgMHhmNDA3ZjNmNFUsIDB4ZWEyNWNmZWFVLAorICAgIDB4NjVhZmNhNjVVLCAweDdhOGVmNDdhVSwgMHhhZWU5NDdhZVUsIDB4MDgxODEwMDhVLAorICAgIDB4YmFkNTZmYmFVLCAweDc4ODhmMDc4VSwgMHgyNTZmNGEyNVUsIDB4MmU3MjVjMmVVLAorICAgIDB4MWMyNDM4MWNVLCAweGE2ZjE1N2E2VSwgMHhiNGM3NzNiNFUsIDB4YzY1MTk3YzZVLAorICAgIDB4ZTgyM2NiZThVLCAweGRkN2NhMWRkVSwgMHg3NDljZTg3NFUsIDB4MWYyMTNlMWZVLAorICAgIDB4NGJkZDk2NGJVLCAweGJkZGM2MWJkVSwgMHg4Yjg2MGQ4YlUsIDB4OGE4NTBmOGFVLAorICAgIDB4NzA5MGUwNzBVLCAweDNlNDI3YzNlVSwgMHhiNWM0NzFiNVUsIDB4NjZhYWNjNjZVLAorICAgIDB4NDhkODkwNDhVLCAweDAzMDUwNjAzVSwgMHhmNjAxZjdmNlUsIDB4MGUxMjFjMGVVLAorICAgIDB4NjFhM2MyNjFVLCAweDM1NWY2YTM1VSwgMHg1N2Y5YWU1N1UsIDB4YjlkMDY5YjlVLAorICAgIDB4ODY5MTE3ODZVLCAweGMxNTg5OWMxVSwgMHgxZDI3M2ExZFUsIDB4OWViOTI3OWVVLAorICAgIDB4ZTEzOGQ5ZTFVLCAweGY4MTNlYmY4VSwgMHg5OGIzMmI5OFUsIDB4MTEzMzIyMTFVLAorICAgIDB4NjliYmQyNjlVLCAweGQ5NzBhOWQ5VSwgMHg4ZTg5MDc4ZVUsIDB4OTRhNzMzOTRVLAorICAgIDB4OWJiNjJkOWJVLCAweDFlMjIzYzFlVSwgMHg4NzkyMTU4N1UsIDB4ZTkyMGM5ZTlVLAorICAgIDB4Y2U0OTg3Y2VVLCAweDU1ZmZhYTU1VSwgMHgyODc4NTAyOFUsIDB4ZGY3YWE1ZGZVLAorICAgIDB4OGM4ZjAzOGNVLCAweGExZjg1OWExVSwgMHg4OTgwMDk4OVUsIDB4MGQxNzFhMGRVLAorICAgIDB4YmZkYTY1YmZVLCAweGU2MzFkN2U2VSwgMHg0MmM2ODQ0MlUsIDB4NjhiOGQwNjhVLAorICAgIDB4NDFjMzgyNDFVLCAweDk5YjAyOTk5VSwgMHgyZDc3NWEyZFUsIDB4MGYxMTFlMGZVLAorICAgIDB4YjBjYjdiYjBVLCAweDU0ZmNhODU0VSwgMHhiYmQ2NmRiYlUsIDB4MTYzYTJjMTZVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGUzWzI1Nl0gPSB7CisgICAgMHg2MzYzYTVjNlUsIDB4N2M3Yzg0ZjhVLCAweDc3Nzc5OWVlVSwgMHg3YjdiOGRmNlUsCisgICAgMHhmMmYyMGRmZlUsIDB4NmI2YmJkZDZVLCAweDZmNmZiMWRlVSwgMHhjNWM1NTQ5MVUsCisgICAgMHgzMDMwNTA2MFUsIDB4MDEwMTAzMDJVLCAweDY3NjdhOWNlVSwgMHgyYjJiN2Q1NlUsCisgICAgMHhmZWZlMTllN1UsIDB4ZDdkNzYyYjVVLCAweGFiYWJlNjRkVSwgMHg3Njc2OWFlY1UsCisgICAgMHhjYWNhNDU4ZlUsIDB4ODI4MjlkMWZVLCAweGM5Yzk0MDg5VSwgMHg3ZDdkODdmYVUsCisgICAgMHhmYWZhMTVlZlUsIDB4NTk1OWViYjJVLCAweDQ3NDdjOThlVSwgMHhmMGYwMGJmYlUsCisgICAgMHhhZGFkZWM0MVUsIDB4ZDRkNDY3YjNVLCAweGEyYTJmZDVmVSwgMHhhZmFmZWE0NVUsCisgICAgMHg5YzljYmYyM1UsIDB4YTRhNGY3NTNVLCAweDcyNzI5NmU0VSwgMHhjMGMwNWI5YlUsCisgICAgMHhiN2I3YzI3NVUsIDB4ZmRmZDFjZTFVLCAweDkzOTNhZTNkVSwgMHgyNjI2NmE0Y1UsCisgICAgMHgzNjM2NWE2Y1UsIDB4M2YzZjQxN2VVLCAweGY3ZjcwMmY1VSwgMHhjY2NjNGY4M1UsCisgICAgMHgzNDM0NWM2OFUsIDB4YTVhNWY0NTFVLCAweGU1ZTUzNGQxVSwgMHhmMWYxMDhmOVUsCisgICAgMHg3MTcxOTNlMlUsIDB4ZDhkODczYWJVLCAweDMxMzE1MzYyVSwgMHgxNTE1M2YyYVUsCisgICAgMHgwNDA0MGMwOFUsIDB4YzdjNzUyOTVVLCAweDIzMjM2NTQ2VSwgMHhjM2MzNWU5ZFUsCisgICAgMHgxODE4MjgzMFUsIDB4OTY5NmExMzdVLCAweDA1MDUwZjBhVSwgMHg5YTlhYjUyZlUsCisgICAgMHgwNzA3MDkwZVUsIDB4MTIxMjM2MjRVLCAweDgwODA5YjFiVSwgMHhlMmUyM2RkZlUsCisgICAgMHhlYmViMjZjZFUsIDB4MjcyNzY5NGVVLCAweGIyYjJjZDdmVSwgMHg3NTc1OWZlYVUsCisgICAgMHgwOTA5MWIxMlUsIDB4ODM4MzllMWRVLCAweDJjMmM3NDU4VSwgMHgxYTFhMmUzNFUsCisgICAgMHgxYjFiMmQzNlUsIDB4NmU2ZWIyZGNVLCAweDVhNWFlZWI0VSwgMHhhMGEwZmI1YlUsCisgICAgMHg1MjUyZjZhNFUsIDB4M2IzYjRkNzZVLCAweGQ2ZDY2MWI3VSwgMHhiM2IzY2U3ZFUsCisgICAgMHgyOTI5N2I1MlUsIDB4ZTNlMzNlZGRVLCAweDJmMmY3MTVlVSwgMHg4NDg0OTcxM1UsCisgICAgMHg1MzUzZjVhNlUsIDB4ZDFkMTY4YjlVLCAweDAwMDAwMDAwVSwgMHhlZGVkMmNjMVUsCisgICAgMHgyMDIwNjA0MFUsIDB4ZmNmYzFmZTNVLCAweGIxYjFjODc5VSwgMHg1YjViZWRiNlUsCisgICAgMHg2YTZhYmVkNFUsIDB4Y2JjYjQ2OGRVLCAweGJlYmVkOTY3VSwgMHgzOTM5NGI3MlUsCisgICAgMHg0YTRhZGU5NFUsIDB4NGM0Y2Q0OThVLCAweDU4NThlOGIwVSwgMHhjZmNmNGE4NVUsCisgICAgMHhkMGQwNmJiYlUsIDB4ZWZlZjJhYzVVLCAweGFhYWFlNTRmVSwgMHhmYmZiMTZlZFUsCisgICAgMHg0MzQzYzU4NlUsIDB4NGQ0ZGQ3OWFVLCAweDMzMzM1NTY2VSwgMHg4NTg1OTQxMVUsCisgICAgMHg0NTQ1Y2Y4YVUsIDB4ZjlmOTEwZTlVLCAweDAyMDIwNjA0VSwgMHg3ZjdmODFmZVUsCisgICAgMHg1MDUwZjBhMFUsIDB4M2MzYzQ0NzhVLCAweDlmOWZiYTI1VSwgMHhhOGE4ZTM0YlUsCisgICAgMHg1MTUxZjNhMlUsIDB4YTNhM2ZlNWRVLCAweDQwNDBjMDgwVSwgMHg4ZjhmOGEwNVUsCisgICAgMHg5MjkyYWQzZlUsIDB4OWQ5ZGJjMjFVLCAweDM4Mzg0ODcwVSwgMHhmNWY1MDRmMVUsCisgICAgMHhiY2JjZGY2M1UsIDB4YjZiNmMxNzdVLCAweGRhZGE3NWFmVSwgMHgyMTIxNjM0MlUsCisgICAgMHgxMDEwMzAyMFUsIDB4ZmZmZjFhZTVVLCAweGYzZjMwZWZkVSwgMHhkMmQyNmRiZlUsCisgICAgMHhjZGNkNGM4MVUsIDB4MGMwYzE0MThVLCAweDEzMTMzNTI2VSwgMHhlY2VjMmZjM1UsCisgICAgMHg1ZjVmZTFiZVUsIDB4OTc5N2EyMzVVLCAweDQ0NDRjYzg4VSwgMHgxNzE3MzkyZVUsCisgICAgMHhjNGM0NTc5M1UsIDB4YTdhN2YyNTVVLCAweDdlN2U4MmZjVSwgMHgzZDNkNDc3YVUsCisgICAgMHg2NDY0YWNjOFUsIDB4NWQ1ZGU3YmFVLCAweDE5MTkyYjMyVSwgMHg3MzczOTVlNlUsCisgICAgMHg2MDYwYTBjMFUsIDB4ODE4MTk4MTlVLCAweDRmNGZkMTllVSwgMHhkY2RjN2ZhM1UsCisgICAgMHgyMjIyNjY0NFUsIDB4MmEyYTdlNTRVLCAweDkwOTBhYjNiVSwgMHg4ODg4ODMwYlUsCisgICAgMHg0NjQ2Y2E4Y1UsIDB4ZWVlZTI5YzdVLCAweGI4YjhkMzZiVSwgMHgxNDE0M2MyOFUsCisgICAgMHhkZWRlNzlhN1UsIDB4NWU1ZWUyYmNVLCAweDBiMGIxZDE2VSwgMHhkYmRiNzZhZFUsCisgICAgMHhlMGUwM2JkYlUsIDB4MzIzMjU2NjRVLCAweDNhM2E0ZTc0VSwgMHgwYTBhMWUxNFUsCisgICAgMHg0OTQ5ZGI5MlUsIDB4MDYwNjBhMGNVLCAweDI0MjQ2YzQ4VSwgMHg1YzVjZTRiOFUsCisgICAgMHhjMmMyNWQ5ZlUsIDB4ZDNkMzZlYmRVLCAweGFjYWNlZjQzVSwgMHg2MjYyYTZjNFUsCisgICAgMHg5MTkxYTgzOVUsIDB4OTU5NWE0MzFVLCAweGU0ZTQzN2QzVSwgMHg3OTc5OGJmMlUsCisgICAgMHhlN2U3MzJkNVUsIDB4YzhjODQzOGJVLCAweDM3Mzc1OTZlVSwgMHg2ZDZkYjdkYVUsCisgICAgMHg4ZDhkOGMwMVUsIDB4ZDVkNTY0YjFVLCAweDRlNGVkMjljVSwgMHhhOWE5ZTA0OVUsCisgICAgMHg2YzZjYjRkOFUsIDB4NTY1NmZhYWNVLCAweGY0ZjQwN2YzVSwgMHhlYWVhMjVjZlUsCisgICAgMHg2NTY1YWZjYVUsIDB4N2E3YThlZjRVLCAweGFlYWVlOTQ3VSwgMHgwODA4MTgxMFUsCisgICAgMHhiYWJhZDU2ZlUsIDB4Nzg3ODg4ZjBVLCAweDI1MjU2ZjRhVSwgMHgyZTJlNzI1Y1UsCisgICAgMHgxYzFjMjQzOFUsIDB4YTZhNmYxNTdVLCAweGI0YjRjNzczVSwgMHhjNmM2NTE5N1UsCisgICAgMHhlOGU4MjNjYlUsIDB4ZGRkZDdjYTFVLCAweDc0NzQ5Y2U4VSwgMHgxZjFmMjEzZVUsCisgICAgMHg0YjRiZGQ5NlUsIDB4YmRiZGRjNjFVLCAweDhiOGI4NjBkVSwgMHg4YThhODUwZlUsCisgICAgMHg3MDcwOTBlMFUsIDB4M2UzZTQyN2NVLCAweGI1YjVjNDcxVSwgMHg2NjY2YWFjY1UsCisgICAgMHg0ODQ4ZDg5MFUsIDB4MDMwMzA1MDZVLCAweGY2ZjYwMWY3VSwgMHgwZTBlMTIxY1UsCisgICAgMHg2MTYxYTNjMlUsIDB4MzUzNTVmNmFVLCAweDU3NTdmOWFlVSwgMHhiOWI5ZDA2OVUsCisgICAgMHg4Njg2OTExN1UsIDB4YzFjMTU4OTlVLCAweDFkMWQyNzNhVSwgMHg5ZTllYjkyN1UsCisgICAgMHhlMWUxMzhkOVUsIDB4ZjhmODEzZWJVLCAweDk4OThiMzJiVSwgMHgxMTExMzMyMlUsCisgICAgMHg2OTY5YmJkMlUsIDB4ZDlkOTcwYTlVLCAweDhlOGU4OTA3VSwgMHg5NDk0YTczM1UsCisgICAgMHg5YjliYjYyZFUsIDB4MWUxZTIyM2NVLCAweDg3ODc5MjE1VSwgMHhlOWU5MjBjOVUsCisgICAgMHhjZWNlNDk4N1UsIDB4NTU1NWZmYWFVLCAweDI4Mjg3ODUwVSwgMHhkZmRmN2FhNVUsCisgICAgMHg4YzhjOGYwM1UsIDB4YTFhMWY4NTlVLCAweDg5ODk4MDA5VSwgMHgwZDBkMTcxYVUsCisgICAgMHhiZmJmZGE2NVUsIDB4ZTZlNjMxZDdVLCAweDQyNDJjNjg0VSwgMHg2ODY4YjhkMFUsCisgICAgMHg0MTQxYzM4MlUsIDB4OTk5OWIwMjlVLCAweDJkMmQ3NzVhVSwgMHgwZjBmMTExZVUsCisgICAgMHhiMGIwY2I3YlUsIDB4NTQ1NGZjYThVLCAweGJiYmJkNjZkVSwgMHgxNjE2M2EyY1UsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFRkMFsyNTZdID0geworICAgIDB4NTFmNGE3NTBVLCAweDdlNDE2NTUzVSwgMHgxYTE3YTRjM1UsIDB4M2EyNzVlOTZVLAorICAgIDB4M2JhYjZiY2JVLCAweDFmOWQ0NWYxVSwgMHhhY2ZhNThhYlUsIDB4NGJlMzAzOTNVLAorICAgIDB4MjAzMGZhNTVVLCAweGFkNzY2ZGY2VSwgMHg4OGNjNzY5MVUsIDB4ZjUwMjRjMjVVLAorICAgIDB4NGZlNWQ3ZmNVLCAweGM1MmFjYmQ3VSwgMHgyNjM1NDQ4MFUsIDB4YjU2MmEzOGZVLAorICAgIDB4ZGViMTVhNDlVLCAweDI1YmExYjY3VSwgMHg0NWVhMGU5OFUsIDB4NWRmZWMwZTFVLAorICAgIDB4YzMyZjc1MDJVLCAweDgxNGNmMDEyVSwgMHg4ZDQ2OTdhM1UsIDB4NmJkM2Y5YzZVLAorICAgIDB4MDM4ZjVmZTdVLCAweDE1OTI5Yzk1VSwgMHhiZjZkN2FlYlUsIDB4OTU1MjU5ZGFVLAorICAgIDB4ZDRiZTgzMmRVLCAweDU4NzQyMWQzVSwgMHg0OWUwNjkyOVUsIDB4OGVjOWM4NDRVLAorICAgIDB4NzVjMjg5NmFVLCAweGY0OGU3OTc4VSwgMHg5OTU4M2U2YlUsIDB4MjdiOTcxZGRVLAorICAgIDB4YmVlMTRmYjZVLCAweGYwODhhZDE3VSwgMHhjOTIwYWM2NlUsIDB4N2RjZTNhYjRVLAorICAgIDB4NjNkZjRhMThVLCAweGU1MWEzMTgyVSwgMHg5NzUxMzM2MFUsIDB4NjI1MzdmNDVVLAorICAgIDB4YjE2NDc3ZTBVLCAweGJiNmJhZTg0VSwgMHhmZTgxYTAxY1UsIDB4ZjkwODJiOTRVLAorICAgIDB4NzA0ODY4NThVLCAweDhmNDVmZDE5VSwgMHg5NGRlNmM4N1UsIDB4NTI3YmY4YjdVLAorICAgIDB4YWI3M2QzMjNVLCAweDcyNGIwMmUyVSwgMHhlMzFmOGY1N1UsIDB4NjY1NWFiMmFVLAorICAgIDB4YjJlYjI4MDdVLCAweDJmYjVjMjAzVSwgMHg4NmM1N2I5YVUsIDB4ZDMzNzA4YTVVLAorICAgIDB4MzAyODg3ZjJVLCAweDIzYmZhNWIyVSwgMHgwMjAzNmFiYVUsIDB4ZWQxNjgyNWNVLAorICAgIDB4OGFjZjFjMmJVLCAweGE3NzliNDkyVSwgMHhmMzA3ZjJmMFUsIDB4NGU2OWUyYTFVLAorICAgIDB4NjVkYWY0Y2RVLCAweDA2MDViZWQ1VSwgMHhkMTM0NjIxZlUsIDB4YzRhNmZlOGFVLAorICAgIDB4MzQyZTUzOWRVLCAweGEyZjM1NWEwVSwgMHgwNThhZTEzMlUsIDB4YTRmNmViNzVVLAorICAgIDB4MGI4M2VjMzlVLCAweDQwNjBlZmFhVSwgMHg1ZTcxOWYwNlUsIDB4YmQ2ZTEwNTFVLAorICAgIDB4M2UyMThhZjlVLCAweDk2ZGQwNjNkVSwgMHhkZDNlMDVhZVUsIDB4NGRlNmJkNDZVLAorICAgIDB4OTE1NDhkYjVVLCAweDcxYzQ1ZDA1VSwgMHgwNDA2ZDQ2ZlUsIDB4NjA1MDE1ZmZVLAorICAgIDB4MTk5OGZiMjRVLCAweGQ2YmRlOTk3VSwgMHg4OTQwNDNjY1UsIDB4NjdkOTllNzdVLAorICAgIDB4YjBlODQyYmRVLCAweDA3ODk4Yjg4VSwgMHhlNzE5NWIzOFUsIDB4NzljOGVlZGJVLAorICAgIDB4YTE3YzBhNDdVLCAweDdjNDIwZmU5VSwgMHhmODg0MWVjOVUsIDB4MDAwMDAwMDBVLAorICAgIDB4MDk4MDg2ODNVLCAweDMyMmJlZDQ4VSwgMHgxZTExNzBhY1UsIDB4NmM1YTcyNGVVLAorICAgIDB4ZmQwZWZmZmJVLCAweDBmODUzODU2VSwgMHgzZGFlZDUxZVUsIDB4MzYyZDM5MjdVLAorICAgIDB4MGEwZmQ5NjRVLCAweDY4NWNhNjIxVSwgMHg5YjViNTRkMVUsIDB4MjQzNjJlM2FVLAorICAgIDB4MGMwYTY3YjFVLCAweDkzNTdlNzBmVSwgMHhiNGVlOTZkMlUsIDB4MWI5YjkxOWVVLAorICAgIDB4ODBjMGM1NGZVLCAweDYxZGMyMGEyVSwgMHg1YTc3NGI2OVUsIDB4MWMxMjFhMTZVLAorICAgIDB4ZTI5M2JhMGFVLCAweGMwYTAyYWU1VSwgMHgzYzIyZTA0M1UsIDB4MTIxYjE3MWRVLAorICAgIDB4MGUwOTBkMGJVLCAweGYyOGJjN2FkVSwgMHgyZGI2YThiOVUsIDB4MTQxZWE5YzhVLAorICAgIDB4NTdmMTE5ODVVLCAweGFmNzUwNzRjVSwgMHhlZTk5ZGRiYlUsIDB4YTM3ZjYwZmRVLAorICAgIDB4ZjcwMTI2OWZVLCAweDVjNzJmNWJjVSwgMHg0NDY2M2JjNVUsIDB4NWJmYjdlMzRVLAorICAgIDB4OGI0MzI5NzZVLCAweGNiMjNjNmRjVSwgMHhiNmVkZmM2OFUsIDB4YjhlNGYxNjNVLAorICAgIDB4ZDczMWRjY2FVLCAweDQyNjM4NTEwVSwgMHgxMzk3MjI0MFUsIDB4ODRjNjExMjBVLAorICAgIDB4ODU0YTI0N2RVLCAweGQyYmIzZGY4VSwgMHhhZWY5MzIxMVUsIDB4YzcyOWExNmRVLAorICAgIDB4MWQ5ZTJmNGJVLCAweGRjYjIzMGYzVSwgMHgwZDg2NTJlY1UsIDB4NzdjMWUzZDBVLAorICAgIDB4MmJiMzE2NmNVLCAweGE5NzBiOTk5VSwgMHgxMTk0NDhmYVUsIDB4NDdlOTY0MjJVLAorICAgIDB4YThmYzhjYzRVLCAweGEwZjAzZjFhVSwgMHg1NjdkMmNkOFUsIDB4MjIzMzkwZWZVLAorICAgIDB4ODc0OTRlYzdVLCAweGQ5MzhkMWMxVSwgMHg4Y2NhYTJmZVUsIDB4OThkNDBiMzZVLAorICAgIDB4YTZmNTgxY2ZVLCAweGE1N2FkZTI4VSwgMHhkYWI3OGUyNlUsIDB4M2ZhZGJmYTRVLAorICAgIDB4MmMzYTlkZTRVLCAweDUwNzg5MjBkVSwgMHg2YTVmY2M5YlUsIDB4NTQ3ZTQ2NjJVLAorICAgIDB4ZjY4ZDEzYzJVLCAweDkwZDhiOGU4VSwgMHgyZTM5Zjc1ZVUsIDB4ODJjM2FmZjVVLAorICAgIDB4OWY1ZDgwYmVVLCAweDY5ZDA5MzdjVSwgMHg2ZmQ1MmRhOVUsIDB4Y2YyNTEyYjNVLAorICAgIDB4YzhhYzk5M2JVLCAweDEwMTg3ZGE3VSwgMHhlODljNjM2ZVUsIDB4ZGIzYmJiN2JVLAorICAgIDB4Y2QyNjc4MDlVLCAweDZlNTkxOGY0VSwgMHhlYzlhYjcwMVUsIDB4ODM0ZjlhYThVLAorICAgIDB4ZTY5NTZlNjVVLCAweGFhZmZlNjdlVSwgMHgyMWJjY2YwOFUsIDB4ZWYxNWU4ZTZVLAorICAgIDB4YmFlNzliZDlVLCAweDRhNmYzNmNlVSwgMHhlYTlmMDlkNFUsIDB4MjliMDdjZDZVLAorICAgIDB4MzFhNGIyYWZVLCAweDJhM2YyMzMxVSwgMHhjNmE1OTQzMFUsIDB4MzVhMjY2YzBVLAorICAgIDB4NzQ0ZWJjMzdVLCAweGZjODJjYWE2VSwgMHhlMDkwZDBiMFUsIDB4MzNhN2Q4MTVVLAorICAgIDB4ZjEwNDk4NGFVLCAweDQxZWNkYWY3VSwgMHg3ZmNkNTAwZVUsIDB4MTc5MWY2MmZVLAorICAgIDB4NzY0ZGQ2OGRVLCAweDQzZWZiMDRkVSwgMHhjY2FhNGQ1NFUsIDB4ZTQ5NjA0ZGZVLAorICAgIDB4OWVkMWI1ZTNVLCAweDRjNmE4ODFiVSwgMHhjMTJjMWZiOFUsIDB4NDY2NTUxN2ZVLAorICAgIDB4OWQ1ZWVhMDRVLCAweDAxOGMzNTVkVSwgMHhmYTg3NzQ3M1UsIDB4ZmIwYjQxMmVVLAorICAgIDB4YjM2NzFkNWFVLCAweDkyZGJkMjUyVSwgMHhlOTEwNTYzM1UsIDB4NmRkNjQ3MTNVLAorICAgIDB4OWFkNzYxOGNVLCAweDM3YTEwYzdhVSwgMHg1OWY4MTQ4ZVUsIDB4ZWIxMzNjODlVLAorICAgIDB4Y2VhOTI3ZWVVLCAweGI3NjFjOTM1VSwgMHhlMTFjZTVlZFUsIDB4N2E0N2IxM2NVLAorICAgIDB4OWNkMmRmNTlVLCAweDU1ZjI3MzNmVSwgMHgxODE0Y2U3OVUsIDB4NzNjNzM3YmZVLAorICAgIDB4NTNmN2NkZWFVLCAweDVmZmRhYTViVSwgMHhkZjNkNmYxNFUsIDB4Nzg0NGRiODZVLAorICAgIDB4Y2FhZmYzODFVLCAweGI5NjhjNDNlVSwgMHgzODI0MzQyY1UsIDB4YzJhMzQwNWZVLAorICAgIDB4MTYxZGMzNzJVLCAweGJjZTIyNTBjVSwgMHgyODNjNDk4YlUsIDB4ZmYwZDk1NDFVLAorICAgIDB4MzlhODAxNzFVLCAweDA4MGNiM2RlVSwgMHhkOGI0ZTQ5Y1UsIDB4NjQ1NmMxOTBVLAorICAgIDB4N2JjYjg0NjFVLCAweGQ1MzJiNjcwVSwgMHg0ODZjNWM3NFUsIDB4ZDBiODU3NDJVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGQxWzI1Nl0gPSB7CisgICAgMHg1MDUxZjRhN1UsIDB4NTM3ZTQxNjVVLCAweGMzMWExN2E0VSwgMHg5NjNhMjc1ZVUsCisgICAgMHhjYjNiYWI2YlUsIDB4ZjExZjlkNDVVLCAweGFiYWNmYTU4VSwgMHg5MzRiZTMwM1UsCisgICAgMHg1NTIwMzBmYVUsIDB4ZjZhZDc2NmRVLCAweDkxODhjYzc2VSwgMHgyNWY1MDI0Y1UsCisgICAgMHhmYzRmZTVkN1UsIDB4ZDdjNTJhY2JVLCAweDgwMjYzNTQ0VSwgMHg4ZmI1NjJhM1UsCisgICAgMHg0OWRlYjE1YVUsIDB4NjcyNWJhMWJVLCAweDk4NDVlYTBlVSwgMHhlMTVkZmVjMFUsCisgICAgMHgwMmMzMmY3NVUsIDB4MTI4MTRjZjBVLCAweGEzOGQ0Njk3VSwgMHhjNjZiZDNmOVUsCisgICAgMHhlNzAzOGY1ZlUsIDB4OTUxNTkyOWNVLCAweGViYmY2ZDdhVSwgMHhkYTk1NTI1OVUsCisgICAgMHgyZGQ0YmU4M1UsIDB4ZDM1ODc0MjFVLCAweDI5NDllMDY5VSwgMHg0NDhlYzljOFUsCisgICAgMHg2YTc1YzI4OVUsIDB4NzhmNDhlNzlVLCAweDZiOTk1ODNlVSwgMHhkZDI3Yjk3MVUsCisgICAgMHhiNmJlZTE0ZlUsIDB4MTdmMDg4YWRVLCAweDY2YzkyMGFjVSwgMHhiNDdkY2UzYVUsCisgICAgMHgxODYzZGY0YVUsIDB4ODJlNTFhMzFVLCAweDYwOTc1MTMzVSwgMHg0NTYyNTM3ZlUsCisgICAgMHhlMGIxNjQ3N1UsIDB4ODRiYjZiYWVVLCAweDFjZmU4MWEwVSwgMHg5NGY5MDgyYlUsCisgICAgMHg1ODcwNDg2OFUsIDB4MTk4ZjQ1ZmRVLCAweDg3OTRkZTZjVSwgMHhiNzUyN2JmOFUsCisgICAgMHgyM2FiNzNkM1UsIDB4ZTI3MjRiMDJVLCAweDU3ZTMxZjhmVSwgMHgyYTY2NTVhYlUsCisgICAgMHgwN2IyZWIyOFUsIDB4MDMyZmI1YzJVLCAweDlhODZjNTdiVSwgMHhhNWQzMzcwOFUsCisgICAgMHhmMjMwMjg4N1UsIDB4YjIyM2JmYTVVLCAweGJhMDIwMzZhVSwgMHg1Y2VkMTY4MlUsCisgICAgMHgyYjhhY2YxY1UsIDB4OTJhNzc5YjRVLCAweGYwZjMwN2YyVSwgMHhhMTRlNjllMlUsCisgICAgMHhjZDY1ZGFmNFUsIDB4ZDUwNjA1YmVVLCAweDFmZDEzNDYyVSwgMHg4YWM0YTZmZVUsCisgICAgMHg5ZDM0MmU1M1UsIDB4YTBhMmYzNTVVLCAweDMyMDU4YWUxVSwgMHg3NWE0ZjZlYlUsCisgICAgMHgzOTBiODNlY1UsIDB4YWE0MDYwZWZVLCAweDA2NWU3MTlmVSwgMHg1MWJkNmUxMFUsCisgICAgMHhmOTNlMjE4YVUsIDB4M2Q5NmRkMDZVLCAweGFlZGQzZTA1VSwgMHg0NjRkZTZiZFUsCisgICAgMHhiNTkxNTQ4ZFUsIDB4MDU3MWM0NWRVLCAweDZmMDQwNmQ0VSwgMHhmZjYwNTAxNVUsCisgICAgMHgyNDE5OThmYlUsIDB4OTdkNmJkZTlVLCAweGNjODk0MDQzVSwgMHg3NzY3ZDk5ZVUsCisgICAgMHhiZGIwZTg0MlUsIDB4ODgwNzg5OGJVLCAweDM4ZTcxOTViVSwgMHhkYjc5YzhlZVUsCisgICAgMHg0N2ExN2MwYVUsIDB4ZTk3YzQyMGZVLCAweGM5Zjg4NDFlVSwgMHgwMDAwMDAwMFUsCisgICAgMHg4MzA5ODA4NlUsIDB4NDgzMjJiZWRVLCAweGFjMWUxMTcwVSwgMHg0ZTZjNWE3MlUsCisgICAgMHhmYmZkMGVmZlUsIDB4NTYwZjg1MzhVLCAweDFlM2RhZWQ1VSwgMHgyNzM2MmQzOVUsCisgICAgMHg2NDBhMGZkOVUsIDB4MjE2ODVjYTZVLCAweGQxOWI1YjU0VSwgMHgzYTI0MzYyZVUsCisgICAgMHhiMTBjMGE2N1UsIDB4MGY5MzU3ZTdVLCAweGQyYjRlZTk2VSwgMHg5ZTFiOWI5MVUsCisgICAgMHg0ZjgwYzBjNVUsIDB4YTI2MWRjMjBVLCAweDY5NWE3NzRiVSwgMHgxNjFjMTIxYVUsCisgICAgMHgwYWUyOTNiYVUsIDB4ZTVjMGEwMmFVLCAweDQzM2MyMmUwVSwgMHgxZDEyMWIxN1UsCisgICAgMHgwYjBlMDkwZFUsIDB4YWRmMjhiYzdVLCAweGI5MmRiNmE4VSwgMHhjODE0MWVhOVUsCisgICAgMHg4NTU3ZjExOVUsIDB4NGNhZjc1MDdVLCAweGJiZWU5OWRkVSwgMHhmZGEzN2Y2MFUsCisgICAgMHg5ZmY3MDEyNlUsIDB4YmM1YzcyZjVVLCAweGM1NDQ2NjNiVSwgMHgzNDViZmI3ZVUsCisgICAgMHg3NjhiNDMyOVUsIDB4ZGNjYjIzYzZVLCAweDY4YjZlZGZjVSwgMHg2M2I4ZTRmMVUsCisgICAgMHhjYWQ3MzFkY1UsIDB4MTA0MjYzODVVLCAweDQwMTM5NzIyVSwgMHgyMDg0YzYxMVUsCisgICAgMHg3ZDg1NGEyNFUsIDB4ZjhkMmJiM2RVLCAweDExYWVmOTMyVSwgMHg2ZGM3MjlhMVUsCisgICAgMHg0YjFkOWUyZlUsIDB4ZjNkY2IyMzBVLCAweGVjMGQ4NjUyVSwgMHhkMDc3YzFlM1UsCisgICAgMHg2YzJiYjMxNlUsIDB4OTlhOTcwYjlVLCAweGZhMTE5NDQ4VSwgMHgyMjQ3ZTk2NFUsCisgICAgMHhjNGE4ZmM4Y1UsIDB4MWFhMGYwM2ZVLCAweGQ4NTY3ZDJjVSwgMHhlZjIyMzM5MFUsCisgICAgMHhjNzg3NDk0ZVUsIDB4YzFkOTM4ZDFVLCAweGZlOGNjYWEyVSwgMHgzNjk4ZDQwYlUsCisgICAgMHhjZmE2ZjU4MVUsIDB4MjhhNTdhZGVVLCAweDI2ZGFiNzhlVSwgMHhhNDNmYWRiZlUsCisgICAgMHhlNDJjM2E5ZFUsIDB4MGQ1MDc4OTJVLCAweDliNmE1ZmNjVSwgMHg2MjU0N2U0NlUsCisgICAgMHhjMmY2OGQxM1UsIDB4ZTg5MGQ4YjhVLCAweDVlMmUzOWY3VSwgMHhmNTgyYzNhZlUsCisgICAgMHhiZTlmNWQ4MFUsIDB4N2M2OWQwOTNVLCAweGE5NmZkNTJkVSwgMHhiM2NmMjUxMlUsCisgICAgMHgzYmM4YWM5OVUsIDB4YTcxMDE4N2RVLCAweDZlZTg5YzYzVSwgMHg3YmRiM2JiYlUsCisgICAgMHgwOWNkMjY3OFUsIDB4ZjQ2ZTU5MThVLCAweDAxZWM5YWI3VSwgMHhhODgzNGY5YVUsCisgICAgMHg2NWU2OTU2ZVUsIDB4N2VhYWZmZTZVLCAweDA4MjFiY2NmVSwgMHhlNmVmMTVlOFUsCisgICAgMHhkOWJhZTc5YlUsIDB4Y2U0YTZmMzZVLCAweGQ0ZWE5ZjA5VSwgMHhkNjI5YjA3Y1UsCisgICAgMHhhZjMxYTRiMlUsIDB4MzEyYTNmMjNVLCAweDMwYzZhNTk0VSwgMHhjMDM1YTI2NlUsCisgICAgMHgzNzc0NGViY1UsIDB4YTZmYzgyY2FVLCAweGIwZTA5MGQwVSwgMHgxNTMzYTdkOFUsCisgICAgMHg0YWYxMDQ5OFUsIDB4Zjc0MWVjZGFVLCAweDBlN2ZjZDUwVSwgMHgyZjE3OTFmNlUsCisgICAgMHg4ZDc2NGRkNlUsIDB4NGQ0M2VmYjBVLCAweDU0Y2NhYTRkVSwgMHhkZmU0OTYwNFUsCisgICAgMHhlMzllZDFiNVUsIDB4MWI0YzZhODhVLCAweGI4YzEyYzFmVSwgMHg3ZjQ2NjU1MVUsCisgICAgMHgwNDlkNWVlYVUsIDB4NWQwMThjMzVVLCAweDczZmE4Nzc0VSwgMHgyZWZiMGI0MVUsCisgICAgMHg1YWIzNjcxZFUsIDB4NTI5MmRiZDJVLCAweDMzZTkxMDU2VSwgMHgxMzZkZDY0N1UsCisgICAgMHg4YzlhZDc2MVUsIDB4N2EzN2ExMGNVLCAweDhlNTlmODE0VSwgMHg4OWViMTMzY1UsCisgICAgMHhlZWNlYTkyN1UsIDB4MzViNzYxYzlVLCAweGVkZTExY2U1VSwgMHgzYzdhNDdiMVUsCisgICAgMHg1OTljZDJkZlUsIDB4M2Y1NWYyNzNVLCAweDc5MTgxNGNlVSwgMHhiZjczYzczN1UsCisgICAgMHhlYTUzZjdjZFUsIDB4NWI1ZmZkYWFVLCAweDE0ZGYzZDZmVSwgMHg4Njc4NDRkYlUsCisgICAgMHg4MWNhYWZmM1UsIDB4M2ViOTY4YzRVLCAweDJjMzgyNDM0VSwgMHg1ZmMyYTM0MFUsCisgICAgMHg3MjE2MWRjM1UsIDB4MGNiY2UyMjVVLCAweDhiMjgzYzQ5VSwgMHg0MWZmMGQ5NVUsCisgICAgMHg3MTM5YTgwMVUsIDB4ZGUwODBjYjNVLCAweDljZDhiNGU0VSwgMHg5MDY0NTZjMVUsCisgICAgMHg2MTdiY2I4NFUsIDB4NzBkNTMyYjZVLCAweDc0NDg2YzVjVSwgMHg0MmQwYjg1N1UsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZDJbMjU2XSA9IHsKKyAgICAweGE3NTA1MWY0VSwgMHg2NTUzN2U0MVUsIDB4YTRjMzFhMTdVLCAweDVlOTYzYTI3VSwKKyAgICAweDZiY2IzYmFiVSwgMHg0NWYxMWY5ZFUsIDB4NThhYmFjZmFVLCAweDAzOTM0YmUzVSwKKyAgICAweGZhNTUyMDMwVSwgMHg2ZGY2YWQ3NlUsIDB4NzY5MTg4Y2NVLCAweDRjMjVmNTAyVSwKKyAgICAweGQ3ZmM0ZmU1VSwgMHhjYmQ3YzUyYVUsIDB4NDQ4MDI2MzVVLCAweGEzOGZiNTYyVSwKKyAgICAweDVhNDlkZWIxVSwgMHgxYjY3MjViYVUsIDB4MGU5ODQ1ZWFVLCAweGMwZTE1ZGZlVSwKKyAgICAweDc1MDJjMzJmVSwgMHhmMDEyODE0Y1UsIDB4OTdhMzhkNDZVLCAweGY5YzY2YmQzVSwKKyAgICAweDVmZTcwMzhmVSwgMHg5Yzk1MTU5MlUsIDB4N2FlYmJmNmRVLCAweDU5ZGE5NTUyVSwKKyAgICAweDgzMmRkNGJlVSwgMHgyMWQzNTg3NFUsIDB4NjkyOTQ5ZTBVLCAweGM4NDQ4ZWM5VSwKKyAgICAweDg5NmE3NWMyVSwgMHg3OTc4ZjQ4ZVUsIDB4M2U2Yjk5NThVLCAweDcxZGQyN2I5VSwKKyAgICAweDRmYjZiZWUxVSwgMHhhZDE3ZjA4OFUsIDB4YWM2NmM5MjBVLCAweDNhYjQ3ZGNlVSwKKyAgICAweDRhMTg2M2RmVSwgMHgzMTgyZTUxYVUsIDB4MzM2MDk3NTFVLCAweDdmNDU2MjUzVSwKKyAgICAweDc3ZTBiMTY0VSwgMHhhZTg0YmI2YlUsIDB4YTAxY2ZlODFVLCAweDJiOTRmOTA4VSwKKyAgICAweDY4NTg3MDQ4VSwgMHhmZDE5OGY0NVUsIDB4NmM4Nzk0ZGVVLCAweGY4Yjc1MjdiVSwKKyAgICAweGQzMjNhYjczVSwgMHgwMmUyNzI0YlUsIDB4OGY1N2UzMWZVLCAweGFiMmE2NjU1VSwKKyAgICAweDI4MDdiMmViVSwgMHhjMjAzMmZiNVUsIDB4N2I5YTg2YzVVLCAweDA4YTVkMzM3VSwKKyAgICAweDg3ZjIzMDI4VSwgMHhhNWIyMjNiZlUsIDB4NmFiYTAyMDNVLCAweDgyNWNlZDE2VSwKKyAgICAweDFjMmI4YWNmVSwgMHhiNDkyYTc3OVUsIDB4ZjJmMGYzMDdVLCAweGUyYTE0ZTY5VSwKKyAgICAweGY0Y2Q2NWRhVSwgMHhiZWQ1MDYwNVUsIDB4NjIxZmQxMzRVLCAweGZlOGFjNGE2VSwKKyAgICAweDUzOWQzNDJlVSwgMHg1NWEwYTJmM1UsIDB4ZTEzMjA1OGFVLCAweGViNzVhNGY2VSwKKyAgICAweGVjMzkwYjgzVSwgMHhlZmFhNDA2MFUsIDB4OWYwNjVlNzFVLCAweDEwNTFiZDZlVSwKKyAgICAweDhhZjkzZTIxVSwgMHgwNjNkOTZkZFUsIDB4MDVhZWRkM2VVLCAweGJkNDY0ZGU2VSwKKyAgICAweDhkYjU5MTU0VSwgMHg1ZDA1NzFjNFUsIDB4ZDQ2ZjA0MDZVLCAweDE1ZmY2MDUwVSwKKyAgICAweGZiMjQxOTk4VSwgMHhlOTk3ZDZiZFUsIDB4NDNjYzg5NDBVLCAweDllNzc2N2Q5VSwKKyAgICAweDQyYmRiMGU4VSwgMHg4Yjg4MDc4OVUsIDB4NWIzOGU3MTlVLCAweGVlZGI3OWM4VSwKKyAgICAweDBhNDdhMTdjVSwgMHgwZmU5N2M0MlUsIDB4MWVjOWY4ODRVLCAweDAwMDAwMDAwVSwKKyAgICAweDg2ODMwOTgwVSwgMHhlZDQ4MzIyYlUsIDB4NzBhYzFlMTFVLCAweDcyNGU2YzVhVSwKKyAgICAweGZmZmJmZDBlVSwgMHgzODU2MGY4NVUsIDB4ZDUxZTNkYWVVLCAweDM5MjczNjJkVSwKKyAgICAweGQ5NjQwYTBmVSwgMHhhNjIxNjg1Y1UsIDB4NTRkMTliNWJVLCAweDJlM2EyNDM2VSwKKyAgICAweDY3YjEwYzBhVSwgMHhlNzBmOTM1N1UsIDB4OTZkMmI0ZWVVLCAweDkxOWUxYjliVSwKKyAgICAweGM1NGY4MGMwVSwgMHgyMGEyNjFkY1UsIDB4NGI2OTVhNzdVLCAweDFhMTYxYzEyVSwKKyAgICAweGJhMGFlMjkzVSwgMHgyYWU1YzBhMFUsIDB4ZTA0MzNjMjJVLCAweDE3MWQxMjFiVSwKKyAgICAweDBkMGIwZTA5VSwgMHhjN2FkZjI4YlUsIDB4YThiOTJkYjZVLCAweGE5YzgxNDFlVSwKKyAgICAweDE5ODU1N2YxVSwgMHgwNzRjYWY3NVUsIDB4ZGRiYmVlOTlVLCAweDYwZmRhMzdmVSwKKyAgICAweDI2OWZmNzAxVSwgMHhmNWJjNWM3MlUsIDB4M2JjNTQ0NjZVLCAweDdlMzQ1YmZiVSwKKyAgICAweDI5NzY4YjQzVSwgMHhjNmRjY2IyM1UsIDB4ZmM2OGI2ZWRVLCAweGYxNjNiOGU0VSwKKyAgICAweGRjY2FkNzMxVSwgMHg4NTEwNDI2M1UsIDB4MjI0MDEzOTdVLCAweDExMjA4NGM2VSwKKyAgICAweDI0N2Q4NTRhVSwgMHgzZGY4ZDJiYlUsIDB4MzIxMWFlZjlVLCAweGExNmRjNzI5VSwKKyAgICAweDJmNGIxZDllVSwgMHgzMGYzZGNiMlUsIDB4NTJlYzBkODZVLCAweGUzZDA3N2MxVSwKKyAgICAweDE2NmMyYmIzVSwgMHhiOTk5YTk3MFUsIDB4NDhmYTExOTRVLCAweDY0MjI0N2U5VSwKKyAgICAweDhjYzRhOGZjVSwgMHgzZjFhYTBmMFUsIDB4MmNkODU2N2RVLCAweDkwZWYyMjMzVSwKKyAgICAweDRlYzc4NzQ5VSwgMHhkMWMxZDkzOFUsIDB4YTJmZThjY2FVLCAweDBiMzY5OGQ0VSwKKyAgICAweDgxY2ZhNmY1VSwgMHhkZTI4YTU3YVUsIDB4OGUyNmRhYjdVLCAweGJmYTQzZmFkVSwKKyAgICAweDlkZTQyYzNhVSwgMHg5MjBkNTA3OFUsIDB4Y2M5YjZhNWZVLCAweDQ2NjI1NDdlVSwKKyAgICAweDEzYzJmNjhkVSwgMHhiOGU4OTBkOFUsIDB4Zjc1ZTJlMzlVLCAweGFmZjU4MmMzVSwKKyAgICAweDgwYmU5ZjVkVSwgMHg5MzdjNjlkMFUsIDB4MmRhOTZmZDVVLCAweDEyYjNjZjI1VSwKKyAgICAweDk5M2JjOGFjVSwgMHg3ZGE3MTAxOFUsIDB4NjM2ZWU4OWNVLCAweGJiN2JkYjNiVSwKKyAgICAweDc4MDljZDI2VSwgMHgxOGY0NmU1OVUsIDB4YjcwMWVjOWFVLCAweDlhYTg4MzRmVSwKKyAgICAweDZlNjVlNjk1VSwgMHhlNjdlYWFmZlUsIDB4Y2YwODIxYmNVLCAweGU4ZTZlZjE1VSwKKyAgICAweDliZDliYWU3VSwgMHgzNmNlNGE2ZlUsIDB4MDlkNGVhOWZVLCAweDdjZDYyOWIwVSwKKyAgICAweGIyYWYzMWE0VSwgMHgyMzMxMmEzZlUsIDB4OTQzMGM2YTVVLCAweDY2YzAzNWEyVSwKKyAgICAweGJjMzc3NDRlVSwgMHhjYWE2ZmM4MlUsIDB4ZDBiMGUwOTBVLCAweGQ4MTUzM2E3VSwKKyAgICAweDk4NGFmMTA0VSwgMHhkYWY3NDFlY1UsIDB4NTAwZTdmY2RVLCAweGY2MmYxNzkxVSwKKyAgICAweGQ2OGQ3NjRkVSwgMHhiMDRkNDNlZlUsIDB4NGQ1NGNjYWFVLCAweDA0ZGZlNDk2VSwKKyAgICAweGI1ZTM5ZWQxVSwgMHg4ODFiNGM2YVUsIDB4MWZiOGMxMmNVLCAweDUxN2Y0NjY1VSwKKyAgICAweGVhMDQ5ZDVlVSwgMHgzNTVkMDE4Y1UsIDB4NzQ3M2ZhODdVLCAweDQxMmVmYjBiVSwKKyAgICAweDFkNWFiMzY3VSwgMHhkMjUyOTJkYlUsIDB4NTYzM2U5MTBVLCAweDQ3MTM2ZGQ2VSwKKyAgICAweDYxOGM5YWQ3VSwgMHgwYzdhMzdhMVUsIDB4MTQ4ZTU5ZjhVLCAweDNjODllYjEzVSwKKyAgICAweDI3ZWVjZWE5VSwgMHhjOTM1Yjc2MVUsIDB4ZTVlZGUxMWNVLCAweGIxM2M3YTQ3VSwKKyAgICAweGRmNTk5Y2QyVSwgMHg3MzNmNTVmMlUsIDB4Y2U3OTE4MTRVLCAweDM3YmY3M2M3VSwKKyAgICAweGNkZWE1M2Y3VSwgMHhhYTViNWZmZFUsIDB4NmYxNGRmM2RVLCAweGRiODY3ODQ0VSwKKyAgICAweGYzODFjYWFmVSwgMHhjNDNlYjk2OFUsIDB4MzQyYzM4MjRVLCAweDQwNWZjMmEzVSwKKyAgICAweGMzNzIxNjFkVSwgMHgyNTBjYmNlMlUsIDB4NDk4YjI4M2NVLCAweDk1NDFmZjBkVSwKKyAgICAweDAxNzEzOWE4VSwgMHhiM2RlMDgwY1UsIDB4ZTQ5Y2Q4YjRVLCAweGMxOTA2NDU2VSwKKyAgICAweDg0NjE3YmNiVSwgMHhiNjcwZDUzMlUsIDB4NWM3NDQ4NmNVLCAweDU3NDJkMGI4VSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRkM1syNTZdID0geworICAgIDB4ZjRhNzUwNTFVLCAweDQxNjU1MzdlVSwgMHgxN2E0YzMxYVUsIDB4Mjc1ZTk2M2FVLAorICAgIDB4YWI2YmNiM2JVLCAweDlkNDVmMTFmVSwgMHhmYTU4YWJhY1UsIDB4ZTMwMzkzNGJVLAorICAgIDB4MzBmYTU1MjBVLCAweDc2NmRmNmFkVSwgMHhjYzc2OTE4OFUsIDB4MDI0YzI1ZjVVLAorICAgIDB4ZTVkN2ZjNGZVLCAweDJhY2JkN2M1VSwgMHgzNTQ0ODAyNlUsIDB4NjJhMzhmYjVVLAorICAgIDB4YjE1YTQ5ZGVVLCAweGJhMWI2NzI1VSwgMHhlYTBlOTg0NVUsIDB4ZmVjMGUxNWRVLAorICAgIDB4MmY3NTAyYzNVLCAweDRjZjAxMjgxVSwgMHg0Njk3YTM4ZFUsIDB4ZDNmOWM2NmJVLAorICAgIDB4OGY1ZmU3MDNVLCAweDkyOWM5NTE1VSwgMHg2ZDdhZWJiZlUsIDB4NTI1OWRhOTVVLAorICAgIDB4YmU4MzJkZDRVLCAweDc0MjFkMzU4VSwgMHhlMDY5Mjk0OVUsIDB4YzljODQ0OGVVLAorICAgIDB4YzI4OTZhNzVVLCAweDhlNzk3OGY0VSwgMHg1ODNlNmI5OVUsIDB4Yjk3MWRkMjdVLAorICAgIDB4ZTE0ZmI2YmVVLCAweDg4YWQxN2YwVSwgMHgyMGFjNjZjOVUsIDB4Y2UzYWI0N2RVLAorICAgIDB4ZGY0YTE4NjNVLCAweDFhMzE4MmU1VSwgMHg1MTMzNjA5N1UsIDB4NTM3ZjQ1NjJVLAorICAgIDB4NjQ3N2UwYjFVLCAweDZiYWU4NGJiVSwgMHg4MWEwMWNmZVUsIDB4MDgyYjk0ZjlVLAorICAgIDB4NDg2ODU4NzBVLCAweDQ1ZmQxOThmVSwgMHhkZTZjODc5NFUsIDB4N2JmOGI3NTJVLAorICAgIDB4NzNkMzIzYWJVLCAweDRiMDJlMjcyVSwgMHgxZjhmNTdlM1UsIDB4NTVhYjJhNjZVLAorICAgIDB4ZWIyODA3YjJVLCAweGI1YzIwMzJmVSwgMHhjNTdiOWE4NlUsIDB4MzcwOGE1ZDNVLAorICAgIDB4Mjg4N2YyMzBVLCAweGJmYTViMjIzVSwgMHgwMzZhYmEwMlUsIDB4MTY4MjVjZWRVLAorICAgIDB4Y2YxYzJiOGFVLCAweDc5YjQ5MmE3VSwgMHgwN2YyZjBmM1UsIDB4NjllMmExNGVVLAorICAgIDB4ZGFmNGNkNjVVLCAweDA1YmVkNTA2VSwgMHgzNDYyMWZkMVUsIDB4YTZmZThhYzRVLAorICAgIDB4MmU1MzlkMzRVLCAweGYzNTVhMGEyVSwgMHg4YWUxMzIwNVUsIDB4ZjZlYjc1YTRVLAorICAgIDB4ODNlYzM5MGJVLCAweDYwZWZhYTQwVSwgMHg3MTlmMDY1ZVUsIDB4NmUxMDUxYmRVLAorICAgIDB4MjE4YWY5M2VVLCAweGRkMDYzZDk2VSwgMHgzZTA1YWVkZFUsIDB4ZTZiZDQ2NGRVLAorICAgIDB4NTQ4ZGI1OTFVLCAweGM0NWQwNTcxVSwgMHgwNmQ0NmYwNFUsIDB4NTAxNWZmNjBVLAorICAgIDB4OThmYjI0MTlVLCAweGJkZTk5N2Q2VSwgMHg0MDQzY2M4OVUsIDB4ZDk5ZTc3NjdVLAorICAgIDB4ZTg0MmJkYjBVLCAweDg5OGI4ODA3VSwgMHgxOTViMzhlN1UsIDB4YzhlZWRiNzlVLAorICAgIDB4N2MwYTQ3YTFVLCAweDQyMGZlOTdjVSwgMHg4NDFlYzlmOFUsIDB4MDAwMDAwMDBVLAorICAgIDB4ODA4NjgzMDlVLCAweDJiZWQ0ODMyVSwgMHgxMTcwYWMxZVUsIDB4NWE3MjRlNmNVLAorICAgIDB4MGVmZmZiZmRVLCAweDg1Mzg1NjBmVSwgMHhhZWQ1MWUzZFUsIDB4MmQzOTI3MzZVLAorICAgIDB4MGZkOTY0MGFVLCAweDVjYTYyMTY4VSwgMHg1YjU0ZDE5YlUsIDB4MzYyZTNhMjRVLAorICAgIDB4MGE2N2IxMGNVLCAweDU3ZTcwZjkzVSwgMHhlZTk2ZDJiNFUsIDB4OWI5MTllMWJVLAorICAgIDB4YzBjNTRmODBVLCAweGRjMjBhMjYxVSwgMHg3NzRiNjk1YVUsIDB4MTIxYTE2MWNVLAorICAgIDB4OTNiYTBhZTJVLCAweGEwMmFlNWMwVSwgMHgyMmUwNDMzY1UsIDB4MWIxNzFkMTJVLAorICAgIDB4MDkwZDBiMGVVLCAweDhiYzdhZGYyVSwgMHhiNmE4YjkyZFUsIDB4MWVhOWM4MTRVLAorICAgIDB4ZjExOTg1NTdVLCAweDc1MDc0Y2FmVSwgMHg5OWRkYmJlZVUsIDB4N2Y2MGZkYTNVLAorICAgIDB4MDEyNjlmZjdVLCAweDcyZjViYzVjVSwgMHg2NjNiYzU0NFUsIDB4ZmI3ZTM0NWJVLAorICAgIDB4NDMyOTc2OGJVLCAweDIzYzZkY2NiVSwgMHhlZGZjNjhiNlUsIDB4ZTRmMTYzYjhVLAorICAgIDB4MzFkY2NhZDdVLCAweDYzODUxMDQyVSwgMHg5NzIyNDAxM1UsIDB4YzYxMTIwODRVLAorICAgIDB4NGEyNDdkODVVLCAweGJiM2RmOGQyVSwgMHhmOTMyMTFhZVUsIDB4MjlhMTZkYzdVLAorICAgIDB4OWUyZjRiMWRVLCAweGIyMzBmM2RjVSwgMHg4NjUyZWMwZFUsIDB4YzFlM2QwNzdVLAorICAgIDB4YjMxNjZjMmJVLCAweDcwYjk5OWE5VSwgMHg5NDQ4ZmExMVUsIDB4ZTk2NDIyNDdVLAorICAgIDB4ZmM4Y2M0YThVLCAweGYwM2YxYWEwVSwgMHg3ZDJjZDg1NlUsIDB4MzM5MGVmMjJVLAorICAgIDB4NDk0ZWM3ODdVLCAweDM4ZDFjMWQ5VSwgMHhjYWEyZmU4Y1UsIDB4ZDQwYjM2OThVLAorICAgIDB4ZjU4MWNmYTZVLCAweDdhZGUyOGE1VSwgMHhiNzhlMjZkYVUsIDB4YWRiZmE0M2ZVLAorICAgIDB4M2E5ZGU0MmNVLCAweDc4OTIwZDUwVSwgMHg1ZmNjOWI2YVUsIDB4N2U0NjYyNTRVLAorICAgIDB4OGQxM2MyZjZVLCAweGQ4YjhlODkwVSwgMHgzOWY3NWUyZVUsIDB4YzNhZmY1ODJVLAorICAgIDB4NWQ4MGJlOWZVLCAweGQwOTM3YzY5VSwgMHhkNTJkYTk2ZlUsIDB4MjUxMmIzY2ZVLAorICAgIDB4YWM5OTNiYzhVLCAweDE4N2RhNzEwVSwgMHg5YzYzNmVlOFUsIDB4M2JiYjdiZGJVLAorICAgIDB4MjY3ODA5Y2RVLCAweDU5MThmNDZlVSwgMHg5YWI3MDFlY1UsIDB4NGY5YWE4ODNVLAorICAgIDB4OTU2ZTY1ZTZVLCAweGZmZTY3ZWFhVSwgMHhiY2NmMDgyMVUsIDB4MTVlOGU2ZWZVLAorICAgIDB4ZTc5YmQ5YmFVLCAweDZmMzZjZTRhVSwgMHg5ZjA5ZDRlYVUsIDB4YjA3Y2Q2MjlVLAorICAgIDB4YTRiMmFmMzFVLCAweDNmMjMzMTJhVSwgMHhhNTk0MzBjNlUsIDB4YTI2NmMwMzVVLAorICAgIDB4NGViYzM3NzRVLCAweDgyY2FhNmZjVSwgMHg5MGQwYjBlMFUsIDB4YTdkODE1MzNVLAorICAgIDB4MDQ5ODRhZjFVLCAweGVjZGFmNzQxVSwgMHhjZDUwMGU3ZlUsIDB4OTFmNjJmMTdVLAorICAgIDB4NGRkNjhkNzZVLCAweGVmYjA0ZDQzVSwgMHhhYTRkNTRjY1UsIDB4OTYwNGRmZTRVLAorICAgIDB4ZDFiNWUzOWVVLCAweDZhODgxYjRjVSwgMHgyYzFmYjhjMVUsIDB4NjU1MTdmNDZVLAorICAgIDB4NWVlYTA0OWRVLCAweDhjMzU1ZDAxVSwgMHg4Nzc0NzNmYVUsIDB4MGI0MTJlZmJVLAorICAgIDB4NjcxZDVhYjNVLCAweGRiZDI1MjkyVSwgMHgxMDU2MzNlOVUsIDB4ZDY0NzEzNmRVLAorICAgIDB4ZDc2MThjOWFVLCAweGExMGM3YTM3VSwgMHhmODE0OGU1OVUsIDB4MTMzYzg5ZWJVLAorICAgIDB4YTkyN2VlY2VVLCAweDYxYzkzNWI3VSwgMHgxY2U1ZWRlMVUsIDB4NDdiMTNjN2FVLAorICAgIDB4ZDJkZjU5OWNVLCAweGYyNzMzZjU1VSwgMHgxNGNlNzkxOFUsIDB4YzczN2JmNzNVLAorICAgIDB4ZjdjZGVhNTNVLCAweGZkYWE1YjVmVSwgMHgzZDZmMTRkZlUsIDB4NDRkYjg2NzhVLAorICAgIDB4YWZmMzgxY2FVLCAweDY4YzQzZWI5VSwgMHgyNDM0MmMzOFUsIDB4YTM0MDVmYzJVLAorICAgIDB4MWRjMzcyMTZVLCAweGUyMjUwY2JjVSwgMHgzYzQ5OGIyOFUsIDB4MGQ5NTQxZmZVLAorICAgIDB4YTgwMTcxMzlVLCAweDBjYjNkZTA4VSwgMHhiNGU0OWNkOFUsIDB4NTZjMTkwNjRVLAorICAgIDB4Y2I4NDYxN2JVLCAweDMyYjY3MGQ1VSwgMHg2YzVjNzQ0OFUsIDB4Yjg1NzQyZDBVLAorfTsKK3N0YXRpYyBjb25zdCB1OCBUZDRbMjU2XSA9IHsKKyAgICAweDUyVSwgMHgwOVUsIDB4NmFVLCAweGQ1VSwgMHgzMFUsIDB4MzZVLCAweGE1VSwgMHgzOFUsCisgICAgMHhiZlUsIDB4NDBVLCAweGEzVSwgMHg5ZVUsIDB4ODFVLCAweGYzVSwgMHhkN1UsIDB4ZmJVLAorICAgIDB4N2NVLCAweGUzVSwgMHgzOVUsIDB4ODJVLCAweDliVSwgMHgyZlUsIDB4ZmZVLCAweDg3VSwKKyAgICAweDM0VSwgMHg4ZVUsIDB4NDNVLCAweDQ0VSwgMHhjNFUsIDB4ZGVVLCAweGU5VSwgMHhjYlUsCisgICAgMHg1NFUsIDB4N2JVLCAweDk0VSwgMHgzMlUsIDB4YTZVLCAweGMyVSwgMHgyM1UsIDB4M2RVLAorICAgIDB4ZWVVLCAweDRjVSwgMHg5NVUsIDB4MGJVLCAweDQyVSwgMHhmYVUsIDB4YzNVLCAweDRlVSwKKyAgICAweDA4VSwgMHgyZVUsIDB4YTFVLCAweDY2VSwgMHgyOFUsIDB4ZDlVLCAweDI0VSwgMHhiMlUsCisgICAgMHg3NlUsIDB4NWJVLCAweGEyVSwgMHg0OVUsIDB4NmRVLCAweDhiVSwgMHhkMVUsIDB4MjVVLAorICAgIDB4NzJVLCAweGY4VSwgMHhmNlUsIDB4NjRVLCAweDg2VSwgMHg2OFUsIDB4OThVLCAweDE2VSwKKyAgICAweGQ0VSwgMHhhNFUsIDB4NWNVLCAweGNjVSwgMHg1ZFUsIDB4NjVVLCAweGI2VSwgMHg5MlUsCisgICAgMHg2Y1UsIDB4NzBVLCAweDQ4VSwgMHg1MFUsIDB4ZmRVLCAweGVkVSwgMHhiOVUsIDB4ZGFVLAorICAgIDB4NWVVLCAweDE1VSwgMHg0NlUsIDB4NTdVLCAweGE3VSwgMHg4ZFUsIDB4OWRVLCAweDg0VSwKKyAgICAweDkwVSwgMHhkOFUsIDB4YWJVLCAweDAwVSwgMHg4Y1UsIDB4YmNVLCAweGQzVSwgMHgwYVUsCisgICAgMHhmN1UsIDB4ZTRVLCAweDU4VSwgMHgwNVUsIDB4YjhVLCAweGIzVSwgMHg0NVUsIDB4MDZVLAorICAgIDB4ZDBVLCAweDJjVSwgMHgxZVUsIDB4OGZVLCAweGNhVSwgMHgzZlUsIDB4MGZVLCAweDAyVSwKKyAgICAweGMxVSwgMHhhZlUsIDB4YmRVLCAweDAzVSwgMHgwMVUsIDB4MTNVLCAweDhhVSwgMHg2YlUsCisgICAgMHgzYVUsIDB4OTFVLCAweDExVSwgMHg0MVUsIDB4NGZVLCAweDY3VSwgMHhkY1UsIDB4ZWFVLAorICAgIDB4OTdVLCAweGYyVSwgMHhjZlUsIDB4Y2VVLCAweGYwVSwgMHhiNFUsIDB4ZTZVLCAweDczVSwKKyAgICAweDk2VSwgMHhhY1UsIDB4NzRVLCAweDIyVSwgMHhlN1UsIDB4YWRVLCAweDM1VSwgMHg4NVUsCisgICAgMHhlMlUsIDB4ZjlVLCAweDM3VSwgMHhlOFUsIDB4MWNVLCAweDc1VSwgMHhkZlUsIDB4NmVVLAorICAgIDB4NDdVLCAweGYxVSwgMHgxYVUsIDB4NzFVLCAweDFkVSwgMHgyOVUsIDB4YzVVLCAweDg5VSwKKyAgICAweDZmVSwgMHhiN1UsIDB4NjJVLCAweDBlVSwgMHhhYVUsIDB4MThVLCAweGJlVSwgMHgxYlUsCisgICAgMHhmY1UsIDB4NTZVLCAweDNlVSwgMHg0YlUsIDB4YzZVLCAweGQyVSwgMHg3OVUsIDB4MjBVLAorICAgIDB4OWFVLCAweGRiVSwgMHhjMFUsIDB4ZmVVLCAweDc4VSwgMHhjZFUsIDB4NWFVLCAweGY0VSwKKyAgICAweDFmVSwgMHhkZFUsIDB4YThVLCAweDMzVSwgMHg4OFUsIDB4MDdVLCAweGM3VSwgMHgzMVUsCisgICAgMHhiMVUsIDB4MTJVLCAweDEwVSwgMHg1OVUsIDB4MjdVLCAweDgwVSwgMHhlY1UsIDB4NWZVLAorICAgIDB4NjBVLCAweDUxVSwgMHg3ZlUsIDB4YTlVLCAweDE5VSwgMHhiNVUsIDB4NGFVLCAweDBkVSwKKyAgICAweDJkVSwgMHhlNVUsIDB4N2FVLCAweDlmVSwgMHg5M1UsIDB4YzlVLCAweDljVSwgMHhlZlUsCisgICAgMHhhMFUsIDB4ZTBVLCAweDNiVSwgMHg0ZFUsIDB4YWVVLCAweDJhVSwgMHhmNVUsIDB4YjBVLAorICAgIDB4YzhVLCAweGViVSwgMHhiYlUsIDB4M2NVLCAweDgzVSwgMHg1M1UsIDB4OTlVLCAweDYxVSwKKyAgICAweDE3VSwgMHgyYlUsIDB4MDRVLCAweDdlVSwgMHhiYVUsIDB4NzdVLCAweGQ2VSwgMHgyNlUsCisgICAgMHhlMVUsIDB4NjlVLCAweDE0VSwgMHg2M1UsIDB4NTVVLCAweDIxVSwgMHgwY1UsIDB4N2RVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgcmNvbltdID0geworCTB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsCisJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMCwKKwkweDFCMDAwMDAwLCAweDM2MDAwMDAwLCAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCit9OworCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBlbmNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpIHsKKworCXUzMiAqcms7CisgICAJaW50IGkgPSAwOworCXUzMiB0ZW1wOworCisJaWYgKCF1c2VyS2V5IHx8ICFrZXkpCisJCXJldHVybiAtMTsKKwlpZiAoYml0cyAhPSAxMjggJiYgYml0cyAhPSAxOTIgJiYgYml0cyAhPSAyNTYpCisJCXJldHVybiAtMjsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwlpZiAoYml0cz09MTI4KQorCQlrZXktPnJvdW5kcyA9IDEwOworCWVsc2UgaWYgKGJpdHM9PTE5MikKKwkJa2V5LT5yb3VuZHMgPSAxMjsKKwllbHNlCisJCWtleS0+cm91bmRzID0gMTQ7CisKKwlya1swXSA9IEdFVFUzMih1c2VyS2V5ICAgICApOworCXJrWzFdID0gR0VUVTMyKHVzZXJLZXkgKyAgNCk7CisJcmtbMl0gPSBHRVRVMzIodXNlcktleSArICA4KTsKKwlya1szXSA9IEdFVFUzMih1c2VyS2V5ICsgMTIpOworCWlmIChiaXRzID09IDEyOCkgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCAgPSBya1szXTsKKwkJCXJrWzRdID0gcmtbMF0gXgorCQkJCShUZTJbKHRlbXAgPj4gMTYpICYgMHhmZl0gJiAweGZmMDAwMDAwKSBeCisJCQkJKFRlM1sodGVtcCA+PiAgOCkgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJCQkoVGUwWyh0ZW1wICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkJCShUZTFbKHRlbXAgPj4gMjQpICAgICAgIF0gJiAweDAwMDAwMGZmKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWzVdID0gcmtbMV0gXiBya1s0XTsKKwkJCXJrWzZdID0gcmtbMl0gXiBya1s1XTsKKwkJCXJrWzddID0gcmtbM10gXiBya1s2XTsKKwkJCWlmICgrK2kgPT0gMTApIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJrICs9IDQ7CisJCX0KKwl9CisJcmtbNF0gPSBHRVRVMzIodXNlcktleSArIDE2KTsKKwlya1s1XSA9IEdFVFUzMih1c2VyS2V5ICsgMjApOworCWlmIChiaXRzID09IDE5MikgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCA9IHJrWyA1XTsKKwkJCXJrWyA2XSA9IHJrWyAwXSBeCisJCQkJKFRlMlsodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDApIF4KKwkJCQkoVGUzWyh0ZW1wID4+ICA4KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkJCShUZTBbKHRlbXAgICAgICApICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCQkJKFRlMVsodGVtcCA+PiAyNCkgICAgICAgXSAmIDB4MDAwMDAwZmYpIF4KKwkJCQlyY29uW2ldOworCQkJcmtbIDddID0gcmtbIDFdIF4gcmtbIDZdOworCQkJcmtbIDhdID0gcmtbIDJdIF4gcmtbIDddOworCQkJcmtbIDldID0gcmtbIDNdIF4gcmtbIDhdOworCQkJaWYgKCsraSA9PSA4KSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlya1sxMF0gPSBya1sgNF0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgNV0gXiBya1sxMF07CisJCQlyayArPSA2OworCQl9CisJfQorCXJrWzZdID0gR0VUVTMyKHVzZXJLZXkgKyAyNCk7CisJcmtbN10gPSBHRVRVMzIodXNlcktleSArIDI4KTsKKwlpZiAoYml0cyA9PSAyNTYpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgPSBya1sgN107CisJCQlya1sgOF0gPSBya1sgMF0gXgorCQkJCShUZTJbKHRlbXAgPj4gMTYpICYgMHhmZl0gJiAweGZmMDAwMDAwKSBeCisJCQkJKFRlM1sodGVtcCA+PiAgOCkgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJCQkoVGUwWyh0ZW1wICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkJCShUZTFbKHRlbXAgPj4gMjQpICAgICAgIF0gJiAweDAwMDAwMGZmKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA5XSA9IHJrWyAxXSBeIHJrWyA4XTsKKwkJCXJrWzEwXSA9IHJrWyAyXSBeIHJrWyA5XTsKKwkJCXJrWzExXSA9IHJrWyAzXSBeIHJrWzEwXTsKKwkJCWlmICgrK2kgPT0gNykgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJdGVtcCA9IHJrWzExXTsKKwkJCXJrWzEyXSA9IHJrWyA0XSBeCisJCQkJKFRlMlsodGVtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDApIF4KKwkJCQkoVGUzWyh0ZW1wID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkJCShUZTBbKHRlbXAgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCQkJKFRlMVsodGVtcCAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpOworCQkJcmtbMTNdID0gcmtbIDVdIF4gcmtbMTJdOworCQkJcmtbMTRdID0gcmtbIDZdIF4gcmtbMTNdOworCQkJcmtbMTVdID0gcmtbIDddIF4gcmtbMTRdOworCisJCQlyayArPSA4OworICAgICAgICAJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZGVjcnlwdGlvbiBrZXkgc2NoZWR1bGUuCisgKi8KK2ludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCQkJIEFFU19LRVkgKmtleSkgeworCisgICAgICAgIHUzMiAqcms7CisJaW50IGksIGosIHN0YXR1czsKKwl1MzIgdGVtcDsKKworCS8qIGZpcnN0LCBzdGFydCB3aXRoIGFuIGVuY3J5cHRpb24gc2NoZWR1bGUgKi8KKwlzdGF0dXMgPSBBRVNfc2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyayA9IGtleS0+cmRfa2V5OworCisJLyogaW52ZXJ0IHRoZSBvcmRlciBvZiB0aGUgcm91bmQga2V5czogKi8KKwlmb3IgKGkgPSAwLCBqID0gNCooa2V5LT5yb3VuZHMpOyBpIDwgajsgaSArPSA0LCBqIC09IDQpIHsKKwkJdGVtcCA9IHJrW2kgICAgXTsgcmtbaSAgICBdID0gcmtbaiAgICBdOyBya1tqICAgIF0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDFdOyBya1tpICsgMV0gPSBya1tqICsgMV07IHJrW2ogKyAxXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMl07IHJrW2kgKyAyXSA9IHJrW2ogKyAyXTsgcmtbaiArIDJdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAzXTsgcmtbaSArIDNdID0gcmtbaiArIDNdOyBya1tqICsgM10gPSB0ZW1wOworCX0KKwkvKiBhcHBseSB0aGUgaW52ZXJzZSBNaXhDb2x1bW4gdHJhbnNmb3JtIHRvIGFsbCByb3VuZCBrZXlzIGJ1dCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0OiAqLworCWZvciAoaSA9IDE7IGkgPCAoa2V5LT5yb3VuZHMpOyBpKyspIHsKKwkJcmsgKz0gNDsKKwkJcmtbMF0gPQorCQkJVGQwW1RlMVsocmtbMF0gPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisJCQlUZDFbVGUxWyhya1swXSA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMltUZTFbKHJrWzBdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQzW1RlMVsocmtbMF0gICAgICApICYgMHhmZl0gJiAweGZmXTsKKwkJcmtbMV0gPQorCQkJVGQwW1RlMVsocmtbMV0gPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisJCQlUZDFbVGUxWyhya1sxXSA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMltUZTFbKHJrWzFdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQzW1RlMVsocmtbMV0gICAgICApICYgMHhmZl0gJiAweGZmXTsKKwkJcmtbMl0gPQorCQkJVGQwW1RlMVsocmtbMl0gPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisJCQlUZDFbVGUxWyhya1syXSA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMltUZTFbKHJrWzJdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQzW1RlMVsocmtbMl0gICAgICApICYgMHhmZl0gJiAweGZmXTsKKwkJcmtbM10gPQorCQkJVGQwW1RlMVsocmtbM10gPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisJCQlUZDFbVGUxWyhya1szXSA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMltUZTFbKHJrWzNdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQzW1RlMVsocmtbM10gICAgICApICYgMHhmZl0gJiAweGZmXTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbmNyeXB0IGEgc2luZ2xlIGJsb2NrCisgKiBpbiBhbmQgb3V0IGNhbiBvdmVybGFwCisgKi8KK3ZvaWQgQUVTX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJIGNvbnN0IEFFU19LRVkgKmtleSkgeworCisJY29uc3QgdTMyICpyazsKKwl1MzIgczAsIHMxLCBzMiwgczMsIHQwLCB0MSwgdDIsIHQzOworI2lmbmRlZiBGVUxMX1VOUk9MTAorCWludCByOworI2VuZGlmIC8qID9GVUxMX1VOUk9MTCAqLworCisJYXNzZXJ0KGluICYmIG91dCAmJiBrZXkpOworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKgorCSAqIG1hcCBieXRlIGFycmF5IGJsb2NrIHRvIGNpcGhlciBzdGF0ZQorCSAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXk6CisJICovCisJczAgPSBHRVRVMzIoaW4gICAgICkgXiBya1swXTsKKwlzMSA9IEdFVFUzMihpbiArICA0KSBeIHJrWzFdOworCXMyID0gR0VUVTMyKGluICsgIDgpIF4gcmtbMl07CisJczMgPSBHRVRVMzIoaW4gKyAxMikgXiBya1szXTsKKyNpZmRlZiBGVUxMX1VOUk9MTAorCS8qIHJvdW5kIDE6ICovCisgICAJdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWyA0XTsKKyAgIAl0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbIDVdOworICAgCXQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1sgNl07CisgICAJdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWyA3XTsKKyAgIAkvKiByb3VuZCAyOiAqLworICAgCXMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1sgOF07CisgICAJczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWyA5XTsKKyAgIAlzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbMTBdOworICAgCXMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1sxMV07CisJLyogcm91bmQgMzogKi8KKyAgIAl0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbMTJdOworICAgCXQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1sxM107CisgICAJdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzE0XTsKKyAgIAl0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbMTVdOworICAgCS8qIHJvdW5kIDQ6ICovCisgICAJczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWzE2XTsKKyAgIAlzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbMTddOworICAgCXMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1sxOF07CisgICAJczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzE5XTsKKwkvKiByb3VuZCA1OiAqLworICAgCXQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1syMF07CisgICAJdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzIxXTsKKyAgIAl0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbMjJdOworICAgCXQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1syM107CisgICAJLyogcm91bmQgNjogKi8KKyAgIAlzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbMjRdOworICAgCXMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1syNV07CisgICAJczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzI2XTsKKyAgIAlzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbMjddOworCS8qIHJvdW5kIDc6ICovCisgICAJdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzI4XTsKKyAgIAl0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbMjldOworICAgCXQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1szMF07CisgICAJdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzMxXTsKKyAgIAkvKiByb3VuZCA4OiAqLworICAgCXMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1szMl07CisgICAJczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWzMzXTsKKyAgIAlzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbMzRdOworICAgCXMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1szNV07CisJLyogcm91bmQgOTogKi8KKyAgIAl0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbMzZdOworICAgCXQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1szN107CisgICAJdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzM4XTsKKyAgIAl0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbMzldOworICAgIGlmIChrZXktPnJvdW5kcyA+IDEwKSB7CisgICAgICAgIC8qIHJvdW5kIDEwOiAqLworICAgICAgICBzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbNDBdOworICAgICAgICBzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbNDFdOworICAgICAgICBzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbNDJdOworICAgICAgICBzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbNDNdOworICAgICAgICAvKiByb3VuZCAxMTogKi8KKyAgICAgICAgdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzQ0XTsKKyAgICAgICAgdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzQ1XTsKKyAgICAgICAgdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzQ2XTsKKyAgICAgICAgdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzQ3XTsKKyAgICAgICAgaWYgKGtleS0+cm91bmRzID4gMTIpIHsKKyAgICAgICAgICAgIC8qIHJvdW5kIDEyOiAqLworICAgICAgICAgICAgczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWzQ4XTsKKyAgICAgICAgICAgIHMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1s0OV07CisgICAgICAgICAgICBzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbNTBdOworICAgICAgICAgICAgczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzUxXTsKKyAgICAgICAgICAgIC8qIHJvdW5kIDEzOiAqLworICAgICAgICAgICAgdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzUyXTsKKyAgICAgICAgICAgIHQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1s1M107CisgICAgICAgICAgICB0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbNTRdOworICAgICAgICAgICAgdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzU1XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByayArPSBrZXktPnJvdW5kcyA8PCAyOworI2Vsc2UgIC8qICFGVUxMX1VOUk9MTCAqLworICAgIC8qCisgICAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgorICAgICAqLworICAgIHIgPSBrZXktPnJvdW5kcyA+PiAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgdDAgPQorICAgICAgICAgICAgVGUwWyhzMCA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyhzMyAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s0XTsKKyAgICAgICAgdDEgPQorICAgICAgICAgICAgVGUwWyhzMSA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyhzMCAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s1XTsKKyAgICAgICAgdDIgPQorICAgICAgICAgICAgVGUwWyhzMiA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyhzMSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s2XTsKKyAgICAgICAgdDMgPQorICAgICAgICAgICAgVGUwWyhzMyA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyhzMiAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s3XTsKKworICAgICAgICByayArPSA4OworICAgICAgICBpZiAoLS1yID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgczAgPQorICAgICAgICAgICAgVGUwWyh0MCA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyh0MyAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1swXTsKKyAgICAgICAgczEgPQorICAgICAgICAgICAgVGUwWyh0MSA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyh0MCAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1sxXTsKKyAgICAgICAgczIgPQorICAgICAgICAgICAgVGUwWyh0MiA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyh0MSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1syXTsKKyAgICAgICAgczMgPQorICAgICAgICAgICAgVGUwWyh0MyA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUzWyh0MiAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1szXTsKKyAgICB9CisjZW5kaWYgLyogP0ZVTExfVU5ST0xMICovCisgICAgLyoKKwkgKiBhcHBseSBsYXN0IHJvdW5kIGFuZAorCSAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gYnl0ZSBhcnJheSBibG9jazoKKwkgKi8KKwlzMCA9CisJCShUZTJbKHQwID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMCkgXgorCQkoVGUzWyh0MSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJKFRlMFsodDIgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCShUZTFbKHQzICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorCQlya1swXTsKKwlQVVRVMzIob3V0ICAgICAsIHMwKTsKKwlzMSA9CisJCShUZTJbKHQxID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMCkgXgorCQkoVGUzWyh0MiA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJKFRlMFsodDMgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCShUZTFbKHQwICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorCQlya1sxXTsKKwlQVVRVMzIob3V0ICsgIDQsIHMxKTsKKwlzMiA9CisJCShUZTJbKHQyID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMCkgXgorCQkoVGUzWyh0MyA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJKFRlMFsodDAgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCShUZTFbKHQxICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorCQlya1syXTsKKwlQVVRVMzIob3V0ICsgIDgsIHMyKTsKKwlzMyA9CisJCShUZTJbKHQzID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMCkgXgorCQkoVGUzWyh0MCA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJKFRlMFsodDEgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCShUZTFbKHQyICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorCQlya1szXTsKKwlQVVRVMzIob3V0ICsgMTIsIHMzKTsKK30KKworLyoKKyAqIERlY3J5cHQgYSBzaW5nbGUgYmxvY2sKKyAqIGluIGFuZCBvdXQgY2FuIG92ZXJsYXAKKyAqLwordm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisKKwljb25zdCB1MzIgKnJrOworCXUzMiBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDM7CisjaWZuZGVmIEZVTExfVU5ST0xMCisJaW50IHI7CisjZW5kaWYgLyogP0ZVTExfVU5ST0xMICovCisKKwlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSk7CisJcmsgPSBrZXktPnJkX2tleTsKKworCS8qCisJICogbWFwIGJ5dGUgYXJyYXkgYmxvY2sgdG8gY2lwaGVyIHN0YXRlCisJICogYW5kIGFkZCBpbml0aWFsIHJvdW5kIGtleToKKwkgKi8KKyAgICBzMCA9IEdFVFUzMihpbiAgICAgKSBeIHJrWzBdOworICAgIHMxID0gR0VUVTMyKGluICsgIDQpIF4gcmtbMV07CisgICAgczIgPSBHRVRVMzIoaW4gKyAgOCkgXiBya1syXTsKKyAgICBzMyA9IEdFVFUzMihpbiArIDEyKSBeIHJrWzNdOworI2lmZGVmIEZVTExfVU5ST0xMCisgICAgLyogcm91bmQgMTogKi8KKyAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbIDRdOworICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1sgNV07CisgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWyA2XTsKKyAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbIDddOworICAgIC8qIHJvdW5kIDI6ICovCisgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWyA4XTsKKyAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbIDldOworICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1sxMF07CisgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzExXTsKKyAgICAvKiByb3VuZCAzOiAqLworICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1sxMl07CisgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzEzXTsKKyAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbMTRdOworICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1sxNV07CisgICAgLyogcm91bmQgNDogKi8KKyAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbMTZdOworICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1sxN107CisgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzE4XTsKKyAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbMTldOworICAgIC8qIHJvdW5kIDU6ICovCisgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzIwXTsKKyAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbMjFdOworICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1syMl07CisgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzIzXTsKKyAgICAvKiByb3VuZCA2OiAqLworICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1syNF07CisgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWzI1XTsKKyAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbMjZdOworICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1syN107CisgICAgLyogcm91bmQgNzogKi8KKyAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbMjhdOworICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1syOV07CisgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzMwXTsKKyAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbMzFdOworICAgIC8qIHJvdW5kIDg6ICovCisgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWzMyXTsKKyAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbMzNdOworICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1szNF07CisgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzM1XTsKKyAgICAvKiByb3VuZCA5OiAqLworICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1szNl07CisgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzM3XTsKKyAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbMzhdOworICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1szOV07CisgICAgaWYgKGtleS0+cm91bmRzID4gMTApIHsKKyAgICAgICAgLyogcm91bmQgMTA6ICovCisgICAgICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1s0MF07CisgICAgICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1s0MV07CisgICAgICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1s0Ml07CisgICAgICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1s0M107CisgICAgICAgIC8qIHJvdW5kIDExOiAqLworICAgICAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbNDRdOworICAgICAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbNDVdOworICAgICAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbNDZdOworICAgICAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbNDddOworICAgICAgICBpZiAoa2V5LT5yb3VuZHMgPiAxMikgeworICAgICAgICAgICAgLyogcm91bmQgMTI6ICovCisgICAgICAgICAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbNDhdOworICAgICAgICAgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWzQ5XTsKKyAgICAgICAgICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1s1MF07CisgICAgICAgICAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbNTFdOworICAgICAgICAgICAgLyogcm91bmQgMTM6ICovCisgICAgICAgICAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbNTJdOworICAgICAgICAgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzUzXTsKKyAgICAgICAgICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1s1NF07CisgICAgICAgICAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbNTVdOworICAgICAgICB9CisgICAgfQorCXJrICs9IGtleS0+cm91bmRzIDw8IDI7CisjZWxzZSAgLyogIUZVTExfVU5ST0xMICovCisgICAgLyoKKyAgICAgKiBOciAtIDEgZnVsbCByb3VuZHM6CisgICAgICovCisgICAgciA9IGtleS0+cm91bmRzID4+IDE7CisgICAgZm9yICg7OykgeworICAgICAgICB0MCA9CisgICAgICAgICAgICBUZDBbKHMwID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHMxICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzRdOworICAgICAgICB0MSA9CisgICAgICAgICAgICBUZDBbKHMxID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHMyICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzVdOworICAgICAgICB0MiA9CisgICAgICAgICAgICBUZDBbKHMyID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHMzICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzZdOworICAgICAgICB0MyA9CisgICAgICAgICAgICBUZDBbKHMzID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHMwICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzddOworCisgICAgICAgIHJrICs9IDg7CisgICAgICAgIGlmICgtLXIgPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzMCA9CisgICAgICAgICAgICBUZDBbKHQwID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHQxICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzBdOworICAgICAgICBzMSA9CisgICAgICAgICAgICBUZDBbKHQxID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHQyICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzFdOworICAgICAgICBzMiA9CisgICAgICAgICAgICBUZDBbKHQyID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHQzICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzJdOworICAgICAgICBzMyA9CisgICAgICAgICAgICBUZDBbKHQzID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZDNbKHQwICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzNdOworICAgIH0KKyNlbmRpZiAvKiA/RlVMTF9VTlJPTEwgKi8KKyAgICAvKgorCSAqIGFwcGx5IGxhc3Qgcm91bmQgYW5kCisJICogbWFwIGNpcGhlciBzdGF0ZSB0byBieXRlIGFycmF5IGJsb2NrOgorCSAqLworICAgCXMwID0KKyAgIAkJKFRkNFsodDAgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKyAgIAkJKFRkNFsodDMgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKyAgIAkJKFRkNFsodDIgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKyAgIAkJKFRkNFsodDEgICAgICApICYgMHhmZl0pICAgICAgIF4KKyAgIAkJcmtbMF07CisJUFVUVTMyKG91dCAgICAgLCBzMCk7CisgICAJczEgPQorICAgCQkoVGQ0Wyh0MSA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorICAgCQkoVGQ0Wyh0MCA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorICAgCQkoVGQ0Wyh0MyA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorICAgCQkoVGQ0Wyh0MiAgICAgICkgJiAweGZmXSkgICAgICAgXgorICAgCQlya1sxXTsKKwlQVVRVMzIob3V0ICsgIDQsIHMxKTsKKyAgIAlzMiA9CisgICAJCShUZDRbKHQyID4+IDI0KSAgICAgICBdIDw8IDI0KSBeCisgICAJCShUZDRbKHQxID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisgICAJCShUZDRbKHQwID4+ICA4KSAmIDB4ZmZdIDw8ICA4KSBeCisgICAJCShUZDRbKHQzICAgICAgKSAmIDB4ZmZdKSAgICAgICBeCisgICAJCXJrWzJdOworCVBVVFUzMihvdXQgKyAgOCwgczIpOworICAgCXMzID0KKyAgIAkJKFRkNFsodDMgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKyAgIAkJKFRkNFsodDIgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKyAgIAkJKFRkNFsodDEgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKyAgIAkJKFRkNFsodDAgICAgICApICYgMHhmZl0pICAgICAgIF4KKyAgIAkJcmtbM107CisJUFVUVTMyKG91dCArIDEyLCBzMyk7Cit9CisKKyNlbHNlIC8qIEFFU19BU00gKi8KKworc3RhdGljIGNvbnN0IHU4IFRlNFsyNTZdID0geworICAgIDB4NjNVLCAweDdjVSwgMHg3N1UsIDB4N2JVLCAweGYyVSwgMHg2YlUsIDB4NmZVLCAweGM1VSwKKyAgICAweDMwVSwgMHgwMVUsIDB4NjdVLCAweDJiVSwgMHhmZVUsIDB4ZDdVLCAweGFiVSwgMHg3NlUsCisgICAgMHhjYVUsIDB4ODJVLCAweGM5VSwgMHg3ZFUsIDB4ZmFVLCAweDU5VSwgMHg0N1UsIDB4ZjBVLAorICAgIDB4YWRVLCAweGQ0VSwgMHhhMlUsIDB4YWZVLCAweDljVSwgMHhhNFUsIDB4NzJVLCAweGMwVSwKKyAgICAweGI3VSwgMHhmZFUsIDB4OTNVLCAweDI2VSwgMHgzNlUsIDB4M2ZVLCAweGY3VSwgMHhjY1UsCisgICAgMHgzNFUsIDB4YTVVLCAweGU1VSwgMHhmMVUsIDB4NzFVLCAweGQ4VSwgMHgzMVUsIDB4MTVVLAorICAgIDB4MDRVLCAweGM3VSwgMHgyM1UsIDB4YzNVLCAweDE4VSwgMHg5NlUsIDB4MDVVLCAweDlhVSwKKyAgICAweDA3VSwgMHgxMlUsIDB4ODBVLCAweGUyVSwgMHhlYlUsIDB4MjdVLCAweGIyVSwgMHg3NVUsCisgICAgMHgwOVUsIDB4ODNVLCAweDJjVSwgMHgxYVUsIDB4MWJVLCAweDZlVSwgMHg1YVUsIDB4YTBVLAorICAgIDB4NTJVLCAweDNiVSwgMHhkNlUsIDB4YjNVLCAweDI5VSwgMHhlM1UsIDB4MmZVLCAweDg0VSwKKyAgICAweDUzVSwgMHhkMVUsIDB4MDBVLCAweGVkVSwgMHgyMFUsIDB4ZmNVLCAweGIxVSwgMHg1YlUsCisgICAgMHg2YVUsIDB4Y2JVLCAweGJlVSwgMHgzOVUsIDB4NGFVLCAweDRjVSwgMHg1OFUsIDB4Y2ZVLAorICAgIDB4ZDBVLCAweGVmVSwgMHhhYVUsIDB4ZmJVLCAweDQzVSwgMHg0ZFUsIDB4MzNVLCAweDg1VSwKKyAgICAweDQ1VSwgMHhmOVUsIDB4MDJVLCAweDdmVSwgMHg1MFUsIDB4M2NVLCAweDlmVSwgMHhhOFUsCisgICAgMHg1MVUsIDB4YTNVLCAweDQwVSwgMHg4ZlUsIDB4OTJVLCAweDlkVSwgMHgzOFUsIDB4ZjVVLAorICAgIDB4YmNVLCAweGI2VSwgMHhkYVUsIDB4MjFVLCAweDEwVSwgMHhmZlUsIDB4ZjNVLCAweGQyVSwKKyAgICAweGNkVSwgMHgwY1UsIDB4MTNVLCAweGVjVSwgMHg1ZlUsIDB4OTdVLCAweDQ0VSwgMHgxN1UsCisgICAgMHhjNFUsIDB4YTdVLCAweDdlVSwgMHgzZFUsIDB4NjRVLCAweDVkVSwgMHgxOVUsIDB4NzNVLAorICAgIDB4NjBVLCAweDgxVSwgMHg0ZlUsIDB4ZGNVLCAweDIyVSwgMHgyYVUsIDB4OTBVLCAweDg4VSwKKyAgICAweDQ2VSwgMHhlZVUsIDB4YjhVLCAweDE0VSwgMHhkZVUsIDB4NWVVLCAweDBiVSwgMHhkYlUsCisgICAgMHhlMFUsIDB4MzJVLCAweDNhVSwgMHgwYVUsIDB4NDlVLCAweDA2VSwgMHgyNFUsIDB4NWNVLAorICAgIDB4YzJVLCAweGQzVSwgMHhhY1UsIDB4NjJVLCAweDkxVSwgMHg5NVUsIDB4ZTRVLCAweDc5VSwKKyAgICAweGU3VSwgMHhjOFUsIDB4MzdVLCAweDZkVSwgMHg4ZFUsIDB4ZDVVLCAweDRlVSwgMHhhOVUsCisgICAgMHg2Y1UsIDB4NTZVLCAweGY0VSwgMHhlYVUsIDB4NjVVLCAweDdhVSwgMHhhZVUsIDB4MDhVLAorICAgIDB4YmFVLCAweDc4VSwgMHgyNVUsIDB4MmVVLCAweDFjVSwgMHhhNlUsIDB4YjRVLCAweGM2VSwKKyAgICAweGU4VSwgMHhkZFUsIDB4NzRVLCAweDFmVSwgMHg0YlUsIDB4YmRVLCAweDhiVSwgMHg4YVUsCisgICAgMHg3MFUsIDB4M2VVLCAweGI1VSwgMHg2NlUsIDB4NDhVLCAweDAzVSwgMHhmNlUsIDB4MGVVLAorICAgIDB4NjFVLCAweDM1VSwgMHg1N1UsIDB4YjlVLCAweDg2VSwgMHhjMVUsIDB4MWRVLCAweDllVSwKKyAgICAweGUxVSwgMHhmOFUsIDB4OThVLCAweDExVSwgMHg2OVUsIDB4ZDlVLCAweDhlVSwgMHg5NFUsCisgICAgMHg5YlUsIDB4MWVVLCAweDg3VSwgMHhlOVUsIDB4Y2VVLCAweDU1VSwgMHgyOFUsIDB4ZGZVLAorICAgIDB4OGNVLCAweGExVSwgMHg4OVUsIDB4MGRVLCAweGJmVSwgMHhlNlUsIDB4NDJVLCAweDY4VSwKKyAgICAweDQxVSwgMHg5OVUsIDB4MmRVLCAweDBmVSwgMHhiMFUsIDB4NTRVLCAweGJiVSwgMHgxNlUKK307CitzdGF0aWMgY29uc3QgdTMyIHJjb25bXSA9IHsKKwkweDAxMDAwMDAwLCAweDAyMDAwMDAwLCAweDA0MDAwMDAwLCAweDA4MDAwMDAwLAorCTB4MTAwMDAwMDAsIDB4MjAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4ODAwMDAwMDAsCisJMHgxQjAwMDAwMCwgMHgzNjAwMDAwMCwgLyogZm9yIDEyOC1iaXQgYmxvY2tzLCBSaWpuZGFlbCBuZXZlciB1c2VzIG1vcmUgdGhhbiAxMCByY29uIHZhbHVlcyAqLworfTsKKworLyoqCisgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZW5jcnlwdGlvbiBrZXkgc2NoZWR1bGUuCisgKi8KK2ludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCQkJQUVTX0tFWSAqa2V5KSB7CisJdTMyICpyazsKKyAgIAlpbnQgaSA9IDA7CisJdTMyIHRlbXA7CisKKwlpZiAoIXVzZXJLZXkgfHwgIWtleSkKKwkJcmV0dXJuIC0xOworCWlmIChiaXRzICE9IDEyOCAmJiBiaXRzICE9IDE5MiAmJiBiaXRzICE9IDI1NikKKwkJcmV0dXJuIC0yOworCisJcmsgPSBrZXktPnJkX2tleTsKKworCWlmIChiaXRzPT0xMjgpCisJCWtleS0+cm91bmRzID0gMTA7CisJZWxzZSBpZiAoYml0cz09MTkyKQorCQlrZXktPnJvdW5kcyA9IDEyOworCWVsc2UKKwkJa2V5LT5yb3VuZHMgPSAxNDsKKworCXJrWzBdID0gR0VUVTMyKHVzZXJLZXkgICAgICk7CisJcmtbMV0gPSBHRVRVMzIodXNlcktleSArICA0KTsKKwlya1syXSA9IEdFVFUzMih1c2VyS2V5ICsgIDgpOworCXJrWzNdID0gR0VUVTMyKHVzZXJLZXkgKyAxMik7CisJaWYgKGJpdHMgPT0gMTI4KSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wICA9IHJrWzNdOworCQkJcmtbNF0gPSBya1swXSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAyNCkgXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdIDw8IDgpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDI0KSAgICAgICBdKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWzVdID0gcmtbMV0gXiBya1s0XTsKKwkJCXJrWzZdID0gcmtbMl0gXiBya1s1XTsKKwkJCXJrWzddID0gcmtbM10gXiBya1s2XTsKKwkJCWlmICgrK2kgPT0gMTApIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJrICs9IDQ7CisJCX0KKwl9CisJcmtbNF0gPSBHRVRVMzIodXNlcktleSArIDE2KTsKKwlya1s1XSA9IEdFVFUzMih1c2VyS2V5ICsgMjApOworCWlmIChiaXRzID09IDE5MikgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCA9IHJrWyA1XTsKKwkJCXJrWyA2XSA9IHJrWyAwXSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAyNCkgXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdIDw8IDgpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDI0KSAgICAgICBdKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA3XSA9IHJrWyAxXSBeIHJrWyA2XTsKKwkJCXJrWyA4XSA9IHJrWyAyXSBeIHJrWyA3XTsKKwkJCXJrWyA5XSA9IHJrWyAzXSBeIHJrWyA4XTsKKwkJCWlmICgrK2kgPT0gOCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmtbMTBdID0gcmtbIDRdIF4gcmtbIDldOworCQkJcmtbMTFdID0gcmtbIDVdIF4gcmtbMTBdOworCQkJcmsgKz0gNjsKKwkJfQorCX0KKwlya1s2XSA9IEdFVFUzMih1c2VyS2V5ICsgMjQpOworCXJrWzddID0gR0VUVTMyKHVzZXJLZXkgKyAyOCk7CisJaWYgKGJpdHMgPT0gMjU2KSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDddOworCQkJcmtbIDhdID0gcmtbIDBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0pIF4KKwkJCQlyY29uW2ldOworCQkJcmtbIDldID0gcmtbIDFdIF4gcmtbIDhdOworCQkJcmtbMTBdID0gcmtbIDJdIF4gcmtbIDldOworCQkJcmtbMTFdID0gcmtbIDNdIF4gcmtbMTBdOworCQkJaWYgKCsraSA9PSA3KSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQl0ZW1wID0gcmtbMTFdOworCQkJcmtbMTJdID0gcmtbIDRdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDI0KSAgICAgICBdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0pOworCQkJcmtbMTNdID0gcmtbIDVdIF4gcmtbMTJdOworCQkJcmtbMTRdID0gcmtbIDZdIF4gcmtbMTNdOworCQkJcmtbMTVdID0gcmtbIDddIF4gcmtbMTRdOworCisJCQlyayArPSA4OworICAgICAgICAJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZGVjcnlwdGlvbiBrZXkgc2NoZWR1bGUuCisgKi8KK2ludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCQkJIEFFU19LRVkgKmtleSkgeworCisgICAgICAgIHUzMiAqcms7CisJaW50IGksIGosIHN0YXR1czsKKwl1MzIgdGVtcDsKKworCS8qIGZpcnN0LCBzdGFydCB3aXRoIGFuIGVuY3J5cHRpb24gc2NoZWR1bGUgKi8KKwlzdGF0dXMgPSBBRVNfc2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyayA9IGtleS0+cmRfa2V5OworCisJLyogaW52ZXJ0IHRoZSBvcmRlciBvZiB0aGUgcm91bmQga2V5czogKi8KKwlmb3IgKGkgPSAwLCBqID0gNCooa2V5LT5yb3VuZHMpOyBpIDwgajsgaSArPSA0LCBqIC09IDQpIHsKKwkJdGVtcCA9IHJrW2kgICAgXTsgcmtbaSAgICBdID0gcmtbaiAgICBdOyBya1tqICAgIF0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDFdOyBya1tpICsgMV0gPSBya1tqICsgMV07IHJrW2ogKyAxXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMl07IHJrW2kgKyAyXSA9IHJrW2ogKyAyXTsgcmtbaiArIDJdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAzXTsgcmtbaSArIDNdID0gcmtbaiArIDNdOyBya1tqICsgM10gPSB0ZW1wOworCX0KKwkvKiBhcHBseSB0aGUgaW52ZXJzZSBNaXhDb2x1bW4gdHJhbnNmb3JtIHRvIGFsbCByb3VuZCBrZXlzIGJ1dCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0OiAqLworCWZvciAoaSA9IDE7IGkgPCAoa2V5LT5yb3VuZHMpOyBpKyspIHsKKwkJcmsgKz0gNDsKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJdTMyIHRwMSwgdHAyLCB0cDQsIHRwOCwgdHA5LCB0cGIsIHRwZCwgdHBlLCBtOworCisJCQl0cDEgPSBya1tqXTsKKwkJCW0gPSB0cDEgJiAweDgwODA4MDgwOworCQkJdHAyID0gKCh0cDEgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHAyICYgMHg4MDgwODA4MDsKKwkJCXRwNCA9ICgodHAyICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJbSA9IHRwNCAmIDB4ODA4MDgwODA7CisJCQl0cDggPSAoKHRwNCAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCXRwOSA9IHRwOCBeIHRwMTsKKwkJCXRwYiA9IHRwOSBeIHRwMjsKKwkJCXRwZCA9IHRwOSBeIHRwNDsKKwkJCXRwZSA9IHRwOCBeIHRwNCBeIHRwMjsKKyNpZiBkZWZpbmVkKFJPVEFURSkKKwkJCXJrW2pdID0gdHBlIF4gUk9UQVRFKHRwZCwxNikgXgorCQkJCVJPVEFURSh0cDksMjQpIF4gUk9UQVRFKHRwYiw4KTsKKyNlbHNlCisJCQlya1tqXSA9IHRwZSBeICh0cGQgPj4gMTYpIF4gKHRwZCA8PCAxNikgXiAKKwkJCQkodHA5ID4+IDgpIF4gKHRwOSA8PCAyNCkgXgorCQkJCSh0cGIgPj4gMjQpIF4gKHRwYiA8PCA4KTsKKyNlbmRpZgorCQl9CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQUVTX0FTTSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTk4MzJlCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgKQEAgLTAsMCArMSw4NyBAQAorLyogY3J5cHRvL2Flcy9hZXMuaCAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaWZuZGVmIEhFQURFUl9BRVNfTE9DTF9ICisjZGVmaW5lIEhFQURFUl9BRVNfTE9DTF9ICisKKyNpZmRlZiBPUEVOU1NMX05PX0FFUworI2Vycm9yIEFFUyBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSkKKyMgZGVmaW5lIFNXQVAoeCkgKF9scm90bCh4LCA4KSAmIDB4MDBmZjAwZmYgfCBfbHJvdHIoeCwgOCkgJiAweGZmMDBmZjAwKQorIyBkZWZpbmUgR0VUVTMyKHApIFNXQVAoKigodTMyICopKHApKSkKKyMgZGVmaW5lIFBVVFUzMihjdCwgc3QpIHsgKigodTMyICopKGN0KSkgPSBTV0FQKChzdCkpOyB9CisjZWxzZQorIyBkZWZpbmUgR0VUVTMyKHB0KSAoKCh1MzIpKHB0KVswXSA8PCAyNCkgXiAoKHUzMikocHQpWzFdIDw8IDE2KSBeICgodTMyKShwdClbMl0gPDwgIDgpIF4gKCh1MzIpKHB0KVszXSkpCisjIGRlZmluZSBQVVRVMzIoY3QsIHN0KSB7IChjdClbMF0gPSAodTgpKChzdCkgPj4gMjQpOyAoY3QpWzFdID0gKHU4KSgoc3QpID4+IDE2KTsgKGN0KVsyXSA9ICh1OCkoKHN0KSA+PiAgOCk7IChjdClbM10gPSAodTgpKHN0KTsgfQorI2VuZGlmCisKKyNpZmRlZiBBRVNfTE9ORwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHUzMjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCisjZGVmaW5lIE1BWEtDICAgKDI1Ni8zMikKKyNkZWZpbmUgTUFYS0IgICAoMjU2LzgpCisjZGVmaW5lIE1BWE5SICAgMTQKKworLyogVGhpcyBjb250cm9scyBsb29wLXVucm9sbGluZyBpbiBhZXNfY29yZS5jICovCisjdW5kZWYgRlVMTF9VTlJPTEwKKworI2VuZGlmIC8qICFIRUFERVJfQUVTX0xPQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWRmODMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMKQEAgLTAsMCArMSw2MSBAQAorLyogY3J5cHRvL2Rlcy9jYmNfZW5jLmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2RlZmluZSBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWCisKKyNpbmNsdWRlICJvcGVuc3NsX25jYmNfZW5jLmMiIC8qIGRlc19jYmNfZW5jcnlwdCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jZmIxMjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBiYzFlCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlICJvcGVuc3NsX21vZGVzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgTU9ERVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgU1RSSUNUX0FMSUdOTUVOVAorI2lmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBcCisgICAgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCisgICAgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgXAorICAgIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKQorIyAgdW5kZWYgU1RSSUNUX0FMSUdOTUVOVAorI2VuZGlmCisKKy8qIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGVuY3J5cHRlZCBhcyB0aG91Z2ggMTI4Yml0IGNmYiBtb2RlIGlzIGJlaW5nCisgKiB1c2VkLiAgVGhlIGV4dHJhIHN0YXRlIGluZm9ybWF0aW9uIHRvIHJlY29yZCBob3cgbXVjaCBvZiB0aGUKKyAqIDEyOGJpdCBibG9jayB3ZSBoYXZlIHVzZWQgaXMgY29udGFpbmVkIGluICpudW07CisgKi8KK3ZvaWQgQ1JZUFRPX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spCit7CisgICAgdW5zaWduZWQgaW50IG47CisgICAgc2l6ZV90IGwgPSAwOworCisgICAgYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOworCisgICAgbiA9ICpudW07CisKKyAgICBpZiAoZW5jKSB7CisjaWYgIWRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQpCisJaWYgKDE2JXNpemVvZihzaXplX3QpID09IDApIGRvIHsJLyogYWx3YXlzIHRydWUgYWN0dWFsbHkgKi8KKwkJd2hpbGUgKG4gJiYgbGVuKSB7CisJCQkqKG91dCsrKSA9IGl2ZWNbbl0gXj0gKihpbisrKTsKKwkJCS0tbGVuOworCQkJbiA9IChuKzEpICUgMTY7CisJCX0KKyNpZiBkZWZpbmVkKFNUUklDVF9BTElHTk1FTlQpCisJCWlmICgoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpJXNpemVvZihzaXplX3QpICE9IDApCisJCQlicmVhazsKKyNlbmRpZgorCQl3aGlsZSAobGVuPj0xNikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCWZvciAobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkgeworCQkJCSooc2l6ZV90Kikob3V0K24pID0KKwkJCQkqKHNpemVfdCopKGl2ZWMrbikgXj0gKihjb25zdCBzaXplX3QqKShpbituKTsKKwkJCX0KKwkJCWxlbiAtPSAxNjsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJfQorCQluID0gMDsKKwkJaWYgKGxlbikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCXdoaWxlIChsZW4tLSkgeworCQkJCW91dFtuXSA9IGl2ZWNbbl0gXj0gaW5bbl07CisJCQkJKytuOworCQkJfQorCQl9CisJCSpudW0gPSBuOworCQlyZXR1cm47CisJfSB3aGlsZSAoMCk7CisJLyogdGhlIHJlc3Qgd291bGQgYmUgY29tbW9ubHkgZWxpbWluYXRlZCBieSB4ODYqIGNvbXBpbGVyICovCisjZW5kaWYKKwl3aGlsZSAobDxsZW4pIHsKKwkJaWYgKG4gPT0gMCkgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJfQorCQlvdXRbbF0gPSBpdmVjW25dIF49IGluW2xdOworCQkrK2w7CisJCW4gPSAobisxKSAlIDE2OworCX0KKwkqbnVtID0gbjsKKyAgICB9IGVsc2UgeworI2lmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCWlmICgxNiVzaXplb2Yoc2l6ZV90KSA9PSAwKSBkbyB7CS8qIGFsd2F5cyB0cnVlIGFjdHVhbGx5ICovCisJCXdoaWxlIChuICYmIGxlbikgeworCQkJdW5zaWduZWQgY2hhciBjOworCQkJKihvdXQrKykgPSBpdmVjW25dIF4gKGMgPSAqKGluKyspKTsgaXZlY1tuXSA9IGM7CisJCQktLWxlbjsKKwkJCW4gPSAobisxKSAlIDE2OworIAkJfQorI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJaWYgKCgoc2l6ZV90KWlufChzaXplX3Qpb3V0fChzaXplX3QpaXZlYyklc2l6ZW9mKHNpemVfdCkgIT0gMCkKKwkJCWJyZWFrOworI2VuZGlmCisJCXdoaWxlIChsZW4+PTE2KSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJZm9yIChuPTA7IG48MTY7IG4rPXNpemVvZihzaXplX3QpKSB7CisJCQkJc2l6ZV90IHQgPSAqKGNvbnN0IHNpemVfdCopKGluK24pOworCQkJCSooc2l6ZV90Kikob3V0K24pID0gKihjb25zdCBzaXplX3QqKShpdmVjK24pIF4gdDsKKwkJCQkqKHNpemVfdCopKGl2ZWMrbikgPSB0OworCQkJfQorCQkJbGVuIC09IDE2OworCQkJb3V0ICs9IDE2OworCQkJaW4gICs9IDE2OworCQl9CisJCW4gPSAwOworCQlpZiAobGVuKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJdW5zaWduZWQgY2hhciBjOworCQkJCW91dFtuXSA9IGl2ZWNbbl0gXiAoYyA9IGluW25dKTsgaXZlY1tuXSA9IGM7CisJCQkJKytuOworCQkJfQorIAkJfQorCQkqbnVtID0gbjsKKwkJcmV0dXJuOworCX0gd2hpbGUgKDApOworCS8qIHRoZSByZXN0IHdvdWxkIGJlIGNvbW1vbmx5IGVsaW1pbmF0ZWQgYnkgeDg2KiBjb21waWxlciAqLworI2VuZGlmCisJd2hpbGUgKGw8bGVuKSB7CisJCXVuc2lnbmVkIGNoYXIgYzsKKwkJaWYgKG4gPT0gMCkgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJfQorCQlvdXRbbF0gPSBpdmVjW25dIF4gKGMgPSBpbltsXSk7IGl2ZWNbbl0gPSBjOworCQkrK2w7CisJCW4gPSAobisxKSAlIDE2OworCX0KKwkqbnVtPW47CisgICAgfQorfQorCisvKiBUaGlzIGV4cGVjdHMgYSBzaW5nbGUgYmxvY2sgb2Ygc2l6ZSBuYml0cyBmb3IgYm90aCBpbiBhbmQgb3V0LiBOb3RlIHRoYXQKKyAgIGl0IGNvcnJ1cHRzIGFueSBleHRyYSBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgb2Ygb3V0ICovCitzdGF0aWMgdm9pZCBjZmJyX2VuY3J5cHRfYmxvY2soY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LAorCQkJICAgIGludCBuYml0cyxjb25zdCB2b2lkICprZXksCisJCQkgICAgdW5zaWduZWQgY2hhciBpdmVjWzE2XSxpbnQgZW5jLAorCQkJICAgIGJsb2NrMTI4X2YgYmxvY2spCit7CisgICAgaW50IG4scmVtLG51bTsKKyAgICB1bnNpZ25lZCBjaGFyIG92ZWNbMTYqMiArIDFdOyAgLyogKzEgYmVjYXVzZSB3ZSBkZXJlcmVmZW5jZSAoYnV0IGRvbid0IHVzZSkgb25lIGJ5dGUgb2ZmIHRoZSBlbmQgKi8KKworICAgIGlmIChuYml0czw9MCB8fCBuYml0cz4xMjgpIHJldHVybjsKKworCS8qIGZpbGwgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIG5ldyBJViB3aXRoIHRoZSBjdXJyZW50IElWICovCisJbWVtY3B5KG92ZWMsaXZlYywxNik7CisJLyogY29uc3RydWN0IHRoZSBuZXcgSVYgKi8KKwkoKmJsb2NrKShpdmVjLGl2ZWMsa2V5KTsKKwludW0gPSAobmJpdHMrNykvODsKKwlpZiAoZW5jKQkvKiBlbmNyeXB0IHRoZSBpbnB1dCAqLworCSAgICBmb3Iobj0wIDsgbiA8IG51bSA7ICsrbikKKwkJb3V0W25dID0gKG92ZWNbMTYrbl0gPSBpbltuXSBeIGl2ZWNbbl0pOworCWVsc2UJCS8qIGRlY3J5cHQgdGhlIGlucHV0ICovCisJICAgIGZvcihuPTAgOyBuIDwgbnVtIDsgKytuKQorCQlvdXRbbl0gPSAob3ZlY1sxNituXSA9IGluW25dKSBeIGl2ZWNbbl07CisJLyogc2hpZnQgb3ZlYyBsZWZ0Li4uICovCisJcmVtID0gbmJpdHMlODsKKwludW0gPSBuYml0cy84OworCWlmKHJlbT09MCkKKwkgICAgbWVtY3B5KGl2ZWMsb3ZlYytudW0sMTYpOworCWVsc2UKKwkgICAgZm9yKG49MCA7IG4gPCAxNiA7ICsrbikKKwkJaXZlY1tuXSA9IG92ZWNbbitudW1dPDxyZW0gfCBvdmVjW24rbnVtKzFdPj4oOC1yZW0pOworCisgICAgLyogaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjbGVhbnNlIG92ZWMsIHNpbmNlIHRoZSBJViBpcyBub3Qgc2VjcmV0ICovCit9CisKKy8qIE4uQi4gVGhpcyBleHBlY3RzIHRoZSBpbnB1dCB0byBiZSBwYWNrZWQsIE1TIGJpdCBmaXJzdCAqLwordm9pZCBDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgCXNpemVfdCBiaXRzLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spCit7CisgICAgc2l6ZV90IG47CisgICAgdW5zaWduZWQgY2hhciBjWzFdLGRbMV07CisKKyAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisgICAgYXNzZXJ0KCpudW0gPT0gMCk7CisKKyAgICBtZW1zZXQob3V0LDAsKGJpdHMrNykvOCk7CisgICAgZm9yKG49MCA7IG48Yml0cyA7ICsrbikKKwl7CisJY1swXT0oaW5bbi84XSYoMSA8PCAoNy1uJTgpKSkgPyAweDgwIDogMDsKKwljZmJyX2VuY3J5cHRfYmxvY2soYyxkLDEsa2V5LGl2ZWMsZW5jLGJsb2NrKTsKKwlvdXRbbi84XT0ob3V0W24vOF0mfigxIDw8ICh1bnNpZ25lZCBpbnQpKDctbiU4KSkpIHwKKwkJICgoZFswXSYweDgwKSA+PiAodW5zaWduZWQgaW50KShuJTgpKTsKKwl9Cit9CisKK3ZvaWQgQ1JZUFRPX2NmYjEyOF84X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICBzaXplX3QgbjsKKworICAgIGFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKKyAgICBhc3NlcnQoKm51bSA9PSAwKTsKKworICAgIGZvcihuPTAgOyBuPGxlbmd0aCA7ICsrbikKKwljZmJyX2VuY3J5cHRfYmxvY2soJmluW25dLCZvdXRbbl0sOCxrZXksaXZlYyxlbmMsYmxvY2spOworfQorCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3MGY5YwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYwpAQCAtMCwwICsxLDQwMCBAQAorLyogY3J5cHRvL2Rlcy9kZXNfZW5jLmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2luY2x1ZGUgIm9wZW5zc2xfZGVzX2xvY2FsLmgiCisjaW5jbHVkZSAib3BlbnNzbF9zcHIuaCIKKwordm9pZCBERVNfZW5jcnlwdDEoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzLCBpbnQgZW5jKQorCXsKKwlyZWdpc3RlciBERVNfTE9ORyBsLHIsdCx1OworI2lmZGVmIERFU19QVFIKKwlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNfU1A9KGNvbnN0IHVuc2lnbmVkIGNoYXIgKilERVNfU1B0cmFuczsKKyNlbmRpZgorI2lmbmRlZiBERVNfVU5ST0xMCisJcmVnaXN0ZXIgaW50IGk7CisjZW5kaWYKKwlyZWdpc3RlciBERVNfTE9ORyAqczsKKworCXI9ZGF0YVswXTsKKwlsPWRhdGFbMV07CisKKwlJUChyLGwpOworCS8qIFRoaW5ncyBoYXZlIGJlZW4gbW9kaWZpZWQgc28gdGhhdCB0aGUgaW5pdGlhbCByb3RhdGUgaXMKKwkgKiBkb25lIG91dHNpZGUgdGhlIGxvb3AuICBUaGlzIHJlcXVpcmVkIHRoZQorCSAqIERFU19TUHRyYW5zIHZhbHVlcyBpbiBzcC5oIHRvIGJlIHJvdGF0ZWQgMSBiaXQgdG8gdGhlIHJpZ2h0LgorCSAqIE9uZSBwZXJsIHNjcmlwdCBsYXRlciBhbmQgdGhpbmdzIGhhdmUgYSA1JSBzcGVlZCB1cCBvbiBhIHNwYXJjMi4KKwkgKiBUaGFua3MgdG8gUmljaGFyZCBPdXRlcmJyaWRnZSA8NzE3NTUuMjA0QENvbXB1U2VydmUuQ09NPgorCSAqIGZvciBwb2ludGluZyB0aGlzIG91dC4gKi8KKwkvKiBjbGVhciB0aGUgdG9wIGJpdHMgb24gbWFjaGluZXMgd2l0aCA4Ynl0ZSBsb25ncyAqLworCS8qIHNoaWZ0IGxlZnQgYnkgMiAqLworCXI9Uk9UQVRFKHIsMjkpJjB4ZmZmZmZmZmZMOworCWw9Uk9UQVRFKGwsMjkpJjB4ZmZmZmZmZmZMOworCisJcz1rcy0+a3MtPmRlc2xvbmc7CisJLyogSSBkb24ndCBrbm93IGlmIGl0IGlzIHdvcnRoIHRoZSBlZmZvcnQgb2YgbG9vcCB1bnJvbGxpbmcgdGhlCisJICogaW5uZXIgbG9vcCAqLworCWlmIChlbmMpCisJCXsKKyNpZmRlZiBERVNfVU5ST0xMCisJCURfRU5DUllQVChsLHIsIDApOyAvKiAgMSAqLworCQlEX0VOQ1JZUFQocixsLCAyKTsgLyogIDIgKi8KKwkJRF9FTkNSWVBUKGwsciwgNCk7IC8qICAzICovCisJCURfRU5DUllQVChyLGwsIDYpOyAvKiAgNCAqLworCQlEX0VOQ1JZUFQobCxyLCA4KTsgLyogIDUgKi8KKwkJRF9FTkNSWVBUKHIsbCwxMCk7IC8qICA2ICovCisJCURfRU5DUllQVChsLHIsMTIpOyAvKiAgNyAqLworCQlEX0VOQ1JZUFQocixsLDE0KTsgLyogIDggKi8KKwkJRF9FTkNSWVBUKGwsciwxNik7IC8qICA5ICovCisJCURfRU5DUllQVChyLGwsMTgpOyAvKiAgMTAgKi8KKwkJRF9FTkNSWVBUKGwsciwyMCk7IC8qICAxMSAqLworCQlEX0VOQ1JZUFQocixsLDIyKTsgLyogIDEyICovCisJCURfRU5DUllQVChsLHIsMjQpOyAvKiAgMTMgKi8KKwkJRF9FTkNSWVBUKHIsbCwyNik7IC8qICAxNCAqLworCQlEX0VOQ1JZUFQobCxyLDI4KTsgLyogIDE1ICovCisJCURfRU5DUllQVChyLGwsMzApOyAvKiAgMTYgKi8KKyNlbHNlCisJCWZvciAoaT0wOyBpPDMyOyBpKz00KQorCQkJeworCQkJRF9FTkNSWVBUKGwscixpKzApOyAvKiAgMSAqLworCQkJRF9FTkNSWVBUKHIsbCxpKzIpOyAvKiAgMiAqLworCQkJfQorI2VuZGlmCisJCX0KKwllbHNlCisJCXsKKyNpZmRlZiBERVNfVU5ST0xMCisJCURfRU5DUllQVChsLHIsMzApOyAvKiAxNiAqLworCQlEX0VOQ1JZUFQocixsLDI4KTsgLyogMTUgKi8KKwkJRF9FTkNSWVBUKGwsciwyNik7IC8qIDE0ICovCisJCURfRU5DUllQVChyLGwsMjQpOyAvKiAxMyAqLworCQlEX0VOQ1JZUFQobCxyLDIyKTsgLyogMTIgKi8KKwkJRF9FTkNSWVBUKHIsbCwyMCk7IC8qIDExICovCisJCURfRU5DUllQVChsLHIsMTgpOyAvKiAxMCAqLworCQlEX0VOQ1JZUFQocixsLDE2KTsgLyogIDkgKi8KKwkJRF9FTkNSWVBUKGwsciwxNCk7IC8qICA4ICovCisJCURfRU5DUllQVChyLGwsMTIpOyAvKiAgNyAqLworCQlEX0VOQ1JZUFQobCxyLDEwKTsgLyogIDYgKi8KKwkJRF9FTkNSWVBUKHIsbCwgOCk7IC8qICA1ICovCisJCURfRU5DUllQVChsLHIsIDYpOyAvKiAgNCAqLworCQlEX0VOQ1JZUFQocixsLCA0KTsgLyogIDMgKi8KKwkJRF9FTkNSWVBUKGwsciwgMik7IC8qICAyICovCisJCURfRU5DUllQVChyLGwsIDApOyAvKiAgMSAqLworI2Vsc2UKKwkJZm9yIChpPTMwOyBpPjA7IGktPTQpCisJCQl7CisJCQlEX0VOQ1JZUFQobCxyLGktMCk7IC8qIDE2ICovCisJCQlEX0VOQ1JZUFQocixsLGktMik7IC8qIDE1ICovCisJCQl9CisjZW5kaWYKKwkJfQorCisJLyogcm90YXRlIGFuZCBjbGVhciB0aGUgdG9wIGJpdHMgb24gbWFjaGluZXMgd2l0aCA4Ynl0ZSBsb25ncyAqLworCWw9Uk9UQVRFKGwsMykmMHhmZmZmZmZmZkw7CisJcj1ST1RBVEUociwzKSYweGZmZmZmZmZmTDsKKworCUZQKHIsbCk7CisJZGF0YVswXT1sOworCWRhdGFbMV09cjsKKwlsPXI9dD11PTA7CisJfQorCit2b2lkIERFU19lbmNyeXB0MihERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MsIGludCBlbmMpCisJeworCXJlZ2lzdGVyIERFU19MT05HIGwscix0LHU7CisjaWZkZWYgREVTX1BUUgorCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc19TUD0oY29uc3QgdW5zaWduZWQgY2hhciAqKURFU19TUHRyYW5zOworI2VuZGlmCisjaWZuZGVmIERFU19VTlJPTEwKKwlyZWdpc3RlciBpbnQgaTsKKyNlbmRpZgorCXJlZ2lzdGVyIERFU19MT05HICpzOworCisJcj1kYXRhWzBdOworCWw9ZGF0YVsxXTsKKworCS8qIFRoaW5ncyBoYXZlIGJlZW4gbW9kaWZpZWQgc28gdGhhdCB0aGUgaW5pdGlhbCByb3RhdGUgaXMKKwkgKiBkb25lIG91dHNpZGUgdGhlIGxvb3AuICBUaGlzIHJlcXVpcmVkIHRoZQorCSAqIERFU19TUHRyYW5zIHZhbHVlcyBpbiBzcC5oIHRvIGJlIHJvdGF0ZWQgMSBiaXQgdG8gdGhlIHJpZ2h0LgorCSAqIE9uZSBwZXJsIHNjcmlwdCBsYXRlciBhbmQgdGhpbmdzIGhhdmUgYSA1JSBzcGVlZCB1cCBvbiBhIHNwYXJjMi4KKwkgKiBUaGFua3MgdG8gUmljaGFyZCBPdXRlcmJyaWRnZSA8NzE3NTUuMjA0QENvbXB1U2VydmUuQ09NPgorCSAqIGZvciBwb2ludGluZyB0aGlzIG91dC4gKi8KKwkvKiBjbGVhciB0aGUgdG9wIGJpdHMgb24gbWFjaGluZXMgd2l0aCA4Ynl0ZSBsb25ncyAqLworCXI9Uk9UQVRFKHIsMjkpJjB4ZmZmZmZmZmZMOworCWw9Uk9UQVRFKGwsMjkpJjB4ZmZmZmZmZmZMOworCisJcz1rcy0+a3MtPmRlc2xvbmc7CisJLyogSSBkb24ndCBrbm93IGlmIGl0IGlzIHdvcnRoIHRoZSBlZmZvcnQgb2YgbG9vcCB1bnJvbGxpbmcgdGhlCisJICogaW5uZXIgbG9vcCAqLworCWlmIChlbmMpCisJCXsKKyNpZmRlZiBERVNfVU5ST0xMCisJCURfRU5DUllQVChsLHIsIDApOyAvKiAgMSAqLworCQlEX0VOQ1JZUFQocixsLCAyKTsgLyogIDIgKi8KKwkJRF9FTkNSWVBUKGwsciwgNCk7IC8qICAzICovCisJCURfRU5DUllQVChyLGwsIDYpOyAvKiAgNCAqLworCQlEX0VOQ1JZUFQobCxyLCA4KTsgLyogIDUgKi8KKwkJRF9FTkNSWVBUKHIsbCwxMCk7IC8qICA2ICovCisJCURfRU5DUllQVChsLHIsMTIpOyAvKiAgNyAqLworCQlEX0VOQ1JZUFQocixsLDE0KTsgLyogIDggKi8KKwkJRF9FTkNSWVBUKGwsciwxNik7IC8qICA5ICovCisJCURfRU5DUllQVChyLGwsMTgpOyAvKiAgMTAgKi8KKwkJRF9FTkNSWVBUKGwsciwyMCk7IC8qICAxMSAqLworCQlEX0VOQ1JZUFQocixsLDIyKTsgLyogIDEyICovCisJCURfRU5DUllQVChsLHIsMjQpOyAvKiAgMTMgKi8KKwkJRF9FTkNSWVBUKHIsbCwyNik7IC8qICAxNCAqLworCQlEX0VOQ1JZUFQobCxyLDI4KTsgLyogIDE1ICovCisJCURfRU5DUllQVChyLGwsMzApOyAvKiAgMTYgKi8KKyNlbHNlCisJCWZvciAoaT0wOyBpPDMyOyBpKz00KQorCQkJeworCQkJRF9FTkNSWVBUKGwscixpKzApOyAvKiAgMSAqLworCQkJRF9FTkNSWVBUKHIsbCxpKzIpOyAvKiAgMiAqLworCQkJfQorI2VuZGlmCisJCX0KKwllbHNlCisJCXsKKyNpZmRlZiBERVNfVU5ST0xMCisJCURfRU5DUllQVChsLHIsMzApOyAvKiAxNiAqLworCQlEX0VOQ1JZUFQocixsLDI4KTsgLyogMTUgKi8KKwkJRF9FTkNSWVBUKGwsciwyNik7IC8qIDE0ICovCisJCURfRU5DUllQVChyLGwsMjQpOyAvKiAxMyAqLworCQlEX0VOQ1JZUFQobCxyLDIyKTsgLyogMTIgKi8KKwkJRF9FTkNSWVBUKHIsbCwyMCk7IC8qIDExICovCisJCURfRU5DUllQVChsLHIsMTgpOyAvKiAxMCAqLworCQlEX0VOQ1JZUFQocixsLDE2KTsgLyogIDkgKi8KKwkJRF9FTkNSWVBUKGwsciwxNCk7IC8qICA4ICovCisJCURfRU5DUllQVChyLGwsMTIpOyAvKiAgNyAqLworCQlEX0VOQ1JZUFQobCxyLDEwKTsgLyogIDYgKi8KKwkJRF9FTkNSWVBUKHIsbCwgOCk7IC8qICA1ICovCisJCURfRU5DUllQVChsLHIsIDYpOyAvKiAgNCAqLworCQlEX0VOQ1JZUFQocixsLCA0KTsgLyogIDMgKi8KKwkJRF9FTkNSWVBUKGwsciwgMik7IC8qICAyICovCisJCURfRU5DUllQVChyLGwsIDApOyAvKiAgMSAqLworI2Vsc2UKKwkJZm9yIChpPTMwOyBpPjA7IGktPTQpCisJCQl7CisJCQlEX0VOQ1JZUFQobCxyLGktMCk7IC8qIDE2ICovCisJCQlEX0VOQ1JZUFQocixsLGktMik7IC8qIDE1ICovCisJCQl9CisjZW5kaWYKKwkJfQorCS8qIHJvdGF0ZSBhbmQgY2xlYXIgdGhlIHRvcCBiaXRzIG9uIG1hY2hpbmVzIHdpdGggOGJ5dGUgbG9uZ3MgKi8KKwlkYXRhWzBdPVJPVEFURShsLDMpJjB4ZmZmZmZmZmZMOworCWRhdGFbMV09Uk9UQVRFKHIsMykmMHhmZmZmZmZmZkw7CisJbD1yPXQ9dT0wOworCX0KKwordm9pZCBERVNfZW5jcnlwdDMoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJICBERVNfa2V5X3NjaGVkdWxlICprczIsIERFU19rZXlfc2NoZWR1bGUgKmtzMykKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgbCxyOworCisJbD1kYXRhWzBdOworCXI9ZGF0YVsxXTsKKwlJUChsLHIpOworCWRhdGFbMF09bDsKKwlkYXRhWzFdPXI7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MxLERFU19FTkNSWVBUKTsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczIsREVTX0RFQ1JZUFQpOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMyxERVNfRU5DUllQVCk7CisJbD1kYXRhWzBdOworCXI9ZGF0YVsxXTsKKwlGUChyLGwpOworCWRhdGFbMF09bDsKKwlkYXRhWzFdPXI7CisJfQorCit2b2lkIERFU19kZWNyeXB0MyhERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMiwgREVTX2tleV9zY2hlZHVsZSAqa3MzKQorCXsKKwlyZWdpc3RlciBERVNfTE9ORyBsLHI7CisKKwlsPWRhdGFbMF07CisJcj1kYXRhWzFdOworCUlQKGwscik7CisJZGF0YVswXT1sOworCWRhdGFbMV09cjsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczMsREVTX0RFQ1JZUFQpOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMixERVNfRU5DUllQVCk7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MxLERFU19ERUNSWVBUKTsKKwlsPWRhdGFbMF07CisJcj1kYXRhWzFdOworCUZQKHIsbCk7CisJZGF0YVswXT1sOworCWRhdGFbMV09cjsKKwl9CisKKyNpZm5kZWYgREVTX0RFRkFVTFRfT1BUSU9OUworCisjdW5kZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgorI2luY2x1ZGUgIm9wZW5zc2xfbmNiY19lbmMuYyIgLyogREVTX25jYmNfZW5jcnlwdCAqLworCit2b2lkIERFU19lZGUzX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCQkgIGxvbmcgbGVuZ3RoLCBERVNfa2V5X3NjaGVkdWxlICprczEsCisJCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMiwgREVTX2tleV9zY2hlZHVsZSAqa3MzLAorCQkJICBERVNfY2Jsb2NrICppdmVjLCBpbnQgZW5jKQorCXsKKwlyZWdpc3RlciBERVNfTE9ORyB0aW4wLHRpbjE7CisJcmVnaXN0ZXIgREVTX0xPTkcgdG91dDAsdG91dDEseG9yMCx4b3IxOworCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKwlyZWdpc3RlciBsb25nIGw9bGVuZ3RoOworCURFU19MT05HIHRpblsyXTsKKwl1bnNpZ25lZCBjaGFyICppdjsKKworCWluPWlucHV0OworCW91dD1vdXRwdXQ7CisJaXYgPSAmKCppdmVjKVswXTsKKworCWlmIChlbmMpCisJCXsKKwkJYzJsKGl2LHRvdXQwKTsKKwkJYzJsKGl2LHRvdXQxKTsKKwkJZm9yIChsLT04OyBsPj0wOyBsLT04KQorCQkJeworCQkJYzJsKGluLHRpbjApOworCQkJYzJsKGluLHRpbjEpOworCQkJdGluMF49dG91dDA7CisJCQl0aW4xXj10b3V0MTsKKworCQkJdGluWzBdPXRpbjA7CisJCQl0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MygoREVTX0xPTkcgKil0aW4sa3MxLGtzMixrczMpOworCQkJdG91dDA9dGluWzBdOworCQkJdG91dDE9dGluWzFdOworCisJCQlsMmModG91dDAsb3V0KTsKKwkJCWwyYyh0b3V0MSxvdXQpOworCQkJfQorCQlpZiAobCAhPSAtOCkKKwkJCXsKKwkJCWMybG4oaW4sdGluMCx0aW4xLGwrOCk7CisJCQl0aW4wXj10b3V0MDsKKwkJCXRpbjFePXRvdXQxOworCisJCQl0aW5bMF09dGluMDsKKwkJCXRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQzKChERVNfTE9ORyAqKXRpbixrczEsa3MyLGtzMyk7CisJCQl0b3V0MD10aW5bMF07CisJCQl0b3V0MT10aW5bMV07CisKKwkJCWwyYyh0b3V0MCxvdXQpOworCQkJbDJjKHRvdXQxLG91dCk7CisJCQl9CisJCWl2ID0gJigqaXZlYylbMF07CisJCWwyYyh0b3V0MCxpdik7CisJCWwyYyh0b3V0MSxpdik7CisJCX0KKwllbHNlCisJCXsKKwkJcmVnaXN0ZXIgREVTX0xPTkcgdDAsdDE7CisKKwkJYzJsKGl2LHhvcjApOworCQljMmwoaXYseG9yMSk7CisJCWZvciAobC09ODsgbD49MDsgbC09OCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsKKwkJCWMybChpbix0aW4xKTsKKworCQkJdDA9dGluMDsKKwkJCXQxPXRpbjE7CisKKwkJCXRpblswXT10aW4wOworCQkJdGluWzFdPXRpbjE7CisJCQlERVNfZGVjcnlwdDMoKERFU19MT05HICopdGluLGtzMSxrczIsa3MzKTsKKwkJCXRvdXQwPXRpblswXTsKKwkJCXRvdXQxPXRpblsxXTsKKworCQkJdG91dDBePXhvcjA7CisJCQl0b3V0MV49eG9yMTsKKwkJCWwyYyh0b3V0MCxvdXQpOworCQkJbDJjKHRvdXQxLG91dCk7CisJCQl4b3IwPXQwOworCQkJeG9yMT10MTsKKwkJCX0KKwkJaWYgKGwgIT0gLTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7CisJCQljMmwoaW4sdGluMSk7CisJCQkKKwkJCXQwPXRpbjA7CisJCQl0MT10aW4xOworCisJCQl0aW5bMF09dGluMDsKKwkJCXRpblsxXT10aW4xOworCQkJREVTX2RlY3J5cHQzKChERVNfTE9ORyAqKXRpbixrczEsa3MyLGtzMyk7CisJCQl0b3V0MD10aW5bMF07CisJCQl0b3V0MT10aW5bMV07CisJCQorCQkJdG91dDBePXhvcjA7CisJCQl0b3V0MV49eG9yMTsKKwkJCWwyY24odG91dDAsdG91dDEsb3V0LGwrOCk7CisJCQl4b3IwPXQwOworCQkJeG9yMT10MTsKKwkJCX0KKworCQlpdiA9ICYoKml2ZWMpWzBdOworCQlsMmMoeG9yMCxpdik7CisJCWwyYyh4b3IxLGl2KTsKKwkJfQorCXRpbjA9dGluMT10b3V0MD10b3V0MT14b3IwPXhvcjE9MDsKKwl0aW5bMF09dGluWzFdPTA7CisJfQorCisjZW5kaWYgLyogREVTX0RFRkFVTFRfT1BUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTFkODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qIGNyeXB0by9kZXMvZGVzX2xvY2wuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaWZuZGVmIEhFQURFUl9ERVNfTE9DTF9ICisjZGVmaW5lIEhFQURFUl9ERVNfTE9DTF9ICisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKQorI2lmbmRlZiBPUEVOU1NMX1NZU19NU0RPUworI2RlZmluZSBPUEVOU1NMX1NZU19NU0RPUworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZm5kZWYgT1BFTlNTTF9TWVNfTVNET1MKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoX19ERUNDKQorI2lmZGVmIE9QRU5TU0xfVU5JU1RECisjIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bWF0aC5oPgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaD4KKworI2lmZGVmIE9QRU5TU0xfU1lTX01TRE9TCQkvKiBWaXN1YWwgQysrIDIuMSAoV2luZG93cyBOVC85NSkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChNX1hFTklYKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX0JVSUxEX1NITElCQ1JZUFRPCisjIHVuZGVmIE9QRU5TU0xfRVhURVJOCisjIGRlZmluZSBPUEVOU1NMX0VYVEVSTiBPUEVOU1NMX0VYUE9SVAorI2VuZGlmCisKKyNkZWZpbmUgSVRFUkFUSU9OUyAxNgorI2RlZmluZSBIQUxGX0lURVJBVElPTlMgOAorCisvKiB1c2VkIGluIGRlc19yZWFkIGFuZCBkZXNfd3JpdGUgKi8KKyNkZWZpbmUgTUFYV1JJVEUJKDEwMjQqMTYpCisjZGVmaW5lIEJTSVpFCQkoTUFYV1JJVEUrNCkKKworI2RlZmluZSBjMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigoYykrKykpKSAgICAsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpPDwgOEwsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpPDwxNkwsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpPDwyNEwpCisKKy8qIE5PVEUgLSBjIGlzIG5vdCBpbmNyZW1lbnRlZCBhcyBwZXIgYzJsICovCisjZGVmaW5lIGMybG4oYyxsMSxsMixuKQl7IFwKKwkJCWMrPW47IFwKKwkJCWwxPWwyPTA7IFwKKwkJCXN3aXRjaCAobikgeyBcCisJCQljYXNlIDg6IGwyID0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwyNEw7IFwKKwkJCWNhc2UgNzogbDJ8PSgoREVTX0xPTkcpKCooLS0oYykpKSk8PDE2TDsgXAorCQkJY2FzZSA2OiBsMnw9KChERVNfTE9ORykoKigtLShjKSkpKTw8IDhMOyBcCisJCQljYXNlIDU6IGwyfD0oKERFU19MT05HKSgqKC0tKGMpKSkpOyAgICAgXAorCQkJY2FzZSA0OiBsMSA9KChERVNfTE9ORykoKigtLShjKSkpKTw8MjRMOyBcCisJCQljYXNlIDM6IGwxfD0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwxNkw7IFwKKwkJCWNhc2UgMjogbDF8PSgoREVTX0xPTkcpKCooLS0oYykpKSk8PCA4TDsgXAorCQkJY2FzZSAxOiBsMXw9KChERVNfTE9ORykoKigtLShjKSkpKTsgICAgIFwKKwkJCQl9IFwKKwkJCX0KKworI2RlZmluZSBsMmMobCxjKQkoKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCkgICAgICkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+IDhMKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4xNkwpJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0TCkmMHhmZikpCisKKy8qIHJlcGxhY2VtZW50cyBmb3IgaHRvbmwgYW5kIG50b2hsIHNpbmNlIEkgaGF2ZSBubyBpZGVhIHdoYXQgdG8gZG8KKyAqIHdoZW4gZmFjZWQgd2l0aCBtYWNoaW5lcyB3aXRoIDggYnl0ZSBsb25ncy4gKi8KKyNkZWZpbmUgSERSU0laRSA0CisKKyNkZWZpbmUgbjJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSk8PDI0TCwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSk8PDE2TCwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSk8PCA4TCwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSkpCisKKyNkZWZpbmUgbDJuKGwsYykJKCooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjE2TCkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+IDhMKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpICAgICApJjB4ZmYpKQorCisvKiBOT1RFIC0gYyBpcyBub3QgaW5jcmVtZW50ZWQgYXMgcGVyIGwyYyAqLworI2RlZmluZSBsMmNuKGwxLGwyLGMsbikJeyBcCisJCQljKz1uOyBcCisJCQlzd2l0Y2ggKG4pIHsgXAorCQkJY2FzZSA4OiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMik+PjI0TCkmMHhmZik7IFwKKwkJCWNhc2UgNzogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDIpPj4xNkwpJjB4ZmYpOyBcCisJCQljYXNlIDY6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwyKT4+IDhMKSYweGZmKTsgXAorCQkJY2FzZSA1OiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMikgICAgICkmMHhmZik7IFwKKwkJCWNhc2UgNDogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDEpPj4yNEwpJjB4ZmYpOyBcCisJCQljYXNlIDM6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwxKT4+MTZMKSYweGZmKTsgXAorCQkJY2FzZSAyOiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMSk+PiA4TCkmMHhmZik7IFwKKwkJCWNhc2UgMTogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDEpICAgICApJjB4ZmYpOyBcCisJCQkJfSBcCisJCQl9CisKKyNpZiAoZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgJiYgZGVmaW5lZChfTVNDX1ZFUikpIHx8IGRlZmluZWQoX19JQ0MpCisjZGVmaW5lCVJPVEFURShhLG4pCShfbHJvdHIoYSxuKSkKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkgJiYgIWRlZmluZWQoUEVEQU5USUMpCisjIGlmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjICBkZWZpbmUgUk9UQVRFKGEsbikJKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldDsJXAorCQkJCWFzbSAoInJvcmwgJTEsJTAiCVwKKwkJCQkJOiAiPXIiKHJldCkJXAorCQkJCQk6ICJJIihuKSwiMCIoYSkJXAorCQkJCQk6ICJjYyIpOwlcCisJCQkgICByZXQ7CQkJCVwKKwkJCX0pCisjIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgUk9UQVRFCisjZGVmaW5lCVJPVEFURShhLG4pCSgoKGEpPj4obikpKygoYSk8PCgzMi0obikpKSkKKyNlbmRpZgorCisvKiBEb24ndCB3b3JyeSBhYm91dCB0aGUgTE9BRF9EQVRBKCkgc3R1ZmYsIHRoYXQgaXMgdXNlZCBieQorICogZmNyeXB0KCkgdG8gYWRkIGl0J3MgbGl0dGxlIGJpdCB0byB0aGUgZnJvbnQgKi8KKworI2lmZGVmIERFU19GQ1JZUFQKKworI2RlZmluZSBMT0FEX0RBVEFfdG1wKFIsUyx1LHQsRTAsRTEpIFwKKwl7IERFU19MT05HIHRtcDsgTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdG1wKTsgfQorCisjZGVmaW5lIExPQURfREFUQShSLFMsdSx0LEUwLEUxLHRtcCkgXAorCXQ9Ul4oUj4+MTZMKTsgXAorCXU9dCZFMDsgdCY9RTE7IFwKKwl0bXA9KHU8PDE2KTsgdV49Ul5zW1MgIF07IHVePXRtcDsgXAorCXRtcD0odDw8MTYpOyB0Xj1SXnNbUysxXTsgdF49dG1wCisjZWxzZQorI2RlZmluZSBMT0FEX0RBVEFfdG1wKGEsYixjLGQsZSxmKSBMT0FEX0RBVEEoYSxiLGMsZCxlLGYsZykKKyNkZWZpbmUgTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdG1wKSBcCisJdT1SXnNbUyAgXTsgXAorCXQ9Ul5zW1MrMV0KKyNlbmRpZgorCisvKiBUaGUgY2hhbmdlcyB0byB0aGlzIG1hY3JvIG1heSBoZWxwIG9yIGhpbmRlciwgZGVwZW5kaW5nIG9uIHRoZQorICogY29tcGlsZXIgYW5kIHRoZSBhcmNoaXRlY3R1cmUuICBnY2MyIGFsd2F5cyBzZWVtcyB0byBkbyB3ZWxsIDotKS4KKyAqIEluc3BpcmVkIGJ5IERhbmEgSG93IDxob3dAaXNsLnN0YW5mb3JkLmVkdT4KKyAqIERPIE5PVCB1c2UgdGhlIGFsdGVybmF0aXZlIHZlcnNpb24gb24gbWFjaGluZXMgd2l0aCA4IGJ5dGUgbG9uZ3MuCisgKiBJdCBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgb24gdGhlIEFscGhhLCBldmVuIHdoZW4gREVTX0xPTkcgaXMgNAorICogYnl0ZXMsIHByb2JhYmx5IGFuIGlzc3VlIG9mIGFjY2Vzc2luZyBub24td29yZCBhbGlnbmVkIG9iamVjdHMgOi0oICovCisjaWZkZWYgREVTX1BUUgorCisvKiBJdCByZWNlbnRseSBvY2N1cnJlZCB0byBtZSB0aGF0IDBeMF4wXjBeMF4wXjAgPT0gMCwgc28gdGhlcmUKKyAqIGlzIG5vIHJlYXNvbiB0byBub3QgeG9yIGFsbCB0aGUgc3ViIGl0ZW1zIHRvZ2V0aGVyLiAgVGhpcyBwb3RlbnRpYWxseQorICogc2F2ZXMgYSByZWdpc3RlciBzaW5jZSB0aGluZ3MgY2FuIGJlIHhvcmVkIGRpcmVjdGx5IGludG8gTCAqLworCisjaWYgZGVmaW5lZChERVNfUklTQzEpIHx8IGRlZmluZWQoREVTX1JJU0MyKQorI2lmZGVmIERFU19SSVNDMQorI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7IFwKKwl1bnNpZ25lZCBpbnQgdTEsdTIsdTM7IFwKKwlMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx1MSk7IFwKKwl1Mj0oaW50KXU+PjhMOyBcCisJdTE9KGludCl1JjB4ZmM7IFwKKwl1MiY9MHhmYzsgXAorCXQ9Uk9UQVRFKHQsNCk7IFwKKwl1Pj49MTZMOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCAgICAgICt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MjAwK3UyKTsgXAorCXUzPShpbnQpKHU+PjhMKTsgXAorCXUxPShpbnQpdSYweGZjOyBcCisJdTMmPTB4ZmM7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NDAwK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg2MDArdTMpOyBcCisJdTI9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweGZjOyBcCisJdTImPTB4ZmM7IFwKKwl0Pj49MTZMOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDEwMCt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MzAwK3UyKTsgXAorCXUzPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHhmYzsgXAorCXUzJj0weGZjOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDUwMCt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NzAwK3UzKTsgfQorI2VuZGlmCisjaWZkZWYgREVTX1JJU0MyCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHsgXAorCXVuc2lnbmVkIGludCB1MSx1MixzMSxzMjsgXAorCUxPQURfREFUQShSLFMsdSx0LEUwLEUxLHUxKTsgXAorCXUyPShpbnQpdT4+OEw7IFwKKwl1MT0oaW50KXUmMHhmYzsgXAorCXUyJj0weGZjOyBcCisJdD1ST1RBVEUodCw0KTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1AgICAgICArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDIwMCt1Mik7IFwKKwlzMT0oaW50KSh1Pj4xNkwpOyBcCisJczI9KGludCkodT4+MjRMKTsgXAorCXMxJj0weGZjOyBcCisJczImPTB4ZmM7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NDAwK3MxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg2MDArczIpOyBcCisJdTI9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweGZjOyBcCisJdTImPTB4ZmM7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MTAwK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgzMDArdTIpOyBcCisJczE9KGludCkodD4+MTZMKTsgXAorCXMyPShpbnQpKHQ+PjI0TCk7IFwKKwlzMSY9MHhmYzsgXAorCXMyJj0weGZjOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDUwMCtzMSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NzAwK3MyKTsgfQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7IFwKKwlMT0FEX0RBVEFfdG1wKFIsUyx1LHQsRTAsRTEpOyBcCisJdD1ST1RBVEUodCw0KTsgXAorCUxMXj0gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQICAgICAgKygodSAgICAgKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDIwMCsoKHU+PiA4TCkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg0MDArKCh1Pj4xNkwpJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NjAwKygodT4+MjRMKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDEwMCsoKHQgICAgICkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgzMDArKCh0Pj4gOEwpJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NTAwKygodD4+MTZMKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDcwMCsoKHQ+PjI0TCkmMHhmYykpOyB9CisjZW5kaWYKKworI2Vsc2UgLyogb3JpZ2luYWwgdmVyc2lvbiAqLworCisjaWYgZGVmaW5lZChERVNfUklTQzEpIHx8IGRlZmluZWQoREVTX1JJU0MyKQorI2lmZGVmIERFU19SSVNDMQorI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7XAorCXVuc2lnbmVkIGludCB1MSx1Mix1MzsgXAorCUxPQURfREFUQShSLFMsdSx0LEUwLEUxLHUxKTsgXAorCXU+Pj0yTDsgXAorCXQ9Uk9UQVRFKHQsNik7IFwKKwl1Mj0oaW50KXU+PjhMOyBcCisJdTE9KGludCl1JjB4M2Y7IFwKKwl1MiY9MHgzZjsgXAorCXU+Pj0xNkw7IFwKKwlMTF49REVTX1NQdHJhbnNbMF1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzJdW3UyXTsgXAorCXUzPShpbnQpdT4+OEw7IFwKKwl1MT0oaW50KXUmMHgzZjsgXAorCXUzJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzRdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1s2XVt1M107IFwKKwl1Mj0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4M2Y7IFwKKwl1MiY9MHgzZjsgXAorCXQ+Pj0xNkw7IFwKKwlMTF49REVTX1NQdHJhbnNbMV1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzNdW3UyXTsgXAorCXUzPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHgzZjsgXAorCXUzJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzVdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1s3XVt1M107IH0KKyNlbmRpZgorI2lmZGVmIERFU19SSVNDMgorI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7XAorCXVuc2lnbmVkIGludCB1MSx1MixzMSxzMjsgXAorCUxPQURfREFUQShSLFMsdSx0LEUwLEUxLHUxKTsgXAorCXU+Pj0yTDsgXAorCXQ9Uk9UQVRFKHQsNik7IFwKKwl1Mj0oaW50KXU+PjhMOyBcCisJdTE9KGludCl1JjB4M2Y7IFwKKwl1MiY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1swXVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbMl1bdTJdOyBcCisJczE9KGludCl1Pj4xNkw7IFwKKwlzMj0oaW50KXU+PjI0TDsgXAorCXMxJj0weDNmOyBcCisJczImPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbNF1bczFdOyBcCisJTExePURFU19TUHRyYW5zWzZdW3MyXTsgXAorCXUyPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHgzZjsgXAorCXUyJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzFdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1szXVt1Ml07IFwKKwlzMT0oaW50KXQ+PjE2OyBcCisJczI9KGludCl0Pj4yNEw7IFwKKwlzMSY9MHgzZjsgXAorCXMyJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzVdW3MxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1s3XVtzMl07IH0KKyNlbmRpZgorCisjZWxzZQorCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHtcCisJTE9BRF9EQVRBX3RtcChSLFMsdSx0LEUwLEUxKTsgXAorCXQ9Uk9UQVRFKHQsNCk7IFwKKwlMTF49XAorCQlERVNfU1B0cmFuc1swXVsodT4+IDJMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1syXVsodT4+MTBMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1s0XVsodT4+MThMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1s2XVsodT4+MjZMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1sxXVsodD4+IDJMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1szXVsodD4+MTBMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1s1XVsodD4+MThMKSYweDNmXV4gXAorCQlERVNfU1B0cmFuc1s3XVsodD4+MjZMKSYweDNmXTsgfQorI2VuZGlmCisjZW5kaWYKKworCS8qIElQIGFuZCBGUAorCSAqIFRoZSBwcm9ibGVtIGlzIG1vcmUgb2YgYSBnZW9tZXRyaWMgcHJvYmxlbSB0aGF0IHJhbmRvbSBiaXQgZmlkZGxpbmcuCisJIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgICAgICA2MiA1NCA0NiAzOCAzMCAyMiAxNCAgNgorCSA4ICA5IDEwIDExIDEyIDEzIDE0IDE1ICAgICAgNjAgNTIgNDQgMzYgMjggMjAgMTIgIDQKKwkxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAgICAgIDU4IDUwIDQyIDM0IDI2IDE4IDEwICAyCisJMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgIHRvICA1NiA0OCA0MCAzMiAyNCAxNiAgOCAgMAorCisJMzIgMzMgMzQgMzUgMzYgMzcgMzggMzkgICAgICA2MyA1NSA0NyAzOSAzMSAyMyAxNSAgNworCTQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3ICAgICAgNjEgNTMgNDUgMzcgMjkgMjEgMTMgIDUKKwk0OCA0OSA1MCA1MSA1MiA1MyA1NCA1NSAgICAgIDU5IDUxIDQzIDM1IDI3IDE5IDExICAzCisJNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMgICAgICA1NyA0OSA0MSAzMyAyNSAxNyAgOSAgMQorCisJVGhlIG91dHB1dCBoYXMgYmVlbiBzdWJqZWN0IHRvIHN3YXBzIG9mIHRoZSBmb3JtCisJMCAxIC0+IDMgMSBidXQgdGhlIG9kZCBhbmQgZXZlbiBiaXRzIGhhdmUgYmVlbiBwdXQgaW50bworCTIgMyAgICAyIDAKKwlkaWZmZXJlbnQgd29yZHMuICBUaGUgbWFpbiB0cmljayBpcyB0byByZW1lbWJlciB0aGF0CisJdD0oKGw+PnNpemUpXnIpJihtYXNrKTsKKwlyXj10OworCWxePSh0PDxzaXplKTsKKwljYW4gYmUgdXNlZCB0byBzd2FwIGFuZCBtb3ZlIGJpdHMgYmV0d2VlbiB3b3Jkcy4KKworCVNvIGwgPSAgMCAgMSAgMiAgMyAgciA9IDE2IDE3IDE4IDE5CisJICAgICAgICA0ICA1ICA2ICA3ICAgICAgMjAgMjEgMjIgMjMKKwkgICAgICAgIDggIDkgMTAgMTEgICAgICAyNCAyNSAyNiAyNworCSAgICAgICAxMiAxMyAxNCAxNSAgICAgIDI4IDI5IDMwIDMxCisJYmVjb21lcyAoZm9yIHNpemUgPT0gMiBhbmQgbWFzayA9PSAweDMzMzMpCisJICAgdCA9ICAgMl4xNiAgM14xNyAtLSAtLSAgIGwgPSAgMCAgMSAxNiAxNyAgciA9ICAyICAzIDE4IDE5CisJCSA2XjIwICA3XjIxIC0tIC0tICAgICAgICA0ICA1IDIwIDIxICAgICAgIDYgIDcgMjIgMjMKKwkJMTBeMjQgMTFeMjUgLS0gLS0gICAgICAgIDggIDkgMjQgMjUgICAgICAxMCAxMSAyNCAyNQorCQkxNF4yOCAxNV4yOSAtLSAtLSAgICAgICAxMiAxMyAyOCAyOSAgICAgIDE0IDE1IDI4IDI5CisKKwlUaGFua3MgZm9yIGhpbnRzIGZyb20gUmljaGFyZCBPdXRlcmJyaWRnZSAtIGhlIHRvbGQgbWUgSVAmRlAKKwljb3VsZCBiZSBkb25lIGluIDE1IHhvciwgMTAgc2hpZnRzIGFuZCA1IGFuZHMuCisJV2hlbiBJIGZpbmFsbHkgc3RhcnRlZCB0byB0aGluayBvZiB0aGUgcHJvYmxlbSBpbiAyRAorCUkgZmlyc3QgZ290IH40MiBvcGVyYXRpb25zIHdpdGhvdXQgeG9ycy4gIFdoZW4gSSByZW1lbWJlcmVkCisJaG93IHRvIHVzZSB4b3JzIDotKSBJIGdvdCBpdCB0byBpdHMgZmluYWwgc3RhdGUuCisJKi8KKyNkZWZpbmUgUEVSTV9PUChhLGIsdCxuLG0pICgodCk9KCgoKGEpPj4obikpXihiKSkmKG0pKSxcCisJKGIpXj0odCksXAorCShhKV49KCh0KTw8KG4pKSkKKworI2RlZmluZSBJUChsLHIpIFwKKwl7IFwKKwlyZWdpc3RlciBERVNfTE9ORyB0dDsgXAorCVBFUk1fT1AocixsLHR0LCA0LDB4MGYwZjBmMGZMKTsgXAorCVBFUk1fT1AobCxyLHR0LDE2LDB4MDAwMGZmZmZMKTsgXAorCVBFUk1fT1AocixsLHR0LCAyLDB4MzMzMzMzMzNMKTsgXAorCVBFUk1fT1AobCxyLHR0LCA4LDB4MDBmZjAwZmZMKTsgXAorCVBFUk1fT1AocixsLHR0LCAxLDB4NTU1NTU1NTVMKTsgXAorCX0KKworI2RlZmluZSBGUChsLHIpIFwKKwl7IFwKKwlyZWdpc3RlciBERVNfTE9ORyB0dDsgXAorCVBFUk1fT1AobCxyLHR0LCAxLDB4NTU1NTU1NTVMKTsgXAorCVBFUk1fT1AocixsLHR0LCA4LDB4MDBmZjAwZmZMKTsgXAorCVBFUk1fT1AobCxyLHR0LCAyLDB4MzMzMzMzMzNMKTsgXAorCVBFUk1fT1AocixsLHR0LDE2LDB4MDAwMGZmZmZMKTsgXAorCVBFUk1fT1AobCxyLHR0LCA0LDB4MGYwZjBmMGZMKTsgXAorCX0KKworZXh0ZXJuIGNvbnN0IERFU19MT05HIERFU19TUHRyYW5zWzhdWzY0XTsKKwordm9pZCBmY3J5cHRfYm9keShERVNfTE9ORyAqb3V0LERFU19rZXlfc2NoZWR1bGUgKmtzLAorCQkgREVTX0xPTkcgRXN3YXAwLCBERVNfTE9ORyBFc3dhcDEpOworCisjaWZkZWYgT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQKKyN1bmRlZiBERVNfVU5ST0xMCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5OTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgKQEAgLTAsMCArMSw0MDggQEAKKy8qIGNyeXB0by9tZDMyX2NvbW1vbi5oICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKy8qCisgKiBUaGlzIGlzIGEgZ2VuZXJpYyAzMiBiaXQgImNvbGxlY3RvciIgZm9yIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobXMuCisgKiBXaGVuZXZlciBuZWVkZWQgaXQgY29sbGVjdHMgaW5wdXQgY2hhcmFjdGVyIHN0cmVhbSBpbnRvIGNodW5rcyBvZgorICogMzIgYml0IHZhbHVlcyBhbmQgaW52b2tlcyBhIGJsb2NrIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYWN0dWFsIGhhc2gKKyAqIGNhbGN1bGF0aW9ucy4KKyAqCisgKiBQb3J0aW5nIGd1aWRlLgorICoKKyAqIE9ibGlnYXRvcnkgbWFjcm9zOgorICoKKyAqIERBVEFfT1JERVJfSVNfQklHX0VORElBTiBvciBEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyAqCXRoaXMgbWFjcm8gZGVmaW5lcyBieXRlIG9yZGVyIG9mIGlucHV0IHN0cmVhbS4KKyAqIEhBU0hfQ0JMT0NLCisgKglzaXplIG9mIGEgdW5pdCBjaHVuayBIQVNIX0JMT0NLIG9wZXJhdGVzIG9uLgorICogSEFTSF9MT05HCisgKgloYXMgdG8gYmUgYXQgbGVzdCAzMiBiaXQgd2lkZSwgaWYgaXQncyB3aWRlciwgdGhlbgorICoJSEFTSF9MT05HX0xPRzIgKmhhcyB0byogYmUgZGVmaW5lZCBhbG9uZworICogSEFTSF9DVFgKKyAqCWNvbnRleHQgc3RydWN0dXJlIHRoYXQgYXQgbGVhc3QgY29udGFpbnMgZm9sbG93aW5nCisgKgltZW1iZXJzOgorICoJCXR5cGVkZWYgc3RydWN0IHsKKyAqCQkJLi4uCisgKgkJCUhBU0hfTE9ORwlObCxOaDsKKyAqCQkJZWl0aGVyIHsKKyAqCQkJSEFTSF9MT05HCWRhdGFbSEFTSF9MQkxPQ0tdOworICoJCQl1bnNpZ25lZCBjaGFyCWRhdGFbSEFTSF9DQkxPQ0tdOworICoJCQl9OworICoJCQl1bnNpZ25lZCBpbnQJbnVtOworICoJCQkuLi4KKyAqCQkJfSBIQVNIX0NUWDsKKyAqCWRhdGFbXSB2ZWN0b3IgaXMgZXhwZWN0ZWQgdG8gYmUgemVyb2VkIHVwb24gZmlyc3QgY2FsbCB0bworICoJSEFTSF9VUERBVEUuCisgKiBIQVNIX1VQREFURQorICoJbmFtZSBvZiAiVXBkYXRlIiBmdW5jdGlvbiwgaW1wbGVtZW50ZWQgaGVyZS4KKyAqIEhBU0hfVFJBTlNGT1JNCisgKgluYW1lIG9mICJUcmFuc2Zvcm0iIGZ1bmN0aW9uLCBpbXBsZW1lbnRlZCBoZXJlLgorICogSEFTSF9GSU5BTAorICoJbmFtZSBvZiAiRmluYWwiIGZ1bmN0aW9uLCBpbXBsZW1lbnRlZCBoZXJlLgorICogSEFTSF9CTE9DS19EQVRBX09SREVSCisgKgluYW1lIG9mICJibG9jayIgZnVuY3Rpb24gY2FwYWJsZSBvZiB0cmVhdGluZyAqdW5hbGlnbmVkKiBpbnB1dAorICoJbWVzc2FnZSBpbiBvcmlnaW5hbCAoZGF0YSkgYnl0ZSBvcmRlciwgaW1wbGVtZW50ZWQgZXh0ZXJuYWxseS4KKyAqIEhBU0hfTUFLRV9TVFJJTkcKKyAqCW1hY3JvIGNvbnZlcmluZyBjb250ZXh0IHZhcmlhYmxlcyB0byBhbiBBU0NJSSBoYXNoIHN0cmluZy4KKyAqCisgKiBNRDUgZXhhbXBsZToKKyAqCisgKgkjZGVmaW5lIERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTgorICoKKyAqCSNkZWZpbmUgSEFTSF9MT05HCQlNRDVfTE9ORworICoJI2RlZmluZSBIQVNIX0xPTkdfTE9HMgkJTUQ1X0xPTkdfTE9HMgorICoJI2RlZmluZSBIQVNIX0NUWAkJTUQ1X0NUWAorICoJI2RlZmluZSBIQVNIX0NCTE9DSwkJTUQ1X0NCTE9DSworICoJI2RlZmluZSBIQVNIX1VQREFURQkJTUQ1X1VwZGF0ZQorICoJI2RlZmluZSBIQVNIX1RSQU5TRk9STQkJTUQ1X1RyYW5zZm9ybQorICoJI2RlZmluZSBIQVNIX0ZJTkFMCQlNRDVfRmluYWwKKyAqCSNkZWZpbmUgSEFTSF9CTE9DS19EQVRBX09SREVSCW1kNV9ibG9ja19kYXRhX29yZGVyCisgKgorICoJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAqLworCisjaWYgIWRlZmluZWQoREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOKSAmJiAhZGVmaW5lZChEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4pCisjZXJyb3IgIkRBVEFfT1JERVIgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorCisjaWZuZGVmIEhBU0hfQ0JMT0NLCisjZXJyb3IgIkhBU0hfQ0JMT0NLIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKyNpZm5kZWYgSEFTSF9MT05HCisjZXJyb3IgIkhBU0hfTE9ORyBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisjaWZuZGVmIEhBU0hfQ1RYCisjZXJyb3IgIkhBU0hfQ1RYIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKworI2lmbmRlZiBIQVNIX1VQREFURQorI2Vycm9yICJIQVNIX1VQREFURSBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisjaWZuZGVmIEhBU0hfVFJBTlNGT1JNCisjZXJyb3IgIkhBU0hfVFJBTlNGT1JNIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKyNpZm5kZWYgSEFTSF9GSU5BTAorI2Vycm9yICJIQVNIX0ZJTkFMIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKworI2lmbmRlZiBIQVNIX0JMT0NLX0RBVEFfT1JERVIKKyNlcnJvciAiSEFTSF9CTE9DS19EQVRBX09SREVSIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKworLyoKKyAqIEVuZ2FnZSBjb21waWxlciBzcGVjaWZpYyByb3RhdGUgaW50cmluc2ljIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZS4KKyAqLworI3VuZGVmIFJPVEFURQorI2lmbmRlZiBQRURBTlRJQworIyBpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fSUNDKQorIyAgZGVmaW5lIFJPVEFURShhLG4pCV9scm90bChhLG4pCisjIGVsaWYgZGVmaW5lZChfX01XRVJLU19fKQorIyAgaWYgZGVmaW5lZChfX1BPV0VSUENfXykKKyMgICBkZWZpbmUgUk9UQVRFKGEsbikJX19ybHdpbm0oYSxuLDAsMzEpCisjICBlbGlmIGRlZmluZWQoX19NQzY4S19fKQorICAgIC8qIE1vdG9yb2xhIHNwZWNpZmljIHR3ZWFrLiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+ICovCisjICAgZGVmaW5lIFJPVEFURShhLG4pCSggbjwyNCA/IF9fcm9sKGEsbikgOiBfX3JvcihhLDMyLW4pICkKKyMgIGVsc2UKKyMgICBkZWZpbmUgUk9UQVRFKGEsbikJX19yb2woYSxuKQorIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MiAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQorICAvKgorICAgKiBTb21lIEdOVSBDIGlubGluZSBhc3NlbWJsZXIgdGVtcGxhdGVzLiBOb3RlIHRoYXQgdGhlc2UgYXJlCisgICAqIHJvdGF0ZXMgYnkgKmNvbnN0YW50KiBudW1iZXIgb2YgYml0cyEgQnV0IHRoYXQncyBleGFjdGx5CisgICAqIHdoYXQgd2UgbmVlZCBoZXJlLi4uCisgICAqIAkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICAgKi8KKyMgIGlmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjICAgZGVmaW5lIFJPVEFURShhLG4pCSh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXQ7CVwKKwkJCQlhc20gKAkJCVwKKwkJCQkicm9sbCAlMSwlMCIJCVwKKwkJCQk6ICI9ciIocmV0KQkJXAorCQkJCTogIkkiKG4pLCAiMCIoYSkJXAorCQkJCTogImNjIik7CQlcCisJCQkgICByZXQ7CQkJCVwKKwkJCX0pCisjICBlbGlmIGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KSB8fCBcCisJZGVmaW5lZChfX3Bvd2VycGMpIHx8IGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorIyAgIGRlZmluZSBST1RBVEUoYSxuKQkoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0OwlcCisJCQkJYXNtICgJCQlcCisJCQkJInJsd2lubSAlMCwlMSwlMiwwLDMxIglcCisJCQkJOiAiPXIiKHJldCkJCVwKKwkJCQk6ICJyIihhKSwgIkkiKG4pKTsJXAorCQkJICAgcmV0OwkJCQlcCisJCQl9KQorIyAgZWxpZiBkZWZpbmVkKF9fczM5MHhfXykKKyMgICBkZWZpbmUgUk9UQVRFKGEsbikgKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldDsJXAorCQkJCWFzbSAoInJsbCAlMCwlMSwlMiIJXAorCQkJCTogIj1yIihyZXQpCQlcCisJCQkJOiAiciIoYSksICJJIihuKSk7CVwKKwkJCSAgcmV0OwkJCQlcCisJCQl9KQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBQRURBTlRJQyAqLworCisjaWZuZGVmIFJPVEFURQorI2RlZmluZSBST1RBVEUoYSxuKSAgICAgKCgoYSk8PChuKSl8KCgoYSkmMHhmZmZmZmZmZik+PigzMi0obikpKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEQVRBX09SREVSX0lTX0JJR19FTkRJQU4pCisKKyNpZm5kZWYgUEVEQU5USUMKKyMgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkKKyMgIGlmICgoZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pKSAmJiAhZGVmaW5lZChJMzg2X09OTFkpKSB8fCBcCisgICAgICAoZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyMgICBpZiAhZGVmaW5lZChCX0VORElBTikKKyAgICAvKgorICAgICAqIFRoaXMgZ2l2ZXMgfjMwLTQwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpbiBTSEEtMjU2IGNvbXBpbGVkCisgICAgICogd2l0aCBnY2MgW29uIFA0XS4gV2VsbCwgZmlyc3QgbWFjcm8gdG8gYmUgZnJhbmsuIFdlIGNhbiBwdWxsCisgICAgICogdGhpcyB0cmljayBvbiB4ODYqIHBsYXRmb3JtcyBvbmx5LCBiZWNhdXNlIHRoZXNlIENQVXMgY2FuIGZldGNoCisgICAgICogdW5hbGlnbmVkIGRhdGEgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgKi8KKyMgICBkZWZpbmUgSE9TVF9jMmwoYyxsKQkoeyB1bnNpZ25lZCBpbnQgcj0qKChjb25zdCB1bnNpZ25lZCBpbnQgKikoYykpOwlcCisJCQkJICAgYXNtICgiYnN3YXBsICUwIjoiPXIiKHIpOiIwIihyKSk7CVwKKwkJCQkgICAoYykrPTQ7IChsKT1yOwkJCX0pCisjICAgZGVmaW5lIEhPU1RfbDJjKGwsYykJKHsgdW5zaWduZWQgaW50IHI9KGwpOwkJCVwKKwkJCQkgICBhc20gKCJic3dhcGwgJTAiOiI9ciIocik6IjAiKHIpKTsJXAorCQkJCSAgICooKHVuc2lnbmVkIGludCAqKShjKSk9cjsgKGMpKz00OyByOwl9KQorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisjIGRlZmluZSBIT1NUX2MybChjLGwpICgobCk9KigoY29uc3QgdW5zaWduZWQgaW50ICopKGMpKSwgKGMpKz00LCAobCkpCisjIGRlZmluZSBIT1NUX2wyYyhsLGMpICgqKCh1bnNpZ25lZCBpbnQgKikoYykpPShsKSwgKGMpKz00LCAobCkpCisjZW5kaWYKKworI2lmbmRlZiBIT1NUX2MybAorI2RlZmluZSBIT1NUX2MybChjLGwpCShsID0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwyNCksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8MTYpLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PCA4KSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpICAgICksCQlcCisJCQkgbCkKKyNlbmRpZgorI2lmbmRlZiBIT1NUX2wyYworI2RlZmluZSBIT1NUX2wyYyhsLGMpCSgqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjQpJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjE2KSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4gOCkmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKSAgICApJjB4ZmYpLAlcCisJCQkgbCkKKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkKERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTikKKworI2lmbmRlZiBQRURBTlRJQworIyBpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MiAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQorIyAgaWYgZGVmaW5lZChfX3MzOTB4X18pCisjICAgZGVmaW5lIEhPU1RfYzJsKGMsbCkJKHsgYXNtICgibHJ2CSUwLDAoJTEpIgkJXAorCQkJCQk6Ij1yIihsKSA6ICJyIihjKSk7CQlcCisJCQkJICAgKGMpKz00OyAobCk7CQkJCX0pCisjICAgZGVmaW5lIEhPU1RfbDJjKGwsYykJKHsgYXNtICgic3RydgklMCwwKCUxKSIJCVwKKwkJCQkJOiA6ICJyIihsKSwiciIoYykgOiAibWVtb3J5Iik7CVwKKwkJCQkgICAoYykrPTQ7IChsKTsJCQkJfSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyBpZm5kZWYgQl9FTkRJQU4KKyAgIC8qIFNlZSBjb21tZW50IGluIERBVEFfT1JERVJfSVNfQklHX0VORElBTiBzZWN0aW9uLiAqLworIyAgZGVmaW5lIEhPU1RfYzJsKGMsbCkJKChsKT0qKChjb25zdCB1bnNpZ25lZCBpbnQgKikoYykpLCAoYykrPTQsIGwpCisjICBkZWZpbmUgSE9TVF9sMmMobCxjKQkoKigodW5zaWduZWQgaW50ICopKGMpKT0obCksIChjKSs9NCwgbCkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEhPU1RfYzJsCisjZGVmaW5lIEhPU1RfYzJsKGMsbCkJKGwgPSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSkgICAgKSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwgOCksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8MTYpLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PDI0KSwJCVwKKwkJCSBsKQorI2VuZGlmCisjaWZuZGVmIEhPU1RfbDJjCisjZGVmaW5lIEhPU1RfbDJjKGwsYykJKCooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpICAgICkmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+IDgpJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjE2KSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNCkmMHhmZiksCVwKKwkJCSBsKQorI2VuZGlmCisKKyNlbmRpZgorCisvKgorICogVGltZSBmb3Igc29tZSBhY3Rpb246LSkKKyAqLworCitpbnQgSEFTSF9VUERBVEUgKEhBU0hfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhXywgc2l6ZV90IGxlbikKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YT1kYXRhXzsKKwl1bnNpZ25lZCBjaGFyICpwOworCUhBU0hfTE9ORyBsOworCXNpemVfdCBuOworCisJaWYgKGxlbj09MCkgcmV0dXJuIDE7CisKKwlsPShjLT5ObCsoKChIQVNIX0xPTkcpbGVuKTw8MykpJjB4ZmZmZmZmZmZVTDsKKwkvKiA5NS0wNS0yNCBlYXkgRml4ZWQgYSBidWcgd2l0aCB0aGUgb3ZlcmZsb3cgaGFuZGxpbmcsIHRoYW5rcyB0bworCSAqIFdlaSBEYWkgPHdlaWRhaUBlc2tpbW8uY29tPiBmb3IgcG9pbnRpbmcgaXQgb3V0LiAqLworCWlmIChsIDwgYy0+TmwpIC8qIG92ZXJmbG93ICovCisJCWMtPk5oKys7CisJYy0+TmgrPShIQVNIX0xPTkcpKGxlbj4+MjkpOwkvKiBtaWdodCBjYXVzZSBjb21waWxlciB3YXJuaW5nIG9uIDE2LWJpdCAqLworCWMtPk5sPWw7CisKKwluID0gYy0+bnVtOworCWlmIChuICE9IDApCisJCXsKKwkJcD0odW5zaWduZWQgY2hhciAqKWMtPmRhdGE7CisKKwkJaWYgKGxlbiA+PSBIQVNIX0NCTE9DSyB8fCBsZW4rbiA+PSBIQVNIX0NCTE9DSykKKwkJCXsKKwkJCW1lbWNweSAocCtuLGRhdGEsSEFTSF9DQkxPQ0stbik7CisJCQlIQVNIX0JMT0NLX0RBVEFfT1JERVIgKGMscCwxKTsKKwkJCW4gICAgICA9IEhBU0hfQ0JMT0NLLW47CisJCQlkYXRhICArPSBuOworCQkJbGVuICAgLT0gbjsKKwkJCWMtPm51bSA9IDA7CisJCQltZW1zZXQgKHAsMCxIQVNIX0NCTE9DSyk7CS8qIGtlZXAgaXQgemVyb2VkICovCisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCW1lbWNweSAocCtuLGRhdGEsbGVuKTsKKwkJCWMtPm51bSArPSAodW5zaWduZWQgaW50KWxlbjsKKwkJCXJldHVybiAxOworCQkJfQorCQl9CisKKwluID0gbGVuL0hBU0hfQ0JMT0NLOworCWlmIChuID4gMCkKKwkJeworCQlIQVNIX0JMT0NLX0RBVEFfT1JERVIgKGMsZGF0YSxuKTsKKwkJbiAgICAqPSBIQVNIX0NCTE9DSzsKKwkJZGF0YSArPSBuOworCQlsZW4gIC09IG47CisJCX0KKworCWlmIChsZW4gIT0gMCkKKwkJeworCQlwID0gKHVuc2lnbmVkIGNoYXIgKiljLT5kYXRhOworCQljLT5udW0gPSAodW5zaWduZWQgaW50KWxlbjsKKwkJbWVtY3B5IChwLGRhdGEsbGVuKTsKKwkJfQorCXJldHVybiAxOworCX0KKworCit2b2lkIEhBU0hfVFJBTlNGT1JNIChIQVNIX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKwl7CisJSEFTSF9CTE9DS19EQVRBX09SREVSIChjLGRhdGEsMSk7CisJfQorCisKK2ludCBIQVNIX0ZJTkFMICh1bnNpZ25lZCBjaGFyICptZCwgSEFTSF9DVFggKmMpCisJeworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWMtPmRhdGE7CisJc2l6ZV90IG4gPSBjLT5udW07CisKKwlwW25dID0gMHg4MDsgLyogdGhlcmUgaXMgYWx3YXlzIHJvb20gZm9yIG9uZSAqLworCW4rKzsKKworCWlmIChuID4gKEhBU0hfQ0JMT0NLLTgpKQorCQl7CisJCW1lbXNldCAocCtuLDAsSEFTSF9DQkxPQ0stbik7CisJCW49MDsKKwkJSEFTSF9CTE9DS19EQVRBX09SREVSIChjLHAsMSk7CisJCX0KKwltZW1zZXQgKHArbiwwLEhBU0hfQ0JMT0NLLTgtbik7CisKKwlwICs9IEhBU0hfQ0JMT0NLLTg7CisjaWYgICBkZWZpbmVkKERBVEFfT1JERVJfSVNfQklHX0VORElBTikKKwkodm9pZClIT1NUX2wyYyhjLT5OaCxwKTsKKwkodm9pZClIT1NUX2wyYyhjLT5ObCxwKTsKKyNlbGlmIGRlZmluZWQoREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOKQorCSh2b2lkKUhPU1RfbDJjKGMtPk5sLHApOworCSh2b2lkKUhPU1RfbDJjKGMtPk5oLHApOworI2VuZGlmCisJcCAtPSBIQVNIX0NCTE9DSzsKKwlIQVNIX0JMT0NLX0RBVEFfT1JERVIgKGMscCwxKTsKKwljLT5udW09MDsKKwltZW1zZXQgKHAsMCxIQVNIX0NCTE9DSyk7CisKKyNpZm5kZWYgSEFTSF9NQUtFX1NUUklORworI2Vycm9yICJIQVNIX01BS0VfU1RSSU5HIG11c3QgYmUgZGVmaW5lZCEiCisjZWxzZQorCUhBU0hfTUFLRV9TVFJJTkcoYyxtZCk7CisjZW5kaWYKKworCXJldHVybiAxOworCX0KKworI2lmbmRlZiBNRDMyX1JFR19UCisjZGVmaW5lIE1EMzJfUkVHX1QgbG9uZworLyoKKyAqIFRoaXMgY29tbWVudCB3YXMgb3JpZ2luYWx5IHdyaXR0ZW4gZm9yIE1ENSwgd2hpY2ggaXMgd2h5IGl0CisgKiBkaXNjdXNzZXMgQS1ELiBCdXQgaXQgYmFzaWNhbGx5IGFwcGxpZXMgdG8gYWxsIDMyLWJpdCBkaWdlc3RzLAorICogd2hpY2ggaXMgd2h5IGl0IHdhcyBtb3ZlZCB0byBjb21tb24gaGVhZGVyIGZpbGUuCisgKgorICogSW4gY2FzZSB5b3Ugd29uZGVyIHdoeSBBLUQgYXJlIGRlY2xhcmVkIGFzIGxvbmcgYW5kIG5vdAorICogYXMgTUQ1X0xPTkcuIERvaW5nIHNvIHJlc3VsdHMgaW4gc2xpZ2h0IHBlcmZvcm1hbmNlCisgKiBib29zdCBvbiBMUDY0IGFyY2hpdGVjdHVyZXMuIFRoZSBjYXRjaCBpcyB3ZSBkb24ndAorICogcmVhbGx5IGNhcmUgaWYgMzIgTVNCcyBvZiBhIDY0LWJpdCByZWdpc3RlciBnZXQgcG9sbHV0ZWQKKyAqIHdpdGggZXZlbnR1YWwgb3ZlcmZsb3dzIGFzIHdlICpzYXZlKiBvbmx5IDMyIExTQnMgaW4KKyAqICplaXRoZXIqIGNhc2UuIE5vdyBkZWNsYXJpbmcgJ2VtIGxvbmcgZXhjdXNlcyB0aGUgY29tcGlsZXIKKyAqIGZyb20ga2VlcGluZyAzMiBNU0JzIHplcm9lZCByZXN1bHRpbmcgaW4gMTMlIHBlcmZvcm1hbmNlCisgKiBpbXByb3ZlbWVudCB1bmRlciBTUEFSQyBTb2xhcmlzNy82NCBhbmQgNSUgdW5kZXIgQWxwaGFMaW51eC4KKyAqIFdlbGwsIHRvIGJlIGhvbmVzdCBpdCBzaG91bGQgc2F5IHRoYXQgdGhpcyAqcHJldmVudHMqIAorICogcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCisgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgKiBBcHBhcmVudGx5IHRoZXJlJ3JlIExQNjQgY29tcGlsZXJzIHRoYXQgZ2VuZXJhdGUgYmV0dGVyCisgKiBjb2RlIGlmIEEtRCBhcmUgZGVjbGFyZWQgaW50LiBNb3N0IG5vdGFibHkgR0NDLXg4Nl82NAorICogZ2VuZXJhdGVzIGJldHRlciBjb2RlLgorICoJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNS5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3YWRiMwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKiBjcnlwdG8vbWQ1L21kNV9kZ3N0LmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAib3BlbnNzbF9tZDVfbG9jYWwuaCIKKworLyogSW1wbGVtZW50ZWQgZnJvbSBSRkMxMzIxIFRoZSBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtCisgKi8KKworI2RlZmluZSBJTklUX0RBVEFfQSAodW5zaWduZWQgbG9uZykweDY3NDUyMzAxTAorI2RlZmluZSBJTklUX0RBVEFfQiAodW5zaWduZWQgbG9uZykweGVmY2RhYjg5TAorI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorCitpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKKwl7CisJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisJYy0+QT1JTklUX0RBVEFfQTsKKwljLT5CPUlOSVRfREFUQV9COworCWMtPkM9SU5JVF9EQVRBX0M7CisJYy0+RD1JTklUX0RBVEFfRDsKKwlyZXR1cm4gMTsKKwl9CisKKyNpZm5kZWYgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIKKyNpZmRlZiBYCisjdW5kZWYgWAorI2VuZGlmCit2b2lkIG1kNV9ibG9ja19kYXRhX29yZGVyIChNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhXywgc2l6ZV90IG51bSkKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YT1kYXRhXzsKKwlyZWdpc3RlciB1bnNpZ25lZCBNRDMyX1JFR19UIEEsQixDLEQsbDsKKyNpZm5kZWYgTUQzMl9YQVJSQVkKKwkvKiBTZWUgY29tbWVudCBpbiBjcnlwdG8vc2hhL3NoYV9sb2NsLmggZm9yIGRldGFpbHMuICovCisJdW5zaWduZWQgTUQzMl9SRUdfVAlYWDAsIFhYMSwgWFgyLCBYWDMsIFhYNCwgWFg1LCBYWDYsIFhYNywKKwkJCQlYWDgsIFhYOSxYWDEwLFhYMTEsWFgxMixYWDEzLFhYMTQsWFgxNTsKKyMgZGVmaW5lIFgoaSkJWFgjI2kKKyNlbHNlCisJTUQ1X0xPTkcgWFhbTUQ1X0xCTE9DS107CisjIGRlZmluZSBYKGkpCVhYW2ldCisjZW5kaWYKKworCUE9Yy0+QTsKKwlCPWMtPkI7CisJQz1jLT5DOworCUQ9Yy0+RDsKKworCWZvciAoO251bS0tOykKKwkJeworCUhPU1RfYzJsKGRhdGEsbCk7IFgoIDApPWw7CQlIT1NUX2MybChkYXRhLGwpOyBYKCAxKT1sOworCS8qIFJvdW5kIDAgKi8KKwlSMChBLEIsQyxELFgoIDApLCA3LDB4ZDc2YWE0NzhMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggMik9bDsKKwlSMChELEEsQixDLFgoIDEpLDEyLDB4ZThjN2I3NTZMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggMyk9bDsKKwlSMChDLEQsQSxCLFgoIDIpLDE3LDB4MjQyMDcwZGJMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNCk9bDsKKwlSMChCLEMsRCxBLFgoIDMpLDIyLDB4YzFiZGNlZWVMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNSk9bDsKKwlSMChBLEIsQyxELFgoIDQpLCA3LDB4ZjU3YzBmYWZMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNik9bDsKKwlSMChELEEsQixDLFgoIDUpLDEyLDB4NDc4N2M2MmFMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNyk9bDsKKwlSMChDLEQsQSxCLFgoIDYpLDE3LDB4YTgzMDQ2MTNMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggOCk9bDsKKwlSMChCLEMsRCxBLFgoIDcpLDIyLDB4ZmQ0Njk1MDFMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggOSk9bDsKKwlSMChBLEIsQyxELFgoIDgpLCA3LDB4Njk4MDk4ZDhMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMCk9bDsKKwlSMChELEEsQixDLFgoIDkpLDEyLDB4OGI0NGY3YWZMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMSk9bDsKKwlSMChDLEQsQSxCLFgoMTApLDE3LDB4ZmZmZjViYjFMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMik9bDsKKwlSMChCLEMsRCxBLFgoMTEpLDIyLDB4ODk1Y2Q3YmVMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMyk9bDsKKwlSMChBLEIsQyxELFgoMTIpLCA3LDB4NmI5MDExMjJMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxNCk9bDsKKwlSMChELEEsQixDLFgoMTMpLDEyLDB4ZmQ5ODcxOTNMKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxNSk9bDsKKwlSMChDLEQsQSxCLFgoMTQpLDE3LDB4YTY3OTQzOGVMKTsKKwlSMChCLEMsRCxBLFgoMTUpLDIyLDB4NDliNDA4MjFMKTsKKwkvKiBSb3VuZCAxICovCisJUjEoQSxCLEMsRCxYKCAxKSwgNSwweGY2MWUyNTYyTCk7CisJUjEoRCxBLEIsQyxYKCA2KSwgOSwweGMwNDBiMzQwTCk7CisJUjEoQyxELEEsQixYKDExKSwxNCwweDI2NWU1YTUxTCk7CisJUjEoQixDLEQsQSxYKCAwKSwyMCwweGU5YjZjN2FhTCk7CisJUjEoQSxCLEMsRCxYKCA1KSwgNSwweGQ2MmYxMDVkTCk7CisJUjEoRCxBLEIsQyxYKDEwKSwgOSwweDAyNDQxNDUzTCk7CisJUjEoQyxELEEsQixYKDE1KSwxNCwweGQ4YTFlNjgxTCk7CisJUjEoQixDLEQsQSxYKCA0KSwyMCwweGU3ZDNmYmM4TCk7CisJUjEoQSxCLEMsRCxYKCA5KSwgNSwweDIxZTFjZGU2TCk7CisJUjEoRCxBLEIsQyxYKDE0KSwgOSwweGMzMzcwN2Q2TCk7CisJUjEoQyxELEEsQixYKCAzKSwxNCwweGY0ZDUwZDg3TCk7CisJUjEoQixDLEQsQSxYKCA4KSwyMCwweDQ1NWExNGVkTCk7CisJUjEoQSxCLEMsRCxYKDEzKSwgNSwweGE5ZTNlOTA1TCk7CisJUjEoRCxBLEIsQyxYKCAyKSwgOSwweGZjZWZhM2Y4TCk7CisJUjEoQyxELEEsQixYKCA3KSwxNCwweDY3NmYwMmQ5TCk7CisJUjEoQixDLEQsQSxYKDEyKSwyMCwweDhkMmE0YzhhTCk7CisJLyogUm91bmQgMiAqLworCVIyKEEsQixDLEQsWCggNSksIDQsMHhmZmZhMzk0MkwpOworCVIyKEQsQSxCLEMsWCggOCksMTEsMHg4NzcxZjY4MUwpOworCVIyKEMsRCxBLEIsWCgxMSksMTYsMHg2ZDlkNjEyMkwpOworCVIyKEIsQyxELEEsWCgxNCksMjMsMHhmZGU1MzgwY0wpOworCVIyKEEsQixDLEQsWCggMSksIDQsMHhhNGJlZWE0NEwpOworCVIyKEQsQSxCLEMsWCggNCksMTEsMHg0YmRlY2ZhOUwpOworCVIyKEMsRCxBLEIsWCggNyksMTYsMHhmNmJiNGI2MEwpOworCVIyKEIsQyxELEEsWCgxMCksMjMsMHhiZWJmYmM3MEwpOworCVIyKEEsQixDLEQsWCgxMyksIDQsMHgyODliN2VjNkwpOworCVIyKEQsQSxCLEMsWCggMCksMTEsMHhlYWExMjdmYUwpOworCVIyKEMsRCxBLEIsWCggMyksMTYsMHhkNGVmMzA4NUwpOworCVIyKEIsQyxELEEsWCggNiksMjMsMHgwNDg4MWQwNUwpOworCVIyKEEsQixDLEQsWCggOSksIDQsMHhkOWQ0ZDAzOUwpOworCVIyKEQsQSxCLEMsWCgxMiksMTEsMHhlNmRiOTllNUwpOworCVIyKEMsRCxBLEIsWCgxNSksMTYsMHgxZmEyN2NmOEwpOworCVIyKEIsQyxELEEsWCggMiksMjMsMHhjNGFjNTY2NUwpOworCS8qIFJvdW5kIDMgKi8KKwlSMyhBLEIsQyxELFgoIDApLCA2LDB4ZjQyOTIyNDRMKTsKKwlSMyhELEEsQixDLFgoIDcpLDEwLDB4NDMyYWZmOTdMKTsKKwlSMyhDLEQsQSxCLFgoMTQpLDE1LDB4YWI5NDIzYTdMKTsKKwlSMyhCLEMsRCxBLFgoIDUpLDIxLDB4ZmM5M2EwMzlMKTsKKwlSMyhBLEIsQyxELFgoMTIpLCA2LDB4NjU1YjU5YzNMKTsKKwlSMyhELEEsQixDLFgoIDMpLDEwLDB4OGYwY2NjOTJMKTsKKwlSMyhDLEQsQSxCLFgoMTApLDE1LDB4ZmZlZmY0N2RMKTsKKwlSMyhCLEMsRCxBLFgoIDEpLDIxLDB4ODU4NDVkZDFMKTsKKwlSMyhBLEIsQyxELFgoIDgpLCA2LDB4NmZhODdlNGZMKTsKKwlSMyhELEEsQixDLFgoMTUpLDEwLDB4ZmUyY2U2ZTBMKTsKKwlSMyhDLEQsQSxCLFgoIDYpLDE1LDB4YTMwMTQzMTRMKTsKKwlSMyhCLEMsRCxBLFgoMTMpLDIxLDB4NGUwODExYTFMKTsKKwlSMyhBLEIsQyxELFgoIDQpLCA2LDB4Zjc1MzdlODJMKTsKKwlSMyhELEEsQixDLFgoMTEpLDEwLDB4YmQzYWYyMzVMKTsKKwlSMyhDLEQsQSxCLFgoIDIpLDE1LDB4MmFkN2QyYmJMKTsKKwlSMyhCLEMsRCxBLFgoIDkpLDIxLDB4ZWI4NmQzOTFMKTsKKworCUEgPSBjLT5BICs9IEE7CisJQiA9IGMtPkIgKz0gQjsKKwlDID0gYy0+QyArPSBDOworCUQgPSBjLT5EICs9IEQ7CisJCX0KKwl9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZjM3NAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oCkBAIC0wLDAgKzEsMTI5IEBACisvKiBjcnlwdG8vbWQ1L21kNV9sb2NsLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL29wZW5zc2xfbWQ1Lmg+CisKKyNpZm5kZWYgTUQ1X0xPTkdfTE9HMgorI2RlZmluZSBNRDVfTE9OR19MT0cyIDIgLyogZGVmYXVsdCB0byAzMiBiaXRzICovCisjZW5kaWYKKworI2lmZGVmIE1ENV9BU00KKyMgaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX0lOVEVMX18pIHx8IFwKKyAgICAgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkKKyMgIGRlZmluZSBtZDVfYmxvY2tfZGF0YV9vcmRlciBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIKKyMgZWxpZiBkZWZpbmVkKF9faWE2NCkgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfTV9JQTY0KQorIyAgZGVmaW5lIG1kNV9ibG9ja19kYXRhX29yZGVyIG1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorIyBlbmRpZgorI2VuZGlmCisKK3ZvaWQgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIgKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsc2l6ZV90IG51bSk7CisKKyNkZWZpbmUgREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOCisKKyNkZWZpbmUgSEFTSF9MT05HCQlNRDVfTE9ORworI2RlZmluZSBIQVNIX0NUWAkJTUQ1X0NUWAorI2RlZmluZSBIQVNIX0NCTE9DSwkJTUQ1X0NCTE9DSworI2RlZmluZSBIQVNIX1VQREFURQkJTUQ1X1VwZGF0ZQorI2RlZmluZSBIQVNIX1RSQU5TRk9STQkJTUQ1X1RyYW5zZm9ybQorI2RlZmluZSBIQVNIX0ZJTkFMCQlNRDVfRmluYWwKKyNkZWZpbmUJSEFTSF9NQUtFX1NUUklORyhjLHMpCWRvIHsJXAorCXVuc2lnbmVkIGxvbmcgbGw7CQlcCisJbGw9KGMpLT5BOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5COyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5DOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5EOyBIT1NUX2wyYyhsbCwocykpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUJSEFTSF9CTE9DS19EQVRBX09SREVSCW1kNV9ibG9ja19kYXRhX29yZGVyCisKKyNpbmNsdWRlICJvcGVuc3NsX21kMzJfY29tbW9uLmgiCisKKy8qCisjZGVmaW5lCUYoeCx5LHopCSgoKHgpICYgKHkpKSAgfCAgKCh+KHgpKSAmICh6KSkpCisjZGVmaW5lCUcoeCx5LHopCSgoKHgpICYgKHopKSAgfCAgKCh5KSAmICh+KHopKSkpCisqLworCisvKiBBcyBwb2ludGVkIG91dCBieSBXZWkgRGFpIDx3ZWlkYWlAZXNraW1vLmNvbT4sIHRoZSBhYm92ZSBjYW4gYmUKKyAqIHNpbXBsaWZpZWQgdG8gdGhlIGNvZGUgYmVsb3cuICBXZWkgYXR0cmlidXRlcyB0aGVzZSBvcHRpbWl6YXRpb25zCisgKiB0byBQZXRlciBHdXRtYW5uJ3MgU0hTIGNvZGUsIGFuZCBoZSBhdHRyaWJ1dGVzIGl0IHRvIFJpY2ggU2Nocm9lcHBlbC4KKyAqLworI2RlZmluZQlGKGIsYyxkKQkoKCgoYykgXiAoZCkpICYgKGIpKSBeIChkKSkKKyNkZWZpbmUJRyhiLGMsZCkJKCgoKGIpIF4gKGMpKSAmIChkKSkgXiAoYykpCisjZGVmaW5lCUgoYixjLGQpCSgoYikgXiAoYykgXiAoZCkpCisjZGVmaW5lCUkoYixjLGQpCSgoKH4oZCkpIHwgKGIpKSBeIChjKSkKKworI2RlZmluZSBSMChhLGIsYyxkLGsscyx0KSB7IFwKKwlhKz0oKGspKyh0KStGKChiKSwoYyksKGQpKSk7IFwKKwlhPVJPVEFURShhLHMpOyBcCisJYSs9YjsgfTtcCisKKyNkZWZpbmUgUjEoYSxiLGMsZCxrLHMsdCkgeyBcCisJYSs9KChrKSsodCkrRygoYiksKGMpLChkKSkpOyBcCisJYT1ST1RBVEUoYSxzKTsgXAorCWErPWI7IH07CisKKyNkZWZpbmUgUjIoYSxiLGMsZCxrLHMsdCkgeyBcCisJYSs9KChrKSsodCkrSCgoYiksKGMpLChkKSkpOyBcCisJYT1ST1RBVEUoYSxzKTsgXAorCWErPWI7IH07CisKKyNkZWZpbmUgUjMoYSxiLGMsZCxrLHMsdCkgeyBcCisJYSs9KChrKSsodCkrSSgoYiksKGMpLChkKSkpOyBcCisJYT1ST1RBVEUoYSxzKTsgXAorCWErPWI7IH07CmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhkOTdkCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaApAQCAtMCwwICsxLDU5IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkKKyAqIGZvcm1zIGFyZSBncmFudGVkIGFjY29yZGluZyB0byB0aGUgT3BlblNTTCBsaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwordHlwZWRlZiB2b2lkICgqYmxvY2sxMjhfZikoY29uc3QgdW5zaWduZWQgY2hhciBpblsxNl0sCisJCQl1bnNpZ25lZCBjaGFyIG91dFsxNl0sCisJCQljb25zdCB2b2lkICprZXkpOworCit0eXBlZGVmIHZvaWQgKCpjYmMxMjhfZikoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCBlbmMpOworCit2b2lkIENSWVBUT19jYmMxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19jYmMxMjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7CisKK3ZvaWQgQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCB1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbMTZdLAorCQkJdW5zaWduZWQgaW50ICpudW0sIGJsb2NrMTI4X2YgYmxvY2spOworCit2b2lkIENSWVBUT19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlibG9jazEyOF9mIGJsb2NrKTsKKwordm9pZCBDUllQVE9fY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19jZmIxMjhfOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spOwordm9pZCBDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGJpdHMsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jayk7CisKK3NpemVfdCBDUllQVE9fY3RzMTI4X2VuY3J5cHRfYmxvY2soY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOworc2l6ZV90IENSWVBUT19jdHMxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgY2JjMTI4X2YgY2JjKTsKK3NpemVfdCBDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2soY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOworc2l6ZV90IENSWVBUT19jdHMxMjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgY2JjMTI4X2YgY2JjKTsKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGNiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKiBjcnlwdG8vZGVzL25jYmNfZW5jLmMgKi8KKy8qCisgKiAjaW5jbHVkZWQgYnk6CisgKiAgICBjYmNfZW5jLmMgIChERVNfY2JjX2VuY3J5cHQpCisgKiAgICBkZXNfZW5jLmMgIChERVNfbmNiY19lbmNyeXB0KQorICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlICJvcGVuc3NsX2Rlc19sb2NhbC5oIgorCisjaWZkZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgordm9pZCBERVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgbG9uZyBsZW5ndGgsCisJCSAgICAgREVTX2tleV9zY2hlZHVsZSAqX3NjaGVkdWxlLCBERVNfY2Jsb2NrICppdmVjLCBpbnQgZW5jKQorI2Vsc2UKK3ZvaWQgREVTX25jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LCBsb25nIGxlbmd0aCwKKwkJICAgICBERVNfa2V5X3NjaGVkdWxlICpfc2NoZWR1bGUsIERFU19jYmxvY2sgKml2ZWMsIGludCBlbmMpCisjZW5kaWYKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgdGluMCx0aW4xOworCXJlZ2lzdGVyIERFU19MT05HIHRvdXQwLHRvdXQxLHhvcjAseG9yMTsKKwlyZWdpc3RlciBsb25nIGw9bGVuZ3RoOworCURFU19MT05HIHRpblsyXTsKKwl1bnNpZ25lZCBjaGFyICppdjsKKworCWl2ID0gJigqaXZlYylbMF07CisKKwlpZiAoZW5jKQorCQl7CisJCWMybChpdix0b3V0MCk7CisJCWMybChpdix0b3V0MSk7CisJCWZvciAobC09ODsgbD49MDsgbC09OCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsKKwkJCWMybChpbix0aW4xKTsKKwkJCXRpbjBePXRvdXQwOyB0aW5bMF09dGluMDsKKwkJCXRpbjFePXRvdXQxOyB0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MSgoREVTX0xPTkcgKil0aW4sX3NjaGVkdWxlLERFU19FTkNSWVBUKTsKKwkJCXRvdXQwPXRpblswXTsgbDJjKHRvdXQwLG91dCk7CisJCQl0b3V0MT10aW5bMV07IGwyYyh0b3V0MSxvdXQpOworCQkJfQorCQlpZiAobCAhPSAtOCkKKwkJCXsKKwkJCWMybG4oaW4sdGluMCx0aW4xLGwrOCk7CisJCQl0aW4wXj10b3V0MDsgdGluWzBdPXRpbjA7CisJCQl0aW4xXj10b3V0MTsgdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDEoKERFU19MT05HICopdGluLF9zY2hlZHVsZSxERVNfRU5DUllQVCk7CisJCQl0b3V0MD10aW5bMF07IGwyYyh0b3V0MCxvdXQpOworCQkJdG91dDE9dGluWzFdOyBsMmModG91dDEsb3V0KTsKKwkJCX0KKyNpZm5kZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgorCQlpdiA9ICYoKml2ZWMpWzBdOworCQlsMmModG91dDAsaXYpOworCQlsMmModG91dDEsaXYpOworI2VuZGlmCisJCX0KKwllbHNlCisJCXsKKwkJYzJsKGl2LHhvcjApOworCQljMmwoaXYseG9yMSk7CisJCWZvciAobC09ODsgbD49MDsgbC09OCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsgdGluWzBdPXRpbjA7CisJCQljMmwoaW4sdGluMSk7IHRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQxKChERVNfTE9ORyAqKXRpbixfc2NoZWR1bGUsREVTX0RFQ1JZUFQpOworCQkJdG91dDA9dGluWzBdXnhvcjA7CisJCQl0b3V0MT10aW5bMV1eeG9yMTsKKwkJCWwyYyh0b3V0MCxvdXQpOworCQkJbDJjKHRvdXQxLG91dCk7CisJCQl4b3IwPXRpbjA7CisJCQl4b3IxPXRpbjE7CisJCQl9CisJCWlmIChsICE9IC04KQorCQkJeworCQkJYzJsKGluLHRpbjApOyB0aW5bMF09dGluMDsKKwkJCWMybChpbix0aW4xKTsgdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDEoKERFU19MT05HICopdGluLF9zY2hlZHVsZSxERVNfREVDUllQVCk7CisJCQl0b3V0MD10aW5bMF1eeG9yMDsKKwkJCXRvdXQxPXRpblsxXV54b3IxOworCQkJbDJjbih0b3V0MCx0b3V0MSxvdXQsbCs4KTsKKyNpZm5kZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgorCQkJeG9yMD10aW4wOworCQkJeG9yMT10aW4xOworI2VuZGlmCisJCQl9CisjaWZuZGVmIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYgCisJCWl2ID0gJigqaXZlYylbMF07CisJCWwyYyh4b3IwLGl2KTsKKwkJbDJjKHhvcjEsaXYpOworI2VuZGlmCisJCX0KKwl0aW4wPXRpbjE9dG91dDA9dG91dDE9eG9yMD14b3IxPTA7CisJdGluWzBdPXRpblsxXT0wOworCX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI2YjljCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jCkBAIC0wLDAgKzEsNDA2IEBACisvKiBjcnlwdG8vZGVzL3NldF9rZXkuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisvKiBzZXRfa2V5LmMgdiAxLjQgZWF5IDI0LzkvOTEKKyAqIDEuNCBTcGVlZCB1cCBieSA0MDAlIDotKQorICogMS4zIGFkZGVkIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucy4KKyAqIDEuMiB1bnJvbGxlZCBtYWtlX2tleV9zY2hlZCBhIGJpdCBtb3JlCisgKiAxLjEgYWRkZWQgbm9ybV9leHBhbmRfYml0cworICogMS4wIEZpcnN0IHdvcmtpbmcgdmVyc2lvbgorICovCitpbnQgREVTX2NoZWNrX2tleSA9IDA7CisjaW5jbHVkZSAib3BlbnNzbF9kZXNfbG9jYWwuaCIKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2RkX3Bhcml0eVsyNTZdPXsKKyAgMSwgIDEsICAyLCAgMiwgIDQsICA0LCAgNywgIDcsICA4LCAgOCwgMTEsIDExLCAxMywgMTMsIDE0LCAxNCwKKyAxNiwgMTYsIDE5LCAxOSwgMjEsIDIxLCAyMiwgMjIsIDI1LCAyNSwgMjYsIDI2LCAyOCwgMjgsIDMxLCAzMSwKKyAzMiwgMzIsIDM1LCAzNSwgMzcsIDM3LCAzOCwgMzgsIDQxLCA0MSwgNDIsIDQyLCA0NCwgNDQsIDQ3LCA0NywKKyA0OSwgNDksIDUwLCA1MCwgNTIsIDUyLCA1NSwgNTUsIDU2LCA1NiwgNTksIDU5LCA2MSwgNjEsIDYyLCA2MiwKKyA2NCwgNjQsIDY3LCA2NywgNjksIDY5LCA3MCwgNzAsIDczLCA3MywgNzQsIDc0LCA3NiwgNzYsIDc5LCA3OSwKKyA4MSwgODEsIDgyLCA4MiwgODQsIDg0LCA4NywgODcsIDg4LCA4OCwgOTEsIDkxLCA5MywgOTMsIDk0LCA5NCwKKyA5NywgOTcsIDk4LCA5OCwxMDAsMTAwLDEwMywxMDMsMTA0LDEwNCwxMDcsMTA3LDEwOSwxMDksMTEwLDExMCwKKzExMiwxMTIsMTE1LDExNSwxMTcsMTE3LDExOCwxMTgsMTIxLDEyMSwxMjIsMTIyLDEyNCwxMjQsMTI3LDEyNywKKzEyOCwxMjgsMTMxLDEzMSwxMzMsMTMzLDEzNCwxMzQsMTM3LDEzNywxMzgsMTM4LDE0MCwxNDAsMTQzLDE0MywKKzE0NSwxNDUsMTQ2LDE0NiwxNDgsMTQ4LDE1MSwxNTEsMTUyLDE1MiwxNTUsMTU1LDE1NywxNTcsMTU4LDE1OCwKKzE2MSwxNjEsMTYyLDE2MiwxNjQsMTY0LDE2NywxNjcsMTY4LDE2OCwxNzEsMTcxLDE3MywxNzMsMTc0LDE3NCwKKzE3NiwxNzYsMTc5LDE3OSwxODEsMTgxLDE4MiwxODIsMTg1LDE4NSwxODYsMTg2LDE4OCwxODgsMTkxLDE5MSwKKzE5MywxOTMsMTk0LDE5NCwxOTYsMTk2LDE5OSwxOTksMjAwLDIwMCwyMDMsMjAzLDIwNSwyMDUsMjA2LDIwNiwKKzIwOCwyMDgsMjExLDIxMSwyMTMsMjEzLDIxNCwyMTQsMjE3LDIxNywyMTgsMjE4LDIyMCwyMjAsMjIzLDIyMywKKzIyNCwyMjQsMjI3LDIyNywyMjksMjI5LDIzMCwyMzAsMjMzLDIzMywyMzQsMjM0LDIzNiwyMzYsMjM5LDIzOSwKKzI0MSwyNDEsMjQyLDI0MiwyNDQsMjQ0LDI0NywyNDcsMjQ4LDI0OCwyNTEsMjUxLDI1MywyNTMsMjU0LDI1NH07CisKK3ZvaWQgREVTX3NldF9vZGRfcGFyaXR5KERFU19jYmxvY2sgKmtleSkKKwl7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGk9MDsgaTxERVNfS0VZX1NaOyBpKyspCisJCSgqa2V5KVtpXT1vZGRfcGFyaXR5Wygqa2V5KVtpXV07CisJfQorCitpbnQgREVTX2NoZWNrX2tleV9wYXJpdHkoY29uc3RfREVTX2NibG9jayAqa2V5KQorCXsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaT0wOyBpPERFU19LRVlfU1o7IGkrKykKKwkJeworCQlpZiAoKCprZXkpW2ldICE9IG9kZF9wYXJpdHlbKCprZXkpW2ldXSkKKwkJCXJldHVybigwKTsKKwkJfQorCXJldHVybigxKTsKKwl9CisKKy8qIFdlYWsgYW5kIHNlbWkgd2VlayBrZXlzIGFzIHRha2UgZnJvbQorICogJUEgRC5XLiBEYXZpZXMKKyAqICVBIFcuTC4gUHJpY2UKKyAqICVUIFNlY3VyaXR5IGZvciBDb21wdXRlciBOZXR3b3JrcworICogJUkgSm9obiBXaWxleSAmIFNvbnMKKyAqICVEIDE5ODQKKyAqIE1hbnkgdGhhbmtzIHRvIHNtYkB1bHlzc2VzLmF0dC5jb20gKFN0ZXZlbiBCZWxsb3ZpbikgZm9yIHRoZSByZWZlcmVuY2UKKyAqIChhbmQgYWN0dWFsIGNibG9jayB2YWx1ZXMpLgorICovCisjZGVmaW5lIE5VTV9XRUFLX0tFWQkxNgorc3RhdGljIGNvbnN0IERFU19jYmxvY2sgd2Vha19rZXlzW05VTV9XRUFLX0tFWV09eworCS8qIHdlYWsga2V5cyAqLworCXsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9LAorCXsweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4RkV9LAorCXsweDFGLDB4MUYsMHgxRiwweDFGLDB4MEUsMHgwRSwweDBFLDB4MEV9LAorCXsweEUwLDB4RTAsMHhFMCwweEUwLDB4RjEsMHhGMSwweEYxLDB4RjF9LAorCS8qIHNlbWktd2VhayBrZXlzICovCisJezB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMSwweEZFLDB4MDEsMHhGRX0sCisJezB4RkUsMHgwMSwweEZFLDB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMX0sCisJezB4MUYsMHhFMCwweDFGLDB4RTAsMHgwRSwweEYxLDB4MEUsMHhGMX0sCisJezB4RTAsMHgxRiwweEUwLDB4MUYsMHhGMSwweDBFLDB4RjEsMHgwRX0sCisJezB4MDEsMHhFMCwweDAxLDB4RTAsMHgwMSwweEYxLDB4MDEsMHhGMX0sCisJezB4RTAsMHgwMSwweEUwLDB4MDEsMHhGMSwweDAxLDB4RjEsMHgwMX0sCisJezB4MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEUsMHhGRX0sCisJezB4RkUsMHgxRiwweEZFLDB4MUYsMHhGRSwweDBFLDB4RkUsMHgwRX0sCisJezB4MDEsMHgxRiwweDAxLDB4MUYsMHgwMSwweDBFLDB4MDEsMHgwRX0sCisJezB4MUYsMHgwMSwweDFGLDB4MDEsMHgwRSwweDAxLDB4MEUsMHgwMX0sCisJezB4RTAsMHhGRSwweEUwLDB4RkUsMHhGMSwweEZFLDB4RjEsMHhGRX0sCisJezB4RkUsMHhFMCwweEZFLDB4RTAsMHhGRSwweEYxLDB4RkUsMHhGMX19OworCitpbnQgREVTX2lzX3dlYWtfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSkKKwl7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxOVU1fV0VBS19LRVk7IGkrKykKKwkJLyogQWRkZWQgPT0gMCB0byBjb21wYXJpc29uLCBJIG9idmlvdXNseSBkb24ndCBydW4KKwkJICogdGhpcyBzZWN0aW9uIHZlcnkgb2Z0ZW4gOi0oLCB0aGFua3MgdG8KKwkJICogZW5naW5lZXJpbmdATW9ybmluZ1N0YXIuQ29tIGZvciB0aGUgZml4CisJCSAqIGVheSA5My8wNi8yOQorCQkgKiBBbm90aGVyIHByb2JsZW0sIEkgd2FzIGNvbXBhcmluZyBvbmx5IHRoZSBmaXJzdCA0CisJCSAqIGJ5dGVzLCA5Ny8wMy8xOCAqLworCQlpZiAobWVtY21wKHdlYWtfa2V5c1tpXSxrZXksc2l6ZW9mKERFU19jYmxvY2spKSA9PSAwKSByZXR1cm4oMSk7CisJcmV0dXJuKDApOworCX0KKworLyogTk9XIERFRklORUQgSU4gZGVzX2xvY2FsLmgKKyAqIFNlZSBlY2JfZW5jcnlwdC5jIGZvciBhIHBzZXVkbyBkZXNjcmlwdGlvbiBvZiB0aGVzZSBtYWNyb3MuIAorICogI2RlZmluZSBQRVJNX09QKGEsYix0LG4sbSkgKCh0KT0oKCgoYSk+PihuKSleKGIpKSYobSkpLFwKKyAqIAkoYilePSh0KSxcCisgKiAJKGEpPSgoYSleKCh0KTw8KG4pKSkpCisgKi8KKworI2RlZmluZSBIUEVSTV9PUChhLHQsbixtKSAoKHQpPSgoKChhKTw8KDE2LShuKSkpXihhKSkmKG0pKSxcCisJKGEpPShhKV4odCleKHQ+PigxNi0obikpKSkKKworc3RhdGljIGNvbnN0IERFU19MT05HIGRlc19za2JbOF1bNjRdPXsKKwl7CisJLyogZm9yIEMgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDEgMiAzIDQgNSA2ICovCisJMHgwMDAwMDAwMEwsMHgwMDAwMDAxMEwsMHgyMDAwMDAwMEwsMHgyMDAwMDAxMEwsCisJMHgwMDAxMDAwMEwsMHgwMDAxMDAxMEwsMHgyMDAxMDAwMEwsMHgyMDAxMDAxMEwsCisJMHgwMDAwMDgwMEwsMHgwMDAwMDgxMEwsMHgyMDAwMDgwMEwsMHgyMDAwMDgxMEwsCisJMHgwMDAxMDgwMEwsMHgwMDAxMDgxMEwsMHgyMDAxMDgwMEwsMHgyMDAxMDgxMEwsCisJMHgwMDAwMDAyMEwsMHgwMDAwMDAzMEwsMHgyMDAwMDAyMEwsMHgyMDAwMDAzMEwsCisJMHgwMDAxMDAyMEwsMHgwMDAxMDAzMEwsMHgyMDAxMDAyMEwsMHgyMDAxMDAzMEwsCisJMHgwMDAwMDgyMEwsMHgwMDAwMDgzMEwsMHgyMDAwMDgyMEwsMHgyMDAwMDgzMEwsCisJMHgwMDAxMDgyMEwsMHgwMDAxMDgzMEwsMHgyMDAxMDgyMEwsMHgyMDAxMDgzMEwsCisJMHgwMDA4MDAwMEwsMHgwMDA4MDAxMEwsMHgyMDA4MDAwMEwsMHgyMDA4MDAxMEwsCisJMHgwMDA5MDAwMEwsMHgwMDA5MDAxMEwsMHgyMDA5MDAwMEwsMHgyMDA5MDAxMEwsCisJMHgwMDA4MDgwMEwsMHgwMDA4MDgxMEwsMHgyMDA4MDgwMEwsMHgyMDA4MDgxMEwsCisJMHgwMDA5MDgwMEwsMHgwMDA5MDgxMEwsMHgyMDA5MDgwMEwsMHgyMDA5MDgxMEwsCisJMHgwMDA4MDAyMEwsMHgwMDA4MDAzMEwsMHgyMDA4MDAyMEwsMHgyMDA4MDAzMEwsCisJMHgwMDA5MDAyMEwsMHgwMDA5MDAzMEwsMHgyMDA5MDAyMEwsMHgyMDA5MDAzMEwsCisJMHgwMDA4MDgyMEwsMHgwMDA4MDgzMEwsMHgyMDA4MDgyMEwsMHgyMDA4MDgzMEwsCisJMHgwMDA5MDgyMEwsMHgwMDA5MDgzMEwsMHgyMDA5MDgyMEwsMHgyMDA5MDgzMEwsCisJfSx7CisJLyogZm9yIEMgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDcgOCAxMCAxMSAxMiAxMyAqLworCTB4MDAwMDAwMDBMLDB4MDIwMDAwMDBMLDB4MDAwMDIwMDBMLDB4MDIwMDIwMDBMLAorCTB4MDAyMDAwMDBMLDB4MDIyMDAwMDBMLDB4MDAyMDIwMDBMLDB4MDIyMDIwMDBMLAorCTB4MDAwMDAwMDRMLDB4MDIwMDAwMDRMLDB4MDAwMDIwMDRMLDB4MDIwMDIwMDRMLAorCTB4MDAyMDAwMDRMLDB4MDIyMDAwMDRMLDB4MDAyMDIwMDRMLDB4MDIyMDIwMDRMLAorCTB4MDAwMDA0MDBMLDB4MDIwMDA0MDBMLDB4MDAwMDI0MDBMLDB4MDIwMDI0MDBMLAorCTB4MDAyMDA0MDBMLDB4MDIyMDA0MDBMLDB4MDAyMDI0MDBMLDB4MDIyMDI0MDBMLAorCTB4MDAwMDA0MDRMLDB4MDIwMDA0MDRMLDB4MDAwMDI0MDRMLDB4MDIwMDI0MDRMLAorCTB4MDAyMDA0MDRMLDB4MDIyMDA0MDRMLDB4MDAyMDI0MDRMLDB4MDIyMDI0MDRMLAorCTB4MTAwMDAwMDBMLDB4MTIwMDAwMDBMLDB4MTAwMDIwMDBMLDB4MTIwMDIwMDBMLAorCTB4MTAyMDAwMDBMLDB4MTIyMDAwMDBMLDB4MTAyMDIwMDBMLDB4MTIyMDIwMDBMLAorCTB4MTAwMDAwMDRMLDB4MTIwMDAwMDRMLDB4MTAwMDIwMDRMLDB4MTIwMDIwMDRMLAorCTB4MTAyMDAwMDRMLDB4MTIyMDAwMDRMLDB4MTAyMDIwMDRMLDB4MTIyMDIwMDRMLAorCTB4MTAwMDA0MDBMLDB4MTIwMDA0MDBMLDB4MTAwMDI0MDBMLDB4MTIwMDI0MDBMLAorCTB4MTAyMDA0MDBMLDB4MTIyMDA0MDBMLDB4MTAyMDI0MDBMLDB4MTIyMDI0MDBMLAorCTB4MTAwMDA0MDRMLDB4MTIwMDA0MDRMLDB4MTAwMDI0MDRMLDB4MTIwMDI0MDRMLAorCTB4MTAyMDA0MDRMLDB4MTIyMDA0MDRMLDB4MTAyMDI0MDRMLDB4MTIyMDI0MDRMLAorCX0seworCS8qIGZvciBDIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAxNCAxNSAxNiAxNyAxOSAyMCAqLworCTB4MDAwMDAwMDBMLDB4MDAwMDAwMDFMLDB4MDAwNDAwMDBMLDB4MDAwNDAwMDFMLAorCTB4MDEwMDAwMDBMLDB4MDEwMDAwMDFMLDB4MDEwNDAwMDBMLDB4MDEwNDAwMDFMLAorCTB4MDAwMDAwMDJMLDB4MDAwMDAwMDNMLDB4MDAwNDAwMDJMLDB4MDAwNDAwMDNMLAorCTB4MDEwMDAwMDJMLDB4MDEwMDAwMDNMLDB4MDEwNDAwMDJMLDB4MDEwNDAwMDNMLAorCTB4MDAwMDAyMDBMLDB4MDAwMDAyMDFMLDB4MDAwNDAyMDBMLDB4MDAwNDAyMDFMLAorCTB4MDEwMDAyMDBMLDB4MDEwMDAyMDFMLDB4MDEwNDAyMDBMLDB4MDEwNDAyMDFMLAorCTB4MDAwMDAyMDJMLDB4MDAwMDAyMDNMLDB4MDAwNDAyMDJMLDB4MDAwNDAyMDNMLAorCTB4MDEwMDAyMDJMLDB4MDEwMDAyMDNMLDB4MDEwNDAyMDJMLDB4MDEwNDAyMDNMLAorCTB4MDgwMDAwMDBMLDB4MDgwMDAwMDFMLDB4MDgwNDAwMDBMLDB4MDgwNDAwMDFMLAorCTB4MDkwMDAwMDBMLDB4MDkwMDAwMDFMLDB4MDkwNDAwMDBMLDB4MDkwNDAwMDFMLAorCTB4MDgwMDAwMDJMLDB4MDgwMDAwMDNMLDB4MDgwNDAwMDJMLDB4MDgwNDAwMDNMLAorCTB4MDkwMDAwMDJMLDB4MDkwMDAwMDNMLDB4MDkwNDAwMDJMLDB4MDkwNDAwMDNMLAorCTB4MDgwMDAyMDBMLDB4MDgwMDAyMDFMLDB4MDgwNDAyMDBMLDB4MDgwNDAyMDFMLAorCTB4MDkwMDAyMDBMLDB4MDkwMDAyMDFMLDB4MDkwNDAyMDBMLDB4MDkwNDAyMDFMLAorCTB4MDgwMDAyMDJMLDB4MDgwMDAyMDNMLDB4MDgwNDAyMDJMLDB4MDgwNDAyMDNMLAorCTB4MDkwMDAyMDJMLDB4MDkwMDAyMDNMLDB4MDkwNDAyMDJMLDB4MDkwNDAyMDNMLAorCX0seworCS8qIGZvciBDIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAyMSAyMyAyNCAyNiAyNyAyOCAqLworCTB4MDAwMDAwMDBMLDB4MDAxMDAwMDBMLDB4MDAwMDAxMDBMLDB4MDAxMDAxMDBMLAorCTB4MDAwMDAwMDhMLDB4MDAxMDAwMDhMLDB4MDAwMDAxMDhMLDB4MDAxMDAxMDhMLAorCTB4MDAwMDEwMDBMLDB4MDAxMDEwMDBMLDB4MDAwMDExMDBMLDB4MDAxMDExMDBMLAorCTB4MDAwMDEwMDhMLDB4MDAxMDEwMDhMLDB4MDAwMDExMDhMLDB4MDAxMDExMDhMLAorCTB4MDQwMDAwMDBMLDB4MDQxMDAwMDBMLDB4MDQwMDAxMDBMLDB4MDQxMDAxMDBMLAorCTB4MDQwMDAwMDhMLDB4MDQxMDAwMDhMLDB4MDQwMDAxMDhMLDB4MDQxMDAxMDhMLAorCTB4MDQwMDEwMDBMLDB4MDQxMDEwMDBMLDB4MDQwMDExMDBMLDB4MDQxMDExMDBMLAorCTB4MDQwMDEwMDhMLDB4MDQxMDEwMDhMLDB4MDQwMDExMDhMLDB4MDQxMDExMDhMLAorCTB4MDAwMjAwMDBMLDB4MDAxMjAwMDBMLDB4MDAwMjAxMDBMLDB4MDAxMjAxMDBMLAorCTB4MDAwMjAwMDhMLDB4MDAxMjAwMDhMLDB4MDAwMjAxMDhMLDB4MDAxMjAxMDhMLAorCTB4MDAwMjEwMDBMLDB4MDAxMjEwMDBMLDB4MDAwMjExMDBMLDB4MDAxMjExMDBMLAorCTB4MDAwMjEwMDhMLDB4MDAxMjEwMDhMLDB4MDAwMjExMDhMLDB4MDAxMjExMDhMLAorCTB4MDQwMjAwMDBMLDB4MDQxMjAwMDBMLDB4MDQwMjAxMDBMLDB4MDQxMjAxMDBMLAorCTB4MDQwMjAwMDhMLDB4MDQxMjAwMDhMLDB4MDQwMjAxMDhMLDB4MDQxMjAxMDhMLAorCTB4MDQwMjEwMDBMLDB4MDQxMjEwMDBMLDB4MDQwMjExMDBMLDB4MDQxMjExMDBMLAorCTB4MDQwMjEwMDhMLDB4MDQxMjEwMDhMLDB4MDQwMjExMDhMLDB4MDQxMjExMDhMLAorCX0seworCS8qIGZvciBEIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAxIDIgMyA0IDUgNiAqLworCTB4MDAwMDAwMDBMLDB4MTAwMDAwMDBMLDB4MDAwMTAwMDBMLDB4MTAwMTAwMDBMLAorCTB4MDAwMDAwMDRMLDB4MTAwMDAwMDRMLDB4MDAwMTAwMDRMLDB4MTAwMTAwMDRMLAorCTB4MjAwMDAwMDBMLDB4MzAwMDAwMDBMLDB4MjAwMTAwMDBMLDB4MzAwMTAwMDBMLAorCTB4MjAwMDAwMDRMLDB4MzAwMDAwMDRMLDB4MjAwMTAwMDRMLDB4MzAwMTAwMDRMLAorCTB4MDAxMDAwMDBMLDB4MTAxMDAwMDBMLDB4MDAxMTAwMDBMLDB4MTAxMTAwMDBMLAorCTB4MDAxMDAwMDRMLDB4MTAxMDAwMDRMLDB4MDAxMTAwMDRMLDB4MTAxMTAwMDRMLAorCTB4MjAxMDAwMDBMLDB4MzAxMDAwMDBMLDB4MjAxMTAwMDBMLDB4MzAxMTAwMDBMLAorCTB4MjAxMDAwMDRMLDB4MzAxMDAwMDRMLDB4MjAxMTAwMDRMLDB4MzAxMTAwMDRMLAorCTB4MDAwMDEwMDBMLDB4MTAwMDEwMDBMLDB4MDAwMTEwMDBMLDB4MTAwMTEwMDBMLAorCTB4MDAwMDEwMDRMLDB4MTAwMDEwMDRMLDB4MDAwMTEwMDRMLDB4MTAwMTEwMDRMLAorCTB4MjAwMDEwMDBMLDB4MzAwMDEwMDBMLDB4MjAwMTEwMDBMLDB4MzAwMTEwMDBMLAorCTB4MjAwMDEwMDRMLDB4MzAwMDEwMDRMLDB4MjAwMTEwMDRMLDB4MzAwMTEwMDRMLAorCTB4MDAxMDEwMDBMLDB4MTAxMDEwMDBMLDB4MDAxMTEwMDBMLDB4MTAxMTEwMDBMLAorCTB4MDAxMDEwMDRMLDB4MTAxMDEwMDRMLDB4MDAxMTEwMDRMLDB4MTAxMTEwMDRMLAorCTB4MjAxMDEwMDBMLDB4MzAxMDEwMDBMLDB4MjAxMTEwMDBMLDB4MzAxMTEwMDBMLAorCTB4MjAxMDEwMDRMLDB4MzAxMDEwMDRMLDB4MjAxMTEwMDRMLDB4MzAxMTEwMDRMLAorCX0seworCS8qIGZvciBEIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSA4IDkgMTEgMTIgMTMgMTQgKi8KKwkweDAwMDAwMDAwTCwweDA4MDAwMDAwTCwweDAwMDAwMDA4TCwweDA4MDAwMDA4TCwKKwkweDAwMDAwNDAwTCwweDA4MDAwNDAwTCwweDAwMDAwNDA4TCwweDA4MDAwNDA4TCwKKwkweDAwMDIwMDAwTCwweDA4MDIwMDAwTCwweDAwMDIwMDA4TCwweDA4MDIwMDA4TCwKKwkweDAwMDIwNDAwTCwweDA4MDIwNDAwTCwweDAwMDIwNDA4TCwweDA4MDIwNDA4TCwKKwkweDAwMDAwMDAxTCwweDA4MDAwMDAxTCwweDAwMDAwMDA5TCwweDA4MDAwMDA5TCwKKwkweDAwMDAwNDAxTCwweDA4MDAwNDAxTCwweDAwMDAwNDA5TCwweDA4MDAwNDA5TCwKKwkweDAwMDIwMDAxTCwweDA4MDIwMDAxTCwweDAwMDIwMDA5TCwweDA4MDIwMDA5TCwKKwkweDAwMDIwNDAxTCwweDA4MDIwNDAxTCwweDAwMDIwNDA5TCwweDA4MDIwNDA5TCwKKwkweDAyMDAwMDAwTCwweDBBMDAwMDAwTCwweDAyMDAwMDA4TCwweDBBMDAwMDA4TCwKKwkweDAyMDAwNDAwTCwweDBBMDAwNDAwTCwweDAyMDAwNDA4TCwweDBBMDAwNDA4TCwKKwkweDAyMDIwMDAwTCwweDBBMDIwMDAwTCwweDAyMDIwMDA4TCwweDBBMDIwMDA4TCwKKwkweDAyMDIwNDAwTCwweDBBMDIwNDAwTCwweDAyMDIwNDA4TCwweDBBMDIwNDA4TCwKKwkweDAyMDAwMDAxTCwweDBBMDAwMDAxTCwweDAyMDAwMDA5TCwweDBBMDAwMDA5TCwKKwkweDAyMDAwNDAxTCwweDBBMDAwNDAxTCwweDAyMDAwNDA5TCwweDBBMDAwNDA5TCwKKwkweDAyMDIwMDAxTCwweDBBMDIwMDAxTCwweDAyMDIwMDA5TCwweDBBMDIwMDA5TCwKKwkweDAyMDIwNDAxTCwweDBBMDIwNDAxTCwweDAyMDIwNDA5TCwweDBBMDIwNDA5TCwKKwl9LHsKKwkvKiBmb3IgRCBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMTYgMTcgMTggMTkgMjAgMjEgKi8KKwkweDAwMDAwMDAwTCwweDAwMDAwMTAwTCwweDAwMDgwMDAwTCwweDAwMDgwMTAwTCwKKwkweDAxMDAwMDAwTCwweDAxMDAwMTAwTCwweDAxMDgwMDAwTCwweDAxMDgwMTAwTCwKKwkweDAwMDAwMDEwTCwweDAwMDAwMTEwTCwweDAwMDgwMDEwTCwweDAwMDgwMTEwTCwKKwkweDAxMDAwMDEwTCwweDAxMDAwMTEwTCwweDAxMDgwMDEwTCwweDAxMDgwMTEwTCwKKwkweDAwMjAwMDAwTCwweDAwMjAwMTAwTCwweDAwMjgwMDAwTCwweDAwMjgwMTAwTCwKKwkweDAxMjAwMDAwTCwweDAxMjAwMTAwTCwweDAxMjgwMDAwTCwweDAxMjgwMTAwTCwKKwkweDAwMjAwMDEwTCwweDAwMjAwMTEwTCwweDAwMjgwMDEwTCwweDAwMjgwMTEwTCwKKwkweDAxMjAwMDEwTCwweDAxMjAwMTEwTCwweDAxMjgwMDEwTCwweDAxMjgwMTEwTCwKKwkweDAwMDAwMjAwTCwweDAwMDAwMzAwTCwweDAwMDgwMjAwTCwweDAwMDgwMzAwTCwKKwkweDAxMDAwMjAwTCwweDAxMDAwMzAwTCwweDAxMDgwMjAwTCwweDAxMDgwMzAwTCwKKwkweDAwMDAwMjEwTCwweDAwMDAwMzEwTCwweDAwMDgwMjEwTCwweDAwMDgwMzEwTCwKKwkweDAxMDAwMjEwTCwweDAxMDAwMzEwTCwweDAxMDgwMjEwTCwweDAxMDgwMzEwTCwKKwkweDAwMjAwMjAwTCwweDAwMjAwMzAwTCwweDAwMjgwMjAwTCwweDAwMjgwMzAwTCwKKwkweDAxMjAwMjAwTCwweDAxMjAwMzAwTCwweDAxMjgwMjAwTCwweDAxMjgwMzAwTCwKKwkweDAwMjAwMjEwTCwweDAwMjAwMzEwTCwweDAwMjgwMjEwTCwweDAwMjgwMzEwTCwKKwkweDAxMjAwMjEwTCwweDAxMjAwMzEwTCwweDAxMjgwMjEwTCwweDAxMjgwMzEwTCwKKwl9LHsKKwkvKiBmb3IgRCBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMjIgMjMgMjQgMjUgMjcgMjggKi8KKwkweDAwMDAwMDAwTCwweDA0MDAwMDAwTCwweDAwMDQwMDAwTCwweDA0MDQwMDAwTCwKKwkweDAwMDAwMDAyTCwweDA0MDAwMDAyTCwweDAwMDQwMDAyTCwweDA0MDQwMDAyTCwKKwkweDAwMDAyMDAwTCwweDA0MDAyMDAwTCwweDAwMDQyMDAwTCwweDA0MDQyMDAwTCwKKwkweDAwMDAyMDAyTCwweDA0MDAyMDAyTCwweDAwMDQyMDAyTCwweDA0MDQyMDAyTCwKKwkweDAwMDAwMDIwTCwweDA0MDAwMDIwTCwweDAwMDQwMDIwTCwweDA0MDQwMDIwTCwKKwkweDAwMDAwMDIyTCwweDA0MDAwMDIyTCwweDAwMDQwMDIyTCwweDA0MDQwMDIyTCwKKwkweDAwMDAyMDIwTCwweDA0MDAyMDIwTCwweDAwMDQyMDIwTCwweDA0MDQyMDIwTCwKKwkweDAwMDAyMDIyTCwweDA0MDAyMDIyTCwweDAwMDQyMDIyTCwweDA0MDQyMDIyTCwKKwkweDAwMDAwODAwTCwweDA0MDAwODAwTCwweDAwMDQwODAwTCwweDA0MDQwODAwTCwKKwkweDAwMDAwODAyTCwweDA0MDAwODAyTCwweDAwMDQwODAyTCwweDA0MDQwODAyTCwKKwkweDAwMDAyODAwTCwweDA0MDAyODAwTCwweDAwMDQyODAwTCwweDA0MDQyODAwTCwKKwkweDAwMDAyODAyTCwweDA0MDAyODAyTCwweDAwMDQyODAyTCwweDA0MDQyODAyTCwKKwkweDAwMDAwODIwTCwweDA0MDAwODIwTCwweDAwMDQwODIwTCwweDA0MDQwODIwTCwKKwkweDAwMDAwODIyTCwweDA0MDAwODIyTCwweDAwMDQwODIyTCwweDA0MDQwODIyTCwKKwkweDAwMDAyODIwTCwweDA0MDAyODIwTCwweDAwMDQyODIwTCwweDA0MDQyODIwTCwKKwkweDAwMDAyODIyTCwweDA0MDAyODIyTCwweDAwMDQyODIyTCwweDA0MDQyODIyTCwKKwl9fTsKKworaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCisJeworCWlmIChERVNfY2hlY2tfa2V5KQorCQl7CisJCXJldHVybiBERVNfc2V0X2tleV9jaGVja2VkKGtleSwgc2NoZWR1bGUpOworCQl9CisJZWxzZQorCQl7CisJCURFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKwkJcmV0dXJuIDA7CisJCX0KKwl9CisKKy8qIHJldHVybiAwIGlmIGtleSBwYXJpdHkgaXMgb2RkIChjb3JyZWN0KSwKKyAqIHJldHVybiAtMSBpZiBrZXkgcGFyaXR5IGVycm9yLAorICogcmV0dXJuIC0yIGlmIGlsbGVnYWwgd2VhayBrZXkuCisgKi8KK2ludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCisJeworCWlmICghREVTX2NoZWNrX2tleV9wYXJpdHkoa2V5KSkKKwkJcmV0dXJuKC0xKTsKKwlpZiAoREVTX2lzX3dlYWtfa2V5KGtleSkpCisJCXJldHVybigtMik7CisJREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworCXJldHVybiAwOworCX0KKwordm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKwl7CisJc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CisJcmVnaXN0ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKKwlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICppbjsKKwlyZWdpc3RlciBERVNfTE9ORyAqazsKKwlyZWdpc3RlciBpbnQgaTsKKworI2lmZGVmIE9QRU5CU0RfREVWX0NSWVBUTworCW1lbWNweShzY2hlZHVsZS0+a2V5LGtleSxzaXplb2Ygc2NoZWR1bGUtPmtleSk7CisJc2NoZWR1bGUtPnNlc3Npb249TlVMTDsKKyNlbmRpZgorCWsgPSAmc2NoZWR1bGUtPmtzLT5kZXNsb25nWzBdOworCWluID0gJigqa2V5KVswXTsKKworCWMybChpbixjKTsKKwljMmwoaW4sZCk7CisKKwkvKiBkbyBQQzEgaW4gNDcgc2ltcGxlIG9wZXJhdGlvbnMgOi0pCisJICogVGhhbmtzIHRvIEpvaG4gRmxldGNoZXIgKGpvaG5fZmxldGNoZXJAbGNjbWFpbC5vY2YubGxubC5nb3YpCisJICogZm9yIHRoZSBpbnNwaXJhdGlvbi4gOi0pICovCisJUEVSTV9PUCAoZCxjLHQsNCwweDBmMGYwZjBmTCk7CisJSFBFUk1fT1AoYyx0LC0yLDB4Y2NjYzAwMDBMKTsKKwlIUEVSTV9PUChkLHQsLTIsMHhjY2NjMDAwMEwpOworCVBFUk1fT1AgKGQsYyx0LDEsMHg1NTU1NTU1NUwpOworCVBFUk1fT1AgKGMsZCx0LDgsMHgwMGZmMDBmZkwpOworCVBFUk1fT1AgKGQsYyx0LDEsMHg1NTU1NTU1NUwpOworCWQ9CSgoKGQmMHgwMDAwMDBmZkwpPDwxNkwpfCAoZCYweDAwMDBmZjAwTCkgICAgIHwKKwkJICgoZCYweDAwZmYwMDAwTCk+PjE2TCl8KChjJjB4ZjAwMDAwMDBMKT4+NEwpKTsKKwljJj0weDBmZmZmZmZmTDsKKworCWZvciAoaT0wOyBpPElURVJBVElPTlM7IGkrKykKKwkJeworCQlpZiAoc2hpZnRzMltpXSkKKwkJCXsgYz0oKGM+PjJMKXwoYzw8MjZMKSk7IGQ9KChkPj4yTCl8KGQ8PDI2TCkpOyB9CisJCWVsc2UKKwkJCXsgYz0oKGM+PjFMKXwoYzw8MjdMKSk7IGQ9KChkPj4xTCl8KGQ8PDI3TCkpOyB9CisJCWMmPTB4MGZmZmZmZmZMOworCQlkJj0weDBmZmZmZmZmTDsKKwkJLyogY291bGQgYmUgYSBmZXcgbGVzcyBzaGlmdHMgYnV0IEkgYW0gdG8gbGF6eSBhdCB0aGlzCisJCSAqIHBvaW50IGluIHRpbWUgdG8gaW52ZXN0aWdhdGUgKi8KKwkJcz0JZGVzX3NrYlswXVsgKGMgICAgKSYweDNmICAgICAgICAgICAgICAgIF18CisJCQlkZXNfc2tiWzFdWygoYz4+IDZMKSYweDAzKXwoKGM+PiA3TCkmMHgzYyldfAorCQkJZGVzX3NrYlsyXVsoKGM+PjEzTCkmMHgwZil8KChjPj4xNEwpJjB4MzApXXwKKwkJCWRlc19za2JbM11bKChjPj4yMEwpJjB4MDEpfCgoYz4+MjFMKSYweDA2KSB8CisJCQkJCQkgICgoYz4+MjJMKSYweDM4KV07CisJCXQ9CWRlc19za2JbNF1bIChkICAgICkmMHgzZiAgICAgICAgICAgICAgICBdfAorCQkJZGVzX3NrYls1XVsoKGQ+PiA3TCkmMHgwMyl8KChkPj4gOEwpJjB4M2MpXXwKKwkJCWRlc19za2JbNl1bIChkPj4xNUwpJjB4M2YgICAgICAgICAgICAgICAgXXwKKwkJCWRlc19za2JbN11bKChkPj4yMUwpJjB4MGYpfCgoZD4+MjJMKSYweDMwKV07CisKKwkJLyogdGFibGUgY29udGFpbmVkIDAyMTMgNDY1NyAqLworCQl0Mj0oKHQ8PDE2TCl8KHMmMHgwMDAwZmZmZkwpKSYweGZmZmZmZmZmTDsKKwkJKihrKyspPVJPVEFURSh0MiwzMCkmMHhmZmZmZmZmZkw7CisKKwkJdDI9KChzPj4xNkwpfCh0JjB4ZmZmZjAwMDBMKSk7CisJCSooaysrKT1ST1RBVEUodDIsMjYpJjB4ZmZmZmZmZmZMOworCQl9CisJfQorCitpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorCXsKKwlyZXR1cm4oREVTX3NldF9rZXkoa2V5LHNjaGVkdWxlKSk7CisJfQorLyoKKyN1bmRlZiBkZXNfZml4dXBfa2V5X3Bhcml0eQordm9pZCBkZXNfZml4dXBfa2V5X3Bhcml0eShkZXNfY2Jsb2NrICprZXkpCisJeworCWRlc19zZXRfb2RkX3Bhcml0eShrZXkpOworCX0KKyovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGEuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGEuaApAQCAtMCwwICsxLDE5OSBAQAorLyogY3J5cHRvL3NoYS9zaGEuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaWZuZGVmIEhFQURFUl9TSEFfSAorI2RlZmluZSBIRUFERVJfU0hBX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgfHwgKGRlZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiBkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkpCisjZXJyb3IgU0hBIGlzIGRpc2FibGVkLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKyNkZWZpbmUgRklQU19TSEFfU0laRV9UIHNpemVfdAorI2VuZGlmCisKKy8qCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKiAhIFNIQV9MT05HIGhhcyB0byBiZSBhdCBsZWFzdCAzMiBiaXRzIHdpZGUuIElmIGl0J3Mgd2lkZXIsIHRoZW4gIQorICogISBTSEFfTE9OR19MT0cyIGhhcyB0byBiZSBkZWZpbmVkIGFsb25nLiAgICAgICAgICAgICAgICAgICAgICAgICEKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqLworCisjaWYgZGVmaW5lZChfX0xQMzJfXykKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgbG9uZworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19DUkFZKSB8fCBkZWZpbmVkKF9fSUxQNjRfXykKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgbG9uZworI2RlZmluZSBTSEFfTE9OR19MT0cyIDMKKyNlbHNlCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgU0hBX0xCTE9DSwkxNgorI2RlZmluZSBTSEFfQ0JMT0NLCShTSEFfTEJMT0NLKjQpCS8qIFNIQSB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgMzIgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjZGVmaW5lIFNIQV9MQVNUX0JMT0NLICAoU0hBX0NCTE9DSy04KQorI2RlZmluZSBTSEFfRElHRVNUX0xFTkdUSCAyMAorCit0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORyBoMCxoMSxoMixoMyxoNDsKKwlTSEFfTE9ORyBObCxOaDsKKwlTSEFfTE9ORyBkYXRhW1NIQV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW07CisJfSBTSEFfQ1RYOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAoraW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOworaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQoraW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKK2ludCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTEoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBMV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2RlZmluZSBTSEEyNTZfQ0JMT0NLCShTSEFfTEJMT0NLKjQpCS8qIFNIQS0yNTYgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDMyIGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2RlZmluZSBTSEEyMjRfRElHRVNUX0xFTkdUSAkyOAorI2RlZmluZSBTSEEyNTZfRElHRVNUX0xFTkdUSAkzMgorCit0eXBlZGVmIHN0cnVjdCBTSEEyNTZzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORyBoWzhdOworCVNIQV9MT05HIE5sLE5oOworCVNIQV9MT05HIGRhdGFbU0hBX0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bSxtZF9sZW47CisJfSBTSEEyNTZfQ1RYOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CitpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7CitpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMjI0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK2ludCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKK2ludCBTSEEyNTZfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTI1Nl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEEyNTZfVHJhbnNmb3JtKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNkZWZpbmUgU0hBMzg0X0RJR0VTVF9MRU5HVEgJNDgKKyNkZWZpbmUgU0hBNTEyX0RJR0VTVF9MRU5HVEgJNjQKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorLyoKKyAqIFVubGlrZSAzMi1iaXQgZGlnZXN0IGFsZ29yaXRobXMsIFNIQS01MTIgKnJlbGllcyogb24gU0hBX0xPTkc2NAorICogYmVpbmcgZXhhY3RseSA2NC1iaXQgd2lkZS4gU2VlIEltcGxlbWVudGF0aW9uIE5vdGVzIGluIHNoYTUxMi5jCisgKiBmb3IgZnVydGhlciBkZXRhaWxzLgorICovCisjZGVmaW5lIFNIQTUxMl9DQkxPQ0sJKFNIQV9MQkxPQ0sqOCkJLyogU0hBLTUxMiB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgNjQgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIF9faW50NjQKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVSTY0CisjZWxpZiBkZWZpbmVkKF9fYXJjaDY0X18pCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgbG9uZworI2RlZmluZSBVNjQoQykgICAgIEMjI1VMCisjZWxzZQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIGxvbmcgbG9uZworI2RlZmluZSBVNjQoQykgICAgIEMjI1VMTAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0CisJeworCVNIQV9MT05HNjQgaFs4XTsKKwlTSEFfTE9ORzY0IE5sLE5oOworCXVuaW9uIHsKKwkJU0hBX0xPTkc2NAlkW1NIQV9MQkxPQ0tdOworCQl1bnNpZ25lZCBjaGFyCXBbU0hBNTEyX0NCTE9DS107CisJfSB1OworCXVuc2lnbmVkIGludCBudW0sbWRfbGVuOworCX0gU0hBNTEyX0NUWDsKKyNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCitpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEzODRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMzg0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK2ludCBTSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKK2ludCBTSEE1MTJfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTUxMl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEE1MTIoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEE1MTJfVHJhbnNmb3JtKFNIQTUxMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYTEuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDA0OGRiCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhMS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIGNyeXB0by9zaGEvc2hhMWRnc3QuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjdW5kZWYgIFNIQV8wCisjZGVmaW5lIFNIQV8xCisKKy8qIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiAuLi9tZDMyX2NvbW1vbi5oICovCisKKyNpbmNsdWRlICJvcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgiCisKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiYzBkYwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oCkBAIC0wLDAgKzEsNDM2IEBACisvKiBjcnlwdG8vc2hhL3NoYV9sb2NsLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAib3BlbnNzbC9vcGVuc3NsX3NoYS5oIgorCisjZGVmaW5lIERBVEFfT1JERVJfSVNfQklHX0VORElBTgorCisjZGVmaW5lIEhBU0hfTE9ORyAgICAgICAgICAgICAgIFNIQV9MT05HCisjZGVmaW5lIEhBU0hfQ1RYICAgICAgICAgICAgICAgIFNIQV9DVFgKKyNkZWZpbmUgSEFTSF9DQkxPQ0sgICAgICAgICAgICAgU0hBX0NCTE9DSworI2RlZmluZSBIQVNIX01BS0VfU1RSSU5HKGMscykgICBkbyB7CVwKKwl1bnNpZ25lZCBsb25nIGxsOwkJXAorCWxsPShjKS0+aDA7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPmgxOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5oMjsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+aDM7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPmg0OyBIT1NUX2wyYyhsbCwocykpOwlcCisJfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoU0hBXzApCisKKyMgZGVmaW5lIEhBU0hfVVBEQVRFICAgICAgICAgICAgIAlTSEFfVXBkYXRlCisjIGRlZmluZSBIQVNIX1RSQU5TRk9STSAgICAgICAgICAJU0hBX1RyYW5zZm9ybQorIyBkZWZpbmUgSEFTSF9GSU5BTCAgICAgICAgICAgICAgCVNIQV9GaW5hbAorIyBkZWZpbmUgSEFTSF9JTklUCQkJU0hBX0luaXQKKyMgZGVmaW5lIEhBU0hfQkxPQ0tfREFUQV9PUkRFUiAgIAlzaGFfYmxvY2tfZGF0YV9vcmRlcgorIyBkZWZpbmUgWHVwZGF0ZShhLGl4LGlhLGliLGljLGlkKQkoaXg9KGEpPShpYV5pYl5pY15pZCkpCisKK3N0YXRpYyB2b2lkIHNoYV9ibG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLHNpemVfdCBudW0pOworCisjZWxpZiBkZWZpbmVkKFNIQV8xKQorCisjIGRlZmluZSBIQVNIX1VQREFURSAgICAgICAgICAgICAJU0hBMV9VcGRhdGUKKyMgZGVmaW5lIEhBU0hfVFJBTlNGT1JNICAgICAgICAgIAlTSEExX1RyYW5zZm9ybQorIyBkZWZpbmUgSEFTSF9GSU5BTCAgICAgICAgICAgICAgCVNIQTFfRmluYWwKKyMgZGVmaW5lIEhBU0hfSU5JVAkJCVNIQTFfSW5pdAorIyBkZWZpbmUgSEFTSF9CTE9DS19EQVRBX09SREVSICAgCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorIyBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIGRlZmluZWQoX19NQzY4S19fKQorICAgLyogTWV0cm93ZXJrcyBmb3IgTW90b3JvbGEgZmFpbHMgb3RoZXJ3aXNlOi0oIDxhcHByb0BmeS5jaGFsbWVycy5zZT4gKi8KKyMgIGRlZmluZSBYdXBkYXRlKGEsaXgsaWEsaWIsaWMsaWQpCWRvIHsgKGEpPShpYV5pYl5pY15pZCk7CQlcCisJCQkJCSAgICAgaXg9KGEpPVJPVEFURSgoYSksMSk7CVwKKwkJCQkJfSB3aGlsZSAoMCkKKyMgZWxzZQorIyAgZGVmaW5lIFh1cGRhdGUoYSxpeCxpYSxpYixpYyxpZCkJKCAoYSk9KGlhXmliXmljXmlkKSwJXAorCQkJCQkgIGl4PShhKT1ST1RBVEUoKGEpLDEpCVwKKwkJCQkJKQorIyBlbmRpZgorCisjaWZuZGVmIFNIQTFfQVNNCitzdGF0aWMKKyNlbmRpZgordm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsc2l6ZV90IG51bSk7CisKKyNlbHNlCisjIGVycm9yICJFaXRoZXIgU0hBXzAgb3IgU0hBXzEgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisjaW5jbHVkZSAib3BlbnNzbF9tZDMyX2NvbW1vbi5oIgorCisjZGVmaW5lIElOSVRfREFUQV9oMCAweDY3NDUyMzAxVUwKKyNkZWZpbmUgSU5JVF9EQVRBX2gxIDB4ZWZjZGFiODlVTAorI2RlZmluZSBJTklUX0RBVEFfaDIgMHg5OGJhZGNmZVVMCisjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKKyNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAorCitpbnQgSEFTSF9JTklUIChTSEFfQ1RYICpjKQorCXsKKwltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKwljLT5oMD1JTklUX0RBVEFfaDA7CisJYy0+aDE9SU5JVF9EQVRBX2gxOworCWMtPmgyPUlOSVRfREFUQV9oMjsKKwljLT5oMz1JTklUX0RBVEFfaDM7CisJYy0+aDQ9SU5JVF9EQVRBX2g0OworCXJldHVybiAxOworCX0KKworI2RlZmluZSBLXzAwXzE5CTB4NWE4Mjc5OTlVTAorI2RlZmluZSBLXzIwXzM5IDB4NmVkOWViYTFVTAorI2RlZmluZSBLXzQwXzU5IDB4OGYxYmJjZGNVTAorI2RlZmluZSBLXzYwXzc5IDB4Y2E2MmMxZDZVTAorCisvKiBBcyAgcG9pbnRlZCBvdXQgYnkgV2VpIERhaSA8d2VpZGFpQGVza2ltby5jb20+LCBGKCkgYmVsb3cgY2FuIGJlCisgKiBzaW1wbGlmaWVkIHRvIHRoZSBjb2RlIGluIEZfMDBfMTkuICBXZWkgYXR0cmlidXRlcyB0aGVzZSBvcHRpbWlzYXRpb25zCisgKiB0byBQZXRlciBHdXRtYW5uJ3MgU0hTIGNvZGUsIGFuZCBoZSBhdHRyaWJ1dGVzIGl0IHRvIFJpY2ggU2Nocm9lcHBlbC4KKyAqICNkZWZpbmUgRih4LHkseikgKCgoeCkgJiAoeSkpICB8ICAoKH4oeCkpICYgKHopKSkKKyAqIEkndmUganVzdCBiZWNvbWUgYXdhcmUgb2YgYW5vdGhlciB0d2VhayB0byBiZSBtYWRlLCBhZ2FpbiBmcm9tIFdlaSBEYWksCisgKiBpbiBGXzQwXzU5LCAoeCZhKXwoeSZhKSAtPiAoeHx5KSZhCisgKi8KKyNkZWZpbmUJRl8wMF8xOShiLGMsZCkJKCgoKGMpIF4gKGQpKSAmIChiKSkgXiAoZCkpIAorI2RlZmluZQlGXzIwXzM5KGIsYyxkKQkoKGIpIF4gKGMpIF4gKGQpKQorI2RlZmluZSBGXzQwXzU5KGIsYyxkKQkoKChiKSAmIChjKSkgfCAoKChiKXwoYykpICYgKGQpKSkgCisjZGVmaW5lCUZfNjBfNzkoYixjLGQpCUZfMjBfMzkoYixjLGQpCisKKyNpZm5kZWYgT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQKKworI2RlZmluZSBCT0RZXzAwXzE1KGksYSxiLGMsZCxlLGYseGkpIFwKKwkoZik9eGkrKGUpK0tfMDBfMTkrUk9UQVRFKChhKSw1KStGXzAwXzE5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2RlZmluZSBCT0RZXzE2XzE5KGksYSxiLGMsZCxlLGYseGkseGEseGIseGMseGQpIFwKKwlYdXBkYXRlKGYseGkseGEseGIseGMseGQpOyBcCisJKGYpKz0oZSkrS18wMF8xOStST1RBVEUoKGEpLDUpK0ZfMDBfMTkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjZGVmaW5lIEJPRFlfMjBfMzEoaSxhLGIsYyxkLGUsZix4aSx4YSx4Yix4Yyx4ZCkgXAorCVh1cGRhdGUoZix4aSx4YSx4Yix4Yyx4ZCk7IFwKKwkoZikrPShlKStLXzIwXzM5K1JPVEFURSgoYSksNSkrRl8yMF8zOSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNkZWZpbmUgQk9EWV8zMl8zOShpLGEsYixjLGQsZSxmLHhhLHhiLHhjLHhkKSBcCisJWHVwZGF0ZShmLHhhLHhhLHhiLHhjLHhkKTsgXAorCShmKSs9KGUpK0tfMjBfMzkrUk9UQVRFKChhKSw1KStGXzIwXzM5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2RlZmluZSBCT0RZXzQwXzU5KGksYSxiLGMsZCxlLGYseGEseGIseGMseGQpIFwKKwlYdXBkYXRlKGYseGEseGEseGIseGMseGQpOyBcCisJKGYpKz0oZSkrS180MF81OStST1RBVEUoKGEpLDUpK0ZfNDBfNTkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjZGVmaW5lIEJPRFlfNjBfNzkoaSxhLGIsYyxkLGUsZix4YSx4Yix4Yyx4ZCkgXAorCVh1cGRhdGUoZix4YSx4YSx4Yix4Yyx4ZCk7IFwKKwkoZik9eGErKGUpK0tfNjBfNzkrUk9UQVRFKChhKSw1KStGXzYwXzc5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2lmZGVmIFgKKyN1bmRlZiBYCisjZW5kaWYKKyNpZm5kZWYgTUQzMl9YQVJSQVkKKyAgLyoKKyAgICogT3JpZ2luYWxseSBYIHdhcyBhbiBhcnJheS4gQXMgaXQncyBhdXRvbWF0aWMgaXQncyBuYXR1cmFsCisgICAqIHRvIGV4cGVjdCBSSVNDIGNvbXBpbGVyIHRvIGFjY29tb2RhdGUgYXQgbGVhc3QgcGFydCBvZiBpdCBpbgorICAgKiB0aGUgcmVnaXN0ZXIgYmFuaywgaXNuJ3QgaXQ/IFVuZm9ydHVuYXRlbHkgbm90IGFsbCBjb21waWxlcnMKKyAgICogImZpbmQiIHRoaXMgZXhwZWN0YXRpb24gcmVhc29uYWJsZTotKCBPbiBvcmRlciB0byBtYWtlIHN1Y2gKKyAgICogY29tcGlsZXJzIGdlbmVyYXRlIGJldHRlciBjb2RlIEkgcmVwbGFjZSBYW10gd2l0aCBhIGJ1bmNoIG9mCisgICAqIFgwLCBYMSwgZXRjLiBTZWUgdGhlIGZ1bmN0aW9uIGJvZHkgYmVsb3cuLi4KKyAgICoJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAgICovCisjIGRlZmluZSBYKGkpCVhYIyNpCisjZWxzZQorICAvKgorICAgKiBIb3dldmVyISBTb21lIGNvbXBpbGVycyAobW9zdCBub3RhYmx5IEhQIEMpIGdldCBvdmVyd2hlbG1lZCBieQorICAgKiB0aGF0IG1hbnkgbG9jYWwgdmFyaWFibGVzIHNvIHRoYXQgd2UgaGF2ZSB0byBoYXZlIHRoZSB3YXkgdG8KKyAgICogZmFsbCBkb3duIHRvIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4KKyAgICovCisjIGRlZmluZSBYKGkpCVhYW2ldCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNIQV8xKSB8fCAhZGVmaW5lZChTSEExX0FTTSkKK3N0YXRpYyB2b2lkIEhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IG51bSkKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YT1wOworCXJlZ2lzdGVyIHVuc2lnbmVkIE1EMzJfUkVHX1QgQSxCLEMsRCxFLFQsbDsKKyNpZm5kZWYgTUQzMl9YQVJSQVkKKwl1bnNpZ25lZCBNRDMyX1JFR19UCVhYMCwgWFgxLCBYWDIsIFhYMywgWFg0LCBYWDUsIFhYNiwgWFg3LAorCQkJCVhYOCwgWFg5LFhYMTAsWFgxMSxYWDEyLFhYMTMsWFgxNCxYWDE1OworI2Vsc2UKKwlTSEFfTE9ORwlYWFsxNl07CisjZW5kaWYKKworCUE9Yy0+aDA7CisJQj1jLT5oMTsKKwlDPWMtPmgyOworCUQ9Yy0+aDM7CisJRT1jLT5oNDsKKworCWZvciAoOzspCisJCQl7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCisJaWYgKCFpc19lbmRpYW4ubGl0dGxlICYmIHNpemVvZihTSEFfTE9ORyk9PTQgJiYgKChzaXplX3QpcCU0KT09MCkKKwkJeworCQljb25zdCBTSEFfTE9ORyAqVz0oY29uc3QgU0hBX0xPTkcgKilkYXRhOworCisJCVgoIDApID0gV1swXTsJCQkJWCggMSkgPSBXWyAxXTsKKwkJQk9EWV8wMF8xNSggMCxBLEIsQyxELEUsVCxYKCAwKSk7CVgoIDIpID0gV1sgMl07CisJCUJPRFlfMDBfMTUoIDEsVCxBLEIsQyxELEUsWCggMSkpOwlYKCAzKSA9IFdbIDNdOworCQlCT0RZXzAwXzE1KCAyLEUsVCxBLEIsQyxELFgoIDIpKTsJWCggNCkgPSBXWyA0XTsKKwkJQk9EWV8wMF8xNSggMyxELEUsVCxBLEIsQyxYKCAzKSk7CVgoIDUpID0gV1sgNV07CisJCUJPRFlfMDBfMTUoIDQsQyxELEUsVCxBLEIsWCggNCkpOwlYKCA2KSA9IFdbIDZdOworCQlCT0RZXzAwXzE1KCA1LEIsQyxELEUsVCxBLFgoIDUpKTsJWCggNykgPSBXWyA3XTsKKwkJQk9EWV8wMF8xNSggNixBLEIsQyxELEUsVCxYKCA2KSk7CVgoIDgpID0gV1sgOF07CisJCUJPRFlfMDBfMTUoIDcsVCxBLEIsQyxELEUsWCggNykpOwlYKCA5KSA9IFdbIDldOworCQlCT0RZXzAwXzE1KCA4LEUsVCxBLEIsQyxELFgoIDgpKTsJWCgxMCkgPSBXWzEwXTsKKwkJQk9EWV8wMF8xNSggOSxELEUsVCxBLEIsQyxYKCA5KSk7CVgoMTEpID0gV1sxMV07CisJCUJPRFlfMDBfMTUoMTAsQyxELEUsVCxBLEIsWCgxMCkpOwlYKDEyKSA9IFdbMTJdOworCQlCT0RZXzAwXzE1KDExLEIsQyxELEUsVCxBLFgoMTEpKTsJWCgxMykgPSBXWzEzXTsKKwkJQk9EWV8wMF8xNSgxMixBLEIsQyxELEUsVCxYKDEyKSk7CVgoMTQpID0gV1sxNF07CisJCUJPRFlfMDBfMTUoMTMsVCxBLEIsQyxELEUsWCgxMykpOwlYKDE1KSA9IFdbMTVdOworCQlCT0RZXzAwXzE1KDE0LEUsVCxBLEIsQyxELFgoMTQpKTsKKwkJQk9EWV8wMF8xNSgxNSxELEUsVCxBLEIsQyxYKDE1KSk7CisKKwkJZGF0YSArPSBTSEFfQ0JMT0NLOworCQl9CisJZWxzZQorCQl7CisJCUhPU1RfYzJsKGRhdGEsbCk7IFgoIDApPWw7CQlIT1NUX2MybChkYXRhLGwpOyBYKCAxKT1sOworCQlCT0RZXzAwXzE1KCAwLEEsQixDLEQsRSxULFgoIDApKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggMik9bDsKKwkJQk9EWV8wMF8xNSggMSxULEEsQixDLEQsRSxYKCAxKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDMpPWw7CisJCUJPRFlfMDBfMTUoIDIsRSxULEEsQixDLEQsWCggMikpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA0KT1sOworCQlCT0RZXzAwXzE1KCAzLEQsRSxULEEsQixDLFgoIDMpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNSk9bDsKKwkJQk9EWV8wMF8xNSggNCxDLEQsRSxULEEsQixYKCA0KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDYpPWw7CisJCUJPRFlfMDBfMTUoIDUsQixDLEQsRSxULEEsWCggNSkpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA3KT1sOworCQlCT0RZXzAwXzE1KCA2LEEsQixDLEQsRSxULFgoIDYpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggOCk9bDsKKwkJQk9EWV8wMF8xNSggNyxULEEsQixDLEQsRSxYKCA3KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDkpPWw7CisJCUJPRFlfMDBfMTUoIDgsRSxULEEsQixDLEQsWCggOCkpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEwKT1sOworCQlCT0RZXzAwXzE1KCA5LEQsRSxULEEsQixDLFgoIDkpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMSk9bDsKKwkJQk9EWV8wMF8xNSgxMCxDLEQsRSxULEEsQixYKDEwKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTIpPWw7CisJCUJPRFlfMDBfMTUoMTEsQixDLEQsRSxULEEsWCgxMSkpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEzKT1sOworCQlCT0RZXzAwXzE1KDEyLEEsQixDLEQsRSxULFgoMTIpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxNCk9bDsKKwkJQk9EWV8wMF8xNSgxMyxULEEsQixDLEQsRSxYKDEzKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTUpPWw7CisJCUJPRFlfMDBfMTUoMTQsRSxULEEsQixDLEQsWCgxNCkpOworCQlCT0RZXzAwXzE1KDE1LEQsRSxULEEsQixDLFgoMTUpKTsKKwkJfQorCisJQk9EWV8xNl8xOSgxNixDLEQsRSxULEEsQixYKCAwKSxYKCAwKSxYKCAyKSxYKCA4KSxYKDEzKSk7CisJQk9EWV8xNl8xOSgxNyxCLEMsRCxFLFQsQSxYKCAxKSxYKCAxKSxYKCAzKSxYKCA5KSxYKDE0KSk7CisJQk9EWV8xNl8xOSgxOCxBLEIsQyxELEUsVCxYKCAyKSxYKCAyKSxYKCA0KSxYKDEwKSxYKDE1KSk7CisJQk9EWV8xNl8xOSgxOSxULEEsQixDLEQsRSxYKCAzKSxYKCAzKSxYKCA1KSxYKDExKSxYKCAwKSk7CisKKwlCT0RZXzIwXzMxKDIwLEUsVCxBLEIsQyxELFgoIDQpLFgoIDQpLFgoIDYpLFgoMTIpLFgoIDEpKTsKKwlCT0RZXzIwXzMxKDIxLEQsRSxULEEsQixDLFgoIDUpLFgoIDUpLFgoIDcpLFgoMTMpLFgoIDIpKTsKKwlCT0RZXzIwXzMxKDIyLEMsRCxFLFQsQSxCLFgoIDYpLFgoIDYpLFgoIDgpLFgoMTQpLFgoIDMpKTsKKwlCT0RZXzIwXzMxKDIzLEIsQyxELEUsVCxBLFgoIDcpLFgoIDcpLFgoIDkpLFgoMTUpLFgoIDQpKTsKKwlCT0RZXzIwXzMxKDI0LEEsQixDLEQsRSxULFgoIDgpLFgoIDgpLFgoMTApLFgoIDApLFgoIDUpKTsKKwlCT0RZXzIwXzMxKDI1LFQsQSxCLEMsRCxFLFgoIDkpLFgoIDkpLFgoMTEpLFgoIDEpLFgoIDYpKTsKKwlCT0RZXzIwXzMxKDI2LEUsVCxBLEIsQyxELFgoMTApLFgoMTApLFgoMTIpLFgoIDIpLFgoIDcpKTsKKwlCT0RZXzIwXzMxKDI3LEQsRSxULEEsQixDLFgoMTEpLFgoMTEpLFgoMTMpLFgoIDMpLFgoIDgpKTsKKwlCT0RZXzIwXzMxKDI4LEMsRCxFLFQsQSxCLFgoMTIpLFgoMTIpLFgoMTQpLFgoIDQpLFgoIDkpKTsKKwlCT0RZXzIwXzMxKDI5LEIsQyxELEUsVCxBLFgoMTMpLFgoMTMpLFgoMTUpLFgoIDUpLFgoMTApKTsKKwlCT0RZXzIwXzMxKDMwLEEsQixDLEQsRSxULFgoMTQpLFgoMTQpLFgoIDApLFgoIDYpLFgoMTEpKTsKKwlCT0RZXzIwXzMxKDMxLFQsQSxCLEMsRCxFLFgoMTUpLFgoMTUpLFgoIDEpLFgoIDcpLFgoMTIpKTsKKworCUJPRFlfMzJfMzkoMzIsRSxULEEsQixDLEQsWCggMCksWCggMiksWCggOCksWCgxMykpOworCUJPRFlfMzJfMzkoMzMsRCxFLFQsQSxCLEMsWCggMSksWCggMyksWCggOSksWCgxNCkpOworCUJPRFlfMzJfMzkoMzQsQyxELEUsVCxBLEIsWCggMiksWCggNCksWCgxMCksWCgxNSkpOworCUJPRFlfMzJfMzkoMzUsQixDLEQsRSxULEEsWCggMyksWCggNSksWCgxMSksWCggMCkpOworCUJPRFlfMzJfMzkoMzYsQSxCLEMsRCxFLFQsWCggNCksWCggNiksWCgxMiksWCggMSkpOworCUJPRFlfMzJfMzkoMzcsVCxBLEIsQyxELEUsWCggNSksWCggNyksWCgxMyksWCggMikpOworCUJPRFlfMzJfMzkoMzgsRSxULEEsQixDLEQsWCggNiksWCggOCksWCgxNCksWCggMykpOworCUJPRFlfMzJfMzkoMzksRCxFLFQsQSxCLEMsWCggNyksWCggOSksWCgxNSksWCggNCkpOworCisJQk9EWV80MF81OSg0MCxDLEQsRSxULEEsQixYKCA4KSxYKDEwKSxYKCAwKSxYKCA1KSk7CisJQk9EWV80MF81OSg0MSxCLEMsRCxFLFQsQSxYKCA5KSxYKDExKSxYKCAxKSxYKCA2KSk7CisJQk9EWV80MF81OSg0MixBLEIsQyxELEUsVCxYKDEwKSxYKDEyKSxYKCAyKSxYKCA3KSk7CisJQk9EWV80MF81OSg0MyxULEEsQixDLEQsRSxYKDExKSxYKDEzKSxYKCAzKSxYKCA4KSk7CisJQk9EWV80MF81OSg0NCxFLFQsQSxCLEMsRCxYKDEyKSxYKDE0KSxYKCA0KSxYKCA5KSk7CisJQk9EWV80MF81OSg0NSxELEUsVCxBLEIsQyxYKDEzKSxYKDE1KSxYKCA1KSxYKDEwKSk7CisJQk9EWV80MF81OSg0NixDLEQsRSxULEEsQixYKDE0KSxYKCAwKSxYKCA2KSxYKDExKSk7CisJQk9EWV80MF81OSg0NyxCLEMsRCxFLFQsQSxYKDE1KSxYKCAxKSxYKCA3KSxYKDEyKSk7CisJQk9EWV80MF81OSg0OCxBLEIsQyxELEUsVCxYKCAwKSxYKCAyKSxYKCA4KSxYKDEzKSk7CisJQk9EWV80MF81OSg0OSxULEEsQixDLEQsRSxYKCAxKSxYKCAzKSxYKCA5KSxYKDE0KSk7CisJQk9EWV80MF81OSg1MCxFLFQsQSxCLEMsRCxYKCAyKSxYKCA0KSxYKDEwKSxYKDE1KSk7CisJQk9EWV80MF81OSg1MSxELEUsVCxBLEIsQyxYKCAzKSxYKCA1KSxYKDExKSxYKCAwKSk7CisJQk9EWV80MF81OSg1MixDLEQsRSxULEEsQixYKCA0KSxYKCA2KSxYKDEyKSxYKCAxKSk7CisJQk9EWV80MF81OSg1MyxCLEMsRCxFLFQsQSxYKCA1KSxYKCA3KSxYKDEzKSxYKCAyKSk7CisJQk9EWV80MF81OSg1NCxBLEIsQyxELEUsVCxYKCA2KSxYKCA4KSxYKDE0KSxYKCAzKSk7CisJQk9EWV80MF81OSg1NSxULEEsQixDLEQsRSxYKCA3KSxYKCA5KSxYKDE1KSxYKCA0KSk7CisJQk9EWV80MF81OSg1NixFLFQsQSxCLEMsRCxYKCA4KSxYKDEwKSxYKCAwKSxYKCA1KSk7CisJQk9EWV80MF81OSg1NyxELEUsVCxBLEIsQyxYKCA5KSxYKDExKSxYKCAxKSxYKCA2KSk7CisJQk9EWV80MF81OSg1OCxDLEQsRSxULEEsQixYKDEwKSxYKDEyKSxYKCAyKSxYKCA3KSk7CisJQk9EWV80MF81OSg1OSxCLEMsRCxFLFQsQSxYKDExKSxYKDEzKSxYKCAzKSxYKCA4KSk7CisKKwlCT0RZXzYwXzc5KDYwLEEsQixDLEQsRSxULFgoMTIpLFgoMTQpLFgoIDQpLFgoIDkpKTsKKwlCT0RZXzYwXzc5KDYxLFQsQSxCLEMsRCxFLFgoMTMpLFgoMTUpLFgoIDUpLFgoMTApKTsKKwlCT0RZXzYwXzc5KDYyLEUsVCxBLEIsQyxELFgoMTQpLFgoIDApLFgoIDYpLFgoMTEpKTsKKwlCT0RZXzYwXzc5KDYzLEQsRSxULEEsQixDLFgoMTUpLFgoIDEpLFgoIDcpLFgoMTIpKTsKKwlCT0RZXzYwXzc5KDY0LEMsRCxFLFQsQSxCLFgoIDApLFgoIDIpLFgoIDgpLFgoMTMpKTsKKwlCT0RZXzYwXzc5KDY1LEIsQyxELEUsVCxBLFgoIDEpLFgoIDMpLFgoIDkpLFgoMTQpKTsKKwlCT0RZXzYwXzc5KDY2LEEsQixDLEQsRSxULFgoIDIpLFgoIDQpLFgoMTApLFgoMTUpKTsKKwlCT0RZXzYwXzc5KDY3LFQsQSxCLEMsRCxFLFgoIDMpLFgoIDUpLFgoMTEpLFgoIDApKTsKKwlCT0RZXzYwXzc5KDY4LEUsVCxBLEIsQyxELFgoIDQpLFgoIDYpLFgoMTIpLFgoIDEpKTsKKwlCT0RZXzYwXzc5KDY5LEQsRSxULEEsQixDLFgoIDUpLFgoIDcpLFgoMTMpLFgoIDIpKTsKKwlCT0RZXzYwXzc5KDcwLEMsRCxFLFQsQSxCLFgoIDYpLFgoIDgpLFgoMTQpLFgoIDMpKTsKKwlCT0RZXzYwXzc5KDcxLEIsQyxELEUsVCxBLFgoIDcpLFgoIDkpLFgoMTUpLFgoIDQpKTsKKwlCT0RZXzYwXzc5KDcyLEEsQixDLEQsRSxULFgoIDgpLFgoMTApLFgoIDApLFgoIDUpKTsKKwlCT0RZXzYwXzc5KDczLFQsQSxCLEMsRCxFLFgoIDkpLFgoMTEpLFgoIDEpLFgoIDYpKTsKKwlCT0RZXzYwXzc5KDc0LEUsVCxBLEIsQyxELFgoMTApLFgoMTIpLFgoIDIpLFgoIDcpKTsKKwlCT0RZXzYwXzc5KDc1LEQsRSxULEEsQixDLFgoMTEpLFgoMTMpLFgoIDMpLFgoIDgpKTsKKwlCT0RZXzYwXzc5KDc2LEMsRCxFLFQsQSxCLFgoMTIpLFgoMTQpLFgoIDQpLFgoIDkpKTsKKwlCT0RZXzYwXzc5KDc3LEIsQyxELEUsVCxBLFgoMTMpLFgoMTUpLFgoIDUpLFgoMTApKTsKKwlCT0RZXzYwXzc5KDc4LEEsQixDLEQsRSxULFgoMTQpLFgoIDApLFgoIDYpLFgoMTEpKTsKKwlCT0RZXzYwXzc5KDc5LFQsQSxCLEMsRCxFLFgoMTUpLFgoIDEpLFgoIDcpLFgoMTIpKTsKKwkKKwljLT5oMD0oYy0+aDArRSkmMHhmZmZmZmZmZkw7IAorCWMtPmgxPShjLT5oMStUKSYweGZmZmZmZmZmTDsKKwljLT5oMj0oYy0+aDIrQSkmMHhmZmZmZmZmZkw7CisJYy0+aDM9KGMtPmgzK0IpJjB4ZmZmZmZmZmZMOworCWMtPmg0PShjLT5oNCtDKSYweGZmZmZmZmZmTDsKKworCWlmICgtLW51bSA9PSAwKSBicmVhazsKKworCUE9Yy0+aDA7CisJQj1jLT5oMTsKKwlDPWMtPmgyOworCUQ9Yy0+aDM7CisJRT1jLT5oNDsKKworCQkJfQorCX0KKyNlbmRpZgorCisjZWxzZQkvKiBPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCAqLworCisjZGVmaW5lIEJPRFlfMDBfMTUoeGkpCQkgZG8gewlcCisJVD1FK0tfMDBfMTkrRl8wMF8xOShCLEMsRCk7CVwKKwlFPUQsIEQ9QywgQz1ST1RBVEUoQiwzMCksIEI9QTsJXAorCUE9Uk9UQVRFKEEsNSkrVCt4aTsJICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBCT0RZXzE2XzE5KHhhLHhiLHhjLHhkKQkgZG8gewlcCisJWHVwZGF0ZShULHhhLHhhLHhiLHhjLHhkKTsJXAorCVQrPUUrS18wMF8xOStGXzAwXzE5KEIsQyxEKTsJXAorCUU9RCwgRD1DLCBDPVJPVEFURShCLDMwKSwgQj1BOwlcCisJQT1ST1RBVEUoQSw1KStUOwkgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEJPRFlfMjBfMzkoeGEseGIseGMseGQpCSBkbyB7CVwKKwlYdXBkYXRlKFQseGEseGEseGIseGMseGQpOwlcCisJVCs9RStLXzIwXzM5K0ZfMjBfMzkoQixDLEQpOwlcCisJRT1ELCBEPUMsIEM9Uk9UQVRFKEIsMzApLCBCPUE7CVwKKwlBPVJPVEFURShBLDUpK1Q7CSAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQk9EWV80MF81OSh4YSx4Yix4Yyx4ZCkJIGRvIHsJXAorCVh1cGRhdGUoVCx4YSx4YSx4Yix4Yyx4ZCk7CVwKKwlUKz1FK0tfNDBfNTkrRl80MF81OShCLEMsRCk7CVwKKwlFPUQsIEQ9QywgQz1ST1RBVEUoQiwzMCksIEI9QTsJXAorCUE9Uk9UQVRFKEEsNSkrVDsJICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBCT0RZXzYwXzc5KHhhLHhiLHhjLHhkKQkgZG8gewlcCisJWHVwZGF0ZShULHhhLHhhLHhiLHhjLHhkKTsJXAorCVQ9RStLXzYwXzc5K0ZfNjBfNzkoQixDLEQpOwlcCisJRT1ELCBEPUMsIEM9Uk9UQVRFKEIsMzApLCBCPUE7CVwKKwlBPVJPVEFURShBLDUpK1QreGE7CSAgICB9IHdoaWxlKDApCisKKyNpZiAhZGVmaW5lZChTSEFfMSkgfHwgIWRlZmluZWQoU0hBMV9BU00pCitzdGF0aWMgdm9pZCBIQVNIX0JMT0NLX0RBVEFfT1JERVIgKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBudW0pCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE9cDsKKwlyZWdpc3RlciB1bnNpZ25lZCBNRDMyX1JFR19UIEEsQixDLEQsRSxULGw7CisJaW50IGk7CisJU0hBX0xPTkcJWFsxNl07CisKKwlBPWMtPmgwOworCUI9Yy0+aDE7CisJQz1jLT5oMjsKKwlEPWMtPmgzOworCUU9Yy0+aDQ7CisKKwlmb3IgKDs7KQorCQl7CisJZm9yIChpPTA7aTwxNjtpKyspCisJeyBIT1NUX2MybChkYXRhLGwpOyBYW2ldPWw7IEJPRFlfMDBfMTUoWFtpXSk7IH0KKwlmb3IgKGk9MDtpPDQ7aSsrKQorCXsgQk9EWV8xNl8xOShYW2ldLCAgICAgICBYW2krMl0sICAgICAgWFtpKzhdLCAgICAgWFsoaSsxMykmMTVdKTsgfQorCWZvciAoO2k8MjQ7aSsrKQorCXsgQk9EWV8yMF8zOShYW2kmMTVdLCAgICBYWyhpKzIpJjE1XSwgWFsoaSs4KSYxNV0sWFsoaSsxMykmMTVdKTsgfQorCWZvciAoaT0wO2k8MjA7aSsrKQorCXsgQk9EWV80MF81OShYWyhpKzgpJjE1XSxYWyhpKzEwKSYxNV0sWFtpJjE1XSwgICAgWFsoaSs1KSYxNV0pOyAgfQorCWZvciAoaT00O2k8MjQ7aSsrKQorCXsgQk9EWV82MF83OShYWyhpKzgpJjE1XSxYWyhpKzEwKSYxNV0sWFtpJjE1XSwgICAgWFsoaSs1KSYxNV0pOyAgfQorCisJYy0+aDA9KGMtPmgwK0EpJjB4ZmZmZmZmZmZMOyAKKwljLT5oMT0oYy0+aDErQikmMHhmZmZmZmZmZkw7CisJYy0+aDI9KGMtPmgyK0MpJjB4ZmZmZmZmZmZMOworCWMtPmgzPShjLT5oMytEKSYweGZmZmZmZmZmTDsKKwljLT5oND0oYy0+aDQrRSkmMHhmZmZmZmZmZkw7CisKKwlpZiAoLS1udW0gPT0gMCkgYnJlYWs7CisKKwlBPWMtPmgwOworCUI9Yy0+aDE7CisJQz1jLT5oMjsKKwlEPWMtPmgzOworCUU9Yy0+aDQ7CisKKwkJfQorCX0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlYzYxZQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oCkBAIC0wLDAgKzEsMjA0IEBACisvKiBjcnlwdG8vZGVzL3Nwci5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKK2NvbnN0IERFU19MT05HIERFU19TUHRyYW5zWzhdWzY0XT17Cit7CisvKiBuaWJibGUgMCAqLworMHgwMjA4MDgwMEwsIDB4MDAwODAwMDBMLCAweDAyMDAwMDAyTCwgMHgwMjA4MDgwMkwsCisweDAyMDAwMDAwTCwgMHgwMDA4MDgwMkwsIDB4MDAwODAwMDJMLCAweDAyMDAwMDAyTCwKKzB4MDAwODA4MDJMLCAweDAyMDgwODAwTCwgMHgwMjA4MDAwMEwsIDB4MDAwMDA4MDJMLAorMHgwMjAwMDgwMkwsIDB4MDIwMDAwMDBMLCAweDAwMDAwMDAwTCwgMHgwMDA4MDAwMkwsCisweDAwMDgwMDAwTCwgMHgwMDAwMDAwMkwsIDB4MDIwMDA4MDBMLCAweDAwMDgwODAwTCwKKzB4MDIwODA4MDJMLCAweDAyMDgwMDAwTCwgMHgwMDAwMDgwMkwsIDB4MDIwMDA4MDBMLAorMHgwMDAwMDAwMkwsIDB4MDAwMDA4MDBMLCAweDAwMDgwODAwTCwgMHgwMjA4MDAwMkwsCisweDAwMDAwODAwTCwgMHgwMjAwMDgwMkwsIDB4MDIwODAwMDJMLCAweDAwMDAwMDAwTCwKKzB4MDAwMDAwMDBMLCAweDAyMDgwODAyTCwgMHgwMjAwMDgwMEwsIDB4MDAwODAwMDJMLAorMHgwMjA4MDgwMEwsIDB4MDAwODAwMDBMLCAweDAwMDAwODAyTCwgMHgwMjAwMDgwMEwsCisweDAyMDgwMDAyTCwgMHgwMDAwMDgwMEwsIDB4MDAwODA4MDBMLCAweDAyMDAwMDAyTCwKKzB4MDAwODA4MDJMLCAweDAwMDAwMDAyTCwgMHgwMjAwMDAwMkwsIDB4MDIwODAwMDBMLAorMHgwMjA4MDgwMkwsIDB4MDAwODA4MDBMLCAweDAyMDgwMDAwTCwgMHgwMjAwMDgwMkwsCisweDAyMDAwMDAwTCwgMHgwMDAwMDgwMkwsIDB4MDAwODAwMDJMLCAweDAwMDAwMDAwTCwKKzB4MDAwODAwMDBMLCAweDAyMDAwMDAwTCwgMHgwMjAwMDgwMkwsIDB4MDIwODA4MDBMLAorMHgwMDAwMDAwMkwsIDB4MDIwODAwMDJMLCAweDAwMDAwODAwTCwgMHgwMDA4MDgwMkwsCit9LHsKKy8qIG5pYmJsZSAxICovCisweDQwMTA4MDEwTCwgMHgwMDAwMDAwMEwsIDB4MDAxMDgwMDBMLCAweDQwMTAwMDAwTCwKKzB4NDAwMDAwMTBMLCAweDAwMDA4MDEwTCwgMHg0MDAwODAwMEwsIDB4MDAxMDgwMDBMLAorMHgwMDAwODAwMEwsIDB4NDAxMDAwMTBMLCAweDAwMDAwMDEwTCwgMHg0MDAwODAwMEwsCisweDAwMTAwMDEwTCwgMHg0MDEwODAwMEwsIDB4NDAxMDAwMDBMLCAweDAwMDAwMDEwTCwKKzB4MDAxMDAwMDBMLCAweDQwMDA4MDEwTCwgMHg0MDEwMDAxMEwsIDB4MDAwMDgwMDBMLAorMHgwMDEwODAxMEwsIDB4NDAwMDAwMDBMLCAweDAwMDAwMDAwTCwgMHgwMDEwMDAxMEwsCisweDQwMDA4MDEwTCwgMHgwMDEwODAxMEwsIDB4NDAxMDgwMDBMLCAweDQwMDAwMDEwTCwKKzB4NDAwMDAwMDBMLCAweDAwMTAwMDAwTCwgMHgwMDAwODAxMEwsIDB4NDAxMDgwMTBMLAorMHgwMDEwMDAxMEwsIDB4NDAxMDgwMDBMLCAweDQwMDA4MDAwTCwgMHgwMDEwODAxMEwsCisweDQwMTA4MDEwTCwgMHgwMDEwMDAxMEwsIDB4NDAwMDAwMTBMLCAweDAwMDAwMDAwTCwKKzB4NDAwMDAwMDBMLCAweDAwMDA4MDEwTCwgMHgwMDEwMDAwMEwsIDB4NDAxMDAwMTBMLAorMHgwMDAwODAwMEwsIDB4NDAwMDAwMDBMLCAweDAwMTA4MDEwTCwgMHg0MDAwODAxMEwsCisweDQwMTA4MDAwTCwgMHgwMDAwODAwMEwsIDB4MDAwMDAwMDBMLCAweDQwMDAwMDEwTCwKKzB4MDAwMDAwMTBMLCAweDQwMTA4MDEwTCwgMHgwMDEwODAwMEwsIDB4NDAxMDAwMDBMLAorMHg0MDEwMDAxMEwsIDB4MDAxMDAwMDBMLCAweDAwMDA4MDEwTCwgMHg0MDAwODAwMEwsCisweDQwMDA4MDEwTCwgMHgwMDAwMDAxMEwsIDB4NDAxMDAwMDBMLCAweDAwMTA4MDAwTCwKK30seworLyogbmliYmxlIDIgKi8KKzB4MDQwMDAwMDFMLCAweDA0MDQwMTAwTCwgMHgwMDAwMDEwMEwsIDB4MDQwMDAxMDFMLAorMHgwMDA0MDAwMUwsIDB4MDQwMDAwMDBMLCAweDA0MDAwMTAxTCwgMHgwMDA0MDEwMEwsCisweDA0MDAwMTAwTCwgMHgwMDA0MDAwMEwsIDB4MDQwNDAwMDBMLCAweDAwMDAwMDAxTCwKKzB4MDQwNDAxMDFMLCAweDAwMDAwMTAxTCwgMHgwMDAwMDAwMUwsIDB4MDQwNDAwMDFMLAorMHgwMDAwMDAwMEwsIDB4MDAwNDAwMDFMLCAweDA0MDQwMTAwTCwgMHgwMDAwMDEwMEwsCisweDAwMDAwMTAxTCwgMHgwNDA0MDEwMUwsIDB4MDAwNDAwMDBMLCAweDA0MDAwMDAxTCwKKzB4MDQwNDAwMDFMLCAweDA0MDAwMTAwTCwgMHgwMDA0MDEwMUwsIDB4MDQwNDAwMDBMLAorMHgwMDA0MDEwMEwsIDB4MDAwMDAwMDBMLCAweDA0MDAwMDAwTCwgMHgwMDA0MDEwMUwsCisweDA0MDQwMTAwTCwgMHgwMDAwMDEwMEwsIDB4MDAwMDAwMDFMLCAweDAwMDQwMDAwTCwKKzB4MDAwMDAxMDFMLCAweDAwMDQwMDAxTCwgMHgwNDA0MDAwMEwsIDB4MDQwMDAxMDFMLAorMHgwMDAwMDAwMEwsIDB4MDQwNDAxMDBMLCAweDAwMDQwMTAwTCwgMHgwNDA0MDAwMUwsCisweDAwMDQwMDAxTCwgMHgwNDAwMDAwMEwsIDB4MDQwNDAxMDFMLCAweDAwMDAwMDAxTCwKKzB4MDAwNDAxMDFMLCAweDA0MDAwMDAxTCwgMHgwNDAwMDAwMEwsIDB4MDQwNDAxMDFMLAorMHgwMDA0MDAwMEwsIDB4MDQwMDAxMDBMLCAweDA0MDAwMTAxTCwgMHgwMDA0MDEwMEwsCisweDA0MDAwMTAwTCwgMHgwMDAwMDAwMEwsIDB4MDQwNDAwMDFMLCAweDAwMDAwMTAxTCwKKzB4MDQwMDAwMDFMLCAweDAwMDQwMTAxTCwgMHgwMDAwMDEwMEwsIDB4MDQwNDAwMDBMLAorfSx7CisvKiBuaWJibGUgMyAqLworMHgwMDQwMTAwOEwsIDB4MTAwMDEwMDBMLCAweDAwMDAwMDA4TCwgMHgxMDQwMTAwOEwsCisweDAwMDAwMDAwTCwgMHgxMDQwMDAwMEwsIDB4MTAwMDEwMDhMLCAweDAwNDAwMDA4TCwKKzB4MTA0MDEwMDBMLCAweDEwMDAwMDA4TCwgMHgxMDAwMDAwMEwsIDB4MDAwMDEwMDhMLAorMHgxMDAwMDAwOEwsIDB4MDA0MDEwMDhMLCAweDAwNDAwMDAwTCwgMHgxMDAwMDAwMEwsCisweDEwNDAwMDA4TCwgMHgwMDQwMTAwMEwsIDB4MDAwMDEwMDBMLCAweDAwMDAwMDA4TCwKKzB4MDA0MDEwMDBMLCAweDEwMDAxMDA4TCwgMHgxMDQwMDAwMEwsIDB4MDAwMDEwMDBMLAorMHgwMDAwMTAwOEwsIDB4MDAwMDAwMDBMLCAweDAwNDAwMDA4TCwgMHgxMDQwMTAwMEwsCisweDEwMDAxMDAwTCwgMHgxMDQwMDAwOEwsIDB4MTA0MDEwMDhMLCAweDAwNDAwMDAwTCwKKzB4MTA0MDAwMDhMLCAweDAwMDAxMDA4TCwgMHgwMDQwMDAwMEwsIDB4MTAwMDAwMDhMLAorMHgwMDQwMTAwMEwsIDB4MTAwMDEwMDBMLCAweDAwMDAwMDA4TCwgMHgxMDQwMDAwMEwsCisweDEwMDAxMDA4TCwgMHgwMDAwMDAwMEwsIDB4MDAwMDEwMDBMLCAweDAwNDAwMDA4TCwKKzB4MDAwMDAwMDBMLCAweDEwNDAwMDA4TCwgMHgxMDQwMTAwMEwsIDB4MDAwMDEwMDBMLAorMHgxMDAwMDAwMEwsIDB4MTA0MDEwMDhMLCAweDAwNDAxMDA4TCwgMHgwMDQwMDAwMEwsCisweDEwNDAxMDA4TCwgMHgwMDAwMDAwOEwsIDB4MTAwMDEwMDBMLCAweDAwNDAxMDA4TCwKKzB4MDA0MDAwMDhMLCAweDAwNDAxMDAwTCwgMHgxMDQwMDAwMEwsIDB4MTAwMDEwMDhMLAorMHgwMDAwMTAwOEwsIDB4MTAwMDAwMDBMLCAweDEwMDAwMDA4TCwgMHgxMDQwMTAwMEwsCit9LHsKKy8qIG5pYmJsZSA0ICovCisweDA4MDAwMDAwTCwgMHgwMDAxMDAwMEwsIDB4MDAwMDA0MDBMLCAweDA4MDEwNDIwTCwKKzB4MDgwMTAwMjBMLCAweDA4MDAwNDAwTCwgMHgwMDAxMDQyMEwsIDB4MDgwMTAwMDBMLAorMHgwMDAxMDAwMEwsIDB4MDAwMDAwMjBMLCAweDA4MDAwMDIwTCwgMHgwMDAxMDQwMEwsCisweDA4MDAwNDIwTCwgMHgwODAxMDAyMEwsIDB4MDgwMTA0MDBMLCAweDAwMDAwMDAwTCwKKzB4MDAwMTA0MDBMLCAweDA4MDAwMDAwTCwgMHgwMDAxMDAyMEwsIDB4MDAwMDA0MjBMLAorMHgwODAwMDQwMEwsIDB4MDAwMTA0MjBMLCAweDAwMDAwMDAwTCwgMHgwODAwMDAyMEwsCisweDAwMDAwMDIwTCwgMHgwODAwMDQyMEwsIDB4MDgwMTA0MjBMLCAweDAwMDEwMDIwTCwKKzB4MDgwMTAwMDBMLCAweDAwMDAwNDAwTCwgMHgwMDAwMDQyMEwsIDB4MDgwMTA0MDBMLAorMHgwODAxMDQwMEwsIDB4MDgwMDA0MjBMLCAweDAwMDEwMDIwTCwgMHgwODAxMDAwMEwsCisweDAwMDEwMDAwTCwgMHgwMDAwMDAyMEwsIDB4MDgwMDAwMjBMLCAweDA4MDAwNDAwTCwKKzB4MDgwMDAwMDBMLCAweDAwMDEwNDAwTCwgMHgwODAxMDQyMEwsIDB4MDAwMDAwMDBMLAorMHgwMDAxMDQyMEwsIDB4MDgwMDAwMDBMLCAweDAwMDAwNDAwTCwgMHgwMDAxMDAyMEwsCisweDA4MDAwNDIwTCwgMHgwMDAwMDQwMEwsIDB4MDAwMDAwMDBMLCAweDA4MDEwNDIwTCwKKzB4MDgwMTAwMjBMLCAweDA4MDEwNDAwTCwgMHgwMDAwMDQyMEwsIDB4MDAwMTAwMDBMLAorMHgwMDAxMDQwMEwsIDB4MDgwMTAwMjBMLCAweDA4MDAwNDAwTCwgMHgwMDAwMDQyMEwsCisweDAwMDAwMDIwTCwgMHgwMDAxMDQyMEwsIDB4MDgwMTAwMDBMLCAweDA4MDAwMDIwTCwKK30seworLyogbmliYmxlIDUgKi8KKzB4ODAwMDAwNDBMLCAweDAwMjAwMDQwTCwgMHgwMDAwMDAwMEwsIDB4ODAyMDIwMDBMLAorMHgwMDIwMDA0MEwsIDB4MDAwMDIwMDBMLCAweDgwMDAyMDQwTCwgMHgwMDIwMDAwMEwsCisweDAwMDAyMDQwTCwgMHg4MDIwMjA0MEwsIDB4MDAyMDIwMDBMLCAweDgwMDAwMDAwTCwKKzB4ODAwMDIwMDBMLCAweDgwMDAwMDQwTCwgMHg4MDIwMDAwMEwsIDB4MDAyMDIwNDBMLAorMHgwMDIwMDAwMEwsIDB4ODAwMDIwNDBMLCAweDgwMjAwMDQwTCwgMHgwMDAwMDAwMEwsCisweDAwMDAyMDAwTCwgMHgwMDAwMDA0MEwsIDB4ODAyMDIwMDBMLCAweDgwMjAwMDQwTCwKKzB4ODAyMDIwNDBMLCAweDgwMjAwMDAwTCwgMHg4MDAwMDAwMEwsIDB4MDAwMDIwNDBMLAorMHgwMDAwMDA0MEwsIDB4MDAyMDIwMDBMLCAweDAwMjAyMDQwTCwgMHg4MDAwMjAwMEwsCisweDAwMDAyMDQwTCwgMHg4MDAwMDAwMEwsIDB4ODAwMDIwMDBMLCAweDAwMjAyMDQwTCwKKzB4ODAyMDIwMDBMLCAweDAwMjAwMDQwTCwgMHgwMDAwMDAwMEwsIDB4ODAwMDIwMDBMLAorMHg4MDAwMDAwMEwsIDB4MDAwMDIwMDBMLCAweDgwMjAwMDQwTCwgMHgwMDIwMDAwMEwsCisweDAwMjAwMDQwTCwgMHg4MDIwMjA0MEwsIDB4MDAyMDIwMDBMLCAweDAwMDAwMDQwTCwKKzB4ODAyMDIwNDBMLCAweDAwMjAyMDAwTCwgMHgwMDIwMDAwMEwsIDB4ODAwMDIwNDBMLAorMHg4MDAwMDA0MEwsIDB4ODAyMDAwMDBMLCAweDAwMjAyMDQwTCwgMHgwMDAwMDAwMEwsCisweDAwMDAyMDAwTCwgMHg4MDAwMDA0MEwsIDB4ODAwMDIwNDBMLCAweDgwMjAyMDAwTCwKKzB4ODAyMDAwMDBMLCAweDAwMDAyMDQwTCwgMHgwMDAwMDA0MEwsIDB4ODAyMDAwNDBMLAorfSx7CisvKiBuaWJibGUgNiAqLworMHgwMDAwNDAwMEwsIDB4MDAwMDAyMDBMLCAweDAxMDAwMjAwTCwgMHgwMTAwMDAwNEwsCisweDAxMDA0MjA0TCwgMHgwMDAwNDAwNEwsIDB4MDAwMDQyMDBMLCAweDAwMDAwMDAwTCwKKzB4MDEwMDAwMDBMLCAweDAxMDAwMjA0TCwgMHgwMDAwMDIwNEwsIDB4MDEwMDQwMDBMLAorMHgwMDAwMDAwNEwsIDB4MDEwMDQyMDBMLCAweDAxMDA0MDAwTCwgMHgwMDAwMDIwNEwsCisweDAxMDAwMjA0TCwgMHgwMDAwNDAwMEwsIDB4MDAwMDQwMDRMLCAweDAxMDA0MjA0TCwKKzB4MDAwMDAwMDBMLCAweDAxMDAwMjAwTCwgMHgwMTAwMDAwNEwsIDB4MDAwMDQyMDBMLAorMHgwMTAwNDAwNEwsIDB4MDAwMDQyMDRMLCAweDAxMDA0MjAwTCwgMHgwMDAwMDAwNEwsCisweDAwMDA0MjA0TCwgMHgwMTAwNDAwNEwsIDB4MDAwMDAyMDBMLCAweDAxMDAwMDAwTCwKKzB4MDAwMDQyMDRMLCAweDAxMDA0MDAwTCwgMHgwMTAwNDAwNEwsIDB4MDAwMDAyMDRMLAorMHgwMDAwNDAwMEwsIDB4MDAwMDAyMDBMLCAweDAxMDAwMDAwTCwgMHgwMTAwNDAwNEwsCisweDAxMDAwMjA0TCwgMHgwMDAwNDIwNEwsIDB4MDAwMDQyMDBMLCAweDAwMDAwMDAwTCwKKzB4MDAwMDAyMDBMLCAweDAxMDAwMDA0TCwgMHgwMDAwMDAwNEwsIDB4MDEwMDAyMDBMLAorMHgwMDAwMDAwMEwsIDB4MDEwMDAyMDRMLCAweDAxMDAwMjAwTCwgMHgwMDAwNDIwMEwsCisweDAwMDAwMjA0TCwgMHgwMDAwNDAwMEwsIDB4MDEwMDQyMDRMLCAweDAxMDAwMDAwTCwKKzB4MDEwMDQyMDBMLCAweDAwMDAwMDA0TCwgMHgwMDAwNDAwNEwsIDB4MDEwMDQyMDRMLAorMHgwMTAwMDAwNEwsIDB4MDEwMDQyMDBMLCAweDAxMDA0MDAwTCwgMHgwMDAwNDAwNEwsCit9LHsKKy8qIG5pYmJsZSA3ICovCisweDIwODAwMDgwTCwgMHgyMDgyMDAwMEwsIDB4MDAwMjAwODBMLCAweDAwMDAwMDAwTCwKKzB4MjAwMjAwMDBMLCAweDAwODAwMDgwTCwgMHgyMDgwMDAwMEwsIDB4MjA4MjAwODBMLAorMHgwMDAwMDA4MEwsIDB4MjAwMDAwMDBMLCAweDAwODIwMDAwTCwgMHgwMDAyMDA4MEwsCisweDAwODIwMDgwTCwgMHgyMDAyMDA4MEwsIDB4MjAwMDAwODBMLCAweDIwODAwMDAwTCwKKzB4MDAwMjAwMDBMLCAweDAwODIwMDgwTCwgMHgwMDgwMDA4MEwsIDB4MjAwMjAwMDBMLAorMHgyMDgyMDA4MEwsIDB4MjAwMDAwODBMLCAweDAwMDAwMDAwTCwgMHgwMDgyMDAwMEwsCisweDIwMDAwMDAwTCwgMHgwMDgwMDAwMEwsIDB4MjAwMjAwODBMLCAweDIwODAwMDgwTCwKKzB4MDA4MDAwMDBMLCAweDAwMDIwMDAwTCwgMHgyMDgyMDAwMEwsIDB4MDAwMDAwODBMLAorMHgwMDgwMDAwMEwsIDB4MDAwMjAwMDBMLCAweDIwMDAwMDgwTCwgMHgyMDgyMDA4MEwsCisweDAwMDIwMDgwTCwgMHgyMDAwMDAwMEwsIDB4MDAwMDAwMDBMLCAweDAwODIwMDAwTCwKKzB4MjA4MDAwODBMLCAweDIwMDIwMDgwTCwgMHgyMDAyMDAwMEwsIDB4MDA4MDAwODBMLAorMHgyMDgyMDAwMEwsIDB4MDAwMDAwODBMLCAweDAwODAwMDgwTCwgMHgyMDAyMDAwMEwsCisweDIwODIwMDgwTCwgMHgwMDgwMDAwMEwsIDB4MjA4MDAwMDBMLCAweDIwMDAwMDgwTCwKKzB4MDA4MjAwMDBMLCAweDAwMDIwMDgwTCwgMHgyMDAyMDA4MEwsIDB4MjA4MDAwMDBMLAorMHgwMDAwMDA4MEwsIDB4MjA4MjAwMDBMLCAweDAwODIwMDgwTCwgMHgwMDAwMDAwMEwsCisweDIwMDAwMDAwTCwgMHgyMDgwMDA4MEwsIDB4MDAwMjAwMDBMLCAweDAwODIwMDgwTCwKK319OwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9wYXJzZS5jIGIvc25tcGxpYi9wYXJzZS5jCmluZGV4IDY3ODE5YmYuLjRkNDRkODggMTAwNjQ0Ci0tLSBhL3NubXBsaWIvcGFyc2UuYworKysgYi9zbm1wbGliL3BhcnNlLmMKQEAgLTMzLDYgKzMzLDcgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogCkBAIC03NCwxMSArNzUsNyBAQAogIyBlbmRpZgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC04Nyw5ICs4NCw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC0xMTMsNiArMTA3LDM3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9wYXJzZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbmRfbW9kdWxlLCBtaWJfYXBpKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGdldF90Y19kZXNjcmlwdGlvbiwgbWliX2FwaSkKKworLyoKKyAqIEEgbGlua2VkIGxpc3Qgb2Ygbm9kZXMuCisgKi8KK3N0cnVjdCBub2RlIHsKKyAgICBzdHJ1Y3Qgbm9kZSAgICAqbmV4dDsKKyAgICBjaGFyICAgICAgICAgICAqbGFiZWw7ICAvKiBUaGlzIG5vZGUncyAodW5pcXVlKSB0ZXh0dWFsIG5hbWUgKi8KKyAgICB1X2xvbmcgICAgICAgICAgc3ViaWQ7ICAvKiBUaGlzIG5vZGUncyBpbnRlZ2VyIHN1YmlkZW50aWZpZXIgKi8KKyAgICBpbnQgICAgICAgICAgICAgbW9kaWQ7ICAvKiBUaGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhpcyBub2RlICovCisgICAgY2hhciAgICAgICAgICAgKnBhcmVudDsgLyogVGhlIHBhcmVudCdzIHRleHR1YWwgbmFtZSAqLworICAgIGludCAgICAgICAgICAgICB0Y19pbmRleDsgLyogaW5kZXggaW50byB0Y2xpc3QgKC0xIGlmIE5BKSAqLworICAgIGludCAgICAgICAgICAgICB0eXBlOyAgIC8qIFRoZSB0eXBlIG9mIG9iamVjdCB0aGlzIHJlcHJlc2VudHMgKi8KKyAgICBpbnQgICAgICAgICAgICAgYWNjZXNzOworICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CisgICAgc3RydWN0IGVudW1fbGlzdCAqZW51bXM7IC8qIChvcHRpb25hbCkgbGlzdCBvZiBlbnVtZXJhdGVkIGludGVnZXJzICovCisgICAgc3RydWN0IHJhbmdlX2xpc3QgKnJhbmdlczsKKyAgICBzdHJ1Y3QgaW5kZXhfbGlzdCAqaW5kZXhlczsKKyAgICBjaGFyICAgICAgICAgICAqYXVnbWVudHM7CisgICAgc3RydWN0IHZhcmJpbmRfbGlzdCAqdmFyYmluZHM7CisgICAgY2hhciAgICAgICAgICAgKmhpbnQ7CisgICAgY2hhciAgICAgICAgICAgKnVuaXRzOworICAgIGNoYXIgICAgICAgICAgICpkZXNjcmlwdGlvbjsgLyogZGVzY3JpcHRpb24gKGEgcXVvdGVkIHN0cmluZykgKi8KKyAgICBjaGFyICAgICAgICAgICAqcmVmZXJlbmNlOyAvKiByZWZlcmVuY2VzIChhIHF1b3RlZCBzdHJpbmcpICovCisgICAgY2hhciAgICAgICAgICAgKmRlZmF1bHRWYWx1ZTsKKyAgICBjaGFyICAgICAgICAgICAqZmlsZW5hbWU7CisgICAgaW50ICAgICAgICAgICAgIGxpbmVubzsKK307CiAKIC8qCiAgKiBUaGlzIGlzIG9uZSBlbGVtZW50IG9mIGFuIG9iamVjdCBpZGVudGlmaWVyIHdpdGggZWl0aGVyIGFuIGludGVnZXIKQEAgLTUwOSw3ICs1MzQsMTEgQEAKICAqICNkZWZpbmUgTU9EVUxFX0xPQURfRkFJTEVEICAgMyAgICAgICAKICAqLwogI2RlZmluZSBNT0RVTEVfTE9BRF9GQUlMRUQJTU9EVUxFX05PVF9GT1VORAorI2RlZmluZSBNT0RVTEVfU1lOVEFYX0VSUk9SICAgICA0CiAKK2ludCBnTWliRXJyb3IgPSAwLGdMb29wID0gMDsKK2NoYXIgKmdwTWliRXJyb3JTdHJpbmcgPSBOVUxMOworY2hhciBnTWliTmFtZXNbU1RSSU5HTUFYXTsKIAogI2RlZmluZSBIQVNIU0laRSAgICAgICAgMzIKICNkZWZpbmUgQlVDS0VUKHgpICAgICAgICh4ICYgKEhBU0hTSVpFLTEpKQpAQCAtNTIzLDggKzU1Miw5IEBACiBzdGF0aWMgc3RydWN0IHRyZWUgKnRidWNrZXRzW05IQVNIU0laRV07CiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbW9kdWxlX2hlYWQgPSBOVUxMOwogCi1zdHJ1Y3Qgbm9kZSAgICAqb3JwaGFuX25vZGVzID0gTlVMTDsKLXN0cnVjdCB0cmVlICAgICp0cmVlX2hlYWQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBub2RlICpvcnBoYW5fbm9kZXMgPSBOVUxMOworTkVUU05NUF9JTVBPUlQgc3RydWN0IHRyZWUgKnRyZWVfaGVhZDsKK3N0cnVjdCB0cmVlICAgICAgICAqdHJlZV9oZWFkID0gTlVMTDsKIAogI2RlZmluZQlOVU1CRVJfT0ZfUk9PVF9OT0RFUwkzCiBzdGF0aWMgc3RydWN0IG1vZHVsZV9pbXBvcnQgcm9vdF9pbXBvcnRzW05VTUJFUl9PRl9ST09UX05PREVTXTsKQEAgLTUzMiw3ICs1NjIsNyBAQAogc3RhdGljIGludCAgICAgIGN1cnJlbnRfbW9kdWxlID0gMDsKIHN0YXRpYyBpbnQgICAgICBtYXhfbW9kdWxlID0gMDsKIHN0YXRpYyBpbnQgICAgICBmaXJzdF9lcnJfbW9kdWxlID0gMTsKLXN0YXRpYyBjaGFyICAgICpsYXN0X2Vycl9tb2R1bGUgPSAwOyAgICAvKiBubyByZXBlYXRzIG9uICJDYW5ub3QgZmluZCBtb2R1bGUuLi4iICovCitzdGF0aWMgY2hhciAgICAqbGFzdF9lcnJfbW9kdWxlID0gTlVMTDsgLyogbm8gcmVwZWF0cyBvbiAiQ2Fubm90IGZpbmQgbW9kdWxlLi4uIiAqLwogCiBzdGF0aWMgdm9pZCAgICAgdHJlZV9mcm9tX25vZGUoc3RydWN0IHRyZWUgKnRwLCBzdHJ1Y3Qgbm9kZSAqbnApOwogc3RhdGljIHZvaWQgICAgIGRvX3N1YnRyZWUoc3RydWN0IHRyZWUgKiwgc3RydWN0IG5vZGUgKiopOwpAQCAtNjgxLDcgKzcxMSw3IEBACiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gMDsKICAgICBmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKQotICAgICAgICBoYXNoICs9IHRvbG93ZXIoKmNwKTsKKyAgICAgICAgaGFzaCArPSB0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSgqY3ApKTsKICAgICByZXR1cm4gKGhhc2gpOwogfQogCkBAIC03MjcsNyArNzU3LDcgQEAKICAgICAgKi8KIH0KIAotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwogdm9pZAogaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpCiB7CkBAIC03NTMsMTEgKzc4MywxNCBAQAogCiBzdGF0aWMgaW50ICAgICAgZXJyb25lb3VzTWlicyA9IDA7CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwYXJzZV9nZXRfZXJyb3JfY291bnQsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0dFVF9FUlJPUl9DT1VOVAogaW50CiBnZXRfbWliX3BhcnNlX2Vycm9yX2NvdW50KHZvaWQpCiB7CiAgICAgcmV0dXJuIGVycm9uZW91c01pYnM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9HRVRfRVJST1JfQ09VTlQgKi8KIAogCiBzdGF0aWMgdm9pZApAQCAtODg1LDkgKzkxOCw5IEBACiAKICAgICB1bmxpbmtfdGJ1Y2tldChUcmVlKTsKICAgICBmcmVlX3BhcnRpYWxfdHJlZShUcmVlLCBGQUxTRSk7Ci0gICAgaWYgKFRyZWUtPm51bWJlcl9tb2R1bGVzID4gMSkKLSAgICAgICAgZnJlZSgoY2hhciAqKSBUcmVlLT5tb2R1bGVfbGlzdCk7Ci0gICAgZnJlZSgoY2hhciAqKSBUcmVlKTsKKyAgICBpZiAoVHJlZS0+bW9kdWxlX2xpc3QgIT0gJlRyZWUtPm1vZGlkKQorICAgICAgICBmcmVlKFRyZWUtPm1vZHVsZV9saXN0KTsKKyAgICBmcmVlKFRyZWUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTUxLDEwICs5ODQsOCBAQAogc3RhdGljIHZvaWQKIHByaW50X25vZGVzKEZJTEUgKiBmcCwgc3RydWN0IG5vZGUgKnJvb3QpCiB7Ci0gICAgZXh0ZXJuIHZvaWQgICAgIHhtYWxsb2Nfc3RhdHMoRklMRSAqKTsKICAgICBzdHJ1Y3QgZW51bV9saXN0ICplcDsKICAgICBzdHJ1Y3QgaW5kZXhfbGlzdCAqaXA7Ci0gICAgc3RydWN0IHJhbmdlX2xpc3QgKnJwOwogICAgIHN0cnVjdCB2YXJiaW5kX2xpc3QgKnZwOwogICAgIHN0cnVjdCBub2RlICAgICpucDsKIApAQCAtOTcwLDYgKzEwMDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChucC0+cmFuZ2VzKSB7CisgICAgICAgICAgICBzdHJ1Y3QgcmFuZ2VfbGlzdCAqcnA7CiAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiICBSYW5nZXM6ICIpOwogICAgICAgICAgICAgZm9yIChycCA9IG5wLT5yYW5nZXM7IHJwOyBycCA9IHJwLT5uZXh0KSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuICAgICIpOwpAQCAtMTA1Niw3ICsxMDg4LDcgQEAKIHN0YXRpYyBpbnQgICAgICB0cmFuc2xhdGlvbl90YWJsZVsyNTZdOwogCiBzdGF0aWMgdm9pZAotYnVpbGRfdHJhbnNsYXRpb25fdGFibGUoKQorYnVpbGRfdHJhbnNsYXRpb25fdGFibGUodm9pZCkKIHsKICAgICBpbnQgICAgICAgICAgICAgY291bnQ7CiAKQEAgLTExNDIsNyArMTE3NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1pbml0X3RyZWVfcm9vdHMoKQoraW5pdF90cmVlX3Jvb3RzKHZvaWQpCiB7CiAgICAgc3RydWN0IHRyZWUgICAgKnRwLCAqbGFzdHRwOwogICAgIGludCAgICAgICAgICAgICBiYXNlX21vZGlkOwpAQCAtMTUzOSwxNSArMTU3MSwxNCBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVXBkYXRlIGxpc3Qgb2YgbW9kdWxlcyAKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpbnRfcCA9Ci0gICAgICAgICAgICAgICAgICAgIChpbnQgKikgbWFsbG9jKCh0cC0+bnVtYmVyX21vZHVsZXMgKyAxKSAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBpbnRfcCA9IG1hbGxvYygodHAtPm51bWJlcl9tb2R1bGVzICsgMSkgKiBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICAgICAgaWYgKGludF9wID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBtZW1jcHkoaW50X3AsIHRwLT5tb2R1bGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPm51bWJlcl9tb2R1bGVzICogc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgICAgIGludF9wW3RwLT5udW1iZXJfbW9kdWxlc10gPSBucC0+bW9kaWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRwLT5udW1iZXJfbW9kdWxlcyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIGZyZWUoKGNoYXIgKikgdHAtPm1vZHVsZV9saXN0KTsKKyAgICAgICAgICAgICAgICBpZiAodHAtPm1vZHVsZV9saXN0ICE9ICZ0cC0+bW9kaWQpCisgICAgICAgICAgICAgICAgICAgIGZyZWUodHAtPm1vZHVsZV9saXN0KTsKICAgICAgICAgICAgICAgICArK3RwLT5udW1iZXJfbW9kdWxlczsKICAgICAgICAgICAgICAgICB0cC0+bW9kdWxlX2xpc3QgPSBpbnRfcDsKIApAQCAtMjEyMCw2ICsyMTUxLDggQEAKICAgICByZXR1cm4gKHRjbGlzdFt0Y19pbmRleF0uZGVzY3JpcHRvcik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfVENfREVTQ1JJUFRJT04KKy8qIHVzZWQgaW4gdGhlIHBlcmwgbW9kdWxlICovCiBjb25zdCBjaGFyICAgICAqCiBnZXRfdGNfZGVzY3JpcHRpb24oaW50IHRjX2luZGV4KQogewpAQCAtMjEyNyw2ICsyMTYwLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuICh0Y2xpc3RbdGNfaW5kZXhdLmRlc2NyaXB0aW9uKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9UQ19ERVNDUklQVElPTiAqLwogCiAKIC8qCkBAIC0yOTU1LDYgKzI5ODksMTUgQEAKICAgICAgICAgZnJlZV9ub2RlKG5wKTsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB9CisKKyAgICAvKiBDYXRjaCB0aGUgc3ludGF4IGVycm9yICovCisgICAgaWYgKG5wLT5wYXJlbnQgPT0gTlVMTCkgeworICAgICAgICBmcmVlX25vZGUobnAtPm5leHQpOworICAgICAgICBmcmVlX25vZGUobnApOworICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOworICAgICAgICByZXR1cm4gKE5VTEwpOworICAgIH0KKwogICAgIG5wLT5uZXh0LT5wYXJlbnQgPSBucC0+cGFyZW50OwogICAgIG5wLT5wYXJlbnQgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKG5wLT5wYXJlbnQpICsgMik7CiAgICAgaWYgKG5wLT5wYXJlbnQgPT0gTlVMTCkgewpAQCAtMjk2NSw3ICszMDA4LDYgQEAKICAgICBzdHJjcHkobnAtPnBhcmVudCwgbnAtPm5leHQtPnBhcmVudCk7CiAgICAgc3RyY2F0KG5wLT5wYXJlbnQsICIjIik7CiAgICAgbnAtPm5leHQtPmxhYmVsID0gc3RyZHVwKG5wLT5wYXJlbnQpOwotICAgIG5wLT50eXBlID0gVFJBUFRZUEU7CiAgICAgcmV0dXJuIG5wOwogfQogCkBAIC0zNzM1LDYgKzM3NzcsOCBAQAogICogICAgICBvciB0aG9zZSByZWxhdGluZyB0byBhIHNwZWNpZmllZCBpZGVudGlmaWVyIChyZWFkX2ltcG9ydF9yZXBsYWNlbWVudHMpCiAgKiAgICAgIHBsdXMgYW4gaW50ZXJmYWNlIHRvIGFkZCBuZXcgcmVwbGFjZW1lbnQgcmVxdWlyZW1lbnRzCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwYXJzZV9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9BRERfTU9EVUxFX1JFUExBQ0VNRU5UCiB2b2lkCiBhZGRfbW9kdWxlX3JlcGxhY2VtZW50KGNvbnN0IGNoYXIgKm9sZF9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5ld19tb2R1bGVfbmFtZSwKQEAgLTM3NTYsNiArMzgwMCw3IEBACiAgICAgbWNwLT5uZXh0ID0gbW9kdWxlX21hcF9oZWFkOwogICAgIG1vZHVsZV9tYXBfaGVhZCA9IG1jcDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0FERF9NT0RVTEVfUkVQTEFDRU1FTlQgKi8KIAogc3RhdGljIGludAogcmVhZF9tb2R1bGVfcmVwbGFjZW1lbnRzKGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0zODMxLDYgKzM4NzYsNyBAQAogewogICAgIHN0cnVjdCBtb2R1bGUgICptcDsKICAgICBGSUxFICAgICAgICAgICAqZnA7CisgICAgc3RydWN0IG5vZGUgICAgKm5wOwogCiAgICAgbmV0c25tcF9pbml0X21pYl9pbnRlcm5hbHMoKTsKIApAQCAtMzg0Niw5ICszODkyLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE1PRFVMRV9BTFJFQURZX0xPQURFRDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgoZnAgPSBmb3BlbihtcC0+ZmlsZSwgInIiKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGludCBydmFsOworICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9URElSIHx8IGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgICAgICAgcnZhbCA9IE1PRFVMRV9OT1RfRk9VTkQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBydmFsID0gTU9EVUxFX0xPQURfRkFJTEVEOwogICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihtcC0+ZmlsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1PRFVMRV9MT0FEX0ZBSUxFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnZhbDsKICAgICAgICAgICAgIH0KKyNpZmRlZiBIQVZFX0ZMT0NLRklMRQorICAgICAgICAgICAgZmxvY2tmaWxlKGZwKTsKKyNlbmRpZgogICAgICAgICAgICAgbXAtPm5vX2ltcG9ydHMgPSAwOyAvKiBOb3RlIHRoYXQgd2UndmUgcmVhZCB0aGUgZmlsZSAqLwogICAgICAgICAgICAgRmlsZSA9IG1wLT5maWxlOwogICAgICAgICAgICAgbWliTGluZSA9IDE7CkBAIC0zODU2LDExICszOTEwLDE2IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogUGFyc2UgdGhlIGZpbGUKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGFyc2UoZnAsIE5VTEwpOworICAgICAgICAgICAgbnAgPSBwYXJzZShmcCwgTlVMTCk7CisjaWZkZWYgSEFWRV9GVU5MT0NLRklMRQorICAgICAgICAgICAgZnVubG9ja2ZpbGUoZnApOworI2VuZGlmCiAgICAgICAgICAgICBmY2xvc2UoZnApOwogICAgICAgICAgICAgRmlsZSA9IG9sZEZpbGU7CiAgICAgICAgICAgICBtaWJMaW5lID0gb2xkTGluZTsKICAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlID0gb2xkTW9kdWxlOworICAgICAgICAgICAgaWYgKChucCA9PSBOVUxMKSAmJiAoZ01pYkVycm9yID09IE1PRFVMRV9TWU5UQVhfRVJST1IpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgIHJldHVybiBNT0RVTEVfTE9BREVEX09LOwogICAgICAgICB9CiAKQEAgLTM5MzgsNyArMzk5Nyw3IEBACiAgICAgICAgIH0KIH0KIAotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwogc3RydWN0IHRyZWUgICAgKgogcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTM5NDksOSArNDAwOCwyMCBAQAogc3RydWN0IHRyZWUgICAgKgogbmV0c25tcF9yZWFkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewotICAgIGlmIChyZWFkX21vZHVsZV9pbnRlcm5hbChuYW1lKSA9PSBNT0RVTEVfTk9UX0ZPVU5EKQorICAgIGludCBzdGF0dXMgPSAwOworICAgIHN0YXR1cyA9IHJlYWRfbW9kdWxlX2ludGVybmFsKG5hbWUpOworCisgICAgaWYgKHN0YXR1cyA9PSBNT0RVTEVfTk9UX0ZPVU5EKSB7CiAgICAgICAgIGlmICghcmVhZF9tb2R1bGVfcmVwbGFjZW1lbnRzKG5hbWUpKQotCSAgICBwcmludF9tb2R1bGVfbm90X2ZvdW5kKG5hbWUpOworICAgICAgICAgICAgcHJpbnRfbW9kdWxlX25vdF9mb3VuZChuYW1lKTsKKyAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBNT0RVTEVfU1lOVEFYX0VSUk9SKSB7CisgICAgICAgIGdNaWJFcnJvciA9IDA7CisgICAgICAgIGdMb29wID0gMTsKKworICAgICAgICBzdHJuY2F0KGdNaWJOYW1lcywgIiAiLCBzaXplb2YoZ01pYk5hbWVzKSAtIHN0cmxlbihnTWliTmFtZXMpIC0gMSk7CisgICAgICAgIHN0cm5jYXQoZ01pYk5hbWVzLCBuYW1lLCBzaXplb2YoZ01pYk5hbWVzKSAtIHN0cmxlbihnTWliTmFtZXMpIC0gMSk7CisgICAgfQorCiAgICAgcmV0dXJuIHRyZWVfaGVhZDsKIH0KIApAQCAtNDAzOSw3ICs0MTA5LDcgQEAKICAgICB9CiB9CiAKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKIGludAogdW5sb2FkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNDA3MywxMiArNDE0MywxMiBAQAogICogQ2xlYXIgbW9kdWxlIG1hcCwgdHJlZSBub2RlcywgdGV4dHVhbCBjb252ZW50aW9uIHRhYmxlLgogICovCiB2b2lkCi11bmxvYWRfYWxsX21pYnMoKQordW5sb2FkX2FsbF9taWJzKHZvaWQpCiB7CiAgICAgc3RydWN0IG1vZHVsZSAgKm1wOwogICAgIHN0cnVjdCBtb2R1bGVfY29tcGF0YWJpbGl0eSAqbWNwOwogICAgIHN0cnVjdCB0YyAgICAgICpwdGM7Ci0gICAgaW50ICAgICAgICAgICAgIGk7CisgICAgdW5zaWduZWQgaW50ICAgIGk7CiAKICAgICBmb3IgKG1jcCA9IG1vZHVsZV9tYXBfaGVhZDsgbWNwOyBtY3AgPSBtb2R1bGVfbWFwX2hlYWQpIHsKICAgICAgICAgaWYgKG1jcCA9PSBtb2R1bGVfbWFwKQpAQCAtNDA5Myw3ICs0MTYzLDcgQEAKICAgICBmb3IgKG1wID0gbW9kdWxlX2hlYWQ7IG1wOyBtcCA9IG1vZHVsZV9oZWFkKSB7CiAgICAgICAgIHN0cnVjdCBtb2R1bGVfaW1wb3J0ICptaSA9IG1wLT5pbXBvcnRzOwogICAgICAgICBpZiAobWkpIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtcC0+bm9faW1wb3J0czsgKytpKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCltcC0+bm9faW1wb3J0czsgKytpKSB7CiAgICAgICAgICAgICAgICAgU05NUF9GUkVFKChtaSArIGkpLT5sYWJlbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtcC0+bm9faW1wb3J0cyA9IDA7CkBAIC00MTkyLDcgKzQyNjIsNyBAQAogCiAKIHN0YXRpYyB2b2lkCi1zY2FuX29iamxpc3Qoc3RydWN0IG5vZGUgKnJvb3QsIHN0cnVjdCBvYmpncm91cCAqbGlzdCwgY29uc3QgY2hhciAqZXJyb3IpCitzY2FuX29iamxpc3Qoc3RydWN0IG5vZGUgKnJvb3QsIHN0cnVjdCBtb2R1bGUgKm1wLCBzdHJ1Y3Qgb2JqZ3JvdXAgKmxpc3QsIGNvbnN0IGNoYXIgKmVycm9yKQogewogICAgIGludCAgICAgICAgICAgICBvTGluZSA9IG1pYkxpbmU7CiAKQEAgLTQyMDcsOCArNDI3NywxNiBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoIW5wKSB7Ci0gICAgICAgICAgICBtaWJMaW5lID0gZ3AtPmxpbmU7Ci0gICAgICAgICAgICBwcmludF9lcnJvcihlcnJvciwgZ3AtPm5hbWUsIFFVT1RFU1RSSU5HKTsKKwkgICAgaW50IGk7CisJICAgIHN0cnVjdCBtb2R1bGVfaW1wb3J0ICptaXA7CisJICAgIC8qIGlmIG5vdCBsb2NhbCwgY2hlY2sgaWYgaXQgd2FzIElNUE9SVGVkICovCisJICAgIGZvciAoaSA9IDAsIG1pcCA9IG1wLT5pbXBvcnRzOyBpIDwgbXAtPm5vX2ltcG9ydHM7IGkrKywgbWlwKyspCisJCWlmIChzdHJjbXAobWlwLT5sYWJlbCwgZ3AtPm5hbWUpID09IDApCisJCSAgICBicmVhazsKKwkgICAgaWYgKGkgPT0gbXAtPm5vX2ltcG9ydHMpIHsKKwkJbWliTGluZSA9IGdwLT5saW5lOworCQlwcmludF9lcnJvcihlcnJvciwgZ3AtPm5hbWUsIFFVT1RFU1RSSU5HKTsKKwkgICAgfQogICAgICAgICB9CiAgICAgICAgIGZyZWUoZ3AtPm5hbWUpOwogICAgICAgICBmcmVlKGdwKTsKQEAgLTQyMjMsNiArNDMwMSw5IEBACiBzdGF0aWMgc3RydWN0IG5vZGUgKgogcGFyc2UoRklMRSAqIGZwLCBzdHJ1Y3Qgbm9kZSAqcm9vdCkKIHsKKyNpZmRlZiBURVNUCisgICAgZXh0ZXJuIHZvaWQgICAgIHhtYWxsb2Nfc3RhdHMoRklMRSAqKTsKKyNlbmRpZgogICAgIGNoYXIgICAgICAgICAgICB0b2tlbltNQVhUT0tFTl07CiAgICAgY2hhciAgICAgICAgICAgIG5hbWVbTUFYVE9LRU4rMV07CiAgICAgaW50ICAgICAgICAgICAgIHR5cGUgPSBMQUJFTDsKQEAgLTQyMzksNyArNDMyMCw3IEBACiAKICAgICBpZiAobGFzdF9lcnJfbW9kdWxlKQogICAgICAgICBmcmVlKGxhc3RfZXJyX21vZHVsZSk7Ci0gICAgbGFzdF9lcnJfbW9kdWxlID0gMDsKKyAgICBsYXN0X2Vycl9tb2R1bGUgPSBOVUxMOwogCiAgICAgbnAgPSByb290OwogICAgIGlmIChucCAhPSBOVUxMKSB7CkBAIC00MjYwLDYgKzQzNDEsNyBAQAogICAgICAgICBjYXNlIEVORDoKICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSBJTl9NSUIpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiRXJyb3IsIEVORCBiZWZvcmUgc3RhcnQgb2YgTUlCIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAgKm1wOwpAQCAtNDI2NywxNSArNDM0OSwxNSBAQAogICAgICAgICAgICAgICAgIHByaW50ZigiXG5Ob2RlcyBmb3IgTW9kdWxlICVzOlxuIiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgcHJpbnRfbm9kZXMoc3Rkb3V0LCByb290KTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBvYmpncm91cHMsICJVbmRlZmluZWQgT0JKRUNULUdST1VQIik7Ci0gICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG9iamVjdHMsICJVbmRlZmluZWQgT0JKRUNUIik7Ci0gICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG5vdGlmcywgIlVuZGVmaW5lZCBOT1RJRklDQVRJT04iKTsKLSAgICAgICAgICAgICAgICBvYmpncm91cHMgPSBvbGRncm91cHM7Ci0gICAgICAgICAgICAgICAgb2JqZWN0cyA9IG9sZG9iamVjdHM7Ci0gICAgICAgICAgICAgICAgbm90aWZzID0gb2xkbm90aWZzOwogICAgICAgICAgICAgICAgIGZvciAobXAgPSBtb2R1bGVfaGVhZDsgbXA7IG1wID0gbXAtPm5leHQpCiAgICAgICAgICAgICAgICAgICAgIGlmIChtcC0+bW9kaWQgPT0gY3VycmVudF9tb2R1bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgbXAsIG9iamdyb3VwcywgIlVuZGVmaW5lZCBPQkpFQ1QtR1JPVVAiKTsKKyAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgbXAsIG9iamVjdHMsICJVbmRlZmluZWQgT0JKRUNUIik7CisgICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG1wLCBub3RpZnMsICJVbmRlZmluZWQgTk9USUZJQ0FUSU9OIik7CisgICAgICAgICAgICAgICAgb2JqZ3JvdXBzID0gb2xkZ3JvdXBzOworICAgICAgICAgICAgICAgIG9iamVjdHMgPSBvbGRvYmplY3RzOworICAgICAgICAgICAgICAgIG5vdGlmcyA9IG9sZG5vdGlmczsKICAgICAgICAgICAgICAgICBkb19saW5rdXAobXAsIHJvb3QpOwogICAgICAgICAgICAgICAgIG5wID0gcm9vdCA9IE5VTEw7CiAgICAgICAgICAgICB9CkBAIC00MjgzLDcgKzQzNjUsNyBAQAogI2lmZGVmIFRFU1QKICAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICBORVRTTk1QX0RTX0xJQl9NSUJfV0FSTklOR1MpKSB7Ci0gICAgICAgICAgICAgICAgeG1hbGxvY19zdGF0cyhzdGRlcnIpOworICAgICAgICAgICAgICAgIC8qIHhtYWxsb2Nfc3RhdHMoc3RkZXJyKTsgKi8KIAkgICAgfQogI2VuZGlmCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQzMjMsNiArNDQwNSw3IEBACiAgICAgICAgICAgICAgICAgbm5wID0gcGFyc2VfbWFjcm8oZnAsIG5hbWUpOwogICAgICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE1BQ1JPIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAqIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQzNDYsNiArNDQyOSw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IGdldF90b2tlbihmcCwgdG9rZW4sIE1BWFRPS0VOKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IEVORE9GRklMRSkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJFeHBlY3RlZCBcIn1cIiIsIHRva2VuLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHlwZSA9IGdldF90b2tlbihmcCwgdG9rZW4sIE1BWFRPS0VOKTsKQEAgLTQzNTUsNiArNDQzOSw3IEBACiAgICAgICAgIGNhc2UgREVGSU5JVElPTlM6CiAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gQkVUV0VFTl9NSUJTKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkVycm9yLCBuZXN0ZWQgTUlCUyIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZSA9IElOX01JQjsKQEAgLTQzNzksNiArNDQ2NCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9vYmplY3R0eXBlKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgT0JKRUNULVRZUEUiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00Mzg2LDYgKzQ0NzIsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2Vfb2JqZWN0Z3JvdXAoZnAsIG5hbWUsIE9CSkVDVFMsICZvYmplY3RzKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgT0JKRUNULUdST1VQIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDM5Myw2ICs0NDgwLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX29iamVjdGdyb3VwKGZwLCBuYW1lLCBOT1RJRklDQVRJT05TLCAmbm90aWZzKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTk9USUZJQ0FUSU9OLUdST1VQIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQwMCw2ICs0NDg4LDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX3RyYXBEZWZpbml0aW9uKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgVFJBUC1UWVBFIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQwNyw2ICs0NDk2LDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX25vdGlmaWNhdGlvbkRlZmluaXRpb24oZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBOT1RJRklDQVRJT04tVFlQRSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MTQsNiArNDUwNCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9jb21wbGlhbmNlKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTU9EVUxFLUNPTVBMSUFOQ0UiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDIxLDYgKzQ1MTIsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2VfY2FwYWJpbGl0aWVzKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgQUdFTlQtQ0FQQUJJTElUSUVTIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQyOCw2ICs0NTIwLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX21hY3JvKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTUFDUk8iLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICovCkBAIC00NDM5LDYgKzQ1MzIsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2VfbW9kdWxlSWRlbnRpdHkoZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBNT0RVTEUtSURFTlRJVFkiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDQ2LDYgKzQ1NDAsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2Vfb2JqZWN0Z3JvdXAoZnAsIG5hbWUsIE9CSkVDVFMsICZvYmplY3RzKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgT0JKRUNULUlERU5USVRZIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ1MywxNiArNDU0OCwxOSBAQAogICAgICAgICAgICAgdHlwZSA9IGdldF90b2tlbihmcCwgdG9rZW4sIE1BWFRPS0VOKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IElERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiRXhwZWN0ZWQgSURFTlRJRklFUiIsIHRva2VuLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHlwZSA9IGdldF90b2tlbihmcCwgdG9rZW4sIE1BWFRPS0VOKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IEVRVUFMUykgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJFeHBlY3RlZCBcIjo6PVwiIiwgdG9rZW4sIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBubnAgPSBwYXJzZV9vYmplY3RpZChmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE9CSkVDVCBJREVOVElGSUVSIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ3NCw2ICs0NTcyLDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBvcGVyYXRvciIsIHRva2VuLCB0eXBlKTsKKyAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAobm5wKSB7CkBAIC00NTA3LDYgKzQ2MDYsMjEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorLyoqCisgKiBSZWFkIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIGEgZmlsZS4gQXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaGFzIGludm9rZWQKKyAqIGZsb2NrZmlsZSgpLiBVc2VzIGZnZXRjX3VubG9ja2VkKCkgaW5zdGVhZCBvZiBnZXRjKCkgc2luY2UgdGhlIGZvcm1lciBpcworICogaW1wbGVtZW50ZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIGluIGdsaWJjLiBTZWUgYWxzbyBidWcgMzQ0NzE5NgorICogKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM0NDcxOTYmZ3JvdXBfaWQ9MTI2OTQmYXRpZD0xMTI2OTQpLgorICovCitzdGF0aWMgaW50IG5ldHNubXBfZ2V0YyhGSUxFICpzdHJlYW0pCit7CisjaWZkZWYgSEFWRV9GR0VUQ19VTkxPQ0tFRAorICAgIHJldHVybiBmZ2V0Y191bmxvY2tlZChzdHJlYW0pOworI2Vsc2UKKyAgICByZXR1cm4gZ2V0YyhzdHJlYW0pOworI2VuZGlmCit9CisKIC8qCiAgKiBQYXJzZXMgYSB0b2tlbiBmcm9tIHRoZSBmaWxlLiAgVGhlIHR5cGUgb2YgdGhlIHRva2VuIHBhcnNlZCBpcyByZXR1cm5lZCwKICAqIGFuZCB0aGUgdGV4dCBpcyBwbGFjZWQgaW4gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IHRva2VuLgpAQCAtNDUyMCwxMiArNDYzNCwxMyBAQAogICAgIHJlZ2lzdGVyIGludCAgICBoYXNoID0gMDsKICAgICByZWdpc3RlciBzdHJ1Y3QgdG9rICp0cDsKICAgICBpbnQgICAgICAgICAgICAgdG9vX2xvbmcgPSAwOworICAgIGVudW0geyBiZGlnaXRzLCB4ZGlnaXRzLCBvdGhlciB9IHNlZW5TeW1ib2xzOwogCiAgICAgLyoKICAgICAgKiBza2lwIGFsbCB3aGl0ZSBzcGFjZSAKICAgICAgKi8KICAgICBkbyB7Ci0gICAgICAgIGNoID0gZ2V0YyhmcCk7CisgICAgICAgIGNoID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgaWYgKGNoID09ICdcbicpCiAgICAgICAgICAgICBtaWJMaW5lKys7CiAgICAgfQpAQCAtNDUzOCwzOSArNDY1Myw2MCBAQAogICAgIGNhc2UgJyInOgogICAgICAgICByZXR1cm4gcGFyc2VRdW90ZVN0cmluZyhmcCwgdG9rZW4sIG1heHRsZW4pOwogICAgIGNhc2UgJ1wnJzogICAgICAgICAgICAgICAgIC8qIGJpbmFyeSBvciBoZXggY29uc3RhbnQgKi8KLSAgICAgICAgd2hpbGUgKChjaCA9IGdldGMoZnApKSAhPSBFT0YgJiYgY2ggIT0gJ1wnJwotICAgICAgICAgICAgICAgJiYgY3AgLSB0b2tlbiA8IG1heHRsZW4gLSAyKQotICAgICAgICAgICAgKmNwKysgPSBjaDsKKyAgICAgICAgc2VlblN5bWJvbHMgPSBiZGlnaXRzOworICAgICAgICB3aGlsZSAoKGNoID0gbmV0c25tcF9nZXRjKGZwKSkgIT0gRU9GICYmIGNoICE9ICdcJycpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2VlblN5bWJvbHMpIHsKKyAgICAgICAgICAgIGNhc2UgYmRpZ2l0czoKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzAnIHx8IGNoID09ICcxJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc2VlblN5bWJvbHMgPSB4ZGlnaXRzOworICAgICAgICAgICAgY2FzZSB4ZGlnaXRzOgorICAgICAgICAgICAgICAgIGlmIChpc3hkaWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHNlZW5TeW1ib2xzID0gb3RoZXI7CisgICAgICAgICAgICBjYXNlIG90aGVyOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNwIC0gdG9rZW4gPCBtYXh0bGVuIC0gMikKKyAgICAgICAgICAgICAgICAqY3ArKyA9IGNoOworICAgICAgICB9CiAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgdmFsID0gMDsKLSAgICAgICAgICAgICpjcCsrID0gJ1wnJzsKLSAgICAgICAgICAgICpjcCsrID0gY2ggPSBnZXRjKGZwKTsKLSAgICAgICAgICAgICpjcCA9IDA7Ci0gICAgICAgICAgICBjcCA9IHRva2VuICsgMTsKKyAgICAgICAgICAgIGNoYXIgICAgICAgICAgICpydW4gPSB0b2tlbiArIDE7CisgICAgICAgICAgICBjaCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgICBjYXNlIEVPRjoKICAgICAgICAgICAgICAgICByZXR1cm4gRU5ET0ZGSUxFOwogICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgICBjYXNlICdCJzoKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gKmNwKyspICE9ICdcJycpCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnMCcgJiYgY2ggIT0gJzEnKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKiAyICsgY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKHNlZW5TeW1ib2xzID4gYmRpZ2l0cykgeworICAgICAgICAgICAgICAgICAgICAqY3ArKyA9ICdcJyc7CisgICAgICAgICAgICAgICAgICAgICpjcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHJ1biAhPSBjcCkKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsICogMiArICpydW4rKyAtICcwJzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgY2FzZSAnSCc6Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9ICpjcCsrKSAhPSAnXCcnKQorICAgICAgICAgICAgICAgIGlmIChzZWVuU3ltYm9scyA+IHhkaWdpdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAnXCcnOworICAgICAgICAgICAgICAgICAgICAqY3AgPSAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChydW4gIT0gY3ApIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqcnVuKys7CiAgICAgICAgICAgICAgICAgICAgIGlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsICogMTYgKyBjaCAtICcwJzsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCAqIDE2ICsgY2ggLSAnYScgKyAxMDsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJ0EnIDw9IGNoICYmIGNoIDw9ICdGJykKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCAqIDE2ICsgY2ggLSAnQScgKyAxMDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgKmNwKysgPSAnXCcnOworICAgICAgICAgICAgICAgICpjcCA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3ByaW50Zih0b2tlbiwgIiVsZCIsIHZhbCk7CkBAIC00NTk2LDI1ICs0NzMyLDI1IEBACiAgICAgY2FzZSAnfCc6CiAgICAgICAgIHJldHVybiBCQVI7CiAgICAgY2FzZSAnLic6Ci0gICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgIGlmIChjaF9uZXh0ID09ICcuJykKICAgICAgICAgICAgIHJldHVybiBSQU5HRTsKICAgICAgICAgdW5nZXRjKGNoX25leHQsIGZwKTsKICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgIGNhc2UgJzonOgotICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICBpZiAoY2hfbmV4dCAhPSAnOicpIHsKICAgICAgICAgICAgIHVuZ2V0YyhjaF9uZXh0LCBmcCk7CiAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgICAgIH0KLSAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgaWYgKGNoX25leHQgIT0gJz0nKSB7CiAgICAgICAgICAgICB1bmdldGMoY2hfbmV4dCwgZnApOwogICAgICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBFUVVBTFM7CiAgICAgY2FzZSAnLSc6Ci0gICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgIGlmIChjaF9uZXh0ID09ICctJykgewogICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICAgICAgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSkpIHsKQEAgLTQ2MjIsNyArNDc1OCw3IEBACiAgICAgICAgICAgICAgICAgICogVHJlYXQgdGhlIHJlc3Qgb2YgdGhpcyBsaW5lIGFzIGEgY29tbWVudC4gCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgd2hpbGUgKChjaF9uZXh0ICE9IEVPRikgJiYgKGNoX25leHQgIT0gJ1xuJykpCi0gICAgICAgICAgICAgICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVHJlYXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgb3IgdW50aWwgYW5vdGhlciAnLS0nIGFzIGEgY29tbWVudCAKQEAgLTQ2MzEsMTEgKzQ3NjcsMTEgQEAKICAgICAgICAgICAgICAgICAgKiAodGhpcyBpcyB0aGUgInRlY2huaWNhbGx5IiBjb3JyZWN0IHdheSB0byBwYXJzZSBjb21tZW50cykgCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgY2ggPSAnICc7Ci0gICAgICAgICAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICAgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICAgICAgICAgIHdoaWxlIChjaF9uZXh0ICE9IEVPRiAmJiBjaF9uZXh0ICE9ICdcbicgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKGNoICE9ICctJyB8fCBjaF9uZXh0ICE9ICctJykpIHsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBjaF9uZXh0OwotICAgICAgICAgICAgICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgICAgICAgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaF9uZXh0ID09IEVPRikKQEAgLTQ2NTYsNyArNDc5Miw3IEBACiAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgICAgIGhhc2ggKz0gdG9sb3dlcihjaCk7CiAgICAgICBtb3JlOgotICAgICAgICB3aGlsZSAoaXNfbGFiZWxjaGFyKGNoX25leHQgPSBnZXRjKGZwKSkpIHsKKyAgICAgICAgd2hpbGUgKGlzX2xhYmVsY2hhcihjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKSkpIHsKICAgICAgICAgICAgIGhhc2ggKz0gdG9sb3dlcihjaF9uZXh0KTsKICAgICAgICAgICAgIGlmIChjcCAtIHRva2VuIDwgbWF4dGxlbiAtIDEpCiAgICAgICAgICAgICAgICAgKmNwKysgPSBjaF9uZXh0OwpAQCAtNDY3NSw3ICs0ODExLDcgQEAKICAgICAgICAgaWYgKHRwKSB7CiAgICAgICAgICAgICBpZiAodHAtPnRva2VuICE9IENPTlRJTlVFKQogICAgICAgICAgICAgICAgIHJldHVybiAodHAtPnRva2VuKTsKLSAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKChjaF9uZXh0ID0gZ2V0YyhmcCkpKSkKKyAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKChjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKSkpKQogICAgICAgICAgICAgICAgIGlmIChjaF9uZXh0ID09ICdcbicpCiAgICAgICAgICAgICAgICAgICAgIG1pYkxpbmUrKzsKICAgICAgICAgICAgIGlmIChjaF9uZXh0ID09IEVPRikKQEAgLTQ2ODYsOSArNDgyMiw5IEBACiAgICAgICAgICAgICAgICAgZ290byBtb3JlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlblswXSA9PSAnLScgfHwgaXNkaWdpdCh0b2tlblswXSkpIHsKKyAgICAgICAgaWYgKHRva2VuWzBdID09ICctJyB8fCBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSh0b2tlblswXSkpKSB7CiAgICAgICAgICAgICBmb3IgKGNwID0gdG9rZW4gKyAxOyAqY3A7IGNwKyspCi0gICAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCpjcCkpCisgICAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgICAgICAgICAgcmV0dXJuIE5VTUJFUjsKICAgICAgICAgfQpAQCAtNDY5NiwxMSArNDgzMiwxNCBAQAogICAgIH0KIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHBhcnNlX2dldF90b2tlbiwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfR0VUX1RPS0VOCiBpbnQKIHNubXBfZ2V0X3Rva2VuKEZJTEUgKiBmcCwgY2hhciAqdG9rZW4sIGludCBtYXh0bGVuKQogewogICAgIHJldHVybiBnZXRfdG9rZW4oZnAsIHRva2VuLCBtYXh0bGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0dFVF9UT0tFTiAqLwogCiBpbnQKIGFkZF9taWJmaWxlKGNvbnN0IGNoYXIqIHRtcHN0ciwgY29uc3QgY2hhciogZF9uYW1lLCBGSUxFICppcCApCkBAIC00NzU1LDI2ICs0ODk0LDI0IEBACiAgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMDsKICAgICBpbnQgICAgICAgICAgICAgZm5hbWVfbGVuID0gMDsKICNpZiAhKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoY3lnd2luKSkKLSAgICBjaGFyICAgICAgICAgICAgdG9rZW5bTUFYVE9LRU5dOworICAgIGNoYXIgICAgICAgICAgICp0b2tlbjsKICAgICBjaGFyIHNwYWNlOwogICAgIGNoYXIgbmV3bGluZTsKICAgICBzdHJ1Y3Qgc3RhdCAgICAgZGlyX3N0YXQsIGlkeF9zdGF0OwogICAgIGNoYXIgICAgICAgICAgICB0bXBzdHIxWzMwMF07Ci0gICAgaW50IGVtcHR5ID0gMTsKICNlbmRpZgogCiAgICAgREVCVUdNU0dUTCgoInBhcnNlLW1pYnMiLCAiU2Nhbm5pbmcgZGlyZWN0b3J5ICVzXG4iLCBkaXJuYW1lKSk7CiAjaWYgIShkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKGN5Z3dpbikpCi0gICAgc25wcmludGYodG9rZW4sIHNpemVvZih0b2tlbiksICIlcy8lcyIsIGRpcm5hbWUsICIuaW5kZXgiKTsKLSAgICB0b2tlblsgc2l6ZW9mKHRva2VuKS0xIF0gPSAwOwotICAgIGlmIChzdGF0KHRva2VuLCAmaWR4X3N0YXQpID09IDAgJiYgc3RhdChkaXJuYW1lLCAmZGlyX3N0YXQpID09IDApIHsKKyAgICB0b2tlbiA9IG5ldHNubXBfbWliaW5kZXhfbG9va3VwKCBkaXJuYW1lICk7CisgICAgaWYgKHRva2VuICYmIHN0YXQodG9rZW4sICZpZHhfc3RhdCkgPT0gMCAmJiBzdGF0KGRpcm5hbWUsICZkaXJfc3RhdCkgPT0gMCkgewogICAgICAgICBpZiAoZGlyX3N0YXQuc3RfbXRpbWUgPCBpZHhfc3RhdC5zdF9tdGltZSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInBhcnNlLW1pYnMiLCAiVGhlIGluZGV4IGlzIGdvb2RcbiIpKTsKICAgICAgICAgICAgIGlmICgoaXAgPSBmb3Blbih0b2tlbiwgInIiKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZnZXRzKHRtcHN0ciwgc2l6ZW9mKHRtcHN0ciksIGlwKTsgLyogU2tpcCBkaXIgbGluZSAqLwogICAgICAgICAgICAgICAgIHdoaWxlIChmc2NhbmYoaXAsICIlMTI3cyVjJTI5OXMlYyIsIHRva2VuLCAmc3BhY2UsIHRtcHN0ciwKIAkJICAgICZuZXdsaW5lKSA9PSA0KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZW1wdHkgPSAwOwogCQkgICAgLyoKIAkJICAgICAqIElmIGFuIG92ZXJmbG93IG9mIHRoZSB0b2tlbiBvciB0bXBzdHIgYnVmZmVycyBoYXMgYmVlbgogCQkgICAgICogZm91bmQgbG9nIGEgbWVzc2FnZSBhbmQgYnJlYWsgb3V0IG9mIHRoZSB3aGlsZSBsb29wLApAQCAtNDc5NCwxMCArNDkzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZjbG9zZShpcCk7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZW1wdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBhcnNlLW1pYnMiLCAiRW1wdHkgTUlCIGluZGV4XG4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBhcnNlLW1pYnMiLCAiQ2FuJ3QgcmVhZCBpbmRleFxuIikpOwogICAgICAgICB9IGVsc2UKQEAgLTQ4MDcsOSArNDk0MSw3IEBACiAjZW5kaWYKIAogICAgIGlmICgoZGlyID0gb3BlbmRpcihkaXJuYW1lKSkpIHsKLSAgICAgICAgc25wcmludGYodG1wc3RyLCBzaXplb2YodG1wc3RyKSwgIiVzLy5pbmRleCIsIGRpcm5hbWUpOwotICAgICAgICB0bXBzdHJbIHNpemVvZih0bXBzdHIpLTEgXSA9IDA7Ci0gICAgICAgIGlwID0gZm9wZW4odG1wc3RyLCAidyIpOworICAgICAgICBpcCA9IG5ldHNubXBfbWliaW5kZXhfbmV3KCBkaXJuYW1lICk7CiAgICAgICAgIHdoaWxlICgoZmlsZSA9IHJlYWRkaXIoZGlyKSkpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBPbmx5IHBhcnNlIGZpbGUgbmFtZXMgdGhhdCBkb24ndCBiZWdpbiB3aXRoIGEgJy4nIApAQCAtNDg4MSw3ICs1MDEzLDcgQEAKIAogCiBzdHJ1Y3QgdHJlZSAgICAqCi1yZWFkX2FsbF9taWJzKCkKK3JlYWRfYWxsX21pYnModm9pZCkKIHsKICAgICBzdHJ1Y3QgbW9kdWxlICAqbXA7CiAKQEAgLTQ4OTAsMTIgKzUwMjIsMjkgQEAKICAgICAgICAgICAgIG5ldHNubXBfcmVhZF9tb2R1bGUobXAtPm5hbWUpOwogICAgIGFkb3B0X29ycGhhbnMoKTsKIAorICAgIC8qIElmIGVudGVyZWQgdGhlIHN5bnRheCBlcnJvciBsb29wIGluICJyZWFkX21vZHVsZSgpIiAqLworICAgIGlmIChnTG9vcCA9PSAxKSB7CisgICAgICAgIGdMb29wID0gMDsKKyAgICAgICAgaWYgKGdwTWliRXJyb3JTdHJpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgU05NUF9GUkVFKGdwTWliRXJyb3JTdHJpbmcpOworICAgICAgICB9CisgICAgICAgIGdwTWliRXJyb3JTdHJpbmcgPSAoY2hhciAqKSBjYWxsb2MoMSwgTUFYUVVPVEVTVFIpOworICAgICAgICBpZiAoZ3BNaWJFcnJvclN0cmluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfQ1JJVCwgImZhaWxlZCB0byBhbGxvY2F0ZWQgbWVtb3J5IGZvciBncE1pYkVycm9yU3RyaW5nXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNucHJpbnRmKGdwTWliRXJyb3JTdHJpbmcsIHNpemVvZihncE1pYkVycm9yU3RyaW5nKS0xLCAiRXJyb3IgaW4gcGFyc2luZyBNSUIgbW9kdWxlKHMpOiAlcyAhIFVuYWJsZSB0byBsb2FkIGNvcnJlc3BvbmRpbmcgTUlCKHMpIiwgZ01pYk5hbWVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhpcyBtZW1vcnkgKi8KKyAgICB0cmVlX2hlYWQtPnBhcnNlRXJyb3JTdHJpbmcgPSBncE1pYkVycm9yU3RyaW5nOworCQogICAgIHJldHVybiB0cmVlX2hlYWQ7CiB9CiAKIAogI2lmZGVmIFRFU1QKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgc3RydWN0IHRyZWUgICAgKnRwOwpAQCAtNDkyNSw3ICs1MDc0LDcgQEAKICAgICBpbnQgICAgICAgICAgICAgdG9vX2xvbmcgPSAwOwogICAgIGNoYXIgICAgICAgICAgICp0b2tlbl9zdGFydCA9IHRva2VuOwogCi0gICAgZm9yIChjaCA9IGdldGMoZnApOyBjaCAhPSBFT0Y7IGNoID0gZ2V0YyhmcCkpIHsKKyAgICBmb3IgKGNoID0gbmV0c25tcF9nZXRjKGZwKTsgY2ggIT0gRU9GOyBjaCA9IG5ldHNubXBfZ2V0YyhmcCkpIHsKICAgICAgICAgaWYgKGNoID09ICdccicpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoID09ICdcbicpIHsKQEAgLTUxODUsOCArNTMzNCw4IEBACiAgICAgcmV0dXJuIChmaW5kX3RyZWVfbm9kZShuYW1lLCAtMSkpOwogfQogCi0vKiBGaW5kIG5vZGUgaW4gc3BlY2lmaWMgTUlCIG1vZHVsZQotICAgVXNlZCBieSBQZXJsIG1vZHVsZXMJCSovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocGFyc2VfZmluZF9ub2RlMiwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfRklORF9OT0RFMgogc3RydWN0IHRyZWUgICAgKgogZmluZF9ub2RlMihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptb2R1bGUpCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtNTIwMCw3ICs1MzQ5LDEwIEBACiAgIH0KICAgcmV0dXJuIChmaW5kX3RyZWVfbm9kZShuYW1lLCBtb2RpZCkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfRklORF9OT0RFMiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9NT0RVTEUKKy8qIFVzZWQgaW4gdGhlIHBlcmwgbW9kdWxlICovCiBzdHJ1Y3QgbW9kdWxlICAqCiBmaW5kX21vZHVsZShpbnQgbWlkKQogewpAQCAtNTIxMCwxMCArNTM2Miw5IEBACiAgICAgICAgIGlmIChtcC0+bW9kaWQgPT0gbWlkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChtcCAhPSAwKQotICAgICAgICByZXR1cm4gbXA7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1wOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9NT0RVTEUgKi8KIAogCiBzdGF0aWMgY2hhciAgICAgbGVhdmVfaW5kZW50WzI1Nl07CmRpZmYgLS1naXQgYS9zbm1wbGliL3BrY3MuYyBiL3NubXBsaWIvcGtjcy5jCmluZGV4IGVlNGVkOTIuLjQ4ZTYwMmEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvcGtjcy5jCisrKyBiL3NubXBsaWIvcGtjcy5jCkBAIC03NzQsNCArNzc0LDYgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorI2Vsc2UKK2ludCBwa2NzX3VudXNlZDsJLyogU3VwcHJlc3MgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmcgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9yZWFkX2NvbmZpZy5jIGIvc25tcGxpYi9yZWFkX2NvbmZpZy5jCmluZGV4IDc5NTAzM2IuLjMxNjc2NzQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvcmVhZF9jb25maWcuYworKysgYi9zbm1wbGliL3JlYWRfY29uZmlnLmMKQEAgLTY1LDYgKzY1LDcgQEAKICAqICBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KQEAgLTg0LDExICs4NSw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTEwOSw5ICsxMDYsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTIwLDYgKzExNCwyMyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8ZXJybm8uaD4KIAorI2lmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSBzdHJsZW4oKGRpcmVudCktPmRfbmFtZSkKKyNlbHNlCisjIGRlZmluZSBkaXJlbnQgZGlyZWN0CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSAoZGlyZW50KS0+ZF9uYW1sZW4KKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKICNpZiBIQVZFX0RNQUxMT0NfSAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KICNlbmRpZgpAQCAtMTM1LDEwICsxNDYsMTcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9jb25maWdfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIsIHJlYWRfY29uZmlnX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX2NvbmZpZ19yZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlciwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9jb25maWdfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIsIG5ldHNubXBfdW51c2VkKQorCiBzdGF0aWMgaW50ICAgICAgY29uZmlnX2Vycm9yczsKIAogc3RydWN0IGNvbmZpZ19maWxlcyAqY29uZmlnX2ZpbGVzID0gTlVMTDsKIAorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ19saW5lICoKIGludGVybmFsX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnR5cGVfcGFyYW0sCiAJCQkJIGNvbnN0IGNoYXIgKnRva2VuLApAQCAtMTkyLDggKzIxMCwxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgKCpjdG1wKS0+ZmlsZUhlYWRlciA9IHN0cmR1cCh0eXBlKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIjk6cmVhZF9jb25maWc6dHlwZSIsICJuZXcgdHlwZSAlc1xuIiwgdHlwZSkpOwogICAgIH0KIAorICAgIERFQlVHTVNHVEwoKCI5OnJlYWRfY29uZmlnOnJlZ2lzdGVyX2hhbmRsZXIiLCAicmVnaXN0ZXJpbmcgJXMgJXNcbiIsCisgICAgICAgICAgICAgICAgdHlwZSwgdG9rZW4pKTsKICAgICAvKgogICAgICAqIEZpbmQgcGFyc2VyIHR5cGUgaW4gY3VycmVudCBsaXN0ICAtT1ItICBjcmVhdGUgYSBuZXcKICAgICAgKiBsaW5lIHBhcnNlciBlbnRyeS4KQEAgLTIzOCw2ICsyNTksNyBAQAogCQkJCQkgICAgaGVscCwgUFJFTUlCX0NPTkZJRyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX0NPTkZJR19SRUdJU1RFUl9BUFBfUFJFTkVUU05NUF9NSUJfSEFORExFUgogc3RydWN0IGNvbmZpZ19saW5lICoKIHJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKQEAgLTI0Nyw2ICsyNjksNyBAQAogICAgIHJldHVybiAocmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcgogICAgICAgICAgICAgKE5VTEwsIHRva2VuLCBwYXJzZXIsIHJlbGVhc2VyLCBoZWxwKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX0NPTkZJR19SRUdJU1RFUl9BUFBfUFJFTkVUU05NUF9NSUJfSEFORExFUiAqLwogCiAvKioKICAqIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgY2VydGFpbiB0b2tlbnMgc3BlY2lmaWVkIGluCkBAIC0yOTEsNiArMzE0LDIwIEBACiAJCQkJCSAgICBoZWxwLCBOT1JNQUxfQ09ORklHKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfQ09ORklHX1JFR0lTVEVSX0NPTlNUX0NPTkZJR19IQU5ETEVSCitzdHJ1Y3QgY29uZmlnX2xpbmUgKgorcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLCBjb25zdCBjaGFyICpoZWxwKQoreworICAgIHJldHVybiBpbnRlcm5hbF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQoKikoY29uc3QgY2hhciAqLCBjaGFyICopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIsIHJlbGVhc2VyLAorCQkJCQkgICAgaGVscCwgTk9STUFMX0NPTkZJRyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX0NPTkZJR19SRUdJU1RFUl9DT05TVF9DT05GSUdfSEFORExFUiAqLworCiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgogcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCkBAIC0zOTMsMTQgKzQzMCwxNiBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfQVBQX0NPTkZJR19IQU5ETEVSCiB2b2lkCiB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbikKIHsKICAgICB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIHRva2VuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfQVBQX0NPTkZJR19IQU5ETEVSICovCiAKIHZvaWQKLXVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpCit1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnModm9pZCkKIHsKICAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wLCAqc2F2ZTsKICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmx0bXA7CkBAIC00MzcsOCArNDc2LDggQEAKIH0KICNlbmRpZgogCi1pbnQgICAgICAgICAgICAgbGluZWNvdW50OwotY29uc3QgY2hhciAgICAgKmN1cmZpbGVuYW1lOworc3RhdGljIHVuc2lnbmVkIGludCAgbGluZWNvdW50Oworc3RhdGljIGNvbnN0IGNoYXIgICAqY3VyZmlsZW5hbWU7CiAKIHN0cnVjdCBjb25maWdfbGluZSAqCiByZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnMoY29uc3QgY2hhciAqdHlwZSkKQEAgLTQ1MSwyMiArNDkwLDIzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQKK2ludAogcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGludCB3aGVuKQogewogICAgIHN0cnVjdCBjb25maWdfbGluZSAqY3RtcCA9IHJlYWRfY29uZmlnX2dldF9oYW5kbGVycyh0eXBlKTsKICAgICBpZiAoY3RtcCkKLSAgICAgICAgcmVhZF9jb25maWcoZmlsZW5hbWUsIGN0bXAsIHdoZW4pOworICAgICAgICByZXR1cm4gcmVhZF9jb25maWcoZmlsZW5hbWUsIGN0bXAsIHdoZW4pOwogICAgIGVsc2UKICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwKICAgICAgICAgICAgICAgICAgICAgInJlYWRfY29uZmlnOiBJIGhhdmUgbm8gcmVnaXN0cmF0aW9ucyBmb3IgdHlwZTolcyxmaWxlOiVzXG4iLAogICAgICAgICAgICAgICAgICAgICB0eXBlLCBmaWxlbmFtZSkpOworICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsgICAgIC8qIE5vIGNvbmZpZyBmaWxlcyByZWFkICovCiB9CiAKLXZvaWQKK2ludAogcmVhZF9jb25maWdfd2l0aF90eXBlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0eXBlKQogewotICAgIHJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuKGZpbGVuYW1lLCB0eXBlLCBFSVRIRVJfQ09ORklHKTsKKyAgICByZXR1cm4gcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW4oZmlsZW5hbWUsIHR5cGUsIEVJVEhFUl9DT05GSUcpOwogfQogCiAKQEAgLTQ5MiwxMiArNTMyLDEyIEBACiBydW5fY29uZmlnX2hhbmRsZXIoc3RydWN0IGNvbmZpZ19saW5lICpscHRyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyLCBpbnQgd2hlbikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmW1NUUklOR01BWF07CiAgICAgY2hhciAgICAgICAgICAgKmNwOwogICAgIGxwdHIgPSByZWFkX2NvbmZpZ19maW5kX2hhbmRsZXIobHB0ciwgdG9rZW4pOwogICAgIGlmIChscHRyICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHdoZW4gPT0gRUlUSEVSX0NPTkZJRyB8fCBscHRyLT5jb25maWdfdGltZSA9PSB3aGVuKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLAorICAgICAgICAgICAgY2hhciB0bXBidWZbMV07CisgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6cGFyc2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCBhIHBhcnNlci4gIENhbGxpbmcgaXQ6ICVzIC8gJXNcbiIsIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgY3B0cikpOwogICAgICAgICAgICAgLyoKQEAgLTUxMiwxNyArNTUyLDE4IEBACiAgICAgICAgICAgICAgKiBTdG9tcCBvbiBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBjcCA9ICYoY3B0cltzdHJsZW4oY3B0ciktMV0pOwotICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkgeworICAgICAgICAgICAgd2hpbGUgKChjcCA+IGNwdHIpICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKSB7CiAgICAgICAgICAgICAgICAgKihjcC0tKSA9ICdcMCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoKihscHRyLT5wYXJzZV9saW5lKSkgKHRva2VuLCBjcHRyKTsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBERUJVR01TR1RMKCgiOTpyZWFkX2NvbmZpZzpwYXJzZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGhhbmRsZXIgbm90IHJlZ2lzdGVyZWQgZm9yIHRoaXMgdGltZVxuIiwgdG9rZW4pKTsKICAgICB9IGVsc2UgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRyAmJiAKIAkgICAgICAgIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICAgICAgTkVUU05NUF9EU19MSUJfTk9fVE9LRU5fV0FSTklOR1MpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJVbmtub3duIHRva2VuOiAlcy4iLCB0b2tlbik7Ci0gICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgY29uZmlnX3B3YXJuKHRtcGJ1Zik7CisJbmV0c25tcF9jb25maWdfd2FybigiVW5rbm93biB0b2tlbjogJXMuIiwgdG9rZW4pOwogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC01NDMsNyArNTg0LDcgQEAKIGludAogc25tcF9jb25maWdfd2hlbihjaGFyICpsaW5lLCBpbnQgd2hlbikKIHsKLSAgICBjaGFyICAgICAgICAgICAqY3B0ciwgYnVmW1NUUklOR01BWF0sIHRtcGJ1ZltTVFJJTkdNQVhdOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCBidWZbU1RSSU5HTUFYXTsKICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmxwdHIgPSBOVUxMOwogICAgIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXAgPSBjb25maWdfZmlsZXM7CiAgICAgY2hhciAgICAgICAgICAgKnN0OwpAQCAtNTU2LDI4ICs1OTcsMTkgQEAKICAgICBzdHJsY3B5KGJ1ZiwgbGluZSwgU1RSSU5HTUFYKTsKICAgICBjcHRyID0gc3RydG9rX3IoYnVmLCBTTk1QX0NPTkZJR19ERUxJTUVURVJTLCAmc3QpOwogICAgIGlmICghY3B0cikgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiV3JvbmcgZm9ybWF0OiAlcyIsIGxpbmUpOwotICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgICAgbmV0c25tcF9jb25maWdfd2FybigiV3JvbmcgZm9ybWF0OiAlcyIsIGxpbmUpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogICAgIGlmIChjcHRyWzBdID09ICdbJykgewogICAgICAgICBpZiAoY3B0cltzdHJsZW4oY3B0cikgLSAxXSAhPSAnXScpIHsKLSAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICJubyBtYXRjaGluZyAnXScgZm9yIHR5cGUgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgY3B0ciArIDEpOwotICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibm8gbWF0Y2hpbmcgJ10nIGZvciB0eXBlICVzLiIsIGNwdHIgKyAxKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgfQogICAgICAgICBjcHRyW3N0cmxlbihjcHRyKSAtIDFdID0gJ1wwJzsKICAgICAgICAgbHB0ciA9IHJlYWRfY29uZmlnX2dldF9oYW5kbGVycyhjcHRyICsgMSk7CiAgICAgICAgIGlmIChscHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwgIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgIk5vIGhhbmRsZXJzIHJlZ2VzdGVyZWQgZm9yIHR5cGUgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgY3B0ciArIDEpOwotICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTm8gaGFuZGxlcnMgcmVnZXN0ZXJlZCBmb3IgdHlwZSAlcy4iLAorCQkJCSBjcHRyICsgMSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIH0KICAgICAgICAgY3B0ciA9IHN0cnRva19yKE5VTEwsIFNOTVBfQ09ORklHX0RFTElNRVRFUlMsICZzdCk7CkBAIC01OTEsOSArNjIzLDcgQEAKICAgICB9CiAgICAgaWYgKGxwdHIgPT0gTlVMTCAmJiBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJCSAgTkVUU05NUF9EU19MSUJfTk9fVE9LRU5fV0FSTklOR1MpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJVbmtub3duIHRva2VuOiAlcy4iLCBjcHRyKTsKLSAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICBjb25maWdfcHdhcm4odG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ193YXJuKCJVbmtub3duIHRva2VuOiAlcy4iLCBjcHRyKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIApAQCAtNjMyLDggKzY2MiwxMCBAQAogICAgICAgICBtZW0gPSAmKCgqbWVtKS0+bmV4dCk7CiAKICAgICAqbWVtID0gU05NUF9NQUxMT0NfU1RSVUNUKHJlYWRfY29uZmlnX21lbW9yeSk7Ci0gICAgaWYgKGxpbmUpCi0gICAgICAgICgqbWVtKS0+bGluZSA9IHN0cmR1cChsaW5lKTsKKyAgICBpZiAoKm1lbSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChsaW5lKQorICAgICAgICAgICAgKCptZW0pLT5saW5lID0gc3RyZHVwKGxpbmUpOworICAgIH0KIH0KIAogdm9pZApAQCAtNjYxLDcgKzY5Myw3IEBACiAgICAgbWVtID0gKm1lbXA7CiAKICAgICB3aGlsZSAobWVtKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICJwcm9jZXNzaW5nIG1lbW9yeTogJXNcbiIsIG1lbS0+bGluZSkpOworICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6bWVtIiwgInByb2Nlc3NpbmcgbWVtb3J5OiAlc1xuIiwgbWVtLT5saW5lKSk7CiAgICAgICAgIHNubXBfY29uZmlnX3doZW4obWVtLT5saW5lLCB3aGVuKTsKICAgICAgICAgbWVtID0gbWVtLT5uZXh0OwogICAgIH0KQEAgLTcxMSwyMCArNzQzLDI5IEBACiAgKgogICogRm9yIGVhY2ggbWF0Y2gsIGNoZWNrIHRoYXQgPHdoZW4+IGlzIHRoZSBkZXNpZ25hdGVkIHRpbWUgZm9yIHRoZQogICogPGxpbmVfaGFuZGxlcj4gZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGxpbmUuCisgKgorICogUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1MgaWYgdGhlIGZpbGUgaXMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4KKyAqIFJldHVybnMgU05NUEVSUl9HRU5FUlIgIGlmIGl0IGNhbm5vdC4KKyAqICAgIE5vdGUgdGhhdCBpbmRpdmlkdWFsIGNvbmZpZyB0b2tlbiBlcnJvcnMgZG8gbm90IHRyaWdnZXIgU05NUEVSUl9HRU5FUlIKKyAqICAgIEl0J3Mgb25seSBpZiB0aGUgd2hvbGUgZmlsZSBjYW5ub3QgYmUgcHJvY2Vzc2VkIGZvciBzb21lIHJlYXNvbi4KICAqLwotdm9pZAoraW50CiByZWFkX2NvbmZpZyhjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAgICAgICAgIHN0cnVjdCBjb25maWdfbGluZSAqbGluZV9oYW5kbGVyLCBpbnQgd2hlbikKIHsKKyAgICBzdGF0aWMgaW50ICAgICAgZGVwdGggPSAwOworICAgIHN0YXRpYyBpbnQgICAgICBmaWxlcyA9IDA7CisKKyAgICBjb25zdCBjaGFyICogY29uc3QgcHJldl9maWxlbmFtZSA9IGN1cmZpbGVuYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBwcmV2X2xpbmVjb3VudCA9IGxpbmVjb3VudDsKIAogICAgIEZJTEUgICAgICAgICAgICppZmlsZTsKLSAgICBjaGFyICAgICAgICAgICAgbGluZVtTVFJJTkdNQVhdLCB0b2tlbltTVFJJTkdNQVhdLCB0bXBidWZbU1RSSU5HTUFYXTsKLSAgICBjaGFyICAgICAgICAgICAqY3B0cjsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLSAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmxwdHI7CisgICAgY2hhciAgICAgICAgICAgKmxpbmUgPSBOVUxMOyAgLyogY3VycmVudCBsaW5lIGJ1ZmZlciAqLworICAgIHNpemVfdCAgICAgICAgICBsaW5lc2l6ZSA9IDA7IC8qIGFsbG9jYXRlZCBzaXplIG9mIGxpbmUgKi8KIAotICAgIGxpbmVjb3VudCA9IDA7Ci0gICAgY3VyZmlsZW5hbWUgPSBmaWxlbmFtZTsKKyAgICAvKiByZXNldCBmaWxlIGNvdW50ZXIgd2hlbiByZWN1cnNpb24gZGVwdGggaXMgMCAqLworICAgIGlmIChkZXB0aCA9PSAwKQorICAgICAgICBmaWxlcyA9IDA7CiAKICAgICBpZiAoKGlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpIHsKICNpZmRlZiBFTk9FTlQKQEAgLTczOSw1MSArNzgwLDkzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKICAgICAgICAgfSBlbHNlCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVBQ0NFUyAqLwotI2lmIGRlZmluZWQoRU5PRU5UKSB8fCBkZWZpbmVkKEVBQ0NFUykKICAgICAgICAgewogICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKGZpbGVuYW1lKTsKICAgICAgICAgfQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkKEVOT0VOVCkgfHwgZGVmaW5lZChFQUNDRVMpICovCi0gICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoZmlsZW5hbWUpOwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTk9FTlQgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICJSZWFkaW5nIGNvbmZpZ3VyYXRpb24gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAKLSAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpZmlsZSkgIT0gTlVMTCkgewotICAgICAgICBscHRyID0gbGluZV9oYW5kbGVyOwotICAgICAgICBsaW5lY291bnQrKzsKLSAgICAgICAgY3B0ciA9IGxpbmU7Ci0gICAgICAgIGkgPSBzdHJsZW4obGluZSkgLSAxOwotICAgICAgICBpZiAobGluZVtpXSA9PSAnXG4nKQotICAgICAgICAgICAgbGluZVtpXSA9IDA7CisjZGVmaW5lIENPTkZJR19NQVhfRklMRVMgNDA5NgorICAgIGlmIChmaWxlcyA+IENPTkZJR19NQVhfRklMRVMpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm1heGltdW0gY29uZiBmaWxlIGNvdW50ICglZCkgZXhjZWVkZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19NQVhfRklMRVMpOworCWZjbG9zZShpZmlsZSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisjZGVmaW5lIENPTkZJR19NQVhfUkVDVVJTRV9ERVBUSCAxNgorICAgIGlmIChkZXB0aCA+IENPTkZJR19NQVhfUkVDVVJTRV9ERVBUSCkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibmVzdGVkIGluY2x1ZGUgZGVwdGggPiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHX01BWF9SRUNVUlNFX0RFUFRIKTsKKwlmY2xvc2UoaWZpbGUpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgbGluZWNvdW50ID0gMDsKKyAgICBjdXJmaWxlbmFtZSA9IGZpbGVuYW1lOworCisgICAgKytmaWxlczsKKyAgICArK2RlcHRoOworCisgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmZpbGUiLCAiUmVhZGluZyBjb25maWd1cmF0aW9uICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHdoZW4pKTsKKworICAgIHdoaWxlIChpZmlsZSkgeworICAgICAgICBzaXplX3QgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOyAvKiBzdHJsZW4gb2YgdGhlIGN1cnJlbnQgbGluZSAqLworICAgICAgICBjaGFyICAgICAgICAgICAgICAgKmNwdHI7CisgICAgICAgIHN0cnVjdCBjb25maWdfbGluZSAqbHB0ciA9IGxpbmVfaGFuZGxlcjsKKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAobGluZXNpemUgPD0gbGluZWxlbiArIDEpIHsKKyAgICAgICAgICAgICAgICBjaGFyICp0bXAgPSByZWFsbG9jKGxpbmUsIGxpbmVzaXplICsgMjU2KTsKKyAgICAgICAgICAgICAgICBpZiAodG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIGxpbmVzaXplICs9IDI1NjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgICAgIGZyZWUobGluZSk7CisgICAgICAgICAgICAgICAgICAgIGZjbG9zZShpZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmdldHMobGluZSArIGxpbmVsZW4sIGxpbmVzaXplIC0gbGluZWxlbiwgaWZpbGUpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBsaW5lW2xpbmVsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBmY2xvc2UgKGlmaWxlKTsKKyAgICAgICAgICAgICAgICBpZmlsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVsZW4gKz0gc3RybGVuKGxpbmUgKyBsaW5lbGVuKTsKKworICAgICAgICAgICAgaWYgKGxpbmVbbGluZWxlbiAtIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgICAgbGluZVtsaW5lbGVuIC0gMV0gPSAnXDAnOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICsrbGluZWNvdW50OworICAgICAgICBERUJVR01TR1RMKCgiOTpyZWFkX2NvbmZpZzpsaW5lIiwgIiVzOiVkIGV4YW1pbmluZzogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lY291bnQsIGxpbmUpKTsKICAgICAgICAgLyoKICAgICAgICAgICogY2hlY2sgYmxhbmsgbGluZSBvciAjIGNvbW1lbnQgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoKGNwdHIgPSBza2lwX3doaXRlKGNwdHIpKSkgeworICAgICAgICBpZiAoKGNwdHIgPSBza2lwX3doaXRlKGxpbmUpKSkgeworICAgICAgICAgICAgY2hhciB0b2tlbltTVFJJTkdNQVhdOworCiAgICAgICAgICAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCB0b2tlbiwgc2l6ZW9mKHRva2VuKSk7CiAgICAgICAgICAgICBpZiAodG9rZW5bMF0gPT0gJ1snKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuW3N0cmxlbih0b2tlbikgLSAxXSAhPSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbWF0Y2hpbmcgJ10nIGZvciB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRva2VuWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibm8gbWF0Y2hpbmcgJ10nIGZvciB0eXBlICVzLiIsCisJCQkJCSAmdG9rZW5bMV0pOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdG9rZW5bc3RybGVuKHRva2VuKSAtIDFdID0gJ1wwJzsKICAgICAgICAgICAgICAgICBscHRyID0gcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKCZ0b2tlblsxXSk7CiAgICAgICAgICAgICAgICAgaWYgKGxwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBoYW5kbGVycyByZWdlc3RlcmVkIGZvciB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRva2VuWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTm8gaGFuZGxlcnMgcmVnZXN0ZXJlZCBmb3IgdHlwZSAlcy4iLAorCQkJCQkgJnRva2VuWzFdKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2l0Y2hpbmcgdG8gbmV3IGNvbnRleHQ6ICVzJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjcHRyKSA/ICIodGhpcyBsaW5lIG9ubHkpICIgOiAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRva2VuWzFdKSk7CkBAIC03OTksMjMgKzg4MiwxMDcgQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIHRva2VuLCBzaXplb2YodG9rZW4pKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCh0b2tlblswXSA9PSAnaScpICYmIChzdHJuY2FzZWNtcCh0b2tlbiwiaW5jbHVkZSIsIDcgKT09MCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIHRva2VuLCAiaW5jbHVkZSIgKT09MCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHICYmIAorCSAgICAgICAgICAgICAgICAhbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorCQkJCSAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUykpIHsKKwkgICAgICAgICAgICAgICAgbmV0c25tcF9jb25maWdfd2FybigiQW1iaWd1b3VzIHRva2VuICclcycgLSB1c2UgJ2luY2x1ZGVTZWFyY2gnIChvciAnaW5jbHVkZUZpbGUnKSBpbnN0ZWFkLiIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0b2tlbiwgImluY2x1ZGVkaXIiICk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgRElSICpkOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICplbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgZm5hbWVbU05NUF9NQVhQQVRIXTsKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgbGVuOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjcHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcpCisJCSAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJCbGFuayBsaW5lIGZvbGxvd2luZyAlcyB0b2tlbi4iLCB0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKGQ9b3BlbmRpcihjcHRyKSkgPT0gTlVMTCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gaW5jbHVkZSBkaXIgJyVzJy4iLCBjcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoZW50cnkgPSByZWFkZGlyKCBkICkpICE9IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVudHJ5LT5kX25hbWVbMF0gIT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gTkFNTEVOKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbiA+IDUpICYmIChzdHJjbXAoJihlbnRyeS0+ZF9uYW1lW2xlbi01XSksIi5jb25mIikgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYoZm5hbWUsIFNOTVBfTUFYUEFUSCwgIiVzLyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ciwgZW50cnktPmRfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKXJlYWRfY29uZmlnKGZuYW1lLCBsaW5lX2hhbmRsZXIsIHdoZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcihkKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggdG9rZW4sICJpbmNsdWRlZmlsZSIgKT09MCkgeworICAgICAgICAgICAgICAgICAgICBjaGFyICBmbmFtZVtTTk1QX01BWFBBVEhdLCAqY3A7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNwdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRykKKwkJICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkJsYW5rIGxpbmUgZm9sbG93aW5nICVzIHRva2VuLiIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggY3B0clswXSA9PSAnLycgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJsY3B5KGZuYW1lLCBjcHRyLCBTTk1QX01BWFBBVEgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RybGNweShmbmFtZSwgZmlsZW5hbWUsIFNOTVBfTUFYUEFUSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjcCA9IHN0cnJjaHIoZm5hbWUsICcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCsrY3ApID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxjYXQoZm5hbWUsIGNwdHIsIFNOTVBfTUFYUEFUSCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY29uZmlnKGZuYW1lLCBsaW5lX2hhbmRsZXIsIHdoZW4pICE9CisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX1NVQ0NFU1MgJiYgd2hlbiAhPSBQUkVNSUJfQ09ORklHKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkluY2x1ZGVkIGZpbGUgJyVzJyBub3QgZm91bmQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggdG9rZW4sICJpbmNsdWRlc2VhcmNoIiApPT0wKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25maWdfZmlsZXMgY3RtcDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgcmV0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChjcHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcpCisJCSAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJCbGFuayBsaW5lIGZvbGxvd2luZyAlcyB0b2tlbi4iLCB0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oY3B0cik7CisgICAgICAgICAgICAgICAgICAgIGN0bXAuZmlsZUhlYWRlciA9IGNwdHI7CisgICAgICAgICAgICAgICAgICAgIGN0bXAuc3RhcnQgPSBsaW5lX2hhbmRsZXI7CisgICAgICAgICAgICAgICAgICAgIGN0bXAubmV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID4gNSkgJiYgKHN0cmNtcCgmY3B0cltsZW4tNV0sIi5jb25mIikgPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgIGNwdHJbbGVuLTVdID0gMDsgLyogY2hvcCBvZmYgLmNvbmYgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZSh3aGVuLCZjdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPiA1KSAmJiAoY3B0cltsZW4tNV0gPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgIGNwdHJbbGVuLTVdID0gJy4nOyAvKiByZXN0b3JlIC5jb25mICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoIHJldCAhPSBTTk1QRVJSX1NVQ0NFU1MgKSAmJiAod2hlbiAhPSBQUkVNSUJfQ09ORklHKSkKKwkJICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiSW5jbHVkZWQgY29uZmlnICclcycgbm90IGZvdW5kLiIsIGNwdHIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBscHRyID0gbGluZV9oYW5kbGVyOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbHB0ciA9IGxpbmVfaGFuZGxlcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjcHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJsYW5rIGxpbmUgZm9sbG93aW5nICVzIHRva2VuLiIsIHRva2VuKTsKLSAgICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCQluZXRzbm1wX2NvbmZpZ19lcnJvcigiQmxhbmsgbGluZSBmb2xsb3dpbmcgJXMgdG9rZW4uIiwgdG9rZW4pOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiJXM6JWQgZXhhbWluaW5nOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6bGluZSIsICIlczolZCBleGFtaW5pbmc6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lY291bnQsIGxpbmUpKTsKICAgICAgICAgICAgICAgICBydW5fY29uZmlnX2hhbmRsZXIobHB0ciwgdG9rZW4sIGNwdHIsIHdoZW4pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGZjbG9zZShpZmlsZSk7Ci0gICAgcmV0dXJuOworICAgIGZyZWUobGluZSk7CisgICAgbGluZWNvdW50ID0gcHJldl9saW5lY291bnQ7CisgICAgY3VyZmlsZW5hbWUgPSBwcmV2X2ZpbGVuYW1lOworICAgIC0tZGVwdGg7CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgcmVhZF9jb25maWcoKSAqLwogCkBAIC04MzMsMTUgKzEwMDAsMjEgQEAKICAgICAgICAgICAgICAgICAoKihsdG1wLT5mcmVlX2Z1bmMpKSAoKTsKIH0KIAotdm9pZAorLyoKKyAqIFJldHVybiBTTk1QRVJSX1NVQ0NFU1MgaWYgYW55IGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiBSZXR1cm4gU05NUEVSUl9HRU5FUlIgaWYgX25vXyBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogICAgV2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IGFuIGVycm9yIGlzIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKi8KK2ludAogcmVhZF9jb25maWdzX29wdGlvbmFsKGNvbnN0IGNoYXIgKm9wdGlvbmFsX2NvbmZpZywgaW50IHdoZW4pCiB7CiAgICAgY2hhciAqbmV3cCwgKmNwLCAqc3QgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9HRU5FUlI7CiAgICAgY2hhciAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKIAogICAgIGlmICgoTlVMTCA9PSBvcHRpb25hbF9jb25maWcpIHx8IChOVUxMID09IHR5cGUpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiByZXQ7CiAKICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdzX29wdGlvbmFsIiwKICAgICAgICAgICAgICAgICAicmVhZGluZyBvcHRpb25hbCBjb25maWd1cmF0aW9uIHRva2VucyBmb3IgJXNcbiIsIHR5cGUpKTsKQEAgLTg1NSwxNCArMTAyOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIk9wdGlvbmFsIEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0LlxuIiwgY3ApKTsKICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihjcCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOm9wdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhZGluZyBvcHRpb25hbCBjb25maWcgZmlsZTogXCIlc1wiXG4iLCBjcCkpOwotICAgICAgICAgICAgcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW4oY3AsIHR5cGUsIHdoZW4pOworICAgICAgICAgICAgaWYgKCByZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlbihjcCwgdHlwZSwgd2hlbikgPT0gU05NUEVSUl9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgIH0KICAgICAgICAgY3AgPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzdCk7CiAgICAgfQogICAgIGZyZWUobmV3cCk7Ci0gICAgCisgICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZApAQCAtODcxLDIwICsxMDQ1LDIzIEBACiAgICAgY2hhciAqb3B0aW9uYWxfY29uZmlnID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9PUFRJT05BTENPTkZJRyk7CiAKKyAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfUFJFX1JFQURfQ09ORklHLCBOVUxMKTsKKwogICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICJyZWFkaW5nIG5vcm1hbCBjb25maWd1cmF0aW9uIHRva2Vuc1xuIikpOwogCiAgICAgaWYgKChOVUxMICE9IG9wdGlvbmFsX2NvbmZpZykgJiYgKCpvcHRpb25hbF9jb25maWcgPT0gJy0nKSkgewotICAgICAgICByZWFkX2NvbmZpZ3Nfb3B0aW9uYWwoKytvcHRpb25hbF9jb25maWcsIE5PUk1BTF9DT05GSUcpOworICAgICAgICAodm9pZClyZWFkX2NvbmZpZ3Nfb3B0aW9uYWwoKytvcHRpb25hbF9jb25maWcsIE5PUk1BTF9DT05GSUcpOwogICAgICAgICBvcHRpb25hbF9jb25maWcgPSBOVUxMOyAvKiBjbGVhciwgc28gd2UgZG9uJ3QgcmVhZCB0aGVtIHR3aWNlICovCiAgICAgfQogCi0gICAgcmVhZF9jb25maWdfZmlsZXMoTk9STUFMX0NPTkZJRyk7CisgICAgKHZvaWQpcmVhZF9jb25maWdfZmlsZXMoTk9STUFMX0NPTkZJRyk7CiAKICAgICAvKgogICAgICAqIGRvIHRoaXMgZXZlbiB3aGVuIHRoZSBub3JtYWwgYWJvdmUgd2Fzbid0IGRvbmUgCiAgICAgICovCiAgICAgaWYgKE5VTEwgIT0gb3B0aW9uYWxfY29uZmlnKQotICAgICAgICByZWFkX2NvbmZpZ3Nfb3B0aW9uYWwob3B0aW9uYWxfY29uZmlnLCBOT1JNQUxfQ09ORklHKTsKKyAgICAgICAgKHZvaWQpcmVhZF9jb25maWdzX29wdGlvbmFsKG9wdGlvbmFsX2NvbmZpZywgTk9STUFMX0NPTkZJRyk7CiAKICAgICBuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yaWVzX3doZW4oTk9STUFMX0NPTkZJRywgMSk7CiAKQEAgLTkwMCwxNyArMTA3NywyMCBAQAogICAgIGNoYXIgKm9wdGlvbmFsX2NvbmZpZyA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCQkgICAgICAgTkVUU05NUF9EU19MSUJfT1BUSU9OQUxDT05GSUcpOwogCisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1BSRV9QUkVNSUJfUkVBRF9DT05GSUcsIE5VTEwpOworCiAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgInJlYWRpbmcgcHJlbWliIGNvbmZpZ3VyYXRpb24gdG9rZW5zXG4iKSk7CiAKICAgICBpZiAoKE5VTEwgIT0gb3B0aW9uYWxfY29uZmlnKSAmJiAoKm9wdGlvbmFsX2NvbmZpZyA9PSAnLScpKSB7Ci0gICAgICAgIHJlYWRfY29uZmlnc19vcHRpb25hbCgrK29wdGlvbmFsX2NvbmZpZywgUFJFTUlCX0NPTkZJRyk7CisgICAgICAgICh2b2lkKXJlYWRfY29uZmlnc19vcHRpb25hbCgrK29wdGlvbmFsX2NvbmZpZywgUFJFTUlCX0NPTkZJRyk7CiAgICAgICAgIG9wdGlvbmFsX2NvbmZpZyA9IE5VTEw7IC8qIGNsZWFyLCBzbyB3ZSBkb24ndCByZWFkIHRoZW0gdHdpY2UgKi8KICAgICB9CiAKLSAgICByZWFkX2NvbmZpZ19maWxlcyhQUkVNSUJfQ09ORklHKTsKKyAgICAodm9pZClyZWFkX2NvbmZpZ19maWxlcyhQUkVNSUJfQ09ORklHKTsKIAogICAgIGlmIChOVUxMICE9IG9wdGlvbmFsX2NvbmZpZykKLSAgICAgICAgcmVhZF9jb25maWdzX29wdGlvbmFsKG9wdGlvbmFsX2NvbmZpZywgUFJFTUlCX0NPTkZJRyk7CisgICAgICAgICh2b2lkKXJlYWRfY29uZmlnc19vcHRpb25hbChvcHRpb25hbF9jb25maWcsIFBSRU1JQl9DT05GSUcpOwogCiAgICAgbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcmllc193aGVuKFBSRU1JQl9DT05GSUcsIDApOwogCkBAIC05NDgsNyArMTEyOCw3IEBACiAgKiBXZSBhbHdheXMgcmV0cmlldmUgaXQgbmV3LCBzaW5jZSB3ZSBoYXZlIHRvIGRvIGl0IGFueXdheSBpZiBpdCBpcyBqdXN0IHNldC4KICAqLwogY29uc3QgY2hhciAgICAgKgotZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KCkKK2dldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeSh2b2lkKQogewogICAgIGNoYXIgICAgICAgICAgICBkZWZhdWx0UGF0aFtTUFJJTlRfTUFYX0xFTl07CiAgICAgY2hhciAgICAgICAgICAgKmhvbWVwYXRoOwpAQCAtOTk2LDcgKzExNzYsNyBAQAogICogV2UgYWx3YXlzIHJldHJpZXZlIGl0IG5ldywgc2luY2Ugd2UgaGF2ZSB0byBkbyBpdCBhbnl3YXkgaWYgaXQgaXMganVzdCBzZXQuCiAgKi8KIGNvbnN0IGNoYXIgICAgICoKLWdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpCitnZXRfcGVyc2lzdGVudF9kaXJlY3Rvcnkodm9pZCkKIHsKICAgICBpZiAoTlVMTCA9PSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICAgICBORVRTTk1QX0RTX0xJQl9QRVJTSVNURU5UX0RJUikpIHsKQEAgLTEwMzYsNyArMTIxNiw3IEBACiAgKiBXZSBhbHdheXMgcmV0cmlldmUgaXQgbmV3LCBzaW5jZSB3ZSBoYXZlIHRvIGRvIGl0IGFueXdheSBpZiBpdCBpcyBqdXN0IHNldC4KICAqLwogY29uc3QgY2hhciAgICAgKgotZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuKCkKK2dldF90ZW1wX2ZpbGVfcGF0dGVybih2b2lkKQogewogICAgIGlmIChOVUxMID09IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgICAgIE5FVFNOTVBfRFNfTElCX1RFTVBfRklMRV9QQVRURVJOKSkgewpAQCAtMTA0OCw4ICsxMjI4LDEyIEBACiAKIC8qKgogICogdXRpbGl0eSByb3V0aW5lIGZvciByZWFkX2NvbmZpZ19maWxlcworICoKKyAqIFJldHVybiBTTk1QRVJSX1NVQ0NFU1MgaWYgYW55IGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiBSZXR1cm4gU05NUEVSUl9HRU5FUlIgaWYgX25vXyBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogICAgV2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IGFuIGVycm9yIGlzIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGVuLCBjb25zdCBjaGFyICpwZXJzcGF0aCwgY29uc3QgY2hhciAqcGVyc2ZpbGUpCiB7CkBAIC0xMDU3LDEzICsxMjQxLDE0IEBACiAgICAgY2hhciAgICAgICAgICAgIGNvbmZpZ2ZpbGVbMzAwXTsKICAgICBjaGFyICAgICAgICAgICAqY3B0cjEsICpjcHRyMiwgKmVudmNvbmZwYXRoOwogICAgIHN0cnVjdCBzdGF0ICAgICBzdGF0YnVmOworICAgIGludCAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX0dFTkVSUjsKIAogICAgIGlmICgoTlVMTCA9PSBwYXRoKSB8fCAoTlVMTCA9PSBjdG1wKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAKICAgICBlbnZjb25mcGF0aCA9IHN0cmR1cChwYXRoKTsKIAotICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICIgY29uZmlnIHBhdGggdXNlZCBmb3IgJXM6JXMgKHBlcnNpc3RlbnQgcGF0aDolcylcbiIsCisgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOnBhdGgiLCAiIGNvbmZpZyBwYXRoIHVzZWQgZm9yICVzOiVzIChwZXJzaXN0ZW50IHBhdGg6JXMpXG4iLAogICAgICAgICAgICAgICAgIGN0bXAtPmZpbGVIZWFkZXIsIGVudmNvbmZwYXRoLCBwZXJzcGF0aCkpOwogICAgIGNwdHIxID0gY3B0cjIgPSBlbnZjb25mcGF0aDsKICAgICBkb25lID0gMDsKQEAgLTEwNzUsMTIgKzEyNjAsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgKmNwdHIxID0gMDsKIAotICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiIGNvbmZpZyBkaXI6ICVzXG4iLCBjcHRyMiApKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmRpciIsICIgY29uZmlnIGRpcjogJXNcbiIsIGNwdHIyICkpOwogICAgICAgICBpZiAoc3RhdChjcHRyMiwgJnN0YXRidWYpICE9IDApIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBEaXJlY3Rvcnkgbm90IHRoZXJlLCBjb250aW51ZSAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIiBEaXJlY3Rvcnkgbm90IHByZXNlbnQ6ICVzXG4iLCBjcHRyMiApKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpkaXIiLCAiIERpcmVjdG9yeSBub3QgcHJlc2VudDogJXNcbiIsIGNwdHIyICkpOwogICAgICAgICAgICAgY3B0cjIgPSArK2NwdHIxOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTEwODksMTQgKzEyNzQsMTQgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBOb3QgYSBkaXJlY3RvcnksIGNvbnRpbnVlIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiIE5vdCBhIGRpcmVjdG9yeTogJXNcbiIsIGNwdHIyICkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmRpciIsICIgTm90IGEgZGlyZWN0b3J5OiAlc1xuIiwgY3B0cjIgKSk7CiAgICAgICAgICAgICBjcHRyMiA9ICsrY3B0cjE7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgLyoKLSAgICAgICAgICogZm9yIHByb3BlciBwZXJzaXN0ZW50IHN0b3JhZ2UgcmV0cml2YWwsIHdlIG5lZWQgdG8gcmVhZCBvbGQgYmFja3VwCisgICAgICAgICAqIGZvciBwcm9wZXIgcGVyc2lzdGVudCBzdG9yYWdlIHJldHJpZXZhbCwgd2UgbmVlZCB0byByZWFkIG9sZCBiYWNrdXAKICAgICAgICAgICogY29waWVzIG9mIHRoZSBwcmV2aW91cyBzdG9yYWdlIGZpbGVzLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGluCiAgICAgICAgICAqIHF1ZXN0aW9uIGhhcyBkaWVkIHdpdGhvdXQgdGhlIHByb3BlciBjYWxsIHRvIHNubXBfY2xlYW5fcGVyc2lzdGVudCwKICAgICAgICAgICogdGhlbiB3ZSByZWFkIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB3ZSBjYW4sIHN0YXJ0aW5nIHdpdGgKQEAgLTExMDUsNiArMTI5MCw3IEBACiAgICAgICAgIGlmIChzdHJuY21wKGNwdHIyLCBwZXJzcGF0aCwgc3RybGVuKHBlcnNwYXRoKSkgPT0gMCB8fAogICAgICAgICAgICAgKHBlcnNmaWxlICE9IE5VTEwgJiYKICAgICAgICAgICAgICBzdHJuY21wKGNwdHIyLCBwZXJzZmlsZSwgc3RybGVuKHBlcnNmaWxlKSkgPT0gMCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpwZXJzaXN0IiwgIiBwZXJzaXN0IGRpcjogJXNcbiIsIGNwdHIyICkpOwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGxpbWl0IHRoaXMgdG8gdGhlIGtub3duIHN0b3JhZ2UgZGlyZWN0b3J5IG9ubHkgCiAgICAgICAgICAgICAgKi8KQEAgLTExMjUsMTggKzEzMTEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnX2ZpbGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9sZCBjb25maWcgZmlsZSBmb3VuZDogJXMsIHBhcnNpbmdcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ2ZpbGUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pOworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pID09IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc25wcmludGYoY29uZmlnZmlsZSwgc2l6ZW9mKGNvbmZpZ2ZpbGUpLAogICAgICAgICAgICAgICAgICAiJXMvJXMuY29uZiIsIGNwdHIyLCBjdG1wLT5maWxlSGVhZGVyKTsKICAgICAgICAgY29uZmlnZmlsZVsgc2l6ZW9mKGNvbmZpZ2ZpbGUpLTEgXSA9IDA7Ci0gICAgICAgIHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKTsKKyAgICAgICAgaWYgKHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKSA9PSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgIHNucHJpbnRmKGNvbmZpZ2ZpbGUsIHNpemVvZihjb25maWdmaWxlKSwKICAgICAgICAgICAgICAgICAgIiVzLyVzLmxvY2FsLmNvbmYiLCBjcHRyMiwgY3RtcC0+ZmlsZUhlYWRlcik7CiAgICAgICAgIGNvbmZpZ2ZpbGVbIHNpemVvZihjb25maWdmaWxlKS0xIF0gPSAwOwotICAgICAgICByZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbik7CisgICAgICAgIGlmIChyZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbikgPT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogCiAgICAgICAgIGlmKGRvbmUpCiAgICAgICAgICAgICBicmVhazsKQEAgLTExNDQsNiArMTMzMyw3IEBACiAgICAgICAgIGNwdHIyID0gKytjcHRyMTsKICAgICB9CiAgICAgU05NUF9GUkVFKGVudmNvbmZwYXRoKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgpAQCAtMTE3NCwyMyArMTM2NCwyMyBAQAogICoKICAqCiAgKiBFWElUcyBpZiBhbnkgJ2NvbmZpZ19lcnJvcnMnIGFyZSBsb2dnZWQgd2hpbGUgcGFyc2luZyBjb25maWcgZmlsZSBsaW5lcy4KKyAqCisgKiBSZXR1cm4gU05NUEVSUl9TVUNDRVNTIGlmIGFueSBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogUmV0dXJuIFNOTVBFUlJfR0VORVJSIGlmIF9ub18gY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqICAgIFdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciBpcyBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbgogICovCi12b2lkCi1yZWFkX2NvbmZpZ19maWxlcyhpbnQgd2hlbikKK2ludAorcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZShpbnQgd2hlbiwgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCkKIHsKICAgICBjb25zdCBjaGFyICAgICAqY29uZnBhdGgsICpwZXJzZmlsZSwgKmVudmNvbmZwYXRoOwogICAgIGNoYXIgICAgICAgICAgICpwZXJzcGF0aDsKLSAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wID0gY29uZmlnX2ZpbGVzOworICAgIGludCAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX0dFTkVSUjsKIAogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ET05UX1BFUlNJU1RfU1RBVEUpCi0gICAgIHx8IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfQ09ORklHX0xPQUQpKSByZXR1cm47Ci0KLSAgICBjb25maWdfZXJyb3JzID0gMDsKLQotICAgIGlmICh3aGVuID09IFBSRU1JQl9DT05GSUcpCi0gICAgICAgIGZyZWVfY29uZmlnKCk7CisgICAgICAgIHx8IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfQ09ORklHX0xPQUQpCisgICAgICAgIHx8IChOVUxMID09IGN0bXApKSByZXR1cm4gcmV0OwogCiAgICAgLyoKICAgICAgKiB0aGVzZSBzaG91bGRuJ3QgY2hhbmdlCkBAIC0xMTk5LDEwICsxMzg5LDYgQEAKICAgICBwZXJzZmlsZSA9IG5ldHNubXBfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIpOwogICAgIGVudmNvbmZwYXRoID0gbmV0c25tcF9nZXRlbnYoIlNOTVBDT05GUEFUSCIpOwogCi0gICAgLyoKLSAgICAgKiByZWFkIGFsbCBjb25maWcgZmlsZSB0eXBlcyAKLSAgICAgKi8KLSAgICBmb3IgKDsgY3RtcCAhPSBOVUxMOyBjdG1wID0gY3RtcC0+bmV4dCkgewogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHJlYWQgdGhlIGNvbmZpZyBmaWxlcy4gc3RyZHVwKCkgdGhlIHJlc3VsdCBvZgpAQCAtMTIxNiwyNyArMTQwMiw1NiBAQAogICAgICAgICAgICAgICogcGVyc2lzdGVudCBwYXRoIGNhbiBjaGFuZ2UgdmlhIGNvbmYgZmlsZS4gVGhlbiBnZXQgdGhlCiAgICAgICAgICAgICAgKiBjdXJyZW50IHBlcnNpc3RlbnQgZGlyZWN0b3J5LCBhbmQgcmVhZCBmaWxlcyB0aGVyZS4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChjb25mcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKTsKKyAgICAgICAgICAgIGlmICggcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChjb25mcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKSA9PSBTTk1QRVJSX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgICAgIGZyZWUocGVyc3BhdGgpOwogICAgICAgICAgICAgcGVyc3BhdGggPSBzdHJkdXAoZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCkpOwotICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChwZXJzcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKTsKKyAgICAgICAgICAgIGlmICggcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChwZXJzcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKSA9PSBTTk1QRVJSX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBvbmx5IHJlYWQgcGF0aCBzcGVjaWZpZWQgYnkgdXNlcgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKGVudmNvbmZwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpOworICAgICAgICAgICAgaWYgKCByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKGVudmNvbmZwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpID09IFNOTVBFUlJfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICB9CiAgICAgICAgIGZyZWUocGVyc3BhdGgpOworICAgICAgICByZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyBpZiBhbnkgY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqIFJldHVybiBTTk1QRVJSX0dFTkVSUiBpZiBfbm9fIGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiAgICBXaGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgYW4gZXJyb3IgaXMgbGVmdCB0byB0aGUgYXBwbGljYXRpb24KKyAqLworaW50CityZWFkX2NvbmZpZ19maWxlcyhpbnQgd2hlbikgeworCisgICAgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCA9IGNvbmZpZ19maWxlczsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByZXQgID0gU05NUEVSUl9HRU5FUlI7CisKKyAgICBjb25maWdfZXJyb3JzID0gMDsKKworICAgIGlmICh3aGVuID09IFBSRU1JQl9DT05GSUcpCisgICAgICAgIGZyZWVfY29uZmlnKCk7CisKKyAgICAvKgorICAgICAqIHJlYWQgYWxsIGNvbmZpZyBmaWxlIHR5cGVzIAorICAgICAqLworICAgIGZvciAoOyBjdG1wICE9IE5VTEw7IGN0bXAgPSBjdG1wLT5uZXh0KSB7CisgICAgICAgIGlmICggcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZSh3aGVuLCBjdG1wKSA9PSBTTk1QRVJSX1NVQ0NFU1MgKQorICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgIH0KIAogICAgIGlmIChjb25maWdfZXJyb3JzKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXQtc25tcDogJWQgZXJyb3IocykgaW4gY29uZmlnIGZpbGUocylcbiIsCiAgICAgICAgICAgICAgICAgIGNvbmZpZ19lcnJvcnMpOwogICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQogCiB2b2lkCkBAIC0xMzIyLDcgKzE1MzcsNyBAQAogICAgICAgICBmcHJpbnRmKGZvdXQsICIlcyIsIGxpbmUpOwogICAgICAgICBpZiAobGluZVtzdHJsZW4obGluZSldICE9ICdcbicpCiAgICAgICAgICAgICBmcHJpbnRmKGZvdXQsICJcbiIpOwotICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAic3RvcmluZzogJXNcbiIsIGxpbmUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOnN0b3JlIiwgInN0b3Jpbmc6ICVzXG4iLCBsaW5lKSk7CiAgICAgICAgIGZjbG9zZShmb3V0KTsKICAgICB9IGVsc2UgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicmVhZF9jb25maWdfc3RvcmUgb3BlbiBmYWlsdXJlIG9uICVzXG4iLCBmaWxlcCk7CkBAIC0xNDAzLDggKzE2MTgsMTEgQEAKICAgICAgKiBzYXZlIGEgd2FybmluZyBoZWFkZXIgdG8gdGhlIHRvcCBvZiB0aGUgbmV3IGZpbGUgCiAgICAgICovCiAgICAgc25wcmludGYoZmlsZW9sZCwgc2l6ZW9mKGZpbGVvbGQpLAotICAgICAgICAgICAgIiNcbiMgbmV0LXNubXAgKG9yIHVjZC1zbm1wKSBwZXJzaXN0ZW50IGRhdGEgZmlsZS5cbiNcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiMgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgXG4jXG4jICAgICAgICAgICoqKiogRE8gTk9UIEVESVQgVEhJUyBGSUxFICoqKipcbiNcbiMgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jXG4jIERPIE5PVCBTVE9SRSBDT05GSUdVUkFUSU9OIEVOVFJJRVMgSEVSRS5cbiMgUGxlYXNlIHNhdmUgbm9ybWFsIGNvbmZpZ3VyYXRpb24gdG9rZW5zIGZvciAlcyBpbiBTTk1QQ09ORlBBVEgvJXMuY29uZi5cbiMgT25seSBcImNyZWF0ZVVzZXJcIiB0b2tlbnMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlIGJ5ICVzIGFkbWluaXN0cmF0b3JzLlxuIyAoRGlkIEkgbWVudGlvbjogZG8gbm90IGVkaXQgdGhpcyBmaWxlPylcbiNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4iLAotICAgICAgICAgICAgdHlwZSwgdHlwZSwgdHlwZSk7CisgICAgICAgICAgICAiJXMlcyMgUGxlYXNlIHNhdmUgbm9ybWFsIGNvbmZpZ3VyYXRpb24gdG9rZW5zIGZvciAlcyBpbiBTTk1QQ09ORlBBVEgvJXMuY29uZi5cbiMgT25seSBcImNyZWF0ZVVzZXJcIiB0b2tlbnMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlIGJ5ICVzIGFkbWluaXN0cmF0b3JzLlxuJXMiLAorICAgICAgICAgICAgIiNcbiMgbmV0LXNubXAgKG9yIHVjZC1zbm1wKSBwZXJzaXN0ZW50IGRhdGEgZmlsZS5cbiNcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiMgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgXG4iLAorICAgICAgICAgICAgIiNcbiMgICAgICAgICAgKioqKiBETyBOT1QgRURJVCBUSElTIEZJTEUgKioqKlxuI1xuIyBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiNcbiMgRE8gTk9UIFNUT1JFIENPTkZJR1VSQVRJT04gRU5UUklFUyBIRVJFLlxuIiwKKyAgICAgICAgICAgIHR5cGUsIHR5cGUsIHR5cGUsCisJICAgICIjIChEaWQgSSBtZW50aW9uOiBkbyBub3QgZWRpdCB0aGlzIGZpbGU/KVxuI1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiIpOwogICAgIGZpbGVvbGRbIHNpemVvZihmaWxlb2xkKS0xIF0gPSAwOwogICAgIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGZpbGVvbGQpOwogfQpAQCAtMTQ2NSwxOSArMTY4Myw1MiBAQAogICogY29uZmlnX3BlcnJvcjogcHJpbnRzIGEgd2FybmluZyBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBhbmQKICAqIGxpbmUgbnVtYmVyIG9mIGEgLmNvbmYgZmlsZSBhbmQgaW5jcmVtZW50cyB0aGUgZXJyb3IgY291bnQuIAogICovCitzdGF0aWMgdm9pZAorY29uZmlnX3Zsb2coaW50IGxldmVsLCBjb25zdCBjaGFyICpsZXZlbG1zZywgY29uc3QgY2hhciAqc3RyLCB2YV9saXN0IGFyZ3MpCit7CisgICAgY2hhciB0bXBidWZbMjU2XTsKKyAgICBjaGFyKiBidWYgPSB0bXBidWY7CisgICAgaW50IGxlbiA9IHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICIlczogbGluZSAlZDogJXM6ICVzXG4iLAorCQkgICAgICAgY3VyZmlsZW5hbWUsIGxpbmVjb3VudCwgbGV2ZWxtc2csIHN0cik7CisgICAgaWYgKGxlbiA+PSAoaW50KXNpemVvZih0bXBidWYpKSB7CisJYnVmID0gKGNoYXIqKW1hbGxvYyhsZW4gKyAxKTsKKwlzcHJpbnRmKGJ1ZiwgIiVzOiBsaW5lICVkOiAlczogJXNcbiIsCisJCWN1cmZpbGVuYW1lLCBsaW5lY291bnQsIGxldmVsbXNnLCBzdHIpOworICAgIH0KKyAgICBzbm1wX3Zsb2cobGV2ZWwsIGJ1ZiwgYXJncyk7CisgICAgaWYgKGJ1ZiAhPSB0bXBidWYpCisJZnJlZShidWYpOworfQorCit2b2lkCituZXRzbm1wX2NvbmZpZ19lcnJvcihjb25zdCBjaGFyICpzdHIsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgc3RyKTsKKyAgICBjb25maWdfdmxvZyhMT0dfRVJSLCAiRXJyb3IiLCBzdHIsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICBjb25maWdfZXJyb3JzKys7Cit9CisKK3ZvaWQKK25ldHNubXBfY29uZmlnX3dhcm4oY29uc3QgY2hhciAqc3RyLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHN0cik7CisgICAgY29uZmlnX3Zsb2coTE9HX1dBUk5JTkcsICJXYXJuaW5nIiwgc3RyLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKIHZvaWQKIGNvbmZpZ19wZXJyb3IoY29uc3QgY2hhciAqc3RyKQogewotICAgIHNubXBfbG9nKExPR19FUlIsICIlczogbGluZSAlZDogRXJyb3I6ICVzXG4iLCBjdXJmaWxlbmFtZSwgbGluZWNvdW50LAotICAgICAgICAgICAgIHN0cik7Ci0gICAgY29uZmlnX2Vycm9ycysrOworICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCIlcyIsIHN0cik7CiB9CiAKIHZvaWQKIGNvbmZpZ19wd2Fybihjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICIlczogbGluZSAlZDogV2FybmluZzogJXNcbiIsIGN1cmZpbGVuYW1lLAotICAgICAgICAgICAgIGxpbmVjb3VudCwgc3RyKTsKKyAgICBuZXRzbm1wX2NvbmZpZ193YXJuKCIlcyIsIHN0cik7CiB9CiAKIC8qCkBAIC0xNDg3LDYgKzE3MzgsMTIgQEAKIGNoYXIgICAgICAgICAgICoKIHNraXBfd2hpdGUoY2hhciAqcHRyKQogeworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIHNraXBfd2hpdGVfY29uc3QocHRyKSk7Cit9CisKK2NvbnN0IGNoYXIgICAgICoKK3NraXBfd2hpdGVfY29uc3QoY29uc3QgY2hhciAqcHRyKQorewogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB3aGlsZSAoKnB0ciAhPSAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnB0cikpCkBAIC0xNDk5LDYgKzE3NTYsMTIgQEAKIGNoYXIgICAgICAgICAgICoKIHNraXBfbm90X3doaXRlKGNoYXIgKnB0cikKIHsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBza2lwX25vdF93aGl0ZV9jb25zdChwdHIpKTsKK30KKworY29uc3QgY2hhciAgICAgKgorc2tpcF9ub3Rfd2hpdGVfY29uc3QoY29uc3QgY2hhciAqcHRyKQorewogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB3aGlsZSAoKnB0ciAhPSAwICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwdHIpKQpAQCAtMTUxMSw5ICsxNzc0LDE1IEBACiBjaGFyICAgICAgICAgICAqCiBza2lwX3Rva2VuKGNoYXIgKnB0cikKIHsKLSAgICBwdHIgPSBza2lwX3doaXRlKHB0cik7Ci0gICAgcHRyID0gc2tpcF9ub3Rfd2hpdGUocHRyKTsKLSAgICBwdHIgPSBza2lwX3doaXRlKHB0cik7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgc2tpcF90b2tlbl9jb25zdChwdHIpKTsKK30KKworY29uc3QgY2hhciAgICAgKgorc2tpcF90b2tlbl9jb25zdChjb25zdCBjaGFyICpwdHIpCit7CisgICAgcHRyID0gc2tpcF93aGl0ZV9jb25zdChwdHIpOworICAgIHB0ciA9IHNraXBfbm90X3doaXRlX2NvbnN0KHB0cik7CisgICAgcHRyID0gc2tpcF93aGl0ZV9jb25zdChwdHIpOwogICAgIHJldHVybiAocHRyKTsKIH0KIApAQCAtMTUzNCw2ICsxODAzLDEyIEBACiBjaGFyICAgICAgICAgICAqCiBjb3B5X253b3JkKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBpbnQgbGVuKQogeworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGNvcHlfbndvcmRfY29uc3QoZnJvbSwgdG8sIGxlbikpOworfQorCitjb25zdCBjaGFyICAgICAgICAgICAqCitjb3B5X253b3JkX2NvbnN0KGNvbnN0IGNoYXIgKmZyb20sIGNoYXIgKnRvLCBpbnQgbGVuKQorewogICAgIGNoYXIgICAgICAgICAgICBxdW90ZTsKICAgICBpZiAoIWZyb20gfHwgIXRvKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NjIsNyArMTgzNyw3IEBACiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnJvbSsrOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICgqZnJvbSAhPSAwICYmICFpc3NwYWNlKCpmcm9tKSkgeworICAgICAgICB3aGlsZSAoKmZyb20gIT0gMCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmZyb20pKSkgewogICAgICAgICAgICAgaWYgKCgqZnJvbSA9PSAnXFwnKSAmJiAoKihmcm9tICsgMSkgIT0gMCkpIHsKICAgICAgICAgICAgICAgICBpZiAobGVuID4gMCkgeyAgLyogZG9uJ3QgY29weSBiZXlvbmQgbGVuIGJ5dGVzICovCiAgICAgICAgICAgICAgICAgICAgICp0bysrID0gKihmcm9tICsgMSk7CkBAIC0xNTgyLDkgKzE4NTcsOSBAQAogICAgIH0KICAgICBpZiAobGVuID4gMCkKICAgICAgICAgKnRvID0gMDsKLSAgICBmcm9tID0gc2tpcF93aGl0ZShmcm9tKTsKKyAgICBmcm9tID0gc2tpcF93aGl0ZV9jb25zdChmcm9tKTsKICAgICByZXR1cm4gKGZyb20pOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5X3dvcmQgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weV9ud29yZCAqLwogCiAvKgogICogY29weV93b3JkCkBAIC0xNjU3LDIwICsxOTMyLDQyIEBACiAgICAgcmV0dXJuIHNhdmV0bzsKIH0KIAotLyoKLSAqIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCk6IHJlYWRzIGFuIG9jdGV0IHN0cmluZyB0aGF0IHdhcwotICogc2F2ZWQgYnkgdGhlIHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKCkgZnVuY3Rpb24gCisvKioKKyAqIFJlYWRzIGFuIG9jdGV0IHN0cmluZyB0aGF0IHdhcyBzYXZlZCBieSB0aGUKKyAqIHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKCkgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luXSAgICAgcmVhZGZyb20gUG9pbnRlciB0byB0aGUgaW5wdXQgZGF0YSB0byBiZSBwYXJzZWQuCisgKiBAcGFyYW1baW4sb3V0XSBzdHIgICAgICBQb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuIFRoZSBkYXRhCisgKiAgIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBidWZmZXIgd2lsbCBiZSAnXDAnLXRlcm1pbmF0ZWQuIElmICpzdHIgPT0gTlVMTCwKKyAqICAgYW4gb3V0cHV0IGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCB0aGF0IGlzIG9uZSBieXRlIGxhcmdlciB0aGFuIHRoZQorICogICBkYXRhIHN0b3JlZC4KKyAqIEBwYXJhbVtpbixvdXRdIGxlbiAgICAgIElmIHN0ciAhPSBOVUxMLCAqbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKnN0cgorICogICBwb2ludHMgYXQuIElmIHN0ciA9PSBOVUxMLCB0aGUgdmFsdWUgcGFzc2VkIHZpYSAqbGVuIGlzIGlnbm9yZWQuCisgKiAgIEJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIHdpbGwgYmUgc3RvcmVkCisgKiAgIGluICpsZW4uIElmIGEgYnVmZmVyIG92ZXJmbG93IG9jY3VycywgKmxlbiB3aWxsIGJlIHNldCB0byAwLgorICoKKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgdG8gYmUgcGFyc2VkIGlmCisgKiAgIHBhcnNpbmcgc3VjY2VlZGVkOyBOVUxMIHdoZW4gdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyaW5nIGhhcyBiZWVuIHJlYWNoZWQKKyAqICAgb3IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgKi8KIGNoYXIgICAgICAgICAgICoKLXJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNoYXIgKnJlYWRmcm9tLCB1X2NoYXIgKiogc3RyLCBzaXplX3QgKiBsZW4pCityZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjb25zdCBjaGFyICpyZWFkZnJvbSwgdV9jaGFyICoqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbikKIHsKLSAgICB1X2NoYXIgICAgICAgICAqY3B0ciA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHIxOwotICAgIHVfaW50ICAgICAgICAgICB0bXA7Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0gICAgc2l6ZV90ICAgICAgICAgIGlsZW47CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwKKyAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KHJlYWRmcm9tLCBzdHIsIGxlbikpOworfQogCi0gICAgaWYgKHJlYWRmcm9tID09IE5VTEwgfHwgc3RyID09IE5VTEwpCitjb25zdCBjaGFyICAgICAqCityZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChjb25zdCBjaGFyICpyZWFkZnJvbSwgdV9jaGFyICoqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbikKK3sKKyAgICB1X2NoYXIgICAgICAgICAqY3B0cjsKKyAgICBjb25zdCBjaGFyICAgICAqY3B0cjE7CisgICAgdV9pbnQgICAgICAgICAgIHRtcDsKKyAgICBzaXplX3QgICAgICAgICAgaSwgaWxlbjsKKworICAgIGlmIChyZWFkZnJvbSA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMIHx8IGxlbiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzdHJuY2FzZWNtcChyZWFkZnJvbSwgIjB4IiwgMikgPT0gMCkgewpAQCAtMTY3OCw3ICsxOTc1LDcgQEAKICAgICAgICAgICogQSBoZXggc3RyaW5nIHN1Ym1pdHRlZC4gSG93IGxvbmc/IAogICAgICAgICAgKi8KICAgICAgICAgcmVhZGZyb20gKz0gMjsKLSAgICAgICAgY3B0cjEgPSBza2lwX25vdF93aGl0ZShyZWFkZnJvbSk7CisgICAgICAgIGNwdHIxID0gc2tpcF9ub3Rfd2hpdGVfY29uc3QocmVhZGZyb20pOwogICAgICAgICBpZiAoY3B0cjEpCiAgICAgICAgICAgICBpbGVuID0gKGNwdHIxIC0gcmVhZGZyb20pOwogICAgICAgICBlbHNlCkBAIC0xNjk2LDMxICsxOTkzLDI5IEBACiAgICAgICAgICAqIG1hbGxvYyBkYXRhIHNwYWNlIGlmIG5lZWRlZCAoKzEgZm9yIGdvb2QgbWVhc3VyZSkgCiAgICAgICAgICAqLwogICAgICAgICBpZiAoKnN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoKGNwdHIgPSAodV9jaGFyICopIG1hbGxvYyhpbGVuICsgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICpzdHIgPSAodV9jaGFyICopIG1hbGxvYyhpbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoISpzdHIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqc3RyID0gY3B0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBkb24ndCByZXF1aXJlIGNhbGxlciB0byBoYXZlICsxIGZvciBnb29kIG1lYXN1cmUsIGFuZCAKLSAgICAgICAgICAgICAqIGJhaWwgaWYgbm90IGVub3VnaCBzcGFjZS4KKyAgICAgICAgICAgICAqIHJlcXVpcmUgY2FsbGVyIHRvIGhhdmUgKzEsIGFuZCBiYWlsIGlmIG5vdCBlbm91Z2ggc3BhY2UuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChpbGVuID4gKmxlbikgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCJidWZmZXIgdG9vIHNtYWxsIHRvIHJlYWQgb2N0ZXQgc3RyaW5nICglZCA8ICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqbGVuLCBpbGVuKTsKKyAgICAgICAgICAgIGlmIChpbGVuID49ICpsZW4pIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywiYnVmZmVyIHRvbyBzbWFsbCB0byByZWFkIG9jdGV0IHN0cmluZyAoJWx1IDwgJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykqbGVuLCAodW5zaWduZWQgbG9uZylpbGVuKTsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXIgdG9vIHNtYWxsICglbHUgPCAlbHUpIiwgKHVuc2lnbmVkIGxvbmcpKmxlbiwgKHVuc2lnbmVkIGxvbmcpaWxlbikpOwotICAgICAgICAgICAgICAgIGNwdHIxID0gc2tpcF9ub3Rfd2hpdGUocmVhZGZyb20pOwotICAgICAgICAgICAgICAgIHJldHVybiBza2lwX3doaXRlKGNwdHIxKTsKKyAgICAgICAgICAgICAgICAqbGVuID0gMDsKKyAgICAgICAgICAgICAgICBjcHRyMSA9IHNraXBfbm90X3doaXRlX2NvbnN0KHJlYWRmcm9tKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2tpcF93aGl0ZV9jb25zdChjcHRyMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjcHRyID0gKnN0cjsKICAgICAgICAgfQotICAgICAgICAqbGVuID0gaWxlbjsKIAogICAgICAgICAvKgogICAgICAgICAgKiBjb3B5IHZhbGlkYXRlZCBkYXRhIAogICAgICAgICAgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpICpsZW47IGkrKykgeworICAgICAgICBjcHRyID0gKnN0cjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGlsZW47IGkrKykgewogICAgICAgICAgICAgaWYgKDEgPT0gc3NjYW5mKHJlYWRmcm9tLCAiJTJ4IiwgJnRtcCkpCiAgICAgICAgICAgICAgICAgKmNwdHIrKyA9ICh1X2NoYXIpIHRtcDsKICAgICAgICAgICAgIGVsc2UgewpAQCAtMTczMiwxMyArMjAyNywxMSBAQAogICAgICAgICAgICAgcmVhZGZyb20gKz0gMjsKICAgICAgICAgfQogICAgICAgICAvKgotICAgICAgICAgKiBvbmx5IG51bGwgdGVybWluYXRlIGlmIHdlIGhhdmUgdGhlIHNwYWNlCisgICAgICAgICAqIFRlcm1pbmF0ZSB0aGUgb3V0cHV0IGJ1ZmZlci4KICAgICAgICAgICovCi0gICAgICAgIGlmIChpbGVuID4gKmxlbikgewotICAgICAgICAgICAgaWxlbiA9ICpsZW4tMTsKLSAgICAgICAgICAgICpjcHRyKysgPSAnXDAnOwotICAgICAgICB9Ci0gICAgICAgIHJlYWRmcm9tID0gc2tpcF93aGl0ZShyZWFkZnJvbSk7CisgICAgICAgICpjcHRyKysgPSAnXDAnOworICAgICAgICAqbGVuID0gaWxlbjsKKyAgICAgICAgcmVhZGZyb20gPSBza2lwX3doaXRlX2NvbnN0KHJlYWRmcm9tKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKgogICAgICAgICAgKiBOb3JtYWwgc3RyaW5nIApAQCAtMTc0OSwyNSArMjA0MiwyMyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKCpzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgY2hhciAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl07Ci0gICAgICAgICAgICByZWFkZnJvbSA9IGNvcHlfbndvcmQocmVhZGZyb20sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgcmVhZGZyb20gPSBjb3B5X253b3JkX2NvbnN0KHJlYWRmcm9tLCBidWYsIHNpemVvZihidWYpKTsKIAogICAgICAgICAgICAgKmxlbiA9IHN0cmxlbihidWYpOwotICAgICAgICAgICAgaWYgKChjcHRyID0gKHVfY2hhciAqKSBtYWxsb2MoKmxlbiArIDEpKSA9PSBOVUxMKQorICAgICAgICAgICAgKnN0ciA9ICh1X2NoYXIgKikgbWFsbG9jKCpsZW4gKyAxKTsKKyAgICAgICAgICAgIGlmICgqc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAqc3RyID0gY3B0cjsKLSAgICAgICAgICAgIGlmIChjcHRyKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGNwdHIsIGJ1ZiwgKmxlbiArIDEpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KCpzdHIsIGJ1ZiwgKmxlbiArIDEpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVhZGZyb20gPSBjb3B5X253b3JkKHJlYWRmcm9tLCAoY2hhciAqKSAqc3RyLCAqbGVuKTsKLSAgICAgICAgICAgICpsZW4gPSBzdHJsZW4oKGNoYXIgKikgKnN0cik7CisgICAgICAgICAgICByZWFkZnJvbSA9IGNvcHlfbndvcmRfY29uc3QocmVhZGZyb20sIChjaGFyICopICpzdHIsICpsZW4pOworICAgICAgICAgICAgaWYgKCpsZW4pCisgICAgICAgICAgICAgICAgKmxlbiA9IHN0cmxlbigoY2hhciAqKSAqc3RyKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiByZWFkZnJvbTsKIH0KIAotCiAvKgogICogcmVhZF9jb25maWdfc2F2ZV9vYmppZCgpOiBzYXZlcyBhbiBvYmppZCBhcyBhIG51bWVyaWNhbCBzdHJpbmcgCiAgKi8KQEAgLTE3ODYsNyArMjA3Nyw3IEBACiAgICAgICogaW4gY2FzZSBsZW49MCwgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhZCBpdCBiYWNrIGluIAogICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBsZW47IGkrKykgewotICAgICAgICBzcHJpbnRmKHNhdmV0bywgIi4lbGQiLCBvYmppZFtpXSk7CisgICAgICAgIHNwcmludGYoc2F2ZXRvLCAiLiUiIE5FVFNOTVBfUFJJbyAiZCIsIG9iamlkW2ldKTsKICAgICAgICAgc2F2ZXRvICs9IHN0cmxlbihzYXZldG8pOwogICAgIH0KICAgICByZXR1cm4gc2F2ZXRvOwpAQCAtMTc5OCw2ICsyMDg5LDEzIEBACiBjaGFyICAgICAgICAgICAqCiByZWFkX2NvbmZpZ19yZWFkX29iamlkKGNoYXIgKnJlYWRmcm9tLCBvaWQgKiogb2JqaWQsIHNpemVfdCAqIGxlbikKIHsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLAorICAgICAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QocmVhZGZyb20sIG9iamlkLCBsZW4pKTsKK30KKworY29uc3QgY2hhciAgICAgKgorcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChjb25zdCBjaGFyICpyZWFkZnJvbSwgb2lkICoqIG9iamlkLCBzaXplX3QgKiBsZW4pCit7CiAKICAgICBpZiAob2JqaWQgPT0gTlVMTCB8fCByZWFkZnJvbSA9PSBOVUxMIHx8IGxlbiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4MTksNyArMjExNyw3IEBACiAgICAgICAgICAqIHF1YWxpZnkgdGhlIHN0cmluZyBmb3IgcmVhZF9vYmppZCAKICAgICAgICAgICovCiAgICAgICAgIGNoYXIgICAgICAgICAgICBidWZbU1BSSU5UX01BWF9MRU5dOwotICAgICAgICBjb3B5X253b3JkKHJlYWRmcm9tLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgY29weV9ud29yZF9jb25zdChyZWFkZnJvbSwgYnVmLCBzaXplb2YoYnVmKSk7CiAKICAgICAgICAgaWYgKCFyZWFkX29iamlkKGJ1ZiwgKm9iamlkLCBsZW4pKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdfcmVhZF9vYmppZCIsICJJbnZhbGlkIE9JRCIpKTsKQEAgLTE4MjgsNyArMjEyNiw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZWFkZnJvbSA9IHNraXBfdG9rZW4ocmVhZGZyb20pOworICAgIHJlYWRmcm9tID0gc2tpcF90b2tlbl9jb25zdChyZWFkZnJvbSk7CiAgICAgcmV0dXJuIHJlYWRmcm9tOwogfQogCkBAIC0xOTcyLDcgKzIyNzAsNiBAQAogICAgICAgICByZXR1cm4gcmVhZGZyb207CiAKICAgICBjYXNlIEFTTl9DT1VOVEVSNjQ6Ci0gICAgewogICAgICAgICBpZiAoKmxlbiA8IHNpemVvZihVNjQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICpsZW4gPSBzaXplb2YoVTY0KTsKQEAgLTE5ODEsMTEgKzIyNzgsNyBAQAogICAgICAgICByZXR1cm4gcmVhZGZyb207CiAgICAgfQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnX3JlYWRfbWVtb3J5IiwgIkZhaWw6IFVua25vd24gdHlwZTogJWQiLAotICAgICAgICAgICAgICAgICAgICB0eXBlKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdfcmVhZF9tZW1vcnkiLCAiRmFpbDogVW5rbm93biB0eXBlOiAlZCIsIHR5cGUpKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjA2OSw0ICsyMzYyLDUgQEAKICAgICAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQorCiAvKiogQH0gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvcmVhZGRpci5jIGIvc25tcGxpYi9yZWFkZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZjgzZAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvcmVhZGRpci5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiByZWFkZGlyKCkgcmVwbGFjZW1lbnQgZm9yIE1TVkMuCisgKi8KKworI2RlZmluZSBXSU4zMklPX0lTX1NURElPCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRjaGFyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisKKy8qCisgKiBSZWFkZGlyIGp1c3QgcmV0dXJucyB0aGUgY3VycmVudCBzdHJpbmcgcG9pbnRlciBhbmQgYnVtcHMgdGhlCisgKiAqIHN0cmluZyBwb2ludGVyIHRvIHRoZSBuRGxsRXhwb3J0IGVudHJ5LgorICovCitzdHJ1Y3QgZGlyZWN0ICAqCityZWFkZGlyKERJUiAqIGRpcnApCit7CisgICAgaW50ICAgICAgICAgICAgIGxlbjsKKyAgICBzdGF0aWMgaW50ICAgICAgZHVtbXkgPSAwOworCisgICAgaWYgKGRpcnAtPmN1cnIpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZmlyc3Qgc2V0IHVwIHRoZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuIAorICAgICAgICAgKi8KKyAgICAgICAgbGVuID0gc3RybGVuKGRpcnAtPmN1cnIpOworICAgICAgICBzdHJjcHkoZGlycC0+ZGlyc3RyLmRfbmFtZSwgZGlycC0+Y3Vycik7CisgICAgICAgIGRpcnAtPmRpcnN0ci5kX25hbWxlbiA9IGxlbjsKKworICAgICAgICAvKgorICAgICAgICAgKiBGYWtlIGFuIGlub2RlIAorICAgICAgICAgKi8KKyAgICAgICAgZGlycC0+ZGlyc3RyLmRfaW5vID0gZHVtbXkrKzsKKworICAgICAgICAvKgorICAgICAgICAgKiBOb3cgc2V0IHVwIGZvciB0aGUgbkRsbEV4cG9ydCBjYWxsIHRvIHJlYWRkaXIgCisgICAgICAgICAqLworICAgICAgICBkaXJwLT5jdXJyICs9IGxlbiArIDE7CisgICAgICAgIGlmIChkaXJwLT5jdXJyID49IChkaXJwLT5zdGFydCArIGRpcnAtPnNpemUpKSB7CisgICAgICAgICAgICBkaXJwLT5jdXJyID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAmKGRpcnAtPmRpcnN0cik7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zY2FwaS5jIGIvc25tcGxpYi9zY2FwaS5jCmluZGV4IGQ4MzdjNTEuLjE2YWM4MjkgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc2NhcGkuYworKysgYi9zbm1wbGliL3NjYXBpLmMKQEAgLTE1LDExICsxNSw5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMjksMTEgKzI3LDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU3LDYgKzUxLDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX3N1cHBvcnQsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX3NjYXBpLCB1c21fc3VwcG9ydCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9TQ0FQSQorCiAjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9tZDUuaD4KICNlbmRpZgpAQCAtNjksNiArNjgsMTMgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KIAorI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaD4KKyNlbmRpZgorCiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTAogI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CkBAIC03OSw3ICs4NSw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCi0jaWZkZWYgU1RSVUNUX0RFU19LU19TVFJVQ1RfSEFTX1dFQUtfS0VZCisjaWZkZWYgSEFWRV9TVFJVQ1RfREVTX0tTX1NUUlVDVF9XRUFLX0tFWQogLyogdGhlc2UgYXJlIG9sZGVyIG5hbWVzIGZvciBuZXdlciBzdHJ1Y3R1cmVzIHRoYXQgZXhpc3QgaW4gb3BlbnNzbCAuOS43ICovCiAjZGVmaW5lIERFU19rZXlfc2NoZWR1bGUgICAgZGVzX2tleV9zY2hlZHVsZSAKICNkZWZpbmUgREVTX2NibG9jayAgICAgICAgICBkZXNfY2Jsb2NrIApAQCAtOTIsNiArOTgsOSBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMICovCiAKKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyNlbmRpZgorCiAjaWZkZWYgTkVUU05NUF9VU0VfUEtDUzExCiAjaW5jbHVkZSA8c2VjdXJpdHkvY3J5cHRva2kuaD4KICNlbmRpZgpAQCAtMTA1LDYgKzExNCwxNSBAQAogCX0KICNlbmRpZgogCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCitzdGF0aWMKK2ludCBTSEExX2htYWMoY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pOworCitzdGF0aWMKK2ludCBNRDVfaG1hYyhjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCisgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKTsKKyNlbmRpZgogCiAvKgogICogc2NfZ2V0X3Byb3Blcmxlbmd0aChvaWQgKmhhc2h0eXBlLCB1X2ludCBoYXNodHlwZV9sZW4pOgpAQCAtMTMyLDYgKzE1MCw4IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2NhcGlfZ2V0X3Byb3Blcl9wcml2X2xlbmd0aCwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0NBUElfR0VUX1BST1BFUl9QUklWX0xFTkdUSAogaW50CiBzY19nZXRfcHJvcGVyX3ByaXZfbGVuZ3RoKGNvbnN0IG9pZCAqIHByaXZ0eXBlLCB1X2ludCBwcml2dHlwZV9sZW4pCiB7CkBAIC0xNDgsNiArMTY4LDcgQEAKICNlbmRpZgogICAgIHJldHVybiBwcm9wZXJsZW5ndGg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TQ0FQSV9HRVRfUFJPUEVSX1BSSVZfTEVOR1RIICovCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKQEAgLTE2MSwxNSArMTgyLDE1IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAKLSNpZm5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTAotI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQorI2lmICFkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogICAgIHN0cnVjdCB0aW1ldmFsICB0djsKIAogICAgIERFQlVHVFJBQ0U7CiAKICAgICBnZXR0aW1lb2ZkYXkoJnR2LCAoc3RydWN0IHRpbWV6b25lICopIDApOwogCi0gICAgc3JhbmRvbSh0di50dl9zZWMgXiB0di50dl91c2VjKTsKKyAgICBzcmFuZG9tKCh1bnNpZ25lZCkodHYudHZfc2VjIF4gdHYudHZfdXNlYykpOwogI2VsaWYgTkVUU05NUF9VU0VfUEtDUzExCiAgICAgREVCVUdUUkFDRTsKICAgICBydmFsID0gcGtjc19pbml0KCk7CkBAIC0xOTYsMTAgKzIxNywxMCBAQAogICovCiBpbnQKIHNjX3JhbmRvbSh1X2NoYXIgKiBidWYsIHNpemVfdCAqIGJ1ZmxlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7Ci0jaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CisjaWYgIWRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgIWRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQogICAgIGludCAgICAgICAgICAgICBpOwogICAgIGludCAgICAgICAgICAgICBybmR2YWw7CiAgICAgdV9jaGFyICAgICAgICAgKnVjcCA9IGJ1ZjsKQEAgLTI2NSwxNyArMjg2LDE4IEBACiAgKi8KIGludAogc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaChjb25zdCBvaWQgKiBhdXRodHlwZSwgc2l6ZV90IGF1dGh0eXBlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAogICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBNQUMsIHNpemVfdCAqIG1hY2xlbikKLSNpZiAgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKLSAgICBpbnQgICAgICAgICAgICAgcHJvcGVybGVuZ3RoOworICAgIGludCAgICAgICAgICAgICBpcHJvcGVybGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICBwcm9wZXJsZW5ndGg7CiAKICAgICB1X2NoYXIgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXTsKICNpZiAgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKLSAgICBzaXplX3QgICAgICAgICAgICAgYnVmX2xlbiA9IHNpemVvZihidWYpOworICAgIHVuc2lnbmVkIGludCAgICBidWZfbGVuID0gc2l6ZW9mKGJ1Zik7CiAjZW5kaWYKIAogICAgIERFQlVHVFJBQ0U7CkBAIC0zMDAsMTEgKzMyMiwxMSBAQAogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KIAotICAgIHByb3Blcmxlbmd0aCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoYXV0aHR5cGUsIGF1dGh0eXBlbGVuKTsKLSAgICBpZiAocHJvcGVybGVuZ3RoID09IFNOTVBFUlJfR0VORVJSKQotICAgICAgICByZXR1cm4gcHJvcGVybGVuZ3RoOwotCi0gICAgaWYgKCgoaW50KSBrZXlsZW4gPCBwcm9wZXJsZW5ndGgpKSB7CisgICAgaXByb3Blcmxlbmd0aCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoYXV0aHR5cGUsIGF1dGh0eXBlbGVuKTsKKyAgICBpZiAoaXByb3Blcmxlbmd0aCA9PSBTTk1QRVJSX0dFTkVSUikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIHByb3Blcmxlbmd0aCA9IChzaXplX3QpaXByb3Blcmxlbmd0aDsKKyAgICBpZiAoa2V5bGVuIDwgcHJvcGVybGVuZ3RoKSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKQEAgLTMyMSwxMCArMzQzLDEwIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQotICAgIGlmICgoaW50KWJ1Zl9sZW4gIT0gcHJvcGVybGVuZ3RoKSB7CisgICAgaWYgKGJ1Zl9sZW4gIT0gcHJvcGVybGVuZ3RoKSB7CiAgICAgICAgIFFVSVRGVU4ocnZhbCwgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9Ci0gICAgaWYgKChpbnQpKm1hY2xlbiA+IGJ1Zl9sZW4pCisgICAgaWYgKCptYWNsZW4gPiBidWZfbGVuKQogICAgICAgICAqbWFjbGVuID0gYnVmX2xlbjsKICAgICBtZW1jcHkoTUFDLCBidWYsICptYWNsZW4pOwogCkBAIC0zNTQsOCArMzc2LDI1IEBACiAgICAgICAgICptYWNsZW4gPSBidWZfbGVuOwogICAgIG1lbWNweShNQUMsIGJ1ZiwgKm1hY2xlbik7CiAKKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworICAgIGlmICgqbWFjbGVuID4gcHJvcGVybGVuZ3RoKQorICAgICAgICAqbWFjbGVuID0gcHJvcGVybGVuZ3RoOworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CisgICAgaWYgKElTVFJBTlNGT1JNKGF1dGh0eXBlLCBITUFDTUQ1QXV0aCkpCisgICAgICAgIHJ2YWwgPSBNRDVfaG1hYyhtZXNzYWdlLCBtc2dsZW4sIE1BQywgKm1hY2xlbiwga2V5LCBrZXlsZW4pOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgaWYgKElTVFJBTlNGT1JNKGF1dGh0eXBlLCBITUFDU0hBMUF1dGgpKQorICAgICAgICBydmFsID0gU0hBMV9obWFjKG1lc3NhZ2UsIG1zZ2xlbiwgTUFDLCAqbWFjbGVuLCBrZXksIGtleWxlbik7CisgICAgZWxzZSB7CisgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdCk7CisgICAgfQorICAgIGlmIChydmFsICE9IDApIHsKKyAgICAgICAgcnZhbCA9IFNOTVBFUlJfR0VORVJSOworICAgICAgICBnb3RvIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdDsKKyAgICB9ICAgIAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1ICovCi0gICAgaWYgKChpbnQpICptYWNsZW4gPiBwcm9wZXJsZW5ndGgpCisgICAgaWYgKCptYWNsZW4gPiBwcm9wZXJsZW5ndGgpCiAgICAgICAgICptYWNsZW4gPSBwcm9wZXJsZW5ndGg7CiAgICAgaWYgKE1Ec2lnbihtZXNzYWdlLCBtc2dsZW4sIE1BQywgKm1hY2xlbiwga2V5LCBrZXlsZW4pKSB7CiAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX0dFTkVSUjsKQEAgLTM5OSwxNCArNDM4LDE3IEBACiAgKiBSZXR1cm5zOgogICogU05NUEVSUl9TVUNDRVNTICAgICAgICAgICAgICBTdWNjZXNzLgogICogU05NUF9TQ19HRU5FUkFMX0ZBSUxVUkUgICAgICBBbnkgZXJyb3IuCisgKiBTTk1QRVJSX1NDX05PVF9DT05GSUdVUkVEICAgIEhhc2ggdHlwZSBub3Qgc3VwcG9ydGVkLgogICovCiBpbnQKLXNjX2hhc2goY29uc3Qgb2lkICogaGFzaHR5cGUsIHNpemVfdCBoYXNodHlwZWxlbiwgdV9jaGFyICogYnVmLAorc2NfaGFzaChjb25zdCBvaWQgKiBoYXNodHlwZSwgc2l6ZV90IGhhc2h0eXBlbGVuLCBjb25zdCB1X2NoYXIgKiBidWYsCiAgICAgICAgIHNpemVfdCBidWZfbGVuLCB1X2NoYXIgKiBNQUMsIHNpemVfdCAqIE1BQ19sZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiAgICAgaW50ICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCiAgICAgdW5zaWduZWQgaW50ICAgdG1wX2xlbjsKICNlbmRpZgogICAgIGludCAgICAgICAgICAgIHJldDsKQEAgLTQxNSwxNCArNDU3LDE3IEBACiAgICAgY29uc3QgRVZQX01EICAgKmhhc2hmbjsKICAgICBFVlBfTURfQ1RYICAgICAqY3B0cjsKICNlbmRpZgotCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisgICAgTUQ1X0NUWCAgICAgICAgY21kNTsKKyAgICBTSEFfQ1RYICAgICAgICBjc2hhMTsKKyNlbmRpZgogICAgIERFQlVHVFJBQ0U7CiAKLSAgICBpZiAoaGFzaHR5cGUgPT0gTlVMTCB8fCBoYXNodHlwZWxlbiA8IDAgfHwgYnVmID09IE5VTEwgfHwKLSAgICAgICAgYnVmX2xlbiA8PSAwIHx8IE1BQyA9PSBOVUxMIHx8IE1BQ19sZW4gPT0gTlVMTCApCisgICAgaWYgKGhhc2h0eXBlID09IE5VTEwgfHwgYnVmID09IE5VTEwgfHwgYnVmX2xlbiA8PSAwIHx8CisgICAgICAgIE1BQyA9PSBOVUxMIHx8IE1BQ19sZW4gPT0gTlVMTCApCiAgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOwogICAgIHJldCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlbGVuKTsKLSAgICBpZiAoKCByZXQgPCAwICkgfHwgKCpNQUNfbGVuIDwgcmV0ICkpCisgICAgaWYgKCggcmV0IDwgMCApIHx8ICgqTUFDX2xlbiA8IChzaXplX3QpcmV0ICkpCiAgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOwogCiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTApAQCAtNDUxLDcgKzQ5NiwxMCBAQAogICAgIEVWUF9NRF9DVFhfaW5pdChjcHRyKTsKICNlbmRpZgogI2VuZGlmCi0gICAgRVZQX0RpZ2VzdEluaXQoY3B0ciwgaGFzaGZuKTsKKyAgICBpZiAoIUVWUF9EaWdlc3RJbml0KGNwdHIsIGhhc2hmbikpIHsKKyAgICAgICAgLyogcmVxdWVzdGVkIGhhc2ggZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSAqLworICAgICAgICByZXR1cm4gU05NUEVSUl9TQ19OT1RfQ09ORklHVVJFRDsKKyAgICB9CiAKIC8qKiBwYXNzIHRoZSBkYXRhICovCiAgICAgRVZQX0RpZ2VzdFVwZGF0ZShjcHRyLCBidWYsIGJ1Zl9sZW4pOwpAQCAtNDY4LDYgKzUxNiwzMCBAQAogICAgIGZyZWUoY3B0cik7CiAjZW5kaWYKICAgICByZXR1cm4gKHJ2YWwpOworCisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQorICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ01ENUF1dGgpKSB7CisgICAgICAgIGlmICgqTUFDX2xlbiA8IE1ENV9ESUdFU1RfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7ICAgICAgLyogdGhlIGJ1ZmZlciBpc24ndCBiaWcgZW5vdWdoICovCisJTUQ1X0luaXQoJmNtZDUpOworICAgICAgICBNRDVfVXBkYXRlKCZjbWQ1LCBidWYsIGJ1Zl9sZW4pOworICAgICAgICBNRDVfRmluYWwoTUFDLCAmY21kNSk7CisgICAgICAgICpNQUNfbGVuID0gTUQ1X0RJR0VTVF9MRU5HVEg7CisgICAgfSBlbHNlIAorI2VuZGlmCisgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDU0hBMUF1dGgpKSB7CisgICAgICAgIGlmICgqTUFDX2xlbiA8IFNIQV9ESUdFU1RfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7ICAgICAgLyogdGhlIGJ1ZmZlciBpc24ndCBiaWcgZW5vdWdoICovCisJU0hBMV9Jbml0KCZjc2hhMSk7CisgICAgICAgIFNIQTFfVXBkYXRlKCZjc2hhMSwgYnVmLCBidWZfbGVuKTsKKyAgICAgICAgU0hBMV9GaW5hbChNQUMsICZjc2hhMSk7CisgICAgICAgICpNQUNfbGVuID0gU0hBX0RJR0VTVF9MRU5HVEg7CisgICAgICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsKKyAgICB9CisgICAgcmV0dXJuIChydmFsKTsKICNlbGlmIE5FVFNOTVBfVVNFX1BLQ1MxMSAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfVVNFX1BLQ1MxMSAqLwogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKQEAgLTUyNCwxMCArNTk2LDEwIEBACiAgKi8KIGludAogc2NfY2hlY2tfa2V5ZWRfaGFzaChjb25zdCBvaWQgKiBhdXRodHlwZSwgc2l6ZV90IGF1dGh0eXBlbGVuLAotICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAotICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBNQUMsIHVfaW50IG1hY2xlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogTUFDLCB1X2ludCBtYWNsZW4pCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gU05NUF9NQVhCVUZfU01BTEw7CkBAIC01NTUsMTAgKzYyNywxMSBAQAogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19jaGVja19rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KIAorCiAgICAgaWYgKG1hY2xlbiAhPSBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4pIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfY2hlY2tfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9Ci0KKyAgICAKICAgICAvKgogICAgICAqIEdlbmVyYXRlIGEgZnVsbCBoYXNoIG9mIHRoZSBtZXNzYWdlLCB0aGVuIGNvbXBhcmUKICAgICAgKiB0aGUgcmVzdWx0IHdpdGggdGhlIGdpdmVuIE1BQyB3aGljaCBtYXkgc2hvcnRlciB0aGFuCkBAIC02MTYsOSArNjg5LDkgQEAKIHNjX2VuY3J5cHQoY29uc3Qgb2lkICogcHJpdnR5cGUsIHNpemVfdCBwcml2dHlwZWxlbiwKICAgICAgICAgICAgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCiAgICAgICAgICAgIHVfY2hhciAqIGl2LCB1X2ludCBpdmxlbiwKLSAgICAgICAgICAgdV9jaGFyICogcGxhaW50ZXh0LCB1X2ludCBwdGxlbiwKKyAgICAgICAgICAgY29uc3QgdV9jaGFyICogcGxhaW50ZXh0LCB1X2ludCBwdGxlbiwKICAgICAgICAgICAgdV9jaGFyICogY2lwaGVydGV4dCwgc2l6ZV90ICogY3RsZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgdV9pbnQgICAgICAgICAgIHByb3Blcmxlbmd0aCA9IDAsIHByb3Blcmxlbmd0aF9pdiA9IDA7CkBAIC04OTEsNyArOTY0LDcgQEAKICAgICAgICAgICAgdV9jaGFyICogaXYsIHVfaW50IGl2bGVuLAogICAgICAgICAgICB1X2NoYXIgKiBjaXBoZXJ0ZXh0LCB1X2ludCBjdGxlbiwKICAgICAgICAgICAgdV9jaGFyICogcGxhaW50ZXh0LCBzaXplX3QgKiBwdGxlbikKLSNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKIAogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwpAQCAtMTA3MSwzICsxMTQ0LDIyMCBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgKi8KIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9VU0VfT1BFTlNTTCAqLworCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmFzaWNhbGx5IGNvcGllcyBvZiB0aGUgTURTaWduKCkgcm91dGluZSBpbgorICAgbWQ1LmMgbW9kaWZpZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBPcGVuU1NMIGhhc2hpbmcgZnVuY3Rpb25zLiAgVGhlCisgICBjb3B5cmlnaHQgYmVsb3cgaXMgZnJvbSB0aGUgbWQ1LmMgZmlsZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3ZXJlCisgICB0YWtlbiBmcm9tOiAqLworCisvKgorICogKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqIG1kNS5jIC0tIEltcGxlbWVudGF0aW9uIG9mIE1ENSBNZXNzYWdlIERpZ2VzdCBBbGdvcml0aG0gICAgICAgICAgICAgICAgICoqCisgKiAqKiBVcGRhdGVkOiAyLzE2LzkwIGJ5IFJvbmFsZCBMLiBSaXZlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorICogKiogKEMpIDE5OTAgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKKyAqICoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIE1ENV9obWFjKGRhdGEsIGxlbiwgTUQ1KTogZG8gYSBjaGVja3N1bSBvbiBhbiBhcmJpcnRyYXJ5IGFtb3VudAorICogb2YgZGF0YSwgYW5kIHByZXBlbmRlZCB3aXRoIGEgc2VjcmV0IGluIHRoZSBzdGFuZGFyZCBmYXNoaW9uIAorICovCitzdGF0aWMgaW50CitNRDVfaG1hYyhjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCisgICAgICAgICBjb25zdCB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisjZGVmaW5lIE1ENV9IQVNIS0VZTEVOIDY0CisjZGVmaW5lIE1ENV9TRUNSRVRLRVlMRU4gMTYKKworICAgIE1ENV9DVFggICAgICAgICBjbWQ1OworICAgIHVfY2hhciAgICAgICAgICBLMVtNRDVfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIEsyW01ENV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgZXh0ZW5kZWRBdXRoS2V5W01ENV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgYnVmW01ENV9IQVNIS0VZTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgaTsKKyAgICBjb25zdCB1X2NoYXIgICAqY3A7CisgICAgdV9jaGFyICAgICAgICAgKm5ld2RhdGEgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqIG1lbXNldChLMSwwLE1ENV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoSzIsMCxNRDVfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KGJ1ZiwwLE1ENV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LDAsTUQ1X0hBU0hLRVlMRU4pOworICAgICAqLworCisgICAgaWYgKHNlY3JldGxlbiAhPSBNRDVfU0VDUkVUS0VZTEVOIHx8IHNlY3JldCA9PSBOVUxMIHx8CisgICAgICAgIG1hYyA9PSBOVUxMIHx8IGRhdGEgPT0gTlVMTCB8fAorICAgICAgICBsZW4gPD0gMCB8fCBtYWNsZW4gPD0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBERUJVR01TR1RMKCgibWQ1IiwiTUQ1IHNpZ25pbmcgbm90IHByb3Blcmx5IGluaXRpYWxpemVkIikpOyAKKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgbWVtY3B5KGV4dGVuZGVkQXV0aEtleSwgc2VjcmV0LCBzZWNyZXRsZW4pOworICAgIGZvciAoaSA9IDA7IGkgPCBNRDVfSEFTSEtFWUxFTjsgaSsrKSB7CisgICAgICAgIEsxW2ldID0gZXh0ZW5kZWRBdXRoS2V5W2ldIF4gMHgzNjsKKyAgICAgICAgSzJbaV0gPSBleHRlbmRlZEF1dGhLZXlbaV0gXiAweDVjOworICAgIH0KKworICAgIE1ENV9Jbml0KCZjbWQ1KTsKKyAgICByYyA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBLMSwgTUQ1X0hBU0hLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgaSA9IGxlbjsKKyAgICBpZiAoKCh1aW50cHRyX3QpIGRhdGEpICUgc2l6ZW9mKGxvbmcpICE9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhpcyByZWxpZXMgb24gdGhlIGFiaWxpdHkgdG8gdXNlIGludGVnZXIgbWF0aCBhbmQgdGh1cyB3ZQorICAgICAgICAgKiBtdXN0IHJlbHkgb24gZGF0YSB0aGF0IGFsaWducyBvbiAzMi1iaXQtd29yZC1ib3VuZHJpZXMgCisgICAgICAgICAqLworICAgICAgICBuZXdkYXRhID0gbmV0c25tcF9tZW1kdXAoZGF0YSwgbGVuKTsKKyAgICAgICAgY3AgPSBuZXdkYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIGNwID0gZGF0YTsKKyAgICB9CisKKyAgICB3aGlsZSAoaSA+PSA2NCkgeworICAgICAgICByYyA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBjcCwgNjQpOworICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisgICAgICAgIGNwICs9IDY0OworICAgICAgICBpIC09IDY0OworICAgIH0KKworICAgIHJjID0gIU1ENV9VcGRhdGUoJmNtZDUsIGNwLCBpKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIG1lbXNldChidWYsIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBNRDVfRmluYWwoYnVmLCAmY21kNSk7CisKKyAgICBNRDVfSW5pdCgmY21kNSk7CisgICAgcmMgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgSzIsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKyAgICByYyA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBidWYsIE1ENV9TRUNSRVRLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgLyoKKyAgICAgKiBjb3B5IHRoZSBzaWduIGNoZWNrc3VtIHRvIHRoZSBvdXRnb2luZyBwb2ludGVyIAorICAgICAqLworICAgIE1ENV9GaW5hbChidWYsICZjbWQ1KTsKKyAgICBtZW1jcHkobWFjLCBidWYsIG1hY2xlbik7CisKKyAgdXBkYXRlX2VuZDoKKyAgICBtZW1zZXQoYnVmLCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KEsxLCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KEsyLCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIG1lbXNldCgmY21kNSwgMCwgc2l6ZW9mKGNtZDUpKTsKKworICAgIGlmIChuZXdkYXRhKQorICAgICAgICBmcmVlKG5ld2RhdGEpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorU0hBMV9obWFjKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKKyAgICAgICAgICBjb25zdCB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisjZGVmaW5lIFNIQTFfSEFTSEtFWUxFTiAgIDY0CisjZGVmaW5lIFNIQTFfU0VDUkVUS0VZTEVOIDIwCisKKyAgICBTSEFfQ1RYICAgICAgICAgY3NoYTE7CisgICAgdV9jaGFyICAgICAgICAgIEsxW1NIQTFfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIEsyW1NIQTFfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIGV4dGVuZGVkQXV0aEtleVtTSEExX0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBidWZbU0hBMV9IQVNIS0VZTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgaTsKKyAgICBjb25zdCB1X2NoYXIgICAqY3A7CisgICAgdV9jaGFyICAgICAgICAgKm5ld2RhdGEgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqIG1lbXNldChLMSwwLFNIQTFfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KEsyLDAsU0hBMV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoYnVmLDAsU0hBMV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LDAsU0hBMV9IQVNIS0VZTEVOKTsKKyAgICAgKi8KKworICAgIGlmIChzZWNyZXRsZW4gIT0gU0hBMV9TRUNSRVRLRVlMRU4gfHwgc2VjcmV0ID09IE5VTEwgfHwKKyAgICAgICAgbWFjID09IE5VTEwgfHwgZGF0YSA9PSBOVUxMIHx8CisgICAgICAgIGxlbiA8PSAwIHx8IG1hY2xlbiA8PSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIERFQlVHTVNHVEwoKCJzaGExIiwiU0hBMSBzaWduaW5nIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCIpKTsgCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBtZW1jcHkoZXh0ZW5kZWRBdXRoS2V5LCBzZWNyZXQsIHNlY3JldGxlbik7CisgICAgZm9yIChpID0gMDsgaSA8IFNIQTFfSEFTSEtFWUxFTjsgaSsrKSB7CisgICAgICAgIEsxW2ldID0gZXh0ZW5kZWRBdXRoS2V5W2ldIF4gMHgzNjsKKyAgICAgICAgSzJbaV0gPSBleHRlbmRlZEF1dGhLZXlbaV0gXiAweDVjOworICAgIH0KKworICAgIFNIQTFfSW5pdCgmY3NoYTEpOworICAgIHJjID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgSzEsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICBpID0gbGVuOworICAgIGlmICgoKHVpbnRwdHJfdCkgZGF0YSkgJSBzaXplb2YobG9uZykgIT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiB0aGlzIHJlbGllcyBvbiB0aGUgYWJpbGl0eSB0byB1c2UgaW50ZWdlciBtYXRoIGFuZCB0aHVzIHdlCisgICAgICAgICAqIG11c3QgcmVseSBvbiBkYXRhIHRoYXQgYWxpZ25zIG9uIDMyLWJpdC13b3JkLWJvdW5kcmllcyAKKyAgICAgICAgICovCisgICAgICAgIG5ld2RhdGEgPSBuZXRzbm1wX21lbWR1cChkYXRhLCBsZW4pOworICAgICAgICBjcCA9IG5ld2RhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3AgPSBkYXRhOworICAgIH0KKworICAgIHdoaWxlIChpID49IDY0KSB7CisgICAgICAgIHJjID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgY3AsIDY0KTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgZ290byB1cGRhdGVfZW5kOworICAgICAgICBjcCArPSA2NDsKKyAgICAgICAgaSAtPSA2NDsKKyAgICB9CisKKyAgICByYyA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIGNwLCBpKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIG1lbXNldChidWYsIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgU0hBMV9GaW5hbChidWYsICZjc2hhMSk7CisKKyAgICBTSEExX0luaXQoJmNzaGExKTsKKyAgICByYyA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIEsyLCBTSEExX0hBU0hLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworICAgIHJjID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgYnVmLCBTSEExX1NFQ1JFVEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICAvKgorICAgICAqIGNvcHkgdGhlIHNpZ24gY2hlY2tzdW0gdG8gdGhlIG91dGdvaW5nIHBvaW50ZXIgCisgICAgICovCisgICAgU0hBMV9GaW5hbChidWYsICZjc2hhMSk7CisgICAgbWVtY3B5KG1hYywgYnVmLCBtYWNsZW4pOworCisgIHVwZGF0ZV9lbmQ6CisgICAgbWVtc2V0KGJ1ZiwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoSzEsIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KEsyLCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIG1lbXNldChleHRlbmRlZEF1dGhLZXksIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KCZjc2hhMSwgMCwgc2l6ZW9mKGNzaGExKSk7CisKKyAgICBpZiAobmV3ZGF0YSkKKyAgICAgICAgZnJlZShuZXdkYXRhKTsKKyAgICByZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPICovCisjZW5kaWYgLyogIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX1NDQVBJICAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wLXRjLmMgYi9zbm1wbGliL3NubXAtdGMuYwppbmRleCBlZmE1NDAyLi44OTFjM2EwIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXAtdGMuYworKysgYi9zbm1wbGliL3NubXAtdGMuYwpAQCAtNSwxMCArNSw4IEBACiAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTE2LDE2ICsxNCwxMiBAQAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jaWZkZWYgV0lOMzIKLSMgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZWxzZQogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMzksNiArMzMsMTQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaD4gICAvKiBmb3IgImludGVybmFsIiBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfdGNfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9kYXRlYW5kdGltZV9zZXRfYnVmX2Zyb21fdmFycywgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGF0ZV9uX3RpbWUsIHNubXBfdGNfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGN0aW1lX3RvX3RpbWV0LCBzbm1wX3RjX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja19yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZV90cmFuc2l0aW9uLCBzbm1wX3RjX2FsbCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfREFURUFORFRJTUVfU0VUX0JVRl9GUk9NX1ZBUlMKIC8qCiAgIERhdGVBbmRUaW1lIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KICAgICBESVNQTEFZLUhJTlQgIjJkLTFkLTFkLDFkOjFkOjFkLjFkLDFhMWQ6MWQiCkBAIC0xMTksOSArMTIxLDExIEBACiAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9EQVRFQU5EVElNRV9TRVRfQlVGX0ZST01fVkFSUyAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFURV9OX1RJTUUKIHVfY2hhciAgICAgICAgICoKLWRhdGVfbl90aW1lKHRpbWVfdCAqIHdoZW4sIHNpemVfdCAqIGxlbmd0aCkKK2RhdGVfbl90aW1lKGNvbnN0IHRpbWVfdCAqIHdoZW4sIHNpemVfdCAqIGxlbmd0aCkKIHsKICAgICBzdHJ1Y3QgdG0gICAgICAqdG1fcDsKICAgICBzdGF0aWMgdV9jaGFyICAgc3RyaW5nWzExXTsKQEAgLTE1OSwxNSArMTYzLDE1IEBACiAgICAgc3RyaW5nWzddID0gMDsKICAgICAqbGVuZ3RoID0gODsKIAotI2lmbmRlZiBjeWd3aW4KKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRikgfHwgZGVmaW5lZChIQVZFX1RJTUVaT05FX1ZBUklBQkxFKQogICAgIC8qCiAgICAgICogVGltZXpvbmUgb2Zmc2V0CiAgICAgICovCiAgICAgewotI2lmZGVmIFNUUlVDVF9UTV9IQVNfVE1fR01UT0ZGCi0gICAgY29uc3QgaW50IHR6b2Zmc2V0ID0gLXRtX3AtPnRtX2dtdG9mZjsgICAgIC8qIFNlY29uZHMgZWFzdCBvZiBVVEMgKi8KKyNpZmRlZiBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKKyAgICBjb25zdCBpbnQgdHpvZmZzZXQgPSAtdG1fcC0+dG1fZ210b2ZmOyAgIC8qIFNlY29uZHMgZWFzdCBvZiBVVEMgKi8KICNlbHNlCi0gICAgY29uc3QgaW50IHR6b2Zmc2V0ID0gdGltZXpvbmU7ICAgICAgICAgICAgIC8qIFNlY29uZHMgd2VzdCBvZiBVVEMgKi8KKyAgICBjb25zdCBpbnQgdHpvZmZzZXQgPSB0aW1lem9uZTsgICAgICAgICAgIC8qIFNlY29uZHMgd2VzdCBvZiBVVEMgKi8KICNlbmRpZgogICAgIGlmICh0em9mZnNldCA+IDApCiAgICAgICAgIHN0cmluZ1s4XSA9ICctJzsKQEAgLTE3OSw3ICsxODMsNyBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgU1lTVgorI2lmIGRlZmluZWQoU1lTVikgJiYgIUhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgogICAgIC8qCiAgICAgICogRGF5bGlnaHQgc2F2aW5nIHRpbWUKICAgICAgKi8KQEAgLTE5OSwxMCArMjAzLDExIEBACiAKICAgICByZXR1cm4gc3RyaW5nOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFURV9OX1RJTUUgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ1RJTUVfVE9fVElNRVQKIHRpbWVfdAotY3RpbWVfdG9fdGltZXQoY2hhciAqc3RyKQorY3RpbWVfdG9fdGltZXQoY29uc3QgY2hhciAqc3RyKQogewogICAgIHN0cnVjdCB0bSAgICAgICB0bTsKIApAQCAtMjU4LDkgKzI2MywxMCBAQAogCiAgICAgcmV0dXJuIChta3RpbWUoJnRtKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DVElNRV9UT19USU1FVCAqLwogCiAvKgotICogYmxhdGFudGx5IGxpZnRlZCBmcm9tIG9wZW5zbXAgCisgKiBibGF0YW50bHkgbGlmdGVkIGZyb20gb3BlbnNubXAgCiAgKi8KIGNoYXIKIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uKGludCBvbGRWYWx1ZSwgaW50IG5ld1ZhbHVlKQpAQCAtMzcwLDE2ICszNzYsMTMgQEAKICAgICBzd2l0Y2ggKG5ld1ZhbHVlKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHRoZXNlIHR3byBlbmQgdXAgYmVpbmcgZXF1aXZlbGVudCBhcyBmYXIgYXMgY2hlY2tpbmcgdGhlIAotICAgICAgICAgKi8KLSAgICAgICAgLyoKICAgICAgICAgICogc3RhdHVzIGdvZXMsIGFsdGhvdWdoIHRoZSBmaW5hbCBzdGF0ZXMgYXJlIGJhc2VkIG9uIHRoZSAKLSAgICAgICAgICovCi0gICAgICAgIC8qCiAgICAgICAgICAqIG5ld1ZhbHVlLiAKICAgICAgICAgICovCiAgICAgY2FzZSBSU19BQ1RJVkU6CiAgICAgY2FzZSBSU19OT1RJTlNFUlZJQ0U6Ci0gICAgICAgIGlmIChvbGRWYWx1ZSA9PSBSU19OT1RJTlNFUlZJQ0UgfHwgb2xkVmFsdWUgPT0gUlNfQUNUSVZFKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlID09IFJTX05PVElOU0VSVklDRSB8fCBvbGRWYWx1ZSA9PSBSU19BQ1RJVkUpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKICAgICAgICAgYnJlYWs7CkBAIC0zOTIsMTMgKzM5NSw2IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKLSAgICAgICAgaWYgKG9sZFZhbHVlICE9IFJTX05PTkVYSVNURU5UKQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGltcG9zc2libGUsIHdlIGFscmVhZHkgZXhpc3QuIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgogICAgICAgICBpZiAob2xkVmFsdWUgIT0gUlNfTk9ORVhJU1RFTlQpCiAgICAgICAgICAgICAvKgpAQCAtNDE4LDYgKzQxNCwyNSBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEVfVFJBTlNJVElPTgorY2hhcgorY2hlY2tfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGVfdHJhbnNpdGlvbihpbnQgb2xkVmFsdWUsIGludCBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZFN0b3JhZ2UpCit7CisgICAgLyoKKyAgICAgKiBjYW4gbm90IGRlc3Ryb3kgcGVybWFuZW50IG9yIHJlYWRvbmx5IHJvd3MKKyAgICAgKi8KKyAgICBpZiAoKFJTX0RFU1RST1kgPT0gbmV3VmFsdWUpICYmCisgICAgICAgICgoU05NUF9TVE9SQUdFX1BFUk1BTkVOVCA9PSBvbGRTdG9yYWdlKSB8fAorICAgICAgICAgKFNOTVBfU1RPUkFHRV9SRUFET05MWSA9PSBvbGRTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworCisgICAgcmV0dXJuIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uKG9sZFZhbHVlLCBuZXdWYWx1ZSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRV9UUkFOU0lUSU9OICovCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja19zdG9yYWdlX3RyYW5zaXRpb24sIHNubXBfdGNfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1NUT1JBR0VfVFJBTlNJVElPTgogY2hhcgogY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKGludCBvbGRWYWx1ZSwgaW50IG5ld1ZhbHVlKQogewpAQCAtNDU4LDMgKzQ3Myw0IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1NUT1JBR0VfVFJBTlNJVElPTiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wLmMgYi9zbm1wbGliL3NubXAuYwppbmRleCAwMjBlYzkwLi5jMzc2M2U5IDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXAuYworKysgYi9zbm1wbGliL3NubXAuYwpAQCAtNTEsOSArNTEsNiBAQAogI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZm5kZWYgTlVMTAogI2RlZmluZSBOVUxMIDAKICNlbmRpZgpAQCAtOTAsMTAgKzg3LDExIEBACiAqLwogCiB2b2lkCi14ZHVtcChjb25zdCB1X2NoYXIgKiBjcCwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqcHJlZml4KQoreGR1bXAoY29uc3Qgdm9pZCAqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLSAgICBpbnQgICAgICAgICAgICAgY29sLCBjb3VudDsKLSAgICBjaGFyICAgICAgICAgICAqYnVmZmVyOworICAgIGNvbnN0IHVfY2hhciAqIGNvbnN0IGNwID0gKGNvbnN0IHVfY2hhciopZGF0YTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBjb2wsIGNvdW50OworICAgIGNoYXIgICAgICAgICAgICAgICAgKmJ1ZmZlcjsKIAogICAgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocHJlZml4KSArIDgwKTsKICAgICBpZiAoIWJ1ZmZlcikgewpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jIGIvc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJmMGIwLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxhdG0uaD4KLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oPgotCi0KLW9pZCBuZXRzbm1wX0FBTDVQVkNEb21haW5bMTBdID0geyBORVRTTk1QX0VOVEVSUFJJU0VfTUlCLCAzLCAzLCAzIH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIGFhbDVwdmNEb21haW47Ci0KLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnRvID0gTlVMTDsKLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKSB0LT5kYXRhOwotICAgIH0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJBQUw1IFBWQzogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgdG1wWzY0XTsKLSAgICAgICAgc3ByaW50Zih0bXAsICJBQUw1IFBWQzogJWhkLiVoZC4lZCIsIHRvLT5zYXBfYWRkci5pdGYsCi0gICAgICAgICAgICAgICAgdG8tPnNhcF9hZGRyLnZwaSwgdG8tPnNhcF9hZGRyLnZjaSk7Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfYWFsNXB2Y19yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgICAgaWYgKHJjID49IDApIHsKLSAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKHQsIE5VTEwsIDApOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsCi0JCQkicmVjdiBvbiBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLCB0LT5zb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHN0cikpOwotICAgICAgICAgICAgZnJlZShzdHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJyZWN2IG9uIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwgCi0JCQl0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9hYWw1cHZjX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0gICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCi0gICAgICAgICpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCpvcGFxdWUpOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAodC0+ZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcihOVUxMLCAodm9pZCAqKXRvLAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKLQkJICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfYWFsNXB2Y19jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0LT5zb2NrID49IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJjbG9zZSBmZCAlZFxuIiwgdC0+c29jaykpOwotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotLyoKLSAqIE9wZW4gYW4gQUFMNSBQVkMgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbCAKLSAqIE5TQVAgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAotICogdGhlIHJlbW90ZSBOU0FQIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zYXBfZmFtaWx5ICE9IEFGX0FUTVBWQykgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHN0ciA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKE5VTEwsICh2b2lkICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cikpOwotICAgIGZyZWUoc3RyKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfQUFMNVBWQ0RvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0KLSAgICAgICAgc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpbikgLyBzaXplb2YobmV0c25tcF9BQUw1UFZDRG9tYWluWzBdKTsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsInNvY2tldCBmYWlsZWQgKCVzKVxuIixzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiZmQgJWQgb3BlbmVkXG4iLCB0LT5zb2NrKSk7Ci0KLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNldCB1cCB0aGUgUU9TIHBhcmFtZXRlcnMuCi0gICAgICAgICAqLwotCi0gICAgICAgIHN0cnVjdCBhdG1fcW9zIHFvcyA9IHsgMCB9OwotICAgICAgICBxb3MuYWFsID0gQVRNX0FBTDU7Ci0gICAgICAgIHFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgPSBBVE1fVUJSOwotICAgICAgICBxb3Mucnh0cC5tYXhfc2R1ID0gU05NUF9NQVhfTEVOOyAgICAvKiAgSG1tIC0tIHRoaXMgaXMgYSBiaXQgc21hbGw/ICAqLwotICAgICAgICBxb3MudHh0cCA9IHFvcy5yeHRwOwotCi0gICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9BVE0sIFNPX0FUTVFPUywgJnFvcywgc2l6ZW9mKHFvcykpIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJzZXRzb2Nrb3B0IGZhaWxlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX2FhbDVwdmNfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDgpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHQtPmxvY2FsWzBdID0gKGFkZHItPnNhcF9hZGRyLml0ZiAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbMV0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbFsyXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzNdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxbNF0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHhmZjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIHQtPmxvY2FsWzVdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDBmZjAwMDApID4+IDE2OwotICAgICAgICB0LT5sb2NhbFs2XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDBmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFs3XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDAwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA4OwotCi0gICAgICAgIGlmIChiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiYmluZCBmYWlsZWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyg4KTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+cmVtb3RlWzBdID0gKGFkZHItPnNhcF9hZGRyLml0ZiAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzFdID0gKGFkZHItPnNhcF9hZGRyLml0ZiAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlWzJdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzNdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlWzRdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4ZmYwMDAwMDApID4+IDI0OwotICAgICAgICB0LT5yZW1vdGVbNV0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0gICAgICAgIHQtPnJlbW90ZVs2XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDBmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbN10gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMDAwMDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDg7Ci0KLSAgICAgICAgaWYgKGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJjb25uZWN0IGZhaWxlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX2FhbDVwdmNfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSk7Ci0gICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSk7Ci0gICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2Yyk7Ci0KLSAgICAvKgotICAgICAqIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIHRyYWlsZXIsIG5vIGhlYWRlcnMuICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweGZmZmY7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfYWFsNXB2Y19yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX2FhbDVwdmNfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9hYWw1cHZjX2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgYWRkcjsKLQotICAgIGlmIChzdHIgPT0gTlVMTCB8fCAqc3RyID09ICdcMCcpCi0Jc3RyID0gZGVmYXVsdF90YXJnZXQ7Ci0KLSAgICBpZiAoc3RyICE9IE5VTEwpIHsKLSAgICAgICAgYWRkci5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDOwotCi0gICAgICAgIGlmIChzc2NhbmYoc3RyLCAiJWhkLiVoZC4lZCIsICYoYWRkci5zYXBfYWRkci5pdGYpLAotICAgICAgICAgICAgICAgICAgICYoYWRkci5zYXBfYWRkci52cGkpLCAmKGFkZHIuc2FwX2FkZHIudmNpKSkgPT0gMykgewotICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICAgICAgfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJWhkLiVkIiwgJihhZGRyLnNhcF9hZGRyLnZwaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYoYWRkci5zYXBfYWRkci52Y2kpKSA9PSAyKSB7Ci0gICAgICAgICAgICBhZGRyLnNhcF9hZGRyLml0ZiA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgICAgICB9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlZCIsICYoYWRkci5zYXBfYWRkci52Y2kpKSA9PSAxKSB7Ci0gICAgICAgICAgICBhZGRyLnNhcF9hZGRyLml0ZiA9IDA7Ci0gICAgICAgICAgICBhZGRyLnNhcF9hZGRyLnZwaSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2FhbDVwdmNfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2F0bXB2YyBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDgpIHsKLSAgICAgICAgYWRkci5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDOwotICAgICAgICBhZGRyLnNhcF9hZGRyLml0ZiA9IChvWzBdIDw8IDgpICsgKG9bMV0gPDwgMCk7Ci0gICAgICAgIGFkZHIuc2FwX2FkZHIudnBpID0gKG9bMl0gPDwgOCkgKyAob1szXSA8PCAwKTsKLSAgICAgICAgYWRkci5zYXBfYWRkci52Y2kgPQotCSAgICAob1s0XSA8PCAyNCkgKyAob1s1XSA8PCAxNikgKyAob1s2XSA8PCA4KSArIChvWzddIDw8IDApOwotICAgICAgICByZXR1cm4gbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotdm9pZAotbmV0c25tcF9hYWw1cHZjX2N0b3Iodm9pZCkKLXsKLSAgICBhYWw1cHZjRG9tYWluLm5hbWUgPSBuZXRzbm1wX0FBTDVQVkNEb21haW47Ci0gICAgYWFsNXB2Y0RvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX0FBTDVQVkNEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgYWFsNXB2Y0RvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygzLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgYWFsNXB2Y0RvbWFpbi5wcmVmaXhbMF0gPSAiYWFsNXB2YyI7Ci0gICAgYWFsNXB2Y0RvbWFpbi5wcmVmaXhbMV0gPSAicHZjIjsKLQotICAgIGFhbDVwdmNEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgYWFsNXB2Y0RvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV90c3RyaW5nOwotICAgIGFhbDVwdmNEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfYWFsNXB2Y19jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmYWFsNXB2Y0RvbWFpbik7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jIGIvc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1YTIxNC4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjI2ICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWZkZWYgV0lOMzIKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19VTl9ICi0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0lPX0gKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0jaWYgSEFWRV9GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oPgotCi0jaWZuZGVmIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTgotI2RlZmluZSBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4gIDUKLSNlbmRpZgotCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOCi0KLXN0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICp0cmxpc3QgPSBOVUxMOwotCi1zdGF0aWMgaW50ICAgICAgY2FsbGJhY2tfY291bnQgPSAwOwotCi10eXBlZGVmIHN0cnVjdCBjYWxsYmFja19oYWNrX3MgewotICAgIHZvaWQgICAgICAgICAgICpvcmlnX3RyYW5zcG9ydF9kYXRhOwotICAgIG5ldHNubXBfcGR1ICAgICpwZHU7Ci19IGNhbGxiYWNrX2hhY2s7Ci0KLXR5cGVkZWYgc3RydWN0IGNhbGxiYWNrX3F1ZXVlX3MgewotICAgIGludCAgICAgICAgICAgICBjYWxsYmFja19udW07Ci0gICAgbmV0c25tcF9jYWxsYmFja19wYXNzICppdGVtOwotICAgIHN0cnVjdCBjYWxsYmFja19xdWV1ZV9zICpuZXh0LCAqcHJldjsKLX0gY2FsbGJhY2tfcXVldWU7Ci0KLWNhbGxiYWNrX3F1ZXVlICp0aGVxdWV1ZTsKLQotc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0ICoKLWZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKGludCBudW0pCi17Ci0gICAgc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKnB0cjsKLSAgICBmb3IgKHB0ciA9IHRybGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCi0gICAgICAgIGlmICgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSBwdHItPnRyYW5zcG9ydC0+ZGF0YSktPgotICAgICAgICAgICAgY2FsbGJhY2tfbnVtID09IG51bSkKLSAgICAgICAgICAgIHJldHVybiBwdHItPnRyYW5zcG9ydDsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGxiYWNrX2RlYnVnX3BkdShjb25zdCBjaGFyICpvdXJzdHJpbmcsIG5ldHNubXBfcGR1ICpwZHUpCi17Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YjsKLSAgICBpbnQgICAgICAgICAgICAgaSA9IDE7Ci0gICAgREVCVUdNU0dUTCgob3Vyc3RyaW5nLAotICAgICAgICAgICAgICAgICJQRFU6IGNvbW1hbmQgPSAlZCwgZXJyc3RhdCA9ICVkLCBlcnJpbmRleCA9ICVkXG4iLAotICAgICAgICAgICAgICAgIHBkdS0+Y29tbWFuZCwgcGR1LT5lcnJzdGF0LCBwZHUtPmVycmluZGV4KSk7Ci0gICAgZm9yICh2YiA9IHBkdS0+dmFyaWFibGVzOyB2YjsgdmIgPSB2Yi0+bmV4dF92YXJpYWJsZSkgewotICAgICAgICBERUJVR01TR1RMKChvdXJzdHJpbmcsICIgIHZhciAlZDoiLCBpKyspKTsKLSAgICAgICAgREVCVUdNU0dWQVIoKG91cnN0cmluZywgdmIpKTsKLSAgICAgICAgREVCVUdNU0coKG91cnN0cmluZywgIlxuIikpOwotICAgIH0KLX0KLQotdm9pZAotY2FsbGJhY2tfcHVzaF9xdWV1ZShpbnQgbnVtLCBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKml0ZW0pCi17Ci0gICAgY2FsbGJhY2tfcXVldWUgKm5ld2l0ZW0gPSBTTk1QX01BTExPQ19UWVBFREVGKGNhbGxiYWNrX3F1ZXVlKTsKLSAgICBjYWxsYmFja19xdWV1ZSAqcHRyOwotCi0gICAgbmV3aXRlbS0+Y2FsbGJhY2tfbnVtID0gbnVtOwotICAgIG5ld2l0ZW0tPml0ZW0gPSBpdGVtOwotICAgIGlmICh0aGVxdWV1ZSkgewotICAgICAgICBmb3IgKHB0ciA9IHRoZXF1ZXVlOyBwdHIgJiYgcHRyLT5uZXh0OyBwdHIgPSBwdHItPm5leHQpIHsKLSAgICAgICAgfQotICAgICAgICBwdHItPm5leHQgPSBuZXdpdGVtOwotICAgICAgICBuZXdpdGVtLT5wcmV2ID0gcHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoZXF1ZXVlID0gbmV3aXRlbTsKLSAgICB9Ci0gICAgREVCVUdJRigiZHVtcF9zZW5kX2NhbGxiYWNrX3RyYW5zcG9ydCIpIHsKLSAgICAgICAgY2FsbGJhY2tfZGVidWdfcGR1KCJkdW1wX3NlbmRfY2FsbGJhY2tfdHJhbnNwb3J0IiwgaXRlbS0+cGR1KTsKLSAgICB9Ci19Ci0KLW5ldHNubXBfY2FsbGJhY2tfcGFzcyAqCi1jYWxsYmFja19wb3BfcXVldWUoaW50IG51bSkKLXsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKmNwOwotICAgIGNhbGxiYWNrX3F1ZXVlICpwdHI7Ci0KLSAgICBmb3IgKHB0ciA9IHRoZXF1ZXVlOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAocHRyLT5jYWxsYmFja19udW0gPT0gbnVtKSB7Ci0gICAgICAgICAgICBpZiAocHRyLT5wcmV2KSB7Ci0gICAgICAgICAgICAgICAgcHRyLT5wcmV2LT5uZXh0ID0gcHRyLT5uZXh0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGVxdWV1ZSA9IHB0ci0+bmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwdHItPm5leHQpIHsKLSAgICAgICAgICAgICAgICBwdHItPm5leHQtPnByZXYgPSBwdHItPnByZXY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjcCA9IHB0ci0+aXRlbTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShwdHIpOwotICAgICAgICAgICAgREVCVUdJRigiZHVtcF9yZWN2X2NhbGxiYWNrX3RyYW5zcG9ydCIpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja19kZWJ1Z19wZHUoImR1bXBfcmVjdl9jYWxsYmFja190cmFuc3BvcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcC0+cGR1KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjcDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLWNoYXIgKgotbmV0c25tcF9jYWxsYmFja19mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15c3R1ZmY7Ci0KLSAgICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBzdHJkdXAoImNhbGxiYWNrOiB1bmtub3duIik7Ci0KLSAgICBteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOwotCi0gICAgaWYgKCFteXN0dWZmKQotICAgICAgICByZXR1cm4gc3RyZHVwKCJjYWxsYmFjazogdW5rbm93biIpOwotCi0gICAgc25wcmludGYoYnVmLCBTUFJJTlRfTUFYX0xFTiwgImNhbGxiYWNrOiAlZCBvbiBmZCAlZCIsCi0gICAgICAgICAgICAgbXlzdHVmZi0+Y2FsbGJhY2tfbnVtLCBteXN0dWZmLT5waXBlZmRzWzBdKTsKLSAgICByZXR1cm4gc3RyZHVwKGJ1Zik7Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLWludAotbmV0c25tcF9jYWxsYmFja19yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgY2hhciBuZXdidWZbMV07Ci0gICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOwotCi0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3JlY3YgZW50ZXJcbiIpKTsKLQotICAgIHdoaWxlIChyYyA8IDApIHsKLSNpZmRlZiBXSU4zMgotCXJjID0gcmVjdmZyb20obXlzdHVmZi0+cGlwZWZkc1swXSwgbmV3YnVmLCAxLCAwLCBOVUxMLCAwKTsKLSNlbHNlCi0JcmMgPSByZWFkKG15c3R1ZmYtPnBpcGVmZHNbMF0sIG5ld2J1ZiwgMSk7Ci0jZW5kaWYKLQlpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0gICAgaWYgKHJjID4gMCkKLSAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgcmMpOwotCi0gICAgaWYgKG15c3R1ZmYtPmxpbmtlZHRvKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlJ3JlIHRoZSBjbGllbnQuICBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiAKLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogbWFsbG9jIHRoZSBzcGFjZSBoZXJlLCBidXQgaXQncyBmaWxsZWQgaW4gYnkKLSAgICAgICAgICogc25tcF9jYWxsYmFja19jcmVhdGVkX3BkdSgpIGJlbG93IAotICAgICAgICAgKi8KLSAgICAgICAgaW50ICAgICAgICAgICAgKnJldHVybm51bSA9IChpbnQgKikgY2FsbG9jKDEsIHNpemVvZihpbnQpKTsKLSAgICAgICAgKm9wYXF1ZSA9IHJldHVybm51bTsKLSAgICAgICAgKm9sZW5ndGggPSBzaXplb2YoaW50KTsKLSAgICB9Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3JlY3YgZXhpdFxuIikpOwotICAgIHJldHVybiByYzsKLX0KLQotCi0KLWludAotbmV0c25tcF9jYWxsYmFja19zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IGZyb20sIHJjID0gLTE7Ci0gICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOwotICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqY3A7Ci0KLSAgICAvKgotICAgICAqIGV4dHJhY3QgdGhlIHBkdSBmcm9tIHRoZSBoYWNrZWQgYnVmZmVyIAotICAgICAqLwotICAgIG5ldHNubXBfdHJhbnNwb3J0ICpvdGhlcl9zaWRlOwotICAgIGNhbGxiYWNrX2hhY2sgICpjaCA9IChjYWxsYmFja19oYWNrICopICogb3BhcXVlOwotICAgIG5ldHNubXBfcGR1ICAgICpwZHUgPSBjaC0+cGR1OwotICAgICpvcGFxdWUgPSBjaC0+b3JpZ190cmFuc3BvcnRfZGF0YTsKLSAgICBTTk1QX0ZSRUUoY2gpOwotCi0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3NlbmQgZW50ZXJcbiIpKTsKLQotICAgIGNwID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NhbGxiYWNrX3Bhc3MpOwotICAgIGlmICghY3ApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGNwLT5wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwotICAgIGlmIChjcC0+cGR1LT50cmFuc3BvcnRfZGF0YSkgewotICAgICAgICAvKgotICAgICAgICAgKiBub3QgbmVlZGVkIGFuZCBub3QgcHJvcGVybHkgZnJlZWQgbGF0ZXIgCi0gICAgICAgICAqLwotICAgICAgICBTTk1QX0ZSRUUoY3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpOwotICAgIH0KLQotICAgIGlmIChjcC0+cGR1LT5mbGFncyAmIFVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0UpCi0gICAgICAgIGNwLT5wZHUtPmZsYWdzIF49IFVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0U7Ci0KLSAgICAvKgotICAgICAqIHB1c2ggdGhlIHNlbnQgcGR1IG9udG8gdGhlIHN0YWNrIAotICAgICAqLwotICAgIC8qCi0gICAgICogQU5EIHNlbmQgYSBib2d1cyBieXRlIHRvIHRoZSByZW1vdGUgY2FsbGJhY2sgcmVjZWl2ZXIncyBwaXBlIAotICAgICAqLwotICAgIGlmIChteXN0dWZmLT5saW5rZWR0bykgewotICAgICAgICAvKgotICAgICAgICAgKiB3ZSdyZSB0aGUgY2xpZW50LCBzZW5kIGl0IHRvIHRoZSBwYXJlbnQgCi0gICAgICAgICAqLwotICAgICAgICBjcC0+cmV0dXJuX3RyYW5zcG9ydF9udW0gPSBteXN0dWZmLT5jYWxsYmFja19udW07Ci0KLSAgICAgICAgb3RoZXJfc2lkZSA9IGZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKG15c3R1ZmYtPmxpbmtlZHRvKTsKLSAgICAgICAgaWYgKCFvdGhlcl9zaWRlKSB7Ci0gICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGNwLT5wZHUpOwotICAgICAgICAgICAgU05NUF9GUkVFKGNwKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0Jd2hpbGUgKHJjIDwgMCkgewotI2lmZGVmIFdJTjMyCi0JICAgIHJjID0gc2VuZHRvKCgobmV0c25tcF9jYWxsYmFja19pbmZvKikgb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sICIgIiwgMSwgMCwgTlVMTCwgMCk7Ci0jZWxzZQotCSAgICByYyA9IHdyaXRlKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sCi0JCSAgICAgICAiICIsIDEpOwotI2VuZGlmCi0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgICAgIGNhbGxiYWNrX3B1c2hfcXVldWUobXlzdHVmZi0+bGlua2VkdG8sIGNwKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UgZG9uJ3QgbmVlZCB0aGUgdHJhbnNwb3J0IGRhdGEgYW55IG1vcmUgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKm9wYXF1ZSkgewotICAgICAgICAgICAgU05NUF9GUkVFKCpvcGFxdWUpOwotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiB3ZSdyZSB0aGUgc2VydmVyLCBzZW5kIGl0IHRvIHRoZSBwZXJzb24gdGhhdCBzZW50IHVzIHRoZSByZXF1ZXN0IAotICAgICAgICAgKi8KLSAgICAgICAgZnJvbSA9ICoqKChpbnQgKiopIG9wYXF1ZSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIGRvbid0IG5lZWQgdGhlIHRyYW5zcG9ydCBkYXRhIGFueSBtb3JlIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCpvcGFxdWUpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRSgqb3BhcXVlKTsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG90aGVyX3NpZGUgPSBmaW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShmcm9tKTsKLSAgICAgICAgaWYgKCFvdGhlcl9zaWRlKSB7Ci0gICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGNwLT5wZHUpOwotICAgICAgICAgICAgU05NUF9GUkVFKGNwKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCXdoaWxlIChyYyA8IDApIHsKLSNpZmRlZiBXSU4zMgotCSAgICByYyA9IHNlbmR0bygoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyopIG90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLCAiICIsIDEsIDAsIE5VTEwsIDApOwotI2Vsc2UKLQkgICAgcmMgPSB3cml0ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKW90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLAotCQkgICAgICAgIiAiLCAxKTsKLSNlbmRpZgotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgICAgICBjYWxsYmFja19wdXNoX3F1ZXVlKGZyb20sIGNwKTsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfc2VuZCBleGl0XG4iKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfY2xvc2UgZW50ZXJcbiIpKTsKLQotI2lmZGVmIFdJTjMyCi0gICAgcmMgID0gY2xvc2Vzb2NrZXQobXlzdHVmZi0+cGlwZWZkc1swXSk7Ci0gICAgcmMgfD0gY2xvc2Vzb2NrZXQobXlzdHVmZi0+cGlwZWZkc1sxXSk7Ci0jZWxzZQotICAgIHJjICA9IGNsb3NlKG15c3R1ZmYtPnBpcGVmZHNbMF0pOwotICAgIHJjIHw9IGNsb3NlKG15c3R1ZmYtPnBpcGVmZHNbMV0pOwotI2VuZGlmCi0KLSAgICByYyB8PSBuZXRzbm1wX3RyYW5zcG9ydF9yZW1vdmVfZnJvbV9saXN0KCZ0cmxpc3QsIHQpOwotCi0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2Nsb3NlIGV4aXRcbiIpKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19hY2NlcHQgZW50ZXJcbiIpKTsKLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYWNjZXB0IGV4aXRcbiIpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgQ2FsbGJhY2stZG9tYWluIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkcgotICogaXMgdGhlIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUKLSAqIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8KLSAqIChhbmQgd2UgbWFrZSB1cCBhIHRlbXBvcmFyeSBuYW1lIGZvciB0aGUgbG9jYWwgZW5kIG9mIHRoZQotICogY29ubmVjdGlvbikuICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2NhbGxiYWNrX3RyYW5zcG9ydChpbnQgdG8pCi17Ci0KLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteWRhdGE7Ci0gICAgaW50ICAgICAgICAgICAgIHJjOwotCi0gICAgLyoKLSAgICAgKiB0cmFuc3BvcnQgCi0gICAgICovCi0gICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOwotICAgIGlmICghdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgotICAgICAqIG91ciBzdHVmZiAKLSAgICAgKi8KLSAgICBteWRhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2FsbGJhY2tfaW5mbyk7Ci0gICAgbXlkYXRhLT5saW5rZWR0byA9IHRvOwotICAgIG15ZGF0YS0+Y2FsbGJhY2tfbnVtID0gKytjYWxsYmFja19jb3VudDsKLSAgICBteWRhdGEtPmRhdGEgPSBOVUxMOwotICAgIHQtPmRhdGEgPSBteWRhdGE7Ci0KLSNpZmRlZiBXSU4zMgotICAgIHJjID0gY3JlYXRlX3dpbnBpcGVfdHJhbnNwb3J0KG15ZGF0YS0+cGlwZWZkcyk7Ci0jZWxzZQotICAgIHJjID0gcGlwZShteWRhdGEtPnBpcGVmZHMpOwotI2VuZGlmCi0gICAgdC0+c29jayA9IG15ZGF0YS0+cGlwZWZkc1swXTsKLQotICAgIGlmIChyYykgewotICAgICAgICBTTk1QX0ZSRUUobXlkYXRhKTsKLSAgICAgICAgU05NUF9GUkVFKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5mX3JlY3YgICAgPSBuZXRzbm1wX2NhbGxiYWNrX3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgID0gbmV0c25tcF9jYWxsYmFja19zZW5kOwotICAgIHQtPmZfY2xvc2UgICA9IG5ldHNubXBfY2FsbGJhY2tfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgID0gbmV0c25tcF9jYWxsYmFja19hY2NlcHQ7Ci0gICAgdC0+Zl9mbXRhZGRyID0gbmV0c25tcF9jYWxsYmFja19mbXRhZGRyOwotCi0gICAgbmV0c25tcF90cmFuc3BvcnRfYWRkX3RvX2xpc3QoJnRybGlzdCwgdCk7Ci0KLSAgICBpZiAodG8pCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaW5pdGlhbGl6ZWQgJWQgbGlua2VkIHRvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBteWRhdGEtPmNhbGxiYWNrX251bSwgdG8pKTsKLSAgICBlbHNlCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLAotICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6ZWQgbWFzdGVyIGxpc3RlbmluZyBvbiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbXlkYXRhLT5jYWxsYmFja19udW0pKTsKLSAgICByZXR1cm4gdDsKLX0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX2hvb2tfcGFyc2UobmV0c25tcF9zZXNzaW9uICogc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwYWNrZXRwdHIsIHNpemVfdCBsZW4pCi17Ci0gICAgaWYgKFNOTVBfTVNHX1JFU1BPTlNFID09IHBkdS0+Y29tbWFuZCB8fAotICAgICAgICBTTk1QX01TR19SRVBPUlQgPT0gcGR1LT5jb21tYW5kKQotICAgICAgICBwZHUtPmZsYWdzIHw9IFVDRF9NU0dfRkxBR19SRVNQT05TRV9QRFU7Ci0gICAgZWxzZQotICAgICAgICBwZHUtPmZsYWdzICY9ICh+VUNEX01TR19GTEFHX1JFU1BPTlNFX1BEVSk7Ci0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX2hvb2tfYnVpbGQobmV0c25tcF9zZXNzaW9uICogc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogcHRrLCBzaXplX3QgKiBsZW4pCi17Ci0gICAgLyoKLSAgICAgKiB2ZXJ5IGdyb3NzIGhhY2ssIGFzIHRoaXMgaXMgcGFzc2VkIGxhdGVyIHRvIHRoZSB0cmFuc3BvcnRfc2VuZAotICAgICAqIGZ1bmN0aW9uIAotICAgICAqLwotICAgIGNhbGxiYWNrX2hhY2sgICpjaCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2FsbGJhY2tfaGFjayk7Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2J1aWxkIGVudGVyXG4iKSk7Ci0gICAgY2gtPnBkdSA9IHBkdTsKLSAgICBjaC0+b3JpZ190cmFuc3BvcnRfZGF0YSA9IHBkdS0+dHJhbnNwb3J0X2RhdGE7Ci0gICAgcGR1LT50cmFuc3BvcnRfZGF0YSA9IGNoOwotICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7Ci0gICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgotICAgICAgICBpZiAocGR1LT5tYXhfcmVwZXRpdGlvbnMgPCAwKSB7Ci0gICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfUkVQRVRJVElPTlM7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBkdS0+bm9uX3JlcGVhdGVycyA8IDApIHsKLSAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRVBFQVRFUlM7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKLSAgICBjYXNlIFNOTVBfTVNHX1RSQVA6Ci0gICAgY2FzZSBTTk1QX01TR19UUkFQMjoKLSAgICAgICAgcGR1LT5mbGFncyAmPSAoflVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0UpOwotICAgICAgICAvKgotICAgICAgICAgKiBGYWxsdGhyb3VnaAotICAgICAgICAgKi8KLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAocGR1LT5lcnJzdGF0ID09IFNOTVBfREVGQVVMVF9FUlJTVEFUKQotICAgICAgICAgICAgcGR1LT5lcnJzdGF0ID0gMDsKLSAgICAgICAgaWYgKHBkdS0+ZXJyaW5kZXggPT0gU05NUF9ERUZBVUxUX0VSUklOREVYKQotICAgICAgICAgICAgcGR1LT5lcnJpbmRleCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qCi0gICAgICogQ29weSBtaXNzaW5nIHZhbHVlcyBmcm9tIHNlc3Npb24gZGVmYXVsdHMKLSAgICAgKi8KLSAgICBzd2l0Y2ggKHBkdS0+dmVyc2lvbikgewotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0gICAgY2FzZSBTTk1QX1ZFUlNJT05fMToKLSNlbmRpZgotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotICAgIGNhc2UgU05NUF9WRVJTSU9OXzJjOgotI2VuZGlmCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgICAgIGlmIChwZHUtPmNvbW11bml0eV9sZW4gPT0gMCkgewotICAgICAgICAgICAgaWYgKHNwLT5jb21tdW5pdHlfbGVuID09IDApIHsKLSAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfQ09NTVVOSVRZOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBkdS0+Y29tbXVuaXR5ID0gKHVfY2hhciAqKSBtYWxsb2Moc3AtPmNvbW11bml0eV9sZW4pOwotICAgICAgICAgICAgaWYgKHBkdS0+Y29tbXVuaXR5ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVtbW92ZShwZHUtPmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgc3AtPmNvbW11bml0eSwgc3AtPmNvbW11bml0eV9sZW4pOwotICAgICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3AtPmNvbW11bml0eV9sZW47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIFNOTVBfVkVSU0lPTl8zOgotICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWVMZW4gPT0gMCkgewotCSAgcGR1LT5zZWN1cml0eU5hbWUgPSAoY2hhciAqKW1hbGxvYyhzcC0+c2VjdXJpdHlOYW1lTGVuKTsKLSAgICAgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lbW1vdmUocGR1LT5zZWN1cml0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBzcC0+c2VjdXJpdHlOYW1lLCBzcC0+c2VjdXJpdHlOYW1lTGVuKTsKLSAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuID0gc3AtPnNlY3VyaXR5TmFtZUxlbjsKLSAgICAgICAgfQotICAgICAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsID09IC0xKQotICAgICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gc3AtPnNlY3VyaXR5TW9kZWw7Ci0gICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TGV2ZWwgPT0gMCkKLSAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlMZXZlbCA9IHNwLT5zZWN1cml0eUxldmVsOwotICAgICAgICAvKiBXSEFUIEVMU0UgPz8gKi8KLSAgICB9Ci0gICAgcHRrWzBdID0gMDsKLSAgICAqbGVuID0gMTsKLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYnVpbGQgZXhpdFxuIikpOwotICAgIHJldHVybiAxOwotfQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfY2hlY2tfcGFja2V0KHVfY2hhciAqIHBrdCwgc2l6ZV90IGxlbikKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotbmV0c25tcF9wZHUgICAgKgotbmV0c25tcF9jYWxsYmFja19jcmVhdGVfcGR1KG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlLCBzaXplX3Qgb2xlbmd0aCkKLXsKLSAgICBuZXRzbm1wX3BkdSAgICAqcGR1OwotICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqY3AgPQotICAgICAgICBjYWxsYmFja19wb3BfcXVldWUoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdHJhbnNwb3J0LT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19udW0pOwotICAgIGlmICghY3ApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBkdSA9IGNwLT5wZHU7Ci0gICAgcGR1LT50cmFuc3BvcnRfZGF0YSA9IG9wYXF1ZTsKLSAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCA9IG9sZW5ndGg7Ci0gICAgaWYgKG9wYXF1ZSkgICAgICAgICAgICAgICAgIC8qIGlmIGNyZWF0ZWQsIHdlJ3JlIHRoZSBzZXJ2ZXIgKi8KLSAgICAgICAgKigoaW50ICopIG9wYXF1ZSkgPSBjcC0+cmV0dXJuX3RyYW5zcG9ydF9udW07Ci0gICAgU05NUF9GUkVFKGNwKTsKLSAgICByZXR1cm4gcGR1OwotfQotCi1uZXRzbm1wX3Nlc3Npb24gKgotbmV0c25tcF9jYWxsYmFja19vcGVuKGludCBhdHRhY2hfdG8sCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICgqcmV0dXJuX2Z1bmMpIChpbnQgb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbWFnaWMpLAotICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKQotewotICAgIG5ldHNubXBfc2Vzc2lvbiBjYWxsYmFja19zZXNzLCAqY2FsbGJhY2tfc3M7Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKmNhbGxiYWNrX3RyOwotCi0gICAgY2FsbGJhY2tfdHIgPSBuZXRzbm1wX2NhbGxiYWNrX3RyYW5zcG9ydChhdHRhY2hfdG8pOwotICAgIHNubXBfc2Vzc19pbml0KCZjYWxsYmFja19zZXNzKTsKLSAgICBjYWxsYmFja19zZXNzLmNhbGxiYWNrID0gcmV0dXJuX2Z1bmM7Ci0gICAgaWYgKGF0dGFjaF90bykgewotICAgICAgICAvKgotICAgICAgICAgKiBjbGllbnQgCi0gICAgICAgICAqLwotICAgICAgICAvKgotICAgICAgICAgKiB0cnlzZXNzLmNvbW11bml0eSA9ICh1X2NoYXIgKikgY2FsbGJhY2tfc3M7IAotICAgICAgICAgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjYWxsYmFja19zZXNzLmlzQXV0aG9yaXRhdGl2ZSA9IFNOTVBfU0VTU19BVVRIT1JJVEFUSVZFOwotICAgIH0KLSAgICBjYWxsYmFja19zZXNzLnJlbW90ZV9wb3J0ID0gMDsKLSAgICBjYWxsYmFja19zZXNzLnJldHJpZXMgPSAwOwotICAgIGNhbGxiYWNrX3Nlc3MudGltZW91dCA9IDMwMDAwMDAwOwotICAgIGNhbGxiYWNrX3Nlc3MudmVyc2lvbiA9IFNOTVBfREVGQVVMVF9WRVJTSU9OOyAgICAgICAvKiAobW9zdGx5KSBib2d1cyAqLwotICAgIGNhbGxiYWNrX3NzID0gc25tcF9hZGRfZnVsbCgmY2FsbGJhY2tfc2VzcywgY2FsbGJhY2tfdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmVfcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfaG9va19wYXJzZSwgZnBvc3RfcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfaG9va19idWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jaGVja19wYWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfY3JlYXRlX3BkdSk7Ci0gICAgaWYgKGNhbGxiYWNrX3NzKQotICAgICAgICBjYWxsYmFja19zcy0+bG9jYWxfcG9ydCA9Ci0gICAgICAgICAgICAoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSBjYWxsYmFja190ci0+ZGF0YSktPmNhbGxiYWNrX251bTsKLSAgICByZXR1cm4gY2FsbGJhY2tfc3M7Ci19Ci0KLQotCi12b2lkCi1uZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3Qodm9pZCkKLXsKLQotICAgIG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKmxpc3QgPSB0cmxpc3QsICpuZXh0ID0gTlVMTDsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHIgPSBOVUxMOwotCi0gICAgREVCVUdNU0dUTCgoImNhbGxiYWNrX2NsZWFyIiwgImNhbGxlZCBuZXRzbm1wX2NhbGxiYWNrX2NsZWFyX2xpc3QoKVxuIikpOwotICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsKLQluZXh0ID0gbGlzdC0+bmV4dDsKLQl0ciA9IGxpc3QtPnRyYW5zcG9ydDsKLQotCWlmICh0ciAhPSBOVUxMKSB7Ci0JICAgIHRyLT5mX2Nsb3NlKHRyKTsKLSAgCSAgICBuZXRzbm1wX3RyYW5zcG9ydF9yZW1vdmVfZnJvbV9saXN0KCZ0cmxpc3QsIHRyKTsKLQkgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0cik7Ci0JfQotCWxpc3QgPSBuZXh0OwotICAgIH0KLSAgICB0cmxpc3QgPSBOVUxMOwotCi19Ci0KLSNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcElQWERvbWFpbi5jIGIvc25tcGxpYi9zbm1wSVBYRG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYWZkNWMuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wSVBYRG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmg+Ci0KLSNkZWZpbmUgU05NUF9JUFhfREVGQVVMVF9QT1JUCTM2ODc5ICAgLyogIFNwZWNpZmllZCBpbiBSRkMgMTQyMC4gICovCi1zdGF0aWMgbmV0c25tcF90ZG9tYWluIGlweERvbWFpbjsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfaXB4X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2lweCAqdG8gPSBOVUxMOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pcHggKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2lweCAqKSB0LT5kYXRhOwotICAgIH0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJJUFg6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIHRtcFs2NF07Ci0gICAgICAgIHNwcmludGYodG1wLCAiSVBYOiAlMDhYOiUwMlglMDJYJTAyWCUwMlglMDJYJTAyWC8laHUiLAotICAgICAgICAgICAgICAgIG50b2hsKHRvLT5zaXB4X25ldHdvcmspLCB0by0+c2lweF9ub2RlWzBdLAotICAgICAgICAgICAgICAgIHRvLT5zaXB4X25vZGVbMV0sIHRvLT5zaXB4X25vZGVbMl0sIHRvLT5zaXB4X25vZGVbM10sCi0gICAgICAgICAgICAgICAgdG8tPnNpcHhfbm9kZVs0XSwgdG8tPnNpcHhfbm9kZVs1XSwgbnRvaHModG8tPnNpcHhfcG9ydCkpOwotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2lweF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludAkJICAgICByYyA9IC0xOwotICAgIHNvY2tsZW5fdAkgICAgIGZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotICAgICAgICBpZiAoZnJvbSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbXNldChmcm9tLCAwLCBmcm9tbGVuKTsKLSAgICAgICAgfQotCi0Jd2hpbGUgKHJjIDwgMCkgewotCSAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIGZyb20sICZmcm9tbGVuKTsKLQkgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkgICAgYnJlYWs7Ci0JICB9Ci0JfQotCi0gICAgICAgIGlmIChyYyA+PSAwKSB7Ci0gICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2lweF9mbXRhZGRyKE5VTEwsIGZyb20sIGZyb21sZW4pOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzKGZyb20gJXMpXG4iLAotCQkJdC0+c29jaywgcmMsIHN0cikpOwotICAgICAgICAgICAgZnJlZShzdHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgfQotICAgICAgICAqb3BhcXVlID0gKHZvaWQgKikgZnJvbTsKLSAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCk7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfaXB4X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCi0JKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfaXB4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKil0bywKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKLSAgICAgICAgZnJlZShzdHIpOwotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCB0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2lweF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBpZiAodC0+c29jayA+PSAwKSB7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIElQWC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCi0gKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKLSAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfaXB4X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpcHhfZmFtaWx5ICE9IEFGX0lQWCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHN0ciA9IG5ldHNubXBfaXB4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLCAKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyKSk7Ci0gICAgZnJlZShzdHIpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcElQWERvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0gbmV0c25tcElQWERvbWFpbl9sZW47Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KEFGX0lQWCwgU09DS19ER1JBTSwgQUZfSVBYKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxMik7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KCYodC0+bG9jYWxbMDBdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25ldHdvcmspLCA0KTsKLSAgICAgICAgbWVtY3B5KCYodC0+bG9jYWxbMDRdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25vZGUpLCA2KTsKLSAgICAgICAgbWVtY3B5KCYodC0+bG9jYWxbMTBdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X3BvcnQpLCAyKTsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gMTI7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQotICAgICAgICAgKiBnaXZlbiBhZGRyZXNzICh3aGljaCBtYXkgaW5jbHVkZSBhIHBhcnRpY3VsYXIgbmV0d29yayBhbmQvb3Igbm9kZQotICAgICAgICAgKiBhZGRyZXNzLCBidXQgZGVmaW5pdGVseSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyKS4KLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfaXB4X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHQtPmRhdGEgPSBOVUxMOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxMik7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSgmKHQtPnJlbW90ZVswMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbmV0d29yayksIDQpOwotICAgICAgICBtZW1jcHkoJih0LT5yZW1vdGVbMDRdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25vZGUpLCA2KTsKLSAgICAgICAgbWVtY3B5KCYodC0+cmVtb3RlWzEwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9wb3J0KSwgMik7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSAxMjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50IHNlc3Npb24uICBTYXZlIHRoZSBhZGRyZXNzIGluIHRoZQotICAgICAgICAgKiB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlciB1c2UgYnkgc25tcF9pcHhfc2VuZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotICAgICAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTWF4aW11bSBzaXplIG9mIGFuIElQWCBQRFUgaXMgNTc2IGJ5dGVzIGluY2x1ZGluZyBhIDMwLWJ5dGUgaGVhZGVyLgotICAgICAqIFJpZGljdWxvdXMhICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSA1NzYgLSAzMDsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9pcHhfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9pcHhfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9pcHhfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfaXB4X2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotCi0KLS8qCi0gKiBBdHRlbXB0IHRvIHBhcnNlIGEgc3RyaW5nIG9mIHRoZSBmb3JtIFslMDh4XTolMTJ4Wy8lZF0gd2hlcmUgdGhlIHBhcnRzCi0gKiBhcmUgdGhlIG5ldHdvcmsgbnVtYmVyLCB0aGUgbm9kZSBhZGRyZXNzIGFuZCB0aGUgcG9ydCBpbiB0aGF0IG9yZGVyLiAgCi0gKi8KLQotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2lweDIoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgY29uc3QgY2hhciAqcGVlcm5hbWUsCi0JCSAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIGNoYXIgICAgICAgICAgICppbnB1dCA9IE5VTEwsICpkZWYgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgICAgICpuZXR3b3JrLCAqbm9kZSwgKnBvcnQ7Ci0gICAgY2hhciAgICAgICAgICAgKnRtcDsKLSAgICB1bnNpZ25lZCBsb25nICAgaTsKLQotICAgIGlmIChhZGRyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKLQkJImFkZHIgJXAsIHBlZXJuYW1lIFwiJXNcIiBkZWZhdWx0X3RhcmdldCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgYWRkciwgcGVlcm5hbWUgPyBwZWVybmFtZSA6ICJbTklMXSIsCi0JCWRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7Ci0KLSAgICBhZGRyLT5zaXB4X2ZhbWlseSA9IEFGX0lQWDsKLSAgICBhZGRyLT5zaXB4X3R5cGUgPSA0OyAgICAgICAgLyogIFNwZWNpZmllZCBpbiBSRkMgMTQyMC4gICovCi0KLSAgICBuZXR3b3JrID0gaW5wdXQgPSBzdHJkdXAocGVlcm5hbWUgPyBwZWVybmFtZSA6ICIiKTsKLSAgICB0bXAgPSBzdHJjaHIobmV0d29yaywgJzonKTsKLSAgICBpZiAodG1wICE9IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIk5vZGUgaWRlbnRpZmllZFxuIikpOwotICAgICAgICAqdG1wKysgPSAnXDAnOwotCW5vZGUgPSB0bXA7Ci0gICAgICAgIHRtcCA9IHN0cmNocih0bXAsICcvJyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZSA9IE5VTEw7Ci0gICAgICAgIHRtcCA9IHN0cmNocihuZXR3b3JrLCAnLycpOwotICAgIH0KLSAgICBpZiAodG1wICE9IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIlBvcnQgaWRlbnRpZmllZFxuIikpOwotICAgICAgICAqdG1wKysgPSAnXDAnOwotICAgICAgICBwb3J0ID0gdG1wOwotICAgIH0gZWxzZQotICAgICAgICBwb3J0ID0gTlVMTDsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJBZGRyZXNzOiAlczolcy8lc1xuIiwKLSAgICAgICAgICAgICAgICBuZXR3b3JrID8gbmV0d29yayA6ICJbTklMXSIsIG5vZGUgPyBub2RlIDogIltOSUxdIiwKLSAgICAgICAgICAgICAgICBwb3J0ID8gcG9ydCA6ICJbTklMXSIpKTsKLQotICAgIGRlZiA9IHN0cmR1cChkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIiIpOwotICAgIGlmIChuZXR3b3JrID09IE5VTEwgfHwgKm5ldHdvcmsgPT0gJ1wwJykKLSAgICAgICAgbmV0d29yayA9IGRlZjsKLSAgICB0bXAgPSBzdHJjaHIoZGVmLCAnOicpOwotICAgIGlmICh0bXAgIT0gTlVMTCkgewotICAgICAgICAqdG1wKysgPSAnXDAnOwotCWlmIChub2RlID09IE5VTEwgfHwgKm5vZGUgPT0gJ1wwJykKLSAgICAgICAgICAgIG5vZGUgPSB0bXA7Ci0gICAgICAgIHRtcCA9IHN0cmNocih0bXAsICcvJyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRtcCA9IHN0cmNocihkZWYsICcvJyk7Ci0gICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgICAgICp0bXArKyA9ICdcMCc7Ci0gICAgICAgIGlmIChwb3J0ID09IE5VTEwgfHwgKnBvcnQgPT0gJ1wwJykKLSAgICAgICAgICAgIHBvcnQgPSB0bXA7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIkFkZHJlc3M6ICVzOiVzLyVzXG4iLAotICAgICAgICAgICAgICAgIG5ldHdvcmsgPyBuZXR3b3JrIDogIltOSUxdIiwgbm9kZSA/IG5vZGUgOiAiW05JTF0iLAotICAgICAgICAgICAgICAgIHBvcnQgPyBwb3J0IDogIltOSUxdIikpOwotCi0gICAgaWYgKG5ldHdvcmsgPT0gTlVMTCB8fCAqbmV0d29yayA9PSAnXDAnKQotICAgICAgICBuZXR3b3JrID0gIjAiOwotCi0gICAgaWYgKG5vZGUgPT0gTlVMTCB8fCAqbm9kZSA9PSAnXDAnKQotICAgICAgICBub2RlID0gIjAwMDAwMDAwMDAwMCI7Ci0KLSAgICBpZiAocG9ydCA9PSBOVUxMIHx8ICpwb3J0ID09ICdcMCcpCi0jZGVmaW5lIHZhbCh4KSBfX1NUUklORyh4KQotICAgICAgICBwb3J0ID0gdmFsKFNOTVBfSVBYX0RFRkFVTFRfUE9SVCk7Ci0jdW5kZWYgdmFsCi0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiQWRkcmVzczogJXM6JXMvJXNcbiIsCi0gICAgICAgICAgICAgICAgbmV0d29yayA/IG5ldHdvcmsgOiAiW05JTF0iLCBub2RlID8gbm9kZSA6ICJbTklMXSIsCi0gICAgICAgICAgICAgICAgcG9ydCA/IHBvcnQgOiAiW05JTF0iKSk7Ci0KLSAgICBpZihzc2NhbmYobmV0d29yaywgIiU4bHglKmMiLCAmaSkgPT0gMSkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAibmV0d29yayBwYXJzZWQgb2theVxuIikpOwotICAgICAgICBhZGRyLT5zaXB4X25ldHdvcmsgPSBodG9ubChpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAotICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIG5ldHdvcmsgcGFydCBvZiBhZGRyZXNzXG4iKSk7Ci0gICAgICAgIGZyZWUoZGVmKTsKLSAgICAgICAgZnJlZShpbnB1dCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmKHNzY2FuZihub2RlLCAiJTJoaHglMmhoeCUyaGh4JTJoaHglMmhoeCUyaGh4JSpjIiwKLSAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVswXSwgJmFkZHItPnNpcHhfbm9kZVsxXSwKLSAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVsyXSwgJmFkZHItPnNpcHhfbm9kZVszXSwKLSAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVs0XSwgJmFkZHItPnNpcHhfbm9kZVs1XSkgPT0gNikgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAibm9kZSBwYXJzZWQgb2theVxuIikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCi0gICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugbm9kZSBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKLSAgICAgICAgZnJlZShkZWYpOwotICAgICAgICBmcmVlKGlucHV0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYoc3NjYW5mKHBvcnQsICIlbHUlKmMiLCAmaSkgPT0gMSkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAicG9ydCBwYXJzZWQgb2theVxuIikpOwotICAgICAgICBhZGRyLT5zaXB4X3BvcnQgPSBodG9ucyhpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAotICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHBvcnQgcGFydCBvZiBhZGRyZXNzXG4iKSk7Ci0gICAgICAgIGZyZWUoZGVmKTsKLSAgICAgICAgZnJlZShpbnB1dCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGZyZWUoZGVmKTsKLSAgICBmcmVlKGlucHV0KTsKLSAgICByZXR1cm4gMTsKLX0KLQotCi0KLWludAotbmV0c25tcF9zb2NrYWRkcl9pcHgoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgY29uc3QgY2hhciAqcGVlcm5hbWUpCi17Ci0gICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaXB4MihhZGRyLCBwZWVybmFtZSwgTlVMTCk7Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2lweF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggYWRkcjsKLQotICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2lweDIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX2lweF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2lweF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaXB4IGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gMTIpIHsKLSAgICAgICAgYWRkci5zaXB4X2ZhbWlseSA9IEFGX0lQWDsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaXB4X25ldHdvcmspLCAmKG9bMDBdKSwgNCk7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2lweF9ub2RlKSwgJihvWzA0XSksIDYpOwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpcHhfcG9ydCksICYob1sxMF0pLCAyKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfaXB4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0KLXZvaWQKLW5ldHNubXBfaXB4X2N0b3Iodm9pZCkKLXsKLSAgICBpcHhEb21haW4ubmFtZSA9IG5ldHNubXBJUFhEb21haW47Ci0gICAgaXB4RG9tYWluLm5hbWVfbGVuZ3RoID0gbmV0c25tcElQWERvbWFpbl9sZW47Ci0gICAgaXB4RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKLSAgICBpcHhEb21haW4ucHJlZml4WzBdID0gImlweCI7Ci0KLSAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgaXB4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX2lweF9jcmVhdGVfdHN0cmluZzsKLSAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfaXB4X2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZpcHhEb21haW4pOwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wU1RERG9tYWluLmMgYi9zbm1wbGliL3NubXBTVEREb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzZWFhNS4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBTVEREb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KLQotb2lkIG5ldHNubXBfc25tcFNURERvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX1NURF9JUCB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiBzdGREb21haW47Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3N0ZF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIGNoYXIgKmJ1ZjsKLSAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsImZvcm1hdHRpbmcgYWRkci4gIGRhdGE9JXhcbiIsdC0+ZGF0YSkpOwotICAgIGlmICh0LT5kYXRhKSB7Ci0gICAgICAgIG5ldHNubXBfc3RkX2RhdGEgKmRhdGEgPSAobmV0c25tcF9zdGRfZGF0YSopdC0+ZGF0YTsKLSAgICAgICAgYnVmID0gKGNoYXIqKW1hbGxvYyhTTk1QX01BWEJVRl9NRURJVU0pOwotICAgICAgICBpZiAoIWJ1ZikKLSAgICAgICAgICAgIHJldHVybiBzdHJkdXAoIlNUREluT3V0Iik7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZiwgU05NUF9NQVhCVUZfTUVESVVNLCAiU1REOiVzIiwgZGF0YS0+cHJvZyk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiICBmb3JtYXR0ZWQ6PSVzXG4iLGJ1ZikpOwotICAgICAgICByZXR1cm4gYnVmOwotICAgIH0KLSAgICByZXR1cm4gc3RyZHVwKCJTVERJbk91dCIpOwotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3N0ZF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJyZWN2IG9uIHNvY2sgJWQuICBkYXRhPSV4XG4iLHQtPnNvY2ssIHQtPmRhdGEpKTsKLSAgICB3aGlsZSAocmMgPCAwKSB7Ci0gICAgICAgIHJjID0gcmVhZCh0LT5zb2NrLCBidWYsIHNpemUpOwotICAgICAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsIiAgYnl0ZXM6ICVkLlxuIiwgcmMpKTsKLSAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc3RkIiwgIiByZWFkIG9uIGZkICVkIGZhaWxlZDogJWQgKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocmMgPT0gMCkgewotICAgICAgICAgICAgLyogMCBpbnB1dCBpcyBwcm9iYWJseSBiYWQgc2luY2Ugd2Ugc2VsZWN0ZWQgb24gaXQgKi8KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zdGQiLCAicmVhZCBvbiBzdGRpbiBnb3QgJWQgYnl0ZXNcbiIsIHJjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9zdGRfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwic2VuZCBvbiBzb2NrLiAgZGF0YT0leFxuIiwgdC0+ZGF0YSkpOwotICAgIHdoaWxlIChyYyA8IDApIHsKLSAgICAgICAgaWYgKHQtPmRhdGEpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc3RkX2RhdGEgKmRhdGEgPSAobmV0c25tcF9zdGRfZGF0YSopdC0+ZGF0YTsKLSAgICAgICAgICAgIHJjID0gd3JpdGUoZGF0YS0+b3V0ZmQsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBzdHJhaWdodCB0byBzdGRvdXQgKi8KLSAgICAgICAgICAgIHJjID0gd3JpdGUoMSwgYnVmLCBzaXplKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHNubXBfc3RkX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiY2xvc2UuICBkYXRhPSV4XG4iLCB0LT5kYXRhKSk7Ci0gICAgaWYgKHQtPmRhdGEpIHsKLSAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YSA9IChuZXRzbm1wX3N0ZF9kYXRhKil0LT5kYXRhOwotICAgICAgICBjbG9zZShkYXRhLT5vdXRmZCk7Ci0gICAgICAgIGNsb3NlKHQtPnNvY2spOwotCi0gICAgICAgIC8qIGtpbGwgdGhlIGNoaWxkIHRvbyAqLwotICAgICAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsIiBraWxsaW5nICVkXG4iLCBkYXRhLT5jaGlsZHBpZCkpOwotICAgICAgICBraWxsKGRhdGEtPmNoaWxkcGlkLCBTSUdURVJNKTsKLSAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAgIGtpbGwoZGF0YS0+Y2hpbGRwaWQsIFNJR0tJTEwpOwotICAgICAgICAvKiBYWFg6IHNldCBhbiBhbGFybSB0byBraWxsIGhhcmRlciB0aGUgY2hpbGQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICAvKiBjbG9zZSBzdGRvdXQvaW4gKi8KLSAgICAgICAgY2xvc2UoMSk7Ci0gICAgICAgIGNsb3NlKDApOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfc3RkX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsIiBhY2NlcHQgZGF0YT0leFxuIiwgdC0+ZGF0YSkpOwotICAgIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogT3BlbiBhIFNURElOL1NURE9VVCAtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLgotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfc3RkX3RyYW5zcG9ydChjb25zdCBjaGFyICppbnN0cmluZywgc2l6ZV90IGluc3RyaW5nX2xlbiwKLQkJICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQ7Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX3NubXBTVEREb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9Ci0gICAgICAgIHNpemVvZihuZXRzbm1wX3NubXBTVEREb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfc25tcFNURERvbWFpblswXSk7Ci0KLSAgICB0LT5zb2NrID0gMDsKLSAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNIHwgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRDsKLQotICAgIC8qCi0gICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCi0gICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLiAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9zdGRfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9zdGRfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9zdGRfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfc3RkX2FjY2VwdDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF9zdGRfZm10YWRkcjsKLQotICAgIC8qCi0gICAgICogaWYgaW5zdHJpbmcgaXMgbm90IG51bGwgbGVuZ3RoLCBpdCBzcGVjaWZpZXMgYSBwYXRoIHRvIGEgcHJvZwotICAgICAqIFhYWDogcGx1cyBhcmdzCi0gICAgICovCi0gICAgaWYgKGluc3RyaW5nX2xlbiA9PSAwICYmIGRlZmF1bHRfdGFyZ2V0ICE9IE5VTEwpIHsKLQlpbnN0cmluZyA9IGRlZmF1bHRfdGFyZ2V0OwotCWluc3RyaW5nX2xlbiA9IHN0cmxlbihkZWZhdWx0X3RhcmdldCk7Ci0gICAgfQotCi0gICAgaWYgKGluc3RyaW5nX2xlbiAhPSAwKSB7Ci0gICAgICAgIGludCBpbmZkWzJdLCBvdXRmZFsyXTsgIC8qIHNvY2tldHMgdG8gYW5kIGZyb20gdGhlIGNsaWVudCAqLwotICAgICAgICBpbnQgY2hpbGRwaWQ7Ci0KLSAgICAgICAgaWYgKHBpcGUoaW5mZCkgfHwgcGlwZShvdXRmZCkpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBuZWVkZWQgcGlwZXMgZm9yIGEgU1REIHRyYW5zcG9ydCIpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hpbGRwaWQgPSBmb3JrKCk7Ci0gICAgICAgIC8qIHBhcmVudHBpZCA9PiBjaGlsZHBpZCAqLwotICAgICAgICAvKiBpbmZkWzFdICAgPT4gaW5mZFswXSAqLwotICAgICAgICAvKiBvdXRmZFswXSAgPD0gb3V0ZmRbMV0gKi8KLQotICAgICAgICBpZiAoY2hpbGRwaWQpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc3RkX2RhdGEgKmRhdGE7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIHdlJ3JlIGluIHRoZSBwYXJlbnQgKi8KLSAgICAgICAgICAgIGNsb3NlKGluZmRbMF0pOwotICAgICAgICAgICAgY2xvc2Uob3V0ZmRbMV0pOwotCi0gICAgICAgICAgICBkYXRhID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3N0ZF9kYXRhKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzbm1wU1RERG9tYWluOiBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHQtPmRhdGEgPSBkYXRhOwotICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zdGRfZGF0YSk7Ci0gICAgICAgICAgICB0LT5zb2NrID0gb3V0ZmRbMF07Ci0gICAgICAgICAgICBkYXRhLT5wcm9nID0gc3RyZHVwKGluc3RyaW5nKTsKLSAgICAgICAgICAgIGRhdGEtPm91dGZkID0gaW5mZFsxXTsKLSAgICAgICAgICAgIGRhdGEtPmNoaWxkcGlkID0gY2hpbGRwaWQ7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsInBhcmVudC4gIGRhdGE9JXhcbiIsIHQtPmRhdGEpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHdlJ3JlIGluIHRoZSBjaGlsZCAqLwotCi0gICAgICAgICAgICAvKiBjbG9zZSBzdGRpbiAqLwotICAgICAgICAgICAgY2xvc2UoMCk7Ci0gICAgICAgICAgICAvKiBjb3B5IHBpcGUgb3V0cHV0IHRvIHN0ZG91dCAqLwotICAgICAgICAgICAgZHVwKGluZmRbMF0pOwotCi0gICAgICAgICAgICAvKiBjbG9zZSBzdGRvdXQgKi8KLSAgICAgICAgICAgIGNsb3NlKDEpOwotICAgICAgICAgICAgLyogY29weSBwaXBlIG91dHB1dCB0byBzdGRpbiAqLwotICAgICAgICAgICAgZHVwKG91dGZkWzFdKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyogY2xvc2UgYWxsIHRoZSBwaXBlcyB0aGVtc2VsdmVzICovCi0gICAgICAgICAgICBjbG9zZShpbmZkWzBdKTsKLSAgICAgICAgICAgIGNsb3NlKGluZmRbMV0pOwotICAgICAgICAgICAgY2xvc2Uob3V0ZmRbMF0pOwotICAgICAgICAgICAgY2xvc2Uob3V0ZmRbMV0pOwotCi0gICAgICAgICAgICAvKiBjYWxsIGV4ZWMgKi8KLSAgICAgICAgICAgIHN5c3RlbShpbnN0cmluZyk7Ci0gICAgICAgICAgICAvKiBYWFg6IFRPRE86IHVzZSBleGVjIGZvcm0gaW5zdGVhZDsgbmVlZHMgYXJncyAqLwotICAgICAgICAgICAgLyogZXhlY3YoaW5zdHJpbmcsIE5VTEwpOyAqLwotICAgICAgICAgICAgZXhpdCgwKTsKLQotICAgICAgICAgICAgLyogYWNrLi4uICB3ZSBzaG91bGQgbmV2ZXIgZXZlciBnZXQgaGVyZSAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNURCB0cmFuc3BvcnQgcmV0dXJuZWQgYWZ0ZXIgZXhlY3YoKVxuIik7Ci0gICAgICAgIH0KLSAgICB9ICAgICAgICAgICAgCi0KLSAgICByZXR1cm4gdDsKLX0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9zdGRfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqaW5zdHJpbmcsIGludCBsb2NhbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHJldHVybiBuZXRzbm1wX3N0ZF90cmFuc3BvcnQoaW5zdHJpbmcsIHN0cmxlbihpbnN0cmluZyksIGRlZmF1bHRfdGFyZ2V0KTsKLX0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9zdGRfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgcmV0dXJuIG5ldHNubXBfc3RkX3RyYW5zcG9ydCgoY29uc3QgY2hhciopbywgb19sZW4sIE5VTEwpOwotfQotCi12b2lkCi1uZXRzbm1wX3N0ZF9jdG9yKHZvaWQpCi17Ci0gICAgc3RkRG9tYWluLm5hbWUgPSBuZXRzbm1wX3NubXBTVEREb21haW47Ci0gICAgc3RkRG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc25tcFNURERvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICBzdGREb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIgKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKLSAgICBzdGREb21haW4ucHJlZml4WzBdID0gInN0ZCI7Ci0KLSAgICBzdGREb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgc3RkRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3N0ZF9jcmVhdGVfdHN0cmluZzsKLSAgICBzdGREb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfc3RkX2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZzdGREb21haW4pOwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wVENQRG9tYWluLmMgYi9zbm1wbGliL3NubXBUQ1BEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiNmY5NC4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBUQ1BEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0ZDTlRMX0gKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oPgotCi0vKiBDb3BpZWQgZnJvbSBzbm1wVURQRG9tYWluLmMgKi8KLXR5cGVkZWYgc3RydWN0IG5ldHNubXBfdWRwX2FkZHJfcGFpcl9zIHsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3RlX2FkZHI7Ci0gICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkcjsKLX0gbmV0c25tcF91ZHBfYWRkcl9wYWlyOwotCi1vaWQgbmV0c25tcF9zbm1wVENQRG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVENQX0lQIH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHRjcERvbWFpbjsKLQotLyoKLSAqIE5vdCBzdGF0aWMgc2luY2UgaXQgaXMgbmVlZGVkIGhlcmUgYXMgd2VsbCBhcyBpbiBzbm1wVURQRG9tYWluLCBidXQgbm90Ci0gKiBwdWJsaWMgZWl0aGVyCi0gKi8KLWludAotbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF90Y3BfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSkgewotCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLQlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIHQtPmRhdGE7Ci0gICAgfQotCi0gICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIlRDUDogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSBOVUxMOwotCWNoYXIgdG1wWzY0XTsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0gICAgICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RyZHVwKCJUQ1A6IHVua25vd24iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNwcmludGYodG1wLCAiVENQOiBbJXNdOiVodSIsCi0gICAgICAgICAgICAgICAgaW5ldF9udG9hKHRvLT5zaW5fYWRkciksIG50b2hzKHRvLT5zaW5fcG9ydCkpOwotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0JCQkgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotCQlicmVhazsKLQkgICAgfQotCSAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsCi0JCQl0LT5zb2NrLCByYykpOwotCX0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmIG9sZW5ndGggIT0gTlVMTCkgewotICAgICAgICBpZiAodC0+ZGF0YV9sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKCpvcGFxdWUgPSBtYWxsb2ModC0+ZGF0YV9sZW5ndGgpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCpvcGFxdWUsIHQtPmRhdGEsIHQtPmRhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IHQtPmRhdGFfbGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3BfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcF9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyICpmYXJlbmQgPSBOVUxMOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgbmV3c29jayA9IC0xOwotI2lmZGVmIFdJTjMyCi0gICAgdV9sb25nICAgICAgICAgIGlvY3Rsc29ja2V0X29wdDsKLSNlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHNvY2tmbGFnczsKLSNlbmRpZgotICAgIHNvY2tsZW5fdCAgICAgICBmYXJlbmRsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLQotICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKiltYWxsb2Moc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotCi0gICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEluZGljYXRlIHRoYXQgdGhlIGFjY2VwdGFuY2Ugb2YgdGhpcyBzb2NrZXQgZmFpbGVkLiAgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZmFyZW5kID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgbmV3c29jayA9IGFjY2VwdCh0LT5zb2NrLCBmYXJlbmQsICZmYXJlbmRsZW4pOwotCi0gICAgICAgIGlmIChuZXdzb2NrIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAotCQkJbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKHQtPmRhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdC0+ZGF0YSA9IGFkZHJfcGFpcjsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKLSAgICAgICAgc3RyID0gbmV0c25tcF90Y3BfZm10YWRkcihOVUxMLCBmYXJlbmQsIGZhcmVuZGxlbik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJhY2NlcHQgc3VjY2VlZGVkIChmcm9tICVzKVxuIiwgc3RyKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgdG8gbWFrZSB0aGUgbmV3IHNvY2tldCBibG9ja2luZy4gIAotICAgICAgICAgKi8KLQotI2lmZGVmIFdJTjMyCi0gICAgICAgIGlvY3Rsc29ja2V0X29wdCA9IDA7Ci0gICAgICAgIGlvY3Rsc29ja2V0KG5ld3NvY2ssIEZJT05CSU8sICZpb2N0bHNvY2tldF9vcHQpOwotI2Vsc2UKLSAgICAgICAgaWYgKChzb2NrZmxhZ3MgPSBmY250bChuZXdzb2NrLCBGX0dFVEZMLCAwKSkgPj0gMCkgewotICAgICAgICAgICAgZmNudGwobmV3c29jaywgRl9TRVRGTCwgKHNvY2tmbGFncyAmIH5PX05PTkJMT0NLKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiY291bGRuJ3QgZl9nZXRmbCBvZiBmZCAlZFxuIixuZXdzb2NrKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcwotICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQotICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19TTkRCVUYsIDEsIDApOwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19SQ1ZCVUYsIDEsIDApOwotCi0gICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgVENQLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKLSAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAotICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3BfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0gICAgaW50IHJjID0gMDsKLQotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKW1hbGxvYyhzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICB0LT5kYXRhID0gYWRkcl9wYWlyOwotICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7Ci0gICAgbWVtY3B5KCYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkciksIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfc25tcFRDUERvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0KLSAgICAgICAgc2l6ZW9mKG5ldHNubXBfc25tcFRDUERvbWFpbikgLyBzaXplb2YobmV0c25tcF9zbm1wVENQRG9tYWluWzBdKTsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOwotCi0gICAgaWYgKGxvY2FsKSB7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgdV9sb25nIGlvY3Rsc29ja2V0X29wdCA9IDE7Ci0jZWxzZQotICAgICAgICBpbnQgc29ja2ZsYWdzID0gMDsKLSNlbmRpZgotICAgICAgICBpbnQgb3B0ID0gMTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgdG8gdGhlIGdpdmVuIAotICAgICAgICAgKiBJUCBhZGRyZXNzICh3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQgYmUKLSAgICAgICAgICogSU5BRERSX0FOWSwgYnV0IHdpbGwgYWx3YXlzIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gIAotICAgICAgICAgKi8KLQotICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKLSAgICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopbWFsbG9jKDYpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3BfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOwotICAgICAgICB0LT5sb2NhbFs0XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzVdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gNjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBXZSBzaG91bGQgc2V0IFNPX1JFVVNFQUREUiB0b28uICAKLSAgICAgICAgICovCi0KLSAgICAgICAgc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICh2b2lkICopJm9wdCwKLQkJICAgc2l6ZW9mKG9wdCkpOwotCi0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3BfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYmUgbGV0dGluZyBzZWxlY3QoKSB0ZWxsIHVzIHdoZW4gY29ubmVjdGlvbnMKLSAgICAgICAgICogYXJlIHJlYWR5IHRvIGJlIGFjY2VwdCgpZWQsIHdlIG5lZWQgdG8gbWFrZSB0aGUgc29ja2V0IG4wbi1ibG9ja2luZwotICAgICAgICAgKiB0byBhdm9pZCB0aGUgcmFjZSBjb25kaXRpb24gZGVzY3JpYmVkIGluIFcuIFIuIFN0ZXZlbnMsIGBgVW5peAotICAgICAgICAgKiBOZXR3b3JrIFByb2dyYW1taW5nIFZvbHVtZSBJIFNlY29uZCBFZGl0aW9uJycsIHBwLiA0MjItLTQsIHdoaWNoCi0gICAgICAgICAqIGNvdWxkIG90aGVyd2lzZSB3ZWRnZSB0aGUgYWdlbnQuCi0gICAgICAgICAqLwotCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgaW9jdGxzb2NrZXRfb3B0ID0gMTsKLSAgICAgICAgaW9jdGxzb2NrZXQodC0+c29jaywgRklPTkJJTywgJmlvY3Rsc29ja2V0X29wdCk7Ci0jZWxzZQotICAgICAgICBzb2NrZmxhZ3MgPSBmY250bCh0LT5zb2NrLCBGX0dFVEZMLCAwKTsKLSAgICAgICAgZmNudGwodC0+c29jaywgRl9TRVRGTCwgc29ja2ZsYWdzIHwgT19OT05CTE9DSyk7Ci0jZW5kaWYKLQotICAgICAgICAvKgotICAgICAgICAgKiBOb3cgc2l0IGhlcmUgYW5kIHdhaXQgZm9yIGNvbm5lY3Rpb25zIHRvIGFycml2ZS4gIAotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGxpc3Rlbih0LT5zb2NrLCBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4pOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3BfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAqIG5vIGJ1ZmZlciBzaXplIG9uIGxpc3RlbiBzb2NrZXQgLSBkb2Vzbid0IG1ha2Ugc2Vuc2UKLSAgICAgICAgICovCi0KLSAgICB9IGVsc2UgewotICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOwotICAgICAgICB0LT5yZW1vdGVbNF0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbNV0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gNjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50LXR5cGUgc2Vzc2lvbiwgc28gYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBmYXIKLSAgICAgICAgICogZW5kLiAgV2UgZG9uJ3QgZ28gbm9uLWJsb2NraW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBvYnZpb3VzIHdoYXQKLSAgICAgICAgICogeW91J2QgdGhlbiBkbyBpZiB5b3UgdHJpZWQgdG8gZG8gc25tcF9zZW5kcyBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICogaGFkIGNvbXBsZXRlZC4gIFNvIHRoaXMgY2FuIGJsb2NrLgotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotCi0gICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCi0gICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCi0gICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQotICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdGNwX3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdGNwX3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdGNwX2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3RjcF9hY2NlcHQ7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdGNwX2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7Ci0KLSAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3RjcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSA2KSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1s0XSA8PCA4KSArIG9bNV07Ci0gICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luX2FkZHIuc19hZGRyKSwgbywgNCk7Ci0gICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0dG1wKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0KLXZvaWQKLW5ldHNubXBfdGNwX2N0b3Iodm9pZCkKLXsKLSAgICB0Y3BEb21haW4ubmFtZSA9IG5ldHNubXBfc25tcFRDUERvbWFpbjsKLSAgICB0Y3BEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zbm1wVENQRG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIHRjcERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhciAqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHRjcERvbWFpbi5wcmVmaXhbMF0gPSAidGNwIjsKLQotICAgIHRjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICB0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdGNwX2NyZWF0ZV90c3RyaW5nOwotICAgIHRjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF90Y3BfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnRjcERvbWFpbik7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMgYi9zbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlN2U4M2YuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQotICAgIC8qCi0gICAgICogV2luZG93cyBJUHY2IHN1cHBvcnQgaXMgcGFydCBvZiBXaW5Tb2NrMiBvbmx5Ci0gICAgICovCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotCi1leHRlcm4gY29uc3QgY2hhciAqaW5ldF9udG9wKGludCwgY29uc3Qgdm9pZCosIGNoYXIqLCBzaXplX3QpOwotCi0jZW5kaWYKLQotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaD4KLQotb2lkIG5ldHNubXBfVENQSVB2NkRvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX1RDUF9JUFY2IH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHRjcDZEb21haW47Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3RjcDZfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICp0byA9IE5VTEw7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImZtdGFkZHI6IHQgPSAlcCwgZGF0YSA9ICVwLCBsZW4gPSAlZFxuIiwgdCwKLSAgICAgICAgICAgICAgICBkYXRhLCBsZW4pKTsKLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHQtPmRhdGE7Ci0gICAgfQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIlRDUC9JUHY2OiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciBhZGRyW0lORVQ2X0FERFJTVFJMRU5dOwotICAgICAgICBjaGFyIHRtcFtJTkVUNl9BRERSU1RSTEVOICsgMThdOwotCi0gICAgICAgIHNwcmludGYodG1wLCAiVENQL0lQdjY6IFslc106JWh1IiwKLSAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICh2b2lkICopICYodG8tPnNpbjZfYWRkciksIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElORVQ2X0FERFJTVFJMRU4pLCBudG9ocyh0by0+c2luNl9wb3J0KSk7Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF90Y3A2X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotCQkJICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLQkJcmV0dXJuIC0xOwotCSAgICB9Ci0JfQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLCB0LT5zb2NrLCByYykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgb2xlbmd0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICh0LT5kYXRhX2xlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGlmICgoKm9wYXF1ZSA9IG1hbGxvYyh0LT5kYXRhX2xlbmd0aCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKm9wYXF1ZSwgdC0+ZGF0YSwgdC0+ZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gdC0+ZGF0YV9sZW5ndGg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcDZfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcDZfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJjbG9zZSBmZCAlZFxuIiwgdC0+c29jaykpOwotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcDZfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZhcmVuZCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKLSNpZmRlZiBXSU4zMgotICAgIHVfbG9uZyAgICAgICAgICBpb2N0bHNvY2tldF9vcHQ7Ci0jZWxzZQotICAgIGludCAgICAgICAgICAgICBzb2NrZmxhZ3M7Ci0jZW5kaWYKLSAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotCi0gICAgZmFyZW5kID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0KLSAgICBpZiAoZmFyZW5kID09IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuICAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgZmFyZW5kLCAmZmFyZW5kbGVuKTsKLQotICAgICAgICBpZiAobmV3c29jayA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKLQkJCW5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHQtPmRhdGEgPSBmYXJlbmQ7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gZmFyZW5kbGVuOwotICAgICAgICBzdHIgPSBuZXRzbm1wX3RjcDZfZm10YWRkcihOVUxMLCBmYXJlbmQsIGZhcmVuZGxlbik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZnJvbSAlcylcbiIsIHN0cikpOwotICAgICAgICBmcmVlKHN0cik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IHRvIG1ha2UgdGhlIG5ldyBzb2NrZXQgYmxvY2tpbmcuICAKLSAgICAgICAgICovCi0KLSNpZmRlZiBXSU4zMgotICAgICAgICBpb2N0bHNvY2tldF9vcHQgPSAwOwotICAgICAgICBpb2N0bHNvY2tldChuZXdzb2NrLCBGSU9OQklPLCAmaW9jdGxzb2NrZXRfb3B0KTsKLSNlbHNlCi0gICAgICAgIGlmICgoc29ja2ZsYWdzID0gZmNudGwobmV3c29jaywgRl9HRVRGTCwgMCkpID49IDApIHsKLSAgICAgICAgICAgIGZjbnRsKG5ld3NvY2ssIEZfU0VURkwsIChzb2NrZmxhZ3MgJiB+T19OT05CTE9DSykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJhY2NlcHQ6IGNvdWxkbid0IGZfZ2V0Zmwgb2YgZmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdzb2NrKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcwotICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQotICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19TTkRCVUYsIDEsIDApOwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19SQ1ZCVUYsIDEsIDApOwotCi0gICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgVENQL0lQdjYtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZQotICogbG9jYWwgYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlCi0gKiBhZGRyIGlzIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICBzdHIgPSBuZXRzbm1wX3RjcDZfZm10YWRkcihOVUxMLCAodm9pZCAqKWFkZHIsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyKSk7Ci0gICAgZnJlZShzdHIpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9UQ1BJUHY2RG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPSBzaXplb2YobmV0c25tcF9UQ1BJUHY2RG9tYWluKSAvIHNpemVvZihvaWQpOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOwotCi0gICAgaWYgKGxvY2FsKSB7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgdV9sb25nIGlvY3Rsc29ja2V0X29wdDsKLSNlbHNlCi0gICAgICAgIGludCBzb2NrZmxhZ3MgPSAwOwotI2VuZGlmCi0gICAgICAgIGludCBvcHQgPSAxOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKLSAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCi0gICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KLSAgICAgICAgICovCi0KLSNpZmRlZiBJUFY2X1Y2T05MWQotICAgICAgICAvKiBUcnkgdG8gcmVzdHJpY3QgUEZfSU5FVDYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbnMgb25seS4gKi8KLSAgICAgICAgewotCSAgaW50IG9uZT0xOwotCSAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgKGNoYXIgKikmb25lLCBzaXplb2Yob25lKSkgIT0gMCkgewotCSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgImNvdWxkbid0IHNldCBJUFY2X1Y2T05MWSB0byAlZCBieXRlczogJXNcbiIsIG9uZSwgc3RyZXJyb3IoZXJybm8pKSk7Ci0JICB9IAotCX0KLSNlbmRpZgotCi0gICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOwotICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3A2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKLSAgICAgICAgdC0+bG9jYWxbMTZdID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbMTddID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gMTg7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogV2Ugc2hvdWxkIHNldCBTT19SRVVTRUFERFIgdG9vLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHNldHNvY2tvcHQodC0+c29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCAqKSZvcHQsIHNpemVvZihvcHQpKTsKLQotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYmUgbGV0dGluZyBzZWxlY3QoKSB0ZWxsIHVzIHdoZW4gY29ubmVjdGlvbnMKLSAgICAgICAgICogYXJlIHJlYWR5IHRvIGJlIGFjY2VwdCgpZWQsIHdlIG5lZWQgdG8gbWFrZSB0aGUgc29ja2V0IG4wbi1ibG9ja2luZwotICAgICAgICAgKiB0byBhdm9pZCB0aGUgcmFjZSBjb25kaXRpb24gZGVzY3JpYmVkIGluIFcuIFIuIFN0ZXZlbnMsIGBgVW5peAotICAgICAgICAgKiBOZXR3b3JrIFByb2dyYW1taW5nIFZvbHVtZSBJIFNlY29uZCBFZGl0aW9uJycsIHBwLiA0MjItLTQsIHdoaWNoCi0gICAgICAgICAqIGNvdWxkIG90aGVyd2lzZSB3ZWRnZSB0aGUgYWdlbnQuCi0gICAgICAgICAqLwotCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgaW9jdGxzb2NrZXRfb3B0ID0gMTsKLSAgICAgICAgaW9jdGxzb2NrZXQodC0+c29jaywgRklPTkJJTywgJmlvY3Rsc29ja2V0X29wdCk7Ci0jZWxzZQotICAgICAgICBzb2NrZmxhZ3MgPSBmY250bCh0LT5zb2NrLCBGX0dFVEZMLCAwKTsKLSAgICAgICAgZmNudGwodC0+c29jaywgRl9TRVRGTCwgc29ja2ZsYWdzIHwgT19OT05CTE9DSyk7Ci0jZW5kaWYKLQotICAgICAgICAvKgotICAgICAgICAgKiBOb3cgc2l0IGhlcmUgYW5kIHdhaXQgZm9yIGNvbm5lY3Rpb25zIHRvIGFycml2ZS4gIAotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGxpc3Rlbih0LT5zb2NrLCBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4pOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3A2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBubyBidWZmZXIgc2l6ZSBvbiBsaXN0ZW4gc29ja2V0IC0gZG9lc24ndCBtYWtlIHNlbnNlCi0gICAgICAgICAqLwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3A2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5yZW1vdGUsIGFkZHItPnNpbjZfYWRkci5zNl9hZGRyLCAxNik7Ci0gICAgICAgIHQtPnJlbW90ZVsxNl0gPSAoYWRkci0+c2luNl9wb3J0ICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbMTddID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDE4OwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQtdHlwZSBzZXNzaW9uLCBzbyBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGZhcgotICAgICAgICAgKiBlbmQuICBXZSBkb24ndCBnbyBub24tYmxvY2tpbmcgaGVyZSBiZWNhdXNlIGl0J3Mgbm90IG9idmlvdXMgd2hhdAotICAgICAgICAgKiB5b3UnZCB0aGVuIGRvIGlmIHlvdSB0cmllZCB0byBkbyBzbm1wX3NlbmRzIGJlZm9yZSB0aGUgY29ubmVjdGlvbgotICAgICAgICAgKiBoYWQgY29tcGxldGVkLiAgU28gdGhpcyBjYW4gYmxvY2suCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiY29ubmVjdCByZXR1cm5zICVkXG4iLCByYykpOwotCi0gICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcwotICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQotICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKLSAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3RjcDZfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF90Y3A2X3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdGNwNl9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF90Y3A2X2FjY2VwdDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF90Y3A2X2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotLyoKLSAqIE5vdCBleHRlcm4gYnV0IHN0aWxsIGRlZmluZWQgaW4gc25tcFVEUElQdjZEb21haW4uYwotICovCi1leHRlcm4gaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luNl8yKHN0cnVjdCBzb2NrYWRkcl9pbjYqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcDZfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwotCi0gICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW42XzIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3RjcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLS8qCi0gKiBTZWU6Ci0gKiAKLSAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtb3BzLXRhZGRyZXNzLW1pYi0wMS50eHQKLSAqIAotICogKG9yIG5ld2VyIGVxdWl2YWxlbnQpIGZvciBkZXRhaWxzIG9mIHRoZSBUQyB3aGljaCB3ZSBhcmUgdXNpbmcgZm9yCi0gKiB0aGUgbWFwcGluZyBoZXJlLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3A2X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSAxOCkgewotICAgICAgICBtZW1zZXQoKHVfY2hhciAqKSAmIGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW42X2FkZHIuczZfYWRkciksIG8sIDE2KTsKLSAgICAgICAgYWRkci5zaW42X3BvcnQgPSAob1sxNl0gPDwgOCkgKyBvWzE3XTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotdm9pZAotbmV0c25tcF90Y3A2X2N0b3Iodm9pZCkKLXsKLSAgICB0Y3A2RG9tYWluLm5hbWUgPSBuZXRzbm1wX1RDUElQdjZEb21haW47Ci0gICAgdGNwNkRvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1RDUElQdjZEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICB0Y3A2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3RjcDZfY3JlYXRlX3RzdHJpbmc7Ci0gICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF90Y3A2X2NyZWF0ZV9vc3RyaW5nOwotICAgIHRjcDZEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoNCwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHRjcDZEb21haW4ucHJlZml4WzBdID0gInRjcDYiOwotICAgIHRjcDZEb21haW4ucHJlZml4WzFdID0gInRjcHY2IjsKLSAgICB0Y3A2RG9tYWluLnByZWZpeFsyXSA9ICJ0Y3BpcHY2IjsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdGNwNkRvbWFpbik7Ci19Ci0KLSNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAqLwotCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBVRFBEb21haW4uYyBiL3NubXBsaWIvc25tcFVEUERvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTA2MmNjLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFVEUERvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNCArMCwwIEBACi0vKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKLSAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCi0gKiB0aGF0IG1heSBhcHBseToKLSAqLwotLyoKLSAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6Ci0gKiBDb3B5cmlnaHQgQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KLSAqLwotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUREJfSAotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19VSU9fSAotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+Ci0KLSNpZm5kZWYgSU5BRERSX05PTkUKLSNkZWZpbmUgSU5BRERSX05PTkUJLTEKLSNlbmRpZgotCi0jaWZkZWYgIE1TR19ET05UV0FJVAotI2RlZmluZSBORVRTTk1QX0RPTlRXQUlUIE1TR19ET05UV0FJVAotI2Vsc2UKLSNkZWZpbmUgTkVUU05NUF9ET05UV0FJVCAwCi0jZW5kaWYKLQotc3RhdGljIG5ldHNubXBfdGRvbWFpbiB1ZHBEb21haW47Ci0KLXR5cGVkZWYgc3RydWN0IG5ldHNubXBfdWRwX2FkZHJfcGFpcl9zIHsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3RlX2FkZHI7Ci0gICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkcjsKLX0gbmV0c25tcF91ZHBfYWRkcl9wYWlyOwotCi0vKgotICogbm90IHN0YXRpYywgc2luY2Ugc25tcFVEUElQdjZEb21haW4gbmVlZHMgaXQsIGJ1dCBub3QgcHVibGljLCBlaXRoZXIuCi0gKiAoaWUgZG9uJ3QgcHV0IGl0IGluIGEgcHVibGljIGhlYWRlci4pCi0gKi8KLXZvaWQgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IHNlcnZlcik7Ci1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfdWRwX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpIHsKLQlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0JYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSB0LT5kYXRhOwotICAgIH0KLQotICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJVRFA6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvID0gTlVMTDsKLQljaGFyIHRtcFs2NF07Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotICAgICAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsICJVRFA6IHVua25vd24tPlslc10iLAotICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwgIlVEUDogWyVzXTolaHUtPiIsCi0gICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYSh0by0+c2luX2FkZHIpLCBudG9ocyh0by0+c2luX3BvcnQpKTsKLSAgICAgICAgICAgIHNwcmludGYodG1wICsgc3RybGVuKHRtcCksICJbJXNdIiwgaW5ldF9udG9hKGFkZHJfcGFpci0+bG9jYWxfYWRkcikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLQotCi0jaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChJUF9QS1RJTkZPKQotCi0jIGRlZmluZSBuZXRzbm1wX2RzdGFkZHIoeCkgKCYoKChzdHJ1Y3QgaW5fcGt0aW5mbyAqKShDTVNHX0RBVEEoeCkpKS0+aXBpX2FkZHIpKQotCi1zdGF0aWMgaW50IG5ldHNubXBfdWRwX3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwgc29ja2xlbl90ICpmcm9tbGVuLCBzdHJ1Y3QgaW5fYWRkciAqZHN0aXApCi17Ci0gICAgaW50IHI7Ci0gICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKLSAgICBjaGFyIGNtc2dbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKV07Ci0gICAgc3RydWN0IGNtc2doZHIgKmNtc2dwdHI7Ci0gICAgc3RydWN0IG1zZ2hkciBtc2c7Ci0KLSAgICBpb3ZbMF0uaW92X2Jhc2UgPSBidWY7Ci0gICAgaW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLSAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7Ci0gICAgbXNnLm1zZ19uYW1lID0gZnJvbTsKLSAgICBtc2cubXNnX25hbWVsZW4gPSAqZnJvbWxlbjsKLSAgICBtc2cubXNnX2lvdiA9IGlvdjsKLSAgICBtc2cubXNnX2lvdmxlbiA9IDE7Ci0gICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7Ci0gICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOwotCi0gICAgciA9IHJlY3Ztc2cocywgJm1zZywgTkVUU05NUF9ET05UV0FJVCk7Ci0KLSAgICBpZiAociA9PSAtMSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIAotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJnb3Qgc291cmNlIGFkZHI6ICVzXG4iLCBpbmV0X250b2EoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tKS0+c2luX2FkZHIpKSk7Ci0gICAgZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZ3B0ciAhPSBOVUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKLSAgICAgICAgaWYgKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gU09MX0lQICYmIGNtc2dwdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSB7Ci0gICAgICAgICAgICBtZW1jcHkoKHZvaWQgKikgZHN0aXAsIG5ldHNubXBfZHN0YWRkcihjbXNncHRyKSwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiZ290IGRlc3RpbmF0aW9uIChsb2NhbCkgYWRkciAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKCpkc3RpcCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBuZXRzbm1wX3VkcF9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLAotCQkJdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3QgaW92ZWMgaW92ID0geyBkYXRhLCBsZW4gfTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBzdHJ1Y3QgY21zZ2hkciBjbTsKLSAgICAgICAgc3RydWN0IGluX3BrdGluZm8gaXBpOwotICAgIH0gY21zZzsKLSAgICBzdHJ1Y3QgbXNnaGRyIG07Ci0KLSAgICBtZW1zZXQoJmNtc2csIDAsIHNpemVvZihjbXNnKSk7Ci0gICAgY21zZy5jbS5jbXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyBzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pOwotICAgIGNtc2cuY20uY21zZ19sZXZlbCA9IFNPTF9JUDsKLSAgICBjbXNnLmNtLmNtc2dfdHlwZSA9IElQX1BLVElORk87Ci0gICAgY21zZy5pcGkuaXBpX2lmaW5kZXggPSAwOwotICAgIGNtc2cuaXBpLmlwaV9zcGVjX2RzdC5zX2FkZHIgPSAoc3JjaXAgPyBzcmNpcC0+c19hZGRyIDogSU5BRERSX0FOWSk7Ci0KLSAgICBtLm1zZ19uYW1lCQk9IHJlbW90ZTsKLSAgICBtLm1zZ19uYW1lbGVuCT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0gICAgbS5tc2dfaW92CQk9ICZpb3Y7Ci0gICAgbS5tc2dfaW92bGVuCT0gMTsKLSAgICBtLm1zZ19jb250cm9sCT0gJmNtc2c7Ci0gICAgbS5tc2dfY29udHJvbGxlbgk9IHNpemVvZihjbXNnKTsKLSAgICBtLm1zZ19mbGFncwkJPSAwOwotCi0gICAgcmV0dXJuIHNlbmRtc2coZmQsICZtLCBNU0dfTk9TSUdOQUx8TVNHX0RPTlRXQUlUKTsKLX0KLSNlbmRpZiAvKiBsaW51eCAmJiBJUF9QS1RJTkZPICovCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF91ZHBfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICBzb2NrbGVuX3QgICAgICAgZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIG1hbGxvYyhzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1zZXQoYWRkcl9wYWlyLCAwLCBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgICAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotICAgICAgICB9Ci0KLQl3aGlsZSAocmMgPCAwKSB7Ci0jaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChJUF9QS1RJTkZPKQotICAgICAgICAgICAgcmMgPSBuZXRzbm1wX3VkcF9yZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIGZyb20sICZmcm9tbGVuLCAmKGFkZHJfcGFpci0+bG9jYWxfYWRkcikpOwotI2Vsc2UKLSAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBORVRTTk1QX0RPTlRXQUlULCBmcm9tLCAmZnJvbWxlbik7Ci0jZW5kaWYgLyogbGludXggJiYgSVBfUEtUSU5GTyAqLwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCi0gICAgICAgIGlmIChyYyA+PSAwKSB7Ci0gICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsIGFkZHJfcGFpciwgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwKLQkJCSJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLAotCQkJdC0+c29jaywgcmMsIHN0cikpOwotICAgICAgICAgICAgZnJlZShzdHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgfQotICAgICAgICAqb3BhcXVlID0gKHZvaWQgKilhZGRyX3BhaXI7Ci0gICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOwotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgotICAgICAgICAqb2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSkgewotICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopICgqb3BhcXVlKTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSkgewotICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopICh0LT5kYXRhKTsKLSAgICB9Ci0KLSAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLQotICAgIGlmICh0byAhPSBOVUxMICYmIHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSBhZGRyX3BhaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOwotICAgICAgICBmcmVlKHN0cik7Ci0Jd2hpbGUgKHJjIDwgMCkgewotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoSVBfUEtUSU5GTykKLSAgICAgICAgICAgIHJjID0gbmV0c25tcF91ZHBfc2VuZHRvKHQtPnNvY2ssIGFkZHJfcGFpciA/ICYoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKSA6IE5VTEwsIHRvLCBidWYsIHNpemUpOwotI2Vsc2UKLSAgICAgICAgICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSNlbmRpZiAvKiBsaW51eCAmJiBJUF9QS1RJTkZPICovCi0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAic2VuZHRvIGVycm9yLCByYyAlZCAoZXJybm8gJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBlcnJubykpOwotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91ZHBfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgaWYgKHQtPnNvY2sgPj0gMCkgewotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vKgotICogZmluZCBsYXJnZXN0IHBvc3NpYmxlIGJ1ZmZlciBiZXR3ZWVuIGN1cnJlbnQgc2l6ZSBhbmQgc3BlY2lmaWVkIHNpemUuCi0gKgotICogVHJ5IHRvIG1heGltaXplIHRoZSBjdXJyZW50IGJ1ZmZlciBvZiB0eXBlICJvcHRuYW1lIgotICogdG8gdGhlIG1heGltdW0gYWxsb3dhYmxlIHNpemUgYnkgdGhlIE9TIChhcyBjbG9zZSB0bwotICogc2l6ZSBhcyBwb3NzaWJsZSkKLSAqLwotc3RhdGljIGludAotX3NvY2tfYnVmZmVyX21heGltaXplKGludCBzLCBpbnQgb3B0bmFtZSwgY29uc3QgY2hhciAqYnVmdHlwZSwgaW50IHNpemUpCi17Ci0gICAgaW50ICAgICAgICAgICAgY3VyYnVmID0gMDsKLSAgICBzaXplX3QgICAgICAgICBjdXJidWZsZW4gPSBzaXplb2YoaW50KTsKLSAgICBpbnQgICAgICAgICAgICBsbywgbWlkLCBoaTsKLQotICAgIC8qCi0gICAgICogRmlyc3Qgd2UgbmVlZCB0byBkZXRlcm1pbmUgb3VyIGN1cnJlbnQgYnVmZmVyCi0gICAgICovCi0gICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCi0gICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIAotICAgICAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKLQotICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyOm1heCIsICJDdXJyZW50ICVzIGlzICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBjdXJidWYpKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBMZXQncyBub3QgYmUgc3R1cGlkIC4uLiBpZiB3ZSB3ZXJlIGFza2VkIGZvciBsZXNzIHRoYW4gd2hhdCB3ZQotICAgICAgICAgKiBhbHJlYWR5IGhhdmUsIHRoZW4gZm9yZ2V0IGFib3V0IGl0Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoc2l6ZSA8PSBjdXJidWYpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXI6bWF4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0ZWQgJXMgPD0gY3VycmVudCBidWZmZXJcbiIsIGJ1ZnR5cGUpKTsKLSAgICAgICAgICAgIHJldHVybiBjdXJidWY7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBEbyBhIGJpbmFyeSBzZWFyY2ggdGhlIG9wdGltYWwgYnVmZmVyIHdpdGhpbiAxayBvZiB0aGUgcG9pbnQgb2YKLSAgICAgICAgICogZmFpbHVyZS4gVGhpcyBpcyByYXRoZXIgYnJ1dGVmb3JjZSwgYnV0IHNpbXBsZQotICAgICAgICAgKi8KLSAgICAgICAgaGkgPSBzaXplOwotICAgICAgICBsbyA9IGN1cmJ1ZjsKLQotICAgICAgICB3aGlsZSAoaGkgLSBsbyA+IDEwMjQpIHsKLSAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDI7Ci0gICAgICAgICAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBsbyA9IG1pZDsgLyogU3VjY2Vzczogc2VhcmNoIGJldHdlZW4gbWlkIGFuZCBoaSAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoaSA9IG1pZDsgLyogRmFpbGVkOiBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgbWlkICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBOb3cgcHJpbnQgaWYgdGhpcyBvcHRpbWl6YXRpb24gaGVscGVkIG9yIG5vdAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGdldHNvY2tvcHQocyxTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAotICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlcjptYXgiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICJNYXhpbWl6ZWQgJXM6ICVkXG4iLGJ1ZnR5cGUsIGN1cmJ1ZikpOwotICAgICAgICB9IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZXJlIGlzIHJlYWxseSBub3QgYSBsb3Qgd2UgY2FuIGRvIGFueW1vcmUuCi0gICAgICAgICAqIElmIHRoZSBPUyBkb2Vzbid0IGdpdmUgdXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHdoYXQncyB0aGUgCi0gICAgICAgICAqIHBvaW50IGluIHRyeWluZyB0byBtYWtlIGl0IGJldHRlcgotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXI6bWF4IiwgIkdldCAlcyBmYWlsZWQgLi4uIGdpdmluZyB1cCFcbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUpKTsKLSAgICAgICAgY3VyYnVmID0gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1cmJ1ZjsKLX0KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1fc29ja19idWZfdHlwZV9nZXQoaW50IG9wdG5hbWUsIGludCBsb2NhbCkKLXsKLSAgICBpZiAob3B0bmFtZSA9PSBTT19TTkRCVUYpIHsKLSAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAgICAgcmV0dXJuICJzZXJ2ZXIgc2VuZCBidWZmZXIiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gImNsaWVudCBzZW5kIGJ1ZmZlciI7Ci0gICAgfSBlbHNlIGlmIChvcHRuYW1lID09IFNPX1JDVkJVRikgewotICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICByZXR1cm4gInNlcnZlciByZWNlaXZlIGJ1ZmZlciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAiY2xpZW50IHJlY2VpdmUgYnVmZmVyIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gInVua25vd24gYnVmZmVyIjsKLX0KLQotLyoKLSAqCi0gKiBHZXQgdGhlIHJlcXVlc3RlZCBidWZmZXJzaXplLCBiYXNlZCBvbgotICogLSBzb2NrZXR0eXBlIDogY2xpZW50IChsb2NhbCA9IDApIG9yIHNlcnZlciAobG9jYWwgPSAxKSAKLSAqIC0gYnVmZmVydHlwZSA6IHNlbmQgKG9wdG5hbWUgPSBTT19TTkRCVUYpIG9yIHJlY3YgKFNPX1JDVkJVRikKLSAqCi0gKiBJbiBjYXNlIGEgY29tcGlsZSB0aW1lIGJ1ZmZlciB3YXMgc3BlY2lmaWVkLCB0aGVuIHVzZSB0aGF0IG9uZQotICogaWYgdGhlcmUgd2FzIG5vIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvdmVycmlkZQotICovCi1zdGF0aWMgaW50Ci1fc29ja19idWZmZXJfc2l6ZV9nZXQoaW50IG9wdG5hbWUsIGludCBsb2NhbCwgY29uc3QgY2hhciAqKmJ1ZnR5cGUpCi17Ci0gICAgaW50IHNpemU7Ci0KLSAgICBpZiAoTlVMTCAhPSBidWZ0eXBlKQotICAgICAgICAqYnVmdHlwZSA9IF9zb2NrX2J1Zl90eXBlX2dldChvcHRuYW1lLCBsb2NhbCk7Ci0KLSAgICBpZiAob3B0bmFtZSA9PSBTT19TTkRCVUYpIHsKLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NFUlZFUlNFTkRCVUYpOwotI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUYKLSAgICAgICAgICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRjsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRTRU5EQlVGKTsKLSNpZmRlZiBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGCi0gICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQotICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUY7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAob3B0bmFtZSA9PSBTT19SQ1ZCVUYpIHsKLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NFUlZFUlJFQ1ZCVUYpOwotI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUYKLSAgICAgICAgICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRjsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRSRUNWQlVGKTsKLSNpZmRlZiBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGCi0gICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQotICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUY7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemUgPSAwOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwgIlJlcXVlc3RlZCAlcyBpcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAoYnVmdHlwZSkgPyAqYnVmdHlwZSA6ICJ1bmtub3duIGJ1ZmZlciIsIHNpemUpKTsKLQotICAgIHJldHVybihzaXplKTsKLX0KLQotLyoKLSAqIHNldCBzb2NrZXQgYnVmZmVyIHNpemUKLSAqCi0gKiBAcGFyYW0gc3MgICAgIDogc29ja2V0Ci0gKiBAcGFyYW0gb3B0bmFtZTogU09fU05EQlVGIG9yIFNPX1JDVkJVRgotICogQHBhcmFtIGxvY2FsICA6IDEgZm9yIHNlcnZlciwgMCBmb3IgY2xpZW50Ci0gKiBAcGFyYW0gcmVxYnVmIDogcmVxdWVzdGVkIHNpemUsIG9yIDAgZm9yIGRlZmF1bHQKLSAqCi0gKiBAcmV0dmFsICAgIC0xIDogZXJyb3IKLSAqIEByZXR2YWwgICAgPjAgOiBuZXcgYnVmZmVyIHNpemUKLSAqLwotaW50Ci1uZXRzbm1wX3NvY2tfYnVmZmVyX3NldChpbnQgcywgaW50IG9wdG5hbWUsIGludCBsb2NhbCwgaW50IHNpemUpCi17Ci0jaWYgISBkZWZpbmVkKFNPX1NOREJVRikgJiYgISBkZWZpbmVkKFNPX1JDVkJVRikKLSAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsICJDaGFuZ2luZyBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWRcbiIpKTsKLSAgICByZXR1cm4gLTE7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIgICAgICpidWZ0eXBlOwotICAgIGludCAgICAgICAgICAgIGN1cmJ1ZiA9IDA7Ci0gICAgc2l6ZV90ICAgICAgICAgY3VyYnVmbGVuID0gc2l6ZW9mKGludCk7Ci0KLSMgICBpZm5kZWYgIFNPX1NOREJVRgotICAgIGlmIChTT19TTkRCVUYgPT0gb3B0bmFtZSkgewotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyBzb2NrZXQgc2VuZCBidWZmZXIgaXMgbm90IHN1cHBvcnRlZFxuIikpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotIyAgIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1NOREJVRiAqLwotIyAgIGlmbmRlZiAgU09fUkNWQlVGCi0gICAgaWYgKFNPX1JDVkJVRiA9PSBvcHRuYW1lKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgIkNoYW5naW5nIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jICAgZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fUkNWQlVGICovCi0KLSAgICAvKgotICAgICAqIFdoYXQgaXMgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSA/Ci0gICAgICovCi0gICAgaWYgKDAgPT0gc2l6ZSkKLSAgICAgICAgc2l6ZSA9IF9zb2NrX2J1ZmZlcl9zaXplX2dldChvcHRuYW1lLCBsb2NhbCwgJmJ1ZnR5cGUpOwotICAgIGVsc2UgewotICAgICAgICBidWZ0eXBlID0gX3NvY2tfYnVmX3R5cGVfZ2V0KG9wdG5hbWUsIGxvY2FsKTsKLSAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwgIlJlcXVlc3RlZCAlcyBpcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7Ci0gICAgfQotCi0gICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCi0gICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIAotICAgICAgICAmJiAoY3VyYnVmbGVuID09IHNpemVvZihpbnQpKSkgewotICAgICAgICAKLSAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwgIk9yaWdpbmFsICVzIGlzICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIGN1cmJ1ZikpOwotICAgICAgICBpZiAoY3VyYnVmID49IHNpemUpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICAgIk5ldyAlcyBzaXplIGlzIHNtYWxsZXIgdGhhbiBvcmlnaW5hbCFcbiIsIGJ1ZnR5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgdGhlIGJ1ZmZlcnNpemUgd2FzIG5vdCBzcGVjaWZpZWQgb3IgaXQgd2FzIGEgbmVnYXRpdmUgdmFsdWUKLSAgICAgKiB0aGVuIGRvbid0IGNoYW5nZSB0aGUgT1MgYnVmZmVycyBhdCBhbGwKLSAgICAgKi8KLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgREVCVUdNU0dUKCgic29ja2V0OmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICIlcyBub3QgdmFsaWQgb3Igbm90IHNwZWNpZmllZDsgdXNpbmcgT1MgZGVmYXVsdCglZClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsY3VyYnVmKSk7Ci0gICAgICAgcmV0dXJuIGN1cmJ1ZjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRyeSB0byBzZXQgdGhlIHJlcXVlc3RlZCBzZW5kIGJ1ZmZlcgotICAgICAqLwotICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZzaXplLCBzaXplb2YoaW50KSkgPT0gMCkgewotICAgICAgICAvKgotICAgICAgICAgKiBCZWNhdXNlIHNvbWUgcGxhdGZvcm1zIGxpZSBhYm91dCB0aGUgYWN0dWFsIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIAotICAgICAgICAgKiBzZXQgKExpbnV4IHdpbGwgYWx3YXlzIHNheSBpdCB3b3JrZWQgLi4uKSwgd2UgcHJpbnQgc29tZSAKLSAgICAgICAgICogZGlhZ25vc3RpYyBvdXRwdXQgZm9yIGRlYnVnZ2luZwotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdJRigic29ja2V0OmJ1ZmZlciIpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVCgoInNvY2tldDpidWZmZXIiLCAiU2V0ICVzIHRvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7Ci0gICAgICAgICAgICBpZiAoKGdldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKLQotICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiTm93ICVzIGlzICVkXG4iLCBidWZ0eXBlLCBjdXJidWYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGUgbmV3IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgd2UgcmVxdWVzdGVkLCB3ZSB3aWxsCi0gICAgICAgICAqIHRyeSB0byBpbmNyZW1lbnQgdGhlIG5ldyBidWZmZXIgd2l0aCAxayBpbmNyZW1lbnRzIAotICAgICAgICAgKiAodGhpcyB3aWxsIHNvbWV0aW1lIGFsbG93IHVzIHRvIHJlYWNoIGEgbW9yZSBvcHRpbWFsIGJ1ZmZlci4pCi0gICAgICAgICAqICAgRm9yIGV4YW1wbGUgOiBPbiBTb2xhcmlzLCBpZiB0aGUgbWF4IE9TIGJ1ZmZlciBpcyAxMDBrIGFuZCB5b3UKLSAgICAgICAgICogICByZXF1ZXN0IDExMGssIHlvdSBlbmQgdXAgd2l0aCB0aGUgZGVmYXVsdCA4ayA6LSgKLSAgICAgICAgICovCi0gICAgICAgIGlmIChjdXJidWYgPCBzaXplKSB7Ci0gICAgICAgICAgICBjdXJidWYgPSBfc29ja19idWZmZXJfbWF4aW1pemUocywgb3B0bmFtZSwgYnVmdHlwZSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZigtMSAhPSBjdXJidWYpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IGN1cmJ1ZjsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogT2J2aW91c2x5IGNoYW5naW5nIHRoZSBidWZmZXIgZmFpbGVkLCBtb3N0IGxpa2UgbGlrZSBiZWNhdXNlIHdlIAotICAgICAgICAgKiByZXF1ZXN0ZWQgYSBidWZmZXIgZ3JlYXRlciB0aGFuIHRoZSBPUyBsaW1pdC4KLSAgICAgICAgICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gc2VhcmNoIGZvciBhbiBvcHRpbWFsIGJ1ZmZlciB0aGF0IGlzIGNsb3NlCi0gICAgICAgICAqIGVub3VnaCB0byB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KLSAgICAgICAgICogVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJlYWNoIGEgbW9yZSBvcHRpbWFsIGJ1ZmZlci4KLSAgICAgICAgICogICBGb3IgZXhhbXBsZSA6IE9uIFNvbGFyaXMsIGlmIHRoZSBtYXggT1MgYnVmZmVyIGlzIDEwMGsgYW5kIHlvdSAKLSAgICAgICAgICogICByZXF1ZXN0IDExMGssIHlvdSBlbmQgdXAgd2l0aCB0aGUgZGVmYXVsdCA4ayA6LSgKLSAgICAgICAgICogICBBZnRlciB0aGlzIHF1aWNrIHNlYWNoIHdlIHdvdWxkIGdldCAxayBjbG9zZSB0byAxMDBrICh0aGUgbWF4KQotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLCAiY291bGRuJ3Qgc2V0ICVzIHRvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7Ci0KLSAgICAgICAgY3VyYnVmID0gX3NvY2tfYnVmZmVyX21heGltaXplKHMsIG9wdG5hbWUsIGJ1ZnR5cGUsIHNpemUpOwotICAgICAgICBpZigtMSAhPSBjdXJidWYpCi0gICAgICAgICAgICBzaXplID0gY3VyYnVmOwotICAgIH0KLQotICAgIHJldHVybiBzaXplOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBPcGVuIGEgVURQLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKLSAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAotICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHBfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICpjbGllbnRfc29ja2V0ID0gTlVMTDsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgYWRkcl9wYWlyOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZhZGRyX3BhaXIsIDAsIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICBtZW1jcHkoJihhZGRyX3BhaXIucmVtb3RlX2FkZHIpLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHN0ciA9IG5ldHNubXBfdWRwX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikmYWRkcl9wYWlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHIpKTsKLSAgICBmcmVlKHN0cik7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wVURQRG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wVURQRG9tYWluX2xlbjsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldCh0LT5zb2NrLCBsb2NhbCk7Ci0KLSAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQotICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKLSAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgotICAgICAgICAgKi8KLQotICAgICAgICB0LT5sb2NhbCA9ICh1X2NoYXIgKikgbWFsbG9jKDYpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5sb2NhbCwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKLSAgICAgICAgdC0+bG9jYWxbNF0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFs1XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDY7Ci0KLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKElQX1BLVElORk8pCi0gICAgICAgIHsgCi0gICAgICAgICAgICBpbnQgc29ja29wdCA9IDE7Ci0gICAgICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfSVAsIElQX1BLVElORk8sICZzb2Nrb3B0LCBzaXplb2Ygc29ja29wdCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiY291bGRuJ3Qgc2V0IElQX1BLVElORk86ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInNldCBJUF9QS1RJTkZPXG4iKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF91ZHBfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+ZGF0YSA9IE5VTEw7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50IHNlc3Npb24uICBJZiB3ZSd2ZSBiZWVuIGdpdmVuIGEKLSAgICAgICAgICogY2xpZW50IGFkZHJlc3MgdG8gc2VuZCBmcm9tLCB0aGVuIGJpbmQgdG8gdGhhdC4KLSAgICAgICAgICogT3RoZXJ3aXNlIHRoZSBzZW5kIHdpbGwgdXNlICJzb21ldGhpbmcgc2Vuc2libGUiLgotICAgICAgICAgKi8KLSAgICAgICAgY2xpZW50X3NvY2tldCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIpOwotICAgICAgICBpZiAoY2xpZW50X3NvY2tldCkgewotICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudF9hZGRyOwotICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9pbjIoJmNsaWVudF9hZGRyLCBjbGllbnRfc29ja2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFkZHJfcGFpci5sb2NhbF9hZGRyID0gY2xpZW50X2FkZHIuc2luX2FkZHI7Ci0gICAgICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjbGllbnRfYWRkciwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSAgICAgICAgICAgIGlmICggcmMgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiZmFpbGVkIHRvIGJpbmQgZm9yIGNsaWVudGFkZHI6ICVkICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9jbG9zZSh0KTsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSZhZGRyX3BhaXIsCi0gICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImNsaWVudCBvcGVuICVzXG4iLCBzdHIpKTsKLSAgICAgICAgZnJlZShzdHIpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNhdmUgdGhlIChyZW1vdGUpIGFkZHJlc3MgaW4gdGhlCi0gICAgICAgICAqIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyIHVzZSBieSBuZXRzbm1wX3VkcF9zZW5kLgotICAgICAgICAgKi8KLQotICAgICAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKLSAgICAgICAgaWYgKHQtPmRhdGEgPT0gTlVMTCB8fCB0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5yZW1vdGUsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7Ci0gICAgICAgIHQtPnJlbW90ZVs0XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVs1XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA2OwotICAgICAgICBtZW1jcHkodC0+ZGF0YSwgJmFkZHJfcGFpciwgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCwgOCBieXRlIFVEUCBoZWFkZXIsIDIwIGJ5dGUgSVB2NCBoZWFkZXIgIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4ZmZmZiAtIDggLSAyMDsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF91ZHBfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91ZHBfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF91ZHBfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdWRwX2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotCi12b2lkCi1fbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgbG9jYWwpCi17Ci0jaWZkZWYgIFNPX0JTRENPTVBBVAotICAgIC8qCi0gICAgICogUGF0Y2ggZm9yIExpbnV4LiAgV2l0aG91dCB0aGlzLCBVRFAgcGFja2V0cyB0aGF0IGZhaWwgZ2V0IGFuIElDTVAKLSAgICAgKiByZXNwb25zZS4gIExpbnV4IHR1cm5zIHRoZSBmYWlsZWQgSUNNUCByZXNwb25zZSBpbnRvIGFuIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBhbmQgcmV0dXJuIHZhbHVlLCB1bmxpa2UgYWxsIG90aGVyIE9TJ3MuICAKLSAgICAgKi8KLSAgICBpZiAoMCA9PSBuZXRzbm1wX29zX3ByZW1hdGNoKCJMaW51eCIsIjIuNCIpKQotICAgIHsKLSAgICAgICAgaW50ICAgICAgICAgICAgIG9uZSA9IDE7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6b3B0aW9uIiwgInNldHRpbmcgc29ja2V0IG9wdGlvbiBTT19CU0RDT01QQVRcbiIpKTsKLSAgICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQlNEQ09NUEFULCAodm9pZCAqKSAmb25lLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKLSAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fQlNEQ09NUEFUICovCi0gICAgLyoKLSAgICAgKiBTT19SRVVTRUFERFIgd2lsbCBhbGxvdyBtdWx0aXBsZSBhcHBzIHRvIG9wZW4gdGhlIHNhbWUgcG9ydCBhdAotICAgICAqIHRoZSBzYW1lIHRpbWUuIE9ubHkgdGhlIGxhc3Qgb25lIHRvIG9wZW4gdGhlIHNvY2tldCB3aWxsIGdldAotICAgICAqIGRhdGEuIE9idmlvdXNseSwgZm9yIGFuIGFnZW50LCB0aGlzIGlzIGEgYmFkIHRoaW5nLiBUaGVyZSBzaG91bGQKLSAgICAgKiBvbmx5IGJlIG9uZSBsaXN0ZW5lci4KLSAgICAgKi8KLSNpZmRlZiBBTExPV19QT1JUX0hJSkFDS0lORwotI2lmZGVmICBTT19SRVVTRUFERFIKLSAgICAvKgotICAgICAqIEFsbG93IHRoZSBzYW1lIHBvcnQgdG8gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgZmFpbGluZy4KLSAgICAgKiAgICAodXNlZnVsIGZvciBhIGxpc3RlbmVyKQotICAgICAqLwotICAgIHsKLSAgICAgICAgaW50ICAgICAgICAgICAgIG9uZSA9IDE7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6b3B0aW9uIiwgInNldHRpbmcgc29ja2V0IG9wdGlvbiBTT19SRVVTRUFERFJcbiIpKTsKLSAgICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCAqKSAmb25lLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKLSAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fUkVVU0VBRERSICovCi0jZW5kaWYKLQotICAgIC8qCi0gICAgICogVHJ5IHRvIHNldCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIHRvIGEgcmVhc29uYWJseSBsYXJnZSB2YWx1ZSwgc28KLSAgICAgKiB0aGF0IHdlIGNhbiBzZW5kIGFuZCByZWNlaXZlIGJpZyBQRFVzIChkZWZhdWx0cyB0byA4MTkyIGJ5dGVzICghKSBvbgotICAgICAqIFNvbGFyaXMsIGZvciBpbnN0YW5jZSkuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0ganVzdAotICAgICAqIHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCi0gICAgICovCi0gICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoZmQsIFNPX1NOREJVRiwgbG9jYWwsIDApOwotICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KGZkLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKLX0KLQotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSNpZiBIQVZFX0dFVEFERFJJTkZPCi0gICAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7Ci0gICAgc3RydWN0IGFkZHJpbmZvIGhpbnQ7Ci0gICAgaW50ICAgICAgICAgICAgIGVycjsKLSNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCi0gICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgZXJyOwotI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCi0gICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKLSNlbmRpZgotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgImFkZHIgJXAsIGlucGVlcm5hbWUgXCIlc1wiLCBkZWZhdWx0X3RhcmdldCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgYWRkciwgaW5wZWVybmFtZSA/IGlucGVlcm5hbWUgOiAiW05JTF0iLAotICAgICAgICAgICAgICAgIGRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7Ci0KLSAgICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotICAgIGFkZHItPnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwotICAgIGFkZHItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpU05NUF9QT1JUKTsKLQotICAgIHsKLQlpbnQgcG9ydCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0JCQkJICAgICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUKTsKLQotCWlmIChwb3J0ICE9IDApIHsKLQkgICAgYWRkci0+c2luX3BvcnQgPSBodG9ucygodV9zaG9ydClwb3J0KTsKLQl9IGVsc2UgaWYgKGRlZmF1bHRfdGFyZ2V0ICE9IE5VTEwpCi0JICAgIG5ldHNubXBfc29ja2FkZHJfaW4yKGFkZHIsIGRlZmF1bHRfdGFyZ2V0LCBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5wZWVybmFtZSAhPSBOVUxMICYmICppbnBlZXJuYW1lICE9ICdcMCcpIHsKLQljb25zdCBjaGFyICAgICAqaG9zdCwgKnBvcnQ7Ci0JY2hhciAgICAgICAgICAgKnBlZXJuYW1lID0gTlVMTDsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmNwOwotICAgICAgICAvKgotICAgICAgICAgKiBEdXBsaWNhdGUgdGhlIHBlZXJuYW1lIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCB0byBtYW5rIGFyb3VuZCB3aXRoCi0gICAgICAgICAqIGl0LiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHBlZXJuYW1lID0gc3RyZHVwKGlucGVlcm5hbWUpOwotICAgICAgICBpZiAocGVlcm5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgYW5kIGV4dHJhY3QgYW4gYXBwZW5kZWQgcG9ydCBudW1iZXIuICAKLSAgICAgICAgICovCi0gICAgICAgIGNwID0gc3RyY2hyKHBlZXJuYW1lLCAnOicpOwotICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewotICAgICAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgICAgIHBvcnQgPSBjcCArIDE7Ci0gICAgICAgICAgICBob3N0ID0gcGVlcm5hbWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBob3N0ID0gTlVMTDsKLSAgICAgICAgICAgIHBvcnQgPSBwZWVybmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSB0byBjb252ZXJ0IHRoZSB1c2VyIHBvcnQgc3BlY2lmaWVyCi0gICAgICAgICAqLwotICAgICAgICBpZiAocG9ydCAmJiAqcG9ydCA9PSAnXDAnKQotICAgICAgICAgICAgcG9ydCA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHBvcnQgIT0gTlVMTCkgewotICAgICAgICAgICAgbG9uZyBpbnQgbDsKLSAgICAgICAgICAgIGNoYXIqIGVwOwotCi0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsICJjaGVjayB1c2VyIHNlcnZpY2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3J0KSk7Ci0KLSAgICAgICAgICAgIGwgPSBzdHJ0b2wocG9ydCwgJmVwLCAxMCk7Ci0gICAgICAgICAgICBpZiAoZXAgIT0gcG9ydCAmJiAqZXAgPT0gJ1wwJyAmJiAwIDw9IGwgJiYgbCA8PSAweDBmZmZmKQotICAgICAgICAgICAgICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpbCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaG9zdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZuYW1lIG5vdCBudW1lcmljLCAiCi0JCQkJImNoZWNrIGlmIGl0IHJlYWxseSBpcyBhIGRlc3RpbmF0aW9uKSIpKTsKLSAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBvcnQ7Ci0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZuYW1lIG5vdCBudW1lcmljIikpOwotICAgICAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IHRvIGNvbnZlcnQgdGhlIHVzZXIgaG9zdCBzcGVjaWZpZXIKLSAgICAgICAgICovCi0gICAgICAgIGlmIChob3N0ICYmICpob3N0ID09ICdcMCcpCi0gICAgICAgICAgICBob3N0ID0gTlVMTDsKLQotICAgICAgICBpZiAoaG9zdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2sgZGVzdGluYXRpb24gJXNcbiIsIGhvc3QpKTsKLQotI2lmIEhBVkVfR0VUQUREUklORk8KLSAgICAgICAgICAgIG1lbXNldCgmaGludCwgMCwgc2l6ZW9mIGhpbnQpOwotICAgICAgICAgICAgaGludC5haV9mbGFncyA9IDA7Ci0gICAgICAgICAgICBoaW50LmFpX2ZhbWlseSA9IFBGX0lORVQ7Ci0gICAgICAgICAgICBoaW50LmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKLSAgICAgICAgICAgIGhpbnQuYWlfcHJvdG9jb2wgPSAwOwotCi0gICAgICAgICAgICBlcnIgPSBnZXRhZGRyaW5mbyhwZWVybmFtZSwgTlVMTCwgJmhpbnQsICZhZGRycyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKLSNpZiBIQVZFX0dBSV9TVFJFUlJPUgotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJnZXRhZGRyaW5mbzogJXMgJXNcbiIsIHBlZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdhaV9zdHJlcnJvcihlcnIpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImdldGFkZHJpbmZvOiAlcyAoZXJyb3IgJWQpXG4iLCBwZWVybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBlcnIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWRkcnMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZhZGRyLT5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHJzLT5haV9hZGRyKS0+c2luX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotICAgICAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhhZGRycyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZXNvbHZlIElQdjQgaG9zdG5hbWVcbiIpKTsKLSAgICAgICAgICAgIH0KLSNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQotICAgICAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGhvc3QpOwotICAgICAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlKVxuIikpOwotICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAobm90IEFGX0lORVQhKVxuIikpOwotICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICAgICAgICAgIG1lbWNweSgmYWRkci0+c2luX2FkZHIsIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0jZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQotICAgICAgICAgICAgaHAgPSBnZXRpcG5vZGVieW5hbWUocGVlcm5hbWUsIEFGX0lORVQsIDAsICZlcnIpOwotICAgICAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlID0gJWQpXG4iLCBlcnIpKTsKLSAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgICAgIG1lbWNweSgmKGFkZHItPnNpbl9hZGRyKSwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKLSNlbHNlIC8qIEhBVkVfR0VUSVBOT0RFQllOQU1FICovCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlcmUgaXMgbm8gbmFtZSByZXNvbHZpbmcgZnVuY3Rpb24gYXZhaWxhYmxlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAibm8gZ2V0YWRkcmluZm8oKS9nZXRpcG5vZGVieW5hbWUoKS9nZXRob3N0YnluYW1lKClcbiIpKTsKLSAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogSEFWRV9HRVRIT1NUQllOQU1FICovCi0gICAgICAgIH0KLQlmcmVlKHBlZXJuYW1lKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZpbmlzaGVkCi0gICAgICovCi0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsICJyZXR1cm4geyBBRl9JTkVULCAlczolaHUgfVxuIiwKLSAgICAgICAgICAgICAgICBpbmV0X250b2EoYWRkci0+c2luX2FkZHIpLCBudG9ocyhhZGRyLT5zaW5fcG9ydCkpKTsKLSAgICByZXR1cm4gMTsKLX0KLQotCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW4oc3RydWN0IHNvY2thZGRyX2luICphZGRyLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBpbnQgcmVtb3RlX3BvcnQpCi17Ci0gICAgY2hhciBidWZbc2l6ZW9mKGludCkgKiAzICsgMl07Ci0gICAgc3ByaW50ZihidWYsICI6JXUiLCByZW1vdGVfcG9ydCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaW4yKGFkZHIsIGlucGVlcm5hbWUsIHJlbW90ZV9wb3J0ID8gYnVmIDogTlVMTCk7Ci19Ci0KLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLS8qCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSAiY29tMnNlYyIgY29uZmlndXJhdGlvbiB0b2tlbgotICogZnVuY3Rpb25hbGl0eSBmb3IgY29tcGF0aWJpbGl0eS4gIAotICovCi0KLSNkZWZpbmUgRVhBTVBMRV9ORVRXT1JLCQkiTkVUV09SSyIKLSNkZWZpbmUgRVhBTVBMRV9DT01NVU5JVFkJIkNPTU1VTklUWSIKLQotdHlwZWRlZiBzdHJ1Y3QgX2NvbTJTZWNFbnRyeSB7Ci0gICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTl07Ci0gICAgdW5zaWduZWQgbG9uZyAgIG5ldHdvcms7Ci0gICAgdW5zaWduZWQgbG9uZyAgIG1hc2s7Ci0gICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIHN0cnVjdCBfY29tMlNlY0VudHJ5ICpuZXh0OwotfSBjb20yU2VjRW50cnk7Ci0KLWNvbTJTZWNFbnRyeSAgICpjb20yU2VjTGlzdCA9IE5VTEwsICpjb20yU2VjTGlzdExhc3QgPSBOVUxMOwotCi12b2lkCi1uZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCi17Ci0gICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU5dOwotICAgIGNoYXIgICAgICAgICAgICBzb3VyY2VbU05NUF9NQVhCVUZfU01BTExdOwotICAgIGNoYXIgICAgICAgICAgICpjcCA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAgICAgKnN0cm1hc2sgPSBOVUxMOwotICAgIGNvbTJTZWNFbnRyeSAgICplID0gTlVMTDsKLSAgICBpbl9hZGRyX3QgICBuZXR3b3JrID0gMCwgbWFzayA9IDA7Ci0KLSAgICAvKgotICAgICAqIEdldCBzZWN1cml0eSwgc291cmNlIGFkZHJlc3MvbmV0bWFzayBhbmQgY29tbXVuaXR5IHN0cmluZ3MuICAKLSAgICAgKi8KLQotICAgIGNwID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7Ci0gICAgaWYgKHN0cmNtcChzZWNOYW1lLCAiLUNuIikgPT0gMCkgewotICAgICAgICBpZiAoIWNwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBjb250ZXh0TmFtZSwgc2l6ZW9mKGNvbnRleHROYW1lKSk7Ci0gICAgICAgIGNwID0gY29weV9ud29yZCggY3AsIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dE5hbWVbMF0gPSAnXDAnOwotICAgIH0KLSAgICBpZiAoc2VjTmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKHNlY05hbWUpID4gKFZBQ01TVFJJTkdMRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJzZWN1cml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3AgPSBjb3B5X253b3JkKCBjcCwgc291cmNlLCBzaXplb2Yoc291cmNlKSk7Ci0gICAgaWYgKHNvdXJjZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU09VUkNFIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJuY21wKHNvdXJjZSwgRVhBTVBMRV9ORVRXT1JLLCBzdHJsZW4oRVhBTVBMRV9ORVRXT1JLKSkgPT0KLSAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgTkVUV09SSyBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwID0gY29weV9ud29yZCggY3AsIGNvbW11bml0eSwgc2l6ZW9mKGNvbW11bml0eSkpOwotICAgIGlmIChjb21tdW5pdHlbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXJcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlCi0gICAgICAgIGlmIChzdHJuY21wCi0gICAgICAgICAgICAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc3RybGVuKEVYQU1QTEVfQ09NTVVOSVRZKSkKLSAgICAgICAgICAgID09IDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjb21tdW5pdHkpID4gKENPTU1VTklUWV9NQVhfTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiY29tbXVuaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogUHJvY2VzcyB0aGUgc291cmNlIGFkZHJlc3MvbmV0bWFzayBzdHJpbmcuICAKLSAgICAgKi8KLQotICAgIGNwID0gc3RyY2hyKHNvdXJjZSwgJy8nKTsKLSAgICBpZiAoY3AgIT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBNYXNrIGdpdmVuLiAgCi0gICAgICAgICAqLwotICAgICAgICAqY3AgPSAnXDAnOwotICAgICAgICBzdHJtYXNrID0gY3AgKyAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRGVhbCB3aXRoIHRoZSBuZXR3b3JrIHBhcnQgZmlyc3QuICAKLSAgICAgKi8KLQotICAgIGlmICgoc3RyY21wKHNvdXJjZSwgImRlZmF1bHQiKSA9PSAwKQotICAgICAgICB8fCAoc3RyY21wKHNvdXJjZSwgIjAuMC4wLjAiKSA9PSAwKSkgewotICAgICAgICBuZXR3b3JrID0gMDsKLSAgICAgICAgc3RybWFzayA9ICIwLjAuMC4wIjsKLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgaW50ZXJwcmV0aW5nIGFzIGEgZG90dGVkIHF1YWQuICAKLSAgICAgICAgICovCi0gICAgICAgIG5ldHdvcmsgPSBpbmV0X2FkZHIoc291cmNlKTsKLQotICAgICAgICBpZiAobmV0d29yayA9PSAoaW5fYWRkcl90KSAtMSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE5vcGUsIHdhc24ndCBhIGRvdHRlZCBxdWFkLiAgTXVzdCBiZSBhIGhvc3RuYW1lLiAgCi0gICAgICAgICAgICAgKi8KLSNpZmRlZiAgSEFWRV9HRVRIT1NUQllOQU1FCi0gICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBnZXRob3N0YnluYW1lKHNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBzb3VyY2UgYWRkcmVzcyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibm8gSVAgYWRkcmVzcyBmb3Igc291cmNlIGhvc3RuYW1lIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV0d29yayA9ICooKGluX2FkZHJfdCAqKSBocC0+aF9hZGRyKTsKLSAgICAgICAgICAgIH0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBPaCBkZWFyLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNhbm5vdCByZXNvbHZlIHNvdXJjZSBob3N0bmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKkhBVkVfR0VUSE9TVEJZTkFNRSAqLwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBOb3cgd29yayBvdXQgdGhlIG1hc2suICAKLSAgICAgKi8KLQotICAgIGlmIChzdHJtYXNrID09IE5VTEwgfHwgKnN0cm1hc2sgPT0gJ1wwJykgewotICAgICAgICAvKgotICAgICAgICAgKiBObyBtYXNrIHdhcyBnaXZlbi4gIFVzZSAyNTUuMjU1LjI1NS4yNTUuICAKLSAgICAgICAgICovCi0gICAgICAgIG1hc2sgPSAweGZmZmZmZmZmTDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RyY2hyKHN0cm1hc2ssICcuJykpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUcnkgdG8gaW50ZXJwcmV0IG1hc2sgYXMgYSBkb3R0ZWQgcXVhZC4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtYXNrID0gaW5ldF9hZGRyKHN0cm1hc2spOwotICAgICAgICAgICAgaWYgKG1hc2sgPT0gKGluX2FkZHJfdCkgLTEgJiYKLSAgICAgICAgICAgICAgICBzdHJuY21wKHN0cm1hc2ssICIyNTUuMjU1LjI1NS4yNTUiLCAxNSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRyeSB0byBpbnRlcnByZXQgbWFzayBhcyBhICJudW1iZXIgb2YgMSBiaXRzIi4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWFza0xlbiA9IGF0b2koc3RybWFzayksIG1hc2tCaXQgPSAweDgwMDAwMDAwTDsKLSAgICAgICAgICAgIGlmIChtYXNrTGVuIDw9IDAgfHwgbWFza0xlbiA+IDMyKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIG1hc2sgbGVuZ3RoIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKG1hc2tMZW4tLSkgewotICAgICAgICAgICAgICAgIG1hc2sgfD0gbWFza0JpdDsKLSAgICAgICAgICAgICAgICBtYXNrQml0ID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA9IGh0b25sKG1hc2spOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBDaGVjayB0aGF0IHRoZSBuZXR3b3JrIGFuZCBtYXNrIGFyZSBjb25zaXN0ZW50LiAgCi0gICAgICovCi0KLSAgICBpZiAobmV0d29yayAmIH5tYXNrKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoInNvdXJjZS9tYXNrIG1pc21hdGNoIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlID0gKGNvbTJTZWNFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKGNvbTJTZWNFbnRyeSkpOwotICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEV2ZXJ5dGhpbmcgaXMgb2theS4gIENvcHkgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZSBhbGxvY2F0ZWQKLSAgICAgKiBhYm92ZSBhbmQgYWRkIGl0IHRvIEVORCBvZiB0aGUgbGlzdC4gIAotICAgICAqLwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5IiwKLSAgICAgICAgICAgICAgICAiPFwiJXNcIiwgMHglMDh4LzB4JTA4eD4gPT4gXCIlc1wiXG4iLCBjb21tdW5pdHksIG5ldHdvcmssCi0gICAgICAgICAgICAgICAgbWFzaywgc2VjTmFtZSkpOwotCi0gICAgc3RyY3B5KGUtPmNvbnRleHROYW1lLCBjb250ZXh0TmFtZSk7Ci0gICAgc3RyY3B5KGUtPnNlY05hbWUsIHNlY05hbWUpOwotICAgIHN0cmNweShlLT5jb21tdW5pdHksIGNvbW11bml0eSk7Ci0gICAgZS0+bmV0d29yayA9IG5ldHdvcms7Ci0gICAgZS0+bWFzayA9IG1hc2s7Ci0gICAgZS0+bmV4dCA9IE5VTEw7Ci0KLSAgICBpZiAoY29tMlNlY0xpc3RMYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgY29tMlNlY0xpc3RMYXN0LT5uZXh0ID0gZTsKLSAgICAgICAgY29tMlNlY0xpc3RMYXN0ID0gZTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb20yU2VjTGlzdExhc3QgPSBjb20yU2VjTGlzdCA9IGU7Ci0gICAgfQotfQotCi0KLXZvaWQKLW5ldHNubXBfdWRwX2NvbTJTZWNMaXN0X2ZyZWUodm9pZCkKLXsKLSAgICBjb20yU2VjRW50cnkgICAqZSA9IGNvbTJTZWNMaXN0OwotICAgIHdoaWxlIChlICE9IE5VTEwpIHsKLSAgICAgICAgY29tMlNlY0VudHJ5ICAgKnRtcCA9IGU7Ci0gICAgICAgIGUgPSBlLT5uZXh0OwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIGNvbTJTZWNMaXN0ID0gY29tMlNlY0xpc3RMYXN0ID0gTlVMTDsKLX0KLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotCi12b2lkCi1uZXRzbm1wX3VkcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJjb20yc2VjIiwgbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwX2NvbTJTZWNMaXN0X2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbLUNuIENPTlRFWFRdIHNlY05hbWUgSVB2NC1uZXR3b3JrLWFkZHJlc3NbL25ldG1hc2tdIGNvbW11bml0eSIpOwotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi19Ci0KLQotCi0vKgotICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIG5vIGNvbTJzZWMgZW50cmllcywgb3IgcmV0dXJuIDEgaWYgdGhlcmUgQVJFIGNvbTJzZWMgCi0gKiBlbnRyaWVzLiAgT24gcmV0dXJuLCBpZiBhIGNvbTJzZWMgZW50cnkgbWF0Y2hlZCB0aGUgcGFzc2VkIHBhcmFtZXRlcnMsCi0gKiB0aGVuICpzZWNOYW1lIHBvaW50cyBhdCB0aGUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgbmFtZSwgb3IgaXMgTlVMTCBpZiB0aGUKLSAqIHBhcmFtZXRlcnMgZGlkIG5vdCBtYXRjaCBhbnkgY29tMnNlYyBlbnRyeS4gIAotICovCi0KLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLWludAotbmV0c25tcF91ZHBfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLCBjaGFyICoqc2VjTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmNvbnRleHROYW1lKQotewotICAgIGNvbTJTZWNFbnRyeSAgICpjOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBvcGFxdWU7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICpmcm9tID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotICAgIGNoYXIgICAgICAgICAgICp6dGNvbW11bml0eSA9IE5VTEw7Ci0KLSAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICpzZWNOYW1lID0gTlVMTDsgIC8qIEhhdmVuJ3QgZm91bmQgYW55dGhpbmcgeWV0ICovCi0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTcGVjaWFsIGNhc2UgaWYgdGhlcmUgYXJlIE5PIGVudHJpZXMgKGFzIG9wcG9zZWQgdG8gbm8gTUFUQ0hJTkcKLSAgICAgKiBlbnRyaWVzKS4gIAotICAgICAqLwotCi0gICAgaWYgKGNvbTJTZWNMaXN0ID09IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAibm8gY29tMnNlYyBlbnRyaWVzXG4iKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgdGhlcmUgaXMgbm8gSVB2NCBzb3VyY2UgYWRkcmVzcywgdGhlbiB0aGVyZSBjYW4gYmUgbm8gdmFsaWQgc2VjdXJpdHkKLSAgICAgKiBuYW1lLiAgCi0gICAgICovCi0KLSAgICBpZiAob3BhcXVlID09IE5VTEwgfHwgb2xlbmd0aCAhPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSB8fAotICAgICAgICBmcm9tLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLAotCQkgICAgIm5vIElQdjQgc291cmNlIGFkZHJlc3MgaW4gUERVP1xuIikpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBERUJVR0lGKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIikgewotCXp0Y29tbXVuaXR5ID0gKGNoYXIgKiltYWxsb2MoY29tbXVuaXR5X2xlbiArIDEpOwotCWlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0JICAgIG1lbWNweSh6dGNvbW11bml0eSwgY29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKTsKLQkgICAgenRjb21tdW5pdHlbY29tbXVuaXR5X2xlbl0gPSAnXDAnOwotCX0KLQotCURFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIiwgMHglMDhseD5cbiIsCi0JCSAgICB6dGNvbW11bml0eSA/IHp0Y29tbXVuaXR5IDogIjxtYWxsb2MgZXJyb3I+IiwKLQkJICAgICh1bnNpZ25lZCBsb25nKShmcm9tLT5zaW5fYWRkci5zX2FkZHIpKSk7Ci0gICAgfQotCi0gICAgZm9yIChjID0gY29tMlNlY0xpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCJjb21wYXJlIDxcIiVzXCIsIDB4JTA4eC8weCUwOHg+IiwKLQkJICAgIGMtPmNvbW11bml0eSwgYy0+bmV0d29yaywgYy0+bWFzaykpOwotICAgICAgICBpZiAoKGNvbW11bml0eV9sZW4gPT0gc3RybGVuKGMtPmNvbW11bml0eSkpICYmCi0JICAgIChtZW1jbXAoY29tbXVuaXR5LCBjLT5jb21tdW5pdHksIGNvbW11bml0eV9sZW4pID09IDApICYmCi0gICAgICAgICAgICAoKGZyb20tPnNpbl9hZGRyLnNfYWRkciAmIGMtPm1hc2spID09IGMtPm5ldHdvcmspKSB7Ci0gICAgICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKLSAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqc2VjTmFtZSA9IGMtPnNlY05hbWU7Ci0gICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAiLi4uIG5vcGVcbiIpKTsKLSAgICB9Ci0gICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHBfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQotICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSA2KSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1s0XSA8PCA4KSArIG9bNV07Ci0gICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luX2FkZHIuc19hZGRyKSwgbywgNCk7Ci0gICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0dG1wKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi12b2lkCi1uZXRzbm1wX3VkcF9jdG9yKHZvaWQpCi17Ci0gICAgdWRwRG9tYWluLm5hbWUgPSBuZXRzbm1wVURQRG9tYWluOwotICAgIHVkcERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBVRFBEb21haW5fbGVuOwotICAgIHVkcERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgdWRwRG9tYWluLnByZWZpeFswXSA9ICJ1ZHAiOwotCi0gICAgdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF91ZHBfY3JlYXRlX3RzdHJpbmc7Ci0gICAgdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3VkcF9jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdWRwRG9tYWluKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFVEUElQdjZEb21haW4uYyBiL3NubXBsaWIvc25tcFVEUElQdjZEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBkNzYzNS4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkxICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCi0gICAgLyoKLSAgICAgKiAgV2luZG93cyBJUHY2IHN1cHBvcnQgaXMgcGFydCBvZiBXaW5Tb2NrMiBvbmx5Ci0gICAgICovCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI3VuZGVmICBIQVZFX0lGX05BTUVUT0lOREVYCi0KLWV4dGVybiBpbnQgICAgICAgICBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyKiwgdm9pZCopOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQsIGNvbnN0IHZvaWQqLCBjaGFyKiwgc2l6ZV90KTsKLWNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueSA9IElONkFERFJfQU5ZX0lOSVQ7Ci0jZW5kaWYKLQotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX0lGX0gKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2lmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkKLSNkZWZpbmUgU1NfRkFNSUxZIHNzX2ZhbWlseQotI2VsaWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX19fU1NfRkFNSUxZCi0jZGVmaW5lIFNTX0ZBTUlMWSBfX3NzX2ZhbWlseQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKGRhcndpbikKLSNpbmNsdWRlIDxzdGRpbnQuaD4gLyogZm9yIHVpbnQ4X3QgKi8KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaD4KLQotb2lkIG5ldHNubXBfVURQSVB2NkRvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX1VEUF9JUFY2IH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHVkcDZEb21haW47Ci0KLS8qCi0gKiBmcm9tIHNubXBVRFBEb21haW4uIG5vdCBzdGF0aWMsIGJ1dCBub3QgcHVibGljLCBlaXRoZXIuCi0gKiAoaWUgZG9uJ3QgcHV0IGl0IGluIGEgcHVibGljIGhlYWRlci4pCi0gKi8KLWV4dGVybiB2b2lkIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBzZXJ2ZXIpOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF91ZHA2X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiAqdG8gPSBOVUxMOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJmbXRhZGRyOiB0ID0gJXAsIGRhdGEgPSAlcCwgbGVuID0gJWRcbiIsIHQsCi0gICAgICAgICAgICAgICAgZGF0YSwgbGVuKSk7Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB0LT5kYXRhOwotICAgIH0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJVRFAvSVB2NjogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgYWRkcltJTkVUNl9BRERSU1RSTEVOXTsKLSAgICAgICAgY2hhciB0bXBbSU5FVDZfQUREUlNUUkxFTiArIDE4XTsKLQotICAgICAgICBzcHJpbnRmKHRtcCwgIlVEUC9JUHY2OiBbJXNdOiVodSIsCi0gICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAodm9pZCAqKSAmKHRvLT5zaW42X2FkZHIpLCBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHModG8tPnNpbjZfcG9ydCkpOwotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcDZfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgc29ja2xlbl90ICAgICAgIGZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0gICAgc3RydWN0IHNvY2thZGRyICpmcm9tOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmIChmcm9tID09IE5VTEwpIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtc2V0KGZyb20sIDAsIGZyb21sZW4pOwotICAgICAgICB9Ci0KLQl3aGlsZSAocmMgPCAwKSB7Ci0JICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgZnJvbSwgJmZyb21sZW4pOwotCSAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCSAgICBicmVhazsKLQkgIH0KLQl9Ci0KLSAgICAgICAgaWYgKHJjID49IDApIHsKLQkgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHA2X2ZtdGFkZHIoTlVMTCwgZnJvbSwgZnJvbWxlbik7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwKLQkJCSJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLCB0LT5zb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHN0cikpOwotICAgICAgICAgICAgZnJlZShzdHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0JCQl0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopIGZyb207Ci0gICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcDZfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCi0gICAgICAgICpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCpvcGFxdWUpOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAodC0+ZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcDZfZm10YWRkcihOVUxMLCAodm9pZCAqKXRvLAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91ZHA2X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgVURQL0lQdjYtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZQotICogbG9jYWwgYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlCi0gKiBhZGRyIGlzIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsICh2b2lkICopIGFkZHIsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyKSk7Ci0gICAgZnJlZShzdHIpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9VRFBJUHY2RG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPQotICAgICAgICBzaXplb2YobmV0c25tcF9VRFBJUHY2RG9tYWluKSAvIHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW5bMF0pOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldCh0LT5zb2NrLCBsb2NhbCk7Ci0KLSAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQotICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKLSAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgotICAgICAgICAgKi8KLQotI2lmZGVmIElQVjZfVjZPTkxZCi0gICAgICAgIC8qIFRyeSB0byByZXN0cmljdCBQRl9JTkVUNiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9ucyBvbmx5LiAqLwotICAgICAgICB7Ci0JICBpbnQgb25lPTE7Ci0JICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKSAhPSAwKSB7Ci0JICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAiY291bGRuJ3Qgc2V0IElQVjZfVjZPTkxZIHRvICVkIGJ5dGVzOiAlc1xuIiwgb25lLCBzdHJlcnJvcihlcnJubykpKTsKLQkgIH0gCi0JfQotI2VuZGlmCi0KLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF91ZHA2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3VkcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOwotICAgICAgICB0LT5sb2NhbFsxNl0gPSAoYWRkci0+c2luNl9wb3J0ICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFsxN10gPSAoYWRkci0+c2luNl9wb3J0ICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxODsKLSAgICAgICAgdC0+ZGF0YSA9IE5VTEw7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50IHNlc3Npb24uICBTYXZlIHRoZSBhZGRyZXNzIGluIHRoZQotICAgICAgICAgKiB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlciB1c2UgYnkgbmV0c25tcF91ZHA2X3NlbmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF91ZHA2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF91ZHA2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5yZW1vdGUsIGFkZHItPnNpbjZfYWRkci5zNl9hZGRyLCAxNik7Ci0gICAgICAgIHQtPnJlbW90ZVsxNl0gPSAoYWRkci0+c2luNl9wb3J0ICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbMTddID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDE4OwotICAgIH0KLQotICAgIC8qCi0gICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCwgOCBieXRlIFVEUCBoZWFkZXIsIDQwIGJ5dGUgSVB2NiBoZWFkZXIuICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweGZmZmYgLSA4IC0gNDA7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdWRwNl9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3VkcDZfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF91ZHA2X2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3VkcDZfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0KLS8qCi0gKiBOb3QgZXh0ZXJuIGJ1dCB1c2VkIGZyb20gaGVyZSBhbmQgc25tcFRDUElQdjZEb21haW4uQwotICovCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW42XzIoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgY2hhciAgICAgICAgICAgKmNwID0gTlVMTCwgKnBlZXJuYW1lID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAgZGVidWdfYWRkcltJTkVUNl9BRERSU1RSTEVOXTsKLSNpZiBIQVZFX0dFVEFERFJJTkZPCi0gICAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIGVycjsKLSNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCi0gICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgZXJyOwotI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCi0gICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKLSNlbmRpZgotICAgIGludCAgICAgICAgICAgICBwb3J0bm87Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0JCSJhZGRyICVwLCBwZWVybmFtZSBcIiVzXCIsIGRlZmF1bHRfdGFyZ2V0IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICBhZGRyLCBpbnBlZXJuYW1lID8gaW5wZWVybmFtZSA6ICJbTklMXSIsCi0JCWRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7Ci0KLSAgICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICBhZGRyLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotICAgIGFkZHItPnNpbjZfYWRkciA9IGluNmFkZHJfYW55OwotICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KVNOTVBfUE9SVCk7Ci0KLSAgICB7Ci0gICAgICBpbnQgcG9ydCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0JCQkJICAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCk7Ci0gICAgICBpZiAocG9ydCAhPSAwKQotICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygodV9zaG9ydClwb3J0KTsKLSAgICAgIGVsc2UgaWYgKGRlZmF1bHRfdGFyZ2V0ICE9IE5VTEwpCi0JbmV0c25tcF9zb2NrYWRkcl9pbjZfMihhZGRyLCBkZWZhdWx0X3RhcmdldCwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKGlucGVlcm5hbWUgIT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBEdXBsaWNhdGUgdGhlIHBlZXJuYW1lIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCB0byBtYW5rIGFyb3VuZCB3aXRoCi0gICAgICAgICAqIGl0LiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHBlZXJuYW1lID0gc3RyZHVwKGlucGVlcm5hbWUpOwotICAgICAgICBpZiAocGVlcm5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNwID0gcGVlcm5hbWU7ICpjcCAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqY3ApOyBjcCsrKTsKLSAgICAgICAgaWYgKCEqY3AgJiYgYXRvaShwZWVybmFtZSkgIT0gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE9rYXksIGl0IGxvb2tzIGxpa2UgSlVTVCBhIHBvcnQgbnVtYmVyLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJ0b3RhbGx5IG51bWVyaWM6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYXRvaShwZWVybmFtZSkpKTsKLSAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKGF0b2kocGVlcm5hbWUpKTsKLSAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTZWUgaWYgaXQgaXMgYW4gSVB2NiBhZGRyZXNzIGNvdmVyZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMuIEFsc28gY2hlY2sKLSAgICAgICAgICogZm9yIGFuIGFwcGVuZGVkIDpwb3J0LiAgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKnBlZXJuYW1lID09ICdbJykgewotICAgICAgICAgICAgY3AgPSBzdHJjaHIocGVlcm5hbWUsICddJyk7Ci0gICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewotCSAgICAgIC8qCi0JICAgICAgICogU2VlIGlmIGl0IGlzIGFuIElQdjYgbGluay1sb2NhbCBhZGRyZXNzIHdpdGggaW50ZXJmYWNlCi0JICAgICAgICogbmFtZSBhcyA8em9uZV9pZD4sIGxpa2UgZmU4MDo6MTIzNCVldGgwLgotCSAgICAgICAqIFBsZWFzZSByZWZlciB0byB0aGUgaW50ZXJuZXQgZHJhZnQsIElQdjYgU2NvcGVkIEFkZHJlc3MgQXJjaGl0ZWN0dXJlCi0JICAgICAgICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1pcG5nd2ctc2NvcGluZy1hcmNoLTA0LnR4dAotCSAgICAgICAqCi0JICAgICAgICovCi0JICAgICAgICBjaGFyICpzY29wZV9pZDsKLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0JICAgICAgICB1bnNpZ25lZCBpbnQgaWZfaW5kZXggPSAwOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgKmNwID0gJ1wwJzsKLQkJc2NvcGVfaWQgPSBzdHJjaHIocGVlcm5hbWUgKyAxLCAnJScpOwotCQlpZiAoc2NvcGVfaWQgIT0gTlVMTCkgewotCQkgICAgKnNjb3BlX2lkID0gJ1wwJzsKLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0JCSAgICBpZl9pbmRleCA9IGlmX25hbWV0b2luZGV4KHNjb3BlX2lkICsgMSk7Ci0jZW5kaWYKLQkJfQotICAgICAgICAgICAgICAgIGlmICgqKGNwICsgMSkgPT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdG9pKGNwICsgMikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBwZWVybmFtZSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUHY2IGFkZHJlc3Mgd2l0aCBwb3J0IHN1ZmZpeCA6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9pKGNwICsgMikpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKGF0b2koY3AgKyAyKSk7Ci0jaWYgZGVmaW5lZChIQVZFX0lGX05BTUVUT0lOREVYKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9zY29wZV9pZCA9IGlmX2luZGV4OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc29sdmVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfcHRvbgotICAgICAgICAgICAgICAgICAgICAgICAgKEFGX0lORVQ2LCBwZWVybmFtZSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUHY2IGFkZHJlc3Mgd2l0aCBzcXVhcmUgYnJhY2tldHNcbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubyA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0bm8gPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8gPSBTTk1QX1BPUlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucyhwb3J0bm8pOwotI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNvbHZlZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQkJaWYgKHNjb3BlX2lkICE9IE5VTEwpIHsKLQkJICAqc2NvcGVfaWQgPSAnJSc7Ci0JCX0KLQkJKmNwID0gJ10nOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY3AgPSBzdHJyY2hyKHBlZXJuYW1lLCAnOicpOwotICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewotCSAgICBjaGFyICpzY29wZV9pZDsKLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0JICAgIHVuc2lnbmVkIGludCBpZl9pbmRleCA9IDA7Ci0jZW5kaWYKLQkgICAgKmNwID0gJ1wwJzsKLQkgICAgc2NvcGVfaWQgPSBzdHJjaHIocGVlcm5hbWUgKyAxLCAnJScpOwotCSAgICBpZiAoc2NvcGVfaWQgIT0gTlVMTCkgewotCSAgICAgICAgKnNjb3BlX2lkID0gJ1wwJzsKLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0JICAgICAgICBpZl9pbmRleCA9IGlmX25hbWV0b2luZGV4KHNjb3BlX2lkICsgMSk7Ci0jZW5kaWYKLQkgICAgfQotICAgICAgICAgICAgaWYgKGF0b2koY3AgKyAxKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBwZWVybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQdjYgYWRkcmVzcyB3aXRoIHBvcnQgc3VmZml4IDolZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9pKGNwICsgMSkpKTsKLSAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGNwICsgMSkpOwotI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKLSAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBnb3RvIHJlc29sdmVkOwotICAgICAgICAgICAgfQotCSAgICBpZiAoc2NvcGVfaWQgIT0gTlVMTCkgewotCSAgICAgICpzY29wZV9pZCA9ICclJzsKLQkgICAgfQotICAgICAgICAgICAgKmNwID0gJzonOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2VlIGlmIGl0IGlzIEpVU1QgYW4gSVB2NiBhZGRyZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBwZWVybmFtZSwgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgImp1c3QgSVB2NiBhZGRyZXNzXG4iKSk7Ci0gICAgICAgICAgICBnb3RvIHJlc29sdmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogV2VsbCwgaXQgbXVzdCBiZSBhIGhvc3RuYW1lIHRoZW4sIHBvc3NpYmx5IHdpdGggYW4gYXBwZW5kZWQgOnBvcnQuCi0gICAgICAgICAqIFNvcnQgdGhhdCBvdXQgZmlyc3QuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgY3AgPSBzdHJyY2hyKHBlZXJuYW1lLCAnOicpOwotICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewotICAgICAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChhdG9pKGNwICsgMSkgIT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lKD8pIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b2koY3AgKyAxKSkpOwotICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKGF0b2koY3AgKyAxKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogTm8gaWRlYSwgbG9va3MgYm9ndXMgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgcGFzcyB0aGUgZnVsbCB0aGluZyB0bwotICAgICAgICAgICAgICAgICAqIHRoZSBuYW1lIHJlc29sdmVyIGJlbG93LiAgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgKmNwID0gJzonOwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lKD8pIHdpdGggZW1iZWRkZWQgJzonP1xuIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaC4gIAotICAgICAgICAgICAgICovCi0gICAgICAgIH0KLQotICAgICAgICBpZiAocGVlcm5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJlbXB0eSBob3N0bmFtZVxuIikpOwotICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSNpZiBIQVZFX0dFVEFERFJJTkZPCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50ID0geyAwIH07Ci0gICAgICAgICAgICBoaW50LmFpX2ZsYWdzID0gMDsKLSAgICAgICAgICAgIGhpbnQuYWlfZmFtaWx5ID0gUEZfSU5FVDY7Ci0gICAgICAgICAgICBoaW50LmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKLSAgICAgICAgICAgIGhpbnQuYWlfcHJvdG9jb2wgPSAwOwotCi0gICAgICAgICAgICBlcnIgPSBnZXRhZGRyaW5mbyhwZWVybmFtZSwgTlVMTCwgJmhpbnQsICZhZGRycyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0jaWYgSEFWRV9HQUlfU1RSRVJST1IKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJnZXRhZGRyaW5mbyhcIiVzXCIsIE5VTEwsIC4uLik6ICVzXG4iLCBwZWVybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGdhaV9zdHJlcnJvcihlcnIpKTsKLSNlbHNlCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZ2V0YWRkcmluZm8oXCIlc1wiLCBOVUxMLCAuLi4pOiAoZXJyb3IgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgcGVlcm5hbWUsIGVycik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFkZHJzICE9IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICBtZW1jcHkoJmFkZHItPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcnMtPmFpX2FkZHIpLT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWZyZWVhZGRyaW5mbyhhZGRycyk7Ci0gICAgICAgIH0KLQkJZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJGYWlsZWQgdG8gcmVzb2x2ZSBJUHY2IGhvc3RuYW1lXG4iKSk7Ci0JCX0KLSNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCi0gICAgICAgIGhwID0gZ2V0aXBub2RlYnluYW1lKHBlZXJuYW1lLCBBRl9JTkVUNiwgMCwgJmVycik7Ci0gICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlID0gJWQpXG4iLCBlcnIpKTsKLSAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICBtZW1jcHkoJihhZGRyLT5zaW42X2FkZHIpLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCi0gICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShwZWVybmFtZSk7Ci0gICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlKVxuIikpOwotICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUNikgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChub3QgQUZfSU5FVDYhKVxuIikpOwotICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoJihhZGRyLT5zaW42X2FkZHIpLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSEFWRV9HRVRIT1NUQllOQU1FICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZXJlIGlzIG5vIG5hbWUgcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZS4gIAotICAgICAgICAgKi8KLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgIm5vIGdldGFkZHJpbmZvKCkvZ2V0aXBub2RlYnluYW1lKCkvZ2V0aG9zdGJ5bmFtZSgpXG4iKTsKLSAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKkhBVkVfR0VUSE9TVEJZTkFNRSAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJOVUxMIHBlZXJuYW1lIikpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgcmVzb2x2ZWQ6Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgInJldHVybiB7IEFGX0lORVQ2LCBbJXNdOiVodSB9XG4iLAotICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHItPnNpbjZfYWRkciwgZGVidWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRlYnVnX2FkZHIpKSwgbnRvaHMoYWRkci0+c2luNl9wb3J0KSkpOwotICAgIGZyZWUocGVlcm5hbWUpOwotICAgIHJldHVybiAxOwotfQotCi0KLWludAotbmV0c25tcF9zb2NrYWRkcl9pbjYoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGludCByZW1vdGVfcG9ydCkKLXsKLSAgICBjaGFyIGJ1ZltzaXplb2YocmVtb3RlX3BvcnQpICogMyArIDJdOwotICAgIHNwcmludGYoYnVmLCAiOiV1IiwgcmVtb3RlX3BvcnQpOwotICAgIHJldHVybiBuZXRzbm1wX3NvY2thZGRyX2luNl8yKGFkZHIsIGlucGVlcm5hbWUsIHJlbW90ZV9wb3J0ID8gYnVmIDogTlVMTCk7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIGluZXRfbWFrZV9tYXNrX2FkZHIoIGludCBwZiwgdm9pZCAqZHN0LCBpbnQgbWFza2xlbmd0aCApCi0gKiAgICAgIGNvbnZlcnQgZnJvbSBiaXQgbGVuZ3RoIHNwZWNpZmllZCBtYXNrbGVuZ3RoIHRvIG5ldHdvcmsgZm9ybWF0LCAKLSAqICAgICAgd2hpY2ggZmlsbHMgMSBmcm9tIHVudGlsIHNwZWNpZmllZCBiaXQgbGVuZ3RoLgotICogICAgICBkc3QgaXMgdXNhbGx5IHRoZSBzdHJ1Y3RlciBvZiBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYuIAotICogICAgICBtYWtlbGVuZ3RoIG11c3QgYmUgYW4gaW50ZXJnZXIgZnJvbSAwIHRvIDMyIGlmIHBmIGlzIFBGX0lORVQsCi0gKiAgICAgIG9yIGZyb20gMCB0byAxMjggaWYgcGYgaXMgUEZfSU5FVDYuCi0gKiByZXR1cm46Ci0gKiAgICAgIDAgaWYgdGhlIGlucHV0IGRhdGEsIG1hc2tsZW5ndGggd2FzIHZhbGlkIGZvciAKLSAqICAgICAgdGhlIHNwZWNpZmllZCBwcm90b2NvbCBmYW1pbHkuCi0gKiAgICAgIC0xIGlmIHRoZSB0aGUgaW5wdXQgZGF0YSB3YXNuJ3QgdmFsaWQuCi0gKi8KLQotaW50Ci1pbmV0X21ha2VfbWFza19hZGRyKGludCBwZiwgdm9pZCAqZHN0LCBpbnQgbWFza2xlbmd0aCkKLXsKLQotICAgIHVuc2lnbmVkIGxvbmcgICBNYXNrID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgbWFza0JpdCA9IDB4ODAwMDAwMDBMOwotICAgIHVuc2lnbmVkIGNoYXIgICBtYXNrID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyICAgbWFza2JpdCA9IDB4ODBMOwotICAgIGludCAgICAgICAgICAgICBpLCBqLCBqajsKLQotCi0gICAgc3dpdGNoIChwZikgewotICAgIGNhc2UgUEZfSU5FVDoKLSAgICAgICAgaWYgKG1hc2tsZW5ndGggPCAwIHx8IG1hc2tsZW5ndGggPiAzMikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAoKHN0cnVjdCBpbl9hZGRyICopIGRzdCktPnNfYWRkciA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKG1hc2tsZW5ndGgtLSkgewotICAgICAgICAgICAgTWFzayB8PSBtYXNrQml0OwotICAgICAgICAgICAgbWFza0JpdCA+Pj0gMTsKLSAgICAgICAgfQotICAgICAgICAoKHN0cnVjdCBpbl9hZGRyICopIGRzdCktPnNfYWRkciA9IGh0b25sKE1hc2spOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUEZfSU5FVDY6Ci0gICAgICAgIGlmIChtYXNrbGVuZ3RoIDwgMCB8fCBtYXNrbGVuZ3RoID4gMTI4KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHJbaV0pKSA9IDB4MDA7Ci0gICAgICAgIH0KLQotICAgICAgICBqID0gKGludCkgbWFza2xlbmd0aCAvIDg7Ci0gICAgICAgIGpqID0gbWFza2xlbmd0aCAlIDg7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewotICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcltpXSkpID0gMHhmZjsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoamotLSkgewotICAgICAgICAgICAgbWFzayB8PSBtYXNrYml0OwotICAgICAgICAgICAgbWFza2JpdCA+Pj0gMTsKLSAgICAgICAgfQotCi0JaWYgKGogPCBzaXplb2YgKCgoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHIpKXsKLQkgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcltqXSkpID0gbWFzazsKLQl9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgcHJvdG9jb2wgZmFtaWx5ICovCi0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogaW50Ci0gKiBpbmV0X2FkZHJfY29tcGxlbWVudCggaW50IHBmLCB2b2lkICpzcmMsIHZvaWQgKmRzdCApCi0gKiAgICAgIGNvbnZlcnQgZnJvbSBzcmMgdG8gZHN0LCB3aGljaCBhbGwgYml0cyAKLSAqICAgICAgYXJlIGJpdC1jb21wbGltZW50IG9mIHNyYy4KLSAqICAgICAgU3JjLCBkc3QgYXJlIHVzdXNhbGx5IHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNi4gIAotICogcmV0dXJuOgotICogICAgICAwIGlmIHRoZSBpbnB1dCBkYXRhIHNyYyBhbmQgZHN0IGhhdmUgdGhlIHNhbWUgc2l6ZQotICogICAgICAtMSBpZiB0aGUgdGhlIGlucHV0IGRhdGEgd2Fzbid0IHZhbGlkLgotICovCi0KLWludAotaW5ldF9hZGRyX2NvbXBsZW1lbnQoaW50IHBmLCB2b2lkICpzcmMsIHZvaWQgKmRzdCkKLXsKLQotICAgIGludCAgICAgICAgICAgICBpOwotCi0gICAgaWYgKHNpemVvZihzcmMpICE9IHNpemVvZihkc3QpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzd2l0Y2ggKHBmKSB7Ci0gICAgY2FzZSBQRl9JTkVUOgotICAgICAgICAoKHN0cnVjdCBpbl9hZGRyICopIGRzdCktPnNfYWRkciA9Ci0gICAgICAgICAgICB+KChzdHJ1Y3QgaW5fYWRkciAqKSBzcmMpLT5zX2FkZHI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEZfSU5FVDY6Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyW2ldKSkgPQotICAgICAgICAgICAgICAgICh+KCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgc3JjKS0+czZfYWRkcltpXSkpKQotICAgICAgICAgICAgICAgICYgMHhmZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogaW50Ci0gKiBpbmV0X2FkZHJfYW5kKCBpbnQgcGYsIHZvaWQgKnNyYzEsIHZvaWQgKnNyYzIsIHZvaWQgKmRzdCkgCi0gKiAgICAgIHRha2UgQU5EIG9wZXJhdGlvbiBvbiBzcmMxIGFuZCBzcmMyLCBhbmQgb3V0cHV0IHRoZSByZXN1bHQgdG8gZHN0LgotICogICAgICBTcmMxLCBzcmMyLCBhbmQgZHN0IGFyZSB1c3VzYWxseSBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYuICAKLSAqIHJldHVybjoKLSAqICAgICAgMCBpZiB0aGUgaW5wdXQgZGF0YSBzcmMgYW5kIGRzdCBoYXZlIHRoZSBzYW1lIHNpemUKLSAqICAgICAgLTEgaWYgdGhlIHRoZSBpbnB1dCBkYXRhIGFyZSBub3QgdGhlIHNhbWUgc2l6ZQotICovCi0KLWludAotaW5ldF9hZGRyX2FuZChpbnQgcGYsIHZvaWQgKnNyYzEsIHZvaWQgKnNyYzIsIHZvaWQgKmRzdCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLQotICAgIGlmIChzaXplb2Yoc3JjMSkgIT0gc2l6ZW9mKHNyYzIpIHx8IHNpemVvZihzcmMyKSAhPSBzaXplb2YoZHN0KSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoIChwZikgewotICAgIGNhc2UgUEZfSU5FVDoKLSAgICAgICAgKChzdHJ1Y3QgaW5fYWRkciAqKSBkc3QpLT5zX2FkZHIgPQotICAgICAgICAgICAgKChzdHJ1Y3QgaW5fYWRkciAqKSBzcmMxKS0+c19hZGRyICYgKChzdHJ1Y3QgaW5fYWRkciAqKSBzcmMyKS0+Ci0gICAgICAgICAgICBzX2FkZHI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBQRl9JTkVUNjoKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHJbaV0pKSA9Ci0gICAgICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgc3JjMSktPnM2X2FkZHJbaV0pKSAmCi0gICAgICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgc3JjMiktPnM2X2FkZHJbaV0pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0KLS8qCi0gKiBpbnQKLSAqIGluZXRfYWRkcnNfY29uc2lzdGVuY2UgKGludCBwZiwgdm9pZCAqbmV0LCB2b2lkICptYXNrICkgCi0gKiAgICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBuZXR3b3JrIGFkZHJlc3MgbmV0IGlzIGNvbnNpc3RlbnQKLSAqICAgICAgd2l0aCB0aGUgbmV0bWFzayBhZGRyZXNzLCBtYXNrLgotICogICAgICBOZXQgYW5kIG1hc2sgYXJlIHVzdXNhbGx5IHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNi4gIAotICogTm90ZToKLSAqICAgICAgTXVzdCBzcGVmaWV5IHByb3RvY29sIGZhbWlseSBpbiBwZi4KLSAqIHJldHVybjoKLSAqICAgICAgMCBpZiB0aGVyZSBpcyBubyBjb25zaXN0ZW5jZSB3aXRoIGFkZHJlc3MgIm5ldCIgYW5kICJtYXNrIi4KLSAqICAgICAgLTEgaWYgbmV0d29yayBhZGRyZXNzIGlzIGluY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgYWRkcmVzcywgZm9yIAotICogICAgICBpbnN0YW5jZSwgbmV0d29yayBhZGRyZXNzIGlzIDE5Mi4xNjguMC4xMjggaW4gc3BpdGUgb2YgbmV0bWFzaywgCi0gKiAgICAgIHdoaWNoIGlzIDI1NS4yNTUuMjU1LjAuIAotICogICAgICBUaGUgY2FzZSB0aGF0IHRoZSBzaXplIG9mIG5ldCBhbmQgbWFzayBhcmUgZGlmZmVyZW50IGFsc28gcmV0dXJucyAtMS4KLSAqLwotCi1pbnQKLWluZXRfYWRkcnNfY29uc2lzdGVuY2UoaW50IHBmLCB2b2lkICpuZXQsIHZvaWQgKm1hc2spCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICp0bXAsICpkc3Q7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiAqdG1wNiwgKmRzdDY7Ci0gICAgaW50ICAgICAgICAgICAgIHJldDsKLQotICAgIHN3aXRjaCAocGYpIHsKLSAgICBjYXNlIFBGX0lORVQ6Ci0gICAgICAgIHRtcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICAgICAgaWYgKCF0bXApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlJlc291cmNlIGZhaWx1cmUgaW4gaW5ldF9hZGRyX2NvbnNpc3RlbmNlKCkiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQodG1wLCAwLCBzaXplb2YoKnRtcCkpOwotICAgICAgICB0bXAtPnNpbl9mYW1pbHkgPSBQRl9JTkVUOwotICAgICAgICBpZiAoaW5ldF9hZGRyX2NvbXBsZW1lbnQKLSAgICAgICAgICAgIChQRl9JTkVULCAoc3RydWN0IGluX2FkZHIgKikgbWFzaywgJnRtcC0+c2luX2FkZHIpICE9IDApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkZhaWwgaW4gZnVuY3Rpb24gb2YgaW5ldF9hZGRyX2NvbXBsZW1lbnQoKSIpOwotICAgICAgICAgICAgZnJlZSh0bXApOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGRzdCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICAgICAgaWYgKCFkc3QpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlJlc291cmNlIGZhaWx1cmUgaW4gaW5ldF9hZGRyX2NvbnNpc3RlbmNlKCkiKTsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoZHN0LCAwLCBzaXplb2YoKmRzdCkpOwotICAgICAgICBkc3QtPnNpbl9mYW1pbHkgPSBQRl9JTkVUOwotICAgICAgICBpZiAoaW5ldF9hZGRyX2FuZAotICAgICAgICAgICAgKFBGX0lORVQsIChzdHJ1Y3QgaW5fYWRkciAqKSBuZXQsICZ0bXAtPnNpbl9hZGRyLAotICAgICAgICAgICAgICZkc3QtPnNpbl9hZGRyKSAhPSAwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJGYWlsIGluIGZ1bmN0aW9uIG9mIGluZXRfYWRkcl9hbmQoKSIpOwotICAgICAgICAgICAgZnJlZShkc3QpOwotICAgICAgICAgICAgZnJlZSh0bXApOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHJldCA9ICgoZHN0LT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgPyAwIDogLTEpOwotICAgICAgICBmcmVlKGRzdCk7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQRl9JTkVUNjoKLSAgICAgICAgdG1wNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAoIXRtcDYpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlJlc291cmNlIGZhaWx1cmUgaW4gaW5ldF9hZGRyX2NvbnNpc3RlbmNlKCkiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQodG1wNiwgMCwgc2l6ZW9mKCp0bXA2KSk7Ci0gICAgICAgIHRtcDYtPnNpbjZfZmFtaWx5ID0gUEZfSU5FVDY7Ci0gICAgICAgIGlmIChpbmV0X2FkZHJfY29tcGxlbWVudAotICAgICAgICAgICAgKFBGX0lORVQ2LCAoc3RydWN0IGluNl9hZGRyICopIG1hc2ssICZ0bXA2LT5zaW42X2FkZHIpICE9IDApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkZhaWwgaW4gZnVuY3Rpb24gb2YgaW5ldF9hZGRyX2NvbXBsZW1lbnQoKSIpOwotICAgICAgICAgICAgZnJlZSh0bXA2KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBkc3Q2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmICghZHN0NikgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiUmVzb3VyY2UgZmFpbHVyZSBpbiBpbmV0X2FkZHJfY29uc2lzdGVuY2UoKSIpOwotICAgICAgICAgICAgZnJlZSh0bXA2KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoZHN0NiwgMCwgc2l6ZW9mKCpkc3Q2KSk7Ci0gICAgICAgIGRzdDYtPnNpbjZfZmFtaWx5ID0gUEZfSU5FVDY7Ci0gICAgICAgIGlmIChpbmV0X2FkZHJfYW5kCi0gICAgICAgICAgICAoUEZfSU5FVDYsIChzdHJ1Y3QgaW42X2FkZHIgKikgbmV0LCAmdG1wNi0+c2luNl9hZGRyLAotICAgICAgICAgICAgICZkc3Q2LT5zaW42X2FkZHIpKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJGYWlsIGluIGZ1bmN0aW9uIG9mIGluZXRfYWRkcl9hbmQoKSIpOwotICAgICAgICAgICAgZnJlZShkc3Q2KTsKLSAgICAgICAgICAgIGZyZWUodG1wNik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZkc3Q2LT5zaW42X2FkZHIpID09IDEgPyAwIDogLTEpOwotICAgICAgICBmcmVlKGRzdDYpOwotICAgICAgICBmcmVlKHRtcDYpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIG1hc2tlZF9hZGRyZXNzX2FyZV9lcXVhbCAocGYsIGZyb20sIG1hc2ssIG5ldHdvcmspIAotICogICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIEFORCBvcGVyYXRpb24gb24gYWRkcmVzcyAiZnJvbSIgYW5kICJtYXNrIiwKLSAqICAgICAgYW5kIGNoZWNrIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gYWRkcmVzcyAibmV0d29yayIuIAotICogICAgICBGcm9tLCBuZXQgYW5kIG1hc2sgYXJlIHVzdXNhbGx5IHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNi4gIAotICogTm90ZToKLSAqICAgICAgTXVzdCBzcGVmaWV5IHByb3RvY29sIGZhbWlseSBpbiBwZi4KLSAqIHJldHVybjoKLSAqICAgICAgMCBpZiBhZGRyZXNzICJmcm9tIiBtYXNrZWQgYnkgYWRkcmVzcyAibWFzayIgaXMgZXFhdWwgdG8gCi0gKiAgICAgIGFkZHJlc3MgIm5ldHdvcmsiLiAKLSAqICAgICAgLTEgaWYgYWRkcmVzcyAiZnJvbSIgbWFza2VkIGJ5IGFkZHJlc3MgIm1hc2siIGlzbid0IGVxYXVsIHRvIAotICogICAgICBhZGRyZXNzICJuZXR3b3JrIi4gRm9yIGluc3RhbmNlLCBhZGRyZXNzICJmcm9tIiBpcyAKLSAqICAgICAgIDE5Mi4xNjguMC4xMjkgYW5kICJtYXNrIiBpcyAyNTUuMjU1LjI1NS4xMjguIFRoZW4sIG1hc2tlZCAKLSAqICAgICAgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMTI4LiBJZiBhZGRyZXNzICJuZXR3b3JrIiBpcyAxOTIuMTY4LjAuMTI4LAotICogICAgICByZXR1cm4gMCwgb3RoZXJ3aXNlIC0xLgotICogICAgICBBbHNvIHJldHVubiAtMSBpZiBlYWNoIGFkZHJlc3MgZmFtaWx5IG9mIGZyb20sIG1hc2ssIG5ldHdvcmsKLSAqICAgICAgaXNuJ3QgdGhlIHNhbWUuCi0gKi8KLQotaW50Ci1tYXNrZWRfYWRkcmVzc19hcmVfZXF1YWwoaW50IGFmLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqbmV0d29yaykKLXsKLQotICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwotICAgIG1lbXNldCgmc3MsIDAsIHNpemVvZihzcykpOwotCi0gICAgc3dpdGNoIChhZikgewotICAgIGNhc2UgUEZfSU5FVDoKLSAgICAgICAgaWYgKG1hc2stPlNTX0ZBTUlMWSAhPSBQRl9JTkVUIHx8IG5ldHdvcmstPlNTX0ZBTUlMWSAhPSBQRl9JTkVUKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgc3MuU1NfRkFNSUxZID0gUEZfSU5FVDsKLSAgICAgICAgaW5ldF9hZGRyX2FuZChQRl9JTkVULAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBmcm9tKS0+c2luX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopIG1hc2spLT5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnNzKS0+c2luX2FkZHIpOwotICAgICAgICBpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnNzKS0+c2luX2FkZHIuc19hZGRyID09Ci0gICAgICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBuZXR3b3JrKS0+c2luX2FkZHIuc19hZGRyKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBGX0lORVQ2OgotICAgICAgICBpZiAobWFzay0+U1NfRkFNSUxZICE9IFBGX0lORVQ2IHx8IG5ldHdvcmstPlNTX0ZBTUlMWSAhPSBQRl9JTkVUNikgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHNzLlNTX0ZBTUlMWSA9IFBGX0lORVQ2OwotICAgICAgICBpbmV0X2FkZHJfYW5kKFBGX0lORVQ2LAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZnJvbSktPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG1hc2spLT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmc3MpLT5zaW42X2FkZHIpOwotI2lmbmRlZiBJTjZfQVJFX0FERFJfRVFVQUwKLSNkZWZpbmUgSU42X0FSRV9BRERSX0VRVUFMKGEsYikgSU42X0FERFJfRVFVQUwoYSxiKQotI2VuZGlmCi0gICAgICAgIGlmIChJTjZfQVJFX0FERFJfRVFVQUwoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmc3MpLT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBuZXR3b3JrKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luNl9hZGRyKSA9PSAxKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0vKgotICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgImNvbTJzZWM2IiBjb25maWd1cmF0aW9uIHRva2VuCi0gKiBmdW5jdGlvbmFsaXR5IGZvciBjb21wYXRpYmlsaXR5LiAgCi0gKi8KLQotI2RlZmluZSBFWEFNUExFX05FVFdPUksgICAgICAgIk5FVFdPUksiCi0jZGVmaW5lIEVYQU1QTEVfQ09NTVVOSVRZICAgICAiQ09NTVVOSVRZIgotCi10eXBlZGVmIHN0cnVjdCBfY29tMlNlYzZFbnRyeSB7Ci0gICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTl07Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBuZXR3b3JrOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbWFzazsKLSAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgc3RydWN0IF9jb20yU2VjNkVudHJ5ICpuZXh0OwotfSBjb20yU2VjNkVudHJ5OwotCi1jb20yU2VjNkVudHJ5ICAqY29tMlNlYzZMaXN0ID0gTlVMTCwgKmNvbTJTZWM2TGlzdExhc3QgPSBOVUxMOwotCi0KLXZvaWQKLW1lbW1vdmVfY29tMlNlYzZFbnRyeShjb20yU2VjNkVudHJ5ICogYywKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZWNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldCwgc3RydWN0IHNvY2thZGRyX2luNiBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnRleHROYW1lKQotewotICAgIHNucHJpbnRmKGMtPnNlY05hbWUsIHN0cmxlbihzZWNOYW1lKSArIDEsICIlcyIsIHNlY05hbWUpOwotICAgIHNucHJpbnRmKGMtPmNvbnRleHROYW1lLCBzdHJsZW4oY29udGV4dE5hbWUpICsgMSwgIiVzIiwgY29udGV4dE5hbWUpOwotICAgIHNucHJpbnRmKGMtPmNvbW11bml0eSwgc3RybGVuKGNvbW11bml0eSkgKyAxLCAiJXMiLCBjb21tdW5pdHkpOwotICAgIG1lbW1vdmUoJmMtPm5ldHdvcmssICZuZXQsIHNpemVvZihuZXQpKTsKLSAgICBtZW1tb3ZlKCZjLT5tYXNrLCAmbWFzaywgc2l6ZW9mKG1hc2spKTsKLSAgICBjLT5uZXh0ID0gTlVMTDsKLX0KLQotCi0jaWZuZGVmIElQVjZfU1RSSU5HX0xFTgotI2RlZmluZSBJUFY2X1NUUklOR19MRU4gNTUKLSNlbmRpZgotCi12b2lkCi1uZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQotewotICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgc291cmNlW0lQVjZfU1RSSU5HX0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgKmNwID0gTlVMTCwgKnN0cm5ldHdvcmsgPSBOVUxMLCAqc3RybWFzayA9IE5VTEw7Ci0gICAgY29tMlNlYzZFbnRyeSAgKmUgPSBOVUxMOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbmV0LCBtYXNrOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiB0bXA7Ci0KLSAgICBtZW1zZXQoJm5ldCwgMCwgc2l6ZW9mKG5ldCkpOwotICAgIG1lbXNldCgmbWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKLSAgICBtZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotICAgIG5ldC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotICAgIG1hc2suc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICB0bXAuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLQotICAgIC8qCi0gICAgICogR2V0IHNlY3VyaXR5LCBzb3VyY2UgYWRkcmVzcy9uZXRtYXNrIGFuZCBjb21tdW5pdHkgc3RyaW5ncy4gIAotICAgICAqLwotICAgIGNwID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7Ci0gICAgaWYgKHN0cmNtcChzZWNOYW1lLCAiLUNuIikgPT0gMCkgewotICAgICAgICBpZiAoIWNwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBjb250ZXh0TmFtZSwgc2l6ZW9mKGNvbnRleHROYW1lKSk7Ci0gICAgICAgIGNwID0gY29weV9ud29yZCggY3AsIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dE5hbWVbMF0gPSAnXDAnOwotICAgIH0KLSAgICBpZiAoc2VjTmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKHNlY05hbWUpID4gKFZBQ01TVFJJTkdMRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJzZWN1cml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3AgPSBjb3B5X253b3JkKCBjcCwgc291cmNlLCBzaXplb2Yoc291cmNlKSk7Ci0gICAgaWYgKHNvdXJjZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU09VUkNFIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJuY21wKHNvdXJjZSwgRVhBTVBMRV9ORVRXT1JLLCBzdHJsZW4oRVhBTVBMRV9ORVRXT1JLKSkgPT0KLSAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgTkVUV09SSyBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwID0gY29weV9ud29yZCggY3AsIGNvbW11bml0eSwgc2l6ZW9mKGNvbW11bml0eSkpOwotICAgIGlmIChjb21tdW5pdHlbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXJcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlCi0gICAgICAgIGlmIChzdHJuY21wCi0gICAgICAgICAgICAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc3RybGVuKEVYQU1QTEVfQ09NTVVOSVRZKSkKLSAgICAgICAgICAgID09IDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjb21tdW5pdHkpID4gKENPTU1VTklUWV9NQVhfTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiY29tbXVuaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogUHJvY2VzcyB0aGUgc291cmNlIGFkZHJlc3MvbmV0bWFzayBzdHJpbmcuICAKLSAgICAgKi8KLSAgICBjcCA9IHN0cmNocihzb3VyY2UsICcvJyk7Ci0gICAgaWYgKGNwICE9IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTWFzayBnaXZlbi4gIAotICAgICAgICAgKi8KLSAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgc3RybWFzayA9IGNwICsgMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIERlYWwgd2l0aCB0aGUgbmV0d29yayBwYXJ0IGZpcnN0LiAgCi0gICAgICovCi0gICAgaWYgKChzdHJjbXAoc291cmNlLCAiZGVmYXVsdCIpID09IDApIHx8IChzdHJjbXAoc291cmNlLCAiOjoiKSA9PSAwKSkgewotICAgICAgICBpZiAoKHN0cm5ldHdvcmsgPSBzdHJkdXAoIjA6OjAiKSkgIT0gTlVMTCkKLQl7Ci0JICAgIGlmICgoc3RybWFzayA9IHN0cmR1cCgiMDo6MCIpKSAhPSBOVUxMKQotCSAgICB7Ci0JCi0JCWluZXRfcHRvbihBRl9JTkVUNiwgc3RybmV0d29yaywgJm5ldC5zaW42X2FkZHIpOwotCQlpbmV0X3B0b24oQUZfSU5FVDYsIHN0cm1hc2ssICZtYXNrLnNpbjZfYWRkcik7Ci0JCQotCQllID0gKGNvbTJTZWM2RW50cnkgKikgbWFsbG9jKHNpemVvZihjb20yU2VjNkVudHJ5KSk7Ci0JCWlmIChlICE9IE5VTEwpIHsKLQkJICAgIG1lbW1vdmVfY29tMlNlYzZFbnRyeShlLCBzZWNOYW1lLCBjb21tdW5pdHksIG5ldCwgbWFzaywgY29udGV4dE5hbWUpOwotCQkgICAgaWYgKGNvbTJTZWM2TGlzdExhc3QgIT0gTlVMTCkgewotCQkJY29tMlNlYzZMaXN0TGFzdC0+bmV4dCA9IGU7Ci0JCQljb20yU2VjNkxpc3RMYXN0ID0gZTsKLQkJICAgIH0gZWxzZSB7Ci0JCQljb20yU2VjNkxpc3RMYXN0ID0gY29tMlNlYzZMaXN0ID0gZTsKLQkJICAgIH0KLQkJfQotCQllbHNlIHsKLQkJICAgIGNvbmZpZ19wZXJyb3IgKCJtZW1vcnkgZXJyb3IiKTsKLQkJfQotCQlmcmVlIChzdHJtYXNrKTsKLQkgICAgfQotCSAgICBlbHNlIHsKLQkJREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSIsCi0JCQkgICAgIkNvdWxkbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnlcbiIpKTsKLQkgICAgfQotCSAgICBmcmVlIChzdHJuZXR3b3JrKTsKLQl9Ci0JZWxzZSB7Ci0JICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAotCQkJIkNvdWxkbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnlcbiIpKTsKLQl9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IGludGVycHJldGluZyBhcyBJUHY2IGFkZHJlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHNvdXJjZSwgJm5ldC5zaW42X2FkZHIpID09IDEpIHsKLSAgICAgICAgICAgIGlmIChzdHJtYXNrID09IE5VTEwgfHwgKnN0cm1hc2sgPT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGluZXRfbWFrZV9tYXNrX2FkZHIoUEZfSU5FVDYsICZtYXNrLnNpbjZfYWRkciwgMTI4KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNocihzdHJtYXNrLCAnOicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmV0X3B0b24oUEZfSU5FVDYsIHN0cm1hc2ssICZuZXQuc2luNl9hZGRyKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfbWFrZV9tYXNrX2FkZHIKLSAgICAgICAgICAgICAgICAgICAgICAgIChQRl9JTkVUNiwgJm1hc2suc2luNl9hZGRyLCBhdG9pKHN0cm1hc2spKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhbmQgbWFzayBhcmUgY29uc2lzdGVudC4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoaW5ldF9hZGRyc19jb25zaXN0ZW5jZQotICAgICAgICAgICAgICAgIChQRl9JTkVUNiwgJm5ldC5zaW42X2FkZHIsICZtYXNrLnNpbjZfYWRkcikgIT0gMCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInNvdXJjZS9tYXNrIG1pc21hdGNoIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlID0gKGNvbTJTZWM2RW50cnkgKikgbWFsbG9jKHNpemVvZihjb20yU2VjNkVudHJ5KSk7Ci0gICAgICAgICAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRXZlcnl0aGluZyBpcyBva2F5LiAgQ29weSB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlIGFsbG9jYXRlZAotICAgICAgICAgICAgICogYWJvdmUgYW5kIGFkZCBpdCB0byBFTkQgb2YgdGhlIGxpc3QuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHN0cm1hc2sgIT0gTlVMTCAmJiBzdHJuZXR3b3JrICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPFwiJXNcIiwgJXMvJXM+ID0+IFwiJXNcIlxuIiwgY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5ldHdvcmssIHN0cm1hc2ssIHNlY05hbWUpKTsKLSAgICAgICAgICAgICAgICBmcmVlKHN0cm1hc2spOwotICAgICAgICAgICAgICAgIGZyZWUoc3RybmV0d29yayk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5XG4iKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1tb3ZlX2NvbTJTZWM2RW50cnkoZSwgc2VjTmFtZSwgY29tbXVuaXR5LCBuZXQsIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUpOwotICAgICAgICAgICAgaWYgKGNvbTJTZWM2TGlzdExhc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QtPm5leHQgPSBlOwotICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gY29tMlNlYzZMaXN0ID0gZTsKLSAgICAgICAgICAgIH0KLQotI2lmIEhBVkVfR0VUQUREUklORk8KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE5vcGUsIE11c3QgYmUgYSBob3N0bmFtZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaSwgKnJlczsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICBoYnVmW05JX01BWEhPU1RdOwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGdhaV9lcnJvcjsKLQotICAgICAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7Ci0gICAgICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBQRl9JTkVUNjsKLSAgICAgICAgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKLSAgICAgICAgICAgIGlmICgoZ2FpX2Vycm9yID0gZ2V0YWRkcmluZm8oc291cmNlLCBOVUxMLCAmaGludHMsICZyZXMpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcihnYWlfc3RyZXJyb3IoZ2FpX2Vycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGFpID0gcmVzOyBhaSAhPSBOVUxMOyBhaSA9IGFpLT5haV9uZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldG5hbWVpbmZvCi0gICAgICAgICAgICAgICAgICAgIChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4sIGhidWYsIHNpemVvZihoYnVmKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgIDAsIE5JX05VTUVSSUNIT1NUKSkgewotICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJnZXRuYW1laW5mbyBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtbW92ZSgmbmV0LCBhaS0+YWlfYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgICAgICAgICBpbmV0X21ha2VfbWFza19hZGRyKFBGX0lORVQ2LCAmbWFzay5zaW42X2FkZHIsIDEyOCk7Ci0KLSAgICAgICAgICAgICAgICBlID0gKGNvbTJTZWM2RW50cnkgKikgbWFsbG9jKHNpemVvZihjb20yU2VjNkVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogRXZlcnl0aGluZyBpcyBva2F5LiAgQ29weSB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlIGFsbG9jYXRlZAotICAgICAgICAgICAgICAgICAqIGFib3ZlIGFuZCBhZGQgaXQgdG8gRU5EIG9mIHRoZSBsaXN0LiAgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxcIiVzXCIsICVzPiA9PiBcIiVzXCJcbiIsIGNvbW11bml0eSwgaGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNOYW1lKSk7Ci0gICAgICAgICAgICAgICAgbWVtbW92ZV9jb20yU2VjNkVudHJ5KGUsIHNlY05hbWUsIGNvbW11bml0eSwgbmV0LCBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbTJTZWM2TGlzdExhc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0LT5uZXh0ID0gZTsKLSAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdCA9IGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdCA9IGNvbTJTZWM2TGlzdCA9IGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlcyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhyZXMpOwotCi0jZW5kaWYgLyogSEFWRV9HRVRBRERSSU5GTyAqLwotCi0gICAgICAgIH0KLSAgICAgICAgLyoKLSAgICAgICAgICogZnJlZShzdHJuZXR3b3JrKTsgCi0gICAgICAgICAqLwotICAgIH0KLX0KLQotdm9pZAotbmV0c25tcF91ZHA2X2NvbTJTZWM2TGlzdF9mcmVlKHZvaWQpCi17Ci0gICAgY29tMlNlYzZFbnRyeSAgKmUgPSBjb20yU2VjNkxpc3Q7Ci0gICAgd2hpbGUgKGUgIT0gTlVMTCkgewotICAgICAgICBjb20yU2VjNkVudHJ5ICAqdG1wID0gZTsKLSAgICAgICAgZSA9IGUtPm5leHQ7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICB9Ci0gICAgY29tMlNlYzZMaXN0ID0gY29tMlNlYzZMaXN0TGFzdCA9IE5VTEw7Ci19Ci0KLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotCi12b2lkCi1uZXRzbm1wX3VkcDZfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQotewotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiY29tMnNlYzYiLCBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jb20yU2VjNkxpc3RfZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstQ24gQ09OVEVYVF0gc2VjTmFtZSBJUHY2LW5ldHdvcmstYWRkcmVzc1svbmV0bWFza10gY29tbXVuaXR5Iik7Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLX0KLQotCi0KLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLS8qCi0gKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gY29tMnNlYyBlbnRyaWVzLCBvciByZXR1cm4gMSBpZiB0aGVyZSBBUkUgY29tMnNlYyAKLSAqIGVudHJpZXMuICBPbiByZXR1cm4sIGlmIGEgY29tMnNlYyBlbnRyeSBtYXRjaGVkIHRoZSBwYXNzZWQgcGFyYW1ldGVycywKLSAqIHRoZW4gKnNlY05hbWUgcG9pbnRzIGF0IHRoZSBhcHByb3ByaWF0ZSBzZWN1cml0eSBuYW1lLCBvciBpcyBOVUxMIGlmIHRoZQotICogcGFyYW1ldGVycyBkaWQgbm90IG1hdGNoIGFueSBjb20yc2VjIGVudHJ5LiAgCi0gKi8KLQotaW50Ci1uZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW11bml0eV9sZW4sIGNoYXIgKipzZWNOYW1lLCBjaGFyICoqY29udGV4dE5hbWUpCi17Ci0gICAgY29tMlNlYzZFbnRyeSAgKmM7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiAqZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG9wYXF1ZTsKLSAgICBjaGFyICAgICAgICAgICAqenRjb21tdW5pdHkgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICBzdHI2W0lORVQ2X0FERFJTVFJMRU5dOwotCi0gICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAqc2VjTmFtZSA9IE5VTEw7ICAvKiBIYXZlbid0IGZvdW5kIGFueXRoaW5nIHlldCAqLwotICAgIH0KLQotICAgIC8qCi0gICAgICogU3BlY2lhbCBjYXNlIGlmIHRoZXJlIGFyZSBOTyBlbnRyaWVzIChhcyBvcHBvc2VkIHRvIG5vIE1BVENISU5HCi0gICAgICogZW50cmllcykuICAKLSAgICAgKi8KLQotICAgIGlmIChjb20yU2VjNkxpc3QgPT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLCAibm8gY29tMnNlYyBlbnRyaWVzXG4iKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgdGhlcmUgaXMgbm8gSVB2NiBzb3VyY2UgYWRkcmVzcywgCi0gICAgICogdGhlbiB0aGVyZSBjYW4gYmUgbm8gdmFsaWQgc2VjdXJpdHkgbmFtZS4gIAotICAgICAqLwotCi0gICAgaWYgKG9wYXF1ZSA9PSBOVUxMIHx8IG9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpCi0gICAgICAgIHx8IGZyb20tPnNpbjZfZmFtaWx5ICE9IFBGX0lORVQ2KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICJubyBJUHY2IHNvdXJjZSBhZGRyZXNzIGluIFBEVT9cbiIpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgenRjb21tdW5pdHkgPSAoY2hhciAqKSBtYWxsb2MoY29tbXVuaXR5X2xlbiArIDEpOwotICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0gICAgICAgIG1lbWNweSh6dGNvbW11bml0eSwgY29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKTsKLSAgICAgICAgenRjb21tdW5pdHlbY29tbXVuaXR5X2xlbl0gPSAnXDAnOwotICAgIH0KLQotICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmZyb20tPnNpbjZfYWRkciwgc3RyNiwgc2l6ZW9mKHN0cjYpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLCAicmVzb2x2ZSA8XCIlc1wiLCAlcz5cbiIsCi0gICAgICAgICAgICAgICAgenRjb21tdW5pdHkgPyB6dGNvbW11bml0eSA6ICI8bWFsbG9jIGVycm9yPiIsIHN0cjYpKTsKLQotICAgIGZvciAoYyA9IGNvbTJTZWM2TGlzdDsgYyAhPSBOVUxMOyBjID0gYy0+bmV4dCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGFyZSA8XCIlc1wiLCAweCUwMzJ4LzB4JTAzMng+IiwgYy0+Y29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICBjLT5uZXR3b3JrLCBjLT5tYXNrKSk7Ci0KLSAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IChpbnQpc3RybGVuKGMtPmNvbW11bml0eSkpICYmCi0gICAgICAgICAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSAmJgotICAgICAgICAgICAgKG1hc2tlZF9hZGRyZXNzX2FyZV9lcXVhbChmcm9tLT5zaW42X2ZhbWlseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIGZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSAmYy0+bWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopICZjLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yaykgPT0gMCkpIHsKLSAgICAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKLSAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqc2VjTmFtZSA9IGMtPnNlY05hbWU7Ci0gICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7Ci0gICAgfQotICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUoenRjb21tdW5pdHkpOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcDZfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwotCi0gICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW42XzIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VkcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLS8qCi0gKiBTZWU6Ci0gKiAKLSAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtb3BzLXRhZGRyZXNzLW1pYi0wMS50eHQKLSAqIAotICogKG9yIG5ld2VyIGVxdWl2YWxlbnQpIGZvciBkZXRhaWxzIG9mIHRoZSBUQyB3aGljaCB3ZSBhcmUgdXNpbmcgZm9yCi0gKiB0aGUgbWFwcGluZyBoZXJlLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHA2X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSAxOCkgewotICAgICAgICBtZW1zZXQoKHVfY2hhciAqKSAmIGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW42X2FkZHIuczZfYWRkciksIG8sIDE2KTsKLSAgICAgICAgYWRkci5zaW42X3BvcnQgPSAob1sxNl0gPDwgOCkgKyBvWzE3XTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotdm9pZAotbmV0c25tcF91ZHA2X2N0b3Iodm9pZCkKLXsKLSAgICB1ZHA2RG9tYWluLm5hbWUgPSBuZXRzbm1wX1VEUElQdjZEb21haW47Ci0gICAgdWRwNkRvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgdWRwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3VkcDZfY3JlYXRlX3RzdHJpbmc7Ci0gICAgdWRwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91ZHA2X2NyZWF0ZV9vc3RyaW5nOwotICAgIHVkcDZEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoNSwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHVkcDZEb21haW4ucHJlZml4WzBdID0gInVkcDYiOwotICAgIHVkcDZEb21haW4ucHJlZml4WzFdID0gImlwdjYiOwotICAgIHVkcDZEb21haW4ucHJlZml4WzJdID0gInVkcHY2IjsKLSAgICB1ZHA2RG9tYWluLnByZWZpeFszXSA9ICJ1ZHBpcHY2IjsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdWRwNkRvbWFpbik7Ci19Ci0KLSNlbHNlCi0KLSNpZmRlZiBORVRTTk1QX0RMTAotLyogbmVlZCB0aGlzIGhvb2sgZm9yIHdpbjMyIE1TVkMrKyBETEwgYnVpbGQgKi8KLXZvaWQKLW5ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCi17IH0KLSNlbmRpZgotCi0jZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4gKi8KLQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wVW5peERvbWFpbi5jIGIvc25tcGxpYi9zbm1wVW5peERvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzZlOTVhLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFVuaXhEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDY2MSArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19VTl9ICi0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+Ci0KLQotI2lmbmRlZiBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4KLSNkZWZpbmUgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOICA1Ci0jZW5kaWYKLQotI2lmbmRlZiBTVU5fTEVOCi0vKgotICogRXZhbHVhdGUgdG8gYWN0dWFsIGxlbmd0aCBvZiB0aGUgYHNvY2thZGRyX3VuJyBzdHJ1Y3R1cmUuCi0gKi8KLSNkZWZpbmUgU1VOX0xFTihwdHIpICgoc2l6ZV90KSAoKChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgMCktPnN1bl9wYXRoKSAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAoKHB0ciktPnN1bl9wYXRoKSkKLSNlbmRpZgotCi1vaWQgbmV0c25tcF9Vbml4RG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fTE9DQUwgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gdW5peERvbWFpbjsKLQotCi0vKgotICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdlIHVzZSB0byBob2xkIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhLgotICovCi0KLXR5cGVkZWYgc3RydWN0IF9zb2NrYWRkcl91bl9wYWlyIHsKLSAgICBpbnQgICAgICAgICAgICAgbG9jYWw7Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuIHNlcnZlcjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gY2xpZW50OwotfSBzb2NrYWRkcl91bl9wYWlyOwotCi0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF91bml4X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuICp0byA9IE5VTEw7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl91biAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICB0byA9ICYoKChzb2NrYWRkcl91bl9wYWlyICopIHQtPmRhdGEpLT5zZXJ2ZXIpOwotICAgICAgICBsZW4gPSBTVU5fTEVOKHRvKTsKLSAgICB9Ci0gICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogIkxvY2FsIElQQyIgaXMgdGhlIFBvc2l4LjFnIHRlcm0gZm9yIFVuaXggZG9tYWluIHByb3RvY29scywKLSAgICAgICAgICogYWNjb3JkaW5nIHRvIFcuIFIuIFN0ZXZlbnMsIGBgVW5peCBOZXR3b3JrIFByb2dyYW1taW5nIFZvbHVtZSBJCi0gICAgICAgICAqIFNlY29uZCBFZGl0aW9uJycsIHAuIDM3NC4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiBzdHJkdXAoIkxvY2FsIElQQzogdW5rbm93biIpOwotICAgIH0gZWxzZSBpZiAodG8tPnN1bl9wYXRoWzBdID09IDApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhbiBhYnN0cmFjdCBuYW1lLiAgV2UgY291bGQgcmVuZGVyIGl0IGFzIGhleCBvciBzb21ldGhpbmcKLSAgICAgICAgICogYnV0IGxldCdzIG5vdCB3b3JyeSBhYm91dCB0aGF0IGZvciBub3cuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gc3RyZHVwKCJMb2NhbCBJUEM6IGFic3RyYWN0Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciAgICAgICAgICAgKnRtcCA9IChjaGFyICopIG1hbGxvYygxNiArIGxlbik7Ci0gICAgICAgIGlmICh0bXAgIT0gTlVMTCkgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsICJMb2NhbCBJUEM6ICVzIiwgdG8tPnN1bl9wYXRoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG1wOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjawotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF91bml4X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0gICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgc29ja2xlbl90ICAgICAgIHRvbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7Ci0gICAgc3RydWN0IHNvY2thZGRyICp0bzsKLQotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7Ci0gICAgICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbXNldCh0bywgMCwgdG9sZW4pOwotICAgICAgICB9Ci0gICAgICAgIGlmKGdldHNvY2tuYW1lKHQtPnNvY2ssIHRvLCAmdG9sZW4pICE9IDApewotICAgICAgICAgICAgZnJlZSh0byk7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfTsKLSAgICAgICAgd2hpbGUgKHJjIDwgMCkgewotI2lmZGVmIE1TR19ET05UV0FJVAotICAgICAgICAgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIE1TR19ET05UV0FJVCwgTlVMTCwgTlVMTCk7Ci0jZWxzZQotICAgICAgICAgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIE5VTEwpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJyZWN2IGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKm9wYXF1ZSA9ICh2b2lkKil0bzsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJyZWN2IGZkICVkIGdvdCAlZCBieXRlc1xuIiwgdC0+c29jaywgcmMpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91bml4X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0gICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgInNlbmQgJWQgYnl0ZXMgdG8gJXAgb24gZmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1ZiwgdC0+c29jaykpOwotICAgICAgICB3aGlsZSAocmMgPCAwKSB7Ci0gICAgICAgICAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdW5peF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAwOwotICAgIHNvY2thZGRyX3VuX3BhaXIgKnN1cCA9IChzb2NrYWRkcl91bl9wYWlyICopIHQtPmRhdGE7Ci0KLSAgICBpZiAodC0+c29jayA+PSAwKSB7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgICAgICBpZiAoc3VwICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChzdXAtPmxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1cC0+c2VydmVyLnN1bl9wYXRoWzBdICE9IDApIHsKLSAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAiY2xvc2U6IHNlcnZlciB1bmxpbmsoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cC0+c2VydmVyLnN1bl9wYXRoKSk7Ci0gICAgICAgICAgICAgICAgICB1bmxpbmsoc3VwLT5zZXJ2ZXIuc3VuX3BhdGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1cC0+Y2xpZW50LnN1bl9wYXRoWzBdICE9IDApIHsKLSAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAiY2xvc2U6IGNsaWVudCB1bmxpbmsoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cC0+Y2xpZW50LnN1bl9wYXRoKSk7Ci0gICAgICAgICAgICAgICAgICB1bmxpbmsoc3VwLT5jbGllbnQuc3VuX3BhdGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdW5peF9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyICpmYXJlbmQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBuZXdzb2NrID0gLTE7Ci0gICAgc29ja2xlbl90ICAgICAgIGZhcmVuZGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOwotCi0gICAgZmFyZW5kID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2MoZmFyZW5kbGVuKTsKLQotICAgIGlmIChmYXJlbmQgPT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4KLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgbWVtc2V0KGZhcmVuZCwgMCwgZmFyZW5kbGVuKTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgZmFyZW5kLCAmZmFyZW5kbGVuKTsKLQotICAgICAgICBpZiAobmV3c29jayA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZmFyZW5kICVwIGxlbiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZhcmVuZCwgKGludCkgZmFyZW5kbGVuKSk7Ci0gICAgICAgIHQtPmRhdGEgPSBmYXJlbmQ7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7Ci0gICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKLSAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19SQ1ZCVUYsIDEsIDApOwotICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICB9IGVsc2UgewotICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIFVuaXgtZG9tYWluIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKLSAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzCi0gKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8gKGFuZCB3ZSBtYWtlIHVwIGEgdGVtcG9yYXJ5IG5hbWUgZm9yCi0gKiB0aGUgbG9jYWwgZW5kIG9mIHRoZSBjb25uZWN0aW9uKS4KLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VuaXhfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl91biAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBzb2NrYWRkcl91bl9wYWlyICpzdXAgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKnN0cmluZyA9IE5VTEw7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnN1bl9mYW1pbHkgIT0gQUZfVU5JWCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHN0cmluZyA9IG5ldHNubXBfdW5peF9mbXRhZGRyKE5VTEwsICh2b2lkICopYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHJpbmcpKTsKLSAgICBmcmVlKHN0cmluZyk7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX1VuaXhEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9Ci0gICAgICAgIHNpemVvZihuZXRzbm1wX1VuaXhEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfVW5peERvbWFpblswXSk7Ci0KLSAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihzb2NrYWRkcl91bl9wYWlyKSk7Ci0gICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KHQtPmRhdGEsIDAsIHNpemVvZihzb2NrYWRkcl91bl9wYWlyKSk7Ci0gICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc29ja2FkZHJfdW5fcGFpcik7Ci0gICAgc3VwID0gKHNvY2thZGRyX3VuX3BhaXIgKikgdC0+ZGF0YTsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19TVFJFQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOwotCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICB0LT5sb2NhbCA9ICh1X2NoYXIgKiltYWxsb2Moc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zdW5fcGF0aCwgc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IHN0cmxlbihhZGRyLT5zdW5fcGF0aCk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIHRvIHRoZSBnaXZlbgotICAgICAgICAgKiBwYXRoICh1bmxpbmtpbmcgaXQgZmlyc3QsIHRvIGF2b2lkIGVycm9ycykuCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOwotCi0gICAgICAgIHVubGluayhhZGRyLT5zdW5fcGF0aCk7Ci0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsIFNVTl9MRU4oYWRkcikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF90cmFuc3BvcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGJpbmQgXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNhdmUgdGhlIGFkZHJlc3MgaW4gdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyCi0gICAgICAgICAqIHVzZSBieSBuZXRzbm1wX3VuaXhfY2xvc2UuCi0gICAgICAgICAqLwotCi0gICAgICAgIHN1cC0+c2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotICAgICAgICBzdHJjcHkoc3VwLT5zZXJ2ZXIuc3VuX3BhdGgsIGFkZHItPnN1bl9wYXRoKTsKLSAgICAgICAgc3VwLT5sb2NhbCA9IDE7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHRvIGFycml2ZS4KLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBsaXN0ZW4gdG8gXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgIHQtPnJlbW90ZSA9ICh1X2NoYXIgKiltYWxsb2Moc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5yZW1vdGUsIGFkZHItPnN1bl9wYXRoLCBzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IHN0cmxlbihhZGRyLT5zdW5fcGF0aCk7Ci0KLSAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBjb25uZWN0IHRvIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTYXZlIHRoZSByZW1vdGUgYWRkcmVzcyBpbiB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IKLSAgICAgICAgICogbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdW5peF9zZW5kLgotICAgICAgICAgKi8KLQotICAgICAgICBzdXAtPnNlcnZlci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKLSAgICAgICAgc3RyY3B5KHN1cC0+c2VydmVyLnN1bl9wYXRoLCBhZGRyLT5zdW5fcGF0aCk7Ci0gICAgICAgIHN1cC0+bG9jYWwgPSAwOwotICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOwotICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1JDVkJVRiwgbG9jYWwsIDApOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCi0gICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLgotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdW5peF9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3VuaXhfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF91bml4X2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3VuaXhfYWNjZXB0OwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3VuaXhfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VuaXhfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbG9jYWwsCi0JCQkgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7Ci0KLSAgICBpZiAoc3RyaW5nICYmICpzdHJpbmcgIT0gJ1wwJykgewotICAgIH0gZWxzZSBpZiAoZGVmYXVsdF90YXJnZXQgJiYgKmRlZmF1bHRfdGFyZ2V0ICE9ICdcMCcpIHsKLSAgICAgIHN0cmluZyA9IGRlZmF1bHRfdGFyZ2V0OwotICAgIH0KLQotICAgIGlmICgoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyAhPSAnXDAnKSAmJgotCShzdHJsZW4oc3RyaW5nKSA8IHNpemVvZihhZGRyLnN1bl9wYXRoKSkpIHsKLSAgICAgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKLSAgICAgICAgbWVtc2V0KGFkZHIuc3VuX3BhdGgsIDAsIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7Ci0gICAgICAgIHN0cmxjcHkoYWRkci5zdW5fcGF0aCwgc3RyaW5nLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOwotICAgICAgICByZXR1cm4gbmV0c25tcF91bml4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHJpbmcgIT0gTlVMTCAmJiAqc3RyaW5nICE9ICdcMCcpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJQYXRoIHRvbyBsb25nIGZvciBVbml4IGRvbWFpbiB0cmFuc3BvcnRcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdW5peF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLQotICAgIGlmIChvX2xlbiA+IDAgJiYgb19sZW4gPCAoc2l6ZW9mKGFkZHIuc3VuX3BhdGgpIC0gMSkpIHsKLSAgICAgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKLSAgICAgICAgbWVtc2V0KGFkZHIuc3VuX3BhdGgsIDAsIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7Ci0gICAgICAgIHN0cmxjcHkoYWRkci5zdW5fcGF0aCwgKGNvbnN0IGNoYXIgKilvLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOwotICAgICAgICByZXR1cm4gbmV0c25tcF91bml4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChvX2xlbiA+IDApIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJQYXRoIHRvbyBsb25nIGZvciBVbml4IGRvbWFpbiB0cmFuc3BvcnRcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotdm9pZAotbmV0c25tcF91bml4X2N0b3Iodm9pZCkKLXsKLSAgICB1bml4RG9tYWluLm5hbWUgPSBuZXRzbm1wX1VuaXhEb21haW47Ci0gICAgdW5peERvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1VuaXhEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgdW5peERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgdW5peERvbWFpbi5wcmVmaXhbMF0gPSAidW5peCI7Ci0KLSAgICB1bml4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHVuaXhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdW5peF9jcmVhdGVfdHN0cmluZzsKLSAgICB1bml4RG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3VuaXhfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnVuaXhEb21haW4pOwotfQotCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0vKiBzdXBwb3J0IGZvciBTTk1QdjEgYW5kIFNOTVB2MmMgb24gdW5peCBkb21haW4qLwotCi0jZGVmaW5lIEVYQU1QTEVfQ09NTVVOSVRZICJDT01NVU5JVFkiCi10eXBlZGVmIHN0cnVjdCBfY29tMlNlY1VuaXhFbnRyeSB7Ci0gICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIHNvY2twYXRoW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pXTsKLSAgICB1bnNpZ25lZCBsb25nICAgcGF0aGxlbjsKLSAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgc3RydWN0IF9jb20yU2VjVW5peEVudHJ5ICpuZXh0OwotfSBjb20yU2VjVW5peEVudHJ5OwotCi1jb20yU2VjVW5peEVudHJ5ICAgKmNvbTJTZWNVbml4TGlzdCA9IE5VTEwsICpjb20yU2VjVW5peExpc3RMYXN0ID0gTlVMTDsKLQotCi1pbnQKLW5ldHNubXBfdW5peF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipzZWNOYW1lLCBjaGFyICoqY29udGV4dE5hbWUpCi17Ci0gICAgY29tMlNlY1VuaXhFbnRyeSAgICpjOwotICAgIHN0cnVjdCBzb2NrYWRkcl91biAqdG8gPSAoc3RydWN0IHNvY2thZGRyX3VuICopIG9wYXF1ZTsKLSAgICBjaGFyICAgICAgICAgICAqenRjb21tdW5pdHkgPSBOVUxMOwotCi0gICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAqc2VjTmFtZSA9IE5VTEw7ICAvKiBIYXZlbid0IGZvdW5kIGFueXRoaW5nIHlldCAqLwotICAgIH0KLQotICAgIC8qCi0gICAgICogU3BlY2lhbCBjYXNlIGlmIHRoZXJlIGFyZSBOTyBlbnRyaWVzIChhcyBvcHBvc2VkIHRvIG5vIE1BVENISU5HCi0gICAgICogZW50cmllcykuCi0gICAgICovCi0KLSAgICBpZiAoY29tMlNlY1VuaXhMaXN0ID09IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoZXJlIGlzIG5vIHVuaXggc29ja2V0IHBhdGgsIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5Ci0gICAgICogbmFtZS4KLSAgICAgKi8KLQotICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pIHx8Ci0gICAgICAgIHRvLT5zdW5fZmFtaWx5ICE9IEFGX1VOSVgpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgIm5vIHVuaXggZGVzdGluZSBhZGRyZXNzIGluIFBEVT9cbiIpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgREVCVUdJRigibmV0c25tcF91bml4X2dldFNlY05hbWUiKSB7Ci0gICAgICAgIHp0Y29tbXVuaXR5ID0gKGNoYXIgKiltYWxsb2MoY29tbXVuaXR5X2xlbiArIDEpOwotICAgICAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotICAgICAgICAgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOwotICAgICAgICAgICAgenRjb21tdW5pdHlbY29tbXVuaXR5X2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIj5cbiIsCi0gICAgICAgICAgICAgICAgICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iKSk7Ci0gICAgfQotCi0gICAgZm9yIChjID0gY29tMlNlY1VuaXhMaXN0OyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsImNvbXBhcmUgPFwiJXNcIix0byBzb2NrZXQgJXM+IiwKLSAgICAgICAgICAgICAgICAgICAgYy0+Y29tbXVuaXR5LCBjLT5zb2NrcGF0aCApKTsKLSAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IHN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgotICAgICAgICAgICAgKG1lbWNtcChjb21tdW5pdHksIGMtPmNvbW11bml0eSwgY29tbXVuaXR5X2xlbikgPT0gMCkgJiYKLSAgICAgICAgICAgIC8qIGNvbXBhcmUgc29ja3BhdGgsIGlmIHBhdGhsZW4gPT0gMCwgYWx3YXlzIG1hdGNoICovCi0gICAgICAgICAgICAoc3RybGVuKHRvLT5zdW5fcGF0aCkgPT0gYy0+cGF0aGxlbiB8fCBjLT5wYXRobGVuID09IDApICYmCi0gICAgICAgICAgICAobWVtY21wKHRvLT5zdW5fcGF0aCwgYy0+c29ja3BhdGgsIGMtPnBhdGhsZW4pID09IDApCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKLSAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqc2VjTmFtZSA9IGMtPnNlY05hbWU7Ci0gICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7Ci0gICAgfQotICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUoenRjb21tdW5pdHkpOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotdm9pZAotbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKLXsKLSAgICBjaGFyICAgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXSwgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOICsgMV07Ci0gICAgY2hhciAgICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTiArIDFdOwotICAgIGNoYXIgICAgICAgICAgICAgIHNvY2twYXRoW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pICsgMV07Ci0gICAgY29tMlNlY1VuaXhFbnRyeSAqZSA9IE5VTEw7Ci0KLQotICAgIHBhcmFtID0gY29weV9ud29yZChwYXJhbSwgc2VjTmFtZSwgVkFDTVNUUklOR0xFTik7Ci0gICAgaWYgKHN0cmNtcChzZWNOYW1lLCAiLUNuIikgPT0gMCkgewotICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBjb250ZXh0TmFtZSwgc2l6ZW9mKGNvbnRleHROYW1lKSk7Ci0gICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7Ci0gICAgICAgIGlmIChjb250ZXh0TmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHROYW1lWzBdID0gJ1wwJzsKLSAgICB9Ci0gICAgaWYgKHNlY05hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE5BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihzZWNOYW1lKSA+IChWQUNNU1RSSU5HTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigic2VjdXJpdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgICAgIHBhcmFtID0gY29weV9ud29yZChwYXJhbSwgc29ja3BhdGgsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pIC0gMSk7Ci0gICAgaWYgKHNvY2twYXRoWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTT0NLUEFUSCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKHNvY2twYXRoKSA+IChzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoInNvY2twYXRoIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogaWYgc29ja3BhdGggPT0gImRlZmF1bHQiLCBzZXQgcGF0aGxlbj0wKi8KLSAgICBpZihzdHJjbXAoc29ja3BhdGgsICJkZWZhdWx0IikgPT0gMCl7Ci0gICAgICAgIHNvY2twYXRoWzBdID0gMDsKLSAgICB9Ci0KLSAgICBwYXJhbSA9IGNvcHlfbndvcmQocGFyYW0sIGNvbW11bml0eSwgQ09NTVVOSVRZX01BWF9MRU4pOwotICAgIGlmIChjb21tdW5pdHlbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXJcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJuY21wCi0gICAgICAgICAgICAgICAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc3RybGVuKEVYQU1QTEVfQ09NTVVOSVRZKSkKLSAgICAgICAgICAgICAgID09IDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjb21tdW5pdHkpID4gKENPTU1VTklUWV9NQVhfTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiY29tbXVuaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGUgPSAoY29tMlNlY1VuaXhFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKGNvbTJTZWNVbml4RW50cnkpKTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eSIsCi0gICAgICAgICAgICAgICAgIjxcIiVzXCI+ID0+IFwiJXNcIlxuIiwgY29tbXVuaXR5LCBzZWNOYW1lKSk7Ci0KLSAgICBzdHJjcHkoZS0+c2VjTmFtZSwgc2VjTmFtZSk7Ci0gICAgc3RyY3B5KGUtPmNvbnRleHROYW1lLCBjb250ZXh0TmFtZSk7Ci0gICAgc3RyY3B5KGUtPmNvbW11bml0eSwgY29tbXVuaXR5KTsKLSAgICBzdHJjcHkoZS0+c29ja3BhdGgsIHNvY2twYXRoKTsKLSAgICBlLT5wYXRobGVuID0gc3RybGVuKHNvY2twYXRoKTsKLSAgICBlLT5uZXh0ID0gTlVMTDsKLQotICAgIGlmIChjb20yU2VjVW5peExpc3RMYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgY29tMlNlY1VuaXhMaXN0TGFzdC0+bmV4dCA9IGU7Ci0gICAgICAgIGNvbTJTZWNVbml4TGlzdExhc3QgPSBlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbTJTZWNVbml4TGlzdExhc3QgPSBjb20yU2VjVW5peExpc3QgPSBlOwotICAgIH0KLX0KLQotdm9pZAotbmV0c25tcF91bml4X2NvbTJTZWNMaXN0X2ZyZWUodm9pZCkKLXsKLSAgICBjb20yU2VjVW5peEVudHJ5ICAgKmUgPSBjb20yU2VjVW5peExpc3Q7Ci0gICAgd2hpbGUgKGUgIT0gTlVMTCkgewotICAgICAgICBjb20yU2VjVW5peEVudHJ5ICAgKnRtcCA9IGU7Ci0gICAgICAgIGUgPSBlLT5uZXh0OwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIGNvbTJTZWNVbml4TGlzdCA9IGNvbTJTZWNVbml4TGlzdExhc3QgPSBOVUxMOwotfQotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0KLXZvaWQKLW5ldHNubXBfdW5peF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJjb20yc2VjdW5peCIsIG5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91bml4X2NvbTJTZWNMaXN0X2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbLUNuIENPTlRFWFRdIHNlY05hbWUgc29ja3BhdGggY29tbXVuaXR5Iik7Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9hbGFybS5jIGIvc25tcGxpYi9zbm1wX2FsYXJtLmMKaW5kZXggYzg4ZmE3NS4uYWY0ODAwZiAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2FsYXJtLmMKKysrIGIvc25tcGxpYi9zbm1wX2FsYXJtLmMKQEAgLTM0LDExICszNCw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDcsOSArNDMsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfRE1BTExPQ19ICiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgpAQCAtODksMzAgKzgyLDI0IEBACiB2b2lkCiBzYV91cGRhdGVfZW50cnkoc3RydWN0IHNubXBfYWxhcm0gKmEpCiB7Ci0gICAgaWYgKGEtPnRfbGFzdC50dl9zZWMgPT0gMCAmJiBhLT50X2xhc3QudHZfdXNlYyA9PSAwKSB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0X25vdzsKKyAgICBpZiAoIXRpbWVyaXNzZXQoJmEtPnRfbGFzdE0pKSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIE5ldmVyIGJlZW4gY2FsbGVkIHlldCwgY2FsbCB0aW1lIGB0JyBmcm9tIG5vdy4gIAorICAgICAgICAgKiBGaXJzdCBjYWxsIG9mIHNhX3VwZGF0ZV9lbnRyeSgpIGZvciBhbGFybSBhOiBzZXQgdF9sYXN0TSBhbmQgdF9uZXh0TS4KICAgICAgICAgICovCi0gICAgICAgIGdldHRpbWVvZmRheSgmdF9ub3csIE5VTEwpOwotCi0gICAgICAgIGEtPnRfbGFzdC50dl9zZWMgPSB0X25vdy50dl9zZWM7Ci0gICAgICAgIGEtPnRfbGFzdC50dl91c2VjID0gdF9ub3cudHZfdXNlYzsKLQotICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZ0X25vdywgJmEtPnQsICZhLT50X25leHQpOwotICAgIH0gZWxzZSBpZiAoYS0+dF9uZXh0LnR2X3NlYyA9PSAwICYmIGEtPnRfbmV4dC50dl91c2VjID09IDApIHsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZhLT50X2xhc3RNKTsKKyAgICAgICAgTkVUU05NUF9USU1FUkFERCgmYS0+dF9sYXN0TSwgJmEtPnQsICZhLT50X25leHRNKTsKKyAgICB9IGVsc2UgaWYgKCF0aW1lcmlzc2V0KCZhLT50X25leHRNKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBXZSd2ZSBiZWVuIGNhbGxlZCBidXQgbm90IHJlc2V0IGZvciB0aGUgbmV4dCBjYWxsLiAgCiAgICAgICAgICAqLwogICAgICAgICBpZiAoYS0+ZmxhZ3MgJiBTQV9SRVBFQVQpIHsKLSAgICAgICAgICAgIGlmIChhLT50LnR2X3NlYyA9PSAwICYmIGEtPnQudHZfdXNlYyA9PSAwKSB7CisgICAgICAgICAgICBpZiAodGltZXJpc3NldCgmYS0+dCkpIHsKKyAgICAgICAgICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZhLT50X2xhc3RNLCAmYS0+dCwgJmEtPnRfbmV4dE0pOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZV9lbnRyeTogaWxsZWdhbCBpbnRlcnZhbCBzcGVjaWZpZWRcbiIpKTsKICAgICAgICAgICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoYS0+Y2xpZW50cmVnKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5FVFNOTVBfVElNRVJBREQoJmEtPnRfbGFzdCwgJmEtPnQsICZhLT50X25leHQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFNpbmdsZSB0aW1lIGNhbGwsIHJlbW92ZSBpdC4gIApAQCAtMTUxLDcgKzEzOCw3IEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgInVucmVnaXN0ZXJlZCBhbGFybSAlZFxuIiwgCiAJCSAgICBzYV9wdHItPmNsaWVudHJlZykpOwogICAgICAgICAvKgotICAgICAgICAgKiBOb3RlOiAgZG8gbm90IGZyZWUgdGhlIGNsaWVudGFyZywgaXRzIHRoZSBjbGllbnRzIHJlc3BvbnNpYmlsaXR5IAorICAgICAgICAgKiBOb3RlOiBkbyBub3QgZnJlZSB0aGUgY2xpZW50YXJnLCBpdCdzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSAKICAgICAgICAgICovCiAgICAgICAgIGZyZWUoc2FfcHRyKTsKICAgICB9IGVsc2UgewpAQCAtMTg1LDMxICsxNzIsMTYgQEAKIHNhX2ZpbmRfbmV4dCh2b2lkKQogewogICAgIHN0cnVjdCBzbm1wX2FsYXJtICphLCAqbG93ZXN0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdF9ub3c7CiAKLSAgICBnZXR0aW1lb2ZkYXkoJnRfbm93LCBOVUxMKTsKKyAgICBmb3IgKGEgPSB0aGVhbGFybXM7IGEgIT0gTlVMTDsgYSA9IGEtPm5leHQpCisgICAgICAgIGlmICghKGEtPmZsYWdzICYgU0FfRklSRUQpCisgICAgICAgICAgICAmJiAobG93ZXN0ID09IE5VTEwgfHwgdGltZXJjbXAoJmEtPnRfbmV4dE0sICZsb3dlc3QtPnRfbmV4dE0sIDwpKSkKKyAgICAgICAgICAgIGxvd2VzdCA9IGE7CiAKLSAgICBmb3IgKGEgPSB0aGVhbGFybXM7IGEgIT0gTlVMTDsgYSA9IGEtPm5leHQpIHsKLSAgICAgICAgLyogY2hlY2sgZm9yIHRpbWUgZGVsdGEgc2tldyAqLwotICAgICAgICBpZiAoKGEtPnRfbmV4dC50dl9zZWMgLSB0X25vdy50dl9zZWMpID4gYS0+dC50dl9zZWMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0aW1lX3NrZXciLCAiVGltZSBkZWx0YSB0b28gYmlnICglZCBzZWNvbmRzKSwgc2hvdWxkIGJlICVkIHNlY29uZHMgLSBmaXhpbmdcbiIsIChhLT50X25leHQudHZfc2VjIC0gdF9ub3cudHZfc2VjKSwgYS0+dC50dl9zZWMpKTsKLSAgICAgICAgICAgIGEtPnRfbmV4dC50dl9zZWMgPSB0X25vdy50dl9zZWMgKyBhLT50LnR2X3NlYzsKLSAgICAgICAgICAgIGEtPnRfbmV4dC50dl91c2VjID0gdF9ub3cudHZfdXNlYyArIGEtPnQudHZfdXNlYzsKLSAgICAgICAgfQotICAgICAgICBpZiAobG93ZXN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGxvd2VzdCA9IGE7Ci0gICAgICAgIH0gZWxzZSBpZiAoYS0+dF9uZXh0LnR2X3NlYyA9PSBsb3dlc3QtPnRfbmV4dC50dl9zZWMpIHsKLSAgICAgICAgICAgIGlmIChhLT50X25leHQudHZfdXNlYyA8IGxvd2VzdC0+dF9uZXh0LnR2X3VzZWMpIHsKLSAgICAgICAgICAgICAgICBsb3dlc3QgPSBhOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGEtPnRfbmV4dC50dl9zZWMgPCBsb3dlc3QtPnRfbmV4dC50dl9zZWMpIHsKLSAgICAgICAgICAgIGxvd2VzdCA9IGE7Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIGxvd2VzdDsKIH0KIAorTkVUU05NUF9JTVBPUlQgc3RydWN0IHNubXBfYWxhcm0gKnNhX2ZpbmRfc3BlY2lmaWModW5zaWduZWQgaW50IGNsaWVudHJlZyk7CiBzdHJ1Y3Qgc25tcF9hbGFybSAqCiBzYV9maW5kX3NwZWNpZmljKHVuc2lnbmVkIGludCBjbGllbnRyZWcpCiB7CkBAIC0yMjUsOCArMTk3LDcgQEAKIHZvaWQKIHJ1bl9hbGFybXModm9pZCkKIHsKLSAgICBpbnQgICAgICAgICAgICAgZG9uZSA9IDA7Ci0gICAgc3RydWN0IHNubXBfYWxhcm0gKmEgPSBOVUxMOworICAgIHN0cnVjdCBzbm1wX2FsYXJtICphOwogICAgIHVuc2lnbmVkIGludCAgICBjbGllbnRyZWc7CiAgICAgc3RydWN0IHRpbWV2YWwgIHRfbm93OwogCkBAIC0yMzUsMzEgKzIwNiwyNyBAQAogICAgICAqIGNhbGwgdW50aWwgYWxsIGV2ZW50cyBhcmUgZmluYWxseSBpbiB0aGUgZnV0dXJlIGFnYWluLiAgCiAgICAgICovCiAKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgICAgaWYgKChhID0gc2FfZmluZF9uZXh0KCkpID09IE5VTEwpIHsKKyAgICB3aGlsZSAoKGEgPSBzYV9maW5kX25leHQoKSkgIT0gTlVMTCkgeworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRfbm93KTsKKworICAgICAgICBpZiAodGltZXJjbXAoJmEtPnRfbmV4dE0sICZ0X25vdywgPikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRfbm93LCBOVUxMKTsKKyAgICAgICAgY2xpZW50cmVnID0gYS0+Y2xpZW50cmVnOworICAgICAgICBhLT5mbGFncyB8PSBTQV9GSVJFRDsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAicnVuIGFsYXJtICVkXG4iLCBjbGllbnRyZWcpKTsKKyAgICAgICAgKCooYS0+dGhlY2FsbGJhY2spKSAoY2xpZW50cmVnLCBhLT5jbGllbnRhcmcpOworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJhbGFybSAlZCBjb21wbGV0ZWRcbiIsIGNsaWVudHJlZykpOwogCi0gICAgICAgIGlmICh0aW1lcmNtcCgmYS0+dF9uZXh0LCAmdF9ub3csIDwpKSB7Ci0gICAgICAgICAgICBjbGllbnRyZWcgPSBhLT5jbGllbnRyZWc7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJydW4gYWxhcm0gJWRcbiIsIGNsaWVudHJlZykpOwotICAgICAgICAgICAgKCooYS0+dGhlY2FsbGJhY2spKSAoY2xpZW50cmVnLCBhLT5jbGllbnRhcmcpOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAiYWxhcm0gJWQgY29tcGxldGVkXG4iLCBjbGllbnRyZWcpKTsKLQotICAgICAgICAgICAgaWYgKChhID0gc2FfZmluZF9zcGVjaWZpYyhjbGllbnRyZWcpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYS0+dF9sYXN0LnR2X3NlYyA9IHRfbm93LnR2X3NlYzsKLSAgICAgICAgICAgICAgICBhLT50X2xhc3QudHZfdXNlYyA9IHRfbm93LnR2X3VzZWM7Ci0gICAgICAgICAgICAgICAgYS0+dF9uZXh0LnR2X3NlYyA9IDA7Ci0gICAgICAgICAgICAgICAgYS0+dF9uZXh0LnR2X3VzZWMgPSAwOwotICAgICAgICAgICAgICAgIHNhX3VwZGF0ZV9lbnRyeShhKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAiYWxhcm0gJWQgZGVsZXRlZCBpdHNlbGZcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50cmVnKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGEgPSBzYV9maW5kX3NwZWNpZmljKGNsaWVudHJlZyk7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBhLT50X2xhc3RNID0gdF9ub3c7CisgICAgICAgICAgICB0aW1lcmNsZWFyKCZhLT50X25leHRNKTsKKyAgICAgICAgICAgIGEtPmZsYWdzICY9IH5TQV9GSVJFRDsKKyAgICAgICAgICAgIHNhX3VwZGF0ZV9lbnRyeShhKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAiYWxhcm0gJWQgZGVsZXRlZCBpdHNlbGZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRyZWcpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3NSwzOSArMjQyLDU2IEBACiAKIAogCisvKioKKyAqIExvb2sgdXAgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIG5leHQgYWxhcm0gd2lsbCBmaXJlLgorICoKKyAqIEBwYXJhbVtvdXRdIGFsYXJtX3RtIFRpbWUgYXQgd2hpY2ggdGhlIG5leHQgYWxhcm0gd2lsbCBmaXJlLgorICogQHBhcmFtW2luXSBub3cgRWFybGllc3QgdGltZSB0aGF0IHNob3VsZCBiZSB3cml0dGVuIGludG8gKmFsYXJtX3RtLgorICoKKyAqIEByZXR1cm4gWmVybyBpZiBubyBhbGFybXMgYXJlIHNjaGVkdWxlZDsgbm9uLXplcm8gJ2NsaWVudHJlZycgdmFsdWUKKyAqICAgaWRlbnRpZnlpbmcgdGhlIGZpcnN0IGFsYXJtIHRoYXQgd2lsbCBmaXJlIGlmIG9uZSBvciBtb3JlIGFsYXJtcyBhcmUKKyAqICAgc2NoZWR1bGVkLgorICovCiBpbnQKLWdldF9uZXh0X2FsYXJtX2RlbGF5X3RpbWUoc3RydWN0IHRpbWV2YWwgKmRlbHRhKQorbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKHN0cnVjdCB0aW1ldmFsICphbGFybV90bSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdykKIHsKICAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqc2FfcHRyOwotICAgIHN0cnVjdCB0aW1ldmFsICB0X25vdzsKIAogICAgIHNhX3B0ciA9IHNhX2ZpbmRfbmV4dCgpOwogCiAgICAgaWYgKHNhX3B0cikgewotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRfbm93LCAwKTsKLQotICAgICAgICBpZiAodGltZXJjbXAoJnRfbm93LCAmc2FfcHRyLT50X25leHQsID4pKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGltZSBoYXMgYWxyZWFkeSBwYXNzZWQuICBSZXR1cm4gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGFtb3VudCBvZgotICAgICAgICAgICAgICogdGltZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkZWx0YS0+dHZfc2VjID0gMDsKLSAgICAgICAgICAgIGRlbHRhLT50dl91c2VjID0gMTsKLSAgICAgICAgICAgIHJldHVybiBzYV9wdHItPmNsaWVudHJlZzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaW1lIGlzIHN0aWxsIGluIHRoZSBmdXR1cmUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgTkVUU05NUF9USU1FUlNVQigmc2FfcHRyLT50X25leHQsICZ0X25vdywgZGVsdGEpOwotCi0gICAgICAgICAgICByZXR1cm4gc2FfcHRyLT5jbGllbnRyZWc7Ci0gICAgICAgIH0KKyAgICAgICAgbmV0c25tcF9hc3NlcnQoYWxhcm1fdG0pOworICAgICAgICBuZXRzbm1wX2Fzc2VydCh0aW1lcmlzc2V0KCZzYV9wdHItPnRfbmV4dE0pKTsKKyAgICAgICAgaWYgKHRpbWVyY21wKCZzYV9wdHItPnRfbmV4dE0sIG5vdywgPikpCisgICAgICAgICAgICAqYWxhcm1fdG0gPSBzYV9wdHItPnRfbmV4dE07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICphbGFybV90bSA9ICpub3c7CisgICAgICAgIHJldHVybiBzYV9wdHItPmNsaWVudHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Cit9CiAKLSAgICAvKgotICAgICAqIE5vdGhpbmcgTGVmdC4gIAotICAgICAqLwotICAgIHJldHVybiAwOworLyoqCisgKiBHZXQgdGhlIHRpbWUgdW50aWwgdGhlIG5leHQgYWxhcm0gd2lsbCBmaXJlLgorICoKKyAqIEBwYXJhbVtvdXRdIGRlbHRhIFRpbWUgdW50aWwgdGhlIG5leHQgYWxhcm0uCisgKgorICogQHJldHVybiBaZXJvIGlmIG5vIGFsYXJtcyBhcmUgc2NoZWR1bGVkOyBub24temVybyAnY2xpZW50cmVnJyB2YWx1ZQorICogICBpZGVudGlmeWluZyB0aGUgZmlyc3QgYWxhcm0gdGhhdCB3aWxsIGZpcmUgaWYgb25lIG9yIG1vcmUgYWxhcm1zIGFyZQorICogICBzY2hlZHVsZWQuCisgKi8KK2ludAorZ2V0X25leHRfYWxhcm1fZGVsYXlfdGltZShzdHJ1Y3QgdGltZXZhbCAqZGVsdGEpCit7CisgICAgc3RydWN0IHRpbWV2YWwgdF9ub3csIGFsYXJtX3RtOworICAgIGludCByZXM7CisKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRfbm93KTsKKyAgICByZXMgPSBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoJmFsYXJtX3RtLCAmdF9ub3cpOworICAgIGlmIChyZXMpCisgICAgICAgIE5FVFNOTVBfVElNRVJTVUIoJmFsYXJtX3RtLCAmdF9ub3csIGRlbHRhKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiAKQEAgLTMyOSwyMSArMzEzLDE5IEBACiAjIGlmZGVmIEhBVkVfU0VUSVRJTUVSCiAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgaXQ7CiAKLSAgICAgICAgaXQuaXRfdmFsdWUudHZfc2VjID0gZGVsdGEudHZfc2VjOwotICAgICAgICBpdC5pdF92YWx1ZS50dl91c2VjID0gZGVsdGEudHZfdXNlYzsKLSAgICAgICAgaXQuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICAgICAgaXQuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisgICAgICAgIGl0Lml0X3ZhbHVlID0gZGVsdGE7CisgICAgICAgIHRpbWVyY2xlYXIoJml0Lml0X2ludGVydmFsKTsKIAogICAgICAgICBzaWduYWwoU0lHQUxSTSwgYWxhcm1faGFuZGxlcik7CiAgICAgICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJml0LCBOVUxMKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAic2NoZWR1bGUgYWxhcm0gJWQgaW4gJWQuJTAzZCBzZWNvbmRzXG4iLAotICAgICAgICAgICAgICAgICAgICBuZXh0YWxhcm0sIGRlbHRhLnR2X3NlYywgKGRlbHRhLnR2X3VzZWMgLyAxMDAwKSkpOworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJzY2hlZHVsZSBhbGFybSAlZCBpbiAlbGQuJTAzbGQgc2Vjb25kc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV4dGFsYXJtLCAobG9uZykgZGVsdGEudHZfc2VjLCAobG9uZykoZGVsdGEudHZfdXNlYyAvIDEwMDApKSk7CiAjIGVsc2UgIC8qIEhBVkVfU0VUSVRJTUVSICovCiAjICBpZmRlZiBTSUdBTFJNCiAgICAgICAgIHNpZ25hbChTSUdBTFJNLCBhbGFybV9oYW5kbGVyKTsKICAgICAgICAgYWxhcm0oZGVsdGEudHZfc2VjKTsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLAotICAgICAgICAgICAgICAgICAgICAic2NoZWR1bGUgYWxhcm0gJWQgaW4gcm91Z2hseSAlZCBzZWNvbmRzXG4iLCBuZXh0YWxhcm0sCisgICAgICAgICAgICAgICAgICAgICJzY2hlZHVsZSBhbGFybSAlZCBpbiByb3VnaGx5ICVsZCBzZWNvbmRzXG4iLCBuZXh0YWxhcm0sCiAgICAgICAgICAgICAgICAgICAgIGRlbHRhLnR2X3NlYykpOwogIyAgZW5kaWYgIC8qIFNJR0FMUk0gKi8KICMgZW5kaWYgIC8qIEhBVkVfU0VUSVRJTUVSICovCkBAIC0zNzQsNyArMzU2LDcgQEAKICAqCiAgKiBAcGFyYW0gY2xpZW50YXJnIGlzIGEgdm9pZCBwb2ludGVyIHVzZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVGhpcyAKICAqCXBvaW50ZXIgaXMgYXNzaWduZWQgdG8gc25tcF9hbGFybS0+Y2xpZW50YXJnIGFuZCBwYXNzZWQgaW50byB0aGUKLSAqCWNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xpZW50J3Mgc3BlY2lmYyBuZWVkcy4KKyAqCWNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xpZW50J3Mgc3BlY2lmaWMgbmVlZHMuCiAgKgogICogQHJldHVybiBSZXR1cm5zIGEgdW5pcXVlIHVuc2lnbmVkIGludGVnZXIod2hpY2ggaXMgYWxzbyBwYXNzZWQgYXMgdGhlIGZpcnN0IAogICoJYXJndW1lbnQgb2YgZWFjaCBjYWxsYmFjayksIHdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZQpAQCAtMzkwLDQwICszNzIsMTcgQEAKIHNubXBfYWxhcm1fcmVnaXN0ZXIodW5zaWduZWQgaW50IHdoZW4sIHVuc2lnbmVkIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgU05NUEFsYXJtQ2FsbGJhY2sgKiB0aGVjYWxsYmFjaywgdm9pZCAqY2xpZW50YXJnKQogewotICAgIHN0cnVjdCBzbm1wX2FsYXJtICoqc2FfcHB0cjsKLSAgICBpZiAodGhlYWxhcm1zICE9IE5VTEwpIHsKLSAgICAgICAgZm9yIChzYV9wcHRyID0gJnRoZWFsYXJtczsgKCpzYV9wcHRyKSAhPSBOVUxMOwotICAgICAgICAgICAgIHNhX3BwdHIgPSAmKCgqc2FfcHB0ciktPm5leHQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzYV9wcHRyID0gJnRoZWFsYXJtczsKLSAgICB9Ci0KLSAgICAqc2FfcHB0ciA9IFNOTVBfTUFMTE9DX1NUUlVDVChzbm1wX2FsYXJtKTsKLSAgICBpZiAoKnNhX3BwdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgc3RydWN0IHRpbWV2YWwgIHQ7CiAKICAgICBpZiAoMCA9PSB3aGVuKSB7Ci0gICAgICAgICgqc2FfcHB0ciktPnQudHZfc2VjID0gMDsKLSAgICAgICAgKCpzYV9wcHRyKS0+dC50dl91c2VjID0gMTsKKyAgICAgICAgdC50dl9zZWMgPSAwOworICAgICAgICB0LnR2X3VzZWMgPSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICgqc2FfcHB0ciktPnQudHZfc2VjID0gd2hlbjsKLSAgICAgICAgKCpzYV9wcHRyKS0+dC50dl91c2VjID0gMDsKKyAgICAgICAgdC50dl9zZWMgPSB3aGVuOworICAgICAgICB0LnR2X3VzZWMgPSAwOwogICAgIH0KLSAgICAoKnNhX3BwdHIpLT5mbGFncyA9IGZsYWdzOwotICAgICgqc2FfcHB0ciktPmNsaWVudGFyZyA9IGNsaWVudGFyZzsKLSAgICAoKnNhX3BwdHIpLT50aGVjYWxsYmFjayA9IHRoZWNhbGxiYWNrOwotICAgICgqc2FfcHB0ciktPmNsaWVudHJlZyA9IHJlZ251bSsrOwotICAgICgqc2FfcHB0ciktPm5leHQgPSBOVUxMOwotICAgIHNhX3VwZGF0ZV9lbnRyeSgqc2FfcHB0cik7CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsCi0JCSJyZWdpc3RlcmVkIGFsYXJtICVkLCB0ID0gJWQuJTAzZCwgZmxhZ3M9MHglMDJ4XG4iLAotICAgICAgICAgICAgICAgICgqc2FfcHB0ciktPmNsaWVudHJlZywgKCpzYV9wcHRyKS0+dC50dl9zZWMsCi0gICAgICAgICAgICAgICAgKCgqc2FfcHB0ciktPnQudHZfdXNlYyAvIDEwMDApLCAoKnNhX3BwdHIpLT5mbGFncykpOwotCi0gICAgaWYgKHN0YXJ0X2FsYXJtcykKLSAgICAgICAgc2V0X2FuX2FsYXJtKCk7Ci0gICAgcmV0dXJuICgqc2FfcHB0ciktPmNsaWVudHJlZzsKKyAgICByZXR1cm4gc25tcF9hbGFybV9yZWdpc3Rlcl9ocih0LCBmbGFncywgdGhlY2FsbGJhY2ssIGNsaWVudGFyZyk7CiB9CiAKIApAQCAtNDUxLDcgKzQxMCw3IEBACiAgKgogICogQHBhcmFtIGNkIGlzIGEgdm9pZCBwb2ludGVyIHVzZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVGhpcyAKICAqCXBvaW50ZXIgaXMgYXNzaWduZWQgdG8gc25tcF9hbGFybS0+Y2xpZW50YXJnIGFuZCBwYXNzZWQgaW50byB0aGUKLSAqCWNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xpZW50J3Mgc3BlY2lmYyBuZWVkcy4KKyAqCWNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xpZW50J3Mgc3BlY2lmaWMgbmVlZHMuCiAgKgogICogQHJldHVybiBSZXR1cm5zIGEgdW5pcXVlIHVuc2lnbmVkIGludGVnZXIod2hpY2ggaXMgYWxzbyBwYXNzZWQgYXMgdGhlIGZpcnN0IAogICoJYXJndW1lbnQgb2YgZWFjaCBjYWxsYmFjayksIHdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZQpAQCAtNDc2LDggKzQzNSw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgICgqcyktPnQudHZfc2VjID0gdC50dl9zZWM7Ci0gICAgKCpzKS0+dC50dl91c2VjID0gdC50dl91c2VjOworICAgICgqcyktPnQgPSB0OwogICAgICgqcyktPmZsYWdzID0gZmxhZ3M7CiAgICAgKCpzKS0+Y2xpZW50YXJnID0gY2Q7CiAgICAgKCpzKS0+dGhlY2FsbGJhY2sgPSBjYjsKQEAgLTQ4Nyw4ICs0NDUsOCBAQAogICAgIHNhX3VwZGF0ZV9lbnRyeSgqcyk7CiAKICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsCi0gICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYWxhcm0gJWQsIHQgPSAlZC4lMDNkLCBmbGFncz0weCUwMnhcbiIsCi0gICAgICAgICAgICAgICAgKCpzKS0+Y2xpZW50cmVnLCAoKnMpLT50LnR2X3NlYywgKCgqcyktPnQudHZfdXNlYyAvIDEwMDApLAorICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFsYXJtICVkLCB0ID0gJWxkLiUwM2xkLCBmbGFncz0weCUwMnhcbiIsCisgICAgICAgICAgICAgICAgKCpzKS0+Y2xpZW50cmVnLCAobG9uZykgKCpzKS0+dC50dl9zZWMsIChsb25nKSgoKnMpLT50LnR2X3VzZWMgLyAxMDAwKSwKICAgICAgICAgICAgICAgICAoKnMpLT5mbGFncykpOwogCiAgICAgaWYgKHN0YXJ0X2FsYXJtcykgewpAQCAtNTE2LDEyICs0NzQsMTIgQEAKICAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqYTsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9ub3c7CiAgICAgaWYgKChhID0gc2FfZmluZF9zcGVjaWZpYyhjbGllbnRyZWcpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdF9ub3csIE5VTEwpOwotICAgICAgICBhLT50X2xhc3QudHZfc2VjID0gdF9ub3cudHZfc2VjOwotICAgICAgICBhLT50X2xhc3QudHZfdXNlYyA9IHRfbm93LnR2X3VzZWM7Ci0gICAgICAgIGEtPnRfbmV4dC50dl9zZWMgPSAwOwotICAgICAgICBhLT50X25leHQudHZfdXNlYyA9IDA7Ci0gICAgICAgIE5FVFNOTVBfVElNRVJBREQoJnRfbm93LCAmYS0+dCwgJmEtPnRfbmV4dCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdF9ub3cpOworICAgICAgICBhLT50X2xhc3RNLnR2X3NlYyA9IHRfbm93LnR2X3NlYzsKKyAgICAgICAgYS0+dF9sYXN0TS50dl91c2VjID0gdF9ub3cudHZfdXNlYzsKKyAgICAgICAgYS0+dF9uZXh0TS50dl9zZWMgPSAwOworICAgICAgICBhLT50X25leHRNLnR2X3VzZWMgPSAwOworICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZ0X25vdywgJmEtPnQsICZhLT50X25leHRNKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtX3Jlc2V0IiwgImFsYXJtICVkIG5vdCBmb3VuZFxuIiwKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9hcGkuYyBiL3NubXBsaWIvc25tcF9hcGkuYwppbmRleCA0NTI2N2ZkLi4xOTFkZWJmIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfYXBpLmMKKysrIGIvc25tcGxpYi9zbm1wX2FwaS5jCkBAIC0xLDMgKzEsNCBAQAorCiAvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKICAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAgKiB0aGF0IG1heSBhcHBseToKQEAgLTM3LDYgKzM4LDcgQEAKICAqIHNubXBfYXBpLmMgLSBBUEkgZm9yIGFjY2VzcyB0byBzbm1wLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KQEAgLTU2LDExICs1OCw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTgxLDkgKzc5LDYgQEAKICNpZiBIQVZFX0lPX0gKICNpbmNsdWRlIDxpby5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTI3LDYgKzEyMiw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+CiAjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CiAjZW5kaWYKQEAgLTE0MCw4ICsxMzYsMjAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3RhdGlzdGljcywgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2FwaSwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfaXNfc3VidHJlZSwgc25tcF9hcGkpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcHYzX3Byb2JlX2NvbnRleHRFbmdpbmVJRF9yZmM1MzQzLCBzbm1wX2FwaSkKKworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKK2V4dGVybiB2b2lkIG5ldHNubXBfY2VydHNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5ldHNubXBfY2VydHNfc2h1dGRvd24odm9pZCk7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgICAgIF9pbml0X3NubXAodm9pZCk7CiAKK3N0YXRpYyBpbnQgICAgICBfc25tcF9zdG9yZV9uZWVkZWQgPSAwOworCiAjaW5jbHVkZSAiLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgogI2lmbmRlZiB0aW1lcmNtcApAQCAtMTg2LDcgKzE5NCw3IEBACiAKICNkZWZpbmUgREVGQVVMVF9DT01NVU5JVFkgICAicHVibGljIgogI2RlZmluZSBERUZBVUxUX1JFVFJJRVMJICAgIDUKLSNkZWZpbmUgREVGQVVMVF9USU1FT1VUCSAgICAxMDAwMDAwTAorI2RlZmluZSBERUZBVUxUX1RJTUVPVVQJICAgIE9ORV9TRUMKICNkZWZpbmUgREVGQVVMVF9SRU1QT1JUCSAgICBTTk1QX1BPUlQKICNkZWZpbmUgREVGQVVMVF9FTlRFUlBSSVNFICBkZWZhdWx0X2VudGVycHJpc2UKICNkZWZpbmUgREVGQVVMVF9USU1FCSAgICAwCkBAIC0yMjEsMTggKzIyOSw2IEBACiAgICAgc2l6ZV90ICAgICAgICAgIHBhY2tldF9sZW4sIHBhY2tldF9zaXplOwogfTsKIAotLyoKLSAqIFRoZSBsaXN0IG9mIGFjdGl2ZS9vcGVuIHNlc3Npb25zLgotICovCi1zdHJ1Y3Qgc2Vzc2lvbl9saXN0IHsKLSAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpuZXh0OwotICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwotICAgIHN0cnVjdCBzbm1wX2ludGVybmFsX3Nlc3Npb24gKmludGVybmFsOwotfTsKLQotCi0KIHN0YXRpYyBjb25zdCBjaGFyICphcGlfZXJyb3JzWy1TTk1QRVJSX01BWCArIDFdID0gewogICAgICJObyBlcnJvciIsICAgICAgICAgICAgICAgICAvKiBTTk1QRVJSX1NVQ0NFU1MgKi8KICAgICAiR2VuZXJpYyBlcnJvciIsICAgICAgICAgICAgLyogU05NUEVSUl9HRU5FUlIgKi8KQEAgLTMwMCw2ICsyOTYsOSBAQAogICAgICJLZXJiZXJvcyByZWxhdGVkIGVycm9yIiwgICAvKiBTTk1QRVJSX0tSQjUgKi8KICAgICAiUHJvdG9jb2wgZXJyb3IiLAkJLyogU05NUEVSUl9QUk9UT0NPTCAqLwogICAgICJPSUQgbm90IGluY3JlYXNpbmciLCAgICAgICAvKiBTTk1QRVJSX09JRF9OT05JTkNSRUFTSU5HICovCisgICAgIkNvbnRleHQgcHJvYmUiLCAgICAgICAgICAgIC8qIFNOTVBFUlJfSlVTVF9BX0NPTlRFWFRfUFJPQkUgKi8KKyAgICAiQ29uZmlndXJhdGlvbiBkYXRhIGZvdW5kIGJ1dCB0aGUgdHJhbnNwb3J0IGNhbid0IGJlIGNvbmZpZ3VyZWQiLCAvKiBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUcgKi8KKyAgICAiVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gZmFpbGVkIiwgLyogU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SICovCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc2VjTGV2ZWxOYW1lW10gPSB7CkBAIC0zNDksNyArMzQ4LDYgQEAKIAogc3RhdGljIHZvaWQgICAgIHNubXB2M19jYWxjX21zZ19mbGFncyhpbnQsIGludCwgdV9jaGFyICopOwogc3RhdGljIGludCAgICAgIHNubXB2M192ZXJpZnlfbXNnKG5ldHNubXBfcmVxdWVzdF9saXN0ICosIG5ldHNubXBfcGR1ICopOwotc3RhdGljIGludCAgICAgIHNubXB2M19idWlsZF9wcm9iZV9wZHUobmV0c25tcF9wZHUgKiopOwogc3RhdGljIGludCAgICAgIHNubXB2M19idWlsZCh1X2NoYXIgKiogcGt0LCBzaXplX3QgKiBwa3RfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUpOwpAQCAtMzYwLDcgKzM1OCw5IEBACiBzdGF0aWMgdm9pZCAgICAgcmVnaXN0ZXJfZGVmYXVsdF9oYW5kbGVycyh2b2lkKTsKIHN0YXRpYyBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbm1wX3Nlc3NfY29weShuZXRzbm1wX3Nlc3Npb24gKiBwc3MpOwogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2Vycm5vKHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3N5bmNoX3Jlc2V0KG5ldHNubXBfc2Vzc2lvbiAqIG5vdHVzZWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3N5bmNoX3NldHVwKG5ldHNubXBfc2Vzc2lvbiAqIG5vdHVzZWQpOwogCiAjaWZuZGVmIEhBVkVfU1RSRVJST1IKQEAgLTM4NSwxMiArMzg1LDE0IEBACiAgICAgICAgIHJldHVybiAiR0VUIjsKICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CiAgICAgICAgIHJldHVybiAiR0VUTkVYVCI7Ci0gICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKLSAgICAgICAgcmV0dXJuICJSRVNQT05TRSI7Ci0gICAgY2FzZSBTTk1QX01TR19TRVQ6Ci0gICAgICAgIHJldHVybiAiU0VUIjsKICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CiAgICAgICAgIHJldHVybiAiR0VUQlVMSyI7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGNhc2UgU05NUF9NU0dfU0VUOgorICAgICAgICByZXR1cm4gIlNFVCI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6CisgICAgICAgIHJldHVybiAiUkVTUE9OU0UiOwogICAgIGNhc2UgU05NUF9NU0dfSU5GT1JNOgogICAgICAgICByZXR1cm4gIklORk9STSI7CiAgICAgY2FzZSBTTk1QX01TR19UUkFQMjoKQEAgLTY2NCwxOSArNjY2LDE5IEBACiAgICAgLyoKICAgICAgKiBnZXQgcHNldWRvLXJhbmRvbSB2YWx1ZXMgZm9yIHJlcXVlc3QgSUQgYW5kIG1lc3NhZ2UgSUQgCiAgICAgICovCi0gICAgLyoKLSAgICAgKiBkb24ndCBhbGxvdyB6ZXJvIHZhbHVlIHRvIHJlcGVhdCBpbml0IAotICAgICAqLwogI2lmZGVmIFNWUjQKICAgICBzcmFuZDQ4KHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpOwogICAgIHRtcFJlcWlkID0gbHJhbmQ0OCgpOwogICAgIHRtcE1zZ2lkID0gbHJhbmQ0OCgpOwogI2Vsc2UKLSAgICBzcmFuZG9tKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpOworICAgIHNyYW5kb20oKHVuc2lnbmVkKSh0di50dl9zZWMgXiB0di50dl91c2VjKSk7CiAgICAgdG1wUmVxaWQgPSByYW5kb20oKTsKICAgICB0bXBNc2dpZCA9IHJhbmRvbSgpOwogI2VuZGlmCiAKKyAgICAvKgorICAgICAqIGRvbid0IGFsbG93IHplcm8gdmFsdWUgdG8gcmVwZWF0IGluaXQgCisgICAgICovCiAgICAgaWYgKHRtcFJlcWlkID09IDApCiAgICAgICAgIHRtcFJlcWlkID0gMTsKICAgICBpZiAodG1wTXNnaWQgPT0gMCkKQEAgLTY5MSwxNSArNjkzLDIyIEBACiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJ0Y3AiLCAiOjE2MSIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAidWRwNiIsICI6MTYxIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJ0Y3A2IiwgIjoxNjEiKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgImR0bHN1ZHAiLCAiOjEwMTYxIik7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJ0bHN0Y3AiLCAiOjEwMTYxIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJpcHgiLCAiLzM2ODc5Iik7CisKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJ1ZHAiLCAiOjE2MiIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgInRjcCIsICI6MTYyIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAidWRwNiIsICI6MTYyIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAidGNwNiIsICI6MTYyIik7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAiZHRsc3VkcCIsICI6MTAxNjIiKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJ0bHN0Y3AiLCAiOjEwMTYyIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAiaXB4IiwgIi8zNjg4MCIpOwogCiAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hFWF9PVVRQVVRfTEVOR1RILCAxNik7CisgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUkVUUklFUywKKyAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9SRVRSSUVTKTsKIAogI2lmZGVmIE5FVFNOTVBfVVNFX1JFVkVSU0VfQVNORU5DT0RJTkcKICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCkBAIC03NzIsNiArNzgxLDE1IEBACiAJCSAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfRElTQUJMRV9QRVJTSVNURU5UX0xPQUQpOwogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCAic25tcCIsICJub1BlcnNpc3RlbnRTYXZlIiwKIAkJICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfU0FWRSk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9Db250ZXh0RW5naW5lSUREaXNjb3ZlcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9OT19ESVNDT1ZFUlkpOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9JTlRFR0VSLCAic25tcCIsICJ0aW1lb3V0IiwKKwkJICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9USU1FT1VUKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fSU5URUdFUiwgInNubXAiLCAicmV0cmllcyIsCisJCSAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUkVUUklFUyk7CisKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NlcnZpY2VfaGFuZGxlcnMoKTsKIH0KIApAQCAtODIwLDEwICs4MzgsMTkgQEAKICAgICBzbm1wX2luaXRfc3RhdGlzdGljcygpOwogICAgIHJlZ2lzdGVyX21pYl9oYW5kbGVycygpOwogICAgIHJlZ2lzdGVyX2RlZmF1bHRfaGFuZGxlcnMoKTsKKyAgICBpbml0X3NubXBfdHJhbnNwb3J0KCk7CiAgICAgaW5pdF9zbm1wdjModHlwZSk7CiAgICAgaW5pdF9zbm1wX2FsYXJtKCk7CiAgICAgaW5pdF9zbm1wX2VudW0odHlwZSk7CiAgICAgaW5pdF92YWNtKCk7CisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorICAgIG5ldHNubXBfY2VydHNfaW5pdCgpOworI2VuZGlmCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXAiLCAiZG5zc2VjV2Fybk9ubHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZKTsKKyNlbmRpZgogCiAgICAgcmVhZF9wcmVtaWJfY29uZmlncygpOwogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKQEAgLTgzNCw2ICs4NjEsMjggQEAKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgaW5pdF9zbm1wKCkgKi8KIAorLyoqCisgKiBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgcGVyc2lzdGVudCBzdG9yZSBuZWVkcyB0byBiZSBzYXZlZC4KKyAqLwordm9pZAorc25tcF9zdG9yZV9uZWVkZWQoY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgICBERUJVR01TR1RMKCgic25tcF9zdG9yZSIsICJzZXR0aW5nIG5lZWRlZCBmbGFnLi4uXG4iKSk7CisgICAgX3NubXBfc3RvcmVfbmVlZGVkID0gMTsKK30KKwordm9pZAorc25tcF9zdG9yZV9pZl9uZWVkZWQodm9pZCkKK3sKKyAgICBpZiAoMCA9PSBfc25tcF9zdG9yZV9uZWVkZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBERUJVR01TR1RMKCgic25tcF9zdG9yZSIsICJzdG9yZSBuZWVkZWQuLi5cbiIpKTsKKyAgICBzbm1wX3N0b3JlKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKKyAgICBfc25tcF9zdG9yZV9uZWVkZWQgPSAwOworfQorCiB2b2lkCiBzbm1wX3N0b3JlKGNvbnN0IGNoYXIgKnR5cGUpCiB7CkBAIC04NjMsNiArOTEyLDkgQEAKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAgICAgc2h1dGRvd25fbWliKCk7CiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyNlbmRpZgogICAgIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpOwogICAgIG5ldHNubXBfY29udGFpbmVyX2ZyZWVfbGlzdCgpOwogICAgIGNsZWFyX3NlY19tb2QoKTsKQEAgLTg3MCwxMCArOTIyLDkgQEAKICAgICBuZXRzbm1wX2NsZWFyX3Rkb21haW5fbGlzdCgpOwogICAgIGNsZWFyX2NhbGxiYWNrKCk7CiAgICAgbmV0c25tcF9kc19zaHV0ZG93bigpOwotICAgIGNsZWFyX3VzZXJfbGlzdCgpOwogICAgIG5ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQoKTsKICAgICBuZXRzbm1wX2NsZWFyX2RlZmF1bHRfZG9tYWluKCk7Ci0gICAgZnJlZV9ldGltZWxpc3QoKTsKKyAgICBzaHV0ZG93bl9zZWNtb2QoKTsKIAogICAgIGluaXRfc25tcF9pbml0X2RvbmUgID0gMDsKICAgICBfaW5pdF9zbm1wX2luaXRfZG9uZSA9IDA7CkBAIC05MDcsNiArOTU4LDggQEAKIC8qCiAgKiBleHRlbmRlZCBvcGVuIAogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9vcGVuX2V4LCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX09QRU5fRVgKIG5ldHNubXBfc2Vzc2lvbiAqCiBzbm1wX29wZW5fZXgobmV0c25tcF9zZXNzaW9uICpzZXNzaW9uLAogICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpCShuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF90cmFuc3BvcnQgKiwKQEAgLTk0MSw2ICs5OTQsNyBAQAogCiAgICAgcmV0dXJuIChzbHAtPnNlc3Npb24pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9PUEVOX0VYICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICoKIF9zZXNzX2NvcHkobmV0c25tcF9zZXNzaW9uICogaW5fc2Vzc2lvbikKQEAgLTk1MSw3ICsxMDA1LDYgQEAKICAgICBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmICpzcHRyOwogICAgIGNoYXIgICAgICAgICAgICpjcDsKICAgICB1X2NoYXIgICAgICAgICAqdWNwOwotICAgIHNpemVfdCAgICAgICAgICBpOwogCiAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gMDsKICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gMDsKQEAgLTEwNTQsMzkgKzExMDcsNiBAQAogICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwpOwogICAgIH0KIAotICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUxldmVsID09IDApCi0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9OT0FVVEg7Ci0KLSAgICBpZiAoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPiAwKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4pOwotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPT0gTlVMTCkgewotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKLSAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGdldF9kZWZhdWx0X2F1dGh0eXBlKCZpKSAhPSBOVUxMKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGdldF9kZWZhdWx0X2F1dGh0eXBlKE5VTEwpLCBpKTsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPSBpOwotICAgIH0KLQotICAgIGlmIChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbiA+IDApIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbik7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOwotICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ2V0X2RlZmF1bHRfcHJpdnR5cGUoJmkpICE9IE5VTEwpIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoZ2V0X2RlZmF1bHRfcHJpdnR5cGUoTlVMTCksIGkpOwotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbiA9IGk7Ci0gICAgfQotCiAgICAgaWYgKGluX3Nlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPiAwKSB7CiAgICAgICAgIHVjcCA9ICh1X2NoYXIgKikgbWFsbG9jKGluX3Nlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4pOwogICAgICAgICBpZiAodWNwID09IE5VTEwpIHsKQEAgLTExNjQsODYgKzExODQsNTYgQEAKICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKGNwKTsKICAgICB9CiAKLSAgICBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA8PSAwKSAmJgotICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9BVVRITUFTVEVSS0VZKSkpKSB7Ci0gICAgICAgIHNpemVfdCBidWZsZW4gPSBzaXplb2Yoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5KTsKLSAgICAgICAgdV9jaGFyICp0bXBwID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5OwotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPSAwOwotICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLwotICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJmJ1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiwgMCwgY3ApKSB7Ci0gICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoImVycm9yIHBhcnNpbmcgYXV0aGVudGljYXRpb24gbWFzdGVyIGtleSIpOwotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA8PSAwKSAmJgotICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9BVVRIUEFTU1BIUkFTRSkpIHx8Ci0gICAgICAgICAoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UpKSkpIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuID0gVVNNX0FVVEhfS1VfTEVOOwotICAgICAgICBpZiAoZ2VuZXJhdGVfS3Uoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgY3AsIHN0cmxlbihjcCksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbAotICAgICAgICAgICAgICAgICgiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlLiIpOwotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgIGlmIChzZXNzaW9uLT5yZXRyaWVzID09IFNOTVBfREVGQVVMVF9SRVRSSUVTKSB7CisgICAgICAgIGludCByZXRyeSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9SRVRSSUVTKTsKKyAgICAgICAgaWYgKHJldHJ5IDwgMCkKKyAgICAgICAgICAgIHNlc3Npb24tPnJldHJpZXMgPSBERUZBVUxUX1JFVFJJRVM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlc3Npb24tPnJldHJpZXMgPSByZXRyeTsKICAgICB9Ci0KLSAgICAKLSAgICBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA8PSAwKSAmJgotICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9QUklWTUFTVEVSS0VZKSkpKSB7Ci0gICAgICAgIHNpemVfdCBidWZsZW4gPSBzaXplb2Yoc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5KTsKLSAgICAgICAgdV9jaGFyICp0bXBwID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5OwotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPSAwOwotICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLwotICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJmJ1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiwgMCwgY3ApKSB7Ci0gICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoImVycm9yIHBhcnNpbmcgZW5jcnlwdGlvbiBtYXN0ZXIga2V5Iik7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuIDw9IDApICYmCi0gICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFKSkgfHwKLSAgICAgICAgIChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSkpKSkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPSBVU01fUFJJVl9LVV9MRU47Ci0gICAgICAgIGlmIChnZW5lcmF0ZV9LdShzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBjcCwgc3RybGVuKGNwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsCi0gICAgICAgICAgICAgICAgKCJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgcHJpdmFjeSBwYXNzIHBocmFzZS4iKTsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICBpZiAoc2Vzc2lvbi0+dGltZW91dCA9PSBTTk1QX0RFRkFVTFRfVElNRU9VVCkgeworICAgICAgICBpbnQgdGltZW91dCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RJTUVPVVQpOworICAgICAgICBpZiAodGltZW91dCA8PSAwKQorICAgICAgICAgICAgc2Vzc2lvbi0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Vzc2lvbi0+dGltZW91dCA9IHRpbWVvdXQgKiBPTkVfU0VDOwogICAgIH0KLQotICAgIGlmIChzZXNzaW9uLT5yZXRyaWVzID09IFNOTVBfREVGQVVMVF9SRVRSSUVTKQotICAgICAgICBzZXNzaW9uLT5yZXRyaWVzID0gREVGQVVMVF9SRVRSSUVTOwotICAgIGlmIChzZXNzaW9uLT50aW1lb3V0ID09IFNOTVBfREVGQVVMVF9USU1FT1VUKQotICAgICAgICBzZXNzaW9uLT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwogICAgIHNlc3Npb24tPnNlc3NpZCA9IHNubXBfZ2V0X25leHRfc2Vzc2lkKCk7CiAKICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TRVNTSU9OX0lOSVQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKTsKIAotICAgIGlmICgoc3B0ciA9IGZpbmRfc2VjX21vZChzZXNzaW9uLT5zZWN1cml0eU1vZGVsKSkgIT0gTlVMTCAmJgotICAgICAgICBzcHRyLT5zZXNzaW9uX29wZW4gIT0gTlVMTCkgeworICAgIGlmICgoc3B0ciA9IGZpbmRfc2VjX21vZChzZXNzaW9uLT5zZWN1cml0eU1vZGVsKSkgIT0gTlVMTCkgewogICAgICAgICAvKgotICAgICAgICAgKiBzZWN1cml0eSBtb2R1bGUgc3BlY2lmaWMgaW5pYWxpemF0aW9uIAorICAgICAgICAgKiBzZWN1cml0eSBtb2R1bGUgc3BlY2lmaWMgY29weWluZyAKICAgICAgICAgICovCi0gICAgICAgICgqc3B0ci0+c2Vzc2lvbl9vcGVuKSAoc2Vzc2lvbik7CisgICAgICAgIGlmIChzcHRyLT5zZXNzaW9uX3NldHVwKSB7CisgICAgICAgICAgICBpbnQgcmV0ID0gKCpzcHRyLT5zZXNzaW9uX3NldHVwKSAoaW5fc2Vzc2lvbiwgc2Vzc2lvbik7CisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2VjdXJpdHkgbW9kdWxlIHNwZWNpZmljIG9wZW5pbmcKKyAgICAgICAgICovCisgICAgICAgIGlmIChzcHRyLT5zZXNzaW9uX29wZW4pIHsKKyAgICAgICAgICAgIGludCByZXQgPSAoKnNwdHItPnNlc3Npb25fb3BlbikgKHNlc3Npb24pOworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAorICAgIC8qIEFueXRoaW5nIGJlbG93IHRoaXMgcG9pbnQgc2hvdWxkIG9ubHkgYmUgZG9uZSBpZiB0aGUgdHJhbnNwb3J0CisgICAgICAgaGFkIG5vIHNheSBpbiB0aGUgbWF0dGVyICovCisgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TGV2ZWwgPT0gMCkKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX05PQVVUSDsKKwogICAgIHJldHVybiAoc2xwKTsKIH0KIApAQCAtMTI2MSw2ICsxMjUxLDEwMSBAQAogICAgIHJldHVybiBwc2w7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QVjNfUFJPQkVfQ09OVEVYVEVOR0lORUlEX1JGQzUzNDMKKy8qKgorICogcHJvYmUgZm9yIGVuZ2luZUlEIHVzaW5nIFJGQyA1MzQzIHByb2JpbmcgbWVjaGFuaXNtcworICoKKyAqIERlc2lnbmVkIHRvIGJlIGEgY2FsbGJhY2sgZm9yIHdpdGhpbiBhIHNlY3VyaXR5IG1vZGVsJ3MgcHJvYmVfZW5naW5laWQgaG9vay4KKyAqIFNpbmNlIGl0J3MgbGlrZWx5IG11bHRpcGxlIHNlY3VyaXR5IG1vZGVscyB3b24ndCBoYXZlIGVuZ2luZUlEcyB0bworICogcHJvYmUgZm9yIHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBhIGNhbGxiYWNrIGxpa2VseSB0byBiZSB1c2VkIGJ5CisgKiBtdWx0aXBsZSBmdXR1cmUgc2VjdXJpdHkgbW9kZWxzLiAgRS5HLiBib3RoIFNTSCBhbmQgRFRMUy4KKyAqLworaW50Citzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDModm9pZCAqc2xwLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1ID0gTlVMTCwgKnJlc3BvbnNlID0gTlVMTDsKKyAgICBzdGF0aWMgb2lkICAgICAgc25tcEVuZ2luZUlEb2lkW10gICA9IHsgMSwzLDYsMSw2LDMsMTAsMiwxLDEsMH07CisgICAgc3RhdGljIHNpemVfdCAgIHNubXBFbmdpbmVJRG9pZF9sZW4gPSAxMTsKKworICAgIHN0YXRpYyBjaGFyICAgICBwcm9iZUVuZ2luZUlEW10gPSB7IChjaGFyKTB4ODAsIDAsIDAsIDAsIDYgfTsKKyAgICBzdGF0aWMgc2l6ZV90ICAgcHJvYmVFbmdpbmVJRF9sZW4gPSBzaXplb2YocHJvYmVFbmdpbmVJRCk7CisgICAgCisgICAgaW50IHN0YXR1czsKKworICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVQpOworICAgIGlmICghcGR1KQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIHBkdS0+dmVyc2lvbiA9IFNOTVBfVkVSU0lPTl8zOworICAgIC8qIGRvbid0IHJlcXVpcmUgYSBzZWN1cml0eU5hbWUgKi8KKyAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7CisgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKHBkdS0+c2VjdXJpdHlOYW1lKTsKKyAgICB9CisgICAgcGR1LT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfTk9BVVRIOworICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IHNlc3Npb24tPnNlY3VyaXR5TW9kZWw7CisgICAgcGR1LT5jb250ZXh0RW5naW5lSUQgPSBuZXRzbm1wX21lbWR1cChwcm9iZUVuZ2luZUlELCBwcm9iZUVuZ2luZUlEX2xlbik7CisgICAgaWYgKCFwZHUtPmNvbnRleHRFbmdpbmVJRCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGNsb25lIG1lbW9yeSBmb3IgcmZjNTM0MyBwcm9iZVxuIik7CisgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgcGR1LT5jb250ZXh0RW5naW5lSURMZW4gPSBwcm9iZUVuZ2luZUlEX2xlbjsKKyAgICAKKyAgICBzbm1wX2FkZF9udWxsX3ZhcihwZHUsIHNubXBFbmdpbmVJRG9pZCwgc25tcEVuZ2luZUlEb2lkX2xlbik7CisKKyAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAicHJvYmluZyBmb3IgZW5naW5lSUQgdXNpbmcgcmZjNTM0MyBtZXRob2RzLi4uXG4iKSk7CisgICAgc2Vzc2lvbi0+ZmxhZ3MgfD0gU05NUF9GTEFHU19ET05UX1BST0JFOyAvKiBwcmV2ZW50IHJlY3Vyc2lvbiAqLworICAgIHN0YXR1cyA9IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzbHAsIHBkdSwgJnJlc3BvbnNlKTsKKworICAgIGlmICgocmVzcG9uc2UgPT0gTlVMTCkgfHwgKHN0YXR1cyAhPSBTVEFUX1NVQ0NFU1MpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgcmZjNTM0MyBjb250ZXh0RW5naW5lSUQgcHJvYmluZ1xuIik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyogY2hlY2sgdGhhdCB0aGUgcmVzcG9uc2UgbWFrZXMgc2Vuc2UgKi8KKyAgICBpZiAoTlVMTCAhPSByZXNwb25zZS0+dmFyaWFibGVzICYmCisgICAgICAgIE5VTEwgIT0gcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZSAmJgorICAgICAgICBzbm1wX29pZF9jb21wYXJlKHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc25tcEVuZ2luZUlEb2lkLCBzbm1wRW5naW5lSURvaWRfbGVuKSA9PSAwICYmCisgICAgICAgIEFTTl9PQ1RFVF9TVFIgPT0gcmVzcG9uc2UtPnZhcmlhYmxlcy0+dHlwZSAgJiYKKyAgICAgICAgTlVMTCAhPSByZXNwb25zZS0+dmFyaWFibGVzLT52YWwuc3RyaW5nICYmCisgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbF9sZW4gPiAwKSB7CisgICAgICAgIHNlc3Npb24tPmNvbnRleHRFbmdpbmVJRCA9CisgICAgICAgICAgICBuZXRzbm1wX21lbWR1cChyZXNwb25zZS0+dmFyaWFibGVzLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsX2xlbik7CisgICAgICAgIGlmICghc2Vzc2lvbi0+Y29udGV4dEVuZ2luZUlEKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHJmYzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2Jpbmc6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKiB0ZWNobmljYWxseSB0aGVyZSBsaWtlbHkgaXNuJ3QgYSBzZWN1cml0eUVuZ2luZUlEIGJ1dCBqdXN0CisgICAgICAgICAgIGluIGNhc2UgYW55b25lIGdvZXMgbG9va2luZyB3ZSBtaWdodCBhcyB3ZWxsIGhhdmUgb25lICovCisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQgPQorICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAocmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbF9sZW4pOworICAgICAgICBpZiAoIXNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgcmZjNTM0MyBzZWN1cml0eUVuZ2luZUlEIHByb2Jpbmc6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID0gc2Vzc2lvbi0+Y29udGV4dEVuZ2luZUlETGVuID0KKyAgICAgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbF9sZW47CisgICAgICAgIAorICAgICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIHByb2JlIGZvdW5kIGVuZ2luZUlEOiAgIikpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW47IGkrKykKKyAgICAgICAgICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIiUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEW2ldKSk7CisgICAgICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIlxuIikpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QVjNfUFJPQkVfQ09OVEVYVEVOR0lORUlEX1JGQzUzNDMgKi8KKworCiAvKioKICAqIHByb2JlIGZvciBwZWVyIGVuZ2luZUlECiAgKgpAQCAtMTI4MCwxNiArMTM2NSwxNyBAQAogc25tcHYzX2VuZ2luZUlEX3Byb2JlKHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscCwKICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBpbl9zZXNzaW9uKQogewotICAgIG5ldHNubXBfcGR1ICAgICpwZHUgPSBOVUxMLCAqcmVzcG9uc2UgPSBOVUxMOwogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICB1bnNpZ25lZCBpbnQgICAgaTsKICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOworICAgIHN0cnVjdCBzbm1wX3NlY21vZF9kZWYgKnNwdHIgPSBOVUxMOwogCiAgICAgaWYgKHNscCA9PSBOVUxMIHx8IHNscC0+c2Vzc2lvbiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHNlc3Npb24gPSBzbHAtPnNlc3Npb247CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHNlc3Npb24gIT0gTlVMTCwgMCk7CisgICAgc3B0ciA9IGZpbmRfc2VjX21vZChzZXNzaW9uLT5zZWN1cml0eU1vZGVsKTsKIAogICAgIC8qCiAgICAgICogSWYgd2UgYXJlIG9wZW5pbmcgYSBWMyBzZXNzaW9uIGFuZCB3ZSBkb24ndCBrbm93IGVuZ2luZUlEIHdlIG11c3QgcHJvYmUKQEAgLTEyOTcsODUgKzEzODMsMTQwIEBACiAgICAgICogbGlzdCBzbyB0aGF0IHRoZSByZXNwb25zZSBjYW4gaGFuZGxlZCBjb3JyZWN0bHkuIAogICAgICAqLwogCi0gICAgaWYgKChzZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfRE9OVF9QUk9CRSkgPT0gU05NUF9GTEFHU19ET05UX1BST0JFKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChzZXNzaW9uLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApIHsKLSAgICAgICAgICAgIGlmIChzbm1wdjNfYnVpbGRfcHJvYmVfcGR1KCZwZHUpICE9IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAidW5hYmxlIHRvIGNyZWF0ZSBwcm9iZSBQRFVcbiIpKTsKKyAgICBpZiAoc2Vzc2lvbi0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMyAmJgorICAgICAgICAoMCA9PSAoc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUpKSkgeworICAgICAgICBpZiAoTlVMTCAhPSBzcHRyICYmIE5VTEwgIT0gc3B0ci0+cHJvYmVfZW5naW5laWQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJwcm9iaW5nIGZvciBlbmdpbmVJRCB1c2luZyBzZWN1cml0eSBtb2RlbCBjYWxsYmFjay4uLlxuIikpOworICAgICAgICAgICAgLyogc2VjdXJpdHkgbW9kZWwgc3BlY2lmaWMgbWVjaGFuaXNtIG9mIGRldGVybWluaW5nIGVuZ2luZUlEICovCisgICAgICAgICAgICBzdGF0dXMgPSAoKnNwdHItPnByb2JlX2VuZ2luZWlkKSAoc2xwLCBpbl9zZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gU05NUEVSUl9TVUNDRVNTKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInByb2JpbmcgZm9yIGVuZ2luZUlELi4uXG4iKSk7Ci0gICAgICAgICAgICBzZXNzaW9uLT5mbGFncyB8PSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkU7IC8qIHByZXZlbnQgcmVjdXJzaW9uICovCi0gICAgICAgICAgICBzdGF0dXMgPSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc2xwLCBwZHUsICZyZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIGlmICgocmVzcG9uc2UgPT0gTlVMTCkgJiYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICAgICAgICAgIGNhc2UgU1RBVF9TVUNDRVNTOgotICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfSU5WQUxJRF9NU0c7IC8qIFhYPz8gKi8KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogZXhwZWN0ZWQgUmVwb3J0IGFzIHJlc3BvbnNlIHRvIHByb2JlOiAlcyAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZXJyc3RyaW5nKHJlc3BvbnNlLT5lcnJzdGF0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+ZXJyc3RhdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTVEFUX0VSUk9SOiAgIC8qIHRoaXMgaXMgd2hhdCB3ZSBleHBlY3RlZCAtPiBSZXBvcnQgPT0gU1RBVF9FUlJPUiAqLwotICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9FTkdfSUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNUQVRfVElNRU9VVDoKLSAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1RJTUVPVVQ7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBjb25uZWN0IHdpdGggcmVtb3RlIGVuZ2luZTogJXMgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2FwaV9lcnJzdHJpbmcoc2Vzc2lvbi0+c19zbm1wX2Vycm5vKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGRldGVybWluZSByZW1vdGUgZW5naW5lIElEXG4iKSk7Ci0gICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIGZsYWcgc28gdGhhdCBwcm9iZSBvY2N1cnMgb24gbmV4dCBpbmZvcm0gKi8KLSAgICAgICAgICAgICAgICBzZXNzaW9uLT5mbGFncyAmPSB+U05NUF9GTEFHU19ET05UX1BST0JFOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1NVQ0NFU1M7Ci0gICAgICAgICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHByb2JlIGZvdW5kIGVuZ2luZUlEOiAgIikpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW47IGkrKykKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICIlMDJ4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRFtpXSkpOwotICAgICAgICAgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiXG4iKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBpZiBib290L3RpbWUgc3VwcGxpZWQgc2V0IGl0IGZvciB0aGlzIGVuZ2luZUlEIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNlc3Npb24tPmVuZ2luZUJvb3RzIHx8IHNlc3Npb24tPmVuZ2luZVRpbWUpIHsKLSAgICAgICAgICAgIHNldF9lbmdpbmV0aW1lKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+ZW5naW5lQm9vdHMsIHNlc3Npb24tPmVuZ2luZVRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2xwLT5zZXNzaW9uKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9VU0VSX05BTUU7ICAgICAgIC8qIFhYPz8gKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAic25tcHYzX2VuZ2luZV9wcm9iZSgpOiBmYWlsZWQoMikgdG8gY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBzZXNzaW9uXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBYWFg6IGRlZmF1bHQgdG8gdGhlIGRlZmF1bHQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgUHJvYmU/ICovCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qCisgICAgICogc2VlIGlmIHRoZXJlIGlzIGEgaG9vayB0byBjYWxsIG5vdyB0aGF0IHdlJ3JlIGRvbmUgcHJvYmluZyBmb3IgYW4KKyAgICAgKiBlbmdpbmVJRAorICAgICAqLworICAgIGlmIChzcHRyICYmIHNwdHItPnBvc3RfcHJvYmVfZW5naW5laWQpIHsKKyAgICAgICAgc3RhdHVzID0gKCpzcHRyLT5wb3N0X3Byb2JlX2VuZ2luZWlkKShzbHAsIGluX3Nlc3Npb24pOworICAgICAgICBpZiAoc3RhdHVzICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJKmluX3Nlc3Npb24KKyAqCSppbl90cmFuc3BvcnQKKyAqCisgKiBSZXR1cm5zOgorICogICAgICBTTk1QRVJSX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAtIFlheQorICogICAgICBTTk1QRVJSX0dFTkVSUiAgICAgICAgICAgICAgICAgICAgICAtIEdlbmVyaWMgRXJyb3IKKyAqICAgICAgU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SICAgICAgLSBUcmFuc3BvcnQgcmVqZWN0ZWQgY29uZmlnCisgKiAgICAgIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRyAgICAgICAgIC0gVHJhbnNwb3J0IGNhbid0IGNvbmZpZworICovCitpbnQKK25ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0KG5ldHNubXBfY29udGFpbmVyICp0cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisgICAgLyogT3B0aW9uYWwgc3VwcGxpbWVudGFsIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZAorICAgICAgIGZpbmFsIGNhbGwgdG8gYWN0dWFsbHkgb3BlbiB0aGUgdHJhbnNwb3J0ICovCisgICAgaWYgKHRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3MiLCAiY29uZmlndXJpbmcgdHJhbnNwb3J0XG4iKSk7CisgICAgICAgIGlmICh0cmFuc3BvcnQtPmZfY29uZmlnKSB7CisgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yICppdGVyOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpjb25maWdfZGF0YTsKKyAgICAgICAgICAgIGludCByZXQ7CiAKKyAgICAgICAgICAgIGl0ZXIgPSBDT05UQUlORVJfSVRFUkFUT1IodHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gaXRlcikgeworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yKGNvbmZpZ19kYXRhID0gKG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyopSVRFUkFUT1JfRklSU1QoaXRlcik7IGNvbmZpZ19kYXRhOworICAgICAgICAgICAgICAgIGNvbmZpZ19kYXRhID0gKG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyopSVRFUkFUT1JfTkVYVChpdGVyKSkgeworICAgICAgICAgICAgICAgIHJldCA9IHRyYW5zcG9ydC0+Zl9jb25maWcodHJhbnNwb3J0LCBjb25maWdfZGF0YS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX2RhdGEtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisgCisvKioKKyAqIENvcGllcyBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNlc3Npb24gYW5kIGNhbGxzIGZfb3BlbgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYW55IGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluIHRoZSBzZXNzaW9uCisgKiBwb2ludGVyIHRvIHRoZSB0cmFuc3BvcnQgaWYgaXQgaGFzIGEgZl9jb25maWcgcG9pbnRlciBhbmQgdGhlbgorICogY2FsbHMgdGhlIHRyYW5zcG9ydCdzIGZfb3BlbiBmdW5jdGlvbiB0byBhY3R1YWxseSBvcGVuIHRoZQorICogY29ubmVjdGlvbi4KKyAqCisgKiBAcGFyYW0gaW5fc2Vzc2lvbiBBIHBvaW50ZXIgdG8gdGhlIHNlc3Npb24gdGhhdCBjb25maWcgaW5mb3JtYXRpb24gaXMgaW4uCisgKiBAcGFyYW0gdHJhbnNwb3J0IEEgcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IHRvIGNvbmZpZy9vcGVuLgorICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIDogb24gc3VjY2VzcworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiBuZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydAorICoKKyAqIFBhcmFtZXRlcnM6CisgKgkqaW5fc2Vzc2lvbgorICoJKmluX3RyYW5zcG9ydAorICoKKyAqIFJldHVybnM6CisgKiAgICAgIFNOTVBFUlJfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIC0gWWF5CisgKiAgICAgIFNOTVBFUlJfR0VORVJSICAgICAgICAgICAgICAgICAgICAgIC0gR2VuZXJpYyBFcnJvcgorICogICAgICBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1IgICAgICAtIFRyYW5zcG9ydCByZWplY3RlZCBjb25maWcKKyAqICAgICAgU05NUEVSUl9UUkFOU1BPUlRfTk9fQ09ORklHICAgICAgICAgLSBUcmFuc3BvcnQgY2FuJ3QgY29uZmlnCisgKi8KK2ludAorbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQobmV0c25tcF9zZXNzaW9uICppbl9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKyAgICBpbnQgcmM7CisgICAgCisgICAgREVCVUdNU0dUTCgoInNubXBfc2VzcyIsICJvcGVuaW5nIHRyYW5zcG9ydDogJXhcbiIsIHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRCkpOworCisgICAgLyogZG9uJ3QgZG91YmxlIG9wZW4gKi8KKyAgICBpZiAodHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVEKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgaWYgKChyYyA9IG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0KGluX3Nlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQpKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gcmM7CisgICAgICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSAwOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodHJhbnNwb3J0LT5mX29wZW4pCisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydC0+Zl9vcGVuKHRyYW5zcG9ydCk7CisKKyAgICBpZiAodHJhbnNwb3J0ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2VzcyIsICJjb3VsZG4ndCBpbnRlcnByZXQgcGVlcm5hbWVcbiIpKTsKKyAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfQUREUkVTUzsKKyAgICAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IGVycm5vOworICAgICAgICBzbm1wX3NldF9kZXRhaWwoaW5fc2Vzc2lvbi0+cGVlcm5hbWUpOworICAgICAgICByZXR1cm4gU05NUEVSUl9CQURfQUREUkVTUzsKKyAgICB9CisKKyAgICB0cmFuc3BvcnQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVEOworICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3MiLCAiZG9uZSBvcGVuaW5nIHRyYW5zcG9ydDogJXhcbiIsIHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRCkpOworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBzbm1wX3Nlc3Nfb3BlbgpAQCAtMTM5Miw3MiArMTUzMyw3OSBAQAogc3RhdGljIHZvaWQgICAgKgogX3Nlc3Nfb3BlbihuZXRzbm1wX3Nlc3Npb24gKiBpbl9zZXNzaW9uKQogewotICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscDsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgY2hhciAgICAgICAgICAgICpjbGllbnRhZGRyX3NhdmUgPSBOVUxMOworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBOVUxMOworICAgIGludCByYzsKIAogICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IDA7CiAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IDA7CiAKICAgICBfaW5pdF9zbm1wKCk7CiAKLSAgICBpZiAoKHNscCA9IHNubXBfc2Vzc19jb3B5KGluX3Nlc3Npb24pKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotICAgIHNlc3Npb24gPSBzbHAtPnNlc3Npb247Ci0gICAgc2xwLT50cmFuc3BvcnQgPSBOVUxMOworICAgIHsKKyAgICAgICAgY2hhciAqY2xpZW50YWRkcl9zYXZlID0gTlVMTDsKIAotICAgIGlmIChOVUxMICE9IHNlc3Npb24tPmxvY2FsbmFtZSkgewotICAgICAgICBjbGllbnRhZGRyX3NhdmUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIpOwotICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIsIHNlc3Npb24tPmxvY2FsbmFtZSk7CisgICAgICAgIGlmIChOVUxMICE9IGluX3Nlc3Npb24tPmxvY2FsbmFtZSkgeworICAgICAgICAgICAgY2xpZW50YWRkcl9zYXZlID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUik7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPmxvY2FsbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5fc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NUUkVBTV9TT0NLRVQpIHsKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9CisgICAgICAgICAgICAgICAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsKCJzbm1wIiwgaW5fc2Vzc2lvbi0+cGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPmxvY2FsX3BvcnQsICJ0Y3AsdGNwNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhbnNwb3J0ID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwoInNubXAiLCBpbl9zZXNzaW9uLT5wZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+bG9jYWxfcG9ydCwgInVkcCx1ZHA2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoTlVMTCAhPSBjbGllbnRhZGRyX3NhdmUpCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSLCBjbGllbnRhZGRyX3NhdmUpOwogICAgIH0KIAotICAgIGlmIChzZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfU1RSRUFNX1NPQ0tFVCkgewotICAgICAgICBzbHAtPnRyYW5zcG9ydCA9Ci0JICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwoInNubXAiLCBzZXNzaW9uLT5wZWVybmFtZSwKLQkJCQkJIHNlc3Npb24tPmxvY2FsX3BvcnQsICJ0Y3AiLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbHAtPnRyYW5zcG9ydCA9Ci0JICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwoInNubXAiLCBzZXNzaW9uLT5wZWVybmFtZSwKLQkJCQkJIHNlc3Npb24tPmxvY2FsX3BvcnQsICJ1ZHAiLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAoTlVMTCAhPSBzZXNzaW9uLT5sb2NhbG5hbWUpCi0gICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUiwgY2xpZW50YWRkcl9zYXZlKTsKLQotICAgIGlmIChzbHAtPnRyYW5zcG9ydCA9PSBOVUxMKSB7CisgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJfc2Vzc19vcGVuIiwgImNvdWxkbid0IGludGVycHJldCBwZWVybmFtZVxuIikpOwogICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9BRERSRVNTOwogICAgICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gZXJybm87Ci0gICAgICAgIHNubXBfc2V0X2RldGFpbChzZXNzaW9uLT5wZWVybmFtZSk7Ci0gICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOworICAgICAgICBzbm1wX3NldF9kZXRhaWwoaW5fc2Vzc2lvbi0+cGVlcm5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzZXNzaW9uLT5yY3ZNc2dNYXhTaXplID0gc2xwLT50cmFuc3BvcnQtPm1zZ01heFNpemU7Ci0KLSAgICBpZiAoIXNubXB2M19lbmdpbmVJRF9wcm9iZShzbHAsIGluX3Nlc3Npb24pKSB7Ci0gICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOworICAgIC8qIE9wdGlvbmFsIHN1cHBsaW1lbnRhbCB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQKKyAgICAgICBmaW5hbCBjYWxsIHRvIGFjdHVhbGx5IG9wZW4gdGhlIHRyYW5zcG9ydCAqLworICAgIGlmICgocmMgPSBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydChpbl9zZXNzaW9uLCB0cmFuc3BvcnQpKQorICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgdHJhbnNwb3J0ID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2xwLT5zZXNzaW9uKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX1VTRVJfTkFNRTsgICAgICAgLyogWFg/PyAqLwotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAotICAgICAgICAgICAgICAgICAgICAiX3Nlc3Nfb3BlbigpOiBmYWlsZWQoMikgdG8gY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBzZXNzaW9uXG4iKSk7Ci0gICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmIGRlZmluZWQoU09fQlJPQURDQVNUKSAmJiBkZWZpbmVkKFNPTF9TT0NLRVQpCisgICAgaWYgKCBpbl9zZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfVURQX0JST0FEQ0FTVCkgeworICAgICAgICBpbnQgICBiID0gMTsKKyAgICAgICAgaW50ICAgcmM7CisKKyAgICAgICAgcmMgPSBzZXRzb2Nrb3B0KHRyYW5zcG9ydC0+c29jaywgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmYiwgc2l6ZW9mKGIpKTsKKworICAgICAgICBpZiAoIHJjICE9IDAgKSB7CisgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9BRERSRVNTOyAvKiBnb29kIGFzIGFueT8gKi8KKyAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSBlcnJubzsKKworICAgICAgICAgICAgREVCVUdNU0dUTCgoIl9zZXNzX29wZW4iLCAiY291bGRuJ3QgZW5hYmxlIFVEUF9CUk9BRENBU1RcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHNlc3Npb24tPmZsYWdzICY9IH5TTk1QX0ZMQUdTX0RPTlRfUFJPQkU7CisjZW5kaWYKIAotCi0gICAgcmV0dXJuICh2b2lkICopIHNscDsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHNubXBfc2Vzc19vcGVuKCkgKi8KLQotCisgICAgcmV0dXJuIHNubXBfc2Vzc19hZGQoaW5fc2Vzc2lvbiwgdHJhbnNwb3J0LCBOVUxMLCBOVUxMKTsKK30KIAogLyoKICAqIEVYVEVOREVEIFNFU1NJT04gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKQEAgLTE1NTEsNyArMTY5OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KSkKIHsKICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHA7Ci0KKyAgICBpbnQgcmM7CisgICAgCiAgICAgX2luaXRfc25tcCgpOwogCiAgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKQpAQCAtMTU2Myw4ICsxNzEyLDI0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIC8qIGlmIHRoZSB0cmFuc3BvcnQgaGFzbid0IGJlZW4gZnVsbHkgb3BlbmVkIHlldCwgb3BlbiBpdCBub3cgKi8KKyAgICBpZiAoKHJjID0gbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQoaW5fc2Vzc2lvbiwgdHJhbnNwb3J0KSkKKyAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICh0cmFuc3BvcnQtPmZfc2V0dXBfc2Vzc2lvbikgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICB0cmFuc3BvcnQtPmZfc2V0dXBfc2Vzc2lvbih0cmFuc3BvcnQsIGluX3Nlc3Npb24pKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHRyYW5zcG9ydCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAKICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX2FkZCIsICJmZCAlZFxuIiwgdHJhbnNwb3J0LT5zb2NrKSk7CiAKKwogICAgIGlmICgoc2xwID0gc25tcF9zZXNzX2NvcHkoaW5fc2Vzc2lvbikpID09IE5VTEwpIHsKICAgICAgICAgdHJhbnNwb3J0LT5mX2Nsb3NlKHRyYW5zcG9ydCk7CiAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodHJhbnNwb3J0KTsKQEAgLTE1ODQsMTkgKzE3NDksMTIgQEAKIAogICAgIGlmIChzbHAtPnNlc3Npb24tPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzMpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19hZGQiLAotICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIHYzIHNlc3Npb24gLS0gZW5naW5lSUQgcHJvYmUgbm93XG4iKSk7Ci0gICAgICAgIGlmICghc25tcHYzX2VuZ2luZUlEX3Byb2JlKHNscCwgaW5fc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgImFkZGluZyB2MyBzZXNzaW9uIC0tIG1heWJlIGVuZ2luZUlEIHByb2JlIG5vd1xuIikpOworICAgICAgICBpZiAoIXNubXB2M19lbmdpbmVJRF9wcm9iZShzbHAsIHNscC0+c2Vzc2lvbikpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3NfYWRkIiwgImVuZ2luZSBJRCBwcm9iZSBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzbHAtPnNlc3Npb24pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX1VTRVJfTkFNRTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAic25tcF9zZXNzX2FkZCgpOiBmYWlsZWQoMikgdG8gY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBzZXNzaW9uXG4iKSk7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQogCiAgICAgc2xwLT5zZXNzaW9uLT5mbGFncyAmPSB+U05NUF9GTEFHU19ET05UX1BST0JFOwpAQCAtMTYzMCwyMjUgKzE3ODgsMTcgQEAKICAgICByZXR1cm4gcHZvaWQ7CiB9CiAKLQotCi0vKgotICogY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik6Ci0gKiAKLSAqIGNyZWF0ZXMgYSB1c2VyIGluIHRoZSB1c20gdGFibGUgZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gYSBzZXNzaW9uLgotICogSWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMsIGl0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgY3VycmVudAotICogaW5mb3JtYXRpb24gZnJvbSB0aGUgc2Vzc2lvbgotICogCi0gKiBQYXJhbWV0ZXJzOgotICogc2Vzc2lvbiAtLSBJTjogcG9pbnRlciB0byB0aGUgc2Vzc2lvbiB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgdXNlci4KLSAqIAotICogUmV0dXJuczoKLSAqIFNOTVBFUlJfU1VDQ0VTUwotICogU05NUEVSUl9HRU5FUlIgCi0gKi8KIGludAotY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gICAgc3RydWN0IHVzbVVzZXIgKnVzZXI7Ci0gICAgaW50ICAgICAgICAgICAgIHVzZXJfanVzdF9jcmVhdGVkID0gMDsKLSAgICBjaGFyICpjcDsKK2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uKSB7CisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCisgICAgcmV0dXJuIHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2Vzc2lvbik7CisjZWxzZQorICAgIHNubXBfbG9nKExPR19FUlIsICJjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24gY2FsbGVkIHdoZW4gVVNNIHdhc24ndCBjb21waWxlZCBpbiIpOworICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gMSk7CisgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyNlbmRpZgorfQogCi0gICAgLyoKLSAgICAgKiAtIGRvbid0IGNyZWF0ZS1hbm90aGVyL2NvcHktaW50byB1c2VyIGZvciB0aGlzIHNlc3Npb24gYnkgZGVmYXVsdAotICAgICAqIC0gYmFpbCBub3cgKG5vIGVycm9yKSBpZiB3ZSBkb24ndCBoYXZlIGFuIGVuZ2luZUlECi0gICAgICovCi0gICAgaWYgKFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEID09IChzZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEKSB8fAotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU1vZGVsICE9IFNOTVBfU0VDX01PREVMX1VTTSB8fAotICAgICAgICBzZXNzaW9uLT52ZXJzaW9uICE9IFNOTVBfVkVSU0lPTl8zIHx8Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbiA9PSAwIHx8Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCkKLSAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKLQotICAgIHNlc3Npb24tPmZsYWdzIHw9IFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEOwotCi0gICAgLyoKLSAgICAgKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBlbmdpbmVJRCwgY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBVU00gbGlzdAotICAgICAqIGZvciB0aGlzIHVzZXIgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzZXNzaW9uIAotICAgICAqLwotICAgIHVzZXIgPSB1c21fZ2V0X3VzZXJfZnJvbV9saXN0KHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtX2dldF91c2VyTGlzdCgpLCAwKTsKLSAgICBpZiAodXNlciA9PSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJCdWlsZGluZyB1c2VyICVzLi4uXG4iLAotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWUpKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogdXNlciBkb2Vzbid0IGV4aXN0IHNvIHdlIGNyZWF0ZSBhbmQgYWRkIGl0IAotICAgICAgICAgKi8KLSAgICAgICAgdXNlciA9IChzdHJ1Y3QgdXNtVXNlciAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB1c21Vc2VyKSk7Ci0gICAgICAgIGlmICh1c2VyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogY29weSBpbiB0aGUgc2VjdXJpdHlOYW1lIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TmFtZSkgewotICAgICAgICAgICAgdXNlci0+bmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOwotICAgICAgICAgICAgdXNlci0+c2VjTmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOwotICAgICAgICAgICAgaWYgKHVzZXItPm5hbWUgPT0gTlVMTCB8fCB1c2VyLT5zZWNOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIGNvcHkgaW4gdGhlIGVuZ2luZUlEIAotICAgICAgICAgKi8KLSAgICAgICAgdXNlci0+ZW5naW5lSUQgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4pOwotICAgICAgICBpZiAoIXVzZXItPmVuZ2luZUlEKSB7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICB9Ci0gICAgICAgIHVzZXItPmVuZ2luZUlETGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbjsKLQotICAgICAgICB1c2VyX2p1c3RfY3JlYXRlZCA9IDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjb3B5IHRoZSBhdXRoIHByb3RvY29sIAotICAgICAqLwotICAgIGlmICh1c2VyLT5hdXRoUHJvdG9jb2wgPT0gTlVMTCAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoUHJvdG9jb2wpOwotICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2wgPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbik7Ci0gICAgICAgIGlmICh1c2VyLT5hdXRoUHJvdG9jb2wgPT0gTlVMTCkgewotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgfQotICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2xMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNvcHkgdGhlIHByaXYgcHJvdG9jb2wgCi0gICAgICovCi0gICAgaWYgKHVzZXItPnByaXZQcm90b2NvbCA9PSBOVUxMICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZQcm90b2NvbCk7Ci0gICAgICAgIHVzZXItPnByaXZQcm90b2NvbCA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuKTsKLSAgICAgICAgaWYgKHVzZXItPnByaXZQcm90b2NvbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICB9Ci0gICAgICAgIHVzZXItPnByaXZQcm90b2NvbExlbiA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY29weSBpbiB0aGUgYXV0aGVudGljYXRpb24gS2V5LiAgSWYgbm90IGxvY2FsaXplZCwgbG9jYWxpemUgaXQgCi0gICAgICovCi0gICAgaWYgKHVzZXItPmF1dGhLZXkgPT0gTlVMTCkgewotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXkgIT0gTlVMTAotICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW4gIT0gMCkgewotICAgICAgICAgICAgLyogYWxyZWFkeSBsb2NhbGl6ZWQga2V5IHBhc3NlZCBpbi4gIHVzZSBpdCAqLwotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOwotICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuKTsKLSAgICAgICAgICAgIGlmICghdXNlci0+YXV0aEtleSkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuOwotICAgICAgICB9IGVsc2UgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSAhPSBOVUxMCi0gICAgICAgICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuICE9IDApIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSAodV9jaGFyICopIGNhbGxvYygxLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7Ci0gICAgICAgICAgICBpZiAodXNlci0+YXV0aEtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0s7Ci0gICAgICAgICAgICBpZiAoZ2VuZXJhdGVfa3VsKHVzZXItPmF1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiwgdXNlci0+YXV0aEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BVVRITE9DQUxJWkVES0VZKSkpIHsKLSAgICAgICAgICAgIHNpemVfdCBidWZsZW4gPSBVU01fQVVUSF9LVV9MRU47Ci0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7Ci0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKW1hbGxvYyhidWZsZW4pOyAvKiBtYXggbGVuZ3RoIG5lZWRlZCAqLwotICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IDA7Ci0gICAgICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLwotICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnVzZXItPmF1dGhLZXksICZidWZsZW4sICZ1c2VyLT5hdXRoS2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY3ApKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNvcHkgaW4gdGhlIHByaXZhY3kgS2V5LiAgSWYgbm90IGxvY2FsaXplZCwgbG9jYWxpemUgaXQgCi0gICAgICovCi0gICAgaWYgKHVzZXItPnByaXZLZXkgPT0gTlVMTCkgewotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXkgIT0gTlVMTAotICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW4gIT0gMCkgewotICAgICAgICAgICAgLyogYWxyZWFkeSBsb2NhbGl6ZWQga2V5IHBhc3NlZCBpbi4gIHVzZSBpdCAqLwotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOwotICAgICAgICAgICAgdXNlci0+cHJpdktleSA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuKTsKLSAgICAgICAgICAgIGlmICghdXNlci0+cHJpdktleSkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuOwotICAgICAgICB9IGVsc2UgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSAhPSBOVUxMCi0gICAgICAgICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuICE9IDApIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKLSAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSAodV9jaGFyICopIGNhbGxvYygxLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7Ci0gICAgICAgICAgICBpZiAodXNlci0+cHJpdktleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0s7Ci0gICAgICAgICAgICBpZiAoZ2VuZXJhdGVfa3VsKHVzZXItPmF1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiwgdXNlci0+cHJpdktleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnByaXZLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9QUklWTE9DQUxJWkVES0VZKSkpIHsKLSAgICAgICAgICAgIHNpemVfdCBidWZsZW4gPSBVU01fUFJJVl9LVV9MRU47Ci0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7Ci0gICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKW1hbGxvYyhidWZsZW4pOyAvKiBtYXggbGVuZ3RoIG5lZWRlZCAqLwotICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IDA7Ci0gICAgICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLwotICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnVzZXItPnByaXZLZXksICZidWZsZW4sICZ1c2VyLT5wcml2S2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY3ApKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodXNlcl9qdXN0X2NyZWF0ZWQpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogYWRkIHRoZSB1c2VyIGludG8gdGhlIGRhdGFiYXNlIAotICAgICAgICAgKi8KLSAgICAgICAgdXNlci0+dXNlclN0YXR1cyA9IFJTX0FDVElWRTsKLSAgICAgICAgdXNlci0+dXNlclN0b3JhZ2VUeXBlID0gU1RfUkVBRE9OTFk7Ci0gICAgICAgIHVzbV9hZGRfdXNlcih1c2VyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwotCi0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbigpICovCiAKIC8qCiAgKiAgRG8gYSAiZGVlcCBmcmVlKCkiIG9mIGEgbmV0c25tcF9zZXNzaW9uLgpAQCAtMTkwNiw3ICsxODU2LDcgQEAKICAgICB9CiAKICAgICBpc3AgPSBzbHAtPmludGVybmFsOwotICAgIHNscC0+aW50ZXJuYWwgPSAwOworICAgIHNscC0+aW50ZXJuYWwgPSBOVUxMOwogCiAgICAgaWYgKGlzcCkgewogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfbGlzdCAqcnAsICpvcnA7CkBAIC0xOTMzLDcgKzE4ODMsNyBAQAogICAgIH0KIAogICAgIHRyYW5zcG9ydCA9IHNscC0+dHJhbnNwb3J0OwotICAgIHNscC0+dHJhbnNwb3J0ID0gMDsKKyAgICBzbHAtPnRyYW5zcG9ydCA9IE5VTEw7CiAKICAgICBpZiAodHJhbnNwb3J0KSB7CiAgICAgICAgIHRyYW5zcG9ydC0+Zl9jbG9zZSh0cmFuc3BvcnQpOwpAQCAtMTk0MSw3ICsxODkxLDcgQEAKICAgICB9CiAKICAgICBzZXNwID0gc2xwLT5zZXNzaW9uOwotICAgIHNscC0+c2Vzc2lvbiA9IDA7CisgICAgc2xwLT5zZXNzaW9uID0gTlVMTDsKIAogICAgIC8qCiAgICAgICogVGhlIGZvbGxvd2luZyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgbWVtb3J5IGxlYWthZ2Ugd2hlbiBjbG9zaW5nIEFnZW50WCAKQEAgLTIwMTAsNDkgKzE5NjAsNiBAQAogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgaW50Ci1zbm1wdjNfYnVpbGRfcHJvYmVfcGR1KG5ldHNubXBfcGR1ICoqcGR1KQotewotICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyOwotCi0gICAgLyoKLSAgICAgKiBjcmVhdGUgdGhlIHBkdSAKLSAgICAgKi8KLSAgICBpZiAoIXBkdSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICpwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUKTsKLSAgICBpZiAoISgqcGR1KSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICgqcGR1KS0+dmVyc2lvbiA9IFNOTVBfVkVSU0lPTl8zOwotICAgICgqcGR1KS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKCIiKTsKLSAgICAoKnBkdSktPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbigoKnBkdSktPnNlY3VyaXR5TmFtZSk7Ci0gICAgKCpwZHUpLT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfTk9BVVRIOwotICAgICgqcGR1KS0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1VTTTsKLQotICAgIC8qCi0gICAgICogY3JlYXRlIHRoZSBlbXB0eSB1c2VyIAotICAgICAqLwotICAgIHVzZXIgPSB1c21fZ2V0X3VzZXIoTlVMTCwgMCwgKCpwZHUpLT5zZWN1cml0eU5hbWUpOwotICAgIGlmICh1c2VyID09IE5VTEwpIHsKLSAgICAgICAgdXNlciA9IChzdHJ1Y3QgdXNtVXNlciAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB1c21Vc2VyKSk7Ci0gICAgICAgIGlmICh1c2VyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoKnBkdSk7Ci0gICAgICAgICAgICAqcGR1ID0gKG5ldHNubXBfcGR1ICopIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlci0+bmFtZSA9IHN0cmR1cCgoKnBkdSktPnNlY3VyaXR5TmFtZSk7Ci0gICAgICAgIHVzZXItPnNlY05hbWUgPSBzdHJkdXAoKCpwZHUpLT5zZWN1cml0eU5hbWUpOwotICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2xMZW4gPSBzaXplb2YodXNtTm9BdXRoUHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCk7Ci0gICAgICAgIHVzZXItPmF1dGhQcm90b2NvbCA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh1c21Ob0F1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuKTsKLSAgICAgICAgdXNlci0+cHJpdlByb3RvY29sTGVuID0gc2l6ZW9mKHVzbU5vUHJpdlByb3RvY29sKSAvIHNpemVvZihvaWQpOwotICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2wgPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQodXNtTm9Qcml2UHJvdG9jb2wsIHVzZXItPnByaXZQcm90b2NvbExlbik7Ci0gICAgICAgIHVzbV9hZGRfdXNlcih1c2VyKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBzbm1wdjNfY2FsY19tc2dfZmxhZ3MoaW50IHNlY19sZXZlbCwgaW50IG1zZ19jb21tYW5kLCB1X2NoYXIgKiBmbGFncykKIHsKQEAgLTIwOTcsMTAgKzIwMDQsMTYgQEAKICAgICBpZiAocnBkdS0+Y29udGV4dE5hbWVMZW4gIT0gcGR1LT5jb250ZXh0TmFtZUxlbiB8fAogICAgICAgICBtZW1jbXAocnBkdS0+Y29udGV4dE5hbWUsIHBkdS0+Y29udGV4dE5hbWUsIHBkdS0+Y29udGV4dE5hbWVMZW4pKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocnBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiAhPSBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4gfHwKKworICAgIC8qIHR1bm5lbGVkIHRyYW5zcG9ydHMgZG9uJ3QgaGF2ZSBhIHNlY3VyaXR5RW5naW5lSUQuLi4gIHRoYXQncworICAgICAgIFVTTSBzcGVjaWZpYyAoYW5kIG1heWJlIG90aGVyIGZ1dHVyZSBvbmVzKSAqLworICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPT0gU05NUF9TRUNfTU9ERUxfVVNNICYmCisgICAgICAgIChycGR1LT5zZWN1cml0eUVuZ2luZUlETGVuICE9IHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiB8fAogICAgICAgICBtZW1jbXAocnBkdS0+c2VjdXJpdHlFbmdpbmVJRCwgcGR1LT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuKSkKKyAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbikpKQogICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHRoZSBzZWN1cml0eU5hbWUgbXVzdCBtYXRjaCB0aG91Z2ggcmVnYXJkbGVzcyBvZiBzZWNtb2RlbCAqLwogICAgIGlmIChycGR1LT5zZWN1cml0eU5hbWVMZW4gIT0gcGR1LT5zZWN1cml0eU5hbWVMZW4gfHwKICAgICAgICAgbWVtY21wKHJwZHUtPnNlY3VyaXR5TmFtZSwgcGR1LT5zZWN1cml0eU5hbWUsCiAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZUxlbikpCkBAIC0yMTM2LDkgKzIwNDksMTMgQEAKICAgICAgICAgLyoKICAgICAgICAgICogRmFsbHRocm91Z2ggCiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCiAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgorI2VuZGlmIC8qICEgTkVUU05NUF9OT1RJRllfT05MWSAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgY2FzZSBTTk1QX01TR19JTkZPUk06CiAgICAgICAgIGlmIChwZHUtPmVycnN0YXQgPT0gU05NUF9ERUZBVUxUX0VSUlNUQVQpCiAgICAgICAgICAgICBwZHUtPmVycnN0YXQgPSAwOwpAQCAtMjE0Niw2ICsyMDYzLDcgQEAKICAgICAgICAgICAgIHBkdS0+ZXJyaW5kZXggPSAwOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCiAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgogICAgICAgICBpZiAocGR1LT5tYXhfcmVwZXRpdGlvbnMgPCAwKSB7CiAgICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUzsKQEAgLTIxNTYsNiArMjA3NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogISBORVRTTk1QX05PVElGWV9PTkxZICovCiAKICAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CiAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVjFfSU5fVjI7CkBAIC0yMjA2LDIwICsyMTI1LDMwIEBACiAgICAgaWYgKHBkdS0+c2VjdXJpdHlNb2RlbCA9PSBTTk1QX0RFRkFVTFRfU0VDTU9ERUwpIHsKICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbDsKICAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlNb2RlbCA9PSBTTk1QX0RFRkFVTFRfU0VDTU9ERUwpIHsKLSAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1VTTTsKKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoInNubXBfc2VjbW9kcyIsIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1NFQ01PREVMKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPD0gMCkgeworICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1VTTTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAocGR1LT5zZWN1cml0eU5hbWVMZW4gPT0gMCAmJiBwZHUtPnNlY3VyaXR5TmFtZSA9PSAwKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW4gPT0gMCkgeworICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZUxlbiA9PSAwICYmIHBkdS0+c2VjdXJpdHlOYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVFNNICYmCisgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW4gPT0gMCkgewogICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfU0VDX05BTUU7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgcGR1LT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKLSAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOworICAgICAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKCIiKTsKKyAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgiIik7CiAgICAgICAgIH0KLSAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4gPSBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW47CiAgICAgfQogICAgIGlmIChwZHUtPnNlY3VyaXR5TGV2ZWwgPT0gMCkgewogICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlMZXZlbCA9PSAwKSB7CkBAIC0yNzkwLDcgKzI3MTksNyBAQAogICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSkKIHsKICNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICB1X2NoYXIgICAgICAgICAqaDBlID0gMDsKKyAgICB1X2NoYXIgICAgICAgICAqaDBlID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgc3RhcnRfb2Zmc2V0ID0gKm9mZnNldDsKICAgICBsb25nICAgICAgICAgICAgdmVyc2lvbjsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwpAQCAtMjgxMiw5ICsyNzQxLDEzIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEZhbGx0aHJvdWdoIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQogICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKKyNlbmRpZiAvKiAhIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19TRVQ6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAvKgogICAgICAgICAgKiBhbGwgdmVyc2lvbnMgc3VwcG9ydCB0aGVzZSBQRFUgdHlwZXMgCiAgICAgICAgICAqLwpAQCAtMjg0OSw2ICsyNzgyLDcgQEAKICAgICAgICAgICAgIHBkdS0+ZXJyaW5kZXggPSAwOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCiAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgogICAgICAgICAvKgogICAgICAgICAgKiBub3Qgc3VwcG9ydGVkIGluIFNOTVB2MSBhbmQgU05NUHNlYyAKQEAgLTI4NjgsNiArMjgwMiw3IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogISBORVRTTk1QX05PVElGWV9PTkxZICovCiAKICAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CiAgICAgICAgIC8qCkBAIC0yOTUxLDcgKzI4ODYsNiBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoMCA9PSBzZXNzaW9uLT5jb21tdW5pdHlfbGVuKSB7CiAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHBkdS0+Y29tbXVuaXR5KTsKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW11bml0eSA9IE5VTEw7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHBkdS0+Y29tbXVuaXR5X2xlbiA9PSBzZXNzaW9uLT5jb21tdW5pdHlfbGVuKSB7CiAgICAgICAgICAgICAgICAgbWVtbW92ZShwZHUtPmNvbW11bml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmNvbW11bml0eSwgc2Vzc2lvbi0+Y29tbXVuaXR5X2xlbik7CkBAIC0yOTY5LDcgKzI5MDMsNyBAQAogICAgICAgICB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFORVRTTk1QX05PX1pFUk9MRU5HVEhfQ09NTVVOSVRZICovCiAKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2VuZCIsICJCdWlsZGluZyBTTk1QdiVkIG1lc3NhZ2UuLi5cbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3NlbmQiLCAiQnVpbGRpbmcgU05NUHYlbGQgbWVzc2FnZS4uLlxuIiwKICAgICAgICAgICAgICAgICAgICAgKDEgKyBwZHUtPnZlcnNpb24pKSk7CiAjaWZkZWYgTkVUU05NUF9VU0VfUkVWRVJTRV9BU05FTkNPRElORwogICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1JFVkVSU0VfRU5DT0RFKSkgewpAQCAtMzU1Nyw4ICszNDkxLDEwIEBACiAgICAgZGF0YSA9IGFzbl9wYXJzZV9zZXF1ZW5jZShkYXRhLCAmbGVuZ3RoLCAmdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBU05fU0VRVUVOQ0UgfCBBU05fQ09OU1RSVUNUT1IpLCAidmVyc2lvbiIpOwogICAgIGlmIChkYXRhKSB7CisgICAgICAgIERFQlVHRFVNUEhFQURFUigicmVjdiIsICJTTk1QIFZlcnNpb24iKTsKICAgICAgICAgZGF0YSA9CiAgICAgICAgICAgICBhc25fcGFyc2VfaW50KGRhdGEsICZsZW5ndGgsICZ0eXBlLCAmdmVyc2lvbiwgc2l6ZW9mKHZlcnNpb24pKTsKKyAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIGlmICghZGF0YSB8fCB0eXBlICE9IEFTTl9JTlRFR0VSKSB7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9CQURfVkVSU0lPTjsKICAgICAgICAgfQpAQCAtMzg2MCw5ICszNzk2LDcgQEAKICAgICAgICAgICAgIERFQlVHSU5ERU5UQUREKC00KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtYWxsb2NidWYpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CiAKQEAgLTM4NzUsOSArMzgwOSw3IEBACiAgICAgaWYgKGRhdGEgPT0gTlVMTCkgewogICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpOwogICAgICAgICBERUJVR0lOREVOVEFERCgtNCk7Ci0gICAgICAgIGlmIChtYWxsb2NidWYpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9BU05fUEFSU0VfRVJSOwogICAgIH0KIApAQCAtMzkwMCwxNSArMzgzMiwxMSBAQAogICAgIGlmIChyZXQgIT0gU05NUEVSUl9TVUNDRVNTKSB7CiAgICAgICAgIEVSUk9SX01TRygiZXJyb3IgcGFyc2luZyBQRFUiKTsKICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKTsKLSAgICAgICAgaWYgKG1hbGxvY2J1ZikgewotICAgICAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0FTTl9QQVJTRV9FUlI7CiAgICAgfQogCi0gICAgaWYgKG1hbGxvY2J1ZikgewotICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKLSAgICB9CisgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHNubXB2M19wYXJzZSgpICovCiAKQEAgLTQwMjAsMTMgKzM5NDgsMTcgQEAKICAgICAvKgogICAgICAqIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvdW50ZXIgIAogICAgICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MKICAgICBsdG1wID0gc25tcF9nZXRfc3RhdGlzdGljKHN0YXRfaW5kKTsKKyNlbHNlIC8qICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MgKi8KKyAgICBsdG1wID0gMTsKKyNlbmRpZiAvKiAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTICovCiAKICAgICAvKgogICAgICAqIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY291bnRlciAgCiAgICAgICovCiAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgZXJyX3ZhciwgZXJyX3Zhcl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9DT1VOVEVSLCAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0NPVU5URVIsICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKIAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBzbm1wdjNfbWFrZV9yZXBvcnQoKSAqLwpAQCAtNDEyMSw2ICs0MDUzLDE0IEBACiAjZW5kaWYKICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gLTE7CiAKKyAgICBzdGF0aWMgb2lkICAgICAgc25tcEVuZ2luZUlEb2lkW10gICA9IHsgMSwzLDYsMSw2LDMsMTAsMiwxLDEsMH07CisgICAgc3RhdGljIHNpemVfdCAgIHNubXBFbmdpbmVJRG9pZF9sZW4gPSAxMTsKKworICAgIHN0YXRpYyBjaGFyICAgICBvdXJFbmdpbmVJRFtTTk1QX1NFQ19QQVJBTV9CVUZfU0laRV07CisgICAgc3RhdGljIHNpemVfdCAgIG91ckVuZ2luZUlEX2xlbiA9IHNpemVvZihvdXJFbmdpbmVJRCk7CisKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1MiA9IE5VTEw7CisKICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSAwOwogICAgIHNlc3Npb24tPnNfZXJybm8gPSAwOwogCkBAIC00MTQ1LDcgKzQwODUsNyBAQAogICAgIGNhc2UgU05NUF9WRVJTSU9OXzJjOgogI2VuZGlmCiAjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJQYXJzaW5nIFNOTVB2JWQgbWVzc2FnZS4uLlxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgIlBhcnNpbmcgU05NUHYlbGQgbWVzc2FnZS4uLlxuIiwKICAgICAgICAgICAgICAgICAgICAgKDEgKyBwZHUtPnZlcnNpb24pKSk7CiAKICAgICAgICAgLyoKQEAgLTQyNDQsNiArNDE4NCwxMjAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvKiBJbXBsZW1lbnQgUkZDNTM0MyBoZXJlIGZvciB0d28gcmVhc29uczoKKyAgICAgICAgICAgMSkgRnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIGl0IGhhbmRsZXMgdGhpcyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgYWx3YXlzIGFwcHJvdmVkIHJlcXVlc3QgZWFybGllci4gIEl0IGJ5cGFzc2VzIHRoZSBuZWVkCisgICAgICAgICAgICAgIGZvciBhdXRob3JpemF0aW9uIHRvIHRoZSBzbm1wRW5naW5lSUQgc2NhbGFyLCB3aGljaCBpcworICAgICAgICAgICAgICB3aGF0IGlzIHdoYXQgUkZDMzQxNSBhcHBlbmRpeCBBIHNwZWNpZXMgYXMgb2suICBOb3RlCisgICAgICAgICAgICAgIHRoYXQgd2UgaGF2ZW4ndCBieXBhc3NlZCBhdXRoZW50aWNhdGlvbiBzaW5jZSBpZiB0aGVyZQorICAgICAgICAgICAgICB3YXMgYW4gYXV0aGVudGljYXRpb24gZXJvciBpdCB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZAorICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgaWYocmVzdWx0KSBwYXJ0IGF0IHRoZSBsYXN0ZXQuCisgICAgICAgICAgIDIpIEZyb20gYW4gYXBwbGljYXRpb24gcG9pbnQgb2YgdmlldyBpZiB3ZSBsZXQgdGhpcyByZXF1ZXN0CisgICAgICAgICAgICAgIGdldCBhbGwgdGhlIHdheSB0byB0aGUgYXBwbGljYXRpb24sIGl0J2QgcmVxdWlyZSB0aGF0CisgICAgICAgICAgICAgIGFsbCBhcHBsaWNhdGlvbiB0eXBlcyBzdXBwb3J0aW5nIGRpc2NvdmVyeSBhbHNvIGZpcmUgdXAKKyAgICAgICAgICAgICAgYSBtaW5pbWFsIGFnZW50IGluIG9yZGVyIHRvIGhhbmRsZSBqdXN0IHRoaXMgcmVxdWVzdAorICAgICAgICAgICAgICB3aGljaCBzZWVtcyBsaWtlIG92ZXJraWxsLiAgVGhvdWdoIHRoZXJlIGlzIG5vIG90aGVyCisgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHR5cGVzIHRoYXQgY3VycmVudGx5IG5lZWQgZGlzY292ZXJ5IChOUnMKKyAgICAgICAgICAgICAgYWNjZXB0IG5vdGlmaWNhdGlvbnMgZnJvbSBjb250ZXh0RW5naW5lSURzIHRoYXQgZGVyaXZlCisgICAgICAgICAgICAgIGZyb20gdGhlIE5PIG5vdCB0aGUgTlIpLiAgQWxzbyBhIGxhbWUgZXhjdXNlIGZvciBkb2luZworICAgICAgICAgICAgICBpdCBoZXJlLgorICAgICAgICAgICAzKSBMZXNzIGltcG9ydGFudCB0ZWNobmljYWxseSwgYnV0IHRoZSBuZXQtc25tcCBhZ2VudAorICAgICAgICAgICAgICBkb2Vzbid0IGN1cnJlbnRseSBoYW5kbGUgcmVnaXN0cmF0aW9ucyBvZiBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgZW5naW5lSURzIGVpdGhlciBhbmQgaXQgd291bGQgaGF2ZSBiZWVuIGEgbG90IG1vcmUgd29yaworICAgICAgICAgICAgICB0byBpbXBsZW1lbnQgdGhlcmUgc2luY2Ugd2UnZCBuZWVkIHRvIHN1cHBvcnQgdGhhdAorICAgICAgICAgICAgICBmaXJzdC4gOi0vIFN1cHBvcnRpbmcgbXVsdGlwbGUgY29udGV4dCBlbmdpbmVJRHMgc2hvdWxkCisgICAgICAgICAgICAgIGJlIGRvbmUgYW55d2F5LCBzbyBpdCdzIG5vdCBhIHZhbGlkIGV4Y3VzZSBoZXJlLgorICAgICAgICAgICA0KSBUaGVyZSBpcyBhIGxvdCBsZXNzIHRvIGRvIGlmIHdlIHRydW1wIHRoZSBhZ2VudCBhdCB0aGlzCisgICAgICAgICAgICAgIHBvaW50OyBJRSwgdGhlIGFnZW50IGRvZXMgYSBsb3QgbW9yZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICBwcm9jZXNzaW5nIHdoZW4gdGhlIG9ubHkgdGhpbmcgdGhhdCBzaG91bGQgZXZlciBiZSBpbgorICAgICAgICAgICAgICB0aGlzIGNvbnRleHQgYnkgZGVmaW5pdGlvbiBpcyB0aGUgc2luZ2xlIHNjYWxhci4KKyAgICAgICAgKi8KKworICAgICAgICAvKiBzcGVjaWFsIFJGQzUzNDMgZW5naW5lSUQgZGlzY292ZXJ5IGVuZ2luZUlEIGNoZWNrICovCisgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9OT19ESVNDT1ZFUlkpICYmCisgICAgICAgICAgICBTTk1QX01TR19SRVNQT05TRSAgICAgICAhPSBwZHUtPmNvbW1hbmQgJiYKKyAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICE9IHBkdS0+Y29udGV4dEVuZ2luZUlEICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRExlbiA9PSA1ICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRFswXSA9PSAweDgwICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRFsxXSA9PSAweDAwICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRFsyXSA9PSAweDAwICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRFszXSA9PSAweDAwICYmCisgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRFs0XSA9PSAweDA2KSB7CisKKyAgICAgICAgICAgIC8qIGRlZmluZSBhIHJlc3VsdCBzbyBpdCBkb2Vzbid0IGdldCBwYXN0IHVzIGF0IHRoaXMgcG9pbnQKKyAgICAgICAgICAgICAgIGFuZCBnZXRzIGRyb3BwZWQgYnkgZnV0dXJlIHBhcnRzIG9mIHRoZSBzdGFjayAqLworICAgICAgICAgICAgcmVzdWx0ID0gU05NUEVSUl9KVVNUX0FfQ09OVEVYVF9QUk9CRTsKKworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXB2M19jb250ZXh0aWQiLCAic3RhcnRpbmcgY29udGV4dCBJRCBkaXNjb3ZlcnlcbiIpKTsKKyAgICAgICAgICAgIC8qIGVuc3VyZSBleGFjdGx5IG9uZSB2YXJpYWJsZSAqLworICAgICAgICAgICAgaWYgKE5VTEwgIT0gcGR1LT52YXJpYWJsZXMgJiYKKyAgICAgICAgICAgICAgICBOVUxMID09IHBkdS0+dmFyaWFibGVzLT5uZXh0X3ZhcmlhYmxlICYmCisKKyAgICAgICAgICAgICAgICAvKiBpZiBpdCdzIGEgR0VULCBtYXRjaCBpdCBleGFjdGx5ICovCisgICAgICAgICAgICAgICAgKChTTk1QX01TR19HRVQgPT0gcGR1LT5jb21tYW5kICYmCisgICAgICAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKHNubXBFbmdpbmVJRG9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcEVuZ2luZUlEb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgLyogaWYgaXQncyBhIEdFVE5FWFQgZW5zdXJlIGl0J3MgbGVzcyB0aGFuIHRoZSBlbmdpbmVJRCBvaWQgKi8KKyAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgKFNOTVBfTVNHX0dFVE5FWFQgPT0gcGR1LT5jb21tYW5kICYmCisgICAgICAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKHNubXBFbmdpbmVJRG9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcEVuZ2luZUlEb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCkgPiAwKQorICAgICAgICAgICAgICAgICAgICApKSB7CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHYzX2NvbnRleHRpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgT25lIGNvcnJlY3QgdmFyaWFibGUgZm91bmRcbiIpKTsKKworICAgICAgICAgICAgICAgIC8qIE5vdGU6IHdlJ3JlIGV4cGxpY3RseSBub3QgaGFuZGxpbmcgYSBHRVRCVUxLLiAgRGVhbC4gKi8KKworICAgICAgICAgICAgICAgIC8qIHNldCB1cCB0aGUgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgICAgICBwZHUyID0gc25tcF9jbG9uZV9wZHUocGR1KTsKKworICAgICAgICAgICAgICAgIC8qIGZyZWUgdGhlIGN1cnJlbnQgdmFyYmluZCAqLworICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHBkdTItPnZhcmlhYmxlcyk7CisKKyAgICAgICAgICAgICAgICAvKiBzZXQgdGhlIHZhcmlhYmxlcyAqLworICAgICAgICAgICAgICAgIHBkdTItPnZhcmlhYmxlcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgcGR1Mi0+Y29tbWFuZCA9IFNOTVBfTVNHX1JFU1BPTlNFOworICAgICAgICAgICAgICAgIHBkdTItPmVycnN0YXQgPSAwOworICAgICAgICAgICAgICAgIHBkdTItPmVycmluZGV4ID0gMDsKKworICAgICAgICAgICAgICAgIG91ckVuZ2luZUlEX2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHNubXB2M19nZXRfZW5naW5lSUQoKHVfY2hhciopb3VyRW5naW5lSUQsIG91ckVuZ2luZUlEX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKDAgIT0gb3VyRW5naW5lSURfbGVuKSB7CisKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXB2M19jb250ZXh0aWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICByZXNwb25kaW5nIHdpdGggb3VyIGVuZ2luZUlEXG4iKSk7CisKKyAgICAgICAgICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wRW5naW5lSURvaWQsIHNubXBFbmdpbmVJRG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3VyRW5naW5lSUQsIG91ckVuZ2luZUlEX2xlbik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvKiBzZW5kIHRoZSByZXNwb25zZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSBzbm1wX3Nlc3Nfc2VuZChzZXNzcCwgcGR1MikpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXB2M19jb250ZXh0aWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgc2VudCBpdCBvZmYhXG4iKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzZW5kaW5nIGEgcmVzcG9uc2UgdG8gdGhlIGNvbnRleHQgZW5naW5lSUQgcHJvYmUgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gZ2V0IG91ciBvd24gZW5naW5lSUQhXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCBhbiBvZGQgY29udGV4dCBlbmdpbmVJRCBwcm9iZVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNOTVBFUlJfQkFEX1ZFUlNJT046CiAgICAgICAgIEVSUk9SX01TRygiZXJyb3IgcGFyc2luZyBzbm1wIG1lc3NhZ2UgdmVyc2lvbiIpOwpAQCAtNDMwMSw2ICs0MzU1LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgZm91cjsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZwID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgb2JqaWRbTUFYX09JRF9MRU5dOworICAgIHVfY2hhciAgICAgICAgICpwOwogCiAgICAgLyoKICAgICAgKiBHZXQgdGhlIFBEVSB0eXBlIApAQCAtNDM3NiwxMiArNDQzMSwxNiBAQAogICAgICAgICAgKiBmYWxsdGhyb3VnaCAKICAgICAgICAgICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQogICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CisjZW5kaWYgLyogISBORVRTTk1QX05PVElGWV9PTkxZICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGNhc2UgU05NUF9NU0dfU0VUOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBjYXNlIFNOTVBfTVNHX1RSQVAyOgogICAgIGNhc2UgU05NUF9NU0dfSU5GT1JNOgotICAgIGNhc2UgU05NUF9NU0dfU0VUOgogICAgICAgICAvKgogICAgICAgICAgKiBQRFUgaXMgbm90IGFuIFNOTVB2MSBUUkFQIAogICAgICAgICAgKi8KQEAgLTQ0NDIsMTAgKzQ1MDEsMTAgQEAKICAgICB3aGlsZSAoKGludCkgKmxlbmd0aCA+IDApIHsKICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2cHRlbXA7CiAgICAgICAgIHZwdGVtcCA9IChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKikgbWFsbG9jKHNpemVvZigqdnB0ZW1wKSk7Ci0gICAgICAgIGlmICgwID09IHZwdGVtcCkgeworICAgICAgICBpZiAoTlVMTCA9PSB2cHRlbXApIHsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBpZiAoMCA9PSB2cCkgeworICAgICAgICBpZiAoTlVMTCA9PSB2cCkgewogICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMgPSB2cHRlbXA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2cC0+bmV4dF92YXJpYWJsZSA9IHZwdGVtcDsKQEAgLTQ0NTUsMTAgKzQ1MTQsMTAgQEAKICAgICAgICAgdnAtPm5leHRfdmFyaWFibGUgPSBOVUxMOwogICAgICAgICB2cC0+dmFsLnN0cmluZyA9IE5VTEw7CiAgICAgICAgIHZwLT5uYW1lX2xlbmd0aCA9IE1BWF9PSURfTEVOOwotICAgICAgICB2cC0+bmFtZSA9IDA7CisgICAgICAgIHZwLT5uYW1lID0gTlVMTDsKICAgICAgICAgdnAtPmluZGV4ID0gMDsKLSAgICAgICAgdnAtPmRhdGEgPSAwOwotICAgICAgICB2cC0+ZGF0YUZyZWVIb29rID0gMDsKKyAgICAgICAgdnAtPmRhdGEgPSBOVUxMOworICAgICAgICB2cC0+ZGF0YUZyZWVIb29rID0gTlVMTDsKICAgICAgICAgREVCVUdEVU1QU0VDVElPTigicmVjdiIsICJWYXJCaW5kIik7CiAgICAgICAgIGRhdGEgPSBzbm1wX3BhcnNlX3Zhcl9vcChkYXRhLCBvYmppZCwgJnZwLT5uYW1lX2xlbmd0aCwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwLT52YWxfbGVuLCAmdmFyX3ZhbCwgbGVuZ3RoKTsKQEAgLTQ0NzMsOSArNDUzMiwxMSBAQAogICAgICAgICBjYXNlIEFTTl9JTlRFR0VSOgogICAgICAgICAgICAgdnAtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKGxvbmcpOwotICAgICAgICAgICAgYXNuX3BhcnNlX2ludCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX2ludCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nICopIHZwLT52YWwuaW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCp2cC0+dmFsLmludGVnZXIpKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU05fQ09VTlRFUjoKICAgICAgICAgY2FzZSBBU05fR0FVR0U6CkBAIC00NDgzLDkgKzQ1NDQsMTEgQEAKICAgICAgICAgY2FzZSBBU05fVUlOVEVHRVI6CiAgICAgICAgICAgICB2cC0+dmFsLmludGVnZXIgPSAobG9uZyAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV91bnNpZ25lZF9pbnQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZwLT52YWwuaW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUwogICAgICAgICBjYXNlIEFTTl9PUEFRVUVfQ09VTlRFUjY0OgpAQCAtNDQ5NCwzNCArNDU1Nyw0NSBAQAogICAgICAgICBjYXNlIEFTTl9DT1VOVEVSNjQ6CiAgICAgICAgICAgICB2cC0+dmFsLmNvdW50ZXI2NCA9IChzdHJ1Y3QgY291bnRlcjY0ICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvdW50ZXI2NCAqKSB2cC0+dmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXI2NCwgdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUwogICAgICAgICBjYXNlIEFTTl9PUEFRVUVfRkxPQVQ6CiAgICAgICAgICAgICB2cC0+dmFsLmZsb2F0VmFsID0gKGZsb2F0ICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZihmbG9hdCk7Ci0gICAgICAgICAgICBhc25fcGFyc2VfZmxvYXQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9mbG9hdCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbC5mbG9hdFZhbCwgdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFTTl9PUEFRVUVfRE9VQkxFOgogICAgICAgICAgICAgdnAtPnZhbC5kb3VibGVWYWwgPSAoZG91YmxlICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZihkb3VibGUpOwotICAgICAgICAgICAgYXNuX3BhcnNlX2RvdWJsZSh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX2RvdWJsZSh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT52YWwuZG91YmxlVmFsLCB2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVNOX09QQVFVRV9JNjQ6CiAgICAgICAgICAgICB2cC0+dmFsLmNvdW50ZXI2NCA9IChzdHJ1Y3QgY291bnRlcjY0ICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV9zaWduZWRfaW50NjQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9zaWduZWRfaW50NjQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvdW50ZXI2NCAqKSB2cC0+dmFsLmNvdW50ZXI2NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCp2cC0+dmFsLmNvdW50ZXI2NCkpOwogCisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUyAqLwotICAgICAgICBjYXNlIEFTTl9PQ1RFVF9TVFI6CiAgICAgICAgIGNhc2UgQVNOX0lQQUREUkVTUzoKKyAgICAgICAgICAgIGlmICh2cC0+dmFsX2xlbiAhPSA0KQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgQVNOX09DVEVUX1NUUjoKICAgICAgICAgY2FzZSBBU05fT1BBUVVFOgogICAgICAgICBjYXNlIEFTTl9OU0FQOgogICAgICAgICAgICAgaWYgKHZwLT52YWxfbGVuIDwgc2l6ZW9mKHZwLT5idWYpKSB7CkBAIC00NTMyLDEyICs0NjA2LDE2IEBACiAgICAgICAgICAgICBpZiAodnAtPnZhbC5zdHJpbmcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzbl9wYXJzZV9zdHJpbmcodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLCB2cC0+dmFsLnN0cmluZywKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2Vfc3RyaW5nKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwgdnAtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVNOX09CSkVDVF9JRDoKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gTUFYX09JRF9MRU47Ci0gICAgICAgICAgICBhc25fcGFyc2Vfb2JqaWQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLCBvYmppZCwgJnZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2Vfb2JqaWQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLCBvYmppZCwgJnZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiAqPSBzaXplb2Yob2lkKTsKICAgICAgICAgICAgIHZwLT52YWwub2JqaWQgPSAob2lkICopIG1hbGxvYyh2cC0+dmFsX2xlbik7CiAgICAgICAgICAgICBpZiAodnAtPnZhbC5vYmppZCA9PSBOVUxMKSB7CkBAIC00NTU1LDggKzQ2MzMsMTAgQEAKICAgICAgICAgICAgIGlmICh2cC0+dmFsLmJpdHN0cmluZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNuX3BhcnNlX2JpdHN0cmluZyh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX2JpdHN0cmluZyh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT52YWwuYml0c3RyaW5nLCAmdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCB0eXBlIHJldHVybmVkICgleClcbiIsIHZwLT50eXBlKTsKQEAgLTQ2MDcsMTcgKzQ2ODcsNiBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogY2hlY2sgdGhhdCBpdCBhZ3JlZXMgd2l0aCBlbmdpbmVJRCByZXR1cm5lZCBmcm9tIFVTTSBhYm92ZQotICAgICAqICogb25seSBhIHdhcm5pbmcgYmVjYXVzZSB0aGlzIGNvdWxkIGJlIGxlZ2FsIGlmIHdlIGFyZSBhIHByb3h5Ci0gICAgICovCi0gICAgaWYgKHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiAhPSBwZHUtPmNvbnRleHRFbmdpbmVJRExlbiB8fAotICAgICAgICBtZW1jbXAocGR1LT5zZWN1cml0eUVuZ2luZUlELCBwZHUtPmNvbnRleHRFbmdpbmVJRCwKLSAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbikgIT0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgic2NvcGVkUERVX3BhcnNlIiwKLSAgICAgICAgICAgICAgICAgICAgImluY29uc2lzdGVudCBlbmdpbmVJRCBpbmZvcm1hdGlvbiBpbiBtZXNzYWdlXG4iKSk7Ci0gICAgfQotCi0gICAgLyoKICAgICAgKiBwYXJzZSBjb250ZXh0TmFtZSBmcm9tIHNjb3BlZFBkdQogICAgICAqLwogICAgIHRtcF9idWZfbGVuID0gU05NUF9NQVhfQ09OVEVYVF9TSVpFOwpAQCAtNDc4NCwxNiArNDg1Myw2IEBACiAgICAgICAgICAgICByZXR1cm4gMDsgLyogc19zbm1wX2Vycm5vIGFscmVhZHkgc2V0ICovCiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjcmVhdGUgYSB2MyB1c2VyIGZyb20gdGhlIHNlc3Npb24gaW5mbwotICAgICAqLwotICAgIGlmIChjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2Vzc2lvbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9VU0VSX05BTUU7ICAvKiBYWD8/ICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCi0gICAgICAgICAgICAgICAgICAgICJzbm1wX3NlbmQoKTogZmFpbGVkKDIpIHRvIGNyZWF0ZSBhIG5ldyB1c2VyIGZyb20gc2Vzc2lvblxuIikpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBpZiAoKHBrdGJ1ZiA9ICh1X2NoYXIgKiltYWxsb2MoMjA0OCkpID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfYXN5bmNfc2VuZCIsCiAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtYWxsb2MgaW5pdGlhbCBwYWNrZXQgYnVmZmVyXG4iKSk7CkBAIC00ODE0LDggKzQ4NzMsMTAgQEAKICAgICAgKi8KICAgICBpZiAocGR1LT52YXJpYWJsZXMgPT0gTlVMTCkgewogICAgICAgICBzd2l0Y2ggKHBkdS0+Y29tbWFuZCkgewotICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgU05NUF9NU0dfU0VUOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKICAgICAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgogICAgICAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgpAQCAtNDg3NCw3ICs0OTM1LDcgQEAKICAgICBpZiAocGR1LT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zICYmIHNlc3Npb24tPnNuZE1zZ01heFNpemUgIT0gMCAmJiBsZW5ndGggPiBzZXNzaW9uLT5zbmRNc2dNYXhTaXplKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX2FzeW5jX3NlbmQiLAogICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHBhY2tldCAoJWx1KSBleGNlZWRzIHNlc3Npb24gbWF4aW11bSAoJWx1KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCBzZXNzaW9uLT5zbmRNc2dNYXhTaXplKSk7CisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgKHVuc2lnbmVkIGxvbmcpc2Vzc2lvbi0+c25kTXNnTWF4U2l6ZSkpOwogICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1RPT19MT05HOwogICAgICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODg4LDM2ICs0OTQ5LDIxIEBACiAgICAgaWYgKHRyYW5zcG9ydC0+bXNnTWF4U2l6ZSAhPSAwICYmIGxlbmd0aCA+IHRyYW5zcG9ydC0+bXNnTWF4U2l6ZSkgewogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19hc3luY19zZW5kIiwKICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBvZiBwYWNrZXQgKCVsdSkgZXhjZWVkcyB0cmFuc3BvcnQgbWF4aW11bSAoJWx1KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCB0cmFuc3BvcnQtPm1zZ01heFNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLCAodW5zaWduZWQgbG9uZyl0cmFuc3BvcnQtPm1zZ01heFNpemUpKTsKICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9UT09fTE9ORzsKICAgICAgICAgU05NUF9GUkVFKHBrdGJ1Zik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpKSB7Ci0gICAgICAgIGlmICh0cmFuc3BvcnQtPmZfZm10YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAqZGVzdF90eHQgPQotICAgICAgICAgICAgICAgIHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoZGVzdF90eHQgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuU2VuZGluZyAlbHUgYnl0ZXMgdG8gJXNcbiIsICh1bnNpZ25lZCBsb25nKWxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3R4dCk7Ci0gICAgICAgICAgICAgICAgU05NUF9GUkVFKGRlc3RfdHh0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5TZW5kaW5nICVsdSBieXRlcyB0byA8VU5LTk9XTj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB4ZHVtcChwYWNrZXQsIGxlbmd0aCwgIiIpOwotICAgIH0KLQogICAgIC8qCiAgICAgICogU2VuZCB0aGUgbWVzc2FnZS4gIAogICAgICAqLwogCi0gICAgcmVzdWx0ID0gdHJhbnNwb3J0LT5mX3NlbmQodHJhbnNwb3J0LCBwYWNrZXQsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBkdS0+dHJhbnNwb3J0X2RhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpKTsKKyAgICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJzZW5kaW5nIG1lc3NhZ2UgaWQjJWxkIHJlcWlkIyVsZCBsZW4gJSIKKyAgICAgICAgICAgICAgICBORVRTTk1QX1BSSXogInVcbiIsIHBkdS0+bXNnaWQsIHBkdS0+cmVxaWQsIGxlbmd0aCkpOworICAgIHJlc3VsdCA9IG5ldHNubXBfdHJhbnNwb3J0X3NlbmQodHJhbnNwb3J0LCBwYWNrZXQsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocGR1LT50cmFuc3BvcnRfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSk7CiAKICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKIApAQCAtNDk0Myw3ICs0OTg5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0dik7CiAgICAgICAgIHJwLT5wZHUgPSBwZHU7CiAgICAgICAgIHJwLT5yZXF1ZXN0X2lkID0gcGR1LT5yZXFpZDsKICAgICAgICAgcnAtPm1lc3NhZ2VfaWQgPSBwZHUtPm1zZ2lkOwpAQCAtNDk1NSwxMSArNTAwMSwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcnAtPnRpbWVvdXQgPSBzZXNzaW9uLT50aW1lb3V0OwogICAgICAgICB9Ci0gICAgICAgIHJwLT50aW1lID0gdHY7CisgICAgICAgIHJwLT50aW1lTSA9IHR2OwogICAgICAgICB0di50dl91c2VjICs9IHJwLT50aW1lb3V0OwogICAgICAgICB0di50dl9zZWMgKz0gdHYudHZfdXNlYyAvIDEwMDAwMDBMOwogICAgICAgICB0di50dl91c2VjICU9IDEwMDAwMDBMOwotICAgICAgICBycC0+ZXhwaXJlID0gdHY7CisgICAgICAgIHJwLT5leHBpcmVNID0gdHY7CiAKICAgICAgICAgLyoKICAgICAgICAgICogWFggbG9jayBzaG91bGQgYmUgcGVyIHNlc3Npb24gISAKQEAgLTUwMjAsNyArNTA2Niw3IEBACiAgKiBGcmVlcyB0aGUgdmFyaWFibGUgYW5kIGFueSBtYWxsb2MnZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAqLwogdm9pZAotc25tcF9mcmVlX3ZhcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpCitzbm1wX2ZyZWVfdmFyX2ludGVybmFscyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpCiB7CiAgICAgaWYgKCF2YXIpCiAgICAgICAgIHJldHVybjsKQEAgLTUwMzcsNyArNTA4MywxMiBAQAogICAgICAgICAgICAgU05NUF9GUkVFKHZhci0+ZGF0YSk7CiAgICAgICAgIH0KICAgICB9Cit9CiAKK3ZvaWQKK3NubXBfZnJlZV92YXIobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKQoreworICAgIHNubXBfZnJlZV92YXJfaW50ZXJuYWxzKHZhcik7CiAgICAgZnJlZSgoY2hhciAqKSB2YXIpOwogfQogCkBAIC01MTQ2LDIwICs1MTk3LDEyIEBACiAJICAgICAgInNlc3Npb24gJXAgZmQgJWQgcGt0ICVwIGxlbmd0aCAlZFxuIiwgc2Vzc3AsCiAJICAgICAgdHJhbnNwb3J0LT5zb2NrLCBwYWNrZXRwdHIsIGxlbmd0aCkpOwogCi0gIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKSkgewotICAgIGlmICh0cmFuc3BvcnQtPmZfZm10YWRkciAhPSBOVUxMKSB7Ci0gICAgICBjaGFyICphZGRydHh0ID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBvcGFxdWUsIG9sZW5ndGgpOwotICAgICAgaWYgKGFkZHJ0eHQgIT0gTlVMTCkgewotCXNubXBfbG9nKExPR19ERUJVRywgIlxuUmVjZWl2ZWQgJWQgYnl0ZXMgZnJvbSAlc1xuIiwKLQkJIGxlbmd0aCwgYWRkcnR4dCk7Ci0JU05NUF9GUkVFKGFkZHJ0eHQpOwotICAgICAgfSBlbHNlIHsKLQlzbm1wX2xvZyhMT0dfREVCVUcsICJcblJlY2VpdmVkICVkIGJ5dGVzIGZyb20gPFVOS05PV04+XG4iLAotCQkgbGVuZ3RoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgeGR1bXAocGFja2V0cHRyLCBsZW5ndGgsICIiKTsKKyAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKSkgeworICAgICAgY2hhciAqYWRkcnR4dCA9IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nKHRyYW5zcG9ydCwgb3BhcXVlLCBvbGVuZ3RoKTsKKyAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuUmVjZWl2ZWQgJWQgYnl0ZSBwYWNrZXQgZnJvbSAlc1xuIiwKKyAgICAgICAgICAgICAgIGxlbmd0aCwgYWRkcnR4dCk7CisgICAgICBTTk1QX0ZSRUUoYWRkcnR4dCk7CisgICAgICB4ZHVtcChwYWNrZXRwdHIsIGxlbmd0aCwgIiIpOwogICB9CiAKICAgLyoKQEAgLTUxNjksOSArNTIxMiw3IEBACiAgIGlmIChpc3AtPmhvb2tfcHJlKSB7CiAgICAgaWYgKGlzcC0+aG9va19wcmUoc3AsIHRyYW5zcG9ydCwgb3BhcXVlLCBvbGVuZ3RoKSA9PSAwKSB7CiAgICAgICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJwcmUtcGFyc2UgZmFpbFxuIikpOwotICAgICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0JU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgICB9CisgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgIH0KQEAgLTUxODEsMjAgKzUyMjIsMjggQEAKICAgfSBlbHNlIHsKICAgICBwZHUgPSBzbm1wX2NyZWF0ZV9zZXNzX3BkdSh0cmFuc3BvcnQsIG9wYXF1ZSwgb2xlbmd0aCk7CiAgIH0KKwogICBpZiAocGR1ID09IE5VTEwpIHsKICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGR1IGZhaWxlZCB0byBiZSBjcmVhdGVkXG4iKTsKLSAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLSAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAorICAvKiBpZiB0aGUgdHJhbnNwb3J0IHdhcyBhIG1hZ2ljIHR1bm5lbCwgbWFyayB0aGUgUERVIGFzIGhhdmluZyBjb21lCisgICAgIHRocm91Z2ggb25lLiAqLworICBpZiAodHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQpIHsKKyAgICAgIHBkdS0+ZmxhZ3MgfD0gVUNEX01TR19GTEFHX1RVTk5FTEVEOworICB9CisKICAgaWYgKGlzcC0+aG9va19wYXJzZSkgewogICAgIHJldCA9IGlzcC0+aG9va19wYXJzZShzcCwgcGR1LCBwYWNrZXRwdHIsIGxlbmd0aCk7CiAgIH0gZWxzZSB7CiAgICAgcmV0ID0gc25tcF9wYXJzZShzZXNzcCwgc3AsIHBkdSwgcGFja2V0cHRyLCBsZW5ndGgpOwogICB9CiAKKyAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAicmVjZWl2ZWQgbWVzc2FnZSBpZCMlbGQgcmVxaWQjJWxkIGxlbiAiCisgICAgICAgICAgICAgICIldVxuIiwgcGR1LT5tc2dpZCwgcGR1LT5yZXFpZCwgbGVuZ3RoKSk7CisKICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CiAgICAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAicGFyc2UgZmFpbFxuIikpOwogICB9CkBAIC01MjYyLDcgKzUzMTEsOSBAQAogCSAqIG1zZ0lkIG11c3QgbWF0Y2ggZm9yIHYzIG1lc3NhZ2VzLiAgCiAJICovCiAJaWYgKHJwLT5tZXNzYWdlX2lkICE9IHBkdS0+bXNnaWQpIHsKLQkgIGNvbnRpbnVlOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAidW5tYXRjaGVkIG1zZyBpZDogJWxkICE9ICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5tZXNzYWdlX2lkLCBwZHUtPm1zZ2lkKSk7CisJICAgIGNvbnRpbnVlOwogCX0KIAogCS8qCkBAIC01MzYwLDE5ICs1NDExLDE0IEBACiAJLyoKIAkgKiBTdWNjZXNzZnVsLCBzbyBkZWxldGUgcmVxdWVzdC4gIAogCSAqLwotCWlmIChpc3AtPnJlcXVlc3RzID09IHJwKSB7Ci0JICBpc3AtPnJlcXVlc3RzID0gcnAtPm5leHRfcmVxdWVzdDsKLQkgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKSB7Ci0JICAgIGlzcC0+cmVxdWVzdHNFbmQgPSBOVUxMOwotCSAgfQotCX0gZWxzZSB7CisJaWYgKG9ycCkKIAkgIG9ycC0+bmV4dF9yZXF1ZXN0ID0gcnAtPm5leHRfcmVxdWVzdDsKLQkgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKSB7Ci0JICAgIGlzcC0+cmVxdWVzdHNFbmQgPSBvcnA7Ci0JICB9Ci0JfQorICAgICAgICBlbHNlCisJICBpc3AtPnJlcXVlc3RzID0gcnAtPm5leHRfcmVxdWVzdDsKKyAgICAgICAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApCisJICBpc3AtPnJlcXVlc3RzRW5kID0gb3JwOwogCXNubXBfZnJlZV9wZHUocnAtPnBkdSk7Ci0JZnJlZSgoY2hhciAqKSBycCk7CisJZnJlZShycCk7CiAJLyoKIAkgKiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG1vcmUgcmVxdWVzdHMgd2l0aCB0aGUgc2FtZSByZXFpZC4gIAogCSAqLwpAQCAtNTQzNywxMCArNTQ4MywyMSBAQAogdm9pZAogc25tcF9yZWFkKGZkX3NldCAqIGZkc2V0KQogeworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxmZHNldDsKKworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxmZHNldCwgRkRfU0VUU0laRSk7CisgICAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxmZHNldCwgZmRzZXQpOworICAgIHNubXBfcmVhZDIoJmxmZHNldCk7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbGZkc2V0KTsKK30KKwordm9pZAorc25tcF9yZWFkMihuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQorewogICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscDsKICAgICBzbm1wX3Jlc19sb2NrKE1UX0xJQlJBUllfSUQsIE1UX0xJQl9TRVNTSU9OKTsKICAgICBmb3IgKHNscCA9IFNlc3Npb25zOyBzbHA7IHNscCA9IHNscC0+bmV4dCkgewotICAgICAgICBzbm1wX3Nlc3NfcmVhZCgodm9pZCAqKSBzbHAsIGZkc2V0KTsKKyAgICAgICAgc25tcF9zZXNzX3JlYWQyKCh2b2lkICopIHNscCwgZmRzZXQpOwogICAgIH0KICAgICBzbm1wX3Jlc191bmxvY2soTVRfTElCUkFSWV9JRCwgTVRfTElCX1NFU1NJT04pOwogfQpAQCAtNTQ1Miw3ICs1NTA5LDcgQEAKICAqIEJld2FyZSByZWN1cnNpdmUgc2VuZCBtYXliZSBpbnNpZGUgc25tcF9yZWFkIGNhbGxiYWNrIGZ1bmN0aW9uLiAKICAqLwogaW50Ci1fc2Vzc19yZWFkKHZvaWQgKnNlc3NwLCBmZF9zZXQgKiBmZHNldCkKK19zZXNzX3JlYWQodm9pZCAqc2Vzc3AsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCiB7CiAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwID0gKHN0cnVjdCBzZXNzaW9uX2xpc3QgKikgc2Vzc3A7CiAgICAgbmV0c25tcF9zZXNzaW9uICpzcCA9IHNscCA/IHNscC0+c2Vzc2lvbiA6IE5VTEw7CkBAIC01NDc0LDEwICs1NTMxLDExIEBACiAgICAgICAgIHJldHVybiAwOyAKICAgICB9CiAKLSAgICBpZiAoIWZkc2V0IHx8ICEoRkRfSVNTRVQodHJhbnNwb3J0LT5zb2NrLCBmZHNldCkpKSB7CisgICAgaWYgKCFmZHNldCB8fCAhKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQodHJhbnNwb3J0LT5zb2NrLCBmZHNldCkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAibm90IHJlYWRpbmcgJWQgKGZkc2V0ICVwIHNldCAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC0+c29jaywgZmRzZXQsCi0gICAgICAgICAgICAgICAgICAgIGZkc2V0ID8gRkRfSVNTRVQodHJhbnNwb3J0LT5zb2NrLCBmZHNldCkgOiAtOSkpOworICAgICAgICAgICAgICAgICAgICBmZHNldCA/IE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQodHJhbnNwb3J0LT5zb2NrLCBmZHNldCkKKwkJICAgIDogLTkpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC01NTY0LDggKzU2MjIsOCBAQAogICAgICAgICAgICAgICogV2UgaGF2ZSBubyBzYXZlZCBwYWNrZXQuICBBbGxvY2F0ZSBvbmUuICAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKChpc3AtPnBhY2tldCA9ICh1X2NoYXIgKikgbWFsbG9jKHJ4YnVmX2xlbikpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImNhbid0IG1hbGxvYyAlZCBieXRlcyBmb3IgcnhidWZcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhidWZfbGVuKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJjYW4ndCBtYWxsb2MgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInUgYnl0ZXMgZm9yIHJ4YnVmXG4iLCByeGJ1Zl9sZW4pKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcnhidWYgPSBpc3AtPnBhY2tldDsKQEAgLTU1ODUsNyArNTY0Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4gKyByeGJ1Zl9sZW4pOwogICAgICAgICAgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IG1hbGxvYyAlZCBtb3JlIGZvciByeGJ1ZiAoJWQgdG90KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IG1hbGxvYyAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInUgbW9yZSBmb3IgcnhidWYgKCUiIE5FVFNOTVBfUFJJeiAidSB0b3QpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeGJ1Zl9sZW4sIGlzcC0+cGFja2V0X2xlbiArIHJ4YnVmX2xlbikpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTYwMCwyNSArNTY1OSwzNSBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKChyeGJ1ZiA9ICh1X2NoYXIgKikgbWFsbG9jKHJ4YnVmX2xlbikpID09IE5VTEwpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiY2FuJ3QgbWFsbG9jICVkIGJ5dGVzIGZvciByeGJ1ZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ4YnVmX2xlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJjYW4ndCBtYWxsb2MgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAgICAidSBieXRlcyBmb3IgcnhidWZcbiIsIHJ4YnVmX2xlbikpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBsZW5ndGggPSB0cmFuc3BvcnQtPmZfcmVjdih0cmFuc3BvcnQsIHJ4YnVmLCByeGJ1Zl9sZW4sICZvcGFxdWUsICZvbGVuZ3RoKTsKKyAgICBsZW5ndGggPSBuZXRzbm1wX3RyYW5zcG9ydF9yZWN2KHRyYW5zcG9ydCwgcnhidWYsIHJ4YnVmX2xlbiwgJm9wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0gLTEgJiYgISh0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0pKSB7CiAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRUNWRlJPTTsKICAgICAgICAgc3AtPnNfZXJybm8gPSBlcnJubzsKICAgICAgICAgc25tcF9zZXRfZGV0YWlsKHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIFNOTVBfRlJFRShyeGJ1Zik7Ci0gICAgICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBpZiAoMCA9PSBsZW5ndGggJiYgdHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfRU1QVFlfUEtUKSB7CisgICAgICAgIC8qIHRoaXMgYWxsb3dzIGZvciBhIHRyYW5zcG9ydCB0aGF0IG5lZWRzIHRvIHJldHVybiBmcm9tCisgICAgICAgICAqIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIGFueQorICAgICAgICAgKiBjb25zdW1hYmxlIGRhdGEgaW4gaXQuICovCisKKyAgICAgICAgLyogcmVzZXQgdGhlIGZsYWcgc2luY2UgaXQncyBhIHBlci1tZXNzYWdlIGZsYWcgKi8KKyAgICAgICAgdHJhbnNwb3J0LT5mbGFncyAmPSAofk5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfRU1QVFlfUEtUKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvKgogICAgICAqIFJlbW90ZSBlbmQgY2xvc2VkIGNvbm5lY3Rpb24uICAKICAgICAgKi8KQEAgLTU2MzgsOSArNTcwNyw3IEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiZmQgJWQgY2xvc2VkXG4iLCB0cmFuc3BvcnQtPnNvY2spKTsKICAgICAgICAgdHJhbnNwb3J0LT5mX2Nsb3NlKHRyYW5zcG9ydCk7CiAgICAgICAgIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7Ci0gICAgICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTU2NjIsMTAgKzU3MjksMTEgQEAKICAgICAgICAgICAgICAgICBwZHVsZW4gPSBhc25fY2hlY2tfcGFja2V0KHBwdHIsIGlzcC0+cGFja2V0X2xlbik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiICBsb29wIHBhY2tldF9sZW4gJWQsIFBEVSBsZW5ndGggJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4sIHBkdWxlbikpOwotICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKChwZHVsZW4gPiBNQVhfUEFDS0VUX0xFTkdUSCkgfHwgKHBkdWxlbiA8IDApKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIGxvb3AgcGFja2V0X2xlbiAlIiBORVRTTk1QX1BSSXogInUsIFBEVSBsZW5ndGggJSIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUFJJeiAidVxuIiwgaXNwLT5wYWNrZXRfbGVuLCBwZHVsZW4pKTsKKworICAgICAgICAgICAgaWYgKHBkdWxlbiA+IE1BWF9QQUNLRVRfTEVOR1RIKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBJbGxlZ2FsIGxlbmd0aCwgZHJvcCB0aGUgY29ubmVjdGlvbi4gIAogICAgICAgICAgICAgICAgICAqLwpAQCAtNTY3OSw5ICs1NzQ3LDcgQEAKIAkJfQogCQlERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImZkICVkIGNsb3NlZFxuIiwgdHJhbnNwb3J0LT5zb2NrKSk7CiAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5mX2Nsb3NlKHRyYW5zcG9ydCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICAgICAgICAgICAgICAvKiogWFhYLXJrczogd2h5IG5vIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7ID8/ICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQpAQCAtNTY5NCwxNSArNTc2MCwxNCBAQAogICAgICAgICAgICAgICAgICAqIHN0YXJ0LCBzaW1wbHkgcmV0dXJuIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwa3Qgbm90IGNvbXBsZXRlIChuZWVkICVkIGdvdCAlZCBzbyBmYXIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdWxlbiwgaXNwLT5wYWNrZXRfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBrdCBub3QgY29tcGxldGUgKG5lZWQgJSIgTkVUU05NUF9QUkl6ICJ1IGdvdCAlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUFJJeiAidSBzbyBmYXIpXG4iLCBwZHVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuKSk7CiAKICAgICAgICAgICAgICAgICBpZiAocHB0ciAhPSBpc3AtPnBhY2tldCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIG9wYXF1ZSBmcmVlZCBmb3IgdXMgb3V0c2lkZSBvZiBsb29wLiAqLwogCi0gICAgICAgICAgICAgICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KIApAQCAtNTc1MSwxNyArNTgxNiwxNiBAQAogCSAgICBvZiB0aGUgb3BhcXVlIHBvaW50ZXIsIHNvIHdlIHN0aWxsIG5lZWQgdG8gZnJlZSgpIHRoZSBvcGFxdWUKIAkgICAgcG9pbnRlciBpdHNlbGYuICAqLwogCi0JaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0JICAgIFNOTVBfRlJFRShvcGFxdWUpOwotCX0KKwlTTk1QX0ZSRUUob3BhcXVlKTsKIAogICAgICAgICBpZiAoaXNwLT5wYWNrZXRfbGVuID49IE1BWElNVU1fUEFDS0VUX1NJWkUpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBPYnZpb3VzbHkgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuISAgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAidG9vIGxhcmdlIHBhY2tldF9sZW4gPSAlbHUsIGRyb3BwaW5nIGNvbm5lY3Rpb24gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoaXNwLT5wYWNrZXRfbGVuKSwgdHJhbnNwb3J0LT5zb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICJ0b28gbGFyZ2UgcGFja2V0X2xlbiA9ICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgInUsIGRyb3BwaW5nIGNvbm5lY3Rpb24gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4sIHRyYW5zcG9ydC0+c29jayk7CiAgICAgICAgICAgICB0cmFuc3BvcnQtPmZfY2xvc2UodHJhbnNwb3J0KTsKICAgICAgICAgICAgIC8qKiBYWFgtcmtzOiB3aHkgbm8gU05NUF9GUkVFKGlzcC0+cGFja2V0KTsgPz8gKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTU3NzMsNyArNTgzNyw2IEBACiAgICAgICAgICAgICAgKiBmb290cHJpbnQgZG93bi4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgU05NUF9GUkVFKGlzcC0+cGFja2V0KTsKLSAgICAgICAgICAgIGlzcC0+cGFja2V0ID0gTlVMTDsKICAgICAgICAgICAgIGlzcC0+cGFja2V0X3NpemUgPSAwOwogICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuID0gMDsKICAgICAgICAgICAgIHJldHVybiByYzsKQEAgLTU3ODcsOSArNTg1MCwxMSBAQAogICAgICAgICAgKi8KIAogICAgICAgICBtZW1tb3ZlKGlzcC0+cGFja2V0LCBwcHRyLCBpc3AtPnBhY2tldF9sZW4pOwotICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImVuZDogbWVtbW92ZSglcCwgJXAsICVkKTsgcmVhbGxvYyglcCwgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldCwgcHB0ciwgaXNwLT5wYWNrZXRfbGVuLCBpc3AtPnBhY2tldCwKLSAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLAorICAgICAgICAgICAgICAgICAgICAiZW5kOiBtZW1tb3ZlKCVwLCAlcCwgJSIgTkVUU05NUF9QUkl6ICJ1KTsgcmVhbGxvYyglcCwgJSIKKyAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QUkl6ICJ1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXQsIHBwdHIsIGlzcC0+cGFja2V0X2xlbiwKKwkJICAgIGlzcC0+cGFja2V0LCBpc3AtPnBhY2tldF9sZW4pKTsKIAogICAgICAgICBpZiAoKHJ4YnVmID0gKHVfY2hhciAqKXJlYWxsb2MoaXNwLT5wYWNrZXQsIGlzcC0+cGFja2V0X2xlbikpID09IE5VTEwpIHsKICAgICAgICAgICAgIC8qCkBAIC01ODE5LDYgKzU4ODQsMTkgQEAKIGludAogc25tcF9zZXNzX3JlYWQodm9pZCAqc2Vzc3AsIGZkX3NldCAqIGZkc2V0KQogeworICBpbnQgcmM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxmZHNldDsKKyAgCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxmZHNldCwgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsZmRzZXQsIGZkc2V0KTsKKyAgcmMgPSBzbm1wX3Nlc3NfcmVhZDIoc2Vzc3AsICZsZmRzZXQpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsZmRzZXQpOworICByZXR1cm4gcmM7Cit9CisKK2ludAorc25tcF9zZXNzX3JlYWQyKHZvaWQgKnNlc3NwLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQorewogICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnBzbDsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnBzczsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC01ODMzLDcgKzU5MTEsNyBAQAogfQogCiAKLS8qCisvKioKICAqIFJldHVybnMgaW5mbyBhYm91dCB3aGF0IHNubXAgcmVxdWlyZXMgZnJvbSBhIHNlbGVjdCBzdGF0ZW1lbnQuCiAgKiBudW1mZHMgaXMgdGhlIG51bWJlciBvZiBmZHMgaW4gdGhlIGxpc3QgdGhhdCBhcmUgc2lnbmlmaWNhbnQuCiAgKiBBbGwgZmlsZSBkZXNjcmlwdG9ycyBvcGVuZWQgZm9yIFNOTVAgYXJlIE9SJ2QgaW50byB0aGUgZmRzZXQuCkBAIC01ODU0LDU1ICs1OTMyLDEyMSBAQAogICoKICAqIHNubXBfc2VsZWN0X2luZm8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9wZW4gc29ja2V0cy4gIChpLmUuIFRoZSBudW1iZXIgb2YKICAqIHNlc3Npb25zIG9wZW4pCisgKgorICogQHNlZSBTZWUgYWxzbyBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKCkuCiAgKi8KLQogaW50Ci1zbm1wX3NlbGVjdF9pbmZvKGludCAqbnVtZmRzLAotICAgICAgICAgICAgICAgICBmZF9zZXQgKiBmZHNldCwgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spCi0gICAgLyoKLSAgICAgKiBpbnB1dDogIHNldCB0byAxIGlmIGlucHV0IHRpbWVvdXQgdmFsdWUgaXMgdW5kZWZpbmVkICAKLSAgICAgKiBzZXQgdG8gMCBpZiBpbnB1dCB0aW1lb3V0IHZhbHVlIGlzIGRlZmluZWQgICAgCi0gICAgICogb3V0cHV0OiBzZXQgdG8gMSBpZiBvdXRwdXQgdGltZW91dCB2YWx1ZSBpcyB1bmRlZmluZWQgCi0gICAgICogc2V0IHRvIDAgaWYgb3V0cHV0IHJpbWVvdXQgdmxhdWUgaWQgZGVmaW5lZCAgIAotICAgICAqLworc25tcF9zZWxlY3RfaW5mbyhpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsCisgICAgICAgICAgICAgICAgIGludCAqYmxvY2spCiB7Ci0gICAgcmV0dXJuIHNubXBfc2Vzc19zZWxlY3RfaW5mbygodm9pZCAqKSAwLCBudW1mZHMsIGZkc2V0LCB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2spOworICAgIHJldHVybiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oTlVMTCwgbnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2spOwogfQogCi0vKgotICogU2FtZSBhcyBzbm1wX3NlbGVjdF9pbmZvLCBidXQgd29ya3MganVzdCBvbmUgc2Vzc2lvbi4gCisvKioKKyAqIEBzZWUgU2VlIGFsc28gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncygpLgogICovCiBpbnQKLXNubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICpzZXNzcCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51bWZkcywKLSAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKiBmZHNldCwgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spCitzbm1wX3NlbGVjdF9pbmZvMihpbnQgKm51bWZkcywgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0LAorCQkgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKQogewotICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscHRlc3QgPSAoc3RydWN0IHNlc3Npb25fbGlzdCAqKSBzZXNzcDsKKyAgICByZXR1cm4gc25tcF9zZXNzX3NlbGVjdF9pbmZvMihOVUxMLCBudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jayk7Cit9CisKKy8qKgorICogQHNlZSBTZWUgYWxzbyBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKCkuCisgKi8KK2ludAorc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKnNlc3NwLCBpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykKK3sKKyAgICByZXR1cm4gc25tcF9zZXNzX3NlbGVjdF9pbmZvX2ZsYWdzKHNlc3NwLCBudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VMRUNUX05PRkxBR1MpOworfQorICAgICAgICAKKy8qKgorICogQHNlZSBTZWUgYWxzbyBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKCkuCisgKi8KK2ludAorc25tcF9zZXNzX3NlbGVjdF9pbmZvX2ZsYWdzKHZvaWQgKnNlc3NwLCBpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaywgaW50IGZsYWdzKQoreworICBpbnQgcmM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxmZHNldDsKKworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsZmRzZXQsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbGZkc2V0LCBmZHNldCk7CisgIHJjID0gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncyhzZXNzcCwgbnVtZmRzLCAmbGZkc2V0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGZsYWdzKTsKKyAgaWYgKG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KGZkc2V0LCAmbGZkc2V0KSA8IDApIHsKKyAgICAgIHNubXBfbG9nKExPR19FUlIsCisJICAgICAiVXNlIHNubXBfc2Vzc19zZWxlY3RfaW5mbzIoKSBmb3IgcHJvY2Vzc2luZyIKKwkgICAgICIgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yc1xuIik7CisgIH0KKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbGZkc2V0KTsKKyAgcmV0dXJuIHJjOworfQorCisvKioKKyAqIEBzZWUgU2VlIGFsc28gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncygpLgorICovCitpbnQKK3NubXBfc2Vzc19zZWxlY3RfaW5mbzIodm9pZCAqc2Vzc3AsIGludCAqbnVtZmRzLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQsCisJCSAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykKK3sKKyAgICByZXR1cm4gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncyhzZXNzcCwgbnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRUxFQ1RfTk9GTEFHUyk7Cit9CisKKy8qKgorICogQ29tcHV0ZS91cGRhdGUgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gc2VsZWN0KCkuCisgKgorICogQHBhcmFtW2luXSAgICAgc2Vzc3AgICBXaGljaCBzZXNzaW9ucyB0byBwcm9jZXNzOiBlaXRoZXIgYSBwb2ludGVyIHRvIGEKKyAqICAgc3BlY2lmaWMgc2Vzc2lvbiBvciBOVUxMIHdoaWNoIG1lYW5zIHRvIHByb2Nlc3MgYWxsIHNlc3Npb25zLgorICogQHBhcmFtW2luLG91dF0gbnVtZmRzICBPbiBQT1NJWCBzeXN0ZW1zIG9uZSBtb3JlIHRoYW4gdGhlIHRoZSBsYXJnZXN0IGZpbGUKKyAqICAgZGVzY3JpcHRvciB0aGF0IGlzIHByZXNlbnQgaW4gKmZkc2V0LiBPbiBzeXN0ZW1zIHRoYXQgdXNlIFdpbnNvY2sgKE1pbkdXCisgKiAgIGFuZCBNU1ZDKSwgZG8gbm90IHVzZSB0aGUgdmFsdWUgd3JpdHRlbiBpbnRvICpudW1mZHMuCisgKiBAcGFyYW1baW4sb3V0XSBmZHNldCAgIEEgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldCB0byB3aGljaCBhbGwgZmlsZQorICogICBkZXNjcmlwdG9ycyB3aWxsIGJlIGFkZGVkIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgb2YgdGhlIGV4YW1pbmVkCisgKiAgIHNlc3Npb25zLgorICogQHBhcmFtW2luLG91dF0gdGltZW91dCBPbiBpbnB1dCwgaWYgKmJsb2NrID0gMSwgdGhlIG1heGltdW0gdGltZSB0aGUgY2FsbGVyCisgKiAgIHdpbGwgYmxvY2sgd2hpbGUgd2FpdGluZyBmb3IgTmV0LVNOTVAgYWN0aXZpdHkuIE9uIG91dHB1dCwgaWYgdGhpcyBmdW5jdGlvbgorICogICBoYXMgc2V0ICpibG9jayB0byAwLCB0aGUgbWF4aW11bSB0aW1lIHRoZSBjYWxsZXIgaXMgYWxsb3dlZCB0byB3YWl0IGJlZm9yZQorICogICBpbnZva2luZyB0aGUgTmV0LVNOTVAgcHJvY2Vzc2luZyBmdW5jdGlvbnMgKHNubXBfcmVhZCgpLCBzbm1wX3RpbWVvdXQoKQorICogICBhbmQgcnVuX2FsYXJtcygpKS4gSWYgdGhpcyBmdW5jdGlvbiBoYXMgc2V0ICpibG9jayB0byAxLCAqdGltZW91dCB3b24ndAorICogICBoYXZlIGJlZW4gbW9kaWZpZWQgYW5kIG5vIGFsYXJtcyBhcmUgYWN0aXZlLgorICogQHBhcmFtW2luLG91dF0gYmxvY2sgICBPbiBpbnB1dCwgd2hldGhlciB0aGUgY2FsbGVyIHByZWZlcnMgdG8gYmxvY2sgZm9yZXZlcgorICogICB3aGVuIG5vIGFsYXJtcyBhcmUgYWN0aXZlLiBPbiBvdXRwdXQsIDAgbWVhbnMgdGhhdCBubyBhbGFybXMgYXJlIGFjdGl2ZQorICogICBub3IgdGhhdCB0aGVyZSBpcyBhIHRpbWVvdXQgcGVuZGluZyBmb3IgYW55IG9mIHRoZSBwcm9jZXNzZWQgc2Vzc2lvbnMuCisgKiBAcGFyYW1baW5dICAgICBmbGFncyAgIEVpdGhlciAwIG9yIE5FVFNOTVBfU0VMRUNUX05PQUxBUk1TLgorICoKKyAqIEByZXR1cm4gTnVtYmVyIG9mIHNlc3Npb25zIHByb2Nlc3NlZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBzZWUgU2VlIGFsc28gYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoKSBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoaXMKKyAqICAgZnVuY3Rpb24uCisgKi8KK2ludAorc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncyh2b2lkICpzZXNzcCwgaW50ICpudW1mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrLCBpbnQgZmxhZ3MpCit7CiAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwLCAqbmV4dCA9IE5VTEw7CiAgICAgbmV0c25tcF9yZXF1ZXN0X2xpc3QgKnJwOwotICAgIHN0cnVjdCB0aW1ldmFsICBub3csIGVhcmxpZXN0LCBkZWx0YTsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgbm93LCBlYXJsaWVzdCwgYWxhcm1fdG07CiAgICAgaW50ICAgICAgICAgICAgIGFjdGl2ZSA9IDAsIHJlcXVlc3RzID0gMDsKICAgICBpbnQgICAgICAgICAgICAgbmV4dF9hbGFybSA9IDA7CiAKICAgICB0aW1lcmNsZWFyKCZlYXJsaWVzdCk7CiAKICAgICAvKgotICAgICAqIEZvciBlYWNoIHJlcXVlc3Qgb3V0c3RhbmRpbmcsIGFkZCBpdHMgc29ja2V0IHRvIHRoZSBmZHNldCwKKyAgICAgKiBGb3IgZWFjaCBzZXNzaW9uIGV4YW1pbmVkLCBhZGQgaXRzIHNvY2tldCB0byB0aGUgZmRzZXQsCiAgICAgICogYW5kIGlmIGl0IGlzIHRoZSBlYXJsaWVzdCB0aW1lb3V0IHRvIGV4cGlyZSwgbWFyayBpdCBhcyBsb3dlc3QuCiAgICAgICogSWYgYSBzaW5nbGUgc2Vzc2lvbiBpcyBzcGVjaWZpZWQsIGRvIGp1c3QgZm9yIHRoYXQgc2Vzc2lvbi4KICAgICAgKi8KIAotICAgIGlmIChzZXNzcCkgewotICAgICAgICBzbHAgPSBzbHB0ZXN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNscCA9IFNlc3Npb25zOwotICAgIH0KLQogICAgIERFQlVHTVNHVEwoKCJzZXNzX3NlbGVjdCIsICJmb3IgJXMgc2Vzc2lvbiVzOiAiLAogICAgICAgICAgICAgICAgIHNlc3NwID8gInNpbmdsZSIgOiAiYWxsIiwgc2Vzc3AgPyAiIiA6ICJzIikpOwogCi0gICAgZm9yICg7IHNscDsgc2xwID0gbmV4dCkgeworICAgIGZvciAoc2xwID0gc2Vzc3AgPyBzZXNzcCA6IFNlc3Npb25zOyBzbHA7IHNscCA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IHNscC0+bmV4dDsKIAogICAgICAgICBpZiAoc2xwLT50cmFuc3BvcnQgPT0gTlVMTCkgewpAQCAtNTkzMywxOCArNjA3NywxOSBAQAogICAgICAgICAgICAgKm51bWZkcyA9IChzbHAtPnRyYW5zcG9ydC0+c29jayArIDEpOwogICAgICAgICB9CiAKLSAgICAgICAgRkRfU0VUKHNscC0+dHJhbnNwb3J0LT5zb2NrLCBmZHNldCk7CisgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKHNscC0+dHJhbnNwb3J0LT5zb2NrLCBmZHNldCk7CiAgICAgICAgIGlmIChzbHAtPmludGVybmFsICE9IE5VTEwgJiYgc2xwLT5pbnRlcm5hbC0+cmVxdWVzdHMpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBGb3VuZCBhbm90aGVyIHNlc3Npb24gd2l0aCBvdXRzdGFuZGluZyByZXF1ZXN0cy4gIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXF1ZXN0cysrOwogICAgICAgICAgICAgZm9yIChycCA9IHNscC0+aW50ZXJuYWwtPnJlcXVlc3RzOyBycDsgcnAgPSBycC0+bmV4dF9yZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCghdGltZXJpc3NldCgmZWFybGllc3QpCi0gICAgICAgICAgICAgICAgICAgICB8fCAodGltZXJjbXAoJnJwLT5leHBpcmUsICZlYXJsaWVzdCwgPCkpKSkgewotICAgICAgICAgICAgICAgICAgICBlYXJsaWVzdCA9IHJwLT5leHBpcmU7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsIih0byBpbiAlZC4lZCBzZWMpICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllc3QudHZfc2VjLCBlYXJsaWVzdC50dl91c2VjKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0aW1lcmlzc2V0KCZlYXJsaWVzdCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHRpbWVyaXNzZXQoJnJwLT5leHBpcmVNKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZXJjbXAoJnJwLT5leHBpcmVNLCAmZWFybGllc3QsIDwpKSkgeworICAgICAgICAgICAgICAgICAgICBlYXJsaWVzdCA9IHJwLT5leHBpcmVNOworICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCIodG8gaW4gJWQuJTA2ZCBzZWMpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCllYXJsaWVzdC50dl9zZWMsIChpbnQpZWFybGllc3QudHZfdXNlYykpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTk1OSwxMCArNjEwNCwxNSBAQAogICAgIH0KICAgICBERUJVR01TRygoInNlc3Nfc2VsZWN0IiwgIlxuIikpOwogCi0gICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcpKSB7Ci0gICAgICAgIG5leHRfYWxhcm0gPSBnZXRfbmV4dF9hbGFybV9kZWxheV90aW1lKCZkZWx0YSk7Ci0gICAgICAgIERFQlVHTVNHVCgoInNlc3Nfc2VsZWN0IiwibmV4dCBhbGFybSAlZC4lZCBzZWNcbiIsCi0gICAgICAgICAgICAgICAgICAgZGVsdGEudHZfc2VjLCBkZWx0YS50dl91c2VjKSk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOworCisgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRykgJiYKKyAgICAgICAgIShmbGFncyAmIE5FVFNOTVBfU0VMRUNUX05PQUxBUk1TKSkgeworICAgICAgICBuZXh0X2FsYXJtID0gbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKCZhbGFybV90bSwgJm5vdyk7CisgICAgICAgIGlmIChuZXh0X2FsYXJtKQorICAgICAgICAgICAgREVCVUdNU0dUKCgic2Vzc19zZWxlY3QiLCJuZXh0IGFsYXJtIGF0ICVsZC4lMDZsZCBzZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWFsYXJtX3RtLnR2X3NlYywgKGxvbmcpYWxhcm1fdG0udHZfdXNlYykpOwogICAgIH0KICAgICBpZiAobmV4dF9hbGFybSA9PSAwICYmIHJlcXVlc3RzID09IDApIHsKICAgICAgICAgLyoKQEAgLTU5NzMsNTMgKzYxMjMsMjAgQEAKICAgICAgICAgcmV0dXJuIGFjdGl2ZTsKICAgICB9CiAKLSAgICAvKgotICAgICAqICogTm93IGZpbmQgb3V0IGhvdyBtdWNoIHRpbWUgdW50aWwgdGhlIGVhcmxpZXN0IHRpbWVvdXQuICBUaGlzCi0gICAgICogKiB0cmFuc2Zvcm1zIGVhcmxpZXN0IGZyb20gYW4gYWJzb2x1dGUgdGltZSBpbnRvIGEgZGVsdGEgdGltZSwgdGhlCi0gICAgICogKiB0aW1lIGxlZnQgdW50aWwgdGhlIHNlbGVjdCBzaG91bGQgdGltZW91dC4KLSAgICAgKi8KLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKLSAgICAvKgotICAgICAqIE5vdyA9IG5vdzsKLSAgICAgKi8KKyAgICBpZiAobmV4dF9hbGFybSAmJgorICAgICAgICAoIXRpbWVyaXNzZXQoJmVhcmxpZXN0KSB8fCB0aW1lcmNtcCgmYWxhcm1fdG0sICZlYXJsaWVzdCwgPCkpKQorICAgICAgICBlYXJsaWVzdCA9IGFsYXJtX3RtOwogCi0gICAgaWYgKG5leHRfYWxhcm0pIHsKLSAgICAgICAgZGVsdGEudHZfc2VjICs9IG5vdy50dl9zZWM7Ci0gICAgICAgIGRlbHRhLnR2X3VzZWMgKz0gbm93LnR2X3VzZWM7Ci0gICAgICAgIHdoaWxlIChkZWx0YS50dl91c2VjID49IDEwMDAwMDApIHsKLSAgICAgICAgICAgIGRlbHRhLnR2X3VzZWMgLT0gMTAwMDAwMDsKLSAgICAgICAgICAgIGRlbHRhLnR2X3NlYyArPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGltZXJpc3NldCgmZWFybGllc3QpIHx8Ci0gICAgICAgICAgICAoKGVhcmxpZXN0LnR2X3NlYyA+IGRlbHRhLnR2X3NlYykgfHwKLSAgICAgICAgICAgICAoKGVhcmxpZXN0LnR2X3NlYyA9PSBkZWx0YS50dl9zZWMpICYmCi0gICAgICAgICAgICAgIChlYXJsaWVzdC50dl91c2VjID4gZGVsdGEudHZfdXNlYykpKSkgewotICAgICAgICAgICAgZWFybGllc3QudHZfc2VjID0gZGVsdGEudHZfc2VjOwotICAgICAgICAgICAgZWFybGllc3QudHZfdXNlYyA9IGRlbHRhLnR2X3VzZWM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZWFybGllc3QudHZfc2VjIDwgbm93LnR2X3NlYykgewotICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwidGltZXIgb3ZlcmR1ZVxuIikpOwotICAgICAgICBlYXJsaWVzdC50dl9zZWMgPSAwOwotICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gMDsKLSAgICB9IGVsc2UgaWYgKGVhcmxpZXN0LnR2X3NlYyA9PSBub3cudHZfc2VjKSB7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3NlYyA9IDA7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSAoZWFybGllc3QudHZfdXNlYyAtIG5vdy50dl91c2VjKTsKLSAgICAgICAgaWYgKGVhcmxpZXN0LnR2X3VzZWMgPCAwKSB7Ci0gICAgICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gMTAwOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCJ0aW1lciBkdWUgKnJlYWwqIHNvb24uICVkIHVzZWNcbiIsCi0gICAgICAgICAgICAgICAgICAgZWFybGllc3QudHZfdXNlYykpOworICAgIE5FVFNOTVBfVElNRVJTVUIoJmVhcmxpZXN0LCAmbm93LCAmZWFybGllc3QpOworICAgIGlmIChlYXJsaWVzdC50dl9zZWMgPCAwKSB7CisgICAgICAgIHRpbWVfdCBvdmVyZHVlX21zID0gLShlYXJsaWVzdC50dl9zZWMgKiAxMDAwICsgZWFybGllc3QudHZfdXNlYyAvIDEwMDApOworICAgICAgICBpZiAob3ZlcmR1ZV9tcyA+PSAxMCkKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCJ0aW1lciBvdmVyZHVlIGJ5ICVsZCBtc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG92ZXJkdWVfbXMpKTsKKyAgICAgICAgdGltZXJjbGVhcigmZWFybGllc3QpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3NlYyA9IChlYXJsaWVzdC50dl9zZWMgLSBub3cudHZfc2VjKTsKLSAgICAgICAgZWFybGllc3QudHZfdXNlYyA9IChlYXJsaWVzdC50dl91c2VjIC0gbm93LnR2X3VzZWMpOwotICAgICAgICBpZiAoZWFybGllc3QudHZfdXNlYyA8IDApIHsKLSAgICAgICAgICAgIGVhcmxpZXN0LnR2X3NlYy0tOwotICAgICAgICAgICAgZWFybGllc3QudHZfdXNlYyA9ICgxMDAwMDAwTCArIGVhcmxpZXN0LnR2X3VzZWMpOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCJ0aW1lciBkdWUgaW4gJWQuJWQgc2VjXG4iLAotICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0LnR2X3NlYywgZWFybGllc3QudHZfdXNlYykpOworICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwidGltZXIgZHVlIGluICVkLiUwNmQgc2VjXG4iLAorICAgICAgICAgICAgICAgICAgIChpbnQpZWFybGllc3QudHZfc2VjLCAoaW50KWVhcmxpZXN0LnR2X3VzZWMpKTsKICAgICB9CiAKICAgICAvKgpAQCAtNjAyNyw4ICs2MTQ0LDggQEAKICAgICAgKi8KICAgICBpZiAoKCpibG9jayB8fCAodGltZXJjbXAoJmVhcmxpZXN0LCB0aW1lb3V0LCA8KSkpKSB7CiAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLAotICAgICAgICAgICAgICAgICAgICJzZXR0aW5nIHRpbWVyIHRvICVkLiVkIHNlYywgY2xlYXIgYmxvY2sgKHdhcyAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgZWFybGllc3QudHZfc2VjLCBlYXJsaWVzdC50dl91c2VjLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAic2V0dGluZyB0aW1lciB0byAlZC4lMDZkIHNlYywgY2xlYXIgYmxvY2sgKHdhcyAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgKGludCllYXJsaWVzdC50dl9zZWMsIChpbnQpZWFybGllc3QudHZfdXNlYywgKmJsb2NrKSk7CiAgICAgICAgICp0aW1lb3V0ID0gZWFybGllc3Q7CiAgICAgICAgICpibG9jayA9IDA7CiAgICAgfQpAQCAtNjEyNCwzMiArNjI0MSwxNiBAQAogICAgICAgICAgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICAKICAgICAgICAgICovCiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3Jlc2VuZCIsICJlbmNvZGluZyBmYWlsdXJlXG4iKSk7Ci0gICAgICAgIGlmIChwa3RidWYgIT0gTlVMTCkgewotICAgICAgICAgICAgU05NUF9GUkVFKHBrdGJ1Zik7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKHBrdGJ1Zik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKSkgewotICAgICAgICBpZiAodHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgewotICAgICAgICAgICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0gICAgICAgICAgICBzdHIgPSB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtPnBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuUmVzZW5kaW5nICVsdSBieXRlcyB0byAlc1xuIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLCBzdHIpOwotICAgICAgICAgICAgICAgIFNOTVBfRlJFRShzdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblJlc2VuZGluZyAlbHUgYnl0ZXMgdG8gPFVOS05PV04+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgeGR1bXAocGFja2V0LCBsZW5ndGgsICIiKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSB0cmFuc3BvcnQtPmZfc2VuZCh0cmFuc3BvcnQsIHBhY2tldCwgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocnAtPnBkdS0+dHJhbnNwb3J0X2RhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocnAtPnBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSk7CisgICAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAicmVzZW5kaW5nIG1lc3NhZ2UgaWQjJWxkIHJlcWlkIyVsZCAiCisgICAgICAgICAgICAgICAgInJwX3JlcWlkIyVsZCBycF9tc2dpZCMlbGQgbGVuICUiIE5FVFNOTVBfUFJJeiAidVxuIiwKKyAgICAgICAgICAgICAgICBycC0+cGR1LT5tc2dpZCwgcnAtPnBkdS0+cmVxaWQsIHJwLT5yZXF1ZXN0X2lkLCBycC0+bWVzc2FnZV9pZCwgbGVuZ3RoKSk7CisgICAgcmVzdWx0ID0gbmV0c25tcF90cmFuc3BvcnRfc2VuZCh0cmFuc3BvcnQsIHBhY2tldCwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihycC0+cGR1LT50cmFuc3BvcnRfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkpOwogCiAgICAgLyoKICAgICAgKiBXZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgbG9jYWwgcGFja2V0IGJ1ZmZlciwgaWYgd2UgYWxsb2NhdGVkIG9uZSAoZHVlCkBAIC02MTU4LDcgKzYyNTksNyBAQAogCiAgICAgaWYgKHBrdGJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFNOTVBfRlJFRShwa3RidWYpOwotICAgICAgICBwa3RidWYgPSBwYWNrZXQgPSBOVUxMOworICAgICAgICBwYWNrZXQgPSBOVUxMOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQgPCAwKSB7CkBAIC02MTY3LDEzICs2MjY4LDEzIEBACiAgICAgICAgIHNubXBfc2V0X2RldGFpbChzdHJlcnJvcihlcnJubykpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICAgICAgdHYgPSBub3c7Ci0gICAgICAgIHJwLT50aW1lID0gdHY7CisgICAgICAgIHJwLT50aW1lTSA9IHR2OwogICAgICAgICB0di50dl91c2VjICs9IHJwLT50aW1lb3V0OwogICAgICAgICB0di50dl9zZWMgKz0gdHYudHZfdXNlYyAvIDEwMDAwMDBMOwogICAgICAgICB0di50dl91c2VjICU9IDEwMDAwMDBMOwotICAgICAgICBycC0+ZXhwaXJlID0gdHY7CisgICAgICAgIHJwLT5leHBpcmVNID0gdHY7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNjE5OSw3ICs2MzAwLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKIAogICAgIC8qCiAgICAgICogRm9yIGVhY2ggcmVxdWVzdCBvdXRzdGFuZGluZywgY2hlY2sgdG8gc2VlIGlmIGl0IGhhcyBleHBpcmVkLgpAQCAtNjIxMyw3ICs2MzE0LDcgQEAKICAgICAgICAgICAgIGZyZWVtZSA9IE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKHRpbWVyY21wKCZycC0+ZXhwaXJlLCAmbm93LCA8KSkpIHsKKyAgICAgICAgaWYgKCh0aW1lcmNtcCgmcnAtPmV4cGlyZU0sICZub3csIDwpKSkgewogICAgICAgICAgICAgaWYgKChzcHRyID0gZmluZF9zZWNfbW9kKHJwLT5wZHUtPnNlY3VyaXR5TW9kZWwpKSAhPSBOVUxMICYmCiAgICAgICAgICAgICAgICAgc3B0ci0+cGR1X3RpbWVvdXQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIC8qCkBAIC02MjQxLDE4ICs2MzQyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VULCBzcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtPnBkdS0+cmVxaWQsIHJwLT5wZHUsIG1hZ2ljKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzcC0+cmVxdWVzdHMgPT0gcnApIHsKLSAgICAgICAgICAgICAgICAgICAgaXNwLT5yZXF1ZXN0cyA9IHJwLT5uZXh0X3JlcXVlc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc3AtPnJlcXVlc3RzRW5kID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG9ycCkKICAgICAgICAgICAgICAgICAgICAgb3JwLT5uZXh0X3JlcXVlc3QgPSBycC0+bmV4dF9yZXF1ZXN0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNwLT5yZXF1ZXN0c0VuZCA9IG9ycDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHJwLT5wZHUpOyAvKiBGSVggIHJwIGlzIGFscmVhZHkgZnJlZSdkISAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaXNwLT5yZXF1ZXN0cyA9IHJwLT5uZXh0X3JlcXVlc3Q7CisgICAgICAgICAgICAgICAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApCisgICAgICAgICAgICAgICAgICAgIGlzcC0+cmVxdWVzdHNFbmQgPSBvcnA7CisgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShycC0+cGR1KTsKICAgICAgICAgICAgICAgICBmcmVlbWUgPSBycDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogZG9uJ3QgdXBkYXRlIG9ycCBiZWxvdyAqLwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTY1MDUsNiArNjYwMSw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfSVNfU1VCVFJFRQogLyoqIElkZW50aWNhbCB0byBuZXRzbm1wX29pZF9lcXVhbHMsIGV4Y2VwdCBvbmx5IHRoZSBsZW5ndGggdXAgdG8gbGVuMSBpcyBjb21wYXJlZC4KICAqIEZ1bmN0aW9uYWxseSwgdGhpcyBkZXRlcm1pbmVzIGlmIGluX25hbWUyIGlzIGVxdWFsIG9yIGEgc3VidHJlZSBvZiBpbl9uYW1lMQogICogQHBhcmFtIGluX25hbWUxIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLgpAQCAtNjUyNSw2ICs2NjIyLDcgQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX0lTX1NVQlRSRUUgKi8KIAogLyoqIEdpdmVuIHR3byBPSURzLCBkZXRlcm1pbmUgdGhlIGNvbW1vbiBwcmVmaXggdG8gdGhlbSBib3RoLgogICogQHBhcmFtIGluX25hbWUxIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLgpAQCAtNjYwOSw3ICs2NzA3LDcgQEAKIHNubXBfcGR1X2FkZF92YXJpYWJsZShuZXRzbm1wX3BkdSAqcGR1LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKiB2YWx1ZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKQogewogICAgIHJldHVybiBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZwZHUtPnZhcmlhYmxlcywgbmFtZSwgbmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgdmFsdWUsIGxlbik7CkBAIC02NjIzLDcgKzY3MjEsNyBAQAogc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiogdmFybGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICogdmFsdWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pCiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqdnRtcDsKICAgICBpbnQgcmM7CkBAIC02NjQxLDcgKzY3MzksNyBAQAogICAgIGlmICgoIDAgIT0gcmMgKSB8fAogICAgICAgICAobmFtZSAhPSBOVUxMICYmIHNubXBfc2V0X3Zhcl9vYmppZCh2YXJzLCBuYW1lLCBuYW1lX2xlbmd0aCkpKSB7CiAgICAgICAgIHNubXBfZnJlZV92YXIodmFycyk7Ci0gICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qCkBAIC02Nzg5LDcgKzY4ODcsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fSU5URUdFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0bXAsIHNpemVvZihsdG1wKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAndSc6CkBAIC02ODAzLDcgKzY5MDEsNyBAQAogICAgICAgICBsdG1wID0gc3RydG91bCh2YWx1ZSwgJmVjcCwgMTApOwogICAgICAgICBpZiAoKnZhbHVlICYmICEqZWNwKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9VTlNJR05FRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHRtcCwgc2l6ZW9mKGx0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY4MTksNyArNjkxNyw3IEBACiAgICAgICAgIGx0bXAgPSBzdHJ0b3VsKHZhbHVlLCAmZWNwLCAxMCk7CiAgICAgICAgIGlmICgqdmFsdWUgJiYgISplY3ApCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX1VJTlRFR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdG1wLCBzaXplb2YobHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjgzNSw3ICs2OTMzLDcgQEAKICAgICAgICAgbHRtcCA9IHN0cnRvdWwodmFsdWUsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCp2YWx1ZSAmJiAhKmVjcCkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fQ09VTlRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHRtcCwgc2l6ZW9mKGx0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY4NTAsNyArNjk0OCw3IEBACiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAgICAgICAgIGlmIChyZWFkNjQoJmM2NHRtcCwgdmFsdWUpKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9DT1VOVEVSNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY4NjYsNyArNjk2NCw3IEBACiAgICAgICAgIGx0bXAgPSBzdHJ0b3VsKHZhbHVlLCAmZWNwLCAxMCk7CiAgICAgICAgIGlmICgqdmFsdWUgJiYgISplY3ApCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX1RJTUVUSUNLUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGxvbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHRtcCwgc2l6ZW9mKGxvbmcpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY4ODIsNyArNjk4MCw3IEBACiAgICAgICAgIGF0bXAgPSBpbmV0X2FkZHIodmFsdWUpOwogICAgICAgICBpZiAoYXRtcCAhPSAoaW5fYWRkcl90KSAtMSB8fCAhc3RyY21wKHZhbHVlLCAiMjU1LjI1NS4yNTUuMjU1IikpCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX0lQQUREUkVTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgYXRtcCwgc2l6ZW9mKGF0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXRtcCwgc2l6ZW9mKGF0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY5MDAsOSArNjk5OCw4IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aW50ID0gTUFYX09JRF9MRU47CiAgICAgICAgICAgICBpZiAoc25tcF9wYXJzZV9vaWQodmFsdWUsIChvaWQgKikgYnVmLCAmdGludCkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09CSkVDVF9JRCwgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSAqIHRpbnQpOworICAgICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihvaWQpICogdGludCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNubXBfZXJybm87ICAgIC8qTVRDUklUSUNBTF9SRVNPVVJDRSAqLwogICAgICAgICAgICAgfQpAQCAtNjkyMCw4ICs3MDE3LDggQEAKICAgICAgICAgfQogCWlmICgncycgPT0gdHlwZSAmJiBkb19oaW50ICYmICFwYXJzZV9vY3RldF9oaW50KHRwLT5oaW50LCB2YWx1ZSwgJmhpbnRwdHIsICZpdG1wKSkgewogICAgICAgICAgICAgaWYgKF9jaGVja19yYW5nZSh0cCwgaXRtcCwgJnJlc3VsdCwgIlZhbHVlIGRvZXMgbm90IG1hdGNoIERJU1BMQVktSElOVCIpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIGhpbnRwdHIsIGl0bXApOworICAgICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50cHRyLCBpdG1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNOTVBfRlJFRShoaW50cHRyKTsKICAgICAgICAgICAgIGhpbnRwdHIgPSBidWY7CkBAIC02OTU4LDcgKzcwNTUsNyBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgJ24nOgotICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX05VTEwsIDAsIDApOworICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX05VTEwsIE5VTEwsIDApOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgJ2InOgpAQCAtNzAzMyw3ICs3MTMwLDcgQEAKICAgICBjYXNlICdVJzoKICAgICAgICAgaWYgKHJlYWQ2NCgmYzY0dG1wLCB2YWx1ZSkpCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09QQVFVRV9VNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTcwNDEsNyArNzEzOCw3IEBACiAgICAgY2FzZSAnSSc6CiAgICAgICAgIGlmIChyZWFkNjQoJmM2NHRtcCwgdmFsdWUpKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PUEFRVUVfSTY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC03MDQ5LDE2ICs3MTQ2LDE1IEBACiAgICAgY2FzZSAnRic6CiAgICAgICAgIGlmIChzc2NhbmYodmFsdWUsICIlZiIsICZmdG1wKSA9PSAxKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PUEFRVUVfRkxPQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGZ0bXAsIHNpemVvZihmdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0bXAsIHNpemVvZihmdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlICdEJzoKICAgICAgICAgaWYgKHNzY2FuZih2YWx1ZSwgIiVsZiIsICZkdG1wKSA9PSAxKQotICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09QQVFVRV9ET1VCTEUsICh1X2NoYXIgKikgJiBkdG1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkdG1wKSk7CisgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09QQVFVRV9ET1VCTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0bXAsIHNpemVvZihkdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC03MjU5LDI1ICs3MzU1LDI3IEBACiBvaWQgICAgICAgICAgICAqCiBzbm1wX2R1cGxpY2F0ZV9vYmppZChjb25zdCBvaWQgKiBvYmpUb0NvcHksIHNpemVfdCBvYmpUb0NvcHlMZW4pCiB7Ci0gICAgb2lkICAgICAgICAgICAgKnJldHVybk9pZCA9IE5VTEw7CisgICAgb2lkICAgICAgICAgICAgKnJldHVybk9pZDsKICAgICBpZiAob2JqVG9Db3B5ICE9IE5VTEwgJiYgb2JqVG9Db3B5TGVuICE9IDApIHsKICAgICAgICAgcmV0dXJuT2lkID0gKG9pZCAqKSBtYWxsb2Mob2JqVG9Db3B5TGVuICogc2l6ZW9mKG9pZCkpOwogICAgICAgICBpZiAocmV0dXJuT2lkKSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKHJldHVybk9pZCwgb2JqVG9Db3B5LCBvYmpUb0NvcHlMZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBtZW1jcHkocmV0dXJuT2lkLCBvYmpUb0NvcHksIG9ialRvQ29weUxlbiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgfQotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuT2lkID0gTlVMTDsKICAgICByZXR1cm4gcmV0dXJuT2lkOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUwogLyoKICAqIGdlbmVyaWMgc3RhdGlzdGljcyBjb3VudGVyIGZ1bmN0aW9ucyAKICAqLwotc3RhdGljIHVfaW50ICAgIHN0YXRpc3RpY3NbTUFYX1NUQVRTXTsKK3N0YXRpYyB1X2ludCAgICBzdGF0aXN0aWNzW05FVFNOTVBfU1RBVF9NQVhfU1RBVFNdOwogCiB1X2ludAogc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKGludCB3aGljaCkKIHsKLSAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE1BWF9TVEFUUykgeworICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTkVUU05NUF9TVEFUX01BWF9TVEFUUykgewogICAgICAgICBzdGF0aXN0aWNzW3doaWNoXSsrOwogICAgICAgICByZXR1cm4gc3RhdGlzdGljc1t3aGljaF07CiAgICAgfQpAQCAtNzI4Nyw3ICs3Mzg1LDcgQEAKIHVfaW50CiBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkoaW50IHdoaWNoLCBpbnQgY291bnQpCiB7Ci0gICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBNQVhfU1RBVFMpIHsKKyAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMpIHsKICAgICAgICAgc3RhdGlzdGljc1t3aGljaF0gKz0gY291bnQ7CiAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzW3doaWNoXTsKICAgICB9CkBAIC03Mjk3LDcgKzczOTUsNyBAQAogdV9pbnQKIHNubXBfZ2V0X3N0YXRpc3RpYyhpbnQgd2hpY2gpCiB7Ci0gICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBNQVhfU1RBVFMpCisgICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBORVRTTk1QX1NUQVRfTUFYX1NUQVRTKQogICAgICAgICByZXR1cm4gc3RhdGlzdGljc1t3aGljaF07CiAgICAgcmV0dXJuIDA7CiB9CkBAIC03MzA3LDUgKzc0MDUsNSBAQAogewogICAgIG1lbXNldChzdGF0aXN0aWNzLCAwLCBzaXplb2Yoc3RhdGlzdGljcykpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUyAqLwogLyoqICBAfSAqLwotCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfYXV0aC5jIGIvc25tcGxpYi9zbm1wX2F1dGguYwppbmRleCBkZGZkM2QzLi40YjQwOGYxIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfYXV0aC5jCisrKyBiL3NubXBsaWIvc25tcF9hdXRoLmMKQEAgLTQzLDExICs0Myw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTczLDEwICs2OSw2IEBACiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaWZkZWYgdm1zCiAjaW5jbHVkZSA8aW4uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2NsaWVudC5jIGIvc25tcGxpYi9zbm1wX2NsaWVudC5jCmluZGV4IDdlZWUzYTEuLmFiN2E1OGMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9jbGllbnQuYworKysgYi9zbm1wbGliL3NubXBfY2xpZW50LmMKQEAgLTQwLDYgKzQwLDcgQEAKICAqICBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTU2LDExICs1Nyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTg5LDEyICs4NiwxMCBAQAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oPgpAQCAtMTAyLDcgKzk3LDE0IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2NsaWVudF9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX3NwbGl0X3BkdSwgc25tcF9jbGllbnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfcmVzZXRfdmFyX3R5cGVzLCBzbm1wX2NsaWVudF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbiwgc25tcF9jbGllbnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJvd19jcmVhdGUsIHNubXBfY2xpZW50X2FsbCkKIAogI2lmbmRlZiBCU0Q0XzMKICNkZWZpbmUgQlNENF8yCkBAIC0xNjEsNiArMTYzLDcgQEAKIH0KIAogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CiBzdGF0aWMgaW50CiBzbm1wX3N5bmNoX2lucHV0KGludCBvcCwKICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKQEAgLTE3MCwxMCArMTczLDE0IEBACiAgICAgaW50ICAgICAgICAgICAgIHJwdF90eXBlOwogCiAgICAgaWYgKHJlcWlkICE9IHN0YXRlLT5yZXFpZCAmJiBwZHUgJiYgcGR1LT5jb21tYW5kICE9IFNOTVBfTVNHX1JFUE9SVCkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9zeW5jaCIsICJVbmV4cGVjdGVkIHJlc3BvbnNlIChSZXFJRDogJWQsJWQgLSBDbWQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpZCwgc3RhdGUtPnJlcWlkLCBwZHUtPmNvbW1hbmQgKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHN0YXRlLT53YWl0aW5nID0gMDsKKyAgICBERUJVR01TR1RMKCgic25tcF9zeW5jaCIsICJSZXNwb25zZSAoUmVxSUQ6ICVkIC0gQ21kICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpZCwgKHBkdSA/IHBkdS0+Y29tbWFuZCA6IC0xKSkpOwogCiAgICAgaWYgKG9wID09IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSAmJiBwZHUpIHsKICAgICAgICAgaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19SRVBPUlQpIHsKQEAgLTIzNiwxMSArMjQzLDExIEBACiAgICAgICAgIHJldHVybiAxOwogCiAgICAgbWVtbW92ZShuZXd2YXIsIHZhciwgc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOwotICAgIG5ld3Zhci0+bmV4dF92YXJpYWJsZSA9IDA7Ci0gICAgbmV3dmFyLT5uYW1lID0gMDsKLSAgICBuZXd2YXItPnZhbC5zdHJpbmcgPSAwOwotICAgIG5ld3Zhci0+ZGF0YSA9IDA7Ci0gICAgbmV3dmFyLT5kYXRhRnJlZUhvb2sgPSAwOworICAgIG5ld3Zhci0+bmV4dF92YXJpYWJsZSA9IE5VTEw7CisgICAgbmV3dmFyLT5uYW1lID0gTlVMTDsKKyAgICBuZXd2YXItPnZhbC5zdHJpbmcgPSBOVUxMOworICAgIG5ld3Zhci0+ZGF0YSA9IE5VTEw7CisgICAgbmV3dmFyLT5kYXRhRnJlZUhvb2sgPSBOVUxMOwogICAgIG5ld3Zhci0+aW5kZXggPSAwOwogCiAgICAgLyoKQEAgLTI2NSw5ICsyNzIsMTMgQEAKICAgICAgICAgICAgIG1lbW1vdmUobmV3dmFyLT52YWwuc3RyaW5nLCB2YXItPnZhbC5zdHJpbmcsIHZhci0+dmFsX2xlbik7CiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIGZpeCB0aGUgcG9pbnRlciB0byBuZXcgbG9jYWwgc3RvcmUgKi8KICAgICAgICAgICAgIG5ld3Zhci0+dmFsLnN0cmluZyA9IG5ld3Zhci0+YnVmOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIG5vIG5lZWQgZm9yIGEgbWVtbW92ZSwgc2luY2Ugd2UgY29waWVkIHRoZSB3aG9sZSB2YXIKKyAgICAgICAgICAgICAqIHN0cnVjdCAoYW5kIHRodXMgdmFyLT5idWYpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAqLwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbmV3dmFyLT52YWwuc3RyaW5nID0gMDsKKyAgICAgICAgbmV3dmFyLT52YWwuc3RyaW5nID0gTlVMTDsKICAgICAgICAgbmV3dmFyLT52YWxfbGVuID0gMDsKICAgICB9CiAKQEAgLTI4MSw5ICsyOTIsOSBAQAogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIDEgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCiAgKi8KIGludAotc25tcF9jbG9uZV9tZW0odm9pZCAqKmRzdFB0ciwgdm9pZCAqc3JjUHRyLCB1bnNpZ25lZCBsZW4pCitzbm1wX2Nsb25lX21lbSh2b2lkICoqZHN0UHRyLCBjb25zdCB2b2lkICpzcmNQdHIsIHVuc2lnbmVkIGxlbikKIHsKLSAgICAqZHN0UHRyID0gMDsKKyAgICAqZHN0UHRyID0gTlVMTDsKICAgICBpZiAoc3JjUHRyKSB7CiAgICAgICAgICpkc3RQdHIgPSBtYWxsb2MobGVuICsgMSk7CiAgICAgICAgIGlmICghKmRzdFB0cikgewpAQCAtMzQzLDIwICszNTQsMjAgQEAKIAogICAgIG5ld3BkdSA9IChuZXRzbm1wX3BkdSAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfcGR1KSk7CiAgICAgaWYgKCFuZXdwZHUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1tb3ZlKG5ld3BkdSwgcGR1LCBzaXplb2YobmV0c25tcF9wZHUpKTsKIAogICAgIC8qCiAgICAgICogcmVzZXQgY29waWVkIHBvaW50ZXJzIGlmIGNvcHkgZmFpbHMgCiAgICAgICovCi0gICAgbmV3cGR1LT52YXJpYWJsZXMgPSAwOwotICAgIG5ld3BkdS0+ZW50ZXJwcmlzZSA9IDA7Ci0gICAgbmV3cGR1LT5jb21tdW5pdHkgPSAwOwotICAgIG5ld3BkdS0+c2VjdXJpdHlFbmdpbmVJRCA9IDA7Ci0gICAgbmV3cGR1LT5zZWN1cml0eU5hbWUgPSAwOwotICAgIG5ld3BkdS0+Y29udGV4dEVuZ2luZUlEID0gMDsKLSAgICBuZXdwZHUtPmNvbnRleHROYW1lID0gMDsKLSAgICBuZXdwZHUtPnRyYW5zcG9ydF9kYXRhID0gMDsKKyAgICBuZXdwZHUtPnZhcmlhYmxlcyA9IE5VTEw7CisgICAgbmV3cGR1LT5lbnRlcnByaXNlID0gTlVMTDsKKyAgICBuZXdwZHUtPmNvbW11bml0eSA9IE5VTEw7CisgICAgbmV3cGR1LT5zZWN1cml0eUVuZ2luZUlEID0gTlVMTDsKKyAgICBuZXdwZHUtPnNlY3VyaXR5TmFtZSA9IE5VTEw7CisgICAgbmV3cGR1LT5jb250ZXh0RW5naW5lSUQgPSBOVUxMOworICAgIG5ld3BkdS0+Y29udGV4dE5hbWUgPSBOVUxMOworICAgIG5ld3BkdS0+dHJhbnNwb3J0X2RhdGEgPSBOVUxMOwogCiAgICAgLyoKICAgICAgKiBjb3B5IGJ1ZmZlcnMgaW5kaXZpZHVhbGx5LiBJZiBhbnkgY29weSBmYWlscywgYWxsIGFyZSBmcmVlZC4gCkBAIC0zNzcsNyArMzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpKSB7CiAgICAgICAgIHNubXBfZnJlZV9wZHUobmV3cGR1KTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChwZHUgIT0gTlVMTCAmJiBwZHUtPnNlY3VyaXR5U3RhdGVSZWYgJiYKQEAgLTM5Miw2ICs0MDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CisKICAgICBpZiAoKHNwdHIgPSBmaW5kX3NlY19tb2QobmV3cGR1LT5zZWN1cml0eU1vZGVsKSkgIT0gTlVMTCAmJgogICAgICAgICBzcHRyLT5wZHVfY2xvbmUgIT0gTlVMTCkgewogICAgICAgICAvKgpAQCAtNDMzLDEzICs0NDUsMTMgQEAKICAgICAgICAgICAgIGlmIChuZXd2YXIpCiAgICAgICAgICAgICAgICAgZnJlZSgoY2hhciAqKSBuZXd2YXIpOwogICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQobmV3aGVhZCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIGNsb25lZCB2YXJpYWJsZSB0byBuZXcgbGlzdCAgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoMCA9PSBuZXdoZWFkKQorICAgICAgICBpZiAoTlVMTCA9PSBuZXdoZWFkKQogICAgICAgICAgICAgbmV3aGVhZCA9IG5ld3ZhcjsKICAgICAgICAgaWYgKG9sZHZhcikKICAgICAgICAgICAgIG9sZHZhci0+bmV4dF92YXJpYWJsZSA9IG5ld3ZhcjsKQEAgLTQ4NCw3ICs0OTYsNyBAQAogICAgIGludCAgICAgICAgICAgICBkcm9wX2lkeDsKIAogICAgIGlmICghbmV3cGR1KQotICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiB3aGVyZSBpcyBQRFUgdG8gY29weSB0byA/ICovCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIHdoZXJlIGlzIFBEVSB0byBjb3B5IHRvID8gKi8KIAogICAgIGlmIChkcm9wX2VycikKICAgICAgICAgZHJvcF9pZHggPSBwZHUtPmVycmluZGV4IC0gc2tpcF9jb3VudDsKQEAgLTU1MSw3ICs1NjMsNyBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjbG9uZSBhIGZ1bGwgdmFyYmluZCBsaXN0CiAgKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNsb25lZCBQRFUgaWYgc3VjY2Vzc2Z1bC4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjbG9uZWQgdmFyYmluZCBsaXN0IGlmIHN1Y2Nlc3NmdWwuCiAgKiBSZXR1cm5zIDAgaWYgZmFpbHVyZQogICovCiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgpAQCAtNTgyLDYgKzU5NCw3IEBACiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2xvbmVkIFBEVSBpZiBzdWNjZXNzZnVsLgogICogUmV0dXJucyAwIGlmIGZhaWx1cmUuCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX1NQTElUX1BEVQogbmV0c25tcF9wZHUgICAgKgogc25tcF9zcGxpdF9wZHUobmV0c25tcF9wZHUgKnBkdSwgaW50IHNraXBfY291bnQsIGludCBjb3B5X2NvdW50KQogewpAQCAtNTkyLDYgKzYwNSw3IEBACiAKICAgICByZXR1cm4gbmV3cGR1OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9TUExJVF9QRFUgKi8KIAogCiAvKgpAQCAtNjEzLDE4ICs2MjcsMTggQEAKIAogICAgIGlmICgocGR1LT5jb21tYW5kICE9IFNOTVBfTVNHX1JFU1BPTlNFKQogICAgICAgICB8fCAocGR1LT5lcnJzdGF0ID09IFNOTVBfRVJSX05PRVJST1IpCi0gICAgICAgIHx8ICgwID09IHBkdS0+dmFyaWFibGVzKQotICAgICAgICB8fCAocGR1LT5lcnJpbmRleCA+IHNubXBfdmFyYmluZF9sZW4ocGR1KSkKKyAgICAgICAgfHwgKE5VTEwgPT0gcGR1LT52YXJpYWJsZXMpCisgICAgICAgIHx8IChwZHUtPmVycmluZGV4ID4gKGludClzbm1wX3ZhcmJpbmRfbGVuKHBkdSkpCiAgICAgICAgIHx8IChwZHUtPmVycmluZGV4IDw9IDApKSB7Ci0gICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIHByZS1jb25kaXRpb24gdGVzdHMgZmFpbCAqLworICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBwcmUtY29uZGl0aW9uIHRlc3RzIGZhaWwgKi8KICAgICB9CiAKICAgICBuZXdwZHUgPSBfY2xvbmVfcGR1KHBkdSwgMSk7ICAgICAgICAvKiBjb3BpZXMgYWxsIGV4Y2VwdCBlcnJvcmVkIHZhcmlhYmxlICovCiAgICAgaWYgKCFuZXdwZHUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoIW5ld3BkdS0+dmFyaWFibGVzKSB7CiAgICAgICAgIHNubXBfZnJlZV9wZHUobmV3cGR1KTsKLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogbm8gdmFyaWFibGVzLiAic2hvdWxkIG5vdCBoYXBwZW4iICovCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIG5vIHZhcmlhYmxlcy4gInNob3VsZCBub3QgaGFwcGVuIiAqLwogICAgIH0KICAgICBuZXdwZHUtPmNvbW1hbmQgPSBjb21tYW5kOwogICAgIG5ld3BkdS0+cmVxaWQgPSBzbm1wX2dldF9uZXh0X3JlcWlkKCk7CkBAIC03MTUsMTAgKzcyOSw4IEBACiBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBuZXd2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgbG9uZyB2YWwpCiB7Ci0gICAgY29uc3QgbG9uZyB2ID0gdmFsOwogICAgIG5ld3Zhci0+dHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHNubXBfc2V0X3Zhcl92YWx1ZShuZXd2YXIsICZ2LCBzaXplb2YobG9uZykpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBzbm1wX3NldF92YXJfdmFsdWUobmV3dmFyLCAmdmFsLCBzaXplb2YobG9uZykpOwogfQogCiBpbnQKQEAgLTczMiw2ICs3NDQsOCBAQAogICAgIHJldHVybiBjb3VudDsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvdW50X3ZhcmJpbmRzX29mX3R5cGUsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPVU5UX1ZBUkJJTkRTX09GX1RZUEUKIGludAogY291bnRfdmFyYmluZHNfb2ZfdHlwZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJfcHRyLCB1X2NoYXIgdHlwZSkKIHsKQEAgLTc0Myw3ICs3NTcsMTAgQEAKIAogICAgIHJldHVybiBjb3VudDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPVU5UX1ZBUkJJTkRTX09GX1RZUEUgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbmRfdmFyaW5kX29mX3R5cGUsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfVkFSSU5EX09GX1RZUEUKIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCiBmaW5kX3ZhcmJpbmRfb2ZfdHlwZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJfcHRyLCB1X2NoYXIgdHlwZSkKIHsKQEAgLTc1MiwxMCArNzY5LDExIEBACiAKICAgICByZXR1cm4gdmFyX3B0cjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfVkFSSU5EX09GX1RZUEUgKi8KIAogbmV0c25tcF92YXJpYWJsZV9saXN0KgogZmluZF92YXJiaW5kX2luX2xpc3QoIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmJsaXN0LAotICAgICAgICAgICAgICAgICAgICAgIG9pZCAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4pCiB7CiAgICAgZm9yICg7IHZibGlzdCAhPSBOVUxMOyB2Ymxpc3QgPSB2Ymxpc3QtPm5leHRfdmFyaWFibGUpCiAgICAgICAgIGlmICghc25tcF9vaWRfY29tcGFyZSh2Ymxpc3QtPm5hbWUsIHZibGlzdC0+bmFtZV9sZW5ndGgsIG5hbWUsIGxlbikpCkBAIC03ODMsNyArODAxLDcgQEAKICAgICBpZiAodmFycy0+dmFsLnN0cmluZyAmJiB2YXJzLT52YWwuc3RyaW5nICE9IHZhcnMtPmJ1ZikgewogICAgICAgICBmcmVlKHZhcnMtPnZhbC5zdHJpbmcpOwogICAgIH0KLSAgICB2YXJzLT52YWwuc3RyaW5nID0gMDsKKyAgICB2YXJzLT52YWwuc3RyaW5nID0gTlVMTDsKICAgICB2YXJzLT52YWxfbGVuID0gMDsKIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMICYmIGxlbiA+IDApIHsKQEAgLTc5NCw3ICs4MTIsNyBAQAogICAgIC8qCiAgICAgICogdXNlIGJ1aWx0LWluIHN0b3JhZ2UgZm9yIHNtYWxsZXIgdmFsdWVzIAogICAgICAqLwotICAgIGlmIChsZW4gPD0gKHNpemVvZih2YXJzLT5idWYpIC0gMSkpIHsKKyAgICBpZiAobGVuIDw9IHNpemVvZih2YXJzLT5idWYpKSB7CiAgICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAodV9jaGFyICopIHZhcnMtPmJ1ZjsKICAgICAgICAgbGFyZ2V2YWwgPSAwOwogICAgIH0KQEAgLTgzMyw3ICs4NTEsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIChTSVpFT0ZfTE9ORyAhPSBTSVpFT0ZfTE9OR19MT05HKSAmJiAoU0laRU9GX0xPTkdfTE9ORyAhPSBTSVpFT0ZfSU5UTUFYX1QpCisjaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiAoU0laRU9GX0xPTkcgIT0gU0laRU9GX0xPTkdfTE9ORykKKyNpZiAhZGVmaW5lZChTSVpFT0ZfSU5UTUFYX1QpIHx8IChTSVpFT0ZfTE9OR19MT05HICE9IFNJWkVPRl9JTlRNQVhfVCkKICAgICAgICAgZWxzZSBpZiAodmFycy0+dmFsX2xlbiA9PSBzaXplb2YobG9uZyBsb25nKSl7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgICAqdmFsX3VsbG9uZwogICAgICAgICAgICAgICAgID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqKSB2YWx1ZTsKQEAgLTg0NCw3ICs4NjMsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKLSNpZiBTSVpFT0ZfTE9ORyAhPSBTSVpFT0ZfSU5UTUFYX1QKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX0lOVE1BWF9UKSAmJiAoU0laRU9GX0xPTkcgIT0gU0laRU9GX0lOVE1BWF9UKQogICAgICAgICBlbHNlIGlmICh2YXJzLT52YWxfbGVuID09IHNpemVvZihpbnRtYXhfdCkpewogICAgICAgICAgICAgY29uc3QgdWludG1heF90ICp2YWxfdWludG1heF90CiAgICAgICAgICAgICAgICAgPSAoY29uc3QgdWludG1heF90ICopIHZhbHVlOwpAQCAtODc0LDcgKzg5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgID0gKGNvbnN0IGNoYXIgKikgdmFsdWU7CiAgICAgICAgICAgICAgICAgKih2YXJzLT52YWwuaW50ZWdlcikgPSAobG9uZykgKnZhbF9jaGFyOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgICAgKnZhbF91Y2hhciAKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICAgICp2YWxfdWNoYXIKICAgICAgICAgICAgICAgICAgICAgPSAoY29uc3QgdV9jaGFyICopIHZhbHVlOwogICAgICAgICAgICAgICAgICoodmFycy0+dmFsLmludGVnZXIpID0gKHVuc2lnbmVkIGxvbmcpICp2YWxfdWNoYXI7CiAgICAgICAgICAgICB9CkBAIC05MTEsNyArOTMxLDcgQEAKICAgICBjYXNlIEFTTl9CSVRfU1RSOgogICAgIGNhc2UgQVNOX09QQVFVRToKICAgICBjYXNlIEFTTl9OU0FQOgotICAgICAgICBpZiAobGFyZ2V2YWwpIHsKKyAgICAgICAgaWYgKHZhcnMtPnZhbF9sZW4gPj0gc2l6ZW9mKHZhcnMtPmJ1ZikpIHsKICAgICAgICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAodV9jaGFyICopIG1hbGxvYyh2YXJzLT52YWxfbGVuICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhcnMtPnZhbC5zdHJpbmcgPT0gTlVMTCkgewpAQCAtOTkzLDYgKzEwMTMsNyBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfUkVTRVRfVkFSX1RZUEVTCiB2b2lkCiBzbm1wX3Jlc2V0X3Zhcl90eXBlcyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YmwsIHVfY2hhciBuZXdfdHlwZSkKIHsKQEAgLTEwMDEsNiArMTAyMiw3IEBACiAgICAgICAgIHZibCA9IHZibC0+bmV4dF92YXJpYWJsZTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX1JFU0VUX1ZBUl9UWVBFUyAqLwogCiBpbnQKIHNubXBfc3luY2hfcmVzcG9uc2VfY2IobmV0c25tcF9zZXNzaW9uICogc3MsCkBAIC0xMDM0LDEwICsxMDU2LDExIEBACiAgICAgICAgIGJsb2NrID0gTkVUU05NUF9TTk1QQkxPQ0s7CiAgICAgICAgIHR2cCA9ICZ0aW1lb3V0OwogICAgICAgICB0aW1lcmNsZWFyKHR2cCk7Ci0gICAgICAgIHNubXBfc2VsZWN0X2luZm8oJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jayk7CisgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mb19mbGFncygwLCAmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRUxFQ1RfTk9BTEFSTVMpOwogICAgICAgICBpZiAoYmxvY2sgPT0gMSkKICAgICAgICAgICAgIHR2cCA9IE5VTEw7ICAgICAgICAgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCi0gICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCAwLCAwLCB0dnApOworICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgTlVMTCwgTlVMTCwgdHZwKTsKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgc25tcF9yZWFkKCZmZHNldCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDcwLDcgKzEwOTMsNyBAQAogCiAgICAgICAgIGlmICggc3MtPmZsYWdzICYgU05NUF9GTEFHU19SRVNQX0NBTExCQUNLICkgewogICAgICAgICAgICAgdm9pZCAoKmNiKSh2b2lkKTsKLSAgICAgICAgICAgIGNiID0gc3MtPm15dm9pZDsKKyAgICAgICAgICAgIGNiID0gKHZvaWQgKCopKHZvaWQpKShzcy0+bXl2b2lkKTsKICAgICAgICAgICAgIGNiKCk7ICAgICAgICAvKiBVc2VkIHRvIGludm9rZSAnbmV0c25tcF9jaGVja19vdXRzdGFuZGluZ19hZ2VudF9yZXF1ZXN0cygpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnRlcm5hbCBBZ2VudFggcXVlcmllcy4gICovCiAgICAgICAgIH0KQEAgLTExMjUsMTAgKzExNDgsMTEgQEAKICAgICAgICAgYmxvY2sgPSBORVRTTk1QX1NOTVBCTE9DSzsKICAgICAgICAgdHZwID0gJnRpbWVvdXQ7CiAgICAgICAgIHRpbWVyY2xlYXIodHZwKTsKLSAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHNlc3NwLCAmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrKTsKKyAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvX2ZsYWdzKHNlc3NwLCAmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRUxFQ1RfTk9BTEFSTVMpOwogICAgICAgICBpZiAoYmxvY2sgPT0gMSkKICAgICAgICAgICAgIHR2cCA9IE5VTEw7ICAgICAgICAgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCi0gICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCAwLCAwLCB0dnApOworICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgTlVMTCwgTlVMTCwgdHZwKTsKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgc25tcF9zZXNzX3JlYWQoc2Vzc3AsICZmZHNldCk7CiAgICAgICAgIH0gZWxzZQpAQCAtMTIwNSwxNSArMTIyOSw0OCBAQAogICogIG92ZXIgdGhlIHNwZWNpZmllZCBTTk1QIHNlc3Npb24uCiAgKgogICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisKIHN0YXRpYyBuZXRzbm1wX3Nlc3Npb24gKl9kZWZfcXVlcnlfc2Vzc2lvbiA9IE5VTEw7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9RVUVSWV9TRVRfREVGQVVMVF9TRVNTSU9OCiB2b2lkCiBuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24oIG5ldHNubXBfc2Vzc2lvbiAqc2VzcykgeworICAgIERFQlVHTVNHVEwoKCJpcXVlcnkiLCAic2V0IGRlZmF1bHQgc2Vzc2lvbiAlcFxuIiwgc2VzcykpOwogICAgIF9kZWZfcXVlcnlfc2Vzc2lvbiA9IHNlc3M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9RVUVSWV9TRVRfREVGQVVMVF9TRVNTSU9OICovCiAKKy8qKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBpbnRlcm5hbCBxdWVyeSBzZXNzaW9uLgorICovCituZXRzbm1wX3Nlc3Npb24gKgorbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uX3VuY2hlY2tlZCggdm9pZCApIHsKKyAgICBERUJVR01TR1RMKCgiaXF1ZXJ5IiwgImdldCBkZWZhdWx0IHNlc3Npb24gJXBcbiIsIF9kZWZfcXVlcnlfc2Vzc2lvbikpOworICAgIHJldHVybiBfZGVmX3F1ZXJ5X3Nlc3Npb247Cit9CisKKy8qKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBpbnRlcm5hbCBxdWVyeSBzZXNzaW9uIGFuZCBsb2cgYQorICogd2FybmluZyBtZXNzYWdlIG9uY2UgaWYgdGhpcyBzZXNzaW9uIGRvZXMgbm90IGV4aXN0LgorICovCiBuZXRzbm1wX3Nlc3Npb24gKgogbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCB2b2lkICkgewotICAgIHJldHVybiBfZGVmX3F1ZXJ5X3Nlc3Npb247CisgICAgc3RhdGljIGludCB3YXJuaW5nX2xvZ2dlZCA9IDA7CisKKyAgICBpZiAoISBfZGVmX3F1ZXJ5X3Nlc3Npb24gJiYgISB3YXJuaW5nX2xvZ2dlZCkgeworICAgICAgICBpZiAoISBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfU0VDTkFNRSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImlxdWVyeVNlY05hbWUgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgLSBpbnRlcm5hbCBxdWVyaWVzIHdpbGwgZmFpbFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0IHNlc3Npb24gaXMgbm90IGF2YWlsYWJsZSAtIGludGVybmFsIHF1ZXJpZXMgd2lsbCBmYWlsXG4iKTsKKyAgICAgICAgfQorICAgICAgICB3YXJuaW5nX2xvZ2dlZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbl91bmNoZWNrZWQoKTsKIH0KIAogCkBAIC0xMjI3LDggKzEyODQsOSBAQAogICAgIG5ldHNubXBfcGR1ICpwZHUgICAgICA9IHNubXBfcGR1X2NyZWF0ZSggcmVxdWVzdCApOwogICAgIG5ldHNubXBfcGR1ICpyZXNwb25zZSA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YjEsICp2YjIsICp2dG1wOwotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgY291bnQ7CiAKKyAgICBERUJVR01TR1RMKCgiaXF1ZXJ5IiwgInF1ZXJ5IG9uIHNlc3Npb24gJXBcbiIsIHNlc3Npb24pKTsKICAgICAvKgogICAgICAqIENsb25lIHRoZSB2YXJiaW5kIGxpc3QgaW50byB0aGUgcmVxdWVzdCBQRFUuLi4KICAgICAgKi8KQEAgLTEyNDMsNiArMTMwMSw3IEBACiAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CisgICAgREVCVUdNU0dUTCgoImlxdWVyeSIsICJxdWVyeSByZXR1cm5lZCAlZFxuIiwgcmV0KSk7CiAKICAgICAvKgogICAgICAqIC4uLi50aGVuIGNvcHkgdGhlIHJlc3VsdHMgYmFjayBpbnRvIHRoZQpAQCAtMTI1Miw2ICsxMzExLDggQEAKICAgICAgKi8KICAgICBpZiAoIHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SICkgewogICAgICAgICBpZiAoIHJlc3BvbnNlLT5lcnJzdGF0ICE9IFNOTVBfRVJSX05PRVJST1IgKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJpcXVlcnkiLCAiRXJyb3IgaW4gcGFja2V0OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc25tcF9lcnJzdHJpbmcocmVzcG9uc2UtPmVycnN0YXQpKSk7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogSWYgdGhlIHJlcXVlc3QgZmFpbGVkLCB0aGVuIHJlbW92ZSB0aGUKICAgICAgICAgICAgICAqICBvZmZlbmRpbmcgdmFyYmluZCBhbmQgdHJ5IGFnYWluLgpAQCAtMTI2MSwzMCArMTMyMiwzOSBAQAogICAgICAgICAgICAgICogICAgICAgTkVUU05NUF9EU19BUFBfRE9OVF9GSVhfUERVUyA/PwogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXQgPSByZXNwb25zZS0+ZXJyc3RhdDsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS0+ZXJyaW5kZXggIT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImlxdWVyeTpyZXN1bHQiLCAiRmFpbGVkIG9iamVjdDpcbiIpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvdW50ID0gMSwgdnRtcCA9IHJlc3BvbnNlLT52YXJpYWJsZXM7CisgICAgICAgICAgICAgICAgICAgICB2dG1wICYmIGNvdW50ICE9IHJlc3BvbnNlLT5lcnJpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgIHZ0bXAgPSB2dG1wLT5uZXh0X3ZhcmlhYmxlLCBjb3VudCsrKQorICAgICAgICAgICAgICAgICAgICAvKkVNUFRZKi87CisgICAgICAgICAgICAgICAgaWYgKHZ0bXApCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVkFSKCgiaXF1ZXJ5OnJlc3VsdCIsIHZ0bXApKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoImlxdWVyeTpyZXN1bHQiLCAiXG4iKSk7CisgICAgICAgICAgICB9CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgaWYgKHJlcXVlc3QgIT0gU05NUF9NU0dfU0VUICYmCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPmVycmluZGV4ICE9IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaXF1ZXJ5IiwgInJldHJ5aW5nIHF1ZXJ5ICglZCwgJWxkKVxuIiwgcmV0LCByZXNwb25zZS0+ZXJyaW5kZXgpKTsKICAgICAgICAgICAgICAgICBwZHUgPSBzbm1wX2ZpeF9wZHUoIHJlc3BvbnNlLCByZXF1ZXN0ICk7CiAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdSggcmVzcG9uc2UgKTsKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgaWYgKCBwZHUgIT0gTlVMTCApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7CiAgICAgICAgICAgICB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yICh2YjEgPSByZXNwb25zZS0+dmFyaWFibGVzLCB2YjIgPSBsaXN0OwogICAgICAgICAgICAgICAgICB2YjE7CiAgICAgICAgICAgICAgICAgIHZiMSA9IHZiMS0+bmV4dF92YXJpYWJsZSwgIHZiMiA9IHZiMi0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVkFSKCgiaXF1ZXJ5OnJlc3VsdCIsIHZiMSkpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaXF1ZXJ5OnJlc3VsdHMiLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgaWYgKCAhdmIyICkgewogICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2dG1wID0gdmIyLT5uZXh0X3ZhcmlhYmxlOwotICAgICAgICAgICAgICAgIC8qIGZyZWUgb2xkIGRhdGEgYmVmb3JlIG92ZXJ3cml0aW5nICovCi0gICAgICAgICAgICAgICAgaWYgKHZiMi0+dmFsLnN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAodmIyLT52YWwuc3RyaW5nICE9ICZ2YjItPmJ1ZlswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh2YjItPnZhbC5zdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmIyLT52YWwuc3RyaW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyX2ludGVybmFscyggdmIyICk7CiAgICAgICAgICAgICAgICAgc25tcF9jbG9uZV92YXIoIHZiMSwgdmIyICk7CiAgICAgICAgICAgICAgICAgdmIyLT5uZXh0X3ZhcmlhYmxlID0gdnRtcDsKICAgICAgICAgICAgIH0KQEAgLTEzMTIsMTAgKzEzODIsMTIgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50IG5ldHNubXBfcXVlcnlfc2V0KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNlc3Npb24pewogICAgIHJldHVybiBfcXVlcnkoIGxpc3QsIFNOTVBfTVNHX1NFVCwgc2Vzc2lvbiApOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIEEgd2FsayBuZWVkcyBhIGJpdCBtb3JlIHdvcmsuCkBAIC0xMzcxLDQgKzE0NDMsNDQ4IEBACiAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZiICk7CiAgICAgcmV0dXJuIHJldDsKIH0KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3RhdGUgbWFjaGluZQorICoKKyAqLworaW50CituZXRzbm1wX3N0YXRlX21hY2hpbmVfcnVuKCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0KQoreworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpjdXJyZW50LCAqbGFzdDsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPnN0ZXBzLCBTTk1QRVJSX0dFTkVSUiApOworICAgIGxhc3QgPSBjdXJyZW50ID0gaW5wdXQtPnN0ZXBzOworCisgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW4iLCAic3RhcnRpbmcgc3RlcDogJXNcbiIsIGN1cnJlbnQtPm5hbWUpKTsKKworICAgIHdoaWxlIChjdXJyZW50KSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogbG9nIHN0ZXAgYW5kIGNoZWNrIGZvciByZXF1aXJlZCBkYXRhCisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1biIsICJhdCBzdGVwOiAlc1xuIiwgY3VycmVudC0+bmFtZSkpOworICAgICAgICBpZiAoTlVMTCA9PSBjdXJyZW50LT5ydW4pIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuIiwgIm5vIHJ1biBzdGVwXG4iKSk7CisgICAgICAgICAgICBjdXJyZW50LT5yZXN1bHQgPSBsYXN0LT5yZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHJ1biBzdGVwCisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1biIsICJydW5uaW5nIHN0ZXA6ICVzXG4iLCBjdXJyZW50LT5uYW1lKSk7CisgICAgICAgIGN1cnJlbnQtPnJlc3VsdCA9ICgqY3VycmVudC0+cnVuKSggaW5wdXQsIGN1cnJlbnQgKTsKKyAgICAgICAgKytpbnB1dC0+c3RlcHNfc29fZmFyOworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogbG9nIHJlc3VsdCBhbmQgbW92ZSB0byBuZXh0IHN0ZXAKKyAgICAgICAgICovCisgICAgICAgIGlucHV0LT5sYXN0X3J1biA9IGN1cnJlbnQ7CisgICAgICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuOnJlc3VsdCIsICJzdGVwICVzIHJldHVybmVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5hbWUsIGN1cnJlbnQtPnJlc3VsdCkpOworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTID09IGN1cnJlbnQtPnJlc3VsdCkKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5vbl9zdWNjZXNzOworICAgICAgICBlbHNlIGlmIChTTk1QRVJSX0FCT1JUID09IGN1cnJlbnQtPnJlc3VsdCkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW46cmVzdWx0IiwgIkFCT1JUIGZyb20gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5hbWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5vbl9lcnJvcjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJ1biBjbGVhbnVwCisgICAgICovCisgICAgaWYgKChpbnB1dC0+Y2xlYW51cCkgJiYgKGlucHV0LT5jbGVhbnVwLT5ydW4pKQorICAgICAgICAoKmlucHV0LT5jbGVhbnVwLT5ydW4pKCBpbnB1dCwgaW5wdXQtPmxhc3RfcnVuICk7CisKKyAgICByZXR1cm4gaW5wdXQtPmxhc3RfcnVuLT5yZXN1bHQ7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX0NSRUFURQorLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcm93IGNyZWF0ZSBzdGF0ZSBtYWNoaW5lIHN0ZXBzCisgKgorICovCit0eXBlZGVmIHN0cnVjdCByb3djcmVhdGVfc3RhdGVfcyB7CisKKyAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgICpzZXNzaW9uOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgKnZhcnM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcm93X3N0YXR1c19pbmRleDsKK30gcm93Y3JlYXRlX3N0YXRlOworCitzdGF0aWMgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK19nZXRfdmJfbnVtKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgaW50IGluZGV4KQoreworICAgIGZvciAoOyB2YXJzICYmIGluZGV4ID4gMDsgLS1pbmRleCkKKyAgICAgICAgdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGU7CisKKyAgICBpZiAoIXZhcnMgfHwgaW5kZXggPiAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICByZXR1cm4gdmFyczsKK30KKworCisvKgorICogY2xlYW51cAorICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfY2xlYW51cChuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9BQk9SVCApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0FCT1JUICk7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJfcm93X3N0YXR1c19zdGF0ZV9jbGVhbnVwLCBsYXN0IHJ1biBzdGVwIHdhcyAlcyByYyAlZFxuIiwKKyAgICAgICAgICAgICAgIHN0ZXAtPm5hbWUsIHN0ZXAtPnJlc3VsdCkpOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworICAgIGlmIChjdHggJiYgY3R4LT52YXJzKQorICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCggY3R4LT52YXJzICk7CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKgorICogc2VuZCBhIHJlcXVlc3QgdG8gYWN0aXZhdGUgdGhlIHJvdworICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfYWN0aXZhdGUobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqcnNfdmFyLCAqdmFyID0gTlVMTDsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgIHJjLCB2YWwgPSBSU19BQ1RJVkU7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICAvKgorICAgICAqIGp1c3Qgc2VuZCB0aGUgcm93c3RhdHVzIHZhcmJpbmQKKyAgICAgKi8KKyAgICByc192YXIgPSBfZ2V0X3ZiX251bShjdHgtPnZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYocnNfdmFyLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICB2YXIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXIsIHJzX3Zhci0+bmFtZSwgcnNfdmFyLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzX3Zhci0+dHlwZSwgJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCB2YXIsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICAvKgorICAgICAqIHNlbmQgc2V0CisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFyLCBjdHgtPnNlc3Npb24gKTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcik7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzZW5kIGVhY2ggbm9uLXJvdyBzdGF0dXMgY29sdW1uLCBvbmUgYXQgYSB0aW1lCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9zaW5nbGVfdmFsdWVfY29scyhuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsICp0bXBfbmV4dCwgKnJvd19zdGF0dXM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYyA9IFNOTVBFUlJfR0VORVJSOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgcm93X3N0YXR1cyA9IF9nZXRfdmJfbnVtKGN0eC0+dmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4KTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVihyb3dfc3RhdHVzLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKgorICAgICAqIHRyeSBvbmUgdmFyYmluZCBhdCBhIHRpbWUKKyAgICAgKi8KKyAgICBmb3IgKHZhciA9IGN0eC0+dmFyczsgdmFyOyB2YXIgPSB2YXItPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgaWYgKHZhciA9PSByb3dfc3RhdHVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdG1wX25leHQgPSB2YXItPm5leHRfdmFyaWFibGU7CisgICAgICAgIHZhci0+bmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2VuZCBzZXQKKyAgICAgICAgICovCisgICAgICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhciwgY3R4LT5zZXNzaW9uICk7CisgICAgICAgIHZhci0+bmV4dF92YXJpYWJsZSA9IHRtcF9uZXh0OworICAgICAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisgICAgICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzZW5kIGFsbCB2YWx1ZXMgZXhjZXB0IHJvdyBzdGF0dXMKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX211bHRpcGxlX3ZhbHVlc19jb2xzKG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICp2YXIsICpsYXN0LCAqcm93X3N0YXR1czsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgdmFycyA9IHNubXBfY2xvbmVfdmFyYmluZChjdHgtPnZhcnMpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZhcnMsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIHJvd19zdGF0dXMgPSBfZ2V0X3ZiX251bSh2YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXgpOworICAgIGlmIChOVUxMID09IHJvd19zdGF0dXMpIHsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlbW92ZSByb3cgc3RhdHVzIHZhcmJpbmQKKyAgICAgKi8KKyAgICBpZiAocm93X3N0YXR1cyA9PSB2YXJzKSB7CisgICAgICAgIHZhcnMgPSByb3dfc3RhdHVzLT5uZXh0X3ZhcmlhYmxlOworICAgICAgICByb3dfc3RhdHVzLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAobGFzdD12YXJzLCB2YXI9bGFzdC0+bmV4dF92YXJpYWJsZTsKKyAgICAgICAgICAgICB2YXI7CisgICAgICAgICAgICAgbGFzdD12YXIsIHZhciA9IHZhci0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICAgICAgaWYgKHZhciA9PSByb3dfc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgbGFzdC0+bmV4dF92YXJpYWJsZSA9IHZhci0+bmV4dF92YXJpYWJsZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBzbm1wX2ZyZWVfdmFyKHJvd19zdGF0dXMpOworCisgICAgLyoKKyAgICAgKiBzZW5kIHNldAorICAgICAqLworICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhcnMsIGN0eC0+c2Vzc2lvbiApOworICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworCisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzZW5kIGEgY3JlYXRlQW5kV2FpdCByZXF1ZXN0IHdpdGggbm8gb3RoZXIgdmFsdWVzCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9zaW5nbGVfdmFsdWVfY3JlYXRlQW5kV2FpdChuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSBOVUxMLCAqcnNfdmFyOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgcmMsIHZhbCA9IFJTX0NSRUFURUFORFdBSVQ7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICByc192YXIgPSBfZ2V0X3ZiX251bShjdHgtPnZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYocnNfdmFyLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICB2YXIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXIsIHJzX3Zhci0+bmFtZSwgcnNfdmFyLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzX3Zhci0+dHlwZSwgJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZhciwgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyoKKyAgICAgKiBzZW5kIHNldAorICAgICAqLworICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhciwgY3R4LT5zZXNzaW9uICk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogc2VuZCBhIGNyZWF0QW5kV2FpdCByZXF1ZXN0IHdpdGggYWxsIHZhbHVlcworICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRXYWl0KG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqcnNfdmFyOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICB2YXJzID0gc25tcF9jbG9uZV92YXJiaW5kKGN0eC0+dmFycyk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmFycywgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgcm93IHN0YXRzIGlzIGNyZWF0ZUFuZFdhaXQKKyAgICAgKi8KKyAgICByc192YXIgPSBfZ2V0X3ZiX251bSh2YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXgpOworICAgIGlmIChOVUxMID09IHJzX3ZhcikgeworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIGlmICgqcnNfdmFyLT52YWwuaW50ZWdlciAhPSBSU19DUkVBVEVBTkRXQUlUKQorICAgICAgICAqcnNfdmFyLT52YWwuaW50ZWdlciA9IFJTX0NSRUFURUFORFdBSVQ7CisKKyAgICAvKgorICAgICAqIHNlbmQgc2V0CisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFycywgY3R4LT5zZXNzaW9uICk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKworICAgIHJldHVybiByYzsKK30KKworCisvKioKKyAqIHNlbmQgY3JlYXRlQW5kR28gcmVxdWVzdCB3aXRoIGFsbCB2YWx1ZXMKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kR28obmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqcnNfdmFyOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICB2YXJzID0gc25tcF9jbG9uZV92YXJiaW5kKGN0eC0+dmFycyk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmFycywgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgcm93IHN0YXRzIGlzIGNyZWF0ZUFuZEdvCisgICAgICovCisgICAgcnNfdmFyID0gX2dldF92Yl9udW0odmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4ICsgMSk7CisgICAgaWYgKE5VTEwgPT0gcnNfdmFyKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgaWYgKCpyc192YXItPnZhbC5pbnRlZ2VyICE9IFJTX0NSRUFURUFOREdPKQorICAgICAgICAqcnNfdmFyLT52YWwuaW50ZWdlciA9IFJTX0NSRUFURUFOREdPOworCisgICAgLyoKKyAgICAgKiBzZW5kIHNldAorICAgICAqLworICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhcnMsIGN0eC0+c2Vzc2lvbiApOworICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworCisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHJvdyBhcGkKKyAqCisgKi8KK2ludAorbmV0c25tcF9yb3dfY3JlYXRlKG5ldHNubXBfc2Vzc2lvbiAqc2VzcywgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLAorICAgICAgICAgICAgICAgICAgIGludCByb3dfc3RhdHVzX2luZGV4KQoreworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX2NsZWFudXAgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX2NsZWFudXAiLCAwLCBfcm93X3N0YXR1c19zdGF0ZV9jbGVhbnVwLAorICAgICAgICAgIDAsIE5VTEwsIE5VTEwsIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19hY3RpdmF0ZSA9CisgICAgICAgIHsgInJvd19jcmVhdGVfYWN0aXZhdGUiLCAwLCBfcm93X3N0YXR1c19zdGF0ZV9hY3RpdmF0ZSwKKyAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfc3ZfY29scyA9CisgICAgICAgIHsgInJvd19jcmVhdGVfc2luZ2xlX3ZhbHVlX2NvbHMiLCAwLAorICAgICAgICAgIF9yb3dfc3RhdHVzX3N0YXRlX3NpbmdsZV92YWx1ZV9jb2xzLCAwLCAmcmNfYWN0aXZhdGUsTlVMTCwgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX212X2NvbHMgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX211bHRpcGxlX3ZhbHVlc19jb2xzIiwgMCwKKyAgICAgICAgICBfcm93X3N0YXR1c19zdGF0ZV9tdWx0aXBsZV92YWx1ZXNfY29scywgMCwgJnJjX2FjdGl2YXRlLCAmcmNfc3ZfY29scywKKyAgICAgICAgICAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfc3ZfY2F3ID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9zaW5nbGVfdmFsdWVfY3JlYXRlQW5kV2FpdCIsIDAsCisgICAgICAgICAgX3Jvd19zdGF0dXNfc3RhdGVfc2luZ2xlX3ZhbHVlX2NyZWF0ZUFuZFdhaXQsIDAsICZyY19tdl9jb2xzLCBOVUxMLAorICAgICAgICAgIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19hdl9jYXcgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kV2FpdCIsIDAsCisgICAgICAgICAgX3Jvd19zdGF0dXNfc3RhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRXYWl0LCAwLCAmcmNfYWN0aXZhdGUsCisgICAgICAgICAgJnJjX3N2X2NhdywgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX2F2X2NhZyA9CisgICAgICAgIHsgInJvd19jcmVhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRHbyIsIDAsCisgICAgICAgICAgX3Jvd19zdGF0dXNfc3RhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRHbywgMCwgTlVMTCwgJnJjX2F2X2NhdywgMCwKKyAgICAgICAgICBOVUxMIH07CisKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgc21faW5wdXQgPSB7ICJyb3dfY3JlYXRlX21hY2hpbmUiLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJjX2F2X2NhZywgJnJjX2NsZWFudXAgfTsKKyAgICByb3djcmVhdGVfc3RhdGUgc3RhdGU7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc2VzcywgU05NUEVSUl9HRU5FUlIpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCB2YXJzLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICBzdGF0ZS5zZXNzaW9uID0gc2VzczsKKyAgICBzdGF0ZS52YXJzID0gdmFyczsKKworICAgIHN0YXRlLnJvd19zdGF0dXNfaW5kZXggPSByb3dfc3RhdHVzX2luZGV4OworICAgIHNtX2lucHV0LmlucHV0X2NvbnRleHQgPSAmc3RhdGU7CisKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfcnVuKCAmc21faW5wdXQpOworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19DUkVBVEUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCiAvKiogQH0gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9kZWJ1Zy5jIGIvc25tcGxpYi9zbm1wX2RlYnVnLmMKaW5kZXggZDFiNDUzOC4uMjdjZTIzMyAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2RlYnVnLmMKKysrIGIvc25tcGxpYi9zbm1wX2RlYnVnLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTEzLDE0ICsxNCw3IEBACiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NUREFSR19ICiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00Miw1MSArMzYsNTggQEAKICNkZWZpbmUgU05NUF9ERUJVR19BQ1RJVkUgICAgICAgICAgICAgMQogI2RlZmluZSBTTk1QX0RFQlVHX0VYQ0xVREVEICAgICAgICAgICAyCiAKKyNpZm5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKKwogc3RhdGljIGludCAgICAgIGRvZGVidWcgPSBORVRTTk1QX0FMV0FZU19ERUJVRzsKIGludCAgICAgICAgICAgICBkZWJ1Z19udW1fdG9rZW5zID0gMDsKLWludCAgICAgICAgICAgICBkZWJ1Z19udW1fZXhjbHVkZWQgPSAwOwogc3RhdGljIGludCAgICAgIGRlYnVnX3ByaW50X2V2ZXJ5dGhpbmcgPSAwOwogCiBuZXRzbm1wX3Rva2VuX2Rlc2NyIGRiZ190b2tlbnNbTUFYX0RFQlVHX1RPS0VOU107CiAKLSNpZmRlZiBORVRTTk1QX0RFQlVHX1NUQVRTCi1uZXRzbm1wX2NvbnRhaW5lciAgKmRiZ19zdGF0cyA9IE5VTEw7Ci0gc3RhdGljIGludCBfZGVidWdfY21wKCBjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocyApOwotIHN0YXRpYyBpbnQgX3NhdmVfZGVidWdfc3RhdChuZXRzbm1wX3Rva2VuX2Rlc2NyICp0Yiwgdm9pZCAqdHlwZSk7Ci0gc3RhdGljIGludCBfZGVidWdfc3RhdHNfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKLSNlbmRpZgotCiAvKgotICogaW5kZW50IGRlYnVnZ2luZzogIHByb3ZpZGUgYSBzcGFjZSBwYWRkZWQgc2VjdGlvbiB0byByZXR1cm4gYW4gaW5kZW50IGZvciAKKyAqIE51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGRlYnVnIG91dHB1ci4gVmFsaWQgcmFuZ2UgaXMgWzAsSU5UX01BWF0KICAqLwotc3RhdGljIGludCAgICAgIGRlYnVnaW5kZW50ID0gMDsKLSNkZWZpbmUgSU5ERU5UTUFYIDgwCi1zdGF0aWMgY2hhciAgICAgZGVidWdpbmRlbnRjaGFyc1tdID0KLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOworc3RhdGljIGludCBkZWJ1Z2luZGVudCA9IDA7CiAKLWNoYXIgICAgICAgICAgICoKK2ludAorZGVidWdfaW5kZW50X2dldCh2b2lkKQoreworICAgIHJldHVybiBkZWJ1Z2luZGVudDsKK30KKworY29uc3QgY2hhcioKIGRlYnVnX2luZGVudCh2b2lkKQogewotICAgIHJldHVybiBkZWJ1Z2luZGVudGNoYXJzOworI2RlZmluZSBTUEFDRVMgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFwKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgIGlmICgoc2l6ZW9mKFNQQUNFUykgLSAxKSA8ICh1bnNpZ25lZCBpbnQpZGVidWdpbmRlbnQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRvbyBkZWVwIGluZGVudGF0aW9uIGZvciBkZWJ1Z19pbmRlbnQuICIKKyAgICAgICAgICAgICAgICAgIkNvbnNpZGVyIHVzaW5nIFwiJSUqc1wiLCBkZWJ1Z19pbmRlbnRfZ2V0KCksIFwiXCIgaW5zdGVhZC4iKTsKKyAgICAgICAgcmV0dXJuIFNQQUNFUzsKKyAgICB9CisgICAgcmV0dXJuIFNQQUNFUyArIHNpemVvZihTUEFDRVMpIC0gMSAtIGRlYnVnaW5kZW50OworI3VuZGVmIFNQQUNFUwogfQogCiB2b2lkCiBkZWJ1Z19pbmRlbnRfYWRkKGludCBhbW91bnQpCiB7Ci0gICAgaWYgKGRlYnVnaW5kZW50ICsgYW1vdW50ID49IDAgJiYgZGVidWdpbmRlbnQgKyBhbW91bnQgPCA4MCkgewotICAgICAgICBkZWJ1Z2luZGVudGNoYXJzW2RlYnVnaW5kZW50XSA9ICcgJzsKLSAgICAgICAgZGVidWdpbmRlbnQgKz0gYW1vdW50OwotICAgICAgICBkZWJ1Z2luZGVudGNoYXJzW2RlYnVnaW5kZW50XSA9ICdcMCc7Ci0gICAgfQorICAgIGlmICgtZGVidWdpbmRlbnQgPD0gYW1vdW50ICYmIGFtb3VudCA8PSBJTlRfTUFYIC0gZGVidWdpbmRlbnQpCisJZGVidWdpbmRlbnQgKz0gYW1vdW50OwogfQogCitORVRTTk1QX0lNUE9SVCB2b2lkCitkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICp0b2tlbnMpOworCiB2b2lkCiBkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICp0b2tlbnMpCiB7CiAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKHRva2Vucyk7CiB9CiAKK05FVFNOTVBfSU1QT1JUIHZvaWQKK2RlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqbGluZSk7CisKIHZvaWQKIGRlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqbGluZSkKIHsKQEAgLTk0LDQ3ICs5NSwxMyBAQAogfQogCiB2b2lkCi1zbm1wX2RlYnVnX2luaXQodm9pZCkKLXsKLSAgICBkZWJ1Z2luZGVudGNoYXJzWzBdID0gJ1wwJzsgLyogemVybyBvdXQgdGhlIGRlYnVnZ2luZyBpbmRlbnQgYXJyYXkuICovCi0gICAgLyoKLSAgICAgKiBIbW1tLi4uLgotICAgICAqICAgdGhpcyAiaW5pdCIgcm91dGluZSBzZWVtcyB0byBiZSBjYWxsZWQgKmFmdGVyKiBwcm9jZXNzaW5nCi0gICAgICogICB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuICAgU28gd2UgY2FuJ3QgY2xlYXIgdGhlIGRlYnVnCi0gICAgICogICB0b2tlbiBhcnJheSBoZXJlLCBhbmQgd2lsbCBqdXN0IGhhdmUgdG8gcmVseSBvbiBpdCBiZWluZwotICAgICAqICAgaW5pdGlhbGlzZWQgdG8gMCBhdXRvbWF0aWNhbGx5LgotICAgICAqIFNvIG11Y2ggZm9yIHRyeWluZyB0byBwcm9ncmFtIHJlc3BvbnNpYmx5IDotKQotICAgICAqLwotLyogIG1lbXNldChkYmdfdG9rZW5zLCAwLCBNQVhfREVCVUdfVE9LRU5TKnNpemVvZihzdHJ1Y3QgdG9rZW5fZHNjcikpOyAgKi8KLSAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCJzbm1wIiwgImRvRGVidWdnaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoMXwwKSIpOwotICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoInNubXAiLCAiZGVidWdUb2tlbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2VucywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b2tlblssdG9rZW4uLi5dIik7Ci0KLSNpZmRlZiBORVRTTk1QX0RFQlVHX1NUQVRTCi0gICAgLyoKLSAgICAgKiBkZWJ1ZyBzdGF0cwotICAgICAqLwotICAgIGRiZ19zdGF0cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImRlYnVnX2V4Y2x1ZGU6dGFibGVfY29udGFpbmVyIik7Ci0gICAgaWYgKE5VTEwgIT0gZGJnX3N0YXRzKSB7Ci0gICAgICAgIGRiZ19zdGF0cy0+Y29tcGFyZSA9IF9kZWJ1Z19jbXA7Ci0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGVidWdfc3RhdHNfY2FsbGJhY2ssIGRiZ19zdGF0cywgMTAyNCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQKLWRlYnVnX3JlZ2lzdGVyX3Rva2VucyhjaGFyICp0b2tlbnMpCitkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqdG9rZW5zKQogewogICAgIGNoYXIgICAgICAgICAgICpuZXdwLCAqY3A7CiAgICAgY2hhciAgICAgICAgICAgKnN0ID0gTlVMTDsKICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwogCi0gICAgaWYgKHRva2VucyA9PSAwIHx8ICp0b2tlbnMgPT0gMCkKKyAgICBpZiAodG9rZW5zID09IE5VTEwgfHwgKnRva2VucyA9PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBuZXdwID0gc3RyZHVwKHRva2Vucyk7ICAgICAgLyogc3RydG9rX3IgbWVzc2VzIGl0IHVwICovCkBAIC0xNjQsMTcgKzEzMSwxNiBAQAogICAgIGZyZWUobmV3cCk7CiB9CiAKLQotLyogCisvKgogICogUHJpbnQgYWxsIHJlZ2lzdGVyZWQgdG9rZW5zIGFsb25nIHdpdGggdGhlaXIgY3VycmVudCBzdGF0dXMKICAqLwotdm9pZCAKK3ZvaWQKIGRlYnVnX3ByaW50X3JlZ2lzdGVyZWRfdG9rZW5zKHZvaWQpIHsKICAgICBpbnQgaTsKIAogICAgIHNubXBfbG9nKExPR19JTkZPLCAiJWQgdG9rZW5zIHJlZ2lzdGVyZWQgOlxuIiwgZGVidWdfbnVtX3Rva2Vucyk7CiAgICAgZm9yIChpPTA7IGk8ZGVidWdfbnVtX3Rva2VuczsgaSsrKSB7Ci0gICAgICAgIHNubXBfbG9nKCBMT0dfSU5GTywgIiVkKSAlcyA6ICVkXG4iLCAKKyAgICAgICAgc25tcF9sb2coIExPR19JTkZPLCAiJWQpICVzIDogJWRcbiIsCiAgICAgICAgICAgICAgICAgIGksIGRiZ190b2tlbnMgW2ldLnRva2VuX25hbWUsIGRiZ190b2tlbnMgW2ldLmVuYWJsZWQpOwogICAgIH0KIH0KQEAgLTE5Nyw3ICsxNjMsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvcihpPTA7IGkgPCBkZWJ1Z19udW1fdG9rZW5zOyBpKyspIHsKICAgICAgICAgICAgIGlmIChkYmdfdG9rZW5zW2ldLnRva2VuX25hbWUgJiYKLSAgICAgICAgICAgICAgICBzdHJuY21wKGRiZ190b2tlbnNbaV0udG9rZW5fbmFtZSwgdG9rZW4sIAorICAgICAgICAgICAgICAgIHN0cm5jbXAoZGJnX3Rva2Vuc1tpXS50b2tlbl9uYW1lLCB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihkYmdfdG9rZW5zW2ldLnRva2VuX25hbWUpKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZGJnX3Rva2Vuc1tpXS5lbmFibGVkID0gU05NUF9ERUJVR19BQ1RJVkU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKQEAgLTIzMywxMyArMTk5LDEyIEBACiAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogfQogCi0KIC8qCiAgKiBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKGNoYXIgKlRPS0VOKToKLSAqIAorICoKICAqIHJldHVybnMgU05NUEVSUl9TVUNDRVNTCiAgKiBvciBTTk1QRVJSX0dFTkVSUgotICogCisgKgogICogaWYgVE9LRU4gaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgZGVidWdnaW5nIHN1cHBvcnQgaXMgdHVybmVkIG9uLgogICovCiBpbnQKQEAgLTI0OCwyMSArMjEzLDE2IEBACiAgICAgaW50ICAgICAgICAgICAgIGksIHJjOwogCiAgICAgLyoKLSAgICAgKiBkZWJ1Z2dpbmcgZmxhZyBpcyBvbiBvciBvZmYgCisgICAgICogZGVidWdnaW5nIGZsYWcgaXMgb24gb3Igb2ZmCiAgICAgICovCiAgICAgaWYgKCFkb2RlYnVnKQogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAKICAgICBpZiAoZGVidWdfbnVtX3Rva2VucyA9PSAwIHx8IGRlYnVnX3ByaW50X2V2ZXJ5dGhpbmcpIHsKICAgICAgICAgLyoKLSAgICAgICAgICogbm8gdG9rZW5zIHNwZWNpZmllZCwgcHJpbnQgZXZlcnl0aGluZyAKLSAgICAgICAgICogKHVubGVzcyBzb21ldGhpbmcgbWlnaHQgYmUgZXhjbHVkZWQpCisgICAgICAgICAqIG5vIHRva2VucyBzcGVjaWZpZWQsIHByaW50IGV2ZXJ5dGhpbmcKICAgICAgICAgICovCi0gICAgICAgIGlmIChkZWJ1Z19udW1fZXhjbHVkZWQpIHsKLSAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOyAvKiAhIGZvdW5kID0gc3VjY2VzcyAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJjID0gU05NUEVSUl9HRU5FUlI7IC8qICEgZm91bmQgPSBlcnIgKi8KQEAgLTI3OSw1MyArMjM5LDE5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyAvKiBleGNsdWRlZCAqLwogICAgICAgICB9CiAgICAgfQotCi0jaWZkZWYgTkVUU05NUF9ERUJVR19TVEFUUwotICAgIGlmICgoU05NUEVSUl9TVUNDRVNTID09IHJjKSAmJiAoTlVMTCAhPSBkYmdfc3RhdHMpKSB7Ci0gICAgICAgIG5ldHNubXBfdG9rZW5fZGVzY3IgdGQsICpmb3VuZDsKLQotICAgICAgICB0ZC50b2tlbl9uYW1lID0gdG9rZW47Ci0gICAgICAgIGZvdW5kID0gQ09OVEFJTkVSX0ZJTkQoZGJnX3N0YXRzLCAmdGQpOwotICAgICAgICBpZiAoTlVMTCA9PSBmb3VuZCkgewotICAgICAgICAgICAgZm91bmQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdG9rZW5fZGVzY3IpOwotICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBmb3VuZCk7Ci0gICAgICAgICAgICBmb3VuZC0+dG9rZW5fbmFtZSA9IHN0cmR1cCh0b2tlbik7Ci0gICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCgwID09IGZvdW5kLT5lbmFibGVkKTsKLSAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoZGJnX3N0YXRzLCBmb3VuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgKytmb3VuZC0+ZW5hYmxlZDsKLSAgICAvKiAgc25tcF9sb2coTE9HX0VSUiwidG9rICVzLCAlZCBoaXRzXG4iLCB0b2tlbiwgZm91bmQtPmVuYWJsZWQpOyAgKi8KLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiByYzsKIH0KIAogdm9pZAotI2lmIEhBVkVfU1REQVJHX0gKIGRlYnVnbXNnKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSNlbHNlCi1kZWJ1Z21zZyh2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKLSAgICB2YV9saXN0ICAgICAgICAgZGVidWdhcmdzOwotCi0jaWYgSEFWRV9TVERBUkdfSAotICAgIHZhX3N0YXJ0KGRlYnVnYXJncywgZm9ybWF0KTsKLSNlbHNlCi0gICAgY29uc3QgY2hhciAgICAgKmZvcm1hdDsKLSAgICBjb25zdCBjaGFyICAgICAqdG9rZW47Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRva2VuID0gdmFfYXJnKGRlYnVnYXJncywgY29uc3QgY2hhciAqKTsKLSAgICBmb3JtYXQgPSB2YV9hcmcoZGVidWdhcmdzLCBjb25zdCBjaGFyICopOyAgIC8qID8/PyAqLwotI2VuZGlmCi0KICAgICBpZiAoZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCh0b2tlbikgPT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgIHNubXBfdmxvZyhMT0dfREVCVUcsIGZvcm1hdCwgZGVidWdhcmdzKTsKKwl2YV9saXN0ICAgICAgICAgZGVidWdhcmdzOworCisJdmFfc3RhcnQoZGVidWdhcmdzLCBmb3JtYXQpOworCXNubXBfdmxvZyhMT0dfREVCVUcsIGZvcm1hdCwgZGVidWdhcmdzKTsKKwl2YV9lbmQoZGVidWdhcmdzKTsKICAgICB9Ci0gICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9CiAKIHZvaWQKQEAgLTQxNiwxMiArMzQyLDEyIEBACiAgICAgICAgIHJjID0gc3ByaW50X3JlYWxsb2Nfb2JqaWQoJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLCAxLCB0aGVvaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3N1YmlkLTEpOyAgLyogQWRqdXN0IGZvciBDJ3MgMC1iYXNlZCBhcnJheSBpbmRleGluZyAqLwogICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCAiLiVsdS0tJWx1IiwgdGhlb2lkW3Zhcl9zdWJpZCAtIDFdLAotICAgICAgICAgICAgICAgICAgICByYW5nZV91Ym91bmQpOworICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsICIuJSIgTkVUU05NUF9QUklvICJ1LS0lIiBORVRTTk1QX1BSSW8gInUiLAorICAgICAgICAgICAgICAgICAgICB0aGVvaWRbdmFyX3N1YmlkIC0gMV0sIHJhbmdlX3Vib3VuZCk7CiAgICAgICAgICAgICByYyA9IHNubXBfY3N0cmNhdCgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsIHRtcGJ1Zik7CiAgICAgICAgICAgICBpZiAocmMpIHsKICAgICAgICAgICAgICAgICBmb3IgKGkgPSB2YXJfc3ViaWQ7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIi4lbHUiLCB0aGVvaWRbaV0pOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIi4lIiBORVRTTk1QX1BSSW8gInUiLCB0aGVvaWRbaV0pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXNubXBfY3N0cmNhdCgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsIHRtcGJ1ZikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00MzgsNyArMzY0LDcgQEAKIH0KIAogdm9pZAotZGVidWdtc2dfaGV4KGNvbnN0IGNoYXIgKnRva2VuLCB1X2NoYXIgKiB0aGVkYXRhLCBzaXplX3QgbGVuKQorZGVidWdtc2dfaGV4KGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhLCBzaXplX3QgbGVuKQogewogICAgIHVfY2hhciAgICAgICAgICpidWYgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gMCwgb3V0X2xlbiA9IDA7CkBAIC00NjAsNyArMzg2LDcgQEAKIH0KIAogdm9pZAotZGVidWdtc2dfaGV4dGxpKGNvbnN0IGNoYXIgKnRva2VuLCB1X2NoYXIgKiB0aGVkYXRhLCBzaXplX3QgbGVuKQorZGVidWdtc2dfaGV4dGxpKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhLCBzaXplX3QgbGVuKQogewogICAgIGNoYXIgICAgICAgICAgICBidWZbU1BSSU5UX01BWF9MRU5dLCB0b2tlbjJbU1BSSU5UX01BWF9MRU5dOwogICAgIHVfY2hhciAgICAgICAgICpiMyA9IE5VTEw7CkBAIC00ODAsNyArNDA2LDcgQEAKICAgICAgICAgICAgICAqIFhYbmV4dCB0d28gbGluZXMgd2VyZSBERUJVR1BSSU5USU5ERU5UKHRva2VuKTsKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc3ByaW50ZihidWYsICJkdW1weCVzIiwgdG9rZW4pOwotICAgICAgICAgICAgZGVidWdtc2coYnVmLCAiJXM6ICVzIiwgdG9rZW4yLCBkZWJ1Z19pbmRlbnQoKSk7CisgICAgICAgICAgICBkZWJ1Z21zZyhidWYsICIlczogJSpzIiwgdG9rZW4yLCBkZWJ1Z19pbmRlbnRfZ2V0KCksICIiKTsKICAgICAgICAgICAgIGlmIChzcHJpbnRfcmVhbGxvY19oZXhzdHJpbmcKICAgICAgICAgICAgICAgICAoJmIzLCAmYjNfbGVuLCAmbzNfbGVuLCAxLCB0aGVkYXRhLCBpbmNyKSkgewogICAgICAgICAgICAgICAgIGlmIChiMyAhPSBOVUxMKSB7CkBAIC01MDAsNTMgKzQyNiwyMyBAQAogfQogCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogZGVidWdtc2d0b2tlbihjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0jZWxzZQotZGVidWdtc2d0b2tlbih2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKICAgICB2YV9saXN0ICAgICAgICAgZGVidWdhcmdzOwogCi0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZhX3N0YXJ0KGRlYnVnYXJncywgZm9ybWF0KTsKLSNlbHNlCi0gICAgY29uc3QgY2hhciAgICAgKnRva2VuOwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0b2tlbiA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKLQogICAgIGRlYnVnbXNnKHRva2VuLCAiJXM6ICIsIHRva2VuKTsKLQogICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQogCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogZGVidWdfY29tYm9fbmMoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotI2Vsc2UKLWRlYnVnX2NvbWJvX25jKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCBmb3JtYXQpOwotI2Vsc2UKLSAgICBjb25zdCBjaGFyICAgICAqZm9ybWF0OwotICAgIGNvbnN0IGNoYXIgICAgICp0b2tlbjsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdG9rZW4gPSB2YV9hcmcoZGVidWdhcmdzLCBjb25zdCBjaGFyICopOwotICAgIGZvcm1hdCA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGNvbnN0IGNoYXIgKik7ICAgLyogPz8/ICovCi0jZW5kaWYKLQogICAgIHNubXBfbG9nKExPR19ERUJVRywgIiVzOiAiLCB0b2tlbik7CiAgICAgc25tcF92bG9nKExPR19ERUJVRywgZm9ybWF0LCBkZWJ1Z2FyZ3MpOwotCiAgICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9CiAKQEAgLTU2NSw2MiArNDYxLDExOCBAQAogICAgIHJldHVybiBkb2RlYnVnOwogfQogCi0jaWZkZWYgTkVUU05NUF9ERUJVR19TVEFUUwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogY29tcGFyZSB0d28gY29udGV4dCBwb2ludGVycyBoZXJlLiBSZXR1cm4gLTEgaWYgbGhzIDwgcmhzLAotICogMCBpZiBsaHMgPT0gcmhzLCBhbmQgMSBpZiBsaHMgPiByaHMuCi0gKi8KLXN0YXRpYyBpbnQKLV9kZWJ1Z19jbXAoIGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzICkKLXsKLSAgICBuZXRzbm1wX3Rva2VuX2Rlc2NyICpkYmdfbCA9IChuZXRzbm1wX3Rva2VuX2Rlc2NyICopbGhzOwotICAgIG5ldHNubXBfdG9rZW5fZGVzY3IgKmRiZ19yID0gKG5ldHNubXBfdG9rZW5fZGVzY3IgKilyaHM7CisjZWxzZSAvKiAhIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCiAKLSAvKiBzbm1wX2xvZyhMT0dfRVJSLCIlcy8lc1xuIixkYmdfbC0+dG9rZW5fbmFtZSwgZGJnX3ItPnRva2VuX25hbWUpOyAqLwotICAgIHJldHVybiBzdHJjbXAoZGJnX2wtPnRva2VuX25hbWUsIGRiZ19yLT50b2tlbl9uYW1lKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1fc2F2ZV9kZWJ1Z19zdGF0KG5ldHNubXBfdG9rZW5fZGVzY3IgKnRiLCB2b2lkICp0eXBlKQotewotICAgIGNoYXIgYnVmWzI1Nl07Ci0KLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZGVidWdfaGl0cyAlcyAlZCIsCi0gICAgICAgICAgICAgdGItPnRva2VuX25hbWUsIHRiLT5lbmFibGVkKTsKLSAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOwotCi0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLXN0YXRpYyBpbnQKLV9kZWJ1Z19zdGF0c19jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKLXsKLSAgICBjaGFyICAgICAgICAgICAgc2VwW10gPQotICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiOwotICAgIGNoYXIgICAgICAgICAgICBidWZbXSA9Ci0gICAgICAgICIjXG4iICIjIGRlYnVnIHN0YXRzXG4iICIjIjsKLSAgICBjaGFyICAgICAgICAgICAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7Ci0KLSAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOwotICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7Ci0KLSAgICAvKgotICAgICAqIHNhdmUgYWxsIHJvd3MKLSAgICAgKi8KLSAgICBDT05UQUlORVJfRk9SX0VBQ0goKG5ldHNubXBfY29udGFpbmVyICopIGNsaWVudGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCi0gICAgICAgICAgICAgICAgICAgICAgIF9zYXZlX2RlYnVnX3N0YXQsIHR5cGUpOwotCi0gICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKLSAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCAiXG4iKTsKLQotICAgIC8qCi0gICAgICogbmV2ZXIgZmFpbHMgCi0gICAgICovCi0gICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKLX0KKyNpZiBfX0dOVUNfXyA+IDIKKyNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisjZWxzZQorI2RlZmluZSBVTlVTRUQKICNlbmRpZgogCitpbnQgZGVidWdfaW5kZW50X2dldCh2b2lkKSB7IHJldHVybiAwOyB9CisKK2NvbnN0IGNoYXIqIGRlYnVnX2luZGVudCh2b2lkKSB7IHJldHVybiAiIjsgfQorCit2b2lkIGRlYnVnX2luZGVudF9hZGQoaW50IGFtb3VudCBVTlVTRUQpIHsgfQorCitORVRTTk1QX0lNUE9SVCB2b2lkCitkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICp0b2tlbnMpOworCit2b2lkCitkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuIFVOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdG9rZW5zIFVOVVNFRCkKK3sgfQorCitORVRTTk1QX0lNUE9SVCB2b2lkCitkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKmxpbmUpOworCit2b2lkCitkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcoY29uc3QgY2hhciAqY29uZmlndG9rZW4gVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUgVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICp0b2tlbnMgVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnX3ByaW50X3JlZ2lzdGVyZWRfdG9rZW5zKHZvaWQpCit7IH0KKworCitpbnQKK2RlYnVnX2VuYWJsZV90b2tlbl9sb2dzIChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQpCit7IHJldHVybiBTTk1QRVJSX0dFTkVSUjsgfQorCitpbnQKK2RlYnVnX2Rpc2FibGVfdG9rZW5fbG9ncyAoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VEKQoreyByZXR1cm4gU05NUEVSUl9HRU5FUlI7IH0KKworaW50CitkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCkKK3sgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyB9CisKK3ZvaWQKK2RlYnVnbXNnKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3QgY2hhciAqZm9ybWF0IFVOVVNFRCwgLi4uKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX29pZChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IG9pZCAqIHRoZW9pZCBVTlVTRUQsCisgICAgICAgICAgICAgc2l6ZV90IGxlbiBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2dfc3Vib2lkKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3Qgb2lkICogdGhlb2lkIFVOVVNFRCwKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ192YXIoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIgVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX29pZHJhbmdlKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3Qgb2lkICogdGhlb2lkIFVOVVNFRCwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gVU5VU0VELCBzaXplX3QgdmFyX3N1YmlkIFVOVVNFRCwKKyAgICAgICAgICAgICAgICAgIG9pZCByYW5nZV91Ym91bmQgVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX2hleChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEgVU5VU0VELAorICAgICAgICAgICAgIHNpemVfdCBsZW4gVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX2hleHRsaShjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEgVU5VU0VELAorICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNndG9rZW4oY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBjaGFyICpmb3JtYXQgVU5VU0VELCAuLi4pCit7IH0KKwordm9pZAorZGVidWdfY29tYm9fbmMoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBjaGFyICpmb3JtYXQgVU5VU0VELCAuLi4pCit7IH0KKwordm9pZAorc25tcF9zZXRfZG9fZGVidWdnaW5nKGludCB2YWwgVU5VU0VEKQoreyB9CisKK2ludAorc25tcF9nZXRfZG9fZGVidWdnaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBORVRTTk1QX05PX0RFQlVHR0lORyAqLworCit2b2lkCitzbm1wX2RlYnVnX2luaXQodm9pZCkKK3sKKyAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCJzbm1wIiwgImRvRGVidWdnaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoMXwwKSIpOworICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoInNubXAiLCAiZGVidWdUb2tlbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2VucywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b2tlblssdG9rZW4uLi5dIik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfZW51bS5jIGIvc25tcGxpYi9zbm1wX2VudW0uYwppbmRleCA1ZjczNWVlLi44YTZiZDM4IDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfZW51bS5jCisrKyBiL3NubXBsaWIvc25tcF9lbnVtLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTIwLDYgKzIxLDE0IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2VudW1fYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2VfZmluZF9mcmVlX3ZhbHVlX2luX3NsaXN0LCBzbm1wX2VudW1fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfZW51bV9zdG9yZV9saXN0LCBzbm1wX2VudW1fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfZW51bV9zdG9yZV9zbGlzdCwgc25tcF9lbnVtX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2VudW1fY2xlYXIsIHNubXBfZW51bV9hbGwpCiAKIHN0cnVjdCBzbm1wX2VudW1fbGlzdF9zdHIgewogICAgIGNoYXIgICAgICAgICAgICpuYW1lOwpAQCAtMzAsNyArMzksNyBAQAogc3RhdGljIHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKipzbm1wX2VudW1fbGlzdHM7CiB1bnNpZ25lZCBpbnQgICAgY3VycmVudF9tYWpfbnVtOwogdW5zaWduZWQgaW50ICAgIGN1cnJlbnRfbWluX251bTsKLXN0cnVjdCBzbm1wX2VudW1fbGlzdF9zdHIgKnNsaXN0c3RvcmFnZTsKK3N0YXRpYyBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3Rfc3RyICpzbGlzdHN0b3JhZ2U7CiAKIHN0YXRpYyB2b2lkCiBmcmVlX2VudW1fbGlzdChzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKmxpc3QpOwpAQCAtNDAsOSArNDksMTEgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgaTsKIAotICAgIGlmICghc25tcF9lbnVtX2xpc3RzKQotICAgICAgICBzbm1wX2VudW1fbGlzdHMgPSAoc3RydWN0IHNubXBfZW51bV9saXN0ICoqKikKLSAgICAgICAgICAgIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNubXBfZW51bV9saXN0ICoqKSAqIFNFX01BWF9JRFMpOworICAgIGlmIChOVUxMICE9IHNubXBfZW51bV9saXN0cykKKyAgICAgICAgcmV0dXJuIFNFX09LOworCisgICAgc25tcF9lbnVtX2xpc3RzID0gKHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKiopCisgICAgICAgIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNubXBfZW51bV9saXN0ICoqKSAqIFNFX01BWF9JRFMpOwogICAgIGlmICghc25tcF9lbnVtX2xpc3RzKQogICAgICAgICByZXR1cm4gU0VfTk9NRU07CiAgICAgY3VycmVudF9tYWpfbnVtID0gU0VfTUFYX0lEUzsKQEAgLTU2LDkgKzY3LDYgQEAKICAgICB9CiAgICAgY3VycmVudF9taW5fbnVtID0gU0VfTUFYX1NVQklEUzsKIAotICAgIGlmICghc2xpc3RzdG9yYWdlKQotICAgICAgICBzbGlzdHN0b3JhZ2UgPSBOVUxMOwotCiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgImVudW0iLCBzZV9yZWFkX2NvbmYsIE5VTEwsIE5VTEwpOwogICAgIHJldHVybiBTRV9PSzsKIH0KQEAgLTc1LDcgKzgzLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHJldHVybiBTRV9OT01FTTsKICAgICB9Ci0KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHNubXBfZW51bV9saXN0cyk7CiAKICAgICBpZiAoc25tcF9lbnVtX2xpc3RzW21ham9yXVttaW5vcl0gIT0gTlVMTCkKICAgICAgICAgcmV0ID0gU0VfQUxSRUFEWV9USEVSRTsKQEAgLTE3Nyw2ICsxODUsNyBAQAogICAgIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGxpbmUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX1NUT1JFX0xJU1QKIHZvaWQKIHNlX3N0b3JlX2xpc3QodW5zaWduZWQgaW50IG1ham9yLCB1bnNpZ25lZCBpbnQgbWlub3IsIGNvbnN0IGNoYXIgKnR5cGUpCiB7CkBAIC0xODUsMTIgKzE5NCwxNCBAQAogICAgIHNucHJpbnRmKHRva2VuLCBzaXplb2YodG9rZW4pLCAiJWQ6JWQiLCBtYWpvciwgbWlub3IpOwogICAgIHNlX3N0b3JlX2VudW1fbGlzdChzZV9maW5kX2xpc3QobWFqb3IsIG1pbm9yKSwgdG9rZW4sIHR5cGUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX1NUT1JFX0xJU1QgKi8KIAogc3RydWN0IHNubXBfZW51bV9saXN0ICoKIHNlX2ZpbmRfbGlzdCh1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBtaW5vcikKIHsKICAgICBpZiAobWFqb3IgPiBjdXJyZW50X21hal9udW0gfHwgbWlub3IgPiBjdXJyZW50X21pbl9udW0pCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gc25tcF9lbnVtX2xpc3RzKTsKIAogICAgIHJldHVybiBzbm1wX2VudW1fbGlzdHNbbWFqb3JdW21pbm9yXTsKIH0KQEAgLTI1NywxOCArMjY4LDE5IEBACiBpbnQKIHNlX2FkZF9wYWlyX3RvX2xpc3Qoc3RydWN0IHNubXBfZW51bV9saXN0ICoqbGlzdCwgY2hhciAqbGFiZWwsIGludCB2YWx1ZSkKIHsKLSAgICBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKmxhc3Rub2RlID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKmxhc3Rub2RlID0gTlVMTCwgKnRtcDsKIAogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuIFNFX0RORTsKIAotICAgIHdoaWxlICgqbGlzdCkgewotICAgICAgICBpZiAoKCpsaXN0KS0+dmFsdWUgPT0gdmFsdWUpIHsKKyAgICB0bXAgPSAqbGlzdDsKKyAgICB3aGlsZSAodG1wKSB7CisgICAgICAgIGlmICh0bXAtPnZhbHVlID09IHZhbHVlKSB7CiAgICAgICAgICAgICBmcmVlKGxhYmVsKTsKICAgICAgICAgICAgIHJldHVybiAoU0VfQUxSRUFEWV9USEVSRSk7CiAgICAgICAgIH0KLSAgICAgICAgbGFzdG5vZGUgPSAoKmxpc3QpOwotICAgICAgICAoKmxpc3QpID0gKCpsaXN0KS0+bmV4dDsKKyAgICAgICAgbGFzdG5vZGUgPSB0bXA7CisgICAgICAgIHRtcCA9IHRtcC0+bmV4dDsKICAgICB9CiAKICAgICBpZiAobGFzdG5vZGUpIHsKQEAgLTMyOSwxOCArMzQxLDE5IEBACiAgICAgcmV0dXJuIChzZV9maW5kX2xhYmVsX2luX2xpc3Qoc2VfZmluZF9zbGlzdChsaXN0bmFtZSksIHZhbHVlKSk7CiB9CiAKLQogaW50CiBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKICAgICByZXR1cm4gKHNlX2ZpbmRfdmFsdWVfaW5fbGlzdChzZV9maW5kX3NsaXN0KGxpc3RuYW1lKSwgbGFiZWwpKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFX0ZJTkRfRlJFRV9WQUxVRV9JTl9TTElTVAogaW50CiBzZV9maW5kX2ZyZWVfdmFsdWVfaW5fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUpCiB7CiAgICAgcmV0dXJuIChzZV9maW5kX2ZyZWVfdmFsdWVfaW5fbGlzdChzZV9maW5kX3NsaXN0KGxpc3RuYW1lKSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VfRklORF9GUkVFX1ZBTFVFX0lOX1NMSVNUICovCiAKIGludAogc2VfYWRkX3BhaXJfdG9fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsIGNoYXIgKmxhYmVsLCBpbnQgdmFsdWUpCkBAIC00MjUsMTIgKzQzOCw3IEBACiAgICAgcmV0dXJuOwogfQogCi12b2lkCi1zZV9jbGVhcl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSkKLXsKLSAgICBzZV9jbGVhcl9saXN0KHNlX2ZpbmRfc2xpc3RfcHRyKGxpc3RuYW1lKSk7Ci19Ci0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fU1RPUkVfU0xJU1QKIHZvaWQKIHNlX3N0b3JlX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLCBjb25zdCBjaGFyICp0eXBlKQogewpAQCAtNDQ3LDYgKzQ1NSwxNCBAQAogICAgIHNlX3N0b3JlX3NsaXN0KChjaGFyICopY2xpZW50YXJncywgYXBwbmFtZSk7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9TVE9SRV9TTElTVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX0NMRUFSCit2b2lkCitzZV9jbGVhcl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSkKK3sKKyAgICBzZV9jbGVhcl9saXN0KHNlX2ZpbmRfc2xpc3RfcHRyKGxpc3RuYW1lKSk7Cit9CiAKIHZvaWQKIHNlX2NsZWFyX2FsbF9saXN0cyh2b2lkKQpAQCAtNDU2LDI0ICs0NzIsNCBAQAogICAgIGZvciAoc3B0ciA9IHNsaXN0c3RvcmFnZTsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkKICAgICAgICAgc2VfY2xlYXJfbGlzdCgmKHNwdHItPmxpc3QpKTsKIH0KLQotI2lmZGVmIFRFU1RJTkcKLW1haW4oKQotewotICAgIGluaXRfc25tcF9lbnVtKCk7Ci0gICAgc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKCJoaSIpLCAxKTsKLSAgICBzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoInRoZXJlIiksIDIpOwotICAgIHByaW50ZigiaGk6ICVkXG4iLCBzZV9maW5kX3ZhbHVlKDEsIDEsICJoaSIpKTsKLSAgICBwcmludGYoIjI6ICVzXG4iLCBzZV9maW5kX2xhYmVsKDEsIDEsIDIpKTsKLQotICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJ0ZXN0aW5nIiwgImxpZmUsIGFuZCBldmVyeXRoaW5nIiwgNDIpOwotICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJ0ZXN0aW5nIiwgInJlc3RhdXJhbnQgYXQgdGhlIGVuZCBvZiB0aGUgdW5pdmVyc2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgIDIpOwotCi0gICAgcHJpbnRmKCJsaWZlLCBhbmQgZXZlcnl0aGluZzogJWRcbiIsCi0gICAgICAgICAgIHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoInRlc3RpbmciLCAibGlmZSwgYW5kIGV2ZXJ5dGhpbmciKSk7Ci0gICAgcHJpbnRmKCIyOiAlc1xuIiwgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgidGVzdGluZyIsIDIpKTsKLQotICAgIHNlX2NsZWFyX2FsbF9saXN0cygpOwotfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBURVNUSU5HICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fQ0xFQVIgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9sb2dnaW5nLmMgYi9zbm1wbGliL3NubXBfbG9nZ2luZy5jCmluZGV4IDdhMGRkYjIuLmEyY2Q1NWEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9sb2dnaW5nLmMKKysrIGIvc25tcGxpYi9zbm1wX2xvZ2dpbmcuYwpAQCAtMTgsNiArMTgsNyBAQAogICogIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9NQUxMT0NfSAogI2luY2x1ZGUgPG1hbGxvYy5oPgpAQCAtNDIsMTEgKzQzLDcgQEAKICNlbmRpZgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OSwxMSArNTYsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogCi0jaWYgSEFWRV9TVERBUkdfSAogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTcyLDE0ICs2NSw2IEBACiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5ET1dTX0gKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+ICAgICAgLyogRm9yIHRoaXMgZmlsZSdzICJpbnRlcm5hbCIgZGVmaW5pdGlvbnMgKi8KQEAgLTEwMCwxOSArODUsNTcgQEAKICNlbmRpZgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfb3V0cHV0cywgbG9nZ2luZ19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19maWxlLCBsb2dnaW5nX291dHB1dHMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19zdGRpbywgbG9nZ2luZ19vdXRwdXRzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfc3lzbG9nLCBsb2dnaW5nX291dHB1dHMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19leHRlcm5hbCwgbG9nZ2luZ19hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihlbmFibGVfc3RkZXJybG9nLCBsb2dnaW5nX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfZW5hYmxlX2NhbGxsb2csIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfZW5hYmxlX2xvZ2hhbmRsZXIsIG5ldHNubXBfdW51c2VkKQorCisvKiBkZWZhdWx0IHRvIHRoZSBmaWxlL3N0ZGlvL3N5c2xvZyBzZXQgKi8KK25ldHNubXBfZmVhdHVyZV93YW50KGxvZ2dpbmdfb3V0cHV0cykKKwogLyoKICAqIGxvZ2hfaGVhZDogIEEgbGlzdCBvZiBhbGwgbG9nIGhhbmRsZXJzLCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIHByaW9yaXR5CiAgKiBsb2doX3ByaW9yaXRpZXM6ICAnSW5kZXhlcycgaW50byB0aGlzIGxpc3QsIGJ5IHByaW9yaXR5CiAgKi8KIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2hfaGVhZCA9IE5VTEw7CiBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doX3ByaW9yaXRpZXNbTE9HX0RFQlVHKzFdOworc3RhdGljIGludCAgbG9naF9lbmFibGVkID0gMDsKIAotc3RhdGljIGludCAgICAgIG5ld2xpbmUgPSAxOwkgLyogTVRDUklUSUNBTF9SRVNPVVJDRSAqLwotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKIHN0YXRpYyBjaGFyIHN5c2xvZ25hbWVbNjRdID0gREVGQVVMVF9MT0dfSUQ7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiB2b2lkCituZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gpCit7CisgICAgaWYgKCFsb2doIHx8ICgwID09IGxvZ2gtPmVuYWJsZWQpKQorICAgICAgICByZXR1cm47CisgICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgLS1sb2doX2VuYWJsZWQ7CisgICAgbmV0c25tcF9hc3NlcnQobG9naF9lbmFibGVkID49IDApOworfQorCit2b2lkCituZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCkKK3sKKyAgICBpZiAoIWxvZ2ggfHwgKDAgIT0gbG9naC0+ZW5hYmxlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICArK2xvZ2hfZW5hYmxlZDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQordm9pZAogbmV0c25tcF9lbmFibGVfZmlsZWxvZyhuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doLCBpbnQgZG9udF96ZXJvX2xvZyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAogI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgogICAgICAgICAgICAgICAgIC8qCkBAIC0xMjMsMTAgKzE0NiwyMiBAQAogI2VuZGlmCiAKIHZvaWQKK3BhcnNlX2NvbmZpZ19sb2dPcHRpb24oY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgIGludCBteV9hcmdjID0gMCA7CisgIGNoYXIgKipteV9hcmd2ID0gTlVMTDsKKworICBzbm1wX2xvZ19vcHRpb25zKCBjcHRyLCBteV9hcmdjLCBteV9hcmd2ICk7Cit9CisKK3ZvaWQKIGluaXRfc25tcF9sb2dnaW5nKHZvaWQpCiB7CiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgImxvZ1RpbWVzdGFtcCIsIAogCQkJIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTE9HX1RJTUVTVEFNUCk7CisgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigic25tcCIsICJsb2dPcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfY29uZmlnX2xvZ09wdGlvbiwgTlVMTCwgInN0cmluZyIpOworCiB9CiAKIHZvaWQKQEAgLTE0MCw2ICsxNzUsNyBAQAogLyoKICAqIFRoZXNlIGRlZmluaXRpb25zIGhhbmRsZSA0LjIgc3lzdGVtcyB3aXRob3V0IGFkZGl0aW9uYWwgc3lzbG9nIGZhY2lsaXRpZXMuCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogI2lmbmRlZiBMT0dfQ09OUwogI2RlZmluZSBMT0dfQ09OUwkwICAgICAgIC8qIERvbid0IGJvdGhlciBpZiBub3QgZGVmaW5lZC4uLiAqLwogI2VuZGlmCkBAIC0xNzYsNiArMjEyLDI3IEBACiAjaWZuZGVmIExPR19VU0VSCiAjZGVmaW5lIExPR19VU0VSCTAKICNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KKworLyogU2V0IGxpbmUgYnVmZmVyaW5nIG1vZGUgZm9yIGEgc3RyZWFtLiAqLwordm9pZAorbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoRklMRSAqc3RyZWFtKQoreworI2lmIGRlZmluZWQoV0lOMzIpCisgICAgLyoKKyAgICAgKiBBY2NvcmRpbmcgdG8gTVNETiwgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIEMgcnVudGltZSBsaWJyYXJ5IGRvZXMKKyAgICAgKiBub3Qgc3VwcG9ydCBsaW5lIGJ1ZmZlcmluZywgc28gdHVybiBvZmYgYnVmZmVyaW5nIGNvbXBsZXRlbHkuCisgICAgICogU2VlIGFsc28gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzg2Y2ViaGZzKFZTLjcxKS5hc3B4LgorICAgICAqLworICAgIHNldHZidWYoc3RyZWFtLCBOVUxMLCBfSU9OQkYsIEJVRlNJWik7CisjZWxpZiBkZWZpbmVkKEhBVkVfU0VUTElORUJVRikKKyAgICAvKiBzZXRsaW5lZnVuY3Rpb24oKSBpcyBhIGZ1bmN0aW9uIGZyb20gdGhlIEJTRCBVbml4IEFQSS4gKi8KKyAgICBzZXRsaW5lYnVmKHN0cmVhbSk7CisjZWxzZQorICAgIC8qIFNlZSBhbHNvIHRoZSBDODkgb3IgQzk5IHN0YW5kYXJkIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNldHZidWYoKS4gKi8KKyAgICBzZXR2YnVmKHN0cmVhbSwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOworI2VuZGlmCit9CiAKIC8qCiAgKiBEZWNvZGVzIGxvZyBwcmlvcml0eS4KQEAgLTI1MSw2ICszMDgsNyBAQAogICAgIHJldHVybiBwcmlfbG93OwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKIGludAogZGVjb2RlX2ZhY2lsaXR5KCBjaGFyICpvcHRhcmcgKQogewpAQCAtMjg1LDYgKzM0Myw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiBpbnQKIHNubXBfbG9nX29wdGlvbnMoY2hhciAqb3B0YXJnLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpCkBAIC0zMDUsNiArMzY0LDggQEAKICAgICBpbnQgICAgICAgICAgICAgaW5jX29wdGluZCA9IDA7CiAgICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naDsKIAorICAgIERFQlVHTVNHVCgoImxvZ2dpbmc6b3B0aW9ucyIsICJvcHRhcmc6ICclcycsIGFyZ2MgJWQsIGFyZ3YgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgIG9wdGFyZywgYXJnYywgYXJndiA/IGFyZ3ZbMF0gOiAiTlVMTCIpKTsKICAgICBvcHRhcmcrKzsKICAgICBpZiAoISpjcCkKICAgICAgICAgY3AgPSAmbWlzc2luZ19vcHQ7CkBAIC0zMTgsNyArMzc5LDcgQEAKICAgICAvKgogICAgICAqIGFuZCAnLi4uLiAiLUx4IHZhbHVlIiAuLi4uJyAgKCp3aXRoKiB0aGUgcXVvdGVzKQogICAgICAqLwotICAgIHdoaWxlICgqb3B0YXJnICYmIGlzc3BhY2UoKm9wdGFyZykpIHsKKyAgICB3aGlsZSAoKm9wdGFyZyAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqb3B0YXJnKSkpIHsKICAgICAgICAgb3B0YXJnKys7CiAgICAgfQogICAgIC8qCkBAIC0zMzYsOCArMzk3LDEwIEBACiAgICAgICAgIGluY19vcHRpbmQgPSAxOwogICAgIH0KIAorICAgIERFQlVHTVNHVCgoImxvZ2dpbmc6b3B0aW9ucyIsICIqY3A6ICclYydcbiIsICpjcCkpOwogICAgIHN3aXRjaCAoKmNwKSB7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCiAgICAgLyoKICAgICAgKiBMb2cgdG8gU3RhbmRhcmQgRXJyb3IKICAgICAgKi8KQEAgLTM1MCw2ICs0MTMsNyBAQAogICAgIGNhc2UgJ2UnOgogICAgICAgICBsb2doID0gbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyKE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlIsIHByaW9yaXR5KTsKICAgICAgICAgaWYgKGxvZ2gpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZGVycik7CiAgICAgICAgICAgICBsb2doLT5wcmlfbWF4ID0gcHJpX21heDsKICAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgPSBzdHJkdXAoInN0ZGVyciIpOwogCX0KQEAgLTM2NywxMSArNDMxLDEzIEBACiAgICAgY2FzZSAnbyc6CiAgICAgICAgIGxvZ2ggPSBuZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXIoTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUiwgcHJpb3JpdHkpOwogICAgICAgICBpZiAobG9naCkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoc3Rkb3V0KTsKICAgICAgICAgICAgIGxvZ2gtPnByaV9tYXggPSBwcmlfbWF4OwogICAgICAgICAgICAgbG9naC0+dG9rZW4gICA9IHN0cmR1cCgic3Rkb3V0Iik7CiAgICAgICAgICAgICBsb2doLT5pbWFnaWMgID0gMTsJICAgIC8qIHN0ZG91dCwgbm90IHN0ZGVyciAqLwogCX0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAKICAgICAvKgogICAgICAqIExvZyB0byBhIG5hbWVkIGZpbGUKQEAgLTM4MSw2ICs0NDcsNyBAQAogICAgICAgICBpZiAocHJpb3JpdHkgPT0gLTEgfHwgIWFyZ3YpICByZXR1cm4gLTE7CiAgICAgICAgIG9wdGFyZyA9IGFyZ3ZbKytvcHRpbmRdOwogICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgIGNhc2UgJ2YnOgogICAgICAgICBpZiAoaW5jX29wdGluZCkKICAgICAgICAgICAgIG9wdGluZCsrOwpAQCAtMzk3LDcgKzQ2NCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQRU5EX0xPR0ZJTEVTKSk7CiAJfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICAvKgogICAgICAqIExvZyB0byBzeXNsb2cKICAgICAgKi8KQEAgLTQyNCwxMSArNDkzLDEyIEBACiAgICAgICAgICAgICBpbnQgZmFjaWxpdHkgPSBkZWNvZGVfZmFjaWxpdHkob3B0YXJnKTsKICAgICAgICAgICAgIGlmIChmYWNpbGl0eSA9PSAtMSkgIHJldHVybiAtMTsKICAgICAgICAgICAgIGxvZ2gtPnByaV9tYXggPSBwcmlfbWF4OwotICAgICAgICAgICAgbG9naC0+dG9rZW4gICA9IHN0cmR1cChzbm1wX2xvZ19zeXNsb2duYW1lKDApKTsKKyAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgPSBzdHJkdXAoc25tcF9sb2dfc3lzbG9nbmFtZShOVUxMKSk7CiAgICAgICAgICAgICBsb2doLT5tYWdpYyAgID0gKHZvaWQgKikoaW50cHRyX3QpZmFjaWxpdHk7Ci0JICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChzbm1wX2xvZ19zeXNsb2duYW1lKDApLCBmYWNpbGl0eSk7CisJICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChzbm1wX2xvZ19zeXNsb2duYW1lKE5VTEwpLCBmYWNpbGl0eSk7CiAJfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKICAgICAvKgogICAgICAqIERvbid0IGxvZyAKQEAgLTQ2MCw2ICs1MzAsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKIGNoYXIgKgogc25tcF9sb2dfc3lzbG9nbmFtZShjb25zdCBjaGFyICpwc3RyKQogewpAQCAtNDY4LDIwICs1MzksMjkgQEAKIAogICByZXR1cm4gc3lzbG9nbmFtZTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKIHZvaWQKIHNubXBfbG9nX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqbGVhZCwgRklMRSAqIG91dGYpCiB7CiAgICAgY29uc3QgY2hhciAqcHJpMV9tc2cgPSAiIGZvciBsZXZlbCAncHJpJyBhbmQgYWJvdmUiOwogICAgIGNvbnN0IGNoYXIgKnByaTJfbXNnID0gIiBmb3IgbGV2ZWxzICdwMScgdG8gJ3AyJyI7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTwogICAgIGZwcmludGYob3V0ZiwgIiVzZTogICAgICAgICAgIGxvZyB0byBzdGFuZGFyZCBlcnJvclxuIiwgbGVhZCk7CiAgICAgZnByaW50ZihvdXRmLCAiJXNvOiAgICAgICAgICAgbG9nIHRvIHN0YW5kYXJkIG91dHB1dFxuIiwgbGVhZCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAgICAgZnByaW50ZihvdXRmLCAiJXNuOiAgICAgICAgICAgZG9uJ3QgbG9nIGF0IGFsbFxuIiwgbGVhZCk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgZnByaW50ZihvdXRmLCAiJXNmIGZpbGU6ICAgICAgbG9nIHRvIHRoZSBzcGVjaWZpZWQgZmlsZVxuIiwgbGVhZCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgIGZwcmludGYob3V0ZiwgIiVzcyBmYWNpbGl0eTogIGxvZyB0byBzeXNsb2cgKHZpYSB0aGUgc3BlY2lmaWVkIGZhY2lsaXR5KVxuIiwgbGVhZCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIGZwcmludGYob3V0ZiwgIlxuJXModmFyaWFudHMpXG4iLCBsZWFkKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICBmcHJpbnRmKG91dGYsICIlc1tFT05dIHByaTogICBsb2cgdG8gc3RhbmRhcmQgZXJyb3IsIG91dHB1dCBvciAvZGV2L251bGwlc1xuIiwgbGVhZCwgcHJpMV9tc2cpOwogICAgIGZwcmludGYob3V0ZiwgIiVzW0VPTl0gcDEtcDI6IGxvZyB0byBzdGFuZGFyZCBlcnJvciwgb3V0cHV0IG9yIC9kZXYvbnVsbCVzXG4iLCBsZWFkLCBwcmkyX21zZyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KICAgICBmcHJpbnRmKG91dGYsICIlc1tGU10gcHJpIHRva2VuOiAgICBsb2cgdG8gZmlsZS9zeXNsb2clc1xuIiwgbGVhZCwgcHJpMV9tc2cpOwogICAgIGZwcmludGYob3V0ZiwgIiVzW0ZTXSBwMS1wMiB0b2tlbjogIGxvZyB0byBmaWxlL3N5c2xvZyVzXG4iLCBsZWFkLCBwcmkyX21zZyk7CiB9CkBAIC00OTUsMTEgKzU3NSw3IEBACiBpbnQKIHNubXBfZ2V0X2RvX2xvZ2dpbmcodm9pZCkKIHsKLSAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doOwotICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpCi0gICAgICAgIGlmIChsb2doLT5lbmFibGVkKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIChsb2doX2VuYWJsZWQgPiAwKTsKIH0KIAogCkBAIC01MjAsNiArNTk2LDcgQEAKICAgICByZXR1cm4gc2J1ZjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiB2b2lkCiBzbm1wX2Rpc2FibGVfc3lzbG9nX2VudHJ5KG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gpCiB7CkBAIC01MzcsNyArNjE0LDcgQEAKICAgICBsb2doLT5pbWFnaWMgID0gMDsKICNlbmRpZgogCi0gICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKIH0KIAogdm9pZApAQCAtNTQ5LDcgKzYyNiw5IEBACiAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmIGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NZU0xPRykKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2dfZW50cnkobG9naCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiB2b2lkCiBzbm1wX2Rpc2FibGVfZmlsZWxvZ19lbnRyeShuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doKQogewpAQCAtNTYxLDkgKzY0MCwxMSBAQAogICAgICAgICBmY2xvc2UoKEZJTEUqKWxvZ2gtPm1hZ2ljKTsKICAgICAgICAgbG9naC0+bWFnaWMgICA9IE5VTEw7CiAgICAgfQotICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogdm9pZAogc25tcF9kaXNhYmxlX2ZpbGVsb2codm9pZCkKIHsKQEAgLTU3Myw3ICs2NTQsOSBAQAogICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiBsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9GSUxFKQogICAgICAgICAgICAgc25tcF9kaXNhYmxlX2ZpbGVsb2dfZW50cnkobG9naCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KIC8qCiAgKiByZXR1cm5zIHRoYXQgc3RhdHVzIG9mIHN0ZGVyciBsb2dnaW5nCiAgKgpAQCAtNjAyLDEwICs2ODUsMTIgQEAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KQogICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1RET1VUIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlIpKSB7Ci0gICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAJfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfQ0FMTExPRwogdm9pZAogc25tcF9kaXNhYmxlX2NhbGxsb2codm9pZCkKIHsKQEAgLTYxMyw5ICs2OTgsMTAgQEAKIAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpCiAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmIGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0NBTExCQUNLKSB7Ci0gICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAJfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfQ0FMTExPRyAqLwogCiB2b2lkCiBzbm1wX2Rpc2FibGVfbG9nKHZvaWQpCkBAIC02MjMsMTEgKzcwOSwxNSBAQAogICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2g7CiAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NZU0xPRykKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2dfZW50cnkobG9naCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfRklMRSkKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9maWxlbG9nX2VudHJ5KGxvZ2gpOwotICAgICAgICBsb2doLT5lbmFibGVkID0gMDsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLworICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgIH0KIH0KIApAQCAtNjM5LDE1ICs3MjksMjAgQEAKIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0KHZvaWQpCiB7CiAgICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naDsKKyAgICBpbnQgZG9uZW9uZSA9IDA7CiAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KSB7CiAgICAgICAgIGlmICgwID09IGxvZ2gtPmVuYWJsZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1lTTE9HKSB7CiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nX2VudHJ5KGxvZ2gpOwogICAgICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KGxvZ2gtPnRva2VuLChpbnQpKGludHB0cl90KWxvZ2gtPm1hZ2ljKTsKKyAgICAgICAgICAgIGRvbmVvbmUgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0ZJTEUpIHsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCisgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9GSUxFICYmICFkb25lb25lKSB7CiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfZmlsZWxvZ19lbnRyeShsb2doKTsKICAgICAgICAgICAgIC8qKiBobW0sIGRvbid0IHplcm8gc3RhdHVzIGlzbid0IHNhdmVkLi4gaSB0aGluayBpdCdzCiAgICAgICAgICAgICAgKiBzYWZlciBub3QgdG8gb3ZlcndyaXRlLCBpbiBjYXNlIGEgaHVwIGlzIGp1c3QgdG8KQEAgLTY1NSwxNSArNzUwLDE3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX2ZpbGVsb2cobG9naCwgMSk7CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogICAgIH0KIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiB2b2lkCiBzbm1wX2VuYWJsZV9zeXNsb2codm9pZCkKIHsKLSAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoc25tcF9sb2dfc3lzbG9nbmFtZSgwKSwgTE9HX0RBRU1PTik7CisgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KHNubXBfbG9nX3N5c2xvZ25hbWUoTlVMTCksIExPR19EQUVNT04pOwogfQogCiB2b2lkCkBAIC02OTgsNyArNzk1LDEwIEBACiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TWVNMT0cpIHsKICAgICAgICAgICAgIGxvZ2gtPm1hZ2ljICAgPSAodm9pZCopZXZlbnRsb2dfaDsKICAgICAgICAgICAgIGxvZ2gtPmltYWdpYyAgPSBlbmFibGU7CS8qIHN5c2xvZyBvcGVuICovCi0gICAgICAgICAgICBsb2doLT5lbmFibGVkID0gZW5hYmxlOworICAgICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgKDAgPT0gZW5hYmxlKSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOworICAgICAgICAgICAgZWxzZSBpZiAoKDAgPT0gbG9naC0+ZW5hYmxlZCkgJiYgZW5hYmxlKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICAgICAgICAgIGZvdW5kICAgICAgICAgPSAxOwogCX0KIApAQCAtNzA5LDExICs4MDksMTYgQEAKICAgICAgICAgICAgIGxvZ2gtPm1hZ2ljICAgID0gKHZvaWQqKWV2ZW50bG9nX2g7CiAgICAgICAgICAgICBsb2doLT50b2tlbiAgICA9IHN0cmR1cChpZGVudCk7CiAgICAgICAgICAgICBsb2doLT5pbWFnaWMgICA9IGVuYWJsZTsJLyogc3lzbG9nIG9wZW4gKi8KLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgID0gZW5hYmxlOworICAgICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgKDAgPT0gZW5hYmxlKSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOworICAgICAgICAgICAgZWxzZSBpZiAoKDAgPT0gbG9naC0+ZW5hYmxlZCkgJiYgZW5hYmxlKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICAgICAgfQogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKIHZvaWQKIG5ldHNubXBfZW5hYmxlX2ZpbGVsb2cobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCwgaW50IGRvbnRfemVyb19sb2cpCiB7CkBAIC03MjQsMjEgKzgyOSwxNCBAQAogCiAgICAgaWYgKCFsb2doLT5tYWdpYykgewogICAgICAgICBsb2dmaWxlID0gZm9wZW4obG9naC0+dG9rZW4sIGRvbnRfemVyb19sb2cgPyAiYSIgOiAidyIpOwotICAgICAgICBpZiAoIWxvZ2ZpbGUpCisgICAgICAgIGlmICghbG9nZmlsZSkgeworCSAgICBzbm1wX2xvZ19wZXJyb3IobG9naC0+dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOworCX0KICAgICAgICAgbG9naC0+bWFnaWMgPSAodm9pZCopbG9nZmlsZTsKLSNpZmRlZiBXSU4zMgotICAgICAgICAvKgotICAgICAgICAgKiBBcHBhcmVudGx5LCAibGluZSBidWZmZXJpbmciIHVuZGVyIFdpbmRvd3MgaXMKLSAgICAgICAgICogIGFjdHVhbGx5IGltcGxlbWVudGVkIGFzICJmdWxsIGJ1ZmZlcmluZyIuCi0gICAgICAgICAqICBMZXQncyB0cnkgdHVybmluZyBvZmYgYnVmZmVyaW5nIGNvbXBsZXRlbHkuCi0gICAgICAgICAqLwotICAgICAgICBzZXR2YnVmKGxvZ2ZpbGUsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKLSNlbHNlCi0gICAgICAgIHNldHZidWYobG9nZmlsZSwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOwotI2VuZGlmCisgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKGxvZ2ZpbGUpOwogICAgIH0KLSAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiB9CiAKIHZvaWQKQEAgLTc3MCw4ICs4NjgsMTEgQEAKICAgICAgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV9maWxlbG9nKGxvZ2gsIGRvbnRfemVyb19sb2cpOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9FTkFCTEVfU1RERVJSTE9HCisvKiB1c2VkIGluIHRoZSBwZXJsIG1vZHVsZXMgYW5kIGlwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMgKi8KIHZvaWQKIHNubXBfZW5hYmxlX3N0ZGVycmxvZyh2b2lkKQogewpAQCAtNzgxLDcgKzg4Miw3IEBACiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NURE9VVCB8fAogICAgICAgICAgICAgbG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSKSB7Ci0gICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICAgICAgICAgIGZvdW5kICAgICAgICAgPSAxOwogICAgICAgICB9CiAKQEAgLTc5Miw4ICs4OTMsOSBAQAogICAgICAgICAgICAgbG9naC0+dG9rZW4gICAgPSBzdHJkdXAoInN0ZGVyciIpOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0VOQUJMRV9TVERFUlJMT0cgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfQ0FMTExPRwogdm9pZAogc25tcF9lbmFibGVfY2FsbGxvZyh2b2lkKQkvKiBYWFggLSBvciB0YWtlIGEgY2FsbGJhY2sgcm91dGluZSA/Pz8gKi8KIHsKQEAgLTgwMiw3ICs5MDQsNyBAQAogCiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0NBTExCQUNLKSB7Ci0gICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICAgICAgICAgIGZvdW5kICAgICAgICAgPSAxOwogCX0KIApAQCAtODEzLDcgKzkxNSw3IEBACiAgICAgICAgICAgICBsb2doLT50b2tlbiAgICA9IHN0cmR1cCgiY2FsbGJhY2siKTsKICAgICB9CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0NBTExMT0cgKi8KIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC04OTEsMjIgKzk5MywzMSBAQAogICAgIGlmICghbG9naCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBERUJVR01TR1QoKCJsb2dnaW5nOnJlZ2lzdGVyIiwgInJlZ2lzdGVyaW5nIGxvZyB0eXBlICVkIHdpdGggcHJpICVkXG4iLAorICAgICAgICAgICAgICAgdHlwZSwgcHJpb3JpdHkpKTsKKwogICAgIGxvZ2gtPnR5cGUgICAgID0gdHlwZTsKICAgICBzd2l0Y2ggKCB0eXBlICkgewogICAgIGNhc2UgTkVUU05NUF9MT0dIQU5ETEVSX1NURE9VVDoKICAgICAgICAgbG9naC0+aW1hZ2ljICA9IDE7CiAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTwogICAgIGNhc2UgTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUjoKICAgICAgICAgbG9naC0+aGFuZGxlciA9IGxvZ19oYW5kbGVyX3N0ZG91dGVycjsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICBjYXNlIE5FVFNOTVBfTE9HSEFORExFUl9GSUxFOgogICAgICAgICBsb2doLT5oYW5kbGVyID0gbG9nX2hhbmRsZXJfZmlsZTsKICAgICAgICAgbG9naC0+aW1hZ2ljICA9IDE7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICBjYXNlIE5FVFNOTVBfTE9HSEFORExFUl9TWVNMT0c6CiAgICAgICAgIGxvZ2gtPmhhbmRsZXIgPSBsb2dfaGFuZGxlcl9zeXNsb2c7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KICAgICBjYXNlIE5FVFNOTVBfTE9HSEFORExFUl9DQUxMQkFDSzoKICAgICAgICAgbG9naC0+aGFuZGxlciA9IGxvZ19oYW5kbGVyX2NhbGxiYWNrOwogICAgICAgICBicmVhazsKQEAgLTkxOCwxMiArMTAyOSwxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbG9naC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKLSAgICBsb2doLT5lbmFibGVkICA9IDE7CisgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgIG5ldHNubXBfYWRkX2xvZ2hhbmRsZXIoIGxvZ2ggKTsKICAgICByZXR1cm4gbG9naDsKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfTE9HSEFORExFUgogaW50CiBuZXRzbm1wX2VuYWJsZV9sb2doYW5kbGVyKCBjb25zdCBjaGFyICp0b2tlbiApCiB7CkBAIC05MzIsNyArMTA0NCw3IEBACiAgICAgbG9naCA9IG5ldHNubXBfZmluZF9sb2doYW5kbGVyKCB0b2tlbiApOwogICAgIGlmICghbG9naCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbG9naC0+ZW5hYmxlZCA9IDE7CisgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgIHJldHVybiAxOwogfQogCkBAIC05NDUsOSArMTA1NywxMCBAQAogICAgIGxvZ2ggPSBuZXRzbm1wX2ZpbmRfbG9naGFuZGxlciggdG9rZW4gKTsKICAgICBpZiAoIWxvZ2gpCiAgICAgICAgIHJldHVybiAwOwotICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9MT0dIQU5ETEVSICovCiAKIGludAogbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlciggbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCApCkBAIC05NzQsOSArMTA4NywxMiBAQAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCiBpbnQKIGxvZ19oYW5kbGVyX3N0ZG91dGVyciggIG5ldHNubXBfbG9nX2hhbmRsZXIqIGxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikKIHsKKyAgICBzdGF0aWMgaW50ICAgICAgbmV3bGluZSA9IDE7CSAvKiBNVENSSVRJQ0FMX1JFU09VUkNFICovCisgICAgY29uc3QgY2hhciAgICAgKm5ld2xpbmVfcHRyOwogICAgIGNoYXIgICAgICAgICAgICBzYnVmWzQwXTsKIAogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCkBAIC05ODUsNyArMTEwMSwxMiBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0cmNweShzYnVmLCAiIik7CiAgICAgfQotICAgIG5ld2xpbmUgPSBzdHJbc3RybGVuKHN0cikgLSAxXSA9PSAnXG4nOwkvKiBYWFggLSBFaCA/ICovCisgICAgLyoKKyAgICAgKiBSZW1lbWJlciB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBsaW5lIGVuZHMgd2l0aCBhIG5ld2xpbmUgZm9yIHRoZQorICAgICAqIG5leHQgY2FsbCBvZiBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoKS4KKyAgICAgKi8KKyAgICBuZXdsaW5lX3B0ciA9IHN0cnJjaHIoc3RyLCAnXG4nKTsKKyAgICBuZXdsaW5lID0gbmV3bGluZV9wdHIgJiYgbmV3bGluZV9wdHJbMV0gPT0gMDsKIAogICAgIGlmIChsb2doLT5pbWFnaWMpCiAgICAgICAgcHJpbnRmKCAgICAgICAgICIlcyVzIiwgc2J1Ziwgc3RyKTsKQEAgLTk5NCw4ICsxMTE1LDEwIEBACiAKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICNpZmRlZiBXSU4zMgogaW50CiBsb2dfaGFuZGxlcl9zeXNsb2coICBuZXRzbm1wX2xvZ19oYW5kbGVyKiBsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpCkBAIC0xMDc5LDggKzEyMDIsMTAgQEAKICAgICByZXR1cm4gMTsKIH0KICNlbmRpZiAvKiAhV0lOMzIgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogaW50CiBsb2dfaGFuZGxlcl9maWxlKCAgICBuZXRzbm1wX2xvZ19oYW5kbGVyKiBsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpCiB7CkBAIC0xMTE3LDYgKzEyNDIsNyBAQAogICAgIGxvZ2gtPmltYWdpYyA9IHN0cltzdHJsZW4oc3RyKSAtIDFdID09ICdcbic7CiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAogaW50CiBsb2dfaGFuZGxlcl9jYWxsYmFjayhuZXRzbm1wX2xvZ19oYW5kbGVyKiBsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpCkBAIC0xMTUxLDE3ICsxMjc3LDM3IEBACiB2b2lkCiBzbm1wX2xvZ19zdHJpbmcoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpzdHIpCiB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTworICAgIHN0YXRpYyBpbnQgc3RkZXJyX2VuYWJsZWQgPSAwOworICAgIHN0YXRpYyBuZXRzbm1wX2xvZ19oYW5kbGVyIGxoID0geyAxLCAwLCAwLCAwLCAic3RkZXJyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyLCAwLCBOVUxMLCAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB9OworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2g7CiAKICAgICAvKgogICAgICAqIFdlJ3ZlIGdvdCB0byBiZSBhYmxlIHRvIGxvZyBtZXNzYWdlcyAqc29tZXdoZXJlKiEKICAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCBzdGRlcnIgbG9nZ2luZywgdGhlbiBlbmFibGUgc29tZXRoaW5nIGVsc2UuCiAgICAgICovCi0gICAgaWYgKCFsb2doX2hlYWQpIHsKLSAgICAgICAgc25tcF9lbmFibGVfc3RkZXJybG9nKCk7Ci0gICAgICAgIHNubXBfbG9nX3N0cmluZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICJObyBsb2cgaGFuZGxpbmcgZW5hYmxlZCAtIHR1cm5pbmcgb24gc3RkZXJyIGxvZ2dpbmdcbiIpOworICAgIGlmICgwID09IGxvZ2hfZW5hYmxlZCkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KKyAgICAgICAgaWYgKCFzdGRlcnJfZW5hYmxlZCkgeworICAgICAgICAgICAgKytzdGRlcnJfZW5hYmxlZDsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZGVycik7CisgICAgICAgIH0KKyAgICAgICAgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCAmbGgsIHByaW9yaXR5LCBzdHIgKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KKworICAgICAgICByZXR1cm47CiAgICAgfQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KKyAgICBlbHNlIGlmIChzdGRlcnJfZW5hYmxlZCkgeworICAgICAgICBzdGRlcnJfZW5hYmxlZCA9IDA7CisgICAgICAgIGxvZ19oYW5kbGVyX3N0ZG91dGVyciggJmxoLCBMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9nIGhhbmRsaW5nIGRlZmluZWQgLSBkaXNhYmxpbmcgc3RkZXJyXG4iICk7CisgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLworICAgICAgICAKIAogICAgIC8qCiAgICAgICogU3RhcnQgYXQgdGhlIGdpdmVuIHByaW9yaXR5LCBhbmQgd29yayAidXB3YXJkcyIuLi4uCkBAIC0xMjc0LDI1ICsxNDIwLDExIEBACiAgKiBAc2VlIHNubXBfdmxvZwogICovCiBpbnQKLSNpZiBIQVZFX1NUREFSR19ICiBzbm1wX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotI2Vsc2UKLXNubXBfbG9nKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBhcDsKICAgICBpbnQgICAgICAgICAgICAgcmV0OwotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKLSNlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OwotICAgIGNvbnN0IGNoYXIgICAgICpmb3JtYXQ7Ci0gICAgdmFfc3RhcnQoYXApOwotCi0gICAgcHJpb3JpdHkgPSB2YV9hcmcoYXAsIGludCk7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopOwotI2VuZGlmCiAgICAgcmV0ID0gc25tcF92bG9nKHByaW9yaXR5LCBmb3JtYXQsIGFwKTsKICAgICB2YV9lbmQoYXApOwogICAgIHJldHVybiAocmV0KTsKQEAgLTEzMTgsMTEgKzE0NTAsMTMgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VYVEVSTkFMCiAvKiBleHRlcm5hbCBhY2Nlc3MgdG8gbG9naF9oZWFkIHZhcmlhYmxlICovCiBuZXRzbm1wX2xvZ19oYW5kbGVyICAqCiBnZXRfbG9naF9oZWFkKHZvaWQpCiB7CiAJcmV0dXJuIGxvZ2hfaGVhZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRVhURVJOQUwgKi8KIAogLyoqICBAfSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX29wZW5zc2wuYyBiL3NubXBsaWIvc25tcF9vcGVuc3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwZWFhOAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvc25tcF9vcGVuc3NsLmMKQEAgLTAsMCArMSw4NzkgQEAKKy8qCisgKiBzbm1wX29wZW5zc2wuYworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKSAmJiAhZGVmaW5lZChORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfVVRJTCkKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2ZyZWVfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZXMsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9wZW5zc2xfaHQybmlkLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvcGVuc3NsX2Vycl9sb2csIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfZHVtcF9uYW1lcywgbmV0c25tcF91bnVzZWQpCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaD4KKworc3RhdGljIHVfY2hhciBoYXZlX3N0YXJ0ZWRfYWxyZWFkeSA9IDA7CisKKy8qCisgKiBUaGlzIGNvZGUgbWVyZWx5IGRvZXMgb3BlbnNzbCBpbml0aWFsaXphdGlvbiBzbyB0aGF0IG11bHRpbHBlCisgKiBtb2R1bGVzIGFyZSBzYWZlIHRvIGNhbGwgbmV0c25tcF9pbml0X29wZW5zc2woKSBmb3IgYm9vdHN0cmFwcGluZworICogd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdGhlciBjYWxsZXJzIHRoYXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHNvLgorICovCit2b2lkIG5ldHNubXBfaW5pdF9vcGVuc3NsKHZvaWQpIHsKKworICAgIC8qIGF2b2lkIGR1cGxpY2F0ZSBjYWxscyAqLworICAgIGlmIChoYXZlX3N0YXJ0ZWRfYWxyZWFkeSkKKyAgICAgICAgcmV0dXJuOworICAgIGhhdmVfc3RhcnRlZF9hbHJlYWR5ID0gMTsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wX29wZW5zc2wiLCAiaW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICAvKiBJbml0aWFsaXppbmcgT3BlblNTTCAqLworICAgIFNTTF9saWJyYXJ5X2luaXQoKTsKKyAgICBTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CisgICAgRVJSX2xvYWRfQklPX3N0cmluZ3MoKTsKKyAgICBPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtcygpOworfQorCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X25hbWU6IGdldCBzdWJqZWN0IG5hbWUgZmllbGQgZnJvbSBjZXJ0CisgKiBAaW50ZXJuYWwKKyAqLworLyoqIGluc3RlYWQgb2YgZXhwb3NpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoCisgKiBmaWVsZCwgbGlrZSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZSwgYmVsb3cgKi8KK3N0YXRpYyBjaGFyICoKK19jZXJ0X2dldF9uYW1lKFg1MDkgKm9jZXJ0LCBpbnQgd2hpY2gsIGNoYXIgKipidWYsIGludCAqbGVuLCBpbnQgZmxhZ3MpCit7CisgICAgWDUwOV9OQU1FICAgICAgICpvc3Vial9uYW1lOworICAgIGludCAgICAgICAgICAgICAgc3BhY2U7CisgICAgY2hhciAgICAgICAgICAgICpidWZfcHRyOworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvc3Vial9uYW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKG9jZXJ0KTsKKyAgICBpZiAoTlVMTCA9PSBvc3Vial9uYW1lKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpuYW1lIiwgIm5vIHN1YmplY3QgbmFtZSFcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoqIHNlZSBpZiBidWYgaXMgYmlnIGVub3VnaCwgb3IgYWxsb2NhdGUgYnVmIGlmIG5vbmUgc3BlY2lmaWVkICovCisgICAgc3BhY2UgPSBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKG9zdWJqX25hbWUsIHdoaWNoLCBOVUxMLCAwKTsKKyAgICBpZiAoLTEgPT0gc3BhY2UpCisgICAgICAgIHJldHVybiBOVUxMOworICAgICsrc3BhY2U7IC8qIGZvciBOVUwgKi8KKyAgICBpZiAoYnVmICYmICpidWYpIHsKKyAgICAgICAgaWYgKCpsZW4gPCBzcGFjZSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBidWZfcHRyID0gKmJ1ZjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGJ1Zl9wdHIgPSBjYWxsb2MoMSxzcGFjZSk7CisgICAgICAgIGlmICghYnVmX3B0cikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzcGFjZSA9IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQob3N1YmpfbmFtZSwgd2hpY2gsIGJ1Zl9wdHIsIHNwYWNlKTsKKyAgICBpZiAobGVuKQorICAgICAgICAqbGVuID0gc3BhY2U7CisKKyAgICByZXR1cm4gYnVmX3B0cjsKK30KKworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0TmFtZTogZ2V0IHN1YmplY3QgbmFtZSBmaWVsZCBmcm9tIGNlcnQKKyAqLworY2hhciAqCituZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdE5hbWUoWDUwOSAqb2NlcnQsIGNoYXIgKipidWYsIGludCAqbGVuKQoreworICAgIFg1MDlfTkFNRSAgICAgICAqb3N1YmpfbmFtZTsKKyAgICBpbnQgICAgICAgICAgICAgIHNwYWNlOworICAgIGNoYXIgICAgICAgICAgICAqYnVmX3B0cjsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb3N1YmpfbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShvY2VydCk7CisgICAgaWYgKE5VTEwgPT0gb3N1YmpfbmFtZSkgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6bmFtZSIsICJubyBzdWJqZWN0IG5hbWUhXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChidWYpIHsKKyAgICAgICAgYnVmX3B0ciA9ICpidWY7CisgICAgICAgIHNwYWNlID0gKmxlbjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGJ1Zl9wdHIgPSBOVUxMOworICAgICAgICBzcGFjZSA9IDA7CisgICAgfQorICAgIGJ1Zl9wdHIgPSBYNTA5X05BTUVfb25lbGluZShvc3Vial9uYW1lLCBidWZfcHRyLCBzcGFjZSk7CisgICAgaWYgKGxlbikKKyAgICAgICAgKmxlbiA9IHN0cmxlbihidWZfcHRyKTsKKworICAgIHJldHVybiBidWZfcHRyOworfQorCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWU6IGdldCBjb21tb25OYW1lIGZvciBjZXJ0LgorICogaWYgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGFuZCBpdHMgbGVuZ3RoIGFyZSBzcGVjaWZpZWQsIHRoZXkgd2lsbCBiZQorICogdXNlZC4gb3RoZXJ3aXNlLCBhIG5ldyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQsIHdoaWNoIHRoZSBjYWxsZXIgd2lsbAorICogYmUgcmVzcG9uc2JpbGUgZm9yIHJlbGVhc2luZy4KKyAqLworY2hhciAqCituZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZShYNTA5ICpvY2VydCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pCit7CisgICAgcmV0dXJuIF9jZXJ0X2dldF9uYW1lKG9jZXJ0LCBOSURfY29tbW9uTmFtZSwgYnVmLCBsZW4sIDApOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9EVU1QX05BTUVTCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9uYW1lOiBkdW1wIHN1YmplY3QgbmFtZXMgaW4gY2VydAorICovCit2b2lkCituZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX25hbWVzKFg1MDkgKm9jZXJ0KQoreworICAgIGludCAgICAgICAgICAgICAgaSwgb25pZDsKKyAgICBYNTA5X05BTUVfRU5UUlkgKm9uYW1lX2VudHJ5OworICAgIFg1MDlfTkFNRSAgICAgICAqb3N1YmpfbmFtZTsKKyAgICBjb25zdCBjaGFyICAgICAgKnByZWZpeF9zaG9ydCwgKnByZWZpeF9sb25nOworCisgICAgaWYgKE5VTEwgPT0gb2NlcnQpCisgICAgICAgIHJldHVybjsKKworICAgIG9zdWJqX25hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUob2NlcnQpOworICAgIGlmIChOVUxMID09IG9zdWJqX25hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXA6bmFtZXMiLCAibm8gc3ViamVjdCBuYW1lIVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IFg1MDlfTkFNRV9lbnRyeV9jb3VudChvc3Vial9uYW1lKTsgaSsrKSB7CisgICAgICAgIG9uYW1lX2VudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShvc3Vial9uYW1lLCBpKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBvbmFtZV9lbnRyeSk7CisKKyAgICAgICAgaWYgKG9uYW1lX2VudHJ5LT52YWx1ZS0+dHlwZSAhPSBWX0FTTjFfUFJJTlRBQkxFU1RSSU5HKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyoqIGdldCBOSUQgKi8KKyAgICAgICAgb25pZCA9IE9CSl9vYmoybmlkKG9uYW1lX2VudHJ5LT5vYmplY3QpOworICAgICAgICBpZiAob25pZCA9PSBOSURfdW5kZWYpIHsKKyAgICAgICAgICAgIHByZWZpeF9sb25nID0gcHJlZml4X3Nob3J0ID0gIlVOS05PV04iOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJlZml4X2xvbmcgPSBPQkpfbmlkMmxuKG9uaWQpOworICAgICAgICAgICAgcHJlZml4X3Nob3J0ID0gT0JKX25pZDJzbihvbmlkKTsKKyAgICAgICAgfQorCisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wOm5hbWVzIiwKKyAgICAgICAgICAgICAgICAgICAiWyUwMmRdIE5JRCB0eXBlICVkLCBBU04gdHlwZSAlZFxuIiwgaSwgb25pZCwKKyAgICAgICAgICAgICAgICAgICBvbmFtZV9lbnRyeS0+dmFsdWUtPnR5cGUpKTsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXA6bmFtZXMiLCAiJXMvJXM6ICclcydcbiIsIHByZWZpeF9sb25nLAorICAgICAgICAgICAgICAgICAgIHByZWZpeF9zaG9ydCwgQVNOMV9TVFJJTkdfZGF0YShvbmFtZV9lbnRyeS0+dmFsdWUpKSk7CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9EVU1QX05BTUVTICovCisKK3N0YXRpYyBjaGFyICoKK19jZXJ0X2dldF9leHRlbnNpb24oWDUwOV9FWFRFTlNJT04gICpvZXh0LCBjaGFyICoqYnVmLCBpbnQgKmxlbiwgaW50IGZsYWdzKQoreworICAgIGludCAgICAgICAgICAgICAgc3BhY2U7CisgICAgY2hhciAgICAgICAgICAgICpidWZfcHRyID0gTlVMTDsKKyAgICB1X2NoYXIgICAgICAgICAgKmRhdGE7CisgICAgQklPICAgICAgICAgICAgICpiaW87CisgICAgCisgICAgaWYgKChOVUxMID09IG9leHQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlmIChOVUxMID09IGJpbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBiaW8gZm9yIGV4dGVuc2lvblxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoWDUwOVYzX0VYVF9wcmludChiaW8sIG9leHQsIDAsIDApICE9IDEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBwcmludCBleHRlbnNpb24hXG4iKTsKKyAgICAgICAgQklPX3ZmcmVlKGJpbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNwYWNlID0gQklPX2dldF9tZW1fZGF0YShiaW8sICZkYXRhKTsKKyAgICBpZiAoYnVmICYmICpidWYpIHsKKyAgICAgICAgaWYgKCpsZW4gPCBzcGFjZSkgCisgICAgICAgICAgICBidWZfcHRyID0gTlVMTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnVmX3B0ciA9ICpidWY7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgYnVmX3B0ciA9IGNhbGxvYygxLHNwYWNlICsgMSk7CisgICAgCisgICAgaWYgKCFidWZfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIHNwYWNlIG9yIGVycm9yIGluIGFsbG9jYXRpb24gZm9yIGV4dGVuc3Rpb25cbiIpOworICAgICAgICBCSU9fdmZyZWUoYmlvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweShidWZfcHRyLCBkYXRhLCBzcGFjZSk7CisgICAgYnVmX3B0cltzcGFjZV0gPSAwOworICAgIGlmIChsZW4pCisgICAgICAgICpsZW4gPSBzcGFjZTsKKworICAgIEJJT192ZnJlZShiaW8pOworCisgICAgcmV0dXJuIGJ1Zl9wdHI7Cit9CisKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZXh0ZW5zaW9uOiBnZXQgZXh0ZW5zaW9uIGZpZWxkIGZyb20gY2VydAorICogQGludGVybmFsCisgKi8KKy8qKiBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaAorICogZmllbGQsIGxpa2UgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lLCBiZWxvdyAqLworWDUwOV9FWFRFTlNJT04gICoKK19jZXJ0X2dldF9leHRlbnNpb25fYXQoWDUwOSAqb2NlcnQsIGludCBwb3MsIGNoYXIgKipidWYsIGludCAqbGVuLCBpbnQgZmxhZ3MpCit7CisgICAgWDUwOV9FWFRFTlNJT04gICpvZXh0OworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvZXh0ID0gWDUwOV9nZXRfZXh0KG9jZXJ0LHBvcyk7CisgICAgaWYgKE5VTEwgPT0gb2V4dCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXh0ZW5zaW9uIG51bWJlciAlZCBub3QgZm91bmQhXG4iLCBwb3MpOworICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMob2NlcnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gb2V4dDsKK30KKworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9leHRlbnNpb246IGdldCBleHRlbnNpb24gZmllbGQgZnJvbSBjZXJ0CisgKiBAaW50ZXJuYWwKKyAqLworLyoqIGluc3RlYWQgb2YgZXhwb3NpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoCisgKiBmaWVsZCwgbGlrZSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWUsIGJlbG93ICovCitzdGF0aWMgY2hhciAqCitfY2VydF9nZXRfZXh0ZW5zaW9uX3N0cl9hdChYNTA5ICpvY2VydCwgaW50IHBvcywgY2hhciAqKmJ1ZiwgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCit7CisgICAgWDUwOV9FWFRFTlNJT04gICpvZXh0OworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvZXh0ID0gWDUwOV9nZXRfZXh0KG9jZXJ0LHBvcyk7CisgICAgaWYgKE5VTEwgPT0gb2V4dCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXh0ZW5zaW9uIG51bWJlciAlZCBub3QgZm91bmQhXG4iLCBwb3MpOworICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMob2NlcnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gX2NlcnRfZ2V0X2V4dGVuc2lvbihvZXh0LCBidWYsIGxlbiwgZmxhZ3MpOworfQorCisvKiogX2NlcnRfZ2V0X2V4dGVuc2lvbl9pZDogZ2V0IGV4dGVuc2lvbiBmaWVsZCBmcm9tIGNlcnQKKyAqIEBpbnRlcm5hbAorICovCisvKiogaW5zdGVhZCBvZiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2gKKyAqIGZpZWxkLCBsaWtlIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZSwgYmVsb3cgKi8KK1g1MDlfRVhURU5TSU9OICoKK19jZXJ0X2dldF9leHRlbnNpb25faWQoWDUwOSAqb2NlcnQsIGludCB3aGljaCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4sIGludCBmbGFncykKK3sKKyAgICBpbnQgcG9zOworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwb3MgPSBYNTA5X2dldF9leHRfYnlfTklEKG9jZXJ0LHdoaWNoLC0xKTsKKyAgICBpZiAocG9zIDwgMCkgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6bmFtZSIsICJubyBleHRlbnNpb24gJWRcbiIsIHdoaWNoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBfY2VydF9nZXRfZXh0ZW5zaW9uX2F0KG9jZXJ0LCBwb3MsIGJ1ZiwgbGVuLCBmbGFncyk7Cit9CisKKy8qKiBfY2VydF9nZXRfZXh0ZW5zaW9uX2lkX3N0cjogZ2V0IGV4dGVuc2lvbiBmaWVsZCBmcm9tIGNlcnQKKyAqIEBpbnRlcm5hbAorICovCisvKiogaW5zdGVhZCBvZiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2gKKyAqIGZpZWxkLCBsaWtlIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZSwgYmVsb3cgKi8KK3N0YXRpYyBjaGFyICoKK19jZXJ0X2dldF9leHRlbnNpb25faWRfc3RyKFg1MDkgKm9jZXJ0LCBpbnQgd2hpY2gsIGNoYXIgKipidWYsIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICAgIGludCBwb3M7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBvcyA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQob2NlcnQsd2hpY2gsLTEpOworICAgIGlmIChwb3MgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpuYW1lIiwgIm5vIGV4dGVuc2lvbiAlZFxuIiwgd2hpY2gpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIF9jZXJ0X2dldF9leHRlbnNpb25fc3RyX2F0KG9jZXJ0LCBwb3MsIGJ1ZiwgbGVuLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19leHRyYWN0X29uYW1lKGNvbnN0IEdFTkVSQUxfTkFNRSAqb25hbWUpCit7CisgICAgY2hhciAgaXBidWZbNjBdLCAqYnVmID0gTlVMTCwgKnJ0biA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBvbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzd2l0Y2ggKCBvbmFtZS0+dHlwZSApIHsKKyAgICAgICAgY2FzZSBHRU5fRU1BSUw6CisgICAgICAgIGNhc2UgR0VOX0ROUzoKKyAgICAgICAgICAgIC8qY2FzZSBHRU5fVVJJOiovCisgICAgICAgICAgICBBU04xX1NUUklOR190b19VVEY4KCh1bnNpZ25lZCBjaGFyKiopJmJ1Ziwgb25hbWUtPmQuaWE1KTsKKyAgICAgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICAgICAgcnRuID0gc3RyZHVwKGJ1Zik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdFTl9JUEFERDoKKyAgICAgICAgICAgIGlmIChvbmFtZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9PSA0KSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihpcGJ1ZiwgIiVkLiVkLiVkLiVkIiwgb25hbWUtPmQuaVBBZGRyZXNzLT5kYXRhWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgb25hbWUtPmQuaVBBZGRyZXNzLT5kYXRhWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgb25hbWUtPmQuaVBBZGRyZXNzLT5kYXRhWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgb25hbWUtPmQuaVBBZGRyZXNzLT5kYXRhWzNdKTsKKyAgICAgICAgICAgICAgICBydG4gPSBzdHJkdXAoaXBidWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKG9uYW1lLT5kLmlQQWRkcmVzcy0+bGVuZ3RoID09IDE2KSB8fAorICAgICAgICAgICAgICAgICAgICAgKG9uYW1lLT5kLmlQQWRkcmVzcy0+bGVuZ3RoID09IDIwKSkgeworICAgICAgICAgICAgICAgIGNoYXIgKnBvcyA9IGlwYnVmOworICAgICAgICAgICAgICAgIGludCAgIGo7CisgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgb25hbWUtPmQuaVBBZGRyZXNzLT5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICAqcG9zKysgPSBWQUwySEVYKG9uYW1lLT5kLmlQQWRkcmVzcy0+ZGF0YVtqXSk7CisgICAgICAgICAgICAgICAgICAgICpwb3MrKyA9ICc6JzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBvcyA9ICdcMCc7CisgICAgICAgICAgICAgICAgcnRuID0gc3RyZHVwKGlwYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBpcCBhZGRyIGxlbmd0aCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb25hbWUtPmQuaVBBZGRyZXNzLT5sZW5ndGgpKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6c2FuIiwgInVua25vd24vdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb25hbWUtPnR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBERUJVR01TR1QoKCI5Om9wZW5zc2w6Y2VydDpzYW4iLCAic2FuPSVzXG4iLCBidWYpKTsKKyAgICBpZiAoYnVmKQorICAgICAgICBPUEVOU1NMX2ZyZWUoYnVmKTsKKworICAgIHJldHVybiBydG47Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0NFUlRfR0VUX1NVQkpFQ1RBTFROQU1FUworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZTogZ2V0IHN1YmplY3RBbHROYW1lIGZvciBjZXJ0LgorICogaWYgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGFuZCBpdHMgbGVuZ3RoIGFyZSBzcGVjaWZpZWQsIHRoZXkgd2lsbCBiZQorICogdXNlZC4gb3RoZXJ3aXNlLCBhIG5ldyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQsIHdoaWNoIHRoZSBjYWxsZXIgd2lsbAorICogYmUgcmVzcG9uc2JpbGUgZm9yIHJlbGVhc2luZy4KKyAqLworY2hhciAqCituZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWVzKFg1MDkgKm9jZXJ0LCBjaGFyICoqYnVmLCBpbnQgKmxlbikKK3sKKyAgICByZXR1cm4gX2NlcnRfZ2V0X2V4dGVuc2lvbl9pZF9zdHIob2NlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBidWYsIGxlbiwgMCk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0NFUlRfR0VUX1NVQkpFQ1RBTFROQU1FUyAqLworCit2b2lkCituZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMoWDUwOSAqb2NlcnQpCit7CisgICAgWDUwOV9FWFRFTlNJT04gICpleHRlbnNpb247CisgICAgY29uc3QgY2hhciAgICAgICpleHRlbnNpb25fbmFtZTsKKyAgICBjaGFyICAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpidWZfcHRyID0gYnVmLCAqc3RyLCAqbGY7CisgICAgaW50ICAgICAgICAgICAgICBpLCBudW1fZXh0ZW5zaW9ucywgYnVmX2xlbiwgbmlkOworCisgICAgaWYgKE5VTEwgPT0gb2NlcnQpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHSUYoIjk6Y2VydDpkdW1wIikgCisgICAgICAgIDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsgLyogYmFpbCBpZiBkZWJ1ZyBub3QgZW5hYmxlZCAqLworCisgICAgbnVtX2V4dGVuc2lvbnMgPSBYNTA5X2dldF9leHRfY291bnQob2NlcnQpOworICAgIGlmICgwID09IG51bV9leHRlbnNpb25zKQorICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICAgMCBleHRlbnNpb25zXG4iKSk7CisgICAgZm9yKGkgPSAwOyBpIDwgbnVtX2V4dGVuc2lvbnM7IGkrKykgeworICAgICAgICBleHRlbnNpb24gPSBYNTA5X2dldF9leHQob2NlcnQsIGkpOworICAgICAgICBuaWQgPSBPQkpfb2JqMm5pZChYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4dGVuc2lvbikpOworICAgICAgICBleHRlbnNpb25fbmFtZSA9IE9CSl9uaWQyc24obmlkKTsKKyAgICAgICAgYnVmX2xlbiA9IHNpemVvZihidWYpOworICAgICAgICBzdHIgPSBfY2VydF9nZXRfZXh0ZW5zaW9uX3N0cl9hdChvY2VydCwgaSwgJmJ1Zl9wdHIsICZidWZfbGVuLCAwKTsKKyAgICAgICAgbGYgPSBzdHJjaHIoc3RyLCAnXG4nKTsgLyogbG9vayBmb3IgbXVsdGlsaW5lIHN0cmluZ3MgKi8KKyAgICAgICAgaWYgKE5VTEwgIT0gbGYpCisgICAgICAgICAgICAqbGYgPSAnXDAnOyAvKiBvbmx5IGxvZyBmaXJzdCBsaW5lIG9mIG11bHRpbGluZSBoZXJlICovCisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgICAlMmQ6ICVzID0gJXNcbiIsIGksCisgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX25hbWUsIHN0cikpOworICAgICAgICB3aGlsZShsZikgeyAvKiBsb2cgcmVtYWluaW5nIHBhcnRzIG9mIG11bHRpbGluZSBzdHJpbmcgKi8KKyAgICAgICAgICAgIHN0ciA9ICsrbGY7CisgICAgICAgICAgICBpZiAoKnN0ciA9PSAnXDAnKQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsZiA9IHN0cmNocihzdHIsICdcbicpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gbGYpIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKmxmID0gJ1wwJzsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgICAgICAgJXNcbiIsIHN0cikpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IF9odG1hcFtOU19IQVNIX01BWCArIDFdID0geworICAgIDAsIE5JRF9tZDVXaXRoUlNBRW5jcnlwdGlvbiwgTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICBOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sIE5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICBOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sIE5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiB9OworCitpbnQKK19uaWQyaHQoaW50IG5pZCkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGk9MTsgaTw9IE5TX0hBU0hfTUFYOyArK2kpIHsKKyAgICAgICAgaWYgKG5pZCA9PSBfaHRtYXBbaV0pCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0hUMk5JRAoraW50CitfaHQybmlkKGludCBodCkKK3sKKyAgICBpZiAoKGh0IDwgMCkgfHwgKGh0ID4gTlNfSEFTSF9NQVgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gX2h0bWFwW2h0XTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfSFQyTklEICovCisKKy8qKgorICogcmV0dXJucyBhbGxvY2F0ZWQgcG9pbnRlciBjYWxsZXIgbXVzdCBmcmVlLgorICovCitpbnQKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUoWDUwOSAqb2NlcnQpCit7CisgICAgaWYgKE5VTEwgPT0gb2NlcnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIF9uaWQyaHQoT0JKX29iajJuaWQob2NlcnQtPnNpZ19hbGctPmFsZ29yaXRobSkpOworfQorCisvKioKKyAqIHJldHVybnMgYWxsb2NhdGVkIHBvaW50ZXIgY2FsbGVyIG11c3QgZnJlZS4KKyAqLworY2hhciAqCituZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQoWDUwOSAqb2NlcnQsIGludCBhbGcpCit7CisgICAgdV9jaGFyICAgICAgICAgICBmaW5nZXJwcmludFtFVlBfTUFYX01EX1NJWkVdOworICAgIHVfaW50ICAgICAgICAgICAgZmluZ2VycHJpbnRfbGVuLCBuaWQ7CisgICAgY29uc3QgRVZQX01EICAgICpkaWdlc3Q7CisgICAgY2hhciAgICAgICAgICAgICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gb2NlcnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbmlkID0gT0JKX29iajJuaWQob2NlcnQtPnNpZ19hbGctPmFsZ29yaXRobSk7CisgICAgREVCVUdNU0dUKCgiOTpvcGVuc3NsOmZpbmdlcnByaW50IiwgImFsZyAlZCwgY2VydCBuaWQgJWQgKCVkKVxuIiwgYWxnLCBuaWQsCisgICAgICAgICAgICAgICBfbmlkMmh0KG5pZCkpKTsKKyAgICAgICAgCisgICAgaWYgKCgtMSA9PSBhbGcpICYmIG5pZCkKKyAgICAgICAgYWxnID0gX25pZDJodChuaWQpOworCisgICAgc3dpdGNoIChhbGcpIHsKKyAgICAgICAgY2FzZSBOU19IQVNIX01ENToKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJoYXNoIHR5cGUgbWQ1IG5vdCB5ZXQgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIE5TX0hBU0hfTk9ORToKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJoYXNoIHR5cGUgbm9uZSBub3Qgc3VwcG9ydGVkLiB1c2luZyBTSEExXG4iKTsKKyAgICAgICAgICAgIC8qKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgICBjYXNlIE5TX0hBU0hfU0hBMToKKyAgICAgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGExKCk7CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIEhBVkVfRVZQX1NIQTIyNAorICAgICAgICBjYXNlIE5TX0hBU0hfU0hBMjI0OgorICAgICAgICAgICAgZGlnZXN0ID0gRVZQX3NoYTIyNCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOU19IQVNIX1NIQTI1NjoKKyAgICAgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VWUF9TSEEzODQKKyAgICAgICAgY2FzZSBOU19IQVNIX1NIQTM4NDoKKyAgICAgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGEzODQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTlNfSEFTSF9TSEE1MTI6CisgICAgICAgICAgICBkaWdlc3QgPSBFVlBfc2hhNTEyKCk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBoYXNoIGFsZ29yaXRobSAlZFxuIiwgYWxnKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChfbmlkMmh0KG5pZCkgIT0gYWxnKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6ZmluZ2VycHJpbnQiLAorICAgICAgICAgICAgICAgICAgICJXQVJOSU5HOiBhbGcgJWQgZG9lcyBub3QgbWF0Y2ggY2VydCBhbGcgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgYWxnLCBfbmlkMmh0KG5pZCkpKTsKKyAgICB9CisgICAgaWYgKFg1MDlfZGlnZXN0KG9jZXJ0LGRpZ2VzdCxmaW5nZXJwcmludCwmZmluZ2VycHJpbnRfbGVuKSkgeworICAgICAgICBiaW5hcnlfdG9faGV4KGZpbmdlcnByaW50LCBmaW5nZXJwcmludF9sZW4sICZyZXN1bHQpOworICAgICAgICBpZiAoTlVMTCA9PSByZXN1bHQpCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGhleGlmeSBmaW5nZXJwcmludFxuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6b3BlbnNzbDpmaW5nZXJwcmludCIsICJmaW5nZXJwcmludCAlc1xuIiwgcmVzdWx0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZmFpbGVkIHRvIGNvbXB1dGUgZmluZ2VycHJpbnRcbiIpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnZXQgY29udGFpbmVyIG9mIG5ldHNubXBfY2VydF9tYXAgc3RydWN0dXJlcyBmcm9tIGFuIHNzbCBjb25uZWN0aW9uCisgKiBjZXJ0aWZpY2F0ZSBjaGFpbi4KKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9vcGVuc3NsX2dldF9jZXJ0X2NoYWluKFNTTCAqc3NsKQoreworICAgIFg1MDkgICAgICAgICAgICAgICAgICAqb2NlcnQsICpvY2VydF90bXA7CisgICAgU1RBQ0tfT0YoWDUwOSkgICAgICAgICpvY2hhaW47CisgICAgY2hhciAgICAgICAgICAgICAgICAgICpmaW5nZXJwcmludDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAgKmNoYWluX21hcDsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAgICAgKmNlcnRfbWFwOworICAgIGludCAgICAgICAgICAgICAgICAgICAgaTsKKworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihzc2wgIT0gTlVMTCwgTlVMTCk7CisgICAgCisgICAgaWYgKE5VTEwgPT0gKG9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpKSB7CisgICAgICAgIC8qKiBubyBwZWVyIGNlcnQgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNTTCBwZWVyIGhhcyBubyBjZXJ0aWZpY2F0ZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBERUJVR0lGKCI5OmNlcnQ6ZHVtcCIpIHsKKyAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKG9jZXJ0KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldCBmaW5nZXJwcmludCBhbmQgc2F2ZSBpdAorICAgICAqLworICAgIGZpbmdlcnByaW50ID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KG9jZXJ0LCAtMSk7CisgICAgaWYgKE5VTEwgPT0gZmluZ2VycHJpbnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBhbGxvY2F0ZSBjZXJ0IG1hcC4gRG9uJ3QgcGFzcyBpbiBmaW5nZXJwcmludCwgc2luY2UgaXQgd291bGQgc3RyZHVwCisgICAgICogaXQgYW5kIHdlJ3ZlIGFscmVhZHkgZ290IGEgY29weS4KKyAgICAgKi8KKyAgICBjZXJ0X21hcCA9IG5ldHNubXBfY2VydF9tYXBfYWxsb2MoTlVMTCwgb2NlcnQpOworICAgIGlmIChOVUxMID09IGNlcnRfbWFwKSB7CisgICAgICAgIGZyZWUoZmluZ2VycHJpbnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY2VydF9tYXAtPmZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAgY2VydF9tYXAtPmhhc2hUeXBlID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShvY2VydCk7CisKKyAgICBjaGFpbl9tYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9jcmVhdGUoMCk7IC8qIG5vIGZwIHN1YmNvbnRhaW5lciAqLworICAgIGlmIChOVUxMID09IGNoYWluX21hcCkgeworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUoY2VydF9tYXApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgQ09OVEFJTkVSX0lOU0VSVChjaGFpbl9tYXAsIGNlcnRfbWFwKTsKKworICAgIC8qKiBjaGVjayBmb3IgYSBjaGFpbiB0byBhIENBICovCisgICAgb2NoYWluID0gU1NMX2dldF9wZWVyX2NlcnRfY2hhaW4oc3NsKTsKKyAgICBpZiAoKE5VTEwgPT0gb2NoYWluKSB8fCAoMCA9PSBza19udW0oKGNvbnN0IHZvaWQgKilvY2hhaW4pKSkgeworICAgICAgICBERUJVR01TR1QoKCJzc2w6Y2VydDpjaGFpbiIsICJwZWVyIGhhcyBubyBjZXJ0IGNoYWluXG4iKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBsb29wIG92ZXIgY2hhaW4sIGFkZGluZyBmaW5nZXJwcmludCAvIGNlcnQgZm9yIGVhY2gKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVCgoInNzbDpjZXJ0OmNoYWluIiwgImV4YW1pbmluZyBjZXJ0IGNoYWluXG4iKSk7CisgICAgICAgIGZvcihpID0gMDsgaSA8IHNrX251bSgoY29uc3Qgdm9pZCAqKW9jaGFpbik7ICsraSkgeworICAgICAgICAgICAgb2NlcnRfdG1wID0gKFg1MDkqKXNrX3ZhbHVlKChjb25zdCB2b2lkICopb2NoYWluLGkpOworICAgICAgICAgICAgZmluZ2VycHJpbnQgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQob2NlcnRfdG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNfSEFTSF9TSEExKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGZpbmdlcnByaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2VydF9tYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKE5VTEwsIG9jZXJ0KTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGNlcnRfbWFwKSB7CisgICAgICAgICAgICAgICAgZnJlZShmaW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKKyAgICAgICAgICAgIGNlcnRfbWFwLT5oYXNoVHlwZSA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUob2NlcnRfdG1wKTsKKworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjaGFpbl9tYXAsIGNlcnRfbWFwKTsKKyAgICAgICAgfSAvKiBjaGFpbiBsb29wICovCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHdlIGJyb2tlIG91dCBvZiBsb29wIGJlZm9yZSBmaW5pc2hpbmcsIGNsZWFuIHVwCisgICAgICAgICAqLworICAgICAgICBpZiAoaSA8IHNrX251bSgoY29uc3Qgdm9pZCAqKW9jaGFpbikpIAorICAgICAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKGNoYWluX21hcCwgTlVMTCk7CisgICAgfSAvKiBnb3QgcGVlciBjaGFpbiAqLworCisgICAgREVCVUdNU0dUKCgic3NsOmNlcnQ6Y2hhaW4iLCAiZm91bmQgJSIgTkVUU05NUF9QUkl6ICJ1IGNlcnRzIGluIGNoYWluXG4iLAorICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY2hhaW5fbWFwKSkpOworICAgIGlmIChDT05UQUlORVJfU0laRShjaGFpbl9tYXApID09IDApIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY2hhaW5fbWFwKTsKKyAgICAgICAgY2hhaW5fbWFwID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gY2hhaW5fbWFwOworfQorCisvKgordGxzdG1DZXJ0U0FOUkZDODIyTmFtZSAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgcmZjODIyTmFtZSB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSByZmM4MjJOYW1lIGlzCisgICAgICAgICAgICAgICAgICBwYXNzZWQgdW5hbHRlcmVkIGJ1dCB0aGUgaG9zdC1wYXJ0IG9mIHRoZSBuYW1lIG11c3QKKyAgICAgICAgICAgICAgICAgIGJlIHBhc3NlZCBpbiBsb3dlciBjYXNlLgorICAgICAgICAgICAgICAgICAgRXhhbXBsZSByZmM4MjJOYW1lIEZpZWxkOiAgRm9vQmFyQEV4YW1wbGUuQ09NCisgICAgICAgICAgICAgICAgICBpcyBtYXBwZWQgdG8gdG1TZWN1cml0eU5hbWU6IEZvb0JhckBleGFtcGxlLmNvbSIKKwordGxzdG1DZXJ0U0FORE5TTmFtZSAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgZE5TTmFtZSB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSBhZnRlciBmaXJzdCBjb252ZXJ0aW5nIGl0IHRvIGFsbAorICAgICAgICAgICAgICAgICAgbG93ZXIgY2FzZS4iCisKK3Rsc3RtQ2VydFNBTklwQWRkcmVzcyAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgaVBBZGRyZXNzIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lIGJ5IHRyYW5zZm9ybWluZyB0aGUgYmluYXJ5IGVuY29kZWQKKyAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgIDEpIGZvciBJUHY0IHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgaW50byBhIGRlY2ltYWwKKyAgICAgICAgICAgICAgICAgICAgIGRvdHRlZCBxdWFkIGFkZHJlc3MgKGUuZy4gJzE5Mi4wLjIuMScpCisgICAgICAgICAgICAgICAgICAyKSBmb3IgSVB2NiBhZGRyZXNzZXMgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgIDMyLWNoYXJhY3RlciBhbGwgbG93ZXJjYXNlIGhleGFkZWNpbWFsIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgY29sb24gc2VwYXJhdG9ycy4KKworICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgbGVuZ3RoIGlzIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgICBsZW5ndGggc3VwcG9ydGVkIGJ5IHRoZSBWaWV3LUJhc2VkIEFjY2VzcyBDb250cm9sCisgICAgICAgICAgICAgICAgICAgICBNb2RlbCAoVkFDTSkuICBOb3RlIHRoYXQgdXNpbmcgYm90aCB0aGUgVHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICBTZWN1cml0eSBNb2RlbCdzIHN1cHBvcnQgZm9yIHRyYW5zcG9ydCBwcmVmaXhlcworICAgICAgICAgICAgICAgICAgICAgKHNlZSB0aGUgU05NUC1UU00tTUlCJ3MKKyAgICAgICAgICAgICAgICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IG9iamVjdCBmb3IgZGV0YWlscykKKyAgICAgICAgICAgICAgICAgICAgIHdpbGwgcmVzdWx0IGluIHNlY3VyaXR5TmFtZSBsZW5ndGhzIHRoYXQgZXhjZWVkCisgICAgICAgICAgICAgICAgICAgICB3aGF0IFZBQ00gY2FuIGhhbmRsZS4iCisKK3Rsc3RtQ2VydFNBTkFueSAiTWFwcyBhbnkgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIG1hcHBpbmcgYWxnb3JpdGhtczoKKyAgICAgICAgICAgICAgICAgIHwgcmZjODIyTmFtZSB8IHRsc3RtQ2VydFNBTlJGQzgyMk5hbWUgfAorICAgICAgICAgICAgICAgICAgfCBkTlNOYW1lICAgIHwgdGxzdG1DZXJ0U0FORE5TTmFtZSAgICB8CisgICAgICAgICAgICAgICAgICB8IGlQQWRkcmVzcyAgfCB0bHN0bUNlcnRTQU5JcEFkZHJlc3MgIHwKKyAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBtYXRjaGluZyBzdWJqZWN0QWx0TmFtZSB2YWx1ZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIG9mIHRoZSBhYm92ZSB0eXBlcyBNVVNUIGJlIHVzZWQgd2hlbgorICAgICAgICAgICAgICAgICAgZGVyaXZpbmcgdGhlIHRtU2VjdXJpdHlOYW1lLiIKKyovCitjaGFyICoKK19jZXJ0X2dldF9zYW5fdHlwZShYNTA5ICpvY2VydCwgaW50IG1hcFR5cGUpCit7CisgICAgR0VORVJBTF9OQU1FUyAgICAgICpvbmFtZXM7CisgICAgY29uc3QgR0VORVJBTF9OQU1FICpvbmFtZSA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgICAgICpidWYgPSBOVUxMLCAqbG93ZXIgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgY291bnQsIGk7CisgCisgICAgb25hbWVzID0gKEdFTkVSQUxfTkFNRVMgKilYNTA5X2dldF9leHRfZDJpKG9jZXJ0LCBOSURfc3ViamVjdF9hbHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCApOworICAgIGlmIChOVUxMID09IG9uYW1lcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjb3VudCA9IHNrX0dFTkVSQUxfTkFNRV9udW0ob25hbWVzKTsKKworICAgIGZvciAoaT0wIDsgaSA8Y291bnQ7ICsraSkgIHsKKyAgICAgICAgb25hbWUgPSBza19HRU5FUkFMX05BTUVfdmFsdWUob25hbWVzLCBpKTsKKworICAgICAgICBpZiAoR0VOX0ROUyA9PSBvbmFtZS0+dHlwZSkgeworICAgICAgICAgICAgaWYgKChUU05NX3Rsc3RtQ2VydFNBTkROU05hbWUgPT0gbWFwVHlwZSkgfHwKKyAgICAgICAgICAgICAgICAoVFNOTV90bHN0bUNlcnRTQU5BbnkgPT0gbWFwVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBsb3dlciA9IGJ1ZiA9IF9leHRyYWN0X29uYW1lKCBvbmFtZSApOzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChHRU5fSVBBREQgPT0gb25hbWUtPnR5cGUpIHsKKyAgICAgICAgICAgIGlmICgoVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3MgPT0gbWFwVHlwZSkgfHwKKyAgICAgICAgICAgICAgICAoVFNOTV90bHN0bUNlcnRTQU5BbnkgPT0gbWFwVHlwZSkpCisgICAgICAgICAgICAgICAgYnVmID0gX2V4dHJhY3Rfb25hbWUob25hbWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEdFTl9FTUFJTCA9PSBvbmFtZS0+dHlwZSkgeworICAgICAgICAgICAgaWYgKChUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWUgPT0gbWFwVHlwZSkgfHwKKyAgICAgICAgICAgICAgICAoVFNOTV90bHN0bUNlcnRTQU5BbnkgPT0gbWFwVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBidWYgPSBfZXh0cmFjdF9vbmFtZShvbmFtZSk7CisgICAgICAgICAgICAgICAgbG93ZXIgPSBzdHJjaHIoYnVmLCAnQCcpOworICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGxvd2VyKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW1haWwgJXMgaGFzIG5vICdAJyFcbiIsIGJ1ZikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKytsb3dlcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9IC8qIGZvciBsb29wICovCisKKyAgICBpZiAobG93ZXIpCisgICAgICAgIGZvciAoIDsgKmxvd2VyOyArK2xvd2VyICkKKyAgICAgICAgICAgIGlmIChpc2FzY2lpKCpsb3dlcikpCisgICAgICAgICAgICAgICAgKmxvd2VyID0gdG9sb3dlcigweEZGICYgKmxvd2VyKTsKKyAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6ZXh0ZW5zaW9uOnNhbiIsICIjJWQgdHlwZSAlZDogJXNcbiIsIGksCisgICAgICAgICAgICAgICBvbmFtZSA/IG9uYW1lLT50eXBlIDogLTEsIGJ1ZiA/IGJ1ZiA6ICJOVUxMIikpOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworY2hhciAqCituZXRzbm1wX29wZW5zc2xfZXh0cmFjdF9zZWNuYW1lKG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwICpwZWVyX2NlcnQpCit7CisgICAgY2hhciAgICAgICAqcnRuID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGNlcnRfbWFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwKKyAgICAgICAgICAgICAgICJjaGVja2luZyBwcmlvcml0eSAlZCwgc2FuIG9mIHR5cGUgJWQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgY2VydF9tYXAtPnByaW9yaXR5LCBjZXJ0X21hcC0+bWFwVHlwZSwgcGVlcl9jZXJ0LT5maW5nZXJwcmludCkpOworCisgICAgc3dpdGNoKGNlcnRfbWFwLT5tYXBUeXBlKSB7CisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQ6CisgICAgICAgICAgICBydG4gPSBzdHJkdXAoY2VydF9tYXAtPmRhdGEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWU6CisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lOgorICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzOgorICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0U0FOQW55OgorICAgICAgICAgICAgaWYgKE5VTEwgPT0gcGVlcl9jZXJ0KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLCAibm8gcGVlciBjZXJ0IGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnRuID0gX2NlcnRfZ2V0X3Nhbl90eXBlKHBlZXJfY2VydC0+b2NlcnQsIGNlcnRfbWFwLT5tYXBUeXBlKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwgIm5vIHNhbiBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyX2NlcnQtPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZToKKyAgICAgICAgICAgIHJ0biA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lKGNlcnRfbWFwLT5vY2VydCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbnQgZXh0cmFjdCBzZWNuYW1lIGZvciB1bmtub3duIG1hcCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPm1hcFR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfSAvKiBzd2l0Y2ggbWFwVHlwZSAqLworCisgICAgaWYgKHJ0bikgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsCisgICAgICAgICAgICAgICAgICAgImZvdW5kIG1hcCAlZCwgdHlwZSAlZCBmb3IgJXM6ICVzXG4iLCBjZXJ0X21hcC0+cHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPm1hcFR5cGUsIHBlZXJfY2VydC0+ZmluZ2VycHJpbnQsIHJ0bikpOworICAgICAgICBpZiAoc3RybGVuKHJ0bikgPjMyKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICJzZWNOYW1lIGxvbmdlciB0aGFuIDMyIGNoYXJzISBkcm9wcGluZy4uLlxuIikpOworICAgICAgICAgICAgU05NUF9GUkVFKHJ0bik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsCisgICAgICAgICAgICAgICAgICAgIm5vIG1hcCBvZiB0eXBlICVkIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+bWFwVHlwZSwgcGVlcl9jZXJ0LT5maW5nZXJwcmludCkpOworICAgIHJldHVybiBydG47Cit9CisKK2ludAorbmV0c25tcF9vcGVuc3NsX2NlcnRfaXNzdWVkX2J5KFg1MDkgKmlzc3VlciwgWDUwOSAqY2VydCkKK3sKKyAgICByZXR1cm4gKFg1MDlfY2hlY2tfaXNzdWVkKGlzc3VlciwgY2VydCkgPT0gWDUwOV9WX09LKTsKK30KKworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9FUlJfTE9HCit2b2lkCituZXRzbm1wX29wZW5zc2xfZXJyX2xvZyhjb25zdCBjaGFyICpwcmVmaXgpCit7CisgICAgdW5zaWduZWQgbG9uZyBlcnI7CisgICAgZm9yIChlcnIgPSBFUlJfZ2V0X2Vycm9yKCk7IGVycjsgZXJyID0gRVJSX2dldF9lcnJvcigpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzOiAlbGRcbiIsIHByZWZpeCA/IHByZWZpeDogIm9wZW5zc2wgZXJyb3IiLCBlcnIpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibGlicmFyeT0lZCwgZnVuY3Rpb249JWQsIHJlYXNvbj0lZFxuIiwKKyAgICAgICAgICAgICAgICAgRVJSX0dFVF9MSUIoZXJyKSwgRVJSX0dFVF9GVU5DKGVyciksIEVSUl9HRVRfUkVBU09OKGVycikpOworICAgIH0KK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfRVJSX0xPRyAqLworCit2b2lkCituZXRzbm1wX29wZW5zc2xfbnVsbF9jaGVja3MoU1NMICpzc2wsIGludCAqbnVsbF9hdXRoLCBpbnQgKm51bGxfY2lwaGVyKQoreworICAgIGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcjsKKyAgICBjaGFyICAgICAgICAgICB0bXBfYnVmWzEyOF0sICpjaXBoZXJfYWxnLCAqYXV0aF9hbGc7CisKKyAgICBpZiAobnVsbF9hdXRoKQorICAgICAgICAqbnVsbF9hdXRoID0gLTE7IC8qIHVua25vd24gKi8KKyAgICBpZiAobnVsbF9jaXBoZXIpCisgICAgICAgICpudWxsX2NpcGhlciA9IC0xOyAvKiB1bmtub3duICovCisgICAgaWYgKE5VTEwgPT0gc3NsKQorICAgICAgICByZXR1cm47CisKKyAgICBjaXBoZXIgPSBTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbCk7CisgICAgaWYgKE5VTEwgPT0gY2lwaGVyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2w6Y2lwaGVyIiwgIm5vIGNpcGhlciB5ZXRcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKE5FVFNOTVBfUkVNT1ZFX0NPTlNUKFNTTF9DSVBIRVIgKiwgY2lwaGVyKSwgdG1wX2J1Ziwgc2l6ZW9mKHRtcF9idWYpKTsKKyAgICAvKiogbm8gXG4gc2luY2UgdG1wX2J1ZiBhbHJlYWR5IGhhcyBvbmUgKi8KKyAgICBERUJVR01TR1RMKCgic3NsOmNpcGhlciIsICJjdXJyZW50IGNpcGhlcjogJXMiLCB0bXBfYnVmKSk7CisKKyAgICAvKgorICAgICAqIHJ1biAib3BlbnNzbCBjaXBoZXJzIC12IGVOVUxMIiBhbmQgIm9wZW5zc2wgY2lwaGVycyAtdiBhTlVMTCIKKyAgICAgKiB0byBzZWUgTlVMTCBlbmNyeXB0aW9uL2F1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuIGUuZy4KKyAgICAgKgorICAgICAqIEVYUC1BREgtUkM0LU1ENSBTU0x2MyBLeD1ESCg1MTIpIEF1PU5vbmUgRW5jPVJDNCg0MCkgTWFjPU1ENSAgZXhwb3J0CisgICAgICogTlVMTC1TSEEgICAgICAgIFNTTHYzIEt4PVJTQSAgICAgQXU9UlNBICBFbmM9Tm9uZSAgICBNYWM9U0hBMQorICAgICAqLworICAgIGlmIChudWxsX2NpcGhlcikgeworICAgICAgICBjaXBoZXJfYWxnID0gc3Ryc3RyKHRtcF9idWYsICJFbmM9Iik7CisgICAgICAgIGlmIChjaXBoZXJfYWxnKSB7CisgICAgICAgICAgICBjaXBoZXJfYWxnICs9IDQ7CisgICAgICAgICAgICBpZiAoc3RybmNtcChjaXBoZXJfYWxnLCJOb25lIiwgNCkgPT0gMCkKKyAgICAgICAgICAgICAgICAqbnVsbF9jaXBoZXIgPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpudWxsX2NpcGhlciA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bGxfYXV0aCkgeworICAgICAgICBhdXRoX2FsZyA9IHN0cnN0cih0bXBfYnVmLCAiQXU9Iik7CisgICAgICAgIGlmIChhdXRoX2FsZykgeworICAgICAgICAgICAgYXV0aF9hbGcgKz0gMzsKKyAgICAgICAgICAgIGlmIChzdHJuY21wKGF1dGhfYWxnLCJOb25lIiwgNCkgPT0gMCkKKyAgICAgICAgICAgICAgICAqbnVsbF9hdXRoID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqbnVsbF9hdXRoID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8qIE5FVFNOTVBfVVNFX09QRU5TU0wgJiYgSEFWRV9MSUJTU0wgJiYgIWRlZmluZWQoTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX1VUSUwpICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfcGFyc2VfYXJncy5jIGIvc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYwppbmRleCBhMDAzOTk1Li42ODQyZDBlIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfcGFyc2VfYXJncy5jCisrKyBiL3NubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMKQEAgLTM2LDExICszNiw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01Miw5ICs0OCw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTYyLDYgKzU1LDcgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CkBAIC0xMzAsOCArMTI0LDEwIEBACiAgICAgICAgICAgICAiICAtdCBUSU1FT1VUXHRcdHNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IChpbiBzZWNvbmRzKVxuIik7CiAgICAgZnByaW50ZihvdXRmLCAiRGVidWdnaW5nXG4iKTsKICAgICBmcHJpbnRmKG91dGYsICIgIC1kXHRcdFx0ZHVtcCBpbnB1dC9vdXRwdXQgcGFja2V0cyBpbiBoZXhhZGVjaW1hbFxuIik7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERUJVR0dJTkcKICAgICBmcHJpbnRmKG91dGYsCiAgICAgICAgICAgICAiICAtRFtUT0tFTlssLi4uXV1cdHR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIHNwZWNpZmllZCBUT0tFTnNcblx0XHRcdCAgIChBTEwgZ2l2ZXMgZXh0cmVtZWx5IHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dClcbiIpOworI2VuZGlmCiAgICAgZnByaW50ZihvdXRmLCAiR2VuZXJhbCBvcHRpb25zXG4iKTsKICAgICBmcHJpbnRmKG91dGYsCiAgICAgICAgICAgICAiICAtbSBNSUJbIiBFTlZfU0VQQVJBVE9SICIuLi5dXHRcdGxvYWQgZ2l2ZW4gbGlzdCBvZiBNSUJzIChBTEwgbG9hZHMgZXZlcnl0aGluZylcbiIpOwpAQCAtMTM5LDYgKzEzNSw4IEBACiAgICAgICAgICAgICAiICAtTSBESVJbIiBFTlZfU0VQQVJBVE9SICIuLi5dXHRcdGxvb2sgaW4gZ2l2ZW4gbGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgTUlCc1xuIik7CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogICAgIGZwcmludGYob3V0ZiwKKyAgICAgICAgICAgICIgICAgKGRlZmF1bHQ6ICVzKVxuIiwgbmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeSgpKTsKKyAgICBmcHJpbnRmKG91dGYsCiAgICAgICAgICAgICAiICAtUCBNSUJPUFRTXHRcdFRvZ2dsZSB2YXJpb3VzIGRlZmF1bHRzIGNvbnRyb2xsaW5nIE1JQiBwYXJzaW5nOlxuIik7CiAgICAgc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UoIlx0XHRcdCAgIiwgb3V0Zik7CiAjZW5kaWYKQEAgLTE5MiwzMSArMTkwLDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKkFwc3osIGNoYXIgKipYcHN6LCBpbnQgYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCAqYXJndik7CiAKLS8qCi0gKiBUaGlzIG1ldGhvZCBkb2VzIHRoZSByZWFsIHdvcmsgZm9yIHNubXBfcGFyc2VfYXJncy4gIEl0IHRha2VzIGFuCi0gKiBleHRyYSBhcmd1bWVudCwgcHJveHksIGFuZCB1c2VzIHRoaXMgdG8gZGVjaWRlIGhvdyB0byBoYW5kbGUgdGhlIGxhY2sgb2YKLSAqIG9mIGEgY29tbXVuaXR5IHN0cmluZy4KLSAqLwogaW50Ci1zbm1wX3BhcnNlX2FyZ3MoaW50IGFyZ2MsCi0gICAgICAgICAgICAgICAgY2hhciAqKmFyZ3YsCi0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgY29uc3QgY2hhciAqbG9jYWxPcHRzLAotICAgICAgICAgICAgICAgIHZvaWQgKCpwcm9jKSAoaW50LCBjaGFyICpjb25zdCAqLCBpbnQpKQorbmV0c25tcF9wYXJzZV9hcmdzKGludCBhcmdjLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKiphcmd2LAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGNvbnN0IGNoYXIgKmxvY2FsT3B0cywKKyAgICAgICAgICAgICAgICAgICB2b2lkICgqcHJvYykgKGludCwgY2hhciAqY29uc3QgKiwgaW50KSwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCiB7CiAgICAgc3RhdGljIGNoYXIJICAgKnNlbnNpdGl2ZVs0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgIGludCAgICAgICAgICAgICBhcmcsIHNwID0gMCwgemVyb19zZW5zaXRpdmUgPSAxLCB0ZXN0Y2FzZSA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGFyZywgc3AgPSAwLCB0ZXN0Y2FzZSA9IDA7CiAgICAgY2hhciAgICAgICAgICAgKmNwOwogICAgIGNoYXIgICAgICAgICAgICpBcHN6ID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAqWHBzeiA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgKkNwc3ogPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICBPcHRzW0JVRl9TSVpFXTsKLSAgICBpbnQgICAgICAgICAgICAgbG9nb3B0ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgemVyb19zZW5zaXRpdmUgPSAhKCBmbGFncyAmIE5FVFNOTVBfUEFSU0VfQVJHU19OT1pFUk8gKTsKIAogICAgIC8qCiAgICAgICogaW5pdGlhbGl6ZSBzZXNzaW9uIHRvIGRlZmF1bHQgdmFsdWVzIAogICAgICAqLwogICAgIHNubXBfc2Vzc19pbml0KHNlc3Npb24pOwotICAgIHN0cmNweShPcHRzLCAiWTpWaEhtOk06TzpJOlA6RDpkdjpyOnQ6YzpaOmU6RTpuOnU6bDp4Olg6YTpBOnA6VDotOjM6czpTOkw6Iik7CisgICAgc3RyY3B5KE9wdHMsICJZOlZoSG06TTpPOkk6UDpEOmR2OnI6dDpjOlo6ZTpFOm46dTpsOng6WDphOkE6cDpUOi06MzpMOiIpOwogICAgIGlmIChsb2NhbE9wdHMpIHsKICAgICAgICAgaWYgKHN0cmxlbihsb2NhbE9wdHMpICsgc3RybGVuKE9wdHMpID49IHNpemVvZihPcHRzKSkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRvbyBtYW55IGxvY2FsT3B0cyBpbiBzbm1wX3BhcnNlX2FyZ3MoKVxuIik7CkBAIC0yMjUsMTQgKzIxOSw2IEBACiAgICAgICAgIHN0cmNhdChPcHRzLCBsb2NhbE9wdHMpOwogICAgIH0KIAotICAgIGlmIChzdHJjbXAoYXJndlswXSwgInNubXBkLXRyYXBzZXNzIikgPT0gMCB8fAotCXN0cmNtcChhcmd2WzBdLCAic25tcGQtcHJveHkiKSAgICA9PSAwKSB7Ci0JLyogIERvbid0IHdvcnJ5IGFib3V0IHplcm9pbmcgc2Vuc2l0aXZlIHBhcmFtZXRlcnMgYXMgdGhleSBhcmUgbm90Ci0JICAgIG9uIHRoZSBjb21tYW5kIGxpbmUgYW55d2F5IChjYWxsZWQgZnJvbSBpbnRlcm5hbCBjb25maWctbGluZQotCSAgICBoYW5kbGVyKS4gICovCi0JemVyb19zZW5zaXRpdmUgPSAwOwotICAgIH0KLQogICAgIC8qCiAgICAgICogZ2V0IHRoZSBvcHRpb25zIAogICAgICAqLwpAQCAtMjQ3LDExICsyMzMsMTEgQEAKICAgICAgICAgc3dpdGNoIChhcmcpIHsKICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJoZWxwIikgPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG9wdGFyZywgInZlcnNpb24iKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIk5FVC1TTk1QIHZlcnNpb246ICVzXG4iLG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaGFuZGxlX2xvbmdfb3B0KG9wdGFyZyk7CkBAIC0yNTksMTcgKzI0NSwxNyBAQAogCiAgICAgICAgIGNhc2UgJ1YnOgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJORVQtU05NUCB2ZXJzaW9uOiAlc1xuIiwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUKTsKIAogICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnSCc6CiAgICAgICAgICAgICBpbml0X3NubXAoInNubXBhcHAiKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIHVuZGVyc3Rvb2Q6XG4iKTsKICAgICAgICAgICAgIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCIgICIpOwotICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQpOwogCiAgICAgICAgIGNhc2UgJ1knOgogICAgICAgICAgICAgbmV0c25tcF9jb25maWdfcmVtZW1iZXIob3B0YXJnKTsKQEAgLTI5MSw3ICsyNzcsNyBAQAogICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3V0cHV0IG9wdGlvbiBwYXNzZWQgdG8gLU86ICVjLlxuIiwgCiAJCQkqY3ApOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zMDAsNyArMjg2LDcgQEAKICAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGlucHV0IG9wdGlvbiBwYXNzZWQgdG8gLUk6ICVjLlxuIiwKIAkJCSpjcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMxMCwxNCArMjk2LDE5IEBACiAgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gcGFyc2luZyBvcHRpb24gcGFzc2VkIHRvIC1QOiAlYy5cbiIsICpjcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAKICAgICAgICAgY2FzZSAnRCc6CisjaWZkZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGVidWcgbm90IGNvbmZpZ3VyZWQgaW5cbiIpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOworI2Vsc2UKICAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhvcHRhcmcpOwogICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdkJzoKQEAgLTM0NCwzNSArMzM1LDcwIEBACiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB2ZXJzaW9uIHNwZWNpZmllZCBhZnRlciAtdiBmbGFnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncCc6CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IC1wIG9wdGlvbiBpcyBubyBsb25nZXIgdXNlZCAtICIpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzcGVjaWZ5IHRoZSByZW1vdGUgaG9zdCBhcyBIT1NUOlBPUlRcbiIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdUJzoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogLVQgb3B0aW9uIGlzIG5vIGxvbmdlciB1c2VkIC0gIik7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNwZWNpZnkgdGhlIHJlbW90ZSBob3N0IGFzIFRSQU5TUE9SVDpIT1NUXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbGVmdHNpZGVbU05NUF9NQVhCVUZfTUVESVVNXSwgcmlnaHRzaWRlW1NOTVBfTUFYQlVGX01FRElVTV07CisgICAgICAgICAgICBjaGFyICp0bXBjcCwgKnRtcG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogZW5zdXJlIHdlIGhhdmUgYSBwcm9wZXIgYXJndW1lbnQgKi8KKyAgICAgICAgICAgIHRtcG9wdCA9IHN0cmR1cChvcHRhcmcpOworICAgICAgICAgICAgdG1wY3AgPSBzdHJjaHIodG1wb3B0LCAnPScpOworICAgICAgICAgICAgaWYgKCF0bXBjcCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLVQgZXhwZWN0cyBhIE5BTUU9VkFMVUUgcGFpci5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICp0bXBjcCsrID0gJ1wwJzsKIAorICAgICAgICAgICAgLyogY3JlYXRlIHRoZSB0cmFuc3BvcnQgY29uZmlnIGNvbnRhaW5lciBpZiB0aGlzIGlzIHRoZSBmaXJzdCAqLworICAgICAgICAgICAgaWYgKCFzZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCgpOworICAgICAgICAgICAgICAgIHNlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgidHJhbnNwb3J0X2NvbmZpZ3VyYXRpb246ZmlmbyIpOworICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gY29udGFpbmVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZSh0bXBvcHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24tPmNvbXBhcmUgPQorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19jb21wYXJlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzZXQgdGhlIGNvbmZpZyAqLworICAgICAgICAgICAgc3RybGNweShsZWZ0c2lkZSwgdG1wb3B0LCBzaXplb2YobGVmdHNpZGUpKTsKKyAgICAgICAgICAgIHN0cmxjcHkocmlnaHRzaWRlLCB0bXBjcCwgc2l6ZW9mKHJpZ2h0c2lkZSkpOworCisgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKGxlZnRzaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0c2lkZSkpOworICAgICAgICAgICAgZnJlZSh0bXBvcHQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgc2Vzc2lvbi0+dGltZW91dCA9IGF0b2kob3B0YXJnKSAqIDEwMDAwMDBMOwotICAgICAgICAgICAgaWYgKHNlc3Npb24tPnRpbWVvdXQgPCAwIHx8ICFpc2RpZ2l0KG9wdGFyZ1swXSkpIHsKKyAgICAgICAgICAgIHNlc3Npb24tPnRpbWVvdXQgPSAobG9uZykoYXRvZihvcHRhcmcpICogMTAwMDAwMEwpOworICAgICAgICAgICAgaWYgKHNlc3Npb24tPnRpbWVvdXQgPD0gMCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0aW1lb3V0IGluIHNlY29uZHMgYWZ0ZXIgLXQgZmxhZy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgc2Vzc2lvbi0+cmV0cmllcyA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uLT5yZXRyaWVzIDwgMCB8fCAhaXNkaWdpdChvcHRhcmdbMF0pKSB7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi0+cmV0cmllcyA8IDAgfHwgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKG9wdGFyZ1swXSkpKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIC1yIGZsYWcuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzg0LDcgKzQxMCw3IEBACiAJCSAgICBzcCsrOwogCQl9IGVsc2UgewogCQkgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1jIGZsYWcuXG4iKTsKLQkJICAgIHJldHVybiAtMTsKKwkJICAgIHJldHVybiBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I7CiAJCX0KIAkgICAgfSBlbHNlIHsKIAkJQ3BzeiA9IG9wdGFyZzsKQEAgLTM5NCwxNSArNDIwLDE0IEBACiAgICAgICAgIGNhc2UgJzMnOgogCSAgICAvKiAgVE9ETzogVGhpcyBuZWVkcyB0byB6ZXJvIHRoaW5ncyB0b28uICAqLwogICAgICAgICAgICAgaWYgKHNubXB2M19vcHRpb25zKG9wdGFyZywgc2Vzc2lvbiwgJkFwc3osICZYcHN6LCBhcmdjLCBhcmd2KSA8IDApewotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ0wnOgogICAgICAgICAgICAgaWYgKHNubXBfbG9nX29wdGlvbnMob3B0YXJnLCBhcmdjLCBhcmd2KSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9Ci0JICAgIGxvZ29wdCA9IDE7CiAgICAgICAgICAgICBicmVhazsKIAogI2RlZmluZSBTTk1QVjNfQ01EX09QVElPTlMKQEAgLTQxMiw3ICs0MzcsNyBAQAogICAgICAgICAgICAgc2Vzc2lvbi0+ZW5naW5lQm9vdHMgPSBzdHJ0b3VsKG9wdGFyZywgJmNwLCAxMCk7CiAgICAgICAgICAgICBpZiAoZXJybm8gfHwgY3AgPT0gb3B0YXJnKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWVkIGVuZ2luZSBib290cyB2YWx1ZSBhZnRlciAtWiBmbGFnLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCpjcCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBjaGFyICplbmRwdHI7CkBAIC00MjAsNyArNDQ1LDcgQEAKICAgICAgICAgICAgICAgICBzZXNzaW9uLT5lbmdpbmVUaW1lID0gc3RydG91bChjcCwgJmVuZHB0ciwgMTApOwogICAgICAgICAgICAgICAgIGlmIChlcnJubyB8fCBjcCA9PSBlbmRwdHIpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWVkIGVuZ2luZSB0aW1lIGFmdGVyIFwiLVogZW5naW5lQm9vdCxcIi5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qCkBAIC00MzAsMTEgKzQ1NSwxMSBAQAogICAgICAgICAgICAgICAgIHNlc3Npb24tPmVuZ2luZVRpbWUgPSBzdHJ0b3VsKGFyZ3Zbb3B0aW5kXSwgJmNwLCAxMCk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm5vIHx8IGNwID09IGFyZ3Zbb3B0aW5kXSkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5lZWQgZW5naW5lIHRpbWUgYWZ0ZXIgXCItWiBlbmdpbmVCb290XCIuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVlZCBlbmdpbmUgdGltZSBhZnRlciBcIi1aIGVuZ2luZUJvb3RcIi5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00NDQsMTggKzQ2OSwxOCBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGVidWYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLWUgZmxhZy5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeQogICAgICAgICAgICAgICAgICAgICAoJmVidWYsICZlYnVmX2xlbiwgJmVvdXRfbGVuLCAxLCBvcHRhcmcpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIGVuZ2luZSBJRCB2YWx1ZSBhZnRlciAtZSBmbGFnLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZyZWUoZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgoZW91dF9sZW4gPCA1KSB8fCAoZW91dF9sZW4gPiAzMikpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGVuZ2luZSBJRCB2YWx1ZSBhZnRlciAtZSBmbGFnLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZyZWUoZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQgPSBlYnVmOwogICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPSBlb3V0X2xlbjsKQEAgLTQ2OCwxOCArNDkzLDE4IEBACiAKICAgICAgICAgICAgICAgICBpZiAoZWJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtRSBmbGFnLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZlYnVmLCAmZWJ1Zl9sZW4sCiAJCQkJCSZlb3V0X2xlbiwgMSwgb3B0YXJnKSkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBlbmdpbmUgSUQgdmFsdWUgYWZ0ZXIgLUUgZmxhZy5cbiIpOwogICAgICAgICAgICAgICAgICAgICBmcmVlKGVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKGVvdXRfbGVuIDwgNSkgfHwgKGVvdXRfbGVuID4gMzIpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBlbmdpbmUgSUQgdmFsdWUgYWZ0ZXIgLUUgZmxhZy5cbiIpOwogICAgICAgICAgICAgICAgICAgICBmcmVlKGVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXNzaW9uLT5jb250ZXh0RW5naW5lSUQgPSBlYnVmOwogICAgICAgICAgICAgICAgIHNlc3Npb24tPmNvbnRleHRFbmdpbmVJRExlbiA9IGVvdXRfbGVuOwpAQCAtNTAwLDcgKzUyNSw3IEBACiAJCSAgICBzcCsrOwogCQl9IGVsc2UgewogCQkgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC11IGZsYWcuXG4iKTsKLQkJICAgIHJldHVybiAtMTsKKwkJICAgIHJldHVybiBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I7CiAJCX0KIAkgICAgfSBlbHNlIHsKIAkJc2Vzc2lvbi0+c2VjdXJpdHlOYW1lID0gb3B0YXJnOwpAQCAtNTI3LDExICs1NTIsMTIgQEAKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHNlY3VyaXR5IGxldmVsIHNwZWNpZmllZCBhZnRlciAtbCBmbGFnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKIAorI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogICAgICAgICBjYXNlICdhJzoKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQogICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKG9wdGFyZywgIk1ENSIpKSB7CkBAIC01NDYsNyArNTcyLDcgQEAKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIHNwZWNpZmllZCBhZnRlciAtYSBmbGFnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU3MSw3ICs1OTcsNyBAQAogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHByaXZhY3kgcHJvdG9jb2wgc3BlY2lmaWVkIGFmdGVyIC14IGZsYWc6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNTgzLDcgKzYwOSw3IEBACiAJCSAgICBzcCsrOwogCQl9IGVsc2UgewogCQkgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1BIGZsYWcuXG4iKTsKLQkJICAgIHJldHVybiAtMTsKKwkJICAgIHJldHVybiBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I7CiAJCX0KIAkgICAgfSBlbHNlIHsKIAkJQXBzeiA9IG9wdGFyZzsKQEAgLTU5OCwxNiArNjI0LDE3IEBACiAJCSAgICBzcCsrOwogCQl9IGVsc2UgewogCQkgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1YIGZsYWcuXG4iKTsKLQkJICAgIHJldHVybiAtMTsKKwkJICAgIHJldHVybiBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I7CiAJCX0KIAkgICAgfSBlbHNlIHsKIAkJWHBzeiA9IG9wdGFyZzsKIAkgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBWM19DTURfT1BUSU9OUyAqLworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLwogCiAgICAgICAgIGNhc2UgJz8nOgotICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgpAQCAtNjE3LDkgKzY0NCw2IEBACiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJzbm1wX3BhcnNlX2FyZ3MiLCAiZmluaXNoZWQ6ICVkLyVkXG4iLCBvcHRpbmQsIGFyZ2MpKTsKICAgICAKLSAgICBpZiAoIWxvZ29wdCkKLQlzbm1wX2VuYWJsZV9zdGRlcnJsb2coKTsKLQogICAgIC8qCiAgICAgICogcmVhZCBpbiBNSUIgZGF0YWJhc2UgYW5kIGluaXRpYWxpemUgdGhlIHNubXAgbGlicmFyeQogICAgICAqLwpAQCAtNjU4LDcgKzY4Miw3IEBACiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbid0IGRldGVybWluZSBhIHZhbGlkIFNOTVAgdmVyc2lvbiBmb3IgdGhlIHNlc3Npb25cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgICAgcmV0dXJuKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKQEAgLTY2OCw2ICs2OTIsOSBAQAogICAgICAgICB9CiAgICAgfQogCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCisgICAgLyogWFhYOiB0aGlzIHNob3VsZCBpZGVhbGx5IGJlIG1vdmVkIHRvIHNubXB1c20uYyBzb21laG93ICovCisKICAgICAvKgogICAgICAqIG1ha2UgbWFzdGVyIGtleSBmcm9tIHBhc3MgcGhyYXNlcyAKICAgICAgKi8KQEAgLTcwNiw3ICs3MzMsNyBAQAogICAgICAgICAgICAgc25tcF9wZXJyb3IoYXJndlswXSk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZS4gXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChYcHN6KSB7CkBAIC03NDUsMTUgKzc3MiwxNyBAQAogICAgICAgICAgICAgc25tcF9wZXJyb3IoYXJndlswXSk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBwcml2YWN5IHBhc3MgcGhyYXNlLiBcbiIpOwotICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCisKICAgICAvKgogICAgICAqIGdldCB0aGUgaG9zdG5hbWUgCiAgICAgICovCiAgICAgaWYgKG9wdGluZCA9PSBhcmdjKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTm8gaG9zdG5hbWUgc3BlY2lmaWVkLlxuIik7Ci0gICAgICAgIHJldHVybiAoLTEpOworICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgfQogICAgIHNlc3Npb24tPnBlZXJuYW1lID0gYXJndltvcHRpbmQrK107IC8qIGhvc3RuYW1lICovCiAKQEAgLTc4Nyw3ICs4MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5jb21tdW5pdHlfbGVuID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGNvbW11bml0eSBuYW1lIHNwZWNpZmllZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KIAkgICAgfQogCX0gZWxzZSB7CkBAIC03OTksMyArODI4LDEyIEBACiAKICAgICByZXR1cm4gb3B0aW5kOwogfQorCitpbnQKK3NubXBfcGFyc2VfYXJncyhpbnQgYXJnYywKKyAgICAgICAgICAgICAgICBjaGFyICoqYXJndiwKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBjb25zdCBjaGFyICpsb2NhbE9wdHMsCisgICAgICAgICAgICAgICAgdm9pZCAoKnByb2MpIChpbnQsIGNoYXIgKmNvbnN0ICosIGludCkpCit7CisgICAgcmV0dXJuIG5ldHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBzZXNzaW9uLCBsb2NhbE9wdHMsIHByb2MsIDApOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX3NlY21vZC5jIGIvc25tcGxpYi9zbm1wX3NlY21vZC5jCmluZGV4IGFlZmU4ZjYuLjllNjBhNDIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9zZWNtb2QuYworKysgYi9zbm1wbGliL3NubXBfc2VjbW9kLmMKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc25tcF9zZWNtb2RfbGlzdCAqcmVnaXN0ZXJlZF9zZXJ2aWNlcyA9IE5VTEw7CiAKQEAgLTUxLDYgKzUzLDExIEBACiAjaW5jbHVkZSAic25tcHNtX2luaXQuaCIKIH0KIAordm9pZAorc2h1dGRvd25fc2VjbW9kKHZvaWQpCit7CisgICAgI2luY2x1ZGUgInNubXBzbV9zaHV0ZG93bi5oIgorfQogCiBpbnQKIHJlZ2lzdGVyX3NlY19tb2QoaW50IHNlY21vZCwgY29uc3QgY2hhciAqbW9kbmFtZSwKQEAgLTk5LDYgKzEwNiw4IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVucmVnaXN0ZXJfc2VjX21vZCwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9TRUNfTU9ECiBpbnQKIHVucmVnaXN0ZXJfc2VjX21vZChpbnQgc2VjbW9kKQogewpAQCAtMTIxLDYgKzEzMCw3IEBACiAgICAgICovCiAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9TRUNfTU9EICovCiAKIHZvaWQgICAgICAgICAgICAKIGNsZWFyX3NlY19tb2Qodm9pZCkKQEAgLTE1Myw2ICsxNjMsMTkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogdHJ5IHRvIHBpY2sgYSByZWFzb25hYmxlIHNlY3VyaXR5IG1vZHVsZSBkZWZhdWx0IGJhc2VkIG9uIHdoYXQgd2FzCisgICBjb21waWxlZCBpbnRvIHRoZSBuZXQtc25tcCBwYWNrYWdlICovCisjaWZkZWYgVVNNX1NFQ19NT0RFTF9OVU1CRVIKKyNkZWZpbmUgTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTCAgVVNNX1NFQ19NT0RFTF9OVU1CRVIKKyNlbGlmIGRlZmluZWQoVFNNX1NFQ19NT0RFTF9OVU1CRVIpCisjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUwgIFRTTV9TRUNfTU9ERUxfTlVNQkVSCisjZWxpZiBkZWZpbmVkKEtTTV9TRUNfTU9ERUxfTlVNQkVSKQorI2RlZmluZSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMICBLU01fU0VDX01PREVMX05VTUJFUgorI2Vsc2UKKy8qIGVsc2Ugd2UgZ2l2ZSB1cCBhbmQgbGVhdmUgaXQgYmxhbmsgKi8KKyNkZWZpbmUgTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTCAgLTEKKyNlbmRpZgorCiBzdGF0aWMgaW50CiBzZXRfZGVmYXVsdF9zZWNtb2QoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewpAQCAtMTcyLDExICsxOTUsMTEgQEAKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNlY3VyaXR5IG1vZGVsIG5hbWU6ICVzLiAgRm9yY2luZyBVU00gaW5zdGVhZC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0cik7Ci0gICAgICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IFVTTV9TRUNfTU9ERUxfTlVNQkVSOworICAgICAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TW9kZWwgPSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TW9kZWwgPSBVU01fU0VDX01PREVMX05VTUJFUjsKKyAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TW9kZWwgPSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfc2VydmljZS5jIGIvc25tcGxpYi9zbm1wX3NlcnZpY2UuYwppbmRleCAyZjUzYjc2Li41NGNiNGFjIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfc2VydmljZS5jCisrKyBiL3NubXBsaWIvc25tcF9zZXJ2aWNlLmMKQEAgLTExLDcgKzExLDcgQEAKIHsKICAgICBjaGFyKiBpdGVtOwogICAgIGNoYXIqKiByZXM7Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBjcHRyKSwgdG1wLCB0bXBsZW4pOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIHRtcCwgdG1wbGVuKTsKICAgICBpdGVtID0gc3RyZHVwKHRtcCk7CiAgICAgaWYgKGNwdHIpCiAgICAgICAgIHJlcyA9IGNyZWF0ZV93b3JkX2FycmF5X2hlbHBlcihjcHRyLCBpZHggKyAxLCB0bXAsIHRtcGxlbik7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgaWYgKHJ1biAmJiBzdHJjbXAocnVuLT5hcHBsaWNhdGlvbiwgYXBwbGljYXRpb24pID09IDApIHsKICAgICAgIGlmIChydW4tPmRvbWFpbiAhPSBOVUxMKSB7CiAgICAgICAgICAgZGVzdHJveV93b3JkX2FycmF5KHJ1bi0+ZG9tYWluKTsKLQkgIHJ1bi0+ZG9tYWluPU5VTEw7CisJICBydW4tPmRvbWFpbiA9IE5VTEw7CiAJICByZXMgPSAxOwogICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0xMjAsMTIgKzEyMCw4IEBACiAgICAgewogICAgICAgICBjaGFyKiBjcCA9IGNvcHlfbndvcmQoY3B0ciwgYXBwbGljYXRpb24sIGxlbik7CiAgICAgICAgIGlmIChjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyIHRtcGJ1ZltTVFJJTkdNQVhdOwotICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICJObyBkb21haW4ocykgaW4gcmVnaXN0cmF0aW9uIG9mIGRlZkRvbWFpbiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24pOwotICAgICAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk5vIGRvbWFpbihzKSBpbiByZWdpc3RyYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZkRvbWFpbiBcIiVzXCIiLCBhcHBsaWNhdGlvbik7CiAgICAgICAgICAgICBmcmVlKGFwcGxpY2F0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzIwLDIyICszMTYsMTUgQEAKICAgICB7CiAJY2hhciogY3AgPSBjb3B5X253b3JkKGNwdHIsIGFwcGxpY2F0aW9uLCBsZW4pOwogICAgICAgICBpZiAoY3AgPT0gTlVMTCkgewotICAgICAgICAgICAgY2hhciB0bXBidWZbU1RSSU5HTUFYXTsKLSAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAiTm8gZG9tYWluIGFuZCB0YXJnZXQgaW4gcmVnaXN0cmF0aW9uIG9mICIKLSAgICAgICAgICAgICAgICAgICAgICJkZWZUYXJnZXQgXCIlc1wiIiwgYXBwbGljYXRpb24pOwotICAgICAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk5vIGRvbWFpbiBhbmQgdGFyZ2V0IGluIHJlZ2lzdHJhdGlvbiBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmVGFyZ2V0IFwiJXNcIiIsIGFwcGxpY2F0aW9uKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCWNwID0gY29weV9ud29yZChjcCwgZG9tYWluLCBsZW4pOwogICAgICAgICBpZiAoY3AgPT0gTlVMTCkgewotICAgICAgICAgICAgY2hhciB0bXBidWZbU1RSSU5HTUFYXTsKLSAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAiTm8gdGFyZ2V0IGluIHJlZ2lzdHJhdGlvbiBvZiBkZWZUYXJnZXQgXCIlc1wiIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwgZG9tYWluKTsKLSAgICAgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKSAtIDFdID0gJ1wwJzsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJObyB0YXJnZXQgaW4gcmVnaXN0cmF0aW9uIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZUYXJnZXQgXCIlc1wiIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwgZG9tYWluKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCWNwID0gY29weV9ud29yZChjcCwgdGFyZ2V0LCBsZW4pOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jIGIvc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jCmluZGV4IGZlMGFmZmUuLmFkYTQ3ODEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF90cmFuc3BvcnQuYworKysgYi9zbm1wbGliL3NubXBfdHJhbnNwb3J0LmMKQEAgLTEsNCArMSw4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NUUklOR19ICkBAIC0xMiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPGN0eXBlLmg+CisKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKQEAgLTIyLDEwICsyOCwxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KIAotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU19ET01BSU4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNEb21haW4uaD4KKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaD4KICNlbmRpZgogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaD4KQEAgLTMzLDYgKzQzLDE1IEBACiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oPgogI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oPgorI2VuZGlmCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfSVBYX0RPTUFJTgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oPgogI2VuZGlmCkBAIC01MCw3ICs2OSwxMyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodHJhbnNwb3J0X2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkb21haW5fc3VwcG9ydCwgdHJhbnNwb3J0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZG9tYWluX3RyYW5zcG9ydF9vaWQsIHRyYW5zcG9ydF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc29ja2FkZHJfc2l6ZSwgdHJhbnNwb3J0X2FsbCkKIAogLyoKICAqIE91ciBsaXN0IG9mIHN1cHBvcnRlZCB0cmFuc3BvcnQgZG9tYWlucy4gIApAQCAtODAsMjAgKzEwNSwzMiBAQAogc3RhdGljIHZvaWQgICAgIG5ldHNubXBfdGRvbWFpbl9kdW1wKHZvaWQpOwogCiAKKwordm9pZAoraW5pdF9zbm1wX3RyYW5zcG9ydCh2b2lkKQoreworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wIiwgImRvbnRMb2FkSG9zdENvbmZpZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RPTlRfTE9BRF9IT1NUX0ZJTEVTKTsKK30KKwogLyoKICAqIE1ha2UgYSBkZWVwIGNvcHkgb2YgYW4gbmV0c25tcF90cmFuc3BvcnQuICAKICAqLwotCiBuZXRzbm1wX3RyYW5zcG9ydCAqCiBuZXRzbm1wX3RyYW5zcG9ydF9jb3B5KG5ldHNubXBfdHJhbnNwb3J0ICp0KQogewogICAgIG5ldHNubXBfdHJhbnNwb3J0ICpuID0gTlVMTDsKIAotICAgIG4gPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOwogICAgIGlmIChuID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbXNldChuLCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKIAogICAgIGlmICh0LT5kb21haW4gIT0gTlVMTCkgewogICAgICAgICBuLT5kb21haW4gPSB0LT5kb21haW47CkBAIC0xNDcsMTAgKzE4NCwxNyBAQAogICAgIG4tPmZfcmVjdiA9IHQtPmZfcmVjdjsKICAgICBuLT5mX3NlbmQgPSB0LT5mX3NlbmQ7CiAgICAgbi0+Zl9jbG9zZSA9IHQtPmZfY2xvc2U7CisgICAgbi0+Zl9jb3B5ID0gdC0+Zl9jb3B5OworICAgIG4tPmZfY29uZmlnID0gdC0+Zl9jb25maWc7CiAgICAgbi0+Zl9mbXRhZGRyID0gdC0+Zl9mbXRhZGRyOwogICAgIG4tPnNvY2sgPSB0LT5zb2NrOwogICAgIG4tPmZsYWdzID0gdC0+ZmxhZ3M7CisgICAgbi0+YmFzZV90cmFuc3BvcnQgPSBuZXRzbm1wX3RyYW5zcG9ydF9jb3B5KHQtPmJhc2VfdHJhbnNwb3J0KTsKIAorICAgIC8qIGdpdmUgdGhlIHRyYW5zcG9ydCBhIGNoYW5jZSB0byBkbyAic3BlY2lhbCB0aGluZ3MiICovCisgICAgaWYgKHQtPmZfY29weSkKKyAgICAgICAgdC0+Zl9jb3B5KHQsIG4pOworICAgICAgICAgICAgICAgIAogICAgIHJldHVybiBuOwogfQogCkBAIC0xNjIsMjAgKzIwNiwxMjggQEAKICAgICBpZiAoTlVMTCA9PSB0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodC0+bG9jYWwgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodC0+bG9jYWwpOwotICAgIH0KLSAgICBpZiAodC0+cmVtb3RlICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHQtPnJlbW90ZSk7Ci0gICAgfQotICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHQtPmRhdGEpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUodC0+bG9jYWwpOworICAgIFNOTVBfRlJFRSh0LT5yZW1vdGUpOworICAgIFNOTVBfRlJFRSh0LT5kYXRhKTsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQtPmJhc2VfdHJhbnNwb3J0KTsKKwogICAgIFNOTVBfRlJFRSh0KTsKIH0KIAorLyoKKyAqIG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nCisgKgorICogcmV0dXJucyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcGVlciBhZGRyZXNzLgorICoKKyAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYWxsb2NhdGVkIHN0cmluZy4KKyAqLworY2hhciAqCituZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZyhuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBjaGFyICAgICAgICAgICAqc3RyOworCisgICAgaWYgKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodC0+Zl9mbXRhZGRyICE9IE5VTEwpCisgICAgICAgIHN0ciA9IHQtPmZfZm10YWRkcih0LCBkYXRhLCBsZW4pOworICAgIGVsc2UKKyAgICAgICAgc3RyID0gc3RyZHVwKCI8VU5LTk9XTj4iKTsKKworICAgIHJldHVybiBzdHI7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TT0NLQUREUl9TSVpFCitpbnQKK25ldHNubXBfc29ja2FkZHJfc2l6ZShzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworICAgIGlmIChOVUxMID09IHNhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU09DS0FERFJfU0laRSAqLworICAgIAoraW50CituZXRzbm1wX3RyYW5zcG9ydF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgZHVtcFBhY2tldCwgZGVidWdMZW5ndGg7CisKKyAgICBpZiAoKE5VTEwgPT0gdCkgfHwgKE5VTEwgPT0gdC0+Zl9zZW5kKSkgeworICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0OnBrdDpzZW5kIiwgIk5VTEwgdHJhbnNwb3J0IG9yIHNlbmQgZnVuY3Rpb25cbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIGR1bXBQYWNrZXQgPSBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCk7CisgICAgZGVidWdMZW5ndGggPSAoU05NUEVSUl9TVUNDRVNTID09CisgICAgICAgICAgICAgICAgICAgZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCgidHJhbnNwb3J0OnNlbmQiKSk7CisKKyAgICBpZiAoZHVtcFBhY2tldCB8IGRlYnVnTGVuZ3RoKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nKHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYXF1ZSA/ICpvcGFxdWUgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVuZ3RoID8gKm9sZW5ndGggOiAwKTsKKyAgICAgICAgaWYgKGRlYnVnTGVuZ3RoKQorICAgICAgICAgICAgREVCVUdNU0dUX05DKCgidHJhbnNwb3J0OnNlbmQiLCIlbHUgYnl0ZXMgdG8gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgc3RyKSk7CisgICAgICAgIGlmIChkdW1wUGFja2V0KQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5TZW5kaW5nICVsdSBieXRlcyB0byAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgsIHN0cik7CisgICAgICAgIFNOTVBfRlJFRShzdHIpOworICAgIH0KKyAgICBpZiAoZHVtcFBhY2tldCkKKyAgICAgICAgeGR1bXAocGFja2V0LCBsZW5ndGgsICIiKTsKKworICAgIHJldHVybiB0LT5mX3NlbmQodCwgcGFja2V0LCBsZW5ndGgsIG9wYXF1ZSwgb2xlbmd0aCk7Cit9CisKK2ludAorbmV0c25tcF90cmFuc3BvcnRfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IGRlYnVnTGVuZ3RoOworCisgICAgaWYgKChOVUxMID09IHQpIHx8IChOVUxMID09IHQtPmZfcmVjdikpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydDpyZWN2IiwgIk5VTEwgdHJhbnNwb3J0IG9yIHJlY3YgZnVuY3Rpb25cbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIGxlbmd0aCA9IHQtPmZfcmVjdih0LCBwYWNrZXQsIGxlbmd0aCwgb3BhcXVlLCBvbGVuZ3RoKTsKKworICAgIGlmIChsZW5ndGggPD0wKQorICAgICAgICByZXR1cm4gbGVuZ3RoOyAvKiBkb24ndCBsb2cgdGltZW91dHMvc29ja2V0IGNsb3NlZCAqLworCisgICAgZGVidWdMZW5ndGggPSAoU05NUEVSUl9TVUNDRVNTID09CisgICAgICAgICAgICAgICAgICAgZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCgidHJhbnNwb3J0OnJlY3YiKSk7CisKKyAgICBpZiAoZGVidWdMZW5ndGgpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcXVlID8gKm9wYXF1ZSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZW5ndGggPyAqb2xlbmd0aCA6IDApOworICAgICAgICBpZiAoZGVidWdMZW5ndGgpCisgICAgICAgICAgICBERUJVR01TR1RfTkMoKCJ0cmFuc3BvcnQ6cmVjdiIsIiVkIGJ5dGVzIGZyb20gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgc3RyKSk7CisgICAgICAgIFNOTVBfRlJFRShzdHIpOworICAgIH0KKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9TVVBQT1JUCiBpbnQKIG5ldHNubXBfdGRvbWFpbl9zdXBwb3J0KGNvbnN0IG9pZCAqIGluX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4sCkBAIC0xOTQsMzUgKzM0NiwxNyBAQAogICAgIH0KICAgICByZXR1cm4gMDsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9TVVBQT1JUICovCiAKIAogdm9pZAogbmV0c25tcF90ZG9tYWluX2luaXQodm9pZCkKIHsKICAgICBERUJVR01TR1RMKCgidGRvbWFpbiIsICJuZXRzbm1wX3Rkb21haW5faW5pdCgpIGNhbGxlZFxuIikpOwotICAgIG5ldHNubXBfdWRwX2N0b3IoKTsKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOCi0gICAgbmV0c25tcF9zdGRfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgotICAgIG5ldHNubXBfdGNwX2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0lQWF9ET01BSU4KLSAgICBuZXRzbm1wX2lweF9jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgotICAgIG5ldHNubXBfdW5peF9jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BQUw1UFZDX0RPTUFJTgotICAgIG5ldHNubXBfYWFsNXB2Y19jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgotICAgIG5ldHNubXBfdWRwNl9jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgotICAgIG5ldHNubXBfdGNwNl9jdG9yKCk7Ci0jZW5kaWYKKworLyogaW5jbHVkZSB0aGUgY29uZmlndXJlIGdlbmVyYXRlZCBsaXN0IG9mIGNvbnN0cnVjdG9yIGNhbGxzICovCisjaW5jbHVkZSAidHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oIgorCiAgICAgbmV0c25tcF90ZG9tYWluX2R1bXAoKTsKIH0KIApAQCAtMjkwLDYgKzQyNCw4IEBACiAKIAogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRvbWFpbl91bnJlZ2lzdGVyLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1VOUkVHSVNURVIKIGludAogbmV0c25tcF90ZG9tYWluX3VucmVnaXN0ZXIobmV0c25tcF90ZG9tYWluICpuKQogewpAQCAtMzEwLDYgKzQ0Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fVU5SRUdJU1RFUiAqLwogCiAKIHN0YXRpYyBuZXRzbm1wX3Rkb21haW4gKgpAQCAtMzMwLDYgKzQ2NywyMiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50CituZXRzbm1wX2lzX2ZxZG4oY29uc3QgY2hhciAqdGhlbmFtZSkKK3sKKyAgICBpZiAoIXRoZW5hbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHdoaWxlKCp0aGVuYW1lKSB7CisgICAgICAgIGlmICgqdGhlbmFtZSAhPSAnLicgJiYgIWlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKnRoZW5hbWUpICYmCisgICAgICAgICAgICAhaXNsb3dlcigodW5zaWduZWQgY2hhcikqdGhlbmFtZSkgJiYKKyAgICAgICAgICAgICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSp0aGVuYW1lKSAmJiAqdGhlbmFtZSAhPSAnLScpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRoZW5hbWUrKzsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBMb2NhdGUgdGhlIGFwcHJvcHJpYXRlIHRyYW5zcG9ydCBkb21haW4gYW5kIGNhbGwgdGhlIGNyZWF0ZSBmdW5jdGlvbiBmb3IKICAqIGl0LgpAQCAtMzQ0LDggKzQ5Nyw4IEBACiAgICAgY29uc3QgY2hhciAgICAgICAgICphZGRyID0gTlVMTDsKICAgICBjb25zdCBjaGFyICogY29uc3QgKnNwZWMgPSBOVUxMOwogICAgIGludCAgICAgICAgICAgICAgICAgYW55X2ZvdW5kID0gMDsKLSAgICBleHRlcm4gY2hhciAqY3VyZmlsZW5hbWU7CQkvKiBmcm9tIHJlYWRfY29uZmlnLmMgKi8KLSAgICBjaGFyICAgICAgICAgKnByZXZfY3VyZmlsZW5hbWU7CisgICAgY2hhciBidWZbU05NUF9NQVhQQVRIXTsKKyAgICBjaGFyICoqbHNwZWMgPSAwOwogCiAgICAgREVCVUdNU0dUTCgoInRkb21haW4iLAogICAgICAgICAgICAgICAgICJ0ZG9tYWluX3RyYW5zcG9ydF9mdWxsKFwiJXNcIiwgXCIlc1wiLCAlZCwgXCIlc1wiLCBcIiVzXCIpXG4iLApAQCAtMzUzLDEyICs1MDYsNjEgQEAKICAgICAgICAgICAgICAgICBkZWZhdWx0X2RvbWFpbiA/IGRlZmF1bHRfZG9tYWluIDogIltOSUxdIiwKICAgICAgICAgICAgICAgICBkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOwogCi0gICAgcHJldl9jdXJmaWxlbmFtZSA9IGN1cmZpbGVuYW1lOworICAgIC8qIHNlZSBpZiB3ZSBjYW4gbG9hZCBhIGhvc3QtbmFtZSBzcGVjaWZpYyBzZXQgb2YgY29uZiBmaWxlcyAqLworICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RPTlRfTE9BRF9IT1NUX0ZJTEVTKSAmJgorICAgICAgICBuZXRzbm1wX2lzX2ZxZG4oc3RyKSkgeworICAgICAgICBzdGF0aWMgaW50IGhhdmVfYWRkZWRfaGFuZGxlciA9IDA7CisgICAgICAgIGNoYXIgKm5ld2hvc3Q7CisgICAgICAgIHN0cnVjdCBjb25maWdfbGluZSAqY29uZmlnX2hhbmRsZXJzOworICAgICAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzIGZpbGVfbmFtZXM7CisgICAgICAgIGNoYXIgKnByZXZfaG9zdG5hbWU7CisKKyAgICAgICAgLyogcmVnaXN0ZXIgYSAidHJhbnNwb3J0IiBzcGVjaWZpZXIgKi8KKyAgICAgICAgaWYgKCFoYXZlX2FkZGVkX2hhbmRsZXIpIHsKKyAgICAgICAgICAgIGhhdmVfYWRkZWRfaGFuZGxlciA9IDE7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNubXAiLCAidHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hPU1ROQU1FKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdlIHNhdmUgb24gc3BlY2lmaWMgc2V0dGluZyB0aGF0IHdlIGRvbid0IGFsbG93IHRvIGNoYW5nZQorICAgICAgICAgICBmcm9tIG9uZSB0cmFuc3BvcnQgY3JlYXRpb24gdG8gdGhlIG5leHQ7IGllLCB3ZSBkb24ndCB3YW50CisgICAgICAgICAgIHRoZSAidHJhbnNwb3J0IiBzcGVjaWZpZXIgdG8gYmUgYSBkZWZhdWx0LiAgSXQgc2hvdWxkIGJlIGEKKyAgICAgICAgICAgc2luZ2xlIGludm9jYXRpb24gdXNlIG9ubHkgKi8KKyAgICAgICAgcHJldl9ob3N0bmFtZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUpOworICAgICAgICBpZiAocHJldl9ob3N0bmFtZSkKKyAgICAgICAgICAgIHByZXZfaG9zdG5hbWUgPSBzdHJkdXAocHJldl9ob3N0bmFtZSk7CisKKyAgICAgICAgLyogcmVhZCBpbiB0aGUgaG9zdHMvU1RSSU5HLmNvbmYgZmlsZXMgKi8KKyAgICAgICAgY29uZmlnX2hhbmRsZXJzID0gcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKCJzbm1wIik7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwgImhvc3RzLyVzIiwgc3RyKTsKKyAgICAgICAgZmlsZV9uYW1lcy5maWxlSGVhZGVyID0gYnVmOworICAgICAgICBmaWxlX25hbWVzLnN0YXJ0ID0gY29uZmlnX2hhbmRsZXJzOworICAgICAgICBmaWxlX25hbWVzLm5leHQgPSBOVUxMOworICAgICAgICBERUJVR01TR1RMKCgidGRvbWFpbiIsICJjaGVja2luZyBmb3IgaG9zdCBzcGVjaWZpYyBjb25maWcgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZikpOworICAgICAgICByZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKEVJVEhFUl9DT05GSUcsICZmaWxlX25hbWVzKTsKKworICAgICAgICBpZiAoTlVMTCAhPQorICAgICAgICAgICAgKG5ld2hvc3QgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUpKSkgeworICAgICAgICAgICAgc3RybGNweShidWYsIG5ld2hvc3QsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHN0ciA9IGJ1ZjsKKyAgICAgICAgfQorCisgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfaG9zdG5hbWUpOworICAgICAgICBTTk1QX0ZSRUUocHJldl9ob3N0bmFtZSk7CisgICAgfQogCiAgICAgLyogRmlyc3QgdHJ5IC0gYXNzdW1lIHRoYXQgdGhlcmUgaXMgYSBkb21haW4gaW4gc3RyIChkb21haW46dGFyZ2V0KSAqLwogCiAgICAgaWYgKHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKmNwOworICAgICAgICBjb25zdCBjaGFyICpjcDsKICAgICAgICAgaWYgKChjcCA9IHN0cmNocihzdHIsICc6JykpICE9IE5VTEwpIHsKICAgICAgICAgICAgIGNoYXIqIG15c3RyaW5nID0gKGNoYXIqKW1hbGxvYyhjcCArIDEgLSBzdHIpOwogICAgICAgICAgICAgbWVtY3B5KG15c3RyaW5nLCBzdHIsIGNwIC0gc3RyKTsKQEAgLTM4Niw3ICs1ODgsMjEgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0ZG9tYWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgdXNlciBzcGVjaWZpZWQgZGVmYXVsdCBkb21haW4gXCIlc1wiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9kb21haW4pKTsKLSAgICAgICAgICAgIG1hdGNoID0gZmluZF90ZG9tYWluKGRlZmF1bHRfZG9tYWluKTsKKyAgICAgICAgICAgIGlmICghc3RyY2hyKGRlZmF1bHRfZG9tYWluLCAnLCcpKQorICAgICAgICAgICAgICAgIG1hdGNoID0gZmluZF90ZG9tYWluKGRlZmF1bHRfZG9tYWluKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBjb21tYXMgPSAwOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwID0gZGVmYXVsdF9kb21haW47CisgICAgICAgICAgICAgICAgY2hhciAqZHVwID0gc3RyZHVwKGRlZmF1bHRfZG9tYWluKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICgqKytjcCkgaWYgKCpjcCA9PSAnLCcpIGNvbW1hcysrOworICAgICAgICAgICAgICAgIGxzcGVjID0gY2FsbG9jKGNvbW1hcysyLCBzaXplb2YoY2hhciAqKSk7CisgICAgICAgICAgICAgICAgY29tbWFzID0gMTsKKyAgICAgICAgICAgICAgICBsc3BlY1swXSA9IHN0cnRvayhkdXAsICIsIik7CisgICAgICAgICAgICAgICAgd2hpbGUgKChsc3BlY1tjb21tYXMrK10gPSBzdHJ0b2soTlVMTCwgIiwiKSkpCisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICBzcGVjID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKWxzcGVjOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3BlYyA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucyhhcHBsaWNhdGlvbik7CiAgICAgICAgICAgICBpZiAoc3BlYyA9PSBOVUxMKSB7CkBAIC00MjYsMTIgKzY0MiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgYWRkcmVzcyBcIiVzXCJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC0+cHJlZml4WzBdLCBhZGRyID8gYWRkciA6ICJbTklMXSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyMiA/IGFkZHIyIDogIltOSUxdIikpOwotICAgICAgICAgICAgaWYgKG1hdGNoLT5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcpCisgICAgICAgICAgICBpZiAobWF0Y2gtPmZfY3JlYXRlX2Zyb21fdHN0cmluZykgeworICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0IGRvbWFpbiAlcyB1c2VzIGRlcHJlY2F0ZWQgZl9jcmVhdGVfZnJvbV90c3RyaW5nXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gtPnByZWZpeFswXSkpOwogICAgICAgICAgICAgICAgIHQgPSBtYXRjaC0+Zl9jcmVhdGVfZnJvbV90c3RyaW5nKGFkZHIsIGxvY2FsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0ID0gbWF0Y2gtPmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcoYWRkciwgbG9jYWwsIGFkZHIyKTsKICAgICAgICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICAgICAgY3VyZmlsZW5hbWUgPSBwcmV2X2N1cmZpbGVuYW1lOworICAgICAgICAgICAgICAgIGlmIChsc3BlYykgeworICAgICAgICAgICAgICAgICAgICBmcmVlKGxzcGVjWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShsc3BlYyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDMsNyArNjY2LDEwIEBACiAgICAgfQogICAgIGlmICghYW55X2ZvdW5kKQogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gc3VwcG9ydCBmb3IgYW55IGNoZWNrZWQgdHJhbnNwb3J0IGRvbWFpblxuIik7Ci0gICAgY3VyZmlsZW5hbWUgPSBwcmV2X2N1cmZpbGVuYW1lOworICAgIGlmIChsc3BlYykgeworICAgICAgICBmcmVlKGxzcGVjWzBdKTsKKyAgICAgICAgZnJlZShsc3BlYyk7CisgICAgfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NTcsNiArNjgzLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9UUkFOU1BPUlRfT0lECiBuZXRzbm1wX3RyYW5zcG9ydCAqCiBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X29pZChjb25zdCBvaWQgKiBkb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZG9tX2xlbiwKQEAgLTQ4MSw2ICs3MDgsNyBAQAogICAgIHNubXBfbG9nKExPR19FUlIsICJObyBzdXBwb3J0IGZvciByZXF1ZXN0ZWQgdHJhbnNwb3J0IGRvbWFpblxuIik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1RSQU5TUE9SVF9PSUQgKi8KIAogbmV0c25tcF90cmFuc3BvcnQqCiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuKGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBzdHIsIGludCBsb2NhbCkKQEAgLTU0NiwzICs3NzQsMTggQEAKIAogICAgIHJldHVybiAwOwogfQorCitpbnQKK25ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19jb21wYXJlKG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqcmlnaHQpIHsKKyAgICByZXR1cm4gc3RyY21wKGxlZnQtPmtleSwgcmlnaHQtPmtleSk7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqCituZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKGNoYXIgKmtleSwgY2hhciAqdmFsdWUpIHsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKmVudHJ5ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcpOworICAgIGVudHJ5LT5rZXkgPSBzdHJkdXAoa2V5KTsKKyAgICBlbnRyeS0+dmFsdWUgPSBzdHJkdXAodmFsdWUpOworICAgIHJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF92ZXJzaW9uLmMgYi9zbm1wbGliL3NubXBfdmVyc2lvbi5jCmluZGV4IDQ4NjZkZGEuLjdkMzRjMGQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF92ZXJzaW9uLmMKKysrIGIvc25tcGxpYi9zbm1wX3ZlcnNpb24uYwpAQCAtNSwxMCArNSwxMCBAQAogI2lmbmRlZiBVQ0RfQ09NUEFUSUJMRQogc3RhdGljCiAjZW5kaWYKLWNvbnN0IGNoYXIgICAgICpOZXRTbm1wVmVyc2lvbkluZm8gPSAiNS40LjQiOworY29uc3QgY2hhciAgICAgKk5ldFNubXBWZXJzaW9uSW5mbyA9IFBBQ0tBR0VfVkVSU0lPTjsKIAogY29uc3QgY2hhciAgICAgKgotbmV0c25tcF9nZXRfdmVyc2lvbigpCituZXRzbm1wX2dldF92ZXJzaW9uKHZvaWQpCiB7CiAgICAgcmV0dXJuIE5ldFNubXBWZXJzaW9uSW5mbzsKIH0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcGtzbS5jIGIvc25tcGxpYi9zbm1wa3NtLmMKaW5kZXggM2NlMjgwMi4uN2QzMDYxMiAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wa3NtLmMKKysrIGIvc25tcGxpYi9zbm1wa3NtLmMKQEAgLTksMTkgKzksMTIgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTczLDYgKzY2LDEyIEBACiAjZGVmaW5lIFRJQ0tFVF9DTElFTlQoeCkJKHgpLT5lbmNfcGFydDItPmNsaWVudAogI2VuZGlmCQkJCS8qIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwgKi8KIAorI2lmIEhBVkVfRVRfQ09NX0VSUl9ICisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorI2VsaWYgSEFWRV9DT01fRVJSX0gKKyNpbmNsdWRlIDxjb21fZXJyLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CkBAIC0xMDcsNiArMTA2LDI0IEBACiBzdGF0aWMgdm9pZCAgICAga3NtX2luY3JlbWVudF9yZWZfY291bnQobG9uZyk7CiBzdGF0aWMgc3RydWN0IGtzbV9jYWNoZV9lbnRyeSAqa3NtX2dldF9jYWNoZShsb25nKTsKIAorI2lmICFkZWZpbmVkKEhBVkVfS1JCNV9BVVRIX0NPTl9HRVRTRU5EU1VCS0VZKSAvKiBIZWltZGFsICovCisKK2tyYjVfZXJyb3JfY29kZSBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkoa3JiNV9jb250ZXh0IGNvbnRleHQsCisJCQkJa3JiNV9hdXRoX2NvbnRleHQgYXV0aF9jb250ZXh0LCAKKwkJCQlrcmI1X2tleWJsb2NrICoqa2V5YmxvY2spCit7CisgICAgcmV0dXJuIGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkoY29udGV4dCwgYXV0aF9jb250ZXh0LCBrZXlibG9jayk7Cit9CisKK2tyYjVfZXJyb3JfY29kZSBrcmI1X2F1dGhfY29uX2dldHJlY3ZzdWJrZXkoa3JiNV9jb250ZXh0IGNvbnRleHQsCisJCQkJa3JiNV9hdXRoX2NvbnRleHQgYXV0aF9jb250ZXh0LCAKKwkJCQlrcmI1X2tleWJsb2NrICoqa2V5YmxvY2spCit7CisgICAgcmV0dXJuIGtyYjVfYXV0aF9jb25fZ2V0cmVtb3Rlc3Via2V5KGNvbnRleHQsIGF1dGhfY29udGV4dCwga2V5YmxvY2spOworfQorCisjZW5kaWYKKwogI2RlZmluZSBIQVNIU0laRQk2NAogCiAvKgpAQCAtMjM5LDcgKzI1NiwxMSBAQAogICAgIGRlZi0+cGR1X2ZyZWUgPSBrc21fZnJlZV9wZHU7CiAgICAgZGVmLT5wZHVfY2xvbmUgPSBrc21fY2xvbmVfcGR1OwogCi0gICAgcmVnaXN0ZXJfc2VjX21vZChORVRTTk1QX0tTTV9TRUNVUklUWV9NT0RFTCwgImtzbSIsIGRlZik7CisgICAgcmVnaXN0ZXJfc2VjX21vZChORVRTTk1QX1NFQ19NT0RFTF9LU00sICJrc20iLCBkZWYpOworfQorCit2b2lkIHNodXRkb3duX2tzbSh2b2lkKQorewogfQogCiAvKgpAQCAtNTg4LDE1ICs2MDksMTUgQEAKICAgICAgICAgICovCiAKICAgICAgICAgaWYgKGtzbV9zdGF0ZSkKLSAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHJlbW90ZXN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0cmVjdnN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJrZXkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YmtleSk7CiAKICAgICAgICAgaWYgKHJldGNvZGUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLAotICAgICAgICAgICAgICAgICAgICAgICAgIktTTToga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIktTTToga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5IGZhaWxlZDogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKHJldGNvZGUpKSk7CiAgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoZXJyb3JfbWVzc2FnZShyZXRjb2RlKSk7CiAgICAgICAgICAgICByZXR2YWwgPSBTTk1QRVJSX0tSQjU7CkBAIC04MjUsMTMgKzg0NiwxMyBAQAogCiAgICAgaWYgKCFzdWJrZXkpIHsKICAgICAgICAgaWYgKGtzbV9zdGF0ZSkKLSAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHJlbW90ZXN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0cmVjdnN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJrZXkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YmtleSk7CiAgICAgICAgIGlmIChyZXRjb2RlKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgia3NtIiwgImtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLCAia3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5IGZhaWxlZDogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKHJldGNvZGUpKSk7CiAgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoZXJyb3JfbWVzc2FnZShyZXRjb2RlKSk7CiAgICAgICAgICAgICByZXR2YWwgPSBTTk1QRVJSX0tSQjU7CkBAIC0xNTA0LDcgKzE1MjUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0Y29kZSA9Ci0gICAgICAgICAgICBrcmI1X2F1dGhfY29uX2dldHJlbW90ZXN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LCAmc3Via2V5KTsKKyAgICAgICAgICAgIGtyYjVfYXV0aF9jb25fZ2V0cmVjdnN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LCAmc3Via2V5KTsKIAogICAgICAgICBpZiAocmV0Y29kZSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsICJLU00gcmVtb3RlIHN1YmtleSByZXRyaWV2YWwgZmFpbGVkOiAlc1xuIiwKQEAgLTE1NjEsNyArMTU4Miw3IEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLCAiS1NNOiBrcmI1X3JkX3JlcCgpIGRlY29kZWQgc3VjY2Vzc2Z1bGx5LlxuIikpOwogCiAgICAgICAgIHJldGNvZGUgPQotICAgICAgICAgICAga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LCAmc3Via2V5KTsKKyAgICAgICAgICAgIGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleShrY29udGV4dCwgYXV0aF9jb250ZXh0LCAmc3Via2V5KTsKIAogICAgICAgICBpZiAocmV0Y29kZSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsICJVbmFibGUgdG8gcmV0cmlldmUgbG9jYWwgc3Via2V5OiAlc1xuIiwKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcHRzbS5jIGIvc25tcGxpYi9zbm1wdHNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkZTY4MgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvc25tcHRzbS5jCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICogc25tcHRzbXNtLmMgLS0gSW1wbGVtZW50cyBSRkMgIzU1OTEKKyAqCisgKiBUaGlzIGNvZGUgaW1wbGVtZW50cyBhIHNlY3VyaXR5IG1vZGVsIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgdXNlcgorICogdGhhdCBleGVjdXRlZCB0aGUgYWdlbnQgaXMgdGhlIHVzZXIgd2hvJ3MgYXR0cmlidXRlcyBhcmUgcGFzc2VkIHVwCisgKiBieSB0aGUgdHJhbnNwb3J0IHVuZGVybmVhdGguICBUaGUgUkZDIGRlc2NyaWJpbmcgdGhpcyBzZWN1cml0eQorICogbW9kZWwgaXMgUkZDNTU5MS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaD4KKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1NDVFBfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1NDVFBEb21haW4uaD4KKyNlbmRpZgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfY3JlYXRlKQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgICAgICB0c21fc2Vzc2lvbl9pbml0KG5ldHNubXBfc2Vzc2lvbiAqKTsKK3N0YXRpYyB2b2lkICAgICB0c21fZnJlZV9zdGF0ZV9yZWYodm9pZCAqKTsKK3N0YXRpYyBpbnQgICAgICB0c21fY2xvbmVfcGR1KG5ldHNubXBfcGR1ICosIG5ldHNubXBfcGR1ICopOworc3RhdGljIGludCAgICAgIHRzbV9mcmVlX3BkdShuZXRzbm1wX3BkdSAqcGR1KTsKKwordV9pbnQgbmV4dF9zZXNzX2lkID0gMTsKKworLyoqIEluaXRpYWxpemUgdGhlIFRTTSBzZWN1cml0eSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfdHNtKHZvaWQpCit7CisgICAgc3RydWN0IHNubXBfc2VjbW9kX2RlZiAqZGVmOworICAgIGludCByZXQ7CisKKyAgICBkZWYgPSBTTk1QX01BTExPQ19TVFJVQ1Qoc25tcF9zZWNtb2RfZGVmKTsKKworICAgIGlmICghZGVmKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbWFsbG9jIHNubXBfc2VjbW9kIHN0cnVjdCwgbm90IHJlZ2lzdGVyaW5nIFRTTVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWYtPmVuY29kZV9yZXZlcnNlID0gdHNtX3JnZW5lcmF0ZV9vdXRfbXNnOworICAgIGRlZi0+ZGVjb2RlID0gdHNtX3Byb2Nlc3NfaW5fbXNnOworICAgIGRlZi0+c2Vzc2lvbl9vcGVuID0gdHNtX3Nlc3Npb25faW5pdDsKKyAgICBkZWYtPnBkdV9mcmVlX3N0YXRlX3JlZiA9IHRzbV9mcmVlX3N0YXRlX3JlZjsKKyAgICBkZWYtPnBkdV9jbG9uZSA9IHRzbV9jbG9uZV9wZHU7CisgICAgZGVmLT5wZHVfZnJlZSA9IHRzbV9mcmVlX3BkdTsKKyAgICBkZWYtPnByb2JlX2VuZ2luZWlkID0gc25tcHYzX3Byb2JlX2NvbnRleHRFbmdpbmVJRF9yZmM1MzQzOworCisgICAgREVCVUdNU0dUTCgoInRzbSIsInJlZ2lzdGVyaW5nIG91cnNlbHZlc1xuIikpOworICAgIHJldCA9IHJlZ2lzdGVyX3NlY19tb2QoU05NUF9TRUNfTU9ERUxfVFNNLCAidHNtIiwgZGVmKTsKKyAgICBERUJVR01TR1RMKCgidHNtIiwiIHJldHVybmVkICVkXG4iLCByZXQpKTsKKworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCAic25tcCIsICJ0c21Vc2VUcmFuc3BvcnRQcmVmaXgiLAorCQkJICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCk7Cit9CisKKy8qKiBzaHV0ZG93biB0aGUgVFNNIHNlY3VyaXR5IG1vZHVsZSAqLwordm9pZAorc2h1dGRvd25fdHNtKHZvaWQpCit7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNwZWNpZmljIHNlc3Npb24gaW5mb3JtYXRpb24gKHJpZ2h0IG5vdywganVzdCBzZXQgdXAgdGhpbmdzIHRvCisgKiBub3QgZG8gYW4gZW5naW5lSUQgcHJvYmUpCisgKi8KKworc3RhdGljIGludAordHNtX3Nlc3Npb25faW5pdChuZXRzbm1wX3Nlc3Npb24gKiBzZXNzKQoreworICAgIERFQlVHTVNHVEwoKCJ0c20iLAorICAgICAgICAgICAgICAgICJUU006IFJlYWNoZWQgb3VyIHNlc3Npb24gaW5pdGlhbGl6YXRpb24gY2FsbGJhY2tcbiIpKTsKKworICAgIHNlc3MtPmZsYWdzIHw9IFNOTVBfRkxBR1NfRE9OVF9QUk9CRTsKKworICAgIC8qIFhYWDogbGlrZWx5IG5lZWRlZCBmb3Igc29tZXRoaW5nOiAqLworICAgIC8qCisgICAgdHNtc2Vzc2lvbiA9IHNlc3MtPnNlY3VyaXR5SW5mbyA9CisgICAgaWYgKCF0c21zZXNzaW9uKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgKi8KKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKiBGcmVlIG91ciBzdGF0ZSBpbmZvcm1hdGlvbiAodGhpcyBpcyBvbmx5IGRvbmUgb24gdGhlIGFnZW50IHNpZGUpICovCitzdGF0aWMgdm9pZAordHNtX2ZyZWVfc3RhdGVfcmVmKHZvaWQgKnB0cikKK3sKKyAgICBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlICp0c21SZWY7CisKKyAgICBpZiAoTlVMTCA9PSBwdHIpCisgICAgICAgIHJldHVybjsKKworICAgIHRzbVJlZiA9IChuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlICopIHB0cjsKKyAgICAvKiB0aGUgdG1TdGF0ZVJlZiBpcyBhbHdheXMgdGFrZW4gY2FyZSBvZiBieSB0aGUgbm9ybWFsIFBEVSwgc2luY2UgdGhpcworICAgICAgIGlzIGp1c3QgYSByZWZlcmVuY2UgdG8gdGhhdCBvbmUgKi8KKyAgICAvKiBET04nVCBETzogU05NUF9GUkVFKHRzbVJlZi0+dG1TdGF0ZVJlZik7ICovCisgICAgLyogU05NUF9GUkVFKHRzbVJlZik7ICA/ICovCit9CisKK3N0YXRpYyBpbnQKK3RzbV9mcmVlX3BkdShuZXRzbm1wX3BkdSAqcGR1KQoreworICAgIC8qIGZyZWUgdGhlIHNlY3VyaXR5IHJlZmVyZW5jZSAqLworICAgIGlmIChwZHUtPnNlY3VyaXR5U3RhdGVSZWYpIHsKKyAgICAgICAgdHNtX2ZyZWVfc3RhdGVfcmVmKHBkdS0+c2VjdXJpdHlTdGF0ZVJlZik7CisgICAgICAgIHBkdS0+c2VjdXJpdHlTdGF0ZVJlZiA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiogVGhpcyBpcyBjYWxsZWQgd2hlbiBhIFBEVSBpcyBjbG9uZWQgKHRvIGluY3JlYXNlIHJlZmVyZW5jZSBjb3VudHMpICovCitzdGF0aWMgaW50Cit0c21fY2xvbmVfcGR1KG5ldHNubXBfcGR1ICpwZHUsIG5ldHNubXBfcGR1ICpwZHUyKQoreworICAgIG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UgKm9sZHJlZiwgKm5ld3JlZjsKKworICAgIG9sZHJlZiA9IHBkdS0+c2VjdXJpdHlTdGF0ZVJlZjsKKyAgICBpZiAoIW9sZHJlZikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIG5ld3JlZiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSk7CisgICAgREVCVUdNU0dUTCgoInRzbSIsICJjbG9uZWQgYXMgcGR1PSVwLCByZWY9JXAgKG9sZHJlZj0lcClcbiIsCisgICAgICAgICAgICBwZHUyLCBuZXdyZWYsIHBkdTItPnNlY3VyaXR5U3RhdGVSZWYpKTsKKyAgICBpZiAoIW5ld3JlZikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIAorICAgIG1lbWNweShuZXdyZWYsIG9sZHJlZiwgc2l6ZW9mKCpvbGRyZWYpKTsKKworICAgIHBkdTItPnNlY3VyaXR5U3RhdGVSZWYgPSBuZXdyZWY7CisKKyAgICAvKiB0aGUgdG0gc3RhdGUgcmVmZXJlbmNlIGlzIGp1c3QgYSBsaW5rIHRvIHRoZSBvbmUgaW4gdGhlIHBkdSwKKyAgICAgICB3aGljaCB3YXMgYWxyZWFkeSBjb3BpZWQgYnkgc25tcF9jbG9uZV9wZHUgYmVmb3JlIGhhbmRpbmcgaXQgdG8KKyAgICAgICB1cy4gKi8KKworICAgIG5ld3JlZi0+dG1TdGF0ZVJlZiA9IG5ldHNubXBfbWVtZHVwKG9sZHJlZi0+dG1TdGF0ZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKm9sZHJlZi0+dG1TdGF0ZVJlZikpOworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qIGFzbi4xIGVhc2luZyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUU01CVUlMRF9PUl9FUlIoZnVuLCBhcmdzLCBtc2csIGRlc2MpICAgICAgIFwKKyAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCBkZXNjKTsgXAorICAgIHJjID0gZnVuIGFyZ3M7ICAgICAgICAgICAgXAorICAgIERFQlVHSU5ERU5UTEVTUygpOyAgICAgICAgXAorICAgIGlmIChyYyA9PSAwKSB7IFwKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsbXNnKSk7IFwKKyAgICAgICAgcmV0dmFsID0gU05NUEVSUl9UT09fTE9ORzsgXAorICAgICAgICBnb3RvIG91dGVycjsgXAorICAgIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0c21fZ2VuZXJhdGVfb3V0X21zZworICoKKyAqIFBhcmFtZXRlcnM6CisgKgkoU2VlIGxpc3QgYmVsb3cuLi4pCisgKgorICogUmV0dXJuczoKKyAqCVNOTVBFUlJfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3MuCisgKgkuLi4gYW5kIG90aGVycworICoKKyAqCisgKiBHZW5lcmF0ZSBhbiBvdXRnb2luZyBtZXNzYWdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK3RzbV9yZ2VuZXJhdGVfb3V0X21zZyhzdHJ1Y3Qgc25tcF9zZWNtb2Rfb3V0Z29pbmdfcGFyYW1zICpwYXJtcykKK3sKKyAgICB1X2NoYXIgICAgICAgICAqKndob2xlTXNnID0gcGFybXMtPndob2xlTXNnOworICAgIHNpemVfdAkgICAqb2Zmc2V0ID0gcGFybXMtPndob2xlTXNnT2Zmc2V0OworICAgIGludCByYzsKKyAgICAKKyAgICBzaXplX3QgICAgICAgICAqd2hvbGVNc2dMZW4gPSBwYXJtcy0+d2hvbGVNc2dMZW47CisgICAgbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSAqdHNtU2VjUmVmOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZjsKKyAgICBpbnQgICAgICAgICAgICAgdG1TdGF0ZVJlZkxvY2FsID0gMDsKKyAgICAKKyAgICBERUJVR01TR1RMKCgidHNtIiwgIlN0YXJ0aW5nIFRTTSBwcm9jZXNzaW5nXG4iKSk7CisKKyAgICAvKiBpZiB3ZSBoYXZlIHRoaXMsIHRoZW4gdGhpcyBtZXNzYWdlIHRvIGJlIHNlbnQgaXMgaW4gcmVzcG9uc2UgdG8KKyAgICAgICBzb21ldGhpbmcgdGhhdCBjYW1lIGluIGVhcmxpZXIgYW5kIHRoZSB0c21TZWNSZWYgd2FzIGNyZWF0ZWQgYnkKKyAgICAgICB0aGUgdHNtX3Byb2Nlc3NfaW5fbXNnLiAqLworICAgIHRzbVNlY1JlZiA9IHBhcm1zLT5zZWNTdGF0ZVJlZjsKKyAgICAKKyAgICBpZiAodHNtU2VjUmVmKSB7CisgICAgICAgIC8qIDQuMiwgc3RlcCAxOiBJZiB0aGVyZSBpcyBhIHNlY3VyaXR5U3RhdGVSZWZlcmVuY2UgKFJlc3BvbnNlCisgICAgICAgICAgIG9yIFJlcG9ydCBtZXNzYWdlKSwgdGhlbiB0aGlzIFNlY3VyaXR5IE1vZGVsIHVzZXMgdGhlCisgICAgICAgICAgIGNhY2hlZCBpbmZvcm1hdGlvbiByYXRoZXIgdGhhbiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkKKyAgICAgICAgICAgdGhlIEFTSS4gKi8KKworICAgICAgICAvKiA0LjIsIHN0ZXAgMTogRXh0cmFjdCB0aGUgdG1TdGF0ZVJlZmVyZW5jZSBmcm9tIHRoZQorICAgICAgICAgICBzZWN1cml0eVN0YXRlUmVmZXJlbmNlIGNhY2hlLiAqLworICAgICAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oTlVMTCAhPSB0c21TZWNSZWYtPnRtU3RhdGVSZWYsIFNOTVBFUlJfR0VORVJSKTsKKyAgICAgICAgdG1TdGF0ZVJlZiA9IHRzbVNlY1JlZi0+dG1TdGF0ZVJlZjsKKworICAgICAgICAvKiA0LjIgc3RlcCAxOiBTZXQgdGhlIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCB0byB0aGUgdmFsdWUKKyAgICAgICAgICAgb2YgdGhlIGV4dHJhY3RlZCB0bVRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwuICovCisgICAgICAgIHRtU3RhdGVSZWYtPnJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgPSB0bVN0YXRlUmVmLT50cmFuc3BvcnRTZWN1cml0eUxldmVsOworCisgICAgICAgIC8qIDQuMiBzdGVwIDE6IFNldCB0aGUgdG1TYW1lU2VjdXJpdHkgcGFyYW1ldGVyIGluIHRoZQorICAgICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlIHRvIHRydWUuICovCisgICAgICAgIHRtU3RhdGVSZWYtPnNhbWVTZWN1cml0eSA9IE5FVFNOTVBfVE1fVVNFX1NBTUVfU0VDVVJJVFk7CisKKyAgICAgICAgLyogNC4yIHN0ZXAgMTogVGhlIGNhY2hlZFNlY3VyaXR5RGF0YSBmb3IgdGhpcyBtZXNzYWdlIGNhbgorICAgICAgICAgICBub3cgYmUgZGlzY2FyZGVkLiAqLworICAgICAgICBTTk1QX0ZSRUUocGFybXMtPnNlY1N0YXRlUmVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiA0LjIsIHN0ZXAgMjogSWYgdGhlcmUgaXMgbm8gc2VjdXJpdHlTdGF0ZVJlZmVyZW5jZSAoZS5nLiwgYQorICAgICAgICAgICBSZXF1ZXN0LXR5cGUgb3IgTm90aWZpY2F0aW9uIG1lc3NhZ2UpLCB0aGVuIGNyZWF0ZSBhCisgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUuICovCisgICAgICAgIHRtU3RhdGVSZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihOVUxMICE9IHRtU3RhdGVSZWYsIFNOTVBFUlJfR0VORVJSKTsKKyAgICAgICAgdG1TdGF0ZVJlZkxvY2FsID0gMTsKKworICAgICAgICAvKiBYWFg6IHdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGlzIHJlYWxseSBpbiBvdXIgaW1wbGVtZW50YXRpb24gKi8KKyAgICAgICAgLyogNC4yLCBzdGVwIDI6IFNldCB0bVRyYW5zcG9ydERvbWFpbiB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgdHJhbnNwb3J0RG9tYWluLCB0bVRyYW5zcG9ydEFkZHJlc3MgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgIHRyYW5zcG9ydEFkZHJlc3MgKi8KKworICAgICAgICAvKiA0LjIsIHN0ZXAgMjogYW5kIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgc2VjdXJpdHlMZXZlbC4gKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+cmVxdWVzdGVkU2VjdXJpdHlMZXZlbCA9IHBhcm1zLT5zZWNMZXZlbDsKKworICAgICAgICAvKiA0LjIsIHN0ZXAgMjogU2V0IHRoZSB0cmFuc2FjdGlvbi1zcGVjaWZpYyB0bVNhbWVTZWN1cml0eQorICAgICAgICAgICBwYXJhbWV0ZXIgdG8gZmFsc2UuICovCisgICAgICAgIHRtU3RhdGVSZWYtPnNhbWVTZWN1cml0eSA9IE5FVFNOTVBfVE1fU0FNRV9TRUNVUklUWV9OT1RfUkVRVUlSRUQ7CisKKyAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCkpIHsKKyAgICAgICAgICAgIC8qIFhYWDogcHJvYmFibHkgc2hvdWxkbid0IGJlIGEgaGFyZC1jb2RlZCBsaXN0IG9mCisgICAgICAgICAgICAgICBzdXBwb3J0ZWQgdHJhbnNwb3J0cyAqLworICAgICAgICAgICAgLyogNC4yLCBzdGVwIDI6IElmIHRoZSBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeAorICAgICAgICAgICAgICAgb2JqZWN0IGlzIHNldCB0byB0cnVlLCB0aGVuIHVzZSB0aGUgdHJhbnNwb3J0RG9tYWluIHRvCisgICAgICAgICAgICAgICBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIHByZWZpeC4gKi8KKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeDsKKyAgICAgICAgICAgIGlmIChzdHJuY21wKCJzc2g6IixwYXJtcy0+c2Vzc2lvbi0+cGVlcm5hbWUsNCkgPT0gMCkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAic3NoOiI7CisgICAgICAgICAgICBlbHNlIGlmIChzdHJuY21wKCJkdGxzOiIscGFybXMtPnNlc3Npb24tPnBlZXJuYW1lLDUpID09IDApCisgICAgICAgICAgICAgICAgcHJlZml4ID0gImR0bHM6IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAoInRsczoiLHBhcm1zLT5zZXNzaW9uLT5wZWVybmFtZSw0KSA9PSAwKQorICAgICAgICAgICAgICAgIHByZWZpeCA9ICJ0bHM6IjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBJZiB0aGUgcHJlZml4IGxvb2t1cCBmYWlscyBmb3IgYW55CisgICAgICAgICAgICAgICAgICAgcmVhc29uLCB0aGVuIHRoZSBzbm1wVHNtVW5rbm93blByZWZpeGVzIGNvdW50ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICBjYWxsaW5nIG1vZHVsZSwgYW5kIG1lc3NhZ2UgcHJvY2Vzc2luZyBzdG9wcy4gKi8KKyAgICAgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UU01fU05NUFRTTVVOS05PV05QUkVGSVhFUyk7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogNC4yLCBzdGVwIDI6IElmIHRoZSBsb29rdXAgc3VjY2VlZHMsIGJ1dCB0aGVyZSBpcyBubworICAgICAgICAgICAgICAgcHJlZml4IGluIHRoZSBzZWN1cml0eU5hbWUsIG9yIHRoZSBwcmVmaXggcmV0dXJuZWQgZG9lcworICAgICAgICAgICAgICAgbm90IG1hdGNoIHRoZSBwcmVmaXggaW4gdGhlIHNlY3VyaXR5TmFtZSwgb3IgdGhlIGxlbmd0aAorICAgICAgICAgICAgICAgb2YgdGhlIHByZWZpeCBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gNCBVUy1BU0NJSQorICAgICAgICAgICAgICAgYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgc25tcFRzbUludmFsaWRQcmVmaXhlcyBjb3VudGVyIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvcgorICAgICAgICAgICAgICAgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGluZyBtb2R1bGUsIGFuZAorICAgICAgICAgICAgICAgbWVzc2FnZSBwcm9jZXNzaW5nIHN0b3BzLiAqLworICAgICAgICAgICAgaWYgKHN0cmNocihwYXJtcy0+c2VjTmFtZSwgJzonKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgc3RybGVuKHByZWZpeCkrMSA+PSBwYXJtcy0+c2VjTmFtZUxlbiB8fAorICAgICAgICAgICAgICAgIHN0cm5jbXAocGFybXMtPnNlY05hbWUsIHByZWZpeCwgc3RybGVuKHByZWZpeCkpICE9IDAgfHwKKyAgICAgICAgICAgICAgICBwYXJtcy0+c2VjTmFtZVtzdHJsZW4ocHJlZml4KV0gIT0gJzonKSB7CisgICAgICAgICAgICAgICAgLyogTm90ZTogc2luY2Ugd2UncmUgYXNzaWdpbmcgdGhlIHByZWZpeGVzIGFib3ZlIHRoZQorICAgICAgICAgICAgICAgICAgIHByZWZpeCBsZW5ndGhzIGFsd2F5cyBtZWV0IHRoZSAxLTQgY3JpdGVyaWEgKi8KKyAgICAgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UU01fU05NUFRTTUlOVkFMSURQUkVGSVhFUyk7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogNC4yLCBzdGVwIDI6IFN0cmlwIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZml4IGFuZAorICAgICAgICAgICAgICAgdHJhaWxpbmcgJzonIGNoYXJhY3RlciAoVVMtQVNDSUkgMHgzYSkgZnJvbSB0aGUKKyAgICAgICAgICAgICAgIHNlY3VyaXR5TmFtZS4gIFNldCB0bVNlY3VyaXR5TmFtZSB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgIHNlY3VyaXR5TmFtZS4gKi8KKyAgICAgICAgICAgIG1lbWNweSh0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgcGFybXMtPnNlY05hbWUgKyBzdHJsZW4ocHJlZml4KSArIDEsCisgICAgICAgICAgICAgICAgICAgcGFybXMtPnNlY05hbWVMZW4gLSBzdHJsZW4ocHJlZml4KSAtIDEpOworICAgICAgICAgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID0gcGFybXMtPnNlY05hbWVMZW4gLSBzdHJsZW4ocHJlZml4KSAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBJZiB0aGUgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggb2JqZWN0IGlzCisgICAgICAgICAgICAgICBzZXQgdG8gZmFsc2UsIHRoZW4gc2V0IHRtU2VjdXJpdHlOYW1lIHRvIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgb2Ygc2VjdXJpdHlOYW1lLiAqLworICAgICAgICAgICAgbWVtY3B5KHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSwgcGFybXMtPnNlY05hbWUsCisgICAgICAgICAgICAgICAgICAgcGFybXMtPnNlY05hbWVMZW4pOworICAgICAgICAgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID0gcGFybXMtPnNlY05hbWVMZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0cnVuY2F0ZSB0aGUgc2VjdXJpdHkgbmFtZSB3aXRoIGEgJ1wwJyBmb3Igc2FmZXR5ICovCisgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lW3RtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZUxlbl0gPSAnXDAnOworCisgICAgLyogNC4yLCBzdGVwIDM6IFNldCBzZWN1cml0eVBhcmFtZXRlcnMgdG8gYSB6ZXJvLWxlbmd0aCBPQ1RFVAorICAgICAqICBTVFJJTkcgKCcwNDAwJykuCisgICAgICovCisgICAgREVCVUdEVU1QSEVBREVSKCJzZW5kIiwgInRzbSBzZWN1cml0eSBwYXJhbWV0ZXJzIik7CisgICAgcmMgPSBhc25fcmVhbGxvY19yYnVpbGRfaGVhZGVyKHdob2xlTXNnLCB3aG9sZU1zZ0xlbiwgb2Zmc2V0LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIpIChBU05fVU5JVkVSU0FMIHwgQVNOX1BSSU1JVElWRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBU05fT0NURVRfU1RSKSwgMCk7CisgICAgREVCVUdJTkRFTlRMRVNTKCk7CisgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsICJidWlsZGluZyBtc2dTZWN1cml0eVBhcmFtZXRlcnMgZmFpbGVkLlxuIikpOworICAgICAgICBpZiAodG1TdGF0ZVJlZkxvY2FsKQorICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gU05NUEVSUl9UT09fTE9ORzsKKyAgICB9CisgICAgCisgICAgLyogNC4yLCBzdGVwIDQ6IENvbWJpbmUgdGhlIG1lc3NhZ2UgcGFydHMgaW50byBhIHdob2xlTXNnIGFuZAorICAgICAgIGNhbGN1bGF0ZSB3aG9sZU1zZ0xlbmd0aC4KKyAgICAgKi8KKyAgICB3aGlsZSAoKCp3aG9sZU1zZ0xlbiAtICpvZmZzZXQpIDwgcGFybXMtPmdsb2JhbERhdGFMZW4pIHsKKyAgICAgICAgaWYgKCFhc25fcmVhbGxvYyh3aG9sZU1zZywgd2hvbGVNc2dMZW4pKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidHNtIiwgImJ1aWxkaW5nIGdsb2JhbCBkYXRhIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgIGlmICh0bVN0YXRlUmVmTG9jYWwpCisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVE9PX0xPTkc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqb2Zmc2V0ICs9IHBhcm1zLT5nbG9iYWxEYXRhTGVuOworICAgIG1lbWNweSgqd2hvbGVNc2cgKyAqd2hvbGVNc2dMZW4gLSAqb2Zmc2V0LAorICAgICAgICAgICBwYXJtcy0+Z2xvYmFsRGF0YSwgcGFybXMtPmdsb2JhbERhdGFMZW4pOworCisgICAgLyogNC4yLCBzdGVwIDU6IFRoZSB3aG9sZU1zZywgd2hvbGVNc2dMZW5ndGgsIHNlY3VyaXR5UGFyYW1ldGVycywKKyAgICAgICBhbmQgdG1TdGF0ZVJlZmVyZW5jZSBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcgTWVzc2FnZQorICAgICAgIFByb2Nlc3NpbmcgTW9kZWwgd2l0aCB0aGUgc3RhdHVzSW5mb3JtYXRpb24gc2V0IHRvIHN1Y2Nlc3MuICovCisKKyAgICAvKiBGb3IgdGhlIE5ldC1TTk1QIGltcGxlbWFudGlvbiB0aGF0IGFjdHVhbGx5IG1lYW5zIHdlIHN0YXJ0CisgICAgICAgZW5jb2RpbmcgdGhlIGZ1bGwgcGFja2V0IHNlcXVlbmNlIGZyb20gaGVyZSBiZWZvcmUgcmV0dXJuaW5nIGl0ICovCisKKyAgICAvKgorICAgICAqIFRvdGFsIHBhY2tldCBzZXF1ZW5jZS4gIAorICAgICAqLworICAgIHJjID0gYXNuX3JlYWxsb2NfcmJ1aWxkX3NlcXVlbmNlKHdob2xlTXNnLCB3aG9sZU1zZ0xlbiwgb2Zmc2V0LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIpIChBU05fU0VRVUVOQ0UgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fQ09OU1RSVUNUT1IpLCAqb2Zmc2V0KTsKKyAgICBpZiAocmMgPT0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwgImJ1aWxkaW5nIG1hc3RlciBwYWNrZXQgc2VxdWVuY2UgZmFpbGVkLlxuIikpOworICAgICAgICBpZiAodG1TdGF0ZVJlZkxvY2FsKQorICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gU05NUEVSUl9UT09fTE9ORzsKKyAgICB9CisKKyAgICBpZiAocGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEgJiYKKyAgICAgICAgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEgIT0gdG1TdGF0ZVJlZikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidHNtOiBuZWVkZWQgdG8gZnJlZSB0cmFuc3BvcnQgZGF0YVxuIik7CisgICAgICAgIFNOTVBfRlJFRShwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSk7CisgICAgfQorCisgICAgLyogcHV0IHRoZSB0cmFuc3BvcnQgc3RhdGUgcmVmZXJlbmNlIGludG8gdGhlIFBEVSBmb3IgdGhlIHRyYW5zcG9ydCAqLworICAgIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhID0gbmV0c25tcF9tZW1kdXAodG1TdGF0ZVJlZiwgc2l6ZW9mKCp0bVN0YXRlUmVmKSk7CisgICAgaWYgKCFwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRzbTogbWFsbG9jIGZhaWx1cmVcbiIpOworICAgIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCA9IHNpemVvZigqdG1TdGF0ZVJlZik7CisKKyAgICBpZiAodG1TdGF0ZVJlZkxvY2FsKQorICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgREVCVUdNU0dUTCgoInRzbSIsICJUU00gcHJvY2Vzc2luZyBjb21wbGV0ZWQuXG4iKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0c21fcHJvY2Vzc19pbl9tc2cKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJKFNlZSBsaXN0IGJlbG93Li4uKQorICoKKyAqIFJldHVybnM6CisgKglUU01fRVJSX05PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgT24gc3VjY2Vzcy4KKyAqCVRTTV9FUlJfR0VORVJJQ19FUlJPUgorICoJVFNNX0VSUl9VTlNVUFBPUlRFRF9TRUNVUklUWV9MRVZFTAorICoKKyAqCisgKiBQcm9jZXNzZXMgYW4gaW5jb21pbmcgbWVzc2FnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50Cit0c21fcHJvY2Vzc19pbl9tc2coc3RydWN0IHNubXBfc2VjbW9kX2luY29taW5nX3BhcmFtcyAqcGFybXMpCit7CisgICAgdV9jaGFyIHR5cGVfdmFsdWU7CisgICAgc2l6ZV90IHJlbWFpbmluZzsKKyAgICB1X2NoYXIgKmRhdGFfcHRyOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZjsKKyAgICBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlICp0c21TZWNSZWY7CisgICAgdV9jaGFyICAgICAgICAgIG91ckVuZ2luZUlEW1NOTVBfTUFYX0VOR19TSVpFXTsKKyAgICBzdGF0aWMgc2l6ZV90ICAgb3VyRW5naW5lSURfbGVuID0gc2l6ZW9mKG91ckVuZ2luZUlEKTsKKyAgICAKKyAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAxOiBTZXQgdGhlIHNlY3VyaXR5RW5naW5lSUQgdG8gdGhlIGxvY2FsCisgICAgICAgc25tcEVuZ2luZUlELiAqLworICAgIG91ckVuZ2luZUlEX2xlbiA9CisgICAgICAgIHNubXB2M19nZXRfZW5naW5lSUQoKHVfY2hhciopIG91ckVuZ2luZUlELCBvdXJFbmdpbmVJRF9sZW4pOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihvdXJFbmdpbmVJRF9sZW4gIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJFbmdpbmVJRF9sZW4gPD0gKnBhcm1zLT5zZWNFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworICAgIG1lbWNweShwYXJtcy0+c2VjRW5naW5lSUQsIG91ckVuZ2luZUlELCAqcGFybXMtPnNlY0VuZ2luZUlETGVuKTsKKworICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDI6IElmIHRtU3RhdGVSZWZlcmVuY2UgZG9lcyBub3QgcmVmZXIgdG8gYQorICAgICAgIGNhY2hlIGNvbnRhaW5pbmcgdmFsdWVzIGZvciB0bVRyYW5zcG9ydERvbWFpbiwKKyAgICAgICB0bVRyYW5zcG9ydEFkZHJlc3MsIHRtU2VjdXJpdHlOYW1lLCBhbmQKKyAgICAgICB0bVRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwsIHRoZW4gdGhlIHNubXBUc21JbnZhbGlkQ2FjaGVzIGNvdW50ZXIKKyAgICAgICBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGluZworICAgICAgIG1vZHVsZSwgYW5kIFNlY3VyaXR5IE1vZGVsIHByb2Nlc3Npbmcgc3RvcHMgZm9yIHRoaXMKKyAgICAgICBtZXNzYWdlLiAqLworICAgIGlmICghcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEgfHwKKyAgICAgICAgc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSkgIT0KKyAgICAgICAgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSB7CisgICAgICAgIC8qIGlmIHdlJ3JlIG5vdCBjb21pbmcgaW4gb3ZlciBhIHByb3BlciB0cmFuc3BvcnQ7IGJhaWwhICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCJpbXByb3BlciB0cmFuc3BvcnQgZGF0YVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHRtU3RhdGVSZWYgPSAobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICopIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhOworICAgIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhID0gTlVMTDsKKworICAgIGlmICh0bVN0YXRlUmVmID09IE5VTEwgfHwKKyAgICAgICAgLyogbm90IG5lZWRlZDogdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluID09IE5VTEwgfHwgKi8KKyAgICAgICAgLyogbm90IG5lZWRlZDogdG1TdGF0ZVJlZi0+dHJhbnNwb3J0QWRkcmVzcyA9PSBOVUxMIHx8ICovCisgICAgICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZVswXSA9PSAnXDAnCisgICAgICAgICkgeworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UU01fU05NUFRTTUlOVkFMSURDQUNIRVMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMzogQ29weSB0aGUgdG1TZWN1cml0eU5hbWUgdG8gc2VjdXJpdHlOYW1lLiAqLworICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCkpIHsKKyAgICAgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMzoKKyAgICAgICAgICBJZiB0aGUgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggb2JqZWN0IGlzIHNldCB0byB0cnVlLCB0aGVuCisgICAgICAgICAgdXNlIHRoZSB0bVRyYW5zcG9ydERvbWFpbiB0byBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIHByZWZpeC4KKyAgICAgICAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKyAgICAgICAgLyoKKyAgICAgICAgICBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLXwKKyAgICAgICAgICAgfCBzbm1wVExTVENQRG9tYWluICAgfCB0bHM6ICB8CisgICAgICAgICAgIHwgc25tcERUTFNVRFBEb21haW4gIHwgZHRsczogfAorICAgICAgICAgICB8IHNubXBTU0hEb21haW4gICAgICB8IHNzaDogIHwKKyAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS18CisgICAgICAgICovCisgICAgICAgIAorICAgICAgICBpZiAodG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIFhYWDogc25tcFRzbUludmFsaWRDYWNoZXMrKyA/Pz8gKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFhYWDogY2FjaGUgaW4gc2Vzc2lvbiEgKi8KKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOCisgICAgICAgIGlmIChuZXRzbm1wX29pZF9lcXVhbHMobmV0c25tcF9zbm1wU1NIRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc25tcFNTSERvbWFpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbkxlbikgPT0gMCkgeworICAgICAgICAgICAgcHJlZml4ID0gInNzaCI7CisgICAgICAgIH0KKyNlbmRpZiAvKiAgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTiAqLworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKyAgICAgICAgaWYgKG5ldHNubXBfb2lkX2VxdWFscyhuZXRzbm1wRFRMU1VEUERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbkxlbikgPT0gMCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBwcmVmaXggPSAiZHRscyI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTiAqLworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorICAgICAgICBpZiAobmV0c25tcF9vaWRfZXF1YWxzKG5ldHNubXBUTFNUQ1BEb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbkxlbikgPT0gMCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBwcmVmaXggPSAidGxzIjsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4gKi8KKworICAgICAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAzOgorICAgICAgICAgIElmIHRoZSBwcmVmaXggbG9va3VwIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGVuIHRoZQorICAgICAgICAgIHNubXBUc21Vbmtub3duUHJlZml4ZXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IKKyAgICAgICAgICBpbmRpY2F0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nIG1vZHVsZSwgYW5kIG1lc3NhZ2UKKyAgICAgICAgICBwcm9jZXNzaW5nIHN0b3BzLgorICAgICAgICAqLworICAgICAgICBpZiAocHJlZml4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RTTV9TTk1QVFNNVU5LTk9XTlBSRUZJWEVTKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDM6CisgICAgICAgICAgSWYgdGhlIGxvb2t1cCBzdWNjZWVkcyBidXQgdGhlIHByZWZpeCBsZW5ndGggaXMgbGVzcyB0aGFuIDEgb3IKKyAgICAgICAgICBncmVhdGVyIHRoYW4gNCBvY3RldHMsIHRoZW4gdGhlIHNubXBUc21JbnZhbGlkUHJlZml4ZXMgY291bnRlcgorICAgICAgICAgIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvciBpbmRpY2F0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nCisgICAgICAgICAgbW9kdWxlLCBhbmQgbWVzc2FnZSBwcm9jZXNzaW5nIHN0b3BzLgorICAgICAgICAqLworI2lmZGVmIE5PVF9VU0lOR19IQVJEQ09ERURfUFJFRklYRVMKKyAgICAgICAgLyogdGhlIGFib3ZlIGNvZGUgYWN0dWFsbHkgZW5zdXJlcyB0aGlzIHdpbGwgbmV2ZXIgaGFwcGVuIGFzCisgICAgICAgICAgIHdlIGRvbid0IHN1cHBvcnQgYSBkeW5hbWljIHByZWZpeCBkYXRhYmFzZSB3aGVyZSB0aGlzIG1pZ2h0CisgICAgICAgICAgIGhhcHBlbi4gKi8KKyAgICAgICAgaWYgKHN0cmxlbihwcmVmaXgpIDwgMSB8fCBzdHJsZW4ocHJlZml4KSA+IDQpIHsKKyAgICAgICAgICAgIC8qIFhYWDogc25tcFRzbUludmFsaWRQcmVmaXhlcysrICovCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMzoKKyAgICAgICAgICBTZXQgdGhlIHNlY3VyaXR5TmFtZSB0byBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgcHJlZml4LCBhCisgICAgICAgICAgJzonIGNoYXJhY3RlciAoVVMtQVNDSUkgMHgzYSksIGFuZCB0aGUgdG1TZWN1cml0eU5hbWUuCisgICAgICAgICovCisgICAgICAgIHNucHJpbnRmKHBhcm1zLT5zZWNOYW1lLCAqcGFybXMtPnNlY05hbWVMZW4sCisgICAgICAgICAgICAgICAgICIlczolcyIsIHByZWZpeCwgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBpZiB0aGUgdXNlIHByZWZpeCBmbGFnIHdhc24ndCBzZXQsIGRvIGEgc3RyYWlnaHQgY29weSAqLworICAgICAgICBzdHJuY3B5KHBhcm1zLT5zZWNOYW1lLCB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsICpwYXJtcy0+c2VjTmFtZUxlbik7CisgICAgfQorCisgICAgLyogc2V0IHRoZSBsZW5ndGggb2YgdGhlIHNlY3VyaXR5IG5hbWUgKi8KKyAgICAqcGFybXMtPnNlY05hbWVMZW4gPSBzdHJsZW4ocGFybXMtPnNlY05hbWUpOworICAgIERFQlVHTVNHVEwoKCJ0c20iLCAidXNlcjogJXMvJWRcbiIsIHBhcm1zLT5zZWNOYW1lLCAoaW50KSpwYXJtcy0+c2VjTmFtZUxlbikpOworCisgICAgLyogU2VjdGlvbiA1LjIgU3RlcCA0OgorICAgICAgIENvbXBhcmUgdGhlIHZhbHVlIG9mIHRtVHJhbnNwb3J0U2VjdXJpdHlMZXZlbCBpbiB0aGUKKyAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2VjdXJpdHlMZXZlbAorICAgICAgIHBhcmFtZXRlciBwYXNzZWQgaW4gdGhlIHByb2Nlc3NJbmNvbWluZ01zZyBBU0kuICBJZiBzZWN1cml0eUxldmVsCisgICAgICAgc3BlY2lmaWVzIHByaXZhY3kgKFByaXYpIGFuZCB0bVRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgc3BlY2lmaWVzCisgICAgICAgbm8gcHJpdmFjeSAobm9Qcml2KSwgb3IgaWYgc2VjdXJpdHlMZXZlbCBzcGVjaWZpZXMgYXV0aGVudGljYXRpb24KKyAgICAgICAoYXV0aCkgYW5kIHRtVHJhbnNwb3J0U2VjdXJpdHlMZXZlbCBzcGVjaWZpZXMgbm8gYXV0aGVudGljYXRpb24KKyAgICAgICAobm9BdXRoKSB3YXMgcHJvdmlkZWQgYnkgdGhlIFRyYW5zcG9ydCBNb2RlbCwgdGhlbiB0aGUKKyAgICAgICBzbm1wVHNtSW5hZGVxdWF0ZVNlY3VyaXR5TGV2ZWxzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yCisgICAgICAgaW5kaWNhdGlvbiAodW5zdXBwb3J0ZWRTZWN1cml0eUxldmVsKSB0b2dldGhlciB3aXRoIHRoZSBPSUQgYW5kCisgICAgICAgdmFsdWUgb2YgdGhlIGluY3JlbWVudGVkIGNvdW50ZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcKKyAgICAgICBtb2R1bGUsIGFuZCBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgcHJvY2Vzc2luZyBzdG9wcyBmb3IgdGhpcworICAgICAgIG1lc3NhZ2UuKi8KKyAgICBpZiAocGFybXMtPnNlY0xldmVsID4gdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbCkgeworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UU01fU05NUFRTTUlOQURFUVVBVEVTRUNVUklUWUxFVkVMUyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiaW5hZGVxdWF0ZSBzZWN1cml0eSBsZXZlbDogJWRcbiIsIHBhcm1zLT5zZWNMZXZlbCkpOworICAgICAgICAvKiBuZXQtc25tcCByZXR1cm5zIGVycm9yIGNvZGVzIG5vdCBPSURzLCB3aGljaCBhcmUgZGVhbHQgd2l0aCBsYXRlciAqLworICAgICAgICByZXR1cm4gU05NUEVSUl9VTlNVUFBPUlRFRF9TRUNfTEVWRUw7CisgICAgfQorCisgICAgLyogU2VjdGlvbiA1LjIgU3RlcCA1CisgICAgICAgVGhlIHRtU3RhdGVSZWZlcmVuY2UgaXMgY2FjaGVkIGFzIGNhY2hlZFNlY3VyaXR5RGF0YSBzbyB0aGF0IGEKKyAgICAgICBwb3NzaWJsZSByZXNwb25zZSB0byB0aGlzIG1lc3NhZ2Ugd2lsbCB1c2UgdGhlIHNhbWUgc2VjdXJpdHkKKyAgICAgICBwYXJhbWV0ZXJzLiAgVGhlbiBzZWN1cml0eVN0YXRlUmVmZXJlbmNlIGlzIHNldCBmb3Igc3Vic2VxdWVudAorICAgICAgIHJlZmVyZW5jZXMgdG8gdGhpcyBjYWNoZWQgZGF0YS4KKyAgICAqLworICAgIGlmIChOVUxMID09ICpwYXJtcy0+c2VjU3RhdGVSZWYpIHsKKyAgICAgICAgdHNtU2VjUmVmID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0c21TZWNSZWYgPSAqcGFybXMtPnNlY1N0YXRlUmVmOworICAgIH0KKworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihOVUxMICE9IHRzbVNlY1JlZiwgU05NUEVSUl9HRU5FUlIpOworCisgICAgKnBhcm1zLT5zZWNTdGF0ZVJlZiA9IHRzbVNlY1JlZjsKKyAgICB0c21TZWNSZWYtPnRtU3RhdGVSZWYgPSB0bVN0YXRlUmVmOworCisgICAgLyogSWYgdGhpcyBkaWQgbm90IGNvbWUgdGhyb3VnaCBhIHR1bm5lbGVkIGNvbm5lY3Rpb24sIHRoaXMKKyAgICAgICBzZWN1cml0eSBtb2RlbCBpcyBpbmFwcHJvcHJpYXRlIChhbmQgd291bGQgYmUgYSBIVUdFIHNlY3VyaXR5CisgICAgICAgaG9sZSB0byBhc3N1bWUgb3RoZXJ3aXNlKS4gIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGEgZG91YmxlIGNoZWNrCisgICAgICAgc2luY2UgdGhlIHBkdSB3b3VsZG4ndCBoYXZlIHRyYW5zcG9ydCBkYXRhIG90aGVyd2lzZS4gIEJ1dCB0aGlzCisgICAgICAgaXMgc2FmZXIgdGhvdWdoIGlzIGZ1bmN0aW9uYWxseSBhbiBleHRyYSBzdGVwIGJleW9uZCB0aGUgVFNNCisgICAgICAgUkZDLiAqLworICAgIERFQlVHTVNHVEwoKCJ0c20iLCJjaGVja2luZyBob3cgd2UgZ290IGhlcmVcbiIpKTsKKyAgICBpZiAoIShwYXJtcy0+cGR1LT5mbGFncyAmIFVDRF9NU0dfRkxBR19UVU5ORUxFRCkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsIiAgcGR1IG5vdCB0dW5uZWxlZFxuIikpOworICAgICAgICBpZiAoIShwYXJtcy0+c2Vzcy0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsIiAgc2Vzc2lvbiBub3QgdHVubmVsZWRcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9BVVRIRU5USUNBVElPTkZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsIiAgYnV0IHNlc3Npb24gaXMgdHVubmVsZWRcbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwiICB0dW5uZWxlZFxuIikpOworICAgIH0KKworICAgIC8qIFNlY3Rpb24gNS4yLCBTdGVwIDY6CisgICAgICAgVGhlIHNjb3BlZFBEVSBjb21wb25lbnQgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHdob2xlTXNnLiAqLworICAgIC8qCisgICAgICogRWF0IHRoZSBmaXJzdCBvY3RldCBoZWFkZXIuCisgICAgICovCisgICAgcmVtYWluaW5nID0gcGFybXMtPndob2xlTXNnTGVuIC0gKHBhcm1zLT5zZWNQYXJhbXMgLSBwYXJtcy0+d2hvbGVNc2cpOworICAgIGlmICgoZGF0YV9wdHIgPSBhc25fcGFyc2Vfc2VxdWVuY2UocGFybXMtPnNlY1BhcmFtcywgJnJlbWFpbmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVNOX1VOSVZFUlNBTCB8IEFTTl9QUklNSVRJVkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHNtIGZpcnN0IG9jdGV0IikpID09IE5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUkVUVVJOIHBhcnNlIGVycm9yIAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfQVNOX1BBUlNFX0VSUjsKKyAgICB9CisgICAgCisgICAgKnBhcm1zLT5zY29wZWRQZHUgPSBkYXRhX3B0cjsKKyAgICAqcGFybXMtPnNjb3BlZFBkdUxlbiA9IHBhcm1zLT53aG9sZU1zZ0xlbiAtIChkYXRhX3B0ciAtIHBhcm1zLT53aG9sZU1zZyk7CisKKyAgICAvKiBTZWN0aW9uIDUuMiwgU3RlcCA3OgorICAgICAgIFRoZSBtYXhTaXplUmVzcG9uc2VTY29wZWRQRFUgaXMgY2FsY3VsYXRlZC4gIFRoaXMgaXMgdGhlIG1heGltdW0KKyAgICAgICBzaXplIGFsbG93ZWQgZm9yIGEgc2NvcGVkUERVIGZvciBhIHBvc3NpYmxlIFJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICovCisgICAgKnBhcm1zLT5tYXhTaXplUmVzcG9uc2UgPSBwYXJtcy0+bWF4TXNnU2l6ZTsgLyogWFhYICovCisKKyAgICAvKiBTZWN0aW9uIDUuMiwgU3RlcCA4OgorICAgICAgIFRoZSBzdGF0dXNJbmZvcm1hdGlvbiBpcyBzZXQgdG8gc3VjY2VzcyBhbmQgYSByZXR1cm4gaXMgbWFkZSB0bworICAgICAgIHRoZSBjYWxsaW5nIG1vZHVsZSBwYXNzaW5nIGJhY2sgdGhlIE9VVCBwYXJhbWV0ZXJzIGFzIHNwZWNpZmllZAorICAgICAgIGluIHRoZSBwcm9jZXNzSW5jb21pbmdNc2cgQVNJLgorICAgICovCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcHVzbS5jIGIvc25tcGxpYi9zbm1wdXNtLmMKaW5kZXggMzg5YjY3Ny4uNmE5Y2VjMyAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wdXNtLmMKKysrIGIvc25tcGxpYi9zbm1wdXNtLmMKQEAgLTIyLDIxICsyMiwxNSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzgsNiArNzIsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fYWxsLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9zdXBwb3J0LCB1c21fYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1c21fc3VwcG9ydCkKKwogb2lkICAgICAgICAgICAgIHVzbU5vQXV0aFByb3RvY29sWzEwXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTAsIDEsIDEsIDEgfTsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQogb2lkICAgICAgICAgICAgIHVzbUhNQUNNRDVBdXRoUHJvdG9jb2xbMTBdID0KQEAgLTk2LDYgKzk1LDE2IEBACiBzdGF0aWMgdV9pbnQgICAgZHVtbXlfZXRpbWUsIGR1bW15X2Vib290OyAgICAgICAvKiBGb3IgSVNFTkdJTkVLTk9XTigpLiAqLwogCiAvKgorICogU2V0IHVwIGRlZmF1bHQgc25tcHYzIHBhcmFtZXRlciB2YWx1ZSBzdG9yYWdlLgorICovCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCitzdGF0aWMgY29uc3Qgb2lkICpkZWZhdWx0QXV0aFR5cGUgPSBOVUxMOworc3RhdGljIHNpemVfdCAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IDA7CitzdGF0aWMgY29uc3Qgb2lkICpkZWZhdWx0UHJpdlR5cGUgPSBOVUxMOworc3RhdGljIHNpemVfdCAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IDA7CisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCisKKy8qCiAgKiBHbG9iYWxzLgogICovCiBzdGF0aWMgdV9pbnQgICAgc2FsdF9pbnRlZ2VyOwpAQCAtMTY1LDYgKzE3NCwyMSBAQAogfQogCiAKK2ludAorZnJlZV9lbmdpbmV0aW1lX29uX3NodXRkb3duKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwgdm9pZCAqc2VydmVyYXJnLAorCQkJICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICB1X2NoYXIgZW5naW5lSURbU05NUF9NQVhfRU5HX1NJWkVdOworICAgIHNpemVfdCBlbmdpbmVJRF9sZW4gPSBzaXplb2YoZW5naW5lSUQpOworCisgICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJmcmVlIGVuZ2luZXRpbWUgY2FsbGJhY2sgY2FsbGVkXG4iKSk7CisKKyAgICBlbmdpbmVJRF9sZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKGVuZ2luZUlELCBlbmdpbmVJRF9sZW4pOworICAgIGlmIChlbmdpbmVJRF9sZW4gPiAwKQorCWZyZWVfZW5naW5ldGltZShlbmdpbmVJRCwgZW5naW5lSURfbGVuKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RydWN0IHVzbVN0YXRlUmVmZXJlbmNlICoKIHVzbV9tYWxsb2NfdXNtU3RhdGVSZWZlcmVuY2Uodm9pZCkKIHsKQEAgLTUwMiw3ICs1MjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBlbmdCdGxlbiwgICAvKiAgIGZvciBmaWVsZHMgd2l0aGluICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgZW5nVG1sZW4sICAgLyogICBtc2dTZWN1cml0eVBhcmFtZXRlcnMgcG9ydGlvbiBvZiAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIG5hbWVsZW4sICAgIC8qICAgU05NUHYzTWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBhdXRobGVuLCBwcml2bGVuOworICAgICAgICAgICAgICAgICAgICBhdXRobGVuLCBwcml2bGVuLCByZXQ7CiAKICAgICAvKgogICAgICAqIElmIGRvaW5nIGF1dGhlbnRpY2F0aW9uLCBtc2dBdXRoUGFybUxlbiA9IDEyIGVsc2UgbXNnQXV0aFBhcm1MZW4gPSAwLgpAQCAtNTE4LDcgKzU0Miw3IEBACiAgICAgICogQ2FsY3VsYXRlIGxlbmd0aHMuCiAgICAgICovCiAgICAgaWYgKChlbmdJRGxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2VjRW5naW5lSURMZW4pKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc2VjRW5naW5lSURMZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC01MzQsMzEgKzU1OCwzNSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKChuYW1lbGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsIDAsIHNlY05hbWVMZW4pKSA9PSAtMSkgeworICAgIGlmICgobmFtZWxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBzZWNOYW1lTGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICgoYXV0aGxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAqbXNnQXV0aFBhcm1MZW4pKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAqbXNnQXV0aFBhcm1MZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKChwcml2bGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICptc2dQcml2UGFybUxlbikpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICptc2dQcml2UGFybUxlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAqc2VxX2xlbiA9CiAgICAgICAgIGVuZ0lEbGVuICsgZW5nQnRsZW4gKyBlbmdUbWxlbiArIG5hbWVsZW4gKyBhdXRobGVuICsgcHJpdmxlbjsKIAotICAgIGlmICgoKm90c3RsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX1NFUVVFTkNFLCAwLCAqc2VxX2xlbikpID09IC0xKSB7CisgICAgaWYgKChyZXQgPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX1NFUVVFTkNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAqc2VxX2xlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgKm90c3RsZW4gPSAoc2l6ZV90KXJldDsKIAotICAgIGlmICgoKm1zZ1NlY1Bhcm1MZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICpvdHN0bGVuKSkgPT0gLTEpIHsKKyAgICBpZiAoKHJldCA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAqb3RzdGxlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgKm1zZ1NlY1Bhcm1MZW4gPSAoc2l6ZV90KXJldDsKIAogICAgICphdXRoUGFyYW1zT2Zmc2V0ID0gZ2xvYmFsRGF0YUxlbiArICsoKm1zZ1NlY1Bhcm1MZW4gLSAqc2VxX2xlbikKICAgICAgICAgKyBlbmdJRGxlbiArIGVuZ0J0bGVuICsgZW5nVG1sZW4gKyBuYW1lbGVuCkBAIC01ODMsMTAgKzYxMSwxMCBAQAogICAgIGlmIChzZWNMZXZlbCA9PSBTTk1QX1NFQ19MRVZFTF9BVVRIUFJJVikgewogICAgICAgICBzY29wZWRQZHVMZW4gPSBST1VORFVQOChzY29wZWRQZHVMZW4pOwogCi0gICAgICAgIGlmICgoKmRhdGFsZW4gPQotICAgICAgICAgICAgIGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLCAwLCBzY29wZWRQZHVMZW4pKSA9PSAtMSkgeworICAgICAgICBpZiAoKHJldCA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLCBOVUxMLCBzY29wZWRQZHVMZW4pKSA9PSAtMSkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgICpkYXRhbGVuID0gKHNpemVfdClyZXQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgKmRhdGFsZW4gPSBzY29wZWRQZHVMZW47CiAgICAgfQpAQCAtMTM4Nyw3ICsxNDE1LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgc3Bfb2Zmc2V0ID0gMCwgbWFjX29mZnNldCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKIAotICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVVNNIHByb2Nlc3NpbmcgaGFzIGJlZ3VuIChvZmZzZXQgJWQpXG4iLCAqb2Zmc2V0KSk7CisgICAgREVCVUdNU0dUTCgoInVzbSIsICJVU00gcHJvY2Vzc2luZyBoYXMgYmVndW4gKG9mZnNldCAlZClcbiIsIChpbnQpKm9mZnNldCkpOwogCiAgICAgaWYgKHNlY1N0YXRlUmVmICE9IE5VTEwpIHsKICAgICAgICAgLyoKQEAgLTE1MTUsNyArMTU0Myw3IEBACiAgICAgICAgIGlmICgoY2lwaGVydGV4dCA9ICh1X2NoYXIgKikgbWFsbG9jKGNpcGhlcnRleHRsZW4pKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtYWxsb2MgJWQgYnl0ZXMgZm9yIGVuY3J5cHRlZCBQRFVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0bGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWNpcGhlcnRleHRsZW4pKTsKICAgICAgICAgICAgIHVzbV9mcmVlX3VzbVN0YXRlUmVmZXJlbmNlKHNlY1N0YXRlUmVmKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX01BTExPQzsKICAgICAgICAgfQpAQCAtMTU5MCw2ICsxNjE4LDcgQEAKICAgICAgICAgICAgIFNOTVBfRlJFRShjaXBoZXJ0ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9FTkNSWVBUSU9ORVJST1I7CiAgICAgICAgIH0KKwogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogICAgICAgICBpZiAoZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCgidXNtL2R1bXAiKSA9PSBTTk1QRVJSX1NVQ0NFU1MpIHsKICAgICAgICAgICAgIGR1bXBfY2h1bmsoInVzbS9kdW1wIiwgInNhbHQgKyBFbmNyeXB0ZWQgZm9ybTogIiwgc2FsdCwKQEAgLTE5OTEsNyArMjAyMCw3IEBACiAgICAgLyoKICAgICAgKiBGSVggLS0gZG9lc24ndCB0aGlzIGFsc28gaW5kaWNhdGUgYSBidWZmZXIgb3ZlcnJ1bj8KICAgICAgKi8KLSAgICBpZiAoKGludCkgb3JpZ05hbWVMZW4gPCAqc2VjTmFtZUxlbiArIDEpIHsKKyAgICBpZiAob3JpZ05hbWVMZW4gPCAqc2VjTmFtZUxlbiArIDEpIHsKICAgICAgICAgLyoKICAgICAgICAgICogUkVUVVJOIHBhcnNlIGVycm9yLCBidXQgaXQncyByZWFsbHkgYSBwYXJhbWV0ZXIgZXJyb3IgCiAgICAgICAgICAqLwpAQCAtMjEzNyw3ICsyMTY2LDcgQEAKICAgICAvKgogICAgICAqIFRoaXMgaXMgYSBsb2NhbCByZWZlcmVuY2UuCiAgICAgICovCi0gICAgaWYgKChpbnQpIHNlY0VuZ2luZUlETGVuID09IG15SURMZW5ndGgKKyAgICBpZiAoc2VjRW5naW5lSURMZW4gPT0gbXlJRExlbmd0aAogICAgICAgICAmJiBtZW1jbXAoc2VjRW5naW5lSUQsIG15SUQsIG15SURMZW5ndGgpID09IDApIHsKICAgICAgICAgdV9pbnQgICAgICAgICAgIHRpbWVfZGlmZmVyZW5jZSA9IG15VGltZSA+IHRpbWVfdWludCA/CiAgICAgICAgICAgICBteVRpbWUgLSB0aW1lX3VpbnQgOiB0aW1lX3VpbnQgLSBteVRpbWU7CkBAIC0yMTQ1LDExICsyMTc0LDcgQEAKICAgICAgICAgaWYgKGJvb3RzX3VpbnQgPT0gRU5HSU5FQk9PVF9NQVgKICAgICAgICAgICAgIHx8IGJvb3RzX3VpbnQgIT0gbXlCb290cwogICAgICAgICAgICAgfHwgdGltZV9kaWZmZXJlbmNlID4gVVNNX1RJTUVfV0lORE9XKSB7Ci0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNOT1RJTlRJTUVXSU5ET1dTKSA9PQotICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU05PVElOVElNRVdJTkRPV1MpOwogCiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJib290X3VpbnQgJXUgbXlCb290cyAldSB0aW1lX2RpZmYgJXUgPT4gbm90IGluIHRpbWUgd2luZG93XG4iLApAQCAtMjM2MiwxNiArMjM4NywxMCBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFRoaXMgaW5kaWNhdGVzIGEgZGVjcnlwdGlvbkVycm9yLiAgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpID09Ci0gICAgICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpID09IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX1BBUlNFRVJST1I7CiAgICAgfQogCkBAIC0yMzgyLDEwICsyNDAxLDcgQEAKICAgICAgKiBjYWxsaW5nIG1vZHVsZS4KICAgICAgKi8KICAgICBpZiAoKHNlY0xldmVsID09IFNOTVBfU0VDX0xFVkVMX0FVVEhQUklWKSAmJiAoc2FsdF9sZW5ndGggIT0gOCkpIHsKLSAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUykgPT0gCi0gICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICB9CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9ERUNSWVBUSU9ORVJST1I7CiAgICAgfQogCkBAIC0yNDMzLDExICsyNDQ5LDcgQEAKICAgICAgICAgKCFzZXNzICYmIChtc2dfZmxhZ3MgJiBTTk1QX01TR19GTEFHX1JQUlRfQklUKSkpIHsKICAgICAgICAgaWYgKElTRU5HSU5FS05PV04oc2VjRW5naW5lSUQsICpzZWNFbmdpbmVJRExlbikgPT0gRkFMU0UpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVW5rbm93biBFbmdpbmUgSUQuXG4iKSk7Ci0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNVTktOT1dORU5HSU5FSURTKSA9PQotICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1VOS05PV05FTkdJTkVJRFMpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX1VOS05PV05FTkdJTkVJRDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0yNDYxLDkgKzI0NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXNlc3MpKSA/IDAgOiAxKSkpCiAgICAgICAgID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJVbmtub3duIFVzZXIoJXMpXG4iLCBzZWNOYW1lKSk7Ci0gICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1VOS05PV05VU0VSTkFNRVMpID09IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNVTktOT1dOVVNFUk5BTUVTKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX1VOS05PV05TRUNVUklUWU5BTUU7CiAgICAgfQogCkBAIC0yNDgxLDEwICsyNDkxLDcgQEAKICAgICBpZiAoMSA9PSByYykgewogICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIlVuc3VwcG9ydGVkIFNlY3VyaXR5IExldmVsICglZCkuXG4iLAogICAgICAgICAgICAgICAgICAgICBzZWNMZXZlbCkpOwotICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljCi0gICAgICAgICAgICAoU1RBVF9VU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTKSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICB9CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTVU5TVVBQT1JURURTRUNMRVZFTFMpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fVU5TVVBQT1JURURTRUNVUklUWUxFVkVMOwogICAgIH0gZWxzZSBpZiAocmMgIT0gMCkgewogICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIlVua25vd24gaXNzdWUuXG4iKSk7CkBAIC0yNTAyLDEwICsyNTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaWduYXR1cmVfbGVuZ3RoKQogICAgICAgICAgICAgIT0gU05NUF9FUlJfTk9FUlJPUikgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJWZXJpZmljYXRpb24gZmFpbGVkLlxuIikpOwotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTV1JPTkdESUdFU1RTKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNXUk9OR0RJR0VTVFMpOwogCSAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJXNcbiIsCiAJCQkJdXNlci0+bmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fQVVUSEVOVElDQVRJT05GQUlMVVJFOwpAQCAtMjU5Niw5ICsyNjAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY3J5cHRlZCBzUERVIikpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHdoaWxlIHBhcnNpbmcgZW5jcnlwdGVkIHNQRFUuIikpOwotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUykgPT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpOwogICAgICAgICAgICAgdXNtX2ZyZWVfdXNtU3RhdGVSZWZlcmVuY2UoKnNlY1N0YXRlUmVmKTsKICAgICAgICAgICAgICpzZWNTdGF0ZVJlZiA9IE5VTEw7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fUEFSU0VFUlJPUjsKQEAgLTI2MTcsMTIgKzI2MTksOSBAQAogCiAgICAgICAgICAgICBpZiAocmVtYWluaW5nICUgOCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNpcGhlcnRleHQgaXMgJWx1IGJ5dGVzLCBub3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiA4IChyZW0gJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZywgcmVtYWluaW5nICUgOCkpOwotICAgICAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpID09Ci0gICAgICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNpcGhlcnRleHQgaXMgJWx1IGJ5dGVzLCBub3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiA4IChyZW0gJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylyZW1haW5pbmcsICh1bnNpZ25lZCBsb25nKXJlbWFpbmluZyAlIDgpKTsKKyAgICAgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpOwogICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzbVN0YXRlUmVmZXJlbmNlKCpzZWNTdGF0ZVJlZik7CiAgICAgICAgICAgICAgICAgKnNlY1N0YXRlUmVmID0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SOwpAQCAtMjYzMiwxMCArMjYzMSw3IEBACiAKICAgICAgICAgICAgIGlmICggIXVzZXItPnByaXZLZXkgKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJObyBwcml2YWN5IHBhc3MgcGhyYXNlIGZvciAlc1xuIiwgdXNlci0+c2VjTmFtZSkpOwotICAgICAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpID09Ci0gICAgICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKTsKICAgICAgICAgICAgICAgICB1c21fZnJlZV91c21TdGF0ZVJlZmVyZW5jZSgqc2VjU3RhdGVSZWYpOwogICAgICAgICAgICAgICAgICpzZWNTdGF0ZVJlZiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUjsKQEAgLTI2NjcsMTAgKzI2NjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9wdHIsIHJlbWFpbmluZywgKnNjb3BlZFBkdSwgc2NvcGVkUGR1TGVuKQogICAgICAgICAgICAgIT0gU05NUF9FUlJfTk9FUlJPUikgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBkZWNyeXB0aW9uLiIpKTsKLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMKLSAgICAgICAgICAgICAgICAoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpID09IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9ERUNSWVBUSU9ORVJST1I7CiAgICAgICAgIH0KICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKQEAgLTI3MDAsOCArMjY5Myw3IEBACiAgICAgICoKICAgICAgKiBGSVggIENvcnJlY3Q/IAogICAgICAqLwotICAgICptYXhTaXplUmVzcG9uc2UgPSBtYXhNc2dTaXplIC0gKGludCkKLSAgICAgICAgKCh1X2xvbmcpIGVuZF9vZl9vdmVyaGVhZCAtICh1X2xvbmcpIHdob2xlTXNnKTsKKyAgICAqbWF4U2l6ZVJlc3BvbnNlID0gbWF4TXNnU2l6ZSAtIChlbmRfb2Zfb3ZlcmhlYWQgLSB3aG9sZU1zZyk7CiAKIAogICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVVNNIHByb2Nlc3NpbmcgY29tcGxldGVkLlxuIikpOwpAQCAtMjc2MywxMyArMjc1NSw0NTIgQEAKICAgICB9ICAgICAgIAogfQogCisvKiBzZXRzIHVwIGluaXRpYWwgZGVmYXVsdCBzZXNzaW9uIHBhcmFtZXRlcnMgKi8KK2ludAordXNtX3Nlc3Npb25faW5pdChuZXRzbm1wX3Nlc3Npb24gKmluX3Nlc3Npb24sIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKyAgICBjaGFyICpjcDsKKyAgICBzaXplX3QgaTsKKyAgICAKKyAgICBpZiAoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPiAwKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4pOworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPT0gTlVMTCkgeworICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGdldF9kZWZhdWx0X2F1dGh0eXBlKCZpKSAhPSBOVUxMKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGdldF9kZWZhdWx0X2F1dGh0eXBlKE5VTEwpLCBpKTsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPSBpOworICAgIH0KKworICAgIGlmIChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbiA+IDApIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbik7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9PSBOVUxMKSB7CisgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX01BTExPQzsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZ2V0X2RlZmF1bHRfcHJpdnR5cGUoJmkpICE9IE5VTEwpIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoZ2V0X2RlZmF1bHRfcHJpdnR5cGUoTlVMTCksIGkpOworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbiA9IGk7CisgICAgfQorCisgICAgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPD0gMCkgJiYKKyAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorCQkJCSAgICAgTkVUU05NUF9EU19MSUJfQVVUSE1BU1RFUktFWSkpKSkgeworICAgICAgICBzaXplX3QgYnVmbGVuID0gc2l6ZW9mKHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSk7CisgICAgICAgIHVfY2hhciAqdG1wcCA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleTsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuID0gMDsKKyAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KKyAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4sIDAsIGNwKSkgeworICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKCJlcnJvciBwYXJzaW5nIGF1dGhlbnRpY2F0aW9uIG1hc3RlciBrZXkiKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPD0gMCkgJiYKKyAgICAgICAgICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UpKSB8fAorICAgICAgICAgICAgICAgIChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKSkpKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA9IFVTTV9BVVRIX0tVX0xFTjsKKyAgICAgICAgaWYgKGdlbmVyYXRlX0t1KHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGNwLCBzdHJsZW4oY3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwKKyAgICAgICAgICAgICAgICAoIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAKKyAgICBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA8PSAwKSAmJgorICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisJCQkJICAgICBORVRTTk1QX0RTX0xJQl9QUklWTUFTVEVSS0VZKSkpKSB7CisgICAgICAgIHNpemVfdCBidWZsZW4gPSBzaXplb2Yoc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5KTsKKyAgICAgICAgdV9jaGFyICp0bXBwID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5OworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPSAwOworICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLworICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJmJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiwgMCwgY3ApKSB7CisgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoImVycm9yIHBhcnNpbmcgZW5jcnlwdGlvbiBtYXN0ZXIga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuIDw9IDApICYmCisgICAgICAgICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFKSkgfHwKKyAgICAgICAgICAgICAgICAoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSkpKSkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPSBVU01fUFJJVl9LVV9MRU47CisgICAgICAgIGlmIChnZW5lcmF0ZV9LdShzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBjcCwgc3RybGVuKGNwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsCisgICAgICAgICAgICAgICAgKCJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgcHJpdmFjeSBwYXNzIHBocmFzZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisKKy8qCisgKiB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik6CisgKiAKKyAqIGNyZWF0ZXMgYSB1c2VyIGluIHRoZSB1c20gdGFibGUgZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gYSBzZXNzaW9uLgorICogSWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMsIGl0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgY3VycmVudAorICogaW5mb3JtYXRpb24gZnJvbSB0aGUgc2Vzc2lvbgorICogCisgKiBQYXJhbWV0ZXJzOgorICogc2Vzc2lvbiAtLSBJTjogcG9pbnRlciB0byB0aGUgc2Vzc2lvbiB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgdXNlci4KKyAqIAorICogUmV0dXJuczoKKyAqIFNOTVBFUlJfU1VDQ0VTUworICogU05NUEVSUl9HRU5FUlIgCisgKi8KK2ludAordXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uKQoreworICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyOworICAgIGludCAgICAgICAgICAgICB1c2VyX2p1c3RfY3JlYXRlZCA9IDA7CisgICAgY2hhciAqY3A7CisKKyAgICAvKgorICAgICAqIC0gZG9uJ3QgY3JlYXRlLWFub3RoZXIvY29weS1pbnRvIHVzZXIgZm9yIHRoaXMgc2Vzc2lvbiBieSBkZWZhdWx0CisgICAgICogLSBiYWlsIG5vdyAobm8gZXJyb3IpIGlmIHdlIGRvbid0IGhhdmUgYW4gZW5naW5lSUQKKyAgICAgKi8KKyAgICBpZiAoU05NUF9GTEFHU19VU0VSX0NSRUFURUQgPT0gKHNlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19VU0VSX0NSRUFURUQpIHx8CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVVNNIHx8CisgICAgICAgIHNlc3Npb24tPnZlcnNpb24gIT0gU05NUF9WRVJTSU9OXzMgfHwKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuID09IDAgfHwKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInVzbSIsICJubyBmbGFnIGRlZmluZWQuLi4gIGNvbnRpbnVpbmdcbiIpKTsKKyAgICBzZXNzaW9uLT5mbGFncyB8PSBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRDsKKworICAgIC8qCisgICAgICogbm93IHRoYXQgd2UgaGF2ZSB0aGUgZW5naW5lSUQsIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgVVNNIGxpc3QKKyAgICAgKiBmb3IgdGhpcyB1c2VyIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2Vzc2lvbiAKKyAgICAgKi8KKyAgICB1c2VyID0gdXNtX2dldF91c2VyX2Zyb21fbGlzdChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbV9nZXRfdXNlckxpc3QoKSwgMCk7CisgICAgREVCVUdNU0dUTCgoInVzbSIsICJ1c2VyIGV4aXN0cz8geD0lcFxuIiwgdXNlcikpOworICAgIGlmICh1c2VyID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJCdWlsZGluZyB1c2VyICVzLi4uXG4iLAorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWUpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogdXNlciBkb2Vzbid0IGV4aXN0IHNvIHdlIGNyZWF0ZSBhbmQgYWRkIGl0IAorICAgICAgICAgKi8KKyAgICAgICAgdXNlciA9IChzdHJ1Y3QgdXNtVXNlciAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB1c21Vc2VyKSk7CisgICAgICAgIGlmICh1c2VyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBpbiB0aGUgc2VjdXJpdHlOYW1lIAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TmFtZSkgeworICAgICAgICAgICAgdXNlci0+bmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOworICAgICAgICAgICAgdXNlci0+c2VjTmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOworICAgICAgICAgICAgaWYgKHVzZXItPm5hbWUgPT0gTlVMTCB8fCB1c2VyLT5zZWNOYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGNvcHkgaW4gdGhlIGVuZ2luZUlEIAorICAgICAgICAgKi8KKyAgICAgICAgdXNlci0+ZW5naW5lSUQgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4pOworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCAmJiAhdXNlci0+ZW5naW5lSUQpIHsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgdXNlci0+ZW5naW5lSURMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuOworCisgICAgICAgIHVzZXJfanVzdF9jcmVhdGVkID0gMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvcHkgdGhlIGF1dGggcHJvdG9jb2wgCisgICAgICovCisgICAgaWYgKHVzZXItPmF1dGhQcm90b2NvbCA9PSBOVUxMICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvICE9IE5VTEwpIHsKKyAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhQcm90b2NvbCk7CisgICAgICAgIHVzZXItPmF1dGhQcm90b2NvbCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuKTsKKyAgICAgICAgaWYgKHVzZXItPmF1dGhQcm90b2NvbCA9PSBOVUxMKSB7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIHVzZXItPmF1dGhQcm90b2NvbExlbiA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuOworICAgIH0KKworICAgIC8qCisgICAgICogY29weSB0aGUgcHJpdiBwcm90b2NvbCAKKyAgICAgKi8KKyAgICBpZiAodXNlci0+cHJpdlByb3RvY29sID09IE5VTEwgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gIT0gTlVMTCkgeworICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdlByb3RvY29sKTsKKyAgICAgICAgdXNlci0+cHJpdlByb3RvY29sID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4pOworICAgICAgICBpZiAodXNlci0+cHJpdlByb3RvY29sID09IE5VTEwpIHsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgdXNlci0+cHJpdlByb3RvY29sTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IGluIHRoZSBhdXRoZW50aWNhdGlvbiBLZXkuICBJZiBub3QgbG9jYWxpemVkLCBsb2NhbGl6ZSBpdCAKKyAgICAgKi8KKyAgICBpZiAodXNlci0+YXV0aEtleSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleSAhPSBOVUxMCisgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbiAhPSAwKSB7CisgICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2FsaXplZCBrZXkgcGFzc2VkIGluLiAgdXNlIGl0ICovCisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7CisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW4pOworICAgICAgICAgICAgaWYgKCF1c2VyLT5hdXRoS2V5KSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW47CisgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5ICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gIT0gMCkgeworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOworICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKikgY2FsbG9jKDEsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKKyAgICAgICAgICAgIGlmICh1c2VyLT5hdXRoS2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSzsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0ZV9rdWwodXNlci0+YXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuLCB1c2VyLT5hdXRoS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aEtleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhMT0NBTElaRURLRVkpKSkgeworICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IFVTTV9BVVRIX0tVX0xFTjsKKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSAodV9jaGFyICopbWFsbG9jKGJ1Zmxlbik7IC8qIG1heCBsZW5ndGggbmVlZGVkICovCisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gMDsKKyAgICAgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCisgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdXNlci0+YXV0aEtleSwgJmJ1ZmxlbiwgJnVzZXItPmF1dGhLZXlMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjcCkpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogY29weSBpbiB0aGUgcHJpdmFjeSBLZXkuICBJZiBub3QgbG9jYWxpemVkLCBsb2NhbGl6ZSBpdCAKKyAgICAgKi8KKyAgICBpZiAodXNlci0+cHJpdktleSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleSAhPSBOVUxMCisgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbiAhPSAwKSB7CisgICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2FsaXplZCBrZXkgcGFzc2VkIGluLiAgdXNlIGl0ICovCisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7CisgICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW4pOworICAgICAgICAgICAgaWYgKCF1c2VyLT5wcml2S2V5KSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW47CisgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5ICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gIT0gMCkgeworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOworICAgICAgICAgICAgdXNlci0+cHJpdktleSA9ICh1X2NoYXIgKikgY2FsbG9jKDEsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKKyAgICAgICAgICAgIGlmICh1c2VyLT5wcml2S2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSzsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0ZV9rdWwodXNlci0+YXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuLCB1c2VyLT5wcml2S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+cHJpdktleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZMT0NBTElaRURLRVkpKSkgeworICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IFVTTV9QUklWX0tVX0xFTjsKKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKKyAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSAodV9jaGFyICopbWFsbG9jKGJ1Zmxlbik7IC8qIG1heCBsZW5ndGggbmVlZGVkICovCisgICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gMDsKKyAgICAgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCisgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdXNlci0+cHJpdktleSwgJmJ1ZmxlbiwgJnVzZXItPnByaXZLZXlMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjcCkpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1c2VyX2p1c3RfY3JlYXRlZCkgeworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgdGhlIHVzZXIgaW50byB0aGUgZGF0YWJhc2UgCisgICAgICAgICAqLworICAgICAgICB1c2VyLT51c2VyU3RhdHVzID0gUlNfQUNUSVZFOworICAgICAgICB1c2VyLT51c2VyU3RvcmFnZVR5cGUgPSBTVF9SRUFET05MWTsKKyAgICAgICAgdXNtX2FkZF91c2VyKHVzZXIpOworICAgIH0KKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKworfQorCisvKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBob29rICovCitpbnQKK3VzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb25faG9vayh2b2lkICpzbHAsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKyAgICBERUJVR01TR1RMKCgidXNtIiwgInBvdGVudGlhbGx5IGJvb3RzdHJhcHBpbmcgdGhlIFVTTSB0YWJsZSBmcm9tIHNlc3Npb24gZGF0YVxuIikpOworICAgIHJldHVybiB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNlc3Npb24pOworfQorCitzdGF0aWMgaW50Cit1c21fYnVpbGRfcHJvYmVfcGR1KG5ldHNubXBfcGR1ICoqcGR1KQoreworICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIHBkdSAKKyAgICAgKi8KKyAgICBpZiAoIXBkdSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICpwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUKTsKKyAgICBpZiAoISgqcGR1KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICgqcGR1KS0+dmVyc2lvbiA9IFNOTVBfVkVSU0lPTl8zOworICAgICgqcGR1KS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKCIiKTsKKyAgICAoKnBkdSktPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbigoKnBkdSktPnNlY3VyaXR5TmFtZSk7CisgICAgKCpwZHUpLT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfTk9BVVRIOworICAgICgqcGR1KS0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1VTTTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBlbXB0eSB1c2VyIAorICAgICAqLworICAgIHVzZXIgPSB1c21fZ2V0X3VzZXIoTlVMTCwgMCwgKCpwZHUpLT5zZWN1cml0eU5hbWUpOworICAgIGlmICh1c2VyID09IE5VTEwpIHsKKyAgICAgICAgdXNlciA9IChzdHJ1Y3QgdXNtVXNlciAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB1c21Vc2VyKSk7CisgICAgICAgIGlmICh1c2VyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoKnBkdSk7CisgICAgICAgICAgICAqcGR1ID0gKG5ldHNubXBfcGR1ICopIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdXNlci0+bmFtZSA9IHN0cmR1cCgoKnBkdSktPnNlY3VyaXR5TmFtZSk7CisgICAgICAgIHVzZXItPnNlY05hbWUgPSBzdHJkdXAoKCpwZHUpLT5zZWN1cml0eU5hbWUpOworICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2xMZW4gPSBzaXplb2YodXNtTm9BdXRoUHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgIHVzZXItPmF1dGhQcm90b2NvbCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh1c21Ob0F1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuKTsKKyAgICAgICAgdXNlci0+cHJpdlByb3RvY29sTGVuID0gc2l6ZW9mKHVzbU5vUHJpdlByb3RvY29sKSAvIHNpemVvZihvaWQpOworICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2wgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQodXNtTm9Qcml2UHJvdG9jb2wsIHVzZXItPnByaXZQcm90b2NvbExlbik7CisgICAgICAgIHVzbV9hZGRfdXNlcih1c2VyKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c21fZGlzY292ZXJfZW5naW5laWQodm9pZCAqc2xwdiwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKSB7CisgICAgbmV0c25tcF9wZHUgICAgKnBkdSA9IE5VTEwsICpyZXNwb25zZSA9IE5VTEw7CisgICAgaW50IHN0YXR1cywgaTsKKyAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHAgPSAoc3RydWN0IHNlc3Npb25fbGlzdCAqKSBzbHB2OworCisgICAgaWYgKHVzbV9idWlsZF9wcm9iZV9wZHUoJnBkdSkgIT0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAidW5hYmxlIHRvIGNyZWF0ZSBwcm9iZSBQRFVcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInByb2JpbmcgZm9yIGVuZ2luZUlELi4uXG4iKSk7CisgICAgc2Vzc2lvbi0+ZmxhZ3MgfD0gU05NUF9GTEFHU19ET05UX1BST0JFOyAvKiBwcmV2ZW50IHJlY3Vyc2lvbiAqLworICAgIHN0YXR1cyA9IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzbHAsIHBkdSwgJnJlc3BvbnNlKTsKKworICAgIGlmICgocmVzcG9uc2UgPT0gTlVMTCkgJiYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpKSB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRfRVJST1I7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFNUQVRfU1VDQ0VTUzoKKyAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9JTlZBTElEX01TRzsgLyogWFg/PyAqLworICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3I6IGV4cGVjdGVkIFJlcG9ydCBhcyByZXNwb25zZSB0byBwcm9iZTogJXMgKCVsZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHNubXBfZXJyc3RyaW5nKHJlc3BvbnNlLT5lcnJzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPmVycnN0YXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVEFUX0VSUk9SOiAgIC8qIHRoaXMgaXMgd2hhdCB3ZSBleHBlY3RlZCAtPiBSZXBvcnQgPT0gU1RBVF9FUlJPUiAqLworICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fRU5HX0lEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNUQVRfVElNRU9VVDoKKyAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9USU1FT1VUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAorICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGNvbm5lY3Qgd2l0aCByZW1vdGUgZW5naW5lOiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBzbm1wX2FwaV9lcnJzdHJpbmcoc2Vzc2lvbi0+c19zbm1wX2Vycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAorICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGRldGVybWluZSByZW1vdGUgZW5naW5lIElEXG4iKSk7CisgICAgICAgIC8qIGNsZWFyIHRoZSBmbGFnIHNvIHRoYXQgcHJvYmUgb2NjdXJzIG9uIG5leHQgaW5mb3JtICovCisgICAgICAgIHNlc3Npb24tPmZsYWdzICY9IH5TTk1QX0ZMQUdTX0RPTlRfUFJPQkU7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9TVUNDRVNTOworICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAorICAgICAgICAgICAgICAgICAgICAiICBwcm9iZSBmb3VuZCBlbmdpbmVJRDogICIpKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbjsgaSsrKQorICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICIlMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICBzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURbaV0pKTsKKyAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICJcbiIpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmIGJvb3QvdGltZSBzdXBwbGllZCBzZXQgaXQgZm9yIHRoaXMgZW5naW5lSUQgCisgICAgICovCisgICAgaWYgKHNlc3Npb24tPmVuZ2luZUJvb3RzIHx8IHNlc3Npb24tPmVuZ2luZVRpbWUpIHsKKyAgICAgICAgc2V0X2VuZ2luZXRpbWUoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+ZW5naW5lQm9vdHMsIHNlc3Npb24tPmVuZ2luZVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOworICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCiB2b2lkCiBpbml0X3VzbSh2b2lkKQogewogICAgIHN0cnVjdCBzbm1wX3NlY21vZF9kZWYgKmRlZjsKKyAgICBjaGFyICp0eXBlOwogCi0gICAgREVCVUdNU0dUTCgoImluaXRfdXNtIiwgInVuaXRfdXNtOiAlZCAlZFxuIiwgdXNtTm9Qcml2UHJvdG9jb2xbMF0sCi0gICAgICAgICAgICAgICAgdXNtTm9Qcml2UHJvdG9jb2xbMV0pKTsKKyAgICBERUJVR01TR1RMKCgiaW5pdF91c20iLCAidW5pdF91c206ICUiIE5FVFNOTVBfUFJJbyAidSAlIiBORVRTTk1QX1BSSW8gInVcbiIsCisgICAgICAgICAgICAgICAgdXNtTm9Qcml2UHJvdG9jb2xbMF0sIHVzbU5vUHJpdlByb3RvY29sWzFdKSk7CiAKICAgICBzY19pbml0KCk7ICAgICAgICAgICAgICAgICAgLyogaW5pdGFsaXplIHNjYXBpIGNvZGUgKi8KIApAQCAtMjc3Nyw2ICszMjA4LDggQEAKICAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgYXMgYSBzZWN1cml0eSBzZXJ2aWNlIAogICAgICAqLwogICAgIGRlZiA9IFNOTVBfTUFMTE9DX1NUUlVDVChzbm1wX3NlY21vZF9kZWYpOworICAgIGlmIChkZWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOwogICAgIC8qCiAgICAgICogWFhYOiBkZWYtPmluaXRfc2Vzc19zZWNtb2QgbW92ZSBzdHVmZiBmcm9tIHNubXBfYXBpLmMgCiAgICAgICovCkBAIC0yNzg0LDcgKzMyMTcsMTAgQEAKICAgICBkZWYtPmVuY29kZV9mb3J3YXJkID0gdXNtX3NlY21vZF9nZW5lcmF0ZV9vdXRfbXNnOwogICAgIGRlZi0+ZGVjb2RlID0gdXNtX3NlY21vZF9wcm9jZXNzX2luX21zZzsKICAgICBkZWYtPnBkdV9mcmVlX3N0YXRlX3JlZiA9IHVzbV9mcmVlX3VzbVN0YXRlUmVmZXJlbmNlOworICAgIGRlZi0+c2Vzc2lvbl9zZXR1cCA9IHVzbV9zZXNzaW9uX2luaXQ7CiAgICAgZGVmLT5oYW5kbGVfcmVwb3J0ID0gdXNtX2hhbmRsZV9yZXBvcnQ7CisgICAgZGVmLT5wcm9iZV9lbmdpbmVpZCA9IHVzbV9kaXNjb3Zlcl9lbmdpbmVpZDsKKyAgICBkZWYtPnBvc3RfcHJvYmVfZW5naW5laWQgPSB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uX2hvb2s7CiAgICAgcmVnaXN0ZXJfc2VjX21vZChVU01fU0VDX01PREVMX05VTUJFUiwgInVzbSIsIGRlZik7CiAKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKQEAgLTI3OTksNiArMzIzNSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfZW5naW5lSUQsIE5VTEwpOwogCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmQXV0aFR5cGUiLCBzbm1wdjNfYXV0aHR5cGVfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAiTUQ1fFNIQSIpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZlByaXZUeXBlIiwgc25tcHYzX3ByaXZ0eXBlX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyNpZmRlZiBIQVZFX0FFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERVN8QUVTIgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVTIChBRVMgc3VwcG9ydCBub3QgYXZhaWxhYmxlKSIKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIC8qCisgICAgICogRnJlZSBzdHVmZiBhdCBzaHV0ZG93biB0aW1lCisgICAgICovCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9lbmdpbmV0aW1lX29uX3NodXRkb3duLCBOVUxMKTsKKworCisgICAgdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoUGFzcyIsIHVzbV9zZXRfcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2UGFzcyIsIHVzbV9zZXRfcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoS2V5IiwgdXNtX3NldF9wYXNzd29yZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aExvY2FsS2V5IiwgdXNtX3NldF9wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZMb2NhbEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CiB9CiAKIHZvaWQKQEAgLTI5MDcsNiArMzM3NiwxMyBAQAogCiB9CiAKK3ZvaWQKK3NodXRkb3duX3VzbSh2b2lkKQoreworICAgIGZyZWVfZXRpbWVsaXN0KCk7CisgICAgY2xlYXJfdXNlcl9saXN0KCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiB1c21fY2hlY2tfc2VjTGV2ZWwKICAqCkBAIC0yOTI3LDggKzM0MDMsOCBAQAogICAgIGlmICh1c2VyLT51c2VyU3RhdHVzICE9IFJTX0FDVElWRSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgREVCVUdNU0dUTCgoImNvbXBhcmV4IiwgIkNvbXBhcmluZzogJWQgJWQgIiwgdXNtTm9Qcml2UHJvdG9jb2xbMF0sCi0gICAgICAgICAgICAgICAgdXNtTm9Qcml2UHJvdG9jb2xbMV0pKTsKKyAgICBERUJVR01TR1RMKCgiY29tcGFyZXgiLCAiQ29tcGFyaW5nOiAlIiBORVRTTk1QX1BSSW8gInUgJSIgTkVUU05NUF9QUklvICJ1ICIsCisgICAgICAgICAgICAgICAgdXNtTm9Qcml2UHJvdG9jb2xbMF0sIHVzbU5vUHJpdlByb3RvY29sWzFdKSk7CiAgICAgREVCVUdNU0dPSUQoKCJjb21wYXJleCIsIHVzbU5vUHJpdlByb3RvY29sLAogICAgICAgICAgICAgICAgICBzaXplb2YodXNtTm9Qcml2UHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCkpKTsKICAgICBERUJVR01TRygoImNvbXBhcmV4IiwgIlxuIikpOwpAQCAtMzMxMiw2ICszNzg4LDcgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAvKgogICogdGFrZSBhIGdpdmVuIHVzZXIgYW5kIGNsb25lIHRoZSBzZWN1cml0eSBpbmZvIGludG8gYW5vdGhlciAKICAqLwpAQCAtMzM3NSw2ICszODUyLDcgQEAKICAgICB9CiAgICAgcmV0dXJuIHRvOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogdXNtX2NyZWF0ZV91c2VyKHZvaWQpOgpAQCAtMzU0MiwxMSArNDAyMCwxMSBAQAogICAgICpjcHRyKysgPSAnICc7CiAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGNwdHIsICh1X2NoYXIgKikgdXNlci0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXItPm5hbWUgPT0gTlVMTCkgPyAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHVzZXItPm5hbWUpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih1c2VyLT5uYW1lKSk7CiAgICAgKmNwdHIrKyA9ICcgJzsKICAgICBjcHRyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoY3B0ciwgKHVfY2hhciAqKSB1c2VyLT5zZWNOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlci0+c2VjTmFtZSA9PSBOVUxMKSA/IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4odXNlci0+c2VjTmFtZSkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHVzZXItPnNlY05hbWUpKTsKICAgICAqY3B0cisrID0gJyAnOwogICAgIGNwdHIgPQogICAgICAgICByZWFkX2NvbmZpZ19zYXZlX29iamlkKGNwdHIsIHVzZXItPmNsb25lRnJvbSwgdXNlci0+Y2xvbmVGcm9tTGVuKTsKQEAgLTM1NjYsMTEgKzQwNDQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuKTsKICAgICAqY3B0cisrID0gJyAnOwogICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhjcHRyLCB1c2VyLT51c2VyUHVibGljU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlci0+dXNlclB1YmxpY1N0cmluZyA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgPyAwIDogc3RybGVuKChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclB1YmxpY1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci0+dXNlclB1YmxpY1N0cmluZ0xlbik7CisKICAgICByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBsaW5lKTsKIH0KIApAQCAtMzU3OSw3ICs0MDU0LDcgQEAKICAqIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHVzbVVzZXIuIAogICovCiBzdHJ1Y3QgdXNtVXNlciAqCi11c21fcmVhZF91c2VyKGNoYXIgKmxpbmUpCit1c21fcmVhZF91c2VyKGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgc3RydWN0IHVzbVVzZXIgKnVzZXI7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKQEAgLTM1OTAsMTEgKzQwNjUsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB1c2VyLT51c2VyU3RhdHVzID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICB1c2VyLT51c2VyU3RvcmFnZVR5cGUgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOwotICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAmdXNlci0+ZW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5lbmdpbmVJRExlbik7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CisgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGxpbmUsICZ1c2VyLT5lbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmVuZ2luZUlETGVuKTsKIAogICAgIC8qCiAgICAgICogc2V0IHRoZSBsY2QgZW50cnkgZm9yIHRoaXMgZW5naW5lSUQgdG8gdGhlIG1pbmltdW0gYm9vdHMvdGltZQpAQCAtMzYxMSwyMiArNDA4NiwyMSBAQAogICAgIFNOTVBfRlJFRSh1c2VyLT5jbG9uZUZyb20pOwogICAgIHVzZXItPmNsb25lRnJvbUxlbiA9IDA7CiAKLSAgICBsaW5lID0KLSAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vYmppZChsaW5lLCAmdXNlci0+Y2xvbmVGcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5jbG9uZUZyb21MZW4pOworICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGxpbmUsICZ1c2VyLT5jbG9uZUZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmNsb25lRnJvbUxlbik7CiAKICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aFByb3RvY29sKTsKICAgICB1c2VyLT5hdXRoUHJvdG9jb2xMZW4gPSAwOwogCi0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2JqaWQobGluZSwgJnVzZXItPmF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aFByb3RvY29sTGVuKTsKLSAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcobGluZSwgJnVzZXItPmF1dGhLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoS2V5TGVuKTsKKyAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChsaW5lLCAmdXNlci0+YXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOworICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChsaW5lLCAmdXNlci0+YXV0aEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhLZXlMZW4pOwogICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2UHJvdG9jb2wpOwogICAgIHVzZXItPnByaXZQcm90b2NvbExlbiA9IDA7CiAKLSAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vYmppZChsaW5lLCAmdXNlci0+cHJpdlByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5wcml2UHJvdG9jb2xMZW4pOworICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGxpbmUsICZ1c2VyLT5wcml2UHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnByaXZQcm90b2NvbExlbik7CiAgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICZ1c2VyLT5wcml2S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+cHJpdktleUxlbik7CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKQEAgLTM2NDYsNyArNDEyMCw3IEBACiAgICAgfQogCiAgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICZ1c2VyLT51c2VyUHVibGljU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnVzZXJQdWJsaWNTdHJpbmdMZW4pOwogICAgIHJldHVybiB1c2VyOwogfQogCkBAIC0zODQ0LDMgKzQzMTgsMzU1IEBACiAgICAgICAgIH0KICAgICB9CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c21fc2V0X3Bhc3N3b3JkKCkgKi8KKwordm9pZAordXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIGNoYXIgICAgICAgICAgICpjcDsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGX01FRElVTV07CisgICAgc3RydWN0IHVzbVVzZXIgKm5ld3VzZXI7CisgICAgdV9jaGFyICAgICAgICAgIHVzZXJLZXlbU05NUF9NQVhCVUZfU01BTExdLCAqdG1wcDsKKyAgICBzaXplX3QgICAgICAgICAgdXNlcktleUxlbiA9IFNOTVBfTUFYQlVGX1NNQUxMOworICAgIHNpemVfdCAgICAgICAgICBwcml2S2V5TGVuID0gMDsKKyAgICBzaXplX3QgICAgICAgICAgcmV0OworICAgIGludCAgICAgICAgICAgICByZXQyOworICAgIGludCAgICAgICAgICAgICB0ZXN0Y2FzZTsKKworICAgIG5ld3VzZXIgPSB1c21fY3JlYXRlX3VzZXIoKTsKKworICAgIC8qCisgICAgICogUkVBRDogU2VjdXJpdHkgTmFtZSAKKyAgICAgKi8KKyAgICBjcCA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7CisKKyAgICAvKgorICAgICAqIG1pZ2h0IGJlIGEgLWUgRU5HSU5FSUQgYXJndW1lbnQgCisgICAgICovCisgICAgaWYgKHN0cmNtcChidWYsICItZSIpID09IDApIHsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGVidWZfbGVuID0gMzIsIGVvdXRfbGVuID0gMDsKKyAgICAgICAgdV9jaGFyICAgICAgICAgKmVidWYgPSAodV9jaGFyICopIG1hbGxvYyhlYnVmX2xlbik7CisKKyAgICAgICAgaWYgKGVidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtZSBmbGFnIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogR2V0IHRoZSBzcGVjaWZpZWQgZW5naW5laWQgZnJvbSB0aGUgbGluZS4gIAorICAgICAgICAgKi8KKyAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJmVidWYsICZlYnVmX2xlbiwgJmVvdXRfbGVuLCAxLCBidWYpKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIEVuZ2luZUlEIGFyZ3VtZW50IHRvIC1lIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgU05NUF9GUkVFKGVidWYpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQgPSBlYnVmOworICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRExlbiA9IGVvdXRfbGVuOworICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ld3VzZXItPmVuZ2luZUlEID0gc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlEKCZyZXQpOworICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbmV3dXNlci0+ZW5naW5lSURMZW4gPSByZXQ7CisgICAgfQorCisgICAgbmV3dXNlci0+c2VjTmFtZSA9IHN0cmR1cChidWYpOworICAgIG5ld3VzZXItPm5hbWUgPSBzdHJkdXAoYnVmKTsKKworICAgIGlmICghY3ApCisgICAgICAgIGdvdG8gYWRkOyAgICAgICAgICAgICAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uIG9yIHByaXZhY3kgdHlwZSAqLworCisgICAgLyoKKyAgICAgKiBSRUFEOiBBdXRoZW50aWNhdGlvbiBUeXBlIAorICAgICAqLworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CisgICAgaWYgKHN0cm5jbXAoY3AsICJNRDUiLCAzKSA9PSAwKSB7CisgICAgICAgIG1lbWNweShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ01ENUF1dGhQcm90b2NvbCkpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChzdHJuY21wKGNwLCAiU0hBIiwgMykgPT0gMCkgeworICAgICAgICBtZW1jcHkobmV3dXNlci0+YXV0aFByb3RvY29sLCB1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gYXV0aGVudGljYXRpb24gcHJvdG9jb2wiKTsKKyAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNwID0gc2tpcF90b2tlbihjcCk7CisKKyAgICAvKgorICAgICAqIFJFQUQ6IEF1dGhlbnRpY2F0aW9uIFBhc3MgUGhyYXNlIG9yIGtleQorICAgICAqLworICAgIGlmICghY3ApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibm8gYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UiKTsKKyAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIGlmIChzdHJjbXAoYnVmLCItbSIpID09IDApIHsKKyAgICAgICAgLyogYSBtYXN0ZXIga2V5IGlzIHNwZWNpZmllZCAqLworICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICByZXQgPSBzaXplb2YodXNlcktleSk7CisgICAgICAgIHRtcHAgPSB1c2VyS2V5OworICAgICAgICB1c2VyS2V5TGVuID0gMDsKKyAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZyZXQsICZ1c2VyS2V5TGVuLCAwLCBidWYpKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbSIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwiLWwiKSAhPSAwKSB7CisgICAgICAgIC8qIGEgcGFzc3dvcmQgaXMgc3BlY2lmaWVkICovCisgICAgICAgIHVzZXJLZXlMZW4gPSBzaXplb2YodXNlcktleSk7CisgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9LdShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBidWYsIHN0cmxlbihidWYpLCB1c2VyS2V5LCAmdXNlcktleUxlbik7CisgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgZnJvbSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcGxpZWQgcGFzcyBwaHJhc2UuIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSAgICAgICAgCisgICAgICAgIAorICAgIC8qCisgICAgICogQW5kIHR1cm4gaXQgaW50byBhIGxvY2FsaXplZCBrZXkgCisgICAgICovCisgICAgcmV0MiA9IHNjX2dldF9wcm9wZXJsZW5ndGgobmV3dXNlci0+YXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbik7CisgICAgaWYgKHJldDIgPD0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJDb3VsZCBub3QgZ2V0IHByb3BlciBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBrZXkgbGVuZ3RoIik7CisJdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuZXd1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKSBtYWxsb2MocmV0Mik7CisKKyAgICBpZiAoc3RyY21wKGJ1ZiwiLWwiKSA9PSAwKSB7CisgICAgICAgIC8qIGEgbG9jYWwga2V5IGlzIGRpcmVjdGx5IHNwZWNpZmllZCAqLworICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuID0gMDsKKyAgICAgICAgcmV0ID0gcmV0MjsKKyAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJm5ld3VzZXItPmF1dGhLZXksICZyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXd1c2VyLT5hdXRoS2V5TGVuLCAwLCBidWYpKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbCIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ICE9IG5ld3VzZXItPmF1dGhLZXlMZW4pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImltcHJvcGVyIGtleSBsZW5ndGggdG8gLWwiKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuID0gcmV0MjsKKyAgICAgICAgcmV0MiA9IGdlbmVyYXRlX2t1bChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJLZXksIHVzZXJLZXlMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoS2V5LCAmbmV3dXNlci0+YXV0aEtleUxlbik7CisgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIGxvY2FsaXplZCBhdXRoZW50aWNhdGlvbiBrZXkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiKEt1bCkgZnJvbSB0aGUgbWFzdGVyIGtleSAoS3UpLiIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY3ApCisgICAgICAgIGdvdG8gYWRkOyAgICAgICAgICAgICAgIC8qIG5vIHByaXZhY3kgdHlwZSAod2hpY2ggaXMgbGVnYWwpICovCisKKyAgICAvKgorICAgICAqIFJFQUQ6IFByaXZhY3kgVHlwZSAKKyAgICAgKi8KKyAgICB0ZXN0Y2FzZSA9IDA7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKKyAgICBpZiAoc3RybmNtcChjcCwgIkRFUyIsIDMpID09IDApIHsKKyAgICAgICAgbWVtY3B5KG5ld3VzZXItPnByaXZQcm90b2NvbCwgdXNtREVTUHJpdlByb3RvY29sLAorICAgICAgICAgICAgICAgc2l6ZW9mKHVzbURFU1ByaXZQcm90b2NvbCkpOworICAgICAgICB0ZXN0Y2FzZSA9IDE7CisJLyogREVTIHVzZXMgYSAxMjggYml0IGtleSwgNjQgYml0cyBvZiB3aGljaCBpcyBhIHNhbHQgKi8KKwlwcml2S2V5TGVuID0gMTY7CisgICAgfQorI2VuZGlmCisjaWZkZWYgSEFWRV9BRVMKKyAgICBpZiAoc3RybmNtcChjcCwgIkFFUzEyOCIsIDYpID09IDAgfHwKKyAgICAgICAgICAgICAgIHN0cm5jbXAoY3AsICJBRVMiLCAzKSA9PSAwKSB7CisgICAgICAgIG1lbWNweShuZXd1c2VyLT5wcml2UHJvdG9jb2wsIHVzbUFFU1ByaXZQcm90b2NvbCwKKyAgICAgICAgICAgICAgIHNpemVvZih1c21BRVNQcml2UHJvdG9jb2wpKTsKKyAgICAgICAgdGVzdGNhc2UgPSAxOworCXByaXZLZXlMZW4gPSAxNjsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAodGVzdGNhc2UgPT0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHByaXZhY3kgcHJvdG9jb2wiKTsKKyAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNwID0gc2tpcF90b2tlbihjcCk7CisgICAgLyoKKyAgICAgKiBSRUFEOiBFbmNyeXB0aW9uIFBhc3MgUGhyYXNlIG9yIGtleQorICAgICAqLworICAgIGlmICghY3ApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYXNzdW1lIHRoZSBzYW1lIGFzIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgCisgICAgICAgICAqLworICAgICAgICBuZXd1c2VyLT5wcml2S2V5ID0gbmV0c25tcF9tZW1kdXAobmV3dXNlci0+YXV0aEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4pOworICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gbmV3dXNlci0+YXV0aEtleUxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcChidWYsIi1tIikgPT0gMCkgeworICAgICAgICAgICAgLyogYSBtYXN0ZXIga2V5IGlzIHNwZWNpZmllZCAqLworICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHJldCA9IHNpemVvZih1c2VyS2V5KTsKKyAgICAgICAgICAgIHRtcHAgPSB1c2VyS2V5OworICAgICAgICAgICAgdXNlcktleUxlbiA9IDA7CisgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJnJldCwgJnVzZXJLZXlMZW4sIDAsIGJ1ZikpIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbSIpOworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChidWYsIi1sIikgIT0gMCkgeworICAgICAgICAgICAgLyogYSBwYXNzd29yZCBpcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIHVzZXJLZXlMZW4gPSBzaXplb2YodXNlcktleSk7CisgICAgICAgICAgICByZXQyID0gZ2VuZXJhdGVfS3UobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGJ1Ziwgc3RybGVuKGJ1ZiksIHVzZXJLZXksICZ1c2VyS2V5TGVuKTsKKyAgICAgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSB0aGUgcHJpdmFjeSBrZXkgZnJvbSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBsaWVkIHBhc3MgcGhyYXNlLiIpOworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIEFuZCB0dXJuIGl0IGludG8gYSBsb2NhbGl6ZWQga2V5IAorICAgICAgICAgKi8KKyAgICAgICAgcmV0MiA9IHNjX2dldF9wcm9wZXJsZW5ndGgobmV3dXNlci0+YXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOworICAgICAgICBpZiAocmV0MiA8IDApIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZXQgcHJvcGVyIGtleSBsZW5ndGggdG8gdXNlIGZvciB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpdmFjeSBhbGdvcml0aG0uIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ld3VzZXItPnByaXZLZXkgPSAodV9jaGFyICopIG1hbGxvYyhyZXQyKTsKKworICAgICAgICBpZiAoc3RyY21wKGJ1ZiwiLWwiKSA9PSAwKSB7CisgICAgICAgICAgICAvKiBhIGxvY2FsIGtleSBpcyBkaXJlY3RseSBzcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICByZXQgPSByZXQyOworICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IDA7CisgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmbmV3dXNlci0+cHJpdktleSwgJnJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXd1c2VyLT5wcml2S2V5TGVuLCAwLCBidWYpKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLWwiKTsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSByZXQyOworICAgICAgICAgICAgcmV0MiA9IGdlbmVyYXRlX2t1bChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcktleSwgdXNlcktleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5LCAmbmV3dXNlci0+cHJpdktleUxlbik7CisgICAgICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgbG9jYWxpemVkIHByaXZhY3kga2V5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoS3VsKSBmcm9tIHRoZSBtYXN0ZXIga2V5IChLdSkuIik7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKG5ld3VzZXItPnByaXZLZXlMZW4gPj0gcHJpdktleUxlbikgfHwgKHByaXZLZXlMZW4gPT0gMCkpeworICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IHByaXZLZXlMZW47CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHByaXZLZXkgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCBieSBwcml2UHJvdG9jb2wgKi8KKyAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGFkZDoKKyAgICB1c21fYWRkX3VzZXIobmV3dXNlcik7CisgICAgREVCVUdNU0dUTCgoInVzbVVzZXIiLCAiY3JlYXRlZCBhIG5ldyB1c2VyICVzIGF0ICIsIG5ld3VzZXItPnNlY05hbWUpKTsKKyAgICBERUJVR01TR0hFWCgoInVzbVVzZXIiLCBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4pKTsKKyAgICBERUJVR01TRygoInVzbVVzZXIiLCAiXG4iKSk7Cit9CisKK3ZvaWQKK3NubXB2M19hdXRodHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCit7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKKyAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiTUQ1IikgPT0gMCkKKyAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIlNIQSIpID09IDApCisgICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgIGVsc2UKKyAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBhdXRoZW50aWNhdGlvbiB0eXBlIik7CisgICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNOworICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAic2V0IGRlZmF1bHQgYXV0aGVudGljYXRpb24gdHlwZTogJXNcbiIsIGNwdHIpKTsKK30KKworY29uc3Qgb2lkICAgICAgKgorZ2V0X2RlZmF1bHRfYXV0aHR5cGUoc2l6ZV90ICogbGVuKQoreworICAgIGlmIChkZWZhdWx0QXV0aFR5cGUgPT0gTlVMTCkgeworICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSBTTk1QX0RFRkFVTFRfQVVUSF9QUk9UTzsKKyAgICAgICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gU05NUF9ERUZBVUxUX0FVVEhfUFJPVE9MRU47CisgICAgfQorICAgIGlmIChsZW4pCisgICAgICAgICpsZW4gPSBkZWZhdWx0QXV0aFR5cGVMZW47CisgICAgcmV0dXJuIGRlZmF1bHRBdXRoVHlwZTsKK30KKwordm9pZAorc25tcHYzX3ByaXZ0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKK3sKKyAgICBpbnQgdGVzdGNhc2UgPSAwOworCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKKyAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiREVTIikgPT0gMCkgeworICAgICAgICB0ZXN0Y2FzZSA9IDE7CisgICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbURFU1ByaXZQcm90b2NvbDsKKyAgICB9CisjZW5kaWYKKworI2lmIEhBVkVfQUVTCisgICAgLyogWFhYIEFFUzogYXNzdW1lcyBvaWQgbGVuZ3RoID09IGRlcyBvaWQgbGVuZ3RoICovCisgICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIkFFUzEyOCIpID09IDAgfHwKKyAgICAgICAgc3RyY2FzZWNtcChjcHRyLCAiQUVTIikgPT0gMCkgeworICAgICAgICB0ZXN0Y2FzZSA9IDE7CisgICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbUFFUzEyOFByaXZQcm90b2NvbDsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAodGVzdGNhc2UgPT0gMCkKKyAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBwcml2YWN5IHR5cGUiKTsKKyAgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSBTTk1QX0RFRkFVTFRfUFJJVl9QUk9UT0xFTjsKKyAgICBERUJVR01TR1RMKCgic25tcHYzIiwgInNldCBkZWZhdWx0IHByaXZhY3kgdHlwZTogJXNcbiIsIGNwdHIpKTsKK30KKworY29uc3Qgb2lkICAgICAgKgorZ2V0X2RlZmF1bHRfcHJpdnR5cGUoc2l6ZV90ICogbGVuKQoreworICAgIGlmIChkZWZhdWx0UHJpdlR5cGUgPT0gTlVMTCkgeworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCisgICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbURFU1ByaXZQcm90b2NvbDsKKyNlbHNlCisgICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbUFFU1ByaXZQcm90b2NvbDsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk07CisgICAgfQorICAgIGlmIChsZW4pCisgICAgICAgICpsZW4gPSBkZWZhdWx0UHJpdlR5cGVMZW47CisgICAgcmV0dXJuIGRlZmF1bHRQcml2VHlwZTsKK30KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wdjMuYyBiL3NubXBsaWIvc25tcHYzLmMKaW5kZXggZTNiZGM1MC4uNDM1Y2FmZCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wdjMuYworKysgYi9zbm1wbGliL3NubXB2My5jCkBAIC0xMSwxMSArMTEsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0zOSw5ICszNSw2IEBACiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtODIsNiArNzUsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKIHN0YXRpYyB1X2xvbmcgICBlbmdpbmVCb290cyA9IDE7CiBzdGF0aWMgdW5zaWduZWQgaW50IGVuZ2luZUlEVHlwZSA9IEVOR0lORUlEX1RZUEVfTkVUU05NUF9STkQ7CiBzdGF0aWMgdW5zaWduZWQgY2hhciAqZW5naW5lSUQgPSBOVUxMOwpAQCAtOTIsMTAwICs4NywxMCBAQAogc3RhdGljIHNpemVfdCAgIG9sZEVuZ2luZUlETGVuZ3RoID0gMDsKIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBzbm1wdjNzdGFydHRpbWU7CiAKLS8qCi0gKiBTZXQgdXAgZGVmYXVsdCBzbm1wdjMgcGFyYW1ldGVyIHZhbHVlIHN0b3JhZ2UuCi0gKi8KLXN0YXRpYyBjb25zdCBvaWQgKmRlZmF1bHRBdXRoVHlwZSA9IE5VTEw7Ci1zdGF0aWMgc2l6ZV90ICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gMDsKLXN0YXRpYyBjb25zdCBvaWQgKmRlZmF1bHRQcml2VHlwZSA9IE5VTEw7Ci1zdGF0aWMgc2l6ZV90ICAgZGVmYXVsdFByaXZUeXBlTGVuID0gMDsKLQotLyogdGhpcyBpcyBwcm9iYWJseSBhbiBvdmVyLWtpbGwgaWZkZWYsIGJ1dCB3aHkgbm90ICovCi0jaWYgZGVmaW5lZChIQVZFX1NZU19USU1FU19IKSAmJiBkZWZpbmVkKEhBVkVfVU5JU1REX0gpICYmIGRlZmluZWQoSEFWRV9USU1FUykgJiYgZGVmaW5lZChfU0NfQ0xLX1RDSykgJiYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoVUlOVF9NQVgpCi0KLSNkZWZpbmUgU05NUF9VU0VfVElNRVMgMQotCi1zdGF0aWMgY2xvY2tfdCBzbm1wdjNzdGFydENsb2NrOwotc3RhdGljIGxvbmcgY2xvY2t0aWNrcyA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxhc3RjYWxsdGltZSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHdyYXBjb3VudGVyID0gMDsKLQotI2VuZGlmIC8qIHRpbWVzKCkgdGVzdHMgKi8KLQogI2lmIGRlZmluZWQoSUZIV0FERFJMRU4pICYmIGRlZmluZWQoU0lPQ0dJRkhXQUREUikKIHN0YXRpYyBpbnQgICAgICBnZXRId0FkZHJlc3MoY29uc3QgY2hhciAqbmV0d29ya0RldmljZSwgY2hhciAqYWRkcmVzc091dCk7CiAjZW5kaWYKIAotdm9pZAotc25tcHYzX2F1dGh0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKLXsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQotICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJNRDUiKSA9PSAwKQotICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiU0hBIikgPT0gMCkKLSAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgZWxzZQotICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIGF1dGhlbnRpY2F0aW9uIHR5cGUiKTsKLSAgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk07Ci0gICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJzZXQgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiB0eXBlOiAlc1xuIiwgY3B0cikpOwotfQotCi1jb25zdCBvaWQgICAgICAqCi1nZXRfZGVmYXVsdF9hdXRodHlwZShzaXplX3QgKiBsZW4pCi17Ci0gICAgaWYgKGRlZmF1bHRBdXRoVHlwZSA9PSBOVUxMKSB7Ci0gICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IFNOTVBfREVGQVVMVF9BVVRIX1BST1RPOwotICAgICAgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSBTTk1QX0RFRkFVTFRfQVVUSF9QUk9UT0xFTjsKLSAgICB9Ci0gICAgaWYgKGxlbikKLSAgICAgICAgKmxlbiA9IGRlZmF1bHRBdXRoVHlwZUxlbjsKLSAgICByZXR1cm4gZGVmYXVsdEF1dGhUeXBlOwotfQotCi12b2lkCi1zbm1wdjNfcHJpdnR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQotewotICAgIGludCB0ZXN0Y2FzZSA9IDA7Ci0KLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwotICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJERVMiKSA9PSAwKSB7Ci0gICAgICAgIHRlc3RjYXNlID0gMTsKLSAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtREVTUHJpdlByb3RvY29sOwotICAgIH0KLSNlbmRpZgotCi0jaWYgSEFWRV9BRVMKLSAgICAvKiBYWFggQUVTOiBhc3N1bWVzIG9pZCBsZW5ndGggPT0gZGVzIG9pZCBsZW5ndGggKi8KLSAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiQUVTMTI4IikgPT0gMCB8fAotICAgICAgICBzdHJjYXNlY21wKGNwdHIsICJBRVMiKSA9PSAwKSB7Ci0gICAgICAgIHRlc3RjYXNlID0gMTsKLSAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtQUVTMTI4UHJpdlByb3RvY29sOwotICAgIH0KLSNlbmRpZgotICAgIGlmICh0ZXN0Y2FzZSA9PSAwKQotICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHByaXZhY3kgdHlwZSIpOwotICAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IFNOTVBfREVGQVVMVF9QUklWX1BST1RPTEVOOwotICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAic2V0IGRlZmF1bHQgcHJpdmFjeSB0eXBlOiAlc1xuIiwgY3B0cikpOwotfQotCi1jb25zdCBvaWQgICAgICAqCi1nZXRfZGVmYXVsdF9wcml2dHlwZShzaXplX3QgKiBsZW4pCi17Ci0gICAgaWYgKGRlZmF1bHRQcml2VHlwZSA9PSBOVUxMKSB7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKLSAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtREVTUHJpdlByb3RvY29sOwotI2Vsc2UKLSAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtQUVTUHJpdlByb3RvY29sOwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STTsKLSAgICB9Ci0gICAgaWYgKGxlbikKLSAgICAgICAgKmxlbiA9IGRlZmF1bHRQcml2VHlwZUxlbjsKLSAgICByZXR1cm4gZGVmYXVsdFByaXZUeXBlOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogc25tcHYzX3NlY0xldmVsX2NvbmYKICAqCkBAIC0yMTYsMTYgKzEyMSwxMyBAQAogdm9pZAogc25tcHYzX3NlY0xldmVsX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgYnVmWzEwMjRdOwogICAgIGludCAgICAgICAgICAgICBzZWNMZXZlbDsKIAogICAgIGlmICgoc2VjTGV2ZWwgPSBwYXJzZV9zZWNMZXZlbF9jb25mKCB3b3JkLCBjcHRyICkpID49IDAgKSB7CiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJICAgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwsIHNlY0xldmVsKTsKICAgICB9IGVsc2UgewotICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVW5rbm93biBzZWN1cml0eSBsZXZlbDogJXMiLCBjcHRyKTsKLSAgICAgICAgYnVmWyBzaXplb2YoYnVmKS0xIF0gPSAwOwotICAgICAgICBjb25maWdfcGVycm9yKGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoIlVua25vd24gc2VjdXJpdHkgbGV2ZWw6ICVzIiwgY3B0cik7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAiZGVmYXVsdCBzZWNMZXZlbCBzZXQgdG86ICVzID0gJWRcbiIsIGNwdHIsCiAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCkBAIC0yMzMsNiArMTM1LDkgQEAKIH0KIAogCitORVRTTk1QX0lNUE9SVCBpbnQKK3NubXB2M19vcHRpb25zKGNoYXIgKm9wdGFyZywgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgY2hhciAqKkFwc3osCisgICAgICAgICAgICAgICBjaGFyICoqWHBzeiwgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KTsKIGludAogc25tcHYzX29wdGlvbnMoY2hhciAqb3B0YXJnLCBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBjaGFyICoqQXBzeiwKICAgICAgICAgICAgICAgIGNoYXIgKipYcHN6LCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpCkBAIC0yNDksNyArMTU0LDcgQEAKICAgICAvKgogICAgICAqIGFuZCAnLi4uLiAiLTN4IHZhbHVlIiAuLi4uJyAgKCp3aXRoKiB0aGUgcXVvdGVzKQogICAgICAqLwotICAgIHdoaWxlICgqb3B0YXJnICYmIGlzc3BhY2UoKm9wdGFyZykpIHsKKyAgICB3aGlsZSAoKm9wdGFyZyAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqb3B0YXJnKSkpIHsKICAgICAgICAgb3B0YXJnKys7CiAgICAgfQogICAgIC8qCkBAIC0zNTksNiArMjY0LDcgQEAKIAogICAgICAgICBicmVhazsKIAorI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogICAgIGNhc2UgJ2EnOgogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CiAgICAgICAgIGlmICghc3RyY2FzZWNtcChvcHRhcmcsICJNRDUiKSkgewpAQCAtNDA5LDYgKzMxNSw3IEBACiAgICAgY2FzZSAnWCc6CiAgICAgICAgICpYcHN6ID0gb3B0YXJnOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KIAogICAgIGNhc2UgJ20nOiB7CiAgICAgICAgIHNpemVfdCBidWZTaXplID0gc2l6ZW9mKHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSk7CkBAIC01MzUsNyArNDQyLDcgQEAKICAgICAgICAgICogZ2V0IHRoZSBob3N0IG5hbWUgYW5kIHNhdmUgdGhlIGluZm9ybWF0aW9uIAogICAgICAgICAgKi8KICAgICAgICAgZ2V0aG9zdG5hbWUoKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIGhlbnQgPSBnZXRob3N0YnluYW1lKChjaGFyICopIGJ1Zik7CisgICAgICAgIGhlbnQgPSBuZXRzbm1wX2dldGhvc3RieW5hbWUoKGNoYXIgKikgYnVmKTsKICAgICAgICAgaWYgKGhlbnQgJiYgaGVudC0+aF9hZGRydHlwZSA9PSBBRl9JTkVUNikgewogICAgICAgICAgICAgbG9jYWxFbmdpbmVJRFR5cGUgPSBFTkdJTkVJRF9UWVBFX0lQVjY7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01NTgsNyArNDY1LDcgQEAKICAgICAgICAgICogZ2V0IHRoZSBob3N0IG5hbWUgYW5kIHNhdmUgdGhlIGluZm9ybWF0aW9uIAogICAgICAgICAgKi8KICAgICAgICAgZ2V0aG9zdG5hbWUoKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIGhlbnQgPSBnZXRob3N0YnluYW1lKChjaGFyICopIGJ1Zik7CisgICAgICAgIGhlbnQgPSBuZXRzbm1wX2dldGhvc3RieW5hbWUoKGNoYXIgKikgYnVmKTsKICAgICB9CiAjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9HRVRIT1NUTkFNRSAqLwpAQCAtNzUxLDI5NyArNjU4LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50Ci1mcmVlX2VuZ2luZXRpbWVfb25fc2h1dGRvd24oaW50IG1ham9yaWQsIGludCBtaW5vcmlkLCB2b2lkICpzZXJ2ZXJhcmcsCi0JCQkgICAgdm9pZCAqY2xpZW50YXJnKQotewotICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAiZnJlZSBlbmdpbmV0aW1lIGNhbGxiYWNrIGNhbGxlZFxuIikpOwotICAgIGlmIChlbmdpbmVJRCAhPSBOVUxMKQotCWZyZWVfZW5naW5ldGltZShlbmdpbmVJRCwgZW5naW5lSURMZW5ndGgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkCi11c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCi17Ci0gICAgY2hhciAgICAgICAgICAgKmNwOwotICAgIGNoYXIgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZfTUVESVVNXTsKLSAgICBzdHJ1Y3QgdXNtVXNlciAqbmV3dXNlcjsKLSAgICB1X2NoYXIgICAgICAgICAgdXNlcktleVtTTk1QX01BWEJVRl9TTUFMTF0sICp0bXBwOwotICAgIHNpemVfdCAgICAgICAgICB1c2VyS2V5TGVuID0gU05NUF9NQVhCVUZfU01BTEw7Ci0gICAgc2l6ZV90ICAgICAgICAgIHByaXZLZXlMZW4gPSAwOwotICAgIHNpemVfdCAgICAgICAgICByZXQ7Ci0gICAgaW50ICAgICAgICAgICAgIHJldDI7Ci0gICAgaW50ICAgICAgICAgICAgIHRlc3RjYXNlOwotCi0gICAgbmV3dXNlciA9IHVzbV9jcmVhdGVfdXNlcigpOwotCi0gICAgLyoKLSAgICAgKiBSRUFEOiBTZWN1cml0eSBOYW1lIAotICAgICAqLwotICAgIGNwID0gY29weV9ud29yZChsaW5lLCBidWYsIHNpemVvZihidWYpKTsKLQotICAgIC8qCi0gICAgICogbWlnaHQgYmUgYSAtZSBFTkdJTkVJRCBhcmd1bWVudCAKLSAgICAgKi8KLSAgICBpZiAoc3RyY21wKGJ1ZiwgIi1lIikgPT0gMCkgewotICAgICAgICBzaXplX3QgICAgICAgICAgZWJ1Zl9sZW4gPSAzMiwgZW91dF9sZW4gPSAwOwotICAgICAgICB1X2NoYXIgICAgICAgICAqZWJ1ZiA9ICh1X2NoYXIgKikgbWFsbG9jKGVidWZfbGVuKTsKLQotICAgICAgICBpZiAoZWJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1lIGZsYWciKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBHZXQgdGhlIHNwZWNpZmllZCBlbmdpbmVpZCBmcm9tIHRoZSBsaW5lLiAgCi0gICAgICAgICAqLwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmZWJ1ZiwgJmVidWZfbGVuLCAmZW91dF9sZW4sIDEsIGJ1ZikpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQgRW5naW5lSUQgYXJndW1lbnQgdG8gLWUiKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoZWJ1Zik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCA9IGVidWY7Ci0gICAgICAgIG5ld3VzZXItPmVuZ2luZUlETGVuID0gZW91dF9sZW47Ci0gICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQgPSBzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQoJnJldCk7Ci0gICAgICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRExlbiA9IHJldDsKLSAgICB9Ci0KLSAgICBuZXd1c2VyLT5zZWNOYW1lID0gc3RyZHVwKGJ1Zik7Ci0gICAgbmV3dXNlci0+bmFtZSA9IHN0cmR1cChidWYpOwotCi0gICAgaWYgKCFjcCkKLSAgICAgICAgZ290byBhZGQ7ICAgICAgICAgICAgICAgLyogbm8gYXV0aGVudGljYXRpb24gb3IgcHJpdmFjeSB0eXBlICovCi0KLSAgICAvKgotICAgICAqIFJFQUQ6IEF1dGhlbnRpY2F0aW9uIFR5cGUgCi0gICAgICovCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKLSAgICBpZiAoc3RybmNtcChjcCwgIk1ENSIsIDMpID09IDApIHsKLSAgICAgICAgbWVtY3B5KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgdXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDTUQ1QXV0aFByb3RvY29sKSk7Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgaWYgKHN0cm5jbXAoY3AsICJTSEEiLCAzKSA9PSAwKSB7Ci0gICAgICAgIG1lbWNweShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCIpOwotICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3AgPSBza2lwX3Rva2VuKGNwKTsKLQotICAgIC8qCi0gICAgICogUkVBRDogQXV0aGVudGljYXRpb24gUGFzcyBQaHJhc2Ugb3Iga2V5Ci0gICAgICovCi0gICAgaWYgKCFjcCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJubyBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZSIpOwotICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgaWYgKHN0cmNtcChidWYsIi1tIikgPT0gMCkgewotICAgICAgICAvKiBhIG1hc3RlciBrZXkgaXMgc3BlY2lmaWVkICovCi0gICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIHJldCA9IHNpemVvZih1c2VyS2V5KTsKLSAgICAgICAgdG1wcCA9IHVzZXJLZXk7Ci0gICAgICAgIHVzZXJLZXlMZW4gPSAwOwotICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJnJldCwgJnVzZXJLZXlMZW4sIDAsIGJ1ZikpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1tIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAoYnVmLCItbCIpICE9IDApIHsKLSAgICAgICAgLyogYSBwYXNzd29yZCBpcyBzcGVjaWZpZWQgKi8KLSAgICAgICAgdXNlcktleUxlbiA9IHNpemVvZih1c2VyS2V5KTsKLSAgICAgICAgcmV0MiA9IGdlbmVyYXRlX0t1KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGJ1Ziwgc3RybGVuKGJ1ZiksIHVzZXJLZXksICZ1c2VyS2V5TGVuKTsKLSAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIGtleSBmcm9tIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwbGllZCBwYXNzIHBocmFzZS4iKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgLyoKLSAgICAgKiBBbmQgdHVybiBpdCBpbnRvIGEgbG9jYWxpemVkIGtleSAKLSAgICAgKi8KLSAgICByZXQyID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuKTsKLSAgICBpZiAocmV0MiA8PSAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIkNvdWxkIG5vdCBnZXQgcHJvcGVyIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIGtleSBsZW5ndGgiKTsKLQl1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG5ld3VzZXItPmF1dGhLZXkgPSAodV9jaGFyICopIG1hbGxvYyhyZXQyKTsKLQotICAgIGlmIChzdHJjbXAoYnVmLCItbCIpID09IDApIHsKLSAgICAgICAgLyogYSBsb2NhbCBrZXkgaXMgZGlyZWN0bHkgc3BlY2lmaWVkICovCi0gICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4gPSAwOwotICAgICAgICByZXQgPSByZXQyOwotICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmbmV3dXNlci0+YXV0aEtleSwgJnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld3VzZXItPmF1dGhLZXlMZW4sIDAsIGJ1ZikpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1sIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXQgIT0gbmV3dXNlci0+YXV0aEtleUxlbikgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW1wcm9wZXIga2V5IGxlbmd0aCB0byAtbCIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4gPSByZXQyOwotICAgICAgICByZXQyID0gZ2VuZXJhdGVfa3VsKG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcktleSwgdXNlcktleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhLZXksICZuZXd1c2VyLT5hdXRoS2V5TGVuKTsKLSAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgbG9jYWxpemVkIGF1dGhlbnRpY2F0aW9uIGtleSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIoS3VsKSBmcm9tIHRoZSBtYXN0ZXIga2V5IChLdSkuIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjcCkKLSAgICAgICAgZ290byBhZGQ7ICAgICAgICAgICAgICAgLyogbm8gcHJpdmFjeSB0eXBlICh3aGljaCBpcyBsZWdhbCkgKi8KLQotICAgIC8qCi0gICAgICogUkVBRDogUHJpdmFjeSBUeXBlIAotICAgICAqLwotICAgIHRlc3RjYXNlID0gMDsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwotICAgIGlmIChzdHJuY21wKGNwLCAiREVTIiwgMykgPT0gMCkgewotICAgICAgICBtZW1jcHkobmV3dXNlci0+cHJpdlByb3RvY29sLCB1c21ERVNQcml2UHJvdG9jb2wsCi0gICAgICAgICAgICAgICBzaXplb2YodXNtREVTUHJpdlByb3RvY29sKSk7Ci0gICAgICAgIHRlc3RjYXNlID0gMTsKLQkvKiBERVMgdXNlcyBhIDEyOCBiaXQga2V5LCA2NCBiaXRzIG9mIHdoaWNoIGlzIGEgc2FsdCAqLwotCXByaXZLZXlMZW4gPSAxNjsKLSAgICB9Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0FFUwotICAgIGlmIChzdHJuY21wKGNwLCAiQUVTMTI4IiwgNikgPT0gMCB8fAotICAgICAgICAgICAgICAgc3RybmNtcChjcCwgIkFFUyIsIDMpID09IDApIHsKLSAgICAgICAgbWVtY3B5KG5ld3VzZXItPnByaXZQcm90b2NvbCwgdXNtQUVTUHJpdlByb3RvY29sLAotICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUFFU1ByaXZQcm90b2NvbCkpOwotICAgICAgICB0ZXN0Y2FzZSA9IDE7Ci0JcHJpdktleUxlbiA9IDE2OwotICAgIH0KLSNlbmRpZgotICAgIGlmICh0ZXN0Y2FzZSA9PSAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gcHJpdmFjeSBwcm90b2NvbCIpOwotICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3AgPSBza2lwX3Rva2VuKGNwKTsKLSAgICAvKgotICAgICAqIFJFQUQ6IEVuY3J5cHRpb24gUGFzcyBQaHJhc2Ugb3Iga2V5Ci0gICAgICovCi0gICAgaWYgKCFjcCkgewotICAgICAgICAvKgotICAgICAgICAgKiBhc3N1bWUgdGhlIHNhbWUgYXMgdGhlIGF1dGhlbnRpY2F0aW9uIGtleSAKLSAgICAgICAgICovCi0gICAgICAgIG5ld3VzZXItPnByaXZLZXkgPSBuZXRzbm1wX21lbWR1cChuZXd1c2VyLT5hdXRoS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbik7Ci0gICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSBuZXd1c2VyLT5hdXRoS2V5TGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKGJ1ZiwiLW0iKSA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBhIG1hc3RlciBrZXkgaXMgc3BlY2lmaWVkICovCi0gICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICAgICAgcmV0ID0gc2l6ZW9mKHVzZXJLZXkpOwotICAgICAgICAgICAgdG1wcCA9IHVzZXJLZXk7Ci0gICAgICAgICAgICB1c2VyS2V5TGVuID0gMDsKLSAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmcmV0LCAmdXNlcktleUxlbiwgMCwgYnVmKSkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1tIik7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwiLWwiKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBhIHBhc3N3b3JkIGlzIHNwZWNpZmllZCAqLwotICAgICAgICAgICAgdXNlcktleUxlbiA9IHNpemVvZih1c2VyS2V5KTsKLSAgICAgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9LdShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgYnVmLCBzdHJsZW4oYnVmKSwgdXNlcktleSwgJnVzZXJLZXlMZW4pOwotICAgICAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIHRoZSBwcml2YWN5IGtleSBmcm9tIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcGxpZWQgcGFzcyBwaHJhc2UuIik7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogQW5kIHR1cm4gaXQgaW50byBhIGxvY2FsaXplZCBrZXkgCi0gICAgICAgICAqLwotICAgICAgICByZXQyID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbik7Ci0gICAgICAgIGlmIChyZXQyIDwgMCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdldCBwcm9wZXIga2V5IGxlbmd0aCB0byB1c2UgZm9yIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YWN5IGFsZ29yaXRobS4iKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV3dXNlci0+cHJpdktleSA9ICh1X2NoYXIgKikgbWFsbG9jKHJldDIpOwotCi0gICAgICAgIGlmIChzdHJjbXAoYnVmLCItbCIpID09IDApIHsKLSAgICAgICAgICAgIC8qIGEgbG9jYWwga2V5IGlzIGRpcmVjdGx5IHNwZWNpZmllZCAqLwotICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgICAgIHJldCA9IHJldDI7Ci0gICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gMDsKLSAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZuZXd1c2VyLT5wcml2S2V5LCAmcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld3VzZXItPnByaXZLZXlMZW4sIDAsIGJ1ZikpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbCIpOwotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IHJldDI7Ci0gICAgICAgICAgICByZXQyID0gZ2VuZXJhdGVfa3VsKG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyS2V5LCB1c2VyS2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXksICZuZXd1c2VyLT5wcml2S2V5TGVuKTsKLSAgICAgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgcHJpdmFjeSBrZXkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihLdWwpIGZyb20gdGhlIG1hc3RlciBrZXkgKEt1KS4iKTsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgobmV3dXNlci0+cHJpdktleUxlbiA+PSBwcml2S2V5TGVuKSB8fCAocHJpdktleUxlbiA9PSAwKSl7Ci0gICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gcHJpdktleUxlbjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAvKiBUaGUgcHJpdktleSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHJlcXVpcmVkIGJ5IHByaXZQcm90b2NvbCAqLwotICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgYWRkOgotICAgIHVzbV9hZGRfdXNlcihuZXd1c2VyKTsKLSAgICBERUJVR01TR1RMKCgidXNtVXNlciIsICJjcmVhdGVkIGEgbmV3IHVzZXIgJXMgYXQgIiwgbmV3dXNlci0+c2VjTmFtZSkpOwotICAgIERFQlVHTVNHSEVYKCgidXNtVXNlciIsIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbikpOwotICAgIERFQlVHTVNHKCgidXNtVXNlciIsICJcbiIpKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIGVuZ2luZUJvb3RzX2NvbmYKICAqCkBAIC0xMDU2LDcgKzY3Miw3IEBACiBlbmdpbmVCb290c19jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCiB7CiAgICAgZW5naW5lQm9vdHMgPSBhdG9pKGNwdHIpICsgMTsKLSAgICBERUJVR01TR1RMKCgic25tcHYzIiwgImVuZ2luZUJvb3RzOiAlZFxuIiwgZW5naW5lQm9vdHMpKTsKKyAgICBERUJVR01TR1RMKCgic25tcHYzIiwgImVuZ2luZUJvb3RzOiAlbHVcbiIsIGVuZ2luZUJvb3RzKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCkBAIC0xMTI3LDkgKzc0Myw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNlZSBpZiBhbHJlYWR5IHNldCBpZiBzbyBlcmFzZSAmIHJlbGVhc2UgaXQgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoTlVMTCAhPSBlbmdpbmVJRE5pYykgewotICAgICAgICAgICAgU05NUF9GUkVFKGVuZ2luZUlETmljKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUoZW5naW5lSUROaWMpOwogICAgICAgICBlbmdpbmVJRE5pYyA9ICh1X2NoYXIgKikgbWFsbG9jKHN0cmxlbihjcHRyKSArIDEpOwogICAgICAgICBpZiAoTlVMTCAhPSBlbmdpbmVJRE5pYykgewogICAgICAgICAgICAgc3RyY3B5KChjaGFyICopIGVuZ2luZUlETmljLCBjcHRyKTsKQEAgLTExOTgsNyArODEyLDcgQEAKIH0KIAogLyoKLSAqIGVuZ2luZUlEX29sZF9jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKToKKyAqIG9sZGVuZ2luZUlEX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOgogICogCiAgKiBSZWFkcyBhIG9jdGV0IHN0cmluZyBlbmNvZGVkIGVuZ2luZUlEIGludG8gdGhlIG9sZEVuZ2luZUlEIGFuZAogICogb2xkRW5naW5lSURMZW4gcG9pbnRlcnMuCkBAIC0xMjEwLDggKzgyNCwzMiBAQAogfQogCiAvKgorICogZXhhY3RFbmdpbmVJRF9jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKToKKyAqIAorICogUmVhZHMgYSBvY3RldCBzdHJpbmcgZW5jb2RlZCBlbmdpbmVJRCBpbnRvIHRoZSBlbmdpbmVJRCBhbmQKKyAqIGVuZ2luZUlETGVuIHBvaW50ZXJzLgorICovCit2b2lkCitleGFjdEVuZ2luZUlEX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKK3sKKyAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjcHRyLCAmZW5naW5lSUQsICZlbmdpbmVJRExlbmd0aCk7CisgICAgaWYgKGVuZ2luZUlETGVuZ3RoID4gTUFYX0VOR0lORUlEX0xFTkdUSCkgeworCW5ldHNubXBfY29uZmlnX2Vycm9yKAorCSAgICAiZXhhY3RFbmdpbmVJRCAnJXMnIHRvbyBsb25nOyB0cnVuY2F0aW5nIHRvICVkIGJ5dGVzIiwKKwkgICAgY3B0ciwgTUFYX0VOR0lORUlEX0xFTkdUSCk7CisgICAgICAgIGVuZ2luZUlEW01BWF9FTkdJTkVJRF9MRU5HVEggLSAxXSA9ICdcMCc7CisgICAgICAgIGVuZ2luZUlETGVuZ3RoID0gTUFYX0VOR0lORUlEX0xFTkdUSDsKKyAgICB9CisgICAgZW5naW5lSURJc1NldCA9IDE7CisgICAgZW5naW5lSURUeXBlID0gRU5HSU5FSURfVFlQRV9FWEFDVDsKK30KKworCisvKgogICogbWVyZWx5IGNhbGwgCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfZW5naW5ldGltZV9hbGFybSwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX0VOR0lORVRJTUVfQUxBUk0KIHZvaWQKIGdldF9lbmdpbmV0aW1lX2FsYXJtKHVuc2lnbmVkIGludCByZWdudW0sIHZvaWQgKmNsaWVudGFyZ3MpCiB7CkBAIC0xMjE5LDYgKzg1Nyw3IEBACiAgICAgICAgd3JhcHBpbmcgb2YgdGhlIHRpbWVzKCkgb3V0cHV0ICovCiAgICAgc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfRU5HSU5FVElNRV9BTEFSTSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogaW5pdF9zbm1wdjMKQEAgLTEyMzMsMTkgKzg3Miw3IEBACiB2b2lkCiBpbml0X3NubXB2Myhjb25zdCBjaGFyICp0eXBlKQogewotI2lmIFNOTVBfVVNFX1RJTUVTCi0gIHN0cnVjdCB0bXMgZHVtbXk7Ci0KLSAgLyogZml4bWU6IC0xIGlzIGZhdWx0IGNvZGUuLi4gKi8KLSAgc25tcHYzc3RhcnRDbG9jayA9IHRpbWVzKCZkdW1teSk7Ci0KLSAgLyogcmVtZW1iZXIgaG93IG1hbnkgdGlja3MgcGVyIHNlY29uZCB0aGVyZSBhcmUsIHNpbmNlIHRpbWVzKCkgcmV0dXJucyB0aGlzICovCi0KLSAgY2xvY2t0aWNrcyA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOwotCi0jZW5kaWYgLyogU05NUF9VU0VfVElNRVMgKi8KLQotICAgIGdldHRpbWVvZmRheSgmc25tcHYzc3RhcnR0aW1lLCBOVUxMKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnNubXB2M3N0YXJ0dGltZSk7CiAKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHR5cGUgPSAiX19zbm1wYXBwX18iOwpAQCAtMTI2NywxMyArODk0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB2M19zdG9yZSwgKHZvaWQgKikgc3RyZHVwKHR5cGUpKTsKIAogICAgIC8qCi0gICAgICogRnJlZSBzdHVmZiBhdCBzaHV0ZG93biB0aW1lCi0gICAgICovCi0gICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9lbmdpbmV0aW1lX29uX3NodXRkb3duLCBOVUxMKTsKLQotICAgIC8qCiAgICAgICogaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIAogICAgICAqLwogICAgIC8qCkBAIC0xMjkzLDYgKzkxMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIik7CiAgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcih0eXBlLCAib2xkRW5naW5lSUQiLCBvbGRlbmdpbmVJRF9jb25mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcih0eXBlLCAiZXhhY3RFbmdpbmVJRCIsIGV4YWN0RW5naW5lSURfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwogICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIodHlwZSwgImVuZ2luZUlEVHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVJRFR5cGVfY29uZiwgTlVMTCwgIm51bSIpOwogICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIodHlwZSwgImVuZ2luZUlETmljIiwgZW5naW5lSUROaWNfY29uZiwKQEAgLTEzMzEsMzAgKzk1Myw5IEBACiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmVmVyc2lvbiIsIHZlcnNpb25fY29uZiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMXwyY3wzIik7CiAKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZBdXRoVHlwZSIsIHNubXB2M19hdXRodHlwZV9jb25mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICJNRDV8U0hBIik7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmUHJpdlR5cGUiLCBzbm1wdjNfcHJpdnR5cGVfY29uZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotI2lmZGVmIEhBVkVfQUVTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFU3xBRVMiKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFUyAoQUVTIHN1cHBvcnQgbm90IGF2YWlsYWJsZSkiKTsKLSNlbmRpZgogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZlNlY3VyaXR5TGV2ZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB2M19zZWNMZXZlbF9jb25mLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdiIpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aFBhc3MiLCB1c21fc2V0X3Bhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdlBhc3MiLCB1c21fc2V0X3Bhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2S2V5IiwgdXNtX3NldF9wYXNzd29yZCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhMb2NhbEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2TG9jYWxLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMTM4MywxOCArOTg0LDIwIEBACiAgICAgLyoKICAgICAgKiBpZiBvdXIgZW5naW5lSUQgaGFzIGNoYW5nZWQgYXQgYWxsLCB0aGUgYm9vdHMgcmVjb3JkIG11c3QgYmUgc2V0IHRvIDEgCiAgICAgICovCi0gICAgaWYgKGVuZ2luZUlETGVuICE9IChpbnQpIG9sZEVuZ2luZUlETGVuZ3RoIHx8CisgICAgaWYgKGVuZ2luZUlETGVuICE9IG9sZEVuZ2luZUlETGVuZ3RoIHx8CiAgICAgICAgIG9sZEVuZ2luZUlEID09IE5VTEwgfHwgY19lbmdpbmVJRCA9PSBOVUxMIHx8CiAgICAgICAgIG1lbWNtcChvbGRFbmdpbmVJRCwgY19lbmdpbmVJRCwgZW5naW5lSURMZW4pICE9IDApIHsKICAgICAgICAgZW5naW5lQm9vdHMgPSAxOwogICAgIH0KIAorI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogICAgIC8qCi0gICAgICogc2V0IG91ciBsb2NhbCBlbmdpbmVUaW1lIGluIHRoZSBMQ0QgdGltaW5nIGNhY2hlIAorICAgICAqIGZvciBVU00gc2V0IG91ciBsb2NhbCBlbmdpbmVUaW1lIGluIHRoZSBMQ0QgdGltaW5nIGNhY2hlIAogICAgICAqLwogICAgIHNldF9lbmdpbmV0aW1lKGNfZW5naW5lSUQsIGVuZ2luZUlETGVuLAogICAgICAgICAgICAgICAgICAgIHNubXB2M19sb2NhbF9zbm1wRW5naW5lQm9vdHMoKSwKICAgICAgICAgICAgICAgICAgICBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKSwgVFJVRSk7CisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCiAKICAgICBTTk1QX0ZSRUUoY19lbmdpbmVJRCk7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKQEAgLTE1MDgsMTAgKzExMTEsNyBAQAogICAgIGlmICghZGVzdCB8fCAhZGVzdGxlbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoKmRlc3QpIHsKLSAgICAgICAgU05NUF9GUkVFKCpkZXN0KTsKLSAgICAgICAgKmRlc3QgPSBOVUxMOwotICAgIH0KKyAgICBTTk1QX0ZSRUUoKmRlc3QpOwogICAgICpkZXN0bGVuID0gMDsKIAogICAgIGlmIChzcmNsZW4gJiYgc3JjKSB7CkBAIC0xNTU5LDM4ICsxMTU5LDMzIEBACiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRCgpICovCiAKLS8qCi0gKiBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKTogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUKLSAqIHNubXB2MyBlbmdpbmUgbGFzdCBpbmNyZW1lbnRlZCBlbmdpbmVfYm9vdHMgCisvKioKKyAqIFJldHVybiB0aGUgdmFsdWUgb2Ygc25tcEVuZ2luZVRpbWUuIEFjY29yZGluZyB0byBSRkMgMzQxNCBzbm1wRW5naW5lVGltZQorICogaXMgYSAzMS1iaXQgY291bnRlci4gZW5naW5lQm9vdHMgbXVzdCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIHRoYXQKKyAqIGNvdW50ZXIgd3JhcHMgYXJvdW5kLgorICoKKyAqIEBzZWUgU2VlIGFsc28gPGEgaHJlZj0iaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQxNCI+UkZDIDM0MTQ8L2E+LgorICoKKyAqIEBub3RlIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGV2ZXJ5CisgKiAgIDIqKjMxIHNlY29uZHMuCiAgKi8KIHVfbG9uZwogc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKHZvaWQpCiB7Ci0jaWZkZWYgU05NUF9VU0VfVElNRVMKLSAgc3RydWN0IHRtcyBkdW1teTsKLSAgY2xvY2tfdCBub3cgPSB0aW1lcygmZHVtbXkpOwotICAvKiBmaXhtZTogLTEgaXMgZmF1bHQgY29kZS4uLiAqLwotICB1bnNpZ25lZCBpbnQgcmVzdWx0OworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORworICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HICovCiAKLSAgaWYgKG5vdyA8IHNubXB2M3N0YXJ0Q2xvY2spIHsKLSAgICAgIHJlc3VsdCA9IFVJTlRfTUFYIC0gKHNubXB2M3N0YXJ0Q2xvY2sgLSBub3cpOwotICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gbm93IC0gc25tcHYzc3RhcnRDbG9jazsKLSAgfQotICBpZiAocmVzdWx0IDwgbGFzdGNhbGx0aW1lKSB7Ci0gICAgICAvKiB3cmFwcGVkICovCi0gICAgICB3cmFwY291bnRlcisrOwotICB9Ci0gIGxhc3RjYWxsdGltZSA9IHJlc3VsdDsKLSAgcmVzdWx0ID0gIChVSU5UX01BWC9jbG9ja3RpY2tzKSp3cmFwY291bnRlciArIHJlc3VsdC9jbG9ja3RpY2tzOwotCi0gIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvKiAhU05NUF9VU0VfVElNRVMgKi8KKyAgICBzdGF0aWMgdWludDMyX3QgbGFzdF9lbmdpbmVUaW1lOwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CisgICAgdWludDMyX3QgZW5naW5lVGltZTsKIAotICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLSAgICByZXR1cm4gY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigmbm93LCAmc25tcHYzc3RhcnR0aW1lKTsKLSNlbmRpZiAvKiBIQVZFX1NZU19USU1FU19IICovCisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOworICAgIGVuZ2luZVRpbWUgPSBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCZub3csICZzbm1wdjNzdGFydHRpbWUpICYgMHg3ZmZmZmZmZkw7CisgICAgaWYgKGVuZ2luZVRpbWUgPCBsYXN0X2VuZ2luZVRpbWUpCisgICAgICAgIGVuZ2luZUJvb3RzKys7CisgICAgbGFzdF9lbmdpbmVUaW1lID0gZW5naW5lVGltZTsKKyAgICByZXR1cm4gZW5naW5lVGltZTsKIH0KIAogCkBAIC0xNjYyLDE4ICsxMjU3LDE3IEBACiAjZW5kaWYKIAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQotLyoKLSAqIHNubXB2M19zZXRfZW5naW5lQm9vdHNBbmRUaW1lKCk6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuICBHbyBhd2F5LiAKLSAqLwotLyoKLSAqIEl0IGNlcnRhaW5seSBzaG91bGQgbmV2ZXIgYmUgdXNlZCwgdW5sZXNzIGluIGEgdGVzdGluZyBzY2VuZXJvLAotICogd2hpY2ggaXMgd2h5IGl0IHdhcyBjcmVhdGVkIAorLyoqCisgKiBTZXQgU05NUHYzIGVuZ2luZUJvb3RzIGFuZCBzdGFydCB0aW1lLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuIEdvIGF3YXkuIEl0IGNlcnRhaW5seSBzaG91bGQgbmV2ZXIgYmUKKyAqICAgdXNlZCwgdW5sZXNzIGluIGEgdGVzdGluZyBzY2VuYXJpbywgd2hpY2ggaXMgd2h5IGl0IHdhcyBjcmVhdGVkCiAgKi8KIHZvaWQKIHNubXB2M19zZXRfZW5naW5lQm9vdHNBbmRUaW1lKGludCBib290cywgaW50IHR0aW1lKQogewogICAgIGVuZ2luZUJvb3RzID0gYm9vdHM7Ci0gICAgZ2V0dGltZW9mZGF5KCZzbm1wdjNzdGFydHRpbWUsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmc25tcHYzc3RhcnR0aW1lKTsKICAgICBzbm1wdjNzdGFydHRpbWUudHZfc2VjIC09IHR0aW1lOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL3NucHJpbnRmLmMgYi9zbm1wbGliL3NucHJpbnRmLmMKaW5kZXggYWFhZjdkMS4uNzI2YzRmNCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbnByaW50Zi5jCisrKyBiL3NubXBsaWIvc25wcmludGYuYwpAQCAtNjMsMjUgKzYzLDExIEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2lmIEhBVkVfU1REQVJHX0gKICMgaW5jbHVkZSA8c3RkYXJnLmg+Ci0jIGRlZmluZSBIQVZFX1NUREFSR1MgICAgICAgICAgIC8qIGxldCdzIGhvcGUgdGhhdCB3b3JrcyBldmVyeXdoZXJlIChtaikgKi8KICMgZGVmaW5lIFZBX0xPQ0FMX0RFQ0wgICB2YV9saXN0IGFwCiAjIGRlZmluZSBWQV9TVEFSVChmKSAgICAgdmFfc3RhcnQoYXAsIGYpCiAjIGRlZmluZSBWQV9TSElGVCh2LHQpICA7ICAgICAgIC8qIG5vLW9wIGZvciBBTlNJICovCiAjIGRlZmluZSBWQV9FTkQgICAgICAgICAgdmFfZW5kKGFwKQotI2VsaWYgSEFWRV9WQVJBUkdTX0gKLSMgIGluY2x1ZGUgPHZhcmFyZ3MuaD4KLSMgIHVuZGVmIEhBVkVfU1REQVJHUwotIyAgZGVmaW5lIFZBX0xPQ0FMX0RFQ0wgICB2YV9saXN0IGFwCi0jICBkZWZpbmUgVkFfU1RBUlQoZikgICAgIHZhX3N0YXJ0KGFwKSAgLyogZiBpcyBpZ25vcmVkISAqLwotIyAgZGVmaW5lIFZBX1NISUZUKHYsdCkgdiA9IHZhX2FyZyhhcCx0KQotIyAgZGVmaW5lIFZBX0VORCAgICAgICAgdmFfZW5kKGFwKQotI2Vsc2UKLS8qCi0gKiBYWCAqKiBOTyBWQVJBUkdTICoqIFhYCi0gKi8KLSNlbmRpZgogCiAjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQogI2RlZmluZSBMRE9VQkxFIGxvbmcgZG91YmxlCkBAIC03MjUsMjAgKzcxMSw5IEBACiAvKgogICogVkFSQVJHUzMgCiAgKi8KLSNpZmRlZiBIQVZFX1NUREFSR1MKIGludAogc25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotI2Vsc2UKLWludAotc25wcmludGYodmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7Ci0jaWZuZGVmIEhBVkVfU1REQVJHUwotICAgIGNoYXIgICAgICAgICAgICpzdHI7Ci0gICAgc2l6ZV90ICAgICAgICAgIGNvdW50OwotICAgIGNoYXIgICAgICAgICAgICpmbXQ7Ci0jZW5kaWYKICAgICBWQV9MT0NBTF9ERUNMOwogCiAgICAgVkFfU1RBUlQoZm10KTsKQEAgLTgyOCw0ICs4MDMsNiBAQAogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTlBSSU5URl9URVNUICovCiAKKyNlbHNlCitpbnQgc25wcmludGZfdW51c2VkOwkvKiBTdXBwcmVzcyAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZyAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9TTlBSSU5URiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zdHJsY3B5LmMgYi9zbm1wbGliL3N0cmxjcHkuYwppbmRleCBjZTU3ZjQwLi4wMjM1YTMwIDEwMDY0NAotLS0gYS9zbm1wbGliL3N0cmxjcHkuYworKysgYi9zbm1wbGliL3N0cmxjcHkuYwpAQCAtNSw4ICs1LDYgQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgIUhBVkVfU1RSTENQWQotCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKQEAgLTE1LDYgKzEzLDggQEAKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKwogLyogCiAgKiBDb3BpZXMgc3JjIHRvIHRoZSBkZXN0IGJ1ZmZlci4gVGhlIGNvcHkgd2lsbCBuZXZlciBvdmVyZmxvdyB0aGUgZGVzdCBidWZmZXIKICAqIGFuZCBkZXN0IHdpbGwgYWx3YXlzIGJlIG51bGwgdGVybWluYXRlZCwgbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBkZXN0IGJ1ZmZlci4KQEAgLTQxLDUgKzQxLDMgQEAKIAlkZXN0W25ld19sZW5dID0gJ1wwJzsgCiAJcmV0dXJuIChzcmNfbGVuKTsgCiB9Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfU1RSTENQWSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zdHJ0b2tfci5jIGIvc25tcGxpYi9zdHJ0b2tfci5jCmluZGV4IGJmZTVhOWIuLjIxZDQ3ZDYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3RydG9rX3IuYworKysgYi9zbm1wbGliL3N0cnRva19yLmMKQEAgLTMxLDE2ICszMSwxNiBAQAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiAhSEFWRV9TVFJUT0tfUgotCiAjaWZuZGVmIFdJTjMyCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKwogLyoKLSAqIHRocmVhZC1zYXZlIHZlcnNpb24gb2Ygc3RydG9rCisgKiB0aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIHN0cnRvawogICovCiBjaGFyICoKIHN0cnRva19yKGNoYXIgKnMsIGNvbnN0IGNoYXIgKmRlbGltLCBjaGFyICoqbGFzdHMpCkBAIC01MCw4ICs1MCw4IEBACiAJY2hhciAqdG9rOwogCiAJLyogcyBtYXkgYmUgTlVMTCAqLwotCS8qYXNzZXJ0KGRlbGltICE9IE5VTEwpOyovCi0JLyphc3NlcnQobGFzdHMgIT0gTlVMTCk7Ki8KKwkvKm5ldHNubXBfYXNzZXJ0KGRlbGltICE9IE5VTEwpOyovCisJLypuZXRzbm1wX2Fzc2VydChsYXN0cyAhPSBOVUxMKTsqLwogCiAJaWYgKHMgPT0gTlVMTCAmJiAocyA9ICpsYXN0cykgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTkyLDQgKzkyLDMgQEAKIAl9CiAJLyogTk9UUkVBQ0hFRCAqLwogfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9TVFJUT0tfUiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zdHJ0b2wuYyBiL3NubXBsaWIvc3RydG9sLmMKaW5kZXggOTg5YTE2My4uYzcxZjhiYSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zdHJ0b2wuYworKysgYi9zbm1wbGliL3N0cnRvbC5jCkBAIC0zMyw4ICszMyw2IEBACiBzdGF0aWMgY2hhciAgICAgc2Njc2lkW10gPSAiQCgjKXN0cnRvbC5jICAgIDUuNCAoQmVya2VsZXkpIDIvMjMvOTEiOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCiAKLSNpZiAhSEFWRV9TVFJUT0wKLQogI2lmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgpAQCAtMTI1LDUgKzEyMywzIEBACiAgICAgICAgICplbmRwdHIgPSBhbnkgPyBzIC0gMSA6IChjaGFyICopIG5wdHI7CiAgICAgcmV0dXJuIChhY2MpOwogfQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX1NUUlRPTCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zdHJ0b3VsLmMgYi9zbm1wbGliL3N0cnRvdWwuYwppbmRleCA4MDEyOTIwLi43YWVhMzMwIDEwMDY0NAotLS0gYS9zbm1wbGliL3N0cnRvdWwuYworKysgYi9zbm1wbGliL3N0cnRvdWwuYwpAQCAtMjksOCArMjksNiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiAhSEFWRV9TVFJUT1VMCi0KICNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKIHN0YXRpYyBjaGFyICAgICBzY2NzaWRbXSA9ICJAKCMpc3RydG91bC5jICAgOC4xIChCZXJrZWxleSkgNi80LzkzIjsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwpAQCAtMTA3LDUgKzEwNSwzIEBACiAgICAgICAgICplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKICAgICByZXR1cm4gKGFjYyk7CiB9Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfU1RSVE9VTCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zdHJ0b3VsbC5jIGIvc25tcGxpYi9zdHJ0b3VsbC5jCmluZGV4IGJlOTRmMjkuLjllZTUzYjQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3RydG91bGwuYworKysgYi9zbm1wbGliL3N0cnRvdWxsLmMKQEAgLTIwLDYgKzIwLDggQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaWZuZGVmIEhBVkVfU1RSVE9VTEwKKwogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTQ5LDEzICs1MSw4IEBACiAjZGVmaW5lIFVMTE9OR19NQVggVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKQogI2VuZGlmCiAKLSNpZmRlZiBTVFJUT1VMTF9VTklUX1RFU1QKLXVpbnQ2NF90Ci1teV9zdHJ0b3VsbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLSNlbHNlCiB1aW50NjRfdAogc3RydG91bGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCi0jZW5kaWYKIHsKICAgICB1aW50NjRfdCAgICAgICAgcmVzdWx0ID0gMDsKICAgICBjb25zdCBjaGFyICAgICAqcDsKQEAgLTE2MiwxMjIgKzE1OSw0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKFNUUlRPVUxMX1VOSVRfVEVTVCkKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZm5kZWYgUFJJdTY0Ci0jaWZkZWYgX01TQ19WRVIKLSNkZWZpbmUgUFJJdTY0ICJJNjR1IgotI2Vsc2UKLSNkZWZpbmUgUFJJdTY0ICJsbHUiCi0jZW5kaWYKLSNlbmRpZgotCi1zdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgewotICAgIC8qCi0gICAgICogaW5wdXRzIAotICAgICAqLwotICAgIGNvbnN0IGNoYXIgICAgICpucHRyOwotICAgIGludCAgICAgICAgICAgICBiYXNlOwotICAgIC8qCi0gICAgICogZXhwZWN0ZWQgb3V0cHV0cyAKLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgZXhwZWN0ZWRfZXJybm87Ci0gICAgaW50ICAgICAgICAgICAgIGV4cGVjdGVkX2VuZDsKLSAgICB1aW50NjRfdCAgICAgICAgZXhwZWN0ZWRfcmVzdWx0OwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSB0ZXN0X2lucHV0W10gPSB7Ci0gICAgeyIweDAiLCAwLCAwLCAzLCAwfSwKLSAgICB7IjEiLCAwLCAwLCAxLCAxfSwKLSAgICB7IjB4MSIsIDAsIDAsIDMsIDF9LAotICAgIHsiICAtMDY2NiIsIDAsIDAsIDcsIC0wNjY2fSwKLSAgICB7IiAgLTB4NjY2IiwgMCwgMCwgOCwgLTB4NjY2fSwKLSAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwgMCwgMCwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZSl9LAotICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZlIiwgMCwgMCwgMTgsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZSl9LAotICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLCAwLCAwLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCi0gICAgeyIweGZmZmZmZmZmZmZmZmZmZmYiLCAwLCAwLCAxOCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCi0gICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNiIsIDAsIEVSQU5HRSwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAotICAgIHsiMHgxMDAwMDAwMDAwMDAwMDAwMCIsIDAsIEVSQU5HRSwgMTksIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAotICAgIHsiZmYiLCAxNiwgMCwgMiwgMjU1fSwKLSAgICB7IjB4ZmYiLCAxNiwgMCwgNCwgMjU1fSwKLSAgICB7IiAiLCAwLCAwLCAwLCAwfSwKLSAgICB7IjB4IiwgMCwgMCwgMSwgMH0sCi0gICAgeyIweCIsIDgsIDAsIDEsIDB9LAotICAgIHsiMHgiLCAxNiwgMCwgMSwgMH0sCi0gICAgeyJ6eXl5IiwgMCwgMCwgMCwgMH0sCi0gICAgeyIweGZmZmZmZmZmZmZmZmZmZmZmIiwgMCwgRVJBTkdFLCAxOSwgVUxMT05HX01BWH0sCi0gICAgeyIweGZmZmZmZmZmZmZmZmZmZmZmeiIsIDAsIEVSQU5HRSwgMTksIFVMTE9OR19NQVh9Ci19OwotCi1pbnQKLW1haW4odm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgZmFpbHVyZV9jb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgaW50ICAgIGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3RfaW5wdXQpIC8gc2l6ZW9mKHRlc3RfaW5wdXRbMF0pOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlICpjb25zdCBwID0gJnRlc3RfaW5wdXRbaV07Ci0gICAgICAgIGNoYXIgICAgICAgICAgICplbmRwdHI7Ci0gICAgICAgIHVpbnQ2NF90ICAgICAgICByZXN1bHQ7Ci0KLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICByZXN1bHQgPSBteV9zdHJ0b3VsbChwLT5ucHRyLCAmZW5kcHRyLCBwLT5iYXNlKTsKLSAgICAgICAgaWYgKGVycm5vICE9IHAtPmV4cGVjdGVkX2Vycm5vKSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgZmFpbGVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlcnJubyAlZCIKLSAgICAgICAgICAgICAgICAgICAiLCBnb3QgZXJybm8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZXJybm8sIGVycm5vKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ICE9IHAtPmV4cGVjdGVkX3Jlc3VsdCkgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIGZhaWxlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgcmVzdWx0ICUiIFBSSXU2NAotICAgICAgICAgICAgICAgICAgICIsIGdvdCByZXN1bHQgJSIgUFJJdTY0ICJcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfcmVzdWx0LCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRwdHIgLSBwLT5ucHRyICE9IHAtPmV4cGVjdGVkX2VuZCkgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIGZhaWxlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZW5kICVkLCIKLSAgICAgICAgICAgICAgICAgICAiIGdvdCBlbmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZW5kLCAoaW50KSAoZW5kcHRyIC0gcC0+bnB0cikpOwotICAgICAgICB9Ci0KLSNpZiBIQVZFX1NUUlRPVUxMCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcmVzdWx0ID0gc3RydG91bGwocC0+bnB0ciwgJmVuZHB0ciwgcC0+YmFzZSk7Ci0gICAgICAgIGlmIChlcnJubyAhPSBwLT5leHBlY3RlZF9lcnJubykgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlcnJubyAlZCIKLSAgICAgICAgICAgICAgICAgICAiLCBsaWJjIHN0cnRvdWxsKCkgcmV0dXJuZWQgZXJybm8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZXJybm8sIGVycm5vKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ICE9IHAtPmV4cGVjdGVkX3Jlc3VsdCkgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCByZXN1bHQgJSIgUFJJdTY0Ci0gICAgICAgICAgICAgICAgICAgIiwgbGliYyBzdHJ0b3VsbCgpIHJldHVybmVkIHJlc3VsdCAlIiBQUkl1NjQgIlxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9yZXN1bHQsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVuZHB0ciAtIHAtPm5wdHIgIT0gcC0+ZXhwZWN0ZWRfZW5kKSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVuZCAlZCwiCi0gICAgICAgICAgICAgICAgICAgIiBsaWJjIHN0cnRvdWxsKCkgcmV0dXJuZWQgZW5kICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2VuZCwgKGludCkgKGVuZHB0ciAtIHAtPm5wdHIpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIGlmIChmYWlsdXJlX2NvdW50ID09IDApCi0gICAgICAgIHByaW50ZigiQWxsICVkIHRlc3RzIHBhc3NlZC5cbiIsIGkpOwotICAgIHJldHVybiAwOwotfQotCi0jZW5kaWYgLyogZGVmaW5lZChTVFJUT1VMTF9VTklUX1RFU1QpICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogNAotICogaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gKiBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLVdhbGwgLVdlcnJvciAtRFNUUlRPVUxMX1VOSVRfVEVTVD0xIC1JLi4vaW5jbHVkZSAtZyAtbyBzdHJ0b3VsbC11bml0LXRlc3Qgc3RydG91bGwuYyAmJiAuL3N0cnRvdWxsLXVuaXQtdGVzdCIKLSAqIEVuZDoKLSAqLworI2VuZGlmIC8qIEhBVkVfU1RSVE9VTEwgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3lzdGVtLmMgYi9zbm1wbGliL3N5c3RlbS5jCmluZGV4IDM4ZWNmZWIuLmNjN2NmM2MgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3lzdGVtLmMKKysrIGIvc25tcGxpYi9zeXN0ZW0uYwpAQCAtMzMsOSArMzMsMTYgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KIC8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKgogICogU3lzdGVtIGRlcGVuZGVudCByb3V0aW5lcyBnbyBoZXJlCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtNTQsMTEgKzYxLDcgQEAKICNlbmRpZgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03NCwxNSArNzcsMTYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKICNpZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKIAogI2lmIEhBVkVfU1lTX1NPQ0tJT19ICiAjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgpAQCAtMTQ0LDEwICsxNDgsMzQgQEAKICNpbmNsdWRlIDxzeXMvc3lzdGVtaW5mby5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKGRhcndpbjkpCisjaW5jbHVkZSA8Y3J0X2V4dGVybnMuaD4gICAgICAgIC8qIGZvciBfTlNHZXRBcmd2KCkgKi8KKyNlbmRpZgorCisjaWYgSEFWRV9QV0RfSAorI2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9HUlBfSAorI2luY2x1ZGUgPGdycC5oPgorI2VuZGlmCisKICNpZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyNpZiAxIC8qSEFWRV9BUlBBX05BTUVTRVJfSCovCisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx2YWxpZGF0b3IvdmFsaWRhdG9yLmg+CisvKiBOZXRTTk1QIGFuZCBETlNTRUMtVG9vbHMgYm90aCBkZWZpbmUgRlJFRS4gV2UnbGwgbm90IHVzZSBlaXRoZXIgaGVyZS4gKi8KKyN1bmRlZiBGUkVFCisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgpAQCAtMTU2LDYgKzE4NCwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmg+IC8qIGZvciBnZXRfdGVtcF9maWxlX3BhdHRlcm4oKSAqLwogCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisKKy8qIE5ldFNOTVAgYW5kIEROU1NFQy1Ub29scyBib3RoIGRlZmluZSBGUkVFLiBXZSdsbCBub3QgdXNlIGVpdGhlciBoZXJlLiAqLworI3VuZGVmIEZSRUUKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN5c3RlbV9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c2VyX2luZm9ybWF0aW9uLCBzeXN0ZW1fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYsIHN5c3RlbV9hbGwpCisKICNpZm5kZWYgSUZGX0xPT1BCQUNLCiAjCWRlZmluZSBJRkZfTE9PUEJBQ0sgMAogI2VuZGlmCkBAIC0xNjYsNiArMjA0LDM3IEBACiAjIGRlZmluZSBMT09QQkFDSyAgICAweDdmMDAwMDAxCiAjZW5kaWYKIAorI2lmbmRlZiBFQUlfRkFJTAorIyBkZWZpbmUgRUFJX0ZBSUwgICAgLTQgICAgLyogTm9uLXJlY292ZXJhYmxlIGZhaWx1cmUgaW4gbmFtZSByZXMuICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfRk9SSykKK3N0YXRpYyB2b2lkCitfZGFlbW9uX3ByZXAoaW50IHN0ZGVycl9sb2cpCit7CisgICAgLyogQXZvaWQga2VlcGluZyBhbnkgZGlyZWN0b3J5IGluIHVzZS4gKi8KKyAgICBjaGRpcigiLyIpOworCisgICAgaWYgKHN0ZGVycl9sb2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICogQ2xvc2UgaW5oZXJpdGVkIGZpbGUgZGVzY3JpcHRvcnMgdG8gYXZvaWQKKyAgICAgKiBrZWVwaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMuCisgICAgICovCisgICAgY2xvc2UoMCk7CisgICAgY2xvc2UoMSk7CisgICAgY2xvc2UoMik7CisKKyAgICAvKgorICAgICAqIFJlZGlyZWN0IHN0ZHtpbixvdXQsZXJyfSB0byAvZGV2L251bGwsIGp1c3QgaW4gY2FzZS4KKyAgICAgKi8KKyAgICBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworICAgIGR1cCgwKTsKKyAgICBkdXAoMCk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBmb3JrIGN1cnJlbnQgcHJvY2VzcyBpbnRvIHRoZSBiYWNrZ3JvdW5kLgogICoKQEAgLTE5NCw2ICsyNjMsMjIgQEAKICAgICBpbnQgaSA9IDA7CiAgICAgREVCVUdNU0dUKCgiZGFlbW9uaXplIiwiZGVhbW9uaXppbmcuLi5cbiIpKTsKICNpZiBIQVZFX0ZPUksKKyNpZiBkZWZpbmVkKGRhcndpbjkpCisgICAgIGNoYXIgICAgICAgICAgICBwYXRoIFtQQVRIX01BWF0gPSAiIjsKKyAgICAgdWludDMyX3QgICAgICAgIHNpemUgPSBzaXplb2YgKHBhdGgpOworCisgICAgIC8qCisgICAgICAqIGlmIHdlIGFyZSBhbHJlYWR5IGxhdW5jaGVkIGluIGEgImRhZW1vbml6ZWQgc3RhdGUiLCBqdXN0CisgICAgICAqIGNsb3NlICYgcmVkaXJlY3QgdGhlIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICovCisgICAgIGlmKGdldHBwaWQoKSA8PSAyKSB7CisgICAgICAgICBfZGFlbW9uX3ByZXAoc3RkZXJyX2xvZyk7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorCisgICAgIGlmIChfTlNHZXRFeGVjdXRhYmxlUGF0aCAocGF0aCwgJnNpemUpKQorICAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCiAgICAgLyoKICAgICAgKiBGb3JrIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBpbnZva2luZyBwcm9jZXNzIGFuZCB0bwogICAgICAqIGd1YXJhbnRlZSB0aGF0IHdlIGFyZW4ndCBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLgpAQCAtMjM1LDI2ICszMjAsMjIgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgREVCVUdNU0dUKCgiZGFlbW9uaXplIiwiY2hpbGQgY29udGludWluZ1xuIikpOwogCi0gICAgICAgICAgICAvKiBBdm9pZCBrZWVwaW5nIGFueSBkaXJlY3RvcnkgaW4gdXNlLiAqLwotICAgICAgICAgICAgY2hkaXIoIi8iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFzdGRlcnJfbG9nKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBDbG9zZSBpbmhlcml0ZWQgZmlsZSBkZXNjcmlwdG9ycyB0byBhdm9pZAotICAgICAgICAgICAgICAgICAqIGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjbG9zZSgwKTsKLSAgICAgICAgICAgICAgICBjbG9zZSgxKTsKLSAgICAgICAgICAgICAgICBjbG9zZSgyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFJlZGlyZWN0IHN0ZHtpbixvdXQsZXJyfSB0byAvZGV2L251bGwsIGp1c3QgaW4KLSAgICAgICAgICAgICAgICAgKiBjYXNlLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7Ci0gICAgICAgICAgICAgICAgZHVwKDApOwotICAgICAgICAgICAgICAgIGR1cCgwKTsKLSAgICAgICAgICAgIH0KKyNpZiAhIGRlZmluZWQoZGFyd2luOSkKKyAgICAgICAgICAgIF9kYWVtb25fcHJlcChzdGRlcnJfbG9nKTsKKyNlbHNlCisgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgKiBTb21lIGRhcndpbiBjYWxscyAodXNpbmcgbWFjaCBwb3J0cykgZG9uJ3Qgd29yayBhZnRlcgorICAgICAgICAgICAgICAqIGEgZm9yay4gU28sIG5vdyB0aGF0IHdlJ3ZlIGZvcmtlZCwgd2UgcmUtZXhlYyBvdXJzZWxmCisgICAgICAgICAgICAgICogdG8gZW5zdXJlIHRoYXQgdGhlIGNoaWxkJ3MgbWFjaCBwb3J0cyBhcmUgYWxsIHNldCB1cCBjb3JyZWN0bHksCisgICAgICAgICAgICAgICogdGhlIGdldHBwaWQgY2FsbCBhYm92ZSB3aWxsIHByZXZlbnQgdGhlIGV4ZWMgY2hpbGQgZnJvbQorICAgICAgICAgICAgICAqIGZvcmtpbmcuLi4KKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICBjaGFyICogY29uc3QgKmFyZ3YgPSAqX05TR2V0QXJndiAoKTsKKyAgICAgICAgICAgICBERUJVR01TR1QoKCJkYWVtb25pemUiLCJyZS1leGVjaW5nIGZvcmtlZCBjaGlsZFxuIikpOworICAgICAgICAgICAgIGV4ZWN2IChwYXRoLCBhcmd2KTsKKyAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJGb3JrZWQgY2hpbGQgdW5hYmxlIHRvIHJlLWV4ZWMgLSAlcy5cbiIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgICAgIGV4aXQgKDApOworI2VuZGlmCiAgICAgICAgIH0KICNlbmRpZiAvKiAhV0lOMzIgKi8KICAgICB9CkBAIC0yNjYsMjA0ICszNDcsNiBAQAogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAogICovCiAjaWZkZWYJCQkJCQkJV0lOMzIKLSMJZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMJZGVmaW5lIFdJTjMySU9fSVNfU1RESU8KLSMJZGVmaW5lIFBBVEhMRU4JMTAyNAotCi0jCWluY2x1ZGUgPHRjaGFyLmg+Ci0jCWluY2x1ZGUgPHdpbmRvd3MuaD4KLQotLyoKLSAqIE1pbkdXIGRlZmluZXMgV0lOMzIsIGJ1dCBoYXMgd29ya2luZyBkaXJlbnQgc3R1ZmYuCi0gKi8KLSNpZm5kZWYgSEFWRV9ESVJFTlRfSCAKLQotLyoKLSAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gcmVhZCBhbGwgdGhlIGRpcmVjdG9yeSBuYW1lcyBpbnRvIGEgc3RyaW5nIHRhYmxlCi0gKiAqIChzZXBhcmF0ZWQgYnkgbnVsbHMpIGFuZCB3aGVuIG9uZSBvZiB0aGUgb3RoZXIgZGlyIGZ1bmN0aW9ucyBpcyBjYWxsZWQKLSAqICogcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KLSAqLwotRElSICAgICAgICAgICAgKgotb3BlbmRpcihjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBESVIgICAgICAgICAgICAqcDsKLSAgICBsb25nICAgICAgICAgICAgbGVuOwotICAgIGxvbmcgICAgICAgICAgICBpZHg7Ci0gICAgY2hhciAgICAgICAgICAgIHNjYW5uYW1lc3BjW1BBVEhMRU5dOwotICAgIGNoYXIgICAgICAgICAgICpzY2FubmFtZSA9IHNjYW5uYW1lc3BjOwotICAgIHN0cnVjdCBzdGF0ICAgICBzYnVmOwotICAgIFdJTjMyX0ZJTkRfREFUQSBGaW5kRGF0YTsKLSAgICBIQU5ETEUgICAgICAgICAgZmg7Ci0KLSAgICAvKgotICAgICAqIGNoZWNrIHRvIHNlZSBpZiBmaWxlbmFtZSBpcyBhIGRpcmVjdG9yeSAKLSAgICAgKi8KLSAgICBpZiAoKHN0YXQoZmlsZW5hbWUsICZzYnVmKSA8IDApIHx8ICgoc2J1Zi5zdF9tb2RlICYgU19JRkRJUikgPT0gMCkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBnZXQgdGhlIGZpbGUgc3lzdGVtIGNoYXJhY3RlcmlzdGljcyAKLSAgICAgKi8KLSAgICAvKgotICAgICAqIGlmKEdldEZ1bGxQYXRoTmFtZShmaWxlbmFtZSwgU05NUF9NQVhQQVRILCByb290LCAmZHVtbXkpKSB7Ci0gICAgICogKiAgICBpZihkdW1teSA9IHN0cmNocihyb290LCAnXFwnKSkKLSAgICAgKiAqICAgICAgICAqKytkdW1teSA9ICdcMCc7Ci0gICAgICogKiAgICBpZihHZXRWb2x1bWVJbmZvcm1hdGlvbihyb290LCB2b2xuYW1lLCBTTk1QX01BWFBBVEgsICZzZXJpYWwsCi0gICAgICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4bmFtZSwgJmZsYWdzLCAwLCAwKSkgewotICAgICAqICogICAgICAgIGRvd25jYXNlID0gIShmbGFncyAmIEZTX0NBU0VfSVNfUFJFU0VSVkVEKTsKLSAgICAgKiAqICAgIH0KLSAgICAgKiAqICB9Ci0gICAgICogKiAgZWxzZSB7Ci0gICAgICogKiAgICBkb3duY2FzZSA9IFRSVUU7Ci0gICAgICogKiAgfQotICAgICAqLwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgdGhlIHNlYXJjaCBwYXR0ZXJuIAotICAgICAqLwotICAgIHN0cmNweShzY2FubmFtZSwgZmlsZW5hbWUpOwotCi0gICAgaWYgKHN0cmNocigiL1xcIiwgKihzY2FubmFtZSArIHN0cmxlbihzY2FubmFtZSkgLSAxKSkgPT0gTlVMTCkKLSAgICAgICAgc3RyY2F0KHNjYW5uYW1lLCAiLyoiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmNhdChzY2FubmFtZSwgIioiKTsKLQotICAgIC8qCi0gICAgICogZG8gdGhlIEZpbmRGaXJzdEZpbGUgY2FsbCAKLSAgICAgKi8KLSAgICBmaCA9IEZpbmRGaXJzdEZpbGUoc2Nhbm5hbWUsICZGaW5kRGF0YSk7Ci0gICAgaWYgKGZoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qCi0gICAgICogR2V0IHVzIGEgRElSIHN0cnVjdHVyZSAKLSAgICAgKi8KLSAgICBwID0gKERJUiAqKSBtYWxsb2Moc2l6ZW9mKERJUikpOwotICAgIC8qCi0gICAgICogTmV3eigxMzAzLCBwLCAxLCBESVIpOyAKLSAgICAgKi8KLSAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qCi0gICAgICogbm93IGFsbG9jYXRlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgdGFibGUgZm9yCi0gICAgICogKiB0aGUgZmlsZW5hbWVzIHRoYXQgd2UgZmluZC4KLSAgICAgKi8KLSAgICBpZHggPSBzdHJsZW4oRmluZERhdGEuY0ZpbGVOYW1lKSArIDE7Ci0gICAgcC0+c3RhcnQgPSAoY2hhciAqKSBtYWxsb2MoaWR4KTsKLSAgICAvKgotICAgICAqIE5ldygxMzA0LCBwLT5zdGFydCwgaWR4LCBjaGFyKTsKLSAgICAgKi8KLSAgICBpZiAocC0+c3RhcnQgPT0gTlVMTCkgewotICAgICAgICBmcmVlKHApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3RyY3B5KHAtPnN0YXJ0LCBGaW5kRGF0YS5jRmlsZU5hbWUpOwotICAgIC8qCi0gICAgICogaWYoZG93bmNhc2UpCi0gICAgICogKiAgICBzdHJsd3IocC0+c3RhcnQpOwotICAgICAqLwotICAgIHAtPm5maWxlcyA9IDA7Ci0KLSAgICAvKgotICAgICAqIGxvb3AgZmluZGluZyBhbGwgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHdpbGRjYXJkCi0gICAgICogKiAod2hpY2ggc2hvdWxkIGJlIGFsbCBvZiB0aGVtIGluIHRoaXMgZGlyZWN0b3J5ISkuCi0gICAgICogKiB0aGUgdmFyaWFibGUgaWR4IHNob3VsZCBwb2ludCBvbmUgcGFzdCB0aGUgbnVsbCB0ZXJtaW5hdG9yCi0gICAgICogKiBvZiB0aGUgcHJldmlvdXMgc3RyaW5nIGZvdW5kLgotICAgICAqLwotICAgIHdoaWxlIChGaW5kTmV4dEZpbGUoZmgsICZGaW5kRGF0YSkpIHsKLSAgICAgICAgbGVuID0gc3RybGVuKEZpbmREYXRhLmNGaWxlTmFtZSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGJ1bXAgdGhlIHN0cmluZyB0YWJsZSBzaXplIGJ5IGVub3VnaCBmb3IgdGhlCi0gICAgICAgICAqICogbmV3IG5hbWUgYW5kIGl0J3MgbnVsbCB0ZXJtaW5hdG9yCi0gICAgICAgICAqLwotICAgICAgICBwLT5zdGFydCA9IChjaGFyICopIHJlYWxsb2MoKHZvaWQgKikgcC0+c3RhcnQsIGlkeCArIGxlbiArIDEpOwotICAgICAgICAvKgotICAgICAgICAgKiBSZW5ldyhwLT5zdGFydCwgaWR4K2xlbisxLCBjaGFyKTsKLSAgICAgICAgICovCi0gICAgICAgIGlmIChwLT5zdGFydCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyY3B5KCZwLT5zdGFydFtpZHhdLCBGaW5kRGF0YS5jRmlsZU5hbWUpOwotICAgICAgICAvKgotICAgICAgICAgKiBpZiAoZG93bmNhc2UpIAotICAgICAgICAgKiAqICAgICAgICBzdHJsd3IoJnAtPnN0YXJ0W2lkeF0pOwotICAgICAgICAgKi8KLSAgICAgICAgcC0+bmZpbGVzKys7Ci0gICAgICAgIGlkeCArPSBsZW4gKyAxOwotICAgIH0KLSAgICBGaW5kQ2xvc2UoZmgpOwotICAgIHAtPnNpemUgPSBpZHg7Ci0gICAgcC0+Y3VyciA9IHAtPnN0YXJ0OwotICAgIHJldHVybiBwOwotfQotCi0KLS8qCi0gKiBSZWFkZGlyIGp1c3QgcmV0dXJucyB0aGUgY3VycmVudCBzdHJpbmcgcG9pbnRlciBhbmQgYnVtcHMgdGhlCi0gKiAqIHN0cmluZyBwb2ludGVyIHRvIHRoZSBuRGxsRXhwb3J0IGVudHJ5LgotICovCi1zdHJ1Y3QgZGlyZWN0ICAqCi1yZWFkZGlyKERJUiAqIGRpcnApCi17Ci0gICAgaW50ICAgICAgICAgICAgIGxlbjsKLSAgICBzdGF0aWMgaW50ICAgICAgZHVtbXkgPSAwOwotCi0gICAgaWYgKGRpcnAtPmN1cnIpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZmlyc3Qgc2V0IHVwIHRoZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuIAotICAgICAgICAgKi8KLSAgICAgICAgbGVuID0gc3RybGVuKGRpcnAtPmN1cnIpOwotICAgICAgICBzdHJjcHkoZGlycC0+ZGlyc3RyLmRfbmFtZSwgZGlycC0+Y3Vycik7Ci0gICAgICAgIGRpcnAtPmRpcnN0ci5kX25hbWxlbiA9IGxlbjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBGYWtlIGFuIGlub2RlIAotICAgICAgICAgKi8KLSAgICAgICAgZGlycC0+ZGlyc3RyLmRfaW5vID0gZHVtbXkrKzsKLQotICAgICAgICAvKgotICAgICAgICAgKiBOb3cgc2V0IHVwIGZvciB0aGUgbkRsbEV4cG9ydCBjYWxsIHRvIHJlYWRkaXIgCi0gICAgICAgICAqLwotICAgICAgICBkaXJwLT5jdXJyICs9IGxlbiArIDE7Ci0gICAgICAgIGlmIChkaXJwLT5jdXJyID49IChkaXJwLT5zdGFydCArIGRpcnAtPnNpemUpKSB7Ci0gICAgICAgICAgICBkaXJwLT5jdXJyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAmKGRpcnAtPmRpcnN0cik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOwotfQotCi0vKgotICogZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBvcGVuZGlyIAotICovCi1pbnQKLWNsb3NlZGlyKERJUiAqIGRpcnApCi17Ci0gICAgZnJlZShkaXJwLT5zdGFydCk7Ci0gICAgZnJlZShkaXJwKTsKLSAgICByZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBIQVZFX0RJUkVOVF9IICovCi0KLSNpZm5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKLQotaW50Ci1nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQotewotICAgIHN0cnVjdCBfdGltZWIgICB0aW1lYnVmZmVyOwotCi0gICAgX2Z0aW1lKCZ0aW1lYnVmZmVyKTsKLSAgICB0di0+dHZfdXNlYyA9IHRpbWVidWZmZXIubWlsbGl0bSAqIDEwMDA7Ci0gICAgdHYtPnR2X3NlYyA9IHRpbWVidWZmZXIudGltZTsKLSAgICByZXR1cm4gKDApOwotfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9HRVRUSU1FT0ZEQVkgKi8KLQogaW5fYWRkcl90CiBnZXRfbXlhZGRyKHZvaWQpCiB7CkBAIC02NDYsNyArNTI5LDcgQEAKIAogICAgIGZvciAoaWZycCA9IGlmYy5pZmNfcmVxOwogICAgICAgICAoY2hhciAqKWlmcnAgPCAoY2hhciAqKWlmYy5pZmNfcmVxICsgaWZjLmlmY19sZW47Ci0jaWZkZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4KKyNpZmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4KICAgICAgICAgaWZycCA9IChzdHJ1Y3QgaWZyZXEgKikoKChjaGFyICopIGlmcnApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlmcnAtPmlmcl9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcnAtPmlmcl9hZGRyLnNhX2xlbikKQEAgLTcwOSwxNCArNTkyLDE3IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKICNlbGlmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX05MSVNUKQogICAgIGludCAgICAgICAgICAgICBrbWVtOwotICAgIHN0YXRpYyBzdHJ1Y3Qgbmxpc3QgbmxbXSA9IHsKICNpZiAhZGVmaW5lZChocHV4KQotICAgICAgICB7KGNoYXIgKikgIl9ib290dGltZSJ9LAorICAgIHN0YXRpYyBjaGFyIGJvb3R0aW1lX25hbWVbXSA9ICJfYm9vdHRpbWUiOwogI2Vsc2UKLSAgICAgICAgeyhjaGFyICopICJib290dGltZSJ9LAorICAgIHN0YXRpYyBjaGFyIGJvb3R0aW1lX25hbWVbXSA9ICJib290dGltZSI7CiAjZW5kaWYKLSAgICAgICAgeyhjaGFyICopICIifQotICAgIH07CisgICAgc3RhdGljIGNoYXIgZW1wdHlfbmFtZVtdID0gIiI7CisgICAgc3RydWN0IG5saXN0IG5sWzJdOworCisgICAgbWVtc2V0KG5sLCAwLCBzaXplb2YobmwpKTsKKyAgICBubFswXS5uX25hbWUgPSBib290dGltZV9uYW1lOworICAgIG5sWzFdLm5fbmFtZSA9IGVtcHR5X25hbWU7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaHB1eDEwIHx8IGhwdXggMTEgKi8KIApAQCAtNzU2LDMwICs2NDIsMjUgQEAKIH0KICNlbmRpZgogCi0vKgotICogUmV0dXJucyB1cHRpbWUgaW4gY2VudGlzZWNvbmRzKCEpLgorLyoqCisgKiBSZXR1cm5zIHRoZSBzeXN0ZW0gdXB0aW1lIGluIGNlbnRpc2Vjb25kcy4KKyAqCisgKiBAbm90ZSBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBub3QgaWRlbnRpY2FsIHRvIHN5c1VwVGltZQorICogICBkZWZpbmVkIGluIFJGQyAxMjEzLiBnZXRfdXB0aW1lKCkgcmV0dXJucyB0aGUgc3lzdGVtIHVwdGltZSB3aGlsZQorICogICBzeXNVcFRpbWUgcmVwcmVzZW50cyB0aGUgdGltZSB0aGF0IGhhcyBlbGFwc2VkIHNpbmNlIHRoZSBtb3N0IHJlY2VudAorICogICByZXN0YXJ0IG9mIHRoZSBuZXR3b3JrIG1hbmFnZXIgKHNubXBkKS4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpLgogICovCiBsb25nCiBnZXRfdXB0aW1lKHZvaWQpCiB7Ci0jaWYgIWRlZmluZWQoc29sYXJpczIpICYmICFkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChjeWd3aW4pICYmICFkZWZpbmVkKGFpeDQpICYmICFkZWZpbmVkKGFpeDUpICYmICFkZWZpbmVkKGFpeDYpCi0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKLSAgICBsb25nICAgICAgICAgICAgYm9vdHRpbWVfY3NlY3MsIG5vd3RpbWVfY3NlY3M7Ci0KLSAgICBib290dGltZV9jc2VjcyA9IGdldF9ib290dGltZSgpOwotICAgIGlmIChib290dGltZV9jc2VjcyA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKLSAgICBub3d0aW1lX2NzZWNzID0gKG5vdy50dl9zZWMgKiAxMDApICsgKG5vdy50dl91c2VjIC8gMTAwMDApOwotCi0gICAgcmV0dXJuIChub3d0aW1lX2NzZWNzIC0gYm9vdHRpbWVfY3NlY3MpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKKyAgICBzdGF0aWMgY2hhciBsYm9sdF9uYW1lW10gPSAibGJvbHQiOwogICAgIHN0cnVjdCBubGlzdCBubDsKICAgICBpbnQga21lbTsKICAgICB0aW1lX3QgbGJvbHQ7Ci0gICAgbmwubl9uYW1lID0gKGNoYXIgKikgImxib2x0IjsKKyAgICBubC5uX25hbWUgPSBsYm9sdF9uYW1lOwogICAgIGlmKGtubGlzdCgmbmwsIDEsIHNpemVvZihzdHJ1Y3Qgbmxpc3QpKSAhPSAwKSByZXR1cm4oMCk7CiAgICAgaWYobmwubl90eXBlID09IDAgfHwgbmwubl92YWx1ZSA9PSAwKSByZXR1cm4oMCk7CiAgICAgaWYoKGttZW0gPSBvcGVuKCIvZGV2L21lbSIsIDApKSA8IDApIHJldHVybiAwOwpAQCAtNzg3LDkgKzY2OCw3IEBACiAgICAgcmVhZChrbWVtLCAmbGJvbHQsIHNpemVvZihsYm9sdCkpOwogICAgIGNsb3NlKGttZW0pOwogICAgIHJldHVybihsYm9sdCk7Ci0jZW5kaWYKLQotI2lmZGVmIHNvbGFyaXMyCisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQogICAgIGtzdGF0X2N0bF90ICAgICprc2MgPSBrc3RhdF9vcGVuKCk7CiAgICAga3N0YXRfdCAgICAgICAgKmtzOwogICAgIGtpZF90ICAgICAgICAgICBraWQ7CkBAIC04MTQsOSArNjkzLDcgQEAKICAgICAgICAga3N0YXRfY2xvc2Uoa3NjKTsKICAgICB9CiAgICAgcmV0dXJuIGxib2x0OwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwotCi0jaWZkZWYgbGludXgKKyNlbGlmIGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoY3lnd2luKQogICAgIEZJTEUgICAgICAgICAgICppbiA9IGZvcGVuKCIvcHJvYy91cHRpbWUiLCAiciIpOwogICAgIGxvbmcgICAgICAgICAgICB1cHRpbSA9IDAsIGEsIGI7CiAgICAgaWYgKGluKSB7CkBAIC04MjUsMTYgKzcwMiwzMDMgQEAKICAgICAgICAgZmNsb3NlKGluKTsKICAgICB9CiAgICAgcmV0dXJuIHVwdGltOwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW51eCAqLworI2Vsc2UKKyAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OworICAgIGxvbmcgICAgICAgICAgICBib290dGltZV9jc2Vjcywgbm93dGltZV9jc2VjczsKIAotI2lmZGVmIGN5Z3dpbgotICAgIHJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICBib290dGltZV9jc2VjcyA9IGdldF9ib290dGltZSgpOworICAgIGlmIChib290dGltZV9jc2VjcyA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBub3d0aW1lX2NzZWNzID0gKG5vdy50dl9zZWMgKiAxMDApICsgKG5vdy50dl91c2VjIC8gMTAwMDApOworCisgICAgcmV0dXJuIChub3d0aW1lX2NzZWNzIC0gYm9vdHRpbWVfY3NlY3MpOwogI2VuZGlmCiB9CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISBXSU4zMiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorc3RhdGljIHZhbF9jb250ZXh0X3QgKl92YWxfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2YWxfY29udGV4dF90ICoKK25ldHNubXBfdmFsaWRhdG9yX2NvbnRleHQodm9pZCkKK3sKKyAgICBpZiAoTlVMTCA9PSBfdmFsX2NvbnRleHQpIHsKKyAgICAgICAgaW50IHJjOworICAgICAgICBjaGFyICphcHB0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6c2VjOmNvbnRleHQiLCAiY3JlYXRpbmcgZG5zc2VjIGNvbnRleHQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBhcHB0eXBlKSk7CisgICAgICAgIHJjID0gdmFsX2NyZWF0ZV9jb250ZXh0KGFwcHR5cGUsICZfdmFsX2NvbnRleHQpOworICAgIH0KKworICAgIHJldHVybiBfdmFsX2NvbnRleHQ7Cit9CisjZW5kaWYgLyogRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04gKi8KKworaW50CituZXRzbm1wX2dldGhvc3RieW5hbWVfdjQoY29uc3QgY2hhciogbmFtZSwgaW5fYWRkcl90ICphZGRyX291dCkKK3sKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnQ7CisgICAgaW50ICAgICAgICAgICAgIGVycjsKKworICAgIG1lbXNldCgmaGludCwgMCwgc2l6ZW9mIGhpbnQpOworICAgIGhpbnQuYWlfZmxhZ3MgPSAwOworICAgIGhpbnQuYWlfZmFtaWx5ID0gUEZfSU5FVDsKKyAgICBoaW50LmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKKyAgICBoaW50LmFpX3Byb3RvY29sID0gMDsKKworICAgIGVyciA9IG5ldHNubXBfZ2V0YWRkcmluZm8obmFtZSwgTlVMTCwgJmhpbnQsICZhZGRycyk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoYWRkcnMgIT0gTlVMTCkgeworICAgICAgICBtZW1jcHkoYWRkcl9vdXQsCisgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcnMtPmFpX2FkZHIpLT5zaW5fYWRkciwKKyAgICAgICAgICAgICAgIHNpemVvZihpbl9hZGRyX3QpKTsKKyAgICAgICAgZnJlZWFkZHJpbmZvKGFkZHJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZXNvbHZlIElQdjQgaG9zdG5hbWVcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisKKyAgICBocCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZShuYW1lKTsKKyAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlKVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKG5vdCBBRl9JTkVUISlcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7CisgICAgICAgIG1lbWNweShhZGRyX291dCwgaHAtPmhfYWRkciwgc2l6ZW9mKGluX2FkZHJfdCkpOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICBlcnI7CisKKyAgICBocCA9IGdldGlwbm9kZWJ5bmFtZShwZWVybmFtZSwgQUZfSU5FVCwgMCwgJmVycik7CisgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSA9ICVkKVxuIiwgZXJyKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOworICAgIG1lbWNweShhZGRyX291dCwgaHAtPmhfYWRkciwgc2l6ZW9mKGluX2FkZHJfdCkpOworICAgIHJldHVybiAwOworCisjZWxzZSAvKiBIQVZFX0dFVElQTk9ERUJZTkFNRSAqLworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCitpbnQKK25ldHNubXBfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworI2lmIEhBVkVfR0VUQUREUklORk8KKyAgICBzdHJ1Y3QgYWRkcmluZm8gKmFkZHJzID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludDsKKyAgICBpbnQgICAgICAgICAgICAgZXJyOworI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgdmFsX3N0YXR1c190ICAgIHZhbF9zdGF0dXM7CisjZW5kaWYKKworICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0YWRkcmluZm8iLCAibG9va2luZyB1cCAiKSk7CisgICAgaWYgKG5hbWUpCisgICAgICAgIERFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIlwiJXNcIiIsIG5hbWUpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIjxOVUxMPiIpKTsKKworICAgIGlmIChzZXJ2aWNlKQorCURFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIjpcIiVzXCIiLCBzZXJ2aWNlKSk7CisKKyAgICBpZiAoaGludHMpCisJREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiIHdpdGggaGludCAoeyAuLi4gfSkiKSk7CisgICAgZWxzZQorCURFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIiB3aXRoIG5vIGhpbnQiKSk7CisKKyAgICBERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICJcbiIpKTsKKworICAgIGlmIChOVUxMID09IGhpbnRzKSB7CisgICAgICAgIG1lbXNldCgmaGludCwgMCwgc2l6ZW9mIGhpbnQpOworICAgICAgICBoaW50LmFpX2ZsYWdzID0gMDsKKyAgICAgICAgaGludC5haV9mYW1pbHkgPSBQRl9JTkVUOworICAgICAgICBoaW50LmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKKyAgICAgICAgaGludC5haV9wcm90b2NvbCA9IDA7CisgICAgICAgIGhpbnRzID0gJmhpbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KCZoaW50LCBoaW50cywgc2l6ZW9mIGhpbnQpOworICAgIH0KKworI2lmbmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIGVyciA9IGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWRkcnMpOworI2Vsc2UgLyogRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04gKi8KKyAgICBlcnIgPSB2YWxfZ2V0YWRkcmluZm8obmV0c25tcF92YWxpZGF0b3JfY29udGV4dCgpLCBuYW1lLCBOVUxMLCAmaGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJzLCAmdmFsX3N0YXR1cyk7CisgICAgREVCVUdNU0dUTCgoImRuczpzZWM6dmFsIiwgImVyciAlZCwgdmFsX3N0YXR1cyAlZCAvICVzOyB0cnVzdGVkOiAlZFxuIiwKKyAgICAgICAgICAgICAgICBlcnIsIHZhbF9zdGF0dXMsIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSwKKyAgICAgICAgICAgICAgICB2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSk7CisgICAgaWYgKCEgdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkgeworICAgICAgICBpbnQgcmM7CisgICAgICAgIGlmICgoZXJyICE9IDApICYmIFZBTF9HRVRBRERSSU5GT19IQVNfU1RBVFVTKGVycikpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IFVOVFJVU1RFRCBlcnJvciBpbiBETlMgcmVzb2x1dGlvbiBmb3IgJXMhXG4iLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICByYyA9IEVBSV9GQUlMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGF1dGhlbnRpY2l0eSBvZiBETlMgcmVzcG9uc2UgaXMgbm90IHRydXN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSk7CisgICAgICAgICAgICByYyA9IEVBSV9OT05BTUU7CisgICAgICAgIH0KKyAgICAgICAgLyoqIGNvbnRpbnVlIGFueXdheXMgaWYgRE5TU0VDX1dBUk5fT05MWSBpcyBzZXQgKi8KKyAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZKSkKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKworI2VuZGlmIC8qIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OICovCisgICAgKnJlcyA9IGFkZHJzOworICAgIGlmICgoMCA9PSBlcnIpICYmIGFkZHJzICYmIGFkZHJzLT5haV9hZGRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0YWRkcmluZm8iLCAiYW5zd2VyIHsgQUZfSU5FVCwgJXM6JWh1IH1cbiIsCisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYSgoKHN0cnVjdCBzb2NrYWRkcl9pbiopYWRkcnMtPmFpX2FkZHIpLT5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luKilhZGRycy0+YWlfYWRkciktPnNpbl9wb3J0KSkpOworICAgIH0KKyAgICByZXR1cm4gZXJyOworI2Vsc2UKKyAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJnZXRhZGRyaW5mbyBub3QgYXZhaWxhYmxlIikpOworICAgIHJldHVybiBFQUlfRkFJTDsKKyNlbmRpZiAvKiBnZXRhZGRyaW5mbyAqLworfQorCitzdHJ1Y3QgaG9zdGVudCAqCituZXRzbm1wX2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZiBIQVZFX0dFVEhPU1RCWU5BTUUKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIHZhbF9zdGF0dXNfdCB2YWxfc3RhdHVzOworI2VuZGlmCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IG5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnluYW1lIiwgImxvb2tpbmcgdXAgJXNcbiIsIG5hbWUpKTsKKworI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgaHAgID0gdmFsX2dldGhvc3RieW5hbWUobmV0c25tcF92YWxpZGF0b3JfY29udGV4dCgpLCBuYW1lLCAmdmFsX3N0YXR1cyk7CisgICAgREVCVUdNU0dUTCgoImRuczpzZWM6dmFsIiwgInZhbF9zdGF0dXMgJWQgLyAlczsgdHJ1c3RlZDogJWRcbiIsCisgICAgICAgICAgICAgICAgdmFsX3N0YXR1cywgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpLAorICAgICAgICAgICAgICAgIHZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpKTsKKyAgICBpZiAoIXZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJUaGUgYXV0aGVudGljaXR5IG9mIEROUyByZXNwb25zZSBpcyBub3QgdHJ1c3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cykpOworICAgICAgICAvKiogY29udGludWUgYW55d2F5cyBpZiBETlNTRUNfV0FSTl9PTkxZIGlzIHNldCAqLworICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0ROU1NFQ19XQVJOX09OTFkpKQorICAgICAgICAgICAgaHAgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICh2YWxfZG9lc19ub3RfZXhpc3QodmFsX3N0YXR1cykgJiYgaHApCisgICAgICAgIGhwID0gTlVMTDsKKyNlbHNlCisgICAgaHAgPSBnZXRob3N0YnluYW1lKG5hbWUpOworI2VuZGlmCisgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnluYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IHJlc29sdmUgJXNcbiIsIG5hbWUpKTsKKyAgICB9IGVsc2UgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnluYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgIndhcm5pbmc6IHJlc3BvbnNlIGZvciAlcyBub3QgQUZfSU5FVCFcbiIsIG5hbWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAiJXMgcmVzb2x2ZWQgb2theVxuIiwgbmFtZSkpOworICAgIH0KKyAgICByZXR1cm4gaHA7CisjZWxzZQorICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImdldGhvc3RieW5hbWUgbm90IGF2YWlsYWJsZSIpKTsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBIQVZFX0dFVEhPU1RCWU5BTUUgKi8KK30KKworLyoqCisgKiBMb29rIHVwIHRoZSBob3N0IG5hbWUgdmlhIEROUy4KKyAqCisgKiBAcGFyYW1baW5dIGFkZHIgUG9pbnRlciB0byB0aGUgYWRkcmVzcyB0byByZXNvbHZlLiBUaGlzIGFyZ3VtZW50IHBvaW50cyBlLmcuCisgKiAgIHRvIGEgc3RydWN0IGluX2FkZHIgZm9yIEFGX0lORVQgb3IgdG8gYSBzdHJ1Y3QgaW42X2FkZHIgZm9yIEFGX0lORVQ2LgorICogQHBhcmFtW2luXSBsZW4gIExlbmd0aCBpbiBieXRlcyBvZiAqYWRkci4KKyAqIEBwYXJhbVtpbl0gdHlwZSBBZGRyZXNzIGZhbWlseSwgZS5nLiBBRl9JTkVUIG9yIEFGX0lORVQ2LgorICoKKyAqIEByZXR1cm4gUG9pbnRlciB0byBhIGhvc3RlbnQgc3RydWN0dXJlIGlmIGFkZHJlc3MgbG9va3VwIHN1Y2NlZWRlZCBvciBOVUxMCisgKiAgIGlmIHRoZSBsb29rdXAgZmFpbGVkLgorICoKKyAqIEBzZWUgU2VlIGFsc28gdGhlIGdldGhvc3RieWFkZHIoKSBtYW4gcGFnZS4KKyAqLworc3RydWN0IGhvc3RlbnQgKgorbmV0c25tcF9nZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFkZHIsIHNvY2tsZW5fdCBsZW4sIGludCB0eXBlKQoreworI2lmIEhBVkVfR0VUSE9TVEJZQUREUgorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisgICAgY2hhciBidWZbNjRdOworCisgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnlhZGRyIiwgInJlc29sdmluZyAlc1xuIiwKKyAgICAgICAgICAgICAgICBpbmV0X250b3AodHlwZSwgYWRkciwgYnVmLCBzaXplb2YoYnVmKSkpKTsKKworI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgdmFsX3N0YXR1c190IHZhbF9zdGF0dXM7CisgICAgaHAgPSB2YWxfZ2V0aG9zdGJ5YWRkcihuZXRzbm1wX3ZhbGlkYXRvcl9jb250ZXh0KCksIGFkZHIsIGxlbiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxfc3RhdHVzKTsKKyAgICBERUJVR01TR1RMKCgiZG5zOnNlYzp2YWwiLCAidmFsX3N0YXR1cyAlZCAvICVzOyB0cnVzdGVkOiAlZFxuIiwKKyAgICAgICAgICAgICAgICB2YWxfc3RhdHVzLCBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cyksCisgICAgICAgICAgICAgICAgdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkpOworICAgIGlmICghdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgIlRoZSBhdXRoZW50aWNpdHkgb2YgRE5TIHJlc3BvbnNlIGlzIG5vdCB0cnVzdGVkICglcylcbiIsCisgICAgICAgICAgICAgICAgIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSk7CisgICAgICAgIC8qKiBjb250aW51ZSBhbnl3YXlzIGlmIEROU1NFQ19XQVJOX09OTFkgaXMgc2V0ICovCisgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE5TU0VDX1dBUk5fT05MWSkpCisgICAgICAgICAgICBocCA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHZhbF9kb2VzX25vdF9leGlzdCh2YWxfc3RhdHVzKSAmJiBocCkKKyAgICAgICAgaHAgPSBOVUxMOworI2Vsc2UKKyAgICBocCA9IGdldGhvc3RieWFkZHIoYWRkciwgbGVuLCB0eXBlKTsKKyNlbmRpZgorICAgIGlmIChocCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5YWRkciIsICJjb3VsZG4ndCByZXNvbHZlIGFkZHJcbiIpKTsKKyAgICB9IGVsc2UgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnlhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgIndhcm5pbmc6IHJlc3BvbnNlIGZvciBhZGRyIG5vdCBBRl9JTkVUIVxuIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5YWRkciIsICJhZGRyIHJlc29sdmVkIG9rYXlcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIGhwOworI2Vsc2UKKyAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJnZXRob3N0YnlhZGRyIG5vdCBhdmFpbGFibGUiKSk7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKICNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAogCiAvKgpAQCAtOTI1LDQxICsxMDg5LDMyIEBACiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfU0VURU5WICovCiAKLS8qIHJldHVybnMgY2VudGlzZWNvbmRzICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FsY3VsYXRlX3RpbWVfZGlmZiwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMQ1VMQVRFX1RJTUVfRElGRgorLyoqCisgKiBDb21wdXRlICgqbm93IC0gKnRoZW4pIGluIGNlbnRpc2Vjb25kcy4KKyAqLwogaW50Ci1jYWxjdWxhdGVfdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csIHN0cnVjdCB0aW1ldmFsICp0aGVuKQorY2FsY3VsYXRlX3RpbWVfZGlmZihjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93LCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGhlbikKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdG1wLCBkaWZmOwotICAgIG1lbWNweSgmdG1wLCBub3csIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOwotICAgIHRtcC50dl9zZWMtLTsKLSAgICB0bXAudHZfdXNlYyArPSAxMDAwMDAwTDsKLSAgICBkaWZmLnR2X3NlYyA9IHRtcC50dl9zZWMgLSB0aGVuLT50dl9zZWM7Ci0gICAgZGlmZi50dl91c2VjID0gdG1wLnR2X3VzZWMgLSB0aGVuLT50dl91c2VjOwotICAgIGlmIChkaWZmLnR2X3VzZWMgPiAxMDAwMDAwTCkgewotICAgICAgICBkaWZmLnR2X3VzZWMgLT0gMTAwMDAwMEw7Ci0gICAgICAgIGRpZmYudHZfc2VjKys7Ci0gICAgfQotICAgIHJldHVybiAoKGRpZmYudHZfc2VjICogMTAwKSArIChkaWZmLnR2X3VzZWMgLyAxMDAwMCkpOwotfQorICAgIHN0cnVjdCB0aW1ldmFsICBkaWZmOwogCi0vKiByZXR1cm5zIGRpZmYgaW4gcm91bmRlZCBzZWNvbmRzICovCi11X2ludAotY2FsY3VsYXRlX3NlY3RpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqbm93LCBzdHJ1Y3QgdGltZXZhbCAqdGhlbikKLXsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdG1wLCBkaWZmOwotICAgIG1lbWNweSgmdG1wLCBub3csIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOwotICAgIHRtcC50dl9zZWMtLTsKLSAgICB0bXAudHZfdXNlYyArPSAxMDAwMDAwTDsKLSAgICBkaWZmLnR2X3NlYyA9IHRtcC50dl9zZWMgLSB0aGVuLT50dl9zZWM7Ci0gICAgZGlmZi50dl91c2VjID0gdG1wLnR2X3VzZWMgLSB0aGVuLT50dl91c2VjOwotICAgIGlmIChkaWZmLnR2X3VzZWMgPiAxMDAwMDAwTCkgewotICAgICAgICBkaWZmLnR2X3VzZWMgLT0gMTAwMDAwMEw7Ci0gICAgICAgIGRpZmYudHZfc2VjKys7Ci0gICAgfQotICAgIGlmIChkaWZmLnR2X3VzZWMgPj0gNTAwMDAwTCkKLSAgICAgICAgcmV0dXJuIGRpZmYudHZfc2VjICsgMTsKLSAgICByZXR1cm4gIGRpZmYudHZfc2VjOworICAgIE5FVFNOTVBfVElNRVJTVUIobm93LCB0aGVuLCAmZGlmZik7CisgICAgcmV0dXJuIChpbnQpKGRpZmYudHZfc2VjICogMTAwICsgZGlmZi50dl91c2VjIC8gMTAwMDApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMQ1VMQVRFX1RJTUVfRElGRiAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMQ1VMQVRFX1NFQ1RJTUVfRElGRgorLyoqIENvbXB1dGUgcm91bmRlZCAoKm5vdyAtICp0aGVuKSBpbiBzZWNvbmRzLiAqLwordV9pbnQKK2NhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnRoZW4pCit7CisgICAgc3RydWN0IHRpbWV2YWwgIGRpZmY7CisKKyAgICBORVRTTk1QX1RJTUVSU1VCKG5vdywgdGhlbiwgJmRpZmYpOworICAgIHJldHVybiBkaWZmLnR2X3NlYyArIChkaWZmLnR2X3VzZWMgPj0gNTAwMDAwTCk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxDVUxBVEVfU0VDVElNRV9ESUZGICovCiAKICNpZm5kZWYgSEFWRV9TVFJDQVNFU1RSCiAvKgpAQCAtMTA3MCwxMyArMTIyNSwxNCBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIERORSwgbWFrZSBpdCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJDcmVhdGluZyBkaXJlY3Rvcnk6ICVzXG4iLCBidWYpOwogI2lmZGVmIFdJTjMyCiAgICAgICAgICAgICBpZiAoQ3JlYXRlRGlyZWN0b3J5KGJ1ZiwgTlVMTCkgPT0gMCkKICNlbHNlCiAgICAgICAgICAgICBpZiAobWtkaXIoYnVmLCBtb2RlKSA9PSAtMSkKICNlbmRpZgogICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLCAiQ3JlYXRlZCBkaXJlY3Rvcnk6ICVzXG4iLCBidWYpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGV4aXN0cywgaXMgaXQgYSBmaWxlPyAKQEAgLTExNjIsOSArMTMxOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9zcG1yZWxwcmVmaXgpCiB7CiAjaWYgSEFWRV9TWVNfVVRTTkFNRV9ICi1zdGF0aWMgaW50IHByaW50T1NvbmNlID0gMTsKKyAgc3RhdGljIGludCBwcmludE9Tb25jZSA9IDE7CiAgIHN0cnVjdCB1dHNuYW1lIHV0c2J1ZjsKLSAgaWYgKCAwICE9IHVuYW1lKCZ1dHNidWYpKQorICBpZiAoIDAgPiB1bmFtZSgmdXRzYnVmKSkKICAgICByZXR1cm4gLTE7CiAKICAgaWYgKHByaW50T1NvbmNlKSB7CkBAIC0xMjA0LDcgKzEzNjAsNyBAQAogICB9IGVsc2UgewogICAgIHJldHVybiAtMTsKICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgcmV0dXJuIChfX0tFUk5FTF8zMigpID8gMzIgOiAoX19LRVJORUxfNjQoKSA/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+IDEpOyIgPj4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCisKK0NPTkZJR0FHRU5UIHBlcmxJbml0RmlsZSAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKK0NPTkZJR0FHRU5UICJwZXJsIGRvICckRU1CUEVSTF9BR0VOVCc7IgorQ09ORklHQUdFTlQgJ3BlcmwgcHJpbnQgU1RERVJSICJyZWdpc3RlcmVkX3BlcmxfYWdlbnRfb2siOycKKworU1RBUlRBR0VOVAorCisjIyAxKSBTTk1QIEdFVCBhZ2FpbnN0IGVtYmVkZGVkIHBlcmwgbWliIG1vZHVsZQorQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEIgorQ0hFQ0sgImhlbGxvIHdvcmxkIgorCisjIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKEhVUCksIHJlLXRlc3QKK0hVUEFHRU5UCitDQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQyIgorQ0hFQ0sgImhlbGxvIGFnYWluIHdvcmxkIgorCisjIyBzdG9wCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NoX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NoX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVhODI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2hfc2ltcGxlCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorCisjIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9idWdzLzI1NzUvCisKK3B3ZAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIGV4dGVuZCBhbmQgYW4gZXh0ZXJuYWwgc2hlbGwgc2NyaXB0IgorCitbICJ4JE9TVFlQRSIgPSB4bXN5cyAtYSAieCRNU1lTX1NIIiA9IHggXSAmJiBTS0lQICJcJE1TWVNfU0ggaGFzIG5vdCBiZWVuIHNldCIKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX0FHRU5UX0VYVEVORF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKKworIyBtYWtlIHN1cmUgc25tcGdldCBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBHRVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wZ2V0IgorWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUCBzbm1wZ2V0IG5vdCBjb21waWxlZAorU05NUFNFVD0iJHtidWlsZGRpcn0vYXBwcy9zbm1wc2V0IgorWyAteCAiJFNOTVBTRVQiIF0gfHwgU0tJUCBzbm1wc2V0IG5vdCBjb21waWxlZAorCitzbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKKworb2lkPS4xLjMuNi4xLjQuMS44MDcyLjEuMy4yCitpbmRleD0nInR3b19udW1iZXJzIicKK2VjaG9fdHdvX251bWJlcnM9JFNOTVBfVE1QRElSL2VjaG9fdHdvX251bWJlcnMKK251bWJlcjE9MTExCitudW1iZXIyPTIyMgorcm0gLWYgJGVjaG9fdHdvX251bWJlcnMKK2NhdCA8PEVPRiA+JGVjaG9fdHdvX251bWJlcnMKKyMhJChpZiBbICJ4JE1TWVNfU0giICE9IHggXTsgdGhlbiBlY2hvICIkTVNZU19TSCI7IGVsc2UgZWNobyAvYmluL3NoOyBmaSkKK2VjaG8gJG51bWJlcjEKK2VjaG8gJG51bWJlcjIKK0VPRgorY2htb2QgYSt4ICRlY2hvX3R3b19udW1iZXJzCitDT05GSUdBR0VOVCBleHRlbmQgJGluZGV4ICRlY2hvX3R3b19udW1iZXJzCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAiJFNOTVBTRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCB2ZXJzaW9uVXBkYXRlQ29uZmlnLjAgaSAxIgorQ0hFQ0tPUkRJRSAidmVyc2lvblVwZGF0ZUNvbmZpZy4wID0gSU5URUdFUjogMSIKKworQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAke29pZH0uMy4xLjEuJGluZGV4IgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiAke251bWJlcjF9IgorCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICR7b2lkfS4zLjEuMi4kaW5kZXgiCitDSEVDS09SRElFICJTVFJJTkc6ICR7bnVtYmVyMX0iCisKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJHtvaWR9LjQuMS4yLiRpbmRleC4xIgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiAke251bWJlcjF9IgorCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICR7b2lkfS4zLjEuMy4kaW5kZXgiCitDSEVDS09SRElFICJJTlRFR0VSOiAyIgorCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICR7b2lkfS4zLjEuNC4kaW5kZXgiCitDSEVDS09SRElFICJJTlRFR0VSOiAwIgorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxOTI2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZQpAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBleHRlbmQiCisKK1sgIngkT1NUWVBFIiA9IHhtc3lzIC1hICJ4JE1TWVNfU0giID0geCBdICYmIFNLSVAgIlwkTVNZU19TSCBoYXMgbm90IGJlZW4gc2V0IgorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRfRVhURU5EX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQorCisjIG1ha2Ugc3VyZSBzbm1wZ2V0IGNhbiBiZSBleGVjdXRlZAorU05NUEdFVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBnZXQiCitbIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQIHNubXBnZXQgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCisKK2luZGV4PSciaGVsbG8iJworaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgQ09ORklHQUdFTlQgZXh0ZW5kIGhlbGxvICRNU1lTX1NIIC1jICInIiBlY2hvIGhlbGxvX3dvcmxkICInIgorZWxzZQorICAgIENPTkZJR0FHRU5UIGV4dGVuZCBoZWxsbyAvdXNyL2Jpbi9lbnYgZWNobyBoZWxsb193b3JsZAorZmkKKworU1RBUlRBR0VOVAorCisjIE5FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0cHV0MUxpbmUuImhlbGxvIiA9IFNUUklORzogImhlbGxvX3dvcmxkIgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMS4kaW5kZXgiCitDSEVDS09SRElFICJTVFJJTkc6IGhlbGxvX3dvcmxkIgorCisjTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRwdXRGdWxsLiJoZWxsbyIgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjIuJGluZGV4IgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiBoZWxsb193b3JsZCIKKworI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0TGluZS4iaGVsbG8iLjEgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuNC4xLjIuJGluZGV4LjEiCitDSEVDS09SRElFICJTVFJJTkc6IGhlbGxvX3dvcmxkIgorCisjTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXROdW1MaW5lcy4iaGVsbG8iID0gSU5URUdFUjogMQorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMy4kaW5kZXgiCitDSEVDS09SRElFICJJTlRFR0VSOiAxIgorCisjTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRSZXN1bHQuImhlbGxvIiA9IElOVEVHRVI6IDAKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjQuJGluZGV4IgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogMCIKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY2cGFzc19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjZwYXNzX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGVlMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY2cGFzc19zaW1wbGUKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggcGFzcyIKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUEFTU19NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKKworIyBEb24ndCBydW4gdGhpcyB0ZXN0IG9uIE1pbkdXIC0gbG9jYWwvcGFzc3Rlc3QgaXMgYSBzaGVsbCBzY3JpcHQgYW5kCisjIGhlbmNlIHBhc3NpbmcgaXQgdG8gdGhlIE1TVkNSVCBwb3BlbigpIGRvZXNuJ3Qgd29yay4KK1sgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXSAmJiBTS0lQICJNaW5HVyIKKworIyBtYWtlIHN1cmUgc25tcGdldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCitTTk1QR0VUPSIke2J1aWxkZGlyfS9hcHBzL3NubXBnZXQiCitbIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQIHNubXBnZXQgbm90IGNvbXBpbGVkCitTTk1QV0FMSz0iJHtidWlsZGRpcn0vYXBwcy9zbm1wd2FsayIKK1sgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQIHNubXB3YWxrIG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworb2lkPS4xLjMuNi4xLjQuMS44MDcyLjIuMjU1ICAjIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0V4YW1wbGVzCitDT05GSUdBR0VOVCBwYXNzICRvaWQgJHtzcmNkaXJ9L2xvY2FsL3Bhc3N0ZXN0CisKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRHVjZC1zbm1wL3Bhc3MiCitTVEFSVEFHRU5UCisKKyNDT01NRU5UIENoZWNrIGEgZnVsbCB3YWxrIG9mIHRoZSBzYW1wbGUgZGF0YQorQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJG9pZCIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1N0cmluZy4wID0gU1RSSU5HOiBMaWZlLCB0aGUgVW5pdmVyc2UsIGFuZCBFdmVyeXRoaW5nIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xID0gSU5URUdFUjogNDIiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSUQuMSA9IE9JRDogTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lEVmFsdWUiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NUaW1lVGlja3MuMCA9IFRpbWV0aWNrczogKDM2MzEzNjIwMCkgNDIgZGF5cywgMDo0Mjo0Mi4wMCAiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJcEFkZHJlc3MuMCA9IElwQWRkcmVzczogMTI3LjAuMC4xIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wID0gQ291bnRlcjMyOiA0MiIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0dhdWdlLjAgPSBHYXVnZTMyOiA0MiIKKworI0NPTU1FTlQgQSBjb3VwbGUgb2Ygc3BvdCBjaGVja3Mgb2YgR0VUIHJlcXVlc3RzLgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEiCitDSEVDS09SRElFICJJTlRFR0VSOiA0MiIKKworQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCitDSEVDS09SRElFICJDb3VudGVyMzI6IDQyIgorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmMTMzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZQpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBwYXNzX3BlcnNpc3QiCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BBU1NfUEVSU0lTVF9NT0RVTEUKKworIyBEb24ndCBydW4gdGhpcyB0ZXN0IG9uIE1pbkdXIC0gbG9jYWwvcGFzc19wZXJzaXN0dGVzdCBpcyBhIHNoZWxsIHNjcmlwdCBhbmQKKyMgaGVuY2UgcGFzc2luZyBpdCB0byB0aGUgTVNWQ1JUIHBvcGVuKCkgZG9lc24ndCB3b3JrLgorWyAieCRPU1RZUEUiID0gInhtc3lzIiBdICYmIFNLSVAgIk1pbkdXIgorCitbIC14IC91c3IvYmluL3BlcmwgXSB8fCBTS0lQICIvdXNyL2Jpbi9wZXJsIG5vdCBmb3VuZCIKKworIyBtYWtlIHN1cmUgc25tcGdldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCitTTk1QR0VUPSIke2J1aWxkZGlyfS9hcHBzL3NubXBnZXQiCitbIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQIHNubXBnZXQgbm90IGNvbXBpbGVkCitTTk1QV0FMSz0iJHtidWlsZGRpcn0vYXBwcy9zbm1wd2FsayIKK1sgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQIHNubXB3YWxrIG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworb2lkPS4xLjMuNi4xLjQuMS44MDcyLjIuMjU1ICAjIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0V4YW1wbGVzCitDT05GSUdBR0VOVCBwYXNzX3BlcnNpc3QgJG9pZCAke3NyY2Rpcn0vbG9jYWwvcGFzc19wZXJzaXN0dGVzdAorCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUR1Y2Qtc25tcC9wYXNzX3BlcnNpc3QiCitQQVNTX1BFUlNJU1RfUElERklMRT0iJFNOTVBfVE1QRElSL3Bhc3NfcGVyc2lzdC5waWQuJCQiCitleHBvcnQgUEFTU19QRVJTSVNUX1BJREZJTEUKK1NUQVJUQUdFTlQKKworI0NPTU1FTlQgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgdGhlIHNhbXBsZSBkYXRhCitDQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkb2lkIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzU3RyaW5nLjAgPSBTVFJJTkc6IExpZmUsIHRoZSBVbml2ZXJzZSwgYW5kIEV2ZXJ5dGhpbmciCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEgPSBJTlRFR0VSOiA0MiIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRC4xID0gT0lEOiBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSURWYWx1ZSIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1RpbWVUaWNrcy4wID0gVGltZXRpY2tzOiAoMzYzMTM2MjAwKSA0MiBkYXlzLCAwOjQyOjQyLjAwICIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0lwQWRkcmVzcy4wID0gSXBBZGRyZXNzOiAxMjcuMC4wLjEiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAgPSBDb3VudGVyMzI6IDEiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NHYXVnZS4wID0gR2F1Z2UzMjogNDIiCisKKyNDT01NRU5UIEEgY291cGxlIG9mIHNwb3QgY2hlY2tzIG9mIEdFVCByZXF1ZXN0cy4KK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xIgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogNDIiCisKKyNDT01NRU5UIG5ldFNubXBQYXNzQ291bnRlciBzaG91bGQgaW5jcmVtZW50LCBzaW5jZSB0aGlzIGlzIHBhc3NfcGVyc2lzdAorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCitDSEVDS09SRElFICJDb3VudGVyMzI6IDIiCisKKyNDT01NRU5UIG5vdyBraWxsIHRoZSBwYXNzX3BlcnNpc3Qgc2NyaXB0LCBhbmQgY2hlY2sgdGhhdCBpdCByZWNvdmVycy4KK1NUT1BQUk9HICRQQVNTX1BFUlNJU1RfUElERklMRQorI0NPTU1FTlQgbmV0U25tcFBhc3NDb3VudGVyIHNob3VsZCBoYXZlIHJldmVydGVkIHRvIDEsIGFzIHRoaXMgaXMgYSBuZXcgaW5zdGFuY2UuCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKK0NIRUNLT1JESUUgIkNvdW50ZXIzMjogMSIKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY4ZXhlY2ZpeF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjhleGVjZml4X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTgxODM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY4ZXhlY2ZpeF9zaW1wbGUKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgImV4ZWNmaXggY29uZmlndXJhdGlvbiBkaXJlY3RpdmUiCisKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRQorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisKKyMgbWFrZSBzdXJlIHNubXBzZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAorU05NUFNFVD0iJHtidWlsZGRpcn0vYXBwcy9zbm1wc2V0IgorWyAteCAiJFNOTVBTRVQiIF0gfHwgU0tJUCBzbm1wc2V0IG5vdCBjb21waWxlZAorU05NUFdBTEs9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHdhbGsiCitbIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUCBzbm1wd2FsayBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworc25tcF93cml0ZV9hY2Nlc3M9J2FsbCcKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCitpZiBbICJ4JE9TVFlQRSIgPSB4bXN5cyBdOyB0aGVuCisgICAgY21kMT0idHJ1ZSIKKyAgICBjbWQyPSJmYWxzZSIKKyAgICBlY2hvPSJlY2hvIgorZWxzZQorICAgIGNtZDE9IiQod2hpY2ggdHJ1ZSkiCisgICAgY21kMj0iJCh3aGljaCBmYWxzZSkiCisgICAgZWNobz0iJCh3aGljaCBlY2hvKSIKK2ZpCitDT05GSUdBR0VOVCBleGVjICAgIHRydWUtY29tbWFuZCAgICAkY21kMQorQ09ORklHQUdFTlQgZXhlY2ZpeCB0cnVlLWNvbW1hbmQgICAgJGNtZDEKK0NPTkZJR0FHRU5UIGV4ZWMgICAgZmFsc2UtY29tbWFuZCAgICRjbWQyCitDT05GSUdBR0VOVCBleGVjZml4IGZhbHNlLWNvbW1hbmQgICAkY21kMgorQ09ORklHQUdFTlQgZXhlYyAgICBlY2hvLSVzLWNvbW1hbmQgJHtlY2hvfSAlcworQ09ORklHQUdFTlQgZXhlY2ZpeCBlY2hvLSVzLWNvbW1hbmQgJHtlY2hvfSBmaXgtJXMKKworU1RBUlRBR0VOVAorCisjIENoZWNrIGEgZnVsbCB3YWxrIG9mIFVDRC1TTk1QLU1JQjo6ZXh0VGFibGUKK0NBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RW50cnkiCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4xID0gU1RSSU5HOiB0cnVlLWNvbW1hbmQkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4xID0gU1RSSU5HOiAnIiRjbWQxIgorQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjEgPSBJTlRFR0VSOiAwJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4xID0gU1RSSU5HOiAkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjEgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4xID0gU1RSSU5HOiAnIiRjbWQxIgorQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMiA9IFNUUklORzogZmFsc2UtY29tbWFuZCQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjIgPSBTVFJJTkc6ICciJGNtZDIiJyQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMiA9IElOVEVHRVI6IDEkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjIgPSBTVFJJTkc6ICQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMiA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjIgPSBTVFJJTkc6ICciJGNtZDIiJyQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4zID0gU1RSSU5HOiBlY2hvLSVzLWNvbW1hbmQkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyAlcyQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMyA9IElOVEVHRVI6IDAkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjMgPSBTVFJJTkc6ICVzJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zID0gSU5URUdFUjogbm9FcnJvcigwKSQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMyA9IFNUUklORzogJyIke2VjaG99IicgZml4LSVzJCcKKworQ0FQVFVSRSAiJFNOTVBTRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgLXIwICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyBpIDEiCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyA9IElOVEVHRVI6IHJ1bkZpeCgxKScKKworQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFbnRyeSIKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyBmaXgtJXMnCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3NmZjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlCkBAIC0wLDAgKzEsMTU5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBjb20yc2VjIGRpcmVjdGl2ZQorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTgorU0tJUElGIE5FVFNOTVBfTk9fREVCVUdHSU5HCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIDQwMWEgVGVzdCBtaXNzaW5nIENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjIC1DbicKKyMgNDAxYiBUZXN0IGVtcHR5IENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjIC1DbiAiIicKKyMgNDAxYyBUZXN0IG92ZXJsb25nIENPTlRFWFQgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisKKyMgNDAyYSBUZXN0IG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWMnCisjIDQwMmIgVGVzdCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYyAiIicKKyMgNDAyYyBUZXN0IG92ZXJsb25nIHNlY05hbWUgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKyMgNDAyZCBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycKKyMgNDAyZSBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjIC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMgIiInCisKKyMgNDAzYSBUZXN0IG1pc3NpbmcgbmV0d29yayBhZGRyZXNzCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDAzYScKKyMgNDAzYiBUZXN0IGVtcHR5IG5ldHdvcmsgYWRkcmVzcworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwM2IgIiInCisjIDQwM2MgVGVzdCBmb3JiaWRkZW4gdmFsdWUgKG5vdyB3aHkgaXQgaXMgZm9yYmlkZGVuLi4uKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwM2MgTkVUV09SSycKKworIyA0MDRhIFRlc3QgbWlzc2luZyBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDRhIGRlZmF1bHQnCisjIDQwNGIgVGVzdCBlbXB0eSBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDRiIGRlZmF1bHQgIiInCisjIDQwNGMgVGVzdCBmb3JiaWRkZW4gdmFsdWUgKG5vdyB3aHkgaXQgaXMgZm9yYmlkZGVuLi4uKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNGMgZGVmYXVsdCBDT01NVU5JVFknCisjIDQwNGQgVGVzdCBvdmVybG9uZyBjb21tdW5pdHkgKDI1NSBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDRkIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JworIyA0MDRlIFRlc3QgdmFsaWQgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA0ZSBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworCisjIDQwNWEgVGVzdCAnZGVmYXVsdCcgY29uZmlndXJhdGlvbgorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWEgZGVmYXVsdCBjNDA1YScKKyMgNDA1YiBUZXN0IGlwIGFkZHJlc3MgY29uZmlndXJhdGlvbgorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWIgMTAuMC4wLjAgYzQwNWInCisjIDQwNWMgVGVzdCB2YWxpZCBudW1lcmljIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVjIDEwLjAuMC4wLzggYzQwNWMnCisjIDQwNWQgVGVzdCBpbnZhbGlkIG51bWVyaWMgbWFzayAodG9vIGJpZykKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVkIDEwLjAuMC4wLzMzIGM0MDVkJworIyA0MDVlIFRlc3QgaW52YWxpZCBudW1lcmljIG1hc2sgKG5lZ2F0aXZlKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWUgMTAuMC4wLjAvLTEgYzQwNWUnCisjIDQwNWYgVGVzdCB2YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVmIDEwLjAuMC4wLzI1NS4wLjAuMCBjNDA1ZicKKyMgNDA1ZyBUZXN0IGludmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1ZyAxMC4wLjAuMC81MTIuMC4wLjAgYzQwNWcnCisjIDQwNWggVGVzdCBpbnZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWggMTAuMC4wLjAvaGggYzQwNWgnCisjIDQwNWkgVGVzdCBhZGRyZXNzIHdpdGggMSBiaXRzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1aSAxMC4wLjAuMC8zLjE5Mi4wLjAgYzQwNWknCisjIDQwNWogVGVzdCB0aGF0IDAuMC4wLjAgd29ya3MgKGFsaWFzIGZvciBkZWZhdWx0KQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWogMC4wLjAuMCBjNDA1aicKKyMgNDA1ayBUZXN0IHRoYXQgMC4wLjAuMC8wIHdvcmtzIChhbGlhcyBmb3IgZGVmYXVsdCkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVrIDAuMC4wLjAvMCBjNDA1aycKKyMgNDA1bCBUZXN0IHRoYXQgMC4wLjAuMC8wLjAuMC4wIHdvcmtzIChhbGlhcyBmb3IgZGVmYXVsdCkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVsIDAuMC4wLjAvMC4wLjAuMCBjNDA1bCcKKworIyA0MDZhIFRlc3QgbWF4aW1hbGx5IGxvbmcgYWRkcmVzcy9tYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA2YSAyNTUuMjU1LjI1NS4yNTUvMjU1LjI1NS4yNTUuMjU1IGM0MDZhJworCisjIDQwN2EgVGVzdCBub24gZXhpc3RhbnQgaG9zdCBuYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA3YSBuby5zdWNoLmFkZHJlc3MuIGM0MDdhJworIyA0MDdiIFRlc3QgbWF4aW1hbGx5IGxvbmcgaG9zdCBuYW1lL21hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDdiIGEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEuLzI1NS4yNTUuMjU1LjI1NSBjNDA3YicKKworIyA0MDggTG9va3VwIHRlc3RzLCByZXF1aXJlIG5ldHdvcmsgYWNjZXNzCisjIDQwOGEgVGVzdCBsb29rdXAgcmV0dXJuaW5nIGEgc2luZ2xlIGhvc3QKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDhhIHd3dy5pZXRmLm9yZyBjNDA4YScKKyMgNDA4YSBUZXN0IGxvb2t1cCByZXR1cm5pbmcgbXVsdGlwbGUgaG9zdHMKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDhiIHd3dy5nb29nbGUuY29tIGM0MDhiJworCisjIERlZmF1bHQgYWdlbnQgc2V0dXAKK0NPTkZJR0FHRU5UICJbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUiIKKyMgRHVtbXkgY29uZmlnIHRvIHByZXZlbnQgdGhlIGJhc2ljX3NldHVwIHdhcm5pbmcKK0NPTkZJR0FHRU5UICdyb2NvbW11bml0eSBwdWJsaWMgMTI3LjAuMC4wLzgnCisKK0FHRU5UX0ZMQUdTPSctRG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHknCisKK1NUQVJUQUdFTlQKKworU0FWRUNIRUNLQUdFTlQoKSB7CisgICAgQ0hFQ0tBR0VOVCAiJEAiCisgICAgaWYgWyAieCRyZXR1cm5fdmFsdWUiICE9ICJ4MCIgXSA7IHRoZW4KKyAgICAgICAgRklOSVNIRUQKKyAgICBmaQorfQorCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxOiBFcnJvcjogbWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAzOiBFcnJvcjogY29udGV4dCBuYW1lIHRvbyBsb25nJworQ0hFQ0tBR0VOVENPVU5UIGF0bGVhc3RvbmUgJ2xpbmUgNDogRXJyb3I6IEJsYW5rIGxpbmUgZm9sbG93aW5nIGNvbTJzZWMgdG9rZW4uJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNTogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNjogRXJyb3I6IHNlY3VyaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA3OiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDg6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDk6IEVycm9yOiBtaXNzaW5nIFNPVVJDRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMDogRXJyb3I6IGVtcHR5IFNPVVJDRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMTogRXJyb3I6IGV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMjogRXJyb3I6IG1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEzOiBFcnJvcjogZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE0OiBFcnJvcjogZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTU6IEVycm9yOiBjb21tdW5pdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICc8IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0IiwgMC4wLjAuMC8wLjAuMC4wPiA9PiAidDQwNGUiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWEiLCAwLjAuMC4wLzAuMC4wLjA+ID0+ICJ0NDA1YSInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1YiIsIDEwLjAuMC4wLzI1NS4yNTUuMjU1LjI1NT4gPT4gInQ0MDViIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVjIiwgMTAuMC4wLjAvMjU1LjAuMC4wPiA9PiAidDQwNWMiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjA6IEVycm9yOiBiYWQgbWFzayBsZW5ndGgnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMTogRXJyb3I6IGJhZCBtYXNrIGxlbmd0aCcKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVmIiwgMTAuMC4wLjAvMjU1LjAuMC4wPiA9PiAidDQwNWYiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjM6IEVycm9yOiBiYWQgbWFzaycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI0OiBFcnJvcjogYmFkIG1hc2snCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyNTogRXJyb3I6IHNvdXJjZS9tYXNrIG1pc21hdGNoJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWoiLCAwLjAuMC4wLzI1NS4yNTUuMjU1LjI1NT4gPT4gInQ0MDVqIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVrIiwgMC4wLjAuMC8wLjAuMC4wPiA9PiAidDQwNWsiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWwiLCAwLjAuMC4wLzAuMC4wLjA+ID0+ICJ0NDA1bCInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA2YSIsIDI1NS4yNTUuMjU1LjI1NS8yNTUuMjU1LjI1NS4yNTU+ID0+ICJ0NDA2YSInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAzMDogRXJyb3I6JyAjIG1zZyBmcm9tIGhfc3RyZXJyb3Igc28gaXQgdmFyaWVzCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAzMTogRXJyb3I6JyAjIG1zZyBmcm9tIGhfc3RyZXJyb3Igc28gaXQgdmFyaWVzCisKK0NIRUNLQUdFTlQgJzwiYzQwOGEiJworaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWVxIDAgXSA7IHRoZW4KKyAgQ0hFQ0tBR0VOVCAnbGluZSAzMjogRXJyb3I6JworICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICAgIHJldHVybl92YWx1ZT0xCisgICAgRklOSVNIRUQKKyAgZmkKK2VsaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgcmV0dXJuX3ZhbHVlPTEKKyAgRklOSVNIRUQKK2ZpCisKK0NIRUNLQUdFTlQgJzwiYzQwOGIiJworaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWVxIDAgXSA7IHRoZW4KKyAgQ0hFQ0tBR0VOVCAnbGluZSAzMzogRXJyb3I6JworICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICAgIHJldHVybl92YWx1ZT0xCisgIGZpCitlbGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgIHJldHVybl92YWx1ZT0xCitmaQorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOTBhZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUKQEAgLTAsMCArMSwxNTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGNvbTJzZWM2IGRpcmVjdGl2ZQorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KK1NLSVBJRiBORVRTTk1QX05PX0RFQlVHR0lORworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyA2MDFhIFRlc3QgbWlzc2luZyBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlYzYgLUNuJworIyA2MDFiIFRlc3QgZW1wdHkgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IC1DbiAiIicKKyMgNjAxYyBUZXN0IG92ZXJsb25nIENPTlRFWFQgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworCisjIDYwMmEgVGVzdCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNicKKyMgNjAyYiBUZXN0IGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAiIicKKyMgNjAyYyBUZXN0IG92ZXJsb25nIHNlY05hbWUgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisjIDYwMmQgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzJworIyA2MDJlIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMgIiInCisKKyMgNjAzYSBUZXN0IG1pc3NpbmcgbmV0d29yayBhZGRyZXNzCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwM2EnCisjIDYwM2IgVGVzdCBlbXB0eSBuZXR3b3JrIGFkZHJlc3MKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjAzYiAiIicKKyMgNjAzYyBUZXN0IGZvcmJpZGRlbiB2YWx1ZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDNjIE5FVFdPUksnCisKKyMgNjA0YSBUZXN0IG1pc3NpbmcgQ09NTVVOSVRZCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNGEgZGVmYXVsdCcKKyMgNjA0YiAnRXJyb3I6IGVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXInCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNGIgZGVmYXVsdCAiIicKKyMgNjA0YyBUZXN0IG92ZXJsb25nIENPTU1VTklUWQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDRjIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JworIyA2MDRkIFRlc3QgYmFyZWx5IHZhbGlkIGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDRkIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisjIDYwNGUgVGVzdCBmb3JiaWRkZW4gdmFsdWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA0ZSBkZWZhdWx0IENPTU1VTklUWScKKworIyA2MDVhIFRlc3QgJ2RlZmF1bHQnIGNvbmZpZ3VyYXRpb24KK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1YSBkZWZhdWx0IGM2MDVhJworIyA2MDViIFRlc3QgaXAgYWRkcmVzcyBjb25maWd1cmF0aW9uCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWIgYWEwMDo6IGM2MDViJworIyA2MDVjIFRlc3QgdmFsaWQgbnVtZXJpYyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWMgYWEwMDo6LzggYzYwNWMnCisjIDYwNWQgVGVzdCBpbnZhbGlkIG51bWVyaWMgbWFzayAodG9vIGJpZykKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1ZCBhYTAwOjovMTI5IGM2MDVkJworIyA2MDVlIFRlc3QgaW52YWxpZCBudW1lcmljIG1hc2sgKG5lZ2F0aXZlKQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVlIGFhMDA6Oi8tMSBjNjA1ZScKKyMgNjA1ZiBUZXN0IHZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVmIGFhMDA6Oi9mZjAwOjogYzYwNWYnCisjIDYwNWcgVGVzdCBpbnZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVnIGFhMDA6Oi9mZmZmZjo6IGM2MDVnJworIyA2MDVoIFRlc3QgaW52YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1aCBhYTAwOjovZ2cwMDo6IGM2MDVoJworIyA2MDVpIFRlc3QgYWRkcmVzcyB3aXRoIDEgYml0cyBub3QgY292ZXJlZCBieSB0aGUgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVpIGFhMDA6Oi8wZmYwOjogYzYwNWknCisKKyMgNjA2YSBUZXN0IG1heGltYWxseSBsb25nIGFkZHJlc3MvbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDZhIGZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZi9mZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYgYzYwNmEnCisKKyMgNjA3YSBUZXN0IG5vbiBleGlzdGFudCBob3N0IG5hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA3YSBuby5zdWNoLmFkZHJlc3MuIGM2MDdhJworIyA2MDdiIFRlc3QgbWF4aW1hbGx5IGxvbmcgaG9zdCBuYW1lL21hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA3YiBhMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxLi9mZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYgYzYwN2InCisKKyMgNjA4IExvb2t1cCB0ZXN0cywgcmVxdWlyZSBuZXR3b3JrIGFjY2VzcworIyA2MDhhIFRlc3QgbG9va3VwIHJldHVybmluZyBhIHNpbmdsZSBob3N0CitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwOGEgb25lYWFhYS5uZXQtc25tcC5vcmcgYzYwOGEnCisjIDYwOGIgVGVzdCBsb29rdXAgcmV0dXJuaW5nIG11bHRpcGxlIGhvc3RzCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwOGIgdHdvYWFhYS5uZXQtc25tcC5vcmcgYzYwOGInCisKKyMgRGVmYXVsdCBhZ2VudCBzZXR1cAorQ09ORklHQUdFTlQgIltzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSIgorIyBEdW1teSBjb25maWcgdG8gcHJldmVudCB0aGUgYmFzaWNfc2V0dXAgd2FybmluZworQ09ORklHQUdFTlQgJ3JvY29tbXVuaXR5IHB1YmxpYyAxMjcuMC4wLjAvOCcKKworQUdFTlRfRkxBR1M9Jy1EbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eScKKworU1RBUlRBR0VOVAorCitTQVZFQ0hFQ0tBR0VOVCgpIHsKKyAgICBDSEVDS0FHRU5UICIkQCIKKyAgICBpZiBbICJ4JHJldHVybl92YWx1ZSIgIT0gIngwIiBdIDsgdGhlbgorICAgICAgICBGSU5JU0hFRAorICAgIGZpCit9CisKKyMgNjAxCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxOiBFcnJvcjogbWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAzOiBFcnJvcjogY29udGV4dCBuYW1lIHRvbyBsb25nJworIyA2MDIKK0NIRUNLQUdFTlRDT1VOVCBhdGxlYXN0b25lICdsaW5lIDQ6IEVycm9yOiBCbGFuayBsaW5lIGZvbGxvd2luZyBjb20yc2VjNiB0b2tlbi4nCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA1OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA2OiBFcnJvcjogc2VjdXJpdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDc6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgODogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworIyA2MDMKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDk6IEVycm9yOiBtaXNzaW5nIFNPVVJDRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMDogRXJyb3I6IGVtcHR5IFNPVVJDRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMTogRXJyb3I6IGV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnCisjIDYwNAorU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTI6IEVycm9yOiBtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMzogRXJyb3I6IGVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNDogRXJyb3I6IGNvbW11bml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJzwiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQiLCA6Oi86Oj4gPT4gInQ2MDRkIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE2OiBFcnJvcjogZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkJworIyA2MDUKK1NBVkVDSEVDS0FHRU5UICc8ImM2MDVhIiwgOjovOjo+ID0+ICJ0NjA1YSInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNjA1YiIsIGFhMDA6Oi9mZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY+ID0+ICJ0NjA1YiInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNjA1YyIsIGFhMDA6Oi9mZjAwOjo+ID0+ICJ0NjA1YyInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMDogRXJyb3I6IGJhZCBtYXNrIGxlbmd0aCcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIxOiBFcnJvcjogYmFkIG1hc2sgbGVuZ3RoJworU0FWRUNIRUNLQUdFTlQgJzwiYzYwNWYiLCBhYTAwOjovZmYwMDo6PiA9PiAidDYwNWYiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjM6IEVycm9yOiBiYWQgbWFzaycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI0OiBFcnJvcjogYmFkIG1hc2snCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyNTogRXJyb3I6IHNvdXJjZS9tYXNrIG1pc21hdGNoJworIyA2MDYKK1NBVkVDSEVDS0FHRU5UICc8ImM2MDZhIiwgZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmL2ZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZj4gPT4gInQ2MDZhIicKKyMgNjA3CitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyNzogRXJyb3I6JworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjg6IEVycm9yOicKKworIyA2MDgKK0NIRUNLQUdFTlQgJzwiYzYwOGEiJworaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWVxIDAgXSA7IHRoZW4KKyAgQ0hFQ0tBR0VOVCAnbGluZSAyOTogRXJyb3I6JworICBlcnJudW09YGV4cHIgJGVycm51bSAtIDFgCisgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgICAgRklOSVNIRUQKKyAgZmkKK2VsaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgRklOSVNIRUQKK2ZpCisKK0NIRUNLQUdFTlRDT1VOVCBhdGxlYXN0b25lICc8ImM2MDhiIicKK2lmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1lcSAwIF0gOyB0aGVuCisgIENIRUNLQUdFTlQgJ2xpbmUgMzA6IEVycm9yOicKKyAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWVxIDEgXSA7IHRoZW4KKyAgICBlcnJudW09YGV4cHIgJGVycm51bSAtIDFgCisgIGZpCitmaQorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzgwZjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGNvbTJzZWN1bml4IGRpcmVjdGl2ZQorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KK1NLSVBJRiBORVRTTk1QX05PX0RFQlVHR0lORworU0tJUElGTk9UIFNJWkVPRl9TT0NLQUREUl9VTl9TVU5fUEFUSAorCisjCisjIFByZXBhcmUgdGVzdAorIworaWYgWyBgdW5hbWUgLXNgID0gU3VuT1MgXQordGhlbiBBV0s9bmF3aworZWxzZSBBV0s9YXdrCitmaQorCitzdW5fcGF0aF9zaXplZD1gJEFXSyAnL14jZGVmaW5lIFNJWkVPRl9TT0NLQUREUl9VTl9TVU5fUEFUSC8geyByZXMgPSAiYSI7IGZvcihuID0gMjsgbiA8ICQzOyArK24pIHsgcmVzID0gcmVzIHN1YnN0cigiMTIzNDU2Nzg5MCIsIG4gJSAxMCArIDEsIDEpOyB9IHByaW50IHJlczsgfScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaGAKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgdTAxYSBUZXN0IG1pc3NpbmcgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IC1DbicKKyMgdTAxYSBUZXN0IGVtcHR5IENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAtQ24gIiInCisjIHUwMWMgVGVzdCBvdmVybG9uZyBDT05URVhUICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKworIyB1MDJhIFRlc3QgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXgnCisjIHUwMmIgVGVzdCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggIiInCisjIHUwMmMgVGVzdCBvdmVybG9uZyBzZWNOYW1lICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworIyB1MDJkIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycKKyMgdTAyZSBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzICIiJworCisjIHUwM2EgVGVzdCBtaXNzaW5nIHNvY2twYXRoCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwM2EnCisjIHUwM2IgVGVzdCBlbXB0eSBzb2NrcGF0aAorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDNiICIiJworIyB1MDNjIFRlc3Qgb3Zlcmxvbmcgc29ja3BhdGggKHNpemVvZihzb2NrYWRkcl91bi5zdW5fcGF0aCkgY2hhcnMpCitDT05GSUdBR0VOVCAiY29tMnNlY3VuaXggdHUwM2MgJHtzdW5fcGF0aF9zaXplZH14IgorIyB1MDNkIFRlc3QgdmFsaWQgc29ja3BhdGggKHNpemVvZihzb2NrYWRkcl91bi5zdW5fcGF0aCkgLSAxIGNoYXJzKQorQ09ORklHQUdFTlQgImNvbTJzZWN1bml4IHR1MDNkICR7c3VuX3BhdGhfc2l6ZWR9IgorCisjIHUwNGEgVGVzdCBtaXNzaW5nIGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDRhIGRlZmF1bHQnCisjIHUwNGIgVGVzdCBlbXB0eSBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA0YiBkZWZhdWx0ICIiJworIyB1MDRjIFRlc3QgZm9yYmlkZGVuIHZhbHVlIChub3cgd2h5IGl0IGlzIGZvcmJpZGRlbi4uLikKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA0YyBkZWZhdWx0IENPTU1VTklUWScKKyMgdTA0ZCBUZXN0IG92ZXJsb25nIGNvbW11bml0eSAoMjU1IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDRkIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JworIyB1MDRlIFRlc3QgdmFsaWQgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNGUgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKworIyB1MDVhIFRlc3QgJ2RlZmF1bHQnIGNvbmZpZ3VyYXRpb24KK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA1YSBkZWZhdWx0IGN1MDVhJworCisjIHUwN2EgVGVzdCBub24gZXhpc3RhbnQgc29ja3BhdGgKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA3YSAvZGV2L251bGwvbm8vc3VjaCBjdTA3YScKKworIyBEZWZhdWx0IGFnZW50IHNldHVwCitDT05GSUdBR0VOVCAiW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIiCisjIER1bW15IGNvbmZpZyB0byBwcmV2ZW50IHRoZSBiYXNpY19zZXR1cCB3YXJuaW5nCitDT05GSUdBR0VOVCAncm9jb21tdW5pdHkgcHVibGljIDEyNy4wLjAuMC84JworCitBR0VOVF9GTEFHUz0nLURuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5JworCitTVEFSVEFHRU5UCisKK1NBVkVDSEVDS0FHRU5UKCkgeworICAgIENIRUNLQUdFTlQgIiRAIgorICAgIGlmIFsgIngkcmV0dXJuX3ZhbHVlIiAhPSAieDAiIF0gOyB0aGVuCisgICAgICAgIEZJTklTSEVECisgICAgZmkKK30KKworIyB1MDEKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE6IEVycm9yOiBtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyOiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDM6IEVycm9yOiBjb250ZXh0IG5hbWUgdG9vIGxvbmcnCisjIHUwMgorQ0hFQ0tBR0VOVENPVU5UIGF0bGVhc3RvbmUgJ2xpbmUgNDogRXJyb3I6IEJsYW5rIGxpbmUgZm9sbG93aW5nIGNvbTJzZWN1bml4IHRva2VuLicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDU6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDY6IEVycm9yOiBzZWN1cml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNzogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA4OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCisjIHUwMworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgOTogRXJyb3I6IG1pc3NpbmcgU09DS1BBVEggcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTA6IEVycm9yOiBlbXB0eSBTT0NLUEFUSCBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMTogRXJyb3I6IHNvY2twYXRoIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTI6IEVycm9yOiBtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXInCisjIHUwNAorU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTM6IEVycm9yOiBtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNDogRXJyb3I6IGVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNTogRXJyb3I6IGV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE2OiBFcnJvcjogY29tbXVuaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnPCIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIsICIiPiA9PiAidHUwNGUiJworIyB1MDUKK1NBVkVDSEVDS0FHRU5UICc8ImN1MDVhIiwgIiI+ID0+ICJ0dTA1YSInCisjIHUwNworU0FWRUNIRUNLQUdFTlQgJzwiY3UwN2EiLCAiL2Rldi9udWxsL25vL3N1Y2giPiA9PiAidHUwN2EiJworCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0OTQ5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgdGhhdCB0aGUgYWdlbnQgcmVzcG9uZHMgcHJvcGVybHkgdG8gYSBraWxsIC1IVVAKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworU0tJUElGTk9UIEhBVkVfU0lHSFVQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCisjIGFkZCBhIGFnZW50IGNvbmZpZ3VyYXRpb24gbGluZSB0aGF0IHdvdWxkbid0IGhhdmUgYmVlbiB0aGVyZSB3aGVuCisjIHRoZSBzdGFydGVkIHVwLgorQ09ORklHQUdFTlQgc3lzbG9jYXRpb24gbm90LWFueXdoZXJlLWluLXBhcnRpY3VsYXIKKworIyBraWxsIC1IVVAgdGhlIGFnZW50IHRvIGdldCBpdCB0byByZS1yZWFkIHRoZSAuY29uZiBmaWxlLgorREVMQVkKK2tpbGwgLUhVUCBgY2F0ICRTTk1QX1NOTVBEX1BJRF9GSUxFYCA+IC9kZXYvbnVsbCAyPiYxCitERUxBWQorCisjIEFuZCBzZWUgaWYgaXQgaGFzIHRoZSBuZXcgdmFsdWUuCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS42LjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAibm90LWFueXdoZXJlLWluLXBhcnRpY3VsYXIiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjkxZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZQpAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBZ2VudFggR0VUIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgorZWxzZQorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCitpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBhZ2VudHggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCisgIFNUQVJUQUdFTlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDMgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKK2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzkzOWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZQpAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBZ2VudFggU0VUIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgICAgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgorZWxzZQorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCAtREFnZW50WCIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCisKK2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKKyAgZWNobyAicHN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIFNUQVJUQUdFTlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKKyAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqdGVzdGNvbnRhY3QiCisKKyAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisKKyAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCisgICAgQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIHMgbmV3dGVzdGNvbnRhY3QiCisKKyAgICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIipuZXd0ZXN0Y29udGFjdCIKKworICAgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorCisJIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKwlDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisJCisJQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqbmV3dGVzdGNvbnRhY3QiCisgICAgZmkKKyAgZmkKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKK2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTBiNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDcyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBZ2VudFggaWxsZWdhbCBTRVQgaGFuZGxpbmcgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiAgICBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKK2ZpCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIC1EQWdlbnRYIgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKKworaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgorICBTVEFSVEFHRU5UCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCisgICMgd2UgZG9uJ3Qga25vdyB0aGUgcmVhbCB2YWx1ZSwgdW5mb3J0dW5hdGVseSwgc28gd2UgdGVzdCBmb3Igd2hhdAorICAjIHdlIHNob3VsZCAqbm90KiBnZXQgYmFjay4KKyAgQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKKworICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDA7IHRoZW4KKworICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKKyAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtSXIgJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIGkgNCIKKworICAgIENIRUNLICJ3cm9uZ1R5cGUiCisKKyAgZmkKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKK2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTVlMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZQpAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBZ2VudFggdHJhcCBzZW5kaW5nIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YXJ0IHRoZSB0cmFwIGRlbW9uCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK1NUQVJUVFJBUEQKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKyMgY29uZmlndXJlIHRoZSB0cmFwIHJlY2VpdmVyLgorQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBleGFtcGxlIG1pYi4KK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgorZWxzZQorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1leGFtcGxlIgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBleGFtcGxlIG1pYgorQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjEuMCIKKworQ0hFQ0sgIk5vIFN1Y2ggT2JqZWN0IgorCitpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgZXhhbXBsZSAtRGFkZCIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCisKKyAgU1RBUlRBR0VOVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBleGFtcGxlIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuMS4wIgorCisgIENIRUNLICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKKworICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKworICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHNlbmRzIGEgdHJhcCBmcm9tIHRoZSBleG1hcGxlIG1pYgorICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1yIDAgLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjguMCBpIDEiCisgICAgREVMQVkKKyAgICBDSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKKworICBmaQorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIHN0b3AgdGhlIHRyYXAgZGVtb24KK1NUT1BUUkFQRAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0NzVkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFnZW50WCB0cmFwIHNlbmRpbmcgc3VwcG9ydCB1c2luZyBhZ2VudHh0cmFwCisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFydCB0aGUgdHJhcCBkZW1vbgorQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCitTVEFSVFRSQVBECisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisjIGNvbmZpZ3VyZSB0aGUgdHJhcCByZWNlaXZlci4KK0NPTkZJR0FHRU5UIHRyYXAyc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKKworIyBTdGFydCB0aGUgYWdlbnQKK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgorQUdFTlRYX1NFUlZFUj0iLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCitBR0VOVFhfU0VSVkVSPSIteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgJEFHRU5UWF9TRVJWRVIiCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgImFnZW50eHRyYXAgJEFHRU5UWF9TRVJWRVIgMC4wIDAuMCBzIG1vc3RseV9oYXJtbGVzcyIKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIHN0b3AgdGhlIHRyYXAgZGVtb24KK1NUT1BUUkFQRAorCisjIENoZWNrIHRoYXQgdGhlIHRyYXAgd2FzIHJlY2VpdmVkCitDSEVDS1RSQVBEICI9IFNUUklORzogXCIqbW9zdGx5X2hhcm1sZXNzXCIqIgorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmRmNjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlCkBAIC0wLDAgKzEsMTE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAnQWdlbnRYIHN1YmFnZW50IGluIFBlcmwgKHVzaW5nIE5ldFNOTVA6OmFnZW50KScKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKKyMgbWFrZSBzdXJlIHRoZSB0b29sa2l0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgLS13aXRoLXBlcmwtbW9kdWxlcworWyAtZCAke1NOTVBfVVBESVJ9L3BlcmwvYmxpYi9hcmNoL2F1dG8vTmV0U05NUC9hZ2VudCBdIHx8IFNLSVAgTm90IC0td2l0aC1wZXJsLW1vZHVsZXMKKworIworIyBCZWdpbiB0ZXN0CisjCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworVEVTVE9JRD0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMS4wCitURVNUT0lEMj0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMi4wCitBR0VOVFhfU09DS0VUPSR7U05NUF9UTVBESVJ9L2FnZW50eF9zb2NrZXQKK1BFUkxfU1VCQUdFTlQ9JHtTTk1QX1RNUERJUn0vaGVsbG8ucGwKK1BFUkxfU1VCQUdFTlRfQ09ORj0ke1NOTVBfVE1QRElSfS9oZWxsby5jb25mCisKK2NhdCA+JFBFUkxfU1VCQUdFTlQgPDxFTkQKKyMhJHtTTk1QX1BFUkxQUk9HfQorIyBtaW5pbWFsIEFnZW50WCBzdWJhZ2VudCBpbiBQZXJsCisKK3VzZSBibGliIHF3KCR7U05NUF9VUERJUn0vcGVybCk7Cit1c2UgTmV0U05NUDo6T0lEIHF3KDphbGwpOwordXNlIE5ldFNOTVA6OmFnZW50IHF3KDphbGwpOwordXNlIE5ldFNOTVA6OkFTTiBxdyg6YWxsKTsKK3VzZSBOZXRTTk1QOjphZ2VudDo6ZGVmYXVsdF9zdG9yZTsKK3VzZSBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlIHF3KDphbGwpOwordXNlIFNOTVA7CisKKyMjIGRvdWJsZS1mb3JrIGRhZW1vbgorbXkgXCRwaWQ7Cit1bmxlc3MgKFwkcGlkID0gZm9yaykgeworICB1bmxlc3MgKGZvcmspIHsKKyAgICAjIyBzdGFydCBtYWluIGNvZGUKKyAgICBteSBcJHJlZ2F0ID0gJy4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OSc7ICMgbmV0U25tcFBsYXlQZW4KKyAgICBteSBcJG15b2lkID0gXCRyZWdhdCAuICIuMS4wIjsgIyB0aGUgImhlbGxvIHdvcmxkIiBPSUQKKyAgICBteSBcJG15b2lkMiA9IFwkcmVnYXQgLiAiLjIuMCI7ICMgdGhlICJoZWxsbyBhZ2FpbiB3b3JsZCIgT0lECisKKyAgICBteSBcJHBpZGZpbGUgPSBzaGlmdDsgIyB0YWtlIFBJRCBmaWxlIGFzIGZpcnN0IGFyZ3VtZW50IAorICAgIG9wZW4oUElERklMRSwgIj5cJHBpZGZpbGUiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gXCRwaWRmaWxlIjsKKyAgICBwcmludCBQSURGSUxFIFwkXCQ7CisgICAgY2xvc2UoUElERklMRSk7CisKK3N1YiBteV9zbm1wX2hhbmRsZXIgeworICBteSAoXCRoYW5kbGVyLCBcJHJlZ2lzdHJhdGlvbl9pbmZvLCBcJHJlcXVlc3RfaW5mbywgXCRyZXF1ZXN0cykgPSBAXzsKKyAgZm9yKG15IFwkcmVxdWVzdCA9IFwkcmVxdWVzdHM7IFwkcmVxdWVzdDsgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0LT5uZXh0KCkpIHsKKyAgICBpZiAoXCRyZXF1ZXN0X2luZm8tPmdldE1vZGUoKSA9PSBNT0RFX0dFVCkgeworICAgICAgaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkKSkgeworICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyB3b3JsZCIpOworICAgICAgICBsYXN0OworICAgICAgfSBlbHNpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQyKSkgeworICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyBhZ2FpbiB3b3JsZCIpOworICAgICAgICBsYXN0OworICAgICAgfQorICAgIH0KKyAgfQorfQorc3ViIHNodXRfaXRfZG93biB7IFwkcnVubmluZyA9IDA7IH0KKworICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MsIDEpOworICAgIG15IFwkYWdlbnQgPSBuZXcgTmV0U05NUDo6YWdlbnQoJ05hbWUnID0+ICdoZWxsbycsICdBZ2VudFgnID0+IDEpOworICAgIG15IFwkcmVnb2lkID0gbmV3IE5ldFNOTVA6Ok9JRChcJHJlZ2F0KTsKKyAgICBcJGFnZW50LT5yZWdpc3RlcigiaGVsbG8iLCBcJHJlZ29pZCwgXCZteV9zbm1wX2hhbmRsZXIpOworCisgICAgXCRTSUd7J0lOVCd9ID0gXCZzaHV0X2l0X2Rvd247CisgICAgXCRTSUd7J1FVSVQnfSA9IFwmc2h1dF9pdF9kb3duOworICAgIFwkcnVubmluZyA9IDE7CisgICAgd2hpbGUoXCRydW5uaW5nKSB7CisgICAgICBcJGFnZW50LT5hZ2VudF9jaGVja19hbmRfcHJvY2VzcygxKTsKKyAgICB9CisgICAgXCRhZ2VudC0+c2h1dGRvd24oKTsKKyAgICAjIyBlbmQgbWFpbiBjb2RlCisgICAgZXhpdCAwOworICB9CisgIGV4aXQgMDsKK30KK3dhaXRwaWQoXCRwaWQsIDApOworRU5ECisKK2VjaG8gImFnZW50eHNvY2tldCAkQUdFTlRYX1NPQ0tFVCIgPiAkUEVSTF9TVUJBR0VOVF9DT05GCisKK0NPTkZJR0FHRU5UIG1hc3RlciBhZ2VudHgKK0NPTkZJR0FHRU5UIGFnZW50eHNvY2tldCAkQUdFTlRYX1NPQ0tFVAorCitTVEFSVEFHRU5UCisKKyMgc3RhcnQgcGVybCBzdWJhZ2VudAorL3Vzci9iaW4vZW52IFNOTVBDT05GUEFUSD0iJHtTTk1QX1RNUERJUn0ke1NOTVBfRU5WX1NFUEFSQVRPUn0ke1NOTVBfVE1QX1BFUlNJU1RFTlRESVJ9IiAkU05NUF9QRVJMUFJPRyAkUEVSTF9TVUJBR0VOVCAkU05NUF9BR0VOVFhfUElEX0ZJTEUgPiRTTk1QX0FHRU5UWF9MT0dfRklMRSAyPiYxCitERUxBWQorCisjIyAxKSBTTk1QIEdFVCBhZ2FpbnN0IG1pYiBvYmplY3QgaW1wbGVtZW50ZWQgYnkgdGhlIHBlcmwgc3ViYWdlbnQKK0NBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRCIKK0NIRUNLICJoZWxsbyB3b3JsZCIKKworIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIG1hc3RlciBhZ2VudCAoSFVQKSwgcmUtdGVzdAorSFVQQUdFTlQKK0NBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRDIiCitDSEVDSyAiaGVsbG8gYWdhaW4gd29ybGQiCisKKyMjIHN0b3AKK1NUT1BBR0VOVAorU1RPUFBST0cgJFNOTVBfQUdFTlRYX1BJRF9GSUxFCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlOTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZQpAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBQcm94eSBHRVQgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworCisjIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKK1sgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgLW8gIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcDYiIF0gJiYgU0tJUCBUZXN0IGRvZXMgbm90IHN1cHBvcnQgVENQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworIyBjb25maWcgdGhlIHByb3h5CitDT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gLjEuMy42LjEuMi4xLjEKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIC1EcHJveHkiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKKyNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKKyNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCisKKyNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgorICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4KKyAgICBlY2hvICJyd2NvbW11bml0eTYgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgZmkKKyAgQUdFTlRfRkxBR1M9JE9SSUdfQUdFTlRfRkxBR1MKKyAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAorICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCisgIFNUQVJUQUdFTlQKKyAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKKyNmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTk2NDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgUHJveHkgU0VUIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiAgICBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKworIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCitbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIC1vICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3A2IiBdICYmIFNLSVAgVGVzdCBkb2VzIG5vdCBzdXBwb3J0IFRDUAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKyMgY29uZmlnIHRoZSBwcm94eQorQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IC4xLjMuNi4xLjIuMS4xCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCAtRHByb3h5IgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCisjQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCisjQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCisjaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKKyAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuCisgICAgZWNobyAicndjb21tdW5pdHk2IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGZpCisgIGVjaG8gInBzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLURtaWJfaW5pdCIKKyAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAorICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCisgIFNUQVJUQUdFTlQKKyAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIip0ZXN0Y29udGFjdCIKKworICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKworICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgICAgQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIHMgdGVzdG5ld2NvbnRhY3QiCisKKyAgICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIip0ZXN0bmV3Y29udGFjdCIKKworICAgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorCisJIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKwlDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisJCisJQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqdGVzdG5ld2NvbnRhY3QiCisgICAgZmkKKyAgZmkKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKKyNmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyNzg3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgUHJveHkgaWxsZWdhbCBTRVQgaGFuZGxpbmcgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGICAgIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCisjIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKK1sgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXSAmJiBTS0lQIFRlc3QgZG9lcyBub3Qgc3VwcG9ydCBUQ1AKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisjIGNvbmZpZyB0aGUgcHJveHkKK0NPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSAuMS4zLjYuMS4yLjEuMQorCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwgLURwcm94eSIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKKworI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCisgIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbgorICAgIGVjaG8gInJ3Y29tbXVuaXR5NiB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBmaQorIyAgZWNobyAic3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EbWliX2luaXQiCisgIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKKyAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgorICBTVEFSVEFHRU5UCisgIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKKyAgCisgICMgd2UgZG9uJ3Qga25vdyB0aGUgcmVhbCB2YWx1ZSwgdW5mb3J0dW5hdGVseSwgc28gd2UgdGVzdCBmb3Igd2hhdAorICAjIHdlIHNob3VsZCAqbm90KiBnZXQgYmFjay4KKyAgQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKKworICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDA7IHRoZW4KKworICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgICAgQ0FQVFVSRSAic25tcHNldCAtT24gLUlyICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBpIDQyIgorCisgICAgIyA1LjAueCBzbm1wc2V0IHNob3dzIGVycm9yIG9uIHNpbmdsZSBsaW5lCisgICAgI0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBXcm9uZyBUeXBlIgorICAgICMgNS4xLnggc25tcHNldCBzaG93cyBlcnJvciBvbiBtdWx0aXBsZSBsaW5lcworICAgIENIRUNLICJSZWFzb246IHdyb25nVHlwZSIKKyAgICBDSEVDSyAiRmFpbGVkIG9iamVjdDogLjEuMy42LjEuMi4xLjEuNC4wIgorCisgIGZpCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCisjZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2MjNmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MSB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKKyMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAorIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQorIyBUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKK3NubXBfdmVyc2lvbj12MQorLiAuL1N2YWNtY29uZmlnCisKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLUktd2luRXh0RExMIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjcyMzcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MiB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKKworIworIyBCZWdpbiB0ZXN0CisjCisKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgorIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCisjIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCisjIFRoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2VzcworCitzbm1wX3ZlcnNpb249djJjCisuIC4vU3ZhY21jb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCisKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNGQwZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgQ29uZmlndXJhdGlvbjoKKyNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCisjaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCisjVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCisKK3NubXBfdmVyc2lvbj12MworLiAuL1N2M3ZhY21jb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDEgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwyIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIgCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3Zjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjEgdmFjbSBkZW5pYWwgc3VwcG9ydAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgorIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCisjIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCisjIFRoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCisKK3NubXBfdmVyc2lvbj12MQorLiAuL1N2YWNtY29uZmlnCisKK1NUQVJUQUdFTlQKKworCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS09SRElFICJSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuIgorCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiCisKK0NIRUNLT1JESUUgIlJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4iCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzNjJhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyIHZhY20gZGVuaWFsIHN1cHBvcnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVkFDTV9DT05GX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCisjIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKKyMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKKyMgVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKKworc25tcF92ZXJzaW9uPXYyYworLiAuL1N2YWNtY29uZmlnCisKK1NUQVJUQUdFTlQKKworCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgorQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKK0NIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Ryd2NvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNS4wID0gU1RSSU5HOiBcIipkdW1teSIKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdHJvY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCitDSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmMwMDBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyB2YWNtIGRlbmlhbCBzdXBwb3J0CisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIENvbmZpZ3VyYXRpb246CisjaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycworI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAorI1RoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCisKK3NubXBfdmVyc2lvbj12MworLiAuL1N2M3ZhY21jb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDEgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIiAKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCisKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwyIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIDFzdCBDUFUgb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUworCitpZiB0ZXN0ICJ4YHVuYW1lIC1zYCIgIT0gInhTdW5PUyIgOyB0aGVuCisgICAgU0tJUCAibm90IHJ1bm5pbmcgc29sYXJpcyIKK2ZpCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCitTS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9ERVZJQ0VfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCisjIGFzayBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdCBDUFUgaW4gdGhlIHN5c3RlbQorCitDQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjMuMi4xLjMuNzY3IgorCitDSEVDS09SRElFICcgPSBTVFJJTkc6ICIqQ1BVICcKKworU1RPUEFHRU5UCisgIAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YTExN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGluaXRpYWwgbG9hZCBkZXZpY2Ugb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUworCitpZiB0ZXN0IGB1bmFtZSAtc2AgIT0gIlN1bk9TIiA7IHRoZW4KKyAgICAjIGEgYm9ndXMgc2tpcCBmb3IgIXN1bnMKKyAgICBTS0lQICAibm90IHJ1bm5pbmcgc29sYXJpcyIKK2ZpCisKK1NLSVBJRk5PVCBVU0lOR19IT1NUX0hSX1NZU1RFTV9NT0RVTEUKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCisjIGFzayBmb3IgdGhlIGluZGV4IG9mIHRoZSBpbml0aWFsIGRldmljZSAoaHJTeXN0ZW1Jbml0aWFsTG9hZERldmljZS4wKQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4xLjMuMCA9IElOVEVHRVI6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDYyYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgdXB0aW1lIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCisKK1NLSVBJRk5PVCBVU0lOR19IT1NUX0hSX1NZU1RFTV9NT0RVTEUKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4xLjEuMCIKKworU1RPUEFHRU5UCisgICAgCitDSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjEuMS4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWRkNDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgc3dhcCBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCisKK2lmIHRlc3QgYHVuYW1lIC1zYCAhPSAiU3VuT1MiIDsgdGhlbgorICAgIFNLSVAgIm5vdCBydW5uaW5nIHNvbGFyaXMiCitmaQorCitJU0RFRklORUQgVVNJTkdfSE9TVF9IUl9TVE9SQUdFX01PRFVMRSB8fCBJU0RFRklORUQgVVNJTkdfSE9TVF9IUkhfU1RPUkFHRV9NT0RVTEUgfHwgU0tJUCAiTm90IHVzaW5nIGhyU3RvcmFnZSIKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKKyMgYXNrIGZvciBoclN0b3JhZ2VTaXplLjEwIHdoaWNoIHJlcG9ydHMgb3ZlcmFsbCBzd2FwIHNpemUKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4yLjMuMS41LjEwIgorCitTVE9QQUdFTlQKKworQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4yLjMuMS41LjEwID0gSU5URUdFUjoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTRkaXNtYW5waW5nbWliX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1NGRpc21hbnBpbmdtaWJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2ZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTRkaXNtYW5waW5nbWliX3NpbXBsZQpAQCAtMCwwICsxLDExNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRElTTUFOIFBJTkcgTUlCCisKK1sgIiRVSUQiID0gMCBdIHx8IFNLSVAgIk5vdCBwZXJtaXR0ZWQgdG8gY3JlYXRlIHJhdyBzb2NrZXRzIgorU0tJUElGTk9UIFVTSU5HX0RJU01BTl9QSU5HX01JQl9NT0RVTEUKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMgU05NUHYyLVRDCithY3RpdmU9MQorY3JlYXRlQW5kV2FpdD01CitkZXN0cm95PTYKKyMgRElTTUFOLVBJTkctTUlCCitESVNNQU5fUElOR19NSUI9LjEuMy42LjEuMi4xLjgwLjEKK3BpbmdDdGxFbnRyeT0ke0RJU01BTl9QSU5HX01JQn0uMi4xCitwaW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGU9JHtwaW5nQ3RsRW50cnl9LjMKK3BpbmdDdGxUYXJnZXRBZGRyZXNUeXBlSXB2ND0xCitwaW5nQ3RsVGFyZ2V0QWRkcmVzcz0ke3BpbmdDdGxFbnRyeX0uNAorcGluZ0N0bFByb2JlQ291bnQ9JHtwaW5nQ3RsRW50cnl9LjcKK3BpbmdDdGxBZG1pblN0YXR1cz0ke3BpbmdDdGxFbnRyeX0uOAorcGluZ0N0bEFkbWluU3RhdHVzRW5hYmxlZD0xCitwaW5nQ3RsRnJlcXVlbmN5PSR7cGluZ0N0bEVudHJ5fS4xMAorcGluZ0N0bERlc2NyPSR7cGluZ0N0bEVudHJ5fS4xNworcGluZ0N0bFJvd1N0YXR1cz0ke3BpbmdDdGxFbnRyeX0uMjMKK3BpbmdSZXN1bHRzRW50cnk9JHtESVNNQU5fUElOR19NSUJ9LjMuMQorcGluZ1Jlc3VsdHNQcm9iZVJlc3BvbnNlcz0ke3BpbmdSZXN1bHRzRW50cnl9LjcKK3BpbmdSZXN1bHRzU2VudFByb2Jlcz0ke3BpbmdSZXN1bHRzRW50cnl9LjgKKyMgVGVzdCBjb25maWd1cmF0aW9uCitUQVJHRVRfQUREUkVTUz0xMjcuMC4wLjEKK0lEWFBGWD04Ljc4LjEwMS4xMTYuNDUuODMuNzguNzcuODAuNi44NC40OS41My41MiAjICJOZXQtU05NUCIuIlQxNTQiCitJRFhTPSIke0lEWFBGWH0uOTUuNDkgJHtJRFhQRlh9Ljk1LjUwICR7SURYUEZYfS45NS41MSIKK1BST0JFX0NPVU5UPTUKKworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Citzbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJworLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKK2ZvciBJRFggaW4gJElEWFM7IGRvCisKK0NBUFRVUkUgInNubXBzZXQgLU9uZSAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdDdGxSb3dTdGF0dXMuJElEWCBpICRkZXN0cm95IgorCitDSEVDSyAiXiRwaW5nQ3RsUm93U3RhdHVzLiRJRFggPSBJTlRFR0VSOiAkZGVzdHJveSIKKworQ0FQVFVSRSAic25tcHNldCAtT25lICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ0N0bFJvd1N0YXR1cy4kSURYIGkgJGNyZWF0ZUFuZFdhaXQiCisKK0NIRUNLICJeJHBpbmdDdGxSb3dTdGF0dXMuJElEWCA9IElOVEVHRVI6ICRjcmVhdGVBbmRXYWl0IgorCitDQVBUVVJFICJzbm1wc2V0IC1PbmUgJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgICAgICAgICAgXAorICAgICAgICAgJHBpbmdDdGxUYXJnZXRBZGRyZXNzVHlwZS4kSURYIGkgJHBpbmdDdGxUYXJnZXRBZGRyZXNUeXBlSXB2NCAgXAorICAgICAgICAgJHBpbmdDdGxUYXJnZXRBZGRyZXNzLiRJRFggcyAkVEFSR0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHBpbmdDdGxGcmVxdWVuY3kuJElEWCB1IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHBpbmdDdGxEZXNjci4kSURYIHMgU2NyaXB0R2VuZXJhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHBpbmdDdGxQcm9iZUNvdW50LiRJRFggdSAke1BST0JFX0NPVU5UfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHBpbmdDdGxBZG1pblN0YXR1cy4kSURYIGkgJHBpbmdDdGxBZG1pblN0YXR1c0VuYWJsZWQiCisKK0NIRUNLICJeJHBpbmdDdGxBZG1pblN0YXR1cy4kSURYID0gSU5URUdFUjogJHBpbmdDdGxBZG1pblN0YXR1c0VuYWJsZWQiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uZSAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdDdGxSb3dTdGF0dXMuJElEWCBpICRhY3RpdmUiCisKK0NIRUNLICJeJHBpbmdDdGxSb3dTdGF0dXMuJElEWCA9IElOVEVHRVI6ICRhY3RpdmUiCisKK2RvbmUKKworc2xlZXAgJHtQUk9CRV9DT1VOVH0KK3NsZWVwIDIKKworZm9yIElEWCBpbiAkSURYUzsgZG8KKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ1Jlc3VsdHNTZW50UHJvYmVzLiRJRFgiCisKK0NIRUNLICJeJHBpbmdSZXN1bHRzU2VudFByb2Jlcy4kSURYID0gR2F1Z2UzMjogJHtQUk9CRV9DT1VOVH0iCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdSZXN1bHRzUHJvYmVSZXNwb25zZXMuJElEWCIKKworQ0hFQ0sgIl4kcGluZ1Jlc3VsdHNQcm9iZVJlc3BvbnNlcy4kSURYID0gR2F1Z2UzMjogJHtQUk9CRV9DT1VOVH0iCisKK2RvbmUKKworIyBEZWxldGUgZmlyc3Qgcm93IGFuZCBsZWF2ZSB0aGUgcmVtYWluaW5nIHJvd3MgaW4gdGhlIHRhYmxlLgorCitmb3IgSURYIGluICRJRFhTOyBkbworCitDQVBUVVJFICJzbm1wc2V0IC1PbmUgJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nQ3RsUm93U3RhdHVzLiRJRFggaSAkZGVzdHJveSIKKworQ0hFQ0sgIl4kcGluZ0N0bFJvd1N0YXR1cy4kSURYID0gSU5URUdFUjogJGRlc3Ryb3kiCisKK2JyZWFrCisKK2RvbmUKKworU1RPUEFHRU5UCisKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjBiYmJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworIyBzbm1wbmV0c3RhdCB0ZXN0IG9ubHkgd29ya3Mgd2l0aCBVRFAgb3IgVENQCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gIngiIC1vICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1ZHAiIF07IHRoZW4KKyAgcHJvdG89dWRwCisgIEhFQURFUiAiaWYgc25tcG5ldHN0YXQgZmluZHMgdGhlIHJ1bm5pbmcgYWdlbnQgaW4gdWRwVGFibGUiCisgIFNLSVBJRk5PVCBVU0lOR19NSUJJSV9VRFBUQUJMRV9NT0RVTEUKK2VsaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdOyB0aGVuCisgIHByb3RvPXRjcAorICBIRUFERVIgImlmIHNubXBuZXRzdGF0IGZpbmRzIHRoZSBydW5uaW5nIGFnZW50IGluIHRjcFRhYmxlIgorICBTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVENQVEFCTEVfTU9EVUxFCitlbHNlCisgIEhFQURFUiAiaWYgc25tcG5ldHN0YXQgZmluZHMgdGhlIHJ1bm5pbmcgYWdlbnQgaW4gdWRwVGFibGUvdGNwVGFibGUiCisgIFNLSVAgTm90IHVzaW5nIFRDUCBvciBVRFAgdHJhbnNwb3J0CitmaQorCisjIG9uIHNvbWUgc3lzdGVtcyB0aGUgYWdlbnQgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QgdG8gYWNjZXNzIHVkcFRhYmxlL3RjcFRhYmxlCisjIC0gZWxzZSBmb3JjZSBza2lwCitjYXNlICJ4YHVuYW1lIC1zYCIgaW4KKyAgeEFJWCkgICAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKKyAgeEhQLVVYKSAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKKyAgeElSSVgqKSAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKKyAgeE5ldEJTRCkgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKKyAgeE9wZW5CU0QpIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKKyAgeE9TRjEpICAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUCBOb3QgcnVubmluZyBhcyByb290OzsKK2VzYWMKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisKKyMgbWFrZSBzdXJlIHNubXBuZXRzdGF0IGNhbiBiZSBleGVjdXRlZAorU05NUE5FVFNUQVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdCIKK1sgLXggIiRTTk1QTkVUU1RBVCIgXSB8fCBTS0lQIHNubXBuZXRzdGF0IG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICIkU05NUE5FVFNUQVQgLUNuIC1DcCAkcHJvdG8gLSRzbm1wX3ZlcnNpb24gLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorQ0hFQ0tFWEFDVCAiMTI3LjAuMC4xLiRTTk1QX1NOTVBEX1BPUlQiCisjIG11bHRpcGxlIG9jY3VycmVuY2VzIChlc3BlY2lhbGx5IGluIHRjcFRhYmxlKSBhcmUgZmluZQoraWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgorICAgIHJldHVybl92YWx1ZT0wCitlbHNlCisgICAgcmV0dXJuX3ZhbHVlPTEKK2ZpCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MXNubXBUYXJnZXRBZGRyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MXNubXBUYXJnZXRBZGRyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGUwOTRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYxc25tcFRhcmdldEFkZHJfc2ltcGxlCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBzbm1wVGFyZ2V0QWRkclRhYmxlCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX1RBUkdFVF9TTk1QVEFSR0VUQUREUkVOVFJZX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKKyMgQ2hlY2sgdGhhdCB0aGUgdGFibGUgc3RhcnRzIG91dCBlbXB0eQorQ0FQVFVSRSAic25tcGdldG5leHQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xIgorCitDSEVDS0FORERJRSAiXi4xLjMuNi4xLjYuMy4xMi4xLjIuMSIKKworIyBDcmVhdGUgYW4gZW50cnkgd2l0aCBpbmRleCAnJyAoZW1wdHkpCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45IGkgNSIKKworQ0hFQ0tPUkRJRSAibm9DcmVhdGlvbiIKKworIyBDcmVhdGUgYW4gZW50cnkgd2l0aCBpbmRleCAnMDEyMzQ1Njc4OUExMjM0NTY3ODlCMTIzNDU2Nzg5QzEyMycgKG92ZXJsb25nKQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS4zMC4zMS4zMi4zMy4zNC4zNS4zNi4zNy4zOC4zOS42NS4zMS4zMi4zMy4zNC4zNS4zNi4zNy4zOC4zOS42Ni4zMS4zMi4zMy4zNC4zNS4zNi4zNy4zOC4zOS42Ny4zMS4zMi4zMyBpIDUiCisKK0NIRUNLT1JESUUgIm5vQ3JlYXRpb24iCisKKyMgQ3JlYXRlIGFuIGVudHJ5IHdpdGggaW5kZXggJ0JcMEEnCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY2LjAuNjUgaSA1IgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42Ni4wLjY1ID0gSU5URUdFUjogNSIKKworIyBDaGVjayB0aGF0IHRoZSB0YWJsZSBjb250YWlucyB0aGUgJ0JcMEEnIGVudHJ5IGFuZCBubyBvdGhlcgorQ0FQVFVSRSAic25tcHdhbGsgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkiCisKK0NIRUNLICJeLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42Ni4wLjY1ID0iCisKKyMgRGVsZXRlIGFuIGVudHJ5IHdpdGggaW5kZXggJ0JcMEEnCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY2LjAuNjUgaSA2IgorCisjIENyZWF0ZSBhbiBlbnRyeSB3aXRoIGluZGV4ICdBJworQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42NSBpIDUiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY1ID0gSU5URUdFUjogNSIKKworIyBDaGVjayB0aGF0IHRoZSB0YWJsZSBjb250YWlucyBvbmUgYW5kIG9ubHkgb25lIGVudHJ5CitDQVBUVVJFICJzbm1wd2FsayAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOSIKKworQ0hFQ0sgIl4uMS4zLjYuMS42LjMuMTIuMS4yLjEuOSIKKworIyBDaGVjayB0aGF0IHRoZSBlbnRyeSBpcyB0aGUgZXhwZWN0ZWQgb25lCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42NSA9IElOVEVHRVI6IDMiCisKKyMgQ2hlY2sgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHNldCBhcyBleHBlY3RlZAorQ0FQVFVSRSAic25tcGdldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuMi42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuMy42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNS42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNy42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOC42NSAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42NSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjIuNjUgPSBObyBTdWNoIEluc3RhbmNlIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjMuNjUgPSBObyBTdWNoIEluc3RhbmNlIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgPSBJTlRFR0VSOiAxNTAwIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjUuNjUgPSBJTlRFR0VSOiAzIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6ICIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS43LjY1ID0gTm8gU3VjaCBJbnN0YW5jZSIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS44LjY1ID0gSU5URUdFUjogMyIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY1ID0gSU5URUdFUjogMyIKKworIyBUcnkgdG8gc2V0IHRpbWVvdXQgPCAwCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgLUlyICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSBpIC0xIgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCisjIFRyeSB0byBzZXQgdGltZW91dCB0byAyMTQ3NDgzNjQ3CitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgLUlyICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSBpIDIxNDc0ODM2NDciCisKK0NIRUNLT1JESUUgIl4uMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSA9IElOVEVHRVI6IDIxNDc0ODM2NDciCisKKyMgRmV0Y2ggYW5kIHZlcmlmeSB0aGF0IHRoZSB0aW1lb3V0IHN0aWxsIGlzIDIxNDc0ODM2NDcKK0NBUFRVUkUgInNubXBnZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUiCisKK0NIRUNLT1JESUUgIl4uMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSA9IElOVEVHRVI6IDIxNDc0ODM2NDciCisKKyMgVHJ5IHRvIHNldCByZXRyeSBjb3VudCA8IDAKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAtSXIgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS41LjY1IGkgLTEiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKKyMgVHJ5IHRvIHNldCByZXRyeSBjb3VudCA+IDI1NQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lIC1JciAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjUuNjUgaSAyNTYiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIGEgc2luZ2xlIHZhbHVlCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHMgYWxmYSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6IGFsZmEiCisKKyMgRmV0Y2ggYW5kIHZlcmlmeSB0aGF0IHRoZSB0YWdsaXN0IGhhdmUga2VwdCBpdCdzIHZhbHVlCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogYWxmYSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gbXVsdGlwbGUgdmFsdWVzCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHggNjE2YzY2NjEyMDYyNjU3NDYxIgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogYWxmYSBiZXRhIgorCisjIEZldGNoIGFuZCB2ZXJpZnkgdGhhdCB0aGUgdGFnbGlzdCBoYXZlIGtlcHQgaXQncyB2YWx1ZXMKK0NBUFRVUkUgInNubXBnZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiBhbGZhIGJldGEiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIGEgdmFsdWUgd2l0aCBhbiBlbWJlZGRlZCBudWwgY2hhcmFjdGVyCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHggNjE2YzAwNjY2MSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6IGFsLmZhIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBhIHZhbHVlIHdpdGggYSBsZWFkaW5nIHNwYWNlCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHggMjA2MTZjNjY2MSIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gYSB2YWx1ZSB3aXRoIGEgdHJhaWxpbmcgc3BhY2UKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgeCA2MTZjNjY2MTIwIgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBtdWx0aXBsZSB2YWx1ZXMgc2VwYXJhdGVkIGJ5IG1vcmUgdGhhbiBvbiB3aGl0ZXNwYWNlCisjIGNoYXJhY3RlcgorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSB4IDYxNmM2NjYxMjAyMDYyNjU3NDYxIgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDVmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJmdWxsIHNubXB3YWxrIChTTk1QdjJjKSBhZ2FpbnN0IGFnZW50IChtYXkgdGFrZSB0aW1lKSIKKworaWYgdGVzdCBgdW5hbWUgLXNgID0gIkhQLVVYIiA7IHRoZW4KKyAgICBpZiB0ZXN0IGBpZCAtdWAgIT0gIjAiIDsgdGhlbgorICAgICAgICAjIFRoZSBhZ2VudCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCAtIGVsc2UgZm9yY2Ugc2tpcAorICAgICAgICBTS0lQIEFnZW50IG11c3QgYmUgcnVuIGF0IHJvb3Qgb24gSFAtVVgKKyAgICBmaQorZmkKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisKKyMgbWFrZSBzdXJlIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAorU05NUFdBTEs9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wd2FsayIKK1sgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQIHNubXB3YWxrIG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBoaWdoZXIgdGltZW91dC9yZXRyeSB2YWx1ZXMgZm9yIHNhZmV0eQorVElNRU9VVD0xMAorUkVUUlk9NQorCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyB0ZXN0Y29tbXVuaXR5IC10ICRUSU1FT1VUIC1yICRSRVRSWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xIgorSVNERUZJTkVEIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUgfHwgSVNERUZJTkVEIFVTSU5HX0VUSEVSTElLRV9NSUJfRE9UM1NUQVRTVEFCTEVfTU9EVUxFIHx8IENIRUNLQU5ERElFICI9IFdyb25nIFR5cGUgKHNob3VsZCBiZSAiCitDSEVDS09SRElFICJObyBtb3JlIHZhcmlhYmxlcyBsZWZ0IGluIHRoaXMgTUlCIFZpZXciCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvTmV0U05NUFRlc3RUcmFuc3BvcnQucG0gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL05ldFNOTVBUZXN0VHJhbnNwb3J0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmNmZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL05ldFNOTVBUZXN0VHJhbnNwb3J0LnBtCkBAIC0wLDAgKzEsNTQgQEAKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiLi4vc3VwcG9ydCI7CisgICAgfQorfQorCitwYWNrYWdlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCit1c2UgTmV0U05NUFRlc3Q7Cit1c2UgVGVzdDsKK3VzZSBTTk1QOworCitvdXIgQElTQSA9IHF3KE5ldFNOTVBUZXN0KTsKKworc3ViIHJ1bl90ZXN0cyB7CisgICAgbXkgKCRzZWxmKSA9IEBfOworCisgICAgcGxhbih0ZXN0cyA9PiAyKTsKKworICAgICMgc2V0IGl0IHVwIHdpdGggYSBzbm1wdjMgVVNNIHVzZXIKKyAgICAkc2VsZi0+Y29uZmlnX2FnZW50KCJjcmVhdGV1c2VyIHRlc3R1c2VyIE1ENSBub3RhcmVhbGxwYXNzd29yZCIpOworICAgICRzZWxmLT5jb25maWdfYWdlbnQoInJ3dXNlciB0ZXN0dXNlciIpOworICAgICRzZWxmLT5jb25maWdfYWdlbnQoInN5c2NvbnRhY3QgaXR3b3JrZWQiKTsKKworICAgICRzZWxmLT5ESUUoImZhaWxlZCB0byBzdGFydCB0aGUgYWdlbnQiKSBpZiAoISRzZWxmLT5zdGFydF9hZ2VudCgpKTsKKworICAgICMgbm93IGNyZWF0ZSBhIHNlc3Npb24gdG8gdGVzdCB0aGluZ3Mgd2l0aAorICAgIG15ICRzZXNzaW9uID0gbmV3IFNOTVA6OlNlc3Npb24oRGVzdEhvc3QgPT4gJHNlbGYtPnsnYWdlbnRhZGRyZXNzJ30sCisJCQkJICAgIFZlcnNpb24gPT4gJzMnLAorCQkJCSAgICBTZWNOYW1lID0+ICd0ZXN0dXNlcicsCisJCQkJICAgIFNlY0xldmVsID0+ICdhdXRoTm9Qcml2JywKKwkJCQkgICAgQXV0aFByb3RvID0+ICdNRDUnLAorCQkJCSAgICBBdXRoUGFzcyA9PiAnbm90YXJlYWxscGFzc3dvcmQnKTsKKworICAgIG9rKHJlZigkc2Vzc2lvbiksICdTTk1QOjpTZXNzaW9uJywgImNyZWF0ZWQgYSBzZXNzaW9uIik7CisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBHRVQgdGVzdAorICAgIGlmIChyZWYoJHNlc3Npb24pIGVxICdTTk1QOjpTZXNzaW9uJykgeworCSR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0NvbnRhY3QuMCcpOworCW9rKCR2YWx1ZSwgJ2l0d29ya2VkJyk7CisgICAgfQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgY2xlYW51cAorICAgICRzZWxmLT5zdG9wX2FnZW50KCk7Cit9CisKKworMTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDAwMWJhc2ljLnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QwMDFiYXNpYy50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWYxMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QwMDFiYXNpYy50CkBAIC0wLDAgKzEsOTMgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBCYXNpYyBwZXJsIGZ1bmN0aW9uYWxpdHkgdG8gYSBVRFAgYWdlbnQKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9zdXBwb3J0IikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiLi4vc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICIuLi9zdXBwb3J0IjsKKyAgICB9Cit9CisKK3VzZSBOZXRTTk1QVGVzdDsKK3VzZSBUZXN0OwordXNlIFNOTVA7CisKK215ICR2YWx1ZTsKKworcGxhbih0ZXN0cyA9PiAxMCk7CisKK29rKDEsMSwic3RhcnRlZCB1cCIpOworCisjIHVzZSBhIGJhc2ljIFVEUCBwb3J0CitteSAkZGVzdGluYXRpb24gPSAidWRwOmxvY2FsaG9zdDo5ODk3IjsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3QoYWdlbnRhZGRyZXNzID0+ICRkZXN0aW5hdGlvbik7CisKKyMgc2V0IGl0IHVwIHdpdGggYSBzbm1wdjMgVVNNIHVzZXIKKyR0ZXN0LT5jb25maWdfYWdlbnQoImNyZWF0ZXVzZXIgdGVzdHVzZXIgTUQ1IG5vdGFyZWFsbHBhc3N3b3JkIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJyd3VzZXIgdGVzdHVzZXIiKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoInN5c2NvbnRhY3QgaXR3b3JrZWQiKTsKKworJHRlc3QtPkRJRSgiZmFpbGVkIHRvIHN0YXJ0IHRoZSBhZ2VudCIpIGlmICghJHRlc3QtPnN0YXJ0X2FnZW50KCkpOworCisjIG5vdyBjcmVhdGUgYSBzZXNzaW9uIHRvIHRlc3QgdGhpbmdzIHdpdGgKK215ICRzZXNzaW9uID0gbmV3IFNOTVA6OlNlc3Npb24oRGVzdEhvc3QgPT4gJGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+ICczJywKKwkJCQlTZWNOYW1lID0+ICd0ZXN0dXNlcicsCisJCQkJU2VjTGV2ZWwgPT4gJ2F1dGhOb1ByaXYnLAorCQkJCUF1dGhQcm90byA9PiAnTUQ1JywKKwkJCQlBdXRoUGFzcyA9PiAnbm90YXJlYWxscGFzc3dvcmQnKTsKKworb2socmVmKCRzZXNzaW9uKSwgJ1NOTVA6OlNlc3Npb24nLCAiY3JlYXRlZCBhIHNlc3Npb24iKTsKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdFVCB0ZXN0CiskdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNDb250YWN0LjAnKTsKKworb2soJHZhbHVlLCAnaXR3b3JrZWQnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHRVRORVhUIHRlc3QKKyR2YWx1ZSA9ICRzZXNzaW9uLT5nZXRuZXh0KCdzeXNDb250YWN0Jyk7CisKK29rKCR2YWx1ZSwgJ2l0d29ya2VkJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VUIHRlc3QKKyR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0xvY2F0aW9uLjAnKTsKKworb2soJHZhbHVlIG5lICd5ZXAnLCAxLCAnRW5zdXJpbmcgdGhlIHN5c0xvY2F0aW9uIHNldHRpbmcgaXMgbm90ICJ5ZXAiJyk7CisKK215ICR2YXJiaW5kID0gbmV3IFNOTVA6OlZhcmJpbmQoWydzeXNMb2NhdGlvbicsICcwJywgJ3llcCcsICdPQ1RFVFNUUiddKTsKKworCiskdmFsdWUgPSAkc2Vzc2lvbi0+c2V0KCR2YXJiaW5kKTsKKworb2soKCR2YWx1ZSA9PSAwKSwgMSwgJ3JldHVybiB2YWx1ZSBmcm9tIHNldCB3YXMgYSBzdWNjZXNzJyk7CisKK215ICR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0xvY2F0aW9uLjAnKTsKKworb2soJHZhbHVlLCAneWVwJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR0VUQlVMSyB0ZXN0CiskdmFyYmluZCA9IG5ldyBTTk1QOjpWYXJiaW5kKFsnc3lzQ29udGFjdCddKTsKK215IEB2YWx1ZXMgPSAkc2Vzc2lvbi0+Z2V0YnVsaygwLCAzLCAkdmFyYmluZCk7CisKK29rKCQjdmFsdWVzID09IDIpOworb2soJHZhbHVlc1swXSBlcSAnaXR3b3JrZWQnKTsKK29rKCR2YWx1ZXNbMl0gZXEgJ3llcCcpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGdldHRhYmxlKCkgdGVzdAorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBjbGVhbnVwCiskdGVzdC0+c3RvcF9hZ2VudCgpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAxNWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVURQIElQdjQgVGVzdAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICIuLi9wZXJsIikgeworCXB1c2ggQElOQywgIi4uL3BlcmwiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3RUcmFuc3BvcnQoYWdlbnRhZGRyZXNzID0+ICJ1ZHA6bG9jYWxob3N0Ojk4NzUiKTsKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIk5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4iKTsKKyR0ZXN0LT5ydW5fdGVzdHMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMDdhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFRDUCBJUHY0IFRlc3QKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9wZXJsIikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiLi4vcGVybCIpIHsKKwlwdXNoIEBJTkMsICIuLi9wZXJsIjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0VHJhbnNwb3J0KGFnZW50YWRkcmVzcyA9PiAidGNwOmxvY2FsaG9zdDo5ODc1Iik7CiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOIik7CiskdGVzdC0+cnVuX3Rlc3RzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDN1ZHA2LnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDN1ZHA2LnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYjMzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwM3VkcDYudApAQCAtMCwwICsxLDE4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBVRFAgSVB2NiBUZXN0CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvcGVybCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiLi4vcGVybCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdFRyYW5zcG9ydChhZ2VudGFkZHJlc3MgPT4gInVkcDY6Wzo6MV06OTg3NSIpOworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4iKTsKKyR0ZXN0LT5ydW5fdGVzdHMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNHRjcDYudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNHRjcDYudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODIyMmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA0dGNwNi50CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFRDUCBJUHY2IFRlc3QKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9wZXJsIikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiLi4vcGVybCIpIHsKKwlwdXNoIEBJTkMsICIuLi9wZXJsIjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0VHJhbnNwb3J0KGFnZW50YWRkcmVzcyA9PiAidGNwNjpbOjoxXTo5ODc1Iik7CiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiIpOworJHRlc3QtPnJ1bl90ZXN0cygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA1dW5peC50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA1dW5peC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDV1bml4LnQKQEAgLTAsMCArMSwxOSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVW5peCBEb21haW4gU29ja2V0IFRlc3QKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9wZXJsIikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiLi4vcGVybCIpIHsKKwlwdXNoIEBJTkMsICIuLi9wZXJsIjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0VHJhbnNwb3J0KGFnZW50YWRkcmVzcyA9PiAiYm9ndXMiKTsKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIk5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOIik7CiskdGVzdC0+eydhZ2VudGFkZHJlc3MnfSA9ICJ1bml4OiIgLiAkdGVzdC0+eydkaXInfSAuICIvdW5peHRlc3Rzb2NrZXQiOworJHRlc3QtPnJ1bl90ZXN0cygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5L1QwMTQxc25tcHYyY3NldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5L1QwMTQxc25tcHYyY3NldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDVmNDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHkvVDAxNDFzbm1wdjJjc2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyYyBzZXQgZmFpbHVyZSB0byBzeXN0ZW0uc3lzQ29udGFjdC4wCisKK1NLSVBJRk5PVCBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Citzbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJworKGNkIC4uL2RlZmF1bHQgOyAuIC4vU3YyY2NvbmZpZykKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzoiCisKK0NBUFRVUkUgInNubXBzZXQgLXIgMCAtdCAxIC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIHMgZm9vYmFydGVzdGluZ2JheiIKKworQ0hFQ0sgIlRpbWVvdXQ6IE5vIFJlc3BvbnNlIgorCitTVE9QQUdFTlQKKworQ0hFQ0tBR0VOVCAnQmFkIFBEVSB0eXBlIHJlY2VpdmVkJworCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzk0YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiBzY2FwaXRlc3QuYworICoKKyAqIEhFQURFUiBUZXN0aW5nIFNDQVBJIEFQSQorICoKKyAqIEV4cGVjdGVkIFNVQ0NFU1NlczogIDIgKyAxMCArIDEgZm9yIGFsbCB0ZXN0cy4KKyAqCisgKiBSZXR1cm5zOgorICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCisgKgorICoKKyAqIEFTU1VNRVMgIE5vIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXR1cm4gbm9uLXplcm8gc3VjY2VzcyBjb2Rlcy4KKyAqCisgKiBYWFggIFNwbGl0IGludG8gaW5kaXZpZHVhbCBtb2R1bGVzPworICogWFhYICBFcnJvci9mcmluZ2UgY29uZGl0aW9ucyBzaG91bGQgYmUgdGVzdGVkLgorICoKKyAqCisgKiBUZXN0IG9mIHNjX3JhbmRvbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyLgorICogICAgICBSRVFVSVJFUyBhIGh1bWFuIHRvIHNwb3QgY2hlY2sgZm9yIG9idmlvdXMgbm9uLXJhbmRvbW5lc3MuLi4KKyAqCisgKiBUZXN0IG9mIHNjX2dlbmVyYXRlX2tleWVkX2hhc2ggYW5kIHNjX2NoZWNrX2tleWVkX2hhc2guICAgICAgU1VDQ0VTU2VzOiAxMC4KKyAqCisgKiBUZXN0IG9mIHNjX2VuY3J5cHQgYW5kIHNjX2RlY3J5cHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAxLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKK2V4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOworCisjZGVmaW5lIERFQlVHICAgICAgICAgICAgICAgICAgIC8qICovCisKKworCisvKgorICogR2xvYmFscywgJmMuLi4KKyAqLworY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOworaW50ICAgICAgICAgICAgIHRlc3Rjb3VudD0wOworaW50ICAgICAgICAgICAgIGZhaWxjb3VudD0wOworCisjZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstYWNIcl0iCisjZGVmaW5lIE9QVElPTkxJU1QJImFjaEhyIgorCitpbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvY3J5cHQgPSAwLCBkb2tleWVkaGFzaCA9IDAsIGRvcmFuZG9tID0gMDsKKworI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9jcnlwdCArIGRva2V5ZWRoYXNoICsgZG9yYW5kb20pCisKKworCisjZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCisjZGVmaW5lIE5MCQkiXG4iCisKKyNkZWZpbmUgT1VUUFVUKG8pCXByaW50ZigiIyAlc1xuIiwgbyk7CisKKyNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAorewkJCQkJCQlcCisgICAgcHJpbnRmKCIjIERvbmUgd2l0aCAlc1xuIiwgcyk7CQkJXAorfQorCisjZGVmaW5lIEZBSUxFRChlLCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGUgIT0gU05NUEVSUl9TVUNDRVNTKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcHJpbnRmKCJub3Qgb2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsgICAgICAgICAgICBcCisJCWZhaWxjb3VudCArPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcHJpbnRmKCJvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOyAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKHN0ZG91dCk7IFwKK30KKworI2RlZmluZSBCSUdTVFJJTkcJCQkJCQkJXAorICAgIChjb25zdCB1X2NoYXIgKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICBBIHBvcnQgbWF5IGJlIGEgcGxlYXNhbnQgcmV0cmVhdCBmb3IgYW55IG1pbmQgZ3Jvd24gd2Vhcnkgb2YiCVwKKyAgICAidGhlIHN0cnVnZ2xlIGZvciBleGlzdGVuY2UuICBUaGUgdmFzdCBleHBhbnNlIG9mIHNreSwgdGhlIgkJXAorICAgICJtb2JpbGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjbG91ZHMsIHRoZSBjaGFtZWxlb24gY29sb3JhdGlvbiIJXAorICAgICJvZiB0aGUgc2VhLCB0aGUgYmVhY29ucyBmbGFzaGluZyBvbiB0aGUgc2hvcmUsIHRvZ2V0aGVyIG1ha2UiCVwKKyAgICAiYSBwcmlzbSB3aGljaCBpcyBtYXJ2ZWxsb3VzbHkgY2FsY3VsYXRlZCB0byBlbnRlcnRhaW4gYnV0IG5vdCIJXAorICAgICJmYXRpZ3VlIHRoZSBleWUuICBUaGUgbG9mdHkgc2hpcHMgd2l0aCB0aGVpciBjb21wbGV4IHdlYnMgb2YiCVwKKyAgICAicmlnZ2luZywgc3dheWVkIHRvIGFuZCBmcm8gYnkgdGhlIHN3ZWxsIGluIGhhcm1vbmlvdXMgZGFuY2UsIglcCisgICAgImFsbCBoZWxwIHRvIG1haW50YWluIGEgdGFzdGUgZm9yIHJoeXRobSBhbmQgYmVhdXR5IGluIHRoZSIJCVwKKyAgICAibWluZC4gIEFuZCBhYm92ZSBhbGwgdGhlcmUgaXMgYSBteXN0ZXJpb3VzLCBhcmlzdHJvY3JhdGljIGtpbmQiCVwKKyAgICAib2YgcGxlYXN1cmUgdG8gYmUgaGFkLCBmb3IgdGhvc2Ugd2hvIGhhdmUgbG9zdCBhbGwgY3VyaW9zaXR5IglcCisgICAgIm9yIGFtYml0aW9uLCBhcyB0aGV5IHN0cmVjaCBvbiB0aGUgYmVsdmVkZXJlIG9yIGxlYW4gb3ZlciB0aGUiCVwKKyAgICAibW9sZSB0byB3YXRjaCB0aGUgYXJyaXZhbHMgYW5kIGRlcGFydHVyZXMgb2Ygb3RoZXIgbWVuLCB0aG9zZSIJXAorICAgICJ3aG8gc3RpbGwgaGF2ZSBzdWZmaWNpZW50IHN0cmVuZ3RoIG9mIHB1cnBvc2UgaW4gdGhlbSwgdGhlIglcCisgICAgInVyZ2UgdG8gdHJhdmVsIG9yIGVucmljaCB0aGVtc2VsdmVzLiIJCQkJXAorICAgICIJLS0gQmF1ZGVsYWlyZSIJCQkJCQkJXAorICAgICIJICAgRnJvbSBfVGhlX1BvZW1zX2luX1Byb3NlXywgXCJUaGUgUG9ydFwiIChYTEkpLiIKKworI2RlZmluZSBCSUdTRUNSRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoY29uc3QgdV9jaGFyICopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlNoaGhoLi4uIERvbid0IHRlbGwgKmFueW9uZSogYWJvdXQgdGhpcy4gIE5vdCBhIHNvdWwuIgorI2RlZmluZSBCS1dEU0VDUkVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoY29uc3QgdV9jaGFyICopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIi5sdW9zIGEgdG9OICAuc2lodCB0dW9iYSAqZW5veW5hKiBsbGV0IHQnbm9EIC4uLmhoaGhTIgorCisjZGVmaW5lIE1MQ09VTlRfTUFYCTYgICAgICAgLyogTUFDIExlbmd0aCBDb3VudCBNYXhpbXVtLiAqLworCisKKworLyoKKyAqIFByb3RvdHlwZXMuCisgKi8KK3ZvaWQgICAgICAgICAgICB1c2FnZSh2b2lkKTsKKworaW50ICAgICAgICAgICAgIHRlc3RfZG9jcnlwdCh2b2lkKTsKK2ludCAgICAgICAgICAgICB0ZXN0X2Rva2V5ZWRoYXNoKHZvaWQpOworaW50ICAgICAgICAgICAgIHRlc3RfZG9yYW5kb20odm9pZCk7CisKKworCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CisgICAgY2hhciAgICAgICAgICAgIGNoOworCisgICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOworCisgICAgLyoKKyAgICAgKiBQYXJzZS4KKyAgICAgKi8KKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgZG9jcnlwdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSCc6CisgICAgICAgICAgICBkb2tleWVkaGFzaCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICBkb3JhbmRvbSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBydmFsID0gMDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICBleGl0KHJ2YWwpOworICAgICAgICB9CisKKyAgICAgICAgYXJnYyAtPSAxOworICAgICAgICBhcmd2ICs9IDE7CisgICAgICAgIG9wdGluZCA9IDE7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLworCisgICAgaWYgKChhcmdjID4gMSkpIHsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgZXhpdCgxMDAwKTsKKworICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7CisgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBUZXN0IHN0dWZmLgorICAgICAqLworICAgIHJ2YWwgPSBzY19pbml0KCk7CisgICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkgcmV0dXJuIGNvZGUiKTsKKworCisgICAgaWYgKGRvY3J5cHQgfHwgZG9hbGx0ZXN0cykgeworICAgICAgICB0ZXN0X2RvY3J5cHQoKTsKKyAgICB9CisgICAgaWYgKGRva2V5ZWRoYXNoIHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgdGVzdF9kb2tleWVkaGFzaCgpOworICAgIH0KKyAgICBpZiAoZG9yYW5kb20gfHwgZG9hbGx0ZXN0cykgeworICAgICAgICB0ZXN0X2RvcmFuZG9tKCk7CisgICAgfQorCisgICAgcHJpbnRmKCIxLi4lZFxuIiwgdGVzdGNvdW50KTsKKyAgICByZXR1cm4gMDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLworCisKKworCisKK3ZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgcHJpbnRmKCBVU0FHRQorICAgICAgICAgICAgIiIgTkwKKyAgICAgICAgICAgICIJLWEJCUFsbCB0ZXN0cy4iIE5MCisgICAgICAgICAgICAiCS1jCQlUZXN0IG9mIHNjX2VuY3J5cHQoKS9zY19kZWNyeXB0KCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIJLWgJCUhlbHAuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIJLUggICAgICAgICAgICAgIFRlc3Qgc2Nfe2dlbmVyYXRlLGNoZWNrfV9rZXllZF9oYXNoKCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIJLXIgICAgICAgICAgICAgIFRlc3Qgc2NfcmFuZG9tKCkuIgorICAgICAgICAgICAgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9kb3JhbmRvbQorICoKKyAqIE9uZSBsYXJnZSByZXF1ZXN0LCBvbmUgc2V0IG9mIHNob3J0IHJlcXVlc3RzLgorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICogWFhYCXByb2JhYmx5IHNob3VsZCBzcGxpdCB1cCBpbnRvIGluZGl2aWR1YWwgb3B0aW9ucy4KKyAqLworaW50Cit0ZXN0X2RvcmFuZG9tKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIG9yaWdyZXF1ZXN0ID0gKDEwMjQgKiAyKSwKKyAgICAgICAgb3JpZ3JlcXVlc3Rfc2hvcnQgPSAxOSwgc2hvcnRjb3VudCA9IDcsIGk7CisgICAgc2l6ZV90ICAgICAgICAgIG5ieXRlcyA9IG9yaWdyZXF1ZXN0OworICAgIHVfY2hhciAgICAgICAgICBidWZbTE9DQUxfTUFYQlVGXTsKKworICAgIE9VVFBVVCgiUmFuZG9tIHRlc3QgLS0gbGFyZ2UgcmVxdWVzdDoiKTsKKworICAgIHJ2YWwgPSBzY19yYW5kb20oYnVmLCAmbmJ5dGVzKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX3JhbmRvbSgpIHJldHVybiBjb2RlIik7CisKKyAgICBpZiAobmJ5dGVzICE9IG9yaWdyZXF1ZXN0KSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICJzY19yYW5kb20oKSByZXR1cm5lZCBkaWZmZXJlbnQgdGhhbiByZXF1ZXN0ZWQuIik7CisgICAgfQorCisgICAgZHVtcF9jaHVuaygic2NhcGl0ZXN0IiwgTlVMTCwgYnVmLCBuYnl0ZXMpOworCisgICAgU1VDQ0VTUygiUmFuZG9tIHRlc3QgLS0gbGFyZ2UgcmVxdWVzdC4iKTsKKworCisgICAgT1VUUFVUKCJSYW5kb20gdGVzdCAtLSBzaG9ydCByZXF1ZXN0czoiKTsKKyAgICBvcmlncmVxdWVzdF9zaG9ydCA9IDE2OworCisgICAgZm9yIChpID0gMDsgaSA8IHNob3J0Y291bnQ7IGkrKykgeworICAgICAgICBuYnl0ZXMgPSBvcmlncmVxdWVzdF9zaG9ydDsKKyAgICAgICAgcnZhbCA9IHNjX3JhbmRvbShidWYsICZuYnl0ZXMpOworICAgICAgICBGQUlMRUQocnZhbCwgInNjX3JhbmRvbSgpIHJldHVybiBjb2RlIik7CisKKyAgICAgICAgaWYgKG5ieXRlcyAhPSBvcmlncmVxdWVzdF9zaG9ydCkgeworICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICJzY19yYW5kb20oKSByZXR1cm5lZCBkaWZmZXJlbnQgIiAidGhhbiByZXF1ZXN0ZWQuIik7CisgICAgICAgIH0KKworICAgICAgICBkdW1wX2NodW5rKCJzY2FwaXRlc3QiLCBOVUxMLCBidWYsIG5ieXRlcyk7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGZvciAqLworCisgICAgU1VDQ0VTUygiUmFuZG9tIHRlc3QgLS0gc2hvcnQgcmVxdWVzdHMuIik7CisKKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9yYW5kb20oKSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZG9rZXllZGhhc2gKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IGtleWVkIGhhc2hlcyB3aXRoIGEgdmFyaWV0eSBvZiBNQUMgbGVuZ3RoIHJlcXVlc3RzLgorICoKKyAqCisgKiBOT1RFIEJvdGggdGVzdHMgaW50ZW50aW9uYWxseSB1c2UgdGhlIHNhbWUgc2VjcmV0CisgKgorICogRklYCUdldCBpbnB1dCBvciBvdXRwdXQgZnJvbSBzb21lIG90aGVyIHBhY2thZ2Ugd2hpY2ggaGFzaGVzLi4uCisgKiBYWFgJQ291bGQgY3V0IHRoaXMgaW4gaGFsZiB3aXRoIGEgbGl0dGxlIGluZGlyZWN0aW9uLi4uCisgKi8KK2ludAordGVzdF9kb2tleWVkaGFzaCh2b2lkKQoreworICAgIGludCBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBiaWdzdHJpbmdfbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopIEJJR1NUUklORyksCisgICAgICAgIHNlY3JldF9sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgQklHU0VDUkVUKSwKKyAgICAgICAgcHJvcGVybGVuZ3RoLAorICAgICAgICBtbGNvdW50ID0gMDsgICAgICAgIC8qIE1BQyBMZW5ndGggY291bnQuICAgKi8KKyAgICBzaXplX3QgICAgICAgICAgaGJsZW47ICAgICAgLyogSGFzaCBCdWZmZXIgbGVuZ3RoLiAqLworCisgICAgdV9pbnQgICAgICAgICAgIGhhc2hidWZfbGVuW01MQ09VTlRfTUFYXSA9IHsKKyAgICAgICAgTE9DQUxfTUFYQlVGLAorICAgICAgICBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4sCisgICAgICAgIFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTiwKKyAgICAgICAgVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOLAorICAgICAgICA3LAorICAgICAgICAwLAorICAgIH07CisKKyAgICB1X2NoYXIgICAgICAgICAgaGFzaGJ1ZltMT0NBTF9NQVhCVUZdOworICAgIGNoYXIgICAgICAgICAgICpzOworCisgIHRlc3RfZG9rZXllZGhhc2hfYWdhaW46CisKKyAgICBPVVRQVVQoIlN0YXJ0aW5nIEtleWVkIGhhc2ggdGVzdCB1c2luZyBNRDUgLS0iKTsKKworICAgIG1lbXNldChoYXNoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIGhibGVuID0gaGFzaGJ1Zl9sZW5bbWxjb3VudF07CisgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpOworCisgICAgcnZhbCA9CisgICAgICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoYnVmLCAmaGJsZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCgpIHJldHVybiBjb2RlIik7CisKKyAgICBpZiAoaGFzaGJ1Zl9sZW5bbWxjb3VudF0gPiBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgaWYgKGhibGVuICE9IHByb3Blcmxlbmd0aCkgeworICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgTUQ1IGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDEpIik7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoaGJsZW4gIT0gaGFzaGJ1Zl9sZW5bbWxjb3VudF0pIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgTUQ1IGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDIpIik7CisgICAgfQorCisgICAgcnZhbCA9CisgICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGhhc2hidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGJsZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfY2hlY2tfa2V5ZWRfaGFzaCgpIHJldHVybiBjb2RlIik7CisKKyAgICBiaW5hcnlfdG9faGV4KGhhc2hidWYsIGhibGVuLCAmcyk7CisgICAgcHJpbnRmKCIjIGhhc2ggYnVmZmVyIChsZW49JSIgTkVUU05NUF9QUkl6ICJ1LCByZXF1ZXN0PSVkKTogICAlc1xuIiwKKyAgICAgICAgICAgIGhibGVuLCBoYXNoYnVmX2xlblttbGNvdW50XSwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisKKworICAgIE9VVFBVVCgiU3RhcnRpbmcgS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIFNIQTEgLS0iKTsKKworICAgIG1lbXNldChoYXNoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIGhibGVuID0gaGFzaGJ1Zl9sZW5bbWxjb3VudF07CisgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKKworICAgIHJ2YWwgPQorICAgICAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoYnVmLCAmaGJsZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCgpIHJldHVybiBjb2RlIik7CisKKyAgICBpZiAoaGFzaGJ1Zl9sZW5bbWxjb3VudF0gPiBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgaWYgKGhibGVuICE9IHByb3Blcmxlbmd0aCkgeworICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICJXcm9uZyBTSEExIGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDEpIik7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoaGJsZW4gIT0gaGFzaGJ1Zl9sZW5bbWxjb3VudF0pIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgU0hBMSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgyKSIpOworICAgIH0KKworICAgIHJ2YWwgPQorICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgaGFzaGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYmxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19jaGVja19rZXllZF9oYXNoKCkgcmV0dXJuIGNvZGUiKTsKKworICAgIGJpbmFyeV90b19oZXgoaGFzaGJ1ZiwgaGJsZW4sICZzKTsKKyAgICBwcmludGYoIiMgaGFzaCBidWZmZXIgKGxlbj0lIiBORVRTTk1QX1BSSXogInUsIHJlcXVlc3Q9JWQpOiAgICVzXG4iLAorICAgICAgICAgICAgaGJsZW4sIGhhc2hidWZfbGVuW21sY291bnRdLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKyAgICBTVUNDRVNTKCJLZXllZCBoYXNoIHRlc3QgdXNpbmcgU0hBMS4iKTsKKworICAgIC8qCisgICAgICogUnVuIHRoZSBiYXNpYyBoYXNoIHRlc3RzIGJ1dCB2YXJ5IHRoZSBzaXplIE1BQyByZXF1ZXN0cy4KKyAgICAgKi8KKyAgICBpZiAoaGFzaGJ1Zl9sZW5bKyttbGNvdW50XSAhPSAwKSB7CisgICAgICAgIGdvdG8gdGVzdF9kb2tleWVkaGFzaF9hZ2FpbjsKKyAgICB9CisKKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9rZXllZGhhc2goKSAqLworCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2RvY3J5cHQKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICovCitpbnQKK3Rlc3RfZG9jcnlwdCh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBiaWdzdHJpbmdfbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopIEJJR1NUUklORyksCisgICAgICAgIHNlY3JldF9sZW4gPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFUyksCisgICAgICAgIGl2X2xlbiA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTX0lWKTsKKworICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gTE9DQUxfTUFYQlVGOworICAgIHNpemVfdCAgICAgICAgICBjcnlwdGJ1Zl9sZW4gPSBMT0NBTF9NQVhCVUY7CisKKyAgICB1X2NoYXIgICAgICAgICAgICBidWZbTE9DQUxfTUFYQlVGXSwKKyAgICAgICAgY3J5cHRidWZbTE9DQUxfTUFYQlVGXSwgc2VjcmV0W0xPQ0FMX01BWEJVRl0sIGl2W0xPQ0FMX01BWEJVRl07CisKKyAgICBPVVRQVVQoIlN0YXJ0aW5nIFRlc3QgMURFUy1DQkMgLS0iKTsKKworCisgICAgbWVtc2V0KGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKworICAgIG1lbWNweShzZWNyZXQsIEJJR1NFQ1JFVCwgc2VjcmV0X2xlbik7CisgICAgbWVtY3B5KGl2LCBCS1dEU0VDUkVULCBpdl9sZW4pOworCisgICAgcnZhbCA9IHNjX2VuY3J5cHQodXNtREVTUHJpdlByb3RvY29sLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LCBzZWNyZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBjcnlwdGJ1ZiwgJmNyeXB0YnVmX2xlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19lbmNyeXB0KCkgcmV0dXJuIGNvZGUuIik7CisKKyAgICBydmFsID0gc2NfZGVjcnlwdCh1c21ERVNQcml2UHJvdG9jb2wsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsIHNlY3JldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwgY3J5cHRidWYsIGNyeXB0YnVmX2xlbiwgYnVmLCAmYnVmX2xlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19kZWNyeXB0KCkgcmV0dXJuIGNvZGUuIik7CisKKyAgICAvKiBpZ25vcmUgdGhlIHBhZCAqLworICAgIGJ1Zl9sZW4gLT0gYnVmW2J1Zl9sZW4tMV07CisKKyAgICBGQUlMRUQoKGJ1Zl9sZW4gIT0gYmlnc3RyaW5nX2xlbiksICJEZWNyeXB0ZWQgYnVmZmVyIGlzIHRoZSByaWdodCBsZW5ndGguIik7CisgICAgcHJpbnRmKCIjIG9yaWdpbmFsIGxlbmd0aDogJWRcbiIsIGJpZ3N0cmluZ19sZW4pOworICAgIHByaW50ZigiIyBvdXRwdXQgICBsZW5ndGg6ICUiIE5FVFNOTVBfUFJJeiAidVxuIiwgYnVmX2xlbik7CisKKyAgICBGQUlMRUQoKG1lbWNtcChidWYsIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbikgIT0gMCksCisgICAgICAgICAgICJEZWNyeXB0ZWQgYnVmZmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwbGFpbnRleHQuIik7CisgICAgcmV0dXJuIGZhaWxjb3VudDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9jcnlwdCgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiNWI0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYwpAQCAtMCwwICsxLDExNyBAQAorLyogSEVBREVSIHRlc3RpbmcgU0NBUEkgaGFzaGluZyBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZCBwcmludF9oYXNoKGNvbnN0IGNoYXIgKmxhYmVsLCB1X2NoYXIgKk1BQywgc2l6ZV90IE1BQ19MRU4pOworCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgICB1X2NoYXIgYnVmW10gPSAid2VzIGhhcmRha2VyIjsKKyAgICB1X2NoYXIgTUFDWzIwXTsKKyAgICBzaXplX3QgTUFDX0xFTiA9IDIwOworICAgIHVfY2hhciBzaGExa2V5WzIwXSA9ICI1NTU1NTU1NTU1NTU1NTU1NTU1NSI7CisgICAgdV9jaGFyIG1kNWtleVsxNl0gPSAiNTU1NTU1NTU1NTU1NTU1NSI7CisKKyAgICB1X2NoYXIgc2hhMXByb3BlclsyMF0gPSB7IDB4NGEsIDB4NTUsIDB4MmYsIDB4NjUsIDB4NzksIDB4M2EsIDB4NDksIDB4MzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM3LCAweDkxLCAweDUxLCAweDFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMCwgMHg4YywgMHg3YSwgMHg0NSwgMHg1MCwgMHgzNCwgMHhkNCwgMHgyM307CisgICAgdV9jaGFyIG1kNXByb3BlclsxNl0gPSB7IDB4ZTUsIDB4OTIsIDB4ZmEsIDB4NGIsIDB4MDYsIDB4ZTYsIDB4MjcsIDB4ZDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzgsIDB4MTgsIDB4ZmEsIDB4N2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDAsIDB4ODIsIDB4ZWIsIDB4NjZ9OworICAgIGludCByZXN1bHQ7CisgICAgCisgICAgcHJpbnRmKCIxLi4yXG4iKTsKKworICAgIG1lbXNldChNQUMsIDAsIE1BQ19MRU4pOworICAgIHNjX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsIE9JRF9MRU5HVEgodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisKKyAgICBwcmludF9oYXNoKCJzaGExIGhhc2giLCBNQUMsIE1BQ19MRU4pOworCisgICAgbWVtc2V0KE1BQywgMCwgTUFDX0xFTik7CisgICAgc2NfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLCBPSURfTEVOR1RIKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisKKyAgICBwcmludF9oYXNoKCJtZDUgaGFzaCIsIE1BQywgTUFDX0xFTik7CisKKyAgICBNQUNfTEVOID0gMjA7CisgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMWtleSwgc2l6ZW9mKHNoYTFrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisKKyAgICBwcmludF9oYXNoKCJzaGExIGtleWVkIiwgTUFDLCBNQUNfTEVOKTsKKworICAgIHJlc3VsdCA9CisgICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMWtleSwgc2l6ZW9mKHNoYTFrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGExcHJvcGVyLCAxMik7CisgICAgaWYgKDAgPT0gcmVzdWx0KSB7CisgICAgICAgIHByaW50Zigib2s6IDEgLSBzaGExIGtleWVkIGNvbXBhcmUgd2FzIGVxdWFsXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIm5vdCBvazogMSAtIHNoYTEga2V5ZWQgY29tcGFyZSB3YXMgbm90IGVxdWFsXG4iKTsKKyAgICB9CisgICAgCisKKyAgICBNQUNfTEVOID0gMTY7CisgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDTUQ1QXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNWtleSwgc2l6ZW9mKG1kNWtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKworICAgIHByaW50X2hhc2goIm1kNSBrZXllZCIsIE1BQywgTUFDX0xFTik7CisKKworICAgIE1BQ19MRU4gPSAxNjsKKyAgICByZXN1bHQgPQorICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDTUQ1QXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDVrZXksIHNpemVvZihtZDVrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDVwcm9wZXIsIDEyKTsKKworICAgIGlmICgwID09IHJlc3VsdCkgeworICAgICAgICBwcmludGYoIm9rOiAyIC0gbWQ1IGtleWVkIGNvbXBhcmUgd2FzIGVxdWFsXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIm5vdCBvazogMiAtIG1kNSBrZXllZCBjb21wYXJlIHdhcyBub3QgZXF1YWxcbiIpOworICAgIH0KKworICAgIE1BQ19MRU4gPSAyMDsKKyAgICBtZW1zZXQoTUFDLCAwLCBNQUNfTEVOKTsKKyAgICBnZW5lcmF0ZV9LdSh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisgICAgcHJpbnRfaGFzaCgic2hhMSBLdSIsIE1BQywgTUFDX0xFTik7CisKKyAgICBNQUNfTEVOID0gMTY7CisgICAgbWVtc2V0KE1BQywgMCwgTUFDX0xFTik7CisgICAgZ2VuZXJhdGVfS3UodXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKyAgICBwcmludF9oYXNoKCJtZDUgS3UiLCBNQUMsIE1BQ19MRU4pOworCisgICAgLyogWFhYOiB0b2RvOiBjb21wYXJlIHJlc3VsdHMgYW5kIGVuc3VyZSB0aGV5J3JlIGFsd2F5cyB0aGUgc2FtZQorICAgICAgIHZhbHVlczsgdGhlIGFsZ29yaXRobXMgYXJlbid0IHRpbWUtZGVwZW5kZW50LiAqLworICAgIHJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3ByaW50X2hhc2goY29uc3QgY2hhciAqbGFiZWwsIHVfY2hhciAqTUFDLCBzaXplX3QgTUFDX0xFTikgeworICAgIGludCBpOworICAgIHByaW50ZigiIyAlLTEwcyAlIiBORVRTTk1QX1BSSXogInU6XG4iLCBsYWJlbCwgTUFDX0xFTik7CisgICAgZm9yKGk9MDsgaSA8IE1BQ19MRU47IGkrKykgeworICAgICAgICBwcmludGYoIiMgJTAyeCAiLCBNQUNbaV0pOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9ICAgIApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4ZjY2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMKQEAgLTAsMCArMSw2MzYgQEAKKy8qCisgKiBrZXltYW5hZ2V0ZXN0LmMKKyAqCisgKiBIRUFERVIgVGVzdGluZyBrZXkgbWFuYWdlbWVudCBBUEkgZnVuY3Rpb25hbGl0eQorICoKKyAqIEV4cGVjdGVkIFNVQ0NFU1NlczogIDIgKyAyICsgMyBmb3IgYWxsIHRlc3RzLgorICoKKyAqIFJldHVybnM6CisgKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KKyAqIAorICoKKyAqIEZJWCAgT3IgaG93IGFib3V0IHBhc3NpbmcgYSB1c21Vc2VyIG5hbWUgYW5kIGxvb2tpbmcgdXAgdGhlIGVudHJ5IGFzCisgKiAgICAgIGEgbWVhbnMgb2YgZ2V0dGluZyBrZXkgbWF0ZXJpYWw/ICBUaGlzIG1lYW5zIHRoZSB1c2VyTGlzdCBpcworICogICAgICBhdmFpbGFibGUgZnJvbSBhbiBhcHBsaWNhdGlvbi4uLgorICoKKyAqIEFTU1VNRVMgIE5vIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXR1cm4gbm9uLXplcm8gc3VjY2VzcyBjb2Rlcy4KKyAqCisgKiBUZXN0IG9mIGdlbmVyYXRlX0t1KCkuICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIKKyAqIFRlc3Qgb2YgZ2VuZXJhdGVfa3VsKCkuICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMgorICogVGVzdCBvZiB7ZW5jb2RlLGRlY29kZX1fa2V5Y2hhbmdlKCkuICAgICAgICAgU1VDQ0VTU2VzOiAzCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zY2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKK2V4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOworCitpbnQgdGVzdGNvdW50ID0gMDsKKworLyoKKyAqIEdsb2JhbHMsICZjLi4uCisgKi8KK2NoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKKworI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLWFrbHVdWy1FIDxlbmdpbmVJRD5dWy1OIDxuZXdrZXk+XVstTyA8b2xka2V5Pl1bLVAgPHBhc3NwaHJhc2U+XSIKKyNkZWZpbmUgT1BUSU9OTElTVAkiYXFFOmhrbE46TzpQOnUiCisKK2ludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9nZW5LdSA9IDAsIGRvZ2Vua3VsID0gMCwgZG9rZXljaGFuZ2UgPSAwOworCisjZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2dlbkt1ICsgZG9nZW5rdWwgKyBkb2tleWNoYW5nZSkKKworCisjZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCisjZGVmaW5lIE5MCQkiXG4iCisKKyNkZWZpbmUgT1VUUFVUQUxXQVlTKG8pCWZwcmludGYoc3Rkb3V0LCAiIyAlc1xuIiwgbyk7CisjZGVmaW5lIE9VVFBVVChvKQlpZiAoIWJlcXVpZXQpIHsgT1VUUFVUQUxXQVlTKG8pOyB9CisKKyNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAorewkJCQkJCQlcCisgICAgZnByaW50ZihzdGRvdXQsICIjIERvbmUgd2l0aCAlc1xuIiwgcyk7ICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBGQUlMRUQoZSwgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoZSkgIT0gU05NUEVSUl9TVUNDRVNTKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAibm90IG9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7CVwKKwkJZmFpbGNvdW50ICs9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7CVwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goc3Rkb3V0KTsgXAorfQorCisjZGVmaW5lIERFVEFJTElOVChzLCBpKSBcCisgICAgZnByaW50ZihzdGRvdXQsICIjICVzOiAlZFxuIiwgcywgaSk7CisKKy8qCisgKiBUZXN0IHNwZWNpZmljIGdsb2JhbHMuCisgKi8KKyNkZWZpbmUJRU5HSU5FSURfREVGQVVMVAkiMS4yLjMuNHdpbGQiCisjZGVmaW5lIFBBU1NQSFJBU0VfREVGQVVMVAkiQ2xheSdzIENvbmNsdXNpb246IENyZWF0aXZpdHkgaXMgZ3JlYXQsICIgXAorCQkJCQkiYnV0IHBsYWdpYXJpc20gaXMgZmFzdGVyLiIKKyNkZWZpbmUgT0xES0VZX0RFRkFVTFQJCSJUaGlzIGlzIGEgdmVyeSBvbGQga2V5LiIKKyNkZWZpbmUgTkVXS0VZX0RFRkFVTFQJCSJUaGlzIGtleSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHZlcnkgbmV3LiIKKwordV9jaGFyICAgICAgICAgKmVuZ2luZUlEID0gTlVMTDsKK2NoYXIgICAgICAgICAgICpwYXNzcGhyYXNlID0gTlVMTDsKK2NvbnN0IHVfY2hhciAgICpvbGRrZXkgPSBOVUxMOworY29uc3QgdV9jaGFyICAgKm5ld2tleSA9IE5VTEw7CitpbnQgICAgICAgICAgICAgYmVxdWlldCA9IDA7CisKKworLyoKKyAqIFByb3RvdHlwZXMuCisgKi8KK3ZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKKworaW50ICAgICAgICAgICAgIHRlc3RfZ2Vua3VsKHZvaWQpOworaW50ICAgICAgICAgICAgIHRlc3RfZ2VuS3Uodm9pZCk7CitpbnQgICAgICAgICAgICAgdGVzdF9rZXljaGFuZ2Uodm9pZCk7CisKKworCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7CisgICAgY2hhciAgICAgICAgICAgIGNoOworCisgICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOworICAgIG9wdGFyZyA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIFBhcnNlLgorICAgICAqLworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRSc6CisgICAgICAgICAgICBlbmdpbmVJRCA9ICh1X2NoYXIgKikgb3B0YXJnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2snOgorICAgICAgICAgICAgZG9rZXljaGFuZ2UgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgZG9nZW5rdWwgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ04nOgorICAgICAgICAgICAgbmV3a2V5ID0gKHVfY2hhciAqKSBvcHRhcmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTyc6CisgICAgICAgICAgICBvbGRrZXkgPSAodV9jaGFyICopIG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdQJzoKKyAgICAgICAgICAgIHBhc3NwaHJhc2UgPSBvcHRhcmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICBkb2dlbkt1ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdxJzoKKyAgICAgICAgICAgIGJlcXVpZXQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgcnZhbCA9IDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZShzdGRvdXQpOworICAgICAgICAgICAgZXhpdChydmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ2MgLT0gMTsKKyAgICAgICAgYXJndiArPSAxOworICAgICAgICBpZiAob3B0YXJnKSB7CisgICAgICAgICAgICBhcmdjIC09IDE7CisgICAgICAgICAgICBhcmd2ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBvcHRpbmQgPSAxOworICAgICAgICBvcHRhcmcgPSBOVUxMOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KKworICAgIGlmICgoYXJnYyA+IDEpKSB7CisgICAgICAgIHVzYWdlKHN0ZG91dCk7CisgICAgICAgIGV4aXQoMTAwMCk7CisKKyAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgeworICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICB9CisKKworICAgIC8qCisgICAgICogVGVzdCBzdHVmZi4KKyAgICAgKi8KKyAgICBydmFsID0gc2NfaW5pdCgpOworICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpLiIpOworCisgICAgaWYgKGRvZ2VuS3UgfHwgZG9hbGx0ZXN0cykgeworICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9nZW5LdSgpOworICAgIH0KKyAgICBpZiAoZG9nZW5rdWwgfHwgZG9hbGx0ZXN0cykgeworICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9nZW5rdWwoKTsKKyAgICB9CisgICAgaWYgKGRva2V5Y2hhbmdlIHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgZmFpbGNvdW50ICs9IHRlc3Rfa2V5Y2hhbmdlKCk7CisgICAgfQorCisgICAgZnByaW50ZihzdGRvdXQsICIxLi4lZFxuIiwgdGVzdGNvdW50KTsKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KKworCisKKworCit2b2lkCit1c2FnZShGSUxFICogb2ZwKQoreworICAgIGZwcmludGYob2ZwLAorICAgICAgICAgICAgVVNBR0UKKyAgICAgICAgICAgICIiIE5MCisgICAgICAgICAgICAiICAgIC1hCQkJQWxsIHRlc3RzLiIgTkwKKyAgICAgICAgICAgICIgICAgLUUgWzB4XTxlbmdpbmVJRD4Jc25tcEVuZ2luZUlEIHN0cmluZy4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtawkJCVRlc3Qge2VuY29kZSxkZWNvZGV9X2tleWNoYW5nZSgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1sCQkJZ2VuZXJhdGVfa3VsKCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLWgJCQlIZWxwLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1OIFsweF08bmV3a2V5PglOZXcga2V5IChmb3IgdGVzdGluZyBLZXlDaGFuZ2UgVEMpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1PIFsweF08b2xka2V5PglPbGQga2V5IChmb3IgdGVzdGluZyBLZXlDaGFuZ2UgVEMpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1QIDxwYXNzcGhyYXNlPglTb3VyY2Ugc3RyaW5nIGZvciB1c21Vc2VyIG1hc3RlciBrZXkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLXUJCQlnZW5lcmF0ZV9LdSgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1xCQkJYmUgcXVpZXQuIgorICAgICAgICAgICAgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLworCisKKworCisjaWZkZWYgRVhBTVBMRQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZG9zb21ldGhpbmcKKyAqCisgKiBUZXN0IHRlbXBsYXRlLgorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKi8KK2ludAordGVzdF9kb3NvbWV0aGluZyh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOworCisgICAgRU0wKDEsICJVTklNUExFTUVOVEVEIik7ICAgIC8qIEVNKDEpOyAqLworCisgIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZ2VuS3UKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IGdlbmVyYXRpb24gb2YgdXNtVXNlciBtYXN0ZXIga2V5IGZyb20gYSBwYXNzcGhyYXNlLgorICoKKyAqIEFTU1VNRVMgIFBhc3NwaHJhc2UgaXMgbWFkZSBvZiBwcmludGFibGUgY2hhcmFjdGVycyEKKyAqLworaW50Cit0ZXN0X2dlbkt1KHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIGZhaWxjb3VudCA9IDAsCisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KTsKKyAgICBzaXplX3QgICAgICAgICAga3VsZW47CisgICAgY29uc3QgY2hhciAgICAgKmhhc2huYW1lID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wuIjsKKyAgICBjaGFyICAgICAgICAgICAqczsKKyAgICB1X2NoYXIgICAgICAgICAgS3VbTE9DQUxfTUFYQlVGXTsKKyAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOworCisgICAgT1VUUFVUKCJUZXN0IG9mIGdlbmVyYXRlX0t1IC0tIik7CisKKyAgICAvKgorICAgICAqIFNldCBwYXNzcGhyYXNlLgorICAgICAqLworICAgIGlmICghcGFzc3BocmFzZSkgeworICAgICAgICBwYXNzcGhyYXNlID0gc3RyZHVwKFBBU1NQSFJBU0VfREVGQVVMVCk7CisgICAgfQorICAgIGlmICghYmVxdWlldCkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJQYXNzcGhyYXNlJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgIChzdHJjbXAocGFzc3BocmFzZSwgUEFTU1BIUkFTRV9ERUZBVUxUKSA9PSAwKSA/ICIgKGRlZmF1bHQpIiA6ICIiLAorICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpOworCisKKyAgdGVzdF9nZW5LdV9hZ2FpbjoKKyAgICBtZW1zZXQoS3UsIDAsIExPQ0FMX01BWEJVRik7CisgICAga3VsZW4gPSBMT0NBTF9NQVhCVUY7CisKKyAgICBydmFsID0gZ2VuZXJhdGVfS3UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKSBwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSksCisgICAgICAgICAgICAgICAgICAgICAgIEt1LCAma3VsZW4pOworICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfS3UoKS4iKTsKKworICAgIEZBSUxFRCgoa3VsZW4gIT0gcHJvcGVybGVuZ3RoKSwKKyAgICAgICAgICAgIkt1IGxlbmd0aCBpcyB0aGUgcmlnaHQgbGVuZ3RoIGZvciB0aGlzIGhhc2h0eXBlLiIpOworCisgICAgYmluYXJ5X3RvX2hleChLdSwga3VsZW4sICZzKTsKKyAgICBpZiAoIWJlcXVpZXQpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyBLdSAobGVuPSUiIE5FVFNOTVBfUFJJeiAidSk6ICAlc1xuIiwga3VsZW4sIHMpOworICAgIGZyZWVfemVybyhzLCBrdWxlbik7CisKKyAgICBPVVRQVVQoaGFzaG5hbWUpOworCisgICAgaWYgKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKKyAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wuIjsKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKKyAgICAgICAgZ290byB0ZXN0X2dlbkt1X2FnYWluOworICAgIH0KKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZ2VuS3UoKSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9nZW5rdWwKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IG9mIGdlbmVyYXRlX2t1bCgpLgorICoKKyAqIEEgcGFzc3BocmFzZSBhbmQgZW5naW5lSUQgYXJlIGhhc2hlZCBpbnRvIGEgbWFzdGVyIGtleSBLdSB1c2luZworICogYm90aCBrbm93biBoYXNoIHRyYW5zZm9ybXMuICBMb2NhbGl6ZWQga2V5cywgYWxzbyB1c2luZyBib3RoIGhhc2gKKyAqIHRyYW5zZm9ybXMsIGFyZSBnZW5lcmF0ZWQgZnJvbSBlYWNoIG9mIHRoZXNlIG1hc3RlciBrZXlzLgorICoKKyAqIEFTU1VNRSAgZ2VuZXJhdGVfS3UgaXMgYWxyZWFkeSB0ZXN0ZWQuCisgKiBBU1NVTUUgIGVuZ2luZUlEIGlzIGluaXRpYWxseSBhIE5VTEwgdGVybWluYXRlZCBzdHJpbmcuCisgKi8KK2ludAordGVzdF9nZW5rdWwodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgZmFpbGNvdW50ID0gMCwKKyAgICAgICAgcHJvcGVybGVuZ3RoLCBlbmdpbmVJRF9sZW4sIGlzZGVmYXVsdCA9IEZBTFNFOworCisgICAgc2l6ZV90ICAgICAgICAgIGt1bGVuLCBrdWxfbGVuOworICAgIGNoYXIgICAgICAgICAgICpzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICp0ZXN0bmFtZSA9ICJVc2luZyBITUFDTUQ1IHRvIGNyZWF0ZSBtYXN0ZXIga2V5LiI7CisgICAgY29uc3QgY2hhciAqaGFzaG5hbWVfS3UgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbCI7CisKKyAgICB1X2NoYXIgICAgICAgICAgS3VbTE9DQUxfTUFYQlVGXSwga3VsW0xPQ0FMX01BWEJVRl07CisKKyAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGVfS3UgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sLCAqaGFzaHR5cGVfa3VsOworCisgICAgT1VUUFVUKCJUZXN0IG9mIGdlbmVyYXRlX2t1bCAtLSIpOworCisgICAgLyoKKyAgICAgKiBTZXQgcGFzc3BocmFzZSBhbmQgZW5naW5lSUQuCisgICAgICoKKyAgICAgKiBJZiBlbmdpbmVJRCBiZWdpbnMgd2l0aCAweCwgYXNzdW1lIGl0IGlzIHdyaXR0ZW4gaW4gKHByaW50YWJsZSkKKyAgICAgKiBoZXggYW5kIGNvbnZlcnQgaXQgdG8gYmluYXJ5IGRhdGEuCisgICAgICovCisgICAgaWYgKCFwYXNzcGhyYXNlKSB7CisgICAgICAgIHBhc3NwaHJhc2UgPSBzdHJkdXAoUEFTU1BIUkFTRV9ERUZBVUxUKTsKKyAgICB9CisgICAgaWYgKCFiZXF1aWV0KQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiMgUGFzc3BocmFzZSVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAoc3RyY21wKHBhc3NwaHJhc2UsIFBBU1NQSFJBU0VfREVGQVVMVCkgPT0gMCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKKyAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKTsKKworICAgIGlmICghZW5naW5lSUQpIHsKKyAgICAgICAgZW5naW5lSUQgPSAodV9jaGFyICopIHN0cmR1cChFTkdJTkVJRF9ERUZBVUxUKTsKKyAgICAgICAgaXNkZWZhdWx0ID0gVFJVRTsKKyAgICB9CisKKyAgICBlbmdpbmVJRF9sZW4gPSBzdHJsZW4oKGNoYXIgKikgZW5naW5lSUQpOworCisgICAgaWYgKHRvbG93ZXIoKihlbmdpbmVJRCArIDEpKSA9PSAneCcpIHsKKyAgICAgICAgZW5naW5lSURfbGVuID0KKyAgICAgICAgICAgIGhleF90b19iaW5hcnkyKGVuZ2luZUlEICsgMiwgZW5naW5lSURfbGVuIC0gMiwgJnMpOworICAgICAgICBGQUlMRUQoKGVuZ2luZUlEX2xlbiA8IDApLAorICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBlbmdpbmVJRC4iKTsKKyAgICAgICAgZW5naW5lSUQgPSAodV9jaGFyICopIHM7CisgICAgICAgIGJpbmFyeV90b19oZXgoZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgJnMpOworICAgIH0KKworICAgIGlmICghYmVxdWlldCkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIjIGVuZ2luZUlEJXMgKGxlbj0lZCk6ICAlc1xuIiwKKyAgICAgICAgICAgICAgICAoaXNkZWZhdWx0KSA/ICIgKGRlZmF1bHQpIiA6ICIiLAorICAgICAgICAgICAgICAgIGVuZ2luZUlEX2xlbiwgKChzICE9IDApID8gKCh1X2NoYXIgKikgcykgOiBlbmdpbmVJRCkpOworICAgIFNOTVBfRlJFRShzKTsKKworCisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIG1hc3RlciBrZXkgdXNpbmcgYm90aCBoYXNoIHRyYW5zZm9ybXM7IGNyZWF0ZSBsb2NhbGl6ZWQKKyAgICAgKiBrZXlzIHVzaW5nIGJvdGggaGFzaCB0cmFuc2Zvcm1zIGZyb20gZWFjaCBtYXN0ZXIga2V5LgorICAgICAqLworICB0ZXN0X2dlbmt1bF9hZ2Fpbl9tYXN0ZXI6CisgICAgbWVtc2V0KEt1LCAwLCBMT0NBTF9NQVhCVUYpOworICAgIGt1bGVuID0gTE9DQUxfTUFYQlVGOworICAgIGhhc2h0eXBlX2t1bCA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7CisgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpOworCisKKyAgICBydmFsID0gZ2VuZXJhdGVfS3UoaGFzaHR5cGVfS3UsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSksIEt1LCAma3VsZW4pOworICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfS3UoKS4iKTsKKworICAgIGJpbmFyeV90b19oZXgoS3UsIGt1bGVuLCAmcyk7CisgICAgaWYgKCFiZXF1aWV0KQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAiIyBNYXN0ZXIgS3UgdXNpbmcgXCIlc1wiOiBcdCVzXG4iLCBoYXNobmFtZV9LdSwgcyk7CisgICAgZnJlZV96ZXJvKHMsIGt1bGVuKTsKKworCisgIHRlc3RfZ2Vua3VsX2FnYWluX2xvY2FsOgorICAgIG1lbXNldChrdWwsIDAsIExPQ0FMX01BWEJVRik7CisgICAga3VsX2xlbiA9IExPQ0FMX01BWEJVRjsKKworICAgIHJ2YWwgPSBnZW5lcmF0ZV9rdWwoaGFzaHR5cGVfa3VsLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVJRCwgZW5naW5lSURfbGVuLCBLdSwga3VsZW4sIGt1bCwgJmt1bF9sZW4pOworCisgICAgaWYgKChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKQorICAgICAgICAmJiAoaGFzaHR5cGVfa3VsID09IHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSkgeworICAgICAgICBGQUlMRUQoKHJ2YWwgPT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAgICAgICAgICAgICJnZW5lcmF0ZV9rdWwgU0hPVUxEIGZhaWwgd2hlbiBLdSBsZW5ndGggaXMgIgorICAgICAgICAgICAgICAgImxlc3MgdGhhbiBoYXNoIHRyYW5zZm9ybSBsZW5ndGguIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9rdWwoKS4iKTsKKworICAgICAgICBGQUlMRUQoa3VsX2xlbiAhPSBwcm9wZXJsZW5ndGgsCisgICAgICAgICAgICAgICAiY2hlY2tpbmcgaWYga3VsIGxlbmd0aCBpcyByaWdodCBmb3IgdGhlIGdpdmVuIGhhc2h0eXBlLiIpOworCisgICAgICAgIGJpbmFyeV90b19oZXgoa3VsLCBrdWxfbGVuLCAmcyk7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyBrdWwgKCVzKSAobGVuPSUiIE5FVFNOTVBfUFJJeiAidSk6ICAlc1xuIiwKKyAgICAgICAgICAgICAgICAoKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpID8gIk1ENSIgOiAiU0hBIiksCisgICAgICAgICAgICAgICAga3VsX2xlbiwgcyk7CisgICAgICAgIGZyZWVfemVybyhzLCBrdWxfbGVuKTsKKyAgICB9CisKKworICAgIC8qCisgICAgICogQ3JlYXRlIGxvY2FsaXplZCBrZXkgdXNpbmcgdGhlIG90aGVyIGhhc2ggdHJhbnNmb3JtLCBidXQgZnJvbQorICAgICAqICogdGhlIHNhbWUgbWFzdGVyIGtleS4KKyAgICAgKi8KKyAgICBpZiAoaGFzaHR5cGVfa3VsID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKKyAgICAgICAgaGFzaHR5cGVfa3VsID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7CisgICAgICAgIGdvdG8gdGVzdF9nZW5rdWxfYWdhaW5fbG9jYWw7CisgICAgfQorCisgICAgU1VDQ0VTUyh0ZXN0bmFtZSk7CisKKworICAgIC8qCisgICAgICogUmUtY3JlYXRlIHRoZSBtYXN0ZXIga2V5IHVzaW5nIHRoZSBvdGhlciBoYXNoIHRyYW5zZm9ybS4KKyAgICAgKi8KKyAgICBpZiAoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgeworICAgICAgICBoYXNodHlwZV9LdSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgICAgICBoYXNobmFtZV9LdSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbCI7CisgICAgICAgIHRlc3RuYW1lID0gIlVzaW5nIEhNQUNTSEExIHRvIGNyZWF0ZSBtYXN0ZXIga2V5LiI7CisgICAgICAgIGdvdG8gdGVzdF9nZW5rdWxfYWdhaW5fbWFzdGVyOworICAgIH0KKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZ2Vua3VsKCkgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3Rfa2V5Y2hhbmdlCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCBvZiBLZXlDaGFuZ2UgVEMgaW1wbGVtZW50YXRpb24uCisgKgorICogQVNTVU1FIG5ld2tleSBhbmQgb2xka2V5IGJlZ2luIGFzIE5VTEwgdGVybWluYXRlZCBzdHJpbmdzLgorICovCitpbnQKK3Rlc3Rfa2V5Y2hhbmdlKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIGZhaWxjb3VudCA9IDAsCisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KSwKKyAgICAgICAgb2xka2V5X2xlbiwKKyAgICAgICAgbmV3a2V5X2xlbiwKKyAgICAgICAgaXNkZWZhdWx0X25ldyA9IEZBTFNFLCBpc2RlZmF1bHRfb2xkID0gRkFMU0U7CisgICAgc2l6ZV90ICAgICAgICAgIGtleWNoYW5nZV9sZW4sIHRlbXBfbGVuOworCisgICAgY29uc3QgY2hhciAgICAgKmhhc2huYW1lID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wuIjsKKyAgICBjaGFyICAgICAgICAgICAqczsKKworICAgIHVfY2hhciAgICAgICAgICBvbGRrZXlfYnVmW0xPQ0FMX01BWEJVRl0sCisgICAgICAgIG5ld2tleV9idWZbTE9DQUxfTUFYQlVGXSwKKyAgICAgICAgdGVtcF9idWZbTE9DQUxfTUFYQlVGXSwga2V5Y2hhbmdlX2J1ZltMT0NBTF9NQVhCVUZdOworCisgICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKKworICAgIE9VVFBVVCgiVGVzdCBvZiBLZXlDaGFuZ2UgVEMgLS0iKTsKKworCisgICAgLyoKKyAgICAgKiBTZXQgbmV3a2V5IGFuZCBvbGRrZXkuCisgICAgICovCisgICAgaWYgKCFuZXdrZXkpIHsgICAgICAgICAgICAgIC8qIG5ld2tleSAqLworICAgICAgICBuZXdrZXkgPSAoY29uc3QgdV9jaGFyICopIE5FV0tFWV9ERUZBVUxUOworICAgICAgICBpc2RlZmF1bHRfbmV3ID0gVFJVRTsKKyAgICB9CisgICAgbmV3a2V5X2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBuZXdrZXkpOworCisgICAgaWYgKHRvbG93ZXIoKihuZXdrZXkgKyAxKSkgPT0gJ3gnKSB7CisgICAgICAgIG5ld2tleV9sZW4gPSBoZXhfdG9fYmluYXJ5MigoY29uc3QgdV9jaGFyICopIG5ld2tleSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdrZXlfbGVuIC0gMiwgJnMpOworICAgICAgICBGQUlMRUQobmV3a2V5X2xlbiA8IDAsCisgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IG5ld2tleS4iKTsKKyAgICAgICAgbmV3a2V5ID0gKGNvbnN0IHVfY2hhciAqKSBzOworICAgICAgICBiaW5hcnlfdG9faGV4KChjb25zdCB1X2NoYXIgKikgbmV3a2V5LCBuZXdrZXlfbGVuLCAmcyk7CisgICAgfQorCisgICAgaWYgKCFvbGRrZXkpIHsgICAgICAgICAgICAgIC8qIG9sZGtleSAqLworICAgICAgICBvbGRrZXkgPSAoY29uc3QgdV9jaGFyICopIE9MREtFWV9ERUZBVUxUOworICAgICAgICBpc2RlZmF1bHRfb2xkID0gVFJVRTsKKyAgICB9CisgICAgb2xka2V5X2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBvbGRrZXkpOworCisgICAgaWYgKHRvbG93ZXIoKihvbGRrZXkgKyAxKSkgPT0gJ3gnKSB7CisgICAgICAgIG9sZGtleV9sZW4gPSBoZXhfdG9fYmluYXJ5MigoY29uc3QgdV9jaGFyICopIG9sZGtleSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRrZXlfbGVuIC0gMiwgJnMpOworICAgICAgICBGQUlMRUQob2xka2V5X2xlbiA8IDAsCisgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IG9sZGtleS4iKTsKKyAgICAgICAgb2xka2V5ID0gKGNvbnN0IHVfY2hhciAqKSBzOworICAgICAgICBiaW5hcnlfdG9faGV4KG9sZGtleSwgb2xka2V5X2xlbiwgJnMpOworICAgIH0KKworCisKKyAgdGVzdF9rZXljaGFuZ2VfYWdhaW46CisgICAgbWVtc2V0KG9sZGtleV9idWYsIDAsIExPQ0FMX01BWEJVRik7CisgICAgbWVtc2V0KG5ld2tleV9idWYsIDAsIExPQ0FMX01BWEJVRik7CisgICAgbWVtc2V0KGtleWNoYW5nZV9idWYsIDAsIExPQ0FMX01BWEJVRik7CisgICAgbWVtc2V0KHRlbXBfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworCisgICAgbWVtY3B5KG9sZGtleV9idWYsIG9sZGtleSwgU05NUF9NSU4ob2xka2V5X2xlbiwgcHJvcGVybGVuZ3RoKSk7CisgICAgbWVtY3B5KG5ld2tleV9idWYsIG5ld2tleSwgU05NUF9NSU4obmV3a2V5X2xlbiwgcHJvcGVybGVuZ3RoKSk7CisgICAga2V5Y2hhbmdlX2xlbiA9IExPQ0FMX01BWEJVRjsKKworCisgICAgYmluYXJ5X3RvX2hleChvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsICZzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgb2xka2V5JXMgKGxlbj0lZCk6ICAlc1xuIiwKKyAgICAgICAgICAgIChpc2RlZmF1bHRfb2xkKSA/ICIgKGRlZmF1bHQpIiA6ICIiLCBwcm9wZXJsZW5ndGgsIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworICAgIGJpbmFyeV90b19oZXgobmV3a2V5X2J1ZiwgcHJvcGVybGVuZ3RoLCAmcyk7CisgICAgZnByaW50ZihzdGRvdXQsICIjIG5ld2tleSVzIChsZW49JWQpOiAgJXNcbiIsCisgICAgICAgICAgICAoaXNkZWZhdWx0X25ldykgPyAiIChkZWZhdWx0KSIgOiAiIiwgcHJvcGVybGVuZ3RoLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKworICAgIHJ2YWwgPSBlbmNvZGVfa2V5Y2hhbmdlKGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2tleV9idWYsIHByb3Blcmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXljaGFuZ2VfYnVmLCAma2V5Y2hhbmdlX2xlbik7CisgICAgRkFJTEVEKHJ2YWwsICJlbmNvZGVfa2V5Y2hhbmdlKCkuIik7CisKKyAgICBGQUlMRUQoa2V5Y2hhbmdlX2xlbiAhPSAocHJvcGVybGVuZ3RoICogMiksCisgICAgICAgICAgICJLZXlDaGFuZ2Ugc3RyaW5nIChlbmNvZGVkKSBpcyBub3QgcHJvcGVyIGxlbmd0aCAiCisgICAgICAgICAgICJmb3IgdGhpcyBoYXNoIHRyYW5zZm9ybS4iKTsKKworICAgIGJpbmFyeV90b19oZXgoa2V5Y2hhbmdlX2J1Ziwga2V5Y2hhbmdlX2xlbiwgJnMpOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAoJXMpIEtleUNoYW5nZSBzdHJpbmc6ICAlc1xuIiwKKyAgICAgICAgICAgICgoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgPyAiTUQ1IiA6ICJTSEEiKSwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisgICAgdGVtcF9sZW4gPSBwcm9wZXJsZW5ndGg7CisgICAgcnZhbCA9IGRlY29kZV9rZXljaGFuZ2UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Y2hhbmdlX2J1ZiwgcHJvcGVybGVuZ3RoICogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2J1ZiwgJnRlbXBfbGVuKTsKKyAgICBGQUlMRUQocnZhbCwgImRlY29kZV9rZXljaGFuZ2UoKS4iKTsKKworICAgIEZBSUxFRCh0ZW1wX2xlbiAhPSBwcm9wZXJsZW5ndGgsCisgICAgICAgICAgICJkZWNvZGVkIG5ld2tleSBpcyBub3QgcHJvcGVyIGxlbmd0aCBmb3IgIgorICAgICAgICAgICAidGhpcyBoYXNoIHRyYW5zZm9ybS4iKTsKKworICAgIGJpbmFyeV90b19oZXgodGVtcF9idWYsIHRlbXBfbGVuLCAmcyk7CisgICAgZnByaW50ZihzdGRvdXQsICIjIGRlY29kZWQgbmV3a2V5OiAgJXNcbiIsIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworCisgICAgRkFJTEVEKG1lbWNtcChuZXdrZXlfYnVmLCB0ZW1wX2J1ZiwgdGVtcF9sZW4pLAorICAgICAgICAgICAibmV3a2V5IGRpZCBub3QgZGVjb2RlIHByb3Blcmx5LiIpOworCisKKyAgICBTVUNDRVNTKGhhc2huYW1lKTsKKworCisgICAgLyoKKyAgICAgKiBNdWx0aXBsZXggZGlmZmVyZW50IHRlc3QgY29tYmluYXRpb25zLgorICAgICAqCisgICAgICogRmlyc3QgY2xhdXNlIGlzIGZvciBUZXN0ICMyLCBzZWNvbmQgY2xhdXNlIGlzIGZvciAobGFzdCkgVGVzdCAjMy4KKyAgICAgKi8KKyAgICBpZiAoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgeworICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbCAody9ERVMgbGVuZ3RoIGt1bCdzKS4iOworICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFUykKKyAgICAgICAgICAgICsgQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVNfSVYpOworICAgICAgICBnb3RvIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOworCisgICAgfSBlbHNlIGlmIChwcm9wZXJsZW5ndGggPCBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpKSB7CisgICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sLiI7CisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7CisgICAgICAgIGdvdG8gdGVzdF9rZXljaGFuZ2VfYWdhaW47CisgICAgfQorCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9rZXljaGFuZ2UoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTUxYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKiBldGltZXRlc3QuYworICoKKyAqIEhFQURFUiBUZXN0aW5nIGVuZ2luZUlEIGhhc2hpbmcgYW5kIHRpbWluZworICoKKyAqIEV4cGVjdGVkIFNVQ0NFU1NlcyBmb3IgYWxsIHRlc3RzOiAgICAzCisgKgorICogUmV0dXJuczoKKyAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgorICoKKyAqIFRlc3Qgb2YgaGFzaF9lbmdpbmVJRCgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAgMAorICogVGVzdCBvZiBMQ0QgRW5naW5lIElEIGFuZCBUaW1lIExpc3QuICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6ICAzCisgKgorICogRklYICBEZXZpc2UgYSB0ZXN0IGZvciB7c2V0LGdldH1fZW5naW5ldGltZSguLi4sIEZBTFNFKS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKworc3RhdGljIHVfaW50ICAgIGR1bW15X2V0aW1lLCBkdW1teV9lYm9vdDsgICAgICAgLyogRm9yIElTRU5HSU5FS05PV04oKS4gKi8KKworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBjaGFyICAgICpvcHRhcmc7CitleHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKKworaW50ICAgICAgICAgICAgIHRlc3Rjb3VudD0wOworCisvKgorICogR2xvYmFscywgJmMuLi4KKyAqLworY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOworCisjZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstcyA8c2Vjb25kcz5dWy1hZUhdIgorI2RlZmluZSBPUFRJT05MSVNUCSJhZWhIczoiCisKK2ludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9oYXNoaW5kZXggPSAwLCBkb2V0aW1ldGVzdCA9IDA7CisKKyNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvaGFzaGluZGV4ICsgZG9ldGltZXRlc3QpCisKKworCisjZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCisjZGVmaW5lIE5MCQkiXG4iCisKKyNkZWZpbmUgT1VUUFVUKG8pCWZwcmludGYoc3Rkb3V0LCAiIyAlc1xuIiwgbyk7CisKKyNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAorewkJCQkJCQlcCisgICAgZnByaW50ZihzdGRvdXQsICIjIERvbmUgd2l0aCAlc1xuIiwgcyk7ICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBGQUlMRUQoZSwgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAibm90IG9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7CVwKKwkJZmFpbGNvdW50ICs9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7CVwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goc3Rkb3V0KTsgXAorfQorCisjZGVmaW5lIERFVEFJTElOVChzLCBpKSBcCisgICAgZnByaW50ZihzdGRvdXQsICIjICVzOiAlZFxuIiwgcywgaSk7CisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzLgorICovCitpbnQgICAgICAgICAgICAgc2xlZXB0aW1lID0gMjsKKworI2RlZmluZSBCTEFUICJhbGs7ZGpmO2FuIHJpdTthbGljZW5tcnVsO2Fpa25nbGtzYWpoZTEgYWRjZmFsY2VucmNvMiIKKworCisKKworLyoKKyAqIFByb3RvdHlwZXMuCisgKi8KK3ZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKKworaW50ICAgICAgICAgICAgIHRlc3RfZXRpbWUodm9pZCk7CitpbnQgICAgICAgICAgICAgdGVzdF9oYXNoaW5kZXgodm9pZCk7CisKKworCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7CisgICAgY2hhciAgICAgICAgICAgIGNoOworCisgICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOworCisgICAgLyoKKyAgICAgKiBQYXJzZS4KKyAgICAgKi8KKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgZG9ldGltZXRlc3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgZG9oYXNoaW5kZXggPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgc2xlZXB0aW1lID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgaWYgKHNsZWVwdGltZSA8IDApIHsKKyAgICAgICAgICAgICAgICB1c2FnZShzdGRlcnIpOworICAgICAgICAgICAgICAgIGV4aXQoMTAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJ2YWwgPSAwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKKyAgICAgICAgICAgIGV4aXQocnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBhcmdjIC09IDE7CisgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgICAgaWYgKG9wdGFyZykgeworICAgICAgICAgICAgYXJnYyAtPSAxOworICAgICAgICAgICAgYXJndiArPSAxOworICAgICAgICAgICAgb3B0YXJnID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBvcHRpbmQgPSAxOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KKworICAgIGlmICgoYXJnYyA+IDEpKSB7CisgICAgICAgIHVzYWdlKHN0ZG91dCk7CisgICAgICAgIGV4aXQoMTAwMCk7CisKKyAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgeworICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICB9CisKKyAgICBpbml0X3NubXAoInRlc3RpbmciKTsKKworICAgIC8qCisgICAgICogdGVzdCBzdHVmZi4KKyAgICAgKi8KKyAgICBydmFsID0gc2NfaW5pdCgpOworICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpIik7CisKKworICAgIGlmIChkb2hhc2hpbmRleCB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2hhc2hpbmRleCgpOworICAgIH0KKyAgICBpZiAoZG9ldGltZXRlc3QgfHwgZG9hbGx0ZXN0cykgeworICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9ldGltZSgpOworICAgIH0KKworCisgICAgZnByaW50ZihzdGRvdXQsICIxLi4lZFxuIiwgdGVzdGNvdW50KTsKKyAgICByZXR1cm4gMDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLworCisKKworCisKK3ZvaWQKK3VzYWdlKEZJTEUgKiBvZnApCit7CisgICAgZnByaW50ZihvZnAsCisgICAgICAgICAgICBVU0FHRQorICAgICAgICAgICAgIiIgTkwKKyAgICAgICAgICAgICIgICAgLWEJCQlBbGwgdGVzdHMuIiBOTAorICAgICAgICAgICAgIiAgICAtZQkJCUV4ZXJjaXNlIHRoZSBsaXN0IG9mIGVuZ2luZXRpbWVzLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1oCQkJSGVscC4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtSAkJCVRlc3QgaGFzaF9lbmdpbmVJRCgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1zIDxzZWNvbmRzPglTZWNvbmRzIHRvIHBhdXNlLiAgKERlZmF1bHQ6IDAuKSIKKyAgICAgICAgICAgIE5MIE5MLCBsb2NhbF9wcm9nbmFtZSk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KKworCisKKworI2lmZGVmIEVYQU1QTEUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2Rvc29tZXRoaW5nCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCB0ZW1wbGF0ZS4KKyAqLworaW50Cit0ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7CisKKyAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgorICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCisKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfaGFzaGluZGV4CisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCBoYXNoX2VuZ2luZUlEKCkuCisgKi8KK2ludAordGVzdF9oYXNoaW5kZXgodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgICovCisgICAgICAgICAgICAgICAgICAgIGZhaWxjb3VudCA9IDA7CisgICAgY29uc3QgdV9jaGFyICAgICAqczsKKworICAgIE9VVFBVVCgiVmlzdWFsIHNwb3QgY2hlY2sgb2YgaGFzaCBpbmRleCBvdXRwdXRzLiAgIgorICAgICAgICAgICAiKFN1Y2Nlc3Mgb3IgZmFpbHVyZSBub3Qgbm90ZWQuKSIpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgIiBBIjsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopICIgQkIiOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgIiBDQ0MiOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgIiBEREREIjsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopICIgRUVFRUUiOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgQkxBVDsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworCisgICAgT1VUUFVUKCJWaXN1YWwgc3BvdCBjaGVjayAtLSBET05FLiIpOworCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9oYXNoaW5kZXgoKSAqLworCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2V0aW1lCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKiBUZXN0IG9mIExDRCBFbmdpbmUgSUQgYW5kIFRpbWUgTGlzdC4JCisgKi8KK2ludAordGVzdF9ldGltZSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOworICAgIHVfaW50ICAgICAgICAgICBldGltZSwgZWJvb3Q7CisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyAgICAgKi8KKyAgICBPVVRQVVQoIlF1ZXJ5IG9mIGVtcHR5IGxpc3QsIHR3byBzZXQgYWN0aW9ucy4iKTsKKworCisgICAgcnZhbCA9IElTRU5HSU5FS05PV04oKGNvbnN0IHVfY2hhciAqKSAiQSIsIDEpOworICAgIGlmIChydmFsID09IFRSVUUpIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiUXVlcnkgb2YgZW1wdHkgbGlzdCByZXR1cm5lZCBUUlVFLiIpCisgICAgfQorCisKKyAgICBydmFsID0gc2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiQkIiLCAyLCAyLCAyMCwgVFJVRSk7CisgICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpIik7CisKKworICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJDQ0MiLCAzLCAzMSwgOTAxMjcsIFRSVUUpOworICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKSIpOworCisKKyAgICBTVUNDRVNTKCJDaGVjayBvZiBlbXB0eSBsaXN0LCBhbmQgdHdvIGFkZGl0aW9ucy4iKTsKKworCisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyAgICAgKi8KKyAgICBPVVRQVVQoIkFkZCBlbnRyaWVzIHVzaW5nIG1hY3JvcywgdGVzdCBmb3IgZXhpc3RlbmNlIHdpdGggbWFjcm9zLiIpOworCisKKyAgICBydmFsID0gRU5TVVJFX0VOR0lORV9SRUNPUkQoKGNvbnN0IHVfY2hhciAqKSAiRERERCIsIDQpOworICAgIEZBSUxFRChydmFsLCAiRU5TVVJFX0VOR0lORV9SRUNPUkQoKSIpOworCisKKyAgICBydmFsID0gTUFLRU5FV19FTkdJTkVfUkVDT1JEKChjb25zdCB1X2NoYXIgKikgIkVFRUVFIiwgNSk7CisgICAgaWYgKHJ2YWwgPT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIEZBSUxFRChydmFsLAorICAgICAgICAgICAgICAgIk1BS0VORVdfRU5HSU5FX1JFQ09SRCByZXR1cm5lZCBzdWNjZXNzIGZvciAiCisgICAgICAgICAgICAgICAibWlzc2luZyByZWNvcmQuIik7CisgICAgfQorCisKKyAgICBydmFsID0gTUFLRU5FV19FTkdJTkVfUkVDT1JEKChjb25zdCB1X2NoYXIgKikgIkJCIiwgMik7CisgICAgRkFJTEVEKHJ2YWwsICJNQUtFTkVXX0VOR0lORV9SRUNPUkQoKS4iKTsKKworCisgICAgU1VDQ0VTUworICAgICAgICAoIkFkZGVkIGVudHJpZXMgd2l0aCBtYWNyb3MsIHRlc3RlZCBmb3IgZXhpc3RlbmNlIHdpdGggbWFjcm9zLiIpOworCisKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorICAgICAqLworICAgIE9VVFBVVCgiRHVtcCB0aGUgbGlzdCBhbmQgdGhlbiBzbGVlcC4iKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQorICAgIGR1bXBfZXRpbWVsaXN0KCk7CisjZW5kaWYKKworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBTbGVlcGluZyBmb3IgJWQgc2Vjb25kJXMuLi4gIiwKKyAgICAgICAgICAgIHNsZWVwdGltZSwgKHNsZWVwdGltZSA9PSAxKSA/ICIiIDogInMiKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorICAgICAqLworICAgIE9VVFBVVAorICAgICAgICAoIlJldHJpZXZlIGRhdGEgZnJvbSByZWFsL3N0dWJiZWQgcmVjb3JkcywgdXBkYXRlIHJlYWwvc3R1YmJlZC4iKTsKKworCisKKyAgICBydmFsID0gZ2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiQkIiLCAyLCAmZWJvb3QsICZldGltZSwgVFJVRSk7CisgICAgRkFJTEVEKHJ2YWwsICJnZXRfZW5naW5ldGltZSgpLiIpOworCisgICAgZnByaW50ZihzdGRvdXQsICIjIEJCID0gPCVkLCVkPlxuIiwgZWJvb3QsIGV0aW1lKTsKKyAgICBpZiAoKGV0aW1lIDwgMjApIHx8IChlYm9vdCA8IDIpKSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICJnZXRfZW5naW5ldGltZSgpIHJldHVybmVkIGJhZCB2YWx1ZXMuICAoMSkiKTsKKyAgICB9CisKKyAgICBydmFsID0gZ2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiRERERCIsIDQsICZlYm9vdCwgJmV0aW1lLCBGQUxTRSk7CisgICAgRkFJTEVEKHJ2YWwsICJnZXRfZW5naW5ldGltZSgpLiIpOworCisgICAgZnByaW50ZihzdGRvdXQsICIjIEREREQgPSA8JWQsJWQ+XG4iLCBlYm9vdCwgZXRpbWUpOworICAgIGlmICgoZXRpbWUgPCBzbGVlcHRpbWUpIHx8IChlYm9vdCAhPSAwKSkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAiZ2V0X2VuZ2luZXRpbWUoKSByZXR1cm5lZCBiYWQgdmFsdWVzLiAgKDIpIik7CisgICAgfQorCisKKyAgICBydmFsID0gc2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiQ0NDIiwgMywgMjM0LCAxMDAwMCwgVFJVRSk7CisgICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpLiIpOworCisKKyAgICBydmFsID0gc2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiRUVFRUUiLCA1LCA5ODc2LCA1NTU1NSwgVFJVRSk7CisgICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpLiIpOworCisKKyAgICBTVUNDRVNTKCJSZXRyaWV2YWwgYW5kIHVwZGF0ZXMuIik7CisKKworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisgICAgICovCisgICAgT1VUUFVUKCJTbGVlcCBhZ2FpbiwgdGhlbiBkdW1wIHRoZSBsaXN0IG9uZSBsYXN0IHRpbWUuIik7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgU2xlZXBpbmcgZm9yICVkIHNlY29uZCVzLi4uXG4iLAorICAgICAgICAgICAgc2xlZXB0aW1lLCAoc2xlZXB0aW1lID09IDEpID8gIiIgOiAicyIpOworCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQorICAgIGR1bXBfZXRpbWVsaXN0KCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZXRpbWUoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhYzA0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG0KQEAgLTAsMCArMSwxNzIgQEAKK3BhY2thZ2UgTmV0U05NUFRlc3Q7CisKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlIHRlbXBkaXIpOwordXNlIElPOjpGaWxlOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBzdHJpY3Q7CisKK3N1YiBuZXcgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgKCRjbGFzcykgPSByZWYoJHR5cGUpIHx8ICR0eXBlOworICAgIG15ICRzZWxmID0ge307CisgICAgJSRzZWxmID0gQF87CisgICAgYmxlc3MoJHNlbGYsICRjbGFzcyk7CisgICAgJHNlbGYtPmluaXQoKTsKKyAgICByZXR1cm4gJHNlbGY7Cit9CisKK3N1YiBpbml0IHsKKyAgICBteSAoJHNlbGYpID0gQF87CisgICAgJHNlbGYtPnsnZGlyJ30gPSB0ZW1wZGlyKCk7CisgICAgcHJpbnQgIiMgdXNpbmcgdGVtcGRpciAkc2VsZi0+e2Rpcn1cbiI7CisKKyAgICBmb3JlYWNoIG15ICRzdWZmaXggKHF3KGNvbmYgcGlkIGxvZyBvdXQpKSB7CisJJHNlbGYtPnsic25tcGQuJHN1ZmZpeCJ9IHx8PSAkc2VsZi0+eydkaXInfSAuICIvc25tcGQuJHN1ZmZpeCI7CisgICAgfQorICAgICRzZWxmLT57J3NubXAuY29uZid9IHx8PSAkc2VsZi0+eydkaXInfSAuICIvc25tcC5jb25mIjsKKworICAgICRzZWxmLT57J2NvbmZkaXInfSB8fD0gJHNlbGYtPnsnZGlyJ307CisgICAgJHNlbGYtPnsncGVyc2lzdGVudGRpcid9IHx8PSAkc2VsZi0+eydkaXInfSAuICIvcGVyc2lzdGVudCI7Cit9CisKK3N1YiBjb25maWdfZmlsZSB7CisgICAgbXkgKCRzZWxmLCAkZmlsZSwgJHN0cmluZykgPSBAXzsKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGUgKCI+PiAkZmlsZSIpOworICAgICRmaC0+cHJpbnQoJHN0cmluZyk7CisgICAgaWYgKCRzdHJpbmcgIX4gL1xuJC8pIHsKKwkkZmgtPnByaW50KCJcbiIpOworICAgIH0KKyAgICAkZmgtPmNsb3NlKCk7Cit9CisKK3N1YiBjb25maWdfYWdlbnQgeworICAgIG15ICgkc2VsZiwgJHN0cmluZykgPSBAXzsKKyAgICAkc2VsZi0+Y29uZmlnX2ZpbGUoJHNlbGYtPnsnc25tcGQuY29uZid9LCAkc3RyaW5nKTsKK30KKworc3ViIGNvbmZpZ19hcHAgeworICAgIG15ICgkc2VsZiwgJHN0cmluZykgPSBAXzsKKyAgICAkc2VsZi0+Y29uZmlnX2ZpbGUoJHNlbGYtPnsnc25tcC5jb25mJ30sICRzdHJpbmcpOworfQorCitzdWIgcmVxdWlyZV9mZWF0dXJlIHsKKyAgICBteSAoJHNlbGYsICRmZWF0dXJlKSA9IEBfOworICAgIG15ICRzcmNkaXIgPSAkRU5WeydzcmNkaXInfSB8fCAiLi4iOworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZSgiJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIik7CisgICAgd2hpbGUgKDwkZmg+KSB7CisJaWYgKC8jZGVmaW5lICRmZWF0dXJlIDEvKSB7CisJICAgICRmaC0+Y2xvc2UoKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKyAgICBwcmludCAiMS4uMCAjIFNLSVAgbWlzc2luZyAkZmVhdHVyZVxuIjsKKyAgICBleGl0OworfQorCitzdWIgc3RhcnRfYWdlbnQgeworICAgIG15ICgkc2VsZiwgJGZsYWdzKSA9IEBfOworCisgICAgJGZsYWdzIHx8PSAkc2VsZi0+eydzbm1wZGZsYWdzJ307CisKKyAgICAkRU5WeydTTk1QQ09ORlBBVEgnfSA9ICRzZWxmLT57J2NvbmZkaXInfTsKKyAgICAkRU5WeydTTk1QX1BFUlNJU1RFTlRfRElSJ30gPSAkc2VsZi0+eydwZXJpc3RlbnRkaXInfTsKKworICAgIG15ICRjbWQgPSAic25tcGQgJGZsYWdzIC1yIC1VIC1wICRzZWxmLT57J3NubXBkLnBpZCd9IC1MZiAkc2VsZi0+eydzbm1wZC5sb2cnfSAkc2VsZi0+eydhZ2VudGFkZHJlc3MnfSA+ICRzZWxmLT57J3NubXBkLm91dCd9IDI+JjEiOworICAgIFN5c3RlbSgiJGNtZCAmIik7CisKKyAgICBzbGVlcCgxKTsKKworICAgIHJldHVybiAkc2VsZi0+d2FpdF9mb3IoJHNlbGYtPnsnc25tcGQubG9nJ30sICJORVQtU05NUCB2ZXJzaW9uIik7Cit9CisKK3N1YiBzdG9wX2FnZW50IHsKKyAgICBteSAoJHNlbGYpID0gQF87CisgICAgbXkgJHBpZGZpbGUgPSBuZXcgSU86OkZpbGUgIiRzZWxmLT57J3NubXBkLnBpZCd9IjsKKyAgICBteSAkcGlkID0gPCRwaWRmaWxlPjsKKyAgICBraWxsKCJURVJNIiwgJHBpZCk7CisgICAgJHNlbGYtPndhaXRfZm9yKCRzZWxmLT57J3NubXBkLmxvZyd9LCAnc2h1dHRpbmcgZG93bicpOworfQorCisjIHJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUKK3N1YiB3YWl0X2ZvciB7CisgICAgbXkgKCRzZWxmLCAkZmlsZW5hbWUsICRyZWdleHAsICRtYXh0aW1lKSA9IEBfOworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZSAiJGZpbGVuYW1lIjsKKyAgICByZXR1cm4gMCBpZiAoISRmaCk7CisKKyAgICAkbWF4dGltZSA9IDEwIGlmICghZGVmaW5lZCgkbWF4dGltZSkpOworCisgICAgbXkgJHRpbWVjb3VudCA9IDA7CisgICAgIyBwcmludCAiIyByZWFkaW5nIGZyb206ICRmaWxlbmFtZVxuIjsKKyAgICB3aGlsZSAoMSkgeworCW15ICRsaW5lID0gPCRmaD47CisJIyBwcmludCAiIyBsaW5lOiAkbGluZVxuIjsKKwlpZiAoJGxpbmUgZXEgIiIpIHsKKwkgICAgaWYgKCR0aW1lY291bnQgPT0gJG1heHRpbWUpIHsKKwkJcmV0dXJuIDA7CisJICAgIH0KKwkgICAgc2xlZXAoMSk7CisJICAgIHByaW50ICIjIHNsZWVwaW5nIC4uLlxuIjsKKwkgICAgJGZoLT5jbGVhcmVycigpOworCSAgICAkdGltZWNvdW50Kys7CisJfSBlbHNlIHsKKwkgICAgY2hvbXAoJGxpbmUpOworCSAgICBpZiAoJGxpbmUgPX4gLyRyZWdleHAvKSB7CisJCXJldHVybiAxOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIERlYnVnIHsKKyAgICBwcmludCAgIiMgIiAuIGpvaW4oIiAiLEBfKTsKK30KKworc3ViIFN5c3RlbSB7CisgICAgbXkgKCRjbWQpID0gQF87CisgICAgRGVidWcoInJ1bm5pbmc6ICIsICRjbWQsICJcbiIpOworICAgIHN5c3RlbSgkY21kKTsKK30KKworc3ViIERJRSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAkc2VsZi0+c3RvcF9hZ2VudCgpOworICAgIGRpZSBAXzsKK30KKworMTsKKworPXBvZAorCis9aGVhZDEgTkFNRQorCitOZXRTTk1QVGVzdCAtIHNpbXBsZSB0ZXN0aW5nIG1vZHVsZSBmb3IgdGVzdGluZyBwZXJsIHRlc3RzCisKKz1oZWFkMSBVU0FHRQorCit1c2UgTmV0U05NUFRlc3Q7Cit1c2UgVGVzdDsKK3VzZSBTTk1QOworCitteSAkZGVzdGluYXRpb24gPSAidWRwOmxvY2FsaG9zdDo5ODc2IjsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3QoYWdlbnRhZGRyZXNzID0+ICRkZXN0aW5hdGlvbik7CisKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIlNPTUVfSUZERUZfRlJPTV9ORVRfU05NUF9DT05GSUdfSCIpOworCiskdGVzdC0+Y29uZmlnX2FnZW50KCJyb2NvbW11bml0eSBwdWJsaWMiKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoInN5c2NvbnRhY3QgdGVzdHZhbHVlIik7CiskdGVzdC0+RElFKCJmYWlsZWQgdG8gc3RhcnQgdGhlIGFnZW50IikgaWYgKCEkdGVzdC0+c3RhcnRfYWdlbnQoKSk7CisKK215ICRzZXNzaW9uID0gbmV3IFNOTVA6OlNlc3Npb24oRGVzdEhvc3QgPT4gJGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+ICcyYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW11bml0eSA9PiAncHVibGljJyk7CisKK215ICR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0NvbnRhY3QuMCcpOworcGxhbih0ZXN0cyA9PiAxKTsKK29rKCR2YWx1ZSwgJ3Rlc3R2YWx1ZScpOworCiskdGVzdC0+c3RvcF9hZ2VudCgpOworCis9Y3V0CisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX2J1aWxkIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTVhMzVhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX2J1aWxkCkBAIC0wLDAgKzEsNDYgQEAKKyMhL2Jpbi9zaAorCisjIGJ1aWxkIHRoZSBDIHRlc3QgZmlsZSAuLi4KKworcm0gLWYgIiQyLmMiCitjYXQgPj4iJDIuYyIgPDxFT0YKKy8qIG5ldC1zbm1wIHN0YW5kYXJkIGhlYWRlcnMgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qIHRlc3Rpbmcgc3BlY2lmaWMgaGVhZGVyICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmg+CisKKy8qIHN0YW5kYXJkIGhlYWRlcnMgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKK0VPRgorZWNobyA+PiIkMi5jIiAiI2xpbmUgMSBcIiQxXCIiCitjYXQgPj4iJDIuYyIgIiQxIgorY2F0ID4+IiQyLmMiIDw8RU9GCisKKyAgIGlmIChfX2RpZF9wbGFuID09IDApIHsKKyAgICAgICBQTEFOKF9fdGVzdF9jb3VudGVyKTsKKyAgIH0KKworICAgcmV0dXJuKDApOworfQorCitFT0YKKworIyAuLi4gYW5kIGNvbXBpbGUgaXQuCiske2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1saW5rIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1idWlsZC1jb21tYW5kYCAtSSRidWlsZGRpci9pbmNsdWRlIC1JJHNyY2Rpci9pbmNsdWRlIC1vICQyICQyLmMgJHtidWlsZGRpcn0vc25tcGxpYi9saWJuZXRzbm1wLmxhICR7YnVpbGRkaXJ9L2FnZW50L2xpYm5ldHNubXBhZ2VudC5sYSBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tZXh0ZXJuYWwtbGlic2AKK2VjaG8gJDIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX3J1biBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX3J1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGY1NGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfcnVuCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCiske0RZTkFNSUNfQU5BTFlaRVJ9ICR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWV4ZWN1dGUgIiQxIiAyPiYxIFwKK3wgXAoraWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiA9ICJ4eWVzIiBdOyB0aGVuCisgIHRlZSAiL3RtcC9zbm1wLXVuaXQtdGVzdC1gYmFzZW5hbWUgJDFgIgorZWxzZQorICBjYXQKK2ZpCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGMwMzhjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCiske2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1saW5rIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1idWlsZC1jb21tYW5kYCAtSSRidWlsZGRpci9pbmNsdWRlIC1JJHNyY2Rpci9pbmNsdWRlIC1vICQyICQxICR7YnVpbGRkaXJ9L3NubXBsaWIvbGlibmV0c25tcC5sYSBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tZXh0ZXJuYWwtbGlic2AKK2VjaG8gJDIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9ydW4gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZjU0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfcnVuCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCiske0RZTkFNSUNfQU5BTFlaRVJ9ICR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWV4ZWN1dGUgIiQxIiAyPiYxIFwKK3wgXAoraWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiA9ICJ4eWVzIiBdOyB0aGVuCisgIHRlZSAiL3RtcC9zbm1wLXVuaXQtdGVzdC1gYmFzZW5hbWUgJDFgIgorZWxzZQorICBjYXQKK2ZpCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjk0YmViZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZApAQCAtMCwwICsxLDc0IEBACisjIS9iaW4vc2gKKworIyBidWlsZCB0aGUgQyB0ZXN0IGZpbGUgLi4uCisKK3NjcmlwdG5hbWU9IiQwIgoraWYgWyAiJHtzY3JpcHRuYW1lIy99IiA9ICIke3NjcmlwdG5hbWV9IiBdOyB0aGVuCisgICAgc2NyaXB0bmFtZT0iJHtQV0R9LyR7c2NyaXB0bmFtZX0iCitmaQorc2NyaXB0ZGlyPSIkKGRpcm5hbWUgJHtzY3JpcHRuYW1lfSkiCitzcmNkaXI9IiQoZGlybmFtZSAkKGRpcm5hbWUgJChkaXJuYW1lICRzY3JpcHRkaXIpKSkiCisKK3JtIC1mICIkMi5jIgorY2F0ID4+IiQyLmMiIDw8RU9GCisvKiBuZXQtc25tcCBzdGFuZGFyZCBoZWFkZXJzICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oPgorCisvKiB0ZXN0aW5nIHNwZWNpZmljIGhlYWRlciAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oPgorCisvKiBzdGFuZGFyZCBoZWFkZXJzICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9JTkVUX1BUT04KKyNpbmNsdWRlICJzbm1wbGliL2luZXRfcHRvbi5oIgorI2VuZGlmCisjaWZuZGVmIEhBVkVfSU5FVF9OVE9QCisjaW5jbHVkZSAic25tcGxpYi9pbmV0X250b3AuaCIKKyNlbmRpZgorCisjZGVmaW5lIEFCU19TUkNESVIgIiR7c3JjZGlyfSIKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworRU9GCitlY2hvID4+IiQyLmMiICIjbGluZSAxIFwiJDFcIiIKK2NhdCA+PiIkMi5jIiAiJDEiCitjYXQgPj4iJDIuYyIgPDxFT0YKKworICAgaWYgKF9fZGlkX3BsYW4gPT0gMCkgeworICAgICAgIFBMQU4oX190ZXN0X2NvdW50ZXIpOworICAgfQorCisgICByZXR1cm4oMCk7Cit9CisKK0VPRgorCisjIC4uLiBhbmQgY29tcGlsZSBpdC4KKyR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWxpbmsgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWJ1aWxkLWNvbW1hbmRgIC1JJGJ1aWxkZGlyL2luY2x1ZGUgLUkkc3JjZGlyIC1JJHNyY2Rpci9pbmNsdWRlIC1vICQyICQyLmMgJHtidWlsZGRpcn0vc25tcGxpYi9saWJuZXRzbm1wLmxhIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1leHRlcm5hbC1saWJzYAorZWNobyAkMgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX3J1biBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9ydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODRmNTRlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9ydW4KQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyR7RFlOQU1JQ19BTkFMWVpFUn0gJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSAiJDEiIDI+JjEgXAorfCBcCitpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiID0gInh5ZXMiIF07IHRoZW4KKyAgdGVlICIvdG1wL3NubXAtdW5pdC10ZXN0LWBiYXNlbmFtZSAkMWAiCitlbHNlCisgIGNhdAorZmkKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwYThhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoCkBAIC0wLDAgKzEsMjY0IEBACisjISAvYmluL3NoIC1mCisKKyMKKyMgVmFyaWFibGVzOiAgKCogPSBleHBvcnRlZCkKKyMgICpTTk1QX1RNUERJUjogIAkgIHBsYWNlIHRvIHB1dCBmaWxlcyB1c2VkIGluIHRlc3RpbmcuCisjICAgU05NUF9URVNURElSOiAJICB3aGVyZSB0aGUgdGVzdCBzY3JpcHRzIGFyZSBrZXB0LgorIyAgKlNOTVBfUEVSU0lTVEVOVF9GSUxFOiB3aGVyZSB0byBzdG9yZSB0aGUgYWdlbnQncyBwZXJzaXN0ZW50IGluZm9ybWF0aW9uCisjICAgICAgICAgICAgICAgICAgICAgICAgIChYWFg6IHRoaXMgc2hvdWxkIGJlIHNwZWNpZmljIHRvIGp1c3QgdGhlIGFnZW50KQorCisjIE1pbkdXL01TWVMgb25seTogdHJhbnNsYXRlIGFuIE1TWVMgcGF0aCBiYWNrIGludG8gYSBET1MgcGF0aCBzdWNoIHRoYXQgc25tcGQKKyMgYW5kIHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMgY2FuIHVuZGVyc3RhbmQgaXQuIE9uZSBvZiB0aGUgZmVhdHVyZXMgb2YgTVNZUworIyBpcyB0aGF0IGlmIGEgUE9TSVgtc3R5bGUgcGF0aCBpcyBwYXNzZWQgYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gYW4KKyMgZXhlY3V0YWJsZSB0aGF0IE1TWVMgdHJhbnNsYXRlcyB0aGF0IHBhdGggdG8gYSBET1Mtc3R5bGUgcGF0aCBiZWZvcmUKKyMgc3RhcnRpbmcgdGhlIGV4ZWN1dGFibGUuIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSBvZiBNU1lTIHRoYXQgbWFrZXMgaXQKKyMgcG9zc2libGUgdG8gcnVuIHNoZWxsIHNjcmlwdHMgdW5tb2RpZmllZCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0byB1c2UKKyMgZXhlY3V0YWJsZXMgdGhhdCBhY2NlcHQgRE9TLXN0eWxlIHBhdGhzLiBUaGVyZSBpcyBubyBzdXBwb3J0IGhvd2V2ZXIgZm9yCisjIGF1dG9tYXRpY2FsIHRyYW5zbGF0aW9uIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGNvbnRhaW4gcGF0aHMuIEhlbmNlCisjIHRoaXMgZnVuY3Rpb24gdGhhdCB0cmFuc2xhdGVzIHBhdGhzIGV4cGxpY2l0bHkuCit0cmFuc2xhdGVfcGF0aCgpIHsKKyAgaWYgWyAiJE9TVFlQRSIgPSBtc3lzIF07IHRoZW4KKyAgICBsb2NhbCB0PWBzZXQgXAorICAgICAgICAgICAgIHwgc2VkIC1uIC1lICJzL14kMT0nXCguKlwpJyQvJHtTTk1QX0VOVl9TRVBBUkFUT1J9XDEvcCIgXAorICAgICAgICAgICAgICAgICAgICAgIC1lICJzL14kMT1cKC4qXCkkLyR7U05NUF9FTlZfU0VQQVJBVE9SfVwxL3AiIFwKKyAgICAgICAgICAgICB8IHNlZCAtZSAic3wke1NOTVBfRU5WX1NFUEFSQVRPUn0vYy98JHtTTk1QX0VOVl9TRVBBUkFUT1J9YzovfGciIFwKKyAgICAgICAgICAgICAgICAgICAtZSAic3wke1NOTVBfRU5WX1NFUEFSQVRPUn0vdG1wL3wke1NOTVBfRU5WX1NFUEFSQVRPUn1jOi93aW5kb3dzL3RlbXAvfGciIFwKKyAgICAgICAgICAgICB8IHNlZCAtZSAicy9eJHtTTk1QX0VOVl9TRVBBUkFUT1J9Ly8iIFwKKyAgICAgICAgICAgIGAKKyAgICBldmFsICIkMT0nJHQnIgorICBmaQorfQorCisjCisjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQorIworaWYgWyAieCRURVNUQ09ORl9TSF9FVkFMRUQiICE9ICJ4eWVzIiBdOyB0aGVuCisgICAgVEVTVENPTkZfU0hfRVZBTEVEPXllcworCisjCisjIHNldCBjcHUgYW5kIG1lbW9yeSBsaW1pdHMgdG8gcHJldmVudCBtYWpvciBkYW1hZ2UKKyMKKyMgZGVmYXVsdHM6IDFoIENQVSwgNTAwTUIgVk1FTQorIworWyAieCRTTk1QX0xJTUlUX1ZNRU0iID0gIngiIF0gJiYgU05NUF9MSU1JVF9WTUVNPTUxMjAwMAorWyAieCRTTk1QX0xJTUlUX0NQVSIgPSAieCIgXSAmJiBTTk1QX0xJTUlUX0NQVT0zNjAwCisjIHVsaW1pdCB3aWxsIGZhaWwgaWYgZXhpc3RpbmcgbGltaXQgaXMgbG93ZXIgLS0gaWdub3JlIGJlY2F1c2UgaXQncyBvawordWxpbWl0IC1TIC10ICRTTk1QX0xJTUlUX0NQVSAyPi9kZXYvbnVsbAorIyBub3QgYWxsIHNoLWFsaWtlcyBzdXBwb3J0ICJ1bGltaXQgLXYiIC0tIHBsYXkgc2FmZQorWyAieCRCQVNIX1ZFUlNJT04iICE9ICJ4IiBdICYmIHVsaW1pdCAtUyAtdiAkU05NUF9MSU1JVF9WTUVNIDI+L2Rldi9udWxsCisKKyMKKyMgU2V0IHVwIGFuIE5MIHN1cHByZXNzaW5nIGVjaG8gY29tbWFuZAorIworY2FzZSAiYGVjaG8gJ3hcYydgIiBpbgorICAneFxjJykKKyAgICBFQ0hPKCkgeyBlY2hvIC1uICQqOyB9CisgICAgOzsKKyAgeCkKKyAgICBFQ0hPKCkgeyBlY2hvICQqXFxjOyB9CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJJIGRvbid0IHVuZGVyc3RhbmQgeW91ciBlY2hvIGNvbW1hbmQgLi4uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisjCisjIGhvdyB2ZXJib3NlIHNob3VsZCB3ZSBiZSAoMCBvciAxKQorIworaWYgWyAieCRTTk1QX1ZFUkJPU0UiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1ZFUkJPU0U9MAorICAgIGV4cG9ydCBTTk1QX1ZFUkJPU0UKK2ZpCisKK1NOTVBfRU5WX1NFUEFSQVRPUj0iYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWVudi1zZXBhcmF0b3JgIgorCitpZiBbICJ4JE1JQkRJUlMiID0gIngiIF07IHRoZW4KKyAgaWYgWyAieCRTTk1QX1BSRUZFUl9ORUFSX01JQlMiID0gIngxIiBdOyB0aGVuCisgICAgTUlCRElSUz0ke3NyY2Rpcn0vbWlicworICAgIGV4cG9ydCBNSUJESVJTCisgIGZpCitmaQorCisjIFNldCB1cCB0aGUgcGF0aCB0byB0aGUgcHJvZ3JhbXMgd2Ugd2FudCB0byB1c2UuCitpZiBbICJ4JFNOTVBfUEFUSCIgPSAieCIgXTsgdGhlbgorICAgIFBBVEg9JHtidWlsZGRpcn0vYWdlbnQ6JHtidWlsZGRpcn0vYXBwczokUEFUSAorICAgIGV4cG9ydCBQQVRICisgICAgU05NUF9QQVRIPXllcworICAgIGV4cG9ydCBTTk1QX1BBVEgKK2ZpCisKKyMgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGZ1bGZpbGwgYWxsIGxpYnJhcnkgZGVwZW5kZW5jaWVzCitfbGRfbGliX3BhdGg9IiR7U05NUF9VUERJUn0vc25tcGxpYi8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50Ly5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvaGVscGVycy8ubGlicyIKK2Nhc2UgYHVuYW1lYCBpbgorICBDWUdXSU4qKQorICAgIFBBVEg9IiR7X2xkX2xpYl9wYXRofTokUEFUSCIKKyAgICBleHBvcnQgUEFUSAorICAgIDs7CisgIERhcndpbiopCisgICAgaWYgWyAieCREWUxEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KKyAgICAgIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtEWUxEX0xJQlJBUllfUEFUSH0iCisgICAgZWxzZQorICAgICAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKKyAgICBmaQorICAgIGV4cG9ydCBEWUxEX0xJQlJBUllfUEFUSAorICAgIDs7CisgIEhQLVVYKikKKyAgICBpZiBbICJ4JFNITElCX1BBVEgiICE9ICJ4IiBdOyB0aGVuCisgICAgICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH06JHtTSExJQl9QQVRIfSIKKyAgICBlbHNlCisgICAgICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH0iCisgICAgZmkKKyAgICBleHBvcnQgU0hMSUJfUEFUSAorICAgIDs7CisgICopCisgICAgaWYgWyAieCRMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCisgICAgICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0xEX0xJQlJBUllfUEFUSH0iCisgICAgZWxzZQorICAgICAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCisgICAgZmkKKyAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgOzsKK2VzYWMKKworIyBTZXQgdXAgdGVtcG9yYXJ5IGRpcmVjdG9yeQoraWYgWyAieCRTTk1QX0hFQURFUk9OTFkiICE9ICJ4eWVzIiBdOyB0aGVuCisgIGlmIFsgIngkU05NUF9UTVBESVIiID0gIngiIF07IHRoZW4KKyAgICBpZiBbICJ4JHRlc3RudW0iID0gIngiIF0gOyB0aGVuCisgICAgICAgIHRlc3RudW09MAorICAgIGZpCisgICAgU05NUF9UTVBESVI9Ii90bXAvc25tcC10ZXN0LSR0ZXN0bnVtLSQkIgorICAgIHRyYW5zbGF0ZV9wYXRoIFNOTVBfVE1QRElSCisgICAgZXhwb3J0IFNOTVBfVE1QRElSCisgICAgaWYgWyAtZCAkU05NUF9UTVBESVIgXTsgdGhlbgorCWVjaG8gIiQwOiBFUlJPUjogJFNOTVBfVE1QRElSIGFscmVhZHkgZXhpc3RlZC4iCisJZXhpdCAxOworICAgIGZpCisgIGZpCisgIGlmIFsgISAtZCAkU05NUF9UTVBESVIgXTsgdGhlbgorICAgIG1rZGlyIC1wICRTTk1QX1RNUERJUgorICAgIGNobW9kIDA3MDAgJFNOTVBfVE1QRElSCisgIGZpCisgIGlmIFsgIngkU05NUF9UTVBfUEVSU0lTVEVOVERJUiIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfVE1QX1BFUlNJU1RFTlRESVI9JFNOTVBfVE1QRElSL3BlcnNpc3QKKyAgICBleHBvcnQgU05NUF9UTVBfUEVSU0lTVEVOVERJUgorICBmaQorICBpZiBbICEgLWQgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIgXTsgdGhlbgorICAgIG1rZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCisgICAgY2htb2QgMDcwMCAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgorICBmaQorZmkKKworaWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9TQVZFX1RNUERJUj0ibm8iCisgICAgZXhwb3J0IFNOTVBfU0FWRV9UTVBESVIKK2ZpCisKK1NOTVBfSUdOT1JFX1dJTkRPV1NfUkVHSVNUUlk9InRydWUiCitleHBvcnQgU05NUF9JR05PUkVfV0lORE9XU19SRUdJU1RSWQorU05NUF9QRVJMUFJPRz0iYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLXBlcmxwcm9nYCIKK1NOTVBfVEVTVERJUj0iJFNOTVBfQkFTRURJUi90ZXN0cyIKK1NOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5jb25mIgorU05NUFRSQVBEX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLmNvbmYiCitTTk1QQVBQX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvc25tcC5jb25mIgorQUdFTlRYX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYWdlbnR4LmNvbmYiCitTTk1QX1NOTVBUUkFQRF9MT0dfRklMRT0iJFNOTVBfVE1QRElSL3NubXB0cmFwZC5sb2ciCitTTk1QX1NOTVBUUkFQRF9QSURfRklMRT0iJFNOTVBfVE1QRElSL3NubXB0cmFwZC5waWQiCitTTk1QX1NOTVBEX1BJRF9GSUxFPSIkU05NUF9UTVBESVIvc25tcGQucGlkIgorU05NUF9TTk1QRF9MT0dfRklMRT0iJFNOTVBfVE1QRElSL3NubXBkLmxvZyIKK1NOTVBfQUdFTlRYX1BJRF9GSUxFPSIkU05NUF9UTVBESVIvYWdlbnR4LnBpZCIKK1NOTVBfQUdFTlRYX0xPR19GSUxFPSIkU05NUF9UTVBESVIvYWdlbnR4LmxvZyIKK1NOTVBDT05GUEFUSD0iJHtTTk1QX1RNUERJUn0ke1NOTVBfRU5WX1NFUEFSQVRPUn0ke1NOTVBfVE1QX1BFUlNJU1RFTlRESVJ9IgordHJhbnNsYXRlX3BhdGggU05NUENPTkZQQVRICitleHBvcnQgU05NUENPTkZQQVRICitTTk1QX1BFUlNJU1RFTlRfRElSPSRTTk1QX1RNUF9QRVJTSVNURU5URElSCit0cmFuc2xhdGVfcGF0aCBTTk1QX1BFUlNJU1RFTlRfRElSCitleHBvcnQgU05NUF9QRVJTSVNURU5UX0RJUgorI1NOTVBfUEVSU0lTVEVOVF9GSUxFPSIkU05NUF9UTVBfUEVSU0lTVEVOVERJUi9wZXJzaXN0ZW50LXN0b3JlLmNvbmYiCisjZXhwb3J0IFNOTVBfUEVSU0lTVEVOVF9GSUxFCisKKyMjIFNldHVwIGRlZmF1bHQgZmxhZ3MgYW5kIHBvcnRzIGlmZiBub3QgZG9uZQoraWYgWyAieCRTTk1QX0ZMQUdTIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9GTEFHUz0iLWQiCitmaQoraWYgdGVzdCAteCAvYmluL25ldHN0YXQgOyB0aGVuCisgICAgTkVUU1RBVD0vYmluL25ldHN0YXQKK2VsaWYgdGVzdCAteCAvdXNyL2Jpbi9uZXRzdGF0IDsgdGhlbgorICAgIE5FVFNUQVQ9L3Vzci9iaW4vbmV0c3RhdAorZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9uZXRzdGF0IDsgdGhlbgorICAgICMgZS5nLiBUcnU2NCBVbml4CisgICAgTkVUU1RBVD0vdXNyL3NiaW4vbmV0c3RhdAorZWxpZiB0ZXN0IC14IC91c3IvZXRjL25ldHN0YXQgOyB0aGVuCisgICAgIyBlLmcuIElSSVgKKyAgICBORVRTVEFUPS91c3IvZXRjL25ldHN0YXQKK2VsaWYgdGVzdCAteCAvY3lnZHJpdmUvYy93aW5kb3dzL3N5c3RlbTMyL25ldHN0YXQgOyB0aGVuCisgICAgIyBDeWd3aW4KKyAgICBORVRTVEFUPS9jeWdkcml2ZS9jL3dpbmRvd3Mvc3lzdGVtMzIvbmV0c3RhdAorZWxpZiB0ZXN0IC14IC9jL1dpbmRvd3MvU3lzdGVtMzIvbmV0c3RhdCA7IHRoZW4KKyAgICAjIE1pbkdXICsgTVNZUworICAgIE5FVFNUQVQ9L2MvV2luZG93cy9TeXN0ZW0zMi9uZXRzdGF0CitlbHNlCisgICAgTkVUU1RBVD0iIgorZmkKKworaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgIyBPYnRhaW4gdGhlIE1TWVMgaW5zdGFsbGF0aW9uIHBhdGggZnJvbSB0aGUgIUM6IGVudmlyb25tZW50IHZhcmlhYmxlLAorICAgICMgcmVtb3ZlIHN1cnJvdW5kaW5nIHNpbmdsZSBxdW90ZXMgYW5kIGNvbnZlcnQgYmFja3NsYXNoZXMgaW50byBmb3J3YXJkCisgICAgIyBzbGFzaGVzLgorICAgIE1TWVNfUEFUSD0iJChzZXQgXAorICAgICAgICAgICAgICAgICB8IHNlZCAtbiAnc3xeXCFDOj0nIiciJ1woLipcKSciJyInJHxcMXxwJyB8IHNlZCAnc3xcXHwvfGcnKSIKKyAgICBNU1lTX1NIPSIkTVNZU19QQVRIL3NoLmV4ZSIKK2ZpCisKK1BST0JFX0ZPUl9QT1JUKCkgeworICAgIEJBU0VfUE9SVD0kMQorICAgIE1BWF9SRVRSSUVTPTEwCisgICAgaWYgdGVzdCAteCAiJE5FVFNUQVQiIDsgdGhlbgorICAgICAgICBpZiB0ZXN0IC16ICIkUkFORE9NIjsgdGhlbgorICAgICAgICAgICAgUkFORE9NPTIKKyAgICAgICAgZmkKKyAgICAgICAgd2hpbGUgOgorICAgICAgICBkbworICAgICAgICAgICAgQkFTRV9QT1JUPWBleHByICRCQVNFX1BPUlQgKyBcKCAkUkFORE9NICUgMTAwIFwpYAorICAgICAgICAgICAgSU5fVVNFPWAkTkVUU1RBVCAtYSAtbiAyPi9kZXYvbnVsbCB8IGdyZXAgIltcLjpdJEJBU0VfUE9SVCAiYAorICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiJEJBU0VfUE9SVCIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIE1BWF9SRVRSSUVTPWBleHByICRNQVhfUkVUUklFUyAtIDFgCisgICAgICAgICAgICBpZiBbICRNQVhfUkVUUklFUyAtZXEgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kIGF2YWlsYWJsZSBwb3J0LiIgPiYyCisgICAgICAgICAgICAgICAgZWNobyAiTk9QT1JUIgorICAgICAgICAgICAgICAgIGV4aXQgMjU1CisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZWxzZQorCWVjaG8gIkVSUk9SOiBDYW5ub3QgcHJvYmUgZm9yIHBvcnQgLSBuZXRzdGF0IG5vdCBmb3VuZC4iID4mMgorCWVjaG8gIk5PUE9SVCIKKwlleGl0IDI1NQorICAgIGZpCit9CisKK2lmIFsgIngkU05NUF9TTk1QRF9QT1JUIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9TTk1QRF9QT1JUPWBQUk9CRV9GT1JfUE9SVCA4NzY1YAorZmkKK2lmIFsgIngkU05NUF9TTk1QVFJBUERfUE9SVCIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfU05NUFRSQVBEX1BPUlQ9YFBST0JFX0ZPUl9QT1JUIDU2NzhgCitmaQoraWYgWyAieCRTTk1QX0FHRU5UWF9QT1JUIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9BR0VOVFhfUE9SVD1gUFJPQkVfRk9SX1BPUlQgNzY3NmAKK2ZpCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gIngiIF07dGhlbgorCVNOTVBfVFJBTlNQT1JUX1NQRUM9InVkcCIKK2ZpCitpZiBbICJ4JFNOTVBfVEVTVF9ERVNUIiA9ICJ4IiAtYSAkU05NUF9UUkFOU1BPUlRfU1BFQyAhPSAidW5peCIgXTt0aGVuCisJU05NUF9URVNUX0RFU1Q9IjEyNy4wLjAuMToiCitmaQorZXhwb3J0IFNOTVBfRkxBR1MgU05NUF9TTk1QRF9QT1JUIFNOTVBfU05NUFRSQVBEX1BPUlQKKworIyBNYWtlIHN1cmUgdGhlIGFnZW50IGRvZXNuJ3QgcGFyc2UgYW55IGNvbmZpZyBmaWxlIGJ1dCB3aGF0IHdlIGdpdmUgaXQuICAKKyMgdGhpcyBpcyBtYWlubHkgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgYnJva2VuIGFnZW50IHRoYXQgZG9lc24ndAorIyBwcm9wZXJseSBoYW5kbGUgY29tYmluYXRpb25zIG9mIC1jIGFuZCAtQy4gIChzaW5jZSBJJ3ZlIGJyb2tlIGl0IGJlZm9yZSkuCisjU05NUENPTkZQQVRIPSIkU05NUF9UTVBESVIvZG9lcy1ub3QtZXhpc3QiCisjZXhwb3J0IFNOTVBDT05GUEFUSAorCitmaSAjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4ZWRjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKQEAgLTAsMCArMSw3MDggQEAKKyMKKyMgZXZhbF90b29scy5zaAorIworIyBPdXRwdXQgZnVuY3Rpb25zIGZvciBzY3JpcHQgdGVzdHMuICBTb3VyY2UgdGhpcyBmcm9tIG90aGVyIHRlc3Qgc2NyaXB0cworIyB0byBlc3RhYmxpc2ggYSBzdGFuZGFyZGl6ZWQgcmVwZXJ0b3J5IG9mIHRlc3QgZnVuY3Rpb25zLgorIworIworIyBFeGNlcHQgd2hlcmUgbm90ZWQsIGFsbCBmdW5jdGlvbnMgcmV0dXJuOgorIwkwCU9uIHN1Y2Nlc3MsCShCb3VybmUgU2hlbGwncyBgYHRydWUnJykKKyMJbm9uLTAJT3RoZXJ3aXNlLgorIworIyBJbnB1dCBhcmd1bWVudHMgdG8gZWFjaCBmdW5jdGlvbiBhcmUgZG9jdW1lbnRlZCB3aXRoIGVhY2ggZnVuY3Rpb24uCisjCisjCisjIFhYWCAgU3VnZ2VzdGlvbnM6CisjCURFQlVHIE9OfE9GRgorIwlkdW1wIENBUFRVUkUgb3V0cHV0IHRvIHN0ZG91dCBhcyB3ZWxsIGFzIHRvIGp1bmtvdXRwdXRmaWxlLgorIworCisjCisjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQorIworaWYgWyAieCRFVkFMX1RPT0xTX1NIX0VWQUxFRCIgIT0gInh5ZXMiIF07IHRoZW4KKyAgICBFVkFMX1RPT0xTX1NIX0VWQUxFRD15ZXMKKworIworIyBWYXJpYWJsZXMgdXNlZCBpbiBnbG9iYWwgZW52aXJvbm1lbnQgb2YgY2FsbGluZyBzY3JpcHQuCisjCitmYWlsY291bnQ9MAordGVzdG51bT0wCitlcnJudW09MAoranVua291dHB1dGZpbGViYXNlPSIkU05NUF9UTVBESVIvb3V0cHV0LWBiYXNlbmFtZSAkMGAkJCIKK2p1bmtvdXRwdXRmaWxlPSRqdW5rb3V0cHV0ZmlsZWJhc2UKK291dHB1dGNvdW50PTAKK3NlcGFyYXRvcj0iLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSIKK2lmIFsgLXogIiRPS19UT19TQVZFX1JFU1VMVCIgXSA7IHRoZW4KK09LX1RPX1NBVkVfUkVTVUxUPTEKK2V4cG9ydCBPS19UT19TQVZFX1JFU1VMVAorZmkKKworaWYgWyBgdW5hbWUgLXNgID0gU3VuT1MgXQordGhlbiBQQVRIPS91c3IveHBnNC9iaW46JFBBVEgKK2ZpCisKKyMKKyMgSEVBREVSOiByZXR1cm5zIGEgc2luZ2xlIGxpbmUgd2hlbiBTTk1QX0hFQURFUk9OTFkgbW9kZSBhbmQgZXhpdHMuCisjCitIRUFERVIoKSB7CisgICAgaWYgWyAieCRTTk1QX0hFQURFUk9OTFkiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIGVjaG8gdGVzdCAkKgorCWV4aXQgMDsKKyAgICBlbHNlCisJeyBlY2hvICIjIHRlc3RpbmcgJCoiOyBlY2hvICIiOyB9ID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisgICAgZmkKK30KKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworT1VUUFVUKCkgewkjIDxhbnlfYXJndW1lbnRzPgorCWNhdCA8PEdST05LCisKKworJCoKKworCitHUk9OSworfQorCitDQU5fVVNMRUVQKCkgeworICAgaWYgWyAiJFNOTVBfQ0FOX1VTTEVFUCIgPSAwIC1vICIkU05NUF9DQU5fVVNMRUVQIiA9IDEgXSA7IHRoZW4KKyAgICAgcmV0dXJuIDAKKyAgIGZpCisgICBzbGVlcCAuMSA+IC9kZXYvbnVsbCAyPiYxCisgICBpZiBbICQ/ID0gMCBdIDsgdGhlbgorICAgICBTTk1QX0NBTl9VU0xFRVA9MQorICAgZWxzZQorICAgICBTTk1QX0NBTl9VU0xFRVA9MAorICAgZmkKKyAgIGV4cG9ydCBTTk1QX0NBTl9VU0xFRVAKK30KKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU1VDQ0VTUygpIHsJIyA8YW55X2FyZ3VtZW50cz4KKwlbICIkZmFpbGNvdW50IiAtbmUgMCBdICYmIHJldHVybgorCWNhdCA8PEdST0lOSworCitTVUNDRVNTOiAkKgorCitHUk9JTksKK30KKworCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitGQUlMRUQoKSB7CSMgPHJldHVybl92YWx1ZT4sIDxhbnlfYXJndW1lbnRzPgorCVsgIiQxIiAtZXEgMCBdICYmIHJldHVybgorCXNoaWZ0CisKKwlmYWlsY291bnQ9YGV4cHIgJGZhaWxjb3VudCArIDFgCisJY2F0IDw8R1JPTklLCisKK0ZBSUxFRDogJCoKKworR1JPTklLCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTS0lQKCkgeworCVJFTU9WRVRFU1REQVRBCisJZWNobyAiMS4uMCAjIFNLSVAgJCoiCisJZXhpdCAwCit9CisKK0lTREVGSU5FRCgpIHsKKwlncmVwICJeI2RlZmluZSAkMSAiICR7YnVpbGRkaXJ9L2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJHtidWlsZGRpcn0vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oICR7YnVpbGRkaXJ9L2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsCit9CisKK1NLSVBJRk5PVCgpIHsKKwlJU0RFRklORUQgIiQxIiB8fCBTS0lQICIkMSBpcyBub3QgZGVmaW5lZCIKK30KKworU0tJUElGKCkgeworCUlTREVGSU5FRCAiJDEiICYmIFNLSVAgIiQxIGlzIGRlZmluZWQiCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitWRVJJRlkoKSB7CSMgPHBhdGhfdG9fZmlsZShzKT4KKwltaXNzaW5nZmlsZXM9IiIKKworCWZvciBmIGluICQqOyBkbworCQlbIC1mICIkZiIgXSAmJiBjb250aW51ZQorCQllY2hvICJGQUlMRUQ6IENhbm5vdCBmaW5kIGZpbGUgXCIkZlwiLiIKKwkJbWlzc2luZ2ZpbGVzPXRydWUKKwlkb25lCisKKwlbICIkbWlzc2luZ2ZpbGVzIiA9IHRydWUgXSAmJiBleGl0IDEwMDAKK30KKworTkVXT1VUUFVURklMRSgpIHsKKyAgICAgICAgb3V0cHV0Y291bnQ9YGV4cHIgJG91dHB1dGNvdW50ICsgMWAKKyAgICAgICAganVua291dHB1dGZpbGU9IiR7anVua291dHB1dGZpbGViYXNlfS0kb3V0cHV0Y291bnQiCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTVEFSVFRFU1QoKSB7CisgICAgICAgIE5FV09VVFBVVEZJTEUKKwlbICEgLWYgIiRqdW5rb3V0cHV0ZmlsZSIgXSAmJiB7CisJCXRvdWNoICRqdW5rb3V0cHV0ZmlsZQorCQlyZXR1cm4KKwl9CisJZWNobyAiRkFJTEVEOiBPdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0czogXCIkanVua291dHB1dGZpbGVcIi4iCisJZXhpdCAxMDAwCit9CisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NUT1BURVNUKCkgeworCXJtIC1mICIkanVua291dHB1dGZpbGUiCit9CisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1JFTU9WRVRFU1REQVRBKCkgeworIwlFQ0hPICJyZW1vdmluZyAkU05NUF9UTVBESVIgICIKKwlybSAtcmYgJFNOTVBfVE1QRElSCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitPVVRQVVRFTlZWQVJTKCkgeworICAgIGVjaG8gIlNOTVBDT05GUEFUSD0kU05NUENPTkZQQVRIIiA+PiAkMQorICAgIGVjaG8gIlNOTVBfUEVSU0lTVEVOVF9ESVI9JFNOTVBfUEVSU0lTVEVOVF9ESVIiID4+ICQxCisgICAgZWNobyAiTUlCRElSUz0kTUlCRElSUyIgPj4gJDEKKyAgICBlY2hvICJQQVRIPSRQQVRIIiA+PiAkMQorICAgIGVjaG8gImV4cG9ydCBTTk1QQ09ORlBBVEgiID4+ICQxCisgICAgZWNobyAiZXhwb3J0IFNOTVBfUEVSU0lTVEVOVF9ESVIiID4+ICQxCisgICAgZWNobyAiZXhwb3J0IE1JQkRJUlMiID4+ICQxCisgICAgZWNobyAiZXhwb3J0IFBBVEgiID4+ICQxCit9CisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIyBDYXB0dXJlcyBvdXRwdXQgZnJvbSBjb21tYW5kLCBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCdzIGV4aXQgY29kZS4KK2xvZ2dlZHZhcnM9MAorQ0FQVFVSRSgpIHsJIyA8Y29tbWFuZF93aXRoX2FyZ3VtZW50c190b19leGVjdXRlPgorICAgIE5FV09VVFBVVEZJTEUKKworICAgICMgdHJhY2sgaW52b2tlZCBjb21tYW5kIHBlciB0ZXN0IHdoZW4gdmVyYm9zZQorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisgICAgICAgIE9VVFBVVEVOVlZBUlMgJGp1bmtvdXRwdXRmaWxlLmludm9rZWQKKyAgICAgICAgZWNobyAkKiA+PiAkanVua291dHB1dGZpbGUuaW52b2tlZAorICAgIGZpCisKKyAgICBpZiBbICRsb2dnZWR2YXJzID0gMCBdOyB0aGVuCisgICAgICAgIE9VVFBVVEVOVlZBUlMgJFNOTVBfVE1QRElSL2ludm9rZWQKKyAgICAgICAgbG9nZ2VkdmFycz0xCisgICAgZmkKKyAgICBlY2hvICQqID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisKKwlpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorCQljYXQgPDxLTk9SRworCitFWEVDVVRJTkc6ICQqCisKK0tOT1JHCisKKwlmaQorCWVjaG8gIlJVTk5JTkc6ICQqIiA+ICRqdW5rb3V0cHV0ZmlsZQorCSggJCogMj4mMSApID4+ICRqdW5rb3V0cHV0ZmlsZSAyPiYxCisJUkM9JD8KKworCWlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCisJCWVjaG8gIkNvbW1hbmQgT3V0cHV0OiAiCisJCWVjaG8gIk1JQkRJUiAkTUlCRElSUyAkTUlCUyIKKwkJZWNobyAiJHNlcGFyYXRvciIKKwkJY2F0ICRqdW5rb3V0cHV0ZmlsZSB8IHNlZCAncy9eLyAgLycKKwkJZWNobyAiJHNlcGFyYXRvciIKKwlmaQorCXJldHVybiAkUkMKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMgRGVsYXkgdG8gbGV0IHByb2Nlc3NlcyBzZXR0bGUKK0RFTEFZKCkgeworICAgIGlmIFsgIiRTTk1QX1NMRUVQIiAhPSAiMCIgXSA7IHRoZW4KKwlzbGVlcCAkU05NUF9TTEVFUAorICAgIGZpCit9CisKK1NBVkVfUkVTVUxUUygpIHsKKyAgIHJlYWxfcmV0dXJuX3ZhbHVlPSRyZXR1cm5fdmFsdWUKK30KKworIworIyBDaGVja3MgdGhlIG91dHB1dCByZXN1bHQgYWdhaW5zdCB3aGF0IHdlIGV4cGVjdC4KKyMgICBTZXRzIHJldHVybl92YWx1ZSB0byAwIG9yIDEuCisjCitFWFBFQ1RSRVNVTFQoKSB7CisgIGlmIFsgJE9LX1RPX1NBVkVfUkVTVUxUIC1uZSAwIF0gOyB0aGVuCisgICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAiJDEiIF07IHRoZW4KKwlyZXR1cm5fdmFsdWU9MAorICAgIGVsc2UKKwlyZXR1cm5fdmFsdWU9MQorICAgIGZpCisgIGZpCit9CisKK0NIRUNLQ09VTlQoKSB7CisgICBDSEVDS0ZJTEVDT1VOVCAiJGp1bmtvdXRwdXRmaWxlIiAkQAorfQorCitDSEVDS1ZBTFVFSVMoKSB7CisgICAgdmFsdWUxPSQxCisgICAgdmFsdWUyPSQyCisgICAgaWYgWyAieCR2YWx1ZTEiID0gIngkdmFsdWUyIiBdOyB0aGVuCisgICAgICBHT09EICIkMyIKKyAgICBlbHNlCisgICAgICBCQUQgIiQzIgorICAgIGZpCit9CisKK0NIRUNLVkFMVUVJU05UKCkgeworICAgIHZhbHVlMT0kMQorICAgIHZhbHVlMj0kMgorICAgIGlmIFsgIngkdmFsdWUxIiA9ICJ4JHZhbHVlMiIgXTsgdGhlbgorICAgICAgQkFEICIkMyIKKyAgICBlbHNlCisgICAgICBHT09EICIkMyIKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIyBSZXR1cm5zOiBDb3VudCBvZiBtYXRjaGVkIGxpbmVzLgorIworQ0hFQ0tGSUxFQ09VTlQoKSB7CSMgPHBhdHRlcm5fdG9fbWF0Y2g+CisgICAgY2hrZmlsZT0kMQorICAgIGNrZmNvdW50PSQyCisgICAgc2hpZnQKKyAgICBzaGlmdAorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisJZWNobyAtbiAiY2hlY2tpbmcgJGNoa2ZpbGUgZm9yICRja2Zjb3VudCBcIiQqXCIuLi4iCisgICAgZmkKKworICAgIGlmIFsgLWYgJGNoa2ZpbGUgXTsgdGhlbgorCXJ2YWw9YGdyZXAgLWMgIiQqIiAiJGNoa2ZpbGUiIDI+L2Rldi9udWxsYAorICAgIGVsc2UKKyAgICAgICAgQ09NTUVOVCAiTm90ZTogZmlsZSAkY2hrZmlsZSBkb2VzIG5vdCBleGlzdCBhbmQgd2Ugd2VyZSBhc2tlZCB0byBjaGVjayBpdCIKKwlydmFsPTAKKyAgICBmaQorCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKwllY2hvICIkcnZhbCBtYXRjaGVzIGZvdW5kIgorICAgIGZpCisKKyAgICBzbm1wX2xhc3RfdGVzdF9yZXN1bHQ9JHJ2YWwKKyAgICBFWFBFQ1RSRVNVTFQgJGNrZmNvdW50ICAjIGRlZmF1bHQKKyAgICBpZiBbICIkY2tmY291bnQiICE9ICJub2Vycm9yIiBdOyB0aGVuCisgICAgICBpZiBbICIkY2tmY291bnQiID0gImF0bGVhc3RvbmUiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJHJ2YWwiIC1uZSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgR09PRCAiZm91bmQgJGNrZmNvdW50IGNvcGllcyBvZiAnJConIGluIG91dHB1dCAoJGNoa2ZpbGUpOyBuZWVkZWQgb25lIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBCQUQgImZvdW5kICRydmFsIGNvcGllcyBvZiAnJConIGluIG91dHB1dCAoJGNoa2ZpbGUpOyBleHBlY3RlZCAxIgorICAgICAgICAgICAgQ09NTUVOVCAiT3V0cHV0ZmlsZTogJGNoa2ZpbGUiCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGlmIFsgIiRydmFsIiA9ICIkY2tmY291bnQiIF07IHRoZW4KKyAgICAgICAgICAgR09PRCAiZm91bmQgJGNrZmNvdW50IGNvcGllcyBvZiAnJConIGluIG91dHB1dCAoJGNoa2ZpbGUpIgorICAgICAgICBlbHNlCisgICAgICAgICAgIEJBRCAiZm91bmQgJHJ2YWwgY29waWVzIG9mICckKicgaW4gb3V0cHV0ICgkY2hrZmlsZSk7IGV4cGVjdGVkICRja2Zjb3VudCIKKyAgICAgICAgICAgQ09NTUVOVCAiT3V0cHV0ZmlsZTogJGNoa2ZpbGUiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgcmV0dXJuICRydmFsCit9CisKK0NIRUNLKCkgeworICAgIENIRUNLQ09VTlQgMSAkQAorfQorCitDSEVDS0ZJTEUoKSB7CisgICAgZmlsZT0kMQorICAgIHNoaWZ0CisgICAgQ0hFQ0tGSUxFQ09VTlQgJGZpbGUgMSAkQAorfQorCitDSEVDS1RSQVBEKCkgeworICAgIENIRUNLRklMRSAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUgJEAKK30KKworQ0hFQ0tUUkFQRENPVU5UKCkgeworICAgIGNvdW50PSQxCisgICAgc2hpZnQKKyAgICBDSEVDS0ZJTEVDT1VOVCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUgJGNvdW50ICRACit9CisKK0NIRUNLVFJBUERPUkRJRSgpIHsKKyAgICBDSEVDS09SRElFICRAICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQorfQorCitDSEVDS0FHRU5UKCkgeworICAgIENIRUNLRklMRSAkU05NUF9TTk1QRF9MT0dfRklMRSAkQAorfQorCitDSEVDS0FHRU5UQ09VTlQoKSB7CisgICAgY291bnQ9JDEKKyAgICBzaGlmdAorICAgIENIRUNLRklMRUNPVU5UICRTTk1QX1NOTVBEX0xPR19GSUxFICRjb3VudCAkQAorfQorCisjIFJldHVybiAwICh0cnVlKSBpZiBhIHByb2Nlc3Mgd2l0aCBwaWQgJDEgZXhpc3RzIGFuZCAxIChmYWxzZSkgaWYgbm8gcHJvY2VzcworIyB3aXRoIHBpZCAkMSBleGlzdHMuCitJU1JVTk5JTkcoKSB7CisgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisJcHNsaXN0LmV4ZSAiJDEiIDI+JjEgfCB3aGlsZSByZWFkIG5hbWUgcHNwaWQgcmVzdDsgZG8KKwkgICAgaWYgWyAiJDEiID0gIiRwc3BpZCIgXTsgdGhlbgorCQlyZXR1cm4gMAorCSAgICBmaQorCWRvbmUKKwlyZXR1cm4gMQorICAgIGVsc2UKKyAgICAgICAga2lsbCAtMCAiJDEiIDI+L2Rldi9udWxsCisgICAgZmkKK30KKworIyBFY2hvIGEgY29tbWFuZCB0aGF0IGFza3MgdGhlIHByb2Nlc3Mgd2l0aCBwaWQgJDEgdG8gc3RvcC4KK0VDSE9TRU5EU0lHVEVSTSgpIHsKKyAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICAgZWNobyBwc2tpbGwuZXhlICQxCisgICAgZWxzZQorICAgICAgICBlY2hvIGtpbGwgLVRFUk0gJDEKKyAgICBmaQorfQorCisjIEVjaG8gYSBjb21tYW5kIHRoYXQgc3RvcHMgdGhlIHByb2Nlc3Mgd2l0aCBwaWQgJDEgZm9yY2libHkuCitFQ0hPU0VORFNJR0tJTEwoKSB7CisgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgICAgIGVjaG8gcHNraWxsLmV4ZSAkMQorICAgIGVsc2UKKyAgICAgICAgZWNobyBraWxsIC1LSUxMICQxCisgICAgZmkKK30KKworIyBXYWl0IHVudGlsIHRoZSBzaGVsbCBzdGF0ZW1lbnQgIiRAIiBldmFsdWF0ZXMgdG8gZmFsc2UuCitXQUlURk9STk9UQ09ORCgpIHsKKyAgICBDQU5fVVNMRUVQCisgICAgaWYgWyAkU05NUF9DQU5fVVNMRUVQID0gMSBdIDsgdGhlbgorICAgICAgICBzbGVlcHRpbWU9YGV4cHIgJFNOTVBfU0xFRVAgJyonIDUwYAorICAgIGVsc2UgCisgICAgICAgIHNsZWVwdGltZT1gZXhwciAkU05NUF9TTEVFUCAnKicgNWAKKyAgICBmaQorICAgIHdoaWxlIFsgJHNsZWVwdGltZSAtZ3QgMCBdICYmIGV2YWwgIiRAIjsgZG8KKyAgICAgICAgaWYgWyAkU05NUF9DQU5fVVNMRUVQID0gMSBdOyB0aGVuCisgICAgICAgICAgICBzbGVlcCAuMQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgIGZpCisgICAgICAgIHNsZWVwdGltZT1gZXhwciAkc2xlZXB0aW1lIC0gMWAKKyAgICBkb25lCit9CisKKyMgV2FpdCB1bnRpbCB0aGUgc2hlbGwgc3RhdGVtZW50ICIkQCIgZXZhbHVhdGVzIHRvIHRydWUuCitXQUlURk9SQ09ORCgpIHsKKyAgICBXQUlURk9STk9UQ09ORCBpZiAiJEA7IiB0aGVuIGZhbHNlICI7IiBlbHNlIHRydWUgIjsiIGZpCit9CisKK1dBSVRGT1JBR0VOVCgpIHsKKyAgICBXQUlURk9SICIkQCIgJFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgICBpZiBbICRTTk1QX0NBTl9VU0xFRVAgPSAxIF07IHRoZW4KKyAgICAgICAgc2xlZXAgLjEKKyAgICBlbHNlCisgICAgICAgIHNsZWVwIDEKKyAgICBmaQorfQorCitXQUlURk9SVFJBUEQoKSB7CisgICAgV0FJVEZPUiAiJEAiICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQorICAgIGlmIFsgJFNOTVBfQ0FOX1VTTEVFUCA9IDEgXTsgdGhlbgorICAgICAgICBzbGVlcCAuMQorICAgIGVsc2UKKyAgICAgICAgc2xlZXAgMQorICAgIGZpCit9CisKKyMgV2FpdCB1bnRpbCBwYXR0ZXJuICIkMSIgYXBwZWFycyBpbiBmaWxlICIkMiIuCitXQUlURk9SKCkgeworICAgIFdBSVRGT1JDT05EIGdyZXAgIiQxIiAiJDIiICI+L2Rldi9udWxsIiAiMj4mMSIKK30KKworR09PRCgpIHsKKyAgICB0ZXN0bnVtPWBleHByICR0ZXN0bnVtICsgMWAKKyAgICBlY2hvICJvayAkdGVzdG51bSAtICQxIgorICAgIGVjaG8gIiMgb2sgJHRlc3RudW0gLSAkMSIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKK30KKworQkFEKCkgeworICAgIHRlc3RudW09YGV4cHIgJHRlc3RudW0gKyAxYAorICAgIGVycm51bT1gZXhwciAkZXJybnVtICsgMWAKKyAgICBlY2hvICJub3Qgb2sgJHRlc3RudW0gLSAkMSIKKyAgICBlY2hvICIjIG5vdCBvayAkdGVzdG51bSAtICQxIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorfQorCitDT01NRU5UKCkgeworICAgIGVjaG8gIiMgJEAiCisgICAgZWNobyAiIyAkQCIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKK30KKworIyBDSEVDS09SRElFICJncmVwIHN0cmluZyIgWyJmaWxlIl0gLi4gRkFJTCBpZiAiZ3JlcCBzdHJpbmciIGlzICpub3QqIGZvdW5kCitDSEVDS09SRElFKCkgeworICAgIGlmIFsgIngkMiIgPSAieCIgXTsgdGhlbgorICAgICAgQ0hFQ0tGSUxFICIkanVua291dHB1dGZpbGUiICIkMSIKKyAgICBlbHNlCisgICAgICBDSEVDS0ZJTEVDT1VOVCAiJDIiIDEgIiQxIgorICAgIGZpCit9CisKKyMgQ0hFQ0tBTkRESUUgImdyZXAgc3RyaW5nIiBbImZpbGUiXSAuLiBGQUlMIGlmICJncmVwIHN0cmluZyIgKmlzKiBmb3VuZAorQ0hFQ0tBTkRESUUoKSB7CisgICAgaWYgWyAieCQyIiA9ICJ4IiBdOyB0aGVuCisgICAgICBDSEVDS0ZJTEVDT1VOVCAiJGp1bmtvdXRwdXRmaWxlIiAwICIkMSIKKyAgICBlbHNlCisgICAgICBDSEVDS0ZJTEVDT1VOVCAiJDIiIDAgIiQxIgorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjIFJldHVybnM6IENvdW50IG9mIG1hdGNoZWQgbGluZXMuCisjCitDSEVDS0VYQUNUKCkgewkjIDxwYXR0ZXJuX3RvX21hdGNoX2V4YWN0bHk+CisJcnZhbD1gZWdyZXAgLWMgIl4kKlwkfF4kKlteYS16QS1aMC05X118W15hLXpBLVowLTlfXSQqXCR8W15hLXpBLVowLTlfXSQqW15hLXpBLVowLTlfXSIgIiRqdW5rb3V0cHV0ZmlsZSIgMj4vZGV2L251bGxgCisJc25tcF9sYXN0X3Rlc3RfcmVzdWx0PSRydmFsCisJRVhQRUNUUkVTVUxUIDEgICMgZGVmYXVsdAorCXJldHVybiAkcnZhbAorfQorCitDT05GSUdBR0VOVCgpIHsKKyAgICBpZiBbICJ4JFNOTVBfQ09ORklHX0ZJTEUiID0gIngiIF07IHRoZW4KKwllY2hvICIkMDogZmFpbGVkIGJlY2F1c2UgdmFyOiBTTk1QX0NPTkZJR19GSUxFIHdhc24ndCBzZXQiCisJZXhpdCAxOworICAgIGZpCisgICAgZWNobyAkKiA+PiAkU05NUF9DT05GSUdfRklMRQorfQorCitDT05GSUdUUkFQRCgpIHsKKyAgICBpZiBbICJ4JFNOTVBUUkFQRF9DT05GSUdfRklMRSIgPSAieCIgXTsgdGhlbgorCWVjaG8gIiQwOiBmYWlsZWQgYmVjYXVzZSB2YXI6IFNOTVBUUkFQRF9DT05GSUdfRklMRSB3YXNuJ3Qgc2V0IgorCWV4aXQgMTsKKyAgICBmaQorICAgIGVjaG8gJCogPj4gJFNOTVBUUkFQRF9DT05GSUdfRklMRQorfQorCitDT05GSUdBUFAoKSB7CisgICAgaWYgWyAieCRTTk1QQVBQX0NPTkZJR19GSUxFIiA9ICJ4IiBdOyB0aGVuCisJZWNobyAiJDA6IGZhaWxlZCBiZWNhdXNlIHZhcjogU05NUEFQUF9DT05GSUdfRklMRSB3YXNuJ3Qgc2V0IgorCWV4aXQgMTsKKyAgICBmaQorICAgIGVjaG8gJCogPj4gJFNOTVBBUFBfQ09ORklHX0ZJTEUKK30KKworIworIyBjb21tb24gdG8gU1RBUlRBR0VOVCBhbmQgU1RBUlRUUkFQRAorIyBsb2cgY29tbWFuZCB0byAiaW52b2tlZCIgZmlsZQorIworU1RBUlRQUk9HKCkgeworICAgIGlmIFsgIngkRFlOQU1JQ19BTkFMWVpFUiIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgQ09NTUFORD0iJERZTkFNSUNfQU5BTFlaRVIgJENPTU1BTkQiCisgICAgZmkKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgorCWVjaG8gIiRDRkdfRklMRSBjb250YWluczogIgorCWlmIFsgLWYgJENGR19GSUxFIF07IHRoZW4KKwkgICAgY2F0ICRDRkdfRklMRQorCWVsc2UKKwkgICAgZWNobyAiW25vIGNvbmZpZyBmaWxlXSIKKwlmaQorICAgIGZpCisgICAgaWYgdGVzdCAtZiAkQ0ZHX0ZJTEU7IHRoZW4KKwlDT01NQU5EPSIkQ09NTUFORCAtQyAtYyAkQ0ZHX0ZJTEUiCisgICAgZmkKKyAgICBpZiBbICJ4JFBPUlRfU1BFQyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgQ09NTUFORD0iJENPTU1BTkQgJFBPUlRfU1BFQyIKKyAgICBmaQorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisJZWNobyAicnVubmluZzogJENPTU1BTkQiCisgICAgZmkKKyAgICBlY2hvICRDT01NQU5EID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKyAgICAgICAgT1VUUFVURU5WVkFSUyAkTE9HX0ZJTEUuY29tbWFuZAorICAgICAgICBlY2hvICRDT01NQU5EID4+ICRMT0dfRklMRS5jb21tYW5kCisgICAgZmkKKyAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICRDT01NQU5EID4gJExPR19GSUxFLnN0ZG91dCAyPiYxICYKKyAgICAgICMjIENPTU1BTkQ9ImNtZC5leGUgLy9jIHN0YXJ0IC8vbWluICRDT01NQU5EIgorICAgICAgIyMgc3RhcnQgJENPTU1BTkQgPiAkTE9HX0ZJTEUuc3Rkb3V0IDI+JjEKKyAgICBlbHNlCisgICAgICAkQ09NTUFORCA+ICRMT0dfRklMRS5zdGRvdXQgMj4mMQorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCitTVEFSVEFHRU5UKCkgeworICAgIFNOTVBEU1RBUlRFRD0xCisgICAgQ09NTUFORD0ic25tcGQgJFNOTVBfRkxBR1MgLXIgLVUgLXAgJFNOTVBfU05NUERfUElEX0ZJTEUgLUxmICRTTk1QX1NOTVBEX0xPR19GSUxFICRBR0VOVF9GTEFHUyIKKyAgICBDRkdfRklMRT0kU05NUF9DT05GSUdfRklMRQorICAgIExPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgICAgUE9SVF9TUEVDPSIkU05NUF9TTk1QRF9QT1JUIgorICAgIGlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgUE9SVF9TUEVDPSIke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtQT1JUX1NQRUN9IgorICAgIGZpCisgICAgU1RBUlRQUk9HCisgICAgV0FJVEZPUkNPTkQgdGVzdCAtZiAkU05NUF9TTk1QRF9QSURfRklMRQorICAgIFdBSVRGT1JBR0VOVCAiTkVULVNOTVAudmVyc2lvbiIKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KK1NUQVJUVFJBUEQoKSB7CisgICAgVFJBUERTVEFSVEVEPTEKKyAgICBDT01NQU5EPSJzbm1wdHJhcGQgLWQgLXAgJFNOTVBfU05NUFRSQVBEX1BJRF9GSUxFIC1MZiAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUgJFRSQVBEX0ZMQUdTIgorICAgIENGR19GSUxFPSRTTk1QVFJBUERfQ09ORklHX0ZJTEUKKyAgICBMT0dfRklMRT0kU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKKyAgICBQT1JUX1NQRUM9IiRTTk1QX1NOTVBUUkFQRF9QT1JUIgorICAgIGlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgUE9SVF9TUEVDPSIke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtQT1JUX1NQRUN9IgorICAgIGZpCisgICAgU1RBUlRQUk9HCisgICAgV0FJVEZPUkNPTkQgdGVzdCAtZiAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUKKyAgICBXQUlURk9SVFJBUEQgIk5FVC1TTk1QLnZlcnNpb24iCit9CisKKyMjIHNlbmRpbmcgU0lHSFVQIGZvciByZWNvbmZpZ3VyYXRpb24KKyMKK0hVUFBST0coKSB7CisgICAgaWYgWyAtZiAkMSBdOyB0aGVuCisgICAgICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgICAgIENPTU1BTkQ9J2VjaG8gIlNraXBwaW5nIFNJR0hVUCAobm90IHBvc3NpYmxlIHdpdGggTWluR1cpIicKKyAgICAgICAgZWxzZQorICAgICAgICAgIENPTU1BTkQ9ImtpbGwgLUhVUCBgY2F0ICQxYCIKKyAgICAgICAgZmkKKwllY2hvICRDT01NQU5EID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisJVkVSQk9TRV9PVVQgMCAkQ09NTUFORAorCSRDT01NQU5EID4gL2Rldi9udWxsIDI+JjEKKyAgICBmaQorfQorCitIVVBBR0VOVCgpIHsKKyAgICBIVVBQUk9HICRTTk1QX1NOTVBEX1BJRF9GSUxFCisgICAgaWYgWyAieCRPU1RZUEUiICE9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgICBXQUlURk9SQUdFTlQgInJlc3RhcnRlZCIKKyAgICBmaQorfQorCitIVVBUUkFQRCgpIHsKKyAgICBIVVBQUk9HICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRQorICAgIGlmIFsgIngkT1NUWVBFIiAhPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICAgV0FJVEZPUlRSQVBEICJyZXN0YXJ0ZWQiCisgICAgZmkKK30KKworCisjIyB1c2VkIGJ5IFNUT1BBR0VOVCBhbmQgU1RPUFRSQVBECisjIGRlbGF5IGJlZm9yZSBraWxsIHRvIGFsbG93IHByZXZpb3VzIGFjdGlvbiB0byBmaW5pc2gKKyMgICAgdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbgorIyAgICBtYXN0ZXIgYWdlbnQgYW5kIHN1YiBhZ2VudC4KK1NUT1BQUk9HKCkgeworICAgIHBpZD0iYGNhdCAkMSAyPi9kZXYvbnVsbGAiCisgICAgaWYgWyAieCRwaWQiICE9ICJ4IiBdOyB0aGVuCisJQ09NTUFORD0iYEVDSE9TRU5EU0lHVEVSTSAkcGlkYCIKKwllY2hvICIkQ09NTUFORCAoJDEpIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCVZFUkJPU0VfT1VUIDAgIiRDT01NQU5EICgkMSkiCisgICAgICAgICRDT01NQU5EID4vZGV2L251bGwgMj4mMQorICAgICAgICBXQUlURk9STk9UQ09ORCAiSVNSVU5OSU5HICRwaWQiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NUT1BBR0VOVCgpIHsKKyAgICBTQVZFX1JFU1VMVFMKKyAgICBTVE9QUFJPRyAkU05NUF9TTk1QRF9QSURfRklMRQorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCisJZWNobyAiQWdlbnQgT3V0cHV0OiIKKwllY2hvICIkc2VwYXJhdG9yIFtzdGRvdXRdIgorCWNhdCAkU05NUF9TTk1QRF9MT0dfRklMRS5zdGRvdXQKKwllY2hvICIkc2VwYXJhdG9yIFtsb2dmaWxlXSIKKwljYXQgJFNOTVBfU05NUERfTE9HX0ZJTEUKKwllY2hvICIkc2VwYXJhdG9yIgorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTVE9QVFJBUEQoKSB7CisgICAgU0FWRV9SRVNVTFRTCisgICAgU1RPUFBST0cgJFNOTVBfU05NUFRSQVBEX1BJRF9GSUxFCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KKwllY2hvICJzbm1wdHJhcGQgT3V0cHV0OiIKKwllY2hvICIkc2VwYXJhdG9yIFtzdGRvdXRdIgorCWNhdCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUuc3Rkb3V0CisJZWNobyAiJHNlcGFyYXRvciBbbG9nZmlsZV0iCisJY2F0ICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQorCWVjaG8gIiRzZXBhcmF0b3IiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK0ZJTklTSEVEKCkgeworCisgICAgIyMgbm8gbW9yZSBjaGFuZ2VzIHRvIHRlc3QgcmVzdWx0LgorICAgIE9LX1RPX1NBVkVfUkVTVUxUPTAKKworICAgIHBpZHM9ImBjYXQgJFNOTVBfVE1QRElSLypwaWQqIDI+L2Rldi9udWxsYCIKKyAgICBpZiBbICIkU05NUERTVEFSVEVEIiA9ICIxIiBdIDsgdGhlbgorICAgICAgU1RPUEFHRU5UCisgICAgZmkKKyAgICBpZiBbICIkVFJBUERTVEFSVEVEIiA9ICIxIiBdIDsgdGhlbgorICAgICAgU1RPUFRSQVBECisgICAgZmkKKyAgICBmb3IgcGlkIGluICRwaWRzOyBkbworICAgICAgICBpZiBJU1JVTk5JTkcgJHBpZDsgdGhlbgorCSAgICBTTk1QX1NBVkVfVE1QRElSPXllcworCSAgICBDT01NQU5EPSJgRUNIT1NFTkRTSUdLSUxMICRwaWRgIgorCSAgICBlY2hvICIkQ09NTUFORCAoJHBmaWxlKSIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKwkgICAgVkVSQk9TRV9PVVQgMCAiJENPTU1BTkQgKCRwZmlsZSkiCisJICAgICRDT01NQU5EID4gL2Rldi9udWxsIDI+JjEKKwkgICAgcmV0dXJuX3ZhbHVlPTEKKwlmaQorICAgIGRvbmUKKworICAgICMgcmVwb3J0IHRoZSBudW1iZXIgb2YgdGVzdHMgZG9uZQorICAgIEdPT0QgImdvdCB0byBGSU5JU0hFRCIKKyAgICBlY2hvICIxLi4kdGVzdG51bSIKKworICAgIGlmIFsgIngkZXJybnVtIiAhPSAieDAiIF07IHRoZW4KKwlpZiBbIC1zIGNvcmUgXSA7IHRoZW4KKwkgICAgIyBYWCBob3BlIHRoYXQgb25seSBvbmUgcHJvZyBjb3JlcyAhCisJICAgIGNwIGNvcmUgJFNOTVBfVE1QRElSL2NvcmUuJCQKKwkgICAgcm0gLWYgY29yZQorCWZpCisJZWNobyAiJGhlYWRlclN0ci4uLkZBSUwiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisJZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIiRoZWFkZXJTdHIuLi5vayIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKworICAgIGlmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgIT0gInh5ZXMiIF07IHRoZW4KKwlSRU1PVkVURVNUREFUQQorICAgIGZpCisgICAgZXhpdCAwCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitWRVJCT1NFX09VVCgpIHsKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0ICQxIF07IHRoZW4KKwlzaGlmdAorCWVjaG8gIiQqIgorICAgIGZpCit9CisKK2ZpICMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk3ODAwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bgpAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisKK2lmIFsgJCMgPSAwIF07IHRoZW4KKyAgICBlY2hvICJVc2FnZTogJDAgPHRlc3RzY3JpcHQ+IFs8YXJncz5dIgorICAgIGV4aXQgMQorZmkKKworaWYgWyAieCRidWlsZGRpciIgPSAieCIgXTsgdGhlbgorICAgIGNkIC4uCisgICAgYnVpbGRkaXI9YHB3ZGAKKyAgICBpZiBjZCB0ZXN0aW5nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgOgorICAgIGVsc2UKKyAgICAgICBlY2hvICJFcnJvcjogJDAgbXVzdCBiZSBzdGFydGVkIGZyb20gaW5zaWRlIHRoZSB0ZXN0aW5nIGRpcmVjdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuIgorICAgICAgIGVjaG8gIlRoZSBidWlsZGRpciBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIHBvaW50IHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuIgorICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBbICJ4JHNyY2RpciIgPSAieCIgXTsgdGhlbgorICAgIHNyY2Rpcj1gZGlybmFtZSAkMGAKKyAgICBzcmNkaXI9YGNkICRzcmNkaXI7IGNkIC4uLy4uOyBwd2RgCisgICAgc3JjZGlyPWBkaXJuYW1lICRzcmNkaXJgCisgICAgY2QgJHNyY2RpcgorICAgIGlmIGNkIHRlc3RpbmcgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICA6CisgICAgZWxzZQorICAgICAgIGVjaG8gIkVycm9yOiAkMCBtdXN0IGJlIHN0YXJ0ZWQgZnJvbSBpbnNpZGUgdGhlIHRlc3RpbmcgZGlyZWN0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4iCisgICAgICAgZWNobyAiVGhlIGJ1aWxkZGlyIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gcG9pbnQgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4iCisgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK3Rlc3RzY3JpcHQ9JDEKK2lmIFsgYGVjaG8gJHRlc3RzY3JpcHQgfCBjdXQgLWMgMS0xYCAhPSAnLycgXTsgdGhlbgorICAgIHRlc3RzY3JpcHQ9ImBwd2RgLyQxIgorZmkKKworU05NUF9CQVNFRElSPWBkaXJuYW1lICQwYAorCisjIyBwcmVmZXIgTUlCIGZpbGVzIGZvdW5kIGluIHNvdXJjZSBoaWVyYXJjaHkKK1NOTVBfUFJFRkVSX05FQVJfTUlCUz0xCisKK2V4cG9ydCBTTk1QX1BSRUZFUl9ORUFSX01JQlMKK1NOTVBfVEVTVF9QUkVGSVg9JHtTTk1QX1RFU1RfUFJFRklYOj1UfQorZXhwb3J0IFNOTVBfVEVTVF9QUkVGSVgKKworU05NUF9PUklHRElSPWBwd2RgCSAgICAgICAgIyMgdGhpcyBzY3JpcHQgbWF5IGJlIGludm9rZWQgd2l0aCByZWxhdGl2ZSBwYXRoCitleHBvcnQgU05NUF9PUklHRElSCisKK1NOTVBfVVBESVI9JHtidWlsZGRpcn0gICAgICAgICAgIyMgYnVpbGQgZGlyZWN0b3J5CitpZiBbICJ4JERZTkFNSUNfQU5BTFlaRVIiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1NMRUVQX0RFRkFVTFQ9MQorZWxzZQorICAgIFNOTVBfU0xFRVBfREVGQVVMVD0xMAorZmkKK1NOTVBfU0xFRVA9JHtTTk1QX1NMRUVQOj0kU05NUF9TTEVFUF9ERUZBVUxUfSAJIyMgZGVmYXVsdCBzZWNvbmRzIHRvIHNsZWVwCitleHBvcnQgU05NUF9TTEVFUAorCisjIEZpbmQgZXhlY3V0YWJsZXMgaW4gc291cmNlIGZpcnN0LCB0aGVuIGJ1aWxkLCB0aGVuIGV4aXN0aW5nIFBBVEguCisjIyBBZGQgdG8gUEFUSCBpZiBhIGJpbmFyeSBpcyBmb3VuZC4KKworY2QgJFNOTVBfVVBESVIKK1NOTVBfVVBESVI9YHB3ZGAKK2JmPXNubXBnZXQKK2lmIFsgLXggIiRiZiIgXSA7IHRoZW4KKyAgIFBBVEg9JFNOTVBfVVBESVI6JFBBVEgKK2Vsc2UKKyAgZm9yIGRkIGluIGFwcHMgYmluIDsgZG8KKyAgIGJmPSRkZC9zbm1wZ2V0CisgICBpZiBbIC14ICIkYmYiIF0gOyB0aGVuCisgICAgICBQQVRIPSRTTk1QX1VQRElSLyRkZDokUEFUSAorICAgICAgYnJlYWsKKyAgIGZpCisgIGRvbmUKK2ZpCitmb3IgZGQgaW4gYWdlbnQgYmluIHNiaW4gOyBkbworICAgYmY9JGRkL3NubXBkCisgICBpZiBbIC14ICIkYmYiIF0gOyB0aGVuCisgICAgICBQQVRIPSRTTk1QX1VQRElSLyRkZDokUEFUSAorICAgICAgYnJlYWsKKyAgIGZpCitkb25lCisKK2JmPWluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKK2lmIFsgISAtcyAiJGJmIiBdIDsgdGhlbgorICAgZWNobyAiTm8gXCIkYmZcIiBpbiAkU05NUF9VUERJUiAuIFNvbWUgdGVzdHMgd2lsbCBiZSBza2lwcGVkIgorZmkKK3Vuc2V0IGJmCisKKyMgUnVuIGZyb20gdGhlIHRlc3Qgc2NyaXB0cyBkaXJlY3RvcnkuCitjZCAkU05NUF9PUklHRElSIDsgY2QgJHtTTk1QX0JBU0VESVJ9CitTTk1QX0JBU0VESVI9YHB3ZGAKK2V4cG9ydCBTTk1QX0JBU0VESVIKKworUEFUSD0ke1NOTVBfQkFTRURJUn06JFBBVEgKK2V4cG9ydCBQQVRICitTTk1QX1BBVEg9eWVzCitleHBvcnQgU05NUF9QQVRICisKK2V4cG9ydCBTTk1QX1VQRElSCisKKyMKKyMgU291cmNlIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZQorIworCit0ZXN0bnVtPSJgYmFzZW5hbWUgJHRlc3RzY3JpcHRgIgorCisuIHNpbXBsZV9URVNUQ09ORi5zaAorCisuIHNpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK2NkIGBkaXJuYW1lICR0ZXN0c2NyaXB0YAorUEFUSD1gcHdkYDokUEFUSAorZXhwb3J0IFBBVEgKKworLiBgYmFzZW5hbWUgJHRlc3RzY3JpcHRgCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VhN2MwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbApAQCAtMCwwICsxLDU0IEBACisjIS91c3IvYmluL3BlcmwKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9zdXBwb3J0IikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiLi4vc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICIuLi9zdXBwb3J0IjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3Q7Cit1c2UgVGVzdDsKK3VzZSBTTk1QOworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdChhZ2VudGFkZHJlc3MgPT4gJGFnZW50YWRkcmVzcyk7CisKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoJGZlYXR1cmUpOworCitteSAkbmV0c25tcGNlcnQgPSAiJEVOVnsnc3JjZGlyJ30vbG9jYWwvbmV0LXNubXAtY2VydCAtSSAtQyAkdGVzdC0+eydkaXInfSI7CisKK3N5c3RlbSgiJG5ldHNubXBjZXJ0IGdlbmNlcnQgLUkgLXQgc25tcGQgPiAvZGV2L251bGwgMj4mMSIpOworc3lzdGVtKCIkbmV0c25tcGNlcnQgZ2VuY2VydCAtSSAtdCBzbm1wYXBwIC0tY24gc25tcGFwcCA+IC9kZXYvbnVsbCAyPiYxIik7CitzeXN0ZW0oIiRuZXRzbm1wY2VydCBnZW5jZXJ0IC1JIC10IHBlcmwgLS1jbiBwZXJsID4gL2Rldi9udWxsIDI+JjEiKTsKKworbXkgJGZwID0gYCRuZXRzbm1wY2VydCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHBlcmxgOworY2hvbXAoJGZwKTsKK3ByaW50ICIjIHVzaW5nIGxvY2FsIGZwOiAkZnBcbiI7CisKK3BsYW4odGVzdHMgPT4gMik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJzeXNjb250YWN0IGl0d29ya2VkIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJyd3VzZXIgLXMgdHNtIHBlcmwiKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoImNlcnRTZWNOYW1lIDEwMCBzbm1wYXBwIC0tY24iKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoImNlcnRTZWNOYW1lIDEwMSAkZnAgLS1jbiIpOworCiskdGVzdC0+RElFKCJmYWlsZWQgdG8gc3RhcnQgdGhlIGFnZW50IikgaWYgKCEkdGVzdC0+c3RhcnRfYWdlbnQoIiAtRHRscyxzc2wsdHNtLGNlcnQ6bWFwIikpOworCisjIG5vdyBjcmVhdGUgYSBzZXNzaW9uIHRvIHRlc3QgdGhpbmdzIHdpdGgKK215ICRzZXNzaW9uID0gbmV3IFNOTVA6OlNlc3Npb24oRGVzdEhvc3QgPT4gJHRlc3QtPnsnYWdlbnRhZGRyZXNzJ30sCisJCQkJVGhlaXJJZGVudGl0eSA9PiAnc25tcGQnLAorCQkJICAgICAgICBPdXJJZGVudGl0eSA9PiAncGVybCcpOworCitvayhyZWYoJHNlc3Npb24pLCAnU05NUDo6U2Vzc2lvbicsICJjcmVhdGVkIGEgc2Vzc2lvbiIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdFVCB0ZXN0CitpZiAocmVmKCRzZXNzaW9uKSBlcSAnU05NUDo6U2Vzc2lvbicpIHsKKyAgICBteSAkdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNDb250YWN0LjAnKTsKKyAgICBvaygkdmFsdWUsICdpdHdvcmtlZCcpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGNsZWFudXAKKyR0ZXN0LT5zdG9wX2FnZW50KCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFmMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cwpAQCAtMCwwICsxLDYyIEBACisuIFNUbHNWYXJzCisKKyMgY3JlYXRlIGEgQ0EKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYS1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworIyBjcmVhdGUgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdXNpbmcgdGhlIENBIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnICRjaGVja25hbWV0eXBlICR7Y2hlY2tuYW1lcHJlZml4fWZvb2JhciAkTlNDRVJUQVJHUworU05NUERGUD1gJE5TQ0VSVCBzaG93Y2VydCAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgJE5TQ0VSVEFSR1NgCisKK0NPTkZJR0FHRU5UICdbc25tcF0nIHNlcnZlckNlcnQgJFNOTVBERlAKKworIyBjcmVhdGUgYSB1c2VyIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworQ09ORklHQUdFTlQgIGNlcnRTZWNOYW1lIDEwICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKKworQ09ORklHQVBQICAgY2xpZW50Q2VydCAgCSAgJFRFU1RVU0VSRlAKK0NPTkZJR0FQUCAgIHNlcnZlckNlcnQgIAkgICRTTk1QREZQCisKK0NPTkZJR0FQUCAgIHRydXN0Q2VydCAkQ0FGUAorCisjIHNwZWNpZnkgYW4gZXhhY3QgbGlzdCBvZiBjaXBoZXJzIHRvIGFjY2VwdAorQ09ORklHQUdFTlQgJ1tzbm1wXScgdGxzQWxnb3JpdGhtcyBESEUtUlNBLUFFUzI1Ni1TSEE6QUVTMjU2LVNIQTpERVMtQ0JDMy1TSEEKKworRkxBR1M9Ii1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorCisjIHN0YXJ0IHVwIHRoZSBhZ2VudAorU1RBUlRBR0VOVAorCisjIGVuc3VyZSB3ZSBjYW4gYWNjZXNzIGl0IHZpYSBzdGFuZGFyZCBhbGdvcml0aG1zIG9uIHRoZSBjbGllbnQgc2lkZQorRE9TRVRURVNUIGRlZmF1bHRBbGdzICIkRkxBR1MiCisKKyMgbGltaXQgdGhlIGNsaWVudCB0byB0aGUgc2FtZSBzZXQKK0NPTkZJR0FQUCB0bHNBbGdvcml0aG1zIERIRS1SU0EtQUVTMjU2LVNIQTpBRVMyNTYtU0hBOkRFUy1DQkMzLVNIQQorCisjIGFuZCB0ZXN0CitET1NFVFRFU1Qgc3BlY2lmaWNBbGdzICIkRkxBR1MiCisKKyMgZHJvcCBvbmUgY2lwaGVyCitDT05GSUdBUFAgdGxzQWxnb3JpdGhtcyBESEUtUlNBLUFFUzI1Ni1TSEE6QUVTMjU2LVNIQQorCisjIGFuZCB0ZXN0CitET1NFVFRFU1Qgb25seUFlczI1NlNoYSAiJEZMQUdTIgorCisjIGFuZCBmaW5hbGx5IGVuc3VyZSB3ZSBjYW4gZ2V0IGJhY2sgdG8gd29ya2luZyBhZ2FpbgorQ09ORklHQVBQIHRsc0FsZ29yaXRobXMgREhFLVJTQS1BRVMyNTYtU0hBOkFFUzI1Ni1TSEEKK0RPU0VUVEVTVCB3b3Jrc0FnYWluICIkRkxBR1MiCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBET05FCisKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjc0MDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybApAQCAtMCwwICsxLDk4IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIHRoaXMgZmlsZSBjb250YWlucyB0ZXN0cyBjb21tb24gdG8gYm90aCB0bHMgYW5kIGR0bHMgdXNhZ2VzCisKK1RMU0RJUj0kU05NUF9UTVBESVIvdGxzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENyZWF0ZSB0aGUgY2VydGlmaWNhdGVzCisKKyMgY3JlYXRlIHRoZSBjYQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworCisjIHNubXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBkIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXBkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlcjIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGFwcDIgLS1jbiAndGVzdHVzZXIyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSMkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcDIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSMkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlcjIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29uZmlndXJlIHRoZSAuY29uZiBmaWxlcworCitDT05GSUdBUFAgc2VydmVyQ2VydCAkU0VSVkVSRlAKKworIyBjb21tb24gbmFtZSBtYXBwaW5ncworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwICAkVEVTVFVTRVIyRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlcjIgYXV0aHByaXYKKworQ1JMRklMRT0kU05NUF9UTVBESVIvY3JsZmlsZS5wZW0KKworIyBjb25maWd1cmUgdGhlIENSTCBsb2NhdGlvbnMKK0NPTkZJR0FHRU5UICdbc25tcF0nIHg1MDljcmxmaWxlICRDUkxGSUxFCitDT05GSUdBUFAgICAnW3NubXBdJyB4NTA5Y3JsZmlsZSAkQ1JMRklMRQorCitDUkxDQUNNRD0iZW52IERJUj0kVExTRElSIENOPWNhLW5ldC1zbnAub3JnIG9wZW5zc2wgY2EiCitDUkxBUkdTPSItY29uZmlnICRUTFNESVIvLm9wZW5zc2wuY29uZiAta2V5ZmlsZSAkVExTRElSL3ByaXZhdGUvY2EtbmV0LXNubXAub3JnLmtleSAtY2VydCAkVExTRElSL2NhLWNlcnRzL2NhLW5ldC1zbm1wLm9yZy5jcnQiCisKKyMgZ2VuZXJhdGUgdGhlIGluaXRpYWwgQ1JMCit0b3VjaCAkVExTRElSLy5pbmRleAorZWNobyAiMDEiID4gJFRMU0RJUi8uY3JsbnVtYmVyCitDQVBUVVJFICIkQ1JMQ0FDTUQgLWdlbmNybCAkQ1JMQVJHUyAtb3V0ICRDUkxGSUxFIgorCisjCisjIHB1dCB0aGUgc2Vjb25kIGNsaWVudCBpbnRvIHRoZSBDUkwgYW5kIGl0IHNob3VsZG4ndCB3b3JrCisjCitDQVBUVVJFICIkQ1JMQ0FDTUQgLXJldm9rZSAkVExTRElSL2NlcnRzL3NubXBhcHAyLmNydCAkQ1JMQVJHUyAtb3V0ICRDUkxGSUxFIgorQ0FQVFVSRSAiJENSTENBQ01EIC1nZW5jcmwgJENSTEFSR1MgLW91dCAkQ1JMRklMRSIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1biB0aGUgYWN0dWFsIGxpc3Qgb2YgdGVzdHMKKyMKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItRHRscyAtT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKK0FHRU5UX0ZMQUdTPSItRHRscyIKK1NUQVJUQUdFTlQKKworIyB1c2luZyB1c2VyIDEgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorQ0FQVFVSRSAic25tcGdldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAgICAgICAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworIyB1c2luZyB1c2VyIDIgc2hvdWxkIG5vdyBmYWlsCitDQVBUVVJFICJzbm1wZ2V0IC1UIG91cl9pZGVudGl0eT1zbm1wYXBwMiAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS0NPVU5UICAwICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorQ0hFQ0tBR0VOVCAgImNlcnRpZmljYXRlIHJldm9rZWQiCisKKyMKKyMgbm93IHB1dCB0aGUgc2VydmVyJ3MgY2VydCBpbnRvIHRoZSBjbGllbnQgY3JsIGZpbGUKKyMKK0NBUFRVUkUgIiRDUkxDQUNNRCAtcmV2b2tlICRUTFNESVIvY2VydHMvc25tcGQuY3J0ICRDUkxBUkdTIgorQ0FQVFVSRSAiJENSTENBQ01EIC1nZW5jcmwgJENSTEFSR1MgLW91dCAkQ1JMRklMRSIKKworIyB1c2VyIDEgc2hvdWxkIG5vdyBmYWlsIG9uIHRoZSBjbGllbnQgc2lkZQorQ0FQVFVSRSAic25tcGdldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAgICAgICAiY2VydGlmaWNhdGUgcmV2b2tlZCIKKworIyBjbGVhbnVwCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYzM0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKK1NLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDRVJUSUZJQ0FURSBTRVRVUAorIworCisjIHByb2R1Y2UgdGhlIGNlcnRpZmljYXRlcyB0byB1c2UKKworIyBzbm1wdHJhcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXB0cmFwZCAgIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitUUkFQREZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcHRyYXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVFJBUERGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcHRyYXBkIGNlcnRpZmljYXRlIgorCisjIHNubXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAgIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXBkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmF0aW9uCisKKyMgc25tcGQKK0NPTkZJR0FHRU5UIHRyYXBzZXNzIC1DaSAtVCBvdXJfaWRlbnRpdHk9JFRFU1RVU0VSRlAgLVQgdGhlaXJfaWRlbnRpdHk9JFRSQVBERlAgICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9CitDT05GSUdBR0VOVCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorQ09ORklHQUdFTlQgCSAgICAgY2VydFNlY05hbWUgICAgICA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgICAgICAgICAgcnd1c2VyICAgICAgICAgICAtcyB0c20gdGVzdHVzZXIKKworIyBzbm1wdHJhcGQKK0NPTkZJR1RSQVBEICdbc25tcF0nIHNlcnZlckNlcnQgJFRSQVBERlAKK0NPTkZJR1RSQVBEIAkgICAgIGNlcnRTZWNOYW1lICAgICAgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR1RSQVBEIAkgICAgIGF1dGh1c2VyICAgICAgICAgbG9nIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorQ09ORklHVFJBUEQgICAgICAgICAgYWdlbnR4c29ja2V0ICAgICAvZGV2L251bGwKKworIyBnZW5lcmFsCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTVEFSVFRSQVBECisKKyMgaW5pdGlhbGl6ZSBvbmx5IHRoZSBleGFtcGxlIG1pYiwgYW5kIG5vdCB0aGUgbm90aWZpY2F0aW9uIG1pYiBzdHVmZgorQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtRGV4YW1wbGUsaGVhZGVyX2dlbmVyaWMiCitTVEFSVEFHRU5UCisKKyNERUxBWQorQ0FQVFVSRSAic25tcHNldCAtVCB0aGVpcl9pZGVudGl0eT1zbm1wZCAtVCBvdXJfaWRlbnRpdHk9c25tcGFwcCAtT24gLXQgMyAtciAwICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjguMCBpIDEiCisKK1NUT1BBR0VOVAorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0NOU2Vzc2lvbiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQ05TZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTYxYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0NOU2Vzc2lvbgpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjaGVja25hbWV0eXBlPSItLXNhbiIKK2NoZWNrbmFtZXByZWZpeD0iRE5TOiIKKworLiBTVGxzU2VydmVyU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNOYW1lIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNOYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODRkYTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc05hbWUKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2hlY2tuYW1ldHlwZT0iLS1jbiIKK2NoZWNrbmFtZXByZWZpeD0iIgorCisuIFNUbHNTZXJ2ZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0YTBiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NoZWNrbmFtZXR5cGU9Ii0tc2FuIgorY2hlY2tuYW1lcHJlZml4PSJETlM6IgorCisuIFNUbHNTZXJ2ZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuU2Vzc2lvbiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuU2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWE2MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW5TZXNzaW9uCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NoZWNrbmFtZXR5cGU9Ii0tc2FuIgorY2hlY2tuYW1lcHJlZml4PSJETlM6IgorCisuIFNUbHNTZXJ2ZXJTZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlciBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODAwMmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlcgpAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIGNyZWF0ZSBhIENBCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EtbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQUZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYS1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKKyMgY3JlYXRlIGEgc2VydmVyIGNlcnRpZmljYXRlIHVzaW5nIHRoZSBDQSBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAkY2hlY2tuYW1ldHlwZSAke2NoZWNrbmFtZXByZWZpeH1hLmIuZXhhbXBsZS5jb20gJE5TQ0VSVEFSR1MKK1NOTVBERlA9YCROU0NFUlQgc2hvd2NlcnQgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICROU0NFUlRBUkdTYAorCitDT05GSUdBR0VOVCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTTk1QREZQCisKKyMgY3JlYXRlIGEgdXNlciBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKK0NPTkZJR0FHRU5UICBjZXJ0U2VjTmFtZSAxMCAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CisKK0NPTkZJR0FQUCAgIGNsaWVudENlcnQgIAkgICRURVNUVVNFUkZQCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCisKKyMgc3RhcnQgdXAgdGhlIGFnZW50CitTVEFSVEFHRU5UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUG9zaXRpdmUgdGVzdHMKKyMgICAgKHNob3VsZCB3b3JrKQorCisjIGVuc3VyZSB3ZSBjYW4gYWNjZXNzIGl0IHZpYSBhIGRpcmVjdCBGUCBjaGVjaworRE9TRVRURVNUIGZpbmdlcnByaW50SWRlbnRpdHkgIi1UIHRoZWlyX2lkZW50aXR5PSRTTk1QREZQICRGTEFHUyIKKworIyBlbnN1cmUgd2UgY2FuIGFjY2VzcyBpdCB2aWEgYSBmaWxlIGJhc2VkIGlkZW50aXR5IGNoZWNrCitET1NFVFRFU1QgZmlsZW5hbWVJZGVudGl0eSAiLVQgdGhlaXJfaWRlbnRpdHk9c25tcGQgJEZMQUdTIgorCisjIGVuc3VyZSB3ZSBjYW4gYWNjZXNzIGl0IHZpYSB0cnVzdGluZyB0aGVpciBDQSBjZXJ0aWZpY2F0ZSBhbmQgYQorIyBtYXRjaGluZyBjb21tb25hbWUgCitET1NFVFRFU1QgaG9zdG5hbWVJZGVudGl0eSAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAtVCB0aGVpcl9ob3N0bmFtZT1hLmIuZXhhbXBsZS5jb20gJEZMQUdTIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5lZ2F0aXZlIHRlc3RzCisjICAgIChzaG91bGQgZmFpbCkKKworIyBpZiB3ZSBkb24ndCBsb2FkIHRoZSBDQSBjZXJ0aWZpY2F0ZSB3ZSBzaG91bGRuJ3QgY29ubmVjdAorRE9GQUlMU0VUVEVTVCBub1RydXN0Q0FDZXJ0ICAiLVQgdGhlaXJfaG9zdG5hbWU9YS5iLmV4YW1wbGUuY29tICRGTEFHUyIKKworIyBpZiB3ZSBzcGVjaWZ5IGEgZGlmZmVyZW50IGhvc3RuYW1lIHdlIHNob3VsZCBmYWlsIGhvc3RuYW1lIHRlc3QKKyMgKCJsb2NhbGhvcyIgd2l0aG91dCB0aGUgInQiIGlzIGludGVudGlvbmFsIGhlcmUpCitET0ZBSUxTRVRURVNUIGluY29ycmVjdE5hbWVBLkIuRXhhbXBsZS5DbyAgIi1UIHRoZWlyX2hvc3RuYW1lPWEuYi5leGFtcGxlLmNvICRGTEFHUyIKK0RPRkFJTFNFVFRFU1QgaW5jb3JyZWN0TmFtZUEuQi5FeGFtcGxlLkNvbXQgICItVCB0aGVpcl9ob3N0bmFtZT1hLmIuZXhhbXBsZS5jb210ICRGTEFHUyIKKworIyBpZiB3ZSBzcGVjaWZ5IHRoZSBDQSBjZXJ0J3MgYnV0IGRvbid0IHNwZWNpZnkgdGhlIGhvc3RuYW1lLCBpdAorIyBzaG91bGQgZmFpbCAodGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgaWYgd2UgcHVsbCB0aGUgaG9zdG5hbWUKKyMgZnJvbSB0aGUgdHJhbnNwb3J0IHNwZWNpZmllcikKK0RPRkFJTFNFVFRFU1QgY2VydFdpdGhvdXRIb3N0ICAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAkRkxBR1MiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2lsZGNhcmQgdGVzdHMKKyMKK0RPU0VUVEVTVCB3aWxkY2FyZE1hdGNoICItVCB0cnVzdF9jZXJ0PSRDQUZQIC1UIHRoZWlyX2hvc3RuYW1lPSouYi5leGFtcGxlLmNvbSAkRkxBR1MiCisKK0RPRkFJTFNFVFRFU1Qgbm9Eb3VibGVXaWxkY2FyZCAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAtVCB0aGVpcl9ob3N0bmFtZT0qLmV4YW1wbGUuY29tICRGTEFHUyIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERPTkUKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24gYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNmNjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbgpAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIHRoaXMgaXMgdXN1YWxseSBzb21ldGhpbmcgbGlrZSAibG9jYWxob3N0OiIsIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlIDoKK09VUkhPU1Q9YGVjaG8gJFNOTVBfVEVTVF9ERVNUIHwgc2VkICdzLzouKi8vJ2AKKworIyBjcmVhdGUgYSBDQQorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQUZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EtbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCisjIGNyZWF0ZSBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB1c2luZyB0aGUgQ0EgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgJGNoZWNrbmFtZXR5cGUgJHtjaGVja25hbWVwcmVmaXh9JE9VUkhPU1QgJE5TQ0VSVEFSR1MKK1NOTVBERlA9YCROU0NFUlQgc2hvd2NlcnQgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICROU0NFUlRBUkdTYAorCitDT05GSUdBR0VOVCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTTk1QREZQCisKKyMgY3JlYXRlIGEgdXNlciBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKK0NPTkZJR0FHRU5UICBjZXJ0U2VjTmFtZSAxMCAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CisKK0NPTkZJR0FQUCAgIGNsaWVudENlcnQgIAkgICRURVNUVVNFUkZQCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCisKKyMgc3RhcnQgdXAgdGhlIGFnZW50CitTVEFSVEFHRU5UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUG9zaXRpdmUgdGVzdHMKKyMgICAgKHNob3VsZCB3b3JrKQorCisjIGVuc3VyZSB3ZSBjYW4gYWNjZXNzIGl0IHZpYSBhIGRpcmVjdCBGUCBjaGVjaworRE9TRVRURVNUIGZpbmdlcnByaW50SWRlbnRpdHkgIi1UIHRoZWlyX2lkZW50aXR5PSRTTk1QREZQICRGTEFHUyIKKworIyBkaXJlY3RseSBzcGVjaWZ5IHRoZSBob3N0IG5hbWUKK0RPU0VUVEVTVCBob3N0bmFtZUlkZW50aXR5ICItVCB0cnVzdF9jZXJ0PSRDQUZQIC1UIHRoZWlyX2hvc3RuYW1lPSRPVVJIT1NUICRGTEFHUyIKKworIyBUaGlzIHNob3VsZCBhbHNvIHdvcmsgYmVjYXVzZSB3ZToKKyMgLSB0cnVzdCB0aGUgQ0EgY2VydAorIyAtIHVzZSBhIHNlc3Npb24gZGVzdG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBjZXJ0aWZpY2F0ZQorRE9TRVRURVNUIHNlc3Npb25uYW1lSWRlbnRpdHkgIi1UIHRydXN0X2NlcnQ9JENBRlAgJEZMQUdTIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERPTkUKKworI3NsZWVwIDUwMAorU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlciBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGM0MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlcgpAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDRVJUSUZJQ0FURSBTRVRVUAorIworCisjIHByb2R1Y2UgdGhlIGNlcnRpZmljYXRlcyB0byB1c2UKKworIyBzbm1wdHJhcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXB0cmFwZGQgICAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wdHJhcGRkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXB0cmFwZGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMgQ0EgY2VydGlmaWNhdGUKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYS1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDk6IENBIHNpZ25lZCB1c2VyIGNlcnQKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGNhdXNlciAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXI5QHRlc3QubmV0LXNubXAub3JnIC0tZW1haWwgdXNlcjlAdGVzdC5uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQVVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhdXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhdXNlciBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQUdFTlQgQ09ORklHVVJBVElPTgorIworCitDT05GSUdUUkFQRCAnW3NubXBdJyBkZWJ1Z1Rva2VucyB0c20KKyMgLHRscyxzc2wsY2VydCx0c20KK0NPTkZJR1RSQVBEICdbc25tcF0nIGRvRGVidWdnaW5nIDEKK0NPTkZJR1RSQVBEICdbc25tcF0nIHNlcnZlckNlcnQgJFNFUlZFUkZQCisKK0NPTkZJR1RSQVBEICdbc25tcF0nIHRydXN0Q2VydCAkQ0FGUAorCisjIGNvbW1vbiBuYW1lIG1hcHBpbmdzCitDT05GSUdUUkFQRCBjZXJ0U2VjTmFtZSA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorCitDT05GSUdUUkFQRCBjZXJ0U2VjTmFtZSAxMDAgJENBRlAgICAgICAgIC0tcmZjODIyCisKK0NPTkZJR0FQUCAgIHNlcnZlckNlcnQgIAkgICRTRVJWRVJGUAorQ09ORklHQVBQICAgZGVmU2VjdXJpdHlNb2RlbCAgICAgIHRzbQorCitDT05GSUdUUkFQRCAgYXV0aHVzZXIgbG9nIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorCisjIHRoaXMgZmlsZSBjb250YWlucyB0ZXN0cyBjb21tb24gdG8gYm90aCB0bHMgYW5kIGR0bHMgdXNhZ2VzCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLUR0bHMgLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIgorCitTVEFSVFRSQVBECisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUE9TVC1UUkFQRC1TVEFSVFVQIENlcnRpZmljYXRlcworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wdHJhcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcHRyYXAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFDVFVBTCBURVNUUworIworIyBSdW4gdGhlIGFjdHVhbCBsaXN0IG9mIHRlc3RzCisjCisKKyMgdXNpbmcgdXNlciAxIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUKKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0RPVFJBUFRFU1QgdXNlcjFUcmFwVGVzdCAiJEZMQUdTIgorCisjIGZhaWxpbmcgdXNpbmcgdGhlIENBIHNpZ25lZCBjZXJ0IHdpdGhvdXQKK0RPRkFJTFRSQVBURVNUIHVzZXIyVW5rbm93blVzZXIgIi1UIG91cl9pZGVudGl0eT1zbm1wdHJhcCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciAxIC0gc2VuZGluZyBhbiBJTkZPUk0KKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0RPVFJBUFRFU1QgdXNlcjFJbmZvcm1UZXN0ICItQ2kgJEZMQUdTIgorCitTVE9QVFJBUEQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjAzYTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzCkBAIC0wLDAgKzEsMjYyIEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDRVJUSUZJQ0FURSBTRVRVUAorIworCisjIHByb2R1Y2UgdGhlIGNlcnRpZmljYXRlcyB0byB1c2UKKworIyBzbm1wZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgICAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDEuNQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcDIgLS1jbiAndGVzdHVzZXIyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSMkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcDIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSMkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IG90aGVydXNlciAtLWNuICdvdGhlcnVzZXInICAkTlNDRVJUQVJHUworT1RIRVJVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBvdGhlcnVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJE9USEVSVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBvdGhlcnVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlciAzCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBpbnZhbGlkdXNlciAtLWNuICdpbnZhbGlkdXNlcicgICROU0NFUlRBUkdTCitJTlZBTElEVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgaW52YWxpZHVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJElOVkFMSURVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIG90aGVydXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDQKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHVubWFwcGVkIC0tY24gJ3VubWFwcGVkJyAgJE5TQ0VSVEFSR1MKK1VOTUFQUEVERlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiB1bm1hcHBlZCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVU5NQVBQRURGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdW5tYXBwZWQgY2VydGlmaWNhdGUiCisKKyMgdXNlciA1CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBtYXBwZWR1c2VyIC0tY24gJ21hcHBlZHVzZXInICAkTlNDRVJUQVJHUworTUFQUEVEVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgbWFwcGVkdXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkTUFQUEVEVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBtYXBwZWR1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgNjogU0FOIGVtYWlsCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBlbWFpbCAtLXNhbiBlbWFpbDpmb29iYXJ1c2VyQGV4YW1wbGUuY29tICAkTlNDRVJUQVJHUworRU1BSUxVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBlbWFpbCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkRU1BSUxVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGVtYWlsIGNlcnRpZmljYXRlIgorCisjIHVzZXIgNzogU0FOIGRucworQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgZG5zIC0tc2FuIEROUzpmb29iYXIuZXhhbXBsZS5jb20gICROU0NFUlRBUkdTCitETlNVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBkbnMgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJEROU1VTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgZG5zIGNlcnRpZmljYXRlIgorCisjIHVzZXIgODogU0FOIElQdjQKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGlwYWRkciAtLXNhbiBJUDoxMjcuMC4wLjEgICROU0NFUlRBUkdTCitJUFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGlwYWRkciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkSVBVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGlwYWRkciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDguMTogIGFmaWxlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBhZmlsZSAtLWNuIGFmaWxldXNlciAkTlNDRVJUQVJHUworQUZJTEVVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBhZmlsZSAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQUZJTEVVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGFmaWxlIGNlcnRpZmljYXRlIgorCisKKyMgQ0EgY2VydGlmaWNhdGUKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYS1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDk6IENBIHNpZ25lZCB1c2VyIGNlcnQKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGNhdXNlciAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXI5QHRlc3QubmV0LXNubXAub3JnIC0tZW1haWwgdXNlcjlAdGVzdC5uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQVVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhdXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhdXNlciBjZXJ0aWZpY2F0ZSIKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgY2FkaXJlY3Q5YiAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXI5YkB0ZXN0Lm5ldC1zbm1wLm9yZyAtLWVtYWlsIHVzZXI5YkB0ZXN0Lm5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRElSRUNURlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYWRpcmVjdDliICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQURJUkVDVEZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYWRpcmVjdCBjZXJ0aWZpY2F0ZSIKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EyLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBMkZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhMi1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBMkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYTItbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBjYWRpcmVjdDljIC0td2l0aC1jYSBjYTItbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXI5Y0B0ZXN0Lm5ldC1zbm1wLm9yZyAtLWVtYWlsIHVzZXI5Y0B0ZXN0Lm5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRElSRUNUOUNGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhZGlyZWN0OWMgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRElSRUNUOUNGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2FkaXJlY3Q5YyBjZXJ0aWZpY2F0ZSIKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgY2FkaXJlY3Q5ZCAtLXdpdGgtY2EgY2EyLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyOWRAdGVzdC5uZXQtc25tcC5vcmcgLS1lbWFpbCB1c2VyOWRAdGVzdC5uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQURJUkVDVDlERlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYWRpcmVjdDlkICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQURJUkVDVDlERlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhZGlyZWN0OWQgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFHRU5UIENPTkZJR1VSQVRJT04KKyMKKworQ09ORklHQUdFTlQgJ1tzbm1wXScgZGVidWdUb2tlbnMgdHNtCisjICx0bHMsc3NsLGNlcnQsdHNtCitDT05GSUdBR0VOVCAnW3NubXBdJyBkb0RlYnVnZ2luZyAxCitDT05GSUdBR0VOVCAnW3NubXBdJyBsb2dUaW1lc3RhbXAgMQorQ09ORklHQUdFTlQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU0VSVkVSRlAKKworQ09ORklHQUdFTlQgJ1tzbm1wXScgdHJ1c3RDZXJ0ICRDQUZQCitDT05GSUdBR0VOVCAnW3NubXBdJyB0cnVzdENlcnQgJENBRElSRUNUOUNGUAorCisjIGNvbW1vbiBuYW1lIG1hcHBpbmdzCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAgJFRFU1RVU0VSMkZQICAgIC0tY24KK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDExICRPVEhFUlVTRVJGUCAgICAtLWNuCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMiAkSU5WQUxJRFVTRVJGUCAgLS1jbgorCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAyMCAkTUFQUEVEVVNFUkZQIC0tc24gYWZ0ZXJtYXBwaW5nCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAyMSAkRU1BSUxVU0VSRlAgIC0tcmZjODIyCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAyMiAkRE5TVVNFUkZQICAgIC0tZG5zCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAyMyAkSVBVU0VSRlAgICAgIC0taXAKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDI0IGFmaWxlICAgICAgICAgLS1jbgorCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMDAgJENBRlAgICAgICAgIC0tcmZjODIyCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMDEgJENBRElSRUNURlAgIC0tc24gY2F1c2VyZGlyZWN0bWFwCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMDIgJENBRElSRUNUOUNGUCAgLS1zbiBjYXVzZXJkaXJlY3Q5Y21hcAorIyBpbnRlbnRpb25hbGx5IG5vdCBtYXBwZWQ6CisjQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAwMSAkQ0FESVJFQ1Q5REZQICAtLXNuIGNhdXNlcmRpcmVjdDlkbWFwCisKKyMgKioqIElOVEVOVElPTkFMTFkgTk9UIE1BUFBJTkcgQVQgQUxMOiAqKioKKyMgQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAwMCAkVU5NQVBQRURGUCAuLi4uCisKK0NPTkZJR0FQUCAgIHNlcnZlckNlcnQgIAkgICRTRVJWRVJGUAorQ09ORklHQVBQICAgZGVmU2VjdXJpdHlNb2RlbCAgICAgIHRzbQorQ09ORklHQVBQICAgbG9nVGltZXN0YW1wICAgICAgICAgIDEKKworQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyMiBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gb3RoZXJ1c2VyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBhZnRlcm1hcHBpbmcgYXV0aHByaXYKKworQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gZm9vYmFydXNlckBleGFtcGxlLmNvbSBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gZm9vYmFyLmV4YW1wbGUuY29tIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSAxMjcuMC4wLjEgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHVzZXI4QHRlc3QubmV0LXNubXAub3JnIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB1c2VyOUB0ZXN0Lm5ldC1zbm1wLm9yZyBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdXNlcjEwQHRlc3QubmV0LXNubXAub3JnIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBhZmlsZXVzZXIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGNhdXNlcmRpcmVjdG1hcCBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gY2F1c2VyZGlyZWN0OWNtYXAgYXV0aHByaXYKKworCisjIHRoaXMgZmlsZSBjb250YWlucyB0ZXN0cyBjb21tb24gdG8gYm90aCB0bHMgYW5kIGR0bHMgdXNhZ2VzCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLUR0bHMgLXYzIC1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorCitTVEFSVEFHRU5UCisKKyMgc2hvdWxkbid0IGhhdmUgY29uZmlnIGVycm9ycworQ0hFQ0tBR0VOVENPVU5UIDAgIjogRXJyb3I6IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVYVEVOREVEIENFUlRJRklDQVRFIFNFVFVQCisjCisjIFBlcmZvcm0gbW9yZSBzdGVwcyBvZiBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIG9jY3VyICphZnRlciogdGhlCisjIGFnZW50IGhhcyBzdGFydGVkIGluIG9yZGVyIHRvIHByZXZlbnQgaXQgZnJvbSBoYXZpbmcgc2VlbiB0aGVzZQorIyBmaWxlcyBhaGVhZCBvZiB0aW1lLgorCisjIHRoaXMgdXNlcidzIGZpbmdlcnByaW50IHNob3VsZCBub3QgYmUgcmVjb2duaXplZCAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHVua25vd251c2VyIC0tc2FuIGVtYWlsOnVua25vd251c2VyQGV4YW1wbGUuY29tICAkTlNDRVJUQVJHUworVU5LTk9XTlVTRVI9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiB1bmtub3dudXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVU5NQVBQRURGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdW5rbm93bnVzZXIgY2VydGlmaWNhdGUiCisKKyMgdGhpcyB1c2VyJ3MgZmluZ2VycHJpbnQgc2hvdWxkIG5vdCBiZSBkaXJlY3RseSByZWNvZ25pemVkLCBidXQgaXQncworIyBDQSBzaG91bGQuCisKKyMgdXNlciAxMDogQ0Egc2lnbmVkIGNlcnQKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC1EIC10IHVua25vd25jYXVzZXIgLS1jbiB1bmtub3duY2F1c2VyQG5ldC1zbm1wLm9yZyAtLWVtYWlsIHVua25vd25jYXVzZXJAbmV0LXNubXAub3JnICAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXIxMEB0ZXN0Lm5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHUworVU5LTk9XTkNBVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgdW5rbm93bmNhdXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVU5LTk9XTkNBVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB1bmtub3duY2F1c2VyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFDVFVBTCBURVNUUworIworIyBSdW4gdGhlIGFjdHVhbCBsaXN0IG9mIHRlc3RzCisjCisKKyMgdXNpbmcgdXNlciAxIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUKKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0RPU0VUVEVTVCB1c2VyMVNubXBBcHAgIiRGTEFHUyIKKworIyBub3cgcmVydW4gdGhlIHRlc3QgYWZ0ZXIgc3BlY2lmeWluZyBvdXIgZGVmYXVsdCB1c2luZyB0aGUgKHNhbWUpIGZpbmdlcnByaW50CitDT05GSUdBUFAgICBjbGllbnRDZXJ0ICAJICAkVEVTVFVTRVIyRlAKK0RPU0VUVEVTVCB1c2VyMUNsaWVudFB1YiAiJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgMiAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlIHdpdGggYSBkaXJlY3QgLVQgRlAgcmVxdWVzdAorRE9TRVRURVNUIHVzZXIyRGFzaFRGUEZsYWcgIi1UIG91cl9pZGVudGl0eT0kT1RIRVJVU0VSRlAgJEZMQUdTIgorCitDSEVDS0FHRU5UQ09VTlQgNCAgIm90aGVydXNlciIKKworIyB1c2luZyB1c2VyIDIsIHNwZWNpZnlpbmcgdGhlIGZpbGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBmaW5nZXJwcmludAorRE9TRVRURVNUIHVzZXIyRGFzaFRGaWxlRmxhZyAiLVQgb3VyX2lkZW50aXR5PW90aGVydXNlciAkRkxBR1MiCisKK0NIRUNLQUdFTlRDT1VOVCA4ICAib3RoZXJ1c2VyIgorCisjIHVzaW5nIHVzZXIgMyAtIGFuIGludmFsaWQgY2VydGlmaWNhdGUgKG1hcHBlZCBidXQgbm90IGF1dGhvcml6ZWQpCitET0ZBSUxTRVRURVNUICJpbnZhbGlkVW5hdXRob3JpemVkQ2VydCIgIi1UIG91cl9pZGVudGl0eT0kSU5WQUxJRFVTRVJGUCAkRkxBR1MiCisKK0NIRUNLICJhdXRob3JpemF0aW9uRXJyb3IiCisKKyMgdXNpbmcgdXNlciA0IC0gYW4gdW5tYXBwZWQgY2VydGlmaWNhdGUKK0RPRkFJTFNFVFRFU1QgInVubWFwcGVkQ2VydGlmaWNhdGUiICItVCBvdXJfaWRlbnRpdHk9JFVOTUFQUEVERlAgJEZMQUdTIgorCitDSEVDSyAiZmFpbGVkIHJmYzUzNDMiCisKKyMgQ2hlY2sgKnRoZWlyKiBjZXJ0aWZpY2F0ZSB3aXRoIGEgZGlmZmVyZW50IG9uZSB0aGFuIGV4cGVjdGVkOyBzaG91bGQgZmFpbAorRE9GQUlMU0VUVEVTVCAiaW5jb3JlY3RTZXJ2ZXJDZXJ0aWZpY2F0ZSIgIi1yIDAgLVQgb3VyX2lkZW50aXR5PSRPVEhFUlVTRVJGUCAtVCB0aGVpcl9pZGVudGl0eT0kT1RIRVJVU0VSRlAgJEZMQUdTIgorCitDSEVDSyAiZmFpbGVkIHRvIHZlcmlmeSBzc2wgY2VydGlmaWNhdGUiCisKKyMgdXNpbmcgdXNlciA1IC0gYSBjb21wbGV0ZWx5IHJlbWFwcGVkIGNlcnRpZmljYXRlIChkaXJlY3Qgc3BlY2lmaWVkIHNlY25hbWUpCitET1NFVFRFU1QgdXNlcjVSZW1hcHBlZFNlY25hbWUgIi1UIG91cl9pZGVudGl0eT0kTUFQUEVEVVNFUkZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDYgLSBhIHN1YmplY3RBbHROYW1lPWVtYWlsIGNlcnRpZmljYXRlIG1hcHBpbmcKK0RPU0VUVEVTVCB1c2VyNlNBTkVtYWlsICItVCBvdXJfaWRlbnRpdHk9JEVNQUlMVVNFUkZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDcgLSBhIHN1YmplY3RBbHROYW1lPWRucyBjZXJ0aWZpY2F0ZSBtYXBwaW5nCitET1NFVFRFU1QgdXNlcjdTQU5ETlMgIi1UIG91cl9pZGVudGl0eT0kRE5TVVNFUkZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDggLSBhIHN1YmplY3RBbHROYW1lPWlwdjQgY2VydGlmaWNhdGUgbWFwcGluZworRE9TRVRURVNUIHVzZXI4U0FOSVAgIi1UIG91cl9pZGVudGl0eT0kSVBVU0VSRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOCAtIHRlc3QgdGhhdCBjZXJ0bWFwcGluZyB3b3JrcyBmcm9tIGEgbG9jYWwgZmlsZW5hbWUKK0RPU0VUVEVTVCBhZmlsZXVzZXIgIi1UIG91cl9pZGVudGl0eT1hZmlsZSAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA5IC0gYSBDQSBzaWduZWQgY2VydGlmaWNhdGUKK0RPU0VUVEVTVCB1c2VyOUNBU2lnbmVkQ2VydCAiLVQgb3VyX2lkZW50aXR5PSRDQVVTRVJGUCAtVCB0cnVzdF9jZXJ0PSRDQUZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDliIC0gYSBDQSBzaWduZWQgY2VydGlmaWNhdGUgd2l0aCBhIHVzZXItYmFzZWQgZnAgbWFwcGluZworRE9TRVRURVNUIHVzZXI5YkNBU2lnbmVkRGlyZWN0TWFwICItVCBvdXJfaWRlbnRpdHk9JENBRElSRUNURlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOWMgLSBhIENBMiBzaWduZWQgY2VydGlmaWNhdGUgd2l0aCBhIHVzZXItYmFzZWQgZnAgbWFwcGluZworRE9TRVRURVNUIHVzZXI5Y0NBU2lnbmVkRGlyZWN0TWFwICItVCBvdXJfaWRlbnRpdHk9JENBRElSRUNUOUNGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA5ZCAtIGEgQ0EyIHNpZ25lZCBjZXJ0aWZpY2F0ZSBubyB1c2VyLWJhc2VkIGZwIG1hcHBpbmcKK0RPRkFJTFNFVFRFU1QgdXNlcjlkQ0FTaWduZWREaXJlY3RNYXAgIi1UIG91cl9pZGVudGl0eT0kQ0FESVJFQ1Q5REZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIHVua25vd24gLSB0aGUgc2VydmVyIHdpbGwgbm90IGhhdmUgc2VlbiB0aGlzIGZpbmdlcnByaW50IGF0IGFsbAorQ0FQVFVSRSAic25tcGdldCAtVCBvdXJfaWRlbnRpdHk9JFVOS05PV05VU0VSIC1UIHRydXN0X2NlcnQ9JENBRlAgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjYuMCIKKworIyBkaWZmZXJlbnQgdHlwZXMgb2YgZmFpbHVyZSBtZXNzYWFnZXMgZm9yIHRscy9kdGxzLi4uCitpZiBbICRTTk1QX1RSQU5TUE9SVF9TUEVDID0gZHRsc3VkcCBdOyB0aGVuCisgICAgQ0hFQ0sgICAgICAgICAgICAgICJmYWlsZWQgcmZjNTM0MyBjb250ZXh0RW5naW5lSUQgcHJvYmluZyIKKyAgICBDSEVDS0FHRU5UQ09VTlQgIDEgIlRMUyBFcnJvcjogbm8gY2VydGlmaWNhdGUgcmV0dXJuZWQiCitlbHNlCisgICAgQ0hFQ0sgICAgICAgICAgICAgICJmYWlsZWQgdG8gc3NsX2Nvbm5lY3QiCisgICAgQ0hFQ0tBR0VOVENPVU5UICAxICJGYWlsZWQgU1NMX2FjY2VwdCIKK2ZpCisKKyMgdXNpbmcgdGhlIHVzZXIgd2l0aG91dCBhIGtub3duIGZpbmdlcnByaW50IGJ1dCB3aXRoIGEga25vd24gQ0EKK0RPU0VUVEVTVCB1c2VyTmV3RnJvbUNBICIgLVQgdHJ1c3RfY2VydD0kQ0FGUCAtVCBvdXJfaWRlbnRpdHk9JFVOS05PV05DQVVTRVJGUCAkRkxBR1MiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTg0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnMKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QVFJBUERfUE9SVAorZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKK2V4cG9ydCBORVRfU05NUF9DUlRfQ0ZHVE9PTD0iJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIgorTlNDRVJUPSJwZXJsICRTTk1QX0JBU0VESVIvLi4vLi4vLi4vbG9jYWwvbmV0LXNubXAtY2VydCAtSSIKK05TQ0VSVEFSR1M9Ii1DICRTTk1QX1RNUERJUiIKKworRE9TRVRURVNUKCkgeworICB2YWx1ZT0kMQorICBhcmdzPSQyCisKKyAgIyBTTk1QdjItTUlCOjpzeXNMb2NhdGlvbi4wCisgIENBUFRVUkUgInNubXBzZXQgJGFyZ3MgLjEuMy42LjEuMi4xLjEuNi4wIHMgJyR2YWx1ZSciCisKKyAgQ0FQVFVSRSAic25tcGdldCAkYXJncyAuMS4zLjYuMS4yLjEuMS42LjAiCisKKyAgQ0hFQ0sgIlNUUklORzogJyR2YWx1ZSciCit9CisKKworRE9GQUlMU0VUVEVTVCgpIHsKKyAgdmFsdWU9JDEKKyAgYXJncz0kMgorCisgICMgU05NUHYyLU1JQjo6c3lzTG9jYXRpb24uMAorICBDQVBUVVJFICJzbm1wc2V0ICRhcmdzIC4xLjMuNi4xLjIuMS4xLjYuMCBzICckdmFsdWUnIgorCisgIENBUFRVUkUgInNubXBnZXQgJGFyZ3MgLjEuMy42LjEuMi4xLjEuNi4wIgorCisgIENIRUNLQ09VTlQgMCAiJHZhbHVlIgorfQorCitET1RSQVBURVNUKCkgeworICB2YWx1ZT0kMQorICBhcmdzPSQyCisKKyAgIyBJRi1NSUI6OmxpbmtVcAorICBDQVBUVVJFICJzbm1wdHJhcCAkYXJncyAwIC4xLjMuNi4xLjYuMy4xLjEuNS40IHN5c3RlbS5zeXNDb250YWN0LjAgcyAkdmFsdWUiCisKKyAgQ0hFQ0tUUkFQRCAiU1RSSU5HOiAkdmFsdWUiCit9CisKK0RPRkFJTFRSQVBURVNUKCkgeworICB2YWx1ZT0kMQorICBhcmdzPSQyCisKKyAgIyBJRi1NSUI6OmxpbmtVcAorICBDQVBUVVJFICJzbm1wdHJhcCAkYXJncyAwIC4xLjMuNi4xLjYuMy4xLjEuNS40IHN5c3RlbS5zeXNDb250YWN0LjAgcyAkdmFsdWUiCisKKyAgQ0hFQ0tUUkFQRENPVU5UIDAgIiR2YWx1ZSIKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXggYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBmOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyB0aGlzIGZpbGUgY29udGFpbnMgdGVzdHMgY29tbW9uIHRvIGJvdGggdGxzIGFuZCBkdGxzIHVzYWdlcworCitleHBvcnQgTkVUX1NOTVBfQ1JUX0NGR1RPT0w9IiR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyIKK05TQ0VSVD0icGVybCAkU05NUF9CQVNFRElSLy4uLy4uLy4uL2xvY2FsL25ldC1zbm1wLWNlcnQiCitOU0NFUlRBUkdTPSItSSAtQyAkU05NUF9UTVBESVIiCisKK1RMU0RJUj0kU05NUF9UTVBESVIvdGxzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENyZWF0ZSB0aGUgY2VydGlmaWNhdGVzCisKKyMgY3JlYXRlIHRoZSBjYQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworCisjIHNubXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBkIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXBkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlcjIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGFwcDIgLS1jbiAndGVzdHVzZXIyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSMkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcDIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSMkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlcjIgY2VydGlmaWNhdGUiCisKK0NPTkZJR0FQUCBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwICAkVEVTVFVTRVIyRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSAkVFNNX1BSRUZJWDp0ZXN0dXNlcjIgYXV0aHByaXYKK0NPTkZJR0FHRU5UIHJvY29tbXVuaXR5IHB1YmxpYworCisjCisjIFN0YXJ0IHRoZSBhZ2VudAorIworQUdFTlRfRkxBR1M9Ii1EdHNtIHVkcDo5OTk5IgorRkxBR1M9Ii1PbiAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAiCitDSEVDSyAiLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wID0gSU5URUdFUjogZmFsc2UiCisKKyMgdXNpbmcgdXNlciAxIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUKKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0NBUFRVUkUgInNubXBnZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgICAgICAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyMgdXNpbmcgdXNlciAyIHNob3VsZCBub3cgZmFpbCBiZWNhdXNlIG5vIHByZWZpeCBpcyBhcHBsaWVkCitDQVBUVVJFICJzbm1wZ2V0IC1UIG91cl9pZGVudGl0eT1zbm1wYXBwMiAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCitDSEVDSyAiYXV0aG9yaXphdGlvbkVycm9yIgorCisjIHNldCB0aGUgVFNNIHByZWZpeCBzY2FsYXIgdG8gMSB0byB0dXJuIG9uIHByZWZpeGluZworQ0FQVFVSRSAic25tcHNldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wIGkgMSIKKworCisjIHVzaW5nIHVzZXIgMiBzaG91bGQgbm93IHdvcmsgYW5kIHRoZSBwcmVmaXggc2hvdWxkIGhhdmUgYmVlbiBhZGRlZAorIyB0byB0aGUgc2VjdXJpdHlOYW1lLCBzbyB0aGUgYWdlbnQgbm93IGFjY2VwdHMgaXQKK0NBUFRVUkUgInNubXBnZXQgLVQgb3VyX2lkZW50aXR5PXNubXBhcHAyIC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAgPSBJTlRFR0VSOiB0cnVlIgorCisjIHVzaW5nIHVzZXIgMSBzaG91bGQgbm93IGZhaWwgYmVjYXVzZSB0aGUgcHJlZml4IGhhcyBhZGRlZCB0byB0aGUKKyMgc2VjdXJpdHlOYW1lLCBzbyB0aGUgYWdlbnQgbm93IGFjY2VwdHMgaXQKK0NBUFRVUkUgInNubXBnZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorQ0hFQ0sgImF1dGhvcml6YXRpb25FcnJvciIKKworQ0FQVFVSRSAic25tcGdldCAtdiAxIC1jIHB1YmxpYyAxMjcuMC4wLjE6OTk5OSAuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAiCisKKyMgY2xlYW51cAorU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMUR0bHNVc2VyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxRHRsc1VzZXJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwY2FlZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMUR0bHNVc2VyX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCB1c2VyIGNlcnRpZmljYXRlIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzVXNlcnMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAyVGxzVXNlcl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMlRsc1VzZXJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZmUxMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMlRsc1VzZXJfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgdXNlciBjZXJ0aWZpY2F0ZSB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNVc2VycwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFEdGxzU2VydmVyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExRHRsc1NlcnZlcl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExRHRsc1NlcnZlcl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgc2VydmVyIGNlcnRpZmljYXRlIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNOYW1lCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMlRsc1NlcnZlcl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMlRsc1NlcnZlcl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlZmE5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEyVGxzU2VydmVyX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHNlcnZlciBjZXJ0aWZpY2F0ZSB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNOYW1lCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM0R0bHNTYW5fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNEdGxzU2FuX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRiM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNEdGxzU2FuX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBzZXJ2ZXIgU0FOIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNTYW4KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0VGxzU2FuX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0VGxzU2FuX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVlOGJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTRUbHNTYW5fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1Agc2VydmVyIFNBTiB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNTYW4KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE1RHRsc1NhblNlc3Npb25fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTVEdGxzU2FuU2Vzc2lvbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkNWZjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE1RHRsc1NhblNlc3Npb25fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHNlcnZlciBTQU4gdGVzdHMgdXNpbmcgc2Vzc2lvbiBkZXN0aG9zdAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc1NhblNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE2VGxzU2FuU2Vzc2lvbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNlRsc1NhblNlc3Npb25fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MWZjZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNlRsc1NhblNlc3Npb25fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1Agc2VydmVyIFNBTiB0ZXN0cyB1c2luZyBzZXNzaW9uIGRlc3Rob3N0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc1NhblNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3RHRsc0NOU2Vzc2lvbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN0R0bHNDTlNlc3Npb25fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZWVhNTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN0R0bHNDTlNlc3Npb25fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHNlcnZlciBjb21tb25OYW1lIHRlc3RzIHVzaW5nIHNlc3Npb24gZGVzdGhvc3QKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNDTlNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE4VGxzQ05TZXNzaW9uX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE4VGxzQ05TZXNzaW9uX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVhYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMThUbHNDTlNlc3Npb25fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1Agc2VydmVyIGNvbW1vbk5hbWUgdGVzdHMgdXNpbmcgc2Vzc2lvbiBkZXN0aG9zdAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNDTlNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxRHRsc1RyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFEdGxzVHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3YzdiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxRHRsc1RyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHRyYXAgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNUcmFwZFVzZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIyVGxzVHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMlRsc1RyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWVlMTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMlRsc1RyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgdHJhcCB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNUcmFwZFVzZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxRHRsc0FnZW50VHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMUR0bHNBZ2VudFRyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmZhYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMUR0bHNBZ2VudFRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIGFnZW50IHRyYXAgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNBZ2VudFRyYXAKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMyVGxzQWdlbnRUcmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMyVGxzQWdlbnRUcmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ0MDEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJUbHNBZ2VudFRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgYWdlbnQgdHJhcCB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNBZ2VudFRyYXAKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxRHRsc0NybF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MUR0bHNDcmxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYThlNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MUR0bHNDcmxfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIENSTCBIYW5kbGluZworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIC4vU0NybApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJUbHNDcmxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJUbHNDcmxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjNjMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MlRsc0NybF9zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBDUkwgSGFuZGxpbmcKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gLi9TQ3JsCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MUR0bHNDaXBoZXJzX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxRHRsc0NpcGhlcnNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYmJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MUR0bHNDaXBoZXJzX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBDaXBoZXIgU2VsZWN0aW9uCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gU0NpcGhlclRlc3RzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MlRsc0NpcGhlcnNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJUbHNDaXBoZXJzX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI4ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJUbHNDaXBoZXJzX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIENpcGhlciBTZWxlY3Rpb24KKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gU0NpcGhlclRlc3RzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM3ZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZQpAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIG92ZXIgSVBWNgorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU0lQVjZfRE9NQUlOCisKKyMgZW5zdXJlIHdlIGhhdmUgYSBsb2NhbGhvc3Q2IGVudHJ5CisKKyMgWFhYOiB0aGlzIHN0ZW1zIGZyb20gYnJva2VuIGlzc3VlcyBpbiBvcGVuc3NsIHRoYXQgcmVmdXNlIFs6OjFdOgorIyBzdHlsZSBhY2NlcHQgc3RyaW5ncyAoaXQgd29ya3MgZm9yIGNsaWVudCBjb25uZWN0aW9ucykuCitncmVwIGxvY2FsaG9zdDYgL2V0Yy9ob3N0cyA+IC9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ID0gMSBdIDsgdGhlbgorICAgIFNLSVAgVGhpcyB0ZXN0IHJlcXVpcmVzIGEgbG9jYWxob3N0NiBlbnRyeSBpbiAvZXRjL2hvc3RzCitmaQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKK1NOTVBfVEVTVF9ERVNUPSdsb2NhbGhvc3Q2OicKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiAuLi90cmFuc3BvcnRzL1N0bHN0ZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDBUbHNQZXJsLnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMFRsc1BlcmwudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjhlZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDBUbHNQZXJsLnQKQEAgLTAsMCArMSw4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBUTFMvVENQIFRlc3QKKworJGFnZW50YWRkcmVzcyA9ICJ0bHN0Y3A6bG9jYWxob3N0Ojk4NzUiOworJGZlYXR1cmUgPSAiTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTiI7CisKK2RvICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwiOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFEdGxzUGVybC50IGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFEdGxzUGVybC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTgwYzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMUR0bHNQZXJsLnQKQEAgLTAsMCArMSw4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBEVExTL1VEUCBUZXN0CisKKyRhZ2VudGFkZHJlc3MgPSAiZHRsc3VkcDpsb2NhbGhvc3Q6OTg3NSI7CiskZmVhdHVyZSA9ICJORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOIjsKKworZG8gIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCI7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMUR0bHNUc21QcmVmaXhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFEdGxzVHNtUHJlZml4X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg1YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFEdGxzVHNtUHJlZml4X3NpbXBsZQpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUU00gcHJlZml4aW5nIHN1cHBvcnQgZm9yIERUTFMvVURQCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCitUU01fUFJFRklYPWR0bHMKKworLiAuL1NUc21QcmVmaXgKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAyVGxzVHNtUHJlZml4X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAyVGxzVHNtUHJlZml4X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzYyZWVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJUbHNUc21QcmVmaXhfc2ltcGxlCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRTTSBwcmVmaXhpbmcgc3VwcG9ydCBmb3IgVExTL1RDUAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKK1RTTV9QUkVGSVg9dGxzCisKKy4gLi9TVHNtUHJlZml4CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjJiODIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cwpAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKworIyB0aGlzIGZpbGUgY29udGFpbnMgdGVzdHMgY29tbW9uIHRvIGJvdGggdGxzIGFuZCBkdGxzIHVzYWdlcworCitleHBvcnQgTkVUX1NOTVBfQ1JUX0NGR1RPT0w9IiR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyIKK05TQ0VSVD0icGVybCAkU05NUF9CQVNFRElSLy4uLy4uLy4uL2xvY2FsL25ldC1zbm1wLWNlcnQgLUkiCitOU0NFUlRBUkdTPSItQyAkU05NUF9UTVBESVIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENyZWF0ZSB0aGUgY2VydGlmaWNhdGVzCisKKyMgc25tcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkICAgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29uZmlndXJlIHRoZSAuY29uZiBmaWxlcworCitDT05GSUdBUFAgc2VydmVyQ2VydCAkU0VSVkVSRlAKKworIyBjb21tb24gbmFtZSBtYXBwaW5ncworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVuIHRoZSBhY3R1YWwgbGlzdCBvZiB0ZXN0cworIworCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorCitTVEFSVEFHRU5UCisKKyMgdXNpbmcgdXNlciAxIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUKKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0NBUFRVUkUgInNubXBnZXQgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgICAgICAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0IGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzM2ZmNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0CkBAIC0wLDAgKzEsMTggQEAKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKyMgY29uZmlndXJlIHRoZSBhZ2VudCB0byBhY2NlcHQgdXNlciBpbml0aWFsIHdpdGggbm9BdXRoTm9Qcml2CisuIC4uL2RlZmF1bHQvU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJE5PQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE2N2YwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBVRFAgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXVkcAorCisuIC4vU3RyYW5zcG9ydApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjNmE4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVENQIFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10Y3AKKworLiAuL1N0cmFuc3BvcnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYwN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFVEUDYgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz11ZHA2CitTTk1QX1RFU1RfREVTVD0iWzo6MV06IgorCisuIC4vU3RyYW5zcG9ydApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWIzNTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVENQNiBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRjcDYKK1NOTVBfVEVTVF9ERVNUPSJbOjoxXToiCisKKy4gLi9TdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1M2JhMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZQpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBVbml4IFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dW5peAorU05NUF9URVNUX0RFU1Q9JHtTTk1QX1RNUERJUn0vdGVzdHVuaXhzb2NrZXQKKworLiAuL1N0cmFuc3BvcnQKKworIyBjbGVhbnVwCitybSAtZiAkU05NUF9URVNUX0RFU1QKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5OTM3OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIC4vU3Rsc3Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTcyYTJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gLi9TdGxzdGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ4MzExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFMSUFTIFRyYW5zcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgY29uZmlndXJlIHRoZSBhZ2VudCB0byBhY2NlcHQgdXNlciBpbml0aWFsIHdpdGggbm9BdXRoTm9Qcml2CisuIC4uL2RlZmF1bHQvU3YzY29uZmlnCisKK0NPTkZJR0FQUCBhbGlhcyBhbGlhc3Rlc3QgdWRwOmxvY2FsaG9zdDokU05NUF9TTk1QRF9QT1JUCitDT05GSUdBR0VOVCAnW3NubXBdJyBhbGlhcyBhbGlhc3Rlc3QgdWRwOmxvY2FsaG9zdDokU05NUF9TTk1QRF9QT1JUCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9YWxpYXMKK1NOTVBfVEVTVF9ERVNUPSJhbGlhc3Rlc3QiCitTTk1QX1NOTVBEX1BPUlQ9IiIKKworLiAuL1N0cmFuc3BvcnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QuY2VydCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QuY2VydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ5YjI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0CkBAIC0wLDAgKzEsMjMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRDJqQ0NBc0tnQXdJQkFnSUpBSVNFUVJnWkpYSDRNQTBHQ1NxR1NJYjNEUUVCQlFVQU1GRXhDekFKQmdOVgorQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFT01Bd0dBMVVFQnhNRlJHRjJhWE14RVRBUEJnTlZCQW9UQ0U1bAorZEMxVFRrMVFNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3SGhjTk1Ea3dOekE1TWpNek5qTXdXaGNOTURrdworT0RBNE1qTXpOak13V2pCUk1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeERqQU1CZ05WQkFjVAorQlVSaGRtbHpNUkV3RHdZRFZRUUtFd2hPWlhRdFUwNU5VREVTTUJBR0ExVUVBeE1KYkc5allXeG9iM04wTUlJQgorSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTR5amNRN25qY3dueTZOc0ZnTTVXd0VjVgorR3RWZStoMms0MUpVOWxKOUkxRWc3a1JzU2ZKN3o5alg1SlhwSFhVWHE1NE10L3NMT0RlaGV5RTh6NVp3anBsYworTUd4TGlQZFJScC8zQm1saDNxclBMUkxSMTdCKzFNa2NJejlVQlV1dDJQdXN4RWVDZUEvZzhSVkV3SzhvUGdlcgorNEkrS2FYb25YV21obTg1RUVIbFdtWkhURFREYTZNWFVSTnMrRXFjUXJXUmdIeWY4YlFod3BTakJ6bWJVdFZxNQoraXBWTldtcXhQbFNUa2o1Q3FrcmJOZGtwT0lCdlo2VGhGZmkycndQRE8rWXpydWNGY00rQmZLUkNEQmNDNFRzTgorMnowUzFJc2VKR1ROTzFpaWRNcmpDVnpvSWJNQitHb3VYakxKWEF1TElGMFgzZFAreU9aemVTdDVKMnZDZ1FJRAorQVFBQm80RzBNSUd4TUIwR0ExVWREZ1FXQkJSK1pkdU5BR3ZiQXRqbzgrN0RQVU9JNUNwUVJqQ0JnUVlEVlIwagorQkhvd2VJQVVmbVhialFCcjJ3TFk2UFB1d3oxRGlPUXFVRWFoVmFSVE1GRXhDekFKQmdOVkJBWVRBbFZUTVFzdworQ1FZRFZRUUlFd0pEUVRFT01Bd0dBMVVFQnhNRlJHRjJhWE14RVRBUEJnTlZCQW9UQ0U1bGRDMVRUazFRTVJJdworRUFZRFZRUURFd2xzYjJOaGJHaHZjM1NDQ1FDRWhFRVlHU1Z4K0RBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxRworU0liM0RRRUJCUVVBQTRJQkFRQ2EyKzV0eitmbWd3OWg4QUY5bCsrOE0xTG56cXJtc3Z5NDVwaHh4NWYvclplOAorQnJzcE1sclQ2YktjTTlDVHFlemprRFpPckdFdVl2Y2JNZWEybnRsWEcwQ0lNeGhXcGdjend4Wml6R1lJTjZmMQorQ0s1c2lQbE96S09icGtBd1VqV2JMbTdOMkJKR0twM0ZNcTExSnQzMXRVd0pUQmM1dmlZeldCQ1FWNEN4Vm9MNQorTXFNZlZ5S2pPSzBlcWdNdnRyUmdaNnQvMDk4T2lFNFVTaGVXKysrYjB6em84VW0vWUlBOUpRbUNiWjRiaDZqZAorL0FnWmhLUlI1YlhpT0dtQ0xWd2VEVjRNVGkxMlkyODVHQmJ5bGJkRHVqOFlWN211N056T241a0o2eEkwMFZ1YworYkdXdGRjcEVHa1c3Wm40WUN1eHN6cHF0TTNqTEdaSENVcUN1S1NlUAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5wcml2IGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5wcml2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LnByaXYKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRXBRSUJBQUtDQVFFQTR5amNRN25qY3dueTZOc0ZnTTVXd0VjVkd0VmUraDJrNDFKVTlsSjlJMUVnN2tScworU2ZKN3o5alg1SlhwSFhVWHE1NE10L3NMT0RlaGV5RTh6NVp3anBsY01HeExpUGRSUnAvM0JtbGgzcXJQTFJMUgorMTdCKzFNa2NJejlVQlV1dDJQdXN4RWVDZUEvZzhSVkV3SzhvUGdlcjRJK0thWG9uWFdtaG04NUVFSGxXbVpIVAorRFREYTZNWFVSTnMrRXFjUXJXUmdIeWY4YlFod3BTakJ6bWJVdFZxNWlwVk5XbXF4UGxTVGtqNUNxa3JiTmRrcAorT0lCdlo2VGhGZmkycndQRE8rWXpydWNGY00rQmZLUkNEQmNDNFRzTjJ6MFMxSXNlSkdUTk8xaWlkTXJqQ1Z6bworSWJNQitHb3VYakxKWEF1TElGMFgzZFAreU9aemVTdDVKMnZDZ1FJREFRQUJBb0lCQURING5pUGo4NjR0NVJybQorZTVwdlNkUTRqdUw5UjB4OFV2YVMrUS9LNjY1bVBYbE00Z21PWjBBODhwbGRoUSt1MzRzb1ZLSHdmdkphQXBNRQorcDh6K3lqb0VjS3hTVm5lRitJSXgxSFM3b0FVTXpGQ2RFRDZEbkJNUlByaGVTUXgxTG9SS01TSm9uTUh1dEV3MAorb3BCRXQvU1ZXWEVvQW9uYmptZFZRbkQwK2pJcEpSSFl2UGo4VFdHdHY3Vmw3bkhWVFFCVVl5K2pkMUNCUTRqQQorZW1ISzVJR3grK3l0cmZOWEExdURhMzh0OGNTSGcyS3ByOHZod2t6WldWeHNrUzQ2d1NQL3NQQnFLL3dnK0Z4ZAorOFdvdmFHWHBpeUxiMktqMTVySEJxZDV3RmVLSEdKSS9RL1g0cVZ2eExqS0dlRkoxR0ROdnZnOG1ldlJaOVJlaQoreUlCdThvVUNnWUVBODk1V3hlYUMwUzhkS1pWQVI3ZVhMYXVIVVEvbEFJanFsOE90ZHNIQmZwVFJMV3ZzOUlwUQorOHkwbjRzZ2NCLzRpYUJWVnA4VzQxNHpqdXRDeFhKcnE1WkhLT2k1elZxcFBzYW1rS1FZbkdLZmJVMnEwV3B0RAorVDF6MnBMU2sxTC9NSGpoYnV3WmJlMEh4Zjd2UGcxMGxvdWtGbFVHa0VhamFIS09uaHkxL0J0Y0NnWUVBN25XNworNFZtVmNETTh5WWJsTk5RUHYyVEhvb3daSmxTVDl2NytROXBqb1lNWXZydVFXS2NaeUlqRlN0OWhldHJmQnR4TworK1F4VXF2ZkI4ZC9SU3pnN3dGN0FtV0hhM0VmZ1Q3aDNYOGdsaDdpc2I5WUlSbjZxQnR4eXNXVFhScU5HTStXZgoraHh5bEZRWGV6SlBaMGhTYmRYWlRoaHd2dnpENDFaYmpxM1hKem1jQ2dZRUFvQTRNTzRUbjFPMHNJYStnYWJGNAorR25SYXNueFJHNEhCSG14Q1BCQThzNXh1a1hZbEpmWmwzTVNGU2hWMk9GUzJOa1BTWFBPck5tVjB6WmJNNFcrWAordmFacTZMYTE0bXFUTlpLV2VJcGVQSk5tb3FBRTBQYllQWTFSSDVha0hESHBnT2dTWkhSdXREMzZoNUEzU1F0bworZVR5ZyttNERoY2VocDJ4TnRxM0lraThDZ1lFQTN2UFBUVnh2LzI2NGlBZ0s1OERhVkczS3hlek5XdXc3Ui9XVQorRUNieGZrSlBjWTEyNFp5aTI3OGREK3NaZmorRHhTdFkzendyTVlyaWw5NVhGa2dtZmE5WnprOFN6V0NhbG83MworZGVOeFM1dGNCbGlNZGpUWmpmNnhjYkRDSXJabjNmLzBqdVEyYVJpSy9xWENROHltcVVXUHhGVTRRejlyZUhCUwordjY0cW1FTUNnWUVBc3VtcStqVW9hM3FZbmE0NXZ5Qk1RZjZOSkxXQ0ZZWGxvQXRLVlRFQ0NiODhUNk1WeXJPRQorY3lqMFliZWsraWV6Tjh0YkpIcWlTV1Z0blJBOWtqckMwQXJ3T0tEaXBORlJrRm9ncFVSYWp6Yi9MblVRZFcrUAorck90TnVMYU5uTFZvMmtpSzRRTmJkKzNCSlFDRFBCY1pRcTZkR2NjdnlOWFlWdGZFeFk0V0kyYz0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5jZXJ0IGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIuY2VydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDU2YjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIuY2VydApAQCAtMCwwICsxLDIzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUQ0ekNDQXN1Z0F3SUJBZ0lKQUlwQlFIenErbmhiTUEwR0NTcUdTSWIzRFFFQkJRVUFNRlF4Q3pBSkJnTlYKK0JBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURU9NQXdHQTFVRUJ4TUZSR0YyYVhNeEVUQVBCZ05WQkFvVENFNWwKK2RDMVRUazFRTVJVd0V3WURWUVFERXd4a2RHeHpkR1Z6ZEhWelpYSXdIaGNOTURrd056QTVNak0wTURBMldoY04KK01Ea3dPREE0TWpNME1EQTJXakJVTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RGpBTUJnTlYKK0JBY1RCVVJoZG1sek1SRXdEd1lEVlFRS0V3aE9aWFF0VTA1TlVERVZNQk1HQTFVRUF4TU1aSFJzYzNSbGMzUjEKK2MyVnlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTBydzlCY1ZZYnpKOGNqYzQKK00wRlg3aDR5d1Q1M3h0Q1d5cFFYTGd3Tng3R2R1WlUxRFR6aFZyY3lXcGVUOGF3K3p0Vzl3bUg0TkVlT1JTVEsKK3ZHWkpKUGUzcUppRmlQS05TSjE3UXpLU1ZHMFFTdEpNUFVGU0NxN25OWUl6WjNibGxpTUhTREplZjNxNmJ4K2wKKzROVWFEWDAzVXNhY2drZThDQ1psQTUxQlJmK09PdHFXTldvSjRRWHVjdUovckVScWdZUlIxZjdQb2pzMzVaQUUKKzdjNzEvV1ZjenRsNjh0TEg2eVZaaHBWRFFLZCtFZS9NcGlyNWoyWDdGb1JwM2RVbjVBVGpwQnc2V0VUdzl0YlUKK2dqYmNzckc0d0U2Y3pLMFlTVHhOVEdKekM5cnZFcTNTK3ZialB6TEJWeHJBV3hYZDd0QU1rVVNVV1ZKakNNTXYKK2U3aG9PUUlEQVFBQm80RzNNSUcwTUIwR0ExVWREZ1FXQkJURldWTWs3ZnNHQ1UyR3NLWTluazBiQzJQTitqQ0IKK2hBWURWUjBqQkgwd2U0QVV4VmxUSk8zN0JnbE5ockNtUFo1Tkd3dGp6ZnFoV0tSV01GUXhDekFKQmdOVkJBWVQKK0FsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFT01Bd0dBMVVFQnhNRlJHRjJhWE14RVRBUEJnTlZCQW9UQ0U1bGRDMVQKK1RrMVFNUlV3RXdZRFZRUURFd3hrZEd4emRHVnpkSFZ6WlhLQ0NRQ0tRVUI4NnZwNFd6QU1CZ05WSFJNRUJUQUQKK0FRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNXeEtGRW9oQStWbCtnajR4MG5nNUZVTXVIdFRidExiU0cKKzErcjZTOTRMdk1CZWRsb1lUN21QSVBnY1ZiTVQ1ZnFBZVFwZlZJYUMwaTVQa2lVSTlIMk1YdE8yQWRCYTVKeDUKK3ExOE9kVWovTGpHQTNCN2pvc3E1SG5JVC8wT1RoWWtBZUtMSVZETEh4aXFPWXJtRndxWk9zSzVCWjFSTS82WWwKKysvVVp1d3VqdUh0bndSVzNWV3NrVlZGVEY0TkdLWjVmN2xBK05TWXFiSG4vN09CcXFnUzJHeG5TemNDRDlCT3EKKzl6Tk1ab2lXM2pXK0VvSUw2MnBSdEUrUy9pTDFCUkJjdDR4d05QL1JReU40aWFEVmcwU0MxMFlTU1hrNCtvZisKK2UyZ0NMZ0N4czBWeUJ6RzhmSW9YOFJpcTdjVjk5RzExOU0xS1Q0NWpYY29zMWhPMmdZdUIKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLnByaXYgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5wcml2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTA3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5wcml2CkBAIC0wLDAgKzEsMjcgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUVwQUlCQUFLQ0FRRUEwcnc5QmNWWWJ6SjhjamM0TTBGWDdoNHl3VDUzeHRDV3lwUVhMZ3dOeDdHZHVaVTEKK0RUemhWcmN5V3BlVDhhdyt6dFc5d21INE5FZU9SU1RLdkdaSkpQZTNxSmlGaVBLTlNKMTdRektTVkcwUVN0Sk0KK1BVRlNDcTduTllJelozYmxsaU1IU0RKZWYzcTZieCtsNE5VYURYMDNVc2FjZ2tlOENDWmxBNTFCUmYrT090cVcKK05Xb0o0UVh1Y3VKL3JFUnFnWVJSMWY3UG9qczM1WkFFN2M3MS9XVmN6dGw2OHRMSDZ5VlpocFZEUUtkK0VlL00KK3BpcjVqMlg3Rm9ScDNkVW41QVRqcEJ3NldFVHc5dGJVZ2piY3NyRzR3RTZjekswWVNUeE5UR0p6QzlydkVxM1MKKyt2YmpQekxCVnhyQVd4WGQ3dEFNa1VTVVdWSmpDTU12ZTdob09RSURBUUFCQW9JQkFEY1hhT2lTVCswNkNKaWYKK1lQemRUMHg3N283Z2N0V3lBRW5UYnovbGZOREEyVmdEN3N1WUo5elFwY1JUTGlVVy81QjVCbFBENHV4ZjdJeWMKKzhyZFFFajBzMllHazVmd0lWUEV2NG1LTjNQMWZTY3dWc0VLdlNmQnJDeHpNL2YxRmN2M09DSUJTVXF3Ry9LaEMKK1lNNG5SOWxRNjk2aTk1V0RoVitvRWU1ZzlRaUVMZEFERGxjMWJ2K25iOXRWQnpVVG1IUWdwR2p3eWFKTUl6SVYKK3FrZnBDNFJWOE9qdDVFTGI2WGpKUkZ4ZzlRaSs0a3c2bUxiQmMvaW55c3ZWUUJtc1dMTGxDS3BiSHQwMllmVUIKK2F0Vk9EelRSNWFVYmNRS25Obkhtb2pVMDVpcmJDZVVYcGhnUUtWOWl1enNpV01WNGVkSjZ0VzhCMTBCdVNsSDUKK2IwR051d0VDZ1lFQS9md0ttUTBqZ3JMalJjMTZjRTJHV01aUm1xQnVmVHRHU3c5dGRvaG1VTUlQcU50NCsvWFEKK2dLVjBzZkZaZ3NMTFVHNTB4cVJSNm1ta3pTN1RWd2w0dVJxY3JGN0RSS0tBa3lGSlAzUWtMU1FtKzRFWkZ4T3YKK2RwSFZMVnBPMVFKKzcxWUU0ektPZElmV1Jhb2g1WmxFcEd3M3V6ZitVMG9OVEQ3OVg1Zk9BNkVDZ1lFQTFHaFcKK2lTRWJVKzJZUG55NHFlWGRmOGhjU245K1VyNmNCenhMaFlNVUhOSTl5c3lBUW4zLy9NTG9SQ29ub2tpVUVXRzUKK0JMTzJ6U21OcXZIV0tSQnphR3I2WmpvL3RHVFdnT1ducExRTXErWFltRHhXeERHQ1RMSDJlZHFDK1ZJSXFCbkIKK1FtTFlCdmRlOUVuMVVJL2MzQ3NwYjE4Tmg5MkkrVkdaTlB6UEhaa0NnWUFQVTgyRDdRSU9taU1UREZKdVFvOXYKKy9nL2dwL3ZpL05mQ0lkMDJRUWNEcXFKdFMwbGkwelBRLzZzcUxlbDc5YXQxWUNVVjg4YXB3ZFJiT1k4eGVuWFoKK25keUVubmRrUmZaQ2FzalQxbnQwYWZFY1RtOG9NRnp2WjkrWWpCR2owekc3MmRJVHIvSmUzKyt6WnBBREhodkIKK1hIS0VqdDEvUTBISUx5ajFRdUVBNFFLQmdRQ1ViZmtTeUp6Vk1ISTBNR25HNkFlNTlPUnhkdGhxc0NKT2VCYjYKK1RKZndjQWFZUWdIYTlUdStnT0ZZU1BEN1dhYUc0dmdzemYwUEwxdDlPcFFDakNscHJXQWZzZEswbDhiQnVqcEYKK1FVQ2RtdmVab29pcmYwRmpvUFR4UC81SWhjZmcyR2FSb29yOWl6M0NqakFzUk92OHV2aXdpQWJuaTZyZE51Vk4KKy91QW8rUUtCZ1FDZlFmMVJCai9pTW1PWmRpNFNpZkJPRG1zZUpFWWVBTWxmRVFCSFBGbVRoTkxpZmx6K1ZOMTcKK3VxSFM1SWdoUEswc1hiN3BPUW1DMmhDeFQyc1d5Ykp4K3FLc29PWUhMUXlyRzVrZzdDZ1ZqbHRtNkh6d3lpenQKK0t1dzZUNGNVajFxUlFHOGFBVEwrc0d1VDY5RkhUU0UzdmE1dGxmOW9ZR3NNNnJJb0E0M2czdz09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0NGY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMKQEAgLTAsMCArMSwzNSBAQAorLyogSEVBREVSIFRlc3RpbmcgdGhlIGRlZmF1bHRfc3RvcmUgQVBJICovCitpbnQgaSwgajsKK2NoYXIgYnVmWzEwMjRdOworCisvKiBmaXJzdCB3ZSBsb2FkIGV2ZXJ5dGhpbmcgdXAgKi8KKworZm9yKGkgPSAwOyBpIDwgTkVUU05NUF9EU19NQVhfSURTOyBpKyspIHsKKyAgICAvKiBib29sZWFucyAqLworICAgIGZvcihqID0gMDsgaiA8IE5FVFNOTVBfRFNfTUFYX1NVQklEUzsgaisrKSB7CisgICAgICAgIE9LRihTTk1QRVJSX1NVQ0NFU1MgPT0gbmV0c25tcF9kc19zZXRfYm9vbGVhbihpLCBqLCAoaSpqKSUyKSwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBib29sZWFuOiBzZXR0aW5nICVkLyVkIHJldHVybmVkIGZhaWx1cmUiLCBpLCBqKSk7CisgICAgICAgIE9LRihTTk1QRVJSX1NVQ0NFU1MgPT0gbmV0c25tcF9kc19zZXRfaW50KGksIGosIGkqaiksCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgaW50OiBzZXR0aW5nICVkLyVkIHJldHVybmVkIGZhaWx1cmUiLCBpLCBqKSk7CisgICAgICAgIHNwcmludGYoYnVmLCIlZC8lZCIsIGksIGopOworICAgICAgICBPS0YoU05NUEVSUl9TVUNDRVNTID09IG5ldHNubXBfZHNfc2V0X3N0cmluZyhpLCBqLCBidWYpLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIHN0cmluZzogc2V0dGluZyAlZC8lZCByZXR1cm5lZCBmYWlsdXJlIiwgaSwgaikpOworICAgIH0KK30KKyAgICAKKy8qIHRoZW4gd2UgY2hlY2sgYWxsIHRoZSB2YWx1ZXMgKi8KKworZm9yKGkgPSAwOyBpIDwgTkVUU05NUF9EU19NQVhfSURTOyBpKyspIHsKKyAgICAvKiBib29sZWFucyAqLworICAgIGZvcihqID0gMDsgaiA8IE5FVFNOTVBfRFNfTUFYX1NVQklEUzsgaisrKSB7CisgICAgICAgIE9LRihuZXRzbm1wX2RzX2dldF9ib29sZWFuKGksIGopID09IChpKmopJTIsCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgYm9vbGVhbiAlZC8lZCB3YXMgdGhlIGV4cGVjdGVkIHZhbHVlIiwgaSwgaikpOworICAgICAgICBPS0YobmV0c25tcF9kc19nZXRfaW50KGksIGopID09IChpKmopLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIGludCAlZC8lZCB3YXMgdGhlIGV4cGVjdGVkIHZhbHVlIiwgaSwgaikpOworICAgICAgICBzcHJpbnRmKGJ1ZiwiJWQvJWQiLCBpLCBqKTsKKyAgICAgICAgT0tGKHN0cmNtcChuZXRzbm1wX2RzX2dldF9zdHJpbmcoaSwgaiksIGJ1ZikgPT0gMCwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBzdHJpbmcgJWQvJWQgd2FzIHRoZSBleHBlY3RlZCB2YWx1ZSIsIGksIGopKTsKKyAgICB9Cit9CisKK25ldHNubXBfZHNfc2h1dGRvd24oKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMmU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHRoZSBjb250YWluZXIgQVBJICovCisKK25ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7Cit2b2lkICpwOworCitpbml0X3NubXAoImNvbnRhaW5lci10ZXN0Iik7Citjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJmaWZvIik7Citjb250YWluZXItPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopIHN0cmNtcDsKKworQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsICJmb28iKTsKK0NPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCAiYmFyIik7CitDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgImJheiIpOworCitPSyhDT05UQUlORVJfRklORChjb250YWluZXIsICJiYXIiKSAhPSBOVUxMLAorICAgInNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlZCAnYmFyJyBzdHJpbmciKTsKKworT0soQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAiZm9vYmFyIikgPT0gTlVMTCwKKyAgICJzaG91bGRuJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSAobm90KSBzdG9yZWQgJ2Zvb2Jhcicgc3RyaW5nIik7CisKK09LKENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgPT0gMywKKyAgICJjb250YWluZXIgaGFzIHRoZSBwcm9wZXIgc2l6ZSBmb3IgdGhlIGVsZW1lbnRzIHdlJ3ZlIGFkZGVkIik7CisKK0NPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCAiYmFyIik7CisKK09LKENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lciwgImJhciIpID09IE5VTEwsCisgICAic2hvdWxkIG5vIGxvbmdlciBiZSBhYmxlIHRvIGZpbmQgdGhlIChyZW92ZWQpICdiYXInIHN0cmluZyIpOworCitPSyhDT05UQUlORVJfU0laRShjb250YWluZXIpID09IDIsCisgICAiY29udGFpbmVyIGhhcyB0aGUgcHJvcGVyIHNpemUgZm9yIHRoZSBlbGVtZW50cyBhZnRlciBhIHJlbW92YWwiKTsKKword2hpbGUgKChwID0gQ09OVEFJTkVSX0ZJUlNUKGNvbnRhaW5lcikpKQorICBDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgcCk7CitDT05UQUlORVJfRlJFRShjb250YWluZXIpOworCitzbm1wX3NodXRkb3duKCJjb250YWluZXItdGVzdCIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAzY29weV9ud29yZF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDNjb3B5X253b3JkX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDY3ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAzY29weV9ud29yZF9jbGliLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGNvcHlfbndvcmQgKi8KKworI2RlZmluZSBBU1NFUlQxKGNvbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKytfX3Rlc3RfY291bnRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoY29uZCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50Zigib2sgJWRcbiIsIF9fdGVzdF9jb3VudGVyKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJub3Qgb2sgJWQgLSAlZDogJXMgZmFpbGVkXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBfX3Rlc3RfY291bnRlciwgX19MSU5FX18sICNjb25kKTsgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVDIoY29uZCwgb25fZXJyb3IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICArK19fdGVzdF9jb3VudGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb25kKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJvayAlZFxuIiwgX190ZXN0X2NvdW50ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIm5vdCBvayAlZCAtICVkOiAlcyBmYWlsZWQsICIsICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIF9fdGVzdF9jb3VudGVyLCBfX0xJTkVfXywgI2NvbmQpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZiBvbl9lcnJvciA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCit7CisgIC8qIEEgcXVvdGVkIHN0cmluZyAqLworICBjaGFyIGlucHV0W10gPSAiXCJUaGUgcmVkIHJvc2VcIiI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGUgcmVkIHJvc2UiKSA9PSAwLAorICAgICAgICAgICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIEVzY2FwZWQgcXVvdGVzICovCisgIGNoYXIgaW5wdXRbXSA9ICJcXFwiVGhlIHJlZCByb3NlXFxcIiI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJcIlRoZSIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IGlucHV0ICsgNiwKKyAgICAgICAgICAoInJ1biA9IGlucHV0ICsgJSIgTkVUU05NUF9QUkl6ICJkXG4iLCBydW4gLSBpbnB1dCkpOworICBydW4gPSBjb3B5X253b3JkKHJ1biwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgInJlZCIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IGlucHV0ICsgMTAsCisgICAgICAgICAgKCJydW4gPSBpbnB1dCArICUiIE5FVFNOTVBfUFJJeiAiZFxuIiwgcnVuIC0gaW5wdXQpKTsKKyAgcnVuID0gY29weV9ud29yZChydW4sIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJyb3NlXCIiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBVbnRlcm1pbmF0ZWQgIi1xdW90ZSAqLworICBjaGFyIGlucHV0W10gPSAiXCJUaGUiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogVW50ZXJtaW5hdGVkICctcXVvdGUgKi8KKyAgY2hhciBpbnB1dFtdID0gIlwnVGhlIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZSIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIEV4dHJhY3QgZnJvbSBOVUxMICovCisgIGNoYXIgb3V0cHV0WzEwXSA9ICIiOworICBjaGFyKiBydW4gPSBOVUxMOworICBydW4gPSBjb3B5X253b3JkKHJ1biwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIEV4dHJhY3QgdG8gTlVMTCAqLworICBjaGFyIGlucHV0W10gPSAiVGhlIHJlZCByb3NlIjsKKyAgY2hhciogb3V0cHV0ID0gTlVMTDsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIExvbmcgdG9rZW4gKi8KKyAgY2hhciBpbnB1dFtdID0gIlwiVmVyeSBsb25nIHRva2VuIHRoYXQgb3ZlcmZsb3dzIHRoZSBidWZmZXJcIiBmb28iOworICBjaGFyIG91dHB1dFsxMF0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlZlcnkgbG9uZyIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IGlucHV0ICsgNDQsCisgICAgICAgICAgKCJydW4gPSBpbnB1dCArICUiIE5FVFNOTVBfUFJJeiAiZFxuIiwgcnVuIC0gaW5wdXQpKTsKK30KKworeworICAvKiBRdW90ZWQgZW5kIG9mIHN0cmluZyAvIGVtYmVkZGVkIFwwICovCisgIGNoYXIgaW5wdXRbXSA9ICJUaGVcXFwwcmVkIHJvc2UiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlXFwiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBFbXB0eSBzdHJpbmcgKi8KKyAgY2hhciBpbnB1dFtdID0gIiI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCkgKyAxXSA9ICJYIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIiIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IE5VTEwsICgicnVuID0gPiVzPFxuIiwgcnVuKSk7Cit9CisKK3sKKyAgLyogV2hpdGVzcGFjZSBzdHJpbmcgKi8KKyAgY2hhciBpbnB1dFtdID0gIiAgICBcdCAgICI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIlgiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gTlVMTCwgKCJydW4gPSA+JXM8XG4iLCBydW4pKTsKK30KKworeworICAvKiBRdW90ZSwgbm8gd2hpdGVzcGFjZSBhZnRlciAqLworICBjaGFyIGlucHV0W10gPSAiXCJUaGVcInJlZCByb3NlIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZSIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IGlucHV0ICsgNSwKKyAgICAgICAgICAoInJ1biA9IGlucHV0ICsgJSIgTkVUU05NUF9QUkl6ICJkXG4iLCBydW4gLSBpbnB1dCkpOworfQorCit7CisgIC8qIFF1b3RlLCBubyB3aGl0ZXNwYWNlIGJlZm9yZSAqLworICBjaGFyIGlucHV0W10gPSAiVGhlXCJyZWRcIiByb3NlIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZVwicmVkXCIiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBpbnB1dCArIDksCisgICAgICAgICAgKCJydW4gPSBpbnB1dCArICUiIE5FVFNOTVBfUFJJeiAiZFxuIiwgcnVuIC0gaW5wdXQpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGIxOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBIRUFERVIgVGVzdGluZyBzbm1wX2VudW0gKi8KKworI2RlZmluZSBDT05GSUdfVFlQRSAic25tcC1lbnVtLXVuaXQtdGVzdCIKKyNkZWZpbmUgU1RSSU5HMSAibGlmZSwgYW5kIGV2ZXJ5dGhpbmciCisjZGVmaW5lIFNUUklORzIgInJlc3RhdXJhbnQgYXQgdGhlIGVuZCBvZiB0aGUgdW5pdmVyc2UiCisjZGVmaW5lIFNUUklORzMgImxhYmVsMyIKKyNkZWZpbmUgTE9OR19TVFJJTkcgImEtc3RyaW5nLW9mLTI1NS1jaGFyYWN0ZXJzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworI2RlZmluZSBTVE9SRV9BTkRfQ09NUEFSRShtYWosIG1pbiwgcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBGSUxFICpmcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgcmVhZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjaGFyICpwLCBjb250ZW50c1s0MDk2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzZV9zdG9yZV9saXN0KG1haiwgbWluLCBDT05GSUdfVFlQRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmcCA9IGZvcGVuKHRtcF9wZXJzaXN0X2ZpbGUsICJyIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZnApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmVhZCA9IGZyZWFkKGNvbnRlbnRzLCAxLCBzaXplb2YoY29udGVudHMpIC0gMSwgZnApOyAgICAgICAgXAorICAgICAgICAgICAgZmNsb3NlKGZwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjb250ZW50c1tyZWFkID4gMCA/IHJlYWQgOiAwXSA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKHAgPSBjb250ZW50czsgKnA7ICsrcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCpwID09ICdcbicpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICpwID0gJ3wnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPS0Yoc3RyY21wKGNvbnRlbnRzLCAocykpID09IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKCJzdG9yZWQgbGlzdCAlcyA8PiAlcyIsIChzKSwgY29udGVudHMpKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZW1vdmUodG1wX3BlcnNpc3RfZmlsZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworY2hhciB0bXBfcGVyc2lzdF9maWxlWzI1Nl07CitjaGFyICpzZV9maW5kX3Jlc3VsdDsKKworc3ByaW50Zih0bXBfcGVyc2lzdF9maWxlLCAiL3RtcC9zbm1wLWVudW0tdW5pdC10ZXN0LSVkIiwgZ2V0cGlkKCkpOworbmV0c25tcF9zZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIiwgdG1wX3BlcnNpc3RfZmlsZSwgMSk7CisKK2luaXRfc25tcF9lbnVtKCJzbm1wIik7CisKK1NUT1JFX0FORF9DT01QQVJFKDEsIDEsICJlbnVtIDE6MXwiKTsKKworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKCJoaSIpLCAxKTsKKworU1RPUkVfQU5EX0NPTVBBUkUoMSwgMSwgImVudW0gMToxIDE6aGl8Iik7CisKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cCgidGhlcmUiKSwgMik7CisKK1NUT1JFX0FORF9DT01QQVJFKDEsIDEsICJlbnVtIDE6MSAxOmhpIDI6dGhlcmV8Iik7CisKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDMpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgNCk7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA1KTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDYpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgNyk7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA4KTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDkpOworCitTVE9SRV9BTkRfQ09NUEFSRSgxLCAxLCAiZW51bSAxOjEgMTpoaSAyOnRoZXJlIDM6IiBMT05HX1NUUklORyAiIDQ6IiBMT05HX1NUUklORworICAgICAgICAgICAgICAgICAiIDU6IiBMT05HX1NUUklORyAiIDY6IiBMT05HX1NUUklORyAiIDc6IiBMT05HX1NUUklORworICAgICAgICAgICAgICAgICAiIDg6IiBMT05HX1NUUklORyAiIDk6IiBMT05HX1NUUklORyAifCIpOworCitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCAxMCk7CisKK1NUT1JFX0FORF9DT01QQVJFKDEsIDEsICJlbnVtIDE6MSAxOmhpIDI6dGhlcmUgMzoiIExPTkdfU1RSSU5HICIgNDoiIExPTkdfU1RSSU5HCisgICAgICAgICAgICAgICAgICIgNToiIExPTkdfU1RSSU5HICIgNjoiIExPTkdfU1RSSU5HICIgNzoiIExPTkdfU1RSSU5HCisgICAgICAgICAgICAgICAgICIgODoiIExPTkdfU1RSSU5HICIgOToiIExPTkdfU1RSSU5HICJ8IgorICAgICAgICAgICAgICAgICAiZW51bSAxOjEgMTA6IiBMT05HX1NUUklORyAifCIpOworCitPSyhzZV9maW5kX3ZhbHVlKDEsIDEsICJoaSIpID09IDEsCisgICAibG9va3VwIGJ5IG51bWJlciAjMSBzaG91bGQgYmUgdGhlIHByb3BlciBzdHJpbmciKTsKK09LKHN0cmNtcChzZV9maW5kX2xhYmVsKDEsIDEsIDIpLCAidGhlcmUiKSA9PSAwLAorICAgImxvb2t1cCBieSBzdHJpbmcgIzEgc2hvdWxkIGJlIHRoZSBwcm9wZXIgbnVtYmVyIik7CisKKworc2VfYWRkX3BhaXJfdG9fc2xpc3QoInRlc3RpbmciLCBzdHJkdXAoU1RSSU5HMSksIDQyKTsKK3NlX2FkZF9wYWlyX3RvX3NsaXN0KCJ0ZXN0aW5nIiwgc3RyZHVwKFNUUklORzIpLCAyKTsKK3NlX2FkZF9wYWlyX3RvX3NsaXN0KCJ0ZXN0aW5nIiwgc3RyZHVwKFNUUklORzMpLCAyKTsKKyAgICAKK09LKHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoInRlc3RpbmciLCBTVFJJTkcxKSA9PSA0MiwKKyAgICJsb29rdXAgYnkgbnVtYmVyIHNob3VsZCBiZSB0aGUgcHJvcGVyIHN0cmluZyIpOworT0soc3RyY21wKHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoInRlc3RpbmciLCAyKSwgU1RSSU5HMikgPT0gMCwKKyAgICJsb29rdXAgYnkgc3RyaW5nIHNob3VsZCBiZSB0aGUgcHJvcGVyIG51bWJlciIpOworCitzZV9jbGVhcl9zbGlzdCgidGVzdGluZyIpOworCisKK3NlX3JlYWRfY29uZigiZW51bSIsCisgICAgICAgICAgICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCAiMjozIDE6YXBwbGUgMjpwZWFyIDM6a2l3aWZydWl0IikpOworT0soc2VfZmluZF9saXN0KDIsIDMpLCAibGlzdCAoMiwgMykgc2hvdWxkIGJlIHByZXNlbnQiKTsKK2lmIChzZV9maW5kX2xpc3QoMiwgMykpIHsKKyAgT0soc2VfZmluZF92YWx1ZSgyLCAzLCAia2l3aWZydWl0IikgPT0gMywKKyAgICAgImxvb2t1cCBieSBzdHJpbmcgc2hvdWxkIHJldHVybiB0aGUgcHJvcGVyIHZhbHVlIik7CisgIHNlX2ZpbmRfcmVzdWx0ID0gc2VfZmluZF9sYWJlbCgyLCAzLCAyKTsKKyAgT0soc2VfZmluZF9yZXN1bHQgJiYgc3RyY21wKHNlX2ZpbmRfcmVzdWx0LCAicGVhciIpID09IDAsCisgICAgICJsb29rdXAgYnkgbGFiZWwgc2hvdWxkIHJldHVybiB0aGUgcHJvcGVyIHN0cmluZyIpOworfQorCitzZV9yZWFkX2NvbmYoImVudW0iLAorICAgICAgICAgICAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgImZydWl0IDE6YXBwbGUgMjpwZWFyIDM6a2l3aWZydWl0IikpOworT0soc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgiZnJ1aXQiLCAia2l3aWZydWl0IikgPT0gMywKKyAgICJsb29rdXAgYnkgc3RyaW5nIHNob3VsZCByZXR1cm4gdGhlIHByb3BlciB2YWx1ZSIpOworc2VfZmluZF9yZXN1bHQgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJmcnVpdCIsIDIpOworT0soc2VfZmluZF9yZXN1bHQgJiYgc3RyY21wKHNlX2ZpbmRfcmVzdWx0LCAicGVhciIpID09IDAsCisgICAibG9va3VwIGJ5IHZhbHVlIHNob3VsZCByZXR1cm4gdGhlIHByb3BlciBzdHJpbmciKTsKKworY2xlYXJfc25tcF9lbnVtKCk7Cit1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTY0MWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHRhYmxlX2RhdGFzZXQgKi8KKworLyoKKyAqIE5vdGU6IHRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyB1bml0IHRlc3QgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYWxsIG1lbW9yeQorICogdGhhdCBpcyBhbGxvY2F0ZWQgZm9yIHN0b3JpbmcgYSB0YWJsZSBkYXRhc2V0IGlzIGZyZWVkIHByb3Blcmx5LiBGZWVsIGZyZWUKKyAqIHRvIGV4dGVuZCB0aGlzIHVuaXQgdGVzdCBzdWNoIHRoYXQgaXQgdGVzdHMgbW9yZSBvZiB0aGUgdGFibGUgZGF0YXNldCBjb2RlLgorICovCisKK2VudW0geyBDT0wzID0gMiwgQ09MNCA9IDMsIENPTDUgPSA0LCB9OworCitzdGF0aWMgY29uc3Qgb2lkIE9pZFtdID0geyAxLCAzLCA2LCAxLCAzLCAyNzcgfTsKK25ldHNubXBfdGFibGVfZGF0YV9zZXQqIHRkczsKK25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIHRoOworbmV0c25tcF90YWJsZV9yb3cqIHJvdzsKK2ludDMyX3QgaXZhbDsKK2ludDMyX3QgaSwgajsKKworU09DS19TVEFSVFVQOworCitpbml0X2FnZW50KCJzbm1wZCIpOworaW5pdF9zbm1wKCJzbm1wZCIpOworCit0ZHMgPSBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3NldCgidGFibGVfZGF0YXNldCB1bml0LXRlc3QiKTsKK09LKHRkcywgInRhYmxlIGRhdGEgc2V0IGNyZWF0aW9uIik7CisKK25ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfaW5kZXgodGRzLCBBU05fSU5URUdFUik7CituZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX2luZGV4KHRkcywgQVNOX0lOVEVHRVIpOworbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93KHRkcywgQ09MMywgQVNOX0lOVEVHRVIsICAgRkFMU0UsIE5VTEwsIDApOworbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93KHRkcywgQ09MNCwgQVNOX0NPVU5URVIsICAgRkFMU0UsIE5VTEwsIDApOworbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93KHRkcywgQ09MNSwgQVNOX09DVEVUX1NUUiwgRkFMU0UsIE5VTEwsIDApOworCit0aCA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJ1bml0LXRlc3QgaGFuZGxlciIsIE5VTEwsIE9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChPaWQpLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworT0sodGgsICJ0YWJsZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0KHRoLCB0ZHMsIE5VTEwpID09IFNOTVBFUlJfU1VDQ0VTUywKKyAgICJ0YWJsZSBkYXRhIHNldCByZWdpc3RyYXRpb24iKTsKKworZm9yIChpID0gMTsgaSA8PSAyOyBpKyspIHsKKyAgICBmb3IgKGogPSAxOyBqIDw9IDI7IGorKykgeworICAgICAgICByb3cgPSBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3JvdygpOworICAgICAgICBuZXRzbm1wX3RhYmxlX3Jvd19hZGRfaW5kZXgocm93LCBBU05fSU5URUdFUiwgJmksIHNpemVvZihpKSk7CisgICAgICAgIG5ldHNubXBfdGFibGVfcm93X2FkZF9pbmRleChyb3csIEFTTl9JTlRFR0VSLCAmaiwgc2l6ZW9mKGopKTsKKyAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9yb3codGRzLCByb3cpOworCisgICAgICAgIGl2YWwgPSAxMCAqIGkgKyBqOworICAgICAgICBPSyhuZXRzbm1wX3NldF9yb3dfY29sdW1uKHJvdywgQ09MMywgQVNOX0lOVEVHRVIsICZpdmFsLCBzaXplb2YoaXZhbCkpCisgICAgICAgICAgID09IFNOTVBFUlJfU1VDQ0VTUywgInNldCBJTlRFR0VSIGNvbHVtbiIpOworICAgICAgICBPSyhuZXRzbm1wX3NldF9yb3dfY29sdW1uKHJvdywgQ09MNSwgQVNOX09DVEVUX1NUUiwgInRlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigidGVzdCIpIC0gMSkKKyAgICAgICAgICAgPT0gU05NUEVSUl9TVUNDRVNTLCAic2V0IE9DVEVUX1NUUiBjb2x1bW4iKTsKKyAgICB9Cit9CisKK25ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KHRkcyk7CisKK3NubXBfc2h1dGRvd24oInNubXBkIik7CitzaHV0ZG93bl9hZ2VudCgpOworCitTT0NLX0NMRUFOVVA7CisKK09LKFRSVUUsICJkb25lIik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdhZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBIRUFERVIgVGVzdGluZyBTTk1QIGhhbmRsZXIgcmVnaXN0cmF0aW9uICovCisKK3N0YXRpYyBvaWQgT2lkW10gPSB7IDEsIDMsIDYsIDEsIDMsIDMyNyB9OyAvKiBleHBlcmltZW50YWwuMzI3ICovCituZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpoYW5kbGVyLCAqaGFuZGxlcjI7CituZXRzbm1wX21pYl9oYW5kbGVyICpkaDsKK25ldHNubXBfY2FjaGUgKm5jLCAqbmMyOworCitpbml0X3NubXAoInNubXAiKTsKKworaGFuZGxlciA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJleHBlcmltZW50YWwuMzI3IiwgTlVMTCwKKwlPaWQsIE9JRF9MRU5HVEgoT2lkKSwgSEFORExFUl9DQU5fUldSSVRFKTsKK09LKGhhbmRsZXIgIT0gTlVMTCwgIkhhbmRsZXIgY3JlYXRpb24uIik7CisKK25jID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMTAsIE5VTEwsIE5VTEwsIE9pZCwgT0lEX0xFTkdUSChPaWQpKTsKK09LKG5jLCAibmV0c25tcF9jYWNoZSBhbGxvY2F0aW9uIik7CitPSyhzbm1wX29pZF9jb21wYXJlKG5jLT5yb290b2lkLCBuYy0+cm9vdG9pZF9sZW4sIE9pZCwgT0lEX0xFTkdUSChPaWQpKSA9PSAwLAorICAgIkhhbmRsZXIgcHJpdmF0ZSBPSUQuIik7CisKK2hhbmRsZXItPmhhbmRsZXItPm15dm9pZCA9IG5jOworbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoaGFuZGxlci0+aGFuZGxlcik7CisKK25jMiA9IGhhbmRsZXItPmhhbmRsZXItPm15dm9pZDsKK09LKG5jMiwgIkhhbmRsZXIgcHJpdmF0ZSBkYXRhIik7CitPSyhzbm1wX29pZF9jb21wYXJlKG5jMi0+cm9vdG9pZCwgbmMyLT5yb290b2lkX2xlbiwgT2lkLCBPSURfTEVOR1RIKE9pZCkpID09IDAsCisgICAiSGFuZGxlciBwcml2YXRlIE9JRC4iKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShoYW5kbGVyKSA9PSBNSUJfUkVHSVNURVJFRF9PSywKKyAgICJNSUIgcmVnaXN0cmF0aW9uLiIpOworCitoYW5kbGVyMiA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJleHBlcmltZW50YWwuMzI3IiwgTlVMTCwKKyAgICAgICAgT2lkLCBPSURfTEVOR1RIKE9pZCksIEhBTkRMRVJfQ0FOX1JXUklURSk7CitPSyhoYW5kbGVyMiAhPSBOVUxMLCAiU2Vjb25kIHJlZ2lzdHJhdGlvbiIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKGhhbmRsZXIyKSA9PSBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTiwKKyAgICJEdXBsaWNhdGUgTUlCIHJlZ2lzdHJhdGlvbi4iKTsKKworZGggPSBuZXRzbm1wX2hhbmRsZXJfZHVwKGhhbmRsZXItPmhhbmRsZXIpOworT0soZGgsICJIYW5kbGVyIGR1cGxpY2F0aW9uLiIpOworCitPSyhuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihoYW5kbGVyKSA9PSBTTk1QRVJSX1NVQ0NFU1MsCisgICAiSGFuZGxlciB1bnJlZ2lzdHJhdGlvbi4iKTsKKworbmV0c25tcF9oYW5kbGVyX2ZyZWUoZGgpOworT0soVFJVRSwgIkZyZWVpbmcgZHVwbGljYXRlIGhhbmRsZXIiKTsKKworc25tcF9zaHV0ZG93bigic25tcCIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA3aW5ldF9wdG9uX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwN2luZXRfcHRvbl9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliMDBmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwN2luZXRfcHRvbl9jbGliLmMKQEAgLTAsMCArMSw2MCBAQAorLyogSEVBREVSIFRlc3RpbmcgaW5ldF9wdG9uKCkgYW5kIGluZXRfbnRvcCgpICovCisKK2ludCBpOworY2hhciBzdHJbMTI4XTsKK3N0cnVjdCBpbl9hZGRyIGluX2FkZHI7CitzdHJ1Y3QgaW42X2FkZHIgaW42X2FkZHI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBjb25zdCBjaGFyKiBzOyB1bnNpZ25lZCBjaGFyIGJbNF07IH0gaW5fdGVzdGRhdGFbXSA9IHsKKyAgICB7ICIwLjAuMC4wIiwgICAgICAgICB7ICAgMCwgICAwLCAgIDAsICAgMCB9IH0sCisgICAgeyAiMS4yLjMuNCIsICAgICAgICAgeyAgIDEsICAgMiwgICAzLCAgIDQgfSB9LAorICAgIHsgIjI1NS4yNTUuMjU1LjI1NSIsIHsgMjU1LCAyNTUsIDI1NSwgMjU1IH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBjb25zdCBjaGFyKiBzOyB1bnNpZ25lZCBjaGFyIGJbMTZdOyB9IGluNl90ZXN0ZGF0YVtdID0geworICAgIHsgIjo6IiwgICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgfSwKKyAgICB7ICI6OjEiLCAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIH0sIH0sCisgICAgeyAiMTo6IiwgIHsgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCB9LAorICAgIHsgIjE6OjEiLCB7IDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgfSwgfSwKK307CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW5fdGVzdGRhdGEpL3NpemVvZihpbl90ZXN0ZGF0YVswXSk7ICsraSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGIgPSBpbl90ZXN0ZGF0YVtpXS5iOworCisgICAgT0tGKGluZXRfcHRvbihBRl9JTkVULCBpbl90ZXN0ZGF0YVtpXS5zLCAmaW5fYWRkcikgPT0gMSwKKwkoIklQdjQgaW5ldF9wdG9uKCVzKSIsIGluX3Rlc3RkYXRhW2ldLnMpKTsKKyAgICBPSyhudG9obChpbl9hZGRyLnNfYWRkcikKKyAgICAgICA9PSAoKGJbMF0gPDwgMjQpIHwgKGJbMV0gPDwgMTYpIHwgKGJbMl0gPDwgOCkgfCBiWzNdKSwKKyAgICAgICAiaW5ldF9wdG9uKCkgdmFsdWUiKTsKKyAgICBPSyhpbmV0X250b3AoQUZfSU5FVCwgJmluX2FkZHIsIHN0ciwgc2l6ZW9mKHN0cikpID09IHN0ciwKKyAgICAgICAiSVB2NCBpbmV0X250b3AoKSIpOworICAgIE9LRihzdHJjbXAoaW5fdGVzdGRhdGFbaV0ucywgc3RyKSA9PSAwLAorCSgiJXMgPT89ICVzIiwgaW5fdGVzdGRhdGFbaV0ucywgc3RyKSk7Cit9CisKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihpbjZfdGVzdGRhdGEpL3NpemVvZihpbjZfdGVzdGRhdGFbMF0pOyArK2kpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBiID0gaW42X3Rlc3RkYXRhW2ldLmI7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgciA9ICh2b2lkICopJmluNl9hZGRyOworICAgIGludCByZXN1bHQsIGo7CisKKyAgICByZXN1bHQgPSBpbmV0X3B0b24oQUZfSU5FVDYsIGluNl90ZXN0ZGF0YVtpXS5zLCAmaW42X2FkZHIpOworICAgIE9LRihyZXN1bHQgPT0gMSwKKwkoIklQdjYgaW5ldF9wdG9uKCVzKSAtPiAlZDsgIgorCSAiICUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4IgorCSAiOiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4IiwKKwkgaW42X3Rlc3RkYXRhW2ldLnMsIHJlc3VsdCwKKwkgclswXSwgclsxXSwgclsgMl0sIHJbIDNdLCByWyA0XSwgclsgNV0sIHJbIDZdLCByWyA3XSwKKwkgcls4XSwgcls5XSwgclsxMF0sIHJbMTFdLCByWzEyXSwgclsxM10sIHJbMTRdLCByWzE1XQorCSApKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikKKwlwcmludGYoIiUwMnggIiwgYltqXSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKQorCU9LRihyW2pdID09IGJbal0sCisJICAgICgiSVB2NiBpbmV0X3B0b24oKSB2YWx1ZSAoJSMwMnggPT89ICUjMDJ4KSIsIHJbal0sIGJbal0pKTsKKyAgICBPSyhpbmV0X250b3AoQUZfSU5FVDYsICZpbjZfYWRkciwgc3RyLCBzaXplb2Yoc3RyKSkgPT0gc3RyLAorICAgICAgICJJUHY2IGluZXRfbnRvcCgpIik7CisgICAgT0tGKHN0cmNtcChpbjZfdGVzdGRhdGFbaV0ucywgc3RyKSA9PSAwLAorCSgiJXMgPT89ICVzIiwgaW42X3Rlc3RkYXRhW2ldLnMsIHN0cikpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQ3MTRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qIEhFQURFUiBUZXN0aW5nIEFTTi4xIGVuY29kaW5nIGFuZCBkZWNvZGluZyAqLworCitpbnQgaTsKKworI2lmIDAKK3NubXBfc2V0X2RvX2RlYnVnZ2luZyhUUlVFKTsKK2RlYnVnX3JlZ2lzdGVyX3Rva2VucygiZHVtcHZfcmVjdixkdW1wdl9zZW5kLGFzbiIpOworI2VuZGlmCisKK3sKKyAgICBjb25zdCBsb25nIGludHZhbFtdID0geworICAgICAgICAtMHg4MDAwMDAwMEwsCisgICAgICAgIC0weDdmZmZmZmZmTCwKKyAgICAgICAgLTB4ZmZmZkwsCisgICAgICAgIC0zLAorICAgICAgICAtMSwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMywKKyAgICAgICAgMHhmZmZmLAorICAgICAgICAweDdmZmZmZmZmLAorICAgIH07CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwlsb25nIGRlY29kZWRfdmFsdWUgPSAwOworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX2ludChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsIEFTTl9JTlRFR0VSLAorCQkJCSAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF9pbnQoJWxkKSIsIGludHZhbFtpXSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX2ludChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsICZkZWNvZGVkX3R5cGUsCisJCQkJICAgICAmZGVjb2RlZF92YWx1ZSwgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX0lOVEVHRVIKKwkgICAgJiYgZGVjb2RlZF92YWx1ZSA9PSBpbnR2YWxbaV0sCisJICAgICgiYXNuX3BhcnNlX2ludChhc25fYnVpbGRfaW50KCVsZCkpICVzOyBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IgorCSAgICAgIiBkZWNvZGVkIHZhbHVlICVsZCIsCisJICAgICBpbnR2YWxbaV0sIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fSU5URUdFUiwgZGVjb2RlZF92YWx1ZSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfaW50KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwgJm9mZnNldCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCglbGQpIiwgaW50dmFsW2ldKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF9pbnQoJWxkKSAhPSBhc25fcmVhbGxvY19yYnVpbGRfaW50KCVsZCkiLAorICAgICAgICAgICAgIGludHZhbFtpXSwgaW50dmFsW2ldKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KK30KKworeworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgaW50dmFsW10gPSB7CisJMCwgMSwgMywgMHhmZmZmLCAweDdmZmZmZmZmLCAweDgwMDAwMDAwVSwgMHhmZmZmZmZmZlUKKyAgICB9OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJdW5zaWduZWQgbG9uZyBkZWNvZGVkX3ZhbHVlID0gMDsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF91bnNpZ25lZF9pbnQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLAorCQkJCQkgICAgICBBU05fVUlOVEVHRVIsCisJCQkJCSAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50KCVsdSkiLCBpbnR2YWxbaV0pKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLAorCQkJCQkgICAgICAmZGVjb2RlZF90eXBlLCAmZGVjb2RlZF92YWx1ZSwKKwkJCQkJICAgICAgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fVUlOVEVHRVIKKwkgICAgJiYgZGVjb2RlZF92YWx1ZSA9PSBpbnR2YWxbaV0sCisJICAgICgiYXNuX3BhcnNlX3Vuc2lnbmVkX2ludChhc25fYnVpbGRfdW5zaWduZWRfaW50KCVsdSkpICVzOyIKKwkgICAgICIgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyBkZWNvZGVkIHZhbHVlICVsdSIsCisJICAgICBpbnR2YWxbaV0sIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fVUlOVEVHRVIsIGRlY29kZWRfdmFsdWUpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXQsIDEsIEFTTl9VSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50KCVsdWQpIiwgaW50dmFsW2ldKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQoJWxkKSAhPSAiCisgICAgICAgICAgICAgImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQoJWxkKSIsCisgICAgICAgICAgICAgaW50dmFsW2ldLCBpbnR2YWxbaV0pKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorfQorCisjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisKKyNkZWZpbmUgVE9JTlQ2NChjKSAoKGxvbmcgbG9uZykobG9uZykoYykuaGlnaCA8PCAzMiB8IChjKS5sb3cpCisKK3sKKyAgICBjb25zdCBzdHJ1Y3QgY291bnRlcjY0IGludHZhbFtdID0geworCXsgMHg4MDAwMDAwMFUsICAgICAgICAgIDBVIH0sCisJeyAweDgwMDAwMDAwVSwgMHhmZmZmZmZmZlUgfSwKKwl7IDB4ZmZmZmZmZmZVLCAgICAgICAgICAgMCB9LAorCXsgMHhmZmZmZmZmZlUsIDB4ZmZmZjAwMDBVIH0sCisJeyAweGZmZmZmZmZmVSwgMHhmZmZmZmZmY1UgfSwKKwl7IDB4ZmZmZmZmZmZVLCAweGZmZmZmZmZmVSB9LAorCXsgICAgICAgICAgIDAsICAgICAgICAgICAwIH0sCisJeyAgICAgICAgICAgMCwgICAgICAgICAgIDEgfSwKKwl7ICAgICAgICAgICAwLCAgICAgICAgICAgMyB9LAorCXsgICAgICAgICAgIDAsICAgICAgMHhmZmZmIH0sCisJeyAgICAgICAgICAgMCwgIDB4N2ZmZmZmZmYgfSwKKwl7ICAgICAgICAgICAxLCAgICAgICAgICAgMCB9LAorCXsgICAgICAgICAgIDEsICAweGZmZmZmZmZmIH0sCisJeyAgMHg3ZmZmZmZmZiwgICAgICAgICAgIDAgfSwKKwl7ICAweDdmZmZmZmZmLCAgMHhkZWFkYmVlZiB9LAorCXsgIDB4N2ZmZmZmZmYsICAweGZmZmZmZmZmIH0sCisgICAgfTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCXN0cnVjdCBjb3VudGVyNjQgZGVjb2RlZF92YWx1ZSA9IHsgMCB9OworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsCisJCQkJCSAgICAgIEFTTl9PUEFRVUVfSTY0LAorCQkJCQkgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NCglbGxkKSIsIFRPSU5UNjQoaW50dmFsW2ldKSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsCisJCQkJCSAgICAgICZkZWNvZGVkX3R5cGUsICZkZWNvZGVkX3ZhbHVlLAorCQkJCQkgICAgICBzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fT1BBUVVFX0k2NAorCSAgICAmJiBtZW1jbXAoJmRlY29kZWRfdmFsdWUsICZpbnR2YWxbaV0sIHNpemVvZihkZWNvZGVkX3ZhbHVlKSkgPT0gMCwKKwkgICAgKCJhc25fcGFyc2Vfc2lnbmVkX2ludDY0KGFzbl9idWlsZF9zaWduZWRfaW50NjQoJWxsZCkpICVzOyIKKwkgICAgICIgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyBkZWNvZGVkIHZhbHVlICVsbGQiLAorCSAgICAgVE9JTlQ2NChpbnR2YWxbaV0pLAorCSAgICAgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9PUEFRVUVfSTY0LCBUT0lOVDY0KGRlY29kZWRfdmFsdWUpKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF9zaWduZWRfaW50NjQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0LCAxLCBBU05fT1BBUVVFX0k2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfc2lnbmVkX2ludDY0KCVsbGQpIiwgVE9JTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF9zaWduZWRfaW50NjQoJWxsZCkgIT0gIgorICAgICAgICAgICAgICJhc25fcmVhbGxvY19yYnVpbGRfc2lnbmVkX2ludDY0KCVsbGQpIiwKKyAgICAgICAgICAgICBUT0lOVDY0KGludHZhbFtpXSksIFRPSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIFRPVUlOVDY0KGMpICgodW5zaWduZWQgbG9uZyBsb25nKShjKS5oaWdoIDw8IDMyIHwgKGMpLmxvdykKKworeworICAgIGNvbnN0IHN0cnVjdCBjb3VudGVyNjQgaW50dmFsW10gPSB7CisJeyAgICAgICAgICAwLCAgICAgICAgICAwIH0sCisJeyAgICAgICAgICAwLCAgICAgICAgICAxIH0sCisJeyAgICAgICAgICAwLCAgICAgICAgICAzIH0sCisJeyAgICAgICAgICAwLCAgICAgMHhmZmZmIH0sCisJeyAgICAgICAgICAwLCAweDdmZmZmZmZmIH0sCisJeyAgICAgICAgICAwLCAweDgwMDAwMDAwIH0sCisJeyAgICAgICAgICAwLCAweGZmZmZmZmZmIH0sCisJeyAgICAgICAgICAxLCAgICAgICAgICAwIH0sCisJeyAgICAgICAgICAxLCAweGZmZmZmZmZmIH0sCisJeyAweDdmZmZmZmZmLCAgICAgICAgICAwIH0sCisJeyAweDdmZmZmZmZmLCAweGRlYWRiZWVmIH0sCisJeyAweDdmZmZmZmZmLCAweGZmZmZmZmZmIH0sCisJeyAweGZmZmZmZmZmLCAgICAgICAgICAwIH0sCisJeyAweGZmZmZmZmZmLCAweGRlYWRiZWVmIH0sCisJeyAweGZmZmZmZmZmLCAweGZmZmZmZmZmIH0sCisgICAgfTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCXN0cnVjdCBjb3VudGVyNjQgZGVjb2RlZF92YWx1ZSA9IHsgMCB9OworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwKKwkJCQkJCUFTTl9DT1VOVEVSNjQsCisJCQkJCQkmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwKKwkJCQkJCSZkZWNvZGVkX3R5cGUsICZkZWNvZGVkX3ZhbHVlLAorCQkJCQkJc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fQ09VTlRFUjY0CisJICAgICYmIG1lbWNtcCgmZGVjb2RlZF92YWx1ZSwgJmludHZhbFtpXSwgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKSA9PSAwLAorCSAgICAoImFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkpICVzOyIKKwkgICAgICIgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyBkZWNvZGVkIHZhbHVlICVsbHUiLAorCSAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwKKwkgICAgIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fQ09VTlRFUjY0LCBUT1VJTlQ2NChkZWNvZGVkX3ZhbHVlKSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXQsIDEsIEFTTl9DT1VOVEVSNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdWQpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkgIT0gIgorICAgICAgICAgICAgICJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkiLAorICAgICAgICAgICAgIFRPVUlOVDY0KGludHZhbFtpXSksIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorCisjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCXN0cnVjdCBjb3VudGVyNjQgZGVjb2RlZF92YWx1ZSA9IHsgMCB9OworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwKKwkJCQkJCUFTTl9PUEFRVUVfQ09VTlRFUjY0LAorCQkJCQkJJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsCisJCQkJCQkmZGVjb2RlZF90eXBlLCAmZGVjb2RlZF92YWx1ZSwKKwkJCQkJCXNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX09QQVFVRV9DT1VOVEVSNjQKKwkgICAgJiYgbWVtY21wKCZkZWNvZGVkX3ZhbHVlLCAmaW50dmFsW2ldLCBzaXplb2YoZGVjb2RlZF92YWx1ZSkpID09IDAsCisJICAgICgiYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSkgJXM7IgorCSAgICAgIiBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IGRlY29kZWQgdmFsdWUgJWxsdSIsCisJICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLAorCSAgICAgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9PUEFRVUVfQ09VTlRFUjY0LCBUT1VJTlQ2NChkZWNvZGVkX3ZhbHVlKSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXQsIDEsIEFTTl9PUEFRVUVfQ09VTlRFUjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHVkKSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpICE9ICIKKyAgICAgICAgICAgICAiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpIiwKKyAgICAgICAgICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJc3RydWN0IGNvdW50ZXI2NCBkZWNvZGVkX3ZhbHVlID0geyAwIH07CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLAorCQkJCQkJQVNOX09QQVFVRV9VNjQsCisJCQkJCQkmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwKKwkJCQkJCSZkZWNvZGVkX3R5cGUsICZkZWNvZGVkX3ZhbHVlLAorCQkJCQkJc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fT1BBUVVFX1U2NAorCSAgICAmJiBtZW1jbXAoJmRlY29kZWRfdmFsdWUsICZpbnR2YWxbaV0sIHNpemVvZihkZWNvZGVkX3ZhbHVlKSkgPT0gMCwKKwkgICAgKCJhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpKSAlczsiCisJICAgICAiIGRlY29kZWQgdHlwZSAlZCA8PiAlZDsgZGVjb2RlZCB2YWx1ZSAlbGx1IiwKKwkgICAgIFRPVUlOVDY0KGludHZhbFtpXSksCisJICAgICBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX09QQVFVRV9VNjQsIFRPVUlOVDY0KGRlY29kZWRfdmFsdWUpKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgMSwgQVNOX09QQVFVRV9VNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdWQpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkgIT0gIgorICAgICAgICAgICAgICJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkiLAorICAgICAgICAgICAgIFRPVUlOVDY0KGludHZhbFtpXSksIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTRkNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEhFQURFUiBUZXN0aW5nIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICovCisKK25ldHNubXBfbGFyZ2VfZmRfc2V0IGZkczsKK25ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmZkcywgMjAwMCk7CitPS0YoZmRzLmxmc19zZXRzaXplID09IDIwMDAsICgiaW5pdGlhbGl6YXRpb24iKSk7CitPS0YobmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCZmZHMsIDIwMDApID09IDEsICgicmVzaXppbmcgdG8gMjAwMCIpKTsKK05FVFNOTVBfTEFSR0VfRkRfWkVSTygmZmRzKTsKKworeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBmZHMubGZzX3NldHNpemU7ICsraSkgeworICAgICAgICBPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX1NFVChpLCAmZmRzKTsKKwlPS0YoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9DTFIoaSwgJmZkcyk7CisJT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisgICAgfQorfQorCitPS0YobmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCZmZHMsIDMwMDApID09IDEsICgicmVzaXppbmcgdG8gMzAwMCIpKTsKKworeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBmZHMubGZzX3NldHNpemU7ICsraSkgeworICAgICAgICBPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX1NFVChpLCAmZmRzKTsKKwlPS0YoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9DTFIoaSwgJmZkcyk7CisJT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisgICAgfQorfQorCitPS0YobmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCZmZHMsIDEwMDApID09IDEsICgicmVzaXppbmcgdG8gMTAwMCIpKTsKKworeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBmZHMubGZzX3NldHNpemU7ICsraSkgeworICAgICAgICBPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX1NFVChpLCAmZmRzKTsKKwlPS0YoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9DTFIoaSwgJmZkcyk7CisJT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisgICAgfQorfQorCituZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZmZHMpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEwbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjc19jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxYWVlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjc19jbGliLmMKQEAgLTAsMCArMSw0NSBAQAorLyogSEVBREVSIFRlc3RpbmcgdGhlIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyBBUEkgKi8KK2ludCBzZWNzOworCisjZGVmaW5lIFRFU1RJVCh4LHkpIFwKKyAgICBPS0YoeSA9PSAoc2VjcyA9IG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjcyh4KSksIFwKKyAgICAgICAgKCJuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3Mgb2YgJXMgcmV0dXJuZWQgJWQsIG5vdCA1IiwgeCwgc2VjcykpCisKK1RFU1RJVCgiNSIsIDUpOworVEVTVElUKCI1IiwgNSk7CisKK1RFU1RJVCgiNXMiLCA1KTsKK1RFU1RJVCgiNVMiLCA1KTsKKworVEVTVElUKCI1bSIsIDUgKiA2MCk7CitURVNUSVQoIjVNIiwgNSAqIDYwKTsKKworVEVTVElUKCI1aCIsIDUgKiA2MCAqIDYwKTsKK1RFU1RJVCgiNUgiLCA1ICogNjAgKiA2MCk7CisKK1RFU1RJVCgiNWQiLCA1ICogNjAgKiA2MCAqIDI0KTsKK1RFU1RJVCgiNUQiLCA1ICogNjAgKiA2MCAqIDI0KTsKKworVEVTVElUKCI1dyIsIDUgKiA2MCAqIDYwICogMjQgKiA3KTsKK1RFU1RJVCgiNVciLCA1ICogNjAgKiA2MCAqIDI0ICogNyk7CisKKy8qIG5vdyB3aXRoIGxvbmdlciB0aW1lcyAqLworVEVTVElUKCIxMjM0IiwgMTIzNCk7CitURVNUSVQoIjEyMzQiLCAxMjM0KTsKKworVEVTVElUKCIxMjM0cyIsIDEyMzQpOworVEVTVElUKCIxMjM0UyIsIDEyMzQpOworCitURVNUSVQoIjEyMzRtIiwgMTIzNCAqIDYwKTsKK1RFU1RJVCgiMTIzNE0iLCAxMjM0ICogNjApOworCitURVNUSVQoIjEyMzRoIiwgMTIzNCAqIDYwICogNjApOworVEVTVElUKCIxMjM0SCIsIDEyMzQgKiA2MCAqIDYwKTsKKworVEVTVElUKCIxMjM0ZCIsIDEyMzQgKiA2MCAqIDYwICogMjQpOworVEVTVElUKCIxMjM0RCIsIDEyMzQgKiA2MCAqIDYwICogMjQpOworCitURVNUSVQoIjEyMzR3IiwgMTIzNCAqIDYwICogNjAgKiAyNCAqIDcpOworVEVTVElUKCIxMjM0VyIsIDEyMzQgKiA2MCAqIDYwICogMjQgKiA3KTsKKworCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTFzbm1wX29sZF9hcGlfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDExc25tcF9vbGRfYXBpX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjFkNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDExc25tcF9vbGRfYXBpX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBIRUFERVIgVGVzdGluZyBTTk1QIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHZpYSB0aGUgb2xkIEFQSSAqLworCitzdGF0aWMgb2lkIE9pZFtdID0geyAxLCAzLCA2LCAxLCAzLCAzMjcgfTsgLyogZXhwZXJpbWVudGFsLjMyNyAqLworc3RydWN0IHZhcmlhYmxlIHZhcl9hcnJheVtdID0geworICAgIHsgMCwgMC8qdHlwZSovLCAwLyphY2wqLywgTlVMTC8qZmluZFZhciovLCA3LCB7IDEsIDMsIDYsIDEsIDMsIDMyNywgMSB9IH0sCisgICAgeyAwLCAwLyp0eXBlKi8sIDAvKmFjbCovLCBOVUxMLypmaW5kVmFyKi8sIDcsIHsgMSwgMywgNiwgMSwgMywgMzI3LCAyIH0gfSwKKyAgICB7IDAsIDAvKnR5cGUqLywgMC8qYWNsKi8sIE5VTEwvKmZpbmRWYXIqLywgNywgeyAxLCAzLCA2LCAxLCAzLCAzMjcsIDMgfSB9LAorfTsKK25ldHNubXBfc2Vzc2lvbiAqc2VzczsKK2ludCByZXM7CisKK2luaXRfc25tcCgic25tcCIpOworCitzZXNzID0gY2FsbG9jKDEsIHNpemVvZigqc2VzcykpOworc25tcF9zZXNzX2luaXQoc2Vzcyk7CisKK3JlcyA9IAorbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCJleHAuMzI3LmEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9hcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmFyX2FycmF5WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmFyX2FycmF5KS9zaXplb2YodmFyX2FycmF5WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9pZCkvc2l6ZW9mKE9pZFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgMiwgLyogcHJpb3JpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiByYW5nZV9zdWJpZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHJhbmdlX3Vib3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRleHQiLCA1Lyp0aW1lb3V0Ki8sIDAvKmZsYWdzIC0gaWdub3JlZCovKTsKK09LKHJlcyA9PSBTTk1QRVJSX1NVQ0NFU1MsICJIYW5kbGVyIHJlZ2lzdHJhdGlvbiAoMSkuIik7CisKKy8qIFZlcmlmeSB0aGF0IGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gZG9lcyBub3QgY2F1c2UgYW55IGhhdm9jLiAqLworcmVzID0gCituZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoImV4cC4zMjcuYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YXJfYXJyYXlbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YXJfYXJyYXkpL3NpemVvZih2YXJfYXJyYXlbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoT2lkKS9zaXplb2YoT2lkWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyLCAvKiBwcmlvcml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHJhbmdlX3N1YmlkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogcmFuZ2VfdWJvdW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCIsIDUvKnRpbWVvdXQqLywgMC8qZmxhZ3MgLSBpZ25vcmVkKi8pOworT0socmVzID09IFNOTVBFUlJfU1VDQ0VTUywgIkhhbmRsZXIgcmVnaXN0cmF0aW9uICgyKS4iKTsKKworc25tcF9zaHV0ZG93bigic25tcCIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEyYmluYXJ5X2FycmF5X29pZF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTJiaW5hcnlfYXJyYXlfb2lkX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWViNTAyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEyYmluYXJ5X2FycmF5X29pZF9jbGliLmMKQEAgLTAsMCArMSw3MiBAQAorLyogSEVBREVSIFRlc3RpbmcgYmluYXJ5IE9JRCBhcnJheSAqLworCitzdGF0aWMgY29uc3QgY2hhciB0ZXN0X25hbWVbXSA9ICJiaW5hcnktYXJyYXktb2YtT0lEcy10ZXN0IjsKK29pZCBvMSA9IDE7CitvaWQgbzIgPSAyOworb2lkIG8zID0gNjsKK29pZCBvNCA9IDg7CitvaWQgbzUgPSA5Oworb2lkIG94ID0gNzsKK29pZCBveSA9IDEwOworbmV0c25tcF9pbmRleCBpMSwgaTIsIGkzLCBpNCwgaTUsIGl4LCBpeSwgKmlwOworY29uc3QgbmV0c25tcF9pbmRleCAqY29uc3QgaV9sYXN0ID0gJmk1OworbmV0c25tcF9pbmRleCAqYVtdID0geyAmaXgsICZpeSB9OworbmV0c25tcF9pbmRleCAqYltdID0geyAmaTQsICZpMiwgJmkzLCAmaTEsICZpNSB9OworbmV0c25tcF9jb250YWluZXIgKmM7CitpbnQgaTsKKworaW5pdF9zbm1wKHRlc3RfbmFtZSk7CisKK2MgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7CitjLT5jb21wYXJlID0gbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXg7CisgICAgCitpMS5vaWRzID0gJm8xOworaTIub2lkcyA9ICZvMjsKK2kzLm9pZHMgPSAmbzM7CitpNC5vaWRzID0gJm80OworaTUub2lkcyA9ICZvNTsKK2l4Lm9pZHMgPSAmb3g7CitpeS5vaWRzID0gJm95OworaTEubGVuID0gaTIubGVuID0gaTMubGVuID0gaTQubGVuID0gaTUubGVuID0gaXgubGVuID0gaXkubGVuID0gMTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihiKS9zaXplb2YoYlswXSk7ICsraSkKKyAgICBDT05UQUlORVJfSU5TRVJUKGMsIGJbaV0pOworCitmb3IgKGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpOyBpcDsgaXAgPSBDT05UQUlORVJfTkVYVChjLCBpcCkpIHsKKyAgICBmb3IgKGkgPSBzaXplb2YoYikvc2l6ZW9mKGJbMF0pIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIGlmIChjLT5jb21wYXJlKGlwLCBiW2ldKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgT0tGKGkgPj0gMCwgKCJPSUQgYlslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQgcHJlc2VudCIsIGksIGJbaV0tPm9pZHNbMF0pKTsKK30KKworZm9yIChpID0gMDsgaSA8IHNpemVvZihiKS9zaXplb2YoYlswXSk7ICsraSkgeworICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYywgYltpXSk7CisgICAgT0tGKGlwLCAoIlZhbHVlIGJbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIHByZXNlbnQiLCBpLCBiW2ldLT5vaWRzWzBdKSk7CisgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLCBiW2ldKTsKKyAgICBpZiAoYy0+Y29tcGFyZShiW2ldLCBpX2xhc3QpIDwgMCkKKyAgICAgICAgT0tGKGlwICYmIGMtPmNvbXBhcmUoYltpXSwgaXApIDwgMCwKKyAgICAgICAgICAgICgiU3VjY2Vzc29yIG9mIGJbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIGlzICUiIE5FVFNOTVBfUFJJbyAiZCIsCisgICAgICAgICAgICAgaSwgYltpXS0+b2lkc1swXSwgaXAtPm9pZHNbMF0pKTsKKyAgICBlbHNlCisgICAgICAgIE9LRighaXAsICgiTm8gc3VjY2Vzc29yIGZvdW5kIGZvciBiWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCIsIGksCisgICAgICAgICAgICAgICAgICBiW2ldLT5vaWRzWzBdKSk7Cit9CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYSkvc2l6ZW9mKGFbMF0pOyArK2kpIHsKKyAgICBpcCA9IENPTlRBSU5FUl9GSU5EKGMsIGFbaV0pOworICAgIE9LRighaXAsICgiYVslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQgYWJzZW50IiwgaSwgYVtpXS0+b2lkc1swXSkpOworICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYywgYVtpXSk7CisgICAgaWYgKGMtPmNvbXBhcmUoYVtpXSwgaV9sYXN0KSA8IDApCisgICAgICAgIE9LRihpcCAmJiBjLT5jb21wYXJlKGlwLCBhW2ldKSA+IDAsCisgICAgICAgICAgICAoIlN1Y2Nlc3NvciBvZiBhWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCBpcyAlIiBORVRTTk1QX1BSSW8gImQiLAorICAgICAgICAgICAgIGksIGFbaV0tPm9pZHNbMF0sIGlwLT5vaWRzWzBdKSk7CisgICAgZWxzZQorICAgICAgICBPS0YoIWlwLCAoIk5vIHN1Y2Nlc3NvciBmb3VuZCBmb3IgYVslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQiLCBpLAorICAgICAgICAgICAgICAgICAgYVtpXS0+b2lkc1swXSkpOworfQorCit3aGlsZSAoKGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpKSkKKyAgQ09OVEFJTkVSX1JFTU9WRShjLCBpcCk7CitDT05UQUlORVJfRlJFRShjKTsKKworc25tcF9zaHV0ZG93bih0ZXN0X25hbWUpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEzYmluYXJ5X2FycmF5X3N0cmluZ19jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTNiaW5hcnlfYXJyYXlfc3RyaW5nX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQzNjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEzYmluYXJ5X2FycmF5X3N0cmluZ19jbGliLmMKQEAgLTAsMCArMSw1OSBAQAorLyogSEVBREVSIFRlc3RpbmcgYmluYXJ5IHN0cmluZyBhcnJheSAqLworCitzdGF0aWMgY29uc3QgY2hhciB0ZXN0X25hbWVbXSA9ICJiaW5hcnktYXJyYXktb2Ytc3RyaW5ncy10ZXN0IjsKK2NvbnN0IGNoYXIgbzFbXSA9ICJ6ZWJyYSI7Citjb25zdCBjaGFyIG8yW10gPSAiYi10d28iOworY29uc3QgY2hhciBvM1tdID0gImIiOworY29uc3QgY2hhciBvNFtdID0gImNlZGFyIjsKK2NvbnN0IGNoYXIgbzVbXSA9ICJhbHBoYSI7Citjb25zdCBjaGFyIG94W10gPSAiZGV2IjsKK2NvbnN0IGNoYXIgb3lbXSA9ICJhYSI7Citjb25zdCBjaGFyKiBjb25zdCBvX2xhc3QgPSBvMTsKK2NvbnN0IGNoYXIgKmlwOworY29uc3QgY2hhciAqY29uc3QgYVtdID0geyBveCwgb3kgfTsKK2NvbnN0IGNoYXIgKmNvbnN0IGJbXSA9IHsgbzQsIG8yLCBvMywgbzEsIG81IH07CituZXRzbm1wX2NvbnRhaW5lciAqYzsKK2ludCBpOworCitpbml0X3NubXAodGVzdF9uYW1lKTsKKworYyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKK2MtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopc3RyY21wOworICAgIAorZm9yIChpID0gMDsgaSA8IHNpemVvZihiKS9zaXplb2YoYlswXSk7ICsraSkKKyAgICBDT05UQUlORVJfSU5TRVJUKGMsIGJbaV0pOworCitmb3IgKGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpOyBpcDsgaXAgPSBDT05UQUlORVJfTkVYVChjLCBpcCkpIHsKKyAgICBmb3IgKGkgPSBzaXplb2YoYikvc2l6ZW9mKGJbMF0pIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIGlmIChjLT5jb21wYXJlKGlwLCBiW2ldKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgT0tGKGkgPj0gMCwgKCJzdHJpbmcgYlslZF0gPSBcIiVzXCIgcHJlc2VudCIsIGksIGJbaV0pKTsKK30KKworZm9yIChpID0gMDsgaSA8IHNpemVvZihiKS9zaXplb2YoYlswXSk7ICsraSkgeworICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYywgYltpXSk7CisgICAgT0tGKGlwLCAoImJbJWRdID0gXCIlc1wiIHByZXNlbnQiLCBpLCBiW2ldKSk7CisgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLCBiW2ldKTsKKyAgICBpZiAoYy0+Y29tcGFyZShiW2ldLCBvX2xhc3QpIDwgMCkKKyAgICAgICAgT0tGKGlwICYmIGMtPmNvbXBhcmUoYltpXSwgaXApIDwgMCwKKyAgICAgICAgICAgICgiU3VjY2Vzc29yIG9mIGJbJWRdID0gXCIlc1wiIGlzIFwiJXNcIiIsIGksIGJbaV0sIGlwKSk7CisgICAgZWxzZQorICAgICAgICBPS0YoIWlwLCAoIk5vIHN1Y2Nlc3NvciBmb3VuZCBmb3IgYlslZF0gPSBcIiVzXCIiLCBpLCBiW2ldKSk7Cit9CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYSkvc2l6ZW9mKGFbMF0pOyArK2kpIHsKKyAgICBpcCA9IENPTlRBSU5FUl9GSU5EKGMsIGFbaV0pOworICAgIE9LRighaXAsICgiYVslZF0gPSBcIiVzXCIgYWJzZW50IiwgaSwgYVtpXSkpOworICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYywgYVtpXSk7CisgICAgaWYgKGMtPmNvbXBhcmUoYVtpXSwgb19sYXN0KSA8IDApCisgICAgICAgIE9LRihpcCAmJiBjLT5jb21wYXJlKGlwLCBhW2ldKSA+IDAsCisgICAgICAgICAgICAoIlN1Y2Nlc3NvciBvZiBhWyVkXSA9IFwiJXNcIiBpcyBcIiVzXCIiLCBpLCBhW2ldLCBpcCkpOworICAgIGVsc2UKKyAgICAgICAgT0tGKCFpcCwgKCJObyBzdWNjZXNzb3IgZm91bmQgZm9yIGFbJWRdID0gXCIlc1wiIiwgaSwgYVtpXSkpOworfQorCit3aGlsZSAoKGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpKSkKKyAgQ09OVEFJTkVSX1JFTU9WRShjLCBpcCk7CitDT05UQUlORVJfRlJFRShjKTsKKworc25tcF9zaHV0ZG93bih0ZXN0X25hbWUpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTRnZXRob3N0YnlhZGRyX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWE1NzhlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIEhFQURFUiBUZXN0aW5nIG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigpIAorICovCisKK1NPQ0tfU1RBUlRVUDsKKworeworICAgIGludCAgICAgICAgICAgICByYW5fdGVzdCA9IDA7CisjaWZkZWYgSEFWRV9HRVRIT1NUQllBRERSCisgICAgc3RydWN0IGhvc3RlbnQgKmgsICpoMiA9IE5VTEw7CisgICAgc3RydWN0IGluX2FkZHIgIHY0bG9vcDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX2FkZHI7CisgICAgaW50ICAgICAgICAgICAgIHM7CisKKyAgICB2NGxvb3Auc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgICBtZW1zZXQoJnNpbl9hZGRyLCAwLCBzaXplb2Yoc2luX2FkZHIpKTsKKyAgICBzaW5fYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBzaW5fYWRkci5zaW5fYWRkciA9IHY0bG9vcDsKKyAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgIGlmIChzID49IDApIHsKKyAgICAgICAgaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2luX2FkZHIsIHNpemVvZihzaW5fYWRkcikpID49IDApIHsKKyAgICAgICAgICAgIGggPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoJnY0bG9vcCwgc2l6ZW9mKHY0bG9vcCksIEFGX0lORVQpOworICAgICAgICAgICAgaWYgKGgpCisgICAgICAgICAgICAgICAgaDIgPSBnZXRob3N0YnluYW1lKGgtPmhfbmFtZSk7CisgICAgICAgICAgICBPS0YoaCAmJiAoc3RyY21wKGgtPmhfbmFtZSwgImxvY2FsaG9zdCIpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoaDIgJiYgbWVtY21wKGgyLT5oX2FkZHIsICZ2NGxvb3Auc19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHY0bG9vcC5zX2FkZHIpKSA9PSAwKSksCisgICAgICAgICAgICAgICAgKCIxMjcuMC4wLjEgbG9va3VwICglcyAtPiAlcykiLCBoID8gaC0+aF9uYW1lIDogIihmYWlsZWQpIiwKKyAgICAgICAgICAgICAgICAgaDIgPyBpbmV0X250b2EoKihzdHJ1Y3QgaW5fYWRkciAqKSBoMi0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhfYWRkcikgOiAiKGZhaWxlZCkiKSk7CisgICAgICAgICAgICByYW5fdGVzdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2Uocyk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFyYW5fdGVzdCkKKyAgICAgICAgT0tGKDEsICgiU2tpcHBlZCBJUHY0IHRlc3QiKSk7Cit9CisKK3sKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaDsKKyNpZmRlZiBjeWd3aW4KKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGluNl9hZGRyIHY2bG9vcCA9IHsgeyBJTjZBRERSX0xPT1BCQUNLX0lOSVQgfSB9OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGluNl9hZGRyIHY2bG9vcCA9IElONkFERFJfTE9PUEJBQ0tfSU5JVDsKKyNlbmRpZgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNl9hZGRyOworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFkZHIgPSBOVUxMLCAqYXA7CisgICAgY2hhciAgICAgICAgICAgIGJ1Zls2NF07CisgICAgaW50ICAgICAgICAgICAgIHMsIHJlcywgcmFuX3Rlc3QgPSAwOworCisgICAgbWVtc2V0KCZzaW42X2FkZHIsIDAsIHNpemVvZihzaW42X2FkZHIpKTsKKyAgICBzaW42X2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBzaW42X2FkZHIuc2luNl9hZGRyID0gdjZsb29wOworICAgIHMgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOworICAgIGlmIChzID49IDApIHsKKyAgICAgICAgaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2luNl9hZGRyLCBzaXplb2Yoc2luNl9hZGRyKSkgPj0KKyAgICAgICAgICAgIDApIHsKKyAgICAgICAgICAgIHN0cmNweShidWYsICIoZmFpbGVkKSIpOworICAgICAgICAgICAgaCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmdjZsb29wLCBzaXplb2YodjZsb29wKSwgQUZfSU5FVDYpOworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICByZXMgPSBnZXRhZGRyaW5mbyhoLT5oX25hbWUsIE5VTEwsICZoaW50cywgJmFkZHIpOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGFwID0gYWRkcjsgYXA7IGFwID0gYXAtPmFpX25leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKGFwLT5haV9mYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYXAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpX2FkZHIpLT5zaW42X2FkZHIsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghYXApCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCAibm8gQUZfSU5FVDYgYWRkcmVzcyBmb3VuZCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhhZGRyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZ2V0YWRkcmluZm8oKSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPS0YoaCAmJiAoc3RyY21wKGgtPmhfbmFtZSwgImxvY2FsaG9zdCIpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAocmVzID09IDAgJiYgbWVtY21wKGFkZHItPmFpX2FkZHIsICZzaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2luNl9hZGRyKSkgPT0gMCkpLAorICAgICAgICAgICAgICAgICgiOjoxIGxvb2t1cCAoJXMgLT4gJXMpIiwgaCA/IGgtPmhfbmFtZSA6ICIoZmFpbGVkKSIsCisgICAgICAgICAgICAgICAgIGJ1ZikpOworICAgICAgICAgICAgcmFuX3Rlc3QgPSAxOworICAgICAgICB9CisgICAgICAgIGNsb3NlKHMpOworICAgIH0KKyAgICBpZiAoIXJhbl90ZXN0KQorICAgICAgICBPS0YoMSwgKCJTa2lwcGVkIElQdjYgdGVzdCIpKTsKK30KKworU09DS19DTEVBTlVQOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE1aW50NjRfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE1aW50NjRfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWY0YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTVpbnQ2NF9jbGliLmMKQEAgLTAsMCArMSw4MiBAQAorLyogSEVBREVSIFRlc3RpbmcgNjQtYml0IGludGVnZXIgb3BlcmF0aW9ucyAoVTY0KS4gKi8KKworaW50IGksIGo7CitjaGFyIGJ1ZlsyMl07CitzdGF0aWMgY29uc3QgaW50NjRfdCBpbnR2YWxbXSA9IHsKKyAgICAwLAorICAgIC0xLAorICAgIDEsCisgICAgMzcsCisgICAgMHg3ZmZmZmZmZlVMLAorICAgIDB4ODAwMDAwMDBVTCwKKyAgICAweDk5OTk5OTk5VUwsCisgICAgMHg3ZmZmZmZmZmZmZmZmZmZmVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDAwMFVMTCwKK307CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisgICAgVTY0IGEsIGI7CisgICAgYS5sb3cgPSAodWludDMyX3QpaW50dmFsW2ldOworICAgIGEuaGlnaCA9ICh1aW50MzJfdCkoaW50dmFsW2ldID4+IDMyKTsKKyAgICBwcmludEk2NChidWYsICZhKTsKKyAgICByZWFkNjQoJmIsIGJ1Zik7CisgICAgT0tGKG1lbWNtcCgmYSwgJmIsIHNpemVvZihhKSkgPT0gMCwKKyAgICAgICAgKCJbJWRdOiAlIiBQUklkNjQgIiA8PiAlcyA8PiAlIiBQUklkNjQsIGksIGludHZhbFtpXSwgYnVmLAorICAgICAgICAgKCh1aW50NjRfdCliLmhpZ2gpIDw8IDMyIHwgYi5sb3cpKTsKK30KKworZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKyAgICBmb3IgKGogPSBpOyBqIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraikgeworICAgICAgICBVNjQgYSwgYjsKKyAgICAgICAgdWludDY0X3QgZDsKKyAgICAgICAgYS5sb3cgPSAodWludDMyX3QpaW50dmFsW2ldOworICAgICAgICBhLmhpZ2ggPSAodWludDMyX3QpKGludHZhbFtpXSA+PiAzMik7CisgICAgICAgIGIubG93ID0gKHVpbnQzMl90KWludHZhbFtqXTsKKyAgICAgICAgYi5oaWdoID0gKHVpbnQzMl90KShpbnR2YWxbal0gPj4gMzIpOworICAgICAgICB1NjRJbmNyKCZhLCAmYik7CisgICAgICAgIGQgPSAodWludDY0X3QpYS5oaWdoIDw8IDMyIHwgYS5sb3c7CisgICAgICAgIE9LRihpbnR2YWxbaV0gKyBpbnR2YWxbal0gPT0gZCwKKyAgICAgICAgICAgICgiJSIgUFJJZDY0ICIgKyAlIiBQUklkNjQgIiA9ICUiIFBSSWQ2NCAiIDw+ICUiIFBSSWQ2NCwgaW50dmFsW2ldLAorICAgICAgICAgICAgIGludHZhbFtqXSwgaW50dmFsW2ldICsgaW50dmFsW2pdLCBkKSk7CisgICAgfQorfQorICAgICAgICAKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisgICAgZm9yIChqID0gaTsgaiA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2opIHsKKyAgICAgICAgVTY0IGEsIGIsIGM7CisgICAgICAgIHVpbnQ2NF90IGQ7CisgICAgICAgIGEubG93ID0gKHVpbnQzMl90KWludHZhbFtpXTsKKyAgICAgICAgYS5oaWdoID0gKHVpbnQzMl90KShpbnR2YWxbaV0gPj4gMzIpOworICAgICAgICBiLmxvdyA9ICh1aW50MzJfdClpbnR2YWxbal07CisgICAgICAgIGIuaGlnaCA9ICh1aW50MzJfdCkoaW50dmFsW2pdID4+IDMyKTsKKyAgICAgICAgdTY0U3VidHJhY3QoJmEsICZiLCAmYyk7CisgICAgICAgIGQgPSAodWludDY0X3QpYy5oaWdoIDw8IDMyIHwgYy5sb3c7CisgICAgICAgIE9LRihpbnR2YWxbaV0gLSBpbnR2YWxbal0gPT0gZCwKKyAgICAgICAgICAgICgiJSIgUFJJZDY0ICIgLSAlIiBQUklkNjQgIiA9ICUiIFBSSWQ2NCAiIDw+ICUiIFBSSWQ2NCwgaW50dmFsW2ldLAorICAgICAgICAgICAgIGludHZhbFtqXSwgaW50dmFsW2ldIC0gaW50dmFsW2pdLCBkKSk7CisgICAgfQorfQorICAgICAgICAKK3sKKyAgICBVNjQgb2xkX3ZhbCwgbmV3X3ZhbDsKKyAgICBvbGRfdmFsLmxvdyA9IDc7CisgICAgb2xkX3ZhbC5oaWdoID0gMDsKKyAgICBuZXdfdmFsID0gb2xkX3ZhbDsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDAsICJjd3JhcDEiKTsKKyAgICBuZXdfdmFsLmxvdyA9IDg7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSAwLCAiY3dyYXAyIik7CisgICAgbmV3X3ZhbC5sb3cgPSA2OworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gMzIsICJjd3JhcDMiKTsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDEpID09IDMyCisgICAgICAgJiYgbmV3X3ZhbC5sb3cgPT0gNiAmJiBuZXdfdmFsLmhpZ2ggPT0gMSwgImN3cmFwNCIpOworICAgIG9sZF92YWwubG93ID0gNzsKKyAgICBvbGRfdmFsLmhpZ2ggPSAweGZmZmZmZmZmVTsKKyAgICBuZXdfdmFsLmxvdyA9IDc7CisgICAgbmV3X3ZhbC5oaWdoID0gb2xkX3ZhbC5oaWdoOworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gMCwgImN3cmFwNSIpOworICAgIG5ld192YWwubG93ID0gODsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDAsICJjd3JhcDYiKTsKKyAgICBuZXdfdmFsLmxvdyA9IDY7CisgICAgbmV3X3ZhbC5oaWdoID0gMDsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDY0LCAiY3dyYXA3Iik7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTZyZWFkX2NvbmZpZ19jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTZyZWFkX2NvbmZpZ19jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjZWVkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNnJlYWRfY29uZmlnX2NsaWIuYwpAQCAtMCwwICsxLDgyIEBACisvKiBIRUFERVIgVGVzdGluZyByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCgpLiAqLworCitzdHJ1Y3QgcmVhZF9jb25maWdfdGVzdGNhc2UgeworICAgIC8qCisgICAgICogaW5wdXRzIAorICAgICAqLworICAgIGNvbnN0IGNoYXIgICAgICooKnBmKSAoY29uc3QgY2hhciAqIHJlYWRmcm9tLCB1X2NoYXIgKiogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKTsKKyAgICBjb25zdCBjaGFyICAgICAqcmVhZGZyb207CisgICAgc2l6ZV90ICAgICAgICAgIG9idWZfbGVuOworCisgICAgLyoKKyAgICAgKiBleHBlY3RlZCBvdXRwdXRzIAorICAgICAqLworICAgIHNpemVfdCAgICAgICAgICBleHBlY3RlZF9vZmZzZXQ7CisgICAgY29uc3QgdV9jaGFyICAgKmV4cGVjdGVkX291dHB1dDsKKyAgICBzaXplX3QgICAgICAgICAgZXhwZWN0ZWRfbGVuOworfTsKKworc3RhdGljIGNvbnN0IHVfY2hhciBvYnVmMVtdID0geyAxLCAwLCAyIH07CitzdGF0aWMgY29uc3QgdV9jaGFyIG9idWYyW10gPSB7ICdhJywgJ2InLCAnYycsIDAgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWFkX2NvbmZpZ190ZXN0Y2FzZSB0ZXN0X2lucHV0W10gPSB7CisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIiLCAgICAgICAgICAgMSwgLTEsIE5VTEwsICAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAiLCAgICAgICAgMSwgLTEsIE5VTEwsICAxIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAgMCIsICAgICAgMSwgLTEsIE5VTEwsICAxIH0sCisKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIiwgICAxLCAtMSwgTlVMTCwgIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIiwgICAyLCAtMSwgTlVMTCwgIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIiwgICAzLCAtMSwgb2J1ZjEsIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIiwgICA0LCAtMSwgb2J1ZjEsIDMgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIDAiLCA0LCAgOSwgb2J1ZjEsIDMgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MDEwMDAyIiwgICAwLCAtMSwgb2J1ZjEsIDMgfSwKKworICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIiwgICAgICAgIDEsIC0xLCBOVUxMLCAgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIHoiLCAgICAgIDEsICA0LCBOVUxMLCAgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIiwgICAgICAgIDIsIC0xLCBOVUxMLCAgMSB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIiwgICAgICAgIDMsIC0xLCBvYnVmMiwgMiB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIiwgICAgICAgIDQsIC0xLCBvYnVmMiwgMyB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIHoiLCAgICAgIDQsICA0LCBvYnVmMiwgMyB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiYWJjIiwgICAgICAgIDAsIC0xLCBvYnVmMiwgMyB9LAorfTsKKwordW5zaWduZWQgaW50IGksIGosIG9rOworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3RfaW5wdXQpIC8gc2l6ZW9mKHRlc3RfaW5wdXRbMF0pOyBpKyspIHsKKyAgICBjb25zdCBzdHJ1Y3QgcmVhZF9jb25maWdfdGVzdGNhc2UgKmNvbnN0IHAgPSAmdGVzdF9pbnB1dFtpXTsKKyAgICBzaXplX3QgICAgICAgICAgbGVuID0gcC0+b2J1Zl9sZW47CisgICAgdV9jaGFyICAgICAgICAgKnN0ciA9IGxlbiA+IDAgPyBtYWxsb2MobGVuKSA6IE5VTEw7CisgICAgY29uc3QgY2hhciAgICAgKnJlc3VsdDsKKyAgICBzaXplX3QgICAgICAgICAgb2Zmc2V0OworCisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgcmVzdWx0ID0gKHAtPnBmKSAocC0+cmVhZGZyb20sICZzdHIsICZsZW4pOworICAgIG9mZnNldCA9IHJlc3VsdCA/IHJlc3VsdCAtIHAtPnJlYWRmcm9tIDogLTE7CisgICAgT0tGKG9mZnNldCA9PSBwLT5leHBlY3RlZF9vZmZzZXQsCisgICAgICAgICgidGVzdCAlZDogZXhwZWN0ZWQgb2Zmc2V0ICUiIE5FVFNOTVBfUFJJeiAiZCwgZ290IG9mZnNldCAlIgorICAgICAgICAgTkVUU05NUF9QUkl6ICJkIiwgaSwgcC0+ZXhwZWN0ZWRfb2Zmc2V0LCBvZmZzZXQpKTsKKyAgICBpZiAob2Zmc2V0ID09IHAtPmV4cGVjdGVkX29mZnNldCkgeworICAgICAgICBPS0YobGVuID09IHAtPmV4cGVjdGVkX2xlbiwKKyAgICAgICAgICAgICgidGVzdCAlZDogZXhwZWN0ZWQgbGVuZ3RoICUiIE5FVFNOTVBfUFJJeiAiZCwgZ290IGxlbmd0aCAlIgorICAgICAgICAgICAgIE5FVFNOTVBfUFJJeiAiZCIsIGksIHAtPmV4cGVjdGVkX2xlbiwgbGVuKSk7CisgICAgICAgIGlmIChsZW4gPT0gcC0+ZXhwZWN0ZWRfbGVuKSB7CisgICAgICAgICAgICBvayA9IGxlbiA8IDAgfHwgIXAtPmV4cGVjdGVkX291dHB1dAorICAgICAgICAgICAgICAgIHx8IG1lbWNtcChzdHIsIHAtPmV4cGVjdGVkX291dHB1dCwgbGVuKSA9PSAwCisgICAgICAgICAgICAgICAgfHwgcC0+ZXhwZWN0ZWRfb3V0cHV0W2xlbl0gIT0gMDsKKyAgICAgICAgICAgIE9LRihvaywgKCJ0ZXN0ICVkOiBvdXRwdXQgYnVmZmVyIG1pc21hdGNoIiwgaSkpOworICAgICAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQ6ICIpOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwLT5leHBlY3RlZF9sZW47ICsraikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIHAtPmV4cGVjdGVkX291dHB1dFtqXSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbkFjdHVhbDogICAiKTsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyArK2opCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCBzdHJbal0pOworICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdHIpCisgICAgICAgIGZyZWUoc3RyKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxN3N0cnRvdWxsX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxN3N0cnRvdWxsX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWI5Y2FkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE3c3RydG91bGxfY2xpYi5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHN0cnRvdWxsKCkuICovCisKKyNpZmRlZiBIQVZFX1NUUlRPVUxMCisKK09LKDEsICJTa2lwcGluZyBzdHJ0b3VsbCgpIHRlc3QgYmVjYXVzZSB1c2luZyBzdHJ0b3VsbCgpIGZyb20gQyBsaWJyYXJ5LlxuIik7OworCisjZWxzZQorCisvKgorICogVUlOVDY0X0M6IEM5OSBtYWNybyBmb3IgdGhlIHN1ZmZpeCBmb3IgdWludDY0X3QgY29uc3RhbnRzLiAKKyAqLworI2lmbmRlZiBVSU5UNjRfQworI2lmZGVmIF9NU0NfVkVSCisjZGVmaW5lIFVJTlQ2NF9DKGMpIGMjI3VpNjQKKyNlbHNlCisjZGVmaW5lIFVJTlQ2NF9DKGMpIGMjI1VMTAorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIEFjY29yZGluZyB0byB0aGUgQzk5IHN0YW5kYXJkLCB0aGUgY29uc3RhbnQgVUxMT05HX01BWCBtdXN0IGJlIGRlZmluZWQgaW4KKyAqIDxsaW1pdHMuaD4uIERlZmluZSBpdCBoZXJlIGZvciBwcmUtQzk5IGNvbXBpbGVycy4KKyAqLworI2lmbmRlZiBVTExPTkdfTUFYCisjZGVmaW5lIFVMTE9OR19NQVggVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKQorI2VuZGlmCisKKyNpZm5kZWYgUFJJdTY0CisjaWZkZWYgX01TQ19WRVIKKyNkZWZpbmUgUFJJdTY0ICJJNjR1IgorI2Vsc2UKKyNkZWZpbmUgUFJJdTY0ICJsbHUiCisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgeworICAgIC8qCisgICAgICogaW5wdXRzIAorICAgICAqLworICAgIGNvbnN0IGNoYXIgICAgICpucHRyOworICAgIGludCAgICAgICAgICAgICBiYXNlOworICAgIC8qCisgICAgICogZXhwZWN0ZWQgb3V0cHV0cyAKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgZXhwZWN0ZWRfZXJybm87CisgICAgaW50ICAgICAgICAgICAgIGV4cGVjdGVkX2VuZDsKKyAgICB1aW50NjRfdCAgICAgICAgZXhwZWN0ZWRfcmVzdWx0OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSB0ZXN0X2lucHV0W10gPSB7CisgICAgeyIweDAiLCAwLCAwLCAzLCAwfSwKKyAgICB7IjEiLCAwLCAwLCAxLCAxfSwKKyAgICB7IjB4MSIsIDAsIDAsIDMsIDF9LAorICAgIHsiICAtMDY2NiIsIDAsIDAsIDcsIC0wNjY2fSwKKyAgICB7IiAgLTB4NjY2IiwgMCwgMCwgOCwgLTB4NjY2fSwKKyAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwgMCwgMCwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZSl9LAorICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZlIiwgMCwgMCwgMTgsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZSl9LAorICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLCAwLCAwLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCisgICAgeyIweGZmZmZmZmZmZmZmZmZmZmYiLCAwLCAwLCAxOCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCisgICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNiIsIDAsIEVSQU5HRSwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAorICAgIHsiMHgxMDAwMDAwMDAwMDAwMDAwMCIsIDAsIEVSQU5HRSwgMTksIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAorICAgIHsiZmYiLCAxNiwgMCwgMiwgMjU1fSwKKyAgICB7IjB4ZmYiLCAxNiwgMCwgNCwgMjU1fSwKKyAgICB7IiAiLCAwLCAwLCAwLCAwfSwKKyAgICB7IjB4IiwgMCwgMCwgMSwgMH0sCisgICAgeyIweCIsIDgsIDAsIDEsIDB9LAorICAgIHsiMHgiLCAxNiwgMCwgMSwgMH0sCisgICAgeyJ6eXl5IiwgMCwgMCwgMCwgMH0sCisgICAgeyIweGZmZmZmZmZmZmZmZmZmZmZmIiwgMCwgRVJBTkdFLCAxOSwgVUxMT05HX01BWH0sCisgICAgeyIweGZmZmZmZmZmZmZmZmZmZmZmeiIsIDAsIEVSQU5HRSwgMTksIFVMTE9OR19NQVh9Cit9OworCit1bnNpZ25lZCBpbnQgICAgaTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0X2lucHV0KSAvIHNpemVvZih0ZXN0X2lucHV0WzBdKTsgaSsrKSB7CisgICAgY29uc3Qgc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlICpjb25zdCBwID0gJnRlc3RfaW5wdXRbaV07CisgICAgY2hhciAgICAgICAgICAgKmVuZHB0cjsKKyAgICB1aW50NjRfdCAgICAgICAgcmVzdWx0OworCisgICAgZXJybm8gPSAwOworICAgIHJlc3VsdCA9IHN0cnRvdWxsKHAtPm5wdHIsICZlbmRwdHIsIHAtPmJhc2UpOworICAgIE9LRihlcnJubyA9PSBwLT5leHBlY3RlZF9lcnJubywKKyAgICAgICAgKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlcnJubyAlZCwgZ290IGVycm5vICVkIiwKKyAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2Vycm5vLCBlcnJubykpOworICAgIE9LRihyZXN1bHQgPT0gcC0+ZXhwZWN0ZWRfcmVzdWx0LAorICAgICAgICAoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIHJlc3VsdCAlIiBQUkl1NjQKKyAgICAgICAgICIsIGdvdCByZXN1bHQgJSIgUFJJdTY0LAorICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfcmVzdWx0LCByZXN1bHQpKTsKKyAgICBPS0YoZW5kcHRyIC0gcC0+bnB0ciA9PSBwLT5leHBlY3RlZF9lbmQsCisgICAgICAgICgidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZW5kICVkLCBnb3QgZW5kICVkIiwKKyAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2VuZCwgKGludCkgKGVuZHB0ciAtIHAtPm5wdHIpKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE4cmVhZF9jb25maWdfY2FwcC5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE4cmVhZF9jb25maWdfY2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YTkyYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMThyZWFkX2NvbmZpZ19jYXBwLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBldGltZXRlc3QuYworICoKKyAqIEhFQURFUiBUZXN0aW5nIHJlYWRfY29uZmlnLmMgc2h1dGRvd24gY2FsbGJhY2sKKyAqCisgKiBFeHBlY3RlZCBTVUNDRVNTZXMgZm9yIGFsbCB0ZXN0czogICAgOAorICoKKyAqIFRlc3Qgb2Ygc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciAgICAgICAgICAgICAgICAgICAgCVNVQ0NFU1NlczogIDQKKyAqIFRlc3Qgb2YgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzCSAgICAgICAgICAgICAgCVNVQ0NFU1NlczogIDQKKyAqCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaD4KKworLyogI3VuZGVmIFRFU1RfSU5URVJOQUxfQVBJICovCisjZGVmaW5lIFRFU1RfSU5URVJOQUxfQVBJIDEKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMuCisgKi8KK2ludCBjYWxsYmFja19jYWxsZWQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXN0X2NhbGxiYWNrKHZvaWQpOworc3RhdGljIHZvaWQgdGVzdF9jYWxsYmFjayh2b2lkKSB7CisJKytjYWxsYmFja19jYWxsZWQ7Cit9OworCitzdGF0aWMgdm9pZCBwYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpOworc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKSB7CisJLyogZG8gbm90aGluZyAqLworfTsKKworLyogZWFjaCB0ZXN0IHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgPjAgb24gZmFpbHVyZSAqLworaW50IHRlc3QxKHZvaWQpOworaW50IHRlc3QyKHZvaWQpOworaW50IHRlc3QzKHZvaWQpOworCitpbnQgKCp0ZXN0c1tdKSh2b2lkKSA9IHsgdGVzdDEsIHRlc3QyLCB0ZXN0MyB9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBpLHJldD0wOworICAgIGZvcihpPTA7aTxzaXplb2YodGVzdHMpL3NpemVvZigqdGVzdHMpOysraSkKKwkgICAgcmV0Kz10ZXN0c1tpXSgpOworICAgIGlmIChfX2RpZF9wbGFuID09IDApIHsKKyAgICAgICBQTEFOKF9fdGVzdF9jb3VudGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IHRlc3QxKCkgeworICAgIGludCBzdW0gPSAwOworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgZnByaW50ZihzdGRvdXQsICIjIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgdGVzdHNcbiIpOworICAgIGluaXRfc25tcCgidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigidGVzdGluZyIsIHBhcnNlX2NvbmZpZywgdGVzdF9jYWxsYmFjaywgIm1vZHVsZS1uYW1lIG1vZHVsZS1wYXRoIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGFmdGVyIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTEsICgiQ2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSBhbmQgb25seSBvbmNlIGFmdGVyIHVucmVnaXN0ZXJpbmcgaGFuZGxlciAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgc25tcF9zaHV0ZG93bigidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSBhbmQgb25seSBvbmNlIGFmdGVyIHNodXRkb3duIC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgcmV0dXJuIChzdW09PTEpPzA6MTsKK30KKworaW50IHRlc3QyKHZvaWQpIHsKKyAgICBpbnQgc3VtID0gMDsKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMgdGVzdHNcbiIpOworICAgIGluaXRfc25tcCgidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigidGVzdGluZyIsIHBhcnNlX2NvbmZpZywgdGVzdF9jYWxsYmFjaywgIm1vZHVsZS1uYW1lIG1vZHVsZS1wYXRoIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGFmdGVyIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBzbm1wX3NodXRkb3duKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MSwgKCJDYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIGFuZCBvbmx5IG9uY2UgZHVyaW5nIHNodXRkb3duIC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgcmV0dXJuIChzdW09PTEpPzA6MTsKK30KKworaW50IHRlc3QzKHZvaWQpIHsKKyNpZmRlZiBURVNUX0lOVEVSTkFMX0FQSQorICAgIGludCBzdW0gPSAwOworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgZnByaW50ZihzdGRvdXQsICIjIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyBpbnRlcm5hbCBhcGkgdGVzdHNcbiIpOworICAgIGluaXRfc25tcCgidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigidGVzdGluZyIsIHBhcnNlX2NvbmZpZywgdGVzdF9jYWxsYmFjaywgIm1vZHVsZS1uYW1lIG1vZHVsZS1wYXRoIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGFmdGVyIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0xLCAoIkNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBhZnRlciB1bnJlZ2lzdGVyaW5nIGhhbmRsZXIgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHNubXBfc2h1dGRvd24oInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCBkdXJpbmcgc2h1dGRvd24gYWZ0ZXIgdW5yZWdpc3RlcmluZyBoYW5kbGVyIC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgcmV0dXJuIChzdW09PTEpPzA6MTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOV9zbm1wX3NlcnZpY2VfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE5X3NubXBfc2VydmljZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlYzhkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOV9zbm1wX3NlcnZpY2VfY2xpYi5jCkBAIC0wLDAgKzEsMjUzIEBACisvKiBIRUFERVIgVGVzdGluZyBkb21haW4gYW5kIHRhcmdldCByZWdpc3RyYXRpb25zIGZyb20gc25tcF9zZXJ2aWNlLiAqLworCisvKiBTZXR1cCBjb25maWd1cmF0aW9uIHJlYWRpbmcgKi8KK25ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSwgInRlc3Rwcm9nIik7CisKK25ldHNubXBfcmVnaXN0ZXJfc2VydmljZV9oYW5kbGVycygpOworCituZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSEFWRV9SRUFEX0NPTkZJRywgMSk7CisKKy8qIENsZWFyIGFsbCBkZWZhdWx0IHZhbHVlcyAqLworbmV0c25tcF9jbGVhcl9kZWZhdWx0X2RvbWFpbigpOworbmV0c25tcF9jbGVhcl9kZWZhdWx0X3RhcmdldCgpOworCisvKiBUZXN0IGRvbWFpbiBsb29rdXAgKi8KKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbigiYSIsICIiKSA9PSAwLAorICAgInJlZ2lzdGVyIGFuIGVtcHR5IHRva2VuIGluIGRvbWFpbiAnYSciKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbigiYiIsICJhbGZhIikgPT0gMCwKKyAgICAicmVnaXN0ZXIgYSBzaW5nbGUgdG9rZW4gaW4gZG9tYWluICdiJyIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluKCJjIiwgImFsZmEgYmV0YSIpID09IDAsCisgICAicmVnaXN0ZXIgdHdvIHRva2VucyBpbiBkb21haW4gJ2MnIik7CisKKyNkZWZpbmUgT0tfU1RSQ01QKG5hbWUsIHZhbHVlLCBleHBlY3RlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgT0tGKHZhbHVlICE9IE5VTEwgJiYgc3RyY21wKGV4cGVjdGVkLCB2YWx1ZSkgPT0gMCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgiTG9va3VwIG9mICciICNuYW1lICInIGV4cGVjdGVkICciIGV4cGVjdGVkICInLCBnb3QgJXMlcyVzIiwgICAgIFwKKyAgICAgICB2YWx1ZSA/ICInIiA6ICIiLCB2YWx1ZSA/IHZhbHVlIDogIk5VTEwiLCB2YWx1ZSA/ICInIiA6ICIiKSkKKworI2RlZmluZSBPS19TVFJfSVNfTlVMTChuYW1lLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBPS0YodmFsdWUgPT0gTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKCJMb29rdXAgb2YgJyIgI25hbWUgIicgZXhwZWN0ZWQgTlVMTCwgZ290ICVzJXMlcyIsICAgICAgICAgICAgICAgXAorICAgICAgIHZhbHVlID8gIiciIDogIiIsIHZhbHVlID8gdmFsdWUgOiAiTlVMTCIsIHZhbHVlID8gIiciIDogIiIpKQorCisjZGVmaW5lIE9LX0lTX05VTEwobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIE9LRih2YWx1ZSA9PSBOVUxMLCAoIkxvb2t1cCBvZiAnIiAjbmFtZSAiJyBleHBlY3RlZCBOVUxMLCBnb3QgJXAiLCB2YWx1ZSkpCisKKyNkZWZpbmUgT0tfSVNfTk9UX05VTEwobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgT0tGKHZhbHVlICE9IE5VTEwsICgiTG9va3VwIG9mICciICNuYW1lICInIGV4cGVjdGVkIG5vbi1OVUxMLCBnb3QgJXAiLCB2YWx1ZSkpCisKK3sKKyAgY29uc3QgY2hhciAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImEiKTsKKyAgT0tfU1RSQ01QKGEsIHQsICIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImIiKTsKKyAgT0tfU1RSQ01QKGIsIHQsICJhbGZhIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJjIik7CisgIE9LX1NUUkNNUChjLCB0LCAiYWxmYSIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiZCIpOworICBPS19TVFJfSVNfTlVMTChkLCB0KTsKK30KKworeworICBjb25zdCBjaGFyICpjb25zdCAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJhIik7CisgIE9LX0lTX05PVF9OVUxMKGEsIHQpOworICBPS19TVFJDTVAoYVswXSwgdFswXSwgIiIpOworICBPS19TVFJfSVNfTlVMTChhWzFdLCB0WzFdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJiIik7CisgIE9LX0lTX05PVF9OVUxMKGIsIHQpOworICBPS19TVFJDTVAoYlswXSwgdFswXSwgImFsZmEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYlsxXSwgdFsxXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYyIpOworICBPS19JU19OT1RfTlVMTChjLCB0KTsKKyAgT0tfU1RSQ01QKGNbMF0sIHRbMF0sICJhbGZhIik7CisgIE9LX1NUUkNNUChjWzFdLCB0WzFdLCAiYmV0YSIpOworICBPS19TVFJfSVNfTlVMTChjWzJdLCB0WzJdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJkIik7CisgIE9LX0lTX05VTEwoZCwgdCk7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49YiBnYW1tYSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAicmVnaXN0ZXIgdXNlciBkb21haW4gZm9yICdiJyIpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPWMgZ2FtbWEgZGVsdGEiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgInJlZ2lzdGVyIHVzZXIgZG9tYWlucyBmb3IgJ2MnIik7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49YjIgZ2FtbWEiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgInJlZ2lzdGVyIHVzZXIgZG9tYWluIGZvciAnYjInIik7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49YzIgZ2FtbWEgZGVsdGEiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgInJlZ2lzdGVyIHVzZXIgZG9tYWlucyBmb3IgJ2MyJyIpOworfQorCit7CisgIGNvbnN0IGNoYXIgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJiIik7CisgIE9LX1NUUkNNUChiLCB0LCAiZ2FtbWEiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImIyIik7CisgIE9LX1NUUkNNUChiMiwgdCwgImdhbW1hIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJjIik7CisgIE9LX1NUUkNNUChjLCB0LCAiZ2FtbWEiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImMyIik7CisgIE9LX1NUUkNNUChjMiwgdCwgImdhbW1hIik7Cit9CisKK3sKKyAgY29uc3QgY2hhciAqY29uc3QgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYiIpOworICBPS19JU19OT1RfTlVMTChiLCB0KTsKKyAgT0tfU1RSQ01QKGJbMF0sIHRbMF0sICJnYW1tYSIpOworICBPS19TVFJfSVNfTlVMTChiWzFdLCB0WzFdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJiMiIpOworICBPS19JU19OT1RfTlVMTChiMiwgdCk7CisgIE9LX1NUUkNNUChiMlswXSwgdFswXSwgImdhbW1hIik7CisgIE9LX1NUUl9JU19OVUxMKGIyWzFdLCB0WzFdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJjIik7CisgIE9LX0lTX05PVF9OVUxMKGMsIHQpOworICBPS19TVFJDTVAoY1swXSwgdFswXSwgImdhbW1hIik7CisgIE9LX1NUUkNNUChjWzFdLCB0WzFdLCAiZGVsdGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoY1syXSwgdFsyXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYzIiKTsKKyAgT0tfSVNfTk9UX05VTEwoYzIsIHQpOworICBPS19TVFJDTVAoYzJbMF0sIHRbMF0sICJnYW1tYSIpOworICBPS19TVFJDTVAoYzJbMV0sIHRbMV0sICJkZWx0YSIpOworICBPS19TVFJfSVNfTlVMTChjMlsyXSwgdFsyXSk7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49IjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJFbXB0eSBjb25maWcgbGluZSIpOworfQorCit7CisgIGNvbnN0IGNoYXIqIHQ7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPWUiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgIkluY29tcGxldGUgY29uZmlnIGxpbmUiKTsKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJlIik7CisgIE9LX1NUUl9JU19OVUxMKGUsIHQpOworfQorCisvKiBUZXN0IHRhcmdldCBsb29rdXAgKi8KKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgiYiIsICJhbGZhIiwgImFsZmEtZG9tYWluOmIiKSA9PSAwLAorICAgInJlZ2lzdGVyIGEgJ2FsZmE6YWxmYS1kb21haW46YicgZm9yIGFwcGxpY2F0aW9uICdiJyIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImJldGEiLCAiYmV0YS1kb21haW46YiIpID09IDAsCisgICAicmVnaXN0ZXIgYSAnYmV0YTpiZXRhLWRvbWFpbjpiJyBmb3IgYXBwbGljYXRpb24gJ2InIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoImMiLCAiYWxmYSIsICJhbGZhLWRvbWFpbjpjIikgPT0gMCwKKyAgICJyZWdpc3RlciBhICdhbGZhOmFsZmEtZG9tYWluOmMnIGZvciBhcHBsaWNhdGlvbiAnYyciKTsKKworeworICBjb25zdCBjaGFyICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJhbGZhIik7CisgIE9LX1NUUkNNUChiOmFsZmEsIHQsICJhbGZhLWRvbWFpbjpiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImJldGEiKTsKKyAgT0tfU1RSQ01QKGI6YmV0YSwgdCwgImJldGEtZG9tYWluOmIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImMiLCAiYWxmYSIpOworICBPS19TVFJDTVAoYzphbGZhLCB0LCAiYWxmYS1kb21haW46YyIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYSIsICJhbGZhIik7CisgIE9LX1NUUl9JU19OVUxMKGE6YWxmYSwgdCk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImdhbW1hIik7CisgIE9LX1NUUl9JU19OVUxMKGI6Z2FtbWEsIHQpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYyIsICJiZXRhIik7CisgIE9LX1NUUl9JU19OVUxMKGM6YmV0YSwgdCk7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9YiBhbGZhIHVzZXItYWxmYTpiIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICJyZWdpc3RlciB1c2VyIHRhcmdldCAnYWxmYTp1c2VyLWFsZmE6YicgZm9yIGFwcGxpY2F0aW9uICdiJyIpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PWIgZ2FtbWEgdXNlci1nYW1tYTpiIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICJyZWdpc3RlciB1c2VyIHRhcmdldCAnZ2FtbWE6dXNlci1nYW1tYTpiJyBmb3IgYXBwbGljYXRpb24gJ2InIik7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9YyBhbGZhIHVzZXItYWxmYTpjIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICJyZWdpc3RlciB1c2VyIHRhcmdldCAnYWxmYTp1c2VyLWFsZmE6YycgZm9yIGFwcGxpY2F0aW9uICdjJyIpOworfQorCisKK3sKKyAgY29uc3QgY2hhciAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiYWxmYSIpOworICBPS19TVFJDTVAoYjphbGZhLCB0LCAidXNlci1hbGZhOmIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiYmV0YSIpOworICBPS19TVFJDTVAoYjpiZXRhLCB0LCAiYmV0YS1kb21haW46YiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYyIsICJhbGZhIik7CisgIE9LX1NUUkNNUChjOmFsZmEsIHQsICJ1c2VyLWFsZmE6YyIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYSIsICJhbGZhIik7CisgIE9LX1NUUl9JU19OVUxMKGE6YWxmYSwgdCk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImdhbW1hIik7CisgIE9LX1NUUkNNUChiOmdhbW1hLCB0LCAidXNlci1nYW1tYTpiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImRlbHRhIik7CisgIE9LX1NUUl9JU19OVUxMKGI6ZGVsdGEsIHQpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYyIsICJiZXRhIik7CisgIE9LX1NUUl9JU19OVUxMKGM6YmV0YSwgdCk7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9IjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJFbXB0eSBjb25maWcgbGluZSIpOworfQorCit7CisgIGNvbnN0IGNoYXIqIHQ7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PWUxIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJJbmNvbXBsZXRlIGNvbmZpZyBsaW5lICMxIik7CisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiZTEiLCAiIik7CisgIE9LX1NUUl9JU19OVUxMKGUxOiwgdCk7Cit9CisKK3sKKyAgY29uc3QgY2hhciogdDsKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9ZTIgb21lZ2EiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgIkluY29tcGxldGUgY29uZmlnIGxpbmUgIzIiKTsKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJlMiIsICJvbWVnYSIpOworICBPS19TVFJfSVNfTlVMTChlMjpvbWVnYSwgdCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWVfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIwbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZmYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIwbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlX2NsaWIuYwpAQCAtMCwwICsxLDgyIEBACisvKiBIRUFERVIgVGVzdGluZyBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUoKSAqLworCitzdGF0aWMgY29uc3Qgb2lkIG9iamlkMVtdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAxLCA0LCAxMjcsIDAsIDAsIDAsIDgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkMltdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAyLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAxLCAxMjgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkM1tdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAxLCA0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkNFtdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAyLCAxNiwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDEyOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQ1W10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDEsIDQsIDI1NiwgMjU2LCAyNTYsIDI1NiwgOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQ2W10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDIsIDE2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsCisgICAgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMTI4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDdbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMSwgNCwgLTEsIC0xLCAtMSwgLTEsIDgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkOFtdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAyLCAxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTI4CisKK307CitzdHJ1Y3Qgb2JqaWRfZGF0YSB7IG9pZCBjb25zdCAqb2lkOyBpbnQgbGVuOyBjb25zdCBjaGFyICpzdHI7IH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamlkX2RhdGEgb2JqaWRfYXJyYXlbXSA9IHsKKyAgICB7IG9iamlkMSwgc2l6ZW9mKG9iamlkMSkgLyBzaXplb2Yob2JqaWQxWzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjQuXCIxMjcuMC4wLjBcIi44IiB9LAorICAgIHsgb2JqaWQyLCBzaXplb2Yob2JqaWQyKSAvIHNpemVvZihvYmppZDJbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2Ni4iCisgICAgICAiXCIwMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMDowMVwiLjEyOCIgfSwKKyAgICB7IG9iamlkMywgc2l6ZW9mKG9iamlkMykgLyBzaXplb2Yob2JqaWQzWzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjQuXCIyNTUuMjU1LjI1NS4yNTVcIi44IiB9LAorICAgIHsgb2JqaWQ0LCBzaXplb2Yob2JqaWQ0KSAvIHNpemVvZihvYmppZDRbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2Ni4iCisgICAgICAiXCJmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZlwiLjEyOCIgfSwKKyAgICB7IG9iamlkNSwgc2l6ZW9mKG9iamlkNSkgLyBzaXplb2Yob2JqaWQ1WzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjQuXCIuLi4uXCIuOCIgfSwKKyAgICB7IG9iamlkNiwgc2l6ZW9mKG9iamlkNikgLyBzaXplb2Yob2JqaWQ2WzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjYuXCIuLi4uLi4uLi4uLi4uLi4uXCIuMTI4IiB9LAorICAgIHsgb2JqaWQ3LCBzaXplb2Yob2JqaWQ3KSAvIHNpemVvZihvYmppZDdbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2NC5cIi4uLi5cIi44IiB9LAorICAgIHsgb2JqaWQ4LCBzaXplb2Yob2JqaWQ4KSAvIHNpemVvZihvYmppZDhbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2Ni5cIi4uLi4uLi4uLi4uLi4uLi5cIi4xMjgiIH0sCit9Oworc3RydWN0IHRyZWUgKnRyZWU7CitjaGFyICpidWY7CitzaXplX3QgYnVmX2xlbiwgb3V0X2xlbjsKK2ludCBidWZfb3ZlcmZsb3csIGk7CitjaGFyIG1pYmRpcltQQVRIX01BWF07CisKK3NucHJpbnRmKG1pYmRpciwgc2l6ZW9mKG1pYmRpciksICIlcy8lcyIsIEFCU19TUkNESVIsICJtaWJzIik7CituZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJESVJTLCBtaWJkaXIpOworCitpbml0X3NubXAoIlQwMjAiKTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihvYmppZF9hcnJheSkgLyBzaXplb2Yob2JqaWRfYXJyYXlbMF0pOyBpKyspIHsKKyAgICBidWYgPSBOVUxMOworICAgIGJ1Zl9sZW4gPSBvdXRfbGVuID0gYnVmX292ZXJmbG93ID0gMDsKKyAgICB0cmVlID0gbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCh1X2NoYXIgKiopICZidWYsICZidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9sZW4sIDEvKmFsbG93X3JlYWxsb2MqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZfb3ZlcmZsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmppZF9hcnJheVtpXS5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmppZF9hcnJheVtpXS5sZW4pOworICAgIE9LKCEhb2JqaWRfYXJyYXlbaV0uc3RyID09ICEhdHJlZSwKKyAgICAgICAibmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCkgcmV0dXJuIHZhbHVlIik7CisgICAgaWYgKG9iamlkX2FycmF5W2ldLnN0ciAmJiB0cmVlKSB7CisgICAgICAgIE9LRihzdHJjbXAob2JqaWRfYXJyYXlbaV0uc3RyLCBidWYpID09IDAsCisgICAgICAgICAgICAoIk1pc21hdGNoOiBleHBlY3RlZCAlcyBidXQgZ290ICVzIiwgb2JqaWRfYXJyYXlbaV0uc3RyLAorICAgICAgICAgICAgIGJ1ZiA/IChjb25zdCBjaGFyICopYnVmIDogIihOVUxMKSIpKTsKKyAgICB9CisgICAgZnJlZShidWYpOworfQorCitzbm1wX3NodXRkb3duKCJUMDIwIik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFiaW5hcnlfYXJyYXlfb2lkX2R1cGxpY2F0ZXNfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxYmluYXJ5X2FycmF5X29pZF9kdXBsaWNhdGVzX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDI3MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxYmluYXJ5X2FycmF5X29pZF9kdXBsaWNhdGVzX2NsaWIuYwpAQCAtMCwwICsxLDcyIEBACisvKiBIRUFERVIgVGVzdGluZyBkdXBsaWNhdGUgaGFuZGxpbmcgaW4gYmluYXJ5IE9JRCBhcnJheSAqLworCisvKiBNdWNoIGNvcGllZCBmcm9tIFQwMTIgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RfbmFtZVtdID0gImJpbmFyeS1hcnJheS1vZi1PSURzLWR1cGxpY2F0ZS10ZXN0IjsKK29pZCBvMSA9IDE7CitvaWQgbzIgPSAyOworb2lkIG8zID0gNjsKK29pZCBvNCA9IDg7CitvaWQgbzUgPSA5Oworb2lkIG94ID0gNzsKK29pZCBveSA9IDEwOworbmV0c25tcF9pbmRleCBpMSwgaTIsIGkzLCBpNCwgaTUsIGl4LCBpeSwgKmlwOworbmV0c25tcF9pbmRleCAqYltdID0geyAmaTQsICZpMiwgJmkzLCAmaTEsICZpNSB9OworbmV0c25tcF9jb250YWluZXIgKmM7CitpbnQgaTsKKworaW5pdF9zbm1wKHRlc3RfbmFtZSk7CisKK2MgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7CitjLT5jb21wYXJlID0gbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXg7CituZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChjLCAxLAorCQkJCSBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMpOworCitpMS5vaWRzID0gJm8xOworaTIub2lkcyA9ICZvMjsKK2kzLm9pZHMgPSAmbzM7CitpNC5vaWRzID0gJm80OworaTUub2lkcyA9ICZvNTsKK2l4Lm9pZHMgPSAmb3g7CitpeS5vaWRzID0gJm95OworaTEubGVuID0gaTIubGVuID0gaTMubGVuID0gaTQubGVuID0gaTUubGVuID0gaXgubGVuID0gaXkubGVuID0gMTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihiKS9zaXplb2YoYlswXSk7ICsraSkKKyAgICBDT05UQUlORVJfSU5TRVJUKGMsIGJbaV0pOworCisjZGVmaW5lIE1BWF9ST1VORFMgNgorLyogSW5zZXJ0IHNvbWUgZHVwbGljYXRlcyBvZiBpNDsgYWxzbyBpbnNlcnQgYSBkdXBsaWNhdGUgb2YKKyAqIGkxIHRvIG1vdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBhcm91bmQuICovCitmb3IgKGkgPSAwOyBpIDwgTUFYX1JPVU5EUzsgKytpKSB7CisgICAgc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCSAgICAvKiBGaXJzdCByb3VuZDogbm8gaW5zZXJ0ICovCisJICAgIGJyZWFrOworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgNToKKwkgICAgLyogSW5zZXJ0IGFub3RoZXIgZHVwbGljYXRlIG9mIG91ciB0YXJnZXQgb2JqZWN0ICovCisJICAgIENPTlRBSU5FUl9JTlNFUlQoYywgJmk0KTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICAvKiBJbnNlcnQgYSBkdWxpY2F0ZSBvZiBhbiBlYXJsaWVyIE9JRCwgc28gdGhhdCBpdAorCSAgICAgKiBjaGFuZ2VzIHRoZSBiaW5hcnkgc2VhcmNoIGJlaGF2aW9yICovCisJICAgIENPTlRBSU5FUl9JTlNFUlQoYywgJmkxKTsKKwkgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFByaW1hcnkgcmVxdWlyZW1lbnQ6IGdldG5leHQgcmV0dXJucyB0aGUgbmV4dCB2YWx1ZSEgKi8KKyAgICBpcCA9IENPTlRBSU5FUl9GSU5EKGMsICZpNCk7CisgICAgT0tGKGlwLCAoIkZJTkQgcmV0dXJuZWQgYSB2YWx1ZSIpKTsKKyAgICBPS0YoYy0+Y29tcGFyZSgmaTQsIGlwKSA9PSAwLAorICAgICAgICAoIkZJTkQgcmV0dXJuZWQgb2lkICUiIE5FVFNOTVBfUFJJbyAiZCIsIGlwLT5vaWRzWzBdKSk7CisgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLCAmaTQpOworICAgIE9LRihpcCwgKCJORVhUIHJldHVybmVkIGEgdmFsdWUiKSk7CisgICAgT0tGKGMtPmNvbXBhcmUoJmk1LCBpcCkgPT0gMCwKKyAgICAgICAgKCJORVhUIHJldHVybmVkIGluZGV4IDUgPSAlIiBORVRTTk1QX1BSSW8gImQiLCBpNS5vaWRzWzBdKSk7Cit9CisKK3doaWxlICgoaXAgPSBDT05UQUlORVJfRklSU1QoYykpKQorICBDT05UQUlORVJfUkVNT1ZFKGMsIGlwKTsKK0NPTlRBSU5FUl9GUkVFKGMpOworCitzbm1wX3NodXRkb3duKHRlc3RfbmFtZSk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFuZXRzbm1wX3NwcmludF9yZWFsbG9jX25vX3R5cGVfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxbmV0c25tcF9zcHJpbnRfcmVhbGxvY19ub190eXBlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc5M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxbmV0c25tcF9zcHJpbnRfcmVhbGxvY19ub190eXBlX2NsaWIuYwpAQCAtMCwwICsxLDUxIEBACisvKiBIRUFERVIgVGVzdCBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSB3aXRoIC1PUSAqLworCisvKgorICogQ2hlY2sgdGhhdCBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSBkb2VzIG5vdCBjcmFzaCB3aGVuIGl0IHByaW50cworICogYSB2YXJpYWJsZSB3aXRoIE5VTEwgdHlwZSwgd2hpbGUgTUlHIHNheXMgaXQncyBkaWZmZXJlbnQgdHlwZSAoSU5URUdFUiwgLi4uKS4KKyAqIFdlIHdpbGwgdXNlIE1JQiBkZWZpbml0aW9uIG9mIG5sbUxvZ1ZhcmlhYmxlVGFibGUsIHdoaWNoIGhhcyBhIGNvbHVtbgorICogZm9yIG1vc3Qgb2YgdGhlIE1JQiB0eXBlcy4KKyAqLworc3RhdGljIG9pZCBvYmppZFtdID0geworICAgICAgICAxLCAzLCA2LCAxLCAyLCAxLCA5MiwgMSwgMywgMiwgMSwgNAorfTsKKwordV9jaGFyICpidWY7CitzaXplX3QgYnVmX2xlbiwgb3V0X2xlbjsKK2ludCBidWZfb3ZlcmZsb3csIGk7CitjaGFyIG1pYmRpcltQQVRIX01BWF07CitpbnQgcmV0OworCitzbnByaW50ZihtaWJkaXIsIHNpemVvZihtaWJkaXIpLCAiJXMvJXMiLCBBQlNfU1JDRElSLCAibWlicyIpOworbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCRElSUywgbWliZGlyKTsKK25ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9RVUlDS0VfUFJJTlQsIFRSVUUpOworCitpbml0X3NubXAoIlQwMjEiKTsKKworbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcmlhYmxlOwordmFyaWFibGUubmV4dF92YXJpYWJsZSA9IE5VTEw7Cit2YXJpYWJsZS5uYW1lID0gb2JqaWQ7Cit2YXJpYWJsZS5uYW1lX2xlbmd0aCA9IHNpemVvZihvYmppZCkgLyBzaXplb2Yob2JqaWRbMF0pOwordmFyaWFibGUudHlwZSA9IEFTTl9OVUxMOwordmFyaWFibGUudmFsLmludGVnZXIgPSBOVUxMOwordmFyaWFibGUudmFsX2xlbiA9IDA7CisKKworYnVmID0gTlVMTDsKK2J1Zl9sZW4gPSBvdXRfbGVuID0gYnVmX292ZXJmbG93ID0gMDsKKworLyogVHJ5IHRvIGZvcm1hdCB2YXJpYWJsZSB3aXRoIG5sbUxvZ1ZhcmlhYmxlRW50cnkuNCAtIG5sbUxvZ1ZhcmlhYmxlRW50cnkuMTEKKyAqIE9JRHMgYW5kIHdpdGggTlVMTCB0eXBlLgorICovCitmb3IgKGk9NDsgaTw9MTE7IGkrKykgeworICAgIGJ1ZiA9IE5VTEw7CisgICAgYnVmX2xlbiA9IG91dF9sZW4gPSBidWZfb3ZlcmZsb3cgPSAwOworICAgIG9iamlkWzExXSA9IGk7CisgICAgcmV0ID0gc3ByaW50X3JlYWxsb2NfdmFyaWFibGUoJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLCAxLCBvYmppZCwKKyAgICAgICAgICAgIHNpemVvZihvYmppZCkgLyBzaXplb2Yob2JqaWRbMF0pLCAmdmFyaWFibGUpOworICAgIE9LRihyZXQgPT0gMSwgKCJzcHJpbnRfcmVhbGxvY192YXJpYWJsZSBmb3IgJWQgcmV0dXJuZWQgJWQ6ICVzLCBleHBlY3RlZCAxIiwKKyAgICAgICAgICAgIGksIHJldCwgYnVmKSk7CisgICAgZnJlZShidWYpOworfQorCitzbm1wX3NodXRkb3duKCJUMDIxIik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDFwZHVfdHlwZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDFwZHVfdHlwZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxYWE2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMXBkdV90eXBlX2NsaWIuYwpAQCAtMCwwICsxLDEzIEBACisvKiBIRUFERVIgUERVIHR5cGUgZGVzY3JpcHRpb25zICovCitjb25zdCBjaGFyICpwZHVfZGVzY3JpcHRpb247CitwZHVfZGVzY3JpcHRpb24gPSBzbm1wX3BkdV90eXBlKFNOTVBfTVNHX0dFVCk7CitPS0YoKHN0cmNtcChwZHVfZGVzY3JpcHRpb24sICJHRVQiKSA9PSAwKSwKKyAgICAoIlNOTVAgR0VUIFBEVSB0eXBlIGRpZCBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCBpZGVudGlmaWVyIChHRVQpOiAlcyIsCisgICAgIHBkdV9kZXNjcmlwdGlvbikpOworCisjaWZkZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitwZHVfZGVzY3JpcHRpb24gPSBzbm1wX3BkdV90eXBlKDE2Myk7CitPS0YoKHN0cmNtcChwZHVfZGVzY3JpcHRpb24sICI/MHhBMz8iKSA9PSAwKSwKKyAgICAoIlNOTVAgU0VUIFBEVSB0eXBlIGRpZCBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCB1bmtub3duIGlkZW50aWZpZXIgKD8weEEzPyk6ICVzIiwKKyAgICAgcGR1X2Rlc2NyaXB0aW9uKSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmJhNjllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYwpAQCAtMCwwICsxLDY3IEBACisvKiBIRUFERVIgUERVIGJ1aWxkaW5nICovCisKK1NPQ0tfU1RBUlRVUDsKKworbmV0c25tcF9wZHUgKnBkdTsKK3VfY2hhciAqcGFja2V0Oworc2l6ZV90IHBhY2tldF9sZW4sIG9mZnNldCA9IDA7CituZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOworaW50IHJjOworCisvKiBwcm90b3R5cGUgY29waWVkIGZyb20gc25tcF9hcGkuYyAqLworaW50ICAgICAgICAgICAgIHNubXBfYnVpbGQodV9jaGFyICoqIHBrdCwgc2l6ZV90ICogcGt0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG9mZnNldCwgbmV0c25tcF9zZXNzaW9uICogcHNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSk7CisKK2luaXRfc25tcCgidGVzdGluZyIpOworc25tcF9zZXNzX2luaXQoJnNlc3Npb24pOworc2Vzc2lvbi52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzJjOworc2Vzc2lvbi5wZWVybmFtZSA9IHN0cmR1cCgidWRwOjEyNy4wLjAuMSIpOyAvKiB3ZSB3b24ndCBhY3R1YWxseSBjb25uZWN0ICovCitzZXNzaW9uLmNvbW11bml0eSA9ICh1X2NoYXIgKikgc3RyZHVwKCJib2d1cyIpOworc2Vzc2lvbi5jb21tdW5pdHlfbGVuID0gc3RybGVuKChjaGFyICopIHNlc3Npb24uY29tbXVuaXR5KTsKK3NzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKworT0tGKChzcyAhPSBOVUxMKSwgKCJDcmVhdGluZyBhIHNlc3Npb24gZmFpbGVkIikpOworaWYgKHNzID09IE5VTEwpCisgICAgc25tcF9wZXJyb3IoImFjayIpOworCitwYWNrZXRfbGVuID0gNDA5NjsKK3BhY2tldCA9IG1hbGxvYyhwYWNrZXRfbGVuKTsKKworcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVCk7CitwZHUtPnZlcnNpb24gPSBzZXNzaW9uLnZlcnNpb247CisKK09LRigocGR1ICE9IE5VTEwpLCAoIkNyZWF0aW5nIGEgR0VUIFBEVSBmYWlsZWQiKSk7CisKK3JjID0gc25tcF9idWlsZCgmcGFja2V0LCAmcGFja2V0X2xlbiwgJm9mZnNldCwgc3MsIHBkdSk7CisKKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQorT0tGKChyYyA9PSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICgiQnVpbGRpbmcgYSBHRVQgUERVL3BhY2tldCBzaG91bGQgaGF2ZSB3b3JrZWQ6ICVkIiwgcmMpKTsKKyNlbHNlIC8qIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KK09LRigocmMgIT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAoIkJ1aWxkaW5nIGEgR0VUIFBEVS9wYWNrZXQgc2hvdWxkIGhhdmUgZmFpbGVkOiAlZCIsIHJjKSk7CisjZW5kaWYgLyogTkVUU05NUF9OT1RJRllfT05MWSAqLworCitvZmZzZXQgPSAwOworcGR1LT5jb21tYW5kID0gMTYzOyAvKiBhIFNFVCBtZXNzYWdlICovCityYyA9IHNubXBfYnVpbGQoJnBhY2tldCwgJnBhY2tldF9sZW4sICZvZmZzZXQsIHNzLCBwZHUpOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorT0tGKChyYyA9PSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICgiQnVpbGRpbmcgYSBTRVQgUERVL3BhY2tldCBzaG91bGQgaGF2ZSBzdWNjZWVkZWQ6ICVkIiwgcmMpKTsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworT0tGKChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICgiQnVpbGRpbmcgYSBTRVQgUERVL3BhY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQ6ICVkIiwgcmMpKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCisKK29mZnNldCA9IDA7CitwZHUtPmNvbW1hbmQgPSBTTk1QX01TR19JTkZPUk07CityYyA9IHNubXBfYnVpbGQoJnBhY2tldCwgJnBhY2tldF9sZW4sICZvZmZzZXQsIHNzLCBwZHUpOworCitPS0YoKHJjID09IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgKCJCdWlsZGluZyBhbiBJTkZPUk0gUERVL3BhY2tldCBzaG91bGQgaGF2ZSBzdWNjZWVkOiAlZCIsIHJjKSk7CisKK1NPQ0tfQ0xFQU5VUDsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwM3BkdV9wYXJzZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDNwZHVfcGFyc2VfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTg4MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDNwZHVfcGFyc2VfY2xpYi5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qIEhFQURFUiBQYXJzaW5nIG9mIFBEVXMgKi8KK25ldHNubXBfcGR1IHBkdTsKK2ludCByYzsKK3VfY2hhciBkYXRhW10gPSB7IAorICAgIDB4QTIsIDB4MUQsIDB4MDIsIDB4MDQsIDB4NEUsIDB4MzksCisgICAgMHhCMiwgMHg4RSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwKKyAgICAweDMwLCAweDBGLCAweDMwLCAweDBELCAweDA2LCAweDA4LCAweDJCLCAweDA2LAorICAgIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDEsCisgICAgMHg2NgorfTsKK3NpemVfdCBkYXRhX2xlbmd0aD1zaXplb2YoZGF0YSk7CisKK3JjID0gc25tcF9wZHVfcGFyc2UoJnBkdSwgZGF0YSwgJmRhdGFfbGVuZ3RoKTsKKworT0tGKChyYyA9PSAwKSwgKCJQYXJzaW5nIG9mIGEgZ2VuZXJpYyBQRFUgZmFpbGVkIikpOworCisjaWZkZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitkYXRhWzBdID0gMHhBMzsgLyogY2hhbmdlcyBpdCB0byBhIFNFVCBwZHUgKi8KK3JjID0gc25tcF9wZHVfcGFyc2UoJnBkdSwgZGF0YSwgJmRhdGFfbGVuZ3RoKTsKKworT0tGKChyYyAhPSAwKSwgKCJQYXJzaW5nIG9mIGEgZ2VuZXJpYyBTRVQgUERVIHN1Y2NlZWRlZCIpKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rpbmcva2V5bWFuYWdldGVzdC5jIGIvdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTFhYTguLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTEgKzAsMCBAQAotLyoKLSAqIGtleW1hbmFnZXRlc3QuYwotICoKLSAqIEV4cGVjdGVkIFNVQ0NFU1NlczogIDIgKyAyICsgMyBmb3IgYWxsIHRlc3RzLgotICoKLSAqIFJldHVybnM6Ci0gKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KLSAqIAotICoKLSAqIEZJWCAgT3IgaG93IGFib3V0IHBhc3NpbmcgYSB1c21Vc2VyIG5hbWUgYW5kIGxvb2tpbmcgdXAgdGhlIGVudHJ5IGFzCi0gKiAgICAgIGEgbWVhbnMgb2YgZ2V0dGluZyBrZXkgbWF0ZXJpYWw/ICBUaGlzIG1lYW5zIHRoZSB1c2VyTGlzdCBpcwotICogICAgICBhdmFpbGFibGUgZnJvbSBhbiBhcHBsaWNhdGlvbi4uLgotICoKLSAqIEFTU1VNRVMgIE5vIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXR1cm4gbm9uLXplcm8gc3VjY2VzcyBjb2Rlcy4KLSAqCi0gKiBUZXN0IG9mIGdlbmVyYXRlX0t1KCkuICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIKLSAqIFRlc3Qgb2YgZ2VuZXJhdGVfa3VsKCkuICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMgotICogVGVzdCBvZiB7ZW5jb2RlLGRlY29kZX1fa2V5Y2hhbmdlKCkuICAgICAgICAgU1VDQ0VTU2VzOiAzCi0gKi8KLQotc3RhdGljIGNoYXIgICAgKnJjc2lkID0gIiRJZCQiOyAgICAgICAgLyogKi8KLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiYXNuMS5oIgotI2luY2x1ZGUgInNubXBfYXBpLmgiCi0jaW5jbHVkZSAia2V5dG9vbHMuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2luY2x1ZGUgInNjYXBpLmgiCi0jaW5jbHVkZSAidHJhbnNmb3JtX29pZHMuaCIKLSNpbmNsdWRlICJjYWxsYmFjay5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWV4dGVybiBjaGFyICAgICpvcHRhcmc7Ci1leHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKLQotCi0KLS8qCi0gKiBHbG9iYWxzLCAmYy4uLgotICovCi1jaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7Ci0KLSNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1ha2x1XVstRSA8ZW5naW5lSUQ+XVstTiA8bmV3a2V5Pl1bLU8gPG9sZGtleT5dWy1QIDxwYXNzcGhyYXNlPl0iCi0jZGVmaW5lIE9QVElPTkxJU1QJImFxRTpoa2xOOk86UDp1IgotCi1pbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvZ2VuS3UgPSAwLCBkb2dlbmt1bCA9IDAsIGRva2V5Y2hhbmdlID0gMDsKLQotI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9nZW5LdSArIGRvZ2Vua3VsICsgZG9rZXljaGFuZ2UpCi0KLQotI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQotI2RlZmluZSBOTAkJIlxuIgotCi0jZGVmaW5lIE9VVFBVVEFMV0FZUyhvKQlmcHJpbnRmKHN0ZG91dCwgIlxuXG4lc1xuXG4iLCBvKTsKLSNkZWZpbmUgT1VUUFVUKG8pCWlmICghYmVxdWlldCkgeyBPVVRQVVRBTFdBWVMobyk7IH0KLQotI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoIWZhaWxjb3VudCAmJiAhYmVxdWlldCkJCQkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcblNVQ0NFU1M6ICVzXG4iLCBzKTsJXAotfQotCi0jZGVmaW5lIEZBSUxFRChlLCBmKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKGUgIT0gU05NUEVSUl9TVUNDRVNTICYmICFiZXF1aWV0KSB7CQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuRkFJTEVEOiAlc1xuIiwgZik7CVwKLQkJZmFpbGNvdW50ICs9IDE7CQkJCVwKLQl9CQkJCQkJXAotfQotCi0KLQotLyoKLSAqIFRlc3Qgc3BlY2lmaWMgZ2xvYmFscy4KLSAqLwotI2RlZmluZQlFTkdJTkVJRF9ERUZBVUxUCSIxLjIuMy40d2lsZCIKLSNkZWZpbmUgUEFTU1BIUkFTRV9ERUZBVUxUCSJDbGF5J3MgQ29uY2x1c2lvbjogQ3JlYXRpdml0eSBpcyBncmVhdCwgIiBcCi0JCQkJCSJidXQgcGxhZ2lhcmlzbSBpcyBmYXN0ZXIuIgotI2RlZmluZSBPTERLRVlfREVGQVVMVAkJIlRoaXMgaXMgYSB2ZXJ5IG9sZCBrZXkuIgotI2RlZmluZSBORVdLRVlfREVGQVVMVAkJIlRoaXMga2V5LCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgdmVyeSBuZXcuIgotCi1jaGFyICAgICAgICAgICAqZW5naW5lSUQgPSBOVUxMOwotY2hhciAgICAgICAgICAgKnBhc3NwaHJhc2UgPSBOVUxMOwotY2hhciAgICAgICAgICAgKm9sZGtleSA9IE5VTEw7Ci1jaGFyICAgICAgICAgICAqbmV3a2V5ID0gTlVMTDsKLWludCAgICAgICAgICAgICBiZXF1aWV0ID0gMDsKLQotCi0vKgotICogUHJvdG90eXBlcy4KLSAqLwotdm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOwotCi1pbnQgICAgICAgICAgICAgdGVzdF9nZW5rdWwodm9pZCk7Ci1pbnQgICAgICAgICAgICAgdGVzdF9nZW5LdSh2b2lkKTsKLWludCAgICAgICAgICAgICB0ZXN0X2tleWNoYW5nZSh2b2lkKTsKLQotCi0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAgY2g7Ci0KLSAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07Ci0gICAgb3B0YXJnID0gTlVMTDsKLQotICAgIC8qCi0gICAgICogUGFyc2UuCi0gICAgICovCi0gICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIGVuZ2luZUlEID0gb3B0YXJnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2snOgotICAgICAgICAgICAgZG9rZXljaGFuZ2UgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2wnOgotICAgICAgICAgICAgZG9nZW5rdWwgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ04nOgotICAgICAgICAgICAgbmV3a2V5ID0gb3B0YXJnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ08nOgotICAgICAgICAgICAgb2xka2V5ID0gb3B0YXJnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAgcGFzc3BocmFzZSA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGRvZ2VuS3UgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3EnOgotICAgICAgICAgICAgYmVxdWlldCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICBydmFsID0gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgICAgICBleGl0KHJ2YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIGlmIChvcHRhcmcpIHsKLSAgICAgICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIG9wdGluZCA9IDE7Ci0gICAgICAgIG9wdGFyZyA9IE5VTEw7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLwotCi0gICAgaWYgKChhcmdjID4gMSkpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLQotICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIFRlc3Qgc3R1ZmYuCi0gICAgICovCi0gICAgcnZhbCA9IHNjX2luaXQoKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2luaXQoKS4iKTsKLQotICAgIGlmIChkb2dlbkt1IHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZ2VuS3UoKTsKLSAgICB9Ci0gICAgaWYgKGRvZ2Vua3VsIHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZ2Vua3VsKCk7Ci0gICAgfQotICAgIGlmIChkb2tleWNoYW5nZSB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2tleWNoYW5nZSgpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDbGVhbnVwLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19zaHV0ZG93bihTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIEZBSUxFRChydmFsLCAic2Nfc2h1dGRvd24oKS4iKTsKLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLwotCi0KLQotCi0KLXZvaWQKLXVzYWdlKEZJTEUgKiBvZnApCi17Ci0gICAgZnByaW50ZihvZnAsCi0gICAgICAgICAgICBVU0FHRQotICAgICAgICAgICAgIiIgTkwKLSAgICAgICAgICAgICIgICAgLWEJCQlBbGwgdGVzdHMuIiBOTAotICAgICAgICAgICAgIiAgICAtRSBbMHhdPGVuZ2luZUlEPglzbm1wRW5naW5lSUQgc3RyaW5nLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1rCQkJVGVzdCB7ZW5jb2RlLGRlY29kZX1fa2V5Y2hhbmdlKCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLWwJCQlnZW5lcmF0ZV9rdWwoKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtaAkJCUhlbHAuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLU4gWzB4XTxuZXdrZXk+CU5ldyBrZXkgKGZvciB0ZXN0aW5nIEtleUNoYW5nZSBUQykuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLU8gWzB4XTxvbGRrZXk+CU9sZCBrZXkgKGZvciB0ZXN0aW5nIEtleUNoYW5nZSBUQykuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLVAgPHBhc3NwaHJhc2U+CVNvdXJjZSBzdHJpbmcgZm9yIHVzbVVzZXIgbWFzdGVyIGtleS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtdQkJCWdlbmVyYXRlX0t1KCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLXEJCQliZSBxdWlldC4iCi0gICAgICAgICAgICBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCi0KLQotCi0KLSNpZmRlZiBFWEFNUExFCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3NvbWV0aGluZwotICoKLSAqIFRlc3QgdGVtcGxhdGUuCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqLwotaW50Ci10ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0KLSAgICBFTTAoMSwgIlVOSU1QTEVNRU5URUQiKTsgICAgLyogRU0oMSk7IC8qICovCi0KLSAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9nZW5LdQotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3QgZ2VuZXJhdGlvbiBvZiB1c21Vc2VyIG1hc3RlciBrZXkgZnJvbSBhIHBhc3NwaHJhc2UuCi0gKgotICogQVNTVU1FUyAgUGFzc3BocmFzZSBpcyBtYWRlIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzIQotICovCi1pbnQKLXRlc3RfZ2VuS3Uodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKLSAgICAgICAgZmFpbGNvdW50ID0gMCwKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpLCBrdWxlbjsKLSAgICBjaGFyICAgICAgICAgICAqaGFzaG5hbWUgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbC4iLCAqczsKLSAgICB1X2NoYXIgICAgICAgICAgS3VbTE9DQUxfTUFYQlVGXTsKLSAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOwotCi0gICAgT1VUUFVUKCJUZXN0IG9mIGdlbmVyYXRlX0t1IC0tIik7Ci0KLSAgICAvKgotICAgICAqIFNldCBwYXNzcGhyYXNlLgotICAgICAqLwotICAgIGlmICghcGFzc3BocmFzZSkgewotICAgICAgICBwYXNzcGhyYXNlID0gUEFTU1BIUkFTRV9ERUZBVUxUOwotICAgIH0KLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiUGFzc3BocmFzZSVzOlxuXHQlc1xuXG4iLAotICAgICAgICAgICAgICAgIChwYXNzcGhyYXNlID09IFBBU1NQSFJBU0VfREVGQVVMVCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKLSAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKTsKLQotCi0gIHRlc3RfZ2VuS3VfYWdhaW46Ci0gICAgbWVtc2V0KEt1LCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIGt1bGVuID0gTE9DQUxfTUFYQlVGOwotCi0gICAgcnZhbCA9IGdlbmVyYXRlX0t1KGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSwgS3UsICZrdWxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9LdSgpLiIpOwotCi0gICAgaWYgKGt1bGVuICE9IHByb3Blcmxlbmd0aCkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJLdSBsZW5ndGggaXMgd3JvbmcgZm9yIHRoaXMgaGFzaHR5cGUuIik7Ci0gICAgfQotCi0gICAgYmluYXJ5X3RvX2hleChLdSwga3VsZW4sICZzKTsKLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiS3UgKGxlbj0lZCk6ICAlc1xuIiwga3VsZW4sIHMpOwotICAgIGZyZWVfemVybyhzLCBrdWxlbik7Ci0KLSAgICBTVUNDRVNTKGhhc2huYW1lKTsKLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLQotICAgIGlmIChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7Ci0gICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sLiI7Ci0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7Ci0gICAgICAgIGdvdG8gdGVzdF9nZW5LdV9hZ2FpbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2dlbkt1KCkgKi8KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZ2Vua3VsCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCBvZiBnZW5lcmF0ZV9rdWwoKS4KLSAqCi0gKiBBIHBhc3NwaHJhc2UgYW5kIGVuZ2luZUlEIGFyZSBoYXNoZWQgaW50byBhIG1hc3RlciBrZXkgS3UgdXNpbmcKLSAqIGJvdGgga25vd24gaGFzaCB0cmFuc2Zvcm1zLiAgTG9jYWxpemVkIGtleXMsIGFsc28gdXNpbmcgYm90aCBoYXNoCi0gKiB0cmFuc2Zvcm1zLCBhcmUgZ2VuZXJhdGVkIGZyb20gZWFjaCBvZiB0aGVzZSBtYXN0ZXIga2V5cy4KLSAqCi0gKiBBU1NVTUUgIGdlbmVyYXRlX0t1IGlzIGFscmVhZHkgdGVzdGVkLgotICogQVNTVU1FICBlbmdpbmVJRCBpcyBpbml0aWFsbHkgYSBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nLgotICovCi1pbnQKLXRlc3RfZ2Vua3VsKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCi0gICAgICAgIGZhaWxjb3VudCA9IDAsCi0gICAgICAgIHByb3Blcmxlbmd0aCwga3VsZW4sIGt1bF9sZW4sIGVuZ2luZUlEX2xlbiwgaXNkZWZhdWx0ID0gRkFMU0U7Ci0KLSAgICBjaGFyICAgICAgICAgICAqcyA9IE5VTEwsCi0gICAgICAgICp0ZXN0bmFtZSA9ICJVc2luZyBITUFDTUQ1IHRvIGNyZWF0ZSBtYXN0ZXIga2V5LiIsCi0gICAgICAgICpoYXNobmFtZV9LdSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sIiwgKmhhc2huYW1lX2t1bDsKLQotICAgIHVfY2hhciAgICAgICAgICBLdVtMT0NBTF9NQVhCVUZdLCBrdWxbTE9DQUxfTUFYQlVGXTsKLQotICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZV9LdSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsICpoYXNodHlwZV9rdWw7Ci0KLSAgICBPVVRQVVQoIlRlc3Qgb2YgZ2VuZXJhdGVfa3VsIC0tIik7Ci0KLQotICAgIC8qCi0gICAgICogU2V0IHBhc3NwaHJhc2UgYW5kIGVuZ2luZUlELgotICAgICAqCi0gICAgICogSWYgZW5naW5lSUQgYmVnaW5zIHdpdGggMHgsIGFzc3VtZSBpdCBpcyB3cml0dGVuIGluIChwcmludGFibGUpCi0gICAgICogaGV4IGFuZCBjb252ZXJ0IGl0IHRvIGJpbmFyeSBkYXRhLgotICAgICAqLwotICAgIGlmICghcGFzc3BocmFzZSkgewotICAgICAgICBwYXNzcGhyYXNlID0gUEFTU1BIUkFTRV9ERUZBVUxUOwotICAgIH0KLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiUGFzc3BocmFzZSVzOlxuXHQlc1xuXG4iLAotICAgICAgICAgICAgICAgIChwYXNzcGhyYXNlID09IFBBU1NQSFJBU0VfREVGQVVMVCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKLSAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKTsKLQotICAgIGlmICghZW5naW5lSUQpIHsKLSAgICAgICAgZW5naW5lSUQgPSBFTkdJTkVJRF9ERUZBVUxUOwotICAgICAgICBpc2RlZmF1bHQgPSBUUlVFOwotICAgIH0KLQotICAgIGVuZ2luZUlEX2xlbiA9IHN0cmxlbihlbmdpbmVJRCk7Ci0KLSAgICBpZiAodG9sb3dlcigqKGVuZ2luZUlEICsgMSkpID09ICd4JykgewotICAgICAgICBlbmdpbmVJRF9sZW4gPSBoZXhfdG9fYmluYXJ5MihlbmdpbmVJRCArIDIsIGVuZ2luZUlEX2xlbiAtIDIsICZzKTsKLSAgICAgICAgaWYgKGVuZ2luZUlEX2xlbiA8IDApIHsKLSAgICAgICAgICAgIEZBSUxFRCgocnZhbCA9IFNOTVBFUlJfR0VORVJSKSwKLSAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IGVuZ2luZUlELiIpOwotICAgICAgICB9Ci0gICAgICAgIGVuZ2luZUlEID0gczsKLSAgICAgICAgYmluYXJ5X3RvX2hleChlbmdpbmVJRCwgZW5naW5lSURfbGVuLCAmcyk7Ci0gICAgfQotCi0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImVuZ2luZUlEJXMgKGxlbj0lZCk6ICAlc1xuXG4iLAotICAgICAgICAgICAgICAgIChpc2RlZmF1bHQpID8gIiAoZGVmYXVsdCkiIDogIiIsCi0gICAgICAgICAgICAgICAgZW5naW5lSURfbGVuLCAocykgPyBzIDogZW5naW5lSUQpOwotICAgIGlmIChzKSB7Ci0gICAgICAgIFNOTVBfRlJFRShzKTsKLSAgICB9Ci0KLQotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgYSBtYXN0ZXIga2V5IHVzaW5nIGJvdGggaGFzaCB0cmFuc2Zvcm1zOyBjcmVhdGUgbG9jYWxpemVkCi0gICAgICoga2V5cyB1c2luZyBib3RoIGhhc2ggdHJhbnNmb3JtcyBmcm9tIGVhY2ggbWFzdGVyIGtleS4KLSAgICAgKi8KLSAgdGVzdF9nZW5rdWxfYWdhaW5fbWFzdGVyOgotICAgIG1lbXNldChLdSwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBrdWxlbiA9IExPQ0FMX01BWEJVRjsKLSAgICBoYXNobmFtZV9rdWwgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbCI7Ci0gICAgaGFzaHR5cGVfa3VsID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKLSAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSk7Ci0KLQotICAgIHJ2YWwgPSBnZW5lcmF0ZV9LdShoYXNodHlwZV9LdSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICBwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSksIEt1LCAma3VsZW4pOwotICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfS3UoKS4iKTsKLQotICAgIGJpbmFyeV90b19oZXgoS3UsIGt1bGVuLCAmcyk7Ci0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwKLSAgICAgICAgICAgICAgICAiXG5cbk1hc3RlciBLdSB1c2luZyBcIiVzXCI6XG5cdCVzXG5cbiIsIGhhc2huYW1lX0t1LCBzKTsKLSAgICBmcmVlX3plcm8ocywga3VsZW4pOwotCi0KLSAgdGVzdF9nZW5rdWxfYWdhaW5fbG9jYWw6Ci0gICAgbWVtc2V0KGt1bCwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBrdWxfbGVuID0gTE9DQUxfTUFYQlVGOwotCi0gICAgcnZhbCA9IGdlbmVyYXRlX2t1bChoYXNodHlwZV9rdWwsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sIEt1LCBrdWxlbiwga3VsLCAma3VsX2xlbik7Ci0KLSAgICBpZiAoKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpCi0gICAgICAgICYmIChoYXNodHlwZV9rdWwgPT0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpKSB7Ci0gICAgICAgIGlmIChydmFsID09IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZV9rdWwgU0hPVUxEIGZhaWwgd2hlbiBLdSBsZW5ndGggaXMgIgotICAgICAgICAgICAgICAgICAgICJsZXNzIHRoYW4gaGFzaCB0cmFuc2Zvcm0gbGVuZ3RoLiIpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX2t1bCgpLiIpOwotCi0gICAgICAgIGlmIChrdWxfbGVuICE9IHByb3Blcmxlbmd0aCkgewotICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgICAgICJrdWwgbGVuZ3RoIGlzIHdyb25nIGZvciB0aGUgZ2l2ZW4gaGFzaHR5cGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnlfdG9faGV4KGt1bCwga3VsX2xlbiwgJnMpOwotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImt1bCAoJXMpIChsZW49JWQpOiAgJXNcbiIsCi0gICAgICAgICAgICAgICAgKChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSA/ICJNRDUiIDogIlNIQSIpLAotICAgICAgICAgICAgICAgIGt1bF9sZW4sIHMpOwotICAgICAgICBmcmVlX3plcm8ocywga3VsX2xlbik7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENyZWF0ZSBsb2NhbGl6ZWQga2V5IHVzaW5nIHRoZSBvdGhlciBoYXNoIHRyYW5zZm9ybSwgYnV0IGZyb20KLSAgICAgKiAqIHRoZSBzYW1lIG1hc3RlciBrZXkuCi0gICAgICovCi0gICAgaWYgKGhhc2h0eXBlX2t1bCA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7Ci0gICAgICAgIGhhc2h0eXBlX2t1bCA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgICAgICBoYXNobmFtZV9rdWwgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wiOwotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOwotICAgICAgICBnb3RvIHRlc3RfZ2Vua3VsX2FnYWluX2xvY2FsOwotICAgIH0KLQotICAgIFNVQ0NFU1ModGVzdG5hbWUpOwotCi0KLSAgICAvKgotICAgICAqIFJlLWNyZWF0ZSB0aGUgbWFzdGVyIGtleSB1c2luZyB0aGUgb3RoZXIgaGFzaCB0cmFuc2Zvcm0uCi0gICAgICovCi0gICAgaWYgKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKLSAgICAgICAgaGFzaHR5cGVfS3UgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICAgICAgaGFzaG5hbWVfS3UgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wiOwotICAgICAgICB0ZXN0bmFtZSA9ICJVc2luZyBITUFDU0hBMSB0byBjcmVhdGUgbWFzdGVyIGtleS4iOwotICAgICAgICBnb3RvIHRlc3RfZ2Vua3VsX2FnYWluX21hc3RlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2dlbmt1bCgpICovCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2tleWNoYW5nZQotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3Qgb2YgS2V5Q2hhbmdlIFRDIGltcGxlbWVudGF0aW9uLgotICoKLSAqIEFTU1VNRSBuZXdrZXkgYW5kIG9sZGtleSBiZWdpbiBhcyBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAqLwotaW50Ci10ZXN0X2tleWNoYW5nZSh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAotICAgICAgICBmYWlsY291bnQgPSAwLAotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSksCi0gICAgICAgIG9sZGtleV9sZW4sCi0gICAgICAgIG5ld2tleV9sZW4sCi0gICAgICAgIGtleWNoYW5nZV9sZW4sCi0gICAgICAgIHRlbXBfbGVuLCBpc2RlZmF1bHRfbmV3ID0gRkFMU0UsIGlzZGVmYXVsdF9vbGQgPSBGQUxTRTsKLQotICAgIGNoYXIgICAgICAgICAgICpoYXNobmFtZSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sLiIsICpzOwotCi0gICAgdV9jaGFyICAgICAgICAgIG9sZGtleV9idWZbTE9DQUxfTUFYQlVGXSwKLSAgICAgICAgbmV3a2V5X2J1ZltMT0NBTF9NQVhCVUZdLAotICAgICAgICB0ZW1wX2J1ZltMT0NBTF9NQVhCVUZdLCBrZXljaGFuZ2VfYnVmW0xPQ0FMX01BWEJVRl07Ci0KLSAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOwotCi0gICAgT1VUUFVUKCJUZXN0IG9mIEtleUNoYW5nZSBUQyAtLSIpOwotCi0KLSAgICAvKgotICAgICAqIFNldCBuZXdrZXkgYW5kIG9sZGtleS4KLSAgICAgKi8KLSAgICBpZiAoIW5ld2tleSkgeyAgICAgICAgICAgICAgLyogbmV3a2V5ICovCi0gICAgICAgIG5ld2tleSA9IE5FV0tFWV9ERUZBVUxUOwotICAgICAgICBpc2RlZmF1bHRfbmV3ID0gVFJVRTsKLSAgICB9Ci0gICAgbmV3a2V5X2xlbiA9IHN0cmxlbihuZXdrZXkpOwotCi0gICAgaWYgKHRvbG93ZXIoKihuZXdrZXkgKyAxKSkgPT0gJ3gnKSB7Ci0gICAgICAgIG5ld2tleV9sZW4gPSBoZXhfdG9fYmluYXJ5MihuZXdrZXkgKyAyLCBuZXdrZXlfbGVuIC0gMiwgJnMpOwotICAgICAgICBpZiAobmV3a2V5X2xlbiA8IDApIHsKLSAgICAgICAgICAgIEZBSUxFRCgocnZhbCA9IFNOTVBFUlJfR0VORVJSKSwKLSAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IG5ld2tleS4iKTsKLSAgICAgICAgfQotICAgICAgICBuZXdrZXkgPSBzOwotICAgICAgICBiaW5hcnlfdG9faGV4KG5ld2tleSwgbmV3a2V5X2xlbiwgJnMpOwotICAgIH0KLQotICAgIGlmICghb2xka2V5KSB7ICAgICAgICAgICAgICAvKiBvbGRrZXkgKi8KLSAgICAgICAgb2xka2V5ID0gT0xES0VZX0RFRkFVTFQ7Ci0gICAgICAgIGlzZGVmYXVsdF9vbGQgPSBUUlVFOwotICAgIH0KLSAgICBvbGRrZXlfbGVuID0gc3RybGVuKG9sZGtleSk7Ci0KLSAgICBpZiAodG9sb3dlcigqKG9sZGtleSArIDEpKSA9PSAneCcpIHsKLSAgICAgICAgb2xka2V5X2xlbiA9IGhleF90b19iaW5hcnkyKG9sZGtleSArIDIsIG9sZGtleV9sZW4gLSAyLCAmcyk7Ci0gICAgICAgIGlmIChvbGRrZXlfbGVuIDwgMCkgewotICAgICAgICAgICAgRkFJTEVEKChydmFsID0gU05NUEVSUl9HRU5FUlIpLAotICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggb2xka2V5LiIpOwotICAgICAgICB9Ci0gICAgICAgIG9sZGtleSA9IHM7Ci0gICAgICAgIGJpbmFyeV90b19oZXgob2xka2V5LCBvbGRrZXlfbGVuLCAmcyk7Ci0gICAgfQotCi0KLQotICB0ZXN0X2tleWNoYW5nZV9hZ2FpbjoKLSAgICBtZW1zZXQob2xka2V5X2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBtZW1zZXQobmV3a2V5X2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBtZW1zZXQoa2V5Y2hhbmdlX2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBtZW1zZXQodGVtcF9idWYsIDAsIExPQ0FMX01BWEJVRik7Ci0KLSAgICBtZW1jcHkob2xka2V5X2J1Ziwgb2xka2V5LCBTTk1QX01JTihvbGRrZXlfbGVuLCBwcm9wZXJsZW5ndGgpKTsKLSAgICBtZW1jcHkobmV3a2V5X2J1ZiwgbmV3a2V5LCBTTk1QX01JTihuZXdrZXlfbGVuLCBwcm9wZXJsZW5ndGgpKTsKLSAgICBrZXljaGFuZ2VfbGVuID0gTE9DQUxfTUFYQlVGOwotCi0KLSAgICBiaW5hcnlfdG9faGV4KG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiXG5vbGRrZXklcyAobGVuPSVkKTogICVzXG4iLAotICAgICAgICAgICAgKGlzZGVmYXVsdF9vbGQpID8gIiAoZGVmYXVsdCkiIDogIiIsIHByb3Blcmxlbmd0aCwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0gICAgYmluYXJ5X3RvX2hleChuZXdrZXlfYnVmLCBwcm9wZXJsZW5ndGgsICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIm5ld2tleSVzIChsZW49JWQpOiAgJXNcblxuIiwKLSAgICAgICAgICAgIChpc2RlZmF1bHRfbmV3KSA/ICIgKGRlZmF1bHQpIiA6ICIiLCBwcm9wZXJsZW5ndGgsIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotCi0gICAgcnZhbCA9IGVuY29kZV9rZXljaGFuZ2UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3a2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWNoYW5nZV9idWYsICZrZXljaGFuZ2VfbGVuKTsKLSAgICBGQUlMRUQocnZhbCwgImVuY29kZV9rZXljaGFuZ2UoKS4iKTsKLQotICAgIGlmIChrZXljaGFuZ2VfbGVuICE9IChwcm9wZXJsZW5ndGggKiAyKSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAiS2V5Q2hhbmdlIHN0cmluZyAoZW5jb2RlZCkgaXMgbm90IHByb3BlciBsZW5ndGggIgotICAgICAgICAgICAgICAgImZvciB0aGlzIGhhc2ggdHJhbnNmb3JtLiIpOwotICAgIH0KLQotICAgIGJpbmFyeV90b19oZXgoa2V5Y2hhbmdlX2J1Ziwga2V5Y2hhbmdlX2xlbiwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiKCVzKSBLZXlDaGFuZ2Ugc3RyaW5nOiAgJXNcblxuIiwKLSAgICAgICAgICAgICgoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgPyAiTUQ1IiA6ICJTSEEiKSwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0gICAgdGVtcF9sZW4gPSBwcm9wZXJsZW5ndGg7Ci0gICAgcnZhbCA9IGRlY29kZV9rZXljaGFuZ2UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Y2hhbmdlX2J1ZiwgcHJvcGVybGVuZ3RoICogMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2J1ZiwgJnRlbXBfbGVuKTsKLSAgICBGQUlMRUQocnZhbCwgImRlY29kZV9rZXljaGFuZ2UoKS4iKTsKLQotICAgIGlmICh0ZW1wX2xlbiAhPSBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgImRlY29kZWQgbmV3a2V5IGlzIG5vdCBwcm9wZXIgbGVuZ3RoIGZvciAiCi0gICAgICAgICAgICAgICAidGhpcyBoYXNoIHRyYW5zZm9ybS4iKTsKLSAgICB9Ci0KLSAgICBiaW5hcnlfdG9faGV4KHRlbXBfYnVmLCB0ZW1wX2xlbiwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiZGVjb2RlZCBuZXdrZXk6ICAlc1xuXG4iLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLQotICAgIGlmIChtZW1jbXAobmV3a2V5X2J1ZiwgdGVtcF9idWYsIHRlbXBfbGVuKSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJuZXdrZXkgZGlkIG5vdCBkZWNvZGUgcHJvcGVybHkuIik7Ci0gICAgfQotCi0KLSAgICBTVUNDRVNTKGhhc2huYW1lKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0KLQotICAgIC8qCi0gICAgICogTXVsdGlwbGV4IGRpZmZlcmVudCB0ZXN0IGNvbWJpbmF0aW9ucy4KLSAgICAgKgotICAgICAqIEZpcnN0IGNsYXVzZSBpcyBmb3IgVGVzdCAjMiwgc2Vjb25kIGNsYXVzZSBpcyBmb3IgKGxhc3QpIFRlc3QgIzMuCi0gICAgICovCi0gICAgaWYgKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKLSAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wgKHcvREVTIGxlbmd0aCBrdWwncykuIjsKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVMpCi0gICAgICAgICAgICArIEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTX0lWKTsKLSAgICAgICAgZ290byB0ZXN0X2tleWNoYW5nZV9hZ2FpbjsKLQotICAgIH0gZWxzZSBpZiAocHJvcGVybGVuZ3RoIDwgQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKSkgewotICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbC4iOwotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOwotICAgICAgICBnb3RvIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOwotICAgIH0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3Rfa2V5Y2hhbmdlKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvbWlzY3Rlc3QuYyBiL3Rlc3RpbmcvbWlzY3Rlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmMDQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL21pc2N0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSAqIG1pc2N0ZXN0LmMKLSAqCi0gKiBFeHBlY3RlZCBTVUNDRVNTZXMgZm9yIGFsbCB0ZXN0czogICAgMAotICoKLSAqIFJldHVybnM6Ci0gKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KLSAqCi0gKiBUZXN0IG9mIGR1bXBfc25tcEVuZ2luZUlEKCkuICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6ICAwCi0gKi8KLQotc3RhdGljIGNoYXIgICAgKnJjc2lkID0gIiRJZCQiOyAgICAgLyogKi8KLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiYXNuMS5oIgotI2luY2x1ZGUgInNubXBfYXBpLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNpbmNsdWRlICJ0cmFuc2Zvcm1fb2lkcy5oIgotI2luY2x1ZGUgImNhbGxiYWNrLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKLWV4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOwotCi0KLQotLyoKLSAqIEdsb2JhbHMsICZjLi4uCi0gKi8KLWNoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKLQotI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLTFhXSIKLSNkZWZpbmUgT1BUSU9OTElTVAkiMWFoIgotCi1pbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvZHVtcHNlaWQgPSAwOwotCi0jZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2R1bXBzZWlkKQotCi0KLQotI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQotI2RlZmluZSBOTAkJIlxuIgotCi0jZGVmaW5lIE9VVFBVVChvKQlmcHJpbnRmKHN0ZG91dCwgIlxuXG4lc1xuXG4iLCBvKTsKLQotI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoIWZhaWxjb3VudCkJCQkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcblNVQ0NFU1M6ICVzXG4iLCBzKTsJXAotfQotCi0jZGVmaW5lIEZBSUxFRChlLCBmKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKGUgIT0gU05NUEVSUl9TVUNDRVNTKSB7CQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuRkFJTEVEOiAlc1xuIiwgZik7CVwKLQkJZmFpbGNvdW50ICs9IDE7CQkJCVwKLQl9CQkJCQkJXAotfQotCi0KLQotCi0jZGVmaW5lIElEQkxBVF80CSIwMDAxMDIwMyIKLQotI2RlZmluZSBJRFZJT0xBVEUxCSI4MDAwMDAwMzAwZGVlZGNhZmUiCi0KLSNkZWZpbmUgSURJUHY0CQkiODAwMDAwMDMwMTBhMDkwODA3IgotI2RlZmluZSBJRElQdjYJCSI4MDAwMDAwMzAyMTAwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEiCi0jZGVmaW5lIElETUFDCQkiODAwMDAwMDMwM2ZmZWVkZGNjYmJhYSIKLQotI2RlZmluZSBJRFRFWFQJCSI4MDAwMDAwMzA0IgotI2RlZmluZSBQUklOVEFCTEUJIkxldCB0aGlzIGJlIHByaW50YWJsZS4iCi0KLSNkZWZpbmUgSURPQ1RFVFNfNwkiODAwMDAwMDMwNTAwMDEwMjAzMDQwNTA2MDciCi0KLSNkZWZpbmUgSURMT0NBTF8xMQkiODAwMDAwMDMwNjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYiIKLQotI2RlZmluZSBJRElQdjRfRVhUUkEzCSI4MDAwMDAwMzAxMGEwOTA4MDcwMTAyMDMiCi0KLSNkZWZpbmUgSURfTlVNU1RSSU5HUwkJMTAKLQotCi0KLQotLyoKLSAqIFByb3RvdHlwZXMuCi0gKi8KLXZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKLQotaW50ICAgICAgICAgICAgIHRlc3RfZHVtcHNlaWQodm9pZCk7Ci0KLQotCi0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAgY2g7Ci0KLSAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07Ci0KLSAgICAvKgotICAgICAqIFBhcnNlLgotICAgICAqLwotICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgewotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGNhc2UgJzEnOgotICAgICAgICAgICAgZG9kdW1wc2VpZCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJ2YWwgPSAwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgICAgIGV4aXQocnZhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgaWYgKG9wdGFyZykgewotICAgICAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICAgICAgYXJndiArPSAxOwotICAgICAgICAgICAgb3B0YXJnID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBvcHRpbmQgPSAxOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KLQotICAgIGlmICgoYXJnYyA+IDEpKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0KLSAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBUZXN0IHN0dWZmLgotICAgICAqLwotICAgIGlmIChkb2R1bXBzZWlkIHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZHVtcHNlaWQoKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogQ2xlYW51cC4KLSAgICAgKi8KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KLQotCi0KLQotCi12b2lkCi11c2FnZShGSUxFICogb2ZwKQotewotICAgIGZwcmludGYob2ZwLAotICAgICAgICAgICAgVVNBR0UKLSAgICAgICAgICAgICIiIE5MCi0gICAgICAgICAgICAiCS0xCQlUZXN0IGR1bXBfc25tcEVuZ2luZUlEKCkuIiBOTAotICAgICAgICAgICAgIgktYQkJQWxsIHRlc3RzLiIgTkwKLSAgICAgICAgICAgICIJLWgJCUhlbHAuIiBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCi0KLQotCi0KLSNpZmRlZiBFWEFNUExFCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3NvbWV0aGluZwotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3QgdGVtcGxhdGUuCi0gKi8KLWludAotdGVzdF9kb3NvbWV0aGluZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotCi0gICAgRU0wKDEsICJVTklNUExFTUVOVEVEIik7ICAgIC8qIEVNKDEpOyAvKiAqLwotCi0gIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kdW1wc2VpZAotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICogVGVzdCBkdW1wX3NubXBFbmdpbmVJRCgpLgotICovCi1pbnQKLXRlc3RfZHVtcHNlaWQodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgKi8KLSAgICAgICAgICAgICAgICAgICAgZmFpbGNvdW50ID0gMCwgdGxlbiwgY291bnQgPSAwOwotCi0gICAgY2hhciAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl0sCi0gICAgICAgICpzLCAqdCwgKnJpcywgKnJhd2lkX3NldFtJRF9OVU1TVFJJTkdTICsgMV0gPSB7Ci0gICAgICAgIElEQkxBVF80LAotICAgICAgICBJRFZJT0xBVEUxLAotICAgICAgICBJRElQdjQsCi0gICAgICAgIElESVB2NiwKLSAgICAgICAgSURNQUMsCi0gICAgICAgIElEVEVYVCwKLSAgICAgICAgSURPQ1RFVFNfNywKLSAgICAgICAgSURMT0NBTF8xMSwKLSAgICAgICAgSURJUHY0X0VYVFJBMywKLSAgICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBPVVRQVVQoIlRlc3Qgb2YgZHVtcF9zbm1wRW5naW5lSUQuICAiCi0gICAgICAgICAgICIoRG9lcyBub3QgcmVwb3J0IGZhaWx1cmUgb3Igc3VjY2Vzcy4pIik7Ci0KLQotICAgIHdoaWxlICgocmlzID0gcmF3aWRfc2V0W2NvdW50KytdKSkgewotICAgICAgICB0bGVuID0gaGV4X3RvX2JpbmFyeTIocmlzLCBzdHJsZW4ocmlzKSwgJnQpOwotCi0gICAgICAgIGlmIChyaXMgPT0gSURURVhUKSB7Ci0gICAgICAgICAgICBtZW1zZXQoYnVmLCAwLCBTTk1QX01BWEJVRik7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCB0LCB0bGVuKTsKLSAgICAgICAgICAgIHRsZW4gKz0gc3ByaW50ZihidWYgKyB0bGVuLCAiJXMiLCBQUklOVEFCTEUpOwotCi0gICAgICAgICAgICBTTk1QX0ZSRUUodCk7Ci0gICAgICAgICAgICB0ID0gYnVmOwotICAgICAgICB9Ci0jaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCi0gICAgICAgIHMgPSBkdW1wX3NubXBFbmdpbmVJRCh0LCAmdGxlbik7Ci0gICAgICAgIHByaW50ZigiJXMgICAgKGxlbj0lZClcbiIsIHMsIHRsZW4pOwotI2VuZGlmCi0KLSAgICAgICAgU05NUF9GUkVFKHMpOwotICAgICAgICBpZiAodCAhPSBidWYpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRSh0KTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kdW1wc2VpZCgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL3NjYXBpdGVzdC5jIGIvdGVzdGluZy9zY2FwaXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlOTA5OC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3NjYXBpdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg5ICswLDAgQEAKLS8qCi0gKiBzY2FwaXRlc3QuYwotICoKLSAqIEV4cGVjdGVkIFNVQ0NFU1NlczogIDIgKyAxMCArIDEgZm9yIGFsbCB0ZXN0cy4KLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCi0gKgotICoKLSAqIEFTU1VNRVMgIE5vIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXR1cm4gbm9uLXplcm8gc3VjY2VzcyBjb2Rlcy4KLSAqCi0gKiBYWFggIFNwbGl0IGludG8gaW5kaXZpZHVhbCBtb2R1bGVzPwotICogWFhYICBFcnJvci9mcmluZ2UgY29uZGl0aW9ucyBzaG91bGQgYmUgdGVzdGVkLgotICoKLSAqCi0gKiBUZXN0IG9mIHNjX3JhbmRvbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyLgotICogICAgICBSRVFVSVJFUyBhIGh1bWFuIHRvIHNwb3QgY2hlY2sgZm9yIG9idmlvdXMgbm9uLXJhbmRvbW5lc3MuLi4KLSAqCi0gKiBUZXN0IG9mIHNjX2dlbmVyYXRlX2tleWVkX2hhc2ggYW5kIHNjX2NoZWNrX2tleWVkX2hhc2guICAgICAgU1VDQ0VTU2VzOiAxMC4KLSAqCi0gKiBUZXN0IG9mIHNjX2VuY3J5cHQgYW5kIHNjX2RlY3J5cHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAxLgotICovCi0KLXN0YXRpYyBjaGFyICAgICpyY3NpZCA9ICIkSWQkIjsgICAgLyogKi8KLQotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJhc24xLmgiCi0jaW5jbHVkZSAic25tcF9hcGkuaCIKLSNpbmNsdWRlICJrZXl0b29scy5oIgotI2luY2x1ZGUgInRvb2xzLmgiCi0jaW5jbHVkZSAic2NhcGkuaCIKLSNpbmNsdWRlICJ0cmFuc2Zvcm1fb2lkcy5oIgotI2luY2x1ZGUgImNhbGxiYWNrLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKLWV4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOwotCi0jZGVmaW5lIERFQlVHICAgICAgICAgICAgICAgICAgIC8qICovCi0KLQotCi0vKgotICogR2xvYmFscywgJmMuLi4KLSAqLwotY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOwotCi0jZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstYWNIcl0iCi0jZGVmaW5lIE9QVElPTkxJU1QJImFjaEhyIgotCi1pbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvY3J5cHQgPSAwLCBkb2tleWVkaGFzaCA9IDAsIGRvcmFuZG9tID0gMDsKLQotI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9jcnlwdCArIGRva2V5ZWRoYXNoICsgZG9yYW5kb20pCi0KLQotCi0jZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCi0jZGVmaW5lIE5MCQkiXG4iCi0KLSNkZWZpbmUgT1VUUFVUKG8pCWZwcmludGYoc3Rkb3V0LCAiXG5cbiVzXG5cbiIsIG8pOwotCi0jZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKLXsJCQkJCQkJXAotCWlmICghZmFpbGNvdW50KQkJCQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuU1VDQ0VTUzogJXNcbiIsIHMpOwlcCi19Ci0KLSNkZWZpbmUgRkFJTEVEKGUsIGYpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5GQUlMRUQ6ICVzXG4iLCBmKTsJXAotCQlmYWlsY291bnQgKz0gMTsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLQotI2RlZmluZSBCSUdTVFJJTkcJCQkJCQkJXAotICAgICIgICBBIHBvcnQgbWF5IGJlIGEgcGxlYXNhbnQgcmV0cmVhdCBmb3IgYW55IG1pbmQgZ3Jvd24gd2Vhcnkgb2YiCVwKLSAgICAidGhlIHN0cnVnZ2xlIGZvciBleGlzdGVuY2UuICBUaGUgdmFzdCBleHBhbnNlIG9mIHNreSwgdGhlIgkJXAotICAgICJtb2JpbGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjbG91ZHMsIHRoZSBjaGFtZWxlb24gY29sb3JhdGlvbiIJXAotICAgICJvZiB0aGUgc2VhLCB0aGUgYmVhY29ucyBmbGFzaGluZyBvbiB0aGUgc2hvcmUsIHRvZ2V0aGVyIG1ha2UiCVwKLSAgICAiYSBwcmlzbSB3aGljaCBpcyBtYXJ2ZWxsb3VzbHkgY2FsY3VsYXRlZCB0byBlbnRlcnRhaW4gYnV0IG5vdCIJXAotICAgICJmYXRpZ3VlIHRoZSBleWUuICBUaGUgbG9mdHkgc2hpcHMgd2l0aCB0aGVpciBjb21wbGV4IHdlYnMgb2YiCVwKLSAgICAicmlnZ2luZywgc3dheWVkIHRvIGFuZCBmcm8gYnkgdGhlIHN3ZWxsIGluIGhhcm1vbmlvdXMgZGFuY2UsIglcCi0gICAgImFsbCBoZWxwIHRvIG1haW50YWluIGEgdGFzdGUgZm9yIHJoeXRobSBhbmQgYmVhdXR5IGluIHRoZSIJCVwKLSAgICAibWluZC4gIEFuZCBhYm92ZSBhbGwgdGhlcmUgaXMgYSBteXN0ZXJpb3VzLCBhcmlzdHJvY3JhdGljIGtpbmQiCVwKLSAgICAib2YgcGxlYXN1cmUgdG8gYmUgaGFkLCBmb3IgdGhvc2Ugd2hvIGhhdmUgbG9zdCBhbGwgY3VyaW9zaXR5IglcCi0gICAgIm9yIGFtYml0aW9uLCBhcyB0aGV5IHN0cmVjaCBvbiB0aGUgYmVsdmVkZXJlIG9yIGxlYW4gb3ZlciB0aGUiCVwKLSAgICAibW9sZSB0byB3YXRjaCB0aGUgYXJyaXZhbHMgYW5kIGRlcGFydHVyZXMgb2Ygb3RoZXIgbWVuLCB0aG9zZSIJXAotICAgICJ3aG8gc3RpbGwgaGF2ZSBzdWZmaWNpZW50IHN0cmVuZ3RoIG9mIHB1cnBvc2UgaW4gdGhlbSwgdGhlIglcCi0gICAgInVyZ2UgdG8gdHJhdmVsIG9yIGVucmljaCB0aGVtc2VsdmVzLiIJCQkJXAotICAgICIJLS0gQmF1ZGVsYWlyZSIJCQkJCQkJXAotICAgICIJICAgRnJvbSBfVGhlX1BvZW1zX2luX1Byb3NlXywgXCJUaGUgUG9ydFwiIChYTEkpLiIKLQotI2RlZmluZSBCSUdTRUNSRVQJIlNoaGhoLi4uIERvbid0IHRlbGwgKmFueW9uZSogYWJvdXQgdGhpcy4gIE5vdCBhIHNvdWwuIgotI2RlZmluZSBCS1dEU0VDUkVUCSIubHVvcyBhIHRvTiAgLnNpaHQgdHVvYmEgKmVub3luYSogbGxldCB0J25vRCAuLi5oaGhoUyIKLQotI2RlZmluZSBNTENPVU5UX01BWAk2ICAgICAgIC8qIE1BQyBMZW5ndGggQ291bnQgTWF4aW11bS4gKi8KLQotCi0KLS8qCi0gKiBQcm90b3R5cGVzLgotICovCi12b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7Ci0KLWludCAgICAgICAgICAgICB0ZXN0X2RvY3J5cHQodm9pZCk7Ci1pbnQgICAgICAgICAgICAgdGVzdF9kb2tleWVkaGFzaCh2b2lkKTsKLWludCAgICAgICAgICAgICB0ZXN0X2RvcmFuZG9tKHZvaWQpOwotCi0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotICAgIGNoYXIgICAgICAgICAgICBjaDsKLQotICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKLQotICAgIC8qCi0gICAgICogUGFyc2UuCi0gICAgICovCi0gICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIGRvY3J5cHQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgZG9rZXllZGhhc2ggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgZG9yYW5kb20gPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgICAgcnZhbCA9IDA7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICAgICAgZXhpdChydmFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgYXJndiArPSAxOwotICAgICAgICBvcHRpbmQgPSAxOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KLQotICAgIGlmICgoYXJnYyA+IDEpKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0KLSAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBUZXN0IHN0dWZmLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19pbml0KCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkuIik7Ci0KLQotICAgIGlmIChkb2NyeXB0IHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZG9jcnlwdCgpOwotICAgIH0KLSAgICBpZiAoZG9rZXllZGhhc2ggfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9kb2tleWVkaGFzaCgpOwotICAgIH0KLSAgICBpZiAoZG9yYW5kb20gfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9kb3JhbmRvbSgpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDbGVhbnVwLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19zaHV0ZG93bihTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIEZBSUxFRChydmFsLCAic2Nfc2h1dGRvd24oKS4iKTsKLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLwotCi0KLQotCi0KLXZvaWQKLXVzYWdlKEZJTEUgKiBvZnApCi17Ci0gICAgZnByaW50ZihvZnAsCi0gICAgICAgICAgICBVU0FHRQotICAgICAgICAgICAgIiIgTkwKLSAgICAgICAgICAgICIJLWEJCUFsbCB0ZXN0cy4iIE5MCi0gICAgICAgICAgICAiCS1jCQlUZXN0IG9mIHNjX2VuY3J5cHQoKS9zY19kZWNyeXB0KCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIJLWgJCUhlbHAuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIJLUggICAgICAgICAgICAgIFRlc3Qgc2Nfe2dlbmVyYXRlLGNoZWNrfV9rZXllZF9oYXNoKCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIJLXIgICAgICAgICAgICAgIFRlc3Qgc2NfcmFuZG9tKCkuIgotICAgICAgICAgICAgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLwotCi0KLQotCi0jaWZkZWYgRVhBTVBMRQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9zb21ldGhpbmcKLSAqCi0gKiBUZXN0IHRlbXBsYXRlLgotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKi8KLWludAotdGVzdF9kb3NvbWV0aGluZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotCi0gICAgRU0wKDEsICJVTklNUExFTUVOVEVEIik7ICAgIC8qIEVNKDEpOyAvKiAqLwotCi0gIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLwotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2RvcmFuZG9tCi0gKgotICogT25lIGxhcmdlIHJlcXVlc3QsIG9uZSBzZXQgb2Ygc2hvcnQgcmVxdWVzdHMuCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKiBYWFgJcHJvYmFibHkgc2hvdWxkIHNwbGl0IHVwIGludG8gaW5kaXZpZHVhbCBvcHRpb25zLgotICovCi1pbnQKLXRlc3RfZG9yYW5kb20odm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKLSAgICAgICAgZmFpbGNvdW50ID0gMCwKLSAgICAgICAgb3JpZ3JlcXVlc3QgPSAoMTAyNCAqIDIpLAotICAgICAgICBvcmlncmVxdWVzdF9zaG9ydCA9IDE5LCBuYnl0ZXMgPSBvcmlncmVxdWVzdCwgc2hvcnRjb3VudCA9IDcsIGk7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZltMT0NBTF9NQVhCVUZdOwotCi0gICAgT1VUUFVUKCJSYW5kb20gdGVzdCAtLSBsYXJnZSByZXF1ZXN0OiIpOwotCi0gICAgcnZhbCA9IHNjX3JhbmRvbShidWYsICZuYnl0ZXMpOwotICAgIEZBSUxFRChydmFsLCAic2NfcmFuZG9tKCkuIik7Ci0KLSAgICBpZiAobmJ5dGVzICE9IG9yaWdyZXF1ZXN0KSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJzY19yYW5kb20oKSByZXR1cm5lZCBkaWZmZXJlbnQgdGhhbiByZXF1ZXN0ZWQuIik7Ci0gICAgfQotCi0gICAgZHVtcF9jaHVuaygic2NhcGl0ZXN0IiwgTlVMTCwgYnVmLCBuYnl0ZXMpOwotCi0gICAgU1VDQ0VTUygiUmFuZG9tIHRlc3QgLS0gbGFyZ2UgcmVxdWVzdC4iKTsKLQotCi0gICAgT1VUUFVUKCJSYW5kb20gdGVzdCAtLSBzaG9ydCByZXF1ZXN0czoiKTsKLSAgICBvcmlncmVxdWVzdF9zaG9ydCA9IDE2OwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNob3J0Y291bnQ7IGkrKykgewotICAgICAgICBuYnl0ZXMgPSBvcmlncmVxdWVzdF9zaG9ydDsKLSAgICAgICAgcnZhbCA9IHNjX3JhbmRvbShidWYsICZuYnl0ZXMpOwotICAgICAgICBGQUlMRUQocnZhbCwgInNjX3JhbmRvbSgpLiIpOwotCi0gICAgICAgIGlmIChuYnl0ZXMgIT0gb3JpZ3JlcXVlc3Rfc2hvcnQpIHsKLSAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICAgICAic2NfcmFuZG9tKCkgcmV0dXJuZWQgZGlmZmVyZW50ICIgInRoYW4gcmVxdWVzdGVkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHVtcF9jaHVuaygic2NhcGl0ZXN0IiwgTlVMTCwgYnVmLCBuYnl0ZXMpOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRmb3IgKi8KLQotICAgIFNVQ0NFU1MoIlJhbmRvbSB0ZXN0IC0tIHNob3J0IHJlcXVlc3RzLiIpOwotCi0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2RvcmFuZG9tKCkgKi8KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2Rva2V5ZWRoYXNoCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCBrZXllZCBoYXNoZXMgd2l0aCBhIHZhcmlldHkgb2YgTUFDIGxlbmd0aCByZXF1ZXN0cy4KLSAqCi0gKgotICogTk9URSBCb3RoIHRlc3RzIGludGVudGlvbmFsbHkgdXNlIHRoZSBzYW1lIHNlY3JldAotICoKLSAqIEZJWAlHZXQgaW5wdXQgb3Igb3V0cHV0IGZyb20gc29tZSBvdGhlciBwYWNrYWdlIHdoaWNoIGhhc2hlcy4uLgotICogWFhYCUNvdWxkIGN1dCB0aGlzIGluIGhhbGYgd2l0aCBhIGxpdHRsZSBpbmRpcmVjdGlvbi4uLgotICovCi1pbnQKLXRlc3RfZG9rZXllZGhhc2godm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMCwgYmlnc3RyaW5nX2xlbiA9IHN0cmxlbihCSUdTVFJJTkcpLCBzZWNyZXRfbGVuID0gc3RybGVuKEJJR1NFQ1JFVCksIHByb3Blcmxlbmd0aCwgbWxjb3VudCA9IDAsICAgICAgICAvKiBNQUMgTGVuZ3RoIGNvdW50LiAgICovCi0gICAgICAgICAgICAgICAgICAgIGhibGVuOyAgICAgIC8qIEhhc2ggQnVmZmVyIGxlbmd0aC4gKi8KLQotICAgIHVfaW50ICAgICAgICAgICBoYXNoYnVmX2xlbltNTENPVU5UX01BWF0gPSB7Ci0gICAgICAgIExPQ0FMX01BWEJVRiwKLSAgICAgICAgQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKSwKLSAgICAgICAgQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpLAotICAgICAgICBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQzk2KSwKLSAgICAgICAgNywKLSAgICAgICAgMCwKLSAgICB9OwotCi0gICAgdV9jaGFyICAgICAgICAgIGhhc2hidWZbTE9DQUxfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAqczsKLQotICB0ZXN0X2Rva2V5ZWRoYXNoX2FnYWluOgotCi0gICAgT1VUUFVUKCJLZXllZCBoYXNoIHRlc3QgdXNpbmcgTUQ1IC0tIik7Ci0KLSAgICBtZW1zZXQoaGFzaGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBoYmxlbiA9IGhhc2hidWZfbGVuW21sY291bnRdOwotICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KTsKLQotICAgIHJ2YWwgPQotICAgICAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hidWYsICZoYmxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19nZW5lcmF0ZV9rZXllZF9oYXNoKCkuIik7Ci0KLSAgICBpZiAoaGFzaGJ1Zl9sZW5bbWxjb3VudF0gPiBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgaWYgKGhibGVuICE9IHByb3Blcmxlbmd0aCkgewotICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgTUQ1IGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDEpIik7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSBpZiAoaGJsZW4gIT0gaGFzaGJ1Zl9sZW5bbWxjb3VudF0pIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgTUQ1IGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDIpIik7Ci0gICAgfQotCi0gICAgcnZhbCA9Ci0gICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGhhc2hidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGJsZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfY2hlY2tfa2V5ZWRfaGFzaCgpLiIpOwotCi0gICAgYmluYXJ5X3RvX2hleChoYXNoYnVmLCBoYmxlbiwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiaGFzaCBidWZmZXIgKGxlbj0lZCwgcmVxdWVzdD0lZCk6ICAgJXNcbiIsCi0gICAgICAgICAgICBoYmxlbiwgaGFzaGJ1Zl9sZW5bbWxjb3VudF0sIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotICAgIFNVQ0NFU1MoIktleWVkIGhhc2ggdGVzdCB1c2luZyBNRDUuIik7Ci0KLQotCi0gICAgT1VUUFVUKCJLZXllZCBoYXNoIHRlc3QgdXNpbmcgU0hBMSAtLSIpOwotCi0gICAgbWVtc2V0KGhhc2hidWYsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAgaGJsZW4gPSBoYXNoYnVmX2xlblttbGNvdW50XTsKLSAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOwotCi0gICAgcnZhbCA9Ci0gICAgICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hidWYsICZoYmxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19nZW5lcmF0ZV9rZXllZF9oYXNoKCkuIik7Ci0KLSAgICBpZiAoaGFzaGJ1Zl9sZW5bbWxjb3VudF0gPiBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgaWYgKGhibGVuICE9IHByb3Blcmxlbmd0aCkgewotICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgICAgICJXcm9uZyBTSEExIGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDEpIik7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSBpZiAoaGJsZW4gIT0gaGFzaGJ1Zl9sZW5bbWxjb3VudF0pIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiV3JvbmcgU0hBMSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgyKSIpOwotICAgIH0KLQotICAgIHJ2YWwgPQotICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgaGFzaGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYmxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19jaGVja19rZXllZF9oYXNoKCkuIik7Ci0KLSAgICBiaW5hcnlfdG9faGV4KGhhc2hidWYsIGhibGVuLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJoYXNoIGJ1ZmZlciAobGVuPSVkLCByZXF1ZXN0PSVkKTogICAlc1xuIiwKLSAgICAgICAgICAgIGhibGVuLCBoYXNoYnVmX2xlblttbGNvdW50XSwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0gICAgU1VDQ0VTUygiS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIFNIQTEuIik7Ci0KLQotCi0gICAgLyoKLSAgICAgKiBSdW4gdGhlIGJhc2ljIGhhc2ggdGVzdHMgYnV0IHZhcnkgdGhlIHNpemUgTUFDIHJlcXVlc3RzLgotICAgICAqLwotICAgIGlmIChoYXNoYnVmX2xlblsrK21sY291bnRdICE9IDApIHsKLSAgICAgICAgZ290byB0ZXN0X2Rva2V5ZWRoYXNoX2FnYWluOwotICAgIH0KLQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb2tleWVkaGFzaCgpICovCi0KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9jcnlwdAotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKi8KLWludAotdGVzdF9kb2NyeXB0KHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCi0gICAgICAgIGZhaWxjb3VudCA9IDAsCi0gICAgICAgIGJpZ3N0cmluZ19sZW4gPSBzdHJsZW4oQklHU1RSSU5HKSwKLSAgICAgICAgc2VjcmV0X2xlbiA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTKSwKLSAgICAgICAgaXZfbGVuID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVNfSVYpOwotCi0gICAgdV9pbnQgICAgICAgICAgIGJ1Zl9sZW4gPSBMT0NBTF9NQVhCVUYsIGNyeXB0YnVmX2xlbiA9IExPQ0FMX01BWEJVRjsKLQotICAgIGNoYXIgICAgICAgICAgICBidWZbTE9DQUxfTUFYQlVGXSwKLSAgICAgICAgY3J5cHRidWZbTE9DQUxfTUFYQlVGXSwgc2VjcmV0W0xPQ0FMX01BWEJVRl0sIGl2W0xPQ0FMX01BWEJVRl07Ci0KLSAgICBPVVRQVVQoIlRlc3QgMURFUy1DQkMgLS0iKTsKLQotCi0gICAgbWVtc2V0KGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLQotICAgIG1lbWNweShzZWNyZXQsIEJJR1NFQ1JFVCwgc2VjcmV0X2xlbik7Ci0gICAgbWVtY3B5KGl2LCBCS1dEU0VDUkVULCBpdl9sZW4pOwotCi0KLSAgICBydmFsID0gc2NfZW5jcnlwdCh1c21ERVNQcml2UHJvdG9jb2wsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsIHNlY3JldF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGNyeXB0YnVmLCAmY3J5cHRidWZfbGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2VuY3J5cHQoKS4iKTsKLQotICAgIHJ2YWwgPSBzY19kZWNyeXB0KHVzbURFU1ByaXZQcm90b2NvbCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgIHNlY3JldCwgc2VjcmV0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBjcnlwdGJ1ZiwgY3J5cHRidWZfbGVuLCBidWYsICZidWZfbGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2RlY3J5cHQoKS4iKTsKLQotICAgIGlmIChidWZfbGVuICE9IGJpZ3N0cmluZ19sZW4pIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiRGVjcnlwdGVkIGJ1ZmZlciBpcyB0aGUgd3JvbmcgbGVuZ3RoLiIpOwotICAgIH0KLSAgICBpZiAobWVtY21wKGJ1ZiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuKSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAiRGVjcnlwdGVkIGJ1ZmZlciBpcyBub3QgZXF1YWwgdG8gb3JpZ2luYWwgcGxhaW50ZXh0LiIpOwotICAgIH0KLQotCi0gICAgU1VDQ0VTUygiVGVzdCAxREVTLUNCQyAtLSIpOwotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb2NyeXB0KCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2ggYi90ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MjU5ZmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgdGVzdF9rZXljaGFuZ2Uuc2gKLSMKLSMgTnVtYmVyIG9mIFNVQ0NFU1NlczogIDMKLSMKLSMKLSMgUnVuIHRlc3Qgb2YgS2V5Q2hhbmdlIFRDIGFnYWluc3QgZGF0YSBnaXZlbiBieSBCZXJ0IFdpam5lbiBpbiBlbWFpbC4KLSMKLSMgTk9URQlUaGUgc25tcF9kZWJ1ZyBmbGFnIGJpdCBERUJVR19SQU5ET01aRVJPUyBpbiBmaWxlIHNubXBsaWIvZGVidWcuaAotIwlNVVNUIGJlIHNldCBiZWZvcmUgY29tcGlsaW5nIGFuZCBsaW5raW5nIGxpYnNubXAuYSB0byB0ZXN0aW5nL2t0ZXN0Ci0jCWZvciB0aGlzIHRvIHN1Y2NlZWQuCi0jCi0KLQotLiBldmFsX3Rvb2xzLnNoCi0KLVZFUklGWSBrdGVzdAotCi1TVEFSVFRFU1QKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgRGVjbGFyYXRpb25zLgotIwotREFUQUZJTEVfUFJFRklYPWRhdGEua2V5Y2hhbmdlLQotREFUQUZJTEVfU1VGRklYRVM9Im1kNSBzaGExIHNoYTEtZGVzIgotCi1vbGRrdWw9Ci1uZXdrdWw9Ci1rZXljaGFuZ2VzdHJpbmc9Ci0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgVGVzdC4KLSMKLWZvciBkZnMgaW4gJERBVEFGSUxFX1NVRkZJWEVTOyBkbwotCU9VVFBVVCAiPT0gVGVzdCBvZiBLZXlDaGFuZ2UgVEMgY29ycmVjdG5lc3MgZm9yIFwiJGRmc1wiLiIKLQotCXNldCB4IGBhd2sgJ3sgcHJpbnQgJDEgfScgJHtEQVRBRklMRV9QUkVGSVh9JGRmc2AKLQlzaGlmdAotCi0JWyAkIyAtbHQgMyBdICYmIEZBSUxFRCAxIFwKLQkgICAgIldyb25nIG51bWJlciBvZiBsaW5lcyAoJCMpIGluIGRhdGFmaWxlIFwiJERBVEFGSUxFX1BSRUZJWH0kZGZzXCIuIgotCi0Jb2xka2V5PSQxCi0JbmV3a2V5PSQyCi0Ja2V5Y2hhbmdlc3RyaW5nPSQzCi0KLQlDQVBUVVJFICJrdGVzdCAtayAtTyAkb2xka2V5IC1OICRuZXdrZXkiCi0JRkFJTEVEICQ/ICJrdGVzdCIKLQotCUNIRUNLRVhBQ1QgJGtleWNoYW5nZXN0cmluZwotCVsgJD8gLWVxIDEgXQotCUZBSUxFRCAkPyAiUHJvcGVyIEtleUNoYW5nZSBzdHJpbmcgd2FzIG5vdCBnZW5lcmF0ZWQuIgotCi0KLQlTVUNDRVNTICJLZXlDaGFuZ2UgVEMgY29ycmVjdG5lc3MgdGVzdCBmb3IgXCIkZGZzXCIuIgotZG9uZQotCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgQ2xlYW51cCwgZXhpdC4KLSMKLVNUT1BURVNUCi0KLWV4aXQgJGZhaWxjb3VudAotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3Rfa3VsLnNoIGIvdGVzdGluZy90ZXN0X2t1bC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzBiN2I3Ni4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3Rfa3VsLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIHRlc3Rfa3VsLnNoCi0jCi0jIE51bWJlciBvZiBTVUNDRVNTZXM6CTIKLSMKLSMgUnVuIGtleSBsb2NhbGl6YXRpb24gdGVzdHMgYW5kIGNvbXBhcmUgd2l0aCBkYXRhIGdpdmVuIGluIHRoZSBVU00KLSMgZG9jdW1lbnRhdGlvbi4KLSMKLSMgRklYCUNIRUNLRVhBQ1QoKSB3aWxsIHByb2R1Y2UgMiBsaW5lcyB3aGVuIFNDQVBJIGlzIGJ1aWx0IHdpdGgKLSMJU05NUF9URVNUSU5HX0NPREUsIGJ1dCBvbmx5IDEgbGluZSB3aXRob3V0IHRoZSAjZGVmaW5lLiAgVGhlIHNjcmlwdAotIwlhc3N1bWVzIFNOTVBfVEVTVElOR19DT0RFIGlzIGRlZmluZWQuCi0jCi0jCi0KLQotLiBldmFsX3Rvb2xzLnNoCi0KLVZFUklGWSBrdGVzdAotCi1TVEFSVFRFU1QKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgRGVjbGFyYXRpb25zLgotIwotREFUQUZJTEVfUFJFRklYPWRhdGEua3VsLQotREFUQUZJTEVfU1VGRklYRVM9Im1kNSBzaGExIgotCi1QPQotS3U9Ci1lbmdpbmVJRD0KLWt1bD0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBUZXN0LgotIwotZm9yIGRmcyBpbiAkREFUQUZJTEVfU1VGRklYRVM7IGRvCi0JT1VUUFVUICI9PSBUZXN0IG9mIGtleSBsb2NhbGl6YXRpb24gY29ycmVjdG5lc3Mgd2l0aCB0cmFuc2Zvcm0gXCIkZGZzXCIuIgotCi0Jc2V0IHggYGF3ayAneyBwcmludCAkMSB9JyAke0RBVEFGSUxFX1BSRUZJWH0kZGZzYAotCXNoaWZ0Ci0KLQlbICQjIC1sdCA0IF0gJiYgRkFJTEVEIDEgXAotCSAgICAiV3JvbmcgbnVtYmVyIG9mIGxpbmVzICgkIykgaW4gZGF0YWZpbGUgXCIkREFUQUZJTEVfUFJFRklYfSRkZnNcIi4iCi0KLQlQPSQxCi0JS3U9JDIKLQllbmdpbmVJRD0kMwotCWt1bD0kNAotCi0JQ0FQVFVSRSAia3Rlc3QgLWwgLVAgJFAgLUUgJGVuZ2luZUlEICIKLQlGQUlMRUQgJD8gImt0ZXN0IgotCi0JQ0hFQ0tFWEFDVCAkS3UKLQlbICQ/IC1lcSAyIF0KLQlGQUlMRUQgJD8gIk1hc3RlciBrZXkgd2FzIG5vdCBnZW5lcmF0ZWQuIgotCi0JQ0hFQ0tFWEFDVCAka3VsCi0JWyAkPyAtZXEgMiBdCi0JRkFJTEVEICQ/ICJMb2NhbGl6ZWQga2V5IHdhcyBub3QgZ2VuZXJhdGVkLiIKLQotCi0JU1VDQ0VTUyAiS2V5IGxvY2FsaXphdGlvbiBjb3JyZWN0bmVzcyB0ZXN0IHdpdGggdHJhbnNmb3JtIFwiJGRmc1wiLiIKLWRvbmUKLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIENsZWFudXAsIGV4aXQuCi0jCi1TVE9QVEVTVAotCi1leGl0ICRmYWlsY291bnQKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjNjb25maWcgYi90ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhN2ZiMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1bICJ4JFNOTVBfU01VWF9TT0NLRVQiID0gIngiIF0gJiYgU05NUF9TTVVYX1NPQ0tFVD0xLjAuMC4wCi0KLUNPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi1DT05GSUdBR0VOVCBzbXV4c29ja2V0ICRTTk1QX1NNVVhfU09DS0VUCi0KLSMgWFhYOiBhdXRvLXN3aXRjaCB0byBhIHN1cHBvcnRlZCBwcm90b2NvbCBpbnN0ZWFkLgotaWYgdGVzdCAieCRERUZBVVRIVFlQRSIgPSAieCI7IHRoZW4KLSAgICBpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotCURFRkFVVEhUWVBFPSJTSEEiCi0gICAgZWxzZQotCSAgICBERUZBVVRIVFlQRT0iTUQ1IgotICAgIGZpCi1maQotCi1pZiB0ZXN0ICJ4JERFRlBSSVZUWVBFIiA9ICJ4IjsgdGhlbgotICAjIFhYWDogSEFWRV9BRVMgZGVwZW5kcyBvbiBjcHAgbG9naWMsIHNvIHdlIG5lZWQgdG8gdGVzdCBmb3IgbG93ZXItbGV2ZWwgc3R1ZmYKLSAgaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgICBpZiBncmVwICdeI2RlZmluZSBIQVZFX09QRU5TU0xfQUVTX0ggMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0gICAgICBpZiBncmVwICdeI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgICAgICAgREVGUFJJVlRZUEU9IkFFUyIKLSAgICAgIGVsc2UKLSAgICAgICAgREVGUFJJVlRZUEU9IkRFUyIKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgREVGUFJJVlRZUEU9IkRFUyIKLSAgICBmaQotICBlbHNlCi0gICAgREVGUFJJVlRZUEU9IiIKLSAgZmkKLWZpCi0KLUNPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbCAkREVGQVVUSFRZUEUgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAkREVGUFJJVlRZUEUKLUNPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgdGVtcGxhdGUgJERFRkFVVEhUWVBFIHRlbXBsYXRlX3Rlc3RfcGFzc19hdXRoICRERUZQUklWVFlQRQotQ09ORklHQUdFTlQgcnd1c2VyIGluaXRpYWwgbm9hdXRoCi1DT05GSUdBR0VOVCByd3VzZXIgbmV3dGVzdHVzZXIKLQotTk9BVVRIVEVTVEFSR1M9Ii1sIG5hbnAgLXUgaW5pdGlhbCAtdiAzIgotQVVUSFRFU1RBUkdTPSItbCBhbnAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIgotUFJJVlRFU1RBUkdTPSItbCBhcCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXggJERFRlBSSVZUWVBFIC1YIGluaXRpYWxfdGVzdF9wYXNzX2F1dGgiCi0KLUFVVEhOT1BBU1NURVNUQVJHUz0iLWwgYW5wIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUiCi1QUklWTk9QQVNTVEVTVEFSR1M9Ii1sIGFwIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlIGIvdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQxODk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBTTk1QdjMgYmFzZSBjb25maWcKLSMKLSMgSW5wdXQrT3V0cHV0IHZhcmlhYmxlczoKLSMgICBERUZTRUNVUklUWUxFVkVMICAgICAgICAgbm9BdXRoTm9Qcml2fGF1dGhOb1ByaXZ8YXV0aFByaXYKLSMgICBERUZBVVRIVFlQRSAgICAgICAgICAgICAgTUQ1fFNIQQotIyAgIERFRlBSSVZUWVBFICAgICAgICAgICAgICBERVN8QUVTCi0jICAgVEVTVE5PQVVUSFVTRVIgICAgICAgICAgIDxteXVzZXI+Ci0jICAgVEVTVChBVVRIfFBSSVYpVVNFUlsyXSAgIDxteXVzZXI+Ci0jICAgVEVTVChBVVRIfFBSSVYpUEFTU1syXSAgIDxteXBhc3M+Ci0jCi0jIElucHV0IHZhcmlhYmxlczoKLSMgICBDUkVBVEVVU0VSRU5HSU5FSUQgICAgICAgPGVuZ2luZWlkPgotIwotIyBPdXRwdXQgdmFyaWFibGVzOgotIyAgIENSRUFURUFVVEhVU0VSWzJdCi0jICAgQ1JFQVRFUFJJVlVTRVJbMl0KLSMgICBDUkVBVEVOT0FVVEhVU0VSCi0jICAgVEVTVE5PQVVUSEFSR1MKLSMgICBURVNUQVVUSEFSR1NbTk9QQVNTXVsyXQotIyAgIFRFU1RQUklWQVJHU1tOT1BBU1NdWzJdCi0jCi0KLSMjIERlZmF1bHRzCi1bICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gIngiIF0gJiYgREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgotCi0jIyBhdXRvLXByb2JlIGJlc3QgYXV0aCB0eXBlCi1pZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotICBNQVhBVVRIVFlQRT1TSEEKLWVsc2UKLSAgIyBNRDUgaXMgYWx3YXlzIGF2YWlsYWJsZSBpbnRlcm5hbGx5Ci0gIE1BWEFVVEhUWVBFPU1ENQotZmkKLQotIyMgYXV0by1wcm9iZSBiZXN0IHByaXYgdHlwZQotIyBYWFg6IEhBVkVfQUVTIGRlcGVuZHMgb24gY3BwIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIHRlc3QgZm9yIGxvd2VyLWxldmVsIHN0dWZmCi1pZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsOyB0aGVuCi0gIGlmIGdyZXAgJ14jZGVmaW5lIEhBVkVfT1BFTlNTTF9BRVNfSCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCAmJiBcCi0gICBncmVwICdeI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgICBNQVhQUklWVFlQRT1BRVMKLSAgZWxzZQotICAgIE1BWFBSSVZUWVBFPURFUwotICBmaQotZWxzZQotICAgIE1BWFBSSVZUWVBFPSIiCi1maQotCi1DUkVBVEVVU0VSQ01EPSJjcmVhdGVVc2VyIgotWyAieCRDUkVBVEVVU0VSRU5HSU5FSUQiICE9ICJ4IiBdICYmIENSRUFURVVTRVJDTUQ9IiRDUkVBVEVVU0VSQ01EIC1lICRDUkVBVEVVU0VSRU5HSU5FSUQiCi0KLSMjIGF1dGggc2V0dXAKLWlmIFsgIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieGF1dGhQcml2IiAtbyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4YXV0aE5vUHJpdiIgXTsgdGhlbgotICBbICJ4JE1BWEFVVEhUWVBFIiA9ICJ4IiBdICYmIFNLSVAKLSAgWyAieCRERUZBVVRIVFlQRSIgPSAieFNIQSIgLWEgIngkTUFYQVVUSFRZUEUiICE9ICJ4U0hBIiBdICYmIFNLSVAKLSAgWyAieCRERUZBVVRIVFlQRSIgPSAieCIgXSAmJiBERUZBVVRIVFlQRT0kTUFYQVVUSFRZUEUKLSAgIyB1c2VyL3Bhc3Mgc2V0dXAgKFhYWDogcmFuZG9taXplKQotICBbICJ4JFRFU1RBVVRIVVNFUiIgPSAieCIgXSAmJiBURVNUQVVUSFVTRVI9aW5pdGlhbF9hdXRoCi0gIFsgIngkVEVTVEFVVEhVU0VSMiIgPSAieCIgXSAmJiBURVNUQVVUSFVTRVIyPXRlbXBsYXRlX2F1dGgKLSAgWyAieCRURVNUQVVUSFBBU1MiID0gIngiIF0gJiYgVEVTVEFVVEhQQVNTPWluaXRpYWxfdGVzdF9wYXNzX2F1dGgKLSAgWyAieCRURVNUQVVUSFBBU1MyIiA9ICJ4IiBdICYmIFRFU1RBVVRIUEFTUzI9dGVtcGxhdGVfdGVzdF9wYXNzX2F1dGgKLSAgQ1JFQVRFQVVUSFVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUQVVUSFVTRVIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MiCi0gIENSRUFURUFVVEhVU0VSMj0iJENSRUFURVVTRVJDTUQgJFRFU1RBVVRIVVNFUjIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MyIgotICAjIGNvbW1hbmQgYXJncwotICBURVNUQVVUSEFSR1NOT1BBU1M9Ii12IDMgLWwgYW5wIC11ICRURVNUQVVUSFVTRVIgLWEgJERFRkFVVEhUWVBFIgotICBURVNUQVVUSEFSR1NOT1BBU1MyPSItdiAzIC1sIGFucCAtdSAkVEVTVEFVVEhVU0VSMiAtYSAkREVGQVVUSFRZUEUiCi0gIFRFU1RBVVRIQVJHUz0iJFRFU1RBVVRIQVJHU05PUEFTUyAtQSAkVEVTVEFVVEhQQVNTIgotICBURVNUQVVUSEFSR1MyPSIkVEVTVEFVVEhBUkdTTk9QQVNTMiAtQSAkVEVTVEFVVEhQQVNTMiIKLWZpCi0KLSMjIHByaXYgc2V0dXAKLWlmIFsgIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieGF1dGhQcml2IiBdOyB0aGVuCi0gIFsgIngkTUFYUFJJVlRZUEUiID0gIngiIF0gJiYgU0tJUAotICBbICJ4JERFRlBSSVZUWVBFIiA9ICJ4QUVTIiAtYSAieCRNQVhQUklWVFlQRSIgIT0gInhBRVMiIF0gJiYgU0tJUAotICBbICJ4JERFRlBSSVZUWVBFIiA9ICJ4IiBdICYmIERFRlBSSVZUWVBFPSRNQVhQUklWVFlQRQotICAjIHVzZXIvcGFzcyBzZXR1cCAoWFhYOiByYW5kb21pemUpCi0gIFsgIngkVEVTVFBSSVZVU0VSIiA9ICJ4IiBdICYmIFRFU1RQUklWVVNFUj1pbml0aWFsX3ByaXYKLSAgWyAieCRURVNUUFJJVlVTRVIyIiA9ICJ4IiBdICYmIFRFU1RQUklWVVNFUjI9dGVtcGxhdGVfcHJpdgotICBbICJ4JFRFU1RQUklWUEFTUyIgPSAieCIgXSAmJiBURVNUUFJJVlBBU1M9aW5pdGlhbF90ZXN0X3Bhc3NfcHJpdgotICBbICJ4JFRFU1RQUklWUEFTUzIiID0gIngiIF0gJiYgVEVTVFBSSVZQQVNTMj10ZW1wbGF0ZV90ZXN0X3Bhc3NfcHJpdgotICBDUkVBVEVQUklWVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1RQUklWVVNFUiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUyAkREVGUFJJVlRZUEUgJFRFU1RQUklWUEFTUyIKLSAgQ1JFQVRFUFJJVlVTRVIyPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVFBSSVZVU0VSMiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUzIgJERFRlBSSVZUWVBFICRURVNUUFJJVlBBU1MyIgotICAjIGNvbW1hbmQgYXJncwotICBURVNUUFJJVkFSR1NOT1BBU1M9Ii12IDMgLWwgYXAgLXUgJFRFU1RQUklWVVNFUiAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgotICBURVNUUFJJVkFSR1NOT1BBU1MyPSItdiAzIC1sIGFwIC11ICRURVNUUFJJVlVTRVIyIC1hICRERUZBVVRIVFlQRSAteCAkREVGUFJJVlRZUEUiCi0gIFRFU1RQUklWQVJHUz0iJFRFU1RQUklWQVJHU05PUEFTUyAtQSAkVEVTVEFVVEhQQVNTIC1YICRURVNUUFJJVlBBU1MiCi0gIFRFU1RQUklWQVJHUzI9IiRURVNUUFJJVkFSR1NOT1BBU1MyIC1BICRURVNUQVVUSFBBU1MyIC1YICRURVNUUFJJVlBBU1MyIgotZmkKLQotIyMgbm9hdXRoIHNldHVwCi1bICJ4JFRFU1ROT0FVVEhVU0VSIiA9ICJ4IiBdICYmIFRFU1ROT0FVVEhVU0VSPWluaXRpYWwKLVRFU1ROT0FVVEhBUkdTPSItdiAzIC1sIG5hbnAgLXUgJFRFU1ROT0FVVEhVU0VSIgotQ1JFQVRFTk9BVVRIVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1ROT0FVVEhVU0VSIgotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcgYi90ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkN2JmOTUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgZ2VuZXJpY2FsbHkgc2V0IHVwIHRoZSB1c2VyICJpbml0aWFsMSIgYW5kICJpbml0aWFsMiIgIGZvciBzbm1wIHYzCi0jIGFjY2VzcyB0byB0aGUgYWdlbnQuCi0KLSMgQ29uZmlndXJhdGlvbjoKLSNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCi0jaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCi0KLSMgWFhYOiBkbyBhdXRvc2VsZWN0aW9uIG9mIHN1cHBvcnRlZCBhbGdvcml0aG1zCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9ERVMKLQotQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLQotQ09ORklHQUdFTlQgY3JlYXRlVXNlciBpbml0aWFsMSBNRDUgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCBERVMKLUNPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbDIgTUQ1IGluaXRpYWxfdGVzdF9wYXNzX2F1dGggREVTCi0KLQotQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAxICB1c20gICAgIGluaXRpYWwxCi1DT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDIgIHVzbSAgICAgaW5pdGlhbDIKLQotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0xICAgICBpbmNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBpbmNsdWRlZCAuMQotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBleGNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAotQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMSAgIiIgYW55IGF1dGggZXhhY3Qgc3lzdGVtMSBub25lIG5vbmUnCi1DT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICAiIiBhbnkgYXV0aCBleGFjdCBzeXN0ZW0yIG5vbmUgbm9uZScKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZyBiL3Rlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2MzNWIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCi0jIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKLSMgZ2VuZXJpY2FsbHkgc2V0IHVwIHRoZSBjb21tdW5pdHkgInRlc3Rjb21tdW5pdHkxIGFuZCB0ZXN0Y29tbXVuaXR5MiIgZm9yIHZhcmlvdXMgc25tcAotIyB2ZXJzaW9uIGFjY2VzcyB0byB0aGUgYWdlbnQuCi0KLWlmIFsgIngkc25tcF92ZXJzaW9uIiA9ICJ4IiBdOyB0aGVuCi0gIHNubXBfdmVyc2lvbj0iYW55IgotZmkKLQotQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLQotQ09ORklHQUdFTlQgcm9jb21tdW5pdHkgdGVzdHJvY29tbXVuaXR5IDEyNy4wLjAuMSAuMS4zLjYuMS4yLjEuMS41LjAKLUNPTkZJR0FHRU5UIHJ3Y29tbXVuaXR5IHRlc3Ryd2NvbW11bml0eSAxMjcuMC4wLjEgLjEuMy42LjEuMi4xLjEuNS4wCi0KLUNPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYzEgIGRlZmF1bHQgdGVzdGNvbW11bml0eTEKLUNPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYzIgIGRlZmF1bHQgdGVzdGNvbW11bml0eTIKLQotaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuIAotQ09ORklHQUdFTlQgY29tMnNlYzYgdGVzdGNvbW11bml0eXNlYzEgIGRlZmF1bHQgdGVzdGNvbW11bml0eTEKLUNPTkZJR0FHRU5UIGNvbTJzZWM2IHRlc3Rjb21tdW5pdHlzZWMyICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkyCi1maQotCi1pZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidW5peCIgXTt0aGVuIAotQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYzEgIHRlc3Rjb21tdW5pdHkxCi1DT05GSUdBR0VOVCBjb20yc2VjdW5peCB0ZXN0Y29tbXVuaXR5c2VjMiAgdGVzdGNvbW11bml0eTIKLWZpCi0KLUNPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMSAgJHNubXBfdmVyc2lvbiAgICAgdGVzdGNvbW11bml0eXNlYzEKLUNPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMiAgJHNubXBfdmVyc2lvbiAgICAgdGVzdGNvbW11bml0eXNlYzIKLQotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0xICAgICBpbmNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBpbmNsdWRlZCAuMQotQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBleGNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAotQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMSAgIiIgYW55IG5vYXV0aCBleGFjdCBzeXN0ZW0xIG5vbmUgbm9uZScKLUNPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDIgICIiIGFueSBub2F1dGggZXhhY3Qgc3lzdGVtMiBub25lIG5vbmUnCi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcgYi90ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDRkM2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBnZW5lcmljYWxseSBzZXQgdXAgdGhlIGNvbW11bml0eSAidGVzdGNvbW11bml0eSIgZm9yIHZhcmlvdXMgc25tcAotIyB2ZXJzaW9uIGFjY2VzcyB0byB0aGUgYWdlbnQuCi0KLWlmIFsgIngkc25tcF92ZXJzaW9uIiA9ICJ4IiBdOyB0aGVuCi0gIHNubXBfdmVyc2lvbj0iYW55IgotZmkKLQotWyAieCRTTk1QX1NNVVhfU09DS0VUIiA9ICJ4IiBdICYmIFNOTVBfU01VWF9TT0NLRVQ9MS4wLjAuMAotCi1DT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotQ09ORklHQUdFTlQgc211eHNvY2tldCAkU05NUF9TTVVYX1NPQ0tFVAotCi1DT05GSUdBR0VOVCBjb20yc2VjIHRlc3Rjb21tdW5pdHlzZWMgIGRlZmF1bHQgdGVzdGNvbW11bml0eQotaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuIAotCUNPTkZJR0FHRU5UIGNvbTJzZWM2IHRlc3Rjb21tdW5pdHlzZWMgIGRlZmF1bHQgdGVzdGNvbW11bml0eQotZmkKLQotaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVuaXgiIF07dGhlbiAKLQlDT05GSUdBR0VOVCBjb20yc2VjdW5peCB0ZXN0Y29tbXVuaXR5c2VjICB0ZXN0Y29tbXVuaXR5Ci1maQotCi1DT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cCAgJHNubXBfdmVyc2lvbiAgICAgdGVzdGNvbW11bml0eXNlYwotQ09ORklHQUdFTlQgdmlldyAgICBhbGwgICAgIGluY2x1ZGVkIC4xIDgwCi1DT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAgICIiIGFueSBub2F1dGggZXhhY3QgYWxsIG5vbmUgbm9uZScKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCBiL3Rlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJjYjA2MC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjEgc3VwcG9ydAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUNBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zIgotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjEiCi0KLUNIRUNLT1JESUUgIkVycm9yIGluIHBhY2tldCIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLT1JESUUgIlRpbWVvdXQiCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCBiL3Rlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWY5NzguLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgZ2V0IG9mIHN5c3RlbS5zeXNVcFRpbWUuMAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQgYi90ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzZmRmNi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgZ2V0bmV4dCBvZiBzeXN0ZW0uc3lzVXBUaW1lCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMyIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0IGIvdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlYzJjNDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgYnVsa2dldCBvZiBzeXN0ZW0gY29tcG9uZW50cwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMiBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBidWxrZ2V0ICRTTk1QX0ZMQUdTIC12MmMgLU9uIC1DbjEgLUNyMiAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNCAuMS4zLjYuMS4yLjEuMSIKLQotU1RPUEFHRU5UCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzoiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMi4wID0gT0lEOiIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCIKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuNS4wIgotRVhQRUNUUkVTVUxUIDAKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJjMjQxMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jCi0jIHRlc3Qgc25tcHYyYyBnZXQgc3VwcG9ydCBieSByZWFkaW5nIGEgdmFyaWFibGUKLSMKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjJjIGdldCB3aXRoIHdyb25nIGNvbW11bml0eQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyBub3RhdmFsaWRjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiVGltZW91dCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5Nzk0Mi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIS9iaW4vc2gKLQotIwotIyB0ZXN0IHNubXB2MmMgZ2V0IHN1cHBvcnQgYnkgcmVhZGluZyBhIHZhcmlhYmxlCi0jCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYyYyBnZXQgYWdhaW5zdCBTTk1QdjEgYWdlbnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIlRpbWVvdXQiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNmNkNGQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYxIGdldCBhZ2FpbnN0IFNOTVB2MmMgYWdlbnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIlRpbWVvdXQiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoIGIvdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5YWI5YS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyBnZXQgb2Ygc3lzdGVtLnN5c1VwVGltZS4xCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjEiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4xID0gTm8gU3VjaCBJbnN0YW5jZSIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCBiL3Rlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjNmNlMy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIG5vQXV0aE5vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gYWNjZXB0IHVzZXIgaW5pdGlhbCB3aXRoIG5vQXV0aE5vUHJpdgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCBiL3Rlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDJiOWY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXRuZXh0IHVzaW5nIGluaXRpYWwgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgJE5PQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzdGVtLnN5c1VwVGltZSIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQgYi90ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGE4ZWNiNy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBidWxrZ2V0IG9mIHN5c3RlbQotCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbjogCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGJ1bGtnZXQgJFNOTVBfRkxBR1MgLU9uIC1DbjEgLUNyMiAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40IC4xLjMuNi4xLjIuMS4xIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4yLjAgPSBPSUQ6IgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wIgotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS41LjAiCi1FWFBFQ1RSRVNVTFQgMAotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUgYi90ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDllNzk2MGQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBNRDUvbm9Qcml2IG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLURFRkFVVEhUWVBFPSJNRDUiCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTIGIvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNjOTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgTUQ1L0FFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotU0tJUElGTk9UIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLURFRkFVVEhUWVBFPU1ENQotREVGUFJJVlRZUEU9QUVTCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTIGIvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwNjg5ZGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgTUQ1L0RFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi1ERUZBVVRIVFlQRT1NRDUKLURFRlBSSVZUWVBFPURFUwotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEgYi90ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5YzE0NzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9ub1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIHRlbXBsYXRlU0hBIHVzZXIKLURFRkFVVEhUWVBFPSJTSEEiCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTIGIvdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5NGZiYWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL0RFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9ERVMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgotREVGQVVUSFRZUEU9IlNIQSIKLURFRlBSSVZUWVBFPSJERVMiCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTIGIvdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjY1MTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL0FFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotU0tJUElGTk9UIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIHRlbXBsYXRlU0hBIHVzZXIKLURFRlBSSVZUWVBFPSJBRVMiCi1ERUZBVVRIVFlQRT0iU0hBIgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5OTA5NWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjMgZ2V0IHVzaW5nIHVua25vd24gdXNlci4KLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtbCBuYW5wIC11IHVua25vd251c2VyICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIlVua25vd24gdXNlciBuYW1lIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uIGIvdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWNiNDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbgorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgYWdlbnQgVVNNIHVzZXIgbWFuYWdlbWVudCB3aXRoIHNubXB1c20KLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotU0tJUElGTk9UIFVTSU5HX1NOTVBWM19VU01VU0VSX01PRFVMRQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBTTk1QdjMgVVNNIGFnZW50IGNvbmZpZ3VyYXRpb24KLURFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKLS4gLi9TdjN1c21jb25maWdhZ2VudAotCi0jIHRlc3QgdXNlcgotTkVXVVNFUj1uZXd0ZXN0dXNlcgotTkVXQVVUSFBBU1M9bmV3YXV0aHBhc3MKLU5FV1BSSVZQQVNTPW5ld3ByaXZwYXNzCi1ORVdBVVRIUFJJVlBBU1M9bmV3YXV0aHByaXZwYXNzCi0KLSMgY29uZmlndXJlIGFnZW50Ci1DT05GSUdBR0VOVCByd3VzZXIgJE5FV1VTRVIKLQotIyBTdGFydCB0aGUgYWdlbnQKLVNUQVJUQUdFTlQKLQotIyMgdXNtVXNlclRhYmxlIG1hbmFnZW1lbnQKLQotIyMgMSkgY3JlYXRlLCBjbG9uZSwgdGVzdCwgZGVsZXRlCi0KLSMgY3JlYXRlIG5ldyAodmFuaWxsYSkgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKLQotIyBjbG9uZQotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY2xvbmVGcm9tICRORVdVU0VSICRURVNUUFJJVlVTRVIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjbG9uZWQiCi0KLSMgdGVzdCAoYXV0aFByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkVEVTVEFVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkVEVTVFBSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotIyBkZWxldGUgCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBkZWxldGUgJE5FV1VTRVIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBkZWxldGVkIgotCi0jIyAyKSBjcmVhdGUgdy8gY2xvbmUsIHBhc3N3ZCAoYXV0aCksIHBhc3N3ZCAocHJpdiksIHRlc3QgKGF1dGhQcml2K2F1dGhOb1ByaXYpCi0KLSMgY3JlYXRlK2Nsb25lIHRlbXBsYXRlIHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUiAkVEVTVFBSSVZVU0VSMiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCi0KLSMgY2hhbmdlIGF1dGggcGFzc3BocmFzZSBvZiBuZXcgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTIC1DYSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVEFVVEhQQVNTMiAkTkVXQVVUSFBBU1MgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIGNoYW5nZSBwcml2IHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAtQ3ggJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RQUklWUEFTUzIgJE5FV1BSSVZQQVNTICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyB0ZXN0IChhdXRoTm9Qcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhbnAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSMgdGVzdCAoYXV0aFByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSMjIDMpIHBhc3N3ZCAocHJpdiksIHBhc3N3ZCAoYXV0aCtwcml2KSwgdGVzdAotCi0jIGNoYW5nZSBwcml2IHBhc3NwaHJhc2UgKHRvIGF1dGggcGFzc3BocmFzZSkgYnkgdGhlIHVzZXIgaGltc2VsZgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdQUklWUEFTUyAtQ3ggJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV1BSSVZQQVNTICRORVdBVVRIUEFTUyIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgY2hhbmdlIGJvdGggcGFzc3BocmFzZXMgYXQgb25jZQotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXQVVUSFBBU1MgJE5FV0FVVEhQUklWUEFTUyIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgdGVzdCAoYXV0aFByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBSSVZQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotIyMgNSkgcGVyc2lzdGVuY3kgSTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRlc3QKLQotaWYgSVNERUZJTkVEIEhBVkVfU0lHSFVQOyB0aGVuCi0KLUhVUEFHRU5UCi1ERUxBWQotCi0jIHRlc3QgKGF1dGhQcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQUklWUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSMjIDUpIHBlcnNpc3RlbmN5IElJOiBzdG9wLCBzdGFydCwgcmUtdGVzdAotCi1TVE9QQUdFTlQKLURFTEFZCi0jIG1ha2Ugc3VyZSBpdCBwaWNrcyB1cCBwZXJzaXN0ZW50IGNvbmZpZyBhbmQgdXNlcyBhIG5ldyBsb2dmaWxlCi1TTk1QQ09ORlBBVEg9IiR7U05NUF9UTVBESVJ9JHtTTk1QX0VOVl9TRVBBUkFUT1J9JHtTTk1QX1RNUF9QRVJTSVNURU5URElSfSIKLWV4cG9ydCBTTk1QQ09ORlBBVEgKLVNOTVBfQ09ORklHX0ZJTEU9ImRvZXMtbm90LWV4aXN0IgotU05NUF9TTk1QRF9MT0dfRklMRT0ke1NOTVBfVE1QRElSfS9zbm1wZDIubG9nCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCAoYXV0aFByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBSSVZQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotZmkKLQotIyMgc3RvcCBhZ2VudCBhbmQgZmluaXNoCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210IGIvdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyNmRiOS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210CisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBzbm1wdHJhcGQgVVNNIHVzZXIgbWFuYWdlbWVudCB3aXRoIHNubXB1c20KLQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX1NOTVBWM19VU01VU0VSX01PRFVMRQotU0tJUElGICAgIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIGNvbmZpZ3VyZSBBZ2VudFggc29ja2V0Ci1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdOyB0aGVuCi0gIEFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi0gIFRSQVBEX0ZMQUdTPSIkVFJBUERfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi1lbHNlCi0gIEFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLSAgVFJBUERfRkxBR1M9IiRUUkFQRF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotZmkKLQotIyBzdGFuZGFyZCBTTk1QdjMgVVNNIGFnZW50IGNvbmZpZ3VyYXRpb24KLURFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKLS4gLi9TdjN1c21jb25maWdhZ2VudAotCi0jIHNhdmUgYWdlbnQgYWNjZXNzCi1BR0VOVF9URVNUQVVUSEFSR1M9JFRFU1RBVVRIQVJHUwotQUdFTlRfVEVTVFBSSVZBUkdTPSRURVNUUFJJVkFSR1MKLQotIyBjb25maWd1cmUgYWdlbnQgYXMgQWdlbnRYIG1hc3RlcgotQ09ORklHQUdFTlQgbWFzdGVyIGFnZW50eAotCi0jIFN0YXJ0IHRoZSBtYXN0ZXIgYWdlbnQKLVNUQVJUQUdFTlQKLQotIyBzdGFuZGFyZCBTTk1QdjMgVVNNIHNubXB0cmFwZCBjb25maWd1cmF0aW9uCi0uIC4vU3YzdXNtY29uZmlndHJhcGQKLQotIyBjb25maWd1cmUgc25tcHRyYXBkCi1ORVdBVVRIS0VZPTB4NzQ1OGVhZDdhMGI1YTc1M2UyMWJmY2I4N2Y2Yzk4MDNlYmVmNjhjZgotTkVXUFJJVktFWT0weDk4ZTI2OTZkMWNmMzRkOTA0ZGZjYWU3NmJmMDFjNDczCi1ORVdVU0VSPW5ld3Rlc3R1c2VyCi1ORVdBVVRIUEFTUz1uZXdhdXRocGFzcwotTkVXUFJJVlBBU1M9bmV3cHJpdnBhc3MKLU5FV1VTRVIyPW5ld3Rlc3R1c2VyX3ZhbmlsbGEKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkTkVXVVNFUiBhdXRoCi0KLSMgc3RhcnQgc25tcHRyYXBkCi1TVEFSVFRSQVBECi0KLSMgZGVsYXkgdG8gbGV0IGl0IGNvbm5lY3QgYW5kIHJlZ2lzdGVyIGFsbCBNSUJzCi1ERUxBWQotCi0jIyB2ZXJpZnkgc25tcHRyYXBkIHVzbVVzZXJUYWJsZSBtYW5hZ2VtZW50Ci0KLVNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTPSItbiBzbm1wdHJhcGQgLUNFICRUUkFQRF9FTkdJTkVJRCIKLQotIyMgMSkgY3JlYXRlLCBjbG9uZSwgcGFzc3dkIGF1dGgsIHBhc3N3ZCBwcml2LCB0ZXN0Ci0KLSMgY3JlYXRlIHZhbmlsbGEgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUjIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgotCi0jIGNsb25lIHRlbXBsYXRlIHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RBVVRIQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIgJFRFU1RQUklWVVNFUiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCi0KLSMgY2hhbmdlIGF1dGggcGFzc3BocmFzZSBvZiBuZXcgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ2EgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RBVVRIUEFTUyAkTkVXQVVUSFBBU1MgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIGNoYW5nZSBwcml2IHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RQUklWQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUUFJJVlBBU1MgJE5FV1BSSVZQQVNTICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyB0ZXN0IChhbnApCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhbnAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fYW5wIgotREVMQVkKLUNIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FucCIKLQotIyB0ZXN0IChhcCkKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAiCi1ERUxBWQotQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYXAiCi0KLSMjIDIpIGNoYW5nZSBsb2NhbGl6ZWQgYXV0aCBrZXksIHRlc3QsIGNoYW5nZSBsb2NhbGl6ZWQgcHJpdiBrZXksIHRlc3QKLQotIyBjaGFuZ2UgbG9jYWxpemVkIGF1dGgga2V5Ci1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DYSAtQ2sgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV0FVVEhQQVNTICRORVdBVVRIS0VZICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyB0ZXN0IChhbnApCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhbnAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fYW5wMiIKLURFTEFZCi1DSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hbnAyIgotCi0jIGNoYW5nZSBsb2NhbGl6ZWQgcHJpdiBrZXkKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RQUklWQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUN4IC1DayAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXUFJJVlBBU1MgJE5FV1BSSVZLRVkgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIHRlc3QgKGFwKQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAteCAkREVGUFJJVlRZUEUgLTNLICRORVdQUklWS0VZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV9hcDIiCi1ERUxBWQotQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYXAyIgotCi0jIyAzKSBwZXJzaXN0ZW5jeSBJOiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdGVzdAotCi0jIHJlY29uZmlndXJlIHNubXB0cmFwZAotSFVQVFJBUEQKLQotIyB0ZXN0IChhcCkKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtM2sgJE5FV0FVVEhLRVkgLXggJERFRlBSSVZUWVBFIC0zSyAkTkVXUFJJVktFWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAzIgotREVMQVkKLUNIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwMyIKLQotIyMgc3RvcCBkYWVtb25zIGFuZCBmaW5pc2gKLVNUT1BUUkFQRAotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtIGIvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzYyZDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotREVGU0VDVVJJVFlMRVZFTD1ub0F1dGhOb1ByaXYKLQotSEVBREVSICJTTk1QdjMgaW5mb3JtcyAoJERFRlNFQ1VSSVRZTEVWRUwpIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzIgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nIHRlc3R1c2VyICRERUZTRUNVUklUWUxFVkVMCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgdGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJyZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoIGIvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI2N2ZmNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1ERUZTRUNVUklUWUxFVkVMPWF1dGhOb1ByaXYKLQotSEVBREVSICJTTk1QdjMgaW5mb3JtcyAoJERFRlNFQ1VSSVRZTEVWRUwpIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzIgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1RBVVRIVVNFUiAkREVGU0VDVVJJVFlMRVZFTAotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAkVEVTVEFVVEhBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYgYi90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJmMmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLURFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKLQotSEVBREVSICJTTk1QdjMgaW5mb3JtcyAoJERFRlNFQ1VSSVRZTEVWRUwpIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzIgotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0uIC4vU3YzdXNtY29uZmlndHJhcGQKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVFBSSVZVU0VSICRERUZTRUNVUklUWUxFVkVMCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOWQxNTEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyB0cmFwcyByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scwotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DUkVBVEVVU0VSRU5HSU5FSUQ9MHg4MDAwMWY4ODgwMmIzZDBlMDZiYmRmNDMyMQotLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1ROT0FVVEhVU0VSIG5vQXV0aE5vUHJpdgotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUQVVUSFVTRVIgYXV0aE5vUHJpdgotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUUFJJVlVTRVIgYXV0aFByaXYKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUTk9BVVRIQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF90cmFwX25hbnAiCi1ERUxBWQotQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVEFVVEhBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX3RyYXBfYW5wIgotREVMQVkKLUNBUFRVUkUgInNubXB0cmFwIC1kIC1lICRDUkVBVEVVU0VSRU5HSU5FSUQgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF90cmFwX2FwIgotREVMQVkKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfbmFucCIKLUNIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfYW5wIgotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfdHJhcF9hcCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwIGIvdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGEzMTIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIHRyYXBzIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgdGVzdGNvbW11bml0eQotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1kIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImNvbGRTdGFydCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0gYi90ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDY0ZGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0KKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIGluZm9ybXMgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyB0ZXN0Y29tbXVuaXR5Ci1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgIlJlY2VpdmVkIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyNWM1Mi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB2MSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCBBUEkKLQotU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjNjb25maWcKLUNPTkZJR0FHRU5UIHRyYXBzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYwotCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyxhZGRfdHJhcCIKLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuNy4wIGkgMSIKLQotU1RPUEFHRU5UCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJFbnRlcnByaXNlIFNwZWNpZmljIFRyYXAgKDk5KSIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4NWRjOS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdjJjIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIEFQSQotCi1TS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2M2NvbmZpZwotQ09ORklHQUdFTlQgdHJhcDJzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYwotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLVNUQVJUQUdFTlQKLQotI0RFTEFZCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAtdCAzIC1yIDAgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuOC4wIGkgMSIKLQotU1RPUEFHRU5UCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwIGIvdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NjM2YTcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdjEgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQgd2l0aG91dCBub3RpZmljYXRpb24gbWliIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjNjb25maWcKLUNPTkZJR0FHRU5UIHRyYXBzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYwotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotIyBpbml0aWFsaXplIG9ubHkgdGhlIGV4YW1wbGUgbWliLCBhbmQgbm90IHRoZSBub3RpZmljYXRpb24gbWliIHN0dWZmCi1BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyxhZGRfdHJhcCxtaWJfaW5pdCxjYWxsYmFjayAtSSBleGFtcGxlLHVzbVVzZXIsdXNtQ29uZix2YWNtX3ZhcnMiCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjcuMCBpIDEiCi0KLVNUT1BBR0VOVAotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiRW50ZXJwcmlzZSBTcGVjaWZpYyBUcmFwICg5OSkiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzIxM2YuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHYyYyB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCB3aXRob3V0IG5vdGlmaWNhdGlvbiBtaWIgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2M2NvbmZpZwotQ09ORklHQUdFTlQgdHJhcDJzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYwotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotIyBpbml0aWFsaXplIG9ubHkgdGhlIGV4YW1wbGUgbWliLCBhbmQgbm90IHRoZSBub3RpZmljYXRpb24gbWliIHN0dWZmCi1BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyxhZGRfdHJhcCxtaWJfaW5pdCxjYWxsYmFjayAtSSBleGFtcGxlLHVzbVVzZXIsdXNtQ29uZix2YWNtX3ZhcnMiCi1TVEFSVEFHRU5UCi0KLSNERUxBWQotQ0FQVFVSRSAic25tcHNldCAtT24gLXQgMyAtciAwICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjguMCBpIDEiCi0KLVNUT1BBR0VOVAotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0IGIvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM2OWZhZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHRyYXBkIGF1dGhvcml6YXRpb24gZmFpbHVyZSBvZiBub24gYXV0aG9yaXplZCB1c2VycwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nIHRlc3R1c2VyIG5vQXV0aE5vUHJpdgotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11IG5vdHRlc3R1c2VyIC1sIG5hbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImNvbGRTdGFydCIKLUVYUEVDVFJFU1VMVCAwCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyIGIvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1YTAyY2YuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdHJhcGQgZGlzY2FyZHMgb2YgdW5hdXRob3JpemVkIG5vdGlmaWNhdGlvbiB0eXBlcyAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyB0ZXN0dXNlciBub0F1dGhOb1ByaXYgLjEuMy42LjEuNi4zLjEuMS41LjIKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJjb2xkU3RhcnQiCi1FWFBFQ1RSRVNVTFQgMAotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MyBiL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2NiNWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHRyYXBkIGRpc2NhcmRzIG9mIGluY29ycmVjdCB2aWV3IHR5cGVzIAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgotQ09ORklHVFJBUEQgYXV0aHVzZXIgZXhlY3V0ZSB0ZXN0dXNlciBub0F1dGhOb1ByaXYKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJjb2xkU3RhcnQiCi1FWFBFQ1RSRVNVTFQgMAotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwIGIvdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JlM2E3Yi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgYXV0aGVudGljYXRpb24gZmFpbHVyZSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YxY29uZmlnCi0jIGFkZCBpbiBhIHYxIHRyYXAgc2luawotQ09ORklHQUdFTlQgdHJhcHNpbmsgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgcHVibGljCi1DT05GSUdBR0VOVCBhdXRodHJhcGVuYWJsZSAxCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1TVEFSVEFHRU5UCi0KLSMgZ2l2ZSB0aGUgYWdlbnQgbW9yZSB0aW1lIHRvIHN0YXJ0IHVwLiAgV2Ugb25seSB3YW50IHRvIGZpcmUgb25lCi0jIHJlcXVlc3QgKHJldHJpZXMgPSAwKSB0byBtYWtlIHN1cmUgb25seSBvbmUgdHJhcCBpcyBzZW50LgotI0RFTEFZCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAtciAwIC10IDUgJFNOTVBfRkxBR1MgLXYgMSAtYyB3cm9uZ2NvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJBdXRoZW50aWNhdGlvbiBGYWlsdXJlIFRyYXAiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUgYi90ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM2NTc0OTQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1UUkFQSEFORExFX0xPR0ZJTEU9JHtTTk1QX1RNUERJUn0vdHJhcGhhbmRsZS5sb2cKLQotIyAiaW5saW5lIiB0cmFwIGhhbmRsZXIKLWlmIFsgIngkMiIgPSAieHRyYXBoYW5kbGUiIF07IHRoZW4KLSAgY2F0IC0gPj4kVFJBUEhBTkRMRV9MT0dGSUxFCi0gIGV4aXQgMAotZmkKLQotSEVBREVSIHNubXB0cmFwZCB0cmFwaGFuZGxlOiBsYXVuY2hpbmcgZXh0ZXJuYWwgc2hlbGwgc2NyaXB0Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0KLUNPTkZJR1RSQVBEIFtzbm1wXSBwZXJzaXN0ZW50RGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi1DT05GSUdUUkFQRCBbc25tcF0gdGVtcEZpbGVQYXR0ZXJuIC90bXAvc25tcGQtdG1wLVhYWFhYWAotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBleGVjdXRlICRURVNUQ09NTVVOSVRZCi1DT05GSUdUUkFQRCBkb05vdExvZ1RyYXBzIHRydWUKLUNPTkZJR1RSQVBEIHRyYXBoYW5kbGUgZGVmYXVsdCAkMCAkMSB0cmFwaGFuZGxlCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotIyMgMSkgdGVzdCBub3RpZmljYXRpb24gaGFuZGxlcgotCi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtQ2kgLXQgJFNOTVBfU0xFRVAgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgaGFuZGxlZF9pbmZvcm1fJHNubXBfdmVyc2lvbiIKLURFTEFZCi1DSEVDS09SRElFICJoYW5kbGVkX2luZm9ybV8kc25tcF92ZXJzaW9uIiAkVFJBUEhBTkRMRV9MT0dGSUxFIAotCi0jIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRlc3QKLQotSFVQVFJBUEQKLUNBUFRVUkUgInNubXB0cmFwIC1kIC1DaSAtdCAkU05NUF9TTEVFUCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBoYW5kbGVkX2luZm9ybTJfJHNubXBfdmVyc2lvbiIKLURFTEFZCi1DSEVDS09SRElFICJoYW5kbGVkX2luZm9ybTJfJHNubXBfdmVyc2lvbiIgJFRSQVBIQU5ETEVfTE9HRklMRQotCi0jIyBzdG9wCi1TVE9QVFJBUEQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCBiL3Rlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjNhNmY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAnc25tcHRyYXBkIGVtYmVkZGVkIHBlcmwgc3VwcG9ydCAoTmV0U05NUDo6VHJhcFJlY2VpdmVyKScKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgTkVUU05NUF9FTUJFRERFRF9QRVJMCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLVRFU1RPSUQ9LjEuMy42LjEuNi4zLjEuMS41LjEKLVRFU1RPSUQyPS4xLjMuNi4xLjYuMy4xLjEuNS4yCi1FTUJQRVJMX0xPR0ZJTEU9JHtTTk1QX1RNUERJUn0vZW1icGVybC5sb2cKLQotZWNobyAidXNlIGJsaWIgcXcoJHtTTk1QX1VQRElSfS9wZXJsKTsiID4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsX3RyYXBkLnBsCi1lY2hvICJ1c2UgTmV0U05NUDo6VHJhcFJlY2VpdmVyOyIgPj4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsX3RyYXBkLnBsCi0KLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgZXhlY3V0ZSAkVEVTVENPTU1VTklUWQotQ09ORklHVFJBUEQgcGVybEluaXRGaWxlICR7U05NUF9UTVBESVJ9L3NubXBfcGVybF90cmFwZC5wbAotQ09ORklHVFJBUEQgJ3Blcmwgc3ViIG15X3JlY2VpdmVyIHsgb3BlbiBMT0csIj4+JyRFTUJQRVJMX0xPR0ZJTEUnIjsgcHJpbnQgTE9HICJoYW5kbGVkX2J5X2VtYnBlcmwiOyBjbG9zZSBMT0cgfTsnCi1DT05GSUdUUkFQRCAncGVybCBzdWIgbXlfcmVjZWl2ZXIyIHsgb3BlbiBMT0csIj4+JyRFTUJQRVJMX0xPR0ZJTEUnIjsgcHJpbnQgTE9HICJoYW5kbGVkX2FnYWluX2J5X2VtYnBlcmwiOyBjbG9zZSBMT0cgfTsnCi1DT05GSUdUUkFQRCAncGVybCBOZXRTTk1QOjpUcmFwUmVjZWl2ZXI6OnJlZ2lzdGVyKCInJFRFU1RPSUQnIiwgXCZteV9yZWNlaXZlcikgfHwgd2FybiAicmVnaXN0ZXJfcGVybF9oYW5kbGVyX2ZhaWxlZCI7JwotQ09ORklHVFJBUEQgJ3BlcmwgTmV0U05NUDo6VHJhcFJlY2VpdmVyOjpyZWdpc3RlcigiJyRURVNUT0lEMiciLCBcJm15X3JlY2VpdmVyMikgfHwgd2FybiAicmVnaXN0ZXJfc2Vjb25kX3BlcmxfaGFuZGxlcl9mYWlsZWQiOycKLUNPTkZJR1RSQVBEICdwZXJsIHByaW50IFNUREVSUiAicmVnaXN0ZXJlZF9wZXJsX2hhbmRsZXJfb2siOycKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi0jIyAxKSB0cmlnZ2VyIGVtYmVkZGVkIHBlcmwgbm90aWZpY2F0aW9uIGhhbmRsZXIKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgJFRFU1RPSUQgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGhhbmRsZWRfdHJhcF8kc25tcF92ZXJzaW9uIgotCi0jIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRyaWdnZXIKLQotSFVQVFJBUEQKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwICRURVNUT0lEMiBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgaGFuZGxlZF90cmFwMl8kc25tcF92ZXJzaW9uIgotCi0jIyBzdG9wCi1TVE9QVFJBUEQKLQotCi1DSEVDS09SRElFICJoYW5kbGVkX2J5X2VtYnBlcmwiICAgICAgICRFTUJQRVJMX0xPR0ZJTEUKLUNIRUNLT1JESUUgImhhbmRsZWRfYWdhaW5fYnlfZW1icGVybCIgJEVNQlBFUkxfTE9HRklMRQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsIGIvdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyN2U1YjMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICdzbm1wZCBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgKHVzaW5nIE5ldFNOTVA6OmFnZW50KScKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgTkVUU05NUF9FTUJFRERFRF9QRVJMCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVRFU1RPSUQ9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjEuMAotVEVTVE9JRDI9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjIuMAotRU1CUEVSTF9BR0VOVD0ke1NOTVBfVE1QRElSfS9oZWxsby5wbAotY2F0ID4kRU1CUEVSTF9BR0VOVCA8PEVORAotIyEvdXNyL2Jpbi9lbnYgcGVybAotIyBtaW5pbWFsIGVtYmVkZGVkIHBlcmwgYWdlbnQKLQotbXkgXCRyZWdhdCA9ICcuMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTknOyAjIG5ldFNubXBQbGF5UGVuCi1teSBcJG15b2lkID0gXCRyZWdhdCAuICIuMS4wIjsgIyB0aGUgImhlbGxvIHdvcmxkIiBPSUQKLW15IFwkbXlvaWQyID0gXCRyZWdhdCAuICIuMi4wIjsgIyB0aGUgImhlbGxvIGFnYWluIHdvcmxkIiBPSUQKLQotdXNlIE5ldFNOTVA6Ok9JRCBxdyg6YWxsKTsKLXVzZSBOZXRTTk1QOjphZ2VudCBxdyg6YWxsKTsKLXVzZSBOZXRTTk1QOjpBU04gcXcoOmFsbCk7Ci11c2UgU05NUDsKLQotbXkgXCRyZWdvaWQgPSBuZXcgTmV0U05NUDo6T0lEKFwkcmVnYXQpOwotXCRhZ2VudC0+cmVnaXN0ZXIoImhlbGxvIiwgXCRyZWdvaWQsIFwmbXlfc25tcF9oYW5kbGVyKTsKLQotc3ViIG15X3NubXBfaGFuZGxlciB7Ci0gIG15IChcJGhhbmRsZXIsIFwkcmVnaXN0cmF0aW9uX2luZm8sIFwkcmVxdWVzdF9pbmZvLCBcJHJlcXVlc3RzKSA9IEBfOwotICBmb3IobXkgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0czsgXCRyZXF1ZXN0OyBcJHJlcXVlc3QgPSBcJHJlcXVlc3QtPm5leHQoKSkgewotICAgIGlmIChcJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUKSB7Ci0gICAgICBpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQpKSB7Ci0gICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIHdvcmxkIik7Ci0gICAgICAgIGxhc3Q7Ci0gICAgICB9IGVsc2lmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZDIpKSB7Ci0gICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIGFnYWluIHdvcmxkIik7Ci0gICAgICAgIGxhc3Q7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci1FTkQKLQotZWNobyAidXNlIGJsaWIgcXcoJHtTTk1QX1VQRElSfS9wZXJsKTsiID4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCi1lY2hvICd1c2UgTmV0U05NUDo6YWdlbnQ7JyA+PiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKLWVjaG8gJyRhZ2VudCA9IG5ldyBOZXRTTk1QOjphZ2VudCgnIidkb250X2luaXRfYWdlbnQnID0+IDEsICdkb250X2luaXRfbGliJyA9PiAxKTsiID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAotCi1DT05GSUdBR0VOVCBwZXJsSW5pdEZpbGUgJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCi1DT05GSUdBR0VOVCAicGVybCBkbyAnJEVNQlBFUkxfQUdFTlQnOyIKLUNPTkZJR0FHRU5UICdwZXJsIHByaW50IFNUREVSUiAicmVnaXN0ZXJlZF9wZXJsX2FnZW50X29rIjsnCi0KLSMgbWFrZSBzdXJlIHRoYXQgTmV0U05NUDo6YWdlbnQncyBhZ2VudC5zbyBjYW4gbG9hZCAodW5pbnN0YWxsZWQpIGxpYm5ldHNubXAqLnNvCi1fbGRfbGliX3BhdGg9IiR7U05NUF9VUERJUn0vc25tcGxpYi8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50Ly5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvaGVscGVycy8ubGlicyIKLWlmIFsgIngkTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0xEX0xJQlJBUllfUEFUSH0iCi1lbHNlCi0gIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkgCi1pZiBbICJ4JERZTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7RFlMRF9MSUJSQVJZX1BBVEh9IgotZWxzZQotICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkgCi1pZiBbICJ4JFNITElCX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke1NITElCX1BBVEh9IgotZWxzZQotICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maSAKLWV4cG9ydCBMRF9MSUJSQVJZX1BBVEggRFlMRF9MSUJSQVJZX1BBVEggU0hMSUJfUEFUSAotCi1TVEFSVEFHRU5UCi0KLSMjIDEpIFNOTVAgR0VUIGFnYWluc3QgZW1iZWRkZWQgcGVybCBtaWIgbW9kdWxlCi1DQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQiCi1DSEVDSyAiaGVsbG8gd29ybGQiCi0KLSMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSAoSFVQKSwgcmUtdGVzdAotSFVQQUdFTlQKLUNBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRDIiCi1DSEVDSyAiaGVsbG8gYWdhaW4gd29ybGQiCi0KLSMjIHN0b3AKLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQgYi90ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3ZjU4Zi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIGV4dGVuZCIKLQotWyAieCRPU1RZUEUiID0geG1zeXMgLWEgIngkTVNZU19TSCIgPSB4IF0gJiYgU0tJUCAiXCRNU1lTX1NIIGhhcyBub3QgYmVlbiBzZXQiCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19BR0VOVF9FWFRFTkRfTU9EVUxFCi0KLSMgbWFrZSBzdXJlIHNubXBnZXQgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QR0VUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcGdldCIKLVsgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHQUdFTlQgZXh0ZW5kIGhlbGxvIC91c3IvYmluL2VudiBlY2hvIGhlbGxvX3dvcmxkCi0KLVNUQVJUQUdFTlQKLQotIyBORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dHB1dDFMaW5lLiJoZWxsbyIgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMS5cImhlbGxvXCIiCi1DSEVDS09SRElFICJoZWxsb193b3JsZCIKLQotI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0cHV0RnVsbC4iaGVsbG8iID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4yLlwiaGVsbG9cIiIKLUNIRUNLT1JESUUgImhlbGxvX3dvcmxkIgotCi0jTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRMaW5lLiJoZWxsbyIuMSA9IFNUUklORzogImhlbGxvX3dvcmxkIgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi40LjEuMi5cImhlbGxvXCIuMSIKLUNIRUNLT1JESUUgImhlbGxvX3dvcmxkIgotCi0jTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXROdW1MaW5lcy4iaGVsbG8iID0gSU5URUdFUjogMQotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMy5cImhlbGxvXCIiCi1DSEVDS09SRElFICJJTlRFR0VSOiAxIgotCi0jTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRSZXN1bHQuImhlbGxvIiA9IElOVEVHRVI6IDAKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjQuXCJoZWxsb1wiIgotQ0hFQ0tPUkRJRSAiSU5URUdFUjogMCIKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDY2cGFzc19zaW1wbGUgYi90ZXN0aW5nL3Rlc3RzL1QwNjZwYXNzX3NpbXBsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFiMTRjMC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjZwYXNzX3NpbXBsZQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIHBhc3MiCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BBU1NfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCi0KLSMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBvbiBNaW5HVyAtIGxvY2FsL3Bhc3N0ZXN0IGlzIGEgc2hlbGwgc2NyaXB0IGFuZAotIyBoZW5jZSBwYXNzaW5nIGl0IHRvIHRoZSBNU1ZDUlQgcG9wZW4oKSBkb2Vzbid0IHdvcmsuCi1bICJ4JE9TVFlQRSIgPSAieG1zeXMiIF0gJiYgU0tJUCAiTWluR1ciCi0KLSMgbWFrZSBzdXJlIHNubXBnZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAotU05NUEdFVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBnZXQiCi1bIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQCi1TTk1QV0FMSz0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXB3YWxrIgotWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLW9pZD0uMS4zLjYuMS40LjEuODA3Mi4yLjI1NSAgIyBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NFeGFtcGxlcwotQ09ORklHQUdFTlQgcGFzcyAkb2lkICR7U05NUF9CQVNFRElSfS8uLi9sb2NhbC9wYXNzdGVzdAotCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUR1Y2Qtc25tcC9wYXNzIgotU1RBUlRBR0VOVAotCi0jQ09NTUVOVCBDaGVjayBhIGZ1bGwgd2FsayBvZiB0aGUgc2FtcGxlIGRhdGEKLUNBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRvaWQiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NTdHJpbmcuMCA9IFNUUklORzogTGlmZSwgdGhlIFVuaXZlcnNlLCBhbmQgRXZlcnl0aGluZyIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSA9IElOVEVHRVI6IDQyIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lELjEgPSBPSUQ6IE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRFZhbHVlIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzVGltZVRpY2tzLjAgPSBUaW1ldGlja3M6ICgzNjMxMzYyMDApIDQyIGRheXMsIDA6NDI6NDIuMDAgIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSXBBZGRyZXNzLjAgPSBJcEFkZHJlc3M6IDEyNy4wLjAuMSIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCA9IENvdW50ZXIzMjogNDIiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NHYXVnZS4wID0gR2F1Z2UzMjogNDIiCi0KLSNDT01NRU5UIEEgY291cGxlIG9mIHNwb3QgY2hlY2tzIG9mIEdFVCByZXF1ZXN0cy4KLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xIgotQ0hFQ0tPUkRJRSAiSU5URUdFUjogNDIiCi0KLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgotQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiA0MiIKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlIGIvdGVzdGluZy90ZXN0cy9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzY2YTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIHBhc3NfcGVyc2lzdCIKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUEFTU19QRVJTSVNUX01PRFVMRQotWyAteCAvdXNyL2Jpbi9wZXJsIF0gfHwgU0tJUCAvdXNyL2Jpbi9wZXJsCi0KLSMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBvbiBNaW5HVyAtIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3QgaXMgYSBzaGVsbCBzY3JpcHQgYW5kCi0jIGhlbmNlIHBhc3NpbmcgaXQgdG8gdGhlIE1TVkNSVCBwb3BlbigpIGRvZXNuJ3Qgd29yay4KLVsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXSAmJiBTS0lQICJNaW5HVyIKLQotIyBtYWtlIHN1cmUgc25tcGdldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QR0VUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcGdldCIKLVsgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAKLVNOTVBXQUxLPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcHdhbGsiCi1bIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUAotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotb2lkPS4xLjMuNi4xLjQuMS44MDcyLjIuMjU1ICAjIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0V4YW1wbGVzCi1DT05GSUdBR0VOVCBwYXNzX3BlcnNpc3QgJG9pZCAke1NOTVBfQkFTRURJUn0vLi4vbG9jYWwvcGFzc19wZXJzaXN0dGVzdAotCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUR1Y2Qtc25tcC9wYXNzX3BlcnNpc3QiCi1QQVNTX1BFUlNJU1RfUElERklMRT0iJFNOTVBfVE1QRElSL3Bhc3NfcGVyc2lzdC5waWQuJCQiCi1leHBvcnQgUEFTU19QRVJTSVNUX1BJREZJTEUKLVNUQVJUQUdFTlQKLQotI0NPTU1FTlQgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgdGhlIHNhbXBsZSBkYXRhCi1DQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkb2lkIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzU3RyaW5nLjAgPSBTVFJJTkc6IExpZmUsIHRoZSBVbml2ZXJzZSwgYW5kIEV2ZXJ5dGhpbmciCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEgPSBJTlRFR0VSOiA0MiIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRC4xID0gT0lEOiBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSURWYWx1ZSIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1RpbWVUaWNrcy4wID0gVGltZXRpY2tzOiAoMzYzMTM2MjAwKSA0MiBkYXlzLCAwOjQyOjQyLjAwICIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0lwQWRkcmVzcy4wID0gSXBBZGRyZXNzOiAxMjcuMC4wLjEiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAgPSBDb3VudGVyMzI6IDEiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NHYXVnZS4wID0gR2F1Z2UzMjogNDIiCi0KLSNDT01NRU5UIEEgY291cGxlIG9mIHNwb3QgY2hlY2tzIG9mIEdFVCByZXF1ZXN0cy4KLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xIgotQ0hFQ0tPUkRJRSAiSU5URUdFUjogNDIiCi0KLSNDT01NRU5UIG5ldFNubXBQYXNzQ291bnRlciBzaG91bGQgaW5jcmVtZW50LCBzaW5jZSB0aGlzIGlzIHBhc3NfcGVyc2lzdAotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCi1DSEVDS09SRElFICJDb3VudGVyMzI6IDIiCi0KLSNDT01NRU5UIG5vdyBraWxsIHRoZSBwYXNzX3BlcnNpc3Qgc2NyaXB0LCBhbmQgY2hlY2sgdGhhdCBpdCByZWNvdmVycy4KLVNUT1BQUk9HICRQQVNTX1BFUlNJU1RfUElERklMRQotI0NPTU1FTlQgbmV0U25tcFBhc3NDb3VudGVyIHNob3VsZCBoYXZlIHJldmVydGVkIHRvIDEsIGFzIHRoaXMgaXMgYSBuZXcgaW5zdGFuY2UuCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKLUNIRUNLT1JESUUgIkNvdW50ZXIzMjogMSIKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDY4ZXhlY2ZpeCBiL3Rlc3RpbmcvdGVzdHMvVDA2OGV4ZWNmaXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTIwNmUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDY4ZXhlY2ZpeAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMhL2Jpbi9zaAotCi1IRUFERVIgImV4ZWNmaXggY29uZmlndXJhdGlvbiBkaXJlY3RpdmUiCi0KLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMgbWFrZSBzdXJlIHNubXBzZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAotU05NUFNFVD0iJHtidWlsZGRpcn0vYXBwcy9zbm1wc2V0IgotWyAteCAiJFNOTVBTRVQiIF0gfHwgU0tJUCBzbm1wc2V0IG5vdCBjb21waWxlZAotU05NUFdBTEs9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHdhbGsiCi1bIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUCBzbm1wd2FsayBub3QgY29tcGlsZWQKLQotc25tcF92ZXJzaW9uPXYyYwotc25tcF93cml0ZV9hY2Nlc3M9J2FsbCcKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi1pZiBbICJ4JE9TVFlQRSIgPSB4bXN5cyBdOyB0aGVuCi0gICAgY21kMT0idHJ1ZSIKLSAgICBjbWQyPSJmYWxzZSIKLSAgICBlY2hvPSJlY2hvIgotZWxzZQotICAgIGNtZDE9IiQod2hpY2ggdHJ1ZSkiCi0gICAgY21kMj0iJCh3aGljaCBmYWxzZSkiCi0gICAgZWNobz0iJCh3aGljaCBlY2hvKSIKLWZpCi1DT05GSUdBR0VOVCBleGVjICAgIHRydWUtY29tbWFuZCAgICAkY21kMQotQ09ORklHQUdFTlQgZXhlY2ZpeCB0cnVlLWNvbW1hbmQgICAgJGNtZDEKLUNPTkZJR0FHRU5UIGV4ZWMgICAgZmFsc2UtY29tbWFuZCAgICRjbWQyCi1DT05GSUdBR0VOVCBleGVjZml4IGZhbHNlLWNvbW1hbmQgICAkY21kMgotQ09ORklHQUdFTlQgZXhlYyAgICBlY2hvLSVzLWNvbW1hbmQgJHtlY2hvfSAlcwotQ09ORklHQUdFTlQgZXhlY2ZpeCBlY2hvLSVzLWNvbW1hbmQgJHtlY2hvfSBmaXgtJXMKLQotU1RBUlRBR0VOVAotCi0jIENoZWNrIGEgZnVsbCB3YWxrIG9mIFVDRC1TTk1QLU1JQjo6ZXh0VGFibGUKLUNBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RW50cnkiCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4xID0gU1RSSU5HOiB0cnVlLWNvbW1hbmQkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4xID0gU1RSSU5HOiAnIiRjbWQxIgotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjEgPSBJTlRFR0VSOiAwJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4xID0gU1RSSU5HOiAkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjEgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4xID0gU1RSSU5HOiAnIiRjbWQxIgotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMiA9IFNUUklORzogZmFsc2UtY29tbWFuZCQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjIgPSBTVFJJTkc6ICciJGNtZDIiJyQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMiA9IElOVEVHRVI6IDEkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjIgPSBTVFJJTkc6ICQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMiA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjIgPSBTVFJJTkc6ICciJGNtZDIiJyQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4zID0gU1RSSU5HOiBlY2hvLSVzLWNvbW1hbmQkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyAlcyQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMyA9IElOVEVHRVI6IDAkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjMgPSBTVFJJTkc6ICVzJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zID0gSU5URUdFUjogbm9FcnJvcigwKSQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMyA9IFNUUklORzogJyIke2VjaG99IicgZml4LSVzJCcKLQotQ0FQVFVSRSAiJFNOTVBTRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgLXIwICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyBpIDEiCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyA9IElOVEVHRVI6IHJ1bkZpeCgxKScKLQotQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFbnRyeSIKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyBmaXgtJXMnCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwIGIvdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDUwNWVmYjQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiB0aGF0IHRoZSBhZ2VudCByZXNwb25kcyBwcm9wZXJseSB0byBhIGtpbGwgLUhVUAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi1TS0lQSUZOT1QgSEFWRV9TSUdOQUwKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLSMgYWRkIGEgYWdlbnQgY29uZmlndXJhdGlvbiBsaW5lIHRoYXQgd291bGRuJ3QgaGF2ZSBiZWVuIHRoZXJlIHdoZW4KLSMgdGhlIHN0YXJ0ZWQgdXAuCi1DT05GSUdBR0VOVCBzeXNsb2NhdGlvbiBub3QtYW55d2hlcmUtaW4tcGFydGljdWxhcgotCi0jIGtpbGwgLUhVUCB0aGUgYWdlbnQgdG8gZ2V0IGl0IHRvIHJlLXJlYWQgdGhlIC5jb25mIGZpbGUuCi1ERUxBWQota2lsbCAtSFVQIGBjYXQgJFNOTVBfU05NUERfUElEX0ZJTEVgID4gL2Rldi9udWxsIDI+JjEKLURFTEFZCi0KLSMgQW5kIHNlZSBpZiBpdCBoYXMgdGhlIG5ldyB2YWx1ZS4KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c3RlbS5zeXNMb2NhdGlvbi4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIm5vdC1hbnl3aGVyZS1pbi1wYXJ0aWN1bGFyIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0IGIvdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDkyODBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIEFnZW50WCBHRVQgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi1lbHNlCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLWZpCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKLQotaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgYWdlbnR4IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgotICBTVEFSVEFHRU5UCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCAzICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi1maQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0IGIvdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmNiYjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIEFnZW50WCBTRVQgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi1lbHNlCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLWZpCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIgLURBZ2VudFgiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLUNBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi1pZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCi0gIGVjaG8gInBzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQotICBTVEFSVEFHRU5UCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IHRlc3Rjb250YWN0IgotCi0gIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotCi0gICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgotICAgIENBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCBzIG5ld3Rlc3Rjb250YWN0IgotCi0gICAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogbmV3dGVzdGNvbnRhY3QiCi0KLSAgICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLQotCSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0JQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCQotCUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IG5ld3Rlc3Rjb250YWN0IgotICAgIGZpCi0gIGZpCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi1maQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkY2U3MjcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIEFnZW50WCBpbGxlZ2FsIFNFVCBoYW5kbGluZyBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLWVsc2UKLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotZmkKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiAtREFnZW50WCIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzdGVtLnN5c0NvbnRhY3QuMCIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi1pZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCi0gIFNUQVJUQUdFTlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0KLSAgIyB3ZSBkb24ndCBrbm93IHRoZSByZWFsIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LCBzbyB3ZSB0ZXN0IGZvciB3aGF0Ci0gICMgd2Ugc2hvdWxkICpub3QqIGdldCBiYWNrLgotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCi0KLSAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAwOyB0aGVuCi0KLSAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCi0gICAgQ0FQVFVSRSAic25tcHNldCAtT24gLUlyICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCBpIDQiCi0KLSAgICBDSEVDSyAid3JvbmdUeXBlIgotCi0gIGZpCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi1maQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YzNlZTEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIEFnZW50WCB0cmFwIHNlbmRpbmcgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhcnQgdGhlIHRyYXAgZGVtb24KLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotU1RBUlRUUkFQRAotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotIyBjb25maWd1cmUgdGhlIHRyYXAgcmVjZWl2ZXIuCi1DT05GSUdBR0VOVCB0cmFwc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIGV4YW1wbGUgbWliLgotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi1lbHNlCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLWZpCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLWV4YW1wbGUiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4YW1wbGUgbWliCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjEuMCIKLQotQ0hFQ0sgIk5vIFN1Y2ggT2JqZWN0IgotCi1pZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgZXhhbXBsZSAtRGFkZCIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCi0KLSAgU1RBUlRBR0VOVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBleGFtcGxlIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjEuMCIKLQotICBDSEVDSyAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCi0KLSAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0KLSAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzZW5kcyBhIHRyYXAgZnJvbSB0aGUgZXhtYXBsZSBtaWIKLSAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtciAwIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuOC4wIGkgMSIKLSAgICBERUxBWQotICAgIENIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgotCi0gIGZpCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi1maQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgc3RvcCB0aGUgdHJhcCBkZW1vbgotU1RPUFRSQVBECi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCBiL3Rlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDlkYTI0ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAnQWdlbnRYIHN1YmFnZW50IGluIFBlcmwgKHVzaW5nIE5ldFNOTVA6OmFnZW50KScKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0jIG1ha2Ugc3VyZSB0aGUgdG9vbGtpdCBoYXMgYmVlbiBjb25maWd1cmVkIC0td2l0aC1wZXJsLW1vZHVsZXMKLVsgLWQgJHtTTk1QX1VQRElSfS9wZXJsL2JsaWIvYXJjaC9hdXRvL05ldFNOTVAvYWdlbnQgXSB8fCBTS0lQCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVRFU1RPSUQ9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjEuMAotVEVTVE9JRDI9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjIuMAotQUdFTlRYX1NPQ0tFVD0ke1NOTVBfVE1QRElSfS9hZ2VudHhfc29ja2V0Ci1QRVJMX1NVQkFHRU5UPSR7U05NUF9UTVBESVJ9L2hlbGxvLnBsCi1QRVJMX1NVQkFHRU5UX0NPTkY9JHtTTk1QX1RNUERJUn0vaGVsbG8uY29uZgotCi1jYXQgPiRQRVJMX1NVQkFHRU5UIDw8RU5ECi0jISR7U05NUF9QRVJMUFJPR30KLSMgbWluaW1hbCBBZ2VudFggc3ViYWdlbnQgaW4gUGVybAotCi11c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOwotdXNlIE5ldFNOTVA6Ok9JRCBxdyg6YWxsKTsKLXVzZSBOZXRTTk1QOjphZ2VudCBxdyg6YWxsKTsKLXVzZSBOZXRTTk1QOjpBU04gcXcoOmFsbCk7Ci11c2UgTmV0U05NUDo6YWdlbnQ6OmRlZmF1bHRfc3RvcmU7Ci11c2UgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZSBxdyg6YWxsKTsKLXVzZSBTTk1QOwotCi0jIyBkb3VibGUtZm9yayBkYWVtb24KLW15IFwkcGlkOwotdW5sZXNzIChcJHBpZCA9IGZvcmspIHsKLSAgdW5sZXNzIChmb3JrKSB7Ci0gICAgIyMgc3RhcnQgbWFpbiBjb2RlCi0gICAgbXkgXCRyZWdhdCA9ICcuMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTknOyAjIG5ldFNubXBQbGF5UGVuCi0gICAgbXkgXCRteW9pZCA9IFwkcmVnYXQgLiAiLjEuMCI7ICMgdGhlICJoZWxsbyB3b3JsZCIgT0lECi0gICAgbXkgXCRteW9pZDIgPSBcJHJlZ2F0IC4gIi4yLjAiOyAjIHRoZSAiaGVsbG8gYWdhaW4gd29ybGQiIE9JRAotCi0gICAgbXkgXCRwaWRmaWxlID0gc2hpZnQ7ICMgdGFrZSBQSUQgZmlsZSBhcyBmaXJzdCBhcmd1bWVudCAKLSAgICBvcGVuKFBJREZJTEUsICI+XCRwaWRmaWxlIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIFwkcGlkZmlsZSI7Ci0gICAgcHJpbnQgUElERklMRSBcJFwkOwotICAgIGNsb3NlKFBJREZJTEUpOwotCi1zdWIgbXlfc25tcF9oYW5kbGVyIHsKLSAgbXkgKFwkaGFuZGxlciwgXCRyZWdpc3RyYXRpb25faW5mbywgXCRyZXF1ZXN0X2luZm8sIFwkcmVxdWVzdHMpID0gQF87Ci0gIGZvcihteSBcJHJlcXVlc3QgPSBcJHJlcXVlc3RzOyBcJHJlcXVlc3Q7IFwkcmVxdWVzdCA9IFwkcmVxdWVzdC0+bmV4dCgpKSB7Ci0gICAgaWYgKFwkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVQpIHsKLSAgICAgIGlmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZCkpIHsKLSAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gd29ybGQiKTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0gZWxzaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkMikpIHsKLSAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gYWdhaW4gd29ybGQiKTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLXN1YiBzaHV0X2l0X2Rvd24geyBcJHJ1bm5pbmcgPSAwOyB9Ci0KLSAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTLCAxKTsKLSAgICBteSBcJGFnZW50ID0gbmV3IE5ldFNOTVA6OmFnZW50KCdOYW1lJyA9PiAnaGVsbG8nLCAnQWdlbnRYJyA9PiAxKTsKLSAgICBteSBcJHJlZ29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoXCRyZWdhdCk7Ci0gICAgXCRhZ2VudC0+cmVnaXN0ZXIoImhlbGxvIiwgXCRyZWdvaWQsIFwmbXlfc25tcF9oYW5kbGVyKTsKLQotICAgIFwkU0lHeydJTlQnfSA9IFwmc2h1dF9pdF9kb3duOwotICAgIFwkU0lHeydRVUlUJ30gPSBcJnNodXRfaXRfZG93bjsKLSAgICBcJHJ1bm5pbmcgPSAxOwotICAgIHdoaWxlKFwkcnVubmluZykgewotICAgICAgXCRhZ2VudC0+YWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMSk7Ci0gICAgfQotICAgIFwkYWdlbnQtPnNodXRkb3duKCk7Ci0gICAgIyMgZW5kIG1haW4gY29kZQotICAgIGV4aXQgMDsKLSAgfQotICBleGl0IDA7Ci19Ci13YWl0cGlkKFwkcGlkLCAwKTsKLUVORAotCi1lY2hvICJhZ2VudHhzb2NrZXQgJEFHRU5UWF9TT0NLRVQiID4gJFBFUkxfU1VCQUdFTlRfQ09ORgotCi1DT05GSUdBR0VOVCBtYXN0ZXIgYWdlbnR4Ci1DT05GSUdBR0VOVCBhZ2VudHhzb2NrZXQgJEFHRU5UWF9TT0NLRVQKLQotU1RBUlRBR0VOVAotCi0jIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBmdWxmaWxsIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcwotX2xkX2xpYl9wYXRoPSIke1NOTVBfVVBESVJ9L3NubXBsaWIvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50L2hlbHBlcnMvLmxpYnMiCi1pZiBbICJ4JExEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtMRF9MSUJSQVJZX1BBVEh9IgotZWxzZQotICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpCi1pZiBbICJ4JERZTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7RFlMRF9MSUJSQVJZX1BBVEh9IgotZWxzZQotICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkKLWlmIFsgIngkU0hMSUJfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7U0hMSUJfUEFUSH0iCi1lbHNlCi0gIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpCi1leHBvcnQgTERfTElCUkFSWV9QQVRIIERZTERfTElCUkFSWV9QQVRIIFNITElCX1BBVEgKLQotIyBzdGFydCBwZXJsIHN1YmFnZW50Ci0vdXNyL2Jpbi9lbnYgU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iICRTTk1QX1BFUkxQUk9HICRQRVJMX1NVQkFHRU5UICRTTk1QX0FHRU5UWF9QSURfRklMRSA+JFNOTVBfQUdFTlRYX0xPR19GSUxFIDI+JjEKLURFTEFZCi0KLSMjIDEpIFNOTVAgR0VUIGFnYWluc3QgbWliIG9iamVjdCBpbXBsZW1lbnRlZCBieSB0aGUgcGVybCBzdWJhZ2VudAotQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEIgotQ0hFQ0sgImhlbGxvIHdvcmxkIgotCi0jIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgbWFzdGVyIGFnZW50IChIVVApLCByZS10ZXN0Ci1IVVBBR0VOVAotQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEMiIKLUNIRUNLICJoZWxsbyBhZ2FpbiB3b3JsZCIKLQotIyMgc3RvcAotU1RPUEFHRU5UCi1TVE9QUFJPRyAkU05NUF9BR0VOVFhfUElEX0ZJTEUKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0IGIvdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMDE3N2IuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBQcm94eSBHRVQgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKLVsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXSAmJiBTS0lQCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotIyBjb25maWcgdGhlIHByb3h5Ci1DT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gc3lzdGVtCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIC1EcHJveHkiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLSNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLSNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCi0KLSNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgotICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQotICBBR0VOVF9GTEFHUz0kT1JJR19BR0VOVF9GTEFHUwotICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCi0gIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKLSAgU1RBUlRBR0VOVAotICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotI2ZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCBiL3Rlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzFjN2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgUHJveHkgU0VUIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLQotIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCi1bICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF0gJiYgU0tJUAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLSMgY29uZmlnIHRoZSBwcm94eQotQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IHN5c3RlbQotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiAtRHByb3h5IgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi0jQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi0jQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi0jaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKLSAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSAgZWNobyAicHN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRG1pYl9pbml0IgotICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCi0gIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKLSAgU1RBUlRBR0VOVAotICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IHRlc3Rjb250YWN0IgotCi0gIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotCi0gICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAgcyBuZXd0ZXN0Y29udGFjdCIKLQotICAgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IG5ld3Rlc3Rjb250YWN0IgotCi0gICAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0KLQkjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotCUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQkKLQlDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBuZXd0ZXN0Y29udGFjdCIKLSAgICBmaQotICBmaQotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotI2ZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlY2Y5YmYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgUHJveHkgaWxsZWdhbCBTRVQgaGFuZGxpbmcgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotCi0jIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKLVsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXSAmJiBTS0lQCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotIyBjb25maWcgdGhlIHByb3h5Ci1DT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gc3lzdGVtCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIC1EcHJveHkiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLSNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLSNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCi0KLSNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgotICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQotIyAgZWNobyAic3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EbWliX2luaXQiCi0gIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKLSAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgotICBTVEFSVEFHRU5UCi0gIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0KLSAgCi0gICMgd2UgZG9uJ3Qga25vdyB0aGUgcmVhbCB2YWx1ZSwgdW5mb3J0dW5hdGVseSwgc28gd2UgdGVzdCBmb3Igd2hhdAotICAjIHdlIHNob3VsZCAqbm90KiBnZXQgYmFjay4KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi0gIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMDsgdGhlbgotCi0gICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtSXIgJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIGkgNDIiCi0KLSAgICAjIDUuMC54IHNubXBzZXQgc2hvd3MgZXJyb3Igb24gc2luZ2xlIGxpbmUKLSAgICAjQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFdyb25nIFR5cGUiCi0gICAgIyA1LjEueCBzbm1wc2V0IHNob3dzIGVycm9yIG9uIG11bHRpcGxlIGxpbmVzCi0gICAgQ0hFQ0sgIlJlYXNvbjogd3JvbmdUeXBlIgotICAgIENIRUNLICJGYWlsZWQgb2JqZWN0OiAuMS4zLjYuMS4yLjEuMS40LjAiCi0KLSAgZmkKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLSNmaQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCBiL3Rlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYmRjNzEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MSB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKLSMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAotIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQotIyBUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKLXNubXBfdmVyc2lvbj12MQotLiAuL1N2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCBiL3Rlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQ4MWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCi0jIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKLSMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKLSMgVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCi0KLXNubXBfdmVyc2lvbj12MmMKLS4gLi9TdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKLQotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U5MzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgQ29uZmlndXJhdGlvbjoKLSNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCi0jaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCi0jVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCi0KLXNubXBfdmVyc2lvbj12MwotLiAuL1N2M3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDEgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwyIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIgCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTEwMDA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYxIHZhY20gZGVuaWFsIHN1cHBvcnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKLSMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAotIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQotIyBUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcwotCi1zbm1wX3ZlcnNpb249djEKLS4gLi9TdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0tPUkRJRSAiUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLiIKLQotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIgotCi1DSEVDS09SRElFICJSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuIgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJlZDMzNy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjIgdmFjbSBkZW5pYWwgc3VwcG9ydAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgotIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCi0jIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCi0jIFRoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCi0KLXNubXBfdmVyc2lvbj12MmMKLS4gLi9TdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKLUNIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCi1DSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0cndjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjUuMCA9IFNUUklORzogZHVtbXkiCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Ryb2NvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgotQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjdlYjljLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIHZhY20gZGVuaWFsIHN1cHBvcnQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgQ29uZmlndXJhdGlvbjoKLSNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCi0jaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCi0jVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKLQotc25tcF92ZXJzaW9uPXYzCi0uIC4vU3YzdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMSAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiIAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKLQotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDIgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUgYi90ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4ZTkzOS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIDFzdCBDUFUgb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUwotCi1pZiB0ZXN0ICJ4YHVuYW1lIC1zYCIgIT0gInhTdW5PUyIgOyB0aGVuCi0gICAgU0tJUAotZmkKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLVNLSVBJRk5PVCBVU0lOR19IT1NUX0hSX0RFVklDRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLSMgYXNrIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IENQVSBpbiB0aGUgc3lzdGVtCi0KLUNBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMy4yLjEuMy43NjciCi0KLUNIRUNLT1JESUUgIiA9IFNUUklORzogQ1BVICIKLQotU1RPUEFHRU5UCi0gIAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzayBiL3Rlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk4MTFmNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2sKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBpbml0aWFsIGxvYWQgZGV2aWNlIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKLQotaWYgdGVzdCBgdW5hbWUgLXNgICE9ICJTdW5PUyIgOyB0aGVuCi0gICAgIyBhIGJvZ3VzIHNraXAgZm9yICFzdW5zCi0gICAgU0tJUElGTk9UIFhYWFlZWVpaWgotZmkKLQotU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfU1lTVEVNX01PRFVMRQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLSMgYXNrIGZvciB0aGUgaW5kZXggb2YgdGhlIGluaXRpYWwgZGV2aWNlIChoclN5c3RlbUluaXRpYWxMb2FkRGV2aWNlLjApCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjEuMy4wID0gSU5URUdFUjoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lIGIvdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5MGQzZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgdXB0aW1lIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCi0KLVNLSVBJRk5PVCBVU0lOR19IT1NUX0hSX1NZU1RFTV9NT0RVTEUKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4xLjEuMCIKLQotU1RPUEFHRU5UCi0gICAgCi1DSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjEuMS4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAgYi90ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRlMmUzYy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHN3YXAgb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUwotCi1pZiB0ZXN0IGB1bmFtZSAtc2AgIT0gIlN1bk9TIiA7IHRoZW4KLSAgICAjIGEgYm9ndXMgc2tpcCBmb3IgIXN1bnMKLSAgICBTS0lQSUZOT1QgWFhYWVlZWlpaCi1maQotCi1TS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9TVE9SQUdFX01PRFVMRQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotIyBhc2sgZm9yIGhyU3RvcmFnZVNpemUuMTAgd2hpY2ggcmVwb3J0cyBvdmVyYWxsIHN3YXAgc2l6ZQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjIuMy4xLjUuMTAiCi0KLVNUT1BBR0VOVAotCi1DSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjIuMy4xLjUuMTAgPSBJTlRFR0VSOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0IGIvdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGU1NGMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLSMgc25tcG5ldHN0YXQgdGVzdCBvbmx5IHdvcmtzIHdpdGggVURQIG9yIFRDUAotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4IiAtbyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dWRwIiBdOyB0aGVuCi0gIHByb3RvPXVkcAotICBTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVURQVEFCTEVfTU9EVUxFCi1lbGlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXTsgdGhlbgotICBwcm90bz10Y3AKLSAgU0tJUElGTk9UIFVTSU5HX01JQklJX1RDUFRBQkxFX01PRFVMRQotZWxzZQotICBIRUFERVIgImlmIHNubXBuZXRzdGF0IGZpbmRzIHRoZSBydW5uaW5nIGFnZW50IGluIHVkcFRhYmxlL3RjcFRhYmxlIgotICBTS0lQCi1maQotCi1IRUFERVIgImlmIHNubXBuZXRzdGF0IGZpbmRzIHRoZSBydW5uaW5nIGFnZW50IGluICR7cHJvdG99VGFibGUiCi0KLSMgb24gc29tZSBzeXN0ZW1zIHRoZSBhZ2VudCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCB0byBhY2Nlc3MgdWRwVGFibGUvdGNwVGFibGUKLSMgLSBlbHNlIGZvcmNlIHNraXAKLWNhc2UgInhgdW5hbWUgLXNgIiBpbgotICB4QUlYKSAgICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLSAgeEhQLVVYKSAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci0gIHhJUklYKikgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotICB4TmV0QlNEKSAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLSAgeE9wZW5CU0QpIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci0gIHhPU0YxKSAgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotZXNhYwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIyBtYWtlIHN1cmUgc25tcG5ldHN0YXQgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QTkVUU1RBVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0IgotWyAteCAiJFNOTVBORVRTVEFUIiBdIHx8IFNLSVAKLQotc25tcF92ZXJzaW9uPXYyYwotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAiJFNOTVBORVRTVEFUIC1DbiAtQ3AgJHByb3RvIC0kc25tcF92ZXJzaW9uIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKLUNIRUNLRVhBQ1QgIjEyNy4wLjAuMS4kU05NUF9TTk1QRF9QT1JUIgotIyBtdWx0aXBsZSBvY2N1cnJlbmNlcyAoZXNwZWNpYWxseSBpbiB0Y3BUYWJsZSkgYXJlIGZpbmUKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MAotZWxzZQotICAgIHJldHVybl92YWx1ZT0xCi1maQotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbCBiL3Rlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzg4MjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgImZ1bGwgc25tcHdhbGsgKFNOTVB2MmMpIGFnYWluc3QgYWdlbnQgKG1heSB0YWtlIHRpbWUpIgotCi1pZiB0ZXN0IGB1bmFtZSAtc2AgPSAiSFAtVVgiIDsgdGhlbgotICAgIGlmIHRlc3QgYGlkIC11YCAhPSAiMCIgOyB0aGVuCi0gICAgICAgICMgVGhlIGFnZW50IG5lZWRzIHRvIGJlIHJ1biBhcyByb290IC0gZWxzZSBmb3JjZSBza2lwCi0gICAgICAgIFNLSVAKLSAgICBmaQotZmkKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMgbWFrZSBzdXJlIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAotU05NUFdBTEs9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wd2FsayIKLVsgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQCi0KLXNubXBfdmVyc2lvbj12MmMKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIGhpZ2hlciB0aW1lb3V0L3JldHJ5IHZhbHVlcyBmb3Igc2FmZXR5Ci1USU1FT1VUPTEwCi1SRVRSWT01Ci0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jIHRlc3Rjb21tdW5pdHkgLXQgJFRJTUVPVVQgLXIgJFJFVFJZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEiCi1pZiBJU0RFRklORUQgVVNJTkdfV0lORVhURExMX01PRFVMRTsgdGhlbgotICA6Ci1lbHNlCi0gIENIRUNLQU5ERElFICI9IFdyb25nIFR5cGUgKHNob3VsZCBiZSAiCi1maQotQ0hFQ0tPUkRJRSAiTm8gbW9yZSB2YXJpYWJsZXMgbGVmdCBpbiB0aGlzIE1JQiBWaWV3IgotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS93aW4zMi9Db25maWd1cmUgYi93aW4zMi9Db25maWd1cmUKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA5OGZhM2ZkLi5hMzZkYjBiCi0tLSBhL3dpbjMyL0NvbmZpZ3VyZQorKysgYi93aW4zMi9Db25maWd1cmUKQEAgLTcsNiArNyw3IEBACiB1c2UgR2V0b3B0OjpMb25nOwogdXNlIHN0cmljdDsKIAorbXkgJHZlcnNpb24gPSAidW5rbm93biI7CiBteSAkY29uZmlnOwogbXkgJHNkayA9IDA7CiBteSAkbGlua3R5cGU7CkBAIC04NSw0NSArODYsNzMgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKLSMgQ3JlYXRlIG1haW4gTWFrZWZpbGUKKyMgRGV0ZXJtaW5lIHZlcnNpb24gZnJvbSB1bml4IGNvbmZpZ3VyZSBzY3JpcHQKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICR1bml4X2NvbmZpZ3VyZV9pbiA9ICIuLi9jb25maWd1cmUiOworCitvcGVuIChVTklYX0NPTkZJR1VSRV9JTiwgIjwkdW5peF9jb25maWd1cmVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJHVuaXhfY29uZmlndXJlX2luXG4iOworCit3aGlsZSAoPFVOSVhfQ09ORklHVVJFX0lOPikKIHsKLSAgbXkgJG1ha2VmaWxlX291dCA9ICJNYWtlZmlsZSI7Ci0gIG15ICRtYWtlZmlsZV9pbiAgPSAiTWFrZWZpbGUuaW4iOwotCi0gIG9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLSAgb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8TUFLRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLSAgICBpZiAoJHNkayA9PSAxKSB7Ci0gICAgICBzL15TREs9L1NESz10cnVlLzsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzL15TREs9L1NESz1mYWxzZS87Ci0gICAgfQotCi0gICAgcy9eTElOS1RZUEU9L0xJTktUWVBFPSRsaW5rdHlwZS87Ci0gICAgcy9eQ0ZHPS9DRkc9JGNvbmZpZy87Ci0gICAgcy9eUFJFRklYPS9QUkVGSVg9JHByZWZpeC87Ci0gICAgcy9eUFJFRklYX0RPUz0vUFJFRklYX0RPUz0kcHJlZml4ZG9zLzsKLSAgICBzL15TU0w9LiovU1NMPSRvcGVuc3NsLzsKLQotICAgIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKKyAgY2hvbXA7CisgIC9QQUNLQUdFX1ZFUlNJT049JyguKiknLzsKKyAgaWYgKCQxIG5lICIiKSB7CisgICAgJHZlcnNpb24gPSAkMTsKKyAgICBsYXN0OwogICB9CiB9CiAKKyMgQXJndW1lbnRzOgorIyAkMTogTmFtZSBvZiBvdXRwdXQgZmlsZQorIyAkMjogTmFtZSBvZiBpbnB1dCBmaWxlCisjICQzOiBSZWZlcmVuY2UgdG8gYSBoYXNoIHdpdGggc3Vic3RpdHV0aW9ucy4gQSBzdWJzdGl0dXRpb24gaXMgYW4gYXJyYXkgd2l0aAorIyAgICAgdHdvIGVsZW1lbnRzIHdoZXJlIGVsZW1lbnQgWzBdIGlzIHRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgYW5kIGVsZW1lbnQKKyMgICAgIFsxXSB0aGUgcmVwbGFjZW1lbnQgdGV4dC4KK3N1YiBzdWJzdGl0dXRlCit7CisgIG15ICRvdXQgID0gc2hpZnQ7CisgIG15ICRpbiAgID0gc2hpZnQ7CisgIG15ICRzdWJzID0gc2hpZnQ7CisKKyAgb3BlbiAoT1VULCAiPiRvdXQiKSB8fCBkaWUgIkNhbid0IG9wZW4gJG91dFxuIjsKKyAgb3BlbiAoSU4sICAiPCRpbiIpICB8fCBkaWUgIkNhbid0IG9wZW4gJGluXG4iOworCisgIHByaW50ICJjcmVhdGluZyAkb3V0XG4iOworCisgIHdoaWxlICg8SU4+KSB7CisgICAgY2hvbXA7CisgICAgZm9yZWFjaCBteSAkZSAoa2V5cyAlJHN1YnMpIHsKKyAgICAgICAgbXkgJHAgPSAkJHN1YnN7JGV9WzBdOworICAgICAgICBteSAkcSA9ICQkc3Vic3skZX1bMV07CisgICAgICAgIHMvJHAvJHEvOworICAgIH0KKyAgICBwcmludCBPVVQgJF8gLiAiXG4iOworICB9CisKKyAgY2xvc2UgSU47CisgIGNsb3NlIE9VVDsKK30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKLSMgQ3JlYXRlIE1ha2VmaWxlcyBmb3IgYXBwbGljYXRpb25zIGZyb20KLSMgTWFrZWZpbGUtYXBwcy5pbgotIyAoZXhjZXB0IGZvciBzbm1wbmV0c3RhdCkKKyMgUGVyZm9ybSBzdWJzdGl0dXRpb25zCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJXN1YnMgPSAoCisgICAgImNmZyIgPT4gWyAiXkNGRz0iLCAgICAgICAgIkNGRz0kY29uZmlnIiAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgImludCIgPT4gWyAiXklOVERJUj0iLCAgICAgIklOVERJUj0uXFwkY29uZmlnIiAgICAgICAgICAgICAgICAgIF0sCisgICAgImxuayIgPT4gWyAiXkxJTktUWVBFPSIsICAgIkxJTktUWVBFPSRsaW5rdHlwZSIgICAgICAgICAgICAgICAgIF0sCisgICAgIm91dCIgPT4gWyAiXk9VVERJUj0iLCAgICAgIk9VVERJUj0uXFwkY29uZmlnIiAgICAgICAgICAgICAgICAgIF0sCisgICAgInBmeCIgPT4gWyAiXlBSRUZJWD0iLCAgICAgIlBSRUZJWD0kcHJlZml4IiAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgImRvcyIgPT4gWyAiXlBSRUZJWF9ET1M9IiwgIlBSRUZJWF9ET1M9JHByZWZpeGRvcyIgICAgICAgICAgICAgIF0sCisgICAgInNkayIgPT4gWyAiXlNESz0iLCAgICAgICAgJHNkayA9PSAxID8gIlNESz10cnVlIiA6ICJTREs9ZmFsc2UiIF0sCisgICAgKTsKKworc3Vic3RpdHV0ZSgiTWFrZWZpbGUiLCAiTWFrZWZpbGUuaW4iLCBcJXN1YnMpOworc3Vic3RpdHV0ZSgibG9jYWwvTWFrZWZpbGUiLCAibG9jYWwvTWFrZWZpbGUuaW4iLCBcJXN1YnMpOworCiBteSBAcHJvZ3JhbXMgPSBxdwogL2VuY29kZV9rZXljaGFuZ2UKIHNubXBidWxrZ2V0CkBAIC0xNDQsMjcwICsxNzMsNTEgQEAKIC87CiAKIGZvcmVhY2ggbXkgJHByb2dOYW1lIChAcHJvZ3JhbXMpIHsKLQotICBteSAkbWFrZWZpbGVfb3V0ID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUiOwotICBteSAkbWFrZWZpbGVfaW4gPSAiTWFrZWZpbGUtYXBwcy5pbiI7Ci0KLSAgbXkgJG91dGRpciA9ICRjb25maWc7Ci0gIG15ICRpbnRkaXIgPSAkY29uZmlnOwotCi0gIG9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLSAgb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8TUFLRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIHMvXkxJTktUWVBFPS9MSU5LVFlQRT0kbGlua3R5cGUvOwotICAgIHMvXlBST0dOQU1FPS9QUk9HTkFNRT0kcHJvZ05hbWUvOwotICAgIHMvXkNGRz0vQ0ZHPSRjb25maWcvOwotICAgIHMvXk9VVERJUj0vT1VURElSPS5cXCRvdXRkaXIvOwotICAgIHMvXklOVERJUj0vSU5URElSPS5cXCRpbnRkaXIvOwotICAgIHMvXlNTTD0uKi9TU0w9JG9wZW5zc2wvOwotCi0gICAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOwotICB9CisgICAgJHN1YnN7InByZyJ9ID0gWyAiXlBST0dOQU1FPSIsICJQUk9HTkFNRT0kcHJvZ05hbWUiIF07CisgICAgc3Vic3RpdHV0ZSgiJHByb2dOYW1lL01ha2VmaWxlIiwgIk1ha2VmaWxlLWFwcHMuaW4iLCBcJXN1YnMpOwogfQogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgTWFrZWZpbGVzIGZvciBzbm1wbmV0c3RhdCBmcm9tCi0jIHNubXBuZXRzdGF0XE1ha2VmaWxlLmluCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotbXkgQHByb2dyYW1zID0gcXcKLS9zbm1wbmV0c3RhdAotLzsKLQotZm9yZWFjaCBteSAkcHJvZ05hbWUgKEBwcm9ncmFtcykgewotCi0gIG15ICRtYWtlZmlsZV9vdXQgPSAiJHByb2dOYW1lXFxNYWtlZmlsZSI7Ci0gIG15ICRtYWtlZmlsZV9pbiA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlLmluIjsKLQotICBteSAkb3V0ZGlyID0gJGNvbmZpZzsKLSAgbXkgJGludGRpciA9ICRjb25maWc7Ci0KLSAgb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotICBvcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxNQUtFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgcy9eTElOS1RZUEU9L0xJTktUWVBFPSRsaW5rdHlwZS87Ci0gICAgcy9eUFJPR05BTUU9L1BST0dOQU1FPSRwcm9nTmFtZS87Ci0gICAgcy9eQ0ZHPS9DRkc9JGNvbmZpZy87Ci0gICAgcy9eT1VURElSPS9PVVRESVI9LlxcJG91dGRpci87Ci0gICAgcy9eSU5URElSPS9JTlRESVI9LlxcJGludGRpci87Ci0gICAgcy9eU1NMPS4qL1NTTD0kb3BlbnNzbC87Ci0KLSAgICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7Ci0gIH0KK2ZvcmVhY2ggbXkgJHByb2dOYW1lICgibGliYWdlbnQiLCAibGlibmV0c25tcHRyYXBkIiwgImxvY2FsIiwKKyAgICAgICAgICAgICAgICAgICAgICAibmV0c25tcG1pYnMiLCAic25tcGQiLCAic25tcHRyYXBkIiwgInNubXBuZXRzdGF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAkbGlua3R5cGUgZXEgImR5bmFtaWMiID8gImxpYnNubXBfZGxsIiA6ICJsaWJzbm1wIikgeworICAgICRzdWJzeyJwcmcifSA9IFsgIl5QUk9HTkFNRT0iLCAiUFJPR05BTUU9JHByb2dOYW1lIiBdOworICAgIHN1YnN0aXR1dGUoIiRwcm9nTmFtZS9NYWtlZmlsZSIsICIkcHJvZ05hbWUvTWFrZWZpbGUuaW4iLCBcJXN1YnMpOwogfQogCitteSAlc3VicyA9ICgKKyAgICAiZW52IiA9PiBbICJcQEVOVl9TRVBBUkFUT1JcQCIsICI7IiBdCispOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgTWFrZWZpbGVzIGZvciBsaWJyYXJpZXMKLSMgZnJvbSBuYW1lXE1ha2VmaWxlLmluCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotbXkgQHByb2dyYW1zID0gcXcKLS9saWJhZ2VudAotbGliaGVscGVycwotbGlibmV0c25tcHRyYXBkCi0vOworc3Vic3RpdHV0ZSgiLi4vbG9jYWwvc25tcGNvbmYiLCAiLi4vbG9jYWwvc25tcGNvbmYuaW4iLCBcJXN1YnMpOwogCi1pZiAoJHNkayA9PSAxKSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgIm5ldHNubXBtaWJzc2RrIik7CisKK215ICVzdWJzID0gKAorICAgICJ2ZXIiID0+IFsgIl4jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTi4qIiwKKyAgICAgICAgICAgICAgICIjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiBcIiR2ZXJzaW9uXCIiIF0KKyAgICApOworaWYgKCRwcmVmaXggbmUgIiIpIHsKKyAgICAkc3Vic3sicGZ4In0gPSBbICJeI2RlZmluZSBJTlNUQUxMX0JBU0UuKiIsICIjZGVmaW5lIElOU1RBTExfQkFTRSBcIiRwcmVmaXhcIiIgXTsKIH0KLWVsc2UgewotICBwdXNoIChAcHJvZ3JhbXMsICJuZXRzbm1wbWlicyIpOwotfQotCiBpZiAoJGxpbmt0eXBlIGVxICJkeW5hbWljIikgewotICBwdXNoIChAcHJvZ3JhbXMsICJsaWJzbm1wX2RsbCIpOworICAgICRzdWJzeyJkbGwifSA9IFsgIl4uKiN1bmRlZiBORVRTTk1QX1VTRV9ETEwuKiIsICIjZGVmaW5lIE5FVFNOTVBfVVNFX0RMTCAxIiBdOwogfQotZWxzZSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgImxpYnNubXAiKTsKLX0KLQotZm9yZWFjaCBteSAkcHJvZ05hbWUgKEBwcm9ncmFtcykgewotCi0gIG15ICRtYWtlZmlsZV9vdXQgPSAiJHByb2dOYW1lXFxNYWtlZmlsZSI7Ci0gIG15ICRtYWtlZmlsZV9pbiA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlLmluIjsKLQotICBteSAkb3V0ZGlyID0gJGNvbmZpZzsKLSAgbXkgJGludGRpciA9ICRjb25maWc7Ci0KLSAgb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotICBvcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxNQUtFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgcy9eUFJPR05BTUU9L1BST0dOQU1FPSRwcm9nTmFtZS87Ci0gICAgcy9eQ0ZHPS9DRkc9JGNvbmZpZy87Ci0gICAgcy9eT1VURElSPS9PVVRESVI9LlxcJG91dGRpci87Ci0gICAgcy9eSU5URElSPS9JTlRESVI9LlxcJGludGRpci87Ci0gICAgcy9eU1NMPS4qL1NTTD0kb3BlbnNzbC87Ci0gICAgaWYgKCRiX3dpbmV4dGRsbCA9PSAxKSB7Ci0gICAgICBzLyMoLio/KVxzKyMgdW5jb21tZW50IGZvciB3aW5FeHRETEwuKi8kMS87Ci0gICAgICBzL15MSUIzMl9GTEFHUz0oLiopL0xJQjMyX0ZMQUdTPU1nbXRBUEkubGliIHNubXBhcGkubGliICQxLzsKLSAgICB9Ci0gICAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOwotICB9Ci19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBNYWtlZmlsZXMgZm9yIGRhZW1vbnMKLSMgZnJvbSBuYW1lXE1ha2VmaWxlLmluCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotbXkgQHByb2dyYW1zID0gcXcKLS9zbm1wdHJhcGQKLS87Ci0KIGlmICgkc2RrID09IDEpIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAic25tcGRzZGsiKTsKKyAgICAkc3Vic3sic2RrIn0gPSBbICJeLiojdW5kZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuKiIsICIjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIDEiIF07CiB9Ci1lbHNlIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAic25tcGQiKTsKK2lmICgkb3BlbnNzbCA9PSAxKSB7CisgICAgJHN1YnN7InNzbCJ9ID0gWyAiXi4qI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wuKiIsICIjZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMSIgXTsKK30gZWxzZSB7CisgICAgJHN1YnN7InNzbCJ9ID0gWyAiXi4qI3VuZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENS4qIiwgIiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1IDEiIF07Cit9CitpZiAoJGJfaXB2NiA9PSAxKSB7CisgICAgJHN1YnN7ImlwdjYifSA9IFsgIl4uKiN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2LioiLCAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEiIF07Cit9CitpZiAoJGJfd2luZXh0ZGxsID09IDEpIHsKKyAgICAkc3Vic3sid2luZXh0ZGxsIn0gPSBbICJeLiojdW5kZWYgVVNJTkdfV0lORVhURExMX01PRFVMRS4qIiwgIiNkZWZpbmUgVVNJTkdfV0lORVhURExMX01PRFVMRSAxIiBdOwogfQogCi1mb3JlYWNoIG15ICRwcm9nTmFtZSAoQHByb2dyYW1zKSB7Ci0KLSAgbXkgJG1ha2VmaWxlX291dCA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlIjsKLSAgbXkgJG1ha2VmaWxlX2luID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUuaW4iOwotCi0gIG15ICRvdXRkaXIgPSAkY29uZmlnOwotICBteSAkaW50ZGlyID0gJGNvbmZpZzsKLQotICBvcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPE1BS0VfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBzL15MSU5LVFlQRT0vTElOS1RZUEU9JGxpbmt0eXBlLzsKLSAgICBzL15QUk9HTkFNRT0vUFJPR05BTUU9JHByb2dOYW1lLzsKLSAgICBzL15DRkc9L0NGRz0kY29uZmlnLzsKLSAgICBzL15PVVRESVI9L09VVERJUj0uXFwkb3V0ZGlyLzsKLSAgICBzL15JTlRESVI9L0lOVERJUj0uXFwkaW50ZGlyLzsKLSAgICBzL15TU0w9LiovU1NMPSRvcGVuc3NsLzsKLQotICAgIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKLSAgfQotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgTWFrZWZpbGUgZm9yIFBlcmwgc2NyaXB0cyBpbiBsb2NhbAotIyBmcm9tIGxvY2FsXE1ha2VmaWxlLmluCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1teSAkbWFrZWZpbGVfb3V0ID0gImxvY2FsXFxNYWtlZmlsZSI7Ci1teSAkbWFrZWZpbGVfaW4gPSAibG9jYWxcXE1ha2VmaWxlLmluIjsKLQotbXkgJG91dGRpciA9ICRjb25maWc7Ci0KLW9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLW9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLXdoaWxlICg8TUFLRV9JTj4pCi17Ci0gIGNob21wOwotCi0gIHMvXk9VVERJUj0vT1VURElSPS5cXCRvdXRkaXIvOwotICBzL15QUkVGSVg9L1BSRUZJWD0kcHJlZml4LzsKLSAgcy9eUFJFRklYX0RPUz0vUFJFRklYX0RPUz0kcHJlZml4ZG9zLzsKLQotICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7Ci19Ci0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIG5ldC1zbm1wLWNvbmZpZy5oCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotewotICBteSAkZmlsZV9vdXQgPSAibmV0LXNubXBcXG5ldC1zbm1wLWNvbmZpZy5oIjsKLSAgbXkgJGZpbGVfaW4gPSAibmV0LXNubXBcXG5ldC1zbm1wLWNvbmZpZy5oLmluIjsKLQotICBvcGVuIChGSUxFX09VVCwgIj4kZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfb3V0XG4iOwotICBvcGVuIChGSUxFX0lOLCAiPCRmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxGSUxFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgaWYgKCRwcmVmaXggbmUgIiIpIHsKLSAgICAgIHMvXiNkZWZpbmUgSU5TVEFMTF9CQVNFLiovI2RlZmluZSBJTlNUQUxMX0JBU0UgXCIkcHJlZml4XCIvOwotICAgIH0KLSAgICBpZiAoJGxpbmt0eXBlIGVxICJkeW5hbWljIikgewotICAgICAgcy9eLiojdW5kZWYgTkVUU05NUF9VU0VfRExMLiovI2RlZmluZSBORVRTTk1QX1VTRV9ETEwgMS87Ci0gICAgfQotICAgIGlmICgkc2RrID09IDEpIHsKLSAgICAgIHMvXi4qI3VuZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLiovI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAxLzsKLSAgICB9Ci0gICAgaWYgKCRvcGVuc3NsID09IDEpIHsKLSAgICAgIHMvXi4qI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wuKi8jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMS87Ci0gICAgfQotICAgIGlmICgkYl9pcHY2ID09IDEpIHsKLSAgICAgIHMvXi4qI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYuKi8jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgMS87Ci0gICAgfQotICAgIGlmICgkYl93aW5leHRkbGwgPT0gMSkgewotICAgICAgcy9eLiojdW5kZWYgVVNJTkdfV0lORVhURExMX01PRFVMRS4qLyNkZWZpbmUgVVNJTkdfV0lORVhURExMX01PRFVMRSAxLzsKLSAgICB9Ci0KLSAgICBwcmludCBGSUxFX09VVCAkXyAuICJcbiI7Ci0gIH0KLX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIGxpYnNubXAuZGVmIGZpbGUgZm9yIGxpYnNubXBfZGxsCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaWYgKCRsaW5rdHlwZSBlcSAiZHluYW1pYyIpCi17Ci0gIG15ICRmaWxlX291dCA9ICJsaWJzbm1wX2RsbFxcbGlic25tcC5kZWYiOwotICBteSAkZmlsZV9pbiA9ICJsaWJzbm1wX2RsbFxcbGlic25tcC5kZWYuaW4iOwotCi0gIG9wZW4gKEZJTEVfT1VULCAiPiRmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKEZJTEVfSU4sICI8JGZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPEZJTEVfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBpZiAoJGJfaXB2NiA9PSAiMSIpIHsKLSAgICAgIHMvXjtpcHY2Ly9pOwotICAgIH0KLQotICAgIHByaW50IEZJTEVfT1VUICRfIC4gIlxuIjsKLSAgfQotfQotCitzdWJzdGl0dXRlKCJuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIsICJuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiIsCisgICAgICAgICAgIFwlc3Vicyk7CiAKIHByaW50IHFxLwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MTYsNiArMjI2LDExIEBACiAKIC87CiAKK2lmICgkdmVyc2lvbiBlcSAidW5rbm93biIpIHsKKyAgJHZlcnNpb24gPSAidW5rbm93biAtIENvdWxkIG5vdCBkZXRlcm1pbmUgdmVyc2lvbiBmcm9tIC4uL2NvbmZpZ3VyZSEiOworfQorCitwcmludCAiICBWZXJzaW9uOiAgICAgICAgICAgICAgICAgICAgJHZlcnNpb25cbiI7CiBwcmludCAiICBDb25maWcgdHlwZTogICAgICAgICAgICAgICAgJGNvbmZpZ1xuIjsKIHByaW50ICIgIFNESzogICAgICAgICAgICAgICAgICAgICAgICAiIC4gKCRzZGsgPT0gMSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKIHByaW50ICIgIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAkbGlua3R5cGVcbiI7CmRpZmYgLS1naXQgYS93aW4zMi9NYWtlZmlsZS1hcHBzLmluIGIvd2luMzIvTWFrZWZpbGUtYXBwcy5pbgppbmRleCBiNWZlZDYxLi5iY2ZiMjZlIDEwMDY0NAotLS0gYS93aW4zMi9NYWtlZmlsZS1hcHBzLmluCisrKyBiL3dpbjMyL01ha2VmaWxlLWFwcHMuaW4KQEAgLTMsNyArMyw2IEBACiBPVVRESVI9CiBJTlRESVI9CiBMSU5LVFlQRT0KLVNTTD0KIAogIyBTZXQgdG8gMSB0byBhbGxvdyB0aGUgYnVpbGRpbmcgdXNpbmcgdGhlIERMTCB2ZXJzaW9uIG9mIFNOTVBMSUIuCiBBTExPV19ETEw9MQpAQCAtMjQsNiArMjMsNyBAQAogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtNzQsNyArNzQsNyBAQAogQlNDMzJfU0JSUz0gXAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLlxiaW5cJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVwkKFBST0dOQU1FKS5vYmoiCiAKQEAgLTgzLDYgKzgzLDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpAQCAtMTAzLDYgKzEwNSw3IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBkYiIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTExMSw3ICsxMTQsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC0xNTksNyArMTYyLDcgQEAKIDw8CiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi5cYmluXCQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcJChQUk9HTkFNRSkub2JqIgogCkBAIC0xNjgsNiArMTcxLDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpkaWZmIC0tZ2l0IGEvd2luMzIvTWFrZWZpbGUuaW4gYi93aW4zMi9NYWtlZmlsZS5pbgppbmRleCBiOTA4NTgyLi5iYmE1NDY0IDEwMDY0NAotLS0gYS93aW4zMi9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9NYWtlZmlsZS5pbgpAQCAtMTAsMTcgKzEwLDEwIEBACiAKIGNsZWFuIDogYXBwc19jbGVhbiBsaWJzX2NsZWFuIHNubXB0cmFwZF9jbGVhbiBzbm1wZF9jbGVhbiBsb2NhbF9jbGVhbgogCi0hSUYgIiQoU0RLKSIgPT0gInRydWUiCi1zbm1wZCA6IHNubXBkc2RrXwotc25tcGRfY2xlYW4gOiBzbm1wZHNka19jbGVhbl8KLW5ldHNubXBtaWJzIDogbmV0c25tcG1pYnNzZGtfCi1uZXRzbm1wbWlic19jbGVhbiA6IG5ldHNubXBtaWJzc2RrX2NsZWFuXwotIUVMU0UKIHNubXBkIDogc25tcGRfCiBzbm1wZF9jbGVhbiA6IHNubXBkX2NsZWFuXwogbmV0c25tcG1pYnMgOiBuZXRzbm1wbWlic18JCiBuZXRzbm1wbWlic19jbGVhbiA6IG5ldHNubXBtaWJzX2NsZWFuXwotIUVORElGCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJzdGF0aWMiCiBsaWJzbm1wIDogbGlic25tcF8KQEAgLTMwLDggKzIzLDggQEAKIGxpYnNubXBfY2xlYW4gOiBsaWJzbm1wX2RsbF9jbGVhbl8KICFFTkRJRgogCi1saWJzIDogbGliYWdlbnQgbGliaGVscGVycyBsaWJzbm1wIGxpYm5ldHNubXB0cmFwZCBuZXRzbm1wbWlicyAKLWxpYnNfY2xlYW4gOiBsaWJhZ2VudF9jbGVhbiBsaWJoZWxwZXJzX2NsZWFuIGxpYnNubXBfY2xlYW4gbGlibmV0c25tcHRyYXBkX2NsZWFuIG5ldHNubXBtaWJzX2NsZWFuCitsaWJzIDogbGliYWdlbnQgbGlic25tcCBsaWJuZXRzbm1wdHJhcGQgbmV0c25tcG1pYnMgCitsaWJzX2NsZWFuIDogbGliYWdlbnRfY2xlYW4gbGlic25tcF9jbGVhbiBsaWJuZXRzbm1wdHJhcGRfY2xlYW4gbmV0c25tcG1pYnNfY2xlYW4KIAogYXBwcyA6IHNubXBkZiBzbm1wc2V0IHNubXB1c20gc25tcHRlc3Qgc25tcHRyYXAgc25tcHZhY20gc25tcHdhbGsgc25tcGRlbHRhIHNubXB0YWJsZSBzbm1wc3RhdHVzIHNubXBidWxrZ2V0IHNubXBnZXQgc25tcGdldG5leHQgc25tcGJ1bGt3YWxrIHNubXB0cmFuc2xhdGUgZW5jb2RlX2tleWNoYW5nZSBzbm1wbmV0c3RhdAogCkBAIC0xMTMsMTEgKzEwNiw2IEBACiAJJChOTUFLRSkgYWxsCiAJY2QgLi4KIAotbGliaGVscGVycyA6OgotCWNkIGxpYmhlbHBlcnMKLQkkKE5NQUtFKSBhbGwKLQljZCAuLgotCiBsaWJzbm1wXyA6OgogCWNkIGxpYnNubXAKIAkkKE5NQUtFKSBhbGwKQEAgLTEzOCwxMSArMTI2LDYgQEAKIAkkKE5NQUtFKSBhbGwKIAljZCAuLgogCi1uZXRzbm1wbWlic3Nka18gOjoKLQljZCBuZXRzbm1wbWlic3NkawotCSQoTk1BS0UpIGFsbAotCWNkIC4uCi0KIHNubXBkZiA6OgogCWNkIHNubXBkZgogCSQoTk1BS0UpIGFsbApAQCAtMjM4LDExICsyMjEsNiBAQAogCSQoTk1BS0UpIGFsbAogCWNkIC4uCiAKLXNubXBkc2RrXyA6OgotCWNkIHNubXBkc2RrCi0JJChOTUFLRSkgYWxsCi0JY2QgLi4KLQogc25tcGNvbmYgOjoKIAljZCBsb2NhbAogCSQoTk1BS0UpIHNubXBjb25mCkBAIC0yNjcsMTEgKzI0NSw2IEBACiAJJChOTUFLRSkgY2xlYW4KIAljZCAuLgogCi1saWJoZWxwZXJzX2NsZWFuIDo6Ci0JY2QgbGliaGVscGVycwotCSQoTk1BS0UpIGNsZWFuCi0JY2QgLi4KLQogbGlic25tcF9jbGVhbl8gOjoKIAljZCBsaWJzbm1wCiAJJChOTUFLRSkgY2xlYW4KQEAgLTI5MiwxMSArMjY1LDYgQEAKIAkkKE5NQUtFKSBjbGVhbgogCWNkIC4uCiAKLW5ldHNubXBtaWJzc2RrX2NsZWFuXyA6OgotCWNkIG5ldHNubXBtaWJzc2RrCi0JJChOTUFLRSkgY2xlYW4KLQljZCAuLgotCiBzbm1wZGZfY2xlYW4gOjoKIAljZCBzbm1wZGYKIAkkKE5NQUtFKSBjbGVhbgpAQCAtMzkyLDExICszNjAsNiBAQAogCSQoTk1BS0UpIGNsZWFuCiAJY2QgLi4KIAotc25tcGRzZGtfY2xlYW5fIDo6Ci0JY2Qgc25tcGRzZGsKLQkkKE5NQUtFKSBjbGVhbgotCWNkIC4uCi0KIHNubXBjb25mX2NsZWFuIDo6CiAJY2QgbG9jYWwKIAkkKE5NQUtFKSBzbm1wY29uZl9jbGVhbgpAQCAtNDIxLDExICszODQsOSBAQAogICAgICAgICBALWVjaG8gImFsbCAgICAgICAgICAgICBsaWJzIGFwcHMgc25tcHRyYXBkIHNubXBkICAgICAgICAgICAgICAgICAgICAgIgogICAgICAgICBALWVjaG8gImNsZWFuICAgICAgICAgICBsaWJzX2NsZWFuIGFwcHNfY2xlYW4gc25tcHRyYXBkX2NsZWFuICAgICAgICAgIgogICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBzbm1wZF9jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgICBALWVjaG8gImxpYnMgICAgICAgICAgICBsaWJhZ2VudCBsaWJoZWxwZXJzIGxpYnNubXAgbGlibmV0c25tcHRyYXBkICAgIgotICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBuZXRzbm1wbWlicyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgICBALWVjaG8gImxpYnNfY2xlYW4gICAgICBsaWJhZ2VudF9jbGVhbiBsaWJoZWxwZXJzX2NsZWFuICAgICAgICAgICAgICAgIgotICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBsaWJuZXRzbm1wdHJhcGRfY2xlYW4gbGlic25tcF9jbGVhbiAgICAgICAgICAgIgotICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBuZXRzbm1wbWlic19jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICBALWVjaG8gImxpYnMgICAgICAgICAgICBsaWJhZ2VudCBsaWJzbm1wIGxpYm5ldHNubXB0cmFwZCBuZXRzbm1wbWlicyAgIgorICAgICAgICBALWVjaG8gImxpYnNfY2xlYW4gICAgICBsaWJhZ2VudF9jbGVhbiBsaWJuZXRzbm1wdHJhcGRfY2xlYW4gICAgICAgICAgIgorICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBsaWJzbm1wX2NsZWFuIG5ldHNubXBtaWJzX2NsZWFuICAgICAgICAgICAgICAgIgogICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgogICAgICAgICBALWVjaG8gImFwcHMgICAgICAgICAgICBlbmNvZGVfa2V5Y2hhbmdlIHNubXBidWxrZ2V0IHNubXBidWxrd2FsayAgICAgIgogICAgICAgICBALWVjaG8gIiAgICAgICAgICAgICAgICBzbm1wZGVsdGEgc25tcGRmIHNubXBnZXQgc25tcGdldG5leHQgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvd2luMzIvYnVpbGQucGwgYi93aW4zMi9idWlsZC5wbAppbmRleCBhN2Y5MzM4Li40MDA3ZmFlIDEwMDY0NAotLS0gYS93aW4zMi9idWlsZC5wbAorKysgYi93aW4zMi9idWlsZC5wbApAQCAtNSwzMiArNSw0OSBAQAogIyBNYXJjaCAxMnRoLCAyMDA0CiAjCiB1c2Ugc3RyaWN0OwotbXkgJG9wZW5zc2wgPSAiZGlzYWJsZWQiOwotbXkgJGJfaXB2NiA9ICJkaXNhYmxlZCI7Ci1teSAkYl93aW5leHRkbGwgPSAiZGlzYWJsZWQiOwotbXkgJHNkayA9ICJkaXNhYmxlZCI7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ29uZmlnOwordXNlIEN3ZCAnYWJzX3BhdGgnOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIGNvbnN0YW50IGZhbHNlID0+IDA7Cit1c2UgY29uc3RhbnQgdHJ1ZSA9PiAxOworbXkgJHRhcmdldF9hcmNoID0gJEVOVntUQVJHRVRfQ1BVfSA/ICRFTlZ7VEFSR0VUX0NQVX0gOiAkRU5We1BsYXRmb3JtfSA/CisgICAgICAgICAgICAgICAgICAkRU5We1BsYXRmb3JtfSA6ICJ4ODYiOworaWYgKCR0YXJnZXRfYXJjaCBuZSAieDg2IiAmJiAkdGFyZ2V0X2FyY2ggbmUgIng2NCIpIHsKKyAgICBwcmludCAiRXJyb3I6IHVuc3VwcG9ydGVkIHRhcmdldCBhcmNoaXRlY3R1cmUgJHRhcmdldF9hcmNoXG4iOworICAgIGRpZTsKK30KK215IEBwZXJsX2FyY2ggPSBzcGxpdCgvLS8sICRDb25maWd7YXJjaG5hbWV9KTsKK2lmICgkcGVybF9hcmNoWzFdIG5lICR0YXJnZXRfYXJjaCkgeworICAgIHByaW50ICJwZXJsX2FyY2ggPSAkcGVybF9hcmNoWzFdIGRvZXMgbm90IG1hdGNoIHRhcmdldF9hcmNoID0gJHRhcmdldF9hcmNoXG4iOworICAgIGRpZTsKK30KK215ICRvcGVuc3NsID0gZmFsc2U7CitteSAkZGVmYXVsdF9vcGVuc3NsZGlyID0gJHRhcmdldF9hcmNoIGVxICJ4NjQiID8KKyAgICAiQzpcXE9wZW5TU0wtV2luNjQiIDogIkM6XFxPcGVuU1NMLVdpbjMyIjsKK215ICRkZWZhdWx0X29wZW5zc2xpbmNkaXIgPSAkZGVmYXVsdF9vcGVuc3NsZGlyIC4gIlxcaW5jbHVkZSI7CitteSAkb3BlbnNzbGluY2RpciA9ICRkZWZhdWx0X29wZW5zc2xpbmNkaXI7CitteSAkZGVmYXVsdF9vcGVuc3NsbGliZGlyID0gJGRlZmF1bHRfb3BlbnNzbGRpciAuICJcXGxpYlxcVkMiOworbXkgJG9wZW5zc2xsaWJkaXIgPSAkZGVmYXVsdF9vcGVuc3NsbGliZGlyOworbXkgJGJfaXB2NiA9IGZhbHNlOworbXkgJGJfd2luZXh0ZGxsID0gZmFsc2U7CitteSAkc2RrID0gZmFsc2U7CiBteSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2UgPSAiYzovdXNyIjsKIG15ICRpbnN0YWxsX2Jhc2UgPSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2U7Ci1teSAkaW5zdGFsbCA9ICJlbmFibGVkIjsKLW15ICRpbnN0YWxsX2RldmVsID0gImRpc2FibGVkIjsKLW15ICRwZXJsID0gImRpc2FibGVkIjsKLW15ICRwZXJsX2luc3RhbGwgPSAiZGlzYWJsZWQiOwotbXkgJGxvZ2dpbmcgPSAiZW5hYmxlZCI7Ci1teSAkZGVidWcgPSAiZGlzYWJsZWQiOworbXkgJGluc3RhbGwgPSB0cnVlOworbXkgJGluc3RhbGxfZGV2ZWwgPSBmYWxzZTsKK215ICRwZXJsID0gZmFsc2U7CitteSAkcGVybF9pbnN0YWxsID0gZmFsc2U7CitteSAkbG9nZ2luZyA9IHRydWU7CitteSAkZGVidWcgPSBmYWxzZTsKIG15ICRjb25maWdPcHRzID0gIiI7Ci1teSAkbGlua3R5cGUgPSAic3RhdGljIjsKK215ICRsaW5rX2R5bmFtaWMgPSBmYWxzZTsKIG15ICRvcHRpb247CiAKLSMgUHJlcGVuZCB3aW4zMlwgaWYgcnVubmluZyBmcm9tIG1haW4gZGlyZWN0b3J5Ci1teSAkY3VycmVudF9wd2QgPSBgJUNPTVNQRUMlIC9jIGNkYDsKLWNob21wICRjdXJyZW50X3B3ZDsKLWlmICghICgkY3VycmVudF9wd2QgPX4gL1xcd2luMzIkLykpIHsKLSAgY2hkaXIgKCJ3aW4zMiIpOwotICAkY3VycmVudF9wd2QgPSBgJUNPTVNQRUMlIC9jIGNkYDsKLSAgY2hvbXAgJGN1cnJlbnRfcHdkOwotfQorIyBQYXRoIG9mIHRoaXMgc2NyaXB0IChzb3VyY2UgdHJlZSBwYXRoICsgIndpbjMyIikuCitteSAkY3VycmVudF9wd2QgPSBkaXJuYW1lKGFic19wYXRoKCQwKSk7CiAKLWlmICggLWQgJEVOVntNU1ZDRGlyfSB8fCAtZCAkRU5We1ZDSU5TVEFMTERJUn0pIHsKK2lmICggLWQgJEVOVntNU1ZDRGlyfSB8fCAtZCAkRU5We1ZDSU5TVEFMTERJUn0gfHwgZGVmaW5lZCgkRU5We1RBUkdFVF9DUFV9KSApIHsKIH0KIGVsc2UgewogICBwcmludCAiXG5QbGVhc2UgcnVuIFZDVkFSUzMyLkJBVCBmaXJzdCB0byBzZXQgdXAgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGRcbiIgLgpAQCAtNDIsMTMyICs1OSw4OSBAQAogd2hpbGUgKDEpIHsKICAgcHJpbnQgIlxuXG5OZXQtU05NUCBidWlsZCBhbmQgaW5zdGFsbCBvcHRpb25zXG4iOwogICBwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOwotICBwcmludCAiMS4gIE9wZW5TU0wgc3VwcG9ydDogICAgICAgICAgICAgICAgIiAuICRvcGVuc3NsLiAiXG4iOwotICBwcmludCAiMi4gIFBsYXRmb3JtIFNESyBzdXBwb3J0OiAgICAgICAgICAgIiAuICRzZGsgLiAiXG4iOworICBwcmludCAiMS4gIE9wZW5TU0wgc3VwcG9ydDogICAgICAgICAgICAgICAgIiAuICgkb3BlbnNzbCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLiAiXG4iOworICBwcmludCAiMi4gIE9wZW5TU0wgaW5jbHVkZSBkaXJlY3Rvcnk6ICAgICAgIiAuICRvcGVuc3NsaW5jZGlyLiAiXG4iOworICBwcmludCAiMy4gIE9wZW5TU0wgbGlicmFyeSBkaXJlY3RvcjogICAgICAgIiAuICRvcGVuc3NsbGliZGlyLiAiXG4iOworICBwcmludCAiNC4gIFBsYXRmb3JtIFNESyBzdXBwb3J0OiAgICAgICAgICAgIiAuICgkc2RrID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiMy4gIEluc3RhbGwgcGF0aDogICAgICAgICAgICAgICAgICAgIiAuICRpbnN0YWxsX2Jhc2UgLiAiXG4iOwotICBwcmludCAiNC4gIEluc3RhbGwgYWZ0ZXIgYnVpbGQ6ICAgICAgICAgICAgIiAuICRpbnN0YWxsIC4gIlxuIjsKKyAgcHJpbnQgIjUuICBJbnN0YWxsIHBhdGg6ICAgICAgICAgICAgICAgICAgICIgLiAkaW5zdGFsbF9iYXNlIC4gIlxuIjsKKyAgcHJpbnQgIjYuICBJbnN0YWxsIGFmdGVyIGJ1aWxkOiAgICAgICAgICAgICIgLiAoJGluc3RhbGwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICI1LiAgUGVybCBtb2R1bGVzOiAgICAgICAgICAgICAgICAgICAiIC4gJHBlcmwgLiAiXG4iOwotICBwcmludCAiNi4gIEluc3RhbGwgcGVybCBtb2R1bGVzOiAgICAgICAgICAgIiAuICRwZXJsX2luc3RhbGwgLiAiXG4iOworICBwcmludCAiNy4gIFBlcmwgbW9kdWxlczogICAgICAgICAgICAgICAgICAgIiAuICgkcGVybCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKKyAgcHJpbnQgIjguICBJbnN0YWxsIHBlcmwgbW9kdWxlczogICAgICAgICAgICIgLiAoJHBlcmxfaW5zdGFsbCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjcuICBRdWlldCBidWlsZCAobG9nZ2VkKTogICAgICAgICAgICIgLiAkbG9nZ2luZyAuICJcbiI7Ci0gIHByaW50ICI4LiAgRGVidWcgbW9kZTogICAgICAgICAgICAgICAgICAgICAiIC4gJGRlYnVnIC4gIlxuIjsKKyAgcHJpbnQgIjkuICBRdWlldCBidWlsZCAobG9nZ2VkKTogICAgICAgICAgICIgLiAoJGxvZ2dpbmcgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CisgIHByaW50ICIxMC4gRGVidWcgbW9kZTogICAgICAgICAgICAgICAgICAgICAiIC4gKCRkZWJ1ZyA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjkuICBJUHY2IHRyYW5zcG9ydHMgKHJlcXVpcmVzIFNESyk6ICIgLiAkYl9pcHY2IC4gIlxuIjsKLSAgcHJpbnQgIjEwLiB3aW5FeHRETEwgYWdlbnQgKHJlcXVpcmVzIFNESyk6ICIgLiAkYl93aW5leHRkbGwgLiAiXG4iOworICBwcmludCAiMTEuIElQdjYgdHJhbnNwb3J0cyAocmVxdWlyZXMgU0RLKTogIiAuICgkYl9pcHY2ID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOworICBwcmludCAiMTIuIHdpbkV4dERMTCBhZ2VudCAocmVxdWlyZXMgU0RLKTogIiAuICgkYl93aW5leHRkbGwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICIxMS4gTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAiIC4gJGxpbmt0eXBlIC4gIlxuIjsKKyAgcHJpbnQgIjEzLiBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICIgLiAoJGxpbmtfZHluYW1pYyA/ICJkeW5hbWljIiA6ICJzdGF0aWMiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICIxMi4gSW5zdGFsbCBkZXZlbG9wbWVudCBmaWxlcyAgICAgICAiIC4gJGluc3RhbGxfZGV2ZWwgLiAiXG4iOworICBwcmludCAiMTQuIEluc3RhbGwgZGV2ZWxvcG1lbnQgZmlsZXMgICAgICAgIiAuICgkaW5zdGFsbF9kZXZlbCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuRi4gIEZpbmlzaGVkIC0gc3RhcnQgYnVpbGRcbiI7CiAgIHByaW50ICJRLiAgUXVpdCAtIGFib3J0IGJ1aWxkXG5cbiI7CiAgIHByaW50ICJTZWxlY3Qgb3B0aW9uIHRvIHNldCAvIHRvZ2dsZTogIjsKIAogICBjaG9tcCAoJG9wdGlvbiA9IDw+KTsKICAgaWYgKCRvcHRpb24gZXEgIjEiKSB7Ci0gICAgaWYgKCRvcGVuc3NsIGVxICJlbmFibGVkIikgewotICAgICAgJG9wZW5zc2wgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRvcGVuc3NsID0gImVuYWJsZWQiOwotICAgIH0KKyAgICAkb3BlbnNzbCA9ICEkb3BlbnNzbDsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiMiIpIHsKLSAgICBpZiAoJHNkayBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRzZGsgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRzZGsgPSAiZW5hYmxlZCI7Ci0gICAgfQotICB9Ci0gIGVsc2lmICgkb3B0aW9uIGVxICI5IikgewotICAgIGlmICgkYl9pcHY2IGVxICJlbmFibGVkIikgewotICAgICAgJGJfaXB2NiA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGJfaXB2NiA9ICJlbmFibGVkIjsKLSAgICAgIGlmICgkc2RrID0gImRpc2FibGVkIikgewotICAgICAgICBwcmludCAiXG5cbiogU0RLIHJlcXVpcmVkIGZvciBJUHY2IGFuZCBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGVuYWJsZWQiOwotICAgICAgICAkc2RrID0gImVuYWJsZWQiOwotICAgICAgfQotICAgIH0KLSAgfQotICBlbHNpZiAoJG9wdGlvbiBlcSAiMTAiKSB7Ci0gICAgaWYgKCRiX3dpbmV4dGRsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRiX3dpbmV4dGRsbCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGJfd2luZXh0ZGxsID0gImVuYWJsZWQiOwotICAgICAgaWYgKCRzZGsgPSAiZGlzYWJsZWQiKSB7Ci0gICAgICAgIHByaW50ICJcblxuKiBTREsgcmVxdWlyZWQgZm9yIElQdjYgYW5kIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCI7Ci0gICAgICAgICRzZGsgPSAiZW5hYmxlZCI7Ci0gICAgICB9Ci0gICAgfQorICAgIHByaW50ICJQbGVhc2UgZW50ZXIgdGhlIE9wZW5TU0wgaW5jbHVkZSBkaXJlY3RvcnkgWyRvcGVuc3NsaW5jZGlyXTogIjsKKyAgICBjaG9tcCAoJG9wZW5zc2xpbmNkaXIgPSA8Pik7CisgICAgJG9wZW5zc2xpbmNkaXIgPX4gcy9cXC9cLy9nOworICAgICRvcGVuc3NsaW5jZGlyID0gJGRlZmF1bHRfb3BlbnNzbGluY2RpciBpZiAoJG9wZW5zc2xpbmNkaXIgZXEgIiIpOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICIzIikgewotICAgIHByaW50ICJQbGVhc2UgZW50ZXIgdGhlIG5ldyBpbnN0YWxsIHBhdGggWyRkZWZhdWx0X2luc3RhbGxfYmFzZV06ICI7Ci0gICAgY2hvbXAgKCRpbnN0YWxsX2Jhc2UgPSA8Pik7Ci0gICAgaWYgKCRpbnN0YWxsX2Jhc2UgZXEgIiIpIHsKLSAgICAgICRpbnN0YWxsX2Jhc2UgPSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2U7Ci0gICAgfQotICAgICRpbnN0YWxsX2Jhc2UgPX4gcy9cXC9cLy9nOworICAgIHByaW50ICJQbGVhc2UgZW50ZXIgdGhlIE9wZW5TU0wgbGlicmFyeSBkaXJlY3RvcnkgWyRvcGVuc3NsbGliZGlyXTogIjsKKyAgICBjaG9tcCAoJG9wZW5zc2xsaWJkaXIgPSA8Pik7CisgICAgJG9wZW5zc2xsaWJkaXIgPX4gcy9cXC9cLy9nOworICAgICRvcGVuc3NsbGliZGlyID0gJGRlZmF1bHRfb3BlbnNzbGxpYmRpciBpZiAoJG9wZW5zc2xsaWJkaXIgZXEgIiIpOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICI0IikgewotICAgIGlmICgkaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRpbnN0YWxsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkaW5zdGFsbCA9ICJlbmFibGVkIjsKKyAgICAkc2RrID0gISRzZGs7CisgIH0KKyAgZWxzaWYgKCRvcHRpb24gZXEgIjExIikgeworICAgICRiX2lwdjYgPSAhJGJfaXB2NjsKKyAgICBpZiAoJGJfaXB2NiAmJiAhJHNkaykgeworICAgICAgcHJpbnQgIlxuXG4qIFNESyByZXF1aXJlZCBmb3IgSVB2NiBhbmQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBlbmFibGVkIjsKKyAgICAgICRzZGsgPSB0cnVlOwogICAgIH0KICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiMTIiKSB7Ci0gICAgaWYgKCRpbnN0YWxsX2RldmVsIGVxICJlbmFibGVkIikgewotICAgICAgJGluc3RhbGxfZGV2ZWwgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRpbnN0YWxsX2RldmVsID0gImVuYWJsZWQiOworICAgICRiX3dpbmV4dGRsbCA9ICEkYl93aW5leHRkbGw7CisgICAgaWYgKCRiX3dpbmV4dGRsbCAmJiAhJHNkaykgeworICAgICAgcHJpbnQgIlxuXG4qIFNESyByZXF1aXJlZCBmb3IgSVB2NiBhbmQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBlbmFibGVkIjsKKyAgICAgICRzZGsgPSB0cnVlOwogICAgIH0KICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiNSIpIHsKLSAgICBpZiAoJHBlcmwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkcGVybCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJHBlcmwgPSAiZW5hYmxlZCI7Ci0gICAgfQorICAgIHByaW50ICJQbGVhc2UgZW50ZXIgdGhlIG5ldyBpbnN0YWxsIHBhdGggWyRkZWZhdWx0X2luc3RhbGxfYmFzZV06ICI7CisgICAgY2hvbXAgKCRpbnN0YWxsX2Jhc2UgPSA8Pik7CisgICAgJGluc3RhbGxfYmFzZSA9fiBzL1xcL1wvL2c7CisgICAgJGluc3RhbGxfYmFzZSA9ICRkZWZhdWx0X2luc3RhbGxfYmFzZSBpZiAoJGluc3RhbGxfYmFzZSBlcSAiIik7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjYiKSB7Ci0gICAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkcGVybF9pbnN0YWxsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkcGVybF9pbnN0YWxsID0gImVuYWJsZWQiOwotICAgIH0KKyAgICAkaW5zdGFsbCA9ICEkaW5zdGFsbDsKKyAgfQorICBlbHNpZiAoJG9wdGlvbiBlcSAiMTQiKSB7CisgICAgJGluc3RhbGxfZGV2ZWwgPSAhJGluc3RhbGxfZGV2ZWw7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjciKSB7Ci0gICAgaWYgKCRsb2dnaW5nIGVxICJlbmFibGVkIikgewotICAgICAgJGxvZ2dpbmcgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRsb2dnaW5nID0gImVuYWJsZWQiOwotICAgIH0KKyAgICAkcGVybCA9ICEkcGVybDsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiOCIpIHsKLSAgICBpZiAoJGRlYnVnIGVxICJlbmFibGVkIikgewotICAgICAgJGRlYnVnID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkZGVidWcgPSAiZW5hYmxlZCI7Ci0gICAgfQorICAgICRwZXJsX2luc3RhbGwgPSAhJHBlcmxfaW5zdGFsbDsKICAgfQotICBlbHNpZiAoJG9wdGlvbiBlcSAiMTEiKSB7Ci0gICAgaWYgKCRsaW5rdHlwZSBlcSAic3RhdGljIikgewotICAgICAgJGxpbmt0eXBlID0gImR5bmFtaWMiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRsaW5rdHlwZSA9ICJzdGF0aWMiOwotICAgIH0KKyAgZWxzaWYgKCRvcHRpb24gZXEgIjkiKSB7CisgICAgJGxvZ2dpbmcgPSAhJGxvZ2dpbmc7CisgIH0KKyAgZWxzaWYgKCRvcHRpb24gZXEgIjEwIikgeworICAgICRkZWJ1ZyA9ICEkZGVidWc7CisgIH0KKyAgZWxzaWYgKCRvcHRpb24gZXEgIjEzIikgeworICAgICRsaW5rX2R5bmFtaWMgPSAhJGxpbmtfZHluYW1pYzsKICAgfQogICBlbHNpZiAobGMoJG9wdGlvbikgZXEgImYiKSB7CiAgICAgbGFzdDsKQEAgLTE3NywxNSArMTUxLDE2IEBACiAgIH0KIH0KIAotJGNvbmZpZ09wdHMgLj0gJG9wZW5zc2wgZXEgImVuYWJsZWQiID8gIi0td2l0aC1zc2wiIDogIiI7CitteSAkbGlua3R5cGUgPSAkbGlua19keW5hbWljID8gImR5bmFtaWMiIDogInN0YXRpYyI7CiskY29uZmlnT3B0cyAuPSAkb3BlbnNzbCA/ICItLXdpdGgtc3NsIiA6ICIiOwogJGNvbmZpZ09wdHMgLj0gIiAiOwotJGNvbmZpZ09wdHMgLj0gJHNkayBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXNkayIgOiAiIjsKKyRjb25maWdPcHRzIC49ICRzZGsgPyAiLS13aXRoLXNkayIgOiAiIjsKICRjb25maWdPcHRzIC49ICIgIjsKLSRjb25maWdPcHRzIC49ICRiX2lwdjYgZXEgImVuYWJsZWQiID8gIi0td2l0aC1pcHY2IiA6ICIiOworJGNvbmZpZ09wdHMgLj0gJGJfaXB2NiA/ICItLXdpdGgtaXB2NiIgOiAiIjsKICRjb25maWdPcHRzIC49ICIgIjsKLSRjb25maWdPcHRzIC49ICRiX3dpbmV4dGRsbCBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXdpbmV4dGRsbCIgOiAiIjsKKyRjb25maWdPcHRzIC49ICRiX3dpbmV4dGRsbCA/ICItLXdpdGgtd2luZXh0ZGxsIiA6ICIiOwogJGNvbmZpZ09wdHMgLj0gIiAiOwotJGNvbmZpZ09wdHMgLj0gJGRlYnVnIGVxICJlbmFibGVkIiA/ICItLWNvbmZpZz1kZWJ1ZyIgOiAiLS1jb25maWc9cmVsZWFzZSI7CiskY29uZmlnT3B0cyAuPSAkZGVidWcgPyAiLS1jb25maWc9ZGVidWciIDogIi0tY29uZmlnPXJlbGVhc2UiOwogCiAjIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKIApAQCAtMTkzLDE0MyArMTY4LDk0IEBACiAkRU5We05PX0VYVEVSTkFMX0RFUFN9PSIxIjsKIAogIyBTZXQgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIG1ha2UgdGVzdHMgY2FuIGxvY2F0ZSB0aGUgRExMCi0kRU5We1BBVEh9ID0gIiRjdXJyZW50X3B3ZFxcYmluXFwiIC4gKCRkZWJ1ZyBlcSAiZW5hYmxlZCIgPyAiZGVidWciIDogInJlbGVhc2UiICkgLiAiOyRFTlZ7UEFUSH0iOworJEVOVntQQVRIfSA9ICIkY3VycmVudF9wd2RcXGJpblxcIiAuICgkZGVidWcgPyAiZGVidWciIDogInJlbGVhc2UiICkgLiAiOyRFTlZ7UEFUSH0iOworCiskRU5We0lOQ0xVREV9IC49ICI7JG9wZW5zc2xpbmNkaXIiOworJEVOVntMSUJ9ICAgICAuPSAiOyRvcGVuc3NsbGliZGlyIjsKIAogIyBTZXQgTUlCRElSUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIG1ha2UgdGVzdHMgY2FuIGxvY2F0ZSB0aGUgbWlicwotbXkgJHRlbXBfbWliZGlyID0gIiRjdXJyZW50X3B3ZC8uLi9taWJzIjsKLSR0ZW1wX21pYmRpciA9fiBzL1xcL1wvL2c7Ci0kRU5We01JQkRJUlN9PSR0ZW1wX21pYmRpcjsKKyRFTlZ7TUlCRElSU30gPSBkaXJuYW1lKCRjdXJyZW50X3B3ZCkgLiAiL21pYnMiOwogCiAjIFNldCBTTk1QQ09ORlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBjb25mLnQgdGVzdCBjYW4gbG9jYXRlCiAjIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgogIyBTZWUgdGhlIG5vdGUgYWJvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBXaW4zMiBzZWN0aW9uIG9mCiAjIHBlcmwvU05NUC9SRUFETUUgZm9yIGRldGFpbHMgb24gd2h5IHRoaXMgaXMgbmVlZGVkLgotJEVOVntTTk1QQ09ORlBBVEh9PSJ0IjskRU5We1NOTVBDT05GUEFUSH07CiskRU5We1NOTVBDT05GUEFUSH09InQiOwogCiBwcmludCAiXG5CdWlsZGluZy4uLlxuIjsKIAotaWYgKCRsb2dnaW5nIGVxICJlbmFibGVkIikgewotICBwcmludCAiXG5DcmVhdGluZyAqLm91dCBsb2cgZmlsZXMuXG5cbiI7CitwcmludCAiXG5DcmVhdGluZyAqLm91dCBsb2cgZmlsZXMuXG5cbiI7CisKK3ByaW50ICJEZWxldGluZyBvbGQgbG9nIGZpbGVzLi4uXG4iOworc3lzdGVtKCJkZWwgKi5vdXQiIC4gKCRsb2dnaW5nID8gIiA+IE5VTDogMj4mMSIgOiAiIikpOworCisjIERlbGV0ZSBuZXQtc25tcC1jb25maWcuaCBmcm9tIG1haW4gaW5jbHVkZSBmb2xkZXIganVzdCBpbiBjYXNlIGl0IHdhcyBjcmVhdGVkIGJ5IGEgQ3lnd2luIG9yIE1pbkdXIGJ1aWxkCit1bmxpbmsgIi4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiOwordW5saW5rICIuLi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaCI7CisKK3ByaW50ICJSdW5uaW5nIENvbmZpZ3VyZS4uLlxuIjsKK3N5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT0kbGlua3R5cGUgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIiIC4gKCRsb2dnaW5nID8gIiA+IGNvbmZpZ3VyZS5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIGNvbmZpZ3VyZS5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCitwcmludCAiQ2xlYW5pbmcuLi5cbiI7CitzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gY2xlYW4iIC4gKCRsb2dnaW5nID8gIiA+IGNsZWFuLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworcHJpbnQgIkJ1aWxkaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKK3N5c3RlbSgibm1ha2UgL25vbG9nbyIgLiAoJGxvZ2dpbmcgPyAiID4gbWFrZS5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIG1ha2Uub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworaWYgKCRwZXJsKSB7CisgIGlmICghJGxpbmtfZHluYW1pYykgeworICAgIHByaW50ICJSdW5uaW5nIENvbmZpZ3VyZSBmb3IgRExMLi4uXG4iOworICAgIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT1keW5hbWljIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiIiAuICgkbG9nZ2luZyA/ICIgPiBwZXJsY29uZmlndXJlLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgcGVybGNvbmZpZ3VyZS5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCisgICAgcHJpbnQgIkNsZWFuaW5nIGxpYnJhcmllcy4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlic19jbGVhbiIgLiAoJGxvZ2dpbmcgPyAiID4+IGNsZWFuLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworICAgIHByaW50ICJCdWlsZGluZyBETEwgbGlicmFyaWVzLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzIiAuICgkbG9nZ2luZyA/ICIgPiBkbGwub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBkbGwub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKyAgfQorCisgIHByaW50ICJDbGVhbmluZyBQZXJsLi4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfY2xlYW4iIC4gKCRsb2dnaW5nID8gIiA+PiBjbGVhbi5vdXQgMj4mMSIgOiAiIikpOyAjIElmIGFscmVhZHkgY2xlYW5lZCwgTWFrZWZpbGUgaXMgZ29uZSBzbyBkb24ndCB3b3JyeSBhYm91dCBlcnJvcnMhCisKKyAgcHJpbnQgIkJ1aWxkaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmwiIC4gKCRsb2dnaW5nID8gIiA+IHBlcmxtYWtlLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgcGVybG1ha2Uub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworICBwcmludCAiVGVzdGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX3Rlc3QiIC4gKCRsb2dnaW5nID8gIiA+IHBlcmx0ZXN0Lm91dCAyPiYxIiA6ICIiKSk7ICMgRG9uJ3QgZGllIGlmIGFsbCB0aGUgdGVzdHMgZG9uJ3QgcGFzcy4uCisKKyAgaWYgKCRwZXJsX2luc3RhbGwpIHsKKyAgICBwcmludCAiSW5zdGFsbGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfaW5zdGFsbCIgLiAoJGxvZ2dpbmcgPyAiID4gcGVybGluc3RhbGwub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsaW5zdGFsbC5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworICB9CisKKyAgcHJpbnQgIlxuU2VlIHBlcmx0ZXN0Lm91dCBmb3IgUGVybCB0ZXN0IHJlc3VsdHNcbiI7CiB9CiAKLWlmICgkbG9nZ2luZyBlcSAiZW5hYmxlZCIpIHsKLSAgcHJpbnQgIkRlbGV0aW5nIG9sZCBsb2cgZmlsZXMuLi5cbiI7Ci0gIHN5c3RlbSgiZGVsICoub3V0ID4gTlVMOiAyPiYxIik7Ci0KLSAgIyBEZWxldGUgbmV0LXNubXAtY29uZmlnLmggZnJvbSBtYWluIGluY2x1ZGUgZm9sZGVyIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZCBieSBhIEN5Z3dpbiBvciBNaW5HVyBidWlsZAotICBzeXN0ZW0oImRlbCAuLlxcaW5jbHVkZVxcbmV0LXNubXBcXG5ldC1zbm1wLWNvbmZpZy5oID4gTlVMOiAyPiYxIik7Ci0KLSAgcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlLi4uXG4iOwotICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9JGxpbmt0eXBlIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiID4gY29uZmlndXJlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY29uZmlndXJlLm91dCkiOwotCi0gIHByaW50ICJDbGVhbmluZy4uLlxuIjsKLSAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGNsZWFuID4gY2xlYW4ub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIjsKLQotICBwcmludCAiQnVpbGRpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOwotICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gPiBtYWtlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgbWFrZS5vdXQpIjsKLQotICBpZiAoJHBlcmwgZXEgImVuYWJsZWQiKSB7Ci0gICAgaWYgKCRsaW5rdHlwZSBlcSAic3RhdGljIikgewotICAgICAgcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlIGZvciBETEwuLi5cbiI7Ci0gICAgICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9ZHluYW1pYyAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiA+IHBlcmxjb25maWd1cmUub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsY29uZmlndXJlLm91dCkiOwotCi0gICAgICBwcmludCAiQ2xlYW5pbmcgbGlicmFyaWVzLi4uXG4iOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnNfY2xlYW4gPj4gY2xlYW4ub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIjsKLQotICAgICAgcHJpbnQgIkJ1aWxkaW5nIERMTCBsaWJyYXJpZXMuLi5cbiI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlicyA+IGRsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGRsbC5vdXQpIjsKLSAgICB9Ci0KLSAgICBwcmludCAiQ2xlYW5pbmcgUGVybC4uLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfY2xlYW4gPj4gY2xlYW4ub3V0IDI+JjEiKTsgIyBJZiBhbHJlYWR5IGNsZWFuZWQsIE1ha2VmaWxlIGlzIGdvbmUgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzIQotCi0gICAgcHJpbnQgIkJ1aWxkaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybCA+IHBlcmxtYWtlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybG1ha2Uub3V0KSI7Ci0KLSAgICBwcmludCAiVGVzdGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfdGVzdCA+IHBlcmx0ZXN0Lm91dCAyPiYxIik7ICMgRG9uJ3QgZGllIGlmIGFsbCB0aGUgdGVzdHMgZG9uJ3QgcGFzcy4uCi0KLSAgICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgIHByaW50ICJJbnN0YWxsaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2luc3RhbGwgPiBwZXJsaW5zdGFsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxpbnN0YWxsLm91dCkiOwotICAgIH0KLQotICAgIHByaW50ICJcblNlZSBwZXJsdGVzdC5vdXQgZm9yIFBlcmwgdGVzdCByZXN1bHRzXG4iOwotICB9Ci0KLSAgcHJpbnQgIlxuIjsKLSAgaWYgKCRpbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJJbnN0YWxsaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbCA+IGluc3RhbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsLm91dCkiOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGwgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB0byAkaW5zdGFsbF9iYXNlXG4iOwotICB9Ci0KLSAgaWYgKCRpbnN0YWxsX2RldmVsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJJbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsX2RldmVsID4gaW5zdGFsbF9kZXZlbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGxfZGV2ZWwub3V0KSI7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbF9kZXZlbCB0byBpbnN0YWxsIHRoZSBkZXZlbG9wbWVudCBmaWxlcyB0byAkaW5zdGFsbF9iYXNlXG4iOwotICB9Ci0KLSAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImRpc2FibGVkIiAmJiAkcGVybCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBwZXJsX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXG4iOwotICB9CitwcmludCAiXG4iOworaWYgKCRpbnN0YWxsKSB7CisgIHByaW50ICJJbnN0YWxsaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGwiIC4gKCRsb2dnaW5nID8gIiA+IGluc3RhbGwub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CiB9CiBlbHNlIHsKLSAgc3lzdGVtKCJkZWwgKi5vdXQiKTsKKyAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIHRvICRpbnN0YWxsX2Jhc2VcbiI7Cit9CiAKLSAgIyBEZWxldGUgbmV0LXNubXAtY29uZmlnLmggZnJvbSBtYWluIGluY2x1ZGUgZm9sZGVyIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZCBieSBhIEN5Z3dpbiBvciBNaW5HVyBidWlsZAotICBzeXN0ZW0oImRlbCAuLlxcaW5jbHVkZVxcbmV0LXNubXBcXG5ldC1zbm1wLWNvbmZpZy5oID4gTlVMOiAyPiYxIik7CitpZiAoJGluc3RhbGxfZGV2ZWwpIHsKKyAgcHJpbnQgIkluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsX2RldmVsID4gaW5zdGFsbF9kZXZlbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGxfZGV2ZWwub3V0KSI7Cit9CitlbHNlIHsKKyAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbF9kZXZlbCB0byBpbnN0YWxsIHRoZSBkZXZlbG9wbWVudCBmaWxlcyB0byAkaW5zdGFsbF9iYXNlXG4iOworfQogCi0gIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT0kbGlua3R5cGUgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gY2xlYW4iKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28iKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotCi0gIGlmICgkcGVybCBlcSAiZW5hYmxlZCIpIHsKLSAgICBpZiAoJGxpbmt0eXBlIGVxICJzdGF0aWMiKSB7Ci0gICAgICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9ZHluYW1pYyAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlic19jbGVhbiIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlicyIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gICAgfQotCi0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfY2xlYW4iKTsgIyBJZiBhbHJlYWR5IGNsZWFuZWQsIE1ha2VmaWxlIGlzIGdvbmUgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzIQotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLQotICAgIG15ICRwYXRoX29sZCA9ICRFTlZ7UEFUSH07Ci0gICAgJEVOVntQQVRIfSA9ICIkY3VycmVudF9wd2RcXGJpblxcIiAuICgkZGVidWcgZXEgImVuYWJsZWQiID8gImRlYnVnIiA6ICJyZWxlYXNlIiApIC4gIjskRU5We1BBVEh9IjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF90ZXN0Iik7ICMgRG9uJ3QgZGllIGlmIGFsbCB0aGUgdGVzdHMgZG9uJ3QgcGFzcy4uCi0gICAgJEVOVntQQVRIfSA9ICRwYXRoX29sZDsKLQotICAgIGlmICgkcGVybF9pbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgICAgcHJpbnQgIkluc3RhbGxpbmcgUGVybCBtb2R1bGVzLi4uXG4iOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfaW5zdGFsbCIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gICAgfQotICB9Ci0KLSAgcHJpbnQgIlxuIjsKLSAgaWYgKCRpbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJJbnN0YWxsaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbCIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIHRvICRpbnN0YWxsX2Jhc2VcbiI7Ci0gIH0KLQotICBpZiAoJGluc3RhbGxfZGV2ZWwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIkluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGxfZGV2ZWwgPiBpbnN0YWxsX2RldmVsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbF9kZXZlbC5vdXQpIjsKLSAgfQotICBlbHNlIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsX2RldmVsIHRvIGluc3RhbGwgdGhlIGRldmVsb3BtZW50IGZpbGVzIHRvICRpbnN0YWxsX2Jhc2VcbiI7Ci0gIH0KLQotICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZGlzYWJsZWQiICYmICRwZXJsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJUeXBlIG5tYWtlIHBlcmxfaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNcbiI7Ci0gIH0KK2lmICgkcGVybCAmJiAhJHBlcmxfaW5zdGFsbCkgeworICBwcmludCAiVHlwZSBubWFrZSBwZXJsX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXG4iOwogfQogCiBwcmludCAiXG5Eb25lIVxuIjsKIAorIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHBlcmwKKyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMgaW5kZW50LXRhYnMtbW9kZTogbmlsCisjIEVuZDoKZGlmZiAtLWdpdCBhL3dpbjMyL2NvbmZpZy5oIGIvd2luMzIvY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MWNiOWEuLjAwMDAwMDAKLS0tIGEvd2luMzIvY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qCi0gKiBFdmVyeW9uZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBuZXcgc3R5bGUgY29uZmlnIGhlYWRlci4KLSAqIEZvciBub3csIHdlJ2xsIGRvIGl0IGZvciB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqLwotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgpkaWZmIC0tZ2l0IGEvd2luMzIvY29uZmlnLmguYm9ybGFuZCBiL3dpbjMyL2NvbmZpZy5oLmJvcmxhbmQKaW5kZXggM2FlZjZiYi4uNDdlMWIwNyAxMDA2NDQKLS0tIGEvd2luMzIvY29uZmlnLmguYm9ybGFuZAorKysgYi93aW4zMi9jb25maWcuaC5ib3JsYW5kCkBAIC0xNjQsOSArMTY0LDYgQEAKIC8qIElmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9ycyAqLwogI3VuZGVmIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBiY29weSBmdW5jdGlvbi4gICovCi0jdW5kZWYgSEFWRV9CQ09QWQotCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICAqLwogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQogCkBAIC0xODUsMjEgKzE4MiwxMiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB2c25wcmludGYgZnVuY3Rpb24uICAqLwogI2RlZmluZSBIQVZFX1ZTTlBSSU5URiAxCiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaW5kZXggZnVuY3Rpb24uICAqLwotI3VuZGVmIEhBVkVfSU5ERVgKLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBrdm1fb3BlbmZpbGVzIGZ1bmN0aW9uLiAgKi8KICN1bmRlZiBIQVZFX0tWTV9PUEVORklMRVMKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBscmFuZDQ4IGZ1bmN0aW9uLiAgKi8KICN1bmRlZiBIQVZFX0xSQU5ENDgKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1jcHkgZnVuY3Rpb24uICAqLwotI2RlZmluZSBIQVZFX01FTUNQWSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWVtbW92ZSBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAxCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmFuZCBmdW5jdGlvbi4gICovCiAjZGVmaW5lIEhBVkVfUkFORCAxCiAKQEAgLTIzOSw5ICsyMjcsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdGF0dmZzIGZ1bmN0aW9uLiAgKi8KICN1bmRlZiBIQVZFX1NUQVRWRlMKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJjaHIgZnVuY3Rpb24uICAqLwotI2RlZmluZSBIQVZFX1NUUkNIUiAxCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbiAqLwogI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQogCkBAIC00OTEsOSArNDc2LDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga3N0YXQgbGlicmFyeSAoLWxrc3RhdCkuICAqLwogI3VuZGVmIEhBVkVfTElCS1NUQVQKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBrdm0gbGlicmFyeSAoLWxrdm0pLiAgKi8KLSN1bmRlZiBIQVZFX0xJQktWTQotCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG0gbGlicmFyeSAoLWxtKS4gICovCiAjdW5kZWYgSEFWRV9MSUJNCiAKQEAgLTU0Myw5ICs1MjUsNiBAQAogLyogdHlwZSBjaGVjayBmb3IgaW5fYWRkcl90ICovCiAjZGVmaW5lIGluX2FkZHJfdCB1X2xvbmcKIAotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLQogLyogbWliIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgZXh0ZW5zaWJsZSB0cmVlLiAgVGhpcyBoYXMgYmVlbgogIGFzc2lnbmVkIHRvIFVDRGF2aXMgYnkgdGhlIGlhbmEgZ3JvdXAuICBPcHRpb25hbGx5LCBwb2ludCB0aGlzIHRvIHRoZQogIGxvY2F0aW9uIGluIHRoZSB0cmVlIHlvdXIgY29tcGFueS9vcmdhbml6YXRpb24gaGFzIGJlZW4gYWxsb2NhdGVkLiAqLwpAQCAtNzMyLDQzICs3MTEsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJlcnJvciBmdW5jdGlvbi4gICovCiAjZGVmaW5lIEhBVkVfU1RSRVJST1IgMQogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyIGluZGV4Ci0jIGRlZmluZSBzdHJyY2hyIHJpbmRleAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSMgZGVmaW5lIGluZGV4IHN0cmNocgotIyBkZWZpbmUgcmluZGV4IHN0cnJjaHIKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLQotCiAvKiBkZWZpbmUgcmFuZG9tIGZ1bmN0aW9ucyAqLwogCiAjaWZuZGVmIEhBVkVfUkFORE9NCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQgYi93aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQKaW5kZXggMGJkMGVlNS4uMTkyNWZiNyAxMDA2NDQKLS0tIGEvd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0CisrKyBiL3dpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dApAQCAtMSw1MjAgKzEsMzU5IEBACi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogUkVBRE1FLmJ1aWxkLndpbjMyCi0qCi0qIEF1dGhvcnM6IEFsZXggQnVyZ2VyIDxhbGV4X2JAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotKiAgICAgICAgICAKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1JbnRyb2R1Y3Rpb24KLT09PT09PT09PT09PQotCi1UaGlzIFJFQURNRSBvdXRsaW5lcyB0aGUgc3RlcHMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgYmluYXJ5IHJlbGVhc2UgZm9yCi1XaW5kb3dzIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGFuZCB0aGUgTnVsbFNvZnQgaW5zdGFsbGVyLgotCi1UaGVyZSBhcmUgZm91ciBzZWN0aW9uczoKLQotICBDb21waWxpbmcgYmluYXJpZXMKLQotICBDb21waWxpbmcgSFRNTEhlbHAgZmlsZQotCi0gIENvbWJpbmluZyB0aGUgYmluYXJpZXMgYW5kIEhUTUxIZWxwIGZpbGVzCi0KLSAgQnVsZGluZyBhIE51bGxTb2Z0IGluc3RhbGxlciBwYWNrYWdlCi0KLSAgQnVsZGluZyBhbiBPcGVuU1NMIHZlcnNpb24KLQotCi1Db21waWxpbmcgYmluYXJpZXMKLT09PT09PT09PT09PT09PT09PQotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotCi0gLVdpbmRvd3MgTlQvMjAwMC9YUAotIC1NU1ZDKysgNi4wIFNQNQotIC1BY3RpdmVQZXJsIDUuOC4yIGJ1aWxkIDgwOAotIC1nbnVfcmVnZXguZXhlICgwLjEyKSAtIGh0dHA6Ly9wZW9wbGUuZGVscGhpZm9ydW1zLmNvbS9namMvZ251X3JlZ2V4Lmh0bWwKLSAtUGxhdGZvcm0gU0RLCi0gLU1TWVMgLyBNaW5HVyAtb3ItIHRhci5leGUgYW5kIGd6aXAuZXhlCi0gLXdpbjMyL2Rpc3QgZm9sZGVyIGZyb20gTUFJTiBpbiBDVlMKLQotCi1CdWlsZGluZyB0aGUgbWFpbiBiaW5hcmllcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZTogIEFsbCBzaGVsbCBzdGVwcyBhcmUgdXNpbmcgdGhlIFdpbmRvdyBDTUQgcHJvbXB0IHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLgotCi1QYXJ0IDEKLS0tLS0tLQotCi0xLiAgRXh0cmFjdCBzb3VyY2UuICBUaGUgbG9jYXRpb24gd2lsbCBiZSByZWZlcmVuY2VzIGFzIChzb3VyY2UgZGlyKQotCi0yLiAgRGVsZXRlIGM6XHVzciBpZiBpdCBleGlzdHMgYW5kIHJlbmFtZSBOZXQtU05NUC5kbGwgaW4geW91ciAld2luZGlyJSBpZiB5b3UgCi0gICAgaGF2ZSBpdCBhbHJlYWR5ICh0byBlbnN1cmUgUGVybCB0ZXN0cyBhcmUgdXNpbmcgdGhlIGNvbXBpbGVkIERMTCkKLQotMy4gIEFwcGx5IGFueSByZXF1aXJlZCBwYXRjaGVzCi0KLTQuICBSZW1vdmUgdGhlIGV4YW1wbGUgTUlCIGZpbGVzOiAgCi0KLSAgICBFZGl0IHdpbjMyXG5ldC1zbm1wXGFnZW50XG1pYl9tb2R1bGVfY29uZmlnLmggYW5kIGNoYW5nZSB0aGUgZm9sbG93aW5nIGxpbmVzOgotCi0gICAgICAjZGVmaW5lIFVTSU5HX0VYQU1QTEVTX1VDRERFTU9QVUJMSUNfTU9EVUxFIDEKLSAgICAgICNkZWZpbmUgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUgMQotCi0gICAgdG86Ci0KLSAgICAgICN1bmRlZiBVU0lOR19FWEFNUExFU19VQ0RERU1PUFVCTElDX01PRFVMRQotICAgICAgI3VuZGVmIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLTUuICBjZCAoc291cmNlIGRpcilcd2luMzIKLQotNi4gIFJ1biBidWlsZC5iYXQKLQotNy4gIFNldCB0byB0aGUgZm9sbG93aW5nOgotCi0gICAgTmV0LVNOTVAgYnVpbGQgYW5kIGluc3RhbGwgb3B0aW9ucwotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAKLSAgICAxLiBPcGVuU1NMIHN1cHBvcnQ6ICAgICAgCQlkaXNhYmxlZAotICAgIDIuIFBsYXRmb3JtIFNESyBzdXBwb3J0OiAJCWVuYWJsZWQgICAgICAgICAqKioKLSAgICAKLSAgICAzLiBJbnN0YWxsIHBhdGg6ICAgICAgICAgCQljOi91c3IKLSAgICA0LiBJbnN0YWxsIGFmdGVyIGJ1aWxkOiAgCQllbmFibGVkCi0gICAgCi0gICAgNS4gUGVybCBtb2R1bGVzOiAgICAgICAgIAkJZW5hYmxlZCAgICAgICAgICoqKgotICAgIDYuIEluc3RhbGwgcGVybCBtb2R1bGVzOiAJCWRpc2FibGVkCi0gICAgCi0gICAgNy4gUXVpZXQgYnVpbGQgKGxvZ2dlZCk6IAkJZW5hYmxlZAotICAgIDguIERlYnVnIG1vZGU6ICAgICAgICAgICAJCWRpc2FibGVkCi0gICAgOS4gSVB2NiB0cmFuc3BvcnRzOiAgICAgIAkJZGlzYWJsZWQKLQotICAgIDEwLiBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYwotCi0gICAgMTEuIEluc3RhbGwgZGV2ZWxvcG1lbnQgZmlsZXMgICAJZW5hYmxlZCAgICAgICAgICoqKgotICAgIAotICAgIEYuICBGaW5pc2hlZCAtIHN0YXJ0IGJ1aWxkCi0gICAgUS4gIFF1aXQgLSBhYm9ydCBidWlsZAotICAgIAotICAgIFNlbGVjdCBvcHRpb24gdG8gc2V0IC8gdG9nZ2xlOgotCi04LiAgRiB0byBzdGFydCB0aGUgYnVpbGQgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBidWlsdCBvawotCi05LiAgRGVsZXRlIGFueSBnZW5lcmF0ZWQgY29uZmlnIGZpbGVzIGZyb20gYzpcdXNyXHNubXBccGVyc2lzdAotCi1QYXJ0IDIgLSBDb21waWxpbmcgd2luRXh0RExMCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEwLiBNb2RpZnkgZmlsZXMgYXMgZXhwbGFpbmVkIGluIFJFQURNRS53aW4zMiBzZWN0aW9uICdSdW5uaW5nIE5ldC1TTk1QIGFzCi0gICAgYSByZXBsYWNlbWVudCBmb3IgdGhlIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2UnIC0gJ0NvbXBpbGluZyBOZXQtU05NUCB3aXRoIAotICAgIHRoZSB3aW5FeHRETEwgZXh0ZW5zaW9uIChNU1ZDKScuCi0KLTExLiAgU2V0IHRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBOZXQtU05NUCBidWlsZCBhbmQgaW5zdGFsbCBvcHRpb25zCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIAotICAgIDEuIE9wZW5TU0wgc3VwcG9ydDogICAgICAJCWRpc2FibGVkCi0gICAgMi4gUGxhdGZvcm0gU0RLIHN1cHBvcnQ6IAkJZW5hYmxlZCAgICAgICAgICoqKgotICAgIAotICAgIDMuIEluc3RhbGwgcGF0aDogICAgICAgICAJCWM6L3VzcgotICAgIDQuIEluc3RhbGwgYWZ0ZXIgYnVpbGQ6ICAJCWRpc2FibGVkICAgICAgICAqKioKLSAgICAKLSAgICA1LiBQZXJsIG1vZHVsZXM6ICAgICAgICAgCQlkaXNhYmxlZAotICAgIDYuIEluc3RhbGwgcGVybCBtb2R1bGVzOiAJCWRpc2FibGVkCi0gICAgCi0gICAgNy4gUXVpZXQgYnVpbGQgKGxvZ2dlZCk6IAkJZW5hYmxlZAotICAgIDguIERlYnVnIG1vZGU6ICAgICAgICAgICAJCWRpc2FibGVkCi0gICAgOS4gSVB2NiB0cmFuc3BvcnRzOiAgICAgIAkJZGlzYWJsZWQKLQotICAgIDEwLiBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYwotCi0gICAgMTEuIEluc3RhbGwgZGV2ZWxvcG1lbnQgZmlsZXMgICAJZGlzYWJsZWQKLSAgICAKLSAgICBGLiAgRmluaXNoZWQgLSBzdGFydCBidWlsZAotICAgIFEuICBRdWl0IC0gYWJvcnQgYnVpbGQKLSAgICAKLSAgICBTZWxlY3Qgb3B0aW9uIHRvIHNldCAvIHRvZ2dsZToKLQotMTIuIEYgdG8gc3RhcnQgdGhlIGJ1aWxkIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgYnVpbHQgb2sKLQotMTMuIENvcHkgdGhlIG5ldyBiaW5hcnk6Ci0KLSAgICBjb3B5IGJpblxyZWxlYXNlXHNubXBkLmV4ZSBjOlx1c3JcYmluXHNubXBkLXdpbkV4dERMTC5leGUKLQotMTQuIFRlc3QgZWFjaCBiaW5hcnkgYnkgcnVubmluZyBlYWNoIG9uZSB3aXRoIC1Ed2luRXh0RExMLiAgTWFrZSBzdXJlIG9ubHkgdGhlCi0gICAgd2luRXh0RExMIHZlcnNpb24gaGFzIGRlYnVnIG91dHB1dC4KLQotCi1QYXJ0IDMgLSBDcmVhdGluZyB0aGUgUGVybCBwYWNrYWdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuICBjZCAoc291cmNlIGRpcikKLSAgICBjZCBwZXJsCi0KLTIuICBubWFrZSBwcGQKLQotMy4gIE9wZW4gYW4gTVNZUyBzaGVsbCAodW5sZXNzIHlvdSBoYXZlIHRhci5leGUgYW5kIGd6aXAuZXhlKQotCi00LiAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY2QgcGVybAotCi01LiAgdGFyIGN2ZiBOZXRTTk1QLnRhciBibGliOyBnemlwIC0tYmVzdCBOZXRTTk1QLnRhcgotCi02LiAgT3BlbiBhIFdpbmRvd3MgY29tbWFuZCBwcm9tcHQgKENNRCkgYW5kIGNkIChzb3VyY2UgZGlyKVxwZXJsCi0KLTcuICByZW4gQnVuZGxlLU5ldFNOTVAucHBkIE5ldFNOTVAucHBkCi0KLTguICBNb2RpZnkgTmV0U05NUC5wcGQgdG8gbG9vayBsaWtlIHRoZSBmb2xsb3dpbmcuICBDaGFuZ2UgdGhlIAotICAgIFZFUlNJT049IngseCx4LHgiIGxpbmUgdG8gdGhlIGNvcnJlY3QgdmFsdWVzLiAgRG8gTk9UIGNoYW5nZSAKLSAgICAqIGxpbmVzIGluIHRoZSBvcmlnaW5hbCBmaWxlLgotCi08U09GVFBLRyBOQU1FPSJOZXRTTk1QIiBWRVJTSU9OPSI1LDIsMCwwIj4KLSAgICA8VElUTEU+TmV0LVNOTVA8L1RJVExFPgotICAgIDxBQlNUUkFDVD5PYmplY3QgT3JpZW50ZWQgSW50ZXJmYWNlIHRvIE5ldC1TTk1QPC9BQlNUUkFDVD4KLSAgICA8QVVUSE9SPjwvQVVUSE9SPgotICAgIDxJTVBMRU1FTlRBVElPTj4KLSogICAgICAgIDxPUyBOQU1FPSJNU1dpbjMyIiAvPgotKiAgICAgICAgPEFSQ0hJVEVDVFVSRSBOQU1FPSJNU1dpbjMyLXg4Ni1tdWx0aS10aHJlYWQtNS44IiAvPgotICAgICAgICA8Q09ERUJBU0UgSFJFRj0ieDg2L05ldFNOTVAudGFyLmd6IiAvPgotICAgIDwvSU1QTEVNRU5UQVRJT04+Ci08L1NPRlRQS0c+Ci0KLTkuICBDcmVhdGUgYmFzZSBkaXJlY3RvcmllczoKLQotICAgIG1kICJjOlx1c3JcZG9jcyIKLSAgICBtZCAiYzpcdXNyXHBlcmwiCi0gICAgbWQgImM6XHVzclxwZXJsXHg4NiIKLSAgICBtZCAiYzpcdXNyXHRlbXAiCi0KLTEwLiBDb3B5IGZpbGVzOgotCi0gICAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY29weSBDT1BZSU5HICJjOlx1c3JcZG9jcyIKLSAgICBjb3B5IHdpbjMyXGRpc3RcUkVBRE1FLnR4dCAiYzpcdXNyIgotICAgIGNvcHkgd2luMzJcZGlzdFxzY3JpcHRzXG5ldC1zbm1wLXBlcmwtdGVzdC5wbCAiYzpcdXNyXGJpbiIKLQotICAgIGNvcHkgcGVybFxOZXRTTk1QLnBwZCAiYzpcdXNyXFBlcmwiCi0gICAgY29weSBwZXJsXE5ldFNOTVAudGFyLmd6ICJjOlx1c3JcUGVybFx4ODYiCi0KLTExLiBVcGRhdGUgdGhlIEJVSUxEIElORk9STUFUSU9OIHNlY3Rpb24gb2YgYzpcdXNyXFJFQURNRS50eHQKLQotCi1Db21waWxpbmcgSFRNTEhlbHAgZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBzZWN0aW9uIG91dGxpbmVzIHRoZSBzdGVwcyByZXF1aXJlZCB0byBidWlsZCBhIFdpbmRvd3MgSFRNTCBIZWxwIGZpbGUKLWJhc2VkIG9uIHRoZSBOZXQtU05NUCBtYW4gcGFnZXMsIFJFQURNRSBmaWxlcywgUGVybGRvYyBkb2N1bWVudGF0aW9uIGV0Yy4KLQotUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0KLQotIC1MaW51eCAob3Igc2ltaWxhcikgd2l0aDoKLSAgIC1tYW4gKG1hbiBwYWdlIHZpZXdlcikKLSAgIC10aWR5IChIVE1MIHRpZHkgLSBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQpCi0gICAtUGVybAotICAgLXBlcmxkb2MKLSAgIC1tYW4yaHRtbDMuMC4xLnRhci5neiAoaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZWhvb2QvbWFuMmh0bWwzLjAuMS8pCi0gICAgTm90ZTogIE1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBjb21lIHdpdGggbWFuMmh0bWwgYXMgcGFydCBvZiB0aGUgbWFuIHJwbQotICAgICAgICAgICBwYWNrYWdlIHdoaWNoIGlzIG5vdCB0aGUgc2FtZSBhcyBtYW4yaHRtbCBmcm9tIG1hbjJodG1sMy4wLjEudGFyLmd6LgotICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWVkZWQgZnJvbSBtYW4yaHRtbDMuMC4xLnRhci5neiBpcyB0aGUgbWFuMmh0bWwgc2NyaXB0LiAgCi0gICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBkbyBhIGNvbXBsZXRlIGluc3RhbGwgKG1ha2UvbWFrZSBpbnN0YWxsKSBidXQgeW91Ci0gICAgICAgICAgIGRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzY3JpcHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYnkgc2V0dGluZyB0aGUKLSAgICAgICAgICAgbWFuIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyBldGMgZm9yIHRoZSBPUyBmcm9tIGluc2lkZSBvZiB0aGUgc2NyaXB0LgotCi0gLVdpbmRvd3Mgd2l0aDoKLSAgIC1IVE1MIEhlbHAgV29ya3Nob3AgKFNlYXJjaCBtc2RuLm1pY3Jvc29mdC5jb20gZm9yICdodG1sIGhlbHAgd29ya3Nob3AgZG93bmxvYWQnKQotCi0KLUNvbnZlcnQgZG9jdW1lbnRzIHRvIGh0bWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZTogIFRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGNvbXBsZXRlZCB1c2luZyBMaW51eC4KLQotTm90ZTogIEEgdGVtcG9yYXJ5IGxvY2F0aW9uIG9mIC90bXAvbmV0LXNubXAgaXMgdXNlZC4KLQotMS4gIEV4dHJhY3QgTmV0LVNOTVAgc291cmNlIGFuZCBjZCAoc291cmNlIGRpcikKLQotMi4gIGNkIChzb3VyY2UgZGlyKQotCi0zLiAgY3AgcGVybC9TTk1QL1JFQURNRSBSRUFETUUucGVybAotCi00LiAgUmVtb3ZlIG9sZGVyIGNvcGllcyBvZiBjb252ZXJ0ZWQgZmlsZXM6Ci0KLSAgICBybSAtUiAtZiAvdG1wL25ldC1zbm1wCi0KLTUuICBCdWlsZCBOZXQtU05NUCBtYW4gcGFnZXM6IAotCi0gICAgLi9jb25maWd1cmUgLS1wcmVmaXg9YzovdXNyOyBtYWtlIHNlZHNjcmlwdDsgY2QgbWFuO21ha2U7IGNkIC4uCi0KLTYuICBJbnN0YWxsIG9ubHkgdGhlIG1hbiBmaWxlcyB0byAvdGVtcC9uZXQtc25tcDoKLQotICAgIGNkIG1hbjsgbWFrZSBpbnN0YWxsIHByZWZpeD0vdG1wL25ldC1zbm1wOyBjZCAuLgotCi03LiAgR28gdG8gdGhlIHNjcmlwdHMgZm9sZGVyIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBzY3JpcHRzIGFyZSBleGVjdXRhYmxlOgotCi0gICAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY2Qgd2luMzIvZGlzdC9zY3JpcHRzOyBjaG1vZCAreCAqCi0KLTguICBFZGl0IHRoZXNlIGZpbGVzIGFuZCBtYWtlIHN1cmUgdGhlIHBhdGhzIGFyZSBjb3JyZWN0IGluIHRoZSBPUFRJT05TIAotICAgIHNlY3Rpb24uICBBbHNvIGVuc3VyZSB0aGUgbGlzdCBvZiBSRUFETUUgZmlsZXMgYW5kIFBlcmwgbW9kdWxlcyAKLSAgICBhcmUgY29ycmVjdCBpbiByZWFkbWUyaHRtbCBhbmQgcG9kZGlyMmh0bWwuCi0KLSAgICBtYW5kaXIyaHRtbAotICAgIHJlYWRtZTJodG1sCi0gICAgcG9kZGlyMmh0bWwKLQotICAgIE5vdGU6ICBtYW5kaXIyaHRtbCB3aWxsIHByb2Nlc3MgQUxMIG1hbiBwYWdlcyBpbiBjOlx0ZW1wXG5ldC1zbm1wIHdoaWxlCi0gICAgICAgICAgIHJlYWRtZTJodG1sIGFuZCBwb2RkaXIyaHRtbCB3aWxsIG9ubHkgcHJvY2VzcyBmaWxlcyBsaXN0ZWQgaW4gdGhlCi0gICAgICAgICAgIHNjcmlwdC4gIElmIG5ldyBtYW4gcGFnZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHRoZSBUYWJsZSBvZiAKLSAgICAgICAgICAgQ29udGVudHMgKHRvYy5oaGMpIGFuZCBwcm9qZWN0IGZpbGUgKE5ldC1TTk1QLmhocCkgbmVlZCB0byBiZSAKLSAgICAgICAgICAgdXBkYXRlZCBieSBoYW5kLgotCi05LiAgUnVuIGVhY2ggc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSAuaHRtbCBmaWxlczoKLQotICAgIC4vbWFuZGlyMmh0bWw7IC4vcmVhZG1lMmh0bWw7IC4vcG9kZGlyMmh0bWwKLQotICAgIE5vdGU6ICBUaGVyZSB3aWxsIGJlIG1hbnkgd2FybmluZ3MgZnJvbSB0aWR5IHdoaWNoIGNhbiBiZSBpZ25vcmVkLgotCi0xMC4gVmVyaWZ5IGVhY2ggY29udmVydGVkIGZpbGUgdG8gZW5zdXJlIGFsbCB0aGUgbGlua3MgYXJlIGNvcnJlY3QuICBUaGUgZmlsZXMKLSAgICBhcmUgbG9jYXRlZCBpbiAvdG1wL25ldC1zbm1wL2h0bWwgYnkgZGVmYXVsdC4gIEluIHNvbWUgaW5zdGFuY2VzLCBVUkxzIG1heSBiZSAKLSAgICBzcGxpdCBhY3Jvc3MgdHdvIGxpbmVzIHN1Y2ggYXMgdGhlIFZhcmlhYmxlcyBsaW5rIGF0IHRoZSBib3R0b20gb2YgCi0gICAgL3RtcC9uZXQtc25tcC9odG1sL21hbjgtc25tcHRyYXBkLjguaHRtbC4KLQotMTEuIElmIG5ldyBtYW4gcGFnZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHRoZSBUYWJsZSBvZiBDb250ZW50cyAoTmV0LVNOTVAuaGhjKSBhbmQKLSAgICBwcm9qZWN0IGZpbGUgKE5ldC1TTk1QLmhocCkgbmVlZCB0byBiZSB1cGRhdGVkIGJ5IGhhbmQuCi0KLTEyLiBDb252ZXJ0IEVYQU1QTEUuY29uZi53aW4zMiB0byBodG1sOgotCi0gICAgLi90eHQyaHRtbCAuLi8uLi9FWEFNUExFLmNvbmYud2luMzIgfCB0aWR5ID4gL3RtcC9uZXQtc25tcC9odG1sL0VYQU1QTEUuY29uZi53aW4zMi5odG1sCi0gICAgCi0KLUJ1aWxkIE5ldC1TTk1QLmNobQotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vdGU6ICBUaGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBjb21wbGV0ZWQgdXNpbmcgV2luZG93cy4KLQotTm90ZTogIEEgdGVtcG9yYXJ5IGxvY2F0aW9uIG9mIGM6XHRlbXBcbmV0LXNubXAgaXMgdXNlZC4KLQotMS4gIFRyYW5zZmVyIC90bXAvbmV0LXNubXAvaHRtbCBmcm9tIExpbnV4IHRvIGM6XHRlbXBcbmV0LXNubXBcaHRtbAotCi0yLiAgR3JhYiB0aGUgRkFRIGZyb20gdGhlIHdlYiBzaXRlLCBzdHJpcCBvdXQgdGhlIGluY2x1ZGVzIGFuZCBzYXZlIGFzCi0gICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXEZBUS5odG1sIGFuZCBydW46Ci0KLSAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxGQVEuaHRtbAotCi0zLiAgR3JhYiB0aGUgRGV2bG9wZXIgRkFRIGZyb20gdGhlIHdlYiBzaXRlLCBzdHJpcCBvdXQgdGhlIGluY2x1ZGVzIGFuZCBzYXZlIGFzCi0gICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXERldmVsb3Blcl9GQVEuaHRtbCBhbmQgcnVuOgotCi0gICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRGV2ZWxvcGVyX0ZBUS5odG1sCi0KLTQuICBDb3B5IHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8gYzpcdGVtcFxuZXQtc25tcFxodG1sOgotCi0gICAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxDb25maWd1cmF0aW9uX092ZXJ2aWV3Lmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXEhlbHBfQ2F2ZWF0cy5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxJbnRyb2R1Y3Rpb24uaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcTmV0LVNOTVAuaGhjIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxOZXQtU05NUC5oaHAiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXG5ldC1zbm1wLTQuMi04MDAuanBnIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcGQuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0KLTUuICBOZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIG5ldyByZWxlYXNlIG9mCi0gICAgTmV0LVNOTVAsIHNvIHRoZSAqLmNvbmYud2luMzIuaHRtbCBmaWxlcyBzaG91bGQgYmUgdXBkYXRlZC4KLQotICAgIENyZWF0ZSBhIHRleHQgZmlsZSB3aXRoIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzbm1wZCBhbmQgCi0gICAgc25tcHRyYXBkIHVzaW5nOgotCi0gICAgY2Qgd2luMzJcYmluXHJlbGVhc2UgKGZvbGRlciBvZiAqV2luZG93cyogY29tcGlsZWQgTmV0LVNOTVApCi0gICAgc25tcHRyYXBkIC1IIDI+IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQub3B0aW9ucwotICAgIHNubXBkIC1IIDI+IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5vcHRpb25zCi0KLSAgICBVcGRhdGUgdGhlc2UgZmlsZXMgdXNpbmcgYW4gSFRNTCBlZGl0b3IgKE1vemlsbGEgZXRjKToKLQotICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wLmNvbmYud2luMzIuaHRtbAotICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5jb25mLndpbjMyLmh0bWwKLSAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbAotIAotICAgIE9ubHkgYWRkIHRoZSByZWxldmVudCBzZWN0aW9uIHRvIGVhY2ggZmlsZSBmcm9tIHRoZSAub3B0aW9ucyBmaWxlcwotICAgIGNyZWF0ZWQgYWJvdmUsIGVuc3VyZSB0aGUgZm9udCBpcyBzZXQgdG8gZml4ZWQgd2lkdGguCi0KLSAgICBUaWR5IGVhY2ggZmlsZSB1c2luZyB0aWR5IHVuZGVyIFdpbmRvd3MgKG9yIHRyYW5zZmVyIHRvIExpbnV4IGFuZCB0aWR5Ci0gICAgdXNpbmcgTGludXgpOgotCi0gICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbAotICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLmNvbmYud2luMzIuaHRtbAotICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXAuY29uZi53aW4zMi5odG1sCi0KLTYuICBFZGl0IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHAgYW5kIHVwZGF0ZSB0aGUgdmVyc2lvbiBmb3IgdGhlIAotICAgICdUaXRsZScgdmFyaWFibGUuCi0KLTcuICBSdW4gSFRNTCBXb3Jrc2hvcAotCi04LiAgT3BlbiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwCi0KLTkuICBDbGljayBGaWxlIC0gQ29tcGlsZQotCi0xMC4gU2VsZWN0ICdDOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwJyBhcyB0aGUgZmlsZW5hbWUKLQotMTEuIENsaWNrIENvbXBpbGUKLQotMTIuIFlvdSBzaG91bGQgbm93IGhhdmUgYSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuY2htIGZpbGUuCi0KLTEzLiBMYXVuY2ggdGhlIGZpbGUgYW5kIGVuc3VyZSBldmVyeSBjb250ZW50IGl0ZW0gZGlzcGxheXMgdGhlIGNvcnJlY3QgcGFnZS4KLQotCi1Db21iaW5pbmcgdGhlIGJpbmFyaWVzIGFuZCBIVE1MSGVscCBmaWxlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotMS4gIENvcHkgdGhlIEhUTUwgSGVscCBmaWxlIHRvIGM6XHVzclxkb2NzOgotCi0gICAgY29weSBjOlx0ZW1wXE5ldC1TTk1QXGh0bWxcTmV0LVNOTVAuY2htIGM6XHVzclxkb2NzXAotCi0KLUJ1bGRpbmcgYSBOdWxsU29mdCBpbnN0YWxsZXIgcGFja2FnZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tCi0KLSAtV2luZG93cwotIC1OdWxsc29mdCBTY3JpcHRhYmxlIEluc3RhbGwgU3lzdGVtIDIuMCAtIGh0dHA6Ly9uc2lzLnNvdXJjZWZvcmdlLm5ldC9ob21lLwotCi0xLiAgQ29tcGxldGUgdGhlIHRocmVlIHNlY3Rpb25zIGFib3ZlOiAgJ0NvbXBpbGluZyBiaW5hcmllcycsICdDb21waWxpbmcgCi0gICAgSFRNTEhlbHAgZmlsZScgYW5kICdDb21iaW5pbmcgdGhlIGJpbmFyaWVzIGFuZCBIVE1MSGVscCBmaWxlcycuICBOZXQtU05NUAotICAgIHNob3VsZCBiZSBsb2NhdGVkIGluIGM6XHVzci4KLQotMi4gIENvcHkgdGhlIGZvbGxvd2luZyBmaWxlcyB0byBjOlx1c3I6Ci0KLSAgICBjZCAoc291cmNlIGRpcikKLSAgICBjb3B5IHdpbjMyXGRpc3RcaW5zdGFsbGVyXFNldEVuVmFyLm5zaSBjOlx1c3JcCi0gICAgY29weSB3aW4zMlxkaXN0XGluc3RhbGxlclxuZXQtc25tcC5uc2kgYzpcdXNyXAotICAgIGNvcHkgd2luMzJcZGlzdFxpbnN0YWxsZXJcQWRkMlBhdGgubnNpIGM6XHVzclwKLSAgICBjb3B5IHdpbjMyXGRpc3RcaW5zdGFsbGVyXG5ldC1zbm1wLWhlYWRlcjEuYm1wIGM6XHVzclwKLQotMy4gIENyZWF0ZSB0aGUgZm9sbG93aW5nIGVtcHR5IGZpbGVzOgotCi0gICAgZWNobyAuID4gYzpcdXNyXHJlZ2lzdGVyYWdlbnQuYmF0Ci0gICAgZWNobyAuID4gYzpcdXNyXHVucmVnaXN0ZXJhZ2VudC5iYXQKLSAgICBlY2hvIC4gPiBjOlx1c3JccmVnaXN0ZXJ0cmFwZC5iYXQKLSAgICBlY2hvIC4gPiBjOlx1c3JcdW5yZWdpc3RlcnRyYXBkLmJhdAotICAgIGVjaG8gLiA+IGM6XHVzclxldGNcc25tcFxzbm1wLmNvbmYKLQotNC4gIEVkaXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW4gYzpcdXNyXG5ldC1zbm1wLm5zaToKLQotICAgIFBST0RVQ1RfTUFKX1ZFUlNJT04KLSAgICBQUk9EVUNUX01JTl9WRVJTSU9OCi0gICAgUFJPRFVDVF9SRVZJU0lPTgotICAgIFBST0RVQ1RfRVhFX1ZFUlNJT04KLQotICAgIEZvciBleGFtcGxlLCBmb3IgNS4xLjI6Ci0KLSAgICBQUk9EVUNUX01BSl9WRVJTSU9OICI1IgotICAgIFBST0RVQ1RfTUlOX1ZFUlNJT04gIjEiCi0gICAgUFJPRFVDVF9SRVZJU0lPTiAiMiIKLSAgICBQUk9EVUNUX0VYRV9WRVJTSU9OICIxIgotCi0gICAgVGhlIGdlbmVyYXRlZCBmaWxlbmFtZSB3b3VsZCBiZTogbmV0LXNubXAtNS4xLjItMS53aW4zMi5leGUKLQotICAgIFBST0RVQ1RfRVhFX1ZFUlNJT04gaXMgdXN1YWxseSAxIHVubGVzcyB0aGUgYmluYXJ5IHBhY2thZ2UgaXMgcmUtcmVsZWFzZWQKLSAgICBkdWUgdG8gcGFja2FnaW5nIGlzc3Vlcy4gIEZvciBwcmUgcmVsZWFzZXMsIGluY2x1ZGUgdGhlIHByZS1yZWxlYXNlIHZlcnNpb24gCi0gICAgaW4gUFJPRFVDVF9SRVZJU0lPTi4gICBGb3IgZXhhbXBsZSwgZm9yIDUuMS4yIHByZTIgdXNlOgotCi0gICAgUFJPRFVDVF9NQUpfVkVSU0lPTiAiNSIKLSAgICBQUk9EVUNUX01JTl9WRVJTSU9OICIxIgotICAgIFBST0RVQ1RfUkVWSVNJT04gIjIucHJlMiIKLSAgICBQUk9EVUNUX0VYRV9WRVJTSU9OICIxIgotCi0gICAgVGhpcyB3aWxsIGVuc3VyZSB0aGUgdmVyc2lvbiBudW1iZXIgaXMgdmlzaWJsZSBkdXJpbmcgaW5zdGFsbGF0aW9uLgotCi0gICAgVGhlIGdlbmVyYXRlZCBmaWxlbmFtZSB3b3VsZCBiZTogbmV0LXNubXAtNS4xLjIucHJlMi0xLndpbjMyLmV4ZQotCi01LiAgTGF1bmNoIHRoZSAnTnVsbHNvZnQgSW5zdGFsbCBTeXN0ZW0gKE5TSVMgMi4wKScKLQotNi4gIFNlbGVjdCAnTWFrZU5TSVNXIChjb21waWxlciBpbnRlcmZhY2UpJwotCi03LiAgQ2xpY2sgRmlsZSAtIExvYWQgU2NyaXB0Ci0KLTguICBTZWxlY3QgYzpcdXNyXG5ldC1zbm1wLm5zaQotCi05LiAgWW91IHNob3VsZCBub3cgaGF2ZSBhIGM6XHVzclxOZXQtU05NUC14LngueC14LmV4ZSBiaW5hcnkgaW5zdGFsbGVyIAotICAgIHBhY2thZ2UKLQotMTAuIFRlc3QgdGhlIHBhY2thZ2UKLQotMTEuIENvbXBhcmUgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBvZiB0aGUgY29tcGlsZWQgZm9sZGVyIHdpdGggdGhlIGluc3RhbGxlZAotICAgIGZvbGRlciB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1pc3NpbmcgTUlCIGZpbGVzIGV0Yy4gIE1vZGlmeSBuZXQtc25tcC5uc2kKLSAgICBhbmQgcmVidWlsZCBpZiByZXF1aXJlZC4KLQotMTIuIENyZWF0ZSBhIC56aXAgZmlsZSBvZiBjOlx1c3IgZm9yIGFyY2hpdmUgcHVycG9zZXMuCi0KLQotQnVsZGluZyBhbiBPcGVuU1NMIHZlcnNpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tCi0KLSAtT3BlblNTTCBiaW5hcnkgZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbAotCi0xLiAgSW5zdGFsbCB0aGUgT3BlblNTTCBiaW5hcnksIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcyBleHBsYWluZWQgaW4gCi0gICAgJ1VzaW5nIGEgcHJlLWNvbXBpbGVkIHZlcnNpb24nIG9mIHRoZSAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyB3aXRoIAotICAgIE9wZW5TU0wnIHNlY3Rpb24gb2YgUkVBRE1FLndpbjMyLgotCi0yLiAgTW92ZSBjOlx1c3IgYzpcdXNyLnRlbXAKLQotMy4gIFJlLWJ1aWxkIHRoZSBiaW5hcnkgYnkgZm9sbG93aW5nIHRoZSBzdGVwcyBpbiB0aGUgc2VjdGlvbiAnQnVpbGRpbmcgdGhlIAotICAgIG1haW4gYmluYXJpZXMnIGV4Y2VwdCBlbmFibGUgT3BlblNTTC4gIEJlIHN1cmUgdG8gdW5kbyB0aGUgd2luRXh0RExMIAotICAgIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nIGJ5IGNvcHlpbmcgYSBmcmVzaCBuZXQtc25tcC1jb25maWcuaC5pbiBhbmQgCi0gICAgbmV0c25tcG1pYnNzZGsuZHNwLgotCi00LiAgQ29weSBjb250ZW50cyBvZiBjOlx1c3IgdG8gYzpcdXNyLnRlbXAKLQotNS4gIERlbGV0ZSBjOlx1c3IKLQotNi4gIE1vdmUgYzpcdXNyLnRlbXAgYzpcdXNyCi0KLTcuICBVcGRhdGUgdGhlIEJVSUxEIElORk9STUFUSU9OIHNlY3Rpb24gb2YgYzpcdXNyXFJFQURNRS50eHQgdG8gaW5jbHVkZSB0aGUgU1NMIAotICAgIGluZm8gYW5kIHRoZSBmaWxlbmFtZS4KLQotOC4gIFVwZGF0ZSB0aGUgdmVyc2lvbiBzdGFtcCBpbiBjOlx1c3JcbmV0LXNubXAubnNpIHRvIGluY2x1ZGUgLXNzbC4gIEV4YW1wbGU6Ci0KLSAgICBGb3IgZXhhbXBsZSwgZm9yIDUuMy4wOgotCi0gICAgUFJPRFVDVF9NQUpfVkVSU0lPTiAiNSIKLSAgICBQUk9EVUNUX01JTl9WRVJTSU9OICIzIgotICAgIFBST0RVQ1RfUkVWSVNJT04gIjAtc3NsIgotICAgIFBST0RVQ1RfRVhFX1ZFUlNJT04gIjEiCi0KLSAgICBUaGUgZ2VuZXJhdGVkIGZpbGVuYW1lIHdvdWxkIGJlOiBuZXQtc25tcC01LjMuMC1zc2wtMS53aW4zMi5leGUKLQotOS4gIEluIGM6XHVzclxuZXQtc25tcC5uc2ksIGNoYW5nZToKLQotICAgICFkZWZpbmUgT1BFTlNTTF9SRVFVSVJFRCAiMCIKLQotICAgIHRvCi0KLSAgICAhZGVmaW5lIE9QRU5TU0xfUkVRVUlSRUQgIjEiCi0KLTEwLiBMYXVuY2ggdGhlICdOdWxsc29mdCBJbnN0YWxsIFN5c3RlbSAoTlNJUyAyLjApJwotCi0xMS4gU2VsZWN0ICdNYWtlTlNJU1cgKGNvbXBpbGVyIGludGVyZmFjZSknCi0KLTEyLiBDbGljayBGaWxlIC0gTG9hZCBTY3JpcHQKLQotMTMuIFNlbGVjdCBjOlx1c3JcbmV0LXNubXAubnNpCi0KLTE0LiBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgYzpcdXNyXE5ldC1TTk1QLXgueC54LXguZXhlIGJpbmFyeSBpbnN0YWxsZXIgCi0gICAgcGFja2FnZQotCi0xNS4gVGVzdCB0aGUgcGFja2FnZQotCi0xNi4gQ29tcGFyZSB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzIG9mIHRoZSBjb21waWxlZCBmb2xkZXIgd2l0aCB0aGUgaW5zdGFsbGVkCi0gICAgZm9sZGVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWlzc2luZyBNSUIgZmlsZXMgZXRjLiAgTW9kaWZ5IG5ldC1zbm1wLm5zaQotICAgIGFuZCByZWJ1aWxkIGlmIHJlcXVpcmVkLgotCi0xNy4gQ3JlYXRlIGEgLnppcCBmaWxlIG9mIGM6XHVzciBmb3IgYXJjaGl2ZSBwdXJwb3Nlcy4KLQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogUkVBRE1FLmJ1aWxkLndpbjMyDQorKg0KKyogQXV0aG9yOiBBbGV4IEJ1cmdlciA8YWxleF9iQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4NCisqICAgICAgICAgIA0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitJbnRyb2R1Y3Rpb24NCis9PT09PT09PT09PT0NCisNCitUaGlzIFJFQURNRSBvdXRsaW5lcyB0aGUgc3RlcHMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgYmluYXJ5IHJlbGVhc2UgZm9yDQorV2luZG93cyB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBhbmQgdGhlIE51bGxTb2Z0IGluc3RhbGxlci4NCisNCitUaGVyZSBhcmUgZm91ciBzZWN0aW9uczoNCisNCisgIENvbXBpbGluZyBiaW5hcmllcw0KKw0KKyAgQ29tcGlsaW5nIEhUTUxIZWxwIGZpbGUNCisNCisgIENvbWJpbmluZyB0aGUgYmluYXJpZXMgYW5kIEhUTUxIZWxwIGZpbGVzDQorDQorICBCdWxkaW5nIGEgTnVsbFNvZnQgaW5zdGFsbGVyIHBhY2thZ2UNCisNCisNCitDb21waWxpbmcgYmluYXJpZXMNCis9PT09PT09PT09PT09PT09PT0NCisNCitSZXF1aXJlbWVudHMNCistLS0tLS0tLS0tLS0NCisNCiszMi1iaXQgYmluYXJ5Og0KKw0KKyAtV2luZG93cyBYUCAzMi1iaXQgU1AyIG9yIGhpZ2hlcg0KKyAtTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwOCBTUDEgd2l0aCBQbGF0Zm9ybSBTREsgYW5kIGxhdGVzdCB1cGRhdGVzIGZyb20gTWljcm9zb2Z0DQorICBpbmNsdWRpbmcgdXBkYXRlcyB0byB0aGUgcmVkaXN0cmlidXRhYmxlIGNvbXBvbmVudHMNCisgLUFjdGl2ZVBlcmwgNS4xMA0KKyAtTVNZUyAvIE1pbkdXIC1vci0gdGFyLmV4ZSBhbmQgZ3ppcC5leGUNCisgLXdpbjMyL2Rpc3QgZm9sZGVyIGZyb20gTUFJTiBpbiBDVlMNCisgLU9wZW5TU0wgYmluYXJ5IGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwNCisNCis2NC1iaXQgYmluYXJ5Og0KKw0KKyAtV2luZG93cyA3IDY0LWJpdA0KKyAtTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwOCBTUDEgd2l0aCBQbGF0Zm9ybSBTREsgYW5kIGxhdGVzdCB1cGRhdGVzIGZyb20gTWljcm9zb2Z0DQorICBpbmNsdWRpbmcgdXBkYXRlcyB0byB0aGUgcmVkaXN0cmlidXRhYmxlIGNvbXBvbmVudHMuICBBbHNvIG5lZWQgYXJlIHRoZSA2NC1iaXQgY29tcGlsZXIgb3B0aW9ucy4NCisgLUFjdGl2ZVBlcmwgNS4xMCAoNjQtYml0KQ0KKyAtTVNZUyAvIE1pbkdXIC1vci0gdGFyLmV4ZSBhbmQgZ3ppcC5leGUNCisgLXdpbjMyL2Rpc3QgZm9sZGVyIGZyb20gTUFJTiBpbiBDVlMNCisgLU9wZW5TU0wgNjQtYml0IGJpbmFyeSBhbmQgbGlicmFyeSBmaWxlcyBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sDQorDQorDQorQnVpbGRpbmcgdGhlIG1haW4gYmluYXJpZXMNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK05vdGU6ICBBbGwgc2hlbGwgc3RlcHMgYXJlIHVzaW5nIHRoZSBXaW5kb3cgQ01EIHByb21wdCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4NCisNCitQYXJ0IDENCistLS0tLS0NCisNCisxLiAgSW5zdGFsbCBwcmUtcmVxdWlzaXRlczoNCisNCisgICAgTVNWQyAyMDA4Og0KKyAgICAgIEluY2x1ZGUgdGhlIFBsYXRmb3JtIFNESyBhbmQgZm9yIDY0LWJpdCwgbWFrZSBzdXJlIHRoZSA2NC1iaXQgY29tcGlsZXIgaXMgaW5zdGFsbGVkDQorICAgICAgKG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0KS4NCisNCisgICAgICBMYXRlc3QgdXBkYXRlcyBmcm9tIE1pY3Jvc29mdCB0byBlbnN1cmUgdGhlIHJlZGlzdHJpYnV0YWJsZSBETExzIGhhdmUgdGhlIGxhdGVzdA0KKyAgICAgIHNlY3VyaXR5IGZpeGVzLg0KKw0KKyAgICBBY3RpdmVQZXJsOg0KKyAgICAgIEZvciA2NC1iaXQsIG1ha2Ugc3VyZSB5b3UgaW5zdGFsbCB0aGUgNjQtYml0IHZlcnNpb24gb3RoZXJ3aXNlIGNvbXBpbGluZyB3aWxsIGZhaWwuDQorDQorICAgIE1TWVMgLyBNaW5HVzoNCisgICAgICBOZWVkZWQgZm9yIHRhciBjb21tYW5kIGluIGJ1aWxkLWJpbmFyeS5iYXQvcGwuICANCisNCisgICAgT3BlblNTTDoNCisgICAgICBJbnN0YWxsIHRoZSBPcGVuU1NMIGJpbmFyeSwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFzIGV4cGxhaW5lZCBpbiANCisgICAgICAnVXNpbmcgYSBwcmUtY29tcGlsZWQgdmVyc2lvbicgb2YgdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIHdpdGggDQorICAgICAgT3BlblNTTCcgc2VjdGlvbiBvZiBSRUFETUUud2luMzIuICBGb3IgNjQtYml0LCBtYWtlIHN1cmUgeW91IGluc3RhbGwgdGhlIDY0LWJpdCANCisgICAgICB2ZXJzaW9uIG90aGVyd2lzZSBjb21waWxpbmcgd2lsbCBmYWlsLg0KKw0KKzIuICBFeHRyYWN0IHNvdXJjZS4gIFRoZSBsb2NhdGlvbiB3aWxsIGJlIHJlZmVyZW5jZWQgYXMgKHNvdXJjZSBkaXIpDQorDQorMy4gIERlbGV0ZSBjOlx1c3IgaWYgaXQgZXhpc3RzLg0KKw0KKzQuICBBcHBseSBhbnkgcmVxdWlyZWQgcGF0Y2hlcw0KKw0KKzUuICBjZCAoc291cmNlIGRpcilcd2luMzJcZGlzdA0KKw0KKzYuICBSdW4gYnVpbGQtYmluYXJ5LmJhdC4gIA0KKw0KKyAgICBJZiBjOlx1c3IgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgc3RvcCB3aXRoIGFuIGVycm9yLg0KKw0KKyAgICBJZiAld2luZGlyJVxzeXN0ZW0zMlxuZXRzbm1wLmRsbCBleGlzdHMsIGl0IHdpbGwgYXNrIGlmIGl0IGNhbiBiZSBkZWxldGVkLiAgQW5zd2VyIHllcy4NCisNCis3LiAgQXQgYSBoaWdoIGxldmVsLCB0aGUgZm9sbG93aW5nIHdpbGwgYmUgY29tcGxldGVkOg0KKw0KKyAgICBhKSAgR2V0IHBhY2thZ2UgdmVyc2lvbiBmcm9tIFVuaXggY29uZmlndXJlIHNjcmlwdCBmb3IgdXNlIGluIHRoZSBQZXJsIG1vZHVsZSBhbmQgTlNJUw0KKyAgICAgICAgaW5zdGFsbGVyIHBhY2thZ2UuDQorICAgIGIpICBCdWlsZCB0aGUgYXBwbGljYXRpb25zIGFuZCBQZXJsIG1vZHVsZXMgd2l0aCBPcGVuU1NMIGVuYWJsZWQgYW5kIHdpbkV4dERMTCBkaXNhYmxlZA0KKyAgICBjKSAgQnVpbGQgdGhlIGFwcGxpY2F0aW9ucyBhbmQgUGVybCBtb2R1bGVzIHdpdGggT3BlblNTTCBlbmFibGVkIGFuZCB3aW5FeHRETEwgZW5hYmxlZA0KKyAgICBkKSAgQnVpbGQgdGhlIGFwcGxpY2F0aW9ucyBhbmQgUGVybCBtb2R1bGVzIHdpdGggT3BlblNTTCBkaXNhYmxlZCBhbmQgd2luRXh0RExMIGRpc2FibGVkDQorICAgIGUpICBCdWlsZCB0aGUgYXBwbGljYXRpb25zIGFuZCBQZXJsIG1vZHVsZXMgd2l0aCBPcGVuU1NMIGRpc2FibGVkIGFuZCB3aW5FeHRETEwgZW5hYmxlZA0KKyAgICBmKSAgQ29weSBkaXN0cmlidXRpb24gZmlsZXMgKHJlYWRtZSwgYmF0Y2ggZmlsZXMgZXRjKQ0KKyAgICBnKSAgQ29weSBOU0lTIGluc3RhbGxlciBzY3JpcHQgYW5kIHVwZGF0ZSB0aGUgdmVyc2lvbiBzdGFtcA0KKw0KKzguICBDb3B5IHRoZSBmb2xsb3dpbmcgdG8gYzpcdXNyXGJpbjoNCisNCisgICAgNjQtYml0Og0KKw0KKyAgICBDOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDkuMFxWQ1xyZWRpc3RcYW1kNjRcTWljcm9zb2Z0LlZDOTAuQ1JUXCouKg0KKw0KKyAgICAzMi1iaXQ6DQorDQorICAgIEM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOS4wXFZDXHJlZGlzdFx4ODZcTWljcm9zb2Z0LlZDOTAuQ1JUXCouKiAgIA0KKw0KKyAgICBOb3RlOiAgQ29weSB0aGUgZmlsZXMgZGlyZWN0bHkgdG8gdGhlIGZvbGRlci4gIElmIHlvdSBjb3B5IHRoZSBmb2xkZXIsIHRoZSBiaW5hcmllcyB3b24ndA0KKyAgICAgICAgICAgcnVuIG9uIFdpbmRvd3MgMjAwMC4NCisNCis5LiAgVmVyaWZ5IHRoYXQgdGhlIGJpbmFyaWVzIGNyZWF0ZWQgYXJlIGxpbmtlZCB0byB0aGUgY29ycmVjdCBNU1ZDIDIwMDggcmVkaXN0cmlidXRpb24gdGhhdCB3YXMNCisgICAgY29waWVkIGluIHRoZSBwcmV2aW91cyBzdGVwLg0KKw0KKyAgICBSaWdodC1jbGljayBtc3ZjcjkwLmRsbCwgcHJvcGVydGllcywgRGV0YWlscy4gIENoZWNrIHRoZSBwcm9kdWN0IHZlcnNpb24uICANCisgICAgRXhhbXBsZTogOS4wMC4zMDcyOS40MTQ4DQorDQorICAgIGNkIFx1c3JcYmluDQorICAgIG10LmV4ZSAtaW5wdXRyZXNvdXJjZTpzbm1wZ2V0LmV4ZTsjMSAtb3V0OmV4dHJhY3RlZC5tYW5pZmVzdA0KKyAgICB0eXBlIGV4dHJhY3RlZC5tYW5pZmVzdA0KKyAgICANCisgICAgRXhhbXBsZToNCisNCisgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLkNSVCIgdmVyc2lvbj0iOS4wLjMwNzI5LjEiDQorICAgDQorMTAuIFVwZGF0ZSB0aGUgQlVJTEQgSU5GT1JNQVRJT04gc2VjdGlvbiBvZiBjOlx1c3JcUkVBRE1FLnR4dA0KKw0KKw0KK0NvbXBpbGluZyBIVE1MSGVscCBmaWxlDQorPT09PT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIHNlY3Rpb24gb3V0bGluZXMgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgV2luZG93cyBIVE1MIEhlbHAgZmlsZQ0KK2Jhc2VkIG9uIHRoZSBOZXQtU05NUCBtYW4gcGFnZXMsIFJFQURNRSBmaWxlcywgUGVybGRvYyBkb2N1bWVudGF0aW9uIGV0Yy4NCisNCitSZXF1aXJlbWVudHMNCistLS0tLS0tLS0tLS0NCisNCisgLUxpbnV4IChvciBzaW1pbGFyKSB3aXRoOg0KKyAgIC1tYW4gKG1hbiBwYWdlIHZpZXdlcikNCisgICAtdGlkeSAoSFRNTCB0aWR5IC0gaHR0cDovL3RpZHkuc291cmNlZm9yZ2UubmV0KQ0KKyAgIC1QZXJsDQorICAgLXBlcmxkb2MNCisgICAtbWFuMmh0bWwzLjAuMS50YXIuZ3ogKGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmVob29kL21hbjJodG1sMy4wLjEvKQ0KKyAgICBOb3RlOiAgTW9zdCBMaW51eCBkaXN0cmlidXRpb25zIGNvbWUgd2l0aCBtYW4yaHRtbCBhcyBwYXJ0IG9mIHRoZSBtYW4gcnBtDQorICAgICAgICAgICBwYWNrYWdlIHdoaWNoIGlzIG5vdCB0aGUgc2FtZSBhcyBtYW4yaHRtbCBmcm9tIG1hbjJodG1sMy4wLjEudGFyLmd6Lg0KKyAgICAgICAgICAgQWxsIHRoYXQgaXMgbmVlZGVkIGZyb20gbWFuMmh0bWwzLjAuMS50YXIuZ3ogaXMgdGhlIG1hbjJodG1sIHNjcmlwdC4gIA0KKyAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGRvIGEgY29tcGxldGUgaW5zdGFsbCAobWFrZS9tYWtlIGluc3RhbGwpIGJ1dCB5b3UNCisgICAgICAgICAgIGRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzY3JpcHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYnkgc2V0dGluZyB0aGUNCisgICAgICAgICAgIG1hbiBjb21tYW5kIGxpbmUgc3dpdGNoZXMgZXRjIGZvciB0aGUgT1MgZnJvbSBpbnNpZGUgb2YgdGhlIHNjcmlwdC4NCisNCisgLVdpbmRvd3Mgd2l0aDoNCisgICAtSFRNTCBIZWxwIFdvcmtzaG9wIChTZWFyY2ggbXNkbi5taWNyb3NvZnQuY29tIGZvciAnaHRtbCBoZWxwIHdvcmtzaG9wIGRvd25sb2FkJykNCisNCisNCitDb252ZXJ0IGRvY3VtZW50cyB0byBodG1sDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK05vdGU6ICBUaGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBjb21wbGV0ZWQgdXNpbmcgTGludXguDQorDQorTm90ZTogIEEgdGVtcG9yYXJ5IGxvY2F0aW9uIG9mIC90bXAvbmV0LXNubXAgaXMgdXNlZC4NCisNCisxLiAgRXh0cmFjdCBOZXQtU05NUCBzb3VyY2UgYW5kIGNkIChzb3VyY2UgZGlyKQ0KKw0KKzIuICBjZCAoc291cmNlIGRpcikNCisNCiszLiAgY3AgcGVybC9TTk1QL1JFQURNRSBSRUFETUUucGVybA0KKw0KKzQuICBSZW1vdmUgb2xkZXIgY29waWVzIG9mIGNvbnZlcnRlZCBmaWxlczoNCisNCisgICAgcm0gLVIgLWYgL3RtcC9uZXQtc25tcA0KKw0KKzUuICBCdWlsZCBOZXQtU05NUCBtYW4gcGFnZXM6IA0KKw0KKyAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD1jOi91c3I7IG1ha2Ugc2Vkc2NyaXB0OyBjZCBtYW47bWFrZTsgY2QgLi4NCisNCis2LiAgSW5zdGFsbCBvbmx5IHRoZSBtYW4gZmlsZXMgdG8gL3RlbXAvbmV0LXNubXA6DQorDQorICAgIGNkIG1hbjsgbWFrZSBpbnN0YWxsIHByZWZpeD0vdG1wL25ldC1zbm1wOyBjZCAuLg0KKw0KKzcuICBHbyB0byB0aGUgc2NyaXB0cyBmb2xkZXIgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIHNjcmlwdHMgYXJlIGV4ZWN1dGFibGU6DQorDQorICAgIGNkIChzb3VyY2UgZGlyKQ0KKyAgICBjZCB3aW4zMi9kaXN0L3NjcmlwdHM7IGNobW9kICt4ICoNCisNCis4LiAgRWRpdCB0aGVzZSBmaWxlcyBhbmQgbWFrZSBzdXJlIHRoZSBwYXRocyBhcmUgY29ycmVjdCBpbiB0aGUgT1BUSU9OUyANCisgICAgc2VjdGlvbi4gIEFsc28gZW5zdXJlIHRoZSBsaXN0IG9mIFJFQURNRSBmaWxlcyBhbmQgUGVybCBtb2R1bGVzIA0KKyAgICBhcmUgY29ycmVjdCBpbiByZWFkbWUyaHRtbCBhbmQgcG9kZGlyMmh0bWwuDQorDQorICAgIG1hbmRpcjJodG1sDQorICAgIHJlYWRtZTJodG1sDQorICAgIHBvZGRpcjJodG1sDQorDQorICAgIE5vdGU6ICBtYW5kaXIyaHRtbCB3aWxsIHByb2Nlc3MgQUxMIG1hbiBwYWdlcyBpbiBjOlx0ZW1wXG5ldC1zbm1wIHdoaWxlDQorICAgICAgICAgICByZWFkbWUyaHRtbCBhbmQgcG9kZGlyMmh0bWwgd2lsbCBvbmx5IHByb2Nlc3MgZmlsZXMgbGlzdGVkIGluIHRoZQ0KKyAgICAgICAgICAgc2NyaXB0LiAgSWYgbmV3IG1hbiBwYWdlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIFRhYmxlIG9mIA0KKyAgICAgICAgICAgQ29udGVudHMgKHRvYy5oaGMpIGFuZCBwcm9qZWN0IGZpbGUgKE5ldC1TTk1QLmhocCkgbmVlZCB0byBiZSANCisgICAgICAgICAgIHVwZGF0ZWQgYnkgaGFuZC4NCisNCis5LiAgUnVuIGVhY2ggc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSAuaHRtbCBmaWxlczoNCisNCisgICAgLi9tYW5kaXIyaHRtbDsgLi9yZWFkbWUyaHRtbDsgLi9wb2RkaXIyaHRtbA0KKw0KKyAgICBOb3RlOiAgVGhlcmUgd2lsbCBiZSBtYW55IHdhcm5pbmdzIGZyb20gdGlkeSB3aGljaCBjYW4gYmUgaWdub3JlZC4NCisNCisxMC4gVmVyaWZ5IGVhY2ggY29udmVydGVkIGZpbGUgdG8gZW5zdXJlIGFsbCB0aGUgbGlua3MgYXJlIGNvcnJlY3QuICBUaGUgZmlsZXMNCisgICAgYXJlIGxvY2F0ZWQgaW4gL3RtcC9uZXQtc25tcC9odG1sIGJ5IGRlZmF1bHQuICBJbiBzb21lIGluc3RhbmNlcywgVVJMcyBtYXkgYmUgDQorICAgIHNwbGl0IGFjcm9zcyB0d28gbGluZXMgc3VjaCBhcyB0aGUgVmFyaWFibGVzIGxpbmsgYXQgdGhlIGJvdHRvbSBvZiANCisgICAgL3RtcC9uZXQtc25tcC9odG1sL21hbjgtc25tcHRyYXBkLjguaHRtbC4NCisNCisxMS4gSWYgbmV3IG1hbiBwYWdlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIFRhYmxlIG9mIENvbnRlbnRzIChOZXQtU05NUC5oaGMpIGFuZA0KKyAgICBwcm9qZWN0IGZpbGUgKE5ldC1TTk1QLmhocCkgbmVlZCB0byBiZSB1cGRhdGVkIGJ5IGhhbmQuDQorDQorMTIuIENvbnZlcnQgRVhBTVBMRS5jb25mLndpbjMyIHRvIGh0bWw6DQorDQorICAgIC4vdHh0Mmh0bWwgLi4vLi4vRVhBTVBMRS5jb25mLndpbjMyIHwgdGlkeSA+IC90bXAvbmV0LXNubXAvaHRtbC9FWEFNUExFLmNvbmYud2luMzIuaHRtbA0KKyAgICANCisNCitCdWlsZCBOZXQtU05NUC5jaG0NCistLS0tLS0tLS0tLS0tLS0tLS0NCisNCitOb3RlOiAgVGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgY29tcGxldGVkIHVzaW5nIFdpbmRvd3MuDQorDQorTm90ZTogIEEgdGVtcG9yYXJ5IGxvY2F0aW9uIG9mIGM6XHRlbXBcbmV0LXNubXAgaXMgdXNlZC4NCisNCisxLiAgVHJhbnNmZXIgL3RtcC9uZXQtc25tcC9odG1sIGZyb20gTGludXggdG8gYzpcdGVtcFxuZXQtc25tcFxodG1sDQorDQorMi4gIEdyYWIgdGhlIEZBUSBmcm9tIHRoZSB3ZWIgc2l0ZSwgc3RyaXAgb3V0IHRoZSBpbmNsdWRlcyBhbmQgc2F2ZSBhcw0KKyAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRkFRLmh0bWwgYW5kIHJ1bjoNCisNCisgICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRkFRLmh0bWwNCisNCiszLiAgR3JhYiB0aGUgRGV2bG9wZXIgRkFRIGZyb20gdGhlIHdlYiBzaXRlLCBzdHJpcCBvdXQgdGhlIGluY2x1ZGVzIGFuZCBzYXZlIGFzDQorICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxEZXZlbG9wZXJfRkFRLmh0bWwgYW5kIHJ1bjoNCisNCisgICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRGV2ZWxvcGVyX0ZBUS5odG1sDQorDQorNC4gIENvcHkgdGhlIGZvbGxvd2luZyBmaWxlcyB0byBjOlx0ZW1wXG5ldC1zbm1wXGh0bWw6DQorDQorICAgIGNkIChzb3VyY2UgZGlyKQ0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXENvbmZpZ3VyYXRpb25fT3ZlcnZpZXcuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXEhlbHBfQ2F2ZWF0cy5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcSW50cm9kdWN0aW9uLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxOZXQtU05NUC5oaGMiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxOZXQtU05NUC5oaHAiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxuZXQtc25tcC00LjItODAwLmpwZyIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXAuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcGQuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKw0KKzUuICBOZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIG5ldyByZWxlYXNlIG9mDQorICAgIE5ldC1TTk1QLCBzbyB0aGUgKi5jb25mLndpbjMyLmh0bWwgZmlsZXMgc2hvdWxkIGJlIHVwZGF0ZWQuDQorDQorICAgIENyZWF0ZSBhIHRleHQgZmlsZSB3aXRoIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzbm1wZCBhbmQgDQorICAgIHNubXB0cmFwZCB1c2luZzoNCisNCisgICAgY2Qgd2luMzJcYmluXHJlbGVhc2UgKGZvbGRlciBvZiAqV2luZG93cyogY29tcGlsZWQgTmV0LVNOTVApDQorICAgIHNubXB0cmFwZCAtSCAyPiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLm9wdGlvbnMNCisgICAgc25tcGQgLUggMj4gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLm9wdGlvbnMNCisNCisgICAgVXBkYXRlIHRoZXNlIGZpbGVzIHVzaW5nIGFuIEhUTUwgZWRpdG9yIChOdnUgZXRjKToNCisNCisgICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXAuY29uZi53aW4zMi5odG1sDQorICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5jb25mLndpbjMyLmh0bWwNCisgICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwNCisgDQorICAgIE9ubHkgYWRkIHRoZSByZWxldmVudCBzZWN0aW9uIHRvIGVhY2ggZmlsZSBmcm9tIHRoZSAub3B0aW9ucyBmaWxlcw0KKyAgICBjcmVhdGVkIGFib3ZlLCBlbnN1cmUgdGhlIGZvbnQgaXMgc2V0IHRvIGZpeGVkIHdpZHRoLg0KKw0KKyAgICBUaWR5IGVhY2ggZmlsZSB1c2luZyB0aWR5IHVuZGVyIFdpbmRvd3MgKG9yIHRyYW5zZmVyIHRvIExpbnV4IGFuZCB0aWR5DQorICAgIHVzaW5nIExpbnV4KToNCisNCisgICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbA0KKyAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5jb25mLndpbjMyLmh0bWwNCisgICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcC5jb25mLndpbjMyLmh0bWwNCisNCis2LiAgRWRpdCBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwIGFuZCB1cGRhdGUgdGhlIHZlcnNpb24gZm9yIHRoZSANCisgICAgJ1RpdGxlJyB2YXJpYWJsZS4NCisNCis3LiAgUnVuIEhUTUwgV29ya3Nob3ANCisNCis4LiAgT3BlbiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwDQorDQorOS4gIENsaWNrIEZpbGUgLSBDb21waWxlDQorDQorMTAuIFNlbGVjdCAnQzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocCcgYXMgdGhlIGZpbGVuYW1lDQorDQorMTEuIENsaWNrIENvbXBpbGUNCisNCisxMi4gWW91IHNob3VsZCBub3cgaGF2ZSBhIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5jaG0gZmlsZS4NCisNCisxMy4gTGF1bmNoIHRoZSBmaWxlIGFuZCBlbnN1cmUgZXZlcnkgY29udGVudCBpdGVtIGRpc3BsYXlzIHRoZSBjb3JyZWN0IHBhZ2UuDQorDQorDQorQ29tYmluaW5nIHRoZSBiaW5hcmllcyBhbmQgSFRNTEhlbHAgZmlsZXMNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKzEuICBDb3B5IHRoZSBIVE1MIEhlbHAgZmlsZSB0byBjOlx1c3JcZG9jczoNCisNCisgICAgY29weSBjOlx0ZW1wXE5ldC1TTk1QXGh0bWxcTmV0LVNOTVAuY2htIGM6XHVzclxkb2NzXA0KKw0KKw0KK0J1bGRpbmcgYSBOdWxsU29mdCBpbnN0YWxsZXIgcGFja2FnZQ0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK1JlcXVpcmVtZW50cw0KKy0tLS0tLS0tLS0tLQ0KKw0KKyAtV2luZG93cw0KKyAtTnVsbHNvZnQgU2NyaXB0YWJsZSBJbnN0YWxsIFN5c3RlbSAyLjAgLSBodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvaG9tZS8NCisNCisxLiAgQ29tcGxldGUgdGhlIHNlY3Rpb25zIGFib3ZlLg0KKw0KKzIuICBMYXVuY2ggdGhlICdOdWxsc29mdCBJbnN0YWxsIFN5c3RlbSAoTlNJUyAyLjApJw0KKw0KKzMuICBTZWxlY3QgJ01ha2VOU0lTVyAoY29tcGlsZXIgaW50ZXJmYWNlKScNCisNCis0LiAgQ2xpY2sgRmlsZSAtIExvYWQgU2NyaXB0DQorDQorNS4gIFNlbGVjdCBjOlx1c3JcbmV0LXNubXAubnNpDQorDQorNi4gIFlvdSBzaG91bGQgbm93IGhhdmUgYSBjOlx1c3JcTmV0LVNOTVAteC54LngteC5leGUgYmluYXJ5IGluc3RhbGxlciANCisgICAgcGFja2FnZQ0KKw0KKzcuICBUZXN0IHRoZSBwYWNrYWdlOg0KKw0KKyAgICBQZXJmb3JtIHRoZSBiYXNpYyB0ZXN0cyBiZWxvdyBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoNCisNCisgICAgICAzMi1iaXQgcGFja2FnZToNCisgICAgICAgIFdpbmRvd3MgMjAwMA0KKyAgICAgICAgV2luZG93cyBYUCAzMi1iaXQNCisgICAgICA2NC1iaXQgcGFja2FnZToNCisgICAgICAgIFdpbmRvd3MgNyA2NC1iaXQNCisNCisgICAgVGVzdHM6DQorDQorICAgIGEpIEluc3RhbGxhdGlvbiB3aXRoIFdpbkV4dERMTCBhbmQgU1NMDQorICAgIGIpIENvbmZpZ3VyZSBzbm1wZCB0byBhbGxvdyBhIHF1ZXJ5DQorICAgIGMpIEluc3RhbGwgc25tcGQgYW5kIHNubXB0cmFwZCBzZXJ2aWNlcw0KKyAgICBkKSBTdG9wIHRoZSBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlIGFuZCBzdGFydCBib3RoIE5ldC1TTk1QIHNlcnZpY2VzDQorICAgIGUpIHNubXB3YWxrIC12IDEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0NCisgICAgZikgSW5zdGFsbCBQZXJsIG1vZHVsZXMNCisgICAgZykgTGF1bmNoIG5ldC1zbm1wLXBlcmwtdGVzdC5wbA0KKw0KKzguICBDb21wYXJlIHRoZSBkaXJlY3RvcnkgY29udGVudHMgb2YgdGhlIGNvbXBpbGVkIGZvbGRlciB3aXRoIHRoZSBpbnN0YWxsZWQNCisgICAgZm9sZGVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWlzc2luZyBNSUIgZmlsZXMgZXRjLiAgSWYgdGhlcmUgYXJlIG1pc3NpbmcNCisgICAgZmlsZXMsIG1vZGlmeSBuZXQtc25tcC5uc2kgYW5kIHJlYnVpbGQgaWYgcmVxdWlyZWQgYW5kIHVwZGF0ZSBuZXQtc25tcC5uc2kNCisgICAgZXRjIGluIFNWTi4NCisNCis5LiAgQ3JlYXRlIGEgLnppcCBmaWxlIG9mIGM6XHVzciBmb3IgYXJjaGl2ZSBwdXJwb3Nlcy4NCisNCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L1JFQURNRS50eHQgYi93aW4zMi9kaXN0L1JFQURNRS50eHQKaW5kZXggOWRhNDhlYy4uMzA3Yzg2MCAxMDA2NDQKLS0tIGEvd2luMzIvZGlzdC9SRUFETUUudHh0CisrKyBiL3dpbjMyL2Rpc3QvUkVBRE1FLnR4dApAQCAtMSwxODQgKzEsMTg4IEBACi0gICAgICAgUkVBRE1FIGZpbGUgZm9yIHdpbjMyIGJpbmFyeSByZWxlYXNlIG9mIE5ldC1TTk1QCi0KLURJU0NMQUlNRVIKLQotICBUaGUgQXV0aG9ycyBhc3N1bWUgbm8gcmVzcG9uc2liaWxpdHkgZm9yIGRhbWFnZSBvciBsb3NzIG9mIHN5c3RlbQotICBwZXJmb3JtYW5jZSBhcyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZXN1bHQgb2YgdGhlIHVzZSBvZiB0aGlzCi0gIHNvZnR3YXJlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvcgotICBpbXBsaWVkIHdhcnJhbnR5LgotCi0KLVRBQkxFIE9GIENPTlRFTlRTCi0KLSAgRGlzY2xhaW1lcgotICBUYWJsZSBPZiBDb250ZW50cwotICBJbnRyb2R1Y3Rpb24KLSogSW5zdGFsbGF0aW9uCi0qIENvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzCi0gIEluc3RhbGxhdGlvbiAtIFBlcmwgbW9kdWxlCi0qIENvbmZpZ3VyYXRpb24KLSAgQnVpbGQgSW5mb3JtYXRpb24KLQotICAqID0gUmVxdWlyZWQgUmVhZGluZy4KLQotCi1JTlRST0RVQ1RJT04KLQotICBUaGlzIHBhY2thZ2UgY29udGFpbnMgYSBjb21waWxlZCBiaW5hcnkgcmVsZWFzZSBvZiBOZXQtU05NUCBmb3IgV2luZG93cyBOVC8yMDAwL1hQLgotICBUaGUgYmluYXJpZXMgcnVuIHVubW9kaWZpZWQgb24gV2luZG93cyA5OC4gIFRoZSAic25tcGQiIGFuZCAic25tcHRyYXBkIiBwcm9ncmFtIGNhbiAKLSAgbm90IHJ1biBhcyBzZXJ2aWNlcyBvbiBXaW5kb3dzIDk4LCBhcyBXaW5kb3dzIDk4IGRvZXMgbm90IHByb3ZpZGUgYSBTZXJ2aWNlIENvbnRyb2wgCi0gIE1hbmFnZXIgKFNDTSkuCi0KLSAgRG9jdW1lbnRhdGlvbiBmb3IgdXNpbmcgdGhlIGFwcGxpY2F0aW9ucyBpcyBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgaGVscCBmaWxlCi0gIChOZXQtU05NUC5jaG0pIGxvY2F0ZWQgaW4gdGhlIGRvY3MgZGlyZWN0b3J5IG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4gIEhlbHAgaXMgYWxzbwotICBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHNpdGUgYXQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG9jcy8uCi0KLQotSU5TVEFMTEFUSU9OCi0KLSAgVGhlIE5ldC1TTk1QIFdpbmRvd3MgaW5zdGFsbGVyIHBhY2thZ2UgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczoKLQotICAtIEluc3RhbGxzIHRoZSBOZXQtU05NUCBiaW5hcmllcywgTUlCIGZpbGVzIGFuZCBBY3RpdmVTdGF0ZSA1LjgueCBQZXJsIFBQTSAKLSAgICBwYWNrYWdlIGludG8gdGhlIGluc3RhbGxhdGlvbiBmb2xkZXIgKGRlZmF1bHRzIHRvIGM6XHVzcikuIAotICAtIEFkZHMgKGluc3RhbGwgZm9sZGVyKVxiaW4gdG8gdGhlIHN5c3RlbSBQQVRILiAKLSAgLSBBZGRzIHRoZSBmb2xsb3dpbmcgcmVnaXN0cnkga2V5czoKLSAgICAtIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxOZXQtU05NUFxTTk1QQ09ORlBBVEg9KGluc3RhbGwgZm9sZGVyKS9ldGMvc25tcDsKLSAgICAgIChpbnN0YWxsIGZvbGRlcikvc25tcC9wZXJzaXN0Ci0gICAgLSBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTmV0LVNOTVBcU05NUFNIQVJFUEFUSD0oaW5zdGFsbCBmb2xkZXIpL3NoYXJlL3NubXAKLSAgLSBDcmVhdGVzIGFuIHNubXAuY29uZiBmaWxlIGluIFNOTVBDT05GUEFUSCB3aGljaCBkZWZpbmVzOiAKLSAgICAtIG1pYmRpcnMgKGluc3RhbGwgZm9sZGVyKS9zaGFyZS9zbm1wL21pYnMgCi0gICAgLSBwZXJzaXN0ZW50RGlyIChpbnN0YWxsIGZvbGRlcikvc25tcC9wZXJzaXN0IAotICAgIC0gdGVtcEZpbGVQYXR0ZXJuIChpbnN0YWxsIGZvbGRlcikvdGVtcC9zbm1wZFhYWFhYWCAKLQotICBBZnRlciBpbnN0YWxsaW5nIHVzaW5nIHRoZSBzZXR1cCB3aXphcmQsIHBlcmZvcm0gYSBxdWljayB0ZXN0IHRvIHZlcmlmeSB0aGF0IAotICBOZXQtU05NUCB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS4gIFJ1biB0aGUgZm9sbG93aW5nIGZyb20gYSBjb21tYW5kIHByb21wdDoKLQotICAgIHNubXB0cmFuc2xhdGUgLUlSIC1UZCBJRi1NSUI6OmxpbmtEb3duCi0KLSAgVGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGdlbmVyYXRlOgotCi0gICAgSUYtTUlCOjpsaW5rRG93bgotICAgIGxpbmtEb3duIE5PVElGSUNBVElPTi1UWVBFCi0gICAgICAtLSBGUk9NICAgICAgIElGLU1JQgotICAgICAgT0JKRUNUUyAgICAgICB7IGlmSW5kZXgsIGlmQWRtaW5TdGF0dXMsIGlmT3BlclN0YXR1cyB9Ci0gICAgICBERVNDUklQVElPTiAgICJBIGxpbmtEb3duIHRyYXAgc2lnbmlmaWVzIHRoYXQgdGhlIFNOTVAgZW50aXR5LCBhY3RpbmcgaW4KLSAgICAgICAgICAgICAgICBhbiBhZ2VudCByb2xlLCBoYXMgZGV0ZWN0ZWQgdGhhdCB0aGUgaWZPcGVyU3RhdHVzIG9iamVjdCBmb3IKLSAgICAgICAgICAgICAgICBvbmUgb2YgaXRzIGNvbW11bmljYXRpb24gbGlua3MgaXMgYWJvdXQgdG8gZW50ZXIgdGhlIGRvd24KLSAgICAgICAgICAgICAgICBzdGF0ZSBmcm9tIHNvbWUgb3RoZXIgc3RhdGUgKGJ1dCBub3QgZnJvbSB0aGUgbm90UHJlc2VudAotICAgICAgICAgICAgICAgIHN0YXRlKS4gIFRoaXMgb3RoZXIgc3RhdGUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBpbmNsdWRlZCB2YWx1ZQotICAgICAgICAgICAgICAgIG9mIGlmT3BlclN0YXR1cy4iCi0gICAgOjo9IHsgaXNvKDEpIG9yZygzKSBkb2QoNikgaW50ZXJuZXQoMSkgc25tcFYyKDYpIHNubXBNb2R1bGVzKDMpIHNubXBNSUIoMSkgCi0gICAgICAgICAgc25tcE1JQk9iamVjdHMoMSkgc25tcFRyYXBzKDUpIDMgfQotCi0gIElmIHNubXB0cmFuc2xhdGUgY2FuIG5vdCBiZSBmb3VuZCwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgTmV0LVNOTVAgYmluIGZvbGRlciBpcyBpbiAKLSAgeW91ciBzeXN0ZW0gcGF0aC4KLQotICBJZiB5b3UgZ2V0IE1vZHVsZSBub3QgZm91bmQgZXJyb3JzIHN1Y2ggYXMgJ0lQLU1JQjogTW9kdWxlIG5vdCBmb3VuZCcsIHRoZSBhcHBsaWNhdGlvbgotICB3YXMgbm90IGFibGUgdG8gbG9jYXRlIHRoZSBtaWJzIGZvbGRlci4gIFZlcmlmeSB0aGF0IFNOTVBDT05GUEFUSCBpcyBzZXQgdG8gdGhlIGxvY2F0aW9uCi0gIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvbGRlciBhbmQgdGhlIHBlcnNpc3RlbnQgc3RvcmFnZSBmb2xkZXIgCi0gIChjOi91c3IvZXRjL3NubXA7YzovdXNyL3NubXAvcGVyc2lzdCBmb3IgZXhhbXBsZSkuICBBbHNvIHZlcmlmeSB0aGF0IHRoZXJlIGlzIGFuIAotICBzbm1wLmNvbmYgZmlsZSB0aGF0IGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBtaWJkaXJzLCBwZXJzaXN0ZW50RGlyIGFuZCAKLSAgdGVtcEZpbGVQYXR0ZXJuLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICBtaWJkaXJzIGM6L3Vzci9zaGFyZS9zbm1wL21pYnMKLSAgICBwZXJzaXN0ZW50RGlyIGM6L3Vzci9zbm1wL3BlcnNpc3QKLSAgICB0ZW1wRmlsZVBhdHRlcm4gQzovdXNyL3RlbXAvc25tcGRYWFhYWFgKLQotICBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGUgcmVnaXN0cnkgdG8gY29uZmlndXJlCi0gIE5ldC1TTk1QLCBzZWUgJ092ZXJ2aWV3JyBkb2N1bWVudCBpbiB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBOZXQtU05NUCBoZWxwIGZpbGUuCi0KLSAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgc25tcGQuZXhlIGFuZCBzbm1wdHJhcGQuZXhlIGFzIGEgV2luZG93cyBzZXJ2aWNlLCBzZWUgCi0gICdIb3cgdG8gUmVnaXN0ZXIgdGhlIE5ldC1TTk1QIEFnZW50IGFuZCBUcmFwIERhZW1vbiBhcyBXaW5kb3dzIHNlcnZpY2VzJyBpbiBSRUFETUUud2luMzIuCi0KLQotQ08tRVhJU1RFTkNFIFdJVEggTUlDUk9TT0ZUIFNOTVAgU0VSVklDRVMKLQotUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiAnQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMnIGluIFJFQURNRS53aW4zMgotCi0KLUlOU1RBTExBVElPTiAtIFBFUkwgTU9EVUxFCi0KLSAgSW5jbHVkZWQgaW4gdGhlIChpbnN0YWxsIGZvbGRlcilcUGVybCBmb2xkZXIgaXMgYW4gQWN0aXZlU3RhdGUgUGVybCAKLSAgNS44LnguIFBQTSBwYWNrYWdlLiAgTm90ZTogIEluIHByZXZpb3VzIHZlcnNpb24gb2YgTmV0LVNOTVAsIHRoZSBQUE0KLSAgcGFja2FnZSB3YXMgY2FsbGVkIE5ldC1TTk1QLnBwZC4gIFRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbmFtZWQgdG8KLSAgTmV0U05NUC5wcGQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCB0aGUgTmV0OjpTTk1QIHBhY2thZ2UgYXZhaWxhYmxlCi0gIGZyb20gQWN0aXZlU3RhdGUuCi0KLSAgVGhlIFBlcmwgbW9kdWxlcyByZXF1aXJlIHRoZSBXaW4zMiBSRUdFWCAoUmVndWxhciBFeHByZXNzaW9uKSBwYWNrYWdlIHdoaWNoIAotICBpcyBhdmFpbGFibGUgZnJvbToKLQotICAgIGh0dHA6Ly9wZW9wbGUuZGVscGhpZm9ydW1zLmNvbS9namMvZ251X3JlZ2V4Lmh0bWwKLQotICBEb3dubG9hZCBnbnVfcmVnZXguZXhlLCBjb3B5IGl0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIGV4ZWN1dGUgaXQgdG8gCi0gIGV4dHJhY3QgdGhlIGZpbGVzLgotCi0gIENvcHkgdGhlIGV4dHJhY3RlZCBnbnVfcmVnZXguZGxsIHRvIHlvdXIgJXdpbmRpciVcc3lzdGVtMzIgZm9sZGVyLgotCi0gIFJlbW92ZSBhbnkgZXhpc3RpbmcgTmV0LVNOTVAgUGVybCBtb2R1bGVzOgotCi0gICAgcHBtIHJlbW92ZSBOZXRTTk1QCi0KLSAgSW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzOgotCi0gICAgY2QgKGluc3RhbGwgZm9sZGVyKVxQZXJsCi0gICAgcHBtIGluc3RhbGwgTmV0U05NUC5wcGQKLQotICBQZXJmb3JtIGEgYmFzaWMgdGVzdCB1c2luZzoKLQotICAgIG5ldC1zbm1wLXBlcmwtdGVzdC5wbAotCi0KLUNPTkZJR1VSQVRJT04KLQotICBBbGwgY29uZmlndXJhdGlvbiBmaWxlcyBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSAlU05NUENPTkZQQVRIJSBmb2xkZXIuCi0KLSAgTm90ZTogQWxsIHBhdGhzIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIHVzZSBmb3J3YXJkIHNsYXNoZXMgKFVuaXggc3R5bGUpLCAKLSAgTk9UIGJhY2sgc2xhc2hlcy4gIEV4YW1wbGU6IGM6L3VzcgotCi0gIEluY2x1ZGVkIGlzIGEgUGVybCBzY3JpcHQgY2FsbGVkIHNubXBjb25mIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSAKLSAgY29uZmlndXJhdGlvbiBmaWxlcy4gIAotCi0gIERvY3VtZW50YXRpb24gZm9yIHVzaW5nIHRoZSBzbm1wY29uZiBpcyBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgaGVscCBmaWxlCi0gIChOZXQtU05NUC5jaG0pIGxvY2F0ZWQgaW4gdGhlIGRvY3MgZGlyZWN0b3J5IG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4gIEhlbHAgaXMgYWxzbwotICBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHNpdGUgYXQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG9jcy8uCi0KLSAgVG8gcnVuIHNubXBjb25mLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6Ci0KLSAgICAgc25tcGNvbmYgLWkKLQotCi1CVUlMRCBJTkZPUk1BVElPTgotCi0gIE5hbWU6CQkJbmV0LXNubXAteC54LngtMS53aW4zMi5leGUKLSAgVVJMOgkJCWh0dHA6Ly93d3cubmV0LXNubXAub3JnCi0gIEJ1aWxkIGRhdGU6CQkKLSAgQnVpbHQgYnk6CQkKLSAgSW5zdGFsbGVyIFBhY2thZ2UgYnk6IAotICAKLSAgT1M6CQkJV2luZG93cyAyMDAwIFNQNAotICBDb21waWxlcjoJCU1TVkMrKyA2LjAgU1A1Ci0gIFBsYXRmb3JtIFNESzoJCUZlYnJ1YXJ5IDIwMDMKLSAgUGVybDoJCQlBY3RpdmVQZXJsIDUuOC4yIGJ1aWxkIDgwOAotICBSRUdFWDoJCWdudV9yZWdleC5leGUgKDAuMTIpIC0gaHR0cDovL3Blb3BsZS5kZWxwaGlmb3J1bXMuY29tL2dqYy9nbnVfcmVnZXguaHRtbAotCi0gIFNvdXJjZTogCQluZXQtc25tcC14LngueC50YXIuZ3oKLSAgRGVzdGluYXRpb246ICAJYzpcdXNyCi0gIFByb2plY3Q6CQl3aW4zMnNkay5kc3cgLyBsaWJkbGwuZHN3Ci0gIExpYnJhcnk6CQluZXRzbm1wIGZvciBhcHBsaWNhdGlvbnMsIG5ldHNubXAuZGxsIGZvciBQZXJsIG1vZHVsZXMKLSAgT3BlblNTTDoJCW4vYQotCi0KLSAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIGRlZmF1bHQgcGF0aHMgYXJlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uczoKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIG5ldC1zbm1wLWNvbmZpZy5oIGRlZmluZSAgIHwgdmFsdWUgICAgICAgICAgICAgICAgICAgIHwgb3B0aW9uYWwgZW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCB2YXJpYWJsZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERFRkFVTFRfTUlCRElSUyAgICAgICAgICAgIHwgYzovdXNyL3NoYXJlL3NubXAvbWlicyAgIHwgTUlCRElSUwotICBTTk1QRExNT0RQQVRIICAgICAgICAgICAgICB8IGM6L3Vzci9saWIvZGxtb2QgICAgICAgICB8IFNOTVBETE1PRFBBVEgKLSAgU05NUExJQlBBVEggICAgICAgICAgICAgICAgfCBjOi91c3IvbGliICAgICAgICAgICAgICAgfCBTTk1QTElCUEFUSAotICBTTk1QU0hBUkVQQVRIICAgICAgICAgICAgICB8IGM6L3Vzci9zaGFyZS9zbm1wICAgICAgICB8IFNOTVBTSEFSRVBBVEgKLSAgU05NUENPTkZQQVRIICAgICAgICAgICAgICAgfCBjOi91c3IvZXRjL3NubXAgICAgICAgICAgfCBTTk1QQ09ORlBBVEgKLSAgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgICAgICAgfCBjOi91c3Ivc25tcC9wZXJzaXN0ICAgICAgfCBTTk1QX1BFUlNJU1RFTlRfRElSCi0gIE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4gIHwgYzovdXNyL3RlbXAvc25tcGRYWFhYWFggIHwgCi0KKyAgICAgICBSRUFETUUgZmlsZSBmb3Igd2luMzIgYmluYXJ5IHJlbGVhc2Ugb2YgTmV0LVNOTVANCisNCitESVNDTEFJTUVSDQorDQorICBUaGUgQXV0aG9ycyBhc3N1bWUgbm8gcmVzcG9uc2liaWxpdHkgZm9yIGRhbWFnZSBvciBsb3NzIG9mIHN5c3RlbQ0KKyAgcGVyZm9ybWFuY2UgYXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVzdWx0IG9mIHRoZSB1c2Ugb2YgdGhpcw0KKyAgc29mdHdhcmUuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yDQorICBpbXBsaWVkIHdhcnJhbnR5Lg0KKw0KKw0KK1RBQkxFIE9GIENPTlRFTlRTDQorDQorICBEaXNjbGFpbWVyDQorICBUYWJsZSBPZiBDb250ZW50cw0KKyAgSW50cm9kdWN0aW9uDQorKiBJbnN0YWxsYXRpb24NCisqIENvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzDQorICBJbnN0YWxsYXRpb24gLSBQZXJsIG1vZHVsZQ0KKyogQ29uZmlndXJhdGlvbg0KKyAgQnVpbGQgSW5mb3JtYXRpb24NCisNCisgICogPSBSZXF1aXJlZCBSZWFkaW5nLg0KKw0KKw0KK0lOVFJPRFVDVElPTg0KKw0KKyAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgY29tcGlsZWQgYmluYXJ5IHJlbGVhc2Ugb2YgTmV0LVNOTVAgZm9yIFdpbmRvd3MgTlQvMjAwMC9YUC4NCisgIFRoZSBiaW5hcmllcyBydW4gdW5tb2RpZmllZCBvbiBXaW5kb3dzIDk4LiAgVGhlICJzbm1wZCIgYW5kICJzbm1wdHJhcGQiIHByb2dyYW0gY2FuIA0KKyAgbm90IHJ1biBhcyBzZXJ2aWNlcyBvbiBXaW5kb3dzIDk4LCBhcyBXaW5kb3dzIDk4IGRvZXMgbm90IHByb3ZpZGUgYSBTZXJ2aWNlIENvbnRyb2wgDQorICBNYW5hZ2VyIChTQ00pLg0KKw0KKyAgRG9jdW1lbnRhdGlvbiBmb3IgdXNpbmcgdGhlIGFwcGxpY2F0aW9ucyBpcyBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgaGVscCBmaWxlDQorICAoTmV0LVNOTVAuY2htKSBsb2NhdGVkIGluIHRoZSBkb2NzIGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuICBIZWxwIGlzIGFsc28NCisgIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9kb2NzLy4NCisNCisNCitJTlNUQUxMQVRJT04NCisNCisgIFRoZSBOZXQtU05NUCBXaW5kb3dzIGluc3RhbGxlciBwYWNrYWdlIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6DQorDQorICAtIEluc3RhbGxzIHRoZSBOZXQtU05NUCBiaW5hcmllcywgTUlCIGZpbGVzIGFuZCBBY3RpdmVTdGF0ZSA1LjgueCBQZXJsIFBQTSANCisgICAgcGFja2FnZSBpbnRvIHRoZSBpbnN0YWxsYXRpb24gZm9sZGVyIChkZWZhdWx0cyB0byBjOlx1c3IpLiANCisgIC0gQWRkcyAoaW5zdGFsbCBmb2xkZXIpXGJpbiB0byB0aGUgc3lzdGVtIFBBVEguIA0KKyAgLSBBZGRzIHRoZSBmb2xsb3dpbmcgcmVnaXN0cnkga2V5czoNCisgICAgLSBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTmV0LVNOTVBcU05NUENPTkZQQVRIPShpbnN0YWxsIGZvbGRlcikvZXRjL3NubXA7DQorICAgICAgKGluc3RhbGwgZm9sZGVyKS9zbm1wL3BlcnNpc3QNCisgICAgLSBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTmV0LVNOTVBcU05NUFNIQVJFUEFUSD0oaW5zdGFsbCBmb2xkZXIpL3NoYXJlL3NubXANCisgIC0gQ3JlYXRlcyBhbiBzbm1wLmNvbmYgZmlsZSBpbiBTTk1QQ09ORlBBVEggd2hpY2ggZGVmaW5lczogDQorICAgIC0gbWliZGlycyAoaW5zdGFsbCBmb2xkZXIpL3NoYXJlL3NubXAvbWlicyANCisgICAgLSBwZXJzaXN0ZW50RGlyIChpbnN0YWxsIGZvbGRlcikvc25tcC9wZXJzaXN0IA0KKyAgICAtIHRlbXBGaWxlUGF0dGVybiAoaW5zdGFsbCBmb2xkZXIpL3RlbXAvc25tcGRYWFhYWFggDQorDQorICBBZnRlciBpbnN0YWxsaW5nIHVzaW5nIHRoZSBzZXR1cCB3aXphcmQsIHBlcmZvcm0gYSBxdWljayB0ZXN0IHRvIHZlcmlmeSB0aGF0IA0KKyAgTmV0LVNOTVAgd2FzIGluc3RhbGxlZCBjb3JyZWN0bHkuICBSdW4gdGhlIGZvbGxvd2luZyBmcm9tIGEgY29tbWFuZCBwcm9tcHQ6DQorDQorICAgIHNubXB0cmFuc2xhdGUgLUlSIC1UZCBJRi1NSUI6OmxpbmtEb3duDQorDQorICBUaGUgYWJvdmUgY29tbWFuZCBzaG91bGQgZ2VuZXJhdGU6DQorDQorICAgIElGLU1JQjo6bGlua0Rvd24NCisgICAgbGlua0Rvd24gTk9USUZJQ0FUSU9OLVRZUEUNCisgICAgICAtLSBGUk9NICAgICAgIElGLU1JQg0KKyAgICAgIE9CSkVDVFMgICAgICAgeyBpZkluZGV4LCBpZkFkbWluU3RhdHVzLCBpZk9wZXJTdGF0dXMgfQ0KKyAgICAgIERFU0NSSVBUSU9OICAgIkEgbGlua0Rvd24gdHJhcCBzaWduaWZpZXMgdGhhdCB0aGUgU05NUCBlbnRpdHksIGFjdGluZyBpbg0KKyAgICAgICAgICAgICAgICBhbiBhZ2VudCByb2xlLCBoYXMgZGV0ZWN0ZWQgdGhhdCB0aGUgaWZPcGVyU3RhdHVzIG9iamVjdCBmb3INCisgICAgICAgICAgICAgICAgb25lIG9mIGl0cyBjb21tdW5pY2F0aW9uIGxpbmtzIGlzIGFib3V0IHRvIGVudGVyIHRoZSBkb3duDQorICAgICAgICAgICAgICAgIHN0YXRlIGZyb20gc29tZSBvdGhlciBzdGF0ZSAoYnV0IG5vdCBmcm9tIHRoZSBub3RQcmVzZW50DQorICAgICAgICAgICAgICAgIHN0YXRlKS4gIFRoaXMgb3RoZXIgc3RhdGUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBpbmNsdWRlZCB2YWx1ZQ0KKyAgICAgICAgICAgICAgICBvZiBpZk9wZXJTdGF0dXMuIg0KKyAgICA6Oj0geyBpc28oMSkgb3JnKDMpIGRvZCg2KSBpbnRlcm5ldCgxKSBzbm1wVjIoNikgc25tcE1vZHVsZXMoMykgc25tcE1JQigxKSANCisgICAgICAgICAgc25tcE1JQk9iamVjdHMoMSkgc25tcFRyYXBzKDUpIDMgfQ0KKw0KKyAgSWYgc25tcHRyYW5zbGF0ZSBjYW4gbm90IGJlIGZvdW5kLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBOZXQtU05NUCBiaW4gZm9sZGVyIGlzIGluIA0KKyAgeW91ciBzeXN0ZW0gcGF0aC4NCisNCisgIElmIHlvdSBnZXQgTW9kdWxlIG5vdCBmb3VuZCBlcnJvcnMgc3VjaCBhcyAnSVAtTUlCOiBNb2R1bGUgbm90IGZvdW5kJywgdGhlIGFwcGxpY2F0aW9uDQorICB3YXMgbm90IGFibGUgdG8gbG9jYXRlIHRoZSBtaWJzIGZvbGRlci4gIFZlcmlmeSB0aGF0IFNOTVBDT05GUEFUSCBpcyBzZXQgdG8gdGhlIGxvY2F0aW9uDQorICBvZiB0aGUgY29uZmlndXJhdGlvbiBmb2xkZXIgYW5kIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgZm9sZGVyIA0KKyAgKGM6L3Vzci9ldGMvc25tcDtjOi91c3Ivc25tcC9wZXJzaXN0IGZvciBleGFtcGxlKS4gIEFsc28gdmVyaWZ5IHRoYXQgdGhlcmUgaXMgYW4gDQorICBzbm1wLmNvbmYgZmlsZSB0aGF0IGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBtaWJkaXJzLCBwZXJzaXN0ZW50RGlyIGFuZCANCisgIHRlbXBGaWxlUGF0dGVybi4gIEZvciBleGFtcGxlOg0KKw0KKyAgICBtaWJkaXJzIGM6L3Vzci9zaGFyZS9zbm1wL21pYnMNCisgICAgcGVyc2lzdGVudERpciBjOi91c3Ivc25tcC9wZXJzaXN0DQorICAgIHRlbXBGaWxlUGF0dGVybiBDOi91c3IvdGVtcC9zbm1wZFhYWFhYWA0KKw0KKyAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlIHJlZ2lzdHJ5IHRvIGNvbmZpZ3VyZQ0KKyAgTmV0LVNOTVAsIHNlZSAnT3ZlcnZpZXcnIGRvY3VtZW50IGluIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIE5ldC1TTk1QIGhlbHAgZmlsZS4NCisNCisgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIHNubXBkLmV4ZSBhbmQgc25tcHRyYXBkLmV4ZSBhcyBhIFdpbmRvd3Mgc2VydmljZSwgc2VlIA0KKyAgJ0hvdyB0byBSZWdpc3RlciB0aGUgTmV0LVNOTVAgQWdlbnQgYW5kIFRyYXAgRGFlbW9uIGFzIFdpbmRvd3Mgc2VydmljZXMnIGluIFJFQURNRS53aW4zMg0KKyAgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBOZXQtU05NUCBIZWxwIGZpbGUgaW4gdGhlIFN0YXJ0IG1lbnUuDQorDQorDQorQ08tRVhJU1RFTkNFIFdJVEggTUlDUk9TT0ZUIFNOTVAgU0VSVklDRVMNCisNCitQbGVhc2Ugc2VlIHRoZSBzZWN0aW9uICdDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcycgaW4gUkVBRE1FLndpbjMyIHdoaWNoIA0KK2NhbiBiZSBmb3VuZCBpbiB0aGUgTmV0LVNOTVAgSGVscCBmaWxlIGluIHRoZSBTdGFydCBtZW51Lg0KKw0KKw0KK0lOU1RBTExBVElPTiAtIFBFUkwgTU9EVUxFDQorDQorICBJbmNsdWRlZCBpbiB0aGUgKGluc3RhbGwgZm9sZGVyKVxQZXJsIGZvbGRlciBpcyBhbiBBY3RpdmVTdGF0ZSBQZXJsIA0KKyAgNS44LnguIFBQTSBwYWNrYWdlLiAgTm90ZTogIEluIHByZXZpb3VzIHZlcnNpb24gb2YgTmV0LVNOTVAsIHRoZSBQUE0NCisgIHBhY2thZ2Ugd2FzIGNhbGxlZCBOZXQtU05NUC5wcGQuICBUaGUgcGFja2FnZSBoYXMgYmVlbiByZW5hbWVkIHRvDQorICBOZXRTTk1QLnBwZCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIHRoZSBOZXQ6OlNOTVAgcGFja2FnZSBhdmFpbGFibGUNCisgIGZyb20gQWN0aXZlU3RhdGUuDQorDQorICBUaGUgUGVybCBtb2R1bGVzIHJlcXVpcmUgdGhlIFdpbjMyIFJFR0VYIChSZWd1bGFyIEV4cHJlc3Npb24pIHBhY2thZ2Ugd2hpY2ggDQorICBpcyBhdmFpbGFibGUgZnJvbToNCisNCisgICAgaHR0cDovL3Blb3BsZS5kZWxwaGlmb3J1bXMuY29tL2dqYy9nbnVfcmVnZXguaHRtbA0KKw0KKyAgRG93bmxvYWQgZ251X3JlZ2V4LmV4ZSwgY29weSBpdCB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCBleGVjdXRlIGl0IHRvIA0KKyAgZXh0cmFjdCB0aGUgZmlsZXMuDQorDQorICBDb3B5IHRoZSBleHRyYWN0ZWQgZ251X3JlZ2V4LmRsbCB0byB5b3VyICV3aW5kaXIlXHN5c3RlbTMyIGZvbGRlci4NCisNCisgIFJlbW92ZSBhbnkgZXhpc3RpbmcgTmV0LVNOTVAgUGVybCBtb2R1bGVzOg0KKw0KKyAgICBwcG0gcmVtb3ZlIE5ldFNOTVANCisNCisgIEluc3RhbGwgdGhlIFBlcmwgbW9kdWxlczoNCisNCisgICAgY2QgKGluc3RhbGwgZm9sZGVyKVxQZXJsDQorICAgIHBwbSBpbnN0YWxsIE5ldFNOTVAucHBkDQorDQorICBQZXJmb3JtIGEgYmFzaWMgdGVzdCB1c2luZzoNCisNCisgICAgbmV0LXNubXAtcGVybC10ZXN0LnBsDQorDQorDQorQ09ORklHVVJBVElPTg0KKw0KKyAgQWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgJVNOTVBDT05GUEFUSCUgZm9sZGVyLg0KKw0KKyAgTm90ZTogQWxsIHBhdGhzIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIHVzZSBmb3J3YXJkIHNsYXNoZXMgKFVuaXggc3R5bGUpLCANCisgIE5PVCBiYWNrIHNsYXNoZXMuICBFeGFtcGxlOiBjOi91c3INCisNCisgIEluY2x1ZGVkIGlzIGEgUGVybCBzY3JpcHQgY2FsbGVkIHNubXBjb25mIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSANCisgIGNvbmZpZ3VyYXRpb24gZmlsZXMuICANCisNCisgIERvY3VtZW50YXRpb24gZm9yIHVzaW5nIHRoZSBzbm1wY29uZiBpcyBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgaGVscCBmaWxlDQorICAoTmV0LVNOTVAuY2htKSBsb2NhdGVkIGluIHRoZSBkb2NzIGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuICBIZWxwIGlzIGFsc28NCisgIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9kb2NzLy4NCisNCisgIFRvIHJ1biBzbm1wY29uZiwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOg0KKw0KKyAgICAgc25tcGNvbmYgLWkNCisNCisNCitCVUlMRCBJTkZPUk1BVElPTg0KKw0KKyAgTmFtZToJCQluZXQtc25tcC14LngueC0xLndpbjMyLmV4ZQ0KKyAgVVJMOgkJCWh0dHA6Ly93d3cubmV0LXNubXAub3JnDQorICBCdWlsZCBkYXRlOgkJDQorICBCdWlsdCBieToJCQ0KKyAgSW5zdGFsbGVyIFBhY2thZ2UgYnk6IA0KKyAgTlNJUyBDb21waWxlcjoJVmVyc2lvbiAyLjMNCisgIA0KKyAgT1M6CQkJV2luZG93cyAyMDAwIFNQNA0KKyAgQ29tcGlsZXI6CQlNU1ZDKysgNi4wIFNQNQ0KKyAgUGxhdGZvcm0gU0RLOgkJRmVicnVhcnkgMjAwMw0KKyAgUGVybDoJCQlBY3RpdmVQZXJsIDUuOC4yIGJ1aWxkIDgwOA0KKyAgUkVHRVg6CQlnbnVfcmVnZXguZXhlICgwLjEyKSAtIGh0dHA6Ly9wZW9wbGUuZGVscGhpZm9ydW1zLmNvbS9namMvZ251X3JlZ2V4Lmh0bWwNCisNCisgIFNvdXJjZTogCQluZXQtc25tcC14LngueC50YXIuZ3oNCisgIFBhdGNoZXMJCQ0KKyAgRGVzdGluYXRpb246ICAJYzpcdXNyDQorICBQcm9qZWN0OgkJd2luMzJzZGsuZHN3IC8gbGliZGxsLmRzdw0KKyAgTGlicmFyeToJCW5ldHNubXAgZm9yIGFwcGxpY2F0aW9ucywgbmV0c25tcC5kbGwgZm9yIFBlcmwgbW9kdWxlcw0KKyAgT3BlblNTTDoJCW4vYQ0KKw0KKw0KKyAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIGRlZmF1bHQgcGF0aHMgYXJlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uczoNCisNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIG5ldC1zbm1wLWNvbmZpZy5oIGRlZmluZSAgIHwgdmFsdWUgICAgICAgICAgICAgICAgICAgIHwgb3B0aW9uYWwgZW52aXJvbm1lbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFyaWFibGUNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIERFRkFVTFRfTUlCRElSUyAgICAgICAgICAgIHwgYzovdXNyL3NoYXJlL3NubXAvbWlicyAgIHwgTUlCRElSUw0KKyAgU05NUERMTU9EUEFUSCAgICAgICAgICAgICAgfCBjOi91c3IvbGliL2RsbW9kICAgICAgICAgfCBTTk1QRExNT0RQQVRIDQorICBTTk1QTElCUEFUSCAgICAgICAgICAgICAgICB8IGM6L3Vzci9saWIgICAgICAgICAgICAgICB8IFNOTVBMSUJQQVRIDQorICBTTk1QU0hBUkVQQVRIICAgICAgICAgICAgICB8IGM6L3Vzci9zaGFyZS9zbm1wICAgICAgICB8IFNOTVBTSEFSRVBBVEgNCisgIFNOTVBDT05GUEFUSCAgICAgICAgICAgICAgIHwgYzovdXNyL2V0Yy9zbm1wICAgICAgICAgIHwgU05NUENPTkZQQVRIDQorICBQRVJTSVNURU5UX0RJUkVDVE9SWSAgICAgICB8IGM6L3Vzci9zbm1wL3BlcnNpc3QgICAgICB8IFNOTVBfUEVSU0lTVEVOVF9ESVINCisgIE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4gIHwgYzovdXNyL3RlbXAvc25tcGRYWFhYWFggIHwgDQorDQpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0IGIvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwZTE3MjgKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQKQEAgLTAsMCArMSwzIEBACitAZWNobyBvZmYKKworcGVybCAlfmRwMFxidWlsZC1iaW5hcnkucGwKZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsIGIvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA2NGNjOAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsCkBAIC0wLDAgKzEsNTM4IEBACisjIS91c3IvYmluL3BlcmwKKyMgCisjIEJ1aWxkIHNjcmlwdCBmb3IgTmV0LVNOTVAgYW5kIE1TVkMKKyMgV3JpdHRlbiBieSBBbGV4IEJ1cmdlciAtIGFsZXhfYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKKyMgTWF5IDEwdGgsIDIwMDkKKyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6Q29weTsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEN3ZCAnYWJzX3BhdGgnOworCitwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworCitteSAkdGFyX2NvbW1hbmQ7CitteSAkZ3ppcF9jb21tYW5kOworZm9yIG15ICRtc3lzYmluZGlyICgoIkM6XFxtc3lzXFwxLjBcXGJpbiIsICJDOlxcbWluZ3dcXG1zeXNcXDEuMFxcYmluIikpIHsKKyAgICAkdGFyX2NvbW1hbmQgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRtc3lzYmluZGlyLCAidGFyLmV4ZSIpOworICAgICRnemlwX2NvbW1hbmQgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRtc3lzYmluZGlyLCAiZ3ppcC5leGUiKTsKKyAgICBsYXN0IGlmICgtZiAkdGFyX2NvbW1hbmQpOworfQorCitpZiAoISAoLWYgJHRhcl9jb21tYW5kKSkgeworICBkaWUgKCJDb3VsZCBub3QgZmluZCB0YXIgY29tbWFuZCIpOworfQorZWxzZSB7CisgIHByaW50ICJ0YXIgY29tbWFuZDogICR0YXJfY29tbWFuZFxuIjsKK30KK2lmICghICgtZiAkZ3ppcF9jb21tYW5kKSkgeworICBkaWUgKCJDb3VsZCBub3QgZmluZCBnemlwIGNvbW1hbmQiKTsKK30KK2Vsc2UgeworICBwcmludCAiZ3ppcCBjb21tYW5kOiAkZ3ppcF9jb21tYW5kXG4iOworfQorCitteSAkbWFrZW5zaXM7Citmb3IgbXkgJG5zaXNkaXIgKCgiQzpcXFByb2dyYW0gRmlsZXNcXE5TSVMiLCAiQzpcXFByb2dyYW0gRmlsZXMgKHg4NilcXE5TSVMiKSkgeworICAgICRtYWtlbnNpcyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJG5zaXNkaXIsICJtYWtlbnNpcy5leGUiKTsKKyAgICBsYXN0IGlmICgtZiAkbWFrZW5zaXMpOworfQorZGllKCJtYWtlbnNpcy5leGUgbm90IGZvdW5kIikgaWYgKCEoLWYgJG1ha2Vuc2lzKSk7CisKK215ICR0YXJnZXRfYXJjaCA9ICRFTlZ7VEFSR0VUX0NQVX0gPyAkRU5We1RBUkdFVF9DUFV9IDogJEVOVntQbGF0Zm9ybX0gPworICAgICAgICAgICAgICAgICAgJEVOVntQbGF0Zm9ybX0gOiAieDg2IjsKK215ICRvcGVuc3NsZGlyID0gJHRhcmdldF9hcmNoIGVxICJ4NjQiID8gIkM6XFxPcGVuU1NMLVdpbjY0IiA6CisgICAgICAgICAgICAgICAgICJDOlxcT3BlblNTTC1XaW4zMiI7CitteSAkb3BlbnNzbGluY2RpciA9ICRvcGVuc3NsZGlyIC4gIlxcaW5jbHVkZSI7CitteSAkb3BlbnNzbGxpYmRpciA9ICRvcGVuc3NsZGlyIC4gIlxcbGliXFxWQyI7CisKK215ICR2ZXJzaW9uID0gInVua25vd24iOworbXkgJHZlcnNpb25fZm9yX3BlcmwgPSAidW5rbm93biI7CitteSAkdmVyc2lvbl9tYWo7CitteSAkdmVyc2lvbl9taW47CitteSAkdmVyc2lvbl9yZXY7CitteSAkaW5zdGFsbGVyX2V4ZV92ZXJzaW9uID0gMTsKK215ICRvcGVuc3NsID0gImRpc2FibGVkIjsKK215ICRiX2lwdjYgPSAiZGlzYWJsZWQiOworbXkgJGJfd2luZXh0ZGxsID0gImRpc2FibGVkIjsKK215ICRzZGsgPSAiZGlzYWJsZWQiOworbXkgJGRlZmF1bHRfaW5zdGFsbF9iYXNlID0gImM6L3VzciI7CitteSAkaW5zdGFsbF9iYXNlID0gJGRlZmF1bHRfaW5zdGFsbF9iYXNlOworbXkgJGluc3RhbGwgPSAiZW5hYmxlZCI7CitteSAkaW5zdGFsbF9kZXZlbCA9ICJkaXNhYmxlZCI7CitteSAkcGVybCA9ICJkaXNhYmxlZCI7CitteSAkcGVybF9pbnN0YWxsID0gImRpc2FibGVkIjsKK215ICRsb2dnaW5nID0gImVuYWJsZWQiOworbXkgJGRlYnVnID0gImRpc2FibGVkIjsKK215ICRjb25maWdPcHRzID0gIiI7CitteSAkY1RtcCA9ICIiOworbXkgJGxpbmt0eXBlID0gInN0YXRpYyI7CitteSAkb3B0aW9uOworCitteSAkc2NyaXB0ZGlyID0gZGlybmFtZShhYnNfcGF0aCgkMCkpOworbXkgJHdpbjMyX2RpciA9IGRpcm5hbWUoJHNjcmlwdGRpcik7CitteSAkdG9wX2RpciA9IGRpcm5hbWUoJHdpbjMyX2Rpcik7CitteSAkcGVybF9kaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHRvcF9kaXIsICJwZXJsIik7CisKK3ByaW50ICJcbnRvcF9kaXI6ICAgICAgJHRvcF9kaXJcbiI7CitwcmludCAid2luMzJfZGlyOiAgICAkd2luMzJfZGlyXG4iOworcHJpbnQgInBlcmxfZGlyOiAgICAgJHBlcmxfZGlyXG4iOworcHJpbnQgImluc3RhbGwgYmFzZTogJGluc3RhbGxfYmFzZVxuXG4iOworCitjaGRpciAkd2luMzJfZGlyOworCitpZiAoIC1kICJkaXN0IiApIHsgfQorZWxzZSB7CisgIHByaW50ICJcblBsZWFzZSBjb3B5IHRoZSB3aW4zMi9kaXN0IGZvbGRlciBmcm9tIHRydW5rIHRvICR3aW4zMl9kaXIvXG5cbiI7CisgIGV4aXQ7Cit9CisKK2lmICghKC1kICRFTlZ7TVNWQ0Rpcn0pICYmICEoLWQgJEVOVntWQ0lOU1RBTExESVJ9KSAmJiAhZGVmaW5lZCgkRU5We1RBUkdFVF9DUFV9KSkgeworICBwcmludCAiXG5QbGVhc2UgcnVuIFZDVkFSUzMyLkJBVCBmaXJzdCB0byBzZXQgdXAgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGRcbiIgLgorICAgICAgICAiZW52aXJvbm1lbnQuXG5cbiI7CisgIGV4aXQ7Cit9CisKK2lmICggLWQgJGluc3RhbGxfYmFzZSkgeworICBwcmludCAiXG5QbGVhc2UgZGVsZXRlIG9yIHJlbmFtZSB0aGUgJGluc3RhbGxfYmFzZSBmb2xkZXIuXG5cbiI7CisgIGV4aXQ7Cit9CisKK215ICRzeXN0ZW1fbmV0c25tcGRsbCA9ICIkRU5We1dJTkRJUn1cXHN5c3RlbTMyXFxuZXRzbm1wLmRsbCI7CitpZiAoIC1mICRzeXN0ZW1fbmV0c25tcGRsbCkgeworICBwcmludCAiXG4kc3lzdGVtX25ldHNubXBkbGwgc2hvdWxkIGJlIHJlbmFtZWQgb3IgZGVsZXRlZC5cblxuIjsKKyAgCisgIHByaW50ICJXb3VsZCB5b3UgbGlrZSBtZSB0byBkZWxldGUgaXQ/ICh5L24/KSI7CisgICR8ID0gMTsKKyAgbXkgJHRlbXAgPSA8U1RESU4+OworICBjaG9tcCAkdGVtcDsKKyAgaWYgKGxjKCR0ZW1wKSBlcSAieSIgfHwgbGMoJHRlbXApIGVxICJ5ZXMiKSB7CisgICAgdW5saW5rICRzeXN0ZW1fbmV0c25tcGRsbCB8fCBkaWUgIkNvdWxkIG5vdCBkZWxldGUgZmlsZSAkc3lzdGVtX25ldHNubXBkbGxcbiI7CisgIH0KKyAgZWxzZSB7CisgICAgZXhpdDsKKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBEZXRlcm1pbmUgdmVyc2lvbiBmcm9tIHVuaXggY29uZmlndXJlIHNjcmlwdAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbXkgJHVuaXhfY29uZmlndXJlX2luID0gIi4uL2NvbmZpZ3VyZSI7CisKK29wZW4gKFVOSVhfQ09ORklHVVJFX0lOLCAiPCR1bml4X2NvbmZpZ3VyZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkdW5peF9jb25maWd1cmVfaW5cbiI7CisKK3doaWxlICg8VU5JWF9DT05GSUdVUkVfSU4+KQoreworICBjaG9tcDsKKyAgL1BBQ0tBR0VfVkVSU0lPTj0nKC4qKScvOworICBpZiAoJDEgbmUgIiIpIHsKKyAgICAkdmVyc2lvbiA9ICQxOworICAgIGxhc3Q7CisgIH0KK30KK2Nsb3NlIFVOSVhfQ09ORklHVVJFX0lOOworCisjIERldGVybWluZSB2ZXJzaW9uIGZvciBQZXJsICg0IGNoYXJhY3RlcnMgd2l0aCBjb21tYXMpCiskdmVyc2lvbl9mb3JfcGVybCA9ICR2ZXJzaW9uOworbXkgJGRvdENvdW50ID0gKCR2ZXJzaW9uID1+IHRyLy4vLyk7Cit3aGlsZSAoJGRvdENvdW50IDwgMykgeworICAkdmVyc2lvbl9mb3JfcGVybCAuPSAiLjAiOworICAkZG90Q291bnQrKzsKK30KKyR2ZXJzaW9uX2Zvcl9wZXJsID1+IHMvXC4vLC9nOworCisjIERldGVybWluZSB2ZXJzaW9uIGZvciBOU0lTIGluc3RhbGxlcgorbXkgQHZlcnNpb25fYXJyYXkgPSBzcGxpdCgvXC4vLCAkdmVyc2lvbik7CiskdmVyc2lvbiA9fiAvLio/XC4uKj9cLiguKikvOworJHZlcnNpb25fcmV2ID0gJDEgfHwgMDsKKyR2ZXJzaW9uX21haiA9ICR2ZXJzaW9uX2FycmF5WzBdIHx8IDA7CiskdmVyc2lvbl9taW4gPSAkdmVyc2lvbl9hcnJheVsxXSB8fCAwOworCitwcmludCAiTmV0LVNOTVAgdmVyc2lvbjogICAgICAkdmVyc2lvblxuIjsKK3ByaW50ICJOZXQtU05NUCBQZXJsIHZlcnNpb246ICR2ZXJzaW9uX2Zvcl9wZXJsXG4iOworcHJpbnQgIk5ldC1TTk1QIHZlcnNpb24gTUFKOiAgJHZlcnNpb25fbWFqXG4iOworcHJpbnQgIk5ldC1TTk1QIHZlcnNpb24gTUlOMTogJHZlcnNpb25fbWluXG4iOworcHJpbnQgIk5ldC1TTk1QIHZlcnNpb24gTUlOMjogJHZlcnNpb25fcmV2XG5cbiI7CisKKyNnb3RvIHNraXAxOworI2V4aXQ7CisKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIENvbW1vbiBidWlsZCBvcHRpb25zOgorJGJfaXB2NiA9ICJlbmFibGVkIjsKKyRzZGsgPSAiZW5hYmxlZCI7CiskZGVmYXVsdF9pbnN0YWxsX2Jhc2UgPSAiYzovdXNyIjsKKyRpbnN0YWxsX2Jhc2UgPSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2U7CiskcGVybF9pbnN0YWxsID0gImRpc2FibGVkIjsKKyRkZWJ1ZyA9ICJkaXNhYmxlZCI7CiskY29uZmlnT3B0cyA9ICIiOworJGNUbXAgPSAiIjsKKyRsaW5rdHlwZSA9ICJkeW5hbWljIjsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBiaW5hcnk6CisjIHdpbkV4dERMTCA9IGRpc2FibGVkCisjIFNTTCA9IGVuYWJsZWQKKyRvcGVuc3NsID0gImVuYWJsZWQiOworJGJfd2luZXh0ZGxsID0gImRpc2FibGVkIjsKKyRwZXJsID0gImVuYWJsZWQiOworJGluc3RhbGwgPSAiZW5hYmxlZCI7CiskaW5zdGFsbF9kZXZlbCA9ICJlbmFibGVkIjsKKworY2hkaXIgJHdpbjMyX2RpcjsKKyZidWlsZCgpOworJmNyZWF0ZV9wZXJsX3BhY2thZ2UoKTsKKworcHJpbnQgIlxuQ2xlYW5pbmcgdXAgJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3QvXG4iOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcGQuY29uZiIpOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcHRyYXBkLmNvbmYiKTsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBiaW5hcnk6CisjIHdpbkV4dERMTCA9IGVuYWJsZWQKKyMgU1NMID0gZW5hYmxlZAorJG9wZW5zc2wgPSAiZW5hYmxlZCI7CiskYl93aW5leHRkbGwgPSAiZW5hYmxlZCI7CiskcGVybCA9ICJkaXNhYmxlZCI7CiskaW5zdGFsbCA9ICJkaXNhYmxlZCI7CiskaW5zdGFsbF9kZXZlbCA9ICJkaXNhYmxlZCI7CisKK2NoZGlyICR3aW4zMl9kaXI7CismYnVpbGQoKTsKKworcHJpbnQgIlxuQ29weWluZyBzbm1wZC5leGUgdG8gc25tcGQtd2luRXh0RExMLmV4ZVxuIjsKK2NvcHkoImJpbi9yZWxlYXNlL3NubXBkLmV4ZSIsIiRpbnN0YWxsX2Jhc2UvYmluL3NubXBkLXdpbkV4dERMTC5leGUiKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBzbm1wZC5leGUgdG8gc25tcGQtd2luRXh0RExMLmV4ZTogJD8iKTsKKworcHJpbnQgIlxuQ2xlYW5pbmcgdXAgJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3QvXG4iOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcGQuY29uZiIpOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcHRyYXBkLmNvbmYiKTsKKworCitwcmludCAiUmVuYW1pbmcgJGluc3RhbGxfYmFzZS9iaW4gdG8gJGluc3RhbGxfYmFzZS9iaW4uc3NsXG4iOworcmVuYW1lICgiJGluc3RhbGxfYmFzZS9iaW4iLCIkaW5zdGFsbF9iYXNlL2Jpbi5zc2wiKSB8fCBkaWUgKCJDb3VsZCBub3QgcmVuYW1lIGZvbGRlcjogJD8iKTsKK3ByaW50ICJSZW5hbWluZyAkaW5zdGFsbF9iYXNlL2xpYiB0byAkaW5zdGFsbF9iYXNlL2xpYi5zc2xcbiI7CityZW5hbWUgKCIkaW5zdGFsbF9iYXNlL2xpYiIsIiRpbnN0YWxsX2Jhc2UvbGliLnNzbCIpIHx8IGRpZSAoIkNvdWxkIG5vdCByZW5hbWUgZm9sZGVyOiAkPyIpOworcHJpbnQgIlJlbmFtaW5nICRpbnN0YWxsX2Jhc2UvcGVybCB0byAkaW5zdGFsbF9iYXNlL3Blcmwuc3NsXG4iOworcmVuYW1lICgiJGluc3RhbGxfYmFzZS9wZXJsIiwiJGluc3RhbGxfYmFzZS9wZXJsLnNzbCIpIHx8IGRpZSAoIkNvdWxkIG5vdCByZW5hbWUgZm9sZGVyOiAkPyIpOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBiaW5hcnk6CisjIHdpbkV4dERMTCA9IGRpc2FibGVkCisjIFNTTCA9IGRpc2FibGVkCiskb3BlbnNzbCA9ICJkaXNhYmxlZCI7CiskYl93aW5leHRkbGwgPSAiZGlzYWJsZWQiOworJHBlcmwgPSAiZW5hYmxlZCI7CiskaW5zdGFsbCA9ICJlbmFibGVkIjsKKyRpbnN0YWxsX2RldmVsID0gImVuYWJsZWQiOworCitjaGRpciAkd2luMzJfZGlyOworJmJ1aWxkKCk7CismY3JlYXRlX3BlcmxfcGFja2FnZSgpOworCitwcmludCAiXG5DbGVhbmluZyB1cCAkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9cbiI7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wZC5jb25mIik7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wdHJhcGQuY29uZiIpOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEJ1aWxkIGJpbmFyeToKKyMgd2luRXh0RExMID0gZW5hYmxlZAorIyBTU0wgPSBkaXNhYmxlZAorJG9wZW5zc2wgPSAiZGlzYWJsZWQiOworJGJfd2luZXh0ZGxsID0gImVuYWJsZWQiOworJHBlcmwgPSAiZGlzYWJsZWQiOworJGluc3RhbGwgPSAiZGlzYWJsZWQiOworJGluc3RhbGxfZGV2ZWwgPSAiZGlzYWJsZWQiOworCitjaGRpciAkd2luMzJfZGlyOworJmJ1aWxkKCk7CisKK3ByaW50ICJcbkNvcHlpbmcgc25tcGQuZXhlIHRvIHNubXBkLXdpbkV4dERMTC5leGVcbiI7Citjb3B5KCJiaW4vcmVsZWFzZS9zbm1wZC5leGUiLCIkaW5zdGFsbF9iYXNlL2Jpbi9zbm1wZC13aW5FeHRETEwuZXhlIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgc25tcGQuZXhlIHRvIHNubXBkLXdpbkV4dERMTC5leGU6ICQ/Iik7CisKK3ByaW50ICJcbkNsZWFuaW5nIHVwICRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L1xuIjsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXBkLmNvbmYiKTsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXB0cmFwZC5jb25mIik7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworcHJpbnQgIlxuXG5Db3B5aW5nIGRpc3QgZmlsZXM6XG4iOworcHJpbnQgIj09PT09PT09PT09PT09PT09PT1cblxuIjsKKworbWtkaXIgKCIkaW5zdGFsbF9iYXNlL2RvY3MiKTsKK21rZGlyICgiJGluc3RhbGxfYmFzZS90ZW1wIik7CisKKyZjaGVja19kaXJfZXhpc3RzKCIkaW5zdGFsbF9iYXNlL2RvY3MiKTsKKyZjaGVja19kaXJfZXhpc3RzKCIkaW5zdGFsbF9iYXNlL3RlbXAiKTsKKworY2hkaXIgJHRvcF9kaXI7Citjb3B5KCJDT1BZSU5HIiwiJGluc3RhbGxfYmFzZS9kb2NzLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Citjb3B5KCd3aW4zMlxkaXN0XFJFQURNRS50eHQnLCIkaW5zdGFsbF9iYXNlLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Citjb3B5KCd3aW4zMlxkaXN0XHNjcmlwdHNcbmV0LXNubXAtcGVybC10ZXN0LnBsJywiJGluc3RhbGxfYmFzZS9iaW4vIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKKworCitza2lwMToKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitwcmludCAiXG5cbkNvcHlpbmcgTlNJUyBpbnN0YWxsZXIgZmlsZXM6XG4iOworcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiI7CisKK2NoZGlyICR0b3BfZGlyOworY29weSgnd2luMzJcZGlzdFxpbnN0YWxsZXJcU2V0RW5WYXIubnNpJywiJGluc3RhbGxfYmFzZS8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworY29weSgnd2luMzJcZGlzdFxpbnN0YWxsZXJcbmV0LXNubXAubnNpJywiJGluc3RhbGxfYmFzZS9uZXQtc25tcC5uc2kiKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworY29weSgnd2luMzJcZGlzdFxpbnN0YWxsZXJcQWRkMlBhdGgubnNpJywiJGluc3RhbGxfYmFzZS8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworY29weSgnd2luMzJcZGlzdFxpbnN0YWxsZXJcbmV0LXNubXAtaGVhZGVyMS5ibXAnLCIkaW5zdGFsbF9iYXNlLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7CisKK29wZW4gKFRFTVAsICI+JGluc3RhbGxfYmFzZS9yZWdpc3RlcmFnZW50LmJhdCIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgZmlsZTogJD8iKTsKK2Nsb3NlIFRFTVA7CitvcGVuIChURU1QLCAiPiRpbnN0YWxsX2Jhc2UvdW5yZWdpc3RlcmFnZW50LmJhdCIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgZmlsZTogJD8iKTsKK2Nsb3NlIFRFTVA7CitvcGVuIChURU1QLCAiPiRpbnN0YWxsX2Jhc2UvcmVnaXN0ZXJ0cmFwZC5iYXQiKSB8fCBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIGZpbGU6ICQ/Iik7CitjbG9zZSBURU1QOworb3BlbiAoVEVNUCwgIj4kaW5zdGFsbF9iYXNlL3VucmVnaXN0ZXJ0cmFwZC5iYXQiKSB8fCBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIGZpbGU6ICQ/Iik7CitjbG9zZSBURU1QOworb3BlbiAoVEVNUCwgIj4kaW5zdGFsbF9iYXNlL2V0Yy9zbm1wL3NubXAuY29uZiIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgZmlsZTogJD8iKTsKK2Nsb3NlIFRFTVA7CisKK3ByaW50ICJcblxuQ29weWluZyBkb2N1bWVudGF0aW9uOlxuIjsKK3ByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOworCisjIFRvIGRvOiByZXBsYWNlIHRoZSB0d28gbGluZXMgYmVsb3cgd2l0aCBjb21tYW5kcyB0aGF0IGJ1aWxkIHRoZSAuY2htIGZpbGUuCitvcGVuIG91dCwgIj4kaW5zdGFsbF9iYXNlL2RvY3MvbmV0LXNubXAuY2htIjsKK2Nsb3NlIG91dDsKKworcHJpbnQgIlxuXG5CdWlsZGluZyBpbnN0YWxsZXI6XG4iOworcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiI7CisKK215ICRzdWZmaXggPSAkRU5We0xJQn0gPX4gL1xceDY0fFxcYW1kNjQvID8gIng2NCIgOiAieDg2IjsKK2lmIChzeXN0ZW0oIlwiJG1ha2Vuc2lzXCIgL0RQUk9EVUNUX01BSl9WRVJTSU9OPVwiJHZlcnNpb25fbWFqXCIgL0RQUk9EVUNUX01JTl9WRVJTSU9OPVwiJHZlcnNpb25fbWluXCIgL0RQUk9EVUNUX1JFVklTSU9OPVwiJHZlcnNpb25fcmV2XCIgL0RQUk9EVUNUX0VYRV9WRVJTSU9OPVwiJGluc3RhbGxlcl9leGVfdmVyc2lvblwiIC9ESU5TVEFMTEVSX1BMQVRGT1JNPVwiJHN1ZmZpeFwiIFwiJGluc3RhbGxfYmFzZS9uZXQtc25tcC5uc2lcIiIpICE9IDApIHsKKyAgICBkaWUoIkJ1aWxkaW5nIGluc3RhbGxlciBmYWlsZWQiKTsKK30KKworcHJpbnQgIlxuPT09PT09PVxuIjsKK3ByaW50ICJEb25lISEhXG4iOworcHJpbnQgIj09PT09PT1cblxuIjsKKworZXhpdDsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3ViIGJ1aWxkIHsKKyAgcHJpbnQgIlxuXG5CdWlsZGluZyB3aXRoIG9wdGlvbnM6XG4iOworICBwcmludCAiPT09PT09PT09PT09PT09PT09PT09PVxuXG4iOworICBwcmludCAiMS4gIE9wZW5TU0wgc3VwcG9ydDogICAgICAgICAgICAgICAgIiAuICRvcGVuc3NsLiAiXG4iOworICBwcmludCAiMi4gIFBsYXRmb3JtIFNESyBzdXBwb3J0OiAgICAgICAgICAgIiAuICRzZGsgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiMy4gIEluc3RhbGwgcGF0aDogICAgICAgICAgICAgICAgICAgIiAuICRpbnN0YWxsX2Jhc2UgLiAiXG4iOworICBwcmludCAiNC4gIEluc3RhbGwgYWZ0ZXIgYnVpbGQ6ICAgICAgICAgICAgIiAuICRpbnN0YWxsIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjUuICBQZXJsIG1vZHVsZXM6ICAgICAgICAgICAgICAgICAgICIgLiAkcGVybCAuICJcbiI7CisgIHByaW50ICI2LiAgSW5zdGFsbCBwZXJsIG1vZHVsZXM6ICAgICAgICAgICAiIC4gJHBlcmxfaW5zdGFsbCAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICI3LiAgUXVpZXQgYnVpbGQgKGxvZ2dlZCk6ICAgICAgICAgICAiIC4gJGxvZ2dpbmcgLiAiXG4iOworICBwcmludCAiOC4gIERlYnVnIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgIiAuICRkZWJ1ZyAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICI5LiAgSVB2NiB0cmFuc3BvcnRzIChyZXF1aXJlcyBTREspOiAiIC4gJGJfaXB2NiAuICJcbiI7CisgIHByaW50ICIxMC4gd2luRXh0RExMIGFnZW50IChyZXF1aXJlcyBTREspOiAiIC4gJGJfd2luZXh0ZGxsIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjExLiBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICIgLiAkbGlua3R5cGUgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiMTIuIEluc3RhbGwgZGV2ZWxvcG1lbnQgZmlsZXMgICAgICAgIiAuICRpbnN0YWxsX2RldmVsIC4gIlxuIjsKKworICAkY1RtcCA9ICgkb3BlbnNzbCBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXNzbCIgOiAiIiApOworICAkY29uZmlnT3B0cyA9ICIkY1RtcCI7CisgICRjVG1wID0gKCRzZGsgZXEgImVuYWJsZWQiID8gIi0td2l0aC1zZGsiIDogIiIgKTsKKyAgJGNvbmZpZ09wdHMgPSAiJGNvbmZpZ09wdHMgJGNUbXAiOworICAkY1RtcCA9ICgkYl9pcHY2IGVxICJlbmFibGVkIiA/ICItLXdpdGgtaXB2NiIgOiAiIiApOworICAkY29uZmlnT3B0cyA9ICIkY29uZmlnT3B0cyAkY1RtcCI7CisgICRjVG1wID0gKCRiX3dpbmV4dGRsbCBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXdpbmV4dGRsbCIgOiAiIiApOworICAkY29uZmlnT3B0cyA9ICIkY29uZmlnT3B0cyAkY1RtcCI7CisgICRjVG1wID0gKCRkZWJ1ZyBlcSAiZW5hYmxlZCIgPyAiLS1jb25maWc9ZGVidWciIDogIi0tY29uZmlnPXJlbGVhc2UiICk7CisgICRjb25maWdPcHRzID0gIiRjb25maWdPcHRzICRjVG1wIjsKKyAgCisgICMgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcworICAKKyAgIyBTZXQgdG8gbm90IHNlYXJjaCBmb3Igbm9uLWV4aXN0ZW50ICIuZGVwIiBmaWxlcworICAkRU5We05PX0VYVEVSTkFMX0RFUFN9PSIxIjsKKworICAkRU5We0lOQ0xVREV9IC49ICI7JG9wZW5zc2xpbmNkaXIiOworICAkRU5We0xJQn0gICAgIC49ICI7JG9wZW5zc2xsaWJkaXIiOworCisgICMgU2V0IFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBtYWtlIHRlc3RzIGNhbiBsb2NhdGUgdGhlIERMTAorICAkRU5We1BBVEh9ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR0b3BfZGlyLCAiYmluIiwgJGRlYnVnIGVxICJlbmFibGVkIiA/ICJkZWJ1ZyIgOiAicmVsZWFzZSIpIC4gIjskRU5We1BBVEh9IjsKKyAgCisgICMgU2V0IE1JQkRJUlMgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBtYWtlIHRlc3RzIGNhbiBsb2NhdGUgdGhlIG1pYnMKKyAgbXkgJHRlbXBfbWliZGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR0b3BfZGlyLCAibWlicyIpOworICAkdGVtcF9taWJkaXIgPX4gcy9cXC9cLy9nOworICAkRU5We01JQkRJUlN9PSR0ZW1wX21pYmRpcjsKKyAgCisgICMgU2V0IFNOTVBDT05GUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIGNvbmYudCB0ZXN0IGNhbiBsb2NhdGUKKyAgIyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgIyBTZWUgdGhlIG5vdGUgYWJvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBXaW4zMiBzZWN0aW9uIG9mIAorICAjIHBlcmwvU05NUC9SRUFETUUgZm9yIGRldGFpbHMgb24gd2h5IHRoaXMgaXMgbmVlZGVkLiAKKyAgJEVOVntTTk1QQ09ORlBBVEh9PSJ0IjskRU5We1NOTVBDT05GUEFUSH07CisgIAorICBwcmludCAiXG5CdWlsZGluZy4uLlxuIjsKKyAgCisgIHByaW50ICJcbkNyZWF0aW5nICoub3V0IGxvZyBmaWxlcy5cblxuIjsKKworICAjcHJpbnQgIkRlbGV0aW5nIG9sZCBsb2cgZmlsZXMuLi5cbiI7CisgICNzeXN0ZW0oImRlbCAqLm91dCA+IE5VTDogMj4mMSIpOworCisgICMgRGVsZXRlIG5ldC1zbm1wLWNvbmZpZy5oIGZyb20gbWFpbiBpbmNsdWRlIGZvbGRlciBqdXN0IGluIGNhc2UgaXQgd2FzIGNyZWF0ZWQgYnkgYSBDeWd3aW4gb3IgTWluR1cgYnVpbGQKKyAgc3lzdGVtKCJkZWwgLi5cXGluY2x1ZGVcXG5ldC1zbm1wXFxuZXQtc25tcC1jb25maWcuaCA+IE5VTDogMj4mMSIpOworICAKKyAgcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlLi4uXG4iOworICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9JGxpbmt0eXBlIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiID4gY29uZmlndXJlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY29uZmlndXJlLm91dCkiOworCisgIHByaW50ICJDbGVhbmluZy4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGNsZWFuID4gY2xlYW4ub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIjsKKworICBwcmludCAiQnVpbGRpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gPiBtYWtlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgbWFrZS5vdXQpIjsKKworICBpZiAoJHBlcmwgZXEgImVuYWJsZWQiKSB7CisgICAgaWYgKCRsaW5rdHlwZSBlcSAic3RhdGljIikgeworICAgICAgcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlIGZvciBETEwuLi5cbiI7CisgICAgICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9ZHluYW1pYyAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiA+IHBlcmxjb25maWd1cmUub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsY29uZmlndXJlLm91dCkiOworICAgICAgCisgICAgICBwcmludCAiQ2xlYW5pbmcgbGlicmFyaWVzLi4uXG4iOworICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnNfY2xlYW4gPj4gY2xlYW4ub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIjsKKyAgICAgIAorICAgICAgcHJpbnQgIkJ1aWxkaW5nIERMTCBsaWJyYXJpZXMuLi5cbiI7CisgICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlicyA+IGRsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGRsbC5vdXQpIjsKKyAgICB9CisKKyAgICBwcmludCAiQ2xlYW5pbmcgUGVybC4uLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfY2xlYW4gPj4gY2xlYW4ub3V0IDI+JjEiKTsgIyBJZiBhbHJlYWR5IGNsZWFuZWQsIE1ha2VmaWxlIGlzIGdvbmUgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzIQorCisgICAgcHJpbnQgIkJ1aWxkaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybCA+IHBlcmxtYWtlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybG1ha2Uub3V0KSI7CisKKyMgICAgcHJpbnQgIlRlc3RpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworIyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF90ZXN0ID4gcGVybHRlc3Qub3V0IDI+JjEiKTsgIyBEb24ndCBkaWUgaWYgYWxsIHRoZSB0ZXN0cyBkb24ndCBwYXNzLi4KKyAgICAKKyAgICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKKyAgICAgIHByaW50ICJJbnN0YWxsaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2luc3RhbGwgPiBwZXJsaW5zdGFsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxpbnN0YWxsLm91dCkiOworICAgIH0KKyAgICAgIAorICAgIHByaW50ICJcblNlZSBwZXJsdGVzdC5vdXQgZm9yIFBlcmwgdGVzdCByZXN1bHRzXG4iOworICB9CisKKyAgcHJpbnQgIlxuIjsKKyAgaWYgKCRpbnN0YWxsIGVxICJlbmFibGVkIikgeworICAgIHByaW50ICJJbnN0YWxsaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbCA+IGluc3RhbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsLm91dCkiOworICB9CisgIGVsc2UgeworICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGwgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB0byAkaW5zdGFsbF9iYXNlXG4iOworICB9CisKKyAgaWYgKCRpbnN0YWxsX2RldmVsIGVxICJlbmFibGVkIikgeworICAgIHByaW50ICJJbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsX2RldmVsID4gaW5zdGFsbF9kZXZlbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGxfZGV2ZWwub3V0KSI7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbF9kZXZlbCB0byBpbnN0YWxsIHRoZSBkZXZlbG9wbWVudCBmaWxlcyB0byAkaW5zdGFsbF9iYXNlXG4iOworICB9CisgIAorICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZGlzYWJsZWQiICYmICRwZXJsIGVxICJlbmFibGVkIikgeworICAgIHByaW50ICJUeXBlIG5tYWtlIHBlcmxfaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNcbiI7CisgIH0KKworICBwcmludCAiXG5Eb25lIVxuIjsgIAorfSAjIHN1YiBidWlsZAorCisKKworCitzdWIgY3JlYXRlX3BlcmxfcGFja2FnZSB7CisKKyAgcHJpbnQgIlxuXG5DcmVhdGluZyBQZXJsIHBhY2thZ2U6XG4iOworICBwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09XG5cbiI7CisgIAorICBjaGRpciAkcGVybF9kaXIgfHwgZGllICgiQ291bGQgbm90IGVudGVyIFBlcmwgZGlyZWN0b3J5OiAkcGVybF9kaXIiKTsKKyAgCisgIHN5c3RlbSgibm1ha2UgcHBkID4gcGVybHBhY2thZ2Uub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJscGFja2FnZS5vdXQpIjsKKyAgI3JlbmFtZSgiQnVuZGxlLU5ldFNOTVAucHBkIiwiTmV0U05NUC5wcGQiKSB8fCBkaWUgIkNvdWxkIG5vdCByZW5hbWUgQnVuZGxlLU5ldFNOTVAucHBkIHRvIE5ldFNOTVAucHBkIjsKKyAgCisgIHsKKyAgICBteSAkZmlsZV9vdXQgPSAiTmV0U05NUC5wcGQiOworICAgIG15ICRmaWxlX2luID0gIkJ1bmRsZS1OZXRTTk1QLnBwZCI7CisgIAorICAgIG9wZW4gKEZJTEVfT1VULCAiPiRmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9vdXRcbiI7CisgICAgb3BlbiAoRklMRV9JTiwgIjwkZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9pblxuIjsKKyAgICAKKyAgICBwcmludCAiY3JlYXRpbmcgJGZpbGVfb3V0XG4iOworICAKKyAgICB3aGlsZSAoPEZJTEVfSU4+KQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgcy9ePFNPRlRQS0cgTkFNRS4qLzxTT0ZUUEtHIE5BTUU9Ik5ldFNOTVAiIFZFUlNJT049IiR2ZXJzaW9uX2Zvcl9wZXJsIj4vOworICAgICAgcy8uKj88VElUTEU+LiovICAgIDxUSVRMRT5OZXQtU05NUDxcL1RJVExFPi87CisgICAgICBzLy4qPzxBQlNUUkFDVD4uKi8gICAgPEFCU1RSQUNUPk9iamVjdCBPcmllbnRlZCBJbnRlcmZhY2UgdG8gTmV0LVNOTVA8XC9BQlNUUkFDVD4vOworICAgICAgcy8uKj88Q09ERUJBU0UuKi8gICAgICAgIDxDT0RFQkFTRSBIUkVGPSJ4ODZcL05ldFNOTVAudGFyLmd6IiBcLz4vOworICAKKyAgICAgIHByaW50IEZJTEVfT1VUICRfIC4gIlxuIjsKKyAgICB9CisgICAgY2xvc2UgRklMRV9JTjsKKyAgICBjbG9zZSBGSUxFX09VVDsKKyAgfQorICAKKyAgcHJpbnQgIkNvbXByZXNzaW5nIFBlcmwgbW9kdWxlc1xuIjsKKyAgdW5saW5rICJOZXRTTk1QLnRhciI7CisgIHVubGluayAiTmV0U05NUC50YXIuZ3oiOworICB1bmxpbmsgInBlcmwtdGFyLm91dCI7CisgIHVubGluayAicGVybC1nemlwLm91dCI7CisgIHByaW50ICIgIENyZWF0aW5nIFBlcmwgdGFyIGZpbGVcbiI7CisgIGlmIChzeXN0ZW0oIlwiJHRhcl9jb21tYW5kXCIgY3ZmIE5ldFNOTVAudGFyIGJsaWIgPiBwZXJsLXRhci5vdXQgMj4mMSIpKSB7IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuICBTZWUgcGVybC10YXIub3V0Iik7IH0KKyAgcHJpbnQgIiAgQ29tcHJlc3NpbmcgUGVybCB0YXIgZmlsZVxuIjsKKyAgaWYgKHN5c3RlbSgiXCIkZ3ppcF9jb21tYW5kXCIgLS1iZXN0IE5ldFNOTVAudGFyID4gcGVybC1nemlwLm91dCAyPiYxIikpIHsgZGllICgiQ291bGQgbm90IGNvbXByZXNzIHRhciBmaWxlIHdpdGggZ3ppcC4gU2VlIHBlcmwtZ3ppcC5vdXQiKTsgfQorICAgCisgICMgUmVtb3ZlIGNoZGlyLi4KKyAgY2hkaXIgJHBlcmxfZGlyIHx8IGRpZSAoIkNvdWxkIG5vdCBlbnRlciBQZXJsIGRpcmVjdG9yeTogJHBlcmxfZGlyIik7CisgIG1rZGlyICgiJGluc3RhbGxfYmFzZS9wZXJsIik7CisgIG1rZGlyICgiJGluc3RhbGxfYmFzZS9wZXJsL3g4NiIpOworICAmY2hlY2tfZGlyX2V4aXN0cygiJGluc3RhbGxfYmFzZS9wZXJsIik7CisgICZjaGVja19kaXJfZXhpc3RzKCIkaW5zdGFsbF9iYXNlL3BlcmwveDg2Iik7CisgIGNvcHkoIk5ldFNOTVAucHBkIiwiJGluc3RhbGxfYmFzZS9wZXJsLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7CisgIGNvcHkoIk5ldFNOTVAudGFyLmd6IiwiJGluc3RhbGxfYmFzZS9wZXJsL3g4Ni8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworfSAgIyBzdWIgY3JlYXRlX3BlcmxfcGFja2FnZQorCitzdWIgY2hlY2tfZGlyX2V4aXN0cyB7CisgIG15ICRkaXIgPSBzaGlmdDsKKyAgaWYgKCEgLWQgJGRpcikgeworICAgIGRpZSAiRGlyZWN0b3J5ICRkaXIgaXMgbWlzc2luZ1xuIjsKKyAgfQorfQorCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2h0bWxoZWxwL0RldmVsb3Blcl9GQVEuaHRtbCBiL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRGV2ZWxvcGVyX0ZBUS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGFjYmMKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9kaXN0L2h0bWxoZWxwL0RldmVsb3Blcl9GQVEuaHRtbApAQCAtMCwwICsxLDc4NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5yc3RvcnkncyBORVQtU05NUCBEZXZlbG9wZXJzIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIFBhZ2U8L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHkgYmdjb2xvcj0iI2ZmZmZmZiIgYmFja2dyb3VuZD0idWNkLXNubXAtYmczLmdpZiI+CisgICAgPGRpdiBhbGlnbj1jZW50ZXI+CisgICAgPGgxPnJzdG9yeSdzIE5FVC1TTk1QIERldmVsb3BlcnMgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgUGFnZTwvaDE+CisgICAgPC9kaXY+Cis8aHI+CisgICAgPGRpdiBhbGlnbj1jZW50ZXI+CisgICAgPGZvbnQgc2l6ZT0tMT4KKyAgICAgIDxhIGhyZWY9IkZBUS5odG1sIj5bT2ZmaWNpYWwgRkFRXTwvYT4gfCAKKwk8YSBocmVmPSIjdG9rZW5zIj5bRGVidWcgdG9rZW5zXTwvYT4gfCAKKwk8YSBocmVmPSIjYWdlbnR4Ij5bQWdlbnRYXTwvYT4gfCAKKwk8YSBocmVmPSIjaW5zdGFsbCI+W0luc3RhbGxdPC9hPiB8IAorCTxhIGhyZWY9IiNkaXNhYmxlIj5bRGlzYWJsZV08L2E+IHwgCisJPGEgaHJlZj0iI2Vycm9ycyI+W0Vycm9yc108L2E+IHwgCisJPGEgaHJlZj0iI2JpdHMiPltCaXRzXTwvYT4gfCAKKwk8YSBocmVmPSIjZW1iZWRkZWQiPltlbWJlZGRlZCBwZXJsXTwvYT4gfCAKKwk8YSBocmVmPSIjc211eCI+W1NNVVhdPC9hPiB8IAorCTxhIGhyZWY9IiNlbnRpZCI+W0VudGVycHJpc2UgT0lEXTwvYT4gfCAKKwk8YSBocmVmPSIjYXV0b2RlcHMiPltBdXRvbWF0aWMgZGVwZW5kZW5jaWVzXTwvYT4gfCAKKwk8YSBocmVmPSIjY3Jvc3MiPltDcm9zcyBjb21waWxpbmddPC9hPiB8IAorCTxhIGhyZWY9IiNzdGF0aWMiPltTdGF0aWMgbGlua2luZ108L2E+IHwgCisJPGEgaHJlZj0iI3JlYWRmZHMiPltyZWFkZmRzXTwvYT4gfCAKKwk8YSBocmVmPSIjc2hhcmluZyI+W1NoYXJpbmcgZGF0YV08L2E+IHwgCisJPGEgaHJlZj0ibWFuMS1taWIyYy4xLmh0bWwiPlttaWIyYy5hcnJheS11c2VyLmNvbmZdPC9hPiB8IAorCTxhIGhyZWY9IiNzdGVwcyI+W0JhYnkgU3RlcHMgZmxvd108L2E+IHwgCisgICAgICA8L2ZvbnQ+CisgICAgPC9kaXY+Cis8aHI+CitUaGlzIGlzIGp1c3QgYSBxdWljayBwYWdlIHRvIGFuc3dlciBzb21lIGNvbW1vbiBxdWVzdGlvbnMgdGhhdCBhcmVuJ3QgY292ZXJlZAoraW4gdGhlIDxhIGhyZWY9Ii9GQVEuaHRtbCI+b2ZmaWNpYWwgRkFRPC9hPi4KKworPGEgbmFtZT0iYWdlbnR4Ij48L2E+IDxoMj5BZ2VudFg8L2gyPgorPHByZT4gVG8gaGF2ZSB0aGUgc3ViLWFnZW50IGNvbW11bmljYXRlIG9uIGEgZGlmZmVyZW50IHNvY2tldCwgb3Igd2l0aAorZGlmZmVyZW50IHBlcm1pc3Npb25zLCBhZGQgdGhlc2UgbGluZSB0byB5b3VyIHNubXBkLmNvbmYKKworCSMgc29ja2V0IHBhdGgKKwlhZ2VudHhzb2NrZXQgL3RtcC9hZ2VudHgKKworCSMgcGVybXMgc29ja2V0IGRpcmVjdG9yeSB1c2VyaWQgZ3JvdXBpZAorCWFnZW50eHBlcm1zIDc3NyA3NzcgcnN0b3J5IHJzdG9yeQorCisKK2FuZCBhZGQgdGhpcyBsaW5lIHRvIHlvdXIgc3ViYWdlbnQ6CisKKwluZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVCwgIi90bXAvYWdlbnR4Iik7CisKKypiZWZvcmUqIHlvdSBjYWxsIGluaXRfYWdlbnQoKS4KKworIDwvcHJlPgorCis8YSBuYW1lPSJpbnN0YWxsIj48L2E+PGgyPmluc3RhbGw8L2gyPgorPHByZT4gSU5TVEFMTF9QUkVGSVggZ29lcyBiZWZvcmUgZXZlcnl0aGluZy4uIHNvLCB3aXRoIHRoZSBkZWZhdWx0cywganVzdAorc2V0dGluZyBJTlNUQUxMX1BSRUZJWD0vdG1wIHdvdWxkIHJlc3VsdCBpbiAvdG1wL3Vzci9sb2NhbC4uIAorc28gSU5TVEFMTF9QUkVGSVg9L3RtcCBwcmVmaXg9L3VzciBleGVjX3ByZWZpeD0vdXNyIHdvdWxkIGdvIGludG8gL3RtcC91c3IKKyA8L3ByZT4KKworPGEgbmFtZT0iZGlzYWJsZSI+PC9hPjxoMj5kaXNhYmxlPC9oMj4KKzxwcmU+IElmIHlvdSBhcmUgdXNpbmcgbmV0LXNubXAgVmVyc2lvbiA+PSA1LjEsIHRoZW4gdGhlIGZvbGxvd2luZyBjb25maWd1cmUKK29wdGlvbnMgbWF5IGJlIHVzZWZ1bCB0byB5b3U6CisKKyAgLS1kaXNhYmxlLWFnZW50ICAgICAgICAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFnZW50IChzbm1wZCkuCisgIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhcHBzIChzbm1wZ2V0LCAuLi4pLgorICAtLWRpc2FibGUtbWFudWFscyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtYW51YWxzLgorICAtLWRpc2FibGUtc2NyaXB0cyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBzY3JpcHRzIChtaWIyYywgLi4uKS4KKyAgLS1kaXNhYmxlLW1pYnMgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWliIGZpbGVzLgorICAtLWRpc2FibGUtbWliLWxvYWRpbmcgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgcGFyc2VzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlcyB0aGUgbWliIGZpbGVzLgorIDwvcHJlPgorCis8YSBuYW1lPSJlcnJvcnMiPjwvYT48aDI+ZXJyb3JzPC9oMj4KKzxwcmU+IGZyb20gUkZDIDM0MTY6CisKKyAgICAgICAgICAgICAgICAgICBub0Vycm9yKDApLAorICAgICAgICAgICAgICAgICAgIHRvb0JpZygxKSwKKyAgICAgICAgICAgICAgICAgICBub1N1Y2hOYW1lKDIpLCAgICAgIC0tIGZvciBwcm94eSBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgYmFkVmFsdWUoMyksICAgICAgICAtLSBmb3IgcHJveHkgY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5KDQpLCAgICAgICAgLS0gZm9yIHByb3h5IGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICBnZW5FcnIoNSksCisgICAgICAgICAgICAgICAgICAgbm9BY2Nlc3MoNiksCisgICAgICAgICAgICAgICAgICAgd3JvbmdUeXBlKDcpLAorICAgICAgICAgICAgICAgICAgIHdyb25nTGVuZ3RoKDgpLAorICAgICAgICAgICAgICAgICAgIHdyb25nRW5jb2RpbmcoOSksCisgICAgICAgICAgICAgICAgICAgd3JvbmdWYWx1ZSgxMCksCisgICAgICAgICAgICAgICAgICAgbm9DcmVhdGlvbigxMSksCisgICAgICAgICAgICAgICAgICAgaW5jb25zaXN0ZW50VmFsdWUoMTIpLAorICAgICAgICAgICAgICAgICAgIHJlc291cmNlVW5hdmFpbGFibGUoMTMpLAorICAgICAgICAgICAgICAgICAgIGNvbW1pdEZhaWxlZCgxNCksCisgICAgICAgICAgICAgICAgICAgdW5kb0ZhaWxlZCgxNSksCisgICAgICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbkVycm9yKDE2KSwKKyAgICAgICAgICAgICAgICAgICBub3RXcml0YWJsZSgxNyksCisgICAgICAgICAgICAgICAgICAgaW5jb25zaXN0ZW50TmFtZSgxOCkKKyA8L3ByZT4KKworPGEgbmFtZT0iYml0cyI+PC9hPjxoMj5iaXRzPC9oMj4KKzxwcmU+IFNOTVB2MSB1c2UgQklUIFNUUklOR3MgKFJGQyAxMjEyLCA1LjEuMSk6CisKKyAgICAgICAgICAoMykgIEFuIG9iamVjdCB3aXRoIEJJVCBTVFJJTkcgc3ludGF4IGNvbnRhaW5pbmcgbm8gbW9yZSB0aGFuCisgICAgICAgICAgICAgICAzMiBiaXRzIGJlY29tZXMgYW4gSU5URUdFUiBkZWZpbmVkIGFzIGEgc3VtOyBvdGhlcndpc2UgaWYKKyAgICAgICAgICAgICAgIG1vcmUgdGhhbiAzMiBiaXRzIGFyZSBwcmVzZW50LCB0aGUgb2JqZWN0IGJlY29tZXMgYW4KKyAgICAgICAgICAgICAgIE9DVEVUIFNUUklORywgd2l0aCB0aGUgYml0cyBudW1iZXJlZCBmcm9tIGxlZnQtdG8tcmlnaHQsCisgICAgICAgICAgICAgICBpbiB3aGljaCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBvY3RldCBtYXkKKyAgICAgICAgICAgICAgIGJlICJyZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSIuCisKK1NOTVB2MiBhbmQgYmV5b25kIHVzZXMgQklUUyAoUkZDIDM0MTcsIDguMSk6CisKKyAgICgzKSAgIFdoZW4gZW5jb2RpbmcgYW4gb2JqZWN0IHdob3NlIHN5bnRheCBpcyBkZXNjcmliZWQgdXNpbmcgdGhlCisgICAgICAgICBCSVRTIGNvbnN0cnVjdCwgdGhlIHZhbHVlIGlzIGVuY29kZWQgYXMgYW4gT0NURVQgU1RSSU5HLCBpbgorICAgICAgICAgd2hpY2ggYWxsIHRoZSBuYW1lZCBiaXRzIGluICh0aGUgZGVmaW5pdGlvbiBvZikgdGhlIGJpdHN0cmluZywKKyAgICAgICAgIGNvbW1lbmNpbmcgd2l0aCB0aGUgZmlyc3QgYml0IGFuZCBwcm9jZWVkaW5nIHRvIHRoZSBsYXN0IGJpdCwKKyAgICAgICAgIGFyZSBwbGFjZWQgaW4gYml0cyA4IChoaWdoIG9yZGVyIGJpdCkgdG8gMSAobG93IG9yZGVyIGJpdCkgb2YKKyAgICAgICAgIHRoZSBmaXJzdCBvY3RldCwgZm9sbG93ZWQgYnkgYml0cyA4IHRvIDEgb2YgZWFjaCBzdWJzZXF1ZW50CisgICAgICAgICBvY3RldCBpbiB0dXJuLCBmb2xsb3dlZCBieSBhcyBtYW55IGJpdHMgYXMgYXJlIG5lZWRlZCBvZiB0aGUKKyAgICAgICAgIGZpbmFsIHN1YnNlcXVlbnQgb2N0ZXQsIGNvbW1lbmNpbmcgd2l0aCBiaXQgOC4gIFJlbWFpbmluZyBiaXRzLAorICAgICAgICAgaWYgYW55LCBvZiB0aGUgZmluYWwgb2N0ZXQgYXJlIHNldCB0byB6ZXJvIG9uIGdlbmVyYXRpb24gYW5kCisgICAgICAgICBpZ25vcmVkIG9uIHJlY2VpcHQuCisgPC9wcmU+CisKKzxhIG5hbWU9ImVtYmVkZGVkIj48L2E+IDxoMj5lbWJlZGRlZCBwZXJsPC9oMj4KKzxwcmU+IEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gc25tcGQuY29uZjoKKyAKKyAgIHBlcmwgZG8gIi9wYXRoL3RvL3BlcmxfbW9kdWxlLnBsIgorCisKK1RvIHRlc3Q6CisKKzEpIFRyeSBzdGFyaW5nIHVwIHNubXBkLCBsaWtlIHNvOiAnc25tcGQgLURwZXJsJy4gQ2hlY2sgeW91ciBsb2cgZmlsZXMgZm9yOgorCisgIHBlcmw6IGluaXRpYWxpemluZyBwZXJsICgvdG1wL3NubXBfcGVybC5wbCkKKyAgc3RhcnRpbmcgcGVybF9tb2R1bGUucGwKKyAgcGVybF9tb2R1bGUucGwgbG9hZGVkIG9rCisgIHJlZ2lzdGVyaW5nIGF0IG5ldFNubXAuOTk5CisKK0lmIHlvdSBnZXQ6CisKKyAgcGVybDogaW5pdGlhbGl6aW5nIHBlcmwgKC91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wX3BlcmwucGwpCisgIENhbid0IG9wZW4gcGVybCBzY3JpcHQgIi91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wX3BlcmwucGwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIGVtYmVkZGVkIHBlcmwgc3VwcG9ydCBmYWlsZWQgdG8gaW5pdGFsaXplCisKK1RoZW4geW91IG5lZWQgdG8gbG9jYXRlIHNubXBfcGVybC5wbCwgYW5kIHB1dCBpdCBpbiB0aGUgY29ycmVjdCBwYXRoLCBPUiBwdXQKK3RoZSBwYXRoIGluIHlvdXIgc25tcGQuY29uZjoKKworCXBlcmxJbml0RmlsZSAvdG1wL3NubXBfcGVybC5wbAorCisKKzIpIE9uY2UgaXQncyBsb2FkZWQgb2ssIHRyeSBhIHdhbGs6CisKKwlzbm1wd2FsayAtdjJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgbmV0U25tcC45OTkKKworWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbiB5b3VyIGxvZ3M6CisKKyByZWZzOiBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9taWJfaGFuZGxlciwgTmV0U05NUDo6YWdlbnQ6OnJlZ2luZm8sIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbywgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyCitwcm9jZXNzaW5nIGEgcmVxdWVzdCBvZiB0eXBlIDE2MQorICAgcHJvY2Vzc2luZyByZXF1ZXN0IG9mIG5zVHJhbnNhY3Rpb25FbnRyeS4zCisgICAgLjEuMy42LjEuNC4xLjgwNzIuOTk5LjEuMi4xIC0+IGhlbGxvIHdvcmxkCisgICBmaW5pc2hlZCBwcm9jZXNzaW5nCisKKzMpIElmIG5vdCwgbWF5YmUgY2hlY2sgL3BhdGgvdG8vcGVybF9tb2R1bGUucGwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBleGVjdXRhYmxlLgorCitIb3BlIHRoYXQgaGVscHMuCisKKyA8L3ByZT4KKworPGEgbmFtZT0ic211eCI+PC9hPiA8aDI+U01VWDwvaDI+Cis8cHJlPiBUbyB0dXJuIG9mZiBTTVVYIHdoZW4geW91IGRvbid0IGhhdmUgdGhlIG9wdGlvbnMgb2YgcmVjb21waWxpbmcgZnJvbSBzb3VyY2UKK3RvIGRpc2FibGUgU01VWCBzdXBwb3J0LCB5b3UgaGF2ZSB0byBnaXZlIGl0IGFuIGludmFsaWQgSVAgYWRkcmVzcyB0byBiaW5kCit0by4gVGhpcyBtYXkgYmUgT1Mgc3BlY2lmaWMuIE9uIExpbnV4LCBpZiBJIHB1dCB0aGlzIGluIG15IHNubXBkLmNvbmY6CisKKwlzbXV4c29ja2V0IDEuMC4wLjAKKworSSBnZXQgYW4gZXJyb3IgYXQgc3RhcnR1cCwgYW5kIGxzb2Ygb3IgbmV0c3RhdCBzaG93IHRoYXQgc25tcGQgaXMgbm8gbG9uZ2VyCitsaXN0ZW50aW5nIG9uIHBvcnQgMTk5LiBJZiB5b3UgZ2V0IGFuZCBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSBzbXV4c29ja2V0Cit0b2tlbiBub3QgYmVpbmcgcmVjb25nbml6ZWQsIHRoZW4geW91J3JlIG91dCBvZiBsdWNrLiBZb3UnbGwgaGF2ZSB0byByZWNvbXBpbGUKK2Zyb20gc291cmNlIChvciBqdXN0IHVzZSBsb2NhbCBmaXJld2FsbCBydWxlcyB0byBibG9jayBjb25uZWN0aW9ucyB0byBwb3J0CisxOTkpLgorIDwvcHJlPgorCis8YSBuYW1lPSJlbnRpZCI+PC9hPiA8aDI+RW50ZXJwcmlzZSBPSUQ8L2gyPgorPHByZT4gRnJvbTogRGF2ZSBTaGllbGQsIFJPYmVydCBTdG9yeQorCitSZWNlbnQgVmVyc2lvbnMgKDUueCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IHdhbnQgdG8gKmp1c3QqIGNoYW5nZSB0aGUgc3lzT2JqZWN0SUQgbnVtYmVyaW5nLAorKGFuZCBsZWF2ZSB0aGUgbm90aWZpY2F0aW9ucyB1c2luZyB0aGUgTmV0LVNOTVAgZW50ZXJwcmlzZSBPSUQpCit0aGVuIHVzZSAgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkCitPciB5b3UgY291bGQganVzdCB1c2UgdGhlIHNubXBkLmNvbmYgZGlyZWN0aXZlICdzeXNvYmplY3RpZCcKK3RvIHNldCB0aGlzIGF0IHJ1biB0aW1lLgorCisKK0lmIHlvdSB3YW50IHRvICpqdXN0KiBjaGFuZ2UgZW50ZXJwcmlzZS1zcGVjaWZpYyBub3RpZmljYXRpb24gT0lECisoYW5kIGxlYXZlIHRoZSBzeXNPYmplY3RJRCB1c2luZyB0aGUgTmV0LVNOTVAgdmFsdWVzKQordGhlbiB1c2UgIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQKKworCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgKmJvdGgqIG9mIHRoZXNlLAordGhlbiB1c2UgLS13aXRoLWVudGVycHJpc2Utb2lkCisKK09sZGVyIFZlcnNpb25zICg0LjIueCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIG9sZGVyIHZlcnNpb24sIHlvdSBoYXZlIHRvIG1hbnVhbGwgdXBkYXRlIHRoZSB2ZXJzaW9uX2lkIGluCithZ2VudC9hZ2VudF90cmFwLmM6ODAKKworICAgb2lkIHZlcnNpb25faWRbXSAgICA9IHsgRVhURU5TSUJMRU1JQiwgQUdFTlRJRCwgT1NUWVBFIH07CisKKyA8L3ByZT4KKworPGEgbmFtZT0iYXV0b2RlcHMiPjwvYT4gPGgyPkF1dG9tYXRpYyBkZXBlbmRlbmNpZXM8L2gyPgorPHByZT4gRm9yIGF1dG8tZGVwZW5kZW5jaWVzLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIE1ha2VmaWxlOgorCisjCisjIEJ1aWxkIHJ1bGVzCisjCislLmQgOiAlLmMKKwlAZWNobyAiR2VuZXJhdGluZyBtYWtlZmlsZSAkQCAuLi4iCisJQHNldCAtZTsgJChDQykgLU0gJChDT1BUUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQ8IFwKKwl8IHNlZCAncy9cKCQqXClcLm9bIDpdKi9cMS5vICRAIDogL2cnID4gJEA7IFwKKwlbIC1zICRAIF0gfHwgJChSTSkgJChSTUZMQUdTKSAkQAorCitpbmNsdWRlICQoU09VUkNFUzouYz0uZCkKKworIDwvcHJlPgorCis8YSBuYW1lPSJjcm9zcyI+PC9hPiA8aDI+Q3Jvc3MgY29tcGlsaW5nPC9oMj4KKzxwcmU+IEZyb20gdGhlIG5ldC1zbm1wIElOU1RBTEwgZmlsZToKKworIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2FuIG5vdCBmaWd1cmUgb3V0CithdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIGhvc3QgdGhlIHBhY2thZ2UKK3dpbGwgcnVuIG9uLiAgVXN1YWxseSBgY29uZmlndXJlJyBjYW4gZmlndXJlIHRoYXQgb3V0LCBidXQgaWYgaXQgcHJpbnRzCithIG1lc3NhZ2Ugc2F5aW5nIGl0IGNhbiBub3QgZ3Vlc3MgdGhlIGhvc3QgdHlwZSwgZ2l2ZSBpdCB0aGUKK2AtLWhvc3Q9VFlQRScgb3B0aW9uLiAgVFlQRSBjYW4gZWl0aGVyIGJlIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHN5c3RlbQordHlwZSwgc3VjaCBhcyBgc3VuNCcsIG9yIGEgY2Fub25pY2FsIG5hbWUgd2l0aCB0aHJlZSBmaWVsZHM6CisgICAgIENQVS1DT01QQU5ZLVNZU1RFTQorCitTZWUgdGhlIGZpbGUgYGNvbmZpZy5zdWInIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGVhY2ggZmllbGQuICBJZgorYGNvbmZpZy5zdWInIGlzbid0IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSwgdGhlbiB0aGlzIHBhY2thZ2UgZG9lc24ndAorbmVlZCB0byBrbm93IHRoZSBob3N0IHR5cGUuCisKKyAgIElmIHlvdSBhcmUgYnVpbGRpbmcgY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IGNhbiBhbHNvCit1c2UgdGhlIGAtLXRhcmdldD1UWVBFJyBvcHRpb24gdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHN5c3RlbSB0aGV5IHdpbGwKK3Byb2R1Y2UgY29kZSBmb3IgYW5kIHRoZSBgLS1idWlsZD1UWVBFJyBvcHRpb24gdG8gc2VsZWN0IHRoZSB0eXBlIG9mCitzeXN0ZW0gb24gd2hpY2ggeW91IGFyZSBjb21waWxpbmcgdGhlIHBhY2thZ2UuCisKKyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKworVGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZ3VyZSBvcHRpb25zIGFyZToKKworCS0td2l0aC1jYz1bY3Jvc3MtY29tcGlsZXJdCisJLS13aXRoLWxkPVtjcm9zcy1saW5rZXJdCisJLS10YXJnZXQ9W3RhcmdldC1lbnZpcm9ubWVudF0KKwktLXdpdGgtZW5kaWFubmVzcz1bYmlnfGxpdHRsZV0KKworT3RoZXIgcG90ZW50aWFsbHkgdXNlZnVsIG9wdGlvbnM6CisKKwktLXdpdGgtY2ZsYWdzPSIuLi4iCisJLS13aXRoLWxkbGFncz0iLi4uIgorCS0td2l0aC1hcj0vcGF0aC9hcgorCisJLS1lbmFibGUtbWluaS1hZ2VudAorCS0tZW5hYmxlLXNoYXJlZD0ibm8iCisJLS13aXRob3V0LXBpYworCitUd28gc2ltcGxlIGV4YW1wbGVzIG9mIGNyb3NzLWNvbXBpbGluZzoKKworLi9jb25maWd1cmUgLS10YXJnZXQ9cHBjLWxpbnV4IC0td2l0aC1jYz1wcGNfNDA1LWdjYyAtLXdpdGgtZW5kaWFubmVzcz1iaWcKKworLi9jb25maWd1cmUgLS10YXJnZXQ9cG93ZXJwYy1zbm1jLWxpbnV4LWdudSAtLWJ1aWxkPWkzODYtcmVkaGF0LWxpbnV4IFwKKyAgICAgICAgLS13aXRoLWVuZGlhbm5lc3M9YmlnCisKK0EgbW9yZSBjb21wbGV4IGV4YW1wbGUgaW52b2x2ZXMgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGFsbAordGhlIGZsYWdzIGZvciB0aGUgdG9vbHMgbmVlZGVkIGZvciB0aGUgY3Jvc3MgY29tcGlsZToKKworICAgZXhwb3J0IFRPT0xQQVRIPS9vcHQvaGFyZGhhdC9kZXZraXQvcHBjLzQwNQorICAgZXhwb3J0IFBBVEg9JFRPT0xQQVRIL2JpbjokUEFUSAorICAgZXhwb3J0IENGTEFHUz0nIC1nIC1mUElDIC1tc29mdC1mbG9hdCAtRF9TT0ZUX0ZMT0FUIC1EbGludXggLW1jcHU9NDAzJworICAgZXhwb3J0IENQUEZMQUdTPSctSSRUT09MUEFUSC9pbmNsdWRlIC1JJFRPT0xQQVRIL3RhcmdldC91c3IvaW5jbHVkZScKKyAgIGV4cG9ydCBBU0ZMQUdTPSctZyAtZ3N0YWJzJworICAgZXhwb3J0IExERkxBR1M9Jy1XbCwtc29uYW1lLC1CZHluYW1pYyAtbGMnIAorICAgZXhwb3J0IExJQj0nYXIgcmN1JyAKKworICAgLi9jb25maWd1cmUgLS1idWlsZD1pNjg2LXBjLWxpbnV4LWdudSAgLS1ob3N0PXBvd2VycGMgXAorICAgICAgICAgICAtLXRhcmdldD1wb3dlcnBjLWhhcmRoYXQtbGludXgtZ251IC0td2l0aC1lbmRpYW5uZXNzPWJpZworCisKKworIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorCitUaGUgbWliZ3JvdXAgc2VjdGlvbiBpcyB0aGUgbW9zdCBPUyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBhZ2VudC4gSXQncyBsaWtlbHkKK3RoYXQgeW91IHdpbGwgaGF2ZSB0byByZW1vdmUgc29tZSBvZiB0aGVtLiBZb3UganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gKK29uZXMgdG8gcmVtb3ZlLiAKKworRm9yIGV4YW1wbGUsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMgaXMgYSBjb21tb24gbW9kdWxlIHRoYXQgZG9lc24ndAord29yayBvbiBuZXcgcGxhdGZvcm1zLiBTbyBpZiBpdCBpc24ndCB3b3JraW5nLCBvbWl0IGl0IGR1cmluZyBjb25maWd1cmUsIGxpa2UKK3NvOgorCisJLi9jb25maWd1cmUgLS13aXRoLW91dC1taWItbW9kdWxlcz1taWJJSS90Y3BUYWJsZQorCisKK0FsdGVybmF0aXZlbHksIHlvdSBjb3VsZCB3b3JrIHRoZSBvdGhlciB3YXkuIFN0YXJ0IHdpdGggYSBtaW5pbWFsCitjb25maWd1cmF0aW9uOgorCisJLi9jb25maWd1cmUgLS1lbmFibGUtbWluaS1hZ2VudAorCithbmQgdGhlbiBzdGFydCBhZGRpbmcgTUlCIG1vZHVsZXMgb25lLWJ5LW9uZToKKworCS4vY29uZmlndXJlIC0tZW5hYmxlLW1pbmktYWdlbnQKKyAgICAgICAgICAgICAgICAgICAgLS13aXRoLW1pYi1tb2R1bGVzPW1pYklJL3N5c3RlbV9taWIsbWliSUkvc3lzT1JUYWJsZQorCisKKyA8L3ByZT4KKworPGEgbmFtZT0ic3RhdGljIj48L2E+IDxoMj5TdGF0aWMgbGlua2luZzwvaDI+Cis8cHJlPiBtWGF1cmVsaXU6IEkgd2FudCB0byBjb21waWxlIHRoZSA1LjEgc25tcHRyYXBkIGJpbmFyeSB3aXRoIHN0YXRpY2FsbHkgbGlua2VkIGxpYnJhcmllcy4uIENhbiBhbnlvbmUgaGVscCBtZSB3aXRoIHRoaXM/IElzIGl0IGp1c3QgYSBzaW1wbGUgY29uZmlndXJlIHN3aXRjaAorcnN0b3J5OiBtWGF1cmVsaXU6IHlvdSB3YW50IHN0YXRpYyBzbm1wIGxpYnJhcmllcywgb3IgdG90YWxseSBzdGF0aWMgKHN5c3RlbSBsaWJyYXJpZXMgdG9vKT8KK21YYXVyZWxpdTogdG90YWxseSBzdGF0aWMuLiBldmVyeXRoaW5nIGluIG9uZSBleGVjdXRhYmxlCittWGF1cmVsaXU6IGFjdHVhbGx5LCBob3cgZG8gaSBkbyBib3RoIHdheXM/Cityc3Rvcnk6IGZvciBzbm1wIGxpYnMsIHRyeSAnY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZD1ubycuLiB0aGF0IHdvbid0IGJ1aWxkIHRoZSBzaGFyZWQgbGlicmFyaWVzCityc3Rvcnk6ICh0aG91Z2ggaWYgeW91IGhhdmUgcHJldmlvdXMgdmVyc2lvbnMgb2YgbmV0LXNubXAgbGlicmFyaWVzIGluc3RhbGxlZCwgdGhlIGxpbmtlciBtaWdodCBwaWNrIHRob3NlIHVwIGFuZCB0cnkgYW5kIHVzZSB0aGVtKQorcnN0b3J5OiBmb3IgdG90YWxseSBzdGF0aWMsIHlvdSdsbCBoYXZlIHRvIHR3ZWFrIHRoZSBNYWtlZmlsZQorcnN0b3J5OiBhZGQgLUJzdGF0aWMgdG8gTERGTEFHUworCitbbm90ZTogYWN0dWFsbHksIGZvciB0b3RhbGx5IHN0YXRpYywgJ2NvbmZpZ3VyZSAtLXdpdGgtbGRmbGFncz0tQnN0YXRpYyddCisgPC9wcmU+CisKKzxhIG5hbWU9InJlYWRmZHMiPjwvYT4gPGgyPnJlYWRmZHM8L2gyPgorPHByZT4gPiBjYW4geW91IHBsZWFzZSB0ZWxsIG1lIHRoZSBtZWFuaW5nIG9mIHRoZSB0aGlyZCBhcmd1bWVudC4gb2J2aW91c2x5IHRoZSAKKz4gZmlyc3QgcGFyYW1ldGVyIHRvIHJlZ2lzdGVyX3JlYWRmZCBpcyBhIGZpbGUgZGVzY3JpcHRvciBhbmQgc2Vjb25kIGlzIHRoZSAKKz4gY2FsbGJhY2sgZnVuY3Rpb24uCisKK0NvcnJlY3QuCitUaGUgdGhpcmQgcGFyYW1ldGVyIGlzIGFyYml0cmFyeSBkYXRhIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHdoZW4geW91CityZWdpc3RlciB0aGUgZmlsZSBkZXNjcmlwdG9yLCBhbmQgd2lsbCB0aGVuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKK2Z1bmN0aW9uIHdoZW4gaXQncyBpbnZva2VkLgorCisKK1NvIGlmIHlvdSB3ZXJlIGxpc3RlbmluZyBvbiB0d28gc2VwYXJhdGUgc29ja2V0cywgZm9yIHZlcnkgc2ltaWxhcgordHlwZXMgb2YgZGF0YSwgdGhlbiB5b3UgY291bGQgdXNlIHRoZSBzYW1lIGNhbGxiYWNrIGZvciBib3RoIGFuZAordXNlIHRoaXMgdGhpcmQgcGFyYW1ldGVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbToKKworCisJZmQxID0gb3BlbiggIi9wcm9jL3R3ZWVkbGVkdW0iICk7CisJZmQyID0gb3BlbiggIi9wcm9jL3R3ZWVkbGVkZWUiICk7CisKKwlyZWdpc3Rlcl9yZWFkZmQoIGZkMSwgd2hvX2Jyb2tlX3RoZV9yYXR0bGUoKSwgInR3ZWVkbGVkZWUiICk7CisJcmVnaXN0ZXJfcmVhZGZkKCBmZDIsIHdob19icm9rZV90aGVfcmF0dGxlKCksICJ0d2VlZGxlZHVtIiApOworCisKK3ZvaWQKK3dob19icm9rZV90aGVfcmF0dGxlKCBpbnQgZmQsIHZvaWQgKmRhdGEgKQoreworICAgIGNoYXIgKmhlX2RpZCA9IChjaGFyICopZGF0YTsKKworICAgIHByaW50ZigiJXMgYnJva2UgdGhlIHJhdHRsZSFcbiIsIGhlX2RpZCApOworfQorCisgPC9wcmU+CisKKzxhIG5hbWU9InNoYXJpbmciPjwvYT4gPGgyPnNoYXJpbmcgZGF0YTwvaDI+Cis8cHJlPiBJZiB0d28gbW9kdWxlcyBhcmUgY29tcGlsZWQgaW50byB0aGUgc2FtZSBhZ2VudC9zdWJhZ2VudCwgdGhlbiBqdXN0IHVzZSBhCitub3JtYWwgQyBnbG9iYWwgdmFyLiBObyBuZWVkIHRvIGludm9sdmUgbmV0LXNubXAgaW4gdGhlIHByb2Nlc3MuCisKK2lmIHRoZXkgYXJlIGRpZmZlcmVudCBzdWItYWdlbnRzLCB5b3UgYXJlIGJldHRlciBvZmYgdXNpbmcgdHJhZGl0aW9uIElQQworbWVjaGFuaXNtcy4gdGhlcmUgaXMgbm8gbmV0LXNubXAgYXBpIGZvciBzaGFyaW5nIGRhdGEgYmV0d2VlbiBzdWJhZ2VudHMuCisKK1RoYXQgc2FpZCwgKklGKiB5b3Ugb25seSBuZWVkIHRoZSBkYXRhIGR1cmluZyBwcm9jZXNzaW5nIG9mIEdFVCByZXF1ZXN0cywgb3IKK3doZW4geW91IGFyZW4ndCBwcm9jZXNzaW5nIGEgcmVxdWVzdCBhdCBhbGwsIHlvdSBzZW5kIGEgc25tcCByZXF1ZXN0IHRvIHRoZQorbWFzdGVyLCB3aGljaCB3aWxsIHF1ZXJ5IHRoZSBvdGhlciBzdWJhZ2VudC4gSWYgeW91IGFyZSBwcm9jZXNzaW5nIGEgR0VUCityZXF1ZXN0IGFuZCBhcmUgY29tcGlsZWQgaW50byB0aGUgbWFzdGVyLCB5b3Ugd2lsbCBoYXZlIHRvIGRlbGVnYXRlIHRoZQorY3VycmVudCByZXF1ZXN0KS4KKworSXQncyBhIGxpdHRsZSBpbmVmZmljaWVudCwgY29tcGFyZWQgdG8gZGlyZWN0IGNvbW11bmljYXRpb24gdy90aGUgb3RoZXIKK3N1YmFnZW50IGFuZCBpdCAqd2lsbCBub3QqIHdvcmsgZHVyaW5nIHNldCBwcm9jZXNzaW5nLgorIDwvcHJlPgorCis8YSBuYW1lPSJ0b2tlbnMiPjwvYT4gPGgyPkRlYnVnIFRva2VuczwvaDI+Cis8cHJlPiBTb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBvbmVzIGFyZToKKworICAgQWdlbnQ6IGFnZW50LCBhZ2VudHgsIGRsbW9kLCBoYW5kbGVyLCBoZWxwZXIsIHNubXBkLCB0cmFwLCB0YWJsZQorICAgTUlCczogaW5pdF9taWIsIG1pYl9pbml0LCBwYXJzZS1maWxlLCBwYXJzZS1taWJzCisgICBBcHBzOiByZWFkX2NvbmZpZworCitBZGQgdGhlbSB0byB5b3VyIHNubXAuY29uZiBsaWtlIHNvOgorCisgICAjIG9wdGlvbmFsbHkgdHVybiBvbiB0aW1lIHN0YW1wcworICAgbG9nVGltZXN0YW1wIHRydWUKKyAgIGRvRGVidWdnaW5nIDEKKyAgIGRlYnVnVG9rZW5zIGFnZW50eC9jb25maWcKKworSWYgeW91IHB1dCB0aGVtIGluIGEgZGlmZmVyZW50IGNvbmYgZmlsZSwgbGlrZSBzbm1wZC5jb25mIG9yIG15YXBwLmNvbmYsCitwcmVmaXggZWFjaCB3aXRoICdbc25tcF0nLCBsaWtlIHNvOgorCisgICBbc25tcF0gZG9EZWJ1Z2dpbmcgMQorCisKK1RoaXMgbGlzdCB3YXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBtYWluIENWUyBicmFuY2g6CisKK2ZpbmQgLiAtbmFtZSBcIiouY1wiIC1wcmludCB8IHhhcmdzIGdyZXAgREVCVUdNU0dUIHwgZ3JlcCBcIiB8IGN1dCAtZiAyIC1kXCIgfCBzb3J0IC11CisKK2FkZAorYWdlbnRfaGFuZGxlcgorYWdlbnRfcmVnaXN0cnkKK2FnZW50X3NldAorYWdlbnR4CithZ2VudHhfYnVpbGQKK2FnZW50eF9idWlsZF92YXJiaW5kCithZ2VudHgvY29uZmlnCithZ2VudHgvY29uZmlnL3JldHJpZXMKK2FnZW50eC9jb25maWcvdGltZW91dAorYWdlbnR4L21hc3RlcgorYWdlbnR4L3N1YmFnZW50CithZ2VudHgvc3ViZ2FlbnQKK2Fzbl9yZWFsbG9jCithdXRvX25saXN0CitidWlsZF9vaWRfbm9hbGxvYworYnVpbGRfb2lkX3NlZ21lbnQKK2NhbGxiYWNrCitjYWxsYmFja19jbGVhcgorY2hlY2tfZ2V0bmV4dF9yZXN1bHRzCitjbGVhcl9uc2FwX2xpc3QKK2NvbXBhcmU6aW5kZXgKK2NvbXBhcmV4Citjb250YWluZXIKK2NvbnRhaW5lcl9pdGVyYXRvcgorY29udGFpbmVyX2l0ZXJhdG9yOnJlc3VsdHMKK2NvbnRhaW5lcjpudWxsOgorY29udGFpbmVyOm51bGw6ZmluZAorY29udGFpbmVyOm51bGw6ZmluZF9uZXh0Citjb250YWluZXI6bnVsbDpmb3JfZWFjaAorY29udGFpbmVyOm51bGw6ZnJlZQorY29udGFpbmVyOm51bGw6Z2V0X251bGwKK2NvbnRhaW5lcjpudWxsOmdldF9udWxsX2ZhY3RvcnkKK2NvbnRhaW5lcjpudWxsOmdldF9udWxsX25vYWxsb2MKK2NvbnRhaW5lcjpudWxsOmluc2VydAorY29udGFpbmVyOm51bGw6cmVtb3ZlCitjb250YWluZXI6bnVsbDpzaXplCitjb250YWluZXJfcmVnaXN0cnkKK2RhZW1vbml6ZQorZGVpbml0X3VzbV9wb3N0X2NvbmZpZworZGVsYXllZF9pbnN0YW5jZQorZGxtb2QKK2R1bXBfZXRpbWVsaXN0CitlbmNvZGVfa2V5Y2hhbmdlCitleGFtcGxlCitleGFtcGxlX2RhdGFfc2V0CitleGFtcGxlX25vdGlmaWNhdGlvbgorZXhhbXBsZV9zY2FsYXJfaW50CitmaXh1cF9taWJfZGlyZWN0b3J5CitnZW5lcmF0ZV9LdQorZ2VuZXJhdGVfa3VsCitnZXRfbWliX2RpcmVjdG9yeQoraGFuZGxlcjpjYWxsaW5nCitoYW5kbGVyOmluamVjdAoraGFuZGxlcjo6cmVnaXN0ZXIKK2hhbmRsZXJfcmVnaXN0cnkKK2hhbmRsZXI6cmV0dXJuZWQKK2hlYWRlcl9jb21wbGV4CitoZWFkZXJfY29tcGxleF9hZGRfZGF0YQoraGVhZGVyX2NvbXBsZXhfZHVtcAoraGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeQoraGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkCitoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV92YXJvaWQKK2hlYWRlcl9jb21wbGV4X3BhcnNlX29pZAoraGVhZGVyX2NvbXBsZXhfdGVzdAoraGVscGVyOmJhYnlfc3RlcHMKK2hlbHBlcjpjYWNoZV9oYW5kbGVyCitoZWxwZXI6ZGVidWcKK2hlbHBlcjppbnN0YW5jZQoraGVscGVyOm1mZAoraGVscGVyOm51bGwKK2hlbHBlcjpyZWFkX29ubHkKK2hlbHBlcjpyb3dfbWVyZ2UKK2hlbHBlcjpzY2FsYXIKK2hlbHBlcjpzY2FsYXJfZ3JvdXAKK2hlbHBlcjpzZXJpYWxpemUKK2hlbHBlcjpzdGFzaF9jYWNoZQoraGVscGVyOnRhYmxlCitoZWxwZXI6d2F0Y2hlcgoraGVscGVyOndhdGNoZXI6c3BpbmxvY2sKK2hlbHBlcjp3YXRjaGVyOnRpbWVzdGFtcAoraG9zdC9ocl9kZXZpY2UKK2hvc3QvaHJfZGlzaworaG9zdC9ocl9maWxlc3lzCitob3N0L2hyX2luc3QKK2hvc3QvaHJfbmV0d29yaworaG9zdC9ocl9wYXJ0aXRpb24KK2hvc3QvaHJfcHJpbnQKK2hvc3QvaHJfcHJvYworaG9zdC9ocl9zdG9yYWdlCitob3N0L2hyX3N3aW5zdAoraG9zdC9ocl9zd3J1bgoraG9zdC9ocl9zd3J1bjo6R2V0TmV4dEhSX1NXUnVuCitob3N0L2hyX3N5c3RlbQoraHJfcHJvYworaW5pdGlhbGl6ZV90YWJsZV9pcENpZHJSb3V0ZVRhYmxlCitpbml0aWFsaXplX3RhYmxlX210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUKK2luaXRpYWxpemVfdGFibGVfbXRlRXZlbnRUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9uZXRTbm1wSG9zdHNUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9ubG1Mb2dUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9ubG1Mb2dWYXJpYWJsZVRhYmxlCitpbml0aWFsaXplX3RhYmxlX25zTW9kdWxlVGFibGUKK2luaXRpYWxpemVfdGFibGVfbnNUcmFuc2FjdGlvblRhYmxlCitpbml0X21pYgoraW5pdF91c20KK2luamVjdEhhbmRsZXIKK2tlcm5lbF9zdW5vczUKK2tzbQorbGNkX2dldF9lbmdpbmV0aW1lCitsY2RfZ2V0X2VuZ2luZXRpbWVfZXgKK2xjZF9zZXRfZW5naW5ldGltZQorbG9nX25vdGlmaWNhdGlvbgorbWQ1CittZmQKK21pYklJL2F0CittaWJJSS9pY21wCittaWJJSS9pbnRlcmZhY2VzCittaWJJSS9pcAorbWliSUkvaXB2NgorbWliSUkvbXRhX3NlbmRtYWlsLmM6bXRhX3NlbmRtYWlsX3BhcnNlX2NvbmZpZworbWliSUkvbXRhX3NlbmRtYWlsLmM6b3Blbl9zZW5kbWFpbHN0CittaWJJSS9tdGFfc2VuZG1haWwuYzpyZWFkX3NlbmRtYWlsY2YKK21pYklJL3NubXBfbWliCittaWJJSS9zeXNPUlRhYmxlCittaWJJSS90Y3BTY2FsYXIKK21pYklJL3RjcFRhYmxlCittaWJJSS91ZHBTY2FsYXIKK21pYklJL3VkcFRhYmxlCittaWJJSS92YWNtX3ZhcnMKK21pYklJL3Zhcl9yb3V0ZQorbWliX2luaXQKK210ZV9kaXNjbworbXRlRXZlbnRUYWJsZTpzZW5kX2V2ZW50cworbXRlT2JqZWN0c1RhYmxlCittdGVUcmlnZ2VyQm9vbGVhblRhYmxlCittdGVUcmlnZ2VyRGVsdGFUYWJsZQorbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlCittdGVUcmlnZ2VydGFibGUKK210ZVRyaWdnZXJUYWJsZQorbXRlVHJpZ2dlclRlc3QKK210ZVRyaWdnZXJUZXN0OnNlbmRfbXRlX3RyYXAKK210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZQorbmV0c25tcF9hYWw1cHZjCituZXRzbm1wX2FnZW50X2NoZWNrX3BhY2tldAorbmV0c25tcF9kZXJlZ2lzdGVyX2FnZW50X25zYXAKK25ldHNubXBfZHNfaGFuZGxlX2NvbmZpZworbmV0c25tcF9kc19zZXRfYm9vbGVhbgorbmV0c25tcF9kc19zZXRfaW50CituZXRzbm1wX2RzX3NldF9zdHJpbmcKK25ldHNubXBfZHNfc2V0X3ZvaWQKK25ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4KK25ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIKK25ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIKK25ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyCituZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXIKK25ldHNubXBfaXB4CituZXRzbm1wX3JlZ2lzdGVyX2FnZW50X25zYXAKK25ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3JvdworbmV0c25tcF9zb2NrYWRkcl9pbgorbmV0c25tcF9zb2NrYWRkcl9pbjYKK25ldHNubXBfc29ja2FkZHJfaXB4CituZXRzbm1wX3RhYmxlX2RhdGFfc2V0CituZXRzbm1wX3RjcAorbmV0c25tcF90Y3A2CituZXRzbm1wX3VkcAorbmV0c25tcF91ZHA2CituZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZQorbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5CituZXRzbm1wX3VkcF9nZXRTZWNOYW1lCituZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eQorbmV0c25tcF91bml4CituZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZQorbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5CituZXRzbm1wX3VuaXhfdHJhbnNwb3J0CituZXRzdGF0OmlmCitub3RpZmljYXRpb25fbG9nCituc0NhY2hlU2NhbGFycworbnNEZWJ1Z1NjYWxhcnMKK29iamVjdF9tb25pdG9yCitvbGRfYXBpCitvdXRwdXQKK292ZXJyaWRlCitwYXJzZS1maWxlCitwYXJzZS1taWJzCitwYXJzZV9vaWQKK3BhcnNlX29pZF9pbmRleGVzCitwZXJsCitwcm9jCitwcm94eQorcHJveHlfYXJncworcHJveHlfY29uZmlnCitwcm94eV9pbml0CityZWFkX2NvbmZpZworcmVhZF9jb25maWdfY29weV93b3JkCityZWFkX2NvbmZpZ19maWxlcworcmVhZF9jb25maWc6Zm9yd2FyZAorcmVhZF9jb25maWc6aW5pdG1pYgorcmVhZF9jb25maWdfcmVhZF9kYXRhCityZWFkX2NvbmZpZ19yZWFkX21lbW9yeQorcmVhZF9jb25maWdfcmVhZF9vYmppZAorcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcKK3JlYWRfY29uZmlnX3N0b3JlX2RhdGFfcHJlZml4CityZWFkX2NvbmZpZzp0cmFwaGFuZGxlCityZWdpc3Rlcl9leGNlcHRmZAorcmVnaXN0ZXJfaW5kZXgKK3JlZ2lzdGVyX21pYgorcmVnaXN0ZXJfcmVhZGZkCityZWdpc3Rlcl9zaWduYWwKK3JlZ2lzdGVyX3dyaXRlZmQKK3JlcG9ydAorcmVzdWx0cworc2NhbGFyX2ludAorc2NhcGkKK3Njb3BlZFBEVV9wYXJzZQorc2VuZF9ub3RpZmljYXRpb25zCitzZXNzX2FzeW5jX3NlbmQKK19zZXNzX29wZW4KK3Nlc3NfcHJvY2Vzc19wYWNrZXQKK3Nlc3NfcmVhZAorc2Vzc19yZXNlbmQKK3Nlc3Nfc2VsZWN0CitzZXR0aW5nIGF1dGggdHlwZTogXAorc2lnbmFsCitzbXV4CitzbXV4X2NvbmYKK3NtdXhfaW5pdAorc211eC9zbm1wX2JncAorc211eC9zbm1wX29zcGYKK3NtdXgvc25tcF9yaXAyCitzbm1wX2FnZW50Citzbm1wX2FsYXJtCitzbm1wX2FwaQorc25tcF9idWlsZAorc25tcF9jbGVhbl9wZXJzaXN0ZW50Citzbm1wX2NvbmZpZworc25tcGQKK3NubXBkL21haW4KK3NubXBkX3BvcnRzCitzbm1wZF9yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKK3NubXBkL3NlbGVjdAorc25tcEVuZ2luZQorc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZQorc25tcE5vdGlmeUZpbHRlclRhYmxlCitzbm1wTm90aWZ5VGFibGUKK3NubXBfcGFyc2UKK3NubXBfcGFyc2VfYXJncworc25tcF9wYXJzZV9vaWQKK3NubXBfcGR1X3JlYWxsb2NfcmJ1aWxkCitzbm1wX3NhdmVfcGVyc2lzdGVudAorc25tcF9zZW5kCitzbm1wX3Nlc3NfYWRkCitzbm1wX3Nlc3NfY2xvc2UKK3NubXBfc2Vzc19vcGVuCitzbm1wU2V0U2VyaWFsTm8KK3NubXBfc3RvcmUKK3NubXBUYXJnZXRBZGRyRW50cnkKK3NubXBUYXJnZXRQYXJhbXNFbnRyeQorc25tcHRyYXBkCitzbm1wdjMKK3NubXB2M19wYXJzZQorc3ByaW50X2J5X3R5cGUKK3N0YXNoX2NhY2hlCitzdWJ0cmVlCit0YWJsZV9hcnJheQordGFibGVfYXJyYXk6Z2V0Cit0YWJsZV9hcnJheTpncm91cAordGFibGVfZGF0YV9hZGRfZGF0YQordGFibGVfaXRlcmF0b3IKK3RhYmxlX3NldF9hZGRfcm93Cit0YWtlX3NuYXBzaG90Cit0YXJnZXRfY291bnRlcnMKK3RhcmdldF9zZXNzaW9ucwordGRvbWFpbgordGVzdGhhbmRsZXIKK3Rlc3RoYW5kbGVyX3RhYmxlCit0cmFuc3BvcnRfY2FsbGJhY2sKK3RyYXAKK3RyYXBzZXNzCit0dW5uZWwKK3VjZERlbW9QdWJsaWMKK3VjZC1zbm1wL2Rpc2sKK3VjZC1zbm1wL2Rpc2s6Cit1Y2Qtc25tcC9tZW1vcnkKK3VjZC1zbm1wL3Bhc3MKK3VjZC1zbm1wL3Bhc3NfcGVyc2lzdAordWNkLXNubXAvcHJvYwordWNkLXNubXAvdmVyc2lvbmluZm8KK3VjZC1zbm1wL3Ztc3RhdF9haXg0LmM6dXBkYXRlX3N0YXRzCit1Y2Qtc25tcC92bXN0YXRfZHluaXguYzp1cGRhdGVfc3RhdHMKK3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmM6dXBkYXRlX3N0YXRzCit1Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYzp1cGRhdGVfc3RhdHMKK3VubGlua190cmVlCit1bmxvYWQtbWliCit1bnJlZ2lzdGVyX2V4Y2VwdGZkCit1bnJlZ2lzdGVyX3JlYWRmZAordW5yZWdpc3Rlcl9zaWduYWwKK3VucmVnaXN0ZXJfd3JpdGVmZAordXNtCit1c21Vc2VyCit1dGlsX2Z1bmNzCit2YWNtOmNoZWNrU3VidHJlZQordmFjbTpnZXRWaWV3Cit2ZXJzaW9uaW5mbwordm1zdGF0Cit5eXlpbmplY3RIYW5kbGVyCisgPC9wcmU+CisKKzxhIG5hbWU9InN0ZXBzIj48L2E+IDxoMj5CYWJ5IFN0ZXBzIEZsb3c8L2gyPgorPHByZT4gICAgIC8qKgorICAgICAqIEJhYnkgU3RlcHMgRmxvdyBkaWFncmFtIChyZXYgMjAwMy4wOS4yOS4xMzMwKQorICAgICAqCisgICAgICogTGVnZW5kOiAodGVzdCkgW29wdGlvbmFsXSAmbHQ7cmVxdWlyZWQ+CisgICAgICoKKyAgICAgKiBPTEQgICAgICAgICAgICAgIE5FVworICAgICAqID09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAqICsrKyAgICAgICAgICAgW3ByZV9yZXF1ZXN0XQorICAgICAqICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAocm93IGV4aXN0cz8pIE4gLT4ocm93X2NyZWF0aW9uKSBOID4tLT4rCisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBZICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwmbHQ7LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgXHwvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8LworICAgICAqIFJFU0VSVkUxICAmbHQ7b2JqZWN0X3N5bnRheF9jaGVja3M+ICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgKiAgICAgICAgICAgICAgICAgIChlcnI/KSAgWSA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPisKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHwvCisgICAgICogKysrICAgICAgICAgIChyb3cgZXhpc3RlZD8pIE4gLS0tPltyb3dfY3JlYXRpb25dICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwmbHQ7LS0tLS0tLS0tLS0tLS1OIChlcnI/KSAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBZICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgW3Jvd19jcmVhdGlvbl9jbGVhbnVwXS0tLT4rCisgICAgICogICAgICAgICAgICAgICAgICAgXHwvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogUkVTRVJWRVIyICAgICBbdW5kb19zZXR1cF0gICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAoZXJyPykgIFkgLS0tPi0tLS0tLS0tPi0tLS0tLS0tLT4rICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFx8LworICAgICAqIEFDVElPTiAgICAgICAgJmx0O3NldF92YWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgKGVycj8pICBZID4tLS0tLS0tLS0rICAgICAgICAgICBcfC8gfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgfAorICAgICAqICsrKyAgICAgICAgW2NvbnNpc3RlbmN5X2NoZWNrc10gICAgICB8ICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgfCAgfAorICAgICAqIFVORE8gICAgICAgICAgICAgKGVycj8pICBZID4tLS0tLS0tW3VuZG9dLS0tLS0tLS0+KyAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgW3JldmVyc2libGVfY29tbWl0XSAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAqICsrKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcfC8KKyAgICAgKiAgICAgICAgICAgICAgICAgIChlcnI/KSAgWSA+LS1bcmV2ZXJzZV9jb21taXRdICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiBDT01NSVQgICAgICAgICZsdDtmaW5hbF9jb21taXQ+ICAgICAgfCAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgIChlcnI/KSAgWSA+LS1bbG9nIG1zZ10gICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgXHwvIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAmbHQ7LS0tLS0tLS0tLS0mbHQ7Ky0tLSZsdDstLS0tLS0tLS0tLSsgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiBGUkVFICAgICAgICAgIFt1bmRvX2NsZWFudXBdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHwvCisgICAgICogICAgICAgICAgICAgICAgICAgIHwmbHQ7LS0tLS0tLS0tLS0tLS0mbHQ7LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICogICAgICAgICAgICAgICAgICAgXHwvCisgICAgICogICAgICAgICAgICAgICBbcG9zdF9yZXF1ZXN0XQorICAgICAqLworIDwvcHJlPgorCis8aHI+Cis8dGFibGUgd2lkdGg9IjEwMCUiPgorPHRyPjx0ZCBhbGlnbj1sZWZ0PgorPGJyPlBhZ2UKKzwhLS0gQ3JlYXRlZDogVGh1IEp1bCAyNCAxMDowODoyNiBNRVQgRFNUIDE5OTcgLS0+Cis8IS0tIGhobXRzIHN0YXJ0IC0tPgorTGFzdCBtb2RpZmllZDogV2VkIE1hciAxMiAxMzo0OTozMiBQU1QgMjAwMworPCEtLSBoaG10cyBlbmQgLS0+Cis8L3RkPjx0ZCBhbGlnbj1yaWdodD4KKzxicj5Qb3dlcmVkIGJ5OgorPEEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldCI+CisgICAgICA8SU1HIHNyYz0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zZmxvZ28ucGhwP2dyb3VwX2lkPTEyNjk0JmFtcDt0eXBlPTEiIHdpZHRoPSI4OCIgaGVpZ2h0PSIzMSIgYm9yZGVyPSIwIiBhbHQ9IlNvdXJjZUZvcmdlIExvZ28iPjwvQT4KKworPC90ZD48L3RyPjwvdGFibGU+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRkFRLmh0bWwgYi93aW4zMi9kaXN0L2h0bWxoZWxwL0ZBUS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzVhY2UKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9kaXN0L2h0bWxoZWxwL0ZBUS5odG1sCkBAIC0wLDAgKzEsMzM3NSBAQAorPGJvZHkgYmdjb2xvcj0iI2ZmZmZmZiIgYmFja2dyb3VuZD0idWNkLXNubXAtYmczLmdpZiI+Cis8dGl0bGU+TkVULVNOTVAgRkFRPC90aXRsZT4KKzxkaXYgYWxpZ249Y2VudGVyPgorPGgxPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIChGQVEpIGZvciB0aGUgTmV0LVNOTVAgcGFja2FnZTwvaDE+CitGQVEgTWFpbnRhaW5lcjogRGF2ZSBTaGllbGQ8YnI+CitFbWFpbDogPGEgaHJlZj0ibWFpbHRvOm5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiPm5ldC1zbm1wLWNvZGVyc0BsaXN0LnNvdXJjZWZvcmdlLm5ldDwvYT48YnI+Cis8L2Rpdj4KKzxocj4KKzxoMj5UYWJsZSBvZiBDb250ZW50czwvaDI+Cis8L3VsPjxsaT48Yj5HRU5FUkFMPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI1doYXRfaXNfaXRfIj5XaGF0IGlzIGl0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX2Nhbl9JX2dldF9pdF8iPldoZXJlIGNhbiBJIGdldCBpdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2RvY3VtZW50YXRpb25faXNfYXZhaWxhYmxlXyI+V2hhdCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNBcmVfdGhlcmVfYmluYXJpZXNfYXZhaWxhYmxlXyI+QXJlIHRoZXJlIGJpbmFyaWVzIGF2YWlsYWJsZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9VQ0RfU05NUF9hbmRfTmV0X1NOTVBfIj5XaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVQ0QtU05NUCBhbmQgTmV0LVNOTVA/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9vcGVyYXRpbmdfc3lzdGVtc19kb2VzX2l0X3J1bl9vbl8iPldoYXQgb3BlcmF0aW5nIHN5c3RlbXMgZG9lcyBpdCBydW4gb24/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9oYXBwZW5zX2lmX21pbmVfaXNuX3RfbGlzdGVkXyI+V2hhdCBoYXBwZW5zIGlmIG1pbmUgaXNuJ3QgbGlzdGVkPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0RvZXNfaXRfcnVuX29uX1dpbmRvd3NfIj5Eb2VzIGl0IHJ1biBvbiBXaW5kb3dzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2ZpbmRfb3V0X2Fib3V0X25ld19yZWxlYXNlc18iPkhvdyBkbyBJIGZpbmQgb3V0IGFib3V0IG5ldyByZWxlYXNlcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfZmluZF9vdXRfd2hhdF9vdGhlcl9wZW9wbGVfYXJlX2RvaW5nXyI+SG93IGNhbiBJIGZpbmQgb3V0IHdoYXQgb3RoZXIgcGVvcGxlIGFyZSBkb2luZz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9zdWJtaXRfYV9wYXRjaF9vcl9idWdfcmVwb3J0XyI+SG93IGRvIEkgc3VibWl0IGEgcGF0Y2ggb3IgYnVnIHJlcG9ydD88L2E+Cis8bGk+IDxhIGhyZWY9IiNDYW5fSV9yZXVzZV90aGVfY29kZV9pbl9teV9jb21tZXJjaWFsX2FwcGxpY2F0aW9uXyI+Q2FuIEkgcmV1c2UgdGhlIGNvZGUgaW4gbXkgY29tbWVyY2lhbCBhcHBsaWNhdGlvbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9TTk1Qdl9fX1NOTVB2X19hbmRfU05NUHZfXyI+V2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU05NUHYxLCBTTk1QdjIgYW5kIFNOTVB2Mz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2FyZV9hbGxfdGhlc2VfZGlmZmVyZW50X1NOTVB2X19zX2FueXdheV8iPldoYXQgYXJlIGFsbCB0aGVzZSBkaWZmZXJlbnQgU05NUHYyJ3MgYW55d2F5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doaWNoX3ZlcnNpb25zX29mX1NOTVBfYXJlX3N1cHBvcnRlZF9pbl90aGlzX3BhY2thZ2VfIj5XaGljaCB2ZXJzaW9ucyBvZiBTTk1QIGFyZSBzdXBwb3J0ZWQgaW4gdGhpcyBwYWNrYWdlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0Nhbl9JX3VzZV9TTk1Qdl9fcmVxdWVzdHNfd2l0aF9hbl9TTk1Qdl9fTUlCX19vcl92aWNlX3ZlcnNhX18iPkNhbiBJIHVzZSBTTk1QdjEgcmVxdWVzdHMgd2l0aCBhbiBTTk1QdjIgTUlCIChvciB2aWNlIHZlcnNhKT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9jYW5fSV9maW5kX21vcmVfaW5mb3JtYXRpb25fYWJvdXRfbmV0d29ya19tYW5hZ2VtZW50XyI+V2hlcmUgY2FuIEkgZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG5ldHdvcmsgbWFuYWdlbWVudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNJc191Y2Rfc25tcF90aHJlYWRfc2FmZV8iPklzIHVjZC1zbm1wIHRocmVhZCBzYWZlPzwvYT4KKzwvdWw+PGxpPjxiPkFQUExJQ0FUSU9OUzwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9hZGRfYV9NSUJfIj5Ib3cgZG8gSSBhZGQgYSBNSUI/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfYWRkX2FfTUlCX3RvX3RoZV90b29sc18iPkhvdyBkbyBJIGFkZCBhIE1JQiB0byB0aGUgdG9vbHM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2Nhbl90X0lfc2VlX2FueXRoaW5nX2Zyb21fdGhlX2FnZW50XyI+V2h5IGNhbid0IEkgc2VlIGFueXRoaW5nIGZyb20gdGhlIGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9jYW5fdF9JX3NlZV92YWx1ZXNfaW5fdGhlX19JTlNFUlRfRU5URVJQUklTRV9IRVJFX190cmVlXyI+V2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgPElOU0VSVCBFTlRFUlBSSVNFIEhFUkU+IHRyZWU/PC9hPgorPGxpPiA8YSBocmVmPSIjUmVxdWVzdHNfYWx3YXlzX3NlZW1fdG9fdGltZW91dF9fYW5kX2Rvbl90X2dpdmVfbWVfYW55dGhpbmdfYmFja19fX1doeV8iPlJlcXVlc3RzIGFsd2F5cyBzZWVtIHRvIHRpbWVvdXQsIGFuZCBkb24ndCBnaXZlIG1lIGFueXRoaW5nIGJhY2suICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9jYW5fc2VlX3RoZV9zeXN0ZW1fZ3JvdXBfX2J1dF9ub3RoaW5nX2Vsc2VfX19XaHlfIj5JIGNhbiBzZWUgdGhlIHN5c3RlbSBncm91cCwgYnV0IG5vdGhpbmcgZWxzZS4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfYWdlbnRfd29ya2VkX2Zvcl9hX3doaWxlX190aGVuX3N0b3BwZWRfcmVzcG9uZGluZ19fX1doeV8iPlRoZSBhZ2VudCB3b3JrZWQgZm9yIGEgd2hpbGUsIHRoZW4gc3RvcHBlZCByZXNwb25kaW5nLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1JlcXVlc3RpbmdfYW5fb2JqZWN0X2ZhaWxzX3dpdGhfX1Vua25vd25fT2JqZWN0X0lkZW50aWZpZXJfX19XaHlfIj5SZXF1ZXN0aW5nIGFuIG9iamVjdCBmYWlscyB3aXRoICJVbmtub3duIE9iamVjdCBJZGVudGlmaWVyIiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb19JX2dldF9fbm9TdWNoTmFtZV9fd2hlbl9hc2tpbmdfZm9yX19zeXNVcFRpbWVfX19vcl9zaW1pbGFyX18iPldoeSBkbyBJIGdldCAibm9TdWNoTmFtZSIgd2hlbiBhc2tpbmcgZm9yICJzeXNVcFRpbWUiIChvciBzaW1pbGFyKT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9fSV9zb21ldGltZXNfZ2V0X19FbmRfb2ZfTUlCX193aGVuX3dhbGtpbmdfYV90cmVlX19hbmRfc29tZXRpbWVzX25vdF8iPldoeSBkbyBJIHNvbWV0aW1lcyBnZXQgIkVuZCBvZiBNSUIiIHdoZW4gd2Fsa2luZyBhIHRyZWUsIGFuZCBzb21ldGltZXMgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfY2Fubm90X3NldF9hbnlfdmFyaWFibGVzX2luX3RoZV9NSUJfIj5JIGNhbm5vdCBzZXQgYW55IHZhcmlhYmxlcyBpbiB0aGUgTUlCLjwvYT4KKzxsaT4gPGEgaHJlZj0iI1ZhcmlhYmxlc19zZWVtX3RvX2Rpc2FwcGVhcl93aGVuX0lfdHJ5X3RvX3NldF90aGVtX19fV2h5XyI+VmFyaWFibGVzIHNlZW0gdG8gZGlzYXBwZWFyIHdoZW4gSSB0cnkgdG8gc2V0IHRoZW0uICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9zdGlsbF9jYW5fdF9jaGFuZ2Vfc3lzTG9jYXRpb25fX3Rob3VnaF90aGVfYWNjZXNzX3NldHRpbmdzX2FsbG93Ij5JIHN0aWxsIGNhbid0IGNoYW5nZSBzeXNMb2NhdGlvbiwgdGhvdWdoIHRoZSBhY2Nlc3Mgc2V0dGluZ3MgYWxsb3c8L2E+Cis8YSBocmVmPSIjSV9zdGlsbF9jYW5fdF9jaGFuZ2Vfc3lzTG9jYXRpb25fX3Rob3VnaF90aGVfYWNjZXNzX3NldHRpbmdzX2FsbG93Ij4gICAgICAgaXQuICBXaHkgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfZ2V0X2FuX2Vycm9yX3doZW5fdHJ5aW5nX3RvX3NldF9hX25lZ2F0aXZlX3ZhbHVlX19fd2h5XyI+SSBnZXQgYW4gZXJyb3Igd2hlbiB0cnlpbmcgdG8gc2V0IGEgbmVnYXRpdmUgdmFsdWUgLSB3aHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9nZXRfYW5fZXJyb3Jfd2hlbl90cnlpbmdfdG9fZ2V0X2Ffc3RyaW5nX2luZGV4ZWRfdGFibGVfdmFsdWVfX193aHlfIj5JIGdldCBhbiBlcnJvciB3aGVuIHRyeWluZyB0byBnZXQgYSBzdHJpbmctaW5kZXhlZCB0YWJsZSB2YWx1ZSAtIHdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9zZW5kX3RyYXBzX2FuZF9ub3RpZmljYXRpb25zXyI+SG93IGRvIEkgc2VuZCB0cmFwcyBhbmQgbm90aWZpY2F0aW9ucz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9oYW5kbGVfdHJhcHNfYW5kX25vdGlmaWNhdGlvbnNfIj5Ib3cgZG8gSSBoYW5kbGUgdHJhcHMgYW5kIG5vdGlmaWNhdGlvbnM/PC9hPgorPGxpPiA8YSBocmVmPSIjTXlfdHJhcGhhbmRsZXJfc2NyaXB0X2RvZXNuX3Rfd29ya193aGVuX3J1bl9saWtlX3RoaXNfX193aHlfbm90XyI+TXkgdHJhcGhhbmRsZXIgc2NyaXB0IGRvZXNuJ3Qgd29yayB3aGVuIHJ1biBsaWtlIHRoaXMgLSB3aHkgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV91Y2RTaHV0ZG93bl90cmFwX09JRF9yZWNlaXZlZF9ieV9teV9tYW5hZ2VyX2lzX3dyb25nX19XaHlfIj5UaGUgdWNkU2h1dGRvd24gdHJhcCBPSUQgcmVjZWl2ZWQgYnkgbXkgbWFuYWdlciBpcyB3cm9uZy4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb2VzX3NubXB0cmFwZF9jb21wbGFpbl9hYm91dF9BZ2VudFhfIj5XaHkgZG9lcyBzbm1wdHJhcGQgY29tcGxhaW4gYWJvdXQgQWdlbnRYPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX3VzZV9TTk1Qdl9fIj5Ib3cgZG8gSSB1c2UgU05NUHYzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19iaWdfY2FuX2FuX1NOTVBfcmVxdWVzdF9fb3JfcmVwbHlfX2JlXyI+SG93IGJpZyBjYW4gYW4gU05NUCByZXF1ZXN0IChvciByZXBseSkgYmU/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX21vbml0b3JfbXlfc3lzdGVtc19fZGlza19fbWVtb3J5X19ldGNfXyI+SG93IGNhbiBJIG1vbml0b3IgbXkgc3lzdGVtcyAoZGlzaywgbWVtb3J5LCBldGMpPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0FwcGxpY2F0aW9uc19jb21wbGFpbl9hYm91dF9lbnRyaWVzX2luX3lvdXJfZXhhbXBsZV9fc25tcF9jb25mX19maWxlX19fV2h5XyI+QXBwbGljYXRpb25zIGNvbXBsYWluIGFib3V0IGVudHJpZXMgaW4geW91ciBleGFtcGxlICdzbm1wLmNvbmYnIGZpbGUuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjT0tfX3doYXRfc2hvdWxkX0lfcHV0X2luX3NubXBfY29uZl8iPk9LLCB3aGF0IHNob3VsZCBJIHB1dCBpbiBzbm1wLmNvbmY/PC9hPgorPC91bD48bGk+PGI+UEVSTDwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9jYW5fSV9nZXRfdGhlX3BlcmxfU05NUF9wYWNrYWdlXyI+V2hlcmUgY2FuIEkgZ2V0IHRoZSBwZXJsIFNOTVAgcGFja2FnZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9pbnN0YWxsX3RoZV9QZXJsX1NOTVBfbW9kdWxlc18iPkhvdyBkbyBJIGluc3RhbGwgdGhlIFBlcmwgU05NUCBtb2R1bGVzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0J1dF9jb21waWxpbmdfdGhpc19mYWlsc19fV2h5XyI+QnV0IGNvbXBpbGluZyB0aGlzIGZhaWxzISBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjQ29tcGlsaW5nX3RoZV9wZXJsX21vZHVsZV93b3Jrc19PS19fYnV0X19tYWtlX3Rlc3RfX2ZhaWxzX19XaHlfIj5Db21waWxpbmcgdGhlIHBlcmwgbW9kdWxlIHdvcmtzIE9LLCBidXQgJ21ha2UgdGVzdCcgZmFpbHMuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfcGVybF9fbWFrZV90ZXN0X19mYWlsc19vbl90aGVfT0lEX3Rlc3RzX19Jc19pdF9zYWZlX3RvX2NvbnRpbnVlXyI+VGhlIHBlcmwgJ21ha2UgdGVzdCcgZmFpbHMgb24gdGhlIE9JRCB0ZXN0cy4gSXMgaXQgc2FmZSB0byBjb250aW51ZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fdHJ5aW5nX3RvX3VzZV9taWJfY19fb3JfdGttaWJfX2FuZF9pdF9jYW5fdF9sb2NhdGVfU05NUF9wbV8iPkknbSB0cnlpbmcgdG8gdXNlIG1pYjJjIChvciB0a21pYikgYW5kIGl0IGNhbid0IGxvY2F0ZSBTTk1QLnBtPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV90cnlpbmdfdG9fdXNlX21pYl9jX19vcl90a21pYl9fYW5kX2l0X2Nhbl90X2xvYWRfU05NUF9zb18iPkknbSB0cnlpbmcgdG8gdXNlIG1pYjJjIChvciB0a21pYikgYW5kIGl0IGNhbid0IGxvYWQgU05NUC5zbz88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fdHJ5aW5nX3RvX3VzZV90a21pYl9hbmRfaXRfY2FuX3RfbG9jYXRlX1RrX3BtXyI+SSdtIHRyeWluZyB0byB1c2UgdGttaWIgYW5kIGl0IGNhbid0IGxvY2F0ZSBUay5wbT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX3ZlX2dvdF9hX3Byb2JsZW1fd2l0aF90aGVfTmV0X1NOTVBfbW9kdWxlX19fQ2FuX3lvdV9oZWxwXyI+SSd2ZSBnb3QgYSBwcm9ibGVtIHdpdGggdGhlIE5ldC1TTk1QIG1vZHVsZS4gIENhbiB5b3UgaGVscD88L2E+Cis8L3VsPjxsaT48Yj5NSUJTPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX2Nhbl9JX2ZpbmRfYV9NSUJfY29tcGlsZXJfIj5XaGVyZSBjYW4gSSBmaW5kIGEgTUlCIGNvbXBpbGVyPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfY2FuX3RfbG9hZF9hbnlfb2ZfdGhlX21pYl9maWxlc19fYW5kX3RoZXlfc2VlbV90b19iZV9taXNzaW5nIj5JIGNhbid0IGxvYWQgYW55IG9mIHRoZSBtaWIgZmlsZXMsIGFuZCB0aGV5IHNlZW0gdG8gYmUgbWlzc2luZzwvYT4KKzxhIGhyZWY9IiNJX2Nhbl90X2xvYWRfYW55X29mX3RoZV9taWJfZmlsZXNfX2FuZF90aGV5X3NlZW1fdG9fYmVfbWlzc2luZyI+ICAgICAgIHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgZmlsZW5hbWUuICBXaGF0J3MgaGFwcGVuaW5nPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9hcmVuX3RfbXlfbWliX2ZpbGVzX2JlaW5nX3JlYWRfaW5fIj5XaHkgYXJlbid0IG15IG1pYiBmaWxlcyBiZWluZyByZWFkIGluPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV9nZXR0aW5nX2Fuc3dlcnNfX2J1dF90aGV5X3JlX2FsbF9udW1iZXJzX19XaHlfIj5JJ20gZ2V0dGluZyBhbnN3ZXJzLCBidXQgdGhleSdyZSBhbGwgbnVtYmVycy4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfZG9lc19fQ2Fubm90X2ZpbmRfbW9kdWxlX19YWFhfTUlCX19fbWVhbl8iPldoYXQgZG9lcyAiQ2Fubm90IGZpbmQgbW9kdWxlIChYWFgtTUlCKSIgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2Fib3V0X191bmxpbmtlZF9PSURfXyI+V2hhdCBhYm91dCAidW5saW5rZWQgT0lEIj88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfcGFyc2VyX2RvZXNuX3RfaGFuZGxlX2NvbW1lbnRzX3Byb3Blcmx5X19XaHlfbm90XyI+VGhlIHBhcnNlciBkb2Vzbid0IGhhbmRsZSBjb21tZW50cyBwcm9wZXJseS4gV2h5IG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9yZXBsYWNlX01JQl92YWx1ZXNfd2l0aF9uZXdfb25lc18iPkhvdyBkbyBJIHJlcGxhY2UgTUlCIHZhbHVlcyB3aXRoIG5ldyBvbmVzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9nZXRfbW9yZV9pbmZvcm1hdGlvbl9hYm91dF90aGVzZV9NSUJfZmlsZV9wcm9ibGVtc18iPkhvdyBjYW4gSSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBNSUIgZmlsZSBwcm9ibGVtcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhpc19hYm91dF9fdG9vX21hbnlfaW1wb3J0ZWRfc3ltYm9sc19fIj5XaGF0J3MgdGhpcyBhYm91dCAidG9vIG1hbnkgaW1wb3J0ZWQgc3ltYm9scyI/PC9hPgorPC91bD48bGk+PGI+QUdFTlQ8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjV2hhdF9NSUJzX2FyZV9zdXBwb3J0ZWRfIj5XaGF0IE1JQnMgYXJlIHN1cHBvcnRlZD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3Byb3RvY29sc19hcmVfc3VwcG9ydGVkXyI+V2hhdCBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9jb25maWd1cmVfdGhlX2FnZW50XyI+SG93IGRvIEkgY29uZmlndXJlIHRoZSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9hZGRfYV9NSUJfdG9fdGhlX2FnZW50XyI+SG93IGRvIEkgYWRkIGEgTUlCIHRvIHRoZSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9fZXhlY19fX19zaF9fYW5kX19wYXNzX18iPldoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdleGVjJywgJ3NoJyBhbmQgJ3Bhc3MnPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX0FnZW50WF9fU01VWF9hbmRfcHJveGllZF9TTk1QXyI+V2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQWdlbnRYLCBTTVVYIGFuZCBwcm94aWVkIFNOTVA/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9hYm91dF9fZGxtb2RfX19fd2hhdF9zX3RoYXRfYWJvdXRfIj5XaGF0IGFib3V0ICdkbG1vZCcgLSB3aGF0J3MgdGhhdCBhYm91dD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGljaF9zaG91bGRfSV91c2VfIj5XaGljaCBzaG91bGQgSSB1c2U/PC9hPgorPGxpPiA8YSBocmVmPSIjQ2FuX0lfdXNlX0FnZW50WF93aGVuX3J1bm5pbmdfdW5kZXJfV2luZG93c18iPkNhbiBJIHVzZSBBZ2VudFggd2hlbiBydW5uaW5nIHVuZGVyIFdpbmRvd3M/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX3J1bl9BZ2VudFhfd2l0aF9hX2RpZmZlcmVudF9zb2NrZXRfYWRkcmVzc18iPkhvdyBjYW4gSSBydW4gQWdlbnRYIHdpdGggYSBkaWZmZXJlbnQgc29ja2V0IGFkZHJlc3M/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2NvbWJpbmVfdHdvX2NvcGllc19vZl90aGVfX21pYl9fX3RyZWVfZnJvbV9zZXBhcmF0ZV9zdWJhZ2VudHNfIj5Ib3cgY2FuIEkgY29tYmluZSB0d28gY29waWVzIG9mIHRoZSAnbWliMicgdHJlZSBmcm9tIHNlcGFyYXRlIHN1YmFnZW50cz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3RyYXBzX2FyZV9zZW50X2J5X3RoZV9hZ2VudF8iPldoYXQgdHJhcHMgYXJlIHNlbnQgYnkgdGhlIGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX2FyZV90aGVzZV90cmFwc19zZW50X3RvXyI+V2hlcmUgYXJlIHRoZXNlIHRyYXBzIHNlbnQgdG8/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX3NlbmRfYV9wYXJ0aWN1bGFyX3RyYXBfdG9fc2VsZWN0ZWRfZGVzdGluYXRpb25zXyI+SG93IGNhbiBJIHNlbmQgYSBwYXJ0aWN1bGFyIHRyYXAgdG8gc2VsZWN0ZWQgZGVzdGluYXRpb25zPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb2VzX2NhbGxpbmdfX3NlbmRfdl90cmFwX19nZW5lcmF0ZV9hbl9TTk1Qdl9fdHJhcF9fb3JfdmljZV92ZXJzYV9fIj5XaHkgZG9lcyBjYWxsaW5nICdzZW5kX3YydHJhcCcgZ2VuZXJhdGUgYW4gU05NUHYxIHRyYXAgKG9yIHZpY2UgdmVyc2EpPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doZW5fSV9ydW5fdGhlX2FnZW50X2l0X3J1bnNfYW5kX3RoZW5fcXVpdHNfd2l0aG91dF9zdGF5aW5nX2Fyb3VuZF9fV2h5XyI+V2hlbiBJIHJ1biB0aGUgYWdlbnQgaXQgcnVucyBhbmQgdGhlbiBxdWl0cyB3aXRob3V0IHN0YXlpbmcgYXJvdW5kLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjQWZ0ZXJfYV93aGlsZV90aGVfYWdlbnRfc3RvcHNfcmVzcG9uZGluZ19fYW5kX3N0YXJ0c19lYXRpbmdfQ1BVX3RpbWVfX19XaHlfIj5BZnRlciBhIHdoaWxlIHRoZSBhZ2VudCBzdG9wcyByZXNwb25kaW5nLCBhbmQgc3RhcnRzIGVhdGluZyBDUFUgdGltZS4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfc3RvcF9vdGhlcl9wZW9wbGVfZ2V0dGluZ19hdF9teV9hZ2VudF8iPkhvdyBjYW4gSSBzdG9wIG90aGVyIHBlb3BsZSBnZXR0aW5nIGF0IG15IGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9saXN0ZW5fb25fanVzdF9vbmVfcGFydGljdWxhcl9pbnRlcmZhY2VfIj5Ib3cgY2FuIEkgbGlzdGVuIG9uIGp1c3Qgb25lIHBhcnRpY3VsYXIgaW50ZXJmYWNlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2NvbmZpZ3VyZV9hY2Nlc3NfY29udHJvbF8iPkhvdyBkbyBJIGNvbmZpZ3VyZSBhY2Nlc3MgY29udHJvbD88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2Rvbl90X3VuZGVyc3RhbmRfdGhlX25ld19hY2Nlc3NfY29udHJvbF9zdHVmZl9fX3doYXRfZG9lc19pdF9tZWFuXyI+SSBkb24ndCB1bmRlcnN0YW5kIHRoZSBuZXcgYWNjZXNzIGNvbnRyb2wgc3R1ZmYgLSB3aGF0IGRvZXMgaXQgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9jb25maWd1cmVfU05NUHZfX3VzZXJzXyI+SG93IGRvIEkgY29uZmlndXJlIFNOTVB2MyB1c2Vycz88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfX2NyZWF0ZVVzZXJfX2xpbmVfZGlzYXBwZWFyc193aGVuX0lfc3RhcnRfdGhlX2FnZW50X19fV2h5XyI+VGhlICdjcmVhdGVVc2VyJyBsaW5lIGRpc2FwcGVhcnMgd2hlbiBJIHN0YXJ0IHRoZSBhZ2VudC4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9fdmFyX3VjZF9zbm1wX2FuZF9fdXNyX2xvY2FsX3NoYXJlX3NubXBfIj5XaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAvdmFyL3VjZC1zbm1wIGFuZCAvdXNyL2xvY2FsL3NoYXJlL3NubXA/PC9hPgorPGxpPiA8YSBocmVmPSIjTXlfbmV3X2FnZW50X2lzX2lnbm9yaW5nX3RoZV9vbGRfc25tcGRfY29uZl9maWxlX19XaHlfIj5NeSBuZXcgYWdlbnQgaXMgaWdub3JpbmcgdGhlIG9sZCBzbm1wZC5jb25mIGZpbGUuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfYW1fSV9nZXR0aW5nX19Db25uZWN0aW9uX3JlZnVzZWRfXyI+V2h5IGFtIEkgZ2V0dGluZyAiQ29ubmVjdGlvbiByZWZ1c2VkIj88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fZ2V0dGluZ19lcnJvcnNfYWJvdXRfX2JhZF9zZWN1cml0eV9tb2RlbF9fX193aHlfIj5JJ20gZ2V0dGluZyBlcnJvcnMgYWJvdXQgImJhZCBzZWN1cml0eSBtb2RlbCIgLSB3aHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX2dldHRpbmdfZXJyb3JzX2Fib3V0X19iYWRfcHJlZml4X21hdGNoX3BhcmFtZXRlcl9fX193aHlfIj5JJ20gZ2V0dGluZyBlcnJvcnMgYWJvdXQgImJhZCBwcmVmaXggbWF0Y2ggcGFyYW1ldGVyIiAtIHdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfY2FuX3RfSV9zZWVfdmFsdWVzX2luX3RoZV9VQ0RhdmlzX19leHRlbnNpYmxlX19vcl9fZGlza19fdHJlZXNfIj5XaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSBVQ0RhdmlzICdleHRlbnNpYmxlJyBvciAnZGlzaycgdHJlZXM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2Nhbl90X0lfc2VlX3ZhbHVlc19pbl90aGVfVUNEYXZpc19fbWVtb3J5X19vcl9fdm1zdGF0X190cmVlXyI+V2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgVUNEYXZpcyAnbWVtb3J5JyBvciAndm1zdGF0JyB0cmVlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfZG9fdGhlX0NQVV9zdGF0aXN0aWNzX21lYW5fX19pc190aGlzX3RoZV9sb2FkX2F2ZXJhZ2VfIj5XaGF0IGRvIHRoZSBDUFUgc3RhdGlzdGljcyBtZWFuIC0gaXMgdGhpcyB0aGUgbG9hZCBhdmVyYWdlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2dldF9wZXJjZW50YWdlX0NQVV91dGlsaXphdGlvbl91c2luZ19zc0NwdVJhd0lkbGVfIj5Ib3cgZG8gSSBnZXQgcGVyY2VudGFnZSBDUFUgdXRpbGl6YXRpb24gdXNpbmcgc3NDcHVSYXdJZGxlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfYWJvdXRfbXVsdGlfcHJvY2Vzc29yX3N5c3RlbXNfIj5XaGF0IGFib3V0IG11bHRpLXByb2Nlc3NvciBzeXN0ZW1zPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9zcGVlZF90eXBlX29mX215X25ldHdvcmtfaW50ZXJmYWNlc19pc193cm9uZ19fX2hvd19jYW5fSV9maXhfaXRfIj5UaGUgc3BlZWQvdHlwZSBvZiBteSBuZXR3b3JrIGludGVyZmFjZXMgaXMgd3JvbmcgLSBob3cgY2FuIEkgZml4IGl0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9pbnRlcmZhY2Vfc3RhdGlzdGljc19mb3JfbXlfc3ViaW50ZXJmYWNlc19hcmVfYWxsX3plcm9fX193aHlfIj5UaGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MgZm9yIG15IHN1YmludGVyZmFjZXMgYXJlIGFsbCB6ZXJvIC0gd2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfZG9lc19fa2xyZWFkX19fYmFkX2FkZHJlc3NfX21lYW5fIj5XaGF0IGRvZXMgImtscmVhZDogIGJhZCBhZGRyZXNzIiBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfZG9lc19fbmxpc3RfZXJyX19fd29tYmF0X25vdF9mb3VuZF9fX29yX3NpbWlsYXJfX21lYW5fIj5XaGF0IGRvZXMgIm5saXN0IGVycjogIHdvbWJhdCBub3QgZm91bmQiIChvciBzaW1pbGFyKSBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19hYm91dF9fQ2FuX3Rfb3Blbl9fZGV2X2ttZW1fXyI+SG93IGFib3V0ICJDYW4ndCBvcGVuIC9kZXYva21lbSI/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX2FnZW50X2lzX2NvbXBsYWluaW5nX2Fib3V0X19zbm1wZF9jb25mX19fX1doZXJlX2lzX3RoaXNfIj5UaGUgYWdlbnQgaXMgY29tcGxhaW5pbmcgYWJvdXQgJ3NubXBkLmNvbmYnLiAgV2hlcmUgaXMgdGhpcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfc3lzdGVtX3VwdGltZV9fc3lzVXBUaW1lX19yZXR1cm5lZF9pc193cm9uZ18iPlRoZSBzeXN0ZW0gdXB0aW1lIChzeXNVcFRpbWUpIHJldHVybmVkIGlzIHdyb25nITwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9yZWR1Y2VfdGhlX21lbW9yeV9mb290cHJpbnRfIj5Ib3cgY2FuIEkgcmVkdWNlIHRoZSBtZW1vcnkgZm9vdHByaW50PzwvYT4KKzwvdWw+PGxpPjxiPkNPTVBJTElORzwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9jb21waWxlX3dpdGhfX2NjX19pbnN0ZWFkX29mX19nY2NfXyI+SG93IGRvIEkgY29tcGlsZSB3aXRoICdjYycgaW5zdGVhZCBvZiAnZ2NjJz88L2E+Cis8bGk+IDxhIGhyZWY9IiNCdXRfZ2NjX2RvZXNuX3RfY29tcGlsZV9pdF9zdWNjZXNzZnVsbHlfb25fbXlfbmV3X1NvbGFyaXNfc3lzdGVtX19XaHlfbm90XyI+QnV0IGdjYyBkb2Vzbid0IGNvbXBpbGUgaXQgc3VjY2Vzc2Z1bGx5IG9uIG15IG5ldyBTb2xhcmlzIHN5c3RlbS4gV2h5IG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNPbl9SZWRIYXRfX19fX29yX3VwX0lfZ2V0X19fdXNyX2Jpbl9sZF9fY2Fubm90X2ZpbmRfX2xlbGZfX19XaHlfIj5PbiBSZWRIYXQgOC4wIG9yIHVwIEkgZ2V0ICIvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxlbGYiLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX2dldHRpbmdfYW5fZXJyb3JfX2F1dG9oZWFkZXJfX25vdF9mb3VuZF9fX193aGF0X3Nfd3JvbmdfIj5JJ20gZ2V0dGluZyBhbiBlcnJvciAiYXV0b2hlYWRlcjogbm90IGZvdW5kIiAtIHdoYXQncyB3cm9uZz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2Fib3V0X2FfZmFpbGVkX2RlcGVuZGVuY3lfb25fX2xpYmNyeXB0b19fX19XaGVyZV9jYW5fSV9nZXRfdGhhdF8iPldoYXQgYWJvdXQgYSBmYWlsZWQgZGVwZW5kZW5jeSBvbiAnbGliY3J5cHRvJz8gIFdoZXJlIGNhbiBJIGdldCB0aGF0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9pc190aGVfcHJvamVjdF93b3Jrc3BhY2VfZW1wdHlfdW5kZXJfVmlzdWFsX0NfX18iPldoeSBpcyB0aGUgcHJvamVjdCB3b3Jrc3BhY2UgZW1wdHkgdW5kZXIgVmlzdWFsIEMrKz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9lc19fbWFrZV90ZXN0X19za2lwX2ZpdmVfdGVzdHNfIj5XaHkgZG9lcyAnbWFrZSB0ZXN0JyBza2lwIGZpdmUgdGVzdHM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvZXNfX21ha2VfdGVzdF9fY29tcGxhaW5fYWJvdXRfYV9waWRfZmlsZV8iPldoeSBkb2VzICdtYWtlIHRlc3QnIGNvbXBsYWluIGFib3V0IGEgcGlkIGZpbGU/PC9hPgorPC91bD48bGk+PGI+Q09ESU5HPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX3dyaXRlX0NfY29kZV90b19pbnRlZ3JhdGVfd2l0aF90aGVfYWdlbnRfIj5Ib3cgZG8gSSB3cml0ZSBDIGNvZGUgdG8gaW50ZWdyYXRlIHdpdGggdGhlIGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb2VzX3RoZV9hZ2VudF9mZXRjaF90aGVfdmFsdWVfb2ZfYV92YXJpYWJsZV9mcm9tX3RoZV9zeXN0ZW1fIj5Ib3cgZG9lcyB0aGUgYWdlbnQgZmV0Y2ggdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgZnJvbSB0aGUgc3lzdGVtPzwvYT4KKzxsaT4gPGEgaHJlZj0iI01pYl9jX2NvbXBsYWluc19hYm91dF9hX21pc3NpbmdfX21pYl9yZWZlcmVuY2VfX19fd2hhdF9kb2VzX3RoaXNfbWVhbl8iPk1pYjJjIGNvbXBsYWlucyBhYm91dCBhIG1pc3NpbmcgIm1pYiByZWZlcmVuY2UiIC0gd2hhdCBkb2VzIHRoaXMgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNNaWJfY19jb21wbGFpbnNfYWJvdXRfbm90X2hhdmluZ19hX192YWxpZF9PSURfX19fd2hhdF9kb2VzX3RoaXNfbWVhbl8iPk1pYjJjIGNvbXBsYWlucyBhYm91dCBub3QgaGF2aW5nIGEgInZhbGlkIE9JRCIgLSB3aGF0IGRvZXMgdGhpcyBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb2Vzbl90X01pYl9jX2xpa2VfdGhlX01JQl9maWxlX0lfbV9naXZpbmdfaXRfIj5XaHkgZG9lc24ndCBNaWIyYyBsaWtlIHRoZSBNSUIgZmlsZSBJJ20gZ2l2aW5nIGl0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI01pYl9jX2lnbm9yZXNfbXlfTUlCX2FuZF9nZW5lcmF0ZXNfYV9wYWlyX29mX19taWJfX19fY29kZV9maWxlc19fX1doeV8iPk1pYjJjIGlnbm9yZXMgbXkgTUlCIGFuZCBnZW5lcmF0ZXMgYSBwYWlyIG9mICdtaWItMicgY29kZSBmaWxlcy4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNNaWJfY19jb21wbGFpbnNfYWJvdXRfX2NvbmZpZ3VyYXRpb25fZmlsZXNfX19XaGF0X3NfdGhpc19mb3JfIj5NaWIyYyBjb21wbGFpbnMgYWJvdXQgImNvbmZpZ3VyYXRpb24gZmlsZXMiLiBXaGF0J3MgdGhpcyBmb3I/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hpY2hfbWliX2NfY29uZmlndXJhdGlvbl9maWxlX3Nob3VsZF9JX3VzZV8iPldoaWNoIG1pYjJjIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgSSB1c2U/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2hhdmVfTWliX2NfZ2VuZXJhdGVfY29kZV9mb3JfYm90aF9zY2FsYXJzX2FuZF90YWJsZXNfIj5Ib3cgY2FuIEkgaGF2ZSBNaWIyYyBnZW5lcmF0ZSBjb2RlIGZvciBib3RoIHNjYWxhcnMgYW5kIHRhYmxlcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNBcmVfdGhlcmVfYW55X2V4YW1wbGVzX19vcl9kb2N1bWVudGF0aW9uXyI+QXJlIHRoZXJlIGFueSBleGFtcGxlcywgb3IgZG9jdW1lbnRhdGlvbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX3ZlX2NyZWF0ZWRfYV9uZXdfbW9kdWxlX3dpdGhfX21pYl9jX19idXRfaXRfZG9lc25fdF93b3JrX19fV2h5X25vdF8iPkkndmUgY3JlYXRlZCBhIG5ldyBtb2R1bGUgd2l0aCAnbWliMmMnIGJ1dCBpdCBkb2Vzbid0IHdvcmsuICBXaHkgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX3Nob3VsZF9JX3B1dF90aGVfZmlsZXNfcHJvZHVjZWRfYnlfX21pYl9jX18iPldoZXJlIHNob3VsZCBJIHB1dCB0aGUgZmlsZXMgcHJvZHVjZWQgYnkgJ21pYjJjJz88L2E+Cis8bGk+IDxhIGhyZWY9IiNNaWJfY19vbmx5X2hhbmRsZXNfYV9zaW5nbGVfdGFibGVfaW5fbXlfTUlCX19Ib3dfY2FuX0lfZml4X3RoaXNfIj5NaWIyYyBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgdGFibGUgaW4gbXkgTUlCLiBIb3cgY2FuIEkgZml4IHRoaXM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX3N1cHBvcnRfYV9sYXJnZV90YWJsZV9fd2l0aF9tb3JlX3RoYW5fX19fX2NvbHVtbl9vYmplY3RzXyI+SG93IGNhbiBJIHN1cHBvcnQgYSBsYXJnZSB0YWJsZSwgd2l0aCBtb3JlIHRoYW4gMjU2IGNvbHVtbiBvYmplY3RzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9nZXRfdGhlX2FnZW50X3RvX2dlbmVyYXRlX2FfdHJhcF9fb3JfaW5mb3JtX18iPkhvdyBjYW4gSSBnZXQgdGhlIGFnZW50IHRvIGdlbmVyYXRlIGEgdHJhcCAob3IgaW5mb3JtKT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2lmX0lfbV91c2luZ19hbl9BZ2VudFhfc3ViX2FnZW50X2luc3RlYWRfIj5XaGF0IGlmIEknbSB1c2luZyBhbiBBZ2VudFggc3ViLWFnZW50IGluc3RlYWQ/PC9hPgorPC91bD48bGk+PGI+TUlTQzwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNXaHlfYXJlX3BhY2tldHNfcmVxdWVzdGluZ190aGVfc2FtZV9pbmZvcm1hdGlvbl9sYXJnZXJfd2l0aF9VQ19EYXZpc19TTk1QXyI+V2h5IGFyZSBwYWNrZXRzIHJlcXVlc3RpbmcgdGhlIHNhbWUgaW5mb3JtYXRpb24gbGFyZ2VyIHdpdGggVUMtRGF2aXMgU05NUD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X0FTTl9fX3BhcnNlcl9pc191c2VkXyI+V2hhdCBBU04uMSBwYXJzZXIgaXMgdXNlZD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2lzX3RoZV9PZmZpY2lhbF9TbG9nYW5fb2ZfdGhlX25ldF9zbm1wX2NvZGVyc19saXN0XyI+V2hhdCBpcyB0aGUgT2ZmaWNpYWwgU2xvZ2FuIG9mIHRoZSBuZXQtc25tcC1jb2RlcnMgbGlzdD88L2E+Cis8L3VsPjxocj48cHJlPgorCis8YSBuYW1lPSJHRU5FUkFMIj4KK0dFTkVSQUwKKz09PT09PT0KKworPGEgbmFtZT0iV2hhdF9pc19pdF8iPgorV2hhdCBpcyBpdD8KKy0tLS0tLS0tLS0KKworICAtIFZhcmlvdXMgdG9vbHMgcmVsYXRpbmcgdG8gdGhlIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wKKyAgICBpbmNsdWRpbmc6CisKKwkqIEFuIGV4dGVuc2libGUgYWdlbnQKKwkqIEFuIFNOTVAgbGlicmFyeQorCSogdG9vbHMgdG8gcmVxdWVzdCBvciBzZXQgaW5mb3JtYXRpb24gZnJvbSBTTk1QIGFnZW50cworCSogdG9vbHMgdG8gZ2VuZXJhdGUgYW5kIGhhbmRsZSBTTk1QIHRyYXBzCisJKiBhIHZlcnNpb24gb2YgdGhlIHVuaXggJ25ldHN0YXQnIGNvbW1hbmQgdXNpbmcgU05NUAorCSogYSBncmFwaGljYWwgUGVybC9Uay9TTk1QIGJhc2VkIG1pYiBicm93c2VyCisKKyAgICBUaGlzIHBhY2thZ2UgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAgICBTTk1QIGltcGxlbWVudGF0aW9uICh2ZXJzaW9uIDIuMS4yLjEpLCBidXQgaGFzIGRldmVsb3BlZCBzaWduaWZpY2FudGx5CisgICAgc2luY2UgdGhlbi4KKworCisKKzxhIG5hbWU9IldoZXJlX2Nhbl9JX2dldF9pdF8iPgorV2hlcmUgY2FuIEkgZ2V0IGl0PworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRG93bmxvYWQ6CisgICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9kb3dubG9hZC8KKyAgICAtIGZ0cDovL2Z0cC5uZXQtc25tcC5vcmcvcHViL3NvdXJjZWZvcmdlL25ldC1zbm1wLworICBNRDUgU3VtczoKKyAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL21kNS8KKyAgV2ViIHBhZ2U6CisgICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KKyAgU291cmNlZm9yZ2UgUHJvamVjdCBwYWdlOgorICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvcHJvamVjdC8KKyAgTWlycm9ycyAobm90ZSB0aGF0IHNvdXJjZWZvcmdlIGRvd25sb2FkIHNlcnZlcnMgYXJlIG1pcnJvcmVkIHRoZW1zZWx2ZXMpOgorICAgIC0gVVM6ICAgICAgICAgIGZ0cDovL2Z0cC5mcmVlc25tcC5jb20vbWlycm9ycy9uZXQtc25tcC8KKyAgICAtIEJ1bGdhcmlhOiAgICBodHRwOi8vcnRmbS51bmktc3Zpc2h0b3YuYmcvbmV0LXNubXAvICAgIChhcHBlYXJzIHRvIGJlIG91dCBvZiBkYXRlKQorICAgIC0gSmFwYW46ICAgICAgIGZ0cDovL2Z0cC5heWFtdXJhLm9yZy9wdWIvbmV0LXNubXAvICAgICAgKG1heSBvbmx5IHdvcmsgaW5zaWRlIEphcGFuKQorICAgIC0gR2VybWFueTogICAgIGZ0cDovL2Z0cC5tcGcuZ29lLm5pLnNjaHVsZS5kZS9wdWIvaW50ZXJuZXQvbmV0LXNubXAvICAodW5rbm93biBob3N0KQorICAgIC0gR3JlZWNlOiAgICAgIGZ0cDovL2Z0cC5udHVhLmdyL3B1Yi9uZXQvc25tcC9uZXQtc25tcC8KKworICBUaGUgb2xkIHVjZC1zbm1wLnVjZGF2aXMuZWR1IHdlYiBzaXRlIGFuZCBmdHAgc2VydmVyIGlzIG5vdworICBvZmZsaW5lIGFuZCBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGFueSBsb25nZXIuCisKKworCis8YSBuYW1lPSJXaGF0X2RvY3VtZW50YXRpb25faXNfYXZhaWxhYmxlXyI+CitXaGF0IGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBGQVEgKCEpCisJUkVBRE1FIGFuZCBpbmRpdmlkdWFsIFJFQURNRXMgZm9yIHZhcmlvdXMgcGxhdGZvcm1zCisJUkVBRE1FLnRocmVhZCAoZGlzY3Vzc2VzIHRocmVhZGluZyBpc3N1ZXMpCisJSU5TVEFMTAorCVBPUlRJTkcKKwlFWEFNUExFLmNvbmYKKwltYW4gcGFnZXMgZm9yIHRoZSBpbmRpdmlkdWFsIHRvb2xzLCBmaWxlcyBhbmQgdGhlIEFQSQorCUEgZ3VpZGUgZm9yIGV4dGVuZGluZyB0aGUgYWdlbnQKKwlUdXRvcmlhbHMgZm9yIGJvdGggdWNkLXNubXAgdjQgYW5kIG5ldC1zbm1wIHY1CisgICAgICAgICAgIGF0ICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC8KKyAgICAgICAgICAgYW5kIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvIHJlc3BlY3RpdmVseQorCisgICAgICBNb3N0IG9mIHRoaXMgZG9jdW1lbnRhdGlvbiAocGx1cyBhcmNoaXZlcyBvZiB0aGUgbWFpbGluZyBsaXN0cykKKwkgaXMgYWxzbyBhdmFpbGFibGUgb24gb3VyIHdlYiBwYWdlOgorCisgICAgICAgIAlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KKworCisKKzxhIG5hbWU9IkFyZV90aGVyZV9iaW5hcmllc19hdmFpbGFibGVfIj4KK0FyZSB0aGVyZSBiaW5hcmllcyBhdmFpbGFibGU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLSBUaGVyZSBhcmUgYmluYXJpZXMgZm9yIHNvbWUgc3lzdGVtcyBhdmFpbGFibGUgaW4gdGhlIGJpbmFyaWVzCisgICAgZGlyZWN0b3J5IG9uIHRoZSBmdHAgc2l0ZS4KKworCisKKzxhIG5hbWU9IldoYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX1VDRF9TTk1QX2FuZF9OZXRfU05NUF8iPgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVUNELVNOTVAgYW5kIE5ldC1TTk1QPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTm90IGEgZ3JlYXQgZGVhbCwgcmVhbGx5LgorICBBbHRob3VnaCB0aGUgcHJvamVjdCBvcmlnaW5hbGx5IHN0YXJ0ZWQgYXQgVUMgRGF2aXMgKGhlbmNlIHRoZSBuYW1lKSwKKyAgYW5kIGl0IGhhcyBhbHdheXMgYmVlbiBiYXNlZCB0aGVyZSwgbW9zdCBvZiB0aGUgY29udHJpYnV0b3JzIGhhdmUgaGFkCisgIGxpdHRsZSBvciBubyBjb25uZWN0aW9uIHdpdGggdGhpcyBpbnN0aXR1dGlvbi4KKworICAgIFRoZSBtb3ZlIHRvIFNvdXJjZUZvcmdlIHdhcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgbW9yZSBmbGV4aWJsZQorICBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QsIGFuZCB0byBkaXN0cmlidXRlIHRoZSBhZG1pbmlzdHJhdGl2ZQorICB3b3JrbG9hZCBtb3JlIGV2ZW5seS4gIFRoZSBjaGFuZ2Ugb2YgbmFtZSBzaW1wbHkgcmVmbGVjdHMgdGhpcyBtb3ZlLAorICB3aGljaCB3YXMgdGhlIGxhc3QgcmVtYWluaW5nIGxpbmsgd2l0aCBVQyBEYXZpcy4KKworICAgIFRoZSA0LjIueCBsaW5lIGlzIHRoZSBsYXN0IHJlbGVhc2UgbGluZSB0aGF0IHVzZXMgdGhlIHVjZC1zbm1wIG5hbWUsCisgIGFuZCBhbGwgcmVsZWFzZXMgdW5kZXIgdGhpcyBiYW5uZXIgd2lsbCBiZSBidWctZml4ZXMgb25seS4gIFJlbGVhc2UKKyAgNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHVzaW5nIHRoZSBuZXQtc25tcCBuYW1lLCBhbmQgYWxsIG5ldyBmZWF0dXJlcworICBhbmQgc2lnbmlmaWNhbnQgZGV2ZWxvcG1lbnQgd2lsbCBiZSByZWxlYXNlZCB1bmRlciB0aGlzIG5hbWUuCisgICAgKFRob3VnaCB0aGUgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIGEgYnVnLWZpeCBhbmQgYSBuZXcgZmVhdHVyZSBpcworICBzb21ldGhpbmcgb2YgYSB2YWd1ZSBvbmUsIHNvIHNvbWUgY2hhbmdlcyBpbiB0aGUgNC4yLnggbGluZSBtYXkgYmUKKyAgcmVsYXRpdmVseSBub24tdHJpdmlhbCEpCisgCisgICAgU3RhcnRpbmcgd2l0aCB0aGUgNS4wIHJlbGVhc2UsIHdlIGFyZSBhbHNvIHRyeWluZyB0byByZXZpZXcgYW5kCisgIHJld29yayB0aGUgdW5kZXJseWluZyBjb2RlIGJhc2UgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgYW5kCisgIG1haW50YWluYWJpbGl0eSBvZiB0aGUgcGFja2FnZS4gIFRoZSA1LjAgY2hhbmdlcyBoYXZlIG1vc3RseQorICBjb25jZW50cmF0ZWQgb24gdGhlIGFnZW50IGFyY2hpdGVjdHVyZSwgdGhvdWdoIHRoZXJlIGhhdmUgYmVlbiBzb21lCisgIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYXMgd2VsbC4gIEZ1dHVyZSByZWxlYXNlcyBtYXkKKyAgaW5jbHVkZSBmdXJ0aGVyIHJlc3RydWN0dXJpbmcgb2YgdGhlIGxpYnJhcnkuCisgICAgVGhpcyBwcm9jZXNzIHdpbGwgcHJvYmFibHkgcmVzdWx0IGluIHNvbWUgY2hhbmdlcyB0byB0aGUgQVBJLAorICB0aG91Z2ggd2Ugd2lsbCBhdHRlbXB0IHRvIHJldGFpbiBzb21lIGZvcm0gb2YgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHkgYXMgZmFyIGFzIHBvc3NpYmxlLCBhbmQgY2xlYXJseSBtYXJrIGFueXRoaW5nIHRoYXQgaGFzCisgIGNoYW5nZWQuICBUaGUgbW9zdCBzaWduaWZpY2FudCBjaGFuZ2Ugd2l0aCB0aGUgNS4wIHJlbGVhc2UgaXMgYQorICByZXN0cnVjdHVyaW5nIG9mIHRoZSBoZWFkZXIgZmlsZSBvcmdhbmlzYXRpb24gLSBub3QgbGVhc3QgYSBjaGFuZ2UKKyAgZnJvbSAmbHQ7dWNkLXNubXAveHh4LmgmZ3Q7IHRvICZsdDtuZXQtc25tcC95eXkuaCZndDsuCisKKworCis8YSBuYW1lPSJXaGF0X29wZXJhdGluZ19zeXN0ZW1zX2RvZXNfaXRfcnVuX29uXyI+CitXaGF0IG9wZXJhdGluZyBzeXN0ZW1zIGRvZXMgaXQgcnVuIG9uPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEJvdGggdGhlIGFwcGxpY2F0aW9ucyBhbmQgdGhlIGFnZW50IGhhdmUgYmVlbiByZXBvcnRlZCBhcyBydW5uaW5nCisgIChhdCBsZWFzdCBpbiBwYXJ0KSBvbiB0aGUgZm9sbG93aW5nIG9wZXJhdGluZyBzeXN0ZW1zOgorCisJKiBIUC1VWCAoMTAuMjAgdG8gOS4wMSBhbmQgMTEuMCAtLSBzZWUgUkVBRE1FLmhwdXgxMSkKKwkqIFVsdHJpeCAoNC41IHRvIDQuMikKKwkqIFNvbGFyaXMgU1BBUkMvVUxUUkEgKDIuOCB0byAyLjMpLCBJbnRlbCAoMi45KSBhbmQgU3VuT1MgKDQuMS40IHRvIDQuMS4yKQorCSogT1NGICg0LjAsIDMuMikKKwkqIE5ldEJTRCAoMS41YWxwaGEgdG8gMS4wKQorCSogRnJlZUJTRCAoNC4xIHRvIDIuMikKKwkqIEJTRGkgKDQuMC4xIHRvIDIuMSkKKwkqIExpbnV4IChrZXJuZWxzIDIuNCB0byAxLjMpCisJKiBBSVggKDQuMS41LCAzLjIuNSkKKwkqIE9wZW5CU0QgKDIuOCwgMi42KQorCSogSXJpeCAoNi41IHRvIDUuMSkKKwkqIE9TIFggKDEwLjEuMSBhbmQgMTAuMS4yKQorCSogRHluaXgvUFRYIDQuNAorCSogUU5YIDYuMi4xQQorCisgIFdlIGhhdmUgYWxzbyBiZWVuIGluZm9ybWVkIGFib3V0IGEgcG9ydCB0byB0aGUgU3RyYXR1cyBWT1MuCisgIFNlZSBodHRwOi8vZnRwLnN0cmF0dXMuY29tL3Zvcy9uZXR3b3JrL25ldHdvcmsuaHRtbCBmb3IgZGV0YWlscy4KKworICBTZWUgdGhlIG5leHQgcXVlc3Rpb24gYnV0IG9uZSBmb3IgdGhlIHN0YXR1cyBvZiBXaW5kb3dzIHN1cHBvcnQuCisKKyAgQ2VydGFpbiBzeXN0ZW1zIChlLmcuIEhQLVVYIDExLCBJcml4PykgZmFpbCB0byBjb21waWxlIHBhcnRpY3VsYXIKKyAgcG9ydGlvbnMgb2YgdGhlIGFnZW50LiAgVGhlc2UgY2FuIHVzdWFsbHkgYmUgcGVyc3VhZGVkIHRvIGNvbXBpbGUKKyAgKGF0IHRoZSBsb3NzIG9mIHNvbWUgZnVuY3Rpb25hbGl0eSkgYnkgb21pdHRpbmcgdGhlIG1vZHVsZXMgYWZmZWN0ZWQuCisgIFNlZSB0aGUgbmV4dCBxdWVzdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisgIEFsc28gbm90ZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpbiB0aGlzCisgIGxpc3QgZG9lcyBub3QgaW1wbHkgYSBwZXJmZWN0IG9yIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLiAgVGhpcyBpcworICBzaW1wbHkgd2hhdCB2YXJpb3VzIHBlb3BsZSBoYXZlIHJlcG9ydGVkIGFzIHNlZW1pbmcgdG8gd29yay4gKE9yIG1vcmUKKyAgZnJlcXVlbnRseSwgdGhlIGNvbmZpZ3VyYXRpb25zIHBlb3BsZSBoYXZlIHJlcG9ydGVkIHByb2JsZW1zIHdpdGgKKyAgdGhhdCB3ZSB0aGluayB3ZSd2ZSBmaXhlZCEpCisKKworCis8YSBuYW1lPSJXaGF0X2hhcHBlbnNfaWZfbWluZV9pc25fdF9saXN0ZWRfIj4KK1doYXQgaGFwcGVucyBpZiBtaW5lIGlzbid0IGxpc3RlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSXQncyBwcm9iYWJseSB3b3J0aCB0cnlpbmcgdG8gY29tcGlsZSBpdCBhbnl3YXkuICBJZiB5b3VyIHN5c3RlbQorICBpcyByZWFzb25hYmx5IHNpbWlsYXIgdG8gYW5vdGhlciBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbiwgaXQgbWF5CisgIHdlbGwgY29tcGlsZSB3aXRoIGxpdHRsZSBvciBubyBkaWZmaWN1bHR5LiAgVGhlIG1vc3QgbGlrZWx5IHNvdXJjZQorICBvZiBwcm9ibGVtcyB3aWxsIGJlIE1JQiBtb2R1bGVzIHdpdGhpbiB0aGUgYWdlbnQsIGFzIHRoaXMgdGVuZHMgdG8KKyAgYmUgd2hlcmUgdGhlIG1vc3Qgc3lzdGVtLXNwZWNpZmljIGNvZGUgaXMgZm91bmQuCisKKyAgICBJZiBvbmx5IGEgZmV3IG1vZHVsZXMgZmFpbCB0byBjb21waWxlLCB0cnkgcmVtb3ZpbmcgdGhlbSBmcm9tCisgIHRoZSBhZ2VudCBieSBydW5uaW5nICJjb25maWd1cmUgLS13aXRoLW91dC1taWItbW9kdWxlPXh4eCx5eXkiLAorICBhbmQgcmUtY29tcGlsaW5nLiAgSWYgYSBsYXJnZSBudW1iZXIgb2YgbW9kdWxlcyBmYWlsLCB0aGVuIGl0CisgIG1pZ2h0IGJlIGVhc2llciB0byBzdGFydCBmcm9tIGEgcmVsYXRpdmVseSBiYXJlIHN5c3RlbSwgdXNpbmcKKyAgImNvbmZpZ3VyZSAtLWVuYWJsZS1taW5pLWFnZW50IC0td2l0aC1kZWZhdWx0cyIuICBUaGVuIGlmIHRoaXMKKyAgbWluaW1hbCBhZ2VudCBjb21waWxlcyBhbmQgcnVucyBzdWNjZXNzZnVsbHksIHRyeSBhZGRpbmcgdGhlCisgIG1pc3NpbmcgbWliZ3JvdXBzIHVzaW5nIHRoZSBjb25maWd1cmUgb3B0aW9uICctLXdpdGgtbWliLW1vZHVsZScuCisgIAorICAgIElmIGNvbmZpZ3VyZSBmYWlscyB3aXRoICJpbnZhbGlkIGNvbmZpZ3VyYXRpb24iIG1lc3NhZ2VzLCBvcgorICB5b3UgZ2V0IGNvbXBsZXRlbHkgc3R1Y2ssIGNvbnRhY3QgdGhlIGNvZGVycyBsaXN0IGZvciBhZHZpY2UuCisgIFNpbWlsYXJseSwgaWYgeW91IG1hbmFnZSB0byBnZXQgdGhpcyB3b3JraW5nIG9uIGEgbmV3IHN5c3RlbSwKKyAgcGxlYXNlIGxldCB1cyBrbm93IGJvdGggZGV0YWlscyBvZiB0aGUgaGFyZHdhcmUgeW91J3JlIHVzaW5nLAorICBhbmQgd2hhdCB2ZXJzaW9ucyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UndmUgdHJpZWQgaXQgb24uCisgIFRoZSBlbnRyeSAnaG9zdCcgaW4gdGhlIGZpbGUgJ2NvbmZpZy5zdGF0dXMnIHdpbGwgc2hvdyB0aGlzCisgIGluZm9ybWF0aW9uLiAgT2gsIGFuZCBjb25ncmF0dWxhdGlvbnMhCisKKworCis8YSBuYW1lPSJEb2VzX2l0X3J1bl9vbl9XaW5kb3dzXyI+CitEb2VzIGl0IHJ1biBvbiBXaW5kb3dzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHN1aXRlIHNob3VsZCBjb21waWxlIGFuZCBydW4gb24gV2luMzIgcGxhdGZvcm1zLCBpbmNsdWRpbmcKKyAgdGhlIGxpYnJhcnksIGNvbW1hbmQtbGluZSB0b29scyBhbmQgdGhlIGJhc2ljIGFnZW50IGZyYW1ld29yay4KKyAgTm90ZSB0aGF0IHRoZSBhZ2VudCBub3cgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIE1JQi1JSSBtb2R1bGUsCisgIGJ1dCB0aGlzIHJlcXVpcmVzIE1pY3Jvc29mdCdzIENvcmUgUGxhdGZvcm0gU0RLLiAgSW5zdHJ1Y3Rpb25zCisgIGZvciBob3cgdG8gaW5zdGFsbCB0aGlzIGFyZSBnaXZlbiBpbiBSRUFETUUud2luMzIuCisKKyAgICBTb21lIG90aGVyIE1JQiBtb2R1bGVzLCBpbmNsdWRpbmcgdGhlIFVDRCBwYXNzLXRocm91Z2ggZXh0ZW5zaW9ucywKKyAgZG8gbm90IGN1cnJlbnRseSB3b3JrIHVuZGVyIFdpbmRvd3MuICBWb2x1bnRlZXJzIHRvIGFzc2lzdCBpbgorICB0aGVzZSBtaXNzaW5nIG1vZHVsZXMgYXJlIGxpa2VseSB0byB3ZWxjb21lZCB3aXRoIG9wZW4gYXJtcyA6LSkKKworICAgIEZ1cnRoZXIgZGV0YWlscyBvZiBXaW5kb3dzIHN1cHBvcnQgKGN1cnJlbnRseSBWaXN1YWwgQysrIGFuZAorICBDeWdudXMgY3lnd2luMzIpIGlzIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSBSRUFETUUud2luMzIKKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2ZpbmRfb3V0X2Fib3V0X25ld19yZWxlYXNlc18iPgorSG93IGRvIEkgZmluZCBvdXQgYWJvdXQgbmV3IHJlbGVhc2VzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3QgZm9yIHRoZXNlIGFubm91bmNlbWVudHMKKworICAJbmV0LXNubXAtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKKyAgVG8gYmUgYWRkZWQgdG8gKG9yIHJlbW92ZWQgZnJvbSkgdGhpcyBsaXN0LCB2aXNpdAorICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9saXN0cy9uZXQtc25tcC1hbm5vdW5jZS8uICBPciB5b3UgY2FuIHNlbmQgYQorICBtZXNzYWdlIHRvIHRoZSBhZGRyZXNzCisgICduZXQtc25tcC1hbm5vdW5jZS1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCcgd2l0aCBhIHN1YmplY3QKKyAgbGluZSBvZiAnc3Vic2NyaWJlJyAob3IgJ3Vuc3Vic2NyaWJlJyBhcyBhcHByb3ByaWF0ZSkuCisKKyAgTWFqb3IgY29kZSByZXZpc2lvbnMgbWF5IGJlIGFubm91bmNlZCBtb3JlIHdpZGVseSAoZS5nLiBvbiB0aGUKKyAgU05NUCBtYWlsaW5nIGxpc3RzLCBvciBjb21wLnByb3RvY29scy5zbm1wKSBidXQgdGhpcyBsaXN0IGlzIHRoZSBtb3N0CisgIHJlbGlhYmxlIHdheSB0byBrZWVwIGluIHRvdWNoIHdpdGggdGhlIHN0YXR1cyBvZiB0aGlzIHBhY2thZ2UuCisKKyAgUGF0Y2hlcyB0byBmaXgga25vd24gcHJvYmxlbXMgYXJlIGFsc28gbWFkZSBhdmFpbGFibGUgdmlhIHRoZSB3ZWIgc2l0ZToKKworICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9wYXRjaGVzLworCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2ZpbmRfb3V0X3doYXRfb3RoZXJfcGVvcGxlX2FyZV9kb2luZ18iPgorSG93IGNhbiBJIGZpbmQgb3V0IHdoYXQgb3RoZXIgcGVvcGxlIGFyZSBkb2luZz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkaXNjdXNzaW9uIGxpc3QKKworICAJbmV0LXNubXAtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKKyAgVG8gYmUgYWRkZWQgdG8gKG9yIHJlbW92ZWQgZnJvbSkgdGhpcyBsaXN0LCB2aXNpdAorICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9saXN0cy9uZXQtc25tcC11c2Vycy4gIE9yIHlvdSBjYW4gc2VuZCBhCisgIG1lc3NhZ2UgdG8gdGhlIGFkZHJlc3MgJ25ldC1zbm1wLXVzZXJzLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0JworICB3aXRoIGEgc3ViamVjdCBsaW5lIG9mICdzdWJzY3JpYmUnIChvciAndW5zdWJzY3JpYmUnIGFzIGFwcHJvcHJpYXRlKS4KKworICBUbyBmaW5kIG91dCB3aGF0IHRoZSBkZXZlbG9wZXJzIGFyZSBkb2luZywgYW5kIHRvIGhlbHAgdGhlbSBvdXQsIHBsZWFzZQorICByZWFkIHRoZSBQT1JUSU5HIGZpbGUgZW5jbG9zZWQgd2l0aCB0aGUgcGFja2FnZS4KKworICBUaGVyZSBpcyBhbHNvIGFuIG5ldC1zbm1wIElSQyBjaGFubmVsIHNldCB1cCBvbiB0aGUgZnJlZW5vZGUubmV0IElSQworICBjaGF0IHNlcnZlcnMgKHlvdSBjYW4gdXNlIGlyYy5mcmVlbm9kZS5uZXQgdG8gY29ubmVjdCBhbmQvb3Igc2VlCisgIGh0dHA6Ly93d3cuZnJlZW5vZGUubmV0LyBmb3IgZ2V0dGluZyBzdGFydGVkIHdpdGggaXJjKS4gIE11bHRpcGxlCisgIGNvcmUgZGV2ZWxvcGVycyBoYW5nIG91dCB0aGVyZSBvbiBhIHJlZ3VsYXIgYmFzaXMuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9zdWJtaXRfYV9wYXRjaF9vcl9idWdfcmVwb3J0XyI+CitIb3cgZG8gSSBzdWJtaXQgYSBwYXRjaCBvciBidWcgcmVwb3J0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEFsbCBidWcgcmVwb3J0cyBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBidWcgZGF0YWJhc2UgdGhyb3VnaCB0aGUKKyAgaW50ZXJmYWNlIGZvdW5kIGF0IGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2J1Z3MvLiAgQmUKKyAgc3VyZSB0byBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRoYXQgeW91J3ZlIGJlZW4gd29ya2luZworICB3aXRoLCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kICd1bmFtZSAtYScsIHRoZSBwcmVjaXNlIGNvbW1hbmQgdGhhdAorICB0cmlnZ2VycyB0aGUgcHJvYmxlbSBhbmQgYSBjb3B5IG9mIHRoZSBvdXRwdXQgaXQgcHJvZHVjZXMuCisKKyAgICBBbGwgcGF0Y2hlcyBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBwYXRjaCBtYW5hZ2VyIGF0CisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3BhdGNoZXMvLiAgSWYgcG9zc2libGUsIHN1Ym1pdCBhCisgIGJ1ZyByZXBvcnQgZGVzY3JpYmluZyB0aGUgcGF0Y2ggYXMgd2VsbCAocmVmZXJlbmNpbmcgaXQgYnkgaXRzIHBhdGNoCisgIG51bWJlcikgc2luY2UgdGhlIHBhdGNoIG1hbmFnZXIgZG9lc24ndCBjb250YWluIGEgZGVjZW50IGRlc2NyaXB0aW9uCisgIGZpZWxkLgorCisgICAgUXVlc3Rpb25zIGFib3V0IHVzaW5nIHRoZSBwYWNrYWdlIHNob3VsZCBiZSBkaXJlY3RlZCBhdCB0aGUKKyAgbmV0LXNubXAtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IG1haWxpbmcgbGlzdC4gIE5vdGUgdGhhdCB0aGlzCisgIG1haWxpbmcgbGlzdCBpcyByZWxhdGl2ZWx5IGJ1c3ksIGFuZCB0aGUgcGVvcGxlIGFuc3dlcmluZyB0aGVzZQorICBxdWVzdGlvbnMgYXJlIGRvaW5nIHNvIG91dCBvZiB0aGUgZ29vZG5lc3Mgb2YgdGhlaXIgaGVhcnRzLCBhbmQgaW4KKyAgYWRkaXRpb24gdG8gdGhlaXIgbWFpbiBlbXBsb3ltZW50LiAgUGxlYXNlIG5vdGUgdGhlIGZvbGxvd2luZzoKKworICAgICAtIHVzZSBwbGFpbiB0ZXh0IG1haWwsIHJhdGhlciB0aGFuIEhUTUwKKyAgICAgLSBkb24ndCByZXNlbmQgcXVlc3Rpb25zIG1vcmUgdGhhbiBvbmNlCisgICAgICAgICAgKGV2ZW4gaWYgbm8tb25lIGFuc3dlcmVkIGltbWVkaWF0ZWx5KQorICAgICAtIGluY2x1ZGUgZnVsbCBkZXRhaWxzIG9mIGV4YWN0IGNvbW1hbmRzIGFuZCBlcnJvciBtZXNzYWdlcworICAgICAgICAgICgiSSd2ZSB0cmllZCBldmVyeXRoaW5nLCBhbmQgaXQgZG9lc24ndCB3b3JrIiBpc24ndCBtdWNoIHVzZSEpCisgICAgIC0gZG8gKk5PVCogc2VuZCBtZXNzYWdlcyB0byAtdXNlcnMgYW5kIC1jb2RlcnMgbWFpbGluZyBsaXN0cworICAgICAgICAgIChtb3N0IGRldmVsb3BlcnMgcmVhZCBib3RoIGFueXdheSkKKyAgICAgLSBkb24ndCBtYWlsIHRoZSBkZXZlbG9wZXJzIHByaXZhdGVseSAtIGtlZXAgZXZlcnl0aGluZyBvbiB0aGUgbGlzdAorCisgIFJlbWVtYmVyIHRoYXQgdGhpcyBpcyBiYXNpY2FsbHkgYW4gdW5zdXBwb3J0ZWQgcGFja2FnZS4gIEZ1bmRhbWVudGFsbHkKKyAgaXQncyBPcGVuIFNvdXJjZSwgc28geW91IGhhdmUgdGhlIHNvdXJjZSBjb2RlLiAgSWYgeW91IG5lZWQgc29tZXRoaW5nCisgIGZpeGluZyBiYWRseSBlbm91Z2gsIGl0J3MgdXAgdG8geW91IHRvIGRvIHRoZSB3b3JrLgorCisgICAgV2UgY2FuJ3QgcHJvbWlzZSB0byBiZSBhYmxlIHRvIHNvbHZlIGFsbCBwcm9ibGVtcywgYnV0IHdlJ2xsCisgIGNlcnRhaW5seSB0cnkgYW5kIGhlbHAuICBCdXQgcmVtZW1iZXIgdGhhdCB0aGlzIGlzIGJhc2ljYWxseSBhbgorICB1bnN1cHBvcnRlZCBwYWNrYWdlLiAgSXQncyBPcGVuIFNvdXJjZSwgc28gaWYgeW91IG5lZWQgc29tZXRoaW5nCisgIGZpeGluZyBiYWRseSBlbm91Z2gsICBmdW5kYW1lbnRhbGx5IGl0J3MgdXAgdG8geW91IHRvIGRvIHRoZSB3b3JrLgorCis8YSBuYW1lPSJDYW5fSV9yZXVzZV90aGVfY29kZV9pbl9teV9jb21tZXJjaWFsX2FwcGxpY2F0aW9uXyI+CitDYW4gSSByZXVzZSB0aGUgY29kZSBpbiBteSBjb21tZXJjaWFsIGFwcGxpY2F0aW9uPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGV0YWlscyBvZiB0aGUgQ09QWVJJR0hUcyBvbiB0aGUgcGFja2FnZSBjYW4gYmUgZm91bmQgaW4gdGhlCitDT1BZSU5HIGZpbGUuICBZb3Ugc2hvdWxkIGhhdmUgeW91ciBsYXd5ZXIgcmVhZCB0aGlzIGZpbGUgaWYgeW91IHdpc2gKK3RvIHVzZSB0aGUgY29kZSBpbiB5b3VyIGNvbW1lcmNpYWwgYXBwbGljYXRpb24uICBXZSB3aWxsIG5vdCBzdW1tYXJpemUKK2hlcmUgd2hhdCBpcyBpbiB0aGUgZmlsZSwgYXMgd2UncmUgbm90IGxhd3llcnMgYW5kIGFyZSB1bnF1YWxpZmllZCB0bworZG8gc28uCisKKworPGEgbmFtZT0iV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fU05NUHZfX19TTk1Qdl9fYW5kX1NOTVB2X18iPgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU05NUHYxLCBTTk1QdjIgYW5kIFNOTVB2Mz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxhIG5hbWU9IldoYXRfYXJlX2FsbF90aGVzZV9kaWZmZXJlbnRfU05NUHZfX3NfYW55d2F5XyI+CitXaGF0IGFyZSBhbGwgdGhlc2UgZGlmZmVyZW50IFNOTVB2MidzIGFueXdheT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworICBBIGZ1bGwgZGVzY3JpcHRpb24gaXMgcHJvYmFibHkgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIEZBUS4KKyAgVmVyeSBicmllZmx5LCB0aGUgb3JpZ2luYWwgcHJvdG9jb2wgYW5kIGZyYW1ld29yayB3YXMgZGVzY3JpYmVkCisgIGluIFJGQ3MgMTE1NS0xMTU3LCBhbmQgaXMgbm93IGtub3duIGFzIFNOTVB2MS4KKworICAgIFByYWN0aWNhbCBleHBlcmllbmNlIHNob3dlZCB1cCB2YXJpb3VzIHByb2JsZW1zIGFuZAorICBkZWZpY2llbmNpZXMgd2l0aCB0aGlzLCBhbmQgYSByZXZpc2VkIGZyYW1ld29yayB3YXMgZGV2ZWxvcGVkIHRvCisgIHRyeSBhbmQgYWRkcmVzcyB0aGVzZS4gIFRoaXMgd2FzIGRlc2NyaWJlZCBpbiBSRkNzIDE0NDEtMTQ1MiwgYW5kCisgIGtub3duIGFzICJTTk1QdjIgY2xhc3NpYyIuCisgIFRoZSBjaGFuZ2VzIHByb3Bvc2VkIGluY2x1ZGU6CisKKwkqIG5ldyB3YXlzIG9mIGRlZmluaW5nIGluZm9ybWF0aW9uIChNSUIgc3RydWN0dXJlKQorCQkoU01JLCBUZXh0dWFsIGNvbnZlbnRpb25zLCBjb25mb3JtYW5jZSBzdGF0ZW1lbnRzKQorCSogbmV3IHByb3RvY29sIHBhY2tldCB0eXBlcyBhbmQgdHJhbnNwb3J0IG1hcHBpbmdzCisJKiBuZXcgbWVjaGFuaXNtcyBmb3IgYWRtaW5pc3RyYXRpb24gYW5kIHNlY3VyaXR5CisJKiBtZWNoYW5pc21zIGZvciByZW1vdGUgY29uZmlndXJhdGlvbgorCisgIFVuZm9ydHVuYXRlbHksIHdoaWxlIG1hbnkgb2YgdGhlc2Ugd2VyZSBnZW5lcmFsbHkgYWNjZXB0ZWQsIHRoZXJlCisgIHdhcyBzb21lIGRpc2FncmVlbWVudCBpbiB0aGVzZSBsYXN0IHR3byBhcmVhcywgc2VjdXJpdHkvYWRtaW4KKyAgYW5kIHJlbW90ZSBjb25maWd1cmF0aW9uLiAgVGhpcyByZXN1bHRlZCBpbiBhIG51bWJlciBvZiB2YXJpYW50cyBhbmQKKyAgYWx0ZXJuYXRpdmUgcHJvcG9zYWxzOgorCisJU05NUHYyYwkJQ29udGFpbnMgdGhlIG5ldyBwcm90b2NvbCBhbmQgTUlCIHN0cnVjdHVyZSBlbGVtZW50cywKKwkJCXVzaW5nIHRoZSBleGlzdGluZyBTTk1QdjEgYWRtaW5pc3RyYXRpb24gc3RydWN0dXJlLgorCQkJVGhpcyBpcyB0aGUgZGUtZmFjdG8gU05NUHYyIHN0YW5kYXJkIChkZXNjcmliZWQgaW4KKwkJCVJGQ3MgMTkwMS0xOTA4KSwgc3VwZXJzZWRpbmcgU05NUHYyIGNsYXNzaWMsIGFuZCBpcworCQkJa25vd24gYXMgIkNvbW11bml0eS1iYXNlZCBTTk1QdjIiIG9yIHNpbXBseSAiU05NUHYyIi4KKworCisJU05NUHYyIHVzZWMJfSBBbHRlcm5hdGl2ZSBwcm9wb3NhbHMgdG8gYWRkcmVzcyB0aGUKKwlTTk1QdjIqCQl9IGxpbWl0YXRpb25zIG9mIFNOTVB2MSBhZG1pbmlzdHJhdGlvbgorCQkJfSBUaGVzZSBhcmUgYm90aCBzdXBlci1zZXRzIG9mIFNOTVB2MmMKKworCQkJCisJU05NUC1ORwkJQW4gYXR0ZW1wdCB0byByZWFjaCBhZ3JlZW1lbnQgYmV0d2VlbgorCQkJdGhlIHByb3BvbmVudHMgb2YgdXNlYyBhbmQgdjJzdGFyLgorCisgIFRoZSBmb3JtYWwgc3VjY2Vzc29yIHRvIHRoZSBTTk1QLU5HIHdvcmsgaGFzIGJlZW4gdGVybWVkIFNOTVB2My4KKyAgVGhpcyBoYXMgbm93IGJlZW4gZWZmZWN0aXZlbHkgZmluYWxpc2VkLCBhbmQgaXMgZGVzY3JpYmVkIGluIFJGQ3MKKyAgMjU3MS0yNTc1LiAgVGhpcyBpcyBjdXJyZW50bHkgYSBQcm9wb3NlZCBTdGFuZGFyZCwgYnV0IGlzIGxpa2VseQorICB0byBwcm9ncmVzcyB0byBmdWxsIFN0YW5kYXJkIGluIHRoZSByZWxhdGl2ZWx5IG5lYXIgZnV0dXJlLgorCisKKworPGEgbmFtZT0iV2hpY2hfdmVyc2lvbnNfb2ZfU05NUF9hcmVfc3VwcG9ydGVkX2luX3RoaXNfcGFja2FnZV8iPgorV2hpY2ggdmVyc2lvbnMgb2YgU05NUCBhcmUgc3VwcG9ydGVkIGluIHRoaXMgcGFja2FnZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIHBhY2thZ2UgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBvcmlnaW5hbCBTTk1QdjEsIENvbW11bml0eS1iYXNlZAorICBTTk1QdjIgKGkuZS4gUkZDcyAxOTAxLTE5MDgpLCBhbmQgU05NUHYzIChpLmUuIFJGQ3MgMjU3MS0yNTc1KS4KKyAgICBUaGUgYWdlbnQgd2lsbCByZXNwb25kIHRvIHJlcXVlc3RzIHVzaW5nIGFueSBvZiB0aGVzZSBwcm90b2NvbHMsCisgIGFuZCBhbGwgdGhlIHRvb2xzIHRha2UgYSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGRldGVybWluZSB3aGljaAorICB2ZXJzaW9uIHRvIHVzZS4KKworICBTdXBwb3J0IGZvciBTTk1QdjIgY2xhc3NpYyAoYS5rLmEuICJTTk1QdjIgaGlzdG9yaWMiIC0gUkZDcyAxNDQxLTE0NTIpCisgIHdhcyBkcm9wcGVkIHdpdGggdGhlIDQuMCByZWxlYXNlIG9mIHRoZSBVQ0Qtc25tcCBwYWNrYWdlLgorCisKKworPGEgbmFtZT0iQ2FuX0lfdXNlX1NOTVB2X19yZXF1ZXN0c193aXRoX2FuX1NOTVB2X19NSUJfX29yX3ZpY2VfdmVyc2FfXyI+CitDYW4gSSB1c2UgU05NUHYxIHJlcXVlc3RzIHdpdGggYW4gU05NUHYyIE1JQiAob3IgdmljZSB2ZXJzYSk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFllcy4KKworICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBzeW50YXggdXNlZCB0byBkZWZpbmUgYSBNSUIgZmlsZQorICBpcyBiZXR0ZXIgcmVmZXJyZWQgdG8gYXMgU01JdjEgb3IgU01JdjIsIGFuZCBpcyBwdXJlbHkKKyAgY29uY2VybmVkIHdpdGggZGVmaW5pbmcgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUKKyAgdmFyaW91cyBtYW5hZ2VtZW50IG9iamVjdHMuICBUaGlzIGlzIChhbG1vc3QpIGNvbXBsZXRlbHkKKyAgdW5yZWxhdGVkIHRvIHRoZSB2ZXJzaW9ucyBvZiB0aGUgcHJvdG9jb2wgb3BlcmF0aW9ucy4KKyAgU28gaXQgaXMgcXVpdGUgcmVhc29uYWJsZSB0byB1c2UgU05NUHYxIHJlcXVlc3RzIG9uCisgIG9iamVjdHMgZGVmaW5lZCB1c2luZyBTTUl2Miwgb3IgU05NUHYyIChvciBTTk1QdjMpCisgIHJlcXVlc3RzIG9uIG9iamVjdHMgZGVmaW5lZCB1c2luZyBTTUl2MS4KKworICAgIFRoZSBvbmUgZXhjZXB0aW9uIGlzIG9iamVjdHMgb2Ygc3ludGF4IENvdW50ZXI2NCwKKyAgd2hpY2ggYXJlIG9ubHkgYWNjZXNzaWJsZSB1c2luZyBTTk1QdjIgb3IgaGlnaGVyLgorICBTTk1QdjEgcmVxdWVzdHMgd2lsbCBlaXRoZXIgdHJlYXQgc3VjaCBvYmplY3RzIGFzIGFuCisgIGVycm9yLCBvciBza2lwIG92ZXIgdGhlbSBjb21wbGV0ZWx5LgorCisgIAorCis8YSBuYW1lPSJXaGVyZV9jYW5fSV9maW5kX21vcmVfaW5mb3JtYXRpb25fYWJvdXRfbmV0d29ya19tYW5hZ2VtZW50XyI+CitXaGVyZSBjYW4gSSBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbmV0d29yayBtYW5hZ2VtZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBzaXRlcyB3aXRoIG5ldHdvcmsgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBvbgorICB0aGUgV29ybGQgV2lkZSBXZWIuIFRocmVlIG9mIHRoZSBtb3N0IHVzZWZ1bCBhcmUKKworICAgICAgaHR0cDovL3d3dy5zbm1wd2ViLm9yZy8KKyAgICAgIGh0dHA6Ly93d3cuc25tcGxpbmsub3JnLworICAgICAgaHR0cDovL3d3dy5taWJkZXBvdC5jb20vCisKKyAgVGhlcmUgYXJlIHR3byBVc2VuZXQgbmV3c2dyb3VwcyB3aGljaCBhcmUgcmVsZXZhbnQuCisJJ2NvbXAuZGNvbS5uZXQtbWFuYWdlbWVudCcKKwkJd2hpY2ggZGlzY3Vzc2VzIGdlbmVyYWwgaXNzdWVzIHJlbGF0aW5nIHRvIG5ldHdvcmsgbWFuYWdlbWVudAorCSdjb21wLnByb3RvY29scy5zbm1wJworCQl3aGljaCBpcyBzcGVjaWZpY2FsbHkgY29uY2VybmVkIHdpdGggdXNlIG9mIFNOTVAgaW4gcGFydGljdWxhcgorCisgICh0aG91Z2ggdGhlcmUgaXMgYSBsYXJnZSBvdmVybGFwIGJldHdlZW4gdGhlc2UgdHdvIGdyb3VwcykuCisgIFRoZSBTTk1QIGdyb3VwIGFsc28gaGFzIGFuIEZBUSAoc3BsaXQgaW50byB0d28gcGFydHMpIHdoaWNoIGRpc2N1c3NlcyBtb3JlCisgIGdlbmVyYWwgaXNzdWVzIHJlbGF0ZWQgdG8gU05NUCwgaW5jbHVkaW5nIGJvb2tzLCBzb2Z0d2FyZSwgb3RoZXIgc2l0ZXMsCisgIGhvdyB0byBnZXQgYW4gZW50ZXJwcmlzZSBudW1iZXIsIGV0YywgZXRjLgorICBUaGlzIGlzIGF2YWlsYWJsZSBmcm9tCisKKyAgICAgIGZ0cDovL3J0Zm0ubWl0LmVkdS9wdWIvdXNlbmV0L2NvbXAucHJvdG9jb2xzLnNubXAvCisKKyAgb3IgdmlhIGFueSBvZiB0aGUgV2ViIHNpdGVzIGFib3ZlLgorCisKKworPGEgbmFtZT0iSXNfdWNkX3NubXBfdGhyZWFkX3NhZmVfIj4KK0lzIHVjZC1zbm1wIHRocmVhZCBzYWZlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBTdHJpY3RseSBzcGVha2luZywgbm8uICBIb3dldmVyLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gdXNlIHRoZQorICBsaWJyYXJ5IGluIGEgdGhyZWFkLXNhZmUgbWFubmVyLiAgVGhpcyBpcyBjb3ZlcmVkIGluIGRldGFpbCBpbiB0aGUgZmlsZQorICBSRUFETUUudGhyZWFkIChzaGlwcGVkIHdpdGggdGhlIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiksIGJ1dCBjYW4gYmUKKyAgc3VtbWFyaXNlZCBhcyBmb2xsb3dzOgorCisgICAgLQlDYWxsICdzbm1wX3Nlc3NfaW5pdCgpJyBwcmlvciB0byBhY3RpdmF0aW5nIGFueSB0aHJlYWRzLgorCVRoaXMgcmVhZHMgaW4gYW5kIHBhcnNlcyBNSUIgaW5mb3JtYXRpb24gKHdoaWNoIGlzbid0IHRocmVhZC1zYWZlKQorCWFzIHdlbGwgYXMgcHJlcGFyaW5nIGEgc2Vzc2lvbiBzdHJ1Y3R1cmUgZm9yIHN1YnNlcXVlbnQgdXNlLgorCisgICAgLQlPcGVuIGFuIFNOTVAgc2Vzc2lvbiB1c2luZyAnc25tcF9zZXNzX29wZW4oKScgd2hpY2ggcmV0dXJucyBhbgorCW9wYXF1ZSBzZXNzaW9uIGhhbmRsZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgaW5kZXBlbmRlbnQgb2YgYW55CisJb3RoZXIgc2Vzc2lvbnMgKHJlZ2FyZGxlc3Mgb2YgdGhyZWFkKS4KKworICAgIC0JUmVzb3VyY2UgbG9ja2luZyBpcyBub3QgaGFuZGxlZCB3aXRoaW4gdGhlIGxpYnJhcnksIGFuZCBpcyB0aGUKKwlyZXNwb25zaWJpbGl0eSBvZiB0aGUgbWFpbiBhcHBsaWNhdGlvbi4KKworICBUaGUgYXBwbGljYXRpb25zIGFuZCB0aGUgYWdlbnQgaGF2ZSBub3QgYmVlbiBkZXNpZ25lZCBmb3IgdGhyZWFkZWQgdXNlLgorCisKKworPGEgbmFtZT0iQVBQTElDQVRJT05TIj4KK0FQUExJQ0FUSU9OUworPT09PT09PT09PT09CisKKzxhIG5hbWU9Ikhvd19kb19JX2FkZF9hX01JQl8iPgorSG93IGRvIEkgYWRkIGEgTUlCPworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBhY3R1YWxseSB0d28gc2VwYXJhdGUgcXVlc3Rpb25zLCBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UKKyAgYXJlIHJlZmVycmluZyB0byB0aGUgdG9vbHMsIG9yIHRoZSBhZ2VudCAob3IgYm90aCkuCisgICAgU2VlIHRoZSBuZXh0IHF1ZXN0aW9uIG9yIHRoZSBuZXh0IHNlY3Rpb24gcmVzcGVjdGl2ZWx5LgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfYWRkX2FfTUlCX3RvX3RoZV90b29sc18iPgorSG93IGRvIEkgYWRkIGEgTUlCIHRvIHRoZSB0b29scz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBGaXJzdGx5LAorCisJY3AgTVktTUlCLnR4dCAvdXNyL2xvY2FsL3NoYXJlL3NubXAvbWlicworCisgICAgICAgICAgb3IKKworICAgICAgICBta2RpciAkSE9NRS8uc25tcAorICAgICAgICBta2RpciAkSE9NRS8uc25tcC9taWJzCisJY3AgTVktTUlCLnR4dCAkSE9NRS8uc25tcC9taWJzCisKKyAgQW5kIHRoZW4sCisKKwlleHBvcnQgTUlCUz0rTVktTUlCCisKKyAgICAgICAgICBvciBhbHRlcm5hdGl2ZWx5OgorCisgICAgICAgIGVjaG8gIm1pYnMgK01ZLU1JQiIgJmd0OyZndDsgJEhPTUUvLnNubXAvc25tcC5jb25mCisKKyAgTm90ZSB0aGF0IHlvdSBuZWVkICpib3RoKiBzdGVwcy4KKyAgVGhlIGZpcnN0IGNvbW1hbmQgY29waWVzIHRoZSBmaWxlIGRlZmluaW5nIHRoZSBuZXcgTUlCIHRvIGEKKyAgZXhwZWN0ZWQgbG9jYXRpb24gZm9yIE1JQiBmaWxlcy4gIFRoaXMgZGVmYXVsdHMgdG8KKyAgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL21pYnMgKG9yIFBSRUZJWC9zaGFyZS9zbm1wL21pYnMgaWYgdGhlIHRoZQorICBzdWl0ZSB3YXMgaW5zdGFsbGVkIGludG8gYSBkaWZmZXJlbnQgYmFzZSBsb2NhdGlvbikuICBTb21lCisgIHJlYWR5LXBhY2thZ2VkIGRpc3RyaWJ1dGlvbnMgKHN1Y2ggYXMgTGludXggUlBNIHBhY2thZ2VzKSBtYXkgbG9vaworICBmb3IgTUlCIGZpbGVzIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCBzdWNoIGFzIC9ldGMvc25tcC9taWJzIC0gcHV0CisgIHRoZSBuZXcgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBpbnN0ZWFkLiAgVGhpcyBtYWtlcyBpdCBhdmFpbGFibGUgZm9yCisgIGV2ZXJ5b25lIG9uIHRoZSBzeXN0ZW0uCisgIFRoZSB0b29scyB3aWxsIGFsc28gbG9vayBmb3IgbWlicyBpbiB5b3VyIHBlcnNvbmFsICRIT01FLy5zbm1wL21pYnMKKyAgZGlyZWN0b3J5LCBidXQgdGhpcyB3aWxsIG9ubHkgd29yayBmb3IgeW91LgorCisgIFRoZSBzZWNvbmQgY29tbWFuZCB0ZWxscyB0aGUgdG9vbHMgdG8gbG9hZCBpbiB0aGlzIG5ldyBNSUIgZmlsZSBhcyB3ZWxsCisgIGFzIHRoZSBkZWZhdWx0IHNldC4gICBOb3RlIHRoYXQgdGhlIHRvb2xzIGRvICpub3QqIGxvYWQgZXZlcnkgTUlCIGZvdW5kCisgIGluIHRoZSBkaXJlY3RvcnkgLSB0aGlzIGlzIHRvIGF2b2lkIHNsb3dpbmcgdGhlbSBkb3duIGV4Y2Vzc2l2ZWx5IHdoZW4KKyAgdGhlcmUgaXMgYSBsYXJnZSBjb2xsZWN0aW9uIG9mIE1JQiBmaWxlcy4gIElmIHlvdSBkbyB3YW50IHRoZSB0b29scyB0bworICBsb2FkIGFsbCB0aGUgTUlCIGZpbGVzLCBzZXQgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgTUlCUyB0byB0aGUgc3BlY2lhbAorICB2YWx1ZSAiQUxMIi4KKworICAgICBOb3RlIHRoYXQgdGhlIHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzIHRoZSBuYW1lIG9mIHRoZSBNSUIgbW9kdWxlLAorICAqbm90KiB0aGUgbmFtZSBvZiB0aGUgTUlCIGZpbGUuICAgVGhlc2UgYXJlIHR5cGljYWxseSB0aGUgc2FtZSAoYXBhcnQKKyAgZnJvbSB0aGUgLnR4dCBzdWZmaXgpLCBidXQgaWYgaW4gZG91YnQsIGNoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKyAgVGhlIHZhbHVlIHRvIHVzZSBpcyB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB3b3JkIERFRklOSVRJT05TCisgIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIE9mIGNvdXJzZSwgaWYgeW91IGxvYWQgJ0FMTCcgbWlicywgdGhlbiB0aGlzCisgIGRpc3RpbmN0aW9uIGlzIGlycmVsZXZhbnQuCisKKyAgICBNb3N0IG9mIHRoZSB0b29scyAoYXBhcnQgZnJvbSAnc25tcHRhYmxlJykgd2lsbCB3b3JrIHF1aXRlIGhhcHBpbHkKKyAgd2l0aG91dCBhbnkgTUlCIGZpbGVzIGF0IGFsbCwgYXMgbG9uZyBhcyB5b3UgYXJlIHByZXBhcmVkIHRvIHdvcmsgd2l0aAorICBudW1lcmljIE9JRHMgdGhyb3VnaG91dC4gIFRoZSBNSUIgZmlsZXMgYXJlIG9ubHkgdXNlZCBmb3IgdHJhbnNsYXRpbmcKKyAgYmV0d2VlbiBudW1lcmljIGFuZCB0ZXh0dWFsIGZvcm1zIGZvciBxdWVyaWVzIGFuZCByZXNwb25zZXMuCisgICAgVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3IgdGhlIGFnZW50IC0gc2VlIHRoZSBBR0VOVCBzZWN0aW9uIGZvciBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iV2h5X2Nhbl90X0lfc2VlX2FueXRoaW5nX2Zyb21fdGhlX2FnZW50XyI+CitXaHkgY2FuJ3QgSSBzZWUgYW55dGhpbmcgZnJvbSB0aGUgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgdHdvIG1haW4gZ2VuZXJhbCBjYXVzZXMgb2YgcHJvYmxlbXMgcmV0cmlldmluZyBpbmZvcm1hdGlvbgorICBmcm9tIHRoZSBhZ2VudC4gICBGaXJzdGx5LCB0aGUgdmFyaWFibGUgKG9yIHZhcmlhYmxlcykgc3BlY2lmaWVkIG1heQorICBub3QgYmUgcmVjb2duaXNlZCBieSB0aGUgdG9vbHMgYXMgdmFsaWQgbmFtZXMuICBJbiB0aGlzIGNhc2UsIHRoZQorICB0b29scyB3aWxsIHR5cGljYWxseSByZWplY3QgdGhlIHJlcXVlc3Qgd2l0aG91dCBldmVyIGNvbnRhY3RpbmcgdGhlCisgIHJlbW90ZSBhZ2VudC4KKworICAgIEFsdGVybmF0aXZlbHksIHRoZSB0b29sIG1heSBiZSBoYXBweSB3aXRoIHRoZSByZXF1ZXN0LCBidXQgdGhlIGFnZW50CisgIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZShzKS4gIEl0IG1heSByZXR1cm4gYW4gZXhwbGljaXQKKyAgZXJyb3IgbWVzc2FnZSBpbnN0ZWFkLCBvciB0aGUgcmVxdWVzdCBtYXkgdGltZSBvdXQgd2l0aG91dCBhbnkgcmVzcG9uc2UKKyAgYmVpbmcgc2VudCBiYWNrIGF0IGFsbC4gIFRoZSBuZXh0IGZldyBlbnRyaWVzIGxvb2sgYXQgdGhlc2UgaW4gbW9yZSBkZXRhaWwuCisKKworCis8YSBuYW1lPSJXaHlfY2FuX3RfSV9zZWVfdmFsdWVzX2luX3RoZV9fSU5TRVJUX0VOVEVSUFJJU0VfSEVSRV9fdHJlZV8iPgorV2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgJmx0O0lOU0VSVCBFTlRFUlBSSVNFIEhFUkUmZ3Q7IHRyZWU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEhhdmluZyBzYWlkIHRoYXQgdGhlcmUgYXJlIHR3byBtYWluIHJlYXNvbnMgZm9yIG5vdCBnZXR0aW5nIGEgcmVzcG9uc2UsCisgIHRoZSBtb3N0IGxpa2VseSBjYXVzZSBvZiB0aGlzIHByb2JsZW0gaXMgYWN0dWFsbHkgc29tZXRoaW5nIGVsc2UgYWdhaW4uCisKKyAgVGhlICdzbm1wd2FsaycgY29tbWFuZCB0YWtlcyBhIHBvaW50IGluIHRoZSBvdmVyYWxsIE1JQiB0cmVlLCBhbmQgdHJpZXMKKyAgdG8gZGlzcGxheSBhbGwgdGhlIHZhbHVlcyB0aGF0IGxpZSB3aXRoaW4gdGhpcyBzdWJ0cmVlLiAgSG93ZXZlciwgaXQKKyAgYWN0dWFsbHkgZG9lcyB0aGlzIGJ5IGlzc3VpbmcgYSBzZXJpZXMgb2YgImdldG5leHQiIHJlcXVlc3RzLCB1bnRpbAorICB0aGUgdmFyaWFibGUgcmV0dXJuZWQgbGllcyBvdXRzaWRlIHRoZSBzdWJ0cmVlIG9mIGludGVyZXN0LiAgSWYgdGhlCisgIHZlcnkgZmlyc3QgcmVxdWVzdCByZXR1cm5zIHN1Y2ggYW4gdW5kZXNpcmVkIHZhbHVlLCB0aGVuIHRoZSBjb21tYW5kCisgIHdpbGwgdGVybWluYXRlLCB3aXRob3V0IGhhdmluZyBkaXNwbGF5ZWQgYW55dGhpbmcgYXQgYWxsLgorCisgICAgSWYgYW4gZXhwaWNpdCBzdGFydGluZyBwb2ludCBpcyBnaXZlbiB0byAnc25tcHdhbGsnLCB0aGVuIGl0IGlzIHJlYXNvbmFibHkKKyAgY2xlYXIgd2hhdCBpcyBoYXBwZW5pbmcsIGFuZCB0aGF0IHRoZXJlIGlzIHNpbXBseSBub3RoaW5nIGluIHRoZSBzdWJ0cmVlCisgIHNwZWNpZmllZC4gIEhvd2V2ZXIsIGlmICdzbm1wd2FsaycgaXMgY2FsbGVkIHdpdGhvdXQgZ2l2aW5nIGFuIGV4cGxpY2l0CisgIHN0YXJ0aW5nIHBvaW50LCB0aGVuIGl0IHdpbGwgZGlzcGxheSB0aGUgY29udGVudHMgb2YgdGhlICdtaWItMicgc3VidHJlZS4KKyAgSXQgd2lsbCBub3QgYXR0ZW1wdCB0byB0cmF2ZXJzZSBhbnkgJ3ByaXZhdGUuZW50ZXJwcmlzZScgc3VidHJlZSwgc3VjaCBhcworICB0aGUgVUNELXNwZWNpZmljIG9iamVjdHMgKGluY2x1ZGluZyBhbnkgbG9jYWwgZXh0ZW5zaW9ucykuCisKKyAgICBUbyB3YWxrIHRoZSB3aG9sZSB0cmVlLCBzcGVjaWZ5IGEgc3RhcnRpbmcgcG9pbnQgb2YgJy5pc28nCisgIFRvIHdhbGsgYSBzcGVjaWZpYyBlbnRlcnByaXNlIHN1YnRyZWUsIHNwZWNpZnkgdGhlIHJvb3Qgb2YgdGhpcyBhcworICB0aGUgc3RhcnRpbmcgcG9pbnQgLSBlLmc6CisKKwlzbm1wd2FsayAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCB1Y2RhdmlzCisgCisgIE9yLCBvZiBjb3Vyc2UsIHlvdSBjYW4gd2FsayBhIHNlbGVjdGVkIHBvcnRpb24gb2YgYW4gZW50ZXJwcmlzZSBzdWJ0cmVlCisgIGJ5IHNwZWNpZnlpbmcgdGhlIGFwcHJvcHJpYXRlIHN0YXJ0aW5nIHBvaW50IC0gZS5nOgorCisJc25tcHdhbGsgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3QgdWNkYXZpcy52ZXJzaW9uCisgIAorICBJZiB5b3Ugc3RpbGwgY2FuJ3Qgc2VlIGFueSBpbmZvcm1hdGlvbiwga2VlcCByZWFkaW5nLiAgVGhlIG5leHQgZmV3CisgIHF1ZXN0aW9ucyB3aWxsIHByb2JhYmx5IGhlbHAgeW91LgorCisKKworPGEgbmFtZT0iUmVxdWVzdHNfYWx3YXlzX3NlZW1fdG9fdGltZW91dF9fYW5kX2Rvbl90X2dpdmVfbWVfYW55dGhpbmdfYmFja19fX1doeV8iPgorUmVxdWVzdHMgYWx3YXlzIHNlZW0gdG8gdGltZW91dCwgYW5kIGRvbid0IGdpdmUgbWUgYW55dGhpbmcgYmFjay4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzIG9mIHRoaXMuCisKKyAgVGhlIG1vc3QgbGlrZWx5IGFyZSB0aGUgYWdlbnQgYWNjZXNzIGNvbnRyb2wgc2V0dGluZ3MgKHdobyBpcyBhbGxvd2VkCisgIGFjY2VzcyBieSB0aGUgYWdlbnQgaXRzZWxmKSwgb3IgZmlyZXdhbGwvcGFja2V0IGZpbHRlcmluZyBzZXR0aW5ncworICAod2hvIGlzIGFsbG93ZWQgYWNjZXNzIGJ5IHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0pLgorCisgIEEgZnVsbGVyIGxpc3Qgb2YgcG9zc2libGUgY2F1c2VzICh3aXRoIGluZGljYXRpb25zIG9mIGhvdyB0byBjaGVjaworICBmb3IgZWFjaCkgaXMgYXMgZm9sbG93czoKKyAgCisJLSBpcyB0aGUgbWFjaGluZSB5b3UgYXJlIHF1ZXJ5aW5nIHVwIGFuZCBydW5uaW5nPworCQkoRG9lcyBpdCByZXNwb25kIHRvICdwaW5nJyBvciBzaW1pbGFyIHJlcXVlc3RzPykKKwktIGlzIHRoZXJlIGFuIFNOTVAgYWdlbnQgcnVubmluZyBvbiBpdD8KKwkJKFJ1biAncHMgLWVmIHwgZ3JlcCBzbm1wJyBvciAnbmV0c3RhdCAtYW4gfCBncmVwIDE2MScpCisJLSBhcmUgdGhlIHJlcXVlc3RzIGFycml2aW5nLCBvciBiZWluZyBibG9ja2VkIChlLmcuIGJ5IGEgZmlyZXdhbGwpPworCQkoUmVzdGFydCB0aGUgYWdlbnQgdXNpbmcgJ3NubXBkIC1mIC1MIC1kJworCQkgYW5kIHNlZSBpZiBpdCBzaG93cyB0aGUgaW5jb21pbmcgcGFja2V0IGR1bXBzKQorCS0gaXMgdGhlIGFnZW50IHNpbXBseSB0YWtpbmcgYSBsb25nIHRpbWUgdG8gcmVzcG9uZD8KKwkJKFRoZSAnc25tcGQgLWYgLUwgLWQnIGNvbW1hbmQgc2hvdWxkIHNob3cgYSBzZXJpZXMgb2YKKyAJCSBpbmNvbWluZyBQRFVzLCBmb2xsb3dlZCBldmVudHVhbGx5IGJ5IHRoZSBvdXRnb2luZyBQRFVzLgorCQkgVHJ5IHRoZSByZXF1ZXN0IGFnYWluIHdpdGggYSBsb25nIHRpbWVvdXQgdmFsdWUsCisJCSBlLmcuICdzbm1wY21kIC10IDEyMCAuLi4uJykKKwktIGRvZXMgdGhlIGFnZW50J3MgY29udHJvbCBzZXR0aW5ncyBhbGxvdyB0aGlzIHJlcXVlc3Q/CisJCShUaGUgJ3NubXBkIC1mIC1MIC1kJyBjb21tYW5kIHdpbGwgc2hvdyBhIHNlcmllcyBvZgorIAkJIGluY29taW5nIFBEVXMgd2l0aCAqbm8qIGNvcnJlc3BvbmRpbmcgb3V0Z29pbmcgUERVcykKKworICBOb3RlIHRoYXQgaWYgdGhlIGFnZW50IGlzIG5vdCBjb25maWd1cmVkIHRvIGFsbG93IGFjY2VzcyBmb3IgYQorICBwYXJ0aWN1bGFyIGNvbW11bml0eSwgdGhlbiB0aGUgU05NUCBzcGVjaWZpY2F0aW9uIGRlY2xhcmVzIHRoYXQgbm8KKyAgZXJyb3IgcmVzcG9uc2Ugc2hvdWxkIGJlIHNlbnQgYXQgYWxsLiAgVGhlIE5ldC1TTk1QIHRvb2xzIHdpbGwgcmV0cnkKKyAgdGhlIHJlcXVlc3QgYSBudW1iZXIgb2YgdGltZXMsIGJlZm9yZSByZXBvcnRpbmcgYSB0aW1lb3V0IGVycm9yLgorCisgICAgSWYgdGhlIGFnZW50IGlzIGNvbmZpZ3VyZWQgdG8gYWxsb3cgcGFydGlhbCBhY2Nlc3MgZm9yIGEgZ2l2ZW4KKyAgY29tbXVuaXR5LCB0aGVuIHJlcXVlc3RzIHRoYXQgZmFsbCBvdXRzaWRlIHRoaXMgYXV0aG9yaXNlZCBhY2Nlc3MKKyAgKndpbGwqIHJlc3VsdCBpbiBhbiBlcnJvciByZXNwb25zZS4KKyAgICAoU05NUCBhZ2VudHMgY2FuIGJlIHZlcnkgZnVzc3kgb3ZlciB3aG8gdGhleSB0YWxrIHRvISkKKworICAgIFNlZSB0aGUgZW50cmllcyBvbiBhY2Nlc3MgY29udHJvbCBpbiB0aGUgQUdFTlQgc2VjdGlvbiBmb3IgaG93IHRvCisgIGNvbmZpZ3VyZSB0aGUgTmV0LVNOTVAgYWdlbnQgdG8gYWxsb3cgc3VpdGFibGUgYWNjZXNzLiAgRm9yIG90aGVyCisgIHZlbmRvcnMnIGFnZW50cywgeW91IHdpbGwgbmVlZCB0byBjb25zdWx0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLgorCisKKworPGEgbmFtZT0iSV9jYW5fc2VlX3RoZV9zeXN0ZW1fZ3JvdXBfX2J1dF9ub3RoaW5nX2Vsc2VfX19XaHlfIj4KK0kgY2FuIHNlZSB0aGUgc3lzdGVtIGdyb3VwLCBidXQgbm90aGluZyBlbHNlLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIHByb2JhYmx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBxdWVzdGlvbiAtIGEgcHJvYmxlbSB3aXRoCisgIHRoZSBhY2Nlc3MgY29uZmlndXJhdGlvbiBvZiB0aGUgYWdlbnQuICBNYW55IHByZS1jb25maWd1cmVkIHN5c3RlbXMKKyAgKHN1Y2ggYXMgbW9zdCBMaW51eCBkaXN0cmlidXRpb25zKSB3aWxsIG9ubHkgYWxsb3cgYWNjZXNzIHRvIHRoZSBzeXN0ZW0KKyAgZ3JvdXAgYnkgZGVmYXVsdCwgYW5kIG5lZWQgdG8gYmUgY29uZmlndXJlZCB0byBlbmFibGUgbW9yZSBnZW5lcmFsIGFjY2Vzcy4KKworICAgIFRoZSBlYXNpZXN0IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gdHJ5IGEgR0VUTkVYVCByZXF1ZXN0LCB0aGF0IG91Z2h0CisgIHRvIHJldHVybiB0aGUgZW50cnkgb2YgaW50ZXJlc3QuCisgIGUuZy4KKwlzbm1wZ2V0bmV4dCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCB1Y2RhdmlzLnZlcnNpb24udmVyc2lvblRhZworICBpbnN0ZWFkIG9mCisJc25tcGdldCAgICAgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3QgdWNkYXZpcy52ZXJzaW9uLnZlcnNpb25UYWcuMAorCisgIElmIHRoZSBhZ2VudCByZXNwb25kcyB3aXRoICJlbmQgb2YgTUlCIiBvciBhIGRpZmZlcmVudCBvYmplY3QsIHRoZW4KKyAgZWl0aGVyIHRoZSBhZ2VudCBkb2Vzbid0IGltcGxlbWVudCB0aGF0IHBhcnRpY3VsYXIgb2JqZWN0IGF0IGFsbCwgb3IKKyAgdGhlIGFjY2VzcyBjb250cm9sIHdvbid0IGFsbG93IHlvdSBhY2Nlc3MgdG8gaXQuCisKKyAgU2VlIHRoZSBlbnRyaWVzIG9uIGFjY2VzcyBjb250cm9sIGluIHRoZSBBR0VOVCBzZWN0aW9uIGZvciBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBOZXQtU05NUCBhZ2VudCwgb3IgY29uc3VsdCB0aGUgYWdlbnQncyBvd24gZG9jdW1lbnRhdGlvbi4KKworCisKKzxhIG5hbWU9IlRoZV9hZ2VudF93b3JrZWRfZm9yX2Ffd2hpbGVfX3RoZW5fc3RvcHBlZF9yZXNwb25kaW5nX19fV2h5XyI+CitUaGUgYWdlbnQgd29ya2VkIGZvciBhIHdoaWxlLCB0aGVuIHN0b3BwZWQgcmVzcG9uZGluZy4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQXNzdW1pbmcgdGhhdCB0aGUgYWdlbnQgaGFzbid0IGNyYXNoZWQgY29tcGxldGVseSwgdGhlIG1vc3QgbGlrZWx5CisgIGV4cGxhbmF0aW9uIGlzIHRoYXQgaXQncyBzaW1wbHkgb3ZlcmxvYWRlZCwgYW5kIGlzIHRha2luZyBsb25nZXIgdG8KKyAgcmVzcG9uZCB0aGFuIHRoZSBxdWVyeWluZyB0b29sIGlzIHdhaXRpbmcuICBTaW5jZSB0aGUgYWdlbnQgaGFuZGxlcworICBlYWNoIHJlcXVlc3QgaW4gdHVybiwgd2l0aG91dCByZWdhcmQgdG8gZWFybGllciBhY3Rpdml0eSwgYW5kIG1vc3QKKyAgdG9vbHMgd2lsbCByZXRyeSBhIHJlcXVlc3Qgd2hlbiBpdCB0aW1lcyBvdXQsIHRoZSBsaXN0IG9mIG91dHN0YW5kaW5nCisgIHJlcXVlc3RzIGNhbiBncm93IGxvbmdlciBhbmQgbG9uZ2VyLgorCisgICAgVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyB0aGUgY2F1c2Ugb3Igbm90LCB0cnkgbGVhdmluZyB0aGUKKyAgYWdlbnQgdW5kaXN0dXJiZWQgZm9yIGEgd2hpbGUsIGFuZCB0aGVuIHByb2JlIGl0IHVzaW5nIGEgbG9uZ2VyCisgIHRpbWVvdXQgKGUuZy4gJy10IDEyMCcpLiAgVGhpcyBzaG91bGQgZ2l2ZSB0aGUgYWdlbnQgdGltZSB0byBoYW5kbGUKKyAgZWFjaCByZXF1ZXN0IGZpcnN0IHRpbWUgcm91bmQsIGFuZCBhdm9pZHMgb3ZlcmxvYWRpbmcgaXQgd2l0aAorICBkdXBsaWNhdGUgcmVxdWVzdHMuCisKKyAgVGhpcyBpcyBub3QgYSBmdWxsIHNvbHV0aW9uLCBvZiBjb3Vyc2UsIGJ1dCBhdCBsZWFzdCBpdCBzaG91bGQKKyAgYWxsb3cgeW91IHRvIGlzb2xhdGUgdGhlIG9mZmVuZGluZyBwb3J0aW9uIG9mIHRoZSB0cmVlLiBUaGUKKyAgZGV2ZWxvcGVycyBtYXkgdGhlbiBiZSBhYmxlIHRvIG9mZmVyIGEgbW9yZSBsb25nLXRlcm0gc29sdXRpb24uCisKKworCis8YSBuYW1lPSJSZXF1ZXN0aW5nX2FuX29iamVjdF9mYWlsc193aXRoX19Vbmtub3duX09iamVjdF9JZGVudGlmaWVyX19fV2h5XyI+CitSZXF1ZXN0aW5nIGFuIG9iamVjdCBmYWlscyB3aXRoICJVbmtub3duIE9iamVjdCBJZGVudGlmaWVyIiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIElmIGEgZ2VuZXJhbCBzbm1wd2FsayBzaG93cyB0aGUgZW50cnksIGJ1dCBhc2tpbmcgZm9yIGl0IG1vcmUKKyAgc3BlY2lmaWNhbGx5IGdpdmVzIGEgInN1Yi1pZGVudGlmaWVyIG5vdCBmb3VuZDoiIG9yICJVbmtub3duIE9iamVjdAorICBJZGVudGlmaWVyIiBlcnJvciwgdGhlbiB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdGhlIHRvb2wsIHJhdGhlciB0aGFuCisgIHRoZSBhZ2VudC4KKworICAgIEZpcnN0bHksIG1ha2Ugc3VyZSB0aGF0IHlvdSdyZSBhc2tpbmcgZm9yIHRoZSBvYmplY3QgYnkgdGhlIHJpZ2h0IG5hbWUuCisgIE9iamVjdCBkZXNjcmlwdG9ycyBhcmUgY2FzZS1zZW5zaXRpdmUsIHNvIGFza2luZyBmb3IgJ3N5c3VwdGltZScgd2lsbAorICBub3QgYmUgcmVjb2duaXNlZCwgYnV0ICdzeXNVcFRpbWUnIHdpbGwuCisKKyAgICBTZWNvbmRseSwgdGhlIG9iamVjdCBtYXkgYmUgZGVmaW5lZCBpbiBhIE1JQiB0aGF0IGhhc24ndCBiZWVuIGxvYWRlZC4KKyAgVHJ5IGxvYWRpbmcgaW4gYWxsIHRoZSBNSUIgZmlsZXM6CisKKwlzbm1wZ2V0IC1tIEFMTCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAorCisgICh0aG91Z2ggaWYgc25tcHdhbGsgdHJhbnNsYXRlcyBpdCBPSywgdGhhdCdzIGxlc3MgbGlrZWx5IHRvIGJlIHRoZSBjYXVzZSkuCisKKyAgICBUaGlyZGx5LCBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZSBVQ0Qgc29mdHdhcmUgZXhwZWN0ZWQgImZ1bGwiIHBhdGhzCisgIGZvciBvYmplY3QgbmFtZXMsIGVpdGhlciBiYXNlZCBhdCB0aGUgcm9vdCBvZiB0aGUgd2hvbGUgTUlCIHRyZWUKKyAgKCIuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzVXBUaW1lIikgb3IgdGhlICdtaWItMicKKyAgc3VidHJlZSAoInN5c3RlbS5zeXNVcFRpbWUiKS4gIFRyeToKKyAgCisJc25tcGdldCAtdjEgLWMgcHVibGljIG15aG9zdCBzeXN0ZW0uc3lzVXBUaW1lLjAKKworICBUaGVzZSBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZSB0b29scyBtYXkgdGFrZSBhIGNvbW1hbmQtbGluZSBvcHRpb24gJy1SJworICBvciAnLUlSJyAoZGVwZW5kaW5nIG9uIHZpbnRhZ2UpIHRvIGludm9rZSB0aGlzICJyYW5kb20tYWNjZXNzIiBtb2RlLgorICBOb3RlIHRoYXQgc25tcHRyYW5zbGF0ZSBzdGlsbCByZXF1aXJlcyAicmFuZG9tLWFjY2VzcyIgdG8gYmUgc3BlY2lmaWVkCisgIGV4cGxpY2l0bHkgLSBhbGwgb3RoZXIgY29tbWFuZCB0b29scyBub3cgdXNlIHRoaXMgbW9kZSBieSBkZWZhdWx0cy4KKworICBBbGwgdmVyc2lvbnMgb2YgdGhlIFVDRCBhbmQgTmV0LVNOTVAgdG9vbHMgYWNjZXB0IHRoZSBzeW50YXgKKworCXNubXBnZXQgLXYxIC1jIHB1YmxpYyBteWhvc3QgUkZDMTIxMy1NSUI6c3lzVXBUaW1lLjAKKworICB0byBkZW5vdGUgYSBwYXJ0aWN1bGFyIG9iamVjdCBpbiBhIHNwZWNpZmljIE1JQiBtb2R1bGUuICBOb3RlIHRoYXQgdGhpcworICB1c2VzIHRoZSBuYW1lIG9mIHRoZSAqbW9kdWxlKiwgbm90IHRoZSBuYW1lIG9mIHRoZSBmaWxlLiAgU2VlIHRoZSBzZWNvbmQKKyAgcXVlc3Rpb24gaW4gdGhpcyBzZWN0aW9uIGZvciB0aGUgZGlzdGluY3Rpb24uCisKKworCis8YSBuYW1lPSJXaHlfZG9fSV9nZXRfX25vU3VjaE5hbWVfX3doZW5fYXNraW5nX2Zvcl9fc3lzVXBUaW1lX19fb3Jfc2ltaWxhcl9fIj4KK1doeSBkbyBJIGdldCAibm9TdWNoTmFtZSIgd2hlbiBhc2tpbmcgZm9yICJzeXNVcFRpbWUiIChvciBzaW1pbGFyKT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgb2YgdGhpcyAoc2NhdHRlcmVkIHRocm91Z2hvdXQKKyAgdGhpcyBGQVEsIHNvIGtlZXAgcmVhZGluZyEpLiAgIEJ1dCBvbmUgb2YgdGhlIG1vc3QgbGlrZWx5IHNuYXJlcyBmb3IKKyAgdGhlIHVud2FyeSBpcyBmb3JnZXR0aW5nIHRoZSBpbnN0YW5jZSBzdWJpZGVudGlmaWVyIGZvciAnbm9uLXRhYmxlJworICBvYmplY3RzLiAgSWYgeW91IHdhbGsgdGhlICdzeXN0ZW0nIHRyZWUsIHlvdSdsbCBub3RpY2UgdGhhdCBhbGwgdGhlCisgIHJlc3VsdHMgKGFwYXJ0IGZyb20gdGhlIHN5c09SVGFibGUpLCBoYXZlIGEgJy4wJyBhdCB0aGUgZW5kIG9mIHRoZSBPSUQuCisgIFRoaXMgaXMgdGhlICJpbnN0YW5jZSBzdWItaWRlbnRpZmllciIgLSB3aGljaCAqbXVzdCogYmUgaW5jbHVkZWQgZm9yCisgIGEgR0VUIHJlcXVlc3QuCisgICAgIENvbXBhcmUgdGhlIGZvbGxvd2luZzoKKworCSQgc25tcGdldCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXNVcFRpbWUKKwlFcnJvciBpbiBwYWNrZXQKKwlSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuCisJVGhpcyBuYW1lIGRvZXNuJ3QgZXhpc3Q6IHN5c3RlbS5zeXNVcFRpbWUKKwkkIHNubXBnZXQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKKwlzeXN0ZW0uc3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICg2OTE4OTI3MSkgOCBkYXlzLCAwOjExOjMyLjcxCisKKyAgVGhpcyBpcyBhIGxpdHRsZSBsZXNzIG9ic2N1cmUgd2hlbiB1c2luZyBTTk1QdjJjIG9yIHYzIHJlcXVlc3RzOgorCisJJCBzbm1wZ2V0IC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzVXBUaW1lCisJc3lzdGVtLnN5c1VwVGltZSA9IE5vIFN1Y2ggSW5zdGFuY2UgY3VycmVudGx5IGV4aXN0cworCisKKworPGEgbmFtZT0iV2h5X2RvX0lfc29tZXRpbWVzX2dldF9fRW5kX29mX01JQl9fd2hlbl93YWxraW5nX2FfdHJlZV9fYW5kX3NvbWV0aW1lc19ub3RfIj4KK1doeSBkbyBJIHNvbWV0aW1lcyBnZXQgIkVuZCBvZiBNSUIiIHdoZW4gd2Fsa2luZyBhIHRyZWUsIGFuZCBzb21ldGltZXMgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGRlcGVuZHMgb24gd2hpY2ggTUlCIG1vZHVsZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgYWdlbnQgeW91IGFyZQorICBxdWVyeWluZyBhbmQgd2hhdCB5b3UncmUgYXNraW5nIGZvci4KKworICBSZWNhbGwgdGhhdCBhIHRyZWUgaXMgd2Fsa2VkIGJ5IHJlcGVhdGVkbHkgYXNraW5nIGZvciAidGhlIG5leHQgZW50cnkiIHVudGlsCisgIGFsbCB0aGUgdmFsdWVzIHVuZGVyIHRoYXQgdHJlZSBoYXZlIGJlZW4gcmV0cmlldmVkLiAgSG93ZXZlciwgdGhlIGFnZW50IGhhcworICBubyBpZGVhIHRoYXQgdGhpcyBpcyB3aGF0J3MgaGFwcGVuaW5nIC0gYWxsIGl0IHNlZXMgaXMgYSByZXF1ZXN0IGZvciAidGhlCisgIG5leHQgZW50cnkgYWZ0ZXIgWCIuCisKKyAgSWYgdGhlIG9iamVjdCBYIGhhcHBlbnMgdG8gYmUgdGhlIGxhc3QgZW50cnkgaW4gYSBzdWItdHJlZSwgdGhlIGFnZW50IHdpbGwKKyAgcHJvdmlkZSB0aGUgbmV4dCBvYmplY3Qgc3VwcG9ydGVkIChhcyByZXF1ZXN0ZWQpIGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZQorICBpbiBhIGRpZmZlcmVudCBzdWJ0cmVlLiAgSXQncyB1cCB0byB0aGUgcXVlcnlpbmcgdG9vbCB0byByZWNvZ25pc2UgdGhhdAorICB0aGlzIGxhc3QgcmVzdWx0IGxpZXMgb3V0c2lkZSB0aGUgYXJlYSBvZiBpbnRlcmVzdCwgYW5kIHNpbXBseSBkaXNjYXJkIGl0LgorCisgIElmIHRoZSBvYmplY3QgWCBoYXBwZW5zIHRvIGJlIHRoZSBsYXN0IGVudHJ5IHN1cHBvcnRlZCBieSB0aGUgYWdlbnQsIGl0CisgIGRvZXNuJ3QgaGF2ZSBhbm90aGVyIG9iamVjdCB0byBwcm92aWRlLCBzbyByZXR1cm5zIGFuICJlbmQgb2YgTUlCIgorICBpbmRpY2F0aW9uLiAgVGhlIE5ldC1TTk1QIHRvb2xzIHJlcG9ydCB0aGlzIHdpdGggdGhlIG1lc3NhZ2UgYWJvdmUuCisKKyAgQnV0IGluIGVpdGhlciBjYXNlLCB0aGUgYWN0dWFsIGluZm9ybWF0aW9uIHByb3ZpZGVkIHdpbGwgYmUgdGhlIHNhbWUuCisKKworCis8YSBuYW1lPSJJX2Nhbm5vdF9zZXRfYW55X3ZhcmlhYmxlc19pbl90aGVfTUlCXyI+CitJIGNhbm5vdCBzZXQgYW55IHZhcmlhYmxlcyBpbiB0aGUgTUlCLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSByZWFzb25zIGZvciB0aGlzOgorCisgIFRoZSBtYWpvcml0eSBvZiBNSUIgb2JqZWN0cyBhcmUgZGVmaW5lZCBhcyAicmVhZC1vbmx5IiBhbmQgaW5oZXJlbnRseQorICBjYW5ub3QgYmUgY2hhbmdlZCB2aWEgU0VUIHJlcXVlc3RzLgorCisgIE9mIHRob3NlIHRoYXQgY2FuIGluIHByaW5jaXBsZSBiZSBjaGFuZ2VkLCBub3QgYWxsIGhhdmUgYmVlbiBpbXBsZW1lbnRlZAorICBhcyBzdWNoIGluIHRoaXMgYWdlbnQuCisKKyAgRXZlbiBpZiBTRVQgc3VwcG9ydCBoYXMgYmVlbiBpbXBsZW1lbnRlZCwgdGhlIGFnZW50IG1heSBub3QgYmUgY29uZmlndXJlZAorICB0byBhbGxvdyB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBvYmplY3QuCisKKyAgVGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIHNoaXBwZWQgd2l0aCB0aGUgYmFzaWMgZGlzdHJpYnV0aW9uIG9ubHkKKyAgYWxsb3dzIHdyaXRlIGFjY2VzcyBmb3IgdGhlIGxvY2FsIGhvc3QgaXRzZWxmIChhbmQgYSBzdWl0YWJsZSBjb21tdW5pdHkKKyAgbmFtZSBtdXN0IGJlIGNvbmZpZ3VyZWQgZmlyc3QpLgorICAgIFJlYWR5LWluc3RhbGxlZCBkaXN0cmlidXRpb25zIChzdWNoIGFzIHRob3NlIHNoaXBwZWQgd2l0aCBMaW51eCkgdGVuZAorICB0byBiZSBjb25maWd1cmVkIHdpdGggcmVhZC1vbmx5IGFjY2VzcyB0byBwYXJ0IG9mIHRoZSBtaWIgdHJlZSAodHlwaWNhbGx5CisgIGp1c3QgdGhlIHN5c3RlbSBncm91cCkgYW5kIG5vIHdyaXRlIGFjY2VzcyBhdCBhbGwuCisKKyAgVG8gY2hhbmdlIHRoaXMsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHVwIHRoZSBhZ2VudCdzIGFjY2VzcyBjb250cm9sCisgIGNvbmZpZ3VyYXRpb24uICBTZWUgdGhlIEFHRU5UIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworICAgIE5vdGUgdGhhdCBuZWl0aGVyIHRoZSBjb21tdW5pdHkgc3RyaW5nICJwdWJsaWMiIG5vciAicHJpdmF0ZSIgY2FuIGJlCisgIHVzZWQgdG8gc2V0IHZhcmlhYmxlcyBpbiBhIHR5cGljYWwgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorCisKKworPGEgbmFtZT0iVmFyaWFibGVzX3NlZW1fdG9fZGlzYXBwZWFyX3doZW5fSV90cnlfdG9fc2V0X3RoZW1fX19XaHlfIj4KK1ZhcmlhYmxlcyBzZWVtIHRvIGRpc2FwcGVhciB3aGVuIEkgdHJ5IHRvIHNldCB0aGVtLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBxdWVzdGlvbiAtIGl0IGp1c3QgaXNuJ3QKKyAgcGFydGljdWxhcmx5IG9idmlvdXMsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIFNOTVB2MS4gIEEgdHlwaWNhbAorICBleGFtcGxlIG9mIHRoaXMgZWZmZWN0IHdvdWxkIGJlCisKKwkkIHNubXBnZXQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c0xvY2F0aW9uLjAKKwlzeXN0ZW0uc3lzTG9jYXRpb24uMCA9IHNvbWV3aGVyZSBuZWFyYnkKKworCSQgc25tcHNldCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzTG9jYXRpb24uMCBzICJyaWdodCBoZXJlIgorCUVycm9yIGluIHBhY2tldC4KKwlSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuCisJVGhpcyBuYW1lIGRvZXNuJ3QgZXhpc3Q6IHN5c3RlbS5zeXNMb2NhdGlvbi4wCisKKyAgVHJ5aW5nIHRoZSBzYW1lIHJlcXVlc3QgdXNpbmcgU05NUHYyIG9yIGFib3ZlIGlzIHNvbWV3aGF0IG1vcmUgaW5mb3JtYXRpdmU6CisKKwkkIHNubXBzZXQgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzTG9jYXRpb24uMCBzICJyaWdodCBoZXJlIgorICAgICAgICBFcnJvciBpbiBwYWNrZXQuCisgICAgICAgIFJlYXNvbjogbm90V3JpdGFibGUKKworICBUaGUgU05NUHYxIGVycm9yICdub1N1Y2hOYW1lJyBhY3R1YWxseSBtZWFuczoKKworCSJZb3UgY2FuJ3QgZG8gdGhhdCB0byB0aGlzIHZhcmlhYmxlIgorCisgIFRoaXMgbWlnaHQgYmUgYmVjYXVzZSB0aGUgdmFyaWFibGUgZG9lc24ndCBleGlzdCwgaXQgZG9lcyBleGlzdCBidXQKKyAgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIGl0IChidXQgc29tZW9uZSBlbHNlIG1heSBkbyksIG9yIGl0IGV4aXN0cworICBidXQgeW91IGNhbid0IHBlcmZvcm0gdGhhdCBwYXJ0aWN1bGFyIG9wZXJhdGlvbiAoaS5lLiBjaGFuZ2luZyBpdCkuCisgICAgU2ltaWxhcmx5LCB0aGUgU05NUHYyIGVycm9yICdub3RXcml0YWJsZScgbWVhbnMgIm5vdCB3cml0YWJsZSBpbgorICB0aGlzIHBhcnRpY3VsYXIgY2FzZSIgcmF0aGVyIHRoYW4gIm5vdCB3cml0YWJsZSB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcyIuCisKKyAgSWYgeW91IGFyZSBzdXJlIHRoYXQgdGhlIG9iamVjdCBpcyB3cml0YWJsZSAoYW5kIGhhcyBiZWVuIGltcGxlbWVudGVkCisgIGFzIHN1Y2gpLCB0aGVuIHlvdSBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGFnZW50IGFjY2VzcyBjb250cm9sLgorICBTZWUgdGhlIEFHRU5UIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworCisKK0kgc3RpbGwgY2FuJ3QgY2hhbmdlIHN5c0xvY2F0aW9uLCB0aG91Z2ggdGhlIGFjY2VzcyBzZXR0aW5ncyBhbGxvdyBpdC4gIFdoeSBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBPbmUgb3RoZXIgcG9zc2liaWxpdHkgZm9yIHRoZSAnc3lzTG9jYXRpb24nIGFuZCAnc3lzQ29udGFjdCcgb2JqZWN0cywKKyAgaXMgdGhhdCB5b3UndmUgZ290IGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhlICdzbm1wZC5jb25mJyBmaWxlIHdoaWNoCisgIGFscmVhZHkgc2V0cyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB0aGVyZS4KKworICAgIEVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIGFnZW50IHdvdWxkIGFsbG93IHlvdSB0byB3cml0ZSB0byB0aGVzZSBvYmplY3RzLAorICBidXQgdGhlIG5ldyB2YWx1ZSB3b3VsZCBiZSBmb3Jnb3R0ZW4gdGhlIG5leHQgdGltZSB0aGUgYWdlbnQgd2FzIHJlLXN0YXJ0ZWQuCisgIE1vcmUgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBhZ2VudCByZWplY3Qgc3VjaCB3cml0ZSByZXF1ZXN0cyBpZiB0aGVyZSdzIGEKKyAgdmFsdWUgc2V0IHZpYSB0aGUgY29uZmlnIGZpbGUuICAgSWYgdGhlcmUgaXNuJ3Qgc3VjaCBhIGNvbmZpZyBzZXR0aW5nLCB0aGVuCisgIHRoZSB3cml0ZSByZXF1ZXN0IHdpbGwgc3VjY2VlZCAoYXNzdW1pbmcgdGhlIGFjY2VzcyBzZXR0aW5ncyBhbGxvdyBpdCksIGFuZAorICB0aGUgbmV3IHZhbHVlIHdpbGwgYmUgcmV0YWluZWQgdGhlIG5leHQgdGltZSB0aGUgYWdlbnQgcmVzdGFydHMuCisKKworCis8YSBuYW1lPSJJX2dldF9hbl9lcnJvcl93aGVuX3RyeWluZ190b19zZXRfYV9uZWdhdGl2ZV92YWx1ZV9fX3doeV8iPgorSSBnZXQgYW4gZXJyb3Igd2hlbiB0cnlpbmcgdG8gc2V0IGEgbmVnYXRpdmUgdmFsdWUgLSB3aHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBhIGRpZmZlcmVudCBwcm9ibGVtLiAgV2hhdCdzIGhhcHBlbmluZyBoZXJlIGlzIHRoYXQgdGhlCisgIHJvdXRpbmUgdGhhdCBwYXJzZXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgJ3NubXBzZXQnIGNvbW1hbmQgaXMgc2VlaW5nCisgIHRoZSAnLScgb2YgdGhlIG5ldyB2YWx1ZSwgYW5kIHRyZWF0aW5nIGl0IGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbi4KKyAgVGhpcyBub3JtYWxseSBnZW5lcmF0ZXMgYW4gZXJyb3IgKHNpbmNlIGRpZ2l0cyBwcm9iYWJseSBhcmVuJ3QgdmFsaWQKKyAgY29tbWFuZCBsaW5lIG9wdGlvbikuCisKKyAgICBUaGUgZWFzaWVzdCB3YXkgdG8gc29sdmUgdGhpcyBpcyBpbmNsdWRlIHRoZSAiZW5kLW9mLW9wdGlvbiIKKyAgaW5kaWNhdG9yICctLScgaW4gdGhlIGNvbW1hbmQgbGluZSwgc29tZXdoZXJlIGJlZm9yZSB0aGUgbmV3IHZhbHVlCisgIChidXQgYWZ0ZXIgYWxsIG9mIHRoZSBvcHRpb25zLCBvYnZpb3VzbHkpLiAgRm9yIGV4YW1wbGU6CisKKwlzbm1wc2V0IC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgLS0gdmVyc2lvblJlc3RhcnRBZ2VudC4wIGkgLTEKKworICAoVGhpcyB3aWxsIGFsc28gZmFpbCwgc2luY2UgLTEgaXNuJ3QgYW4gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhpcworICBvYmplY3QsIGJ1dCBpdCB3aWxsIGJlIHJlamVjdGVkIGJ5IHRoZSBhZ2VudCwgcmF0aGVyIHRoYW4gY29uZnVzaW5nCisgIHRoZSBzbm1wc2V0IGNvbW1hbmQhKQorCisKKworPGEgbmFtZT0iSV9nZXRfYW5fZXJyb3Jfd2hlbl90cnlpbmdfdG9fZ2V0X2Ffc3RyaW5nX2luZGV4ZWRfdGFibGVfdmFsdWVfX193aHlfIj4KK0kgZ2V0IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBhIHN0cmluZy1pbmRleGVkIHRhYmxlIHZhbHVlIC0gd2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIHRoZSBzaGVsbCBzd2FsbG93aW5nIHRoZSBxdW90ZXMsIGJlZm9yZQorICB0aGV5IGV2ZXIgZ2V0IHRvIHRoZSBTTk1QIGNvbW1hbmQncyBPSUQgcGFyc2VyLiAgVHJ5IGVzY2FwaW5nIHRoZW06CisKKwlzbm1wZ2V0IC4uLi4uICAgdmFjbVNlY3VyaXR5TW9kZWwuMC5cIndlc1wiCisgIG9yCXNubXBnZXQgLi4uLi4gICd2YWNtU2VjdXJpdHlNb2RlbC4wLiJ3ZXMiJworCisKKyAgCis8YSBuYW1lPSJIb3dfZG9fSV9zZW5kX3RyYXBzX2FuZF9ub3RpZmljYXRpb25zXyI+CitIb3cgZG8gSSBzZW5kIHRyYXBzIGFuZCBub3RpZmljYXRpb25zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUcmFwcyBhbmQgbm90aWZpY2F0aW9ucyBjYW4gYmUgc2VudCB1c2luZyB0aGUgY29tbWFuZCAnc25tcHRyYXAnLgorICBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGdlbmVyYXRlIHRoZSBnZW5lcmljIHRyYXAgJ2NvbGRTdGFydCcgYW5kIGEKKyAgKGR1bW15KSBlbnRlcnByaXNlIHNwZWNpZmljIHRyYXAgJzk5JyByZXNwZWN0aXZlbHk6CisKKwlzbm1wdHJhcCAtdiAxIC1jIHB1YmxpYyBsb2NhbGhvc3QgIiIgIiIgMCAwICAiIgorCXNubXB0cmFwIC12IDEgLWMgcHVibGljIGxvY2FsaG9zdCAiIiAiIiA2IDk5ICIiCisgIAorICBUaGUgZW1wdHkgcGFyYW1ldGVycyAiIiB3aWxsIHVzZSBzdWl0YWJsZSBkZWZhdWx0cyBmb3IgdGhlIHJlbGV2YW50IAorICB2YWx1ZXMgKGVudGVycHJpc2UgT0lELCBhZGRyZXNzIG9mIHNlbmRlciBhbmQgY3VycmVudCBzeXN1cHRpbWUpLgorCisgICAgQW4gU05NUHYyIG9yIFNOTVB2MyBub3RpZmljYXRpb24gKGVpdGhlciB0cmFwIG9yIGluZm9ybSkgdGFrZXMKKyAgdGhlIE9JRCBvZiB0aGUgdHJhcCB0byBzZW5kOgorCisJc25tcHRyYXAgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCAiIiBVQ0QtU05NUC1NSUI6OnVjZFN0YXJ0CisJc25tcHRyYXAgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCAiIiAuMS4zLjYuMS40LjEuMjAyMS4yNTEuMQorCisgIChUaGVzZSB0d28gYXJlIGVxdWl2YWxlbnQgd2F5cyBvZiBzcGVjaWZ5aW5nIHRoZSBzYW1lIHRyYXApLgorCisgIEFueSBvZiB0aGVzZSBjb21tYW5kcyBjYW4gYmUgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgdmFyYmluZHMsCisgIHVzaW5nIHRoZSBzYW1lIChPSUQvdHlwZS92YWx1ZSkgc3ludGF4IGFzIGZvciAnc25tcHNldCc6CisKKwlzbm1wdHJhcCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0ICIiIHVjZFN0YXJ0IHN5c0NvbnRhY3QuMCBzICJEYXZlIgorCisgIEdlbmVyYXRpbmcgdHJhcHMgZnJvbSB3aXRoaW4gdGhlIGFnZW50IGlzIGNvdmVyZWQgaW4gdGhlIEFHRU5UIGFuZAorICBDT0RJTkcgc2VjdGlvbnMuCisKKyAgWW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIHNubXB0cmFwIHR1dG9yaWFsIGF0CisJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS9jb21tYW5kcy9zbm1wdHJhcC5odG1sCisgIHdoaWNoIHdpbGwgaGVscCB5b3UgdW5kZXJzdGFuZCBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIGtub3cgYWJvdXQgdHJhcHMuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9oYW5kbGVfdHJhcHNfYW5kX25vdGlmaWNhdGlvbnNfIj4KK0hvdyBkbyBJIGhhbmRsZSB0cmFwcyBhbmQgbm90aWZpY2F0aW9ucz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSGFuZGxpbmcgcmVjZWl2ZWQgdHJhcHMgaXMgZG9uZSB1c2luZyB0aGUgdG9vbCAnc25tcHRyYXBkJy4KKyAgVGhpcyBjYW4gbG9nIHRoZXNlIHRyYXBzIHZpYSB0aGUgc3lzbG9nIG1lY2hhbmlzbToKKworCXNubXB0cmFwZCAtcyAtbDcJKGxvZyB0byAnTE9DQUw3JykKKworICBwcmludGVkIHRvIHN0YW5kYXJkIG91dHB1dAorCisJc25tcHRyYXBkIC1mIC1QCisKKyAgb3IgcGFzcyB0aGVtIHRvIGFuIGV4dGVybmFsIGNvbW1hbmQuICBUaGlzIGxhc3QgYXBwcm9hY2ggdXNlcworICBhICd0cmFwaGFuZGxlJyBkaXJlY3RpdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAnc25tcHRyYXBkLmNvbmYnLgorICBBIHR5cGljYWwgZmlsZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisJdHJhcGhhbmRsZSAuMS4zLjYuMS42LjMuMS41LjEgICAgICAgcGFnZV9tZSB1cAorCXRyYXBoYW5kbGUgLjEuMy42LjEuNC4xLjIwMjEuMjUxLjEgIHBhZ2VfbWUgdXAKKwl0cmFwaGFuZGxlIC4xLjMuNi4xLjQuMS4yMDIxLjI1MS4yICBwYWdlX21lIGRvd24KKwl0cmFwaGFuZGxlIGRlZmF1bHQgICAgICAgICAgICAgICAgICBsb2dfaXQKKworICB3aGVyZSAncGFnZV9tZScgYW5kICdsb2dfaXQnIGFyZSB0aGUgY29tbWFuZCB0byBiZSBydW4uICAoWW91IHByb2JhYmx5CisgIG5lZWQgdG8gc3BlY2lmeSBmdWxsIHBhdGhuYW1lcywgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbW1hbmRzIHdpbGwgYmUKKyAgZm91bmQuICBUaGV5J3JlIGp1c3Qgc2hvcnQgaGVyZSBmb3IgcmVhZGFiaWxpdHkpLgorCisgIE5vdGUgdGhhdCB0aGUgZmlyc3QgZW50cnkgdXNlcyB0aGUgT0lEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFNOTVB2MQorICAnY29sZFN0YXJ0JyB0cmFwLiAgU2VlIHRoZSBjby1leGlzdGVuY2UgUkZDIChSRkMgMjU3NikgZm9yIGRldGFpbHMKKyAgb2YgbWFwcGluZyBTTk1QdjEgdHJhcHMgdG8gU05NUHYyIE9JRHMuCisKKyAgVGhlcmUncyBhIHR1dG9yaWFsIHdpdGggbW9yZSBkZXRhaWxzIG9uIHRoZSB3ZWIgc2l0ZSBhdAorCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAuaHRtbAorICAKKworCis8YSBuYW1lPSJNeV90cmFwaGFuZGxlcl9zY3JpcHRfZG9lc25fdF93b3JrX3doZW5fcnVuX2xpa2VfdGhpc19fX3doeV9ub3RfIj4KK015IHRyYXBoYW5kbGVyIHNjcmlwdCBkb2Vzbid0IHdvcmsgd2hlbiBydW4gbGlrZSB0aGlzIC0gd2h5IG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSWYgYSB0cmFwaGFuZGxlciBzY3JpcHQgd29ya3MgZmluZSB3aGVuIHJ1biBtYW51YWxseSBmcm9tIHRoZQorICBjb21tYW5kIGxpbmUsIGJ1dCBnZW5lcmF0ZXMgYW4gZXJyb3Igd2hlbiB0cmlnZ2VyZWQgYnkgYW4gaW5jb21pbmcKKyAgbm90aWZpY2F0aW9uLCB0aGVuIHRoaXMgaXMgcHJvYmFibHkgZG93biB0byBvbmUgb2YgdHdvIGxpa2VseSBjYXVzZXMuCisKKyAgICBGaXJzdGx5LCB0aGUgaW50ZXJhY3RpdmUgc2hlbGwgZW52aXJvbm1lbnQgbWF5IG5vdCBiZSBwcmVjaXNlbHkKKyAgdGhlIHNhbWUgYXMgdGhhdCBmb3IgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgdGhlIHNubXB0cmFwZCBkYWVtb24uCisgIEluIHBhcnRpY3VsYXIsIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB0aGUgUEFUSCBlbnZpcm9ubWVudGFsCisgIHZhcmlhYmxlIG1heSBub3QgaW5jbHVkZSBhbGwgdGhlIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdGhhdCBhcmUKKyAgY29tbW9ubHkgc2V0IHVwIGZvciBhIHBlcnNvbmFsIGxvZ2luIGNvbmZpZ3VyYXRpb24uICBUbyBhdm9pZCB0aGlzCisgIHByb2JsZW0gKHBhcnRpY3VsYXJseSBmb3IgdHJhcGhhbmRsZXIgc2hlbGwgc2NyaXB0cyksIGl0J3Mgd29ydGgKKyAgZ2l2aW5nIHRoZSBmdWxsIHBhdGggdG8gYWxsIHByb2dyYW1zIHVzZWQgd2l0aGluIHRoZSBzY3JpcHQuCisKKyAgICBTZWNvbmRseSwgdGhlIHNubXB0cmFwZCBkYWVtb24gbWF5IG5vdCBhbHdheXMgcmVjb2duaXNlIHRoZQorICBhcHByb3ByaWF0ZSBpbnRlcnByZXRlciB0byB1c2UgZm9yIGEgcGFydGljdWxhciB0cmFwIGhhbmRsZXIuCisgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoaXMgaW50ZXJwcmV0ZXIKKyAgZXhwbGljaXRseSBhcyBwYXJ0IG9mIHRoZSB0cmFwIGhhbmRsZSBkaXJlY3RpdmU6CisKKwl0cmFwaGFuZGxlIGRlZmF1bHQgL3Vzci9iaW4vcGVybCAvdXNyL2xvY2FsL2Jpbi9sb2dfaXQKKworICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCBpdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgeW91J2xsIGFsc28KKyAgbmVlZCB0byBnaXZlIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRyYXBoYW5kbGUgc2NyaXB0IChhcyBzaG93bikKKworCisKKzxhIG5hbWU9IlRoZV91Y2RTaHV0ZG93bl90cmFwX09JRF9yZWNlaXZlZF9ieV9teV9tYW5hZ2VyX2lzX3dyb25nX19XaHlfIj4KK1RoZSB1Y2RTaHV0ZG93biB0cmFwIE9JRCByZWNlaXZlZCBieSBteSBtYW5hZ2VyIGlzIHdyb25nLiBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIGR1ZSB0byB0aGUgd2F5IHRoYXQgdHJhcHMgYXJlIGNvbnZlcnRlZCBiZXR3ZWVuCisgIFNOTVB2MSBhbmQgU05NUHYyIGZvcm1hdHMuICBUaGUgYWxnb3JpdGhtIHVzZWQgZm9yIGNvbnZlcnRpbmcKKyAgZnJvbSBhbiBTTk1QdjEgZW50ZXJwcmlzZS1zcGVjaWZpYyB0cmFwIG51bWJlciwgdG8gYW4gU05NUHYyCisgIHRyYXAgT0lEIHJlc3VsdHMgaW4gYSBwZW51bHRpbWF0ZSAnMCcgc3ViaWRlbnRpZmllciwgYmVmb3JlCisgIHRoZSB0cmFwIG51bWJlciBpdHNlbGYuICBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgdHJhcCBvYmplY3RzCisgIGluIHRoZSBVQ0QtU05NUC1NSUIgZmlsZSBkb2VzIG5vdCBpbmNsdWRlIHRoaXMgc3ViaWRlbnRpZmllci4KKworICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSBpbnRlbnRpb24gaXMgdG8gZGVmaW5lIGEgbmV3IHNldCBvZiBNSUIKKyAgb2JqZWN0cywgdW5kZXIgdGhlICduZXQtc25tcCcgZW50ZXJwcmlzZSB0cmVlLiAgVGhpcyB3aWxsCisgIGluY2x1ZGUgbmV3IHRyYXAgT0lEcywgd2hpY2ggd2lsbCBiZSBkZXNpZ25lZCBzdWNoIHRoYXQKKyAgdGhpcyBwcm9ibGVtIGRvZXMgbm90IGFyaXNlIGluIHRoZSBmdXR1cmUuCisKKworCis8YSBuYW1lPSJXaHlfZG9lc19zbm1wdHJhcGRfY29tcGxhaW5fYWJvdXRfQWdlbnRYXyI+CitXaHkgZG9lcyBzbm1wdHJhcGQgY29tcGxhaW4gYWJvdXQgQWdlbnRYPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgU3RhcnRpbmcgZnJvbSB0aGUgdjUgcmVsZWFzZSwgdGhlIHRyYXAgaGFuZGxpbmcgZGFlbW9uIGhhcworICBpbXBsZW1lbnRlZCB0aGUgbm90aWZpY2F0aW9uIGxvZ2dpbmcgYXNwZWN0cyBvZiB0aGUgTk9USUZJQ0FUSU9OLU1JQgorICAoUkZDIDMwMTQpLiAgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSB0cmFwIGhhbmRsZXIgZGFlbW9uIHJlZ2lzdGVyaW5nCisgIGFzIGFuIEFnZW50WCBzdWJhZ2VudCwgdG8gc3VwcGx5IHRoaXMgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uCisKKyAgICBJZiB0aGVyZSBpcyBubyBBZ2VudFggbWFzdGVyIGFnZW50IGF2YWlsYWJsZSwgdGhpcyByZWdpc3RyYXRpb24KKyAgZmFpbHMsIGdlbmVyYXRpbmcgdGhlIHdhcm5pbmcgYWJvdXQgImZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBhZ2VudHgKKyAgbWFzdGVyIi4gIFRoaXMgd2FybmluZyBvbmx5IGFwcGVhcnMgYmV0d2VlbiB2ZXJzaW9uIDUuMCBhbmQgNS4wLjQKKyAgKGluIDUuMC40IGFuZCBhZnRlciB0aGUgd2FybmluZyB3YXMgc2lsZW5jZWQpLiAgVGhpcyBmYWlsdXJlIGRvZXMKKyAgbm90IGFmZmVjdCB0aGUgbWFpbiBvcGVyYXRpb24gb2YgdGhlIHRyYXAgaGFuZGxlci4gIEl0IHNpbXBseSBtZWFucworICB0aGF0IHRoZSBuc21Mb2cgaW5mb3JtYXRpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGZvciBxdWVyeSB2aWEgU05NUC4KKworICAgIEJhc2ljYWxseSwgdGhpcyBpcyBhIHdhcm5pbmcgdGhhdCBjYW4gc2FmZWx5IGJlIGlnbm9yZWQuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV91c2VfU05NUHZfXyI+CitIb3cgZG8gSSB1c2UgU05NUHYzPworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHNpbXBsZXN0IGZvcm0gb2YgU05NUHYzIHJlcXVlc3QgKHVuYXV0aGVudGljYXRlZCwgdW5lbmNyeXB0ZWQpCisgIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlOgorCisJc25tcGdldCAtdiAzIC1sIG5vQXV0aE5vUHJpdiBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKKworICAgIEFuIGF1dGhlbnRpY2F0ZWQgcmVxdWVzdCB3b3VsZCBzcGVjaWZ5IGEgdXNlcm5hbWUgYW5kIHBhc3MgcGhyYXNlOgorCisJc25tcGdldCAtdiAzIC1sIGF1dGhOb1ByaXYgLXUgZGF2ZSAtQSAiT3BlbiB0aGUgRG9vciIKKwkJCQlsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKKworICAgIEEgZnVsbHkgc2VjdXJlIHJlcXVlc3Qgd291bGQgYWxzbyBzcGVjaWZ5IHRoZSBwcml2YWN5IHBhc3MgcGhyYXNlOgorCisJc25tcGdldCAtdiAzIC1sIGF1dGhQcml2IC11IGRhdmUgLUEgIk9wZW4gdGhlIERvb3IiCisJCQktWCAiQmV0IHlvdSBjYW4ndCBzZWUgbWUiICBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKKworICBJbiBwcmFjdGlzZSwgbW9zdCBvZiB0aGVzZSB3b3VsZCBwcm9iYWJseSBiZSBzZXQgdmlhIGNvbmZpZ3VyYXRpb24KKyAgZGlyZWN0aXZlcyBpbiBhIHBlcnNvbmFsICRIT01FLy5zbm1wL3NubXAuY29uZiBmaWxlIChub3RlLCAqbm90KiB0aGUKKyAgYWdlbnQncyBzbm1wZC5jb25mIGZpbGUpLiAgVGhlIGVxdWl2YWxlbnQgc2V0dGluZ3MgZm9yIHRoZSB0aGlyZAorICBleGFtcGxlIHdvdWxkIGJlOgorCisJZGVmU2VjdXJpdHlOYW1lCQlkYXZlCisJZGVmU2VjdXJpdHlMZXZlbAlhdXRoUHJpdgorCWRlZkF1dGhQYXNzcGhyYXNlCSJPcGVuIHRoZSBEb29yIgorCWRlZlByaXZQYXNzcGhyYXNlCSJCZXQgeW91IGNhbid0IHNlZSBtZSIKKworICBJZiB0aGUgQXV0aFBhc3NwaHJhc2UgYW5kIHRoZSBQcml2UGFzc3BocmFzZSBhcmUgdGhlIHNhbWUsIHRoZW4geW91CisgIGNhbiB1c2UgdGhlIHNldHRpbmcKKwkJZGVmUGFzc3BocmFzZQkiT3BlbiB0aGUgRG9vciBhbmQgc2VlIG1lIgorCQkJCQkJCWluc3RlYWQKKworICBGb3IgaG93IHRvIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gcmVzcG9uZCB0byBTTk1QdjMgcmVxdWVzdHMsIHNlZQorICB0aGUgQUdFTlQgc2VjdGlvbi4KKyAKKworCis8YSBuYW1lPSJIb3dfYmlnX2Nhbl9hbl9TTk1QX3JlcXVlc3RfX29yX3JlcGx5X19iZV8iPgorSG93IGJpZyBjYW4gYW4gU05NUCByZXF1ZXN0IChvciByZXBseSkgYmU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHByb3RvY29sIGRlZmluaXRpb24gc3BlY2lmaWVzIGEgIm1pbmltdW0gbWF4aW11bSIgcGFja2V0IHNpemUKKyAgKDQ4NCBieXRlcyBmb3IgVURQKSwgd2hpY2ggYWxsIHN5c3RlbXMgbXVzdCBzdXBwb3J0LCBidXQgZG9lcyBub3QKKyAgYXR0ZW1wdCB0byBkZWZpbmUgYW4gdXBwZXIgYm91bmQgZm9yIHRoaXMgbWF4aW11bSBzaXplLiAgVGhpcyBpcyBsZWZ0CisgIHRvIGVhY2ggaW5kaXZpZHVhbCBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoZSBVQ0Qgc29mdHdhcmUgdXNlcyBhIGZpeGVkIHNpemUgYnVmZmVyIG9mIDE0NzIgYnl0ZXMgdG8gaG9sZCB0aGUKKyAgZW5jb2RlZCBwYWNrZXQsIHNvIGFsbCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIG11c3QgZml0IHdpdGhpbiB0aGlzLgorICBVbmZvcnR1bmF0ZWx5LCBpdCdzIG5vdCBwb3NzaWJsZSB0byBwcmVkaWN0IGhvdyBtYW55IHZhcmJpbmRzIHRoaXMKKyAgY29ycmVzcG9uZHMgdG8sIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlIHR5cGUgYW5kIGFjdHVhbCB2YWx1ZXMgYmVpbmcKKyAgc2VudCwgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBPSURzLgorCisgICAgQXMgYSBydWxlIG9mIHRodW1iLCBzZW5kaW5nIDQwMCBpbnRlZ2VyLXZhbHVlZCB2YXJiaW5kcyBzZWVtcyB0bworICB3b3JrIE9LLCB3aGlsZSAzMDAgc3RyaW5nLXZhbHVlZCB2YXJiaW5kcyB0cmlnZ2VycyBhbiBvdmVycnVuLgorCisgICAgVGhlIE5ldC1TTk1QIHJlbGVhc2VzIGhhbmRsZSBwYWNrZXQgYnVmZmVycyByYXRoZXIgZGlmZmVyZW50bHksCisgIGFuZCBhcmUgbm90IHN1YmplY3QgdG8gdGhlIHNhbWUgZml4ZWQgcmVzdHJpY3Rpb25zLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX21vbml0b3JfbXlfc3lzdGVtc19fZGlza19fbWVtb3J5X19ldGNfXyI+CitIb3cgY2FuIEkgbW9uaXRvciBteSBzeXN0ZW1zIChkaXNrLCBtZW1vcnksIGV0Yyk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEluIGdlbmVyYWwsIHRoZSBOZXQtU05NUCBzdWl0ZSBjb25zaXN0cyBvZiByZWxhdGl2ZWx5IGxvdy1sZXZlbAorICB0b29scywgYW5kIHRoZXJlIGlzIG5vdGhpbmcgaW5jbHVkZWQgdGhhdCBpcyBkZXNpZ25lZCBmb3IgaGlnaC1sZXZlbCwKKyAgbG9uZy10ZXJtIG1vbml0b3Jpbmcgb2YgdHJlbmRzIGluIG5ldHdvcmsgdHJhZmZpYywgZGlzayBvciBtZW1vcnkKKyAgdXNhZ2UsIGV0Yy4KKworICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwYWNrYWdlcyBhdmFpbGFibGUgdGhhdCBhcmUgZGVzaWduZWQgZm9yIHRoaXMKKyAgcHVycG9zZS4gIFR3byBvZiB0aGUgbW9zdCB3aWRlbHkgdXNlZCBhcmUgTVJURyAoaHR0cDovL3d3dy5tcnRnLm9yZy8pCisgIGFuZCBDcmlja2V0IChodHRwOi8vY3JpY2tldC5zb3VyY2Vmb3JnZS5uZXQvKS4gIFRoZXJlIGFyZSBkZXRhaWxzIG9mCisgIGhvdyB0byBzZXQgdXAgQ3JpY2tldCB0byBtb25pdG9yIHNvbWUgb2YgdGhlIFVDRCBleHRlbnNpb25zIGF0CisgIGh0dHA6Ly93d3cuYWZuLm9yZy9+amFtL3NvZnR3YXJlL2NyaWNrZXQvCisKKyAgICAgV2UgaGF2ZSBhbHNvIHNldCB1cCBhIHBhZ2UgdGhhdCBkZXNjcmliZXMgaW4gZGV0YWlsIGhvdyBNUlRHCisgIGNhbiBiZSBzZXQgdXAgdG8gbW9uaXRvciBkaXNrLCBtZW1vcnkgYW5kIGNwdSBhY3Rpdml0eSBhdAorICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L21ydGcvaW5kZXguaHRtbAorCisgICAgVGhlcmUgaXMgYWxzbyBhIHdlYi1iYXNlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc3lzdGVtICJOZXQtUG9saWN5IiwKKyAgYmFzZWQgdXBvbiBTTk1QLiAgVGhpcyBpcyBub3Qgc3RyaWN0bHkgY29ubmVjdGVkIHRvIHRoZSBOZXQtU05NUCBwcm9qZWN0LAorICBidXQgYSBudW1iZXIgb2YgdGhlIGNvcmUgZGV2ZWxvcGVycyBhcmUgYWxzbyBpbnZvbHZlZCB3aXRoIHRoYXQgc3lzdGVtLgorICBTZWUgaHR0cDovL25ldC1wb2xpY3kuc291cmNlZm9yZ2UubmV0IGZvciBtb3JlIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJBcHBsaWNhdGlvbnNfY29tcGxhaW5fYWJvdXRfZW50cmllc19pbl95b3VyX2V4YW1wbGVfX3NubXBfY29uZl9fZmlsZV9fX1doeV8iPgorQXBwbGljYXRpb25zIGNvbXBsYWluIGFib3V0IGVudHJpZXMgaW4geW91ciBleGFtcGxlICdzbm1wLmNvbmYnIGZpbGUuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlICdFWEFNUExFLmNvbmYnIGlzIGRlc2lnbmVkIGFzIGEgY29uZmlnCisgIGZvciB0aGUgYWdlbnQsIGFuZCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzICdzbm1wZC5jb25mJyAobm90ZSB0aGUgJ2QnKS4KKyAgVGhlIGZpbGUgJ3NubXAuY29uZicgaXMgaW50ZW5kZWQgZm9yIGdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLAorICBhcHBsaWNhYmxlIHRvIGFsbCBhcHBsaWNhdGlvbnMgKHZpYSB0aGUgU05NUCBsaWJyYXJ5KS4KKyAgICBSZW5hbWUgKG9yIG1lcmdlKSB0aGUgJ3NubXAuY29uZicgZmlsZSB0byAnc25tcGQuY29uZicsIGFuZCB0aGlzIHNob3VsZAorICBmaXggdGhlIHByb2JsZW0uCisgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGV4YW1wbGUgc25tcC5jb25mIHNoaXBwZWQgd2l0aCB0aGUgc3RhbmRhcmQKKyAgZGlzdHJpYnV0aW9uLgorCisKKworPGEgbmFtZT0iT0tfX3doYXRfc2hvdWxkX0lfcHV0X2luX3NubXBfY29uZl8iPgorT0ssIHdoYXQgc2hvdWxkIEkgcHV0IGluIHNubXAuY29uZj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgdXNlZCB0byBzZXQgY29tbW9uIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBtb3N0IG9mIHRoZQorICBhcHBsaWNhdGlvbnMsIHRvIGF2b2lkIGhhdmluZyB0byBzcGVjaWZ5IHRoZW0gZXZlcnkgdGltZS4gIEV4YW1wbGVzCisgIGluY2x1ZGUgdGhlIFNOTVB2MyBzZXR0aW5ncyBtZW50aW9uZWQgYWJvdmUsIGRlZmF1bHRzIGZvciB3aGljaCBNSUJzCisgIHRvIGxvYWQgYW5kIHdoZXJlIGZyb20sIGFuZCB0aGUgZGVmYXVsdCBTTk1QIHZlcnNpb24sIHBvcnQgYW5kCisgIChpZiBhcHByb3ByaWF0ZSkgdGhlIGNvbW11bml0eSBzdHJpbmcgdG8gdXNlLgorCisgICAgU29tZSBvZiB0aGVzZSAoc3VjaCBhcyB0aGUgTUlCIGZpbGUgbG9jYXRpb24pLCBtaWdodCBiZWxvbmcgaW4gYQorICBzaGFyZWQgc25tcC5jb25mIGZpbGUgKHR5cGljYWxseSAvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcC5jb25mIG9yCisgIC9ldGMvc25tcC9zbm1wLmNvbmYpIHRvIGFwcGx5IHRvIGFsbCB1c2VycyBvZiB0aGUgc3lzdGVtLiAgT3RoZXJzCisgIChwYXJ0aWN1bGFybHkgdGhlIFNOTVB2MyBzZWN1cml0eSBzZXR0aW5ncyksIGFyZSBtb3JlIGxpa2VseSB0byByZWZlcgorICB0byBhIHBhcnRpY3VsYXIgdXNlciwgYW5kIHNob3VsZCBnbyBpbiBhIHBlcnNvbmFsIHNubXAuY29uZiBmaWxlCisgICh0eXBpY2FsbHkgJEhPTUUvLnNubXAvc25tcC5jb25mKS4KKworICAgIE5vdGUgdGhhdCB0aGUgTmV0LVNOTVAgcGFja2FnZSBkb2VzIG5vdCBjb21lIHdpdGggYW4gZXhhbXBsZSBzbm1wLmNvbmYKKyAgZmlsZS4gIFNlZSAnc25tcGdldCAtSCcgYW5kL29yIHRoZSBzbm1wLmNvbmYoNSkgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlICJzbm1wY29uZiIgY29tbWFuZCB0byBoZWxwIHlvdSBnZW5lcmF0ZSB5b3VyCisgIHNubXAuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgKGp1c3QgcnVuIGl0IGFuZCBhbnN3ZXIgaXRzIHF1ZXN0aW9ucykuCisKKworCis8YSBuYW1lPSJQRVJMIj4KK1BFUkwKKz09PT0KKworPGEgbmFtZT0iV2hlcmVfY2FuX0lfZ2V0X3RoZV9wZXJsX1NOTVBfcGFja2FnZV8iPgorV2hlcmUgY2FuIEkgZ2V0IHRoZSBwZXJsIFNOTVAgcGFja2FnZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBKb2UgTWFyem90J3MgZXhjZWxsZW50IHBlcmwgU05NUCBtb2R1bGUsIHdoaWNoIHJlcXVpcmVzIHRoZSB1Y2Qtc25tcAorICBsaWJyYXJ5LCBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIHVjZC1zbm1wIHNvdXJjZSByZWxlYXNlLiAgSXQncworICBsb2NhdGVkIGluIHRoZSBwZXJsL1NOTVAgc3ViZGlyZWN0b3J5IG9mIHRoZSB1Y2Qtc25tcCBzb3VyY2UgdHJlZS4KKworICBJdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCBhbnkgQ29tcHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaworICAoQ1BBTikgc2l0ZSBtaXJyb3IgaW4gbW9kdWxlcy9ieS1tb2R1bGUvU05NUC4gIFRvIGZpbmQgdGhlIENQQU4gc2l0ZQorICBuZWFyZXN0IHlvdSwgcGxlYXNlIHNlZSBodHRwOi8vd3d3LmNwYW4ub3JnL1NJVEVTLmh0bWwuCisKKyAgV2l0aCB0aGUgdjUgcmVsZWFzZSBvZiB0aGUgTmV0LVNOTVAgc3VpdGUsIHRoaXMgaXMgbm93IGFjY29tcGFuaWVkIGJ5CisgIGEgbnVtYmVyIG9mIHBlcmwgbW9kdWxlcyBncm91cGVkIHRvZ2V0aGVyIHVuZGVyIHRoZSBOZXRTTk1QIG5hbWVzcGFjZS4KKworICBDb25zdWx0IHRoZSBSRUFETUUgZmlsZSBpbiB0aGUgU05NUCBwZXJsIG1vZHVsZSBkaXN0cmlidXRpb24gdG8gZmluZCAKKyAgb3V0IHdoYXQgdmVyc2lvbiBvZiB0aGUgdWNkLXNubXAgbGlicmFyeSBpdCBuZWVkcyB0byBiZSBsaW5rZWQgYWdhaW5zdC4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2luc3RhbGxfdGhlX1BlcmxfU05NUF9tb2R1bGVzXyI+CitIb3cgZG8gSSBpbnN0YWxsIHRoZSBQZXJsIFNOTVAgbW9kdWxlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQXNzdW1pbmcgeW91IGhhdmUgYSByZWFzb25hYmx5IG5ldyAoYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQpIHBlcmwgc3lzdGVtLAorICB0aGlzIHNob3VsZCBiZSBzaW1wbHk6CisKKyAgICAgICAgY2QgcGVybAkJKGZvciA1LjAueCkKKyAgb3IgICAgY2QgcGVybC9TTk1QCShmb3IgNC4yLngpCisJcGVybCBNYWtlZmlsZS5QTAorCSAgICAocHJlc3MgUkVUVVJOIHdoZW4gcHJvbXB0ZWQgZm9yIGhvc3QgYW5kIGNvbW11bml0eSkKKwltYWtlCisJbWFrZSB0ZXN0CisJbWFrZSBpbnN0YWxsICAocHJvYmFibHkgYXMgcm9vdCkKKworICBOb3RlIHRoYXQgd2l0aCB0aGUgNS4wIHJlbGVhc2UgbGluZSwgdGhlcmUgYXJlIGFkZGl0aW9uYWwgU05NUC1yZWxhdGVkCisgIHBlcmwgbW9kdWxlcyB0aGF0IHNob3VsZCBwcm9iYWJseSBiZSBpbnN0YWxsZWQgYXMgd2VsbC4gIFRoZXNlIGNhbiBhbHNvCisgIGJlIGZvdW5kIHVuZGVyIHRoZSAncGVybCcgc3ViZGlyZWN0b3J5LiAgQXQgdGhlIHZlcnkgbGVhc3QsIGluc3RhbGwgdGhlCisgICdkZWZhdWx0X3N0b3JlJyBtb2R1bGUuCisgICAgVGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdpdGggdGhlIDQuMi54IHJlbGVhc2VzLgorCisKKworPGEgbmFtZT0iQnV0X2NvbXBpbGluZ190aGlzX2ZhaWxzX19XaHlfIj4KK0J1dCBjb21waWxpbmcgdGhpcyBmYWlscyEgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgcGVybCBtb2R1bGUgdGVuZHMgdG8gZGVsdmUgcXVpdGUgZGVlcGx5IGludG8gdGhlIGludGVybmFscyBvZiB0aGUKKyAgbWFpbiBOZXQtU05NUCBsaWJyYXJ5LCBhbmQgc28gaXMgcXVpdGUgc2Vuc2l0aXZlIHRvIGNoYW5nZXMgd2l0aGluIHRoZQorICBsaWJyYXJ5LiAgSXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhlIG1vZHVsZSwgdGhhdAorICBjb3JyZXNwb25kcyB0byB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB5b3UgaGF2ZSBpbnN0YWxsZWQuICBJZiB5b3UncmUKKyAgd29ya2luZyB3aXRoIHRoZSBtYWluIE5ldC1TTk1QIGRpc3RyaWJ1dGlvbiwgdGhlIGFwcHJvcHJpYXRlIHZlcnNpb24gb2YKKyAgdGhlIHBlcmwgbW9kdWxlIGlzIHNoaXBwZWQgYXMgcGFydCBvZiB0aGlzLCBidXQgeW91ICptdXN0KiBoYXZlCisgIHJ1biAibWFrZSBpbnN0YWxsIiBvbiB0aGUgbWFpbiBOZXQtU05NUCBkaXN0cmlidXRpb24gKmZpcnN0Ki4KKworICBJZiB5b3UncmUgd29ya2luZyB3aXRoIGEgcmVhZHktaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIG1ha2UKKyAgc3VyZSB5b3Ugb2J0YWluIGEgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBwZXJsIG1vZHVsZS4KKworICAgIE5vdGUgdGhhdCB0aGUgcGVybCBtb2R1bGVzIHdpbGwgYmUgY29tcGlsZWQgdXNpbmcgdGhlIGNvbXBpbGVyCisgIChhbmQgY29tcGlsZXIgc2V0dGluZ3MpIHVzZWQgZm9yIGNvbXBpbGluZyB0aGUgb3JpZ2luYWwgcGVybCBiaW5hcnksCisgICpub3QqIHRob3NlIHVzZWQgZm9yIGNvbXBpbGluZyB0aGUgTmV0LVNOTVAgKG9yIFVDRCkgbGlicmFyeS4KKyAgSWYgdGhlc2UgYXJlIGRpZmZlcmVudCAoZS5nLiAnZ2NjJyB1c2VkIGZvciBvbmUgYW5kICdjYycgZm9yIHRoZSBvdGhlcikKKyAgdGhlbiB0aGlzIG1heSB3ZWxsIGNhdXNlIHByb2JsZW1zLiAgSXQncyBtdWNoIHNhZmVyIHRvIHVzZSBhIGNvbnNpc3RlbnQKKyAgZW52aXJvbm1lbnQgZm9yIGJvdGguICBUaGlzIGlzc3VlIGlzIGRpc2N1c3NlZCBpbiBncmVhdGVyIGRldGFpbCBpbgorICB0aGUgUkVBRE1FLnNvbGFyaXMgZmlsZS4KKworICAgIEFsc28gbm90ZSB0aGF0IHRoZSB2NSBOZXQtU05NUCBzdWl0ZSAqbXVzdCogYmUgY29uZmlndXJlZCB0byBwcm92aWRlCisgIHNoYXJlZCBsaWJyYXJpZXMgaW4gb3JkZXIgZm9yIHRoZSBwZXJsIG1vZHVsZXMgdG8gd29yayBjb3JyZWN0bHkuICBUaGlzCisgIGlzIG5vdCBuZWNlc3Nhcnkgd2l0aCB0aGUgdjQgVUNELVNOTVAgbGlicmFyaWVzLgorCisKKworPGEgbmFtZT0iQ29tcGlsaW5nX3RoZV9wZXJsX21vZHVsZV93b3Jrc19PS19fYnV0X19tYWtlX3Rlc3RfX2ZhaWxzX19XaHlfIj4KK0NvbXBpbGluZyB0aGUgcGVybCBtb2R1bGUgd29ya3MgT0ssIGJ1dCAnbWFrZSB0ZXN0JyBmYWlscy4gV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGF0J3MgZGlmZmljdWx0IHRvIGFuc3dlciBpbiBnZW5lcmFsLgorICBTb21lIG9mIHRoZSBwZXJsIHRlc3RzIGFyZSByYXRoZXIgcGlja3ksIHNvIHRoaXMgbWF5IHNpbXBseSBiZQorICBzb21lIG1pbm9yIGluY29uc2lzdGVuY3kgYmV0d2VlbiB5b3VyIHByZWNpc2Ugc2V0dXAsIGFuZCB0aGUKKyAgZXhwZWN0YXRpb25zIG9mIHRoZSB0ZXN0IGVudmlyb25tZW50LgorCisgICAgQ2hlY2sgdGhhdCB5b3UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgcGVybCBkaXN0cmlidXRpb24gdGhhdCBtYXRjaGVzCisgIHRoZSBTTk1QIGxpYnJhcmllcyAodXNlIHRoZSAncGVybC9TTk1QJyBpbiBwcmVmZXJlbmNlIHRvIENQQU4pLCBhbmQKKyAgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIG1haW4gbGlicmFyaWVzIHN1Y2Nlc3NmdWxseSAodW5pbnN0YWxsCisgIGFueSBvbGQgdmVyc2lvbnMgaWYgeW91J3JlIGhhdmluZyB0cm91YmxlKS4KKworICAgIElmIGFsbCB0aGlzIGxvb2tzIE9LLCBhbmQgaWYgbW9zdCBvZiB0aGUgdGVzdHMgcGFzcywgdGhlbiBpdCdzCisgIHByb2JhYmx5IHNhZmUgdG8gcnVuICdtYWtlIGluc3RhbGwnIGFueXdheS4gICBQcm9iYWJseS4KKworCisKKzxhIG5hbWU9IlRoZV9wZXJsX19tYWtlX3Rlc3RfX2ZhaWxzX29uX3RoZV9PSURfdGVzdHNfX0lzX2l0X3NhZmVfdG9fY29udGludWVfIj4KK1RoZSBwZXJsICdtYWtlIHRlc3QnIGZhaWxzIG9uIHRoZSBPSUQgdGVzdHMuIElzIGl0IHNhZmUgdG8gY29udGludWU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTm8uICBBbG1vc3QgY2VydGFpbmx5IG5vdC4gIElmIHRoZSAicGVybC9PSUQiIHRlc3RzIGZhaWwgdGhlIGZpcnN0CisgIGZvdXIgdGVzdHMsIGFuZCB0aGVuIGNyYXNoZXMgb3V0IGNvbXBsYWluaW5nIGFib3V0IGEgIm5ldHNubXBfb2lkUHRyIiwKKyAgdGhlbiB0aGlzIGlzIGEgc2lnbiBvZiBhIG1vcmUgZnVuZGFtZW50YWwgcHJvYmxlbS4KKworICBUaGUgNC4yLnggbGluZSBwZXJsIHN1cHBvcnQgd2FzIGEgc2luZ2xlIG1vZHVsZSwgc28gd2FzIGluZGVwZW5kZW50CisgIG9mIHRoZSB3YXkgdGhhdCB0aGUgQyBsaWJyYXJ5IHdhcyBjb25maWd1cmVkLiAgSW4gY29udHJhc3QgdG8gdGhpcywgCisgIHRoZSA1LjAueCBwZXJsIHN1cHBvcnQgY29uc2lzdCBvZiBhIG51bWJlciBvZiBpbnRlci1jb29wZXJhdGluZyBtb2R1bGVzLAorICB3aGljaCByZWx5IG9uIHNoYXJpbmcgYSBjb25zaXN0ZW50IEMgbGlicmFyeSBlbnZpcm9ubWVudC4gIEluIHByYWN0aXNlLAorICB0aGlzIG1lYW5zIHRoYXQgdGhlIHBlcmwgbW9kdWxlcyAqTVVTVCogYmUgY29uZmlndXJlZCBhbmQgY29tcGlsZWQgdXNpbmcKKyAgYSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgQyBsaWJyYXJ5LiAgIFVuZm9ydHVuYXRlbHksIHRoZSBkZWZhdWx0IGZvcgorICBtb3N0IGVhcmx5IHZlcnNpb25zIG9mIHRoZSBOZXQtU05NUCBzdWl0ZSB3YXMgdG8gY29tcGlsZSB1c2luZyBzdGF0aWMKKyAgbGlicmFyaWVzIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdG8gdXNlIHNoYXJlZCBsaWJyYXJpZXMuICBUaGUKKyAgZGVmYXVsdCBzaG91bGQgYmUgdG8gdXNlIHNoYXJlZCBsaWJyYXJpZXMgZnJvbSA1LjAuNyBvbndhcmRzLgorCisgIFRoZSBlcnJvciAib2lkMSBpcyBub3Qgb2YgdHlwZSBuZXRzbm1wX29pZFB0ciIgaXMgYSBmYWlybHkgc3VyZSBpbmRpY2F0aW9uCisgIHRoYXQgdGhlIEMgbGlicmFyeSB3YXMgY29tcGlsZWQgc3RhdGljYWxseS4gICBZb3UnbGwgbmVlZCB0byByZS1jb25maWd1cmUKKyAgdGhlIG1haW4gTmV0LVNOTVAgcGFja2FnZSB1c2luZyB0aGUgIi0tZW5hYmxlLXNoYXJlZCIgY29uZmlndXJlIGZsYWcuCisgIFRoZW4gcmUtaW5zdGFsbCB0aGUgQyBsaWJyYXJ5IGJlZm9yZSByZS1jb25maWd1cmluZyBhbmQgcmUtY29tcGlsaW5nCisgIHRoZSBwZXJsIG1vZHVsZSBzdXBwb3J0LgorCisgIE5vdGUgdGhhdCB0aGlzIHByb2JsZW0gZG9lcyBub3QgYXJpc2Ugd2hlbiB1c2luZyB0aGUgNC4yLnggdmVyc2lvbgorICBvZiBwZXJsIHN1cHBvcnQuCisKKworCis8YSBuYW1lPSJJX21fdHJ5aW5nX3RvX3VzZV9taWJfY19fb3JfdGttaWJfX2FuZF9pdF9jYW5fdF9sb2NhdGVfU05NUF9wbV8iPgorSSdtIHRyeWluZyB0byB1c2UgbWliMmMgKG9yIHRrbWliKSBhbmQgaXQgY2FuJ3QgbG9jYXRlIFNOTVAucG0/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGF0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgU05NUCBwZXJsIG1vZHVsZSBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQuCisgIEl0J3Mgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIHBlcmwgZGlzdHJpYnV0aW9uLCBub3IgaXMgaXQgaW5zdGFsbGVkCisgIGJ5IGRlZmF1bHQgaW4gUmVkSGF0IExpbnV4IChmb3IgZXhhbXBsZSkuCisgICAgWW91J2xsIG5lZWQgdG8gaW5zdGFsbCBpdC4gIFNlZSB0aGUgcHJldmlvdXMgdHdvIHF1ZXN0aW9ucy4KKworCisKKzxhIG5hbWU9IklfbV90cnlpbmdfdG9fdXNlX21pYl9jX19vcl90a21pYl9fYW5kX2l0X2Nhbl90X2xvYWRfU05NUF9zb18iPgorSSdtIHRyeWluZyB0byB1c2UgbWliMmMgKG9yIHRrbWliKSBhbmQgaXQgY2FuJ3QgbG9hZCBTTk1QLnNvPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHByb2JhYmx5IHRoZSBzYW1lIHByb2JsZW0uICBFaXRoZXIgdGhlIFNOTVAgbW9kdWxlCisgIGhhc24ndCBiZWVuIGluc3RhbGxlZCwgb3IgaXQncyB0aGUgd3JvbmcgdmVyc2lvbi4gIFNlZSB0aGUKKyAgcHJldmlvdXMgdHdvIHF1ZXN0aW9ucy4KKworCisKKzxhIG5hbWU9IklfbV90cnlpbmdfdG9fdXNlX3RrbWliX2FuZF9pdF9jYW5fdF9sb2NhdGVfVGtfcG1fIj4KK0knbSB0cnlpbmcgdG8gdXNlIHRrbWliIGFuZCBpdCBjYW4ndCBsb2NhdGUgVGsucG0/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGsucG0gaXMgYW5vdGhlciBQZXJsIHBhY2thZ2UgdGhhdCBuZWVkcyB0byBiZSBpbnN0YWxsZWQgYmVmb3JlIHRrbWliCisgIHdpbGwgcnVuLiAgSXQncyBhbHNvIGF2YWlsYWJsZSBvbiBQZXJsIENQQU4uICBXZSBzdWdnZXN0IHVzaW5nIHZlcnNpb24KKyAgIlRrODAwLjAxMSIgb3IgbGF0ZXIuICBJdCBjYW4gYmUgaW5zdGFsbGVkIGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQ6CisKKwkJcGVybCAtTUNQQU4gLWUgc2hlbGwgOyAiaW5zdGFsbCBUayIKKworCisKKzxhIG5hbWU9IklfdmVfZ290X2FfcHJvYmxlbV93aXRoX3RoZV9OZXRfU05NUF9tb2R1bGVfX19DYW5feW91X2hlbHBfIj4KK0kndmUgZ290IGEgcHJvYmxlbSB3aXRoIHRoZSBOZXQtU05NUCBtb2R1bGUuICBDYW4geW91IGhlbHA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgU29ycnksIGRlc3BpdGUgdGhlIHNpbWlsYXItc291bmRpbmcgbmFtZSwgdGhlIE5ldC1TTk1QIChvciBOZXQ6OlNOTVApCisgIG1vZHVsZSBpcyBub3RoaW5nIHRvIGRvIHdpdGggdGhpcyBwYWNrYWdlLCBvciB0aGUgTmV0U05NUCBtb2R1bGVzLgorICBOZXQ6OlNOTVAgaXMgYSAicHVyZS1wZXJsIiBpbXBsZW1lbnRhdGlvbiBvZiBTTk1QIHN1cHBvcnQsIGRldmVsb3BlZAorICBieSBEYXZpZCBUb3duLiAgVGhlIGRldmVsb3BlcnMgb2YgdGhlIChDLWJhc2VkKSBOZXQtU05NUCBzdWl0ZSBkbworICBub3QgaGF2ZSBhbnkgc2lnbmlmaWNhbnQgZXhwZXJpZW5jZSBpbiB1c2luZyB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLAorICBhbmQgeW91J2xsIHByb2JhYmx5IGJlIGJldHRlciBvZmYgYXNraW5nIGZvciBoZWxwIHZpYSBDUEFOIG9yIHNvbWUKKyAgb3RoZXIgcGVybC1yZWxhdGVkIGZvcnVtLgorCisKKworPGEgbmFtZT0iTUlCUyI+CitNSUJTCis9PT09CisKKzxhIG5hbWU9IldoZXJlX2Nhbl9JX2ZpbmRfYV9NSUJfY29tcGlsZXJfIj4KK1doZXJlIGNhbiBJIGZpbmQgYSBNSUIgY29tcGlsZXI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhhdCBkZXBlbmRzIHdoYXQgeW91IG1lYW4gYnkgYSAiTUlCIGNvbXBpbGVyIi4gIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28KKyAgdHlwZXMgb2YgdG9vbCB0aGF0IGFyZSBjb21tb25seSByZWZlcnJlZCB0byBieSB0aGlzIG5hbWUuCisKKyAgVGhlIGZpcnN0IGlzIGEgdG9vbCB0byBjaGVjayBNSUIgZmlsZXMgZm9yIHZhbGlkaXR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5CisgIGlzIG1vc3RseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgTUlCIHBhcnNlciAocGFydCBvZiB0aGUgTmV0LVNOTVAgbGlicmFyeSkKKyAgYW5kIGhlbmNlIGluY2x1ZGVkIGluIGFsbCB0aGUgYXBwbGljYXRpb25zLiAgVGhlIHRvb2wgJ3NubXB0cmFuc2xhdGUnIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvciB0aGlzIHB1cnBvc2UuCisgICAgTm90ZSB0aGF0IHRoZSBwYXJzZXIgaXMgZmFpcmx5IGZvcmdpdmluZyAoc2VlICdXaGF0IEFTTi4xIHBhcnNlciBpcyB1c2VkJworICBiZWxvdyksIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSByZWdhcmRlZCBhcyBhIHN0YW1wIG9mIGFwcHJvdmFsLgorCisgICAgVGhlIHNlY29uZCB0eXBlIG9mIHRvb2wgaXMgb25lIHRvIHR1cm4gYSBNSUIgc3BlY2lmaWNhdGlvbiBpbnRvIEMgY29kZSwKKyAgc3BlY2lmaWNhbGx5IG9uZSBkZXNpZ25lZCB0byBhaWQgYWdlbnQgaW1wbGVtZW50YXRpb24uICBUaGUgY29tbWFuZCAnbWliMmMnCisgIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIHRvb2wgZm9yIHRoZSBOZXQtU05NUCBhZ2VudC4gIAorICBTZWUgdGhlIENPRElORyBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKworPGEgbmFtZT0iSV9jYW5fdF9sb2FkX2FueV9vZl90aGVfbWliX2ZpbGVzX19hbmRfdGhleV9zZWVtX3RvX2JlX21pc3NpbmciPgorSSBjYW4ndCBsb2FkIGFueSBvZiB0aGUgbWliIGZpbGVzLCBhbmQgdGhleSBzZWVtIHRvIGJlIG1pc3NpbmcKK3RoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgZmlsZW5hbWUuICBXaGF0J3MgaGFwcGVuaW5nPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIGEgcHJvYmxlbSBleHBlcmllbmNlZCB3aXRoIFN1biBzeXN0ZW1zIHdoZW4gdGhlIHRvb2xzIGhhdmUKKyAgYmVlbiBjb21waWxlZCB3aXRoIGEgbWl4dHVyZSBvZiBCU0QgYW5kIFNvbGFyaXMgZW52aXJvbm1lbnRzLgorICBZb3UnbGwgbmVlZCB0byByZS1jb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHRvb2xzLCBtYWtpbmcgc3VyZSB0aGF0CisgICcvdXNyL3VjYicgaXMgbm90IGluIHlvdXIgUEFUSCAob3IgYXQgbGVhc3QgY29tZXMgYXQgdGhlIGVuZCkuCisKKworCis8YSBuYW1lPSJXaHlfYXJlbl90X215X21pYl9maWxlc19iZWluZ19yZWFkX2luXyI+CitXaHkgYXJlbid0IG15IG1pYiBmaWxlcyBiZWluZyByZWFkIGluPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIE5ldC1TTk1QIGxpYnJhcnkgb25seSBsb2FkcyBhIHN1YnNldCBvZiBNSUIgZmlsZXMgYnkgZGVmYXVsdC4KKyAgVGhpcyBsaXN0IGlzIHNldCBhdCB3aGVuIHRoZSBzdWl0ZSBpcyBmaXJzdCBjb25maWd1cmVkIGFuZCBjb21waWxlZCwKKyAgYW5kIGJhc2ljYWxseSBjb3JyZXNwb25kcyB0byB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgdGhlIGFnZW50IHN1cHBvcnRzLgorICAoVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uLCBidXQgaXMgYSByZWFzb25hYmxlIGZpcnN0IGFwcHJveGltYXRpb24pLgorCisgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uICctbScsIHRoZQorICBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICdNSUJTJyBvciB0aGUgc25tcC5jb25mIGRpcmVjdGl2ZSAnbWlicycuCisgIEVhY2ggb2YgdGhlc2UgdGFrZSBhIChjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgTUlCIG1vZHVsZSBuYW1lcworICB0byBsb2FkLiAgIFN0YXJ0aW5nIHRoZSBsaXN0IHdpdGggYSAnKycgY2hhcmFjdGVyIHdpbGwgYWRkIHRoZW0gdG8KKyAgdGhlIGRlZmF1bHQgbGlzdCAtIG90aGVyd2lzZSBpdCByZXBsYWNlcyB0aGUgZGVmYXVsdHMuCisKKyAgICBVc2luZyB0aGUgc3BlY2lhbCB2YWx1ZSAnQUxMJyB3aWxsIGxvYWQgYWxsIHRoZSBNSUIgZmlsZXMgdGhhdAorICB0aGUgbGlicmFyeSBjYW4gZmluZC4KKworCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIHRvb2xzIG1heSBiZSBsb29raW5nIGluIHRoZSB3cm9uZyBwbGFjZS4KKyAgVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBtaWIgZmlsZXMgaXMgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL21pYnMuCisgIEFnYWluLCB0aGlzIGlzIHNldCB3aGVuIHRoZSBzdWl0ZSBpcyBmaXJzdCBjb25maWd1cmVkIGFuZCBjb21waWxlZC4KKyAgVGhpcyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnTUlCRElSUycKKyAgb3IgdGhlIHNubXAuY29uZiBkaXJlY3RpdmUgJ21pYmRpcnMnLgorCisgICAgTm90ZSB0aGF0IHRoaXMgbWF5IHZlcnkgd2VsbCBhZmZlY3QgeW91IGlmIHlvdSd2ZSBpbnN0YWxsZWQgYQorICBuZXcgdmVyc2lvbiBvZiB0aGUgc3VpdGUgbWFudWFsbHksIHJlcGxhY2luZyBvbmUgcHJvdmlkZWQgYnkgdGhlCisgIHN1cHBsaWVyICh3aGljaCB0eXBpY2FsbHkgd291bGQgdXNlIGEgbW9yZSAnY2VudHJhbCcgbG9jYXRpb24pLgorCisKKyAgICBGaW5hbGx5LCBhcmUgeW91IHN1cmUgdGhhdCB5b3UndmUgaW5zdGFsbGVkIHRoZSBNSUIgZmlsZXM/CisgIElmIHlvdSd2ZSBjb21waWxlZCB0aGUgc3VpdGUgZnJvbSBzY3JhdGNoLCB5b3UgbmVlZCB0byBydW4KKyAgIm1ha2UgaW5zdGFsbCIgYXQgbGVhc3Qgb25jZSwgYmVmb3JlIHRoZSB0b29scyB3aWxsIGJlIGFibGUgdG8KKyAgZmluZCB0aGUgTUlCIGZpbGVzLiAgVGhpcyBpcyB1bmxpa2VseSB0byBiZSBhIHByb2JsZW0gaWYgeW91J3ZlCisgIGJlZW4gd29ya2luZyB3aXRoIHRoZSB0b29scyBmb3IgYSB3aGlsZSwgYnV0IGNhbiBiaXRlIHRob3NlIGNvbWluZworICBmcmVzaCB0byB0aGUgU05NUCB3b3JsZC4KKworCisKKzxhIG5hbWU9IklfbV9nZXR0aW5nX2Fuc3dlcnNfX2J1dF90aGV5X3JlX2FsbF9udW1iZXJzX19XaHlfIj4KK0knbSBnZXR0aW5nIGFuc3dlcnMsIGJ1dCB0aGV5J3JlIGFsbCBudW1iZXJzLiBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBhY3R1YWxseSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgcXVlc3Rpb24uICBCZWNhdXNlIHRoZSB0b29scworICBkb24ndCByZWFkIGluIGV2ZXJ5IE1JQiBtb2R1bGUgdGhleSBjYW4gZmluZCwgaXQgaXMgcXVpdGUgcG9zc2libGUKKyAgZm9yIHJlc3VsdHMgZnJvbSBhbiBhZ2VudCB0byByZWZlciB0byBtb2R1bGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBsb2FkZWQKKyAgKHBhcnRpY3VsYXJseSB3aXRoIEdFVE5FWFQgcmVxdWVzdHMsIG9yIHdoZW4gd2Fsa2luZyBhIHRyZWUpLgorICAgICBUaGUgdG9vbHMgd2lsbCByZXBvcnQgdGhlIGFuc3dlciBxdWl0ZSBjb3JyZWN0bHksIGJ1dCB3b24ndCB0cmFuc2xhdGUKKyAgaWRlbnRpZmllcnMgYW5kIGVudW1lcmF0aW9ucyBpbnRvIHJlYWRhYmxlIHN0cmluZ3MuICBUbyBmaXggdGhpcywgdXNlCisgIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyBNSUJTIG9yIE1JQkZJTEVTIChvciB0aGUgJy1tJyBhbmQgJy1NJyBmbGFncykKKyAgdG8gcmVhZCBpbiB0aGUgcmVsZXZhbnQgbW9kdWxlIGZpbGVzLgorCisKKworPGEgbmFtZT0iV2hhdF9kb2VzX19DYW5ub3RfZmluZF9tb2R1bGVfX1hYWF9NSUJfX19tZWFuXyI+CitXaGF0IGRvZXMgIkNhbm5vdCBmaW5kIG1vZHVsZSAoWFhYLU1JQikiIG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb25zLiAgIEluIHRoaXMgY2FzZSwgaXQncworICBzdGF0aW5nIHRoYXQgaXQgY2FuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIG1vZHVsZSAtIGVpdGhlciBiZWNhdXNlCisgIGl0J3Mgbm90IGluc3RhbGxlZCBwcm9wZXJseSwgb3IgdGhlIG5hbWUgdXNlZCBpcyBzdWJ0bHkgd3JvbmcuCisKKyAgICBJZiBpdCdzIGp1c3Qgb25lIG9yIHR3byBtb2R1bGVzIHRoYXQgYXJlIG5vdCBiZWluZyBmb3VuZCwgY2hlY2sKKyAgdGhhdCB0aGUgZmlsZXMgYXJlIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbiwgYXJlIHJlYWRhYmxlLCBhbmQgdGhlCisgIG5hbWUgYmVpbmcgdXNlZCBpcyBjb3JyZWN0LiAgTm90ZSB0aGF0IHRoZSBuYW1lIHJlcG9ydGVkIGlzIHRoZQorICBuYW1lIG9mIHRoZSBNSUIgbW9kdWxlLCB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlCisgIG5hbWUgb2YgdGhlIGZpbGUuIFNlZSB0aGUgcXVlc3Rpb24gJ0hvdyBkbyBJIGFkZCBhIE1JQiB0byB0aGUgdG9vbHM/JworICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKKyAgICBJZiB0aGUgdG9vbCBpcyBnZW5lcmF0aW5nIGEgd2hvbGUgc2xldyBvZiBlcnJvcnMsIHRoZW4gaXQncworICBsaWtlbHkgdGhhdCBlaXRoZXIgdGhlIE1JQiBmaWxlcyBoYXZlbid0IGJlZW4gaW5zdGFsbGVkIGF0IGFsbCwKKyAgb3IgdGhlIGxpYnJhcnkgaXMgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuICAgU2VlIHRoZSBwcmV2aW91cworICB0d28gcXVlc3Rpb25zLgorCisKKworPGEgbmFtZT0iV2hhdF9hYm91dF9fdW5saW5rZWRfT0lEX18iPgorV2hhdCBhYm91dCAidW5saW5rZWQgT0lEIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSBoYXMgYmVlbiBhYmxlIHRvIGZpbmQgdGhlIE1JQiBtb2R1bGUsCisgIGFuZCBwYXJzZSB0aGUgaW5kaXZpZHVhbCBvYmplY3RzIGRlZmluZWQgaW4gaXQsIGJ1dCBpcyBoYXZpbmcgcHJvYmxlbXMKKyAgbGlua2luZyB0aGVtIHRvZ2V0aGVyIGludG8gYSBjb25zaXN0ZW50IHRyZWUuICBJbiBwYXJ0aWN1bGFyLCBpdAorICBjYW4ndCBmaW5kIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lIHdpdGhpbiB0aGUgYnJhY2VzCisgIChpLmUuIHRoZSAneHh4JyBpbiAne3h4eCA5OX0nKS4KKworICAgIFRoaXMgaXMgcHJvYmFibHkgZHVlIGVpdGhlciB0byBhIHR5cG8gaW4gdGhpcyBuYW1lIChyZW1lbWJlciB0aGF0CisgIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZSwgc28gYSByZWZlcmVuY2UgdG8gJ3h4eCcgd2lsbCAqbm90KiBtYXRjaAorICBhIGRlZmluaXRpb24gb2YgJ1h4eCcpLCBvciBlbHNlIHRoZSBuYW1lIGlzIGRlZmluZWQgaW4gYW5vdGhlciBNSUIKKyAgZmlsZSwgYW5kIHRoaXMgZGVwZW5kZW5jeSBpcyBtaXNzaW5nIGZyb20gdGhlIElNUE9SVCBjbGF1c2Ugb2YgdGhpcworICBNSUIgZmlsZS4KKworCisKKzxhIG5hbWU9IlRoZV9wYXJzZXJfZG9lc25fdF9oYW5kbGVfY29tbWVudHNfcHJvcGVybHlfX1doeV9ub3RfIj4KK1RoZSBwYXJzZXIgZG9lc24ndCBoYW5kbGUgY29tbWVudHMgcHJvcGVybHkuIFdoeSBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgdGhlIGxpbmUgaW4gcXVlc3Rpb24gY29udGFpbnMgdHdvCisgIChvciBtb3JlKSBzZXF1ZW5jZXMgb2YgcGFpcnMgb2YgZGFzaGVzLiAgVGhpcyBpcyBvZnRlbiB1c2VkIHRvIHRyeQorICBhbmQgImNvbW1lbnQgb3V0IiBhbiB1bndhbnRlZCBsaW5lIHRoYXQgYWxyZWFkeSBjb250YWlucyBhIGNvbW1lbnQ6CisKKwktLSAgIGJyb2tlbiA6Oj0geyBteU1JQiAxIH0gICAtLSBUaGlzIGlzbid0IHdvcmtpbmcgeWV0CisKKyAgVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGEgY29tbWVudCBjb250aW51ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgVW5mb3J0dW5hdGVseSwgdGhpcyBhc3N1bXB0aW9uIGlzIG5vdCBjb3JyZWN0LgorICAgIEEgY29tbWVudCB3aWxsIGNvbnRpbnVlIGVpdGhlciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLCBvciB0aGUgbmV4dAorICBvY2N1cmFuY2Ugb2YgYSBwYWlyIG9mIGRhc2hlcy4gIFRodXMgaW4gdGhpcyBjYXNlLCB0aGUgZGVmaW5pdGlvbiBvZgorICAiYnJva2VuIiBpcyBjb21tZW50ZWQgb3V0IChhcyBpbnRlbmRlZCkgYnV0IHRoZSBmb2xsb3dpbmcgdGV4dCBpcworICB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIE1JQiwgYW5kIHdpbGwgZ2VuZXJhdGUgYW4gZXJyb3IuCisKKyAgICBBIHNpbWlsYXIgZWZmZWN0IGNhbiBiZSBvYnRhaW5lZCB3aGVuIGEgbGluZSBvZiBkYXNoZXMgaGFzIGJlZW4gdXNlZAorICB0byB0cnkgYW5kIG1hcmsgc2VwYXJhdGUgcGFydHMgb2YgYSBNSUIgZmlsZS4KKworICAgIE1vc3Qgb2YgdGhlIGFwcGxpY2F0aW9ucyBoYXZlIGEgY29tbWFuZC1saW5lIG9wdGlvbiAoLVBjKSB3aGljaCB3aWxsCisgIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSB0cmVhdGluZyB0aGUgd2hvbGUgbGluZSBhcyBhIGNvbW1lbnQuICBCdXQKKyAgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbGVnYWwsIGFuZCB0aGUgb2ZmZW5kaW5nIE1JQiBmaWxlIHNob3VsZCByZWFsbHkgYmUKKyAgY29ycmVjdGVkLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfcmVwbGFjZV9NSUJfdmFsdWVzX3dpdGhfbmV3X29uZXNfIj4KK0hvdyBkbyBJIHJlcGxhY2UgTUlCIHZhbHVlcyB3aXRoIG5ldyBvbmVzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgTmV0LVNOTVAgcGFyc2VyIGdlbmVyYWxseSB0YWtlcyB0aGUgZmlyc3QgZGVmaW5pdGlvbiBpdCBzZWVzIGZvciBlYWNoCisgIG9iamVjdCBpbiB0aGUgTUlCIGhpZXJhcmNoeS4gICBFdmVuIGlmIHlvdSBzcGVjaWZ5IHlvdXIgZmlsZSB0byBiZSByZWFkCisgIGZpcnN0LCBpZiB0aGUgSU1QT1JUUyBjbGF1c2VzIHJlZmVyZW5jZSBhIE1JQiB3aXRoIGNvbXBldGluZyBvYmplY3RzLAorICB0aG9zZSBvYmplY3RzIHdpbGwgYmUgcGFyc2VkIGZpcnN0LgorCisgIFdoZW4gc3BlY2lmeWluZyB0aGUgUmVwbGFjZSBNSUIgY29tbWFuZC1saW5lIG9wdGlvbiAoLVBSKSwgdGhlIHBhcnNlcgorICB3aWxsIHVzZSBkZWZpbml0aW9ucyBzb3VyY2VkIGZyb20gdGhlIG1vc3QgcmVjZW50IE1JQiBmaWxlLgorICBUaGUgcGFyc2VyIHdpbGwgcmVwbGFjZSBNSUIgb2JqZWN0cyB3aGVuIHRoZSBzdWItaWRlbnRpZmllciBhbmQgbmFtZSBtYXRjaC4KKworICBDYXV0aW9uOiBVc2luZyBSZXBsYWNlIE1JQiwgdGhlcmUgaXMgTk8gZ3VhcmFudGVlIHRoYXQgdGhlIHJlc3VsdGluZworICBNSUIgdHJlZSB3aWxsIGJlIGNvcnJlY3QuICBPdGhlciBNSUIgb2JqZWN0cyBtYXRjaGluZyB0aGUgbmFtZSBidXQKKyAgbm90IHRoZSBzdWItaWRlbnRpZmllciB3aWxsIHBlcnNpc3QuICBTdWItaGllcmFyY2hpZXMgbWF5IGJlIHJlcGFyZW50ZWQuCisgIEluIHBhcnRpY3VsYXIsIHJhbmRvbSBhY2Nlc3Mgc2VhcmNoaW5nIFtzZWUgbWFuIDEgc25tcGNtZF0KKyAgbWF5IGdpdmUgdW5leHBlY3RlZCByZXN1bHQuCisgIFRoZSBSZXBsYWNlIE1JQiBvcHRpb24gaXMgZXhwZXJpbWVudGFsLCBidXllciBiZXdhcmUsIGNhcnBlIGRpZW0sIGV0Yy4KKworICBIZXJlIGFyZSBhIGZldyBjb25zaWRlcmF0aW9ucyB0byBoZWxwIHlvdSBvYnRhaW4gZ29vZCByZXN1bHRzLgorICBUaGVzZSBob2xkIHRydWUgZXZlbiBpZiB5b3UgbmV2ZXIgdXNlIHRoZSBSZXBsYWNlIE1JQiBmZWF0dXJlLgorICBZb3VyIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCBhcmUgd2VsY29tZWQuCisKKyAgICAxLiBUaGUgcGFyc2VyIHNlYXJjaGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMgYW5kIGF0dGVtcHQKKyAgICAgICB0byBwYXJzZSBldmVyeSBmaWxlIHdob3NlIHBhdGggZG9lcyBub3QgYmVnaW4gd2l0aCAiLiIgKHBlcmlvZCkuCisgICAgICAgUmVtb3ZlIChvciByZW5hbWUpIG9sZGVyIE1JQiBmaWxlcyBmcm9tIHRoZXNlIGRpcmVjdG9yaWVzLgorICAgICAgIFJlbmFtZSAiUkVBRE1FIiB0byAiLlJFQURNRSIgLCBldGMuCisKKyAgICAyLiBIaW50OiB0aGUgcGFyc2VyJ3MgbW9kdWxlIGxpc3QgaXMgaW4gTElGTyBvcmRlci4gWW91IG1heSBzZWUgYmV0dGVyCisgICAgICAgcmVzdWx0cyBpZiB0aGUgZGlyZWN0b3J5IHdpdGggdGhlIG1vc3QgY29ycmVjdCBNSUIgZmlsZXMgaXMKKyAgICAgICBzcGVjaWZpZWQgbGFzdCBpbiB0aGUgTUlCRElSUyBlbnZpcm9ubWVudC4KKworICAgIDMuIENvbnN0cmFpbiB0aGUgcGFyc2VyIHRvIG5vdCByZWFkIGluIGRlZmF1bHQgTUlCIGZpbGVzIGJ5IHNldHRpbmcKKyAgICAgICB0aGUgTUlCUyBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZSBzZXBhcmF0b3IgY2hhcmFjdGVyCisgICAgICAgKHNlbWktY29sb24gb24gd2luMzIsIGNvbG9uIGV2ZXJ5d2hlcmUgZWxzZSkuCisgICAgICAgU2V0dGluZyB0aGlzIHRvICIiIG1heSBhbHNvIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgorCisgICAgNC4gVGhlIE1JQkZJTEVTIGVudmlyb25tZW50IGNhbiBzcGVjaWZ5IHRoZSBwYXRoIG9mIHRoZSBuZXcgTUlCIGZpbGUuCisKKyAgV2l0aGluIGEgcHJvZ3JhbSwgdGhlIGNhbGw6CisJIC8qICA0LjIueCAgKi8KKwkgZHNfc2V0X2Jvb2xlYW4oRFNfTElCUkFSWV9JRCwgRFNfTElCX01JQl9SRVBMQUNFLCAxIHwgMCk7CisKKyAgb3IsIGlmIHVzaW5nIHRoZSA1LjAueCBzZXJpZXMgY29kZToKKwkvKiAgNS4wLnggICovCisJbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisJCQkgICAgICAgTkVUU05NUF9EU19MSUJfTUlCX1JFUExBQ0UsIDEgfCAwKTsKKworICB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBSZXBsYWNlIE1JQiBmZWF0dXJlIHJlc3BlY3RpdmVseS4KKyAgSWYgeW91J3JlIGhhdmluZyBwcm9ibGVtcyBsb2FkaW5nIGEgcGFydGljdWxhciBNSUIgZmlsZSwgdGhpcworICBjYWxsIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLCBiZWZvcmUgdXNpbmcgcmVhZF9taWIoKSB0bworICBsb2FkIHRoZSByZXF1aXJlZCBmaWxlLCBhbmQgdGhlbiByZS1lbmFibGluZyB0aGUgUmVwbGFjZSBNSUIgZmVhdHVyZS4KKyAgKG9yIHZpY2UgdmVyc2EsIGFzIGFwcHJvcHJpYXRlKS4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9nZXRfbW9yZV9pbmZvcm1hdGlvbl9hYm91dF90aGVzZV9NSUJfZmlsZV9wcm9ibGVtc18iPgorSG93IGNhbiBJIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIE1JQiBmaWxlIHByb2JsZW1zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGNvbW1hbmQgJ3NubXB0cmFuc2xhdGUnIGlzIHVzZWQgdG8gdHJhbnNsYXRlIGJldHdlZW4gbnVtZXJpYworICBhbmQgc3ltYm9saWMgZm9ybXMgb2YgT0lEcy4gIEl0IHVzZXMgdGhlIHNhbWUgcm91dGluZXMgYXMgdGhlCisgICdhY3RpdmUnIGNvbW1hbmRzLCBidXQgZG9lcyBub3QgcmVseSBvbiBjb21tdW5pY2F0aW5nIHN1Y2Nlc3NmdWxseQorICB3aXRoIGEgbmV0d29yayBtYW5hZ2VtZW50IGFnZW50LiAgQXMgc3VjaCwgaXQgaXMgYSB1c2VmdWwgdG9vbAorICBmb3IgaWRlbnRpZnlpbmcgcHJvYmxlbXMgd2l0aCByZWFkaW5nIGluIE1JQiBmaWxlcy4KKworICAgIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBtYXkgYmUgdXNlZnVsIGluCisgIGlkZW50aWZ5aW5nIHByb2JsZW1zOgorCS1QdyAgd2FybnMgYWJvdXQgY29uZmxpY3Rpbmcgc3ltYm9scworCS1QVyAgcHJpbnRzIG1vcmUgdmVyYm9zZSB3YXJuaW5ncyBhYm91dCBvdGhlciBwcm9ibGVtcyBhcyB3ZWxsCisJCShpbiBib3RoIGNhc2VzLCBpZ25vcmUgdGhlICd4bWFsbG9jJyByZXBvcnRzKQorCS1UICAgcHJvdmlkZXMgc3ViLW9wdGlvbnMgZm9yIHZhcmlvdXMgdmlld3Mgb2YgdGhlc2UgZW50cmllcworCisgIFRoZXJlIGFyZSBvdGhlciAnLVAnIG9wdGlvbnMgdG8gY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgTUlCIHBhcnNpbmcuCisgIFNlZSB0aGUgJ3NubXB0cmFuc2xhdGUoMSknIGFuZCAnc25tcGNtZCgxKScgbWFuIHBhZ2VzIGZvciBtb3JlIGRldGFpbHMsCisgIG9yIHRoZSB0dXRvcmlhbCBhdAorCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYW5zbGF0ZS5odG1sCisKKworCis8YSBuYW1lPSJXaGF0X3NfdGhpc19hYm91dF9fdG9vX21hbnlfaW1wb3J0ZWRfc3ltYm9sc19fIj4KK1doYXQncyB0aGlzIGFib3V0ICJ0b28gbWFueSBpbXBvcnRlZCBzeW1ib2xzIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEFueSBNSUIgZmlsZSBzdGFydHMgd2l0aCBhbiAob3B0aW9uYWwpIGxpc3Qgb2YgaWRlbnRpZmllcnMgdGhhdAorICBpdCAiaW1wb3J0cyIgZnJvbSBvdGhlciBmaWxlcy4gIFRoZSBwYXJzZXIgaW1wbGVtZW50cyB0aGlzIHVzaW5nCisgIGEgZml4ZWQgc2l6ZSBidWZmZXIgdG8gaG9sZCB0aGUgaW1wb3J0IGluZm9ybWF0aW9uLgorICAgIFRoZXJlIGFyZSB0d28gY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCB0aGlzIGNhbiByZXN1bHQgaW4gdGhlCisgIGVycm9yIG1lc3NhZ2Ugc2hvd24gYWJvdmUuCisKKyAgICBGaXJzdGx5LCBpZiB0aGUgTUlCIGZpbGUgcmVmZXJzIHRvIGFuIHVudXN1YWxseSBsYXJnZSBudW1iZXIKKyAgb2YgZXh0ZXJuYWwgaWRlbnRpZmllcnMuICBIYW5kbGluZyB0aGlzIGNhc2UgcmVxdWlyZXMgYSAodHJpdmlhbCkKKyAgcGF0Y2ggdG8gdGhlIHBhcnNpbmcgY29kZS4gIENvbnRhY3QgdGhlIGNvZGVycyBsaXN0IGZvciBhZHZpY2UuCisgICAgIChUaGlzIGlzIGV4dHJlbWVseSByYXJlIC0gdGhlIG9ubHkgZXhhbXBsZSB0aGF0CisgICAgICB3ZSd2ZSBjb21lIGFjcm9zcyBpcyB0aGUgQ2FibGV0cm9uIFRyYXAgTUlCKS4KKworICAgIE11Y2ggbW9yZSBjb21tb24gaXMgYSBzeW50YXggZXJyb3IgaW4gdGhlIElNUE9SVFMgY2xhdXNlIG9mIHRoZQorICBNSUIgZmlsZSBpbiBxdWVzdGlvbi4gIEluIHBhcnRpY3VsYXIsIGNoZWNrIHRoYXQgdGhpcyBlbmRzIGluIGEKKyAgc2VtaWNvbG9uLCBiZWZvcmUgZ29pbmcgb24gdG8gdGhlIG1haW4gZGVmaW5pdGlvbiBzZWN0aW9uLgorICAKKworCis8YSBuYW1lPSJBR0VOVCI+CitBR0VOVAorPT09PT0KKworPGEgbmFtZT0iV2hhdF9NSUJzX2FyZV9zdXBwb3J0ZWRfIj4KK1doYXQgTUlCcyBhcmUgc3VwcG9ydGVkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZm9sbG93aW5nIE1JQnMgYXJlIHN1cHBvcnRlZCAoYXQgbGVhc3QgaW4gcGFydCBhbmQgb24gc29tZSBzeXN0ZW1zKToKKworCS0gTUlCLTIgIEdlbmVyYWwgbmV0d29yayBzdGF0aXN0aWNzIChSRkMgMTIxMykKKwktIFVDRCBhZ2VudCBleHRlbnNpb25zCisJCShwcm9jZXNzZXMsIGRpc2tzLCBtZW1vcnksIGxvYWQgYXZlcmFnZSwKKwkJIHNoZWxsIGNvbW1hbmRzLCBlcnJvciBoYW5kbGluZykKKwktIEhvc3QgUmVzb3VyY2VzIChSRkMgMTUxNCBhbmQgMjc5MCkKKwktIFNOTVB2MyBNSUJTIChSRkNzIDI1NzEtNikKKworICBUaGUgU05NUHYyIFBhcnR5IGFuZCBNYW5hZ2VyLXRvLU1hbmFnZXIgTUlCcyAoUkZDcyAxNDQ3ICYgMTQ1MSkgaGF2ZSBiZWVuCisgIHdpdGhkcmF3bi4KKworCisKKzxhIG5hbWU9IldoYXRfcHJvdG9jb2xzX2FyZV9zdXBwb3J0ZWRfIj4KK1doYXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGFnZW50IHN1cHBvcnRzIGFsbCB0aHJlZSBjdXJyZW50IHZlcnNpb25zIG9mIFNOTVAgKHYxLCB2MmMgYW5kIHYzKSwKKyAgb3ZlciBib3RoIFVEUCBhbmQgVENQIHRyYW5zcG9ydHMsIGFzIHdlbGwgYXMgYSBTTVVYIChSRkMgMTIyNykgbWFzdGVyCisgIGFnZW50LCBBZ2VudFggKFJGQyAyMjU3ICkgaW4gYm90aCBtYXN0ZXIgYW5kIHN1YmFnZW50IHJvbGVzLCBhbmQgU05NUAorICBwcm94eWluZy4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2NvbmZpZ3VyZV90aGVfYWdlbnRfIj4KK0hvdyBkbyBJIGNvbmZpZ3VyZSB0aGUgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhhdCBkZXBlbmRzIG9uIHdoYXQgeW91IHdhbnQgaXQgdG8gZG8uICBTZWUgdGhlIHNubXBkLmNvbmYoNSkgbWFudWFsCisgIHBhZ2UgZm9yIHRoZSBwb3NzaWJpbGl0aWVzLgorCisgIFlvdSBjYW4gYWxzbyBydW4gdGhlICJzbm1wY29uZiIgcGVybCBzY3JpcHQgdG8gaGVscCB5b3UgY3JlYXRlIHRoaXMKKyAgZmlsZS4gIFN0YXJ0IG9mZiB3aXRoICdzbm1wY29uZiAtZyBiYXNpY19zZXR1cCcgdG8gZ2V0IHlvdSBnb2luZy4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2FkZF9hX01JQl90b190aGVfYWdlbnRfIj4KK0hvdyBkbyBJIGFkZCBhIE1JQiB0byB0aGUgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIb3cgZG8gSSBhZGQgZnVuY3Rpb25hbGl0eT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV2hpbGUgc2ltcGx5IGFkZGluZyBhIGZpbGUgdG8gdGhlIE1JQiBkaXJlY3RvcnkgKGFuZCBwb3NzaWJseSB0d2Vha2luZworICB0aGUgbGlzdCBvZiBNSUJzIHRvIGxvYWQpIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSB0b29scywgdW5mb3J0dW5hdGVseQorICBleHRlbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGFnZW50IHRvIGluY2x1ZGUgdGhpcyBpcyBub3Qgc28gc2ltcGxlLgorICBJbiBmYWN0LCB0aGUgYWdlbnQgbWFrZXMgbGl0dGxlIG9yIG5vIHVzZSBvZiB0aGVzZSBmaWxlcywgYW5kIHdpbGwgd29yaworICBxdWl0ZSBoYXBwaWx5IHdpdGhvdXQgdGhlbS4gIEFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5bnRheCBhbmQKKyAgc2NvcGUgb2YgdGhlIHZhcmlhYmxlcyBzdXBwb3J0ZWQgaXMgaGFyZHdpcmVkIGludG8gdGhlIGltcGxlbWVudGF0aW9uCisgIG9mIHRoZSBhZ2VudC4KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgYWx0ZXJuYXRpdmUgd2F5cyB0byBhZGQgZnVuY3Rpb25hbGl0eSBmb3IgYSBuZXcKKyAgTUlCIHRvIHRoZSBhZ2VudC4KKworICBGaXJzdGx5LCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBhZ2VudCBkaXN0cmlidXRpb24gYWxyZWFkeSBpbmNsdWRlcworICB0aGUgZGVzaXJlZCBmdW5jdGlvbmFsaXR5LCBidXQgdGhpcyBoYXMgc2ltcGx5IG5vdCBiZWVuIGNvbmZpZ3VyZWQgaW4KKyAgdG8gdGhlIHJ1bm5pbmcgdmVyc2lvbi4gIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgY29uZmlndXJlIG9wdGlvbgorCQktLXdpdGgtbWliLW1vZHVsZXM9Imxpc3QiCisgICh3aGVyZSAibGlzdCIgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGVzIHRvIGluY2x1ZGUpIHRoZW4KKyAgcmVjb21waWxpbmcgdGhlIGFnZW50LgorICBOb3RlIHRoYXQgc29tZSBmdW5jdGlvbmFsaXR5IGNvbmNlcm5lZCB3aXRoIG1vbml0b3JpbmcgYW5kIG1hbmFnaW5nCisgIHVuaXggaG9zdHMgaXMgaW5jbHVkZWQgaW4gdGhlIFVDRCBleHRlbnNpb24gbW9kdWxlcywgd2hpY2ggYXJlIGxvY2F0ZWQKKyAgd2l0aGluIHRoZSAncHJpdmF0ZScgYnJhbmNoIG9mIHRoZSBNSUIgdHJlZS4gIFRoaXMgaXMgY292ZXJlZCBpbiBhIGxhdGVyCisgIHF1ZXN0aW9uIGluIHRoaXMgRkFRLgorCisgIFNlY29uZGx5LCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGFnZW50IHRvIHJ1biBjb21tYW5kcyBvciBzaGVsbCBzY3JpcHRzCisgIGluIHJlc3BvbnNlIHRvIHF1ZXJpZXMuICBUaGVzZSBjYW4gb2J0YWluIGFuZCByZXBvcnQgdGhlIG5lY2Vzc2FyeQorICBpbmZvcm1hdGlvbiwgb3IgcGVyZm9ybSBhY3Rpb25zIGFzIHJlcXVpcmVkLgorICBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMgYXJlIHByb3ZpZGVkIGluIHRoZSBzbm1wZCg4KSBhbmQKKyAgc25tcGQuY29uZig1KSBtYW51YWwgcGFnZXMsIGFuZCB0aGUgRVhBTVBMRS5jb25mIGZpbGUuCisgIFRoaXMgaXMga25vd24gYXMgInBhc3MtdGhyb3VnaCIgc3VwcG9ydC4KKworICBUaGlyZGx5LCBpdCBtYXkgYmUgcG9zc2libGUgdG8gbGluayBhbm90aGVyIGFnZW50ICh3aGljaCBhbHJlYWR5CisgIHN1cHBvcnRzIHRoZSBkZXNpcmVkIE1JQiksIGFzIGEgInN1YmFnZW50IiBvZiB0aGUgTmV0LVNOTVAgbWFzdGVyCisgIChvciB2aWNlIHZlcnNhKS4gIFRoZSBwb3NzaWJpbGl0aWVzIGhlcmUgYXJlIFNNVVgsIEFnZW50WCBvciBwcm94aWVkCisgIFNOTVAgKHNlZSB0aGUgbmV4dCBxdWVzdGlvbiBidXQgb25lKS4KKworICBGaW5hbGx5LCB0aGUgYWdlbnQgaXRzZWxmIGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgTUlCCisgIGdyb3VwcywgYnkgd3JpdGluZyB0aGUgbmVjZXNzYXJ5IEMgY29kZSwgYW5kIGluY2x1ZGluZyB0aGlzIHdpdGhpbgorICB0aGUgbWFpbiBhZ2VudCAtIGVpdGhlciBzdGF0aWNhbGx5IGNvbXBpbGVkIGluLCBvciBkeW5hbWljYWxseSBsb2FkZWQuCisgIFRoaXMgaXMgY292ZXJlZCBmdXJ0aGVyIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKyAgICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gdmlzaWJsZSBkaWZmZXJlbmNlIGJldHdlZW4gJ3Bhc3MtdGhyb3VnaCcKKyAgTUlCIHN1cHBvcnQsIHN1YmFnZW50cywgYW5kIG1vZHVsZXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBtYWluIGFnZW50CisgIGl0c2VsZi4gVG9vbHMgcXVlcnlpbmcgdGhlIGFnZW50IHdpbGwgc2VlIGEgc2luZ2xlIE1JQiBzdHJ1Y3R1cmUuCisgCisKKworPGEgbmFtZT0iV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fX2V4ZWNfX19fc2hfX2FuZF9fcGFzc19fIj4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdleGVjJywgJ3NoJyBhbmQgJ3Bhc3MnPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICdleGVjJyB3aWxsIGZvcmsgb2ZmIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBhbmQgcmV0dXJuIHRoZSBleGl0IHN0YXR1cworICBhbmQvb3IgdGhlIG91dHB1dC4gIEFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBjb21tYW5kLgorCisgICAgJ3NoJyBpcyBzaW1pbGFyLCBidXQgaW52b2tlcyBhIHNoZWxsIHRvIHJ1biB0aGUgY29tbWFuZCBsaW5lIGdpdmVuLgorICBUaGlzIG1lYW5zIHRoYXQgcXVvdGVkIGFyZ3VtZW50cyB3aWxsIGJlIHJlY29nbmlzZWQgYXMgc3VjaCwgYW5kIGFsc28KKyAgYWxsb3dzIHJlZGlyZWN0aW9uLCBhbmQgb3RoZXIgc2ltaWxhciBzaGVsbCBpbnRlcnByZXRhdGlvbi4KKworICBOZWl0aGVyIG9mIHRoZXNlIG1lY2hhbmlzbXMgcmVxdWlyZSB0aGUgY29tbWFuZCB0byBoYXZlIGFueSBrbm93bGVkZ2UKKyAgb2YgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGluIHRoaXMgbWFubmVyLiAgTm90ZSB0aGF0IHJldHVybgorICB2YWx1ZXMgYXJlIGNhY2hlZCB3aXRoaW4gdGhlIGFnZW50IGZvciAzMCBzZWNvbmRzLCByYXRoZXIgdGhhbiBpbnZva2luZworICB0aGUgY29tbWFuZCBmb3IgZXZlcnkgcmVxdWVzdC4KKworCisgICAgJ3Bhc3MnIGlzIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSBmb3IgZXh0ZW5kaW5nIHRoZSBhZ2VudCwgYW5kIHRoZQorICBjb21tYW5kIGdpdmVuIHdpbGwgYmUgaW52b2tlZCBmb3IgYW55IHJlcXVlc3Qgd2l0aGluIHRoZSBzcGVjaWZpYyBNSUIKKyAgc3VidHJlZS4gIERldGFpbHMgb2YgcHJlY2lzZWx5IGhvdyB0aGlzIGNvbW1hbmQgd2lsbCBiZSBjYWxsZWQgaW4KKyAgdmFyaW91cyBjaXJjdW1zdGFuY2VzIGlzIGdpdmVuIGluIHRoZSAnc25tcGQuY29uZig1KScgbWFuIHBhZ2UuCisKKyAgICAncGFzcy1wZXJzaXN0JyBpcyBzaW1pbGFyLCBidXQgdGhlIGNvbW1hbmQgd2lsbCBjb250aW51ZSBydW5uaW5nCisgIGV2ZW4gb25jZSB0aGUgaW5pdGlhbCByZXF1ZXN0IGhhcyBiZWVuIGFuc3dlcmVkLgorCisgIFNlZSAnc25tcGQuY29uZig1KScgZm9yIG1vcmUgZGV0YWlscy4KKworICAKKworPGEgbmFtZT0iV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fQWdlbnRYX19TTVVYX2FuZF9wcm94aWVkX1NOTVBfIj4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEFnZW50WCwgU01VWCBhbmQgcHJveGllZCBTTk1QPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEFsbCB0aHJlZSBhcmUgcHJvdG9jb2xzIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSB0d28gb3IgbW9yZSBhZ2VudHMKKyAgYXBwZWFyIGFzIG9uZSB0byB0aGUgcXVlcnlpbmcgYXBwbGljYXRpb24uICBJbiBlYWNoIGNhc2UsIG9uZSBhZ2VudAorICB0YWtlcyB0aGUgcm9sZSBvZiAibWFzdGVyIiwgYW5kIGRlbGVnYXRlcyByZXF1ZXN0cyB0byBvbmUgb2YgdGhlIG90aGVycworICBhcyBhbmQgd2hlcmUgdGhpcyBpcyBhcHByb3ByaWF0ZS4gIFRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0gbWFpbmx5CisgIHJlbGF0ZSB0byBob3cgZGF0YSBpcyByZXByZXNlbnRlZCwgYW5kIHRoZSBtZWNoYW5pc21zIGZvciBjb21tdW5pY2F0aW9uCisgIGJldHdlZW4gbWFzdGVyIGFuZCBzdWJhZ2VudHMuCisKKyAgICBTTVVYIGFuZCBwcm94eSBTTk1QIGJvdGggZXNzZW50aWFsbHkgdXNlIHRoZSBzdGFuZGFyZCBTTk1QIHBhY2tldCBmb3JtYXQuCisgIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBhIHByb3h5IFNOTVAgc3ViYWdlbnQgbmVlZCBub3QgYmUgYXdhcmUgdGhhdAorICBpdCBpcyBhY3RpbmcgaW4gc3VjaCBhIHJvbGUuICBJdCB0eXBpY2FsbHkgbGlzdGVucyBvbiBhIG5vbi1zdGFuZGFyZCBwb3J0LAorICBhbmQgc2ltcGx5IHJlY2VpdmVzIHJlcXVlc3RzIGFzIHVzdWFsLCBmb3J3YXJkZWQgZnJvbSB0aGUgbWFzdGVyIGFnZW50LiAKKyAgVGhlIG1haW4gaXNzdWUgdG8gYmUgYXdhcmUgb2YgaXMgdGhhdCBzdWNoIHJlcXVlc3RzIHdpbGwgdXN1YWxseSBhcHBlYXIKKyAgdG8gY29tZSBmcm9tIHRoZSBsb2NhbCBob3N0LCBhbmQgdGhpcyBtYXkgYWZmZWN0IGhvdyB0aGUgYWNjZXNzIGNvbnRyb2wKKyAgbWVjaGFuaXNtcyBuZWVkIHRvIGJlIHNldCB1cC4KKworICAgIFNNVVggdXNlcyBhIHNpbWlsYXIgcGFja2V0IGZvcm1hdCwgYnV0IHRoZSBzdWJhZ2VudCAicmVnaXN0ZXJzIiB3aXRoCisgIHRoZSBtYXN0ZXIgYWdlbnQsIHByb3ZpZGluZyBhIHN1aXRhYmxlIHBhc3N3b3JkLiAgVGhlIE5ldC1TTk1QIChhbmQgVUNEKQorICBhZ2VudCBpbmNsdWRlcyB0aGUgcG9zc2liaWxpdHkgb2YgYWN0aW5nIGFzIGEgU01VWCBtYXN0ZXIgYWdlbnQsIGJ1dCB0aGUKKyAgc3VpdGUgZG9lcyBub3QgaW5jbHVkZSBhIHN1YmFnZW50IEFQSS4gICBOb3RlIHRoYXQgdGhlIFNNVVggcHJvdG9jb2wgaGFzCisgIGVzc2VudGlhbGx5IGJlZW4gc3VwZXJjZWRlZCBieSBBZ2VudFgsIGJ1dCBpcyBzdGlsbCBwcm92aWRlZCBpbiBvcmRlciB0bworICBzdXBwb3J0IGV4aXN0aW5nIFNNVVggc3ViYWdlbnRzLgorICAgIFNlZSB0aGUgZmlsZSAnYWdlbnQvbWliZ3JvdXAvUkVBRE1FLnNtdXgnIGZvciBkZXRhaWxzLgorCisgICAgQWdlbnRYIHVzZXMgYSBtb3JlIGNvbXBhY3QgKGFuZCBzaW1wbGVyKSBwYWNrZXQgZm9ybWF0LCB3aXRoIGEgcmljaGVyCisgIHJhbmdlIG9mIGFkbWluaXN0cmF0aXZlIGNvbW1hbmRzLCBhbmQgcHJvdmlkZXMgYSBtb3JlIGZsZXhpYmxlIGFuZCByZWxpYWJsZQorICBleHRlbnNpb24gbWVjaGFuaXNtLiAgVGhlIE5ldC1TTk1QIGFnZW50IGNhbiBiZSB1c2VkIGluIGJvdGggbWFzdGVyIGFuZAorICBzdWJhZ2VudCByb2xlcywgYW5kIHRoZSBhZ2VudCBsaWJyYXJ5IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW1iZWQgYW4gQWdlbnRYCisgIHN1YmFnZW50IHdpdGhpbiBhbm90aGVyIGFwcGxpY2F0aW9uLgorICAgIFNlZSB0aGUgZmlsZSAnUkVBRE1FLmFnZW50eCcgZm9yIGRldGFpbHMuCisKKyAgTm90ZSB0aGF0IHN1cHBvcnQgZm9yIFNNVVggaXMgbm90IGNvbmZpZ3VyZWQgaW4gYnkgZGVmYXVsdC4gIFlvdSB3aWxsCisgIG5lZWQgdG8gcnVuIGNvbmZpZ3VyZSB3aXRoIHRoZSBvcHRpb24KKworCQktLXdpdGgtbWliLW1vZHVsZXM9c211eAorCisgIFN0YXJ0aW5nIGZyb20gcmVsZWFzZSA0LjIuMSwgQWdlbnRYIHN1cHBvcnQgaXMgbm93IGluY2x1ZGVkIGJ5IGRlZmF1bHQsCisgIGJ1dCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGFjdGl2YXRlZCBpbiB0aGUgbWFzdGVyIGFnZW50LiAgRG8gdGhpcyBieQorICBhZGRpbmcgdGhlIGxpbmUKKworCQltYXN0ZXIgYWdlbnR4CisKKyAgdG8gdGhlIHNubXBkLmNvbmYgZmlsZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGFnZW50LiAgTm90ZSB0aGF0IHRoZXJlIGFyZQorICBhIG51bWJlciBvZiBrbm93biBwcm9ibGVtcyB3aXRoIHRoZSBBZ2VudFggc3VwcG9ydCBpbiB0aGUgNC54IGxpbmUsIGFuZAorICB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCBvbiBwcm9kdWN0aW9uIHN5c3RlbXMuICBUaGUgNS4wIEFnZW50WCBzdXBwb3J0CisgIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgaW1wcm92ZWQsIGFuZCBwcm9kdWN0aW9uIHVzZSBpcyBsZXNzIGZvb2xoYXJkeS4KKyAgICBTZWUgUkVBRE1FLmFnZW50eCBmb3IgZGV0YWlscy4KKworCisKKzxhIG5hbWU9IldoYXRfYWJvdXRfX2RsbW9kX19fX3doYXRfc190aGF0X2Fib3V0XyI+CitXaGF0IGFib3V0ICdkbG1vZCcgLSB3aGF0J3MgdGhhdCBhYm91dD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgYXJlIGEgbWVhbnMgb2YgaW5jbHVkaW5nIGEgTUlCIGltcGxlbWVudGF0aW9uCisgIG1vZHVsZSB3aXRoaW4gdGhlIG1haW4gU05NUCBhZ2VudCAob3IgYW4gQWdlbnRYIHN1YmFnZW50KSB3aXRob3V0IG5lZWRpbmcKKyAgdG8gcmUtY29tcGlsZSBhbmQgcmUtbGluayB0aGUgYWdlbnQgYmluYXJ5LiAgSW5zdGVhZCwgZGV0YWlscyBvZiB0aGUKKyAgbW9kdWxlKHMpIHRvIGxvYWQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhlIGFnZW50CisgIGxvY2F0ZXMgdGhlIGZpbGVzIGxpc3RlZCwgYW5kIG1lcmdlcyB0aGVtIGluIGF0IHJ1biB0aW1lLgorCisgIFNlZSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvZGxtb2QvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKworPGEgbmFtZT0iV2hpY2hfc2hvdWxkX0lfdXNlXyI+CitXaGljaCBzaG91bGQgSSB1c2U/CistLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGF0J3MgYSBkaWZmaWN1bHQgcXVlc3Rpb24uCisKKyAgQ29tcGFyaW5nIHRoZSB0aHJlZSBwcm90b2NvbHMsIFNOTVAgd2FzIG5vdCBvcmlnaW5hbGx5IGRlc2lnbmVkCisgIGFzIGFuIGludGVybmFsIHN1YmFnZW50LWNvbW11bmljYXRpb24gcHJvdG9jb2wsIGFuZCB0aGVyZSBhcmUKKyAgY2VydGFpbiBhcmNoaXRlY3R1cmFsIGxpbWl0YXRpb25zIHRvIFNNVVgsIHdoaWNoIHdlcmUgYWRkcmVzc2VkCisgIGFzIHBhcnQgb2YgdGhlIGRlc2lnbiBvZiBBZ2VudFguICBUaGVzZSBpbmNsdWRlIHN1Y2ggYXNwZWN0cyBhcworICByZWxpYWJsZSBoYW5kbGluZyBvZiBTRVQgcmVxdWVzdHMgKHBhcnRpY3VsYXJseSBpbiB0aGUgZmFjZSBvZgorICBmYWlsdXJlcyksIGEgY29tbW9uIHZhbHVlIGZvciBzeXNVcFRpbWUsIGFuZCBhIG1lY2hhbmlzbSBmb3IKKyAgc2hhcmluZyB0YWJsZXMgYWNyb3NzIG11bHRpcGxlIHN1YmFnZW50cy4KKyAgICBTbyBmcm9tIGEgcHVyZWx5IGZ1bmN0aW9uYWwgcG9pbnQgb2YgdmlldywgQWdlbnRYIGlzIHRoZSBtb3N0CisgIGFwcHJvcHJpYXRlIGNob2ljZSBmb3Igc3ViYWdlbnQgY29tbXVuaWNhdGlvbi4KKworICBJbiB0ZXJtcyBvZiBpbXBsZW1lbnRhdGlvbiwgU01VWCBpcyB0aGUgbW9zdCBtYXR1cmUgb2YgdGhlIHRocmVlLAorICBidXQgaXMgbm8gbG9uZ2VyIGJlaW5nIGFjdGl2ZWx5IG1haW50YWluZWQuICBUaGUgb3JpZ2luYWwgYXV0aG9yCisgIGhhcyBtb3ZlZCBvbiwgYW5kIHRoZSBjdXJyZW50IGRldmVsb3BlcnMgZG9uJ3QgdXNlIHRoaXMgZmFjaWxpdHkuCisgIEl0IGFsc28gb25seSBpbmNsdWRlcyBtYXN0ZXIgYWdlbnQgc3VwcG9ydCAtIHRoZSBwYWNrYWdlIGRvZXMgbm90CisgIHByb3ZpZGUgYSBTTVVYIHN1Yi1hZ2VudCBBUEkuCisgICAgVGhlIEFnZW50WCBzdXBwb3J0IGluIHRoZSA0LnggbGluZSBoYXMgYSBudW1iZXIgb2Yga25vd24gcHJvYmxlbXMsCisgIGFuZCBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBmcm9udC1saW5lIHNpdHVhdGlvbnMgKHRob3VnaCBpdCdzCisgIHByb2JhYmx5IHN1ZmZpY2llbnRseSBzdGFibGUgYW5kIGZ1bmN0aW9uYWwgZm9yIHNpbXBsZSBkYXktdG8tZGF5CisgIHVzZSkuICBUaGUgNS4wIGFnZW50IGhhcyBzZWVuIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGRldmVsb3BtZW50LAorICBhbmQgaXMgYSBtdWNoIG1vcmUgcmVsaWFibGUgYmVhc3QuCisgICAgQmVhciBpbiBtaW5kIHRoYXQgdGhlIEFnZW50WCBhbmQgcHJveHkgU05NUCBpbXBsZW1lbnRhdGlvbnMgYXJlCisgIHJlbGF0aXZlbHkgbmV3IGNvZGUsIHNvIGhhdmUgbm90IHJlY2VpdmVkIHRoZSBzYW1lIGxldmVsIG9mIGFjdGl2ZQorICBzZXJ2aWNlIHRoYXQgdGhlIGNvcmUgYWdlbnQgaGFzLiAgQnV0IHdpdGggdGhhdCBjYXZlYXQsIGVpdGhlciBvZgorICB0aGVzZSBvcHRpb25zIHNob3VsZCBiZSBzdWl0YWJsZSBmb3IgbW9zdCB1c2UuCisKKyAgICBUaGlzIGRlY2lzaW9uIHdpbGwgcHJvYmFibHkgYmUgZGljdGF0ZWQgYnkgZXh0ZXJuYWwgY29uc2lkZXJhdGlvbnMKKyAgKGkuZS4gdGhlIG90aGVyIGFnZW50cyB5b3UgbmVlZCB0byBjb21iaW5lIHdpdGgpLiAgSWRlYWxseSwgeW91CisgIHNob3VsZCBiZSBsb29raW5nIHRvd2FyZHMgQWdlbnRYLCBidXQgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlLgorCisgIER5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHNlcnZlIGEgc29tZXdoYXQgZGlmZmVyZW50IHB1cnBvc2UsCisgIGFuZCBhcmUgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyB0aGUgaW5kaXZpZHVhbCBNSUIgaW1wbGVtZW50YXRpb24KKyAgbW9kdWxlcyBhcmUgbG9jYXRlZC4gIFRoZXNlIGNhbiBiZSBjb21iaW5lZCB3aXRoIGVpdGhlciBhICJwdXJlIFNOTVAiCisgIG1vZGVsLCBhbiBBZ2VudFggc3ViYWdlbnQgb3IgYSBwcm94aWVkIFNOTVAgYWdlbnQuICBUaGV5IHdpbGwgaW52b2x2ZQorICBhIHNsaWdodGx5IGdyZWF0ZXIgbG9hZCBvbiBhZ2VudCBzdGFydC11cCAocGx1cyBhbiBleHRyYSBsZXZlbCBvZgorICBjb21wbGV4aXR5IGlmIHRoaW5ncyBnbyB3cm9uZykgLSBiYWxhbmNlZCBhZ2FpbnN0IHRoZSBhYmlsaXR5IHRvCisgIGF2b2lkIHJlLWNvbXBpbGluZyBhbmQgcmUtbGlua2luZyBhIHdvcmtpbmcgYmluYXJ5LgorCisgICAgTm90ZSB0aGF0IGFzIGZhciBhcyBpbmRpdmlkdWFsIE1JQiBtb2R1bGVzIGFyZSBjb25jZXJuZWQsIHRoZQorICBwcm90b2NvbCB1c2VkIHRvIHRyYW5zcG9ydCB0aGUgcmVxdWVzdCBpcyBtb3JlIG9yIGxlc3MgaXJyZWxldmFudC4KKyAgVGhlIHNhbWUgaW5mb3JtYXRpb24gaXMgYmVpbmcgcmVxdWVzdGVkIChvciBzZXQpIGVhY2ggdGltZSwgc28KKyAgYSBNSUIgbW9kdWxlIG91Z2h0IHRvIGJlIHByb3RvY29sLWluZGVwZW5kZW50LiAgVGhpcyB3YXMgb25lIG9mCisgIHRoZSBkZXNpZ24gYWltcyBvZiB0aGUgQWdlbnRYIHN1cHBvcnQsIGFuZCB0aGUgZXhhY3Qgc2FtZSBtb2R1bGUKKyAgY29kZSBjYW4gYmUgaW5jbHVkZWQgYXMgcGFydCBvZiBhIHB1cmUtU05NUCBtYXN0ZXIgYWdlbnQsIG9yIGFuCisgIEFnZW50WCBzdWJhZ2VudCwgZWl0aGVyIGNvbXBpbGVkIGluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZCB3aXRoIG5vCisgIG1vZGlmaWNhdGlvbnMgbmVlZGVkIHRvIHRoZSBNSUIgbW9kdWxlIGNvZGUgaXRzZWxmLgorCisKKworPGEgbmFtZT0iQ2FuX0lfdXNlX0FnZW50WF93aGVuX3J1bm5pbmdfdW5kZXJfV2luZG93c18iPgorQ2FuIEkgdXNlIEFnZW50WCB3aGVuIHJ1bm5pbmcgdW5kZXIgV2luZG93cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBZZXMsIGJ1dCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIGJlIGF3YXJlIG9mLgorCisgIEZpcnN0bHksIGJ5IGRlZmF1bHQgdGhlIEFnZW50WCBtYXN0ZXIgbGlzdGVucyBvbiB0aGUgVW5peCBkb21haW4KKyAgc29ja2V0ICcvdmFyL2FnZW50eC9tYXN0ZXInLCB3aGljaCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cy4KKyAgWW91J2xsIG5lZWQgdG8gdGVsbCBpdCB0byBsaXN0ZW4gb24gYSBUQ1AgcG9ydCwgZWl0aGVyIGJ5IHVzaW5nCisgIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uICIteCBsb2NhbGhvc3Q6NzA1IiwgIG9yIGJ5IGFkZGluZyB0aGUKKyAgZGlyZWN0aXZlICJhZ2VudHhBZGRyZXNzIGxvY2FsaG9zdDo3MDUiIHRvIHRoZSBzbm1wZC5jb25mIGZpbGUuCisKKyAgU2Vjb25kbHksIGJlIGF3YXJlIHRoYXQgdGhlIHNlY3VyaXR5IG9mIEFnZW50WCBjb25uZWN0aXZpdHkgaXMgbm90CisgIHBhcnRpY3VsYXJseSBzdHJvbmcuICBUaGUgZXhhbXBsZXMgZ2l2ZW4gaGVyZSB3b3VsZCBhbGxvdyBhbnkgcHJvY2VzcworICBydW5uaW5nIG9uIHRoZSBsb2NhbCBtYWNoaW5lIHRvIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudC4gIFRoZQorICBtb3JlIG9idmlvdXMgc2V0dGluZ3MgIi14IDcwNSIgb3IgImFnZW50eEFkZHJlc3MgNzA1IiB3b3VsZCBhbGxvdworICBhIHN5c3RlbSAqYW55d2hlcmUqIG9uIHRoZSBuZXR3b3JrIChvciBldmVuIGZyb20gcmVtb3RlIG5ldHdvcmtzKSB0bworICByZWdpc3RlciBhcyBhbiBBZ2VudFggc3ViYWdlbnQuICBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQgdG8KKyAgaGlqYWNrIHRoZSBhZ2VudCwgb3IgcHJvdmlkZSBmYWxzZSBpbmZvcm1hdGlvbi4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9ydW5fQWdlbnRYX3dpdGhfYV9kaWZmZXJlbnRfc29ja2V0X2FkZHJlc3NfIj4KK0hvdyBjYW4gSSBydW4gQWdlbnRYIHdpdGggYSBkaWZmZXJlbnQgc29ja2V0IGFkZHJlc3M/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHR3byBzaWRlcyB0byBhbiBBZ2VudFggY29ubmVjdGlvbiwgYW5kIHRoZXkgbmVlZCB0bworICBhZ3JlZSBhYm91dCB3aGljaCBzb2NrZXQgYWRkcmVzcyB0byB1c2UuICBTbyBpZiB5b3Ugd2FudCB0byB1c2UKKyAgYSBkaWZmZXJlbnQgc29ja2V0LCB5b3UgbmVlZCB0byBjb25maWd1cmUgYm90aCBzaWRlcyBhY2NvcmRpbmdseS4KKworICBGb3IgdGhlIE5ldC1TTk1QIG1hc3RlciBhZ2VudCwgdGhpcyBpcyBkb25lIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUKKyAgb3B0aW9uICcteCcuICBUaGUgY29tbWFuZAorCQkic25tcGQgLXggbG9jYWxob3N0OjcwNSAuLi4uIgorICB3b3VsZCBzdGFydCB0aGUgYWdlbnQgbGlzdGVuaW5nIG9uIHRoZSBUQ1AgcG9ydCA3MDUgZm9yIGNvbm5lY3Rpb25zCisgIGZyb20gdGhlIGxvY2FsIHN5c3RlbS4KKworICBUaGUgbWFpbiBOZXQtU05NUCBhZ2VudCBjYW4gYWxzbyBiZSBydW4gaW4gYSAic3ViYWdlbnQiIG1vZGUsIGFuZAorICB0aGlzIHVzZXMgdGhlIHNhbWUgY29tbWFuZC1saW5lIG9wdGlvbiB0byBzcGVjaWZ5IGEgZGlmZmVyZW50CisgIEFnZW50WCBzb2NrZXQuICBTbworCQkic25tcGQgLVggLXggbG9jYWxob3N0OjcwNSAuLi4uIgorICB3b3VsZCBzdGFydCBpdCBhcyBhIHN1YmFnZW50LCBhbmQgY29ubmVjdCB0byB0aGUgbWFzdGVyIGFnZW50CisgIGxpc3RlbmluZyBvbiBUQ1AgcG9ydCA3MDUgb24gdGhlIHNhbWUgc3lzdGVtLgorCisgIEEgc3ViYWdlbnQgcnVubmluZyBlbWJlZGRlZCB3aXRoaW4gc29tZSBvdGhlciBhcHBsaWNhdGlvbiB3aWxsCisgIHR5cGljYWxseSBub3QgdW5kZXJzdGFuZCB0aGUgc2FtZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gIFRoaXMKKyAgd2lsbCBuZWVkIHRvIHNldCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb2dyYW1tYXRpY2FsbHkuCisgIEZvciBleGFtcGxlLCB0aGUgZXhhbXBsZSBzdWJhZ2VudCBkcml2aW5nIGNvZGUgZnJvbSB0aGUgTmV0LVNOTVAKKyAgInN1YmFnZW50IHByb2dyYW0iIHR1dG9yaWFsIChvbiB0aGUgcHJvamVjdCB3ZWIgcGFnZXMpIGNvdWxkCisgIGJlIG1hZGUgdG8gY29ubmVjdCB0byB0aGUgc2FtZSBUQ1AgcG9ydCBieSBhZGRpbmcgdGhlIGxpbmUKKyAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VULCAibG9jYWxob3N0OjcwNSIpOworICBiZWZvcmUgdGhlICdpbml0X2FnZW50JyBjYWxsLgorCisgIEhvd2V2ZXIsIHNlZSB0aGUgbWVudGlvbiBvZiBBZ2VudFggc2VjdXJpdHkgKG9yIHRoZSBsYWNrIG9mIGl0ISkKKyAgaW4gdGhlIHByZXZpb3VzIGVudHJ5LgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2NvbWJpbmVfdHdvX2NvcGllc19vZl90aGVfX21pYl9fX3RyZWVfZnJvbV9zZXBhcmF0ZV9zdWJhZ2VudHNfIj4KK0hvdyBjYW4gSSBjb21iaW5lIHR3byBjb3BpZXMgb2YgdGhlICdtaWIyJyB0cmVlIGZyb20gc2VwYXJhdGUgc3ViYWdlbnRzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXaXRoIHRoZSA0LnggbGluZSBhZ2VudCwgeW91IGNhbid0LiAgU29ycnkgYWJvdXQgdGhhdC4KKworICBXaXRoIHRoZSA1LjAgYWdlbnQsIHRoaXMgaXMgcG9zc2libGUgYnkgdXNpbmcgdGhlIFNOTVB2MyBjb250ZXh0IHN0cmluZworICB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHBhcmFsbGVsIE1JQiB0cmVlcy4gIFRoaXMgY2FuIGJlIHNldCB1cCBmb3IgYW4KKyAgaW5kaXZpZHVhbCBNSUIgaW1wbGVtZW50YXRpb24gbW9kdWxlIHdoZW4gaXQgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZQorICBtYWluIGFnZW50IGZyYW1ld29yayAoZWl0aGVyIGRpcmVjdGx5LCBvciB2aWEgQWdlbnRYKS4gIEl0IGNhbiBhbHNvCisgIGJlIHNldCB1cCBmb3IgYSBwcm94aWVkIHN1YmFnZW50IGFzIHBhcnQgb2YgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24KKyAgZW50cnkgKHNlZSAnc25tcGQuY29uZig1KScpLgorICAgIFRoaXMgZmFjaWxpdHkgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIFNOTVB2MSBvciBTTk1QdjJjCisgIHJlcXVlc3RzIChhbHRob3VnaCBpdCBvdWdodCB0byBiZSBwb3NzaWJsZSB0byB1c2UgdGhlIGNvbW11bml0eQorICBzdHJpbmcgaW4gYSBzaW1pbGFyIHdheSkuCisKKyAgICBBbm90aGVyIHdheSB0byBoYW5kbGUgdGhpcyB3b3VsZCBiZSB0byB0d2VhayBvbmUgb2YgdGhlIHN1YmFnZW50cyB0bworICB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIChub24tc3RhbmRhcmQpIE9JRCBhc3NpZ25tZW50cyAtIHBlcmhhcHMgYnkKKyAgcmVsb2NhdGluZyB0aGUgd2hvbGUgb2YgdGhlIHN1YnRyZWUgdG8gYW5vdGhlciAocHJpdmF0ZSkgT0lELiAgVGhpcworICBpcyBub3QgaWRlYWwsIGJ1dCBzaG91bGQgd29yayB3aXRoIGFsbCBjb25maWd1cmF0aW9ucy4KKworCisKKzxhIG5hbWU9IldoYXRfdHJhcHNfYXJlX3NlbnRfYnlfdGhlX2FnZW50XyI+CitXaGF0IHRyYXBzIGFyZSBzZW50IGJ5IHRoZSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGFnZW50IHNlbmRzIGEgJ2NvbGRTdGFydCgwKScgdHJhcCB3aGVuIGl0IGZpcnN0IHN0YXJ0cyB1cCwgYW5kIGFuCisgIGVudGVycHJpc2Utc3BlY2lmaWMgdHJhcCAnbnNOb3RpZnlTaHV0ZG93bicgKG9yICd1Y2RTaHV0ZG93bicpIHdoZW4gaXQKKyAgc3RvcHMuICBJdCBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvIHNlbmQgYW4gJ2F1dGhlbnRpY2F0aW9uRmFpbHVyZSg0KScKKyAgdHJhcCB3aGVuIGl0IHJlY2VpdmVzIGFuIFNOTVB2MSByZXF1ZXN0IHVzaW5nIGFuIHVua25vd24gY29tbXVuaXR5IG5hbWUuCisgIFRoZSBOZXQtU05NUCBhZ2VudCBnZW5lcmF0ZXMgYW4gZW50ZXJwcmlzZS1zcGVjaWZpYyB0cmFwICduc05vdGlmeVJlc3RhcnQnCisgIChyYXRoZXIgdGhhbiB0aGUgc3RhbmRhcmQgJ2NvbGRTdGFydCgwKScgb3IgJ3dhcm1TdGFydCgxKScgdHJhcHMpIG9uCisgIHJlY2VpdmluZyBhIEhVUCBzaWduYWwgLSB0eXBpY2FsbHkgYWZ0ZXIgYmVpbmcgcmUtY29uZmlndXJlZC4KKworICAgIFRoZSBhZ2VudCBkb2VzIG5vdCBzZW5kICdsaW5rVXAnIG9yICdsaW5rRG93bicgdHJhcHMgYnkgZGVmYXVsdC4gIFRoZQorICBOZXQtU05NUCBhZ2VudCBjYW4gYmUgY29uZmlndXJlZCB0byBkbyB0aGlzIHVzaW5nIHRoZSAnbW9uaXRvcicgY29uZmlnCisgIGRpcmVjdGl2ZS4gIFNlZSB0aGUgJ3NubXBkLmNvbmYoNSknIG1hbiBwYWdlICh1bmRlciBESVNNQU4tRVZFTlQtTUlCKQorICBmb3IgZGV0YWlscyAoaW5jbHVkaW5nIHRoZSBuZWVkIGZvciBhbiAnYWdlbnRTZWNOYW1lJyBzZXR0aW5nKS4KKworICAgIFNpbWlsYXJseSwgaXQgZG9lcyBub3QgZ2VuZXJhdGUgdHJhcHMgYnkgZGVmYXVsdCB3aGVuIG9uZSBvZiB0aGUKKyAgbW9uaXRvcmVkIGNoYXJhY3RlcmlzdGljcyAoZGlzayB1c2FnZSwgcnVubmluZyBwcm9jZXNzZXMsIGV0YykgZW50ZXJzIG9yCisgIGxlYXZlcyBhbiBlcnJvciBzdGF0ZS4gIFRoaXMgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlICdkZWZhdWx0TW9uaXRvcnMnCisgIGNvbmZpZyBkaXJlY3RpdmUgKGFsc28gZG9jdW1lbnRlZCB1bmRlciBESVNNQU4tRVZFTlQtTUlCKS4gIE5vdGUgdGhhdAorICB0aGVzZSBmYWNpbGl0aWVzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSB2NSBOZXQtU05NUCBhZ2VudCwgYW5kIGFyZQorICBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB2NCBVQ0QgYWdlbnQuCisKKworCis8YSBuYW1lPSJXaGVyZV9hcmVfdGhlc2VfdHJhcHNfc2VudF90b18iPgorV2hlcmUgYXJlIHRoZXNlIHRyYXBzIHNlbnQgdG8/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgV2l0aCBhbGwgdGhlc2UgYWxlcnRzLCB0aGUgYWdlbnQgYWxzbyBuZWVkcyB0byBiZSBjb25maWd1cmVkIHdpdGgKKyAgKG9uZSBvciBtb3JlKSBkZXN0aW5hdGlvbnMgdG8gc2VuZCB0aGVtIHRvLCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mCisgIG5vdGlmaWNhdGlvbiAodjEgb3IgdjIgdHJhcCwgb3IgdjIgaW5mb3JtKSBhbmQgdGhlIGNvbW11bml0eSBuYW1lIHRvCisgIHVzZS4gIFRoaXMgdXNlcyB0aGUgc25tcGQuY29uZiBkaXJlY3RpdmVzICd0cmFwc2luaycsICd0cmFwMnNpbmsnIGFuZAorICAnaW5mb3Jtc2luaycgZm9yIHRoZSBkZXN0aW5hdGlvbiB0eXBlLCBhbmQgJ3RyYXBjb21tdW5pdHknIGZvciB0aGUKKyAgY29tbXVuaXR5IG5hbWUuICBTTk1QdjMgZGVzdGluYXRpb25zIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSBkaXJlY3RpdmUKKyAgJ3RyYXBzZXNzJy4gICBTZWUgdGhlICdzbm1wZC5jb25mKDUpJyBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKworICAgIE5vdGUgdGhhdCB0aGVzZSBkaXJlY3RpdmVzIGNvbnRyb2wgdGhlIHR5cGUgb2Ygbm90aWZpY2F0aW9uIHRoYXQgaXMKKyAgZ2VuZXJhdGVkLiAgVGhpcyBpcyBjb21wbGV0ZWx5IHNlcGFyYXRlIGZyb20gdGhlIHN0eWxlIG9mIEFQSSB1c2VkIHRvCisgIHJlcXVlc3QgdGhhdCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBzZW50LiAgSWYgYSBtb2R1bGUgaW52b2tlcyB0aGUKKyAgdjEtc3R5bGUgQVBJICdzZW5kX2Vhc3lfdHJhcCcsIHRoaXMgd2lsbCBzdGlsbCBzZW5kIFNOTVB2MiBub3RpZmljYXRpb25zCisgIHRvIGRlc3RpbmF0aW9ucyBjb25maWd1cmVkIHVzaW5nICd0cmFwMnNpbmsnIG9yICdpbmZvcm1zaW5rJyAoYW5kIHZpY2UKKyAgdmVyc2EpLgorCisgICAgQSBjb25maWd1cmF0aW9uIGJsb2NrIHN1Y2ggYXMKKworICAgICAgICB0cmFwc2luayAgIGxvY2FsaG9zdAorICAgICAgICB0cmFwMnNpbmsgIGxvY2FsaG9zdAorICAgICAgICBpbmZvcm1zaW5rIGxvY2FsaG9zdAorCisgIHdpbGwgcmVzdWx0IGluICp0aHJlZSogbm90aWZpY2F0aW9ucyBiZWluZyBzZW50IGZvciBlYWNoIGNhbGwgdG8KKyAgJ3NlbmRfZWFzeV90cmFwJyAob3IgJ3NlbmRfdjJ0cmFwJykuICBTZWUgJ3NubXBfdHJhcF9hcGkoMyknIGZvciBkZXRhaWxzLgorCisgICAgTm90ZSB0aGF0IGFsbCBub3RpZmljYXRpb25zIHdpbGwgYmUgc2VudCB0byBhbGwgZGVzdGluYXRpb25zLiAgVGhlCisgIGFnZW50IGRvZXMgbm90IChjdXJyZW50bHkpIHN1cHBvcnQgbm90aWZpY2F0aW9uIGZpbHRlcmluZy4KKyAKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfc2VuZF9hX3BhcnRpY3VsYXJfdHJhcF90b19zZWxlY3RlZF9kZXN0aW5hdGlvbnNfIj4KK0hvdyBjYW4gSSBzZW5kIGEgcGFydGljdWxhciB0cmFwIHRvIHNlbGVjdGVkIGRlc3RpbmF0aW9ucz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFdpdGggdGhlIHY0IFVDRCBhZ2VudCwgdGhpcyBpc24ndCBwb3NzaWJsZSAob3IgYXQgbGVhc3Qgbm90CisgIGVhc2lseSkuICBXaGVuIHlvdSByZXF1ZXN0IHRoZSBhZ2VudCB0byBnZW5lcmF0ZSBhIHRyYXAgKHVzaW5nCisgIGVpdGhlciAnc2VuZF92MnRyYXAnIG9yICdzZW5kX2Vhc3lfdHJhcCcpLCB0aGlzIHdpbGwgYmUgc2VudAorICB0byAqYWxsKiB0aGUga25vd24gZGVzdGluYXRpb25zLgorCisgICAgVGhlIHY1IE5ldC1TTk1QIGFnZW50IGludHJvZHVjZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlCisgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZSB3aGljaCBpcyBkZXNpZ25lZCB0byBhbGxvdyB0aGlzIHNvcnQgb2YKKyAgc2VsZWN0aXZlIHRyYXAgZGlyZWN0aW9uLCB0aG91Z2ggdGhpcyBpcyBub3QgY3VycmVudGx5IGFjdGl2ZS4KKyAgKFRoZSB0YWJsZXMgYXJlIHByZXNlbnQsIGJ1dCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGNvbnN1bHRlZCkKKyAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgZmFjaWxpdHkgd2lsbCBhcHBlYXIgb25jZSB0aGUKKyAgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIHByb3Blcmx5LgorCisKKworPGEgbmFtZT0iV2h5X2RvZXNfY2FsbGluZ19fc2VuZF92X3RyYXBfX2dlbmVyYXRlX2FuX1NOTVB2X190cmFwX19vcl92aWNlX3ZlcnNhX18iPgorV2h5IGRvZXMgY2FsbGluZyAnc2VuZF92MnRyYXAnIGdlbmVyYXRlIGFuIFNOTVB2MSB0cmFwIChvciB2aWNlIHZlcnNhKT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSB0d28gdmVyc2lvbnMgb2YgdGhlIHRyYXAgQVBJIGNhbGxzIGFyZSBjb25jZXJuZWQgd2l0aCBob3cKKyAgdGhlIHRyYXAgaXMgcmVwcmVzZW50ZWQgd2hlbiBpdCBpcyBwYXNzZWQgKmluKiB0byB0aGUgQVBJLCBub3QKKyAgdGhlIHZlcnNpb24gb2YgdGhlIHRyYXAgUERVIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBnZW5lcmF0ZWQgYnkKKyAgdGhlIGFnZW50LiAgVGhhdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIHRva2VuIHVzZWQKKyAgdG8gc2V0IHVwIHRoZSB0cmFwIGRlc3RpbmF0aW9uLgorCisgICAgUmVtZW1iZXIgdGhhdCBpbiBnZW5lcmFsLCBhbGwgdHJhcHMgYXJlIHNlbnQgdG8gYWxsIGRlc3RpbmF0aW9ucy4KKyAgVGhpcyBtZWFucyB0aGF0IGEgdHJhcCBzcGVjaWZpZWQgdXNpbmcgdGhlIFNOTVB2MSB0cmFwIHN5bnRheAorICBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIFNOTVB2MiBmb3JtYXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50CisgIHRvIGFuIFNOTVB2MiAob3IgU05NUHYzKSBkZXN0aW5hdGlvbi4gIFNpbWlsYXJseSwgYSB0cmFwIHNwZWNpZmllZAorICB1c2luZyB0aGUgU05NUHYyIHN5bnRheCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIFNOTVB2MSBmb3JtYXQKKyAgYmVmb3JlIGl0IGNhbiBiZSBzZW50IHRvIGFuIFNOTVB2MSBzaW5rLgorCisgICAgRXNzZW50aWFsbHksIHRoZSBBUEkgY2FsbCB0byB1c2UgZGVwZW5kcyBvbiB3aGF0IHlvdSBhc2tpbmcgZm9yLAorICB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgd2hhdCB0aGUgcmVjaXBpZW50cyB3aWxsIGFjdHVhbGx5IGdldCEKKyAgU2VlICdzbm1wX3RyYXBfYXBpKDMpJyBmb3IgYSBmdWxsZXIgZXhwbGFuYXRpb24uCisKKworCis8YSBuYW1lPSJXaGVuX0lfcnVuX3RoZV9hZ2VudF9pdF9ydW5zX2FuZF90aGVuX3F1aXRzX3dpdGhvdXRfc3RheWluZ19hcm91bmRfX1doeV8iPgorV2hlbiBJIHJ1biB0aGUgYWdlbnQgaXQgcnVucyBhbmQgdGhlbiBxdWl0cyB3aXRob3V0IHN0YXlpbmcgYXJvdW5kLiBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEZpcnN0bHksIGFyZSB5b3UgY2VydGFpbiB0aGF0IHRoaXMgaXMgd2hhdCBpcyBoYXBwZW5pbmc/CisKKyAgVGhlIG5vcm1hbCBvcGVyYXRpb24gb2YgdGhlIGFnZW50IGlzIHRvICdmb3JrJyBpdHNlbGYgaW50byB0aGUKKyAgYmFja2dyb3VuZCwgZGV0YWNoaW5nIGl0c2VsZiBzbyB0aGF0IGl0IHdpbGwgY29udGludWUgcnVubmluZyBldmVuCisgIHdoZW4geW91IGxvZyBvdXQsIGFuZCBmcmVlaW5nIHRoZSBjb21tYW5kIGxpbmUgZm9yIHN1YnNlcXVlbnQgdXNlLgorICBUaGlzIGxvb2tzIGF0IGZpcnN0IHNpZ2h0IGFzIGlmIHRoZSBhZ2VudCBoYXMgZGllZCwgYnV0IHVzaW5nICdwcycKKyAgdG8gc2hvdyBhbGwgcHJvY2Vzc2VzIHNob3VsZCByZXZlYWwgdGhhdCB0aGUgYWdlbnQgaXMgc3RpbGwgcnVubmluZy4KKworICBUbyBwcmV2ZW50IHRoaXMgYmVoYXZpb3VyIChzdWNoIGFzIHdoZW4gYXR0ZW1wdGluZyB0byBkZWJ1ZyB0aGUKKyAgYWdlbnQpLCB5b3UgY2FuIHN0YXJ0IGl0IHdpdGggdGhlICctZicgZmxhZy4gIFRoaXMgc3VwcHJlc3NlcyB0aGUKKyAgZm9yaywgYW5kIHRoZSBhZ2VudCB3aWxsIHJ1biBhcyBhICdub3JtYWwnIGNvbW1hbmQuICBJdCdzIGFsc28gb2Z0ZW4KKyAgdXNlZnVsIHRvIHVzZSB0aGUgJy1MJyAob3IgJy1MZScpIGZsYWcsIHRvIGxvZyBtZXNzYWdlcyB0byBzdGRvdXQuCisKKyAgT24gdGhlIG90aGVyIGhhbmQsIGlmICdwcycgc2hvd3MgdGhhdCB0aGUgYWdlbnQgaXMgbm90IHJ1bm5pbmcsIHRoZW4KKyAgdGhpcyBpcyBhbiBlcnJvciwgYW5kIHByb2JhYmx5IHNob3cgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbgorICBzdGFydGluZyB0aGUgYWdlbnQgdXAuICBDaGVjayB0aGUgYWdlbnQgbG9nIGZpbGUgZm9yIGFueSBlcnJvciBtZXNzYWdlcywKKyAgb3IgcnVuIGl0IHdpdGggJy1mIC1MJyBhbmQgc2VlIHdoYXQgaXQgcmVwb3J0cy4KKworICBPbmUga25vd24gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSAndWNkLXNubXAnIFJQTSBkaXN0cmlidXRlZCBieSBSZWRIYXQuCisgIFRoaXMgYWdlbnQgY3Jhc2hlcyBpZiB0aGVyZSBpcyBhICdkaXNrJyBjb25maWd1cmF0aW9uIGVudHJ5IGluIHRoZQorICBzbm1wZC5jb25mIGZpbGUuICBJdCBpcyBub3QgY3VycmVudGx5IGtub3duIHdoYXQgY2F1c2VzIHRoaXMsIGFzIHRoaXMKKyAgc2V0dGluZyB3b3JrcyBjb3JyZWN0bHkgaWYgdGhlIGFnZW50IGlzIGNvbXBpbGVkIGZyb20gc291cmNlLgorCisKKworPGEgbmFtZT0iQWZ0ZXJfYV93aGlsZV90aGVfYWdlbnRfc3RvcHNfcmVzcG9uZGluZ19fYW5kX3N0YXJ0c19lYXRpbmdfQ1BVX3RpbWVfX19XaHlfIj4KK0FmdGVyIGEgd2hpbGUgdGhlIGFnZW50IHN0b3BzIHJlc3BvbmRpbmcsIGFuZCBzdGFydHMgZWF0aW5nIENQVSB0aW1lLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIG1vc3QgY29tbW9ubHkgc2VlbiB3aGVuIHBlcmZvcm1pbmcgYW4gInNubXB3YWxrIiBvbiBhbiBhZ2VudAorICB0aGF0J3MgZWl0aGVyIHVzaW5nIGEgZGVmYXVsdCAidmVuZG9yIHByb3ZpZGVkIiBjb25maWd1cmF0aW9uCisgICh0eXBpY2FsbHkgYWNjZXNzIHRvIHRoZSAnc3lzdGVtJyBncm91cCBvbmx5KSwgb3Igd2hpY2ggaXMgdHJ5aW5nCisgIHRvIHJlc3RyaWN0IGFjY2VzcyBmb3IgaW5kaXZpZHVhbCB1c2VycyBvciBjb21tdW5pdGllcyB0byBhIHN1YnNldAorICBvZiB0aGUgd2hvbGUgT0lEIHRyZWUuCisKKyAgVGhlIGFnZW50IGltcGxlbWVudGF0aW9uIG9mICJHZXROZXh0IiBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkKKyAgaW5lZmZpY2llbnQgd2hlbiBkZWFsaW5nIHdpdGggaW5hY2Nlc3NpYmxlIG9iamVjdHMsIGFuZCBpdCBpcyBxdWl0ZQorICBlYXN5IGZvciB0aGUgY2xpZW50cyB0byB0aW1lLW91dCBhbmQgcmV0cnkgYSByZXF1ZXN0LCB3aGlsZSB0aGUgYWdlbnQKKyAgaXMgc3RpbGwgdHJ5aW5nIHRvIHByb2Nlc3MgdGhlIG9yaWdpbmFsLiAgSWYgdGhpcyBoYXBwZW5zIGNvbnRpbnVhbGx5CisgIChhcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2Ugd2l0aCBhbiBzbm1wd2FsayksIHRoZSBhZ2VudCBjYW4gZ2V0IHN3YW1wZWQKKyAgYnkgdGhpcyBiYWNrbG9nLgorCisgIFRoZSA1LjAueCBsaW5lIGhhcyBub3cgYWRkcmVzc2VkIHRoaXMsIHN0YXJ0aW5nIHdpdGggdGhlIDUuMC43IHJlbGVhc2UuCisgIFRoZSA0LjIueCBsaW5lIHN0aWxsIHN1ZmZlcnMgZnJvbSB0aGlzIHByb2JsZW0sIGFuZCBpdCBpcyB1bmxpa2VseSB0aGF0CisgIHRoaXMgd2lsbCBiZSBmaXhlZC4gIChUaGUgNS4wLjcgYXBwcm9hY2ggcmVsaWVzIG9uIHNvbWUgb2YgdGhlIG5ldworICBmZWF0dXJlcyBpbiB0aGUgNS4wLnggbGluZSwgYW5kIGl0IGhhcyBub3QgcHJvdmVkIHBvc3NpYmxlIHRvIGFwcGx5CisgIHRoaXMgdG8gdGhlIDQuMi54IGNvZGUgYmFzZSkuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfc3RvcF9vdGhlcl9wZW9wbGVfZ2V0dGluZ19hdF9teV9hZ2VudF8iPgorSG93IGNhbiBJIHN0b3Agb3RoZXIgcGVvcGxlIGdldHRpbmcgYXQgbXkgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEZpcnN0bHksIGFyZSB5b3UgY29uY2VybmVkIHdpdGggcmVhZCBhY2Nlc3Mgb3Igd3JpdGUgYWNjZXNzPworCisgIEFzIGZhciBhcyBjaGFuZ2luZyB0aGluZ3Mgb24gdGhlIGFnZW50IGlzIGNvbmNlcm5lZCwgdGhlcmUgaXMgcmVsYXRpdmVseQorICBsaXR0bGUgdGhhdCBjYW4gYWN0dWFsbHkgYmUgYWx0ZXJlZCAoc2VlIHRoZSBhbnN3ZXIgdG8gIiBJIGNhbm5vdCBzZXQKKyAgYW55IHZhcmlhYmxlcyBpbiB0aGUgTUlCIiBhYm92ZSkuCisKKyAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLCB0aGlzIGlzIHNldCB1cCB0byBhbGxvdworICByZWFkIGFjY2VzcyBmcm9tIHlvdXIgbG9jYWwgbmV0d29yaywgYW5kIHdyaXRlIGFjY2VzcyBvbmx5IGZyb20gdGhlCisgIHN5c3RlbSBpdHNlbGYgKGFjY2Vzc2VkIGFzICdsb2NhbGhvc3QnKSwgYm90aCB1c2luZyB0aGUgY29tbXVuaXR5IG5hbWUKKyAgc3BlY2lmaWVkLiAgWW91IHdpbGwgbmVlZCB0byBzZXQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBib3RoIE5FVFdPUksKKyAgYW5kIENPTU1VTklUWSBpbiB0aGlzIGZpbGUgYmVmb3JlIHVzaW5nIGl0LgorICAgIFRoaXMgbWVjaGFuaXNtIGNhbiBhbHNvIGJlIHVzZWQgdG8gY29udHJvbCBhY2Nlc3MgbXVjaCBtb3JlIHByZWNpc2VseS4KKyAgKHNlZSB0aGUgbmV4dCBxdWVzdGlvbnMgZm9yIGRldGFpbHMpCisKKyAgT3RoZXIgb3B0aW9ucyBpbmNsdWRlOgorCS0gQmxvY2tpbmcgYWNjZXNzIHRvIHBvcnQgMTYxIGZyb20gb3V0c2lkZSB5b3VyIG9yZ2FuaXNhdGlvbgorCQkodXNpbmcgZmlsdGVycyBvbiBuZXR3b3JrIHJvdXRlcnMpCisJLSBDb25maWd1cmluZyBUQ1Agd3JhcHBlciBzdXBwb3J0ICgiLS13aXRoLWxpYndyYXAiKQorCQlUaGlzIHVzZXMgdGhlIFRDUCAnbGlid3JhcCcgbGlicmFyeSAoYXZhaWxhYmxlIHNlcGFyYXRlbHkpCisJCXRvIGFsbG93L2RlbnkgYWNjZXNzIHZpYSAvZXRjL2hvc3RzLnthbGxvdyxkZW55fQorCisgIEZvciBzdHJpY3Qgc2VjdXJpdHkgeW91IHNob3VsZCB1c2Ugb25seSBTTk1QdjMsIHdoaWNoIGlzIHRoZSBzZWN1cmUKKyAgZm9ybSBvZiB0aGUgcHJvdG9jb2wuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfbGlzdGVuX29uX2p1c3Rfb25lX3BhcnRpY3VsYXJfaW50ZXJmYWNlXyI+CitIb3cgY2FuIEkgbGlzdGVuIG9uIGp1c3Qgb25lIHBhcnRpY3VsYXIgaW50ZXJmYWNlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTm9ybWFsbHksIHRoZSBhZ2VudCB3aWxsIGJpbmQgdG8gdGhlIHNwZWNpZmllZCBwb3J0IG9uIGFsbCBpbnRlcmZhY2VzCisgIG9uIHRoZSBzeXN0ZW0sIGFuZCBhY2NlcHQgcmVxdWVzdCByZWNlaXZlZCBmcm9tIGFueSBvZiB0aGVtLiAgV2l0aAorICB2ZXJzaW9uIDQuMiwgdGhlICctcCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3RlbiBvbiBpbmRpdmlkdWFsCisgIGludGVyZmFjZXMuICBGb3IgZXhhbXBsZSwKKwkKKwkJCXNubXBkIC1wIDE2MUAxMjcuMC4wLjEKKworICB3aWxsIGxpc3RlbiAob24gdGhlIHN0YW5kYXJkIHBvcnQpIG9uIHRoZSBsb29wYmFjayBpbnRlcmZhY2Ugb25seSwgYW5kCisKKwkJCXNubXBkIC1wIDYxNjFAMTAuMC4wLjEKKworICB3aWxsIGxpc3RlbiBvbiBwb3J0IDYxNjEsIG9uIHRoZSAoaW50ZXJuYWwgbmV0d29yaykgaW50ZXJmYWNlIHdpdGggYWRkcmVzcworICAxMC4wLjAuMS4gICBJZiB5b3Ugd2FudCB0byBsaXN0ZW4gb24gbXVsdGlwbGUgaW50ZXJmYWNlcyAoYnV0IG5vdCBhbGwpLAorICB0aGVuIHNpbXBseSByZXBlYXQgdGhpcyBvcHRpb24gZm9yIGVhY2ggb25lOgorCisJCXNubXBkIC1wIDE2MUAxMjcuMC4wLjEgLXAgNjE2MUAxMC4wLjAuMQorCisgIFRoZSB2NSBOZXQtU05NUCBhZ2VudCBoYXMgYSBzaW1pbGFyIGZhY2lsaXR5LCBidXQgZG9lcyBub3QgdXNlIHRoZSAnLXAnCisgIGNvbW1hbmQgbGluZSBvcHRpb24gZmxhZy4gIEluc3RlYWQsIHRoZSBwb3J0cyBhbmQvb3IgaW50ZXJmYWNlcyB0byBsaXN0ZW4KKyAgb24gYXJlIHNpbXBseSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgZm9sbG93aW5nIGFueSBvdGhlciBvcHRpb25zLiAgQWxzbywKKyAgdGhlIHN5bnRheCBvZiBwb3J0IGFuZCBpbnRlcmZhY2UgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IChpbnRlcmZhY2U6cG9ydCkuCisgICAgU28gdGhlIHRocmVlIGV4YW1wbGVzIGFib3ZlIHdvdWxkIGJlCisKKwkJCXNubXBkIDEyNy4wLjAuMToxNjEKKwkJCXNubXBkIDEyNy4wLjAuMTo2MTYxCisJCQlzbm1wZCAxMjcuMC4wLjE6MTYxIDEyNy4wLjAuMTo2MTYxCisKKyAgVGhlIEFnZW50WCBwb3J0IG9wdGlvbiAoJy14Jykgd29ya3MgaW4gbXVjaCB0aGUgc2FtZSB3YXksIHVzaW5nIHRoZQorICAiaG9zdDpwb3J0IiBzeW50YXggKGluIGJvdGggNC4yIGFuZCA1LjAgbGluZXMgLSBhbmQgeWVzLCB0aGlzICppcyogYW4KKyAgaW5jb25zaXN0ZW5jeSBpbiA0LjIhKQorCisKKworPGEgbmFtZT0iSG93X2RvX0lfY29uZmlndXJlX2FjY2Vzc19jb250cm9sXyI+CitIb3cgZG8gSSBjb25maWd1cmUgYWNjZXNzIGNvbnRyb2w/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBzaW1wbGVzdCB3YXkgaXMgdG8gdXNlIHRoZSBjb25maWd1cmUgZGlyZWN0aXZlczoKKworCQlyb2NvbW11bml0eSBwdWJsaWMJKGZvciBTTk1QdjEvMmMpCisJCXJ3Y29tbXVuaXR5IHByaXZhdGUKKyAgb3IKKwkJcm91c2VyIHVzZXIxCQkoZm9yIFNOTVB2MykKKwkJcnd1c2VyIHVzZXIyCisKKyAgVGhlc2Ugc3BlY2lmeSB0aGUgY29tbXVuaXR5IG5hbWVzIG9yIHNlY3VyaXR5IG5hbWVzIHRvIGFjY2VwdCBmb3IKKyAgcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIGFjY2VzcyB0byB0aGUgd2hvbGUgb2YgdGhlIHN1cHBvcnRlZCBNSUIgdHJlZS4KKyAgKE9idmlvdXNseSB5b3Ugc2hvdWxkIGNoYW5nZSB0aGVzZSBuYW1lcyB0byBtYXRjaCB5b3VyIHJlcXVpcmVtZW50cyAtCisgIHdoaWNoIGlzIGEgcGFydGljdWxhcmx5IGdvb2QgaWRlYSBpbiB0aGUgY2FzZSBvZiAncndjb21tdW5pdHknISkKKworICBOb3RlIHRoYXQgaXQgaXMgKm5vdCogbmVjZXNzYXJ5IChhbmQgbm90IGFkdmlzaWJsZSkgdG8gc3BlY2lmeSB0aGUKKyAgc2FtZSBjb21tdW5pdHkgbmFtZSBmb3IgYm90aCByb2NvbW11bml0eSBhbmQgcndjb21tdW5pdHkgZGlyZWN0aXZlcy4KKyAgVGhlIHJ3Y29tbXVuaXR5IHNldHRpbmcgYXV0b21hdGljYWxseSBpbmNsdWRlcyByb2NvbW11bml0eSBhY2Nlc3MsCisgIGFuZCBoYXZpbmcgYm90aCBsaW5lcyAod2l0aCB0aGUgc2FtZSBjb21tdW5pdHkgbmFtZSkgbWF5IHJlc3VsdCBpbgorICBhcHBhcmVudGx5IGluY29uc2lzdGVudCBiZWhhdmlvdXIuICBPbmx5IHVzZSBib3RoIHNldHRpbmdzIHdoZW4KKyAgc3BlY2lmeWluZyAqZGlmZmVyZW50KiBjb21tdW5pdHkgbmFtZXMuCisgICAgVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3Igcm91c2VyIGFuZCByd3VzZXIuCisKKyAgQWxsIGZvdXIgb2YgdGhlc2Ugc2V0dGluZ3MgY2FuIGNhbiBhbHNvIGJlIHJlc3RyaWN0ZWQgdG8gcGFydGljdWxhcgorICBzdWJ0cmVlcywgYW5kL29yIHJlcXVlc3Qgc291cmNlcy4gIFNlZSAnc25tcGQuY29uZig1KScgZm9yIGRldGFpbHMuCisKKyAgVGhlc2UgZGlyZWN0aXZlcyBhcmUgZWZmZWN0aXZlbHkgd3JhcHBlcnMgcm91bmQgdGhlIGNvcmUgYWNjZXNzIGNvbnRyb2wKKyAgbWVjaGFuaXNtLCB3aGljaCB1c2VzIHRoZSBmb3VyIGRpcmVjdGl2ZXMgJ2NvbTJzZWMnLCAnZ3JvdXAnLCAndmlldycKKyAgYW5kICdhY2Nlc3MnIHRvIHByb3ZpZGUgYSBtb3JlIGVmZmljaWVudCBhbmQgZmxleGlibGUgY29udHJvbAorICBvdmVyIHdobyBjYW4gYWNjZXNzIHdoaWNoIHBvcnRpb25zIG9mIHRoZSB0cmVlLgorCisgICAgU2VlIHRoZSBuZXh0IHF1ZXN0aW9uIGZvciB0aGUgZ29yeSBkZXRhaWxzLCBhbmQgdGhlIGVudHJ5IGFmdGVyCisgIHRoYXQgZm9yIHNldHRpbmcgdXAgU05NUHYzIHVzZXJzLgorCisKKworPGEgbmFtZT0iSV9kb25fdF91bmRlcnN0YW5kX3RoZV9uZXdfYWNjZXNzX2NvbnRyb2xfc3R1ZmZfX193aGF0X2RvZXNfaXRfbWVhbl8iPgorSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBuZXcgYWNjZXNzIGNvbnRyb2wgc3R1ZmYgLSB3aGF0IGRvZXMgaXQgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgaWRlYSBiZWhpbmQgdGhlIG5ldyBhY2Nlc3MgY29udHJvbCBtb2RlbCBpcyB0byBnaXZlIGEgbW9yZSBmbGV4aWJsZQorICB3YXkgb2Ygc3BlY2lmeWluZyB3aG8gY2FuIHNlZSBhbmQgZG8gd2hhdCB3aXRoaW4gdGhlIE1JQiB0cmVlLgorICBJdCdzIG1vcmUgY29tcGxpY2F0ZWQgdG8gdW5kZXJzdGFuZCB0aGFuIHRoZSBzaW1wbGUgZXhhbXBsZSBhYm92ZSwgYnV0CisgIHRoYXQncyBiZWNhdXNlIGl0IGNhbiBkbyBhIHdob2xlIGxvdCBtb3JlLgorCisgICAgVGhlcmUgYXJlIGZvdXIgY29uZmlndXJhdGlvbiBrZXl3b3JkcyBpbiB0aGUgbmV3IHNjaGVtZToKKwknY29tMnNlYycsICdncm91cCcsICd2aWV3JywgYW5kICdhY2Nlc3MnCisKKyAgV2UnbGwgY29uc2lkZXIgdGhlc2Ugb25lIGF0IGEgdGltZSwgc3RhcnRpbmcgd2l0aCAnYWNjZXNzJy4KKyAgKEJlY2F1c2UgSSBmZWVsIGxpa2Ugc3RhcnRpbmcgd2l0aCB0aGUgbGFzdCBvbmUsIHRoYXQncyB3aHkgLSBPSz8pCisKKworICBUaGUgImFjY2VzcyIga2V5d29yZCBoYXMgdGhlIGpvYiBvZiBzcGVjaWZ5aW5nIHdobyBoYXMgYWNjZXNzIHRvCisgIHdoaWNoIGJpdHMgb2YgdGhlIE1JQiB0cmVlLiAgVGhpcyBoYXMgZWlnaHQgcGFyYW1ldGVycywgc28gY2FuIGxvb2sKKyAgcmF0aGVyIG9mZnB1dHRpbmcuIE1vc3Qgb2YgdGhlc2UgY2FuIGJlIHNhZmVseSBsZWZ0IHdpdGggZGVmYXVsdCB2YWx1ZXMKKyAgaW4gbW9zdCBjYXNlcyAoc28gZG9uJ3QgeW91IHdvcnJ5IHlvdXIgcHJldHR5IGxpdHRsZSBoZWFkIGFib3V0IHRoZW0pLgorICBUaGUgc3ludGF4IGlzCisKKwlhY2Nlc3Mge2dyb3VwfSAiIiBhbnkgbm9hdXRoIGV4YWN0IHtyZWFkLXRyZWV9IHt3cml0ZS10cmVlfSB7bm90aWZ5LXRyZWV9CisKKyAgd2hlcmUgdGhlIGVudHJpZXMgaW4gYnJhY2VzIG5lZWQgdG8gYmUgZGVmaW5lZCBlbHNld2hlcmUgKEknbSBjb21pbmcKKyAgdG8gdGhhdCAtIGJlIHBhdGllbnQhKSwgYW5kIHRoZSByZXN0IGNhbiBiZSBsZWZ0IGFzIHNob3duIGhlcmUuCisKKwlbIElmIHlvdSByZWFsbHkgd2FudCB0byBrbm93LCB0aGUgJ3NlYy5tb2RlbCcgZmllbGQgY2FuIAorCSAgYmUgdXNlZCB0byBoYXZlIGFuIGFjY2VzcyBsaW5lIHRoYXQncyBvbmx5IHJlbGV2YW50IHRvCisJICBwYXJ0aWN1bGFyIHZlcnNpb25zIG9mIFNOTVAgKHN1Y2ggdjEgb3IgdjJjKSByYXRoZXIgdGhhbgorCSAgImFueSIgdmVyc2lvbiwgYW5kIHRoZSAnc2VjLmxldmVsJyBmaWVsZCB0byBlbnN1cmUgdGhhdAorCSAgdGhlIHJlcXVlc3QgbXVzdCBiZSBhdXRoZW50aWNhdGVkIG9yIGVuY3J5cHRlZC4KKwkgICAgVGhlIGNvbnRleHQgYW5kIHByZWZpeCBmaWVsZHMgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2gKKwkgIGJldHdlZW4gcGFyYWxsZWwgdmVyc2lvbnMgb2YgdGhlIHNhbWUgb3ZlcmFsbCBPSUQgdHJlZQorCV0KKworCisgIFRoZSAidmlldyIga2V5d29yZCBpcyB1c2VkIHRvIGRlZmluZSBwYXJ0aWN1bGFyIGJpdHMgb2YgdGhlIE1JQiB0cmVlLAorICBmb3IgdXNlIGluIHRoZSBsYXN0IHRocmVlIGZpZWxkIG9mIHRoZSBhY2Nlc3MgZW50cnkuCisgIFRoaXMgaGFzIHRoZSBzeW50YXgKKworCXZpZXcgIHtuYW1lfSAgaW5jbHVkZWQvZXhjbHVkZWQgIHtzdWJ0cmVlfSAgIHttYXNrfQorCisgIHdoZXJlIHtuYW1lfSBpcyB0aGUgaWRlbnRpZmllciB0byBiZSB1c2VkIGZvciB0aGlzIHZpZXcgKGkuZS4gd2hhdCBzaG91bGQKKyAgYXBwZWFyIGluIHRoZSBhY2Nlc3MgZW50cnkpLCBhbmQge3N1YnRyZWV9IGlzIHRoZSBwb3J0aW9uIG9mIHRoZSBNSUIgdHJlZQorICB0aGF0IHRoaXMgbmFtZSByZWZlcnMgdG8gKGluIGVpdGhlciBudW1lcmljIG9yIG5hbWVkIGZvcm0pLgorICAgIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdmlldyBkb2VzIG5vdCBoYXZlIHRvIGhhdmUgYW55dGhpbmcgdG8gZG8KKyAgd2l0aCB0aGUgTUlCIHN1Yi1pZGVudGlmaWVyIG5hbWVzIC0gaXQncyBwdXJlbHkgYW4gaWRlbnRpZnlpbmcgdGFnIGZvcgorICB1c2Ugd2l0aGluIHRoZSBjb25maWcgZmlsZSAodGhvdWdoIGNob29zaW5nIGEgbWVhbmluZ2Z1bCBuYW1lIGlzLCBhcworICBhbHdheXMsIGEgdmVyeSBnb29kIGlkZWEpLgorICAKKyAgICBUaGUge21hc2t9IGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2ggZWxlbWVudHMgb2YgdGhlIE9JRCBzdWJ0cmVlCisgIHNob3VsZCBiZSByZWdhcmRlZCBhcyByZWxldmFudCB3aGVuIGRldGVybWluaW5nIHdoaWNoIHZpZXcgYW4gT0lEIGlzIGluLgorICBOb3JtYWxseSwgdGhlIHdob2xlIG9mIHRoZSBPSUQgc2hvdWxkIGJlIGluY2x1ZGVkLCBhbmQgaW4gdGhpcyBjYXNlIHRoZQorICBtYXNrIGZpZWxkIGNhbiBiZSBvbWl0dGVkLiAgU2VlIHNubXBkLmNvbmYgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoaXMKKyAgbWlnaHQgYmUgdXNlZC4KKyAgVGhlIHRoaXJkIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBwYXJ0aWN1bGFyIHBvcnRpb25zCisgIG9mIHRoZSBNSUIgZnJvbSB0aGUgdmlldywgYW5kIGRpZmZlcmVudCBsaW5lcyBjYW4gdXNlIHRoZSBzYW1lIHZpZXcgbmFtZQorICB0byBidWlsZCB1cCBhIG1vcmUgY29tcGxpY2F0ZWQgdmlldywgaWYgdGhhdCdzIHdoYXQncyBuZWVkZWQuCisKKyAgICBUaGUgdGhyZWUgdmlldyBmaWVsZHMgaW4gdGhlIGFjY2VzcyBsaW5lIGFyZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2gKKyAgcG9ydGlvbnMgb2YgdGhlIE1JQiB0cmVlIGEgcGFydGljdWxhciB7Z3JvdXB9IGNhbiBzZWUgKEdFVCBldCBhbCksCisgIGFsdGVyIChTRVQpLCBvciByZXF1ZXN0IE5PVElGWXMgb24uCisKKworCisgICAgVGhhdCdzIGRlYWx0IHdpdGggdGhlICJ3aGF0IiAtIG5vdyBmb3IgdGhlICJ3aG8iLgorICBUaGlzIGlzIHRoZSByb2xlIG9mIHRoZSAiZ3JvdXAiIGFuZCAiY29tMnNlYyIgZW50cmllcy4KKworICBUaGUgImdyb3VwIiBrZXl3b3JkIGdpdmVzIGdlbmVyYWwgY29udHJvbCwgYnkgbWFwcGluZyBiZXR3ZWVuIGEgInNlY3VyaXR5CisgIG5hbWUiIChmb3IgYSBwYXJ0aWN1bGFyIHByb3RvY29sIHZlcnNpb24pLCBhbmQgdGhlIGludGVybmFsIG5hbWUgdXNlZCBpbiB0aGUKKyAgYWNjZXNzIGxpbmUuICBOb3RlIHRoYXQgdGhlIHRva2VuICJhbnkiIGlzIG5vIGxvbmdlciBhY2NlcHRhYmxlIGZvciB0aGUKKyAgc2VjdXJpdHkgbW9kZWwgLSB0aGUgb3JpZ2luYWwgc3VwcG9ydCBmb3IgdGhpcyB3YXMgZHVlIGR1ZSB0byBhIG1pc3JlYWRpbmcKKyAgb2YgdGhlIFJGQy4gIFlvdSBzaG91bGQgcmVwbGFjZSBhbnkgc3VjaCBsaW5lIHdpdGggc2VwYXJhdGUgdmVyc2lvbnMgZm9yCisgIGVhY2ggb2YgdGhlIGRlc2lyZWQgc2VjdXJpdHkgbW9kZWxzICgndjEnLCAndjJjJyAmICd1c20nKS4KKworICAgIEZvciBTTk1QdjEgYW5kIFNOTVB2MmMsIHRoZSBncm91cCBsaW5lIGlzIGp1c3QgYW4gaW50ZXJtZWRpYXRlIHN0ZXAKKyAgYmV0d2VlbiB0aGUgImFjY2VzcyIgbGluZSBhbmQgdGhlICJjb20yc2VjIiBsaW5lLCB3aGljaCBpcyB0aGUgbGFzdCBiaXQKKyAgb2YgdGhlIGppZ3Nhdy4gIFRoZSAiY29tMnNlYyIgZW50cnkgaXMgdXNlZCB0byBkZXRlcm1pbmUgYSAic2VjdXJpdHkgbmFtZSIKKyAgZnJvbSB0aGUgdHJhZGl0aW9uYWwgY29tbXVuaXR5IHN0cmluZywgdGFraW5nIGludG8gYWNjb3VudCB3aGVyZSB0aGUgcmVxdWVzdAorICBoYXMgY29tZSBmcm9tLiAgVGh1cyB0aGUgc2FtZSBjb21tdW5pdHkgc3RyaW5nIGNhbiBnaXZlIGFjY2VzcyB0byAgZGlmZmVyZW50CisgIHBvcnRpb25zIG9mIHRoZSB0cmVlLCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHJlcXVlc3QgaXMgc2VudCBmcm9tLgorCisgICAgIEZvciBleGFtcGxlLCBpbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIGV4YW1wbGUgY29uZmlnIGZpbGUsIHRoZXJlCisgIHdlcmUgdHdvIGNvbTJzZWMgbGluZXMgd2l0aCB0aGUgY29tbXVuaXR5IHN0cmluZyAicHVibGljIiAtIG9uZSB3YXMgdmFsaWQKKyAgZnJvbSBhbnl3aGVyZSAod2l0aCB0aGUgc2VjdXJpdHkgbmFtZSAicHVibGljIikgYW5kIG9uZSB3YXMgb25seSB2YWxpZAorICBmcm9tIHRoZSBsb2NhbCBuZXR3b3JrICh1c2luZyB0aGUgc2VjdXJpdHkgbmFtZSAibXluZXQiKS4KKyAgICAgVGhlIGdyb3VwIGxpbmVzIGNvbnZlcnRlZCB0aGVzZSBzZWN1cml0eSBuYW1lcyBpbnRvIHRoZSBncm91cHMgInB1YmxpYyIKKyAgYW5kICJteWdyb3VwIiByZXNwZWN0aXZlbHksIGFuZCB0aGUgYWNjZXNzIGxpbmVzIGdhdmUgdGhlc2UgdHdvIGdyb3VwcworICB0aGUgYWJpbGl0eSB0byBHRVQgdmFsdWVzIGluIHRoZSAnc3lzdGVtJyBzdWItdHJlZSAoZnJvbSBhbnl3aGVyZSkgb3IKKyAgdGhlICdtaWItMicgc3ViLXRyZWUgKGZyb20gdGhlIGxvY2FsIG5ldHdvcmspLiAgTmVpdGhlciBvZiB0aGVzZSBjb3VsZAorICBTRVQgYW55IHZhbHVlcyB0aG91Z2gsIChzaW5jZSB0aGUgd3JpdGUtdHJlZSB3YXMgIm5vbmUiIGluIGJvdGggY2FzZXMpLgorICAgIFNvbWVvbmUgb24gdGhlIGxvY2FsIG1hY2hpbmUsIHVzaW5nIHRoZSBjb21tdW5pdHkgc3RyaW5nICJwcml2YXRlIiwKKyAgaGFkIHRoZSBzZWN1cml0eSBuYW1lICJsb2NhbCIgYW5kIHRoZSBncm91cCBuYW1lICJsb2NhbCIsIGFuZCBoZW5jZSBoYWQKKyAgZnVsbCBhY2Nlc3MgKGJvdGggR0VUIGFuZCBTRVQsIGFzIHdlbGwgYXMgTk9USUZZKSB0byB0aGUgd2hvbGUgb2YgdGhlCisgIE1JQiB0cmVlIChvciBhdCBsZWFzdCBldmVyeXRoaW5nIHVuZGVyIC4xLCB3aGljaCBjb3ZlcnMgbW9zdCB0aGluZ3MhKQorCisgICAgIE5vdGUgdGhhdCB0aGUgdGhyZWUgb2NjdXJyZW5jZXMgb2YgInB1YmxpYyIsIGFzIGNvbW11bml0eSBzdHJpbmcsCisgIHNlY3VyaXR5IG5hbWUgYW5kIGdyb3VwIG5hbWUsIHdlcmUgdGhyZWUgdG90YWxseSBzZXBhcmF0ZSB0aGluZ3MuCisgIFlvdSBjYW4ndCB1c2UgYSBjb21tdW5pdHkgc3RyaW5nIGluIGEgc2VjdXJpdHkgbmFtZSBmaWVsZCwgb3IgZWl0aGVyCisgIG9mIHRoZXNlIGFzIGEgZ3JvdXAgbmFtZSAob3IgdmljZSB2ZXJzYSksIHVubGVzcyB5b3Ugc2V0IHVwIHN1aXRhYmxlCisgIGVudHJpZXMgdG8gbWFwIG9uZSBuYW1lIG9udG8gdGhlIG90aGVyLgorCisgICAgV2l0aCBTTk1QdjMsIHRoZSBzZWN1cml0eSBuYW1lIGlzIHBhcnQgb2YgdGhlIGJhc2ljIHByb3RvY29sLCBhbmQgY2FuCisgIGJlIHVzZWQgZGlyZWN0bHkgaW4gYSBncm91cCBkZWZpbml0aW9uLgorCisgIEFuZCBoZXJlIGNvbmNsdWRlcyBvdXIgdG91ciBvZiB0aGUgdmlldy1iYXNlZCBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20uCisgIFBoZXchCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9jb25maWd1cmVfU05NUHZfX3VzZXJzXyI+CitIb3cgZG8gSSBjb25maWd1cmUgU05NUHYzIHVzZXJzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQ3JlYXRlIGEgZmlsZSAvdmFyL3VjZC1zbm1wL3NubXBkLmNvbmYgZmlsZSwgY29udGFpbmluZyB0aGUgbGluZQorCisJY3JlYXRlVXNlciB7bXlVc2VyfSBNRDUge215UGFzc3dvcmR9IERFUworCisgICh3aGVyZSB7bXlVc2VyfSBhbmQge215UGFzc3dvcmR9IGFyZSB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLCBfd2l0aG91dF8KKyAgdGhlIGJyYWNlcyEpLiAgVGhlbiBzdGFydCAob3IgcmUtc3RhcnQpIHRoZSBzbm1wZCBhZ2VudC4KKyAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgbmV3IHVzZXIuICBTZWUgdGhlIGFjY2VzcyBjb250cm9sIGVudHJpZXMgYWJvdmUKKyAgZm9yIGhvdyB0byB1c2UgdGhpcywgYW5kIHRoZSBmaWxlICdSRUFETUUuc25tcHYzJyBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iVGhlX19jcmVhdGVVc2VyX19saW5lX2Rpc2FwcGVhcnNfd2hlbl9JX3N0YXJ0X3RoZV9hZ2VudF9fX1doeV8iPgorVGhlICdjcmVhdGVVc2VyJyBsaW5lIGRpc2FwcGVhcnMgd2hlbiBJIHN0YXJ0IHRoZSBhZ2VudC4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoYXQncyBkZWxpYmVyYXRlLiAgIFRoZSBhZ2VudCByZW1vdmVzIHRoZSAoaHVtYW4tcmVhZGFibGUpICdjcmVhdGVVc2VyJworICBkaXJlY3RpdmUsIGFuZCByZXBsYWNlcyBpdCB3aXRoIGFuIGVxdWl2YWxlbnQgJ3VzbVVzZXInLiAgVGhpcworICBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgYnV0IGluIGEgZm9ybSB0aGF0J3Mgb25seSBtZWFuaW5nZnVsCisgIGludGVybmFsbHkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHBhc3N3b3JkIGlzIG5vdCBsb25nZXIgc3RvcmVkIGluCisgIGEgaHVtYW4tcmVhZGFibGUgZm9ybS4gIEFkZGl0aW9uYWxseSwgdGhlIHBhc3N3b3JkIGhhcyBiZWVuIGNvbnZlcnRlZAorICB0byBhIGtleSB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBsb2NhbCBtYWNoaW5lLiAgSWYgc29tZW9uZQorICBzdG9sZSB0aGUgbmV3IHVzbVVzZXIgbGluZSBvbiB0aGlzIG1hY2hpbmUsIHRoZXkgY291bGQgbm90IHVzZSB0aGF0CisgIGluZm9ybWF0aW9uIHRvIGFjY2VzcyBhbnkgb2YgeW91ciBvdGhlciBhZ2VudHMuCisKKworCis8YSBuYW1lPSJXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9fdmFyX3VjZF9zbm1wX2FuZF9fdXNyX2xvY2FsX3NoYXJlX3NubXBfIj4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIC92YXIvdWNkLXNubXAgYW5kIC91c3IvbG9jYWwvc2hhcmUvc25tcD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9zdCAic3RhdGljIiBhZ2VudCBjb25maWd1cmF0aW9uIHNob3VsZCBnbyBpbiB0aGUgdHJhZGl0aW9uYWwgbG9jYXRpb24KKyAgKHR5cGljYWxseSAvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcGQuY29uZiBvciAvZXRjL3NubXApLiAgIFRoZQorICAvdmFyL3VjZC1zbm1wIChvciAvdmFyL25ldC1zbm1wKSBsb2NhdGlvbiBpcyB1c2VkIGZvciBpbmZvcm1hdGlvbiBzZXQgZHVyaW5nCisgIHRoZSBydW5uaW5nIG9mIHRoZSBhZ2VudCwgd2hpY2ggbmVlZHMgdG8gYmUgcGVyc2lzdGVudCBiZXR3ZWVuIG9uZSBydW4gb2YKKyAgdGhlIGFnZW50IGFuZCB0aGUgbmV4dC4KKworICAgIFB1dHRpbmcgdGhlICdjcmVhdGVVc2VyJyBsaW5lIGluIHRoaXMgcGVyc2lzdGVudCBmaWxlIGlzIGFuIGV4Y2VwdGlvbiwKKyAgZm9yIHNlY3VyaXR5IHJlYXNvbnMgKHNlZSBhYm92ZSkuICBJbiBnZW5lcmFsIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBwdXQKKyAgYW55dGhpbmcgZWxzZSBoZXJlLgorCisKKworPGEgbmFtZT0iTXlfbmV3X2FnZW50X2lzX2lnbm9yaW5nX3RoZV9vbGRfc25tcGRfY29uZl9maWxlX19XaHlfIj4KK015IG5ldyBhZ2VudCBpcyBpZ25vcmluZyB0aGUgb2xkIHNubXBkLmNvbmYgZmlsZS4gV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBtb3N0IGxpa2VseSBleHBsYW5hdGlvbiBpcyB0aGF0IHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgYWdlbnQgaXMKKyAgbG9va2luZyBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiB0aGFuIHRoZSBwcmV2aW91cyBvbmUuICBUaGlzIGlzIGNvbW1vbmx5CisgIGV4cGVyaWVuY2VkIHdoZW4gcmVwbGFjaW5nIGEgcmVhZHktaW5zdGFsbGVkIHZlcnNpb24gKGUuZy4gZnJvbSBhIHZlbmRvcgorICBkaXN0cmlidXRpb24pLCB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UgaW5zdGFsbGVkIGZyb20gdGhlIHNvdXJjZS4KKworICAgIFRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGlzIGZpbGUgd2l0aCB0aGUgYmFzaWMgZGlzdHJpYnV0aW9uIGlzCisgIC91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wZC5jb25mIChvciBQUkVGSVgvc2hhcmUvc25tcC9zbm1wZC5jb25mKS4KKyAgUmVhZHktaW5zdGFsbGVkIHZlcnNpb25zIG9mdGVuIGxvb2sgZm9yIHRoZSBmaWxlIGFzIC9ldGMvc25tcGQuY29uZiwKKyAgb3IgL2V0Yy9zbm1wL3NubXBkLmNvbmYuICBUcnkgbW92aW5nIHRoZSBvbGQgY29uZmlnIGZpbGUgdG8gdGhlIG5ldworICBsb2NhdGlvbiwgYW5kIHJlc3RhcnQgdGhlIGFnZW50LgorCisgICAgV2l0aCByZWxlYXNlIDUuMCwgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgY2hhbmdlZCBmcm9tICJ1Y2Qtc25tcCIKKyAgdG8gIm5ldC1zbm1wIiwgYW5kIHRoaXMgY2hhbmdlIHdhcyByZWZsZWN0ZWQgaW4gdGhlIG5hbWUgb2YgdGhlIHBlcnNpc3RlbnQKKyAgL3ZhciBkaXJlY3RvcnkuICBTbyBhIHY1IE5ldC1TTk1QIGFnZW50IHdpbGwgbm90IGxvb2sgaW4KKyAgL3Zhci91Y2Qtc25tcC9zbm1wZC5jb25mIGZvciBzZXR0aW5ncyBmcm9tIGEgdjQgVUNEIGFnZW50LgorCisKKworPGEgbmFtZT0iV2h5X2FtX0lfZ2V0dGluZ19fQ29ubmVjdGlvbl9yZWZ1c2VkX18iPgorV2h5IGFtIEkgZ2V0dGluZyAiQ29ubmVjdGlvbiByZWZ1c2VkIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgYWN0dWFsbHkgbm90aGluZyB0byBkbyB3aXRoIHRoZSBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20KKyAgKHRob3VnaCB0aGF0J3MgYW4gdW5kZXJzdGFuZGFibGUgbWlzdGFrZSkuICBUaGlzIGlzIHRoZSByZXN1bHQgb2YKKyAgdGhlIFRDUCB3cmFwcGVyIG1lY2hhbmlzbSB1c2luZyB0aGUgZmlsZXMgJ2hvc3RzLmFsbG93JyBhbmQgJ2hvc3RzLmRlbnknCisgIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBzZXJ2aWNlLiAgU29tZSBkaXN0cmlidXRpb25zIG1heSBjb21lIHdpdGgKKyAgdGhpcyBlbmFibGVkIGF1dG9tYXRpY2FsbHkgLSBvdGhlcndpc2UgeW91IG5lZWQgdG8gc2VsZWN0IGl0IGV4cGxpY2l0bHkKKyAgYnkgY29uZmlndXJpbmcgdXNpbmcgJy0td2l0aC1saWJ3cmFwJy4KKworICAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gYXZvaWQgdGhpcyBwcm9ibGVtIGlzIHRvIGFkZCB0aGUgbGluZQorCisJCXNubXBkOiBBTEwKKworICBpbiB0aGUgZmlsZSAvZXRjL2hvc3RzLmFsbG93IChvciB3aGVyZXZlciB0aGlzIGZpbGUgaXMgb24geW91ciBzeXN0ZW0pLgorICBUaG91Z2ggYmUgYXdhcmUgdGhhdCBkb2luZyB0aGlzIHJlbW92ZXMgb25lIGxldmVsIG9mIHByb3RlY3Rpb24gYW5kIGFsbG93cworICBhbnlvbmUgdG8gdHJ5IGFuZCBxdWVyeSB5b3VyIGFnZW50ICh0aG91Z2ggdGhlIGFnZW50J3Mgb3duIGFjY2VzcyBjb250cm9sCisgIG1lY2hhbmlzbXMgY2FuIHN0aWxsIGJlIHVzZWQgdG8gcmVzdHJpY3Qgd2hhdCAtIGlmIGFueXRoaW5nIC0gdGhleSBjYW4gc2VlKS4KKworICBOb3RlIHRoYXQgcGVyc29uYWwgZmlyZXdhbGxzIChzdWNoIGFzIExpbnV4JyBpcGNoYWlucyBvciBpcHRhYmxlcyBtZWNoYW5pc20pCisgIG1heSBoYXZlIGEgc2ltaWxhciBlZmZlY3QgKHRob3VnaCB0eXBpY2FsbHkgdGhpcyB3b24ndCBiZSBsb2dnZWQpLgorICBTZWUgdGhlIGVhcmxpZXIgZW50cnkKKyAgICBSZXF1ZXN0cyBhbHdheXMgc2VlbSB0byB0aW1lb3V0LCBhbmQgZG9uJ3QgZ2l2ZSBtZSBhbnl0aGluZyBiYWNrLiAgV2h5PworCisKKyAKKzxhIG5hbWU9IklfbV9nZXR0aW5nX2Vycm9yc19hYm91dF9fYmFkX3NlY3VyaXR5X21vZGVsX19fX3doeV8iPgorSSdtIGdldHRpbmcgZXJyb3JzIGFib3V0ICJiYWQgc2VjdXJpdHkgbW9kZWwiIC0gd2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFVudGlsIHJlbGVhc2UgNC4yLCB0aGUgYWNjZXNzIGNvbnRyb2wgaGFuZGxpbmcgYWNjZXB0ZWQgdGhlIHRva2VuICJhbnkiIAorICB0byBjb3ZlciBhbGwgb2YgdGhlIHJlY29nbmlzZWQgc2VjdXJpdHkgbW9kZWxzLiAgVGhpcyBpcyBleHBsaWNpdGx5CisgIGZvcmJpZGRlbiBpbiB0aGUgcmVsZXZhbnQgUkZDLCBzbyBzdXBwb3J0IGZvciB0aGlzIGlzIGJlaW5nIHdpdGhkcmF3bi4KKyAgICBBcyBhbiBpbnRlcmltIG1lYXN1cmUsIGl0IGlzIGN1cnJlbnRseSBhY2NlcHRlZCAod2l0aCB0aGUgd2FybmluZyB5b3UKKyAgc2VlKSwgYnV0IHRoaXMgd2lsbCBub3QgYmUgdGhlIGNhc2UgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBhZ2VudC4KKyAKKyAgICBZb3Ugc2hvdWxkIHJlcGxhY2UgdGhlIHRva2VuICdhbnknIHdpdGggJ3YxJywgJ3YyYycgb3IgJ3VzbScgYXMKKyAgYXBwcm9wcmlhdGUuICBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IGFsbCB0aHJlZSBvZiB0aGVzZSBzZWN1cml0eSBtb2RlbHMsCisgIHlvdSdsbCBuZWVkIHRvIHVzZSB0aHJlZSBkaXN0aW5jdCBncm91cCBsaW5lcywgb25lIGZvciBlYWNoLiBTZWUgdGhlCisgIGV4YW1wbGUgc25tcGQuY29uZiBmaWxlIGZvciBkZXRhaWxzLgorCisgIAorCis8YSBuYW1lPSJJX21fZ2V0dGluZ19lcnJvcnNfYWJvdXRfX2JhZF9wcmVmaXhfbWF0Y2hfcGFyYW1ldGVyX19fX3doeV8iPgorSSdtIGdldHRpbmcgZXJyb3JzIGFib3V0ICJiYWQgcHJlZml4IG1hdGNoIHBhcmFtZXRlciIgLSB3aHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHF1ZXN0aW9uLiAgV2l0aCA0LjIsIHRoZSBzeW50YXggb2YgdGhlCisgICdhY2Nlc3MnIGNvbmZpZ3VyZSBsaW5lIGhhcyBjaGFuZ2VkLCBhbmQgYSB2YWx1ZSBvZiAnMCcgaXMgbm8gbG9uZ2VyCisgIGFjY2VwdGFibGUgZm9yIHRoZSBzaXh0aCBmaWVsZC4gIFNpbXBseSByZXBsYWNlIHRoaXMgd2l0aCB0aGUgd29yZCAnZXhhY3QnLgorCisKKyAgCis8YSBuYW1lPSJXaHlfY2FuX3RfSV9zZWVfdmFsdWVzX2luX3RoZV9VQ0RhdmlzX19leHRlbnNpYmxlX19vcl9fZGlza19fdHJlZXNfIj4KK1doeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlIFVDRGF2aXMgJ2V4dGVuc2libGUnIG9yICdkaXNrJyB0cmVlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEJvdGggdGhlc2UgdHJlZXMgYXJlIGRlc2lnbmVkIHRvIHJlcG9ydCB0aGluZ3MgeW91IGFzayBpdCB0byByZXBvcnQKKyAgb24uICBJZiB5b3UgZG9uJ3QgZGVjbGFyZSBhbnl0aGluZyBpbiB0aGUgc25tcGQuY29uZiBmaWxlIGZvciBpdCB0bworICBtb25pdG9yLCBpdCB3aWxsIG5vdCByZXBvcnQgYW55dGhpbmcuICBTZWUgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UKKyAgYW5kIHRoZSBFWEFNUExFLmNvbmYgZmlsZSBmb3IgZGV0YWlscyBvbiBjb25maWd1cmluZyB0aGUgYWdlbnQuCisKKyAgT3B0aW9uYWxseSwgcnVuIHNubXBjb25mIC1nIG1vbml0b3JpbmcgdG8gaGVscCB5b3Ugc2V0IHVwIHRoaXMKKyAgc2VjdGlvbiBvZiB0aGUgc25tcGQuY29uZiBmaWxlLgorCisKKworV2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgVUNEYXZpcyAnbWVtb3J5JyBvciAndm1zdGF0JyB0cmVlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVzZSBtaWIgbW9kdWxlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZAorICB3aWxsIG5vdCBiZSBpbmNsdWRlZCBvbiBhbnkgb3RoZXIgc3lzdGVtLiAgQ3VycmVudGx5LCB0aGV5IGFyZSBvbmx5CisgIHN1cHBvcnRlZCBvbiBMaW51eCwgSFAtVVggKG1lbW9yeSBvbmx5KSwgU29sYXJpcywgQlNEaSAodm1zdGF0IG9uCisgIEJTRGk0IG9ubHkpLCBEeW5peCwgRnJlZUJTRCwgTmV0QlNEIGFuZCBPcGVuQlNELgorICAgIElmIHlvdSB3YW50IHRvIGhlbHAgcG9ydCBpdCB0byBvdGhlciBzeXN0ZW1zLCBsZXQgdXMga25vdy4KKworICBOb3RlIHRoYXQgdGhlc2Ugc3VidHJlZXMgb25seSByZXBvcnQgdGhlIGN1cnJlbnQgdXNhZ2Ugd2hlbgorICBleHBsaWNpdGx5IHF1ZXJpZWQuICBUaGV5IGRvICpub3QqIGdlbmVyYXRlIHRyYXBzIHdoZW4gdGhlCisgIHVzYWdlIHN0cmF5cyBvdXRzaWRlIHRoZSBjb25maWd1cmVkIGJvdW5kcy4KKyAgU2VlIHRoZSBlYXJsaWVyIEZBUSBlbnRyeQorICAgIFdoYXQgdHJhcHMgYXJlIHNlbnQgYnkgdGhlIGFnZW50PworCisKKworPGEgbmFtZT0iV2hhdF9kb190aGVfQ1BVX3N0YXRpc3RpY3NfbWVhbl9fX2lzX3RoaXNfdGhlX2xvYWRfYXZlcmFnZV8iPgorV2hhdCBkbyB0aGUgQ1BVIHN0YXRpc3RpY3MgbWVhbiAtIGlzIHRoaXMgdGhlIGxvYWQgYXZlcmFnZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBOby4gIFVuZm9ydHVuYXRlbHksIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uIG9mIHRoZSB2YXJpb3VzIENQVSBzdGF0aXN0aWNzCisgIHdhcyBhIGxpdHRsZSB2YWd1ZS4gIEl0IHJlZmVycmVkIHRvIGEgInBlcmNlbnRhZ2UiLCB3aXRob3V0IHNwZWNpZnlpbmcKKyAgd2hhdCBwZXJpb2QgdGhpcyBzaG91bGQgYmUgY2FsY3VsYXRlZCBvdmVyLiAgSXQgd2FzIHRoZXJlZm9yZQorICBpbXBsZW1lbnRlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KKworICAgIFJlY2VudCByZWxlYXNlcyBpbmNsdWRlcyAicmF3IGNvdW50ZXJzIiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHVzYWdlIG92ZXIgYW55IGRlc2lyZWQgcGVyaW9kLiAgVGhpcyBpcworICB0aGUgInJpZ2h0IiB3YXkgdG8gaGFuZGxlIHRoaW5ncyBpbiB0aGUgU05NUCBtb2RlbC4gIFRoZSBvcmlnaW5hbAorICBmbGF3ZWQgcGVyY2VudGFnZSBvYmplY3RzIHNob3VsZCBub3QgYmUgdXNlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZAorICBpbiBhIGZ1dHVyZSByZWxlYXNlIG9mIHRoZSBhZ2VudC4KKworICAgIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBVbml4IGxvYWQgYXZlcmFnZSwgd2hpY2ggaXMKKyAgYXZhaWxhYmxlIHZpYSB0aGUgbG9hZFRhYmxlLCBhbmQgaXMgc3VwcG9ydGVkIG9uIGFsbCBhcmNoaXRlY3R1cmVzLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfZ2V0X3BlcmNlbnRhZ2VfQ1BVX3V0aWxpemF0aW9uX3VzaW5nX3NzQ3B1UmF3SWRsZV8iPgorSG93IGRvIEkgZ2V0IHBlcmNlbnRhZ2UgQ1BVIHV0aWxpemF0aW9uIHVzaW5nIHNzQ3B1UmF3SWRsZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBvbmUgb2YgdGhlICJyYXcgY291bnRlcnMiIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgZW50cnkuCisgIFlvdSBuZWVkIHRvIHRha2UgdHdvIHJlYWRpbmdzIG9mIHRoaXMgb2JqZWN0IGFuZCBsb29rIGF0IHRoZQorICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbS4gIFRoYXQgZGlmZmVyZW5jZSBkaXZpZGVkIGJ5IHRoZSB0b3RhbAorICBudW1iZXIgb2YgJ3RpY2tzJyBiZXR3ZWVuIHRoZSB0d28gcmVhZGluZ3MgKHdoZXJlIG9uZSB0aWNrIGlzCisgIHByb2JhYmx5IDAuMDEgc2Vjb25kcykgd2lsbCBnaXZlIHlvdSB0aGUgcGVyY2VudGFnZSB1dGlsaXphdGlvbgorICBvdmVyIHRoYXQgcGVyaW9kLgorCisKKworPGEgbmFtZT0iV2hhdF9hYm91dF9tdWx0aV9wcm9jZXNzb3Jfc3lzdGVtc18iPgorV2hhdCBhYm91dCBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFNvcnJ5IC0gdGhlIENQVSBzdGF0aXN0aWNzIChib3RoIG9yaWdpbmFsIHBlcmNlbnRhZ2VzLCBhbmQgdGhlCisgIG5ld2VyIHJhdyBzdGF0aXN0aWNzKSBib3RoIHJlZmVyIHRvIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZS4gIFRoZXJlCisgIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gYWNjZXNzIGluZGl2aWR1YWwgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1bGFyCisgIHByb2Nlc3NvciAoZXhjZXB0IG9uIFNvbGFyaXMgc3lzdGVtcyAtIHNlZSBiZWxvdykuCisKKyAgICBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlIEhvc3QgUmVzb3VyY2VzIHRhYmxlIGluY2x1ZGVzIGEgaHJQcm9jZXNzb3JUYWJsZSwKKyAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc3VmZmVycyBmcm9tIHR3byBtYWpvciBmbGF3cy4gIEZpcnN0bHksIGl0CisgIGRvZXNuJ3QgY3VycmVudGx5IHJlY29nbmlzZSB0aGUgcHJlc2VuY2Ugb2YgbXVsdGlwbGUgcHJvY2Vzc29ycywgYW5kCisgIHNpbXBseSBhc3N1bWVzIHRoYXQgYWxsIHN5c3RlbXMgaGF2ZSBwcmVjaXNlbHkgb25lIENQVS4gIFNlY29uZGx5LCBpdAorICBkb2Vzbid0IGNhbGN1bGF0ZSB0aGUgaHJQcm9jZXNzb3JMb2FkIHZhbHVlIGNvcnJlY3RseSwgYW5kIGVpdGhlciByZXR1cm5zCisgIGEgZHVtbXkgdmFsdWUgKGJhc2VkIG9uIHRoZSBsb2FkIGF2ZXJhZ2UpIG9yIG5vdGhpbmcgYXQgYWxsLgorCisgICAgQXMgb2YgbmV0LXNubXAgdmVyc2lvbiA1LjEsIHRoZSBTb2xhcmlzIG9wZXJhdGluZyBzeXN0ZW0gZGVsaXZlcnMgc29tZQorICBpbmZvcm1hdGlvbiBhYm91dCBtdWx0aXBsZSBDUFUncyBzdWNoIGFzIHNwZWVkIGFuZCB0eXBlLgorCisgICAgT3RoZXIgdGhhbiB0aGF0LCB0byBtb25pdG9yIGEgbXVsdGktcHJvY2Vzc29yIHN5c3RlbSwgeW91J3JlIGN1cnJlbnRseQorICBvdXQgb2YgbHVjay4gIFdlIGhvcGUgdG8gYWRkcmVzcyB0aGlzIGluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgdGhlIGFnZW50LgorICBCdXQgeW91J3ZlIGdvdCB0aGUgc291cmNlLCBzbyB5b3UgY2FuIGFsd2F5cyBoYXZlIGEgZ28geW91cnNlbGYgOi0pCisKKworCis8YSBuYW1lPSJUaGVfc3BlZWRfdHlwZV9vZl9teV9uZXR3b3JrX2ludGVyZmFjZXNfaXNfd3JvbmdfX19ob3dfY2FuX0lfZml4X2l0XyI+CitUaGUgc3BlZWQvdHlwZSBvZiBteSBuZXR3b3JrIGludGVyZmFjZXMgaXMgd3JvbmcgLSBob3cgY2FuIEkgZml4IGl0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgU29tZSBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nCisgIHRoZSBzcGVlZCBhbmQgdHlwZSBvZiBuZXR3b3JrIGludGVyZmFjZXMsIGJ1dCBtYW55IGRvIG5vdC4gIEluIHRoaXMKKyAgY2FzZSwgdGhlIGFnZW50IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHZhbHVlcywgYmFzZWQKKyAgb24gdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZS4KKyAgICBWZXJzaW9uIDQuMiBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZXNlIGd1ZXNzZWQgdmFsdWVzLCB1c2luZyB0aGUKKyAgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgJ2ludGVyZmFjZScsIHNwZWNpZnlpbmcgdGhlIG5hbWUsIHR5cGUgYW5kCisgIHNwZWVkIG9mIGEgcGFydGljdWxhciBpbnRlcmZhY2UuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCisgIGZhc3QtZXRoZXJuZXQsIG9yIGRpYWwtdXAgaW50ZXJmYWNlcywgd2hlcmUgdGhlIHNwZWVkIGNhbm5vdCBiZQorICBndWVzc2VkIGZyb20gdGhlIG5hbWUuCisgICAgU2VlIHRoZSBzbm1wZC5jb25mKDUpIG1hbiBwYWdlIGZvciBkZXRhaWxzLgorICAKKworCis8YSBuYW1lPSJUaGVfaW50ZXJmYWNlX3N0YXRpc3RpY3NfZm9yX215X3N1YmludGVyZmFjZXNfYXJlX2FsbF96ZXJvX19fd2h5XyI+CitUaGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MgZm9yIG15IHN1YmludGVyZmFjZXMgYXJlIGFsbCB6ZXJvIC0gd2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVW5mb3J0dW5hdGVseSwgbW9zdCBrZXJuZWxzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBsb2dpY2FsCisgIGludGVyZmFjZXMgb24gYSBzaW5nbGUgcGh5c2ljYWwgaW50ZXJmYWNlLCBkb24ndCBrZWVwIHNlcGFyYXRlCisgIHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YgdGhlc2UuICBUaGV5IHNpbXBseSByZXBvcnQgdGhlIG92ZXJhbGwKKyAgc3RhdGlzdGljcyBmb3IgdGhlIHBoeXNpY2FsIGludGVyZmFjZSBpdHNlbGYuCisgICAgVGhlcmUncyBubyBlYXN5IHdheSBhcm91bmQgdGhpcyBwcm9ibGVtIC0gdGhlIGFnZW50IGNhbiBvbmx5CisgIHJlcG9ydCBzdWNoIHZhbHVlcyBhcyBpdCBjYW4gZmluZCBvdXQuICBJZiB0aGUga2VybmVsIGRvZXNuJ3QKKyAga2VlcCB0cmFjayBvZiB0aGVzZSBmaWd1cmVzLCB0aGUgYWdlbnQgY2FuJ3QgcmVwb3J0IHRoZW0uCisgICAgU29ycnkhCisKKworPGEgbmFtZT0iV2hhdF9kb2VzX19rbHJlYWRfX19iYWRfYWRkcmVzc19fbWVhbl8iPgorV2hhdCBkb2VzICJrbHJlYWQ6ICBiYWQgYWRkcmVzcyIgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIG1lYW5zIHRoYXQgdGhlIGFnZW50IHdhcyB1bmFibGUgdG8gZXh0cmFjdCBzb21lIG9mIHRoZQorICBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUga2VybmVsIHN0cnVjdHVyZXMuICBUaGlzIGlzCisgIHBvc3NpYmx5IGR1ZSB0bzoKKwktIGVpdGhlciBsb29raW5nIGluIHRoZSB3cm9uZyBwbGFjZSBmb3Iga2VybmVsIGluZm9ybWF0aW9uCisJCShjaGVjayB0aGUgdmFsdWUgb2YgS0VSTkVMX0xPQykKKwktIGFuIGVycm9yIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwYXJ0IG9mIHRoZSBNSUIgdHJlZQorCQlmb3IgdGhhdCBhcmNoaXRlY3R1cmUuICBUcnkgYW5kIGlkZW50aWZ5IHdoaWNoCisJCU9JRCBpcyBnZW5lcmF0aW5nIHRoZSBlcnJvciwgYW5kIGNvbnRhY3QgdGhlCisJCWxpc3QgJ25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQnCisJCVJlbWVtYmVyIHRvIHRlbGwgdXMgd2hhdCBhcmNoaXRlY3R1cmUgeW91IGhhdmUhCisKKworCis8YSBuYW1lPSJXaGF0X2RvZXNfX25saXN0X2Vycl9fX3dvbWJhdF9ub3RfZm91bmRfX19vcl9zaW1pbGFyX19tZWFuXyI+CitXaGF0IGRvZXMgIm5saXN0IGVycjogIHdvbWJhdCBub3QgZm91bmQiIChvciBzaW1pbGFyKSBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgbWVhbnMgdGhhdCB0aGUgYWdlbnQgd2Fzbid0IGFibGUgdG8gbG9jYXRlIG9uZSBvZiB0aGUKKyAga2VybmVsIHN0cnVjdHVyZXMgaXQgd2FzIGxvb2tpbmcgZm9yLiAgVGhpcyBtYXkgb3IgbWF5IG5vdAorICBiZSBpbXBvcnRhbnQgLSBzb21lIHN5c3RlbXMgcHJvdmlkZSBhbHRlcm5hdGl2ZSBtZWNoYW5pc21zCisgIGZvciBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiAtIFNvbGFyaXMsIGZvciBleGFtcGxlLAorICBjYW4gcHJvZHVjZSBhIHdob2xlIHNsZXcgb2Ygc3VjaCBtZXNzYWdlcywgYnV0IHN0aWxsIHByb3ZpZGUKKyAgdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24uCisgICAgVGhpcyBlcnJvciBvbmx5IG9jY3VycyBpZiB5b3UgaGF2ZSB1c2VkIHRoZSBmbGFnCisgICctLWVuYWJsZS1kZWJ1Z2dpbmcnIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4KKyAgUmVjb25maWd1cmUgdGhlIGFnZW50IHdpdGggJy0tZGlzYWJsZS1kZWJ1Z2dpbmcnIGFuZCB0aGVzZQorICBtZXNzYWdlcyB3aWxsIGRpc2FwcGVhci4gIChJdCB3b24ndCBmaXggdGhlIHVuZGVybHlpbmcgcHJvYmxlbSwKKyAgYnV0IGF0IGxlYXN0IHlvdSB3b24ndCBiZSBuYWdnZWQgYWJvdXQgaXQpLgorCisKKworPGEgbmFtZT0iSG93X2Fib3V0X19DYW5fdF9vcGVuX19kZXZfa21lbV9fIj4KK0hvdyBhYm91dCAiQ2FuJ3Qgb3BlbiAvZGV2L2ttZW0iPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGRldmljZSBpcyBub3JtYWxseSByZXN0cmljdGVkIHRvIGp1c3QgYmVpbmcgYWNjZXNzaWJsZSBieSByb290CisgIChvciBwb3NzaWJseSBieSBhIHNwZWNpYWwgZ3JvdXAgc3VjaCBhcyAna21lbScgb3IgJ3N5cycpLiAgVGhlIGFnZW50CisgIG11c3QgYmUgYWJsZSB0byByZWFkIHRoaXMgZGV2aWNlIHRvIG9idGFpbiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uCisgIGFib3V0IHRoZSBydW5uaW5nIHN5c3RlbS4KKyAgICBDaGVjayB0aGF0IHRoZSBhZ2VudCB3YXMgc3RhcnRlZCBieSByb290LCBhbmQgaXMgcnVubmluZyB3aXRoIFVJRCAwCisgIChvciBzdWl0YWJsZSBHSUQgaWYgYXBwcm9wcmlhdGUpLiAgVGhlIGFnZW50IHdpbGwgbm9ybWFsbHkgY29udGludWUKKyAgdG8gcnVuIHdpdGhvdXQgdGhpcyBsZXZlbCBvZiBhY2Nlc3MgcGVybWlzc2lvbiwgYnV0IHdvbid0IGJlIGFibGUgdG8KKyAgcmVwb3J0IHZhbHVlcyBmb3IgbWFueSBvZiB0aGUgdmFyaWFibGVzIChwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRpbmcKKyAgdG8gbmV0d29yayBzdGF0aXN0aWNzKS4KKworIAorCis8YSBuYW1lPSJUaGVfYWdlbnRfaXNfY29tcGxhaW5pbmdfYWJvdXRfX3NubXBkX2NvbmZfX19fV2hlcmVfaXNfdGhpc18iPgorVGhlIGFnZW50IGlzIGNvbXBsYWluaW5nIGFib3V0ICdzbm1wZC5jb25mJy4gIFdoZXJlIGlzIHRoaXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEl0IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcyBzaGlwcGVkLiAgWW91IG5lZWQgdG8KKyAgY3JlYXRlIGl0IHRvIHJlZmxlY3QgeW91ciBsb2NhbCByZXF1aXJlbWVudC4KKyAgICBUbyBnZXQgc3RhcnRlZCwgeW91IGNhbiBlaXRoZXIganVzdCBjcmVhdGUgdGhpcyBhcyBhbiBlbXB0eSBmaWxlLAorICBvciBydW4gc25tcGNvbmYgdG8gaGVscCB5b3UgY3JlYXRlIG9uZS4KKyAgICBTZWUgdGhlIHNubXBkLmNvbmYoNSkgbWFudWFsIHBhZ2UgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworCisKKzxhIG5hbWU9IlRoZV9zeXN0ZW1fdXB0aW1lX19zeXNVcFRpbWVfX3JldHVybmVkX2lzX3dyb25nXyI+CitUaGUgc3lzdGVtIHVwdGltZSAoc3lzVXBUaW1lKSByZXR1cm5lZCBpcyB3cm9uZyEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgT2ggbm8gaXQncyBub3QuCisgIFRoZSBkZWZpbmVkIG1lYW5pbmcgb2YgJ3N5c1VwVGltZScgaXMKKwkidGhlIHRpbWUgLi4uIHNpbmNlIHRoZSAqbmV0d29yayBtYW5hZ2VtZW50KgorCSBwb3J0aW9uIG9mIHRoZSBzeXN0ZW0gd2FzIHJlLWluaXRpYWxpemVkLiIKKworICBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgc25tcCBhZ2VudCB3YXMgc3RhcnRlZCwgbm90IHdoZW4gdGhlCisgIHN5c3RlbSBpdHNlbGYgbGFzdCBib290ZWQuICBUaGlzIGxhdHRlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUKKyAgaW4gdGhlIEhvc3QgUmVzb3VyY2VzIE1JQiBhcyAiaG9zdC5oclN5c3RlbS5oclN5c3RlbVVwVGltZSIKKyAgTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIGZ1bGwgSG9zdCBSZXNvdXJjZXMgaXMgbm90IHN1cHBvcnRlZCBvbgorICB5b3VyIHN5c3RlbSwgaXQncyB3b3J0aCBjb25maWd1cmluZyBpbiB0aGUgc3lzdGVtIHBvcnRpb24gdXNpbmcKKworCQknLS13aXRoLW1pYi1tb2R1bGVzPWhvc3QvaHJfc3lzdGVtJworCisgIGFuZCByZWNvbXBpbGluZy4gIFRoaXMgcGFydGljdWxhciBncm91cCBpcyByZWFzb25hYmx5IGxpa2VseSB0bworICB3b3JrLCBldmVuIGlmIHNvbWUgb2YgdGhlIG90aGVyIG1vcmUgc3lzdGVtLXNwZWNpZmljIGdyb3VwcyBkb24ndC4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9yZWR1Y2VfdGhlX21lbW9yeV9mb290cHJpbnRfIj4KK0hvdyBjYW4gSSByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCAoZm9yIGluc3RhbmNlLCB0bworICBlbWJlZCB0aGUgc25tcGQgaW50byBhIGRldmljZSksIHRoZSBmb2xsb3dpbmcgY29uZmlndXJlIG9wdGlvbnMKKyAgY291bGQgYmUgdXNlZC4KKworICAnLS1kaXNhYmxlLWRlYnVnZ2luZycKKyAgICAgVGhpcyB0dXJucyBvZmYgYWxsIGNvbXBpbGF0aW9uIG9mIGRlYnVnZ2luZyBpbmZvLgorCisgICctLWVuYWJsZS1taW5pLWFnZW50JyAnLS13aXRoLW91dC1taWItbW9kdWxlcz1leGFtcGxlcy91Y2REZW1vUHVibGljJworICAgICBUaGlzIGNyZWF0ZXMgYW4gYWdlbnQgdGhlIG1pbmltdW0gYW1vdW50IG9mIE1JQiBtb2R1bGVzCisgICAgIGNvbXBpbGVkIGluLgorICAgICBOT1RFOiBJZiB5b3UgbmVlZCBtb3JlIE1JQiBtb2R1bGVzIGFkZCB0aGVuIHdpdGggdGhlIG9wdGlvbgorICAgICAnLS13aXRoLW1pYi1tb2R1bGVzPS4uLicgeW91IGFkZCBvZiBjb3Vyc2UgZXh0cmEgbWVtb3J5IGZvb3RwcmludC4KKworICAnLS13aXRoLXRyYW5zcG9ydHM9VURQJworICAgICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHRyYW5zcG9ydHMgZG9tYWluIHlvdSBuZWVkLgorICAgICBGb3IgYSBzaW1wbGUgYWdlbnQgVURQIHNob3VsZCBiZSBzdWZmaWNpZW50LgorCisgICAnLS13aXRob3V0LWttZW0tdXNhZ2UnCisgICAgIFRoaXMgY2FuIGJlIHVzZWQgaW4gb3JkZXIgbm90IHRvIGluY2x1ZGUgdGhlIGNvZGUgdGhhdAorICAgICBvcGVyYXRlcyBvbiB0aGUgL2Rldi9rbWVtLiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aGVuCisgICAgIHlvdSBkbyB3YW50IGEgTUlCIG1vZHVsZSBjb21waWxlZCBpbiB0aGF0IGRlcGVuZHMgb24gaXQuCisKKyAgICctLXdpdGgtbWliZGlycz0nIGFuZCAnLS13aXRoLW1pYnM9JworICAgICBUaGVzZSBvcHRpb25zIHNwZWNpZnkgbm90IGxvYWRpbmcgdGhlIE1JQiBtb2R1bGVzIGZvciB0aGUKKyAgICAgYWdlbnQuIEl0IHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQgb25seSBkdXJpbmcKKyAgICAgcnVudGltZS4KKworICBPbiB0b3Agb2YgdGhpcyBvbmUgY291bGQgZXZlbiBhdHRlbXB0IHRvIGV4Y2x1ZGUgdGhlIGNvbXBsZXRlCisgIE1JQiBsb2FkaW5nIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8KKyAgY29uZmlndXJlIG9wdGlvbiBmb3IgdGhpcy4KKworICBPbmNlIHRoZSBhZ2VudCAoc25tcGQpIGhhcyBiZWVuIGxpbmtlZCwgeW91IG1pZ2h0IGFsc28gdHJ5IHJ1bm5pbmcKKyAgJ3N0cmlwIHNubXBkJyB0byByZW1vdmUgdW4tbmVjZXNzYXJ5IGRlYnVnL3N5bWJvbCBpbmZvcm1hdGlvbi4KKworCisKKzxhIG5hbWU9IkNPTVBJTElORyI+CitDT01QSUxJTkcKKz09PT09PT09PQorCis8YSBuYW1lPSJIb3dfZG9fSV9jb21waWxlX3dpdGhfX2NjX19pbnN0ZWFkX29mX19nY2NfXyI+CitIb3cgZG8gSSBjb21waWxlIHdpdGggJ2NjJyBpbnN0ZWFkIG9mICdnY2MnPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFJ1biBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9Y2MKKworICBOb3RlIHRoYXQgaWYgeW91J3ZlIGFscmVhZHkgcnVuIGNvbmZpZ3VyZSBvbmNlLCBpdCB3aWxsIHByb2JhYmx5IGhhdmUKKyAgZGV0ZWN0ZWQgdGhlIHByZXNlbmNlIG9mICdnY2MnLCBjYWNoZWQgdGhpcyBpbmZvcm1hdGlvbiwgYW5kIG1heSBzdGlsbAorICB0cnkgdG8gdXNlIHRoaXMgYW55d2F5LiAgIEluIHdoaWNoIGNhc2UsIHNpbXBseSByZW1vdmUgdGhlICdjb25maWcuY2FjaGUnCisgIGZpbGUgYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlLgorIAorCisKKzxhIG5hbWU9IkJ1dF9nY2NfZG9lc25fdF9jb21waWxlX2l0X3N1Y2Nlc3NmdWxseV9vbl9teV9uZXdfU29sYXJpc19zeXN0ZW1fX1doeV9ub3RfIj4KK0J1dCBnY2MgZG9lc24ndCBjb21waWxlIGl0IHN1Y2Nlc3NmdWxseSBvbiBteSBuZXcgU29sYXJpcyBzeXN0ZW0uIFdoeSBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV2hlbmV2ZXIgeW91IHVwZ3JhZGUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXIgU29sYXJpcywgeW91IG5lZWQgdG8KKyAgcmVpbnN0YWxsIGdjYywgYW5kIHJ1biB0aGUgJ2ZpeGluY2x1ZGVzJyBzY3JpcHQuICAoVGhpcyBpcyBwcm9iYWJseQorICBhIHNlbnNpYmxlIHN0ZXAgdG8gdGFrZSB3aGVuIHlvdSB1cGdyYWRlIGFueSBvcGVyYXRpbmcgc3lzdGVtKS4KKyAgICBVbmRlciBTb2xhcmlzIDIuNiwgdGhlcmUgaXMgYWxzbyBhIGJ1ZyBpbiB0aGUgZ2NjICdmaXhpbmMuc3Y0JyBzY3JpcHQuCisgIFRoaXMgbmVlZHMgYW4gYWRkaXRpb25hbCBsaW5lIGFzIGZvbGxvd3M6CisKKyoqKiBmaXhpbmMuc3ZyNC5jbG4gICAgIFRodSBKdW4gMTUgMjI6MDM6MjkgMTk5NQorLS0tIGZpeGluYy5zdnI0IFR1ZSBOb3YgMjUgMDk6NDc6NTcgMTk5NworKioqKioqKioqKioqKioqCisqKiogMTkxLDE5MSAqKioqCistLS0gMTkxLDE5MiAtLS0tCisgICAgICAgICAgcy9fX1NURENfXyAtIDAgPT0gMC8hZGVmaW5lZCAoX19TVFJJQ1RfQU5TSV9fKS9nCisrICAgICAgICAgcy9fX1NURENfXyAtIDAgPT0gMS9kZWZpbmVkIChfX1NUUklDVF9BTlNJX18pL2cKKworICBOT1RFOiBUaGlzIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIHJlc29sdmVkLgorCisKKworT24gUmVkSGF0IDguMCBvciB1cCBJIGdldCAiL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sZWxmIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBSZWRIYXQgOC4wIGFuZCB1cCBkb2Vzbid0IGNvbWUgd2l0aCBsaWJlbGYgaW5zdGFsbGVkIChwcm9wZXJseSkgYnkKKyAgZGVmYXVsdC4gIEluIG9yZGVyIHRvIGJ1aWxkIE5ldC1TTk1QIHlvdSdsbCBuZWVkIHRoZSBlbGZ1dGlscy1kZXZlbAorICBycG0gaW5zdGFsbGVkLCB3aGljaCB5b3UgY3VycmVudGx5IGRvbid0IGhhdmUuCisKKyAgQWx0ZXJuYXRpdmVseSwgdGhpcyBjb3VsZCBxdWlja2x5IGZpeCB0aGUgcHJvYmxlbSB3aXRob3V0IHJlcXVpcmluZworICB0aGUgLWRldmVsIHJwbSBpbnN0YWxsZWQgKGFzIHRoaXMgaXMgb25lIG9mIHRoZSB0aGluZ3MgdGhlIC1kZXZlbCBycG0KKyAgZG9lcyB3aGVuIHlvdSBpbnN0YWxsIGl0KToKKworICAgIGNkIC91c3IvbGliIDsgbG4gLXMgbGliZWxmLnNvLjEgbGliZWxmLnNvCisKKyAgTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IGFmZmVjdCB5b3UgaWYgeW91IGFyZSB0cnlpbmcgdG8gY29tcGlsZSBpbgorICB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHN1cHBvcnQsIGFzIGl0J2xsIHRyeSB0byB1c2UgdGhlIHJwbSBsaWJyYXJpZXMKKyAgd2hpY2ggd2lsbCBpbiB0dXJuIHJlcXVpcmUgdGhhdCBsaWJlbGYuYSBvciBsaWJlbGYuc28gYmUgcHJlc2VudC4KKworCisKKzxhIG5hbWU9IklfbV9nZXR0aW5nX2FuX2Vycm9yX19hdXRvaGVhZGVyX19ub3RfZm91bmRfX19fd2hhdF9zX3dyb25nXyI+CitJJ20gZ2V0dGluZyBhbiBlcnJvciAiYXV0b2hlYWRlcjogbm90IGZvdW5kIiAtIHdoYXQncyB3cm9uZz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIHVzdWFsbHkgYXBwZWFycyB3aGVuIGNvbXBpbGluZyB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzb3VyY2UKKyAgdmVyc2lvbiwgb2J0YWluZWQgdmlhIENWUy4gIFVuZm9ydHVuYXRlbHksIHRoZSB0aW1lc3RhbXBzIG9uIHNvbWUgb2YKKyAgdGhlIGNvbmZpZ3VyZSBmaWxlcyBhcmUgc3VjaCB0aGF0IG1ha2UgYXNzdW1lcyAobWlzdGFrZW5seSkgdGhhdCB0aGUKKyAgY29uZmlndXJlIHNjcmlwdCBuZWVkcyB0byBiZSByZS1nZW5lcmF0ZWQuCisgICAgQSBzaW1pbGFyIHByb2JsZW0gbWF5IGFyaXNlIHJlbGF0aW5nIHRvICdhdXRvY29uZicuCisKKyAgICBJbiBib3RoIGNhc2VzLCB0aGlzIGNhbiBiZSBjb3JyZWN0ZWQgYnkgcnVubmluZyB0aGUgY29tbWFuZAorICAibWFrZSAtayB0b3VjaGl0IiBiZWZvcmUgYXR0ZW1wdGluZyB0byBtYWtlIHRoZSBtYWluIHBhY2thZ2UuCisKKworCis8YSBuYW1lPSJXaGF0X2Fib3V0X2FfZmFpbGVkX2RlcGVuZGVuY3lfb25fX2xpYmNyeXB0b19fX19XaGVyZV9jYW5fSV9nZXRfdGhhdF8iPgorV2hhdCBhYm91dCBhIGZhaWxlZCBkZXBlbmRlbmN5IG9uICdsaWJjcnlwdG8nPyAgV2hlcmUgY2FuIEkgZ2V0IHRoYXQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyB0eXBpY2FsbHkgZW5jb3VudGVyZWQgd2hlbiBpbnN0YWxsaW5nIGEgTGludXggUlBNIG9mCisgIHRoZSB1Y2Qtc25tcCBwYWNrYWdlLiAgVGhpcyBsaWJyYXJ5IGlzIHBhcnQgb2YgdGhlICdvcGVuc3NsJworICBzdWl0ZSwgc28gc2ltcGx5IGluc3RhbGwgdGhhdCBSUE0gZmlyc3QsIG9yIGRvd25sb2FkIHRoZSBzb3VyY2UKKyAgZnJvbSBmdHA6Ly9mdHAub3BlbnNzbC5vcmcgYW5kIGNvbXBpbGUgYW5kIGluc3RhbGwgdGhhdC4KKworICAgIFdoZW4gY29tcGlsaW5nIHtVQ0QsTmV0fS1TTk1QIGZyb20gc291cmNlLCB0aGUgY29uZmlndXJlIHNjcmlwdAorICBzaG91bGQgZGV0ZWN0IHRoYXQgdGhpcyBsaWJyYXJ5IGlzIG5vdCBwcmVzZW50LCBhbmQgdXNlIGFsdGVybmF0aXZlCisgIGFycmFuZ2VtZW50cyBmb3IgTUQ1LWJhc2VkIGF1dGhlbnRpY2F0aW9uLgorCisgICAgSWYgZW5jcnlwdGlvbiAob3IgU0hBMS1iYXNlZCBhdXRoZW50aWNhdGlvbikgaXMgcmVxdWlyZWQsIHRoZW4KKyAgdGhpcyB0eXBpY2FsbHkgcmVxdWlyZXMgY29tcGlsaW5nIGZyb20gc291cmNlLiAgVW5kZXIgTGludXgsIGJvdGgKKyAgdGhlICdvcGVuc3NsJyBhbmQgJ29wZW5zc2wtZGV2ZWwnIFJQTXMgc2hvdWxkIGJlIGluc3RhbGxlZCwgYW5kIHRoZQorICAnY29uZmlnLmNhY2hlJyBmaWxlIHJlbW92ZWQgYmVmb3JlIHJ1bm5pbmcgImNvbmZpZ3VyZSAtLXdpdGgtb3BlbnNzbCIKKyAgYW5kIHJlLWNvbXBpbGluZy4KKworCisKKzxhIG5hbWU9IldoeV9pc190aGVfcHJvamVjdF93b3Jrc3BhY2VfZW1wdHlfdW5kZXJfVmlzdWFsX0NfX18iPgorV2h5IGlzIHRoZSBwcm9qZWN0IHdvcmtzcGFjZSBlbXB0eSB1bmRlciBWaXN1YWwgQysrPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byB0aGUgZGlmZmVyZW50IHdheXMgdGhhdCBVbml4IGFuZCBXaW5kb3dzCisgIGhhbmRsZSB0ZXh0IGZpbGUgbGluZSB0ZXJtaW5hdGlvbi4gIE9sZGVyIHZlcnNpb25zIG9mIFdpblppcCBkb24ndAorICBoYW5kbGUgdGhpcyBwcm9wZXJseSwgYW5kIFZpc3VhbCBDKysgZ2V0cyBjb25mdXNlZCAocG9vciBkZWFyISkuCisgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiBXaW5aaXAgaXMgcmVwb3J0ZWQgdG8gdW5wYWNrIHRoaXMgY29ycmVjdGx5LgorCisKKworPGEgbmFtZT0iV2h5X2RvZXNfX21ha2VfdGVzdF9fc2tpcF9maXZlX3Rlc3RzXyI+CitXaHkgZG9lcyAnbWFrZSB0ZXN0JyBza2lwIGZpdmUgdGVzdHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgWW91IG1lYW4gVDA1M2FnZW50djF0cmFwLCBUMDU0YWdlbnR2MmN0cmFwLCBUMDU1YWdlbnR2MW1pbnRyYXAsCisgIFQwNTZhZ2VudHYyY21pbnRyYXAgYW5kIFQxMTNhZ2VudHh0cmFwPworCisgICAgVGhlc2UgdGVzdHMgcmVseSB1cG9uIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIE5FVC1TTk1QLUVYQU1QTEVTLU1JQgorICB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGRlZmF1bHQgYWdlbnQgY29uZmlndXJhdGlvbi4gIFRvCisgIGluY2x1ZGUgdGhlc2UgdGVzdHMsIGludm9rZSB0aGUgYGNvbmZpZ3VyZWAgc2NyaXB0IHRvIGluY2x1ZGUKKyAgICAgICctLXdpdGgtbWliLW1vZHVsZXM9ImV4YW1wbGVzL2V4YW1wbGUiLgorCisKKworPGEgbmFtZT0iV2h5X2RvZXNfX21ha2VfdGVzdF9fY29tcGxhaW5fYWJvdXRfYV9waWRfZmlsZV8iPgorV2h5IGRvZXMgJ21ha2UgdGVzdCcgY29tcGxhaW4gYWJvdXQgYSBwaWQgZmlsZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUeXBpY2FsbHkgaXQgc2F5cyBzb21ldGhpbmcgbGlrZToKKworICAgIGNhdDogIGNhbm5vdCBvcGVuIC90bXAvc25tcC10ZXN0LTEtODY5NC8qcGlkKgorCisgICAgSXQncyB0cnlpbmcgdG8gdGVsbCB5b3UgdGhlIHBvcnQgaXMgYmxvY2tlZCAtIHR5cGljYWxseSBiZWNhdXNlCisgIGFub3RoZXIgY29weSBvZiB0aGUgYWdlbnQgaXMgc3RpbGwgcnVubmluZywgbGVmdCBvdmVyIGZyb20gZnJvbSBhCisgIHByZXZpb3VzIHRlc3RpbmcgcnVuLgorCisgIElmIHlvdSB0eXBlICdwcyAtZWYnIHlvdSBzaG91bGQgbm90aWNlIGFuIG9ycGhhbmVkIHByb2Nlc3MgbGlrZToKKworICBzbm1wZCAtZCAtciAtVSAtUCAvdG1wL3NubXAtdGVzdC01LTI3Mjk1L3NubXBkLnBpZC4uLgorCisgIEtpbGwgdGhpcyBwcm9jZXNzLgorCisgIFRoaXMgY291bGQgYmUgaGFwcGVuaW5nIGZvciBzZXZlcmFsIHJlYXNvbnMgaW5jbHVkaW5nOgorCisgICAgMS4gIFlvdSBhcmUgdHJ5aW5nIHRvIGRvIGNvbmN1cnJlbnQgcnVucyBvZiAnbWFrZSB0ZXN0Jy4KKworICAgIDIuICBPbiBhIHNsb3cgbWFjaGluZSwgdGhlIGFnZW50IG1pZ2h0IGJlIHRha2luZyB0b28gbG9uZyB0bworICAgICAgc3RhcnQgdXAuIFRyeSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFNOTVBfU0xFRVAKKyAgICAgIGluIHRlc3RpbmcvUlVOVEVTVFMgZnJvbSAxIHRvIHNvbWV0aGluZyBoaWdoZXIgLSBzYXkgMyBvciA1LgorCisKKworPGEgbmFtZT0iQ09ESU5HIj4KK0NPRElORworPT09PT09CisKKzxhIG5hbWU9Ikhvd19kb19JX3dyaXRlX0NfY29kZV90b19pbnRlZ3JhdGVfd2l0aF90aGVfYWdlbnRfIj4KK0hvdyBkbyBJIHdyaXRlIEMgY29kZSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQXQgdGhlIG1vbWVudCwgdGhlcmUgYXJlIHRocmVlIG1ldGhvZHMgZm9yIGludGVncmF0aW5nIGV4dGVybmFsIEMgY29kZQorICB3aXRoaW4gdGhlIGFnZW50LgorCisgICAgVGhlIGNvZGUgY2FuIGJlIGluY2x1ZGVkIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmLCBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQKKyAgYW5kIGxpbmtlZCBpbiB3aGVuIHRoZSBhZ2VudCBpcyBjb21waWxlZC4gIEFsdGVybmF0aXZlbHksIHdpdGggdGhlIDQuMgorICByZWxlYXNlIG9mIHRoZSBhZ2VudCwgaXQncyBwb3NzaWJsZSB0byBkeW5hbWljYWxseSBsb2FkIE1JQiBtb2R1bGVzIG9uY2UKKyAgdGhlIGFnZW50IGlzIHJ1bm5pbmcuICBGaW5hbGx5LCB0aGUgYWdlbnQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcGFzcyBjZXJ0YWluCisgIHBvcnRpb25zIG9mIHRoZSBNSUIgdHJlZSBvZmYgdG8gb25lIG9yIG1vcmUgc3ViYWdlbnRzLiAgU2VlIHRoZSBlYXJsaWVyCisgIHF1ZXN0aW9uIG9uIEFnZW50WCwgU01VWCBhbmQgcHJveGllZCBTTk1QIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBBbGwgdGhyZWUgbWVjaGFuaXNtcyB1c2UgdGhlIHNhbWUgbW9kdWxlIEFQSS4gIFRoaXMgaXMgZGVzY3JpYmVkIChpbgorICBleGNydWNpYXRpbmcgZGV0YWlsKSBpbiB0aGUgZmlsZSBBR0VOVC50eHQsIHNoaXBwZWQgd2l0aCB0aGUgc3RhbmRhcmQKKyAgZGlzdHJpYnV0aW9uLiAgVGhlcmUgaXMgYWxzbyBhbiBIVE1MIHZlcnNpb24gYWNjZXNzaWJsZSB2aWEgdGhlIHByb2plY3QKKyAgd2ViIHBhZ2UuICBUaGlzIHRhc2sgY2FuIGJlIGFpZGVkIHVzaW5nIHRoZSB0b29sICdtaWIyYycgd2hpY2ggZ2VuZXJhdGVzCisgIG1vc3Qgb2YgdGhlIG5lY2Vzc2FyeSBza2VsZXRvbiBjb2RlIGZyb20gdGhlIGRlc2NyaXB0aW9uIGluIHRoZSBNSUIgZmlsZS4KKworICAgIE5vdGUgdGhhdCB0aGUgVUNEIHN1aXRlIGRvZXMgbm90IGluY2x1ZGUgc3VwcG9ydCBmb3IgU01VWCBzdWJhZ2VudHMuCisKKworCis8YSBuYW1lPSJIb3dfZG9lc190aGVfYWdlbnRfZmV0Y2hfdGhlX3ZhbHVlX29mX2FfdmFyaWFibGVfZnJvbV90aGVfc3lzdGVtXyI+CitIb3cgZG9lcyB0aGUgYWdlbnQgZmV0Y2ggdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgZnJvbSB0aGUgc3lzdGVtPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGlzIGV4dHJhY3RlZCBmcm9tIGtlcm5lbCBtZW1vcnkgLSB1c3VhbGx5CisgIGJ5IHNlZWtpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uIGFuZCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmVzCisgIGRpcmVjdGx5LgorICAgIFNvbWUgc3lzdGVtcyBwcm92aWRlIGNsZWFuZXIgaW50ZXJmYWNlcyB0byBzdWNoIGtlcm5lbCBpbmZvcm1hdGlvbgorICAoaXQgd291bGQgYmUgaGFyZCB0byB0aGluayBvZiBhIGxlc3MgY2xlYW4gaW50ZXJmYWNlISksIHZpYSBpb2N0bCgpCisgIGNhbGxzIG9yIHNpbWlsYXIgc3lzdGVtIHJvdXRpbmVzIGFuZCB0aGVzZSBtZWNoYW5pc21zIGFyZSB1c3VhbGx5IHVzZWQKKyAgaW4gcHJlZmVyZW5jZS4KKworCisKKzxhIG5hbWU9Ik1pYl9jX2NvbXBsYWluc19hYm91dF9hX21pc3NpbmdfX21pYl9yZWZlcmVuY2VfX19fd2hhdF9kb2VzX3RoaXNfbWVhbl8iPgorTWliMmMgY29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyAibWliIHJlZmVyZW5jZSIgLSB3aGF0IGRvZXMgdGhpcyBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IGl0IGhhc24ndCBsb2FkZWQgdGhlIE1JQiBmaWxlIGNvbnRhaW5pbmcKKyAgdGhlIGRlZmluaXRpb24gb2YgdGhlIE1JQiBzdWJ0cmVlIHlvdSdyZSB0cnlpbmcgdG8gaW1wbGVtZW50LiAgVGhpcworICBtaWdodCBiZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIGluc3RhbGxlZCwgdGhlIG5hbWUgaXMgd3JvbmcsIG9yCisgIChtb3N0IGxpa2VseSksIGJlY2F1c2UgaXQgaXNuJ3QgaW4gdGhlIGRlZmF1bHQgbGlzdC4gIFNlZSB0aGUgTUlCUworICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJNaWJfY19jb21wbGFpbnNfYWJvdXRfbm90X2hhdmluZ19hX192YWxpZF9PSURfX19fd2hhdF9kb2VzX3RoaXNfbWVhbl8iPgorTWliMmMgY29tcGxhaW5zIGFib3V0IG5vdCBoYXZpbmcgYSAidmFsaWQgT0lEIiAtIHdoYXQgZG9lcyB0aGlzIG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgZ2F2ZSBpdCB0aGUgbmFtZSBvZiBhIE1JQiBmaWxlIChvcgorICBtb2R1bGUpLCByYXRoZXIgdGhhbiB0aGUgbmFtZSBvZiBhbiBvYmplY3QgZGVmaW5lZCBpbiB0aGF0IGZpbGUuCisgIE1pYjJjIGV4cGVjdHMgdGhlIG5hbWUgb2YgYSAncm9vdCcgb2JqZWN0LCBhbmQgd2lsbCBnZW5lcmF0ZSBhCisgIHRlbXBsYXRlIGZvciB0aGUgc3ViLXRyZWUgc3RhcnRpbmcgZnJvbSB0aGVyZS4KKworICAgIElmIHlvdSd2ZSBnb3QgYSBmaWxlICdNWS1NSUIudHh0JywgZGVmaW5pbmcgdGhlIE1JQiBtb2R1bGUKKyAgJ01ZLU1JQicgd2hpY2ggY29udGFpbnMgYSBzdWJ0cmVlIGJhc2VkIG9uIHRoZSBvYmplY3QgJ215TWliJywKKyAgdGhlbiB5b3Ugc2hvdWxkIGludm9rZSBtaWIyYyBhcworICAgICAgICAgICAgIm1pYjJjIC4uLi4gbXlNaWIiCisgIHJhdGhlciB0aGFuCisgICAgICAgICAgICAibWliMmMgLi4uLiBNWS1NSUIudHh0IgorICBvciAgICAgICAgIm1pYjJjIC4uLi4gTVktTUlCIgorCisgICAgTm90ZSB0aGF0IHlvdSdsbCBwcm9iYWJseSBhbHNvIGhhdmUgdG8gYWRkIHlvdXIgTUlCIHRvIHRoZSBsaXN0IG9mCisgIE1JQnMgdGhhdCBhcmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGluIG9yZGVyIGZvciBtaWIyYyB0byByZWNvZ25pc2UKKyAgdGhlIG5hbWUgb2YgdGhpcyBvYmplY3QuICBTbyB0aGUgY29tbWFuZCB3b3VsZCB0eXBpY2FsbHkgYmUKKyAgICAgICAgICAgICJNSUJTPStNWS1NSUIgbWliMmMgLi4uLiBteU1pYiIKKyAgb3IgICAgICAgICJNSUJTPUFMTCAgICAgbWliMmMgLi4uLiBteU1pYiIKKworCisKKzxhIG5hbWU9IldoeV9kb2Vzbl90X01pYl9jX2xpa2VfdGhlX01JQl9maWxlX0lfbV9naXZpbmdfaXRfIj4KK1doeSBkb2Vzbid0IE1pYjJjIGxpa2UgdGhlIE1JQiBmaWxlIEknbSBnaXZpbmcgaXQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHRoZSBzYW1lIHByb2JsZW0gYXMgYWJvdmUuICBNaWIyYyB0YWtlcyB0aGUgbmFtZSBvZiBhIE1JQgorICBvYmplY3QsIG5vdCB0aGUgbmFtZSBvZiBhIGZpbGUgKG9yIGEgTUlCIG1vZHVsZSkuICBUcnkgdXNpbmcgdGhlCisgIG5hbWUgb2YgdGhlIE1PRFVMRS1JREVOVElUWSBkZWZpbml0aW9uLgorCisKKworPGEgbmFtZT0iTWliX2NfaWdub3Jlc19teV9NSUJfYW5kX2dlbmVyYXRlc19hX3BhaXJfb2ZfX21pYl9fX19jb2RlX2ZpbGVzX19fV2h5XyI+CitNaWIyYyBpZ25vcmVzIG15IE1JQiBhbmQgZ2VuZXJhdGVzIGEgcGFpciBvZiAnbWliLTInIGNvZGUgZmlsZXMuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgdGhlIHNhbWUgcHJvYmxlbSBhcyBhYm92ZSAtICBnaXZpbmcgbWliMmMgdGhlIG5hbWUgb2YKKyAgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgTUlCLCByYXRoZXIgdGhhbiBhbiBvYmplY3Qgd2l0aGluIGl0LgorICBFYXJsaWVyIHZlcnNpb25zIG9mIG1pYjJjIGRpZG4ndCBkZXRlY3QgdGhpcyBzaXR1YXRpb24sIGFuZAorICByYXRoZXIgdGhhbiByZXBvcnQgYW4gZXJyb3IsIGl0IG1lcnJpbHkgY29uc3RydWN0ZWQgYSB0ZW1wbGF0ZQorICBmb3IgYSBkZWZhdWx0IHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBtaWItMiBub2RlLgorCisgIE1vcmUgcmVjZW50IHZlcnNpb25zIGlzc3VlIHRoZSBlcnJvciBtZW50aW9uZWQgYWJvdmUsIGluc3RlYWQuCisKKworCis8YSBuYW1lPSJNaWJfY19jb21wbGFpbnNfYWJvdXRfX2NvbmZpZ3VyYXRpb25fZmlsZXNfX19XaGF0X3NfdGhpc19mb3JfIj4KK01pYjJjIGNvbXBsYWlucyBhYm91dCAiY29uZmlndXJhdGlvbiBmaWxlcyIuIFdoYXQncyB0aGlzIGZvcj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgWW91J3ZlIHByb2JhYmx5IHVwZ3JhZGVkIHRvIHRoZSB2NSBuZXQtc25tcCByZWxlYXNlIChmcm9tIHRoZQorICB2NCB1Y2Qtc25tcCByZWxlYXNlKS4gIFRoaXMgaW50cm9kdWNlZCBhIG5ldyBhcHByb2FjaCB0byBhZ2VudAorICBtb2R1bGUgZGV2ZWxvcG1lbnQsIGluY2x1ZGluZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgImhlbHBlcnMiLgorICBUaGUgbWliMmMgdG9vbCBjb21lcyB3aXRoIGNvbmZpZ3VyYXRpb25zIHRvIGdlbmVyYXRlIGNvZGUgZm9yCisgIG1hbnkgb2YgdGhlc2UsIGJ1dCB5b3UnbGwgbmVlZCB0byBzZWxlY3Qgd2hpY2ggaXMgbW9zdCBjb252ZW5pZW50CisgIGZvciB5b3VyIHBhcnRpY3VsYXIgY2FzZS4KKworCisKKzxhIG5hbWU9IldoaWNoX21pYl9jX2NvbmZpZ3VyYXRpb25fZmlsZV9zaG91bGRfSV91c2VfIj4KK1doaWNoIG1pYjJjIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgSSB1c2U/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBJZiB0aGUgTUlCIGNvbnRhaW5zIHNjYWxhciBvYmplY3RzLCB0aGVuIHVzZSB0aGUgY29uZmlnIGZpbGUKKyAgJ21pYjJjLnNjYWxhci5jb25mJy4gICBUaGlzIHdpbGwgZ2VuZXJhdGUgdGVtcGxhdGUgaGFuZGxlcnMgZm9yCisgIHRoZXNlIHNjYWxhciBvYmplY3RzIChpZ25vcmluZyBpbnRlcm5hbCBzdHJ1Y3R1cmFsIGRlZmluaXRpb25zLAorICB0YWJsZSBvYmplY3RzIGFuZCBub3RpZmljYXRpb25zKS4KKworICAgIElmIHRoZSBNSUIgY29udGFpbnMgdGFibGVzLCB0aGVuIHRoZXJlIGFyZSBudW1iZXIgb2YgcG9zc2libGUKKyAgY2hvaWNlcy4gIFRoZXJlIGFyZSBhdCBsZWFzdCBmb3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCB3aWxsCisgIGdlbmVyYXRlIHRlbXBsYXRlIGhhbmRsZXJzIGZvciB0YWJsZSBvYmplY3RzIChpZ25vcmluZyBpbnRlcm5hbAorICBpbnRlcm5hbCBzdHJ1Y3R1cmFsIGRlZmluaXRpb25zLCBzY2FsYXIgb2JqZWN0cyBhbmQgbm90aWZpY2F0aW9ucykuCisgIFdoaWNoIHRvIHVzZSBkZXBlbmRzIG9uIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHRhYmxlIGJlaW5nCisgIG1vZGVsbGVkIChpbiBwYXJ0aWN1bGFyIHdoZXJlIHRoZSBkYXRhIGlzIGhlbGQpLCBhbmQgcHJlZmVyZW5jZXMKKyAgYXMgdG8gdGhlIHN0eWxlIG9mIGNvZGUgc3RydWN0dXJlLgorCisgICAgVGhlIGNvbmZpZyBmaWxlICdtaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mJyBhc3N1bWVzIHRoYXQgdGhlCisgIGRhdGEgaXMgaGVsZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgYWdlbnQsIGFuZCBnZW5lcmF0ZXMgYSBzaW5nbGUKKyAgaGFuZGxlciByb3V0aW5lIGZvciBlYWNoIHRhYmxlLiAgTW9zdCBvZiB0aGUgcHJvY2Vzc2luZyBpcyBoYW5kbGVkCisgIGludGVybmFsbHkgd2l0aGluIHRoZSBhZ2VudCwgc28gdGhpcyBoYW5kbGVyIHJvdXRpbmUgaXMgcmVhbGx5CisgIG9ubHkgbmVlZGVkIGlmIHBhcnRpY3VsYXIgY29sdW1uIG9iamVjdHMgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcuCisgIAorICAgIFRoZSBjb25maWcgZmlsZSAnbWliMmMuaXRlcmF0ZS5jb25mJyBpcyBhaW1lZCBhdCB0YWJsZXMgd2hpY2gKKyAgbW9kZWwgZGF0YSBoZWxkIGV4dGVybmFsIHRvIHRoZSBhZ2VudCAobm90IG5lY2Vzc2FyaWx5IG9yZGVyZWQKKyAgYWNjb3JkaW5nIHRvIHRoZSBNSUIgaW5kZXhpbmcgcmVxdWlyZW1lbnRzKS4gIEl0IGdlbmVyYXRlcyBhIHBhaXIKKyAgb2YgIml0ZXJhdGlvbiIgcm91dGluZXMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0ZXAgdGhyb3VnaCB0aGUKKyAgdGFibGUsIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgcm93IGZvciBhbnkgZ2l2ZW4gcmVxdWVzdC4KKyAgVGhpcyByb3cgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIChzaW5nbGUpIHRhYmxlIGhhbmRsZXIgcm91dGluZSwKKyAgd2hpY2ggaGFuZGxlcyB0aGUgcmVzdCBvZiB0aGUgcHJvY2Vzc2luZyBmb3IgYWxsIG9mIHRoZSBjb2x1bW4KKyAgb2JqZWN0cyAoZm9yIGJvdGggR0VUIGFuZCBTRVQgcmVxdWVzdHMpLgorCisgICAgVGhlcmUgaXMgYWxzbyBhIHNpbWlsYXIgJ21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYnIHdoaWNoCisgIGJ1aWxkcyBvbiB0aGlzLCBidXQgZ2VuZXJhdGVzIGEgc2VyaWVzIG9mIGluZGl2aWR1YWwgcm91dGluZXMKKyAgZm9yIGhhbmRsaW5nIEdFVCBvciBTRVQgcmVxdWVzdHMgZm9yIGVhY2ggY29sdW1uIG9iamVjdC4KKworICAgIFRoZSBjb25maWcgZmlsZSAnbWliMmMuYXJyYXktdXNlci5jb25mJyBpcyBhZ2FpbiBwcmltYXJpbHkKKyAgYWltZWQgYXQgZGF0YSBoZWxkIHdpdGhpbiB0aGUgYWdlbnQgKGFsdGhvdWdoIGl0IGNhbiBhbHNvIGJlIHVzZWQKKyAgd2l0aCBleHRlcm5hbCBkYXRhKS4gIEluIGNvbnRyYXN0IHRvIHRoZSBzaW5nbGUgaGFuZGxlciByb3V0aW5lIG9mCisgIHRoZSBmaXJzdCB0d28gYXBwcm9hY2hlcywgdGhpcyBnZW5lcmF0ZXMgYSBzZXJpZXMgb2Ygc2VwYXJhdGUKKyAgdGVtcGxhdGUgcm91dGluZXMgdG8gaGFuZGxlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHByb2Nlc3NpbmcgdGhlCisgIHJlcXVlc3QuICBBcyB3aXRoIHRoZSAnbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZicgYXBwcm9hY2gsIG11Y2gKKyAgb2YgdGhlIHByb2Nlc3NpbmcgaXMgaGFuZGxlZCBpbnRlcm5hbGx5LiAgTWFueSBvZiB0aGUgZ2VuZXJhdGVkCisgIHJvdXRpbmVzIGNhbiBiZSBkZWxldGVkIGlmIHRoZSByZWxldmFudCBvYmplY3RzIG5lZWQgbm8gc3BlY2lhbAorICBwcm9jZXNzaW5nLgorIAorICAgIFRoZSBtb3N0IHJlY2VudCAnbWZkJyAob3IgJ01JQnMgRm9yIER1bW1pZXMnKSBjb25maWd1cmF0aW9uIHRha2VzCisgIHRoaXMgaWRlYSBvZiBzbWFsbCAob2Z0ZW4gb3B0aW9uYWwpICdzdHViJyByb3V0aW5lcyBldmVuIGZ1cnRoZXIuCisgIFRoaXMgZ2VuZXJhdGVzIGEgY29sbGVjdGlvbiBvZiBzZXBhcmF0ZSAqZmlsZXMqLCBlYWNoIG9mIHdoaWNoCisgIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgdGFibGUgcHJvY2Vzc2luZy4gIFRoZSBpZGVhCisgIGhlcmUgaXMgdG8gaGF2ZSBsb3RzIG9mICJiYWJ5IHN0ZXBzIiwgcmF0aGVyIHRoYW4gaGF2ZSBhbGwgdGhlCisgIHByb2Nlc3NpbmcgZGVhbHQgd2l0aCBpbiBvbmUgcGxhY2UuCisKKyAgICBUaGVyZSBhcmUgYWxzbyBzb21lIG90aGVyICdtaWIyYycgY29uZmlndXJhdGlvbiBmaWxlcywgZm9yIG1vcmUKKyAgc3BlY2lhbGlzZWQgcmVxdWlyZW1lbnRzIChlLmcuIGdlbmVyYXRpbmcgbm90aWZpY2F0aW9ucywgIndhdGNoZWQiCisgIHNjYWxhciBvYmplY3RzLCBvciBjb2RlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB2NCBVQ0QgYWdlbnQKKyAgQVBJKSwgYnV0IHRoZXNlIGFyZSB0aGUgbWFpbiBjaG9pY2VzIGZvciBtb3N0IHJlcXVpcmVtZW50cy4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9oYXZlX01pYl9jX2dlbmVyYXRlX2NvZGVfZm9yX2JvdGhfc2NhbGFyc19hbmRfdGFibGVzXyI+CitIb3cgY2FuIEkgaGF2ZSBNaWIyYyBnZW5lcmF0ZSBjb2RlIGZvciBib3RoIHNjYWxhcnMgYW5kIHRhYmxlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgdjUgTmV0LVNOTVAgbWliMmMgdG9vbCB1c2VzIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8KKyAgZ2VuZXJhdGUgY29kZSBmb3Igc2NhbGFyIG9iamVjdHMsIGFuZCBmb3IgdGFibGVzLiAgVGhpcyBtZWFucyB0aGF0CisgIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBzaW5nbGUgY29kZSBmaWxlCisgIHRoYXQgc3VwcG9ydHMgYm90aCBzY2FsYXJzIGFuZCB0YWJsZXMuCisKKyAgICBJbnN0ZWFkLCBpdCdzIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSB0aGUgdHdvIGNvZGUgZmlsZXMgc2VwYXJhdGVseSwKKyAgYW5kIHRoZW4gY29tYmluZSB0aGUgdHdvIGZpbGVzIG1hbnVhbGx5LiAgVGhlIGhhbmRsZXIgcm91dGluZXMgZnJvbQorICBvbmUgZmlsZSBjYW4gc2ltcGx5IGJlIGluY2x1ZGVkIGluIHRoZSBvdGhlciB3aXRoIG5vIGNoYW5nZXMgbmVlZGVkLgorICBUaGUgY29ycmVzcG9uZGluZyByZWdpc3RyYXRpb24gb2YgdGhlc2UgaGFuZGxlcnMgY2FuIHRoZW4gYmUgY29waWVkCisgIGZyb20gdGhlIGZpcnN0IGluaXRpYWxpc2F0aW9uIHJvdXRpbmUgaW50byB0aGUgc2Vjb25kLgorCisKKworPGEgbmFtZT0iQXJlX3RoZXJlX2FueV9leGFtcGxlc19fb3JfZG9jdW1lbnRhdGlvbl8iPgorQXJlIHRoZXJlIGFueSBleGFtcGxlcywgb3IgZG9jdW1lbnRhdGlvbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vc3Qgb2YgdGhlIE1JQiBtb2R1bGVzIHNoaXBwZWQgd2l0aCB0aGUgTmV0LVNOTVAgYWdlbnQgc3RpbGwKKyAgdXNlIHRoZSB2NCAidHJhZGl0aW9uYWwiIE1JQiBtb2R1bGUgQVBJLCBidXQgYSBmZXcgdXNlIG9uZSBvZiB0aGUKKyAgbmV3ZXIgdjUgaGVscGVyLWJhc2VkIGhhbmRsZXJzLgorCisgICAgVGhlIGRhdGFzZXQgaGFuZGxlciBpcyB1c2VkIGluIHRoZSB0d28gRElTTUFOLUVWRU5ULU1JQiBtb2R1bGVzCisgIChkaXNtYW4vbXRlRXZlbnRUYWJsZSBhbmQgZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUpLCBhcworICB3ZWxsIGFzIHRoZSAnc25tcHRyYXBkJyBpbXBsZW1lbnRhdGlvbiBvZiBsb2dnaW5nIGluY29taW5nIHRyYXBzCisgIChhcHBzL25vdGlmaWNhdGlvbl9sb2cpCisKKyAgICBUaGUgYmFzaWMgaXRlcmF0b3IgaGFuZGxlciBpcyB1c2VkIGluIGEgbnVtYmVyIG9mIG1vZHVsZXMsIHN1Y2gKKyAgYXMgdGhlIGxhdGVzdCBUQ1AgYW5kIFVEUCB0YWJsZSBpbXBsZW1lbnRhdGlvbnMgKG1pYklJL3RjcFRhYmxlICYKKyAgbWliSUkvdWRwVGFibGUpLCBWQUNNIGNvbnRleHQgaGFuZGxpbmcgKG1pYklJL3ZhY21fY29udGV4dCkgYW5kCisgIHZhcmlvdXMgdGFibGVzIHJlbGF0aW5nIHRvIGFnZW50IGludGVybmFscyAoYWdlbnQvKikuICBUaGVzZSBzaG93CisgIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBhcHByb2FjaGVzIHRvIHVzaW5nIHRoZSBpdGVyYXRvciBoZWxwZXIsIHNvCisgIGl0J3Mgd29ydGggY29tcGFyaW5nIHRoZW0uCisKKyAgICBUaGUgdHdvIGV4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlKiBtb2R1bGVzIHByb3ZpZGUgYSBjb250cmFzdAorICBiZXR3ZWVuIHRoZSBpdGVyYXRvciBhbmQgaXRlcmF0b3JfYWNjZXNzIGhlbHBlcnMuCisKKyAgICBUaGUgTmV0LVNOTVAgYWdlbnQgZG9lcyBub3QgY3VycmVudGx5IGluY2x1ZGUgYW55IE1JQiBtb2R1bGVzCisgIHVzaW5nIHRoZSBhcnJheS11c2VyIGNvbnRhaW5lci1iYXNlZCBoZWxwZXIuICBUaGUgYmVzdCBleGFtcGxlcworICBvZiB0aGlzIGFyZSB0byBiZSBmb3VuZCBpbiB0aGUgbmV0LXBvbGljeSBwcm9qZWN0LgorICBTZWUgaHR0cDovL25ldC1wb2xpY3kuc291cmNlZm9yZ2UubmV0LworCisKKworPGEgbmFtZT0iSV92ZV9jcmVhdGVkX2FfbmV3X21vZHVsZV93aXRoX19taWJfY19fYnV0X2l0X2RvZXNuX3Rfd29ya19fX1doeV9ub3RfIj4KK0kndmUgY3JlYXRlZCBhIG5ldyBtb2R1bGUgd2l0aCAnbWliMmMnIGJ1dCBpdCBkb2Vzbid0IHdvcmsuICBXaHkgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFJlbWVtYmVyIHRoYXQgJ21pYjJjJyBnZW5lcmF0ZXMgYSB0ZW1wbGF0ZSBmb3IgdGhlIE1JQiBpbXBsZW1lbnRhdGlvbi4KKyAgSXQgZG9lc24ndCBmaWxsIGluIGFsbCB0aGUgZGV0YWlscyBmb3IgeW91LiAgSW4gcGFydGljdWxhciwgaXQgY2Fubm90CisgIGtub3cgaG93IHRvIG9idGFpbiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGFuc3dlciBwYXJ0aWN1bGFyIHF1ZXJpZXMuCisgIFRoYXQncyB0aGUgam9iIG9mIHRoZSBNSUIgbW9kdWxlIHByb2dyYW1tZXIgKHlvdSEpIC0gIFNlZSB0aGUgcHJldmlvdXMKKyAgcXVlc3Rpb24gZm9yIGhvdyB0byBwcm9jZWVkLgorCisgICAgRXNzZW50aWFsbHkgbWliMmMgaGFuZGxlcyB0aGUgc3ludGF4IG9mIHRoZSBNSUIgaW1wbGVtZW50YXRpb24sCisgIGxlYXZpbmcgeW91IHRvIGNvbmNlbnRyYXRlIG9uIHRoZSBzZW1hbnRpY3MuCisKKworCis8YSBuYW1lPSJXaGVyZV9zaG91bGRfSV9wdXRfdGhlX2ZpbGVzX3Byb2R1Y2VkX2J5X19taWJfY19fIj4KK1doZXJlIHNob3VsZCBJIHB1dCB0aGUgZmlsZXMgcHJvZHVjZWQgYnkgJ21pYjJjJz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIElmIHlvdSdyZSB1c2luZyB0aGUgbWFpbiBzb3VyY2UgdHJlZSB0byBjb21waWxlIHlvdXIgbmV3IG1vZHVsZSwgdGhlbgorICBwdXQgdGhlc2UgdHdvIGZpbGVzIChteW1pYi5bY2hdKSBpbiB0aGUgZGlyZWN0b3J5ICdhZ2VudC9taWJncm91cCcuCisgIFlvdSBzaG91bGQgdGhlbiByZS1ydW4gY29uZmlndXJlIHRvIGFkZCBpbiB5b3VyIG5ldyBtb2R1bGUKKyAgKCJjb25maWd1cmUgLS13aXRoLW1pYi1tb2R1bGVzPW15bWliIikgYW5kIHJlY29tcGlsZS4KKworICAgIElmIHlvdSd2ZSBnb3QgYSBudW1iZXIgb2YgbmV3IG1vZHVsZXMgdG8gYWRkLCBpdCBtaWdodCBiZQorICBzZW5zaWJsZSB0byBwdXQgdGhlbSBhbGwgaW50byBhIHNpbmdsZSBzdWJkaXJlY3Rvcnkgb2YgJ21pYmdyb3VwJy4KKyAgVGhlbiBjcmVhdGUgYSBoZWFkZXIgZmlsZSwgbGlzdGluZyB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLgorICBUaGlzIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6CisKKwkJY29uZmlnX3JlcXVpcmUobXltaWIvbXlPYmplY3RzKQorCQljb25maWdfcmVxdWlyZShteW1pYi9teVRhYmxlKQorCQljb25maWdfcmVxdWlyZShteW1pYi9teU90aGVyVGFibGUpCisKKyAgSWYgdGhpcyB3YXMgc2F2ZWQgYXMgdGhlIGZpbGUgJ215bWliLmgnLCB0aGVuIHRoZSBzYW1lIGNvbmZpZ3VyZQorICBsaW5lIGdpdmVuIGFib3ZlLCB3b3VsZCBwdWxsIGluIGFsbCB0aHJlZSBtb2R1bGVzLiAgU2VlIHRoZQorICBjdXJyZW50IGNvbnRlbnRzIG9mICdhZ2VudC9taWJncm91cCcgZm9yIGV4YW1wbGVzIG9mIHRoaXMuCisKKworCis8YSBuYW1lPSJNaWJfY19vbmx5X2hhbmRsZXNfYV9zaW5nbGVfdGFibGVfaW5fbXlfTUlCX19Ib3dfY2FuX0lfZml4X3RoaXNfIj4KK01pYjJjIG9ubHkgaGFuZGxlcyBhIHNpbmdsZSB0YWJsZSBpbiBteSBNSUIuIEhvdyBjYW4gSSBmaXggdGhpcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyB3YXMgYSBidWcgaW4gdGhlIG1pYjJjIHNjcmlwdCwgd2hpY2ggd2FzIGNvcnJlY3RlZCB3aXRoCisgIHRoZSA0LjIgcmVsZWFzZS4gIEVhcmxpZXIgdmVyc2lvbnMgY2FuIGJlIGZpeGVkIGJ5IGFwcGx5aW5nIHRoZQorICBmb2xsb3dpbmcgcGF0Y2g6CisKKwkkIGRpZmYgLXUgbWliMmMuY2xuIG1pYjJjCisJLS0tIG1pYjJjLmNsbiAgIFdlZCBOb3YgMjkgMTU6MTI6NDcgMjAwMAorCSsrKyBtaWIyYyAgICAgICBXZWQgTm92IDI5IDE1OjEzOjE4IDIwMDAKKwlAQCAtMTMyLDYgKzEzMiw2IEBACisJICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSBmb3JlYWNoICR2dGFibGUgKEB0YWJsZV9saXN0KSB7CisJICAgICBmb3JlYWNoICRwdGFibGUgKEBwcm9jZXNzdGFibGUpIHsKKwktICAgICAgICR2YXJpYWJsZXN7JHB0YWJsZX17J3Byb2Nlc3NlZCd9ID0gCisJKyAgICAgICAkdmFyaWFibGVzeyRwdGFibGV9eydwcm9jZXNzZWQnfSAuPSAKKwkgICAgICAgICAgICAoZXZhbCAiXCIkdmFyaWFibGVzeyRwdGFibGV9eydjb2RlJ31cIiIpIC4gIlxuXG4iOworCSAgICAgfQorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX3N1cHBvcnRfYV9sYXJnZV90YWJsZV9fd2l0aF9tb3JlX3RoYW5fX19fX2NvbHVtbl9vYmplY3RzXyI+CitIb3cgY2FuIEkgc3VwcG9ydCBhIGxhcmdlIHRhYmxlLCB3aXRoIG1vcmUgdGhhbiAyNTYgY29sdW1uIG9iamVjdHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgYSBwcm9ibGVtIChhdCBsZWFzdCBhcHBhcmVudGx5KSB3aXRoIHRoZSB2NCBVQ0QgbW9kdWxlCisgIEFQSSwgd2hpY2ggdXNlcyBhICJtYWdpYyBudW1iZXIiIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHZhcmlvdXMKKyAgY29sdW1uIG9iamVjdHMgaW1wbGVtZW50ZWQgYnkgYSBjb21tb24gdmFyaWFibGUgaGFuZGxpbmcgcm91dGluZS4KKyAgU2luY2UgdGhpcyBmaWVsZCBpcyBkZWZpbmVkIGFzIGFuIHVuc2lnbmVkIGNoYXJhY3RlciwgaXQgY2FuIG9ubHkKKyAgdGFrZSB2YWx1ZXMgMC0yNTUuICAgU28gaXQgd291bGQgYXBwZWFyIHRoYXQgdGhlIGFnZW50IGNhbm5vdAorICBzdXBwb3J0IHRhYmxlcyAob3Igc2NhbGFyIGdyb3Vwcykgd2l0aCBtb3JlIHRoYW4gMjU2IG9iamVjdHMsCisgIHNpbmNlIHRoaXMgd291bGQgc3RhcnQgdG8gZHVwbGljYXRlIHRoZXNlIG1hZ2ljIG51bWJlcnMuCisKKyAgICBIb3dldmVyLCB0aGUgYWdlbnQgZG9lc24ndCBhY3R1YWxseSBjYXJlIHdoaWNoIHJvdXRpbmUgaW1wbGVtZW50cworICBhIGdpdmVuIG9iamVjdCwgYW5kIG1hZ2ljIG51bWJlcnMgb25seSBuZWVkIHRvIGJlIHVuaXF1ZSB3aXRoaW4gYQorICBzaW5nbGUgdmFyaWFibGUgaGFuZGxpbmcgcm91dGluZS4gIFNvIGl0IGlzIGFjdHVhbGx5IHBlcmZlY3RseQorICBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBsYXJnZXIgdGFibGUgYnkgc3BsaXR0aW5nIGl0IGJldHdlZW4gdHdvCisgIChvciBtb3JlKSB2YXJpYWJsZSBoYW5kbGluZyByb3V0aW5lcy4gIFRoZXNlIGNhbiB0aGVuIHJlLXVzZSB0aGUKKyAgbWFnaWMgbnVtYmVycyBxdWl0ZSBzYWZlbHk6CisKKyAgICBzdHJ1Y3QgdmFyaWFibGUxIFtdID0geworICAgICAgIHtNQUdJQzEsICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215Zmlyc3QsICAxLCB7ICAxfX0sCisgICAgICAge01BR0lDMiwgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlmaXJzdCwgIDEsIHsgIDJ9fSwKKyAgICAJCToKKyAgICAgICB7TUFHSUMyNTUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teWZpcnN0LCAgMSwgezI1NX19LAorICAgICAgIHtNQUdJQzEsICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215c2Vjb25kLCAxLCB7MjU2fX0sCisgICAgICAge01BR0lDMiwgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlzZWNvbmQsIDEsIHsyNTd9fSwKKyAgICAJCToKKyAgICAgICB7TUFHSUMyNTUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teXNlY29uZCwgMSwgezUxMH19CisgICAgfTsKKworICBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgYSBnaXZlbiBtYWdpYyBudW1iZXIgaXNuJ3QgcmUtdXNlZCB3aXRoaW4KKyAgdGhlIHNhbWUgdmFyaWFibGUgaGFuZGxpbmcgcm91dGluZS4gIFRoZSB2NSB0YWJsZSBoYW5kbGVycyB0eXBpY2FsbHkKKyAgdXNlIGFuIGludGVnZXIgdmFyaWFibGUgZm9yIGhvbGRpbmcgY29sdW1uIGluZm9ybWF0aW9uLCBzbyBhcmVuJ3QKKyAgc3ViamVjdCB0byB0aGUgc2FtZSBsaW1pdGF0aW9ucy4KKworICAgIFRob3VnaCBJJ2QgaGF2ZSB0byBxdWVzdGlvbiB3aGV0aGVyIGhhdmluZyBzdWNoIGEgd2lkZSB0YWJsZSBpcworICBuZWNlc3NhcmlseSBhIHBhcnRpY3VsYXJseSBnb29kIGRlc2lnbiBzdHJhdGVneSEKKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9nZXRfdGhlX2FnZW50X3RvX2dlbmVyYXRlX2FfdHJhcF9fb3JfaW5mb3JtX18iPgorSG93IGNhbiBJIGdldCB0aGUgYWdlbnQgdG8gZ2VuZXJhdGUgYSB0cmFwIChvciBpbmZvcm0pPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBHZW5lcmF0aW5nIGEgdHJhcCBpcyByZWFzb25hYmx5IHNpbXBsZSAtIGp1c3QgY2FsbCBvbmUgb2YgdGhlCisgIHRyYXAgQVBJIHJvdXRpbmVzICdzZW5kX2Vhc3lfdHJhcCgpJyBvciAnc2VuZF92MnRyYXAnIHdpdGggdGhlCisgIHJlbGV2YW50IGluZm9ybWF0aW9uIChnZW5lcmljIGFuZCBzcGVjaWZpYyB0cmFwIHZhbHVlcywgb3IgYQorICB2YXJiaW5kIGxpc3QgcmVzcGVjdGl2ZWx5KS4gIFNlZSB0aGUgJ3NubXBfdHJhcF9hcGkoMyknIG1hbiBwYWdlCisgIGZvciBkZXRhaWxzLgorCisgICAgVGhlICdtaWIyYy5ub3RpZnkuY29uZicgY29uZmlndXJhdGlvbiBmaWxlIGNhbiBiZSB1c2VkIHRvCisgIGNvbnN0cnVjdCBhIHN1aXRhYmxlIHRlbXBsYXRlIHJvdXRpbmUgZm9yIGdlbmVyYXRpbmcgYSB0cmFwLAorICBpbmNsdWRpbmcgYnVpbGRpbmcgdGhlIHZhcmlhYmxlIGxpc3QgZnJvbSB0aGUgTUlCIHRyYXAKKyAgZGVmaW5pdGlvbi4gIFRoZXNlIHZhcmlhYmxlcyBjYW4gdGhlbiBiZSBnaXZlbiBzdWl0YWJsZSB2YWx1ZXMsCisgIGJlZm9yZSBpbnZva2luZyB0aGUgJ3NlbmRfdjJ0cmFwJyBjYWxsIHRvIGFjdHVhbGx5IHNlbmQgdGhlIHRyYXAuCisKKyAgICBOb3RlIHRoYXQgdGhlc2UgQVBJcyBhcmUgb25seSBhdmFpbGFibGUgd2l0aGluIHRoZSBhZ2VudCAob3IKKyAgc3ViYWdlbnRzKSwgYW5kIGFyZSBub3QgYXZhaWxhYmxlIHRvIHN0YW5kLWFsb25lIGFwcGxpY2F0aW9ucy4KKyAgVGhlIGNvZGUgZm9yICdzbm1wdHJhcCcgc2hvd3MgYW4gYXBwcm9hY2ggdG8gdXNlIGluIHN1Y2ggYSBjYXNlLgorCisgICAgRGV0ZXJtaW5pbmcgX3doZW5fIHRvIGdlbmVyYXRlIHRoZSB0cmFwIChlaXRoZXIgZGlyZWN0bHkgb3IKKyAgdmlhIHRoZSBtaWIyYy1nZW5lcmF0ZWQgcm91dGluZSkgaXMgb2Z0ZW4gaGFyZGVyLiAgSWYgdGhlIHRyYXAKKyAgaXMgZ2VuZXJhdGVkIGluIHJlc3BvbnNlIHRvIHNvbWUgYWN0aW9uIHdpdGhpbiB0aGUgYWdlbnQsIChlLmcuCisgIGFzIHRoZSByZXN1bHQgb2YgYSBTRVQpLCB0aGVuIHRoaXMgaXNuJ3QgdG9vIG11Y2ggb2YgYSBwcm9ibGVtLgorCisgICAgQnV0IGlmIHRoZSB0cmFwIGlzIGludGVuZGVkIHRvIHJlcG9ydCBvbiBhIGNoYW5nZSBvZiBzdGF0dXMKKyAgKGUuZy4gYSBuZXR3b3JrIGludGVyZmFjZSBnb2luZyB1cCBvciBkb3duLCBvciBhIGRpc2sgZmlsbGluZyB1cCksCisgIHRoZW4gYWN0dWFsbHkgZGV0ZWN0aW5nIHRoaXMgaXMgbm9uLXRyaXZpYWwuICAgSXQncyBuZWNlc3NhcnkgdG8KKyAgcG9sbCB0aGUgdmFsdWUocykgb24gYSByZWd1bGFyIGJhc2lzLCBzYXZlIHRoZSByZXN1bHRzIGFuZCBjb21wYXJlCisgIHRoZW0gd2l0aCB0aGUgbmV3IHZhbHVlcyB0aGUgbmV4dCB0aW1lIHJvdW5kLgorCisgICAgV2l0aCB0aGUgdjQgVUNEIGFnZW50LCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUgZG9uZSBtYW51YWxseSwKKyAgdXNpbmcgdGhlIHJvdXRpbmVzIGRvY3VtZW50ZWQgaW4gJ3NubXBfYWxhcm0oMyknLiAgVGhlIHY1IE5ldC1TTk1QCisgIGFnZW50IGhhcyBpbXBsZW1lbnRlZCB0aGUgRGlzdHJpYnV0ZWQgTWFuYWdlbWVudCBFdmVudCBNSUIsIHdoaWNoCisgIHByb3ZpZGVzIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBhIGZsZXhpYmxlLCBzdGFuZGFyZGlzZWQgbWFubmVyLgorICBTZWUgdGhlICdzbm1wZC5jb25mKDUpJyBtYW4gcGFnZSAodW5kZXIgRElTTUFOLUVWRU5ULU1JQikgZm9yCisgIGRldGFpbHMgKGluY2x1ZGluZyB0aGUgbmVlZCBmb3IgYW4gJ2FnZW50U2VjTmFtZScgc2V0dGluZykuCisgIAorCisKKzxhIG5hbWU9IldoYXRfaWZfSV9tX3VzaW5nX2FuX0FnZW50WF9zdWJfYWdlbnRfaW5zdGVhZF8iPgorV2hhdCBpZiBJJ20gdXNpbmcgYW4gQWdlbnRYIHN1Yi1hZ2VudCBpbnN0ZWFkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGF0IGRvZXNuJ3QgbWF0dGVyIC0gdGhlIHJvdXRpbmVzIGRlc2NyaWJlZCBpbiAnc25tcF90cmFwX2FwaSgzKScKKyAgY2FuIHN0aWxsIGJlIHVzZWQsIGFuZCB0aGUgc3ViYWdlbnQgd2lsbCBkbyB0aGUgUmlnaHQgVGhpbmcuCisgIAorICBPbmUgb2YgdGhlIG9yaWdpbmFsIGRlc2lnbiBhaW1zIG9mIHRoZSBBZ2VudFggc3VwcG9ydCB3YXMgdGhhdCB0aGlzCisgIHNob3VsZCBiZSB0cmFuc3BhcmVudCB0byBhIE1JQiBtb2R1bGUgaW1wbGVtZW50ZXIuICBUaGUgYWdlbnQtbW9kdWxlCisgIGludGVyZmFjZSBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgdGhlIHByb3RvY29sIHVzZWQgdG8gcmVjZWl2ZSB0aGUKKyAgb3JpZ2luYWwgcmVxdWVzdC4gIFNvIHRoZSBleGFjdCBzYW1lIE1JQiBtb2R1bGUgY29kZSBjb3VsZCBiZSB1c2VkCisgIHdpdGhpbiBhIHRyYWRpdGlvbmFsIFNOTVAtb25seSBhZ2VudCwgb3IgYW4gQWdlbnRYIHN1YmFnZW50LCB3aXRoIG5vCisgIGNoYW5nZXMgbmVlZGVkLgorICAgIEluIGZhY3QsIHRoZSBtYWluIGFnZW50IHN1cHBsaWVkIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2UgY2FuIGluZGVlZAorICBiZSBydW4gYXMgYW4gU05NUCBhZ2VudCBvciBhbiBBZ2VudFggc3ViYWdlbnQsIHNpbXBseSBiYXNlZCBvbiBjb21tYW5kCisgIGxpbmUgZmxhZ3MgKG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbiBvcHRpb25zKS4KKworCisKKzxhIG5hbWU9Ik1JU0MiPgorTUlTQworPT09PT09CisKKzxhIG5hbWU9IldoeV9hcmVfcGFja2V0c19yZXF1ZXN0aW5nX3RoZV9zYW1lX2luZm9ybWF0aW9uX2xhcmdlcl93aXRoX1VDX0RhdmlzX1NOTVBfIj4KK1doeSBhcmUgcGFja2V0cyByZXF1ZXN0aW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uIGxhcmdlciB3aXRoIFVDLURhdmlzIFNOTVA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIHNob3VsZG4ndCBoYXBwZW4gd2l0aCB2ZXJzaW9uIDQuMiBvciBsYXRlciwgYnV0IGZvciBvbGRlcgorICB2ZXJzaW9uIHRoZSBmb2xsb3dpbmcgc3RpbGwgYXBwbGllczoKKworICAgIFNvbWUgdXNlcnMgbm90ZSB0aGF0IFVDRC1TTk1QIGFwcGxpY2F0aW9ucyBhbHdheXMgZ2VuZXJhdGUgbGFyZ2VyIFBEVXMKKyAgdGhhbiBvdGhlciBTTk1QIHBhY2thZ2VzLCBldmVuIGlmIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgaXMgdGhlIHNhbWUuCisgIEZ1cnRoZXIsIHRoZXJlIGFyZSBzb21lIGFnZW50cyB0aGF0IHJlZnVzZSBQRFVzIGZyb20gVUNELVNOTVAgYXBwbGljYXRpb25zCisgIGJ1dCBhY2NlcHQgUERVcyBmcm9tIG90aGVyIGFwcGxpY2F0aW9ucy4KKworICBVQ0QtU05NUCBpcyBiYXNlZCBvbiB0aGUgQ01VIGNvZGUgZnJvbSBhIGxvbmcgdGltZSBhZ28gd2hpY2ggZW5jb2RlZCB0aGluZ3MKKyAgdXNpbmcgdGhlIGxvbmcgZm9ybSBvZiBsZW5ndGggZW5jb2RpbmcuICBTb21lIGFnZW50cyB1c2UgdGhlIHNob3J0IGZvcm0KKyAgb2YgbGVuZ3RoIGVuY29kaW5nIG9ubHksIGFuZCBkbyBub3QgdW5kZXJzdGFuZCB0aGUgbG9uZyBmb3JtLgorCisgICAgVGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSB3aXRoIFVDRCB2NC4yIG9yIGhpZ2hlciwgb3IgdGhlIE5ldC1TTk1QCisgIHJlbGVhc2VzLgorCisKKworPGEgbmFtZT0iV2hhdF9BU05fX19wYXJzZXJfaXNfdXNlZF8iPgorV2hhdCBBU04uMSBwYXJzZXIgaXMgdXNlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgcGFyc2VyIHVzZWQgYnkgYm90aCB0aGUgYWdlbnQgYW5kIGNsaWVudCBwcm9ncmFtcyBpcyBjb2RlZCBieSBoYW5kLgorICBUaGlzIHBhcnNlciBoYXMgcmVjZW50bHkgYmVlbiByZS12YW1wZWQgdG8gYWxsb3cgY29udHJvbCBvZiB3aGljaCBvZiAKKyAgdGhlIGF2YWlsYWJsZSBNSUJzIHNob3VsZCBiZSBpbmNsdWRlZCwgYW5kIHRvIGhhbmRsZSBkdXBsaWNhdGUgb2JqZWN0CisgIHN1YmlkZW50aWZpZXJzLgorICAgIFRoZSBzb3VyY2UgY29kZSBjYW4gYmUgZm91bmQgaW4gdGhlIHNubXBsaWIgZGlyZWN0b3J5IChpbiAncGFyc2UuYycpLAorICBhbmQgdGhlIHBhcnNlciBpcyB1c3VhbGx5IGJ1bmRsZWQgaW50byB0aGUgbGlicmFyeSAnbGlic25tcC5hJworCisgICAgTm90ZSB0aGF0IHRoZSBwYXJzZXIgYXR0ZW1wdHMgdG8gYmUgZmFpcmx5IGZvcmdpdmluZyBvZiBzb21lIGNvbW1vbgorICBlcnJvcnMgYW5kIGluY29tcGF0aWJpbGl0aWVzIGluIE1JQiBmaWxlcy4gIFRoZSBOZXQtU05NUCB0b29scyBhY2NlcHRpbmcKKyAgYSBNSUIgZmlsZSB3aXRob3V0IGNvbXBsYWludCBkb2VzICpub3QqIGltcGx5IHRoYXQgdGhlIE1JQiBpcyBzdHJpY3RseQorICBjb3JyZWN0LgorICAgIENlcnRhaW4gTUlCcyBtYXkgbmVlZCBzb21lIGFtZW5kbWVudHMgdG8gYWxsb3cgdGhlbSB0byBiZSByZWFkCisgIGNvcnJlY3RseSBieSB0aGUgcGFyc2VyLiAgQ29udGFjdCB0aGUgY29kZXJzJyBsaXN0IGZvciBhZHZpY2UuCisKKworCis8YSBuYW1lPSJXaGF0X2lzX3RoZV9PZmZpY2lhbF9TbG9nYW5fb2ZfdGhlX25ldF9zbm1wX2NvZGVyc19saXN0XyI+CitXaGF0IGlzIHRoZSBPZmZpY2lhbCBTbG9nYW4gb2YgdGhlIG5ldC1zbm1wLWNvZGVycyBsaXN0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICJUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tb2J2aW91cyBhbmQgbWF5IG5lZWQgdG8gYmUgaW1wcm92ZWQuIgorCSh3aXRoIHRoYW5rcyB0byBSb2hpdCBEdWJlKQorCisgIEFuZCBhbiBhbHRlcm5hdGUsIGFkZGVkIDI2LUFwci0yMDAwOgorICAKKyAgIkluIHRoZW9yeSwgaXQgc2hvdWxkbid0IGJlIHRoYXQgaGFyZCwgYnV0IGl0IGp1c3QgbmVlZHMgdG8gYmUgZG9uZS4iCisKKworCis8L3ByZT48aHI+CitMYXN0IG1vZGlmaWVkOiBTYXQgTWFyIDIwIDIxOjUzOjM5IDIwMDQKZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaSBiL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaQppbmRleCAzZjhkNjQwLi4xMDRkYzE2IDEwMDY0NAotLS0gYS93aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2kKKysrIGIvd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpCkBAIC0xMSwxMSArMTEsMzIgQEAKICAgUHVzaCAkMQogICBQdXNoICQyCiAgIFB1c2ggJDMKKyAgUHVzaCAkNAorICBQdXNoICQ1CiAKICAgIyBkb24ndCBhZGQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdAogICBJZkZpbGVFeGlzdHMgJDAgIiIgQWRkVG9QYXRoX2RvbmUKLQorICAKICAgUmVhZEVudlN0ciAkMSBQQVRICisgIAorICAjIElmIGxlbmd0aCBvZiBQQVRIIHJldHVybmVkIGlzIDAsIHdlIGNvdWxkbid0IHJlYWQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICh1bmxpa2VseSkgb3IKKyAgIyBpdCdzIGVtcHR5IGJlY2F1c2UgaXQncyA+IDEwMjQgY2hhcmFjdGVycyBsb25nLiAgTlNJUyBvbmx5IHN1cHBvcnRzIHZhcmlhYmxlcyB1cCB0byAxMDI0IAorICAjIGNoYXJhY3RlcnMgdW5sZXNzIHdlJ3JlIHVzaW5nIHRoZSA4MTkyIGxlbmd0aCB2ZXJzaW9uLCB3aGljaCB3ZSBhcmUgbm90LiAgCisgICMgTm90ZTogIE9uIFhQIChhdCBsZWFzdCksIHRoZSBzdHJpbmcgcmVhZCB1c2luZyBSZWFkRW52U3RyIGlzIHNob3J0ZXIgdGhhbiB3ZSB3b3VsZCBleHBlY3QuCisgICMgRHVyaW5nIHRlc3RpbmcsIHdoZW4gdGhlIFBBVEggd2FzIDEwMjAgY2hhcmFjdGVycyBsb25nLCBTdHJMZW4gb2YgdGhlIHBhdGggcmV0dXJuZWQgOTg0LgorICAjIFdoZW4gbWFuaXB1bGF0aW5nIHRoZSBwYXRoIG9uIFhQLCB1c2UgdGhlIHJlZ2lzdHJ5IGluc3RlYWQuCisgIFN0ckxlbiAkNCAiJDEiCisgICMgTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIlBBVEggbGVuZ3RoOiAkNC4uLiIKKyAgSW50Q21wICQ0IDAgUGF0aF9Ub29fU2hvcnQxCisgIEdvdG8gQWRkVG9QYXRoX0NvbnQxCisgIAorICBQYXRoX1Rvb19TaG9ydDE6CisgICMgUEFUSCBpcyBlbXB0eS4gIERpc3BsYXkgd2FybmluZy4KKyAgTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIllvdXIgUEFUSCB2YXJpYWJsZSBjb3VsZCBub3QgYmUgcmVhZCwgcHJvYmFibHkgYmVjYXVzZSBpdCBpcyBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgKGluc3RhbGxlciBsaW1pdGF0aW9uKS4gIFBsZWFzZSBhZGQgdGhlIGZvbGRlciAkMCB0byB5b3VyIFBBVEggdXNpbmcgdGhlIFN5c3RlbSBDb250cm9sIFBhbmVsLiIKKyAgZ290byBBZGRUb1BhdGhfZG9uZQorCisgIEFkZFRvUGF0aF9Db250MToKKyAgCiAgIFB1c2ggIiQxOyIKICAgUHVzaCAiJDA7IgogICBDYWxsIFN0clN0cgpAQCAtNTYsMTcgKzc3LDQxIEBACiAgIEFkZFRvUGF0aF9OVDoKICAgICA7UmVhZFJlZ1N0ciAkMSBIS0NVICJFbnZpcm9ubWVudCIgIlBBVEgiCiAgICAgUmVhZFJlZ1N0ciAkMSBIS0xNICdTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxTZXNzaW9uIE1hbmFnZXJcRW52aXJvbm1lbnQnICJQQVRIIgorCiAgICAgU3RyQ3B5ICQyICQxIDEgLTEgIyBjb3B5IGxhc3QgY2hhcgogICAgIFN0ckNtcCAkMiAiOyIgMCArMiAjIGlmIGxhc3QgY2hhciA9PSA7CiAgICAgICBTdHJDcHkgJDEgJDEgLTEgIyByZW1vdmUgbGFzdCBjaGFyCi0gICAgU3RyQ21wICQxICIiIEFkZFRvUGF0aF9OVGRvSXQKLSAgICAgIFN0ckNweSAkMCAiJDE7JDAiCi0gICAgQWRkVG9QYXRoX05UZG9JdDoKLSAgICAgIDtXcml0ZVJlZ0V4cGFuZFN0ciBIS0NVICJFbnZpcm9ubWVudCIgIlBBVEgiICQwCi0gICAgICBXcml0ZVJlZ0V4cGFuZFN0ciBIS0xNICdTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxTZXNzaW9uIE1hbmFnZXJcRW52aXJvbm1lbnQnICJQQVRIIiAkMAotICAgICAgU2VuZE1lc3NhZ2UgJHtIV05EX0JST0FEQ0FTVH0gJHtXTV9XSU5JTklDSEFOR0V9IDAgIlNUUjpFbnZpcm9ubWVudCIgL1RJTUVPVVQ9NTAwMAorCisgICAgIyBNYWtlIHN1cmUgb2xkIFBBVEggaXMgbm90IGVtcHR5Li4KKyAgICBTdHJMZW4gJDQgIiQxIgorICAgICNNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiUmVnIFBBVEggbGVuZ3RoOiAkNC4uLiIKKyAgICBJbnRDbXAgJDQgMCBQYXRoX1Rvb19TaG9ydDIKKyAgICBHb3RvIEFkZFRvUGF0aF9Db250MgorICAgIFBhdGhfVG9vX1Nob3J0MjoKKyAgICAjIFBBVEggaXMgZW1wdHkuICBEaXNwbGF5IHdhcm5pbmcuCisgICAgTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIllvdXIgUEFUSCB2YXJpYWJsZSBjb3VsZCBub3QgYmUgcmVhZCwgcHJvYmFibHkgYmVjYXVzZSBpdCBpcyBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgKGluc3RhbGxlciBsaW1pdGF0aW9uKS4gIFBsZWFzZSBhZGQgdGhlIGZvbGRlciAkMCB0byB5b3VyIFBBVEggdXNpbmcgdGhlIFN5c3RlbSBDb250cm9sIFBhbmVsLiIKKyAgICBnb3RvIEFkZFRvUGF0aF9kb25lCisgICAgQWRkVG9QYXRoX0NvbnQyOgorCisgICAgIyBNYWtlIHN1cmUgbmV3IFBBVEggd29uJ3QgYmUgdG9vIGxvbmcuCisgICAgU3RyTGVuICQ1ICIkMCIKKyAgICBJbnRPcCAkNCAkNCArICQ1CisgICAgSW50Q21wICQ0IDEwMjIgIiIgIiIgUGF0aF9Ub29fTG9uZzMKKyAgICBHb3RvIEFkZFRvUGF0aF9Db250MworICAgIFBhdGhfVG9vX0xvbmczOgorICAgIE1lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJZb3VyIG5ldyBQQVRIIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSBzZXQgYXMgaXQgd291bGQgYmUgZ3JlYXRlciB0aGFuIDEwMjQgY2hhcmFjdGVycyAoaW5zdGFsbGVyIGxpbWl0YXRpb24pLiAgUGxlYXNlIGFkZCB0aGUgZm9sZGVyICQwIHRvIHlvdXIgUEFUSCB1c2luZyB0aGUgU3lzdGVtIENvbnRyb2wgUGFuZWwuIgorICAgIGdvdG8gQWRkVG9QYXRoX2RvbmUKKyAgICBBZGRUb1BhdGhfQ29udDM6CisKKyAgICBTdHJDcHkgJDAgIiQxOyQwIgorCisgICAgO1dyaXRlUmVnRXhwYW5kU3RyIEhLQ1UgIkVudmlyb25tZW50IiAiUEFUSCIgJDAKKyAgICBXcml0ZVJlZ0V4cGFuZFN0ciBIS0xNICdTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxTZXNzaW9uIE1hbmFnZXJcRW52aXJvbm1lbnQnICJQQVRIIiAkMAorICAgIFNlbmRNZXNzYWdlICR7SFdORF9CUk9BRENBU1R9ICR7V01fV0lOSU5JQ0hBTkdFfSAwICJTVFI6RW52aXJvbm1lbnQiIC9USU1FT1VUPTUwMDAKIAogICBBZGRUb1BhdGhfZG9uZToKKyAgICBQb3AgJDUKKyAgICBQb3AgJDQKICAgICBQb3AgJDMKICAgICBQb3AgJDIKICAgICBQb3AgJDEKZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaSBiL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaQppbmRleCA5NWQ3YjU1Li4yNDAzZDc3IDEwMDY0NAotLS0gYS93aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2kKKysrIGIvd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpCkBAIC0xLDEzICsxLDE2IEBACiA7IFNjcmlwdCBnZW5lcmF0ZWQgYnkgdGhlIEhNIE5JUyBFZGl0IFNjcmlwdCBXaXphcmQuCitTZXRDb21wcmVzc29yIC9TT0xJRCBsem1hCiAKKyFpbmNsdWRlIHg2NC5uc2gKICFpbmNsdWRlICJTZWN0aW9ucy5uc2giCishaW5jbHVkZSBGaWxlRnVuYy5uc2gKKyFpbnNlcnRtYWNybyBHZXRQYXJhbWV0ZXJzCishaW5zZXJ0bWFjcm8gR2V0T3B0aW9ucwordmFyIGNtZExpbmVQYXJhbWV0ZXJzCiAKIDsgSE0gTklTIEVkaXQgV2l6YXJkIGhlbHBlciBkZWZpbmVzCiAhZGVmaW5lIFBST0RVQ1RfTkFNRSAiTmV0LVNOTVAiCi0hZGVmaW5lIFBST0RVQ1RfTUFKX1ZFUlNJT04gIjUiCi0hZGVmaW5lIFBST0RVQ1RfTUlOX1ZFUlNJT04gIjQiCi0hZGVmaW5lIFBST0RVQ1RfUkVWSVNJT04gIjAucHJlNCIKLSFkZWZpbmUgUFJPRFVDVF9FWEVfVkVSU0lPTiAiMSIKKyFkZWZpbmUgUFJPRFVDVF9FWEVfU1VGRklYICIuJHtJTlNUQUxMRVJfUExBVEZPUk19LmV4ZSIKICFkZWZpbmUgUFJPRFVDVF9XRUJfU0lURSAiaHR0cDovL3d3dy5uZXQtc25tcC5vcmciCiAhZGVmaW5lIFBST0RVQ1RfRElSX1JFR0tFWSAiU29mdHdhcmVcTmV0LVNOTVAiCiAhZGVmaW5lIFBST0RVQ1RfVU5JTlNUX0tFWSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCR7UFJPRFVDVF9OQU1FfSIKQEAgLTM4LDcgKzQxLDcgQEAKICFpbnNlcnRtYWNybyBNVUlfUEFHRV9MSUNFTlNFICJkb2NzXENPUFlJTkciCiAKIDsgTWFrZSBzdXJlIFNTTCBpcyBpbnN0YWxsZWQuCi1QYWdlIGN1c3RvbSBJc1NTTEluc3RhbGxlZCAiIiAiOiBjdXN0b20gcGFnZSIKKzsgUGFnZSBjdXN0b20gSXNTU0xJbnN0YWxsZWQgIiIgIjogY3VzdG9tIHBhZ2UiCiAKIDsgQ29tcG9uZW50cyBwYWdlCiAhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfQ09NUE9ORU5UUwpAQCAtNjksMTEgKzcyLDExIEBACiA7IE1VSSBlbmQgLS0tLS0tCiAKIE5hbWUgIiR7UFJPRFVDVF9OQU1FfSAke1BST0RVQ1RfTUFKX1ZFUlNJT059LiR7UFJPRFVDVF9NSU5fVkVSU0lPTn0uJHtQUk9EVUNUX1JFVklTSU9OfSIKLU91dEZpbGUgIi4uXFxuZXQtc25tcC0ke1BST0RVQ1RfTUFKX1ZFUlNJT059LlwKK091dEZpbGUgIm5ldC1zbm1wLSR7UFJPRFVDVF9NQUpfVkVSU0lPTn0uXAogICAgICAgICAgICAgICAgICAgJHtQUk9EVUNUX01JTl9WRVJTSU9OfS5cCiAgICAgICAgICAgICAgICAgICAke1BST0RVQ1RfUkVWSVNJT059XAogICAgICAgICAgICAgICAgICAgLSR7UFJPRFVDVF9FWEVfVkVSU0lPTn1cCi0gICAgICAgICAgICAgICAgICAud2luMzIuZXhlIgorICAgICAgICAgICAgICAgICAgJHtQUk9EVUNUX0VYRV9TVUZGSVh9IgogSW5zdGFsbERpciAiQzpcdXNyIgogSW5zdGFsbERpclJlZ0tleSBIS0xNICIke1BST0RVQ1RfRElSX1JFR0tFWX0iICJJbnN0YWxsRGlyIgogU2hvd0luc3REZXRhaWxzIHNob3cKQEAgLTgxLDEzICs4NCwyMCBAQAogCiA7IFZhcmlhYmxlcyBmb3Igd3JpdGluZyBjb25maWcgZmlsZXMKIFZhciBjb25mX2ZpbGUKKwogVmFyIHdpbkV4dERMTAorVmFyIG9wZW5TU0wKIAogU2VjdGlvbiAiQmFzZSBDb21wb25lbnRzIiBTRUMwMQorICBTZWN0aW9uSW4gUk8KKyAgU3RyQ21wICRvcGVuU1NMICJmYWxzZSIgU0VDMDFfbm9PcGVuU1NMIFNFQzAxX09wZW5TU0wKKyAgCisgIFNFQzAxX25vT3BlblNTTDoKICAgU2V0T3V0UGF0aCAiJElOU1RESVIiCiAgIFNldE92ZXJ3cml0ZSBpZm5ld2VyCiAgIEZpbGUgIlJFQURNRS50eHQiCiAgIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKKwogICBGaWxlICJiaW5cbmV0c25tcC5kbGwiCiAgIEZpbGUgImJpblxlbmNvZGVfa2V5Y2hhbmdlLmV4ZSIKICAgRmlsZSAiYmluXHNubXB2YWNtLmV4ZSIKQEAgLTEwNiw2ICsxMTYsMzUgQEAKICAgRmlsZSAiYmluXHNubXBidWxrd2Fsay5leGUiCiAgIEZpbGUgImJpblxzbm1wYnVsa2dldC5leGUiCiAgIEZpbGUgImJpblxzbm1wd2Fsay5leGUiCisgIGdvdG8gU0VDMDFfY29udGludWUKKworICBTRUMwMV9PcGVuU1NMOgorICBTZXRPdXRQYXRoICIkSU5TVERJUiIKKyAgU2V0T3ZlcndyaXRlIGlmbmV3ZXIKKyAgRmlsZSAiUkVBRE1FLnR4dCIKKyAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgorCisgIEZpbGUgImJpbi5zc2xcbmV0c25tcC5kbGwiCisgIEZpbGUgImJpbi5zc2xcZW5jb2RlX2tleWNoYW5nZS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHZhY20uZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB1c20uZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB0cmFwLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdHJhbnNsYXRlLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdGVzdC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHRhYmxlLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wc3RhdHVzLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wc2V0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wbmV0c3RhdC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGdldG5leHQuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBnZXQuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBkZi5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGRlbHRhLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wYnVsa3dhbGsuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBidWxrZ2V0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wd2Fsay5leGUiCisKKyAgU0VDMDFfY29udGludWU6CisKICAgRmlsZSAiYmluXG1pYjJjIgogICBGaWxlICJiaW5cbWliMmMuYmF0IgogICBDYWxsIENyZWF0ZU1pYjJjQmF0CkBAIC0xNTEsMTggKzE5MCw5NCBAQAogU2VjdGlvbkdyb3VwIC9lICJOZXQtU05NUCBBZ2VudCBTZXJ2aWNlIgogICBTZWN0aW9uICJTdGFuZGFyZCBhZ2VudCIgU0VDMDIKICAgICBTdHJDcHkgJHdpbkV4dERMTCAiMCIKLSAgICBDYWxsIEluc3RhbGxBZ2VudAorICAgIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKKworICAgIDsgRGVsZXRlIGFnZW50IG90aGVyd2lzZSByZS1pbnN0YWxsaW5nIGEgZGlmZmVyZW50IGFnZW50IG1heSBub3Qgd29yayBiZWNhdXNlIG9mIGRhdGUgc3RhbXBzCisgICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcGQuZXhlIiAgCisKKyAgICBTdHJDbXAgJG9wZW5TU0wgImZhbHNlIiBTRUMwMl9ub09wZW5TU0wgU0VDMDJfT3BlblNTTAorICAgIFNFQzAyX25vT3BlblNTTDoKKyAgICAgIEZpbGUgImJpblxzbm1wZC5leGUiCisKKyAgICBTRUMwMl9PcGVuU1NMOgorICAgICAgRmlsZSAiYmluLnNzbFxzbm1wZC5leGUiCisKKyAgICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YSIKKyAgICBGaWxlICJzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YVwqLioiCisgIAorICAgIDsgSWYgd2UgYXJlIG9uIGFuIE5UIHN5c3RlbSB0aGVuIGluc3RhbGwgdGhlIHNlcnZpY2UgYmF0Y2ggZmlsZXMuCisgICAgQ2FsbCBJc05UCisgICAgUG9wICQxCisgICAgU3RyQ21wICQxIDAgU0VDMDJfTm9TZXJ2aWNlCisgIAorICAgIFNldE91dFBhdGggIiRJTlNURElSXCIKKyAgICBGaWxlICJyZWdpc3RlcmFnZW50LmJhdCIKKyAgICBGaWxlICJ1bnJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIENhbGwgQ3JlYXRlQWdlbnRCYXRzCisKKwlDbGVhckVycm9ycworCVN0ckNtcCAkSUNPTlNfR1JPVVAgIiIgU0VDMDJfTm9TZXJ2aWNlCisgICAgQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKKyAgICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlxyZWdpc3RlcmFnZW50LmJhdCIKKyAgICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHVucmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgCisgICAgU0VDMDJfTm9TZXJ2aWNlOgorCQogICBTZWN0aW9uRW5kCiAKLSAgU2VjdGlvbiAvbyAiV2l0aCBXaW5kb3dzIEV4dGVuc2lvbiBETEwgc3VwcG9ydCIgU0VDMDMKLSAgICBTdHJDcHkgJHdpbkV4dERMTCAiMSIKLSAgICBDYWxsIEluc3RhbGxBZ2VudAorICBTZWN0aW9uICJXaXRoIFdpbmRvd3MgRXh0ZW5zaW9uIERMTCBzdXBwb3J0IiBTRUMwMwkKKwlTdHJDcHkgJHdpbkV4dERMTCAiMSIKKwlTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCisKKyAgICA7IERlbGV0ZSBhZ2VudCBvdGhlcndpc2UgcmUtaW5zdGFsbGluZyBhIGRpZmZlcmVudCBhZ2VudCBtYXkgbm90IHdvcmsgYmVjYXVzZSBvZiBkYXRlIHN0YW1wcworICAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXBkLmV4ZSIgIAorCisgICAgU3RyQ21wICRvcGVuU1NMICJmYWxzZSIgU0VDMDNfbm9PcGVuU1NMIFNFQzAzX09wZW5TU0wKKyAgICBTRUMwM19ub09wZW5TU0w6CisgICAgICBGaWxlIC9vbmFtZT1zbm1wZC5leGUgImJpblxzbm1wZC13aW5FeHRETEwuZXhlIgorCisgICAgU0VDMDNfT3BlblNTTDoKKyAgICAgIEZpbGUgL29uYW1lPXNubXBkLmV4ZSAiYmluLnNzbFxzbm1wZC13aW5FeHRETEwuZXhlIgorCisgICAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGEiCisgICAgRmlsZSAic2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGFcKi4qIgorICAKKyAgICA7IElmIHdlIGFyZSBvbiBhbiBOVCBzeXN0ZW0gdGhlbiBpbnN0YWxsIHRoZSBzZXJ2aWNlIGJhdGNoIGZpbGVzLgorICAgIENhbGwgSXNOVAorICAgIFBvcCAkMQorICAgIFN0ckNtcCAkMSAwIFNFQzAzX05vU2VydmljZQorICAKKyAgICBTZXRPdXRQYXRoICIkSU5TVERJUlwiCisgICAgRmlsZSAicmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgRmlsZSAidW5yZWdpc3RlcmFnZW50LmJhdCIKKyAgICBDYWxsIENyZWF0ZUFnZW50QmF0cworCisJQ2xlYXJFcnJvcnMKKwlTdHJDbXAgJElDT05TX0dST1VQICIiIFNFQzAzX05vU2VydmljZQorICAgIENyZWF0ZURpcmVjdG9yeSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCisgICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJccmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlx1bnJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIAorICAgIFNFQzAzX05vU2VydmljZToKICAgU2VjdGlvbkVuZAorICAKKzsgIFNlY3Rpb24gIkhpZGRlbiIgU0VDQWdlbnRIaWRkZW4KKyAgO1NlY3Rpb25FbmQKIFNlY3Rpb25Hcm91cEVuZAogCiBTZWN0aW9uICJOZXQtU05NUCBUcmFwIFNlcnZpY2UiIFNFQzA0CiAgIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKKworICBTdHJDbXAgJG9wZW5TU0wgImZhbHNlIiBTRUMwNF9ub09wZW5TU0wgU0VDMDRfT3BlblNTTAorCisgIFNFQzA0X25vT3BlblNTTDoKICAgRmlsZSAiYmluXHNubXB0cmFwZC5leGUiCisgIGdvdG8gU0VDMDRfY29udGludWUKKworICBTRUMwNF9PcGVuU1NMOgorICBGaWxlICJiaW4uc3NsXHNubXB0cmFwZC5leGUiCisKKyAgU0VDMDRfY29udGludWU6CiAgIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wdHJhcGQtZGF0YSIKICAgRmlsZSAic2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXB0cmFwZC1kYXRhXCouKiIKICAgO1NldE91dFBhdGggIiRJTlNURElSXGV0Y1xzbm1wIgpAQCAtMTc4LDYgKzI5Myw4IEBACiAgIEZpbGUgInVucmVnaXN0ZXJ0cmFwZC5iYXQiCiAgIENhbGwgQ3JlYXRlVHJhcGRCYXRzCiAgIAorICBDbGVhckVycm9ycworICBTdHJDbXAgJElDT05TX0dST1VQICIiIE5vVHJhcFNlcnZpY2UKICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiICIkSU5TVERJUlxyZWdpc3RlcnRyYXBkLmJhdCIKICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHVucmVnaXN0ZXJ0cmFwZC5iYXQiCiAgIApAQCAtMTg2LDcgKzMwMywxOCBAQAogCiBTZWN0aW9uICJQZXJsIFNOTVAgTW9kdWxlcyIgU0VDMDUKICAgU2V0T3V0UGF0aCAiJElOU1RESVJccGVybFx4ODYiCisKKyAgU3RyQ21wICRvcGVuU1NMICJmYWxzZSIgU0VDMDVfbm9PcGVuU1NMIFNFQzA1X09wZW5TU0wKKworICBTRUMwNV9ub09wZW5TU0w6CiAgIEZpbGUgInBlcmxceDg2XE5ldFNOTVAudGFyLmd6IgorICBnb3RvIFNFQzA1X2NvbnRpbnVlCisKKyAgU0VDMDVfT3BlblNTTDoKKyAgRmlsZSAicGVybC5zc2xceDg2XE5ldFNOTVAudGFyLmd6IgorCisgIFNFQzA1X2NvbnRpbnVlOgorCiAgIFNldE91dFBhdGggIiRJTlNURElSXHBlcmwiCiAgIEZpbGUgInBlcmxcTmV0U05NUC5wcGQiCiAgIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKQEAgLTIyNCwxMSArMzUyLDE4IEBACiAgIEZpbGUgImxpYlwqLioiCiBTZWN0aW9uRW5kCiAKK1NlY3Rpb24gIkVuY3J5cHRpb24gc3VwcG9ydCAoT3BlblNTTCkiIFNFQzA3CitTZWN0aW9uRW5kCisKIFNlY3Rpb24gLUFkZGl0aW9uYWxJY29ucworICBDbGVhckVycm9ycworICBTdHJDbXAgJElDT05TX0dST1VQICIiIG5vQWRkaXRpb25hbEl0ZW1zCiAgIENyZWF0ZURpcmVjdG9yeSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQIgogICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFVuaW5zdGFsbC5sbmsiICIkSU5TVERJUlx1bmluc3QuZXhlIgogICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXE5ldC1TTk1QIEhlbHAubG5rIiAiJElOU1RESVJcZG9jc1xOZXQtU05NUC5jaG0iCiAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcUkVBRE1FLmxuayIgIiRJTlNURElSXFJFQURNRS50eHQiCisgIAorICBub0FkZGl0aW9uYWxJdGVtczoKIFNlY3Rpb25FbmQKIAogU2VjdGlvbiAtUG9zdApAQCAtMjYyLDYgKzM5Nyw4IEBACiAgICFpbnNlcnRtYWNybyBNVUlfREVTQ1JJUFRJT05fVEVYVCAke1NFQzA2fSBcCiAgICAgICAgICAgICAgICAiVGhlIERldmVsb3BtZW50IGZpbGVzIHByb3ZpZGUgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIHVzZWQgZm9yIGRldmVsb3BpbmcgXAogICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBOZXQtU05NUCBsaWJyYXJ5LiIKKyAgIWluc2VydG1hY3JvIE1VSV9ERVNDUklQVElPTl9URVhUICR7U0VDMDd9IFwKKyAgICAgICAgICAgICAgICJFbmNyeXB0aW9uIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIFNOTVB2MyBTSEEgYXV0aGVudGljYXRpb24gYW5kIERFUyAvIEFFUyBwcml2YWN5LiAgQSBXaW5kb3dzIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGZyb20gd3d3LnNscHJvd2ViLmNvbS4iCiAhaW5zZXJ0bWFjcm8gTVVJX0ZVTkNUSU9OX0RFU0NSSVBUSU9OX0VORAogCiBGdW5jdGlvbiBDcmVhdGVTbm1wQ29uZgpAQCAtNTI1LDMwICs2NjIsMjU2IEBACiBGdW5jdGlvbkVuZAogCiBGdW5jdGlvbiB1bi5vbkluaXQKKyAgU2V0UmVnVmlldyA2NAkJOyBQcmV2ZW50IHRoZSBpbnN0YWxsZXIgZnJvbSB1c2luZyB0aGUgV293NjQzMk5vZGUgSEtMTSBzdWJrZXkgb24gNjQtYml0IHN5c3RlbXMKICAgTWVzc2FnZUJveCBNQl9JQ09OUVVFU1RJT058TUJfWUVTTk98TUJfREVGQlVUVE9OMiAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgcmVtb3ZlICQoXk5hbWUpIGFuZCBhbGwgb2YgaXRzIGNvbXBvbmVudHM/IiBJRFlFUyArMgogICBBYm9ydAogRnVuY3Rpb25FbmQKIAogRnVuY3Rpb24gLm9uSW5pdAotCi1TdHJDcHkgJDMgJHtTRUMwMn0KLQorU2V0UmVnVmlldyA2NAkJOyBQcmV2ZW50IHRoZSBpbnN0YWxsZXIgZnJvbSB1c2luZyB0aGUgV293NjQzMk5vZGUgSEtMTSBzdWJrZXkgb24gNjQtYml0IHN5c3RlbXMKIFB1c2ggJDAKK1B1c2ggJFIwCitQdXNoICRSMQorCis7IENoZWNrIGZvciAvPyBjb21tYW5kIGxpbmUgdXNhZ2Ugb3B0aW9uCiske0dldFBhcmFtZXRlcnN9ICRSMQorU3RyQ3B5ICRjbWRMaW5lUGFyYW1ldGVycyAkUjEKK0NsZWFyRXJyb3JzCiske0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAnLz8nICRSMAorSWZFcnJvcnMgKzMgMAorTWVzc2FnZUJveCBNQl9PSyAiT3B0aW9uczokXG4gIFxTdGFydE1lbnU9e0dyb3VwTmFtZX0kXG4gIFxBZ2VudD1zdGFuZGFyZHxleHRETEx8bm9uZSAgIChkZWZhdWx0IHN0YW5kYXJkKSRcbiAgXG5vVHJhcGQkXHQoZGVmYXVsdCBcVHJhcGQpJFxuICBcbm9QZXJsJFx0JFx0KGRlZmF1bHQgXFBlcmwpJFxuICBcRGV2JFx0JFx0KGRlZmF1bHQgXG5vRGV2KSRcbiAgXE9wZW5TU0wkXHQoZGVmYXVsdCBcbm9PcGVuU1NMKSIKK0Fib3J0CisKKzsgTWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgV2luZG93cyAyMDAwICg1LjApIG9yIGhpZ2hlcgorQ2xlYXJFcnJvcnMKK1JlYWRSZWdTdHIgJFIwIEhLTE0gXAorICAiU09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3MgTlRcQ3VycmVudFZlcnNpb24iIEN1cnJlbnRWZXJzaW9uCitJZkVycm9ycyB3aW5kb3dzVmVyc2lvbkVycm9yCisKK0ludENtcCAkUjAgJzUuMCcgd2luZG93c1ZlcnNpb25PSyB3aW5kb3dzVmVyc2lvbkVycm9yIHdpbmRvd3NWZXJzaW9uT0sKK3dpbmRvd3NWZXJzaW9uRXJyb3I6CitNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiVGhpcyB2ZXJzaW9uIG9mICQoXk5hbWUpIHJlcXVpcmVzIFdpbmRvd3MgMjAwMCBvciBoaWdoZXIuICBGb3IgV2luZG93cyBOVCBhbmQgbG93ZXIsIHBsZWFzZSB1c2UgTmV0LVNOTVAgNS40LiIKK1F1aXQKKword2luZG93c1ZlcnNpb25PSzoKKztNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiV2luZG93cyB2ZXJzaW9uIG9rOiAkUjAiCisKKzsgTWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgdGhlIHJpZ2h0IHBsYXRmb3JtCis7SU5TVEFMTEVSX1BMQVRGT1JNCiske0lmfSAke0lOU1RBTExFUl9QTEFURk9STX0gPT0gIng2NCIKKyAgO01lc3NhZ2VCb3ggTUJfT0sgIjY0LWJpdCBiaW5hcnkiCisgICR7SWZOb3R9ICR7UnVubmluZ1g2NH0KKyAgICA7TWVzc2FnZUJveCBNQl9PSyAiMzItYml0IE9TIgorCU1lc3NhZ2VCb3ggTUJfT0sgIlRoaXMgTmV0LVNOTVAgcGFja2FnZSByZXF1aXJlcyA2NC1iaXQgV2luZG93cyAoeDY0KS4gIFBsZWFzZSBkb3dubG9hZCB0aGUgeDg2IGluc3RhbGxlciBwYWNrYWdlLiIKKwlRdWl0CisgICR7RWxzZX0KKyAgICA7TWVzc2FnZUJveCBNQl9PSyAiNjQtYml0IE9TIgorICAke0VuZElmfQorJHtFbHNlfQorICA7TWVzc2FnZUJveCBNQl9PSyAieDg2ICgzMi1iaXQpIGJpbmFyeSIKKyAgJHtJZn0gJHtSdW5uaW5nWDY0fQorICAgIDtNZXNzYWdlQm94IE1CX09LICI2NC1iaXQgT1MiCisJTWVzc2FnZUJveCBNQl9PSyAiWW91IGFyZSBpbnN0YWxsaW5nIGEgMzItYml0IHBhY2thZ2Ugb24gYSA2NC1iaXQgb3BlcmF0aW5nIHN5c3RlbS4gIEFsbCBhcHBsaWNhdGlvbnMgc2hvdWxkIHdvcmsgZXhjZXB0IGZvciB0aGUgJ05ldC1TTk1QIEFnZW50IFNlcnZpY2Ugd2l0aCBXaW5kb3dzIEV4dGVuc2lvbiBETEwgc3VwcG9ydCcuICBQbGVhc2UgZG93bmxvYWQgdGhlIHg2NCBpbnN0YWxsZXIgcGFja2FnZS4iCisgICR7RW5kSWZ9CQorJHtFbmRJZn0KIAogOyBEaXNhYmxlIERldmVsb3BtZW50IGZpbGVzIHNlY3Rpb24gYnkgZGVmYXVsdAogU2VjdGlvbkdldEZsYWdzICR7U0VDMDZ9ICQwCiBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CiBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNn0gJDAKIAorOyBEaXNhYmxlIE9wZW5TU0wgc2VjdGlvbiBieSBkZWZhdWx0CitTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJDAKK0ludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KK1NlY3Rpb25TZXRGbGFncyAke1NFQzA3fSAkMAorU3RyQ3B5ICRvcGVuU1NMICJmYWxzZSIKKworOyBEaXNhYmxlIEFnZW50IHdpdGggd2luRXh0RExMIHN1cHBvcnQgLSB1c2VyIGNhbiBzZWxlY3QgZWl0aGVyIGJ1dCBub3QgYm90aC4KK1N0ckNweSAkUjggJHtTRUMwMn0KK1NlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorU2VjdGlvblNldEZsYWdzICR7U0VDMDJ9ICQwCitTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKK0ludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KK1NlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorCis7IFN0b3JlIGN1cnJlbnQgc3RhdHVzIG9mIFNFQzA3IChTU0wpLiAgVXNlZCBmb3IgY2hlY2tpbmcgaWYgT3BlblNTTCBpcyBpbnN0YWxsZWQuCitTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJFI5CisKKzsgcHJvY2VzcyBvdGhlciBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworQ2FsbCBwYXJzZVBhcmFtZXRlcnMKKworUG9wICRSMAogUG9wICQwCiBGdW5jdGlvbkVuZAogCitGdW5jdGlvbiBwYXJzZVBhcmFtZXRlcnMKKyAgUHVzaCAkUjAKKyAgUHVzaCAkMAorCisgIDsgL1N0YXJ0TWVudT0KKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9TdGFydE1lbnU9IiAgJFIwCisgIElmRXJyb3JzICsyIDAKKyAgU3RyQ3B5ICRJQ09OU19HUk9VUCAkUjAKKworICA7IC97bm8sfVRyYXBkICAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9UcmFwZCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA0fSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA0fSAkMAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL25vVHJhcGQiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNH0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNH0gJDAKKworICA7IC97bm8sfVBlcmwgIAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL1BlcmwiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNX0gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNX0gJDAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9ub1BlcmwiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNX0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNX0gJDAKKworICA7IC97bm8sfURldiAgCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvRGV2IiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDZ9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDZ9ICQwCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvbm9EZXYiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNn0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNn0gJDAKKworICA7IC97bm8sfU9wZW5TU0wgIAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL09wZW5TU0wiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwN30gJDAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9ub09wZW5TU0wiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwN30gJDAKKworICA7IC9BZ2VudD0gIAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL0FnZW50PSIgICRSMAorICBJZkVycm9ycyBlbmRPZkFnZW50IDAKKyAgOyAvQWdlbnQ9bm9uZQorICBDbGVhckVycm9ycworICBTdHJDbXAgJFIwICJub25lIiAwIHN0YW5kYXJkQWdlbnQKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDJ9ICQwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorICBHb3RvIGVuZE9mQWdlbnQKKyAgCisgIHN0YW5kYXJkQWdlbnQ6CisgIDsgL0FnZW50PXN0YW5kYXJkCisgIENsZWFyRXJyb3JzCisgIFN0ckNtcCAkUjAgInN0YW5kYXJkIiAwIHdpbkV4dERMTEFnZW50CisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAyfSAkMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgR290byBlbmRPZkFnZW50CisgIAorICB3aW5FeHRETExBZ2VudDoKKyAgOyAvQWdlbnQ9ZXh0RExMCisgIENsZWFyRXJyb3JzCisgIFN0ckNtcCAkUjAgImV4dERMTCIgMCBlbmRPZkFnZW50CisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAyfSAkMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgZW5kT2ZBZ2VudDoKKyAgCisgIFBvcCAkUjAgIAorRnVuY3Rpb25FbmQKKwogRnVuY3Rpb24gLm9uU2VsQ2hhbmdlCiAKLSAgIWluc2VydG1hY3JvIFN0YXJ0UmFkaW9CdXR0b25zICQzCi0gICAgIWluc2VydG1hY3JvIFJhZGlvQnV0dG9uICR7U0VDMDJ9Ci0gICAgIWluc2VydG1hY3JvIFJhZGlvQnV0dG9uICR7U0VDMDN9Ci0gICFpbnNlcnRtYWNybyBFbmRSYWRpb0J1dHRvbnMKKzsgICFpbnNlcnRtYWNybyBTdGFydFJhZGlvQnV0dG9ucyAkMgorICAgIDshaW5zZXJ0bWFjcm8gUmFkaW9CdXR0b24gJHtTRUMwMn0KKyAgICA7IWluc2VydG1hY3JvIFJhZGlvQnV0dG9uICR7U0VDMDN9CisgIDshaW5zZXJ0bWFjcm8gRW5kUmFkaW9CdXR0b25zCisKKyAgIyBDcmVhdGUgYSBiYWNrdXAgY29weSBvZiAkMAorICBQdXNoICQwCisKKyAgOyBBZ2VudCAtIE9ubHkgYWxsb3cgdXNlciB0byBzZWxlY3Qgc3RhbmRhcmQgb3Igd2luRXh0RExMIGFnZW50CisgIFN0ckNtcCAkUjggJHtTRUMwMn0gb25TZWxDaGFuZ2VfY2hlY2tfU0VDMworICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NGX1NFTEVDVEVEfQorICBJbnRDbXAgJDAgJHtTRl9TRUxFQ1RFRH0gMCBvblNlbENoYW5nZV9hZ2VudF9kb25lIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmUKKyAgU3RyQ3B5ICRSOCAke1NFQzAyfQorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgR290byBvblNlbENoYW5nZV9hZ2VudF9kb25lCisgCisgIG9uU2VsQ2hhbmdlX2NoZWNrX1NFQzM6CisgICAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgICAgSW50T3AgJDAgJDAgJiAke1NGX1NFTEVDVEVEfQorICAgIEludENtcCAkMCAke1NGX1NFTEVDVEVEfSAwIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmUgb25TZWxDaGFuZ2VfYWdlbnRfZG9uZQorICAgIFN0ckNweSAkUjggJHtTRUMwM30KKyAgICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgICAgU2VjdGlvblNldEZsYWdzICR7U0VDMDJ9ICQwCisgCisgIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmU6CisKKyAgOyBJZiB0aGUgdXNlciBpcyBpbnN0YWxsaW5nIGEgMzItYml0IGJpbmFyeSBvbiBhIDY0LWJpdCBPUywgZGlzYWJsZSB3aW5FeHRETEwgYWdlbnQuCisgICR7SWZ9ICR7UnVubmluZ1g2NH0KKyAgICAke0lmTm90fSAke0lOU1RBTExFUl9QTEFURk9STX0gPT0gIng2NCIKKwkgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICAgICAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICAgICAgU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisgICAgJHtFbmRJZn0KKyAgJHtFbmRJZn0KKyAgICAKKyAgOyBJZiB1c2VyIHNlbGVjdGVkIEVuY3J5cHRpb24gc3VwcG9ydCwgbWFrZSBzdXJlIE9wZW5TU0wgaXMgaW5zdGFsbGVkLgorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NGX1NFTEVDVEVEfQorICBJbnRDbXAgJDAgJHtTRl9TRUxFQ1RFRH0gZW5hYmxlU1NMb25TZWxDaGFuZ2UgZGlzYWJsZVNTTG9uU2VsQ2hhbmdlCisgIGVuYWJsZVNTTG9uU2VsQ2hhbmdlOgorICAgIFN0ckNweSAkb3BlblNTTCAidHJ1ZSIKKyAgICBJbnRDbXAgJFI5ICQwIFNTTGFscmVhZHlFbmFibGVkIFNTTGp1c3RFbmFibGVkCisgICAgU1NManVzdEVuYWJsZWQ6CisgICAgICBDYWxsIElzU1NMSW5zdGFsbGVkCisgICAgICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJFI5CisgICAgU1NMYWxyZWFkeUVuYWJsZWQ6CisgICAgICBnb3RvIGNvbnRpbnVlU1NMb25TZWxDaGFuZ2UKKyAgZGlzYWJsZVNTTG9uU2VsQ2hhbmdlOgorICAgIFN0ckNweSAkb3BlblNTTCAiZmFsc2UiCisJU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICRSOQorICBjb250aW51ZVNTTG9uU2VsQ2hhbmdlOgorICAKKyAgUG9wICQwCiAKIEZ1bmN0aW9uRW5kCiAKQEAgLTU3OSw2ICs5NDIsOSBAQAogICBEZWxldGUgIiRJTlNURElSXGRvY3NcQ09QWUlORyIKICAgRGVsZXRlICIkSU5TVERJUlxkb2NzXE5ldC1TTk1QLmNobSIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cbmV0LXNubXAtcGVybC10ZXN0LnBsIgorICA7IGlkZWFsbHkgd2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhpcyBmaWxlIGhhcyBjaGFuZ2VkCisgIERlbGV0ZSAiJElOU1RESVJcZXRjXHNubXBcc25tcC5jb25mIgorCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXB0cmFwZC5leGUiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXBkLmV4ZSIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcHdhbGsuZXhlIgpAQCAtNjAwLDYgKzk2Niw3IEBACiAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXB2YWNtLmV4ZSIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cZW5jb2RlX2tleWNoYW5nZS5leGUiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXG5ldHNubXAuZGxsIgorCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXG1pYjJjIgogICBEZWxldGUgIiRJTlNURElSXGJpblxtaWIyYy5iYXQiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXBjb25mIgpAQCAtNjI2LDYgKzk5Myw3IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXB0cmFwZC1kYXRhXGxvZ2dpbmciCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXB0cmFwZC1kYXRhXHJ1bnRpbWUiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXEFHRU5UWC1NSUIudHh0IgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xCUklER0UtTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcRElTTUFOLUVWRU5ULU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXERJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXERJU01BTi1OU0xPT0tVUC1NSUIudHh0IgpAQCAtNjYwLDYgKzEwMjgsNyBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1NT05JVE9SLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLVBBU1MtTUlCLnR4dCIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLVNZU1RFTS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1UQy50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLVZBQ00tTUlCLnR4dCIKQEAgLTY3Nyw2ICsxMDQ2LDggQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1OT1RJRklDQVRJT04tTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1QUk9YWS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVRBUkdFVC1NSUIudHh0IgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVRMUy1UTS1NSUIudHh0IgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVRTTS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVVTRVItQkFTRUQtU00tTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1VU00tQUVTLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCIKQEAgLTY5OCw4ICsxMDY5LDggQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcVUNELVNOTVAtTUlCLU9MRC50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFVEUC1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1wuaW5kZXgiCisgIERlbGV0ZSAiJElOU1RESVJcc25tcFxwZXJzaXN0XG1pYl9pbmRleGVzXDAiCiAKLSAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLmFycmF5LXVzZXIuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLmNoZWNrX3ZhbHVlcy5jb25mIgpAQCAtNzE5LDExICsxMDkwLDExIEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5ub3RpZnkuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLm9sZC1hcGkuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLnBlcmwuY29uZiIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLnJhdy10YWJsZS5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMucm93LmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5zY2FsYXIuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLnRhYmxlX2RhdGEuY29uZiIKIAotICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGEiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXGRlZmF1bHQtbWZkLXRvcC5tMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXGRldGFpbHMtZW51bXMubTJpIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxkZXRhaWxzLW5vZGUubTJpIgpAQCAtNzY2LDcgKzExMzcsNyBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtaW50ZXJmYWNlLm0yYyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLW1ha2VmaWxlLm0ybSIKLSAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLXBlcnNpc3RlbmNlLm0ybSIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLXBlcnNpc3RlbmNlLm0yaSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLXJlYWRtZS5tMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC10b3AubTJjIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxub2RlLWdldC5tMmkiCkBAIC03OTAsNyArMTE2MSw2IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXHN5bnRheC1Sb3dTdGF0dXMtdmFyYmluZC12YWxpZGF0ZS5tMmkiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXHN5bnRheC1TdG9yYWdlVHlwZS1kZXBlbmRlbmNpZXMubTJpIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxzeW50YXgtVGVzdEFuZEluY3ItZ2V0Lm0yaSIKLSAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcIgogCiAgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXE5ldC1TTk1QIEhlbHAubG5rIgogICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxVbmluc3RhbGwubG5rIgpAQCAtODMxLDYgKzEyMDEsNyBAQAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXGZyZWVic2Q2LmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cZnJlZWJzZDcuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxmcmVlYnNkOC5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXGtmcmVlYnNkLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cZHJhZ29uZmx5LmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cbWluZ3czMi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXHNvbGFyaXMyLjkuaCIKQEAgLTkxMCw2ICsxMjgxLDkgQEAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcF9sb2NraW5nLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXB2My5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxvaWRfc3Rhc2guaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcEFsaWFzRG9tYWluLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBEVExTVURQRG9tYWluLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBTU0hEb21haW4uaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcFNURERvbWFpbi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wVENQRG9tYWluLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBVRFBEb21haW4uaCIKQEAgLTkxOCwxMCArMTI5MiwxNSBAQAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wX2VudW0uaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcY211X2NvbXBhdC5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZGlyX3V0aWxzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGZpbGVfdXRpbHMuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcdGV4dF91dGlscy5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVx0eXBlcy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxmZF9ldmVudF9tYW5hZ2VyLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGxhcmdlX2ZkX3NldC5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wX29wZW5zc2wuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcF9zZXJ2aWNlLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXB0c20uaCIKIAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc3Rhc2hfY2FjaGUuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGluc3RhbmNlLmgiCkBAIC05NjQsNiArMTM0Myw4IEBACiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzZXJpYWxpemUuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHN0YXNoX3RvX25leHQuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX3RkYXRhLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzeXNPUlRhYmxlLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhZ2VudF9zeXNPUlRhYmxlLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxtaWJfbW9kdWxlX2NvbmZpZy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWdlbnRfbW9kdWxlX2NvbmZpZy5oIgogCkBAIC05NzcsNyArMTM1OCwxMSBAQAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcaXBzdGF0cy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcaXBhZGRyZXNzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1x0Y3BDb25uLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xkZWZhdWx0X3JvdXRlLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xpcF9zY2FsYXJzLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xzY29wZXpvbmUuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXHN3aW5zdC5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3Ncc3dydW4uaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXHVkcF9lbmRwb2ludC5oIgogCiAgIERlbGV0ZSAiJElOU1RESVJcbGliXG5ldHNubXBhZ2VudC5saWIiCkBAIC05ODcsOCArMTM3Miw2IEBACiAgIERlbGV0ZSAiJElOU1RESVJcbGliXG5ldHNubXBtaWJzLmxpYiIKICAgRGVsZXRlICIkSU5TVERJUlxsaWJcbmV0c25tcC5leHAiCiAgIAotICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCi0gIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVAiCiAgIFJNRGlyICIkSU5TVERJUlxwZXJsXHg4NiIKICAgUk1EaXIgIiRJTlNURElSXHBlcmwiCiAgIFJNRGlyICIkSU5TVERJUlxsaWIiCkBAIC0xMDEyLDYgKzEzOTUsNyBAQAogICBSTURpciAiJElOU1RESVJcc2hhcmUiCiAKICAgUk1EaXIgIiRJTlNURElSXHRlbXAiCisgIFJNRGlyICIkSU5TVERJUlxzbm1wXHBlcnNpc3RcbWliX2luZGV4ZXMiCiAgIFJNRGlyICIkSU5TVERJUlxzbm1wXHBlcnNpc3QiCiAgIFJNRGlyICIkSU5TVERJUlxzbm1wIgogICBSTURpciAiJElOU1RESVJcZXRjXHNubXAiCkBAIC0xMDIxLDYgKzE0MDUsMzEgQEAKICAgUk1EaXIgIiRJTlNURElSXGluY2x1ZGUiCiAgIFJNRGlyICIkSU5TVERJUlxsb2ciCiAgIFJNRGlyICIkSU5TVERJUiIKKyAgCisgIDsgU3RhcnQgTWVudSBlbnRyaWVzIG1heSBoYXZlIGJlZW4gaW5zdGFsbGVkIGZvciB0aGUgY3VycmVudCB1c2VyIG9ubHksCisgIDsgb3IgZm9yIEFsbCBVc2Vycy4gIFNvIGxldCdzIGRlbGV0ZSBib3RoIHNldHMuLi4uCisgIFNldFNoZWxsVmFyQ29udGV4dCBjdXJyZW50CisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFVuaW5zdGFsbC5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXE5ldC1TTk1QIEhlbHAubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxSRUFETUUubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiCisgIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKKyAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUCIKKworICBTZXRTaGVsbFZhckNvbnRleHQgYWxsCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFVuaW5zdGFsbC5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXE5ldC1TTk1QIEhlbHAubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxSRUFETUUubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiCisgIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKKyAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUCIKKyAgCiAgIDsgRGVsZXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgO1B1c2ggIlNOTVBDT05GUEFUSCIKICAgO0NhbGwgdW4uRGVsZXRlRW52U3RyCkBAIC0xMDM4LDUxICsxNDQ3LDI0IEBACiAKIEZ1bmN0aW9uIElzU1NMSW5zdGFsbGVkCiAgIFB1c2ggJFIwCi0gIFN0ckNtcCAke09QRU5TU0xfUkVRVUlSRUR9ICIwIiBjb250aW51ZUluc3RhbGwKLSAgUmVhZEVudlN0ciAkUjAgIndpbmRpciIKLSAgSWZGaWxlRXhpc3RzICIkUjBcc3lzdGVtMzJcbGliZWF5MzIuZGxsIiAwIG5vU1NMCi0gICAgR290byBjb250aW51ZUluc3RhbGwKLSAgbm9TU0w6Ci0gICAgTWVzc2FnZUJveCBNQl9ZRVNOT3xNQl9JQ09OUVVFU1RJT04gIk9wZW5TU0wgKCRSMFxzeXN0ZW0zMlxsaWJlYXkzMi5kbGwpIGRvZXMgbm90IGFwcGVhciB0byBiZSBpbnN0YWxsZWQuICBPcGVuU1NMIGlzIHJlcXVpcmVkIGZvciB0aGlzIGluc3RhbGxhdGlvbiBvZiBOZXQtU05NUC4gIFBsZWFzZSBpbnN0YWxsIE9wZW5TU0wgZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbCBhbmQgdHJ5IGFnYWluLiAgV291bGQgeW91IGxpa2UgdG8gY29udGludWUgaW5zdGFsbGluZyBhbnl3YXlzPyIgSURZRVMgY29udGludWVJbnN0YWxsCisgIFB1c2ggJFIxCisKKyAgR2V0RExMVmVyc2lvbiBsaWJlYXkzMi5kbGwgJFIwICRSMQorICBJZkVycm9ycyBub1NTTAorCisgIDsgQ29udGludWUgaW5zdGFsbGluZyBpZiB0aGUgRExMIHZlcnNpb24gaXMgPj0gMS4wLjAuMAorICBJbnRDbXBVIDY1NTM2ICRSMCBjb250aW51ZUluc3RhbGwgY29udGludWVJbnN0YWxsCisKKyAgTWVzc2FnZUJveCBNQl9PSyAiVGhpcyBwYWNrYWdlIGlzIGtub3duIG5vdCB0byB3b3JrIHdpdGggT3BlblNTTCB2ZXJzaW9ucyBiZWZvcmUgMS4wLjAuICBQbGVhc2UgaW5zdGFsbCB0aGUgbGF0ZXN0IE9wZW5TU0wgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sIGFuZCB0cnkgYWdhaW4uIgogICBRdWl0CisKKyAgbm9TU0w6CisgICAgTWVzc2FnZUJveCBNQl9ZRVNOT3xNQl9JQ09OUVVFU1RJT04gIk9wZW5TU0wgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGluc3RhbGxlZC4gIE9wZW5TU0wgaXMgcmVxdWlyZWQgZm9yIHRoaXMgaW5zdGFsbGF0aW9uIG9mIE5ldC1TTk1QLiAgUGxlYXNlIGluc3RhbGwgT3BlblNTTCBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sIGFuZCB0cnkgYWdhaW4uICBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZSBpbnN0YWxsaW5nIGFueXdheXM/IiBJRFlFUyBjb250aW51ZUluc3RhbGwKKyAgUXVpdAorICAKICAgY29udGludWVJbnN0YWxsOgorICBQb3AgJFIxCiAgIFBvcCAkUjAKIEZ1bmN0aW9uRW5kCiAKLUZ1bmN0aW9uIEluc3RhbGxBZ2VudAotICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCiAKLSAgOyBEZWxldGUgYWdlbnQgb3RoZXJ3aXNlIHJlLWluc3RhbGxpbmcgYSBkaWZmZXJlbnQgYWdlbnQgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgZGF0ZSBzdGFtcHMKLSAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcGQuZXhlIiAgCi0KLSAgU3RyQ21wICR3aW5FeHRETEwgIjEiIHNlYzAyX3dpbkV4dERMTCBzZWMwMl9ub3JtYWwKLQotICBzZWMwMl93aW5FeHRETEw6Ci0gIDtGaWxlICJiaW5cc25tcGQtd2luRXh0RExMLmV4ZSIKLSAgRmlsZSAvb25hbWU9c25tcGQuZXhlICJiaW5cc25tcGQtd2luRXh0RExMLmV4ZSIKLSAgZ290byBzZWMwMl9jb250aW51ZQotCi0gIHNlYzAyX25vcm1hbDoKLSAgRmlsZSAiYmluXHNubXBkLmV4ZSIKLQotICBzZWMwMl9jb250aW51ZToKLQotICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YSIKLSAgRmlsZSAic2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGFcKi4qIgotICAKLSAgOyBJZiB3ZSBhcmUgb24gYW4gTlQgc3lzdGVtIHRoZW4gaW5zdGFsbCB0aGUgc2VydmljZSBiYXRjaCBmaWxlcy4KLSAgQ2FsbCBJc05UCi0gIFBvcCAkMQotICBTdHJDbXAgJDEgMCBOb1NlcnZpY2UKLSAgCi0gIFNldE91dFBhdGggIiRJTlNURElSXCIKLSAgRmlsZSAicmVnaXN0ZXJhZ2VudC5iYXQiCi0gIEZpbGUgInVucmVnaXN0ZXJhZ2VudC5iYXQiCi0gIENhbGwgQ3JlYXRlQWdlbnRCYXRzCi0KLSAgQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKLSAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJccmVnaXN0ZXJhZ2VudC5iYXQiCi0gIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJcdW5yZWdpc3RlcmFnZW50LmJhdCIKLSAgCi0gIE5vU2VydmljZToKLUZ1bmN0aW9uRW5kCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWwgYi93aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWwKaW5kZXggMDhhNjYzMC4uNTQzNWRhZiAxMDA2NDQKLS0tIGEvd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sCisrKyBiL3dpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbApAQCAtMzUsNyArMzUsNyBAQAogCiAjIExvY2F0aW9uIG9mIG1hbiBwYWdlcyB0byBwYXJzZQogIyBCZWxvdyB0aGlzIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIGZvbGRlcnMgbWFuMSB0byBtYW45LgotJG1hbl9kaXIgPSAiL3RtcC9uZXQtc25tcC9tYW4vIjsKKyRtYW5fZGlyID0gIi90bXAvbmV0LXNubXAvc2hhcmUvbWFuLyI7CiAKICMgT3V0cHV0IGZvbGRlciB0byBjcmVhdGUgdGhlIEhUTUwgZmlsZXMKICRtYW5fZGlyX2h0bWwgPSAiL3RtcC9uZXQtc25tcC9odG1sLyI7CmRpZmYgLS1naXQgYS93aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwIGIvd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcAppbmRleCA1ZTE5MzY2Li41YTI1MmY1IDEwMDY0NAotLS0gYS93aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwCisrKyBiL3dpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9lbmNvZGVfa2V5Y2hhbmdlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9lbmNvZGVfa2V5Y2hhbmdlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJlbmNvZGVfa2V5Y2hhbmdlIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvZW5jb2RlX2tleWNoYW5nZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9lbmNvZGVfa2V5Y2hhbmdlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiBiL3dpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluCmluZGV4IDBiNGRiYzQuLmFiY2Q4MmUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluCisrKyBiL3dpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluCkBAIC05LDMxICs5LDYyIEBACiBOVUxMPW51bAogIUVORElGIAogCitBTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgorCisKK0xJQjMyX09CSlM9IFwKKwkiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIiBcCisJIiQoSU5URElSKVxhZ2VudF9pbmRleC5vYmoiIFwKKwkiJChJTlRESVIpXGFnZW50X3JlYWRfY29uZmlnLm9iaiIgXAorCSIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIiBcCisJIiQoSU5URElSKVxhZ2VudF9zeXNPUlRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcYWdlbnRfdHJhcC5vYmoiIFwKKwkiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIgXAorCSIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiIFwKKwkiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiIFwKKwkiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIiBcCisJIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIgXAorCSIkKElOVERJUilcaW5zdGFuY2Uub2JqIiBcCisJIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIgXAorCSIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIiBcCisJIiQoSU5URElSKVxudWxsLm9iaiIgXAorCSIkKElOVERJUilcb2xkX2FwaS5vYmoiIFwKKwkiJChJTlRESVIpXHJlYWRfb25seS5vYmoiIFwKKwkiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiIFwKKwkiJChJTlRESVIpXHNjYWxhci5vYmoiIFwKKwkiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiIFwKKwkiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYWdlbnQub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2dldF9zdGF0aXN0aWMub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3ZhcnMub2JqIiBcCisJIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiIFwKKwkiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIgXAorCSIkKElOVERJUilcd2F0Y2hlci5vYmoiCisKK0NMRUFOIDoKKwktQGZvciAlZiBpbiAoJChMSUIzMl9PQkpTKSkgZG8gZXJhc2UgJSVmCisJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgorCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKKworIi4uXGxpYlwkKE9VVERJUikiIDoKKyAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCisKKyIkKElOVERJUikiIDoKKyAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgorCitDUFA9Y2wuZXhlCiAhSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X2luZGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfcmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3RyYXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGliYWdlbnQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTFNFCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTkRJRgogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC01MCwxMjIgKzgxLDE2IEBACiAgICAkKENQUF9QUk9KKSAkPCAKIDw8CiAKLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAogCiBSU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGliYWdlbnQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQogTElCMzI9bGluay5leGUgLWxpYgogTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X2luZGV4Lm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfcmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3RyYXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FnZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92YXJzLm9iaiIKIAogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQogICAgICQoTElCMzIpIEA8PAogICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQogPDwKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X2luZGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfcmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3RyYXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGliYWdlbnQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGliYWdlbnQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X2luZGV4Lm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfcmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3RyYXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FnZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92YXJzLm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVORElGIAotCiAKICFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCiAhSUYgRVhJU1RTKCJsaWJhZ2VudC5kZXAiKQpAQCAtMTc2LDcgKzEwMSw2IEBACiAhRU5ESUYgCiAKIAotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCiBTT1VSQ0U9Li5cLi5cYWdlbnRcYWdlbnRfaGFuZGxlci5jCiAKICIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC0yMDAsNiArMTI0LDEwIEBACiAiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxhZ2VudF9zeXNPUlRhYmxlLmMKKworIiQoSU5URElSKVxhZ2VudF9zeXNPUlRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIFNPVVJDRT0uLlwuLlxhZ2VudFxhZ2VudF90cmFwLmMKIApAQCAtMjE5LDcgKzE0NywxNTggQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYWxsX2hlbHBlcnMuYwogCi0hRU5ESUYgCisiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYmFieV9zdGVwcy5jCisKKyIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJ1bGtfdG9fbmV4dC5jCisKKyIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcY2FjaGVfaGFuZGxlci5jCisKKyIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGRlYnVnX2hhbmRsZXIuYworCisiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xpbnN0YW5jZS5jCisKKyIkKElOVERJUilcaW5zdGFuY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtb2RlX2VuZF9jYWxsLmMKKworIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbXVsdGlwbGV4ZXIuYworCisiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbnVsbC5jCisKKyIkKElOVERJUilcbnVsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG9sZF9hcGkuYworCisiJChJTlRESVIpXG9sZF9hcGkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyZWFkX29ubHkuYworCisiJChJTlRESVIpXHJlYWRfb25seS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJvd19tZXJnZS5jCisKKyIkKElOVERJUilccm93X21lcmdlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyLmMKKworIiQoSU5URElSKVxzY2FsYXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXJfZ3JvdXAuYworCisiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNlcmlhbGl6ZS5jCisKKyIkKElOVERJUilcc2VyaWFsaXplLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc25tcF9nZXRfc3RhdGlzdGljLmMKKworIiQoSU5URElSKVxzbm1wX2dldF9zdGF0aXN0aWMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF9jYWNoZS5jCisKKyIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF90b19uZXh0LmMKKworIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGUuYworCisiJChJTlRESVIpXHRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfYXJyYXkuYworCisiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfY29udGFpbmVyLmMKKworIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhLmMKKworIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfdGRhdGEuYworCisiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YXNldC5jCisKKyIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2l0ZXJhdG9yLmMKKworIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHdhdGNoZXIuYworCisiJChJTlRESVIpXHdhdGNoZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKwpkaWZmIC0tZ2l0IGEvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmIGIvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODZhNTBlLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTsgICAgICAgQCgjKWxpYmFnZW50LmRlZiAgICAxLjAgMTAvMjYvOTcgKGdtYXJ6b3RAYmF5bmV0d29ya3MuY29tKQotCi1ERVNDUklQVElPTiAgICAgJ1VDRCBTTk1QIEFnZW50IExpYnJhcnknCi07Q09ERSAgICAgICAgICAgIFNIQVJFRCBSRUFEIEVYRUNVVEUKLTtEQVRBICAgICAgICAgICAgU0hBUkVEIFJFQUQgV1JJVEUKLUVYUE9SVFMKLQlzZW5kX2Vhc3lfdHJhcAotCWluaXRfbWFzdGVyX2FnZW50Ci0JaW5pdF9taWJfbW9kdWxlcwotCWluaXRfYWdlbnQKLQlhcmd2cmVzdGFydG5hbWUKLQlhcmd2cmVzdGFydAotCWFyZ3ZyZXN0YXJ0cAotCXVwZGF0ZV9jb25maWcKLQlkdW1wX2lkeF9yZWdpc3RyeQotCW5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0Ci0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCBiL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcAppbmRleCBmNzBkNDk0Li42MzY0MmMyIDEwMDY0NAotLS0gYS93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AKKysrIGIvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwCkBAIC0xMDEsMTYgKzEwMSwxMjQgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxhZ2VudF9zeXNPUlRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcYWdlbnRfdHJhcC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYWxsX2hlbHBlcnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJhYnlfc3RlcHMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJ1bGtfdG9fbmV4dC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcY2FjaGVfaGFuZGxlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcZGVidWdfaGFuZGxlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcaW5zdGFuY2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG1vZGVfZW5kX2NhbGwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG11bHRpcGxleGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xudWxsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xvbGRfYXBpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyZWFkX29ubHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJvd19tZXJnZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXJfZ3JvdXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNlcmlhbGl6ZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XHNubXBfYWdlbnQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlxhZ2VudFxzbm1wX3ZhcnMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNubXBfZ2V0X3N0YXRpc3RpYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfY2FjaGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX3RvX25leHQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9hcnJheS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfY29udGFpbmVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhc2V0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9pdGVyYXRvci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfdGRhdGEuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHdhdGNoZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQpAQCAtMTMzLDE2ICsyNDEsODAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhZ2VudF9zeXNPUlRhYmxlLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFnZW50X3RyYXAuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWxsX2hlbHBlcnMuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYnVsa190b19uZXh0LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGRlYnVnX2hhbmRsZXIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcaW5zdGFuY2UuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcbXVsdGlwbGV4ZXIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcbnVsbC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxvbGRfYXBpLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHJlYWRfb25seS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzZXJpYWxpemUuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc25tcF9hZ2VudC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzbm1wX3ZhcnMuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGUuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfYXJyYXkuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfZGF0YS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9kYXRhc2V0LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2l0ZXJhdG9yLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX3RkYXRhLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgRW5kIFRhcmdldA0KICMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluIGIvd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYzYmNkMi4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLVBST0dOQU1FPQotQ0ZHPQotT1VURElSPQotSU5URElSPQotCi0hSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKLU5VTEw9Ci0hRUxTRSAKLU5VTEw9bnVsCi0hRU5ESUYgCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5zdGFuY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxudWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2xkX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfb25seS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYWxhci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2F0Y2hlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYmhlbHBlcnMucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGliaGVscGVycy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIgXAotCSIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiIFwKLQkiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiIFwKLQkiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcaW5zdGFuY2Uub2JqIiBcCi0JIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIgXAotCSIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIiBcCi0JIiQoSU5URElSKVxudWxsLm9iaiIgXAotCSIkKElOVERJUilcb2xkX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfb25seS5vYmoiIFwKLQkiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiIFwKLQkiJChJTlRESVIpXHNjYWxhci5vYmoiIFwKLQkiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiIFwKLQkiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiIFwKLQkiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIgXAotCSIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVx3YXRjaGVyLm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5zdGFuY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxudWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2xkX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfb25seS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYWxhci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdhdGNoZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYmhlbHBlcnMucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGliaGVscGVycy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIgXAotCSIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiIFwKLQkiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiIFwKLQkiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcaW5zdGFuY2Uub2JqIiBcCi0JIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIgXAotCSIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIiBcCi0JIiQoSU5URElSKVxudWxsLm9iaiIgXAotCSIkKElOVERJUilcb2xkX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfb25seS5vYmoiIFwKLQkiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiIFwKLQkiJChJTlRESVIpXHNjYWxhci5vYmoiIFwKLQkiJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiIFwKLQkiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiIFwKLQkiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIgXAotCSIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVx3YXRjaGVyLm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRU5ESUYgCi0KLQotIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKLSFJRiBFWElTVFMoImxpYmhlbHBlcnMuZGVwIikKLSFJTkNMVURFICJsaWJoZWxwZXJzLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgImxpYmhlbHBlcnMuZGVwIgotIUVORElGIAotIUVORElGIAotCi0KLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYWxsX2hlbHBlcnMuYwotCi0iJChJTlRESVIpXGFsbF9oZWxwZXJzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYmFieV9zdGVwcy5jCi0KLSIkKElOVERJUilcYmFieV9zdGVwcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJ1bGtfdG9fbmV4dC5jCi0KLSIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcY2FjaGVfaGFuZGxlci5jCi0KLSIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGRlYnVnX2hhbmRsZXIuYwotCi0iJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xpbnN0YW5jZS5jCi0KLSIkKElOVERJUilcaW5zdGFuY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtb2RlX2VuZF9jYWxsLmMKLQotIiQoSU5URElSKVxtb2RlX2VuZF9jYWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbXVsdGlwbGV4ZXIuYwotCi0iJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbnVsbC5jCi0KLSIkKElOVERJUilcbnVsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG9sZF9hcGkuYwotCi0iJChJTlRESVIpXG9sZF9hcGkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyZWFkX29ubHkuYwotCi0iJChJTlRESVIpXHJlYWRfb25seS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJvd19tZXJnZS5jCi0KLSIkKElOVERJUilccm93X21lcmdlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyLmMKLQotIiQoSU5URElSKVxzY2FsYXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXJfZ3JvdXAuYwotCi0iJChJTlRESVIpXHNjYWxhcl9ncm91cC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNlcmlhbGl6ZS5jCi0KLSIkKElOVERJUilcc2VyaWFsaXplLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfY2FjaGUuYwotCi0iJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfdG9fbmV4dC5jCi0KLSIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlLmMKLQotIiQoSU5URElSKVx0YWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2FycmF5LmMKLQotIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2NvbnRhaW5lci5jCi0KLSIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YS5jCi0KLSIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX3RkYXRhLmMKLQotIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGFzZXQuYwotCi0iJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9pdGVyYXRvci5jCi0KLSIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x3YXRjaGVyLmMKLQotIiQoSU5URElSKVx3YXRjaGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotCi0hRU5ESUYgCi0KLQpkaWZmIC0tZ2l0IGEvd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCBiL3dpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MGM1NmQuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImxpYmhlbHBlcnMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IiAweDAxMDQNCi0NCi1DRkc9bGliaGVscGVycyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJsaWJoZWxwZXJzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJsaWJoZWxwZXJzLm1hayIgQ0ZHPSJsaWJoZWxwZXJzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgImxpYmhlbHBlcnMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCi0hTUVTU0FHRSAibGliaGVscGVycyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAibGliaGVscGVycyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuLi9saWIvcmVsZWFzZSINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkNCi0jIEFERCBSU0MgL2wgMHg0MDkNCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLi9saWIvcmVsZWFzZS9uZXRzbm1waGVscGVycy5saWIiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmhlbHBlcnMgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLi4vbGliL2RlYnVnIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOQ0KLSMgQUREIFJTQyAvbCAweDQwOQ0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uL2xpYi9kZWJ1Zy9uZXRzbm1waGVscGVycy5saWIiDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJsaWJoZWxwZXJzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgImxpYmhlbHBlcnMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xhbGxfaGVscGVycy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYmFieV9zdGVwcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYnVsa190b19uZXh0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xjYWNoZV9oYW5kbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xkZWJ1Z19oYW5kbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xpbnN0YW5jZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbW9kZV9lbmRfY2FsbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbXVsdGlwbGV4ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG51bGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG9sZF9hcGkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJlYWRfb25seS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccm93X21lcmdlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhcl9ncm91cC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2VyaWFsaXplLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF9jYWNoZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfdG9fbmV4dC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2FycmF5LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9jb250YWluZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX3RkYXRhLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhc2V0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9pdGVyYXRvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcd2F0Y2hlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFsbF9oZWxwZXJzLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGJ1bGtfdG9fbmV4dC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxkZWJ1Z19oYW5kbGVyLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGluc3RhbmNlLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG11bHRpcGxleGVyLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG51bGwuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcb2xkX2FwaS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxyZWFkX29ubHkuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc2VyaWFsaXplLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2FycmF5LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2RhdGEuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfdGRhdGEuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfZGF0YXNldC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9pdGVyYXRvci5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluIGIvd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluCmluZGV4IGI1YzhiMjUuLjM4MjQ5MTkgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4KQEAgLTE5LDcgKzE5LDYgQEAKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2hhbmRsZXJzLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2xvZy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgpAQCAtMzIsNyArMzEsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYm5ldHNubXB0cmFwZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC03Niw3ICs3NSw2IEBACiAJIiQoSU5URElSKVxzbm1wdHJhcGRfaGFuZGxlcnMub2JqIiBcCiAJIiQoSU5URElSKVxzbm1wdHJhcGRfbG9nLm9iaiIgXAogCSIkKElOVERJUilcc25tcHRyYXBkX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgXAogCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiCiAKICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXB0cmFwZC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKQEAgLTk0LDcgKzkyLDYgQEAKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2hhbmRsZXJzLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2xvZy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCkBAIC0xMDgsNyArMTA1LDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYm5ldHNubXB0cmFwZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTE1Miw3ICsxNDksNiBAQAogCSIkKElOVERJUilcc25tcHRyYXBkX2hhbmRsZXJzLm9iaiIgXAogCSIkKElOVERJUilcc25tcHRyYXBkX2xvZy5vYmoiIFwKIAkiJChJTlRESVIpXHNubXB0cmFwZF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgogCiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wdHJhcGQubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCkBAIC0xOTcsMTEgKzE5Myw2IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMKLQotIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UuYwogCiAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpkaWZmIC0tZ2l0IGEvd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AgYi93aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcAppbmRleCBkNTQ3NDNiLi4wOGI0MWZmIDEwMDY0NAotLS0gYS93aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcAorKysgYi93aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcApAQCAtODksMzcgKzg5LDM2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wdHJhcGRfYXV0aC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFwcHNcc25tcHRyYXBkX2hhbmRsZXJzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wdHJhcGRfbG9nLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYXBwc1xzbm1wdHJhcGRfYXV0aC5jDQotIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCiANCiAjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxhcHBzXHNubXB0cmFwZF9hdXRoLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxhcHBzXHNubXB0cmFwZF9oYW5kbGVycy5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0iLi5cLi5cYXBwc1xzbm1wdHJhcGRfbG9nLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhcHBzXHNubXB0cmFwZF9hdXRoLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgRW5kIFRhcmdldA0KICMgRW5kIFByb2plY3QNCi0NCmRpZmYgLS1naXQgYS93aW4zMi9saWJzZGxsLmRzdyBiL3dpbjMyL2xpYnNkbGwuZHN3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTVjOTk5Li4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYnNkbGwuZHN3CisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGliYWdlbnQiPSIuXGxpYmFnZW50XGxpYmFnZW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYmhlbHBlcnMiPSIuXGxpYmhlbHBlcnNcbGliaGVscGVycy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJzbm1wX2RsbCI9Ii5cbGlic25tcF9kbGxcbGlic25tcF9kbGwuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibmV0c25tcG1pYnMiPSIuXG5ldHNubXBtaWJzXG5ldHNubXBtaWJzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYm5ldHNubXB0cmFwZCI9Ii5cbGlibmV0c25tcHRyYXBkXGxpYm5ldHNubXB0cmFwZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLUdsb2JhbDoNCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDM+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4gYi93aW4zMi9saWJzbm1wL01ha2VmaWxlLmluCmluZGV4IDliMzZiYjguLjk4ZDgzYzggMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbgpAQCAtMiw2ICsyLDcgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KK1NESz0KIAogIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCiBOVUxMPQpAQCAtOSwyNTAgKzEwLDk0IEBACiBOVUxMPW51bAogIUVORElGIAogCitBTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKKworTElCMzJfT0JKUz0gXAorCSIkKElOVERJUilcYXNuMS5vYmoiIFwKKwkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAorCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKKwkiJChJTlRESVIpXGNsb3NlZGlyLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKKwkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKKwkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCisJIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgXAorCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAorCSIkKElOVERJUilcZ2V0dGltZW9mZGF5Lm9iaiIgXAorCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAorCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAorCSIkKElOVERJUilcaW50NjQub2JqIiBcCisJIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKKwkiJChJTlRESVIpXGxhcmdlX2ZkX3NldC5vYmoiIFwKKwkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAorCSIkKElOVERJUilcbWQ1Lm9iaiIgXAorCSIkKElOVERJUilcbWliLm9iaiIgXAorCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKKwkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKKwkiJChJTlRESVIpXG9wZW5kaXIub2JqIiBcCisJIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKKwkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAorCSIkKElOVERJUilccmVhZGRpci5vYmoiIFwKKwkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAorCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXAub2JqIiBcCisJIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wSVB2NEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wU29ja2V0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBJUHY0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAorCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAorCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAorCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAorCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKKwkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCisJIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKKwkiJChJTlRESVIpXHN0cnRvdWxsLm9iaiIgXAorCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAorCSIkKElOVERJUilcdG9vbHMub2JqIiBcCisJIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAorCSIkKElOVERJUilcdmFjbS5vYmoiIFwKKwkiJChJTlRESVIpXHdpbnBpcGUub2JqIgorIUlGICIkKFNESykiID09ICJ0cnVlIgorTElCMzJfT0JKUz0kKExJQjMyX09CSlMpXAorCSIkKElOVERJUilcc25tcElQdjZCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCishRU5ESUYKKworQ0xFQU4gOgorCS1AZm9yICVmIGluICQoTElCMzJfT0JKUykgZG8gZXJhc2UgJSVmCisJLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKKworIi4uXGxpYlwkKE9VVERJUikiIDoKKyAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCisKKyIkKElOVERJUikiIDoKKyAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgorCitDUFA9Y2wuZXhlCiAhSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFzbjEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWxsYmFjay5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxnZXRvcHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnQ2NC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbGNkX3RpbWUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtZDUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFyc2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC10Yy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHVzbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB2My5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnBpcGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXNuMS5vYmoiIFwKLQkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAotCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKLQkiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAotCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAotCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKLQkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKLQkiJChJTlRESVIpXGludDY0Lm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAotCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKLQkiJChJTlRESVIpXG1kNS5vYmoiIFwKLQkiJChJTlRESVIpXG1pYi5vYmoiIFwKLQkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCi0JIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCi0JIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcc2NhcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAotCSIkKElOVERJUilcc25tcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAotCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAotCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAotCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCi0JIiQoSU5URElSKVx0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAotCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY20ub2JqIiBcCi0JIiQoSU5URElSKVx3aW5waXBlLm9iaiIgXAotCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFzbjEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWxsYmFjay5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxnZXRvcHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnQ2NC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbGNkX3RpbWUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtZDUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFyc2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC10Yy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHVzbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB2My5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5waXBlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVORElGCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTI2OSw5MSArMTE0LDE1IEBACiAgICAkKENQUF9QUk9KKSAkPCAKIDw8CiAKLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAogCiBSU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQogTElCMzI9bGluay5leGUgLWxpYgogTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFzbjEub2JqIiBcCi0JIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKLQkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCi0JIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCi0JIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCi0JIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKLQkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCi0JIiQoSU5URElSKVxtZDUub2JqIiBcCi0JIiQoSU5URElSKVxtaWIub2JqIiBcCi0JIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAotCSIkKElOVERJUilccGFyc2Uub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAotCSIkKElOVERJUilcdG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKLQkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtLm9iaiIgXAotCSIkKElOVERJUilcd2lucGlwZS5vYmoiIFwKLQkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQogICAgICQoTElCMzIpIEA8PAogICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQogPDwKIAotIUVORElGIAotCiAKICFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCiAhSUYgRVhJU1RTKCIkKFBST0dOQU1FKS5kZXAiKQpAQCAtMzY0LDcgKzEzMyw2IEBACiAhRU5ESUYgCiAKIAotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxhc24xLmMKIAogIiQoSU5URElSKVxhc24xLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTM4Myw5ICsxNTEsOSBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxjbXVfY29tcGF0LmMKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGNsb3NlZGlyLmMKIAotIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKyIkKElOVERJUilcY2xvc2VkaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCkBAIC00MzEsMTUgKzE5OSwyMSBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMKKworIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0b3B0LmMKIAogIiQoSU5URElSKVxnZXRvcHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxpbnQ2NC5jCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXR0aW1lb2ZkYXkuYwogCi0iJChJTlRESVIpXGludDY0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKyIkKElOVERJUilcZ2V0dGltZW9mZGF5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIApAQCAtNDU1LDEyICsyMjksMjQgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcaW50NjQuYworCisiJChJTlRESVIpXGludDY0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJca2V5dG9vbHMuYwogCiAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcbGFyZ2VfZmRfc2V0LmMKKworIiQoSU5URElSKVxsYXJnZV9mZF9zZXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxsY2RfdGltZS5jCiAKICIkKElOVERJUilcbGNkX3RpbWUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNDkxLDYgKzI3NywxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxvcGVuZGlyLmMKKworIiQoSU5URElSKVxvcGVuZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJccGFyc2UuYwogCiAiJChJTlRESVIpXHBhcnNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTUwMyw2ICsyOTUsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJccmVhZGRpci5jCisKKyIkKElOVERJUilccmVhZGRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNjYXBpLmMKIAogIiQoSU5URElSKVxzY2FwaS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01MjEsNiArMzE5LDcyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcENhbGxiYWNrRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcElQdjRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NkJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBJUHY2QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFNvY2tldEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBTb2NrZXRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQQmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BJUHY2RG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBJUHY0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjZEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9hbGFybS5jCiAKICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01NzUsNiArNDM5LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jCisKKyIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF90cmFuc3BvcnQuYwogCiAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTU4Nyw0MiArNDU3LDYgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMKLQotIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wQ2FsbGJhY2tEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQSVB2NkRvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUElQdjZEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcHVzbS5jCiAKICIkKElOVERJUilcc25tcHVzbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02NDcsNiArNDgxLDE4IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMKKworIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRvdWxsLmMKKworIiQoSU5URElSKVxzdHJ0b3VsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHN5c3RlbS5jCiAKICIkKElOVERJUilcc3lzdGVtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY1OSwxMiArNTA1LDYgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYwotCi0iJChJTlRESVIpXHN0cnRva19yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQogU09VUkNFPS4uXC4uXHNubXBsaWJcdWNkX2NvbXBhdC5jCiAKICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02ODMsMTEgKzUyMywzIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYwotCi0iJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXAvbGlic25tcC5kc3AgYi93aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwCmluZGV4IDE2ZWVhMmQuLjIzODYzMzEgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYnNubXAvbGlic25tcC5kc3AKKysrIGIvd2luMzIvbGlic25tcC9saWJzbm1wLmRzcApAQCAtOTcsNyArOTcsNyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcY211X2NvbXBhdC5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcY2xvc2VkaXIuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTEyOSwxMCArMTI5LDE4IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXRvcHQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGdldHRpbWVvZmRheS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcaW5ldF9udG9wLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xNDksNiArMTU3LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxsYXJnZV9mZF9zZXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGxjZF90aW1lLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xNjksNiArMTgxLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxvcGVuZGlyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxwYXJzZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTc3LDYgKzE5MywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJccmVhZGRpci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc2NhcGkuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTIyNSw2ICsyNDUsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF90cmFuc3BvcnQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTIzMywyNyArMjU3LDUxIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcEFsaWFzRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wQ2FsbGJhY2tEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcENhbGxiYWNrRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY0QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUElQdjZEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjZCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBTb2NrZXRCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQSVB2NkRvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQQmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BJUHY2RG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjRCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY2RG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0yNzMsNiArMzIxLDE0IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG91bGwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHN5c3RlbS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjgxLDEwICszMzcsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHVjZF9jb21wYXQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI5NSwxMCArMzQ3LDYgQEAKIA0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnBpcGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQpAQCAtMzE3LDEwICszNjUsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcY211X2NvbXBhdC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGNvbnRhaW5lci5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTMzMyw2ICszNzcsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGZkX2V2ZW50X21hbmFnZXIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxnZXRvcHQuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zNDUsNiArMzkzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxsYXJnZV9mZF9zZXQuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxsY2RfdGltZS5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQzNyw2ICs0ODksMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN0cnRva19yLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3lzdGVtLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNDQ1LDEwICs1MDEsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3RydG9rX3IuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVx1Y2RfY29tcGF0LmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4gYi93aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbgppbmRleCBiZWY3MGFlLi4wYWFmNDFiIDEwMDY0NAotLS0gYS93aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbgpAQCAtMiw3ICsyLDcgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KLVNTTD0KK1NESz0KIAogIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCiBOVUxMPQpAQCAtMTAsNzEgKzEwLDg0IEBACiBOVUxMPW51bAogIUVORElGIAogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCiBBTEwgOiAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIKIAorTElOSzMyX09CSlM9IFwKKwkiJChJTlRESVIpXGFzbjEub2JqIiBcCisJIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKKwkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCisJIiQoSU5URElSKVxjbG9zZWRpci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCisJIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCisJIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAorCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIFwKKwkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKKwkiJChJTlRESVIpXGdldHRpbWVvZmRheS5vYmoiIFwKKwkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKKwkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKKwkiJChJTlRESVIpXGludDY0Lm9iaiIgXAorCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCisJIiQoSU5URElSKVxsYXJnZV9mZF9zZXQub2JqIiBcCisJIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKKwkiJChJTlRESVIpXG1kNS5vYmoiIFwKKwkiJChJTlRESVIpXG1pYi5vYmoiIFwKKwkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCisJIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCisJIiQoSU5URElSKVxvcGVuZGlyLm9iaiIgXAorCSIkKElOVERJUilccGFyc2Uub2JqIiBcCisJIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKKwkiJChJTlRESVIpXHJlYWRkaXIub2JqIiBcCisJIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCisJIiQoSU5URElSKVxzbm1wLm9iaiIgXAorCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcElQdjRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFNvY2tldEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQQmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQQmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQSVB2NEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAorCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAorCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKKwkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCisJIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAorCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCisJIiQoSU5URElSKVxzdHJ0b3VsbC5vYmoiIFwKKwkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKKwkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAorCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKKwkiJChJTlRESVIpXHZhY20ub2JqIiBcCisJIiQoSU5URElSKVx3aW5waXBlLm9iaiIKKyFJRiAiJChTREspIiA9PSAidHJ1ZSIKK0xJTkszMl9PQkpTPSQoTElOSzMyX09CSlMpXAorCSIkKElOVERJUilcc25tcElQdjZCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCishRU5ESUYKIAogQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhc24xLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FsbGJhY2sub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY211X2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZ2V0b3B0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50NjQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X250b3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXl0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWQ1Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhcnNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAtdGMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9jbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9lbnVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB1c20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdjMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNweS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RydG9rX3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5waXBlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKKwktQGZvciAlZiBpbiAoJChMSU5LMzJfT0JKUykpIGRvIGVyYXNlICUlZgogCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5leHAiCiAJLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwubWFuaWZlc3QiCiAKICIuLlxsaWJcJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgpAQCAtODYsNyArOTksMTEgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiTkVUU05NUF9ETEwiIC9GcCIkKElOVERJUilcbGlic25tcF9kbGwucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIk5FVFNOTVBfRExMIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVMU0UKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJORVRTTk1QX0RMTCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTkRJRgogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC0xMDMsMjcyICsxMjAsMjMgQEAKICAgICQoQ1BQX1BST0opICQ8IAogPDwKIAotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KIE1UTD1taWRsLmV4ZQogTVRMX1BST0o9L25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyIAogUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYnNubXBfZGxsLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPWFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kbGwgL3BkYjoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL2RlZjoiLlxsaWJzbm1wLmRlZiIgL291dDoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbCIgL2ltcGxpYjoiLi4vbGliLyQoT1VURElSKVxuZXRzbm1wLmxpYiIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXNuMS5vYmoiIFwKLQkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAotCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKLQkiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAotCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAotCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKLQkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKLQkiJChJTlRESVIpXGludDY0Lm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAotCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKLQkiJChJTlRESVIpXG1kNS5vYmoiIFwKLQkiJChJTlRESVIpXG1pYi5vYmoiIFwKLQkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCi0JIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCi0JIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcc2NhcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAotCSIkKElOVERJUilcc25tcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAotCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAotCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAotCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCi0JIiQoSU5URElSKVx0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAotCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY20ub2JqIiBcCi0JIiQoSU5URElSKVx3aW5waXBlLm9iaiIgXAotCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCishSUYgICIkKENGRykiID09ICJyZWxlYXNlIgorTElOSzMyX0ZMQUdTPWFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kbGwgL3BkYjoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLnBkYiIgL2RlYnVnIC9kZWY6Ii5cbGlic25tcC5kZWYiIC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwiIC9pbXBsaWI6Ii4uL2xpYi8kKE9VVERJUikvbmV0c25tcC5saWIiIAorIUVMU0UKK0xJTkszMl9GTEFHUz1hZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGxsIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAucGRiIiAvZGVidWcgL2RlZjoiLlxsaWJzbm1wLmRlZiIgL291dDoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbCIgL2ltcGxpYjoiLi4vbGliLyQoT1VURElSKS9uZXRzbm1wLmxpYiIgCishRU5ESUYKIAogIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiIDogIi4uXGJpblwkKE9VVERJUikiICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXNuMS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGdldG9wdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludDY0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9udG9wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2V5dG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsY2RfdGltZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1kNS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXJzZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLXRjLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZW51bS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdXNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHYzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjcHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cnRva19yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnBpcGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5leHAiCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKLQktQGVyYXNlICIkKElOVERJUilcbmV0c25tcC5wZGIiCi0JLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIuLlxiaW5cJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiTkVUU05NUF9ETEwiIC9GcCIkKElOVERJUilcbGlic25tcF9kbGwucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1NVEw9bWlkbC5leGUKLU1UTF9QUk9KPS9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMiAKLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJzbm1wX2RsbC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCisgaWYgZXhpc3QgIi4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbC5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsIjsyCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1hZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGxsIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpXG5ldHNubXAucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvZGVmOiIuXGxpYnNubXAuZGVmIiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsIiAvaW1wbGliOiIuLi9saWIvJChPVVRESVIpXG5ldHNubXAubGliIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhc24xLm9iaiIgXAotCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCi0JIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAotCSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCi0JIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAotCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAotCSIkKElOVERJUilcaW50NjQub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCi0JIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAotCSIkKElOVERJUilcbWQ1Lm9iaiIgXAotCSIkKElOVERJUilcbWliLm9iaiIgXAotCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKLQkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAotCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKLQkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCi0JIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnBpcGUub2JqIiBcCi0JIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQotIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiIDogIi4uXGJpblwkKE9VVERJUikiICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi0hRU5ESUYgCiAKIAogIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKQEAgLTM4MCw3ICsxNDgsNiBAQAogIUVORElGIAogCiAKLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgogU09VUkNFPS4uXC4uXHNubXBsaWJcYXNuMS5jCiAKICIkKElOVERJUilcYXNuMS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC0zOTksOSArMTY2LDkgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcY211X2NvbXBhdC5jCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxjbG9zZWRpci5jCiAKLSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisiJChJTlRESVIpXGNsb3NlZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIApAQCAtNDQ3LDE1ICsyMTQsMjEgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jCisKKyIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGdldG9wdC5jCiAKICIkKElOVERJUilcZ2V0b3B0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcaW50NjQuYworU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0dGltZW9mZGF5LmMKIAotIiQoSU5URElSKVxpbnQ2NC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisiJChJTlRESVIpXGdldHRpbWVvZmRheS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKQEAgLTQ3MSwxMiArMjQ0LDI0IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGludDY0LmMKKworIiQoSU5URElSKVxpbnQ2NC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGtleXRvb2xzLmMKIAogIiQoSU5URElSKVxrZXl0b29scy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGxhcmdlX2ZkX3NldC5jCisKKyIkKElOVERJUilcbGFyZ2VfZmRfc2V0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcbGNkX3RpbWUuYwogCiAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTUwNyw2ICsyOTIsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcb3BlbmRpci5jCisKKyIkKElOVERJUilcb3BlbmRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHBhcnNlLmMKIAogIiQoSU5URElSKVxwYXJzZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01MTksNiArMzEwLDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHJlYWRkaXIuYworCisiJChJTlRESVIpXHJlYWRkaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzY2FwaS5jCiAKICIkKElOVERJUilcc2NhcGkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTM3LDYgKzMzNCw3MiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBDYWxsYmFja0RvbWFpbi5jCisKKyIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBJUHY0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjZCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wSVB2NkJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBTb2NrZXRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wU29ja2V0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQSVB2NkRvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQQmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUERvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQSVB2NEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY2RG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfYWxhcm0uYwogCiAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTkxLDYgKzQ1NCwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYworCisiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfdHJhbnNwb3J0LmMKIAogIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02MDMsNDIgKzQ3Miw2IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jCi0KLSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcENhbGxiYWNrRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUElQdjZEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUERvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBJUHY2RG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXB1c20uYwogCiAiJChJTlRESVIpXHNubXB1c20ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjYzLDYgKzQ5NiwxOCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jCisKKyIkKElOVERJUilcc3RydG9rX3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b3VsbC5jCisKKyIkKElOVERJUilcc3RydG91bGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzeXN0ZW0uYwogCiAiJChJTlRESVIpXHN5c3RlbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02NzUsMTIgKzUyMCw2IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMKLQotIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHVjZF9jb21wYXQuYwogCiAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjk4LDEyICs1MzcsNCBAQAogIiQoSU5URElSKVx3aW5waXBlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYwotCi0iJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIApkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYgYi93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZgppbmRleCA0NjcwZmI2Li40NWRkMzU2IDEwMDY0NAotLS0gYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZgorKysgYi93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZgpAQCAtMSw0NTkgKzEsMiBAQAotOyAgICAgICBAKCMpc25tcC5kZWYgICAgMS4wIDEwLzI2Lzk3IChnbWFyem90QGJheW5ldHdvcmtzLmNvbSkKLTsgICAgICAgU2luZ2xlIHNlc3Npb24gQVBJIG1vZHMgYnkgTS4gU2xpZmNhaywgSW50ZXJuZXQgU2VjdXJpdHkgU3lzdGVtcywgSW5jLgotCi1ERVNDUklQVElPTiAgICAgJ1VDRCBTTk1QIExpYnJhcnknCi07Q09ERSAgICAgICAgICAgIFNIQVJFRCBSRUFEIEVYRUNVVEUKLTtEQVRBICAgICAgICAgICAgU0hBUkVEIFJFQUQgV1JJVEUKLUVYUE9SVFMKLQlhc25fcGFyc2VfaW50Ci0JYXNuX2J1aWxkX2ludAotCWFzbl9wYXJzZV91bnNpZ25lZF9pbnQKLQlhc25fYnVpbGRfdW5zaWduZWRfaW50Ci0JYXNuX3BhcnNlX3N0cmluZwotCWFzbl9idWlsZF9zdHJpbmcKLQlhc25fcGFyc2VfaGVhZGVyCi0JYXNuX2J1aWxkX2hlYWRlcgotCWFzbl9idWlsZF9zZXF1ZW5jZQotCWFzbl9wYXJzZV9sZW5ndGgKLQlhc25fYnVpbGRfbGVuZ3RoCi0JYXNuX3BhcnNlX29iamlkCi0JYXNuX2J1aWxkX29iamlkCi0JYXNuX3BhcnNlX251bGwKLQlhc25fYnVpbGRfbnVsbAotCWFzbl9wYXJzZV9iaXRzdHJpbmcKLQlhc25fYnVpbGRfYml0c3RyaW5nCi0JYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0Ci0JYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0Ci0JbWliX3RvX2Fzbl90eXBlCi0JTURiZWdpbgotCU1EdXBkYXRlCi0JcHJpbnRfbWliCi0JcHJpbnRfbWliX3RyZWUKLQlwcmludF9hc2NpaV9kdW1wCi0JcmVhZF9vYmppZAotCWdldF90cmVlX2hlYWQKLQluZXRzbm1wX2luaXRfbWliCi0JaW5pdF9taWIKLQlpbml0X21pYl9pbnRlcm5hbHMKLQlwcmludF92YXJpYWJsZQotCXByaW50X3ZhbHVlCi0JcHJpbnRJNjQKLQlwcmludF9vYmppZAotCWZwcmludF9vYmppZAotCXByaW50X2Rlc2NyaXB0aW9uCi0JZnByaW50X2Rlc2NyaXB0aW9uCi0JZ2V0X21vZHVsZV9ub2RlCi0JZ2V0X25vZGUKLQlzbm1wX3BhcnNlX29pZAotCWZpbmRfbm9kZQotCWZpbmRfYmVzdF90cmVlX25vZGUKLQlnZXRfd2lsZF9ub2RlCi0JZmluZF90cmVlX25vZGUKLQljbGVhcl90cmVlX2ZsYWdzCi0JZ2V0X3RyZWUKLQlyZWFkX21vZHVsZQotCW5ldHNubXBfcmVhZF9tb2R1bGUKLQlyZWFkX21pYgotCXJlYWRfYWxsX21pYnMKLQlhZGRfbWliZGlyCi0Jc25tcF9nZXRfdG9rZW4KLQlzbm1wX3NldF9taWJfd2FybmluZ3MKLQlzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucwotCWFkZF9tb2R1bGVfcmVwbGFjZW1lbnQKLQlwcmludF9zdWJ0cmVlCi0JcHJpbnRfYXNjaWlfZHVtcF90cmVlCi0JeGR1bXAKLQlzbm1wX3BhcnNlX3Zhcl9vcAotCXNubXBfYnVpbGRfdmFyX29wCi0JcHJpbnRVNjQKLQl1NjRTdWJ0cmFjdAotCXplcm9VNjQKLQlvcGVuZGlyCi0JcmVhZGRpcgotCWNsb3NlZGlyCi0JZ2V0dGltZW9mZGF5Ci0JbWtkaXJoaWVyCi0Jd2luc29ja19zdGFydHVwCi0Jd2luc29ja19jbGVhbnVwCi0JZ2V0X215YWRkcgotCWdldF91cHRpbWUKLQlzbm1wX29wZW4KLQlzbm1wX29wZW5fZXgKLQlzbm1wX2Nsb3NlCi0Jc25tcF9zZW5kCi0Jc25tcF9yZWFkCi0Jc25tcF9mcmVlX3BkdQotCXNubXBfZnJlZV92YXIKLQlzbm1wX3NlbGVjdF9pbmZvCi0Jc25tcF90aW1lb3V0Ci0Jc25tcF9zZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fbG9nZ2luZwotCXNubXBfZGlzYWJsZV9zdGRlcnJsb2cKLQlzbm1wX2VuYWJsZV9zeXNsb2cKLQlzbm1wX2VuYWJsZV9zdGRlcnJsb2cKLQlzbm1wX2VuYWJsZV9maWxlbG9nCi0Jc25tcF9sb2cKLQlzbm1wX2xvZ19wZXJyb3IKLQlzbm1wX3BlcnJvcgotCXNubXBfc2Vzc19wZXJyb3IKLQlzbm1wX2FkZF9udWxsX3ZhcgotCXNubXBfcGR1X2NyZWF0ZQotCXNubXBfZml4X3BkdQotCXNubXBfY2xvbmVfcGR1Ci0Jc25tcF9jbG9uZV9tZW0KLQlzbm1wX3NldF92YXJfdmFsdWUKLQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUKLQlzbm1wX3NldF92YXJfb2JqaWQKLQlzbm1wX3JlcGxhY2VfdmFyX3R5cGVzCi0Jc25tcF9hcGlfZXJyc3RyaW5nCi0Jc25tcF9lcnJzdHJpbmcKLQlzbm1wX3NldF9kZXRhaWwKLQlzbm1wX3N5bmNoX3NldHVwCi0Jc25tcF9zeW5jaF9yZXNwb25zZQotCXNubXBfZHVwbGljYXRlX29iamlkCi0Jc25tcF9nZXRfbmV4dF9zZXNzaWQKLQlzbm1wX2dldF9uZXh0X3RyYW5zaWQKLQlzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMKLQlzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkKLQlzbm1wX2dldF9zdGF0aXN0aWMKLQlpbml0X3NubXAKLQlzbm1wX3NodXRkb3duCi0Jc25tcF9hZGRfdmFyCi0JcnVuX2FsYXJtcwotCXNubXBfY2xvbmVfdmFyCi0JcHJpbnRfb2lkX3JlcG9ydAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N1ZmZpeAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N5bWJvbGljCi0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfb2lkCi0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbGFiZWxlZG9pZAotOwlhc2NpaV90b19iaW5hcnkKLTsJaGV4X3RvX2JpbmFyeQotCWdldF90Y19kZXNjcmlwdG9yCi0JZ2V0X3RjX2Rlc2NyaXB0aW9uCi0Jc2V0ZW52Ci0JZmluZF9tb2R1bGUKLQlzbm1wX2FzeW5jX3NlbmQKLQlzbm1wX2Vycm9yCi0Jc25tcF9zZXNzX2luaXQKLQlzbm1wX3Nlc3Nfb3BlbgotCXNubXBfc2Vzc19zZXNzaW9uCi0Jc25tcF9zZXNzX3NlbmQKLQlzbm1wX3Nlc3NfYXN5bmNfc2VuZAotCXNubXBfc2Vzc19zZWxlY3RfaW5mbwotCXNubXBfc2Vzc19yZWFkCi0Jc25tcF9zZXNzX3RpbWVvdXQKLQlzbm1wX3Nlc3NfY2xvc2UKLQlzbm1wX3Nlc3NfZXJyb3IKLQlzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9ucwotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0JcmVhZF9jb25maWdfcmVhZF9kYXRhCi0JcmVhZF9jb25maWdfc3RvcmVfZGF0YQotCXJlYWRfY29uZmlnX3ByaW50X3VzYWdlCi0JcmVhZF9jb25maWdfd2l0aF90eXBlCi0JcmVhZF9jb25maWdfc3RvcmUKLQlyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZwotCXJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nCi0JcmVhZF9jb25maWdfcmVhZF9tZW1vcnkKLQlyZWFkX2NvbmZpZ19yZWFkX29iamlkCi0JZnJlZV9jb25maWcKLQlza2lwX3doaXRlCi0Jc2tpcF9ub3Rfd2hpdGUKLQlyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKLQl1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgotCXJlYWRfYXBwX2NvbmZpZ19zdG9yZQotCXVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKLQlzbm1wX3NldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19kZWJ1Z2dpbmcKLQlkZWJ1Z19pbmRlbnQKLQlkZWJ1Z19pbmRlbnRfYWRkCi0JZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZAotCWRlYnVnbXNnCi0JZGVidWdtc2dfaGV4Ci0JZGVidWdtc2dfaGV4dGxpCi0JZGVidWdtc2d0b2tlbgotCWRlYnVnbXNnX3ZhcgotCWRlYnVnbXNnX29pZHJhbmdlCi0JZGVidWdfcmVnaXN0ZXJfdG9rZW5zCi0JZ2VuZXJhdGVfS3UKLQl1cHRpbWVfc3RyaW5nCi0JbmV0c25tcF9tZW1kdXAKLQlkdW1wX2NodW5rCi0JaW5pdF9jYWxsYmFja3MKLQlzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrCi0Jc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrCi0Jc25tcF9jYWxsX2NhbGxiYWNrcwotCXNubXBfY291bnRfY2FsbGJhY2tzCi0Jc25tcF9jYWxsYmFja19hdmFpbGFibGUKLQlzdHJuY2FzZWNtcAotCXN0cmNhc2VjbXAKLQlpbml0X3NubXBfYWxhcm0KLQluZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYgotCW5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnCi0JbmV0c25tcF9kc19zZXRfYm9vbGVhbgotCW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4KLQluZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuCi0JbmV0c25tcF9kc19zZXRfaW50Ci0JbmV0c25tcF9kc19nZXRfaW50Ci0JbmV0c25tcF9kc19zZXRfc3RyaW5nCi0JbmV0c25tcF9kc19nZXRfc3RyaW5nCi0Jc25tcF9wZHVfYWRkX3ZhcmlhYmxlCi0Jc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZQotCWVuY29kZV9rZXljaGFuZ2UKLQlkZWNvZGVfa2V5Y2hhbmdlCi0JZ2VuZXJhdGVfa3VsCi0Jc2NfaW5pdAotCXNldHVwX2VuZ2luZUlECi0JYmluYXJ5X3RvX2hleAotCWhleF90b19iaW5hcnkyCi0Jc25tcF9yZXNfaW5pdAotCXNubXBfcmVzX2xvY2sKLQlzbm1wX3Jlc191bmxvY2sKLQlzbm1wX3Jlc19kZXN0cm95X211dGV4Ci0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfaW5fdG9nZ2xlX29wdGlvbnMKLQlzbm1wX2luX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9vdXRfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX291dF90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfb2lkX2NvbXBhcmUKLQlzbm1wX29pZHRyZWVfY29tcGFyZQotCW5ldHNubXBfb2lkX2VxdWFscwotCXVzbV9mcmVlX3VzZXIKLQl1c21fYWRkX3VzZXIKLQl1c21fY3JlYXRlX2luaXRpYWxfdXNlcgotCXVzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcgotCXVzbV9zYXZlX3VzZXJzCi0JdXNtX3BhcnNlX2NvbmZpZ191c21Vc2VyCi0JdXNtX2dldF91c2VyCi0JdXNtX2dldF91c2VyTGlzdAotCXVzbV9jbG9uZUZyb21fdXNlcgotCXVzbV9jcmVhdGVfdXNlcgotCXVzbV9yZW1vdmVfdXNlcgotCXVzbV9zZXRfdXNlcl9wYXNzd29yZAotCXJlYWRfcHJlbWliX2NvbmZpZ3MKLQlpbml0X3NubXB2MwotCXNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZQotCXNubXB2M19sb2NhbF9zbm1wRW5naW5lQm9vdHMKLQlzbm1wdjNfZ2V0X2VuZ2luZUlECi0Jc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlECi0JZ2V0X2RlZmF1bHRfYXV0aHR5cGUKLQlnZXRfZGVmYXVsdF9wcml2dHlwZQotCXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCi0JcmVhZF9jb25maWdzCi0JZGVidWdtc2dfb2lkCi0JY29uZmlnX3BlcnJvcgotCWNvbmZpZ19wd2FybgotCWNvcHlfd29yZAotCWNvcHlfbndvcmQKLQljYWxjdWxhdGVfdGltZV9kaWZmCi0JdmFjbV9pc19jb25maWd1cmVkCi0JZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5Ci0JdmFjbV9jcmVhdGVHcm91cEVudHJ5Ci0JdmFjbV9kZXN0cm95R3JvdXBFbnRyeQotCXZhY21fZGVzdHJveUFsbEdyb3VwRW50cmllcwotCXZhY21fY3JlYXRlQWNjZXNzRW50cnkKLQl2YWNtX2Rlc3Ryb3lBY2Nlc3NFbnRyeQotCXZhY21fZGVzdHJveUFsbEFjY2Vzc0VudHJpZXMKLQl2YWNtX2NyZWF0ZVZpZXdFbnRyeQotCXZhY21fZGVzdHJveVZpZXdFbnRyeQotCXZhY21fZGVzdHJveUFsbFZpZXdFbnRyaWVzCi0JdmFjbV9nZXRWaWV3RW50cnkKLQl2YWNtX2dldEdyb3VwRW50cnkKLQl2YWNtX2dldEFjY2Vzc0VudHJ5Ci0JdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzCi0JdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAKLQl2YWNtX3BhcnNlX2NvbmZpZ192aWV3Ci0JdmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MKLQlzdG9yZV92YWNtCi0JdmFjbV9zY2FuR3JvdXBJbml0Ci0JdmFjbV9zY2FuR3JvdXBOZXh0Ci0JdmFjbV9zY2FuQWNjZXNzSW5pdAotCXZhY21fc2NhbkFjY2Vzc05leHQKLQl2YWNtX3NjYW5WaWV3SW5pdAotCXZhY21fc2NhblZpZXdOZXh0Ci0JdmFjbV9jaGVja1N1YnRyZWUKLQlzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiCi0Jc25tcF9jbG9uZV92YXJiaW5kCi0Jc25tcF9mcmVlX3ZhcmJpbmQKLQlzbm1wX2dldF9kdW1wX3BhY2tldAotCXNubXBfZ2V0X3F1aWNrX3ByaW50Ci0Jc25tcF9nZXRfcmFuZG9tX2FjY2VzcwotCXNubXBfZ2V0X3N1ZmZpeF9vbmx5Ci0Jc25tcF9zZXRfZHVtcF9wYWNrZXQKLQlzbm1wX3NldF9mdWxsX29iamlkCi0Jc25tcF9zZXRfcXVpY2tfcHJpbnQKLQlzbm1wX3NldF9yYW5kb21fYWNjZXNzCi0Jc25tcF9zZXRfc3VmZml4X29ubHkKLQlzbm1wX2NsZWFuX3BlcnNpc3RlbnQKLQlzbm1wX3NhdmVfcGVyc2lzdGVudAotCXVzbV9zdG9yZV91c2VycwotCXNubXBfc3RvcmUKLQlhdGltZV9kaWZmCi0JdWF0aW1lX2hkaWZmCi0JYXRpbWVfbmV3TWFya2VyCi0JYXRpbWVfc2V0TWFya2VyCi0JYXRpbWVfcmVhZHkKLQlzbm1wX3N0cmNhdAotCWZwcmludF92YXJpYWJsZQotCXNwcmludF9yZWFsbG9jX29iamlkCi0Jc3ByaW50X3JlYWxsb2NfYXNjaWlzdHJpbmcKLQlzcHJpbnRfcmVhbGxvY192YXJpYWJsZQotCXNwcmludF9yZWFsbG9jX3ZhbHVlCi0Jc3ByaW50X3JlYWxsb2NfYnlfdHlwZQotCXNubXBfcmVhbGxvYwotICAgICAgbmV0c25tcF9jb25maWcKLSAgICAgIG5ldHNubXBfY29uZmlnX3JlbWVtYmVyCi0gICAgICBzbm1wX2hleF90b19iaW5hcnkKLSAgICAgIHNubXB2M19vcHRpb25zCi0gICAgICBuZXRzbm1wX2dldF92ZXJzaW9uCi0gICAgICBzbm1wX3Nlc3NfdHJhbnNwb3J0Ci0gICAgICBzbm1wX3Nlc3NfcG9pbnRlcgotICAgICAgc25tcF9kZWNpbWFsX3RvX2JpbmFyeQotCXNubXBfYWxhcm1fcmVnaXN0ZXIKLQlzbm1wX2FsYXJtX3VucmVnaXN0ZXIKLSAgICAgIGRhdGVfbl90aW1lCi0Jc25tcF9kaXNhYmxlX2xvZwotCXNubXBfZW5hYmxlX3N5c2xvZ19pZGVudAotCW5ldHNubXBfc2Vzc19sb2dfZXJyb3IKLQlzbm1wX2FkZAotCWhhbmRsZV9sb25nX29wdAotCW5ldHNubXBfdHJhbnNwb3J0X2ZyZWUKLQluZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0Ci0JbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9vaWQKLQluZXRzbm1wX3Rkb21haW5fc3VwcG9ydAotCW5ldHNubXBVRFBEb21haW4KLQluZXRzbm1wX3NubXBUQ1BEb21haW4KLQluZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLQluZXRzbm1wX2FkZF9saXN0X2RhdGEKLQluZXRzbm1wX2dldF9saXN0X2RhdGEKLQluZXRzbm1wX2ZyZWVfbGlzdF9kYXRhCi0JbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEKLQluZXRzbm1wX29pZF9zdGFzaF9hZGRfZGF0YQotCW5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhCi0JbmV0c25tcF9vaWRfZmluZF9wcmVmaXgKLQluZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QKLQluZXRzbm1wX2NvbnRhaW5lcl9udWxsX2luaXQKLQluZXRzbm1wX2NvbnRhaW5lcl9zc2xsX2luaXQKLQluZXRzbm1wX3N0cmR1cF9hbmRfbnVsbAotCWJ1aWxkX29pZAotCWJ1aWxkX29pZF9ub2FsbG9jCi0JcGFyc2Vfb25lX29pZF9pbmRleAotCXBhcnNlX29pZF9pbmRleGVzCi0JY291bnRfdmFyYmluZHMKLQljb3VudF92YXJiaW5kc19vZl90eXBlCi0Jc2VfZmluZF9sYWJlbF9pbl9zbGlzdAotCXNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QKLQlzZV9hZGRfcGFpcl90b19zbGlzdAotCXNubXBfcGFyc2VfYXJncwotCXNubXBfcGFyc2VfYXJnc19kZXNjcmlwdGlvbnMKLQlzbm1wX3BhcnNlX2FyZ3NfdXNhZ2UKLQluZXRzbm1wX2NhbGxiYWNrX29wZW4KLQluZXRzbm1wX3VkcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyCi0JbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkKLQluZXRzbm1wX3VkcF9nZXRTZWNOYW1lCi0JZmluZF9zZWNfbW9kCi0Jc3RybGNhdAotCXN0cmxjcHkKLQlnZXRvcHQKLQlvcHRhcmcgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0ZXJyICAgICAgICAgICAgICAgICAgREFUQQotCW9wdGluZCAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRvcHQgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0cmVzZXQgICAgICAgICAgICAgICAgREFUQQotCXVzbU5vQXV0aFByb3RvY29sICAgICAgIERBVEEKLQl1c21ITUFDTUQ1QXV0aFByb3RvY29sICBEQVRBCi0JdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wgREFUQQotCXVzbU5vUHJpdlByb3RvY29sICAgICAgIERBVEEKLQl1c21ERVNQcml2UHJvdG9jb2wgICAgICBEQVRBCi0JdXNtQUVTUHJpdlByb3RvY29sICAgICAgREFUQQotCXNucHJpbnRfYml0c3RyaW5nCi0Jc25wcmludF92YWx1ZQotCXNucHJpbnRfb2JqaWQKLQlzbnByaW50X3ZhcmlhYmxlCi0Jc25tcF9zeW5jaF9yZXNldAotCXNubXBfbG9nX29wdGlvbnMKLQlzbm1wX2xvZ19zeXNsb2duYW1lCi0JbmV0c25tcF9jbGVhcl9jYWxsYmFja19saXN0Ci0JbmV0c25tcF9jbGVhcl90ZG9tYWluX2xpc3QKLQljbGVhcl9zZWNfbW9kCi0JY2xlYXJfc25tcF9lbnVtCi0JY2xlYXJfY2FsbGJhY2sKLQljbGVhcl91c2VyX2xpc3QKLQluZXRzbm1wX2RzX2dldF92b2lkCi0JbmV0c25tcF9kc19zZXRfdm9pZAotCW5ldHNubXBfZHNfc2h1dGRvd24KLQluZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkCi0JbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlCi0JbW9kdWxlX25hbWUKLQlNaWIgICAgICAgICAgICAgICAgICAgICBEQVRBCi0JdHJlZV9oZWFkICAgICAgICAgICAgICAgREFUQQotCXNubXBfZXJybm8gICAgICAgICAgICAgIERBVEEKLQluZXRzbm1wX2RhZW1vbml6ZQotCXNubXBfbG9nX29wdGlvbnNfdXNhZ2UKLQluZXRzbm1wX2NvbnRhaW5lcl9mcmVlX2xpc3QKLQluZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGUKLQluZXRzbm1wX29pZF9zdGFzaF9mcmVlCi0JbmV0c25tcF9nZXRfbGlzdF9ub2RlCi0JbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlCi0JbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlcgotCW5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlcgotCWdldF9sb2doX2hlYWQKLQlkYmdfdG9rZW5zCi0JZGVidWdfbnVtX3Rva2VucwotCWNyZWF0ZV93aW5waXBlX3RyYW5zcG9ydAotCWdldF90ZW1wX2ZpbGVfcGF0dGVybgotCW5ldHNubXBfc3RyZHVwCi0JbmV0c25tcF9jYWxsb2MKLQluZXRzbm1wX21hbGxvYwotCW5ldHNubXBfcmVhbGxvYwotCW5ldHNubXBfZnJlZQotCW5ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyCi0JaW5pdF91c21fY29uZgotCXN0cnRva19yCi0gICAgICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMKLSAgICAgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4Ci0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlCi0gICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwKLSAgICAgICAgbmV0c25tcF9uY29tcGFyZV9uZXRzbm1wX2luZGV4Ci0gICAgICAgIG5ldHNubXBfY29tcGFyZV9uZXRzbm1wX2luZGV4Ci0gICAgICAgIGZpbmRfdmFyYmluZF9pbl9saXN0Ci0gICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzCi0gICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbwotICAgICAgICBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydAotICAgICAgICBza2lwX3Rva2VuCi0gICAgICAgIHBhcnNlX3NlY0xldmVsX2NvbmYKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uCi0gICAgICAgIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbgotICAgICAgICBuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4KLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldAotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluCi0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2VydmljZV9oYW5kbGVycwotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcgotICAgICAgICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwKLSAgICAgICAgc25tcF9hZGRfZnVsbAotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX2NsaWVudAotICAgICAgICBzbm1wX29pZHN1YnRyZWVfY29tcGFyZQotICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nCi0gICAgICAgIHNubXBfc3RkZXJybG9nX3N0YXR1cwotICAgICAgICBzYV9maW5kX3NwZWNpZmljCi0gICAgICAgIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uCi0gICAgICAgIGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbgotICAgICAgICBuZXRzbm1wX3ZpZXdfZ2V0Ci0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3ZhbHVlCi0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZQotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCi0gICAgICAgIHJlYWRfY29uZmlnX3NhdmVfb2JqaWQKLSAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbWliY2hpbGRvaWQKLSAgICAgICAgbmV0c25tcF9xdWVyeV93YWxrCi0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0bmV4dAotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldAotCW5ldHNubXBfbWt0ZW1wCi0gICAgICAgIGRlYnVnbXNnX3N1Ym9pZAotO0lQdjYgICAgICAgIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eQotO0lQdjYgICAgICAgIG5ldHNubXBfdWRwNl9nZXRTZWNOYW1lCi07SVB2NiAgICAgICAgbmV0c25tcF9UQ1BJUHY2RG9tYWluCi07SVB2NiAgICAgICAgbmV0c25tcF9VRFBJUHY2RG9tYWluCi0KKzsgVGhpcyAuZGVmIGZpbGUgaXMgb2Jzb2xldGUuIERvIG5vdCBhZGQgYW55IG5hbWVzIG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyBoZXJlCis7IGJ1dCBhZGQgTkVUU05NUF9JTVBPUlQgdG8gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluc3RlYWQuCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbiBiL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjcwZmI2Li4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDU5ICswLDAgQEAKLTsgICAgICAgQCgjKXNubXAuZGVmICAgIDEuMCAxMC8yNi85NyAoZ21hcnpvdEBiYXluZXR3b3Jrcy5jb20pCi07ICAgICAgIFNpbmdsZSBzZXNzaW9uIEFQSSBtb2RzIGJ5IE0uIFNsaWZjYWssIEludGVybmV0IFNlY3VyaXR5IFN5c3RlbXMsIEluYy4KLQotREVTQ1JJUFRJT04gICAgICdVQ0QgU05NUCBMaWJyYXJ5JwotO0NPREUgICAgICAgICAgICBTSEFSRUQgUkVBRCBFWEVDVVRFCi07REFUQSAgICAgICAgICAgIFNIQVJFRCBSRUFEIFdSSVRFCi1FWFBPUlRTCi0JYXNuX3BhcnNlX2ludAotCWFzbl9idWlsZF9pbnQKLQlhc25fcGFyc2VfdW5zaWduZWRfaW50Ci0JYXNuX2J1aWxkX3Vuc2lnbmVkX2ludAotCWFzbl9wYXJzZV9zdHJpbmcKLQlhc25fYnVpbGRfc3RyaW5nCi0JYXNuX3BhcnNlX2hlYWRlcgotCWFzbl9idWlsZF9oZWFkZXIKLQlhc25fYnVpbGRfc2VxdWVuY2UKLQlhc25fcGFyc2VfbGVuZ3RoCi0JYXNuX2J1aWxkX2xlbmd0aAotCWFzbl9wYXJzZV9vYmppZAotCWFzbl9idWlsZF9vYmppZAotCWFzbl9wYXJzZV9udWxsCi0JYXNuX2J1aWxkX251bGwKLQlhc25fcGFyc2VfYml0c3RyaW5nCi0JYXNuX2J1aWxkX2JpdHN0cmluZwotCWFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NAotCWFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NAotCW1pYl90b19hc25fdHlwZQotCU1EYmVnaW4KLQlNRHVwZGF0ZQotCXByaW50X21pYgotCXByaW50X21pYl90cmVlCi0JcHJpbnRfYXNjaWlfZHVtcAotCXJlYWRfb2JqaWQKLQlnZXRfdHJlZV9oZWFkCi0JbmV0c25tcF9pbml0X21pYgotCWluaXRfbWliCi0JaW5pdF9taWJfaW50ZXJuYWxzCi0JcHJpbnRfdmFyaWFibGUKLQlwcmludF92YWx1ZQotCXByaW50STY0Ci0JcHJpbnRfb2JqaWQKLQlmcHJpbnRfb2JqaWQKLQlwcmludF9kZXNjcmlwdGlvbgotCWZwcmludF9kZXNjcmlwdGlvbgotCWdldF9tb2R1bGVfbm9kZQotCWdldF9ub2RlCi0Jc25tcF9wYXJzZV9vaWQKLQlmaW5kX25vZGUKLQlmaW5kX2Jlc3RfdHJlZV9ub2RlCi0JZ2V0X3dpbGRfbm9kZQotCWZpbmRfdHJlZV9ub2RlCi0JY2xlYXJfdHJlZV9mbGFncwotCWdldF90cmVlCi0JcmVhZF9tb2R1bGUKLQluZXRzbm1wX3JlYWRfbW9kdWxlCi0JcmVhZF9taWIKLQlyZWFkX2FsbF9taWJzCi0JYWRkX21pYmRpcgotCXNubXBfZ2V0X3Rva2VuCi0Jc25tcF9zZXRfbWliX3dhcm5pbmdzCi0Jc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMKLQlhZGRfbW9kdWxlX3JlcGxhY2VtZW50Ci0JcHJpbnRfc3VidHJlZQotCXByaW50X2FzY2lpX2R1bXBfdHJlZQotCXhkdW1wCi0Jc25tcF9wYXJzZV92YXJfb3AKLQlzbm1wX2J1aWxkX3Zhcl9vcAotCXByaW50VTY0Ci0JdTY0U3VidHJhY3QKLQl6ZXJvVTY0Ci0Jb3BlbmRpcgotCXJlYWRkaXIKLQljbG9zZWRpcgotCWdldHRpbWVvZmRheQotCW1rZGlyaGllcgotCXdpbnNvY2tfc3RhcnR1cAotCXdpbnNvY2tfY2xlYW51cAotCWdldF9teWFkZHIKLQlnZXRfdXB0aW1lCi0Jc25tcF9vcGVuCi0Jc25tcF9vcGVuX2V4Ci0Jc25tcF9jbG9zZQotCXNubXBfc2VuZAotCXNubXBfcmVhZAotCXNubXBfZnJlZV9wZHUKLQlzbm1wX2ZyZWVfdmFyCi0Jc25tcF9zZWxlY3RfaW5mbwotCXNubXBfdGltZW91dAotCXNubXBfc2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2xvZ2dpbmcKLQlzbm1wX2Rpc2FibGVfc3RkZXJybG9nCi0Jc25tcF9lbmFibGVfc3lzbG9nCi0Jc25tcF9lbmFibGVfc3RkZXJybG9nCi0Jc25tcF9lbmFibGVfZmlsZWxvZwotCXNubXBfbG9nCi0Jc25tcF9sb2dfcGVycm9yCi0Jc25tcF9wZXJyb3IKLQlzbm1wX3Nlc3NfcGVycm9yCi0Jc25tcF9hZGRfbnVsbF92YXIKLQlzbm1wX3BkdV9jcmVhdGUKLQlzbm1wX2ZpeF9wZHUKLQlzbm1wX2Nsb25lX3BkdQotCXNubXBfY2xvbmVfbWVtCi0Jc25tcF9zZXRfdmFyX3ZhbHVlCi0Jc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlCi0Jc25tcF9zZXRfdmFyX29iamlkCi0Jc25tcF9yZXBsYWNlX3Zhcl90eXBlcwotCXNubXBfYXBpX2VycnN0cmluZwotCXNubXBfZXJyc3RyaW5nCi0Jc25tcF9zZXRfZGV0YWlsCi0Jc25tcF9zeW5jaF9zZXR1cAotCXNubXBfc3luY2hfcmVzcG9uc2UKLQlzbm1wX2R1cGxpY2F0ZV9vYmppZAotCXNubXBfZ2V0X25leHRfc2Vzc2lkCi0Jc25tcF9nZXRfbmV4dF90cmFuc2lkCi0Jc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljCi0Jc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5Ci0Jc25tcF9nZXRfc3RhdGlzdGljCi0JaW5pdF9zbm1wCi0Jc25tcF9zaHV0ZG93bgotCXNubXBfYWRkX3ZhcgotCXJ1bl9hbGFybXMKLQlzbm1wX2Nsb25lX3ZhcgotCXByaW50X29pZF9yZXBvcnQKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zdWZmaXgKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zeW1ib2xpYwotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX29pZAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX2xhYmVsZWRvaWQKLTsJYXNjaWlfdG9fYmluYXJ5Ci07CWhleF90b19iaW5hcnkKLQlnZXRfdGNfZGVzY3JpcHRvcgotCWdldF90Y19kZXNjcmlwdGlvbgotCXNldGVudgotCWZpbmRfbW9kdWxlCi0Jc25tcF9hc3luY19zZW5kCi0Jc25tcF9lcnJvcgotCXNubXBfc2Vzc19pbml0Ci0Jc25tcF9zZXNzX29wZW4KLQlzbm1wX3Nlc3Nfc2Vzc2lvbgotCXNubXBfc2Vzc19zZW5kCi0Jc25tcF9zZXNzX2FzeW5jX3NlbmQKLQlzbm1wX3Nlc3Nfc2VsZWN0X2luZm8KLQlzbm1wX3Nlc3NfcmVhZAotCXNubXBfc2Vzc190aW1lb3V0Ci0Jc25tcF9zZXNzX2Nsb3NlCi0Jc25tcF9zZXNzX2Vycm9yCi0Jc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZQotCXJlYWRfY29uZmlnX3JlYWRfZGF0YQotCXJlYWRfY29uZmlnX3N0b3JlX2RhdGEKLQlyZWFkX2NvbmZpZ19wcmludF91c2FnZQotCXJlYWRfY29uZmlnX3dpdGhfdHlwZQotCXJlYWRfY29uZmlnX3N0b3JlCi0JcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcKLQlyZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZwotCXJlYWRfY29uZmlnX3JlYWRfbWVtb3J5Ci0JcmVhZF9jb25maWdfcmVhZF9vYmppZAotCWZyZWVfY29uZmlnCi0Jc2tpcF93aGl0ZQotCXNraXBfbm90X3doaXRlCi0JcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCi0JdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKLQlyZWFkX2FwcF9jb25maWdfc3RvcmUKLQl1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCi0Jc25tcF9zZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fZGVidWdnaW5nCi0JZGVidWdfaW5kZW50Ci0JZGVidWdfaW5kZW50X2FkZAotCWRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQKLQlkZWJ1Z21zZwotCWRlYnVnbXNnX2hleAotCWRlYnVnbXNnX2hleHRsaQotCWRlYnVnbXNndG9rZW4KLQlkZWJ1Z21zZ192YXIKLQlkZWJ1Z21zZ19vaWRyYW5nZQotCWRlYnVnX3JlZ2lzdGVyX3Rva2VucwotCWdlbmVyYXRlX0t1Ci0JdXB0aW1lX3N0cmluZwotCW5ldHNubXBfbWVtZHVwCi0JZHVtcF9jaHVuawotCWluaXRfY2FsbGJhY2tzCi0Jc25tcF9yZWdpc3Rlcl9jYWxsYmFjawotCXNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjawotCXNubXBfY2FsbF9jYWxsYmFja3MKLQlzbm1wX2NvdW50X2NhbGxiYWNrcwotCXNubXBfY2FsbGJhY2tfYXZhaWxhYmxlCi0Jc3RybmNhc2VjbXAKLQlzdHJjYXNlY21wCi0JaW5pdF9zbm1wX2FsYXJtCi0JbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIKLQluZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZwotCW5ldHNubXBfZHNfc2V0X2Jvb2xlYW4KLQluZXRzbm1wX2RzX2dldF9ib29sZWFuCi0JbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbgotCW5ldHNubXBfZHNfc2V0X2ludAotCW5ldHNubXBfZHNfZ2V0X2ludAotCW5ldHNubXBfZHNfc2V0X3N0cmluZwotCW5ldHNubXBfZHNfZ2V0X3N0cmluZwotCXNubXBfcGR1X2FkZF92YXJpYWJsZQotCXNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUKLQllbmNvZGVfa2V5Y2hhbmdlCi0JZGVjb2RlX2tleWNoYW5nZQotCWdlbmVyYXRlX2t1bAotCXNjX2luaXQKLQlzZXR1cF9lbmdpbmVJRAotCWJpbmFyeV90b19oZXgKLQloZXhfdG9fYmluYXJ5MgotCXNubXBfcmVzX2luaXQKLQlzbm1wX3Jlc19sb2NrCi0Jc25tcF9yZXNfdW5sb2NrCi0Jc25tcF9yZXNfZGVzdHJveV9tdXRleAotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX2luX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9pbl90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfb3V0X3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9vdXRfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX29pZF9jb21wYXJlCi0Jc25tcF9vaWR0cmVlX2NvbXBhcmUKLQluZXRzbm1wX29pZF9lcXVhbHMKLQl1c21fZnJlZV91c2VyCi0JdXNtX2FkZF91c2VyCi0JdXNtX2NyZWF0ZV9pbml0aWFsX3VzZXIKLQl1c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIKLQl1c21fc2F2ZV91c2VycwotCXVzbV9wYXJzZV9jb25maWdfdXNtVXNlcgotCXVzbV9nZXRfdXNlcgotCXVzbV9nZXRfdXNlckxpc3QKLQl1c21fY2xvbmVGcm9tX3VzZXIKLQl1c21fY3JlYXRlX3VzZXIKLQl1c21fcmVtb3ZlX3VzZXIKLQl1c21fc2V0X3VzZXJfcGFzc3dvcmQKLQlyZWFkX3ByZW1pYl9jb25maWdzCi0JaW5pdF9zbm1wdjMKLQlzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUKLQlzbm1wdjNfbG9jYWxfc25tcEVuZ2luZUJvb3RzCi0Jc25tcHYzX2dldF9lbmdpbmVJRAotCXNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRAotCWdldF9kZWZhdWx0X2F1dGh0eXBlCi0JZ2V0X2RlZmF1bHRfcHJpdnR5cGUKLQlyZWdpc3Rlcl9jb25maWdfaGFuZGxlcgotCXJlYWRfY29uZmlncwotCWRlYnVnbXNnX29pZAotCWNvbmZpZ19wZXJyb3IKLQljb25maWdfcHdhcm4KLQljb3B5X3dvcmQKLQljb3B5X253b3JkCi0JY2FsY3VsYXRlX3RpbWVfZGlmZgotCXZhY21faXNfY29uZmlndXJlZAotCWdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeQotCXZhY21fY3JlYXRlR3JvdXBFbnRyeQotCXZhY21fZGVzdHJveUdyb3VwRW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxHcm91cEVudHJpZXMKLQl2YWNtX2NyZWF0ZUFjY2Vzc0VudHJ5Ci0JdmFjbV9kZXN0cm95QWNjZXNzRW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxBY2Nlc3NFbnRyaWVzCi0JdmFjbV9jcmVhdGVWaWV3RW50cnkKLQl2YWNtX2Rlc3Ryb3lWaWV3RW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxWaWV3RW50cmllcwotCXZhY21fZ2V0Vmlld0VudHJ5Ci0JdmFjbV9nZXRHcm91cEVudHJ5Ci0JdmFjbV9nZXRBY2Nlc3NFbnRyeQotCXZhY21fcGFyc2VfY29uZmlnX2FjY2VzcwotCXZhY21fcGFyc2VfY29uZmlnX2dyb3VwCi0JdmFjbV9wYXJzZV9jb25maWdfdmlldwotCXZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzCi0Jc3RvcmVfdmFjbQotCXZhY21fc2Nhbkdyb3VwSW5pdAotCXZhY21fc2Nhbkdyb3VwTmV4dAotCXZhY21fc2NhbkFjY2Vzc0luaXQKLQl2YWNtX3NjYW5BY2Nlc3NOZXh0Ci0JdmFjbV9zY2FuVmlld0luaXQKLQl2YWNtX3NjYW5WaWV3TmV4dAotCXZhY21fY2hlY2tTdWJ0cmVlCi0Jc25tcF9zeW5jaF9yZXNwb25zZV9jYgotCXNubXBfY2xvbmVfdmFyYmluZAotCXNubXBfZnJlZV92YXJiaW5kCi0Jc25tcF9nZXRfZHVtcF9wYWNrZXQKLQlzbm1wX2dldF9xdWlja19wcmludAotCXNubXBfZ2V0X3JhbmRvbV9hY2Nlc3MKLQlzbm1wX2dldF9zdWZmaXhfb25seQotCXNubXBfc2V0X2R1bXBfcGFja2V0Ci0Jc25tcF9zZXRfZnVsbF9vYmppZAotCXNubXBfc2V0X3F1aWNrX3ByaW50Ci0Jc25tcF9zZXRfcmFuZG9tX2FjY2VzcwotCXNubXBfc2V0X3N1ZmZpeF9vbmx5Ci0Jc25tcF9jbGVhbl9wZXJzaXN0ZW50Ci0Jc25tcF9zYXZlX3BlcnNpc3RlbnQKLQl1c21fc3RvcmVfdXNlcnMKLQlzbm1wX3N0b3JlCi0JYXRpbWVfZGlmZgotCXVhdGltZV9oZGlmZgotCWF0aW1lX25ld01hcmtlcgotCWF0aW1lX3NldE1hcmtlcgotCWF0aW1lX3JlYWR5Ci0Jc25tcF9zdHJjYXQKLQlmcHJpbnRfdmFyaWFibGUKLQlzcHJpbnRfcmVhbGxvY19vYmppZAotCXNwcmludF9yZWFsbG9jX2FzY2lpc3RyaW5nCi0Jc3ByaW50X3JlYWxsb2NfdmFyaWFibGUKLQlzcHJpbnRfcmVhbGxvY192YWx1ZQotCXNwcmludF9yZWFsbG9jX2J5X3R5cGUKLQlzbm1wX3JlYWxsb2MKLSAgICAgIG5ldHNubXBfY29uZmlnCi0gICAgICBuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcgotICAgICAgc25tcF9oZXhfdG9fYmluYXJ5Ci0gICAgICBzbm1wdjNfb3B0aW9ucwotICAgICAgbmV0c25tcF9nZXRfdmVyc2lvbgotICAgICAgc25tcF9zZXNzX3RyYW5zcG9ydAotICAgICAgc25tcF9zZXNzX3BvaW50ZXIKLSAgICAgIHNubXBfZGVjaW1hbF90b19iaW5hcnkKLQlzbm1wX2FsYXJtX3JlZ2lzdGVyCi0Jc25tcF9hbGFybV91bnJlZ2lzdGVyCi0gICAgICBkYXRlX25fdGltZQotCXNubXBfZGlzYWJsZV9sb2cKLQlzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQKLQluZXRzbm1wX3Nlc3NfbG9nX2Vycm9yCi0Jc25tcF9hZGQKLQloYW5kbGVfbG9uZ19vcHQKLQluZXRzbm1wX3RyYW5zcG9ydF9mcmVlCi0JbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydAotCW5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfb2lkCi0JbmV0c25tcF90ZG9tYWluX3N1cHBvcnQKLQluZXRzbm1wVURQRG9tYWluCi0JbmV0c25tcF9zbm1wVENQRG9tYWluCi0JbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0Ci0JbmV0c25tcF9hZGRfbGlzdF9kYXRhCi0JbmV0c25tcF9nZXRfbGlzdF9kYXRhCi0JbmV0c25tcF9mcmVlX2xpc3RfZGF0YQotCW5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhCi0JbmV0c25tcF9vaWRfc3Rhc2hfYWRkX2RhdGEKLQluZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YQotCW5ldHNubXBfb2lkX2ZpbmRfcHJlZml4Ci0JbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0Ci0JbmV0c25tcF9jb250YWluZXJfbnVsbF9pbml0Ci0JbmV0c25tcF9jb250YWluZXJfc3NsbF9pbml0Ci0JbmV0c25tcF9zdHJkdXBfYW5kX251bGwKLQlidWlsZF9vaWQKLQlidWlsZF9vaWRfbm9hbGxvYwotCXBhcnNlX29uZV9vaWRfaW5kZXgKLQlwYXJzZV9vaWRfaW5kZXhlcwotCWNvdW50X3ZhcmJpbmRzCi0JY291bnRfdmFyYmluZHNfb2ZfdHlwZQotCXNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QKLQlzZV9maW5kX3ZhbHVlX2luX3NsaXN0Ci0Jc2VfYWRkX3BhaXJfdG9fc2xpc3QKLQlzbm1wX3BhcnNlX2FyZ3MKLQlzbm1wX3BhcnNlX2FyZ3NfZGVzY3JpcHRpb25zCi0Jc25tcF9wYXJzZV9hcmdzX3VzYWdlCi0JbmV0c25tcF9jYWxsYmFja19vcGVuCi0JbmV0c25tcF91ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3RlcgotCW5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5Ci0JbmV0c25tcF91ZHBfZ2V0U2VjTmFtZQotCWZpbmRfc2VjX21vZAotCXN0cmxjYXQKLQlzdHJsY3B5Ci0JZ2V0b3B0Ci0Jb3B0YXJnICAgICAgICAgICAgICAgICAgREFUQQotCW9wdGVyciAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRpbmQgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0b3B0ICAgICAgICAgICAgICAgICAgREFUQQotCW9wdHJlc2V0ICAgICAgICAgICAgICAgIERBVEEKLQl1c21Ob0F1dGhQcm90b2NvbCAgICAgICBEQVRBCi0JdXNtSE1BQ01ENUF1dGhQcm90b2NvbCAgREFUQQotCXVzbUhNQUNTSEExQXV0aFByb3RvY29sIERBVEEKLQl1c21Ob1ByaXZQcm90b2NvbCAgICAgICBEQVRBCi0JdXNtREVTUHJpdlByb3RvY29sICAgICAgREFUQQotCXVzbUFFU1ByaXZQcm90b2NvbCAgICAgIERBVEEKLQlzbnByaW50X2JpdHN0cmluZwotCXNucHJpbnRfdmFsdWUKLQlzbnByaW50X29iamlkCi0Jc25wcmludF92YXJpYWJsZQotCXNubXBfc3luY2hfcmVzZXQKLQlzbm1wX2xvZ19vcHRpb25zCi0Jc25tcF9sb2dfc3lzbG9nbmFtZQotCW5ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdAotCW5ldHNubXBfY2xlYXJfdGRvbWFpbl9saXN0Ci0JY2xlYXJfc2VjX21vZAotCWNsZWFyX3NubXBfZW51bQotCWNsZWFyX2NhbGxiYWNrCi0JY2xlYXJfdXNlcl9saXN0Ci0JbmV0c25tcF9kc19nZXRfdm9pZAotCW5ldHNubXBfZHNfc2V0X3ZvaWQKLQluZXRzbm1wX2RzX3NodXRkb3duCi0JbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZAotCW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZQotCW1vZHVsZV9uYW1lCi0JTWliICAgICAgICAgICAgICAgICAgICAgREFUQQotCXRyZWVfaGVhZCAgICAgICAgICAgICAgIERBVEEKLQlzbm1wX2Vycm5vICAgICAgICAgICAgICBEQVRBCi0JbmV0c25tcF9kYWVtb25pemUKLQlzbm1wX2xvZ19vcHRpb25zX3VzYWdlCi0JbmV0c25tcF9jb250YWluZXJfZnJlZV9saXN0Ci0JbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlCi0JbmV0c25tcF9vaWRfc3Rhc2hfZnJlZQotCW5ldHNubXBfZ2V0X2xpc3Rfbm9kZQotCW5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZQotCW5ldHNubXBfcmVtb3ZlX2xvZ2hhbmRsZXIKLQluZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXIKLQlnZXRfbG9naF9oZWFkCi0JZGJnX3Rva2VucwotCWRlYnVnX251bV90b2tlbnMKLQljcmVhdGVfd2lucGlwZV90cmFuc3BvcnQKLQlnZXRfdGVtcF9maWxlX3BhdHRlcm4KLQluZXRzbm1wX3N0cmR1cAotCW5ldHNubXBfY2FsbG9jCi0JbmV0c25tcF9tYWxsb2MKLQluZXRzbm1wX3JlYWxsb2MKLQluZXRzbm1wX2ZyZWUKLQluZXRzbm1wX3VkcDZfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3RlcgotCWluaXRfdXNtX2NvbmYKLQlzdHJ0b2tfcgotICAgICAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzCi0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleAotICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kCi0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZQotICAgICAgICBuZXRzbm1wX29pZF9jb21wYXJlX2xsCi0gICAgICAgIG5ldHNubXBfbmNvbXBhcmVfbmV0c25tcF9pbmRleAotICAgICAgICBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleAotICAgICAgICBmaW5kX3ZhcmJpbmRfaW5fbGlzdAotICAgICAgICBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cwotICAgICAgICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8KLSAgICAgICAgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQKLSAgICAgICAgc2tpcF90b2tlbgotICAgICAgICBwYXJzZV9zZWNMZXZlbF9jb25mCi0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbgotICAgICAgICBuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24KLSAgICAgICAgbmV0c25tcF9kc19wYXJzZV9ib29sZWFuCi0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbgotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NlcnZpY2VfaGFuZGxlcnMKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIKLSAgICAgICAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsCi0gICAgICAgIHNubXBfYWRkX2Z1bGwKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQKLSAgICAgICAgc25tcF9vaWRzdWJ0cmVlX2NvbXBhcmUKLSAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZwotICAgICAgICBzbm1wX3N0ZGVycmxvZ19zdGF0dXMKLSAgICAgICAgc2FfZmluZF9zcGVjaWZpYwotICAgICAgICBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbgotICAgICAgICBjaGVja19zdG9yYWdlX3RyYW5zaXRpb24KLSAgICAgICAgbmV0c25tcF92aWV3X2dldAotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c192YWx1ZQotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQotICAgICAgICByZWFkX2NvbmZpZ19zYXZlX29iamlkCi0gICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX21pYmNoaWxkb2lkCi0gICAgICAgIG5ldHNubXBfcXVlcnlfd2FsawotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldG5leHQKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXQKLQluZXRzbm1wX21rdGVtcAotICAgICAgICBkZWJ1Z21zZ19zdWJvaWQKLTtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkKLTtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZQotO0lQdjYgICAgICAgIG5ldHNubXBfVENQSVB2NkRvbWFpbgotO0lQdjYgICAgICAgIG5ldHNubXBfVURQSVB2NkRvbWFpbgotCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AgYi93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AKaW5kZXggZWNiOWQ1ZS4uMTJjMDQxNCAxMDA2NDQKLS0tIGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwCisrKyBiL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcApAQCAtMTA0LDcgKzEwNCw3IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxjbXVfY29tcGF0LmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxjbG9zZWRpci5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMTM2LDEwICsxMzYsMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGdldG9wdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0dGltZW9mZGF5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxpbmV0X250b3AuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE1Niw2ICsxNjQsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGxhcmdlX2ZkX3NldC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcbGNkX3RpbWUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE3Niw2ICsxODgsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXG9wZW5kaXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHBhcnNlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xODQsNiArMjAwLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxyZWFkZGlyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzY2FwaS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjMyLDYgKzI1MiwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3RyYW5zcG9ydC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjQwLDI3ICsyNjQsNTEgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQWxpYXNEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBDYWxsYmFja0RvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQ2FsbGJhY2tEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjRCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQSVB2NkRvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NkJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFNvY2tldEJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBJUHY2RG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUElQdjZEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUERvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjZEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTI4MCw2ICszMjgsMTQgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b3VsbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc3lzdGVtLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yODgsMTAgKzM0NCw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPS4uXC4uXHNubXBsaWJcdWNkX2NvbXBhdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzAyLDEwICszNTQsNiBAQAogDQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2lucGlwZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCiANCkBAIC0zMjQsMTAgKzM3Miw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxjbXVfY29tcGF0LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcY29udGFpbmVyLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzQwLDYgKzM4NCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZmRfZXZlbnRfbWFuYWdlci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGdldG9wdC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTM1Miw2ICs0MDAsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGxhcmdlX2ZkX3NldC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGxjZF90aW1lLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNDQ0LDYgKzQ5NiwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3RydG9rX3IuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzeXN0ZW0uaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC00NTIsMTAgKzUwOCw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzdHJ0b2tfci5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHVjZF9jb21wYXQuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC00NjMsNSArNTE1LDkgQEAKIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHZhY20uaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGxpYnNubXAuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZiBiL3dpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNDczZDkuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTsgICAgICAgQCgjKWxpYnVjZG1pYnMuZGVmICAgIDEuMCAxMC8yNi85NyAoZ21hcnpvdEBiYXluZXR3b3Jrcy5jb20pCi0KLURFU0NSSVBUSU9OICAgICAnVUNEIFNOTVAgTUlCUyBMaWJyYXJ5JwotO0NPREUKLSAgICAgICAgICAgIFNIQVJFRCBSRUFEIEVYRUNVVEUKLTtEQVRBICAgICAgICAgICAgU0hBUkVEIFJFQUQgV1JJVEUKLUVYUE9SVFMKLQlzZW5kX2Vhc3lfdHJhcAotCWluaXRfbWFzdGVyX2FnZW50Ci0JaW5pdF9taWJfbW9kdWxlcwotCWluaXRfYWdlbnQKLQlhcmd2cmVzdGFydG5hbWUKLQlhcmd2cmVzdGFydAotCWFyZ3ZyZXN0YXJ0cAotCXVwZGF0ZV9jb25maWcKLQlnZXRfdGFyZ2V0X3Nlc3Npb25zCi0KZGlmZiAtLWdpdCBhL3dpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCBiL3dpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaAppbmRleCAzYmZkZjZhLi45Y2I3NTBjIDEwMDY0NAotLS0gYS93aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgKKysrIGIvd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAibWliZ3JvdXAvUm1vbi5oIgogI2VuZGlmCiAKLSNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTUlCX01PRFVMRQotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC1taWIuaCIKKyNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50LmgiCiAjZW5kaWYKIAogI2lmZGVmIFVTSU5HX1NNVVhfTU9EVUxFCkBAIC04OCw4ICs4OCw5IEBACiAjaW5jbHVkZSAibWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCIKICNpbmNsdWRlICJtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCIKICNpbmNsdWRlICJtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5oIgpAQCAtOTksNiArMTAwLDcgQEAKICNpbmNsdWRlICJtaWJncm91cC9hZ2VudC9uc0RlYnVnLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJtaWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuaCIKIAogI2lmZGVmIFVTSU5HX0hPU1RfTU9EVUxFCkBAIC0xMjUsMTUgKzEyNywyMyBAQAogI2luY2x1ZGUgIm1pYmdyb3VwL1Jtb24vZXZlbnQuaCIKICNlbmRpZgogCi0jaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01JQl9NT0RVTEUKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgiCisjaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRQorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCIKICNlbmRpZgogCiAjaWZkZWYgVVNJTkdfU01VWF9NT0RVTEUKZGlmZiAtLWdpdCBhL3dpbjMyL21pYl9tb2R1bGVfaW5pdHMuaCBiL3dpbjMyL21pYl9tb2R1bGVfaW5pdHMuaAppbmRleCBmZDBhN2IyLi5mNzhkODkzIDEwMDY0NAotLS0gYS93aW4zMi9taWJfbW9kdWxlX2luaXRzLmgKKysrIGIvd2luMzIvbWliX21vZHVsZV9pbml0cy5oCkBAIC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIF9NU0NfVkVSCiAgIGlmIChzaG91bGRfaW5pdCgiZGlzayIpKSBpbml0X2Rpc2soKTsKICNlbmRpZgorI2lmZGVmIFVTSU5HX1VDRF9TTk1QX0RMTU9EX01PRFVMRQorICBpZiAoc2hvdWxkX2luaXQoImRsbW9kIikpIGluaXRfZGxtb2QoKTsKKyNlbmRpZgogICBpZiAoc2hvdWxkX2luaXQoImxvYWRhdmUiKSkgaW5pdF9sb2FkYXZlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgiZXh0ZW5zaWJsZSIpKSBpbml0X2V4dGVuc2libGUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJleHRlbmQiKSkgaW5pdF9leHRlbmQoKTsKQEAgLTc4LDE3ICs4MSwyMiBAQAogCiAgIGlmIChzaG91bGRfaW5pdCgib3ZlcnJpZGUiKSkgaW5pdF9vdmVycmlkZSgpOwogCi0jaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01JQl9NT0RVTEUKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4KKyNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFCisgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlciIpKSBpbml0X210ZVRyaWdnZXIoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyQ29uZiIpKSBpbml0X210ZVRyaWdnZXJDb25mKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlclRhYmxlIikpIGluaXRfbXRlVHJpZ2dlclRhYmxlKCk7Ci0jZW5kaWYKICAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyRGVsdGFUYWJsZSIpKSBpbml0X210ZVRyaWdnZXJEZWx0YVRhYmxlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIikpIGluaXRfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlckJvb2xlYW5UYWJsZSIpKSBpbml0X210ZVRyaWdnZXJCb29sZWFuVGFibGUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUiKSkgaW5pdF9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVPYmplY3RzIikpIGluaXRfbXRlT2JqZWN0cygpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZU9iamVjdHNDb25mIikpIGluaXRfbXRlT2JqZWN0c0NvbmYoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVPYmplY3RzVGFibGUiKSkgaW5pdF9tdGVPYmplY3RzVGFibGUoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVFdmVudCIpKSBpbml0X210ZUV2ZW50KCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlRXZlbnRDb25mIikpIGluaXRfbXRlRXZlbnRDb25mKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlRXZlbnRUYWJsZSIpKSBpbml0X210ZUV2ZW50VGFibGUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIikpIGluaXRfbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSgpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZUV2ZW50U2V0VGFibGUiKSkgaW5pdF9tdGVFdmVudFNldFRhYmxlKCk7CiAjZW5kaWYKIAogICBpZiAoc2hvdWxkX2luaXQoInZhY21fY29udGV4dCIpKSBpbml0X3ZhY21fY29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oIGIvd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oCmluZGV4IDA0MzIyNjUuLmNhZWRmNjAgMTAwNjQ0Ci0tLSBhL3dpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaAorKysgYi93aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgKQEAgLTEsNiArMSwxNSBAQAogLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8KICAgaWYgKHNob3VsZF9pbml0KCJwcm94eSIpKSBzaHV0ZG93bl9wcm94eSgpOworICBpZiAoc2hvdWxkX2luaXQoInNubXBOb3RpZnlGaWx0ZXJUYWJsZSIpKSBzaHV0ZG93bl9zbm1wTm90aWZ5RmlsdGVyVGFibGUoKTsKICAKICNpZmRlZiBVU0lOR19VQ0RfU05NUF9NT0RVTEUKICAgaWYgKHNob3VsZF9pbml0KCJwYXNzX3BlcnNpc3QiKSkgc2h1dGRvd25fcGFzc19wZXJzaXN0KCk7CiAjZW5kaWYKKworI2lmZGVmIFVTSU5HX1VDRF9TTk1QX0RMTU9EX01PRFVMRQorICBpZiAoc2hvdWxkX2luaXQoImRsbW9kIikpIHNodXRkb3duX2RsbW9kKCk7CisjZW5kaWYKKworI2lmZGVmIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUKKyAgIGlmIChzaG91bGRfaW5pdCgid2luRXh0RExMIikpIHNodXRkb3duX3dpbkV4dERMTCgpOworI2VuZGlmCmRpZmYgLS1naXQgYS93aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oIGIvd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAppbmRleCA5NTY2MmFkLi40OTc4ZGM4IDEwMDY0NAotLS0gYS93aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisrKyBiL3dpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE1LDExICsxNSwxMiBAQAogLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBub3RpZmljYXRpb24gbW9kdWxlIGZpbGVzLiAgKi8KICNkZWZpbmUgVVNJTkdfTk9USUZJQ0FUSU9OX01PRFVMRSAxCiAgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudCBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFIDEKKyAKIC8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgbm90aWZpY2F0aW9uLWxvZy1taWIgbW9kdWxlIGZpbGVzLiAqLwogI2lmZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLCiAjZGVmaW5lIFVTSU5HX05PVElGSUNBVElPTl9MT0dfTUlCX05PVElGSUNBVElPTl9MT0dfTU9EVUxFIDEKLSNlbHNlCi0vKiAjdW5kZWYgVVNJTkdfTk9USUZJQ0FUSU9OX0xPR19NSUJfTk9USUZJQ0FUSU9OX0xPR19NT0RVTEUgKi8KICNlbmRpZgogCiAvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIHRhcmdldCBtb2R1bGUgZmlsZXMuICAqLwpAQCAtMjQ1LDMzICsyNDYsNTcgQEAKICNlbmRpZiAvKiBVU0lOR19STU9OX01PRFVMRSAqLwogCiAKLSNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTUlCX01PRFVMRSAKKyNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFIAogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlVHJpZ2dlclRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVUUklHR0VSVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVNDQUxBUlNfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVUUklHR0VSREVMVEFUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlciBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUl9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVUUklHR0VSRVhJU1RFTkNFVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUlRBQkxFX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVUUklHR0VSQk9PTEVBTlRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUkRFTFRBVEFCTEVfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFVFJJR0dFUlRIUkVTSE9MRFRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJFWElTVEVOQ0VUQUJMRV9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlT2JqZWN0c1RhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVPQkpFQ1RTVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJCT09MRUFOVEFCTEVfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZUV2ZW50VGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URUVWRU5UVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUlRIUkVTSE9MRFRBQkxFX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVFVkVOVE5PVElGSUNBVElPTlRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZiBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUkNPTkZfTU9EVUxFIDEKICAKLSNlbmRpZiAvKiBVU0lOR19ESVNNQU5fRVZFTlRfTUlCX01PRFVMRSAqLworLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlRXZlbnQgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URUVWRU5UX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVFVkVOVFRBQkxFX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVFVkVOVFNFVFRBQkxFX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVFVkVOVE5PVElGSUNBVElPTlRBQkxFX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVFdmVudENvbmYgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URUVWRU5UQ09ORl9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlT2JqZWN0cyBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFT0JKRUNUU19NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVPQkpFQ1RTVEFCTEVfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVPQkpFQ1RTQ09ORl9NT0RVTEUgMQorIAorI2VuZGlmIC8qIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUgKi8KIAogI2lmZGVmIFVTSU5HX1NNVVhfTU9EVUxFCiAgCmRpZmYgLS1naXQgYS93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBiL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCmluZGV4IGE2ODI2YjMuLjE2MDg1NjMgMTAwNjQ0Ci0tLSBhL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisrKyBiL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCkBAIC01LDMxICs1LDQ1IEBACiAjZGVmaW5lIE5FVF9TTk1QX0NPTkZJR19ICiAKIC8qIF9NU0NfVkVSIHZhbHVlcwotICAgMTYwMCA9IDEwLjAgKDIwMTApCi0gICAxNTAwID0gIDkuMCAoMjAwOCkKLSAgIDE0MDAgPSAgOC4wICgyMDA1KQotICAgMTMxMCA9ICA3LjEgKDIwMDMpCi0gICAxMzAwID0gIDcuMCAoMjAwMikKLSAgIDEyMDAgPSAgNi4wCisgICAxODAwID0gTVNWQysrIDEyLjAgKFZpc3VhbCBTdHVkaW8gMjAxMykKKyAgIDE3MDAgPSBNU1ZDKysgMTEuMCAoVmlzdWFsIFN0dWRpbyAyMDEyKQorICAgMTYwMCA9IE1TVkMrKyAxMC4wIChWaXN1YWwgU3R1ZGlvIDIwMTApCisgICAxNTAwID0gTVNWQysrICA5LjAgKFZpc3VhbCBTdHVkaW8gMjAwOCkKKyAgIDE0MDAgPSBNU1ZDKysgIDguMCAoVmlzdWFsIFN0dWRpbyAyMDA1KQorICAgMTMxMCA9IE1TVkMrKyAgNy4xIChWaXN1YWwgU3R1ZGlvIDIwMDMpCisgICAxMzAwID0gTVNWQysrICA3LjAgKFZpc3VhbCBTdHVkaW8gMjAwMikKKyAgIDEyMDAgPSBNU1ZDKysgIDYuMAogKi8KIAorI2lmZGVmIF9NU0NfVkVSCisvKiBEaXNhYmxlIHdhcm5pbmcgNDAxODogc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoLiAqLworI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlOiA0MDE4KQorI2VuZGlmCisKKy8qIEF1dG9tYXRpY2FsbHkgc2V0IGJ5IFdpbmRvd3MgcGVybCBDb25maWd1cmUgc2NyaXB0LgorICogV2hlbiBjb21waWxpbmcgd2l0aCB0aGUgTVNWQyB3b3Jrc3BhY2UsIHRoaXMgbXVzdCBiZSBzZXQgbWFudWFsbHkuCisgKiBTZWUgdGhlIFBBQ0tBR0VfVkVSU0lPTiB2YXJpYWJsZSBpbiBVbml4IC9jb25maWd1cmUgc2NyaXB0CisqLworI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICJ1bmtub3duIgorI2VuZGlmCisKIC8qIERlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyBpZiB5b3UgaGF2ZToKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIE1TVkMgNi4wIGFuZCB0aGUgUGxhdGZvcm0gU0RLIChQU0RLKQogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uTmV0IDIwMDIKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLk5ldCAyMDAzCi0gKiBDeWd3aW4KLSAqIE1pbkdXIAogICovCi0vKiAjdW5kZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgKi8KKyNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgMQogCi0vKiBPbmx5IHVzZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgMjAwMCBTUDQgb3IgbGF0ZXIuCi0gKiBXZSBuZWVkIGF0IGxlYXN0IFNQMSBmb3Igc29tZSBJUHY2IGRlZmluZXMgaW4gd3MyaXBkZWYuaC4KLSAqIE9ubHkgZGVmaW5lIF9XSU4zMl9XSU5OVCB3aGVuIG5vdCBiZWluZyBjb21waWxlZCB3aXRoIE1TVkMgNiB3aXRob3V0IFBTREsKLSAqIGJlY2F1c2UgdGhlcmUgaXMgYSBidWcgaW4gdGhlIE1TVkMgNiBoZWFkZXIgPHdpbnNvY2suaD4gdGhhdCBjYXVzZXMKLSAqIGluY2x1c2lvbiBvZiA8d2luc29jazIuaD4uCisvKiBEZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiB0byBlbmFibGUgSVB2Ni4gIElQdjYgaXMgb25seSBhdmFpbGFibGUgb24KKyAqIFdpbmRvd3MgWFAgYW5kIGhpZ2hlci4gICovCisvKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNiAqLworCisvKiBPbmx5IHVzZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgMjAwMCBTUDQgb3IgbGF0ZXIuICAKKyAqIFdlIG5lZWQgYXQgbGVhc3QgU1AxIGZvciBzb21lIElQdjYgZGVmaW5lcyBpbiB3czJpcGRlZi5oCiAgKi8KICNpZm5kZWYgX1dJTjMyX1dJTk5UCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAweDUwMSAvKl9XSU4zMl9XSU5OVF9XSU4ySyovCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDYwMCAvKl9XSU4zMl9XSU5OVF9XSU42Ki8KICNlbHNlCiAjaWYgX1dJTjMyX1dJTk5UIDwgMHg1MDEKICNlcnJvciBfV0lOMzJfV0lOTlQgaXMgdG9vIGxvdyAtIGl0IHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgMHg1MDEuCkBAIC0yMjcsMTkgKzI0MSwxNyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc20vcGFnZS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0FTTV9QQUdFX0ggKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9CQ09QWSAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNnZXRuZXh0JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0NHRVRORVhUICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3J0ZGJnLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0NSVERCR19IIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9ESVJFQ1RfSCAqLworI2RlZmluZSBIQVZFX0RJUkVDVF9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9DSE9XTiAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuICAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KIC8qICN1bmRlZiBIQVZFX0RJUkVOVF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCkBAIC0zMTQsMTIgKzMyNiwxNCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1laW5kZXgnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfSUZfTkFNRUlOREVYICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5kZXgnIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfSU5ERVggKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbmV0L21pYjIuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9JTkVUX01JQjJfSCAqLwogCisjaWZkZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aXBobHBhcGkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSVBITFBBUElfSAorI2VuZGlmCisKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KICNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKIApAQCAtMzY1LDkgKzM3OSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLwogLyogI3VuZGVmIEhBVkVfTElCQ1JZUFRPICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGwnIGxpYnJhcnkgKC1sZGwpLiAqLwotLyogI3VuZGVmIEhBVkVfTElCREwgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlZmVuY2UnIGxpYnJhcnkgKC1sZWZlbmNlKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQkVGRU5DRSAqLwogCkBAIC0zNzcsOSArMzg4LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3N0YXQnIGxpYnJhcnkgKC1sa3N0YXQpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCS1NUQVQgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm0nIGxpYnJhcnkgKC1sa3ZtKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQktWTSAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG0nIGxpYnJhcnkgKC1sbSkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJNICovCiAKQEAgLTQwNCw5ICs0MTIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW5zb3JzJyBsaWJyYXJ5ICgtbHNlbnNvcnMpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCU0VOU09SUyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHonIGxpYnJhcnkgKC1seikuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJaICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKIApAQCAtNDE5LDkgKzQyNCw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBscmFuZDQ4JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0xSQU5ENDggKi8KIApAQCAtNDM3LDEyICs0MzksNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUVNQ1BZIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQogCkBAIC01MTIsNiArNTA4LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF9pY21wLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0ggKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2ljbXA2Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JQ01QNl9IICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF92YXIuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9IICovCiAKQEAgLTY4Myw5ICs2ODIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUQVRWRlMgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KICNpZmRlZiBfX01JTkdXMzJfXwogI2RlZmluZSBIQVZFX1NURElOVF9IIDEKQEAgLTcwMCw5ICs2OTYsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlc3RyJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUUkNBU0VTVFIgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjaHInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkNIUiAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TVFJEVVAgMQogCkBAIC04NDYsNiArODM5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9TWVNfVElNRV9IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWViLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FQl9IIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQogCkBAIC05MzksNiArOTM1LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfV0lOU09DS19IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKKworLyogU2V0IGlmIElQX1BLVElORk8gaXMgdXNhYmxlICovCisjZGVmaW5lIEhBVkVfSVBfUEtUSU5GTyAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eHRpLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfWFRJX0ggKi8KIApAQCAtOTQ2LDEzICs5NTEsMTcgQEAKIC8qICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVCAqLwogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfTkFNRQogI2RlZmluZSBQQUNLQUdFX05BTUUgIk5ldC1TTk1QIgorI2VuZGlmCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KIC8qICN1bmRlZiBQQUNLQUdFX1NUUklORyAqLwogCiAvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIm5ldC1zbm1wIgorI2VuZGlmCiAKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAvKiAjdW5kZWYgUEFDS0FHRV9WRVJTSU9OICovCkBAIC05NjYsNiArOTc1LDkgQEAKIC8qIFRoZSBzaXplIG9mIGEgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9MT05HIDQKIAorLyogVGhlIHNpemUgb2YgYSBgaW50bWF4X3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCA4CisKIC8qIFRoZSBzaXplIG9mIGEgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgogCkBAIC05ODEsNyArOTkzLDcgQEAKICNkZWZpbmUgU1REQ19IRUFERVJTIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisvKiAjdW5kZWYgVElNRV9XSVRIX1NZU19USU1FICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKICAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwpAQCAtMTAzMCw5NiArMTA0MiwxMDIgQEAKIC8qICN1bmRlZiBSVEVOVFJZXzRfNCAqLwogCiAvKiBEb2VzIHN0cnVjdCBzaWdhY3Rpb24gaGF2ZSBhIHNhX3NpZ2FjdGlvbiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU0lHQUNUSU9OX0hBU19TQV9TSUdBQ1RJT04gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OICovCiAKIC8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9sZW4gZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4gKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2ZhbWlseTIgZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgKi8KIAogLyogRG9lcyBzdHJ1Y3QgaW42X2FkZHIgaGF2ZSBhIHM2X3VuLnNhNl9sYWRkIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9JTjZfQUREUl9IQVNfUzZfVU5fU0E2X0xBRERSICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSU42X0FERFJfUzZfVU5fU0E2X0xBRERSICovCisKKy8qIG1zZ2hkci5tc2dfY29udHJvbCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTCAqLworCisvKiBtc2doZHIubXNnX2ZsYWdzICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUyAqLwogCiAvKiBydGVudHJ5IHN0cnVjdHVyZSB0ZXN0cyAqLwogLyogI3VuZGVmIFJURU5UUllfUlRfTkVYVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0ggKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVVNFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9SRUZDTlQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0ggKi8KIAogLyogaWZuZXQgc3RydWN0dXJlIHRlc3RzICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX05PUFJPVE8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PQllURVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lCWVRFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFX0lGU19WQUxVRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1NQRUVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JUURST1BTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9OT1BST1RPICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT0JZVEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSUJZVEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QgKi8KIAogLyogdGNwc3RhdC50Y3BzX3Jjdm1lbWRyb3AgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVENQU1RBVF9IQVNfVENQU19SQ1ZNRU1EUk9QICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVENQU1RBVF9UQ1BTX1JDVk1FTURST1AgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0RJU0NBUkQgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUQkNBU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUQkNBU1QgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19GVUxMU09DSyAqLwogCiAvKiBhcnBoZC5hdF9uZXh0ICovCi0vKiAjdW5kZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVCAqLwogCiAvKiBpZmFkZHIuaWZhX25leHQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZBRERSX0hBU19JRkFfTkVYVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGQUREUl9JRkFfTkVYVCAqLwogCiAvKiBpZm5ldC5pZl9tdHUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX01UVSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX01UVSAqLwogCiAvKiBzd2RldnQuc3dfbmJsa3NlbmFibGVkICovCi0vKiAjdW5kZWYgU1RSVUNUX1NXREVWVF9IQVNfU1dfTkJMS1NFTkFCTEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1dERVZUX1NXX05CTEtTRU5BQkxFRCAqLwogCiAvKiBubGlzdC5uX3ZhbHVlICovCi0vKiAjdW5kZWYgU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSAqLwogCiAvKiBpcHN0YXQgc3RydWN0dXJlIHRlc3RzICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGT1JXQVJEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHVElNRU9VVCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZPUldBUkQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGUkFHICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19ERUxJVkVSRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdEUk9QUEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHVElNRU9VVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTE9DQUxPVVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUFJPVE8gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUk9VVEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09EUk9QUEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRlJBR01FTlRTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19SRUFTU0VNQkxFRCAqLwogCiAvKiB2ZnNzdGF0LmZfZnJzaXplICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRSAqLwogCiAvKiB2ZnNzdGF0LmZfZmlsZXMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUyAqLwogCiAvKiBzdGF0ZnMgaW5vZGUgc3RydWN0dXJlIHRlc3RzKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GRlJFRSAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkFWQUlMICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRklMRVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GRlJFRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZBVkFJTCAqLwogCiAvKiBkZXNfa3Nfc3RydWN0LndlYWtfa2V5ICovCi0vKiAjdW5kZWYgU1RSVUNUX0RFU19LU19TVFJVQ1RfSEFTX1dFQUtfS0VZICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfREVTX0tTX1NUUlVDVF9XRUFLX0tFWSAqLwogCiAvKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLwogLyogI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTCAqLwpAQCAtMTEzMyw5ICsxMTUxLDYgQEAKIC8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KIC8qICN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIgKi8KIAotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotLyogI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQgKi8KLQogLyogTWliLTIgdHJlZSBJbmZvICovCiAvKiBUaGVzZSBhcmUgdGhlIHN5c3RlbSBpbmZvcm1hdGlvbiB2YXJpYWJsZXMuICovCiAKQEAgLTEzNDAsNDQgKzEzNTUsNiBAQAogI2RlZmluZSBIQVZFX1NTSVpFX1QKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyKGEsYikgaW5kZXgoYSxiKQotIyBkZWZpbmUgc3RycmNocihhLGIpIHJpbmRleChhLGIpCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfSU5ERVgKLSNpZmRlZiBIQVZFX1NUUkNIUgotIyBkZWZpbmUgaW5kZXgoYSxiKSBzdHJjaHIoYSxiKQotIyBkZWZpbmUgcmluZGV4KGEsYikgc3RycmNocihhLGIpCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNQ1BZCi0jaWZkZWYgSEFWRV9CQ09QWQotIyBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtbW92ZShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbWNtcCBiY21wCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNTU9WRQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBtZW1tb3ZlIG1lbWNweQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIG5vdHVzZWQgLyogZG9udCBzdGVwIG9uIG90aGVyIGRlZm5zIG9mIGJjb3B5LGJ6ZXJvLCBhbmQgYmNtcCAqLwotI2lmbmRlZiBIQVZFX0JDT1BZCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIGJjb3B5KHMsIGQsIG4pIG1lbWNweSAoKGQpLCAocyksIChuKSkKLSMgZGVmaW5lIGJ6ZXJvKHAsbikgbWVtc2V0KChwKSwoMCksKG4pKQotIyBkZWZpbmUgYmNtcCBtZW1jbXAKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQogLyogSWYgeW91IGhhdmUgb3BlbnNzbCAwLjkuNyBvciBhYm92ZSwgeW91IGxpa2VseSBoYXZlIEFFUyBzdXBwb3J0LiAqLwogLyogI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wgKi8KIApAQCAtMTQ4Niw2ICsxNDYzLDMyIEBACiAgICAgYXZhaWxhYmxlLiAgKi8KIC8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAqLwogCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU0JBU0VfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIEFsaWFzIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgU1NIIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIERUTFMvVURQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMvVENQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3Igc3RkaW4vb3V0IHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBJUHY0QmFzZSB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLworI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4gMQorCiAvKiBkZWZpbmUgdGhpcyBpZiB0aGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBhdmFpbGFibGUgKi8KICNkZWZpbmUgTkVUU05NUF9TRUNNT0RfVVNNIDEKIApAQCAtMTUwMywxNCArMTUwNiwxNiBAQAogCiAvKiBOb3QtdG8tYmUtY29tcGlsZWQgbWFjcm9zIGZvciB1c2UgYnkgY29uZmlndXJlIG9ubHkgKi8KICNkZWZpbmUgY29uZmlnX3JlcXVpcmUoeCkKKyNkZWZpbmUgY29uZmlnX3ZlcnNpb25fcmVxdWlyZSh4KQogI2RlZmluZSBjb25maWdfd2FybmluZyh4KQorI2RlZmluZSBjb25maWdfZXJyb3IoeCkKICNkZWZpbmUgY29uZmlnX2V4Y2x1ZGUoeCkKICNkZWZpbmUgY29uZmlnX2FyY2hfcmVxdWlyZSh4LHkpCiAjZGVmaW5lIGNvbmZpZ19wYXJzZV9kb3RfY29uZih3LHgseSx6KQogI2RlZmluZSBjb25maWdfYWRkX21pYih4KQogI2RlZmluZSBjb25maWdfYmVsb25nc19pbih4KQogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKG1pbmd3MzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZiBkZWZpbmVkIChXSU4zMikKICNkZWZpbmUgRU5WX1NFUEFSQVRPUiAiOyIKICNkZWZpbmUgRU5WX1NFUEFSQVRPUl9DSEFSICc7JwogI2Vsc2UKQEAgLTE1NzcsMjAgKzE1ODIsNTMgQEAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwogI2VuZGlmCiAjaWZuZGVmIEhBVkVfU1RESU5UX0gKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwordHlwZWRlZiBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQxNiB1aW50MTZfdDsKK3R5cGVkZWYgX19pbnQxNiBpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMl90OwotdHlwZWRlZiBsb25nIGludDMyX3Q7Cit0eXBlZGVmIF9faW50MzIgaW50MzJfdDsKIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKIHR5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnRtYXhfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnRtYXhfdDsKICNlbHNlIC8qIEhBVkVfU1RESU5UX0ggKi8KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNlbmRpZiAvKiBIQVZFX1NURElOVF9IICovCiAKKworLyogKHUpaW50cHRyX3Qgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIGZvciBNU1ZDIDYgMzItYml0LiAqLworLyogU0RLIGhhcyBpdCBmb3IgNjQtYml0IGFuZCBuZXdlciBNU1ZDIHNob3VsZCBhbHNvIGhhdmUgaXQgaW4gc3RkZGVmLmguICovCisjaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjaWZkZWYgX01fWDY0Cit0eXBlZGVmIF9faW50NjQgICAgICAgICAgaW50cHRyX3Q7CisjZWxzZQordHlwZWRlZiBpbnQgICAgICAgICAgICAgIGludHB0cl90OworI2VuZGlmCisjZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisjZW5kaWYKKworI2lmbmRlZiBfVUlOVFBUUl9UX0RFRklORUQKKyNpZmRlZiBfTV9YNjQKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50cHRyX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIHVpbnRwdHJfdDsKKyNlbmRpZgorI2RlZmluZSBfVUlOVFBUUl9UX0RFRklORUQKKyNlbmRpZgorCiAjaWZuZGVmIF9fY3BsdXNwbHVzCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ4MDQpIC8vICctJyA6IHVuc2FmZSB1c2Ugb2YgdHlwZSAnYm9vbCcgaW4gb3BlcmF0aW9uCisjZW5kaWYKIGVudW0gewogICAgIG5ldHNubXBfY29tcGlsZV90aW1lX3VpbnRwdHJfdF9zaXplX2NoZWNrCiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NvbXBpbGVfdGltZV91aW50cHRyX3Rfc2l6ZV9jaGVja19zIHsgaW50Oi0hKHNpemVvZih1aW50cHRyX3QpID09IHNpemVvZih2b2lkKikpOyB9KQogfTsKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgogI2VuZGlmCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvc2Vzb2NrZXQgZnVuY3Rpb24uICAqLwpAQCAtMTYxNywxNyArMTY1NSw5IEBACiAvKiBEZWZpbmUgTkVUU05NUF9VU0VfRExMIHdoZW4gYnVpbGRpbmcgb3IgdXNpbmcgbmV0c25tcC5ETEwgKi8KIC8qICN1bmRlZiBORVRTTk1QX1VTRV9ETEwgKi8KIAotI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAotICAjaWZkZWYgTkVUU05NUF9ETEwKLSAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0gICAgI2VuZGlmCi0gICNlbHNlCi0gICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotICAgICNlbmRpZgotICAjZW5kaWYgICAvKiBORVRTTk1QX0RMTCAqLwotI2VuZGlmICAgICAvKiBORVRTTk1QX1VTRV9ETEwgKi8KKyNpZiBkZWZpbmVkKE5FVFNOTVBfRExMKSAmJiAhZGVmaW5lZChORVRTTk1QX1VTRV9ETEwpCisjZXJyb3IgTkVUU05NUF9VU0VfRExMIG11c3QgYmUgZGVmaW5lZCB3aGVuIGJ1aWxkaW5nIGxpYnNubXAgYXMgYSBETEwuCisjZW5kaWYKIAogLyoKICAqIERMTCBkZWNvcmF0aW9uLCBpZiB1c2VkIGF0IGFsbCwgbXVzdCBiZSBjb25zaXN0ZW50LgpAQCAtMTY0MCwyNSArMTY3MCwyMiBAQAogICogIHRoZSBORVRTTk1QX0lNUE9SVCBkZWZpbml0aW9ucyBoYXJtbGVzcy4KICAqLwogCi0KLSAgI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAotICAgICNpZm5kZWYgTkVUU05NUF9UT09MU19DCi0KLSAgLyogd3JhcCBhbGxvYyBmdW5jdGlvbnMgdG8gdXNlIERMTCdzIG1lbW9yeSBoZWFwICovCi0gIC8qIFRoaXMgaXMgbm90IGRvbmUgaW4gdG9vbHMuYywgd2hlcmUgdGhlc2Ugd3JhcHBlcnMgYXJlIGRlZmluZWQgKi8KLQotICAgICAgI2RlZmluZSBzdHJkdXAgICAgbmV0c25tcF9zdHJkdXAKLSAgICAgICNkZWZpbmUgY2FsbG9jICAgIG5ldHNubXBfY2FsbG9jCi0gICAgICAjZGVmaW5lIG1hbGxvYyAgICBuZXRzbm1wX21hbGxvYwotICAgICAgI2RlZmluZSByZWFsbG9jICAgbmV0c25tcF9yZWFsbG9jCi0gICAgICAjZGVmaW5lIGZyZWUgICAgICBuZXRzbm1wX2ZyZWUKKyNpZmRlZiBORVRTTk1QX1VTRV9ETEwKKyAgI2lmZGVmIE5FVFNOTVBfRExMCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQogICAgICNlbmRpZgotICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgI2VuZGlmCisgICNlbmRpZiAgIC8qIE5FVFNOTVBfRExMICovCisjZW5kaWYgICAgIC8qIE5FVFNOTVBfVVNFX0RMTCAqLwogCiAvKiBNU1ZDIE9wZW5TU0wgbGlua2VyIHNldHRpbmdzLiAqLwotI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKG1pbmd3MzIpCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKICMgIGlmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkKLSMgICAgaWZkZWYgTkVUU05NUF9VU0VfRExMCisjICAgIGlmZGVmIF9ETEwKICMgICAgICBpZmRlZiBfREVCVUcKICMgICAgICAgIHByYWdtYSBjb21tZW50KGxpYiwgImxpYmVheTMyTURkLmxpYiIpCiAjICAgICAgZWxzZQpAQCAtMTY3Miw2ICsxNjk5LDcgQEAKICMgICAgICBlbmRpZgogIyAgICBlbmRpZgogIyAgICBwcmFnbWEgY29tbWVudChsaWIsICJnZGkzMi5saWIiKQorIyAgICBwcmFnbWEgY29tbWVudChsaWIsICJ1c2VyMzIubGliIikKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMTY4MSw3ICsxNzA5LDcgQEAKICMgIGRlZmluZSBORVRTTk1QX0lNUE9SVCBleHRlcm4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSkgJiYgIWRlZmluZWQoRE9OVF9VU0VfTkxJU1QpICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKKyNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSkgJiYgIWRlZmluZWQoRE9OVF9VU0VfTkxJU1QpICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKICNkZWZpbmUgTkVUU05NUF9DQU5fVVNFX05MSVNUCiAjZW5kaWYKIApAQCAtMTY4OSw3ICsxNzE3LDYgQEAKICNkZWZpbmUgRE1BTExPQ19GVU5DX0NIRUNLCiAjZW5kaWYKIAotLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KIC8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYICovCiAKIC8qIGRlZmluZSBpZiBhZ2VudHggdHJhbnNwb3J0IGlzIHRvIHVzZSBkb21haW4gc29ja2V0cyBvbmx5ICovCkBAIC0xNzEwLDE5ICsxNzM3LDM1IEBACiAjdW5kZWYgSEFWRV9JTkVUX05UT1AKICN1bmRlZiBIQVZFX0lORVRfUFRPTgogCi0jaWYgTkVUU05NUF9FTkFCTEVfSVBWNgorLyogSVB2NiB0cmFuc3BvcnRzICovCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgogICAjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOIDEKICAgI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTiAxCisgICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQogI2Vsc2UKICAgI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCiAgICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIEFsdGhvdWdoIGlmX25hbWV0b2luZGV4KCkgaXMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgVmlzdGEsIFdpbmRvd3MgU2VydmVyCisgKiAyMDA4IGFuZCBsYXRlciBpbiBpcGhscGFwaS5kbGwsIGRvIG5vdCBsaW5rIHdpdGggaWZfbmFtZXRvaW5kZXgoKSBzdWNoCisgKiB0aGF0IHRoZSBOZXQtU05NUCBleGVjdXRhYmxlIGNhbiBiZSBzdGFydGVkIG9uIGVhcmxpZXIgV2luZG93cyB2ZXJzaW9ucy4KKyAqLworI3VuZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKKwogI2lmbmRlZiBOSV9NQVhIT1NUCiAjZGVmaW5lIE5JX01BWEhPU1QJMTAyNQogI2VuZGlmCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bGwnIGZ1bmN0aW9uLiAqLworI2lmIF9NU0NfVkVSID49IDE4MDAKKyNkZWZpbmUgSEFWRV9TVFJUT1VMTCAxCisjZWxzZQorLyogI3VuZGVmIEhBVkVfU1RSVE9VTEwgKi8KKyNlbmRpZgorCiAvKgogICogTW9kdWxlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgc3RhcnRzIGhlcmUuCiAgKgpAQCAtMTc2Niw5ICsxODA5LDE5IEBACiAjZGVmaW5lIE5FVFNOTVBfVElNRU9VVF9XQUlURk9SU0lOR0xFT0JKRUNUIDUwMDAKIAogI2lmZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLCi0jZGVmaW5lIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkgMQorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSAxCiAjZW5kaWYKIAorLyogU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHVpbnQzMl90ICovCisjZGVmaW5lIE5FVFNOTVBfUFJJMzIgIiIKKworI2lmZGVmIF9NU0NfVkVSCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIE5FVFNOTVBfUFJJeiAiSTY0IgorI2Vsc2UKKyNkZWZpbmUgTkVUU05NUF9QUkl6ICIiCisjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYgLyogTkVUX1NOTVBfQ09ORklHX0ggKi8KIApkaWZmIC0tZ2l0IGEvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYi93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgppbmRleCBhNjgyNmIzLi45NjkzNzMwIDEwMDY0NAotLS0gYS93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgorKysgYi93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgpAQCAtNSwzMSArNSw0NSBAQAogI2RlZmluZSBORVRfU05NUF9DT05GSUdfSAogCiAvKiBfTVNDX1ZFUiB2YWx1ZXMKLSAgIDE2MDAgPSAxMC4wICgyMDEwKQotICAgMTUwMCA9ICA5LjAgKDIwMDgpCi0gICAxNDAwID0gIDguMCAoMjAwNSkKLSAgIDEzMTAgPSAgNy4xICgyMDAzKQotICAgMTMwMCA9ICA3LjAgKDIwMDIpCi0gICAxMjAwID0gIDYuMAorICAgMTgwMCA9IE1TVkMrKyAxMi4wIChWaXN1YWwgU3R1ZGlvIDIwMTMpCisgICAxNzAwID0gTVNWQysrIDExLjAgKFZpc3VhbCBTdHVkaW8gMjAxMikKKyAgIDE2MDAgPSBNU1ZDKysgMTAuMCAoVmlzdWFsIFN0dWRpbyAyMDEwKQorICAgMTUwMCA9IE1TVkMrKyAgOS4wIChWaXN1YWwgU3R1ZGlvIDIwMDgpCisgICAxNDAwID0gTVNWQysrICA4LjAgKFZpc3VhbCBTdHVkaW8gMjAwNSkKKyAgIDEzMTAgPSBNU1ZDKysgIDcuMSAoVmlzdWFsIFN0dWRpbyAyMDAzKQorICAgMTMwMCA9IE1TVkMrKyAgNy4wIChWaXN1YWwgU3R1ZGlvIDIwMDIpCisgICAxMjAwID0gTVNWQysrICA2LjAKICovCiAKKyNpZmRlZiBfTVNDX1ZFUgorLyogRGlzYWJsZSB3YXJuaW5nIDQwMTg6IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaC4gKi8KKyNwcmFnbWEgd2FybmluZyAoZGlzYWJsZTogNDAxOCkKKyNlbmRpZgorCisvKiBBdXRvbWF0aWNhbGx5IHNldCBieSBXaW5kb3dzIHBlcmwgQ29uZmlndXJlIHNjcmlwdC4KKyAqIFdoZW4gY29tcGlsaW5nIHdpdGggdGhlIE1TVkMgd29ya3NwYWNlLCB0aGlzIG11c3QgYmUgc2V0IG1hbnVhbGx5LgorICogU2VlIHRoZSBQQUNLQUdFX1ZFUlNJT04gdmFyaWFibGUgaW4gVW5peCAvY29uZmlndXJlIHNjcmlwdAorKi8KKyNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAidW5rbm93biIKKyNlbmRpZgorCiAvKiBEZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgaWYgeW91IGhhdmU6CiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBNU1ZDIDYuMCBhbmQgdGhlIFBsYXRmb3JtIFNESyAoUFNESykKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLk5ldCAyMDAyCiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby5OZXQgMjAwMwotICogQ3lnd2luCi0gKiBNaW5HVyAKICAqLwogLyogI3VuZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLICovCiAKLS8qIE9ubHkgdXNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gV2luZG93cyAyMDAwIFNQNCBvciBsYXRlci4KLSAqIFdlIG5lZWQgYXQgbGVhc3QgU1AxIGZvciBzb21lIElQdjYgZGVmaW5lcyBpbiB3czJpcGRlZi5oLgotICogT25seSBkZWZpbmUgX1dJTjMyX1dJTk5UIHdoZW4gbm90IGJlaW5nIGNvbXBpbGVkIHdpdGggTVNWQyA2IHdpdGhvdXQgUFNESwotICogYmVjYXVzZSB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgTVNWQyA2IGhlYWRlciA8d2luc29jay5oPiB0aGF0IGNhdXNlcwotICogaW5jbHVzaW9uIG9mIDx3aW5zb2NrMi5oPi4KKy8qIERlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IHRvIGVuYWJsZSBJUHY2LiAgSVB2NiBpcyBvbmx5IGF2YWlsYWJsZSBvbgorICogV2luZG93cyBYUCBhbmQgaGlnaGVyLiAgKi8KKy8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisKKy8qIE9ubHkgdXNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gV2luZG93cyAyMDAwIFNQNCBvciBsYXRlci4gIAorICogV2UgbmVlZCBhdCBsZWFzdCBTUDEgZm9yIHNvbWUgSVB2NiBkZWZpbmVzIGluIHdzMmlwZGVmLmgKICAqLwogI2lmbmRlZiBfV0lOMzJfV0lOTlQKLSNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NTAxIC8qX1dJTjMyX1dJTk5UX1dJTjJLKi8KKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NjAwIC8qX1dJTjMyX1dJTk5UX1dJTjYqLwogI2Vsc2UKICNpZiBfV0lOMzJfV0lOTlQgPCAweDUwMQogI2Vycm9yIF9XSU4zMl9XSU5OVCBpcyB0b28gbG93IC0gaXQgc2hvdWxkIGJlIHNldCB0byBhdCBsZWFzdCAweDUwMS4KQEAgLTIyNywxOSArMjQxLDE3IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFzbS9wYWdlLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfQVNNX1BBR0VfSCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJjb3B5JyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0JDT1BZICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2dldG5leHQnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfQ0dFVE5FWFQgKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnRkYmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQ1JUREJHX0ggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0RJUkVDVF9IICovCisjZGVmaW5lIEhBVkVfRElSRUNUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNob3duJyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0NIT1dOICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCisgICAqLwogLyogI3VuZGVmIEhBVkVfRElSRU5UX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KQEAgLTMxNCwxMiArMzI2LDE0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9JRl9OQU1FSU5ERVggKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmRleCcgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9JTkRFWCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGluZXQvbWliMi5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0lORVRfTUlCMl9IICovCiAKKyNpZmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpcGhscGFwaS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JUEhMUEFQSV9ICisjZW5kaWYKKwogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDMyX3QnLiAqLwogI2RlZmluZSBIQVZFX0lOVDMyX1QgMQogCkBAIC0zNjUsOSArMzc5LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJDUllQVE8gKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJETCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVmZW5jZScgbGlicmFyeSAoLWxlZmVuY2UpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCRUZFTkNFICovCiAKQEAgLTM3Nyw5ICszODgsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJLU1RBVCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bScgbGlicmFyeSAoLWxrdm0pLiAqLwotLyogI3VuZGVmIEhBVkVfTElCS1ZNICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbScgbGlicmFyeSAoLWxtKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQk0gKi8KIApAQCAtNDA0LDkgKzQxMiw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbnNvcnMnIGxpYnJhcnkgKC1sc2Vuc29ycykuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJTRU5TT1JTICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgeicgbGlicmFyeSAoLWx6KS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQlogKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQogCkBAIC00MTksOSArNDI0LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9MT0NBTFRJTUVfUiAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxyYW5kNDgnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfTFJBTkQ0OCAqLwogCkBAIC00MzcsMTIgKzQzOSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1DUFkgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCiAKQEAgLTUxMiw2ICs1MDgsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lwX2ljbXAuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWNtcDYuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lDTVA2X0ggKi8KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lwX3Zhci5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX05FVElORVRfSVBfVkFSX0ggKi8KIApAQCAtNjgzLDkgKzY4Miw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0YXR2ZnMnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfU1RBVFZGUyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGFyZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwogI2lmZGVmIF9fTUlOR1czMl9fCiAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQpAQCAtNzAwLDkgKzY5Niw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VzdHInIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfU1RSQ0FTRVNUUiAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSQ0hSIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUkRVUCAxCiAKQEAgLTg0Niw2ICs4MzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19USU1FX0ggKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCiAKQEAgLTkzOSw2ICs5MzUsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9XSU5TT0NLX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMQorCisvKiBTZXQgaWYgSVBfUEtUSU5GTyBpcyB1c2FibGUgKi8KKyNkZWZpbmUgSEFWRV9JUF9QS1RJTkZPIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4dGkuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9YVElfSCAqLwogCkBAIC05NDYsMTMgKzk1MSwxNyBAQAogLyogI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUICovCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9OQU1FCiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiTmV0LVNOTVAiCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogLyogI3VuZGVmIFBBQ0tBR0VfU1RSSU5HICovCiAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9UQVJOQU1FCiAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibmV0LXNubXAiCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KIC8qICN1bmRlZiBQQUNLQUdFX1ZFUlNJT04gKi8KQEAgLTk2Niw2ICs5NzUsOSBAQAogLyogVGhlIHNpemUgb2YgYSBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX0xPTkcgNAogCisvKiBUaGUgc2l6ZSBvZiBhIGBpbnRtYXhfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVE1BWF9UIDgKKwogLyogVGhlIHNpemUgb2YgYSBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCiAKQEAgLTk4MSw3ICs5OTMsNyBAQAogI2RlZmluZSBTVERDX0hFQURFUlMgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKy8qICN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQogICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCkBAIC0xMDMwLDk2ICsxMDQyLDEwMiBAQAogLyogI3VuZGVmIFJURU5UUllfNF80ICovCiAKIC8qIERvZXMgc3RydWN0IHNpZ2FjdGlvbiBoYXZlIGEgc2Ffc2lnYWN0aW9uIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TSUdBQ1RJT05fSEFTX1NBX1NJR0FDVElPTiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2xlbiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX0xFTiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX0xFTiAqLwogCiAvKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfZmFtaWx5MiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAqLwogCiAvKiBEb2VzIHN0cnVjdCBpbjZfYWRkciBoYXZlIGEgczZfdW4uc2E2X2xhZGQgZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lONl9BRERSX0hBU19TNl9VTl9TQTZfTEFERFIgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JTjZfQUREUl9TNl9VTl9TQTZfTEFERFIgKi8KKworLyogbXNnaGRyLm1zZ19jb250cm9sICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19DT05UUk9MICovCisKKy8qIG1zZ2hkci5tc2dfZmxhZ3MgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0ZMQUdTICovCiAKIC8qIHJ0ZW50cnkgc3RydWN0dXJlIHRlc3RzICovCiAvKiAjdW5kZWYgUlRFTlRSWV9SVF9ORVhUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VTklUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VTRSAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9SRUZDTlQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VU0UgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1JFRkNOVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSCAqLwogCiAvKiBpZm5ldCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURV9JRlNfVkFMVUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1NQRUVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9UWVBFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JTUNBU1RTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JUURST1BTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfU1BFRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lRRFJPUFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX05PUFJPVE8gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PQllURVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JQllURVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVCAqLwogCiAvKiB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcCAqLwotLyogI3VuZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9UQ1BTVEFUX1RDUFNfUkNWTUVNRFJPUCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0RJU0NBUkQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRElTQ0FSRCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlQgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlRCQ0FTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlRCQ0FTVCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0ZVTExTT0NLICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0ZVTExTT0NLICovCiAKIC8qIGFycGhkLmF0X25leHQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUICovCiAKIC8qIGlmYWRkci5pZmFfbmV4dCAqLwotLyogI3VuZGVmIFNUUlVDVF9JRkFERFJfSEFTX0lGQV9ORVhUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZBRERSX0lGQV9ORVhUICovCiAKIC8qIGlmbmV0LmlmX210dSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTVRVICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTVRVICovCiAKIC8qIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1dERVZUX0hBU19TV19OQkxLU0VOQUJMRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TV0RFVlRfU1dfTkJMS1NFTkFCTEVEICovCiAKIC8qIG5saXN0Lm5fdmFsdWUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFICovCiAKIC8qIGlwc3RhdCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZPUldBUkQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZSQUcgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfREVMSVZFUkVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdEUk9QUEVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdUSU1FT1VUICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0xPQ0FMT1VUICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUFJPVE8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9ST1VURSAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRFJPUFBFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRlJBR01FTlRTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX1JFQVNTRU1CTEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URk9SV0FSRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZSQUcgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0RFTElWRVJFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR0RST1BQRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdUSU1FT1VUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19MT0NBTE9VVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9QUk9UTyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9ST1VURSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0RST1BQRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09GUkFHTUVOVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX1JFQVNTRU1CTEVEICovCiAKIC8qIHZmc3N0YXQuZl9mcnNpemUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFICovCiAKIC8qIHZmc3N0YXQuZl9maWxlcyAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTICovCiAKIC8qIHN0YXRmcyBpbm9kZSBzdHJ1Y3R1cmUgdGVzdHMqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GSUxFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZGUkVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkFWQUlMICovCiAKIC8qIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgKi8KLS8qICN1bmRlZiBTVFJVQ1RfREVTX0tTX1NUUlVDVF9IQVNfV0VBS19LRVkgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9ERVNfS1NfU1RSVUNUX1dFQUtfS0VZICovCiAKIC8qIGlmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTCBkZWZpbmVkICovCiAvKiAjdW5kZWYgSUZORVRfTkVFRFNfS0VSTkVMICovCkBAIC0xMTMzLDkgKzExNTEsNiBAQAogLyogZGVmaW5lIGlmIFNJT0NHSUZBRERSIGV4aXN0cyBpbiBzeXMvaW9jdGwuaCAqLwogLyogI3VuZGVmIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUiAqLwogCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciAocHJvY2Vzc29yKSBkZWZpbmVzIF9fRlVOQ1RJT05fXyBmb3IgeW91ICovCi0vKiAjdW5kZWYgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCAqLwotCiAvKiBNaWItMiB0cmVlIEluZm8gKi8KIC8qIFRoZXNlIGFyZSB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIHZhcmlhYmxlcy4gKi8KIApAQCAtMTM0MCw0NCArMTM1NSw2IEBACiAjZGVmaW5lIEhBVkVfU1NJWkVfVAogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBIQVZFX0lOREVYCi0jIGRlZmluZSBzdHJjaHIoYSxiKSBpbmRleChhLGIpCi0jIGRlZmluZSBzdHJyY2hyKGEsYikgcmluZGV4KGEsYikKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTkRFWAotI2lmZGVmIEhBVkVfU1RSQ0hSCi0jIGRlZmluZSBpbmRleChhLGIpIHN0cmNocihhLGIpCi0jIGRlZmluZSByaW5kZXgoYSxiKSBzdHJyY2hyKGEsYikKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgbm90dXNlZCAvKiBkb250IHN0ZXAgb24gb3RoZXIgZGVmbnMgb2YgYmNvcHksYnplcm8sIGFuZCBiY21wICovCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCiAvKiBJZiB5b3UgaGF2ZSBvcGVuc3NsIDAuOS43IG9yIGFib3ZlLCB5b3UgbGlrZWx5IGhhdmUgQUVTIHN1cHBvcnQuICovCiAvKiAjdW5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTCAqLwogCkBAIC0xNDg2LDYgKzE0NjMsMzIgQEAKICAgICBhdmFpbGFibGUuICAqLwogLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOICovCiAKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTQkFTRV9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgQWxpYXMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBTU0ggdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgRFRMUy9VRFAgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUy9UQ1AgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciBzdGRpbi9vdXQgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIElQdjRCYXNlIHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX0lQVjRCQVNFX0RPTUFJTiAxCisKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI2RlZmluZSBORVRTTk1QX1NFQ01PRF9VU00gMQogCkBAIC0xNTAzLDE0ICsxNTA2LDE2IEBACiAKIC8qIE5vdC10by1iZS1jb21waWxlZCBtYWNyb3MgZm9yIHVzZSBieSBjb25maWd1cmUgb25seSAqLwogI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KQorI2RlZmluZSBjb25maWdfdmVyc2lvbl9yZXF1aXJlKHgpCiAjZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCisjZGVmaW5lIGNvbmZpZ19lcnJvcih4KQogI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KQogI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSkKICNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopCiAjZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpCiAjZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAobWluZ3czMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmIGRlZmluZWQgKFdJTjMyKQogI2RlZmluZSBFTlZfU0VQQVJBVE9SICI7IgogI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzsnCiAjZWxzZQpAQCAtMTU3NywyMCArMTU4Miw1MyBAQAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CiAjZW5kaWYKICNpZm5kZWYgSEFWRV9TVERJTlRfSAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IHVpbnQxNl90OwordHlwZWRlZiBfX2ludDE2IGludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgdWludDMyX3Q7Ci10eXBlZGVmIGxvbmcgaW50MzJfdDsKK3R5cGVkZWYgX19pbnQzMiBpbnQzMl90OwogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OwogdHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludG1heF90OwordHlwZWRlZiBfX2ludDY0IGludG1heF90OwogI2Vsc2UgLyogSEFWRV9TVERJTlRfSCAqLwogI2luY2x1ZGUgPHN0ZGludC5oPgogI2VuZGlmIC8qIEhBVkVfU1RESU5UX0ggKi8KIAorCisvKiAodSlpbnRwdHJfdCBzaG91bGQgb25seSBiZSBuZWVkZWQgZm9yIE1TVkMgNiAzMi1iaXQuICovCisvKiBTREsgaGFzIGl0IGZvciA2NC1iaXQgYW5kIG5ld2VyIE1TVkMgc2hvdWxkIGFsc28gaGF2ZSBpdCBpbiBzdGRkZWYuaC4gKi8KKyNpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyNpZmRlZiBfTV9YNjQKK3R5cGVkZWYgX19pbnQ2NCAgICAgICAgICBpbnRwdHJfdDsKKyNlbHNlCit0eXBlZGVmIGludCAgICAgICAgICAgICAgaW50cHRyX3Q7CisjZW5kaWYKKyNkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyNlbmRpZgorCisjaWZuZGVmIF9VSU5UUFRSX1RfREVGSU5FRAorI2lmZGVmIF9NX1g2NAordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnRwdHJfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgdWludHB0cl90OworI2VuZGlmCisjZGVmaW5lIF9VSU5UUFRSX1RfREVGSU5FRAorI2VuZGlmCisKICNpZm5kZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDgwNCkgLy8gJy0nIDogdW5zYWZlIHVzZSBvZiB0eXBlICdib29sJyBpbiBvcGVyYXRpb24KKyNlbmRpZgogZW51bSB7CiAgICAgbmV0c25tcF9jb21waWxlX3RpbWVfdWludHB0cl90X3NpemVfY2hlY2sKICAgICAgICAgPSBzaXplb2Yoc3RydWN0IG5ldHNubXBfY29tcGlsZV90aW1lX3VpbnRwdHJfdF9zaXplX2NoZWNrX3MgeyBpbnQ6LSEoc2l6ZW9mKHVpbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQqKSk7IH0pCiB9OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCiAjZW5kaWYKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBjbG9zZXNvY2tldCBmdW5jdGlvbi4gICovCkBAIC0xNjE3LDE3ICsxNjU1LDkgQEAKIC8qIERlZmluZSBORVRTTk1QX1VTRV9ETEwgd2hlbiBidWlsZGluZyBvciB1c2luZyBuZXRzbm1wLkRMTCAqLwogLyogI3VuZGVmIE5FVFNOTVBfVVNFX0RMTCAqLwogCi0jaWZkZWYgTkVUU05NUF9VU0VfRExMCi0gICNpZmRlZiBORVRTTk1QX0RMTAotICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSAgICAjZW5kaWYKLSAgI2Vsc2UKLSAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0gICAgI2VuZGlmCi0gICNlbmRpZiAgIC8qIE5FVFNOTVBfRExMICovCi0jZW5kaWYgICAgIC8qIE5FVFNOTVBfVVNFX0RMTCAqLworI2lmIGRlZmluZWQoTkVUU05NUF9ETEwpICYmICFkZWZpbmVkKE5FVFNOTVBfVVNFX0RMTCkKKyNlcnJvciBORVRTTk1QX1VTRV9ETEwgbXVzdCBiZSBkZWZpbmVkIHdoZW4gYnVpbGRpbmcgbGlic25tcCBhcyBhIERMTC4KKyNlbmRpZgogCiAvKgogICogRExMIGRlY29yYXRpb24sIGlmIHVzZWQgYXQgYWxsLCBtdXN0IGJlIGNvbnNpc3RlbnQuCkBAIC0xNjQwLDI1ICsxNjcwLDIyIEBACiAgKiAgdGhlIE5FVFNOTVBfSU1QT1JUIGRlZmluaXRpb25zIGhhcm1sZXNzLgogICovCiAKLQotICAjaWZkZWYgTkVUU05NUF9VU0VfRExMCi0gICAgI2lmbmRlZiBORVRTTk1QX1RPT0xTX0MKLQotICAvKiB3cmFwIGFsbG9jIGZ1bmN0aW9ucyB0byB1c2UgRExMJ3MgbWVtb3J5IGhlYXAgKi8KLSAgLyogVGhpcyBpcyBub3QgZG9uZSBpbiB0b29scy5jLCB3aGVyZSB0aGVzZSB3cmFwcGVycyBhcmUgZGVmaW5lZCAqLwotCi0gICAgICAjZGVmaW5lIHN0cmR1cCAgICBuZXRzbm1wX3N0cmR1cAotICAgICAgI2RlZmluZSBjYWxsb2MgICAgbmV0c25tcF9jYWxsb2MKLSAgICAgICNkZWZpbmUgbWFsbG9jICAgIG5ldHNubXBfbWFsbG9jCi0gICAgICAjZGVmaW5lIHJlYWxsb2MgICBuZXRzbm1wX3JlYWxsb2MKLSAgICAgICNkZWZpbmUgZnJlZSAgICAgIG5ldHNubXBfZnJlZQorI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAorICAjaWZkZWYgTkVUU05NUF9ETEwKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCiAgICAgI2VuZGlmCi0gICNlbmRpZgorICAjZWxzZQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAjZW5kaWYKKyAgI2VuZGlmICAgLyogTkVUU05NUF9ETEwgKi8KKyNlbmRpZiAgICAgLyogTkVUU05NUF9VU0VfRExMICovCiAKIC8qIE1TVkMgT3BlblNTTCBsaW5rZXIgc2V0dGluZ3MuICovCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQobWluZ3czMikKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQogIyAgaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKQotIyAgICBpZmRlZiBORVRTTk1QX1VTRV9ETEwKKyMgICAgaWZkZWYgX0RMTAogIyAgICAgIGlmZGVmIF9ERUJVRwogIyAgICAgICAgcHJhZ21hIGNvbW1lbnQobGliLCAibGliZWF5MzJNRGQubGliIikKICMgICAgICBlbHNlCkBAIC0xNjcyLDYgKzE2OTksNyBAQAogIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICAgIHByYWdtYSBjb21tZW50KGxpYiwgImdkaTMyLmxpYiIpCisjICAgIHByYWdtYSBjb21tZW50KGxpYiwgInVzZXIzMi5saWIiKQogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0xNjgxLDcgKzE3MDksNyBAQAogIyAgZGVmaW5lIE5FVFNOTVBfSU1QT1JUIGV4dGVybgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFKSAmJiAhZGVmaW5lZChET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQorI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFKSAmJiAhZGVmaW5lZChET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQogI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICNlbmRpZgogCkBAIC0xNjg5LDcgKzE3MTcsNiBAQAogI2RlZmluZSBETUFMTE9DX0ZVTkNfQ0hFQ0sKICNlbmRpZgogCi0vKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNiAqLwogLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVggKi8KIAogLyogZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHkgKi8KQEAgLTE3MTAsMTkgKzE3MzcsMzUgQEAKICN1bmRlZiBIQVZFX0lORVRfTlRPUAogI3VuZGVmIEhBVkVfSU5FVF9QVE9OCiAKLSNpZiBORVRTTk1QX0VOQUJMRV9JUFY2CisvKiBJUHY2IHRyYW5zcG9ydHMgKi8KKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CiAgICNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gMQogICAjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOIDEKKyAgI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCiAjZWxzZQogICAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KICAgI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCiAjZW5kaWYKICNlbmRpZgogCisvKgorICogQWx0aG91Z2ggaWZfbmFtZXRvaW5kZXgoKSBpcyBhdmFpbGFibGUgb24gV2luZG93cyBWaXN0YSwgV2luZG93cyBTZXJ2ZXIKKyAqIDIwMDggYW5kIGxhdGVyIGluIGlwaGxwYXBpLmRsbCwgZG8gbm90IGxpbmsgd2l0aCBpZl9uYW1ldG9pbmRleCgpIHN1Y2gKKyAqIHRoYXQgdGhlIE5ldC1TTk1QIGV4ZWN1dGFibGUgY2FuIGJlIHN0YXJ0ZWQgb24gZWFybGllciBXaW5kb3dzIHZlcnNpb25zLgorICovCisjdW5kZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAorCiAjaWZuZGVmIE5JX01BWEhPU1QKICNkZWZpbmUgTklfTUFYSE9TVAkxMDI1CiAjZW5kaWYKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsbCcgZnVuY3Rpb24uICovCisjaWYgX01TQ19WRVIgPj0gMTgwMAorI2RlZmluZSBIQVZFX1NUUlRPVUxMCisjZWxzZQorLyogI3VuZGVmIEhBVkVfU1RSVE9VTEwgKi8KKyNlbmRpZgorCiAvKgogICogTW9kdWxlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgc3RhcnRzIGhlcmUuCiAgKgpAQCAtMTc2Niw5ICsxODA5LDE5IEBACiAjZGVmaW5lIE5FVFNOTVBfVElNRU9VVF9XQUlURk9SU0lOR0xFT0JKRUNUIDUwMDAKIAogI2lmZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLCi0jZGVmaW5lIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkgMQorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSAxCiAjZW5kaWYKIAorLyogU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHVpbnQzMl90ICovCisjZGVmaW5lIE5FVFNOTVBfUFJJMzIgIiIKKworI2lmZGVmIF9NU0NfVkVSCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIE5FVFNOTVBfUFJJeiAiSTY0IgorI2Vsc2UKKyNkZWZpbmUgTkVUU05NUF9QUkl6ICIiCisjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYgLyogTkVUX1NOTVBfQ09ORklHX0ggKi8KIApkaWZmIC0tZ2l0IGEvd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4gYi93aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDRlMjRkNzUuLmI2YmFjYmMKLS0tIGEvd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4KQEAgLTIsNiArMiw3IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9CitTREs9CiAKICFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgogTlVMTD0KQEAgLTksNzUgKzEwLDggQEAKIE5VTEw9bnVsCiAhRU5ESUYgCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KIEFMTCA6ICIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIKIAotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4YW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGVjdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXF1ZXJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZpbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxvYWRhdmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNDYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zRGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb3ZlcnJpZGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3RvY29sLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJveHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNtdXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c09SVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbUNvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21TdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVVzZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIgotCiAiLi5cbGliXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKIApAQCAtODUsNyArMTksMTEgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVORElGCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTExOCwzMyArNTYsNDAgQEAKIDw8CiAKIFJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiIAotQlNDMzJfU0JSUz0gXAotCiBMSUIzMj1saW5rLmV4ZSAtbGliCiBMSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIiAKLUxJQjMyX09CSlM9IFwKK0xJQjMyX09CSlMxPSBcCiAJIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiIFwKIAkiJChJTlRESVIpXHNubXBfbWliLm9iaiIgXAogCSIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIiBcCisJIiQoSU5URElSKVx1cGRhdGVzLm9iaiIgXAogCSIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgXAogCSIkKElOVERJUilcdmFjbV9jb25mLm9iaiIgXAogCSIkKElOVERJUilcdmFjbV92YXJzLm9iaiIgXAorCSIkKElOVERJUilcbXRlRXZlbnQub2JqIiBcCisJIiQoSU5URElSKVxtdGVFdmVudENvbmYub2JqIiBcCiAJIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcbXRlRXZlbnRTZXRUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiBcCisJIiQoSU5URElSKVxtdGVPYmplY3RzLm9iaiIgXAorCSIkKElOVERJUilcbXRlT2JqZWN0c0NvbmYub2JqIiBcCiAJIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiBcCisJIiQoSU5URElSKVxtdGVTY2FsYXJzLm9iaiIgXAogCSIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXG10ZVRyaWdnZXIub2JqIiBcCisJIiQoSU5URElSKVxtdGVUcmlnZ2VyQ29uZi5vYmoiIFwKIAkiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcZXhhbXBsZS5vYmoiIFwKIAkiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIiBcCisJIiQoSU5URElSKVxkbG1vZC5vYmoiIFwKIAkiJChJTlRESVIpXGVycm9ybWliLm9iaiIgXAogCSIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGZpbGUub2JqIiBcCisJIiQoSU5URElSKVxmaWxlLm9iaiIKK0xJQjMyX09CSlMyPSBcCiAJIiQoSU5URElSKVxsb2FkYXZlLm9iaiIgXAogCSIkKElOVERJUilccGFzcy5vYmoiIFwKIAkiJChJTlRESVIpXHBhc3NfY29tbW9uLm9iaiIgXApAQCAtMTgwLDIwMSArMTI1LDQ0IEBACiAJIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxleGVjdXRlLm9iaiIgXAogCSIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgXAorCSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiBcCisJIiQoSU5URElSKVxoZWFkZXJfZ2VuZXJpYy5vYmoiIFwKKwkiJChJTlRESVIpXGhlYWRlcl9zaW1wbGVfdGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIFwKIAkiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIgXAotCSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiBcCiAJIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgXAorCSIkKElOVERJUilcRXhpdC5vYmoiIFwKKwkiJChJTlRESVIpXHJlc3RhcnQub2JqIiBcCiAJIiQoSU5URElSKVxzbXV4Lm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIKLQorIUlGICIkKFNESykiID09ICJ0cnVlIgorTElCMzJfT0JKUzM9IFwKKwkiJChJTlRESVIpXGF0Lm9iaiIgXAorCSIkKElOVERJUilcaWNtcC5vYmoiIFwKKwkiJChJTlRESVIpXGludGVyZmFjZXMub2JqIiBcCisJIiQoSU5URElSKVxpcC5vYmoiIFwKKwkiJChJTlRESVIpXGlwQWRkci5vYmoiIFwKKwkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiBcCisJIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiIFwKKwkiJChJTlRESVIpXHRjcC5vYmoiIFwKKwkiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcdWRwLm9iaiIgXAorCSIkKElOVERJUilcdWRwVGFibGUub2JqIiBcCisJIiQoSU5URElSKVx2YXJfcm91dGUub2JqIiBcCisJIiQoSU5URElSKVx3aW5FeHRETEwub2JqIgorIUVORElGCitMSUIzMl9PQkpTPSQoTElCMzJfT0JKUzEpICQoTElCMzJfT0JKUzIpICQoTElCMzJfT0JKUzMpCiAKIENMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGVycm9ybWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhhbXBsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4ZWN1dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcXVlcnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmlsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbG9hZGF2ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNEZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvdmVycmlkZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm9jLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvdG9jb2wub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm94eS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc211eC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtQ29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtVXNlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgorCS1AZm9yICVmIGluICgkKExJQjMyX09CSlMxKSkgZG8gZXJhc2UgJSVmCisJLUBmb3IgJWYgaW4gKCQoTElCMzJfT0JKUzIpKSBkbyBlcmFzZSAlJWYKKwktQGZvciAlZiBpbiAoJChMSUIzMl9PQkpTMykpIGRvIGVyYXNlICUlZgogCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIgogCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbWliLm9iaiIgXAotCSIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4YW1wbGUub2JqIiBcCi0JIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIgXAotCSIkKElOVERJUilcZXJyb3JtaWIub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIgXAotCSIkKElOVERJUilcZmlsZS5vYmoiIFwKLQkiJChJTlRESVIpXGxvYWRhdmUub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzLm9iaiIgXAotCSIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIgXAotCSIkKElOVERJUilccHJvYy5vYmoiIFwKLQkiJChJTlRESVIpXHByb3h5Lm9iaiIgXAotCSIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIgXAotCSIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtQ29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtVXNlci5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldC5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxjbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXIub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIiBcCi0JIiQoSU5URElSKVxwcm90b2NvbC5vYmoiIFwKLQkiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5kLm9iaiIgXAotCSIkKElOVERJUilcbnNDYWNoZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zRGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhlY3V0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGlxdWVyeS5vYmoiIFwKLQkiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgXAotCSIkKElOVERJUilcbWliX21vZHVsZXMub2JqIiBcCi0JIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIFwKLQkiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbXV4Lm9iaiIKLQogIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCiAgICAgJChMSUIzMikgQDw8CiAgICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCiA8PAogCi0hRU5ESUYgCi0KIAogIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKICFJRiBFWElTVFMoIiQoUFJPR05BTUUpLmRlcCIpCkBAIC00MTAsNiArMTk4LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1cGRhdGVzLmMKKworIiQoSU5URElSKVx1cGRhdGVzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29udGV4dC5jCiAKICIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTQyOCw0OSArMjIyLDgyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50LmMKKworIiQoSU5URElSKVxtdGVFdmVudC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50Q29uZi5jCisKKyIkKElOVERJUilcbXRlRXZlbnRDb25mLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCiAKICIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50U2V0VGFibGUuYwogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50VGFibGUuYworIiQoSU5URElSKVxtdGVFdmVudFNldFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRUYWJsZS5jCiAKICIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHMuYwogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZU9iamVjdHNUYWJsZS5jCisiJChJTlRESVIpXG10ZU9iamVjdHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzQ29uZi5jCisKKyIkKElOVERJUilcbXRlT2JqZWN0c0NvbmYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzVGFibGUuYwogCiAiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVNjYWxhcnMuYwogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYworIiQoSU5URElSKVxtdGVTY2FsYXJzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCiAKICIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXIuYwogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMKKyIkKElOVERJUilcbXRlVHJpZ2dlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJDb25mLmMKKworIiQoSU5URElSKVxtdGVUcmlnZ2VyQ29uZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUYWJsZS5jCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJUYWJsZS5jCiAKICIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwogCiAiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQpAQCAtNDg4LDYgKzMxNSwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGRsbW9kLmMiCisKKyIkKElOVERJUilcZGxtb2Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGVycm9ybWliLmMiCiAKICIkKElOVERJUilcZXJyb3JtaWIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTg0LDYgKzQxNywxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYyIKKworIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlLmMKIAogIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNzE1LDYgKzU1NCwyNSBAQAogIiQoSU5URElSKVxpcXVlcnkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXG92ZXJyaWRlLmMKKworIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXGhlYWRlcl9nZW5lcmljLmMKKworIiQoSU5URElSKVxoZWFkZXJfZ2VuZXJpYy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXGhlYWRlcl9zaW1wbGVfdGFibGUuYworCisiJChJTlRESVIpXGhlYWRlcl9zaW1wbGVfdGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcaGVhZGVyX2NvbXBsZXguYwogCiAiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTcyNywyNiArNTg1LDg4IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcb3ZlcnJpZGUuYwotCi0iJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3MuYwogCiAiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xFeGl0LmMKKworIiQoSU5URElSKVxFeGl0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NccmVzdGFydC5jCisKKyIkKElOVERJUilccmVzdGFydC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbXV4XHNtdXguYwogCiAiJChJTlRESVIpXHNtdXgub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcd2luRXh0RExMLmMKKyIkKElOVERJUilcd2luRXh0RExMLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGF0LmMKKyIkKElOVERJUilcYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaWNtcC5jCisiJChJTlRESVIpXGljbXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaW50ZXJmYWNlcy5jCisiJChJTlRESVIpXGludGVyZmFjZXMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXAuYworIiQoSU5URElSKVxpcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcEFkZHIuYworIiQoSU5URElSKVxpcEFkZHIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlccm91dGVfd3JpdGUuYworIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3AuYworIiQoSU5URElSKVx0Y3Aub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwVGFibGUuYworIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHAuYworIiQoSU5URElSKVx1ZHAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwVGFibGUuYworIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YXJfcm91dGUuYworIiQoSU5URElSKVx2YXJfcm91dGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKwogCiAhRU5ESUYgCi0KLQotCmRpZmYgLS1naXQgYS93aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AgYi93aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AKaW5kZXggM2FkODc5ZC4uY2RlNDk2YyAxMDA2NDQKLS0tIGEvd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwCisrKyBiL3dpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcApAQCAtODUsNiArODUsMzAgQEAKICMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcYXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpY21wLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaW50ZXJmYWNlcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXBBZGRyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlccm91dGVfd3JpdGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzZXRTZXJpYWxOby5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTAxLDcgKzEyNSwyMyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29udGV4dC5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcFRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1cGRhdGVzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0xMDksNDMgKzE0OSw4MyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29udGV4dC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fdmFycy5jDQogIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhcl9yb3V0ZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgImRpc21hbiINCiANCiAjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50VGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRDb25mLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZU9iamVjdHNUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRTZXRUYWJsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudFRhYmxlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzQ29uZi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0c1RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVNjYWxhcnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJDb25mLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiZXhhbXBsZXMiDQpAQCAtMjM3LDE5ICszMTcsMjMgQEAKICMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYyINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5jDQorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5jIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jDQorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYw0KK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMzQxLDcgKzQyNSw3IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGlxdWVyeS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcRXhpdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMzQ5LDYgKzQzMywxOCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcaGVhZGVyX2dlbmVyaWMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXGhlYWRlcl9zaW1wbGVfdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcaXF1ZXJ5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliX21vZHVsZXMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTM1NywxMiArNDUzLDMyIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xyZXN0YXJ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jcy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIndpbkV4dERMTCINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHdpbkV4dERMTC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHdpbkV4dERMTC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgInNtdXgiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbXV4XHNtdXguYw0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4gYi93aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkMTkwNC4uMDAwMDAwMAotLS0gYS93aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg4NSArMCwwIEBACi1QUk9HTkFNRT0KLUNGRz0KLU9VVERJUj0KLUlOVERJUj0KLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkbG1vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGVycm9ybWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhhbXBsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4ZWN1dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcXVlcnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmlsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaWNtcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludGVyZmFjZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlwQWRkci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxvYWRhdmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNDYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zRGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb3ZlcnJpZGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3RvY29sLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJveHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc211eC5vYmoiCi0jCS1AZXJhc2UgIiQoSU5URElSKVx3aW5FeHRETEwub2JqIgkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c09SVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGNwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGNwVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWRwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWRwVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Db25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Vc2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvRnAiJChJTlRESVIpXG5ldHNubXBtaWJzc2RrLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXG5ldHNubXBtaWJzc2RrLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPWlwaGxwYXBpLmxpYiAvbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9taWIub2JqIiBcCi0JIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fdmFycy5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhhbXBsZS5vYmoiIFwKLQkiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIgXAotCSIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtQ29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtVXNlci5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXQub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyLm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIgXAotCSIkKElOVERJUilccHJvdG9jb2wub2JqIiBcCi0JIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuZC5vYmoiIFwKLQkiJChJTlRESVIpXG5zQ2FjaGUub2JqIiBcCi0JIiQoSU5URElSKVxuc0RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4ZWN1dGUub2JqIiBcCi0JIiQoSU5URElSKVxpcXVlcnkub2JqIiBcCi0JIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIFwKLQkiJChJTlRESVIpXGF0Lm9iaiIgXAotCSIkKElOVERJUilcaWNtcC5vYmoiIFwKLQkiJChJTlRESVIpXGludGVyZmFjZXMub2JqIiBcCi0JIiQoSU5URElSKVxpcC5vYmoiIFwKLQkiJChJTlRESVIpXGlwQWRkci5vYmoiIFwKLQkiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIgXAotCSIkKElOVERJUilcdGNwLm9iaiIgXAotCSIkKElOVERJUilcdGNwVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx1ZHAub2JqIiBcCi0JIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGRsbW9kLm9iaiIgXAotCSIkKElOVERJUilcZXJyb3JtaWIub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIgXAotCSIkKElOVERJUilcZmlsZS5vYmoiIFwKLQkiJChJTlRESVIpXGxvYWRhdmUub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzLm9iaiIgXAotCSIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIgXAotCSIkKElOVERJUilccHJvYy5vYmoiIFwKLQkiJChJTlRESVIpXHByb3h5Lm9iaiIgXAotCSIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIiBcCi0JIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIFwKLQkiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIgXAotCSIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIFwKLSMJIiQoSU5URElSKVx3aW5FeHRETEwub2JqIiBcCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQkiJChJTlRESVIpXHNtdXgub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGxtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4YW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGVjdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXF1ZXJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZpbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGljbXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcEFkZHIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsb2FkYXZlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliX21vZHVsZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zQ2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb2Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm90b2NvbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3h5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccm91dGVfd3JpdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNtdXgub2JqIgotIwktQGVyYXNlICIkKElOVERJUilcd2luRXh0RExMLm9iaiIJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3ViYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRjcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVkcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtQ29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtVXNlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YXJfcm91dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL0ZwIiQoSU5URElSKVxuZXRzbm1wbWlic3Nkay5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxuZXRzbm1wbWlic3Nkay5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz1pcGhscGFwaS5saWIgL25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbWliLm9iaiIgXAotCSIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4YW1wbGUub2JqIiBcCi0JIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIgXAotCSIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbUNvbmYub2JqIiBcCi0JIiQoSU5URElSKVx1c21TdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVVzZXIub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXGNsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlci5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiIFwKLQkiJChJTlRESVIpXHByb3RvY29sLm9iaiIgXAotCSIkKElOVERJUilcc3ViYWdlbnQub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbmQub2JqIiBcCi0JIiQoSU5URElSKVxuc0NhY2hlLm9iaiIgXAotCSIkKElOVERJUilcbnNEZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGVjdXRlLm9iaiIgXAotCSIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgXAotCSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiBcCi0JIiQoSU5URElSKVxhdC5vYmoiIFwKLQkiJChJTlRESVIpXGljbXAub2JqIiBcCi0JIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIgXAotCSIkKElOVERJUilcaXAub2JqIiBcCi0JIiQoSU5URElSKVxpcEFkZHIub2JqIiBcCi0JIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiIFwKLQkiJChJTlRESVIpXHRjcC5vYmoiIFwKLQkiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdWRwLm9iaiIgXAotCSIkKElOVERJUilcdWRwVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx2YXJfcm91dGUub2JqIiBcCi0JIiQoSU5URElSKVxkbG1vZC5vYmoiIFwKLQkiJChJTlRESVIpXGVycm9ybWliLm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGZpbGUub2JqIiBcCi0JIiQoSU5URElSKVxsb2FkYXZlLm9iaiIgXAotCSIkKElOVERJUilccGFzcy5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiIFwKLQkiJChJTlRESVIpXHByb2Mub2JqIiBcCi0JIiQoSU5URElSKVxwcm94eS5vYmoiIFwKLQkiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIgXAotCSIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiBcCi0JIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiIFwKLQkiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbXV4Lm9iaiIgXAotIwkiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiIFwJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCSIkKElOVERJUilcc211eC5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVORElGIAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJuZXRzbm1wbWlic3Nkay5kZXAiKQotIUlOQ0xVREUgIm5ldHNubXBtaWJzc2RrLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgIm5ldHNubXBtaWJzc2RrLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzZXRTZXJpYWxOby5jCi0KLSIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc25tcF9taWIuYwotCi0iJChJTlRESVIpXHNubXBfbWliLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHN5c09SVGFibGUuYwotCi0iJChJTlRESVIpXHN5c09SVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc3lzdGVtX21pYi5jCi0KLSIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbnRleHQuYwotCi0iJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbmYuYwotCi0iJChJTlRESVIpXHZhY21fY29uZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX3ZhcnMuYwotCi0iJChJTlRESVIpXHZhY21fdmFycy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCi0KLSIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnRUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlT2JqZWN0c1RhYmxlLmMKLQotIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYwotCi0iJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwotCi0iJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxleGFtcGxlc1xleGFtcGxlLmMKLQotIiQoSU5URElSKVxleGFtcGxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGV4YW1wbGVzXHVjZERlbW9QdWJsaWMuYwotCi0iJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHNubXBFbmdpbmUuYwotCi0iJChJTlRESVIpXHNubXBFbmdpbmUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHNubXBNUERTdGF0cy5jCi0KLSIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21Db25mLmMKLQotIiQoSU5URElSKVx1c21Db25mLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21TdGF0cy5jCi0KLSIkKElOVERJUilcdXNtU3RhdHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbVVzZXIuYwotCi0iJChJTlRESVIpXHVzbVVzZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYwotCi0iJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jCi0KLSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5jCi0KLSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKLQotIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMKLQotIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvblxzbm1wTm90aWZ5VGFibGUuYwotCi0iJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcc25tcFRhcmdldEFkZHJFbnRyeS5jCi0KLSIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcc25tcFRhcmdldFBhcmFtc0VudHJ5LmMKLQotIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHRhcmdldC5jCi0KLSIkKElOVERJUilcdGFyZ2V0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFx0YXJnZXRfY291bnRlcnMuYwotCi0iJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcYWdlbnR4X2NvbmZpZy5jCi0KLSIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcY2xpZW50LmMKLQotIiQoSU5URElSKVxjbGllbnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XG1hc3Rlci5jCi0KLSIkKElOVERJUilcbWFzdGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxtYXN0ZXJfYWRtaW4uYwotCi0iJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhccHJvdG9jb2wuYwotCi0iJChJTlRESVIpXHByb3RvY29sLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxzdWJhZ2VudC5jCi0KLSIkKElOVERJUilcc3ViYWdlbnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcZXh0ZW5kLmMKLQotIiQoSU5URElSKVxleHRlbmQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNDYWNoZS5jCi0KLSIkKElOVERJUilcbnNDYWNoZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0RlYnVnLmMKLQotIiQoSU5URElSKVxuc0RlYnVnLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zTG9nZ2luZy5jCi0KLSIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zTW9kdWxlVGFibGUuYwotCi0iJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNUcmFuc2FjdGlvblRhYmxlLmMKLQotIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGV4ZWN1dGUuYwotCi0iJChJTlRESVIpXGV4ZWN1dGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGlxdWVyeS5jCi0KLSIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xvdmVycmlkZS5jCi0KLSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcYXQuYwotCi0iJChJTlRESVIpXGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGljbXAuYwotCi0iJChJTlRESVIpXGljbXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaW50ZXJmYWNlcy5jCi0KLSIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcC5jCi0KLSIkKElOVERJUilcaXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXBBZGRyLmMKLQotIiQoSU5URElSKVxpcEFkZHIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlccm91dGVfd3JpdGUuYwotCi0iJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcC5jCi0KLSIkKElOVERJUilcdGNwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcFRhYmxlLmMKLQotIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHAuYwotCi0iJChJTlRESVIpXHVkcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHBUYWJsZS5jCi0KLSIkKElOVERJUilcdWRwVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFyX3JvdXRlLmMKLQotIiQoSU5URElSKVx2YXJfcm91dGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGRsbW9kLmMiCi0KLSIkKElOVERJUilcZGxtb2Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGVycm9ybWliLmMiCi0KLSIkKElOVERJUilcZXJyb3JtaWIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGV4dGVuc2libGUuYyIKLQotIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxmaWxlLmMiCi0KLSIkKElOVERJUilcZmlsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcbG9hZGF2ZS5jIgotCi0iJChJTlRESVIpXGxvYWRhdmUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHBhc3MuYyIKLQotIiQoSU5URElSKVxwYXNzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwYXNzX3BlcnNpc3QuYyIKLQotIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHByb2MuYyIKLQotIiQoSU5URElSKVxwcm9jLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwcm94eS5jIgotCi0iJChJTlRESVIpXHByb3h5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFx2ZXJzaW9uaW5mby5jIgotCi0iJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGhlYWRlcl9jb21wbGV4LmMKLQotIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJfbW9kdWxlcy5jCi0KLSIkKElOVERJUilcbWliX21vZHVsZXMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc211eFxzbXV4LmMKLQotIiQoSU5URElSKVxzbXV4Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotI1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx3aW5FeHRETEwuYwkJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCi0jIiQoSU5URElSKVx3aW5FeHRETEwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0jCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkJCQkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3MuYwotCi0iJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLQpkaWZmIC0tZ2l0IGEvd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwIGIvd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWQ1Y2NjLi4wMDAwMDAwCi0tLSBhL3dpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyMCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im5ldHNubXBtaWJzc2RrIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQotDQotQ0ZHPW5ldHNubXBtaWJzc2RrIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm5ldHNubXBtaWJzc2RrLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJuZXRzbm1wbWlic3Nkay5tYWsiIENGRz0ibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCi0hTUVTU0FHRSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4uL2xpYi9yZWxlYXNlIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5DQotIyBBREQgUlNDIC9sIDB4NDA5DQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIGlwaGxwYXBpLmxpYiBtZ210YXBpLmxpYiBzbm1wYXBpLmxpYiAvbm9sb2dvIC9vdXQ6Ii4uL2xpYi9yZWxlYXNlL25ldHNubXBtaWJzLmxpYiINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLi4vbGliL2RlYnVnIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5DQotIyBBREQgUlNDIC9sIDB4NDA5DQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIGlwaGxwYXBpLmxpYiBtZ210YXBpLmxpYiBzbm1wYXBpLmxpYiAvbm9sb2dvIC9vdXQ6Ii4uL2xpYi9kZWJ1Zy9uZXRzbm1wbWlicy5saWIiDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gR3JvdXAgIm1pYklJIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc2V0U2VyaWFsTm8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzbm1wX21pYi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHN5c09SVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzeXN0ZW1fbWliLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb250ZXh0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb25mLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV92YXJzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiZGlzbWFuIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnRUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVPYmplY3RzVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgImV4YW1wbGVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZXhhbXBsZXNcZXhhbXBsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGV4YW1wbGVzXHVjZERlbW9QdWJsaWMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJzbm1wdjMiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcc25tcEVuZ2luZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1xzbm1wTVBEU3RhdHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtQ29uZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21TdGF0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21Vc2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAibm90aWZpY2F0aW9uIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvblxzbm1wTm90aWZ5VGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJ0YXJnZXQiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcc25tcFRhcmdldEFkZHJFbnRyeS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFxzbm1wVGFyZ2V0UGFyYW1zRW50cnkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcdGFyZ2V0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHRhcmdldF9jb3VudGVycy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgImFnZW50eCINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxhZ2VudHhfY29uZmlnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XGNsaWVudC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxtYXN0ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcbWFzdGVyX2FkbWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XHByb3RvY29sLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XHN1YmFnZW50LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiYWdlbnQiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxleHRlbmQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0NhY2hlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNEZWJ1Zy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zTG9nZ2luZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zTW9kdWxlVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc1RyYW5zYWN0aW9uVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJ1dGlsaXRpZXMiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcZXhlY3V0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xpcXVlcnkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcb3ZlcnJpZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJtaWJJSXNkayINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGF0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaWNtcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGludGVyZmFjZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwQWRkci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHJvdXRlX3dyaXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHBUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhcl9yb3V0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgInVjZC1zbm1wIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGRsbW9kLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxlcnJvcm1pYi5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZXh0ZW5zaWJsZS5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZmlsZS5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcbG9hZGF2ZS5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccGFzcy5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccGFzc19wZXJzaXN0LmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwcm9jLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwcm94eS5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcdmVyc2lvbmluZm8uYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxoZWFkZXJfY29tcGxleC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYl9tb2R1bGVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNtdXhcc211eC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHdpbkV4dERMTC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwIGIvd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwCmluZGV4IGZlNWU1YWUuLjM5NTk5ZGIgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcAorKysgYi93aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wYnVsa2dldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGJ1bGtnZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBidWxrZ2V0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGJ1bGtnZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGJ1bGtnZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwIGIvd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AKaW5kZXggZWE4YmIwYy4uOTFlOTRkMyAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AKKysrIGIvd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wYnVsa3dhbGsuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBidWxrd2Fsay5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGJ1bGt3YWxrIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGJ1bGt3YWxrLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBidWxrd2Fsay5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGQvTWFrZWZpbGUuaW4gYi93aW4zMi9zbm1wZC9NYWtlZmlsZS5pbgppbmRleCA0MWFjNTVlLi4xYjFiM2FjIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9zbm1wZC9NYWtlZmlsZS5pbgpAQCAtMiw3ICsyLDcgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KLVNTTD0KK1NESz0KIExJTktUWVBFPQogCiAjIFNldCB0byAxIHRvIGFsbG93IHRoZSBidWlsZGluZyB1c2luZyB0aGUgRExMIHZlcnNpb24gb2YgU05NUExJQi4KQEAgLTE0LDIxICsxNCw5IEBACiBOVUxMPW51bAogIUVORElGIAogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCiBBTEwgOiAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiICIkKElOVERJUikiCiAKIAotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiCi0KICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgogCkBAIC0zNiw5OSArMjQsMTQgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxzbm1wZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKLUNQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCi0hRU5ESUYKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCishSUYgICIkKENGRykiID09ICJyZWxlYXNlIgorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogUlNDX1BST0o9L2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2QgIk5ERUJVRyIgCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcc25tcGQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgXAotCSIkKElOVERJUilca2VybmVsLm9iaiIgXAotCSIkKElOVERJUilcc25tcGQub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0KLSIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIgOiAiLi5cYmluXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSFJRiAiJChMSU5LVFlQRSkiID09ICJzdGF0aWMiIHx8ICIkKEFMTE9XX0RMTCkiID09ICIxIgotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotIUVMU0UJIyBMaW5rdHlwZSBjaGVjawotCS1AZWNobyAuCi0JLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCi0JLUBlY2hvIC4KKyFFTFNFCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorUlNDX1BST0o9L2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2QgIl9ERUJVRyIgCiAhRU5ESUYKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiICIkKElOVERJUilcc25tcGQuYnNjIiAiJChJTlRESVIpIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5ic2MiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIgotCi0iLi5cYmluXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZwIiQoSU5URElSKVxzbm1wZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCiAhRU5ESUYKQEAgLTE0OCwzOCArNTEsMTQgQEAKICAgICQoQ1BQX1BST0opICQ8IAogPDwKIAotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KIFJTQz1yYy5leGUKLVJTQ19QUk9KPS9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9kICJfREVCVUciIAotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXHNubXBkLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0JIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIgXAotCSIkKElOVERJUilca2VybmVsLnNiciIgXAotCSIkKElOVERJUilcc25tcGQuc2JyIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIKLQotIiQoSU5URElSKVxzbm1wZC5ic2MiIDogIi4uXGJpblwkKE9VVERJUikiICQoQlNDMzJfU0JSUykKLSAgICAkKEJTQzMyKSBAPDwKLSAgJChCU0MzMl9GTEFHUykgJChCU0MzMl9TQlJTKQotPDwKLQogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL291dDoiLi5cYmluXCQoT1VURElSKS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvJChPVVRESVIpIgorIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKK0xJTkszMl9GTEFHUz0kKExJTkszMl9GTEFHUykgL2RlYnVnIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIgorIUVMU0UKK0xJTkszMl9GTEFHUz0kKExJTkszMl9GTEFHUykgL2RlYnVnIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIgL3BkYnR5cGU6c2VwdAorIUVORElGCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIFwKIAkiJChJTlRESVIpXGtlcm5lbC5vYmoiIFwKQEAgLTE4NywyMSArNjYsMjQgQEAKIAkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKIAorQ0xFQU4gOgorCS1AZm9yICVmIGluICgkKExJTkszMl9PQkpTKSkgZG8gZXJhc2UgJSVmCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIgOiAiLi5cYmluXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKICFJRiAiJChMSU5LVFlQRSkiID09ICJzdGF0aWMiIHx8ICIkKEFMTE9XX0RMTCkiID09ICIxIgogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCiAJLUBlY2hvIC4KICFFTkRJRgogCi0hRU5ESUYgCi0KLQogIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKICFJRiBFWElTVFMoInNubXBkLmRlcCIpCiAhSU5DTFVERSAic25tcGQuZGVwIgpAQCAtMjExLDk3ICs5MywzMSBAQAogIUVORElGIAogCiAKLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgogU09VUkNFPS4uXC4uXGFnZW50XGF1dG9fbmxpc3QuYwogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KICIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgkiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIFNPVVJDRT0uLlwuLlxhZ2VudFxrZXJuZWwuYwogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KICIkKElOVERJUilca2VybmVsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilca2VybmVsLm9iaiIJIiQoSU5URElSKVxrZXJuZWwuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIFNPVVJDRT0uLlwuLlxhZ2VudFxzbm1wZC5jCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQogIiQoSU5URElSKVxzbm1wZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHNubXBkLm9iaiIJIiQoSU5URElSKVxzbm1wZC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5jCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQogIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5vYmoiCSIkKElOVERJUilcd2luc2VydmljZS5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5yYwogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KICIkKElOVERJUilcd2luc2VydmljZS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChSU0MpIC9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9pICIuLlwuLlxzbm1wbGliIiAvZCAiTkRFQlVHIiAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKFJTQykgL2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2kgIi4uXC4uXHNubXBsaWIiIC9kICJfREVCVUciICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotCi0hRU5ESUYgCi0KKwkkKFJTQykgJChSU0NfUFJPSikgL2kgIi4uXC4uXHNubXBsaWIiICQoU09VUkNFKQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGQvc25tcGQuZHNwIGIvd2luMzIvc25tcGQvc25tcGQuZHNwCmluZGV4IDQyNjlhYTQuLjQ1ZTJjYWQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBkL3NubXBkLmRzcAorKysgYi93aW4zMi9zbm1wZC9zbm1wZC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AgYi93aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcAppbmRleCBiMTdiODIyLi43ZjVhNWQzIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcAorKysgYi93aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkZWx0YS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGRlbHRhLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZGVsdGEgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZGVsdGEuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGRlbHRhLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZGYvc25tcGRmLmRzcCBiL3dpbjMyL3NubXBkZi9zbm1wZGYuZHNwCmluZGV4IDg4YzNmNmQuLmUyZTRiOTQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBkZi9zbm1wZGYuZHNwCisrKyBiL3dpbjMyL3NubXBkZi9zbm1wZGYuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGRmLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZGYuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBkZiAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkZi5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZGYuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluIGIvd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOGRlNDMuLjAwMDAwMDAKLS0tIGEvd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotUFJPR05BTUU9Ci1DRkc9Ci1PVVRESVI9Ci1JTlRESVI9Ci1TU0w9Ci1MSU5LVFlQRT0KLQotIyBTZXQgdG8gMSB0byBhbGxvdyB0aGUgYnVpbGRpbmcgdXNpbmcgdGhlIERMTCB2ZXJzaW9uIG9mIFNOTVBMSUIuCi1BTExPV19ETEw9MQotCi0hSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKLU5VTEw9Ci0hRUxTRSAKLU5VTEw9bnVsCi0hRU5ESUYgCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLUFMTCA6ICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgIiQoSU5URElSKSIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnBjaCIKLQktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIKLQotIi4uXGJpblwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvRnAiJChJTlRESVIpXHNubXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLSFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgotQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKLSFFTkRJRgotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLVJTQ19QUk9KPS9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9kICJOREVCVUciIAotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXHNubXBkLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpcGhscGFwaS5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxrZXJuZWwub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wZC5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQotIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotIUlGICIkKExJTktUWVBFKSIgPT0gInN0YXRpYyIgfHwgIiQoQUxMT1dfRExMKSIgPT0gIjEiCi0gICAgJChMSU5LMzIpIEA8PAotICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKLTw8Ci0hRUxTRQkjIExpbmt0eXBlIGNoZWNrCi0JLUBlY2hvIC4KLQktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKLQktQGVjaG8gLgotIUVORElGCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiAiJChJTlRESVIpXHNubXBkLmJzYyIgIiQoSU5URElSKSIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQuYnNjIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnBjaCIKLQktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIKLQotIi4uXGJpblwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9GUiIkKElOVERJUilcXCIgL0ZwIiQoSU5URElSKVxzbm1wZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKLUNQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCi0hRU5ESUYKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1SU0NfUFJPSj0vbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvZCAiX0RFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxzbm1wZC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCSIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiIFwKLQkiJChJTlRESVIpXGtlcm5lbC5zYnIiIFwKLQkiJChJTlRESVIpXHNubXBkLnNiciIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5zYnIiCi0KLSIkKElOVERJUilcc25tcGQuYnNjIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKEJTQzMyX1NCUlMpCi0gICAgJChCU0MzMikgQDw8Ci0gICQoQlNDMzJfRkxBR1MpICQoQlNDMzJfU0JSUykKLTw8Ci0KLUxJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpcGhscGFwaS5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW5cJChPVVRESVIpL3NubXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgXAotCSIkKElOVERJUilca2VybmVsLm9iaiIgXAotCSIkKElOVERJUilcc25tcGQub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0KLSIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgOiAiLi5cYmluXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSFJRiAiJChMSU5LVFlQRSkiID09ICJzdGF0aWMiIHx8ICIkKEFMTE9XX0RMTCkiID09ICIxIgotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotIUVMU0UJIyBMaW5rdHlwZSBjaGVjawotCS1AZWNobyAuCi0JLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCi0JLUBlY2hvIC4KLSFFTkRJRgotCi0hRU5ESUYgCi0KLQotIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKLSFJRiBFWElTVFMoInNubXBkLmRlcCIpCi0hSU5DTFVERSAic25tcGQuZGVwIgotIUVMU0UgCi0hTUVTU0FHRSBXYXJuaW5nOiBjYW5ub3QgZmluZCAic25tcGQuZGVwIgotIUVORElGIAotIUVORElGIAotCi0KLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgotU09VUkNFPS4uXC4uXGFnZW50XGF1dG9fbmxpc3QuYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgkiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxrZXJuZWwuYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilca2VybmVsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilca2VybmVsLm9iaiIJIiQoSU5URElSKVxrZXJuZWwuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxzbm1wZC5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxzbm1wZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHNubXBkLm9iaiIJIiQoSU5URElSKVxzbm1wZC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5vYmoiCSIkKElOVERJUilcd2luc2VydmljZS5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5yYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChSU0MpIC9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9pICIuLlwuLlxzbm1wbGliIiAvZCAiTkRFQlVHIiAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKFJTQykgL2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2kgIi4uXC4uXHNubXBsaWIiIC9kICJfREVCVUciICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotCi0hRU5ESUYgCi0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkc2RrL3NubXBkLmRzcCBiL3dpbjMyL3NubXBkc2RrL3NubXBkLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyYWQyMi4uMDAwMDAwMAotLS0gYS93aW4zMi9zbm1wZHNkay9zbm1wZC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzbm1wZHNkayIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPXNubXBkc2RrIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNubXBkLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzbm1wZC5tYWsiIENGRz0ic25tcGRzZGsgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAic25tcGRzZGsgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJzbm1wZHNkayAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJzbm1wZHNkayAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgaXBobHBhcGkubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZHNkayAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpcGhscGFwaS5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInNubXBkc2RrIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInNubXBkc2RrIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxhdXRvX25saXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRca2VybmVsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcc25tcGQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwIGIvd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcAppbmRleCA2NDk4MGVkLi4wNjAzMjMyIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwCisrKyBiL3dpbjMyL3NubXBnZXQvc25tcGdldC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZ2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZ2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZ2V0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGdldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZ2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AgYi93aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AKaW5kZXggMjMzMTk5ZC4uY2I2M2M4NCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwCisrKyBiL3dpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBnZXRuZXh0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZ2V0bmV4dC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGdldG5leHQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZ2V0bmV4dC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZ2V0bmV4dC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4gYi93aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbgppbmRleCBiYTRkNWUyLi4wNWEwMWU4IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbgpAQCAtMiw3ICsyLDYgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KLVNTTD0KIExJTktUWVBFPQogCiAjIFNldCB0byAxIHRvIGFsbG93IHRoZSBidWlsZGluZyB1c2luZyB0aGUgRExMIHZlcnNpb24gb2YgU05NUExJQi4KQEAgLTIzLDEzICsyMiwxNiBAQAogCS1AZXJhc2UgIiQoSU5URElSKVxpZi5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXGluZXQub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0Ni5vYmoiCisJLUBlcmFzZSAiJChJTlRESVIpXGluZXR4Lm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcbWFpbi5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRlLm9iaiIKKwktQGVyYXNlICIkKElOVERJUilccm91dGV4Lm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcZmZzLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXHdpbnN0dWIub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMzgsNyArNDAsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC04MCwxMyArODIsMTUgQEAKIEJTQzMyX1NCUlM9IFwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcaWYub2JqIiBcCiAJIiQoSU5URElSKVxpbmV0Lm9iaiIgXAogCSIkKElOVERJUilcaW5ldDYub2JqIiBcCisJIiQoSU5URElSKVxpbmV0eC5vYmoiIFwKIAkiJChJTlRESVIpXG1haW4ub2JqIiBcCiAJIiQoSU5URElSKVxyb3V0ZS5vYmoiIFwKKwkiJChJTlRESVIpXHJvdXRleC5vYmoiIFwKIAkiJChJTlRESVIpXGZmcy5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnN0dWIub2JqIgogCkBAIC05NSw2ICs5OSw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKQEAgLTExMywxMCArMTE5LDE0IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXGluZXQuc2JyIgogCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0Ni5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXGluZXQ2LnNiciIKKwktQGVyYXNlICIkKElOVERJUilcaW5ldHgub2JqIgorCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0eC5zYnIiCiAJLUBlcmFzZSAiJChJTlRESVIpXG1haW4ub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxtYWluLnNiciIKIAktQGVyYXNlICIkKElOVERJUilccm91dGUub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZS5zYnIiCisJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRleC5vYmoiCisJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRleC5zYnIiCiAJLUBlcmFzZSAiJChJTlRESVIpXGZmcy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXGZmcy5zYnIiCiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgpAQCAtMTI3LDYgKzEzNyw3IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGRiIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTEzNSw3ICsxNDYsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTE3OCw4ICsxODksMTAgQEAKIAkiJChJTlRESVIpXGlmLnNiciIgXAogCSIkKElOVERJUilcaW5ldC5zYnIiIFwKIAkiJChJTlRESVIpXGluZXQ2LnNiciIgXAorCSIkKElOVERJUilcaW5ldHguc2JyIiBcCiAJIiQoSU5URElSKVxtYWluLnNiciIgXAogCSIkKElOVERJUilccm91dGUuc2JyIiBcCisJIiQoSU5URElSKVxyb3V0ZXguc2JyIiBcCiAJIiQoSU5URElSKVxmZnMuc2JyIiBcCiAJIiQoSU5URElSKVx3aW5zdHViLnNiciIKIApAQCAtMTg5LDEzICsyMDIsMTUgQEAKIDw8CiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi5cYmluXCQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcaWYub2JqIiBcCiAJIiQoSU5URElSKVxpbmV0Lm9iaiIgXAogCSIkKElOVERJUilcaW5ldDYub2JqIiBcCisJIiQoSU5URElSKVxpbmV0eC5vYmoiIFwKIAkiJChJTlRESVIpXG1haW4ub2JqIiBcCiAJIiQoSU5URElSKVxyb3V0ZS5vYmoiIFwKKwkiJChJTlRESVIpXHJvdXRleC5vYmoiIFwKIAkiJChJTlRESVIpXGZmcy5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnN0dWIub2JqIgogCkBAIC0yMDQsNiArMjE5LDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpAQCAtMjc3LDYgKzI5NCwxMSBAQAogCiAhRU5ESUYgCiAKK1NPVVJDRT0uLlwuLlxhcHBzXCQoUFJPR05BTUUpXGluZXR4LmMKKworIiQoSU5URElSKVxpbmV0eC5vYmoiCSIkKElOVERJUilcaW5ldHguc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKwogU09VUkNFPS4uXC4uXGFwcHNcJChQUk9HTkFNRSlcbWFpbi5jCiAKICFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCkBAIC0zMTMsNiArMzM1LDExIEBACiAKICFFTkRJRiAKIAorU09VUkNFPS4uXC4uXGFwcHNcJChQUk9HTkFNRSlccm91dGV4LmMKKworIiQoSU5URElSKVxyb3V0ZXgub2JqIgkiJChJTlRESVIpXHJvdXRleC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCiBTT1VSQ0U9Li5cLi5cYXBwc1wkKFBST0dOQU1FKVxmZnMuYwogCiAhSUYgICIkKENGRykiID09ICJyZWxlYXNlIgpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwIGIvd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjVlYzAzMS4uMmVkYTU3NQotLS0gYS93aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AKKysrIGIvd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcG5ldHN0YXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBuZXRzdGF0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wbmV0c3RhdCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBuZXRzdGF0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBuZXRzdGF0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCkBAIC04NCw2ICs4NCwxMCBAQAogIyBOYW1lICJzbm1wbmV0c3RhdCAtIFdpbjMyIERlYnVnIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxmZnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XGlmLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC05Niw2ICsxMDAsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XGluZXR4LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxtYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xMDQsNyArMTEyLDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XGZmcy5jDQorU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRccm91dGV4LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwIGIvd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcAppbmRleCBmZGVjYTMwLi5hZDBmNTA5IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwCisrKyBiL3dpbjMyL3NubXBzZXQvc25tcHNldC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wc2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wc2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wc2V0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHNldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wc2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wc21faW5pdC5oIGIvd2luMzIvc25tcHNtX2luaXQuaAppbmRleCA4MDE1ZmY2Li5jOGE0MTBiIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wc21faW5pdC5oCisrKyBiL3dpbjMyL3NubXBzbV9pbml0LmgKQEAgLTEsMiArMSBAQAotLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8KIGluaXRfdXNtKCk7CmRpZmYgLS1naXQgYS93aW4zMi9zbm1wc21fc2h1dGRvd24uaCBiL3dpbjMyL3NubXBzbV9zaHV0ZG93bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGM1NTEKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9zbm1wc21fc2h1dGRvd24uaApAQCAtMCwwICsxIEBACitzaHV0ZG93bl91c20oKTsKZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AgYi93aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwCmluZGV4IDFiNjgzNzMuLmU2YTQxMDAgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AKKysrIGIvd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBzdGF0dXMuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBzdGF0dXMuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBzdGF0dXMgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wc3RhdHVzLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBzdGF0dXMuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwIGIvd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AKaW5kZXggNzVmOTY0Zi4uMWRmYzEzOCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AKKysrIGIvd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdGFibGUuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0YWJsZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHRhYmxlIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRhYmxlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0YWJsZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwIGIvd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwCmluZGV4IGRmYjBjZjEuLjg5YzA4ZTkgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcAorKysgYi93aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdGVzdC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRlc3QuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB0ZXN0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRlc3QuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRlc3QuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AgYi93aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwCmluZGV4IGEzZWJkZTUuLmMzZWNhMDIgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AKKysrIGIvd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFuc2xhdGUuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFuc2xhdGUuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB0cmFuc2xhdGUgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhbnNsYXRlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFuc2xhdGUuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCBiL3dpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcAppbmRleCA4ZDI3ZWUxLi5jMzRmZmQ4IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AKKysrIGIvd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYXAuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFwLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdHJhcCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFwLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFwLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4gYi93aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4KaW5kZXggZWI3MmZhNy4uMmZhNWNjYiAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbgpAQCAtMiw3ICsyLDYgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KLVNTTD0KIExJTktUWVBFPQogCiAjIFNldCB0byAxIHRvIGFsbG93IHRoZSBidWlsZGluZyB1c2luZyB0aGUgRExMIHZlcnNpb24gb2YgU05NUExJQi4KQEAgLTI2LDYgKzI1LDcgQEAKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0zNCw3ICszNCw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC03Nyw3ICs3Nyw3IEBACiBCU0MzMl9TQlJTPSBcCiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi5cYmluXCQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcJChQUk9HTkFNRSkub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXApAQCAtODgsNiArODgsOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCkBAIC0xMTEsNiArMTEzLDcgQEAKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wZGIiCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMTE5LDcgKzEyMiw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTE2OSw3ICsxNzIsNyBAQAogPDwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXCQoUFJPR05BTUUpLm9iaiIgXAogCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKQEAgLTE4MCw2ICsxODMsOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCkBAIC0xOTgsMjUgKzIwMyw2IEBACiAhRU5ESUYgCiAKIAotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogU09VUkNFPS4uXC4uXGFwcHNcJChQUk9HTkFNRSkuYwogCiAhSUYgICIkKENGRykiID09ICJyZWxlYXNlIgpAQCAtMzA2LDcgKzI5MiwzIEBACiAKIAogIUVORElGIAotCi0KLSFFTkRJRiAKLQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AgYi93aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcAppbmRleCBkZTQ0NzM3Li45ZjQ5Mzg5IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcAorKysgYi93aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFwZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdHJhcGQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCkBAIC04OCw2ICs4OCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFwcHNcc25tcHRyYXBkX2hhbmRsZXJzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwIGIvd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcAppbmRleCBkYjQzZjJlLi5hMWMwMTI0IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwCisrKyBiL3dpbjMyL3NubXB1c20vc25tcHVzbS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdXNtLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdXNtLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdXNtIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHVzbS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdXNtLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBiL3dpbjMyL3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjNjZjgKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AgYi93aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AKaW5kZXggMDg1NjgzMi4uMmZkNTNmZCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwCisrKyBiL3dpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB2YWNtLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdmFjbS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHZhY20gLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdmFjbS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdmFjbS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwIGIvd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwCmluZGV4IDVkODE5NTcuLjY3NTk4ZjEgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcAorKysgYi93aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wd2Fsay5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHdhbGsuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB3YWxrIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHdhbGsuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHdhbGsuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaCBiL3dpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmYxNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOCituZXRzbm1wX3VkcF9iYXNlX2N0b3IoKTsKK25ldHNubXBfdWRwX2N0b3IoKTsKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KK25ldHNubXBfdGNwX2N0b3IoKTsKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorbmV0c25tcF9hbGlhc19jdG9yKCk7CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorbmV0c25tcF91ZHBpcHY2X2N0b3IoKTsKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCituZXRzbm1wX3RjcGlwdjZfY3RvcigpOworI2VuZGlmCmRpZmYgLS1naXQgYS93aW4zMi93aW4zMi5kc3cgYi93aW4zMi93aW4zMi5kc3cKaW5kZXggNDc2M2MzNy4uNWFkMWFiMCAxMDA2NDQKLS0tIGEvd2luMzIvd2luMzIuZHN3CisrKyBiL3dpbjMyL3dpbjMyLmRzdwpAQCAtMTEsMzAgKzExLDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJoZWxwZXJzIj0iLlxsaWJoZWxwZXJzXGxpYmhlbHBlcnMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGlic25tcCI9Ii5cbGlic25tcFxsaWJzbm1wLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTQ3LDYgKzI2LDIxIEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYnNubXAiPSIuXGxpYnNubXBcbGlic25tcC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTU5LDYgKzUzLDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC03MSw5ICs2OCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTg2LDkgKzgzLDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTAxLDkgKzk4LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTE2LDE4ICsxMTMsMTUgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliaGVscGVycw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTQwLDkgKzEzNCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTE1NSw5ICsxNDksOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xNzAsOSArMTY0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTg1LDkgKzE3OSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTIwMCw5ICsxOTQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yMTUsOSArMjA5LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjMwLDkgKzIyNCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTI0NSw5ICsyMzksOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yNjAsOSArMjU0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjc1LDkgKzI2OSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTI5MCw5ICsyODQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0zMDUsMjEgKzI5OSwxOCBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJoZWxwZXJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJuZXRzbm1wdHJhcGQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJuZXRzbm1wdHJhcGQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0zMzIsOSArMzIzLDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMzQ3LDkgKzMzOCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTM2Miw5ICszNTMsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmRpZmYgLS1naXQgYS93aW4zMi93aW4zMmRsbC5kc3cgYi93aW4zMi93aW4zMmRsbC5kc3cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmMyNGY1YQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3dpbjMyZGxsLmRzdwpAQCAtMCwwICsxLDM3NCBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiZW5jb2RlX2tleWNoYW5nZSI9Ii5cZW5jb2RlX2tleWNoYW5nZVxlbmNvZGVfa2V5Y2hhbmdlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGliYWdlbnQiPSIuXGxpYmFnZW50XGxpYmFnZW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGlibmV0c25tcHRyYXBkIj0iLlxsaWJuZXRzbm1wdHJhcGRcbGlibmV0c25tcHRyYXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGlic25tcF9kbGwiPSIuXGxpYnNubXBfZGxsXGxpYnNubXBfZGxsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogIm5ldHNubXBtaWJzIj0iLlxuZXRzbm1wbWlic1xuZXRzbm1wbWlicy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBidWxrZ2V0Ij0iLlxzbm1wYnVsa2dldFxzbm1wYnVsa2dldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBidWxrd2FsayI9Ii5cc25tcGJ1bGt3YWxrXHNubXBidWxrd2Fsay5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBkIj0iLlxzbm1wZFxzbm1wZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wZGVsdGEiPSIuXHNubXBkZWx0YVxzbm1wZGVsdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wZGYiPSIuXHNubXBkZlxzbm1wZGYuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wZ2V0Ij0iLlxzbm1wZ2V0XHNubXBnZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wZ2V0bmV4dCI9Ii5cc25tcGdldG5leHRcc25tcGdldG5leHQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wbmV0c3RhdCI9Ii5cc25tcG5ldHN0YXRcc25tcG5ldHN0YXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wc2V0Ij0iLlxzbm1wc2V0XHNubXBzZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wc3RhdHVzIj0iLlxzbm1wc3RhdHVzXHNubXBzdGF0dXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdGFibGUiPSIuXHNubXB0YWJsZVxzbm1wdGFibGUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdGVzdCI9Ii5cc25tcHRlc3Rcc25tcHRlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdHJhbnNsYXRlIj0iLlxzbm1wdHJhbnNsYXRlXHNubXB0cmFuc2xhdGUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdHJhcCI9Ii5cc25tcHRyYXBcc25tcHRyYXAuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdHJhcGQiPSIuXHNubXB0cmFwZFxzbm1wdHJhcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYm5ldHNubXB0cmFwZA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHVzbSI9Ii5cc25tcHVzbVxzbm1wdXNtLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHZhY20iPSIuXHNubXB2YWNtXHNubXB2YWNtLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHdhbGsiPSIuXHNubXB3YWxrXHNubXB3YWxrLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS93aW4zMi93aW4zMnNkay5kc3cgYi93aW4zMi93aW4zMnNkay5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYzZjYmEuLjAwMDAwMDAKLS0tIGEvd2luMzIvd2luMzJzZGsuZHN3CisrKyAvZGV2L251bGwKQEAgLTEsMzgzICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYmFnZW50Ij0iLlxsaWJhZ2VudFxsaWJhZ2VudC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJoZWxwZXJzIj0iLlxsaWJoZWxwZXJzXGxpYmhlbHBlcnMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGlic25tcCI9Ii5cbGlic25tcFxsaWJzbm1wLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm5ldHNubXBtaWJzc2RrIj0iLlxuZXRzbm1wbWlic3Nka1xuZXRzbm1wbWlic3Nkay5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJuZXRzbm1wdHJhcGQiPSIuXGxpYm5ldHNubXB0cmFwZFxsaWJuZXRzbm1wdHJhcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiZW5jb2RlX2tleWNoYW5nZSI9Ii5cZW5jb2RlX2tleWNoYW5nZVxlbmNvZGVfa2V5Y2hhbmdlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wYnVsa2dldCI9Ii5cc25tcGJ1bGtnZXRcc25tcGJ1bGtnZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBidWxrd2FsayI9Ii5cc25tcGJ1bGt3YWxrXHNubXBidWxrd2Fsay5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGRzZGsiPSIuXHNubXBkc2RrXHNubXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJoZWxwZXJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnNzZGsNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBkZWx0YSI9Ii5cc25tcGRlbHRhXHNubXBkZWx0YS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGRmIj0iLlxzbm1wZGZcc25tcGRmLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wZ2V0Ij0iLlxzbm1wZ2V0XHNubXBnZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBnZXRuZXh0Ij0iLlxzbm1wZ2V0bmV4dFxzbm1wZ2V0bmV4dC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcG5ldHN0YXQiPSIuXHNubXBuZXRzdGF0XHNubXBuZXRzdGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wc2V0Ij0iLlxzbm1wc2V0XHNubXBzZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBzdGF0dXMiPSIuXHNubXBzdGF0dXNcc25tcHN0YXR1cy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHRhYmxlIj0iLlxzbm1wdGFibGVcc25tcHRhYmxlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdGVzdCI9Ii5cc25tcHRlc3Rcc25tcHRlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB0cmFuc2xhdGUiPSIuXHNubXB0cmFuc2xhdGVcc25tcHRyYW5zbGF0ZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHRyYXAiPSIuXHNubXB0cmFwXHNubXB0cmFwLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdHJhcGQiPSIuXHNubXB0cmFwZFxzbm1wdHJhcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmhlbHBlcnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlic3Nkaw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYm5ldHNubXB0cmFwZA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHVzbSI9Ii5cc25tcHVzbVxzbm1wdXNtLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdmFjbSI9Ii5cc25tcHZhY21cc25tcHZhY20uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB3YWxrIj0iLlxzbm1wd2Fsa1xzbm1wd2Fsay5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1HbG9iYWw6DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTwzPg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCg==